summaryrefslogtreecommitdiff
path: root/thirdparty
diff options
context:
space:
mode:
Diffstat (limited to 'thirdparty')
-rw-r--r--thirdparty/README.md75
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3BroadphaseCallback.h38
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.cpp1352
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.h1332
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.cpp808
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h197
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPair.h70
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.cpp559
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.h427
-rw-r--r--thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h56
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Config.h39
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Contact4.h55
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.cpp500
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h55
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.cpp297
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.h92
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h25
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h28
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h19
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhTraversal.h123
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ClipFaces.h171
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h69
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h36
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactConvexConvexSAT.h486
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactSphereSphere.h153
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h38
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindConcaveSatAxis.h797
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindSeparatingAxis.h197
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3MprPenetration.h888
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3NewContactReduction.h175
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h88
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ReduceContacts.h89
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h31
-rw-r--r--thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3UpdateAabbs.h35
-rw-r--r--thirdparty/bullet/Bullet3Common/b3AlignedAllocator.cpp186
-rw-r--r--thirdparty/bullet/Bullet3Common/b3AlignedAllocator.h110
-rw-r--r--thirdparty/bullet/Bullet3Common/b3AlignedObjectArray.h522
-rw-r--r--thirdparty/bullet/Bullet3Common/b3CommandLineArgs.h106
-rw-r--r--thirdparty/bullet/Bullet3Common/b3FileUtils.h133
-rw-r--r--thirdparty/bullet/Bullet3Common/b3HashMap.h462
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Logging.cpp145
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Logging.h74
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Matrix3x3.h1354
-rw-r--r--thirdparty/bullet/Bullet3Common/b3MinMax.h69
-rw-r--r--thirdparty/bullet/Bullet3Common/b3PoolAllocator.h121
-rw-r--r--thirdparty/bullet/Bullet3Common/b3QuadWord.h242
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Quaternion.h908
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Random.h46
-rw-r--r--thirdparty/bullet/Bullet3Common/b3ResizablePool.h171
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Scalar.h689
-rw-r--r--thirdparty/bullet/Bullet3Common/b3StackAlloc.h118
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Transform.h286
-rw-r--r--thirdparty/bullet/Bullet3Common/b3TransformUtil.h210
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Vector3.cpp1637
-rw-r--r--thirdparty/bullet/Bullet3Common/b3Vector3.h1303
-rw-r--r--thirdparty/bullet/Bullet3Common/shared/b3Float4.h90
-rw-r--r--thirdparty/bullet/Bullet3Common/shared/b3Int2.h63
-rw-r--r--thirdparty/bullet/Bullet3Common/shared/b3Int4.h71
-rw-r--r--thirdparty/bullet/Bullet3Common/shared/b3Mat3x3.h157
-rw-r--r--thirdparty/bullet/Bullet3Common/shared/b3PlatformDefinitions.h41
-rw-r--r--thirdparty/bullet/Bullet3Common/shared/b3Quat.h100
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3ContactSolverInfo.h149
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.cpp103
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.h34
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.cpp737
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.h517
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3JacobianEntry.h150
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.cpp1696
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.h133
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.cpp190
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h153
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverBody.h281
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverConstraint.h73
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.cpp151
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h469
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.cpp447
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.h62
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/shared/b3ContactConstraint4.h31
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/shared/b3ConvertConstraint4.h148
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/shared/b3Inertia.h14
-rw-r--r--thirdparty/bullet/Bullet3Dynamics/shared/b3IntegrateTransforms.h106
-rw-r--r--thirdparty/bullet/Bullet3Geometry/b3AabbUtil.h217
-rw-r--r--thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.cpp2745
-rw-r--r--thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.h99
-rw-r--r--thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.cpp174
-rw-r--r--thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.h36
-rw-r--r--thirdparty/bullet/Bullet3Geometry/b3GrahamScan2dConvexHull.h116
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h42
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.cpp338
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.h80
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.cpp557
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.h125
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.cpp76
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.h66
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.cpp1298
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.h143
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h13
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphase.cl216
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphaseKernels.h198
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvh.cl767
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvhKernels.h728
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sap.cl389
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sapKernels.h341
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h51
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp963
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h190
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3BvhInfo.h17
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.cpp253
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.h62
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.cpp4408
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.h106
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexPolyhedronCL.h7
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.cpp1062
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.h79
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.cpp363
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.h56
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.cpp1254
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.h511
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.cpp207
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.h158
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3SupportMappings.h34
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.cpp24
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.h37
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.cpp90
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.h128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VectorFloat4.h10
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.cpp574
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.h164
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.cl283
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.h257
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mpr.cl311
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mprKernels.h1445
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.cl1374
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.h1288
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/sat.cl2018
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.cl1888
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.h2098
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcave.cl1220
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcaveKernels.h1456
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satKernels.h2103
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.cpp203
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h64
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BufferInfoCL.h18
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.cpp119
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.h52
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp296
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h300
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.cpp120
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h35
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.cpp120
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.h36
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.cpp646
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h84
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernels.cl106
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernelsCL.h86
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernels.cl128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernelsCL.h131
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernels.cl107
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernelsCL.h90
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanFloat4Kernels.cl154
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernels.cl154
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsCL.h128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsFloat4CL.h128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32Kernels.cl1071
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32KernelsCL.h909
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.cpp374
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.h28
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.cl439
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.h380
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuConstraint4.h17
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.cpp134
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.h128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.cpp1305
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.h56
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.cpp1013
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h101
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhaseInternalData.h89
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.cpp1068
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.h76
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.cpp1529
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.h37
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.cpp677
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h70
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipelineInternalData.h68
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverBody.h210
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverConstraint.h73
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.cpp1128
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h110
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.cl353
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.h387
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.cl231
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.h290
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.cl32
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.h432
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.cl877
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.h720
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.cl501
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.h392
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.cl527
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.h420
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.cl277
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.h702
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.cl613
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.h600
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.cl968
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.h908
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.cl22
-rw-r--r--thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.h482
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h987
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp400
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h74
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp69
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h84
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h40
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp616
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h101
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h149
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp1653
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h158
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp18062
-rw-r--r--thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h601
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp33
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h48
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3Internal.h954
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h79
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp18
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h248
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp22
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h75
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.cpp1357
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.h1578
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp828
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h146
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.cpp20
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h110
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp611
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h434
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h41
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp1341
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h543
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp325
-rw-r--r--thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h148
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp215
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h43
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp47
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h35
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp411
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h63
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp80
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h63
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp767
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h40
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h43
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h43
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp289
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h169
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.cpp162
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.h38
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.cpp138
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h690
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h49
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.cpp1625
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h513
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.cpp1087
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.h169
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp390
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h99
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp413
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h82
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp211
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h83
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp374
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h117
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp873
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h101
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp172
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h82
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp362
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h111
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp30
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h52
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.cpp166
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.h162
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp244
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.h149
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp900
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h44
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.cpp203
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h163
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp445
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h75
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp209
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h73
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp105
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h64
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp82
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h65
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.cpp74
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.h123
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.cpp37
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.h339
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.cpp45
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.h291
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp462
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h144
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.cpp148
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h182
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h24
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.cpp119
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.h174
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.cpp335
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.h207
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.cpp24
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.h62
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.cpp142
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.h175
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.cpp86
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h77
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp244
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h116
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.cpp137
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h208
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp129
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h103
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp302
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h59
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.cpp458
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.h75
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp283
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h68
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.cpp253
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.h206
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.cpp42
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.h65
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp950
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h250
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMaterial.h38
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp522
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.h127
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp71
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h59
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.cpp169
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h95
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp43
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h115
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.cpp364
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h56
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp549
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h106
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp115
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h86
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.cpp95
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.h29
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.cpp421
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.h60
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.cpp65
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.h71
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp93
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h103
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp380
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h153
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.cpp203
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h71
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.cpp28
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h63
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.cpp24
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h37
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp90
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h128
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp84
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h83
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h238
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.cpp167
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h69
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp179
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h82
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleShape.h175
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.cpp150
-rw-r--r--thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h84
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btBoxCollision.h620
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btClipPolygon.h173
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btCompoundFromGimpact.h105
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.cpp175
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.h65
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btContactProcessingStructs.h105
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.cpp464
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.h309
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvhStructs.h85
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp866
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h288
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h56
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp486
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h298
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvhStructs.h91
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.cpp279
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.h1115
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.cpp266
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h153
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btGeometryOperations.h198
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btQuantization.h79
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.cpp203
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h169
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_array.h318
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h536
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_bitset.h117
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_box_collision.h578
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.cpp176
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.h640
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_clip_polygon.h199
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_contact.cpp142
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_contact.h168
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_geom_types.h92
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_geometry.h42
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_hash_table.h857
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_linear_math.h1488
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_math.h148
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_memory.cpp132
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_memory.h177
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_pair.h28
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_radixsort.h386
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.cpp619
-rw-r--r--thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.h368
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btComputeGjkEpaPenetration.h354
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp222
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h53
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp20
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h90
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h35
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h85
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkCollisionDescription.h39
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp164
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h46
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp1104
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h73
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa3.h1063
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp81
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h40
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp1183
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h93
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h174
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp336
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h36
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMprPenetration.h884
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp450
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h374
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h58
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp548
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h42
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp175
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h72
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h58
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp143
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h47
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp577
-rw-r--r--thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h173
-rw-r--r--thirdparty/bullet/BulletDynamics/Character/btCharacterControllerInterface.h46
-rw-r--r--thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.cpp996
-rw-r--r--thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.h200
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.cpp1084
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.h62
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp1116
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h423
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h59
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.cpp153
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h65
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h177
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.cpp32
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.h30
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.cpp52
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.h146
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp975
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h615
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp1243
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h667
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp169
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h135
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp61
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h55
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp1083
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h480
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h150
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.cpp368
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.h57
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp205
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h173
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp1875
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h215
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.cpp1554
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h150
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp823
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h349
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp239
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h101
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h285
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h74
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp214
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h532
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp80
-rw-r--r--thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h59
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btActionInterface.h41
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp1469
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h244
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp263
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.h131
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h174
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp505
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.h687
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp260
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h84
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.cpp696
-rw-r--r--thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.h112
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.cpp2461
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.h953
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp389
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.h215
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp1752
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h101
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp895
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h126
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.cpp215
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.h91
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.cpp181
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.h115
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyInplaceSolverIslandCallback.h247
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointFeedback.h25
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp197
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h63
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp183
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.h77
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLink.h303
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLinkCollider.h195
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.cpp966
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h187
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp216
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.h64
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.cpp234
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.h102
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySolverConstraint.h90
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp180
-rw-r--r--thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h118
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.cpp2158
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.h73
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigSolver.h106
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.cpp369
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.h102
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeSolver.h338
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp620
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.h88
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h33
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btPATHSolver.h142
-rw-r--r--thirdparty/bullet/BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h107
-rw-r--r--thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.cpp708
-rw-r--r--thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h218
-rw-r--r--thirdparty/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h33
-rw-r--r--thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.cpp51
-rw-r--r--thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.h116
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/IDConfig.hpp107
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/IDConfigBuiltin.hpp38
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/IDConfigEigen.hpp32
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/IDErrorMessages.hpp31
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/IDMath.cpp510
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/IDMath.hpp100
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.cpp548
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.hpp367
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/IDEigenInterface.hpp39
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/IDLinearMathInterface.hpp202
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/IDMatVec.hpp489
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.cpp1286
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.hpp288
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.cpp131
-rw-r--r--thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.hpp113
-rw-r--r--thirdparty/bullet/BulletSoftBody/DeformableBodyInplaceSolverIslandCallback.h45
-rw-r--r--thirdparty/bullet/BulletSoftBody/btCGProjection.h104
-rw-r--r--thirdparty/bullet/BulletSoftBody/btConjugateGradient.h117
-rw-r--r--thirdparty/bullet/BulletSoftBody/btConjugateResidual.h112
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.cpp146
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.h60
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.cpp299
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.h198
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.cpp506
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.h160
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.cpp720
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.h284
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.cpp639
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.h99
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableCorotatedForce.h124
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableGravityForce.h105
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableLagrangianForce.h372
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableLinearElasticityForce.h462
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableMassSpringForce.h301
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableMousePickingForce.h162
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.cpp144
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.h61
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.cpp814
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.h316
-rw-r--r--thirdparty/bullet/BulletSoftBody/btDeformableNeoHookeanForce.h420
-rw-r--r--thirdparty/bullet/BulletSoftBody/btKrylovSolver.h107
-rw-r--r--thirdparty/bullet/BulletSoftBody/btPreconditioner.h285
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBody.cpp4730
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBody.h1394
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp316
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h147
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyData.h212
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.cpp1663
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.h167
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyInternals.h2108
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp131
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h43
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h160
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftBodySolvers.h147
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.cpp355
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.h105
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp78
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h71
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.cpp346
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h102
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp48
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h65
-rw-r--r--thirdparty/bullet/BulletSoftBody/btSparseSDF.h372
-rw-r--r--thirdparty/bullet/BulletSoftBody/poly34.cpp447
-rw-r--r--thirdparty/bullet/BulletSoftBody/poly34.h38
-rw-r--r--thirdparty/bullet/LICENSE.txt15
-rw-r--r--thirdparty/bullet/LinearMath/TaskScheduler/btTaskScheduler.cpp792
-rw-r--r--thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportInterface.h64
-rw-r--r--thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportPosix.cpp353
-rw-r--r--thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp458
-rw-r--r--thirdparty/bullet/LinearMath/btAabbUtil2.h217
-rw-r--r--thirdparty/bullet/LinearMath/btAlignedAllocator.cpp263
-rw-r--r--thirdparty/bullet/LinearMath/btAlignedAllocator.h115
-rw-r--r--thirdparty/bullet/LinearMath/btAlignedObjectArray.h504
-rw-r--r--thirdparty/bullet/LinearMath/btConvexHull.cpp1120
-rw-r--r--thirdparty/bullet/LinearMath/btConvexHull.h233
-rw-r--r--thirdparty/bullet/LinearMath/btConvexHullComputer.cpp2760
-rw-r--r--thirdparty/bullet/LinearMath/btConvexHullComputer.h102
-rw-r--r--thirdparty/bullet/LinearMath/btCpuFeatureUtility.h88
-rw-r--r--thirdparty/bullet/LinearMath/btDefaultMotionState.h40
-rw-r--r--thirdparty/bullet/LinearMath/btGeometryUtil.cpp174
-rw-r--r--thirdparty/bullet/LinearMath/btGeometryUtil.h36
-rw-r--r--thirdparty/bullet/LinearMath/btGrahamScan2dConvexHull.h129
-rw-r--r--thirdparty/bullet/LinearMath/btHashMap.h470
-rw-r--r--thirdparty/bullet/LinearMath/btIDebugDraw.h473
-rw-r--r--thirdparty/bullet/LinearMath/btImplicitQRSVD.h916
-rw-r--r--thirdparty/bullet/LinearMath/btList.h73
-rw-r--r--thirdparty/bullet/LinearMath/btMatrix3x3.h1431
-rw-r--r--thirdparty/bullet/LinearMath/btMatrixX.h532
-rw-r--r--thirdparty/bullet/LinearMath/btMinMax.h69
-rw-r--r--thirdparty/bullet/LinearMath/btModifiedGramSchmidt.h83
-rw-r--r--thirdparty/bullet/LinearMath/btMotionState.h36
-rw-r--r--thirdparty/bullet/LinearMath/btPolarDecomposition.cpp94
-rw-r--r--thirdparty/bullet/LinearMath/btPolarDecomposition.h69
-rw-r--r--thirdparty/bullet/LinearMath/btPoolAllocator.h130
-rw-r--r--thirdparty/bullet/LinearMath/btQuadWord.h238
-rw-r--r--thirdparty/bullet/LinearMath/btQuaternion.h1021
-rw-r--r--thirdparty/bullet/LinearMath/btQuickprof.cpp805
-rw-r--r--thirdparty/bullet/LinearMath/btQuickprof.h200
-rw-r--r--thirdparty/bullet/LinearMath/btRandom.h39
-rw-r--r--thirdparty/bullet/LinearMath/btReducedVector.cpp170
-rw-r--r--thirdparty/bullet/LinearMath/btReducedVector.h320
-rw-r--r--thirdparty/bullet/LinearMath/btScalar.h832
-rw-r--r--thirdparty/bullet/LinearMath/btSerializer.cpp692
-rw-r--r--thirdparty/bullet/LinearMath/btSerializer.h866
-rw-r--r--thirdparty/bullet/LinearMath/btSerializer64.cpp692
-rw-r--r--thirdparty/bullet/LinearMath/btSpatialAlgebra.h389
-rw-r--r--thirdparty/bullet/LinearMath/btStackAlloc.h118
-rw-r--r--thirdparty/bullet/LinearMath/btThreads.cpp792
-rw-r--r--thirdparty/bullet/LinearMath/btThreads.h177
-rw-r--r--thirdparty/bullet/LinearMath/btTransform.h286
-rw-r--r--thirdparty/bullet/LinearMath/btTransformUtil.h223
-rw-r--r--thirdparty/bullet/LinearMath/btVector3.cpp1664
-rw-r--r--thirdparty/bullet/LinearMath/btVector3.h1336
-rw-r--r--thirdparty/bullet/VERSION.txt1
-rw-r--r--thirdparty/bullet/btBulletCollisionAll.cpp97
-rw-r--r--thirdparty/bullet/btBulletCollisionCommon.h65
-rw-r--r--thirdparty/bullet/btBulletDynamicsAll.cpp42
-rw-r--r--thirdparty/bullet/btBulletDynamicsCommon.h43
-rw-r--r--thirdparty/bullet/btLinearMathAll.cpp15
-rw-r--r--thirdparty/bullet/clew/clew.c374
-rw-r--r--thirdparty/bullet/clew/clew.h2708
-rw-r--r--thirdparty/bullet/patches/bullet-fix-warnings.patch42
-rw-r--r--thirdparty/bullet/patches/fix-win32-scheduler-uwp.patch24
-rw-r--r--thirdparty/cvtt/ConvectionKernels.cpp7586
-rw-r--r--thirdparty/cvtt/ConvectionKernels.h169
-rw-r--r--thirdparty/cvtt/ConvectionKernels_API.cpp346
-rw-r--r--thirdparty/cvtt/ConvectionKernels_AggregatedError.h55
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC67.cpp3485
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC67.h99
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC6H_IO.cpp881
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC6H_IO.h16
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC7_Prio.h17
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC7_PrioData.cpp1301
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BC7_SingleColor.h2
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BCCommon.cpp46
-rw-r--r--thirdparty/cvtt/ConvectionKernels_BCCommon.h104
-rw-r--r--thirdparty/cvtt/ConvectionKernels_Config.h12
-rw-r--r--thirdparty/cvtt/ConvectionKernels_ETC.cpp3147
-rw-r--r--thirdparty/cvtt/ConvectionKernels_ETC.h126
-rw-r--r--thirdparty/cvtt/ConvectionKernels_ETC1.h29
-rw-r--r--thirdparty/cvtt/ConvectionKernels_ETC2.h35
-rw-r--r--thirdparty/cvtt/ConvectionKernels_ETC2_Rounding.h27
-rw-r--r--thirdparty/cvtt/ConvectionKernels_EndpointRefiner.h181
-rw-r--r--thirdparty/cvtt/ConvectionKernels_EndpointSelector.h153
-rw-r--r--thirdparty/cvtt/ConvectionKernels_FakeBT709_Rounding.h282
-rw-r--r--thirdparty/cvtt/ConvectionKernels_IndexSelector.cpp66
-rw-r--r--thirdparty/cvtt/ConvectionKernels_IndexSelector.h147
-rw-r--r--thirdparty/cvtt/ConvectionKernels_IndexSelectorHDR.h155
-rw-r--r--thirdparty/cvtt/ConvectionKernels_PackedCovarianceMatrix.h68
-rw-r--r--thirdparty/cvtt/ConvectionKernels_ParallelMath.h1816
-rw-r--r--thirdparty/cvtt/ConvectionKernels_S3TC.cpp1054
-rw-r--r--thirdparty/cvtt/ConvectionKernels_S3TC.h51
-rw-r--r--thirdparty/cvtt/ConvectionKernels_S3TC_SingleColor.h304
-rw-r--r--thirdparty/cvtt/ConvectionKernels_SingleFile.cpp48
-rw-r--r--thirdparty/cvtt/ConvectionKernels_UnfinishedEndpoints.h121
-rw-r--r--thirdparty/cvtt/ConvectionKernels_Util.cpp88
-rw-r--r--thirdparty/cvtt/ConvectionKernels_Util.h21
-rw-r--r--thirdparty/cvtt/etc_notes.txt27
-rw-r--r--thirdparty/glslang/LICENSE.txt692
-rw-r--r--thirdparty/glslang/SPIRV/GlslangToSpv.cpp219
-rw-r--r--thirdparty/glslang/SPIRV/SPVRemapper.cpp18
-rw-r--r--thirdparty/glslang/SPIRV/SpvBuilder.cpp31
-rw-r--r--thirdparty/glslang/SPIRV/SpvBuilder.h1
-rw-r--r--thirdparty/glslang/SPIRV/SpvPostProcess.cpp39
-rw-r--r--thirdparty/glslang/SPIRV/SpvTools.cpp2
-rw-r--r--thirdparty/glslang/SPIRV/disassemble.cpp47
-rw-r--r--thirdparty/glslang/SPIRV/doc.cpp6
-rw-r--r--thirdparty/glslang/SPIRV/spirv.hpp209
-rw-r--r--thirdparty/glslang/SPIRV/spvIR.h22
-rw-r--r--thirdparty/glslang/glslang/Include/Common.h37
-rw-r--r--thirdparty/glslang/glslang/Include/PoolAlloc.h2
-rw-r--r--thirdparty/glslang/glslang/Include/SpirvIntrinsics.h18
-rw-r--r--thirdparty/glslang/glslang/Include/Types.h31
-rw-r--r--thirdparty/glslang/glslang/Include/glslang_c_interface.h4
-rw-r--r--thirdparty/glslang/glslang/Include/glslang_c_shader_types.h26
-rw-r--r--thirdparty/glslang/glslang/Include/intermediate.h1
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/Constant.cpp35
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/Initialize.cpp209
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/Intermediate.cpp56
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp13
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp42
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/ParseHelper.h5
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp9
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp33
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp29
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/SymbolTable.h31
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/Versions.cpp6
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/Versions.h2
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/attribute.cpp2
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/glslang.y13
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp4082
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/intermOut.cpp31
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/iomapper.cpp88
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/iomapper.h18
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/linkValidate.cpp35
-rw-r--r--thirdparty/glslang/glslang/MachineIndependent/localintermediate.h16
-rw-r--r--thirdparty/glslang/glslang/OSDependent/Unix/ossource.cpp8
-rw-r--r--thirdparty/glslang/glslang/Public/ShaderLang.h14
-rw-r--r--thirdparty/glslang/glslang/build_info.h2
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-common.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-algs.hh34
-rw-r--r--thirdparty/harfbuzz/src/hb-array.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-bimap.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer-verify.cc422
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.cc187
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.h154
-rw-r--r--thirdparty/harfbuzz/src/hb-buffer.hh186
-rw-r--r--thirdparty/harfbuzz/src/hb-cff-interp-common.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-cff-interp-cs-common.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-common.cc78
-rw-r--r--thirdparty/harfbuzz/src/hb-common.h16
-rw-r--r--thirdparty/harfbuzz/src/hb-config.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-coretext.cc9
-rw-r--r--thirdparty/harfbuzz/src/hb-directwrite.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.cc376
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.h285
-rw-r--r--thirdparty/harfbuzz/src/hb-draw.hh246
-rw-r--r--thirdparty/harfbuzz/src/hb-face.cc23
-rw-r--r--thirdparty/harfbuzz/src/hb-font.cc273
-rw-r--r--thirdparty/harfbuzz/src/hb-font.h53
-rw-r--r--thirdparty/harfbuzz/src/hb-font.hh19
-rw-r--r--thirdparty/harfbuzz/src/hb-ft.cc82
-rw-r--r--thirdparty/harfbuzz/src/hb-gobject-structs.cc1
-rw-r--r--thirdparty/harfbuzz/src/hb-gobject-structs.h4
-rw-r--r--thirdparty/harfbuzz/src/hb-graphite2.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-iter.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-kern.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-machinery.hh20
-rw-r--r--thirdparty/harfbuzz/src/hb-map.hh71
-rw-r--r--thirdparty/harfbuzz/src/hb-meta.hh39
-rw-r--r--thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc177
-rw-r--r--thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh145
-rw-r--r--thirdparty/harfbuzz/src/hb-object.hh6
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff-common.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff1-table.cc34
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff1-table.hh42
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff2-table.cc22
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cff2-table.hh67
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-cmap-table.hh13
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh24
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-color.cc12
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-deprecated.h15
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-face-table-list.hh13
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-face.hh3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-font.cc21
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-glyf-table.hh74
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh179
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-common.hh21
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh17
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh180
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh22
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh304
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.cc309
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.h62
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-layout.hh5
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math-table.hh78
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math.cc45
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-math.h36
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-meta-table.hh8
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-metrics.cc184
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-metrics.h5
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-name-table.hh13
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-name.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh7
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-post-table.hh17
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh32
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc26
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-thai.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh4
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc19
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc7
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-shape.cc29
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-tag-table.hh97
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-tag.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh2
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh10
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh7
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-ot-var.h2
-rw-r--r--thirdparty/harfbuzz/src/hb-repacker.hh38
-rw-r--r--thirdparty/harfbuzz/src/hb-serialize.hh14
-rw-r--r--thirdparty/harfbuzz/src/hb-shape.cc18
-rw-r--r--thirdparty/harfbuzz/src/hb-static.cc37
-rw-r--r--thirdparty/harfbuzz/src/hb-style.cc16
-rw-r--r--thirdparty/harfbuzz/src/hb-style.h4
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff-common.hh102
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff1.cc42
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-cff2.cc43
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.cc169
-rw-r--r--thirdparty/harfbuzz/src/hb-subset-plan.hh9
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.cc37
-rw-r--r--thirdparty/harfbuzz/src/hb-subset.h46
-rw-r--r--thirdparty/harfbuzz/src/hb-uniscribe.cc3
-rw-r--r--thirdparty/harfbuzz/src/hb-vector.hh200
-rw-r--r--thirdparty/harfbuzz/src/hb-version.h6
-rw-r--r--thirdparty/harfbuzz/src/hb.hh2
-rw-r--r--thirdparty/libwebp/AUTHORS1
-rw-r--r--thirdparty/libwebp/src/dec/vp8_dec.c2
-rw-r--r--thirdparty/libwebp/src/dec/vp8i_dec.h2
-rw-r--r--thirdparty/libwebp/src/dec/vp8l_dec.c2
-rw-r--r--thirdparty/libwebp/src/demux/anim_decode.c40
-rw-r--r--thirdparty/libwebp/src/demux/demux.c2
-rw-r--r--thirdparty/libwebp/src/dsp/dsp.h7
-rw-r--r--thirdparty/libwebp/src/dsp/enc_neon.c2
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.c58
-rw-r--r--thirdparty/libwebp/src/dsp/lossless.h45
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_common.h2
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_enc.c2
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_mips_dsp_r2.c37
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_neon.c20
-rw-r--r--thirdparty/libwebp/src/dsp/lossless_sse2.c41
-rw-r--r--thirdparty/libwebp/src/dsp/msa_macro.h5
-rw-r--r--thirdparty/libwebp/src/dsp/neon.h7
-rw-r--r--thirdparty/libwebp/src/dsp/yuv.h2
-rw-r--r--thirdparty/libwebp/src/enc/frame_enc.c9
-rw-r--r--thirdparty/libwebp/src/enc/predictor_enc.c2
-rw-r--r--thirdparty/libwebp/src/enc/quant_enc.c58
-rw-r--r--thirdparty/libwebp/src/enc/vp8i_enc.h2
-rw-r--r--thirdparty/libwebp/src/mux/muxi.h2
-rw-r--r--thirdparty/libwebp/src/utils/huffman_encode_utils.c2
-rw-r--r--thirdparty/libwebp/src/utils/quant_levels_dec_utils.c2
-rw-r--r--thirdparty/libwebp/src/utils/utils.c2
-rw-r--r--thirdparty/libwebp/src/webp/decode.h2
-rw-r--r--thirdparty/mbedtls/include/godot_core_mbedtls_config.h5
-rw-r--r--thirdparty/misc/patches/polypartition-godot-types.patch87
-rw-r--r--thirdparty/misc/polypartition.cpp4
-rw-r--r--thirdparty/misc/stb_rect_pack.h35
-rw-r--r--thirdparty/msdfgen/core/edge-coloring.cpp4
-rw-r--r--thirdparty/msdfgen/core/equation-solver.cpp47
-rw-r--r--thirdparty/openxr/COPYING.adoc123
-rw-r--r--thirdparty/openxr/LICENSE202
-rw-r--r--thirdparty/openxr/include/openxr/openxr.h3925
-rw-r--r--thirdparty/openxr/include/openxr/openxr_platform.h675
-rw-r--r--thirdparty/openxr/include/openxr/openxr_platform_defines.h110
-rw-r--r--thirdparty/openxr/include/openxr/openxr_reflection.h2746
-rw-r--r--thirdparty/openxr/src/.clang-format10
-rw-r--r--thirdparty/openxr/src/common/extra_algorithms.h47
-rw-r--r--thirdparty/openxr/src/common/filesystem_utils.cpp322
-rw-r--r--thirdparty/openxr/src/common/filesystem_utils.hpp46
-rw-r--r--thirdparty/openxr/src/common/hex_and_handles.h108
-rw-r--r--thirdparty/openxr/src/common/loader_interfaces.h114
-rw-r--r--thirdparty/openxr/src/common/object_info.cpp276
-rw-r--r--thirdparty/openxr/src/common/object_info.h229
-rw-r--r--thirdparty/openxr/src/common/platform_utils.hpp345
-rw-r--r--thirdparty/openxr/src/common/stdfs_conditions.h45
-rw-r--r--thirdparty/openxr/src/common/xr_dependencies.h89
-rw-r--r--thirdparty/openxr/src/common/xr_linear.h787
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/AUTHORS115
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/LICENSE55
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h88
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h61
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/config.h150
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h43
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/json.h15
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h61
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/reader.h405
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/value.h935
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/version.h28
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/include/json/writer.h369
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp1992
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h138
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp1634
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl156
-rw-r--r--thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp1259
-rw-r--r--thirdparty/openxr/src/loader/.gitignore5
-rw-r--r--thirdparty/openxr/src/loader/android_utilities.cpp319
-rw-r--r--thirdparty/openxr/src/loader/android_utilities.h32
-rw-r--r--thirdparty/openxr/src/loader/api_layer_interface.cpp399
-rw-r--r--thirdparty/openxr/src/loader/api_layer_interface.hpp54
-rw-r--r--thirdparty/openxr/src/loader/exception_handling.hpp40
-rw-r--r--thirdparty/openxr/src/loader/loader_core.cpp847
-rw-r--r--thirdparty/openxr/src/loader/loader_instance.cpp303
-rw-r--r--thirdparty/openxr/src/loader/loader_instance.hpp77
-rw-r--r--thirdparty/openxr/src/loader/loader_logger.cpp239
-rw-r--r--thirdparty/openxr/src/loader/loader_logger.hpp194
-rw-r--r--thirdparty/openxr/src/loader/loader_logger_recorders.cpp291
-rw-r--r--thirdparty/openxr/src/loader/loader_logger_recorders.hpp40
-rw-r--r--thirdparty/openxr/src/loader/loader_platform.hpp204
-rw-r--r--thirdparty/openxr/src/loader/manifest_file.cpp845
-rw-r--r--thirdparty/openxr/src/loader/manifest_file.hpp103
-rw-r--r--thirdparty/openxr/src/loader/runtime_interface.cpp493
-rw-r--r--thirdparty/openxr/src/loader/runtime_interface.hpp84
-rw-r--r--thirdparty/openxr/src/loader/xr_generated_loader.cpp700
-rw-r--r--thirdparty/openxr/src/loader/xr_generated_loader.hpp252
-rw-r--r--thirdparty/openxr/src/xr_generated_dispatch_table.c347
-rw-r--r--thirdparty/openxr/src/xr_generated_dispatch_table.h355
-rw-r--r--thirdparty/spirv-reflect/include/spirv/unified1/spirv.h320
-rw-r--r--thirdparty/spirv-reflect/patches/specialization-constants.patch38
-rw-r--r--thirdparty/spirv-reflect/spirv_reflect.c211
-rw-r--r--thirdparty/spirv-reflect/spirv_reflect.h97
-rw-r--r--thirdparty/thorvg/AUTHORS4
-rw-r--r--thirdparty/thorvg/LICENSE2
-rw-r--r--thirdparty/thorvg/inc/config.h2
-rw-r--r--thirdparty/thorvg/inc/thorvg.h5
-rw-r--r--thirdparty/thorvg/patches/thorvg-pr1159-mingw-fix.patch73
-rw-r--r--thirdparty/thorvg/patches/thorvg-pr1166-vs2017-minmax.patch49
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwCommon.h3
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwFill.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwImage.cpp6
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwMath.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwMemPool.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRaster.cpp92
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterAvx.h2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterC.h2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterNeon.h6
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmap.h2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmapInternal.h8
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp5
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.h2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwRle.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwShape.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/sw_engine/tvgSwStroke.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgAccessor.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgArray.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgBezier.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgBezier.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgBinaryDesc.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgCanvas.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgCanvasImpl.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgCommon.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgFill.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgFill.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgGlCanvas.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgInitializer.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgIteratorAccessor.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgLinearGradient.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgLoadModule.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgLoader.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgLoader.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgLzw.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgLzw.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgMath.h4
-rw-r--r--thirdparty/thorvg/src/lib/tvgPaint.cpp8
-rw-r--r--thirdparty/thorvg/src/lib/tvgPaint.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgPicture.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgPictureImpl.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgRadialGradient.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgRender.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgRender.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgSaveModule.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgSaver.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgScene.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgSceneImpl.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgShape.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgShapeImpl.h2
-rw-r--r--thirdparty/thorvg/src/lib/tvgSwCanvas.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgTaskScheduler.cpp2
-rw-r--r--thirdparty/thorvg/src/lib/tvgTaskScheduler.h2
-rw-r--r--thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.h2
-rw-r--r--thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.cpp7
-rw-r--r--thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.h2
-rw-r--r--thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.cpp7
-rw-r--r--thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.h2
-rw-r--r--thirdparty/thorvg/src/loaders/jpg/tvgJpgd.cpp21
-rw-r--r--thirdparty/thorvg/src/loaders/jpg/tvgJpgd.h2
-rw-r--r--thirdparty/thorvg/src/loaders/png/tvgLodePng.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/png/tvgLodePng.h2
-rw-r--r--thirdparty/thorvg/src/loaders/png/tvgPngLoader.cpp11
-rw-r--r--thirdparty/thorvg/src/loaders/png/tvgPngLoader.h2
-rw-r--r--thirdparty/thorvg/src/loaders/raw/tvgRawLoader.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/raw/tvgRawLoader.h2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp186
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.h34
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp571
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.h2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h49
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgPath.h2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp134
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.h2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.h2
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp67
-rw-r--r--thirdparty/thorvg/src/loaders/svg/tvgXmlParser.h15
-rw-r--r--thirdparty/thorvg/src/loaders/tvg/tvgTvgBinInterpreter.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/tvg/tvgTvgCommon.h2
-rw-r--r--thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.cpp2
-rw-r--r--thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.h2
-rw-r--r--thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp2
-rw-r--r--thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.h2
-rwxr-xr-xthirdparty/thorvg/update-thorvg.sh2
-rw-r--r--thirdparty/volk/volk.c175
-rw-r--r--thirdparty/volk/volk.h117
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std.h461
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h109
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h109
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std.h575
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h63
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h125
-rw-r--r--thirdparty/vulkan/include/vk_video/vulkan_video_codecs_common.h18
-rw-r--r--thirdparty/vulkan/include/vulkan/vk_icd.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vk_platform.h4
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan.hpp2921
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_android.h17
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_beta.h267
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_core.h2440
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_directfb.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_enums.hpp7418
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h139
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_funcs.hpp5001
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_ggp.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_handles.hpp4712
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_hash.hpp13191
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_ios.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_macos.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_metal.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_raii.hpp7951
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_screen.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_structs.hpp49458
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_vi.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_wayland.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_win32.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_xcb.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_xlib.h2
-rw-r--r--thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h2
-rw-r--r--thirdparty/vulkan/patches/VMA-use-volk.patch6
-rw-r--r--thirdparty/vulkan/vk_enum_string_helper.h1679
-rw-r--r--thirdparty/vulkan/vk_mem_alloc.h22615
1087 files changed, 135002 insertions, 300037 deletions
diff --git a/thirdparty/README.md b/thirdparty/README.md
index 6333a0fe87..c5ce022d39 100644
--- a/thirdparty/README.md
+++ b/thirdparty/README.md
@@ -29,20 +29,6 @@ Files extracted from upstream source:
- `LICENSE`
-## bullet
-
-- Upstream: https://github.com/bulletphysics/bullet3
-- Version: 3.17 (ebe1916b90acae8b13cd8c6b637d8327cdc64e94, 2021)
-- License: zlib
-
-Files extracted from upstream source:
-
-- `src/*` apart from CMakeLists.txt and premake4.lua files
-- `LICENSE.txt`, and `VERSION` as `VERSION.txt`
-
-Includes some patches in the `patches` folder which have been sent upstream.
-
-
## certs
- Upstream: Mozilla, via https://github.com/bagder/ca-bundle
@@ -52,13 +38,13 @@ Includes some patches in the `patches` folder which have been sent upstream.
## cvtt
-- Upstream: https://github.com/elasota/cvtt
-- Version: 1.0.0-beta4 (cc8472a04ba110fe999c686d07af40f7839051fd, 2018)
+- Upstream: https://github.com/elasota/ConvectionKernels
+- Version: git (dc2dbbe0ae2cf2be06ef56d1021e2222a56c7fe2, 2021)
- License: MIT
Files extracted from upstream source:
-- all .cpp, .h, and .txt files in ConvectionKernels/
+- all .cpp, .h, and .txt files except the folders MakeTables and etc2packer.
## doctest
@@ -169,7 +155,7 @@ Files extracted from upstream source:
## glslang
- Upstream: https://github.com/KhronosGroup/glslang
-- Version: 11.6.0 (2fb89a0072ae7316af1c856f22663fde4928128a, 2021)
+- Version: 11.8.0 (c34bb3b6c55f6ab084124ad964be95a699700d34, 2022)
- License: glslang
Version should be kept in sync with the one of the used Vulkan SDK (see `vulkan`
@@ -182,8 +168,8 @@ copy of `DefaultTBuiltInResource` is in sync with the one defined upstream in
Files extracted from upstream source:
-- `glslang` (except `glslang/HLSL`), `OGLCompilersDLL`, `SPIRV`,
- minus the `CInterface` folders (depends on `StandAlone`)
+- `glslang` (except `glslang/HLSL` and `glslang/ExtensionHeaders`),
+ `OGLCompilersDLL`, `SPIRV`, w/o `CInterface` folders (depend on `StandAlone`)
- Run `cmake . && make` and copy generated `include/glslang/build_info.h`
to `glslang/build_info.h`
- `LICENSE.txt`
@@ -206,7 +192,7 @@ Files extracted from upstream source:
## harfbuzz
- Upstream: https://github.com/harfbuzz/harfbuzz
-- Version: 3.2.0 (be91d2917d9860326cb5fd1d03ffe1042a72f6d3, 2021)
+- Version: 4.0.0 (8d1b000a3edc90c12267b836b4ef3f81c0e53edc, 2022)
- License: MIT
Files extracted from upstream source:
@@ -309,7 +295,7 @@ Files extracted from upstream source:
## libwebp
- Upstream: https://chromium.googlesource.com/webm/libwebp/
-- Version: 1.2.1 (9ce5843dbabcfd3f7c39ec7ceba9cbeb213cbfdf, 2021)
+- Version: 1.2.2 (b0a860891dcd4c0c2d7c6149e5cccb6eb881cc21, 2022)
- License: BSD-3-Clause
Files extracted from upstream source:
@@ -317,10 +303,6 @@ Files extracted from upstream source:
- `src/*` except from: `.am`, `.rc` and `.in` files
- `AUTHORS`, `COPYING`, `PATENTS`
-Important: The files `utils/bit_reader_utils.{c,h}` have Godot-made
-changes to ensure they build for Javascript/HTML5. Those
-changes are marked with `// -- GODOT --` comments.
-
## mbedtls
@@ -458,7 +440,7 @@ Collection of single-file libraries used in Godot components.
* License: Public Domain or MIT
- `stb_rect_pack.h`
* Upstream: https://github.com/nothings/stb
- * Version: 1.00 (2bb4a0accd4003c1db4c24533981e01b1adfd656, 2019)
+ * Version: 1.01 (af1a5bc352164740c1cc1354942b1c6b72eacb8a, 2021)
* License: Public Domain or Unlicense or MIT
- `yuv2rgb.h`
* Upstream: http://wss.co.uk/pinknoise/yuv2rgb/ (to check)
@@ -469,7 +451,7 @@ Collection of single-file libraries used in Godot components.
## msdfgen
- Upstream: https://github.com/Chlumsky/msdfgen
-- Version: 1.9.1 (1b3b6b985094e6f12751177490add3ad11dd91a9, 2010)
+- Version: 1.9.2 (64a91eec3ca3787e6f78b4c99fcd3052ad3e37c0, 2021)
- License: MIT
Files extracted from the upstream source:
@@ -478,6 +460,7 @@ Files extracted from the upstream source:
- Files in `core/` folder.
- `LICENSE.txt` and `CHANGELOG.md`
+
## oidn
- Upstream: https://github.com/OpenImageDenoise/oidn
@@ -509,6 +492,30 @@ Patch files are provided in `oidn/patches/`.
- scripts/resource_to_cpp.py (used in modules/denoise/resource_to_cpp.py)
+## openxr
+
+- Upstream: https://github.com/KhronosGroup/OpenXR-SDK
+- Version: 1.0.22 (458984d7f59d1ae6dc1b597d94b02e4f7132eaba, 2022)
+- License: Apache 2.0
+
+Files extracted from upstream source:
+
+- include/
+- src/common/
+- src/loader/
+- src/*.{c,h}
+- src/external/jsoncpp/include/
+- src/external/jsoncpp/src/lib_json/
+- LICENSE and COPYING.adoc
+
+Exclude:
+
+- src/external/android-jni-wrappers and src/external/jnipp (not used yet)
+- All CMake stuff: cmake/, CMakeLists.txt and *.cmake
+- All Gradle stuff: *gradle*, AndroidManifest.xml
+- All following files (and their .license files): *.{def,in,json,map,pom,rc}
+
+
## pcre2
- Upstream: http://www.pcre.org
@@ -556,7 +563,7 @@ Godot. Please check the file to know what's new.
## spirv-reflect
- Upstream: https://github.com/KhronosGroup/SPIRV-Reflect
-- Version: git (cc937caab141d889c9c9dff572c5a6854d5cf9b4, 2021)
+- Version: git (1aceb6af56e74b92a00378842dda5c5a73f49a4b, 2022)
- License: Apache 2.0
Does not track Vulkan SDK releases closely, but try to package a commit newer
@@ -606,7 +613,7 @@ instead of `miniz.h` as an external dependency.
## thorvg
- Upstream: https://github.com/Samsung/thorvg
-- Version: 0.7.0 (e527f565b770f0a41df821e6618ccaeea94f465e, 2021)
+- Version: 0.8.0 (41093c17b3cac440bdcc53f8b69abeb5734696b5, 2022)
- License: MIT
Files extracted from upstream source:
@@ -614,8 +621,6 @@ Files extracted from upstream source:
See `thorvg/update-thorvg.sh` for extraction instructions. Set the version
number and run the script.
-Patches in the `patches` directory should be re-applied after updates.
-
## vhacd
@@ -637,7 +642,7 @@ folder.
## volk
- Upstream: https://github.com/zeux/volk
-- Version: 1.2.190 (760a782f295a66de7391d6ed573d65e3fb1c8450, 2021)
+- Version: 1.3.204 (92ba7c9f112a82cecf452ebf4b7c46f149a5799e, 2022)
- License: MIT
Unless there is a specific reason to package a more recent version, please stick
@@ -657,7 +662,7 @@ Files extracted from upstream source:
## vulkan
- Upstream: https://github.com/KhronosGroup/Vulkan-Headers
-- Version: 1.2.190 (9e62d027636cd7210f60d934f56107ed6e1579b8, 2021)
+- Version: 1.3.204 (1dace16d8044758d32736eb59802d171970e9448, 2022)
- License: Apache 2.0
The vendored version should be kept in sync with volk, see above.
@@ -671,7 +676,7 @@ Files extracted from upstream source:
SDK release: https://github.com/KhronosGroup/Vulkan-ValidationLayers/blob/master/layers/generated/vk_enum_string_helper.h
`vk_mem_alloc.h` is taken from https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator
-Version: 3.0.0-development (2021-07-07), branch `feature-small-buffers`, commit `cfea2f72851f9ee4a399769f18865047b83711f1`
+Version: 3.0.0-development (2022-02-24), commit `dc3f6bb9159df22ceed69c7765ddfb4fbb1b6ed0`
`vk_mem_alloc.cpp` is a Godot file and should be preserved on updates.
Patches in the `patches` directory should be re-applied after updates.
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3BroadphaseCallback.h b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3BroadphaseCallback.h
deleted file mode 100644
index bec0800a6f..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3BroadphaseCallback.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_BROADPHASE_CALLBACK_H
-#define B3_BROADPHASE_CALLBACK_H
-
-#include "Bullet3Common/b3Vector3.h"
-struct b3BroadphaseProxy;
-
-struct b3BroadphaseAabbCallback
-{
- virtual ~b3BroadphaseAabbCallback() {}
- virtual bool process(const b3BroadphaseProxy* proxy) = 0;
-};
-
-struct b3BroadphaseRayCallback : public b3BroadphaseAabbCallback
-{
- ///added some cached data to accelerate ray-AABB tests
- b3Vector3 m_rayDirectionInverse;
- unsigned int m_signs[3];
- b3Scalar m_lambda_max;
-
- virtual ~b3BroadphaseRayCallback() {}
-};
-
-#endif //B3_BROADPHASE_CALLBACK_H
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.cpp b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.cpp
deleted file mode 100644
index a0dc1da95d..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.cpp
+++ /dev/null
@@ -1,1352 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///b3DynamicBvh implementation by Nathanael Presson
-
-#include "b3DynamicBvh.h"
-
-//
-typedef b3AlignedObjectArray<b3DbvtNode*> b3NodeArray;
-typedef b3AlignedObjectArray<const b3DbvtNode*> b3ConstNodeArray;
-
-//
-struct b3DbvtNodeEnumerator : b3DynamicBvh::ICollide
-{
- b3ConstNodeArray nodes;
- void Process(const b3DbvtNode* n) { nodes.push_back(n); }
-};
-
-//
-static B3_DBVT_INLINE int b3IndexOf(const b3DbvtNode* node)
-{
- return (node->parent->childs[1] == node);
-}
-
-//
-static B3_DBVT_INLINE b3DbvtVolume b3Merge(const b3DbvtVolume& a,
- const b3DbvtVolume& b)
-{
-#if (B3_DBVT_MERGE_IMPL == B3_DBVT_IMPL_SSE)
- B3_ATTRIBUTE_ALIGNED16(char locals[sizeof(b3DbvtAabbMm)]);
- b3DbvtVolume& res = *(b3DbvtVolume*)locals;
-#else
- b3DbvtVolume res;
-#endif
- b3Merge(a, b, res);
- return (res);
-}
-
-// volume+edge lengths
-static B3_DBVT_INLINE b3Scalar b3Size(const b3DbvtVolume& a)
-{
- const b3Vector3 edges = a.Lengths();
- return (edges.x * edges.y * edges.z +
- edges.x + edges.y + edges.z);
-}
-
-//
-static void b3GetMaxDepth(const b3DbvtNode* node, int depth, int& maxdepth)
-{
- if (node->isinternal())
- {
- b3GetMaxDepth(node->childs[0], depth + 1, maxdepth);
- b3GetMaxDepth(node->childs[1], depth + 1, maxdepth);
- }
- else
- maxdepth = b3Max(maxdepth, depth);
-}
-
-//
-static B3_DBVT_INLINE void b3DeleteNode(b3DynamicBvh* pdbvt,
- b3DbvtNode* node)
-{
- b3AlignedFree(pdbvt->m_free);
- pdbvt->m_free = node;
-}
-
-//
-static void b3RecurseDeleteNode(b3DynamicBvh* pdbvt,
- b3DbvtNode* node)
-{
- if (!node->isleaf())
- {
- b3RecurseDeleteNode(pdbvt, node->childs[0]);
- b3RecurseDeleteNode(pdbvt, node->childs[1]);
- }
- if (node == pdbvt->m_root) pdbvt->m_root = 0;
- b3DeleteNode(pdbvt, node);
-}
-
-//
-static B3_DBVT_INLINE b3DbvtNode* b3CreateNode(b3DynamicBvh* pdbvt,
- b3DbvtNode* parent,
- void* data)
-{
- b3DbvtNode* node;
- if (pdbvt->m_free)
- {
- node = pdbvt->m_free;
- pdbvt->m_free = 0;
- }
- else
- {
- node = new (b3AlignedAlloc(sizeof(b3DbvtNode), 16)) b3DbvtNode();
- }
- node->parent = parent;
- node->data = data;
- node->childs[1] = 0;
- return (node);
-}
-
-//
-static B3_DBVT_INLINE b3DbvtNode* b3CreateNode(b3DynamicBvh* pdbvt,
- b3DbvtNode* parent,
- const b3DbvtVolume& volume,
- void* data)
-{
- b3DbvtNode* node = b3CreateNode(pdbvt, parent, data);
- node->volume = volume;
- return (node);
-}
-
-//
-static B3_DBVT_INLINE b3DbvtNode* b3CreateNode(b3DynamicBvh* pdbvt,
- b3DbvtNode* parent,
- const b3DbvtVolume& volume0,
- const b3DbvtVolume& volume1,
- void* data)
-{
- b3DbvtNode* node = b3CreateNode(pdbvt, parent, data);
- b3Merge(volume0, volume1, node->volume);
- return (node);
-}
-
-//
-static void b3InsertLeaf(b3DynamicBvh* pdbvt,
- b3DbvtNode* root,
- b3DbvtNode* leaf)
-{
- if (!pdbvt->m_root)
- {
- pdbvt->m_root = leaf;
- leaf->parent = 0;
- }
- else
- {
- if (!root->isleaf())
- {
- do
- {
- root = root->childs[b3Select(leaf->volume,
- root->childs[0]->volume,
- root->childs[1]->volume)];
- } while (!root->isleaf());
- }
- b3DbvtNode* prev = root->parent;
- b3DbvtNode* node = b3CreateNode(pdbvt, prev, leaf->volume, root->volume, 0);
- if (prev)
- {
- prev->childs[b3IndexOf(root)] = node;
- node->childs[0] = root;
- root->parent = node;
- node->childs[1] = leaf;
- leaf->parent = node;
- do
- {
- if (!prev->volume.Contain(node->volume))
- b3Merge(prev->childs[0]->volume, prev->childs[1]->volume, prev->volume);
- else
- break;
- node = prev;
- } while (0 != (prev = node->parent));
- }
- else
- {
- node->childs[0] = root;
- root->parent = node;
- node->childs[1] = leaf;
- leaf->parent = node;
- pdbvt->m_root = node;
- }
- }
-}
-
-//
-static b3DbvtNode* b3RemoveLeaf(b3DynamicBvh* pdbvt,
- b3DbvtNode* leaf)
-{
- if (leaf == pdbvt->m_root)
- {
- pdbvt->m_root = 0;
- return (0);
- }
- else
- {
- b3DbvtNode* parent = leaf->parent;
- b3DbvtNode* prev = parent->parent;
- b3DbvtNode* sibling = parent->childs[1 - b3IndexOf(leaf)];
- if (prev)
- {
- prev->childs[b3IndexOf(parent)] = sibling;
- sibling->parent = prev;
- b3DeleteNode(pdbvt, parent);
- while (prev)
- {
- const b3DbvtVolume pb = prev->volume;
- b3Merge(prev->childs[0]->volume, prev->childs[1]->volume, prev->volume);
- if (b3NotEqual(pb, prev->volume))
- {
- prev = prev->parent;
- }
- else
- break;
- }
- return (prev ? prev : pdbvt->m_root);
- }
- else
- {
- pdbvt->m_root = sibling;
- sibling->parent = 0;
- b3DeleteNode(pdbvt, parent);
- return (pdbvt->m_root);
- }
- }
-}
-
-//
-static void b3FetchLeaves(b3DynamicBvh* pdbvt,
- b3DbvtNode* root,
- b3NodeArray& leaves,
- int depth = -1)
-{
- if (root->isinternal() && depth)
- {
- b3FetchLeaves(pdbvt, root->childs[0], leaves, depth - 1);
- b3FetchLeaves(pdbvt, root->childs[1], leaves, depth - 1);
- b3DeleteNode(pdbvt, root);
- }
- else
- {
- leaves.push_back(root);
- }
-}
-
-static bool b3LeftOfAxis(const b3DbvtNode* node,
- const b3Vector3& org,
- const b3Vector3& axis)
-{
- return b3Dot(axis, node->volume.Center() - org) <= 0;
-}
-
-// Partitions leaves such that leaves[0, n) are on the
-// left of axis, and leaves[n, count) are on the right
-// of axis. returns N.
-static int b3Split(b3DbvtNode** leaves,
- int count,
- const b3Vector3& org,
- const b3Vector3& axis)
-{
- int begin = 0;
- int end = count;
- for (;;)
- {
- while (begin != end && b3LeftOfAxis(leaves[begin], org, axis))
- {
- ++begin;
- }
-
- if (begin == end)
- {
- break;
- }
-
- while (begin != end && !b3LeftOfAxis(leaves[end - 1], org, axis))
- {
- --end;
- }
-
- if (begin == end)
- {
- break;
- }
-
- // swap out of place nodes
- --end;
- b3DbvtNode* temp = leaves[begin];
- leaves[begin] = leaves[end];
- leaves[end] = temp;
- ++begin;
- }
-
- return begin;
-}
-
-//
-static b3DbvtVolume b3Bounds(b3DbvtNode** leaves,
- int count)
-{
-#if B3_DBVT_MERGE_IMPL == B3_DBVT_IMPL_SSE
- B3_ATTRIBUTE_ALIGNED16(char locals[sizeof(b3DbvtVolume)]);
- b3DbvtVolume& volume = *(b3DbvtVolume*)locals;
- volume = leaves[0]->volume;
-#else
- b3DbvtVolume volume = leaves[0]->volume;
-#endif
- for (int i = 1, ni = count; i < ni; ++i)
- {
- b3Merge(volume, leaves[i]->volume, volume);
- }
- return (volume);
-}
-
-//
-static void b3BottomUp(b3DynamicBvh* pdbvt,
- b3DbvtNode** leaves,
- int count)
-{
- while (count > 1)
- {
- b3Scalar minsize = B3_INFINITY;
- int minidx[2] = {-1, -1};
- for (int i = 0; i < count; ++i)
- {
- for (int j = i + 1; j < count; ++j)
- {
- const b3Scalar sz = b3Size(b3Merge(leaves[i]->volume, leaves[j]->volume));
- if (sz < minsize)
- {
- minsize = sz;
- minidx[0] = i;
- minidx[1] = j;
- }
- }
- }
- b3DbvtNode* n[] = {leaves[minidx[0]], leaves[minidx[1]]};
- b3DbvtNode* p = b3CreateNode(pdbvt, 0, n[0]->volume, n[1]->volume, 0);
- p->childs[0] = n[0];
- p->childs[1] = n[1];
- n[0]->parent = p;
- n[1]->parent = p;
- leaves[minidx[0]] = p;
- leaves[minidx[1]] = leaves[count - 1];
- --count;
- }
-}
-
-//
-static b3DbvtNode* b3TopDown(b3DynamicBvh* pdbvt,
- b3DbvtNode** leaves,
- int count,
- int bu_treshold)
-{
- static const b3Vector3 axis[] = {b3MakeVector3(1, 0, 0),
- b3MakeVector3(0, 1, 0),
- b3MakeVector3(0, 0, 1)};
- b3Assert(bu_treshold > 1);
- if (count > 1)
- {
- if (count > bu_treshold)
- {
- const b3DbvtVolume vol = b3Bounds(leaves, count);
- const b3Vector3 org = vol.Center();
- int partition;
- int bestaxis = -1;
- int bestmidp = count;
- int splitcount[3][2] = {{0, 0}, {0, 0}, {0, 0}};
- int i;
- for (i = 0; i < count; ++i)
- {
- const b3Vector3 x = leaves[i]->volume.Center() - org;
- for (int j = 0; j < 3; ++j)
- {
- ++splitcount[j][b3Dot(x, axis[j]) > 0 ? 1 : 0];
- }
- }
- for (i = 0; i < 3; ++i)
- {
- if ((splitcount[i][0] > 0) && (splitcount[i][1] > 0))
- {
- const int midp = (int)b3Fabs(b3Scalar(splitcount[i][0] - splitcount[i][1]));
- if (midp < bestmidp)
- {
- bestaxis = i;
- bestmidp = midp;
- }
- }
- }
- if (bestaxis >= 0)
- {
- partition = b3Split(leaves, count, org, axis[bestaxis]);
- b3Assert(partition != 0 && partition != count);
- }
- else
- {
- partition = count / 2 + 1;
- }
- b3DbvtNode* node = b3CreateNode(pdbvt, 0, vol, 0);
- node->childs[0] = b3TopDown(pdbvt, &leaves[0], partition, bu_treshold);
- node->childs[1] = b3TopDown(pdbvt, &leaves[partition], count - partition, bu_treshold);
- node->childs[0]->parent = node;
- node->childs[1]->parent = node;
- return (node);
- }
- else
- {
- b3BottomUp(pdbvt, leaves, count);
- return (leaves[0]);
- }
- }
- return (leaves[0]);
-}
-
-//
-static B3_DBVT_INLINE b3DbvtNode* b3Sort(b3DbvtNode* n, b3DbvtNode*& r)
-{
- b3DbvtNode* p = n->parent;
- b3Assert(n->isinternal());
- if (p > n)
- {
- const int i = b3IndexOf(n);
- const int j = 1 - i;
- b3DbvtNode* s = p->childs[j];
- b3DbvtNode* q = p->parent;
- b3Assert(n == p->childs[i]);
- if (q)
- q->childs[b3IndexOf(p)] = n;
- else
- r = n;
- s->parent = n;
- p->parent = n;
- n->parent = q;
- p->childs[0] = n->childs[0];
- p->childs[1] = n->childs[1];
- n->childs[0]->parent = p;
- n->childs[1]->parent = p;
- n->childs[i] = p;
- n->childs[j] = s;
- b3Swap(p->volume, n->volume);
- return (p);
- }
- return (n);
-}
-
-#if 0
-static B3_DBVT_INLINE b3DbvtNode* walkup(b3DbvtNode* n,int count)
-{
- while(n&&(count--)) n=n->parent;
- return(n);
-}
-#endif
-
-//
-// Api
-//
-
-//
-b3DynamicBvh::b3DynamicBvh()
-{
- m_root = 0;
- m_free = 0;
- m_lkhd = -1;
- m_leaves = 0;
- m_opath = 0;
-}
-
-//
-b3DynamicBvh::~b3DynamicBvh()
-{
- clear();
-}
-
-//
-void b3DynamicBvh::clear()
-{
- if (m_root)
- b3RecurseDeleteNode(this, m_root);
- b3AlignedFree(m_free);
- m_free = 0;
- m_lkhd = -1;
- m_stkStack.clear();
- m_opath = 0;
-}
-
-//
-void b3DynamicBvh::optimizeBottomUp()
-{
- if (m_root)
- {
- b3NodeArray leaves;
- leaves.reserve(m_leaves);
- b3FetchLeaves(this, m_root, leaves);
- b3BottomUp(this, &leaves[0], leaves.size());
- m_root = leaves[0];
- }
-}
-
-//
-void b3DynamicBvh::optimizeTopDown(int bu_treshold)
-{
- if (m_root)
- {
- b3NodeArray leaves;
- leaves.reserve(m_leaves);
- b3FetchLeaves(this, m_root, leaves);
- m_root = b3TopDown(this, &leaves[0], leaves.size(), bu_treshold);
- }
-}
-
-//
-void b3DynamicBvh::optimizeIncremental(int passes)
-{
- if (passes < 0) passes = m_leaves;
- if (m_root && (passes > 0))
- {
- do
- {
- b3DbvtNode* node = m_root;
- unsigned bit = 0;
- while (node->isinternal())
- {
- node = b3Sort(node, m_root)->childs[(m_opath >> bit) & 1];
- bit = (bit + 1) & (sizeof(unsigned) * 8 - 1);
- }
- update(node);
- ++m_opath;
- } while (--passes);
- }
-}
-
-//
-b3DbvtNode* b3DynamicBvh::insert(const b3DbvtVolume& volume, void* data)
-{
- b3DbvtNode* leaf = b3CreateNode(this, 0, volume, data);
- b3InsertLeaf(this, m_root, leaf);
- ++m_leaves;
- return (leaf);
-}
-
-//
-void b3DynamicBvh::update(b3DbvtNode* leaf, int lookahead)
-{
- b3DbvtNode* root = b3RemoveLeaf(this, leaf);
- if (root)
- {
- if (lookahead >= 0)
- {
- for (int i = 0; (i < lookahead) && root->parent; ++i)
- {
- root = root->parent;
- }
- }
- else
- root = m_root;
- }
- b3InsertLeaf(this, root, leaf);
-}
-
-//
-void b3DynamicBvh::update(b3DbvtNode* leaf, b3DbvtVolume& volume)
-{
- b3DbvtNode* root = b3RemoveLeaf(this, leaf);
- if (root)
- {
- if (m_lkhd >= 0)
- {
- for (int i = 0; (i < m_lkhd) && root->parent; ++i)
- {
- root = root->parent;
- }
- }
- else
- root = m_root;
- }
- leaf->volume = volume;
- b3InsertLeaf(this, root, leaf);
-}
-
-//
-bool b3DynamicBvh::update(b3DbvtNode* leaf, b3DbvtVolume& volume, const b3Vector3& velocity, b3Scalar margin)
-{
- if (leaf->volume.Contain(volume)) return (false);
- volume.Expand(b3MakeVector3(margin, margin, margin));
- volume.SignedExpand(velocity);
- update(leaf, volume);
- return (true);
-}
-
-//
-bool b3DynamicBvh::update(b3DbvtNode* leaf, b3DbvtVolume& volume, const b3Vector3& velocity)
-{
- if (leaf->volume.Contain(volume)) return (false);
- volume.SignedExpand(velocity);
- update(leaf, volume);
- return (true);
-}
-
-//
-bool b3DynamicBvh::update(b3DbvtNode* leaf, b3DbvtVolume& volume, b3Scalar margin)
-{
- if (leaf->volume.Contain(volume)) return (false);
- volume.Expand(b3MakeVector3(margin, margin, margin));
- update(leaf, volume);
- return (true);
-}
-
-//
-void b3DynamicBvh::remove(b3DbvtNode* leaf)
-{
- b3RemoveLeaf(this, leaf);
- b3DeleteNode(this, leaf);
- --m_leaves;
-}
-
-//
-void b3DynamicBvh::write(IWriter* iwriter) const
-{
- b3DbvtNodeEnumerator nodes;
- nodes.nodes.reserve(m_leaves * 2);
- enumNodes(m_root, nodes);
- iwriter->Prepare(m_root, nodes.nodes.size());
- for (int i = 0; i < nodes.nodes.size(); ++i)
- {
- const b3DbvtNode* n = nodes.nodes[i];
- int p = -1;
- if (n->parent) p = nodes.nodes.findLinearSearch(n->parent);
- if (n->isinternal())
- {
- const int c0 = nodes.nodes.findLinearSearch(n->childs[0]);
- const int c1 = nodes.nodes.findLinearSearch(n->childs[1]);
- iwriter->WriteNode(n, i, p, c0, c1);
- }
- else
- {
- iwriter->WriteLeaf(n, i, p);
- }
- }
-}
-
-//
-void b3DynamicBvh::clone(b3DynamicBvh& dest, IClone* iclone) const
-{
- dest.clear();
- if (m_root != 0)
- {
- b3AlignedObjectArray<sStkCLN> stack;
- stack.reserve(m_leaves);
- stack.push_back(sStkCLN(m_root, 0));
- do
- {
- const int i = stack.size() - 1;
- const sStkCLN e = stack[i];
- b3DbvtNode* n = b3CreateNode(&dest, e.parent, e.node->volume, e.node->data);
- stack.pop_back();
- if (e.parent != 0)
- e.parent->childs[i & 1] = n;
- else
- dest.m_root = n;
- if (e.node->isinternal())
- {
- stack.push_back(sStkCLN(e.node->childs[0], n));
- stack.push_back(sStkCLN(e.node->childs[1], n));
- }
- else
- {
- iclone->CloneLeaf(n);
- }
- } while (stack.size() > 0);
- }
-}
-
-//
-int b3DynamicBvh::maxdepth(const b3DbvtNode* node)
-{
- int depth = 0;
- if (node) b3GetMaxDepth(node, 1, depth);
- return (depth);
-}
-
-//
-int b3DynamicBvh::countLeaves(const b3DbvtNode* node)
-{
- if (node->isinternal())
- return (countLeaves(node->childs[0]) + countLeaves(node->childs[1]));
- else
- return (1);
-}
-
-//
-void b3DynamicBvh::extractLeaves(const b3DbvtNode* node, b3AlignedObjectArray<const b3DbvtNode*>& leaves)
-{
- if (node->isinternal())
- {
- extractLeaves(node->childs[0], leaves);
- extractLeaves(node->childs[1], leaves);
- }
- else
- {
- leaves.push_back(node);
- }
-}
-
-//
-#if B3_DBVT_ENABLE_BENCHMARK
-
-#include <stdio.h>
-#include <stdlib.h>
-
-/*
-q6600,2.4ghz
-
-/Ox /Ob2 /Oi /Ot /I "." /I "..\.." /I "..\..\src" /D "NDEBUG" /D "_LIB" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32"
-/GF /FD /MT /GS- /Gy /arch:SSE2 /Zc:wchar_t- /Fp"..\..\out\release8\build\libbulletcollision\libbulletcollision.pch"
-/Fo"..\..\out\release8\build\libbulletcollision\\"
-/Fd"..\..\out\release8\build\libbulletcollision\bulletcollision.pdb"
-/W3 /nologo /c /Wp64 /Zi /errorReport:prompt
-
-Benchmarking dbvt...
-World scale: 100.000000
-Extents base: 1.000000
-Extents range: 4.000000
-Leaves: 8192
-sizeof(b3DbvtVolume): 32 bytes
-sizeof(b3DbvtNode): 44 bytes
-[1] b3DbvtVolume intersections: 3499 ms (-1%)
-[2] b3DbvtVolume merges: 1934 ms (0%)
-[3] b3DynamicBvh::collideTT: 5485 ms (-21%)
-[4] b3DynamicBvh::collideTT self: 2814 ms (-20%)
-[5] b3DynamicBvh::collideTT xform: 7379 ms (-1%)
-[6] b3DynamicBvh::collideTT xform,self: 7270 ms (-2%)
-[7] b3DynamicBvh::rayTest: 6314 ms (0%),(332143 r/s)
-[8] insert/remove: 2093 ms (0%),(1001983 ir/s)
-[9] updates (teleport): 1879 ms (-3%),(1116100 u/s)
-[10] updates (jitter): 1244 ms (-4%),(1685813 u/s)
-[11] optimize (incremental): 2514 ms (0%),(1668000 o/s)
-[12] b3DbvtVolume notequal: 3659 ms (0%)
-[13] culling(OCL+fullsort): 2218 ms (0%),(461 t/s)
-[14] culling(OCL+qsort): 3688 ms (5%),(2221 t/s)
-[15] culling(KDOP+qsort): 1139 ms (-1%),(7192 t/s)
-[16] insert/remove batch(256): 5092 ms (0%),(823704 bir/s)
-[17] b3DbvtVolume select: 3419 ms (0%)
-*/
-
-struct b3DbvtBenchmark
-{
- struct NilPolicy : b3DynamicBvh::ICollide
- {
- NilPolicy() : m_pcount(0), m_depth(-B3_INFINITY), m_checksort(true) {}
- void Process(const b3DbvtNode*, const b3DbvtNode*) { ++m_pcount; }
- void Process(const b3DbvtNode*) { ++m_pcount; }
- void Process(const b3DbvtNode*, b3Scalar depth)
- {
- ++m_pcount;
- if (m_checksort)
- {
- if (depth >= m_depth)
- m_depth = depth;
- else
- printf("wrong depth: %f (should be >= %f)\r\n", depth, m_depth);
- }
- }
- int m_pcount;
- b3Scalar m_depth;
- bool m_checksort;
- };
- struct P14 : b3DynamicBvh::ICollide
- {
- struct Node
- {
- const b3DbvtNode* leaf;
- b3Scalar depth;
- };
- void Process(const b3DbvtNode* leaf, b3Scalar depth)
- {
- Node n;
- n.leaf = leaf;
- n.depth = depth;
- }
- static int sortfnc(const Node& a, const Node& b)
- {
- if (a.depth < b.depth) return (+1);
- if (a.depth > b.depth) return (-1);
- return (0);
- }
- b3AlignedObjectArray<Node> m_nodes;
- };
- struct P15 : b3DynamicBvh::ICollide
- {
- struct Node
- {
- const b3DbvtNode* leaf;
- b3Scalar depth;
- };
- void Process(const b3DbvtNode* leaf)
- {
- Node n;
- n.leaf = leaf;
- n.depth = dot(leaf->volume.Center(), m_axis);
- }
- static int sortfnc(const Node& a, const Node& b)
- {
- if (a.depth < b.depth) return (+1);
- if (a.depth > b.depth) return (-1);
- return (0);
- }
- b3AlignedObjectArray<Node> m_nodes;
- b3Vector3 m_axis;
- };
- static b3Scalar RandUnit()
- {
- return (rand() / (b3Scalar)RAND_MAX);
- }
- static b3Vector3 RandVector3()
- {
- return (b3Vector3(RandUnit(), RandUnit(), RandUnit()));
- }
- static b3Vector3 RandVector3(b3Scalar cs)
- {
- return (RandVector3() * cs - b3Vector3(cs, cs, cs) / 2);
- }
- static b3DbvtVolume RandVolume(b3Scalar cs, b3Scalar eb, b3Scalar es)
- {
- return (b3DbvtVolume::FromCE(RandVector3(cs), b3Vector3(eb, eb, eb) + RandVector3() * es));
- }
- static b3Transform RandTransform(b3Scalar cs)
- {
- b3Transform t;
- t.setOrigin(RandVector3(cs));
- t.setRotation(b3Quaternion(RandUnit() * B3_PI * 2, RandUnit() * B3_PI * 2, RandUnit() * B3_PI * 2).normalized());
- return (t);
- }
- static void RandTree(b3Scalar cs, b3Scalar eb, b3Scalar es, int leaves, b3DynamicBvh& dbvt)
- {
- dbvt.clear();
- for (int i = 0; i < leaves; ++i)
- {
- dbvt.insert(RandVolume(cs, eb, es), 0);
- }
- }
-};
-
-void b3DynamicBvh::benchmark()
-{
- static const b3Scalar cfgVolumeCenterScale = 100;
- static const b3Scalar cfgVolumeExentsBase = 1;
- static const b3Scalar cfgVolumeExentsScale = 4;
- static const int cfgLeaves = 8192;
- static const bool cfgEnable = true;
-
- //[1] b3DbvtVolume intersections
- bool cfgBenchmark1_Enable = cfgEnable;
- static const int cfgBenchmark1_Iterations = 8;
- static const int cfgBenchmark1_Reference = 3499;
- //[2] b3DbvtVolume merges
- bool cfgBenchmark2_Enable = cfgEnable;
- static const int cfgBenchmark2_Iterations = 4;
- static const int cfgBenchmark2_Reference = 1945;
- //[3] b3DynamicBvh::collideTT
- bool cfgBenchmark3_Enable = cfgEnable;
- static const int cfgBenchmark3_Iterations = 512;
- static const int cfgBenchmark3_Reference = 5485;
- //[4] b3DynamicBvh::collideTT self
- bool cfgBenchmark4_Enable = cfgEnable;
- static const int cfgBenchmark4_Iterations = 512;
- static const int cfgBenchmark4_Reference = 2814;
- //[5] b3DynamicBvh::collideTT xform
- bool cfgBenchmark5_Enable = cfgEnable;
- static const int cfgBenchmark5_Iterations = 512;
- static const b3Scalar cfgBenchmark5_OffsetScale = 2;
- static const int cfgBenchmark5_Reference = 7379;
- //[6] b3DynamicBvh::collideTT xform,self
- bool cfgBenchmark6_Enable = cfgEnable;
- static const int cfgBenchmark6_Iterations = 512;
- static const b3Scalar cfgBenchmark6_OffsetScale = 2;
- static const int cfgBenchmark6_Reference = 7270;
- //[7] b3DynamicBvh::rayTest
- bool cfgBenchmark7_Enable = cfgEnable;
- static const int cfgBenchmark7_Passes = 32;
- static const int cfgBenchmark7_Iterations = 65536;
- static const int cfgBenchmark7_Reference = 6307;
- //[8] insert/remove
- bool cfgBenchmark8_Enable = cfgEnable;
- static const int cfgBenchmark8_Passes = 32;
- static const int cfgBenchmark8_Iterations = 65536;
- static const int cfgBenchmark8_Reference = 2105;
- //[9] updates (teleport)
- bool cfgBenchmark9_Enable = cfgEnable;
- static const int cfgBenchmark9_Passes = 32;
- static const int cfgBenchmark9_Iterations = 65536;
- static const int cfgBenchmark9_Reference = 1879;
- //[10] updates (jitter)
- bool cfgBenchmark10_Enable = cfgEnable;
- static const b3Scalar cfgBenchmark10_Scale = cfgVolumeCenterScale / 10000;
- static const int cfgBenchmark10_Passes = 32;
- static const int cfgBenchmark10_Iterations = 65536;
- static const int cfgBenchmark10_Reference = 1244;
- //[11] optimize (incremental)
- bool cfgBenchmark11_Enable = cfgEnable;
- static const int cfgBenchmark11_Passes = 64;
- static const int cfgBenchmark11_Iterations = 65536;
- static const int cfgBenchmark11_Reference = 2510;
- //[12] b3DbvtVolume notequal
- bool cfgBenchmark12_Enable = cfgEnable;
- static const int cfgBenchmark12_Iterations = 32;
- static const int cfgBenchmark12_Reference = 3677;
- //[13] culling(OCL+fullsort)
- bool cfgBenchmark13_Enable = cfgEnable;
- static const int cfgBenchmark13_Iterations = 1024;
- static const int cfgBenchmark13_Reference = 2231;
- //[14] culling(OCL+qsort)
- bool cfgBenchmark14_Enable = cfgEnable;
- static const int cfgBenchmark14_Iterations = 8192;
- static const int cfgBenchmark14_Reference = 3500;
- //[15] culling(KDOP+qsort)
- bool cfgBenchmark15_Enable = cfgEnable;
- static const int cfgBenchmark15_Iterations = 8192;
- static const int cfgBenchmark15_Reference = 1151;
- //[16] insert/remove batch
- bool cfgBenchmark16_Enable = cfgEnable;
- static const int cfgBenchmark16_BatchCount = 256;
- static const int cfgBenchmark16_Passes = 16384;
- static const int cfgBenchmark16_Reference = 5138;
- //[17] select
- bool cfgBenchmark17_Enable = cfgEnable;
- static const int cfgBenchmark17_Iterations = 4;
- static const int cfgBenchmark17_Reference = 3390;
-
- b3Clock wallclock;
- printf("Benchmarking dbvt...\r\n");
- printf("\tWorld scale: %f\r\n", cfgVolumeCenterScale);
- printf("\tExtents base: %f\r\n", cfgVolumeExentsBase);
- printf("\tExtents range: %f\r\n", cfgVolumeExentsScale);
- printf("\tLeaves: %u\r\n", cfgLeaves);
- printf("\tsizeof(b3DbvtVolume): %u bytes\r\n", sizeof(b3DbvtVolume));
- printf("\tsizeof(b3DbvtNode): %u bytes\r\n", sizeof(b3DbvtNode));
- if (cfgBenchmark1_Enable)
- { // Benchmark 1
- srand(380843);
- b3AlignedObjectArray<b3DbvtVolume> volumes;
- b3AlignedObjectArray<bool> results;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- volumes[i] = b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- printf("[1] b3DbvtVolume intersections: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark1_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- results[k] = Intersect(volumes[j], volumes[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark1_Reference) * 100 / time);
- }
- if (cfgBenchmark2_Enable)
- { // Benchmark 2
- srand(380843);
- b3AlignedObjectArray<b3DbvtVolume> volumes;
- b3AlignedObjectArray<b3DbvtVolume> results;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- volumes[i] = b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- printf("[2] b3DbvtVolume merges: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark2_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- Merge(volumes[j], volumes[k], results[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark2_Reference) * 100 / time);
- }
- if (cfgBenchmark3_Enable)
- { // Benchmark 3
- srand(380843);
- b3DynamicBvh dbvt[2];
- b3DbvtBenchmark::NilPolicy policy;
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[0]);
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[1]);
- dbvt[0].optimizeTopDown();
- dbvt[1].optimizeTopDown();
- printf("[3] b3DynamicBvh::collideTT: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark3_Iterations; ++i)
- {
- b3DynamicBvh::collideTT(dbvt[0].m_root, dbvt[1].m_root, policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark3_Reference) * 100 / time);
- }
- if (cfgBenchmark4_Enable)
- { // Benchmark 4
- srand(380843);
- b3DynamicBvh dbvt;
- b3DbvtBenchmark::NilPolicy policy;
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[4] b3DynamicBvh::collideTT self: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark4_Iterations; ++i)
- {
- b3DynamicBvh::collideTT(dbvt.m_root, dbvt.m_root, policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark4_Reference) * 100 / time);
- }
- if (cfgBenchmark5_Enable)
- { // Benchmark 5
- srand(380843);
- b3DynamicBvh dbvt[2];
- b3AlignedObjectArray<b3Transform> transforms;
- b3DbvtBenchmark::NilPolicy policy;
- transforms.resize(cfgBenchmark5_Iterations);
- for (int i = 0; i < transforms.size(); ++i)
- {
- transforms[i] = b3DbvtBenchmark::RandTransform(cfgVolumeCenterScale * cfgBenchmark5_OffsetScale);
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[0]);
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[1]);
- dbvt[0].optimizeTopDown();
- dbvt[1].optimizeTopDown();
- printf("[5] b3DynamicBvh::collideTT xform: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark5_Iterations; ++i)
- {
- b3DynamicBvh::collideTT(dbvt[0].m_root, dbvt[1].m_root, transforms[i], policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark5_Reference) * 100 / time);
- }
- if (cfgBenchmark6_Enable)
- { // Benchmark 6
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<b3Transform> transforms;
- b3DbvtBenchmark::NilPolicy policy;
- transforms.resize(cfgBenchmark6_Iterations);
- for (int i = 0; i < transforms.size(); ++i)
- {
- transforms[i] = b3DbvtBenchmark::RandTransform(cfgVolumeCenterScale * cfgBenchmark6_OffsetScale);
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[6] b3DynamicBvh::collideTT xform,self: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark6_Iterations; ++i)
- {
- b3DynamicBvh::collideTT(dbvt.m_root, dbvt.m_root, transforms[i], policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark6_Reference) * 100 / time);
- }
- if (cfgBenchmark7_Enable)
- { // Benchmark 7
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<b3Vector3> rayorg;
- b3AlignedObjectArray<b3Vector3> raydir;
- b3DbvtBenchmark::NilPolicy policy;
- rayorg.resize(cfgBenchmark7_Iterations);
- raydir.resize(cfgBenchmark7_Iterations);
- for (int i = 0; i < rayorg.size(); ++i)
- {
- rayorg[i] = b3DbvtBenchmark::RandVector3(cfgVolumeCenterScale * 2);
- raydir[i] = b3DbvtBenchmark::RandVector3(cfgVolumeCenterScale * 2);
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[7] b3DynamicBvh::rayTest: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark7_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark7_Iterations; ++j)
- {
- b3DynamicBvh::rayTest(dbvt.m_root, rayorg[j], rayorg[j] + raydir[j], policy);
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- unsigned rays = cfgBenchmark7_Passes * cfgBenchmark7_Iterations;
- printf("%u ms (%i%%),(%u r/s)\r\n", time, (time - cfgBenchmark7_Reference) * 100 / time, (rays * 1000) / time);
- }
- if (cfgBenchmark8_Enable)
- { // Benchmark 8
- srand(380843);
- b3DynamicBvh dbvt;
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[8] insert/remove: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark8_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark8_Iterations; ++j)
- {
- dbvt.remove(dbvt.insert(b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale), 0));
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int ir = cfgBenchmark8_Passes * cfgBenchmark8_Iterations;
- printf("%u ms (%i%%),(%u ir/s)\r\n", time, (time - cfgBenchmark8_Reference) * 100 / time, ir * 1000 / time);
- }
- if (cfgBenchmark9_Enable)
- { // Benchmark 9
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<const b3DbvtNode*> leaves;
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- dbvt.extractLeaves(dbvt.m_root, leaves);
- printf("[9] updates (teleport): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark9_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark9_Iterations; ++j)
- {
- dbvt.update(const_cast<b3DbvtNode*>(leaves[rand() % cfgLeaves]),
- b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale));
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int up = cfgBenchmark9_Passes * cfgBenchmark9_Iterations;
- printf("%u ms (%i%%),(%u u/s)\r\n", time, (time - cfgBenchmark9_Reference) * 100 / time, up * 1000 / time);
- }
- if (cfgBenchmark10_Enable)
- { // Benchmark 10
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<const b3DbvtNode*> leaves;
- b3AlignedObjectArray<b3Vector3> vectors;
- vectors.resize(cfgBenchmark10_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (b3DbvtBenchmark::RandVector3() * 2 - b3Vector3(1, 1, 1)) * cfgBenchmark10_Scale;
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- dbvt.extractLeaves(dbvt.m_root, leaves);
- printf("[10] updates (jitter): ");
- wallclock.reset();
-
- for (int i = 0; i < cfgBenchmark10_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark10_Iterations; ++j)
- {
- const b3Vector3& d = vectors[j];
- b3DbvtNode* l = const_cast<b3DbvtNode*>(leaves[rand() % cfgLeaves]);
- b3DbvtVolume v = b3DbvtVolume::FromMM(l->volume.Mins() + d, l->volume.Maxs() + d);
- dbvt.update(l, v);
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int up = cfgBenchmark10_Passes * cfgBenchmark10_Iterations;
- printf("%u ms (%i%%),(%u u/s)\r\n", time, (time - cfgBenchmark10_Reference) * 100 / time, up * 1000 / time);
- }
- if (cfgBenchmark11_Enable)
- { // Benchmark 11
- srand(380843);
- b3DynamicBvh dbvt;
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[11] optimize (incremental): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark11_Passes; ++i)
- {
- dbvt.optimizeIncremental(cfgBenchmark11_Iterations);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int op = cfgBenchmark11_Passes * cfgBenchmark11_Iterations;
- printf("%u ms (%i%%),(%u o/s)\r\n", time, (time - cfgBenchmark11_Reference) * 100 / time, op / time * 1000);
- }
- if (cfgBenchmark12_Enable)
- { // Benchmark 12
- srand(380843);
- b3AlignedObjectArray<b3DbvtVolume> volumes;
- b3AlignedObjectArray<bool> results;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- volumes[i] = b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- printf("[12] b3DbvtVolume notequal: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark12_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- results[k] = NotEqual(volumes[j], volumes[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark12_Reference) * 100 / time);
- }
- if (cfgBenchmark13_Enable)
- { // Benchmark 13
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<b3Vector3> vectors;
- b3DbvtBenchmark::NilPolicy policy;
- vectors.resize(cfgBenchmark13_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (b3DbvtBenchmark::RandVector3() * 2 - b3Vector3(1, 1, 1)).normalized();
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[13] culling(OCL+fullsort): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark13_Iterations; ++i)
- {
- static const b3Scalar offset = 0;
- policy.m_depth = -B3_INFINITY;
- dbvt.collideOCL(dbvt.m_root, &vectors[i], &offset, vectors[i], 1, policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int t = cfgBenchmark13_Iterations;
- printf("%u ms (%i%%),(%u t/s)\r\n", time, (time - cfgBenchmark13_Reference) * 100 / time, (t * 1000) / time);
- }
- if (cfgBenchmark14_Enable)
- { // Benchmark 14
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<b3Vector3> vectors;
- b3DbvtBenchmark::P14 policy;
- vectors.resize(cfgBenchmark14_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (b3DbvtBenchmark::RandVector3() * 2 - b3Vector3(1, 1, 1)).normalized();
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- policy.m_nodes.reserve(cfgLeaves);
- printf("[14] culling(OCL+qsort): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark14_Iterations; ++i)
- {
- static const b3Scalar offset = 0;
- policy.m_nodes.resize(0);
- dbvt.collideOCL(dbvt.m_root, &vectors[i], &offset, vectors[i], 1, policy, false);
- policy.m_nodes.quickSort(b3DbvtBenchmark::P14::sortfnc);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int t = cfgBenchmark14_Iterations;
- printf("%u ms (%i%%),(%u t/s)\r\n", time, (time - cfgBenchmark14_Reference) * 100 / time, (t * 1000) / time);
- }
- if (cfgBenchmark15_Enable)
- { // Benchmark 15
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<b3Vector3> vectors;
- b3DbvtBenchmark::P15 policy;
- vectors.resize(cfgBenchmark15_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (b3DbvtBenchmark::RandVector3() * 2 - b3Vector3(1, 1, 1)).normalized();
- }
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- policy.m_nodes.reserve(cfgLeaves);
- printf("[15] culling(KDOP+qsort): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark15_Iterations; ++i)
- {
- static const b3Scalar offset = 0;
- policy.m_nodes.resize(0);
- policy.m_axis = vectors[i];
- dbvt.collideKDOP(dbvt.m_root, &vectors[i], &offset, 1, policy);
- policy.m_nodes.quickSort(b3DbvtBenchmark::P15::sortfnc);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int t = cfgBenchmark15_Iterations;
- printf("%u ms (%i%%),(%u t/s)\r\n", time, (time - cfgBenchmark15_Reference) * 100 / time, (t * 1000) / time);
- }
- if (cfgBenchmark16_Enable)
- { // Benchmark 16
- srand(380843);
- b3DynamicBvh dbvt;
- b3AlignedObjectArray<b3DbvtNode*> batch;
- b3DbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- batch.reserve(cfgBenchmark16_BatchCount);
- printf("[16] insert/remove batch(%u): ", cfgBenchmark16_BatchCount);
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark16_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark16_BatchCount; ++j)
- {
- batch.push_back(dbvt.insert(b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale), 0));
- }
- for (int j = 0; j < cfgBenchmark16_BatchCount; ++j)
- {
- dbvt.remove(batch[j]);
- }
- batch.resize(0);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int ir = cfgBenchmark16_Passes * cfgBenchmark16_BatchCount;
- printf("%u ms (%i%%),(%u bir/s)\r\n", time, (time - cfgBenchmark16_Reference) * 100 / time, int(ir * 1000.0 / time));
- }
- if (cfgBenchmark17_Enable)
- { // Benchmark 17
- srand(380843);
- b3AlignedObjectArray<b3DbvtVolume> volumes;
- b3AlignedObjectArray<int> results;
- b3AlignedObjectArray<int> indices;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- indices.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- indices[i] = i;
- volumes[i] = b3DbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- for (int i = 0; i < cfgLeaves; ++i)
- {
- b3Swap(indices[i], indices[rand() % cfgLeaves]);
- }
- printf("[17] b3DbvtVolume select: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark17_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- const int idx = indices[k];
- results[idx] = Select(volumes[idx], volumes[j], volumes[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark17_Reference) * 100 / time);
- }
- printf("\r\n\r\n");
-}
-#endif
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.h b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.h
deleted file mode 100644
index f44e3377fe..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.h
+++ /dev/null
@@ -1,1332 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///b3DynamicBvh implementation by Nathanael Presson
-
-#ifndef B3_DYNAMIC_BOUNDING_VOLUME_TREE_H
-#define B3_DYNAMIC_BOUNDING_VOLUME_TREE_H
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3Transform.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-
-//
-// Compile time configuration
-//
-
-// Implementation profiles
-#define B3_DBVT_IMPL_GENERIC 0 // Generic implementation
-#define B3_DBVT_IMPL_SSE 1 // SSE
-
-// Template implementation of ICollide
-#ifdef _WIN32
-#if (defined(_MSC_VER) && _MSC_VER >= 1400)
-#define B3_DBVT_USE_TEMPLATE 1
-#else
-#define B3_DBVT_USE_TEMPLATE 0
-#endif
-#else
-#define B3_DBVT_USE_TEMPLATE 0
-#endif
-
-// Use only intrinsics instead of inline asm
-#define B3_DBVT_USE_INTRINSIC_SSE 1
-
-// Using memmov for collideOCL
-#define B3_DBVT_USE_MEMMOVE 1
-
-// Enable benchmarking code
-#define B3_DBVT_ENABLE_BENCHMARK 0
-
-// Inlining
-#define B3_DBVT_INLINE B3_FORCE_INLINE
-
-// Specific methods implementation
-
-//SSE gives errors on a MSVC 7.1
-#if defined(B3_USE_SSE) //&& defined (_WIN32)
-#define B3_DBVT_SELECT_IMPL B3_DBVT_IMPL_SSE
-#define B3_DBVT_MERGE_IMPL B3_DBVT_IMPL_SSE
-#define B3_DBVT_INT0_IMPL B3_DBVT_IMPL_SSE
-#else
-#define B3_DBVT_SELECT_IMPL B3_DBVT_IMPL_GENERIC
-#define B3_DBVT_MERGE_IMPL B3_DBVT_IMPL_GENERIC
-#define B3_DBVT_INT0_IMPL B3_DBVT_IMPL_GENERIC
-#endif
-
-#if (B3_DBVT_SELECT_IMPL == B3_DBVT_IMPL_SSE) || \
- (B3_DBVT_MERGE_IMPL == B3_DBVT_IMPL_SSE) || \
- (B3_DBVT_INT0_IMPL == B3_DBVT_IMPL_SSE)
-#include <emmintrin.h>
-#endif
-
-//
-// Auto config and checks
-//
-
-#if B3_DBVT_USE_TEMPLATE
-#define B3_DBVT_VIRTUAL
-#define B3_DBVT_VIRTUAL_DTOR(a)
-#define B3_DBVT_PREFIX template <typename T>
-#define B3_DBVT_IPOLICY T& policy
-#define B3_DBVT_CHECKTYPE \
- static const ICollide& typechecker = *(T*)1; \
- (void)typechecker;
-#else
-#define B3_DBVT_VIRTUAL_DTOR(a) \
- virtual ~a() {}
-#define B3_DBVT_VIRTUAL virtual
-#define B3_DBVT_PREFIX
-#define B3_DBVT_IPOLICY ICollide& policy
-#define B3_DBVT_CHECKTYPE
-#endif
-
-#if B3_DBVT_USE_MEMMOVE
-#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__)
-#include <memory.h>
-#endif
-#include <string.h>
-#endif
-
-#ifndef B3_DBVT_USE_TEMPLATE
-#error "B3_DBVT_USE_TEMPLATE undefined"
-#endif
-
-#ifndef B3_DBVT_USE_MEMMOVE
-#error "B3_DBVT_USE_MEMMOVE undefined"
-#endif
-
-#ifndef B3_DBVT_ENABLE_BENCHMARK
-#error "B3_DBVT_ENABLE_BENCHMARK undefined"
-#endif
-
-#ifndef B3_DBVT_SELECT_IMPL
-#error "B3_DBVT_SELECT_IMPL undefined"
-#endif
-
-#ifndef B3_DBVT_MERGE_IMPL
-#error "B3_DBVT_MERGE_IMPL undefined"
-#endif
-
-#ifndef B3_DBVT_INT0_IMPL
-#error "B3_DBVT_INT0_IMPL undefined"
-#endif
-
-//
-// Defaults volumes
-//
-
-/* b3DbvtAabbMm */
-struct b3DbvtAabbMm
-{
- B3_DBVT_INLINE b3Vector3 Center() const { return ((mi + mx) / 2); }
- B3_DBVT_INLINE b3Vector3 Lengths() const { return (mx - mi); }
- B3_DBVT_INLINE b3Vector3 Extents() const { return ((mx - mi) / 2); }
- B3_DBVT_INLINE const b3Vector3& Mins() const { return (mi); }
- B3_DBVT_INLINE const b3Vector3& Maxs() const { return (mx); }
- static inline b3DbvtAabbMm FromCE(const b3Vector3& c, const b3Vector3& e);
- static inline b3DbvtAabbMm FromCR(const b3Vector3& c, b3Scalar r);
- static inline b3DbvtAabbMm FromMM(const b3Vector3& mi, const b3Vector3& mx);
- static inline b3DbvtAabbMm FromPoints(const b3Vector3* pts, int n);
- static inline b3DbvtAabbMm FromPoints(const b3Vector3** ppts, int n);
- B3_DBVT_INLINE void Expand(const b3Vector3& e);
- B3_DBVT_INLINE void SignedExpand(const b3Vector3& e);
- B3_DBVT_INLINE bool Contain(const b3DbvtAabbMm& a) const;
- B3_DBVT_INLINE int Classify(const b3Vector3& n, b3Scalar o, int s) const;
- B3_DBVT_INLINE b3Scalar ProjectMinimum(const b3Vector3& v, unsigned signs) const;
- B3_DBVT_INLINE friend bool b3Intersect(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b);
-
- B3_DBVT_INLINE friend bool b3Intersect(const b3DbvtAabbMm& a,
- const b3Vector3& b);
-
- B3_DBVT_INLINE friend b3Scalar b3Proximity(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b);
- B3_DBVT_INLINE friend int b3Select(const b3DbvtAabbMm& o,
- const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b);
- B3_DBVT_INLINE friend void b3Merge(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b,
- b3DbvtAabbMm& r);
- B3_DBVT_INLINE friend bool b3NotEqual(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b);
-
- B3_DBVT_INLINE b3Vector3& tMins() { return (mi); }
- B3_DBVT_INLINE b3Vector3& tMaxs() { return (mx); }
-
-private:
- B3_DBVT_INLINE void AddSpan(const b3Vector3& d, b3Scalar& smi, b3Scalar& smx) const;
-
-private:
- b3Vector3 mi, mx;
-};
-
-// Types
-typedef b3DbvtAabbMm b3DbvtVolume;
-
-/* b3DbvtNode */
-struct b3DbvtNode
-{
- b3DbvtVolume volume;
- b3DbvtNode* parent;
- B3_DBVT_INLINE bool isleaf() const { return (childs[1] == 0); }
- B3_DBVT_INLINE bool isinternal() const { return (!isleaf()); }
- union {
- b3DbvtNode* childs[2];
- void* data;
- int dataAsInt;
- };
-};
-
-///The b3DynamicBvh class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes (aabb tree).
-///This b3DynamicBvh is used for soft body collision detection and for the b3DynamicBvhBroadphase. It has a fast insert, remove and update of nodes.
-///Unlike the b3QuantizedBvh, nodes can be dynamically moved around, which allows for change in topology of the underlying data structure.
-struct b3DynamicBvh
-{
- /* Stack element */
- struct sStkNN
- {
- const b3DbvtNode* a;
- const b3DbvtNode* b;
- sStkNN() {}
- sStkNN(const b3DbvtNode* na, const b3DbvtNode* nb) : a(na), b(nb) {}
- };
- struct sStkNP
- {
- const b3DbvtNode* node;
- int mask;
- sStkNP(const b3DbvtNode* n, unsigned m) : node(n), mask(m) {}
- };
- struct sStkNPS
- {
- const b3DbvtNode* node;
- int mask;
- b3Scalar value;
- sStkNPS() {}
- sStkNPS(const b3DbvtNode* n, unsigned m, b3Scalar v) : node(n), mask(m), value(v) {}
- };
- struct sStkCLN
- {
- const b3DbvtNode* node;
- b3DbvtNode* parent;
- sStkCLN(const b3DbvtNode* n, b3DbvtNode* p) : node(n), parent(p) {}
- };
- // Policies/Interfaces
-
- /* ICollide */
- struct ICollide
- {
- B3_DBVT_VIRTUAL_DTOR(ICollide)
- B3_DBVT_VIRTUAL void Process(const b3DbvtNode*, const b3DbvtNode*) {}
- B3_DBVT_VIRTUAL void Process(const b3DbvtNode*) {}
- B3_DBVT_VIRTUAL void Process(const b3DbvtNode* n, b3Scalar) { Process(n); }
- B3_DBVT_VIRTUAL bool Descent(const b3DbvtNode*) { return (true); }
- B3_DBVT_VIRTUAL bool AllLeaves(const b3DbvtNode*) { return (true); }
- };
- /* IWriter */
- struct IWriter
- {
- virtual ~IWriter() {}
- virtual void Prepare(const b3DbvtNode* root, int numnodes) = 0;
- virtual void WriteNode(const b3DbvtNode*, int index, int parent, int child0, int child1) = 0;
- virtual void WriteLeaf(const b3DbvtNode*, int index, int parent) = 0;
- };
- /* IClone */
- struct IClone
- {
- virtual ~IClone() {}
- virtual void CloneLeaf(b3DbvtNode*) {}
- };
-
- // Constants
- enum
- {
- B3_SIMPLE_STACKSIZE = 64,
- B3_DOUBLE_STACKSIZE = B3_SIMPLE_STACKSIZE * 2
- };
-
- // Fields
- b3DbvtNode* m_root;
- b3DbvtNode* m_free;
- int m_lkhd;
- int m_leaves;
- unsigned m_opath;
-
- b3AlignedObjectArray<sStkNN> m_stkStack;
- mutable b3AlignedObjectArray<const b3DbvtNode*> m_rayTestStack;
-
- // Methods
- b3DynamicBvh();
- ~b3DynamicBvh();
- void clear();
- bool empty() const { return (0 == m_root); }
- void optimizeBottomUp();
- void optimizeTopDown(int bu_treshold = 128);
- void optimizeIncremental(int passes);
- b3DbvtNode* insert(const b3DbvtVolume& box, void* data);
- void update(b3DbvtNode* leaf, int lookahead = -1);
- void update(b3DbvtNode* leaf, b3DbvtVolume& volume);
- bool update(b3DbvtNode* leaf, b3DbvtVolume& volume, const b3Vector3& velocity, b3Scalar margin);
- bool update(b3DbvtNode* leaf, b3DbvtVolume& volume, const b3Vector3& velocity);
- bool update(b3DbvtNode* leaf, b3DbvtVolume& volume, b3Scalar margin);
- void remove(b3DbvtNode* leaf);
- void write(IWriter* iwriter) const;
- void clone(b3DynamicBvh& dest, IClone* iclone = 0) const;
- static int maxdepth(const b3DbvtNode* node);
- static int countLeaves(const b3DbvtNode* node);
- static void extractLeaves(const b3DbvtNode* node, b3AlignedObjectArray<const b3DbvtNode*>& leaves);
-#if B3_DBVT_ENABLE_BENCHMARK
- static void benchmark();
-#else
- static void benchmark()
- {
- }
-#endif
- // B3_DBVT_IPOLICY must support ICollide policy/interface
- B3_DBVT_PREFIX
- static void enumNodes(const b3DbvtNode* root,
- B3_DBVT_IPOLICY);
- B3_DBVT_PREFIX
- static void enumLeaves(const b3DbvtNode* root,
- B3_DBVT_IPOLICY);
- B3_DBVT_PREFIX
- void collideTT(const b3DbvtNode* root0,
- const b3DbvtNode* root1,
- B3_DBVT_IPOLICY);
-
- B3_DBVT_PREFIX
- void collideTTpersistentStack(const b3DbvtNode* root0,
- const b3DbvtNode* root1,
- B3_DBVT_IPOLICY);
-#if 0
- B3_DBVT_PREFIX
- void collideTT( const b3DbvtNode* root0,
- const b3DbvtNode* root1,
- const b3Transform& xform,
- B3_DBVT_IPOLICY);
- B3_DBVT_PREFIX
- void collideTT( const b3DbvtNode* root0,
- const b3Transform& xform0,
- const b3DbvtNode* root1,
- const b3Transform& xform1,
- B3_DBVT_IPOLICY);
-#endif
-
- B3_DBVT_PREFIX
- void collideTV(const b3DbvtNode* root,
- const b3DbvtVolume& volume,
- B3_DBVT_IPOLICY) const;
- ///rayTest is a re-entrant ray test, and can be called in parallel as long as the b3AlignedAlloc is thread-safe (uses locking etc)
- ///rayTest is slower than rayTestInternal, because it builds a local stack, using memory allocations, and it recomputes signs/rayDirectionInverses each time
- B3_DBVT_PREFIX
- static void rayTest(const b3DbvtNode* root,
- const b3Vector3& rayFrom,
- const b3Vector3& rayTo,
- B3_DBVT_IPOLICY);
- ///rayTestInternal is faster than rayTest, because it uses a persistent stack (to reduce dynamic memory allocations to a minimum) and it uses precomputed signs/rayInverseDirections
- ///rayTestInternal is used by b3DynamicBvhBroadphase to accelerate world ray casts
- B3_DBVT_PREFIX
- void rayTestInternal(const b3DbvtNode* root,
- const b3Vector3& rayFrom,
- const b3Vector3& rayTo,
- const b3Vector3& rayDirectionInverse,
- unsigned int signs[3],
- b3Scalar lambda_max,
- const b3Vector3& aabbMin,
- const b3Vector3& aabbMax,
- B3_DBVT_IPOLICY) const;
-
- B3_DBVT_PREFIX
- static void collideKDOP(const b3DbvtNode* root,
- const b3Vector3* normals,
- const b3Scalar* offsets,
- int count,
- B3_DBVT_IPOLICY);
- B3_DBVT_PREFIX
- static void collideOCL(const b3DbvtNode* root,
- const b3Vector3* normals,
- const b3Scalar* offsets,
- const b3Vector3& sortaxis,
- int count,
- B3_DBVT_IPOLICY,
- bool fullsort = true);
- B3_DBVT_PREFIX
- static void collideTU(const b3DbvtNode* root,
- B3_DBVT_IPOLICY);
- // Helpers
- static B3_DBVT_INLINE int nearest(const int* i, const b3DynamicBvh::sStkNPS* a, b3Scalar v, int l, int h)
- {
- int m = 0;
- while (l < h)
- {
- m = (l + h) >> 1;
- if (a[i[m]].value >= v)
- l = m + 1;
- else
- h = m;
- }
- return (h);
- }
- static B3_DBVT_INLINE int allocate(b3AlignedObjectArray<int>& ifree,
- b3AlignedObjectArray<sStkNPS>& stock,
- const sStkNPS& value)
- {
- int i;
- if (ifree.size() > 0)
- {
- i = ifree[ifree.size() - 1];
- ifree.pop_back();
- stock[i] = value;
- }
- else
- {
- i = stock.size();
- stock.push_back(value);
- }
- return (i);
- }
- //
-private:
- b3DynamicBvh(const b3DynamicBvh&) {}
-};
-
-//
-// Inline's
-//
-
-//
-inline b3DbvtAabbMm b3DbvtAabbMm::FromCE(const b3Vector3& c, const b3Vector3& e)
-{
- b3DbvtAabbMm box;
- box.mi = c - e;
- box.mx = c + e;
- return (box);
-}
-
-//
-inline b3DbvtAabbMm b3DbvtAabbMm::FromCR(const b3Vector3& c, b3Scalar r)
-{
- return (FromCE(c, b3MakeVector3(r, r, r)));
-}
-
-//
-inline b3DbvtAabbMm b3DbvtAabbMm::FromMM(const b3Vector3& mi, const b3Vector3& mx)
-{
- b3DbvtAabbMm box;
- box.mi = mi;
- box.mx = mx;
- return (box);
-}
-
-//
-inline b3DbvtAabbMm b3DbvtAabbMm::FromPoints(const b3Vector3* pts, int n)
-{
- b3DbvtAabbMm box;
- box.mi = box.mx = pts[0];
- for (int i = 1; i < n; ++i)
- {
- box.mi.setMin(pts[i]);
- box.mx.setMax(pts[i]);
- }
- return (box);
-}
-
-//
-inline b3DbvtAabbMm b3DbvtAabbMm::FromPoints(const b3Vector3** ppts, int n)
-{
- b3DbvtAabbMm box;
- box.mi = box.mx = *ppts[0];
- for (int i = 1; i < n; ++i)
- {
- box.mi.setMin(*ppts[i]);
- box.mx.setMax(*ppts[i]);
- }
- return (box);
-}
-
-//
-B3_DBVT_INLINE void b3DbvtAabbMm::Expand(const b3Vector3& e)
-{
- mi -= e;
- mx += e;
-}
-
-//
-B3_DBVT_INLINE void b3DbvtAabbMm::SignedExpand(const b3Vector3& e)
-{
- if (e.x > 0)
- mx.setX(mx.x + e[0]);
- else
- mi.setX(mi.x + e[0]);
- if (e.y > 0)
- mx.setY(mx.y + e[1]);
- else
- mi.setY(mi.y + e[1]);
- if (e.z > 0)
- mx.setZ(mx.z + e[2]);
- else
- mi.setZ(mi.z + e[2]);
-}
-
-//
-B3_DBVT_INLINE bool b3DbvtAabbMm::Contain(const b3DbvtAabbMm& a) const
-{
- return ((mi.x <= a.mi.x) &&
- (mi.y <= a.mi.y) &&
- (mi.z <= a.mi.z) &&
- (mx.x >= a.mx.x) &&
- (mx.y >= a.mx.y) &&
- (mx.z >= a.mx.z));
-}
-
-//
-B3_DBVT_INLINE int b3DbvtAabbMm::Classify(const b3Vector3& n, b3Scalar o, int s) const
-{
- b3Vector3 pi, px;
- switch (s)
- {
- case (0 + 0 + 0):
- px = b3MakeVector3(mi.x, mi.y, mi.z);
- pi = b3MakeVector3(mx.x, mx.y, mx.z);
- break;
- case (1 + 0 + 0):
- px = b3MakeVector3(mx.x, mi.y, mi.z);
- pi = b3MakeVector3(mi.x, mx.y, mx.z);
- break;
- case (0 + 2 + 0):
- px = b3MakeVector3(mi.x, mx.y, mi.z);
- pi = b3MakeVector3(mx.x, mi.y, mx.z);
- break;
- case (1 + 2 + 0):
- px = b3MakeVector3(mx.x, mx.y, mi.z);
- pi = b3MakeVector3(mi.x, mi.y, mx.z);
- break;
- case (0 + 0 + 4):
- px = b3MakeVector3(mi.x, mi.y, mx.z);
- pi = b3MakeVector3(mx.x, mx.y, mi.z);
- break;
- case (1 + 0 + 4):
- px = b3MakeVector3(mx.x, mi.y, mx.z);
- pi = b3MakeVector3(mi.x, mx.y, mi.z);
- break;
- case (0 + 2 + 4):
- px = b3MakeVector3(mi.x, mx.y, mx.z);
- pi = b3MakeVector3(mx.x, mi.y, mi.z);
- break;
- case (1 + 2 + 4):
- px = b3MakeVector3(mx.x, mx.y, mx.z);
- pi = b3MakeVector3(mi.x, mi.y, mi.z);
- break;
- }
- if ((b3Dot(n, px) + o) < 0) return (-1);
- if ((b3Dot(n, pi) + o) >= 0) return (+1);
- return (0);
-}
-
-//
-B3_DBVT_INLINE b3Scalar b3DbvtAabbMm::ProjectMinimum(const b3Vector3& v, unsigned signs) const
-{
- const b3Vector3* b[] = {&mx, &mi};
- const b3Vector3 p = b3MakeVector3(b[(signs >> 0) & 1]->x,
- b[(signs >> 1) & 1]->y,
- b[(signs >> 2) & 1]->z);
- return (b3Dot(p, v));
-}
-
-//
-B3_DBVT_INLINE void b3DbvtAabbMm::AddSpan(const b3Vector3& d, b3Scalar& smi, b3Scalar& smx) const
-{
- for (int i = 0; i < 3; ++i)
- {
- if (d[i] < 0)
- {
- smi += mx[i] * d[i];
- smx += mi[i] * d[i];
- }
- else
- {
- smi += mi[i] * d[i];
- smx += mx[i] * d[i];
- }
- }
-}
-
-//
-B3_DBVT_INLINE bool b3Intersect(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b)
-{
-#if B3_DBVT_INT0_IMPL == B3_DBVT_IMPL_SSE
- const __m128 rt(_mm_or_ps(_mm_cmplt_ps(_mm_load_ps(b.mx), _mm_load_ps(a.mi)),
- _mm_cmplt_ps(_mm_load_ps(a.mx), _mm_load_ps(b.mi))));
-#if defined(_WIN32)
- const __int32* pu((const __int32*)&rt);
-#else
- const int* pu((const int*)&rt);
-#endif
- return ((pu[0] | pu[1] | pu[2]) == 0);
-#else
- return ((a.mi.x <= b.mx.x) &&
- (a.mx.x >= b.mi.x) &&
- (a.mi.y <= b.mx.y) &&
- (a.mx.y >= b.mi.y) &&
- (a.mi.z <= b.mx.z) &&
- (a.mx.z >= b.mi.z));
-#endif
-}
-
-//
-B3_DBVT_INLINE bool b3Intersect(const b3DbvtAabbMm& a,
- const b3Vector3& b)
-{
- return ((b.x >= a.mi.x) &&
- (b.y >= a.mi.y) &&
- (b.z >= a.mi.z) &&
- (b.x <= a.mx.x) &&
- (b.y <= a.mx.y) &&
- (b.z <= a.mx.z));
-}
-
-//////////////////////////////////////
-
-//
-B3_DBVT_INLINE b3Scalar b3Proximity(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b)
-{
- const b3Vector3 d = (a.mi + a.mx) - (b.mi + b.mx);
- return (b3Fabs(d.x) + b3Fabs(d.y) + b3Fabs(d.z));
-}
-
-//
-B3_DBVT_INLINE int b3Select(const b3DbvtAabbMm& o,
- const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b)
-{
-#if B3_DBVT_SELECT_IMPL == B3_DBVT_IMPL_SSE
-
-#if defined(_WIN32)
- static B3_ATTRIBUTE_ALIGNED16(const unsigned __int32) mask[] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff};
-#else
- static B3_ATTRIBUTE_ALIGNED16(const unsigned int) mask[] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x00000000 /*0x7fffffff*/};
-#endif
- ///@todo: the intrinsic version is 11% slower
-#if B3_DBVT_USE_INTRINSIC_SSE
-
- union b3SSEUnion ///NOTE: if we use more intrinsics, move b3SSEUnion into the LinearMath directory
- {
- __m128 ssereg;
- float floats[4];
- int ints[4];
- };
-
- __m128 omi(_mm_load_ps(o.mi));
- omi = _mm_add_ps(omi, _mm_load_ps(o.mx));
- __m128 ami(_mm_load_ps(a.mi));
- ami = _mm_add_ps(ami, _mm_load_ps(a.mx));
- ami = _mm_sub_ps(ami, omi);
- ami = _mm_and_ps(ami, _mm_load_ps((const float*)mask));
- __m128 bmi(_mm_load_ps(b.mi));
- bmi = _mm_add_ps(bmi, _mm_load_ps(b.mx));
- bmi = _mm_sub_ps(bmi, omi);
- bmi = _mm_and_ps(bmi, _mm_load_ps((const float*)mask));
- __m128 t0(_mm_movehl_ps(ami, ami));
- ami = _mm_add_ps(ami, t0);
- ami = _mm_add_ss(ami, _mm_shuffle_ps(ami, ami, 1));
- __m128 t1(_mm_movehl_ps(bmi, bmi));
- bmi = _mm_add_ps(bmi, t1);
- bmi = _mm_add_ss(bmi, _mm_shuffle_ps(bmi, bmi, 1));
-
- b3SSEUnion tmp;
- tmp.ssereg = _mm_cmple_ss(bmi, ami);
- return tmp.ints[0] & 1;
-
-#else
- B3_ATTRIBUTE_ALIGNED16(__int32 r[1]);
- __asm
- {
- mov eax,o
- mov ecx,a
- mov edx,b
- movaps xmm0,[eax]
- movaps xmm5,mask
- addps xmm0,[eax+16]
- movaps xmm1,[ecx]
- movaps xmm2,[edx]
- addps xmm1,[ecx+16]
- addps xmm2,[edx+16]
- subps xmm1,xmm0
- subps xmm2,xmm0
- andps xmm1,xmm5
- andps xmm2,xmm5
- movhlps xmm3,xmm1
- movhlps xmm4,xmm2
- addps xmm1,xmm3
- addps xmm2,xmm4
- pshufd xmm3,xmm1,1
- pshufd xmm4,xmm2,1
- addss xmm1,xmm3
- addss xmm2,xmm4
- cmpless xmm2,xmm1
- movss r,xmm2
- }
- return (r[0] & 1);
-#endif
-#else
- return (b3Proximity(o, a) < b3Proximity(o, b) ? 0 : 1);
-#endif
-}
-
-//
-B3_DBVT_INLINE void b3Merge(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b,
- b3DbvtAabbMm& r)
-{
-#if B3_DBVT_MERGE_IMPL == B3_DBVT_IMPL_SSE
- __m128 ami(_mm_load_ps(a.mi));
- __m128 amx(_mm_load_ps(a.mx));
- __m128 bmi(_mm_load_ps(b.mi));
- __m128 bmx(_mm_load_ps(b.mx));
- ami = _mm_min_ps(ami, bmi);
- amx = _mm_max_ps(amx, bmx);
- _mm_store_ps(r.mi, ami);
- _mm_store_ps(r.mx, amx);
-#else
- for (int i = 0; i < 3; ++i)
- {
- if (a.mi[i] < b.mi[i])
- r.mi[i] = a.mi[i];
- else
- r.mi[i] = b.mi[i];
- if (a.mx[i] > b.mx[i])
- r.mx[i] = a.mx[i];
- else
- r.mx[i] = b.mx[i];
- }
-#endif
-}
-
-//
-B3_DBVT_INLINE bool b3NotEqual(const b3DbvtAabbMm& a,
- const b3DbvtAabbMm& b)
-{
- return ((a.mi.x != b.mi.x) ||
- (a.mi.y != b.mi.y) ||
- (a.mi.z != b.mi.z) ||
- (a.mx.x != b.mx.x) ||
- (a.mx.y != b.mx.y) ||
- (a.mx.z != b.mx.z));
-}
-
-//
-// Inline's
-//
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::enumNodes(const b3DbvtNode* root,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- policy.Process(root);
- if (root->isinternal())
- {
- enumNodes(root->childs[0], policy);
- enumNodes(root->childs[1], policy);
- }
-}
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::enumLeaves(const b3DbvtNode* root,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if (root->isinternal())
- {
- enumLeaves(root->childs[0], policy);
- enumLeaves(root->childs[1], policy);
- }
- else
- {
- policy.Process(root);
- }
-}
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideTT(const b3DbvtNode* root0,
- const b3DbvtNode* root1,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if (root0 && root1)
- {
- int depth = 1;
- int treshold = B3_DOUBLE_STACKSIZE - 4;
- b3AlignedObjectArray<sStkNN> stkStack;
- stkStack.resize(B3_DOUBLE_STACKSIZE);
- stkStack[0] = sStkNN(root0, root1);
- do
- {
- sStkNN p = stkStack[--depth];
- if (depth > treshold)
- {
- stkStack.resize(stkStack.size() * 2);
- treshold = stkStack.size() - 4;
- }
- if (p.a == p.b)
- {
- if (p.a->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]);
- stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]);
- }
- }
- else if (b3Intersect(p.a->volume, p.b->volume))
- {
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a, p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a, p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideTTpersistentStack(const b3DbvtNode* root0,
- const b3DbvtNode* root1,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if (root0 && root1)
- {
- int depth = 1;
- int treshold = B3_DOUBLE_STACKSIZE - 4;
-
- m_stkStack.resize(B3_DOUBLE_STACKSIZE);
- m_stkStack[0] = sStkNN(root0, root1);
- do
- {
- sStkNN p = m_stkStack[--depth];
- if (depth > treshold)
- {
- m_stkStack.resize(m_stkStack.size() * 2);
- treshold = m_stkStack.size() - 4;
- }
- if (p.a == p.b)
- {
- if (p.a->isinternal())
- {
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]);
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]);
- }
- }
- else if (b3Intersect(p.a->volume, p.b->volume))
- {
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- m_stkStack[depth++] = sStkNN(p.a, p.b->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a, p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-#if 0
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideTT( const b3DbvtNode* root0,
- const b3DbvtNode* root1,
- const b3Transform& xform,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if(root0&&root1)
- {
- int depth=1;
- int treshold=B3_DOUBLE_STACKSIZE-4;
- b3AlignedObjectArray<sStkNN> stkStack;
- stkStack.resize(B3_DOUBLE_STACKSIZE);
- stkStack[0]=sStkNN(root0,root1);
- do {
- sStkNN p=stkStack[--depth];
- if(b3Intersect(p.a->volume,p.b->volume,xform))
- {
- if(depth>treshold)
- {
- stkStack.resize(stkStack.size()*2);
- treshold=stkStack.size()-4;
- }
- if(p.a->isinternal())
- {
- if(p.b->isinternal())
- {
- stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]);
- stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]);
- stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]);
- stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]);
- }
- else
- {
- stkStack[depth++]=sStkNN(p.a->childs[0],p.b);
- stkStack[depth++]=sStkNN(p.a->childs[1],p.b);
- }
- }
- else
- {
- if(p.b->isinternal())
- {
- stkStack[depth++]=sStkNN(p.a,p.b->childs[0]);
- stkStack[depth++]=sStkNN(p.a,p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a,p.b);
- }
- }
- }
- } while(depth);
- }
-}
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideTT( const b3DbvtNode* root0,
- const b3Transform& xform0,
- const b3DbvtNode* root1,
- const b3Transform& xform1,
- B3_DBVT_IPOLICY)
-{
- const b3Transform xform=xform0.inverse()*xform1;
- collideTT(root0,root1,xform,policy);
-}
-#endif
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideTV(const b3DbvtNode* root,
- const b3DbvtVolume& vol,
- B3_DBVT_IPOLICY) const
-{
- B3_DBVT_CHECKTYPE
- if (root)
- {
- B3_ATTRIBUTE_ALIGNED16(b3DbvtVolume)
- volume(vol);
- b3AlignedObjectArray<const b3DbvtNode*> stack;
- stack.resize(0);
- stack.reserve(B3_SIMPLE_STACKSIZE);
- stack.push_back(root);
- do
- {
- const b3DbvtNode* n = stack[stack.size() - 1];
- stack.pop_back();
- if (b3Intersect(n->volume, volume))
- {
- if (n->isinternal())
- {
- stack.push_back(n->childs[0]);
- stack.push_back(n->childs[1]);
- }
- else
- {
- policy.Process(n);
- }
- }
- } while (stack.size() > 0);
- }
-}
-
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::rayTestInternal(const b3DbvtNode* root,
- const b3Vector3& rayFrom,
- const b3Vector3& rayTo,
- const b3Vector3& rayDirectionInverse,
- unsigned int signs[3],
- b3Scalar lambda_max,
- const b3Vector3& aabbMin,
- const b3Vector3& aabbMax,
- B3_DBVT_IPOLICY) const
-{
- (void)rayTo;
- B3_DBVT_CHECKTYPE
- if (root)
- {
- int depth = 1;
- int treshold = B3_DOUBLE_STACKSIZE - 2;
- b3AlignedObjectArray<const b3DbvtNode*>& stack = m_rayTestStack;
- stack.resize(B3_DOUBLE_STACKSIZE);
- stack[0] = root;
- b3Vector3 bounds[2];
- do
- {
- const b3DbvtNode* node = stack[--depth];
- bounds[0] = node->volume.Mins() - aabbMax;
- bounds[1] = node->volume.Maxs() - aabbMin;
- b3Scalar tmin = 1.f, lambda_min = 0.f;
- unsigned int result1 = false;
- result1 = b3RayAabb2(rayFrom, rayDirectionInverse, signs, bounds, tmin, lambda_min, lambda_max);
- if (result1)
- {
- if (node->isinternal())
- {
- if (depth > treshold)
- {
- stack.resize(stack.size() * 2);
- treshold = stack.size() - 2;
- }
- stack[depth++] = node->childs[0];
- stack[depth++] = node->childs[1];
- }
- else
- {
- policy.Process(node);
- }
- }
- } while (depth);
- }
-}
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::rayTest(const b3DbvtNode* root,
- const b3Vector3& rayFrom,
- const b3Vector3& rayTo,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if (root)
- {
- b3Vector3 rayDir = (rayTo - rayFrom);
- rayDir.normalize();
-
- ///what about division by zero? --> just set rayDirection[i] to INF/B3_LARGE_FLOAT
- b3Vector3 rayDirectionInverse;
- rayDirectionInverse[0] = rayDir[0] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[0];
- rayDirectionInverse[1] = rayDir[1] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[1];
- rayDirectionInverse[2] = rayDir[2] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[2];
- unsigned int signs[3] = {rayDirectionInverse[0] < 0.0, rayDirectionInverse[1] < 0.0, rayDirectionInverse[2] < 0.0};
-
- b3Scalar lambda_max = rayDir.dot(rayTo - rayFrom);
-#ifdef COMPARE_BTRAY_AABB2
- b3Vector3 resultNormal;
-#endif //COMPARE_BTRAY_AABB2
-
- b3AlignedObjectArray<const b3DbvtNode*> stack;
-
- int depth = 1;
- int treshold = B3_DOUBLE_STACKSIZE - 2;
-
- stack.resize(B3_DOUBLE_STACKSIZE);
- stack[0] = root;
- b3Vector3 bounds[2];
- do
- {
- const b3DbvtNode* node = stack[--depth];
-
- bounds[0] = node->volume.Mins();
- bounds[1] = node->volume.Maxs();
-
- b3Scalar tmin = 1.f, lambda_min = 0.f;
- unsigned int result1 = b3RayAabb2(rayFrom, rayDirectionInverse, signs, bounds, tmin, lambda_min, lambda_max);
-
-#ifdef COMPARE_BTRAY_AABB2
- b3Scalar param = 1.f;
- bool result2 = b3RayAabb(rayFrom, rayTo, node->volume.Mins(), node->volume.Maxs(), param, resultNormal);
- b3Assert(result1 == result2);
-#endif //TEST_BTRAY_AABB2
-
- if (result1)
- {
- if (node->isinternal())
- {
- if (depth > treshold)
- {
- stack.resize(stack.size() * 2);
- treshold = stack.size() - 2;
- }
- stack[depth++] = node->childs[0];
- stack[depth++] = node->childs[1];
- }
- else
- {
- policy.Process(node);
- }
- }
- } while (depth);
- }
-}
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideKDOP(const b3DbvtNode* root,
- const b3Vector3* normals,
- const b3Scalar* offsets,
- int count,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if (root)
- {
- const int inside = (1 << count) - 1;
- b3AlignedObjectArray<sStkNP> stack;
- int signs[sizeof(unsigned) * 8];
- b3Assert(count < int(sizeof(signs) / sizeof(signs[0])));
- for (int i = 0; i < count; ++i)
- {
- signs[i] = ((normals[i].x >= 0) ? 1 : 0) +
- ((normals[i].y >= 0) ? 2 : 0) +
- ((normals[i].z >= 0) ? 4 : 0);
- }
- stack.reserve(B3_SIMPLE_STACKSIZE);
- stack.push_back(sStkNP(root, 0));
- do
- {
- sStkNP se = stack[stack.size() - 1];
- bool out = false;
- stack.pop_back();
- for (int i = 0, j = 1; (!out) && (i < count); ++i, j <<= 1)
- {
- if (0 == (se.mask & j))
- {
- const int side = se.node->volume.Classify(normals[i], offsets[i], signs[i]);
- switch (side)
- {
- case -1:
- out = true;
- break;
- case +1:
- se.mask |= j;
- break;
- }
- }
- }
- if (!out)
- {
- if ((se.mask != inside) && (se.node->isinternal()))
- {
- stack.push_back(sStkNP(se.node->childs[0], se.mask));
- stack.push_back(sStkNP(se.node->childs[1], se.mask));
- }
- else
- {
- if (policy.AllLeaves(se.node)) enumLeaves(se.node, policy);
- }
- }
- } while (stack.size());
- }
-}
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideOCL(const b3DbvtNode* root,
- const b3Vector3* normals,
- const b3Scalar* offsets,
- const b3Vector3& sortaxis,
- int count,
- B3_DBVT_IPOLICY,
- bool fsort)
-{
- B3_DBVT_CHECKTYPE
- if (root)
- {
- const unsigned srtsgns = (sortaxis[0] >= 0 ? 1 : 0) +
- (sortaxis[1] >= 0 ? 2 : 0) +
- (sortaxis[2] >= 0 ? 4 : 0);
- const int inside = (1 << count) - 1;
- b3AlignedObjectArray<sStkNPS> stock;
- b3AlignedObjectArray<int> ifree;
- b3AlignedObjectArray<int> stack;
- int signs[sizeof(unsigned) * 8];
- b3Assert(count < int(sizeof(signs) / sizeof(signs[0])));
- for (int i = 0; i < count; ++i)
- {
- signs[i] = ((normals[i].x >= 0) ? 1 : 0) +
- ((normals[i].y >= 0) ? 2 : 0) +
- ((normals[i].z >= 0) ? 4 : 0);
- }
- stock.reserve(B3_SIMPLE_STACKSIZE);
- stack.reserve(B3_SIMPLE_STACKSIZE);
- ifree.reserve(B3_SIMPLE_STACKSIZE);
- stack.push_back(allocate(ifree, stock, sStkNPS(root, 0, root->volume.ProjectMinimum(sortaxis, srtsgns))));
- do
- {
- const int id = stack[stack.size() - 1];
- sStkNPS se = stock[id];
- stack.pop_back();
- ifree.push_back(id);
- if (se.mask != inside)
- {
- bool out = false;
- for (int i = 0, j = 1; (!out) && (i < count); ++i, j <<= 1)
- {
- if (0 == (se.mask & j))
- {
- const int side = se.node->volume.Classify(normals[i], offsets[i], signs[i]);
- switch (side)
- {
- case -1:
- out = true;
- break;
- case +1:
- se.mask |= j;
- break;
- }
- }
- }
- if (out) continue;
- }
- if (policy.Descent(se.node))
- {
- if (se.node->isinternal())
- {
- const b3DbvtNode* pns[] = {se.node->childs[0], se.node->childs[1]};
- sStkNPS nes[] = {sStkNPS(pns[0], se.mask, pns[0]->volume.ProjectMinimum(sortaxis, srtsgns)),
- sStkNPS(pns[1], se.mask, pns[1]->volume.ProjectMinimum(sortaxis, srtsgns))};
- const int q = nes[0].value < nes[1].value ? 1 : 0;
- int j = stack.size();
- if (fsort && (j > 0))
- {
- /* Insert 0 */
- j = nearest(&stack[0], &stock[0], nes[q].value, 0, stack.size());
- stack.push_back(0);
-#if B3_DBVT_USE_MEMMOVE
- memmove(&stack[j + 1], &stack[j], sizeof(int) * (stack.size() - j - 1));
-#else
- for (int k = stack.size() - 1; k > j; --k) stack[k] = stack[k - 1];
-#endif
- stack[j] = allocate(ifree, stock, nes[q]);
- /* Insert 1 */
- j = nearest(&stack[0], &stock[0], nes[1 - q].value, j, stack.size());
- stack.push_back(0);
-#if B3_DBVT_USE_MEMMOVE
- memmove(&stack[j + 1], &stack[j], sizeof(int) * (stack.size() - j - 1));
-#else
- for (int k = stack.size() - 1; k > j; --k) stack[k] = stack[k - 1];
-#endif
- stack[j] = allocate(ifree, stock, nes[1 - q]);
- }
- else
- {
- stack.push_back(allocate(ifree, stock, nes[q]));
- stack.push_back(allocate(ifree, stock, nes[1 - q]));
- }
- }
- else
- {
- policy.Process(se.node, se.value);
- }
- }
- } while (stack.size());
- }
-}
-
-//
-B3_DBVT_PREFIX
-inline void b3DynamicBvh::collideTU(const b3DbvtNode* root,
- B3_DBVT_IPOLICY)
-{
- B3_DBVT_CHECKTYPE
- if (root)
- {
- b3AlignedObjectArray<const b3DbvtNode*> stack;
- stack.reserve(B3_SIMPLE_STACKSIZE);
- stack.push_back(root);
- do
- {
- const b3DbvtNode* n = stack[stack.size() - 1];
- stack.pop_back();
- if (policy.Descent(n))
- {
- if (n->isinternal())
- {
- stack.push_back(n->childs[0]);
- stack.push_back(n->childs[1]);
- }
- else
- {
- policy.Process(n);
- }
- }
- } while (stack.size() > 0);
- }
-}
-
-//
-// PP Cleanup
-//
-
-#undef B3_DBVT_USE_MEMMOVE
-#undef B3_DBVT_USE_TEMPLATE
-#undef B3_DBVT_VIRTUAL_DTOR
-#undef B3_DBVT_VIRTUAL
-#undef B3_DBVT_PREFIX
-#undef B3_DBVT_IPOLICY
-#undef B3_DBVT_CHECKTYPE
-#undef B3_DBVT_IMPL_GENERIC
-#undef B3_DBVT_IMPL_SSE
-#undef B3_DBVT_USE_INTRINSIC_SSE
-#undef B3_DBVT_SELECT_IMPL
-#undef B3_DBVT_MERGE_IMPL
-#undef B3_DBVT_INT0_IMPL
-
-#endif
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.cpp b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.cpp
deleted file mode 100644
index dea2ddb0f2..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.cpp
+++ /dev/null
@@ -1,808 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///b3DynamicBvhBroadphase implementation by Nathanael Presson
-
-#include "b3DynamicBvhBroadphase.h"
-#include "b3OverlappingPair.h"
-
-//
-// Profiling
-//
-
-#if B3_DBVT_BP_PROFILE || B3_DBVT_BP_ENABLE_BENCHMARK
-#include <stdio.h>
-#endif
-
-#if B3_DBVT_BP_PROFILE
-struct b3ProfileScope
-{
- __forceinline b3ProfileScope(b3Clock& clock, unsigned long& value) : m_clock(&clock), m_value(&value), m_base(clock.getTimeMicroseconds())
- {
- }
- __forceinline ~b3ProfileScope()
- {
- (*m_value) += m_clock->getTimeMicroseconds() - m_base;
- }
- b3Clock* m_clock;
- unsigned long* m_value;
- unsigned long m_base;
-};
-#define b3SPC(_value_) b3ProfileScope spc_scope(m_clock, _value_)
-#else
-#define b3SPC(_value_)
-#endif
-
-//
-// Helpers
-//
-
-//
-template <typename T>
-static inline void b3ListAppend(T* item, T*& list)
-{
- item->links[0] = 0;
- item->links[1] = list;
- if (list) list->links[0] = item;
- list = item;
-}
-
-//
-template <typename T>
-static inline void b3ListRemove(T* item, T*& list)
-{
- if (item->links[0])
- item->links[0]->links[1] = item->links[1];
- else
- list = item->links[1];
- if (item->links[1]) item->links[1]->links[0] = item->links[0];
-}
-
-//
-template <typename T>
-static inline int b3ListCount(T* root)
-{
- int n = 0;
- while (root)
- {
- ++n;
- root = root->links[1];
- }
- return (n);
-}
-
-//
-template <typename T>
-static inline void b3Clear(T& value)
-{
- static const struct ZeroDummy : T
- {
- } zerodummy;
- value = zerodummy;
-}
-
-//
-// Colliders
-//
-
-/* Tree collider */
-struct b3DbvtTreeCollider : b3DynamicBvh::ICollide
-{
- b3DynamicBvhBroadphase* pbp;
- b3DbvtProxy* proxy;
- b3DbvtTreeCollider(b3DynamicBvhBroadphase* p) : pbp(p) {}
- void Process(const b3DbvtNode* na, const b3DbvtNode* nb)
- {
- if (na != nb)
- {
- b3DbvtProxy* pa = (b3DbvtProxy*)na->data;
- b3DbvtProxy* pb = (b3DbvtProxy*)nb->data;
-#if B3_DBVT_BP_SORTPAIRS
- if (pa->m_uniqueId > pb->m_uniqueId)
- b3Swap(pa, pb);
-#endif
- pbp->m_paircache->addOverlappingPair(pa->getUid(), pb->getUid());
- ++pbp->m_newpairs;
- }
- }
- void Process(const b3DbvtNode* n)
- {
- Process(n, proxy->leaf);
- }
-};
-
-//
-// b3DynamicBvhBroadphase
-//
-
-//
-b3DynamicBvhBroadphase::b3DynamicBvhBroadphase(int proxyCapacity, b3OverlappingPairCache* paircache)
-{
- m_deferedcollide = false;
- m_needcleanup = true;
- m_releasepaircache = (paircache != 0) ? false : true;
- m_prediction = 0;
- m_stageCurrent = 0;
- m_fixedleft = 0;
- m_fupdates = 1;
- m_dupdates = 0;
- m_cupdates = 10;
- m_newpairs = 1;
- m_updates_call = 0;
- m_updates_done = 0;
- m_updates_ratio = 0;
- m_paircache = paircache ? paircache : new (b3AlignedAlloc(sizeof(b3HashedOverlappingPairCache), 16)) b3HashedOverlappingPairCache();
-
- m_pid = 0;
- m_cid = 0;
- for (int i = 0; i <= STAGECOUNT; ++i)
- {
- m_stageRoots[i] = 0;
- }
-#if B3_DBVT_BP_PROFILE
- b3Clear(m_profiling);
-#endif
- m_proxies.resize(proxyCapacity);
-}
-
-//
-b3DynamicBvhBroadphase::~b3DynamicBvhBroadphase()
-{
- if (m_releasepaircache)
- {
- m_paircache->~b3OverlappingPairCache();
- b3AlignedFree(m_paircache);
- }
-}
-
-//
-b3BroadphaseProxy* b3DynamicBvhBroadphase::createProxy(const b3Vector3& aabbMin,
- const b3Vector3& aabbMax,
- int objectId,
- void* userPtr,
- int collisionFilterGroup,
- int collisionFilterMask)
-{
- b3DbvtProxy* mem = &m_proxies[objectId];
- b3DbvtProxy* proxy = new (mem) b3DbvtProxy(aabbMin, aabbMax, userPtr,
- collisionFilterGroup,
- collisionFilterMask);
-
- b3DbvtAabbMm aabb = b3DbvtVolume::FromMM(aabbMin, aabbMax);
-
- //bproxy->aabb = b3DbvtVolume::FromMM(aabbMin,aabbMax);
- proxy->stage = m_stageCurrent;
- proxy->m_uniqueId = objectId;
- proxy->leaf = m_sets[0].insert(aabb, proxy);
- b3ListAppend(proxy, m_stageRoots[m_stageCurrent]);
- if (!m_deferedcollide)
- {
- b3DbvtTreeCollider collider(this);
- collider.proxy = proxy;
- m_sets[0].collideTV(m_sets[0].m_root, aabb, collider);
- m_sets[1].collideTV(m_sets[1].m_root, aabb, collider);
- }
- return (proxy);
-}
-
-//
-void b3DynamicBvhBroadphase::destroyProxy(b3BroadphaseProxy* absproxy,
- b3Dispatcher* dispatcher)
-{
- b3DbvtProxy* proxy = (b3DbvtProxy*)absproxy;
- if (proxy->stage == STAGECOUNT)
- m_sets[1].remove(proxy->leaf);
- else
- m_sets[0].remove(proxy->leaf);
- b3ListRemove(proxy, m_stageRoots[proxy->stage]);
- m_paircache->removeOverlappingPairsContainingProxy(proxy->getUid(), dispatcher);
-
- m_needcleanup = true;
-}
-
-void b3DynamicBvhBroadphase::getAabb(int objectId, b3Vector3& aabbMin, b3Vector3& aabbMax) const
-{
- const b3DbvtProxy* proxy = &m_proxies[objectId];
- aabbMin = proxy->m_aabbMin;
- aabbMax = proxy->m_aabbMax;
-}
-/*
-void b3DynamicBvhBroadphase::getAabb(b3BroadphaseProxy* absproxy,b3Vector3& aabbMin, b3Vector3& aabbMax ) const
-{
- b3DbvtProxy* proxy=(b3DbvtProxy*)absproxy;
- aabbMin = proxy->m_aabbMin;
- aabbMax = proxy->m_aabbMax;
-}
-*/
-
-struct BroadphaseRayTester : b3DynamicBvh::ICollide
-{
- b3BroadphaseRayCallback& m_rayCallback;
- BroadphaseRayTester(b3BroadphaseRayCallback& orgCallback)
- : m_rayCallback(orgCallback)
- {
- }
- void Process(const b3DbvtNode* leaf)
- {
- b3DbvtProxy* proxy = (b3DbvtProxy*)leaf->data;
- m_rayCallback.process(proxy);
- }
-};
-
-void b3DynamicBvhBroadphase::rayTest(const b3Vector3& rayFrom, const b3Vector3& rayTo, b3BroadphaseRayCallback& rayCallback, const b3Vector3& aabbMin, const b3Vector3& aabbMax)
-{
- BroadphaseRayTester callback(rayCallback);
-
- m_sets[0].rayTestInternal(m_sets[0].m_root,
- rayFrom,
- rayTo,
- rayCallback.m_rayDirectionInverse,
- rayCallback.m_signs,
- rayCallback.m_lambda_max,
- aabbMin,
- aabbMax,
- callback);
-
- m_sets[1].rayTestInternal(m_sets[1].m_root,
- rayFrom,
- rayTo,
- rayCallback.m_rayDirectionInverse,
- rayCallback.m_signs,
- rayCallback.m_lambda_max,
- aabbMin,
- aabbMax,
- callback);
-}
-
-struct BroadphaseAabbTester : b3DynamicBvh::ICollide
-{
- b3BroadphaseAabbCallback& m_aabbCallback;
- BroadphaseAabbTester(b3BroadphaseAabbCallback& orgCallback)
- : m_aabbCallback(orgCallback)
- {
- }
- void Process(const b3DbvtNode* leaf)
- {
- b3DbvtProxy* proxy = (b3DbvtProxy*)leaf->data;
- m_aabbCallback.process(proxy);
- }
-};
-
-void b3DynamicBvhBroadphase::aabbTest(const b3Vector3& aabbMin, const b3Vector3& aabbMax, b3BroadphaseAabbCallback& aabbCallback)
-{
- BroadphaseAabbTester callback(aabbCallback);
-
- const B3_ATTRIBUTE_ALIGNED16(b3DbvtVolume) bounds = b3DbvtVolume::FromMM(aabbMin, aabbMax);
- //process all children, that overlap with the given AABB bounds
- m_sets[0].collideTV(m_sets[0].m_root, bounds, callback);
- m_sets[1].collideTV(m_sets[1].m_root, bounds, callback);
-}
-
-//
-void b3DynamicBvhBroadphase::setAabb(int objectId,
- const b3Vector3& aabbMin,
- const b3Vector3& aabbMax,
- b3Dispatcher* /*dispatcher*/)
-{
- b3DbvtProxy* proxy = &m_proxies[objectId];
- // b3DbvtProxy* proxy=(b3DbvtProxy*)absproxy;
- B3_ATTRIBUTE_ALIGNED16(b3DbvtVolume)
- aabb = b3DbvtVolume::FromMM(aabbMin, aabbMax);
-#if B3_DBVT_BP_PREVENTFALSEUPDATE
- if (b3NotEqual(aabb, proxy->leaf->volume))
-#endif
- {
- bool docollide = false;
- if (proxy->stage == STAGECOUNT)
- { /* fixed -> dynamic set */
- m_sets[1].remove(proxy->leaf);
- proxy->leaf = m_sets[0].insert(aabb, proxy);
- docollide = true;
- }
- else
- { /* dynamic set */
- ++m_updates_call;
- if (b3Intersect(proxy->leaf->volume, aabb))
- { /* Moving */
-
- const b3Vector3 delta = aabbMin - proxy->m_aabbMin;
- b3Vector3 velocity(((proxy->m_aabbMax - proxy->m_aabbMin) / 2) * m_prediction);
- if (delta[0] < 0) velocity[0] = -velocity[0];
- if (delta[1] < 0) velocity[1] = -velocity[1];
- if (delta[2] < 0) velocity[2] = -velocity[2];
- if (
-#ifdef B3_DBVT_BP_MARGIN
- m_sets[0].update(proxy->leaf, aabb, velocity, B3_DBVT_BP_MARGIN)
-#else
- m_sets[0].update(proxy->leaf, aabb, velocity)
-#endif
- )
- {
- ++m_updates_done;
- docollide = true;
- }
- }
- else
- { /* Teleporting */
- m_sets[0].update(proxy->leaf, aabb);
- ++m_updates_done;
- docollide = true;
- }
- }
- b3ListRemove(proxy, m_stageRoots[proxy->stage]);
- proxy->m_aabbMin = aabbMin;
- proxy->m_aabbMax = aabbMax;
- proxy->stage = m_stageCurrent;
- b3ListAppend(proxy, m_stageRoots[m_stageCurrent]);
- if (docollide)
- {
- m_needcleanup = true;
- if (!m_deferedcollide)
- {
- b3DbvtTreeCollider collider(this);
- m_sets[1].collideTTpersistentStack(m_sets[1].m_root, proxy->leaf, collider);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, proxy->leaf, collider);
- }
- }
- }
-}
-
-//
-void b3DynamicBvhBroadphase::setAabbForceUpdate(b3BroadphaseProxy* absproxy,
- const b3Vector3& aabbMin,
- const b3Vector3& aabbMax,
- b3Dispatcher* /*dispatcher*/)
-{
- b3DbvtProxy* proxy = (b3DbvtProxy*)absproxy;
- B3_ATTRIBUTE_ALIGNED16(b3DbvtVolume)
- aabb = b3DbvtVolume::FromMM(aabbMin, aabbMax);
- bool docollide = false;
- if (proxy->stage == STAGECOUNT)
- { /* fixed -> dynamic set */
- m_sets[1].remove(proxy->leaf);
- proxy->leaf = m_sets[0].insert(aabb, proxy);
- docollide = true;
- }
- else
- { /* dynamic set */
- ++m_updates_call;
- /* Teleporting */
- m_sets[0].update(proxy->leaf, aabb);
- ++m_updates_done;
- docollide = true;
- }
- b3ListRemove(proxy, m_stageRoots[proxy->stage]);
- proxy->m_aabbMin = aabbMin;
- proxy->m_aabbMax = aabbMax;
- proxy->stage = m_stageCurrent;
- b3ListAppend(proxy, m_stageRoots[m_stageCurrent]);
- if (docollide)
- {
- m_needcleanup = true;
- if (!m_deferedcollide)
- {
- b3DbvtTreeCollider collider(this);
- m_sets[1].collideTTpersistentStack(m_sets[1].m_root, proxy->leaf, collider);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, proxy->leaf, collider);
- }
- }
-}
-
-//
-void b3DynamicBvhBroadphase::calculateOverlappingPairs(b3Dispatcher* dispatcher)
-{
- collide(dispatcher);
-#if B3_DBVT_BP_PROFILE
- if (0 == (m_pid % B3_DBVT_BP_PROFILING_RATE))
- {
- printf("fixed(%u) dynamics(%u) pairs(%u)\r\n", m_sets[1].m_leaves, m_sets[0].m_leaves, m_paircache->getNumOverlappingPairs());
- unsigned int total = m_profiling.m_total;
- if (total <= 0) total = 1;
- printf("ddcollide: %u%% (%uus)\r\n", (50 + m_profiling.m_ddcollide * 100) / total, m_profiling.m_ddcollide / B3_DBVT_BP_PROFILING_RATE);
- printf("fdcollide: %u%% (%uus)\r\n", (50 + m_profiling.m_fdcollide * 100) / total, m_profiling.m_fdcollide / B3_DBVT_BP_PROFILING_RATE);
- printf("cleanup: %u%% (%uus)\r\n", (50 + m_profiling.m_cleanup * 100) / total, m_profiling.m_cleanup / B3_DBVT_BP_PROFILING_RATE);
- printf("total: %uus\r\n", total / B3_DBVT_BP_PROFILING_RATE);
- const unsigned long sum = m_profiling.m_ddcollide +
- m_profiling.m_fdcollide +
- m_profiling.m_cleanup;
- printf("leaked: %u%% (%uus)\r\n", 100 - ((50 + sum * 100) / total), (total - sum) / B3_DBVT_BP_PROFILING_RATE);
- printf("job counts: %u%%\r\n", (m_profiling.m_jobcount * 100) / ((m_sets[0].m_leaves + m_sets[1].m_leaves) * B3_DBVT_BP_PROFILING_RATE));
- b3Clear(m_profiling);
- m_clock.reset();
- }
-#endif
-
- performDeferredRemoval(dispatcher);
-}
-
-void b3DynamicBvhBroadphase::performDeferredRemoval(b3Dispatcher* dispatcher)
-{
- if (m_paircache->hasDeferredRemoval())
- {
- b3BroadphasePairArray& overlappingPairArray = m_paircache->getOverlappingPairArray();
-
- //perform a sort, to find duplicates and to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(b3BroadphasePairSortPredicate());
-
- int invalidPair = 0;
-
- int i;
-
- b3BroadphasePair previousPair = b3MakeBroadphasePair(-1, -1);
-
- for (i = 0; i < overlappingPairArray.size(); i++)
- {
- b3BroadphasePair& pair = overlappingPairArray[i];
-
- bool isDuplicate = (pair == previousPair);
-
- previousPair = pair;
-
- bool needsRemoval = false;
-
- if (!isDuplicate)
- {
- //important to perform AABB check that is consistent with the broadphase
- b3DbvtProxy* pa = &m_proxies[pair.x];
- b3DbvtProxy* pb = &m_proxies[pair.y];
- bool hasOverlap = b3Intersect(pa->leaf->volume, pb->leaf->volume);
-
- if (hasOverlap)
- {
- needsRemoval = false;
- }
- else
- {
- needsRemoval = true;
- }
- }
- else
- {
- //remove duplicate
- needsRemoval = true;
- //should have no algorithm
- }
-
- if (needsRemoval)
- {
- m_paircache->cleanOverlappingPair(pair, dispatcher);
-
- pair.x = -1;
- pair.y = -1;
- invalidPair++;
- }
- }
-
- //perform a sort, to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(b3BroadphasePairSortPredicate());
- overlappingPairArray.resize(overlappingPairArray.size() - invalidPair);
- }
-}
-
-//
-void b3DynamicBvhBroadphase::collide(b3Dispatcher* dispatcher)
-{
- /*printf("---------------------------------------------------------\n");
- printf("m_sets[0].m_leaves=%d\n",m_sets[0].m_leaves);
- printf("m_sets[1].m_leaves=%d\n",m_sets[1].m_leaves);
- printf("numPairs = %d\n",getOverlappingPairCache()->getNumOverlappingPairs());
- {
- int i;
- for (i=0;i<getOverlappingPairCache()->getNumOverlappingPairs();i++)
- {
- printf("pair[%d]=(%d,%d),",i,getOverlappingPairCache()->getOverlappingPairArray()[i].m_pProxy0->getUid(),
- getOverlappingPairCache()->getOverlappingPairArray()[i].m_pProxy1->getUid());
- }
- printf("\n");
- }
-*/
-
- b3SPC(m_profiling.m_total);
- /* optimize */
- m_sets[0].optimizeIncremental(1 + (m_sets[0].m_leaves * m_dupdates) / 100);
- if (m_fixedleft)
- {
- const int count = 1 + (m_sets[1].m_leaves * m_fupdates) / 100;
- m_sets[1].optimizeIncremental(1 + (m_sets[1].m_leaves * m_fupdates) / 100);
- m_fixedleft = b3Max<int>(0, m_fixedleft - count);
- }
- /* dynamic -> fixed set */
- m_stageCurrent = (m_stageCurrent + 1) % STAGECOUNT;
- b3DbvtProxy* current = m_stageRoots[m_stageCurrent];
- if (current)
- {
- b3DbvtTreeCollider collider(this);
- do
- {
- b3DbvtProxy* next = current->links[1];
- b3ListRemove(current, m_stageRoots[current->stage]);
- b3ListAppend(current, m_stageRoots[STAGECOUNT]);
-#if B3_DBVT_BP_ACCURATESLEEPING
- m_paircache->removeOverlappingPairsContainingProxy(current, dispatcher);
- collider.proxy = current;
- b3DynamicBvh::collideTV(m_sets[0].m_root, current->aabb, collider);
- b3DynamicBvh::collideTV(m_sets[1].m_root, current->aabb, collider);
-#endif
- m_sets[0].remove(current->leaf);
- B3_ATTRIBUTE_ALIGNED16(b3DbvtVolume)
- curAabb = b3DbvtVolume::FromMM(current->m_aabbMin, current->m_aabbMax);
- current->leaf = m_sets[1].insert(curAabb, current);
- current->stage = STAGECOUNT;
- current = next;
- } while (current);
- m_fixedleft = m_sets[1].m_leaves;
- m_needcleanup = true;
- }
- /* collide dynamics */
- {
- b3DbvtTreeCollider collider(this);
- if (m_deferedcollide)
- {
- b3SPC(m_profiling.m_fdcollide);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, m_sets[1].m_root, collider);
- }
- if (m_deferedcollide)
- {
- b3SPC(m_profiling.m_ddcollide);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, m_sets[0].m_root, collider);
- }
- }
- /* clean up */
- if (m_needcleanup)
- {
- b3SPC(m_profiling.m_cleanup);
- b3BroadphasePairArray& pairs = m_paircache->getOverlappingPairArray();
- if (pairs.size() > 0)
- {
- int ni = b3Min(pairs.size(), b3Max<int>(m_newpairs, (pairs.size() * m_cupdates) / 100));
- for (int i = 0; i < ni; ++i)
- {
- b3BroadphasePair& p = pairs[(m_cid + i) % pairs.size()];
- b3DbvtProxy* pa = &m_proxies[p.x];
- b3DbvtProxy* pb = &m_proxies[p.y];
- if (!b3Intersect(pa->leaf->volume, pb->leaf->volume))
- {
-#if B3_DBVT_BP_SORTPAIRS
- if (pa->m_uniqueId > pb->m_uniqueId)
- b3Swap(pa, pb);
-#endif
- m_paircache->removeOverlappingPair(pa->getUid(), pb->getUid(), dispatcher);
- --ni;
- --i;
- }
- }
- if (pairs.size() > 0)
- m_cid = (m_cid + ni) % pairs.size();
- else
- m_cid = 0;
- }
- }
- ++m_pid;
- m_newpairs = 1;
- m_needcleanup = false;
- if (m_updates_call > 0)
- {
- m_updates_ratio = m_updates_done / (b3Scalar)m_updates_call;
- }
- else
- {
- m_updates_ratio = 0;
- }
- m_updates_done /= 2;
- m_updates_call /= 2;
-}
-
-//
-void b3DynamicBvhBroadphase::optimize()
-{
- m_sets[0].optimizeTopDown();
- m_sets[1].optimizeTopDown();
-}
-
-//
-b3OverlappingPairCache* b3DynamicBvhBroadphase::getOverlappingPairCache()
-{
- return (m_paircache);
-}
-
-//
-const b3OverlappingPairCache* b3DynamicBvhBroadphase::getOverlappingPairCache() const
-{
- return (m_paircache);
-}
-
-//
-void b3DynamicBvhBroadphase::getBroadphaseAabb(b3Vector3& aabbMin, b3Vector3& aabbMax) const
-{
- B3_ATTRIBUTE_ALIGNED16(b3DbvtVolume)
- bounds;
-
- if (!m_sets[0].empty())
- if (!m_sets[1].empty())
- b3Merge(m_sets[0].m_root->volume,
- m_sets[1].m_root->volume, bounds);
- else
- bounds = m_sets[0].m_root->volume;
- else if (!m_sets[1].empty())
- bounds = m_sets[1].m_root->volume;
- else
- bounds = b3DbvtVolume::FromCR(b3MakeVector3(0, 0, 0), 0);
- aabbMin = bounds.Mins();
- aabbMax = bounds.Maxs();
-}
-
-void b3DynamicBvhBroadphase::resetPool(b3Dispatcher* dispatcher)
-{
- int totalObjects = m_sets[0].m_leaves + m_sets[1].m_leaves;
- if (!totalObjects)
- {
- //reset internal dynamic tree data structures
- m_sets[0].clear();
- m_sets[1].clear();
-
- m_deferedcollide = false;
- m_needcleanup = true;
- m_stageCurrent = 0;
- m_fixedleft = 0;
- m_fupdates = 1;
- m_dupdates = 0;
- m_cupdates = 10;
- m_newpairs = 1;
- m_updates_call = 0;
- m_updates_done = 0;
- m_updates_ratio = 0;
-
- m_pid = 0;
- m_cid = 0;
- for (int i = 0; i <= STAGECOUNT; ++i)
- {
- m_stageRoots[i] = 0;
- }
- }
-}
-
-//
-void b3DynamicBvhBroadphase::printStats()
-{
-}
-
-//
-#if B3_DBVT_BP_ENABLE_BENCHMARK
-
-struct b3BroadphaseBenchmark
-{
- struct Experiment
- {
- const char* name;
- int object_count;
- int update_count;
- int spawn_count;
- int iterations;
- b3Scalar speed;
- b3Scalar amplitude;
- };
- struct Object
- {
- b3Vector3 center;
- b3Vector3 extents;
- b3BroadphaseProxy* proxy;
- b3Scalar time;
- void update(b3Scalar speed, b3Scalar amplitude, b3BroadphaseInterface* pbi)
- {
- time += speed;
- center[0] = b3Cos(time * (b3Scalar)2.17) * amplitude +
- b3Sin(time) * amplitude / 2;
- center[1] = b3Cos(time * (b3Scalar)1.38) * amplitude +
- b3Sin(time) * amplitude;
- center[2] = b3Sin(time * (b3Scalar)0.777) * amplitude;
- pbi->setAabb(proxy, center - extents, center + extents, 0);
- }
- };
- static int UnsignedRand(int range = RAND_MAX - 1) { return (rand() % (range + 1)); }
- static b3Scalar UnitRand() { return (UnsignedRand(16384) / (b3Scalar)16384); }
- static void OutputTime(const char* name, b3Clock& c, unsigned count = 0)
- {
- const unsigned long us = c.getTimeMicroseconds();
- const unsigned long ms = (us + 500) / 1000;
- const b3Scalar sec = us / (b3Scalar)(1000 * 1000);
- if (count > 0)
- printf("%s : %u us (%u ms), %.2f/s\r\n", name, us, ms, count / sec);
- else
- printf("%s : %u us (%u ms)\r\n", name, us, ms);
- }
-};
-
-void b3DynamicBvhBroadphase::benchmark(b3BroadphaseInterface* pbi)
-{
- static const b3BroadphaseBenchmark::Experiment experiments[] =
- {
- {"1024o.10%", 1024, 10, 0, 8192, (b3Scalar)0.005, (b3Scalar)100},
- /*{"4096o.10%",4096,10,0,8192,(b3Scalar)0.005,(b3Scalar)100},
- {"8192o.10%",8192,10,0,8192,(b3Scalar)0.005,(b3Scalar)100},*/
- };
- static const int nexperiments = sizeof(experiments) / sizeof(experiments[0]);
- b3AlignedObjectArray<b3BroadphaseBenchmark::Object*> objects;
- b3Clock wallclock;
- /* Begin */
- for (int iexp = 0; iexp < nexperiments; ++iexp)
- {
- const b3BroadphaseBenchmark::Experiment& experiment = experiments[iexp];
- const int object_count = experiment.object_count;
- const int update_count = (object_count * experiment.update_count) / 100;
- const int spawn_count = (object_count * experiment.spawn_count) / 100;
- const b3Scalar speed = experiment.speed;
- const b3Scalar amplitude = experiment.amplitude;
- printf("Experiment #%u '%s':\r\n", iexp, experiment.name);
- printf("\tObjects: %u\r\n", object_count);
- printf("\tUpdate: %u\r\n", update_count);
- printf("\tSpawn: %u\r\n", spawn_count);
- printf("\tSpeed: %f\r\n", speed);
- printf("\tAmplitude: %f\r\n", amplitude);
- srand(180673);
- /* Create objects */
- wallclock.reset();
- objects.reserve(object_count);
- for (int i = 0; i < object_count; ++i)
- {
- b3BroadphaseBenchmark::Object* po = new b3BroadphaseBenchmark::Object();
- po->center[0] = b3BroadphaseBenchmark::UnitRand() * 50;
- po->center[1] = b3BroadphaseBenchmark::UnitRand() * 50;
- po->center[2] = b3BroadphaseBenchmark::UnitRand() * 50;
- po->extents[0] = b3BroadphaseBenchmark::UnitRand() * 2 + 2;
- po->extents[1] = b3BroadphaseBenchmark::UnitRand() * 2 + 2;
- po->extents[2] = b3BroadphaseBenchmark::UnitRand() * 2 + 2;
- po->time = b3BroadphaseBenchmark::UnitRand() * 2000;
- po->proxy = pbi->createProxy(po->center - po->extents, po->center + po->extents, 0, po, 1, 1, 0, 0);
- objects.push_back(po);
- }
- b3BroadphaseBenchmark::OutputTime("\tInitialization", wallclock);
- /* First update */
- wallclock.reset();
- for (int i = 0; i < objects.size(); ++i)
- {
- objects[i]->update(speed, amplitude, pbi);
- }
- b3BroadphaseBenchmark::OutputTime("\tFirst update", wallclock);
- /* Updates */
- wallclock.reset();
- for (int i = 0; i < experiment.iterations; ++i)
- {
- for (int j = 0; j < update_count; ++j)
- {
- objects[j]->update(speed, amplitude, pbi);
- }
- pbi->calculateOverlappingPairs(0);
- }
- b3BroadphaseBenchmark::OutputTime("\tUpdate", wallclock, experiment.iterations);
- /* Clean up */
- wallclock.reset();
- for (int i = 0; i < objects.size(); ++i)
- {
- pbi->destroyProxy(objects[i]->proxy, 0);
- delete objects[i];
- }
- objects.resize(0);
- b3BroadphaseBenchmark::OutputTime("\tRelease", wallclock);
- }
-}
-#else
-/*void b3DynamicBvhBroadphase::benchmark(b3BroadphaseInterface*)
-{}
-*/
-#endif
-
-#if B3_DBVT_BP_PROFILE
-#undef b3SPC
-#endif
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h
deleted file mode 100644
index c235e40148..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///b3DynamicBvhBroadphase implementation by Nathanael Presson
-#ifndef B3_DBVT_BROADPHASE_H
-#define B3_DBVT_BROADPHASE_H
-
-#include "Bullet3Collision/BroadPhaseCollision/b3DynamicBvh.h"
-#include "Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-#include "b3BroadphaseCallback.h"
-
-//
-// Compile time config
-//
-
-#define B3_DBVT_BP_PROFILE 0
-//#define B3_DBVT_BP_SORTPAIRS 1
-#define B3_DBVT_BP_PREVENTFALSEUPDATE 0
-#define B3_DBVT_BP_ACCURATESLEEPING 0
-#define B3_DBVT_BP_ENABLE_BENCHMARK 0
-#define B3_DBVT_BP_MARGIN (b3Scalar)0.05
-
-#if B3_DBVT_BP_PROFILE
-#define B3_DBVT_BP_PROFILING_RATE 256
-
-#endif
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3BroadphaseProxy
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- ///optional filtering to cull potential collisions
- enum CollisionFilterGroups
- {
- DefaultFilter = 1,
- StaticFilter = 2,
- KinematicFilter = 4,
- DebrisFilter = 8,
- SensorTrigger = 16,
- CharacterFilter = 32,
- AllFilter = -1 //all bits sets: DefaultFilter | StaticFilter | KinematicFilter | DebrisFilter | SensorTrigger
- };
-
- //Usually the client b3CollisionObject or Rigidbody class
- void* m_clientObject;
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
- int m_uniqueId; //m_uniqueId is introduced for paircache. could get rid of this, by calculating the address offset etc.
-
- b3Vector3 m_aabbMin;
- b3Vector3 m_aabbMax;
-
- B3_FORCE_INLINE int getUid() const
- {
- return m_uniqueId;
- }
-
- //used for memory pools
- b3BroadphaseProxy() : m_clientObject(0)
- {
- }
-
- b3BroadphaseProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, void* userPtr, int collisionFilterGroup, int collisionFilterMask)
- : m_clientObject(userPtr),
- m_collisionFilterGroup(collisionFilterGroup),
- m_collisionFilterMask(collisionFilterMask),
- m_aabbMin(aabbMin),
- m_aabbMax(aabbMax)
- {
- }
-};
-
-//
-// b3DbvtProxy
-//
-struct b3DbvtProxy : b3BroadphaseProxy
-{
- /* Fields */
- //b3DbvtAabbMm aabb;
- b3DbvtNode* leaf;
- b3DbvtProxy* links[2];
- int stage;
- /* ctor */
-
- explicit b3DbvtProxy() {}
- b3DbvtProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, void* userPtr, int collisionFilterGroup, int collisionFilterMask) : b3BroadphaseProxy(aabbMin, aabbMax, userPtr, collisionFilterGroup, collisionFilterMask)
- {
- links[0] = links[1] = 0;
- }
-};
-
-typedef b3AlignedObjectArray<b3DbvtProxy*> b3DbvtProxyArray;
-
-///The b3DynamicBvhBroadphase implements a broadphase using two dynamic AABB bounding volume hierarchies/trees (see b3DynamicBvh).
-///One tree is used for static/non-moving objects, and another tree is used for dynamic objects. Objects can move from one tree to the other.
-///This is a very fast broadphase, especially for very dynamic worlds where many objects are moving. Its insert/add and remove of objects is generally faster than the sweep and prune broadphases b3AxisSweep3 and b332BitAxisSweep3.
-struct b3DynamicBvhBroadphase
-{
- /* Config */
- enum
- {
- DYNAMIC_SET = 0, /* Dynamic set index */
- FIXED_SET = 1, /* Fixed set index */
- STAGECOUNT = 2 /* Number of stages */
- };
- /* Fields */
- b3DynamicBvh m_sets[2]; // Dbvt sets
- b3DbvtProxy* m_stageRoots[STAGECOUNT + 1]; // Stages list
-
- b3AlignedObjectArray<b3DbvtProxy> m_proxies;
- b3OverlappingPairCache* m_paircache; // Pair cache
- b3Scalar m_prediction; // Velocity prediction
- int m_stageCurrent; // Current stage
- int m_fupdates; // % of fixed updates per frame
- int m_dupdates; // % of dynamic updates per frame
- int m_cupdates; // % of cleanup updates per frame
- int m_newpairs; // Number of pairs created
- int m_fixedleft; // Fixed optimization left
- unsigned m_updates_call; // Number of updates call
- unsigned m_updates_done; // Number of updates done
- b3Scalar m_updates_ratio; // m_updates_done/m_updates_call
- int m_pid; // Parse id
- int m_cid; // Cleanup index
- bool m_releasepaircache; // Release pair cache on delete
- bool m_deferedcollide; // Defere dynamic/static collision to collide call
- bool m_needcleanup; // Need to run cleanup?
-#if B3_DBVT_BP_PROFILE
- b3Clock m_clock;
- struct
- {
- unsigned long m_total;
- unsigned long m_ddcollide;
- unsigned long m_fdcollide;
- unsigned long m_cleanup;
- unsigned long m_jobcount;
- } m_profiling;
-#endif
- /* Methods */
- b3DynamicBvhBroadphase(int proxyCapacity, b3OverlappingPairCache* paircache = 0);
- virtual ~b3DynamicBvhBroadphase();
- void collide(b3Dispatcher* dispatcher);
- void optimize();
-
- /* b3BroadphaseInterface Implementation */
- b3BroadphaseProxy* createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int objectIndex, void* userPtr, int collisionFilterGroup, int collisionFilterMask);
- virtual void destroyProxy(b3BroadphaseProxy* proxy, b3Dispatcher* dispatcher);
- virtual void setAabb(int objectId, const b3Vector3& aabbMin, const b3Vector3& aabbMax, b3Dispatcher* dispatcher);
- virtual void rayTest(const b3Vector3& rayFrom, const b3Vector3& rayTo, b3BroadphaseRayCallback& rayCallback, const b3Vector3& aabbMin = b3MakeVector3(0, 0, 0), const b3Vector3& aabbMax = b3MakeVector3(0, 0, 0));
- virtual void aabbTest(const b3Vector3& aabbMin, const b3Vector3& aabbMax, b3BroadphaseAabbCallback& callback);
-
- //virtual void getAabb(b3BroadphaseProxy* proxy,b3Vector3& aabbMin, b3Vector3& aabbMax ) const;
- virtual void getAabb(int objectId, b3Vector3& aabbMin, b3Vector3& aabbMax) const;
- virtual void calculateOverlappingPairs(b3Dispatcher* dispatcher = 0);
- virtual b3OverlappingPairCache* getOverlappingPairCache();
- virtual const b3OverlappingPairCache* getOverlappingPairCache() const;
- virtual void getBroadphaseAabb(b3Vector3& aabbMin, b3Vector3& aabbMax) const;
- virtual void printStats();
-
- ///reset broadphase internal structures, to ensure determinism/reproducability
- virtual void resetPool(b3Dispatcher* dispatcher);
-
- void performDeferredRemoval(b3Dispatcher* dispatcher);
-
- void setVelocityPrediction(b3Scalar prediction)
- {
- m_prediction = prediction;
- }
- b3Scalar getVelocityPrediction() const
- {
- return m_prediction;
- }
-
- ///this setAabbForceUpdate is similar to setAabb but always forces the aabb update.
- ///it is not part of the b3BroadphaseInterface but specific to b3DynamicBvhBroadphase.
- ///it bypasses certain optimizations that prevent aabb updates (when the aabb shrinks), see
- ///http://code.google.com/p/bullet/issues/detail?id=223
- void setAabbForceUpdate(b3BroadphaseProxy* absproxy, const b3Vector3& aabbMin, const b3Vector3& aabbMax, b3Dispatcher* /*dispatcher*/);
-
- //static void benchmark(b3BroadphaseInterface*);
-};
-
-#endif
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPair.h b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPair.h
deleted file mode 100644
index 4ff9ebae81..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPair.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_OVERLAPPING_PAIR_H
-#define B3_OVERLAPPING_PAIR_H
-
-#include "Bullet3Common/shared/b3Int4.h"
-
-#define B3_NEW_PAIR_MARKER -1
-#define B3_REMOVED_PAIR_MARKER -2
-
-typedef b3Int4 b3BroadphasePair;
-
-inline b3Int4 b3MakeBroadphasePair(int xx, int yy)
-{
- b3Int4 pair;
-
- if (xx < yy)
- {
- pair.x = xx;
- pair.y = yy;
- }
- else
- {
- pair.x = yy;
- pair.y = xx;
- }
- pair.z = B3_NEW_PAIR_MARKER;
- pair.w = B3_NEW_PAIR_MARKER;
- return pair;
-}
-
-/*struct b3BroadphasePair : public b3Int4
-{
- explicit b3BroadphasePair(){}
-
-};
-*/
-
-class b3BroadphasePairSortPredicate
-{
-public:
- bool operator()(const b3BroadphasePair& a, const b3BroadphasePair& b) const
- {
- const int uidA0 = a.x;
- const int uidB0 = b.x;
- const int uidA1 = a.y;
- const int uidB1 = b.y;
- return uidA0 > uidB0 || (uidA0 == uidB0 && uidA1 > uidB1);
- }
-};
-
-B3_FORCE_INLINE bool operator==(const b3BroadphasePair& a, const b3BroadphasePair& b)
-{
- return (a.x == b.x) && (a.y == b.y);
-}
-
-#endif //B3_OVERLAPPING_PAIR_H
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.cpp b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.cpp
deleted file mode 100644
index 19773244be..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.cpp
+++ /dev/null
@@ -1,559 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3OverlappingPairCache.h"
-
-//#include "b3Dispatcher.h"
-//#include "b3CollisionAlgorithm.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-
-#include <stdio.h>
-
-int b3g_overlappingPairs = 0;
-int b3g_removePairs = 0;
-int b3g_addedPairs = 0;
-int b3g_findPairs = 0;
-
-b3HashedOverlappingPairCache::b3HashedOverlappingPairCache() : m_overlapFilterCallback(0)
-//, m_blockedForChanges(false)
-{
- int initialAllocatedSize = 2;
- m_overlappingPairArray.reserve(initialAllocatedSize);
- growTables();
-}
-
-b3HashedOverlappingPairCache::~b3HashedOverlappingPairCache()
-{
-}
-
-void b3HashedOverlappingPairCache::cleanOverlappingPair(b3BroadphasePair& pair, b3Dispatcher* dispatcher)
-{
- /* if (pair.m_algorithm)
- {
- {
- pair.m_algorithm->~b3CollisionAlgorithm();
- dispatcher->freeCollisionAlgorithm(pair.m_algorithm);
- pair.m_algorithm=0;
- }
- }
- */
-}
-
-void b3HashedOverlappingPairCache::cleanProxyFromPairs(int proxy, b3Dispatcher* dispatcher)
-{
- class CleanPairCallback : public b3OverlapCallback
- {
- int m_cleanProxy;
- b3OverlappingPairCache* m_pairCache;
- b3Dispatcher* m_dispatcher;
-
- public:
- CleanPairCallback(int cleanProxy, b3OverlappingPairCache* pairCache, b3Dispatcher* dispatcher)
- : m_cleanProxy(cleanProxy),
- m_pairCache(pairCache),
- m_dispatcher(dispatcher)
- {
- }
- virtual bool processOverlap(b3BroadphasePair& pair)
- {
- if ((pair.x == m_cleanProxy) ||
- (pair.y == m_cleanProxy))
- {
- m_pairCache->cleanOverlappingPair(pair, m_dispatcher);
- }
- return false;
- }
- };
-
- CleanPairCallback cleanPairs(proxy, this, dispatcher);
-
- processAllOverlappingPairs(&cleanPairs, dispatcher);
-}
-
-void b3HashedOverlappingPairCache::removeOverlappingPairsContainingProxy(int proxy, b3Dispatcher* dispatcher)
-{
- class RemovePairCallback : public b3OverlapCallback
- {
- int m_obsoleteProxy;
-
- public:
- RemovePairCallback(int obsoleteProxy)
- : m_obsoleteProxy(obsoleteProxy)
- {
- }
- virtual bool processOverlap(b3BroadphasePair& pair)
- {
- return ((pair.x == m_obsoleteProxy) ||
- (pair.y == m_obsoleteProxy));
- }
- };
-
- RemovePairCallback removeCallback(proxy);
-
- processAllOverlappingPairs(&removeCallback, dispatcher);
-}
-
-b3BroadphasePair* b3HashedOverlappingPairCache::findPair(int proxy0, int proxy1)
-{
- b3g_findPairs++;
- if (proxy0 > proxy1)
- b3Swap(proxy0, proxy1);
- int proxyId1 = proxy0;
- int proxyId2 = proxy1;
-
- /*if (proxyId1 > proxyId2)
- b3Swap(proxyId1, proxyId2);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1));
-
- if (hash >= m_hashTable.size())
- {
- return NULL;
- }
-
- int index = m_hashTable[hash];
- while (index != B3_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false)
- {
- index = m_next[index];
- }
-
- if (index == B3_NULL_PAIR)
- {
- return NULL;
- }
-
- b3Assert(index < m_overlappingPairArray.size());
-
- return &m_overlappingPairArray[index];
-}
-
-//#include <stdio.h>
-
-void b3HashedOverlappingPairCache::growTables()
-{
- int newCapacity = m_overlappingPairArray.capacity();
-
- if (m_hashTable.size() < newCapacity)
- {
- //grow hashtable and next table
- int curHashtableSize = m_hashTable.size();
-
- m_hashTable.resize(newCapacity);
- m_next.resize(newCapacity);
-
- int i;
-
- for (i = 0; i < newCapacity; ++i)
- {
- m_hashTable[i] = B3_NULL_PAIR;
- }
- for (i = 0; i < newCapacity; ++i)
- {
- m_next[i] = B3_NULL_PAIR;
- }
-
- for (i = 0; i < curHashtableSize; i++)
- {
- const b3BroadphasePair& pair = m_overlappingPairArray[i];
- int proxyId1 = pair.x;
- int proxyId2 = pair.y;
- /*if (proxyId1 > proxyId2)
- b3Swap(proxyId1, proxyId2);*/
- int hashValue = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1)); // New hash value with new mask
- m_next[i] = m_hashTable[hashValue];
- m_hashTable[hashValue] = i;
- }
- }
-}
-
-b3BroadphasePair* b3HashedOverlappingPairCache::internalAddPair(int proxy0, int proxy1)
-{
- if (proxy0 > proxy1)
- b3Swap(proxy0, proxy1);
- int proxyId1 = proxy0;
- int proxyId2 = proxy1;
-
- /*if (proxyId1 > proxyId2)
- b3Swap(proxyId1, proxyId2);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1)); // New hash value with new mask
-
- b3BroadphasePair* pair = internalFindPair(proxy0, proxy1, hash);
- if (pair != NULL)
- {
- return pair;
- }
- /*for(int i=0;i<m_overlappingPairArray.size();++i)
- {
- if( (m_overlappingPairArray[i].m_pProxy0==proxy0)&&
- (m_overlappingPairArray[i].m_pProxy1==proxy1))
- {
- printf("Adding duplicated %u<>%u\r\n",proxyId1,proxyId2);
- internalFindPair(proxy0, proxy1, hash);
- }
- }*/
- int count = m_overlappingPairArray.size();
- int oldCapacity = m_overlappingPairArray.capacity();
- pair = &m_overlappingPairArray.expandNonInitializing();
-
- //this is where we add an actual pair, so also call the 'ghost'
- // if (m_ghostPairCallback)
- // m_ghostPairCallback->addOverlappingPair(proxy0,proxy1);
-
- int newCapacity = m_overlappingPairArray.capacity();
-
- if (oldCapacity < newCapacity)
- {
- growTables();
- //hash with new capacity
- hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1));
- }
-
- *pair = b3MakeBroadphasePair(proxy0, proxy1);
-
- // pair->m_pProxy0 = proxy0;
- // pair->m_pProxy1 = proxy1;
- //pair->m_algorithm = 0;
- //pair->m_internalTmpValue = 0;
-
- m_next[count] = m_hashTable[hash];
- m_hashTable[hash] = count;
-
- return pair;
-}
-
-void* b3HashedOverlappingPairCache::removeOverlappingPair(int proxy0, int proxy1, b3Dispatcher* dispatcher)
-{
- b3g_removePairs++;
- if (proxy0 > proxy1)
- b3Swap(proxy0, proxy1);
- int proxyId1 = proxy0;
- int proxyId2 = proxy1;
-
- /*if (proxyId1 > proxyId2)
- b3Swap(proxyId1, proxyId2);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1));
-
- b3BroadphasePair* pair = internalFindPair(proxy0, proxy1, hash);
- if (pair == NULL)
- {
- return 0;
- }
-
- cleanOverlappingPair(*pair, dispatcher);
-
- int pairIndex = int(pair - &m_overlappingPairArray[0]);
- b3Assert(pairIndex < m_overlappingPairArray.size());
-
- // Remove the pair from the hash table.
- int index = m_hashTable[hash];
- b3Assert(index != B3_NULL_PAIR);
-
- int previous = B3_NULL_PAIR;
- while (index != pairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != B3_NULL_PAIR)
- {
- b3Assert(m_next[previous] == pairIndex);
- m_next[previous] = m_next[pairIndex];
- }
- else
- {
- m_hashTable[hash] = m_next[pairIndex];
- }
-
- // We now move the last pair into spot of the
- // pair being removed. We need to fix the hash
- // table indices to support the move.
-
- int lastPairIndex = m_overlappingPairArray.size() - 1;
-
- //if (m_ghostPairCallback)
- // m_ghostPairCallback->removeOverlappingPair(proxy0, proxy1,dispatcher);
-
- // If the removed pair is the last pair, we are done.
- if (lastPairIndex == pairIndex)
- {
- m_overlappingPairArray.pop_back();
- return 0;
- }
-
- // Remove the last pair from the hash table.
- const b3BroadphasePair* last = &m_overlappingPairArray[lastPairIndex];
- /* missing swap here too, Nat. */
- int lastHash = static_cast<int>(getHash(static_cast<unsigned int>(last->x), static_cast<unsigned int>(last->y)) & (m_overlappingPairArray.capacity() - 1));
-
- index = m_hashTable[lastHash];
- b3Assert(index != B3_NULL_PAIR);
-
- previous = B3_NULL_PAIR;
- while (index != lastPairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != B3_NULL_PAIR)
- {
- b3Assert(m_next[previous] == lastPairIndex);
- m_next[previous] = m_next[lastPairIndex];
- }
- else
- {
- m_hashTable[lastHash] = m_next[lastPairIndex];
- }
-
- // Copy the last pair into the remove pair's spot.
- m_overlappingPairArray[pairIndex] = m_overlappingPairArray[lastPairIndex];
-
- // Insert the last pair into the hash table
- m_next[pairIndex] = m_hashTable[lastHash];
- m_hashTable[lastHash] = pairIndex;
-
- m_overlappingPairArray.pop_back();
-
- return 0;
-}
-//#include <stdio.h>
-
-void b3HashedOverlappingPairCache::processAllOverlappingPairs(b3OverlapCallback* callback, b3Dispatcher* dispatcher)
-{
- int i;
-
- // printf("m_overlappingPairArray.size()=%d\n",m_overlappingPairArray.size());
- for (i = 0; i < m_overlappingPairArray.size();)
- {
- b3BroadphasePair* pair = &m_overlappingPairArray[i];
- if (callback->processOverlap(*pair))
- {
- removeOverlappingPair(pair->x, pair->y, dispatcher);
-
- b3g_overlappingPairs--;
- }
- else
- {
- i++;
- }
- }
-}
-
-void b3HashedOverlappingPairCache::sortOverlappingPairs(b3Dispatcher* dispatcher)
-{
- ///need to keep hashmap in sync with pair address, so rebuild all
- b3BroadphasePairArray tmpPairs;
- int i;
- for (i = 0; i < m_overlappingPairArray.size(); i++)
- {
- tmpPairs.push_back(m_overlappingPairArray[i]);
- }
-
- for (i = 0; i < tmpPairs.size(); i++)
- {
- removeOverlappingPair(tmpPairs[i].x, tmpPairs[i].y, dispatcher);
- }
-
- for (i = 0; i < m_next.size(); i++)
- {
- m_next[i] = B3_NULL_PAIR;
- }
-
- tmpPairs.quickSort(b3BroadphasePairSortPredicate());
-
- for (i = 0; i < tmpPairs.size(); i++)
- {
- addOverlappingPair(tmpPairs[i].x, tmpPairs[i].y);
- }
-}
-
-void* b3SortedOverlappingPairCache::removeOverlappingPair(int proxy0, int proxy1, b3Dispatcher* dispatcher)
-{
- if (!hasDeferredRemoval())
- {
- b3BroadphasePair findPair = b3MakeBroadphasePair(proxy0, proxy1);
-
- int findIndex = m_overlappingPairArray.findLinearSearch(findPair);
- if (findIndex < m_overlappingPairArray.size())
- {
- b3g_overlappingPairs--;
- b3BroadphasePair& pair = m_overlappingPairArray[findIndex];
-
- cleanOverlappingPair(pair, dispatcher);
- //if (m_ghostPairCallback)
- // m_ghostPairCallback->removeOverlappingPair(proxy0, proxy1,dispatcher);
-
- m_overlappingPairArray.swap(findIndex, m_overlappingPairArray.capacity() - 1);
- m_overlappingPairArray.pop_back();
- return 0;
- }
- }
-
- return 0;
-}
-
-b3BroadphasePair* b3SortedOverlappingPairCache::addOverlappingPair(int proxy0, int proxy1)
-{
- //don't add overlap with own
- b3Assert(proxy0 != proxy1);
-
- if (!needsBroadphaseCollision(proxy0, proxy1))
- return 0;
-
- b3BroadphasePair* pair = &m_overlappingPairArray.expandNonInitializing();
- *pair = b3MakeBroadphasePair(proxy0, proxy1);
-
- b3g_overlappingPairs++;
- b3g_addedPairs++;
-
- // if (m_ghostPairCallback)
- // m_ghostPairCallback->addOverlappingPair(proxy0, proxy1);
- return pair;
-}
-
-///this findPair becomes really slow. Either sort the list to speedup the query, or
-///use a different solution. It is mainly used for Removing overlapping pairs. Removal could be delayed.
-///we could keep a linked list in each proxy, and store pair in one of the proxies (with lowest memory address)
-///Also we can use a 2D bitmap, which can be useful for a future GPU implementation
-b3BroadphasePair* b3SortedOverlappingPairCache::findPair(int proxy0, int proxy1)
-{
- if (!needsBroadphaseCollision(proxy0, proxy1))
- return 0;
-
- b3BroadphasePair tmpPair = b3MakeBroadphasePair(proxy0, proxy1);
- int findIndex = m_overlappingPairArray.findLinearSearch(tmpPair);
-
- if (findIndex < m_overlappingPairArray.size())
- {
- //b3Assert(it != m_overlappingPairSet.end());
- b3BroadphasePair* pair = &m_overlappingPairArray[findIndex];
- return pair;
- }
- return 0;
-}
-
-//#include <stdio.h>
-
-void b3SortedOverlappingPairCache::processAllOverlappingPairs(b3OverlapCallback* callback, b3Dispatcher* dispatcher)
-{
- int i;
-
- for (i = 0; i < m_overlappingPairArray.size();)
- {
- b3BroadphasePair* pair = &m_overlappingPairArray[i];
- if (callback->processOverlap(*pair))
- {
- cleanOverlappingPair(*pair, dispatcher);
- pair->x = -1;
- pair->y = -1;
- m_overlappingPairArray.swap(i, m_overlappingPairArray.size() - 1);
- m_overlappingPairArray.pop_back();
- b3g_overlappingPairs--;
- }
- else
- {
- i++;
- }
- }
-}
-
-b3SortedOverlappingPairCache::b3SortedOverlappingPairCache() : m_blockedForChanges(false),
- m_hasDeferredRemoval(true),
- m_overlapFilterCallback(0)
-
-{
- int initialAllocatedSize = 2;
- m_overlappingPairArray.reserve(initialAllocatedSize);
-}
-
-b3SortedOverlappingPairCache::~b3SortedOverlappingPairCache()
-{
-}
-
-void b3SortedOverlappingPairCache::cleanOverlappingPair(b3BroadphasePair& pair, b3Dispatcher* dispatcher)
-{
- /* if (pair.m_algorithm)
- {
- {
- pair.m_algorithm->~b3CollisionAlgorithm();
- dispatcher->freeCollisionAlgorithm(pair.m_algorithm);
- pair.m_algorithm=0;
- b3g_removePairs--;
- }
- }
- */
-}
-
-void b3SortedOverlappingPairCache::cleanProxyFromPairs(int proxy, b3Dispatcher* dispatcher)
-{
- class CleanPairCallback : public b3OverlapCallback
- {
- int m_cleanProxy;
- b3OverlappingPairCache* m_pairCache;
- b3Dispatcher* m_dispatcher;
-
- public:
- CleanPairCallback(int cleanProxy, b3OverlappingPairCache* pairCache, b3Dispatcher* dispatcher)
- : m_cleanProxy(cleanProxy),
- m_pairCache(pairCache),
- m_dispatcher(dispatcher)
- {
- }
- virtual bool processOverlap(b3BroadphasePair& pair)
- {
- if ((pair.x == m_cleanProxy) ||
- (pair.y == m_cleanProxy))
- {
- m_pairCache->cleanOverlappingPair(pair, m_dispatcher);
- }
- return false;
- }
- };
-
- CleanPairCallback cleanPairs(proxy, this, dispatcher);
-
- processAllOverlappingPairs(&cleanPairs, dispatcher);
-}
-
-void b3SortedOverlappingPairCache::removeOverlappingPairsContainingProxy(int proxy, b3Dispatcher* dispatcher)
-{
- class RemovePairCallback : public b3OverlapCallback
- {
- int m_obsoleteProxy;
-
- public:
- RemovePairCallback(int obsoleteProxy)
- : m_obsoleteProxy(obsoleteProxy)
- {
- }
- virtual bool processOverlap(b3BroadphasePair& pair)
- {
- return ((pair.x == m_obsoleteProxy) ||
- (pair.y == m_obsoleteProxy));
- }
- };
-
- RemovePairCallback removeCallback(proxy);
-
- processAllOverlappingPairs(&removeCallback, dispatcher);
-}
-
-void b3SortedOverlappingPairCache::sortOverlappingPairs(b3Dispatcher* dispatcher)
-{
- //should already be sorted
-}
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.h b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.h
deleted file mode 100644
index f1de1d94eb..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/b3OverlappingPairCache.h
+++ /dev/null
@@ -1,427 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_OVERLAPPING_PAIR_CACHE_H
-#define B3_OVERLAPPING_PAIR_CACHE_H
-
-#include "Bullet3Common/shared/b3Int2.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-class b3Dispatcher;
-#include "b3OverlappingPair.h"
-
-typedef b3AlignedObjectArray<b3BroadphasePair> b3BroadphasePairArray;
-
-struct b3OverlapCallback
-{
- virtual ~b3OverlapCallback()
- {
- }
- //return true for deletion of the pair
- virtual bool processOverlap(b3BroadphasePair& pair) = 0;
-};
-
-struct b3OverlapFilterCallback
-{
- virtual ~b3OverlapFilterCallback()
- {
- }
- // return true when pairs need collision
- virtual bool needBroadphaseCollision(int proxy0, int proxy1) const = 0;
-};
-
-extern int b3g_removePairs;
-extern int b3g_addedPairs;
-extern int b3g_findPairs;
-
-const int B3_NULL_PAIR = 0xffffffff;
-
-///The b3OverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the b3BroadphaseInterface broadphases.
-///The b3HashedOverlappingPairCache and b3SortedOverlappingPairCache classes are two implementations.
-class b3OverlappingPairCache
-{
-public:
- virtual ~b3OverlappingPairCache() {} // this is needed so we can get to the derived class destructor
-
- virtual b3BroadphasePair* getOverlappingPairArrayPtr() = 0;
-
- virtual const b3BroadphasePair* getOverlappingPairArrayPtr() const = 0;
-
- virtual b3BroadphasePairArray& getOverlappingPairArray() = 0;
-
- virtual void cleanOverlappingPair(b3BroadphasePair& pair, b3Dispatcher* dispatcher) = 0;
-
- virtual int getNumOverlappingPairs() const = 0;
-
- virtual void cleanProxyFromPairs(int proxy, b3Dispatcher* dispatcher) = 0;
-
- virtual void setOverlapFilterCallback(b3OverlapFilterCallback* callback) = 0;
-
- virtual void processAllOverlappingPairs(b3OverlapCallback*, b3Dispatcher* dispatcher) = 0;
-
- virtual b3BroadphasePair* findPair(int proxy0, int proxy1) = 0;
-
- virtual bool hasDeferredRemoval() = 0;
-
- //virtual void setInternalGhostPairCallback(b3OverlappingPairCallback* ghostPairCallback)=0;
-
- virtual b3BroadphasePair* addOverlappingPair(int proxy0, int proxy1) = 0;
- virtual void* removeOverlappingPair(int proxy0, int proxy1, b3Dispatcher* dispatcher) = 0;
- virtual void removeOverlappingPairsContainingProxy(int /*proxy0*/, b3Dispatcher* /*dispatcher*/) = 0;
-
- virtual void sortOverlappingPairs(b3Dispatcher* dispatcher) = 0;
-};
-
-/// Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman, Codercorner, http://codercorner.com
-class b3HashedOverlappingPairCache : public b3OverlappingPairCache
-{
- b3BroadphasePairArray m_overlappingPairArray;
- b3OverlapFilterCallback* m_overlapFilterCallback;
- // bool m_blockedForChanges;
-
-public:
- b3HashedOverlappingPairCache();
- virtual ~b3HashedOverlappingPairCache();
-
- virtual void removeOverlappingPairsContainingProxy(int proxy, b3Dispatcher* dispatcher);
-
- virtual void* removeOverlappingPair(int proxy0, int proxy1, b3Dispatcher* dispatcher);
-
- B3_FORCE_INLINE bool needsBroadphaseCollision(int proxy0, int proxy1) const
- {
- if (m_overlapFilterCallback)
- return m_overlapFilterCallback->needBroadphaseCollision(proxy0, proxy1);
-
- bool collides = true; //(proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
- //collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
-
- return collides;
- }
-
- // Add a pair and return the new pair. If the pair already exists,
- // no new pair is created and the old one is returned.
- virtual b3BroadphasePair* addOverlappingPair(int proxy0, int proxy1)
- {
- b3g_addedPairs++;
-
- if (!needsBroadphaseCollision(proxy0, proxy1))
- return 0;
-
- return internalAddPair(proxy0, proxy1);
- }
-
- void cleanProxyFromPairs(int proxy, b3Dispatcher* dispatcher);
-
- virtual void processAllOverlappingPairs(b3OverlapCallback*, b3Dispatcher* dispatcher);
-
- virtual b3BroadphasePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
-
- const b3BroadphasePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
-
- b3BroadphasePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- const b3BroadphasePairArray& getOverlappingPairArray() const
- {
- return m_overlappingPairArray;
- }
-
- void cleanOverlappingPair(b3BroadphasePair& pair, b3Dispatcher* dispatcher);
-
- b3BroadphasePair* findPair(int proxy0, int proxy1);
-
- int GetCount() const { return m_overlappingPairArray.size(); }
- // b3BroadphasePair* GetPairs() { return m_pairs; }
-
- b3OverlapFilterCallback* getOverlapFilterCallback()
- {
- return m_overlapFilterCallback;
- }
-
- void setOverlapFilterCallback(b3OverlapFilterCallback* callback)
- {
- m_overlapFilterCallback = callback;
- }
-
- int getNumOverlappingPairs() const
- {
- return m_overlappingPairArray.size();
- }
-
-private:
- b3BroadphasePair* internalAddPair(int proxy0, int proxy1);
-
- void growTables();
-
- B3_FORCE_INLINE bool equalsPair(const b3BroadphasePair& pair, int proxyId1, int proxyId2)
- {
- return pair.x == proxyId1 && pair.y == proxyId2;
- }
-
- /*
- // Thomas Wang's hash, see: http://www.concentric.net/~Ttwang/tech/inthash.htm
- // This assumes proxyId1 and proxyId2 are 16-bit.
- B3_FORCE_INLINE int getHash(int proxyId1, int proxyId2)
- {
- int key = (proxyId2 << 16) | proxyId1;
- key = ~key + (key << 15);
- key = key ^ (key >> 12);
- key = key + (key << 2);
- key = key ^ (key >> 4);
- key = key * 2057;
- key = key ^ (key >> 16);
- return key;
- }
- */
-
- B3_FORCE_INLINE unsigned int getHash(unsigned int proxyId1, unsigned int proxyId2)
- {
- int key = static_cast<int>(((unsigned int)proxyId1) | (((unsigned int)proxyId2) << 16));
- // Thomas Wang's hash
-
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return static_cast<unsigned int>(key);
- }
-
- B3_FORCE_INLINE b3BroadphasePair* internalFindPair(int proxy0, int proxy1, int hash)
- {
- int proxyId1 = proxy0;
- int proxyId2 = proxy1;
-#if 0 // wrong, 'equalsPair' use unsorted uids, copy-past devil striked again. Nat.
- if (proxyId1 > proxyId2)
- b3Swap(proxyId1, proxyId2);
-#endif
-
- int index = m_hashTable[hash];
-
- while (index != B3_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false)
- {
- index = m_next[index];
- }
-
- if (index == B3_NULL_PAIR)
- {
- return NULL;
- }
-
- b3Assert(index < m_overlappingPairArray.size());
-
- return &m_overlappingPairArray[index];
- }
-
- virtual bool hasDeferredRemoval()
- {
- return false;
- }
-
- /* virtual void setInternalGhostPairCallback(b3OverlappingPairCallback* ghostPairCallback)
- {
- m_ghostPairCallback = ghostPairCallback;
- }
- */
-
- virtual void sortOverlappingPairs(b3Dispatcher* dispatcher);
-
-protected:
- b3AlignedObjectArray<int> m_hashTable;
- b3AlignedObjectArray<int> m_next;
- // b3OverlappingPairCallback* m_ghostPairCallback;
-};
-
-///b3SortedOverlappingPairCache maintains the objects with overlapping AABB
-///Typically managed by the Broadphase, Axis3Sweep or b3SimpleBroadphase
-class b3SortedOverlappingPairCache : public b3OverlappingPairCache
-{
-protected:
- //avoid brute-force finding all the time
- b3BroadphasePairArray m_overlappingPairArray;
-
- //during the dispatch, check that user doesn't destroy/create proxy
- bool m_blockedForChanges;
-
- ///by default, do the removal during the pair traversal
- bool m_hasDeferredRemoval;
-
- //if set, use the callback instead of the built in filter in needBroadphaseCollision
- b3OverlapFilterCallback* m_overlapFilterCallback;
-
- // b3OverlappingPairCallback* m_ghostPairCallback;
-
-public:
- b3SortedOverlappingPairCache();
- virtual ~b3SortedOverlappingPairCache();
-
- virtual void processAllOverlappingPairs(b3OverlapCallback*, b3Dispatcher* dispatcher);
-
- void* removeOverlappingPair(int proxy0, int proxy1, b3Dispatcher* dispatcher);
-
- void cleanOverlappingPair(b3BroadphasePair& pair, b3Dispatcher* dispatcher);
-
- b3BroadphasePair* addOverlappingPair(int proxy0, int proxy1);
-
- b3BroadphasePair* findPair(int proxy0, int proxy1);
-
- void cleanProxyFromPairs(int proxy, b3Dispatcher* dispatcher);
-
- virtual void removeOverlappingPairsContainingProxy(int proxy, b3Dispatcher* dispatcher);
-
- inline bool needsBroadphaseCollision(int proxy0, int proxy1) const
- {
- if (m_overlapFilterCallback)
- return m_overlapFilterCallback->needBroadphaseCollision(proxy0, proxy1);
-
- bool collides = true; //(proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
- //collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
-
- return collides;
- }
-
- b3BroadphasePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- const b3BroadphasePairArray& getOverlappingPairArray() const
- {
- return m_overlappingPairArray;
- }
-
- b3BroadphasePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
-
- const b3BroadphasePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
-
- int getNumOverlappingPairs() const
- {
- return m_overlappingPairArray.size();
- }
-
- b3OverlapFilterCallback* getOverlapFilterCallback()
- {
- return m_overlapFilterCallback;
- }
-
- void setOverlapFilterCallback(b3OverlapFilterCallback* callback)
- {
- m_overlapFilterCallback = callback;
- }
-
- virtual bool hasDeferredRemoval()
- {
- return m_hasDeferredRemoval;
- }
-
- /* virtual void setInternalGhostPairCallback(b3OverlappingPairCallback* ghostPairCallback)
- {
- m_ghostPairCallback = ghostPairCallback;
- }
- */
- virtual void sortOverlappingPairs(b3Dispatcher* dispatcher);
-};
-
-///b3NullPairCache skips add/removal of overlapping pairs. Userful for benchmarking and unit testing.
-class b3NullPairCache : public b3OverlappingPairCache
-{
- b3BroadphasePairArray m_overlappingPairArray;
-
-public:
- virtual b3BroadphasePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
- const b3BroadphasePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
- b3BroadphasePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- virtual void cleanOverlappingPair(b3BroadphasePair& /*pair*/, b3Dispatcher* /*dispatcher*/)
- {
- }
-
- virtual int getNumOverlappingPairs() const
- {
- return 0;
- }
-
- virtual void cleanProxyFromPairs(int /*proxy*/, b3Dispatcher* /*dispatcher*/)
- {
- }
-
- virtual void setOverlapFilterCallback(b3OverlapFilterCallback* /*callback*/)
- {
- }
-
- virtual void processAllOverlappingPairs(b3OverlapCallback*, b3Dispatcher* /*dispatcher*/)
- {
- }
-
- virtual b3BroadphasePair* findPair(int /*proxy0*/, int /*proxy1*/)
- {
- return 0;
- }
-
- virtual bool hasDeferredRemoval()
- {
- return true;
- }
-
- // virtual void setInternalGhostPairCallback(b3OverlappingPairCallback* /* ghostPairCallback */)
- // {
- //
- // }
-
- virtual b3BroadphasePair* addOverlappingPair(int /*proxy0*/, int /*proxy1*/)
- {
- return 0;
- }
-
- virtual void* removeOverlappingPair(int /*proxy0*/, int /*proxy1*/, b3Dispatcher* /*dispatcher*/)
- {
- return 0;
- }
-
- virtual void removeOverlappingPairsContainingProxy(int /*proxy0*/, b3Dispatcher* /*dispatcher*/)
- {
- }
-
- virtual void sortOverlappingPairs(b3Dispatcher* dispatcher)
- {
- (void)dispatcher;
- }
-};
-
-#endif //B3_OVERLAPPING_PAIR_CACHE_H
diff --git a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h b/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h
deleted file mode 100644
index 343a2c0e21..0000000000
--- a/thirdparty/bullet/Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h
+++ /dev/null
@@ -1,56 +0,0 @@
-
-#ifndef B3_AABB_H
-#define B3_AABB_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-#include "Bullet3Common/shared/b3Mat3x3.h"
-
-typedef struct b3Aabb b3Aabb_t;
-
-struct b3Aabb
-{
- union {
- float m_min[4];
- b3Float4 m_minVec;
- int m_minIndices[4];
- };
- union {
- float m_max[4];
- b3Float4 m_maxVec;
- int m_signedMaxIndices[4];
- };
-};
-
-inline void b3TransformAabb2(b3Float4ConstArg localAabbMin, b3Float4ConstArg localAabbMax, float margin,
- b3Float4ConstArg pos,
- b3QuatConstArg orn,
- b3Float4* aabbMinOut, b3Float4* aabbMaxOut)
-{
- b3Float4 localHalfExtents = 0.5f * (localAabbMax - localAabbMin);
- localHalfExtents += b3MakeFloat4(margin, margin, margin, 0.f);
- b3Float4 localCenter = 0.5f * (localAabbMax + localAabbMin);
- b3Mat3x3 m;
- m = b3QuatGetRotationMatrix(orn);
- b3Mat3x3 abs_b = b3AbsoluteMat3x3(m);
- b3Float4 center = b3TransformPoint(localCenter, pos, orn);
-
- b3Float4 extent = b3MakeFloat4(b3Dot3F4(localHalfExtents, b3GetRow(abs_b, 0)),
- b3Dot3F4(localHalfExtents, b3GetRow(abs_b, 1)),
- b3Dot3F4(localHalfExtents, b3GetRow(abs_b, 2)),
- 0.f);
- *aabbMinOut = center - extent;
- *aabbMaxOut = center + extent;
-}
-
-/// conservative test for overlap between two aabbs
-inline bool b3TestAabbAgainstAabb(b3Float4ConstArg aabbMin1, b3Float4ConstArg aabbMax1,
- b3Float4ConstArg aabbMin2, b3Float4ConstArg aabbMax2)
-{
- bool overlap = true;
- overlap = (aabbMin1.x > aabbMax2.x || aabbMax1.x < aabbMin2.x) ? false : overlap;
- overlap = (aabbMin1.z > aabbMax2.z || aabbMax1.z < aabbMin2.z) ? false : overlap;
- overlap = (aabbMin1.y > aabbMax2.y || aabbMax1.y < aabbMin2.y) ? false : overlap;
- return overlap;
-}
-
-#endif //B3_AABB_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Config.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Config.h
deleted file mode 100644
index 518da89c54..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Config.h
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef B3_CONFIG_H
-#define B3_CONFIG_H
-
-struct b3Config
-{
- int m_maxConvexBodies;
- int m_maxConvexShapes;
- int m_maxBroadphasePairs;
- int m_maxContactCapacity;
- int m_compoundPairCapacity;
-
- int m_maxVerticesPerFace;
- int m_maxFacesPerShape;
- int m_maxConvexVertices;
- int m_maxConvexIndices;
- int m_maxConvexUniqueEdges;
-
- int m_maxCompoundChildShapes;
-
- int m_maxTriConvexPairCapacity;
-
- b3Config()
- : m_maxConvexBodies(128 * 1024),
- m_maxVerticesPerFace(64),
- m_maxFacesPerShape(12),
- m_maxConvexVertices(8192),
- m_maxConvexIndices(81920),
- m_maxConvexUniqueEdges(8192),
- m_maxCompoundChildShapes(8192),
- m_maxTriConvexPairCapacity(256 * 1024)
- {
- m_maxConvexShapes = m_maxConvexBodies;
- m_maxBroadphasePairs = 16 * m_maxConvexBodies;
- m_maxContactCapacity = m_maxBroadphasePairs;
- m_compoundPairCapacity = 1024 * 1024;
- }
-};
-
-#endif //B3_CONFIG_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Contact4.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Contact4.h
deleted file mode 100644
index c2cd3c729b..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3Contact4.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_CONTACT4_H
-#define B3_CONTACT4_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3Contact4 : public b3Contact4Data
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- int getBodyA() const { return abs(m_bodyAPtrAndSignBit); }
- int getBodyB() const { return abs(m_bodyBPtrAndSignBit); }
- bool isBodyAFixed() const { return m_bodyAPtrAndSignBit < 0; }
- bool isBodyBFixed() const { return m_bodyBPtrAndSignBit < 0; }
- // todo. make it safer
- int& getBatchIdx() { return m_batchIdx; }
- const int& getBatchIdx() const { return m_batchIdx; }
- float getRestituitionCoeff() const { return ((float)m_restituitionCoeffCmp / (float)0xffff); }
- void setRestituitionCoeff(float c)
- {
- b3Assert(c >= 0.f && c <= 1.f);
- m_restituitionCoeffCmp = (unsigned short)(c * 0xffff);
- }
- float getFrictionCoeff() const { return ((float)m_frictionCoeffCmp / (float)0xffff); }
- void setFrictionCoeff(float c)
- {
- b3Assert(c >= 0.f && c <= 1.f);
- m_frictionCoeffCmp = (unsigned short)(c * 0xffff);
- }
-
- //float& getNPoints() { return m_worldNormal[3]; }
- int getNPoints() const { return (int)m_worldNormalOnB.w; }
-
- float getPenetration(int idx) const { return m_worldPosB[idx].w; }
-
- bool isInvalid() const { return (getBodyA() == 0 || getBodyB() == 0); }
-};
-
-#endif //B3_CONTACT4_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.cpp b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.cpp
deleted file mode 100644
index a5dab74a34..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.cpp
+++ /dev/null
@@ -1,500 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#include "b3ConvexUtility.h"
-#include "Bullet3Geometry/b3ConvexHullComputer.h"
-#include "Bullet3Geometry/b3GrahamScan2dConvexHull.h"
-#include "Bullet3Common/b3Quaternion.h"
-#include "Bullet3Common/b3HashMap.h"
-
-b3ConvexUtility::~b3ConvexUtility()
-{
-}
-
-bool b3ConvexUtility::initializePolyhedralFeatures(const b3Vector3* orgVertices, int numPoints, bool mergeCoplanarTriangles)
-{
- b3ConvexHullComputer conv;
- conv.compute(&orgVertices[0].getX(), sizeof(b3Vector3), numPoints, 0.f, 0.f);
-
- b3AlignedObjectArray<b3Vector3> faceNormals;
- int numFaces = conv.faces.size();
- faceNormals.resize(numFaces);
- b3ConvexHullComputer* convexUtil = &conv;
-
- b3AlignedObjectArray<b3MyFace> tmpFaces;
- tmpFaces.resize(numFaces);
-
- int numVertices = convexUtil->vertices.size();
- m_vertices.resize(numVertices);
- for (int p = 0; p < numVertices; p++)
- {
- m_vertices[p] = convexUtil->vertices[p];
- }
-
- for (int i = 0; i < numFaces; i++)
- {
- int face = convexUtil->faces[i];
- //printf("face=%d\n",face);
- const b3ConvexHullComputer::Edge* firstEdge = &convexUtil->edges[face];
- const b3ConvexHullComputer::Edge* edge = firstEdge;
-
- b3Vector3 edges[3];
- int numEdges = 0;
- //compute face normals
-
- do
- {
- int src = edge->getSourceVertex();
- tmpFaces[i].m_indices.push_back(src);
- int targ = edge->getTargetVertex();
- b3Vector3 wa = convexUtil->vertices[src];
-
- b3Vector3 wb = convexUtil->vertices[targ];
- b3Vector3 newEdge = wb - wa;
- newEdge.normalize();
- if (numEdges < 2)
- edges[numEdges++] = newEdge;
-
- edge = edge->getNextEdgeOfFace();
- } while (edge != firstEdge);
-
- b3Scalar planeEq = 1e30f;
-
- if (numEdges == 2)
- {
- faceNormals[i] = edges[0].cross(edges[1]);
- faceNormals[i].normalize();
- tmpFaces[i].m_plane[0] = faceNormals[i].getX();
- tmpFaces[i].m_plane[1] = faceNormals[i].getY();
- tmpFaces[i].m_plane[2] = faceNormals[i].getZ();
- tmpFaces[i].m_plane[3] = planeEq;
- }
- else
- {
- b3Assert(0); //degenerate?
- faceNormals[i].setZero();
- }
-
- for (int v = 0; v < tmpFaces[i].m_indices.size(); v++)
- {
- b3Scalar eq = m_vertices[tmpFaces[i].m_indices[v]].dot(faceNormals[i]);
- if (planeEq > eq)
- {
- planeEq = eq;
- }
- }
- tmpFaces[i].m_plane[3] = -planeEq;
- }
-
- //merge coplanar faces and copy them to m_polyhedron
-
- b3Scalar faceWeldThreshold = 0.999f;
- b3AlignedObjectArray<int> todoFaces;
- for (int i = 0; i < tmpFaces.size(); i++)
- todoFaces.push_back(i);
-
- while (todoFaces.size())
- {
- b3AlignedObjectArray<int> coplanarFaceGroup;
- int refFace = todoFaces[todoFaces.size() - 1];
-
- coplanarFaceGroup.push_back(refFace);
- b3MyFace& faceA = tmpFaces[refFace];
- todoFaces.pop_back();
-
- b3Vector3 faceNormalA = b3MakeVector3(faceA.m_plane[0], faceA.m_plane[1], faceA.m_plane[2]);
- for (int j = todoFaces.size() - 1; j >= 0; j--)
- {
- int i = todoFaces[j];
- b3MyFace& faceB = tmpFaces[i];
- b3Vector3 faceNormalB = b3MakeVector3(faceB.m_plane[0], faceB.m_plane[1], faceB.m_plane[2]);
- if (faceNormalA.dot(faceNormalB) > faceWeldThreshold)
- {
- coplanarFaceGroup.push_back(i);
- todoFaces.remove(i);
- }
- }
-
- bool did_merge = false;
- if (coplanarFaceGroup.size() > 1)
- {
- //do the merge: use Graham Scan 2d convex hull
-
- b3AlignedObjectArray<b3GrahamVector3> orgpoints;
- b3Vector3 averageFaceNormal = b3MakeVector3(0, 0, 0);
-
- for (int i = 0; i < coplanarFaceGroup.size(); i++)
- {
- // m_polyhedron->m_faces.push_back(tmpFaces[coplanarFaceGroup[i]]);
-
- b3MyFace& face = tmpFaces[coplanarFaceGroup[i]];
- b3Vector3 faceNormal = b3MakeVector3(face.m_plane[0], face.m_plane[1], face.m_plane[2]);
- averageFaceNormal += faceNormal;
- for (int f = 0; f < face.m_indices.size(); f++)
- {
- int orgIndex = face.m_indices[f];
- b3Vector3 pt = m_vertices[orgIndex];
-
- bool found = false;
-
- for (int i = 0; i < orgpoints.size(); i++)
- {
- //if ((orgpoints[i].m_orgIndex == orgIndex) || ((rotatedPt-orgpoints[i]).length2()<0.0001))
- if (orgpoints[i].m_orgIndex == orgIndex)
- {
- found = true;
- break;
- }
- }
- if (!found)
- orgpoints.push_back(b3GrahamVector3(pt, orgIndex));
- }
- }
-
- b3MyFace combinedFace;
- for (int i = 0; i < 4; i++)
- combinedFace.m_plane[i] = tmpFaces[coplanarFaceGroup[0]].m_plane[i];
-
- b3AlignedObjectArray<b3GrahamVector3> hull;
-
- averageFaceNormal.normalize();
- b3GrahamScanConvexHull2D(orgpoints, hull, averageFaceNormal);
-
- for (int i = 0; i < hull.size(); i++)
- {
- combinedFace.m_indices.push_back(hull[i].m_orgIndex);
- for (int k = 0; k < orgpoints.size(); k++)
- {
- if (orgpoints[k].m_orgIndex == hull[i].m_orgIndex)
- {
- orgpoints[k].m_orgIndex = -1; // invalidate...
- break;
- }
- }
- }
-
- // are there rejected vertices?
- bool reject_merge = false;
-
- for (int i = 0; i < orgpoints.size(); i++)
- {
- if (orgpoints[i].m_orgIndex == -1)
- continue; // this is in the hull...
- // this vertex is rejected -- is anybody else using this vertex?
- for (int j = 0; j < tmpFaces.size(); j++)
- {
- b3MyFace& face = tmpFaces[j];
- // is this a face of the current coplanar group?
- bool is_in_current_group = false;
- for (int k = 0; k < coplanarFaceGroup.size(); k++)
- {
- if (coplanarFaceGroup[k] == j)
- {
- is_in_current_group = true;
- break;
- }
- }
- if (is_in_current_group) // ignore this face...
- continue;
- // does this face use this rejected vertex?
- for (int v = 0; v < face.m_indices.size(); v++)
- {
- if (face.m_indices[v] == orgpoints[i].m_orgIndex)
- {
- // this rejected vertex is used in another face -- reject merge
- reject_merge = true;
- break;
- }
- }
- if (reject_merge)
- break;
- }
- if (reject_merge)
- break;
- }
-
- if (!reject_merge)
- {
- // do this merge!
- did_merge = true;
- m_faces.push_back(combinedFace);
- }
- }
- if (!did_merge)
- {
- for (int i = 0; i < coplanarFaceGroup.size(); i++)
- {
- b3MyFace face = tmpFaces[coplanarFaceGroup[i]];
- m_faces.push_back(face);
- }
- }
- }
-
- initialize();
-
- return true;
-}
-
-inline bool IsAlmostZero(const b3Vector3& v)
-{
- if (fabsf(v.getX()) > 1e-6 || fabsf(v.getY()) > 1e-6 || fabsf(v.getZ()) > 1e-6) return false;
- return true;
-}
-
-struct b3InternalVertexPair
-{
- b3InternalVertexPair(short int v0, short int v1)
- : m_v0(v0),
- m_v1(v1)
- {
- if (m_v1 > m_v0)
- b3Swap(m_v0, m_v1);
- }
- short int m_v0;
- short int m_v1;
- int getHash() const
- {
- return m_v0 + (m_v1 << 16);
- }
- bool equals(const b3InternalVertexPair& other) const
- {
- return m_v0 == other.m_v0 && m_v1 == other.m_v1;
- }
-};
-
-struct b3InternalEdge
-{
- b3InternalEdge()
- : m_face0(-1),
- m_face1(-1)
- {
- }
- short int m_face0;
- short int m_face1;
-};
-
-//
-
-#ifdef TEST_INTERNAL_OBJECTS
-bool b3ConvexUtility::testContainment() const
-{
- for (int p = 0; p < 8; p++)
- {
- b3Vector3 LocalPt;
- if (p == 0)
- LocalPt = m_localCenter + b3Vector3(m_extents[0], m_extents[1], m_extents[2]);
- else if (p == 1)
- LocalPt = m_localCenter + b3Vector3(m_extents[0], m_extents[1], -m_extents[2]);
- else if (p == 2)
- LocalPt = m_localCenter + b3Vector3(m_extents[0], -m_extents[1], m_extents[2]);
- else if (p == 3)
- LocalPt = m_localCenter + b3Vector3(m_extents[0], -m_extents[1], -m_extents[2]);
- else if (p == 4)
- LocalPt = m_localCenter + b3Vector3(-m_extents[0], m_extents[1], m_extents[2]);
- else if (p == 5)
- LocalPt = m_localCenter + b3Vector3(-m_extents[0], m_extents[1], -m_extents[2]);
- else if (p == 6)
- LocalPt = m_localCenter + b3Vector3(-m_extents[0], -m_extents[1], m_extents[2]);
- else if (p == 7)
- LocalPt = m_localCenter + b3Vector3(-m_extents[0], -m_extents[1], -m_extents[2]);
-
- for (int i = 0; i < m_faces.size(); i++)
- {
- const b3Vector3 Normal(m_faces[i].m_plane[0], m_faces[i].m_plane[1], m_faces[i].m_plane[2]);
- const b3Scalar d = LocalPt.dot(Normal) + m_faces[i].m_plane[3];
- if (d > 0.0f)
- return false;
- }
- }
- return true;
-}
-#endif
-
-void b3ConvexUtility::initialize()
-{
- b3HashMap<b3InternalVertexPair, b3InternalEdge> edges;
-
- b3Scalar TotalArea = 0.0f;
-
- m_localCenter.setValue(0, 0, 0);
- for (int i = 0; i < m_faces.size(); i++)
- {
- int numVertices = m_faces[i].m_indices.size();
- int NbTris = numVertices;
- for (int j = 0; j < NbTris; j++)
- {
- int k = (j + 1) % numVertices;
- b3InternalVertexPair vp(m_faces[i].m_indices[j], m_faces[i].m_indices[k]);
- b3InternalEdge* edptr = edges.find(vp);
- b3Vector3 edge = m_vertices[vp.m_v1] - m_vertices[vp.m_v0];
- edge.normalize();
-
- bool found = false;
- b3Vector3 diff, diff2;
-
- for (int p = 0; p < m_uniqueEdges.size(); p++)
- {
- diff = m_uniqueEdges[p] - edge;
- diff2 = m_uniqueEdges[p] + edge;
-
- // if ((diff.length2()==0.f) ||
- // (diff2.length2()==0.f))
-
- if (IsAlmostZero(diff) ||
- IsAlmostZero(diff2))
- {
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- m_uniqueEdges.push_back(edge);
- }
-
- if (edptr)
- {
- //TBD: figure out why I added this assert
- // b3Assert(edptr->m_face0>=0);
- // b3Assert(edptr->m_face1<0);
- edptr->m_face1 = i;
- }
- else
- {
- b3InternalEdge ed;
- ed.m_face0 = i;
- edges.insert(vp, ed);
- }
- }
- }
-
-#ifdef USE_CONNECTED_FACES
- for (int i = 0; i < m_faces.size(); i++)
- {
- int numVertices = m_faces[i].m_indices.size();
- m_faces[i].m_connectedFaces.resize(numVertices);
-
- for (int j = 0; j < numVertices; j++)
- {
- int k = (j + 1) % numVertices;
- b3InternalVertexPair vp(m_faces[i].m_indices[j], m_faces[i].m_indices[k]);
- b3InternalEdge* edptr = edges.find(vp);
- b3Assert(edptr);
- b3Assert(edptr->m_face0 >= 0);
- b3Assert(edptr->m_face1 >= 0);
-
- int connectedFace = (edptr->m_face0 == i) ? edptr->m_face1 : edptr->m_face0;
- m_faces[i].m_connectedFaces[j] = connectedFace;
- }
- }
-#endif //USE_CONNECTED_FACES
-
- for (int i = 0; i < m_faces.size(); i++)
- {
- int numVertices = m_faces[i].m_indices.size();
- int NbTris = numVertices - 2;
-
- const b3Vector3& p0 = m_vertices[m_faces[i].m_indices[0]];
- for (int j = 1; j <= NbTris; j++)
- {
- int k = (j + 1) % numVertices;
- const b3Vector3& p1 = m_vertices[m_faces[i].m_indices[j]];
- const b3Vector3& p2 = m_vertices[m_faces[i].m_indices[k]];
- b3Scalar Area = ((p0 - p1).cross(p0 - p2)).length() * 0.5f;
- b3Vector3 Center = (p0 + p1 + p2) / 3.0f;
- m_localCenter += Area * Center;
- TotalArea += Area;
- }
- }
- m_localCenter /= TotalArea;
-
-#ifdef TEST_INTERNAL_OBJECTS
- if (1)
- {
- m_radius = FLT_MAX;
- for (int i = 0; i < m_faces.size(); i++)
- {
- const b3Vector3 Normal(m_faces[i].m_plane[0], m_faces[i].m_plane[1], m_faces[i].m_plane[2]);
- const b3Scalar dist = b3Fabs(m_localCenter.dot(Normal) + m_faces[i].m_plane[3]);
- if (dist < m_radius)
- m_radius = dist;
- }
-
- b3Scalar MinX = FLT_MAX;
- b3Scalar MinY = FLT_MAX;
- b3Scalar MinZ = FLT_MAX;
- b3Scalar MaxX = -FLT_MAX;
- b3Scalar MaxY = -FLT_MAX;
- b3Scalar MaxZ = -FLT_MAX;
- for (int i = 0; i < m_vertices.size(); i++)
- {
- const b3Vector3& pt = m_vertices[i];
- if (pt.getX() < MinX) MinX = pt.getX();
- if (pt.getX() > MaxX) MaxX = pt.getX();
- if (pt.getY() < MinY) MinY = pt.getY();
- if (pt.getY() > MaxY) MaxY = pt.getY();
- if (pt.getZ() < MinZ) MinZ = pt.getZ();
- if (pt.getZ() > MaxZ) MaxZ = pt.getZ();
- }
- mC.setValue(MaxX + MinX, MaxY + MinY, MaxZ + MinZ);
- mE.setValue(MaxX - MinX, MaxY - MinY, MaxZ - MinZ);
-
- // const b3Scalar r = m_radius / sqrtf(2.0f);
- const b3Scalar r = m_radius / sqrtf(3.0f);
- const int LargestExtent = mE.maxAxis();
- const b3Scalar Step = (mE[LargestExtent] * 0.5f - r) / 1024.0f;
- m_extents[0] = m_extents[1] = m_extents[2] = r;
- m_extents[LargestExtent] = mE[LargestExtent] * 0.5f;
- bool FoundBox = false;
- for (int j = 0; j < 1024; j++)
- {
- if (testContainment())
- {
- FoundBox = true;
- break;
- }
-
- m_extents[LargestExtent] -= Step;
- }
- if (!FoundBox)
- {
- m_extents[0] = m_extents[1] = m_extents[2] = r;
- }
- else
- {
- // Refine the box
- const b3Scalar Step = (m_radius - r) / 1024.0f;
- const int e0 = (1 << LargestExtent) & 3;
- const int e1 = (1 << e0) & 3;
-
- for (int j = 0; j < 1024; j++)
- {
- const b3Scalar Saved0 = m_extents[e0];
- const b3Scalar Saved1 = m_extents[e1];
- m_extents[e0] += Step;
- m_extents[e1] += Step;
-
- if (!testContainment())
- {
- m_extents[e0] = Saved0;
- m_extents[e1] = Saved1;
- break;
- }
- }
- }
- }
-#endif
-}
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h
deleted file mode 100644
index 4c8a88cbda..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h
+++ /dev/null
@@ -1,55 +0,0 @@
-
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef _BT_CONVEX_UTILITY_H
-#define _BT_CONVEX_UTILITY_H
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Transform.h"
-
-struct b3MyFace
-{
- b3AlignedObjectArray<int> m_indices;
- b3Scalar m_plane[4];
-};
-
-B3_ATTRIBUTE_ALIGNED16(class)
-b3ConvexUtility
-{
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3Vector3 m_localCenter;
- b3Vector3 m_extents;
- b3Vector3 mC;
- b3Vector3 mE;
- b3Scalar m_radius;
-
- b3AlignedObjectArray<b3Vector3> m_vertices;
- b3AlignedObjectArray<b3MyFace> m_faces;
- b3AlignedObjectArray<b3Vector3> m_uniqueEdges;
-
- b3ConvexUtility()
- {
- }
- virtual ~b3ConvexUtility();
-
- bool initializePolyhedralFeatures(const b3Vector3* orgVertices, int numVertices, bool mergeCoplanarTriangles = true);
-
- void initialize();
- bool testContainment() const;
-};
-#endif
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.cpp b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.cpp
deleted file mode 100644
index e0b2161100..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.cpp
+++ /dev/null
@@ -1,297 +0,0 @@
-#include "b3CpuNarrowPhase.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ContactConvexConvexSAT.h"
-
-struct b3CpuNarrowPhaseInternalData
-{
- b3AlignedObjectArray<b3Aabb> m_localShapeAABBCPU;
- b3AlignedObjectArray<b3Collidable> m_collidablesCPU;
- b3AlignedObjectArray<b3ConvexUtility*> m_convexData;
- b3Config m_config;
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> m_convexPolyhedra;
- b3AlignedObjectArray<b3Vector3> m_uniqueEdges;
- b3AlignedObjectArray<b3Vector3> m_convexVertices;
- b3AlignedObjectArray<int> m_convexIndices;
- b3AlignedObjectArray<b3GpuFace> m_convexFaces;
-
- b3AlignedObjectArray<b3Contact4Data> m_contacts;
-
- int m_numAcceleratedShapes;
-};
-
-const b3AlignedObjectArray<b3Contact4Data>& b3CpuNarrowPhase::getContacts() const
-{
- return m_data->m_contacts;
-}
-
-b3Collidable& b3CpuNarrowPhase::getCollidableCpu(int collidableIndex)
-{
- return m_data->m_collidablesCPU[collidableIndex];
-}
-
-const b3Collidable& b3CpuNarrowPhase::getCollidableCpu(int collidableIndex) const
-{
- return m_data->m_collidablesCPU[collidableIndex];
-}
-
-b3CpuNarrowPhase::b3CpuNarrowPhase(const struct b3Config& config)
-{
- m_data = new b3CpuNarrowPhaseInternalData;
- m_data->m_config = config;
- m_data->m_numAcceleratedShapes = 0;
-}
-
-b3CpuNarrowPhase::~b3CpuNarrowPhase()
-{
- delete m_data;
-}
-
-void b3CpuNarrowPhase::computeContacts(b3AlignedObjectArray<b3Int4>& pairs, b3AlignedObjectArray<b3Aabb>& aabbsWorldSpace, b3AlignedObjectArray<b3RigidBodyData>& bodies)
-{
- int nPairs = pairs.size();
- int numContacts = 0;
- int maxContactCapacity = m_data->m_config.m_maxContactCapacity;
- m_data->m_contacts.resize(maxContactCapacity);
-
- for (int i = 0; i < nPairs; i++)
- {
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
- int collidableIndexA = bodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = bodies[bodyIndexB].m_collidableIdx;
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_SPHERE &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
- // computeContactSphereConvex(i,bodyIndexA,bodyIndexB,collidableIndexA,collidableIndexB,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&hostVertices[0],&hostIndices[0],&hostFaces[0],&hostContacts[0],nContacts,maxContactCapacity);
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_SPHERE)
- {
- // computeContactSphereConvex(i,bodyIndexB,bodyIndexA,collidableIndexB,collidableIndexA,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&hostVertices[0],&hostIndices[0],&hostFaces[0],&hostContacts[0],nContacts,maxContactCapacity);
- //printf("convex-sphere\n");
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_PLANE)
- {
- // computeContactPlaneConvex(i,bodyIndexB,bodyIndexA,collidableIndexB,collidableIndexA,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&hostVertices[0],&hostIndices[0],&hostFaces[0],&hostContacts[0],nContacts,maxContactCapacity);
- // printf("convex-plane\n");
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_PLANE &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
- // computeContactPlaneConvex(i,bodyIndexA,bodyIndexB,collidableIndexA,collidableIndexB,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&hostVertices[0],&hostIndices[0],&hostFaces[0],&hostContacts[0],nContacts,maxContactCapacity);
- // printf("plane-convex\n");
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- // computeContactCompoundCompound(i,bodyIndexB,bodyIndexA,collidableIndexB,collidableIndexA,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&cpuChildShapes[0], hostAabbsWorldSpace,hostAabbsLocalSpace,hostVertices,hostUniqueEdges,hostIndices,hostFaces,&hostContacts[0],
- // nContacts,maxContactCapacity,treeNodesCPU,subTreesCPU,bvhInfoCPU);
- // printf("convex-plane\n");
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_PLANE)
- {
- // computeContactPlaneCompound(i,bodyIndexB,bodyIndexA,collidableIndexB,collidableIndexA,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&cpuChildShapes[0], &hostVertices[0],&hostIndices[0],&hostFaces[0],&hostContacts[0],nContacts,maxContactCapacity);
- // printf("convex-plane\n");
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_PLANE &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- // computeContactPlaneCompound(i,bodyIndexA,bodyIndexB,collidableIndexA,collidableIndexB,&bodies[0],
- // &m_data->m_collidablesCPU[0],&hostConvexData[0],&cpuChildShapes[0],&hostVertices[0],&hostIndices[0],&hostFaces[0],&hostContacts[0],nContacts,maxContactCapacity);
- // printf("plane-convex\n");
- }
-
- if (m_data->m_collidablesCPU[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- m_data->m_collidablesCPU[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
- //printf("pairs[i].z=%d\n",pairs[i].z);
- //int contactIndex = computeContactConvexConvex2(i,bodyIndexA,bodyIndexB,collidableIndexA,collidableIndexB,bodies,
- // m_data->m_collidablesCPU,hostConvexData,hostVertices,hostUniqueEdges,hostIndices,hostFaces,hostContacts,nContacts,maxContactCapacity,oldHostContacts);
- int contactIndex = b3ContactConvexConvexSAT(i, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, bodies,
- m_data->m_collidablesCPU, m_data->m_convexPolyhedra, m_data->m_convexVertices, m_data->m_uniqueEdges, m_data->m_convexIndices, m_data->m_convexFaces, m_data->m_contacts, numContacts, maxContactCapacity);
-
- if (contactIndex >= 0)
- {
- pairs[i].z = contactIndex;
- }
- // printf("plane-convex\n");
- }
- }
-
- m_data->m_contacts.resize(numContacts);
-}
-
-int b3CpuNarrowPhase::registerConvexHullShape(b3ConvexUtility* utilPtr)
-{
- int collidableIndex = allocateCollidable();
- if (collidableIndex < 0)
- return collidableIndex;
-
- b3Collidable& col = m_data->m_collidablesCPU[collidableIndex];
- col.m_shapeType = SHAPE_CONVEX_HULL;
- col.m_shapeIndex = -1;
-
- {
- b3Vector3 localCenter = b3MakeVector3(0, 0, 0);
- for (int i = 0; i < utilPtr->m_vertices.size(); i++)
- localCenter += utilPtr->m_vertices[i];
- localCenter *= (1.f / utilPtr->m_vertices.size());
- utilPtr->m_localCenter = localCenter;
-
- col.m_shapeIndex = registerConvexHullShapeInternal(utilPtr, col);
- }
-
- if (col.m_shapeIndex >= 0)
- {
- b3Aabb aabb;
-
- b3Vector3 myAabbMin = b3MakeVector3(1e30f, 1e30f, 1e30f);
- b3Vector3 myAabbMax = b3MakeVector3(-1e30f, -1e30f, -1e30f);
-
- for (int i = 0; i < utilPtr->m_vertices.size(); i++)
- {
- myAabbMin.setMin(utilPtr->m_vertices[i]);
- myAabbMax.setMax(utilPtr->m_vertices[i]);
- }
- aabb.m_min[0] = myAabbMin[0];
- aabb.m_min[1] = myAabbMin[1];
- aabb.m_min[2] = myAabbMin[2];
- aabb.m_minIndices[3] = 0;
-
- aabb.m_max[0] = myAabbMax[0];
- aabb.m_max[1] = myAabbMax[1];
- aabb.m_max[2] = myAabbMax[2];
- aabb.m_signedMaxIndices[3] = 0;
-
- m_data->m_localShapeAABBCPU.push_back(aabb);
- }
-
- return collidableIndex;
-}
-
-int b3CpuNarrowPhase::allocateCollidable()
-{
- int curSize = m_data->m_collidablesCPU.size();
- if (curSize < m_data->m_config.m_maxConvexShapes)
- {
- m_data->m_collidablesCPU.expand();
- return curSize;
- }
- else
- {
- b3Error("allocateCollidable out-of-range %d\n", m_data->m_config.m_maxConvexShapes);
- }
- return -1;
-}
-
-int b3CpuNarrowPhase::registerConvexHullShape(const float* vertices, int strideInBytes, int numVertices, const float* scaling)
-{
- b3AlignedObjectArray<b3Vector3> verts;
-
- unsigned char* vts = (unsigned char*)vertices;
- for (int i = 0; i < numVertices; i++)
- {
- float* vertex = (float*)&vts[i * strideInBytes];
- verts.push_back(b3MakeVector3(vertex[0] * scaling[0], vertex[1] * scaling[1], vertex[2] * scaling[2]));
- }
-
- b3ConvexUtility* utilPtr = new b3ConvexUtility();
- bool merge = true;
- if (numVertices)
- {
- utilPtr->initializePolyhedralFeatures(&verts[0], verts.size(), merge);
- }
-
- int collidableIndex = registerConvexHullShape(utilPtr);
-
- delete utilPtr;
- return collidableIndex;
-}
-
-int b3CpuNarrowPhase::registerConvexHullShapeInternal(b3ConvexUtility* convexPtr, b3Collidable& col)
-{
- m_data->m_convexData.resize(m_data->m_numAcceleratedShapes + 1);
- m_data->m_convexPolyhedra.resize(m_data->m_numAcceleratedShapes + 1);
-
- b3ConvexPolyhedronData& convex = m_data->m_convexPolyhedra.at(m_data->m_convexPolyhedra.size() - 1);
- convex.mC = convexPtr->mC;
- convex.mE = convexPtr->mE;
- convex.m_extents = convexPtr->m_extents;
- convex.m_localCenter = convexPtr->m_localCenter;
- convex.m_radius = convexPtr->m_radius;
-
- convex.m_numUniqueEdges = convexPtr->m_uniqueEdges.size();
- int edgeOffset = m_data->m_uniqueEdges.size();
- convex.m_uniqueEdgesOffset = edgeOffset;
-
- m_data->m_uniqueEdges.resize(edgeOffset + convex.m_numUniqueEdges);
-
- //convex data here
- int i;
- for (i = 0; i < convexPtr->m_uniqueEdges.size(); i++)
- {
- m_data->m_uniqueEdges[edgeOffset + i] = convexPtr->m_uniqueEdges[i];
- }
-
- int faceOffset = m_data->m_convexFaces.size();
- convex.m_faceOffset = faceOffset;
- convex.m_numFaces = convexPtr->m_faces.size();
-
- m_data->m_convexFaces.resize(faceOffset + convex.m_numFaces);
-
- for (i = 0; i < convexPtr->m_faces.size(); i++)
- {
- m_data->m_convexFaces[convex.m_faceOffset + i].m_plane = b3MakeVector3(convexPtr->m_faces[i].m_plane[0],
- convexPtr->m_faces[i].m_plane[1],
- convexPtr->m_faces[i].m_plane[2],
- convexPtr->m_faces[i].m_plane[3]);
-
- int indexOffset = m_data->m_convexIndices.size();
- int numIndices = convexPtr->m_faces[i].m_indices.size();
- m_data->m_convexFaces[convex.m_faceOffset + i].m_numIndices = numIndices;
- m_data->m_convexFaces[convex.m_faceOffset + i].m_indexOffset = indexOffset;
- m_data->m_convexIndices.resize(indexOffset + numIndices);
- for (int p = 0; p < numIndices; p++)
- {
- m_data->m_convexIndices[indexOffset + p] = convexPtr->m_faces[i].m_indices[p];
- }
- }
-
- convex.m_numVertices = convexPtr->m_vertices.size();
- int vertexOffset = m_data->m_convexVertices.size();
- convex.m_vertexOffset = vertexOffset;
-
- m_data->m_convexVertices.resize(vertexOffset + convex.m_numVertices);
- for (int i = 0; i < convexPtr->m_vertices.size(); i++)
- {
- m_data->m_convexVertices[vertexOffset + i] = convexPtr->m_vertices[i];
- }
-
- (m_data->m_convexData)[m_data->m_numAcceleratedShapes] = convexPtr;
-
- return m_data->m_numAcceleratedShapes++;
-}
-
-const b3Aabb& b3CpuNarrowPhase::getLocalSpaceAabb(int collidableIndex) const
-{
- return m_data->m_localShapeAABBCPU[collidableIndex];
-}
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.h
deleted file mode 100644
index f02353c265..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.h
+++ /dev/null
@@ -1,92 +0,0 @@
-#ifndef B3_CPU_NARROWPHASE_H
-#define B3_CPU_NARROWPHASE_H
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-class b3CpuNarrowPhase
-{
-protected:
- struct b3CpuNarrowPhaseInternalData* m_data;
- int m_acceleratedCompanionShapeIndex;
- int m_planeBodyIndex;
- int m_static0Index;
-
- int registerConvexHullShapeInternal(class b3ConvexUtility* convexPtr, b3Collidable& col);
- int registerConcaveMeshShape(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, b3Collidable& col, const float* scaling);
-
-public:
- b3CpuNarrowPhase(const struct b3Config& config);
-
- virtual ~b3CpuNarrowPhase(void);
-
- int registerSphereShape(float radius);
- int registerPlaneShape(const b3Vector3& planeNormal, float planeConstant);
-
- int registerCompoundShape(b3AlignedObjectArray<b3GpuChildShape>* childShapes);
- int registerFace(const b3Vector3& faceNormal, float faceConstant);
-
- int registerConcaveMesh(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, const float* scaling);
-
- //do they need to be merged?
-
- int registerConvexHullShape(b3ConvexUtility* utilPtr);
- int registerConvexHullShape(const float* vertices, int strideInBytes, int numVertices, const float* scaling);
-
- //int registerRigidBody(int collidableIndex, float mass, const float* position, const float* orientation, const float* aabbMin, const float* aabbMax,bool writeToGpu);
- void setObjectTransform(const float* position, const float* orientation, int bodyIndex);
-
- void writeAllBodiesToGpu();
- void reset();
- void readbackAllBodiesToCpu();
- bool getObjectTransformFromCpu(float* position, float* orientation, int bodyIndex) const;
-
- void setObjectTransformCpu(float* position, float* orientation, int bodyIndex);
- void setObjectVelocityCpu(float* linVel, float* angVel, int bodyIndex);
-
- //virtual void computeContacts(cl_mem broadphasePairs, int numBroadphasePairs, cl_mem aabbsWorldSpace, int numObjects);
- virtual void computeContacts(b3AlignedObjectArray<b3Int4>& pairs, b3AlignedObjectArray<b3Aabb>& aabbsWorldSpace, b3AlignedObjectArray<b3RigidBodyData>& bodies);
-
- const struct b3RigidBodyData* getBodiesCpu() const;
- //struct b3RigidBodyData* getBodiesCpu();
-
- int getNumBodiesGpu() const;
-
- int getNumBodyInertiasGpu() const;
-
- const struct b3Collidable* getCollidablesCpu() const;
- int getNumCollidablesGpu() const;
-
- /*const struct b3Contact4* getContactsCPU() const;
-
-
- int getNumContactsGpu() const;
- */
-
- const b3AlignedObjectArray<b3Contact4Data>& getContacts() const;
-
- int getNumRigidBodies() const;
-
- int allocateCollidable();
-
- int getStatic0Index() const
- {
- return m_static0Index;
- }
- b3Collidable& getCollidableCpu(int collidableIndex);
- const b3Collidable& getCollidableCpu(int collidableIndex) const;
-
- const b3CpuNarrowPhaseInternalData* getInternalData() const
- {
- return m_data;
- }
-
- const struct b3Aabb& getLocalSpaceAabb(int collidableIndex) const;
-};
-
-#endif //B3_CPU_NARROWPHASE_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h
deleted file mode 100644
index b50c0eca4f..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h
+++ /dev/null
@@ -1,25 +0,0 @@
-
-#ifndef B3_RAYCAST_INFO_H
-#define B3_RAYCAST_INFO_H
-
-#include "Bullet3Common/b3Vector3.h"
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3RayInfo
-{
- b3Vector3 m_from;
- b3Vector3 m_to;
-};
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3RayHit
-{
- b3Scalar m_hitFraction;
- int m_hitBody;
- int m_hitResult1;
- int m_hitResult2;
- b3Vector3 m_hitPoint;
- b3Vector3 m_hitNormal;
-};
-
-#endif //B3_RAYCAST_INFO_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h
deleted file mode 100644
index be1be57f05..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/b3RigidBodyCL.h
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_RIGID_BODY_CL
-#define B3_RIGID_BODY_CL
-
-#include "Bullet3Common/b3Scalar.h"
-#include "Bullet3Common/b3Matrix3x3.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-inline float b3GetInvMass(const b3RigidBodyData& body)
-{
- return body.m_invMass;
-}
-
-#endif //B3_RIGID_BODY_CL
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h
deleted file mode 100644
index d6beb662b5..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h
+++ /dev/null
@@ -1,19 +0,0 @@
-
-#ifndef B3_BVH_SUBTREE_INFO_DATA_H
-#define B3_BVH_SUBTREE_INFO_DATA_H
-
-typedef struct b3BvhSubtreeInfoData b3BvhSubtreeInfoData_t;
-
-struct b3BvhSubtreeInfoData
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes, points to the root of the subtree
- int m_rootNodeIndex;
- //4 bytes
- int m_subtreeSize;
- int m_padding[3];
-};
-
-#endif //B3_BVH_SUBTREE_INFO_DATA_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhTraversal.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhTraversal.h
deleted file mode 100644
index 7c2507cc98..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3BvhTraversal.h
+++ /dev/null
@@ -1,123 +0,0 @@
-
-
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h"
-
-// work-in-progress
-void b3BvhTraversal(__global const b3Int4* pairs,
- __global const b3RigidBodyData* rigidBodies,
- __global const b3Collidable* collidables,
- __global b3Aabb* aabbs,
- __global b3Int4* concavePairsOut,
- __global volatile int* numConcavePairsOut,
- __global const b3BvhSubtreeInfo* subtreeHeadersRoot,
- __global const b3QuantizedBvhNode* quantizedNodesRoot,
- __global const b3BvhInfo* bvhInfos,
- int numPairs,
- int maxNumConcavePairsCapacity,
- int id)
-{
- int bodyIndexA = pairs[id].x;
- int bodyIndexB = pairs[id].y;
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass == 0) && (rigidBodies[bodyIndexB].m_invMass == 0))
- {
- return;
- }
-
- if (collidables[collidableIndexA].m_shapeType != SHAPE_CONCAVE_TRIMESH)
- return;
-
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
-
- if (shapeTypeB != SHAPE_CONVEX_HULL &&
- shapeTypeB != SHAPE_SPHERE &&
- shapeTypeB != SHAPE_COMPOUND_OF_CONVEX_HULLS)
- return;
-
- b3BvhInfo bvhInfo = bvhInfos[collidables[collidableIndexA].m_numChildShapes];
-
- b3Float4 bvhAabbMin = bvhInfo.m_aabbMin;
- b3Float4 bvhAabbMax = bvhInfo.m_aabbMax;
- b3Float4 bvhQuantization = bvhInfo.m_quantization;
- int numSubtreeHeaders = bvhInfo.m_numSubTrees;
- __global const b3BvhSubtreeInfoData* subtreeHeaders = &subtreeHeadersRoot[bvhInfo.m_subTreeOffset];
- __global const b3QuantizedBvhNodeData* quantizedNodes = &quantizedNodesRoot[bvhInfo.m_nodeOffset];
-
- unsigned short int quantizedQueryAabbMin[3];
- unsigned short int quantizedQueryAabbMax[3];
- b3QuantizeWithClamp(quantizedQueryAabbMin, aabbs[bodyIndexB].m_minVec, false, bvhAabbMin, bvhAabbMax, bvhQuantization);
- b3QuantizeWithClamp(quantizedQueryAabbMax, aabbs[bodyIndexB].m_maxVec, true, bvhAabbMin, bvhAabbMax, bvhQuantization);
-
- for (int i = 0; i < numSubtreeHeaders; i++)
- {
- b3BvhSubtreeInfoData subtree = subtreeHeaders[i];
-
- int overlap = b3TestQuantizedAabbAgainstQuantizedAabbSlow(quantizedQueryAabbMin, quantizedQueryAabbMax, subtree.m_quantizedAabbMin, subtree.m_quantizedAabbMax);
- if (overlap != 0)
- {
- int startNodeIndex = subtree.m_rootNodeIndex;
- int endNodeIndex = subtree.m_rootNodeIndex + subtree.m_subtreeSize;
- int curIndex = startNodeIndex;
- int escapeIndex;
- int isLeafNode;
- int aabbOverlap;
- while (curIndex < endNodeIndex)
- {
- b3QuantizedBvhNodeData rootNode = quantizedNodes[curIndex];
- aabbOverlap = b3TestQuantizedAabbAgainstQuantizedAabbSlow(quantizedQueryAabbMin, quantizedQueryAabbMax, rootNode.m_quantizedAabbMin, rootNode.m_quantizedAabbMax);
- isLeafNode = b3IsLeaf(&rootNode);
- if (aabbOverlap)
- {
- if (isLeafNode)
- {
- int triangleIndex = b3GetTriangleIndex(&rootNode);
- if (shapeTypeB == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- int pairIdx = b3AtomicAdd(numConcavePairsOut, numChildrenB);
- for (int b = 0; b < numChildrenB; b++)
- {
- if ((pairIdx + b) < maxNumConcavePairsCapacity)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex + b;
- b3Int4 newPair = b3MakeInt4(bodyIndexA, bodyIndexB, triangleIndex, childShapeIndexB);
- concavePairsOut[pairIdx + b] = newPair;
- }
- }
- }
- else
- {
- int pairIdx = b3AtomicInc(numConcavePairsOut);
- if (pairIdx < maxNumConcavePairsCapacity)
- {
- b3Int4 newPair = b3MakeInt4(bodyIndexA, bodyIndexB, triangleIndex, 0);
- concavePairsOut[pairIdx] = newPair;
- }
- }
- }
- curIndex++;
- }
- else
- {
- if (isLeafNode)
- {
- curIndex++;
- }
- else
- {
- escapeIndex = b3GetEscapeIndex(&rootNode);
- curIndex += escapeIndex;
- }
- }
- }
- }
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ClipFaces.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ClipFaces.h
deleted file mode 100644
index 0d9b13f1d6..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ClipFaces.h
+++ /dev/null
@@ -1,171 +0,0 @@
-#ifndef B3_CLIP_FACES_H
-#define B3_CLIP_FACES_H
-
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-
-inline b3Float4 b3Lerp3(b3Float4ConstArg a, b3Float4ConstArg b, float t)
-{
- return b3MakeFloat4(a.x + (b.x - a.x) * t,
- a.y + (b.y - a.y) * t,
- a.z + (b.z - a.z) * t,
- 0.f);
-}
-
-// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut
-int clipFaceGlobal(__global const b3Float4* pVtxIn, int numVertsIn, b3Float4ConstArg planeNormalWS, float planeEqWS, __global b3Float4* ppVtxOut)
-{
- int ve;
- float ds, de;
- int numVertsOut = 0;
- //double-check next test
- // if (numVertsIn < 2)
- // return 0;
-
- b3Float4 firstVertex = pVtxIn[numVertsIn - 1];
- b3Float4 endVertex = pVtxIn[0];
-
- ds = b3Dot(planeNormalWS, firstVertex) + planeEqWS;
-
- for (ve = 0; ve < numVertsIn; ve++)
- {
- endVertex = pVtxIn[ve];
- de = b3Dot(planeNormalWS, endVertex) + planeEqWS;
- if (ds < 0)
- {
- if (de < 0)
- {
- // Start < 0, end < 0, so output endVertex
- ppVtxOut[numVertsOut++] = endVertex;
- }
- else
- {
- // Start < 0, end >= 0, so output intersection
- ppVtxOut[numVertsOut++] = b3Lerp3(firstVertex, endVertex, (ds * 1.f / (ds - de)));
- }
- }
- else
- {
- if (de < 0)
- {
- // Start >= 0, end < 0 so output intersection and end
- ppVtxOut[numVertsOut++] = b3Lerp3(firstVertex, endVertex, (ds * 1.f / (ds - de)));
- ppVtxOut[numVertsOut++] = endVertex;
- }
- }
- firstVertex = endVertex;
- ds = de;
- }
- return numVertsOut;
-}
-
-__kernel void clipFacesAndFindContactsKernel(__global const b3Float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global b3Int4* clippingFacesOut,
- __global b3Float4* worldVertsA1,
- __global b3Float4* worldNormalsA1,
- __global b3Float4* worldVertsB1,
- __global b3Float4* worldVertsB2,
- int vertexFaceCapacity,
- int pairIndex)
-{
- // int i = get_global_id(0);
- //int pairIndex = i;
- int i = pairIndex;
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- // if (i<numPairs)
- {
- if (hasSeparatingAxis[i])
- {
- // int bodyIndexA = pairs[i].x;
- // int bodyIndexB = pairs[i].y;
-
- int numLocalContactsOut = 0;
-
- int capacityWorldVertsB2 = vertexFaceCapacity;
-
- __global b3Float4* pVtxIn = &worldVertsB1[pairIndex * capacityWorldVertsB2];
- __global b3Float4* pVtxOut = &worldVertsB2[pairIndex * capacityWorldVertsB2];
-
- {
- __global b3Int4* clippingFaces = clippingFacesOut;
-
- int closestFaceA = clippingFaces[pairIndex].x;
- // int closestFaceB = clippingFaces[pairIndex].y;
- int numVertsInA = clippingFaces[pairIndex].z;
- int numVertsInB = clippingFaces[pairIndex].w;
-
- int numVertsOut = 0;
-
- if (closestFaceA >= 0)
- {
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
-
- for (int e0 = 0; e0 < numVertsInA; e0++)
- {
- const b3Float4 aw = worldVertsA1[pairIndex * capacityWorldVertsB2 + e0];
- const b3Float4 bw = worldVertsA1[pairIndex * capacityWorldVertsB2 + ((e0 + 1) % numVertsInA)];
- const b3Float4 WorldEdge0 = aw - bw;
- b3Float4 worldPlaneAnormal1 = worldNormalsA1[pairIndex];
- b3Float4 planeNormalWS1 = -b3Cross(WorldEdge0, worldPlaneAnormal1);
- b3Float4 worldA1 = aw;
- float planeEqWS1 = -b3Dot(worldA1, planeNormalWS1);
- b3Float4 planeNormalWS = planeNormalWS1;
- float planeEqWS = planeEqWS1;
- numVertsOut = clipFaceGlobal(pVtxIn, numVertsInB, planeNormalWS, planeEqWS, pVtxOut);
- __global b3Float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsInB = numVertsOut;
- numVertsOut = 0;
- }
-
- b3Float4 planeNormalWS = worldNormalsA1[pairIndex];
- float planeEqWS = -b3Dot(planeNormalWS, worldVertsA1[pairIndex * capacityWorldVertsB2]);
-
- for (int i = 0; i < numVertsInB; i++)
- {
- float depth = b3Dot(planeNormalWS, pVtxIn[i]) + planeEqWS;
- if (depth <= minDist)
- {
- depth = minDist;
- }
- /*
- static float maxDepth = 0.f;
- if (depth < maxDepth)
- {
- maxDepth = depth;
- if (maxDepth < -10)
- {
- printf("error at framecount %d?\n",myframecount);
- }
- printf("maxDepth = %f\n", maxDepth);
-
- }
-*/
- if (depth <= maxDist)
- {
- b3Float4 pointInWorld = pVtxIn[i];
- pVtxOut[numLocalContactsOut++] = b3MakeFloat4(pointInWorld.x, pointInWorld.y, pointInWorld.z, depth);
- }
- }
- }
- clippingFaces[pairIndex].w = numLocalContactsOut;
- }
-
- for (int i = 0; i < numLocalContactsOut; i++)
- pVtxIn[i] = pVtxOut[i];
-
- } // if (hasSeparatingAxis[i])
- } // if (i<numPairs)
-}
-
-#endif //B3_CLIP_FACES_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h
deleted file mode 100644
index 9a8c668af2..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h
+++ /dev/null
@@ -1,69 +0,0 @@
-
-#ifndef B3_COLLIDABLE_H
-#define B3_COLLIDABLE_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-#include "Bullet3Common/shared/b3Quat.h"
-
-enum b3ShapeTypes
-{
- SHAPE_HEIGHT_FIELD = 1,
-
- SHAPE_CONVEX_HULL = 3,
- SHAPE_PLANE = 4,
- SHAPE_CONCAVE_TRIMESH = 5,
- SHAPE_COMPOUND_OF_CONVEX_HULLS = 6,
- SHAPE_SPHERE = 7,
- MAX_NUM_SHAPE_TYPES,
-};
-
-typedef struct b3Collidable b3Collidable_t;
-
-struct b3Collidable
-{
- union {
- int m_numChildShapes;
- int m_bvhIndex;
- };
- union {
- float m_radius;
- int m_compoundBvhIndex;
- };
-
- int m_shapeType;
- union {
- int m_shapeIndex;
- float m_height;
- };
-};
-
-typedef struct b3GpuChildShape b3GpuChildShape_t;
-struct b3GpuChildShape
-{
- b3Float4 m_childPosition;
- b3Quat m_childOrientation;
- union {
- int m_shapeIndex; //used for SHAPE_COMPOUND_OF_CONVEX_HULLS
- int m_capsuleAxis;
- };
- union {
- float m_radius; //used for childshape of SHAPE_COMPOUND_OF_SPHERES or SHAPE_COMPOUND_OF_CAPSULES
- int m_numChildShapes; //used for compound shape
- };
- union {
- float m_height; //used for childshape of SHAPE_COMPOUND_OF_CAPSULES
- int m_collidableShapeIndex;
- };
- int m_shapeType;
-};
-
-struct b3CompoundOverlappingPair
-{
- int m_bodyIndexA;
- int m_bodyIndexB;
- // int m_pairType;
- int m_childShapeIndexA;
- int m_childShapeIndexB;
-};
-
-#endif //B3_COLLIDABLE_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h
deleted file mode 100644
index d5f6daa993..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h
+++ /dev/null
@@ -1,36 +0,0 @@
-#ifndef B3_CONTACT4DATA_H
-#define B3_CONTACT4DATA_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-
-typedef struct b3Contact4Data b3Contact4Data_t;
-
-struct b3Contact4Data
-{
- b3Float4 m_worldPosB[4];
- // b3Float4 m_localPosA[4];
- // b3Float4 m_localPosB[4];
- b3Float4 m_worldNormalOnB; // w: m_nPoints
- unsigned short m_restituitionCoeffCmp;
- unsigned short m_frictionCoeffCmp;
- int m_batchIdx;
- int m_bodyAPtrAndSignBit; //x:m_bodyAPtr, y:m_bodyBPtr
- int m_bodyBPtrAndSignBit;
-
- int m_childIndexA;
- int m_childIndexB;
- int m_unused1;
- int m_unused2;
-};
-
-inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)
-{
- return (int)contact->m_worldNormalOnB.w;
-};
-
-inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)
-{
- contact->m_worldNormalOnB.w = (float)numPoints;
-};
-
-#endif //B3_CONTACT4DATA_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactConvexConvexSAT.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactConvexConvexSAT.h
deleted file mode 100644
index ca68f4bc4e..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactConvexConvexSAT.h
+++ /dev/null
@@ -1,486 +0,0 @@
-
-#ifndef B3_CONTACT_CONVEX_CONVEX_SAT_H
-#define B3_CONTACT_CONVEX_CONVEX_SAT_H
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3FindSeparatingAxis.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ReduceContacts.h"
-
-#define B3_MAX_VERTS 1024
-
-inline b3Float4 b3Lerp3(const b3Float4& a, const b3Float4& b, float t)
-{
- return b3MakeVector3(a.x + (b.x - a.x) * t,
- a.y + (b.y - a.y) * t,
- a.z + (b.z - a.z) * t,
- 0.f);
-}
-
-// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut
-inline int b3ClipFace(const b3Float4* pVtxIn, int numVertsIn, b3Float4& planeNormalWS, float planeEqWS, b3Float4* ppVtxOut)
-{
- int ve;
- float ds, de;
- int numVertsOut = 0;
- if (numVertsIn < 2)
- return 0;
-
- b3Float4 firstVertex = pVtxIn[numVertsIn - 1];
- b3Float4 endVertex = pVtxIn[0];
-
- ds = b3Dot3F4(planeNormalWS, firstVertex) + planeEqWS;
-
- for (ve = 0; ve < numVertsIn; ve++)
- {
- endVertex = pVtxIn[ve];
-
- de = b3Dot3F4(planeNormalWS, endVertex) + planeEqWS;
-
- if (ds < 0)
- {
- if (de < 0)
- {
- // Start < 0, end < 0, so output endVertex
- ppVtxOut[numVertsOut++] = endVertex;
- }
- else
- {
- // Start < 0, end >= 0, so output intersection
- ppVtxOut[numVertsOut++] = b3Lerp3(firstVertex, endVertex, (ds * 1.f / (ds - de)));
- }
- }
- else
- {
- if (de < 0)
- {
- // Start >= 0, end < 0 so output intersection and end
- ppVtxOut[numVertsOut++] = b3Lerp3(firstVertex, endVertex, (ds * 1.f / (ds - de)));
- ppVtxOut[numVertsOut++] = endVertex;
- }
- }
- firstVertex = endVertex;
- ds = de;
- }
- return numVertsOut;
-}
-
-inline int b3ClipFaceAgainstHull(const b3Float4& separatingNormal, const b3ConvexPolyhedronData* hullA,
- const b3Float4& posA, const b3Quaternion& ornA, b3Float4* worldVertsB1, int numWorldVertsB1,
- b3Float4* worldVertsB2, int capacityWorldVertsB2,
- const float minDist, float maxDist,
- const b3AlignedObjectArray<b3Float4>& verticesA, const b3AlignedObjectArray<b3GpuFace>& facesA, const b3AlignedObjectArray<int>& indicesA,
- //const b3Float4* verticesB, const b3GpuFace* facesB, const int* indicesB,
- b3Float4* contactsOut,
- int contactCapacity)
-{
- int numContactsOut = 0;
-
- b3Float4* pVtxIn = worldVertsB1;
- b3Float4* pVtxOut = worldVertsB2;
-
- int numVertsIn = numWorldVertsB1;
- int numVertsOut = 0;
-
- int closestFaceA = -1;
- {
- float dmin = FLT_MAX;
- for (int face = 0; face < hullA->m_numFaces; face++)
- {
- const b3Float4 Normal = b3MakeVector3(
- facesA[hullA->m_faceOffset + face].m_plane.x,
- facesA[hullA->m_faceOffset + face].m_plane.y,
- facesA[hullA->m_faceOffset + face].m_plane.z, 0.f);
- const b3Float4 faceANormalWS = b3QuatRotate(ornA, Normal);
-
- float d = b3Dot3F4(faceANormalWS, separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- }
- }
- }
- if (closestFaceA < 0)
- return numContactsOut;
-
- b3GpuFace polyA = facesA[hullA->m_faceOffset + closestFaceA];
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
- //int numContacts = numWorldVertsB1;
- int numVerticesA = polyA.m_numIndices;
- for (int e0 = 0; e0 < numVerticesA; e0++)
- {
- const b3Float4 a = verticesA[hullA->m_vertexOffset + indicesA[polyA.m_indexOffset + e0]];
- const b3Float4 b = verticesA[hullA->m_vertexOffset + indicesA[polyA.m_indexOffset + ((e0 + 1) % numVerticesA)]];
- const b3Float4 edge0 = a - b;
- const b3Float4 WorldEdge0 = b3QuatRotate(ornA, edge0);
- b3Float4 planeNormalA = b3MakeFloat4(polyA.m_plane.x, polyA.m_plane.y, polyA.m_plane.z, 0.f);
- b3Float4 worldPlaneAnormal1 = b3QuatRotate(ornA, planeNormalA);
-
- b3Float4 planeNormalWS1 = -b3Cross3(WorldEdge0, worldPlaneAnormal1);
- b3Float4 worldA1 = b3TransformPoint(a, posA, ornA);
- float planeEqWS1 = -b3Dot3F4(worldA1, planeNormalWS1);
-
- b3Float4 planeNormalWS = planeNormalWS1;
- float planeEqWS = planeEqWS1;
-
- //clip face
- //clipFace(*pVtxIn, *pVtxOut,planeNormalWS,planeEqWS);
- numVertsOut = b3ClipFace(pVtxIn, numVertsIn, planeNormalWS, planeEqWS, pVtxOut);
-
- //btSwap(pVtxIn,pVtxOut);
- b3Float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsIn = numVertsOut;
- numVertsOut = 0;
- }
-
- // only keep points that are behind the witness face
- {
- b3Float4 localPlaneNormal = b3MakeFloat4(polyA.m_plane.x, polyA.m_plane.y, polyA.m_plane.z, 0.f);
- float localPlaneEq = polyA.m_plane.w;
- b3Float4 planeNormalWS = b3QuatRotate(ornA, localPlaneNormal);
- float planeEqWS = localPlaneEq - b3Dot3F4(planeNormalWS, posA);
- for (int i = 0; i < numVertsIn; i++)
- {
- float depth = b3Dot3F4(planeNormalWS, pVtxIn[i]) + planeEqWS;
- if (depth <= minDist)
- {
- depth = minDist;
- }
- if (numContactsOut < contactCapacity)
- {
- if (depth <= maxDist)
- {
- b3Float4 pointInWorld = pVtxIn[i];
- //resultOut.addContactPoint(separatingNormal,point,depth);
- contactsOut[numContactsOut++] = b3MakeVector3(pointInWorld.x, pointInWorld.y, pointInWorld.z, depth);
- //printf("depth=%f\n",depth);
- }
- }
- else
- {
- b3Error("exceeding contact capacity (%d,%df)\n", numContactsOut, contactCapacity);
- }
- }
- }
-
- return numContactsOut;
-}
-
-inline int b3ClipHullAgainstHull(const b3Float4& separatingNormal,
- const b3ConvexPolyhedronData& hullA, const b3ConvexPolyhedronData& hullB,
- const b3Float4& posA, const b3Quaternion& ornA, const b3Float4& posB, const b3Quaternion& ornB,
- b3Float4* worldVertsB1, b3Float4* worldVertsB2, int capacityWorldVerts,
- const float minDist, float maxDist,
- const b3AlignedObjectArray<b3Float4>& verticesA, const b3AlignedObjectArray<b3GpuFace>& facesA, const b3AlignedObjectArray<int>& indicesA,
- const b3AlignedObjectArray<b3Float4>& verticesB, const b3AlignedObjectArray<b3GpuFace>& facesB, const b3AlignedObjectArray<int>& indicesB,
-
- b3Float4* contactsOut,
- int contactCapacity)
-{
- int numContactsOut = 0;
- int numWorldVertsB1 = 0;
-
- B3_PROFILE("clipHullAgainstHull");
-
- //float curMaxDist=maxDist;
- int closestFaceB = -1;
- float dmax = -FLT_MAX;
-
- {
- //B3_PROFILE("closestFaceB");
- if (hullB.m_numFaces != 1)
- {
- //printf("wtf\n");
- }
- static bool once = true;
- //printf("separatingNormal=%f,%f,%f\n",separatingNormal.x,separatingNormal.y,separatingNormal.z);
-
- for (int face = 0; face < hullB.m_numFaces; face++)
- {
-#ifdef BT_DEBUG_SAT_FACE
- if (once)
- printf("face %d\n", face);
- const b3GpuFace* faceB = &facesB[hullB.m_faceOffset + face];
- if (once)
- {
- for (int i = 0; i < faceB->m_numIndices; i++)
- {
- b3Float4 vert = verticesB[hullB.m_vertexOffset + indicesB[faceB->m_indexOffset + i]];
- printf("vert[%d] = %f,%f,%f\n", i, vert.x, vert.y, vert.z);
- }
- }
-#endif //BT_DEBUG_SAT_FACE \
- //if (facesB[hullB.m_faceOffset+face].m_numIndices>2)
- {
- const b3Float4 Normal = b3MakeVector3(facesB[hullB.m_faceOffset + face].m_plane.x,
- facesB[hullB.m_faceOffset + face].m_plane.y, facesB[hullB.m_faceOffset + face].m_plane.z, 0.f);
- const b3Float4 WorldNormal = b3QuatRotate(ornB, Normal);
-#ifdef BT_DEBUG_SAT_FACE
- if (once)
- printf("faceNormal = %f,%f,%f\n", Normal.x, Normal.y, Normal.z);
-#endif
- float d = b3Dot3F4(WorldNormal, separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
- once = false;
- }
-
- b3Assert(closestFaceB >= 0);
- {
- //B3_PROFILE("worldVertsB1");
- const b3GpuFace& polyB = facesB[hullB.m_faceOffset + closestFaceB];
- const int numVertices = polyB.m_numIndices;
- for (int e0 = 0; e0 < numVertices; e0++)
- {
- const b3Float4& b = verticesB[hullB.m_vertexOffset + indicesB[polyB.m_indexOffset + e0]];
- worldVertsB1[numWorldVertsB1++] = b3TransformPoint(b, posB, ornB);
- }
- }
-
- if (closestFaceB >= 0)
- {
- //B3_PROFILE("clipFaceAgainstHull");
- numContactsOut = b3ClipFaceAgainstHull((b3Float4&)separatingNormal, &hullA,
- posA, ornA,
- worldVertsB1, numWorldVertsB1, worldVertsB2, capacityWorldVerts, minDist, maxDist,
- verticesA, facesA, indicesA,
- contactsOut, contactCapacity);
- }
-
- return numContactsOut;
-}
-
-inline int b3ClipHullHullSingle(
- int bodyIndexA, int bodyIndexB,
- const b3Float4& posA,
- const b3Quaternion& ornA,
- const b3Float4& posB,
- const b3Quaternion& ornB,
-
- int collidableIndexA, int collidableIndexB,
-
- const b3AlignedObjectArray<b3RigidBodyData>* bodyBuf,
- b3AlignedObjectArray<b3Contact4Data>* globalContactOut,
- int& nContacts,
-
- const b3AlignedObjectArray<b3ConvexPolyhedronData>& hostConvexDataA,
- const b3AlignedObjectArray<b3ConvexPolyhedronData>& hostConvexDataB,
-
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesA,
- const b3AlignedObjectArray<b3GpuFace>& facesA,
- const b3AlignedObjectArray<int>& indicesA,
-
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesB,
- const b3AlignedObjectArray<b3GpuFace>& facesB,
- const b3AlignedObjectArray<int>& indicesB,
-
- const b3AlignedObjectArray<b3Collidable>& hostCollidablesA,
- const b3AlignedObjectArray<b3Collidable>& hostCollidablesB,
- const b3Vector3& sepNormalWorldSpace,
- int maxContactCapacity)
-{
- int contactIndex = -1;
- b3ConvexPolyhedronData hullA, hullB;
-
- b3Collidable colA = hostCollidablesA[collidableIndexA];
- hullA = hostConvexDataA[colA.m_shapeIndex];
- //printf("numvertsA = %d\n",hullA.m_numVertices);
-
- b3Collidable colB = hostCollidablesB[collidableIndexB];
- hullB = hostConvexDataB[colB.m_shapeIndex];
- //printf("numvertsB = %d\n",hullB.m_numVertices);
-
- b3Float4 contactsOut[B3_MAX_VERTS];
- int localContactCapacity = B3_MAX_VERTS;
-
-#ifdef _WIN32
- b3Assert(_finite(bodyBuf->at(bodyIndexA).m_pos.x));
- b3Assert(_finite(bodyBuf->at(bodyIndexB).m_pos.x));
-#endif
-
- {
- b3Float4 worldVertsB1[B3_MAX_VERTS];
- b3Float4 worldVertsB2[B3_MAX_VERTS];
- int capacityWorldVerts = B3_MAX_VERTS;
-
- b3Float4 hostNormal = b3MakeFloat4(sepNormalWorldSpace.x, sepNormalWorldSpace.y, sepNormalWorldSpace.z, 0.f);
- int shapeA = hostCollidablesA[collidableIndexA].m_shapeIndex;
- int shapeB = hostCollidablesB[collidableIndexB].m_shapeIndex;
-
- b3Scalar minDist = -1;
- b3Scalar maxDist = 0.;
-
- b3Transform trA, trB;
- {
- //B3_PROFILE("b3TransformPoint computation");
- //trA.setIdentity();
- trA.setOrigin(b3MakeVector3(posA.x, posA.y, posA.z));
- trA.setRotation(b3Quaternion(ornA.x, ornA.y, ornA.z, ornA.w));
-
- //trB.setIdentity();
- trB.setOrigin(b3MakeVector3(posB.x, posB.y, posB.z));
- trB.setRotation(b3Quaternion(ornB.x, ornB.y, ornB.z, ornB.w));
- }
-
- b3Quaternion trAorn = trA.getRotation();
- b3Quaternion trBorn = trB.getRotation();
-
- int numContactsOut = b3ClipHullAgainstHull(hostNormal,
- hostConvexDataA.at(shapeA),
- hostConvexDataB.at(shapeB),
- (b3Float4&)trA.getOrigin(), (b3Quaternion&)trAorn,
- (b3Float4&)trB.getOrigin(), (b3Quaternion&)trBorn,
- worldVertsB1, worldVertsB2, capacityWorldVerts,
- minDist, maxDist,
- verticesA, facesA, indicesA,
- verticesB, facesB, indicesB,
-
- contactsOut, localContactCapacity);
-
- if (numContactsOut > 0)
- {
- B3_PROFILE("overlap");
-
- b3Float4 normalOnSurfaceB = (b3Float4&)hostNormal;
- // b3Float4 centerOut;
-
- b3Int4 contactIdx;
- contactIdx.x = 0;
- contactIdx.y = 1;
- contactIdx.z = 2;
- contactIdx.w = 3;
-
- int numPoints = 0;
-
- {
- B3_PROFILE("extractManifold");
- numPoints = b3ReduceContacts(contactsOut, numContactsOut, normalOnSurfaceB, &contactIdx);
- }
-
- b3Assert(numPoints);
-
- if (nContacts < maxContactCapacity)
- {
- contactIndex = nContacts;
- globalContactOut->expand();
- b3Contact4Data& contact = globalContactOut->at(nContacts);
- contact.m_batchIdx = 0; //i;
- contact.m_bodyAPtrAndSignBit = (bodyBuf->at(bodyIndexA).m_invMass == 0) ? -bodyIndexA : bodyIndexA;
- contact.m_bodyBPtrAndSignBit = (bodyBuf->at(bodyIndexB).m_invMass == 0) ? -bodyIndexB : bodyIndexB;
-
- contact.m_frictionCoeffCmp = 45874;
- contact.m_restituitionCoeffCmp = 0;
-
- // float distance = 0.f;
- for (int p = 0; p < numPoints; p++)
- {
- contact.m_worldPosB[p] = contactsOut[contactIdx.s[p]]; //check if it is actually on B
- contact.m_worldNormalOnB = normalOnSurfaceB;
- }
- //printf("bodyIndexA %d,bodyIndexB %d,normal=%f,%f,%f numPoints %d\n",bodyIndexA,bodyIndexB,normalOnSurfaceB.x,normalOnSurfaceB.y,normalOnSurfaceB.z,numPoints);
- contact.m_worldNormalOnB.w = (b3Scalar)numPoints;
- nContacts++;
- }
- else
- {
- b3Error("Error: exceeding contact capacity (%d/%d)\n", nContacts, maxContactCapacity);
- }
- }
- }
- return contactIndex;
-}
-
-inline int b3ContactConvexConvexSAT(
- int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3AlignedObjectArray<b3RigidBodyData>& rigidBodies,
- const b3AlignedObjectArray<b3Collidable>& collidables,
- const b3AlignedObjectArray<b3ConvexPolyhedronData>& convexShapes,
- const b3AlignedObjectArray<b3Float4>& convexVertices,
- const b3AlignedObjectArray<b3Float4>& uniqueEdges,
- const b3AlignedObjectArray<int>& convexIndices,
- const b3AlignedObjectArray<b3GpuFace>& faces,
- b3AlignedObjectArray<b3Contact4Data>& globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity)
-{
- int contactIndex = -1;
-
- b3Float4 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat;
- b3Float4 posB = rigidBodies[bodyIndexB].m_pos;
- b3Quaternion ornB = rigidBodies[bodyIndexB].m_quat;
-
- b3ConvexPolyhedronData hullA, hullB;
-
- b3Float4 sepNormalWorldSpace;
-
- b3Collidable colA = collidables[collidableIndexA];
- hullA = convexShapes[colA.m_shapeIndex];
- //printf("numvertsA = %d\n",hullA.m_numVertices);
-
- b3Collidable colB = collidables[collidableIndexB];
- hullB = convexShapes[colB.m_shapeIndex];
- //printf("numvertsB = %d\n",hullB.m_numVertices);
-
-#ifdef _WIN32
- b3Assert(_finite(rigidBodies[bodyIndexA].m_pos.x));
- b3Assert(_finite(rigidBodies[bodyIndexB].m_pos.x));
-#endif
-
- bool foundSepAxis = b3FindSeparatingAxis(hullA, hullB,
- posA,
- ornA,
- posB,
- ornB,
-
- convexVertices, uniqueEdges, faces, convexIndices,
- convexVertices, uniqueEdges, faces, convexIndices,
-
- sepNormalWorldSpace);
-
- if (foundSepAxis)
- {
- contactIndex = b3ClipHullHullSingle(
- bodyIndexA, bodyIndexB,
- posA, ornA,
- posB, ornB,
- collidableIndexA, collidableIndexB,
- &rigidBodies,
- &globalContactsOut,
- nGlobalContactsOut,
-
- convexShapes,
- convexShapes,
-
- convexVertices,
- uniqueEdges,
- faces,
- convexIndices,
-
- convexVertices,
- uniqueEdges,
- faces,
- convexIndices,
-
- collidables,
- collidables,
- sepNormalWorldSpace,
- maxContactCapacity);
- }
-
- return contactIndex;
-}
-
-#endif //B3_CONTACT_CONVEX_CONVEX_SAT_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactSphereSphere.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactSphereSphere.h
deleted file mode 100644
index acf7c1b180..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ContactSphereSphere.h
+++ /dev/null
@@ -1,153 +0,0 @@
-
-#ifndef B3_CONTACT_SPHERE_SPHERE_H
-#define B3_CONTACT_SPHERE_SPHERE_H
-
-void computeContactSphereConvex(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3RigidBodyData* rigidBodies,
- const b3Collidable* collidables,
- const b3ConvexPolyhedronData* convexShapes,
- const b3Vector3* convexVertices,
- const int* convexIndices,
- const b3GpuFace* faces,
- b3Contact4* globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity)
-{
- float radius = collidables[collidableIndexA].m_radius;
- float4 spherePos1 = rigidBodies[bodyIndexA].m_pos;
- b3Quaternion sphereOrn = rigidBodies[bodyIndexA].m_quat;
-
- float4 pos = rigidBodies[bodyIndexB].m_pos;
-
- b3Quaternion quat = rigidBodies[bodyIndexB].m_quat;
-
- b3Transform tr;
- tr.setIdentity();
- tr.setOrigin(pos);
- tr.setRotation(quat);
- b3Transform trInv = tr.inverse();
-
- float4 spherePos = trInv(spherePos1);
-
- int collidableIndex = rigidBodies[bodyIndexB].m_collidableIdx;
- int shapeIndex = collidables[collidableIndex].m_shapeIndex;
- int numFaces = convexShapes[shapeIndex].m_numFaces;
- float4 closestPnt = b3MakeVector3(0, 0, 0, 0);
- float4 hitNormalWorld = b3MakeVector3(0, 0, 0, 0);
- float minDist = -1000000.f; // TODO: What is the largest/smallest float?
- bool bCollide = true;
- int region = -1;
- float4 localHitNormal;
- for (int f = 0; f < numFaces; f++)
- {
- b3GpuFace face = faces[convexShapes[shapeIndex].m_faceOffset + f];
- float4 planeEqn;
- float4 localPlaneNormal = b3MakeVector3(face.m_plane.x, face.m_plane.y, face.m_plane.z, 0.f);
- float4 n1 = localPlaneNormal; //quatRotate(quat,localPlaneNormal);
- planeEqn = n1;
- planeEqn[3] = face.m_plane.w;
-
- float4 pntReturn;
- float dist = signedDistanceFromPointToPlane(spherePos, planeEqn, &pntReturn);
-
- if (dist > radius)
- {
- bCollide = false;
- break;
- }
-
- if (dist > 0)
- {
- //might hit an edge or vertex
- b3Vector3 out;
-
- bool isInPoly = IsPointInPolygon(spherePos,
- &face,
- &convexVertices[convexShapes[shapeIndex].m_vertexOffset],
- convexIndices,
- &out);
- if (isInPoly)
- {
- if (dist > minDist)
- {
- minDist = dist;
- closestPnt = pntReturn;
- localHitNormal = planeEqn;
- region = 1;
- }
- }
- else
- {
- b3Vector3 tmp = spherePos - out;
- b3Scalar l2 = tmp.length2();
- if (l2 < radius * radius)
- {
- dist = b3Sqrt(l2);
- if (dist > minDist)
- {
- minDist = dist;
- closestPnt = out;
- localHitNormal = tmp / dist;
- region = 2;
- }
- }
- else
- {
- bCollide = false;
- break;
- }
- }
- }
- else
- {
- if (dist > minDist)
- {
- minDist = dist;
- closestPnt = pntReturn;
- localHitNormal = planeEqn;
- region = 3;
- }
- }
- }
- static int numChecks = 0;
- numChecks++;
-
- if (bCollide && minDist > -10000)
- {
- float4 normalOnSurfaceB1 = tr.getBasis() * localHitNormal; //-hitNormalWorld;
- float4 pOnB1 = tr(closestPnt);
- //printf("dist ,%f,",minDist);
- float actualDepth = minDist - radius;
- if (actualDepth < 0)
- {
- //printf("actualDepth = ,%f,", actualDepth);
- //printf("normalOnSurfaceB1 = ,%f,%f,%f,", normalOnSurfaceB1.x,normalOnSurfaceB1.y,normalOnSurfaceB1.z);
- //printf("region=,%d,\n", region);
- pOnB1[3] = actualDepth;
-
- int dstIdx;
- // dstIdx = nGlobalContactsOut++;//AppendInc( nGlobalContactsOut, dstIdx );
-
- if (nGlobalContactsOut < maxContactCapacity)
- {
- dstIdx = nGlobalContactsOut;
- nGlobalContactsOut++;
-
- b3Contact4* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = normalOnSurfaceB1;
- c->setFrictionCoeff(0.7);
- c->setRestituitionCoeff(0.f);
-
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass == 0 ? -bodyIndexA : bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass == 0 ? -bodyIndexB : bodyIndexB;
- c->m_worldPosB[0] = pOnB1;
- int numPoints = 1;
- c->m_worldNormalOnB.w = (b3Scalar)numPoints;
- } //if (dstIdx < numPairs)
- }
- } //if (hasCollision)
-}
-#endif //B3_CONTACT_SPHERE_SPHERE_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h
deleted file mode 100644
index d5a73bd4f5..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h
+++ /dev/null
@@ -1,38 +0,0 @@
-
-#ifndef B3_CONVEX_POLYHEDRON_DATA_H
-#define B3_CONVEX_POLYHEDRON_DATA_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-#include "Bullet3Common/shared/b3Quat.h"
-
-typedef struct b3GpuFace b3GpuFace_t;
-struct b3GpuFace
-{
- b3Float4 m_plane;
- int m_indexOffset;
- int m_numIndices;
- int m_unusedPadding1;
- int m_unusedPadding2;
-};
-
-typedef struct b3ConvexPolyhedronData b3ConvexPolyhedronData_t;
-
-struct b3ConvexPolyhedronData
-{
- b3Float4 m_localCenter;
- b3Float4 m_extents;
- b3Float4 mC;
- b3Float4 mE;
-
- float m_radius;
- int m_faceOffset;
- int m_numFaces;
- int m_numVertices;
-
- int m_vertexOffset;
- int m_uniqueEdgesOffset;
- int m_numUniqueEdges;
- int m_unused;
-};
-
-#endif //B3_CONVEX_POLYHEDRON_DATA_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindConcaveSatAxis.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindConcaveSatAxis.h
deleted file mode 100644
index 983554eb2e..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindConcaveSatAxis.h
+++ /dev/null
@@ -1,797 +0,0 @@
-#ifndef B3_FIND_CONCAVE_SEPARATING_AXIS_H
-#define B3_FIND_CONCAVE_SEPARATING_AXIS_H
-
-#define B3_TRIANGLE_NUM_CONVEX_FACES 5
-
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-
-inline void b3Project(__global const b3ConvexPolyhedronData* hull, b3Float4ConstArg pos, b3QuatConstArg orn,
- const b3Float4* dir, __global const b3Float4* vertices, float* min, float* max)
-{
- min[0] = FLT_MAX;
- max[0] = -FLT_MAX;
- int numVerts = hull->m_numVertices;
-
- const b3Float4 localDir = b3QuatRotate(b3QuatInverse(orn), *dir);
- float offset = b3Dot(pos, *dir);
- for (int i = 0; i < numVerts; i++)
- {
- float dp = b3Dot(vertices[hull->m_vertexOffset + i], localDir);
- if (dp < min[0])
- min[0] = dp;
- if (dp > max[0])
- max[0] = dp;
- }
- if (min[0] > max[0])
- {
- float tmp = min[0];
- min[0] = max[0];
- max[0] = tmp;
- }
- min[0] += offset;
- max[0] += offset;
-}
-
-inline bool b3TestSepAxis(const b3ConvexPolyhedronData* hullA, __global const b3ConvexPolyhedronData* hullB,
- b3Float4ConstArg posA, b3QuatConstArg ornA,
- b3Float4ConstArg posB, b3QuatConstArg ornB,
- b3Float4* sep_axis, const b3Float4* verticesA, __global const b3Float4* verticesB, float* depth)
-{
- float Min0, Max0;
- float Min1, Max1;
- b3Project(hullA, posA, ornA, sep_axis, verticesA, &Min0, &Max0);
- b3Project(hullB, posB, ornB, sep_axis, verticesB, &Min1, &Max1);
-
- if (Max0 < Min1 || Max1 < Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- *depth = d0 < d1 ? d0 : d1;
- return true;
-}
-
-bool b3FindSeparatingAxis(const b3ConvexPolyhedronData* hullA, __global const b3ConvexPolyhedronData* hullB,
- b3Float4ConstArg posA1,
- b3QuatConstArg ornA,
- b3Float4ConstArg posB1,
- b3QuatConstArg ornB,
- b3Float4ConstArg DeltaC2,
-
- const b3Float4* verticesA,
- const b3Float4* uniqueEdgesA,
- const b3GpuFace* facesA,
- const int* indicesA,
-
- __global const b3Float4* verticesB,
- __global const b3Float4* uniqueEdgesB,
- __global const b3GpuFace* facesB,
- __global const int* indicesB,
- b3Float4* sep,
- float* dmin)
-{
- b3Float4 posA = posA1;
- posA.w = 0.f;
- b3Float4 posB = posB1;
- posB.w = 0.f;
- /*
- static int maxFaceVertex = 0;
-
- int curFaceVertexAB = hullA->m_numFaces*hullB->m_numVertices;
- curFaceVertexAB+= hullB->m_numFaces*hullA->m_numVertices;
-
- if (curFaceVertexAB>maxFaceVertex)
- {
- maxFaceVertex = curFaceVertexAB;
- printf("curFaceVertexAB = %d\n",curFaceVertexAB);
- printf("hullA->m_numFaces = %d\n",hullA->m_numFaces);
- printf("hullA->m_numVertices = %d\n",hullA->m_numVertices);
- printf("hullB->m_numVertices = %d\n",hullB->m_numVertices);
- }
-*/
-
- int curPlaneTests = 0;
- {
- int numFacesA = hullA->m_numFaces;
- // Test normals from hullA
- for (int i = 0; i < numFacesA; i++)
- {
- const b3Float4 normal = facesA[hullA->m_faceOffset + i].m_plane;
- b3Float4 faceANormalWS = b3QuatRotate(ornA, normal);
- if (b3Dot(DeltaC2, faceANormalWS) < 0)
- faceANormalWS *= -1.f;
- curPlaneTests++;
- float d;
- if (!b3TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, &faceANormalWS, verticesA, verticesB, &d))
- return false;
- if (d < *dmin)
- {
- *dmin = d;
- *sep = faceANormalWS;
- }
- }
- }
- if ((b3Dot(-DeltaC2, *sep)) > 0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-b3Vector3 unitSphere162[] =
- {
- b3MakeVector3(0.000000, -1.000000, 0.000000),
- b3MakeVector3(0.203181, -0.967950, 0.147618),
- b3MakeVector3(-0.077607, -0.967950, 0.238853),
- b3MakeVector3(0.723607, -0.447220, 0.525725),
- b3MakeVector3(0.609547, -0.657519, 0.442856),
- b3MakeVector3(0.812729, -0.502301, 0.295238),
- b3MakeVector3(-0.251147, -0.967949, 0.000000),
- b3MakeVector3(-0.077607, -0.967950, -0.238853),
- b3MakeVector3(0.203181, -0.967950, -0.147618),
- b3MakeVector3(0.860698, -0.251151, 0.442858),
- b3MakeVector3(-0.276388, -0.447220, 0.850649),
- b3MakeVector3(-0.029639, -0.502302, 0.864184),
- b3MakeVector3(-0.155215, -0.251152, 0.955422),
- b3MakeVector3(-0.894426, -0.447216, 0.000000),
- b3MakeVector3(-0.831051, -0.502299, 0.238853),
- b3MakeVector3(-0.956626, -0.251149, 0.147618),
- b3MakeVector3(-0.276388, -0.447220, -0.850649),
- b3MakeVector3(-0.483971, -0.502302, -0.716565),
- b3MakeVector3(-0.436007, -0.251152, -0.864188),
- b3MakeVector3(0.723607, -0.447220, -0.525725),
- b3MakeVector3(0.531941, -0.502302, -0.681712),
- b3MakeVector3(0.687159, -0.251152, -0.681715),
- b3MakeVector3(0.687159, -0.251152, 0.681715),
- b3MakeVector3(-0.436007, -0.251152, 0.864188),
- b3MakeVector3(-0.956626, -0.251149, -0.147618),
- b3MakeVector3(-0.155215, -0.251152, -0.955422),
- b3MakeVector3(0.860698, -0.251151, -0.442858),
- b3MakeVector3(0.276388, 0.447220, 0.850649),
- b3MakeVector3(0.483971, 0.502302, 0.716565),
- b3MakeVector3(0.232822, 0.657519, 0.716563),
- b3MakeVector3(-0.723607, 0.447220, 0.525725),
- b3MakeVector3(-0.531941, 0.502302, 0.681712),
- b3MakeVector3(-0.609547, 0.657519, 0.442856),
- b3MakeVector3(-0.723607, 0.447220, -0.525725),
- b3MakeVector3(-0.812729, 0.502301, -0.295238),
- b3MakeVector3(-0.609547, 0.657519, -0.442856),
- b3MakeVector3(0.276388, 0.447220, -0.850649),
- b3MakeVector3(0.029639, 0.502302, -0.864184),
- b3MakeVector3(0.232822, 0.657519, -0.716563),
- b3MakeVector3(0.894426, 0.447216, 0.000000),
- b3MakeVector3(0.831051, 0.502299, -0.238853),
- b3MakeVector3(0.753442, 0.657515, 0.000000),
- b3MakeVector3(-0.232822, -0.657519, 0.716563),
- b3MakeVector3(-0.162456, -0.850654, 0.499995),
- b3MakeVector3(0.052790, -0.723612, 0.688185),
- b3MakeVector3(0.138199, -0.894429, 0.425321),
- b3MakeVector3(0.262869, -0.525738, 0.809012),
- b3MakeVector3(0.361805, -0.723611, 0.587779),
- b3MakeVector3(0.531941, -0.502302, 0.681712),
- b3MakeVector3(0.425323, -0.850654, 0.309011),
- b3MakeVector3(0.812729, -0.502301, -0.295238),
- b3MakeVector3(0.609547, -0.657519, -0.442856),
- b3MakeVector3(0.850648, -0.525736, 0.000000),
- b3MakeVector3(0.670817, -0.723611, -0.162457),
- b3MakeVector3(0.670817, -0.723610, 0.162458),
- b3MakeVector3(0.425323, -0.850654, -0.309011),
- b3MakeVector3(0.447211, -0.894428, 0.000001),
- b3MakeVector3(-0.753442, -0.657515, 0.000000),
- b3MakeVector3(-0.525730, -0.850652, 0.000000),
- b3MakeVector3(-0.638195, -0.723609, 0.262864),
- b3MakeVector3(-0.361801, -0.894428, 0.262864),
- b3MakeVector3(-0.688189, -0.525736, 0.499997),
- b3MakeVector3(-0.447211, -0.723610, 0.525729),
- b3MakeVector3(-0.483971, -0.502302, 0.716565),
- b3MakeVector3(-0.232822, -0.657519, -0.716563),
- b3MakeVector3(-0.162456, -0.850654, -0.499995),
- b3MakeVector3(-0.447211, -0.723611, -0.525727),
- b3MakeVector3(-0.361801, -0.894429, -0.262863),
- b3MakeVector3(-0.688189, -0.525736, -0.499997),
- b3MakeVector3(-0.638195, -0.723609, -0.262863),
- b3MakeVector3(-0.831051, -0.502299, -0.238853),
- b3MakeVector3(0.361804, -0.723612, -0.587779),
- b3MakeVector3(0.138197, -0.894429, -0.425321),
- b3MakeVector3(0.262869, -0.525738, -0.809012),
- b3MakeVector3(0.052789, -0.723611, -0.688186),
- b3MakeVector3(-0.029639, -0.502302, -0.864184),
- b3MakeVector3(0.956626, 0.251149, 0.147618),
- b3MakeVector3(0.956626, 0.251149, -0.147618),
- b3MakeVector3(0.951058, -0.000000, 0.309013),
- b3MakeVector3(1.000000, 0.000000, 0.000000),
- b3MakeVector3(0.947213, -0.276396, 0.162458),
- b3MakeVector3(0.951058, 0.000000, -0.309013),
- b3MakeVector3(0.947213, -0.276396, -0.162458),
- b3MakeVector3(0.155215, 0.251152, 0.955422),
- b3MakeVector3(0.436007, 0.251152, 0.864188),
- b3MakeVector3(-0.000000, -0.000000, 1.000000),
- b3MakeVector3(0.309017, 0.000000, 0.951056),
- b3MakeVector3(0.138199, -0.276398, 0.951055),
- b3MakeVector3(0.587786, 0.000000, 0.809017),
- b3MakeVector3(0.447216, -0.276398, 0.850648),
- b3MakeVector3(-0.860698, 0.251151, 0.442858),
- b3MakeVector3(-0.687159, 0.251152, 0.681715),
- b3MakeVector3(-0.951058, -0.000000, 0.309013),
- b3MakeVector3(-0.809018, 0.000000, 0.587783),
- b3MakeVector3(-0.861803, -0.276396, 0.425324),
- b3MakeVector3(-0.587786, 0.000000, 0.809017),
- b3MakeVector3(-0.670819, -0.276397, 0.688191),
- b3MakeVector3(-0.687159, 0.251152, -0.681715),
- b3MakeVector3(-0.860698, 0.251151, -0.442858),
- b3MakeVector3(-0.587786, -0.000000, -0.809017),
- b3MakeVector3(-0.809018, -0.000000, -0.587783),
- b3MakeVector3(-0.670819, -0.276397, -0.688191),
- b3MakeVector3(-0.951058, 0.000000, -0.309013),
- b3MakeVector3(-0.861803, -0.276396, -0.425324),
- b3MakeVector3(0.436007, 0.251152, -0.864188),
- b3MakeVector3(0.155215, 0.251152, -0.955422),
- b3MakeVector3(0.587786, -0.000000, -0.809017),
- b3MakeVector3(0.309017, -0.000000, -0.951056),
- b3MakeVector3(0.447216, -0.276398, -0.850648),
- b3MakeVector3(0.000000, 0.000000, -1.000000),
- b3MakeVector3(0.138199, -0.276398, -0.951055),
- b3MakeVector3(0.670820, 0.276396, 0.688190),
- b3MakeVector3(0.809019, -0.000002, 0.587783),
- b3MakeVector3(0.688189, 0.525736, 0.499997),
- b3MakeVector3(0.861804, 0.276394, 0.425323),
- b3MakeVector3(0.831051, 0.502299, 0.238853),
- b3MakeVector3(-0.447216, 0.276397, 0.850649),
- b3MakeVector3(-0.309017, -0.000001, 0.951056),
- b3MakeVector3(-0.262869, 0.525738, 0.809012),
- b3MakeVector3(-0.138199, 0.276397, 0.951055),
- b3MakeVector3(0.029639, 0.502302, 0.864184),
- b3MakeVector3(-0.947213, 0.276396, -0.162458),
- b3MakeVector3(-1.000000, 0.000001, 0.000000),
- b3MakeVector3(-0.850648, 0.525736, -0.000000),
- b3MakeVector3(-0.947213, 0.276397, 0.162458),
- b3MakeVector3(-0.812729, 0.502301, 0.295238),
- b3MakeVector3(-0.138199, 0.276397, -0.951055),
- b3MakeVector3(-0.309016, -0.000000, -0.951057),
- b3MakeVector3(-0.262869, 0.525738, -0.809012),
- b3MakeVector3(-0.447215, 0.276397, -0.850649),
- b3MakeVector3(-0.531941, 0.502302, -0.681712),
- b3MakeVector3(0.861804, 0.276396, -0.425322),
- b3MakeVector3(0.809019, 0.000000, -0.587782),
- b3MakeVector3(0.688189, 0.525736, -0.499997),
- b3MakeVector3(0.670821, 0.276397, -0.688189),
- b3MakeVector3(0.483971, 0.502302, -0.716565),
- b3MakeVector3(0.077607, 0.967950, 0.238853),
- b3MakeVector3(0.251147, 0.967949, 0.000000),
- b3MakeVector3(0.000000, 1.000000, 0.000000),
- b3MakeVector3(0.162456, 0.850654, 0.499995),
- b3MakeVector3(0.361800, 0.894429, 0.262863),
- b3MakeVector3(0.447209, 0.723612, 0.525728),
- b3MakeVector3(0.525730, 0.850652, 0.000000),
- b3MakeVector3(0.638194, 0.723610, 0.262864),
- b3MakeVector3(-0.203181, 0.967950, 0.147618),
- b3MakeVector3(-0.425323, 0.850654, 0.309011),
- b3MakeVector3(-0.138197, 0.894430, 0.425320),
- b3MakeVector3(-0.361804, 0.723612, 0.587778),
- b3MakeVector3(-0.052790, 0.723612, 0.688185),
- b3MakeVector3(-0.203181, 0.967950, -0.147618),
- b3MakeVector3(-0.425323, 0.850654, -0.309011),
- b3MakeVector3(-0.447210, 0.894429, 0.000000),
- b3MakeVector3(-0.670817, 0.723611, -0.162457),
- b3MakeVector3(-0.670817, 0.723611, 0.162457),
- b3MakeVector3(0.077607, 0.967950, -0.238853),
- b3MakeVector3(0.162456, 0.850654, -0.499995),
- b3MakeVector3(-0.138197, 0.894430, -0.425320),
- b3MakeVector3(-0.052790, 0.723612, -0.688185),
- b3MakeVector3(-0.361804, 0.723612, -0.587778),
- b3MakeVector3(0.361800, 0.894429, -0.262863),
- b3MakeVector3(0.638194, 0.723610, -0.262864),
- b3MakeVector3(0.447209, 0.723612, -0.525728)};
-
-bool b3FindSeparatingAxisEdgeEdge(const b3ConvexPolyhedronData* hullA, __global const b3ConvexPolyhedronData* hullB,
- b3Float4ConstArg posA1,
- b3QuatConstArg ornA,
- b3Float4ConstArg posB1,
- b3QuatConstArg ornB,
- b3Float4ConstArg DeltaC2,
- const b3Float4* verticesA,
- const b3Float4* uniqueEdgesA,
- const b3GpuFace* facesA,
- const int* indicesA,
- __global const b3Float4* verticesB,
- __global const b3Float4* uniqueEdgesB,
- __global const b3GpuFace* facesB,
- __global const int* indicesB,
- b3Float4* sep,
- float* dmin,
- bool searchAllEdgeEdge)
-{
- b3Float4 posA = posA1;
- posA.w = 0.f;
- b3Float4 posB = posB1;
- posB.w = 0.f;
-
- // int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test edges
- static int maxEdgeTests = 0;
- int curEdgeTests = hullA->m_numUniqueEdges * hullB->m_numUniqueEdges;
- if (curEdgeTests > maxEdgeTests)
- {
- maxEdgeTests = curEdgeTests;
- printf("maxEdgeTests = %d\n", maxEdgeTests);
- printf("hullA->m_numUniqueEdges = %d\n", hullA->m_numUniqueEdges);
- printf("hullB->m_numUniqueEdges = %d\n", hullB->m_numUniqueEdges);
- }
-
- if (searchAllEdgeEdge)
- {
- for (int e0 = 0; e0 < hullA->m_numUniqueEdges; e0++)
- {
- const b3Float4 edge0 = uniqueEdgesA[hullA->m_uniqueEdgesOffset + e0];
- b3Float4 edge0World = b3QuatRotate(ornA, edge0);
-
- for (int e1 = 0; e1 < hullB->m_numUniqueEdges; e1++)
- {
- const b3Float4 edge1 = uniqueEdgesB[hullB->m_uniqueEdgesOffset + e1];
- b3Float4 edge1World = b3QuatRotate(ornB, edge1);
-
- b3Float4 crossje = b3Cross(edge0World, edge1World);
-
- curEdgeEdge++;
- if (!b3IsAlmostZero(crossje))
- {
- crossje = b3Normalized(crossje);
- if (b3Dot(DeltaC2, crossje) < 0)
- crossje *= -1.f;
-
- float dist;
- bool result = true;
- {
- float Min0, Max0;
- float Min1, Max1;
- b3Project(hullA, posA, ornA, &crossje, verticesA, &Min0, &Max0);
- b3Project(hullB, posB, ornB, &crossje, verticesB, &Min1, &Max1);
-
- if (Max0 < Min1 || Max1 < Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0 < d1 ? d0 : d1;
- result = true;
- }
-
- if (dist < *dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
- }
- }
- else
- {
- int numDirections = sizeof(unitSphere162) / sizeof(b3Vector3);
- //printf("numDirections =%d\n",numDirections );
-
- for (int i = 0; i < numDirections; i++)
- {
- b3Float4 crossje = unitSphere162[i];
- {
- //if (b3Dot(DeltaC2,crossje)>0)
- {
- float dist;
- bool result = true;
- {
- float Min0, Max0;
- float Min1, Max1;
- b3Project(hullA, posA, ornA, &crossje, verticesA, &Min0, &Max0);
- b3Project(hullB, posB, ornB, &crossje, verticesB, &Min1, &Max1);
-
- if (Max0 < Min1 || Max1 < Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0 < d1 ? d0 : d1;
- result = true;
- }
-
- if (dist < *dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
- }
- }
-
- if ((b3Dot(-DeltaC2, *sep)) > 0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-inline int b3FindClippingFaces(b3Float4ConstArg separatingNormal,
- __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB,
- b3Float4ConstArg posA, b3QuatConstArg ornA, b3Float4ConstArg posB, b3QuatConstArg ornB,
- __global b3Float4* worldVertsA1,
- __global b3Float4* worldNormalsA1,
- __global b3Float4* worldVertsB1,
- int capacityWorldVerts,
- const float minDist, float maxDist,
- __global const b3Float4* verticesA,
- __global const b3GpuFace_t* facesA,
- __global const int* indicesA,
- __global const b3Float4* verticesB,
- __global const b3GpuFace_t* facesB,
- __global const int* indicesB,
-
- __global b3Int4* clippingFaces, int pairIndex)
-{
- int numContactsOut = 0;
- int numWorldVertsB1 = 0;
-
- int closestFaceB = -1;
- float dmax = -FLT_MAX;
-
- {
- for (int face = 0; face < hullB->m_numFaces; face++)
- {
- const b3Float4 Normal = b3MakeFloat4(facesB[hullB->m_faceOffset + face].m_plane.x,
- facesB[hullB->m_faceOffset + face].m_plane.y, facesB[hullB->m_faceOffset + face].m_plane.z, 0.f);
- const b3Float4 WorldNormal = b3QuatRotate(ornB, Normal);
- float d = b3Dot(WorldNormal, separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
-
- {
- const b3GpuFace_t polyB = facesB[hullB->m_faceOffset + closestFaceB];
- const int numVertices = polyB.m_numIndices;
- for (int e0 = 0; e0 < numVertices; e0++)
- {
- const b3Float4 b = verticesB[hullB->m_vertexOffset + indicesB[polyB.m_indexOffset + e0]];
- worldVertsB1[pairIndex * capacityWorldVerts + numWorldVertsB1++] = b3TransformPoint(b, posB, ornB);
- }
- }
-
- int closestFaceA = -1;
- {
- float dmin = FLT_MAX;
- for (int face = 0; face < hullA->m_numFaces; face++)
- {
- const b3Float4 Normal = b3MakeFloat4(
- facesA[hullA->m_faceOffset + face].m_plane.x,
- facesA[hullA->m_faceOffset + face].m_plane.y,
- facesA[hullA->m_faceOffset + face].m_plane.z,
- 0.f);
- const b3Float4 faceANormalWS = b3QuatRotate(ornA, Normal);
-
- float d = b3Dot(faceANormalWS, separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- worldNormalsA1[pairIndex] = faceANormalWS;
- }
- }
- }
-
- int numVerticesA = facesA[hullA->m_faceOffset + closestFaceA].m_numIndices;
- for (int e0 = 0; e0 < numVerticesA; e0++)
- {
- const b3Float4 a = verticesA[hullA->m_vertexOffset + indicesA[facesA[hullA->m_faceOffset + closestFaceA].m_indexOffset + e0]];
- worldVertsA1[pairIndex * capacityWorldVerts + e0] = b3TransformPoint(a, posA, ornA);
- }
-
- clippingFaces[pairIndex].x = closestFaceA;
- clippingFaces[pairIndex].y = closestFaceB;
- clippingFaces[pairIndex].z = numVerticesA;
- clippingFaces[pairIndex].w = numWorldVertsB1;
-
- return numContactsOut;
-}
-
-__kernel void b3FindConcaveSeparatingAxisKernel(__global b3Int4* concavePairs,
- __global const b3RigidBodyData* rigidBodies,
- __global const b3Collidable* collidables,
- __global const b3ConvexPolyhedronData* convexShapes,
- __global const b3Float4* vertices,
- __global const b3Float4* uniqueEdges,
- __global const b3GpuFace* faces,
- __global const int* indices,
- __global const b3GpuChildShape* gpuChildShapes,
- __global b3Aabb* aabbs,
- __global b3Float4* concaveSeparatingNormalsOut,
- __global b3Int4* clippingFacesOut,
- __global b3Vector3* worldVertsA1Out,
- __global b3Vector3* worldNormalsA1Out,
- __global b3Vector3* worldVertsB1Out,
- __global int* hasSeparatingNormals,
- int vertexFaceCapacity,
- int numConcavePairs,
- int pairIdx)
-{
- int i = pairIdx;
- /* int i = get_global_id(0);
- if (i>=numConcavePairs)
- return;
- int pairIdx = i;
- */
-
- int bodyIndexA = concavePairs[i].x;
- int bodyIndexB = concavePairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- if (collidables[collidableIndexB].m_shapeType != SHAPE_CONVEX_HULL &&
- collidables[collidableIndexB].m_shapeType != SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- concavePairs[pairIdx].w = -1;
- return;
- }
-
- hasSeparatingNormals[i] = 0;
-
- // int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- int numActualConcaveConvexTests = 0;
-
- int f = concavePairs[i].z;
-
- bool overlap = false;
-
- b3ConvexPolyhedronData convexPolyhedronA;
-
- //add 3 vertices of the triangle
- convexPolyhedronA.m_numVertices = 3;
- convexPolyhedronA.m_vertexOffset = 0;
- b3Float4 localCenter = b3MakeFloat4(0.f, 0.f, 0.f, 0.f);
-
- b3GpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset + f];
- b3Aabb triAabb;
- triAabb.m_minVec = b3MakeFloat4(1e30f, 1e30f, 1e30f, 0.f);
- triAabb.m_maxVec = b3MakeFloat4(-1e30f, -1e30f, -1e30f, 0.f);
-
- b3Float4 verticesA[3];
- for (int i = 0; i < 3; i++)
- {
- int index = indices[face.m_indexOffset + i];
- b3Float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset + index];
- verticesA[i] = vert;
- localCenter += vert;
-
- triAabb.m_minVec = b3MinFloat4(triAabb.m_minVec, vert);
- triAabb.m_maxVec = b3MaxFloat4(triAabb.m_maxVec, vert);
- }
-
- overlap = true;
- overlap = (triAabb.m_minVec.x > aabbs[bodyIndexB].m_maxVec.x || triAabb.m_maxVec.x < aabbs[bodyIndexB].m_minVec.x) ? false : overlap;
- overlap = (triAabb.m_minVec.z > aabbs[bodyIndexB].m_maxVec.z || triAabb.m_maxVec.z < aabbs[bodyIndexB].m_minVec.z) ? false : overlap;
- overlap = (triAabb.m_minVec.y > aabbs[bodyIndexB].m_maxVec.y || triAabb.m_maxVec.y < aabbs[bodyIndexB].m_minVec.y) ? false : overlap;
-
- if (overlap)
- {
- float dmin = FLT_MAX;
- int hasSeparatingAxis = 5;
- b3Float4 sepAxis = b3MakeFloat4(1, 2, 3, 4);
-
- // int localCC=0;
- numActualConcaveConvexTests++;
-
- //a triangle has 3 unique edges
- convexPolyhedronA.m_numUniqueEdges = 3;
- convexPolyhedronA.m_uniqueEdgesOffset = 0;
- b3Float4 uniqueEdgesA[3];
-
- uniqueEdgesA[0] = (verticesA[1] - verticesA[0]);
- uniqueEdgesA[1] = (verticesA[2] - verticesA[1]);
- uniqueEdgesA[2] = (verticesA[0] - verticesA[2]);
-
- convexPolyhedronA.m_faceOffset = 0;
-
- b3Float4 normal = b3MakeFloat4(face.m_plane.x, face.m_plane.y, face.m_plane.z, 0.f);
-
- b3GpuFace facesA[B3_TRIANGLE_NUM_CONVEX_FACES];
- int indicesA[3 + 3 + 2 + 2 + 2];
- int curUsedIndices = 0;
- int fidx = 0;
-
- //front size of triangle
- {
- facesA[fidx].m_indexOffset = curUsedIndices;
- indicesA[0] = 0;
- indicesA[1] = 1;
- indicesA[2] = 2;
- curUsedIndices += 3;
- float c = face.m_plane.w;
- facesA[fidx].m_plane.x = normal.x;
- facesA[fidx].m_plane.y = normal.y;
- facesA[fidx].m_plane.z = normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices = 3;
- }
- fidx++;
- //back size of triangle
- {
- facesA[fidx].m_indexOffset = curUsedIndices;
- indicesA[3] = 2;
- indicesA[4] = 1;
- indicesA[5] = 0;
- curUsedIndices += 3;
- float c = b3Dot(normal, verticesA[0]);
- // float c1 = -face.m_plane.w;
- facesA[fidx].m_plane.x = -normal.x;
- facesA[fidx].m_plane.y = -normal.y;
- facesA[fidx].m_plane.z = -normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices = 3;
- }
- fidx++;
-
- bool addEdgePlanes = true;
- if (addEdgePlanes)
- {
- int numVertices = 3;
- int prevVertex = numVertices - 1;
- for (int i = 0; i < numVertices; i++)
- {
- b3Float4 v0 = verticesA[i];
- b3Float4 v1 = verticesA[prevVertex];
-
- b3Float4 edgeNormal = b3Normalized(b3Cross(normal, v1 - v0));
- float c = -b3Dot(edgeNormal, v0);
-
- facesA[fidx].m_numIndices = 2;
- facesA[fidx].m_indexOffset = curUsedIndices;
- indicesA[curUsedIndices++] = i;
- indicesA[curUsedIndices++] = prevVertex;
-
- facesA[fidx].m_plane.x = edgeNormal.x;
- facesA[fidx].m_plane.y = edgeNormal.y;
- facesA[fidx].m_plane.z = edgeNormal.z;
- facesA[fidx].m_plane.w = c;
- fidx++;
- prevVertex = i;
- }
- }
- convexPolyhedronA.m_numFaces = B3_TRIANGLE_NUM_CONVEX_FACES;
- convexPolyhedronA.m_localCenter = localCenter * (1.f / 3.f);
-
- b3Float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- b3Float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
-
- b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat;
- b3Quaternion ornB = rigidBodies[bodyIndexB].m_quat;
-
- ///////////////////
- ///compound shape support
-
- if (collidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int compoundChild = concavePairs[pairIdx].w;
- int childShapeIndexB = compoundChild; //collidables[collidableIndexB].m_shapeIndex+compoundChild;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- b3Float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quaternion childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- b3Float4 newPosB = b3TransformPoint(childPosB, posB, ornB);
- b3Quaternion newOrnB = b3QuatMul(ornB, childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- shapeIndexB = collidables[childColIndexB].m_shapeIndex;
- }
- //////////////////
-
- b3Float4 c0local = convexPolyhedronA.m_localCenter;
- b3Float4 c0 = b3TransformPoint(c0local, posA, ornA);
- b3Float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- b3Float4 c1 = b3TransformPoint(c1local, posB, ornB);
- const b3Float4 DeltaC2 = c0 - c1;
-
- bool sepA = b3FindSeparatingAxis(&convexPolyhedronA, &convexShapes[shapeIndexB],
- posA, ornA,
- posB, ornB,
- DeltaC2,
- verticesA, uniqueEdgesA, facesA, indicesA,
- vertices, uniqueEdges, faces, indices,
- &sepAxis, &dmin);
- hasSeparatingAxis = 4;
- if (!sepA)
- {
- hasSeparatingAxis = 0;
- }
- else
- {
- bool sepB = b3FindSeparatingAxis(&convexShapes[shapeIndexB], &convexPolyhedronA,
- posB, ornB,
- posA, ornA,
- DeltaC2,
- vertices, uniqueEdges, faces, indices,
- verticesA, uniqueEdgesA, facesA, indicesA,
- &sepAxis, &dmin);
-
- if (!sepB)
- {
- hasSeparatingAxis = 0;
- }
- else
- {
- bool sepEE = b3FindSeparatingAxisEdgeEdge(&convexPolyhedronA, &convexShapes[shapeIndexB],
- posA, ornA,
- posB, ornB,
- DeltaC2,
- verticesA, uniqueEdgesA, facesA, indicesA,
- vertices, uniqueEdges, faces, indices,
- &sepAxis, &dmin, true);
-
- if (!sepEE)
- {
- hasSeparatingAxis = 0;
- }
- else
- {
- hasSeparatingAxis = 1;
- }
- }
- }
-
- if (hasSeparatingAxis)
- {
- hasSeparatingNormals[i] = 1;
- sepAxis.w = dmin;
- concaveSeparatingNormalsOut[pairIdx] = sepAxis;
-
- //now compute clipping faces A and B, and world-space clipping vertices A and B...
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- b3FindClippingFaces(sepAxis,
- &convexPolyhedronA,
- &convexShapes[shapeIndexB],
- posA, ornA,
- posB, ornB,
- worldVertsA1Out,
- worldNormalsA1Out,
- worldVertsB1Out,
- vertexFaceCapacity,
- minDist, maxDist,
- verticesA,
- facesA,
- indicesA,
-
- vertices,
- faces,
- indices,
- clippingFacesOut, pairIdx);
- }
- else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
- }
- else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
-}
-
-#endif //B3_FIND_CONCAVE_SEPARATING_AXIS_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindSeparatingAxis.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindSeparatingAxis.h
deleted file mode 100644
index b4981ae654..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3FindSeparatingAxis.h
+++ /dev/null
@@ -1,197 +0,0 @@
-#ifndef B3_FIND_SEPARATING_AXIS_H
-#define B3_FIND_SEPARATING_AXIS_H
-
-inline void b3ProjectAxis(const b3ConvexPolyhedronData& hull, const b3Float4& pos, const b3Quaternion& orn, const b3Float4& dir, const b3AlignedObjectArray<b3Vector3>& vertices, b3Scalar& min, b3Scalar& max)
-{
- min = FLT_MAX;
- max = -FLT_MAX;
- int numVerts = hull.m_numVertices;
-
- const b3Float4 localDir = b3QuatRotate(orn.inverse(), dir);
-
- b3Scalar offset = b3Dot3F4(pos, dir);
-
- for (int i = 0; i < numVerts; i++)
- {
- //b3Vector3 pt = trans * vertices[m_vertexOffset+i];
- //b3Scalar dp = pt.dot(dir);
- //b3Vector3 vertex = vertices[hull.m_vertexOffset+i];
- b3Scalar dp = b3Dot3F4((b3Float4&)vertices[hull.m_vertexOffset + i], localDir);
- //b3Assert(dp==dpL);
- if (dp < min) min = dp;
- if (dp > max) max = dp;
- }
- if (min > max)
- {
- b3Scalar tmp = min;
- min = max;
- max = tmp;
- }
- min += offset;
- max += offset;
-}
-
-inline bool b3TestSepAxis(const b3ConvexPolyhedronData& hullA, const b3ConvexPolyhedronData& hullB,
- const b3Float4& posA, const b3Quaternion& ornA,
- const b3Float4& posB, const b3Quaternion& ornB,
- const b3Float4& sep_axis, const b3AlignedObjectArray<b3Vector3>& verticesA, const b3AlignedObjectArray<b3Vector3>& verticesB, b3Scalar& depth)
-{
- b3Scalar Min0, Max0;
- b3Scalar Min1, Max1;
- b3ProjectAxis(hullA, posA, ornA, sep_axis, verticesA, Min0, Max0);
- b3ProjectAxis(hullB, posB, ornB, sep_axis, verticesB, Min1, Max1);
-
- if (Max0 < Min1 || Max1 < Min0)
- return false;
-
- b3Scalar d0 = Max0 - Min1;
- b3Assert(d0 >= 0.0f);
- b3Scalar d1 = Max1 - Min0;
- b3Assert(d1 >= 0.0f);
- depth = d0 < d1 ? d0 : d1;
- return true;
-}
-
-inline bool b3FindSeparatingAxis(const b3ConvexPolyhedronData& hullA, const b3ConvexPolyhedronData& hullB,
- const b3Float4& posA1,
- const b3Quaternion& ornA,
- const b3Float4& posB1,
- const b3Quaternion& ornB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesA,
- const b3AlignedObjectArray<b3GpuFace>& facesA,
- const b3AlignedObjectArray<int>& indicesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesB,
- const b3AlignedObjectArray<b3GpuFace>& facesB,
- const b3AlignedObjectArray<int>& indicesB,
-
- b3Vector3& sep)
-{
- B3_PROFILE("findSeparatingAxis");
-
- b3Float4 posA = posA1;
- posA.w = 0.f;
- b3Float4 posB = posB1;
- posB.w = 0.f;
- //#ifdef TEST_INTERNAL_OBJECTS
- b3Float4 c0local = (b3Float4&)hullA.m_localCenter;
-
- b3Float4 c0 = b3TransformPoint(c0local, posA, ornA);
- b3Float4 c1local = (b3Float4&)hullB.m_localCenter;
- b3Float4 c1 = b3TransformPoint(c1local, posB, ornB);
- const b3Float4 deltaC2 = c0 - c1;
- //#endif
-
- b3Scalar dmin = FLT_MAX;
- int curPlaneTests = 0;
-
- int numFacesA = hullA.m_numFaces;
- // Test normals from hullA
- for (int i = 0; i < numFacesA; i++)
- {
- const b3Float4& normal = (b3Float4&)facesA[hullA.m_faceOffset + i].m_plane;
- b3Float4 faceANormalWS = b3QuatRotate(ornA, normal);
-
- if (b3Dot3F4(deltaC2, faceANormalWS) < 0)
- faceANormalWS *= -1.f;
-
- curPlaneTests++;
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, faceANormalWS, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- b3Scalar d;
- if (!b3TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, faceANormalWS, verticesA, verticesB, d))
- return false;
-
- if (d < dmin)
- {
- dmin = d;
- sep = (b3Vector3&)faceANormalWS;
- }
- }
-
- int numFacesB = hullB.m_numFaces;
- // Test normals from hullB
- for (int i = 0; i < numFacesB; i++)
- {
- b3Float4 normal = (b3Float4&)facesB[hullB.m_faceOffset + i].m_plane;
- b3Float4 WorldNormal = b3QuatRotate(ornB, normal);
-
- if (b3Dot3F4(deltaC2, WorldNormal) < 0)
- {
- WorldNormal *= -1.f;
- }
- curPlaneTests++;
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, WorldNormal, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- b3Scalar d;
- if (!b3TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, WorldNormal, verticesA, verticesB, d))
- return false;
-
- if (d < dmin)
- {
- dmin = d;
- sep = (b3Vector3&)WorldNormal;
- }
- }
-
- // b3Vector3 edgeAstart,edgeAend,edgeBstart,edgeBend;
-
- int curEdgeEdge = 0;
- // Test edges
- for (int e0 = 0; e0 < hullA.m_numUniqueEdges; e0++)
- {
- const b3Float4& edge0 = (b3Float4&)uniqueEdgesA[hullA.m_uniqueEdgesOffset + e0];
- b3Float4 edge0World = b3QuatRotate(ornA, (b3Float4&)edge0);
-
- for (int e1 = 0; e1 < hullB.m_numUniqueEdges; e1++)
- {
- const b3Vector3 edge1 = uniqueEdgesB[hullB.m_uniqueEdgesOffset + e1];
- b3Float4 edge1World = b3QuatRotate(ornB, (b3Float4&)edge1);
-
- b3Float4 crossje = b3Cross3(edge0World, edge1World);
-
- curEdgeEdge++;
- if (!b3IsAlmostZero((b3Vector3&)crossje))
- {
- crossje = b3FastNormalized3(crossje);
- if (b3Dot3F4(deltaC2, crossje) < 0)
- crossje *= -1.f;
-
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, Cross, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- b3Scalar dist;
- if (!b3TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, crossje, verticesA, verticesB, dist))
- return false;
-
- if (dist < dmin)
- {
- dmin = dist;
- sep = (b3Vector3&)crossje;
- }
- }
- }
- }
-
- if ((b3Dot3F4(-deltaC2, (b3Float4&)sep)) > 0.0f)
- sep = -sep;
-
- return true;
-}
-
-#endif //B3_FIND_SEPARATING_AXIS_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3MprPenetration.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3MprPenetration.h
deleted file mode 100644
index a3bfbf2995..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3MprPenetration.h
+++ /dev/null
@@ -1,888 +0,0 @@
-
-/***
- * ---------------------------------
- * Copyright (c)2012 Daniel Fiser <danfis@danfis.cz>
- *
- * This file was ported from mpr.c file, part of libccd.
- * The Minkoski Portal Refinement implementation was ported
- * to OpenCL by Erwin Coumans for the Bullet 3 Physics library.
- * at http://github.com/erwincoumans/bullet3
- *
- * Distributed under the OSI-approved BSD License (the "License");
- * see <http://www.opensource.org/licenses/bsd-license.php>.
- * This software is distributed WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the License for more information.
- */
-
-#ifndef B3_MPR_PENETRATION_H
-#define B3_MPR_PENETRATION_H
-
-#include "Bullet3Common/shared/b3PlatformDefinitions.h"
-#include "Bullet3Common/shared/b3Float4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-
-#ifdef __cplusplus
-#define B3_MPR_SQRT sqrtf
-#else
-#define B3_MPR_SQRT sqrt
-#endif
-#define B3_MPR_FMIN(x, y) ((x) < (y) ? (x) : (y))
-#define B3_MPR_FABS fabs
-
-#define B3_MPR_TOLERANCE 1E-6f
-#define B3_MPR_MAX_ITERATIONS 1000
-
-struct _b3MprSupport_t
-{
- b3Float4 v; //!< Support point in minkowski sum
- b3Float4 v1; //!< Support point in obj1
- b3Float4 v2; //!< Support point in obj2
-};
-typedef struct _b3MprSupport_t b3MprSupport_t;
-
-struct _b3MprSimplex_t
-{
- b3MprSupport_t ps[4];
- int last; //!< index of last added point
-};
-typedef struct _b3MprSimplex_t b3MprSimplex_t;
-
-inline b3MprSupport_t *b3MprSimplexPointW(b3MprSimplex_t *s, int idx)
-{
- return &s->ps[idx];
-}
-
-inline void b3MprSimplexSetSize(b3MprSimplex_t *s, int size)
-{
- s->last = size - 1;
-}
-
-inline int b3MprSimplexSize(const b3MprSimplex_t *s)
-{
- return s->last + 1;
-}
-
-inline const b3MprSupport_t *b3MprSimplexPoint(const b3MprSimplex_t *s, int idx)
-{
- // here is no check on boundaries
- return &s->ps[idx];
-}
-
-inline void b3MprSupportCopy(b3MprSupport_t *d, const b3MprSupport_t *s)
-{
- *d = *s;
-}
-
-inline void b3MprSimplexSet(b3MprSimplex_t *s, size_t pos, const b3MprSupport_t *a)
-{
- b3MprSupportCopy(s->ps + pos, a);
-}
-
-inline void b3MprSimplexSwap(b3MprSimplex_t *s, size_t pos1, size_t pos2)
-{
- b3MprSupport_t supp;
-
- b3MprSupportCopy(&supp, &s->ps[pos1]);
- b3MprSupportCopy(&s->ps[pos1], &s->ps[pos2]);
- b3MprSupportCopy(&s->ps[pos2], &supp);
-}
-
-inline int b3MprIsZero(float val)
-{
- return B3_MPR_FABS(val) < FLT_EPSILON;
-}
-
-inline int b3MprEq(float _a, float _b)
-{
- float ab;
- float a, b;
-
- ab = B3_MPR_FABS(_a - _b);
- if (B3_MPR_FABS(ab) < FLT_EPSILON)
- return 1;
-
- a = B3_MPR_FABS(_a);
- b = B3_MPR_FABS(_b);
- if (b > a)
- {
- return ab < FLT_EPSILON * b;
- }
- else
- {
- return ab < FLT_EPSILON * a;
- }
-}
-
-inline int b3MprVec3Eq(const b3Float4 *a, const b3Float4 *b)
-{
- return b3MprEq((*a).x, (*b).x) && b3MprEq((*a).y, (*b).y) && b3MprEq((*a).z, (*b).z);
-}
-
-inline b3Float4 b3LocalGetSupportVertex(b3Float4ConstArg supportVec, __global const b3ConvexPolyhedronData_t *hull, b3ConstArray(b3Float4) verticesA)
-{
- b3Float4 supVec = b3MakeFloat4(0, 0, 0, 0);
- float maxDot = -B3_LARGE_FLOAT;
-
- if (0 < hull->m_numVertices)
- {
- const b3Float4 scaled = supportVec;
- int index = b3MaxDot(scaled, &verticesA[hull->m_vertexOffset], hull->m_numVertices, &maxDot);
- return verticesA[hull->m_vertexOffset + index];
- }
-
- return supVec;
-}
-
-B3_STATIC void b3MprConvexSupport(int pairIndex, int bodyIndex, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,
- b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData,
- b3ConstArray(b3Collidable_t) cpuCollidables,
- b3ConstArray(b3Float4) cpuVertices,
- __global b3Float4 *sepAxis,
- const b3Float4 *_dir, b3Float4 *outp, int logme)
-{
- //dir is in worldspace, move to local space
-
- b3Float4 pos = cpuBodyBuf[bodyIndex].m_pos;
- b3Quat orn = cpuBodyBuf[bodyIndex].m_quat;
-
- b3Float4 dir = b3MakeFloat4((*_dir).x, (*_dir).y, (*_dir).z, 0.f);
-
- const b3Float4 localDir = b3QuatRotate(b3QuatInverse(orn), dir);
-
- //find local support vertex
- int colIndex = cpuBodyBuf[bodyIndex].m_collidableIdx;
-
- b3Assert(cpuCollidables[colIndex].m_shapeType == SHAPE_CONVEX_HULL);
- __global const b3ConvexPolyhedronData_t *hull = &cpuConvexData[cpuCollidables[colIndex].m_shapeIndex];
-
- b3Float4 pInA;
- if (logme)
- {
- // b3Float4 supVec = b3MakeFloat4(0,0,0,0);
- float maxDot = -B3_LARGE_FLOAT;
-
- if (0 < hull->m_numVertices)
- {
- const b3Float4 scaled = localDir;
- int index = b3MaxDot(scaled, &cpuVertices[hull->m_vertexOffset], hull->m_numVertices, &maxDot);
- pInA = cpuVertices[hull->m_vertexOffset + index];
- }
- }
- else
- {
- pInA = b3LocalGetSupportVertex(localDir, hull, cpuVertices);
- }
-
- //move vertex to world space
- *outp = b3TransformPoint(pInA, pos, orn);
-}
-
-inline void b3MprSupport(int pairIndex, int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,
- b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData,
- b3ConstArray(b3Collidable_t) cpuCollidables,
- b3ConstArray(b3Float4) cpuVertices,
- __global b3Float4 *sepAxis,
- const b3Float4 *_dir, b3MprSupport_t *supp)
-{
- b3Float4 dir;
- dir = *_dir;
- b3MprConvexSupport(pairIndex, bodyIndexA, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, &supp->v1, 0);
- dir = *_dir * -1.f;
- b3MprConvexSupport(pairIndex, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, &supp->v2, 0);
- supp->v = supp->v1 - supp->v2;
-}
-
-inline void b3FindOrigin(int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, b3MprSupport_t *center)
-{
- center->v1 = cpuBodyBuf[bodyIndexA].m_pos;
- center->v2 = cpuBodyBuf[bodyIndexB].m_pos;
- center->v = center->v1 - center->v2;
-}
-
-inline void b3MprVec3Set(b3Float4 *v, float x, float y, float z)
-{
- (*v).x = x;
- (*v).y = y;
- (*v).z = z;
- (*v).w = 0.f;
-}
-
-inline void b3MprVec3Add(b3Float4 *v, const b3Float4 *w)
-{
- (*v).x += (*w).x;
- (*v).y += (*w).y;
- (*v).z += (*w).z;
-}
-
-inline void b3MprVec3Copy(b3Float4 *v, const b3Float4 *w)
-{
- *v = *w;
-}
-
-inline void b3MprVec3Scale(b3Float4 *d, float k)
-{
- *d *= k;
-}
-
-inline float b3MprVec3Dot(const b3Float4 *a, const b3Float4 *b)
-{
- float dot;
-
- dot = b3Dot3F4(*a, *b);
- return dot;
-}
-
-inline float b3MprVec3Len2(const b3Float4 *v)
-{
- return b3MprVec3Dot(v, v);
-}
-
-inline void b3MprVec3Normalize(b3Float4 *d)
-{
- float k = 1.f / B3_MPR_SQRT(b3MprVec3Len2(d));
- b3MprVec3Scale(d, k);
-}
-
-inline void b3MprVec3Cross(b3Float4 *d, const b3Float4 *a, const b3Float4 *b)
-{
- *d = b3Cross3(*a, *b);
-}
-
-inline void b3MprVec3Sub2(b3Float4 *d, const b3Float4 *v, const b3Float4 *w)
-{
- *d = *v - *w;
-}
-
-inline void b3PortalDir(const b3MprSimplex_t *portal, b3Float4 *dir)
-{
- b3Float4 v2v1, v3v1;
-
- b3MprVec3Sub2(&v2v1, &b3MprSimplexPoint(portal, 2)->v,
- &b3MprSimplexPoint(portal, 1)->v);
- b3MprVec3Sub2(&v3v1, &b3MprSimplexPoint(portal, 3)->v,
- &b3MprSimplexPoint(portal, 1)->v);
- b3MprVec3Cross(dir, &v2v1, &v3v1);
- b3MprVec3Normalize(dir);
-}
-
-inline int portalEncapsulesOrigin(const b3MprSimplex_t *portal,
- const b3Float4 *dir)
-{
- float dot;
- dot = b3MprVec3Dot(dir, &b3MprSimplexPoint(portal, 1)->v);
- return b3MprIsZero(dot) || dot > 0.f;
-}
-
-inline int portalReachTolerance(const b3MprSimplex_t *portal,
- const b3MprSupport_t *v4,
- const b3Float4 *dir)
-{
- float dv1, dv2, dv3, dv4;
- float dot1, dot2, dot3;
-
- // find the smallest dot product of dir and {v1-v4, v2-v4, v3-v4}
-
- dv1 = b3MprVec3Dot(&b3MprSimplexPoint(portal, 1)->v, dir);
- dv2 = b3MprVec3Dot(&b3MprSimplexPoint(portal, 2)->v, dir);
- dv3 = b3MprVec3Dot(&b3MprSimplexPoint(portal, 3)->v, dir);
- dv4 = b3MprVec3Dot(&v4->v, dir);
-
- dot1 = dv4 - dv1;
- dot2 = dv4 - dv2;
- dot3 = dv4 - dv3;
-
- dot1 = B3_MPR_FMIN(dot1, dot2);
- dot1 = B3_MPR_FMIN(dot1, dot3);
-
- return b3MprEq(dot1, B3_MPR_TOLERANCE) || dot1 < B3_MPR_TOLERANCE;
-}
-
-inline int portalCanEncapsuleOrigin(const b3MprSimplex_t *portal,
- const b3MprSupport_t *v4,
- const b3Float4 *dir)
-{
- float dot;
- dot = b3MprVec3Dot(&v4->v, dir);
- return b3MprIsZero(dot) || dot > 0.f;
-}
-
-inline void b3ExpandPortal(b3MprSimplex_t *portal,
- const b3MprSupport_t *v4)
-{
- float dot;
- b3Float4 v4v0;
-
- b3MprVec3Cross(&v4v0, &v4->v, &b3MprSimplexPoint(portal, 0)->v);
- dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 1)->v, &v4v0);
- if (dot > 0.f)
- {
- dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 2)->v, &v4v0);
- if (dot > 0.f)
- {
- b3MprSimplexSet(portal, 1, v4);
- }
- else
- {
- b3MprSimplexSet(portal, 3, v4);
- }
- }
- else
- {
- dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 3)->v, &v4v0);
- if (dot > 0.f)
- {
- b3MprSimplexSet(portal, 2, v4);
- }
- else
- {
- b3MprSimplexSet(portal, 1, v4);
- }
- }
-}
-
-B3_STATIC int b3DiscoverPortal(int pairIndex, int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,
- b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData,
- b3ConstArray(b3Collidable_t) cpuCollidables,
- b3ConstArray(b3Float4) cpuVertices,
- __global b3Float4 *sepAxis,
- __global int *hasSepAxis,
- b3MprSimplex_t *portal)
-{
- b3Float4 dir, va, vb;
- float dot;
- int cont;
-
- // vertex 0 is center of portal
- b3FindOrigin(bodyIndexA, bodyIndexB, cpuBodyBuf, b3MprSimplexPointW(portal, 0));
- // vertex 0 is center of portal
- b3MprSimplexSetSize(portal, 1);
-
- b3Float4 zero = b3MakeFloat4(0, 0, 0, 0);
- b3Float4 *b3mpr_vec3_origin = &zero;
-
- if (b3MprVec3Eq(&b3MprSimplexPoint(portal, 0)->v, b3mpr_vec3_origin))
- {
- // Portal's center lies on origin (0,0,0) => we know that objects
- // intersect but we would need to know penetration info.
- // So move center little bit...
- b3MprVec3Set(&va, FLT_EPSILON * 10.f, 0.f, 0.f);
- b3MprVec3Add(&b3MprSimplexPointW(portal, 0)->v, &va);
- }
-
- // vertex 1 = support in direction of origin
- b3MprVec3Copy(&dir, &b3MprSimplexPoint(portal, 0)->v);
- b3MprVec3Scale(&dir, -1.f);
- b3MprVec3Normalize(&dir);
-
- b3MprSupport(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, b3MprSimplexPointW(portal, 1));
-
- b3MprSimplexSetSize(portal, 2);
-
- // test if origin isn't outside of v1
- dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 1)->v, &dir);
-
- if (b3MprIsZero(dot) || dot < 0.f)
- return -1;
-
- // vertex 2
- b3MprVec3Cross(&dir, &b3MprSimplexPoint(portal, 0)->v,
- &b3MprSimplexPoint(portal, 1)->v);
- if (b3MprIsZero(b3MprVec3Len2(&dir)))
- {
- if (b3MprVec3Eq(&b3MprSimplexPoint(portal, 1)->v, b3mpr_vec3_origin))
- {
- // origin lies on v1
- return 1;
- }
- else
- {
- // origin lies on v0-v1 segment
- return 2;
- }
- }
-
- b3MprVec3Normalize(&dir);
- b3MprSupport(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, b3MprSimplexPointW(portal, 2));
-
- dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 2)->v, &dir);
- if (b3MprIsZero(dot) || dot < 0.f)
- return -1;
-
- b3MprSimplexSetSize(portal, 3);
-
- // vertex 3 direction
- b3MprVec3Sub2(&va, &b3MprSimplexPoint(portal, 1)->v,
- &b3MprSimplexPoint(portal, 0)->v);
- b3MprVec3Sub2(&vb, &b3MprSimplexPoint(portal, 2)->v,
- &b3MprSimplexPoint(portal, 0)->v);
- b3MprVec3Cross(&dir, &va, &vb);
- b3MprVec3Normalize(&dir);
-
- // it is better to form portal faces to be oriented "outside" origin
- dot = b3MprVec3Dot(&dir, &b3MprSimplexPoint(portal, 0)->v);
- if (dot > 0.f)
- {
- b3MprSimplexSwap(portal, 1, 2);
- b3MprVec3Scale(&dir, -1.f);
- }
-
- while (b3MprSimplexSize(portal) < 4)
- {
- b3MprSupport(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, b3MprSimplexPointW(portal, 3));
-
- dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 3)->v, &dir);
- if (b3MprIsZero(dot) || dot < 0.f)
- return -1;
-
- cont = 0;
-
- // test if origin is outside (v1, v0, v3) - set v2 as v3 and
- // continue
- b3MprVec3Cross(&va, &b3MprSimplexPoint(portal, 1)->v,
- &b3MprSimplexPoint(portal, 3)->v);
- dot = b3MprVec3Dot(&va, &b3MprSimplexPoint(portal, 0)->v);
- if (dot < 0.f && !b3MprIsZero(dot))
- {
- b3MprSimplexSet(portal, 2, b3MprSimplexPoint(portal, 3));
- cont = 1;
- }
-
- if (!cont)
- {
- // test if origin is outside (v3, v0, v2) - set v1 as v3 and
- // continue
- b3MprVec3Cross(&va, &b3MprSimplexPoint(portal, 3)->v,
- &b3MprSimplexPoint(portal, 2)->v);
- dot = b3MprVec3Dot(&va, &b3MprSimplexPoint(portal, 0)->v);
- if (dot < 0.f && !b3MprIsZero(dot))
- {
- b3MprSimplexSet(portal, 1, b3MprSimplexPoint(portal, 3));
- cont = 1;
- }
- }
-
- if (cont)
- {
- b3MprVec3Sub2(&va, &b3MprSimplexPoint(portal, 1)->v,
- &b3MprSimplexPoint(portal, 0)->v);
- b3MprVec3Sub2(&vb, &b3MprSimplexPoint(portal, 2)->v,
- &b3MprSimplexPoint(portal, 0)->v);
- b3MprVec3Cross(&dir, &va, &vb);
- b3MprVec3Normalize(&dir);
- }
- else
- {
- b3MprSimplexSetSize(portal, 4);
- }
- }
-
- return 0;
-}
-
-B3_STATIC int b3RefinePortal(int pairIndex, int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,
- b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData,
- b3ConstArray(b3Collidable_t) cpuCollidables,
- b3ConstArray(b3Float4) cpuVertices,
- __global b3Float4 *sepAxis,
- b3MprSimplex_t *portal)
-{
- b3Float4 dir;
- b3MprSupport_t v4;
-
- for (int i = 0; i < B3_MPR_MAX_ITERATIONS; i++)
- //while (1)
- {
- // compute direction outside the portal (from v0 throught v1,v2,v3
- // face)
- b3PortalDir(portal, &dir);
-
- // test if origin is inside the portal
- if (portalEncapsulesOrigin(portal, &dir))
- return 0;
-
- // get next support point
-
- b3MprSupport(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, &v4);
-
- // test if v4 can expand portal to contain origin and if portal
- // expanding doesn't reach given tolerance
- if (!portalCanEncapsuleOrigin(portal, &v4, &dir) || portalReachTolerance(portal, &v4, &dir))
- {
- return -1;
- }
-
- // v1-v2-v3 triangle must be rearranged to face outside Minkowski
- // difference (direction from v0).
- b3ExpandPortal(portal, &v4);
- }
-
- return -1;
-}
-
-B3_STATIC void b3FindPos(const b3MprSimplex_t *portal, b3Float4 *pos)
-{
- b3Float4 zero = b3MakeFloat4(0, 0, 0, 0);
- b3Float4 *b3mpr_vec3_origin = &zero;
-
- b3Float4 dir;
- size_t i;
- float b[4], sum, inv;
- b3Float4 vec, p1, p2;
-
- b3PortalDir(portal, &dir);
-
- // use barycentric coordinates of tetrahedron to find origin
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 1)->v,
- &b3MprSimplexPoint(portal, 2)->v);
- b[0] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 3)->v);
-
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 3)->v,
- &b3MprSimplexPoint(portal, 2)->v);
- b[1] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 0)->v);
-
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 0)->v,
- &b3MprSimplexPoint(portal, 1)->v);
- b[2] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 3)->v);
-
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 2)->v,
- &b3MprSimplexPoint(portal, 1)->v);
- b[3] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 0)->v);
-
- sum = b[0] + b[1] + b[2] + b[3];
-
- if (b3MprIsZero(sum) || sum < 0.f)
- {
- b[0] = 0.f;
-
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 2)->v,
- &b3MprSimplexPoint(portal, 3)->v);
- b[1] = b3MprVec3Dot(&vec, &dir);
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 3)->v,
- &b3MprSimplexPoint(portal, 1)->v);
- b[2] = b3MprVec3Dot(&vec, &dir);
- b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 1)->v,
- &b3MprSimplexPoint(portal, 2)->v);
- b[3] = b3MprVec3Dot(&vec, &dir);
-
- sum = b[1] + b[2] + b[3];
- }
-
- inv = 1.f / sum;
-
- b3MprVec3Copy(&p1, b3mpr_vec3_origin);
- b3MprVec3Copy(&p2, b3mpr_vec3_origin);
- for (i = 0; i < 4; i++)
- {
- b3MprVec3Copy(&vec, &b3MprSimplexPoint(portal, i)->v1);
- b3MprVec3Scale(&vec, b[i]);
- b3MprVec3Add(&p1, &vec);
-
- b3MprVec3Copy(&vec, &b3MprSimplexPoint(portal, i)->v2);
- b3MprVec3Scale(&vec, b[i]);
- b3MprVec3Add(&p2, &vec);
- }
- b3MprVec3Scale(&p1, inv);
- b3MprVec3Scale(&p2, inv);
-
- b3MprVec3Copy(pos, &p1);
- b3MprVec3Add(pos, &p2);
- b3MprVec3Scale(pos, 0.5);
-}
-
-inline float b3MprVec3Dist2(const b3Float4 *a, const b3Float4 *b)
-{
- b3Float4 ab;
- b3MprVec3Sub2(&ab, a, b);
- return b3MprVec3Len2(&ab);
-}
-
-inline float _b3MprVec3PointSegmentDist2(const b3Float4 *P,
- const b3Float4 *x0,
- const b3Float4 *b,
- b3Float4 *witness)
-{
- // The computation comes from solving equation of segment:
- // S(t) = x0 + t.d
- // where - x0 is initial point of segment
- // - d is direction of segment from x0 (|d| > 0)
- // - t belongs to <0, 1> interval
- //
- // Than, distance from a segment to some point P can be expressed:
- // D(t) = |x0 + t.d - P|^2
- // which is distance from any point on segment. Minimization
- // of this function brings distance from P to segment.
- // Minimization of D(t) leads to simple quadratic equation that's
- // solving is straightforward.
- //
- // Bonus of this method is witness point for free.
-
- float dist, t;
- b3Float4 d, a;
-
- // direction of segment
- b3MprVec3Sub2(&d, b, x0);
-
- // precompute vector from P to x0
- b3MprVec3Sub2(&a, x0, P);
-
- t = -1.f * b3MprVec3Dot(&a, &d);
- t /= b3MprVec3Len2(&d);
-
- if (t < 0.f || b3MprIsZero(t))
- {
- dist = b3MprVec3Dist2(x0, P);
- if (witness)
- b3MprVec3Copy(witness, x0);
- }
- else if (t > 1.f || b3MprEq(t, 1.f))
- {
- dist = b3MprVec3Dist2(b, P);
- if (witness)
- b3MprVec3Copy(witness, b);
- }
- else
- {
- if (witness)
- {
- b3MprVec3Copy(witness, &d);
- b3MprVec3Scale(witness, t);
- b3MprVec3Add(witness, x0);
- dist = b3MprVec3Dist2(witness, P);
- }
- else
- {
- // recycling variables
- b3MprVec3Scale(&d, t);
- b3MprVec3Add(&d, &a);
- dist = b3MprVec3Len2(&d);
- }
- }
-
- return dist;
-}
-
-inline float b3MprVec3PointTriDist2(const b3Float4 *P,
- const b3Float4 *x0, const b3Float4 *B,
- const b3Float4 *C,
- b3Float4 *witness)
-{
- // Computation comes from analytic expression for triangle (x0, B, C)
- // T(s, t) = x0 + s.d1 + t.d2, where d1 = B - x0 and d2 = C - x0 and
- // Then equation for distance is:
- // D(s, t) = | T(s, t) - P |^2
- // This leads to minimization of quadratic function of two variables.
- // The solution from is taken only if s is between 0 and 1, t is
- // between 0 and 1 and t + s < 1, otherwise distance from segment is
- // computed.
-
- b3Float4 d1, d2, a;
- float u, v, w, p, q, r;
- float s, t, dist, dist2;
- b3Float4 witness2;
-
- b3MprVec3Sub2(&d1, B, x0);
- b3MprVec3Sub2(&d2, C, x0);
- b3MprVec3Sub2(&a, x0, P);
-
- u = b3MprVec3Dot(&a, &a);
- v = b3MprVec3Dot(&d1, &d1);
- w = b3MprVec3Dot(&d2, &d2);
- p = b3MprVec3Dot(&a, &d1);
- q = b3MprVec3Dot(&a, &d2);
- r = b3MprVec3Dot(&d1, &d2);
-
- s = (q * r - w * p) / (w * v - r * r);
- t = (-s * r - q) / w;
-
- if ((b3MprIsZero(s) || s > 0.f) && (b3MprEq(s, 1.f) || s < 1.f) && (b3MprIsZero(t) || t > 0.f) && (b3MprEq(t, 1.f) || t < 1.f) && (b3MprEq(t + s, 1.f) || t + s < 1.f))
- {
- if (witness)
- {
- b3MprVec3Scale(&d1, s);
- b3MprVec3Scale(&d2, t);
- b3MprVec3Copy(witness, x0);
- b3MprVec3Add(witness, &d1);
- b3MprVec3Add(witness, &d2);
-
- dist = b3MprVec3Dist2(witness, P);
- }
- else
- {
- dist = s * s * v;
- dist += t * t * w;
- dist += 2.f * s * t * r;
- dist += 2.f * s * p;
- dist += 2.f * t * q;
- dist += u;
- }
- }
- else
- {
- dist = _b3MprVec3PointSegmentDist2(P, x0, B, witness);
-
- dist2 = _b3MprVec3PointSegmentDist2(P, x0, C, &witness2);
- if (dist2 < dist)
- {
- dist = dist2;
- if (witness)
- b3MprVec3Copy(witness, &witness2);
- }
-
- dist2 = _b3MprVec3PointSegmentDist2(P, B, C, &witness2);
- if (dist2 < dist)
- {
- dist = dist2;
- if (witness)
- b3MprVec3Copy(witness, &witness2);
- }
- }
-
- return dist;
-}
-
-B3_STATIC void b3FindPenetr(int pairIndex, int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,
- b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData,
- b3ConstArray(b3Collidable_t) cpuCollidables,
- b3ConstArray(b3Float4) cpuVertices,
- __global b3Float4 *sepAxis,
- b3MprSimplex_t *portal,
- float *depth, b3Float4 *pdir, b3Float4 *pos)
-{
- b3Float4 dir;
- b3MprSupport_t v4;
- unsigned long iterations;
-
- b3Float4 zero = b3MakeFloat4(0, 0, 0, 0);
- b3Float4 *b3mpr_vec3_origin = &zero;
-
- iterations = 1UL;
- for (int i = 0; i < B3_MPR_MAX_ITERATIONS; i++)
- //while (1)
- {
- // compute portal direction and obtain next support point
- b3PortalDir(portal, &dir);
-
- b3MprSupport(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &dir, &v4);
-
- // reached tolerance -> find penetration info
- if (portalReachTolerance(portal, &v4, &dir) || iterations == B3_MPR_MAX_ITERATIONS)
- {
- *depth = b3MprVec3PointTriDist2(b3mpr_vec3_origin, &b3MprSimplexPoint(portal, 1)->v, &b3MprSimplexPoint(portal, 2)->v, &b3MprSimplexPoint(portal, 3)->v, pdir);
- *depth = B3_MPR_SQRT(*depth);
-
- if (b3MprIsZero((*pdir).x) && b3MprIsZero((*pdir).y) && b3MprIsZero((*pdir).z))
- {
- *pdir = dir;
- }
- b3MprVec3Normalize(pdir);
-
- // barycentric coordinates:
- b3FindPos(portal, pos);
-
- return;
- }
-
- b3ExpandPortal(portal, &v4);
-
- iterations++;
- }
-}
-
-B3_STATIC void b3FindPenetrTouch(b3MprSimplex_t *portal, float *depth, b3Float4 *dir, b3Float4 *pos)
-{
- // Touching contact on portal's v1 - so depth is zero and direction
- // is unimportant and pos can be guessed
- *depth = 0.f;
- b3Float4 zero = b3MakeFloat4(0, 0, 0, 0);
- b3Float4 *b3mpr_vec3_origin = &zero;
-
- b3MprVec3Copy(dir, b3mpr_vec3_origin);
-
- b3MprVec3Copy(pos, &b3MprSimplexPoint(portal, 1)->v1);
- b3MprVec3Add(pos, &b3MprSimplexPoint(portal, 1)->v2);
- b3MprVec3Scale(pos, 0.5);
-}
-
-B3_STATIC void b3FindPenetrSegment(b3MprSimplex_t *portal,
- float *depth, b3Float4 *dir, b3Float4 *pos)
-{
- // Origin lies on v0-v1 segment.
- // Depth is distance to v1, direction also and position must be
- // computed
-
- b3MprVec3Copy(pos, &b3MprSimplexPoint(portal, 1)->v1);
- b3MprVec3Add(pos, &b3MprSimplexPoint(portal, 1)->v2);
- b3MprVec3Scale(pos, 0.5f);
-
- b3MprVec3Copy(dir, &b3MprSimplexPoint(portal, 1)->v);
- *depth = B3_MPR_SQRT(b3MprVec3Len2(dir));
- b3MprVec3Normalize(dir);
-}
-
-inline int b3MprPenetration(int pairIndex, int bodyIndexA, int bodyIndexB,
- b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,
- b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData,
- b3ConstArray(b3Collidable_t) cpuCollidables,
- b3ConstArray(b3Float4) cpuVertices,
- __global b3Float4 *sepAxis,
- __global int *hasSepAxis,
- float *depthOut, b3Float4 *dirOut, b3Float4 *posOut)
-{
- b3MprSimplex_t portal;
-
- // if (!hasSepAxis[pairIndex])
- // return -1;
-
- hasSepAxis[pairIndex] = 0;
- int res;
-
- // Phase 1: Portal discovery
- res = b3DiscoverPortal(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, hasSepAxis, &portal);
-
- //sepAxis[pairIndex] = *pdir;//or -dir?
-
- switch (res)
- {
- case 0:
- {
- // Phase 2: Portal refinement
-
- res = b3RefinePortal(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &portal);
- if (res < 0)
- return -1;
-
- // Phase 3. Penetration info
- b3FindPenetr(pairIndex, bodyIndexA, bodyIndexB, cpuBodyBuf, cpuConvexData, cpuCollidables, cpuVertices, sepAxis, &portal, depthOut, dirOut, posOut);
- hasSepAxis[pairIndex] = 1;
- sepAxis[pairIndex] = -*dirOut;
- break;
- }
- case 1:
- {
- // Touching contact on portal's v1.
- b3FindPenetrTouch(&portal, depthOut, dirOut, posOut);
- break;
- }
- case 2:
- {
- b3FindPenetrSegment(&portal, depthOut, dirOut, posOut);
- break;
- }
- default:
- {
- hasSepAxis[pairIndex] = 0;
- //if (res < 0)
- //{
- // Origin isn't inside portal - no collision.
- return -1;
- //}
- }
- };
-
- return 0;
-};
-
-#endif //B3_MPR_PENETRATION_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3NewContactReduction.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3NewContactReduction.h
deleted file mode 100644
index 6e991e14b0..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3NewContactReduction.h
+++ /dev/null
@@ -1,175 +0,0 @@
-
-#ifndef B3_NEW_CONTACT_REDUCTION_H
-#define B3_NEW_CONTACT_REDUCTION_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#define GET_NPOINTS(x) (x).m_worldNormalOnB.w
-
-int b3ExtractManifoldSequentialGlobal(__global const b3Float4* p, int nPoints, b3Float4ConstArg nearNormal, b3Int4* contactIdx)
-{
- if (nPoints == 0)
- return 0;
-
- if (nPoints <= 4)
- return nPoints;
-
- if (nPoints > 64)
- nPoints = 64;
-
- b3Float4 center = b3MakeFloat4(0, 0, 0, 0);
- {
- for (int i = 0; i < nPoints; i++)
- center += p[i];
- center /= (float)nPoints;
- }
-
- // sample 4 directions
-
- b3Float4 aVector = p[0] - center;
- b3Float4 u = b3Cross(nearNormal, aVector);
- b3Float4 v = b3Cross(nearNormal, u);
- u = b3Normalized(u);
- v = b3Normalized(v);
-
- //keep point with deepest penetration
- float minW = FLT_MAX;
-
- int minIndex = -1;
-
- b3Float4 maxDots;
- maxDots.x = FLT_MIN;
- maxDots.y = FLT_MIN;
- maxDots.z = FLT_MIN;
- maxDots.w = FLT_MIN;
-
- // idx, distance
- for (int ie = 0; ie < nPoints; ie++)
- {
- if (p[ie].w < minW)
- {
- minW = p[ie].w;
- minIndex = ie;
- }
- float f;
- b3Float4 r = p[ie] - center;
- f = b3Dot(u, r);
- if (f < maxDots.x)
- {
- maxDots.x = f;
- contactIdx[0].x = ie;
- }
-
- f = b3Dot(-u, r);
- if (f < maxDots.y)
- {
- maxDots.y = f;
- contactIdx[0].y = ie;
- }
-
- f = b3Dot(v, r);
- if (f < maxDots.z)
- {
- maxDots.z = f;
- contactIdx[0].z = ie;
- }
-
- f = b3Dot(-v, r);
- if (f < maxDots.w)
- {
- maxDots.w = f;
- contactIdx[0].w = ie;
- }
- }
-
- if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)
- {
- //replace the first contact with minimum (todo: replace contact with least penetration)
- contactIdx[0].x = minIndex;
- }
-
- return 4;
-}
-
-__kernel void b3NewContactReductionKernel(__global b3Int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global struct b3Contact4Data* globalContactsOut,
- __global b3Int4* clippingFaces,
- __global b3Float4* worldVertsB2,
- volatile __global int* nGlobalContactsOut,
- int vertexFaceCapacity,
- int contactCapacity,
- int numPairs,
- int pairIndex)
-{
- // int i = get_global_id(0);
- //int pairIndex = i;
- int i = pairIndex;
-
- b3Int4 contactIdx;
- contactIdx = b3MakeInt4(0, 1, 2, 3);
-
- if (i < numPairs)
- {
- if (hasSeparatingAxis[i])
- {
- int nPoints = clippingFaces[pairIndex].w;
-
- if (nPoints > 0)
- {
- __global b3Float4* pointsIn = &worldVertsB2[pairIndex * vertexFaceCapacity];
- b3Float4 normal = -separatingNormals[i];
-
- int nReducedContacts = b3ExtractManifoldSequentialGlobal(pointsIn, nPoints, normal, &contactIdx);
-
- int dstIdx;
- dstIdx = b3AtomicInc(nGlobalContactsOut);
-
- //#if 0
- b3Assert(dstIdx < contactCapacity);
- if (dstIdx < contactCapacity)
- {
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f * 0xffff);
- c->m_frictionCoeffCmp = (0.7f * 0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
-
- pairs[pairIndex].w = dstIdx;
-
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass == 0 ? -bodyA : bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass == 0 ? -bodyB : bodyB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
-
- switch (nReducedContacts)
- {
- case 4:
- c->m_worldPosB[3] = pointsIn[contactIdx.w];
- case 3:
- c->m_worldPosB[2] = pointsIn[contactIdx.z];
- case 2:
- c->m_worldPosB[1] = pointsIn[contactIdx.y];
- case 1:
- c->m_worldPosB[0] = pointsIn[contactIdx.x];
- default:
- {
- }
- };
-
- GET_NPOINTS(*c) = nReducedContacts;
- }
-
- //#endif
-
- } // if (numContactsOut>0)
- } // if (hasSeparatingAxis[i])
- } // if (i<numPairs)
-}
-#endif
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h
deleted file mode 100644
index ba796eac72..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h
+++ /dev/null
@@ -1,88 +0,0 @@
-
-
-#ifndef B3_QUANTIZED_BVH_NODE_H
-#define B3_QUANTIZED_BVH_NODE_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-
-#define B3_MAX_NUM_PARTS_IN_BITS 10
-
-///b3QuantizedBvhNodeData is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-typedef struct b3QuantizedBvhNodeData b3QuantizedBvhNodeData_t;
-
-struct b3QuantizedBvhNodeData
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes
- int m_escapeIndexOrTriangleIndex;
-};
-
-inline int b3GetTriangleIndex(const b3QuantizedBvhNodeData* rootNode)
-{
- unsigned int x = 0;
- unsigned int y = (~(x & 0)) << (31 - B3_MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (rootNode->m_escapeIndexOrTriangleIndex & ~(y));
-}
-
-inline int b3IsLeaf(const b3QuantizedBvhNodeData* rootNode)
-{
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (rootNode->m_escapeIndexOrTriangleIndex >= 0) ? 1 : 0;
-}
-
-inline int b3GetEscapeIndex(const b3QuantizedBvhNodeData* rootNode)
-{
- return -rootNode->m_escapeIndexOrTriangleIndex;
-}
-
-inline void b3QuantizeWithClamp(unsigned short* out, b3Float4ConstArg point2, int isMax, b3Float4ConstArg bvhAabbMin, b3Float4ConstArg bvhAabbMax, b3Float4ConstArg bvhQuantization)
-{
- b3Float4 clampedPoint = b3MaxFloat4(point2, bvhAabbMin);
- clampedPoint = b3MinFloat4(clampedPoint, bvhAabbMax);
-
- b3Float4 v = (clampedPoint - bvhAabbMin) * bvhQuantization;
- if (isMax)
- {
- out[0] = (unsigned short)(((unsigned short)(v.x + 1.f) | 1));
- out[1] = (unsigned short)(((unsigned short)(v.y + 1.f) | 1));
- out[2] = (unsigned short)(((unsigned short)(v.z + 1.f) | 1));
- }
- else
- {
- out[0] = (unsigned short)(((unsigned short)(v.x) & 0xfffe));
- out[1] = (unsigned short)(((unsigned short)(v.y) & 0xfffe));
- out[2] = (unsigned short)(((unsigned short)(v.z) & 0xfffe));
- }
-}
-
-inline int b3TestQuantizedAabbAgainstQuantizedAabbSlow(
- const unsigned short int* aabbMin1,
- const unsigned short int* aabbMax1,
- const unsigned short int* aabbMin2,
- const unsigned short int* aabbMax2)
-{
- //int overlap = 1;
- if (aabbMin1[0] > aabbMax2[0])
- return 0;
- if (aabbMax1[0] < aabbMin2[0])
- return 0;
- if (aabbMin1[1] > aabbMax2[1])
- return 0;
- if (aabbMax1[1] < aabbMin2[1])
- return 0;
- if (aabbMin1[2] > aabbMax2[2])
- return 0;
- if (aabbMax1[2] < aabbMin2[2])
- return 0;
- return 1;
- //overlap = ((aabbMin1[0] > aabbMax2[0]) || (aabbMax1[0] < aabbMin2[0])) ? 0 : overlap;
- //overlap = ((aabbMin1[2] > aabbMax2[2]) || (aabbMax1[2] < aabbMin2[2])) ? 0 : overlap;
- //overlap = ((aabbMin1[1] > aabbMax2[1]) || (aabbMax1[1] < aabbMin2[1])) ? 0 : overlap;
- //return overlap;
-}
-
-#endif //B3_QUANTIZED_BVH_NODE_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ReduceContacts.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ReduceContacts.h
deleted file mode 100644
index c108255b9f..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3ReduceContacts.h
+++ /dev/null
@@ -1,89 +0,0 @@
-#ifndef B3_REDUCE_CONTACTS_H
-#define B3_REDUCE_CONTACTS_H
-
-inline int b3ReduceContacts(const b3Float4* p, int nPoints, const b3Float4& nearNormal, b3Int4* contactIdx)
-{
- if (nPoints == 0)
- return 0;
-
- if (nPoints <= 4)
- return nPoints;
-
- if (nPoints > 64)
- nPoints = 64;
-
- b3Float4 center = b3MakeFloat4(0, 0, 0, 0);
- {
- for (int i = 0; i < nPoints; i++)
- center += p[i];
- center /= (float)nPoints;
- }
-
- // sample 4 directions
-
- b3Float4 aVector = p[0] - center;
- b3Float4 u = b3Cross3(nearNormal, aVector);
- b3Float4 v = b3Cross3(nearNormal, u);
- u = b3FastNormalized3(u);
- v = b3FastNormalized3(v);
-
- //keep point with deepest penetration
- float minW = FLT_MAX;
-
- int minIndex = -1;
-
- b3Float4 maxDots;
- maxDots.x = FLT_MIN;
- maxDots.y = FLT_MIN;
- maxDots.z = FLT_MIN;
- maxDots.w = FLT_MIN;
-
- // idx, distance
- for (int ie = 0; ie < nPoints; ie++)
- {
- if (p[ie].w < minW)
- {
- minW = p[ie].w;
- minIndex = ie;
- }
- float f;
- b3Float4 r = p[ie] - center;
- f = b3Dot3F4(u, r);
- if (f < maxDots.x)
- {
- maxDots.x = f;
- contactIdx[0].x = ie;
- }
-
- f = b3Dot3F4(-u, r);
- if (f < maxDots.y)
- {
- maxDots.y = f;
- contactIdx[0].y = ie;
- }
-
- f = b3Dot3F4(v, r);
- if (f < maxDots.z)
- {
- maxDots.z = f;
- contactIdx[0].z = ie;
- }
-
- f = b3Dot3F4(-v, r);
- if (f < maxDots.w)
- {
- maxDots.w = f;
- contactIdx[0].w = ie;
- }
- }
-
- if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)
- {
- //replace the first contact with minimum (todo: replace contact with least penetration)
- contactIdx[0].x = minIndex;
- }
-
- return 4;
-}
-
-#endif //B3_REDUCE_CONTACTS_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h
deleted file mode 100644
index 663e946fc1..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef B3_RIGIDBODY_DATA_H
-#define B3_RIGIDBODY_DATA_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-#include "Bullet3Common/shared/b3Quat.h"
-#include "Bullet3Common/shared/b3Mat3x3.h"
-
-typedef struct b3RigidBodyData b3RigidBodyData_t;
-
-struct b3RigidBodyData
-{
- b3Float4 m_pos;
- b3Quat m_quat;
- b3Float4 m_linVel;
- b3Float4 m_angVel;
-
- int m_collidableIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-};
-
-typedef struct b3InertiaData b3InertiaData_t;
-
-struct b3InertiaData
-{
- b3Mat3x3 m_invInertiaWorld;
- b3Mat3x3 m_initInvInertia;
-};
-
-#endif //B3_RIGIDBODY_DATA_H
diff --git a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3UpdateAabbs.h b/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3UpdateAabbs.h
deleted file mode 100644
index e0c3a5cf97..0000000000
--- a/thirdparty/bullet/Bullet3Collision/NarrowPhaseCollision/shared/b3UpdateAabbs.h
+++ /dev/null
@@ -1,35 +0,0 @@
-#ifndef B3_UPDATE_AABBS_H
-#define B3_UPDATE_AABBS_H
-
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-void b3ComputeWorldAabb(int bodyId, __global const b3RigidBodyData_t* bodies, __global const b3Collidable_t* collidables, __global const b3Aabb_t* localShapeAABB, __global b3Aabb_t* worldAabbs)
-{
- __global const b3RigidBodyData_t* body = &bodies[bodyId];
-
- b3Float4 position = body->m_pos;
- b3Quat orientation = body->m_quat;
-
- int collidableIndex = body->m_collidableIdx;
- int shapeIndex = collidables[collidableIndex].m_shapeIndex;
-
- if (shapeIndex >= 0)
- {
- b3Aabb_t localAabb = localShapeAABB[collidableIndex];
- b3Aabb_t worldAabb;
-
- b3Float4 aabbAMinOut, aabbAMaxOut;
- float margin = 0.f;
- b3TransformAabb2(localAabb.m_minVec, localAabb.m_maxVec, margin, position, orientation, &aabbAMinOut, &aabbAMaxOut);
-
- worldAabb.m_minVec = aabbAMinOut;
- worldAabb.m_minIndices[3] = bodyId;
- worldAabb.m_maxVec = aabbAMaxOut;
- worldAabb.m_signedMaxIndices[3] = body[bodyId].m_invMass == 0.f ? 0 : 1;
- worldAabbs[bodyId] = worldAabb;
- }
-}
-
-#endif //B3_UPDATE_AABBS_H
diff --git a/thirdparty/bullet/Bullet3Common/b3AlignedAllocator.cpp b/thirdparty/bullet/Bullet3Common/b3AlignedAllocator.cpp
deleted file mode 100644
index d546d5e066..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3AlignedAllocator.cpp
+++ /dev/null
@@ -1,186 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3AlignedAllocator.h"
-
-#ifdef B3_ALLOCATOR_STATISTICS
-int b3g_numAlignedAllocs = 0;
-int b3g_numAlignedFree = 0;
-int b3g_totalBytesAlignedAllocs = 0; //detect memory leaks
-#endif
-
-static void *b3AllocDefault(size_t size)
-{
- return malloc(size);
-}
-
-static void b3FreeDefault(void *ptr)
-{
- free(ptr);
-}
-
-static b3AllocFunc *b3s_allocFunc = b3AllocDefault;
-static b3FreeFunc *b3s_freeFunc = b3FreeDefault;
-
-#if defined(B3_HAS_ALIGNED_ALLOCATOR)
-#include <malloc.h>
-static void *b3AlignedAllocDefault(size_t size, int alignment)
-{
- return _aligned_malloc(size, (size_t)alignment);
-}
-
-static void b3AlignedFreeDefault(void *ptr)
-{
- _aligned_free(ptr);
-}
-#elif defined(__CELLOS_LV2__)
-#include <stdlib.h>
-
-static inline void *b3AlignedAllocDefault(size_t size, int alignment)
-{
- return memalign(alignment, size);
-}
-
-static inline void b3AlignedFreeDefault(void *ptr)
-{
- free(ptr);
-}
-#else
-
-static inline void *b3AlignedAllocDefault(size_t size, int alignment)
-{
- void *ret;
- char *real;
- real = (char *)b3s_allocFunc(size + sizeof(void *) + (alignment - 1));
- if (real)
- {
- ret = b3AlignPointer(real + sizeof(void *), alignment);
- *((void **)(ret)-1) = (void *)(real);
- }
- else
- {
- ret = (void *)(real);
- }
- return (ret);
-}
-
-static inline void b3AlignedFreeDefault(void *ptr)
-{
- void *real;
-
- if (ptr)
- {
- real = *((void **)(ptr)-1);
- b3s_freeFunc(real);
- }
-}
-#endif
-
-static b3AlignedAllocFunc *b3s_alignedAllocFunc = b3AlignedAllocDefault;
-static b3AlignedFreeFunc *b3s_alignedFreeFunc = b3AlignedFreeDefault;
-
-void b3AlignedAllocSetCustomAligned(b3AlignedAllocFunc *allocFunc, b3AlignedFreeFunc *freeFunc)
-{
- b3s_alignedAllocFunc = allocFunc ? allocFunc : b3AlignedAllocDefault;
- b3s_alignedFreeFunc = freeFunc ? freeFunc : b3AlignedFreeDefault;
-}
-
-void b3AlignedAllocSetCustom(b3AllocFunc *allocFunc, b3FreeFunc *freeFunc)
-{
- b3s_allocFunc = allocFunc ? allocFunc : b3AllocDefault;
- b3s_freeFunc = freeFunc ? freeFunc : b3FreeDefault;
-}
-
-#ifdef B3_DEBUG_MEMORY_ALLOCATIONS
-//this generic allocator provides the total allocated number of bytes
-#include <stdio.h>
-
-void *b3AlignedAllocInternal(size_t size, int alignment, int line, char *filename)
-{
- void *ret;
- char *real;
-#ifdef B3_ALLOCATOR_STATISTICS
- b3g_totalBytesAlignedAllocs += size;
- b3g_numAlignedAllocs++;
-#endif
- real = (char *)b3s_allocFunc(size + 2 * sizeof(void *) + (alignment - 1));
- if (real)
- {
- ret = (void *)b3AlignPointer(real + 2 * sizeof(void *), alignment);
- *((void **)(ret)-1) = (void *)(real);
- *((int *)(ret)-2) = size;
- }
- else
- {
- ret = (void *)(real); //??
- }
-
- b3Printf("allocation#%d at address %x, from %s,line %d, size %d\n", b3g_numAlignedAllocs, real, filename, line, size);
-
- int *ptr = (int *)ret;
- *ptr = 12;
- return (ret);
-}
-
-void b3AlignedFreeInternal(void *ptr, int line, char *filename)
-{
- void *real;
-#ifdef B3_ALLOCATOR_STATISTICS
- b3g_numAlignedFree++;
-#endif
- if (ptr)
- {
- real = *((void **)(ptr)-1);
- int size = *((int *)(ptr)-2);
-#ifdef B3_ALLOCATOR_STATISTICS
- b3g_totalBytesAlignedAllocs -= size;
-#endif
- b3Printf("free #%d at address %x, from %s,line %d, size %d\n", b3g_numAlignedFree, real, filename, line, size);
-
- b3s_freeFunc(real);
- }
- else
- {
- b3Printf("NULL ptr\n");
- }
-}
-
-#else //B3_DEBUG_MEMORY_ALLOCATIONS
-
-void *b3AlignedAllocInternal(size_t size, int alignment)
-{
-#ifdef B3_ALLOCATOR_STATISTICS
- b3g_numAlignedAllocs++;
-#endif
- void *ptr;
- ptr = b3s_alignedAllocFunc(size, alignment);
- // b3Printf("b3AlignedAllocInternal %d, %x\n",size,ptr);
- return ptr;
-}
-
-void b3AlignedFreeInternal(void *ptr)
-{
- if (!ptr)
- {
- return;
- }
-#ifdef B3_ALLOCATOR_STATISTICS
- b3g_numAlignedFree++;
-#endif
- // b3Printf("b3AlignedFreeInternal %x\n",ptr);
- b3s_alignedFreeFunc(ptr);
-}
-
-#endif //B3_DEBUG_MEMORY_ALLOCATIONS
diff --git a/thirdparty/bullet/Bullet3Common/b3AlignedAllocator.h b/thirdparty/bullet/Bullet3Common/b3AlignedAllocator.h
deleted file mode 100644
index bcff9f128e..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3AlignedAllocator.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_ALIGNED_ALLOCATOR
-#define B3_ALIGNED_ALLOCATOR
-
-///we probably replace this with our own aligned memory allocator
-///so we replace _aligned_malloc and _aligned_free with our own
-///that is better portable and more predictable
-
-#include "b3Scalar.h"
-//#define B3_DEBUG_MEMORY_ALLOCATIONS 1
-#ifdef B3_DEBUG_MEMORY_ALLOCATIONS
-
-#define b3AlignedAlloc(a, b) \
- b3AlignedAllocInternal(a, b, __LINE__, __FILE__)
-
-#define b3AlignedFree(ptr) \
- b3AlignedFreeInternal(ptr, __LINE__, __FILE__)
-
-void* b3AlignedAllocInternal(size_t size, int alignment, int line, char* filename);
-
-void b3AlignedFreeInternal(void* ptr, int line, char* filename);
-
-#else
-void* b3AlignedAllocInternal(size_t size, int alignment);
-void b3AlignedFreeInternal(void* ptr);
-
-#define b3AlignedAlloc(size, alignment) b3AlignedAllocInternal(size, alignment)
-#define b3AlignedFree(ptr) b3AlignedFreeInternal(ptr)
-
-#endif
-typedef int btSizeType;
-
-typedef void*(b3AlignedAllocFunc)(size_t size, int alignment);
-typedef void(b3AlignedFreeFunc)(void* memblock);
-typedef void*(b3AllocFunc)(size_t size);
-typedef void(b3FreeFunc)(void* memblock);
-
-///The developer can let all Bullet memory allocations go through a custom memory allocator, using b3AlignedAllocSetCustom
-void b3AlignedAllocSetCustom(b3AllocFunc* allocFunc, b3FreeFunc* freeFunc);
-///If the developer has already an custom aligned allocator, then b3AlignedAllocSetCustomAligned can be used. The default aligned allocator pre-allocates extra memory using the non-aligned allocator, and instruments it.
-void b3AlignedAllocSetCustomAligned(b3AlignedAllocFunc* allocFunc, b3AlignedFreeFunc* freeFunc);
-
-///The b3AlignedAllocator is a portable class for aligned memory allocations.
-///Default implementations for unaligned and aligned allocations can be overridden by a custom allocator using b3AlignedAllocSetCustom and b3AlignedAllocSetCustomAligned.
-template <typename T, unsigned Alignment>
-class b3AlignedAllocator
-{
- typedef b3AlignedAllocator<T, Alignment> self_type;
-
-public:
- //just going down a list:
- b3AlignedAllocator() {}
- /*
- b3AlignedAllocator( const self_type & ) {}
- */
-
- template <typename Other>
- b3AlignedAllocator(const b3AlignedAllocator<Other, Alignment>&)
- {
- }
-
- typedef const T* const_pointer;
- typedef const T& const_reference;
- typedef T* pointer;
- typedef T& reference;
- typedef T value_type;
-
- pointer address(reference ref) const { return &ref; }
- const_pointer address(const_reference ref) const { return &ref; }
- pointer allocate(btSizeType n, const_pointer* hint = 0)
- {
- (void)hint;
- return reinterpret_cast<pointer>(b3AlignedAlloc(sizeof(value_type) * n, Alignment));
- }
- void construct(pointer ptr, const value_type& value) { new (ptr) value_type(value); }
- void deallocate(pointer ptr)
- {
- b3AlignedFree(reinterpret_cast<void*>(ptr));
- }
- void destroy(pointer ptr) { ptr->~value_type(); }
-
- template <typename O>
- struct rebind
- {
- typedef b3AlignedAllocator<O, Alignment> other;
- };
- template <typename O>
- self_type& operator=(const b3AlignedAllocator<O, Alignment>&)
- {
- return *this;
- }
-
- friend bool operator==(const self_type&, const self_type&) { return true; }
-};
-
-#endif //B3_ALIGNED_ALLOCATOR
diff --git a/thirdparty/bullet/Bullet3Common/b3AlignedObjectArray.h b/thirdparty/bullet/Bullet3Common/b3AlignedObjectArray.h
deleted file mode 100644
index 249e381bf1..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3AlignedObjectArray.h
+++ /dev/null
@@ -1,522 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_OBJECT_ARRAY__
-#define B3_OBJECT_ARRAY__
-
-#include "b3Scalar.h" // has definitions like B3_FORCE_INLINE
-#include "b3AlignedAllocator.h"
-
-///If the platform doesn't support placement new, you can disable B3_USE_PLACEMENT_NEW
-///then the b3AlignedObjectArray doesn't support objects with virtual methods, and non-trivial constructors/destructors
-///You can enable B3_USE_MEMCPY, then swapping elements in the array will use memcpy instead of operator=
-///see discussion here: http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1231 and
-///http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1240
-
-#define B3_USE_PLACEMENT_NEW 1
-//#define B3_USE_MEMCPY 1 //disable, because it is cumbersome to find out for each platform where memcpy is defined. It can be in <memory.h> or <string.h> or otherwise...
-#define B3_ALLOW_ARRAY_COPY_OPERATOR // enabling this can accidently perform deep copies of data if you are not careful
-
-#ifdef B3_USE_MEMCPY
-#include <memory.h>
-#include <string.h>
-#endif //B3_USE_MEMCPY
-
-#ifdef B3_USE_PLACEMENT_NEW
-#include <new> //for placement new
-#endif //B3_USE_PLACEMENT_NEW
-
-///The b3AlignedObjectArray template class uses a subset of the stl::vector interface for its methods
-///It is developed to replace stl::vector to avoid portability issues, including STL alignment issues to add SIMD/SSE data
-template <typename T>
-//template <class T>
-class b3AlignedObjectArray
-{
- b3AlignedAllocator<T, 16> m_allocator;
-
- int m_size;
- int m_capacity;
- T* m_data;
- //PCK: added this line
- bool m_ownsMemory;
-
-#ifdef B3_ALLOW_ARRAY_COPY_OPERATOR
-public:
- B3_FORCE_INLINE b3AlignedObjectArray<T>& operator=(const b3AlignedObjectArray<T>& other)
- {
- copyFromArray(other);
- return *this;
- }
-#else //B3_ALLOW_ARRAY_COPY_OPERATOR
-private:
- B3_FORCE_INLINE b3AlignedObjectArray<T>& operator=(const b3AlignedObjectArray<T>& other);
-#endif //B3_ALLOW_ARRAY_COPY_OPERATOR
-
-protected:
- B3_FORCE_INLINE int allocSize(int size)
- {
- return (size ? size * 2 : 1);
- }
- B3_FORCE_INLINE void copy(int start, int end, T* dest) const
- {
- int i;
- for (i = start; i < end; ++i)
-#ifdef B3_USE_PLACEMENT_NEW
- new (&dest[i]) T(m_data[i]);
-#else
- dest[i] = m_data[i];
-#endif //B3_USE_PLACEMENT_NEW
- }
-
- B3_FORCE_INLINE void init()
- {
- //PCK: added this line
- m_ownsMemory = true;
- m_data = 0;
- m_size = 0;
- m_capacity = 0;
- }
- B3_FORCE_INLINE void destroy(int first, int last)
- {
- int i;
- for (i = first; i < last; i++)
- {
- m_data[i].~T();
- }
- }
-
- B3_FORCE_INLINE void* allocate(int size)
- {
- if (size)
- return m_allocator.allocate(size);
- return 0;
- }
-
- B3_FORCE_INLINE void deallocate()
- {
- if (m_data)
- {
- //PCK: enclosed the deallocation in this block
- if (m_ownsMemory)
- {
- m_allocator.deallocate(m_data);
- }
- m_data = 0;
- }
- }
-
-public:
- b3AlignedObjectArray()
- {
- init();
- }
-
- ~b3AlignedObjectArray()
- {
- clear();
- }
-
- ///Generally it is best to avoid using the copy constructor of an b3AlignedObjectArray, and use a (const) reference to the array instead.
- b3AlignedObjectArray(const b3AlignedObjectArray& otherArray)
- {
- init();
-
- int otherSize = otherArray.size();
- resize(otherSize);
- otherArray.copy(0, otherSize, m_data);
- }
-
- /// return the number of elements in the array
- B3_FORCE_INLINE int size() const
- {
- return m_size;
- }
-
- B3_FORCE_INLINE const T& at(int n) const
- {
- b3Assert(n >= 0);
- b3Assert(n < size());
- return m_data[n];
- }
-
- B3_FORCE_INLINE T& at(int n)
- {
- b3Assert(n >= 0);
- b3Assert(n < size());
- return m_data[n];
- }
-
- B3_FORCE_INLINE const T& operator[](int n) const
- {
- b3Assert(n >= 0);
- b3Assert(n < size());
- return m_data[n];
- }
-
- B3_FORCE_INLINE T& operator[](int n)
- {
- b3Assert(n >= 0);
- b3Assert(n < size());
- return m_data[n];
- }
-
- ///clear the array, deallocated memory. Generally it is better to use array.resize(0), to reduce performance overhead of run-time memory (de)allocations.
- B3_FORCE_INLINE void clear()
- {
- destroy(0, size());
-
- deallocate();
-
- init();
- }
-
- B3_FORCE_INLINE void pop_back()
- {
- b3Assert(m_size > 0);
- m_size--;
- m_data[m_size].~T();
- }
-
- ///resize changes the number of elements in the array. If the new size is larger, the new elements will be constructed using the optional second argument.
- ///when the new number of elements is smaller, the destructor will be called, but memory will not be freed, to reduce performance overhead of run-time memory (de)allocations.
- B3_FORCE_INLINE void resizeNoInitialize(int newsize)
- {
- int curSize = size();
-
- if (newsize < curSize)
- {
- }
- else
- {
- if (newsize > size())
- {
- reserve(newsize);
- }
- //leave this uninitialized
- }
- m_size = newsize;
- }
-
- B3_FORCE_INLINE void resize(int newsize, const T& fillData = T())
- {
- int curSize = size();
-
- if (newsize < curSize)
- {
- for (int i = newsize; i < curSize; i++)
- {
- m_data[i].~T();
- }
- }
- else
- {
- if (newsize > size())
- {
- reserve(newsize);
- }
-#ifdef B3_USE_PLACEMENT_NEW
- for (int i = curSize; i < newsize; i++)
- {
- new (&m_data[i]) T(fillData);
- }
-#endif //B3_USE_PLACEMENT_NEW
- }
-
- m_size = newsize;
- }
- B3_FORCE_INLINE T& expandNonInitializing()
- {
- int sz = size();
- if (sz == capacity())
- {
- reserve(allocSize(size()));
- }
- m_size++;
-
- return m_data[sz];
- }
-
- B3_FORCE_INLINE T& expand(const T& fillValue = T())
- {
- int sz = size();
- if (sz == capacity())
- {
- reserve(allocSize(size()));
- }
- m_size++;
-#ifdef B3_USE_PLACEMENT_NEW
- new (&m_data[sz]) T(fillValue); //use the in-place new (not really allocating heap memory)
-#endif
-
- return m_data[sz];
- }
-
- B3_FORCE_INLINE void push_back(const T& _Val)
- {
- int sz = size();
- if (sz == capacity())
- {
- reserve(allocSize(size()));
- }
-
-#ifdef B3_USE_PLACEMENT_NEW
- new (&m_data[m_size]) T(_Val);
-#else
- m_data[size()] = _Val;
-#endif //B3_USE_PLACEMENT_NEW
-
- m_size++;
- }
-
- /// return the pre-allocated (reserved) elements, this is at least as large as the total number of elements,see size() and reserve()
- B3_FORCE_INLINE int capacity() const
- {
- return m_capacity;
- }
-
- B3_FORCE_INLINE void reserve(int _Count)
- { // determine new minimum length of allocated storage
- if (capacity() < _Count)
- { // not enough room, reallocate
- T* s = (T*)allocate(_Count);
- b3Assert(s);
- if (s == 0)
- {
- b3Error("b3AlignedObjectArray reserve out-of-memory\n");
- _Count = 0;
- m_size = 0;
- }
- copy(0, size(), s);
-
- destroy(0, size());
-
- deallocate();
-
- //PCK: added this line
- m_ownsMemory = true;
-
- m_data = s;
-
- m_capacity = _Count;
- }
- }
-
- class less
- {
- public:
- bool operator()(const T& a, const T& b)
- {
- return (a < b);
- }
- };
-
- template <typename L>
- void quickSortInternal(const L& CompareFunc, int lo, int hi)
- {
- // lo is the lower index, hi is the upper index
- // of the region of array a that is to be sorted
- int i = lo, j = hi;
- T x = m_data[(lo + hi) / 2];
-
- // partition
- do
- {
- while (CompareFunc(m_data[i], x))
- i++;
- while (CompareFunc(x, m_data[j]))
- j--;
- if (i <= j)
- {
- swap(i, j);
- i++;
- j--;
- }
- } while (i <= j);
-
- // recursion
- if (lo < j)
- quickSortInternal(CompareFunc, lo, j);
- if (i < hi)
- quickSortInternal(CompareFunc, i, hi);
- }
-
- template <typename L>
- void quickSort(const L& CompareFunc)
- {
- //don't sort 0 or 1 elements
- if (size() > 1)
- {
- quickSortInternal(CompareFunc, 0, size() - 1);
- }
- }
-
- ///heap sort from http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Heap/
- template <typename L>
- void downHeap(T* pArr, int k, int n, const L& CompareFunc)
- {
- /* PRE: a[k+1..N] is a heap */
- /* POST: a[k..N] is a heap */
-
- T temp = pArr[k - 1];
- /* k has child(s) */
- while (k <= n / 2)
- {
- int child = 2 * k;
-
- if ((child < n) && CompareFunc(pArr[child - 1], pArr[child]))
- {
- child++;
- }
- /* pick larger child */
- if (CompareFunc(temp, pArr[child - 1]))
- {
- /* move child up */
- pArr[k - 1] = pArr[child - 1];
- k = child;
- }
- else
- {
- break;
- }
- }
- pArr[k - 1] = temp;
- } /*downHeap*/
-
- void swap(int index0, int index1)
- {
-#ifdef B3_USE_MEMCPY
- char temp[sizeof(T)];
- memcpy(temp, &m_data[index0], sizeof(T));
- memcpy(&m_data[index0], &m_data[index1], sizeof(T));
- memcpy(&m_data[index1], temp, sizeof(T));
-#else
- T temp = m_data[index0];
- m_data[index0] = m_data[index1];
- m_data[index1] = temp;
-#endif //B3_USE_PLACEMENT_NEW
- }
-
- template <typename L>
- void heapSort(const L& CompareFunc)
- {
- /* sort a[0..N-1], N.B. 0 to N-1 */
- int k;
- int n = m_size;
- for (k = n / 2; k > 0; k--)
- {
- downHeap(m_data, k, n, CompareFunc);
- }
-
- /* a[1..N] is now a heap */
- while (n >= 1)
- {
- swap(0, n - 1); /* largest of a[0..n-1] */
-
- n = n - 1;
- /* restore a[1..i-1] heap */
- downHeap(m_data, 1, n, CompareFunc);
- }
- }
-
- ///non-recursive binary search, assumes sorted array
- int findBinarySearch(const T& key) const
- {
- int first = 0;
- int last = size() - 1;
-
- //assume sorted array
- while (first <= last)
- {
- int mid = (first + last) / 2; // compute mid point.
- if (key > m_data[mid])
- first = mid + 1; // repeat search in top half.
- else if (key < m_data[mid])
- last = mid - 1; // repeat search in bottom half.
- else
- return mid; // found it. return position /////
- }
- return size(); // failed to find key
- }
-
- int findLinearSearch(const T& key) const
- {
- int index = size();
- int i;
-
- for (i = 0; i < size(); i++)
- {
- if (m_data[i] == key)
- {
- index = i;
- break;
- }
- }
- return index;
- }
-
- int findLinearSearch2(const T& key) const
- {
- int index = -1;
- int i;
-
- for (i = 0; i < size(); i++)
- {
- if (m_data[i] == key)
- {
- index = i;
- break;
- }
- }
- return index;
- }
-
- void remove(const T& key)
- {
- int findIndex = findLinearSearch(key);
- if (findIndex < size())
- {
- swap(findIndex, size() - 1);
- pop_back();
- }
- }
-
- //PCK: whole function
- void initializeFromBuffer(void* buffer, int size, int capacity)
- {
- clear();
- m_ownsMemory = false;
- m_data = (T*)buffer;
- m_size = size;
- m_capacity = capacity;
- }
-
- void copyFromArray(const b3AlignedObjectArray& otherArray)
- {
- int otherSize = otherArray.size();
- resize(otherSize);
- otherArray.copy(0, otherSize, m_data);
- }
-
- void removeAtIndex(int index)
- {
- if (index < size())
- {
- swap(index, size() - 1);
- pop_back();
- }
- }
-};
-
-#endif //B3_OBJECT_ARRAY__
diff --git a/thirdparty/bullet/Bullet3Common/b3CommandLineArgs.h b/thirdparty/bullet/Bullet3Common/b3CommandLineArgs.h
deleted file mode 100644
index 5fe4f25f8d..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3CommandLineArgs.h
+++ /dev/null
@@ -1,106 +0,0 @@
-#ifndef COMMAND_LINE_ARGS_H
-#define COMMAND_LINE_ARGS_H
-
-/******************************************************************************
- * Command-line parsing
- ******************************************************************************/
-#include <map>
-#include <algorithm>
-#include <string>
-#include <cstring>
-#include <sstream>
-class b3CommandLineArgs
-{
-protected:
- std::map<std::string, std::string> pairs;
-
-public:
- // Constructor
- b3CommandLineArgs(int argc, char **argv)
- {
- addArgs(argc, argv);
- }
-
- void addArgs(int argc, char **argv)
- {
- for (int i = 1; i < argc; i++)
- {
- std::string arg = argv[i];
-
- if ((arg.length() < 2) || (arg[0] != '-') || (arg[1] != '-'))
- {
- continue;
- }
-
- std::string::size_type pos;
- std::string key, val;
- if ((pos = arg.find('=')) == std::string::npos)
- {
- key = std::string(arg, 2, arg.length() - 2);
- val = "";
- }
- else
- {
- key = std::string(arg, 2, pos - 2);
- val = std::string(arg, pos + 1, arg.length() - 1);
- }
-
- //only add new keys, don't replace existing
- if (pairs.find(key) == pairs.end())
- {
- pairs[key] = val;
- }
- }
- }
-
- bool CheckCmdLineFlag(const char *arg_name)
- {
- std::map<std::string, std::string>::iterator itr;
- if ((itr = pairs.find(arg_name)) != pairs.end())
- {
- return true;
- }
- return false;
- }
-
- template <typename T>
- bool GetCmdLineArgument(const char *arg_name, T &val);
-
- int ParsedArgc()
- {
- return pairs.size();
- }
-};
-
-template <typename T>
-inline bool b3CommandLineArgs::GetCmdLineArgument(const char *arg_name, T &val)
-{
- std::map<std::string, std::string>::iterator itr;
- if ((itr = pairs.find(arg_name)) != pairs.end())
- {
- std::istringstream strstream(itr->second);
- strstream >> val;
- return true;
- }
- return false;
-}
-
-template <>
-inline bool b3CommandLineArgs::GetCmdLineArgument<char *>(const char *arg_name, char *&val)
-{
- std::map<std::string, std::string>::iterator itr;
- if ((itr = pairs.find(arg_name)) != pairs.end())
- {
- std::string s = itr->second;
- val = (char *)malloc(sizeof(char) * (s.length() + 1));
- std::strcpy(val, s.c_str());
- return true;
- }
- else
- {
- val = NULL;
- }
- return false;
-}
-
-#endif //COMMAND_LINE_ARGS_H
diff --git a/thirdparty/bullet/Bullet3Common/b3FileUtils.h b/thirdparty/bullet/Bullet3Common/b3FileUtils.h
deleted file mode 100644
index 9ded17eaaf..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3FileUtils.h
+++ /dev/null
@@ -1,133 +0,0 @@
-#ifndef B3_FILE_UTILS_H
-#define B3_FILE_UTILS_H
-
-#include <stdio.h>
-#include "b3Scalar.h"
-#include <stddef.h> //ptrdiff_h
-#include <string.h>
-
-struct b3FileUtils
-{
- b3FileUtils()
- {
- }
- virtual ~b3FileUtils()
- {
- }
-
- static bool findFile(const char* orgFileName, char* relativeFileName, int maxRelativeFileNameMaxLen)
- {
- FILE* f = 0;
- f = fopen(orgFileName, "rb");
- if (f)
- {
- //printf("original file found: [%s]\n", orgFileName);
- sprintf(relativeFileName, "%s", orgFileName);
- fclose(f);
- return true;
- }
-
- //printf("Trying various directories, relative to current working directory\n");
- const char* prefix[] = {"./", "./data/", "../data/", "../../data/", "../../../data/", "../../../../data/"};
- int numPrefixes = sizeof(prefix) / sizeof(const char*);
-
- f = 0;
- bool fileFound = false;
-
- for (int i = 0; !f && i < numPrefixes; i++)
- {
-#ifdef _MSC_VER
- sprintf_s(relativeFileName, maxRelativeFileNameMaxLen, "%s%s", prefix[i], orgFileName);
-#else
- sprintf(relativeFileName, "%s%s", prefix[i], orgFileName);
-#endif
- f = fopen(relativeFileName, "rb");
- if (f)
- {
- fileFound = true;
- break;
- }
- }
- if (f)
- {
- fclose(f);
- }
-
- return fileFound;
- }
-
- static const char* strip2(const char* name, const char* pattern)
- {
- size_t const patlen = strlen(pattern);
- size_t patcnt = 0;
- const char* oriptr;
- const char* patloc;
- // find how many times the pattern occurs in the original string
- for (oriptr = name; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen)
- {
- patcnt++;
- }
- return oriptr;
- }
-
- static int extractPath(const char* fileName, char* path, int maxPathLength)
- {
- const char* stripped = strip2(fileName, "/");
- stripped = strip2(stripped, "\\");
-
- ptrdiff_t len = stripped - fileName;
- b3Assert((len + 1) < maxPathLength);
-
- if (len && ((len + 1) < maxPathLength))
- {
- for (int i = 0; i < len; i++)
- {
- path[i] = fileName[i];
- }
- path[len] = 0;
- }
- else
- {
- len = 0;
- b3Assert(maxPathLength > 0);
- if (maxPathLength > 0)
- {
- path[len] = 0;
- }
- }
- return len;
- }
-
- static char toLowerChar(const char t)
- {
- if (t >= (char)'A' && t <= (char)'Z')
- return t + ((char)'a' - (char)'A');
- else
- return t;
- }
-
- static void toLower(char* str)
- {
- int len = strlen(str);
- for (int i = 0; i < len; i++)
- {
- str[i] = toLowerChar(str[i]);
- }
- }
-
- /*static const char* strip2(const char* name, const char* pattern)
- {
- size_t const patlen = strlen(pattern);
- size_t patcnt = 0;
- const char * oriptr;
- const char * patloc;
- // find how many times the pattern occurs in the original string
- for (oriptr = name; patloc = strstr(oriptr, pattern); oriptr = patloc + patlen)
- {
- patcnt++;
- }
- return oriptr;
- }
- */
-};
-#endif //B3_FILE_UTILS_H
diff --git a/thirdparty/bullet/Bullet3Common/b3HashMap.h b/thirdparty/bullet/Bullet3Common/b3HashMap.h
deleted file mode 100644
index 3009e2cf2f..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3HashMap.h
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_HASH_MAP_H
-#define B3_HASH_MAP_H
-
-#include "b3AlignedObjectArray.h"
-
-#include <string>
-
-///very basic hashable string implementation, compatible with b3HashMap
-struct b3HashString
-{
- std::string m_string;
- unsigned int m_hash;
-
- B3_FORCE_INLINE unsigned int getHash() const
- {
- return m_hash;
- }
-
- b3HashString(const char* name)
- : m_string(name)
- {
- /* magic numbers from http://www.isthe.com/chongo/tech/comp/fnv/ */
- static const unsigned int InitialFNV = 2166136261u;
- static const unsigned int FNVMultiple = 16777619u;
-
- /* Fowler / Noll / Vo (FNV) Hash */
- unsigned int hash = InitialFNV;
- int len = m_string.length();
- for (int i = 0; i < len; i++)
- {
- hash = hash ^ (m_string[i]); /* xor the low 8 bits */
- hash = hash * FNVMultiple; /* multiply by the magic number */
- }
- m_hash = hash;
- }
-
- int portableStringCompare(const char* src, const char* dst) const
- {
- int ret = 0;
-
- while (!(ret = *(unsigned char*)src - *(unsigned char*)dst) && *dst)
- ++src, ++dst;
-
- if (ret < 0)
- ret = -1;
- else if (ret > 0)
- ret = 1;
-
- return (ret);
- }
-
- bool equals(const b3HashString& other) const
- {
- return (m_string == other.m_string);
- }
-};
-
-const int B3_HASH_NULL = 0xffffffff;
-
-class b3HashInt
-{
- int m_uid;
-
-public:
- b3HashInt(int uid) : m_uid(uid)
- {
- }
-
- int getUid1() const
- {
- return m_uid;
- }
-
- void setUid1(int uid)
- {
- m_uid = uid;
- }
-
- bool equals(const b3HashInt& other) const
- {
- return getUid1() == other.getUid1();
- }
- //to our success
- B3_FORCE_INLINE unsigned int getHash() const
- {
- int key = m_uid;
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-class b3HashPtr
-{
- union {
- const void* m_pointer;
- int m_hashValues[2];
- };
-
-public:
- b3HashPtr(const void* ptr)
- : m_pointer(ptr)
- {
- }
-
- const void* getPointer() const
- {
- return m_pointer;
- }
-
- bool equals(const b3HashPtr& other) const
- {
- return getPointer() == other.getPointer();
- }
-
- //to our success
- B3_FORCE_INLINE unsigned int getHash() const
- {
- const bool VOID_IS_8 = ((sizeof(void*) == 8));
-
- int key = VOID_IS_8 ? m_hashValues[0] + m_hashValues[1] : m_hashValues[0];
-
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-template <class Value>
-class b3HashKeyPtr
-{
- int m_uid;
-
-public:
- b3HashKeyPtr(int uid) : m_uid(uid)
- {
- }
-
- int getUid1() const
- {
- return m_uid;
- }
-
- bool equals(const b3HashKeyPtr<Value>& other) const
- {
- return getUid1() == other.getUid1();
- }
-
- //to our success
- B3_FORCE_INLINE unsigned int getHash() const
- {
- int key = m_uid;
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-template <class Value>
-class b3HashKey
-{
- int m_uid;
-
-public:
- b3HashKey(int uid) : m_uid(uid)
- {
- }
-
- int getUid1() const
- {
- return m_uid;
- }
-
- bool equals(const b3HashKey<Value>& other) const
- {
- return getUid1() == other.getUid1();
- }
- //to our success
- B3_FORCE_INLINE unsigned int getHash() const
- {
- int key = m_uid;
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-///The b3HashMap template class implements a generic and lightweight hashmap.
-///A basic sample of how to use b3HashMap is located in Demos\BasicDemo\main.cpp
-template <class Key, class Value>
-class b3HashMap
-{
-protected:
- b3AlignedObjectArray<int> m_hashTable;
- b3AlignedObjectArray<int> m_next;
-
- b3AlignedObjectArray<Value> m_valueArray;
- b3AlignedObjectArray<Key> m_keyArray;
-
- void growTables(const Key& /*key*/)
- {
- int newCapacity = m_valueArray.capacity();
-
- if (m_hashTable.size() < newCapacity)
- {
- //grow hashtable and next table
- int curHashtableSize = m_hashTable.size();
-
- m_hashTable.resize(newCapacity);
- m_next.resize(newCapacity);
-
- int i;
-
- for (i = 0; i < newCapacity; ++i)
- {
- m_hashTable[i] = B3_HASH_NULL;
- }
- for (i = 0; i < newCapacity; ++i)
- {
- m_next[i] = B3_HASH_NULL;
- }
-
- for (i = 0; i < curHashtableSize; i++)
- {
- //const Value& value = m_valueArray[i];
- //const Key& key = m_keyArray[i];
-
- int hashValue = m_keyArray[i].getHash() & (m_valueArray.capacity() - 1); // New hash value with new mask
- m_next[i] = m_hashTable[hashValue];
- m_hashTable[hashValue] = i;
- }
- }
- }
-
-public:
- void insert(const Key& key, const Value& value)
- {
- int hash = key.getHash() & (m_valueArray.capacity() - 1);
-
- //replace value if the key is already there
- int index = findIndex(key);
- if (index != B3_HASH_NULL)
- {
- m_valueArray[index] = value;
- return;
- }
-
- int count = m_valueArray.size();
- int oldCapacity = m_valueArray.capacity();
- m_valueArray.push_back(value);
- m_keyArray.push_back(key);
-
- int newCapacity = m_valueArray.capacity();
- if (oldCapacity < newCapacity)
- {
- growTables(key);
- //hash with new capacity
- hash = key.getHash() & (m_valueArray.capacity() - 1);
- }
- m_next[count] = m_hashTable[hash];
- m_hashTable[hash] = count;
- }
-
- void remove(const Key& key)
- {
- int hash = key.getHash() & (m_valueArray.capacity() - 1);
-
- int pairIndex = findIndex(key);
-
- if (pairIndex == B3_HASH_NULL)
- {
- return;
- }
-
- // Remove the pair from the hash table.
- int index = m_hashTable[hash];
- b3Assert(index != B3_HASH_NULL);
-
- int previous = B3_HASH_NULL;
- while (index != pairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != B3_HASH_NULL)
- {
- b3Assert(m_next[previous] == pairIndex);
- m_next[previous] = m_next[pairIndex];
- }
- else
- {
- m_hashTable[hash] = m_next[pairIndex];
- }
-
- // We now move the last pair into spot of the
- // pair being removed. We need to fix the hash
- // table indices to support the move.
-
- int lastPairIndex = m_valueArray.size() - 1;
-
- // If the removed pair is the last pair, we are done.
- if (lastPairIndex == pairIndex)
- {
- m_valueArray.pop_back();
- m_keyArray.pop_back();
- return;
- }
-
- // Remove the last pair from the hash table.
- int lastHash = m_keyArray[lastPairIndex].getHash() & (m_valueArray.capacity() - 1);
-
- index = m_hashTable[lastHash];
- b3Assert(index != B3_HASH_NULL);
-
- previous = B3_HASH_NULL;
- while (index != lastPairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != B3_HASH_NULL)
- {
- b3Assert(m_next[previous] == lastPairIndex);
- m_next[previous] = m_next[lastPairIndex];
- }
- else
- {
- m_hashTable[lastHash] = m_next[lastPairIndex];
- }
-
- // Copy the last pair into the remove pair's spot.
- m_valueArray[pairIndex] = m_valueArray[lastPairIndex];
- m_keyArray[pairIndex] = m_keyArray[lastPairIndex];
-
- // Insert the last pair into the hash table
- m_next[pairIndex] = m_hashTable[lastHash];
- m_hashTable[lastHash] = pairIndex;
-
- m_valueArray.pop_back();
- m_keyArray.pop_back();
- }
-
- int size() const
- {
- return m_valueArray.size();
- }
-
- const Value* getAtIndex(int index) const
- {
- b3Assert(index < m_valueArray.size());
-
- return &m_valueArray[index];
- }
-
- Value* getAtIndex(int index)
- {
- b3Assert(index < m_valueArray.size());
-
- return &m_valueArray[index];
- }
-
- Key getKeyAtIndex(int index)
- {
- b3Assert(index < m_keyArray.size());
- return m_keyArray[index];
- }
-
- const Key getKeyAtIndex(int index) const
- {
- b3Assert(index < m_keyArray.size());
- return m_keyArray[index];
- }
-
- Value* operator[](const Key& key)
- {
- return find(key);
- }
-
- const Value* find(const Key& key) const
- {
- int index = findIndex(key);
- if (index == B3_HASH_NULL)
- {
- return NULL;
- }
- return &m_valueArray[index];
- }
-
- Value* find(const Key& key)
- {
- int index = findIndex(key);
- if (index == B3_HASH_NULL)
- {
- return NULL;
- }
- return &m_valueArray[index];
- }
-
- int findIndex(const Key& key) const
- {
- unsigned int hash = key.getHash() & (m_valueArray.capacity() - 1);
-
- if (hash >= (unsigned int)m_hashTable.size())
- {
- return B3_HASH_NULL;
- }
-
- int index = m_hashTable[hash];
- while ((index != B3_HASH_NULL) && key.equals(m_keyArray[index]) == false)
- {
- index = m_next[index];
- }
- return index;
- }
-
- void clear()
- {
- m_hashTable.clear();
- m_next.clear();
- m_valueArray.clear();
- m_keyArray.clear();
- }
-};
-
-#endif //B3_HASH_MAP_H
diff --git a/thirdparty/bullet/Bullet3Common/b3Logging.cpp b/thirdparty/bullet/Bullet3Common/b3Logging.cpp
deleted file mode 100644
index 9c9f7c09ea..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Logging.cpp
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#include "b3Logging.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-
-#ifdef _WIN32
-#include <windows.h>
-#endif //_WIN32
-
-void b3PrintfFuncDefault(const char* msg)
-{
-#ifdef _WIN32
- OutputDebugStringA(msg);
-#endif
- printf("%s", msg);
- //is this portable?
- fflush(stdout);
-}
-
-void b3WarningMessageFuncDefault(const char* msg)
-{
-#ifdef _WIN32
- OutputDebugStringA(msg);
-#endif
- printf("%s", msg);
- //is this portable?
- fflush(stdout);
-}
-
-void b3ErrorMessageFuncDefault(const char* msg)
-{
-#ifdef _WIN32
- OutputDebugStringA(msg);
-#endif
- printf("%s", msg);
-
- //is this portable?
- fflush(stdout);
-}
-
-static b3PrintfFunc* b3s_printfFunc = b3PrintfFuncDefault;
-static b3WarningMessageFunc* b3s_warningMessageFunc = b3WarningMessageFuncDefault;
-static b3ErrorMessageFunc* b3s_errorMessageFunc = b3ErrorMessageFuncDefault;
-
-///The developer can route b3Printf output using their own implementation
-void b3SetCustomPrintfFunc(b3PrintfFunc* printfFunc)
-{
- b3s_printfFunc = printfFunc;
-}
-void b3SetCustomWarningMessageFunc(b3PrintfFunc* warningMessageFunc)
-{
- b3s_warningMessageFunc = warningMessageFunc;
-}
-void b3SetCustomErrorMessageFunc(b3PrintfFunc* errorMessageFunc)
-{
- b3s_errorMessageFunc = errorMessageFunc;
-}
-
-//#define B3_MAX_DEBUG_STRING_LENGTH 2048
-#define B3_MAX_DEBUG_STRING_LENGTH 32768
-
-void b3OutputPrintfVarArgsInternal(const char* str, ...)
-{
- char strDebug[B3_MAX_DEBUG_STRING_LENGTH] = {0};
- va_list argList;
- va_start(argList, str);
-#ifdef _MSC_VER
- vsprintf_s(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
-#else
- vsnprintf(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
-#endif
- (b3s_printfFunc)(strDebug);
- va_end(argList);
-}
-void b3OutputWarningMessageVarArgsInternal(const char* str, ...)
-{
- char strDebug[B3_MAX_DEBUG_STRING_LENGTH] = {0};
- va_list argList;
- va_start(argList, str);
-#ifdef _MSC_VER
- vsprintf_s(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
-#else
- vsnprintf(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
-#endif
- (b3s_warningMessageFunc)(strDebug);
- va_end(argList);
-}
-void b3OutputErrorMessageVarArgsInternal(const char* str, ...)
-{
- char strDebug[B3_MAX_DEBUG_STRING_LENGTH] = {0};
- va_list argList;
- va_start(argList, str);
-#ifdef _MSC_VER
- vsprintf_s(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
-#else
- vsnprintf(strDebug, B3_MAX_DEBUG_STRING_LENGTH, str, argList);
-#endif
- (b3s_errorMessageFunc)(strDebug);
- va_end(argList);
-}
-
-void b3EnterProfileZoneDefault(const char* name)
-{
-}
-void b3LeaveProfileZoneDefault()
-{
-}
-static b3EnterProfileZoneFunc* b3s_enterFunc = b3EnterProfileZoneDefault;
-static b3LeaveProfileZoneFunc* b3s_leaveFunc = b3LeaveProfileZoneDefault;
-void b3EnterProfileZone(const char* name)
-{
- (b3s_enterFunc)(name);
-}
-void b3LeaveProfileZone()
-{
- (b3s_leaveFunc)();
-}
-
-void b3SetCustomEnterProfileZoneFunc(b3EnterProfileZoneFunc* enterFunc)
-{
- b3s_enterFunc = enterFunc;
-}
-void b3SetCustomLeaveProfileZoneFunc(b3LeaveProfileZoneFunc* leaveFunc)
-{
- b3s_leaveFunc = leaveFunc;
-}
-
-#ifndef _MSC_VER
-#undef vsprintf_s
-#endif
diff --git a/thirdparty/bullet/Bullet3Common/b3Logging.h b/thirdparty/bullet/Bullet3Common/b3Logging.h
deleted file mode 100644
index f61149de77..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Logging.h
+++ /dev/null
@@ -1,74 +0,0 @@
-
-#ifndef B3_LOGGING_H
-#define B3_LOGGING_H
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-///We add the do/while so that the statement "if (condition) b3Printf("test"); else {...}" would fail
-///You can also customize the message by uncommenting out a different line below
-#define b3Printf(...) b3OutputPrintfVarArgsInternal(__VA_ARGS__)
- //#define b3Printf(...) do {b3OutputPrintfVarArgsInternal("b3Printf[%s,%d]:",__FILE__,__LINE__);b3OutputPrintfVarArgsInternal(__VA_ARGS__); } while(0)
- //#define b3Printf b3OutputPrintfVarArgsInternal
- //#define b3Printf(...) printf(__VA_ARGS__)
- //#define b3Printf(...)
-#define b3Warning(...) do{ b3OutputWarningMessageVarArgsInternal("b3Warning[%s,%d]:\n", __FILE__, __LINE__);b3OutputWarningMessageVarArgsInternal(__VA_ARGS__);} while (0)
-#define b3Error(...)do {b3OutputErrorMessageVarArgsInternal("b3Error[%s,%d]:\n", __FILE__, __LINE__);b3OutputErrorMessageVarArgsInternal(__VA_ARGS__);} while (0)
-#ifndef B3_NO_PROFILE
-
- void b3EnterProfileZone(const char* name);
- void b3LeaveProfileZone();
-#ifdef __cplusplus
-
- class b3ProfileZone
- {
- public:
- b3ProfileZone(const char* name)
- {
- b3EnterProfileZone(name);
- }
-
- ~b3ProfileZone()
- {
- b3LeaveProfileZone();
- }
- };
-
-#define B3_PROFILE(name) b3ProfileZone __profile(name)
-#endif
-
-#else //B3_NO_PROFILE
-
-#define B3_PROFILE(name)
-#define b3StartProfile(a)
-#define b3StopProfile
-
-#endif //#ifndef B3_NO_PROFILE
-
- typedef void(b3PrintfFunc)(const char* msg);
- typedef void(b3WarningMessageFunc)(const char* msg);
- typedef void(b3ErrorMessageFunc)(const char* msg);
- typedef void(b3EnterProfileZoneFunc)(const char* msg);
- typedef void(b3LeaveProfileZoneFunc)();
-
- ///The developer can route b3Printf output using their own implementation
- void b3SetCustomPrintfFunc(b3PrintfFunc* printfFunc);
- void b3SetCustomWarningMessageFunc(b3WarningMessageFunc* warningMsgFunc);
- void b3SetCustomErrorMessageFunc(b3ErrorMessageFunc* errorMsgFunc);
-
- ///Set custom profile zone functions (zones can be nested)
- void b3SetCustomEnterProfileZoneFunc(b3EnterProfileZoneFunc* enterFunc);
- void b3SetCustomLeaveProfileZoneFunc(b3LeaveProfileZoneFunc* leaveFunc);
-
- ///Don't use those internal functions directly, use the b3Printf or b3SetCustomPrintfFunc instead (or warning/error version)
- void b3OutputPrintfVarArgsInternal(const char* str, ...);
- void b3OutputWarningMessageVarArgsInternal(const char* str, ...);
- void b3OutputErrorMessageVarArgsInternal(const char* str, ...);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif //B3_LOGGING_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Common/b3Matrix3x3.h b/thirdparty/bullet/Bullet3Common/b3Matrix3x3.h
deleted file mode 100644
index 6c46536a81..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Matrix3x3.h
+++ /dev/null
@@ -1,1354 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_MATRIX3x3_H
-#define B3_MATRIX3x3_H
-
-#include "b3Vector3.h"
-#include "b3Quaternion.h"
-#include <stdio.h>
-
-#ifdef B3_USE_SSE
-//const __m128 B3_ATTRIBUTE_ALIGNED16(b3v2220) = {2.0f, 2.0f, 2.0f, 0.0f};
-const __m128 B3_ATTRIBUTE_ALIGNED16(b3vMPPP) = {-0.0f, +0.0f, +0.0f, +0.0f};
-#endif
-
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-const b3SimdFloat4 B3_ATTRIBUTE_ALIGNED16(b3v1000) = {1.0f, 0.0f, 0.0f, 0.0f};
-const b3SimdFloat4 B3_ATTRIBUTE_ALIGNED16(b3v0100) = {0.0f, 1.0f, 0.0f, 0.0f};
-const b3SimdFloat4 B3_ATTRIBUTE_ALIGNED16(b3v0010) = {0.0f, 0.0f, 1.0f, 0.0f};
-#endif
-
-#ifdef B3_USE_DOUBLE_PRECISION
-#define b3Matrix3x3Data b3Matrix3x3DoubleData
-#else
-#define b3Matrix3x3Data b3Matrix3x3FloatData
-#endif //B3_USE_DOUBLE_PRECISION
-
-/**@brief The b3Matrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with b3Quaternion, b3Transform and b3Vector3.
-* Make sure to only include a pure orthogonal matrix without scaling. */
-B3_ATTRIBUTE_ALIGNED16(class)
-b3Matrix3x3
-{
- ///Data storage for the matrix, each vector is a row of the matrix
- b3Vector3 m_el[3];
-
-public:
- /** @brief No initializaion constructor */
- b3Matrix3x3() {}
-
- // explicit b3Matrix3x3(const b3Scalar *m) { setFromOpenGLSubMatrix(m); }
-
- /**@brief Constructor from Quaternion */
- explicit b3Matrix3x3(const b3Quaternion& q) { setRotation(q); }
- /*
- template <typename b3Scalar>
- Matrix3x3(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll)
- {
- setEulerYPR(yaw, pitch, roll);
- }
- */
- /** @brief Constructor with row major formatting */
- b3Matrix3x3(const b3Scalar& xx, const b3Scalar& xy, const b3Scalar& xz,
- const b3Scalar& yx, const b3Scalar& yy, const b3Scalar& yz,
- const b3Scalar& zx, const b3Scalar& zy, const b3Scalar& zz)
- {
- setValue(xx, xy, xz,
- yx, yy, yz,
- zx, zy, zz);
- }
-
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- B3_FORCE_INLINE b3Matrix3x3(const b3SimdFloat4 v0, const b3SimdFloat4 v1, const b3SimdFloat4 v2)
- {
- m_el[0].mVec128 = v0;
- m_el[1].mVec128 = v1;
- m_el[2].mVec128 = v2;
- }
-
- B3_FORCE_INLINE b3Matrix3x3(const b3Vector3& v0, const b3Vector3& v1, const b3Vector3& v2)
- {
- m_el[0] = v0;
- m_el[1] = v1;
- m_el[2] = v2;
- }
-
- // Copy constructor
- B3_FORCE_INLINE b3Matrix3x3(const b3Matrix3x3& rhs)
- {
- m_el[0].mVec128 = rhs.m_el[0].mVec128;
- m_el[1].mVec128 = rhs.m_el[1].mVec128;
- m_el[2].mVec128 = rhs.m_el[2].mVec128;
- }
-
- // Assignment Operator
- B3_FORCE_INLINE b3Matrix3x3& operator=(const b3Matrix3x3& m)
- {
- m_el[0].mVec128 = m.m_el[0].mVec128;
- m_el[1].mVec128 = m.m_el[1].mVec128;
- m_el[2].mVec128 = m.m_el[2].mVec128;
-
- return *this;
- }
-
-#else
-
- /** @brief Copy constructor */
- B3_FORCE_INLINE b3Matrix3x3(const b3Matrix3x3& other)
- {
- m_el[0] = other.m_el[0];
- m_el[1] = other.m_el[1];
- m_el[2] = other.m_el[2];
- }
-
- /** @brief Assignment Operator */
- B3_FORCE_INLINE b3Matrix3x3& operator=(const b3Matrix3x3& other)
- {
- m_el[0] = other.m_el[0];
- m_el[1] = other.m_el[1];
- m_el[2] = other.m_el[2];
- return *this;
- }
-
-#endif
-
- /** @brief Get a column of the matrix as a vector
- * @param i Column number 0 indexed */
- B3_FORCE_INLINE b3Vector3 getColumn(int i) const
- {
- return b3MakeVector3(m_el[0][i], m_el[1][i], m_el[2][i]);
- }
-
- /** @brief Get a row of the matrix as a vector
- * @param i Row number 0 indexed */
- B3_FORCE_INLINE const b3Vector3& getRow(int i) const
- {
- b3FullAssert(0 <= i && i < 3);
- return m_el[i];
- }
-
- /** @brief Get a mutable reference to a row of the matrix as a vector
- * @param i Row number 0 indexed */
- B3_FORCE_INLINE b3Vector3& operator[](int i)
- {
- b3FullAssert(0 <= i && i < 3);
- return m_el[i];
- }
-
- /** @brief Get a const reference to a row of the matrix as a vector
- * @param i Row number 0 indexed */
- B3_FORCE_INLINE const b3Vector3& operator[](int i) const
- {
- b3FullAssert(0 <= i && i < 3);
- return m_el[i];
- }
-
- /** @brief Multiply by the target matrix on the right
- * @param m Rotation matrix to be applied
- * Equivilant to this = this * m */
- b3Matrix3x3& operator*=(const b3Matrix3x3& m);
-
- /** @brief Adds by the target matrix on the right
- * @param m matrix to be applied
- * Equivilant to this = this + m */
- b3Matrix3x3& operator+=(const b3Matrix3x3& m);
-
- /** @brief Substractss by the target matrix on the right
- * @param m matrix to be applied
- * Equivilant to this = this - m */
- b3Matrix3x3& operator-=(const b3Matrix3x3& m);
-
- /** @brief Set from the rotational part of a 4x4 OpenGL matrix
- * @param m A pointer to the beginning of the array of scalars*/
- void setFromOpenGLSubMatrix(const b3Scalar* m)
- {
- m_el[0].setValue(m[0], m[4], m[8]);
- m_el[1].setValue(m[1], m[5], m[9]);
- m_el[2].setValue(m[2], m[6], m[10]);
- }
- /** @brief Set the values of the matrix explicitly (row major)
- * @param xx Top left
- * @param xy Top Middle
- * @param xz Top Right
- * @param yx Middle Left
- * @param yy Middle Middle
- * @param yz Middle Right
- * @param zx Bottom Left
- * @param zy Bottom Middle
- * @param zz Bottom Right*/
- void setValue(const b3Scalar& xx, const b3Scalar& xy, const b3Scalar& xz,
- const b3Scalar& yx, const b3Scalar& yy, const b3Scalar& yz,
- const b3Scalar& zx, const b3Scalar& zy, const b3Scalar& zz)
- {
- m_el[0].setValue(xx, xy, xz);
- m_el[1].setValue(yx, yy, yz);
- m_el[2].setValue(zx, zy, zz);
- }
-
- /** @brief Set the matrix from a quaternion
- * @param q The Quaternion to match */
- void setRotation(const b3Quaternion& q)
- {
- b3Scalar d = q.length2();
- b3FullAssert(d != b3Scalar(0.0));
- b3Scalar s = b3Scalar(2.0) / d;
-
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vs, Q = q.get128();
- __m128i Qi = b3CastfTo128i(Q);
- __m128 Y, Z;
- __m128 V1, V2, V3;
- __m128 V11, V21, V31;
- __m128 NQ = _mm_xor_ps(Q, b3vMzeroMask);
- __m128i NQi = b3CastfTo128i(NQ);
-
- V1 = b3CastiTo128f(_mm_shuffle_epi32(Qi, B3_SHUFFLE(1, 0, 2, 3))); // Y X Z W
- V2 = _mm_shuffle_ps(NQ, Q, B3_SHUFFLE(0, 0, 1, 3)); // -X -X Y W
- V3 = b3CastiTo128f(_mm_shuffle_epi32(Qi, B3_SHUFFLE(2, 1, 0, 3))); // Z Y X W
- V1 = _mm_xor_ps(V1, b3vMPPP); // change the sign of the first element
-
- V11 = b3CastiTo128f(_mm_shuffle_epi32(Qi, B3_SHUFFLE(1, 1, 0, 3))); // Y Y X W
- V21 = _mm_unpackhi_ps(Q, Q); // Z Z W W
- V31 = _mm_shuffle_ps(Q, NQ, B3_SHUFFLE(0, 2, 0, 3)); // X Z -X -W
-
- V2 = V2 * V1; //
- V1 = V1 * V11; //
- V3 = V3 * V31; //
-
- V11 = _mm_shuffle_ps(NQ, Q, B3_SHUFFLE(2, 3, 1, 3)); // -Z -W Y W
- V11 = V11 * V21; //
- V21 = _mm_xor_ps(V21, b3vMPPP); // change the sign of the first element
- V31 = _mm_shuffle_ps(Q, NQ, B3_SHUFFLE(3, 3, 1, 3)); // W W -Y -W
- V31 = _mm_xor_ps(V31, b3vMPPP); // change the sign of the first element
- Y = b3CastiTo128f(_mm_shuffle_epi32(NQi, B3_SHUFFLE(3, 2, 0, 3))); // -W -Z -X -W
- Z = b3CastiTo128f(_mm_shuffle_epi32(Qi, B3_SHUFFLE(1, 0, 1, 3))); // Y X Y W
-
- vs = _mm_load_ss(&s);
- V21 = V21 * Y;
- V31 = V31 * Z;
-
- V1 = V1 + V11;
- V2 = V2 + V21;
- V3 = V3 + V31;
-
- vs = b3_splat3_ps(vs, 0);
- // s ready
- V1 = V1 * vs;
- V2 = V2 * vs;
- V3 = V3 * vs;
-
- V1 = V1 + b3v1000;
- V2 = V2 + b3v0100;
- V3 = V3 + b3v0010;
-
- m_el[0] = b3MakeVector3(V1);
- m_el[1] = b3MakeVector3(V2);
- m_el[2] = b3MakeVector3(V3);
-#else
- b3Scalar xs = q.getX() * s, ys = q.getY() * s, zs = q.getZ() * s;
- b3Scalar wx = q.getW() * xs, wy = q.getW() * ys, wz = q.getW() * zs;
- b3Scalar xx = q.getX() * xs, xy = q.getX() * ys, xz = q.getX() * zs;
- b3Scalar yy = q.getY() * ys, yz = q.getY() * zs, zz = q.getZ() * zs;
- setValue(
- b3Scalar(1.0) - (yy + zz), xy - wz, xz + wy,
- xy + wz, b3Scalar(1.0) - (xx + zz), yz - wx,
- xz - wy, yz + wx, b3Scalar(1.0) - (xx + yy));
-#endif
- }
-
- /** @brief Set the matrix from euler angles using YPR around YXZ respectively
- * @param yaw Yaw about Y axis
- * @param pitch Pitch about X axis
- * @param roll Roll about Z axis
- */
- void setEulerYPR(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll)
- {
- setEulerZYX(roll, pitch, yaw);
- }
-
- /** @brief Set the matrix from euler angles YPR around ZYX axes
- * @param eulerX Roll about X axis
- * @param eulerY Pitch around Y axis
- * @param eulerZ Yaw aboud Z axis
- *
- * These angles are used to produce a rotation matrix. The euler
- * angles are applied in ZYX order. I.e a vector is first rotated
- * about X then Y and then Z
- **/
- void setEulerZYX(b3Scalar eulerX, b3Scalar eulerY, b3Scalar eulerZ)
- {
- ///@todo proposed to reverse this since it's labeled zyx but takes arguments xyz and it will match all other parts of the code
- b3Scalar ci(b3Cos(eulerX));
- b3Scalar cj(b3Cos(eulerY));
- b3Scalar ch(b3Cos(eulerZ));
- b3Scalar si(b3Sin(eulerX));
- b3Scalar sj(b3Sin(eulerY));
- b3Scalar sh(b3Sin(eulerZ));
- b3Scalar cc = ci * ch;
- b3Scalar cs = ci * sh;
- b3Scalar sc = si * ch;
- b3Scalar ss = si * sh;
-
- setValue(cj * ch, sj * sc - cs, sj * cc + ss,
- cj * sh, sj * ss + cc, sj * cs - sc,
- -sj, cj * si, cj * ci);
- }
-
- /**@brief Set the matrix to the identity */
- void setIdentity()
- {
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- m_el[0] = b3MakeVector3(b3v1000);
- m_el[1] = b3MakeVector3(b3v0100);
- m_el[2] = b3MakeVector3(b3v0010);
-#else
- setValue(b3Scalar(1.0), b3Scalar(0.0), b3Scalar(0.0),
- b3Scalar(0.0), b3Scalar(1.0), b3Scalar(0.0),
- b3Scalar(0.0), b3Scalar(0.0), b3Scalar(1.0));
-#endif
- }
-
- static const b3Matrix3x3& getIdentity()
- {
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- static const b3Matrix3x3
- identityMatrix(b3v1000, b3v0100, b3v0010);
-#else
- static const b3Matrix3x3
- identityMatrix(
- b3Scalar(1.0), b3Scalar(0.0), b3Scalar(0.0),
- b3Scalar(0.0), b3Scalar(1.0), b3Scalar(0.0),
- b3Scalar(0.0), b3Scalar(0.0), b3Scalar(1.0));
-#endif
- return identityMatrix;
- }
-
- /**@brief Fill the rotational part of an OpenGL matrix and clear the shear/perspective
- * @param m The array to be filled */
- void getOpenGLSubMatrix(b3Scalar * m) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 v0 = m_el[0].mVec128;
- __m128 v1 = m_el[1].mVec128;
- __m128 v2 = m_el[2].mVec128; // x2 y2 z2 w2
- __m128* vm = (__m128*)m;
- __m128 vT;
-
- v2 = _mm_and_ps(v2, b3vFFF0fMask); // x2 y2 z2 0
-
- vT = _mm_unpackhi_ps(v0, v1); // z0 z1 * *
- v0 = _mm_unpacklo_ps(v0, v1); // x0 x1 y0 y1
-
- v1 = _mm_shuffle_ps(v0, v2, B3_SHUFFLE(2, 3, 1, 3)); // y0 y1 y2 0
- v0 = _mm_shuffle_ps(v0, v2, B3_SHUFFLE(0, 1, 0, 3)); // x0 x1 x2 0
- v2 = b3CastdTo128f(_mm_move_sd(b3CastfTo128d(v2), b3CastfTo128d(vT))); // z0 z1 z2 0
-
- vm[0] = v0;
- vm[1] = v1;
- vm[2] = v2;
-#elif defined(B3_USE_NEON)
- // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions.
- static const uint32x2_t zMask = (const uint32x2_t){-1, 0};
- float32x4_t* vm = (float32x4_t*)m;
- float32x4x2_t top = vtrnq_f32(m_el[0].mVec128, m_el[1].mVec128); // {x0 x1 z0 z1}, {y0 y1 w0 w1}
- float32x2x2_t bl = vtrn_f32(vget_low_f32(m_el[2].mVec128), vdup_n_f32(0.0f)); // {x2 0 }, {y2 0}
- float32x4_t v0 = vcombine_f32(vget_low_f32(top.val[0]), bl.val[0]);
- float32x4_t v1 = vcombine_f32(vget_low_f32(top.val[1]), bl.val[1]);
- float32x2_t q = (float32x2_t)vand_u32((uint32x2_t)vget_high_f32(m_el[2].mVec128), zMask);
- float32x4_t v2 = vcombine_f32(vget_high_f32(top.val[0]), q); // z0 z1 z2 0
-
- vm[0] = v0;
- vm[1] = v1;
- vm[2] = v2;
-#else
- m[0] = b3Scalar(m_el[0].getX());
- m[1] = b3Scalar(m_el[1].getX());
- m[2] = b3Scalar(m_el[2].getX());
- m[3] = b3Scalar(0.0);
- m[4] = b3Scalar(m_el[0].getY());
- m[5] = b3Scalar(m_el[1].getY());
- m[6] = b3Scalar(m_el[2].getY());
- m[7] = b3Scalar(0.0);
- m[8] = b3Scalar(m_el[0].getZ());
- m[9] = b3Scalar(m_el[1].getZ());
- m[10] = b3Scalar(m_el[2].getZ());
- m[11] = b3Scalar(0.0);
-#endif
- }
-
- /**@brief Get the matrix represented as a quaternion
- * @param q The quaternion which will be set */
- void getRotation(b3Quaternion & q) const
- {
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- b3Scalar trace = m_el[0].getX() + m_el[1].getY() + m_el[2].getZ();
- b3Scalar s, x;
-
- union {
- b3SimdFloat4 vec;
- b3Scalar f[4];
- } temp;
-
- if (trace > b3Scalar(0.0))
- {
- x = trace + b3Scalar(1.0);
-
- temp.f[0] = m_el[2].getY() - m_el[1].getZ();
- temp.f[1] = m_el[0].getZ() - m_el[2].getX();
- temp.f[2] = m_el[1].getX() - m_el[0].getY();
- temp.f[3] = x;
- //temp.f[3]= s * b3Scalar(0.5);
- }
- else
- {
- int i, j, k;
- if (m_el[0].getX() < m_el[1].getY())
- {
- if (m_el[1].getY() < m_el[2].getZ())
- {
- i = 2;
- j = 0;
- k = 1;
- }
- else
- {
- i = 1;
- j = 2;
- k = 0;
- }
- }
- else
- {
- if (m_el[0].getX() < m_el[2].getZ())
- {
- i = 2;
- j = 0;
- k = 1;
- }
- else
- {
- i = 0;
- j = 1;
- k = 2;
- }
- }
-
- x = m_el[i][i] - m_el[j][j] - m_el[k][k] + b3Scalar(1.0);
-
- temp.f[3] = (m_el[k][j] - m_el[j][k]);
- temp.f[j] = (m_el[j][i] + m_el[i][j]);
- temp.f[k] = (m_el[k][i] + m_el[i][k]);
- temp.f[i] = x;
- //temp.f[i] = s * b3Scalar(0.5);
- }
-
- s = b3Sqrt(x);
- q.set128(temp.vec);
- s = b3Scalar(0.5) / s;
-
- q *= s;
-#else
- b3Scalar trace = m_el[0].getX() + m_el[1].getY() + m_el[2].getZ();
-
- b3Scalar temp[4];
-
- if (trace > b3Scalar(0.0))
- {
- b3Scalar s = b3Sqrt(trace + b3Scalar(1.0));
- temp[3] = (s * b3Scalar(0.5));
- s = b3Scalar(0.5) / s;
-
- temp[0] = ((m_el[2].getY() - m_el[1].getZ()) * s);
- temp[1] = ((m_el[0].getZ() - m_el[2].getX()) * s);
- temp[2] = ((m_el[1].getX() - m_el[0].getY()) * s);
- }
- else
- {
- int i = m_el[0].getX() < m_el[1].getY() ? (m_el[1].getY() < m_el[2].getZ() ? 2 : 1) : (m_el[0].getX() < m_el[2].getZ() ? 2 : 0);
- int j = (i + 1) % 3;
- int k = (i + 2) % 3;
-
- b3Scalar s = b3Sqrt(m_el[i][i] - m_el[j][j] - m_el[k][k] + b3Scalar(1.0));
- temp[i] = s * b3Scalar(0.5);
- s = b3Scalar(0.5) / s;
-
- temp[3] = (m_el[k][j] - m_el[j][k]) * s;
- temp[j] = (m_el[j][i] + m_el[i][j]) * s;
- temp[k] = (m_el[k][i] + m_el[i][k]) * s;
- }
- q.setValue(temp[0], temp[1], temp[2], temp[3]);
-#endif
- }
-
- /**@brief Get the matrix represented as euler angles around YXZ, roundtrip with setEulerYPR
- * @param yaw Yaw around Y axis
- * @param pitch Pitch around X axis
- * @param roll around Z axis */
- void getEulerYPR(b3Scalar & yaw, b3Scalar & pitch, b3Scalar & roll) const
- {
- // first use the normal calculus
- yaw = b3Scalar(b3Atan2(m_el[1].getX(), m_el[0].getX()));
- pitch = b3Scalar(b3Asin(-m_el[2].getX()));
- roll = b3Scalar(b3Atan2(m_el[2].getY(), m_el[2].getZ()));
-
- // on pitch = +/-HalfPI
- if (b3Fabs(pitch) == B3_HALF_PI)
- {
- if (yaw > 0)
- yaw -= B3_PI;
- else
- yaw += B3_PI;
-
- if (roll > 0)
- roll -= B3_PI;
- else
- roll += B3_PI;
- }
- };
-
- /**@brief Get the matrix represented as euler angles around ZYX
- * @param yaw Yaw around X axis
- * @param pitch Pitch around Y axis
- * @param roll around X axis
- * @param solution_number Which solution of two possible solutions ( 1 or 2) are possible values*/
- void getEulerZYX(b3Scalar & yaw, b3Scalar & pitch, b3Scalar & roll, unsigned int solution_number = 1) const
- {
- struct Euler
- {
- b3Scalar yaw;
- b3Scalar pitch;
- b3Scalar roll;
- };
-
- Euler euler_out;
- Euler euler_out2; //second solution
- //get the pointer to the raw data
-
- // Check that pitch is not at a singularity
- if (b3Fabs(m_el[2].getX()) >= 1)
- {
- euler_out.yaw = 0;
- euler_out2.yaw = 0;
-
- // From difference of angles formula
- b3Scalar delta = b3Atan2(m_el[0].getX(), m_el[0].getZ());
- if (m_el[2].getX() > 0) //gimbal locked up
- {
- euler_out.pitch = B3_PI / b3Scalar(2.0);
- euler_out2.pitch = B3_PI / b3Scalar(2.0);
- euler_out.roll = euler_out.pitch + delta;
- euler_out2.roll = euler_out.pitch + delta;
- }
- else // gimbal locked down
- {
- euler_out.pitch = -B3_PI / b3Scalar(2.0);
- euler_out2.pitch = -B3_PI / b3Scalar(2.0);
- euler_out.roll = -euler_out.pitch + delta;
- euler_out2.roll = -euler_out.pitch + delta;
- }
- }
- else
- {
- euler_out.pitch = -b3Asin(m_el[2].getX());
- euler_out2.pitch = B3_PI - euler_out.pitch;
-
- euler_out.roll = b3Atan2(m_el[2].getY() / b3Cos(euler_out.pitch),
- m_el[2].getZ() / b3Cos(euler_out.pitch));
- euler_out2.roll = b3Atan2(m_el[2].getY() / b3Cos(euler_out2.pitch),
- m_el[2].getZ() / b3Cos(euler_out2.pitch));
-
- euler_out.yaw = b3Atan2(m_el[1].getX() / b3Cos(euler_out.pitch),
- m_el[0].getX() / b3Cos(euler_out.pitch));
- euler_out2.yaw = b3Atan2(m_el[1].getX() / b3Cos(euler_out2.pitch),
- m_el[0].getX() / b3Cos(euler_out2.pitch));
- }
-
- if (solution_number == 1)
- {
- yaw = euler_out.yaw;
- pitch = euler_out.pitch;
- roll = euler_out.roll;
- }
- else
- {
- yaw = euler_out2.yaw;
- pitch = euler_out2.pitch;
- roll = euler_out2.roll;
- }
- }
-
- /**@brief Create a scaled copy of the matrix
- * @param s Scaling vector The elements of the vector will scale each column */
-
- b3Matrix3x3 scaled(const b3Vector3& s) const
- {
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- return b3Matrix3x3(m_el[0] * s, m_el[1] * s, m_el[2] * s);
-#else
- return b3Matrix3x3(
- m_el[0].getX() * s.getX(), m_el[0].getY() * s.getY(), m_el[0].getZ() * s.getZ(),
- m_el[1].getX() * s.getX(), m_el[1].getY() * s.getY(), m_el[1].getZ() * s.getZ(),
- m_el[2].getX() * s.getX(), m_el[2].getY() * s.getY(), m_el[2].getZ() * s.getZ());
-#endif
- }
-
- /**@brief Return the determinant of the matrix */
- b3Scalar determinant() const;
- /**@brief Return the adjoint of the matrix */
- b3Matrix3x3 adjoint() const;
- /**@brief Return the matrix with all values non negative */
- b3Matrix3x3 absolute() const;
- /**@brief Return the transpose of the matrix */
- b3Matrix3x3 transpose() const;
- /**@brief Return the inverse of the matrix */
- b3Matrix3x3 inverse() const;
-
- b3Matrix3x3 transposeTimes(const b3Matrix3x3& m) const;
- b3Matrix3x3 timesTranspose(const b3Matrix3x3& m) const;
-
- B3_FORCE_INLINE b3Scalar tdotx(const b3Vector3& v) const
- {
- return m_el[0].getX() * v.getX() + m_el[1].getX() * v.getY() + m_el[2].getX() * v.getZ();
- }
- B3_FORCE_INLINE b3Scalar tdoty(const b3Vector3& v) const
- {
- return m_el[0].getY() * v.getX() + m_el[1].getY() * v.getY() + m_el[2].getY() * v.getZ();
- }
- B3_FORCE_INLINE b3Scalar tdotz(const b3Vector3& v) const
- {
- return m_el[0].getZ() * v.getX() + m_el[1].getZ() * v.getY() + m_el[2].getZ() * v.getZ();
- }
-
- /**@brief diagonalizes this matrix by the Jacobi method.
- * @param rot stores the rotation from the coordinate system in which the matrix is diagonal to the original
- * coordinate system, i.e., old_this = rot * new_this * rot^T.
- * @param threshold See iteration
- * @param iteration The iteration stops when all off-diagonal elements are less than the threshold multiplied
- * by the sum of the absolute values of the diagonal, or when maxSteps have been executed.
- *
- * Note that this matrix is assumed to be symmetric.
- */
- void diagonalize(b3Matrix3x3 & rot, b3Scalar threshold, int maxSteps)
- {
- rot.setIdentity();
- for (int step = maxSteps; step > 0; step--)
- {
- // find off-diagonal element [p][q] with largest magnitude
- int p = 0;
- int q = 1;
- int r = 2;
- b3Scalar max = b3Fabs(m_el[0][1]);
- b3Scalar v = b3Fabs(m_el[0][2]);
- if (v > max)
- {
- q = 2;
- r = 1;
- max = v;
- }
- v = b3Fabs(m_el[1][2]);
- if (v > max)
- {
- p = 1;
- q = 2;
- r = 0;
- max = v;
- }
-
- b3Scalar t = threshold * (b3Fabs(m_el[0][0]) + b3Fabs(m_el[1][1]) + b3Fabs(m_el[2][2]));
- if (max <= t)
- {
- if (max <= B3_EPSILON * t)
- {
- return;
- }
- step = 1;
- }
-
- // compute Jacobi rotation J which leads to a zero for element [p][q]
- b3Scalar mpq = m_el[p][q];
- b3Scalar theta = (m_el[q][q] - m_el[p][p]) / (2 * mpq);
- b3Scalar theta2 = theta * theta;
- b3Scalar cos;
- b3Scalar sin;
- if (theta2 * theta2 < b3Scalar(10 / B3_EPSILON))
- {
- t = (theta >= 0) ? 1 / (theta + b3Sqrt(1 + theta2))
- : 1 / (theta - b3Sqrt(1 + theta2));
- cos = 1 / b3Sqrt(1 + t * t);
- sin = cos * t;
- }
- else
- {
- // approximation for large theta-value, i.e., a nearly diagonal matrix
- t = 1 / (theta * (2 + b3Scalar(0.5) / theta2));
- cos = 1 - b3Scalar(0.5) * t * t;
- sin = cos * t;
- }
-
- // apply rotation to matrix (this = J^T * this * J)
- m_el[p][q] = m_el[q][p] = 0;
- m_el[p][p] -= t * mpq;
- m_el[q][q] += t * mpq;
- b3Scalar mrp = m_el[r][p];
- b3Scalar mrq = m_el[r][q];
- m_el[r][p] = m_el[p][r] = cos * mrp - sin * mrq;
- m_el[r][q] = m_el[q][r] = cos * mrq + sin * mrp;
-
- // apply rotation to rot (rot = rot * J)
- for (int i = 0; i < 3; i++)
- {
- b3Vector3& row = rot[i];
- mrp = row[p];
- mrq = row[q];
- row[p] = cos * mrp - sin * mrq;
- row[q] = cos * mrq + sin * mrp;
- }
- }
- }
-
- /**@brief Calculate the matrix cofactor
- * @param r1 The first row to use for calculating the cofactor
- * @param c1 The first column to use for calculating the cofactor
- * @param r1 The second row to use for calculating the cofactor
- * @param c1 The second column to use for calculating the cofactor
- * See http://en.wikipedia.org/wiki/Cofactor_(linear_algebra) for more details
- */
- b3Scalar cofac(int r1, int c1, int r2, int c2) const
- {
- return m_el[r1][c1] * m_el[r2][c2] - m_el[r1][c2] * m_el[r2][c1];
- }
-
- void serialize(struct b3Matrix3x3Data & dataOut) const;
-
- void serializeFloat(struct b3Matrix3x3FloatData & dataOut) const;
-
- void deSerialize(const struct b3Matrix3x3Data& dataIn);
-
- void deSerializeFloat(const struct b3Matrix3x3FloatData& dataIn);
-
- void deSerializeDouble(const struct b3Matrix3x3DoubleData& dataIn);
-};
-
-B3_FORCE_INLINE b3Matrix3x3&
-b3Matrix3x3::operator*=(const b3Matrix3x3& m)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 rv00, rv01, rv02;
- __m128 rv10, rv11, rv12;
- __m128 rv20, rv21, rv22;
- __m128 mv0, mv1, mv2;
-
- rv02 = m_el[0].mVec128;
- rv12 = m_el[1].mVec128;
- rv22 = m_el[2].mVec128;
-
- mv0 = _mm_and_ps(m[0].mVec128, b3vFFF0fMask);
- mv1 = _mm_and_ps(m[1].mVec128, b3vFFF0fMask);
- mv2 = _mm_and_ps(m[2].mVec128, b3vFFF0fMask);
-
- // rv0
- rv00 = b3_splat_ps(rv02, 0);
- rv01 = b3_splat_ps(rv02, 1);
- rv02 = b3_splat_ps(rv02, 2);
-
- rv00 = _mm_mul_ps(rv00, mv0);
- rv01 = _mm_mul_ps(rv01, mv1);
- rv02 = _mm_mul_ps(rv02, mv2);
-
- // rv1
- rv10 = b3_splat_ps(rv12, 0);
- rv11 = b3_splat_ps(rv12, 1);
- rv12 = b3_splat_ps(rv12, 2);
-
- rv10 = _mm_mul_ps(rv10, mv0);
- rv11 = _mm_mul_ps(rv11, mv1);
- rv12 = _mm_mul_ps(rv12, mv2);
-
- // rv2
- rv20 = b3_splat_ps(rv22, 0);
- rv21 = b3_splat_ps(rv22, 1);
- rv22 = b3_splat_ps(rv22, 2);
-
- rv20 = _mm_mul_ps(rv20, mv0);
- rv21 = _mm_mul_ps(rv21, mv1);
- rv22 = _mm_mul_ps(rv22, mv2);
-
- rv00 = _mm_add_ps(rv00, rv01);
- rv10 = _mm_add_ps(rv10, rv11);
- rv20 = _mm_add_ps(rv20, rv21);
-
- m_el[0].mVec128 = _mm_add_ps(rv00, rv02);
- m_el[1].mVec128 = _mm_add_ps(rv10, rv12);
- m_el[2].mVec128 = _mm_add_ps(rv20, rv22);
-
-#elif defined(B3_USE_NEON)
-
- float32x4_t rv0, rv1, rv2;
- float32x4_t v0, v1, v2;
- float32x4_t mv0, mv1, mv2;
-
- v0 = m_el[0].mVec128;
- v1 = m_el[1].mVec128;
- v2 = m_el[2].mVec128;
-
- mv0 = (float32x4_t)vandq_s32((int32x4_t)m[0].mVec128, b3vFFF0Mask);
- mv1 = (float32x4_t)vandq_s32((int32x4_t)m[1].mVec128, b3vFFF0Mask);
- mv2 = (float32x4_t)vandq_s32((int32x4_t)m[2].mVec128, b3vFFF0Mask);
-
- rv0 = vmulq_lane_f32(mv0, vget_low_f32(v0), 0);
- rv1 = vmulq_lane_f32(mv0, vget_low_f32(v1), 0);
- rv2 = vmulq_lane_f32(mv0, vget_low_f32(v2), 0);
-
- rv0 = vmlaq_lane_f32(rv0, mv1, vget_low_f32(v0), 1);
- rv1 = vmlaq_lane_f32(rv1, mv1, vget_low_f32(v1), 1);
- rv2 = vmlaq_lane_f32(rv2, mv1, vget_low_f32(v2), 1);
-
- rv0 = vmlaq_lane_f32(rv0, mv2, vget_high_f32(v0), 0);
- rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0);
- rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0);
-
- m_el[0].mVec128 = rv0;
- m_el[1].mVec128 = rv1;
- m_el[2].mVec128 = rv2;
-#else
- setValue(
- m.tdotx(m_el[0]), m.tdoty(m_el[0]), m.tdotz(m_el[0]),
- m.tdotx(m_el[1]), m.tdoty(m_el[1]), m.tdotz(m_el[1]),
- m.tdotx(m_el[2]), m.tdoty(m_el[2]), m.tdotz(m_el[2]));
-#endif
- return *this;
-}
-
-B3_FORCE_INLINE b3Matrix3x3&
-b3Matrix3x3::operator+=(const b3Matrix3x3& m)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- m_el[0].mVec128 = m_el[0].mVec128 + m.m_el[0].mVec128;
- m_el[1].mVec128 = m_el[1].mVec128 + m.m_el[1].mVec128;
- m_el[2].mVec128 = m_el[2].mVec128 + m.m_el[2].mVec128;
-#else
- setValue(
- m_el[0][0] + m.m_el[0][0],
- m_el[0][1] + m.m_el[0][1],
- m_el[0][2] + m.m_el[0][2],
- m_el[1][0] + m.m_el[1][0],
- m_el[1][1] + m.m_el[1][1],
- m_el[1][2] + m.m_el[1][2],
- m_el[2][0] + m.m_el[2][0],
- m_el[2][1] + m.m_el[2][1],
- m_el[2][2] + m.m_el[2][2]);
-#endif
- return *this;
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-operator*(const b3Matrix3x3& m, const b3Scalar& k)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- __m128 vk = b3_splat_ps(_mm_load_ss((float*)&k), 0x80);
- return b3Matrix3x3(
- _mm_mul_ps(m[0].mVec128, vk),
- _mm_mul_ps(m[1].mVec128, vk),
- _mm_mul_ps(m[2].mVec128, vk));
-#elif defined(B3_USE_NEON)
- return b3Matrix3x3(
- vmulq_n_f32(m[0].mVec128, k),
- vmulq_n_f32(m[1].mVec128, k),
- vmulq_n_f32(m[2].mVec128, k));
-#else
- return b3Matrix3x3(
- m[0].getX() * k, m[0].getY() * k, m[0].getZ() * k,
- m[1].getX() * k, m[1].getY() * k, m[1].getZ() * k,
- m[2].getX() * k, m[2].getY() * k, m[2].getZ() * k);
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-operator+(const b3Matrix3x3& m1, const b3Matrix3x3& m2)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- return b3Matrix3x3(
- m1[0].mVec128 + m2[0].mVec128,
- m1[1].mVec128 + m2[1].mVec128,
- m1[2].mVec128 + m2[2].mVec128);
-#else
- return b3Matrix3x3(
- m1[0][0] + m2[0][0],
- m1[0][1] + m2[0][1],
- m1[0][2] + m2[0][2],
-
- m1[1][0] + m2[1][0],
- m1[1][1] + m2[1][1],
- m1[1][2] + m2[1][2],
-
- m1[2][0] + m2[2][0],
- m1[2][1] + m2[2][1],
- m1[2][2] + m2[2][2]);
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-operator-(const b3Matrix3x3& m1, const b3Matrix3x3& m2)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- return b3Matrix3x3(
- m1[0].mVec128 - m2[0].mVec128,
- m1[1].mVec128 - m2[1].mVec128,
- m1[2].mVec128 - m2[2].mVec128);
-#else
- return b3Matrix3x3(
- m1[0][0] - m2[0][0],
- m1[0][1] - m2[0][1],
- m1[0][2] - m2[0][2],
-
- m1[1][0] - m2[1][0],
- m1[1][1] - m2[1][1],
- m1[1][2] - m2[1][2],
-
- m1[2][0] - m2[2][0],
- m1[2][1] - m2[2][1],
- m1[2][2] - m2[2][2]);
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3&
-b3Matrix3x3::operator-=(const b3Matrix3x3& m)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- m_el[0].mVec128 = m_el[0].mVec128 - m.m_el[0].mVec128;
- m_el[1].mVec128 = m_el[1].mVec128 - m.m_el[1].mVec128;
- m_el[2].mVec128 = m_el[2].mVec128 - m.m_el[2].mVec128;
-#else
- setValue(
- m_el[0][0] - m.m_el[0][0],
- m_el[0][1] - m.m_el[0][1],
- m_el[0][2] - m.m_el[0][2],
- m_el[1][0] - m.m_el[1][0],
- m_el[1][1] - m.m_el[1][1],
- m_el[1][2] - m.m_el[1][2],
- m_el[2][0] - m.m_el[2][0],
- m_el[2][1] - m.m_el[2][1],
- m_el[2][2] - m.m_el[2][2]);
-#endif
- return *this;
-}
-
-B3_FORCE_INLINE b3Scalar
-b3Matrix3x3::determinant() const
-{
- return b3Triple((*this)[0], (*this)[1], (*this)[2]);
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-b3Matrix3x3::absolute() const
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- return b3Matrix3x3(
- _mm_and_ps(m_el[0].mVec128, b3vAbsfMask),
- _mm_and_ps(m_el[1].mVec128, b3vAbsfMask),
- _mm_and_ps(m_el[2].mVec128, b3vAbsfMask));
-#elif defined(B3_USE_NEON)
- return b3Matrix3x3(
- (float32x4_t)vandq_s32((int32x4_t)m_el[0].mVec128, b3v3AbsMask),
- (float32x4_t)vandq_s32((int32x4_t)m_el[1].mVec128, b3v3AbsMask),
- (float32x4_t)vandq_s32((int32x4_t)m_el[2].mVec128, b3v3AbsMask));
-#else
- return b3Matrix3x3(
- b3Fabs(m_el[0].getX()), b3Fabs(m_el[0].getY()), b3Fabs(m_el[0].getZ()),
- b3Fabs(m_el[1].getX()), b3Fabs(m_el[1].getY()), b3Fabs(m_el[1].getZ()),
- b3Fabs(m_el[2].getX()), b3Fabs(m_el[2].getY()), b3Fabs(m_el[2].getZ()));
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-b3Matrix3x3::transpose() const
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- __m128 v0 = m_el[0].mVec128;
- __m128 v1 = m_el[1].mVec128;
- __m128 v2 = m_el[2].mVec128; // x2 y2 z2 w2
- __m128 vT;
-
- v2 = _mm_and_ps(v2, b3vFFF0fMask); // x2 y2 z2 0
-
- vT = _mm_unpackhi_ps(v0, v1); // z0 z1 * *
- v0 = _mm_unpacklo_ps(v0, v1); // x0 x1 y0 y1
-
- v1 = _mm_shuffle_ps(v0, v2, B3_SHUFFLE(2, 3, 1, 3)); // y0 y1 y2 0
- v0 = _mm_shuffle_ps(v0, v2, B3_SHUFFLE(0, 1, 0, 3)); // x0 x1 x2 0
- v2 = b3CastdTo128f(_mm_move_sd(b3CastfTo128d(v2), b3CastfTo128d(vT))); // z0 z1 z2 0
-
- return b3Matrix3x3(v0, v1, v2);
-#elif defined(B3_USE_NEON)
- // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions.
- static const uint32x2_t zMask = (const uint32x2_t){-1, 0};
- float32x4x2_t top = vtrnq_f32(m_el[0].mVec128, m_el[1].mVec128); // {x0 x1 z0 z1}, {y0 y1 w0 w1}
- float32x2x2_t bl = vtrn_f32(vget_low_f32(m_el[2].mVec128), vdup_n_f32(0.0f)); // {x2 0 }, {y2 0}
- float32x4_t v0 = vcombine_f32(vget_low_f32(top.val[0]), bl.val[0]);
- float32x4_t v1 = vcombine_f32(vget_low_f32(top.val[1]), bl.val[1]);
- float32x2_t q = (float32x2_t)vand_u32((uint32x2_t)vget_high_f32(m_el[2].mVec128), zMask);
- float32x4_t v2 = vcombine_f32(vget_high_f32(top.val[0]), q); // z0 z1 z2 0
- return b3Matrix3x3(v0, v1, v2);
-#else
- return b3Matrix3x3(m_el[0].getX(), m_el[1].getX(), m_el[2].getX(),
- m_el[0].getY(), m_el[1].getY(), m_el[2].getY(),
- m_el[0].getZ(), m_el[1].getZ(), m_el[2].getZ());
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-b3Matrix3x3::adjoint() const
-{
- return b3Matrix3x3(cofac(1, 1, 2, 2), cofac(0, 2, 2, 1), cofac(0, 1, 1, 2),
- cofac(1, 2, 2, 0), cofac(0, 0, 2, 2), cofac(0, 2, 1, 0),
- cofac(1, 0, 2, 1), cofac(0, 1, 2, 0), cofac(0, 0, 1, 1));
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-b3Matrix3x3::inverse() const
-{
- b3Vector3 co = b3MakeVector3(cofac(1, 1, 2, 2), cofac(1, 2, 2, 0), cofac(1, 0, 2, 1));
- b3Scalar det = (*this)[0].dot(co);
- b3FullAssert(det != b3Scalar(0.0));
- b3Scalar s = b3Scalar(1.0) / det;
- return b3Matrix3x3(co.getX() * s, cofac(0, 2, 2, 1) * s, cofac(0, 1, 1, 2) * s,
- co.getY() * s, cofac(0, 0, 2, 2) * s, cofac(0, 2, 1, 0) * s,
- co.getZ() * s, cofac(0, 1, 2, 0) * s, cofac(0, 0, 1, 1) * s);
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-b3Matrix3x3::transposeTimes(const b3Matrix3x3& m) const
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- // zeros w
- // static const __m128i xyzMask = (const __m128i){ -1ULL, 0xffffffffULL };
- __m128 row = m_el[0].mVec128;
- __m128 m0 = _mm_and_ps(m.getRow(0).mVec128, b3vFFF0fMask);
- __m128 m1 = _mm_and_ps(m.getRow(1).mVec128, b3vFFF0fMask);
- __m128 m2 = _mm_and_ps(m.getRow(2).mVec128, b3vFFF0fMask);
- __m128 r0 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0));
- __m128 r1 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0x55));
- __m128 r2 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0xaa));
- row = m_el[1].mVec128;
- r0 = _mm_add_ps(r0, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0x55)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0xaa)));
- row = m_el[2].mVec128;
- r0 = _mm_add_ps(r0, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0x55)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0xaa)));
- return b3Matrix3x3(r0, r1, r2);
-
-#elif defined B3_USE_NEON
- // zeros w
- static const uint32x4_t xyzMask = (const uint32x4_t){-1, -1, -1, 0};
- float32x4_t m0 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(0).mVec128, xyzMask);
- float32x4_t m1 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(1).mVec128, xyzMask);
- float32x4_t m2 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(2).mVec128, xyzMask);
- float32x4_t row = m_el[0].mVec128;
- float32x4_t r0 = vmulq_lane_f32(m0, vget_low_f32(row), 0);
- float32x4_t r1 = vmulq_lane_f32(m0, vget_low_f32(row), 1);
- float32x4_t r2 = vmulq_lane_f32(m0, vget_high_f32(row), 0);
- row = m_el[1].mVec128;
- r0 = vmlaq_lane_f32(r0, m1, vget_low_f32(row), 0);
- r1 = vmlaq_lane_f32(r1, m1, vget_low_f32(row), 1);
- r2 = vmlaq_lane_f32(r2, m1, vget_high_f32(row), 0);
- row = m_el[2].mVec128;
- r0 = vmlaq_lane_f32(r0, m2, vget_low_f32(row), 0);
- r1 = vmlaq_lane_f32(r1, m2, vget_low_f32(row), 1);
- r2 = vmlaq_lane_f32(r2, m2, vget_high_f32(row), 0);
- return b3Matrix3x3(r0, r1, r2);
-#else
- return b3Matrix3x3(
- m_el[0].getX() * m[0].getX() + m_el[1].getX() * m[1].getX() + m_el[2].getX() * m[2].getX(),
- m_el[0].getX() * m[0].getY() + m_el[1].getX() * m[1].getY() + m_el[2].getX() * m[2].getY(),
- m_el[0].getX() * m[0].getZ() + m_el[1].getX() * m[1].getZ() + m_el[2].getX() * m[2].getZ(),
- m_el[0].getY() * m[0].getX() + m_el[1].getY() * m[1].getX() + m_el[2].getY() * m[2].getX(),
- m_el[0].getY() * m[0].getY() + m_el[1].getY() * m[1].getY() + m_el[2].getY() * m[2].getY(),
- m_el[0].getY() * m[0].getZ() + m_el[1].getY() * m[1].getZ() + m_el[2].getY() * m[2].getZ(),
- m_el[0].getZ() * m[0].getX() + m_el[1].getZ() * m[1].getX() + m_el[2].getZ() * m[2].getX(),
- m_el[0].getZ() * m[0].getY() + m_el[1].getZ() * m[1].getY() + m_el[2].getZ() * m[2].getY(),
- m_el[0].getZ() * m[0].getZ() + m_el[1].getZ() * m[1].getZ() + m_el[2].getZ() * m[2].getZ());
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-b3Matrix3x3::timesTranspose(const b3Matrix3x3& m) const
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- __m128 a0 = m_el[0].mVec128;
- __m128 a1 = m_el[1].mVec128;
- __m128 a2 = m_el[2].mVec128;
-
- b3Matrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here
- __m128 mx = mT[0].mVec128;
- __m128 my = mT[1].mVec128;
- __m128 mz = mT[2].mVec128;
-
- __m128 r0 = _mm_mul_ps(mx, _mm_shuffle_ps(a0, a0, 0x00));
- __m128 r1 = _mm_mul_ps(mx, _mm_shuffle_ps(a1, a1, 0x00));
- __m128 r2 = _mm_mul_ps(mx, _mm_shuffle_ps(a2, a2, 0x00));
- r0 = _mm_add_ps(r0, _mm_mul_ps(my, _mm_shuffle_ps(a0, a0, 0x55)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(my, _mm_shuffle_ps(a1, a1, 0x55)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(my, _mm_shuffle_ps(a2, a2, 0x55)));
- r0 = _mm_add_ps(r0, _mm_mul_ps(mz, _mm_shuffle_ps(a0, a0, 0xaa)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(mz, _mm_shuffle_ps(a1, a1, 0xaa)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(mz, _mm_shuffle_ps(a2, a2, 0xaa)));
- return b3Matrix3x3(r0, r1, r2);
-
-#elif defined B3_USE_NEON
- float32x4_t a0 = m_el[0].mVec128;
- float32x4_t a1 = m_el[1].mVec128;
- float32x4_t a2 = m_el[2].mVec128;
-
- b3Matrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here
- float32x4_t mx = mT[0].mVec128;
- float32x4_t my = mT[1].mVec128;
- float32x4_t mz = mT[2].mVec128;
-
- float32x4_t r0 = vmulq_lane_f32(mx, vget_low_f32(a0), 0);
- float32x4_t r1 = vmulq_lane_f32(mx, vget_low_f32(a1), 0);
- float32x4_t r2 = vmulq_lane_f32(mx, vget_low_f32(a2), 0);
- r0 = vmlaq_lane_f32(r0, my, vget_low_f32(a0), 1);
- r1 = vmlaq_lane_f32(r1, my, vget_low_f32(a1), 1);
- r2 = vmlaq_lane_f32(r2, my, vget_low_f32(a2), 1);
- r0 = vmlaq_lane_f32(r0, mz, vget_high_f32(a0), 0);
- r1 = vmlaq_lane_f32(r1, mz, vget_high_f32(a1), 0);
- r2 = vmlaq_lane_f32(r2, mz, vget_high_f32(a2), 0);
- return b3Matrix3x3(r0, r1, r2);
-
-#else
- return b3Matrix3x3(
- m_el[0].dot(m[0]), m_el[0].dot(m[1]), m_el[0].dot(m[2]),
- m_el[1].dot(m[0]), m_el[1].dot(m[1]), m_el[1].dot(m[2]),
- m_el[2].dot(m[0]), m_el[2].dot(m[1]), m_el[2].dot(m[2]));
-#endif
-}
-
-B3_FORCE_INLINE b3Vector3
-operator*(const b3Matrix3x3& m, const b3Vector3& v)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- return v.dot3(m[0], m[1], m[2]);
-#else
- return b3MakeVector3(m[0].dot(v), m[1].dot(v), m[2].dot(v));
-#endif
-}
-
-B3_FORCE_INLINE b3Vector3
-operator*(const b3Vector3& v, const b3Matrix3x3& m)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
-
- const __m128 vv = v.mVec128;
-
- __m128 c0 = b3_splat_ps(vv, 0);
- __m128 c1 = b3_splat_ps(vv, 1);
- __m128 c2 = b3_splat_ps(vv, 2);
-
- c0 = _mm_mul_ps(c0, _mm_and_ps(m[0].mVec128, b3vFFF0fMask));
- c1 = _mm_mul_ps(c1, _mm_and_ps(m[1].mVec128, b3vFFF0fMask));
- c0 = _mm_add_ps(c0, c1);
- c2 = _mm_mul_ps(c2, _mm_and_ps(m[2].mVec128, b3vFFF0fMask));
-
- return b3MakeVector3(_mm_add_ps(c0, c2));
-#elif defined(B3_USE_NEON)
- const float32x4_t vv = v.mVec128;
- const float32x2_t vlo = vget_low_f32(vv);
- const float32x2_t vhi = vget_high_f32(vv);
-
- float32x4_t c0, c1, c2;
-
- c0 = (float32x4_t)vandq_s32((int32x4_t)m[0].mVec128, b3vFFF0Mask);
- c1 = (float32x4_t)vandq_s32((int32x4_t)m[1].mVec128, b3vFFF0Mask);
- c2 = (float32x4_t)vandq_s32((int32x4_t)m[2].mVec128, b3vFFF0Mask);
-
- c0 = vmulq_lane_f32(c0, vlo, 0);
- c1 = vmulq_lane_f32(c1, vlo, 1);
- c2 = vmulq_lane_f32(c2, vhi, 0);
- c0 = vaddq_f32(c0, c1);
- c0 = vaddq_f32(c0, c2);
-
- return b3MakeVector3(c0);
-#else
- return b3MakeVector3(m.tdotx(v), m.tdoty(v), m.tdotz(v));
-#endif
-}
-
-B3_FORCE_INLINE b3Matrix3x3
-operator*(const b3Matrix3x3& m1, const b3Matrix3x3& m2)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
-
- __m128 m10 = m1[0].mVec128;
- __m128 m11 = m1[1].mVec128;
- __m128 m12 = m1[2].mVec128;
-
- __m128 m2v = _mm_and_ps(m2[0].mVec128, b3vFFF0fMask);
-
- __m128 c0 = b3_splat_ps(m10, 0);
- __m128 c1 = b3_splat_ps(m11, 0);
- __m128 c2 = b3_splat_ps(m12, 0);
-
- c0 = _mm_mul_ps(c0, m2v);
- c1 = _mm_mul_ps(c1, m2v);
- c2 = _mm_mul_ps(c2, m2v);
-
- m2v = _mm_and_ps(m2[1].mVec128, b3vFFF0fMask);
-
- __m128 c0_1 = b3_splat_ps(m10, 1);
- __m128 c1_1 = b3_splat_ps(m11, 1);
- __m128 c2_1 = b3_splat_ps(m12, 1);
-
- c0_1 = _mm_mul_ps(c0_1, m2v);
- c1_1 = _mm_mul_ps(c1_1, m2v);
- c2_1 = _mm_mul_ps(c2_1, m2v);
-
- m2v = _mm_and_ps(m2[2].mVec128, b3vFFF0fMask);
-
- c0 = _mm_add_ps(c0, c0_1);
- c1 = _mm_add_ps(c1, c1_1);
- c2 = _mm_add_ps(c2, c2_1);
-
- m10 = b3_splat_ps(m10, 2);
- m11 = b3_splat_ps(m11, 2);
- m12 = b3_splat_ps(m12, 2);
-
- m10 = _mm_mul_ps(m10, m2v);
- m11 = _mm_mul_ps(m11, m2v);
- m12 = _mm_mul_ps(m12, m2v);
-
- c0 = _mm_add_ps(c0, m10);
- c1 = _mm_add_ps(c1, m11);
- c2 = _mm_add_ps(c2, m12);
-
- return b3Matrix3x3(c0, c1, c2);
-
-#elif defined(B3_USE_NEON)
-
- float32x4_t rv0, rv1, rv2;
- float32x4_t v0, v1, v2;
- float32x4_t mv0, mv1, mv2;
-
- v0 = m1[0].mVec128;
- v1 = m1[1].mVec128;
- v2 = m1[2].mVec128;
-
- mv0 = (float32x4_t)vandq_s32((int32x4_t)m2[0].mVec128, b3vFFF0Mask);
- mv1 = (float32x4_t)vandq_s32((int32x4_t)m2[1].mVec128, b3vFFF0Mask);
- mv2 = (float32x4_t)vandq_s32((int32x4_t)m2[2].mVec128, b3vFFF0Mask);
-
- rv0 = vmulq_lane_f32(mv0, vget_low_f32(v0), 0);
- rv1 = vmulq_lane_f32(mv0, vget_low_f32(v1), 0);
- rv2 = vmulq_lane_f32(mv0, vget_low_f32(v2), 0);
-
- rv0 = vmlaq_lane_f32(rv0, mv1, vget_low_f32(v0), 1);
- rv1 = vmlaq_lane_f32(rv1, mv1, vget_low_f32(v1), 1);
- rv2 = vmlaq_lane_f32(rv2, mv1, vget_low_f32(v2), 1);
-
- rv0 = vmlaq_lane_f32(rv0, mv2, vget_high_f32(v0), 0);
- rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0);
- rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0);
-
- return b3Matrix3x3(rv0, rv1, rv2);
-
-#else
- return b3Matrix3x3(
- m2.tdotx(m1[0]), m2.tdoty(m1[0]), m2.tdotz(m1[0]),
- m2.tdotx(m1[1]), m2.tdoty(m1[1]), m2.tdotz(m1[1]),
- m2.tdotx(m1[2]), m2.tdoty(m1[2]), m2.tdotz(m1[2]));
-#endif
-}
-
-/*
-B3_FORCE_INLINE b3Matrix3x3 b3MultTransposeLeft(const b3Matrix3x3& m1, const b3Matrix3x3& m2) {
-return b3Matrix3x3(
-m1[0][0] * m2[0][0] + m1[1][0] * m2[1][0] + m1[2][0] * m2[2][0],
-m1[0][0] * m2[0][1] + m1[1][0] * m2[1][1] + m1[2][0] * m2[2][1],
-m1[0][0] * m2[0][2] + m1[1][0] * m2[1][2] + m1[2][0] * m2[2][2],
-m1[0][1] * m2[0][0] + m1[1][1] * m2[1][0] + m1[2][1] * m2[2][0],
-m1[0][1] * m2[0][1] + m1[1][1] * m2[1][1] + m1[2][1] * m2[2][1],
-m1[0][1] * m2[0][2] + m1[1][1] * m2[1][2] + m1[2][1] * m2[2][2],
-m1[0][2] * m2[0][0] + m1[1][2] * m2[1][0] + m1[2][2] * m2[2][0],
-m1[0][2] * m2[0][1] + m1[1][2] * m2[1][1] + m1[2][2] * m2[2][1],
-m1[0][2] * m2[0][2] + m1[1][2] * m2[1][2] + m1[2][2] * m2[2][2]);
-}
-*/
-
-/**@brief Equality operator between two matrices
-* It will test all elements are equal. */
-B3_FORCE_INLINE bool operator==(const b3Matrix3x3& m1, const b3Matrix3x3& m2)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
-
- __m128 c0, c1, c2;
-
- c0 = _mm_cmpeq_ps(m1[0].mVec128, m2[0].mVec128);
- c1 = _mm_cmpeq_ps(m1[1].mVec128, m2[1].mVec128);
- c2 = _mm_cmpeq_ps(m1[2].mVec128, m2[2].mVec128);
-
- c0 = _mm_and_ps(c0, c1);
- c0 = _mm_and_ps(c0, c2);
-
- return (0x7 == _mm_movemask_ps((__m128)c0));
-#else
- return (m1[0][0] == m2[0][0] && m1[1][0] == m2[1][0] && m1[2][0] == m2[2][0] &&
- m1[0][1] == m2[0][1] && m1[1][1] == m2[1][1] && m1[2][1] == m2[2][1] &&
- m1[0][2] == m2[0][2] && m1[1][2] == m2[1][2] && m1[2][2] == m2[2][2]);
-#endif
-}
-
-///for serialization
-struct b3Matrix3x3FloatData
-{
- b3Vector3FloatData m_el[3];
-};
-
-///for serialization
-struct b3Matrix3x3DoubleData
-{
- b3Vector3DoubleData m_el[3];
-};
-
-B3_FORCE_INLINE void b3Matrix3x3::serialize(struct b3Matrix3x3Data& dataOut) const
-{
- for (int i = 0; i < 3; i++)
- m_el[i].serialize(dataOut.m_el[i]);
-}
-
-B3_FORCE_INLINE void b3Matrix3x3::serializeFloat(struct b3Matrix3x3FloatData& dataOut) const
-{
- for (int i = 0; i < 3; i++)
- m_el[i].serializeFloat(dataOut.m_el[i]);
-}
-
-B3_FORCE_INLINE void b3Matrix3x3::deSerialize(const struct b3Matrix3x3Data& dataIn)
-{
- for (int i = 0; i < 3; i++)
- m_el[i].deSerialize(dataIn.m_el[i]);
-}
-
-B3_FORCE_INLINE void b3Matrix3x3::deSerializeFloat(const struct b3Matrix3x3FloatData& dataIn)
-{
- for (int i = 0; i < 3; i++)
- m_el[i].deSerializeFloat(dataIn.m_el[i]);
-}
-
-B3_FORCE_INLINE void b3Matrix3x3::deSerializeDouble(const struct b3Matrix3x3DoubleData& dataIn)
-{
- for (int i = 0; i < 3; i++)
- m_el[i].deSerializeDouble(dataIn.m_el[i]);
-}
-
-#endif //B3_MATRIX3x3_H
diff --git a/thirdparty/bullet/Bullet3Common/b3MinMax.h b/thirdparty/bullet/Bullet3Common/b3MinMax.h
deleted file mode 100644
index c09c3db3f5..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3MinMax.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_GEN_MINMAX_H
-#define B3_GEN_MINMAX_H
-
-#include "b3Scalar.h"
-
-template <class T>
-B3_FORCE_INLINE const T& b3Min(const T& a, const T& b)
-{
- return a < b ? a : b;
-}
-
-template <class T>
-B3_FORCE_INLINE const T& b3Max(const T& a, const T& b)
-{
- return a > b ? a : b;
-}
-
-template <class T>
-B3_FORCE_INLINE const T& b3Clamped(const T& a, const T& lb, const T& ub)
-{
- return a < lb ? lb : (ub < a ? ub : a);
-}
-
-template <class T>
-B3_FORCE_INLINE void b3SetMin(T& a, const T& b)
-{
- if (b < a)
- {
- a = b;
- }
-}
-
-template <class T>
-B3_FORCE_INLINE void b3SetMax(T& a, const T& b)
-{
- if (a < b)
- {
- a = b;
- }
-}
-
-template <class T>
-B3_FORCE_INLINE void b3Clamp(T& a, const T& lb, const T& ub)
-{
- if (a < lb)
- {
- a = lb;
- }
- else if (ub < a)
- {
- a = ub;
- }
-}
-
-#endif //B3_GEN_MINMAX_H
diff --git a/thirdparty/bullet/Bullet3Common/b3PoolAllocator.h b/thirdparty/bullet/Bullet3Common/b3PoolAllocator.h
deleted file mode 100644
index ed56bc627d..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3PoolAllocator.h
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef _BT_POOL_ALLOCATOR_H
-#define _BT_POOL_ALLOCATOR_H
-
-#include "b3Scalar.h"
-#include "b3AlignedAllocator.h"
-
-///The b3PoolAllocator class allows to efficiently allocate a large pool of objects, instead of dynamically allocating them separately.
-class b3PoolAllocator
-{
- int m_elemSize;
- int m_maxElements;
- int m_freeCount;
- void* m_firstFree;
- unsigned char* m_pool;
-
-public:
- b3PoolAllocator(int elemSize, int maxElements)
- : m_elemSize(elemSize),
- m_maxElements(maxElements)
- {
- m_pool = (unsigned char*)b3AlignedAlloc(static_cast<unsigned int>(m_elemSize * m_maxElements), 16);
-
- unsigned char* p = m_pool;
- m_firstFree = p;
- m_freeCount = m_maxElements;
- int count = m_maxElements;
- while (--count)
- {
- *(void**)p = (p + m_elemSize);
- p += m_elemSize;
- }
- *(void**)p = 0;
- }
-
- ~b3PoolAllocator()
- {
- b3AlignedFree(m_pool);
- }
-
- int getFreeCount() const
- {
- return m_freeCount;
- }
-
- int getUsedCount() const
- {
- return m_maxElements - m_freeCount;
- }
-
- int getMaxCount() const
- {
- return m_maxElements;
- }
-
- void* allocate(int size)
- {
- // release mode fix
- (void)size;
- b3Assert(!size || size <= m_elemSize);
- b3Assert(m_freeCount > 0);
- void* result = m_firstFree;
- m_firstFree = *(void**)m_firstFree;
- --m_freeCount;
- return result;
- }
-
- bool validPtr(void* ptr)
- {
- if (ptr)
- {
- if (((unsigned char*)ptr >= m_pool && (unsigned char*)ptr < m_pool + m_maxElements * m_elemSize))
- {
- return true;
- }
- }
- return false;
- }
-
- void freeMemory(void* ptr)
- {
- if (ptr)
- {
- b3Assert((unsigned char*)ptr >= m_pool && (unsigned char*)ptr < m_pool + m_maxElements * m_elemSize);
-
- *(void**)ptr = m_firstFree;
- m_firstFree = ptr;
- ++m_freeCount;
- }
- }
-
- int getElementSize() const
- {
- return m_elemSize;
- }
-
- unsigned char* getPoolAddress()
- {
- return m_pool;
- }
-
- const unsigned char* getPoolAddress() const
- {
- return m_pool;
- }
-};
-
-#endif //_BT_POOL_ALLOCATOR_H
diff --git a/thirdparty/bullet/Bullet3Common/b3QuadWord.h b/thirdparty/bullet/Bullet3Common/b3QuadWord.h
deleted file mode 100644
index 0def305fac..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3QuadWord.h
+++ /dev/null
@@ -1,242 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_SIMD_QUADWORD_H
-#define B3_SIMD_QUADWORD_H
-
-#include "b3Scalar.h"
-#include "b3MinMax.h"
-
-#if defined(__CELLOS_LV2) && defined(__SPU__)
-#include <altivec.h>
-#endif
-
-/**@brief The b3QuadWord class is base class for b3Vector3 and b3Quaternion.
- * Some issues under PS3 Linux with IBM 2.1 SDK, gcc compiler prevent from using aligned quadword.
- */
-#ifndef USE_LIBSPE2
-B3_ATTRIBUTE_ALIGNED16(class)
-b3QuadWord
-#else
-class b3QuadWord
-#endif
-{
-protected:
-#if defined(__SPU__) && defined(__CELLOS_LV2__)
- union {
- vec_float4 mVec128;
- b3Scalar m_floats[4];
- };
-
-public:
- vec_float4 get128() const
- {
- return mVec128;
- }
-
-#else //__CELLOS_LV2__ __SPU__
-
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-public:
- union {
- b3SimdFloat4 mVec128;
- b3Scalar m_floats[4];
- struct
- {
- b3Scalar x, y, z, w;
- };
- };
-
-public:
- B3_FORCE_INLINE b3SimdFloat4 get128() const
- {
- return mVec128;
- }
- B3_FORCE_INLINE void set128(b3SimdFloat4 v128)
- {
- mVec128 = v128;
- }
-#else
-public:
- union {
- b3Scalar m_floats[4];
- struct
- {
- b3Scalar x, y, z, w;
- };
- };
-#endif // B3_USE_SSE
-
-#endif //__CELLOS_LV2__ __SPU__
-
-public:
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-
- // Set Vector
- B3_FORCE_INLINE b3QuadWord(const b3SimdFloat4 vec)
- {
- mVec128 = vec;
- }
-
- // Copy constructor
- B3_FORCE_INLINE b3QuadWord(const b3QuadWord& rhs)
- {
- mVec128 = rhs.mVec128;
- }
-
- // Assignment Operator
- B3_FORCE_INLINE b3QuadWord&
- operator=(const b3QuadWord& v)
- {
- mVec128 = v.mVec128;
-
- return *this;
- }
-
-#endif
-
- /**@brief Return the x value */
- B3_FORCE_INLINE const b3Scalar& getX() const { return m_floats[0]; }
- /**@brief Return the y value */
- B3_FORCE_INLINE const b3Scalar& getY() const { return m_floats[1]; }
- /**@brief Return the z value */
- B3_FORCE_INLINE const b3Scalar& getZ() const { return m_floats[2]; }
- /**@brief Set the x value */
- B3_FORCE_INLINE void setX(b3Scalar _x) { m_floats[0] = _x; };
- /**@brief Set the y value */
- B3_FORCE_INLINE void setY(b3Scalar _y) { m_floats[1] = _y; };
- /**@brief Set the z value */
- B3_FORCE_INLINE void setZ(b3Scalar _z) { m_floats[2] = _z; };
- /**@brief Set the w value */
- B3_FORCE_INLINE void setW(b3Scalar _w) { m_floats[3] = _w; };
- /**@brief Return the x value */
-
- //B3_FORCE_INLINE b3Scalar& operator[](int i) { return (&m_floats[0])[i]; }
- //B3_FORCE_INLINE const b3Scalar& operator[](int i) const { return (&m_floats[0])[i]; }
- ///operator b3Scalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons.
- B3_FORCE_INLINE operator b3Scalar*() { return &m_floats[0]; }
- B3_FORCE_INLINE operator const b3Scalar*() const { return &m_floats[0]; }
-
- B3_FORCE_INLINE bool operator==(const b3QuadWord& other) const
- {
-#ifdef B3_USE_SSE
- return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128)));
-#else
- return ((m_floats[3] == other.m_floats[3]) &&
- (m_floats[2] == other.m_floats[2]) &&
- (m_floats[1] == other.m_floats[1]) &&
- (m_floats[0] == other.m_floats[0]));
-#endif
- }
-
- B3_FORCE_INLINE bool operator!=(const b3QuadWord& other) const
- {
- return !(*this == other);
- }
-
- /**@brief Set x,y,z and zero w
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- */
- B3_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = 0.f;
- }
-
- /* void getValue(b3Scalar *m) const
- {
- m[0] = m_floats[0];
- m[1] = m_floats[1];
- m[2] = m_floats[2];
- }
-*/
- /**@brief Set the values
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
- */
- B3_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z, const b3Scalar& _w)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = _w;
- }
- /**@brief No initialization constructor */
- B3_FORCE_INLINE b3QuadWord()
- // :m_floats[0](b3Scalar(0.)),m_floats[1](b3Scalar(0.)),m_floats[2](b3Scalar(0.)),m_floats[3](b3Scalar(0.))
- {
- }
-
- /**@brief Three argument constructor (zeros w)
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- */
- B3_FORCE_INLINE b3QuadWord(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z)
- {
- m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = 0.0f;
- }
-
- /**@brief Initializing constructor
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
- */
- B3_FORCE_INLINE b3QuadWord(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z, const b3Scalar& _w)
- {
- m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = _w;
- }
-
- /**@brief Set each element to the max of the current values and the values of another b3QuadWord
- * @param other The other b3QuadWord to compare with
- */
- B3_FORCE_INLINE void setMax(const b3QuadWord& other)
- {
-#ifdef B3_USE_SSE
- mVec128 = _mm_max_ps(mVec128, other.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vmaxq_f32(mVec128, other.mVec128);
-#else
- b3SetMax(m_floats[0], other.m_floats[0]);
- b3SetMax(m_floats[1], other.m_floats[1]);
- b3SetMax(m_floats[2], other.m_floats[2]);
- b3SetMax(m_floats[3], other.m_floats[3]);
-#endif
- }
- /**@brief Set each element to the min of the current values and the values of another b3QuadWord
- * @param other The other b3QuadWord to compare with
- */
- B3_FORCE_INLINE void setMin(const b3QuadWord& other)
- {
-#ifdef B3_USE_SSE
- mVec128 = _mm_min_ps(mVec128, other.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vminq_f32(mVec128, other.mVec128);
-#else
- b3SetMin(m_floats[0], other.m_floats[0]);
- b3SetMin(m_floats[1], other.m_floats[1]);
- b3SetMin(m_floats[2], other.m_floats[2]);
- b3SetMin(m_floats[3], other.m_floats[3]);
-#endif
- }
-};
-
-#endif //B3_SIMD_QUADWORD_H
diff --git a/thirdparty/bullet/Bullet3Common/b3Quaternion.h b/thirdparty/bullet/Bullet3Common/b3Quaternion.h
deleted file mode 100644
index 4fdd72dcc4..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Quaternion.h
+++ /dev/null
@@ -1,908 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_SIMD__QUATERNION_H_
-#define B3_SIMD__QUATERNION_H_
-
-#include "b3Vector3.h"
-#include "b3QuadWord.h"
-
-#ifdef B3_USE_SSE
-
-const __m128 B3_ATTRIBUTE_ALIGNED16(b3vOnes) = {1.0f, 1.0f, 1.0f, 1.0f};
-
-#endif
-
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-
-const b3SimdFloat4 B3_ATTRIBUTE_ALIGNED16(b3vQInv) = {-0.0f, -0.0f, -0.0f, +0.0f};
-const b3SimdFloat4 B3_ATTRIBUTE_ALIGNED16(b3vPPPM) = {+0.0f, +0.0f, +0.0f, -0.0f};
-
-#endif
-
-/**@brief The b3Quaternion implements quaternion to perform linear algebra rotations in combination with b3Matrix3x3, b3Vector3 and b3Transform. */
-class b3Quaternion : public b3QuadWord
-{
-public:
- /**@brief No initialization constructor */
- b3Quaternion() {}
-
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)) || defined(B3_USE_NEON)
- // Set Vector
- B3_FORCE_INLINE b3Quaternion(const b3SimdFloat4 vec)
- {
- mVec128 = vec;
- }
-
- // Copy constructor
- B3_FORCE_INLINE b3Quaternion(const b3Quaternion& rhs)
- {
- mVec128 = rhs.mVec128;
- }
-
- // Assignment Operator
- B3_FORCE_INLINE b3Quaternion&
- operator=(const b3Quaternion& v)
- {
- mVec128 = v.mVec128;
-
- return *this;
- }
-
-#endif
-
- // template <typename b3Scalar>
- // explicit Quaternion(const b3Scalar *v) : Tuple4<b3Scalar>(v) {}
- /**@brief Constructor from scalars */
- b3Quaternion(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z, const b3Scalar& _w)
- : b3QuadWord(_x, _y, _z, _w)
- {
- //b3Assert(!((_x==1.f) && (_y==0.f) && (_z==0.f) && (_w==0.f)));
- }
- /**@brief Axis angle Constructor
- * @param axis The axis which the rotation is around
- * @param angle The magnitude of the rotation around the angle (Radians) */
- b3Quaternion(const b3Vector3& _axis, const b3Scalar& _angle)
- {
- setRotation(_axis, _angle);
- }
- /**@brief Constructor from Euler angles
- * @param yaw Angle around Y unless B3_EULER_DEFAULT_ZYX defined then Z
- * @param pitch Angle around X unless B3_EULER_DEFAULT_ZYX defined then Y
- * @param roll Angle around Z unless B3_EULER_DEFAULT_ZYX defined then X */
- b3Quaternion(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll)
- {
-#ifndef B3_EULER_DEFAULT_ZYX
- setEuler(yaw, pitch, roll);
-#else
- setEulerZYX(yaw, pitch, roll);
-#endif
- }
- /**@brief Set the rotation using axis angle notation
- * @param axis The axis around which to rotate
- * @param angle The magnitude of the rotation in Radians */
- void setRotation(const b3Vector3& axis1, const b3Scalar& _angle)
- {
- b3Vector3 axis = axis1;
- axis.safeNormalize();
-
- b3Scalar d = axis.length();
- b3Assert(d != b3Scalar(0.0));
- if (d < B3_EPSILON)
- {
- setValue(0, 0, 0, 1);
- }
- else
- {
- b3Scalar s = b3Sin(_angle * b3Scalar(0.5)) / d;
- setValue(axis.getX() * s, axis.getY() * s, axis.getZ() * s,
- b3Cos(_angle * b3Scalar(0.5)));
- }
- }
- /**@brief Set the quaternion using Euler angles
- * @param yaw Angle around Y
- * @param pitch Angle around X
- * @param roll Angle around Z */
- void setEuler(const b3Scalar& yaw, const b3Scalar& pitch, const b3Scalar& roll)
- {
- b3Scalar halfYaw = b3Scalar(yaw) * b3Scalar(0.5);
- b3Scalar halfPitch = b3Scalar(pitch) * b3Scalar(0.5);
- b3Scalar halfRoll = b3Scalar(roll) * b3Scalar(0.5);
- b3Scalar cosYaw = b3Cos(halfYaw);
- b3Scalar sinYaw = b3Sin(halfYaw);
- b3Scalar cosPitch = b3Cos(halfPitch);
- b3Scalar sinPitch = b3Sin(halfPitch);
- b3Scalar cosRoll = b3Cos(halfRoll);
- b3Scalar sinRoll = b3Sin(halfRoll);
- setValue(cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw,
- cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw,
- sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw,
- cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw);
- }
-
- /**@brief Set the quaternion using euler angles
- * @param yaw Angle around Z
- * @param pitch Angle around Y
- * @param roll Angle around X */
- void setEulerZYX(const b3Scalar& yawZ, const b3Scalar& pitchY, const b3Scalar& rollX)
- {
- b3Scalar halfYaw = b3Scalar(yawZ) * b3Scalar(0.5);
- b3Scalar halfPitch = b3Scalar(pitchY) * b3Scalar(0.5);
- b3Scalar halfRoll = b3Scalar(rollX) * b3Scalar(0.5);
- b3Scalar cosYaw = b3Cos(halfYaw);
- b3Scalar sinYaw = b3Sin(halfYaw);
- b3Scalar cosPitch = b3Cos(halfPitch);
- b3Scalar sinPitch = b3Sin(halfPitch);
- b3Scalar cosRoll = b3Cos(halfRoll);
- b3Scalar sinRoll = b3Sin(halfRoll);
- setValue(sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw, //x
- cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw, //y
- cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw, //z
- cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw); //formerly yzx
- normalize();
- }
-
- /**@brief Get the euler angles from this quaternion
- * @param yaw Angle around Z
- * @param pitch Angle around Y
- * @param roll Angle around X */
- void getEulerZYX(b3Scalar& yawZ, b3Scalar& pitchY, b3Scalar& rollX) const
- {
- b3Scalar squ;
- b3Scalar sqx;
- b3Scalar sqy;
- b3Scalar sqz;
- b3Scalar sarg;
- sqx = m_floats[0] * m_floats[0];
- sqy = m_floats[1] * m_floats[1];
- sqz = m_floats[2] * m_floats[2];
- squ = m_floats[3] * m_floats[3];
- rollX = b3Atan2(2 * (m_floats[1] * m_floats[2] + m_floats[3] * m_floats[0]), squ - sqx - sqy + sqz);
- sarg = b3Scalar(-2.) * (m_floats[0] * m_floats[2] - m_floats[3] * m_floats[1]);
- pitchY = sarg <= b3Scalar(-1.0) ? b3Scalar(-0.5) * B3_PI : (sarg >= b3Scalar(1.0) ? b3Scalar(0.5) * B3_PI : b3Asin(sarg));
- yawZ = b3Atan2(2 * (m_floats[0] * m_floats[1] + m_floats[3] * m_floats[2]), squ + sqx - sqy - sqz);
- }
-
- /**@brief Add two quaternions
- * @param q The quaternion to add to this one */
- B3_FORCE_INLINE b3Quaternion& operator+=(const b3Quaternion& q)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_add_ps(mVec128, q.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vaddq_f32(mVec128, q.mVec128);
-#else
- m_floats[0] += q.getX();
- m_floats[1] += q.getY();
- m_floats[2] += q.getZ();
- m_floats[3] += q.m_floats[3];
-#endif
- return *this;
- }
-
- /**@brief Subtract out a quaternion
- * @param q The quaternion to subtract from this one */
- b3Quaternion& operator-=(const b3Quaternion& q)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_sub_ps(mVec128, q.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vsubq_f32(mVec128, q.mVec128);
-#else
- m_floats[0] -= q.getX();
- m_floats[1] -= q.getY();
- m_floats[2] -= q.getZ();
- m_floats[3] -= q.m_floats[3];
-#endif
- return *this;
- }
-
- /**@brief Scale this quaternion
- * @param s The scalar to scale by */
- b3Quaternion& operator*=(const b3Scalar& s)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = b3_pshufd_ps(vs, 0); // (S S S S)
- mVec128 = _mm_mul_ps(mVec128, vs);
-#elif defined(B3_USE_NEON)
- mVec128 = vmulq_n_f32(mVec128, s);
-#else
- m_floats[0] *= s;
- m_floats[1] *= s;
- m_floats[2] *= s;
- m_floats[3] *= s;
-#endif
- return *this;
- }
-
- /**@brief Multiply this quaternion by q on the right
- * @param q The other quaternion
- * Equivilant to this = this * q */
- b3Quaternion& operator*=(const b3Quaternion& q)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vQ2 = q.get128();
-
- __m128 A1 = b3_pshufd_ps(mVec128, B3_SHUFFLE(0, 1, 2, 0));
- __m128 B1 = b3_pshufd_ps(vQ2, B3_SHUFFLE(3, 3, 3, 0));
-
- A1 = A1 * B1;
-
- __m128 A2 = b3_pshufd_ps(mVec128, B3_SHUFFLE(1, 2, 0, 1));
- __m128 B2 = b3_pshufd_ps(vQ2, B3_SHUFFLE(2, 0, 1, 1));
-
- A2 = A2 * B2;
-
- B1 = b3_pshufd_ps(mVec128, B3_SHUFFLE(2, 0, 1, 2));
- B2 = b3_pshufd_ps(vQ2, B3_SHUFFLE(1, 2, 0, 2));
-
- B1 = B1 * B2; // A3 *= B3
-
- mVec128 = b3_splat_ps(mVec128, 3); // A0
- mVec128 = mVec128 * vQ2; // A0 * B0
-
- A1 = A1 + A2; // AB12
- mVec128 = mVec128 - B1; // AB03 = AB0 - AB3
- A1 = _mm_xor_ps(A1, b3vPPPM); // change sign of the last element
- mVec128 = mVec128 + A1; // AB03 + AB12
-
-#elif defined(B3_USE_NEON)
-
- float32x4_t vQ1 = mVec128;
- float32x4_t vQ2 = q.get128();
- float32x4_t A0, A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz;
-
- {
- float32x2x2_t tmp;
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
- }
- vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1);
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x
- B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
- A0 = vmulq_lane_f32(vQ2, vget_high_f32(vQ1), 1); // A0 * B0
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
- A0 = vsubq_f32(A0, A3); // AB03 = AB0 - AB3
-
- // change the sign of the last element
- A1 = (b3SimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)b3vPPPM);
- A0 = vaddq_f32(A0, A1); // AB03 + AB12
-
- mVec128 = A0;
-#else
- setValue(
- m_floats[3] * q.getX() + m_floats[0] * q.m_floats[3] + m_floats[1] * q.getZ() - m_floats[2] * q.getY(),
- m_floats[3] * q.getY() + m_floats[1] * q.m_floats[3] + m_floats[2] * q.getX() - m_floats[0] * q.getZ(),
- m_floats[3] * q.getZ() + m_floats[2] * q.m_floats[3] + m_floats[0] * q.getY() - m_floats[1] * q.getX(),
- m_floats[3] * q.m_floats[3] - m_floats[0] * q.getX() - m_floats[1] * q.getY() - m_floats[2] * q.getZ());
-#endif
- return *this;
- }
- /**@brief Return the dot product between this quaternion and another
- * @param q The other quaternion */
- b3Scalar dot(const b3Quaternion& q) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vd;
-
- vd = _mm_mul_ps(mVec128, q.mVec128);
-
- __m128 t = _mm_movehl_ps(vd, vd);
- vd = _mm_add_ps(vd, t);
- t = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, t);
-
- return _mm_cvtss_f32(vd);
-#elif defined(B3_USE_NEON)
- float32x4_t vd = vmulq_f32(mVec128, q.mVec128);
- float32x2_t x = vpadd_f32(vget_low_f32(vd), vget_high_f32(vd));
- x = vpadd_f32(x, x);
- return vget_lane_f32(x, 0);
-#else
- return m_floats[0] * q.getX() +
- m_floats[1] * q.getY() +
- m_floats[2] * q.getZ() +
- m_floats[3] * q.m_floats[3];
-#endif
- }
-
- /**@brief Return the length squared of the quaternion */
- b3Scalar length2() const
- {
- return dot(*this);
- }
-
- /**@brief Return the length of the quaternion */
- b3Scalar length() const
- {
- return b3Sqrt(length2());
- }
-
- /**@brief Normalize the quaternion
- * Such that x^2 + y^2 + z^2 +w^2 = 1 */
- b3Quaternion& normalize()
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vd;
-
- vd = _mm_mul_ps(mVec128, mVec128);
-
- __m128 t = _mm_movehl_ps(vd, vd);
- vd = _mm_add_ps(vd, t);
- t = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, t);
-
- vd = _mm_sqrt_ss(vd);
- vd = _mm_div_ss(b3vOnes, vd);
- vd = b3_pshufd_ps(vd, 0); // splat
- mVec128 = _mm_mul_ps(mVec128, vd);
-
- return *this;
-#else
- return *this /= length();
-#endif
- }
-
- /**@brief Return a scaled version of this quaternion
- * @param s The scale factor */
- B3_FORCE_INLINE b3Quaternion
- operator*(const b3Scalar& s) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = b3_pshufd_ps(vs, 0x00); // (S S S S)
-
- return b3Quaternion(_mm_mul_ps(mVec128, vs));
-#elif defined(B3_USE_NEON)
- return b3Quaternion(vmulq_n_f32(mVec128, s));
-#else
- return b3Quaternion(getX() * s, getY() * s, getZ() * s, m_floats[3] * s);
-#endif
- }
-
- /**@brief Return an inversely scaled versionof this quaternion
- * @param s The inverse scale factor */
- b3Quaternion operator/(const b3Scalar& s) const
- {
- b3Assert(s != b3Scalar(0.0));
- return *this * (b3Scalar(1.0) / s);
- }
-
- /**@brief Inversely scale this quaternion
- * @param s The scale factor */
- b3Quaternion& operator/=(const b3Scalar& s)
- {
- b3Assert(s != b3Scalar(0.0));
- return *this *= b3Scalar(1.0) / s;
- }
-
- /**@brief Return a normalized version of this quaternion */
- b3Quaternion normalized() const
- {
- return *this / length();
- }
- /**@brief Return the angle between this quaternion and the other
- * @param q The other quaternion */
- b3Scalar angle(const b3Quaternion& q) const
- {
- b3Scalar s = b3Sqrt(length2() * q.length2());
- b3Assert(s != b3Scalar(0.0));
- return b3Acos(dot(q) / s);
- }
- /**@brief Return the angle of rotation represented by this quaternion */
- b3Scalar getAngle() const
- {
- b3Scalar s = b3Scalar(2.) * b3Acos(m_floats[3]);
- return s;
- }
-
- /**@brief Return the axis of the rotation represented by this quaternion */
- b3Vector3 getAxis() const
- {
- b3Scalar s_squared = 1.f - m_floats[3] * m_floats[3];
-
- if (s_squared < b3Scalar(10.) * B3_EPSILON) //Check for divide by zero
- return b3MakeVector3(1.0, 0.0, 0.0); // Arbitrary
- b3Scalar s = 1.f / b3Sqrt(s_squared);
- return b3MakeVector3(m_floats[0] * s, m_floats[1] * s, m_floats[2] * s);
- }
-
- /**@brief Return the inverse of this quaternion */
- b3Quaternion inverse() const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3Quaternion(_mm_xor_ps(mVec128, b3vQInv));
-#elif defined(B3_USE_NEON)
- return b3Quaternion((b3SimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)b3vQInv));
-#else
- return b3Quaternion(-m_floats[0], -m_floats[1], -m_floats[2], m_floats[3]);
-#endif
- }
-
- /**@brief Return the sum of this quaternion and the other
- * @param q2 The other quaternion */
- B3_FORCE_INLINE b3Quaternion
- operator+(const b3Quaternion& q2) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3Quaternion(_mm_add_ps(mVec128, q2.mVec128));
-#elif defined(B3_USE_NEON)
- return b3Quaternion(vaddq_f32(mVec128, q2.mVec128));
-#else
- const b3Quaternion& q1 = *this;
- return b3Quaternion(q1.getX() + q2.getX(), q1.getY() + q2.getY(), q1.getZ() + q2.getZ(), q1.m_floats[3] + q2.m_floats[3]);
-#endif
- }
-
- /**@brief Return the difference between this quaternion and the other
- * @param q2 The other quaternion */
- B3_FORCE_INLINE b3Quaternion
- operator-(const b3Quaternion& q2) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3Quaternion(_mm_sub_ps(mVec128, q2.mVec128));
-#elif defined(B3_USE_NEON)
- return b3Quaternion(vsubq_f32(mVec128, q2.mVec128));
-#else
- const b3Quaternion& q1 = *this;
- return b3Quaternion(q1.getX() - q2.getX(), q1.getY() - q2.getY(), q1.getZ() - q2.getZ(), q1.m_floats[3] - q2.m_floats[3]);
-#endif
- }
-
- /**@brief Return the negative of this quaternion
- * This simply negates each element */
- B3_FORCE_INLINE b3Quaternion operator-() const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3Quaternion(_mm_xor_ps(mVec128, b3vMzeroMask));
-#elif defined(B3_USE_NEON)
- return b3Quaternion((b3SimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)b3vMzeroMask));
-#else
- const b3Quaternion& q2 = *this;
- return b3Quaternion(-q2.getX(), -q2.getY(), -q2.getZ(), -q2.m_floats[3]);
-#endif
- }
- /**@todo document this and it's use */
- B3_FORCE_INLINE b3Quaternion farthest(const b3Quaternion& qd) const
- {
- b3Quaternion diff, sum;
- diff = *this - qd;
- sum = *this + qd;
- if (diff.dot(diff) > sum.dot(sum))
- return qd;
- return (-qd);
- }
-
- /**@todo document this and it's use */
- B3_FORCE_INLINE b3Quaternion nearest(const b3Quaternion& qd) const
- {
- b3Quaternion diff, sum;
- diff = *this - qd;
- sum = *this + qd;
- if (diff.dot(diff) < sum.dot(sum))
- return qd;
- return (-qd);
- }
-
- /**@brief Return the quaternion which is the result of Spherical Linear Interpolation between this and the other quaternion
- * @param q The other quaternion to interpolate with
- * @param t The ratio between this and q to interpolate. If t = 0 the result is this, if t=1 the result is q.
- * Slerp interpolates assuming constant velocity. */
- b3Quaternion slerp(const b3Quaternion& q, const b3Scalar& t) const
- {
- b3Scalar magnitude = b3Sqrt(length2() * q.length2());
- b3Assert(magnitude > b3Scalar(0));
-
- b3Scalar product = dot(q) / magnitude;
- if (b3Fabs(product) < b3Scalar(1))
- {
- // Take care of long angle case see http://en.wikipedia.org/wiki/Slerp
- const b3Scalar sign = (product < 0) ? b3Scalar(-1) : b3Scalar(1);
-
- const b3Scalar theta = b3Acos(sign * product);
- const b3Scalar s1 = b3Sin(sign * t * theta);
- const b3Scalar d = b3Scalar(1.0) / b3Sin(theta);
- const b3Scalar s0 = b3Sin((b3Scalar(1.0) - t) * theta);
-
- return b3Quaternion(
- (m_floats[0] * s0 + q.getX() * s1) * d,
- (m_floats[1] * s0 + q.getY() * s1) * d,
- (m_floats[2] * s0 + q.getZ() * s1) * d,
- (m_floats[3] * s0 + q.m_floats[3] * s1) * d);
- }
- else
- {
- return *this;
- }
- }
-
- static const b3Quaternion& getIdentity()
- {
- static const b3Quaternion identityQuat(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.), b3Scalar(1.));
- return identityQuat;
- }
-
- B3_FORCE_INLINE const b3Scalar& getW() const { return m_floats[3]; }
-};
-
-/**@brief Return the product of two quaternions */
-B3_FORCE_INLINE b3Quaternion
-operator*(const b3Quaternion& q1, const b3Quaternion& q2)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vQ1 = q1.get128();
- __m128 vQ2 = q2.get128();
- __m128 A0, A1, B1, A2, B2;
-
- A1 = b3_pshufd_ps(vQ1, B3_SHUFFLE(0, 1, 2, 0)); // X Y z x // vtrn
- B1 = b3_pshufd_ps(vQ2, B3_SHUFFLE(3, 3, 3, 0)); // W W W X // vdup vext
-
- A1 = A1 * B1;
-
- A2 = b3_pshufd_ps(vQ1, B3_SHUFFLE(1, 2, 0, 1)); // Y Z X Y // vext
- B2 = b3_pshufd_ps(vQ2, B3_SHUFFLE(2, 0, 1, 1)); // z x Y Y // vtrn vdup
-
- A2 = A2 * B2;
-
- B1 = b3_pshufd_ps(vQ1, B3_SHUFFLE(2, 0, 1, 2)); // z x Y Z // vtrn vext
- B2 = b3_pshufd_ps(vQ2, B3_SHUFFLE(1, 2, 0, 2)); // Y Z x z // vext vtrn
-
- B1 = B1 * B2; // A3 *= B3
-
- A0 = b3_splat_ps(vQ1, 3); // A0
- A0 = A0 * vQ2; // A0 * B0
-
- A1 = A1 + A2; // AB12
- A0 = A0 - B1; // AB03 = AB0 - AB3
-
- A1 = _mm_xor_ps(A1, b3vPPPM); // change sign of the last element
- A0 = A0 + A1; // AB03 + AB12
-
- return b3Quaternion(A0);
-
-#elif defined(B3_USE_NEON)
-
- float32x4_t vQ1 = q1.get128();
- float32x4_t vQ2 = q2.get128();
- float32x4_t A0, A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz;
-
- {
- float32x2x2_t tmp;
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
- }
- vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1);
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x
- B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
- A0 = vmulq_lane_f32(vQ2, vget_high_f32(vQ1), 1); // A0 * B0
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
- A0 = vsubq_f32(A0, A3); // AB03 = AB0 - AB3
-
- // change the sign of the last element
- A1 = (b3SimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)b3vPPPM);
- A0 = vaddq_f32(A0, A1); // AB03 + AB12
-
- return b3Quaternion(A0);
-
-#else
- return b3Quaternion(
- q1.getW() * q2.getX() + q1.getX() * q2.getW() + q1.getY() * q2.getZ() - q1.getZ() * q2.getY(),
- q1.getW() * q2.getY() + q1.getY() * q2.getW() + q1.getZ() * q2.getX() - q1.getX() * q2.getZ(),
- q1.getW() * q2.getZ() + q1.getZ() * q2.getW() + q1.getX() * q2.getY() - q1.getY() * q2.getX(),
- q1.getW() * q2.getW() - q1.getX() * q2.getX() - q1.getY() * q2.getY() - q1.getZ() * q2.getZ());
-#endif
-}
-
-B3_FORCE_INLINE b3Quaternion
-operator*(const b3Quaternion& q, const b3Vector3& w)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vQ1 = q.get128();
- __m128 vQ2 = w.get128();
- __m128 A1, B1, A2, B2, A3, B3;
-
- A1 = b3_pshufd_ps(vQ1, B3_SHUFFLE(3, 3, 3, 0));
- B1 = b3_pshufd_ps(vQ2, B3_SHUFFLE(0, 1, 2, 0));
-
- A1 = A1 * B1;
-
- A2 = b3_pshufd_ps(vQ1, B3_SHUFFLE(1, 2, 0, 1));
- B2 = b3_pshufd_ps(vQ2, B3_SHUFFLE(2, 0, 1, 1));
-
- A2 = A2 * B2;
-
- A3 = b3_pshufd_ps(vQ1, B3_SHUFFLE(2, 0, 1, 2));
- B3 = b3_pshufd_ps(vQ2, B3_SHUFFLE(1, 2, 0, 2));
-
- A3 = A3 * B3; // A3 *= B3
-
- A1 = A1 + A2; // AB12
- A1 = _mm_xor_ps(A1, b3vPPPM); // change sign of the last element
- A1 = A1 - A3; // AB123 = AB12 - AB3
-
- return b3Quaternion(A1);
-
-#elif defined(B3_USE_NEON)
-
- float32x4_t vQ1 = q.get128();
- float32x4_t vQ2 = w.get128();
- float32x4_t A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1wx, vQ2zx, vQ1yz, vQ2yz, vQ1zx, vQ2xz;
-
- vQ1wx = vext_f32(vget_high_f32(vQ1), vget_low_f32(vQ1), 1);
- {
- float32x2x2_t tmp;
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
- }
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ1), 1), vQ1wx); // W W W X
- B1 = vcombine_f32(vget_low_f32(vQ2), vQ2zx); // X Y z x
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
-
- // change the sign of the last element
- A1 = (b3SimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)b3vPPPM);
-
- A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3
-
- return b3Quaternion(A1);
-
-#else
- return b3Quaternion(
- q.getW() * w.getX() + q.getY() * w.getZ() - q.getZ() * w.getY(),
- q.getW() * w.getY() + q.getZ() * w.getX() - q.getX() * w.getZ(),
- q.getW() * w.getZ() + q.getX() * w.getY() - q.getY() * w.getX(),
- -q.getX() * w.getX() - q.getY() * w.getY() - q.getZ() * w.getZ());
-#endif
-}
-
-B3_FORCE_INLINE b3Quaternion
-operator*(const b3Vector3& w, const b3Quaternion& q)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vQ1 = w.get128();
- __m128 vQ2 = q.get128();
- __m128 A1, B1, A2, B2, A3, B3;
-
- A1 = b3_pshufd_ps(vQ1, B3_SHUFFLE(0, 1, 2, 0)); // X Y z x
- B1 = b3_pshufd_ps(vQ2, B3_SHUFFLE(3, 3, 3, 0)); // W W W X
-
- A1 = A1 * B1;
-
- A2 = b3_pshufd_ps(vQ1, B3_SHUFFLE(1, 2, 0, 1));
- B2 = b3_pshufd_ps(vQ2, B3_SHUFFLE(2, 0, 1, 1));
-
- A2 = A2 * B2;
-
- A3 = b3_pshufd_ps(vQ1, B3_SHUFFLE(2, 0, 1, 2));
- B3 = b3_pshufd_ps(vQ2, B3_SHUFFLE(1, 2, 0, 2));
-
- A3 = A3 * B3; // A3 *= B3
-
- A1 = A1 + A2; // AB12
- A1 = _mm_xor_ps(A1, b3vPPPM); // change sign of the last element
- A1 = A1 - A3; // AB123 = AB12 - AB3
-
- return b3Quaternion(A1);
-
-#elif defined(B3_USE_NEON)
-
- float32x4_t vQ1 = w.get128();
- float32x4_t vQ2 = q.get128();
- float32x4_t A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz;
-
- {
- float32x2x2_t tmp;
-
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
- }
- vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1);
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x
- B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
-
- // change the sign of the last element
- A1 = (b3SimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)b3vPPPM);
-
- A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3
-
- return b3Quaternion(A1);
-
-#else
- return b3Quaternion(
- +w.getX() * q.getW() + w.getY() * q.getZ() - w.getZ() * q.getY(),
- +w.getY() * q.getW() + w.getZ() * q.getX() - w.getX() * q.getZ(),
- +w.getZ() * q.getW() + w.getX() * q.getY() - w.getY() * q.getX(),
- -w.getX() * q.getX() - w.getY() * q.getY() - w.getZ() * q.getZ());
-#endif
-}
-
-/**@brief Calculate the dot product between two quaternions */
-B3_FORCE_INLINE b3Scalar
-b3Dot(const b3Quaternion& q1, const b3Quaternion& q2)
-{
- return q1.dot(q2);
-}
-
-/**@brief Return the length of a quaternion */
-B3_FORCE_INLINE b3Scalar
-b3Length(const b3Quaternion& q)
-{
- return q.length();
-}
-
-/**@brief Return the angle between two quaternions*/
-B3_FORCE_INLINE b3Scalar
-b3Angle(const b3Quaternion& q1, const b3Quaternion& q2)
-{
- return q1.angle(q2);
-}
-
-/**@brief Return the inverse of a quaternion*/
-B3_FORCE_INLINE b3Quaternion
-b3Inverse(const b3Quaternion& q)
-{
- return q.inverse();
-}
-
-/**@brief Return the result of spherical linear interpolation betwen two quaternions
- * @param q1 The first quaternion
- * @param q2 The second quaternion
- * @param t The ration between q1 and q2. t = 0 return q1, t=1 returns q2
- * Slerp assumes constant velocity between positions. */
-B3_FORCE_INLINE b3Quaternion
-b3Slerp(const b3Quaternion& q1, const b3Quaternion& q2, const b3Scalar& t)
-{
- return q1.slerp(q2, t);
-}
-
-B3_FORCE_INLINE b3Quaternion
-b3QuatMul(const b3Quaternion& rot0, const b3Quaternion& rot1)
-{
- return rot0 * rot1;
-}
-
-B3_FORCE_INLINE b3Quaternion
-b3QuatNormalized(const b3Quaternion& orn)
-{
- return orn.normalized();
-}
-
-B3_FORCE_INLINE b3Vector3
-b3QuatRotate(const b3Quaternion& rotation, const b3Vector3& v)
-{
- b3Quaternion q = rotation * v;
- q *= rotation.inverse();
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3MakeVector3(_mm_and_ps(q.get128(), b3vFFF0fMask));
-#elif defined(B3_USE_NEON)
- return b3MakeVector3((float32x4_t)vandq_s32((int32x4_t)q.get128(), b3vFFF0Mask));
-#else
- return b3MakeVector3(q.getX(), q.getY(), q.getZ());
-#endif
-}
-
-B3_FORCE_INLINE b3Quaternion
-b3ShortestArcQuat(const b3Vector3& v0, const b3Vector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized
-{
- b3Vector3 c = v0.cross(v1);
- b3Scalar d = v0.dot(v1);
-
- if (d < -1.0 + B3_EPSILON)
- {
- b3Vector3 n, unused;
- b3PlaneSpace1(v0, n, unused);
- return b3Quaternion(n.getX(), n.getY(), n.getZ(), 0.0f); // just pick any vector that is orthogonal to v0
- }
-
- b3Scalar s = b3Sqrt((1.0f + d) * 2.0f);
- b3Scalar rs = 1.0f / s;
-
- return b3Quaternion(c.getX() * rs, c.getY() * rs, c.getZ() * rs, s * 0.5f);
-}
-
-B3_FORCE_INLINE b3Quaternion
-b3ShortestArcQuatNormalize2(b3Vector3& v0, b3Vector3& v1)
-{
- v0.normalize();
- v1.normalize();
- return b3ShortestArcQuat(v0, v1);
-}
-
-#endif //B3_SIMD__QUATERNION_H_
diff --git a/thirdparty/bullet/Bullet3Common/b3Random.h b/thirdparty/bullet/Bullet3Common/b3Random.h
deleted file mode 100644
index c2e21496c7..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Random.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_GEN_RANDOM_H
-#define B3_GEN_RANDOM_H
-
-#include "b3Scalar.h"
-
-#ifdef MT19937
-
-#include <limits.h>
-#include <mt19937.h>
-
-#define B3_RAND_MAX UINT_MAX
-
-B3_FORCE_INLINE void b3Srand(unsigned int seed) { init_genrand(seed); }
-B3_FORCE_INLINE unsigned int b3rand() { return genrand_int32(); }
-
-#else
-
-#include <stdlib.h>
-
-#define B3_RAND_MAX RAND_MAX
-
-B3_FORCE_INLINE void b3Srand(unsigned int seed) { srand(seed); }
-B3_FORCE_INLINE unsigned int b3rand() { return rand(); }
-
-#endif
-
-inline b3Scalar b3RandRange(b3Scalar minRange, b3Scalar maxRange)
-{
- return (b3rand() / (b3Scalar(B3_RAND_MAX) + b3Scalar(1.0))) * (maxRange - minRange) + minRange;
-}
-
-#endif //B3_GEN_RANDOM_H
diff --git a/thirdparty/bullet/Bullet3Common/b3ResizablePool.h b/thirdparty/bullet/Bullet3Common/b3ResizablePool.h
deleted file mode 100644
index cafe3ff396..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3ResizablePool.h
+++ /dev/null
@@ -1,171 +0,0 @@
-
-#ifndef B3_RESIZABLE_POOL_H
-#define B3_RESIZABLE_POOL_H
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-enum
-{
- B3_POOL_HANDLE_TERMINAL_FREE = -1,
- B3_POOL_HANDLE_TERMINAL_USED = -2
-};
-
-template <typename U>
-struct b3PoolBodyHandle : public U
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_nextFreeHandle;
- void setNextFree(int next)
- {
- m_nextFreeHandle = next;
- }
- int getNextFree() const
- {
- return m_nextFreeHandle;
- }
-};
-
-template <typename T>
-class b3ResizablePool
-{
-protected:
- b3AlignedObjectArray<T> m_bodyHandles;
- int m_numUsedHandles; // number of active handles
- int m_firstFreeHandle; // free handles list
-
- T* getHandleInternal(int handle)
- {
- return &m_bodyHandles[handle];
- }
- const T* getHandleInternal(int handle) const
- {
- return &m_bodyHandles[handle];
- }
-
-public:
- b3ResizablePool()
- {
- initHandles();
- }
-
- virtual ~b3ResizablePool()
- {
- exitHandles();
- }
- ///handle management
-
- int getNumHandles() const
- {
- return m_bodyHandles.size();
- }
-
- void getUsedHandles(b3AlignedObjectArray<int>& usedHandles) const
- {
- for (int i = 0; i < m_bodyHandles.size(); i++)
- {
- if (m_bodyHandles[i].getNextFree() == B3_POOL_HANDLE_TERMINAL_USED)
- {
- usedHandles.push_back(i);
- }
- }
- }
-
- T* getHandle(int handle)
- {
- b3Assert(handle >= 0);
- b3Assert(handle < m_bodyHandles.size());
- if ((handle < 0) || (handle >= m_bodyHandles.size()))
- {
- return 0;
- }
-
- if (m_bodyHandles[handle].getNextFree() == B3_POOL_HANDLE_TERMINAL_USED)
- {
- return &m_bodyHandles[handle];
- }
- return 0;
- }
- const T* getHandle(int handle) const
- {
- b3Assert(handle >= 0);
- b3Assert(handle < m_bodyHandles.size());
- if ((handle < 0) || (handle >= m_bodyHandles.size()))
- {
- return 0;
- }
-
- if (m_bodyHandles[handle].getNextFree() == B3_POOL_HANDLE_TERMINAL_USED)
- {
- return &m_bodyHandles[handle];
- }
- return 0;
- }
-
- void increaseHandleCapacity(int extraCapacity)
- {
- int curCapacity = m_bodyHandles.size();
- //b3Assert(curCapacity == m_numUsedHandles);
- int newCapacity = curCapacity + extraCapacity;
- m_bodyHandles.resize(newCapacity);
-
- {
- for (int i = curCapacity; i < newCapacity; i++)
- m_bodyHandles[i].setNextFree(i + 1);
-
- m_bodyHandles[newCapacity - 1].setNextFree(-1);
- }
- m_firstFreeHandle = curCapacity;
- }
- void initHandles()
- {
- m_numUsedHandles = 0;
- m_firstFreeHandle = -1;
-
- increaseHandleCapacity(1);
- }
-
- void exitHandles()
- {
- m_bodyHandles.resize(0);
- m_firstFreeHandle = -1;
- m_numUsedHandles = 0;
- }
-
- int allocHandle()
- {
- b3Assert(m_firstFreeHandle >= 0);
-
- int handle = m_firstFreeHandle;
- m_firstFreeHandle = getHandleInternal(handle)->getNextFree();
- m_numUsedHandles++;
-
- if (m_firstFreeHandle < 0)
- {
- //int curCapacity = m_bodyHandles.size();
- int additionalCapacity = m_bodyHandles.size();
- increaseHandleCapacity(additionalCapacity);
-
- getHandleInternal(handle)->setNextFree(m_firstFreeHandle);
- }
- getHandleInternal(handle)->setNextFree(B3_POOL_HANDLE_TERMINAL_USED);
- getHandleInternal(handle)->clear();
- return handle;
- }
-
- void freeHandle(int handle)
- {
- b3Assert(handle >= 0);
-
- if (m_bodyHandles[handle].getNextFree() == B3_POOL_HANDLE_TERMINAL_USED)
- {
- getHandleInternal(handle)->clear();
- getHandleInternal(handle)->setNextFree(m_firstFreeHandle);
- m_firstFreeHandle = handle;
- m_numUsedHandles--;
- }
- }
-};
-///end handle management
-
-#endif //B3_RESIZABLE_POOL_H
diff --git a/thirdparty/bullet/Bullet3Common/b3Scalar.h b/thirdparty/bullet/Bullet3Common/b3Scalar.h
deleted file mode 100644
index eeb70ed632..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Scalar.h
+++ /dev/null
@@ -1,689 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_SCALAR_H
-#define B3_SCALAR_H
-
-#ifdef B3_MANAGED_CODE
-//Aligned data types not supported in managed code
-#pragma unmanaged
-#endif
-
-#include <math.h>
-#include <stdlib.h> //size_t for MSVC 6.0
-#include <float.h>
-
-//Original repository is at http://github.com/erwincoumans/bullet3
-#define B3_BULLET_VERSION 300
-
-inline int b3GetVersion()
-{
- return B3_BULLET_VERSION;
-}
-
-#if defined(DEBUG) || defined(_DEBUG)
-#define B3_DEBUG
-#endif
-
-#include "b3Logging.h" //for b3Error
-
-#ifdef _WIN32
-
-#if defined(__GNUC__) // it should handle both MINGW and CYGWIN
-#define B3_FORCE_INLINE __inline__ __attribute__((always_inline))
-#define B3_ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16)))
-#define B3_ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64)))
-#define B3_ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128)))
-#elif ( defined(_MSC_VER) && _MSC_VER < 1300 )
-#define B3_FORCE_INLINE inline
-#define B3_ATTRIBUTE_ALIGNED16(a) a
-#define B3_ATTRIBUTE_ALIGNED64(a) a
-#define B3_ATTRIBUTE_ALIGNED128(a) a
-#else
-//#define B3_HAS_ALIGNED_ALLOCATOR
-#pragma warning(disable : 4324) // disable padding warning
-// #pragma warning(disable:4530) // Disable the exception disable but used in MSCV Stl warning.
-#pragma warning(disable : 4996) //Turn off warnings about deprecated C routines
-// #pragma warning(disable:4786) // Disable the "debug name too long" warning
-
-#define B3_FORCE_INLINE __forceinline
-#define B3_ATTRIBUTE_ALIGNED16(a) __declspec(align(16)) a
-#define B3_ATTRIBUTE_ALIGNED64(a) __declspec(align(64)) a
-#define B3_ATTRIBUTE_ALIGNED128(a) __declspec(align(128)) a
-#ifdef _XBOX
-#define B3_USE_VMX128
-
-#include <ppcintrinsics.h>
-#define B3_HAVE_NATIVE_FSEL
-#define b3Fsel(a, b, c) __fsel((a), (b), (c))
-#else
-
-#if (defined(_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined(B3_USE_DOUBLE_PRECISION))
-#if (defined(_M_IX86) || defined(_M_X64))
-
-
-#ifdef __clang__
-//#define B3_NO_SIMD_OPERATOR_OVERLOADS
-#define B3_DISABLE_SSE
-#endif //__clang__
-
-#ifndef B3_DISABLE_SSE
-#define B3_USE_SSE
-#endif //B3_DISABLE_SSE
-
-#ifdef B3_USE_SSE
-//B3_USE_SSE_IN_API is disabled under Windows by default, because
-//it makes it harder to integrate Bullet into your application under Windows
-//(structured embedding Bullet structs/classes need to be 16-byte aligned)
-//with relatively little performance gain
-//If you are not embedded Bullet data in your classes, or make sure that you align those classes on 16-byte boundaries
-//you can manually enable this line or set it in the build system for a bit of performance gain (a few percent, dependent on usage)
-//#define B3_USE_SSE_IN_API
-#endif //B3_USE_SSE
-#include <emmintrin.h>
-#endif
-#endif
-
-#endif //_XBOX
-
-#endif //__MINGW32__
-
-#ifdef B3_DEBUG
-#ifdef _MSC_VER
-#include <stdio.h>
-#define b3Assert(x) { if(!(x)){b3Error("Assert " __FILE__ ":%u (%s)\n", __LINE__, #x);__debugbreak(); }}
-#else //_MSC_VER
-#include <assert.h>
-#define b3Assert assert
-#endif //_MSC_VER
-#else
-#define b3Assert(x)
-#endif
-//b3FullAssert is optional, slows down a lot
-#define b3FullAssert(x)
-
-#define b3Likely(_c) _c
-#define b3Unlikely(_c) _c
-
-#else
-
-#if defined(__CELLOS_LV2__)
-#define B3_FORCE_INLINE inline __attribute__((always_inline))
-#define B3_ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16)))
-#define B3_ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64)))
-#define B3_ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128)))
-#ifndef assert
-#include <assert.h>
-#endif
-#ifdef B3_DEBUG
-#ifdef __SPU__
-#include <spu_printf.h>
-#define printf spu_printf
-#define b3Assert(x) \
- { \
- if (!(x)) \
- { \
- b3Error( \
- "Assert "__FILE__ \
- ":%u (" #x ")\n", \
- __LINE__); \
- spu_hcmpeq(0, 0); \
- } \
- }
-#else
-#define b3Assert assert
-#endif
-
-#else
-#define b3Assert(x)
-#endif
-//b3FullAssert is optional, slows down a lot
-#define b3FullAssert(x)
-
-#define b3Likely(_c) _c
-#define b3Unlikely(_c) _c
-
-#else
-
-#ifdef USE_LIBSPE2
-
-#define B3_FORCE_INLINE __inline
-#define B3_ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16)))
-#define B3_ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64)))
-#define B3_ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128)))
-#ifndef assert
-#include <assert.h>
-#endif
-#ifdef B3_DEBUG
-#define b3Assert assert
-#else
-#define b3Assert(x)
-#endif
-//b3FullAssert is optional, slows down a lot
-#define b3FullAssert(x)
-
-#define b3Likely(_c) __builtin_expect((_c), 1)
-#define b3Unlikely(_c) __builtin_expect((_c), 0)
-
-#else
-//non-windows systems
-
-#if (defined(__APPLE__) && (!defined(B3_USE_DOUBLE_PRECISION)))
-#if defined(__i386__) || defined(__x86_64__)
-#define B3_USE_SSE
-//B3_USE_SSE_IN_API is enabled on Mac OSX by default, because memory is automatically aligned on 16-byte boundaries
-//if apps run into issues, we will disable the next line
-#define B3_USE_SSE_IN_API
-#ifdef B3_USE_SSE
-// include appropriate SSE level
-#if defined(__SSE4_1__)
-#include <smmintrin.h>
-#elif defined(__SSSE3__)
-#include <tmmintrin.h>
-#elif defined(__SSE3__)
-#include <pmmintrin.h>
-#else
-#include <emmintrin.h>
-#endif
-#endif //B3_USE_SSE
-#elif defined(__armv7__)
-#ifdef __clang__
-#define B3_USE_NEON 1
-
-#if defined B3_USE_NEON && defined(__clang__)
-#include <arm_neon.h>
-#endif //B3_USE_NEON
-#endif //__clang__
-#endif //__arm__
-
-#define B3_FORCE_INLINE inline __attribute__((always_inline))
-///@todo: check out alignment methods for other platforms/compilers
-#define B3_ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16)))
-#define B3_ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64)))
-#define B3_ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128)))
-#ifndef assert
-#include <assert.h>
-#endif
-
-#if defined(DEBUG) || defined(_DEBUG)
-#if defined(__i386__) || defined(__x86_64__)
-#include <stdio.h>
-#define b3Assert(x) \
- { \
- if (!(x)) \
- { \
- b3Error("Assert %s in line %d, file %s\n", #x, __LINE__, __FILE__); \
- asm volatile("int3"); \
- } \
- }
-#else //defined (__i386__) || defined (__x86_64__)
-#define b3Assert assert
-#endif //defined (__i386__) || defined (__x86_64__)
-#else //defined(DEBUG) || defined (_DEBUG)
-#define b3Assert(x)
-#endif //defined(DEBUG) || defined (_DEBUG)
-
-//b3FullAssert is optional, slows down a lot
-#define b3FullAssert(x)
-#define b3Likely(_c) _c
-#define b3Unlikely(_c) _c
-
-#else
-
-#define B3_FORCE_INLINE inline
-///@todo: check out alignment methods for other platforms/compilers
-#define B3_ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16)))
-#define B3_ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64)))
-#define B3_ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128)))
-///#define B3_ATTRIBUTE_ALIGNED16(a) a
-///#define B3_ATTRIBUTE_ALIGNED64(a) a
-///#define B3_ATTRIBUTE_ALIGNED128(a) a
-#ifndef assert
-#include <assert.h>
-#endif
-
-#if defined(DEBUG) || defined(_DEBUG)
-#define b3Assert assert
-#else
-#define b3Assert(x)
-#endif
-
-//b3FullAssert is optional, slows down a lot
-#define b3FullAssert(x)
-#define b3Likely(_c) _c
-#define b3Unlikely(_c) _c
-#endif //__APPLE__
-
-#endif // LIBSPE2
-
-#endif //__CELLOS_LV2__
-#endif
-
-///The b3Scalar type abstracts floating point numbers, to easily switch between double and single floating point precision.
-#if defined(B3_USE_DOUBLE_PRECISION)
-typedef double b3Scalar;
-//this number could be bigger in double precision
-#define B3_LARGE_FLOAT 1e30
-#else
-typedef float b3Scalar;
-//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX
-#define B3_LARGE_FLOAT 1e18f
-#endif
-
-#ifdef B3_USE_SSE
-typedef __m128 b3SimdFloat4;
-#endif //B3_USE_SSE
-
-#if defined B3_USE_SSE_IN_API && defined(B3_USE_SSE)
-#ifdef _WIN32
-
-#ifndef B3_NAN
-static int b3NanMask = 0x7F800001;
-#define B3_NAN (*(float *)&b3NanMask)
-#endif
-
-#ifndef B3_INFINITY_MASK
-static int b3InfinityMask = 0x7F800000;
-#define B3_INFINITY_MASK (*(float *)&b3InfinityMask)
-#endif
-#ifndef B3_NO_SIMD_OPERATOR_OVERLOADS
-inline __m128 operator+(const __m128 A, const __m128 B)
-{
- return _mm_add_ps(A, B);
-}
-
-inline __m128 operator-(const __m128 A, const __m128 B)
-{
- return _mm_sub_ps(A, B);
-}
-
-inline __m128 operator*(const __m128 A, const __m128 B)
-{
- return _mm_mul_ps(A, B);
-}
-#endif //B3_NO_SIMD_OPERATOR_OVERLOADS
-#define b3CastfTo128i(a) (_mm_castps_si128(a))
-#define b3CastfTo128d(a) (_mm_castps_pd(a))
-#define b3CastiTo128f(a) (_mm_castsi128_ps(a))
-#define b3CastdTo128f(a) (_mm_castpd_ps(a))
-#define b3CastdTo128i(a) (_mm_castpd_si128(a))
-#define b3Assign128(r0, r1, r2, r3) _mm_setr_ps(r0, r1, r2, r3)
-
-#else //_WIN32
-
-#define b3CastfTo128i(a) ((__m128i)(a))
-#define b3CastfTo128d(a) ((__m128d)(a))
-#define b3CastiTo128f(a) ((__m128)(a))
-#define b3CastdTo128f(a) ((__m128)(a))
-#define b3CastdTo128i(a) ((__m128i)(a))
-#define b3Assign128(r0, r1, r2, r3) \
- (__m128) { r0, r1, r2, r3 }
-#endif //_WIN32
-#endif //B3_USE_SSE_IN_API
-
-#ifdef B3_USE_NEON
-#include <arm_neon.h>
-
-typedef float32x4_t b3SimdFloat4;
-#define B3_INFINITY INFINITY
-#define B3_NAN NAN
-#define b3Assign128(r0, r1, r2, r3) \
- (float32x4_t) { r0, r1, r2, r3 }
-#endif
-
-#define B3_DECLARE_ALIGNED_ALLOCATOR() \
- B3_FORCE_INLINE void *operator new(size_t sizeInBytes) { return b3AlignedAlloc(sizeInBytes, 16); } \
- B3_FORCE_INLINE void operator delete(void *ptr) { b3AlignedFree(ptr); } \
- B3_FORCE_INLINE void *operator new(size_t, void *ptr) { return ptr; } \
- B3_FORCE_INLINE void operator delete(void *, void *) {} \
- B3_FORCE_INLINE void *operator new[](size_t sizeInBytes) { return b3AlignedAlloc(sizeInBytes, 16); } \
- B3_FORCE_INLINE void operator delete[](void *ptr) { b3AlignedFree(ptr); } \
- B3_FORCE_INLINE void *operator new[](size_t, void *ptr) { return ptr; } \
- B3_FORCE_INLINE void operator delete[](void *, void *) {}
-
-#if defined(B3_USE_DOUBLE_PRECISION) || defined(B3_FORCE_DOUBLE_FUNCTIONS)
-
-B3_FORCE_INLINE b3Scalar b3Sqrt(b3Scalar x)
-{
- return sqrt(x);
-}
-B3_FORCE_INLINE b3Scalar b3Fabs(b3Scalar x) { return fabs(x); }
-B3_FORCE_INLINE b3Scalar b3Cos(b3Scalar x) { return cos(x); }
-B3_FORCE_INLINE b3Scalar b3Sin(b3Scalar x) { return sin(x); }
-B3_FORCE_INLINE b3Scalar b3Tan(b3Scalar x) { return tan(x); }
-B3_FORCE_INLINE b3Scalar b3Acos(b3Scalar x)
-{
- if (x < b3Scalar(-1)) x = b3Scalar(-1);
- if (x > b3Scalar(1)) x = b3Scalar(1);
- return acos(x);
-}
-B3_FORCE_INLINE b3Scalar b3Asin(b3Scalar x)
-{
- if (x < b3Scalar(-1)) x = b3Scalar(-1);
- if (x > b3Scalar(1)) x = b3Scalar(1);
- return asin(x);
-}
-B3_FORCE_INLINE b3Scalar b3Atan(b3Scalar x) { return atan(x); }
-B3_FORCE_INLINE b3Scalar b3Atan2(b3Scalar x, b3Scalar y) { return atan2(x, y); }
-B3_FORCE_INLINE b3Scalar b3Exp(b3Scalar x) { return exp(x); }
-B3_FORCE_INLINE b3Scalar b3Log(b3Scalar x) { return log(x); }
-B3_FORCE_INLINE b3Scalar b3Pow(b3Scalar x, b3Scalar y) { return pow(x, y); }
-B3_FORCE_INLINE b3Scalar b3Fmod(b3Scalar x, b3Scalar y) { return fmod(x, y); }
-
-#else
-
-B3_FORCE_INLINE b3Scalar b3Sqrt(b3Scalar y)
-{
-#ifdef USE_APPROXIMATION
- double x, z, tempf;
- unsigned long *tfptr = ((unsigned long *)&tempf) + 1;
-
- tempf = y;
- *tfptr = (0xbfcdd90a - *tfptr) >> 1; /* estimate of 1/sqrt(y) */
- x = tempf;
- z = y * b3Scalar(0.5);
- x = (b3Scalar(1.5) * x) - (x * x) * (x * z); /* iteration formula */
- x = (b3Scalar(1.5) * x) - (x * x) * (x * z);
- x = (b3Scalar(1.5) * x) - (x * x) * (x * z);
- x = (b3Scalar(1.5) * x) - (x * x) * (x * z);
- x = (b3Scalar(1.5) * x) - (x * x) * (x * z);
- return x * y;
-#else
- return sqrtf(y);
-#endif
-}
-B3_FORCE_INLINE b3Scalar b3Fabs(b3Scalar x) { return fabsf(x); }
-B3_FORCE_INLINE b3Scalar b3Cos(b3Scalar x) { return cosf(x); }
-B3_FORCE_INLINE b3Scalar b3Sin(b3Scalar x) { return sinf(x); }
-B3_FORCE_INLINE b3Scalar b3Tan(b3Scalar x) { return tanf(x); }
-B3_FORCE_INLINE b3Scalar b3Acos(b3Scalar x)
-{
- if (x < b3Scalar(-1))
- x = b3Scalar(-1);
- if (x > b3Scalar(1))
- x = b3Scalar(1);
- return acosf(x);
-}
-B3_FORCE_INLINE b3Scalar b3Asin(b3Scalar x)
-{
- if (x < b3Scalar(-1))
- x = b3Scalar(-1);
- if (x > b3Scalar(1))
- x = b3Scalar(1);
- return asinf(x);
-}
-B3_FORCE_INLINE b3Scalar b3Atan(b3Scalar x) { return atanf(x); }
-B3_FORCE_INLINE b3Scalar b3Atan2(b3Scalar x, b3Scalar y) { return atan2f(x, y); }
-B3_FORCE_INLINE b3Scalar b3Exp(b3Scalar x) { return expf(x); }
-B3_FORCE_INLINE b3Scalar b3Log(b3Scalar x) { return logf(x); }
-B3_FORCE_INLINE b3Scalar b3Pow(b3Scalar x, b3Scalar y) { return powf(x, y); }
-B3_FORCE_INLINE b3Scalar b3Fmod(b3Scalar x, b3Scalar y) { return fmodf(x, y); }
-
-#endif
-
-#define B3_2_PI b3Scalar(6.283185307179586232)
-#define B3_PI (B3_2_PI * b3Scalar(0.5))
-#define B3_HALF_PI (B3_2_PI * b3Scalar(0.25))
-#define B3_RADS_PER_DEG (B3_2_PI / b3Scalar(360.0))
-#define B3_DEGS_PER_RAD (b3Scalar(360.0) / B3_2_PI)
-#define B3_SQRT12 b3Scalar(0.7071067811865475244008443621048490)
-
-#define b3RecipSqrt(x) ((b3Scalar)(b3Scalar(1.0) / b3Sqrt(b3Scalar(x)))) /* reciprocal square root */
-
-#ifdef B3_USE_DOUBLE_PRECISION
-#define B3_EPSILON DBL_EPSILON
-#define B3_INFINITY DBL_MAX
-#else
-#define B3_EPSILON FLT_EPSILON
-#define B3_INFINITY FLT_MAX
-#endif
-
-B3_FORCE_INLINE b3Scalar b3Atan2Fast(b3Scalar y, b3Scalar x)
-{
- b3Scalar coeff_1 = B3_PI / 4.0f;
- b3Scalar coeff_2 = 3.0f * coeff_1;
- b3Scalar abs_y = b3Fabs(y);
- b3Scalar angle;
- if (x >= 0.0f)
- {
- b3Scalar r = (x - abs_y) / (x + abs_y);
- angle = coeff_1 - coeff_1 * r;
- }
- else
- {
- b3Scalar r = (x + abs_y) / (abs_y - x);
- angle = coeff_2 - coeff_1 * r;
- }
- return (y < 0.0f) ? -angle : angle;
-}
-
-B3_FORCE_INLINE bool b3FuzzyZero(b3Scalar x) { return b3Fabs(x) < B3_EPSILON; }
-
-B3_FORCE_INLINE bool b3Equal(b3Scalar a, b3Scalar eps)
-{
- return (((a) <= eps) && !((a) < -eps));
-}
-B3_FORCE_INLINE bool b3GreaterEqual(b3Scalar a, b3Scalar eps)
-{
- return (!((a) <= eps));
-}
-
-B3_FORCE_INLINE int b3IsNegative(b3Scalar x)
-{
- return x < b3Scalar(0.0) ? 1 : 0;
-}
-
-B3_FORCE_INLINE b3Scalar b3Radians(b3Scalar x) { return x * B3_RADS_PER_DEG; }
-B3_FORCE_INLINE b3Scalar b3Degrees(b3Scalar x) { return x * B3_DEGS_PER_RAD; }
-
-#define B3_DECLARE_HANDLE(name) \
- typedef struct name##__ \
- { \
- int unused; \
- } * name
-
-#ifndef b3Fsel
-B3_FORCE_INLINE b3Scalar b3Fsel(b3Scalar a, b3Scalar b, b3Scalar c)
-{
- return a >= 0 ? b : c;
-}
-#endif
-#define b3Fsels(a, b, c) (b3Scalar) b3Fsel(a, b, c)
-
-B3_FORCE_INLINE bool b3MachineIsLittleEndian()
-{
- long int i = 1;
- const char *p = (const char *)&i;
- if (p[0] == 1) // Lowest address contains the least significant byte
- return true;
- else
- return false;
-}
-
-///b3Select avoids branches, which makes performance much better for consoles like Playstation 3 and XBox 360
-///Thanks Phil Knight. See also http://www.cellperformance.com/articles/2006/04/more_techniques_for_eliminatin_1.html
-B3_FORCE_INLINE unsigned b3Select(unsigned condition, unsigned valueIfConditionNonZero, unsigned valueIfConditionZero)
-{
- // Set testNz to 0xFFFFFFFF if condition is nonzero, 0x00000000 if condition is zero
- // Rely on positive value or'ed with its negative having sign bit on
- // and zero value or'ed with its negative (which is still zero) having sign bit off
- // Use arithmetic shift right, shifting the sign bit through all 32 bits
- unsigned testNz = (unsigned)(((int)condition | -(int)condition) >> 31);
- unsigned testEqz = ~testNz;
- return ((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz));
-}
-B3_FORCE_INLINE int b3Select(unsigned condition, int valueIfConditionNonZero, int valueIfConditionZero)
-{
- unsigned testNz = (unsigned)(((int)condition | -(int)condition) >> 31);
- unsigned testEqz = ~testNz;
- return static_cast<int>((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz));
-}
-B3_FORCE_INLINE float b3Select(unsigned condition, float valueIfConditionNonZero, float valueIfConditionZero)
-{
-#ifdef B3_HAVE_NATIVE_FSEL
- return (float)b3Fsel((b3Scalar)condition - b3Scalar(1.0f), valueIfConditionNonZero, valueIfConditionZero);
-#else
- return (condition != 0) ? valueIfConditionNonZero : valueIfConditionZero;
-#endif
-}
-
-template <typename T>
-B3_FORCE_INLINE void b3Swap(T &a, T &b)
-{
- T tmp = a;
- a = b;
- b = tmp;
-}
-
-//PCK: endian swapping functions
-B3_FORCE_INLINE unsigned b3SwapEndian(unsigned val)
-{
- return (((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24));
-}
-
-B3_FORCE_INLINE unsigned short b3SwapEndian(unsigned short val)
-{
- return static_cast<unsigned short>(((val & 0xff00) >> 8) | ((val & 0x00ff) << 8));
-}
-
-B3_FORCE_INLINE unsigned b3SwapEndian(int val)
-{
- return b3SwapEndian((unsigned)val);
-}
-
-B3_FORCE_INLINE unsigned short b3SwapEndian(short val)
-{
- return b3SwapEndian((unsigned short)val);
-}
-
-///b3SwapFloat uses using char pointers to swap the endianness
-////b3SwapFloat/b3SwapDouble will NOT return a float, because the machine might 'correct' invalid floating point values
-///Not all values of sign/exponent/mantissa are valid floating point numbers according to IEEE 754.
-///When a floating point unit is faced with an invalid value, it may actually change the value, or worse, throw an exception.
-///In most systems, running user mode code, you wouldn't get an exception, but instead the hardware/os/runtime will 'fix' the number for you.
-///so instead of returning a float/double, we return integer/long long integer
-B3_FORCE_INLINE unsigned int b3SwapEndianFloat(float d)
-{
- unsigned int a = 0;
- unsigned char *dst = (unsigned char *)&a;
- unsigned char *src = (unsigned char *)&d;
-
- dst[0] = src[3];
- dst[1] = src[2];
- dst[2] = src[1];
- dst[3] = src[0];
- return a;
-}
-
-// unswap using char pointers
-B3_FORCE_INLINE float b3UnswapEndianFloat(unsigned int a)
-{
- float d = 0.0f;
- unsigned char *src = (unsigned char *)&a;
- unsigned char *dst = (unsigned char *)&d;
-
- dst[0] = src[3];
- dst[1] = src[2];
- dst[2] = src[1];
- dst[3] = src[0];
-
- return d;
-}
-
-// swap using char pointers
-B3_FORCE_INLINE void b3SwapEndianDouble(double d, unsigned char *dst)
-{
- unsigned char *src = (unsigned char *)&d;
-
- dst[0] = src[7];
- dst[1] = src[6];
- dst[2] = src[5];
- dst[3] = src[4];
- dst[4] = src[3];
- dst[5] = src[2];
- dst[6] = src[1];
- dst[7] = src[0];
-}
-
-// unswap using char pointers
-B3_FORCE_INLINE double b3UnswapEndianDouble(const unsigned char *src)
-{
- double d = 0.0;
- unsigned char *dst = (unsigned char *)&d;
-
- dst[0] = src[7];
- dst[1] = src[6];
- dst[2] = src[5];
- dst[3] = src[4];
- dst[4] = src[3];
- dst[5] = src[2];
- dst[6] = src[1];
- dst[7] = src[0];
-
- return d;
-}
-
-// returns normalized value in range [-B3_PI, B3_PI]
-B3_FORCE_INLINE b3Scalar b3NormalizeAngle(b3Scalar angleInRadians)
-{
- angleInRadians = b3Fmod(angleInRadians, B3_2_PI);
- if (angleInRadians < -B3_PI)
- {
- return angleInRadians + B3_2_PI;
- }
- else if (angleInRadians > B3_PI)
- {
- return angleInRadians - B3_2_PI;
- }
- else
- {
- return angleInRadians;
- }
-}
-
-///rudimentary class to provide type info
-struct b3TypedObject
-{
- b3TypedObject(int objectType)
- : m_objectType(objectType)
- {
- }
- int m_objectType;
- inline int getObjectType() const
- {
- return m_objectType;
- }
-};
-
-///align a pointer to the provided alignment, upwards
-template <typename T>
-T *b3AlignPointer(T *unalignedPtr, size_t alignment)
-{
- struct b3ConvertPointerSizeT
- {
- union {
- T *ptr;
- size_t integer;
- };
- };
- b3ConvertPointerSizeT converter;
-
- const size_t bit_mask = ~(alignment - 1);
- converter.ptr = unalignedPtr;
- converter.integer += alignment - 1;
- converter.integer &= bit_mask;
- return converter.ptr;
-}
-
-#endif //B3_SCALAR_H
diff --git a/thirdparty/bullet/Bullet3Common/b3StackAlloc.h b/thirdparty/bullet/Bullet3Common/b3StackAlloc.h
deleted file mode 100644
index 4972236ac7..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3StackAlloc.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-StackAlloc extracted from GJK-EPA collision solver by Nathanael Presson
-Nov.2006
-*/
-
-#ifndef B3_STACK_ALLOC
-#define B3_STACK_ALLOC
-
-#include "b3Scalar.h" //for b3Assert
-#include "b3AlignedAllocator.h"
-
-///The b3Block class is an internal structure for the b3StackAlloc memory allocator.
-struct b3Block
-{
- b3Block* previous;
- unsigned char* address;
-};
-
-///The StackAlloc class provides some fast stack-based memory allocator (LIFO last-in first-out)
-class b3StackAlloc
-{
-public:
- b3StackAlloc(unsigned int size)
- {
- ctor();
- create(size);
- }
- ~b3StackAlloc() { destroy(); }
-
- inline void create(unsigned int size)
- {
- destroy();
- data = (unsigned char*)b3AlignedAlloc(size, 16);
- totalsize = size;
- }
- inline void destroy()
- {
- b3Assert(usedsize == 0);
- //Raise(L"StackAlloc is still in use");
-
- if (usedsize == 0)
- {
- if (!ischild && data)
- b3AlignedFree(data);
-
- data = 0;
- usedsize = 0;
- }
- }
-
- int getAvailableMemory() const
- {
- return static_cast<int>(totalsize - usedsize);
- }
-
- unsigned char* allocate(unsigned int size)
- {
- const unsigned int nus(usedsize + size);
- if (nus < totalsize)
- {
- usedsize = nus;
- return (data + (usedsize - size));
- }
- b3Assert(0);
- //&& (L"Not enough memory"));
-
- return (0);
- }
- B3_FORCE_INLINE b3Block* beginBlock()
- {
- b3Block* pb = (b3Block*)allocate(sizeof(b3Block));
- pb->previous = current;
- pb->address = data + usedsize;
- current = pb;
- return (pb);
- }
- B3_FORCE_INLINE void endBlock(b3Block* block)
- {
- b3Assert(block == current);
- //Raise(L"Unmatched blocks");
- if (block == current)
- {
- current = block->previous;
- usedsize = (unsigned int)((block->address - data) - sizeof(b3Block));
- }
- }
-
-private:
- void ctor()
- {
- data = 0;
- totalsize = 0;
- usedsize = 0;
- current = 0;
- ischild = false;
- }
- unsigned char* data;
- unsigned int totalsize;
- unsigned int usedsize;
- b3Block* current;
- bool ischild;
-};
-
-#endif //B3_STACK_ALLOC
diff --git a/thirdparty/bullet/Bullet3Common/b3Transform.h b/thirdparty/bullet/Bullet3Common/b3Transform.h
deleted file mode 100644
index 149da9d148..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Transform.h
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_TRANSFORM_H
-#define B3_TRANSFORM_H
-
-#include "b3Matrix3x3.h"
-
-#ifdef B3_USE_DOUBLE_PRECISION
-#define b3TransformData b3TransformDoubleData
-#else
-#define b3TransformData b3TransformFloatData
-#endif
-
-/**@brief The b3Transform class supports rigid transforms with only translation and rotation and no scaling/shear.
- *It can be used in combination with b3Vector3, b3Quaternion and b3Matrix3x3 linear algebra classes. */
-B3_ATTRIBUTE_ALIGNED16(class)
-b3Transform
-{
- ///Storage for the rotation
- b3Matrix3x3 m_basis;
- ///Storage for the translation
- b3Vector3 m_origin;
-
-public:
- /**@brief No initialization constructor */
- b3Transform() {}
- /**@brief Constructor from b3Quaternion (optional b3Vector3 )
- * @param q Rotation from quaternion
- * @param c Translation from Vector (default 0,0,0) */
- explicit B3_FORCE_INLINE b3Transform(const b3Quaternion& q,
- const b3Vector3& c = b3MakeVector3(b3Scalar(0), b3Scalar(0), b3Scalar(0)))
- : m_basis(q),
- m_origin(c)
- {
- }
-
- /**@brief Constructor from b3Matrix3x3 (optional b3Vector3)
- * @param b Rotation from Matrix
- * @param c Translation from Vector default (0,0,0)*/
- explicit B3_FORCE_INLINE b3Transform(const b3Matrix3x3& b,
- const b3Vector3& c = b3MakeVector3(b3Scalar(0), b3Scalar(0), b3Scalar(0)))
- : m_basis(b),
- m_origin(c)
- {
- }
- /**@brief Copy constructor */
- B3_FORCE_INLINE b3Transform(const b3Transform& other)
- : m_basis(other.m_basis),
- m_origin(other.m_origin)
- {
- }
- /**@brief Assignment Operator */
- B3_FORCE_INLINE b3Transform& operator=(const b3Transform& other)
- {
- m_basis = other.m_basis;
- m_origin = other.m_origin;
- return *this;
- }
-
- /**@brief Set the current transform as the value of the product of two transforms
- * @param t1 Transform 1
- * @param t2 Transform 2
- * This = Transform1 * Transform2 */
- B3_FORCE_INLINE void mult(const b3Transform& t1, const b3Transform& t2)
- {
- m_basis = t1.m_basis * t2.m_basis;
- m_origin = t1(t2.m_origin);
- }
-
- /* void multInverseLeft(const b3Transform& t1, const b3Transform& t2) {
- b3Vector3 v = t2.m_origin - t1.m_origin;
- m_basis = b3MultTransposeLeft(t1.m_basis, t2.m_basis);
- m_origin = v * t1.m_basis;
- }
- */
-
- /**@brief Return the transform of the vector */
- B3_FORCE_INLINE b3Vector3 operator()(const b3Vector3& x) const
- {
- return x.dot3(m_basis[0], m_basis[1], m_basis[2]) + m_origin;
- }
-
- /**@brief Return the transform of the vector */
- B3_FORCE_INLINE b3Vector3 operator*(const b3Vector3& x) const
- {
- return (*this)(x);
- }
-
- /**@brief Return the transform of the b3Quaternion */
- B3_FORCE_INLINE b3Quaternion operator*(const b3Quaternion& q) const
- {
- return getRotation() * q;
- }
-
- /**@brief Return the basis matrix for the rotation */
- B3_FORCE_INLINE b3Matrix3x3& getBasis() { return m_basis; }
- /**@brief Return the basis matrix for the rotation */
- B3_FORCE_INLINE const b3Matrix3x3& getBasis() const { return m_basis; }
-
- /**@brief Return the origin vector translation */
- B3_FORCE_INLINE b3Vector3& getOrigin() { return m_origin; }
- /**@brief Return the origin vector translation */
- B3_FORCE_INLINE const b3Vector3& getOrigin() const { return m_origin; }
-
- /**@brief Return a quaternion representing the rotation */
- b3Quaternion getRotation() const
- {
- b3Quaternion q;
- m_basis.getRotation(q);
- return q;
- }
-
- /**@brief Set from an array
- * @param m A pointer to a 15 element array (12 rotation(row major padded on the right by 1), and 3 translation */
- void setFromOpenGLMatrix(const b3Scalar* m)
- {
- m_basis.setFromOpenGLSubMatrix(m);
- m_origin.setValue(m[12], m[13], m[14]);
- }
-
- /**@brief Fill an array representation
- * @param m A pointer to a 15 element array (12 rotation(row major padded on the right by 1), and 3 translation */
- void getOpenGLMatrix(b3Scalar * m) const
- {
- m_basis.getOpenGLSubMatrix(m);
- m[12] = m_origin.getX();
- m[13] = m_origin.getY();
- m[14] = m_origin.getZ();
- m[15] = b3Scalar(1.0);
- }
-
- /**@brief Set the translational element
- * @param origin The vector to set the translation to */
- B3_FORCE_INLINE void setOrigin(const b3Vector3& origin)
- {
- m_origin = origin;
- }
-
- B3_FORCE_INLINE b3Vector3 invXform(const b3Vector3& inVec) const;
-
- /**@brief Set the rotational element by b3Matrix3x3 */
- B3_FORCE_INLINE void setBasis(const b3Matrix3x3& basis)
- {
- m_basis = basis;
- }
-
- /**@brief Set the rotational element by b3Quaternion */
- B3_FORCE_INLINE void setRotation(const b3Quaternion& q)
- {
- m_basis.setRotation(q);
- }
-
- /**@brief Set this transformation to the identity */
- void setIdentity()
- {
- m_basis.setIdentity();
- m_origin.setValue(b3Scalar(0.0), b3Scalar(0.0), b3Scalar(0.0));
- }
-
- /**@brief Multiply this Transform by another(this = this * another)
- * @param t The other transform */
- b3Transform& operator*=(const b3Transform& t)
- {
- m_origin += m_basis * t.m_origin;
- m_basis *= t.m_basis;
- return *this;
- }
-
- /**@brief Return the inverse of this transform */
- b3Transform inverse() const
- {
- b3Matrix3x3 inv = m_basis.transpose();
- return b3Transform(inv, inv * -m_origin);
- }
-
- /**@brief Return the inverse of this transform times the other transform
- * @param t The other transform
- * return this.inverse() * the other */
- b3Transform inverseTimes(const b3Transform& t) const;
-
- /**@brief Return the product of this transform and the other */
- b3Transform operator*(const b3Transform& t) const;
-
- /**@brief Return an identity transform */
- static const b3Transform& getIdentity()
- {
- static const b3Transform identityTransform(b3Matrix3x3::getIdentity());
- return identityTransform;
- }
-
- void serialize(struct b3TransformData & dataOut) const;
-
- void serializeFloat(struct b3TransformFloatData & dataOut) const;
-
- void deSerialize(const struct b3TransformData& dataIn);
-
- void deSerializeDouble(const struct b3TransformDoubleData& dataIn);
-
- void deSerializeFloat(const struct b3TransformFloatData& dataIn);
-};
-
-B3_FORCE_INLINE b3Vector3
-b3Transform::invXform(const b3Vector3& inVec) const
-{
- b3Vector3 v = inVec - m_origin;
- return (m_basis.transpose() * v);
-}
-
-B3_FORCE_INLINE b3Transform
-b3Transform::inverseTimes(const b3Transform& t) const
-{
- b3Vector3 v = t.getOrigin() - m_origin;
- return b3Transform(m_basis.transposeTimes(t.m_basis),
- v * m_basis);
-}
-
-B3_FORCE_INLINE b3Transform
- b3Transform::operator*(const b3Transform& t) const
-{
- return b3Transform(m_basis * t.m_basis,
- (*this)(t.m_origin));
-}
-
-/**@brief Test if two transforms have all elements equal */
-B3_FORCE_INLINE bool operator==(const b3Transform& t1, const b3Transform& t2)
-{
- return (t1.getBasis() == t2.getBasis() &&
- t1.getOrigin() == t2.getOrigin());
-}
-
-///for serialization
-struct b3TransformFloatData
-{
- b3Matrix3x3FloatData m_basis;
- b3Vector3FloatData m_origin;
-};
-
-struct b3TransformDoubleData
-{
- b3Matrix3x3DoubleData m_basis;
- b3Vector3DoubleData m_origin;
-};
-
-B3_FORCE_INLINE void b3Transform::serialize(b3TransformData& dataOut) const
-{
- m_basis.serialize(dataOut.m_basis);
- m_origin.serialize(dataOut.m_origin);
-}
-
-B3_FORCE_INLINE void b3Transform::serializeFloat(b3TransformFloatData& dataOut) const
-{
- m_basis.serializeFloat(dataOut.m_basis);
- m_origin.serializeFloat(dataOut.m_origin);
-}
-
-B3_FORCE_INLINE void b3Transform::deSerialize(const b3TransformData& dataIn)
-{
- m_basis.deSerialize(dataIn.m_basis);
- m_origin.deSerialize(dataIn.m_origin);
-}
-
-B3_FORCE_INLINE void b3Transform::deSerializeFloat(const b3TransformFloatData& dataIn)
-{
- m_basis.deSerializeFloat(dataIn.m_basis);
- m_origin.deSerializeFloat(dataIn.m_origin);
-}
-
-B3_FORCE_INLINE void b3Transform::deSerializeDouble(const b3TransformDoubleData& dataIn)
-{
- m_basis.deSerializeDouble(dataIn.m_basis);
- m_origin.deSerializeDouble(dataIn.m_origin);
-}
-
-#endif //B3_TRANSFORM_H
diff --git a/thirdparty/bullet/Bullet3Common/b3TransformUtil.h b/thirdparty/bullet/Bullet3Common/b3TransformUtil.h
deleted file mode 100644
index 1850a9be5f..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3TransformUtil.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_TRANSFORM_UTIL_H
-#define B3_TRANSFORM_UTIL_H
-
-#include "b3Transform.h"
-#define B3_ANGULAR_MOTION_THRESHOLD b3Scalar(0.5) * B3_HALF_PI
-
-B3_FORCE_INLINE b3Vector3 b3AabbSupport(const b3Vector3& halfExtents, const b3Vector3& supportDir)
-{
- return b3MakeVector3(supportDir.getX() < b3Scalar(0.0) ? -halfExtents.getX() : halfExtents.getX(),
- supportDir.getY() < b3Scalar(0.0) ? -halfExtents.getY() : halfExtents.getY(),
- supportDir.getZ() < b3Scalar(0.0) ? -halfExtents.getZ() : halfExtents.getZ());
-}
-
-/// Utils related to temporal transforms
-class b3TransformUtil
-{
-public:
- static void integrateTransform(const b3Transform& curTrans, const b3Vector3& linvel, const b3Vector3& angvel, b3Scalar timeStep, b3Transform& predictedTransform)
- {
- predictedTransform.setOrigin(curTrans.getOrigin() + linvel * timeStep);
- // #define QUATERNION_DERIVATIVE
-#ifdef QUATERNION_DERIVATIVE
- b3Quaternion predictedOrn = curTrans.getRotation();
- predictedOrn += (angvel * predictedOrn) * (timeStep * b3Scalar(0.5));
- predictedOrn.normalize();
-#else
- //Exponential map
- //google for "Practical Parameterization of Rotations Using the Exponential Map", F. Sebastian Grassia
-
- b3Vector3 axis;
- b3Scalar fAngle = angvel.length();
- //limit the angular motion
- if (fAngle * timeStep > B3_ANGULAR_MOTION_THRESHOLD)
- {
- fAngle = B3_ANGULAR_MOTION_THRESHOLD / timeStep;
- }
-
- if (fAngle < b3Scalar(0.001))
- {
- // use Taylor's expansions of sync function
- axis = angvel * (b3Scalar(0.5) * timeStep - (timeStep * timeStep * timeStep) * (b3Scalar(0.020833333333)) * fAngle * fAngle);
- }
- else
- {
- // sync(fAngle) = sin(c*fAngle)/t
- axis = angvel * (b3Sin(b3Scalar(0.5) * fAngle * timeStep) / fAngle);
- }
- b3Quaternion dorn(axis.getX(), axis.getY(), axis.getZ(), b3Cos(fAngle * timeStep * b3Scalar(0.5)));
- b3Quaternion orn0 = curTrans.getRotation();
-
- b3Quaternion predictedOrn = dorn * orn0;
- predictedOrn.normalize();
-#endif
- predictedTransform.setRotation(predictedOrn);
- }
-
- static void calculateVelocityQuaternion(const b3Vector3& pos0, const b3Vector3& pos1, const b3Quaternion& orn0, const b3Quaternion& orn1, b3Scalar timeStep, b3Vector3& linVel, b3Vector3& angVel)
- {
- linVel = (pos1 - pos0) / timeStep;
- b3Vector3 axis;
- b3Scalar angle;
- if (orn0 != orn1)
- {
- calculateDiffAxisAngleQuaternion(orn0, orn1, axis, angle);
- angVel = axis * angle / timeStep;
- }
- else
- {
- angVel.setValue(0, 0, 0);
- }
- }
-
- static void calculateDiffAxisAngleQuaternion(const b3Quaternion& orn0, const b3Quaternion& orn1a, b3Vector3& axis, b3Scalar& angle)
- {
- b3Quaternion orn1 = orn0.nearest(orn1a);
- b3Quaternion dorn = orn1 * orn0.inverse();
- angle = dorn.getAngle();
- axis = b3MakeVector3(dorn.getX(), dorn.getY(), dorn.getZ());
- axis[3] = b3Scalar(0.);
- //check for axis length
- b3Scalar len = axis.length2();
- if (len < B3_EPSILON * B3_EPSILON)
- axis = b3MakeVector3(b3Scalar(1.), b3Scalar(0.), b3Scalar(0.));
- else
- axis /= b3Sqrt(len);
- }
-
- static void calculateVelocity(const b3Transform& transform0, const b3Transform& transform1, b3Scalar timeStep, b3Vector3& linVel, b3Vector3& angVel)
- {
- linVel = (transform1.getOrigin() - transform0.getOrigin()) / timeStep;
- b3Vector3 axis;
- b3Scalar angle;
- calculateDiffAxisAngle(transform0, transform1, axis, angle);
- angVel = axis * angle / timeStep;
- }
-
- static void calculateDiffAxisAngle(const b3Transform& transform0, const b3Transform& transform1, b3Vector3& axis, b3Scalar& angle)
- {
- b3Matrix3x3 dmat = transform1.getBasis() * transform0.getBasis().inverse();
- b3Quaternion dorn;
- dmat.getRotation(dorn);
-
- ///floating point inaccuracy can lead to w component > 1..., which breaks
- dorn.normalize();
-
- angle = dorn.getAngle();
- axis = b3MakeVector3(dorn.getX(), dorn.getY(), dorn.getZ());
- axis[3] = b3Scalar(0.);
- //check for axis length
- b3Scalar len = axis.length2();
- if (len < B3_EPSILON * B3_EPSILON)
- axis = b3MakeVector3(b3Scalar(1.), b3Scalar(0.), b3Scalar(0.));
- else
- axis /= b3Sqrt(len);
- }
-};
-
-///The b3ConvexSeparatingDistanceUtil can help speed up convex collision detection
-///by conservatively updating a cached separating distance/vector instead of re-calculating the closest distance
-class b3ConvexSeparatingDistanceUtil
-{
- b3Quaternion m_ornA;
- b3Quaternion m_ornB;
- b3Vector3 m_posA;
- b3Vector3 m_posB;
-
- b3Vector3 m_separatingNormal;
-
- b3Scalar m_boundingRadiusA;
- b3Scalar m_boundingRadiusB;
- b3Scalar m_separatingDistance;
-
-public:
- b3ConvexSeparatingDistanceUtil(b3Scalar boundingRadiusA, b3Scalar boundingRadiusB)
- : m_boundingRadiusA(boundingRadiusA),
- m_boundingRadiusB(boundingRadiusB),
- m_separatingDistance(0.f)
- {
- }
-
- b3Scalar getConservativeSeparatingDistance()
- {
- return m_separatingDistance;
- }
-
- void updateSeparatingDistance(const b3Transform& transA, const b3Transform& transB)
- {
- const b3Vector3& toPosA = transA.getOrigin();
- const b3Vector3& toPosB = transB.getOrigin();
- b3Quaternion toOrnA = transA.getRotation();
- b3Quaternion toOrnB = transB.getRotation();
-
- if (m_separatingDistance > 0.f)
- {
- b3Vector3 linVelA, angVelA, linVelB, angVelB;
- b3TransformUtil::calculateVelocityQuaternion(m_posA, toPosA, m_ornA, toOrnA, b3Scalar(1.), linVelA, angVelA);
- b3TransformUtil::calculateVelocityQuaternion(m_posB, toPosB, m_ornB, toOrnB, b3Scalar(1.), linVelB, angVelB);
- b3Scalar maxAngularProjectedVelocity = angVelA.length() * m_boundingRadiusA + angVelB.length() * m_boundingRadiusB;
- b3Vector3 relLinVel = (linVelB - linVelA);
- b3Scalar relLinVelocLength = relLinVel.dot(m_separatingNormal);
- if (relLinVelocLength < 0.f)
- {
- relLinVelocLength = 0.f;
- }
-
- b3Scalar projectedMotion = maxAngularProjectedVelocity + relLinVelocLength;
- m_separatingDistance -= projectedMotion;
- }
-
- m_posA = toPosA;
- m_posB = toPosB;
- m_ornA = toOrnA;
- m_ornB = toOrnB;
- }
-
- void initSeparatingDistance(const b3Vector3& separatingVector, b3Scalar separatingDistance, const b3Transform& transA, const b3Transform& transB)
- {
- m_separatingDistance = separatingDistance;
-
- if (m_separatingDistance > 0.f)
- {
- m_separatingNormal = separatingVector;
-
- const b3Vector3& toPosA = transA.getOrigin();
- const b3Vector3& toPosB = transB.getOrigin();
- b3Quaternion toOrnA = transA.getRotation();
- b3Quaternion toOrnB = transB.getRotation();
- m_posA = toPosA;
- m_posB = toPosB;
- m_ornA = toOrnA;
- m_ornB = toOrnB;
- }
- }
-};
-
-#endif //B3_TRANSFORM_UTIL_H
diff --git a/thirdparty/bullet/Bullet3Common/b3Vector3.cpp b/thirdparty/bullet/Bullet3Common/b3Vector3.cpp
deleted file mode 100644
index 100fb774c1..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Vector3.cpp
+++ /dev/null
@@ -1,1637 +0,0 @@
-/*
- Copyright (c) 2011-213 Apple Inc. http://bulletphysics.org
-
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- This source version has been altered.
- */
-
-#if defined(_WIN32) || defined(__i386__)
-#define B3_USE_SSE_IN_API
-#endif
-
-#include "b3Vector3.h"
-
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-
-#ifdef __APPLE__
-#include <stdint.h>
-typedef float float4 __attribute__((vector_size(16)));
-#else
-#define float4 __m128
-#endif
-//typedef uint32_t uint4 __attribute__ ((vector_size(16)));
-
-#if defined B3_USE_SSE || defined _WIN32
-
-#define LOG2_ARRAY_SIZE 6
-#define STACK_ARRAY_COUNT (1UL << LOG2_ARRAY_SIZE)
-
-#include <emmintrin.h>
-
-long b3_maxdot_large(const float *vv, const float *vec, unsigned long count, float *dotResult);
-long b3_maxdot_large(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- const float4 *vertices = (const float4 *)vv;
- static const unsigned char indexTable[16] = {(unsigned char)-1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
- float4 dotMax = b3Assign128(-B3_INFINITY, -B3_INFINITY, -B3_INFINITY, -B3_INFINITY);
- float4 vvec = _mm_loadu_ps(vec);
- float4 vHi = b3CastiTo128f(_mm_shuffle_epi32(b3CastfTo128i(vvec), 0xaa)); /// zzzz
- float4 vLo = _mm_movelh_ps(vvec, vvec); /// xyxy
-
- long maxIndex = -1L;
-
- size_t segment = 0;
- float4 stack_array[STACK_ARRAY_COUNT];
-
-#if DEBUG
- // memset( stack_array, -1, STACK_ARRAY_COUNT * sizeof(stack_array[0]) );
-#endif
-
- size_t index;
- float4 max;
- // Faster loop without cleanup code for full tiles
- for (segment = 0; segment + STACK_ARRAY_COUNT * 4 <= count; segment += STACK_ARRAY_COUNT * 4)
- {
- max = dotMax;
-
- for (index = 0; index < STACK_ARRAY_COUNT; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- // It is too costly to keep the index of the max here. We will look for it again later. We save a lot of work this way.
- }
-
- // If we found a new max
- if (0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(max, dotMax)))
- {
- // copy the new max across all lanes of our max accumulator
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0x4e));
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0xb1));
-
- dotMax = max;
-
- // find first occurrence of that max
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], max))); index++) // local_count must be a multiple of 4
- {
- }
- // record where it is.
- maxIndex = 4 * index + segment + indexTable[test];
- }
- }
-
- // account for work we've already done
- count -= segment;
-
- // Deal with the last < STACK_ARRAY_COUNT vectors
- max = dotMax;
- index = 0;
-
- if (b3Unlikely(count > 16))
- {
- for (; index + 4 <= count / 4; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- // It is too costly to keep the index of the max here. We will look for it again later. We save a lot of work this way.
- }
- }
-
- size_t localCount = (count & -4L) - 4 * index;
- if (localCount)
- {
-#ifdef __APPLE__
- float4 t0, t1, t2, t3, t4;
- float4 *sap = &stack_array[index + localCount / 4];
- vertices += localCount; // counter the offset
- size_t byteIndex = -(localCount) * sizeof(float);
- //AT&T Code style assembly
- asm volatile(
- ".align 4 \n\
- 0: movaps %[max], %[t2] // move max out of the way to avoid propagating NaNs in max \n\
- movaps (%[vertices], %[byteIndex], 4), %[t0] // vertices[0] \n\
- movaps 16(%[vertices], %[byteIndex], 4), %[t1] // vertices[1] \n\
- movaps %[t0], %[max] // vertices[0] \n\
- movlhps %[t1], %[max] // x0y0x1y1 \n\
- movaps 32(%[vertices], %[byteIndex], 4), %[t3] // vertices[2] \n\
- movaps 48(%[vertices], %[byteIndex], 4), %[t4] // vertices[3] \n\
- mulps %[vLo], %[max] // x0y0x1y1 * vLo \n\
- movhlps %[t0], %[t1] // z0w0z1w1 \n\
- movaps %[t3], %[t0] // vertices[2] \n\
- movlhps %[t4], %[t0] // x2y2x3y3 \n\
- mulps %[vLo], %[t0] // x2y2x3y3 * vLo \n\
- movhlps %[t3], %[t4] // z2w2z3w3 \n\
- shufps $0x88, %[t4], %[t1] // z0z1z2z3 \n\
- mulps %[vHi], %[t1] // z0z1z2z3 * vHi \n\
- movaps %[max], %[t3] // x0y0x1y1 * vLo \n\
- shufps $0x88, %[t0], %[max] // x0x1x2x3 * vLo.x \n\
- shufps $0xdd, %[t0], %[t3] // y0y1y2y3 * vLo.y \n\
- addps %[t3], %[max] // x + y \n\
- addps %[t1], %[max] // x + y + z \n\
- movaps %[max], (%[sap], %[byteIndex]) // record result for later scrutiny \n\
- maxps %[t2], %[max] // record max, restore max \n\
- add $16, %[byteIndex] // advance loop counter\n\
- jnz 0b \n\
- "
- : [max] "+x"(max), [t0] "=&x"(t0), [t1] "=&x"(t1), [t2] "=&x"(t2), [t3] "=&x"(t3), [t4] "=&x"(t4), [byteIndex] "+r"(byteIndex)
- : [vLo] "x"(vLo), [vHi] "x"(vHi), [vertices] "r"(vertices), [sap] "r"(sap)
- : "memory", "cc");
- index += localCount / 4;
-#else
- {
- for (unsigned int i = 0; i < localCount / 4; i++, index++)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
- }
- }
-#endif //__APPLE__
- }
-
- // process the last few points
- if (count & 3)
- {
- float4 v0, v1, v2, x, y, z;
- switch (count & 3)
- {
- case 3:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
-
- // Calculate 3 dot products, transpose, duplicate v2
- float4 lo0 = _mm_movelh_ps(v0, v1); // xyxy.lo
- float4 hi0 = _mm_movehl_ps(v1, v0); // z?z?.lo
- lo0 = lo0 * vLo;
- z = _mm_shuffle_ps(hi0, v2, 0xa8); // z0z1z2z2
- z = z * vHi;
- float4 lo1 = _mm_movelh_ps(v2, v2); // xyxy
- lo1 = lo1 * vLo;
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- }
- break;
- case 2:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- float4 xy = _mm_movelh_ps(v0, v1);
- z = _mm_movehl_ps(v1, v0);
- xy = xy * vLo;
- z = _mm_shuffle_ps(z, z, 0xa8);
- x = _mm_shuffle_ps(xy, xy, 0xa8);
- y = _mm_shuffle_ps(xy, xy, 0xfd);
- z = z * vHi;
- }
- break;
- case 1:
- {
- float4 xy = vertices[0];
- z = _mm_shuffle_ps(xy, xy, 0xaa);
- xy = xy * vLo;
- z = z * vHi;
- x = _mm_shuffle_ps(xy, xy, 0);
- y = _mm_shuffle_ps(xy, xy, 0x55);
- }
- break;
- }
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
- index++;
- }
-
- // if we found a new max.
- if (0 == segment || 0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(max, dotMax)))
- { // we found a new max. Search for it
- // find max across the max vector, place in all elements of max -- big latency hit here
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0x4e));
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0xb1));
-
- // It is slightly faster to do this part in scalar code when count < 8. However, the common case for
- // this where it actually makes a difference is handled in the early out at the top of the function,
- // so it is less than a 1% difference here. I opted for improved code size, fewer branches and reduced
- // complexity, and removed it.
-
- dotMax = max;
-
- // scan for the first occurence of max in the array
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], max))); index++) // local_count must be a multiple of 4
- {
- }
- maxIndex = 4 * index + segment + indexTable[test];
- }
-
- _mm_store_ss(dotResult, dotMax);
- return maxIndex;
-}
-
-long b3_mindot_large(const float *vv, const float *vec, unsigned long count, float *dotResult);
-
-long b3_mindot_large(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- const float4 *vertices = (const float4 *)vv;
- static const unsigned char indexTable[16] = {(unsigned char)-1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
-
- float4 dotmin = b3Assign128(B3_INFINITY, B3_INFINITY, B3_INFINITY, B3_INFINITY);
- float4 vvec = _mm_loadu_ps(vec);
- float4 vHi = b3CastiTo128f(_mm_shuffle_epi32(b3CastfTo128i(vvec), 0xaa)); /// zzzz
- float4 vLo = _mm_movelh_ps(vvec, vvec); /// xyxy
-
- long minIndex = -1L;
-
- size_t segment = 0;
- float4 stack_array[STACK_ARRAY_COUNT];
-
-#if DEBUG
- // memset( stack_array, -1, STACK_ARRAY_COUNT * sizeof(stack_array[0]) );
-#endif
-
- size_t index;
- float4 min;
- // Faster loop without cleanup code for full tiles
- for (segment = 0; segment + STACK_ARRAY_COUNT * 4 <= count; segment += STACK_ARRAY_COUNT * 4)
- {
- min = dotmin;
-
- for (index = 0; index < STACK_ARRAY_COUNT; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- // It is too costly to keep the index of the min here. We will look for it again later. We save a lot of work this way.
- }
-
- // If we found a new min
- if (0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(min, dotmin)))
- {
- // copy the new min across all lanes of our min accumulator
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0x4e));
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0xb1));
-
- dotmin = min;
-
- // find first occurrence of that min
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], min))); index++) // local_count must be a multiple of 4
- {
- }
- // record where it is.
- minIndex = 4 * index + segment + indexTable[test];
- }
- }
-
- // account for work we've already done
- count -= segment;
-
- // Deal with the last < STACK_ARRAY_COUNT vectors
- min = dotmin;
- index = 0;
-
- if (b3Unlikely(count > 16))
- {
- for (; index + 4 <= count / 4; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- // It is too costly to keep the index of the min here. We will look for it again later. We save a lot of work this way.
- }
- }
-
- size_t localCount = (count & -4L) - 4 * index;
- if (localCount)
- {
-#ifdef __APPLE__
- vertices += localCount; // counter the offset
- float4 t0, t1, t2, t3, t4;
- size_t byteIndex = -(localCount) * sizeof(float);
- float4 *sap = &stack_array[index + localCount / 4];
-
- asm volatile(
- ".align 4 \n\
- 0: movaps %[min], %[t2] // move min out of the way to avoid propagating NaNs in min \n\
- movaps (%[vertices], %[byteIndex], 4), %[t0] // vertices[0] \n\
- movaps 16(%[vertices], %[byteIndex], 4), %[t1] // vertices[1] \n\
- movaps %[t0], %[min] // vertices[0] \n\
- movlhps %[t1], %[min] // x0y0x1y1 \n\
- movaps 32(%[vertices], %[byteIndex], 4), %[t3] // vertices[2] \n\
- movaps 48(%[vertices], %[byteIndex], 4), %[t4] // vertices[3] \n\
- mulps %[vLo], %[min] // x0y0x1y1 * vLo \n\
- movhlps %[t0], %[t1] // z0w0z1w1 \n\
- movaps %[t3], %[t0] // vertices[2] \n\
- movlhps %[t4], %[t0] // x2y2x3y3 \n\
- movhlps %[t3], %[t4] // z2w2z3w3 \n\
- mulps %[vLo], %[t0] // x2y2x3y3 * vLo \n\
- shufps $0x88, %[t4], %[t1] // z0z1z2z3 \n\
- mulps %[vHi], %[t1] // z0z1z2z3 * vHi \n\
- movaps %[min], %[t3] // x0y0x1y1 * vLo \n\
- shufps $0x88, %[t0], %[min] // x0x1x2x3 * vLo.x \n\
- shufps $0xdd, %[t0], %[t3] // y0y1y2y3 * vLo.y \n\
- addps %[t3], %[min] // x + y \n\
- addps %[t1], %[min] // x + y + z \n\
- movaps %[min], (%[sap], %[byteIndex]) // record result for later scrutiny \n\
- minps %[t2], %[min] // record min, restore min \n\
- add $16, %[byteIndex] // advance loop counter\n\
- jnz 0b \n\
- "
- : [min] "+x"(min), [t0] "=&x"(t0), [t1] "=&x"(t1), [t2] "=&x"(t2), [t3] "=&x"(t3), [t4] "=&x"(t4), [byteIndex] "+r"(byteIndex)
- : [vLo] "x"(vLo), [vHi] "x"(vHi), [vertices] "r"(vertices), [sap] "r"(sap)
- : "memory", "cc");
- index += localCount / 4;
-#else
- {
- for (unsigned int i = 0; i < localCount / 4; i++, index++)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that max is never NaN even if x is nan
- }
- }
-
-#endif
- }
-
- // process the last few points
- if (count & 3)
- {
- float4 v0, v1, v2, x, y, z;
- switch (count & 3)
- {
- case 3:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
-
- // Calculate 3 dot products, transpose, duplicate v2
- float4 lo0 = _mm_movelh_ps(v0, v1); // xyxy.lo
- float4 hi0 = _mm_movehl_ps(v1, v0); // z?z?.lo
- lo0 = lo0 * vLo;
- z = _mm_shuffle_ps(hi0, v2, 0xa8); // z0z1z2z2
- z = z * vHi;
- float4 lo1 = _mm_movelh_ps(v2, v2); // xyxy
- lo1 = lo1 * vLo;
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- }
- break;
- case 2:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- float4 xy = _mm_movelh_ps(v0, v1);
- z = _mm_movehl_ps(v1, v0);
- xy = xy * vLo;
- z = _mm_shuffle_ps(z, z, 0xa8);
- x = _mm_shuffle_ps(xy, xy, 0xa8);
- y = _mm_shuffle_ps(xy, xy, 0xfd);
- z = z * vHi;
- }
- break;
- case 1:
- {
- float4 xy = vertices[0];
- z = _mm_shuffle_ps(xy, xy, 0xaa);
- xy = xy * vLo;
- z = z * vHi;
- x = _mm_shuffle_ps(xy, xy, 0);
- y = _mm_shuffle_ps(xy, xy, 0x55);
- }
- break;
- }
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
- index++;
- }
-
- // if we found a new min.
- if (0 == segment || 0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(min, dotmin)))
- { // we found a new min. Search for it
- // find min across the min vector, place in all elements of min -- big latency hit here
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0x4e));
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0xb1));
-
- // It is slightly faster to do this part in scalar code when count < 8. However, the common case for
- // this where it actually makes a difference is handled in the early out at the top of the function,
- // so it is less than a 1% difference here. I opted for improved code size, fewer branches and reduced
- // complexity, and removed it.
-
- dotmin = min;
-
- // scan for the first occurence of min in the array
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], min))); index++) // local_count must be a multiple of 4
- {
- }
- minIndex = 4 * index + segment + indexTable[test];
- }
-
- _mm_store_ss(dotResult, dotmin);
- return minIndex;
-}
-
-#elif defined B3_USE_NEON
-#define ARM_NEON_GCC_COMPATIBILITY 1
-#include <arm_neon.h>
-
-static long b3_maxdot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long b3_maxdot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long b3_maxdot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long b3_mindot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long b3_mindot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long b3_mindot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult);
-
-long (*b3_maxdot_large)(const float *vv, const float *vec, unsigned long count, float *dotResult) = b3_maxdot_large_sel;
-long (*b3_mindot_large)(const float *vv, const float *vec, unsigned long count, float *dotResult) = b3_mindot_large_sel;
-
-extern "C"
-{
- int _get_cpu_capabilities(void);
-}
-
-static long b3_maxdot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- if (_get_cpu_capabilities() & 0x2000)
- b3_maxdot_large = _maxdot_large_v1;
- else
- b3_maxdot_large = _maxdot_large_v0;
-
- return b3_maxdot_large(vv, vec, count, dotResult);
-}
-
-static long b3_mindot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- if (_get_cpu_capabilities() & 0x2000)
- b3_mindot_large = _mindot_large_v1;
- else
- b3_mindot_large = _mindot_large_v0;
-
- return b3_mindot_large(vv, vec, count, dotResult);
-}
-
-#define vld1q_f32_aligned_postincrement(_ptr) ({ float32x4_t _r; asm( "vld1.f32 {%0}, [%1, :128]!\n" : "=w" (_r), "+r" (_ptr) ); /*return*/ _r; })
-
-long b3_maxdot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- unsigned long i = 0;
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x2_t vLo = vget_low_f32(vvec);
- float32x2_t vHi = vdup_lane_f32(vget_high_f32(vvec), 0);
- float32x2_t dotMaxLo = (float32x2_t){-B3_INFINITY, -B3_INFINITY};
- float32x2_t dotMaxHi = (float32x2_t){-B3_INFINITY, -B3_INFINITY};
- uint32x2_t indexLo = (uint32x2_t){0, 1};
- uint32x2_t indexHi = (uint32x2_t){2, 3};
- uint32x2_t iLo = (uint32x2_t){-1, -1};
- uint32x2_t iHi = (uint32x2_t){-1, -1};
- const uint32x2_t four = (uint32x2_t){4, 4};
-
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- uint32x2_t maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- xy0 = vmul_f32(vget_low_f32(v0), vLo);
- xy1 = vmul_f32(vget_low_f32(v1), vLo);
- xy2 = vmul_f32(vget_low_f32(v2), vLo);
- xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- zLo = vmul_f32(z0.val[0], vHi);
- zHi = vmul_f32(z1.val[0], vHi);
-
- rLo = vpadd_f32(xy0, xy1);
- rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- maskLo = vcgt_f32(rLo, dotMaxLo);
- maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- uint32x2_t maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
-
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(vdup_lane_f32(vget_high_f32(v2), 0), vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy2);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- uint32x2_t maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- }
- break;
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- rLo = vadd_f32(rLo, zLo);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t z0 = vdup_lane_f32(vget_high_f32(v0), 0);
- float32x2_t zLo = vmul_f32(z0, vHi);
- float32x2_t rLo = vpadd_f32(xy0, xy0);
- rLo = vadd_f32(rLo, zLo);
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vcgt_f32(dotMaxHi, dotMaxLo);
- dotMaxLo = vbsl_f32(mask, dotMaxHi, dotMaxLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- // select best answer between even and odd results
- dotMaxHi = vdup_lane_f32(dotMaxLo, 1);
- iHi = vdup_lane_u32(iLo, 1);
- mask = vcgt_f32(dotMaxHi, dotMaxLo);
- dotMaxLo = vbsl_f32(mask, dotMaxHi, dotMaxLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- *dotResult = vget_lane_f32(dotMaxLo, 0);
- return vget_lane_u32(iLo, 0);
-}
-
-long b3_maxdot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x4_t vLo = vcombine_f32(vget_low_f32(vvec), vget_low_f32(vvec));
- float32x4_t vHi = vdupq_lane_f32(vget_high_f32(vvec), 0);
- const uint32x4_t four = (uint32x4_t){4, 4, 4, 4};
- uint32x4_t local_index = (uint32x4_t){0, 1, 2, 3};
- uint32x4_t index = (uint32x4_t){-1, -1, -1, -1};
- float32x4_t maxDot = (float32x4_t){-B3_INFINITY, -B3_INFINITY, -B3_INFINITY, -B3_INFINITY};
-
- unsigned long i = 0;
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- zb = vuzpq_f32(z0, z1);
- z = vmulq_f32(zb.val[0], vHi);
- xy = vuzpq_f32(xy0, xy1);
- x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v2));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v2));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
-
- xy0 = vmulq_f32(xy0, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z0);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v0));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z = vdupq_lane_f32(vget_high_f32(v0), 0);
-
- xy0 = vmulq_f32(xy0, vLo);
-
- z = vmulq_f32(z, vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vcgt_f32(vget_high_f32(maxDot), vget_low_f32(maxDot));
- float32x2_t maxDot2 = vbsl_f32(mask, vget_high_f32(maxDot), vget_low_f32(maxDot));
- uint32x2_t index2 = vbsl_u32(mask, vget_high_u32(index), vget_low_u32(index));
-
- // select best answer between even and odd results
- float32x2_t maxDotO = vdup_lane_f32(maxDot2, 1);
- uint32x2_t indexHi = vdup_lane_u32(index2, 1);
- mask = vcgt_f32(maxDotO, maxDot2);
- maxDot2 = vbsl_f32(mask, maxDotO, maxDot2);
- index2 = vbsl_u32(mask, indexHi, index2);
-
- *dotResult = vget_lane_f32(maxDot2, 0);
- return vget_lane_u32(index2, 0);
-}
-
-long b3_mindot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- unsigned long i = 0;
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x2_t vLo = vget_low_f32(vvec);
- float32x2_t vHi = vdup_lane_f32(vget_high_f32(vvec), 0);
- float32x2_t dotMinLo = (float32x2_t){B3_INFINITY, B3_INFINITY};
- float32x2_t dotMinHi = (float32x2_t){B3_INFINITY, B3_INFINITY};
- uint32x2_t indexLo = (uint32x2_t){0, 1};
- uint32x2_t indexHi = (uint32x2_t){2, 3};
- uint32x2_t iLo = (uint32x2_t){-1, -1};
- uint32x2_t iHi = (uint32x2_t){-1, -1};
- const uint32x2_t four = (uint32x2_t){4, 4};
-
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- uint32x2_t maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- xy0 = vmul_f32(vget_low_f32(v0), vLo);
- xy1 = vmul_f32(vget_low_f32(v1), vLo);
- xy2 = vmul_f32(vget_low_f32(v2), vLo);
- xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- zLo = vmul_f32(z0.val[0], vHi);
- zHi = vmul_f32(z1.val[0], vHi);
-
- rLo = vpadd_f32(xy0, xy1);
- rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- maskLo = vclt_f32(rLo, dotMinLo);
- maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- uint32x2_t maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(vdup_lane_f32(vget_high_f32(v2), 0), vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy2);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- uint32x2_t maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- }
- break;
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- rLo = vadd_f32(rLo, zLo);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t z0 = vdup_lane_f32(vget_high_f32(v0), 0);
- float32x2_t zLo = vmul_f32(z0, vHi);
- float32x2_t rLo = vpadd_f32(xy0, xy0);
- rLo = vadd_f32(rLo, zLo);
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vclt_f32(dotMinHi, dotMinLo);
- dotMinLo = vbsl_f32(mask, dotMinHi, dotMinLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- // select best answer between even and odd results
- dotMinHi = vdup_lane_f32(dotMinLo, 1);
- iHi = vdup_lane_u32(iLo, 1);
- mask = vclt_f32(dotMinHi, dotMinLo);
- dotMinLo = vbsl_f32(mask, dotMinHi, dotMinLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- *dotResult = vget_lane_f32(dotMinLo, 0);
- return vget_lane_u32(iLo, 0);
-}
-
-long b3_mindot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x4_t vLo = vcombine_f32(vget_low_f32(vvec), vget_low_f32(vvec));
- float32x4_t vHi = vdupq_lane_f32(vget_high_f32(vvec), 0);
- const uint32x4_t four = (uint32x4_t){4, 4, 4, 4};
- uint32x4_t local_index = (uint32x4_t){0, 1, 2, 3};
- uint32x4_t index = (uint32x4_t){-1, -1, -1, -1};
- float32x4_t minDot = (float32x4_t){B3_INFINITY, B3_INFINITY, B3_INFINITY, B3_INFINITY};
-
- unsigned long i = 0;
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- zb = vuzpq_f32(z0, z1);
- z = vmulq_f32(zb.val[0], vHi);
- xy = vuzpq_f32(xy0, xy1);
- x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v2));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v2));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
-
- xy0 = vmulq_f32(xy0, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z0);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v0));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z = vdupq_lane_f32(vget_high_f32(v0), 0);
-
- xy0 = vmulq_f32(xy0, vLo);
-
- z = vmulq_f32(z, vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vclt_f32(vget_high_f32(minDot), vget_low_f32(minDot));
- float32x2_t minDot2 = vbsl_f32(mask, vget_high_f32(minDot), vget_low_f32(minDot));
- uint32x2_t index2 = vbsl_u32(mask, vget_high_u32(index), vget_low_u32(index));
-
- // select best answer between even and odd results
- float32x2_t minDotO = vdup_lane_f32(minDot2, 1);
- uint32x2_t indexHi = vdup_lane_u32(index2, 1);
- mask = vclt_f32(minDotO, minDot2);
- minDot2 = vbsl_f32(mask, minDotO, minDot2);
- index2 = vbsl_u32(mask, indexHi, index2);
-
- *dotResult = vget_lane_f32(minDot2, 0);
- return vget_lane_u32(index2, 0);
-}
-
-#else
-#error Unhandled __APPLE__ arch
-#endif
-
-#endif /* __APPLE__ */
diff --git a/thirdparty/bullet/Bullet3Common/b3Vector3.h b/thirdparty/bullet/Bullet3Common/b3Vector3.h
deleted file mode 100644
index a70d68d6e1..0000000000
--- a/thirdparty/bullet/Bullet3Common/b3Vector3.h
+++ /dev/null
@@ -1,1303 +0,0 @@
-/*
-Copyright (c) 2003-2013 Gino van den Bergen / Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_VECTOR3_H
-#define B3_VECTOR3_H
-
-//#include <stdint.h>
-#include "b3Scalar.h"
-#include "b3MinMax.h"
-#include "b3AlignedAllocator.h"
-
-#ifdef B3_USE_DOUBLE_PRECISION
-#define b3Vector3Data b3Vector3DoubleData
-#define b3Vector3DataName "b3Vector3DoubleData"
-#else
-#define b3Vector3Data b3Vector3FloatData
-#define b3Vector3DataName "b3Vector3FloatData"
-#endif //B3_USE_DOUBLE_PRECISION
-
-#if defined B3_USE_SSE
-
-//typedef uint32_t __m128i __attribute__ ((vector_size(16)));
-
-#ifdef _MSC_VER
-#pragma warning(disable : 4556) // value of intrinsic immediate argument '4294967239' is out of range '0 - 255'
-#endif
-
-#define B3_SHUFFLE(x, y, z, w) (((w) << 6 | (z) << 4 | (y) << 2 | (x)) & 0xff)
-//#define b3_pshufd_ps( _a, _mask ) (__m128) _mm_shuffle_epi32((__m128i)(_a), (_mask) )
-#define b3_pshufd_ps(_a, _mask) _mm_shuffle_ps((_a), (_a), (_mask))
-#define b3_splat3_ps(_a, _i) b3_pshufd_ps((_a), B3_SHUFFLE(_i, _i, _i, 3))
-#define b3_splat_ps(_a, _i) b3_pshufd_ps((_a), B3_SHUFFLE(_i, _i, _i, _i))
-
-#define b3v3AbsiMask (_mm_set_epi32(0x00000000, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF))
-#define b3vAbsMask (_mm_set_epi32(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF))
-#define b3vFFF0Mask (_mm_set_epi32(0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF))
-#define b3v3AbsfMask b3CastiTo128f(b3v3AbsiMask)
-#define b3vFFF0fMask b3CastiTo128f(b3vFFF0Mask)
-#define b3vxyzMaskf b3vFFF0fMask
-#define b3vAbsfMask b3CastiTo128f(b3vAbsMask)
-
-const __m128 B3_ATTRIBUTE_ALIGNED16(b3vMzeroMask) = {-0.0f, -0.0f, -0.0f, -0.0f};
-const __m128 B3_ATTRIBUTE_ALIGNED16(b3v1110) = {1.0f, 1.0f, 1.0f, 0.0f};
-const __m128 B3_ATTRIBUTE_ALIGNED16(b3vHalf) = {0.5f, 0.5f, 0.5f, 0.5f};
-const __m128 B3_ATTRIBUTE_ALIGNED16(b3v1_5) = {1.5f, 1.5f, 1.5f, 1.5f};
-
-#endif
-
-#ifdef B3_USE_NEON
-
-const float32x4_t B3_ATTRIBUTE_ALIGNED16(b3vMzeroMask) = (float32x4_t){-0.0f, -0.0f, -0.0f, -0.0f};
-const int32x4_t B3_ATTRIBUTE_ALIGNED16(b3vFFF0Mask) = (int32x4_t){0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x0};
-const int32x4_t B3_ATTRIBUTE_ALIGNED16(b3vAbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF};
-const int32x4_t B3_ATTRIBUTE_ALIGNED16(b3v3AbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x0};
-
-#endif
-
-class b3Vector3;
-class b3Vector4;
-
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
-//#if defined (B3_USE_SSE) || defined (B3_USE_NEON)
-inline b3Vector3 b3MakeVector3(b3SimdFloat4 v);
-inline b3Vector4 b3MakeVector4(b3SimdFloat4 vec);
-#endif
-
-inline b3Vector3 b3MakeVector3(b3Scalar x, b3Scalar y, b3Scalar z);
-inline b3Vector3 b3MakeVector3(b3Scalar x, b3Scalar y, b3Scalar z, b3Scalar w);
-inline b3Vector4 b3MakeVector4(b3Scalar x, b3Scalar y, b3Scalar z, b3Scalar w);
-
-/**@brief b3Vector3 can be used to represent 3D points and vectors.
- * It has an un-used w component to suit 16-byte alignment when b3Vector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user
- * Ideally, this class should be replaced by a platform optimized SIMD version that keeps the data in registers
- */
-B3_ATTRIBUTE_ALIGNED16(class)
-b3Vector3
-{
-public:
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON) // _WIN32 || ARM
- union {
- b3SimdFloat4 mVec128;
- float m_floats[4];
- struct
- {
- float x, y, z, w;
- };
- };
-#else
- union {
- float m_floats[4];
- struct
- {
- float x, y, z, w;
- };
- };
-#endif
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON) // _WIN32 || ARM
-
- /*B3_FORCE_INLINE b3Vector3()
- {
- }
- */
-
- B3_FORCE_INLINE b3SimdFloat4 get128() const
- {
- return mVec128;
- }
- B3_FORCE_INLINE void set128(b3SimdFloat4 v128)
- {
- mVec128 = v128;
- }
-#endif
-
-public:
- /**@brief Add a vector to this one
- * @param The vector to add to this one */
- B3_FORCE_INLINE b3Vector3& operator+=(const b3Vector3& v)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_add_ps(mVec128, v.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vaddq_f32(mVec128, v.mVec128);
-#else
- m_floats[0] += v.m_floats[0];
- m_floats[1] += v.m_floats[1];
- m_floats[2] += v.m_floats[2];
-#endif
- return *this;
- }
-
- /**@brief Subtract a vector from this one
- * @param The vector to subtract */
- B3_FORCE_INLINE b3Vector3& operator-=(const b3Vector3& v)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_sub_ps(mVec128, v.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vsubq_f32(mVec128, v.mVec128);
-#else
- m_floats[0] -= v.m_floats[0];
- m_floats[1] -= v.m_floats[1];
- m_floats[2] -= v.m_floats[2];
-#endif
- return *this;
- }
-
- /**@brief Scale the vector
- * @param s Scale factor */
- B3_FORCE_INLINE b3Vector3& operator*=(const b3Scalar& s)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = b3_pshufd_ps(vs, 0x80); // (S S S 0.0)
- mVec128 = _mm_mul_ps(mVec128, vs);
-#elif defined(B3_USE_NEON)
- mVec128 = vmulq_n_f32(mVec128, s);
-#else
- m_floats[0] *= s;
- m_floats[1] *= s;
- m_floats[2] *= s;
-#endif
- return *this;
- }
-
- /**@brief Inversely scale the vector
- * @param s Scale factor to divide by */
- B3_FORCE_INLINE b3Vector3& operator/=(const b3Scalar& s)
- {
- b3FullAssert(s != b3Scalar(0.0));
-
-#if 0 //defined(B3_USE_SSE_IN_API)
-// this code is not faster !
- __m128 vs = _mm_load_ss(&s);
- vs = _mm_div_ss(b3v1110, vs);
- vs = b3_pshufd_ps(vs, 0x00); // (S S S S)
-
- mVec128 = _mm_mul_ps(mVec128, vs);
-
- return *this;
-#else
- return *this *= b3Scalar(1.0) / s;
-#endif
- }
-
- /**@brief Return the dot product
- * @param v The other vector in the dot product */
- B3_FORCE_INLINE b3Scalar dot(const b3Vector3& v) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vd = _mm_mul_ps(mVec128, v.mVec128);
- __m128 z = _mm_movehl_ps(vd, vd);
- __m128 y = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, y);
- vd = _mm_add_ss(vd, z);
- return _mm_cvtss_f32(vd);
-#elif defined(B3_USE_NEON)
- float32x4_t vd = vmulq_f32(mVec128, v.mVec128);
- float32x2_t x = vpadd_f32(vget_low_f32(vd), vget_low_f32(vd));
- x = vadd_f32(x, vget_high_f32(vd));
- return vget_lane_f32(x, 0);
-#else
- return m_floats[0] * v.m_floats[0] +
- m_floats[1] * v.m_floats[1] +
- m_floats[2] * v.m_floats[2];
-#endif
- }
-
- /**@brief Return the length of the vector squared */
- B3_FORCE_INLINE b3Scalar length2() const
- {
- return dot(*this);
- }
-
- /**@brief Return the length of the vector */
- B3_FORCE_INLINE b3Scalar length() const
- {
- return b3Sqrt(length2());
- }
-
- /**@brief Return the distance squared between the ends of this and another vector
- * This is symantically treating the vector like a point */
- B3_FORCE_INLINE b3Scalar distance2(const b3Vector3& v) const;
-
- /**@brief Return the distance between the ends of this and another vector
- * This is symantically treating the vector like a point */
- B3_FORCE_INLINE b3Scalar distance(const b3Vector3& v) const;
-
- B3_FORCE_INLINE b3Vector3& safeNormalize()
- {
- b3Scalar l2 = length2();
- //triNormal.normalize();
- if (l2 >= B3_EPSILON * B3_EPSILON)
- {
- (*this) /= b3Sqrt(l2);
- }
- else
- {
- setValue(1, 0, 0);
- }
- return *this;
- }
-
- /**@brief Normalize this vector
- * x^2 + y^2 + z^2 = 1 */
- B3_FORCE_INLINE b3Vector3& normalize()
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- // dot product first
- __m128 vd = _mm_mul_ps(mVec128, mVec128);
- __m128 z = _mm_movehl_ps(vd, vd);
- __m128 y = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, y);
- vd = _mm_add_ss(vd, z);
-
-#if 0
- vd = _mm_sqrt_ss(vd);
- vd = _mm_div_ss(b3v1110, vd);
- vd = b3_splat_ps(vd, 0x80);
- mVec128 = _mm_mul_ps(mVec128, vd);
-#else
-
- // NR step 1/sqrt(x) - vd is x, y is output
- y = _mm_rsqrt_ss(vd); // estimate
-
- // one step NR
- z = b3v1_5;
- vd = _mm_mul_ss(vd, b3vHalf); // vd * 0.5
- //x2 = vd;
- vd = _mm_mul_ss(vd, y); // vd * 0.5 * y0
- vd = _mm_mul_ss(vd, y); // vd * 0.5 * y0 * y0
- z = _mm_sub_ss(z, vd); // 1.5 - vd * 0.5 * y0 * y0
-
- y = _mm_mul_ss(y, z); // y0 * (1.5 - vd * 0.5 * y0 * y0)
-
- y = b3_splat_ps(y, 0x80);
- mVec128 = _mm_mul_ps(mVec128, y);
-
-#endif
-
- return *this;
-#else
- return *this /= length();
-#endif
- }
-
- /**@brief Return a normalized version of this vector */
- B3_FORCE_INLINE b3Vector3 normalized() const;
-
- /**@brief Return a rotated version of this vector
- * @param wAxis The axis to rotate about
- * @param angle The angle to rotate by */
- B3_FORCE_INLINE b3Vector3 rotate(const b3Vector3& wAxis, const b3Scalar angle) const;
-
- /**@brief Return the angle between this and another vector
- * @param v The other vector */
- B3_FORCE_INLINE b3Scalar angle(const b3Vector3& v) const
- {
- b3Scalar s = b3Sqrt(length2() * v.length2());
- b3FullAssert(s != b3Scalar(0.0));
- return b3Acos(dot(v) / s);
- }
-
- /**@brief Return a vector will the absolute values of each element */
- B3_FORCE_INLINE b3Vector3 absolute() const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3MakeVector3(_mm_and_ps(mVec128, b3v3AbsfMask));
-#elif defined(B3_USE_NEON)
- return b3Vector3(vabsq_f32(mVec128));
-#else
- return b3MakeVector3(
- b3Fabs(m_floats[0]),
- b3Fabs(m_floats[1]),
- b3Fabs(m_floats[2]));
-#endif
- }
-
- /**@brief Return the cross product between this and another vector
- * @param v The other vector */
- B3_FORCE_INLINE b3Vector3 cross(const b3Vector3& v) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 T, V;
-
- T = b3_pshufd_ps(mVec128, B3_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
- V = b3_pshufd_ps(v.mVec128, B3_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
-
- V = _mm_mul_ps(V, mVec128);
- T = _mm_mul_ps(T, v.mVec128);
- V = _mm_sub_ps(V, T);
-
- V = b3_pshufd_ps(V, B3_SHUFFLE(1, 2, 0, 3));
- return b3MakeVector3(V);
-#elif defined(B3_USE_NEON)
- float32x4_t T, V;
- // form (Y, Z, X, _) of mVec128 and v.mVec128
- float32x2_t Tlow = vget_low_f32(mVec128);
- float32x2_t Vlow = vget_low_f32(v.mVec128);
- T = vcombine_f32(vext_f32(Tlow, vget_high_f32(mVec128), 1), Tlow);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(v.mVec128), 1), Vlow);
-
- V = vmulq_f32(V, mVec128);
- T = vmulq_f32(T, v.mVec128);
- V = vsubq_f32(V, T);
- Vlow = vget_low_f32(V);
- // form (Y, Z, X, _);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow);
- V = (float32x4_t)vandq_s32((int32x4_t)V, b3vFFF0Mask);
-
- return b3Vector3(V);
-#else
- return b3MakeVector3(
- m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1],
- m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2],
- m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]);
-#endif
- }
-
- B3_FORCE_INLINE b3Scalar triple(const b3Vector3& v1, const b3Vector3& v2) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- // cross:
- __m128 T = _mm_shuffle_ps(v1.mVec128, v1.mVec128, B3_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
- __m128 V = _mm_shuffle_ps(v2.mVec128, v2.mVec128, B3_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
-
- V = _mm_mul_ps(V, v1.mVec128);
- T = _mm_mul_ps(T, v2.mVec128);
- V = _mm_sub_ps(V, T);
-
- V = _mm_shuffle_ps(V, V, B3_SHUFFLE(1, 2, 0, 3));
-
- // dot:
- V = _mm_mul_ps(V, mVec128);
- __m128 z = _mm_movehl_ps(V, V);
- __m128 y = _mm_shuffle_ps(V, V, 0x55);
- V = _mm_add_ss(V, y);
- V = _mm_add_ss(V, z);
- return _mm_cvtss_f32(V);
-
-#elif defined(B3_USE_NEON)
- // cross:
- float32x4_t T, V;
- // form (Y, Z, X, _) of mVec128 and v.mVec128
- float32x2_t Tlow = vget_low_f32(v1.mVec128);
- float32x2_t Vlow = vget_low_f32(v2.mVec128);
- T = vcombine_f32(vext_f32(Tlow, vget_high_f32(v1.mVec128), 1), Tlow);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(v2.mVec128), 1), Vlow);
-
- V = vmulq_f32(V, v1.mVec128);
- T = vmulq_f32(T, v2.mVec128);
- V = vsubq_f32(V, T);
- Vlow = vget_low_f32(V);
- // form (Y, Z, X, _);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow);
-
- // dot:
- V = vmulq_f32(mVec128, V);
- float32x2_t x = vpadd_f32(vget_low_f32(V), vget_low_f32(V));
- x = vadd_f32(x, vget_high_f32(V));
- return vget_lane_f32(x, 0);
-#else
- return m_floats[0] * (v1.m_floats[1] * v2.m_floats[2] - v1.m_floats[2] * v2.m_floats[1]) +
- m_floats[1] * (v1.m_floats[2] * v2.m_floats[0] - v1.m_floats[0] * v2.m_floats[2]) +
- m_floats[2] * (v1.m_floats[0] * v2.m_floats[1] - v1.m_floats[1] * v2.m_floats[0]);
-#endif
- }
-
- /**@brief Return the axis with the smallest value
- * Note return values are 0,1,2 for x, y, or z */
- B3_FORCE_INLINE int minAxis() const
- {
- return m_floats[0] < m_floats[1] ? (m_floats[0] < m_floats[2] ? 0 : 2) : (m_floats[1] < m_floats[2] ? 1 : 2);
- }
-
- /**@brief Return the axis with the largest value
- * Note return values are 0,1,2 for x, y, or z */
- B3_FORCE_INLINE int maxAxis() const
- {
- return m_floats[0] < m_floats[1] ? (m_floats[1] < m_floats[2] ? 2 : 1) : (m_floats[0] < m_floats[2] ? 2 : 0);
- }
-
- B3_FORCE_INLINE int furthestAxis() const
- {
- return absolute().minAxis();
- }
-
- B3_FORCE_INLINE int closestAxis() const
- {
- return absolute().maxAxis();
- }
-
- B3_FORCE_INLINE void setInterpolate3(const b3Vector3& v0, const b3Vector3& v1, b3Scalar rt)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vrt = _mm_load_ss(&rt); // (rt 0 0 0)
- b3Scalar s = b3Scalar(1.0) - rt;
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = b3_pshufd_ps(vs, 0x80); // (S S S 0.0)
- __m128 r0 = _mm_mul_ps(v0.mVec128, vs);
- vrt = b3_pshufd_ps(vrt, 0x80); // (rt rt rt 0.0)
- __m128 r1 = _mm_mul_ps(v1.mVec128, vrt);
- __m128 tmp3 = _mm_add_ps(r0, r1);
- mVec128 = tmp3;
-#elif defined(B3_USE_NEON)
- float32x4_t vl = vsubq_f32(v1.mVec128, v0.mVec128);
- vl = vmulq_n_f32(vl, rt);
- mVec128 = vaddq_f32(vl, v0.mVec128);
-#else
- b3Scalar s = b3Scalar(1.0) - rt;
- m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0];
- m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1];
- m_floats[2] = s * v0.m_floats[2] + rt * v1.m_floats[2];
- //don't do the unused w component
- // m_co[3] = s * v0[3] + rt * v1[3];
-#endif
- }
-
- /**@brief Return the linear interpolation between this and another vector
- * @param v The other vector
- * @param t The ration of this to v (t = 0 => return this, t=1 => return other) */
- B3_FORCE_INLINE b3Vector3 lerp(const b3Vector3& v, const b3Scalar& t) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vt = _mm_load_ss(&t); // (t 0 0 0)
- vt = b3_pshufd_ps(vt, 0x80); // (rt rt rt 0.0)
- __m128 vl = _mm_sub_ps(v.mVec128, mVec128);
- vl = _mm_mul_ps(vl, vt);
- vl = _mm_add_ps(vl, mVec128);
-
- return b3MakeVector3(vl);
-#elif defined(B3_USE_NEON)
- float32x4_t vl = vsubq_f32(v.mVec128, mVec128);
- vl = vmulq_n_f32(vl, t);
- vl = vaddq_f32(vl, mVec128);
-
- return b3Vector3(vl);
-#else
- return b3MakeVector3(m_floats[0] + (v.m_floats[0] - m_floats[0]) * t,
- m_floats[1] + (v.m_floats[1] - m_floats[1]) * t,
- m_floats[2] + (v.m_floats[2] - m_floats[2]) * t);
-#endif
- }
-
- /**@brief Elementwise multiply this vector by the other
- * @param v The other vector */
- B3_FORCE_INLINE b3Vector3& operator*=(const b3Vector3& v)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_mul_ps(mVec128, v.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vmulq_f32(mVec128, v.mVec128);
-#else
- m_floats[0] *= v.m_floats[0];
- m_floats[1] *= v.m_floats[1];
- m_floats[2] *= v.m_floats[2];
-#endif
- return *this;
- }
-
- /**@brief Return the x value */
- B3_FORCE_INLINE const b3Scalar& getX() const { return m_floats[0]; }
- /**@brief Return the y value */
- B3_FORCE_INLINE const b3Scalar& getY() const { return m_floats[1]; }
- /**@brief Return the z value */
- B3_FORCE_INLINE const b3Scalar& getZ() const { return m_floats[2]; }
- /**@brief Return the w value */
- B3_FORCE_INLINE const b3Scalar& getW() const { return m_floats[3]; }
-
- /**@brief Set the x value */
- B3_FORCE_INLINE void setX(b3Scalar _x) { m_floats[0] = _x; };
- /**@brief Set the y value */
- B3_FORCE_INLINE void setY(b3Scalar _y) { m_floats[1] = _y; };
- /**@brief Set the z value */
- B3_FORCE_INLINE void setZ(b3Scalar _z) { m_floats[2] = _z; };
- /**@brief Set the w value */
- B3_FORCE_INLINE void setW(b3Scalar _w) { m_floats[3] = _w; };
-
- //B3_FORCE_INLINE b3Scalar& operator[](int i) { return (&m_floats[0])[i]; }
- //B3_FORCE_INLINE const b3Scalar& operator[](int i) const { return (&m_floats[0])[i]; }
- ///operator b3Scalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons.
- B3_FORCE_INLINE operator b3Scalar*() { return &m_floats[0]; }
- B3_FORCE_INLINE operator const b3Scalar*() const { return &m_floats[0]; }
-
- B3_FORCE_INLINE bool operator==(const b3Vector3& other) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128)));
-#else
- return ((m_floats[3] == other.m_floats[3]) &&
- (m_floats[2] == other.m_floats[2]) &&
- (m_floats[1] == other.m_floats[1]) &&
- (m_floats[0] == other.m_floats[0]));
-#endif
- }
-
- B3_FORCE_INLINE bool operator!=(const b3Vector3& other) const
- {
- return !(*this == other);
- }
-
- /**@brief Set each element to the max of the current values and the values of another b3Vector3
- * @param other The other b3Vector3 to compare with
- */
- B3_FORCE_INLINE void setMax(const b3Vector3& other)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_max_ps(mVec128, other.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vmaxq_f32(mVec128, other.mVec128);
-#else
- b3SetMax(m_floats[0], other.m_floats[0]);
- b3SetMax(m_floats[1], other.m_floats[1]);
- b3SetMax(m_floats[2], other.m_floats[2]);
- b3SetMax(m_floats[3], other.m_floats[3]);
-#endif
- }
-
- /**@brief Set each element to the min of the current values and the values of another b3Vector3
- * @param other The other b3Vector3 to compare with
- */
- B3_FORCE_INLINE void setMin(const b3Vector3& other)
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = _mm_min_ps(mVec128, other.mVec128);
-#elif defined(B3_USE_NEON)
- mVec128 = vminq_f32(mVec128, other.mVec128);
-#else
- b3SetMin(m_floats[0], other.m_floats[0]);
- b3SetMin(m_floats[1], other.m_floats[1]);
- b3SetMin(m_floats[2], other.m_floats[2]);
- b3SetMin(m_floats[3], other.m_floats[3]);
-#endif
- }
-
- B3_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = b3Scalar(0.f);
- }
-
- void getSkewSymmetricMatrix(b3Vector3 * v0, b3Vector3 * v1, b3Vector3 * v2) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
-
- __m128 V = _mm_and_ps(mVec128, b3vFFF0fMask);
- __m128 V0 = _mm_xor_ps(b3vMzeroMask, V);
- __m128 V2 = _mm_movelh_ps(V0, V);
-
- __m128 V1 = _mm_shuffle_ps(V, V0, 0xCE);
-
- V0 = _mm_shuffle_ps(V0, V, 0xDB);
- V2 = _mm_shuffle_ps(V2, V, 0xF9);
-
- v0->mVec128 = V0;
- v1->mVec128 = V1;
- v2->mVec128 = V2;
-#else
- v0->setValue(0., -getZ(), getY());
- v1->setValue(getZ(), 0., -getX());
- v2->setValue(-getY(), getX(), 0.);
-#endif
- }
-
- void setZero()
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- mVec128 = (__m128)_mm_xor_ps(mVec128, mVec128);
-#elif defined(B3_USE_NEON)
- int32x4_t vi = vdupq_n_s32(0);
- mVec128 = vreinterpretq_f32_s32(vi);
-#else
- setValue(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
-#endif
- }
-
- B3_FORCE_INLINE bool isZero() const
- {
- return m_floats[0] == b3Scalar(0) && m_floats[1] == b3Scalar(0) && m_floats[2] == b3Scalar(0);
- }
-
- B3_FORCE_INLINE bool fuzzyZero() const
- {
- return length2() < B3_EPSILON;
- }
-
- B3_FORCE_INLINE void serialize(struct b3Vector3Data & dataOut) const;
-
- B3_FORCE_INLINE void deSerialize(const struct b3Vector3Data& dataIn);
-
- B3_FORCE_INLINE void serializeFloat(struct b3Vector3FloatData & dataOut) const;
-
- B3_FORCE_INLINE void deSerializeFloat(const struct b3Vector3FloatData& dataIn);
-
- B3_FORCE_INLINE void serializeDouble(struct b3Vector3DoubleData & dataOut) const;
-
- B3_FORCE_INLINE void deSerializeDouble(const struct b3Vector3DoubleData& dataIn);
-
- /**@brief returns index of maximum dot product between this and vectors in array[]
- * @param array The other vectors
- * @param array_count The number of other vectors
- * @param dotOut The maximum dot product */
- B3_FORCE_INLINE long maxDot(const b3Vector3* array, long array_count, b3Scalar& dotOut) const;
-
- /**@brief returns index of minimum dot product between this and vectors in array[]
- * @param array The other vectors
- * @param array_count The number of other vectors
- * @param dotOut The minimum dot product */
- B3_FORCE_INLINE long minDot(const b3Vector3* array, long array_count, b3Scalar& dotOut) const;
-
- /* create a vector as b3Vector3( this->dot( b3Vector3 v0 ), this->dot( b3Vector3 v1), this->dot( b3Vector3 v2 )) */
- B3_FORCE_INLINE b3Vector3 dot3(const b3Vector3& v0, const b3Vector3& v1, const b3Vector3& v2) const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
-
- __m128 a0 = _mm_mul_ps(v0.mVec128, this->mVec128);
- __m128 a1 = _mm_mul_ps(v1.mVec128, this->mVec128);
- __m128 a2 = _mm_mul_ps(v2.mVec128, this->mVec128);
- __m128 b0 = _mm_unpacklo_ps(a0, a1);
- __m128 b1 = _mm_unpackhi_ps(a0, a1);
- __m128 b2 = _mm_unpacklo_ps(a2, _mm_setzero_ps());
- __m128 r = _mm_movelh_ps(b0, b2);
- r = _mm_add_ps(r, _mm_movehl_ps(b2, b0));
- a2 = _mm_and_ps(a2, b3vxyzMaskf);
- r = _mm_add_ps(r, b3CastdTo128f(_mm_move_sd(b3CastfTo128d(a2), b3CastfTo128d(b1))));
- return b3MakeVector3(r);
-
-#elif defined(B3_USE_NEON)
- static const uint32x4_t xyzMask = (const uint32x4_t){-1, -1, -1, 0};
- float32x4_t a0 = vmulq_f32(v0.mVec128, this->mVec128);
- float32x4_t a1 = vmulq_f32(v1.mVec128, this->mVec128);
- float32x4_t a2 = vmulq_f32(v2.mVec128, this->mVec128);
- float32x2x2_t zLo = vtrn_f32(vget_high_f32(a0), vget_high_f32(a1));
- a2 = (float32x4_t)vandq_u32((uint32x4_t)a2, xyzMask);
- float32x2_t b0 = vadd_f32(vpadd_f32(vget_low_f32(a0), vget_low_f32(a1)), zLo.val[0]);
- float32x2_t b1 = vpadd_f32(vpadd_f32(vget_low_f32(a2), vget_high_f32(a2)), vdup_n_f32(0.0f));
- return b3Vector3(vcombine_f32(b0, b1));
-#else
- return b3MakeVector3(dot(v0), dot(v1), dot(v2));
-#endif
- }
-};
-
-/**@brief Return the sum of two vectors (Point symantics)*/
-B3_FORCE_INLINE b3Vector3
-operator+(const b3Vector3& v1, const b3Vector3& v2)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3MakeVector3(_mm_add_ps(v1.mVec128, v2.mVec128));
-#elif defined(B3_USE_NEON)
- return b3MakeVector3(vaddq_f32(v1.mVec128, v2.mVec128));
-#else
- return b3MakeVector3(
- v1.m_floats[0] + v2.m_floats[0],
- v1.m_floats[1] + v2.m_floats[1],
- v1.m_floats[2] + v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the elementwise product of two vectors */
-B3_FORCE_INLINE b3Vector3
-operator*(const b3Vector3& v1, const b3Vector3& v2)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3MakeVector3(_mm_mul_ps(v1.mVec128, v2.mVec128));
-#elif defined(B3_USE_NEON)
- return b3MakeVector3(vmulq_f32(v1.mVec128, v2.mVec128));
-#else
- return b3MakeVector3(
- v1.m_floats[0] * v2.m_floats[0],
- v1.m_floats[1] * v2.m_floats[1],
- v1.m_floats[2] * v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the difference between two vectors */
-B3_FORCE_INLINE b3Vector3
-operator-(const b3Vector3& v1, const b3Vector3& v2)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
-
- // without _mm_and_ps this code causes slowdown in Concave moving
- __m128 r = _mm_sub_ps(v1.mVec128, v2.mVec128);
- return b3MakeVector3(_mm_and_ps(r, b3vFFF0fMask));
-#elif defined(B3_USE_NEON)
- float32x4_t r = vsubq_f32(v1.mVec128, v2.mVec128);
- return b3MakeVector3((float32x4_t)vandq_s32((int32x4_t)r, b3vFFF0Mask));
-#else
- return b3MakeVector3(
- v1.m_floats[0] - v2.m_floats[0],
- v1.m_floats[1] - v2.m_floats[1],
- v1.m_floats[2] - v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the negative of the vector */
-B3_FORCE_INLINE b3Vector3
-operator-(const b3Vector3& v)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- __m128 r = _mm_xor_ps(v.mVec128, b3vMzeroMask);
- return b3MakeVector3(_mm_and_ps(r, b3vFFF0fMask));
-#elif defined(B3_USE_NEON)
- return b3MakeVector3((b3SimdFloat4)veorq_s32((int32x4_t)v.mVec128, (int32x4_t)b3vMzeroMask));
-#else
- return b3MakeVector3(-v.m_floats[0], -v.m_floats[1], -v.m_floats[2]);
-#endif
-}
-
-/**@brief Return the vector scaled by s */
-B3_FORCE_INLINE b3Vector3
-operator*(const b3Vector3& v, const b3Scalar& s)
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = b3_pshufd_ps(vs, 0x80); // (S S S 0.0)
- return b3MakeVector3(_mm_mul_ps(v.mVec128, vs));
-#elif defined(B3_USE_NEON)
- float32x4_t r = vmulq_n_f32(v.mVec128, s);
- return b3MakeVector3((float32x4_t)vandq_s32((int32x4_t)r, b3vFFF0Mask));
-#else
- return b3MakeVector3(v.m_floats[0] * s, v.m_floats[1] * s, v.m_floats[2] * s);
-#endif
-}
-
-/**@brief Return the vector scaled by s */
-B3_FORCE_INLINE b3Vector3
-operator*(const b3Scalar& s, const b3Vector3& v)
-{
- return v * s;
-}
-
-/**@brief Return the vector inversely scaled by s */
-B3_FORCE_INLINE b3Vector3
-operator/(const b3Vector3& v, const b3Scalar& s)
-{
- b3FullAssert(s != b3Scalar(0.0));
-#if 0 //defined(B3_USE_SSE_IN_API)
-// this code is not faster !
- __m128 vs = _mm_load_ss(&s);
- vs = _mm_div_ss(b3v1110, vs);
- vs = b3_pshufd_ps(vs, 0x00); // (S S S S)
-
- return b3Vector3(_mm_mul_ps(v.mVec128, vs));
-#else
- return v * (b3Scalar(1.0) / s);
-#endif
-}
-
-/**@brief Return the vector inversely scaled by s */
-B3_FORCE_INLINE b3Vector3
-operator/(const b3Vector3& v1, const b3Vector3& v2)
-{
-#if (defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE))
- __m128 vec = _mm_div_ps(v1.mVec128, v2.mVec128);
- vec = _mm_and_ps(vec, b3vFFF0fMask);
- return b3MakeVector3(vec);
-#elif defined(B3_USE_NEON)
- float32x4_t x, y, v, m;
-
- x = v1.mVec128;
- y = v2.mVec128;
-
- v = vrecpeq_f32(y); // v ~ 1/y
- m = vrecpsq_f32(y, v); // m = (2-v*y)
- v = vmulq_f32(v, m); // vv = v*m ~~ 1/y
- m = vrecpsq_f32(y, v); // mm = (2-vv*y)
- v = vmulq_f32(v, x); // x*vv
- v = vmulq_f32(v, m); // (x*vv)*(2-vv*y) = x*(vv(2-vv*y)) ~~~ x/y
-
- return b3Vector3(v);
-#else
- return b3MakeVector3(
- v1.m_floats[0] / v2.m_floats[0],
- v1.m_floats[1] / v2.m_floats[1],
- v1.m_floats[2] / v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the dot product between two vectors */
-B3_FORCE_INLINE b3Scalar
-b3Dot(const b3Vector3& v1, const b3Vector3& v2)
-{
- return v1.dot(v2);
-}
-
-/**@brief Return the distance squared between two vectors */
-B3_FORCE_INLINE b3Scalar
-b3Distance2(const b3Vector3& v1, const b3Vector3& v2)
-{
- return v1.distance2(v2);
-}
-
-/**@brief Return the distance between two vectors */
-B3_FORCE_INLINE b3Scalar
-b3Distance(const b3Vector3& v1, const b3Vector3& v2)
-{
- return v1.distance(v2);
-}
-
-/**@brief Return the angle between two vectors */
-B3_FORCE_INLINE b3Scalar
-b3Angle(const b3Vector3& v1, const b3Vector3& v2)
-{
- return v1.angle(v2);
-}
-
-/**@brief Return the cross product of two vectors */
-B3_FORCE_INLINE b3Vector3
-b3Cross(const b3Vector3& v1, const b3Vector3& v2)
-{
- return v1.cross(v2);
-}
-
-B3_FORCE_INLINE b3Scalar
-b3Triple(const b3Vector3& v1, const b3Vector3& v2, const b3Vector3& v3)
-{
- return v1.triple(v2, v3);
-}
-
-/**@brief Return the linear interpolation between two vectors
- * @param v1 One vector
- * @param v2 The other vector
- * @param t The ration of this to v (t = 0 => return v1, t=1 => return v2) */
-B3_FORCE_INLINE b3Vector3
-b3Lerp(const b3Vector3& v1, const b3Vector3& v2, const b3Scalar& t)
-{
- return v1.lerp(v2, t);
-}
-
-B3_FORCE_INLINE b3Scalar b3Vector3::distance2(const b3Vector3& v) const
-{
- return (v - *this).length2();
-}
-
-B3_FORCE_INLINE b3Scalar b3Vector3::distance(const b3Vector3& v) const
-{
- return (v - *this).length();
-}
-
-B3_FORCE_INLINE b3Vector3 b3Vector3::normalized() const
-{
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- b3Vector3 norm = *this;
-
- return norm.normalize();
-#else
- return *this / length();
-#endif
-}
-
-B3_FORCE_INLINE b3Vector3 b3Vector3::rotate(const b3Vector3& wAxis, const b3Scalar _angle) const
-{
- // wAxis must be a unit lenght vector
-
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
-
- __m128 O = _mm_mul_ps(wAxis.mVec128, mVec128);
- b3Scalar ssin = b3Sin(_angle);
- __m128 C = wAxis.cross(b3MakeVector3(mVec128)).mVec128;
- O = _mm_and_ps(O, b3vFFF0fMask);
- b3Scalar scos = b3Cos(_angle);
-
- __m128 vsin = _mm_load_ss(&ssin); // (S 0 0 0)
- __m128 vcos = _mm_load_ss(&scos); // (S 0 0 0)
-
- __m128 Y = b3_pshufd_ps(O, 0xC9); // (Y Z X 0)
- __m128 Z = b3_pshufd_ps(O, 0xD2); // (Z X Y 0)
- O = _mm_add_ps(O, Y);
- vsin = b3_pshufd_ps(vsin, 0x80); // (S S S 0)
- O = _mm_add_ps(O, Z);
- vcos = b3_pshufd_ps(vcos, 0x80); // (S S S 0)
-
- vsin = vsin * C;
- O = O * wAxis.mVec128;
- __m128 X = mVec128 - O;
-
- O = O + vsin;
- vcos = vcos * X;
- O = O + vcos;
-
- return b3MakeVector3(O);
-#else
- b3Vector3 o = wAxis * wAxis.dot(*this);
- b3Vector3 _x = *this - o;
- b3Vector3 _y;
-
- _y = wAxis.cross(*this);
-
- return (o + _x * b3Cos(_angle) + _y * b3Sin(_angle));
-#endif
-}
-
-B3_FORCE_INLINE long b3Vector3::maxDot(const b3Vector3* array, long array_count, b3Scalar& dotOut) const
-{
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-#if defined _WIN32 || defined(B3_USE_SSE)
- const long scalar_cutoff = 10;
- long b3_maxdot_large(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#elif defined B3_USE_NEON
- const long scalar_cutoff = 4;
- extern long (*_maxdot_large)(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#endif
- if (array_count < scalar_cutoff)
-#else
-
-#endif //B3_USE_SSE || B3_USE_NEON
- {
- b3Scalar maxDot = -B3_INFINITY;
- int i = 0;
- int ptIndex = -1;
- for (i = 0; i < array_count; i++)
- {
- b3Scalar dot = array[i].dot(*this);
-
- if (dot > maxDot)
- {
- maxDot = dot;
- ptIndex = i;
- }
- }
-
- b3Assert(ptIndex >= 0);
- if (ptIndex < 0)
- {
- ptIndex = 0;
- }
- dotOut = maxDot;
- return ptIndex;
- }
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
- return b3_maxdot_large((float*)array, (float*)&m_floats[0], array_count, &dotOut);
-#endif
-}
-
-B3_FORCE_INLINE long b3Vector3::minDot(const b3Vector3* array, long array_count, b3Scalar& dotOut) const
-{
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
-#if defined B3_USE_SSE
- const long scalar_cutoff = 10;
- long b3_mindot_large(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#elif defined B3_USE_NEON
- const long scalar_cutoff = 4;
- extern long (*b3_mindot_large)(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#else
-#error unhandled arch!
-#endif
-
- if (array_count < scalar_cutoff)
-#endif //B3_USE_SSE || B3_USE_NEON
- {
- b3Scalar minDot = B3_INFINITY;
- int i = 0;
- int ptIndex = -1;
-
- for (i = 0; i < array_count; i++)
- {
- b3Scalar dot = array[i].dot(*this);
-
- if (dot < minDot)
- {
- minDot = dot;
- ptIndex = i;
- }
- }
-
- dotOut = minDot;
-
- return ptIndex;
- }
-#if defined(B3_USE_SSE) || defined(B3_USE_NEON)
- return b3_mindot_large((float*)array, (float*)&m_floats[0], array_count, &dotOut);
-#endif
-}
-
-class b3Vector4 : public b3Vector3
-{
-public:
- B3_FORCE_INLINE b3Vector4 absolute4() const
- {
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
- return b3MakeVector4(_mm_and_ps(mVec128, b3vAbsfMask));
-#elif defined(B3_USE_NEON)
- return b3Vector4(vabsq_f32(mVec128));
-#else
- return b3MakeVector4(
- b3Fabs(m_floats[0]),
- b3Fabs(m_floats[1]),
- b3Fabs(m_floats[2]),
- b3Fabs(m_floats[3]));
-#endif
- }
-
- b3Scalar getW() const { return m_floats[3]; }
-
- B3_FORCE_INLINE int maxAxis4() const
- {
- int maxIndex = -1;
- b3Scalar maxVal = b3Scalar(-B3_LARGE_FLOAT);
- if (m_floats[0] > maxVal)
- {
- maxIndex = 0;
- maxVal = m_floats[0];
- }
- if (m_floats[1] > maxVal)
- {
- maxIndex = 1;
- maxVal = m_floats[1];
- }
- if (m_floats[2] > maxVal)
- {
- maxIndex = 2;
- maxVal = m_floats[2];
- }
- if (m_floats[3] > maxVal)
- {
- maxIndex = 3;
- }
-
- return maxIndex;
- }
-
- B3_FORCE_INLINE int minAxis4() const
- {
- int minIndex = -1;
- b3Scalar minVal = b3Scalar(B3_LARGE_FLOAT);
- if (m_floats[0] < minVal)
- {
- minIndex = 0;
- minVal = m_floats[0];
- }
- if (m_floats[1] < minVal)
- {
- minIndex = 1;
- minVal = m_floats[1];
- }
- if (m_floats[2] < minVal)
- {
- minIndex = 2;
- minVal = m_floats[2];
- }
- if (m_floats[3] < minVal)
- {
- minIndex = 3;
- minVal = m_floats[3];
- }
-
- return minIndex;
- }
-
- B3_FORCE_INLINE int closestAxis4() const
- {
- return absolute4().maxAxis4();
- }
-
- /**@brief Set x,y,z and zero w
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- */
-
- /* void getValue(b3Scalar *m) const
- {
- m[0] = m_floats[0];
- m[1] = m_floats[1];
- m[2] =m_floats[2];
- }
-*/
- /**@brief Set the values
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
- */
- B3_FORCE_INLINE void setValue(const b3Scalar& _x, const b3Scalar& _y, const b3Scalar& _z, const b3Scalar& _w)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = _w;
- }
-};
-
-///b3SwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
-B3_FORCE_INLINE void b3SwapScalarEndian(const b3Scalar& sourceVal, b3Scalar& destVal)
-{
-#ifdef B3_USE_DOUBLE_PRECISION
- unsigned char* dest = (unsigned char*)&destVal;
- unsigned char* src = (unsigned char*)&sourceVal;
- dest[0] = src[7];
- dest[1] = src[6];
- dest[2] = src[5];
- dest[3] = src[4];
- dest[4] = src[3];
- dest[5] = src[2];
- dest[6] = src[1];
- dest[7] = src[0];
-#else
- unsigned char* dest = (unsigned char*)&destVal;
- unsigned char* src = (unsigned char*)&sourceVal;
- dest[0] = src[3];
- dest[1] = src[2];
- dest[2] = src[1];
- dest[3] = src[0];
-#endif //B3_USE_DOUBLE_PRECISION
-}
-///b3SwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
-B3_FORCE_INLINE void b3SwapVector3Endian(const b3Vector3& sourceVec, b3Vector3& destVec)
-{
- for (int i = 0; i < 4; i++)
- {
- b3SwapScalarEndian(sourceVec[i], destVec[i]);
- }
-}
-
-///b3UnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
-B3_FORCE_INLINE void b3UnSwapVector3Endian(b3Vector3& vector)
-{
- b3Vector3 swappedVec;
- for (int i = 0; i < 4; i++)
- {
- b3SwapScalarEndian(vector[i], swappedVec[i]);
- }
- vector = swappedVec;
-}
-
-template <class T>
-B3_FORCE_INLINE void b3PlaneSpace1(const T& n, T& p, T& q)
-{
- if (b3Fabs(n[2]) > B3_SQRT12)
- {
- // choose p in y-z plane
- b3Scalar a = n[1] * n[1] + n[2] * n[2];
- b3Scalar k = b3RecipSqrt(a);
- p[0] = 0;
- p[1] = -n[2] * k;
- p[2] = n[1] * k;
- // set q = n x p
- q[0] = a * k;
- q[1] = -n[0] * p[2];
- q[2] = n[0] * p[1];
- }
- else
- {
- // choose p in x-y plane
- b3Scalar a = n[0] * n[0] + n[1] * n[1];
- b3Scalar k = b3RecipSqrt(a);
- p[0] = -n[1] * k;
- p[1] = n[0] * k;
- p[2] = 0;
- // set q = n x p
- q[0] = -n[2] * p[1];
- q[1] = n[2] * p[0];
- q[2] = a * k;
- }
-}
-
-struct b3Vector3FloatData
-{
- float m_floats[4];
-};
-
-struct b3Vector3DoubleData
-{
- double m_floats[4];
-};
-
-B3_FORCE_INLINE void b3Vector3::serializeFloat(struct b3Vector3FloatData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = float(m_floats[i]);
-}
-
-B3_FORCE_INLINE void b3Vector3::deSerializeFloat(const struct b3Vector3FloatData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = b3Scalar(dataIn.m_floats[i]);
-}
-
-B3_FORCE_INLINE void b3Vector3::serializeDouble(struct b3Vector3DoubleData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = double(m_floats[i]);
-}
-
-B3_FORCE_INLINE void b3Vector3::deSerializeDouble(const struct b3Vector3DoubleData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = b3Scalar(dataIn.m_floats[i]);
-}
-
-B3_FORCE_INLINE void b3Vector3::serialize(struct b3Vector3Data& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = m_floats[i];
-}
-
-B3_FORCE_INLINE void b3Vector3::deSerialize(const struct b3Vector3Data& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = dataIn.m_floats[i];
-}
-
-inline b3Vector3 b3MakeVector3(b3Scalar x, b3Scalar y, b3Scalar z)
-{
- b3Vector3 tmp;
- tmp.setValue(x, y, z);
- return tmp;
-}
-
-inline b3Vector3 b3MakeVector3(b3Scalar x, b3Scalar y, b3Scalar z, b3Scalar w)
-{
- b3Vector3 tmp;
- tmp.setValue(x, y, z);
- tmp.w = w;
- return tmp;
-}
-
-inline b3Vector4 b3MakeVector4(b3Scalar x, b3Scalar y, b3Scalar z, b3Scalar w)
-{
- b3Vector4 tmp;
- tmp.setValue(x, y, z, w);
- return tmp;
-}
-
-#if defined(B3_USE_SSE_IN_API) && defined(B3_USE_SSE)
-
-inline b3Vector3 b3MakeVector3(b3SimdFloat4 v)
-{
- b3Vector3 tmp;
- tmp.set128(v);
- return tmp;
-}
-
-inline b3Vector4 b3MakeVector4(b3SimdFloat4 vec)
-{
- b3Vector4 tmp;
- tmp.set128(vec);
- return tmp;
-}
-
-#endif
-
-#endif //B3_VECTOR3_H
diff --git a/thirdparty/bullet/Bullet3Common/shared/b3Float4.h b/thirdparty/bullet/Bullet3Common/shared/b3Float4.h
deleted file mode 100644
index d8a9f47411..0000000000
--- a/thirdparty/bullet/Bullet3Common/shared/b3Float4.h
+++ /dev/null
@@ -1,90 +0,0 @@
-#ifndef B3_FLOAT4_H
-#define B3_FLOAT4_H
-
-#include "Bullet3Common/shared/b3PlatformDefinitions.h"
-
-#ifdef __cplusplus
-#include "Bullet3Common/b3Vector3.h"
-#define b3Float4 b3Vector3
-#define b3Float4ConstArg const b3Vector3&
-#define b3Dot3F4 b3Dot
-#define b3Cross3 b3Cross
-#define b3MakeFloat4 b3MakeVector3
-inline b3Vector3 b3Normalized(const b3Vector3& vec)
-{
- return vec.normalized();
-}
-
-inline b3Float4 b3FastNormalized3(b3Float4ConstArg v)
-{
- return v.normalized();
-}
-
-inline b3Float4 b3MaxFloat4(const b3Float4& a, const b3Float4& b)
-{
- b3Float4 tmp = a;
- tmp.setMax(b);
- return tmp;
-}
-inline b3Float4 b3MinFloat4(const b3Float4& a, const b3Float4& b)
-{
- b3Float4 tmp = a;
- tmp.setMin(b);
- return tmp;
-}
-
-#else
-typedef float4 b3Float4;
-#define b3Float4ConstArg const b3Float4
-#define b3MakeFloat4 (float4)
-float b3Dot3F4(b3Float4ConstArg v0, b3Float4ConstArg v1)
-{
- float4 a1 = b3MakeFloat4(v0.xyz, 0.f);
- float4 b1 = b3MakeFloat4(v1.xyz, 0.f);
- return dot(a1, b1);
-}
-b3Float4 b3Cross3(b3Float4ConstArg v0, b3Float4ConstArg v1)
-{
- float4 a1 = b3MakeFloat4(v0.xyz, 0.f);
- float4 b1 = b3MakeFloat4(v1.xyz, 0.f);
- return cross(a1, b1);
-}
-#define b3MinFloat4 min
-#define b3MaxFloat4 max
-
-#define b3Normalized(a) normalize(a)
-
-#endif
-
-inline bool b3IsAlmostZero(b3Float4ConstArg v)
-{
- if (b3Fabs(v.x) > 1e-6 || b3Fabs(v.y) > 1e-6 || b3Fabs(v.z) > 1e-6)
- return false;
- return true;
-}
-
-inline int b3MaxDot(b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut)
-{
- float maxDot = -B3_INFINITY;
- int i = 0;
- int ptIndex = -1;
- for (i = 0; i < vecLen; i++)
- {
- float dot = b3Dot3F4(vecArray[i], vec);
-
- if (dot > maxDot)
- {
- maxDot = dot;
- ptIndex = i;
- }
- }
- b3Assert(ptIndex >= 0);
- if (ptIndex < 0)
- {
- ptIndex = 0;
- }
- *dotOut = maxDot;
- return ptIndex;
-}
-
-#endif //B3_FLOAT4_H
diff --git a/thirdparty/bullet/Bullet3Common/shared/b3Int2.h b/thirdparty/bullet/Bullet3Common/shared/b3Int2.h
deleted file mode 100644
index 7b84de4436..0000000000
--- a/thirdparty/bullet/Bullet3Common/shared/b3Int2.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_INT2_H
-#define B3_INT2_H
-
-#ifdef __cplusplus
-
-struct b3UnsignedInt2
-{
- union {
- struct
- {
- unsigned int x, y;
- };
- struct
- {
- unsigned int s[2];
- };
- };
-};
-
-struct b3Int2
-{
- union {
- struct
- {
- int x, y;
- };
- struct
- {
- int s[2];
- };
- };
-};
-
-inline b3Int2 b3MakeInt2(int x, int y)
-{
- b3Int2 v;
- v.s[0] = x;
- v.s[1] = y;
- return v;
-}
-#else
-
-#define b3UnsignedInt2 uint2
-#define b3Int2 int2
-#define b3MakeInt2 (int2)
-
-#endif //__cplusplus
-#endif \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Common/shared/b3Int4.h b/thirdparty/bullet/Bullet3Common/shared/b3Int4.h
deleted file mode 100644
index f6a1754245..0000000000
--- a/thirdparty/bullet/Bullet3Common/shared/b3Int4.h
+++ /dev/null
@@ -1,71 +0,0 @@
-#ifndef B3_INT4_H
-#define B3_INT4_H
-
-#ifdef __cplusplus
-
-#include "Bullet3Common/b3Scalar.h"
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3UnsignedInt4
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- union {
- struct
- {
- unsigned int x, y, z, w;
- };
- struct
- {
- unsigned int s[4];
- };
- };
-};
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3Int4
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- union {
- struct
- {
- int x, y, z, w;
- };
- struct
- {
- int s[4];
- };
- };
-};
-
-B3_FORCE_INLINE b3Int4 b3MakeInt4(int x, int y, int z, int w = 0)
-{
- b3Int4 v;
- v.s[0] = x;
- v.s[1] = y;
- v.s[2] = z;
- v.s[3] = w;
- return v;
-}
-
-B3_FORCE_INLINE b3UnsignedInt4 b3MakeUnsignedInt4(unsigned int x, unsigned int y, unsigned int z, unsigned int w = 0)
-{
- b3UnsignedInt4 v;
- v.s[0] = x;
- v.s[1] = y;
- v.s[2] = z;
- v.s[3] = w;
- return v;
-}
-
-#else
-
-#define b3UnsignedInt4 uint4
-#define b3Int4 int4
-#define b3MakeInt4 (int4)
-#define b3MakeUnsignedInt4 (uint4)
-
-#endif //__cplusplus
-
-#endif //B3_INT4_H
diff --git a/thirdparty/bullet/Bullet3Common/shared/b3Mat3x3.h b/thirdparty/bullet/Bullet3Common/shared/b3Mat3x3.h
deleted file mode 100644
index ce6482b5a6..0000000000
--- a/thirdparty/bullet/Bullet3Common/shared/b3Mat3x3.h
+++ /dev/null
@@ -1,157 +0,0 @@
-
-#ifndef B3_MAT3x3_H
-#define B3_MAT3x3_H
-
-#include "Bullet3Common/shared/b3Quat.h"
-
-#ifdef __cplusplus
-
-#include "Bullet3Common/b3Matrix3x3.h"
-
-#define b3Mat3x3 b3Matrix3x3
-#define b3Mat3x3ConstArg const b3Matrix3x3&
-
-inline b3Mat3x3 b3QuatGetRotationMatrix(b3QuatConstArg quat)
-{
- return b3Mat3x3(quat);
-}
-
-inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg mat)
-{
- return mat.absolute();
-}
-
-#define b3GetRow(m, row) m.getRow(row)
-
-__inline b3Float4 mtMul3(b3Float4ConstArg a, b3Mat3x3ConstArg b)
-{
- return b * a;
-}
-
-#else
-
-typedef struct
-{
- b3Float4 m_row[3];
-} b3Mat3x3;
-
-#define b3Mat3x3ConstArg const b3Mat3x3
-#define b3GetRow(m, row) (m.m_row[row])
-
-inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)
-{
- b3Float4 quat2 = (b3Float4)(quat.x * quat.x, quat.y * quat.y, quat.z * quat.z, 0.f);
- b3Mat3x3 out;
-
- out.m_row[0].x = 1 - 2 * quat2.y - 2 * quat2.z;
- out.m_row[0].y = 2 * quat.x * quat.y - 2 * quat.w * quat.z;
- out.m_row[0].z = 2 * quat.x * quat.z + 2 * quat.w * quat.y;
- out.m_row[0].w = 0.f;
-
- out.m_row[1].x = 2 * quat.x * quat.y + 2 * quat.w * quat.z;
- out.m_row[1].y = 1 - 2 * quat2.x - 2 * quat2.z;
- out.m_row[1].z = 2 * quat.y * quat.z - 2 * quat.w * quat.x;
- out.m_row[1].w = 0.f;
-
- out.m_row[2].x = 2 * quat.x * quat.z - 2 * quat.w * quat.y;
- out.m_row[2].y = 2 * quat.y * quat.z + 2 * quat.w * quat.x;
- out.m_row[2].z = 1 - 2 * quat2.x - 2 * quat2.y;
- out.m_row[2].w = 0.f;
-
- return out;
-}
-
-inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)
-{
- b3Mat3x3 out;
- out.m_row[0] = fabs(matIn.m_row[0]);
- out.m_row[1] = fabs(matIn.m_row[1]);
- out.m_row[2] = fabs(matIn.m_row[2]);
- return out;
-}
-
-__inline b3Mat3x3 mtZero();
-
-__inline b3Mat3x3 mtIdentity();
-
-__inline b3Mat3x3 mtTranspose(b3Mat3x3 m);
-
-__inline b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);
-
-__inline b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);
-
-__inline b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);
-
-__inline b3Mat3x3 mtZero()
-{
- b3Mat3x3 m;
- m.m_row[0] = (b3Float4)(0.f);
- m.m_row[1] = (b3Float4)(0.f);
- m.m_row[2] = (b3Float4)(0.f);
- return m;
-}
-
-__inline b3Mat3x3 mtIdentity()
-{
- b3Mat3x3 m;
- m.m_row[0] = (b3Float4)(1, 0, 0, 0);
- m.m_row[1] = (b3Float4)(0, 1, 0, 0);
- m.m_row[2] = (b3Float4)(0, 0, 1, 0);
- return m;
-}
-
-__inline b3Mat3x3 mtTranspose(b3Mat3x3 m)
-{
- b3Mat3x3 out;
- out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);
- out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);
- out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);
- return out;
-}
-
-__inline b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)
-{
- b3Mat3x3 transB;
- transB = mtTranspose(b);
- b3Mat3x3 ans;
- // why this doesn't run when 0ing in the for{}
- a.m_row[0].w = 0.f;
- a.m_row[1].w = 0.f;
- a.m_row[2].w = 0.f;
- for (int i = 0; i < 3; i++)
- {
- // a.m_row[i].w = 0.f;
- ans.m_row[i].x = b3Dot3F4(a.m_row[i], transB.m_row[0]);
- ans.m_row[i].y = b3Dot3F4(a.m_row[i], transB.m_row[1]);
- ans.m_row[i].z = b3Dot3F4(a.m_row[i], transB.m_row[2]);
- ans.m_row[i].w = 0.f;
- }
- return ans;
-}
-
-__inline b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)
-{
- b3Float4 ans;
- ans.x = b3Dot3F4(a.m_row[0], b);
- ans.y = b3Dot3F4(a.m_row[1], b);
- ans.z = b3Dot3F4(a.m_row[2], b);
- ans.w = 0.f;
- return ans;
-}
-
-__inline b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)
-{
- b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
- b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
- b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
-
- b3Float4 ans;
- ans.x = b3Dot3F4(a, colx);
- ans.y = b3Dot3F4(a, coly);
- ans.z = b3Dot3F4(a, colz);
- return ans;
-}
-
-#endif
-
-#endif //B3_MAT3x3_H
diff --git a/thirdparty/bullet/Bullet3Common/shared/b3PlatformDefinitions.h b/thirdparty/bullet/Bullet3Common/shared/b3PlatformDefinitions.h
deleted file mode 100644
index b72bee9310..0000000000
--- a/thirdparty/bullet/Bullet3Common/shared/b3PlatformDefinitions.h
+++ /dev/null
@@ -1,41 +0,0 @@
-#ifndef B3_PLATFORM_DEFINITIONS_H
-#define B3_PLATFORM_DEFINITIONS_H
-
-struct MyTest
-{
- int bla;
-};
-
-#ifdef __cplusplus
-//#define b3ConstArray(a) const b3AlignedObjectArray<a>&
-#define b3ConstArray(a) const a *
-#define b3AtomicInc(a) ((*a)++)
-
-inline int b3AtomicAdd(volatile int *p, int val)
-{
- int oldValue = *p;
- int newValue = oldValue + val;
- *p = newValue;
- return oldValue;
-}
-
-#define __global
-
-#define B3_STATIC static
-#else
-//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX
-#define B3_LARGE_FLOAT 1e18f
-#define B3_INFINITY 1e18f
-#define b3Assert(a)
-#define b3ConstArray(a) __global const a *
-#define b3AtomicInc atomic_inc
-#define b3AtomicAdd atomic_add
-#define b3Fabs fabs
-#define b3Sqrt native_sqrt
-#define b3Sin native_sin
-#define b3Cos native_cos
-
-#define B3_STATIC
-#endif
-
-#endif
diff --git a/thirdparty/bullet/Bullet3Common/shared/b3Quat.h b/thirdparty/bullet/Bullet3Common/shared/b3Quat.h
deleted file mode 100644
index 940610c77b..0000000000
--- a/thirdparty/bullet/Bullet3Common/shared/b3Quat.h
+++ /dev/null
@@ -1,100 +0,0 @@
-#ifndef B3_QUAT_H
-#define B3_QUAT_H
-
-#include "Bullet3Common/shared/b3PlatformDefinitions.h"
-#include "Bullet3Common/shared/b3Float4.h"
-
-#ifdef __cplusplus
-#include "Bullet3Common/b3Quaternion.h"
-#include "Bullet3Common/b3Transform.h"
-
-#define b3Quat b3Quaternion
-#define b3QuatConstArg const b3Quaternion&
-inline b3Quat b3QuatInverse(b3QuatConstArg orn)
-{
- return orn.inverse();
-}
-
-inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)
-{
- b3Transform tr;
- tr.setOrigin(translation);
- tr.setRotation(orientation);
- return tr(point);
-}
-
-#else
-typedef float4 b3Quat;
-#define b3QuatConstArg const b3Quat
-
-inline float4 b3FastNormalize4(float4 v)
-{
- v = (float4)(v.xyz, 0.f);
- return fast_normalize(v);
-}
-
-inline b3Quat b3QuatMul(b3Quat a, b3Quat b);
-inline b3Quat b3QuatNormalized(b3QuatConstArg in);
-inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);
-inline b3Quat b3QuatInvert(b3QuatConstArg q);
-inline b3Quat b3QuatInverse(b3QuatConstArg q);
-
-inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)
-{
- b3Quat ans;
- ans = b3Cross3(a, b);
- ans += a.w * b + b.w * a;
- // ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w * b.w - b3Dot3F4(a, b);
- return ans;
-}
-
-inline b3Quat b3QuatNormalized(b3QuatConstArg in)
-{
- b3Quat q;
- q = in;
- //return b3FastNormalize4(in);
- float len = native_sqrt(dot(q, q));
- if (len > 0.f)
- {
- q *= 1.f / len;
- }
- else
- {
- q.x = q.y = q.z = 0.f;
- q.w = 1.f;
- }
- return q;
-}
-inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)
-{
- b3Quat qInv = b3QuatInvert(q);
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = b3QuatMul(b3QuatMul(q, vcpy), qInv);
- return out;
-}
-
-inline b3Quat b3QuatInverse(b3QuatConstArg q)
-{
- return (b3Quat)(-q.xyz, q.w);
-}
-
-inline b3Quat b3QuatInvert(b3QuatConstArg q)
-{
- return (b3Quat)(-q.xyz, q.w);
-}
-
-inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)
-{
- return b3QuatRotate(b3QuatInvert(q), vec);
-}
-
-inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)
-{
- return b3QuatRotate(orientation, point) + (translation);
-}
-
-#endif
-
-#endif //B3_QUAT_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3ContactSolverInfo.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3ContactSolverInfo.h
deleted file mode 100644
index 049c9116fd..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3ContactSolverInfo.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_CONTACT_SOLVER_INFO
-#define B3_CONTACT_SOLVER_INFO
-
-#include "Bullet3Common/b3Scalar.h"
-
-enum b3SolverMode
-{
- B3_SOLVER_RANDMIZE_ORDER = 1,
- B3_SOLVER_FRICTION_SEPARATE = 2,
- B3_SOLVER_USE_WARMSTARTING = 4,
- B3_SOLVER_USE_2_FRICTION_DIRECTIONS = 16,
- B3_SOLVER_ENABLE_FRICTION_DIRECTION_CACHING = 32,
- B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION = 64,
- B3_SOLVER_CACHE_FRIENDLY = 128,
- B3_SOLVER_SIMD = 256,
- B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS = 512,
- B3_SOLVER_ALLOW_ZERO_LENGTH_FRICTION_DIRECTIONS = 1024
-};
-
-struct b3ContactSolverInfoData
-{
- b3Scalar m_tau;
- b3Scalar m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
- b3Scalar m_friction;
- b3Scalar m_timeStep;
- b3Scalar m_restitution;
- int m_numIterations;
- b3Scalar m_maxErrorReduction;
- b3Scalar m_sor;
- b3Scalar m_erp; //used as Baumgarte factor
- b3Scalar m_erp2; //used in Split Impulse
- b3Scalar m_globalCfm; //constraint force mixing
- int m_splitImpulse;
- b3Scalar m_splitImpulsePenetrationThreshold;
- b3Scalar m_splitImpulseTurnErp;
- b3Scalar m_linearSlop;
- b3Scalar m_warmstartingFactor;
-
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
- b3Scalar m_maxGyroscopicForce;
- b3Scalar m_singleAxisRollingFrictionThreshold;
-};
-
-struct b3ContactSolverInfo : public b3ContactSolverInfoData
-{
- inline b3ContactSolverInfo()
- {
- m_tau = b3Scalar(0.6);
- m_damping = b3Scalar(1.0);
- m_friction = b3Scalar(0.3);
- m_timeStep = b3Scalar(1.f / 60.f);
- m_restitution = b3Scalar(0.);
- m_maxErrorReduction = b3Scalar(20.);
- m_numIterations = 10;
- m_erp = b3Scalar(0.2);
- m_erp2 = b3Scalar(0.8);
- m_globalCfm = b3Scalar(0.);
- m_sor = b3Scalar(1.);
- m_splitImpulse = true;
- m_splitImpulsePenetrationThreshold = -.04f;
- m_splitImpulseTurnErp = 0.1f;
- m_linearSlop = b3Scalar(0.0);
- m_warmstartingFactor = b3Scalar(0.85);
- //m_solverMode = B3_SOLVER_USE_WARMSTARTING | B3_SOLVER_SIMD | B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION|B3_SOLVER_USE_2_FRICTION_DIRECTIONS|B3_SOLVER_ENABLE_FRICTION_DIRECTION_CACHING;// | B3_SOLVER_RANDMIZE_ORDER;
- m_solverMode = B3_SOLVER_USE_WARMSTARTING | B3_SOLVER_SIMD; // | B3_SOLVER_RANDMIZE_ORDER;
- m_restingContactRestitutionThreshold = 2; //unused as of 2.81
- m_minimumSolverBatchSize = 128; //try to combine islands until the amount of constraints reaches this limit
- m_maxGyroscopicForce = 100.f; ///only used to clamp forces for bodies that have their B3_ENABLE_GYROPSCOPIC_FORCE flag set (using b3RigidBody::setFlag)
- m_singleAxisRollingFrictionThreshold = 1e30f; ///if the velocity is above this threshold, it will use a single constraint row (axis), otherwise 3 rows.
- }
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3ContactSolverInfoDoubleData
-{
- double m_tau;
- double m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
- double m_friction;
- double m_timeStep;
- double m_restitution;
- double m_maxErrorReduction;
- double m_sor;
- double m_erp; //used as Baumgarte factor
- double m_erp2; //used in Split Impulse
- double m_globalCfm; //constraint force mixing
- double m_splitImpulsePenetrationThreshold;
- double m_splitImpulseTurnErp;
- double m_linearSlop;
- double m_warmstartingFactor;
- double m_maxGyroscopicForce;
- double m_singleAxisRollingFrictionThreshold;
-
- int m_numIterations;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
- int m_splitImpulse;
- char m_padding[4];
-};
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3ContactSolverInfoFloatData
-{
- float m_tau;
- float m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
- float m_friction;
- float m_timeStep;
-
- float m_restitution;
- float m_maxErrorReduction;
- float m_sor;
- float m_erp; //used as Baumgarte factor
-
- float m_erp2; //used in Split Impulse
- float m_globalCfm; //constraint force mixing
- float m_splitImpulsePenetrationThreshold;
- float m_splitImpulseTurnErp;
-
- float m_linearSlop;
- float m_warmstartingFactor;
- float m_maxGyroscopicForce;
- float m_singleAxisRollingFrictionThreshold;
-
- int m_numIterations;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
-
- int m_splitImpulse;
- char m_padding[4];
-};
-
-#endif //B3_CONTACT_SOLVER_INFO
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.cpp b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.cpp
deleted file mode 100644
index ace4b18388..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.cpp
+++ /dev/null
@@ -1,103 +0,0 @@
-
-#include "b3FixedConstraint.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Common/b3TransformUtil.h"
-#include <new>
-
-b3FixedConstraint::b3FixedConstraint(int rbA, int rbB, const b3Transform& frameInA, const b3Transform& frameInB)
- : b3TypedConstraint(B3_FIXED_CONSTRAINT_TYPE, rbA, rbB)
-{
- m_pivotInA = frameInA.getOrigin();
- m_pivotInB = frameInB.getOrigin();
- m_relTargetAB = frameInA.getRotation() * frameInB.getRotation().inverse();
-}
-
-b3FixedConstraint::~b3FixedConstraint()
-{
-}
-
-void b3FixedConstraint::getInfo1(b3ConstraintInfo1* info, const b3RigidBodyData* bodies)
-{
- info->m_numConstraintRows = 6;
- info->nub = 6;
-}
-
-void b3FixedConstraint::getInfo2(b3ConstraintInfo2* info, const b3RigidBodyData* bodies)
-{
- //fix the 3 linear degrees of freedom
-
- const b3Vector3& worldPosA = bodies[m_rbA].m_pos;
- const b3Quaternion& worldOrnA = bodies[m_rbA].m_quat;
- const b3Vector3& worldPosB = bodies[m_rbB].m_pos;
- const b3Quaternion& worldOrnB = bodies[m_rbB].m_quat;
-
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[info->rowskip + 1] = 1;
- info->m_J1linearAxis[2 * info->rowskip + 2] = 1;
-
- b3Vector3 a1 = b3QuatRotate(worldOrnA, m_pivotInA);
- {
- b3Vector3* angular0 = (b3Vector3*)(info->m_J1angularAxis);
- b3Vector3* angular1 = (b3Vector3*)(info->m_J1angularAxis + info->rowskip);
- b3Vector3* angular2 = (b3Vector3*)(info->m_J1angularAxis + 2 * info->rowskip);
- b3Vector3 a1neg = -a1;
- a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- if (info->m_J2linearAxis)
- {
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[info->rowskip + 1] = -1;
- info->m_J2linearAxis[2 * info->rowskip + 2] = -1;
- }
-
- b3Vector3 a2 = b3QuatRotate(worldOrnB, m_pivotInB);
-
- {
- // b3Vector3 a2n = -a2;
- b3Vector3* angular0 = (b3Vector3*)(info->m_J2angularAxis);
- b3Vector3* angular1 = (b3Vector3*)(info->m_J2angularAxis + info->rowskip);
- b3Vector3* angular2 = (b3Vector3*)(info->m_J2angularAxis + 2 * info->rowskip);
- a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- // set right hand side for the linear dofs
- b3Scalar k = info->fps * info->erp;
- b3Vector3 linearError = k * (a2 + worldPosB - a1 - worldPosA);
- int j;
- for (j = 0; j < 3; j++)
- {
- info->m_constraintError[j * info->rowskip] = linearError[j];
- //printf("info->m_constraintError[%d]=%f\n",j,info->m_constraintError[j]);
- }
-
- //fix the 3 angular degrees of freedom
-
- int start_row = 3;
- int s = info->rowskip;
- int start_index = start_row * s;
-
- // 3 rows to make body rotations equal
- info->m_J1angularAxis[start_index] = 1;
- info->m_J1angularAxis[start_index + s + 1] = 1;
- info->m_J1angularAxis[start_index + s * 2 + 2] = 1;
- if (info->m_J2angularAxis)
- {
- info->m_J2angularAxis[start_index] = -1;
- info->m_J2angularAxis[start_index + s + 1] = -1;
- info->m_J2angularAxis[start_index + s * 2 + 2] = -1;
- }
-
- // set right hand side for the angular dofs
-
- b3Vector3 diff;
- b3Scalar angle;
- b3Quaternion qrelCur = worldOrnA * worldOrnB.inverse();
-
- b3TransformUtil::calculateDiffAxisAngleQuaternion(m_relTargetAB, qrelCur, diff, angle);
- diff *= -angle;
- for (j = 0; j < 3; j++)
- {
- info->m_constraintError[(3 + j) * info->rowskip] = k * diff[j];
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.h
deleted file mode 100644
index 64809666e4..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3FixedConstraint.h
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#ifndef B3_FIXED_CONSTRAINT_H
-#define B3_FIXED_CONSTRAINT_H
-
-#include "b3TypedConstraint.h"
-
-B3_ATTRIBUTE_ALIGNED16(class)
-b3FixedConstraint : public b3TypedConstraint
-{
- b3Vector3 m_pivotInA;
- b3Vector3 m_pivotInB;
- b3Quaternion m_relTargetAB;
-
-public:
- b3FixedConstraint(int rbA, int rbB, const b3Transform& frameInA, const b3Transform& frameInB);
-
- virtual ~b3FixedConstraint();
-
- virtual void getInfo1(b3ConstraintInfo1 * info, const b3RigidBodyData* bodies);
-
- virtual void getInfo2(b3ConstraintInfo2 * info, const b3RigidBodyData* bodies);
-
- virtual void setParam(int num, b3Scalar value, int axis = -1)
- {
- b3Assert(0);
- }
- virtual b3Scalar getParam(int num, int axis = -1) const
- {
- b3Assert(0);
- return 0.f;
- }
-};
-
-#endif //B3_FIXED_CONSTRAINT_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.cpp b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.cpp
deleted file mode 100644
index 0d5bb2014b..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.cpp
+++ /dev/null
@@ -1,737 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-/*
-2007-09-09
-Refactored by Francisco Le?n
-email: projectileman@yahoo.com
-http://gimpact.sf.net
-*/
-
-#include "b3Generic6DofConstraint.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-#include "Bullet3Common/b3TransformUtil.h"
-#include "Bullet3Common/b3TransformUtil.h"
-#include <new>
-
-#define D6_USE_OBSOLETE_METHOD false
-#define D6_USE_FRAME_OFFSET true
-
-b3Generic6DofConstraint::b3Generic6DofConstraint(int rbA, int rbB, const b3Transform& frameInA, const b3Transform& frameInB, bool useLinearReferenceFrameA, const b3RigidBodyData* bodies)
- : b3TypedConstraint(B3_D6_CONSTRAINT_TYPE, rbA, rbB), m_frameInA(frameInA), m_frameInB(frameInB), m_useLinearReferenceFrameA(useLinearReferenceFrameA), m_useOffsetForConstraintFrame(D6_USE_FRAME_OFFSET), m_flags(0)
-{
- calculateTransforms(bodies);
-}
-
-#define GENERIC_D6_DISABLE_WARMSTARTING 1
-
-b3Scalar btGetMatrixElem(const b3Matrix3x3& mat, int index);
-b3Scalar btGetMatrixElem(const b3Matrix3x3& mat, int index)
-{
- int i = index % 3;
- int j = index / 3;
- return mat[i][j];
-}
-
-///MatrixToEulerXYZ from http://www.geometrictools.com/LibFoundation/Mathematics/Wm4Matrix3.inl.html
-bool matrixToEulerXYZ(const b3Matrix3x3& mat, b3Vector3& xyz);
-bool matrixToEulerXYZ(const b3Matrix3x3& mat, b3Vector3& xyz)
-{
- // // rot = cy*cz -cy*sz sy
- // // cz*sx*sy+cx*sz cx*cz-sx*sy*sz -cy*sx
- // // -cx*cz*sy+sx*sz cz*sx+cx*sy*sz cx*cy
- //
-
- b3Scalar fi = btGetMatrixElem(mat, 2);
- if (fi < b3Scalar(1.0f))
- {
- if (fi > b3Scalar(-1.0f))
- {
- xyz[0] = b3Atan2(-btGetMatrixElem(mat, 5), btGetMatrixElem(mat, 8));
- xyz[1] = b3Asin(btGetMatrixElem(mat, 2));
- xyz[2] = b3Atan2(-btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 0));
- return true;
- }
- else
- {
- // WARNING. Not unique. XA - ZA = -atan2(r10,r11)
- xyz[0] = -b3Atan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- xyz[1] = -B3_HALF_PI;
- xyz[2] = b3Scalar(0.0);
- return false;
- }
- }
- else
- {
- // WARNING. Not unique. XAngle + ZAngle = atan2(r10,r11)
- xyz[0] = b3Atan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- xyz[1] = B3_HALF_PI;
- xyz[2] = 0.0;
- }
- return false;
-}
-
-//////////////////////////// b3RotationalLimitMotor ////////////////////////////////////
-
-int b3RotationalLimitMotor::testLimitValue(b3Scalar test_value)
-{
- if (m_loLimit > m_hiLimit)
- {
- m_currentLimit = 0; //Free from violation
- return 0;
- }
- if (test_value < m_loLimit)
- {
- m_currentLimit = 1; //low limit violation
- m_currentLimitError = test_value - m_loLimit;
- if (m_currentLimitError > B3_PI)
- m_currentLimitError -= B3_2_PI;
- else if (m_currentLimitError < -B3_PI)
- m_currentLimitError += B3_2_PI;
- return 1;
- }
- else if (test_value > m_hiLimit)
- {
- m_currentLimit = 2; //High limit violation
- m_currentLimitError = test_value - m_hiLimit;
- if (m_currentLimitError > B3_PI)
- m_currentLimitError -= B3_2_PI;
- else if (m_currentLimitError < -B3_PI)
- m_currentLimitError += B3_2_PI;
- return 2;
- };
-
- m_currentLimit = 0; //Free from violation
- return 0;
-}
-
-//////////////////////////// End b3RotationalLimitMotor ////////////////////////////////////
-
-//////////////////////////// b3TranslationalLimitMotor ////////////////////////////////////
-
-int b3TranslationalLimitMotor::testLimitValue(int limitIndex, b3Scalar test_value)
-{
- b3Scalar loLimit = m_lowerLimit[limitIndex];
- b3Scalar hiLimit = m_upperLimit[limitIndex];
- if (loLimit > hiLimit)
- {
- m_currentLimit[limitIndex] = 0; //Free from violation
- m_currentLimitError[limitIndex] = b3Scalar(0.f);
- return 0;
- }
-
- if (test_value < loLimit)
- {
- m_currentLimit[limitIndex] = 2; //low limit violation
- m_currentLimitError[limitIndex] = test_value - loLimit;
- return 2;
- }
- else if (test_value > hiLimit)
- {
- m_currentLimit[limitIndex] = 1; //High limit violation
- m_currentLimitError[limitIndex] = test_value - hiLimit;
- return 1;
- };
-
- m_currentLimit[limitIndex] = 0; //Free from violation
- m_currentLimitError[limitIndex] = b3Scalar(0.f);
- return 0;
-}
-
-//////////////////////////// b3TranslationalLimitMotor ////////////////////////////////////
-
-void b3Generic6DofConstraint::calculateAngleInfo()
-{
- b3Matrix3x3 relative_frame = m_calculatedTransformA.getBasis().inverse() * m_calculatedTransformB.getBasis();
- matrixToEulerXYZ(relative_frame, m_calculatedAxisAngleDiff);
- // in euler angle mode we do not actually constrain the angular velocity
- // along the axes axis[0] and axis[2] (although we do use axis[1]) :
- //
- // to get constrain w2-w1 along ...not
- // ------ --------------------- ------
- // d(angle[0])/dt = 0 ax[1] x ax[2] ax[0]
- // d(angle[1])/dt = 0 ax[1]
- // d(angle[2])/dt = 0 ax[0] x ax[1] ax[2]
- //
- // constraining w2-w1 along an axis 'a' means that a'*(w2-w1)=0.
- // to prove the result for angle[0], write the expression for angle[0] from
- // GetInfo1 then take the derivative. to prove this for angle[2] it is
- // easier to take the euler rate expression for d(angle[2])/dt with respect
- // to the components of w and set that to 0.
- b3Vector3 axis0 = m_calculatedTransformB.getBasis().getColumn(0);
- b3Vector3 axis2 = m_calculatedTransformA.getBasis().getColumn(2);
-
- m_calculatedAxis[1] = axis2.cross(axis0);
- m_calculatedAxis[0] = m_calculatedAxis[1].cross(axis2);
- m_calculatedAxis[2] = axis0.cross(m_calculatedAxis[1]);
-
- m_calculatedAxis[0].normalize();
- m_calculatedAxis[1].normalize();
- m_calculatedAxis[2].normalize();
-}
-
-static b3Transform getCenterOfMassTransform(const b3RigidBodyData& body)
-{
- b3Transform tr(body.m_quat, body.m_pos);
- return tr;
-}
-
-void b3Generic6DofConstraint::calculateTransforms(const b3RigidBodyData* bodies)
-{
- b3Transform transA;
- b3Transform transB;
- transA = getCenterOfMassTransform(bodies[m_rbA]);
- transB = getCenterOfMassTransform(bodies[m_rbB]);
- calculateTransforms(transA, transB, bodies);
-}
-
-void b3Generic6DofConstraint::calculateTransforms(const b3Transform& transA, const b3Transform& transB, const b3RigidBodyData* bodies)
-{
- m_calculatedTransformA = transA * m_frameInA;
- m_calculatedTransformB = transB * m_frameInB;
- calculateLinearInfo();
- calculateAngleInfo();
- if (m_useOffsetForConstraintFrame)
- { // get weight factors depending on masses
- b3Scalar miA = bodies[m_rbA].m_invMass;
- b3Scalar miB = bodies[m_rbB].m_invMass;
- m_hasStaticBody = (miA < B3_EPSILON) || (miB < B3_EPSILON);
- b3Scalar miS = miA + miB;
- if (miS > b3Scalar(0.f))
- {
- m_factA = miB / miS;
- }
- else
- {
- m_factA = b3Scalar(0.5f);
- }
- m_factB = b3Scalar(1.0f) - m_factA;
- }
-}
-
-bool b3Generic6DofConstraint::testAngularLimitMotor(int axis_index)
-{
- b3Scalar angle = m_calculatedAxisAngleDiff[axis_index];
- angle = b3AdjustAngleToLimits(angle, m_angularLimits[axis_index].m_loLimit, m_angularLimits[axis_index].m_hiLimit);
- m_angularLimits[axis_index].m_currentPosition = angle;
- //test limits
- m_angularLimits[axis_index].testLimitValue(angle);
- return m_angularLimits[axis_index].needApplyTorques();
-}
-
-void b3Generic6DofConstraint::getInfo1(b3ConstraintInfo1* info, const b3RigidBodyData* bodies)
-{
- //prepare constraint
- calculateTransforms(getCenterOfMassTransform(bodies[m_rbA]), getCenterOfMassTransform(bodies[m_rbB]), bodies);
- info->m_numConstraintRows = 0;
- info->nub = 6;
- int i;
- //test linear limits
- for (i = 0; i < 3; i++)
- {
- if (m_linearLimits.needApplyForce(i))
- {
- info->m_numConstraintRows++;
- info->nub--;
- }
- }
- //test angular limits
- for (i = 0; i < 3; i++)
- {
- if (testAngularLimitMotor(i))
- {
- info->m_numConstraintRows++;
- info->nub--;
- }
- }
- // printf("info->m_numConstraintRows=%d\n",info->m_numConstraintRows);
-}
-
-void b3Generic6DofConstraint::getInfo1NonVirtual(b3ConstraintInfo1* info, const b3RigidBodyData* bodies)
-{
- //pre-allocate all 6
- info->m_numConstraintRows = 6;
- info->nub = 0;
-}
-
-void b3Generic6DofConstraint::getInfo2(b3ConstraintInfo2* info, const b3RigidBodyData* bodies)
-{
- b3Transform transA = getCenterOfMassTransform(bodies[m_rbA]);
- b3Transform transB = getCenterOfMassTransform(bodies[m_rbB]);
- const b3Vector3& linVelA = bodies[m_rbA].m_linVel;
- const b3Vector3& linVelB = bodies[m_rbB].m_linVel;
- const b3Vector3& angVelA = bodies[m_rbA].m_angVel;
- const b3Vector3& angVelB = bodies[m_rbB].m_angVel;
-
- if (m_useOffsetForConstraintFrame)
- { // for stability better to solve angular limits first
- int row = setAngularLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setLinearLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
- else
- { // leave old version for compatibility
- int row = setLinearLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setAngularLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
-}
-
-void b3Generic6DofConstraint::getInfo2NonVirtual(b3ConstraintInfo2* info, const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB, const b3RigidBodyData* bodies)
-{
- //prepare constraint
- calculateTransforms(transA, transB, bodies);
-
- int i;
- for (i = 0; i < 3; i++)
- {
- testAngularLimitMotor(i);
- }
-
- if (m_useOffsetForConstraintFrame)
- { // for stability better to solve angular limits first
- int row = setAngularLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setLinearLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
- else
- { // leave old version for compatibility
- int row = setLinearLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setAngularLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
-}
-
-int b3Generic6DofConstraint::setLinearLimits(b3ConstraintInfo2* info, int row, const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB)
-{
- // int row = 0;
- //solve linear limits
- b3RotationalLimitMotor limot;
- for (int i = 0; i < 3; i++)
- {
- if (m_linearLimits.needApplyForce(i))
- { // re-use rotational motor code
- limot.m_bounce = b3Scalar(0.f);
- limot.m_currentLimit = m_linearLimits.m_currentLimit[i];
- limot.m_currentPosition = m_linearLimits.m_currentLinearDiff[i];
- limot.m_currentLimitError = m_linearLimits.m_currentLimitError[i];
- limot.m_damping = m_linearLimits.m_damping;
- limot.m_enableMotor = m_linearLimits.m_enableMotor[i];
- limot.m_hiLimit = m_linearLimits.m_upperLimit[i];
- limot.m_limitSoftness = m_linearLimits.m_limitSoftness;
- limot.m_loLimit = m_linearLimits.m_lowerLimit[i];
- limot.m_maxLimitForce = b3Scalar(0.f);
- limot.m_maxMotorForce = m_linearLimits.m_maxMotorForce[i];
- limot.m_targetVelocity = m_linearLimits.m_targetVelocity[i];
- b3Vector3 axis = m_calculatedTransformA.getBasis().getColumn(i);
- int flags = m_flags >> (i * B3_6DOF_FLAGS_AXIS_SHIFT);
- limot.m_normalCFM = (flags & B3_6DOF_FLAGS_CFM_NORM) ? m_linearLimits.m_normalCFM[i] : info->cfm[0];
- limot.m_stopCFM = (flags & B3_6DOF_FLAGS_CFM_STOP) ? m_linearLimits.m_stopCFM[i] : info->cfm[0];
- limot.m_stopERP = (flags & B3_6DOF_FLAGS_ERP_STOP) ? m_linearLimits.m_stopERP[i] : info->erp;
- if (m_useOffsetForConstraintFrame)
- {
- int indx1 = (i + 1) % 3;
- int indx2 = (i + 2) % 3;
- int rotAllowed = 1; // rotations around orthos to current axis
- if (m_angularLimits[indx1].m_currentLimit && m_angularLimits[indx2].m_currentLimit)
- {
- rotAllowed = 0;
- }
- row += get_limit_motor_info2(&limot, transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 0, rotAllowed);
- }
- else
- {
- row += get_limit_motor_info2(&limot, transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 0);
- }
- }
- }
- return row;
-}
-
-int b3Generic6DofConstraint::setAngularLimits(b3ConstraintInfo2* info, int row_offset, const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB)
-{
- b3Generic6DofConstraint* d6constraint = this;
- int row = row_offset;
- //solve angular limits
- for (int i = 0; i < 3; i++)
- {
- if (d6constraint->getRotationalLimitMotor(i)->needApplyTorques())
- {
- b3Vector3 axis = d6constraint->getAxis(i);
- int flags = m_flags >> ((i + 3) * B3_6DOF_FLAGS_AXIS_SHIFT);
- if (!(flags & B3_6DOF_FLAGS_CFM_NORM))
- {
- m_angularLimits[i].m_normalCFM = info->cfm[0];
- }
- if (!(flags & B3_6DOF_FLAGS_CFM_STOP))
- {
- m_angularLimits[i].m_stopCFM = info->cfm[0];
- }
- if (!(flags & B3_6DOF_FLAGS_ERP_STOP))
- {
- m_angularLimits[i].m_stopERP = info->erp;
- }
- row += get_limit_motor_info2(d6constraint->getRotationalLimitMotor(i),
- transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 1);
- }
- }
-
- return row;
-}
-
-void b3Generic6DofConstraint::updateRHS(b3Scalar timeStep)
-{
- (void)timeStep;
-}
-
-void b3Generic6DofConstraint::setFrames(const b3Transform& frameA, const b3Transform& frameB, const b3RigidBodyData* bodies)
-{
- m_frameInA = frameA;
- m_frameInB = frameB;
-
- calculateTransforms(bodies);
-}
-
-b3Vector3 b3Generic6DofConstraint::getAxis(int axis_index) const
-{
- return m_calculatedAxis[axis_index];
-}
-
-b3Scalar b3Generic6DofConstraint::getRelativePivotPosition(int axisIndex) const
-{
- return m_calculatedLinearDiff[axisIndex];
-}
-
-b3Scalar b3Generic6DofConstraint::getAngle(int axisIndex) const
-{
- return m_calculatedAxisAngleDiff[axisIndex];
-}
-
-void b3Generic6DofConstraint::calcAnchorPos(const b3RigidBodyData* bodies)
-{
- b3Scalar imA = bodies[m_rbA].m_invMass;
- b3Scalar imB = bodies[m_rbB].m_invMass;
- b3Scalar weight;
- if (imB == b3Scalar(0.0))
- {
- weight = b3Scalar(1.0);
- }
- else
- {
- weight = imA / (imA + imB);
- }
- const b3Vector3& pA = m_calculatedTransformA.getOrigin();
- const b3Vector3& pB = m_calculatedTransformB.getOrigin();
- m_AnchorPos = pA * weight + pB * (b3Scalar(1.0) - weight);
- return;
-}
-
-void b3Generic6DofConstraint::calculateLinearInfo()
-{
- m_calculatedLinearDiff = m_calculatedTransformB.getOrigin() - m_calculatedTransformA.getOrigin();
- m_calculatedLinearDiff = m_calculatedTransformA.getBasis().inverse() * m_calculatedLinearDiff;
- for (int i = 0; i < 3; i++)
- {
- m_linearLimits.m_currentLinearDiff[i] = m_calculatedLinearDiff[i];
- m_linearLimits.testLimitValue(i, m_calculatedLinearDiff[i]);
- }
-}
-
-int b3Generic6DofConstraint::get_limit_motor_info2(
- b3RotationalLimitMotor* limot,
- const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB,
- b3ConstraintInfo2* info, int row, b3Vector3& ax1, int rotational, int rotAllowed)
-{
- int srow = row * info->rowskip;
- bool powered = limot->m_enableMotor;
- int limit = limot->m_currentLimit;
- if (powered || limit)
- { // if the joint is powered, or has joint limits, add in the extra row
- b3Scalar* J1 = rotational ? info->m_J1angularAxis : info->m_J1linearAxis;
- b3Scalar* J2 = rotational ? info->m_J2angularAxis : info->m_J2linearAxis;
- if (J1)
- {
- J1[srow + 0] = ax1[0];
- J1[srow + 1] = ax1[1];
- J1[srow + 2] = ax1[2];
- }
- if (J2)
- {
- J2[srow + 0] = -ax1[0];
- J2[srow + 1] = -ax1[1];
- J2[srow + 2] = -ax1[2];
- }
- if ((!rotational))
- {
- if (m_useOffsetForConstraintFrame)
- {
- b3Vector3 tmpA, tmpB, relA, relB;
- // get vector from bodyB to frameB in WCS
- relB = m_calculatedTransformB.getOrigin() - transB.getOrigin();
- // get its projection to constraint axis
- b3Vector3 projB = ax1 * relB.dot(ax1);
- // get vector directed from bodyB to constraint axis (and orthogonal to it)
- b3Vector3 orthoB = relB - projB;
- // same for bodyA
- relA = m_calculatedTransformA.getOrigin() - transA.getOrigin();
- b3Vector3 projA = ax1 * relA.dot(ax1);
- b3Vector3 orthoA = relA - projA;
- // get desired offset between frames A and B along constraint axis
- b3Scalar desiredOffs = limot->m_currentPosition - limot->m_currentLimitError;
- // desired vector from projection of center of bodyA to projection of center of bodyB to constraint axis
- b3Vector3 totalDist = projA + ax1 * desiredOffs - projB;
- // get offset vectors relA and relB
- relA = orthoA + totalDist * m_factA;
- relB = orthoB - totalDist * m_factB;
- tmpA = relA.cross(ax1);
- tmpB = relB.cross(ax1);
- if (m_hasStaticBody && (!rotAllowed))
- {
- tmpA *= m_factA;
- tmpB *= m_factB;
- }
- int i;
- for (i = 0; i < 3; i++) info->m_J1angularAxis[srow + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[srow + i] = -tmpB[i];
- }
- else
- {
- b3Vector3 ltd; // Linear Torque Decoupling vector
- b3Vector3 c = m_calculatedTransformB.getOrigin() - transA.getOrigin();
- ltd = c.cross(ax1);
- info->m_J1angularAxis[srow + 0] = ltd[0];
- info->m_J1angularAxis[srow + 1] = ltd[1];
- info->m_J1angularAxis[srow + 2] = ltd[2];
-
- c = m_calculatedTransformB.getOrigin() - transB.getOrigin();
- ltd = -c.cross(ax1);
- info->m_J2angularAxis[srow + 0] = ltd[0];
- info->m_J2angularAxis[srow + 1] = ltd[1];
- info->m_J2angularAxis[srow + 2] = ltd[2];
- }
- }
- // if we're limited low and high simultaneously, the joint motor is
- // ineffective
- if (limit && (limot->m_loLimit == limot->m_hiLimit)) powered = false;
- info->m_constraintError[srow] = b3Scalar(0.f);
- if (powered)
- {
- info->cfm[srow] = limot->m_normalCFM;
- if (!limit)
- {
- b3Scalar tag_vel = rotational ? limot->m_targetVelocity : -limot->m_targetVelocity;
-
- b3Scalar mot_fact = getMotorFactor(limot->m_currentPosition,
- limot->m_loLimit,
- limot->m_hiLimit,
- tag_vel,
- info->fps * limot->m_stopERP);
- info->m_constraintError[srow] += mot_fact * limot->m_targetVelocity;
- info->m_lowerLimit[srow] = -limot->m_maxMotorForce / info->fps;
- info->m_upperLimit[srow] = limot->m_maxMotorForce / info->fps;
- }
- }
- if (limit)
- {
- b3Scalar k = info->fps * limot->m_stopERP;
- if (!rotational)
- {
- info->m_constraintError[srow] += k * limot->m_currentLimitError;
- }
- else
- {
- info->m_constraintError[srow] += -k * limot->m_currentLimitError;
- }
- info->cfm[srow] = limot->m_stopCFM;
- if (limot->m_loLimit == limot->m_hiLimit)
- { // limited low and high simultaneously
- info->m_lowerLimit[srow] = -B3_INFINITY;
- info->m_upperLimit[srow] = B3_INFINITY;
- }
- else
- {
- if (limit == 1)
- {
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = B3_INFINITY;
- }
- else
- {
- info->m_lowerLimit[srow] = -B3_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- // deal with bounce
- if (limot->m_bounce > 0)
- {
- // calculate joint velocity
- b3Scalar vel;
- if (rotational)
- {
- vel = angVelA.dot(ax1);
- //make sure that if no body -> angVelB == zero vec
- // if (body1)
- vel -= angVelB.dot(ax1);
- }
- else
- {
- vel = linVelA.dot(ax1);
- //make sure that if no body -> angVelB == zero vec
- // if (body1)
- vel -= linVelB.dot(ax1);
- }
- // only apply bounce if the velocity is incoming, and if the
- // resulting c[] exceeds what we already have.
- if (limit == 1)
- {
- if (vel < 0)
- {
- b3Scalar newc = -limot->m_bounce * vel;
- if (newc > info->m_constraintError[srow])
- info->m_constraintError[srow] = newc;
- }
- }
- else
- {
- if (vel > 0)
- {
- b3Scalar newc = -limot->m_bounce * vel;
- if (newc < info->m_constraintError[srow])
- info->m_constraintError[srow] = newc;
- }
- }
- }
- }
- }
- return 1;
- }
- else
- return 0;
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void b3Generic6DofConstraint::setParam(int num, b3Scalar value, int axis)
-{
- if ((axis >= 0) && (axis < 3))
- {
- switch (num)
- {
- case B3_CONSTRAINT_STOP_ERP:
- m_linearLimits.m_stopERP[axis] = value;
- m_flags |= B3_6DOF_FLAGS_ERP_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case B3_CONSTRAINT_STOP_CFM:
- m_linearLimits.m_stopCFM[axis] = value;
- m_flags |= B3_6DOF_FLAGS_CFM_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case B3_CONSTRAINT_CFM:
- m_linearLimits.m_normalCFM[axis] = value;
- m_flags |= B3_6DOF_FLAGS_CFM_NORM << (axis * B3_6DOF_FLAGS_AXIS_SHIFT);
- break;
- default:
- b3AssertConstrParams(0);
- }
- }
- else if ((axis >= 3) && (axis < 6))
- {
- switch (num)
- {
- case B3_CONSTRAINT_STOP_ERP:
- m_angularLimits[axis - 3].m_stopERP = value;
- m_flags |= B3_6DOF_FLAGS_ERP_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case B3_CONSTRAINT_STOP_CFM:
- m_angularLimits[axis - 3].m_stopCFM = value;
- m_flags |= B3_6DOF_FLAGS_CFM_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case B3_CONSTRAINT_CFM:
- m_angularLimits[axis - 3].m_normalCFM = value;
- m_flags |= B3_6DOF_FLAGS_CFM_NORM << (axis * B3_6DOF_FLAGS_AXIS_SHIFT);
- break;
- default:
- b3AssertConstrParams(0);
- }
- }
- else
- {
- b3AssertConstrParams(0);
- }
-}
-
-///return the local value of parameter
-b3Scalar b3Generic6DofConstraint::getParam(int num, int axis) const
-{
- b3Scalar retVal = 0;
- if ((axis >= 0) && (axis < 3))
- {
- switch (num)
- {
- case B3_CONSTRAINT_STOP_ERP:
- b3AssertConstrParams(m_flags & (B3_6DOF_FLAGS_ERP_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_linearLimits.m_stopERP[axis];
- break;
- case B3_CONSTRAINT_STOP_CFM:
- b3AssertConstrParams(m_flags & (B3_6DOF_FLAGS_CFM_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_linearLimits.m_stopCFM[axis];
- break;
- case B3_CONSTRAINT_CFM:
- b3AssertConstrParams(m_flags & (B3_6DOF_FLAGS_CFM_NORM << (axis * B3_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_linearLimits.m_normalCFM[axis];
- break;
- default:
- b3AssertConstrParams(0);
- }
- }
- else if ((axis >= 3) && (axis < 6))
- {
- switch (num)
- {
- case B3_CONSTRAINT_STOP_ERP:
- b3AssertConstrParams(m_flags & (B3_6DOF_FLAGS_ERP_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_angularLimits[axis - 3].m_stopERP;
- break;
- case B3_CONSTRAINT_STOP_CFM:
- b3AssertConstrParams(m_flags & (B3_6DOF_FLAGS_CFM_STOP << (axis * B3_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_angularLimits[axis - 3].m_stopCFM;
- break;
- case B3_CONSTRAINT_CFM:
- b3AssertConstrParams(m_flags & (B3_6DOF_FLAGS_CFM_NORM << (axis * B3_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_angularLimits[axis - 3].m_normalCFM;
- break;
- default:
- b3AssertConstrParams(0);
- }
- }
- else
- {
- b3AssertConstrParams(0);
- }
- return retVal;
-}
-
-void b3Generic6DofConstraint::setAxis(const b3Vector3& axis1, const b3Vector3& axis2, const b3RigidBodyData* bodies)
-{
- b3Vector3 zAxis = axis1.normalized();
- b3Vector3 yAxis = axis2.normalized();
- b3Vector3 xAxis = yAxis.cross(zAxis); // we want right coordinate system
-
- b3Transform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
-
- // now get constraint frame in local coordinate systems
- m_frameInA = getCenterOfMassTransform(bodies[m_rbA]).inverse() * frameInW;
- m_frameInB = getCenterOfMassTransform(bodies[m_rbB]).inverse() * frameInW;
-
- calculateTransforms(bodies);
-}
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.h
deleted file mode 100644
index 1597809db3..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Generic6DofConstraint.h
+++ /dev/null
@@ -1,517 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/// 2009 March: b3Generic6DofConstraint refactored by Roman Ponomarev
-/// Added support for generic constraint solver through getInfo1/getInfo2 methods
-
-/*
-2007-09-09
-b3Generic6DofConstraint Refactored by Francisco Le?n
-email: projectileman@yahoo.com
-http://gimpact.sf.net
-*/
-
-#ifndef B3_GENERIC_6DOF_CONSTRAINT_H
-#define B3_GENERIC_6DOF_CONSTRAINT_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "b3JacobianEntry.h"
-#include "b3TypedConstraint.h"
-
-struct b3RigidBodyData;
-
-//! Rotation Limit structure for generic joints
-class b3RotationalLimitMotor
-{
-public:
- //! limit_parameters
- //!@{
- b3Scalar m_loLimit; //!< joint limit
- b3Scalar m_hiLimit; //!< joint limit
- b3Scalar m_targetVelocity; //!< target motor velocity
- b3Scalar m_maxMotorForce; //!< max force on motor
- b3Scalar m_maxLimitForce; //!< max force on limit
- b3Scalar m_damping; //!< Damping.
- b3Scalar m_limitSoftness; //! Relaxation factor
- b3Scalar m_normalCFM; //!< Constraint force mixing factor
- b3Scalar m_stopERP; //!< Error tolerance factor when joint is at limit
- b3Scalar m_stopCFM; //!< Constraint force mixing factor when joint is at limit
- b3Scalar m_bounce; //!< restitution factor
- bool m_enableMotor;
-
- //!@}
-
- //! temp_variables
- //!@{
- b3Scalar m_currentLimitError; //! How much is violated this limit
- b3Scalar m_currentPosition; //! current value of angle
- int m_currentLimit; //!< 0=free, 1=at lo limit, 2=at hi limit
- b3Scalar m_accumulatedImpulse;
- //!@}
-
- b3RotationalLimitMotor()
- {
- m_accumulatedImpulse = 0.f;
- m_targetVelocity = 0;
- m_maxMotorForce = 6.0f;
- m_maxLimitForce = 300.0f;
- m_loLimit = 1.0f;
- m_hiLimit = -1.0f;
- m_normalCFM = 0.f;
- m_stopERP = 0.2f;
- m_stopCFM = 0.f;
- m_bounce = 0.0f;
- m_damping = 1.0f;
- m_limitSoftness = 0.5f;
- m_currentLimit = 0;
- m_currentLimitError = 0;
- m_enableMotor = false;
- }
-
- b3RotationalLimitMotor(const b3RotationalLimitMotor& limot)
- {
- m_targetVelocity = limot.m_targetVelocity;
- m_maxMotorForce = limot.m_maxMotorForce;
- m_limitSoftness = limot.m_limitSoftness;
- m_loLimit = limot.m_loLimit;
- m_hiLimit = limot.m_hiLimit;
- m_normalCFM = limot.m_normalCFM;
- m_stopERP = limot.m_stopERP;
- m_stopCFM = limot.m_stopCFM;
- m_bounce = limot.m_bounce;
- m_currentLimit = limot.m_currentLimit;
- m_currentLimitError = limot.m_currentLimitError;
- m_enableMotor = limot.m_enableMotor;
- }
-
- //! Is limited
- bool isLimited()
- {
- if (m_loLimit > m_hiLimit) return false;
- return true;
- }
-
- //! Need apply correction
- bool needApplyTorques()
- {
- if (m_currentLimit == 0 && m_enableMotor == false) return false;
- return true;
- }
-
- //! calculates error
- /*!
- calculates m_currentLimit and m_currentLimitError.
- */
- int testLimitValue(b3Scalar test_value);
-
- //! apply the correction impulses for two bodies
- b3Scalar solveAngularLimits(b3Scalar timeStep, b3Vector3& axis, b3Scalar jacDiagABInv, b3RigidBodyData* body0, b3RigidBodyData* body1);
-};
-
-class b3TranslationalLimitMotor
-{
-public:
- b3Vector3 m_lowerLimit; //!< the constraint lower limits
- b3Vector3 m_upperLimit; //!< the constraint upper limits
- b3Vector3 m_accumulatedImpulse;
- //! Linear_Limit_parameters
- //!@{
- b3Vector3 m_normalCFM; //!< Constraint force mixing factor
- b3Vector3 m_stopERP; //!< Error tolerance factor when joint is at limit
- b3Vector3 m_stopCFM; //!< Constraint force mixing factor when joint is at limit
- b3Vector3 m_targetVelocity; //!< target motor velocity
- b3Vector3 m_maxMotorForce; //!< max force on motor
- b3Vector3 m_currentLimitError; //! How much is violated this limit
- b3Vector3 m_currentLinearDiff; //! Current relative offset of constraint frames
- b3Scalar m_limitSoftness; //!< Softness for linear limit
- b3Scalar m_damping; //!< Damping for linear limit
- b3Scalar m_restitution; //! Bounce parameter for linear limit
- //!@}
- bool m_enableMotor[3];
- int m_currentLimit[3]; //!< 0=free, 1=at lower limit, 2=at upper limit
-
- b3TranslationalLimitMotor()
- {
- m_lowerLimit.setValue(0.f, 0.f, 0.f);
- m_upperLimit.setValue(0.f, 0.f, 0.f);
- m_accumulatedImpulse.setValue(0.f, 0.f, 0.f);
- m_normalCFM.setValue(0.f, 0.f, 0.f);
- m_stopERP.setValue(0.2f, 0.2f, 0.2f);
- m_stopCFM.setValue(0.f, 0.f, 0.f);
-
- m_limitSoftness = 0.7f;
- m_damping = b3Scalar(1.0f);
- m_restitution = b3Scalar(0.5f);
- for (int i = 0; i < 3; i++)
- {
- m_enableMotor[i] = false;
- m_targetVelocity[i] = b3Scalar(0.f);
- m_maxMotorForce[i] = b3Scalar(0.f);
- }
- }
-
- b3TranslationalLimitMotor(const b3TranslationalLimitMotor& other)
- {
- m_lowerLimit = other.m_lowerLimit;
- m_upperLimit = other.m_upperLimit;
- m_accumulatedImpulse = other.m_accumulatedImpulse;
-
- m_limitSoftness = other.m_limitSoftness;
- m_damping = other.m_damping;
- m_restitution = other.m_restitution;
- m_normalCFM = other.m_normalCFM;
- m_stopERP = other.m_stopERP;
- m_stopCFM = other.m_stopCFM;
-
- for (int i = 0; i < 3; i++)
- {
- m_enableMotor[i] = other.m_enableMotor[i];
- m_targetVelocity[i] = other.m_targetVelocity[i];
- m_maxMotorForce[i] = other.m_maxMotorForce[i];
- }
- }
-
- //! Test limit
- /*!
- - free means upper < lower,
- - locked means upper == lower
- - limited means upper > lower
- - limitIndex: first 3 are linear, next 3 are angular
- */
- inline bool isLimited(int limitIndex)
- {
- return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]);
- }
- inline bool needApplyForce(int limitIndex)
- {
- if (m_currentLimit[limitIndex] == 0 && m_enableMotor[limitIndex] == false) return false;
- return true;
- }
- int testLimitValue(int limitIndex, b3Scalar test_value);
-
- b3Scalar solveLinearAxis(
- b3Scalar timeStep,
- b3Scalar jacDiagABInv,
- b3RigidBodyData& body1, const b3Vector3& pointInA,
- b3RigidBodyData& body2, const b3Vector3& pointInB,
- int limit_index,
- const b3Vector3& axis_normal_on_a,
- const b3Vector3& anchorPos);
-};
-
-enum b36DofFlags
-{
- B3_6DOF_FLAGS_CFM_NORM = 1,
- B3_6DOF_FLAGS_CFM_STOP = 2,
- B3_6DOF_FLAGS_ERP_STOP = 4
-};
-#define B3_6DOF_FLAGS_AXIS_SHIFT 3 // bits per axis
-
-/// b3Generic6DofConstraint between two rigidbodies each with a pivotpoint that descibes the axis location in local space
-/*!
-b3Generic6DofConstraint can leave any of the 6 degree of freedom 'free' or 'locked'.
-currently this limit supports rotational motors<br>
-<ul>
-<li> For Linear limits, use b3Generic6DofConstraint.setLinearUpperLimit, b3Generic6DofConstraint.setLinearLowerLimit. You can set the parameters with the b3TranslationalLimitMotor structure accsesible through the b3Generic6DofConstraint.getTranslationalLimitMotor method.
-At this moment translational motors are not supported. May be in the future. </li>
-
-<li> For Angular limits, use the b3RotationalLimitMotor structure for configuring the limit.
-This is accessible through b3Generic6DofConstraint.getLimitMotor method,
-This brings support for limit parameters and motors. </li>
-
-<li> Angulars limits have these possible ranges:
-<table border=1 >
-<tr>
- <td><b>AXIS</b></td>
- <td><b>MIN ANGLE</b></td>
- <td><b>MAX ANGLE</b></td>
-</tr><tr>
- <td>X</td>
- <td>-PI</td>
- <td>PI</td>
-</tr><tr>
- <td>Y</td>
- <td>-PI/2</td>
- <td>PI/2</td>
-</tr><tr>
- <td>Z</td>
- <td>-PI</td>
- <td>PI</td>
-</tr>
-</table>
-</li>
-</ul>
-
-*/
-B3_ATTRIBUTE_ALIGNED16(class)
-b3Generic6DofConstraint : public b3TypedConstraint
-{
-protected:
- //! relative_frames
- //!@{
- b3Transform m_frameInA; //!< the constraint space w.r.t body A
- b3Transform m_frameInB; //!< the constraint space w.r.t body B
- //!@}
-
- //! Jacobians
- //!@{
- // b3JacobianEntry m_jacLinear[3];//!< 3 orthogonal linear constraints
- // b3JacobianEntry m_jacAng[3];//!< 3 orthogonal angular constraints
- //!@}
-
- //! Linear_Limit_parameters
- //!@{
- b3TranslationalLimitMotor m_linearLimits;
- //!@}
-
- //! hinge_parameters
- //!@{
- b3RotationalLimitMotor m_angularLimits[3];
- //!@}
-
-protected:
- //! temporal variables
- //!@{
- b3Transform m_calculatedTransformA;
- b3Transform m_calculatedTransformB;
- b3Vector3 m_calculatedAxisAngleDiff;
- b3Vector3 m_calculatedAxis[3];
- b3Vector3 m_calculatedLinearDiff;
- b3Scalar m_timeStep;
- b3Scalar m_factA;
- b3Scalar m_factB;
- bool m_hasStaticBody;
-
- b3Vector3 m_AnchorPos; // point betwen pivots of bodies A and B to solve linear axes
-
- bool m_useLinearReferenceFrameA;
- bool m_useOffsetForConstraintFrame;
-
- int m_flags;
-
- //!@}
-
- b3Generic6DofConstraint& operator=(b3Generic6DofConstraint& other)
- {
- b3Assert(0);
- (void)other;
- return *this;
- }
-
- int setAngularLimits(b3ConstraintInfo2 * info, int row_offset, const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB);
-
- int setLinearLimits(b3ConstraintInfo2 * info, int row, const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB);
-
- // tests linear limits
- void calculateLinearInfo();
-
- //! calcs the euler angles between the two bodies.
- void calculateAngleInfo();
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3Generic6DofConstraint(int rbA, int rbB, const b3Transform& frameInA, const b3Transform& frameInB, bool useLinearReferenceFrameA, const b3RigidBodyData* bodies);
-
- //! Calcs global transform of the offsets
- /*!
- Calcs the global transform for the joint offset for body A an B, and also calcs the agle differences between the bodies.
- \sa b3Generic6DofConstraint.getCalculatedTransformA , b3Generic6DofConstraint.getCalculatedTransformB, b3Generic6DofConstraint.calculateAngleInfo
- */
- void calculateTransforms(const b3Transform& transA, const b3Transform& transB, const b3RigidBodyData* bodies);
-
- void calculateTransforms(const b3RigidBodyData* bodies);
-
- //! Gets the global transform of the offset for body A
- /*!
- \sa b3Generic6DofConstraint.getFrameOffsetA, b3Generic6DofConstraint.getFrameOffsetB, b3Generic6DofConstraint.calculateAngleInfo.
- */
- const b3Transform& getCalculatedTransformA() const
- {
- return m_calculatedTransformA;
- }
-
- //! Gets the global transform of the offset for body B
- /*!
- \sa b3Generic6DofConstraint.getFrameOffsetA, b3Generic6DofConstraint.getFrameOffsetB, b3Generic6DofConstraint.calculateAngleInfo.
- */
- const b3Transform& getCalculatedTransformB() const
- {
- return m_calculatedTransformB;
- }
-
- const b3Transform& getFrameOffsetA() const
- {
- return m_frameInA;
- }
-
- const b3Transform& getFrameOffsetB() const
- {
- return m_frameInB;
- }
-
- b3Transform& getFrameOffsetA()
- {
- return m_frameInA;
- }
-
- b3Transform& getFrameOffsetB()
- {
- return m_frameInB;
- }
-
- virtual void getInfo1(b3ConstraintInfo1 * info, const b3RigidBodyData* bodies);
-
- void getInfo1NonVirtual(b3ConstraintInfo1 * info, const b3RigidBodyData* bodies);
-
- virtual void getInfo2(b3ConstraintInfo2 * info, const b3RigidBodyData* bodies);
-
- void getInfo2NonVirtual(b3ConstraintInfo2 * info, const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB, const b3RigidBodyData* bodies);
-
- void updateRHS(b3Scalar timeStep);
-
- //! Get the rotation axis in global coordinates
- b3Vector3 getAxis(int axis_index) const;
-
- //! Get the relative Euler angle
- /*!
- \pre b3Generic6DofConstraint::calculateTransforms() must be called previously.
- */
- b3Scalar getAngle(int axis_index) const;
-
- //! Get the relative position of the constraint pivot
- /*!
- \pre b3Generic6DofConstraint::calculateTransforms() must be called previously.
- */
- b3Scalar getRelativePivotPosition(int axis_index) const;
-
- void setFrames(const b3Transform& frameA, const b3Transform& frameB, const b3RigidBodyData* bodies);
-
- //! Test angular limit.
- /*!
- Calculates angular correction and returns true if limit needs to be corrected.
- \pre b3Generic6DofConstraint::calculateTransforms() must be called previously.
- */
- bool testAngularLimitMotor(int axis_index);
-
- void setLinearLowerLimit(const b3Vector3& linearLower)
- {
- m_linearLimits.m_lowerLimit = linearLower;
- }
-
- void getLinearLowerLimit(b3Vector3 & linearLower)
- {
- linearLower = m_linearLimits.m_lowerLimit;
- }
-
- void setLinearUpperLimit(const b3Vector3& linearUpper)
- {
- m_linearLimits.m_upperLimit = linearUpper;
- }
-
- void getLinearUpperLimit(b3Vector3 & linearUpper)
- {
- linearUpper = m_linearLimits.m_upperLimit;
- }
-
- void setAngularLowerLimit(const b3Vector3& angularLower)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_loLimit = b3NormalizeAngle(angularLower[i]);
- }
-
- void getAngularLowerLimit(b3Vector3 & angularLower)
- {
- for (int i = 0; i < 3; i++)
- angularLower[i] = m_angularLimits[i].m_loLimit;
- }
-
- void setAngularUpperLimit(const b3Vector3& angularUpper)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_hiLimit = b3NormalizeAngle(angularUpper[i]);
- }
-
- void getAngularUpperLimit(b3Vector3 & angularUpper)
- {
- for (int i = 0; i < 3; i++)
- angularUpper[i] = m_angularLimits[i].m_hiLimit;
- }
-
- //! Retrieves the angular limit informacion
- b3RotationalLimitMotor* getRotationalLimitMotor(int index)
- {
- return &m_angularLimits[index];
- }
-
- //! Retrieves the limit informacion
- b3TranslationalLimitMotor* getTranslationalLimitMotor()
- {
- return &m_linearLimits;
- }
-
- //first 3 are linear, next 3 are angular
- void setLimit(int axis, b3Scalar lo, b3Scalar hi)
- {
- if (axis < 3)
- {
- m_linearLimits.m_lowerLimit[axis] = lo;
- m_linearLimits.m_upperLimit[axis] = hi;
- }
- else
- {
- lo = b3NormalizeAngle(lo);
- hi = b3NormalizeAngle(hi);
- m_angularLimits[axis - 3].m_loLimit = lo;
- m_angularLimits[axis - 3].m_hiLimit = hi;
- }
- }
-
- //! Test limit
- /*!
- - free means upper < lower,
- - locked means upper == lower
- - limited means upper > lower
- - limitIndex: first 3 are linear, next 3 are angular
- */
- bool isLimited(int limitIndex)
- {
- if (limitIndex < 3)
- {
- return m_linearLimits.isLimited(limitIndex);
- }
- return m_angularLimits[limitIndex - 3].isLimited();
- }
-
- virtual void calcAnchorPos(const b3RigidBodyData* bodies); // overridable
-
- int get_limit_motor_info2(b3RotationalLimitMotor * limot,
- const b3Transform& transA, const b3Transform& transB, const b3Vector3& linVelA, const b3Vector3& linVelB, const b3Vector3& angVelA, const b3Vector3& angVelB,
- b3ConstraintInfo2* info, int row, b3Vector3& ax1, int rotational, int rotAllowed = false);
-
- // access for UseFrameOffset
- bool getUseFrameOffset() { return m_useOffsetForConstraintFrame; }
- void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, b3Scalar value, int axis = -1);
- ///return the local value of parameter
- virtual b3Scalar getParam(int num, int axis = -1) const;
-
- void setAxis(const b3Vector3& axis1, const b3Vector3& axis2, const b3RigidBodyData* bodies);
-};
-
-#endif //B3_GENERIC_6DOF_CONSTRAINT_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3JacobianEntry.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3JacobianEntry.h
deleted file mode 100644
index 13269debf6..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3JacobianEntry.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_JACOBIAN_ENTRY_H
-#define B3_JACOBIAN_ENTRY_H
-
-#include "Bullet3Common/b3Matrix3x3.h"
-
-//notes:
-// Another memory optimization would be to store m_1MinvJt in the remaining 3 w components
-// which makes the b3JacobianEntry memory layout 16 bytes
-// if you only are interested in angular part, just feed massInvA and massInvB zero
-
-/// Jacobian entry is an abstraction that allows to describe constraints
-/// it can be used in combination with a constraint solver
-/// Can be used to relate the effect of an impulse to the constraint error
-B3_ATTRIBUTE_ALIGNED16(class)
-b3JacobianEntry
-{
-public:
- b3JacobianEntry(){};
- //constraint between two different rigidbodies
- b3JacobianEntry(
- const b3Matrix3x3& world2A,
- const b3Matrix3x3& world2B,
- const b3Vector3& rel_pos1, const b3Vector3& rel_pos2,
- const b3Vector3& jointAxis,
- const b3Vector3& inertiaInvA,
- const b3Scalar massInvA,
- const b3Vector3& inertiaInvB,
- const b3Scalar massInvB)
- : m_linearJointAxis(jointAxis)
- {
- m_aJ = world2A * (rel_pos1.cross(m_linearJointAxis));
- m_bJ = world2B * (rel_pos2.cross(-m_linearJointAxis));
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = inertiaInvB * m_bJ;
- m_Adiag = massInvA + m_0MinvJt.dot(m_aJ) + massInvB + m_1MinvJt.dot(m_bJ);
-
- b3Assert(m_Adiag > b3Scalar(0.0));
- }
-
- //angular constraint between two different rigidbodies
- b3JacobianEntry(const b3Vector3& jointAxis,
- const b3Matrix3x3& world2A,
- const b3Matrix3x3& world2B,
- const b3Vector3& inertiaInvA,
- const b3Vector3& inertiaInvB)
- : m_linearJointAxis(b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.)))
- {
- m_aJ = world2A * jointAxis;
- m_bJ = world2B * -jointAxis;
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = inertiaInvB * m_bJ;
- m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ);
-
- b3Assert(m_Adiag > b3Scalar(0.0));
- }
-
- //angular constraint between two different rigidbodies
- b3JacobianEntry(const b3Vector3& axisInA,
- const b3Vector3& axisInB,
- const b3Vector3& inertiaInvA,
- const b3Vector3& inertiaInvB)
- : m_linearJointAxis(b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.))), m_aJ(axisInA), m_bJ(-axisInB)
- {
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = inertiaInvB * m_bJ;
- m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ);
-
- b3Assert(m_Adiag > b3Scalar(0.0));
- }
-
- //constraint on one rigidbody
- b3JacobianEntry(
- const b3Matrix3x3& world2A,
- const b3Vector3& rel_pos1, const b3Vector3& rel_pos2,
- const b3Vector3& jointAxis,
- const b3Vector3& inertiaInvA,
- const b3Scalar massInvA)
- : m_linearJointAxis(jointAxis)
- {
- m_aJ = world2A * (rel_pos1.cross(jointAxis));
- m_bJ = world2A * (rel_pos2.cross(-jointAxis));
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- m_Adiag = massInvA + m_0MinvJt.dot(m_aJ);
-
- b3Assert(m_Adiag > b3Scalar(0.0));
- }
-
- b3Scalar getDiagonal() const { return m_Adiag; }
-
- // for two constraints on the same rigidbody (for example vehicle friction)
- b3Scalar getNonDiagonal(const b3JacobianEntry& jacB, const b3Scalar massInvA) const
- {
- const b3JacobianEntry& jacA = *this;
- b3Scalar lin = massInvA * jacA.m_linearJointAxis.dot(jacB.m_linearJointAxis);
- b3Scalar ang = jacA.m_0MinvJt.dot(jacB.m_aJ);
- return lin + ang;
- }
-
- // for two constraints on sharing two same rigidbodies (for example two contact points between two rigidbodies)
- b3Scalar getNonDiagonal(const b3JacobianEntry& jacB, const b3Scalar massInvA, const b3Scalar massInvB) const
- {
- const b3JacobianEntry& jacA = *this;
- b3Vector3 lin = jacA.m_linearJointAxis * jacB.m_linearJointAxis;
- b3Vector3 ang0 = jacA.m_0MinvJt * jacB.m_aJ;
- b3Vector3 ang1 = jacA.m_1MinvJt * jacB.m_bJ;
- b3Vector3 lin0 = massInvA * lin;
- b3Vector3 lin1 = massInvB * lin;
- b3Vector3 sum = ang0 + ang1 + lin0 + lin1;
- return sum[0] + sum[1] + sum[2];
- }
-
- b3Scalar getRelativeVelocity(const b3Vector3& linvelA, const b3Vector3& angvelA, const b3Vector3& linvelB, const b3Vector3& angvelB)
- {
- b3Vector3 linrel = linvelA - linvelB;
- b3Vector3 angvela = angvelA * m_aJ;
- b3Vector3 angvelb = angvelB * m_bJ;
- linrel *= m_linearJointAxis;
- angvela += angvelb;
- angvela += linrel;
- b3Scalar rel_vel2 = angvela[0] + angvela[1] + angvela[2];
- return rel_vel2 + B3_EPSILON;
- }
- //private:
-
- b3Vector3 m_linearJointAxis;
- b3Vector3 m_aJ;
- b3Vector3 m_bJ;
- b3Vector3 m_0MinvJt;
- b3Vector3 m_1MinvJt;
- //Optimization: can be stored in the w/last component of one of the vectors
- b3Scalar m_Adiag;
-};
-
-#endif //B3_JACOBIAN_ENTRY_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.cpp b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.cpp
deleted file mode 100644
index b7050b1070..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.cpp
+++ /dev/null
@@ -1,1696 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2012 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//enable B3_SOLVER_DEBUG if you experience solver crashes
-//#define B3_SOLVER_DEBUG
-//#define COMPUTE_IMPULSE_DENOM 1
-//It is not necessary (redundant) to refresh contact manifolds, this refresh has been moved to the collision algorithms.
-
-//#define DISABLE_JOINTS
-
-#include "b3PgsJacobiSolver.h"
-#include "Bullet3Common/b3MinMax.h"
-#include "b3TypedConstraint.h"
-#include <new>
-#include "Bullet3Common/b3StackAlloc.h"
-
-//#include "b3SolverBody.h"
-//#include "b3SolverConstraint.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include <string.h> //for memset
-//#include "../../dynamics/basic_demo/Stubs/AdlContact4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-static b3Transform getWorldTransform(b3RigidBodyData* rb)
-{
- b3Transform newTrans;
- newTrans.setOrigin(rb->m_pos);
- newTrans.setRotation(rb->m_quat);
- return newTrans;
-}
-
-static const b3Matrix3x3& getInvInertiaTensorWorld(b3InertiaData* inertia)
-{
- return inertia->m_invInertiaWorld;
-}
-
-static const b3Vector3& getLinearVelocity(b3RigidBodyData* rb)
-{
- return rb->m_linVel;
-}
-
-static const b3Vector3& getAngularVelocity(b3RigidBodyData* rb)
-{
- return rb->m_angVel;
-}
-
-static b3Vector3 getVelocityInLocalPoint(b3RigidBodyData* rb, const b3Vector3& rel_pos)
-{
- //we also calculate lin/ang velocity for kinematic objects
- return getLinearVelocity(rb) + getAngularVelocity(rb).cross(rel_pos);
-}
-
-struct b3ContactPoint
-{
- b3Vector3 m_positionWorldOnA;
- b3Vector3 m_positionWorldOnB;
- b3Vector3 m_normalWorldOnB;
- b3Scalar m_appliedImpulse;
- b3Scalar m_distance;
- b3Scalar m_combinedRestitution;
-
- ///information related to friction
- b3Scalar m_combinedFriction;
- b3Vector3 m_lateralFrictionDir1;
- b3Vector3 m_lateralFrictionDir2;
- b3Scalar m_appliedImpulseLateral1;
- b3Scalar m_appliedImpulseLateral2;
- b3Scalar m_combinedRollingFriction;
- b3Scalar m_contactMotion1;
- b3Scalar m_contactMotion2;
- b3Scalar m_contactCFM1;
- b3Scalar m_contactCFM2;
-
- bool m_lateralFrictionInitialized;
-
- b3Vector3 getPositionWorldOnA()
- {
- return m_positionWorldOnA;
- }
- b3Vector3 getPositionWorldOnB()
- {
- return m_positionWorldOnB;
- }
- b3Scalar getDistance()
- {
- return m_distance;
- }
-};
-
-void getContactPoint(b3Contact4* contact, int contactIndex, b3ContactPoint& pointOut)
-{
- pointOut.m_appliedImpulse = 0.f;
- pointOut.m_appliedImpulseLateral1 = 0.f;
- pointOut.m_appliedImpulseLateral2 = 0.f;
- pointOut.m_combinedFriction = contact->getFrictionCoeff();
- pointOut.m_combinedRestitution = contact->getRestituitionCoeff();
- pointOut.m_combinedRollingFriction = 0.f;
- pointOut.m_contactCFM1 = 0.f;
- pointOut.m_contactCFM2 = 0.f;
- pointOut.m_contactMotion1 = 0.f;
- pointOut.m_contactMotion2 = 0.f;
- pointOut.m_distance = contact->getPenetration(contactIndex); //??0.01f
- b3Vector3 normalOnB = contact->m_worldNormalOnB;
- normalOnB.normalize(); //is this needed?
-
- b3Vector3 l1, l2;
- b3PlaneSpace1(normalOnB, l1, l2);
-
- pointOut.m_normalWorldOnB = normalOnB;
- //printf("normalOnB = %f,%f,%f\n",normalOnB.getX(),normalOnB.getY(),normalOnB.getZ());
- pointOut.m_lateralFrictionDir1 = l1;
- pointOut.m_lateralFrictionDir2 = l2;
- pointOut.m_lateralFrictionInitialized = true;
-
- b3Vector3 worldPosB = contact->m_worldPosB[contactIndex];
- pointOut.m_positionWorldOnB = worldPosB;
- pointOut.m_positionWorldOnA = worldPosB + normalOnB * pointOut.m_distance;
-}
-
-int getNumContacts(b3Contact4* contact)
-{
- return contact->getNPoints();
-}
-
-b3PgsJacobiSolver::b3PgsJacobiSolver(bool usePgs)
- : m_usePgs(usePgs),
- m_numSplitImpulseRecoveries(0),
- m_btSeed2(0)
-{
-}
-
-b3PgsJacobiSolver::~b3PgsJacobiSolver()
-{
-}
-
-void b3PgsJacobiSolver::solveContacts(int numBodies, b3RigidBodyData* bodies, b3InertiaData* inertias, int numContacts, b3Contact4* contacts, int numConstraints, b3TypedConstraint** constraints)
-{
- b3ContactSolverInfo infoGlobal;
- infoGlobal.m_splitImpulse = false;
- infoGlobal.m_timeStep = 1.f / 60.f;
- infoGlobal.m_numIterations = 4; //4;
- // infoGlobal.m_solverMode|=B3_SOLVER_USE_2_FRICTION_DIRECTIONS|B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS|B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION;
- //infoGlobal.m_solverMode|=B3_SOLVER_USE_2_FRICTION_DIRECTIONS|B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS;
- infoGlobal.m_solverMode |= B3_SOLVER_USE_2_FRICTION_DIRECTIONS;
-
- //if (infoGlobal.m_solverMode & B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS)
- //if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS) && (infoGlobal.m_solverMode & B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION))
-
- solveGroup(bodies, inertias, numBodies, contacts, numContacts, constraints, numConstraints, infoGlobal);
-
- if (!numContacts)
- return;
-}
-
-/// b3PgsJacobiSolver Sequentially applies impulses
-b3Scalar b3PgsJacobiSolver::solveGroup(b3RigidBodyData* bodies,
- b3InertiaData* inertias,
- int numBodies,
- b3Contact4* manifoldPtr,
- int numManifolds,
- b3TypedConstraint** constraints,
- int numConstraints,
- const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("solveGroup");
- //you need to provide at least some bodies
-
- solveGroupCacheFriendlySetup(bodies, inertias, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal);
-
- solveGroupCacheFriendlyIterations(constraints, numConstraints, infoGlobal);
-
- solveGroupCacheFriendlyFinish(bodies, inertias, numBodies, infoGlobal);
-
- return 0.f;
-}
-
-#ifdef USE_SIMD
-#include <emmintrin.h>
-#define b3VecSplat(x, e) _mm_shuffle_ps(x, x, _MM_SHUFFLE(e, e, e, e))
-static inline __m128 b3SimdDot3(__m128 vec0, __m128 vec1)
-{
- __m128 result = _mm_mul_ps(vec0, vec1);
- return _mm_add_ps(b3VecSplat(result, 0), _mm_add_ps(b3VecSplat(result, 1), b3VecSplat(result, 2)));
-}
-#endif //USE_SIMD
-
-// Project Gauss Seidel or the equivalent Sequential Impulse
-void b3PgsJacobiSolver::resolveSingleConstraintRowGenericSIMD(b3SolverBody& body1, b3SolverBody& body2, const b3SolverConstraint& c)
-{
-#ifdef USE_SIMD
- __m128 cpAppliedImp = _mm_set1_ps(c.m_appliedImpulse);
- __m128 lowerLimit1 = _mm_set1_ps(c.m_lowerLimit);
- __m128 upperLimit1 = _mm_set1_ps(c.m_upperLimit);
- __m128 deltaImpulse = _mm_sub_ps(_mm_set1_ps(c.m_rhs), _mm_mul_ps(_mm_set1_ps(c.m_appliedImpulse), _mm_set1_ps(c.m_cfm)));
- __m128 deltaVel1Dotn = _mm_add_ps(b3SimdDot3(c.m_contactNormal.mVec128, body1.internalGetDeltaLinearVelocity().mVec128), b3SimdDot3(c.m_relpos1CrossNormal.mVec128, body1.internalGetDeltaAngularVelocity().mVec128));
- __m128 deltaVel2Dotn = _mm_sub_ps(b3SimdDot3(c.m_relpos2CrossNormal.mVec128, body2.internalGetDeltaAngularVelocity().mVec128), b3SimdDot3((c.m_contactNormal).mVec128, body2.internalGetDeltaLinearVelocity().mVec128));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel1Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel2Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- b3SimdScalar sum = _mm_add_ps(cpAppliedImp, deltaImpulse);
- b3SimdScalar resultLowerLess, resultUpperLess;
- resultLowerLess = _mm_cmplt_ps(sum, lowerLimit1);
- resultUpperLess = _mm_cmplt_ps(sum, upperLimit1);
- __m128 lowMinApplied = _mm_sub_ps(lowerLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse));
- c.m_appliedImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum));
- __m128 upperMinApplied = _mm_sub_ps(upperLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultUpperLess, deltaImpulse), _mm_andnot_ps(resultUpperLess, upperMinApplied));
- c.m_appliedImpulse = _mm_or_ps(_mm_and_ps(resultUpperLess, c.m_appliedImpulse), _mm_andnot_ps(resultUpperLess, upperLimit1));
- __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128, body1.internalGetInvMass().mVec128);
- __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128, body2.internalGetInvMass().mVec128);
- __m128 impulseMagnitude = deltaImpulse;
- body1.internalGetDeltaLinearVelocity().mVec128 = _mm_add_ps(body1.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentA, impulseMagnitude));
- body1.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(body1.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentA.mVec128, impulseMagnitude));
- body2.internalGetDeltaLinearVelocity().mVec128 = _mm_sub_ps(body2.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentB, impulseMagnitude));
- body2.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(body2.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentB.mVec128, impulseMagnitude));
-#else
- resolveSingleConstraintRowGeneric(body1, body2, c);
-#endif
-}
-
-// Project Gauss Seidel or the equivalent Sequential Impulse
-void b3PgsJacobiSolver::resolveSingleConstraintRowGeneric(b3SolverBody& body1, b3SolverBody& body2, const b3SolverConstraint& c)
-{
- b3Scalar deltaImpulse = c.m_rhs - b3Scalar(c.m_appliedImpulse) * c.m_cfm;
- const b3Scalar deltaVel1Dotn = c.m_contactNormal.dot(body1.internalGetDeltaLinearVelocity()) + c.m_relpos1CrossNormal.dot(body1.internalGetDeltaAngularVelocity());
- const b3Scalar deltaVel2Dotn = -c.m_contactNormal.dot(body2.internalGetDeltaLinearVelocity()) + c.m_relpos2CrossNormal.dot(body2.internalGetDeltaAngularVelocity());
-
- // const b3Scalar delta_rel_vel = deltaVel1Dotn-deltaVel2Dotn;
- deltaImpulse -= deltaVel1Dotn * c.m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c.m_jacDiagABInv;
-
- const b3Scalar sum = b3Scalar(c.m_appliedImpulse) + deltaImpulse;
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_lowerLimit;
- }
- else if (sum > c.m_upperLimit)
- {
- deltaImpulse = c.m_upperLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_upperLimit;
- }
- else
- {
- c.m_appliedImpulse = sum;
- }
-
- body1.internalApplyImpulse(c.m_contactNormal * body1.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- body2.internalApplyImpulse(-c.m_contactNormal * body2.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
-}
-
-void b3PgsJacobiSolver::resolveSingleConstraintRowLowerLimitSIMD(b3SolverBody& body1, b3SolverBody& body2, const b3SolverConstraint& c)
-{
-#ifdef USE_SIMD
- __m128 cpAppliedImp = _mm_set1_ps(c.m_appliedImpulse);
- __m128 lowerLimit1 = _mm_set1_ps(c.m_lowerLimit);
- __m128 upperLimit1 = _mm_set1_ps(c.m_upperLimit);
- __m128 deltaImpulse = _mm_sub_ps(_mm_set1_ps(c.m_rhs), _mm_mul_ps(_mm_set1_ps(c.m_appliedImpulse), _mm_set1_ps(c.m_cfm)));
- __m128 deltaVel1Dotn = _mm_add_ps(b3SimdDot3(c.m_contactNormal.mVec128, body1.internalGetDeltaLinearVelocity().mVec128), b3SimdDot3(c.m_relpos1CrossNormal.mVec128, body1.internalGetDeltaAngularVelocity().mVec128));
- __m128 deltaVel2Dotn = _mm_sub_ps(b3SimdDot3(c.m_relpos2CrossNormal.mVec128, body2.internalGetDeltaAngularVelocity().mVec128), b3SimdDot3((c.m_contactNormal).mVec128, body2.internalGetDeltaLinearVelocity().mVec128));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel1Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel2Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- b3SimdScalar sum = _mm_add_ps(cpAppliedImp, deltaImpulse);
- b3SimdScalar resultLowerLess, resultUpperLess;
- resultLowerLess = _mm_cmplt_ps(sum, lowerLimit1);
- resultUpperLess = _mm_cmplt_ps(sum, upperLimit1);
- __m128 lowMinApplied = _mm_sub_ps(lowerLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse));
- c.m_appliedImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum));
- __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128, body1.internalGetInvMass().mVec128);
- __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128, body2.internalGetInvMass().mVec128);
- __m128 impulseMagnitude = deltaImpulse;
- body1.internalGetDeltaLinearVelocity().mVec128 = _mm_add_ps(body1.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentA, impulseMagnitude));
- body1.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(body1.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentA.mVec128, impulseMagnitude));
- body2.internalGetDeltaLinearVelocity().mVec128 = _mm_sub_ps(body2.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentB, impulseMagnitude));
- body2.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(body2.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentB.mVec128, impulseMagnitude));
-#else
- resolveSingleConstraintRowLowerLimit(body1, body2, c);
-#endif
-}
-
-// Project Gauss Seidel or the equivalent Sequential Impulse
-void b3PgsJacobiSolver::resolveSingleConstraintRowLowerLimit(b3SolverBody& body1, b3SolverBody& body2, const b3SolverConstraint& c)
-{
- b3Scalar deltaImpulse = c.m_rhs - b3Scalar(c.m_appliedImpulse) * c.m_cfm;
- const b3Scalar deltaVel1Dotn = c.m_contactNormal.dot(body1.internalGetDeltaLinearVelocity()) + c.m_relpos1CrossNormal.dot(body1.internalGetDeltaAngularVelocity());
- const b3Scalar deltaVel2Dotn = -c.m_contactNormal.dot(body2.internalGetDeltaLinearVelocity()) + c.m_relpos2CrossNormal.dot(body2.internalGetDeltaAngularVelocity());
-
- deltaImpulse -= deltaVel1Dotn * c.m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c.m_jacDiagABInv;
- const b3Scalar sum = b3Scalar(c.m_appliedImpulse) + deltaImpulse;
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_lowerLimit;
- }
- else
- {
- c.m_appliedImpulse = sum;
- }
- body1.internalApplyImpulse(c.m_contactNormal * body1.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- body2.internalApplyImpulse(-c.m_contactNormal * body2.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
-}
-
-void b3PgsJacobiSolver::resolveSplitPenetrationImpulseCacheFriendly(
- b3SolverBody& body1,
- b3SolverBody& body2,
- const b3SolverConstraint& c)
-{
- if (c.m_rhsPenetration)
- {
- m_numSplitImpulseRecoveries++;
- b3Scalar deltaImpulse = c.m_rhsPenetration - b3Scalar(c.m_appliedPushImpulse) * c.m_cfm;
- const b3Scalar deltaVel1Dotn = c.m_contactNormal.dot(body1.internalGetPushVelocity()) + c.m_relpos1CrossNormal.dot(body1.internalGetTurnVelocity());
- const b3Scalar deltaVel2Dotn = -c.m_contactNormal.dot(body2.internalGetPushVelocity()) + c.m_relpos2CrossNormal.dot(body2.internalGetTurnVelocity());
-
- deltaImpulse -= deltaVel1Dotn * c.m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c.m_jacDiagABInv;
- const b3Scalar sum = b3Scalar(c.m_appliedPushImpulse) + deltaImpulse;
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedPushImpulse;
- c.m_appliedPushImpulse = c.m_lowerLimit;
- }
- else
- {
- c.m_appliedPushImpulse = sum;
- }
- body1.internalApplyPushImpulse(c.m_contactNormal * body1.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- body2.internalApplyPushImpulse(-c.m_contactNormal * body2.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
- }
-}
-
-void b3PgsJacobiSolver::resolveSplitPenetrationSIMD(b3SolverBody& body1, b3SolverBody& body2, const b3SolverConstraint& c)
-{
-#ifdef USE_SIMD
- if (!c.m_rhsPenetration)
- return;
-
- m_numSplitImpulseRecoveries++;
-
- __m128 cpAppliedImp = _mm_set1_ps(c.m_appliedPushImpulse);
- __m128 lowerLimit1 = _mm_set1_ps(c.m_lowerLimit);
- __m128 upperLimit1 = _mm_set1_ps(c.m_upperLimit);
- __m128 deltaImpulse = _mm_sub_ps(_mm_set1_ps(c.m_rhsPenetration), _mm_mul_ps(_mm_set1_ps(c.m_appliedPushImpulse), _mm_set1_ps(c.m_cfm)));
- __m128 deltaVel1Dotn = _mm_add_ps(b3SimdDot3(c.m_contactNormal.mVec128, body1.internalGetPushVelocity().mVec128), b3SimdDot3(c.m_relpos1CrossNormal.mVec128, body1.internalGetTurnVelocity().mVec128));
- __m128 deltaVel2Dotn = _mm_sub_ps(b3SimdDot3(c.m_relpos2CrossNormal.mVec128, body2.internalGetTurnVelocity().mVec128), b3SimdDot3((c.m_contactNormal).mVec128, body2.internalGetPushVelocity().mVec128));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel1Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel2Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- b3SimdScalar sum = _mm_add_ps(cpAppliedImp, deltaImpulse);
- b3SimdScalar resultLowerLess, resultUpperLess;
- resultLowerLess = _mm_cmplt_ps(sum, lowerLimit1);
- resultUpperLess = _mm_cmplt_ps(sum, upperLimit1);
- __m128 lowMinApplied = _mm_sub_ps(lowerLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse));
- c.m_appliedPushImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum));
- __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal.mVec128, body1.internalGetInvMass().mVec128);
- __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal).mVec128, body2.internalGetInvMass().mVec128);
- __m128 impulseMagnitude = deltaImpulse;
- body1.internalGetPushVelocity().mVec128 = _mm_add_ps(body1.internalGetPushVelocity().mVec128, _mm_mul_ps(linearComponentA, impulseMagnitude));
- body1.internalGetTurnVelocity().mVec128 = _mm_add_ps(body1.internalGetTurnVelocity().mVec128, _mm_mul_ps(c.m_angularComponentA.mVec128, impulseMagnitude));
- body2.internalGetPushVelocity().mVec128 = _mm_sub_ps(body2.internalGetPushVelocity().mVec128, _mm_mul_ps(linearComponentB, impulseMagnitude));
- body2.internalGetTurnVelocity().mVec128 = _mm_add_ps(body2.internalGetTurnVelocity().mVec128, _mm_mul_ps(c.m_angularComponentB.mVec128, impulseMagnitude));
-#else
- resolveSplitPenetrationImpulseCacheFriendly(body1, body2, c);
-#endif
-}
-
-unsigned long b3PgsJacobiSolver::b3Rand2()
-{
- m_btSeed2 = (1664525L * m_btSeed2 + 1013904223L) & 0xffffffff;
- return m_btSeed2;
-}
-
-//See ODE: adam's all-int straightforward(?) dRandInt (0..n-1)
-int b3PgsJacobiSolver::b3RandInt2(int n)
-{
- // seems good; xor-fold and modulus
- const unsigned long un = static_cast<unsigned long>(n);
- unsigned long r = b3Rand2();
-
- // note: probably more aggressive than it needs to be -- might be
- // able to get away without one or two of the innermost branches.
- if (un <= 0x00010000UL)
- {
- r ^= (r >> 16);
- if (un <= 0x00000100UL)
- {
- r ^= (r >> 8);
- if (un <= 0x00000010UL)
- {
- r ^= (r >> 4);
- if (un <= 0x00000004UL)
- {
- r ^= (r >> 2);
- if (un <= 0x00000002UL)
- {
- r ^= (r >> 1);
- }
- }
- }
- }
- }
-
- return (int)(r % un);
-}
-
-void b3PgsJacobiSolver::initSolverBody(int bodyIndex, b3SolverBody* solverBody, b3RigidBodyData* rb)
-{
- solverBody->m_deltaLinearVelocity.setValue(0.f, 0.f, 0.f);
- solverBody->m_deltaAngularVelocity.setValue(0.f, 0.f, 0.f);
- solverBody->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- solverBody->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
-
- if (rb)
- {
- solverBody->m_worldTransform = getWorldTransform(rb);
- solverBody->internalSetInvMass(b3MakeVector3(rb->m_invMass, rb->m_invMass, rb->m_invMass));
- solverBody->m_originalBodyIndex = bodyIndex;
- solverBody->m_angularFactor = b3MakeVector3(1, 1, 1);
- solverBody->m_linearFactor = b3MakeVector3(1, 1, 1);
- solverBody->m_linearVelocity = getLinearVelocity(rb);
- solverBody->m_angularVelocity = getAngularVelocity(rb);
- }
- else
- {
- solverBody->m_worldTransform.setIdentity();
- solverBody->internalSetInvMass(b3MakeVector3(0, 0, 0));
- solverBody->m_originalBodyIndex = bodyIndex;
- solverBody->m_angularFactor.setValue(1, 1, 1);
- solverBody->m_linearFactor.setValue(1, 1, 1);
- solverBody->m_linearVelocity.setValue(0, 0, 0);
- solverBody->m_angularVelocity.setValue(0, 0, 0);
- }
-}
-
-b3Scalar b3PgsJacobiSolver::restitutionCurve(b3Scalar rel_vel, b3Scalar restitution)
-{
- b3Scalar rest = restitution * -rel_vel;
- return rest;
-}
-
-void b3PgsJacobiSolver::setupFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB, b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2, b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation, b3Scalar desiredVelocity, b3Scalar cfmSlip)
-{
- solverConstraint.m_contactNormal = normalAxis;
- b3SolverBody& solverBodyA = m_tmpSolverBodyPool[solverBodyIdA];
- b3SolverBody& solverBodyB = m_tmpSolverBodyPool[solverBodyIdB];
-
- b3RigidBodyData* body0 = &bodies[solverBodyA.m_originalBodyIndex];
- b3RigidBodyData* body1 = &bodies[solverBodyB.m_originalBodyIndex];
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
-
- solverConstraint.m_friction = cp.m_combinedFriction;
- solverConstraint.m_originalContactPoint = 0;
-
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- b3Vector3 ftorqueAxis1 = rel_pos1.cross(solverConstraint.m_contactNormal);
- solverConstraint.m_relpos1CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentA = body0 ? getInvInertiaTensorWorld(&inertias[solverBodyA.m_originalBodyIndex]) * ftorqueAxis1 : b3MakeVector3(0, 0, 0);
- }
- {
- b3Vector3 ftorqueAxis1 = rel_pos2.cross(-solverConstraint.m_contactNormal);
- solverConstraint.m_relpos2CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentB = body1 ? getInvInertiaTensorWorld(&inertias[solverBodyB.m_originalBodyIndex]) * ftorqueAxis1 : b3MakeVector3(0, 0, 0);
- }
-
- b3Scalar scaledDenom;
-
- {
- b3Vector3 vec;
- b3Scalar denom0 = 0.f;
- b3Scalar denom1 = 0.f;
- if (body0)
- {
- vec = (solverConstraint.m_angularComponentA).cross(rel_pos1);
- denom0 = body0->m_invMass + normalAxis.dot(vec);
- }
- if (body1)
- {
- vec = (-solverConstraint.m_angularComponentB).cross(rel_pos2);
- denom1 = body1->m_invMass + normalAxis.dot(vec);
- }
-
- b3Scalar denom;
- if (m_usePgs)
- {
- scaledDenom = denom = relaxation / (denom0 + denom1);
- }
- else
- {
- denom = relaxation / (denom0 + denom1);
- b3Scalar countA = body0->m_invMass ? b3Scalar(m_bodyCount[solverBodyA.m_originalBodyIndex]) : 1.f;
- b3Scalar countB = body1->m_invMass ? b3Scalar(m_bodyCount[solverBodyB.m_originalBodyIndex]) : 1.f;
-
- scaledDenom = relaxation / (denom0 * countA + denom1 * countB);
- }
-
- solverConstraint.m_jacDiagABInv = denom;
- }
-
- {
- b3Scalar rel_vel;
- b3Scalar vel1Dotn = solverConstraint.m_contactNormal.dot(body0 ? solverBodyA.m_linearVelocity : b3MakeVector3(0, 0, 0)) + solverConstraint.m_relpos1CrossNormal.dot(body0 ? solverBodyA.m_angularVelocity : b3MakeVector3(0, 0, 0));
- b3Scalar vel2Dotn = -solverConstraint.m_contactNormal.dot(body1 ? solverBodyB.m_linearVelocity : b3MakeVector3(0, 0, 0)) + solverConstraint.m_relpos2CrossNormal.dot(body1 ? solverBodyB.m_angularVelocity : b3MakeVector3(0, 0, 0));
-
- rel_vel = vel1Dotn + vel2Dotn;
-
- // b3Scalar positionalError = 0.f;
-
- b3SimdScalar velocityError = desiredVelocity - rel_vel;
- b3SimdScalar velocityImpulse = velocityError * b3SimdScalar(scaledDenom); //solverConstraint.m_jacDiagABInv);
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_cfm = cfmSlip;
- solverConstraint.m_lowerLimit = 0;
- solverConstraint.m_upperLimit = 1e10f;
- }
-}
-
-b3SolverConstraint& b3PgsJacobiSolver::addFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2, b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation, b3Scalar desiredVelocity, b3Scalar cfmSlip)
-{
- b3SolverConstraint& solverConstraint = m_tmpSolverContactFrictionConstraintPool.expandNonInitializing();
- solverConstraint.m_frictionIndex = frictionIndex;
- setupFrictionConstraint(bodies, inertias, solverConstraint, normalAxis, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2,
- colObj0, colObj1, relaxation, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-
-void b3PgsJacobiSolver::setupRollingFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint, const b3Vector3& normalAxis1, int solverBodyIdA, int solverBodyIdB,
- b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2,
- b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation,
- b3Scalar desiredVelocity, b3Scalar cfmSlip)
-
-{
- b3Vector3 normalAxis = b3MakeVector3(0, 0, 0);
-
- solverConstraint.m_contactNormal = normalAxis;
- b3SolverBody& solverBodyA = m_tmpSolverBodyPool[solverBodyIdA];
- b3SolverBody& solverBodyB = m_tmpSolverBodyPool[solverBodyIdB];
-
- b3RigidBodyData* body0 = &bodies[m_tmpSolverBodyPool[solverBodyIdA].m_originalBodyIndex];
- b3RigidBodyData* body1 = &bodies[m_tmpSolverBodyPool[solverBodyIdB].m_originalBodyIndex];
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
-
- solverConstraint.m_friction = cp.m_combinedRollingFriction;
- solverConstraint.m_originalContactPoint = 0;
-
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- b3Vector3 ftorqueAxis1 = -normalAxis1;
- solverConstraint.m_relpos1CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentA = body0 ? getInvInertiaTensorWorld(&inertias[solverBodyA.m_originalBodyIndex]) * ftorqueAxis1 : b3MakeVector3(0, 0, 0);
- }
- {
- b3Vector3 ftorqueAxis1 = normalAxis1;
- solverConstraint.m_relpos2CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentB = body1 ? getInvInertiaTensorWorld(&inertias[solverBodyB.m_originalBodyIndex]) * ftorqueAxis1 : b3MakeVector3(0, 0, 0);
- }
-
- {
- b3Vector3 iMJaA = body0 ? getInvInertiaTensorWorld(&inertias[solverBodyA.m_originalBodyIndex]) * solverConstraint.m_relpos1CrossNormal : b3MakeVector3(0, 0, 0);
- b3Vector3 iMJaB = body1 ? getInvInertiaTensorWorld(&inertias[solverBodyB.m_originalBodyIndex]) * solverConstraint.m_relpos2CrossNormal : b3MakeVector3(0, 0, 0);
- b3Scalar sum = 0;
- sum += iMJaA.dot(solverConstraint.m_relpos1CrossNormal);
- sum += iMJaB.dot(solverConstraint.m_relpos2CrossNormal);
- solverConstraint.m_jacDiagABInv = b3Scalar(1.) / sum;
- }
-
- {
- b3Scalar rel_vel;
- b3Scalar vel1Dotn = solverConstraint.m_contactNormal.dot(body0 ? solverBodyA.m_linearVelocity : b3MakeVector3(0, 0, 0)) + solverConstraint.m_relpos1CrossNormal.dot(body0 ? solverBodyA.m_angularVelocity : b3MakeVector3(0, 0, 0));
- b3Scalar vel2Dotn = -solverConstraint.m_contactNormal.dot(body1 ? solverBodyB.m_linearVelocity : b3MakeVector3(0, 0, 0)) + solverConstraint.m_relpos2CrossNormal.dot(body1 ? solverBodyB.m_angularVelocity : b3MakeVector3(0, 0, 0));
-
- rel_vel = vel1Dotn + vel2Dotn;
-
- // b3Scalar positionalError = 0.f;
-
- b3SimdScalar velocityError = desiredVelocity - rel_vel;
- b3SimdScalar velocityImpulse = velocityError * b3SimdScalar(solverConstraint.m_jacDiagABInv);
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_cfm = cfmSlip;
- solverConstraint.m_lowerLimit = 0;
- solverConstraint.m_upperLimit = 1e10f;
- }
-}
-
-b3SolverConstraint& b3PgsJacobiSolver::addRollingFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2, b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation, b3Scalar desiredVelocity, b3Scalar cfmSlip)
-{
- b3SolverConstraint& solverConstraint = m_tmpSolverContactRollingFrictionConstraintPool.expandNonInitializing();
- solverConstraint.m_frictionIndex = frictionIndex;
- setupRollingFrictionConstraint(bodies, inertias, solverConstraint, normalAxis, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2,
- colObj0, colObj1, relaxation, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-
-int b3PgsJacobiSolver::getOrInitSolverBody(int bodyIndex, b3RigidBodyData* bodies, b3InertiaData* inertias)
-{
- //b3Assert(bodyIndex< m_tmpSolverBodyPool.size());
-
- b3RigidBodyData& body = bodies[bodyIndex];
- int curIndex = -1;
- if (m_usePgs || body.m_invMass == 0.f)
- {
- if (m_bodyCount[bodyIndex] < 0)
- {
- curIndex = m_tmpSolverBodyPool.size();
- b3SolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(bodyIndex, &solverBody, &body);
- solverBody.m_originalBodyIndex = bodyIndex;
- m_bodyCount[bodyIndex] = curIndex;
- }
- else
- {
- curIndex = m_bodyCount[bodyIndex];
- }
- }
- else
- {
- b3Assert(m_bodyCount[bodyIndex] > 0);
- m_bodyCountCheck[bodyIndex]++;
- curIndex = m_tmpSolverBodyPool.size();
- b3SolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(bodyIndex, &solverBody, &body);
- solverBody.m_originalBodyIndex = bodyIndex;
- }
-
- b3Assert(curIndex >= 0);
- return curIndex;
-}
-#include <stdio.h>
-
-void b3PgsJacobiSolver::setupContactConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint,
- int solverBodyIdA, int solverBodyIdB,
- b3ContactPoint& cp, const b3ContactSolverInfo& infoGlobal,
- b3Vector3& vel, b3Scalar& rel_vel, b3Scalar& relaxation,
- b3Vector3& rel_pos1, b3Vector3& rel_pos2)
-{
- const b3Vector3& pos1 = cp.getPositionWorldOnA();
- const b3Vector3& pos2 = cp.getPositionWorldOnB();
-
- b3SolverBody* bodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- b3SolverBody* bodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- b3RigidBodyData* rb0 = &bodies[bodyA->m_originalBodyIndex];
- b3RigidBodyData* rb1 = &bodies[bodyB->m_originalBodyIndex];
-
- // b3Vector3 rel_pos1 = pos1 - colObj0->getWorldTransform().getOrigin();
- // b3Vector3 rel_pos2 = pos2 - colObj1->getWorldTransform().getOrigin();
- rel_pos1 = pos1 - bodyA->getWorldTransform().getOrigin();
- rel_pos2 = pos2 - bodyB->getWorldTransform().getOrigin();
-
- relaxation = 1.f;
-
- b3Vector3 torqueAxis0 = rel_pos1.cross(cp.m_normalWorldOnB);
- solverConstraint.m_angularComponentA = rb0 ? getInvInertiaTensorWorld(&inertias[bodyA->m_originalBodyIndex]) * torqueAxis0 : b3MakeVector3(0, 0, 0);
- b3Vector3 torqueAxis1 = rel_pos2.cross(cp.m_normalWorldOnB);
- solverConstraint.m_angularComponentB = rb1 ? getInvInertiaTensorWorld(&inertias[bodyB->m_originalBodyIndex]) * -torqueAxis1 : b3MakeVector3(0, 0, 0);
-
- b3Scalar scaledDenom;
- {
-#ifdef COMPUTE_IMPULSE_DENOM
- b3Scalar denom0 = rb0->computeImpulseDenominator(pos1, cp.m_normalWorldOnB);
- b3Scalar denom1 = rb1->computeImpulseDenominator(pos2, cp.m_normalWorldOnB);
-#else
- b3Vector3 vec;
- b3Scalar denom0 = 0.f;
- b3Scalar denom1 = 0.f;
- if (rb0)
- {
- vec = (solverConstraint.m_angularComponentA).cross(rel_pos1);
- denom0 = rb0->m_invMass + cp.m_normalWorldOnB.dot(vec);
- }
- if (rb1)
- {
- vec = (-solverConstraint.m_angularComponentB).cross(rel_pos2);
- denom1 = rb1->m_invMass + cp.m_normalWorldOnB.dot(vec);
- }
-#endif //COMPUTE_IMPULSE_DENOM
-
- b3Scalar denom;
- if (m_usePgs)
- {
- scaledDenom = denom = relaxation / (denom0 + denom1);
- }
- else
- {
- denom = relaxation / (denom0 + denom1);
-
- b3Scalar countA = rb0->m_invMass ? b3Scalar(m_bodyCount[bodyA->m_originalBodyIndex]) : 1.f;
- b3Scalar countB = rb1->m_invMass ? b3Scalar(m_bodyCount[bodyB->m_originalBodyIndex]) : 1.f;
- scaledDenom = relaxation / (denom0 * countA + denom1 * countB);
- }
- solverConstraint.m_jacDiagABInv = denom;
- }
-
- solverConstraint.m_contactNormal = cp.m_normalWorldOnB;
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_relpos2CrossNormal = -torqueAxis1;
-
- b3Scalar restitution = 0.f;
- b3Scalar penetration = cp.getDistance() + infoGlobal.m_linearSlop;
-
- {
- b3Vector3 vel1, vel2;
-
- vel1 = rb0 ? getVelocityInLocalPoint(rb0, rel_pos1) : b3MakeVector3(0, 0, 0);
- vel2 = rb1 ? getVelocityInLocalPoint(rb1, rel_pos2) : b3MakeVector3(0, 0, 0);
-
- // b3Vector3 vel2 = rb1 ? rb1->getVelocityInLocalPoint(rel_pos2) : b3Vector3(0,0,0);
- vel = vel1 - vel2;
- rel_vel = cp.m_normalWorldOnB.dot(vel);
-
- solverConstraint.m_friction = cp.m_combinedFriction;
-
- restitution = restitutionCurve(rel_vel, cp.m_combinedRestitution);
- if (restitution <= b3Scalar(0.))
- {
- restitution = 0.f;
- };
- }
-
- ///warm starting (or zero if disabled)
- if (infoGlobal.m_solverMode & B3_SOLVER_USE_WARMSTARTING)
- {
- solverConstraint.m_appliedImpulse = cp.m_appliedImpulse * infoGlobal.m_warmstartingFactor;
- if (rb0)
- bodyA->internalApplyImpulse(solverConstraint.m_contactNormal * bodyA->internalGetInvMass(), solverConstraint.m_angularComponentA, solverConstraint.m_appliedImpulse);
- if (rb1)
- bodyB->internalApplyImpulse(solverConstraint.m_contactNormal * bodyB->internalGetInvMass(), -solverConstraint.m_angularComponentB, -(b3Scalar)solverConstraint.m_appliedImpulse);
- }
- else
- {
- solverConstraint.m_appliedImpulse = 0.f;
- }
-
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- b3Scalar vel1Dotn = solverConstraint.m_contactNormal.dot(rb0 ? bodyA->m_linearVelocity : b3MakeVector3(0, 0, 0)) + solverConstraint.m_relpos1CrossNormal.dot(rb0 ? bodyA->m_angularVelocity : b3MakeVector3(0, 0, 0));
- b3Scalar vel2Dotn = -solverConstraint.m_contactNormal.dot(rb1 ? bodyB->m_linearVelocity : b3MakeVector3(0, 0, 0)) + solverConstraint.m_relpos2CrossNormal.dot(rb1 ? bodyB->m_angularVelocity : b3MakeVector3(0, 0, 0));
- b3Scalar rel_vel = vel1Dotn + vel2Dotn;
-
- b3Scalar positionalError = 0.f;
- b3Scalar velocityError = restitution - rel_vel; // * damping;
-
- b3Scalar erp = infoGlobal.m_erp2;
- if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- erp = infoGlobal.m_erp;
- }
-
- if (penetration > 0)
- {
- positionalError = 0;
-
- velocityError -= penetration / infoGlobal.m_timeStep;
- }
- else
- {
- positionalError = -penetration * erp / infoGlobal.m_timeStep;
- }
-
- b3Scalar penetrationImpulse = positionalError * scaledDenom; //solverConstraint.m_jacDiagABInv;
- b3Scalar velocityImpulse = velocityError * scaledDenom; //solverConstraint.m_jacDiagABInv;
-
- if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- //combine position and velocity into rhs
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_rhsPenetration = 0.f;
- }
- else
- {
- //split position and velocity into rhs and m_rhsPenetration
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_rhsPenetration = penetrationImpulse;
- }
- solverConstraint.m_cfm = 0.f;
- solverConstraint.m_lowerLimit = 0;
- solverConstraint.m_upperLimit = 1e10f;
- }
-}
-
-void b3PgsJacobiSolver::setFrictionConstraintImpulse(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint,
- int solverBodyIdA, int solverBodyIdB,
- b3ContactPoint& cp, const b3ContactSolverInfo& infoGlobal)
-{
- b3SolverBody* bodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- b3SolverBody* bodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- {
- b3SolverConstraint& frictionConstraint1 = m_tmpSolverContactFrictionConstraintPool[solverConstraint.m_frictionIndex];
- if (infoGlobal.m_solverMode & B3_SOLVER_USE_WARMSTARTING)
- {
- frictionConstraint1.m_appliedImpulse = cp.m_appliedImpulseLateral1 * infoGlobal.m_warmstartingFactor;
- if (bodies[bodyA->m_originalBodyIndex].m_invMass)
- bodyA->internalApplyImpulse(frictionConstraint1.m_contactNormal * bodies[bodyA->m_originalBodyIndex].m_invMass, frictionConstraint1.m_angularComponentA, frictionConstraint1.m_appliedImpulse);
- if (bodies[bodyB->m_originalBodyIndex].m_invMass)
- bodyB->internalApplyImpulse(frictionConstraint1.m_contactNormal * bodies[bodyB->m_originalBodyIndex].m_invMass, -frictionConstraint1.m_angularComponentB, -(b3Scalar)frictionConstraint1.m_appliedImpulse);
- }
- else
- {
- frictionConstraint1.m_appliedImpulse = 0.f;
- }
- }
-
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- b3SolverConstraint& frictionConstraint2 = m_tmpSolverContactFrictionConstraintPool[solverConstraint.m_frictionIndex + 1];
- if (infoGlobal.m_solverMode & B3_SOLVER_USE_WARMSTARTING)
- {
- frictionConstraint2.m_appliedImpulse = cp.m_appliedImpulseLateral2 * infoGlobal.m_warmstartingFactor;
- if (bodies[bodyA->m_originalBodyIndex].m_invMass)
- bodyA->internalApplyImpulse(frictionConstraint2.m_contactNormal * bodies[bodyA->m_originalBodyIndex].m_invMass, frictionConstraint2.m_angularComponentA, frictionConstraint2.m_appliedImpulse);
- if (bodies[bodyB->m_originalBodyIndex].m_invMass)
- bodyB->internalApplyImpulse(frictionConstraint2.m_contactNormal * bodies[bodyB->m_originalBodyIndex].m_invMass, -frictionConstraint2.m_angularComponentB, -(b3Scalar)frictionConstraint2.m_appliedImpulse);
- }
- else
- {
- frictionConstraint2.m_appliedImpulse = 0.f;
- }
- }
-}
-
-void b3PgsJacobiSolver::convertContact(b3RigidBodyData* bodies, b3InertiaData* inertias, b3Contact4* manifold, const b3ContactSolverInfo& infoGlobal)
-{
- b3RigidBodyData *colObj0 = 0, *colObj1 = 0;
-
- int solverBodyIdA = getOrInitSolverBody(manifold->getBodyA(), bodies, inertias);
- int solverBodyIdB = getOrInitSolverBody(manifold->getBodyB(), bodies, inertias);
-
- // b3RigidBody* bodyA = b3RigidBody::upcast(colObj0);
- // b3RigidBody* bodyB = b3RigidBody::upcast(colObj1);
-
- b3SolverBody* solverBodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- b3SolverBody* solverBodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- ///avoid collision response between two static objects
- if (solverBodyA->m_invMass.isZero() && solverBodyB->m_invMass.isZero())
- return;
-
- int rollingFriction = 1;
- int numContacts = getNumContacts(manifold);
- for (int j = 0; j < numContacts; j++)
- {
- b3ContactPoint cp;
- getContactPoint(manifold, j, cp);
-
- if (cp.getDistance() <= getContactProcessingThreshold(manifold))
- {
- b3Vector3 rel_pos1;
- b3Vector3 rel_pos2;
- b3Scalar relaxation;
- b3Scalar rel_vel;
- b3Vector3 vel;
-
- int frictionIndex = m_tmpSolverContactConstraintPool.size();
- b3SolverConstraint& solverConstraint = m_tmpSolverContactConstraintPool.expandNonInitializing();
- // b3RigidBody* rb0 = b3RigidBody::upcast(colObj0);
- // b3RigidBody* rb1 = b3RigidBody::upcast(colObj1);
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
-
- solverConstraint.m_originalContactPoint = &cp;
-
- setupContactConstraint(bodies, inertias, solverConstraint, solverBodyIdA, solverBodyIdB, cp, infoGlobal, vel, rel_vel, relaxation, rel_pos1, rel_pos2);
-
- // const b3Vector3& pos1 = cp.getPositionWorldOnA();
- // const b3Vector3& pos2 = cp.getPositionWorldOnB();
-
- /////setup the friction constraints
-
- solverConstraint.m_frictionIndex = m_tmpSolverContactFrictionConstraintPool.size();
-
- b3Vector3 angVelA, angVelB;
- solverBodyA->getAngularVelocity(angVelA);
- solverBodyB->getAngularVelocity(angVelB);
- b3Vector3 relAngVel = angVelB - angVelA;
-
- if ((cp.m_combinedRollingFriction > 0.f) && (rollingFriction > 0))
- {
- //only a single rollingFriction per manifold
- rollingFriction--;
- if (relAngVel.length() > infoGlobal.m_singleAxisRollingFrictionThreshold)
- {
- relAngVel.normalize();
- if (relAngVel.length() > 0.001)
- addRollingFrictionConstraint(bodies, inertias, relAngVel, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- }
- else
- {
- addRollingFrictionConstraint(bodies, inertias, cp.m_normalWorldOnB, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- b3Vector3 axis0, axis1;
- b3PlaneSpace1(cp.m_normalWorldOnB, axis0, axis1);
- if (axis0.length() > 0.001)
- addRollingFrictionConstraint(bodies, inertias, axis0, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- if (axis1.length() > 0.001)
- addRollingFrictionConstraint(bodies, inertias, axis1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- }
- }
-
- ///Bullet has several options to set the friction directions
- ///By default, each contact has only a single friction direction that is recomputed automatically very frame
- ///based on the relative linear velocity.
- ///If the relative velocity it zero, it will automatically compute a friction direction.
-
- ///You can also enable two friction directions, using the B3_SOLVER_USE_2_FRICTION_DIRECTIONS.
- ///In that case, the second friction direction will be orthogonal to both contact normal and first friction direction.
- ///
- ///If you choose B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, then the friction will be independent from the relative projected velocity.
- ///
- ///The user can manually override the friction directions for certain contacts using a contact callback,
- ///and set the cp.m_lateralFrictionInitialized to true
- ///In that case, you can set the target relative motion in each friction direction (cp.m_contactMotion1 and cp.m_contactMotion2)
- ///this will give a conveyor belt effect
- ///
- if (!(infoGlobal.m_solverMode & B3_SOLVER_ENABLE_FRICTION_DIRECTION_CACHING) || !cp.m_lateralFrictionInitialized)
- {
- cp.m_lateralFrictionDir1 = vel - cp.m_normalWorldOnB * rel_vel;
- b3Scalar lat_rel_vel = cp.m_lateralFrictionDir1.length2();
- if (!(infoGlobal.m_solverMode & B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION) && lat_rel_vel > B3_EPSILON)
- {
- cp.m_lateralFrictionDir1 *= 1.f / b3Sqrt(lat_rel_vel);
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- cp.m_lateralFrictionDir2 = cp.m_lateralFrictionDir1.cross(cp.m_normalWorldOnB);
- cp.m_lateralFrictionDir2.normalize(); //??
- addFrictionConstraint(bodies, inertias, cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- }
-
- addFrictionConstraint(bodies, inertias, cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- }
- else
- {
- b3PlaneSpace1(cp.m_normalWorldOnB, cp.m_lateralFrictionDir1, cp.m_lateralFrictionDir2);
-
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- addFrictionConstraint(bodies, inertias, cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- }
-
- addFrictionConstraint(bodies, inertias, cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
-
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS) && (infoGlobal.m_solverMode & B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION))
- {
- cp.m_lateralFrictionInitialized = true;
- }
- }
- }
- else
- {
- addFrictionConstraint(bodies, inertias, cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, cp.m_contactMotion1, cp.m_contactCFM1);
-
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS))
- addFrictionConstraint(bodies, inertias, cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, cp.m_contactMotion2, cp.m_contactCFM2);
-
- setFrictionConstraintImpulse(bodies, inertias, solverConstraint, solverBodyIdA, solverBodyIdB, cp, infoGlobal);
- }
- }
- }
-}
-
-b3Scalar b3PgsJacobiSolver::solveGroupCacheFriendlySetup(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, b3Contact4* manifoldPtr, int numManifolds, b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("solveGroupCacheFriendlySetup");
-
- m_maxOverrideNumSolverIterations = 0;
-
- m_tmpSolverBodyPool.resize(0);
-
- m_bodyCount.resize(0);
- m_bodyCount.resize(numBodies, 0);
- m_bodyCountCheck.resize(0);
- m_bodyCountCheck.resize(numBodies, 0);
-
- m_deltaLinearVelocities.resize(0);
- m_deltaLinearVelocities.resize(numBodies, b3MakeVector3(0, 0, 0));
- m_deltaAngularVelocities.resize(0);
- m_deltaAngularVelocities.resize(numBodies, b3MakeVector3(0, 0, 0));
-
- //int totalBodies = 0;
-
- for (int i = 0; i < numConstraints; i++)
- {
- int bodyIndexA = constraints[i]->getRigidBodyA();
- int bodyIndexB = constraints[i]->getRigidBodyB();
- if (m_usePgs)
- {
- m_bodyCount[bodyIndexA] = -1;
- m_bodyCount[bodyIndexB] = -1;
- }
- else
- {
- //didn't implement joints with Jacobi version yet
- b3Assert(0);
- }
- }
- for (int i = 0; i < numManifolds; i++)
- {
- int bodyIndexA = manifoldPtr[i].getBodyA();
- int bodyIndexB = manifoldPtr[i].getBodyB();
- if (m_usePgs)
- {
- m_bodyCount[bodyIndexA] = -1;
- m_bodyCount[bodyIndexB] = -1;
- }
- else
- {
- if (bodies[bodyIndexA].m_invMass)
- {
- //m_bodyCount[bodyIndexA]+=manifoldPtr[i].getNPoints();
- m_bodyCount[bodyIndexA]++;
- }
- else
- m_bodyCount[bodyIndexA] = -1;
-
- if (bodies[bodyIndexB].m_invMass)
- // m_bodyCount[bodyIndexB]+=manifoldPtr[i].getNPoints();
- m_bodyCount[bodyIndexB]++;
- else
- m_bodyCount[bodyIndexB] = -1;
- }
- }
-
- if (1)
- {
- int j;
- for (j = 0; j < numConstraints; j++)
- {
- b3TypedConstraint* constraint = constraints[j];
-
- constraint->internalSetAppliedImpulse(0.0f);
- }
- }
-
- //b3RigidBody* rb0=0,*rb1=0;
- //if (1)
- {
- {
- int totalNumRows = 0;
- int i;
-
- m_tmpConstraintSizesPool.resizeNoInitialize(numConstraints);
- //calculate the total number of contraint rows
- for (i = 0; i < numConstraints; i++)
- {
- b3TypedConstraint::b3ConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
- b3JointFeedback* fb = constraints[i]->getJointFeedback();
- if (fb)
- {
- fb->m_appliedForceBodyA.setZero();
- fb->m_appliedTorqueBodyA.setZero();
- fb->m_appliedForceBodyB.setZero();
- fb->m_appliedTorqueBodyB.setZero();
- }
-
- if (constraints[i]->isEnabled())
- {
- }
- if (constraints[i]->isEnabled())
- {
- constraints[i]->getInfo1(&info1, bodies);
- }
- else
- {
- info1.m_numConstraintRows = 0;
- info1.nub = 0;
- }
- totalNumRows += info1.m_numConstraintRows;
- }
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(totalNumRows);
-
-#ifndef DISABLE_JOINTS
- ///setup the b3SolverConstraints
- int currentRow = 0;
-
- for (i = 0; i < numConstraints; i++)
- {
- const b3TypedConstraint::b3ConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
-
- if (info1.m_numConstraintRows)
- {
- b3Assert(currentRow < totalNumRows);
-
- b3SolverConstraint* currentConstraintRow = &m_tmpSolverNonContactConstraintPool[currentRow];
- b3TypedConstraint* constraint = constraints[i];
-
- b3RigidBodyData& rbA = bodies[constraint->getRigidBodyA()];
- //b3RigidBody& rbA = constraint->getRigidBodyA();
- // b3RigidBody& rbB = constraint->getRigidBodyB();
- b3RigidBodyData& rbB = bodies[constraint->getRigidBodyB()];
-
- int solverBodyIdA = getOrInitSolverBody(constraint->getRigidBodyA(), bodies, inertias);
- int solverBodyIdB = getOrInitSolverBody(constraint->getRigidBodyB(), bodies, inertias);
-
- b3SolverBody* bodyAPtr = &m_tmpSolverBodyPool[solverBodyIdA];
- b3SolverBody* bodyBPtr = &m_tmpSolverBodyPool[solverBodyIdB];
-
- int overrideNumSolverIterations = constraint->getOverrideNumSolverIterations() > 0 ? constraint->getOverrideNumSolverIterations() : infoGlobal.m_numIterations;
- if (overrideNumSolverIterations > m_maxOverrideNumSolverIterations)
- m_maxOverrideNumSolverIterations = overrideNumSolverIterations;
-
- int j;
- for (j = 0; j < info1.m_numConstraintRows; j++)
- {
- memset(&currentConstraintRow[j], 0, sizeof(b3SolverConstraint));
- currentConstraintRow[j].m_lowerLimit = -B3_INFINITY;
- currentConstraintRow[j].m_upperLimit = B3_INFINITY;
- currentConstraintRow[j].m_appliedImpulse = 0.f;
- currentConstraintRow[j].m_appliedPushImpulse = 0.f;
- currentConstraintRow[j].m_solverBodyIdA = solverBodyIdA;
- currentConstraintRow[j].m_solverBodyIdB = solverBodyIdB;
- currentConstraintRow[j].m_overrideNumSolverIterations = overrideNumSolverIterations;
- }
-
- bodyAPtr->internalGetDeltaLinearVelocity().setValue(0.f, 0.f, 0.f);
- bodyAPtr->internalGetDeltaAngularVelocity().setValue(0.f, 0.f, 0.f);
- bodyAPtr->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- bodyAPtr->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetDeltaLinearVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetDeltaAngularVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
-
- b3TypedConstraint::b3ConstraintInfo2 info2;
- info2.fps = 1.f / infoGlobal.m_timeStep;
- info2.erp = infoGlobal.m_erp;
- info2.m_J1linearAxis = currentConstraintRow->m_contactNormal;
- info2.m_J1angularAxis = currentConstraintRow->m_relpos1CrossNormal;
- info2.m_J2linearAxis = 0;
- info2.m_J2angularAxis = currentConstraintRow->m_relpos2CrossNormal;
- info2.rowskip = sizeof(b3SolverConstraint) / sizeof(b3Scalar); //check this
- ///the size of b3SolverConstraint needs be a multiple of b3Scalar
- b3Assert(info2.rowskip * sizeof(b3Scalar) == sizeof(b3SolverConstraint));
- info2.m_constraintError = &currentConstraintRow->m_rhs;
- currentConstraintRow->m_cfm = infoGlobal.m_globalCfm;
- info2.m_damping = infoGlobal.m_damping;
- info2.cfm = &currentConstraintRow->m_cfm;
- info2.m_lowerLimit = &currentConstraintRow->m_lowerLimit;
- info2.m_upperLimit = &currentConstraintRow->m_upperLimit;
- info2.m_numIterations = infoGlobal.m_numIterations;
- constraints[i]->getInfo2(&info2, bodies);
-
- ///finalize the constraint setup
- for (j = 0; j < info1.m_numConstraintRows; j++)
- {
- b3SolverConstraint& solverConstraint = currentConstraintRow[j];
-
- if (solverConstraint.m_upperLimit >= constraints[i]->getBreakingImpulseThreshold())
- {
- solverConstraint.m_upperLimit = constraints[i]->getBreakingImpulseThreshold();
- }
-
- if (solverConstraint.m_lowerLimit <= -constraints[i]->getBreakingImpulseThreshold())
- {
- solverConstraint.m_lowerLimit = -constraints[i]->getBreakingImpulseThreshold();
- }
-
- solverConstraint.m_originalContactPoint = constraint;
-
- b3Matrix3x3& invInertiaWorldA = inertias[constraint->getRigidBodyA()].m_invInertiaWorld;
- {
- //b3Vector3 angularFactorA(1,1,1);
- const b3Vector3& ftorqueAxis1 = solverConstraint.m_relpos1CrossNormal;
- solverConstraint.m_angularComponentA = invInertiaWorldA * ftorqueAxis1; //*angularFactorA;
- }
-
- b3Matrix3x3& invInertiaWorldB = inertias[constraint->getRigidBodyB()].m_invInertiaWorld;
- {
- const b3Vector3& ftorqueAxis2 = solverConstraint.m_relpos2CrossNormal;
- solverConstraint.m_angularComponentB = invInertiaWorldB * ftorqueAxis2; //*constraint->getRigidBodyB().getAngularFactor();
- }
-
- {
- //it is ok to use solverConstraint.m_contactNormal instead of -solverConstraint.m_contactNormal
- //because it gets multiplied iMJlB
- b3Vector3 iMJlA = solverConstraint.m_contactNormal * rbA.m_invMass;
- b3Vector3 iMJaA = invInertiaWorldA * solverConstraint.m_relpos1CrossNormal;
- b3Vector3 iMJlB = solverConstraint.m_contactNormal * rbB.m_invMass; //sign of normal?
- b3Vector3 iMJaB = invInertiaWorldB * solverConstraint.m_relpos2CrossNormal;
-
- b3Scalar sum = iMJlA.dot(solverConstraint.m_contactNormal);
- sum += iMJaA.dot(solverConstraint.m_relpos1CrossNormal);
- sum += iMJlB.dot(solverConstraint.m_contactNormal);
- sum += iMJaB.dot(solverConstraint.m_relpos2CrossNormal);
- b3Scalar fsum = b3Fabs(sum);
- b3Assert(fsum > B3_EPSILON);
- solverConstraint.m_jacDiagABInv = fsum > B3_EPSILON ? b3Scalar(1.) / sum : 0.f;
- }
-
- ///fix rhs
- ///todo: add force/torque accelerators
- {
- b3Scalar rel_vel;
- b3Scalar vel1Dotn = solverConstraint.m_contactNormal.dot(rbA.m_linVel) + solverConstraint.m_relpos1CrossNormal.dot(rbA.m_angVel);
- b3Scalar vel2Dotn = -solverConstraint.m_contactNormal.dot(rbB.m_linVel) + solverConstraint.m_relpos2CrossNormal.dot(rbB.m_angVel);
-
- rel_vel = vel1Dotn + vel2Dotn;
-
- b3Scalar restitution = 0.f;
- b3Scalar positionalError = solverConstraint.m_rhs; //already filled in by getConstraintInfo2
- b3Scalar velocityError = restitution - rel_vel * info2.m_damping;
- b3Scalar penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- b3Scalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_appliedImpulse = 0.f;
- }
- }
- }
- currentRow += m_tmpConstraintSizesPool[i].m_numConstraintRows;
- }
-#endif //DISABLE_JOINTS
- }
-
- {
- int i;
-
- for (i = 0; i < numManifolds; i++)
- {
- b3Contact4& manifold = manifoldPtr[i];
- convertContact(bodies, inertias, &manifold, infoGlobal);
- }
- }
- }
-
- // b3ContactSolverInfo info = infoGlobal;
-
- int numNonContactPool = m_tmpSolverNonContactConstraintPool.size();
- int numConstraintPool = m_tmpSolverContactConstraintPool.size();
- int numFrictionPool = m_tmpSolverContactFrictionConstraintPool.size();
-
- ///@todo: use stack allocator for such temporarily memory, same for solver bodies/constraints
- m_orderNonContactConstraintPool.resizeNoInitialize(numNonContactPool);
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS))
- m_orderTmpConstraintPool.resizeNoInitialize(numConstraintPool * 2);
- else
- m_orderTmpConstraintPool.resizeNoInitialize(numConstraintPool);
-
- m_orderFrictionConstraintPool.resizeNoInitialize(numFrictionPool);
- {
- int i;
- for (i = 0; i < numNonContactPool; i++)
- {
- m_orderNonContactConstraintPool[i] = i;
- }
- for (i = 0; i < numConstraintPool; i++)
- {
- m_orderTmpConstraintPool[i] = i;
- }
- for (i = 0; i < numFrictionPool; i++)
- {
- m_orderFrictionConstraintPool[i] = i;
- }
- }
-
- return 0.f;
-}
-
-b3Scalar b3PgsJacobiSolver::solveSingleIteration(int iteration, b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- int numNonContactPool = m_tmpSolverNonContactConstraintPool.size();
- int numConstraintPool = m_tmpSolverContactConstraintPool.size();
- int numFrictionPool = m_tmpSolverContactFrictionConstraintPool.size();
-
- if (infoGlobal.m_solverMode & B3_SOLVER_RANDMIZE_ORDER)
- {
- if (1) // uncomment this for a bit less random ((iteration & 7) == 0)
- {
- for (int j = 0; j < numNonContactPool; ++j)
- {
- int tmp = m_orderNonContactConstraintPool[j];
- int swapi = b3RandInt2(j + 1);
- m_orderNonContactConstraintPool[j] = m_orderNonContactConstraintPool[swapi];
- m_orderNonContactConstraintPool[swapi] = tmp;
- }
-
- //contact/friction constraints are not solved more than
- if (iteration < infoGlobal.m_numIterations)
- {
- for (int j = 0; j < numConstraintPool; ++j)
- {
- int tmp = m_orderTmpConstraintPool[j];
- int swapi = b3RandInt2(j + 1);
- m_orderTmpConstraintPool[j] = m_orderTmpConstraintPool[swapi];
- m_orderTmpConstraintPool[swapi] = tmp;
- }
-
- for (int j = 0; j < numFrictionPool; ++j)
- {
- int tmp = m_orderFrictionConstraintPool[j];
- int swapi = b3RandInt2(j + 1);
- m_orderFrictionConstraintPool[j] = m_orderFrictionConstraintPool[swapi];
- m_orderFrictionConstraintPool[swapi] = tmp;
- }
- }
- }
- }
-
- if (infoGlobal.m_solverMode & B3_SOLVER_SIMD)
- {
- ///solve all joint constraints, using SIMD, if available
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++)
- {
- b3SolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[m_orderNonContactConstraintPool[j]];
- if (iteration < constraint.m_overrideNumSolverIterations)
- resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[constraint.m_solverBodyIdA], m_tmpSolverBodyPool[constraint.m_solverBodyIdB], constraint);
- }
-
- if (iteration < infoGlobal.m_numIterations)
- {
- ///solve all contact constraints using SIMD, if available
- if (infoGlobal.m_solverMode & B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS)
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int multiplier = (infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS) ? 2 : 1;
-
- for (int c = 0; c < numPoolConstraints; c++)
- {
- b3Scalar totalImpulse = 0;
-
- {
- const b3SolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[c]];
- resolveSingleConstraintRowLowerLimitSIMD(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- totalImpulse = solveManifold.m_appliedImpulse;
- }
- bool applyFriction = true;
- if (applyFriction)
- {
- {
- b3SolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[c * multiplier]];
-
- if (totalImpulse > b3Scalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- }
-
- if (infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS)
- {
- b3SolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[c * multiplier + 1]];
-
- if (totalImpulse > b3Scalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- }
- }
- }
- }
- else //B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS
- {
- //solve the friction constraints after all contact constraints, don't interleave them
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
-
- for (j = 0; j < numPoolConstraints; j++)
- {
- const b3SolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
- resolveSingleConstraintRowLowerLimitSIMD(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
-
- if (!m_usePgs)
- averageVelocities();
-
- ///solve all friction constraints, using SIMD, if available
-
- int numFrictionPoolConstraints = m_tmpSolverContactFrictionConstraintPool.size();
- for (j = 0; j < numFrictionPoolConstraints; j++)
- {
- b3SolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[j]];
- b3Scalar totalImpulse = m_tmpSolverContactConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
-
- if (totalImpulse > b3Scalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- }
-
- int numRollingFrictionPoolConstraints = m_tmpSolverContactRollingFrictionConstraintPool.size();
- for (j = 0; j < numRollingFrictionPoolConstraints; j++)
- {
- b3SolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[j];
- b3Scalar totalImpulse = m_tmpSolverContactConstraintPool[rollingFrictionConstraint.m_frictionIndex].m_appliedImpulse;
- if (totalImpulse > b3Scalar(0))
- {
- b3Scalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- }
- }
- }
- }
- }
- else
- {
- //non-SIMD version
- ///solve all joint constraints
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++)
- {
- b3SolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[m_orderNonContactConstraintPool[j]];
- if (iteration < constraint.m_overrideNumSolverIterations)
- resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[constraint.m_solverBodyIdA], m_tmpSolverBodyPool[constraint.m_solverBodyIdB], constraint);
- }
-
- if (iteration < infoGlobal.m_numIterations)
- {
- ///solve all contact constraints
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- for (int j = 0; j < numPoolConstraints; j++)
- {
- const b3SolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
- resolveSingleConstraintRowLowerLimit(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- ///solve all friction constraints
- int numFrictionPoolConstraints = m_tmpSolverContactFrictionConstraintPool.size();
- for (int j = 0; j < numFrictionPoolConstraints; j++)
- {
- b3SolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[j]];
- b3Scalar totalImpulse = m_tmpSolverContactConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
-
- if (totalImpulse > b3Scalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- }
-
- int numRollingFrictionPoolConstraints = m_tmpSolverContactRollingFrictionConstraintPool.size();
- for (int j = 0; j < numRollingFrictionPoolConstraints; j++)
- {
- b3SolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[j];
- b3Scalar totalImpulse = m_tmpSolverContactConstraintPool[rollingFrictionConstraint.m_frictionIndex].m_appliedImpulse;
- if (totalImpulse > b3Scalar(0))
- {
- b3Scalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- }
- }
- }
- }
- return 0.f;
-}
-
-void b3PgsJacobiSolver::solveGroupCacheFriendlySplitImpulseIterations(b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- int iteration;
- if (infoGlobal.m_splitImpulse)
- {
- if (infoGlobal.m_solverMode & B3_SOLVER_SIMD)
- {
- for (iteration = 0; iteration < infoGlobal.m_numIterations; iteration++)
- {
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
- for (j = 0; j < numPoolConstraints; j++)
- {
- const b3SolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
-
- resolveSplitPenetrationSIMD(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- }
- }
- }
- else
- {
- for (iteration = 0; iteration < infoGlobal.m_numIterations; iteration++)
- {
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
- for (j = 0; j < numPoolConstraints; j++)
- {
- const b3SolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
-
- resolveSplitPenetrationImpulseCacheFriendly(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- }
- }
- }
- }
- }
-}
-
-b3Scalar b3PgsJacobiSolver::solveGroupCacheFriendlyIterations(b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("solveGroupCacheFriendlyIterations");
-
- {
- ///this is a special step to resolve penetrations (just for contacts)
- solveGroupCacheFriendlySplitImpulseIterations(constraints, numConstraints, infoGlobal);
-
- int maxIterations = m_maxOverrideNumSolverIterations > infoGlobal.m_numIterations ? m_maxOverrideNumSolverIterations : infoGlobal.m_numIterations;
-
- for (int iteration = 0; iteration < maxIterations; iteration++)
- //for ( int iteration = maxIterations-1 ; iteration >= 0;iteration--)
- {
- solveSingleIteration(iteration, constraints, numConstraints, infoGlobal);
-
- if (!m_usePgs)
- {
- averageVelocities();
- }
- }
- }
- return 0.f;
-}
-
-void b3PgsJacobiSolver::averageVelocities()
-{
- B3_PROFILE("averaging");
- //average the velocities
- int numBodies = m_bodyCount.size();
-
- m_deltaLinearVelocities.resize(0);
- m_deltaLinearVelocities.resize(numBodies, b3MakeVector3(0, 0, 0));
- m_deltaAngularVelocities.resize(0);
- m_deltaAngularVelocities.resize(numBodies, b3MakeVector3(0, 0, 0));
-
- for (int i = 0; i < m_tmpSolverBodyPool.size(); i++)
- {
- if (!m_tmpSolverBodyPool[i].m_invMass.isZero())
- {
- int orgBodyIndex = m_tmpSolverBodyPool[i].m_originalBodyIndex;
- m_deltaLinearVelocities[orgBodyIndex] += m_tmpSolverBodyPool[i].getDeltaLinearVelocity();
- m_deltaAngularVelocities[orgBodyIndex] += m_tmpSolverBodyPool[i].getDeltaAngularVelocity();
- }
- }
-
- for (int i = 0; i < m_tmpSolverBodyPool.size(); i++)
- {
- int orgBodyIndex = m_tmpSolverBodyPool[i].m_originalBodyIndex;
-
- if (!m_tmpSolverBodyPool[i].m_invMass.isZero())
- {
- b3Assert(m_bodyCount[orgBodyIndex] == m_bodyCountCheck[orgBodyIndex]);
-
- b3Scalar factor = 1.f / b3Scalar(m_bodyCount[orgBodyIndex]);
-
- m_tmpSolverBodyPool[i].m_deltaLinearVelocity = m_deltaLinearVelocities[orgBodyIndex] * factor;
- m_tmpSolverBodyPool[i].m_deltaAngularVelocity = m_deltaAngularVelocities[orgBodyIndex] * factor;
- }
- }
-}
-
-b3Scalar b3PgsJacobiSolver::solveGroupCacheFriendlyFinish(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("solveGroupCacheFriendlyFinish");
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int i, j;
-
- if (infoGlobal.m_solverMode & B3_SOLVER_USE_WARMSTARTING)
- {
- for (j = 0; j < numPoolConstraints; j++)
- {
- const b3SolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[j];
- b3ContactPoint* pt = (b3ContactPoint*)solveManifold.m_originalContactPoint;
- b3Assert(pt);
- pt->m_appliedImpulse = solveManifold.m_appliedImpulse;
- // float f = m_tmpSolverContactFrictionConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
- // printf("pt->m_appliedImpulseLateral1 = %f\n", f);
- pt->m_appliedImpulseLateral1 = m_tmpSolverContactFrictionConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
- //printf("pt->m_appliedImpulseLateral1 = %f\n", pt->m_appliedImpulseLateral1);
- if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- pt->m_appliedImpulseLateral2 = m_tmpSolverContactFrictionConstraintPool[solveManifold.m_frictionIndex + 1].m_appliedImpulse;
- }
- //do a callback here?
- }
- }
-
- numPoolConstraints = m_tmpSolverNonContactConstraintPool.size();
- for (j = 0; j < numPoolConstraints; j++)
- {
- const b3SolverConstraint& solverConstr = m_tmpSolverNonContactConstraintPool[j];
- b3TypedConstraint* constr = (b3TypedConstraint*)solverConstr.m_originalContactPoint;
- b3JointFeedback* fb = constr->getJointFeedback();
- if (fb)
- {
- b3SolverBody* bodyA = &m_tmpSolverBodyPool[solverConstr.m_solverBodyIdA];
- b3SolverBody* bodyB = &m_tmpSolverBodyPool[solverConstr.m_solverBodyIdB];
-
- fb->m_appliedForceBodyA += solverConstr.m_contactNormal * solverConstr.m_appliedImpulse * bodyA->m_linearFactor / infoGlobal.m_timeStep;
- fb->m_appliedForceBodyB += -solverConstr.m_contactNormal * solverConstr.m_appliedImpulse * bodyB->m_linearFactor / infoGlobal.m_timeStep;
- fb->m_appliedTorqueBodyA += solverConstr.m_relpos1CrossNormal * bodyA->m_angularFactor * solverConstr.m_appliedImpulse / infoGlobal.m_timeStep;
- fb->m_appliedTorqueBodyB += -solverConstr.m_relpos1CrossNormal * bodyB->m_angularFactor * solverConstr.m_appliedImpulse / infoGlobal.m_timeStep;
- }
-
- constr->internalSetAppliedImpulse(solverConstr.m_appliedImpulse);
- if (b3Fabs(solverConstr.m_appliedImpulse) >= constr->getBreakingImpulseThreshold())
- {
- constr->setEnabled(false);
- }
- }
-
- {
- B3_PROFILE("write back velocities and transforms");
- for (i = 0; i < m_tmpSolverBodyPool.size(); i++)
- {
- int bodyIndex = m_tmpSolverBodyPool[i].m_originalBodyIndex;
- //b3Assert(i==bodyIndex);
-
- b3RigidBodyData* body = &bodies[bodyIndex];
- if (body->m_invMass)
- {
- if (infoGlobal.m_splitImpulse)
- m_tmpSolverBodyPool[i].writebackVelocityAndTransform(infoGlobal.m_timeStep, infoGlobal.m_splitImpulseTurnErp);
- else
- m_tmpSolverBodyPool[i].writebackVelocity();
-
- if (m_usePgs)
- {
- body->m_linVel = m_tmpSolverBodyPool[i].m_linearVelocity;
- body->m_angVel = m_tmpSolverBodyPool[i].m_angularVelocity;
- }
- else
- {
- b3Scalar factor = 1.f / b3Scalar(m_bodyCount[bodyIndex]);
-
- b3Vector3 deltaLinVel = m_deltaLinearVelocities[bodyIndex] * factor;
- b3Vector3 deltaAngVel = m_deltaAngularVelocities[bodyIndex] * factor;
- //printf("body %d\n",bodyIndex);
- //printf("deltaLinVel = %f,%f,%f\n",deltaLinVel.getX(),deltaLinVel.getY(),deltaLinVel.getZ());
- //printf("deltaAngVel = %f,%f,%f\n",deltaAngVel.getX(),deltaAngVel.getY(),deltaAngVel.getZ());
-
- body->m_linVel += deltaLinVel;
- body->m_angVel += deltaAngVel;
- }
-
- if (infoGlobal.m_splitImpulse)
- {
- body->m_pos = m_tmpSolverBodyPool[i].m_worldTransform.getOrigin();
- b3Quaternion orn;
- orn = m_tmpSolverBodyPool[i].m_worldTransform.getRotation();
- body->m_quat = orn;
- }
- }
- }
- }
-
- m_tmpSolverContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactFrictionConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactRollingFrictionConstraintPool.resizeNoInitialize(0);
-
- m_tmpSolverBodyPool.resizeNoInitialize(0);
- return 0.f;
-}
-
-void b3PgsJacobiSolver::reset()
-{
- m_btSeed2 = 0;
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.h
deleted file mode 100644
index 5b616541d9..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.h
+++ /dev/null
@@ -1,133 +0,0 @@
-#ifndef B3_PGS_JACOBI_SOLVER
-#define B3_PGS_JACOBI_SOLVER
-
-struct b3Contact4;
-struct b3ContactPoint;
-
-class b3Dispatcher;
-
-#include "b3TypedConstraint.h"
-#include "b3ContactSolverInfo.h"
-#include "b3SolverBody.h"
-#include "b3SolverConstraint.h"
-
-struct b3RigidBodyData;
-struct b3InertiaData;
-
-class b3PgsJacobiSolver
-{
-protected:
- b3AlignedObjectArray<b3SolverBody> m_tmpSolverBodyPool;
- b3ConstraintArray m_tmpSolverContactConstraintPool;
- b3ConstraintArray m_tmpSolverNonContactConstraintPool;
- b3ConstraintArray m_tmpSolverContactFrictionConstraintPool;
- b3ConstraintArray m_tmpSolverContactRollingFrictionConstraintPool;
-
- b3AlignedObjectArray<int> m_orderTmpConstraintPool;
- b3AlignedObjectArray<int> m_orderNonContactConstraintPool;
- b3AlignedObjectArray<int> m_orderFrictionConstraintPool;
- b3AlignedObjectArray<b3TypedConstraint::b3ConstraintInfo1> m_tmpConstraintSizesPool;
-
- b3AlignedObjectArray<int> m_bodyCount;
- b3AlignedObjectArray<int> m_bodyCountCheck;
-
- b3AlignedObjectArray<b3Vector3> m_deltaLinearVelocities;
- b3AlignedObjectArray<b3Vector3> m_deltaAngularVelocities;
-
- bool m_usePgs;
- void averageVelocities();
-
- int m_maxOverrideNumSolverIterations;
-
- int m_numSplitImpulseRecoveries;
-
- b3Scalar getContactProcessingThreshold(b3Contact4* contact)
- {
- return 0.02f;
- }
- void setupFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB,
- b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2,
- b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation,
- b3Scalar desiredVelocity = 0., b3Scalar cfmSlip = 0.);
-
- void setupRollingFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB,
- b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2,
- b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation,
- b3Scalar desiredVelocity = 0., b3Scalar cfmSlip = 0.);
-
- b3SolverConstraint& addFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2, b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation, b3Scalar desiredVelocity = 0., b3Scalar cfmSlip = 0.);
- b3SolverConstraint& addRollingFrictionConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias, const b3Vector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, b3ContactPoint& cp, const b3Vector3& rel_pos1, const b3Vector3& rel_pos2, b3RigidBodyData* colObj0, b3RigidBodyData* colObj1, b3Scalar relaxation, b3Scalar desiredVelocity = 0, b3Scalar cfmSlip = 0.f);
-
- void setupContactConstraint(b3RigidBodyData* bodies, b3InertiaData* inertias,
- b3SolverConstraint& solverConstraint, int solverBodyIdA, int solverBodyIdB, b3ContactPoint& cp,
- const b3ContactSolverInfo& infoGlobal, b3Vector3& vel, b3Scalar& rel_vel, b3Scalar& relaxation,
- b3Vector3& rel_pos1, b3Vector3& rel_pos2);
-
- void setFrictionConstraintImpulse(b3RigidBodyData* bodies, b3InertiaData* inertias, b3SolverConstraint& solverConstraint, int solverBodyIdA, int solverBodyIdB,
- b3ContactPoint& cp, const b3ContactSolverInfo& infoGlobal);
-
- ///m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction
- unsigned long m_btSeed2;
-
- b3Scalar restitutionCurve(b3Scalar rel_vel, b3Scalar restitution);
-
- void convertContact(b3RigidBodyData* bodies, b3InertiaData* inertias, b3Contact4* manifold, const b3ContactSolverInfo& infoGlobal);
-
- void resolveSplitPenetrationSIMD(
- b3SolverBody& bodyA, b3SolverBody& bodyB,
- const b3SolverConstraint& contactConstraint);
-
- void resolveSplitPenetrationImpulseCacheFriendly(
- b3SolverBody& bodyA, b3SolverBody& bodyB,
- const b3SolverConstraint& contactConstraint);
-
- //internal method
- int getOrInitSolverBody(int bodyIndex, b3RigidBodyData* bodies, b3InertiaData* inertias);
- void initSolverBody(int bodyIndex, b3SolverBody* solverBody, b3RigidBodyData* collisionObject);
-
- void resolveSingleConstraintRowGeneric(b3SolverBody& bodyA, b3SolverBody& bodyB, const b3SolverConstraint& contactConstraint);
-
- void resolveSingleConstraintRowGenericSIMD(b3SolverBody& bodyA, b3SolverBody& bodyB, const b3SolverConstraint& contactConstraint);
-
- void resolveSingleConstraintRowLowerLimit(b3SolverBody& bodyA, b3SolverBody& bodyB, const b3SolverConstraint& contactConstraint);
-
- void resolveSingleConstraintRowLowerLimitSIMD(b3SolverBody& bodyA, b3SolverBody& bodyB, const b3SolverConstraint& contactConstraint);
-
-protected:
- virtual b3Scalar solveGroupCacheFriendlySetup(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, b3Contact4* manifoldPtr, int numManifolds, b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
-
- virtual b3Scalar solveGroupCacheFriendlyIterations(b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
- virtual void solveGroupCacheFriendlySplitImpulseIterations(b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
- b3Scalar solveSingleIteration(int iteration, b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
-
- virtual b3Scalar solveGroupCacheFriendlyFinish(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, const b3ContactSolverInfo& infoGlobal);
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3PgsJacobiSolver(bool usePgs);
- virtual ~b3PgsJacobiSolver();
-
- // void solveContacts(int numBodies, b3RigidBodyData* bodies, b3InertiaData* inertias, int numContacts, b3Contact4* contacts);
- void solveContacts(int numBodies, b3RigidBodyData* bodies, b3InertiaData* inertias, int numContacts, b3Contact4* contacts, int numConstraints, b3TypedConstraint** constraints);
-
- b3Scalar solveGroup(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, b3Contact4* manifoldPtr, int numManifolds, b3TypedConstraint** constraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
-
- ///clear internal cached data and reset random seed
- virtual void reset();
-
- unsigned long b3Rand2();
-
- int b3RandInt2(int n);
-
- void setRandSeed(unsigned long seed)
- {
- m_btSeed2 = seed;
- }
- unsigned long getRandSeed() const
- {
- return m_btSeed2;
- }
-};
-
-#endif //B3_PGS_JACOBI_SOLVER
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.cpp b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.cpp
deleted file mode 100644
index cfa7c7dd11..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.cpp
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3Point2PointConstraint.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-#include <new>
-
-b3Point2PointConstraint::b3Point2PointConstraint(int rbA, int rbB, const b3Vector3& pivotInA, const b3Vector3& pivotInB)
- : b3TypedConstraint(B3_POINT2POINT_CONSTRAINT_TYPE, rbA, rbB), m_pivotInA(pivotInA), m_pivotInB(pivotInB), m_flags(0)
-{
-}
-
-/*
-b3Point2PointConstraint::b3Point2PointConstraint(int rbA,const b3Vector3& pivotInA)
-:b3TypedConstraint(B3_POINT2POINT_CONSTRAINT_TYPE,rbA),m_pivotInA(pivotInA),m_pivotInB(rbA.getCenterOfMassTransform()(pivotInA)),
-m_flags(0),
-m_useSolveConstraintObsolete(false)
-{
-
-}
-*/
-
-void b3Point2PointConstraint::getInfo1(b3ConstraintInfo1* info, const b3RigidBodyData* bodies)
-{
- getInfo1NonVirtual(info, bodies);
-}
-
-void b3Point2PointConstraint::getInfo1NonVirtual(b3ConstraintInfo1* info, const b3RigidBodyData* bodies)
-{
- info->m_numConstraintRows = 3;
- info->nub = 3;
-}
-
-void b3Point2PointConstraint::getInfo2(b3ConstraintInfo2* info, const b3RigidBodyData* bodies)
-{
- b3Transform trA;
- trA.setIdentity();
- trA.setOrigin(bodies[m_rbA].m_pos);
- trA.setRotation(bodies[m_rbA].m_quat);
-
- b3Transform trB;
- trB.setIdentity();
- trB.setOrigin(bodies[m_rbB].m_pos);
- trB.setRotation(bodies[m_rbB].m_quat);
-
- getInfo2NonVirtual(info, trA, trB);
-}
-
-void b3Point2PointConstraint::getInfo2NonVirtual(b3ConstraintInfo2* info, const b3Transform& body0_trans, const b3Transform& body1_trans)
-{
- //retrieve matrices
-
- // anchor points in global coordinates with respect to body PORs.
-
- // set jacobian
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[info->rowskip + 1] = 1;
- info->m_J1linearAxis[2 * info->rowskip + 2] = 1;
-
- b3Vector3 a1 = body0_trans.getBasis() * getPivotInA();
- //b3Vector3 a1a = b3QuatRotate(body0_trans.getRotation(),getPivotInA());
-
- {
- b3Vector3* angular0 = (b3Vector3*)(info->m_J1angularAxis);
- b3Vector3* angular1 = (b3Vector3*)(info->m_J1angularAxis + info->rowskip);
- b3Vector3* angular2 = (b3Vector3*)(info->m_J1angularAxis + 2 * info->rowskip);
- b3Vector3 a1neg = -a1;
- a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- if (info->m_J2linearAxis)
- {
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[info->rowskip + 1] = -1;
- info->m_J2linearAxis[2 * info->rowskip + 2] = -1;
- }
-
- b3Vector3 a2 = body1_trans.getBasis() * getPivotInB();
-
- {
- // b3Vector3 a2n = -a2;
- b3Vector3* angular0 = (b3Vector3*)(info->m_J2angularAxis);
- b3Vector3* angular1 = (b3Vector3*)(info->m_J2angularAxis + info->rowskip);
- b3Vector3* angular2 = (b3Vector3*)(info->m_J2angularAxis + 2 * info->rowskip);
- a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- // set right hand side
- b3Scalar currERP = (m_flags & B3_P2P_FLAGS_ERP) ? m_erp : info->erp;
- b3Scalar k = info->fps * currERP;
- int j;
- for (j = 0; j < 3; j++)
- {
- info->m_constraintError[j * info->rowskip] = k * (a2[j] + body1_trans.getOrigin()[j] - a1[j] - body0_trans.getOrigin()[j]);
- //printf("info->m_constraintError[%d]=%f\n",j,info->m_constraintError[j]);
- }
- if (m_flags & B3_P2P_FLAGS_CFM)
- {
- for (j = 0; j < 3; j++)
- {
- info->cfm[j * info->rowskip] = m_cfm;
- }
- }
-
- b3Scalar impulseClamp = m_setting.m_impulseClamp; //
- for (j = 0; j < 3; j++)
- {
- if (m_setting.m_impulseClamp > 0)
- {
- info->m_lowerLimit[j * info->rowskip] = -impulseClamp;
- info->m_upperLimit[j * info->rowskip] = impulseClamp;
- }
- }
- info->m_damping = m_setting.m_damping;
-}
-
-void b3Point2PointConstraint::updateRHS(b3Scalar timeStep)
-{
- (void)timeStep;
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void b3Point2PointConstraint::setParam(int num, b3Scalar value, int axis)
-{
- if (axis != -1)
- {
- b3AssertConstrParams(0);
- }
- else
- {
- switch (num)
- {
- case B3_CONSTRAINT_ERP:
- case B3_CONSTRAINT_STOP_ERP:
- m_erp = value;
- m_flags |= B3_P2P_FLAGS_ERP;
- break;
- case B3_CONSTRAINT_CFM:
- case B3_CONSTRAINT_STOP_CFM:
- m_cfm = value;
- m_flags |= B3_P2P_FLAGS_CFM;
- break;
- default:
- b3AssertConstrParams(0);
- }
- }
-}
-
-///return the local value of parameter
-b3Scalar b3Point2PointConstraint::getParam(int num, int axis) const
-{
- b3Scalar retVal(B3_INFINITY);
- if (axis != -1)
- {
- b3AssertConstrParams(0);
- }
- else
- {
- switch (num)
- {
- case B3_CONSTRAINT_ERP:
- case B3_CONSTRAINT_STOP_ERP:
- b3AssertConstrParams(m_flags & B3_P2P_FLAGS_ERP);
- retVal = m_erp;
- break;
- case B3_CONSTRAINT_CFM:
- case B3_CONSTRAINT_STOP_CFM:
- b3AssertConstrParams(m_flags & B3_P2P_FLAGS_CFM);
- retVal = m_cfm;
- break;
- default:
- b3AssertConstrParams(0);
- }
- }
- return retVal;
-}
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h
deleted file mode 100644
index 14762a3e35..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3Point2PointConstraint.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_POINT2POINTCONSTRAINT_H
-#define B3_POINT2POINTCONSTRAINT_H
-
-#include "Bullet3Common/b3Vector3.h"
-//#include "b3JacobianEntry.h"
-#include "b3TypedConstraint.h"
-
-class b3RigidBody;
-
-#ifdef B3_USE_DOUBLE_PRECISION
-#define b3Point2PointConstraintData b3Point2PointConstraintDoubleData
-#define b3Point2PointConstraintDataName "b3Point2PointConstraintDoubleData"
-#else
-#define b3Point2PointConstraintData b3Point2PointConstraintFloatData
-#define b3Point2PointConstraintDataName "b3Point2PointConstraintFloatData"
-#endif //B3_USE_DOUBLE_PRECISION
-
-struct b3ConstraintSetting
-{
- b3ConstraintSetting() : m_tau(b3Scalar(0.3)),
- m_damping(b3Scalar(1.)),
- m_impulseClamp(b3Scalar(0.))
- {
- }
- b3Scalar m_tau;
- b3Scalar m_damping;
- b3Scalar m_impulseClamp;
-};
-
-enum b3Point2PointFlags
-{
- B3_P2P_FLAGS_ERP = 1,
- B3_P2P_FLAGS_CFM = 2
-};
-
-/// point to point constraint between two rigidbodies each with a pivotpoint that descibes the 'ballsocket' location in local space
-B3_ATTRIBUTE_ALIGNED16(class)
-b3Point2PointConstraint : public b3TypedConstraint
-{
-#ifdef IN_PARALLELL_SOLVER
-public:
-#endif
-
- b3Vector3 m_pivotInA;
- b3Vector3 m_pivotInB;
-
- int m_flags;
- b3Scalar m_erp;
- b3Scalar m_cfm;
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3ConstraintSetting m_setting;
-
- b3Point2PointConstraint(int rbA, int rbB, const b3Vector3& pivotInA, const b3Vector3& pivotInB);
-
- //b3Point2PointConstraint(int rbA,const b3Vector3& pivotInA);
-
- virtual void getInfo1(b3ConstraintInfo1 * info, const b3RigidBodyData* bodies);
-
- void getInfo1NonVirtual(b3ConstraintInfo1 * info, const b3RigidBodyData* bodies);
-
- virtual void getInfo2(b3ConstraintInfo2 * info, const b3RigidBodyData* bodies);
-
- void getInfo2NonVirtual(b3ConstraintInfo2 * info, const b3Transform& body0_trans, const b3Transform& body1_trans);
-
- void updateRHS(b3Scalar timeStep);
-
- void setPivotA(const b3Vector3& pivotA)
- {
- m_pivotInA = pivotA;
- }
-
- void setPivotB(const b3Vector3& pivotB)
- {
- m_pivotInB = pivotB;
- }
-
- const b3Vector3& getPivotInA() const
- {
- return m_pivotInA;
- }
-
- const b3Vector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, b3Scalar value, int axis = -1);
- ///return the local value of parameter
- virtual b3Scalar getParam(int num, int axis = -1) const;
-
- // virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- // virtual const char* serialize(void* dataBuffer, b3Serializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3Point2PointConstraintFloatData
-{
- b3TypedConstraintData m_typeConstraintData;
- b3Vector3FloatData m_pivotInA;
- b3Vector3FloatData m_pivotInB;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3Point2PointConstraintDoubleData
-{
- b3TypedConstraintData m_typeConstraintData;
- b3Vector3DoubleData m_pivotInA;
- b3Vector3DoubleData m_pivotInB;
-};
-
-/*
-B3_FORCE_INLINE int b3Point2PointConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(b3Point2PointConstraintData);
-
-}
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
-B3_FORCE_INLINE const char* b3Point2PointConstraint::serialize(void* dataBuffer, b3Serializer* serializer) const
-{
- b3Point2PointConstraintData* p2pData = (b3Point2PointConstraintData*)dataBuffer;
-
- b3TypedConstraint::serialize(&p2pData->m_typeConstraintData,serializer);
- m_pivotInA.serialize(p2pData->m_pivotInA);
- m_pivotInB.serialize(p2pData->m_pivotInB);
-
- return b3Point2PointConstraintDataName;
-}
-*/
-
-#endif //B3_POINT2POINTCONSTRAINT_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverBody.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverBody.h
deleted file mode 100644
index 196d0e5793..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverBody.h
+++ /dev/null
@@ -1,281 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_SOLVER_BODY_H
-#define B3_SOLVER_BODY_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3Matrix3x3.h"
-
-#include "Bullet3Common/b3AlignedAllocator.h"
-#include "Bullet3Common/b3TransformUtil.h"
-
-///Until we get other contributions, only use SIMD on Windows, when using Visual Studio 2008 or later, and not double precision
-#ifdef B3_USE_SSE
-#define USE_SIMD 1
-#endif //
-
-#ifdef USE_SIMD
-
-struct b3SimdScalar
-{
- B3_FORCE_INLINE b3SimdScalar()
- {
- }
-
- B3_FORCE_INLINE b3SimdScalar(float fl)
- : m_vec128(_mm_set1_ps(fl))
- {
- }
-
- B3_FORCE_INLINE b3SimdScalar(__m128 v128)
- : m_vec128(v128)
- {
- }
- union {
- __m128 m_vec128;
- float m_floats[4];
- float x, y, z, w;
- int m_ints[4];
- b3Scalar m_unusedPadding;
- };
- B3_FORCE_INLINE __m128 get128()
- {
- return m_vec128;
- }
-
- B3_FORCE_INLINE const __m128 get128() const
- {
- return m_vec128;
- }
-
- B3_FORCE_INLINE void set128(__m128 v128)
- {
- m_vec128 = v128;
- }
-
- B3_FORCE_INLINE operator __m128()
- {
- return m_vec128;
- }
- B3_FORCE_INLINE operator const __m128() const
- {
- return m_vec128;
- }
-
- B3_FORCE_INLINE operator float() const
- {
- return m_floats[0];
- }
-};
-
-///@brief Return the elementwise product of two b3SimdScalar
-B3_FORCE_INLINE b3SimdScalar
-operator*(const b3SimdScalar& v1, const b3SimdScalar& v2)
-{
- return b3SimdScalar(_mm_mul_ps(v1.get128(), v2.get128()));
-}
-
-///@brief Return the elementwise product of two b3SimdScalar
-B3_FORCE_INLINE b3SimdScalar
-operator+(const b3SimdScalar& v1, const b3SimdScalar& v2)
-{
- return b3SimdScalar(_mm_add_ps(v1.get128(), v2.get128()));
-}
-
-#else
-#define b3SimdScalar b3Scalar
-#endif
-
-///The b3SolverBody is an internal datastructure for the constraint solver. Only necessary data is packed to increase cache coherence/performance.
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3SolverBody
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
- b3Transform m_worldTransform;
- b3Vector3 m_deltaLinearVelocity;
- b3Vector3 m_deltaAngularVelocity;
- b3Vector3 m_angularFactor;
- b3Vector3 m_linearFactor;
- b3Vector3 m_invMass;
- b3Vector3 m_pushVelocity;
- b3Vector3 m_turnVelocity;
- b3Vector3 m_linearVelocity;
- b3Vector3 m_angularVelocity;
-
- union {
- void* m_originalBody;
- int m_originalBodyIndex;
- };
-
- int padding[3];
-
- void setWorldTransform(const b3Transform& worldTransform)
- {
- m_worldTransform = worldTransform;
- }
-
- const b3Transform& getWorldTransform() const
- {
- return m_worldTransform;
- }
-
- B3_FORCE_INLINE void getVelocityInLocalPointObsolete(const b3Vector3& rel_pos, b3Vector3& velocity) const
- {
- if (m_originalBody)
- velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos);
- else
- velocity.setValue(0, 0, 0);
- }
-
- B3_FORCE_INLINE void getAngularVelocity(b3Vector3 & angVel) const
- {
- if (m_originalBody)
- angVel = m_angularVelocity + m_deltaAngularVelocity;
- else
- angVel.setValue(0, 0, 0);
- }
-
- //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position
- B3_FORCE_INLINE void applyImpulse(const b3Vector3& linearComponent, const b3Vector3& angularComponent, const b3Scalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- B3_FORCE_INLINE void internalApplyPushImpulse(const b3Vector3& linearComponent, const b3Vector3& angularComponent, b3Scalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_pushVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_turnVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- const b3Vector3& getDeltaLinearVelocity() const
- {
- return m_deltaLinearVelocity;
- }
-
- const b3Vector3& getDeltaAngularVelocity() const
- {
- return m_deltaAngularVelocity;
- }
-
- const b3Vector3& getPushVelocity() const
- {
- return m_pushVelocity;
- }
-
- const b3Vector3& getTurnVelocity() const
- {
- return m_turnVelocity;
- }
-
- ////////////////////////////////////////////////
- ///some internal methods, don't use them
-
- b3Vector3& internalGetDeltaLinearVelocity()
- {
- return m_deltaLinearVelocity;
- }
-
- b3Vector3& internalGetDeltaAngularVelocity()
- {
- return m_deltaAngularVelocity;
- }
-
- const b3Vector3& internalGetAngularFactor() const
- {
- return m_angularFactor;
- }
-
- const b3Vector3& internalGetInvMass() const
- {
- return m_invMass;
- }
-
- void internalSetInvMass(const b3Vector3& invMass)
- {
- m_invMass = invMass;
- }
-
- b3Vector3& internalGetPushVelocity()
- {
- return m_pushVelocity;
- }
-
- b3Vector3& internalGetTurnVelocity()
- {
- return m_turnVelocity;
- }
-
- B3_FORCE_INLINE void internalGetVelocityInLocalPointObsolete(const b3Vector3& rel_pos, b3Vector3& velocity) const
- {
- velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos);
- }
-
- B3_FORCE_INLINE void internalGetAngularVelocity(b3Vector3 & angVel) const
- {
- angVel = m_angularVelocity + m_deltaAngularVelocity;
- }
-
- //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position
- B3_FORCE_INLINE void internalApplyImpulse(const b3Vector3& linearComponent, const b3Vector3& angularComponent, const b3Scalar impulseMagnitude)
- {
- //if (m_originalBody)
- {
- m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- void writebackVelocity()
- {
- //if (m_originalBody>=0)
- {
- m_linearVelocity += m_deltaLinearVelocity;
- m_angularVelocity += m_deltaAngularVelocity;
-
- //m_originalBody->setCompanionId(-1);
- }
- }
-
- void writebackVelocityAndTransform(b3Scalar timeStep, b3Scalar splitImpulseTurnErp)
- {
- (void)timeStep;
- if (m_originalBody)
- {
- m_linearVelocity += m_deltaLinearVelocity;
- m_angularVelocity += m_deltaAngularVelocity;
-
- //correct the position/orientation based on push/turn recovery
- b3Transform newTransform;
- if (m_pushVelocity[0] != 0.f || m_pushVelocity[1] != 0 || m_pushVelocity[2] != 0 || m_turnVelocity[0] != 0.f || m_turnVelocity[1] != 0 || m_turnVelocity[2] != 0)
- {
- // b3Quaternion orn = m_worldTransform.getRotation();
- b3TransformUtil::integrateTransform(m_worldTransform, m_pushVelocity, m_turnVelocity * splitImpulseTurnErp, timeStep, newTransform);
- m_worldTransform = newTransform;
- }
- //m_worldTransform.setRotation(orn);
- //m_originalBody->setCompanionId(-1);
- }
- }
-};
-
-#endif //B3_SOLVER_BODY_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverConstraint.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverConstraint.h
deleted file mode 100644
index 4927ae4288..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3SolverConstraint.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_SOLVER_CONSTRAINT_H
-#define B3_SOLVER_CONSTRAINT_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3Matrix3x3.h"
-//#include "b3JacobianEntry.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-//#define NO_FRICTION_TANGENTIALS 1
-#include "b3SolverBody.h"
-
-///1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and friction constraints.
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3SolverConstraint
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3Vector3 m_relpos1CrossNormal;
- b3Vector3 m_contactNormal;
-
- b3Vector3 m_relpos2CrossNormal;
- //b3Vector3 m_contactNormal2;//usually m_contactNormal2 == -m_contactNormal
-
- b3Vector3 m_angularComponentA;
- b3Vector3 m_angularComponentB;
-
- mutable b3SimdScalar m_appliedPushImpulse;
- mutable b3SimdScalar m_appliedImpulse;
- int m_padding1;
- int m_padding2;
- b3Scalar m_friction;
- b3Scalar m_jacDiagABInv;
- b3Scalar m_rhs;
- b3Scalar m_cfm;
-
- b3Scalar m_lowerLimit;
- b3Scalar m_upperLimit;
- b3Scalar m_rhsPenetration;
- union {
- void* m_originalContactPoint;
- b3Scalar m_unusedPadding4;
- };
-
- int m_overrideNumSolverIterations;
- int m_frictionIndex;
- int m_solverBodyIdA;
- int m_solverBodyIdB;
-
- enum b3SolverConstraintType
- {
- B3_SOLVER_CONTACT_1D = 0,
- B3_SOLVER_FRICTION_1D
- };
-};
-
-typedef b3AlignedObjectArray<b3SolverConstraint> b3ConstraintArray;
-
-#endif //B3_SOLVER_CONSTRAINT_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.cpp b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.cpp
deleted file mode 100644
index 885e277d8c..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.cpp
+++ /dev/null
@@ -1,151 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3TypedConstraint.h"
-//#include "Bullet3Common/b3Serializer.h"
-
-#define B3_DEFAULT_DEBUGDRAW_SIZE b3Scalar(0.3f)
-
-b3TypedConstraint::b3TypedConstraint(b3TypedConstraintType type, int rbA, int rbB)
- : b3TypedObject(type),
- m_userConstraintType(-1),
- m_userConstraintPtr((void*)-1),
- m_breakingImpulseThreshold(B3_INFINITY),
- m_isEnabled(true),
- m_needsFeedback(false),
- m_overrideNumSolverIterations(-1),
- m_rbA(rbA),
- m_rbB(rbB),
- m_appliedImpulse(b3Scalar(0.)),
- m_dbgDrawSize(B3_DEFAULT_DEBUGDRAW_SIZE),
- m_jointFeedback(0)
-{
-}
-
-b3Scalar b3TypedConstraint::getMotorFactor(b3Scalar pos, b3Scalar lowLim, b3Scalar uppLim, b3Scalar vel, b3Scalar timeFact)
-{
- if (lowLim > uppLim)
- {
- return b3Scalar(1.0f);
- }
- else if (lowLim == uppLim)
- {
- return b3Scalar(0.0f);
- }
- b3Scalar lim_fact = b3Scalar(1.0f);
- b3Scalar delta_max = vel / timeFact;
- if (delta_max < b3Scalar(0.0f))
- {
- if ((pos >= lowLim) && (pos < (lowLim - delta_max)))
- {
- lim_fact = (lowLim - pos) / delta_max;
- }
- else if (pos < lowLim)
- {
- lim_fact = b3Scalar(0.0f);
- }
- else
- {
- lim_fact = b3Scalar(1.0f);
- }
- }
- else if (delta_max > b3Scalar(0.0f))
- {
- if ((pos <= uppLim) && (pos > (uppLim - delta_max)))
- {
- lim_fact = (uppLim - pos) / delta_max;
- }
- else if (pos > uppLim)
- {
- lim_fact = b3Scalar(0.0f);
- }
- else
- {
- lim_fact = b3Scalar(1.0f);
- }
- }
- else
- {
- lim_fact = b3Scalar(0.0f);
- }
- return lim_fact;
-}
-
-void b3AngularLimit::set(b3Scalar low, b3Scalar high, b3Scalar _softness, b3Scalar _biasFactor, b3Scalar _relaxationFactor)
-{
- m_halfRange = (high - low) / 2.0f;
- m_center = b3NormalizeAngle(low + m_halfRange);
- m_softness = _softness;
- m_biasFactor = _biasFactor;
- m_relaxationFactor = _relaxationFactor;
-}
-
-void b3AngularLimit::test(const b3Scalar angle)
-{
- m_correction = 0.0f;
- m_sign = 0.0f;
- m_solveLimit = false;
-
- if (m_halfRange >= 0.0f)
- {
- b3Scalar deviation = b3NormalizeAngle(angle - m_center);
- if (deviation < -m_halfRange)
- {
- m_solveLimit = true;
- m_correction = -(deviation + m_halfRange);
- m_sign = +1.0f;
- }
- else if (deviation > m_halfRange)
- {
- m_solveLimit = true;
- m_correction = m_halfRange - deviation;
- m_sign = -1.0f;
- }
- }
-}
-
-b3Scalar b3AngularLimit::getError() const
-{
- return m_correction * m_sign;
-}
-
-void b3AngularLimit::fit(b3Scalar& angle) const
-{
- if (m_halfRange > 0.0f)
- {
- b3Scalar relativeAngle = b3NormalizeAngle(angle - m_center);
- if (!b3Equal(relativeAngle, m_halfRange))
- {
- if (relativeAngle > 0.0f)
- {
- angle = getHigh();
- }
- else
- {
- angle = getLow();
- }
- }
- }
-}
-
-b3Scalar b3AngularLimit::getLow() const
-{
- return b3NormalizeAngle(m_center - m_halfRange);
-}
-
-b3Scalar b3AngularLimit::getHigh() const
-{
- return b3NormalizeAngle(m_center + m_halfRange);
-}
diff --git a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h b/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h
deleted file mode 100644
index f74aec4d3c..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h
+++ /dev/null
@@ -1,469 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2010 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_TYPED_CONSTRAINT_H
-#define B3_TYPED_CONSTRAINT_H
-
-#include "Bullet3Common/b3Scalar.h"
-#include "b3SolverConstraint.h"
-
-class b3Serializer;
-
-//Don't change any of the existing enum values, so add enum types at the end for serialization compatibility
-enum b3TypedConstraintType
-{
- B3_POINT2POINT_CONSTRAINT_TYPE = 3,
- B3_HINGE_CONSTRAINT_TYPE,
- B3_CONETWIST_CONSTRAINT_TYPE,
- B3_D6_CONSTRAINT_TYPE,
- B3_SLIDER_CONSTRAINT_TYPE,
- B3_CONTACT_CONSTRAINT_TYPE,
- B3_D6_SPRING_CONSTRAINT_TYPE,
- B3_GEAR_CONSTRAINT_TYPE,
- B3_FIXED_CONSTRAINT_TYPE,
- B3_MAX_CONSTRAINT_TYPE
-};
-
-enum b3ConstraintParams
-{
- B3_CONSTRAINT_ERP = 1,
- B3_CONSTRAINT_STOP_ERP,
- B3_CONSTRAINT_CFM,
- B3_CONSTRAINT_STOP_CFM
-};
-
-#if 1
-#define b3AssertConstrParams(_par) b3Assert(_par)
-#else
-#define b3AssertConstrParams(_par)
-#endif
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3JointFeedback
-{
- b3Vector3 m_appliedForceBodyA;
- b3Vector3 m_appliedTorqueBodyA;
- b3Vector3 m_appliedForceBodyB;
- b3Vector3 m_appliedTorqueBodyB;
-};
-
-struct b3RigidBodyData;
-
-///TypedConstraint is the baseclass for Bullet constraints and vehicles
-B3_ATTRIBUTE_ALIGNED16(class)
-b3TypedConstraint : public b3TypedObject
-{
- int m_userConstraintType;
-
- union {
- int m_userConstraintId;
- void* m_userConstraintPtr;
- };
-
- b3Scalar m_breakingImpulseThreshold;
- bool m_isEnabled;
- bool m_needsFeedback;
- int m_overrideNumSolverIterations;
-
- b3TypedConstraint& operator=(b3TypedConstraint& other)
- {
- b3Assert(0);
- (void)other;
- return *this;
- }
-
-protected:
- int m_rbA;
- int m_rbB;
- b3Scalar m_appliedImpulse;
- b3Scalar m_dbgDrawSize;
- b3JointFeedback* m_jointFeedback;
-
- ///internal method used by the constraint solver, don't use them directly
- b3Scalar getMotorFactor(b3Scalar pos, b3Scalar lowLim, b3Scalar uppLim, b3Scalar vel, b3Scalar timeFact);
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- virtual ~b3TypedConstraint(){};
- b3TypedConstraint(b3TypedConstraintType type, int bodyA, int bodyB);
-
- struct b3ConstraintInfo1
- {
- int m_numConstraintRows, nub;
- };
-
- struct b3ConstraintInfo2
- {
- // integrator parameters: frames per second (1/stepsize), default error
- // reduction parameter (0..1).
- b3Scalar fps, erp;
-
- // for the first and second body, pointers to two (linear and angular)
- // n*3 jacobian sub matrices, stored by rows. these matrices will have
- // been initialized to 0 on entry. if the second body is zero then the
- // J2xx pointers may be 0.
- b3Scalar *m_J1linearAxis, *m_J1angularAxis, *m_J2linearAxis, *m_J2angularAxis;
-
- // elements to jump from one row to the next in J's
- int rowskip;
-
- // right hand sides of the equation J*v = c + cfm * lambda. cfm is the
- // "constraint force mixing" vector. c is set to zero on entry, cfm is
- // set to a constant value (typically very small or zero) value on entry.
- b3Scalar *m_constraintError, *cfm;
-
- // lo and hi limits for variables (set to -/+ infinity on entry).
- b3Scalar *m_lowerLimit, *m_upperLimit;
-
- // findex vector for variables. see the LCP solver interface for a
- // description of what this does. this is set to -1 on entry.
- // note that the returned indexes are relative to the first index of
- // the constraint.
- int* findex;
- // number of solver iterations
- int m_numIterations;
-
- //damping of the velocity
- b3Scalar m_damping;
- };
-
- int getOverrideNumSolverIterations() const
- {
- return m_overrideNumSolverIterations;
- }
-
- ///override the number of constraint solver iterations used to solve this constraint
- ///-1 will use the default number of iterations, as specified in SolverInfo.m_numIterations
- void setOverrideNumSolverIterations(int overideNumIterations)
- {
- m_overrideNumSolverIterations = overideNumIterations;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void setupSolverConstraint(b3ConstraintArray & ca, int solverBodyA, int solverBodyB, b3Scalar timeStep)
- {
- (void)ca;
- (void)solverBodyA;
- (void)solverBodyB;
- (void)timeStep;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void getInfo1(b3ConstraintInfo1 * info, const b3RigidBodyData* bodies) = 0;
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void getInfo2(b3ConstraintInfo2 * info, const b3RigidBodyData* bodies) = 0;
-
- ///internal method used by the constraint solver, don't use them directly
- void internalSetAppliedImpulse(b3Scalar appliedImpulse)
- {
- m_appliedImpulse = appliedImpulse;
- }
- ///internal method used by the constraint solver, don't use them directly
- b3Scalar internalGetAppliedImpulse()
- {
- return m_appliedImpulse;
- }
-
- b3Scalar getBreakingImpulseThreshold() const
- {
- return m_breakingImpulseThreshold;
- }
-
- void setBreakingImpulseThreshold(b3Scalar threshold)
- {
- m_breakingImpulseThreshold = threshold;
- }
-
- bool isEnabled() const
- {
- return m_isEnabled;
- }
-
- void setEnabled(bool enabled)
- {
- m_isEnabled = enabled;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void solveConstraintObsolete(b3SolverBody& /*bodyA*/, b3SolverBody& /*bodyB*/, b3Scalar /*timeStep*/){};
-
- int getRigidBodyA() const
- {
- return m_rbA;
- }
- int getRigidBodyB() const
- {
- return m_rbB;
- }
-
- int getRigidBodyA()
- {
- return m_rbA;
- }
- int getRigidBodyB()
- {
- return m_rbB;
- }
-
- int getUserConstraintType() const
- {
- return m_userConstraintType;
- }
-
- void setUserConstraintType(int userConstraintType)
- {
- m_userConstraintType = userConstraintType;
- };
-
- void setUserConstraintId(int uid)
- {
- m_userConstraintId = uid;
- }
-
- int getUserConstraintId() const
- {
- return m_userConstraintId;
- }
-
- void setUserConstraintPtr(void* ptr)
- {
- m_userConstraintPtr = ptr;
- }
-
- void* getUserConstraintPtr()
- {
- return m_userConstraintPtr;
- }
-
- void setJointFeedback(b3JointFeedback * jointFeedback)
- {
- m_jointFeedback = jointFeedback;
- }
-
- const b3JointFeedback* getJointFeedback() const
- {
- return m_jointFeedback;
- }
-
- b3JointFeedback* getJointFeedback()
- {
- return m_jointFeedback;
- }
-
- int getUid() const
- {
- return m_userConstraintId;
- }
-
- bool needsFeedback() const
- {
- return m_needsFeedback;
- }
-
- ///enableFeedback will allow to read the applied linear and angular impulse
- ///use getAppliedImpulse, getAppliedLinearImpulse and getAppliedAngularImpulse to read feedback information
- void enableFeedback(bool needsFeedback)
- {
- m_needsFeedback = needsFeedback;
- }
-
- ///getAppliedImpulse is an estimated total applied impulse.
- ///This feedback could be used to determine breaking constraints or playing sounds.
- b3Scalar getAppliedImpulse() const
- {
- b3Assert(m_needsFeedback);
- return m_appliedImpulse;
- }
-
- b3TypedConstraintType getConstraintType() const
- {
- return b3TypedConstraintType(m_objectType);
- }
-
- void setDbgDrawSize(b3Scalar dbgDrawSize)
- {
- m_dbgDrawSize = dbgDrawSize;
- }
- b3Scalar getDbgDrawSize()
- {
- return m_dbgDrawSize;
- }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, b3Scalar value, int axis = -1) = 0;
-
- ///return the local value of parameter
- virtual b3Scalar getParam(int num, int axis = -1) const = 0;
-
- // virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- //virtual const char* serialize(void* dataBuffer, b3Serializer* serializer) const;
-};
-
-// returns angle in range [-B3_2_PI, B3_2_PI], closest to one of the limits
-// all arguments should be normalized angles (i.e. in range [-B3_PI, B3_PI])
-B3_FORCE_INLINE b3Scalar b3AdjustAngleToLimits(b3Scalar angleInRadians, b3Scalar angleLowerLimitInRadians, b3Scalar angleUpperLimitInRadians)
-{
- if (angleLowerLimitInRadians >= angleUpperLimitInRadians)
- {
- return angleInRadians;
- }
- else if (angleInRadians < angleLowerLimitInRadians)
- {
- b3Scalar diffLo = b3Fabs(b3NormalizeAngle(angleLowerLimitInRadians - angleInRadians));
- b3Scalar diffHi = b3Fabs(b3NormalizeAngle(angleUpperLimitInRadians - angleInRadians));
- return (diffLo < diffHi) ? angleInRadians : (angleInRadians + B3_2_PI);
- }
- else if (angleInRadians > angleUpperLimitInRadians)
- {
- b3Scalar diffHi = b3Fabs(b3NormalizeAngle(angleInRadians - angleUpperLimitInRadians));
- b3Scalar diffLo = b3Fabs(b3NormalizeAngle(angleInRadians - angleLowerLimitInRadians));
- return (diffLo < diffHi) ? (angleInRadians - B3_2_PI) : angleInRadians;
- }
- else
- {
- return angleInRadians;
- }
-}
-
-// clang-format off
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3TypedConstraintData
-{
- int m_bodyA;
- int m_bodyB;
- char *m_name;
-
- int m_objectType;
- int m_userConstraintType;
- int m_userConstraintId;
- int m_needsFeedback;
-
- float m_appliedImpulse;
- float m_dbgDrawSize;
-
- int m_disableCollisionsBetweenLinkedBodies;
- int m_overrideNumSolverIterations;
-
- float m_breakingImpulseThreshold;
- int m_isEnabled;
-
-};
-
-// clang-format on
-
-/*B3_FORCE_INLINE int b3TypedConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(b3TypedConstraintData);
-}
-*/
-
-class b3AngularLimit
-{
-private:
- b3Scalar
- m_center,
- m_halfRange,
- m_softness,
- m_biasFactor,
- m_relaxationFactor,
- m_correction,
- m_sign;
-
- bool
- m_solveLimit;
-
-public:
- /// Default constructor initializes limit as inactive, allowing free constraint movement
- b3AngularLimit()
- : m_center(0.0f),
- m_halfRange(-1.0f),
- m_softness(0.9f),
- m_biasFactor(0.3f),
- m_relaxationFactor(1.0f),
- m_correction(0.0f),
- m_sign(0.0f),
- m_solveLimit(false)
- {
- }
-
- /// Sets all limit's parameters.
- /// When low > high limit becomes inactive.
- /// When high - low > 2PI limit is ineffective too becouse no angle can exceed the limit
- void set(b3Scalar low, b3Scalar high, b3Scalar _softness = 0.9f, b3Scalar _biasFactor = 0.3f, b3Scalar _relaxationFactor = 1.0f);
-
- /// Checks conastaint angle against limit. If limit is active and the angle violates the limit
- /// correction is calculated.
- void test(const b3Scalar angle);
-
- /// Returns limit's softness
- inline b3Scalar getSoftness() const
- {
- return m_softness;
- }
-
- /// Returns limit's bias factor
- inline b3Scalar getBiasFactor() const
- {
- return m_biasFactor;
- }
-
- /// Returns limit's relaxation factor
- inline b3Scalar getRelaxationFactor() const
- {
- return m_relaxationFactor;
- }
-
- /// Returns correction value evaluated when test() was invoked
- inline b3Scalar getCorrection() const
- {
- return m_correction;
- }
-
- /// Returns sign value evaluated when test() was invoked
- inline b3Scalar getSign() const
- {
- return m_sign;
- }
-
- /// Gives half of the distance between min and max limit angle
- inline b3Scalar getHalfRange() const
- {
- return m_halfRange;
- }
-
- /// Returns true when the last test() invocation recognized limit violation
- inline bool isLimit() const
- {
- return m_solveLimit;
- }
-
- /// Checks given angle against limit. If limit is active and angle doesn't fit it, the angle
- /// returned is modified so it equals to the limit closest to given angle.
- void fit(b3Scalar& angle) const;
-
- /// Returns correction value multiplied by sign value
- b3Scalar getError() const;
-
- b3Scalar getLow() const;
-
- b3Scalar getHigh() const;
-};
-
-#endif //B3_TYPED_CONSTRAINT_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.cpp b/thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.cpp
deleted file mode 100644
index f1080d9d5e..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.cpp
+++ /dev/null
@@ -1,447 +0,0 @@
-#include "b3CpuRigidBodyPipeline.h"
-
-#include "Bullet3Dynamics/shared/b3IntegrateTransforms.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3CpuNarrowPhase.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Dynamics/shared/b3ContactConstraint4.h"
-#include "Bullet3Dynamics/shared/b3Inertia.h"
-
-struct b3CpuRigidBodyPipelineInternalData
-{
- b3AlignedObjectArray<b3RigidBodyData> m_rigidBodies;
- b3AlignedObjectArray<b3Inertia> m_inertias;
- b3AlignedObjectArray<b3Aabb> m_aabbWorldSpace;
-
- b3DynamicBvhBroadphase* m_bp;
- b3CpuNarrowPhase* m_np;
- b3Config m_config;
-};
-
-b3CpuRigidBodyPipeline::b3CpuRigidBodyPipeline(class b3CpuNarrowPhase* narrowphase, struct b3DynamicBvhBroadphase* broadphaseDbvt, const b3Config& config)
-{
- m_data = new b3CpuRigidBodyPipelineInternalData;
- m_data->m_np = narrowphase;
- m_data->m_bp = broadphaseDbvt;
- m_data->m_config = config;
-}
-
-b3CpuRigidBodyPipeline::~b3CpuRigidBodyPipeline()
-{
- delete m_data;
-}
-
-void b3CpuRigidBodyPipeline::updateAabbWorldSpace()
-{
- for (int i = 0; i < this->getNumBodies(); i++)
- {
- b3RigidBodyData* body = &m_data->m_rigidBodies[i];
- b3Float4 position = body->m_pos;
- b3Quat orientation = body->m_quat;
-
- int collidableIndex = body->m_collidableIdx;
- b3Collidable& collidable = m_data->m_np->getCollidableCpu(collidableIndex);
- int shapeIndex = collidable.m_shapeIndex;
-
- if (shapeIndex >= 0)
- {
- b3Aabb localAabb = m_data->m_np->getLocalSpaceAabb(shapeIndex);
- b3Aabb& worldAabb = m_data->m_aabbWorldSpace[i];
- float margin = 0.f;
- b3TransformAabb2(localAabb.m_minVec, localAabb.m_maxVec, margin, position, orientation, &worldAabb.m_minVec, &worldAabb.m_maxVec);
- m_data->m_bp->setAabb(i, worldAabb.m_minVec, worldAabb.m_maxVec, 0);
- }
- }
-}
-
-void b3CpuRigidBodyPipeline::computeOverlappingPairs()
-{
- int numPairs = m_data->m_bp->getOverlappingPairCache()->getNumOverlappingPairs();
- m_data->m_bp->calculateOverlappingPairs();
- numPairs = m_data->m_bp->getOverlappingPairCache()->getNumOverlappingPairs();
- printf("numPairs=%d\n", numPairs);
-}
-
-void b3CpuRigidBodyPipeline::computeContactPoints()
-{
- b3AlignedObjectArray<b3Int4>& pairs = m_data->m_bp->getOverlappingPairCache()->getOverlappingPairArray();
-
- m_data->m_np->computeContacts(pairs, m_data->m_aabbWorldSpace, m_data->m_rigidBodies);
-}
-void b3CpuRigidBodyPipeline::stepSimulation(float deltaTime)
-{
- //update world space aabb's
- updateAabbWorldSpace();
-
- //compute overlapping pairs
- computeOverlappingPairs();
-
- //compute contacts
- computeContactPoints();
-
- //solve contacts
-
- //update transforms
- integrate(deltaTime);
-}
-
-static inline float b3CalcRelVel(const b3Vector3& l0, const b3Vector3& l1, const b3Vector3& a0, const b3Vector3& a1,
- const b3Vector3& linVel0, const b3Vector3& angVel0, const b3Vector3& linVel1, const b3Vector3& angVel1)
-{
- return b3Dot(l0, linVel0) + b3Dot(a0, angVel0) + b3Dot(l1, linVel1) + b3Dot(a1, angVel1);
-}
-
-static inline void b3SetLinearAndAngular(const b3Vector3& n, const b3Vector3& r0, const b3Vector3& r1,
- b3Vector3& linear, b3Vector3& angular0, b3Vector3& angular1)
-{
- linear = -n;
- angular0 = -b3Cross(r0, n);
- angular1 = b3Cross(r1, n);
-}
-
-static inline void b3SolveContact(b3ContactConstraint4& cs,
- const b3Vector3& posA, b3Vector3& linVelA, b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, b3Vector3& linVelB, b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB,
- float maxRambdaDt[4], float minRambdaDt[4])
-{
- b3Vector3 dLinVelA;
- dLinVelA.setZero();
- b3Vector3 dAngVelA;
- dAngVelA.setZero();
- b3Vector3 dLinVelB;
- dLinVelB.setZero();
- b3Vector3 dAngVelB;
- dAngVelB.setZero();
-
- for (int ic = 0; ic < 4; ic++)
- {
- // dont necessary because this makes change to 0
- if (cs.m_jacCoeffInv[ic] == 0.f) continue;
-
- {
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = cs.m_worldPos[ic] - (b3Vector3&)posA;
- b3Vector3 r1 = cs.m_worldPos[ic] - (b3Vector3&)posB;
- b3SetLinearAndAngular((const b3Vector3&)-cs.m_linear, (const b3Vector3&)r0, (const b3Vector3&)r1, linear, angular0, angular1);
-
- float rambdaDt = b3CalcRelVel((const b3Vector3&)cs.m_linear, (const b3Vector3&)-cs.m_linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB) +
- cs.m_b[ic];
- rambdaDt *= cs.m_jacCoeffInv[ic];
-
- {
- float prevSum = cs.m_appliedRambdaDt[ic];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt[ic]);
- updated = b3Min(updated, maxRambdaDt[ic]);
- rambdaDt = updated - prevSum;
- cs.m_appliedRambdaDt[ic] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-#ifdef _WIN32
- b3Assert(_finite(linImp0.getX()));
- b3Assert(_finite(linImp1.getX()));
-#endif
- {
- linVelA += linImp0;
- angVelA += angImp0;
- linVelB += linImp1;
- angVelB += angImp1;
- }
- }
- }
-}
-
-static inline void b3SolveFriction(b3ContactConstraint4& cs,
- const b3Vector3& posA, b3Vector3& linVelA, b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, b3Vector3& linVelB, b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB,
- float maxRambdaDt[4], float minRambdaDt[4])
-{
- if (cs.m_fJacCoeffInv[0] == 0 && cs.m_fJacCoeffInv[0] == 0) return;
- const b3Vector3& center = (const b3Vector3&)cs.m_center;
-
- b3Vector3 n = -(const b3Vector3&)cs.m_linear;
-
- b3Vector3 tangent[2];
-
- b3PlaneSpace1(n, tangent[0], tangent[1]);
-
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = center - posA;
- b3Vector3 r1 = center - posB;
- for (int i = 0; i < 2; i++)
- {
- b3SetLinearAndAngular(tangent[i], r0, r1, linear, angular0, angular1);
- float rambdaDt = b3CalcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB);
- rambdaDt *= cs.m_fJacCoeffInv[i];
-
- {
- float prevSum = cs.m_fAppliedRambdaDt[i];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt[i]);
- updated = b3Min(updated, maxRambdaDt[i]);
- rambdaDt = updated - prevSum;
- cs.m_fAppliedRambdaDt[i] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-#ifdef _WIN32
- b3Assert(_finite(linImp0.getX()));
- b3Assert(_finite(linImp1.getX()));
-#endif
- linVelA += linImp0;
- angVelA += angImp0;
- linVelB += linImp1;
- angVelB += angImp1;
- }
-
- { // angular damping for point constraint
- b3Vector3 ab = (posB - posA).normalized();
- b3Vector3 ac = (center - posA).normalized();
- if (b3Dot(ab, ac) > 0.95f || (invMassA == 0.f || invMassB == 0.f))
- {
- float angNA = b3Dot(n, angVelA);
- float angNB = b3Dot(n, angVelB);
-
- angVelA -= (angNA * 0.1f) * n;
- angVelB -= (angNB * 0.1f) * n;
- }
- }
-}
-
-struct b3SolveTask // : public ThreadPool::Task
-{
- b3SolveTask(b3AlignedObjectArray<b3RigidBodyData>& bodies,
- b3AlignedObjectArray<b3Inertia>& shapes,
- b3AlignedObjectArray<b3ContactConstraint4>& constraints,
- int start, int nConstraints,
- int maxNumBatches,
- b3AlignedObjectArray<int>* wgUsedBodies, int curWgidx)
- : m_bodies(bodies), m_shapes(shapes), m_constraints(constraints), m_wgUsedBodies(wgUsedBodies), m_curWgidx(curWgidx), m_start(start), m_nConstraints(nConstraints), m_solveFriction(true), m_maxNumBatches(maxNumBatches)
- {
- }
-
- unsigned short int getType() { return 0; }
-
- void run(int tIdx)
- {
- b3AlignedObjectArray<int> usedBodies;
- //printf("run..............\n");
-
- for (int bb = 0; bb < m_maxNumBatches; bb++)
- {
- usedBodies.resize(0);
- for (int ic = m_nConstraints - 1; ic >= 0; ic--)
- //for(int ic=0; ic<m_nConstraints; ic++)
- {
- int i = m_start + ic;
- if (m_constraints[i].m_batchIdx != bb)
- continue;
-
- float frictionCoeff = b3GetFrictionCoeff(&m_constraints[i]);
- int aIdx = (int)m_constraints[i].m_bodyA;
- int bIdx = (int)m_constraints[i].m_bodyB;
- //int localBatch = m_constraints[i].m_batchIdx;
- b3RigidBodyData& bodyA = m_bodies[aIdx];
- b3RigidBodyData& bodyB = m_bodies[bIdx];
-
-#if 0
- if ((bodyA.m_invMass) && (bodyB.m_invMass))
- {
- // printf("aIdx=%d, bIdx=%d\n", aIdx,bIdx);
- }
- if (bIdx==10)
- {
- //printf("ic(b)=%d, localBatch=%d\n",ic,localBatch);
- }
-#endif
- if (aIdx == 10)
- {
- //printf("ic(a)=%d, localBatch=%d\n",ic,localBatch);
- }
- if (usedBodies.size() < (aIdx + 1))
- {
- usedBodies.resize(aIdx + 1, 0);
- }
-
- if (usedBodies.size() < (bIdx + 1))
- {
- usedBodies.resize(bIdx + 1, 0);
- }
-
- if (bodyA.m_invMass)
- {
- b3Assert(usedBodies[aIdx] == 0);
- usedBodies[aIdx]++;
- }
-
- if (bodyB.m_invMass)
- {
- b3Assert(usedBodies[bIdx] == 0);
- usedBodies[bIdx]++;
- }
-
- if (!m_solveFriction)
- {
- float maxRambdaDt[4] = {FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX};
- float minRambdaDt[4] = {0.f, 0.f, 0.f, 0.f};
-
- b3SolveContact(m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, (const b3Matrix3x3&)m_shapes[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, (const b3Matrix3x3&)m_shapes[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt);
- }
- else
- {
- float maxRambdaDt[4] = {FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX};
- float minRambdaDt[4] = {0.f, 0.f, 0.f, 0.f};
-
- float sum = 0;
- for (int j = 0; j < 4; j++)
- {
- sum += m_constraints[i].m_appliedRambdaDt[j];
- }
- frictionCoeff = 0.7f;
- for (int j = 0; j < 4; j++)
- {
- maxRambdaDt[j] = frictionCoeff * sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
-
- b3SolveFriction(m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, (const b3Matrix3x3&)m_shapes[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, (const b3Matrix3x3&)m_shapes[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt);
- }
- }
-
- if (m_wgUsedBodies)
- {
- if (m_wgUsedBodies[m_curWgidx].size() < usedBodies.size())
- {
- m_wgUsedBodies[m_curWgidx].resize(usedBodies.size());
- }
- for (int i = 0; i < usedBodies.size(); i++)
- {
- if (usedBodies[i])
- {
- //printf("cell %d uses body %d\n", m_curWgidx,i);
- m_wgUsedBodies[m_curWgidx][i] = 1;
- }
- }
- }
- }
- }
-
- b3AlignedObjectArray<b3RigidBodyData>& m_bodies;
- b3AlignedObjectArray<b3Inertia>& m_shapes;
- b3AlignedObjectArray<b3ContactConstraint4>& m_constraints;
- b3AlignedObjectArray<int>* m_wgUsedBodies;
- int m_curWgidx;
- int m_start;
- int m_nConstraints;
- bool m_solveFriction;
- int m_maxNumBatches;
-};
-
-void b3CpuRigidBodyPipeline::solveContactConstraints()
-{
- int m_nIterations = 4;
-
- b3AlignedObjectArray<b3ContactConstraint4> contactConstraints;
- // const b3AlignedObjectArray<b3Contact4Data>& contacts = m_data->m_np->getContacts();
- int n = contactConstraints.size();
- //convert contacts...
-
- int maxNumBatches = 250;
-
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- b3SolveTask task(m_data->m_rigidBodies, m_data->m_inertias, contactConstraints, 0, n, maxNumBatches, 0, 0);
- task.m_solveFriction = false;
- task.run(0);
- }
-
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- b3SolveTask task(m_data->m_rigidBodies, m_data->m_inertias, contactConstraints, 0, n, maxNumBatches, 0, 0);
- task.m_solveFriction = true;
- task.run(0);
- }
-}
-
-void b3CpuRigidBodyPipeline::integrate(float deltaTime)
-{
- float angDamping = 0.f;
- b3Vector3 gravityAcceleration = b3MakeVector3(0, -9, 0);
-
- //integrate transforms (external forces/gravity should be moved into constraint solver)
- for (int i = 0; i < m_data->m_rigidBodies.size(); i++)
- {
- b3IntegrateTransform(&m_data->m_rigidBodies[i], deltaTime, angDamping, gravityAcceleration);
- }
-}
-
-int b3CpuRigidBodyPipeline::registerPhysicsInstance(float mass, const float* position, const float* orientation, int collidableIndex, int userData)
-{
- b3RigidBodyData body;
- int bodyIndex = m_data->m_rigidBodies.size();
- body.m_invMass = mass ? 1.f / mass : 0.f;
- body.m_angVel.setValue(0, 0, 0);
- body.m_collidableIdx = collidableIndex;
- body.m_frictionCoeff = 0.3f;
- body.m_linVel.setValue(0, 0, 0);
- body.m_pos.setValue(position[0], position[1], position[2]);
- body.m_quat.setValue(orientation[0], orientation[1], orientation[2], orientation[3]);
- body.m_restituitionCoeff = 0.f;
-
- m_data->m_rigidBodies.push_back(body);
-
- if (collidableIndex >= 0)
- {
- b3Aabb& worldAabb = m_data->m_aabbWorldSpace.expand();
-
- b3Aabb localAabb = m_data->m_np->getLocalSpaceAabb(collidableIndex);
- b3Vector3 localAabbMin = b3MakeVector3(localAabb.m_min[0], localAabb.m_min[1], localAabb.m_min[2]);
- b3Vector3 localAabbMax = b3MakeVector3(localAabb.m_max[0], localAabb.m_max[1], localAabb.m_max[2]);
-
- b3Scalar margin = 0.01f;
- b3Transform t;
- t.setIdentity();
- t.setOrigin(b3MakeVector3(position[0], position[1], position[2]));
- t.setRotation(b3Quaternion(orientation[0], orientation[1], orientation[2], orientation[3]));
- b3TransformAabb(localAabbMin, localAabbMax, margin, t, worldAabb.m_minVec, worldAabb.m_maxVec);
-
- m_data->m_bp->createProxy(worldAabb.m_minVec, worldAabb.m_maxVec, bodyIndex, 0, 1, 1);
- // b3Vector3 aabbMin,aabbMax;
- // m_data->m_bp->getAabb(bodyIndex,aabbMin,aabbMax);
- }
- else
- {
- b3Error("registerPhysicsInstance using invalid collidableIndex\n");
- }
-
- return bodyIndex;
-}
-
-const struct b3RigidBodyData* b3CpuRigidBodyPipeline::getBodyBuffer() const
-{
- return m_data->m_rigidBodies.size() ? &m_data->m_rigidBodies[0] : 0;
-}
-
-int b3CpuRigidBodyPipeline::getNumBodies() const
-{
- return m_data->m_rigidBodies.size();
-}
diff --git a/thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.h b/thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.h
deleted file mode 100644
index 9c65419f26..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/b3CpuRigidBodyPipeline.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef B3_CPU_RIGIDBODY_PIPELINE_H
-#define B3_CPU_RIGIDBODY_PIPELINE_H
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h"
-
-class b3CpuRigidBodyPipeline
-{
-protected:
- struct b3CpuRigidBodyPipelineInternalData* m_data;
-
- int allocateCollidable();
-
-public:
- b3CpuRigidBodyPipeline(class b3CpuNarrowPhase* narrowphase, struct b3DynamicBvhBroadphase* broadphaseDbvt, const struct b3Config& config);
- virtual ~b3CpuRigidBodyPipeline();
-
- virtual void stepSimulation(float deltaTime);
- virtual void integrate(float timeStep);
- virtual void updateAabbWorldSpace();
- virtual void computeOverlappingPairs();
- virtual void computeContactPoints();
- virtual void solveContactConstraints();
-
- int registerConvexPolyhedron(class b3ConvexUtility* convex);
-
- int registerPhysicsInstance(float mass, const float* position, const float* orientation, int collisionShapeIndex, int userData);
- void writeAllInstancesToGpu();
- void copyConstraintsToHost();
- void setGravity(const float* grav);
- void reset();
-
- int createPoint2PointConstraint(int bodyA, int bodyB, const float* pivotInA, const float* pivotInB, float breakingThreshold);
- int createFixedConstraint(int bodyA, int bodyB, const float* pivotInA, const float* pivotInB, const float* relTargetAB, float breakingThreshold);
- void removeConstraintByUid(int uid);
-
- void addConstraint(class b3TypedConstraint* constraint);
- void removeConstraint(b3TypedConstraint* constraint);
-
- void castRays(const b3AlignedObjectArray<b3RayInfo>& rays, b3AlignedObjectArray<b3RayHit>& hitResults);
-
- const struct b3RigidBodyData* getBodyBuffer() const;
-
- int getNumBodies() const;
-};
-
-#endif //B3_CPU_RIGIDBODY_PIPELINE_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Dynamics/shared/b3ContactConstraint4.h b/thirdparty/bullet/Bullet3Dynamics/shared/b3ContactConstraint4.h
deleted file mode 100644
index cf2eed0e7c..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/shared/b3ContactConstraint4.h
+++ /dev/null
@@ -1,31 +0,0 @@
-#ifndef B3_CONTACT_CONSTRAINT5_H
-#define B3_CONTACT_CONSTRAINT5_H
-
-#include "Bullet3Common/shared/b3Float4.h"
-
-typedef struct b3ContactConstraint4 b3ContactConstraint4_t;
-
-struct b3ContactConstraint4
-{
- b3Float4 m_linear; //normal?
- b3Float4 m_worldPos[4];
- b3Float4 m_center; // friction
- float m_jacCoeffInv[4];
- float m_b[4];
- float m_appliedRambdaDt[4];
- float m_fJacCoeffInv[2]; // friction
- float m_fAppliedRambdaDt[2]; // friction
-
- unsigned int m_bodyA;
- unsigned int m_bodyB;
- int m_batchIdx;
- unsigned int m_paddings;
-};
-
-//inline void setFrictionCoeff(float value) { m_linear[3] = value; }
-inline float b3GetFrictionCoeff(b3ContactConstraint4_t* constraint)
-{
- return constraint->m_linear.w;
-}
-
-#endif //B3_CONTACT_CONSTRAINT5_H
diff --git a/thirdparty/bullet/Bullet3Dynamics/shared/b3ConvertConstraint4.h b/thirdparty/bullet/Bullet3Dynamics/shared/b3ConvertConstraint4.h
deleted file mode 100644
index 3e72f1c3f2..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/shared/b3ConvertConstraint4.h
+++ /dev/null
@@ -1,148 +0,0 @@
-
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-#include "Bullet3Dynamics/shared/b3ContactConstraint4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-void b3PlaneSpace1(b3Float4ConstArg n, b3Float4* p, b3Float4* q);
-void b3PlaneSpace1(b3Float4ConstArg n, b3Float4* p, b3Float4* q)
-{
- if (b3Fabs(n.z) > 0.70710678f)
- {
- // choose p in y-z plane
- float a = n.y * n.y + n.z * n.z;
- float k = 1.f / sqrt(a);
- p[0].x = 0;
- p[0].y = -n.z * k;
- p[0].z = n.y * k;
- // set q = n x p
- q[0].x = a * k;
- q[0].y = -n.x * p[0].z;
- q[0].z = n.x * p[0].y;
- }
- else
- {
- // choose p in x-y plane
- float a = n.x * n.x + n.y * n.y;
- float k = 1.f / sqrt(a);
- p[0].x = -n.y * k;
- p[0].y = n.x * k;
- p[0].z = 0;
- // set q = n x p
- q[0].x = -n.z * p[0].y;
- q[0].y = n.z * p[0].x;
- q[0].z = a * k;
- }
-}
-
-void setLinearAndAngular(b3Float4ConstArg n, b3Float4ConstArg r0, b3Float4ConstArg r1, b3Float4* linear, b3Float4* angular0, b3Float4* angular1)
-{
- *linear = b3MakeFloat4(n.x, n.y, n.z, 0.f);
- *angular0 = b3Cross3(r0, n);
- *angular1 = -b3Cross3(r1, n);
-}
-
-float calcRelVel(b3Float4ConstArg l0, b3Float4ConstArg l1, b3Float4ConstArg a0, b3Float4ConstArg a1, b3Float4ConstArg linVel0,
- b3Float4ConstArg angVel0, b3Float4ConstArg linVel1, b3Float4ConstArg angVel1)
-{
- return b3Dot3F4(l0, linVel0) + b3Dot3F4(a0, angVel0) + b3Dot3F4(l1, linVel1) + b3Dot3F4(a1, angVel1);
-}
-
-float calcJacCoeff(b3Float4ConstArg linear0, b3Float4ConstArg linear1, b3Float4ConstArg angular0, b3Float4ConstArg angular1,
- float invMass0, const b3Mat3x3* invInertia0, float invMass1, const b3Mat3x3* invInertia1)
-{
- // linear0,1 are normlized
- float jmj0 = invMass0; //b3Dot3F4(linear0, linear0)*invMass0;
- float jmj1 = b3Dot3F4(mtMul3(angular0, *invInertia0), angular0);
- float jmj2 = invMass1; //b3Dot3F4(linear1, linear1)*invMass1;
- float jmj3 = b3Dot3F4(mtMul3(angular1, *invInertia1), angular1);
- return -1.f / (jmj0 + jmj1 + jmj2 + jmj3);
-}
-
-void setConstraint4(b3Float4ConstArg posA, b3Float4ConstArg linVelA, b3Float4ConstArg angVelA, float invMassA, b3Mat3x3ConstArg invInertiaA,
- b3Float4ConstArg posB, b3Float4ConstArg linVelB, b3Float4ConstArg angVelB, float invMassB, b3Mat3x3ConstArg invInertiaB,
- __global struct b3Contact4Data* src, float dt, float positionDrift, float positionConstraintCoeff,
- b3ContactConstraint4_t* dstC)
-{
- dstC->m_bodyA = abs(src->m_bodyAPtrAndSignBit);
- dstC->m_bodyB = abs(src->m_bodyBPtrAndSignBit);
-
- float dtInv = 1.f / dt;
- for (int ic = 0; ic < 4; ic++)
- {
- dstC->m_appliedRambdaDt[ic] = 0.f;
- }
- dstC->m_fJacCoeffInv[0] = dstC->m_fJacCoeffInv[1] = 0.f;
-
- dstC->m_linear = src->m_worldNormalOnB;
- dstC->m_linear.w = 0.7f; //src->getFrictionCoeff() );
- for (int ic = 0; ic < 4; ic++)
- {
- b3Float4 r0 = src->m_worldPosB[ic] - posA;
- b3Float4 r1 = src->m_worldPosB[ic] - posB;
-
- if (ic >= src->m_worldNormalOnB.w) //npoints
- {
- dstC->m_jacCoeffInv[ic] = 0.f;
- continue;
- }
-
- float relVelN;
- {
- b3Float4 linear, angular0, angular1;
- setLinearAndAngular(src->m_worldNormalOnB, r0, r1, &linear, &angular0, &angular1);
-
- dstC->m_jacCoeffInv[ic] = calcJacCoeff(linear, -linear, angular0, angular1,
- invMassA, &invInertiaA, invMassB, &invInertiaB);
-
- relVelN = calcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB);
-
- float e = 0.f; //src->getRestituitionCoeff();
- if (relVelN * relVelN < 0.004f) e = 0.f;
-
- dstC->m_b[ic] = e * relVelN;
- //float penetration = src->m_worldPosB[ic].w;
- dstC->m_b[ic] += (src->m_worldPosB[ic].w + positionDrift) * positionConstraintCoeff * dtInv;
- dstC->m_appliedRambdaDt[ic] = 0.f;
- }
- }
-
- if (src->m_worldNormalOnB.w > 0) //npoints
- { // prepare friction
- b3Float4 center = b3MakeFloat4(0.f, 0.f, 0.f, 0.f);
- for (int i = 0; i < src->m_worldNormalOnB.w; i++)
- center += src->m_worldPosB[i];
- center /= (float)src->m_worldNormalOnB.w;
-
- b3Float4 tangent[2];
- b3PlaneSpace1(src->m_worldNormalOnB, &tangent[0], &tangent[1]);
-
- b3Float4 r[2];
- r[0] = center - posA;
- r[1] = center - posB;
-
- for (int i = 0; i < 2; i++)
- {
- b3Float4 linear, angular0, angular1;
- setLinearAndAngular(tangent[i], r[0], r[1], &linear, &angular0, &angular1);
-
- dstC->m_fJacCoeffInv[i] = calcJacCoeff(linear, -linear, angular0, angular1,
- invMassA, &invInertiaA, invMassB, &invInertiaB);
- dstC->m_fAppliedRambdaDt[i] = 0.f;
- }
- dstC->m_center = center;
- }
-
- for (int i = 0; i < 4; i++)
- {
- if (i < src->m_worldNormalOnB.w)
- {
- dstC->m_worldPos[i] = src->m_worldPosB[i];
- }
- else
- {
- dstC->m_worldPos[i] = b3MakeFloat4(0.f, 0.f, 0.f, 0.f);
- }
- }
-}
diff --git a/thirdparty/bullet/Bullet3Dynamics/shared/b3Inertia.h b/thirdparty/bullet/Bullet3Dynamics/shared/b3Inertia.h
deleted file mode 100644
index 602a1335aa..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/shared/b3Inertia.h
+++ /dev/null
@@ -1,14 +0,0 @@
-
-
-#ifndef B3_INERTIA_H
-#define B3_INERTIA_H
-
-#include "Bullet3Common/shared/b3Mat3x3.h"
-
-struct b3Inertia
-{
- b3Mat3x3 m_invInertiaWorld;
- b3Mat3x3 m_initInvInertia;
-};
-
-#endif //B3_INERTIA_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Dynamics/shared/b3IntegrateTransforms.h b/thirdparty/bullet/Bullet3Dynamics/shared/b3IntegrateTransforms.h
deleted file mode 100644
index 56d9118f95..0000000000
--- a/thirdparty/bullet/Bullet3Dynamics/shared/b3IntegrateTransforms.h
+++ /dev/null
@@ -1,106 +0,0 @@
-
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-inline void integrateSingleTransform(__global b3RigidBodyData_t* bodies, int nodeID, float timeStep, float angularDamping, b3Float4ConstArg gravityAcceleration)
-{
- if (bodies[nodeID].m_invMass != 0.f)
- {
- float BT_GPU_ANGULAR_MOTION_THRESHOLD = (0.25f * 3.14159254f);
-
- //angular velocity
- {
- b3Float4 axis;
- //add some hardcoded angular damping
- bodies[nodeID].m_angVel.x *= angularDamping;
- bodies[nodeID].m_angVel.y *= angularDamping;
- bodies[nodeID].m_angVel.z *= angularDamping;
-
- b3Float4 angvel = bodies[nodeID].m_angVel;
-
- float fAngle = b3Sqrt(b3Dot3F4(angvel, angvel));
-
- //limit the angular motion
- if (fAngle * timeStep > BT_GPU_ANGULAR_MOTION_THRESHOLD)
- {
- fAngle = BT_GPU_ANGULAR_MOTION_THRESHOLD / timeStep;
- }
- if (fAngle < 0.001f)
- {
- // use Taylor's expansions of sync function
- axis = angvel * (0.5f * timeStep - (timeStep * timeStep * timeStep) * 0.020833333333f * fAngle * fAngle);
- }
- else
- {
- // sync(fAngle) = sin(c*fAngle)/t
- axis = angvel * (b3Sin(0.5f * fAngle * timeStep) / fAngle);
- }
-
- b3Quat dorn;
- dorn.x = axis.x;
- dorn.y = axis.y;
- dorn.z = axis.z;
- dorn.w = b3Cos(fAngle * timeStep * 0.5f);
- b3Quat orn0 = bodies[nodeID].m_quat;
- b3Quat predictedOrn = b3QuatMul(dorn, orn0);
- predictedOrn = b3QuatNormalized(predictedOrn);
- bodies[nodeID].m_quat = predictedOrn;
- }
- //linear velocity
- bodies[nodeID].m_pos += bodies[nodeID].m_linVel * timeStep;
-
- //apply gravity
- bodies[nodeID].m_linVel += gravityAcceleration * timeStep;
- }
-}
-
-inline void b3IntegrateTransform(__global b3RigidBodyData_t* body, float timeStep, float angularDamping, b3Float4ConstArg gravityAcceleration)
-{
- float BT_GPU_ANGULAR_MOTION_THRESHOLD = (0.25f * 3.14159254f);
-
- if ((body->m_invMass != 0.f))
- {
- //angular velocity
- {
- b3Float4 axis;
- //add some hardcoded angular damping
- body->m_angVel.x *= angularDamping;
- body->m_angVel.y *= angularDamping;
- body->m_angVel.z *= angularDamping;
-
- b3Float4 angvel = body->m_angVel;
- float fAngle = b3Sqrt(b3Dot3F4(angvel, angvel));
- //limit the angular motion
- if (fAngle * timeStep > BT_GPU_ANGULAR_MOTION_THRESHOLD)
- {
- fAngle = BT_GPU_ANGULAR_MOTION_THRESHOLD / timeStep;
- }
- if (fAngle < 0.001f)
- {
- // use Taylor's expansions of sync function
- axis = angvel * (0.5f * timeStep - (timeStep * timeStep * timeStep) * 0.020833333333f * fAngle * fAngle);
- }
- else
- {
- // sync(fAngle) = sin(c*fAngle)/t
- axis = angvel * (b3Sin(0.5f * fAngle * timeStep) / fAngle);
- }
- b3Quat dorn;
- dorn.x = axis.x;
- dorn.y = axis.y;
- dorn.z = axis.z;
- dorn.w = b3Cos(fAngle * timeStep * 0.5f);
- b3Quat orn0 = body->m_quat;
-
- b3Quat predictedOrn = b3QuatMul(dorn, orn0);
- predictedOrn = b3QuatNormalized(predictedOrn);
- body->m_quat = predictedOrn;
- }
-
- //apply gravity
- body->m_linVel += gravityAcceleration * timeStep;
-
- //linear velocity
- body->m_pos += body->m_linVel * timeStep;
- }
-}
diff --git a/thirdparty/bullet/Bullet3Geometry/b3AabbUtil.h b/thirdparty/bullet/Bullet3Geometry/b3AabbUtil.h
deleted file mode 100644
index 396a401450..0000000000
--- a/thirdparty/bullet/Bullet3Geometry/b3AabbUtil.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_AABB_UTIL2
-#define B3_AABB_UTIL2
-
-#include "Bullet3Common/b3Transform.h"
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3MinMax.h"
-
-B3_FORCE_INLINE void b3AabbExpand(b3Vector3& aabbMin,
- b3Vector3& aabbMax,
- const b3Vector3& expansionMin,
- const b3Vector3& expansionMax)
-{
- aabbMin = aabbMin + expansionMin;
- aabbMax = aabbMax + expansionMax;
-}
-
-/// conservative test for overlap between two aabbs
-B3_FORCE_INLINE bool b3TestPointAgainstAabb2(const b3Vector3& aabbMin1, const b3Vector3& aabbMax1,
- const b3Vector3& point)
-{
- bool overlap = true;
- overlap = (aabbMin1.getX() > point.getX() || aabbMax1.getX() < point.getX()) ? false : overlap;
- overlap = (aabbMin1.getZ() > point.getZ() || aabbMax1.getZ() < point.getZ()) ? false : overlap;
- overlap = (aabbMin1.getY() > point.getY() || aabbMax1.getY() < point.getY()) ? false : overlap;
- return overlap;
-}
-
-/// conservative test for overlap between two aabbs
-B3_FORCE_INLINE bool b3TestAabbAgainstAabb2(const b3Vector3& aabbMin1, const b3Vector3& aabbMax1,
- const b3Vector3& aabbMin2, const b3Vector3& aabbMax2)
-{
- bool overlap = true;
- overlap = (aabbMin1.getX() > aabbMax2.getX() || aabbMax1.getX() < aabbMin2.getX()) ? false : overlap;
- overlap = (aabbMin1.getZ() > aabbMax2.getZ() || aabbMax1.getZ() < aabbMin2.getZ()) ? false : overlap;
- overlap = (aabbMin1.getY() > aabbMax2.getY() || aabbMax1.getY() < aabbMin2.getY()) ? false : overlap;
- return overlap;
-}
-
-/// conservative test for overlap between triangle and aabb
-B3_FORCE_INLINE bool b3TestTriangleAgainstAabb2(const b3Vector3* vertices,
- const b3Vector3& aabbMin, const b3Vector3& aabbMax)
-{
- const b3Vector3& p1 = vertices[0];
- const b3Vector3& p2 = vertices[1];
- const b3Vector3& p3 = vertices[2];
-
- if (b3Min(b3Min(p1[0], p2[0]), p3[0]) > aabbMax[0]) return false;
- if (b3Max(b3Max(p1[0], p2[0]), p3[0]) < aabbMin[0]) return false;
-
- if (b3Min(b3Min(p1[2], p2[2]), p3[2]) > aabbMax[2]) return false;
- if (b3Max(b3Max(p1[2], p2[2]), p3[2]) < aabbMin[2]) return false;
-
- if (b3Min(b3Min(p1[1], p2[1]), p3[1]) > aabbMax[1]) return false;
- if (b3Max(b3Max(p1[1], p2[1]), p3[1]) < aabbMin[1]) return false;
- return true;
-}
-
-B3_FORCE_INLINE int b3Outcode(const b3Vector3& p, const b3Vector3& halfExtent)
-{
- return (p.getX() < -halfExtent.getX() ? 0x01 : 0x0) |
- (p.getX() > halfExtent.getX() ? 0x08 : 0x0) |
- (p.getY() < -halfExtent.getY() ? 0x02 : 0x0) |
- (p.getY() > halfExtent.getY() ? 0x10 : 0x0) |
- (p.getZ() < -halfExtent.getZ() ? 0x4 : 0x0) |
- (p.getZ() > halfExtent.getZ() ? 0x20 : 0x0);
-}
-
-B3_FORCE_INLINE bool b3RayAabb2(const b3Vector3& rayFrom,
- const b3Vector3& rayInvDirection,
- const unsigned int raySign[3],
- const b3Vector3 bounds[2],
- b3Scalar& tmin,
- b3Scalar lambda_min,
- b3Scalar lambda_max)
-{
- b3Scalar tmax, tymin, tymax, tzmin, tzmax;
- tmin = (bounds[raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX();
- tmax = (bounds[1 - raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX();
- tymin = (bounds[raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY();
- tymax = (bounds[1 - raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY();
-
- if ((tmin > tymax) || (tymin > tmax))
- return false;
-
- if (tymin > tmin)
- tmin = tymin;
-
- if (tymax < tmax)
- tmax = tymax;
-
- tzmin = (bounds[raySign[2]].getZ() - rayFrom.getZ()) * rayInvDirection.getZ();
- tzmax = (bounds[1 - raySign[2]].getZ() - rayFrom.getZ()) * rayInvDirection.getZ();
-
- if ((tmin > tzmax) || (tzmin > tmax))
- return false;
- if (tzmin > tmin)
- tmin = tzmin;
- if (tzmax < tmax)
- tmax = tzmax;
- return ((tmin < lambda_max) && (tmax > lambda_min));
-}
-
-B3_FORCE_INLINE bool b3RayAabb(const b3Vector3& rayFrom,
- const b3Vector3& rayTo,
- const b3Vector3& aabbMin,
- const b3Vector3& aabbMax,
- b3Scalar& param, b3Vector3& normal)
-{
- b3Vector3 aabbHalfExtent = (aabbMax - aabbMin) * b3Scalar(0.5);
- b3Vector3 aabbCenter = (aabbMax + aabbMin) * b3Scalar(0.5);
- b3Vector3 source = rayFrom - aabbCenter;
- b3Vector3 target = rayTo - aabbCenter;
- int sourceOutcode = b3Outcode(source, aabbHalfExtent);
- int targetOutcode = b3Outcode(target, aabbHalfExtent);
- if ((sourceOutcode & targetOutcode) == 0x0)
- {
- b3Scalar lambda_enter = b3Scalar(0.0);
- b3Scalar lambda_exit = param;
- b3Vector3 r = target - source;
- int i;
- b3Scalar normSign = 1;
- b3Vector3 hitNormal = b3MakeVector3(0, 0, 0);
- int bit = 1;
-
- for (int j = 0; j < 2; j++)
- {
- for (i = 0; i != 3; ++i)
- {
- if (sourceOutcode & bit)
- {
- b3Scalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i];
- if (lambda_enter <= lambda)
- {
- lambda_enter = lambda;
- hitNormal.setValue(0, 0, 0);
- hitNormal[i] = normSign;
- }
- }
- else if (targetOutcode & bit)
- {
- b3Scalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i];
- b3SetMin(lambda_exit, lambda);
- }
- bit <<= 1;
- }
- normSign = b3Scalar(-1.);
- }
- if (lambda_enter <= lambda_exit)
- {
- param = lambda_enter;
- normal = hitNormal;
- return true;
- }
- }
- return false;
-}
-
-B3_FORCE_INLINE void b3TransformAabb(const b3Vector3& halfExtents, b3Scalar margin, const b3Transform& t, b3Vector3& aabbMinOut, b3Vector3& aabbMaxOut)
-{
- b3Vector3 halfExtentsWithMargin = halfExtents + b3MakeVector3(margin, margin, margin);
- b3Matrix3x3 abs_b = t.getBasis().absolute();
- b3Vector3 center = t.getOrigin();
- b3Vector3 extent = halfExtentsWithMargin.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMinOut = center - extent;
- aabbMaxOut = center + extent;
-}
-
-B3_FORCE_INLINE void b3TransformAabb(const b3Vector3& localAabbMin, const b3Vector3& localAabbMax, b3Scalar margin, const b3Transform& trans, b3Vector3& aabbMinOut, b3Vector3& aabbMaxOut)
-{
- //b3Assert(localAabbMin.getX() <= localAabbMax.getX());
- //b3Assert(localAabbMin.getY() <= localAabbMax.getY());
- //b3Assert(localAabbMin.getZ() <= localAabbMax.getZ());
- b3Vector3 localHalfExtents = b3Scalar(0.5) * (localAabbMax - localAabbMin);
- localHalfExtents += b3MakeVector3(margin, margin, margin);
-
- b3Vector3 localCenter = b3Scalar(0.5) * (localAabbMax + localAabbMin);
- b3Matrix3x3 abs_b = trans.getBasis().absolute();
- b3Vector3 center = trans(localCenter);
- b3Vector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMinOut = center - extent;
- aabbMaxOut = center + extent;
-}
-
-#define B3_USE_BANCHLESS 1
-#ifdef B3_USE_BANCHLESS
-//This block replaces the block below and uses no branches, and replaces the 8 bit return with a 32 bit return for improved performance (~3x on XBox 360)
-B3_FORCE_INLINE unsigned b3TestQuantizedAabbAgainstQuantizedAabb(const unsigned short int* aabbMin1, const unsigned short int* aabbMax1, const unsigned short int* aabbMin2, const unsigned short int* aabbMax2)
-{
- return static_cast<unsigned int>(b3Select((unsigned)((aabbMin1[0] <= aabbMax2[0]) & (aabbMax1[0] >= aabbMin2[0]) & (aabbMin1[2] <= aabbMax2[2]) & (aabbMax1[2] >= aabbMin2[2]) & (aabbMin1[1] <= aabbMax2[1]) & (aabbMax1[1] >= aabbMin2[1])),
- 1, 0));
-}
-#else
-B3_FORCE_INLINE bool b3TestQuantizedAabbAgainstQuantizedAabb(const unsigned short int* aabbMin1, const unsigned short int* aabbMax1, const unsigned short int* aabbMin2, const unsigned short int* aabbMax2)
-{
- bool overlap = true;
- overlap = (aabbMin1[0] > aabbMax2[0] || aabbMax1[0] < aabbMin2[0]) ? false : overlap;
- overlap = (aabbMin1[2] > aabbMax2[2] || aabbMax1[2] < aabbMin2[2]) ? false : overlap;
- overlap = (aabbMin1[1] > aabbMax2[1] || aabbMax1[1] < aabbMin2[1]) ? false : overlap;
- return overlap;
-}
-#endif //B3_USE_BANCHLESS
-
-#endif //B3_AABB_UTIL2
diff --git a/thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.cpp b/thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.cpp
deleted file mode 100644
index b37652456e..0000000000
--- a/thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.cpp
+++ /dev/null
@@ -1,2745 +0,0 @@
-/*
-Copyright (c) 2011 Ole Kniemeyer, MAXON, www.maxon.net
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include <string.h>
-
-#include "b3ConvexHullComputer.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3MinMax.h"
-#include "Bullet3Common/b3Vector3.h"
-
-#ifdef __GNUC__
-#include <stdint.h>
-typedef int32_t btInt32_t;
-typedef int64_t btInt64_t;
-typedef uint32_t btUint32_t;
-typedef uint64_t btUint64_t;
-#elif defined(_MSC_VER)
-typedef __int32 btInt32_t;
-typedef __int64 btInt64_t;
-typedef unsigned __int32 btUint32_t;
-typedef unsigned __int64 btUint64_t;
-#else
-typedef int btInt32_t;
-typedef long long int btInt64_t;
-typedef unsigned int btUint32_t;
-typedef unsigned long long int btUint64_t;
-#endif
-
-//The definition of USE_X86_64_ASM is moved into the build system. You can enable it manually by commenting out the following lines
-//#if (defined(__GNUC__) && defined(__x86_64__) && !defined(__ICL)) // || (defined(__ICL) && defined(_M_X64)) bug in Intel compiler, disable inline assembly
-// #define USE_X86_64_ASM
-//#endif
-
-//#define DEBUG_CONVEX_HULL
-//#define SHOW_ITERATIONS
-
-#if defined(DEBUG_CONVEX_HULL) || defined(SHOW_ITERATIONS)
-#include <stdio.h>
-#endif
-
-// Convex hull implementation based on Preparata and Hong
-// Ole Kniemeyer, MAXON Computer GmbH
-class b3ConvexHullInternal
-{
-public:
- class Point64
- {
- public:
- btInt64_t x;
- btInt64_t y;
- btInt64_t z;
-
- Point64(btInt64_t x, btInt64_t y, btInt64_t z) : x(x), y(y), z(z)
- {
- }
-
- bool isZero()
- {
- return (x == 0) && (y == 0) && (z == 0);
- }
-
- btInt64_t dot(const Point64& b) const
- {
- return x * b.x + y * b.y + z * b.z;
- }
- };
-
- class Point32
- {
- public:
- btInt32_t x;
- btInt32_t y;
- btInt32_t z;
- int index;
-
- Point32()
- {
- }
-
- Point32(btInt32_t x, btInt32_t y, btInt32_t z) : x(x), y(y), z(z), index(-1)
- {
- }
-
- bool operator==(const Point32& b) const
- {
- return (x == b.x) && (y == b.y) && (z == b.z);
- }
-
- bool operator!=(const Point32& b) const
- {
- return (x != b.x) || (y != b.y) || (z != b.z);
- }
-
- bool isZero()
- {
- return (x == 0) && (y == 0) && (z == 0);
- }
-
- Point64 cross(const Point32& b) const
- {
- return Point64(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x);
- }
-
- Point64 cross(const Point64& b) const
- {
- return Point64(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x);
- }
-
- btInt64_t dot(const Point32& b) const
- {
- return x * b.x + y * b.y + z * b.z;
- }
-
- btInt64_t dot(const Point64& b) const
- {
- return x * b.x + y * b.y + z * b.z;
- }
-
- Point32 operator+(const Point32& b) const
- {
- return Point32(x + b.x, y + b.y, z + b.z);
- }
-
- Point32 operator-(const Point32& b) const
- {
- return Point32(x - b.x, y - b.y, z - b.z);
- }
- };
-
- class Int128
- {
- public:
- btUint64_t low;
- btUint64_t high;
-
- Int128()
- {
- }
-
- Int128(btUint64_t low, btUint64_t high) : low(low), high(high)
- {
- }
-
- Int128(btUint64_t low) : low(low), high(0)
- {
- }
-
- Int128(btInt64_t value) : low(value), high((value >= 0) ? 0 : (btUint64_t)-1LL)
- {
- }
-
- static Int128 mul(btInt64_t a, btInt64_t b);
-
- static Int128 mul(btUint64_t a, btUint64_t b);
-
- Int128 operator-() const
- {
- return Int128((btUint64_t) - (btInt64_t)low, ~high + (low == 0));
- }
-
- Int128 operator+(const Int128& b) const
- {
-#ifdef USE_X86_64_ASM
- Int128 result;
- __asm__(
- "addq %[bl], %[rl]\n\t"
- "adcq %[bh], %[rh]\n\t"
- : [rl] "=r"(result.low), [rh] "=r"(result.high)
- : "0"(low), "1"(high), [bl] "g"(b.low), [bh] "g"(b.high)
- : "cc");
- return result;
-#else
- btUint64_t lo = low + b.low;
- return Int128(lo, high + b.high + (lo < low));
-#endif
- }
-
- Int128 operator-(const Int128& b) const
- {
-#ifdef USE_X86_64_ASM
- Int128 result;
- __asm__(
- "subq %[bl], %[rl]\n\t"
- "sbbq %[bh], %[rh]\n\t"
- : [rl] "=r"(result.low), [rh] "=r"(result.high)
- : "0"(low), "1"(high), [bl] "g"(b.low), [bh] "g"(b.high)
- : "cc");
- return result;
-#else
- return *this + -b;
-#endif
- }
-
- Int128& operator+=(const Int128& b)
- {
-#ifdef USE_X86_64_ASM
- __asm__(
- "addq %[bl], %[rl]\n\t"
- "adcq %[bh], %[rh]\n\t"
- : [rl] "=r"(low), [rh] "=r"(high)
- : "0"(low), "1"(high), [bl] "g"(b.low), [bh] "g"(b.high)
- : "cc");
-#else
- btUint64_t lo = low + b.low;
- if (lo < low)
- {
- ++high;
- }
- low = lo;
- high += b.high;
-#endif
- return *this;
- }
-
- Int128& operator++()
- {
- if (++low == 0)
- {
- ++high;
- }
- return *this;
- }
-
- Int128 operator*(btInt64_t b) const;
-
- b3Scalar toScalar() const
- {
- return ((btInt64_t)high >= 0) ? b3Scalar(high) * (b3Scalar(0x100000000LL) * b3Scalar(0x100000000LL)) + b3Scalar(low)
- : -(-*this).toScalar();
- }
-
- int getSign() const
- {
- return ((btInt64_t)high < 0) ? -1 : (high || low) ? 1 : 0;
- }
-
- bool operator<(const Int128& b) const
- {
- return (high < b.high) || ((high == b.high) && (low < b.low));
- }
-
- int ucmp(const Int128& b) const
- {
- if (high < b.high)
- {
- return -1;
- }
- if (high > b.high)
- {
- return 1;
- }
- if (low < b.low)
- {
- return -1;
- }
- if (low > b.low)
- {
- return 1;
- }
- return 0;
- }
- };
-
- class Rational64
- {
- private:
- btUint64_t m_numerator;
- btUint64_t m_denominator;
- int sign;
-
- public:
- Rational64(btInt64_t numerator, btInt64_t denominator)
- {
- if (numerator > 0)
- {
- sign = 1;
- m_numerator = (btUint64_t)numerator;
- }
- else if (numerator < 0)
- {
- sign = -1;
- m_numerator = (btUint64_t)-numerator;
- }
- else
- {
- sign = 0;
- m_numerator = 0;
- }
- if (denominator > 0)
- {
- m_denominator = (btUint64_t)denominator;
- }
- else if (denominator < 0)
- {
- sign = -sign;
- m_denominator = (btUint64_t)-denominator;
- }
- else
- {
- m_denominator = 0;
- }
- }
-
- bool isNegativeInfinity() const
- {
- return (sign < 0) && (m_denominator == 0);
- }
-
- bool isNaN() const
- {
- return (sign == 0) && (m_denominator == 0);
- }
-
- int compare(const Rational64& b) const;
-
- b3Scalar toScalar() const
- {
- return sign * ((m_denominator == 0) ? B3_INFINITY : (b3Scalar)m_numerator / m_denominator);
- }
- };
-
- class Rational128
- {
- private:
- Int128 numerator;
- Int128 denominator;
- int sign;
- bool isInt64;
-
- public:
- Rational128(btInt64_t value)
- {
- if (value > 0)
- {
- sign = 1;
- this->numerator = value;
- }
- else if (value < 0)
- {
- sign = -1;
- this->numerator = -value;
- }
- else
- {
- sign = 0;
- this->numerator = (btUint64_t)0;
- }
- this->denominator = (btUint64_t)1;
- isInt64 = true;
- }
-
- Rational128(const Int128& numerator, const Int128& denominator)
- {
- sign = numerator.getSign();
- if (sign >= 0)
- {
- this->numerator = numerator;
- }
- else
- {
- this->numerator = -numerator;
- }
- int dsign = denominator.getSign();
- if (dsign >= 0)
- {
- this->denominator = denominator;
- }
- else
- {
- sign = -sign;
- this->denominator = -denominator;
- }
- isInt64 = false;
- }
-
- int compare(const Rational128& b) const;
-
- int compare(btInt64_t b) const;
-
- b3Scalar toScalar() const
- {
- return sign * ((denominator.getSign() == 0) ? B3_INFINITY : numerator.toScalar() / denominator.toScalar());
- }
- };
-
- class PointR128
- {
- public:
- Int128 x;
- Int128 y;
- Int128 z;
- Int128 denominator;
-
- PointR128()
- {
- }
-
- PointR128(Int128 x, Int128 y, Int128 z, Int128 denominator) : x(x), y(y), z(z), denominator(denominator)
- {
- }
-
- b3Scalar xvalue() const
- {
- return x.toScalar() / denominator.toScalar();
- }
-
- b3Scalar yvalue() const
- {
- return y.toScalar() / denominator.toScalar();
- }
-
- b3Scalar zvalue() const
- {
- return z.toScalar() / denominator.toScalar();
- }
- };
-
- class Edge;
- class Face;
-
- class Vertex
- {
- public:
- Vertex* next;
- Vertex* prev;
- Edge* edges;
- Face* firstNearbyFace;
- Face* lastNearbyFace;
- PointR128 point128;
- Point32 point;
- int copy;
-
- Vertex() : next(NULL), prev(NULL), edges(NULL), firstNearbyFace(NULL), lastNearbyFace(NULL), copy(-1)
- {
- }
-
-#ifdef DEBUG_CONVEX_HULL
- void print()
- {
- b3Printf("V%d (%d, %d, %d)", point.index, point.x, point.y, point.z);
- }
-
- void printGraph();
-#endif
-
- Point32 operator-(const Vertex& b) const
- {
- return point - b.point;
- }
-
- Rational128 dot(const Point64& b) const
- {
- return (point.index >= 0) ? Rational128(point.dot(b))
- : Rational128(point128.x * b.x + point128.y * b.y + point128.z * b.z, point128.denominator);
- }
-
- b3Scalar xvalue() const
- {
- return (point.index >= 0) ? b3Scalar(point.x) : point128.xvalue();
- }
-
- b3Scalar yvalue() const
- {
- return (point.index >= 0) ? b3Scalar(point.y) : point128.yvalue();
- }
-
- b3Scalar zvalue() const
- {
- return (point.index >= 0) ? b3Scalar(point.z) : point128.zvalue();
- }
-
- void receiveNearbyFaces(Vertex* src)
- {
- if (lastNearbyFace)
- {
- lastNearbyFace->nextWithSameNearbyVertex = src->firstNearbyFace;
- }
- else
- {
- firstNearbyFace = src->firstNearbyFace;
- }
- if (src->lastNearbyFace)
- {
- lastNearbyFace = src->lastNearbyFace;
- }
- for (Face* f = src->firstNearbyFace; f; f = f->nextWithSameNearbyVertex)
- {
- b3Assert(f->nearbyVertex == src);
- f->nearbyVertex = this;
- }
- src->firstNearbyFace = NULL;
- src->lastNearbyFace = NULL;
- }
- };
-
- class Edge
- {
- public:
- Edge* next;
- Edge* prev;
- Edge* reverse;
- Vertex* target;
- Face* face;
- int copy;
-
- ~Edge()
- {
- next = NULL;
- prev = NULL;
- reverse = NULL;
- target = NULL;
- face = NULL;
- }
-
- void link(Edge* n)
- {
- b3Assert(reverse->target == n->reverse->target);
- next = n;
- n->prev = this;
- }
-
-#ifdef DEBUG_CONVEX_HULL
- void print()
- {
- b3Printf("E%p : %d -> %d, n=%p p=%p (0 %d\t%d\t%d) -> (%d %d %d)", this, reverse->target->point.index, target->point.index, next, prev,
- reverse->target->point.x, reverse->target->point.y, reverse->target->point.z, target->point.x, target->point.y, target->point.z);
- }
-#endif
- };
-
- class Face
- {
- public:
- Face* next;
- Vertex* nearbyVertex;
- Face* nextWithSameNearbyVertex;
- Point32 origin;
- Point32 dir0;
- Point32 dir1;
-
- Face() : next(NULL), nearbyVertex(NULL), nextWithSameNearbyVertex(NULL)
- {
- }
-
- void init(Vertex* a, Vertex* b, Vertex* c)
- {
- nearbyVertex = a;
- origin = a->point;
- dir0 = *b - *a;
- dir1 = *c - *a;
- if (a->lastNearbyFace)
- {
- a->lastNearbyFace->nextWithSameNearbyVertex = this;
- }
- else
- {
- a->firstNearbyFace = this;
- }
- a->lastNearbyFace = this;
- }
-
- Point64 getNormal()
- {
- return dir0.cross(dir1);
- }
- };
-
- template <typename UWord, typename UHWord>
- class DMul
- {
- private:
- static btUint32_t high(btUint64_t value)
- {
- return (btUint32_t)(value >> 32);
- }
-
- static btUint32_t low(btUint64_t value)
- {
- return (btUint32_t)value;
- }
-
- static btUint64_t mul(btUint32_t a, btUint32_t b)
- {
- return (btUint64_t)a * (btUint64_t)b;
- }
-
- static void shlHalf(btUint64_t& value)
- {
- value <<= 32;
- }
-
- static btUint64_t high(Int128 value)
- {
- return value.high;
- }
-
- static btUint64_t low(Int128 value)
- {
- return value.low;
- }
-
- static Int128 mul(btUint64_t a, btUint64_t b)
- {
- return Int128::mul(a, b);
- }
-
- static void shlHalf(Int128& value)
- {
- value.high = value.low;
- value.low = 0;
- }
-
- public:
- static void mul(UWord a, UWord b, UWord& resLow, UWord& resHigh)
- {
- UWord p00 = mul(low(a), low(b));
- UWord p01 = mul(low(a), high(b));
- UWord p10 = mul(high(a), low(b));
- UWord p11 = mul(high(a), high(b));
- UWord p0110 = UWord(low(p01)) + UWord(low(p10));
- p11 += high(p01);
- p11 += high(p10);
- p11 += high(p0110);
- shlHalf(p0110);
- p00 += p0110;
- if (p00 < p0110)
- {
- ++p11;
- }
- resLow = p00;
- resHigh = p11;
- }
- };
-
-private:
- class IntermediateHull
- {
- public:
- Vertex* minXy;
- Vertex* maxXy;
- Vertex* minYx;
- Vertex* maxYx;
-
- IntermediateHull() : minXy(NULL), maxXy(NULL), minYx(NULL), maxYx(NULL)
- {
- }
-
- void print();
- };
-
- enum Orientation
- {
- NONE,
- CLOCKWISE,
- COUNTER_CLOCKWISE
- };
-
- template <typename T>
- class PoolArray
- {
- private:
- T* array;
- int size;
-
- public:
- PoolArray<T>* next;
-
- PoolArray(int size) : size(size), next(NULL)
- {
- array = (T*)b3AlignedAlloc(sizeof(T) * size, 16);
- }
-
- ~PoolArray()
- {
- b3AlignedFree(array);
- }
-
- T* init()
- {
- T* o = array;
- for (int i = 0; i < size; i++, o++)
- {
- o->next = (i + 1 < size) ? o + 1 : NULL;
- }
- return array;
- }
- };
-
- template <typename T>
- class Pool
- {
- private:
- PoolArray<T>* arrays;
- PoolArray<T>* nextArray;
- T* freeObjects;
- int arraySize;
-
- public:
- Pool() : arrays(NULL), nextArray(NULL), freeObjects(NULL), arraySize(256)
- {
- }
-
- ~Pool()
- {
- while (arrays)
- {
- PoolArray<T>* p = arrays;
- arrays = p->next;
- p->~PoolArray<T>();
- b3AlignedFree(p);
- }
- }
-
- void reset()
- {
- nextArray = arrays;
- freeObjects = NULL;
- }
-
- void setArraySize(int arraySize)
- {
- this->arraySize = arraySize;
- }
-
- T* newObject()
- {
- T* o = freeObjects;
- if (!o)
- {
- PoolArray<T>* p = nextArray;
- if (p)
- {
- nextArray = p->next;
- }
- else
- {
- p = new (b3AlignedAlloc(sizeof(PoolArray<T>), 16)) PoolArray<T>(arraySize);
- p->next = arrays;
- arrays = p;
- }
- o = p->init();
- }
- freeObjects = o->next;
- return new (o) T();
- };
-
- void freeObject(T* object)
- {
- object->~T();
- object->next = freeObjects;
- freeObjects = object;
- }
- };
-
- b3Vector3 scaling;
- b3Vector3 center;
- Pool<Vertex> vertexPool;
- Pool<Edge> edgePool;
- Pool<Face> facePool;
- b3AlignedObjectArray<Vertex*> originalVertices;
- int mergeStamp;
- int minAxis;
- int medAxis;
- int maxAxis;
- int usedEdgePairs;
- int maxUsedEdgePairs;
-
- static Orientation getOrientation(const Edge* prev, const Edge* next, const Point32& s, const Point32& t);
- Edge* findMaxAngle(bool ccw, const Vertex* start, const Point32& s, const Point64& rxs, const Point64& sxrxs, Rational64& minCot);
- void findEdgeForCoplanarFaces(Vertex* c0, Vertex* c1, Edge*& e0, Edge*& e1, Vertex* stop0, Vertex* stop1);
-
- Edge* newEdgePair(Vertex* from, Vertex* to);
-
- void removeEdgePair(Edge* edge)
- {
- Edge* n = edge->next;
- Edge* r = edge->reverse;
-
- b3Assert(edge->target && r->target);
-
- if (n != edge)
- {
- n->prev = edge->prev;
- edge->prev->next = n;
- r->target->edges = n;
- }
- else
- {
- r->target->edges = NULL;
- }
-
- n = r->next;
-
- if (n != r)
- {
- n->prev = r->prev;
- r->prev->next = n;
- edge->target->edges = n;
- }
- else
- {
- edge->target->edges = NULL;
- }
-
- edgePool.freeObject(edge);
- edgePool.freeObject(r);
- usedEdgePairs--;
- }
-
- void computeInternal(int start, int end, IntermediateHull& result);
-
- bool mergeProjection(IntermediateHull& h0, IntermediateHull& h1, Vertex*& c0, Vertex*& c1);
-
- void merge(IntermediateHull& h0, IntermediateHull& h1);
-
- b3Vector3 toBtVector(const Point32& v);
-
- b3Vector3 getBtNormal(Face* face);
-
- bool shiftFace(Face* face, b3Scalar amount, b3AlignedObjectArray<Vertex*> stack);
-
-public:
- Vertex* vertexList;
-
- void compute(const void* coords, bool doubleCoords, int stride, int count);
-
- b3Vector3 getCoordinates(const Vertex* v);
-
- b3Scalar shrink(b3Scalar amount, b3Scalar clampAmount);
-};
-
-b3ConvexHullInternal::Int128 b3ConvexHullInternal::Int128::operator*(btInt64_t b) const
-{
- bool negative = (btInt64_t)high < 0;
- Int128 a = negative ? -*this : *this;
- if (b < 0)
- {
- negative = !negative;
- b = -b;
- }
- Int128 result = mul(a.low, (btUint64_t)b);
- result.high += a.high * (btUint64_t)b;
- return negative ? -result : result;
-}
-
-b3ConvexHullInternal::Int128 b3ConvexHullInternal::Int128::mul(btInt64_t a, btInt64_t b)
-{
- Int128 result;
-
-#ifdef USE_X86_64_ASM
- __asm__("imulq %[b]"
- : "=a"(result.low), "=d"(result.high)
- : "0"(a), [b] "r"(b)
- : "cc");
- return result;
-
-#else
- bool negative = a < 0;
- if (negative)
- {
- a = -a;
- }
- if (b < 0)
- {
- negative = !negative;
- b = -b;
- }
- DMul<btUint64_t, btUint32_t>::mul((btUint64_t)a, (btUint64_t)b, result.low, result.high);
- return negative ? -result : result;
-#endif
-}
-
-b3ConvexHullInternal::Int128 b3ConvexHullInternal::Int128::mul(btUint64_t a, btUint64_t b)
-{
- Int128 result;
-
-#ifdef USE_X86_64_ASM
- __asm__("mulq %[b]"
- : "=a"(result.low), "=d"(result.high)
- : "0"(a), [b] "r"(b)
- : "cc");
-
-#else
- DMul<btUint64_t, btUint32_t>::mul(a, b, result.low, result.high);
-#endif
-
- return result;
-}
-
-int b3ConvexHullInternal::Rational64::compare(const Rational64& b) const
-{
- if (sign != b.sign)
- {
- return sign - b.sign;
- }
- else if (sign == 0)
- {
- return 0;
- }
-
- // return (numerator * b.denominator > b.numerator * denominator) ? sign : (numerator * b.denominator < b.numerator * denominator) ? -sign : 0;
-
-#ifdef USE_X86_64_ASM
-
- int result;
- btInt64_t tmp;
- btInt64_t dummy;
- __asm__(
- "mulq %[bn]\n\t"
- "movq %%rax, %[tmp]\n\t"
- "movq %%rdx, %%rbx\n\t"
- "movq %[tn], %%rax\n\t"
- "mulq %[bd]\n\t"
- "subq %[tmp], %%rax\n\t"
- "sbbq %%rbx, %%rdx\n\t" // rdx:rax contains 128-bit-difference "numerator*b.denominator - b.numerator*denominator"
- "setnsb %%bh\n\t" // bh=1 if difference is non-negative, bh=0 otherwise
- "orq %%rdx, %%rax\n\t"
- "setnzb %%bl\n\t" // bl=1 if difference if non-zero, bl=0 if it is zero
- "decb %%bh\n\t" // now bx=0x0000 if difference is zero, 0xff01 if it is negative, 0x0001 if it is positive (i.e., same sign as difference)
- "shll $16, %%ebx\n\t" // ebx has same sign as difference
- : "=&b"(result), [tmp] "=&r"(tmp), "=a"(dummy)
- : "a"(denominator), [bn] "g"(b.numerator), [tn] "g"(numerator), [bd] "g"(b.denominator)
- : "%rdx", "cc");
- return result ? result ^ sign // if sign is +1, only bit 0 of result is inverted, which does not change the sign of result (and cannot result in zero)
- // if sign is -1, all bits of result are inverted, which changes the sign of result (and again cannot result in zero)
- : 0;
-
-#else
-
- return sign * Int128::mul(m_numerator, b.m_denominator).ucmp(Int128::mul(m_denominator, b.m_numerator));
-
-#endif
-}
-
-int b3ConvexHullInternal::Rational128::compare(const Rational128& b) const
-{
- if (sign != b.sign)
- {
- return sign - b.sign;
- }
- else if (sign == 0)
- {
- return 0;
- }
- if (isInt64)
- {
- return -b.compare(sign * (btInt64_t)numerator.low);
- }
-
- Int128 nbdLow, nbdHigh, dbnLow, dbnHigh;
- DMul<Int128, btUint64_t>::mul(numerator, b.denominator, nbdLow, nbdHigh);
- DMul<Int128, btUint64_t>::mul(denominator, b.numerator, dbnLow, dbnHigh);
-
- int cmp = nbdHigh.ucmp(dbnHigh);
- if (cmp)
- {
- return cmp * sign;
- }
- return nbdLow.ucmp(dbnLow) * sign;
-}
-
-int b3ConvexHullInternal::Rational128::compare(btInt64_t b) const
-{
- if (isInt64)
- {
- btInt64_t a = sign * (btInt64_t)numerator.low;
- return (a > b) ? 1 : (a < b) ? -1 : 0;
- }
- if (b > 0)
- {
- if (sign <= 0)
- {
- return -1;
- }
- }
- else if (b < 0)
- {
- if (sign >= 0)
- {
- return 1;
- }
- b = -b;
- }
- else
- {
- return sign;
- }
-
- return numerator.ucmp(denominator * b) * sign;
-}
-
-b3ConvexHullInternal::Edge* b3ConvexHullInternal::newEdgePair(Vertex* from, Vertex* to)
-{
- b3Assert(from && to);
- Edge* e = edgePool.newObject();
- Edge* r = edgePool.newObject();
- e->reverse = r;
- r->reverse = e;
- e->copy = mergeStamp;
- r->copy = mergeStamp;
- e->target = to;
- r->target = from;
- e->face = NULL;
- r->face = NULL;
- usedEdgePairs++;
- if (usedEdgePairs > maxUsedEdgePairs)
- {
- maxUsedEdgePairs = usedEdgePairs;
- }
- return e;
-}
-
-bool b3ConvexHullInternal::mergeProjection(IntermediateHull& h0, IntermediateHull& h1, Vertex*& c0, Vertex*& c1)
-{
- Vertex* v0 = h0.maxYx;
- Vertex* v1 = h1.minYx;
- if ((v0->point.x == v1->point.x) && (v0->point.y == v1->point.y))
- {
- b3Assert(v0->point.z < v1->point.z);
- Vertex* v1p = v1->prev;
- if (v1p == v1)
- {
- c0 = v0;
- if (v1->edges)
- {
- b3Assert(v1->edges->next == v1->edges);
- v1 = v1->edges->target;
- b3Assert(v1->edges->next == v1->edges);
- }
- c1 = v1;
- return false;
- }
- Vertex* v1n = v1->next;
- v1p->next = v1n;
- v1n->prev = v1p;
- if (v1 == h1.minXy)
- {
- if ((v1n->point.x < v1p->point.x) || ((v1n->point.x == v1p->point.x) && (v1n->point.y < v1p->point.y)))
- {
- h1.minXy = v1n;
- }
- else
- {
- h1.minXy = v1p;
- }
- }
- if (v1 == h1.maxXy)
- {
- if ((v1n->point.x > v1p->point.x) || ((v1n->point.x == v1p->point.x) && (v1n->point.y > v1p->point.y)))
- {
- h1.maxXy = v1n;
- }
- else
- {
- h1.maxXy = v1p;
- }
- }
- }
-
- v0 = h0.maxXy;
- v1 = h1.maxXy;
- Vertex* v00 = NULL;
- Vertex* v10 = NULL;
- btInt32_t sign = 1;
-
- for (int side = 0; side <= 1; side++)
- {
- btInt32_t dx = (v1->point.x - v0->point.x) * sign;
- if (dx > 0)
- {
- while (true)
- {
- btInt32_t dy = v1->point.y - v0->point.y;
-
- Vertex* w0 = side ? v0->next : v0->prev;
- if (w0 != v0)
- {
- btInt32_t dx0 = (w0->point.x - v0->point.x) * sign;
- btInt32_t dy0 = w0->point.y - v0->point.y;
- if ((dy0 <= 0) && ((dx0 == 0) || ((dx0 < 0) && (dy0 * dx <= dy * dx0))))
- {
- v0 = w0;
- dx = (v1->point.x - v0->point.x) * sign;
- continue;
- }
- }
-
- Vertex* w1 = side ? v1->next : v1->prev;
- if (w1 != v1)
- {
- btInt32_t dx1 = (w1->point.x - v1->point.x) * sign;
- btInt32_t dy1 = w1->point.y - v1->point.y;
- btInt32_t dxn = (w1->point.x - v0->point.x) * sign;
- if ((dxn > 0) && (dy1 < 0) && ((dx1 == 0) || ((dx1 < 0) && (dy1 * dx < dy * dx1))))
- {
- v1 = w1;
- dx = dxn;
- continue;
- }
- }
-
- break;
- }
- }
- else if (dx < 0)
- {
- while (true)
- {
- btInt32_t dy = v1->point.y - v0->point.y;
-
- Vertex* w1 = side ? v1->prev : v1->next;
- if (w1 != v1)
- {
- btInt32_t dx1 = (w1->point.x - v1->point.x) * sign;
- btInt32_t dy1 = w1->point.y - v1->point.y;
- if ((dy1 >= 0) && ((dx1 == 0) || ((dx1 < 0) && (dy1 * dx <= dy * dx1))))
- {
- v1 = w1;
- dx = (v1->point.x - v0->point.x) * sign;
- continue;
- }
- }
-
- Vertex* w0 = side ? v0->prev : v0->next;
- if (w0 != v0)
- {
- btInt32_t dx0 = (w0->point.x - v0->point.x) * sign;
- btInt32_t dy0 = w0->point.y - v0->point.y;
- btInt32_t dxn = (v1->point.x - w0->point.x) * sign;
- if ((dxn < 0) && (dy0 > 0) && ((dx0 == 0) || ((dx0 < 0) && (dy0 * dx < dy * dx0))))
- {
- v0 = w0;
- dx = dxn;
- continue;
- }
- }
-
- break;
- }
- }
- else
- {
- btInt32_t x = v0->point.x;
- btInt32_t y0 = v0->point.y;
- Vertex* w0 = v0;
- Vertex* t;
- while (((t = side ? w0->next : w0->prev) != v0) && (t->point.x == x) && (t->point.y <= y0))
- {
- w0 = t;
- y0 = t->point.y;
- }
- v0 = w0;
-
- btInt32_t y1 = v1->point.y;
- Vertex* w1 = v1;
- while (((t = side ? w1->prev : w1->next) != v1) && (t->point.x == x) && (t->point.y >= y1))
- {
- w1 = t;
- y1 = t->point.y;
- }
- v1 = w1;
- }
-
- if (side == 0)
- {
- v00 = v0;
- v10 = v1;
-
- v0 = h0.minXy;
- v1 = h1.minXy;
- sign = -1;
- }
- }
-
- v0->prev = v1;
- v1->next = v0;
-
- v00->next = v10;
- v10->prev = v00;
-
- if (h1.minXy->point.x < h0.minXy->point.x)
- {
- h0.minXy = h1.minXy;
- }
- if (h1.maxXy->point.x >= h0.maxXy->point.x)
- {
- h0.maxXy = h1.maxXy;
- }
-
- h0.maxYx = h1.maxYx;
-
- c0 = v00;
- c1 = v10;
-
- return true;
-}
-
-void b3ConvexHullInternal::computeInternal(int start, int end, IntermediateHull& result)
-{
- int n = end - start;
- switch (n)
- {
- case 0:
- result.minXy = NULL;
- result.maxXy = NULL;
- result.minYx = NULL;
- result.maxYx = NULL;
- return;
- case 2:
- {
- Vertex* v = originalVertices[start];
- Vertex* w = v + 1;
- if (v->point != w->point)
- {
- btInt32_t dx = v->point.x - w->point.x;
- btInt32_t dy = v->point.y - w->point.y;
-
- if ((dx == 0) && (dy == 0))
- {
- if (v->point.z > w->point.z)
- {
- Vertex* t = w;
- w = v;
- v = t;
- }
- b3Assert(v->point.z < w->point.z);
- v->next = v;
- v->prev = v;
- result.minXy = v;
- result.maxXy = v;
- result.minYx = v;
- result.maxYx = v;
- }
- else
- {
- v->next = w;
- v->prev = w;
- w->next = v;
- w->prev = v;
-
- if ((dx < 0) || ((dx == 0) && (dy < 0)))
- {
- result.minXy = v;
- result.maxXy = w;
- }
- else
- {
- result.minXy = w;
- result.maxXy = v;
- }
-
- if ((dy < 0) || ((dy == 0) && (dx < 0)))
- {
- result.minYx = v;
- result.maxYx = w;
- }
- else
- {
- result.minYx = w;
- result.maxYx = v;
- }
- }
-
- Edge* e = newEdgePair(v, w);
- e->link(e);
- v->edges = e;
-
- e = e->reverse;
- e->link(e);
- w->edges = e;
-
- return;
- }
- }
- // lint -fallthrough
- case 1:
- {
- Vertex* v = originalVertices[start];
- v->edges = NULL;
- v->next = v;
- v->prev = v;
-
- result.minXy = v;
- result.maxXy = v;
- result.minYx = v;
- result.maxYx = v;
-
- return;
- }
- }
-
- int split0 = start + n / 2;
- Point32 p = originalVertices[split0 - 1]->point;
- int split1 = split0;
- while ((split1 < end) && (originalVertices[split1]->point == p))
- {
- split1++;
- }
- computeInternal(start, split0, result);
- IntermediateHull hull1;
- computeInternal(split1, end, hull1);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("\n\nMerge\n");
- result.print();
- hull1.print();
-#endif
- merge(result, hull1);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("\n Result\n");
- result.print();
-#endif
-}
-
-#ifdef DEBUG_CONVEX_HULL
-void b3ConvexHullInternal::IntermediateHull::print()
-{
- b3Printf(" Hull\n");
- for (Vertex* v = minXy; v;)
- {
- b3Printf(" ");
- v->print();
- if (v == maxXy)
- {
- b3Printf(" maxXy");
- }
- if (v == minYx)
- {
- b3Printf(" minYx");
- }
- if (v == maxYx)
- {
- b3Printf(" maxYx");
- }
- if (v->next->prev != v)
- {
- b3Printf(" Inconsistency");
- }
- b3Printf("\n");
- v = v->next;
- if (v == minXy)
- {
- break;
- }
- }
- if (minXy)
- {
- minXy->copy = (minXy->copy == -1) ? -2 : -1;
- minXy->printGraph();
- }
-}
-
-void b3ConvexHullInternal::Vertex::printGraph()
-{
- print();
- b3Printf("\nEdges\n");
- Edge* e = edges;
- if (e)
- {
- do
- {
- e->print();
- b3Printf("\n");
- e = e->next;
- } while (e != edges);
- do
- {
- Vertex* v = e->target;
- if (v->copy != copy)
- {
- v->copy = copy;
- v->printGraph();
- }
- e = e->next;
- } while (e != edges);
- }
-}
-#endif
-
-b3ConvexHullInternal::Orientation b3ConvexHullInternal::getOrientation(const Edge* prev, const Edge* next, const Point32& s, const Point32& t)
-{
- b3Assert(prev->reverse->target == next->reverse->target);
- if (prev->next == next)
- {
- if (prev->prev == next)
- {
- Point64 n = t.cross(s);
- Point64 m = (*prev->target - *next->reverse->target).cross(*next->target - *next->reverse->target);
- b3Assert(!m.isZero());
- btInt64_t dot = n.dot(m);
- b3Assert(dot != 0);
- return (dot > 0) ? COUNTER_CLOCKWISE : CLOCKWISE;
- }
- return COUNTER_CLOCKWISE;
- }
- else if (prev->prev == next)
- {
- return CLOCKWISE;
- }
- else
- {
- return NONE;
- }
-}
-
-b3ConvexHullInternal::Edge* b3ConvexHullInternal::findMaxAngle(bool ccw, const Vertex* start, const Point32& s, const Point64& rxs, const Point64& sxrxs, Rational64& minCot)
-{
- Edge* minEdge = NULL;
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("find max edge for %d\n", start->point.index);
-#endif
- Edge* e = start->edges;
- if (e)
- {
- do
- {
- if (e->copy > mergeStamp)
- {
- Point32 t = *e->target - *start;
- Rational64 cot(t.dot(sxrxs), t.dot(rxs));
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" Angle is %f (%d) for ", (float)b3Atan(cot.toScalar()), (int)cot.isNaN());
- e->print();
-#endif
- if (cot.isNaN())
- {
- b3Assert(ccw ? (t.dot(s) < 0) : (t.dot(s) > 0));
- }
- else
- {
- int cmp;
- if (minEdge == NULL)
- {
- minCot = cot;
- minEdge = e;
- }
- else if ((cmp = cot.compare(minCot)) < 0)
- {
- minCot = cot;
- minEdge = e;
- }
- else if ((cmp == 0) && (ccw == (getOrientation(minEdge, e, s, t) == COUNTER_CLOCKWISE)))
- {
- minEdge = e;
- }
- }
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("\n");
-#endif
- }
- e = e->next;
- } while (e != start->edges);
- }
- return minEdge;
-}
-
-void b3ConvexHullInternal::findEdgeForCoplanarFaces(Vertex* c0, Vertex* c1, Edge*& e0, Edge*& e1, Vertex* stop0, Vertex* stop1)
-{
- Edge* start0 = e0;
- Edge* start1 = e1;
- Point32 et0 = start0 ? start0->target->point : c0->point;
- Point32 et1 = start1 ? start1->target->point : c1->point;
- Point32 s = c1->point - c0->point;
- Point64 normal = ((start0 ? start0 : start1)->target->point - c0->point).cross(s);
- btInt64_t dist = c0->point.dot(normal);
- b3Assert(!start1 || (start1->target->point.dot(normal) == dist));
- Point64 perp = s.cross(normal);
- b3Assert(!perp.isZero());
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" Advancing %d %d (%p %p, %d %d)\n", c0->point.index, c1->point.index, start0, start1, start0 ? start0->target->point.index : -1, start1 ? start1->target->point.index : -1);
-#endif
-
- btInt64_t maxDot0 = et0.dot(perp);
- if (e0)
- {
- while (e0->target != stop0)
- {
- Edge* e = e0->reverse->prev;
- if (e->target->point.dot(normal) < dist)
- {
- break;
- }
- b3Assert(e->target->point.dot(normal) == dist);
- if (e->copy == mergeStamp)
- {
- break;
- }
- btInt64_t dot = e->target->point.dot(perp);
- if (dot <= maxDot0)
- {
- break;
- }
- maxDot0 = dot;
- e0 = e;
- et0 = e->target->point;
- }
- }
-
- btInt64_t maxDot1 = et1.dot(perp);
- if (e1)
- {
- while (e1->target != stop1)
- {
- Edge* e = e1->reverse->next;
- if (e->target->point.dot(normal) < dist)
- {
- break;
- }
- b3Assert(e->target->point.dot(normal) == dist);
- if (e->copy == mergeStamp)
- {
- break;
- }
- btInt64_t dot = e->target->point.dot(perp);
- if (dot <= maxDot1)
- {
- break;
- }
- maxDot1 = dot;
- e1 = e;
- et1 = e->target->point;
- }
- }
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" Starting at %d %d\n", et0.index, et1.index);
-#endif
-
- btInt64_t dx = maxDot1 - maxDot0;
- if (dx > 0)
- {
- while (true)
- {
- btInt64_t dy = (et1 - et0).dot(s);
-
- if (e0 && (e0->target != stop0))
- {
- Edge* f0 = e0->next->reverse;
- if (f0->copy > mergeStamp)
- {
- btInt64_t dx0 = (f0->target->point - et0).dot(perp);
- btInt64_t dy0 = (f0->target->point - et0).dot(s);
- if ((dx0 == 0) ? (dy0 < 0) : ((dx0 < 0) && (Rational64(dy0, dx0).compare(Rational64(dy, dx)) >= 0)))
- {
- et0 = f0->target->point;
- dx = (et1 - et0).dot(perp);
- e0 = (e0 == start0) ? NULL : f0;
- continue;
- }
- }
- }
-
- if (e1 && (e1->target != stop1))
- {
- Edge* f1 = e1->reverse->next;
- if (f1->copy > mergeStamp)
- {
- Point32 d1 = f1->target->point - et1;
- if (d1.dot(normal) == 0)
- {
- btInt64_t dx1 = d1.dot(perp);
- btInt64_t dy1 = d1.dot(s);
- btInt64_t dxn = (f1->target->point - et0).dot(perp);
- if ((dxn > 0) && ((dx1 == 0) ? (dy1 < 0) : ((dx1 < 0) && (Rational64(dy1, dx1).compare(Rational64(dy, dx)) > 0))))
- {
- e1 = f1;
- et1 = e1->target->point;
- dx = dxn;
- continue;
- }
- }
- else
- {
- b3Assert((e1 == start1) && (d1.dot(normal) < 0));
- }
- }
- }
-
- break;
- }
- }
- else if (dx < 0)
- {
- while (true)
- {
- btInt64_t dy = (et1 - et0).dot(s);
-
- if (e1 && (e1->target != stop1))
- {
- Edge* f1 = e1->prev->reverse;
- if (f1->copy > mergeStamp)
- {
- btInt64_t dx1 = (f1->target->point - et1).dot(perp);
- btInt64_t dy1 = (f1->target->point - et1).dot(s);
- if ((dx1 == 0) ? (dy1 > 0) : ((dx1 < 0) && (Rational64(dy1, dx1).compare(Rational64(dy, dx)) <= 0)))
- {
- et1 = f1->target->point;
- dx = (et1 - et0).dot(perp);
- e1 = (e1 == start1) ? NULL : f1;
- continue;
- }
- }
- }
-
- if (e0 && (e0->target != stop0))
- {
- Edge* f0 = e0->reverse->prev;
- if (f0->copy > mergeStamp)
- {
- Point32 d0 = f0->target->point - et0;
- if (d0.dot(normal) == 0)
- {
- btInt64_t dx0 = d0.dot(perp);
- btInt64_t dy0 = d0.dot(s);
- btInt64_t dxn = (et1 - f0->target->point).dot(perp);
- if ((dxn < 0) && ((dx0 == 0) ? (dy0 > 0) : ((dx0 < 0) && (Rational64(dy0, dx0).compare(Rational64(dy, dx)) < 0))))
- {
- e0 = f0;
- et0 = e0->target->point;
- dx = dxn;
- continue;
- }
- }
- else
- {
- b3Assert((e0 == start0) && (d0.dot(normal) < 0));
- }
- }
- }
-
- break;
- }
- }
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" Advanced edges to %d %d\n", et0.index, et1.index);
-#endif
-}
-
-void b3ConvexHullInternal::merge(IntermediateHull& h0, IntermediateHull& h1)
-{
- if (!h1.maxXy)
- {
- return;
- }
- if (!h0.maxXy)
- {
- h0 = h1;
- return;
- }
-
- mergeStamp--;
-
- Vertex* c0 = NULL;
- Edge* toPrev0 = NULL;
- Edge* firstNew0 = NULL;
- Edge* pendingHead0 = NULL;
- Edge* pendingTail0 = NULL;
- Vertex* c1 = NULL;
- Edge* toPrev1 = NULL;
- Edge* firstNew1 = NULL;
- Edge* pendingHead1 = NULL;
- Edge* pendingTail1 = NULL;
- Point32 prevPoint;
-
- if (mergeProjection(h0, h1, c0, c1))
- {
- Point32 s = *c1 - *c0;
- Point64 normal = Point32(0, 0, -1).cross(s);
- Point64 t = s.cross(normal);
- b3Assert(!t.isZero());
-
- Edge* e = c0->edges;
- Edge* start0 = NULL;
- if (e)
- {
- do
- {
- btInt64_t dot = (*e->target - *c0).dot(normal);
- b3Assert(dot <= 0);
- if ((dot == 0) && ((*e->target - *c0).dot(t) > 0))
- {
- if (!start0 || (getOrientation(start0, e, s, Point32(0, 0, -1)) == CLOCKWISE))
- {
- start0 = e;
- }
- }
- e = e->next;
- } while (e != c0->edges);
- }
-
- e = c1->edges;
- Edge* start1 = NULL;
- if (e)
- {
- do
- {
- btInt64_t dot = (*e->target - *c1).dot(normal);
- b3Assert(dot <= 0);
- if ((dot == 0) && ((*e->target - *c1).dot(t) > 0))
- {
- if (!start1 || (getOrientation(start1, e, s, Point32(0, 0, -1)) == COUNTER_CLOCKWISE))
- {
- start1 = e;
- }
- }
- e = e->next;
- } while (e != c1->edges);
- }
-
- if (start0 || start1)
- {
- findEdgeForCoplanarFaces(c0, c1, start0, start1, NULL, NULL);
- if (start0)
- {
- c0 = start0->target;
- }
- if (start1)
- {
- c1 = start1->target;
- }
- }
-
- prevPoint = c1->point;
- prevPoint.z++;
- }
- else
- {
- prevPoint = c1->point;
- prevPoint.x++;
- }
-
- Vertex* first0 = c0;
- Vertex* first1 = c1;
- bool firstRun = true;
-
- while (true)
- {
- Point32 s = *c1 - *c0;
- Point32 r = prevPoint - c0->point;
- Point64 rxs = r.cross(s);
- Point64 sxrxs = s.cross(rxs);
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("\n Checking %d %d\n", c0->point.index, c1->point.index);
-#endif
- Rational64 minCot0(0, 0);
- Edge* min0 = findMaxAngle(false, c0, s, rxs, sxrxs, minCot0);
- Rational64 minCot1(0, 0);
- Edge* min1 = findMaxAngle(true, c1, s, rxs, sxrxs, minCot1);
- if (!min0 && !min1)
- {
- Edge* e = newEdgePair(c0, c1);
- e->link(e);
- c0->edges = e;
-
- e = e->reverse;
- e->link(e);
- c1->edges = e;
- return;
- }
- else
- {
- int cmp = !min0 ? 1 : !min1 ? -1 : minCot0.compare(minCot1);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" -> Result %d\n", cmp);
-#endif
- if (firstRun || ((cmp >= 0) ? !minCot1.isNegativeInfinity() : !minCot0.isNegativeInfinity()))
- {
- Edge* e = newEdgePair(c0, c1);
- if (pendingTail0)
- {
- pendingTail0->prev = e;
- }
- else
- {
- pendingHead0 = e;
- }
- e->next = pendingTail0;
- pendingTail0 = e;
-
- e = e->reverse;
- if (pendingTail1)
- {
- pendingTail1->next = e;
- }
- else
- {
- pendingHead1 = e;
- }
- e->prev = pendingTail1;
- pendingTail1 = e;
- }
-
- Edge* e0 = min0;
- Edge* e1 = min1;
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" Found min edges to %d %d\n", e0 ? e0->target->point.index : -1, e1 ? e1->target->point.index : -1);
-#endif
-
- if (cmp == 0)
- {
- findEdgeForCoplanarFaces(c0, c1, e0, e1, NULL, NULL);
- }
-
- if ((cmp >= 0) && e1)
- {
- if (toPrev1)
- {
- for (Edge *e = toPrev1->next, *n = NULL; e != min1; e = n)
- {
- n = e->next;
- removeEdgePair(e);
- }
- }
-
- if (pendingTail1)
- {
- if (toPrev1)
- {
- toPrev1->link(pendingHead1);
- }
- else
- {
- min1->prev->link(pendingHead1);
- firstNew1 = pendingHead1;
- }
- pendingTail1->link(min1);
- pendingHead1 = NULL;
- pendingTail1 = NULL;
- }
- else if (!toPrev1)
- {
- firstNew1 = min1;
- }
-
- prevPoint = c1->point;
- c1 = e1->target;
- toPrev1 = e1->reverse;
- }
-
- if ((cmp <= 0) && e0)
- {
- if (toPrev0)
- {
- for (Edge *e = toPrev0->prev, *n = NULL; e != min0; e = n)
- {
- n = e->prev;
- removeEdgePair(e);
- }
- }
-
- if (pendingTail0)
- {
- if (toPrev0)
- {
- pendingHead0->link(toPrev0);
- }
- else
- {
- pendingHead0->link(min0->next);
- firstNew0 = pendingHead0;
- }
- min0->link(pendingTail0);
- pendingHead0 = NULL;
- pendingTail0 = NULL;
- }
- else if (!toPrev0)
- {
- firstNew0 = min0;
- }
-
- prevPoint = c0->point;
- c0 = e0->target;
- toPrev0 = e0->reverse;
- }
- }
-
- if ((c0 == first0) && (c1 == first1))
- {
- if (toPrev0 == NULL)
- {
- pendingHead0->link(pendingTail0);
- c0->edges = pendingTail0;
- }
- else
- {
- for (Edge *e = toPrev0->prev, *n = NULL; e != firstNew0; e = n)
- {
- n = e->prev;
- removeEdgePair(e);
- }
- if (pendingTail0)
- {
- pendingHead0->link(toPrev0);
- firstNew0->link(pendingTail0);
- }
- }
-
- if (toPrev1 == NULL)
- {
- pendingTail1->link(pendingHead1);
- c1->edges = pendingTail1;
- }
- else
- {
- for (Edge *e = toPrev1->next, *n = NULL; e != firstNew1; e = n)
- {
- n = e->next;
- removeEdgePair(e);
- }
- if (pendingTail1)
- {
- toPrev1->link(pendingHead1);
- pendingTail1->link(firstNew1);
- }
- }
-
- return;
- }
-
- firstRun = false;
- }
-}
-
-static bool b3PointCmp(const b3ConvexHullInternal::Point32& p, const b3ConvexHullInternal::Point32& q)
-{
- return (p.y < q.y) || ((p.y == q.y) && ((p.x < q.x) || ((p.x == q.x) && (p.z < q.z))));
-}
-
-void b3ConvexHullInternal::compute(const void* coords, bool doubleCoords, int stride, int count)
-{
- b3Vector3 min = b3MakeVector3(b3Scalar(1e30), b3Scalar(1e30), b3Scalar(1e30)), max = b3MakeVector3(b3Scalar(-1e30), b3Scalar(-1e30), b3Scalar(-1e30));
- const char* ptr = (const char*)coords;
- if (doubleCoords)
- {
- for (int i = 0; i < count; i++)
- {
- const double* v = (const double*)ptr;
- b3Vector3 p = b3MakeVector3((b3Scalar)v[0], (b3Scalar)v[1], (b3Scalar)v[2]);
- ptr += stride;
- min.setMin(p);
- max.setMax(p);
- }
- }
- else
- {
- for (int i = 0; i < count; i++)
- {
- const float* v = (const float*)ptr;
- b3Vector3 p = b3MakeVector3(v[0], v[1], v[2]);
- ptr += stride;
- min.setMin(p);
- max.setMax(p);
- }
- }
-
- b3Vector3 s = max - min;
- maxAxis = s.maxAxis();
- minAxis = s.minAxis();
- if (minAxis == maxAxis)
- {
- minAxis = (maxAxis + 1) % 3;
- }
- medAxis = 3 - maxAxis - minAxis;
-
- s /= b3Scalar(10216);
- if (((medAxis + 1) % 3) != maxAxis)
- {
- s *= -1;
- }
- scaling = s;
-
- if (s[0] != 0)
- {
- s[0] = b3Scalar(1) / s[0];
- }
- if (s[1] != 0)
- {
- s[1] = b3Scalar(1) / s[1];
- }
- if (s[2] != 0)
- {
- s[2] = b3Scalar(1) / s[2];
- }
-
- center = (min + max) * b3Scalar(0.5);
-
- b3AlignedObjectArray<Point32> points;
- points.resize(count);
- ptr = (const char*)coords;
- if (doubleCoords)
- {
- for (int i = 0; i < count; i++)
- {
- const double* v = (const double*)ptr;
- b3Vector3 p = b3MakeVector3((b3Scalar)v[0], (b3Scalar)v[1], (b3Scalar)v[2]);
- ptr += stride;
- p = (p - center) * s;
- points[i].x = (btInt32_t)p[medAxis];
- points[i].y = (btInt32_t)p[maxAxis];
- points[i].z = (btInt32_t)p[minAxis];
- points[i].index = i;
- }
- }
- else
- {
- for (int i = 0; i < count; i++)
- {
- const float* v = (const float*)ptr;
- b3Vector3 p = b3MakeVector3(v[0], v[1], v[2]);
- ptr += stride;
- p = (p - center) * s;
- points[i].x = (btInt32_t)p[medAxis];
- points[i].y = (btInt32_t)p[maxAxis];
- points[i].z = (btInt32_t)p[minAxis];
- points[i].index = i;
- }
- }
- points.quickSort(b3PointCmp);
-
- vertexPool.reset();
- vertexPool.setArraySize(count);
- originalVertices.resize(count);
- for (int i = 0; i < count; i++)
- {
- Vertex* v = vertexPool.newObject();
- v->edges = NULL;
- v->point = points[i];
- v->copy = -1;
- originalVertices[i] = v;
- }
-
- points.clear();
-
- edgePool.reset();
- edgePool.setArraySize(6 * count);
-
- usedEdgePairs = 0;
- maxUsedEdgePairs = 0;
-
- mergeStamp = -3;
-
- IntermediateHull hull;
- computeInternal(0, count, hull);
- vertexList = hull.minXy;
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("max. edges %d (3v = %d)", maxUsedEdgePairs, 3 * count);
-#endif
-}
-
-b3Vector3 b3ConvexHullInternal::toBtVector(const Point32& v)
-{
- b3Vector3 p;
- p[medAxis] = b3Scalar(v.x);
- p[maxAxis] = b3Scalar(v.y);
- p[minAxis] = b3Scalar(v.z);
- return p * scaling;
-}
-
-b3Vector3 b3ConvexHullInternal::getBtNormal(Face* face)
-{
- return toBtVector(face->dir0).cross(toBtVector(face->dir1)).normalized();
-}
-
-b3Vector3 b3ConvexHullInternal::getCoordinates(const Vertex* v)
-{
- b3Vector3 p;
- p[medAxis] = v->xvalue();
- p[maxAxis] = v->yvalue();
- p[minAxis] = v->zvalue();
- return p * scaling + center;
-}
-
-b3Scalar b3ConvexHullInternal::shrink(b3Scalar amount, b3Scalar clampAmount)
-{
- if (!vertexList)
- {
- return 0;
- }
- int stamp = --mergeStamp;
- b3AlignedObjectArray<Vertex*> stack;
- vertexList->copy = stamp;
- stack.push_back(vertexList);
- b3AlignedObjectArray<Face*> faces;
-
- Point32 ref = vertexList->point;
- Int128 hullCenterX(0, 0);
- Int128 hullCenterY(0, 0);
- Int128 hullCenterZ(0, 0);
- Int128 volume(0, 0);
-
- while (stack.size() > 0)
- {
- Vertex* v = stack[stack.size() - 1];
- stack.pop_back();
- Edge* e = v->edges;
- if (e)
- {
- do
- {
- if (e->target->copy != stamp)
- {
- e->target->copy = stamp;
- stack.push_back(e->target);
- }
- if (e->copy != stamp)
- {
- Face* face = facePool.newObject();
- face->init(e->target, e->reverse->prev->target, v);
- faces.push_back(face);
- Edge* f = e;
-
- Vertex* a = NULL;
- Vertex* b = NULL;
- do
- {
- if (a && b)
- {
- btInt64_t vol = (v->point - ref).dot((a->point - ref).cross(b->point - ref));
- b3Assert(vol >= 0);
- Point32 c = v->point + a->point + b->point + ref;
- hullCenterX += vol * c.x;
- hullCenterY += vol * c.y;
- hullCenterZ += vol * c.z;
- volume += vol;
- }
-
- b3Assert(f->copy != stamp);
- f->copy = stamp;
- f->face = face;
-
- a = b;
- b = f->target;
-
- f = f->reverse->prev;
- } while (f != e);
- }
- e = e->next;
- } while (e != v->edges);
- }
- }
-
- if (volume.getSign() <= 0)
- {
- return 0;
- }
-
- b3Vector3 hullCenter;
- hullCenter[medAxis] = hullCenterX.toScalar();
- hullCenter[maxAxis] = hullCenterY.toScalar();
- hullCenter[minAxis] = hullCenterZ.toScalar();
- hullCenter /= 4 * volume.toScalar();
- hullCenter *= scaling;
-
- int faceCount = faces.size();
-
- if (clampAmount > 0)
- {
- b3Scalar minDist = B3_INFINITY;
- for (int i = 0; i < faceCount; i++)
- {
- b3Vector3 normal = getBtNormal(faces[i]);
- b3Scalar dist = normal.dot(toBtVector(faces[i]->origin) - hullCenter);
- if (dist < minDist)
- {
- minDist = dist;
- }
- }
-
- if (minDist <= 0)
- {
- return 0;
- }
-
- amount = b3Min(amount, minDist * clampAmount);
- }
-
- unsigned int seed = 243703;
- for (int i = 0; i < faceCount; i++, seed = 1664525 * seed + 1013904223)
- {
- b3Swap(faces[i], faces[seed % faceCount]);
- }
-
- for (int i = 0; i < faceCount; i++)
- {
- if (!shiftFace(faces[i], amount, stack))
- {
- return -amount;
- }
- }
-
- return amount;
-}
-
-bool b3ConvexHullInternal::shiftFace(Face* face, b3Scalar amount, b3AlignedObjectArray<Vertex*> stack)
-{
- b3Vector3 origShift = getBtNormal(face) * -amount;
- if (scaling[0] != 0)
- {
- origShift[0] /= scaling[0];
- }
- if (scaling[1] != 0)
- {
- origShift[1] /= scaling[1];
- }
- if (scaling[2] != 0)
- {
- origShift[2] /= scaling[2];
- }
- Point32 shift((btInt32_t)origShift[medAxis], (btInt32_t)origShift[maxAxis], (btInt32_t)origShift[minAxis]);
- if (shift.isZero())
- {
- return true;
- }
- Point64 normal = face->getNormal();
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("\nShrinking face (%d %d %d) (%d %d %d) (%d %d %d) by (%d %d %d)\n",
- face->origin.x, face->origin.y, face->origin.z, face->dir0.x, face->dir0.y, face->dir0.z, face->dir1.x, face->dir1.y, face->dir1.z, shift.x, shift.y, shift.z);
-#endif
- btInt64_t origDot = face->origin.dot(normal);
- Point32 shiftedOrigin = face->origin + shift;
- btInt64_t shiftedDot = shiftedOrigin.dot(normal);
- b3Assert(shiftedDot <= origDot);
- if (shiftedDot >= origDot)
- {
- return false;
- }
-
- Edge* intersection = NULL;
-
- Edge* startEdge = face->nearbyVertex->edges;
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Start edge is ");
- startEdge->print();
- b3Printf(", normal is (%lld %lld %lld), shifted dot is %lld\n", normal.x, normal.y, normal.z, shiftedDot);
-#endif
- Rational128 optDot = face->nearbyVertex->dot(normal);
- int cmp = optDot.compare(shiftedDot);
-#ifdef SHOW_ITERATIONS
- int n = 0;
-#endif
- if (cmp >= 0)
- {
- Edge* e = startEdge;
- do
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- Rational128 dot = e->target->dot(normal);
- b3Assert(dot.compare(origDot) <= 0);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Moving downwards, edge is ");
- e->print();
- b3Printf(", dot is %f (%f %lld)\n", (float)dot.toScalar(), (float)optDot.toScalar(), shiftedDot);
-#endif
- if (dot.compare(optDot) < 0)
- {
- int c = dot.compare(shiftedDot);
- optDot = dot;
- e = e->reverse;
- startEdge = e;
- if (c < 0)
- {
- intersection = e;
- break;
- }
- cmp = c;
- }
- e = e->prev;
- } while (e != startEdge);
-
- if (!intersection)
- {
- return false;
- }
- }
- else
- {
- Edge* e = startEdge;
- do
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- Rational128 dot = e->target->dot(normal);
- b3Assert(dot.compare(origDot) <= 0);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Moving upwards, edge is ");
- e->print();
- b3Printf(", dot is %f (%f %lld)\n", (float)dot.toScalar(), (float)optDot.toScalar(), shiftedDot);
-#endif
- if (dot.compare(optDot) > 0)
- {
- cmp = dot.compare(shiftedDot);
- if (cmp >= 0)
- {
- intersection = e;
- break;
- }
- optDot = dot;
- e = e->reverse;
- startEdge = e;
- }
- e = e->prev;
- } while (e != startEdge);
-
- if (!intersection)
- {
- return true;
- }
- }
-
-#ifdef SHOW_ITERATIONS
- b3Printf("Needed %d iterations to find initial intersection\n", n);
-#endif
-
- if (cmp == 0)
- {
- Edge* e = intersection->reverse->next;
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- while (e->target->dot(normal).compare(shiftedDot) <= 0)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- e = e->next;
- if (e == intersection->reverse)
- {
- return true;
- }
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Checking for outwards edge, current edge is ");
- e->print();
- b3Printf("\n");
-#endif
- }
-#ifdef SHOW_ITERATIONS
- b3Printf("Needed %d iterations to check for complete containment\n", n);
-#endif
- }
-
- Edge* firstIntersection = NULL;
- Edge* faceEdge = NULL;
- Edge* firstFaceEdge = NULL;
-
-#ifdef SHOW_ITERATIONS
- int m = 0;
-#endif
- while (true)
- {
-#ifdef SHOW_ITERATIONS
- m++;
-#endif
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Intersecting edge is ");
- intersection->print();
- b3Printf("\n");
-#endif
- if (cmp == 0)
- {
- Edge* e = intersection->reverse->next;
- startEdge = e;
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- while (true)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- if (e->target->dot(normal).compare(shiftedDot) >= 0)
- {
- break;
- }
- intersection = e->reverse;
- e = e->next;
- if (e == startEdge)
- {
- return true;
- }
- }
-#ifdef SHOW_ITERATIONS
- b3Printf("Needed %d iterations to advance intersection\n", n);
-#endif
- }
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Advanced intersecting edge to ");
- intersection->print();
- b3Printf(", cmp = %d\n", cmp);
-#endif
-
- if (!firstIntersection)
- {
- firstIntersection = intersection;
- }
- else if (intersection == firstIntersection)
- {
- break;
- }
-
- int prevCmp = cmp;
- Edge* prevIntersection = intersection;
- Edge* prevFaceEdge = faceEdge;
-
- Edge* e = intersection->reverse;
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- while (true)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- e = e->reverse->prev;
- b3Assert(e != intersection->reverse);
- cmp = e->target->dot(normal).compare(shiftedDot);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Testing edge ");
- e->print();
- b3Printf(" -> cmp = %d\n", cmp);
-#endif
- if (cmp >= 0)
- {
- intersection = e;
- break;
- }
- }
-#ifdef SHOW_ITERATIONS
- b3Printf("Needed %d iterations to find other intersection of face\n", n);
-#endif
-
- if (cmp > 0)
- {
- Vertex* removed = intersection->target;
- e = intersection->reverse;
- if (e->prev == e)
- {
- removed->edges = NULL;
- }
- else
- {
- removed->edges = e->prev;
- e->prev->link(e->next);
- e->link(e);
- }
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("1: Removed part contains (%d %d %d)\n", removed->point.x, removed->point.y, removed->point.z);
-#endif
-
- Point64 n0 = intersection->face->getNormal();
- Point64 n1 = intersection->reverse->face->getNormal();
- btInt64_t m00 = face->dir0.dot(n0);
- btInt64_t m01 = face->dir1.dot(n0);
- btInt64_t m10 = face->dir0.dot(n1);
- btInt64_t m11 = face->dir1.dot(n1);
- btInt64_t r0 = (intersection->face->origin - shiftedOrigin).dot(n0);
- btInt64_t r1 = (intersection->reverse->face->origin - shiftedOrigin).dot(n1);
- Int128 det = Int128::mul(m00, m11) - Int128::mul(m01, m10);
- b3Assert(det.getSign() != 0);
- Vertex* v = vertexPool.newObject();
- v->point.index = -1;
- v->copy = -1;
- v->point128 = PointR128(Int128::mul(face->dir0.x * r0, m11) - Int128::mul(face->dir0.x * r1, m01) + Int128::mul(face->dir1.x * r1, m00) - Int128::mul(face->dir1.x * r0, m10) + det * shiftedOrigin.x,
- Int128::mul(face->dir0.y * r0, m11) - Int128::mul(face->dir0.y * r1, m01) + Int128::mul(face->dir1.y * r1, m00) - Int128::mul(face->dir1.y * r0, m10) + det * shiftedOrigin.y,
- Int128::mul(face->dir0.z * r0, m11) - Int128::mul(face->dir0.z * r1, m01) + Int128::mul(face->dir1.z * r1, m00) - Int128::mul(face->dir1.z * r0, m10) + det * shiftedOrigin.z,
- det);
- v->point.x = (btInt32_t)v->point128.xvalue();
- v->point.y = (btInt32_t)v->point128.yvalue();
- v->point.z = (btInt32_t)v->point128.zvalue();
- intersection->target = v;
- v->edges = e;
-
- stack.push_back(v);
- stack.push_back(removed);
- stack.push_back(NULL);
- }
-
- if (cmp || prevCmp || (prevIntersection->reverse->next->target != intersection->target))
- {
- faceEdge = newEdgePair(prevIntersection->target, intersection->target);
- if (prevCmp == 0)
- {
- faceEdge->link(prevIntersection->reverse->next);
- }
- if ((prevCmp == 0) || prevFaceEdge)
- {
- prevIntersection->reverse->link(faceEdge);
- }
- if (cmp == 0)
- {
- intersection->reverse->prev->link(faceEdge->reverse);
- }
- faceEdge->reverse->link(intersection->reverse);
- }
- else
- {
- faceEdge = prevIntersection->reverse->next;
- }
-
- if (prevFaceEdge)
- {
- if (prevCmp > 0)
- {
- faceEdge->link(prevFaceEdge->reverse);
- }
- else if (faceEdge != prevFaceEdge->reverse)
- {
- stack.push_back(prevFaceEdge->target);
- while (faceEdge->next != prevFaceEdge->reverse)
- {
- Vertex* removed = faceEdge->next->target;
- removeEdgePair(faceEdge->next);
- stack.push_back(removed);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("2: Removed part contains (%d %d %d)\n", removed->point.x, removed->point.y, removed->point.z);
-#endif
- }
- stack.push_back(NULL);
- }
- }
- faceEdge->face = face;
- faceEdge->reverse->face = intersection->face;
-
- if (!firstFaceEdge)
- {
- firstFaceEdge = faceEdge;
- }
- }
-#ifdef SHOW_ITERATIONS
- b3Printf("Needed %d iterations to process all intersections\n", m);
-#endif
-
- if (cmp > 0)
- {
- firstFaceEdge->reverse->target = faceEdge->target;
- firstIntersection->reverse->link(firstFaceEdge);
- firstFaceEdge->link(faceEdge->reverse);
- }
- else if (firstFaceEdge != faceEdge->reverse)
- {
- stack.push_back(faceEdge->target);
- while (firstFaceEdge->next != faceEdge->reverse)
- {
- Vertex* removed = firstFaceEdge->next->target;
- removeEdgePair(firstFaceEdge->next);
- stack.push_back(removed);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("3: Removed part contains (%d %d %d)\n", removed->point.x, removed->point.y, removed->point.z);
-#endif
- }
- stack.push_back(NULL);
- }
-
- b3Assert(stack.size() > 0);
- vertexList = stack[0];
-
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Removing part\n");
-#endif
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- int pos = 0;
- while (pos < stack.size())
- {
- int end = stack.size();
- while (pos < end)
- {
- Vertex* kept = stack[pos++];
-#ifdef DEBUG_CONVEX_HULL
- kept->print();
-#endif
- bool deeper = false;
- Vertex* removed;
- while ((removed = stack[pos++]) != NULL)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- kept->receiveNearbyFaces(removed);
- while (removed->edges)
- {
- if (!deeper)
- {
- deeper = true;
- stack.push_back(kept);
- }
- stack.push_back(removed->edges->target);
- removeEdgePair(removed->edges);
- }
- }
- if (deeper)
- {
- stack.push_back(NULL);
- }
- }
- }
-#ifdef SHOW_ITERATIONS
- b3Printf("Needed %d iterations to remove part\n", n);
-#endif
-
- stack.resize(0);
- face->origin = shiftedOrigin;
-
- return true;
-}
-
-static int getVertexCopy(b3ConvexHullInternal::Vertex* vertex, b3AlignedObjectArray<b3ConvexHullInternal::Vertex*>& vertices)
-{
- int index = vertex->copy;
- if (index < 0)
- {
- index = vertices.size();
- vertex->copy = index;
- vertices.push_back(vertex);
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Vertex %d gets index *%d\n", vertex->point.index, index);
-#endif
- }
- return index;
-}
-
-b3Scalar b3ConvexHullComputer::compute(const void* coords, bool doubleCoords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp)
-{
- if (count <= 0)
- {
- vertices.clear();
- edges.clear();
- faces.clear();
- return 0;
- }
-
- b3ConvexHullInternal hull;
- hull.compute(coords, doubleCoords, stride, count);
-
- b3Scalar shift = 0;
- if ((shrink > 0) && ((shift = hull.shrink(shrink, shrinkClamp)) < 0))
- {
- vertices.clear();
- edges.clear();
- faces.clear();
- return shift;
- }
-
- vertices.resize(0);
- edges.resize(0);
- faces.resize(0);
-
- b3AlignedObjectArray<b3ConvexHullInternal::Vertex*> oldVertices;
- getVertexCopy(hull.vertexList, oldVertices);
- int copied = 0;
- while (copied < oldVertices.size())
- {
- b3ConvexHullInternal::Vertex* v = oldVertices[copied];
- vertices.push_back(hull.getCoordinates(v));
- b3ConvexHullInternal::Edge* firstEdge = v->edges;
- if (firstEdge)
- {
- int firstCopy = -1;
- int prevCopy = -1;
- b3ConvexHullInternal::Edge* e = firstEdge;
- do
- {
- if (e->copy < 0)
- {
- int s = edges.size();
- edges.push_back(Edge());
- edges.push_back(Edge());
- Edge* c = &edges[s];
- Edge* r = &edges[s + 1];
- e->copy = s;
- e->reverse->copy = s + 1;
- c->reverse = 1;
- r->reverse = -1;
- c->targetVertex = getVertexCopy(e->target, oldVertices);
- r->targetVertex = copied;
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" CREATE: Vertex *%d has edge to *%d\n", copied, c->getTargetVertex());
-#endif
- }
- if (prevCopy >= 0)
- {
- edges[e->copy].next = prevCopy - e->copy;
- }
- else
- {
- firstCopy = e->copy;
- }
- prevCopy = e->copy;
- e = e->next;
- } while (e != firstEdge);
- edges[firstCopy].next = prevCopy - firstCopy;
- }
- copied++;
- }
-
- for (int i = 0; i < copied; i++)
- {
- b3ConvexHullInternal::Vertex* v = oldVertices[i];
- b3ConvexHullInternal::Edge* firstEdge = v->edges;
- if (firstEdge)
- {
- b3ConvexHullInternal::Edge* e = firstEdge;
- do
- {
- if (e->copy >= 0)
- {
-#ifdef DEBUG_CONVEX_HULL
- b3Printf("Vertex *%d has edge to *%d\n", i, edges[e->copy].getTargetVertex());
-#endif
- faces.push_back(e->copy);
- b3ConvexHullInternal::Edge* f = e;
- do
- {
-#ifdef DEBUG_CONVEX_HULL
- b3Printf(" Face *%d\n", edges[f->copy].getTargetVertex());
-#endif
- f->copy = -1;
- f = f->reverse->prev;
- } while (f != e);
- }
- e = e->next;
- } while (e != firstEdge);
- }
- }
-
- return shift;
-}
diff --git a/thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.h b/thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.h
deleted file mode 100644
index 8852c5a524..0000000000
--- a/thirdparty/bullet/Bullet3Geometry/b3ConvexHullComputer.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-Copyright (c) 2011 Ole Kniemeyer, MAXON, www.maxon.net
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_CONVEX_HULL_COMPUTER_H
-#define B3_CONVEX_HULL_COMPUTER_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-/// Convex hull implementation based on Preparata and Hong
-/// See http://code.google.com/p/bullet/issues/detail?id=275
-/// Ole Kniemeyer, MAXON Computer GmbH
-class b3ConvexHullComputer
-{
-private:
- b3Scalar compute(const void* coords, bool doubleCoords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp);
-
-public:
- class Edge
- {
- private:
- int next;
- int reverse;
- int targetVertex;
-
- friend class b3ConvexHullComputer;
-
- public:
- int getSourceVertex() const
- {
- return (this + reverse)->targetVertex;
- }
-
- int getTargetVertex() const
- {
- return targetVertex;
- }
-
- const Edge* getNextEdgeOfVertex() const // clockwise list of all edges of a vertex
- {
- return this + next;
- }
-
- const Edge* getNextEdgeOfFace() const // counter-clockwise list of all edges of a face
- {
- return (this + reverse)->getNextEdgeOfVertex();
- }
-
- const Edge* getReverseEdge() const
- {
- return this + reverse;
- }
- };
-
- // Vertices of the output hull
- b3AlignedObjectArray<b3Vector3> vertices;
-
- // Edges of the output hull
- b3AlignedObjectArray<Edge> edges;
-
- // Faces of the convex hull. Each entry is an index into the "edges" array pointing to an edge of the face. Faces are planar n-gons
- b3AlignedObjectArray<int> faces;
-
- /*
- Compute convex hull of "count" vertices stored in "coords". "stride" is the difference in bytes
- between the addresses of consecutive vertices. If "shrink" is positive, the convex hull is shrunken
- by that amount (each face is moved by "shrink" length units towards the center along its normal).
- If "shrinkClamp" is positive, "shrink" is clamped to not exceed "shrinkClamp * innerRadius", where "innerRadius"
- is the minimum distance of a face to the center of the convex hull.
-
- The returned value is the amount by which the hull has been shrunken. If it is negative, the amount was so large
- that the resulting convex hull is empty.
-
- The output convex hull can be found in the member variables "vertices", "edges", "faces".
- */
- b3Scalar compute(const float* coords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp)
- {
- return compute(coords, false, stride, count, shrink, shrinkClamp);
- }
-
- // same as above, but double precision
- b3Scalar compute(const double* coords, int stride, int count, b3Scalar shrink, b3Scalar shrinkClamp)
- {
- return compute(coords, true, stride, count, shrink, shrinkClamp);
- }
-};
-
-#endif //B3_CONVEX_HULL_COMPUTER_H
diff --git a/thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.cpp b/thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.cpp
deleted file mode 100644
index c4041003ca..0000000000
--- a/thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3GeometryUtil.h"
-
-/*
- Make sure this dummy function never changes so that it
- can be used by probes that are checking whether the
- library is actually installed.
-*/
-extern "C"
-{
- void b3BulletMathProbe();
-
- void b3BulletMathProbe() {}
-}
-
-bool b3GeometryUtil::isPointInsidePlanes(const b3AlignedObjectArray<b3Vector3>& planeEquations, const b3Vector3& point, b3Scalar margin)
-{
- int numbrushes = planeEquations.size();
- for (int i = 0; i < numbrushes; i++)
- {
- const b3Vector3& N1 = planeEquations[i];
- b3Scalar dist = b3Scalar(N1.dot(point)) + b3Scalar(N1[3]) - margin;
- if (dist > b3Scalar(0.))
- {
- return false;
- }
- }
- return true;
-}
-
-bool b3GeometryUtil::areVerticesBehindPlane(const b3Vector3& planeNormal, const b3AlignedObjectArray<b3Vector3>& vertices, b3Scalar margin)
-{
- int numvertices = vertices.size();
- for (int i = 0; i < numvertices; i++)
- {
- const b3Vector3& N1 = vertices[i];
- b3Scalar dist = b3Scalar(planeNormal.dot(N1)) + b3Scalar(planeNormal[3]) - margin;
- if (dist > b3Scalar(0.))
- {
- return false;
- }
- }
- return true;
-}
-
-bool notExist(const b3Vector3& planeEquation, const b3AlignedObjectArray<b3Vector3>& planeEquations);
-
-bool notExist(const b3Vector3& planeEquation, const b3AlignedObjectArray<b3Vector3>& planeEquations)
-{
- int numbrushes = planeEquations.size();
- for (int i = 0; i < numbrushes; i++)
- {
- const b3Vector3& N1 = planeEquations[i];
- if (planeEquation.dot(N1) > b3Scalar(0.999))
- {
- return false;
- }
- }
- return true;
-}
-
-void b3GeometryUtil::getPlaneEquationsFromVertices(b3AlignedObjectArray<b3Vector3>& vertices, b3AlignedObjectArray<b3Vector3>& planeEquationsOut)
-{
- const int numvertices = vertices.size();
- // brute force:
- for (int i = 0; i < numvertices; i++)
- {
- const b3Vector3& N1 = vertices[i];
-
- for (int j = i + 1; j < numvertices; j++)
- {
- const b3Vector3& N2 = vertices[j];
-
- for (int k = j + 1; k < numvertices; k++)
- {
- const b3Vector3& N3 = vertices[k];
-
- b3Vector3 planeEquation, edge0, edge1;
- edge0 = N2 - N1;
- edge1 = N3 - N1;
- b3Scalar normalSign = b3Scalar(1.);
- for (int ww = 0; ww < 2; ww++)
- {
- planeEquation = normalSign * edge0.cross(edge1);
- if (planeEquation.length2() > b3Scalar(0.0001))
- {
- planeEquation.normalize();
- if (notExist(planeEquation, planeEquationsOut))
- {
- planeEquation[3] = -planeEquation.dot(N1);
-
- //check if inside, and replace supportingVertexOut if needed
- if (areVerticesBehindPlane(planeEquation, vertices, b3Scalar(0.01)))
- {
- planeEquationsOut.push_back(planeEquation);
- }
- }
- }
- normalSign = b3Scalar(-1.);
- }
- }
- }
- }
-}
-
-void b3GeometryUtil::getVerticesFromPlaneEquations(const b3AlignedObjectArray<b3Vector3>& planeEquations, b3AlignedObjectArray<b3Vector3>& verticesOut)
-{
- const int numbrushes = planeEquations.size();
- // brute force:
- for (int i = 0; i < numbrushes; i++)
- {
- const b3Vector3& N1 = planeEquations[i];
-
- for (int j = i + 1; j < numbrushes; j++)
- {
- const b3Vector3& N2 = planeEquations[j];
-
- for (int k = j + 1; k < numbrushes; k++)
- {
- const b3Vector3& N3 = planeEquations[k];
-
- b3Vector3 n2n3;
- n2n3 = N2.cross(N3);
- b3Vector3 n3n1;
- n3n1 = N3.cross(N1);
- b3Vector3 n1n2;
- n1n2 = N1.cross(N2);
-
- if ((n2n3.length2() > b3Scalar(0.0001)) &&
- (n3n1.length2() > b3Scalar(0.0001)) &&
- (n1n2.length2() > b3Scalar(0.0001)))
- {
- //point P out of 3 plane equations:
-
- // d1 ( N2 * N3 ) + d2 ( N3 * N1 ) + d3 ( N1 * N2 )
- //P = -------------------------------------------------------------------------
- // N1 . ( N2 * N3 )
-
- b3Scalar quotient = (N1.dot(n2n3));
- if (b3Fabs(quotient) > b3Scalar(0.000001))
- {
- quotient = b3Scalar(-1.) / quotient;
- n2n3 *= N1[3];
- n3n1 *= N2[3];
- n1n2 *= N3[3];
- b3Vector3 potentialVertex = n2n3;
- potentialVertex += n3n1;
- potentialVertex += n1n2;
- potentialVertex *= quotient;
-
- //check if inside, and replace supportingVertexOut if needed
- if (isPointInsidePlanes(planeEquations, potentialVertex, b3Scalar(0.01)))
- {
- verticesOut.push_back(potentialVertex);
- }
- }
- }
- }
- }
- }
-}
diff --git a/thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.h b/thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.h
deleted file mode 100644
index 967c8d67e9..0000000000
--- a/thirdparty/bullet/Bullet3Geometry/b3GeometryUtil.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_GEOMETRY_UTIL_H
-#define B3_GEOMETRY_UTIL_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-///The b3GeometryUtil helper class provides a few methods to convert between plane equations and vertices.
-class b3GeometryUtil
-{
-public:
- static void getPlaneEquationsFromVertices(b3AlignedObjectArray<b3Vector3>& vertices, b3AlignedObjectArray<b3Vector3>& planeEquationsOut);
-
- static void getVerticesFromPlaneEquations(const b3AlignedObjectArray<b3Vector3>& planeEquations, b3AlignedObjectArray<b3Vector3>& verticesOut);
-
- static bool isInside(const b3AlignedObjectArray<b3Vector3>& vertices, const b3Vector3& planeNormal, b3Scalar margin);
-
- static bool isPointInsidePlanes(const b3AlignedObjectArray<b3Vector3>& planeEquations, const b3Vector3& point, b3Scalar margin);
-
- static bool areVerticesBehindPlane(const b3Vector3& planeNormal, const b3AlignedObjectArray<b3Vector3>& vertices, b3Scalar margin);
-};
-
-#endif //B3_GEOMETRY_UTIL_H
diff --git a/thirdparty/bullet/Bullet3Geometry/b3GrahamScan2dConvexHull.h b/thirdparty/bullet/Bullet3Geometry/b3GrahamScan2dConvexHull.h
deleted file mode 100644
index 8881c9a638..0000000000
--- a/thirdparty/bullet/Bullet3Geometry/b3GrahamScan2dConvexHull.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_GRAHAM_SCAN_2D_CONVEX_HULL_H
-#define B3_GRAHAM_SCAN_2D_CONVEX_HULL_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-struct b3GrahamVector3 : public b3Vector3
-{
- b3GrahamVector3(const b3Vector3& org, int orgIndex)
- : b3Vector3(org),
- m_orgIndex(orgIndex)
- {
- }
- b3Scalar m_angle;
- int m_orgIndex;
-};
-
-struct b3AngleCompareFunc
-{
- b3Vector3 m_anchor;
- b3AngleCompareFunc(const b3Vector3& anchor)
- : m_anchor(anchor)
- {
- }
- bool operator()(const b3GrahamVector3& a, const b3GrahamVector3& b) const
- {
- if (a.m_angle != b.m_angle)
- return a.m_angle < b.m_angle;
- else
- {
- b3Scalar al = (a - m_anchor).length2();
- b3Scalar bl = (b - m_anchor).length2();
- if (al != bl)
- return al < bl;
- else
- {
- return a.m_orgIndex < b.m_orgIndex;
- }
- }
- }
-};
-
-inline void b3GrahamScanConvexHull2D(b3AlignedObjectArray<b3GrahamVector3>& originalPoints, b3AlignedObjectArray<b3GrahamVector3>& hull, const b3Vector3& normalAxis)
-{
- b3Vector3 axis0, axis1;
- b3PlaneSpace1(normalAxis, axis0, axis1);
-
- if (originalPoints.size() <= 1)
- {
- for (int i = 0; i < originalPoints.size(); i++)
- hull.push_back(originalPoints[0]);
- return;
- }
- //step1 : find anchor point with smallest projection on axis0 and move it to first location
- for (int i = 0; i < originalPoints.size(); i++)
- {
- // const b3Vector3& left = originalPoints[i];
- // const b3Vector3& right = originalPoints[0];
- b3Scalar projL = originalPoints[i].dot(axis0);
- b3Scalar projR = originalPoints[0].dot(axis0);
- if (projL < projR)
- {
- originalPoints.swap(0, i);
- }
- }
-
- //also precompute angles
- originalPoints[0].m_angle = -1e30f;
- for (int i = 1; i < originalPoints.size(); i++)
- {
- b3Vector3 xvec = axis0;
- b3Vector3 ar = originalPoints[i] - originalPoints[0];
- originalPoints[i].m_angle = b3Cross(xvec, ar).dot(normalAxis) / ar.length();
- }
-
- //step 2: sort all points, based on 'angle' with this anchor
- b3AngleCompareFunc comp(originalPoints[0]);
- originalPoints.quickSortInternal(comp, 1, originalPoints.size() - 1);
-
- int i;
- for (i = 0; i < 2; i++)
- hull.push_back(originalPoints[i]);
-
- //step 3: keep all 'convex' points and discard concave points (using back tracking)
- for (; i != originalPoints.size(); i++)
- {
- bool isConvex = false;
- while (!isConvex && hull.size() > 1)
- {
- b3Vector3& a = hull[hull.size() - 2];
- b3Vector3& b = hull[hull.size() - 1];
- isConvex = b3Cross(a - b, a - originalPoints[i]).dot(normalAxis) > 0;
- if (!isConvex)
- hull.pop_back();
- else
- hull.push_back(originalPoints[i]);
- }
- }
-}
-
-#endif //B3_GRAHAM_SCAN_2D_CONVEX_HULL_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h
deleted file mode 100644
index b296992525..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h
+++ /dev/null
@@ -1,42 +0,0 @@
-
-#ifndef B3_GPU_BROADPHASE_INTERFACE_H
-#define B3_GPU_BROADPHASE_INTERFACE_H
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "Bullet3Common/b3Vector3.h"
-#include "b3SapAabb.h"
-#include "Bullet3Common/shared/b3Int2.h"
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-
-class b3GpuBroadphaseInterface
-{
-public:
- typedef class b3GpuBroadphaseInterface*(CreateFunc)(cl_context ctx, cl_device_id device, cl_command_queue q);
-
- virtual ~b3GpuBroadphaseInterface()
- {
- }
-
- virtual void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask) = 0;
- virtual void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask) = 0;
-
- virtual void calculateOverlappingPairs(int maxPairs) = 0;
- virtual void calculateOverlappingPairsHost(int maxPairs) = 0;
-
- //call writeAabbsToGpu after done making all changes (createProxy etc)
- virtual void writeAabbsToGpu() = 0;
-
- virtual cl_mem getAabbBufferWS() = 0;
- virtual int getNumOverlap() = 0;
- virtual cl_mem getOverlappingPairBuffer() = 0;
-
- virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU() = 0;
- virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU() = 0;
-
- virtual b3OpenCLArray<b3Int4>& getOverlappingPairsGPU() = 0;
- virtual b3OpenCLArray<int>& getSmallAabbIndicesGPU() = 0;
- virtual b3OpenCLArray<int>& getLargeAabbIndicesGPU() = 0;
-};
-
-#endif //B3_GPU_BROADPHASE_INTERFACE_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.cpp b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.cpp
deleted file mode 100644
index e714fadac3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.cpp
+++ /dev/null
@@ -1,338 +0,0 @@
-
-#include "b3GpuGridBroadphase.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-#include "kernels/gridBroadphaseKernels.h"
-#include "kernels/sapKernels.h"
-//#include "kernels/gridBroadphase.cl"
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-
-#define B3_BROADPHASE_SAP_PATH "src/Bullet3OpenCL/BroadphaseCollision/kernels/sap.cl"
-#define B3_GRID_BROADPHASE_PATH "src/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphase.cl"
-
-cl_kernel kCalcHashAABB;
-cl_kernel kClearCellStart;
-cl_kernel kFindCellStart;
-cl_kernel kFindOverlappingPairs;
-cl_kernel m_copyAabbsKernel;
-cl_kernel m_sap2Kernel;
-
-//int maxPairsPerBody = 64;
-int maxBodiesPerCell = 256; //??
-
-b3GpuGridBroadphase::b3GpuGridBroadphase(cl_context ctx, cl_device_id device, cl_command_queue q)
- : m_context(ctx),
- m_device(device),
- m_queue(q),
- m_allAabbsGPU1(ctx, q),
- m_smallAabbsMappingGPU(ctx, q),
- m_largeAabbsMappingGPU(ctx, q),
- m_gpuPairs(ctx, q),
-
- m_hashGpu(ctx, q),
-
- m_cellStartGpu(ctx, q),
- m_paramsGPU(ctx, q)
-{
- b3Vector3 gridSize = b3MakeVector3(3, 3, 3);
- b3Vector3 invGridSize = b3MakeVector3(1.f / gridSize[0], 1.f / gridSize[1], 1.f / gridSize[2]);
-
- m_paramsCPU.m_gridSize[0] = 128;
- m_paramsCPU.m_gridSize[1] = 128;
- m_paramsCPU.m_gridSize[2] = 128;
- m_paramsCPU.m_gridSize[3] = maxBodiesPerCell;
- m_paramsCPU.setMaxBodiesPerCell(maxBodiesPerCell);
- m_paramsCPU.m_invCellSize[0] = invGridSize[0];
- m_paramsCPU.m_invCellSize[1] = invGridSize[1];
- m_paramsCPU.m_invCellSize[2] = invGridSize[2];
- m_paramsCPU.m_invCellSize[3] = 0.f;
- m_paramsGPU.push_back(m_paramsCPU);
-
- cl_int errNum = 0;
-
- {
- const char* sapSrc = sapCL;
- cl_program sapProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, sapSrc, &errNum, "", B3_BROADPHASE_SAP_PATH);
- b3Assert(errNum == CL_SUCCESS);
- m_copyAabbsKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "copyAabbsKernel", &errNum, sapProg);
- m_sap2Kernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelTwoArrays", &errNum, sapProg);
- b3Assert(errNum == CL_SUCCESS);
- }
-
- {
- cl_program gridProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, gridBroadphaseCL, &errNum, "", B3_GRID_BROADPHASE_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- kCalcHashAABB = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, gridBroadphaseCL, "kCalcHashAABB", &errNum, gridProg);
- b3Assert(errNum == CL_SUCCESS);
-
- kClearCellStart = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, gridBroadphaseCL, "kClearCellStart", &errNum, gridProg);
- b3Assert(errNum == CL_SUCCESS);
-
- kFindCellStart = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, gridBroadphaseCL, "kFindCellStart", &errNum, gridProg);
- b3Assert(errNum == CL_SUCCESS);
-
- kFindOverlappingPairs = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, gridBroadphaseCL, "kFindOverlappingPairs", &errNum, gridProg);
- b3Assert(errNum == CL_SUCCESS);
- }
-
- m_sorter = new b3RadixSort32CL(m_context, m_device, m_queue);
-}
-b3GpuGridBroadphase::~b3GpuGridBroadphase()
-{
- clReleaseKernel(kCalcHashAABB);
- clReleaseKernel(kClearCellStart);
- clReleaseKernel(kFindCellStart);
- clReleaseKernel(kFindOverlappingPairs);
- clReleaseKernel(m_sap2Kernel);
- clReleaseKernel(m_copyAabbsKernel);
-
- delete m_sorter;
-}
-
-void b3GpuGridBroadphase::createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask)
-{
- b3SapAabb aabb;
- aabb.m_minVec = aabbMin;
- aabb.m_maxVec = aabbMax;
- aabb.m_minIndices[3] = userPtr;
- aabb.m_signedMaxIndices[3] = m_allAabbsCPU1.size(); //NOT userPtr;
- m_smallAabbsMappingCPU.push_back(m_allAabbsCPU1.size());
-
- m_allAabbsCPU1.push_back(aabb);
-}
-void b3GpuGridBroadphase::createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask)
-{
- b3SapAabb aabb;
- aabb.m_minVec = aabbMin;
- aabb.m_maxVec = aabbMax;
- aabb.m_minIndices[3] = userPtr;
- aabb.m_signedMaxIndices[3] = m_allAabbsCPU1.size(); //NOT userPtr;
- m_largeAabbsMappingCPU.push_back(m_allAabbsCPU1.size());
-
- m_allAabbsCPU1.push_back(aabb);
-}
-
-void b3GpuGridBroadphase::calculateOverlappingPairs(int maxPairs)
-{
- B3_PROFILE("b3GpuGridBroadphase::calculateOverlappingPairs");
-
- if (0)
- {
- calculateOverlappingPairsHost(maxPairs);
- /*
- b3AlignedObjectArray<b3Int4> cpuPairs;
- m_gpuPairs.copyToHost(cpuPairs);
- printf("host m_gpuPairs.size()=%d\n",m_gpuPairs.size());
- for (int i=0;i<m_gpuPairs.size();i++)
- {
- printf("host pair %d = %d,%d\n",i,cpuPairs[i].x,cpuPairs[i].y);
- }
- */
- return;
- }
-
- int numSmallAabbs = m_smallAabbsMappingGPU.size();
-
- b3OpenCLArray<int> pairCount(m_context, m_queue);
- pairCount.push_back(0);
- m_gpuPairs.resize(maxPairs); //numSmallAabbs*maxPairsPerBody);
-
- {
- int numLargeAabbs = m_largeAabbsMappingGPU.size();
- if (numLargeAabbs && numSmallAabbs)
- {
- B3_PROFILE("sap2Kernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_allAabbsGPU1.getBufferCL()),
- b3BufferInfoCL(m_largeAabbsMappingGPU.getBufferCL()),
- b3BufferInfoCL(m_smallAabbsMappingGPU.getBufferCL()),
- b3BufferInfoCL(m_gpuPairs.getBufferCL()),
- b3BufferInfoCL(pairCount.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_sap2Kernel, "m_sap2Kernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numLargeAabbs);
- launcher.setConst(numSmallAabbs);
- launcher.setConst(0); //axis is not used
- launcher.setConst(maxPairs);
- //@todo: use actual maximum work item sizes of the device instead of hardcoded values
- launcher.launch2D(numLargeAabbs, numSmallAabbs, 4, 64);
-
- int numPairs = pairCount.at(0);
-
- if (numPairs > maxPairs)
- {
- b3Error("Error running out of pairs: numPairs = %d, maxPairs = %d.\n", numPairs, maxPairs);
- numPairs = maxPairs;
- }
- }
- }
-
- if (numSmallAabbs)
- {
- B3_PROFILE("gridKernel");
- m_hashGpu.resize(numSmallAabbs);
- {
- B3_PROFILE("kCalcHashAABB");
- b3LauncherCL launch(m_queue, kCalcHashAABB, "kCalcHashAABB");
- launch.setConst(numSmallAabbs);
- launch.setBuffer(m_allAabbsGPU1.getBufferCL());
- launch.setBuffer(m_smallAabbsMappingGPU.getBufferCL());
- launch.setBuffer(m_hashGpu.getBufferCL());
- launch.setBuffer(this->m_paramsGPU.getBufferCL());
- launch.launch1D(numSmallAabbs);
- }
-
- m_sorter->execute(m_hashGpu);
-
- int numCells = this->m_paramsCPU.m_gridSize[0] * this->m_paramsCPU.m_gridSize[1] * this->m_paramsCPU.m_gridSize[2];
- m_cellStartGpu.resize(numCells);
- //b3AlignedObjectArray<int > cellStartCpu;
-
- {
- B3_PROFILE("kClearCellStart");
- b3LauncherCL launch(m_queue, kClearCellStart, "kClearCellStart");
- launch.setConst(numCells);
- launch.setBuffer(m_cellStartGpu.getBufferCL());
- launch.launch1D(numCells);
- //m_cellStartGpu.copyToHost(cellStartCpu);
- //printf("??\n");
- }
-
- {
- B3_PROFILE("kFindCellStart");
- b3LauncherCL launch(m_queue, kFindCellStart, "kFindCellStart");
- launch.setConst(numSmallAabbs);
- launch.setBuffer(m_hashGpu.getBufferCL());
- launch.setBuffer(m_cellStartGpu.getBufferCL());
- launch.launch1D(numSmallAabbs);
- //m_cellStartGpu.copyToHost(cellStartCpu);
- //printf("??\n");
- }
-
- {
- B3_PROFILE("kFindOverlappingPairs");
-
- b3LauncherCL launch(m_queue, kFindOverlappingPairs, "kFindOverlappingPairs");
- launch.setConst(numSmallAabbs);
- launch.setBuffer(m_allAabbsGPU1.getBufferCL());
- launch.setBuffer(m_smallAabbsMappingGPU.getBufferCL());
- launch.setBuffer(m_hashGpu.getBufferCL());
- launch.setBuffer(m_cellStartGpu.getBufferCL());
-
- launch.setBuffer(m_paramsGPU.getBufferCL());
- //launch.setBuffer(0);
- launch.setBuffer(pairCount.getBufferCL());
- launch.setBuffer(m_gpuPairs.getBufferCL());
-
- launch.setConst(maxPairs);
- launch.launch1D(numSmallAabbs);
-
- int numPairs = pairCount.at(0);
- if (numPairs > maxPairs)
- {
- b3Error("Error running out of pairs: numPairs = %d, maxPairs = %d.\n", numPairs, maxPairs);
- numPairs = maxPairs;
- }
-
- m_gpuPairs.resize(numPairs);
-
- if (0)
- {
- b3AlignedObjectArray<b3Int4> pairsCpu;
- m_gpuPairs.copyToHost(pairsCpu);
-
- int sz = m_gpuPairs.size();
- printf("m_gpuPairs.size()=%d\n", sz);
- for (int i = 0; i < m_gpuPairs.size(); i++)
- {
- printf("pair %d = %d,%d\n", i, pairsCpu[i].x, pairsCpu[i].y);
- }
-
- printf("?!?\n");
- }
- }
- }
-
- //calculateOverlappingPairsHost(maxPairs);
-}
-void b3GpuGridBroadphase::calculateOverlappingPairsHost(int maxPairs)
-{
- m_hostPairs.resize(0);
- m_allAabbsGPU1.copyToHost(m_allAabbsCPU1);
- for (int i = 0; i < m_allAabbsCPU1.size(); i++)
- {
- for (int j = i + 1; j < m_allAabbsCPU1.size(); j++)
- {
- if (b3TestAabbAgainstAabb2(m_allAabbsCPU1[i].m_minVec, m_allAabbsCPU1[i].m_maxVec,
- m_allAabbsCPU1[j].m_minVec, m_allAabbsCPU1[j].m_maxVec))
- {
- b3Int4 pair;
- int a = m_allAabbsCPU1[j].m_minIndices[3];
- int b = m_allAabbsCPU1[i].m_minIndices[3];
- if (a <= b)
- {
- pair.x = a;
- pair.y = b; //store the original index in the unsorted aabb array
- }
- else
- {
- pair.x = b;
- pair.y = a; //store the original index in the unsorted aabb array
- }
-
- if (m_hostPairs.size() < maxPairs)
- {
- m_hostPairs.push_back(pair);
- }
- }
- }
- }
-
- m_gpuPairs.copyFromHost(m_hostPairs);
-}
-
-//call writeAabbsToGpu after done making all changes (createProxy etc)
-void b3GpuGridBroadphase::writeAabbsToGpu()
-{
- m_allAabbsGPU1.copyFromHost(m_allAabbsCPU1);
- m_smallAabbsMappingGPU.copyFromHost(m_smallAabbsMappingCPU);
- m_largeAabbsMappingGPU.copyFromHost(m_largeAabbsMappingCPU);
-}
-
-cl_mem b3GpuGridBroadphase::getAabbBufferWS()
-{
- return this->m_allAabbsGPU1.getBufferCL();
-}
-int b3GpuGridBroadphase::getNumOverlap()
-{
- return m_gpuPairs.size();
-}
-cl_mem b3GpuGridBroadphase::getOverlappingPairBuffer()
-{
- return m_gpuPairs.getBufferCL();
-}
-
-b3OpenCLArray<b3SapAabb>& b3GpuGridBroadphase::getAllAabbsGPU()
-{
- return m_allAabbsGPU1;
-}
-
-b3AlignedObjectArray<b3SapAabb>& b3GpuGridBroadphase::getAllAabbsCPU()
-{
- return m_allAabbsCPU1;
-}
-
-b3OpenCLArray<b3Int4>& b3GpuGridBroadphase::getOverlappingPairsGPU()
-{
- return m_gpuPairs;
-}
-b3OpenCLArray<int>& b3GpuGridBroadphase::getSmallAabbIndicesGPU()
-{
- return m_smallAabbsMappingGPU;
-}
-b3OpenCLArray<int>& b3GpuGridBroadphase::getLargeAabbIndicesGPU()
-{
- return m_largeAabbsMappingGPU;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.h
deleted file mode 100644
index b76cb43b68..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuGridBroadphase.h
+++ /dev/null
@@ -1,80 +0,0 @@
-#ifndef B3_GPU_GRID_BROADPHASE_H
-#define B3_GPU_GRID_BROADPHASE_H
-
-#include "b3GpuBroadphaseInterface.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-
-struct b3ParamsGridBroadphaseCL
-{
- float m_invCellSize[4];
- int m_gridSize[4];
-
- int getMaxBodiesPerCell() const
- {
- return m_gridSize[3];
- }
-
- void setMaxBodiesPerCell(int maxOverlap)
- {
- m_gridSize[3] = maxOverlap;
- }
-};
-
-class b3GpuGridBroadphase : public b3GpuBroadphaseInterface
-{
-protected:
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
- b3OpenCLArray<b3SapAabb> m_allAabbsGPU1;
- b3AlignedObjectArray<b3SapAabb> m_allAabbsCPU1;
-
- b3OpenCLArray<int> m_smallAabbsMappingGPU;
- b3AlignedObjectArray<int> m_smallAabbsMappingCPU;
-
- b3OpenCLArray<int> m_largeAabbsMappingGPU;
- b3AlignedObjectArray<int> m_largeAabbsMappingCPU;
-
- b3AlignedObjectArray<b3Int4> m_hostPairs;
- b3OpenCLArray<b3Int4> m_gpuPairs;
-
- b3OpenCLArray<b3SortData> m_hashGpu;
- b3OpenCLArray<int> m_cellStartGpu;
-
- b3ParamsGridBroadphaseCL m_paramsCPU;
- b3OpenCLArray<b3ParamsGridBroadphaseCL> m_paramsGPU;
-
- class b3RadixSort32CL* m_sorter;
-
-public:
- b3GpuGridBroadphase(cl_context ctx, cl_device_id device, cl_command_queue q);
- virtual ~b3GpuGridBroadphase();
-
- static b3GpuBroadphaseInterface* CreateFunc(cl_context ctx, cl_device_id device, cl_command_queue q)
- {
- return new b3GpuGridBroadphase(ctx, device, q);
- }
-
- virtual void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
- virtual void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
-
- virtual void calculateOverlappingPairs(int maxPairs);
- virtual void calculateOverlappingPairsHost(int maxPairs);
-
- //call writeAabbsToGpu after done making all changes (createProxy etc)
- virtual void writeAabbsToGpu();
-
- virtual cl_mem getAabbBufferWS();
- virtual int getNumOverlap();
- virtual cl_mem getOverlappingPairBuffer();
-
- virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU();
- virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU();
-
- virtual b3OpenCLArray<b3Int4>& getOverlappingPairsGPU();
- virtual b3OpenCLArray<int>& getSmallAabbIndicesGPU();
- virtual b3OpenCLArray<int>& getLargeAabbIndicesGPU();
-};
-
-#endif //B3_GPU_GRID_BROADPHASE_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.cpp b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.cpp
deleted file mode 100644
index 616fc34f3a..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.cpp
+++ /dev/null
@@ -1,557 +0,0 @@
-/*
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Initial Author Jackson Lee, 2014
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-
-#include "b3GpuParallelLinearBvh.h"
-
-b3GpuParallelLinearBvh::b3GpuParallelLinearBvh(cl_context context, cl_device_id device, cl_command_queue queue) : m_queue(queue),
- m_radixSorter(context, device, queue),
-
- m_rootNodeIndex(context, queue),
- m_maxDistanceFromRoot(context, queue),
- m_temp(context, queue),
-
- m_internalNodeAabbs(context, queue),
- m_internalNodeLeafIndexRanges(context, queue),
- m_internalNodeChildNodes(context, queue),
- m_internalNodeParentNodes(context, queue),
-
- m_commonPrefixes(context, queue),
- m_commonPrefixLengths(context, queue),
- m_distanceFromRoot(context, queue),
-
- m_leafNodeParentNodes(context, queue),
- m_mortonCodesAndAabbIndicies(context, queue),
- m_mergedAabb(context, queue),
- m_leafNodeAabbs(context, queue),
-
- m_largeAabbs(context, queue)
-{
- m_rootNodeIndex.resize(1);
- m_maxDistanceFromRoot.resize(1);
- m_temp.resize(1);
-
- //
- const char CL_PROGRAM_PATH[] = "src/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvh.cl";
-
- const char* kernelSource = parallelLinearBvhCL; //parallelLinearBvhCL.h
- cl_int error;
- char* additionalMacros = 0;
- m_parallelLinearBvhProgram = b3OpenCLUtils::compileCLProgramFromString(context, device, kernelSource, &error, additionalMacros, CL_PROGRAM_PATH);
- b3Assert(m_parallelLinearBvhProgram);
-
- m_separateAabbsKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "separateAabbs", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_separateAabbsKernel);
- m_findAllNodesMergedAabbKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "findAllNodesMergedAabb", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_findAllNodesMergedAabbKernel);
- m_assignMortonCodesAndAabbIndiciesKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "assignMortonCodesAndAabbIndicies", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_assignMortonCodesAndAabbIndiciesKernel);
-
- m_computeAdjacentPairCommonPrefixKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "computeAdjacentPairCommonPrefix", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_computeAdjacentPairCommonPrefixKernel);
- m_buildBinaryRadixTreeLeafNodesKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "buildBinaryRadixTreeLeafNodes", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_buildBinaryRadixTreeLeafNodesKernel);
- m_buildBinaryRadixTreeInternalNodesKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "buildBinaryRadixTreeInternalNodes", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_buildBinaryRadixTreeInternalNodesKernel);
- m_findDistanceFromRootKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "findDistanceFromRoot", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_findDistanceFromRootKernel);
- m_buildBinaryRadixTreeAabbsRecursiveKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "buildBinaryRadixTreeAabbsRecursive", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_buildBinaryRadixTreeAabbsRecursiveKernel);
-
- m_findLeafIndexRangesKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "findLeafIndexRanges", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_findLeafIndexRangesKernel);
-
- m_plbvhCalculateOverlappingPairsKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "plbvhCalculateOverlappingPairs", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_plbvhCalculateOverlappingPairsKernel);
- m_plbvhRayTraverseKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "plbvhRayTraverse", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_plbvhRayTraverseKernel);
- m_plbvhLargeAabbAabbTestKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "plbvhLargeAabbAabbTest", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_plbvhLargeAabbAabbTestKernel);
- m_plbvhLargeAabbRayTestKernel = b3OpenCLUtils::compileCLKernelFromString(context, device, kernelSource, "plbvhLargeAabbRayTest", &error, m_parallelLinearBvhProgram, additionalMacros);
- b3Assert(m_plbvhLargeAabbRayTestKernel);
-}
-
-b3GpuParallelLinearBvh::~b3GpuParallelLinearBvh()
-{
- clReleaseKernel(m_separateAabbsKernel);
- clReleaseKernel(m_findAllNodesMergedAabbKernel);
- clReleaseKernel(m_assignMortonCodesAndAabbIndiciesKernel);
-
- clReleaseKernel(m_computeAdjacentPairCommonPrefixKernel);
- clReleaseKernel(m_buildBinaryRadixTreeLeafNodesKernel);
- clReleaseKernel(m_buildBinaryRadixTreeInternalNodesKernel);
- clReleaseKernel(m_findDistanceFromRootKernel);
- clReleaseKernel(m_buildBinaryRadixTreeAabbsRecursiveKernel);
-
- clReleaseKernel(m_findLeafIndexRangesKernel);
-
- clReleaseKernel(m_plbvhCalculateOverlappingPairsKernel);
- clReleaseKernel(m_plbvhRayTraverseKernel);
- clReleaseKernel(m_plbvhLargeAabbAabbTestKernel);
- clReleaseKernel(m_plbvhLargeAabbRayTestKernel);
-
- clReleaseProgram(m_parallelLinearBvhProgram);
-}
-
-void b3GpuParallelLinearBvh::build(const b3OpenCLArray<b3SapAabb>& worldSpaceAabbs, const b3OpenCLArray<int>& smallAabbIndices,
- const b3OpenCLArray<int>& largeAabbIndices)
-{
- B3_PROFILE("b3ParallelLinearBvh::build()");
-
- int numLargeAabbs = largeAabbIndices.size();
- int numSmallAabbs = smallAabbIndices.size();
-
- //Since all AABBs(both large and small) are input as a contiguous array,
- //with 2 additional arrays used to indicate the indices of large and small AABBs,
- //it is necessary to separate the AABBs so that the large AABBs will not degrade the quality of the BVH.
- {
- B3_PROFILE("Separate large and small AABBs");
-
- m_largeAabbs.resize(numLargeAabbs);
- m_leafNodeAabbs.resize(numSmallAabbs);
-
- //Write large AABBs into m_largeAabbs
- {
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(worldSpaceAabbs.getBufferCL()),
- b3BufferInfoCL(largeAabbIndices.getBufferCL()),
-
- b3BufferInfoCL(m_largeAabbs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_separateAabbsKernel, "m_separateAabbsKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numLargeAabbs);
-
- launcher.launch1D(numLargeAabbs);
- }
-
- //Write small AABBs into m_leafNodeAabbs
- {
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(worldSpaceAabbs.getBufferCL()),
- b3BufferInfoCL(smallAabbIndices.getBufferCL()),
-
- b3BufferInfoCL(m_leafNodeAabbs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_separateAabbsKernel, "m_separateAabbsKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numSmallAabbs);
-
- launcher.launch1D(numSmallAabbs);
- }
-
- clFinish(m_queue);
- }
-
- //
- int numLeaves = numSmallAabbs; //Number of leaves in the BVH == Number of rigid bodies with small AABBs
- int numInternalNodes = numLeaves - 1;
-
- if (numLeaves < 2)
- {
- //Number of leaf nodes is checked in calculateOverlappingPairs() and testRaysAgainstBvhAabbs(),
- //so it does not matter if numLeaves == 0 and rootNodeIndex == -1
- int rootNodeIndex = numLeaves - 1;
- m_rootNodeIndex.copyFromHostPointer(&rootNodeIndex, 1);
-
- //Since the AABBs need to be rearranged(sorted) for the BVH construction algorithm,
- //m_mortonCodesAndAabbIndicies.m_value is used to map a sorted AABB index to the unsorted AABB index
- //instead of directly moving the AABBs. It needs to be set for the ray cast traversal kernel to work.
- //( m_mortonCodesAndAabbIndicies[].m_value == unsorted index == index of m_leafNodeAabbs )
- if (numLeaves == 1)
- {
- b3SortData leaf;
- leaf.m_value = 0; //1 leaf so index is always 0; leaf.m_key does not need to be set
-
- m_mortonCodesAndAabbIndicies.resize(1);
- m_mortonCodesAndAabbIndicies.copyFromHostPointer(&leaf, 1);
- }
-
- return;
- }
-
- //
- {
- m_internalNodeAabbs.resize(numInternalNodes);
- m_internalNodeLeafIndexRanges.resize(numInternalNodes);
- m_internalNodeChildNodes.resize(numInternalNodes);
- m_internalNodeParentNodes.resize(numInternalNodes);
-
- m_commonPrefixes.resize(numInternalNodes);
- m_commonPrefixLengths.resize(numInternalNodes);
- m_distanceFromRoot.resize(numInternalNodes);
-
- m_leafNodeParentNodes.resize(numLeaves);
- m_mortonCodesAndAabbIndicies.resize(numLeaves);
- m_mergedAabb.resize(numLeaves);
- }
-
- //Find the merged AABB of all small AABBs; this is used to define the size of
- //each cell in the virtual grid for the next kernel(2^10 cells in each dimension).
- {
- B3_PROFILE("Find AABB of merged nodes");
-
- m_mergedAabb.copyFromOpenCLArray(m_leafNodeAabbs); //Need to make a copy since the kernel modifies the array
-
- for (int numAabbsNeedingMerge = numLeaves; numAabbsNeedingMerge >= 2;
- numAabbsNeedingMerge = numAabbsNeedingMerge / 2 + numAabbsNeedingMerge % 2)
- {
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_mergedAabb.getBufferCL()) //Resulting AABB is stored in m_mergedAabb[0]
- };
-
- b3LauncherCL launcher(m_queue, m_findAllNodesMergedAabbKernel, "m_findAllNodesMergedAabbKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numAabbsNeedingMerge);
-
- launcher.launch1D(numAabbsNeedingMerge);
- }
-
- clFinish(m_queue);
- }
-
- //Insert the center of the AABBs into a virtual grid,
- //then convert the discrete grid coordinates into a morton code
- //For each element in m_mortonCodesAndAabbIndicies, set
- // m_key == morton code (value to sort by)
- // m_value == small AABB index
- {
- B3_PROFILE("Assign morton codes");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_leafNodeAabbs.getBufferCL()),
- b3BufferInfoCL(m_mergedAabb.getBufferCL()),
- b3BufferInfoCL(m_mortonCodesAndAabbIndicies.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_assignMortonCodesAndAabbIndiciesKernel, "m_assignMortonCodesAndAabbIndiciesKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numLeaves);
-
- launcher.launch1D(numLeaves);
- clFinish(m_queue);
- }
-
- //
- {
- B3_PROFILE("Sort leaves by morton codes");
-
- m_radixSorter.execute(m_mortonCodesAndAabbIndicies);
- clFinish(m_queue);
- }
-
- //
- constructBinaryRadixTree();
-
- //Since it is a sorted binary radix tree, each internal node contains a contiguous subset of leaf node indices.
- //The root node contains leaf node indices in the range [0, numLeafNodes - 1].
- //The child nodes of each node split their parent's index range into 2 contiguous halves.
- //
- //For example, if the root has indices [0, 31], its children might partition that range into [0, 11] and [12, 31].
- //The next level in the tree could then split those ranges into [0, 2], [3, 11], [12, 22], and [23, 31].
- //
- //This property can be used for optimizing calculateOverlappingPairs(), to avoid testing each AABB pair twice
- {
- B3_PROFILE("m_findLeafIndexRangesKernel");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_internalNodeChildNodes.getBufferCL()),
- b3BufferInfoCL(m_internalNodeLeafIndexRanges.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findLeafIndexRangesKernel, "m_findLeafIndexRangesKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numInternalNodes);
-
- launcher.launch1D(numInternalNodes);
- clFinish(m_queue);
- }
-}
-
-void b3GpuParallelLinearBvh::calculateOverlappingPairs(b3OpenCLArray<b3Int4>& out_overlappingPairs)
-{
- int maxPairs = out_overlappingPairs.size();
- b3OpenCLArray<int>& numPairsGpu = m_temp;
-
- int reset = 0;
- numPairsGpu.copyFromHostPointer(&reset, 1);
-
- //
- if (m_leafNodeAabbs.size() > 1)
- {
- B3_PROFILE("PLBVH small-small AABB test");
-
- int numQueryAabbs = m_leafNodeAabbs.size();
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_leafNodeAabbs.getBufferCL()),
-
- b3BufferInfoCL(m_rootNodeIndex.getBufferCL()),
- b3BufferInfoCL(m_internalNodeChildNodes.getBufferCL()),
- b3BufferInfoCL(m_internalNodeAabbs.getBufferCL()),
- b3BufferInfoCL(m_internalNodeLeafIndexRanges.getBufferCL()),
- b3BufferInfoCL(m_mortonCodesAndAabbIndicies.getBufferCL()),
-
- b3BufferInfoCL(numPairsGpu.getBufferCL()),
- b3BufferInfoCL(out_overlappingPairs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_plbvhCalculateOverlappingPairsKernel, "m_plbvhCalculateOverlappingPairsKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(maxPairs);
- launcher.setConst(numQueryAabbs);
-
- launcher.launch1D(numQueryAabbs);
- clFinish(m_queue);
- }
-
- int numLargeAabbRigids = m_largeAabbs.size();
- if (numLargeAabbRigids > 0 && m_leafNodeAabbs.size() > 0)
- {
- B3_PROFILE("PLBVH large-small AABB test");
-
- int numQueryAabbs = m_leafNodeAabbs.size();
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_leafNodeAabbs.getBufferCL()),
- b3BufferInfoCL(m_largeAabbs.getBufferCL()),
-
- b3BufferInfoCL(numPairsGpu.getBufferCL()),
- b3BufferInfoCL(out_overlappingPairs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_plbvhLargeAabbAabbTestKernel, "m_plbvhLargeAabbAabbTestKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(maxPairs);
- launcher.setConst(numLargeAabbRigids);
- launcher.setConst(numQueryAabbs);
-
- launcher.launch1D(numQueryAabbs);
- clFinish(m_queue);
- }
-
- //
- int numPairs = -1;
- numPairsGpu.copyToHostPointer(&numPairs, 1);
- if (numPairs > maxPairs)
- {
- b3Error("Error running out of pairs: numPairs = %d, maxPairs = %d.\n", numPairs, maxPairs);
- numPairs = maxPairs;
- numPairsGpu.copyFromHostPointer(&maxPairs, 1);
- }
-
- out_overlappingPairs.resize(numPairs);
-}
-
-void b3GpuParallelLinearBvh::testRaysAgainstBvhAabbs(const b3OpenCLArray<b3RayInfo>& rays,
- b3OpenCLArray<int>& out_numRayRigidPairs, b3OpenCLArray<b3Int2>& out_rayRigidPairs)
-{
- B3_PROFILE("PLBVH testRaysAgainstBvhAabbs()");
-
- int numRays = rays.size();
- int maxRayRigidPairs = out_rayRigidPairs.size();
-
- int reset = 0;
- out_numRayRigidPairs.copyFromHostPointer(&reset, 1);
-
- //
- if (m_leafNodeAabbs.size() > 0)
- {
- B3_PROFILE("PLBVH ray test small AABB");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_leafNodeAabbs.getBufferCL()),
-
- b3BufferInfoCL(m_rootNodeIndex.getBufferCL()),
- b3BufferInfoCL(m_internalNodeChildNodes.getBufferCL()),
- b3BufferInfoCL(m_internalNodeAabbs.getBufferCL()),
- b3BufferInfoCL(m_internalNodeLeafIndexRanges.getBufferCL()),
- b3BufferInfoCL(m_mortonCodesAndAabbIndicies.getBufferCL()),
-
- b3BufferInfoCL(rays.getBufferCL()),
-
- b3BufferInfoCL(out_numRayRigidPairs.getBufferCL()),
- b3BufferInfoCL(out_rayRigidPairs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_plbvhRayTraverseKernel, "m_plbvhRayTraverseKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(maxRayRigidPairs);
- launcher.setConst(numRays);
-
- launcher.launch1D(numRays);
- clFinish(m_queue);
- }
-
- int numLargeAabbRigids = m_largeAabbs.size();
- if (numLargeAabbRigids > 0)
- {
- B3_PROFILE("PLBVH ray test large AABB");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_largeAabbs.getBufferCL()),
- b3BufferInfoCL(rays.getBufferCL()),
-
- b3BufferInfoCL(out_numRayRigidPairs.getBufferCL()),
- b3BufferInfoCL(out_rayRigidPairs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_plbvhLargeAabbRayTestKernel, "m_plbvhLargeAabbRayTestKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numLargeAabbRigids);
- launcher.setConst(maxRayRigidPairs);
- launcher.setConst(numRays);
-
- launcher.launch1D(numRays);
- clFinish(m_queue);
- }
-
- //
- int numRayRigidPairs = -1;
- out_numRayRigidPairs.copyToHostPointer(&numRayRigidPairs, 1);
-
- if (numRayRigidPairs > maxRayRigidPairs)
- b3Error("Error running out of rayRigid pairs: numRayRigidPairs = %d, maxRayRigidPairs = %d.\n", numRayRigidPairs, maxRayRigidPairs);
-}
-
-void b3GpuParallelLinearBvh::constructBinaryRadixTree()
-{
- B3_PROFILE("b3GpuParallelLinearBvh::constructBinaryRadixTree()");
-
- int numLeaves = m_leafNodeAabbs.size();
- int numInternalNodes = numLeaves - 1;
-
- //Each internal node is placed in between 2 leaf nodes.
- //By using this arrangement and computing the common prefix between
- //these 2 adjacent leaf nodes, it is possible to quickly construct a binary radix tree.
- {
- B3_PROFILE("m_computeAdjacentPairCommonPrefixKernel");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_mortonCodesAndAabbIndicies.getBufferCL()),
- b3BufferInfoCL(m_commonPrefixes.getBufferCL()),
- b3BufferInfoCL(m_commonPrefixLengths.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_computeAdjacentPairCommonPrefixKernel, "m_computeAdjacentPairCommonPrefixKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numInternalNodes);
-
- launcher.launch1D(numInternalNodes);
- clFinish(m_queue);
- }
-
- //For each leaf node, select its parent node by
- //comparing the 2 nearest internal nodes and assign child node indices
- {
- B3_PROFILE("m_buildBinaryRadixTreeLeafNodesKernel");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_commonPrefixLengths.getBufferCL()),
- b3BufferInfoCL(m_leafNodeParentNodes.getBufferCL()),
- b3BufferInfoCL(m_internalNodeChildNodes.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_buildBinaryRadixTreeLeafNodesKernel, "m_buildBinaryRadixTreeLeafNodesKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numLeaves);
-
- launcher.launch1D(numLeaves);
- clFinish(m_queue);
- }
-
- //For each internal node, perform 2 binary searches among the other internal nodes
- //to its left and right to find its potential parent nodes and assign child node indices
- {
- B3_PROFILE("m_buildBinaryRadixTreeInternalNodesKernel");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_commonPrefixes.getBufferCL()),
- b3BufferInfoCL(m_commonPrefixLengths.getBufferCL()),
- b3BufferInfoCL(m_internalNodeChildNodes.getBufferCL()),
- b3BufferInfoCL(m_internalNodeParentNodes.getBufferCL()),
- b3BufferInfoCL(m_rootNodeIndex.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_buildBinaryRadixTreeInternalNodesKernel, "m_buildBinaryRadixTreeInternalNodesKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numInternalNodes);
-
- launcher.launch1D(numInternalNodes);
- clFinish(m_queue);
- }
-
- //Find the number of nodes separating each internal node and the root node
- //so that the AABBs can be set using the next kernel.
- //Also determine the maximum number of nodes separating an internal node and the root node.
- {
- B3_PROFILE("m_findDistanceFromRootKernel");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_rootNodeIndex.getBufferCL()),
- b3BufferInfoCL(m_internalNodeParentNodes.getBufferCL()),
- b3BufferInfoCL(m_maxDistanceFromRoot.getBufferCL()),
- b3BufferInfoCL(m_distanceFromRoot.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findDistanceFromRootKernel, "m_findDistanceFromRootKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numInternalNodes);
-
- launcher.launch1D(numInternalNodes);
- clFinish(m_queue);
- }
-
- //Starting from the internal nodes nearest to the leaf nodes, recursively move up
- //the tree towards the root to set the AABBs of each internal node; each internal node
- //checks its children and merges their AABBs
- {
- B3_PROFILE("m_buildBinaryRadixTreeAabbsRecursiveKernel");
-
- int maxDistanceFromRoot = -1;
- {
- B3_PROFILE("copy maxDistanceFromRoot to CPU");
- m_maxDistanceFromRoot.copyToHostPointer(&maxDistanceFromRoot, 1);
- clFinish(m_queue);
- }
-
- for (int distanceFromRoot = maxDistanceFromRoot; distanceFromRoot >= 0; --distanceFromRoot)
- {
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_distanceFromRoot.getBufferCL()),
- b3BufferInfoCL(m_mortonCodesAndAabbIndicies.getBufferCL()),
- b3BufferInfoCL(m_internalNodeChildNodes.getBufferCL()),
- b3BufferInfoCL(m_leafNodeAabbs.getBufferCL()),
- b3BufferInfoCL(m_internalNodeAabbs.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_buildBinaryRadixTreeAabbsRecursiveKernel, "m_buildBinaryRadixTreeAabbsRecursiveKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(maxDistanceFromRoot);
- launcher.setConst(distanceFromRoot);
- launcher.setConst(numInternalNodes);
-
- //It may seem inefficent to launch a thread for each internal node when a
- //much smaller number of nodes is actually processed, but this is actually
- //faster than determining the exact nodes that are ready to merge their child AABBs.
- launcher.launch1D(numInternalNodes);
- }
-
- clFinish(m_queue);
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.h
deleted file mode 100644
index b390775129..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.h
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Initial Author Jackson Lee, 2014
-
-#ifndef B3_GPU_PARALLEL_LINEAR_BVH_H
-#define B3_GPU_PARALLEL_LINEAR_BVH_H
-
-//#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h"
-#include "Bullet3Common/shared/b3Int2.h"
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3FillCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
-
-#include "Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvhKernels.h"
-
-#define b3Int64 cl_long
-
-///@brief GPU Parallel Linearized Bounding Volume Heirarchy(LBVH) that is reconstructed every frame
-///@remarks
-///See presentation in docs/b3GpuParallelLinearBvh.pdf for algorithm details.
-///@par
-///Related papers: \n
-///"Fast BVH Construction on GPUs" [Lauterbach et al. 2009] \n
-///"Maximizing Parallelism in the Construction of BVHs, Octrees, and k-d trees" [Karras 2012] \n
-///@par
-///The basic algorithm for building the BVH as presented in [Lauterbach et al. 2009] consists of 4 stages:
-/// - [fully parallel] Assign morton codes for each AABB using its center (after quantizing the AABB centers into a virtual grid)
-/// - [fully parallel] Sort morton codes
-/// - [somewhat parallel] Build binary radix tree (assign parent/child pointers for internal nodes of the BVH)
-/// - [somewhat parallel] Set internal node AABBs
-///@par
-///[Karras 2012] improves on the algorithm by introducing fully parallel methods for the last 2 stages.
-///The BVH implementation here shares many concepts with [Karras 2012], but a different method is used for constructing the tree.
-///Instead of searching for the child nodes of each internal node, we search for the parent node of each node.
-///Additionally, a non-atomic traversal that starts from the leaf nodes and moves towards the root node is used to set the AABBs.
-class b3GpuParallelLinearBvh
-{
- cl_command_queue m_queue;
-
- cl_program m_parallelLinearBvhProgram;
-
- cl_kernel m_separateAabbsKernel;
- cl_kernel m_findAllNodesMergedAabbKernel;
- cl_kernel m_assignMortonCodesAndAabbIndiciesKernel;
-
- //Binary radix tree construction kernels
- cl_kernel m_computeAdjacentPairCommonPrefixKernel;
- cl_kernel m_buildBinaryRadixTreeLeafNodesKernel;
- cl_kernel m_buildBinaryRadixTreeInternalNodesKernel;
- cl_kernel m_findDistanceFromRootKernel;
- cl_kernel m_buildBinaryRadixTreeAabbsRecursiveKernel;
-
- cl_kernel m_findLeafIndexRangesKernel;
-
- //Traversal kernels
- cl_kernel m_plbvhCalculateOverlappingPairsKernel;
- cl_kernel m_plbvhRayTraverseKernel;
- cl_kernel m_plbvhLargeAabbAabbTestKernel;
- cl_kernel m_plbvhLargeAabbRayTestKernel;
-
- b3RadixSort32CL m_radixSorter;
-
- //1 element
- b3OpenCLArray<int> m_rootNodeIndex; //Most significant bit(0x80000000) is set to indicate internal node
- b3OpenCLArray<int> m_maxDistanceFromRoot; //Max number of internal nodes between an internal node and the root node
- b3OpenCLArray<int> m_temp; //Used to hold the number of pairs in calculateOverlappingPairs()
-
- //1 element per internal node (number_of_internal_nodes == number_of_leaves - 1)
- b3OpenCLArray<b3SapAabb> m_internalNodeAabbs;
- b3OpenCLArray<b3Int2> m_internalNodeLeafIndexRanges; //x == min leaf index, y == max leaf index
- b3OpenCLArray<b3Int2> m_internalNodeChildNodes; //x == left child, y == right child; msb(0x80000000) is set to indicate internal node
- b3OpenCLArray<int> m_internalNodeParentNodes; //For parent node index, msb(0x80000000) is not set since it is always internal
-
- //1 element per internal node; for binary radix tree construction
- b3OpenCLArray<b3Int64> m_commonPrefixes;
- b3OpenCLArray<int> m_commonPrefixLengths;
- b3OpenCLArray<int> m_distanceFromRoot; //Number of internal nodes between this node and the root
-
- //1 element per leaf node (leaf nodes only include small AABBs)
- b3OpenCLArray<int> m_leafNodeParentNodes; //For parent node index, msb(0x80000000) is not set since it is always internal
- b3OpenCLArray<b3SortData> m_mortonCodesAndAabbIndicies; //m_key == morton code, m_value == aabb index in m_leafNodeAabbs
- b3OpenCLArray<b3SapAabb> m_mergedAabb; //m_mergedAabb[0] contains the merged AABB of all leaf nodes
- b3OpenCLArray<b3SapAabb> m_leafNodeAabbs; //Contains only small AABBs
-
- //1 element per large AABB, which is not stored in the BVH
- b3OpenCLArray<b3SapAabb> m_largeAabbs;
-
-public:
- b3GpuParallelLinearBvh(cl_context context, cl_device_id device, cl_command_queue queue);
- virtual ~b3GpuParallelLinearBvh();
-
- ///Must be called before any other function
- void build(const b3OpenCLArray<b3SapAabb>& worldSpaceAabbs, const b3OpenCLArray<int>& smallAabbIndices,
- const b3OpenCLArray<int>& largeAabbIndices);
-
- ///calculateOverlappingPairs() uses the worldSpaceAabbs parameter of b3GpuParallelLinearBvh::build() as the query AABBs.
- ///@param out_overlappingPairs The size() of this array is used to determine the max number of pairs.
- ///If the number of overlapping pairs is < out_overlappingPairs.size(), out_overlappingPairs is resized.
- void calculateOverlappingPairs(b3OpenCLArray<b3Int4>& out_overlappingPairs);
-
- ///@param out_numRigidRayPairs Array of length 1; contains the number of detected ray-rigid AABB intersections;
- ///this value may be greater than out_rayRigidPairs.size() if out_rayRigidPairs is not large enough.
- ///@param out_rayRigidPairs Contains an array of rays intersecting rigid AABBs; x == ray index, y == rigid body index.
- ///If the size of this array is insufficient to hold all ray-rigid AABB intersections, additional intersections are discarded.
- void testRaysAgainstBvhAabbs(const b3OpenCLArray<b3RayInfo>& rays,
- b3OpenCLArray<int>& out_numRayRigidPairs, b3OpenCLArray<b3Int2>& out_rayRigidPairs);
-
-private:
- void constructBinaryRadixTree();
-};
-
-#endif
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.cpp b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.cpp
deleted file mode 100644
index 62ea7a32df..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.cpp
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Initial Author Jackson Lee, 2014
-
-#include "b3GpuParallelLinearBvhBroadphase.h"
-
-b3GpuParallelLinearBvhBroadphase::b3GpuParallelLinearBvhBroadphase(cl_context context, cl_device_id device, cl_command_queue queue) : m_plbvh(context, device, queue),
-
- m_overlappingPairsGpu(context, queue),
-
- m_aabbsGpu(context, queue),
- m_smallAabbsMappingGpu(context, queue),
- m_largeAabbsMappingGpu(context, queue)
-{
-}
-
-void b3GpuParallelLinearBvhBroadphase::createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask)
-{
- int newAabbIndex = m_aabbsCpu.size();
-
- b3SapAabb aabb;
- aabb.m_minVec = aabbMin;
- aabb.m_maxVec = aabbMax;
-
- aabb.m_minIndices[3] = userPtr;
- aabb.m_signedMaxIndices[3] = newAabbIndex;
-
- m_smallAabbsMappingCpu.push_back(newAabbIndex);
-
- m_aabbsCpu.push_back(aabb);
-}
-void b3GpuParallelLinearBvhBroadphase::createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask)
-{
- int newAabbIndex = m_aabbsCpu.size();
-
- b3SapAabb aabb;
- aabb.m_minVec = aabbMin;
- aabb.m_maxVec = aabbMax;
-
- aabb.m_minIndices[3] = userPtr;
- aabb.m_signedMaxIndices[3] = newAabbIndex;
-
- m_largeAabbsMappingCpu.push_back(newAabbIndex);
-
- m_aabbsCpu.push_back(aabb);
-}
-
-void b3GpuParallelLinearBvhBroadphase::calculateOverlappingPairs(int maxPairs)
-{
- //Reconstruct BVH
- m_plbvh.build(m_aabbsGpu, m_smallAabbsMappingGpu, m_largeAabbsMappingGpu);
-
- //
- m_overlappingPairsGpu.resize(maxPairs);
- m_plbvh.calculateOverlappingPairs(m_overlappingPairsGpu);
-}
-void b3GpuParallelLinearBvhBroadphase::calculateOverlappingPairsHost(int maxPairs)
-{
- b3Assert(0); //CPU version not implemented
-}
-
-void b3GpuParallelLinearBvhBroadphase::writeAabbsToGpu()
-{
- m_aabbsGpu.copyFromHost(m_aabbsCpu);
- m_smallAabbsMappingGpu.copyFromHost(m_smallAabbsMappingCpu);
- m_largeAabbsMappingGpu.copyFromHost(m_largeAabbsMappingCpu);
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.h
deleted file mode 100644
index dda0eea7be..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvhBroadphase.h
+++ /dev/null
@@ -1,66 +0,0 @@
-/*
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Initial Author Jackson Lee, 2014
-
-#ifndef B3_GPU_PARALLEL_LINEAR_BVH_BROADPHASE_H
-#define B3_GPU_PARALLEL_LINEAR_BVH_BROADPHASE_H
-
-#include "Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h"
-
-#include "b3GpuParallelLinearBvh.h"
-
-class b3GpuParallelLinearBvhBroadphase : public b3GpuBroadphaseInterface
-{
- b3GpuParallelLinearBvh m_plbvh;
-
- b3OpenCLArray<b3Int4> m_overlappingPairsGpu;
-
- b3OpenCLArray<b3SapAabb> m_aabbsGpu;
- b3OpenCLArray<int> m_smallAabbsMappingGpu;
- b3OpenCLArray<int> m_largeAabbsMappingGpu;
-
- b3AlignedObjectArray<b3SapAabb> m_aabbsCpu;
- b3AlignedObjectArray<int> m_smallAabbsMappingCpu;
- b3AlignedObjectArray<int> m_largeAabbsMappingCpu;
-
-public:
- b3GpuParallelLinearBvhBroadphase(cl_context context, cl_device_id device, cl_command_queue queue);
- virtual ~b3GpuParallelLinearBvhBroadphase() {}
-
- virtual void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
- virtual void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
-
- virtual void calculateOverlappingPairs(int maxPairs);
- virtual void calculateOverlappingPairsHost(int maxPairs);
-
- //call writeAabbsToGpu after done making all changes (createProxy etc)
- virtual void writeAabbsToGpu();
-
- virtual int getNumOverlap() { return m_overlappingPairsGpu.size(); }
- virtual cl_mem getOverlappingPairBuffer() { return m_overlappingPairsGpu.getBufferCL(); }
-
- virtual cl_mem getAabbBufferWS() { return m_aabbsGpu.getBufferCL(); }
- virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU() { return m_aabbsGpu; }
-
- virtual b3OpenCLArray<b3Int4>& getOverlappingPairsGPU() { return m_overlappingPairsGpu; }
- virtual b3OpenCLArray<int>& getSmallAabbIndicesGPU() { return m_smallAabbsMappingGpu; }
- virtual b3OpenCLArray<int>& getLargeAabbIndicesGPU() { return m_largeAabbsMappingGpu; }
-
- virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU() { return m_aabbsCpu; }
-
- static b3GpuBroadphaseInterface* CreateFunc(cl_context context, cl_device_id device, cl_command_queue queue)
- {
- return new b3GpuParallelLinearBvhBroadphase(context, device, queue);
- }
-};
-
-#endif
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.cpp b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.cpp
deleted file mode 100644
index 4126d03ed0..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.cpp
+++ /dev/null
@@ -1,1298 +0,0 @@
-
-bool searchIncremental3dSapOnGpu = true;
-#include <limits.h>
-#include "b3GpuSapBroadphase.h"
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.h"
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "kernels/sapKernels.h"
-
-#include "Bullet3Common/b3MinMax.h"
-
-#define B3_BROADPHASE_SAP_PATH "src/Bullet3OpenCL/BroadphaseCollision/kernels/sap.cl"
-
-/*
-
-
-
-
-
-
- b3OpenCLArray<int> m_pairCount;
-
-
- b3OpenCLArray<b3SapAabb> m_allAabbsGPU;
- b3AlignedObjectArray<b3SapAabb> m_allAabbsCPU;
-
- virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU()
- {
- return m_allAabbsGPU;
- }
- virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU()
- {
- return m_allAabbsCPU;
- }
-
- b3OpenCLArray<b3Vector3> m_sum;
- b3OpenCLArray<b3Vector3> m_sum2;
- b3OpenCLArray<b3Vector3> m_dst;
-
- b3OpenCLArray<int> m_smallAabbsMappingGPU;
- b3AlignedObjectArray<int> m_smallAabbsMappingCPU;
-
- b3OpenCLArray<int> m_largeAabbsMappingGPU;
- b3AlignedObjectArray<int> m_largeAabbsMappingCPU;
-
-
- b3OpenCLArray<b3Int4> m_overlappingPairs;
-
- //temporary gpu work memory
- b3OpenCLArray<b3SortData> m_gpuSmallSortData;
- b3OpenCLArray<b3SapAabb> m_gpuSmallSortedAabbs;
-
- class b3PrefixScanFloat4CL* m_prefixScanFloat4;
- */
-
-b3GpuSapBroadphase::b3GpuSapBroadphase(cl_context ctx, cl_device_id device, cl_command_queue q, b3GpuSapKernelType kernelType)
- : m_context(ctx),
- m_device(device),
- m_queue(q),
-
- m_objectMinMaxIndexGPUaxis0(ctx, q),
- m_objectMinMaxIndexGPUaxis1(ctx, q),
- m_objectMinMaxIndexGPUaxis2(ctx, q),
- m_objectMinMaxIndexGPUaxis0prev(ctx, q),
- m_objectMinMaxIndexGPUaxis1prev(ctx, q),
- m_objectMinMaxIndexGPUaxis2prev(ctx, q),
- m_sortedAxisGPU0(ctx, q),
- m_sortedAxisGPU1(ctx, q),
- m_sortedAxisGPU2(ctx, q),
- m_sortedAxisGPU0prev(ctx, q),
- m_sortedAxisGPU1prev(ctx, q),
- m_sortedAxisGPU2prev(ctx, q),
- m_addedHostPairsGPU(ctx, q),
- m_removedHostPairsGPU(ctx, q),
- m_addedCountGPU(ctx, q),
- m_removedCountGPU(ctx, q),
- m_currentBuffer(-1),
- m_pairCount(ctx, q),
- m_allAabbsGPU(ctx, q),
- m_sum(ctx, q),
- m_sum2(ctx, q),
- m_dst(ctx, q),
- m_smallAabbsMappingGPU(ctx, q),
- m_largeAabbsMappingGPU(ctx, q),
- m_overlappingPairs(ctx, q),
- m_gpuSmallSortData(ctx, q),
- m_gpuSmallSortedAabbs(ctx, q)
-{
- const char* sapSrc = sapCL;
-
- cl_int errNum = 0;
-
- b3Assert(m_context);
- b3Assert(m_device);
- cl_program sapProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, sapSrc, &errNum, "", B3_BROADPHASE_SAP_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- b3Assert(errNum == CL_SUCCESS);
-#ifndef __APPLE__
- m_prefixScanFloat4 = new b3PrefixScanFloat4CL(m_context, m_device, m_queue);
-#else
- m_prefixScanFloat4 = 0;
-#endif
- m_sapKernel = 0;
-
- switch (kernelType)
- {
- case B3_GPU_SAP_KERNEL_BRUTE_FORCE_CPU:
- {
- m_sapKernel = 0;
- break;
- }
- case B3_GPU_SAP_KERNEL_BRUTE_FORCE_GPU:
- {
- m_sapKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelBruteForce", &errNum, sapProg);
- break;
- }
-
- case B3_GPU_SAP_KERNEL_ORIGINAL:
- {
- m_sapKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelOriginal", &errNum, sapProg);
- break;
- }
- case B3_GPU_SAP_KERNEL_BARRIER:
- {
- m_sapKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelBarrier", &errNum, sapProg);
- break;
- }
- case B3_GPU_SAP_KERNEL_LOCAL_SHARED_MEMORY:
- {
- m_sapKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelLocalSharedMemory", &errNum, sapProg);
- break;
- }
-
- default:
- {
- m_sapKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelLocalSharedMemory", &errNum, sapProg);
- b3Error("Unknown 3D GPU SAP provided, fallback to computePairsKernelLocalSharedMemory");
- }
- };
-
- m_sap2Kernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "computePairsKernelTwoArrays", &errNum, sapProg);
- b3Assert(errNum == CL_SUCCESS);
-
- m_prepareSumVarianceKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "prepareSumVarianceKernel", &errNum, sapProg);
- b3Assert(errNum == CL_SUCCESS);
-
- m_flipFloatKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "flipFloatKernel", &errNum, sapProg);
-
- m_copyAabbsKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "copyAabbsKernel", &errNum, sapProg);
-
- m_scatterKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, sapSrc, "scatterKernel", &errNum, sapProg);
-
- m_sorter = new b3RadixSort32CL(m_context, m_device, m_queue);
-}
-
-b3GpuSapBroadphase::~b3GpuSapBroadphase()
-{
- delete m_sorter;
- delete m_prefixScanFloat4;
-
- clReleaseKernel(m_scatterKernel);
- clReleaseKernel(m_flipFloatKernel);
- clReleaseKernel(m_copyAabbsKernel);
- clReleaseKernel(m_sapKernel);
- clReleaseKernel(m_sap2Kernel);
- clReleaseKernel(m_prepareSumVarianceKernel);
-}
-
-/// conservative test for overlap between two aabbs
-static bool TestAabbAgainstAabb2(const b3Vector3& aabbMin1, const b3Vector3& aabbMax1,
- const b3Vector3& aabbMin2, const b3Vector3& aabbMax2)
-{
- bool overlap = true;
- overlap = (aabbMin1.getX() > aabbMax2.getX() || aabbMax1.getX() < aabbMin2.getX()) ? false : overlap;
- overlap = (aabbMin1.getZ() > aabbMax2.getZ() || aabbMax1.getZ() < aabbMin2.getZ()) ? false : overlap;
- overlap = (aabbMin1.getY() > aabbMax2.getY() || aabbMax1.getY() < aabbMin2.getY()) ? false : overlap;
- return overlap;
-}
-
-//http://stereopsis.com/radix.html
-static unsigned int FloatFlip(float fl)
-{
- unsigned int f = *(unsigned int*)&fl;
- unsigned int mask = -(int)(f >> 31) | 0x80000000;
- return f ^ mask;
-};
-
-void b3GpuSapBroadphase::init3dSap()
-{
- if (m_currentBuffer < 0)
- {
- m_allAabbsGPU.copyToHost(m_allAabbsCPU);
-
- m_currentBuffer = 0;
- for (int axis = 0; axis < 3; axis++)
- {
- for (int buf = 0; buf < 2; buf++)
- {
- int totalNumAabbs = m_allAabbsCPU.size();
- int numEndPoints = 2 * totalNumAabbs;
- m_sortedAxisCPU[axis][buf].resize(numEndPoints);
-
- if (buf == m_currentBuffer)
- {
- for (int i = 0; i < totalNumAabbs; i++)
- {
- m_sortedAxisCPU[axis][buf][i * 2].m_key = FloatFlip(m_allAabbsCPU[i].m_min[axis]) - 1;
- m_sortedAxisCPU[axis][buf][i * 2].m_value = i * 2;
- m_sortedAxisCPU[axis][buf][i * 2 + 1].m_key = FloatFlip(m_allAabbsCPU[i].m_max[axis]) + 1;
- m_sortedAxisCPU[axis][buf][i * 2 + 1].m_value = i * 2 + 1;
- }
- }
- }
- }
-
- for (int axis = 0; axis < 3; axis++)
- {
- m_sorter->executeHost(m_sortedAxisCPU[axis][m_currentBuffer]);
- }
-
- for (int axis = 0; axis < 3; axis++)
- {
- //int totalNumAabbs = m_allAabbsCPU.size();
- int numEndPoints = m_sortedAxisCPU[axis][m_currentBuffer].size();
- m_objectMinMaxIndexCPU[axis][m_currentBuffer].resize(numEndPoints);
- for (int i = 0; i < numEndPoints; i++)
- {
- int destIndex = m_sortedAxisCPU[axis][m_currentBuffer][i].m_value;
- int newDest = destIndex / 2;
- if (destIndex & 1)
- {
- m_objectMinMaxIndexCPU[axis][m_currentBuffer][newDest].y = i;
- }
- else
- {
- m_objectMinMaxIndexCPU[axis][m_currentBuffer][newDest].x = i;
- }
- }
- }
- }
-}
-
-static bool b3PairCmp(const b3Int4& p, const b3Int4& q)
-{
- return ((p.x < q.x) || ((p.x == q.x) && (p.y < q.y)));
-}
-
-static bool operator==(const b3Int4& a, const b3Int4& b)
-{
- return a.x == b.x && a.y == b.y;
-};
-
-static bool operator<(const b3Int4& a, const b3Int4& b)
-{
- return a.x < b.x || (a.x == b.x && a.y < b.y);
-};
-
-static bool operator>(const b3Int4& a, const b3Int4& b)
-{
- return a.x > b.x || (a.x == b.x && a.y > b.y);
-};
-
-b3AlignedObjectArray<b3Int4> addedHostPairs;
-b3AlignedObjectArray<b3Int4> removedHostPairs;
-
-b3AlignedObjectArray<b3SapAabb> preAabbs;
-
-void b3GpuSapBroadphase::calculateOverlappingPairsHostIncremental3Sap()
-{
- //static int framepje = 0;
- //printf("framepje=%d\n",framepje++);
-
- B3_PROFILE("calculateOverlappingPairsHostIncremental3Sap");
-
- addedHostPairs.resize(0);
- removedHostPairs.resize(0);
-
- b3Assert(m_currentBuffer >= 0);
-
- {
- preAabbs.resize(m_allAabbsCPU.size());
- for (int i = 0; i < preAabbs.size(); i++)
- {
- preAabbs[i] = m_allAabbsCPU[i];
- }
- }
-
- if (m_currentBuffer < 0)
- return;
- {
- B3_PROFILE("m_allAabbsGPU.copyToHost");
- m_allAabbsGPU.copyToHost(m_allAabbsCPU);
- }
-
- b3AlignedObjectArray<b3Int4> allPairs;
- {
- B3_PROFILE("m_overlappingPairs.copyToHost");
- m_overlappingPairs.copyToHost(allPairs);
- }
- if (0)
- {
- {
- printf("ab[40].min=%f,%f,%f,ab[40].max=%f,%f,%f\n",
- m_allAabbsCPU[40].m_min[0], m_allAabbsCPU[40].m_min[1], m_allAabbsCPU[40].m_min[2],
- m_allAabbsCPU[40].m_max[0], m_allAabbsCPU[40].m_max[1], m_allAabbsCPU[40].m_max[2]);
- }
-
- {
- printf("ab[53].min=%f,%f,%f,ab[53].max=%f,%f,%f\n",
- m_allAabbsCPU[53].m_min[0], m_allAabbsCPU[53].m_min[1], m_allAabbsCPU[53].m_min[2],
- m_allAabbsCPU[53].m_max[0], m_allAabbsCPU[53].m_max[1], m_allAabbsCPU[53].m_max[2]);
- }
-
- {
- b3Int4 newPair;
- newPair.x = 40;
- newPair.y = 53;
- int index = allPairs.findBinarySearch(newPair);
- printf("hasPair(40,53)=%d out of %d\n", index, allPairs.size());
-
- {
- int overlap = TestAabbAgainstAabb2((const b3Vector3&)m_allAabbsCPU[40].m_min, (const b3Vector3&)m_allAabbsCPU[40].m_max, (const b3Vector3&)m_allAabbsCPU[53].m_min, (const b3Vector3&)m_allAabbsCPU[53].m_max);
- printf("overlap=%d\n", overlap);
- }
-
- if (preAabbs.size())
- {
- int prevOverlap = TestAabbAgainstAabb2((const b3Vector3&)preAabbs[40].m_min, (const b3Vector3&)preAabbs[40].m_max, (const b3Vector3&)preAabbs[53].m_min, (const b3Vector3&)preAabbs[53].m_max);
- printf("prevoverlap=%d\n", prevOverlap);
- }
- else
- {
- printf("unknown prevoverlap\n");
- }
- }
- }
-
- if (0)
- {
- for (int i = 0; i < m_allAabbsCPU.size(); i++)
- {
- //printf("aabb[%d] min=%f,%f,%f max=%f,%f,%f\n",i,m_allAabbsCPU[i].m_min[0],m_allAabbsCPU[i].m_min[1],m_allAabbsCPU[i].m_min[2], m_allAabbsCPU[i].m_max[0],m_allAabbsCPU[i].m_max[1],m_allAabbsCPU[i].m_max[2]);
- }
-
- for (int axis = 0; axis < 3; axis++)
- {
- for (int buf = 0; buf < 2; buf++)
- {
- b3Assert(m_sortedAxisCPU[axis][buf].size() == m_allAabbsCPU.size() * 2);
- }
- }
- }
-
- m_currentBuffer = 1 - m_currentBuffer;
-
- int totalNumAabbs = m_allAabbsCPU.size();
-
- {
- B3_PROFILE("assign m_sortedAxisCPU(FloatFlip)");
- for (int i = 0; i < totalNumAabbs; i++)
- {
- unsigned int keyMin[3];
- unsigned int keyMax[3];
- for (int axis = 0; axis < 3; axis++)
- {
- float vmin = m_allAabbsCPU[i].m_min[axis];
- float vmax = m_allAabbsCPU[i].m_max[axis];
- keyMin[axis] = FloatFlip(vmin);
- keyMax[axis] = FloatFlip(vmax);
-
- m_sortedAxisCPU[axis][m_currentBuffer][i * 2].m_key = keyMin[axis] - 1;
- m_sortedAxisCPU[axis][m_currentBuffer][i * 2].m_value = i * 2;
- m_sortedAxisCPU[axis][m_currentBuffer][i * 2 + 1].m_key = keyMax[axis] + 1;
- m_sortedAxisCPU[axis][m_currentBuffer][i * 2 + 1].m_value = i * 2 + 1;
- }
- //printf("aabb[%d] min=%u,%u,%u max %u,%u,%u\n", i,keyMin[0],keyMin[1],keyMin[2],keyMax[0],keyMax[1],keyMax[2]);
- }
- }
-
- {
- B3_PROFILE("sort m_sortedAxisCPU");
- for (int axis = 0; axis < 3; axis++)
- m_sorter->executeHost(m_sortedAxisCPU[axis][m_currentBuffer]);
- }
-
-#if 0
- if (0)
- {
- for (int axis=0;axis<3;axis++)
- {
- //printf("axis %d\n",axis);
- for (int i=0;i<m_sortedAxisCPU[axis][m_currentBuffer].size();i++)
- {
- //int key = m_sortedAxisCPU[axis][m_currentBuffer][i].m_key;
- //int value = m_sortedAxisCPU[axis][m_currentBuffer][i].m_value;
- //printf("[%d]=%d\n",i,value);
- }
-
- }
- }
-#endif
-
- {
- B3_PROFILE("assign m_objectMinMaxIndexCPU");
- for (int axis = 0; axis < 3; axis++)
- {
- int totalNumAabbs = m_allAabbsCPU.size();
- int numEndPoints = m_sortedAxisCPU[axis][m_currentBuffer].size();
- m_objectMinMaxIndexCPU[axis][m_currentBuffer].resize(totalNumAabbs);
- for (int i = 0; i < numEndPoints; i++)
- {
- int destIndex = m_sortedAxisCPU[axis][m_currentBuffer][i].m_value;
- int newDest = destIndex / 2;
- if (destIndex & 1)
- {
- m_objectMinMaxIndexCPU[axis][m_currentBuffer][newDest].y = i;
- }
- else
- {
- m_objectMinMaxIndexCPU[axis][m_currentBuffer][newDest].x = i;
- }
- }
- }
- }
-
-#if 0
- if (0)
- {
- printf("==========================\n");
- for (int axis=0;axis<3;axis++)
- {
- unsigned int curMinIndex40 = m_objectMinMaxIndexCPU[axis][m_currentBuffer][40].x;
- unsigned int curMaxIndex40 = m_objectMinMaxIndexCPU[axis][m_currentBuffer][40].y;
- unsigned int prevMaxIndex40 = m_objectMinMaxIndexCPU[axis][1-m_currentBuffer][40].y;
- unsigned int prevMinIndex40 = m_objectMinMaxIndexCPU[axis][1-m_currentBuffer][40].x;
-
- int dmin40 = curMinIndex40 - prevMinIndex40;
- int dmax40 = curMinIndex40 - prevMinIndex40;
- printf("axis %d curMinIndex40=%d prevMinIndex40=%d\n",axis,curMinIndex40, prevMinIndex40);
- printf("axis %d curMaxIndex40=%d prevMaxIndex40=%d\n",axis,curMaxIndex40, prevMaxIndex40);
- }
- printf(".........................\n");
- for (int axis=0;axis<3;axis++)
- {
- unsigned int curMinIndex53 = m_objectMinMaxIndexCPU[axis][m_currentBuffer][53].x;
- unsigned int curMaxIndex53 = m_objectMinMaxIndexCPU[axis][m_currentBuffer][53].y;
- unsigned int prevMaxIndex53 = m_objectMinMaxIndexCPU[axis][1-m_currentBuffer][53].y;
- unsigned int prevMinIndex53 = m_objectMinMaxIndexCPU[axis][1-m_currentBuffer][53].x;
-
- int dmin40 = curMinIndex53 - prevMinIndex53;
- int dmax40 = curMinIndex53 - prevMinIndex53;
- printf("axis %d curMinIndex53=%d prevMinIndex53=%d\n",axis,curMinIndex53, prevMinIndex53);
- printf("axis %d curMaxIndex53=%d prevMaxIndex53=%d\n",axis,curMaxIndex53, prevMaxIndex53);
- }
-
- }
-#endif
-
- int a = m_objectMinMaxIndexCPU[0][m_currentBuffer].size();
- int b = m_objectMinMaxIndexCPU[1][m_currentBuffer].size();
- int c = m_objectMinMaxIndexCPU[2][m_currentBuffer].size();
- b3Assert(a == b);
- b3Assert(b == c);
- /*
- if (searchIncremental3dSapOnGpu)
- {
- B3_PROFILE("computePairsIncremental3dSapKernelGPU");
- int numObjects = m_objectMinMaxIndexCPU[0][m_currentBuffer].size();
- int maxCapacity = 1024*1024;
- {
- B3_PROFILE("copy from host");
- m_objectMinMaxIndexGPUaxis0.copyFromHost(m_objectMinMaxIndexCPU[0][m_currentBuffer]);
- m_objectMinMaxIndexGPUaxis1.copyFromHost(m_objectMinMaxIndexCPU[1][m_currentBuffer]);
- m_objectMinMaxIndexGPUaxis2.copyFromHost(m_objectMinMaxIndexCPU[2][m_currentBuffer]);
- m_objectMinMaxIndexGPUaxis0prev.copyFromHost(m_objectMinMaxIndexCPU[0][1-m_currentBuffer]);
- m_objectMinMaxIndexGPUaxis1prev.copyFromHost(m_objectMinMaxIndexCPU[1][1-m_currentBuffer]);
- m_objectMinMaxIndexGPUaxis2prev.copyFromHost(m_objectMinMaxIndexCPU[2][1-m_currentBuffer]);
-
- m_sortedAxisGPU0.copyFromHost(m_sortedAxisCPU[0][m_currentBuffer]);
- m_sortedAxisGPU1.copyFromHost(m_sortedAxisCPU[1][m_currentBuffer]);
- m_sortedAxisGPU2.copyFromHost(m_sortedAxisCPU[2][m_currentBuffer]);
- m_sortedAxisGPU0prev.copyFromHost(m_sortedAxisCPU[0][1-m_currentBuffer]);
- m_sortedAxisGPU1prev.copyFromHost(m_sortedAxisCPU[1][1-m_currentBuffer]);
- m_sortedAxisGPU2prev.copyFromHost(m_sortedAxisCPU[2][1-m_currentBuffer]);
-
-
- m_addedHostPairsGPU.resize(maxCapacity);
- m_removedHostPairsGPU.resize(maxCapacity);
-
- m_addedCountGPU.resize(0);
- m_addedCountGPU.push_back(0);
- m_removedCountGPU.resize(0);
- m_removedCountGPU.push_back(0);
- }
-
- {
- B3_PROFILE("launch1D");
- b3LauncherCL launcher(m_queue, m_computePairsIncremental3dSapKernel,"m_computePairsIncremental3dSapKernel");
- launcher.setBuffer(m_objectMinMaxIndexGPUaxis0.getBufferCL());
- launcher.setBuffer(m_objectMinMaxIndexGPUaxis1.getBufferCL());
- launcher.setBuffer(m_objectMinMaxIndexGPUaxis2.getBufferCL());
- launcher.setBuffer(m_objectMinMaxIndexGPUaxis0prev.getBufferCL());
- launcher.setBuffer(m_objectMinMaxIndexGPUaxis1prev.getBufferCL());
- launcher.setBuffer(m_objectMinMaxIndexGPUaxis2prev.getBufferCL());
-
- launcher.setBuffer(m_sortedAxisGPU0.getBufferCL());
- launcher.setBuffer(m_sortedAxisGPU1.getBufferCL());
- launcher.setBuffer(m_sortedAxisGPU2.getBufferCL());
- launcher.setBuffer(m_sortedAxisGPU0prev.getBufferCL());
- launcher.setBuffer(m_sortedAxisGPU1prev.getBufferCL());
- launcher.setBuffer(m_sortedAxisGPU2prev.getBufferCL());
-
-
- launcher.setBuffer(m_addedHostPairsGPU.getBufferCL());
- launcher.setBuffer(m_removedHostPairsGPU.getBufferCL());
- launcher.setBuffer(m_addedCountGPU.getBufferCL());
- launcher.setBuffer(m_removedCountGPU.getBufferCL());
- launcher.setConst(maxCapacity);
- launcher.setConst( numObjects);
- launcher.launch1D( numObjects);
- clFinish(m_queue);
- }
-
- {
- B3_PROFILE("copy to host");
- int addedCountGPU = m_addedCountGPU.at(0);
- m_addedHostPairsGPU.resize(addedCountGPU);
- m_addedHostPairsGPU.copyToHost(addedHostPairs);
-
- //printf("addedCountGPU=%d\n",addedCountGPU);
- int removedCountGPU = m_removedCountGPU.at(0);
- m_removedHostPairsGPU.resize(removedCountGPU);
- m_removedHostPairsGPU.copyToHost(removedHostPairs);
- //printf("removedCountGPU=%d\n",removedCountGPU);
-
- }
-
-
-
- }
- else
- */
- {
- int numObjects = m_objectMinMaxIndexCPU[0][m_currentBuffer].size();
-
- B3_PROFILE("actual search");
- for (int i = 0; i < numObjects; i++)
- {
- //int numObjects = m_objectMinMaxIndexCPU[axis][m_currentBuffer].size();
- //int checkObjects[]={40,53};
- //int numCheckObjects = sizeof(checkObjects)/sizeof(int);
-
- //for (int a=0;a<numCheckObjects ;a++)
-
- for (int axis = 0; axis < 3; axis++)
- {
- //int i = checkObjects[a];
-
- unsigned int curMinIndex = m_objectMinMaxIndexCPU[axis][m_currentBuffer][i].x;
- unsigned int curMaxIndex = m_objectMinMaxIndexCPU[axis][m_currentBuffer][i].y;
- unsigned int prevMinIndex = m_objectMinMaxIndexCPU[axis][1 - m_currentBuffer][i].x;
- int dmin = curMinIndex - prevMinIndex;
-
- unsigned int prevMaxIndex = m_objectMinMaxIndexCPU[axis][1 - m_currentBuffer][i].y;
-
- int dmax = curMaxIndex - prevMaxIndex;
- if (dmin != 0)
- {
- //printf("for object %d, dmin=%d\n",i,dmin);
- }
- if (dmax != 0)
- {
- //printf("for object %d, dmax=%d\n",i,dmax);
- }
- for (int otherbuffer = 0; otherbuffer < 2; otherbuffer++)
- {
- if (dmin != 0)
- {
- int stepMin = dmin < 0 ? -1 : 1;
- for (int j = prevMinIndex; j != curMinIndex; j += stepMin)
- {
- int otherIndex2 = m_sortedAxisCPU[axis][otherbuffer][j].y;
- int otherIndex = otherIndex2 / 2;
- if (otherIndex != i)
- {
- bool otherIsMax = ((otherIndex2 & 1) != 0);
-
- if (otherIsMax)
- {
- //bool overlap = TestAabbAgainstAabb2((const b3Vector3&)m_allAabbsCPU[i].m_min, (const b3Vector3&)m_allAabbsCPU[i].m_max,(const b3Vector3&)m_allAabbsCPU[otherIndex].m_min,(const b3Vector3&)m_allAabbsCPU[otherIndex].m_max);
- //bool prevOverlap = TestAabbAgainstAabb2((const b3Vector3&)preAabbs[i].m_min, (const b3Vector3&)preAabbs[i].m_max,(const b3Vector3&)preAabbs[otherIndex].m_min,(const b3Vector3&)preAabbs[otherIndex].m_max);
-
- bool overlap = true;
-
- for (int ax = 0; ax < 3; ax++)
- {
- if ((m_objectMinMaxIndexCPU[ax][m_currentBuffer][i].x > m_objectMinMaxIndexCPU[ax][m_currentBuffer][otherIndex].y) ||
- (m_objectMinMaxIndexCPU[ax][m_currentBuffer][i].y < m_objectMinMaxIndexCPU[ax][m_currentBuffer][otherIndex].x))
- overlap = false;
- }
-
- // b3Assert(overlap2==overlap);
-
- bool prevOverlap = true;
-
- for (int ax = 0; ax < 3; ax++)
- {
- if ((m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][i].x > m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][otherIndex].y) ||
- (m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][i].y < m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][otherIndex].x))
- prevOverlap = false;
- }
-
- //b3Assert(overlap==overlap2);
-
- if (dmin < 0)
- {
- if (overlap && !prevOverlap)
- {
- //add a pair
- b3Int4 newPair;
- if (i <= otherIndex)
- {
- newPair.x = i;
- newPair.y = otherIndex;
- }
- else
- {
- newPair.x = otherIndex;
- newPair.y = i;
- }
- addedHostPairs.push_back(newPair);
- }
- }
- else
- {
- if (!overlap && prevOverlap)
- {
- //remove a pair
- b3Int4 removedPair;
- if (i <= otherIndex)
- {
- removedPair.x = i;
- removedPair.y = otherIndex;
- }
- else
- {
- removedPair.x = otherIndex;
- removedPair.y = i;
- }
- removedHostPairs.push_back(removedPair);
- }
- } //otherisMax
- } //if (dmin<0)
- } //if (otherIndex!=i)
- } //for (int j=
- }
-
- if (dmax != 0)
- {
- int stepMax = dmax < 0 ? -1 : 1;
- for (int j = prevMaxIndex; j != curMaxIndex; j += stepMax)
- {
- int otherIndex2 = m_sortedAxisCPU[axis][otherbuffer][j].y;
- int otherIndex = otherIndex2 / 2;
- if (otherIndex != i)
- {
- //bool otherIsMin = ((otherIndex2&1)==0);
- //if (otherIsMin)
- {
- //bool overlap = TestAabbAgainstAabb2((const b3Vector3&)m_allAabbsCPU[i].m_min, (const b3Vector3&)m_allAabbsCPU[i].m_max,(const b3Vector3&)m_allAabbsCPU[otherIndex].m_min,(const b3Vector3&)m_allAabbsCPU[otherIndex].m_max);
- //bool prevOverlap = TestAabbAgainstAabb2((const b3Vector3&)preAabbs[i].m_min, (const b3Vector3&)preAabbs[i].m_max,(const b3Vector3&)preAabbs[otherIndex].m_min,(const b3Vector3&)preAabbs[otherIndex].m_max);
-
- bool overlap = true;
-
- for (int ax = 0; ax < 3; ax++)
- {
- if ((m_objectMinMaxIndexCPU[ax][m_currentBuffer][i].x > m_objectMinMaxIndexCPU[ax][m_currentBuffer][otherIndex].y) ||
- (m_objectMinMaxIndexCPU[ax][m_currentBuffer][i].y < m_objectMinMaxIndexCPU[ax][m_currentBuffer][otherIndex].x))
- overlap = false;
- }
- //b3Assert(overlap2==overlap);
-
- bool prevOverlap = true;
-
- for (int ax = 0; ax < 3; ax++)
- {
- if ((m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][i].x > m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][otherIndex].y) ||
- (m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][i].y < m_objectMinMaxIndexCPU[ax][1 - m_currentBuffer][otherIndex].x))
- prevOverlap = false;
- }
-
- if (dmax > 0)
- {
- if (overlap && !prevOverlap)
- {
- //add a pair
- b3Int4 newPair;
- if (i <= otherIndex)
- {
- newPair.x = i;
- newPair.y = otherIndex;
- }
- else
- {
- newPair.x = otherIndex;
- newPair.y = i;
- }
- addedHostPairs.push_back(newPair);
- }
- }
- else
- {
- if (!overlap && prevOverlap)
- {
- //if (otherIndex2&1==0) -> min?
- //remove a pair
- b3Int4 removedPair;
- if (i <= otherIndex)
- {
- removedPair.x = i;
- removedPair.y = otherIndex;
- }
- else
- {
- removedPair.x = otherIndex;
- removedPair.y = i;
- }
- removedHostPairs.push_back(removedPair);
- }
- }
-
- } //if (dmin<0)
- } //if (otherIndex!=i)
- } //for (int j=
- }
- } //for (int otherbuffer
- } //for (int axis=0;
- } //for (int i=0;i<numObjects
- }
-
- //remove duplicates and add/remove then to existing m_overlappingPairs
-
- {
- {
- B3_PROFILE("sort allPairs");
- allPairs.quickSort(b3PairCmp);
- }
- {
- B3_PROFILE("sort addedHostPairs");
- addedHostPairs.quickSort(b3PairCmp);
- }
- {
- B3_PROFILE("sort removedHostPairs");
- removedHostPairs.quickSort(b3PairCmp);
- }
- }
-
- b3Int4 prevPair;
- prevPair.x = -1;
- prevPair.y = -1;
-
- int uniqueRemovedPairs = 0;
-
- b3AlignedObjectArray<int> removedPositions;
-
- {
- B3_PROFILE("actual removing");
- for (int i = 0; i < removedHostPairs.size(); i++)
- {
- b3Int4 removedPair = removedHostPairs[i];
- if ((removedPair.x != prevPair.x) || (removedPair.y != prevPair.y))
- {
- int index1 = allPairs.findBinarySearch(removedPair);
-
- //#ifdef _DEBUG
-
- int index2 = allPairs.findLinearSearch(removedPair);
- b3Assert(index1 == index2);
-
- //b3Assert(index1!=allPairs.size());
- if (index1 < allPairs.size())
- //#endif//_DEBUG
- {
- uniqueRemovedPairs++;
- removedPositions.push_back(index1);
- {
- //printf("framepje(%d) remove pair(%d):%d,%d\n",framepje,i,removedPair.x,removedPair.y);
- }
- }
- }
- prevPair = removedPair;
- }
-
- if (uniqueRemovedPairs)
- {
- for (int i = 0; i < removedPositions.size(); i++)
- {
- allPairs[removedPositions[i]].x = INT_MAX;
- allPairs[removedPositions[i]].y = INT_MAX;
- }
- allPairs.quickSort(b3PairCmp);
- allPairs.resize(allPairs.size() - uniqueRemovedPairs);
- }
- }
- //if (uniqueRemovedPairs)
- // printf("uniqueRemovedPairs=%d\n",uniqueRemovedPairs);
- //printf("removedHostPairs.size = %d\n",removedHostPairs.size());
-
- prevPair.x = -1;
- prevPair.y = -1;
-
- int uniqueAddedPairs = 0;
- b3AlignedObjectArray<b3Int4> actualAddedPairs;
-
- {
- B3_PROFILE("actual adding");
- for (int i = 0; i < addedHostPairs.size(); i++)
- {
- b3Int4 newPair = addedHostPairs[i];
- if ((newPair.x != prevPair.x) || (newPair.y != prevPair.y))
- {
- //#ifdef _DEBUG
- int index1 = allPairs.findBinarySearch(newPair);
-
- int index2 = allPairs.findLinearSearch(newPair);
- b3Assert(index1 == index2);
-
- b3Assert(index1 == allPairs.size());
- if (index1 != allPairs.size())
- {
- printf("??\n");
- }
-
- if (index1 == allPairs.size())
- //#endif //_DEBUG
- {
- uniqueAddedPairs++;
- actualAddedPairs.push_back(newPair);
- }
- }
- prevPair = newPair;
- }
- for (int i = 0; i < actualAddedPairs.size(); i++)
- {
- //printf("framepje (%d), new pair(%d):%d,%d\n",framepje,i,actualAddedPairs[i].x,actualAddedPairs[i].y);
- allPairs.push_back(actualAddedPairs[i]);
- }
- }
-
- //if (uniqueAddedPairs)
- // printf("uniqueAddedPairs=%d\n", uniqueAddedPairs);
-
- {
- B3_PROFILE("m_overlappingPairs.copyFromHost");
- m_overlappingPairs.copyFromHost(allPairs);
- }
-}
-
-void b3GpuSapBroadphase::calculateOverlappingPairsHost(int maxPairs)
-{
- //test
- // if (m_currentBuffer>=0)
- // return calculateOverlappingPairsHostIncremental3Sap();
-
- b3Assert(m_allAabbsCPU.size() == m_allAabbsGPU.size());
- m_allAabbsGPU.copyToHost(m_allAabbsCPU);
-
- int axis = 0;
- {
- B3_PROFILE("CPU compute best variance axis");
- b3Vector3 s = b3MakeVector3(0, 0, 0), s2 = b3MakeVector3(0, 0, 0);
- int numRigidBodies = m_smallAabbsMappingCPU.size();
-
- for (int i = 0; i < numRigidBodies; i++)
- {
- b3SapAabb aabb = this->m_allAabbsCPU[m_smallAabbsMappingCPU[i]];
-
- b3Vector3 maxAabb = b3MakeVector3(aabb.m_max[0], aabb.m_max[1], aabb.m_max[2]);
- b3Vector3 minAabb = b3MakeVector3(aabb.m_min[0], aabb.m_min[1], aabb.m_min[2]);
- b3Vector3 centerAabb = (maxAabb + minAabb) * 0.5f;
-
- s += centerAabb;
- s2 += centerAabb * centerAabb;
- }
- b3Vector3 v = s2 - (s * s) / (float)numRigidBodies;
-
- if (v[1] > v[0])
- axis = 1;
- if (v[2] > v[axis])
- axis = 2;
- }
-
- b3AlignedObjectArray<b3Int4> hostPairs;
-
- {
- int numSmallAabbs = m_smallAabbsMappingCPU.size();
- for (int i = 0; i < numSmallAabbs; i++)
- {
- b3SapAabb smallAabbi = m_allAabbsCPU[m_smallAabbsMappingCPU[i]];
- //float reference = smallAabbi.m_max[axis];
-
- for (int j = i + 1; j < numSmallAabbs; j++)
- {
- b3SapAabb smallAabbj = m_allAabbsCPU[m_smallAabbsMappingCPU[j]];
-
- if (TestAabbAgainstAabb2((b3Vector3&)smallAabbi.m_min, (b3Vector3&)smallAabbi.m_max,
- (b3Vector3&)smallAabbj.m_min, (b3Vector3&)smallAabbj.m_max))
- {
- b3Int4 pair;
- int a = smallAabbi.m_minIndices[3];
- int b = smallAabbj.m_minIndices[3];
- if (a <= b)
- {
- pair.x = a; //store the original index in the unsorted aabb array
- pair.y = b;
- }
- else
- {
- pair.x = b; //store the original index in the unsorted aabb array
- pair.y = a;
- }
- hostPairs.push_back(pair);
- }
- }
- }
- }
-
- {
- int numSmallAabbs = m_smallAabbsMappingCPU.size();
- for (int i = 0; i < numSmallAabbs; i++)
- {
- b3SapAabb smallAabbi = m_allAabbsCPU[m_smallAabbsMappingCPU[i]];
-
- //float reference = smallAabbi.m_max[axis];
- int numLargeAabbs = m_largeAabbsMappingCPU.size();
-
- for (int j = 0; j < numLargeAabbs; j++)
- {
- b3SapAabb largeAabbj = m_allAabbsCPU[m_largeAabbsMappingCPU[j]];
- if (TestAabbAgainstAabb2((b3Vector3&)smallAabbi.m_min, (b3Vector3&)smallAabbi.m_max,
- (b3Vector3&)largeAabbj.m_min, (b3Vector3&)largeAabbj.m_max))
- {
- b3Int4 pair;
- int a = largeAabbj.m_minIndices[3];
- int b = smallAabbi.m_minIndices[3];
- if (a <= b)
- {
- pair.x = a;
- pair.y = b; //store the original index in the unsorted aabb array
- }
- else
- {
- pair.x = b;
- pair.y = a; //store the original index in the unsorted aabb array
- }
-
- hostPairs.push_back(pair);
- }
- }
- }
- }
-
- if (hostPairs.size() > maxPairs)
- {
- hostPairs.resize(maxPairs);
- }
-
- if (hostPairs.size())
- {
- m_overlappingPairs.copyFromHost(hostPairs);
- }
- else
- {
- m_overlappingPairs.resize(0);
- }
-
- //init3dSap();
-}
-
-void b3GpuSapBroadphase::reset()
-{
- m_allAabbsGPU.resize(0);
- m_allAabbsCPU.resize(0);
-
- m_smallAabbsMappingGPU.resize(0);
- m_smallAabbsMappingCPU.resize(0);
-
- m_pairCount.resize(0);
-
- m_largeAabbsMappingGPU.resize(0);
- m_largeAabbsMappingCPU.resize(0);
-}
-
-void b3GpuSapBroadphase::calculateOverlappingPairs(int maxPairs)
-{
- if (m_sapKernel == 0)
- {
- calculateOverlappingPairsHost(maxPairs);
- return;
- }
-
- //if (m_currentBuffer>=0)
- // return calculateOverlappingPairsHostIncremental3Sap();
-
- //calculateOverlappingPairsHost(maxPairs);
-
- B3_PROFILE("GPU 1-axis SAP calculateOverlappingPairs");
-
- int axis = 0;
-
- {
- //bool syncOnHost = false;
-
- int numSmallAabbs = m_smallAabbsMappingCPU.size();
- if (m_prefixScanFloat4 && numSmallAabbs)
- {
- B3_PROFILE("GPU compute best variance axis");
-
- if (m_dst.size() != (numSmallAabbs + 1))
- {
- m_dst.resize(numSmallAabbs + 128);
- m_sum.resize(numSmallAabbs + 128);
- m_sum2.resize(numSmallAabbs + 128);
- m_sum.at(numSmallAabbs) = b3MakeVector3(0, 0, 0); //slow?
- m_sum2.at(numSmallAabbs) = b3MakeVector3(0, 0, 0); //slow?
- }
-
- b3LauncherCL launcher(m_queue, m_prepareSumVarianceKernel, "m_prepareSumVarianceKernel");
- launcher.setBuffer(m_allAabbsGPU.getBufferCL());
-
- launcher.setBuffer(m_smallAabbsMappingGPU.getBufferCL());
- launcher.setBuffer(m_sum.getBufferCL());
- launcher.setBuffer(m_sum2.getBufferCL());
- launcher.setConst(numSmallAabbs);
- int num = numSmallAabbs;
- launcher.launch1D(num);
-
- b3Vector3 s;
- b3Vector3 s2;
- m_prefixScanFloat4->execute(m_sum, m_dst, numSmallAabbs + 1, &s);
- m_prefixScanFloat4->execute(m_sum2, m_dst, numSmallAabbs + 1, &s2);
-
- b3Vector3 v = s2 - (s * s) / (float)numSmallAabbs;
-
- if (v[1] > v[0])
- axis = 1;
- if (v[2] > v[axis])
- axis = 2;
- }
-
- m_gpuSmallSortData.resize(numSmallAabbs);
-
-#if 1
- if (m_smallAabbsMappingGPU.size())
- {
- B3_PROFILE("flipFloatKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_allAabbsGPU.getBufferCL(), true),
- b3BufferInfoCL(m_smallAabbsMappingGPU.getBufferCL(), true),
- b3BufferInfoCL(m_gpuSmallSortData.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_flipFloatKernel, "m_flipFloatKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numSmallAabbs);
- launcher.setConst(axis);
-
- int num = numSmallAabbs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
-
- if (m_gpuSmallSortData.size())
- {
- B3_PROFILE("gpu radix sort");
- m_sorter->execute(m_gpuSmallSortData);
- clFinish(m_queue);
- }
-
- m_gpuSmallSortedAabbs.resize(numSmallAabbs);
- if (numSmallAabbs)
- {
- B3_PROFILE("scatterKernel");
-
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_allAabbsGPU.getBufferCL(), true),
- b3BufferInfoCL(m_smallAabbsMappingGPU.getBufferCL(), true),
- b3BufferInfoCL(m_gpuSmallSortData.getBufferCL(), true),
- b3BufferInfoCL(m_gpuSmallSortedAabbs.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_scatterKernel, "m_scatterKernel ");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numSmallAabbs);
- int num = numSmallAabbs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
-
- m_overlappingPairs.resize(maxPairs);
-
- m_pairCount.resize(0);
- m_pairCount.push_back(0);
- int numPairs = 0;
-
- {
- int numLargeAabbs = m_largeAabbsMappingGPU.size();
- if (numLargeAabbs && numSmallAabbs)
- {
- //@todo
- B3_PROFILE("sap2Kernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_allAabbsGPU.getBufferCL()),
- b3BufferInfoCL(m_largeAabbsMappingGPU.getBufferCL()),
- b3BufferInfoCL(m_smallAabbsMappingGPU.getBufferCL()),
- b3BufferInfoCL(m_overlappingPairs.getBufferCL()),
- b3BufferInfoCL(m_pairCount.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_sap2Kernel, "m_sap2Kernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numLargeAabbs);
- launcher.setConst(numSmallAabbs);
- launcher.setConst(axis);
- launcher.setConst(maxPairs);
- //@todo: use actual maximum work item sizes of the device instead of hardcoded values
- launcher.launch2D(numLargeAabbs, numSmallAabbs, 4, 64);
-
- numPairs = m_pairCount.at(0);
- if (numPairs > maxPairs)
- {
- b3Error("Error running out of pairs: numPairs = %d, maxPairs = %d.\n", numPairs, maxPairs);
- numPairs = maxPairs;
- }
- }
- }
- if (m_gpuSmallSortedAabbs.size())
- {
- B3_PROFILE("sapKernel");
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(m_gpuSmallSortedAabbs.getBufferCL()), b3BufferInfoCL(m_overlappingPairs.getBufferCL()), b3BufferInfoCL(m_pairCount.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_sapKernel, "m_sapKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numSmallAabbs);
- launcher.setConst(axis);
- launcher.setConst(maxPairs);
-
- int num = numSmallAabbs;
-#if 0
- int buffSize = launcher.getSerializationBufferSize();
- unsigned char* buf = new unsigned char[buffSize+sizeof(int)];
- for (int i=0;i<buffSize+1;i++)
- {
- unsigned char* ptr = (unsigned char*)&buf[i];
- *ptr = 0xff;
- }
- int actualWrite = launcher.serializeArguments(buf,buffSize);
-
- unsigned char* cptr = (unsigned char*)&buf[buffSize];
- // printf("buf[buffSize] = %d\n",*cptr);
-
- assert(buf[buffSize]==0xff);//check for buffer overrun
- int* ptr = (int*)&buf[buffSize];
-
- *ptr = num;
-
- FILE* f = fopen("m_sapKernelArgs.bin","wb");
- fwrite(buf,buffSize+sizeof(int),1,f);
- fclose(f);
-#endif //
-
- launcher.launch1D(num);
- clFinish(m_queue);
-
- numPairs = m_pairCount.at(0);
- if (numPairs > maxPairs)
- {
- b3Error("Error running out of pairs: numPairs = %d, maxPairs = %d.\n", numPairs, maxPairs);
- numPairs = maxPairs;
- m_pairCount.resize(0);
- m_pairCount.push_back(maxPairs);
- }
- }
-
-#else
- int numPairs = 0;
-
- b3LauncherCL launcher(m_queue, m_sapKernel);
-
- const char* fileName = "m_sapKernelArgs.bin";
- FILE* f = fopen(fileName, "rb");
- if (f)
- {
- int sizeInBytes = 0;
- if (fseek(f, 0, SEEK_END) || (sizeInBytes = ftell(f)) == EOF || fseek(f, 0, SEEK_SET))
- {
- printf("error, cannot get file size\n");
- exit(0);
- }
-
- unsigned char* buf = (unsigned char*)malloc(sizeInBytes);
- fread(buf, sizeInBytes, 1, f);
- int serializedBytes = launcher.deserializeArgs(buf, sizeInBytes, m_context);
- int num = *(int*)&buf[serializedBytes];
- launcher.launch1D(num);
-
- b3OpenCLArray<int> pairCount(m_context, m_queue);
- int numElements = launcher.m_arrays[2]->size() / sizeof(int);
- pairCount.setFromOpenCLBuffer(launcher.m_arrays[2]->getBufferCL(), numElements);
- numPairs = pairCount.at(0);
- //printf("overlapping pairs = %d\n",numPairs);
- b3AlignedObjectArray<b3Int4> hostOoverlappingPairs;
- b3OpenCLArray<b3Int4> tmpGpuPairs(m_context, m_queue);
- tmpGpuPairs.setFromOpenCLBuffer(launcher.m_arrays[1]->getBufferCL(), numPairs);
-
- tmpGpuPairs.copyToHost(hostOoverlappingPairs);
- m_overlappingPairs.copyFromHost(hostOoverlappingPairs);
- //printf("hello %d\n", m_overlappingPairs.size());
- free(buf);
- fclose(f);
- }
- else
- {
- printf("error: cannot find file %s\n", fileName);
- }
-
- clFinish(m_queue);
-
-#endif
-
- m_overlappingPairs.resize(numPairs);
-
- } //B3_PROFILE("GPU_RADIX SORT");
- //init3dSap();
-}
-
-void b3GpuSapBroadphase::writeAabbsToGpu()
-{
- m_smallAabbsMappingGPU.copyFromHost(m_smallAabbsMappingCPU);
- m_largeAabbsMappingGPU.copyFromHost(m_largeAabbsMappingCPU);
-
- m_allAabbsGPU.copyFromHost(m_allAabbsCPU); //might not be necessary, the 'setupGpuAabbsFull' already takes care of this
-}
-
-void b3GpuSapBroadphase::createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask)
-{
- int index = userPtr;
- b3SapAabb aabb;
- for (int i = 0; i < 4; i++)
- {
- aabb.m_min[i] = aabbMin[i];
- aabb.m_max[i] = aabbMax[i];
- }
- aabb.m_minIndices[3] = index;
- aabb.m_signedMaxIndices[3] = m_allAabbsCPU.size();
- m_largeAabbsMappingCPU.push_back(m_allAabbsCPU.size());
-
- m_allAabbsCPU.push_back(aabb);
-}
-
-void b3GpuSapBroadphase::createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask)
-{
- int index = userPtr;
- b3SapAabb aabb;
- for (int i = 0; i < 4; i++)
- {
- aabb.m_min[i] = aabbMin[i];
- aabb.m_max[i] = aabbMax[i];
- }
- aabb.m_minIndices[3] = index;
- aabb.m_signedMaxIndices[3] = m_allAabbsCPU.size();
- m_smallAabbsMappingCPU.push_back(m_allAabbsCPU.size());
-
- m_allAabbsCPU.push_back(aabb);
-}
-
-cl_mem b3GpuSapBroadphase::getAabbBufferWS()
-{
- return m_allAabbsGPU.getBufferCL();
-}
-
-int b3GpuSapBroadphase::getNumOverlap()
-{
- return m_overlappingPairs.size();
-}
-cl_mem b3GpuSapBroadphase::getOverlappingPairBuffer()
-{
- return m_overlappingPairs.getBufferCL();
-}
-
-b3OpenCLArray<b3Int4>& b3GpuSapBroadphase::getOverlappingPairsGPU()
-{
- return m_overlappingPairs;
-}
-b3OpenCLArray<int>& b3GpuSapBroadphase::getSmallAabbIndicesGPU()
-{
- return m_smallAabbsMappingGPU;
-}
-b3OpenCLArray<int>& b3GpuSapBroadphase::getLargeAabbIndicesGPU()
-{
- return m_largeAabbsMappingGPU;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.h
deleted file mode 100644
index d17590b14a..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3GpuSapBroadphase.h
+++ /dev/null
@@ -1,143 +0,0 @@
-#ifndef B3_GPU_SAP_BROADPHASE_H
-#define B3_GPU_SAP_BROADPHASE_H
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3FillCL.h" //b3Int2
-class b3Vector3;
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-
-#include "b3SapAabb.h"
-#include "Bullet3Common/shared/b3Int2.h"
-
-#include "b3GpuBroadphaseInterface.h"
-
-class b3GpuSapBroadphase : public b3GpuBroadphaseInterface
-{
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
- cl_kernel m_flipFloatKernel;
- cl_kernel m_scatterKernel;
- cl_kernel m_copyAabbsKernel;
- cl_kernel m_sapKernel;
- cl_kernel m_sap2Kernel;
- cl_kernel m_prepareSumVarianceKernel;
-
- class b3RadixSort32CL* m_sorter;
-
- ///test for 3d SAP
- b3AlignedObjectArray<b3SortData> m_sortedAxisCPU[3][2];
- b3AlignedObjectArray<b3UnsignedInt2> m_objectMinMaxIndexCPU[3][2];
- b3OpenCLArray<b3UnsignedInt2> m_objectMinMaxIndexGPUaxis0;
- b3OpenCLArray<b3UnsignedInt2> m_objectMinMaxIndexGPUaxis1;
- b3OpenCLArray<b3UnsignedInt2> m_objectMinMaxIndexGPUaxis2;
- b3OpenCLArray<b3UnsignedInt2> m_objectMinMaxIndexGPUaxis0prev;
- b3OpenCLArray<b3UnsignedInt2> m_objectMinMaxIndexGPUaxis1prev;
- b3OpenCLArray<b3UnsignedInt2> m_objectMinMaxIndexGPUaxis2prev;
-
- b3OpenCLArray<b3SortData> m_sortedAxisGPU0;
- b3OpenCLArray<b3SortData> m_sortedAxisGPU1;
- b3OpenCLArray<b3SortData> m_sortedAxisGPU2;
- b3OpenCLArray<b3SortData> m_sortedAxisGPU0prev;
- b3OpenCLArray<b3SortData> m_sortedAxisGPU1prev;
- b3OpenCLArray<b3SortData> m_sortedAxisGPU2prev;
-
- b3OpenCLArray<b3Int4> m_addedHostPairsGPU;
- b3OpenCLArray<b3Int4> m_removedHostPairsGPU;
- b3OpenCLArray<int> m_addedCountGPU;
- b3OpenCLArray<int> m_removedCountGPU;
-
- int m_currentBuffer;
-
-public:
- b3OpenCLArray<int> m_pairCount;
-
- b3OpenCLArray<b3SapAabb> m_allAabbsGPU;
- b3AlignedObjectArray<b3SapAabb> m_allAabbsCPU;
-
- virtual b3OpenCLArray<b3SapAabb>& getAllAabbsGPU()
- {
- return m_allAabbsGPU;
- }
- virtual b3AlignedObjectArray<b3SapAabb>& getAllAabbsCPU()
- {
- return m_allAabbsCPU;
- }
-
- b3OpenCLArray<b3Vector3> m_sum;
- b3OpenCLArray<b3Vector3> m_sum2;
- b3OpenCLArray<b3Vector3> m_dst;
-
- b3OpenCLArray<int> m_smallAabbsMappingGPU;
- b3AlignedObjectArray<int> m_smallAabbsMappingCPU;
-
- b3OpenCLArray<int> m_largeAabbsMappingGPU;
- b3AlignedObjectArray<int> m_largeAabbsMappingCPU;
-
- b3OpenCLArray<b3Int4> m_overlappingPairs;
-
- //temporary gpu work memory
- b3OpenCLArray<b3SortData> m_gpuSmallSortData;
- b3OpenCLArray<b3SapAabb> m_gpuSmallSortedAabbs;
-
- class b3PrefixScanFloat4CL* m_prefixScanFloat4;
-
- enum b3GpuSapKernelType
- {
- B3_GPU_SAP_KERNEL_BRUTE_FORCE_CPU = 1,
- B3_GPU_SAP_KERNEL_BRUTE_FORCE_GPU,
- B3_GPU_SAP_KERNEL_ORIGINAL,
- B3_GPU_SAP_KERNEL_BARRIER,
- B3_GPU_SAP_KERNEL_LOCAL_SHARED_MEMORY
- };
-
- b3GpuSapBroadphase(cl_context ctx, cl_device_id device, cl_command_queue q, b3GpuSapKernelType kernelType = B3_GPU_SAP_KERNEL_LOCAL_SHARED_MEMORY);
- virtual ~b3GpuSapBroadphase();
-
- static b3GpuBroadphaseInterface* CreateFuncBruteForceCpu(cl_context ctx, cl_device_id device, cl_command_queue q)
- {
- return new b3GpuSapBroadphase(ctx, device, q, B3_GPU_SAP_KERNEL_BRUTE_FORCE_CPU);
- }
-
- static b3GpuBroadphaseInterface* CreateFuncBruteForceGpu(cl_context ctx, cl_device_id device, cl_command_queue q)
- {
- return new b3GpuSapBroadphase(ctx, device, q, B3_GPU_SAP_KERNEL_BRUTE_FORCE_GPU);
- }
-
- static b3GpuBroadphaseInterface* CreateFuncOriginal(cl_context ctx, cl_device_id device, cl_command_queue q)
- {
- return new b3GpuSapBroadphase(ctx, device, q, B3_GPU_SAP_KERNEL_ORIGINAL);
- }
- static b3GpuBroadphaseInterface* CreateFuncBarrier(cl_context ctx, cl_device_id device, cl_command_queue q)
- {
- return new b3GpuSapBroadphase(ctx, device, q, B3_GPU_SAP_KERNEL_BARRIER);
- }
- static b3GpuBroadphaseInterface* CreateFuncLocalMemory(cl_context ctx, cl_device_id device, cl_command_queue q)
- {
- return new b3GpuSapBroadphase(ctx, device, q, B3_GPU_SAP_KERNEL_LOCAL_SHARED_MEMORY);
- }
-
- virtual void calculateOverlappingPairs(int maxPairs);
- virtual void calculateOverlappingPairsHost(int maxPairs);
-
- void reset();
-
- void init3dSap();
- virtual void calculateOverlappingPairsHostIncremental3Sap();
-
- virtual void createProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
- virtual void createLargeProxy(const b3Vector3& aabbMin, const b3Vector3& aabbMax, int userPtr, int collisionFilterGroup, int collisionFilterMask);
-
- //call writeAabbsToGpu after done making all changes (createProxy etc)
- virtual void writeAabbsToGpu();
-
- virtual cl_mem getAabbBufferWS();
- virtual int getNumOverlap();
- virtual cl_mem getOverlappingPairBuffer();
-
- virtual b3OpenCLArray<b3Int4>& getOverlappingPairsGPU();
- virtual b3OpenCLArray<int>& getSmallAabbIndicesGPU();
- virtual b3OpenCLArray<int>& getLargeAabbIndicesGPU();
-};
-
-#endif //B3_GPU_SAP_BROADPHASE_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h
deleted file mode 100644
index 60570f2605..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h
+++ /dev/null
@@ -1,13 +0,0 @@
-#ifndef B3_SAP_AABB_H
-#define B3_SAP_AABB_H
-
-#include "Bullet3Common/b3Scalar.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-
-///just make sure that the b3Aabb is 16-byte aligned
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3SapAabb : public b3Aabb{
-
- };
-
-#endif //B3_SAP_AABB_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphase.cl b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphase.cl
deleted file mode 100644
index ded4796d33..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphase.cl
+++ /dev/null
@@ -1,216 +0,0 @@
-
-
-int getPosHash(int4 gridPos, __global float4* pParams)
-{
- int4 gridDim = *((__global int4*)(pParams + 1));
- gridPos.x &= gridDim.x - 1;
- gridPos.y &= gridDim.y - 1;
- gridPos.z &= gridDim.z - 1;
- int hash = gridPos.z * gridDim.y * gridDim.x + gridPos.y * gridDim.x + gridPos.x;
- return hash;
-}
-
-int4 getGridPos(float4 worldPos, __global float4* pParams)
-{
- int4 gridPos;
- int4 gridDim = *((__global int4*)(pParams + 1));
- gridPos.x = (int)floor(worldPos.x * pParams[0].x) & (gridDim.x - 1);
- gridPos.y = (int)floor(worldPos.y * pParams[0].y) & (gridDim.y - 1);
- gridPos.z = (int)floor(worldPos.z * pParams[0].z) & (gridDim.z - 1);
- return gridPos;
-}
-
-
-// calculate grid hash value for each body using its AABB
-__kernel void kCalcHashAABB(int numObjects, __global float4* allpAABB, __global const int* smallAabbMapping, __global int2* pHash, __global float4* pParams )
-{
- int index = get_global_id(0);
- if(index >= numObjects)
- {
- return;
- }
- float4 bbMin = allpAABB[smallAabbMapping[index]*2];
- float4 bbMax = allpAABB[smallAabbMapping[index]*2 + 1];
- float4 pos;
- pos.x = (bbMin.x + bbMax.x) * 0.5f;
- pos.y = (bbMin.y + bbMax.y) * 0.5f;
- pos.z = (bbMin.z + bbMax.z) * 0.5f;
- pos.w = 0.f;
- // get address in grid
- int4 gridPos = getGridPos(pos, pParams);
- int gridHash = getPosHash(gridPos, pParams);
- // store grid hash and body index
- int2 hashVal;
- hashVal.x = gridHash;
- hashVal.y = index;
- pHash[index] = hashVal;
-}
-
-__kernel void kClearCellStart( int numCells,
- __global int* pCellStart )
-{
- int index = get_global_id(0);
- if(index >= numCells)
- {
- return;
- }
- pCellStart[index] = -1;
-}
-
-__kernel void kFindCellStart(int numObjects, __global int2* pHash, __global int* cellStart )
-{
- __local int sharedHash[513];
- int index = get_global_id(0);
- int2 sortedData;
-
- if(index < numObjects)
- {
- sortedData = pHash[index];
- // Load hash data into shared memory so that we can look
- // at neighboring body's hash value without loading
- // two hash values per thread
- sharedHash[get_local_id(0) + 1] = sortedData.x;
- if((index > 0) && (get_local_id(0) == 0))
- {
- // first thread in block must load neighbor body hash
- sharedHash[0] = pHash[index-1].x;
- }
- }
- barrier(CLK_LOCAL_MEM_FENCE);
- if(index < numObjects)
- {
- if((index == 0) || (sortedData.x != sharedHash[get_local_id(0)]))
- {
- cellStart[sortedData.x] = index;
- }
- }
-}
-
-int testAABBOverlap(float4 min0, float4 max0, float4 min1, float4 max1)
-{
- return (min0.x <= max1.x)&& (min1.x <= max0.x) &&
- (min0.y <= max1.y)&& (min1.y <= max0.y) &&
- (min0.z <= max1.z)&& (min1.z <= max0.z);
-}
-
-
-
-
-//search for AABB 'index' against other AABBs' in this cell
-void findPairsInCell( int numObjects,
- int4 gridPos,
- int index,
- __global int2* pHash,
- __global int* pCellStart,
- __global float4* allpAABB,
- __global const int* smallAabbMapping,
- __global float4* pParams,
- volatile __global int* pairCount,
- __global int4* pPairBuff2,
- int maxPairs
- )
-{
- int4 pGridDim = *((__global int4*)(pParams + 1));
- int maxBodiesPerCell = pGridDim.w;
- int gridHash = getPosHash(gridPos, pParams);
- // get start of bucket for this cell
- int bucketStart = pCellStart[gridHash];
- if (bucketStart == -1)
- {
- return; // cell empty
- }
- // iterate over bodies in this cell
- int2 sortedData = pHash[index];
- int unsorted_indx = sortedData.y;
- float4 min0 = allpAABB[smallAabbMapping[unsorted_indx]*2 + 0];
- float4 max0 = allpAABB[smallAabbMapping[unsorted_indx]*2 + 1];
- int handleIndex = as_int(min0.w);
-
- int bucketEnd = bucketStart + maxBodiesPerCell;
- bucketEnd = (bucketEnd > numObjects) ? numObjects : bucketEnd;
- for(int index2 = bucketStart; index2 < bucketEnd; index2++)
- {
- int2 cellData = pHash[index2];
- if (cellData.x != gridHash)
- {
- break; // no longer in same bucket
- }
- int unsorted_indx2 = cellData.y;
- //if (unsorted_indx2 < unsorted_indx) // check not colliding with self
- if (unsorted_indx2 != unsorted_indx) // check not colliding with self
- {
- float4 min1 = allpAABB[smallAabbMapping[unsorted_indx2]*2 + 0];
- float4 max1 = allpAABB[smallAabbMapping[unsorted_indx2]*2 + 1];
- if(testAABBOverlap(min0, max0, min1, max1))
- {
- if (pairCount)
- {
- int handleIndex2 = as_int(min1.w);
- if (handleIndex<handleIndex2)
- {
- int curPair = atomic_add(pairCount,1);
- if (curPair<maxPairs)
- {
- int4 newpair;
- newpair.x = handleIndex;
- newpair.y = handleIndex2;
- newpair.z = -1;
- newpair.w = -1;
- pPairBuff2[curPair] = newpair;
- }
- }
-
- }
- }
- }
- }
-}
-
-__kernel void kFindOverlappingPairs( int numObjects,
- __global float4* allpAABB,
- __global const int* smallAabbMapping,
- __global int2* pHash,
- __global int* pCellStart,
- __global float4* pParams ,
- volatile __global int* pairCount,
- __global int4* pPairBuff2,
- int maxPairs
- )
-
-{
- int index = get_global_id(0);
- if(index >= numObjects)
- {
- return;
- }
- int2 sortedData = pHash[index];
- int unsorted_indx = sortedData.y;
- float4 bbMin = allpAABB[smallAabbMapping[unsorted_indx]*2 + 0];
- float4 bbMax = allpAABB[smallAabbMapping[unsorted_indx]*2 + 1];
- float4 pos;
- pos.x = (bbMin.x + bbMax.x) * 0.5f;
- pos.y = (bbMin.y + bbMax.y) * 0.5f;
- pos.z = (bbMin.z + bbMax.z) * 0.5f;
- // get address in grid
- int4 gridPosA = getGridPos(pos, pParams);
- int4 gridPosB;
- // examine only neighbouring cells
- for(int z=-1; z<=1; z++)
- {
- gridPosB.z = gridPosA.z + z;
- for(int y=-1; y<=1; y++)
- {
- gridPosB.y = gridPosA.y + y;
- for(int x=-1; x<=1; x++)
- {
- gridPosB.x = gridPosA.x + x;
- findPairsInCell(numObjects, gridPosB, index, pHash, pCellStart, allpAABB,smallAabbMapping, pParams, pairCount,pPairBuff2, maxPairs);
- }
- }
- }
-}
-
-
-
-
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphaseKernels.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphaseKernels.h
deleted file mode 100644
index 0185417786..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/gridBroadphaseKernels.h
+++ /dev/null
@@ -1,198 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* gridBroadphaseCL =
- "int getPosHash(int4 gridPos, __global float4* pParams)\n"
- "{\n"
- " int4 gridDim = *((__global int4*)(pParams + 1));\n"
- " gridPos.x &= gridDim.x - 1;\n"
- " gridPos.y &= gridDim.y - 1;\n"
- " gridPos.z &= gridDim.z - 1;\n"
- " int hash = gridPos.z * gridDim.y * gridDim.x + gridPos.y * gridDim.x + gridPos.x;\n"
- " return hash;\n"
- "} \n"
- "int4 getGridPos(float4 worldPos, __global float4* pParams)\n"
- "{\n"
- " int4 gridPos;\n"
- " int4 gridDim = *((__global int4*)(pParams + 1));\n"
- " gridPos.x = (int)floor(worldPos.x * pParams[0].x) & (gridDim.x - 1);\n"
- " gridPos.y = (int)floor(worldPos.y * pParams[0].y) & (gridDim.y - 1);\n"
- " gridPos.z = (int)floor(worldPos.z * pParams[0].z) & (gridDim.z - 1);\n"
- " return gridPos;\n"
- "}\n"
- "// calculate grid hash value for each body using its AABB\n"
- "__kernel void kCalcHashAABB(int numObjects, __global float4* allpAABB, __global const int* smallAabbMapping, __global int2* pHash, __global float4* pParams )\n"
- "{\n"
- " int index = get_global_id(0);\n"
- " if(index >= numObjects)\n"
- " {\n"
- " return;\n"
- " }\n"
- " float4 bbMin = allpAABB[smallAabbMapping[index]*2];\n"
- " float4 bbMax = allpAABB[smallAabbMapping[index]*2 + 1];\n"
- " float4 pos;\n"
- " pos.x = (bbMin.x + bbMax.x) * 0.5f;\n"
- " pos.y = (bbMin.y + bbMax.y) * 0.5f;\n"
- " pos.z = (bbMin.z + bbMax.z) * 0.5f;\n"
- " pos.w = 0.f;\n"
- " // get address in grid\n"
- " int4 gridPos = getGridPos(pos, pParams);\n"
- " int gridHash = getPosHash(gridPos, pParams);\n"
- " // store grid hash and body index\n"
- " int2 hashVal;\n"
- " hashVal.x = gridHash;\n"
- " hashVal.y = index;\n"
- " pHash[index] = hashVal;\n"
- "}\n"
- "__kernel void kClearCellStart( int numCells, \n"
- " __global int* pCellStart )\n"
- "{\n"
- " int index = get_global_id(0);\n"
- " if(index >= numCells)\n"
- " {\n"
- " return;\n"
- " }\n"
- " pCellStart[index] = -1;\n"
- "}\n"
- "__kernel void kFindCellStart(int numObjects, __global int2* pHash, __global int* cellStart )\n"
- "{\n"
- " __local int sharedHash[513];\n"
- " int index = get_global_id(0);\n"
- " int2 sortedData;\n"
- " if(index < numObjects)\n"
- " {\n"
- " sortedData = pHash[index];\n"
- " // Load hash data into shared memory so that we can look \n"
- " // at neighboring body's hash value without loading\n"
- " // two hash values per thread\n"
- " sharedHash[get_local_id(0) + 1] = sortedData.x;\n"
- " if((index > 0) && (get_local_id(0) == 0))\n"
- " {\n"
- " // first thread in block must load neighbor body hash\n"
- " sharedHash[0] = pHash[index-1].x;\n"
- " }\n"
- " }\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " if(index < numObjects)\n"
- " {\n"
- " if((index == 0) || (sortedData.x != sharedHash[get_local_id(0)]))\n"
- " {\n"
- " cellStart[sortedData.x] = index;\n"
- " }\n"
- " }\n"
- "}\n"
- "int testAABBOverlap(float4 min0, float4 max0, float4 min1, float4 max1)\n"
- "{\n"
- " return (min0.x <= max1.x)&& (min1.x <= max0.x) && \n"
- " (min0.y <= max1.y)&& (min1.y <= max0.y) && \n"
- " (min0.z <= max1.z)&& (min1.z <= max0.z); \n"
- "}\n"
- "//search for AABB 'index' against other AABBs' in this cell\n"
- "void findPairsInCell( int numObjects,\n"
- " int4 gridPos,\n"
- " int index,\n"
- " __global int2* pHash,\n"
- " __global int* pCellStart,\n"
- " __global float4* allpAABB, \n"
- " __global const int* smallAabbMapping,\n"
- " __global float4* pParams,\n"
- " volatile __global int* pairCount,\n"
- " __global int4* pPairBuff2,\n"
- " int maxPairs\n"
- " )\n"
- "{\n"
- " int4 pGridDim = *((__global int4*)(pParams + 1));\n"
- " int maxBodiesPerCell = pGridDim.w;\n"
- " int gridHash = getPosHash(gridPos, pParams);\n"
- " // get start of bucket for this cell\n"
- " int bucketStart = pCellStart[gridHash];\n"
- " if (bucketStart == -1)\n"
- " {\n"
- " return; // cell empty\n"
- " }\n"
- " // iterate over bodies in this cell\n"
- " int2 sortedData = pHash[index];\n"
- " int unsorted_indx = sortedData.y;\n"
- " float4 min0 = allpAABB[smallAabbMapping[unsorted_indx]*2 + 0]; \n"
- " float4 max0 = allpAABB[smallAabbMapping[unsorted_indx]*2 + 1];\n"
- " int handleIndex = as_int(min0.w);\n"
- " \n"
- " int bucketEnd = bucketStart + maxBodiesPerCell;\n"
- " bucketEnd = (bucketEnd > numObjects) ? numObjects : bucketEnd;\n"
- " for(int index2 = bucketStart; index2 < bucketEnd; index2++) \n"
- " {\n"
- " int2 cellData = pHash[index2];\n"
- " if (cellData.x != gridHash)\n"
- " {\n"
- " break; // no longer in same bucket\n"
- " }\n"
- " int unsorted_indx2 = cellData.y;\n"
- " //if (unsorted_indx2 < unsorted_indx) // check not colliding with self\n"
- " if (unsorted_indx2 != unsorted_indx) // check not colliding with self\n"
- " { \n"
- " float4 min1 = allpAABB[smallAabbMapping[unsorted_indx2]*2 + 0];\n"
- " float4 max1 = allpAABB[smallAabbMapping[unsorted_indx2]*2 + 1];\n"
- " if(testAABBOverlap(min0, max0, min1, max1))\n"
- " {\n"
- " if (pairCount)\n"
- " {\n"
- " int handleIndex2 = as_int(min1.w);\n"
- " if (handleIndex<handleIndex2)\n"
- " {\n"
- " int curPair = atomic_add(pairCount,1);\n"
- " if (curPair<maxPairs)\n"
- " {\n"
- " int4 newpair;\n"
- " newpair.x = handleIndex;\n"
- " newpair.y = handleIndex2;\n"
- " newpair.z = -1;\n"
- " newpair.w = -1;\n"
- " pPairBuff2[curPair] = newpair;\n"
- " }\n"
- " }\n"
- " \n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void kFindOverlappingPairs( int numObjects,\n"
- " __global float4* allpAABB, \n"
- " __global const int* smallAabbMapping,\n"
- " __global int2* pHash, \n"
- " __global int* pCellStart, \n"
- " __global float4* pParams ,\n"
- " volatile __global int* pairCount,\n"
- " __global int4* pPairBuff2,\n"
- " int maxPairs\n"
- " )\n"
- "{\n"
- " int index = get_global_id(0);\n"
- " if(index >= numObjects)\n"
- " {\n"
- " return;\n"
- " }\n"
- " int2 sortedData = pHash[index];\n"
- " int unsorted_indx = sortedData.y;\n"
- " float4 bbMin = allpAABB[smallAabbMapping[unsorted_indx]*2 + 0];\n"
- " float4 bbMax = allpAABB[smallAabbMapping[unsorted_indx]*2 + 1];\n"
- " float4 pos;\n"
- " pos.x = (bbMin.x + bbMax.x) * 0.5f;\n"
- " pos.y = (bbMin.y + bbMax.y) * 0.5f;\n"
- " pos.z = (bbMin.z + bbMax.z) * 0.5f;\n"
- " // get address in grid\n"
- " int4 gridPosA = getGridPos(pos, pParams);\n"
- " int4 gridPosB; \n"
- " // examine only neighbouring cells\n"
- " for(int z=-1; z<=1; z++) \n"
- " {\n"
- " gridPosB.z = gridPosA.z + z;\n"
- " for(int y=-1; y<=1; y++) \n"
- " {\n"
- " gridPosB.y = gridPosA.y + y;\n"
- " for(int x=-1; x<=1; x++) \n"
- " {\n"
- " gridPosB.x = gridPosA.x + x;\n"
- " findPairsInCell(numObjects, gridPosB, index, pHash, pCellStart, allpAABB,smallAabbMapping, pParams, pairCount,pPairBuff2, maxPairs);\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvh.cl b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvh.cl
deleted file mode 100644
index c375b9bf37..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvh.cl
+++ /dev/null
@@ -1,767 +0,0 @@
-/*
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Initial Author Jackson Lee, 2014
-
-typedef float b3Scalar;
-typedef float4 b3Vector3;
-#define b3Max max
-#define b3Min min
-#define b3Sqrt sqrt
-
-typedef struct
-{
- unsigned int m_key;
- unsigned int m_value;
-} SortDataCL;
-
-typedef struct
-{
- union
- {
- float4 m_min;
- float m_minElems[4];
- int m_minIndices[4];
- };
- union
- {
- float4 m_max;
- float m_maxElems[4];
- int m_maxIndices[4];
- };
-} b3AabbCL;
-
-
-unsigned int interleaveBits(unsigned int x)
-{
- //........ ........ ......12 3456789A //x
- //....1..2 ..3..4.. 5..6..7. .8..9..A //x after interleaving bits
-
- //......12 3456789A ......12 3456789A //x ^ (x << 16)
- //11111111 ........ ........ 11111111 //0x FF 00 00 FF
- //......12 ........ ........ 3456789A //x = (x ^ (x << 16)) & 0xFF0000FF;
-
- //......12 ........ 3456789A 3456789A //x ^ (x << 8)
- //......11 ........ 1111.... ....1111 //0x 03 00 F0 0F
- //......12 ........ 3456.... ....789A //x = (x ^ (x << 8)) & 0x0300F00F;
-
- //..12..12 ....3456 3456.... 789A789A //x ^ (x << 4)
- //......11 ....11.. ..11.... 11....11 //0x 03 0C 30 C3
- //......12 ....34.. ..56.... 78....9A //x = (x ^ (x << 4)) & 0x030C30C3;
-
- //....1212 ..3434.. 5656..78 78..9A9A //x ^ (x << 2)
- //....1..1 ..1..1.. 1..1..1. .1..1..1 //0x 09 24 92 49
- //....1..2 ..3..4.. 5..6..7. .8..9..A //x = (x ^ (x << 2)) & 0x09249249;
-
- //........ ........ ......11 11111111 //0x000003FF
- x &= 0x000003FF; //Clear all bits above bit 10
-
- x = (x ^ (x << 16)) & 0xFF0000FF;
- x = (x ^ (x << 8)) & 0x0300F00F;
- x = (x ^ (x << 4)) & 0x030C30C3;
- x = (x ^ (x << 2)) & 0x09249249;
-
- return x;
-}
-unsigned int getMortonCode(unsigned int x, unsigned int y, unsigned int z)
-{
- return interleaveBits(x) << 0 | interleaveBits(y) << 1 | interleaveBits(z) << 2;
-}
-
-__kernel void separateAabbs(__global b3AabbCL* unseparatedAabbs, __global int* aabbIndices, __global b3AabbCL* out_aabbs, int numAabbsToSeparate)
-{
- int separatedAabbIndex = get_global_id(0);
- if(separatedAabbIndex >= numAabbsToSeparate) return;
-
- int unseparatedAabbIndex = aabbIndices[separatedAabbIndex];
- out_aabbs[separatedAabbIndex] = unseparatedAabbs[unseparatedAabbIndex];
-}
-
-//Should replace with an optimized parallel reduction
-__kernel void findAllNodesMergedAabb(__global b3AabbCL* out_mergedAabb, int numAabbsNeedingMerge)
-{
- //Each time this kernel is added to the command queue,
- //the number of AABBs needing to be merged is halved
- //
- //Example with 159 AABBs:
- // numRemainingAabbs == 159 / 2 + 159 % 2 == 80
- // numMergedAabbs == 159 - 80 == 79
- //So, indices [0, 78] are merged with [0 + 80, 78 + 80]
-
- int numRemainingAabbs = numAabbsNeedingMerge / 2 + numAabbsNeedingMerge % 2;
- int numMergedAabbs = numAabbsNeedingMerge - numRemainingAabbs;
-
- int aabbIndex = get_global_id(0);
- if(aabbIndex >= numMergedAabbs) return;
-
- int otherAabbIndex = aabbIndex + numRemainingAabbs;
-
- b3AabbCL aabb = out_mergedAabb[aabbIndex];
- b3AabbCL otherAabb = out_mergedAabb[otherAabbIndex];
-
- b3AabbCL mergedAabb;
- mergedAabb.m_min = b3Min(aabb.m_min, otherAabb.m_min);
- mergedAabb.m_max = b3Max(aabb.m_max, otherAabb.m_max);
- out_mergedAabb[aabbIndex] = mergedAabb;
-}
-
-__kernel void assignMortonCodesAndAabbIndicies(__global b3AabbCL* worldSpaceAabbs, __global b3AabbCL* mergedAabbOfAllNodes,
- __global SortDataCL* out_mortonCodesAndAabbIndices, int numAabbs)
-{
- int leafNodeIndex = get_global_id(0); //Leaf node index == AABB index
- if(leafNodeIndex >= numAabbs) return;
-
- b3AabbCL mergedAabb = mergedAabbOfAllNodes[0];
- b3Vector3 gridCenter = (mergedAabb.m_min + mergedAabb.m_max) * 0.5f;
- b3Vector3 gridCellSize = (mergedAabb.m_max - mergedAabb.m_min) / (float)1024;
-
- b3AabbCL aabb = worldSpaceAabbs[leafNodeIndex];
- b3Vector3 aabbCenter = (aabb.m_min + aabb.m_max) * 0.5f;
- b3Vector3 aabbCenterRelativeToGrid = aabbCenter - gridCenter;
-
- //Quantize into integer coordinates
- //floor() is needed to prevent the center cell, at (0,0,0) from being twice the size
- b3Vector3 gridPosition = aabbCenterRelativeToGrid / gridCellSize;
-
- int4 discretePosition;
- discretePosition.x = (int)( (gridPosition.x >= 0.0f) ? gridPosition.x : floor(gridPosition.x) );
- discretePosition.y = (int)( (gridPosition.y >= 0.0f) ? gridPosition.y : floor(gridPosition.y) );
- discretePosition.z = (int)( (gridPosition.z >= 0.0f) ? gridPosition.z : floor(gridPosition.z) );
-
- //Clamp coordinates into [-512, 511], then convert range from [-512, 511] to [0, 1023]
- discretePosition = b3Max( -512, b3Min(discretePosition, 511) );
- discretePosition += 512;
-
- //Interleave bits(assign a morton code, also known as a z-curve)
- unsigned int mortonCode = getMortonCode(discretePosition.x, discretePosition.y, discretePosition.z);
-
- //
- SortDataCL mortonCodeIndexPair;
- mortonCodeIndexPair.m_key = mortonCode;
- mortonCodeIndexPair.m_value = leafNodeIndex;
-
- out_mortonCodesAndAabbIndices[leafNodeIndex] = mortonCodeIndexPair;
-}
-
-#define B3_PLVBH_TRAVERSE_MAX_STACK_SIZE 128
-
-//The most significant bit(0x80000000) of a int32 is used to distinguish between leaf and internal nodes.
-//If it is set, then the index is for an internal node; otherwise, it is a leaf node.
-//In both cases, the bit should be cleared to access the actual node index.
-int isLeafNode(int index) { return (index >> 31 == 0); }
-int getIndexWithInternalNodeMarkerRemoved(int index) { return index & (~0x80000000); }
-int getIndexWithInternalNodeMarkerSet(int isLeaf, int index) { return (isLeaf) ? index : (index | 0x80000000); }
-
-//From sap.cl
-#define NEW_PAIR_MARKER -1
-
-bool TestAabbAgainstAabb2(const b3AabbCL* aabb1, const b3AabbCL* aabb2)
-{
- bool overlap = true;
- overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;
- overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;
- overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;
- return overlap;
-}
-//From sap.cl
-
-__kernel void plbvhCalculateOverlappingPairs(__global b3AabbCL* rigidAabbs,
-
- __global int* rootNodeIndex,
- __global int2* internalNodeChildIndices,
- __global b3AabbCL* internalNodeAabbs,
- __global int2* internalNodeLeafIndexRanges,
-
- __global SortDataCL* mortonCodesAndAabbIndices,
- __global int* out_numPairs, __global int4* out_overlappingPairs,
- int maxPairs, int numQueryAabbs)
-{
- //Using get_group_id()/get_local_id() is Faster than get_global_id(0) since
- //mortonCodesAndAabbIndices[] contains rigid body indices sorted along the z-curve (more spatially coherent)
- int queryBvhNodeIndex = get_group_id(0) * get_local_size(0) + get_local_id(0);
- if(queryBvhNodeIndex >= numQueryAabbs) return;
-
- int queryRigidIndex = mortonCodesAndAabbIndices[queryBvhNodeIndex].m_value;
- b3AabbCL queryAabb = rigidAabbs[queryRigidIndex];
-
- int stack[B3_PLVBH_TRAVERSE_MAX_STACK_SIZE];
-
- int stackSize = 1;
- stack[0] = *rootNodeIndex;
-
- while(stackSize)
- {
- int internalOrLeafNodeIndex = stack[ stackSize - 1 ];
- --stackSize;
-
- int isLeaf = isLeafNode(internalOrLeafNodeIndex); //Internal node if false
- int bvhNodeIndex = getIndexWithInternalNodeMarkerRemoved(internalOrLeafNodeIndex);
-
- //Optimization - if the BVH is structured as a binary radix tree, then
- //each internal node corresponds to a contiguous range of leaf nodes(internalNodeLeafIndexRanges[]).
- //This can be used to avoid testing each AABB-AABB pair twice, including preventing each node from colliding with itself.
- {
- int highestLeafIndex = (isLeaf) ? bvhNodeIndex : internalNodeLeafIndexRanges[bvhNodeIndex].y;
- if(highestLeafIndex <= queryBvhNodeIndex) continue;
- }
-
- //bvhRigidIndex is not used if internal node
- int bvhRigidIndex = (isLeaf) ? mortonCodesAndAabbIndices[bvhNodeIndex].m_value : -1;
-
- b3AabbCL bvhNodeAabb = (isLeaf) ? rigidAabbs[bvhRigidIndex] : internalNodeAabbs[bvhNodeIndex];
- if( TestAabbAgainstAabb2(&queryAabb, &bvhNodeAabb) )
- {
- if(isLeaf)
- {
- int4 pair;
- pair.x = rigidAabbs[queryRigidIndex].m_minIndices[3];
- pair.y = rigidAabbs[bvhRigidIndex].m_minIndices[3];
- pair.z = NEW_PAIR_MARKER;
- pair.w = NEW_PAIR_MARKER;
-
- int pairIndex = atomic_inc(out_numPairs);
- if(pairIndex < maxPairs) out_overlappingPairs[pairIndex] = pair;
- }
-
- if(!isLeaf) //Internal node
- {
- if(stackSize + 2 > B3_PLVBH_TRAVERSE_MAX_STACK_SIZE)
- {
- //Error
- }
- else
- {
- stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].x;
- stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].y;
- }
- }
- }
-
- }
-}
-
-
-//From rayCastKernels.cl
-typedef struct
-{
- float4 m_from;
- float4 m_to;
-} b3RayInfo;
-//From rayCastKernels.cl
-
-b3Vector3 b3Vector3_normalize(b3Vector3 v)
-{
- b3Vector3 normal = (b3Vector3){v.x, v.y, v.z, 0.f};
- return normalize(normal); //OpenCL normalize == vector4 normalize
-}
-b3Scalar b3Vector3_length2(b3Vector3 v) { return v.x*v.x + v.y*v.y + v.z*v.z; }
-b3Scalar b3Vector3_dot(b3Vector3 a, b3Vector3 b) { return a.x*b.x + a.y*b.y + a.z*b.z; }
-
-int rayIntersectsAabb(b3Vector3 rayOrigin, b3Scalar rayLength, b3Vector3 rayNormalizedDirection, b3AabbCL aabb)
-{
- //AABB is considered as 3 pairs of 2 planes( {x_min, x_max}, {y_min, y_max}, {z_min, z_max} ).
- //t_min is the point of intersection with the closer plane, t_max is the point of intersection with the farther plane.
- //
- //if (rayNormalizedDirection.x < 0.0f), then max.x will be the near plane
- //and min.x will be the far plane; otherwise, it is reversed.
- //
- //In order for there to be a collision, the t_min and t_max of each pair must overlap.
- //This can be tested for by selecting the highest t_min and lowest t_max and comparing them.
-
- int4 isNegative = isless( rayNormalizedDirection, ((b3Vector3){0.0f, 0.0f, 0.0f, 0.0f}) ); //isless(x,y) returns (x < y)
-
- //When using vector types, the select() function checks the most signficant bit,
- //but isless() sets the least significant bit.
- isNegative <<= 31;
-
- //select(b, a, condition) == condition ? a : b
- //When using select() with vector types, (condition[i]) is true if its most significant bit is 1
- b3Vector3 t_min = ( select(aabb.m_min, aabb.m_max, isNegative) - rayOrigin ) / rayNormalizedDirection;
- b3Vector3 t_max = ( select(aabb.m_max, aabb.m_min, isNegative) - rayOrigin ) / rayNormalizedDirection;
-
- b3Scalar t_min_final = 0.0f;
- b3Scalar t_max_final = rayLength;
-
- //Must use fmin()/fmax(); if one of the parameters is NaN, then the parameter that is not NaN is returned.
- //Behavior of min()/max() with NaNs is undefined. (See OpenCL Specification 1.2 [6.12.2] and [6.12.4])
- //Since the innermost fmin()/fmax() is always not NaN, this should never return NaN.
- t_min_final = fmax( t_min.z, fmax(t_min.y, fmax(t_min.x, t_min_final)) );
- t_max_final = fmin( t_max.z, fmin(t_max.y, fmin(t_max.x, t_max_final)) );
-
- return (t_min_final <= t_max_final);
-}
-
-__kernel void plbvhRayTraverse(__global b3AabbCL* rigidAabbs,
-
- __global int* rootNodeIndex,
- __global int2* internalNodeChildIndices,
- __global b3AabbCL* internalNodeAabbs,
- __global int2* internalNodeLeafIndexRanges,
- __global SortDataCL* mortonCodesAndAabbIndices,
-
- __global b3RayInfo* rays,
-
- __global int* out_numRayRigidPairs,
- __global int2* out_rayRigidPairs,
- int maxRayRigidPairs, int numRays)
-{
- int rayIndex = get_global_id(0);
- if(rayIndex >= numRays) return;
-
- //
- b3Vector3 rayFrom = rays[rayIndex].m_from;
- b3Vector3 rayTo = rays[rayIndex].m_to;
- b3Vector3 rayNormalizedDirection = b3Vector3_normalize(rayTo - rayFrom);
- b3Scalar rayLength = b3Sqrt( b3Vector3_length2(rayTo - rayFrom) );
-
- //
- int stack[B3_PLVBH_TRAVERSE_MAX_STACK_SIZE];
-
- int stackSize = 1;
- stack[0] = *rootNodeIndex;
-
- while(stackSize)
- {
- int internalOrLeafNodeIndex = stack[ stackSize - 1 ];
- --stackSize;
-
- int isLeaf = isLeafNode(internalOrLeafNodeIndex); //Internal node if false
- int bvhNodeIndex = getIndexWithInternalNodeMarkerRemoved(internalOrLeafNodeIndex);
-
- //bvhRigidIndex is not used if internal node
- int bvhRigidIndex = (isLeaf) ? mortonCodesAndAabbIndices[bvhNodeIndex].m_value : -1;
-
- b3AabbCL bvhNodeAabb = (isLeaf) ? rigidAabbs[bvhRigidIndex] : internalNodeAabbs[bvhNodeIndex];
- if( rayIntersectsAabb(rayFrom, rayLength, rayNormalizedDirection, bvhNodeAabb) )
- {
- if(isLeaf)
- {
- int2 rayRigidPair;
- rayRigidPair.x = rayIndex;
- rayRigidPair.y = rigidAabbs[bvhRigidIndex].m_minIndices[3];
-
- int pairIndex = atomic_inc(out_numRayRigidPairs);
- if(pairIndex < maxRayRigidPairs) out_rayRigidPairs[pairIndex] = rayRigidPair;
- }
-
- if(!isLeaf) //Internal node
- {
- if(stackSize + 2 > B3_PLVBH_TRAVERSE_MAX_STACK_SIZE)
- {
- //Error
- }
- else
- {
- stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].x;
- stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].y;
- }
- }
- }
- }
-}
-
-__kernel void plbvhLargeAabbAabbTest(__global b3AabbCL* smallAabbs, __global b3AabbCL* largeAabbs,
- __global int* out_numPairs, __global int4* out_overlappingPairs,
- int maxPairs, int numLargeAabbRigids, int numSmallAabbRigids)
-{
- int smallAabbIndex = get_global_id(0);
- if(smallAabbIndex >= numSmallAabbRigids) return;
-
- b3AabbCL smallAabb = smallAabbs[smallAabbIndex];
- for(int i = 0; i < numLargeAabbRigids; ++i)
- {
- b3AabbCL largeAabb = largeAabbs[i];
- if( TestAabbAgainstAabb2(&smallAabb, &largeAabb) )
- {
- int4 pair;
- pair.x = largeAabb.m_minIndices[3];
- pair.y = smallAabb.m_minIndices[3];
- pair.z = NEW_PAIR_MARKER;
- pair.w = NEW_PAIR_MARKER;
-
- int pairIndex = atomic_inc(out_numPairs);
- if(pairIndex < maxPairs) out_overlappingPairs[pairIndex] = pair;
- }
- }
-}
-__kernel void plbvhLargeAabbRayTest(__global b3AabbCL* largeRigidAabbs, __global b3RayInfo* rays,
- __global int* out_numRayRigidPairs, __global int2* out_rayRigidPairs,
- int numLargeAabbRigids, int maxRayRigidPairs, int numRays)
-{
- int rayIndex = get_global_id(0);
- if(rayIndex >= numRays) return;
-
- b3Vector3 rayFrom = rays[rayIndex].m_from;
- b3Vector3 rayTo = rays[rayIndex].m_to;
- b3Vector3 rayNormalizedDirection = b3Vector3_normalize(rayTo - rayFrom);
- b3Scalar rayLength = b3Sqrt( b3Vector3_length2(rayTo - rayFrom) );
-
- for(int i = 0; i < numLargeAabbRigids; ++i)
- {
- b3AabbCL rigidAabb = largeRigidAabbs[i];
- if( rayIntersectsAabb(rayFrom, rayLength, rayNormalizedDirection, rigidAabb) )
- {
- int2 rayRigidPair;
- rayRigidPair.x = rayIndex;
- rayRigidPair.y = rigidAabb.m_minIndices[3];
-
- int pairIndex = atomic_inc(out_numRayRigidPairs);
- if(pairIndex < maxRayRigidPairs) out_rayRigidPairs[pairIndex] = rayRigidPair;
- }
- }
-}
-
-
-//Set so that it is always greater than the actual common prefixes, and never selected as a parent node.
-//If there are no duplicates, then the highest common prefix is 32 or 64, depending on the number of bits used for the z-curve.
-//Duplicate common prefixes increase the highest common prefix at most by the number of bits used to index the leaf node.
-//Since 32 bit ints are used to index leaf nodes, the max prefix is 64(32 + 32 bit z-curve) or 96(32 + 64 bit z-curve).
-#define B3_PLBVH_INVALID_COMMON_PREFIX 128
-
-#define B3_PLBVH_ROOT_NODE_MARKER -1
-
-#define b3Int64 long
-
-int computeCommonPrefixLength(b3Int64 i, b3Int64 j) { return (int)clz(i ^ j); }
-b3Int64 computeCommonPrefix(b3Int64 i, b3Int64 j)
-{
- //This function only needs to return (i & j) in order for the algorithm to work,
- //but it may help with debugging to mask out the lower bits.
-
- b3Int64 commonPrefixLength = (b3Int64)computeCommonPrefixLength(i, j);
-
- b3Int64 sharedBits = i & j;
- b3Int64 bitmask = ((b3Int64)(~0)) << (64 - commonPrefixLength); //Set all bits after the common prefix to 0
-
- return sharedBits & bitmask;
-}
-
-//Same as computeCommonPrefixLength(), but allows for prefixes with different lengths
-int getSharedPrefixLength(b3Int64 prefixA, int prefixLengthA, b3Int64 prefixB, int prefixLengthB)
-{
- return b3Min( computeCommonPrefixLength(prefixA, prefixB), b3Min(prefixLengthA, prefixLengthB) );
-}
-
-__kernel void computeAdjacentPairCommonPrefix(__global SortDataCL* mortonCodesAndAabbIndices,
- __global b3Int64* out_commonPrefixes,
- __global int* out_commonPrefixLengths,
- int numInternalNodes)
-{
- int internalNodeIndex = get_global_id(0);
- if (internalNodeIndex >= numInternalNodes) return;
-
- //Here, (internalNodeIndex + 1) is never out of bounds since it is a leaf node index,
- //and the number of internal nodes is always numLeafNodes - 1
- int leftLeafIndex = internalNodeIndex;
- int rightLeafIndex = internalNodeIndex + 1;
-
- int leftLeafMortonCode = mortonCodesAndAabbIndices[leftLeafIndex].m_key;
- int rightLeafMortonCode = mortonCodesAndAabbIndices[rightLeafIndex].m_key;
-
- //Binary radix tree construction algorithm does not work if there are duplicate morton codes.
- //Append the index of each leaf node to each morton code so that there are no duplicates.
- //The algorithm also requires that the morton codes are sorted in ascending order; this requirement
- //is also satisfied with this method, as (leftLeafIndex < rightLeafIndex) is always true.
- //
- //upsample(a, b) == ( ((b3Int64)a) << 32) | b
- b3Int64 nonduplicateLeftMortonCode = upsample(leftLeafMortonCode, leftLeafIndex);
- b3Int64 nonduplicateRightMortonCode = upsample(rightLeafMortonCode, rightLeafIndex);
-
- out_commonPrefixes[internalNodeIndex] = computeCommonPrefix(nonduplicateLeftMortonCode, nonduplicateRightMortonCode);
- out_commonPrefixLengths[internalNodeIndex] = computeCommonPrefixLength(nonduplicateLeftMortonCode, nonduplicateRightMortonCode);
-}
-
-
-__kernel void buildBinaryRadixTreeLeafNodes(__global int* commonPrefixLengths, __global int* out_leafNodeParentNodes,
- __global int2* out_childNodes, int numLeafNodes)
-{
- int leafNodeIndex = get_global_id(0);
- if (leafNodeIndex >= numLeafNodes) return;
-
- int numInternalNodes = numLeafNodes - 1;
-
- int leftSplitIndex = leafNodeIndex - 1;
- int rightSplitIndex = leafNodeIndex;
-
- int leftCommonPrefix = (leftSplitIndex >= 0) ? commonPrefixLengths[leftSplitIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;
- int rightCommonPrefix = (rightSplitIndex < numInternalNodes) ? commonPrefixLengths[rightSplitIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;
-
- //Parent node is the highest adjacent common prefix that is lower than the node's common prefix
- //Leaf nodes are considered as having the highest common prefix
- int isLeftHigherCommonPrefix = (leftCommonPrefix > rightCommonPrefix);
-
- //Handle cases for the edge nodes; the first and last node
- //For leaf nodes, leftCommonPrefix and rightCommonPrefix should never both be B3_PLBVH_INVALID_COMMON_PREFIX
- if(leftCommonPrefix == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherCommonPrefix = false;
- if(rightCommonPrefix == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherCommonPrefix = true;
-
- int parentNodeIndex = (isLeftHigherCommonPrefix) ? leftSplitIndex : rightSplitIndex;
- out_leafNodeParentNodes[leafNodeIndex] = parentNodeIndex;
-
- int isRightChild = (isLeftHigherCommonPrefix); //If the left node is the parent, then this node is its right child and vice versa
-
- //out_childNodesAsInt[0] == int2.x == left child
- //out_childNodesAsInt[1] == int2.y == right child
- int isLeaf = 1;
- __global int* out_childNodesAsInt = (__global int*)(&out_childNodes[parentNodeIndex]);
- out_childNodesAsInt[isRightChild] = getIndexWithInternalNodeMarkerSet(isLeaf, leafNodeIndex);
-}
-
-__kernel void buildBinaryRadixTreeInternalNodes(__global b3Int64* commonPrefixes, __global int* commonPrefixLengths,
- __global int2* out_childNodes,
- __global int* out_internalNodeParentNodes, __global int* out_rootNodeIndex,
- int numInternalNodes)
-{
- int internalNodeIndex = get_group_id(0) * get_local_size(0) + get_local_id(0);
- if(internalNodeIndex >= numInternalNodes) return;
-
- b3Int64 nodePrefix = commonPrefixes[internalNodeIndex];
- int nodePrefixLength = commonPrefixLengths[internalNodeIndex];
-
-//#define USE_LINEAR_SEARCH
-#ifdef USE_LINEAR_SEARCH
- int leftIndex = -1;
- int rightIndex = -1;
-
- //Find nearest element to left with a lower common prefix
- for(int i = internalNodeIndex - 1; i >= 0; --i)
- {
- int nodeLeftSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, commonPrefixes[i], commonPrefixLengths[i]);
- if(nodeLeftSharedPrefixLength < nodePrefixLength)
- {
- leftIndex = i;
- break;
- }
- }
-
- //Find nearest element to right with a lower common prefix
- for(int i = internalNodeIndex + 1; i < numInternalNodes; ++i)
- {
- int nodeRightSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, commonPrefixes[i], commonPrefixLengths[i]);
- if(nodeRightSharedPrefixLength < nodePrefixLength)
- {
- rightIndex = i;
- break;
- }
- }
-
-#else //Use binary search
-
- //Find nearest element to left with a lower common prefix
- int leftIndex = -1;
- {
- int lower = 0;
- int upper = internalNodeIndex - 1;
-
- while(lower <= upper)
- {
- int mid = (lower + upper) / 2;
- b3Int64 midPrefix = commonPrefixes[mid];
- int midPrefixLength = commonPrefixLengths[mid];
-
- int nodeMidSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, midPrefix, midPrefixLength);
- if(nodeMidSharedPrefixLength < nodePrefixLength)
- {
- int right = mid + 1;
- if(right < internalNodeIndex)
- {
- b3Int64 rightPrefix = commonPrefixes[right];
- int rightPrefixLength = commonPrefixLengths[right];
-
- int nodeRightSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, rightPrefix, rightPrefixLength);
- if(nodeRightSharedPrefixLength < nodePrefixLength)
- {
- lower = right;
- leftIndex = right;
- }
- else
- {
- leftIndex = mid;
- break;
- }
- }
- else
- {
- leftIndex = mid;
- break;
- }
- }
- else upper = mid - 1;
- }
- }
-
- //Find nearest element to right with a lower common prefix
- int rightIndex = -1;
- {
- int lower = internalNodeIndex + 1;
- int upper = numInternalNodes - 1;
-
- while(lower <= upper)
- {
- int mid = (lower + upper) / 2;
- b3Int64 midPrefix = commonPrefixes[mid];
- int midPrefixLength = commonPrefixLengths[mid];
-
- int nodeMidSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, midPrefix, midPrefixLength);
- if(nodeMidSharedPrefixLength < nodePrefixLength)
- {
- int left = mid - 1;
- if(left > internalNodeIndex)
- {
- b3Int64 leftPrefix = commonPrefixes[left];
- int leftPrefixLength = commonPrefixLengths[left];
-
- int nodeLeftSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, leftPrefix, leftPrefixLength);
- if(nodeLeftSharedPrefixLength < nodePrefixLength)
- {
- upper = left;
- rightIndex = left;
- }
- else
- {
- rightIndex = mid;
- break;
- }
- }
- else
- {
- rightIndex = mid;
- break;
- }
- }
- else lower = mid + 1;
- }
- }
-#endif
-
- //Select parent
- {
- int leftPrefixLength = (leftIndex != -1) ? commonPrefixLengths[leftIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;
- int rightPrefixLength = (rightIndex != -1) ? commonPrefixLengths[rightIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;
-
- int isLeftHigherPrefixLength = (leftPrefixLength > rightPrefixLength);
-
- if(leftPrefixLength == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherPrefixLength = false;
- else if(rightPrefixLength == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherPrefixLength = true;
-
- int parentNodeIndex = (isLeftHigherPrefixLength) ? leftIndex : rightIndex;
-
- int isRootNode = (leftIndex == -1 && rightIndex == -1);
- out_internalNodeParentNodes[internalNodeIndex] = (!isRootNode) ? parentNodeIndex : B3_PLBVH_ROOT_NODE_MARKER;
-
- int isLeaf = 0;
- if(!isRootNode)
- {
- int isRightChild = (isLeftHigherPrefixLength); //If the left node is the parent, then this node is its right child and vice versa
-
- //out_childNodesAsInt[0] == int2.x == left child
- //out_childNodesAsInt[1] == int2.y == right child
- __global int* out_childNodesAsInt = (__global int*)(&out_childNodes[parentNodeIndex]);
- out_childNodesAsInt[isRightChild] = getIndexWithInternalNodeMarkerSet(isLeaf, internalNodeIndex);
- }
- else *out_rootNodeIndex = getIndexWithInternalNodeMarkerSet(isLeaf, internalNodeIndex);
- }
-}
-
-__kernel void findDistanceFromRoot(__global int* rootNodeIndex, __global int* internalNodeParentNodes,
- __global int* out_maxDistanceFromRoot, __global int* out_distanceFromRoot, int numInternalNodes)
-{
- if( get_global_id(0) == 0 ) atomic_xchg(out_maxDistanceFromRoot, 0);
-
- int internalNodeIndex = get_global_id(0);
- if(internalNodeIndex >= numInternalNodes) return;
-
- //
- int distanceFromRoot = 0;
- {
- int parentIndex = internalNodeParentNodes[internalNodeIndex];
- while(parentIndex != B3_PLBVH_ROOT_NODE_MARKER)
- {
- parentIndex = internalNodeParentNodes[parentIndex];
- ++distanceFromRoot;
- }
- }
- out_distanceFromRoot[internalNodeIndex] = distanceFromRoot;
-
- //
- __local int localMaxDistanceFromRoot;
- if( get_local_id(0) == 0 ) localMaxDistanceFromRoot = 0;
- barrier(CLK_LOCAL_MEM_FENCE);
-
- atomic_max(&localMaxDistanceFromRoot, distanceFromRoot);
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if( get_local_id(0) == 0 ) atomic_max(out_maxDistanceFromRoot, localMaxDistanceFromRoot);
-}
-
-__kernel void buildBinaryRadixTreeAabbsRecursive(__global int* distanceFromRoot, __global SortDataCL* mortonCodesAndAabbIndices,
- __global int2* childNodes,
- __global b3AabbCL* leafNodeAabbs, __global b3AabbCL* internalNodeAabbs,
- int maxDistanceFromRoot, int processedDistance, int numInternalNodes)
-{
- int internalNodeIndex = get_global_id(0);
- if(internalNodeIndex >= numInternalNodes) return;
-
- int distance = distanceFromRoot[internalNodeIndex];
-
- if(distance == processedDistance)
- {
- int leftChildIndex = childNodes[internalNodeIndex].x;
- int rightChildIndex = childNodes[internalNodeIndex].y;
-
- int isLeftChildLeaf = isLeafNode(leftChildIndex);
- int isRightChildLeaf = isLeafNode(rightChildIndex);
-
- leftChildIndex = getIndexWithInternalNodeMarkerRemoved(leftChildIndex);
- rightChildIndex = getIndexWithInternalNodeMarkerRemoved(rightChildIndex);
-
- //leftRigidIndex/rightRigidIndex is not used if internal node
- int leftRigidIndex = (isLeftChildLeaf) ? mortonCodesAndAabbIndices[leftChildIndex].m_value : -1;
- int rightRigidIndex = (isRightChildLeaf) ? mortonCodesAndAabbIndices[rightChildIndex].m_value : -1;
-
- b3AabbCL leftChildAabb = (isLeftChildLeaf) ? leafNodeAabbs[leftRigidIndex] : internalNodeAabbs[leftChildIndex];
- b3AabbCL rightChildAabb = (isRightChildLeaf) ? leafNodeAabbs[rightRigidIndex] : internalNodeAabbs[rightChildIndex];
-
- b3AabbCL mergedAabb;
- mergedAabb.m_min = b3Min(leftChildAabb.m_min, rightChildAabb.m_min);
- mergedAabb.m_max = b3Max(leftChildAabb.m_max, rightChildAabb.m_max);
- internalNodeAabbs[internalNodeIndex] = mergedAabb;
- }
-}
-
-__kernel void findLeafIndexRanges(__global int2* internalNodeChildNodes, __global int2* out_leafIndexRanges, int numInternalNodes)
-{
- int internalNodeIndex = get_global_id(0);
- if(internalNodeIndex >= numInternalNodes) return;
-
- int numLeafNodes = numInternalNodes + 1;
-
- int2 childNodes = internalNodeChildNodes[internalNodeIndex];
-
- int2 leafIndexRange; //x == min leaf index, y == max leaf index
-
- //Find lowest leaf index covered by this internal node
- {
- int lowestIndex = childNodes.x; //childNodes.x == Left child
- while( !isLeafNode(lowestIndex) ) lowestIndex = internalNodeChildNodes[ getIndexWithInternalNodeMarkerRemoved(lowestIndex) ].x;
- leafIndexRange.x = lowestIndex;
- }
-
- //Find highest leaf index covered by this internal node
- {
- int highestIndex = childNodes.y; //childNodes.y == Right child
- while( !isLeafNode(highestIndex) ) highestIndex = internalNodeChildNodes[ getIndexWithInternalNodeMarkerRemoved(highestIndex) ].y;
- leafIndexRange.y = highestIndex;
- }
-
- //
- out_leafIndexRanges[internalNodeIndex] = leafIndexRange;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvhKernels.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvhKernels.h
deleted file mode 100644
index c02877dde9..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/parallelLinearBvhKernels.h
+++ /dev/null
@@ -1,728 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* parallelLinearBvhCL =
- "/*\n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose,\n"
- "including commercial applications, and to alter it and redistribute it freely,\n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Initial Author Jackson Lee, 2014\n"
- "typedef float b3Scalar;\n"
- "typedef float4 b3Vector3;\n"
- "#define b3Max max\n"
- "#define b3Min min\n"
- "#define b3Sqrt sqrt\n"
- "typedef struct\n"
- "{\n"
- " unsigned int m_key;\n"
- " unsigned int m_value;\n"
- "} SortDataCL;\n"
- "typedef struct \n"
- "{\n"
- " union\n"
- " {\n"
- " float4 m_min;\n"
- " float m_minElems[4];\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float4 m_max;\n"
- " float m_maxElems[4];\n"
- " int m_maxIndices[4];\n"
- " };\n"
- "} b3AabbCL;\n"
- "unsigned int interleaveBits(unsigned int x)\n"
- "{\n"
- " //........ ........ ......12 3456789A //x\n"
- " //....1..2 ..3..4.. 5..6..7. .8..9..A //x after interleaving bits\n"
- " \n"
- " //......12 3456789A ......12 3456789A //x ^ (x << 16)\n"
- " //11111111 ........ ........ 11111111 //0x FF 00 00 FF\n"
- " //......12 ........ ........ 3456789A //x = (x ^ (x << 16)) & 0xFF0000FF;\n"
- " \n"
- " //......12 ........ 3456789A 3456789A //x ^ (x << 8)\n"
- " //......11 ........ 1111.... ....1111 //0x 03 00 F0 0F\n"
- " //......12 ........ 3456.... ....789A //x = (x ^ (x << 8)) & 0x0300F00F;\n"
- " \n"
- " //..12..12 ....3456 3456.... 789A789A //x ^ (x << 4)\n"
- " //......11 ....11.. ..11.... 11....11 //0x 03 0C 30 C3\n"
- " //......12 ....34.. ..56.... 78....9A //x = (x ^ (x << 4)) & 0x030C30C3;\n"
- " \n"
- " //....1212 ..3434.. 5656..78 78..9A9A //x ^ (x << 2)\n"
- " //....1..1 ..1..1.. 1..1..1. .1..1..1 //0x 09 24 92 49\n"
- " //....1..2 ..3..4.. 5..6..7. .8..9..A //x = (x ^ (x << 2)) & 0x09249249;\n"
- " \n"
- " //........ ........ ......11 11111111 //0x000003FF\n"
- " x &= 0x000003FF; //Clear all bits above bit 10\n"
- " \n"
- " x = (x ^ (x << 16)) & 0xFF0000FF;\n"
- " x = (x ^ (x << 8)) & 0x0300F00F;\n"
- " x = (x ^ (x << 4)) & 0x030C30C3;\n"
- " x = (x ^ (x << 2)) & 0x09249249;\n"
- " \n"
- " return x;\n"
- "}\n"
- "unsigned int getMortonCode(unsigned int x, unsigned int y, unsigned int z)\n"
- "{\n"
- " return interleaveBits(x) << 0 | interleaveBits(y) << 1 | interleaveBits(z) << 2;\n"
- "}\n"
- "__kernel void separateAabbs(__global b3AabbCL* unseparatedAabbs, __global int* aabbIndices, __global b3AabbCL* out_aabbs, int numAabbsToSeparate)\n"
- "{\n"
- " int separatedAabbIndex = get_global_id(0);\n"
- " if(separatedAabbIndex >= numAabbsToSeparate) return;\n"
- " int unseparatedAabbIndex = aabbIndices[separatedAabbIndex];\n"
- " out_aabbs[separatedAabbIndex] = unseparatedAabbs[unseparatedAabbIndex];\n"
- "}\n"
- "//Should replace with an optimized parallel reduction\n"
- "__kernel void findAllNodesMergedAabb(__global b3AabbCL* out_mergedAabb, int numAabbsNeedingMerge)\n"
- "{\n"
- " //Each time this kernel is added to the command queue, \n"
- " //the number of AABBs needing to be merged is halved\n"
- " //\n"
- " //Example with 159 AABBs:\n"
- " // numRemainingAabbs == 159 / 2 + 159 % 2 == 80\n"
- " // numMergedAabbs == 159 - 80 == 79\n"
- " //So, indices [0, 78] are merged with [0 + 80, 78 + 80]\n"
- " \n"
- " int numRemainingAabbs = numAabbsNeedingMerge / 2 + numAabbsNeedingMerge % 2;\n"
- " int numMergedAabbs = numAabbsNeedingMerge - numRemainingAabbs;\n"
- " \n"
- " int aabbIndex = get_global_id(0);\n"
- " if(aabbIndex >= numMergedAabbs) return;\n"
- " \n"
- " int otherAabbIndex = aabbIndex + numRemainingAabbs;\n"
- " \n"
- " b3AabbCL aabb = out_mergedAabb[aabbIndex];\n"
- " b3AabbCL otherAabb = out_mergedAabb[otherAabbIndex];\n"
- " \n"
- " b3AabbCL mergedAabb;\n"
- " mergedAabb.m_min = b3Min(aabb.m_min, otherAabb.m_min);\n"
- " mergedAabb.m_max = b3Max(aabb.m_max, otherAabb.m_max);\n"
- " out_mergedAabb[aabbIndex] = mergedAabb;\n"
- "}\n"
- "__kernel void assignMortonCodesAndAabbIndicies(__global b3AabbCL* worldSpaceAabbs, __global b3AabbCL* mergedAabbOfAllNodes, \n"
- " __global SortDataCL* out_mortonCodesAndAabbIndices, int numAabbs)\n"
- "{\n"
- " int leafNodeIndex = get_global_id(0); //Leaf node index == AABB index\n"
- " if(leafNodeIndex >= numAabbs) return;\n"
- " \n"
- " b3AabbCL mergedAabb = mergedAabbOfAllNodes[0];\n"
- " b3Vector3 gridCenter = (mergedAabb.m_min + mergedAabb.m_max) * 0.5f;\n"
- " b3Vector3 gridCellSize = (mergedAabb.m_max - mergedAabb.m_min) / (float)1024;\n"
- " \n"
- " b3AabbCL aabb = worldSpaceAabbs[leafNodeIndex];\n"
- " b3Vector3 aabbCenter = (aabb.m_min + aabb.m_max) * 0.5f;\n"
- " b3Vector3 aabbCenterRelativeToGrid = aabbCenter - gridCenter;\n"
- " \n"
- " //Quantize into integer coordinates\n"
- " //floor() is needed to prevent the center cell, at (0,0,0) from being twice the size\n"
- " b3Vector3 gridPosition = aabbCenterRelativeToGrid / gridCellSize;\n"
- " \n"
- " int4 discretePosition;\n"
- " discretePosition.x = (int)( (gridPosition.x >= 0.0f) ? gridPosition.x : floor(gridPosition.x) );\n"
- " discretePosition.y = (int)( (gridPosition.y >= 0.0f) ? gridPosition.y : floor(gridPosition.y) );\n"
- " discretePosition.z = (int)( (gridPosition.z >= 0.0f) ? gridPosition.z : floor(gridPosition.z) );\n"
- " \n"
- " //Clamp coordinates into [-512, 511], then convert range from [-512, 511] to [0, 1023]\n"
- " discretePosition = b3Max( -512, b3Min(discretePosition, 511) );\n"
- " discretePosition += 512;\n"
- " \n"
- " //Interleave bits(assign a morton code, also known as a z-curve)\n"
- " unsigned int mortonCode = getMortonCode(discretePosition.x, discretePosition.y, discretePosition.z);\n"
- " \n"
- " //\n"
- " SortDataCL mortonCodeIndexPair;\n"
- " mortonCodeIndexPair.m_key = mortonCode;\n"
- " mortonCodeIndexPair.m_value = leafNodeIndex;\n"
- " \n"
- " out_mortonCodesAndAabbIndices[leafNodeIndex] = mortonCodeIndexPair;\n"
- "}\n"
- "#define B3_PLVBH_TRAVERSE_MAX_STACK_SIZE 128\n"
- "//The most significant bit(0x80000000) of a int32 is used to distinguish between leaf and internal nodes.\n"
- "//If it is set, then the index is for an internal node; otherwise, it is a leaf node. \n"
- "//In both cases, the bit should be cleared to access the actual node index.\n"
- "int isLeafNode(int index) { return (index >> 31 == 0); }\n"
- "int getIndexWithInternalNodeMarkerRemoved(int index) { return index & (~0x80000000); }\n"
- "int getIndexWithInternalNodeMarkerSet(int isLeaf, int index) { return (isLeaf) ? index : (index | 0x80000000); }\n"
- "//From sap.cl\n"
- "#define NEW_PAIR_MARKER -1\n"
- "bool TestAabbAgainstAabb2(const b3AabbCL* aabb1, const b3AabbCL* aabb2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;\n"
- " overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;\n"
- " overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "//From sap.cl\n"
- "__kernel void plbvhCalculateOverlappingPairs(__global b3AabbCL* rigidAabbs, \n"
- " __global int* rootNodeIndex, \n"
- " __global int2* internalNodeChildIndices, \n"
- " __global b3AabbCL* internalNodeAabbs,\n"
- " __global int2* internalNodeLeafIndexRanges,\n"
- " \n"
- " __global SortDataCL* mortonCodesAndAabbIndices,\n"
- " __global int* out_numPairs, __global int4* out_overlappingPairs, \n"
- " int maxPairs, int numQueryAabbs)\n"
- "{\n"
- " //Using get_group_id()/get_local_id() is Faster than get_global_id(0) since\n"
- " //mortonCodesAndAabbIndices[] contains rigid body indices sorted along the z-curve (more spatially coherent)\n"
- " int queryBvhNodeIndex = get_group_id(0) * get_local_size(0) + get_local_id(0);\n"
- " if(queryBvhNodeIndex >= numQueryAabbs) return;\n"
- " \n"
- " int queryRigidIndex = mortonCodesAndAabbIndices[queryBvhNodeIndex].m_value;\n"
- " b3AabbCL queryAabb = rigidAabbs[queryRigidIndex];\n"
- " \n"
- " int stack[B3_PLVBH_TRAVERSE_MAX_STACK_SIZE];\n"
- " \n"
- " int stackSize = 1;\n"
- " stack[0] = *rootNodeIndex;\n"
- " \n"
- " while(stackSize)\n"
- " {\n"
- " int internalOrLeafNodeIndex = stack[ stackSize - 1 ];\n"
- " --stackSize;\n"
- " \n"
- " int isLeaf = isLeafNode(internalOrLeafNodeIndex); //Internal node if false\n"
- " int bvhNodeIndex = getIndexWithInternalNodeMarkerRemoved(internalOrLeafNodeIndex);\n"
- " \n"
- " //Optimization - if the BVH is structured as a binary radix tree, then\n"
- " //each internal node corresponds to a contiguous range of leaf nodes(internalNodeLeafIndexRanges[]).\n"
- " //This can be used to avoid testing each AABB-AABB pair twice, including preventing each node from colliding with itself.\n"
- " {\n"
- " int highestLeafIndex = (isLeaf) ? bvhNodeIndex : internalNodeLeafIndexRanges[bvhNodeIndex].y;\n"
- " if(highestLeafIndex <= queryBvhNodeIndex) continue;\n"
- " }\n"
- " \n"
- " //bvhRigidIndex is not used if internal node\n"
- " int bvhRigidIndex = (isLeaf) ? mortonCodesAndAabbIndices[bvhNodeIndex].m_value : -1;\n"
- " \n"
- " b3AabbCL bvhNodeAabb = (isLeaf) ? rigidAabbs[bvhRigidIndex] : internalNodeAabbs[bvhNodeIndex];\n"
- " if( TestAabbAgainstAabb2(&queryAabb, &bvhNodeAabb) )\n"
- " {\n"
- " if(isLeaf)\n"
- " {\n"
- " int4 pair;\n"
- " pair.x = rigidAabbs[queryRigidIndex].m_minIndices[3];\n"
- " pair.y = rigidAabbs[bvhRigidIndex].m_minIndices[3];\n"
- " pair.z = NEW_PAIR_MARKER;\n"
- " pair.w = NEW_PAIR_MARKER;\n"
- " \n"
- " int pairIndex = atomic_inc(out_numPairs);\n"
- " if(pairIndex < maxPairs) out_overlappingPairs[pairIndex] = pair;\n"
- " }\n"
- " \n"
- " if(!isLeaf) //Internal node\n"
- " {\n"
- " if(stackSize + 2 > B3_PLVBH_TRAVERSE_MAX_STACK_SIZE)\n"
- " {\n"
- " //Error\n"
- " }\n"
- " else\n"
- " {\n"
- " stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].x;\n"
- " stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].y;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " }\n"
- "}\n"
- "//From rayCastKernels.cl\n"
- "typedef struct\n"
- "{\n"
- " float4 m_from;\n"
- " float4 m_to;\n"
- "} b3RayInfo;\n"
- "//From rayCastKernels.cl\n"
- "b3Vector3 b3Vector3_normalize(b3Vector3 v)\n"
- "{\n"
- " b3Vector3 normal = (b3Vector3){v.x, v.y, v.z, 0.f};\n"
- " return normalize(normal); //OpenCL normalize == vector4 normalize\n"
- "}\n"
- "b3Scalar b3Vector3_length2(b3Vector3 v) { return v.x*v.x + v.y*v.y + v.z*v.z; }\n"
- "b3Scalar b3Vector3_dot(b3Vector3 a, b3Vector3 b) { return a.x*b.x + a.y*b.y + a.z*b.z; }\n"
- "int rayIntersectsAabb(b3Vector3 rayOrigin, b3Scalar rayLength, b3Vector3 rayNormalizedDirection, b3AabbCL aabb)\n"
- "{\n"
- " //AABB is considered as 3 pairs of 2 planes( {x_min, x_max}, {y_min, y_max}, {z_min, z_max} ).\n"
- " //t_min is the point of intersection with the closer plane, t_max is the point of intersection with the farther plane.\n"
- " //\n"
- " //if (rayNormalizedDirection.x < 0.0f), then max.x will be the near plane \n"
- " //and min.x will be the far plane; otherwise, it is reversed.\n"
- " //\n"
- " //In order for there to be a collision, the t_min and t_max of each pair must overlap.\n"
- " //This can be tested for by selecting the highest t_min and lowest t_max and comparing them.\n"
- " \n"
- " int4 isNegative = isless( rayNormalizedDirection, ((b3Vector3){0.0f, 0.0f, 0.0f, 0.0f}) ); //isless(x,y) returns (x < y)\n"
- " \n"
- " //When using vector types, the select() function checks the most signficant bit, \n"
- " //but isless() sets the least significant bit.\n"
- " isNegative <<= 31;\n"
- " //select(b, a, condition) == condition ? a : b\n"
- " //When using select() with vector types, (condition[i]) is true if its most significant bit is 1\n"
- " b3Vector3 t_min = ( select(aabb.m_min, aabb.m_max, isNegative) - rayOrigin ) / rayNormalizedDirection;\n"
- " b3Vector3 t_max = ( select(aabb.m_max, aabb.m_min, isNegative) - rayOrigin ) / rayNormalizedDirection;\n"
- " \n"
- " b3Scalar t_min_final = 0.0f;\n"
- " b3Scalar t_max_final = rayLength;\n"
- " \n"
- " //Must use fmin()/fmax(); if one of the parameters is NaN, then the parameter that is not NaN is returned. \n"
- " //Behavior of min()/max() with NaNs is undefined. (See OpenCL Specification 1.2 [6.12.2] and [6.12.4])\n"
- " //Since the innermost fmin()/fmax() is always not NaN, this should never return NaN.\n"
- " t_min_final = fmax( t_min.z, fmax(t_min.y, fmax(t_min.x, t_min_final)) );\n"
- " t_max_final = fmin( t_max.z, fmin(t_max.y, fmin(t_max.x, t_max_final)) );\n"
- " \n"
- " return (t_min_final <= t_max_final);\n"
- "}\n"
- "__kernel void plbvhRayTraverse(__global b3AabbCL* rigidAabbs,\n"
- " __global int* rootNodeIndex, \n"
- " __global int2* internalNodeChildIndices, \n"
- " __global b3AabbCL* internalNodeAabbs,\n"
- " __global int2* internalNodeLeafIndexRanges,\n"
- " __global SortDataCL* mortonCodesAndAabbIndices,\n"
- " \n"
- " __global b3RayInfo* rays,\n"
- " \n"
- " __global int* out_numRayRigidPairs, \n"
- " __global int2* out_rayRigidPairs,\n"
- " int maxRayRigidPairs, int numRays)\n"
- "{\n"
- " int rayIndex = get_global_id(0);\n"
- " if(rayIndex >= numRays) return;\n"
- " \n"
- " //\n"
- " b3Vector3 rayFrom = rays[rayIndex].m_from;\n"
- " b3Vector3 rayTo = rays[rayIndex].m_to;\n"
- " b3Vector3 rayNormalizedDirection = b3Vector3_normalize(rayTo - rayFrom);\n"
- " b3Scalar rayLength = b3Sqrt( b3Vector3_length2(rayTo - rayFrom) );\n"
- " \n"
- " //\n"
- " int stack[B3_PLVBH_TRAVERSE_MAX_STACK_SIZE];\n"
- " \n"
- " int stackSize = 1;\n"
- " stack[0] = *rootNodeIndex;\n"
- " \n"
- " while(stackSize)\n"
- " {\n"
- " int internalOrLeafNodeIndex = stack[ stackSize - 1 ];\n"
- " --stackSize;\n"
- " \n"
- " int isLeaf = isLeafNode(internalOrLeafNodeIndex); //Internal node if false\n"
- " int bvhNodeIndex = getIndexWithInternalNodeMarkerRemoved(internalOrLeafNodeIndex);\n"
- " \n"
- " //bvhRigidIndex is not used if internal node\n"
- " int bvhRigidIndex = (isLeaf) ? mortonCodesAndAabbIndices[bvhNodeIndex].m_value : -1;\n"
- " \n"
- " b3AabbCL bvhNodeAabb = (isLeaf) ? rigidAabbs[bvhRigidIndex] : internalNodeAabbs[bvhNodeIndex];\n"
- " if( rayIntersectsAabb(rayFrom, rayLength, rayNormalizedDirection, bvhNodeAabb) )\n"
- " {\n"
- " if(isLeaf)\n"
- " {\n"
- " int2 rayRigidPair;\n"
- " rayRigidPair.x = rayIndex;\n"
- " rayRigidPair.y = rigidAabbs[bvhRigidIndex].m_minIndices[3];\n"
- " \n"
- " int pairIndex = atomic_inc(out_numRayRigidPairs);\n"
- " if(pairIndex < maxRayRigidPairs) out_rayRigidPairs[pairIndex] = rayRigidPair;\n"
- " }\n"
- " \n"
- " if(!isLeaf) //Internal node\n"
- " {\n"
- " if(stackSize + 2 > B3_PLVBH_TRAVERSE_MAX_STACK_SIZE)\n"
- " {\n"
- " //Error\n"
- " }\n"
- " else\n"
- " {\n"
- " stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].x;\n"
- " stack[ stackSize++ ] = internalNodeChildIndices[bvhNodeIndex].y;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void plbvhLargeAabbAabbTest(__global b3AabbCL* smallAabbs, __global b3AabbCL* largeAabbs, \n"
- " __global int* out_numPairs, __global int4* out_overlappingPairs, \n"
- " int maxPairs, int numLargeAabbRigids, int numSmallAabbRigids)\n"
- "{\n"
- " int smallAabbIndex = get_global_id(0);\n"
- " if(smallAabbIndex >= numSmallAabbRigids) return;\n"
- " \n"
- " b3AabbCL smallAabb = smallAabbs[smallAabbIndex];\n"
- " for(int i = 0; i < numLargeAabbRigids; ++i)\n"
- " {\n"
- " b3AabbCL largeAabb = largeAabbs[i];\n"
- " if( TestAabbAgainstAabb2(&smallAabb, &largeAabb) )\n"
- " {\n"
- " int4 pair;\n"
- " pair.x = largeAabb.m_minIndices[3];\n"
- " pair.y = smallAabb.m_minIndices[3];\n"
- " pair.z = NEW_PAIR_MARKER;\n"
- " pair.w = NEW_PAIR_MARKER;\n"
- " \n"
- " int pairIndex = atomic_inc(out_numPairs);\n"
- " if(pairIndex < maxPairs) out_overlappingPairs[pairIndex] = pair;\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void plbvhLargeAabbRayTest(__global b3AabbCL* largeRigidAabbs, __global b3RayInfo* rays,\n"
- " __global int* out_numRayRigidPairs, __global int2* out_rayRigidPairs,\n"
- " int numLargeAabbRigids, int maxRayRigidPairs, int numRays)\n"
- "{\n"
- " int rayIndex = get_global_id(0);\n"
- " if(rayIndex >= numRays) return;\n"
- " \n"
- " b3Vector3 rayFrom = rays[rayIndex].m_from;\n"
- " b3Vector3 rayTo = rays[rayIndex].m_to;\n"
- " b3Vector3 rayNormalizedDirection = b3Vector3_normalize(rayTo - rayFrom);\n"
- " b3Scalar rayLength = b3Sqrt( b3Vector3_length2(rayTo - rayFrom) );\n"
- " \n"
- " for(int i = 0; i < numLargeAabbRigids; ++i)\n"
- " {\n"
- " b3AabbCL rigidAabb = largeRigidAabbs[i];\n"
- " if( rayIntersectsAabb(rayFrom, rayLength, rayNormalizedDirection, rigidAabb) )\n"
- " {\n"
- " int2 rayRigidPair;\n"
- " rayRigidPair.x = rayIndex;\n"
- " rayRigidPair.y = rigidAabb.m_minIndices[3];\n"
- " \n"
- " int pairIndex = atomic_inc(out_numRayRigidPairs);\n"
- " if(pairIndex < maxRayRigidPairs) out_rayRigidPairs[pairIndex] = rayRigidPair;\n"
- " }\n"
- " }\n"
- "}\n"
- "//Set so that it is always greater than the actual common prefixes, and never selected as a parent node.\n"
- "//If there are no duplicates, then the highest common prefix is 32 or 64, depending on the number of bits used for the z-curve.\n"
- "//Duplicate common prefixes increase the highest common prefix at most by the number of bits used to index the leaf node.\n"
- "//Since 32 bit ints are used to index leaf nodes, the max prefix is 64(32 + 32 bit z-curve) or 96(32 + 64 bit z-curve).\n"
- "#define B3_PLBVH_INVALID_COMMON_PREFIX 128\n"
- "#define B3_PLBVH_ROOT_NODE_MARKER -1\n"
- "#define b3Int64 long\n"
- "int computeCommonPrefixLength(b3Int64 i, b3Int64 j) { return (int)clz(i ^ j); }\n"
- "b3Int64 computeCommonPrefix(b3Int64 i, b3Int64 j) \n"
- "{\n"
- " //This function only needs to return (i & j) in order for the algorithm to work,\n"
- " //but it may help with debugging to mask out the lower bits.\n"
- " b3Int64 commonPrefixLength = (b3Int64)computeCommonPrefixLength(i, j);\n"
- " b3Int64 sharedBits = i & j;\n"
- " b3Int64 bitmask = ((b3Int64)(~0)) << (64 - commonPrefixLength); //Set all bits after the common prefix to 0\n"
- " \n"
- " return sharedBits & bitmask;\n"
- "}\n"
- "//Same as computeCommonPrefixLength(), but allows for prefixes with different lengths\n"
- "int getSharedPrefixLength(b3Int64 prefixA, int prefixLengthA, b3Int64 prefixB, int prefixLengthB)\n"
- "{\n"
- " return b3Min( computeCommonPrefixLength(prefixA, prefixB), b3Min(prefixLengthA, prefixLengthB) );\n"
- "}\n"
- "__kernel void computeAdjacentPairCommonPrefix(__global SortDataCL* mortonCodesAndAabbIndices,\n"
- " __global b3Int64* out_commonPrefixes,\n"
- " __global int* out_commonPrefixLengths,\n"
- " int numInternalNodes)\n"
- "{\n"
- " int internalNodeIndex = get_global_id(0);\n"
- " if (internalNodeIndex >= numInternalNodes) return;\n"
- " \n"
- " //Here, (internalNodeIndex + 1) is never out of bounds since it is a leaf node index,\n"
- " //and the number of internal nodes is always numLeafNodes - 1\n"
- " int leftLeafIndex = internalNodeIndex;\n"
- " int rightLeafIndex = internalNodeIndex + 1;\n"
- " \n"
- " int leftLeafMortonCode = mortonCodesAndAabbIndices[leftLeafIndex].m_key;\n"
- " int rightLeafMortonCode = mortonCodesAndAabbIndices[rightLeafIndex].m_key;\n"
- " \n"
- " //Binary radix tree construction algorithm does not work if there are duplicate morton codes.\n"
- " //Append the index of each leaf node to each morton code so that there are no duplicates.\n"
- " //The algorithm also requires that the morton codes are sorted in ascending order; this requirement\n"
- " //is also satisfied with this method, as (leftLeafIndex < rightLeafIndex) is always true.\n"
- " //\n"
- " //upsample(a, b) == ( ((b3Int64)a) << 32) | b\n"
- " b3Int64 nonduplicateLeftMortonCode = upsample(leftLeafMortonCode, leftLeafIndex);\n"
- " b3Int64 nonduplicateRightMortonCode = upsample(rightLeafMortonCode, rightLeafIndex);\n"
- " \n"
- " out_commonPrefixes[internalNodeIndex] = computeCommonPrefix(nonduplicateLeftMortonCode, nonduplicateRightMortonCode);\n"
- " out_commonPrefixLengths[internalNodeIndex] = computeCommonPrefixLength(nonduplicateLeftMortonCode, nonduplicateRightMortonCode);\n"
- "}\n"
- "__kernel void buildBinaryRadixTreeLeafNodes(__global int* commonPrefixLengths, __global int* out_leafNodeParentNodes,\n"
- " __global int2* out_childNodes, int numLeafNodes)\n"
- "{\n"
- " int leafNodeIndex = get_global_id(0);\n"
- " if (leafNodeIndex >= numLeafNodes) return;\n"
- " \n"
- " int numInternalNodes = numLeafNodes - 1;\n"
- " \n"
- " int leftSplitIndex = leafNodeIndex - 1;\n"
- " int rightSplitIndex = leafNodeIndex;\n"
- " \n"
- " int leftCommonPrefix = (leftSplitIndex >= 0) ? commonPrefixLengths[leftSplitIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;\n"
- " int rightCommonPrefix = (rightSplitIndex < numInternalNodes) ? commonPrefixLengths[rightSplitIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;\n"
- " \n"
- " //Parent node is the highest adjacent common prefix that is lower than the node's common prefix\n"
- " //Leaf nodes are considered as having the highest common prefix\n"
- " int isLeftHigherCommonPrefix = (leftCommonPrefix > rightCommonPrefix);\n"
- " \n"
- " //Handle cases for the edge nodes; the first and last node\n"
- " //For leaf nodes, leftCommonPrefix and rightCommonPrefix should never both be B3_PLBVH_INVALID_COMMON_PREFIX\n"
- " if(leftCommonPrefix == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherCommonPrefix = false;\n"
- " if(rightCommonPrefix == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherCommonPrefix = true;\n"
- " \n"
- " int parentNodeIndex = (isLeftHigherCommonPrefix) ? leftSplitIndex : rightSplitIndex;\n"
- " out_leafNodeParentNodes[leafNodeIndex] = parentNodeIndex;\n"
- " \n"
- " int isRightChild = (isLeftHigherCommonPrefix); //If the left node is the parent, then this node is its right child and vice versa\n"
- " \n"
- " //out_childNodesAsInt[0] == int2.x == left child\n"
- " //out_childNodesAsInt[1] == int2.y == right child\n"
- " int isLeaf = 1;\n"
- " __global int* out_childNodesAsInt = (__global int*)(&out_childNodes[parentNodeIndex]);\n"
- " out_childNodesAsInt[isRightChild] = getIndexWithInternalNodeMarkerSet(isLeaf, leafNodeIndex);\n"
- "}\n"
- "__kernel void buildBinaryRadixTreeInternalNodes(__global b3Int64* commonPrefixes, __global int* commonPrefixLengths,\n"
- " __global int2* out_childNodes,\n"
- " __global int* out_internalNodeParentNodes, __global int* out_rootNodeIndex,\n"
- " int numInternalNodes)\n"
- "{\n"
- " int internalNodeIndex = get_group_id(0) * get_local_size(0) + get_local_id(0);\n"
- " if(internalNodeIndex >= numInternalNodes) return;\n"
- " \n"
- " b3Int64 nodePrefix = commonPrefixes[internalNodeIndex];\n"
- " int nodePrefixLength = commonPrefixLengths[internalNodeIndex];\n"
- " \n"
- "//#define USE_LINEAR_SEARCH\n"
- "#ifdef USE_LINEAR_SEARCH\n"
- " int leftIndex = -1;\n"
- " int rightIndex = -1;\n"
- " \n"
- " //Find nearest element to left with a lower common prefix\n"
- " for(int i = internalNodeIndex - 1; i >= 0; --i)\n"
- " {\n"
- " int nodeLeftSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, commonPrefixes[i], commonPrefixLengths[i]);\n"
- " if(nodeLeftSharedPrefixLength < nodePrefixLength)\n"
- " {\n"
- " leftIndex = i;\n"
- " break;\n"
- " }\n"
- " }\n"
- " \n"
- " //Find nearest element to right with a lower common prefix\n"
- " for(int i = internalNodeIndex + 1; i < numInternalNodes; ++i)\n"
- " {\n"
- " int nodeRightSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, commonPrefixes[i], commonPrefixLengths[i]);\n"
- " if(nodeRightSharedPrefixLength < nodePrefixLength)\n"
- " {\n"
- " rightIndex = i;\n"
- " break;\n"
- " }\n"
- " }\n"
- " \n"
- "#else //Use binary search\n"
- " //Find nearest element to left with a lower common prefix\n"
- " int leftIndex = -1;\n"
- " {\n"
- " int lower = 0;\n"
- " int upper = internalNodeIndex - 1;\n"
- " \n"
- " while(lower <= upper)\n"
- " {\n"
- " int mid = (lower + upper) / 2;\n"
- " b3Int64 midPrefix = commonPrefixes[mid];\n"
- " int midPrefixLength = commonPrefixLengths[mid];\n"
- " \n"
- " int nodeMidSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, midPrefix, midPrefixLength);\n"
- " if(nodeMidSharedPrefixLength < nodePrefixLength) \n"
- " {\n"
- " int right = mid + 1;\n"
- " if(right < internalNodeIndex)\n"
- " {\n"
- " b3Int64 rightPrefix = commonPrefixes[right];\n"
- " int rightPrefixLength = commonPrefixLengths[right];\n"
- " \n"
- " int nodeRightSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, rightPrefix, rightPrefixLength);\n"
- " if(nodeRightSharedPrefixLength < nodePrefixLength) \n"
- " {\n"
- " lower = right;\n"
- " leftIndex = right;\n"
- " }\n"
- " else \n"
- " {\n"
- " leftIndex = mid;\n"
- " break;\n"
- " }\n"
- " }\n"
- " else \n"
- " {\n"
- " leftIndex = mid;\n"
- " break;\n"
- " }\n"
- " }\n"
- " else upper = mid - 1;\n"
- " }\n"
- " }\n"
- " \n"
- " //Find nearest element to right with a lower common prefix\n"
- " int rightIndex = -1;\n"
- " {\n"
- " int lower = internalNodeIndex + 1;\n"
- " int upper = numInternalNodes - 1;\n"
- " \n"
- " while(lower <= upper)\n"
- " {\n"
- " int mid = (lower + upper) / 2;\n"
- " b3Int64 midPrefix = commonPrefixes[mid];\n"
- " int midPrefixLength = commonPrefixLengths[mid];\n"
- " \n"
- " int nodeMidSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, midPrefix, midPrefixLength);\n"
- " if(nodeMidSharedPrefixLength < nodePrefixLength) \n"
- " {\n"
- " int left = mid - 1;\n"
- " if(left > internalNodeIndex)\n"
- " {\n"
- " b3Int64 leftPrefix = commonPrefixes[left];\n"
- " int leftPrefixLength = commonPrefixLengths[left];\n"
- " \n"
- " int nodeLeftSharedPrefixLength = getSharedPrefixLength(nodePrefix, nodePrefixLength, leftPrefix, leftPrefixLength);\n"
- " if(nodeLeftSharedPrefixLength < nodePrefixLength) \n"
- " {\n"
- " upper = left;\n"
- " rightIndex = left;\n"
- " }\n"
- " else \n"
- " {\n"
- " rightIndex = mid;\n"
- " break;\n"
- " }\n"
- " }\n"
- " else \n"
- " {\n"
- " rightIndex = mid;\n"
- " break;\n"
- " }\n"
- " }\n"
- " else lower = mid + 1;\n"
- " }\n"
- " }\n"
- "#endif\n"
- " \n"
- " //Select parent\n"
- " {\n"
- " int leftPrefixLength = (leftIndex != -1) ? commonPrefixLengths[leftIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;\n"
- " int rightPrefixLength = (rightIndex != -1) ? commonPrefixLengths[rightIndex] : B3_PLBVH_INVALID_COMMON_PREFIX;\n"
- " \n"
- " int isLeftHigherPrefixLength = (leftPrefixLength > rightPrefixLength);\n"
- " \n"
- " if(leftPrefixLength == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherPrefixLength = false;\n"
- " else if(rightPrefixLength == B3_PLBVH_INVALID_COMMON_PREFIX) isLeftHigherPrefixLength = true;\n"
- " \n"
- " int parentNodeIndex = (isLeftHigherPrefixLength) ? leftIndex : rightIndex;\n"
- " \n"
- " int isRootNode = (leftIndex == -1 && rightIndex == -1);\n"
- " out_internalNodeParentNodes[internalNodeIndex] = (!isRootNode) ? parentNodeIndex : B3_PLBVH_ROOT_NODE_MARKER;\n"
- " \n"
- " int isLeaf = 0;\n"
- " if(!isRootNode)\n"
- " {\n"
- " int isRightChild = (isLeftHigherPrefixLength); //If the left node is the parent, then this node is its right child and vice versa\n"
- " \n"
- " //out_childNodesAsInt[0] == int2.x == left child\n"
- " //out_childNodesAsInt[1] == int2.y == right child\n"
- " __global int* out_childNodesAsInt = (__global int*)(&out_childNodes[parentNodeIndex]);\n"
- " out_childNodesAsInt[isRightChild] = getIndexWithInternalNodeMarkerSet(isLeaf, internalNodeIndex);\n"
- " }\n"
- " else *out_rootNodeIndex = getIndexWithInternalNodeMarkerSet(isLeaf, internalNodeIndex);\n"
- " }\n"
- "}\n"
- "__kernel void findDistanceFromRoot(__global int* rootNodeIndex, __global int* internalNodeParentNodes,\n"
- " __global int* out_maxDistanceFromRoot, __global int* out_distanceFromRoot, int numInternalNodes)\n"
- "{\n"
- " if( get_global_id(0) == 0 ) atomic_xchg(out_maxDistanceFromRoot, 0);\n"
- " int internalNodeIndex = get_global_id(0);\n"
- " if(internalNodeIndex >= numInternalNodes) return;\n"
- " \n"
- " //\n"
- " int distanceFromRoot = 0;\n"
- " {\n"
- " int parentIndex = internalNodeParentNodes[internalNodeIndex];\n"
- " while(parentIndex != B3_PLBVH_ROOT_NODE_MARKER)\n"
- " {\n"
- " parentIndex = internalNodeParentNodes[parentIndex];\n"
- " ++distanceFromRoot;\n"
- " }\n"
- " }\n"
- " out_distanceFromRoot[internalNodeIndex] = distanceFromRoot;\n"
- " \n"
- " //\n"
- " __local int localMaxDistanceFromRoot;\n"
- " if( get_local_id(0) == 0 ) localMaxDistanceFromRoot = 0;\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " atomic_max(&localMaxDistanceFromRoot, distanceFromRoot);\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if( get_local_id(0) == 0 ) atomic_max(out_maxDistanceFromRoot, localMaxDistanceFromRoot);\n"
- "}\n"
- "__kernel void buildBinaryRadixTreeAabbsRecursive(__global int* distanceFromRoot, __global SortDataCL* mortonCodesAndAabbIndices,\n"
- " __global int2* childNodes,\n"
- " __global b3AabbCL* leafNodeAabbs, __global b3AabbCL* internalNodeAabbs,\n"
- " int maxDistanceFromRoot, int processedDistance, int numInternalNodes)\n"
- "{\n"
- " int internalNodeIndex = get_global_id(0);\n"
- " if(internalNodeIndex >= numInternalNodes) return;\n"
- " \n"
- " int distance = distanceFromRoot[internalNodeIndex];\n"
- " \n"
- " if(distance == processedDistance)\n"
- " {\n"
- " int leftChildIndex = childNodes[internalNodeIndex].x;\n"
- " int rightChildIndex = childNodes[internalNodeIndex].y;\n"
- " \n"
- " int isLeftChildLeaf = isLeafNode(leftChildIndex);\n"
- " int isRightChildLeaf = isLeafNode(rightChildIndex);\n"
- " \n"
- " leftChildIndex = getIndexWithInternalNodeMarkerRemoved(leftChildIndex);\n"
- " rightChildIndex = getIndexWithInternalNodeMarkerRemoved(rightChildIndex);\n"
- " \n"
- " //leftRigidIndex/rightRigidIndex is not used if internal node\n"
- " int leftRigidIndex = (isLeftChildLeaf) ? mortonCodesAndAabbIndices[leftChildIndex].m_value : -1;\n"
- " int rightRigidIndex = (isRightChildLeaf) ? mortonCodesAndAabbIndices[rightChildIndex].m_value : -1;\n"
- " \n"
- " b3AabbCL leftChildAabb = (isLeftChildLeaf) ? leafNodeAabbs[leftRigidIndex] : internalNodeAabbs[leftChildIndex];\n"
- " b3AabbCL rightChildAabb = (isRightChildLeaf) ? leafNodeAabbs[rightRigidIndex] : internalNodeAabbs[rightChildIndex];\n"
- " \n"
- " b3AabbCL mergedAabb;\n"
- " mergedAabb.m_min = b3Min(leftChildAabb.m_min, rightChildAabb.m_min);\n"
- " mergedAabb.m_max = b3Max(leftChildAabb.m_max, rightChildAabb.m_max);\n"
- " internalNodeAabbs[internalNodeIndex] = mergedAabb;\n"
- " }\n"
- "}\n"
- "__kernel void findLeafIndexRanges(__global int2* internalNodeChildNodes, __global int2* out_leafIndexRanges, int numInternalNodes)\n"
- "{\n"
- " int internalNodeIndex = get_global_id(0);\n"
- " if(internalNodeIndex >= numInternalNodes) return;\n"
- " \n"
- " int numLeafNodes = numInternalNodes + 1;\n"
- " \n"
- " int2 childNodes = internalNodeChildNodes[internalNodeIndex];\n"
- " \n"
- " int2 leafIndexRange; //x == min leaf index, y == max leaf index\n"
- " \n"
- " //Find lowest leaf index covered by this internal node\n"
- " {\n"
- " int lowestIndex = childNodes.x; //childNodes.x == Left child\n"
- " while( !isLeafNode(lowestIndex) ) lowestIndex = internalNodeChildNodes[ getIndexWithInternalNodeMarkerRemoved(lowestIndex) ].x;\n"
- " leafIndexRange.x = lowestIndex;\n"
- " }\n"
- " \n"
- " //Find highest leaf index covered by this internal node\n"
- " {\n"
- " int highestIndex = childNodes.y; //childNodes.y == Right child\n"
- " while( !isLeafNode(highestIndex) ) highestIndex = internalNodeChildNodes[ getIndexWithInternalNodeMarkerRemoved(highestIndex) ].y;\n"
- " leafIndexRange.y = highestIndex;\n"
- " }\n"
- " \n"
- " //\n"
- " out_leafIndexRanges[internalNodeIndex] = leafIndexRange;\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sap.cl b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sap.cl
deleted file mode 100644
index 93f77a6433..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sap.cl
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#define NEW_PAIR_MARKER -1
-
-typedef struct
-{
- union
- {
- float4 m_min;
- float m_minElems[4];
- int m_minIndices[4];
- };
- union
- {
- float4 m_max;
- float m_maxElems[4];
- int m_maxIndices[4];
- };
-} btAabbCL;
-
-
-/// conservative test for overlap between two aabbs
-bool TestAabbAgainstAabb2(const btAabbCL* aabb1, __local const btAabbCL* aabb2);
-bool TestAabbAgainstAabb2(const btAabbCL* aabb1, __local const btAabbCL* aabb2)
-{
- bool overlap = true;
- overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;
- overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;
- overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;
- return overlap;
-}
-bool TestAabbAgainstAabb2GlobalGlobal(__global const btAabbCL* aabb1, __global const btAabbCL* aabb2);
-bool TestAabbAgainstAabb2GlobalGlobal(__global const btAabbCL* aabb1, __global const btAabbCL* aabb2)
-{
- bool overlap = true;
- overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;
- overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;
- overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;
- return overlap;
-}
-
-bool TestAabbAgainstAabb2Global(const btAabbCL* aabb1, __global const btAabbCL* aabb2);
-bool TestAabbAgainstAabb2Global(const btAabbCL* aabb1, __global const btAabbCL* aabb2)
-{
- bool overlap = true;
- overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;
- overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;
- overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;
- return overlap;
-}
-
-
-__kernel void computePairsKernelTwoArrays( __global const btAabbCL* unsortedAabbs, __global const int* unsortedAabbMapping, __global const int* unsortedAabbMapping2, volatile __global int4* pairsOut,volatile __global int* pairCount, int numUnsortedAabbs, int numUnSortedAabbs2, int axis, int maxPairs)
-{
- int i = get_global_id(0);
- if (i>=numUnsortedAabbs)
- return;
-
- int j = get_global_id(1);
- if (j>=numUnSortedAabbs2)
- return;
-
-
- __global const btAabbCL* unsortedAabbPtr = &unsortedAabbs[unsortedAabbMapping[i]];
- __global const btAabbCL* unsortedAabbPtr2 = &unsortedAabbs[unsortedAabbMapping2[j]];
-
- if (TestAabbAgainstAabb2GlobalGlobal(unsortedAabbPtr,unsortedAabbPtr2))
- {
- int4 myPair;
-
- int xIndex = unsortedAabbPtr[0].m_minIndices[3];
- int yIndex = unsortedAabbPtr2[0].m_minIndices[3];
- if (xIndex>yIndex)
- {
- int tmp = xIndex;
- xIndex=yIndex;
- yIndex=tmp;
- }
-
- myPair.x = xIndex;
- myPair.y = yIndex;
- myPair.z = NEW_PAIR_MARKER;
- myPair.w = NEW_PAIR_MARKER;
-
-
- int curPair = atomic_inc (pairCount);
- if (curPair<maxPairs)
- {
- pairsOut[curPair] = myPair; //flush to main memory
- }
- }
-}
-
-
-
-__kernel void computePairsKernelBruteForce( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)
-{
- int i = get_global_id(0);
- if (i>=numObjects)
- return;
- for (int j=i+1;j<numObjects;j++)
- {
- if (TestAabbAgainstAabb2GlobalGlobal(&aabbs[i],&aabbs[j]))
- {
- int4 myPair;
- myPair.x = aabbs[i].m_minIndices[3];
- myPair.y = aabbs[j].m_minIndices[3];
- myPair.z = NEW_PAIR_MARKER;
- myPair.w = NEW_PAIR_MARKER;
-
- int curPair = atomic_inc (pairCount);
- if (curPair<maxPairs)
- {
- pairsOut[curPair] = myPair; //flush to main memory
- }
- }
- }
-}
-
-__kernel void computePairsKernelOriginal( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)
-{
- int i = get_global_id(0);
- if (i>=numObjects)
- return;
- for (int j=i+1;j<numObjects;j++)
- {
- if(aabbs[i].m_maxElems[axis] < (aabbs[j].m_minElems[axis]))
- {
- break;
- }
- if (TestAabbAgainstAabb2GlobalGlobal(&aabbs[i],&aabbs[j]))
- {
- int4 myPair;
- myPair.x = aabbs[i].m_minIndices[3];
- myPair.y = aabbs[j].m_minIndices[3];
- myPair.z = NEW_PAIR_MARKER;
- myPair.w = NEW_PAIR_MARKER;
-
- int curPair = atomic_inc (pairCount);
- if (curPair<maxPairs)
- {
- pairsOut[curPair] = myPair; //flush to main memory
- }
- }
- }
-}
-
-
-
-
-__kernel void computePairsKernelBarrier( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)
-{
- int i = get_global_id(0);
- int localId = get_local_id(0);
-
- __local int numActiveWgItems[1];
- __local int breakRequest[1];
-
- if (localId==0)
- {
- numActiveWgItems[0] = 0;
- breakRequest[0] = 0;
- }
- barrier(CLK_LOCAL_MEM_FENCE);
- atomic_inc(numActiveWgItems);
- barrier(CLK_LOCAL_MEM_FENCE);
- int localBreak = 0;
-
- int j=i+1;
- do
- {
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if (j<numObjects)
- {
- if(aabbs[i].m_maxElems[axis] < (aabbs[j].m_minElems[axis]))
- {
- if (!localBreak)
- {
- atomic_inc(breakRequest);
- localBreak = 1;
- }
- }
- }
-
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if (j>=numObjects && !localBreak)
- {
- atomic_inc(breakRequest);
- localBreak = 1;
- }
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if (!localBreak)
- {
- if (TestAabbAgainstAabb2GlobalGlobal(&aabbs[i],&aabbs[j]))
- {
- int4 myPair;
- myPair.x = aabbs[i].m_minIndices[3];
- myPair.y = aabbs[j].m_minIndices[3];
- myPair.z = NEW_PAIR_MARKER;
- myPair.w = NEW_PAIR_MARKER;
-
- int curPair = atomic_inc (pairCount);
- if (curPair<maxPairs)
- {
- pairsOut[curPair] = myPair; //flush to main memory
- }
- }
- }
- j++;
-
- } while (breakRequest[0]<numActiveWgItems[0]);
-}
-
-
-__kernel void computePairsKernelLocalSharedMemory( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)
-{
- int i = get_global_id(0);
- int localId = get_local_id(0);
-
- __local int numActiveWgItems[1];
- __local int breakRequest[1];
- __local btAabbCL localAabbs[128];// = aabbs[i];
-
- btAabbCL myAabb;
-
- myAabb = (i<numObjects)? aabbs[i]:aabbs[0];
- float testValue = myAabb.m_maxElems[axis];
-
- if (localId==0)
- {
- numActiveWgItems[0] = 0;
- breakRequest[0] = 0;
- }
- int localCount=0;
- int block=0;
- localAabbs[localId] = (i+block)<numObjects? aabbs[i+block] : aabbs[0];
- localAabbs[localId+64] = (i+block+64)<numObjects? aabbs[i+block+64]: aabbs[0];
-
- barrier(CLK_LOCAL_MEM_FENCE);
- atomic_inc(numActiveWgItems);
- barrier(CLK_LOCAL_MEM_FENCE);
- int localBreak = 0;
-
- int j=i+1;
- do
- {
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if (j<numObjects)
- {
- if(testValue < (localAabbs[localCount+localId+1].m_minElems[axis]))
- {
- if (!localBreak)
- {
- atomic_inc(breakRequest);
- localBreak = 1;
- }
- }
- }
-
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if (j>=numObjects && !localBreak)
- {
- atomic_inc(breakRequest);
- localBreak = 1;
- }
- barrier(CLK_LOCAL_MEM_FENCE);
-
- if (!localBreak)
- {
- if (TestAabbAgainstAabb2(&myAabb,&localAabbs[localCount+localId+1]))
- {
- int4 myPair;
- myPair.x = myAabb.m_minIndices[3];
- myPair.y = localAabbs[localCount+localId+1].m_minIndices[3];
- myPair.z = NEW_PAIR_MARKER;
- myPair.w = NEW_PAIR_MARKER;
-
- int curPair = atomic_inc (pairCount);
- if (curPair<maxPairs)
- {
- pairsOut[curPair] = myPair; //flush to main memory
- }
- }
- }
-
- barrier(CLK_LOCAL_MEM_FENCE);
-
- localCount++;
- if (localCount==64)
- {
- localCount = 0;
- block+=64;
- localAabbs[localId] = ((i+block)<numObjects) ? aabbs[i+block] : aabbs[0];
- localAabbs[localId+64] = ((i+64+block)<numObjects) ? aabbs[i+block+64] : aabbs[0];
- }
- j++;
-
- } while (breakRequest[0]<numActiveWgItems[0]);
-
-}
-
-
-
-
-//http://stereopsis.com/radix.html
-unsigned int FloatFlip(float fl);
-unsigned int FloatFlip(float fl)
-{
- unsigned int f = *(unsigned int*)&fl;
- unsigned int mask = -(int)(f >> 31) | 0x80000000;
- return f ^ mask;
-}
-float IFloatFlip(unsigned int f);
-float IFloatFlip(unsigned int f)
-{
- unsigned int mask = ((f >> 31) - 1) | 0x80000000;
- unsigned int fl = f ^ mask;
- return *(float*)&fl;
-}
-
-
-
-
-__kernel void copyAabbsKernel( __global const btAabbCL* allAabbs, __global btAabbCL* destAabbs, int numObjects)
-{
- int i = get_global_id(0);
- if (i>=numObjects)
- return;
- int src = destAabbs[i].m_maxIndices[3];
- destAabbs[i] = allAabbs[src];
- destAabbs[i].m_maxIndices[3] = src;
-}
-
-
-__kernel void flipFloatKernel( __global const btAabbCL* allAabbs, __global const int* smallAabbMapping, __global int2* sortData, int numObjects, int axis)
-{
- int i = get_global_id(0);
- if (i>=numObjects)
- return;
-
-
- sortData[i].x = FloatFlip(allAabbs[smallAabbMapping[i]].m_minElems[axis]);
- sortData[i].y = i;
-
-}
-
-
-__kernel void scatterKernel( __global const btAabbCL* allAabbs, __global const int* smallAabbMapping, volatile __global const int2* sortData, __global btAabbCL* sortedAabbs, int numObjects)
-{
- int i = get_global_id(0);
- if (i>=numObjects)
- return;
-
- sortedAabbs[i] = allAabbs[smallAabbMapping[sortData[i].y]];
-}
-
-
-
-__kernel void prepareSumVarianceKernel( __global const btAabbCL* allAabbs, __global const int* smallAabbMapping, __global float4* sum, __global float4* sum2,int numAabbs)
-{
- int i = get_global_id(0);
- if (i>=numAabbs)
- return;
-
- btAabbCL smallAabb = allAabbs[smallAabbMapping[i]];
-
- float4 s;
- s = (smallAabb.m_max+smallAabb.m_min)*0.5f;
- sum[i]=s;
- sum2[i]=s*s;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sapKernels.h b/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sapKernels.h
deleted file mode 100644
index d6999b94cb..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/BroadphaseCollision/kernels/sapKernels.h
+++ /dev/null
@@ -1,341 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* sapCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Erwin Coumans\n"
- "#define NEW_PAIR_MARKER -1\n"
- "typedef struct \n"
- "{\n"
- " union\n"
- " {\n"
- " float4 m_min;\n"
- " float m_minElems[4];\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float4 m_max;\n"
- " float m_maxElems[4];\n"
- " int m_maxIndices[4];\n"
- " };\n"
- "} btAabbCL;\n"
- "/// conservative test for overlap between two aabbs\n"
- "bool TestAabbAgainstAabb2(const btAabbCL* aabb1, __local const btAabbCL* aabb2);\n"
- "bool TestAabbAgainstAabb2(const btAabbCL* aabb1, __local const btAabbCL* aabb2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;\n"
- " overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;\n"
- " overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "bool TestAabbAgainstAabb2GlobalGlobal(__global const btAabbCL* aabb1, __global const btAabbCL* aabb2);\n"
- "bool TestAabbAgainstAabb2GlobalGlobal(__global const btAabbCL* aabb1, __global const btAabbCL* aabb2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;\n"
- " overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;\n"
- " overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "bool TestAabbAgainstAabb2Global(const btAabbCL* aabb1, __global const btAabbCL* aabb2);\n"
- "bool TestAabbAgainstAabb2Global(const btAabbCL* aabb1, __global const btAabbCL* aabb2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabb1->m_min.x > aabb2->m_max.x || aabb1->m_max.x < aabb2->m_min.x) ? false : overlap;\n"
- " overlap = (aabb1->m_min.z > aabb2->m_max.z || aabb1->m_max.z < aabb2->m_min.z) ? false : overlap;\n"
- " overlap = (aabb1->m_min.y > aabb2->m_max.y || aabb1->m_max.y < aabb2->m_min.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "__kernel void computePairsKernelTwoArrays( __global const btAabbCL* unsortedAabbs, __global const int* unsortedAabbMapping, __global const int* unsortedAabbMapping2, volatile __global int4* pairsOut,volatile __global int* pairCount, int numUnsortedAabbs, int numUnSortedAabbs2, int axis, int maxPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numUnsortedAabbs)\n"
- " return;\n"
- " int j = get_global_id(1);\n"
- " if (j>=numUnSortedAabbs2)\n"
- " return;\n"
- " __global const btAabbCL* unsortedAabbPtr = &unsortedAabbs[unsortedAabbMapping[i]];\n"
- " __global const btAabbCL* unsortedAabbPtr2 = &unsortedAabbs[unsortedAabbMapping2[j]];\n"
- " if (TestAabbAgainstAabb2GlobalGlobal(unsortedAabbPtr,unsortedAabbPtr2))\n"
- " {\n"
- " int4 myPair;\n"
- " \n"
- " int xIndex = unsortedAabbPtr[0].m_minIndices[3];\n"
- " int yIndex = unsortedAabbPtr2[0].m_minIndices[3];\n"
- " if (xIndex>yIndex)\n"
- " {\n"
- " int tmp = xIndex;\n"
- " xIndex=yIndex;\n"
- " yIndex=tmp;\n"
- " }\n"
- " \n"
- " myPair.x = xIndex;\n"
- " myPair.y = yIndex;\n"
- " myPair.z = NEW_PAIR_MARKER;\n"
- " myPair.w = NEW_PAIR_MARKER;\n"
- " int curPair = atomic_inc (pairCount);\n"
- " if (curPair<maxPairs)\n"
- " {\n"
- " pairsOut[curPair] = myPair; //flush to main memory\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void computePairsKernelBruteForce( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numObjects)\n"
- " return;\n"
- " for (int j=i+1;j<numObjects;j++)\n"
- " {\n"
- " if (TestAabbAgainstAabb2GlobalGlobal(&aabbs[i],&aabbs[j]))\n"
- " {\n"
- " int4 myPair;\n"
- " myPair.x = aabbs[i].m_minIndices[3];\n"
- " myPair.y = aabbs[j].m_minIndices[3];\n"
- " myPair.z = NEW_PAIR_MARKER;\n"
- " myPair.w = NEW_PAIR_MARKER;\n"
- " int curPair = atomic_inc (pairCount);\n"
- " if (curPair<maxPairs)\n"
- " {\n"
- " pairsOut[curPair] = myPair; //flush to main memory\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void computePairsKernelOriginal( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numObjects)\n"
- " return;\n"
- " for (int j=i+1;j<numObjects;j++)\n"
- " {\n"
- " if(aabbs[i].m_maxElems[axis] < (aabbs[j].m_minElems[axis])) \n"
- " {\n"
- " break;\n"
- " }\n"
- " if (TestAabbAgainstAabb2GlobalGlobal(&aabbs[i],&aabbs[j]))\n"
- " {\n"
- " int4 myPair;\n"
- " myPair.x = aabbs[i].m_minIndices[3];\n"
- " myPair.y = aabbs[j].m_minIndices[3];\n"
- " myPair.z = NEW_PAIR_MARKER;\n"
- " myPair.w = NEW_PAIR_MARKER;\n"
- " int curPair = atomic_inc (pairCount);\n"
- " if (curPair<maxPairs)\n"
- " {\n"
- " pairsOut[curPair] = myPair; //flush to main memory\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void computePairsKernelBarrier( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int localId = get_local_id(0);\n"
- " __local int numActiveWgItems[1];\n"
- " __local int breakRequest[1];\n"
- " if (localId==0)\n"
- " {\n"
- " numActiveWgItems[0] = 0;\n"
- " breakRequest[0] = 0;\n"
- " }\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " atomic_inc(numActiveWgItems);\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " int localBreak = 0;\n"
- " int j=i+1;\n"
- " do\n"
- " {\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if (j<numObjects)\n"
- " {\n"
- " if(aabbs[i].m_maxElems[axis] < (aabbs[j].m_minElems[axis])) \n"
- " {\n"
- " if (!localBreak)\n"
- " {\n"
- " atomic_inc(breakRequest);\n"
- " localBreak = 1;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if (j>=numObjects && !localBreak)\n"
- " {\n"
- " atomic_inc(breakRequest);\n"
- " localBreak = 1;\n"
- " }\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if (!localBreak)\n"
- " {\n"
- " if (TestAabbAgainstAabb2GlobalGlobal(&aabbs[i],&aabbs[j]))\n"
- " {\n"
- " int4 myPair;\n"
- " myPair.x = aabbs[i].m_minIndices[3];\n"
- " myPair.y = aabbs[j].m_minIndices[3];\n"
- " myPair.z = NEW_PAIR_MARKER;\n"
- " myPair.w = NEW_PAIR_MARKER;\n"
- " int curPair = atomic_inc (pairCount);\n"
- " if (curPair<maxPairs)\n"
- " {\n"
- " pairsOut[curPair] = myPair; //flush to main memory\n"
- " }\n"
- " }\n"
- " }\n"
- " j++;\n"
- " } while (breakRequest[0]<numActiveWgItems[0]);\n"
- "}\n"
- "__kernel void computePairsKernelLocalSharedMemory( __global const btAabbCL* aabbs, volatile __global int4* pairsOut,volatile __global int* pairCount, int numObjects, int axis, int maxPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int localId = get_local_id(0);\n"
- " __local int numActiveWgItems[1];\n"
- " __local int breakRequest[1];\n"
- " __local btAabbCL localAabbs[128];// = aabbs[i];\n"
- " \n"
- " btAabbCL myAabb;\n"
- " \n"
- " myAabb = (i<numObjects)? aabbs[i]:aabbs[0];\n"
- " float testValue = myAabb.m_maxElems[axis];\n"
- " \n"
- " if (localId==0)\n"
- " {\n"
- " numActiveWgItems[0] = 0;\n"
- " breakRequest[0] = 0;\n"
- " }\n"
- " int localCount=0;\n"
- " int block=0;\n"
- " localAabbs[localId] = (i+block)<numObjects? aabbs[i+block] : aabbs[0];\n"
- " localAabbs[localId+64] = (i+block+64)<numObjects? aabbs[i+block+64]: aabbs[0];\n"
- " \n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " atomic_inc(numActiveWgItems);\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " int localBreak = 0;\n"
- " \n"
- " int j=i+1;\n"
- " do\n"
- " {\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if (j<numObjects)\n"
- " {\n"
- " if(testValue < (localAabbs[localCount+localId+1].m_minElems[axis])) \n"
- " {\n"
- " if (!localBreak)\n"
- " {\n"
- " atomic_inc(breakRequest);\n"
- " localBreak = 1;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if (j>=numObjects && !localBreak)\n"
- " {\n"
- " atomic_inc(breakRequest);\n"
- " localBreak = 1;\n"
- " }\n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " \n"
- " if (!localBreak)\n"
- " {\n"
- " if (TestAabbAgainstAabb2(&myAabb,&localAabbs[localCount+localId+1]))\n"
- " {\n"
- " int4 myPair;\n"
- " myPair.x = myAabb.m_minIndices[3];\n"
- " myPair.y = localAabbs[localCount+localId+1].m_minIndices[3];\n"
- " myPair.z = NEW_PAIR_MARKER;\n"
- " myPair.w = NEW_PAIR_MARKER;\n"
- " int curPair = atomic_inc (pairCount);\n"
- " if (curPair<maxPairs)\n"
- " {\n"
- " pairsOut[curPair] = myPair; //flush to main memory\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " barrier(CLK_LOCAL_MEM_FENCE);\n"
- " localCount++;\n"
- " if (localCount==64)\n"
- " {\n"
- " localCount = 0;\n"
- " block+=64; \n"
- " localAabbs[localId] = ((i+block)<numObjects) ? aabbs[i+block] : aabbs[0];\n"
- " localAabbs[localId+64] = ((i+64+block)<numObjects) ? aabbs[i+block+64] : aabbs[0];\n"
- " }\n"
- " j++;\n"
- " \n"
- " } while (breakRequest[0]<numActiveWgItems[0]);\n"
- " \n"
- "}\n"
- "//http://stereopsis.com/radix.html\n"
- "unsigned int FloatFlip(float fl);\n"
- "unsigned int FloatFlip(float fl)\n"
- "{\n"
- " unsigned int f = *(unsigned int*)&fl;\n"
- " unsigned int mask = -(int)(f >> 31) | 0x80000000;\n"
- " return f ^ mask;\n"
- "}\n"
- "float IFloatFlip(unsigned int f);\n"
- "float IFloatFlip(unsigned int f)\n"
- "{\n"
- " unsigned int mask = ((f >> 31) - 1) | 0x80000000;\n"
- " unsigned int fl = f ^ mask;\n"
- " return *(float*)&fl;\n"
- "}\n"
- "__kernel void copyAabbsKernel( __global const btAabbCL* allAabbs, __global btAabbCL* destAabbs, int numObjects)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numObjects)\n"
- " return;\n"
- " int src = destAabbs[i].m_maxIndices[3];\n"
- " destAabbs[i] = allAabbs[src];\n"
- " destAabbs[i].m_maxIndices[3] = src;\n"
- "}\n"
- "__kernel void flipFloatKernel( __global const btAabbCL* allAabbs, __global const int* smallAabbMapping, __global int2* sortData, int numObjects, int axis)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numObjects)\n"
- " return;\n"
- " \n"
- " \n"
- " sortData[i].x = FloatFlip(allAabbs[smallAabbMapping[i]].m_minElems[axis]);\n"
- " sortData[i].y = i;\n"
- " \n"
- "}\n"
- "__kernel void scatterKernel( __global const btAabbCL* allAabbs, __global const int* smallAabbMapping, volatile __global const int2* sortData, __global btAabbCL* sortedAabbs, int numObjects)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numObjects)\n"
- " return;\n"
- " \n"
- " sortedAabbs[i] = allAabbs[smallAabbMapping[sortData[i].y]];\n"
- "}\n"
- "__kernel void prepareSumVarianceKernel( __global const btAabbCL* allAabbs, __global const int* smallAabbMapping, __global float4* sum, __global float4* sum2,int numAabbs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numAabbs)\n"
- " return;\n"
- " \n"
- " btAabbCL smallAabb = allAabbs[smallAabbMapping[i]];\n"
- " \n"
- " float4 s;\n"
- " s = (smallAabb.m_max+smallAabb.m_min)*0.5f;\n"
- " sum[i]=s;\n"
- " sum2[i]=s*s; \n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h
deleted file mode 100644
index 6146538263..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLInclude.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_OPENCL_INCLUDE_H
-#define B3_OPENCL_INCLUDE_H
-
-#ifdef B3_USE_CLEW
-#include "clew/clew.h"
-#else
-
-#ifdef __APPLE__
-#ifdef USE_MINICL
-#include <MiniCL/cl.h>
-#else
-#include <OpenCL/cl.h>
-#include <OpenCL/cl_ext.h> //clLogMessagesToStderrAPPLE
-#endif
-#else
-#ifdef USE_MINICL
-#include <MiniCL/cl.h>
-#else
-#include <CL/cl.h>
-#ifdef _WIN32
-#include "CL/cl_gl.h"
-#endif //_WIN32
-#endif
-#endif //__APPLE__
-#endif //B3_USE_CLEW
-
-#include <assert.h>
-#include <stdio.h>
-#define oclCHECKERROR(a, b) \
- if ((a) != (b)) \
- { \
- printf("OCL Error : %d\n", (a)); \
- assert((a) == (b)); \
- }
-
-#endif //B3_OPENCL_INCLUDE_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp
deleted file mode 100644
index fe54ea5ec9..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.cpp
+++ /dev/null
@@ -1,963 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006 - 2011 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//Original author: Roman Ponomarev
-//Mostly Reimplemented by Erwin Coumans
-
-bool gDebugForceLoadingFromSource = false;
-bool gDebugSkipLoadingBinary = false;
-
-#include "Bullet3Common/b3Logging.h"
-
-#include <string.h>
-
-#ifdef _WIN32
-#pragma warning(disable : 4996)
-#endif
-#include "b3OpenCLUtils.h"
-//#include "b3OpenCLInclude.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-
-#define B3_MAX_CL_DEVICES 16 //who needs 16 devices?
-
-#ifdef _WIN32
-#include <windows.h>
-#endif
-
-#include <assert.h>
-#define b3Assert assert
-#ifndef _WIN32
-#include <sys/stat.h>
-
-#endif
-
-static const char* sCachedBinaryPath = "cache";
-
-//Set the preferred platform vendor using the OpenCL SDK
-static const char* spPlatformVendor =
-#if defined(CL_PLATFORM_MINI_CL)
- "MiniCL, SCEA";
-#elif defined(CL_PLATFORM_AMD)
- "Advanced Micro Devices, Inc.";
-#elif defined(CL_PLATFORM_NVIDIA)
- "NVIDIA Corporation";
-#elif defined(CL_PLATFORM_INTEL)
- "Intel(R) Corporation";
-#elif defined(B3_USE_CLEW)
- "clew (OpenCL Extension Wrangler library)";
-#else
- "Unknown Vendor";
-#endif
-
-#ifndef CL_PLATFORM_MINI_CL
-#ifdef _WIN32
-#ifndef B3_USE_CLEW
-#include "CL/cl_gl.h"
-#endif //B3_USE_CLEW
-#endif //_WIN32
-#endif
-
-void MyFatalBreakAPPLE(const char* errstr,
- const void* private_info,
- size_t cb,
- void* user_data)
-{
- const char* patloc = strstr(errstr, "Warning");
- //find out if it is a warning or error, exit if error
-
- if (patloc)
- {
- b3Warning("Warning: %s\n", errstr);
- }
- else
- {
- b3Error("Error: %s\n", errstr);
- b3Assert(0);
- }
-}
-
-#ifdef B3_USE_CLEW
-
-int b3OpenCLUtils_clewInit()
-{
- int result = -1;
-
-#ifdef _WIN32
- const char* cl = "OpenCL.dll";
-#elif defined __APPLE__
- const char* cl = "/System/Library/Frameworks/OpenCL.framework/Versions/Current/OpenCL";
-#else //presumable Linux? \
- //linux (tested on Ubuntu 12.10 with Catalyst 13.4 beta drivers, not that there is no symbolic link from libOpenCL.so
- const char* cl = "libOpenCL.so.1";
- result = clewInit(cl);
- if (result != CLEW_SUCCESS)
- {
- cl = "libOpenCL.so";
- }
- else
- {
- clewExit();
- }
-#endif
- result = clewInit(cl);
- if (result != CLEW_SUCCESS)
- {
- b3Error("clewInit failed with error code %d\n", result);
- }
- else
- {
- b3Printf("clewInit succesfull using %s\n", cl);
- }
- return result;
-}
-#endif
-
-int b3OpenCLUtils_getNumPlatforms(cl_int* pErrNum)
-{
-#ifdef B3_USE_CLEW
- b3OpenCLUtils_clewInit();
-#endif
-
- cl_platform_id pPlatforms[10] = {0};
-
- cl_uint numPlatforms = 0;
- cl_int ciErrNum = clGetPlatformIDs(10, pPlatforms, &numPlatforms);
- //cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms);
-
- if (ciErrNum != CL_SUCCESS)
- {
- if (pErrNum != NULL)
- *pErrNum = ciErrNum;
- }
- return numPlatforms;
-}
-
-const char* b3OpenCLUtils_getSdkVendorName()
-{
- return spPlatformVendor;
-}
-
-void b3OpenCLUtils_setCachePath(const char* path)
-{
- sCachedBinaryPath = path;
-}
-
-cl_platform_id b3OpenCLUtils_getPlatform(int platformIndex0, cl_int* pErrNum)
-{
-#ifdef B3_USE_CLEW
- b3OpenCLUtils_clewInit();
-#endif
-
- cl_platform_id platform = 0;
- unsigned int platformIndex = (unsigned int)platformIndex0;
- cl_uint numPlatforms;
- cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms);
-
- if (platformIndex < numPlatforms)
- {
- cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms);
- ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL);
- if (ciErrNum != CL_SUCCESS)
- {
- if (pErrNum != NULL)
- *pErrNum = ciErrNum;
- return platform;
- }
-
- platform = platforms[platformIndex];
-
- free(platforms);
- }
-
- return platform;
-}
-
-void b3OpenCLUtils::getPlatformInfo(cl_platform_id platform, b3OpenCLPlatformInfo* platformInfo)
-{
- b3Assert(platform);
- cl_int ciErrNum;
- ciErrNum = clGetPlatformInfo(platform, CL_PLATFORM_VENDOR, B3_MAX_STRING_LENGTH, platformInfo->m_platformVendor, NULL);
- oclCHECKERROR(ciErrNum, CL_SUCCESS);
- ciErrNum = clGetPlatformInfo(platform, CL_PLATFORM_NAME, B3_MAX_STRING_LENGTH, platformInfo->m_platformName, NULL);
- oclCHECKERROR(ciErrNum, CL_SUCCESS);
- ciErrNum = clGetPlatformInfo(platform, CL_PLATFORM_VERSION, B3_MAX_STRING_LENGTH, platformInfo->m_platformVersion, NULL);
- oclCHECKERROR(ciErrNum, CL_SUCCESS);
-}
-
-void b3OpenCLUtils_printPlatformInfo(cl_platform_id platform)
-{
- b3OpenCLPlatformInfo platformInfo;
- b3OpenCLUtils::getPlatformInfo(platform, &platformInfo);
- b3Printf("Platform info:\n");
- b3Printf(" CL_PLATFORM_VENDOR: \t\t\t%s\n", platformInfo.m_platformVendor);
- b3Printf(" CL_PLATFORM_NAME: \t\t\t%s\n", platformInfo.m_platformName);
- b3Printf(" CL_PLATFORM_VERSION: \t\t\t%s\n", platformInfo.m_platformVersion);
-}
-
-cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLContext, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex)
-{
- cl_context retContext = 0;
- cl_int ciErrNum = 0;
- cl_uint num_entries;
- cl_device_id devices[B3_MAX_CL_DEVICES];
- cl_uint num_devices;
- cl_context_properties* cprops;
-
- /*
- * If we could find our platform, use it. Otherwise pass a NULL and get whatever the
- * implementation thinks we should be using.
- */
- cl_context_properties cps[7] = {0, 0, 0, 0, 0, 0, 0};
- cps[0] = CL_CONTEXT_PLATFORM;
- cps[1] = (cl_context_properties)platform;
-#ifdef _WIN32
-#ifndef B3_USE_CLEW
- if (pGLContext && pGLDC)
- {
- cps[2] = CL_GL_CONTEXT_KHR;
- cps[3] = (cl_context_properties)pGLContext;
- cps[4] = CL_WGL_HDC_KHR;
- cps[5] = (cl_context_properties)pGLDC;
- }
-#endif //B3_USE_CLEW
-#endif //_WIN32
- num_entries = B3_MAX_CL_DEVICES;
-
- num_devices = -1;
-
- ciErrNum = clGetDeviceIDs(
- platform,
- deviceType,
- num_entries,
- devices,
- &num_devices);
-
- if (ciErrNum < 0)
- {
- b3Printf("clGetDeviceIDs returned %d\n", ciErrNum);
- return 0;
- }
- cprops = (NULL == platform) ? NULL : cps;
-
- if (!num_devices)
- return 0;
-
- if (pGLContext)
- {
- //search for the GPU that relates to the OpenCL context
- unsigned int i;
- for (i = 0; i < num_devices; i++)
- {
- retContext = clCreateContext(cprops, 1, &devices[i], NULL, NULL, &ciErrNum);
- if (ciErrNum == CL_SUCCESS)
- break;
- }
- }
- else
- {
- if (preferredDeviceIndex >= 0 && (unsigned int)preferredDeviceIndex < num_devices)
- {
- //create a context of the preferred device index
- retContext = clCreateContext(cprops, 1, &devices[preferredDeviceIndex], NULL, NULL, &ciErrNum);
- }
- else
- {
- //create a context of all devices
-#if defined(__APPLE__)
- retContext = clCreateContext(cprops, num_devices, devices, MyFatalBreakAPPLE, NULL, &ciErrNum);
-#else
- b3Printf("numDevices=%d\n", num_devices);
-
- retContext = clCreateContext(cprops, num_devices, devices, NULL, NULL, &ciErrNum);
-#endif
- }
- }
- if (pErrNum != NULL)
- {
- *pErrNum = ciErrNum;
- };
-
- return retContext;
-}
-
-cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLContext, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex, cl_platform_id* retPlatformId)
-{
-#ifdef B3_USE_CLEW
- b3OpenCLUtils_clewInit();
-#endif
-
- cl_uint numPlatforms;
- cl_context retContext = 0;
- unsigned int i;
-
- cl_int ciErrNum = clGetPlatformIDs(0, NULL, &numPlatforms);
- if (ciErrNum != CL_SUCCESS)
- {
- if (pErrNum != NULL) *pErrNum = ciErrNum;
- return NULL;
- }
- if (numPlatforms > 0)
- {
- cl_platform_id* platforms = (cl_platform_id*)malloc(sizeof(cl_platform_id) * numPlatforms);
- ciErrNum = clGetPlatformIDs(numPlatforms, platforms, NULL);
- if (ciErrNum != CL_SUCCESS)
- {
- if (pErrNum != NULL)
- *pErrNum = ciErrNum;
- free(platforms);
- return NULL;
- }
-
- for (i = 0; i < numPlatforms; ++i)
- {
- char pbuf[128];
- ciErrNum = clGetPlatformInfo(platforms[i],
- CL_PLATFORM_VENDOR,
- sizeof(pbuf),
- pbuf,
- NULL);
- if (ciErrNum != CL_SUCCESS)
- {
- if (pErrNum != NULL) *pErrNum = ciErrNum;
- return NULL;
- }
-
- if (preferredPlatformIndex >= 0 && i == preferredPlatformIndex)
- {
- cl_platform_id tmpPlatform = platforms[0];
- platforms[0] = platforms[i];
- platforms[i] = tmpPlatform;
- break;
- }
- else
- {
- if (!strcmp(pbuf, spPlatformVendor))
- {
- cl_platform_id tmpPlatform = platforms[0];
- platforms[0] = platforms[i];
- platforms[i] = tmpPlatform;
- }
- }
- }
-
- for (i = 0; i < numPlatforms; ++i)
- {
- cl_platform_id platform = platforms[i];
- assert(platform);
-
- retContext = b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLContext, pGLDC, preferredDeviceIndex, preferredPlatformIndex);
-
- if (retContext)
- {
- // printf("OpenCL platform details:\n");
- b3OpenCLPlatformInfo platformInfo;
-
- b3OpenCLUtils::getPlatformInfo(platform, &platformInfo);
-
- if (retPlatformId)
- *retPlatformId = platform;
-
- break;
- }
- }
-
- free(platforms);
- }
- return retContext;
-}
-
-//////////////////////////////////////////////////////////////////////////////
-//! Gets the id of the nth device from the context
-//!
-//! @return the id or -1 when out of range
-//! @param cxMainContext OpenCL context
-//! @param device_idx index of the device of interest
-//////////////////////////////////////////////////////////////////////////////
-cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int deviceIndex)
-{
- assert(cxMainContext);
-
- size_t szParmDataBytes;
- cl_device_id* cdDevices;
- cl_device_id device;
-
- // get the list of devices associated with context
- clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, 0, NULL, &szParmDataBytes);
-
- if (szParmDataBytes / sizeof(cl_device_id) < (unsigned int)deviceIndex)
- {
- return (cl_device_id)-1;
- }
-
- cdDevices = (cl_device_id*)malloc(szParmDataBytes);
-
- clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, szParmDataBytes, cdDevices, NULL);
-
- device = cdDevices[deviceIndex];
- free(cdDevices);
-
- return device;
-}
-
-int b3OpenCLUtils_getNumDevices(cl_context cxMainContext)
-{
- size_t szParamDataBytes;
- int device_count;
- clGetContextInfo(cxMainContext, CL_CONTEXT_DEVICES, 0, NULL, &szParamDataBytes);
- device_count = (int)szParamDataBytes / sizeof(cl_device_id);
- return device_count;
-}
-
-void b3OpenCLUtils::getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info)
-{
- // CL_DEVICE_NAME
- clGetDeviceInfo(device, CL_DEVICE_NAME, B3_MAX_STRING_LENGTH, &info->m_deviceName, NULL);
-
- // CL_DEVICE_VENDOR
- clGetDeviceInfo(device, CL_DEVICE_VENDOR, B3_MAX_STRING_LENGTH, &info->m_deviceVendor, NULL);
-
- // CL_DRIVER_VERSION
- clGetDeviceInfo(device, CL_DRIVER_VERSION, B3_MAX_STRING_LENGTH, &info->m_driverVersion, NULL);
-
- // CL_DEVICE_INFO
- clGetDeviceInfo(device, CL_DEVICE_TYPE, sizeof(cl_device_type), &info->m_deviceType, NULL);
-
- // CL_DEVICE_MAX_COMPUTE_UNITS
- clGetDeviceInfo(device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(info->m_computeUnits), &info->m_computeUnits, NULL);
-
- // CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS
- clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS, sizeof(info->m_workitemDims), &info->m_workitemDims, NULL);
-
- // CL_DEVICE_MAX_WORK_ITEM_SIZES
- clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_ITEM_SIZES, sizeof(info->m_workItemSize), &info->m_workItemSize, NULL);
-
- // CL_DEVICE_MAX_WORK_GROUP_SIZE
- clGetDeviceInfo(device, CL_DEVICE_MAX_WORK_GROUP_SIZE, sizeof(info->m_workgroupSize), &info->m_workgroupSize, NULL);
-
- // CL_DEVICE_MAX_CLOCK_FREQUENCY
- clGetDeviceInfo(device, CL_DEVICE_MAX_CLOCK_FREQUENCY, sizeof(info->m_clockFrequency), &info->m_clockFrequency, NULL);
-
- // CL_DEVICE_ADDRESS_BITS
- clGetDeviceInfo(device, CL_DEVICE_ADDRESS_BITS, sizeof(info->m_addressBits), &info->m_addressBits, NULL);
-
- // CL_DEVICE_MAX_MEM_ALLOC_SIZE
- clGetDeviceInfo(device, CL_DEVICE_MAX_MEM_ALLOC_SIZE, sizeof(info->m_maxMemAllocSize), &info->m_maxMemAllocSize, NULL);
-
- // CL_DEVICE_GLOBAL_MEM_SIZE
- clGetDeviceInfo(device, CL_DEVICE_GLOBAL_MEM_SIZE, sizeof(info->m_globalMemSize), &info->m_globalMemSize, NULL);
-
- // CL_DEVICE_ERROR_CORRECTION_SUPPORT
- clGetDeviceInfo(device, CL_DEVICE_ERROR_CORRECTION_SUPPORT, sizeof(info->m_errorCorrectionSupport), &info->m_errorCorrectionSupport, NULL);
-
- // CL_DEVICE_LOCAL_MEM_TYPE
- clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_TYPE, sizeof(info->m_localMemType), &info->m_localMemType, NULL);
-
- // CL_DEVICE_LOCAL_MEM_SIZE
- clGetDeviceInfo(device, CL_DEVICE_LOCAL_MEM_SIZE, sizeof(info->m_localMemSize), &info->m_localMemSize, NULL);
-
- // CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE
- clGetDeviceInfo(device, CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE, sizeof(info->m_constantBufferSize), &info->m_constantBufferSize, NULL);
-
- // CL_DEVICE_QUEUE_PROPERTIES
- clGetDeviceInfo(device, CL_DEVICE_QUEUE_PROPERTIES, sizeof(info->m_queueProperties), &info->m_queueProperties, NULL);
-
- // CL_DEVICE_IMAGE_SUPPORT
- clGetDeviceInfo(device, CL_DEVICE_IMAGE_SUPPORT, sizeof(info->m_imageSupport), &info->m_imageSupport, NULL);
-
- // CL_DEVICE_MAX_READ_IMAGE_ARGS
- clGetDeviceInfo(device, CL_DEVICE_MAX_READ_IMAGE_ARGS, sizeof(info->m_maxReadImageArgs), &info->m_maxReadImageArgs, NULL);
-
- // CL_DEVICE_MAX_WRITE_IMAGE_ARGS
- clGetDeviceInfo(device, CL_DEVICE_MAX_WRITE_IMAGE_ARGS, sizeof(info->m_maxWriteImageArgs), &info->m_maxWriteImageArgs, NULL);
-
- // CL_DEVICE_IMAGE2D_MAX_WIDTH, CL_DEVICE_IMAGE2D_MAX_HEIGHT, CL_DEVICE_IMAGE3D_MAX_WIDTH, CL_DEVICE_IMAGE3D_MAX_HEIGHT, CL_DEVICE_IMAGE3D_MAX_DEPTH
- clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_WIDTH, sizeof(size_t), &info->m_image2dMaxWidth, NULL);
- clGetDeviceInfo(device, CL_DEVICE_IMAGE2D_MAX_HEIGHT, sizeof(size_t), &info->m_image2dMaxHeight, NULL);
- clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_WIDTH, sizeof(size_t), &info->m_image3dMaxWidth, NULL);
- clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_HEIGHT, sizeof(size_t), &info->m_image3dMaxHeight, NULL);
- clGetDeviceInfo(device, CL_DEVICE_IMAGE3D_MAX_DEPTH, sizeof(size_t), &info->m_image3dMaxDepth, NULL);
-
- // CL_DEVICE_EXTENSIONS: get device extensions, and if any then parse & log the string onto separate lines
- clGetDeviceInfo(device, CL_DEVICE_EXTENSIONS, B3_MAX_STRING_LENGTH, &info->m_deviceExtensions, NULL);
-
- // CL_DEVICE_PREFERRED_VECTOR_WIDTH_<type>
- clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR, sizeof(cl_uint), &info->m_vecWidthChar, NULL);
- clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT, sizeof(cl_uint), &info->m_vecWidthShort, NULL);
- clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT, sizeof(cl_uint), &info->m_vecWidthInt, NULL);
- clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG, sizeof(cl_uint), &info->m_vecWidthLong, NULL);
- clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT, sizeof(cl_uint), &info->m_vecWidthFloat, NULL);
- clGetDeviceInfo(device, CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE, sizeof(cl_uint), &info->m_vecWidthDouble, NULL);
-}
-
-void b3OpenCLUtils_printDeviceInfo(cl_device_id device)
-{
- b3OpenCLDeviceInfo info;
- b3OpenCLUtils::getDeviceInfo(device, &info);
- b3Printf("Device Info:\n");
- b3Printf(" CL_DEVICE_NAME: \t\t\t%s\n", info.m_deviceName);
- b3Printf(" CL_DEVICE_VENDOR: \t\t\t%s\n", info.m_deviceVendor);
- b3Printf(" CL_DRIVER_VERSION: \t\t\t%s\n", info.m_driverVersion);
-
- if (info.m_deviceType & CL_DEVICE_TYPE_CPU)
- b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_CPU");
- if (info.m_deviceType & CL_DEVICE_TYPE_GPU)
- b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_GPU");
- if (info.m_deviceType & CL_DEVICE_TYPE_ACCELERATOR)
- b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_ACCELERATOR");
- if (info.m_deviceType & CL_DEVICE_TYPE_DEFAULT)
- b3Printf(" CL_DEVICE_TYPE:\t\t\t%s\n", "CL_DEVICE_TYPE_DEFAULT");
-
- b3Printf(" CL_DEVICE_MAX_COMPUTE_UNITS:\t\t%u\n", info.m_computeUnits);
- b3Printf(" CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS:\t%u\n", info.m_workitemDims);
- b3Printf(" CL_DEVICE_MAX_WORK_ITEM_SIZES:\t%u / %u / %u \n", info.m_workItemSize[0], info.m_workItemSize[1], info.m_workItemSize[2]);
- b3Printf(" CL_DEVICE_MAX_WORK_GROUP_SIZE:\t%u\n", info.m_workgroupSize);
- b3Printf(" CL_DEVICE_MAX_CLOCK_FREQUENCY:\t%u MHz\n", info.m_clockFrequency);
- b3Printf(" CL_DEVICE_ADDRESS_BITS:\t\t%u\n", info.m_addressBits);
- b3Printf(" CL_DEVICE_MAX_MEM_ALLOC_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_maxMemAllocSize / (1024 * 1024)));
- b3Printf(" CL_DEVICE_GLOBAL_MEM_SIZE:\t\t%u MByte\n", (unsigned int)(info.m_globalMemSize / (1024 * 1024)));
- b3Printf(" CL_DEVICE_ERROR_CORRECTION_SUPPORT:\t%s\n", info.m_errorCorrectionSupport == CL_TRUE ? "yes" : "no");
- b3Printf(" CL_DEVICE_LOCAL_MEM_TYPE:\t\t%s\n", info.m_localMemType == 1 ? "local" : "global");
- b3Printf(" CL_DEVICE_LOCAL_MEM_SIZE:\t\t%u KByte\n", (unsigned int)(info.m_localMemSize / 1024));
- b3Printf(" CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE:\t%u KByte\n", (unsigned int)(info.m_constantBufferSize / 1024));
- if (info.m_queueProperties & CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE)
- b3Printf(" CL_DEVICE_QUEUE_PROPERTIES:\t\t%s\n", "CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE");
- if (info.m_queueProperties & CL_QUEUE_PROFILING_ENABLE)
- b3Printf(" CL_DEVICE_QUEUE_PROPERTIES:\t\t%s\n", "CL_QUEUE_PROFILING_ENABLE");
-
- b3Printf(" CL_DEVICE_IMAGE_SUPPORT:\t\t%u\n", info.m_imageSupport);
-
- b3Printf(" CL_DEVICE_MAX_READ_IMAGE_ARGS:\t%u\n", info.m_maxReadImageArgs);
- b3Printf(" CL_DEVICE_MAX_WRITE_IMAGE_ARGS:\t%u\n", info.m_maxWriteImageArgs);
- b3Printf("\n CL_DEVICE_IMAGE <dim>");
- b3Printf("\t\t\t2D_MAX_WIDTH\t %u\n", info.m_image2dMaxWidth);
- b3Printf("\t\t\t\t\t2D_MAX_HEIGHT\t %u\n", info.m_image2dMaxHeight);
- b3Printf("\t\t\t\t\t3D_MAX_WIDTH\t %u\n", info.m_image3dMaxWidth);
- b3Printf("\t\t\t\t\t3D_MAX_HEIGHT\t %u\n", info.m_image3dMaxHeight);
- b3Printf("\t\t\t\t\t3D_MAX_DEPTH\t %u\n", info.m_image3dMaxDepth);
- if (*info.m_deviceExtensions != 0)
- {
- b3Printf("\n CL_DEVICE_EXTENSIONS:%s\n", info.m_deviceExtensions);
- }
- else
- {
- b3Printf(" CL_DEVICE_EXTENSIONS: None\n");
- }
- b3Printf(" CL_DEVICE_PREFERRED_VECTOR_WIDTH_<t>\t");
- b3Printf("CHAR %u, SHORT %u, INT %u,LONG %u, FLOAT %u, DOUBLE %u\n\n\n",
- info.m_vecWidthChar, info.m_vecWidthShort, info.m_vecWidthInt, info.m_vecWidthLong, info.m_vecWidthFloat, info.m_vecWidthDouble);
-}
-
-static const char* strip2(const char* name, const char* pattern)
-{
- size_t const patlen = strlen(pattern);
- size_t patcnt = 0;
- const char* oriptr;
- const char* patloc;
- // find how many times the pattern occurs in the original string
- for (oriptr = name; (patloc = strstr(oriptr, pattern)); oriptr = patloc + patlen)
- {
- patcnt++;
- }
- return oriptr;
-}
-
-cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSourceOrg, cl_int* pErrNum, const char* additionalMacrosArg, const char* clFileNameForCaching, bool disableBinaryCaching)
-{
- const char* additionalMacros = additionalMacrosArg ? additionalMacrosArg : "";
-
- if (disableBinaryCaching)
- {
- //kernelSourceOrg = 0;
- }
-
- cl_program m_cpProgram = 0;
- cl_int status;
-
- char binaryFileName[B3_MAX_STRING_LENGTH];
-
- char deviceName[256];
- char driverVersion[256];
- const char* strippedName;
- int fileUpToDate = 0;
-#ifdef _WIN32
- int binaryFileValid = 0;
-#endif
- if (!disableBinaryCaching && clFileNameForCaching)
- {
- clGetDeviceInfo(device, CL_DEVICE_NAME, 256, &deviceName, NULL);
- clGetDeviceInfo(device, CL_DRIVER_VERSION, 256, &driverVersion, NULL);
-
- strippedName = strip2(clFileNameForCaching, "\\");
- strippedName = strip2(strippedName, "/");
-
-#ifdef _MSC_VER
- sprintf_s(binaryFileName, B3_MAX_STRING_LENGTH, "%s/%s.%s.%s.bin", sCachedBinaryPath, strippedName, deviceName, driverVersion);
-#else
- sprintf(binaryFileName, "%s/%s.%s.%s.bin", sCachedBinaryPath, strippedName, deviceName, driverVersion);
-#endif
- }
- if (clFileNameForCaching && !(disableBinaryCaching || gDebugSkipLoadingBinary || gDebugForceLoadingFromSource))
- {
-#ifdef _WIN32
- char* bla = 0;
-
- //printf("searching for %s\n", binaryFileName);
-
- FILETIME modtimeBinary;
- CreateDirectoryA(sCachedBinaryPath, 0);
- {
- HANDLE binaryFileHandle = CreateFileA(binaryFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- if (binaryFileHandle == INVALID_HANDLE_VALUE)
- {
- DWORD errorCode;
- errorCode = GetLastError();
- switch (errorCode)
- {
- case ERROR_FILE_NOT_FOUND:
- {
- b3Warning("\nCached file not found %s\n", binaryFileName);
- break;
- }
- case ERROR_PATH_NOT_FOUND:
- {
- b3Warning("\nCached file path not found %s\n", binaryFileName);
- break;
- }
- default:
- {
- b3Warning("\nFailed reading cached file with errorCode = %d\n", errorCode);
- }
- }
- }
- else
- {
- if (GetFileTime(binaryFileHandle, NULL, NULL, &modtimeBinary) == 0)
- {
- DWORD errorCode;
- errorCode = GetLastError();
- b3Warning("\nGetFileTime errorCode = %d\n", errorCode);
- }
- else
- {
- binaryFileValid = 1;
- }
- CloseHandle(binaryFileHandle);
- }
-
- if (binaryFileValid)
- {
- HANDLE srcFileHandle = CreateFileA(clFileNameForCaching, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
-
- if (srcFileHandle == INVALID_HANDLE_VALUE)
- {
- const char* prefix[] = {"./", "../", "../../", "../../../", "../../../../"};
- for (int i = 0; (srcFileHandle == INVALID_HANDLE_VALUE) && i < 5; i++)
- {
- char relativeFileName[1024];
- sprintf(relativeFileName, "%s%s", prefix[i], clFileNameForCaching);
- srcFileHandle = CreateFileA(relativeFileName, GENERIC_READ, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
- }
- }
-
- if (srcFileHandle != INVALID_HANDLE_VALUE)
- {
- FILETIME modtimeSrc;
- if (GetFileTime(srcFileHandle, NULL, NULL, &modtimeSrc) == 0)
- {
- DWORD errorCode;
- errorCode = GetLastError();
- b3Warning("\nGetFileTime errorCode = %d\n", errorCode);
- }
- if ((modtimeSrc.dwHighDateTime < modtimeBinary.dwHighDateTime) || ((modtimeSrc.dwHighDateTime == modtimeBinary.dwHighDateTime) && (modtimeSrc.dwLowDateTime <= modtimeBinary.dwLowDateTime)))
- {
- fileUpToDate = 1;
- }
- else
- {
- b3Warning("\nCached binary file out-of-date (%s)\n", binaryFileName);
- }
- CloseHandle(srcFileHandle);
- }
- else
- {
-#ifdef _DEBUG
- DWORD errorCode;
- errorCode = GetLastError();
- switch (errorCode)
- {
- case ERROR_FILE_NOT_FOUND:
- {
- b3Warning("\nSrc file not found %s\n", clFileNameForCaching);
- break;
- }
- case ERROR_PATH_NOT_FOUND:
- {
- b3Warning("\nSrc path not found %s\n", clFileNameForCaching);
- break;
- }
- default:
- {
- b3Warning("\nnSrc file reading errorCode = %d\n", errorCode);
- }
- }
-
- //we should make sure the src file exists so we can verify the timestamp with binary
- // assert(0);
- b3Warning("Warning: cannot find OpenCL kernel %s to verify timestamp of binary cached kernel %s\n", clFileNameForCaching, binaryFileName);
- fileUpToDate = true;
-#else
- //if we cannot find the source, assume it is OK in release builds
- fileUpToDate = true;
-#endif
- }
- }
- }
-
-#else
- fileUpToDate = true;
- if (mkdir(sCachedBinaryPath, 0777) == -1)
- {
- }
- else
- {
- b3Printf("Succesfully created cache directory: %s\n", sCachedBinaryPath);
- }
-#endif //_WIN32
- }
-
- if (fileUpToDate)
- {
-#ifdef _MSC_VER
- FILE* file;
- if (fopen_s(&file, binaryFileName, "rb") != 0)
- file = 0;
-#else
- FILE* file = fopen(binaryFileName, "rb");
-#endif
-
- if (file)
- {
- size_t binarySize = 0;
- char* binary = 0;
-
- fseek(file, 0L, SEEK_END);
- binarySize = ftell(file);
- rewind(file);
- binary = (char*)malloc(sizeof(char) * binarySize);
- int bytesRead;
- bytesRead = fread(binary, sizeof(char), binarySize, file);
- fclose(file);
-
- m_cpProgram = clCreateProgramWithBinary(clContext, 1, &device, &binarySize, (const unsigned char**)&binary, 0, &status);
- b3Assert(status == CL_SUCCESS);
- status = clBuildProgram(m_cpProgram, 1, &device, additionalMacros, 0, 0);
- b3Assert(status == CL_SUCCESS);
-
- if (status != CL_SUCCESS)
- {
- char* build_log;
- size_t ret_val_size;
- clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size);
- build_log = (char*)malloc(sizeof(char) * (ret_val_size + 1));
- clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL);
- build_log[ret_val_size] = '\0';
- b3Error("%s\n", build_log);
- free(build_log);
- b3Assert(0);
- m_cpProgram = 0;
-
- b3Warning("clBuildProgram reported failure on cached binary: %s\n", binaryFileName);
- }
- else
- {
- b3Printf("clBuildProgram successfully compiled cached binary: %s\n", binaryFileName);
- }
- free(binary);
- }
- else
- {
- b3Warning("Cannot open cached binary: %s\n", binaryFileName);
- }
- }
-
- if (!m_cpProgram)
- {
- cl_int localErrNum;
- char* compileFlags;
- int flagsize;
-
- const char* kernelSource = kernelSourceOrg;
-
- if (!kernelSourceOrg || gDebugForceLoadingFromSource)
- {
- if (clFileNameForCaching)
- {
- FILE* file = fopen(clFileNameForCaching, "rb");
- //in many cases the relative path is a few levels up the directory hierarchy, so try it
- if (!file)
- {
- const char* prefix[] = {"../", "../../", "../../../", "../../../../"};
- for (int i = 0; !file && i < 3; i++)
- {
- char relativeFileName[1024];
- sprintf(relativeFileName, "%s%s", prefix[i], clFileNameForCaching);
- file = fopen(relativeFileName, "rb");
- }
- }
-
- if (file)
- {
- char* kernelSrc = 0;
- fseek(file, 0L, SEEK_END);
- int kernelSize = ftell(file);
- rewind(file);
- kernelSrc = (char*)malloc(kernelSize + 1);
- int readBytes;
- readBytes = fread((void*)kernelSrc, 1, kernelSize, file);
- kernelSrc[kernelSize] = 0;
- fclose(file);
- kernelSource = kernelSrc;
- }
- }
- }
-
- size_t program_length = kernelSource ? strlen(kernelSource) : 0;
-#ifdef MAC //or __APPLE__?
- char* flags = "-cl-mad-enable -DMAC ";
-#else
- const char* flags = "";
-#endif
-
- m_cpProgram = clCreateProgramWithSource(clContext, 1, (const char**)&kernelSource, &program_length, &localErrNum);
- if (localErrNum != CL_SUCCESS)
- {
- if (pErrNum)
- *pErrNum = localErrNum;
- return 0;
- }
-
- // Build the program with 'mad' Optimization option
-
- flagsize = sizeof(char) * (strlen(additionalMacros) + strlen(flags) + 5);
- compileFlags = (char*)malloc(flagsize);
-#ifdef _MSC_VER
- sprintf_s(compileFlags, flagsize, "%s %s", flags, additionalMacros);
-#else
- sprintf(compileFlags, "%s %s", flags, additionalMacros);
-#endif
- localErrNum = clBuildProgram(m_cpProgram, 1, &device, compileFlags, NULL, NULL);
- if (localErrNum != CL_SUCCESS)
- {
- char* build_log;
- size_t ret_val_size;
- clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, 0, NULL, &ret_val_size);
- build_log = (char*)malloc(sizeof(char) * (ret_val_size + 1));
- clGetProgramBuildInfo(m_cpProgram, device, CL_PROGRAM_BUILD_LOG, ret_val_size, build_log, NULL);
-
- // to be carefully, terminate with \0
- // there's no information in the reference whether the string is 0 terminated or not
- build_log[ret_val_size] = '\0';
-
- b3Error("Error in clBuildProgram, Line %u in file %s, Log: \n%s\n !!!\n\n", __LINE__, __FILE__, build_log);
- free(build_log);
- if (pErrNum)
- *pErrNum = localErrNum;
- return 0;
- }
-
- if (!disableBinaryCaching && clFileNameForCaching)
- { // write to binary
-
- cl_uint numAssociatedDevices;
- status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_NUM_DEVICES, sizeof(cl_uint), &numAssociatedDevices, 0);
- b3Assert(status == CL_SUCCESS);
- if (numAssociatedDevices == 1)
- {
- size_t binarySize;
- char* binary;
-
- status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_BINARY_SIZES, sizeof(size_t), &binarySize, 0);
- b3Assert(status == CL_SUCCESS);
-
- binary = (char*)malloc(sizeof(char) * binarySize);
-
- status = clGetProgramInfo(m_cpProgram, CL_PROGRAM_BINARIES, sizeof(char*), &binary, 0);
- b3Assert(status == CL_SUCCESS);
-
- {
- FILE* file = 0;
-#ifdef _MSC_VER
- if (fopen_s(&file, binaryFileName, "wb") != 0)
- file = 0;
-#else
- file = fopen(binaryFileName, "wb");
-#endif
- if (file)
- {
- fwrite(binary, sizeof(char), binarySize, file);
- fclose(file);
- }
- else
- {
- b3Warning("cannot write file %s\n", binaryFileName);
- }
- }
-
- free(binary);
- }
- }
-
- free(compileFlags);
- }
- return m_cpProgram;
-}
-
-cl_kernel b3OpenCLUtils_compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog, const char* additionalMacros)
-{
- cl_kernel kernel;
- cl_int localErrNum;
-
- cl_program m_cpProgram = prog;
-
- b3Printf("compiling kernel %s ", kernelName);
-
- if (!m_cpProgram)
- {
- m_cpProgram = b3OpenCLUtils_compileCLProgramFromString(clContext, device, kernelSource, pErrNum, additionalMacros, 0, false);
- }
-
- // Create the kernel
- kernel = clCreateKernel(m_cpProgram, kernelName, &localErrNum);
- if (localErrNum != CL_SUCCESS)
- {
- b3Error("Error in clCreateKernel, Line %u in file %s, cannot find kernel function %s !!!\n\n", __LINE__, __FILE__, kernelName);
- assert(0);
- if (pErrNum)
- *pErrNum = localErrNum;
- return 0;
- }
-
- if (!prog && m_cpProgram)
- {
- clReleaseProgram(m_cpProgram);
- }
- b3Printf("ready. \n");
-
- if (pErrNum)
- *pErrNum = CL_SUCCESS;
- return kernel;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h b/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h
deleted file mode 100644
index 6c82eed2a6..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Initialize/b3OpenCLUtils.h
+++ /dev/null
@@ -1,190 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006 - 2011 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//original author: Roman Ponomarev
-//cleanup by Erwin Coumans
-
-#ifndef B3_OPENCL_UTILS_H
-#define B3_OPENCL_UTILS_H
-
-#include "b3OpenCLInclude.h"
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
- ///C API for OpenCL utilities: convenience functions, see below for C++ API
-
- /// CL Context optionally takes a GL context. This is a generic type because we don't really want this code
- /// to have to understand GL types. It is a HGLRC in _WIN32 or a GLXContext otherwise.
- cl_context b3OpenCLUtils_createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex, cl_platform_id* platformId);
-
- int b3OpenCLUtils_getNumDevices(cl_context cxMainContext);
-
- cl_device_id b3OpenCLUtils_getDevice(cl_context cxMainContext, int nr);
-
- void b3OpenCLUtils_printDeviceInfo(cl_device_id device);
-
- cl_kernel b3OpenCLUtils_compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum, cl_program prog, const char* additionalMacros);
-
- //optional
- cl_program b3OpenCLUtils_compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSource, cl_int* pErrNum, const char* additionalMacros, const char* srcFileNameForCaching, bool disableBinaryCaching);
-
- //the following optional APIs provide access using specific platform information
- int b3OpenCLUtils_getNumPlatforms(cl_int* pErrNum);
-
- ///get the nr'th platform, where nr is in the range [0..getNumPlatforms)
- cl_platform_id b3OpenCLUtils_getPlatform(int nr, cl_int* pErrNum);
-
- void b3OpenCLUtils_printPlatformInfo(cl_platform_id platform);
-
- const char* b3OpenCLUtils_getSdkVendorName();
-
- ///set the path (directory/folder) where the compiled OpenCL kernel are stored
- void b3OpenCLUtils_setCachePath(const char* path);
-
- cl_context b3OpenCLUtils_createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx, void* pGLDC, int preferredDeviceIndex, int preferredPlatformIndex);
-
-#ifdef __cplusplus
-}
-
-#define B3_MAX_STRING_LENGTH 1024
-
-typedef struct
-{
- char m_deviceName[B3_MAX_STRING_LENGTH];
- char m_deviceVendor[B3_MAX_STRING_LENGTH];
- char m_driverVersion[B3_MAX_STRING_LENGTH];
- char m_deviceExtensions[B3_MAX_STRING_LENGTH];
-
- cl_device_type m_deviceType;
- cl_uint m_computeUnits;
- size_t m_workitemDims;
- size_t m_workItemSize[3];
- size_t m_image2dMaxWidth;
- size_t m_image2dMaxHeight;
- size_t m_image3dMaxWidth;
- size_t m_image3dMaxHeight;
- size_t m_image3dMaxDepth;
- size_t m_workgroupSize;
- cl_uint m_clockFrequency;
- cl_ulong m_constantBufferSize;
- cl_ulong m_localMemSize;
- cl_ulong m_globalMemSize;
- cl_bool m_errorCorrectionSupport;
- cl_device_local_mem_type m_localMemType;
- cl_uint m_maxReadImageArgs;
- cl_uint m_maxWriteImageArgs;
-
- cl_uint m_addressBits;
- cl_ulong m_maxMemAllocSize;
- cl_command_queue_properties m_queueProperties;
- cl_bool m_imageSupport;
- cl_uint m_vecWidthChar;
- cl_uint m_vecWidthShort;
- cl_uint m_vecWidthInt;
- cl_uint m_vecWidthLong;
- cl_uint m_vecWidthFloat;
- cl_uint m_vecWidthDouble;
-
-} b3OpenCLDeviceInfo;
-
-struct b3OpenCLPlatformInfo
-{
- char m_platformVendor[B3_MAX_STRING_LENGTH];
- char m_platformName[B3_MAX_STRING_LENGTH];
- char m_platformVersion[B3_MAX_STRING_LENGTH];
-
- b3OpenCLPlatformInfo()
- {
- m_platformVendor[0] = 0;
- m_platformName[0] = 0;
- m_platformVersion[0] = 0;
- }
-};
-
-///C++ API for OpenCL utilities: convenience functions
-struct b3OpenCLUtils
-{
- /// CL Context optionally takes a GL context. This is a generic type because we don't really want this code
- /// to have to understand GL types. It is a HGLRC in _WIN32 or a GLXContext otherwise.
- static inline cl_context createContextFromType(cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0, int preferredDeviceIndex = -1, int preferredPlatformIndex = -1, cl_platform_id* platformId = 0)
- {
- return b3OpenCLUtils_createContextFromType(deviceType, pErrNum, pGLCtx, pGLDC, preferredDeviceIndex, preferredPlatformIndex, platformId);
- }
-
- static inline int getNumDevices(cl_context cxMainContext)
- {
- return b3OpenCLUtils_getNumDevices(cxMainContext);
- }
- static inline cl_device_id getDevice(cl_context cxMainContext, int nr)
- {
- return b3OpenCLUtils_getDevice(cxMainContext, nr);
- }
-
- static void getDeviceInfo(cl_device_id device, b3OpenCLDeviceInfo* info);
-
- static inline void printDeviceInfo(cl_device_id device)
- {
- b3OpenCLUtils_printDeviceInfo(device);
- }
-
- static inline cl_kernel compileCLKernelFromString(cl_context clContext, cl_device_id device, const char* kernelSource, const char* kernelName, cl_int* pErrNum = 0, cl_program prog = 0, const char* additionalMacros = "")
- {
- return b3OpenCLUtils_compileCLKernelFromString(clContext, device, kernelSource, kernelName, pErrNum, prog, additionalMacros);
- }
-
- //optional
- static inline cl_program compileCLProgramFromString(cl_context clContext, cl_device_id device, const char* kernelSource, cl_int* pErrNum = 0, const char* additionalMacros = "", const char* srcFileNameForCaching = 0, bool disableBinaryCaching = false)
- {
- return b3OpenCLUtils_compileCLProgramFromString(clContext, device, kernelSource, pErrNum, additionalMacros, srcFileNameForCaching, disableBinaryCaching);
- }
-
- //the following optional APIs provide access using specific platform information
- static inline int getNumPlatforms(cl_int* pErrNum = 0)
- {
- return b3OpenCLUtils_getNumPlatforms(pErrNum);
- }
- ///get the nr'th platform, where nr is in the range [0..getNumPlatforms)
- static inline cl_platform_id getPlatform(int nr, cl_int* pErrNum = 0)
- {
- return b3OpenCLUtils_getPlatform(nr, pErrNum);
- }
-
- static void getPlatformInfo(cl_platform_id platform, b3OpenCLPlatformInfo* platformInfo);
-
- static inline void printPlatformInfo(cl_platform_id platform)
- {
- b3OpenCLUtils_printPlatformInfo(platform);
- }
-
- static inline const char* getSdkVendorName()
- {
- return b3OpenCLUtils_getSdkVendorName();
- }
- static inline cl_context createContextFromPlatform(cl_platform_id platform, cl_device_type deviceType, cl_int* pErrNum, void* pGLCtx = 0, void* pGLDC = 0, int preferredDeviceIndex = -1, int preferredPlatformIndex = -1)
- {
- return b3OpenCLUtils_createContextFromPlatform(platform, deviceType, pErrNum, pGLCtx, pGLDC, preferredDeviceIndex, preferredPlatformIndex);
- }
- static void setCachePath(const char* path)
- {
- b3OpenCLUtils_setCachePath(path);
- }
-};
-
-#endif //__cplusplus
-
-#endif // B3_OPENCL_UTILS_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3BvhInfo.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3BvhInfo.h
deleted file mode 100644
index 27835bb747..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3BvhInfo.h
+++ /dev/null
@@ -1,17 +0,0 @@
-#ifndef B3_BVH_INFO_H
-#define B3_BVH_INFO_H
-
-#include "Bullet3Common/b3Vector3.h"
-
-struct b3BvhInfo
-{
- b3Vector3 m_aabbMin;
- b3Vector3 m_aabbMax;
- b3Vector3 m_quantization;
- int m_numNodes;
- int m_numSubTrees;
- int m_nodeOffset;
- int m_subTreeOffset;
-};
-
-#endif //B3_BVH_INFO_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.cpp
deleted file mode 100644
index 4db717f8c3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-
-#if 0
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3ContactCache.h"
-#include "Bullet3Common/b3Transform.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-b3Scalar gContactBreakingThreshold = b3Scalar(0.02);
-
-///gContactCalcArea3Points will approximate the convex hull area using 3 points
-///when setting it to false, it will use 4 points to compute the area: it is more accurate but slower
-bool gContactCalcArea3Points = true;
-
-
-
-
-static inline b3Scalar calcArea4Points(const b3Vector3 &p0,const b3Vector3 &p1,const b3Vector3 &p2,const b3Vector3 &p3)
-{
- // It calculates possible 3 area constructed from random 4 points and returns the biggest one.
-
- b3Vector3 a[3],b[3];
- a[0] = p0 - p1;
- a[1] = p0 - p2;
- a[2] = p0 - p3;
- b[0] = p2 - p3;
- b[1] = p1 - p3;
- b[2] = p1 - p2;
-
- //todo: Following 3 cross production can be easily optimized by SIMD.
- b3Vector3 tmp0 = a[0].cross(b[0]);
- b3Vector3 tmp1 = a[1].cross(b[1]);
- b3Vector3 tmp2 = a[2].cross(b[2]);
-
- return b3Max(b3Max(tmp0.length2(),tmp1.length2()),tmp2.length2());
-}
-#if 0
-
-//using localPointA for all points
-int b3ContactCache::sortCachedPoints(const b3Vector3& pt)
-{
- //calculate 4 possible cases areas, and take biggest area
- //also need to keep 'deepest'
-
- int maxPenetrationIndex = -1;
-#define KEEP_DEEPEST_POINT 1
-#ifdef KEEP_DEEPEST_POINT
- b3Scalar maxPenetration = pt.getDistance();
- for (int i=0;i<4;i++)
- {
- if (m_pointCache[i].getDistance() < maxPenetration)
- {
- maxPenetrationIndex = i;
- maxPenetration = m_pointCache[i].getDistance();
- }
- }
-#endif //KEEP_DEEPEST_POINT
-
- b3Scalar res0(b3Scalar(0.)),res1(b3Scalar(0.)),res2(b3Scalar(0.)),res3(b3Scalar(0.));
-
- if (gContactCalcArea3Points)
- {
- if (maxPenetrationIndex != 0)
- {
- b3Vector3 a0 = pt.m_localPointA-m_pointCache[1].m_localPointA;
- b3Vector3 b0 = m_pointCache[3].m_localPointA-m_pointCache[2].m_localPointA;
- b3Vector3 cross = a0.cross(b0);
- res0 = cross.length2();
- }
- if (maxPenetrationIndex != 1)
- {
- b3Vector3 a1 = pt.m_localPointA-m_pointCache[0].m_localPointA;
- b3Vector3 b1 = m_pointCache[3].m_localPointA-m_pointCache[2].m_localPointA;
- b3Vector3 cross = a1.cross(b1);
- res1 = cross.length2();
- }
-
- if (maxPenetrationIndex != 2)
- {
- b3Vector3 a2 = pt.m_localPointA-m_pointCache[0].m_localPointA;
- b3Vector3 b2 = m_pointCache[3].m_localPointA-m_pointCache[1].m_localPointA;
- b3Vector3 cross = a2.cross(b2);
- res2 = cross.length2();
- }
-
- if (maxPenetrationIndex != 3)
- {
- b3Vector3 a3 = pt.m_localPointA-m_pointCache[0].m_localPointA;
- b3Vector3 b3 = m_pointCache[2].m_localPointA-m_pointCache[1].m_localPointA;
- b3Vector3 cross = a3.cross(b3);
- res3 = cross.length2();
- }
- }
- else
- {
- if(maxPenetrationIndex != 0) {
- res0 = calcArea4Points(pt.m_localPointA,m_pointCache[1].m_localPointA,m_pointCache[2].m_localPointA,m_pointCache[3].m_localPointA);
- }
-
- if(maxPenetrationIndex != 1) {
- res1 = calcArea4Points(pt.m_localPointA,m_pointCache[0].m_localPointA,m_pointCache[2].m_localPointA,m_pointCache[3].m_localPointA);
- }
-
- if(maxPenetrationIndex != 2) {
- res2 = calcArea4Points(pt.m_localPointA,m_pointCache[0].m_localPointA,m_pointCache[1].m_localPointA,m_pointCache[3].m_localPointA);
- }
-
- if(maxPenetrationIndex != 3) {
- res3 = calcArea4Points(pt.m_localPointA,m_pointCache[0].m_localPointA,m_pointCache[1].m_localPointA,m_pointCache[2].m_localPointA);
- }
- }
- b3Vector4 maxvec(res0,res1,res2,res3);
- int biggestarea = maxvec.closestAxis4();
- return biggestarea;
-
-}
-
-
-int b3ContactCache::getCacheEntry(const b3Vector3& newPoint) const
-{
- b3Scalar shortestDist = getContactBreakingThreshold() * getContactBreakingThreshold();
- int size = getNumContacts();
- int nearestPoint = -1;
- for( int i = 0; i < size; i++ )
- {
- const b3Vector3 &mp = m_pointCache[i];
-
- b3Vector3 diffA = mp.m_localPointA- newPoint.m_localPointA;
- const b3Scalar distToManiPoint = diffA.dot(diffA);
- if( distToManiPoint < shortestDist )
- {
- shortestDist = distToManiPoint;
- nearestPoint = i;
- }
- }
- return nearestPoint;
-}
-
-int b3ContactCache::addManifoldPoint(const b3Vector3& newPoint)
-{
- b3Assert(validContactDistance(newPoint));
-
- int insertIndex = getNumContacts();
- if (insertIndex == MANIFOLD_CACHE_SIZE)
- {
-#if MANIFOLD_CACHE_SIZE >= 4
- //sort cache so best points come first, based on area
- insertIndex = sortCachedPoints(newPoint);
-#else
- insertIndex = 0;
-#endif
- clearUserCache(m_pointCache[insertIndex]);
-
- } else
- {
- m_cachedPoints++;
-
-
- }
- if (insertIndex<0)
- insertIndex=0;
-
- //b3Assert(m_pointCache[insertIndex].m_userPersistentData==0);
- m_pointCache[insertIndex] = newPoint;
- return insertIndex;
-}
-
-#endif
-
-bool b3ContactCache::validContactDistance(const b3Vector3& pt)
-{
- return pt.w <= gContactBreakingThreshold;
-}
-
-void b3ContactCache::removeContactPoint(struct b3Contact4Data& newContactCache,int i)
-{
- int numContacts = b3Contact4Data_getNumPoints(&newContactCache);
- if (i!=(numContacts-1))
- {
- b3Swap(newContactCache.m_localPosA[i],newContactCache.m_localPosA[numContacts-1]);
- b3Swap(newContactCache.m_localPosB[i],newContactCache.m_localPosB[numContacts-1]);
- b3Swap(newContactCache.m_worldPosB[i],newContactCache.m_worldPosB[numContacts-1]);
- }
- b3Contact4Data_setNumPoints(&newContactCache,numContacts-1);
-
-}
-
-
-void b3ContactCache::refreshContactPoints(const b3Transform& trA,const b3Transform& trB, struct b3Contact4Data& contacts)
-{
-
- int numContacts = b3Contact4Data_getNumPoints(&contacts);
-
-
- int i;
- /// first refresh worldspace positions and distance
- for (i=numContacts-1;i>=0;i--)
- {
- b3Vector3 worldPosA = trA( contacts.m_localPosA[i]);
- b3Vector3 worldPosB = trB( contacts.m_localPosB[i]);
- contacts.m_worldPosB[i] = worldPosB;
- float distance = (worldPosA - worldPosB).dot(contacts.m_worldNormalOnB);
- contacts.m_worldPosB[i].w = distance;
- }
-
- /// then
- b3Scalar distance2d;
- b3Vector3 projectedDifference,projectedPoint;
- for (i=numContacts-1;i>=0;i--)
- {
- b3Vector3 worldPosA = trA( contacts.m_localPosA[i]);
- b3Vector3 worldPosB = trB( contacts.m_localPosB[i]);
- b3Vector3&pt = contacts.m_worldPosB[i];
- //contact becomes invalid when signed distance exceeds margin (projected on contactnormal direction)
- if (!validContactDistance(pt))
- {
- removeContactPoint(contacts,i);
- } else
- {
- //contact also becomes invalid when relative movement orthogonal to normal exceeds margin
- projectedPoint = worldPosA - contacts.m_worldNormalOnB * contacts.m_worldPosB[i].w;
- projectedDifference = contacts.m_worldPosB[i] - projectedPoint;
- distance2d = projectedDifference.dot(projectedDifference);
- if (distance2d > gContactBreakingThreshold*gContactBreakingThreshold )
- {
- removeContactPoint(contacts,i);
- } else
- {
- ////contact point processed callback
- //if (gContactProcessedCallback)
- // (*gContactProcessedCallback)(manifoldPoint,(void*)m_body0,(void*)m_body1);
- }
- }
- }
-
-
-}
-
-#endif
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.h
deleted file mode 100644
index a15fd0b2a9..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.h
+++ /dev/null
@@ -1,62 +0,0 @@
-
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_CONTACT_CACHE_H
-#define B3_CONTACT_CACHE_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3Transform.h"
-#include "Bullet3Common/b3AlignedAllocator.h"
-
-///maximum contact breaking and merging threshold
-extern b3Scalar gContactBreakingThreshold;
-
-#define MANIFOLD_CACHE_SIZE 4
-
-///b3ContactCache is a contact point cache, it stays persistent as long as objects are overlapping in the broadphase.
-///Those contact points are created by the collision narrow phase.
-///The cache can be empty, or hold 1,2,3 or 4 points. Some collision algorithms (GJK) might only add one point at a time.
-///updates/refreshes old contact points, and throw them away if necessary (distance becomes too large)
-///reduces the cache to 4 points, when more then 4 points are added, using following rules:
-///the contact point with deepest penetration is always kept, and it tries to maximuze the area covered by the points
-///note that some pairs of objects might have more then one contact manifold.
-B3_ATTRIBUTE_ALIGNED16(class)
-b3ContactCache
-{
- /// sort cached points so most isolated points come first
- int sortCachedPoints(const b3Vector3& pt);
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- int addManifoldPoint(const b3Vector3& newPoint);
-
- /*void replaceContactPoint(const b3Vector3& newPoint,int insertIndex)
- {
- b3Assert(validContactDistance(newPoint));
- m_pointCache[insertIndex] = newPoint;
- }
- */
-
- static bool validContactDistance(const b3Vector3& pt);
-
- /// calculated new worldspace coordinates and depth, and reject points that exceed the collision margin
- static void refreshContactPoints(const b3Transform& trA, const b3Transform& trB, struct b3Contact4Data& newContactCache);
-
- static void removeContactPoint(struct b3Contact4Data & newContactCache, int i);
-};
-
-#endif //B3_CONTACT_CACHE_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.cpp
deleted file mode 100644
index 54a104c5c8..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.cpp
+++ /dev/null
@@ -1,4408 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-bool findSeparatingAxisOnGpu = true;
-bool splitSearchSepAxisConcave = false;
-bool splitSearchSepAxisConvex = true;
-bool useMprGpu = true; //use mpr for edge-edge (+contact point) or sat. Needs testing on main OpenCL platforms, before enabling...
-bool bvhTraversalKernelGPU = true;
-bool findConcaveSeparatingAxisKernelGPU = true;
-bool clipConcaveFacesAndFindContactsCPU = false; //false;//true;
-bool clipConvexFacesAndFindContactsCPU = false; //false;//true;
-bool reduceConcaveContactsOnGPU = true; //false;
-bool reduceConvexContactsOnGPU = true; //false;
-bool findConvexClippingFacesGPU = true;
-bool useGjk = false; ///option for CPU/host testing, when findSeparatingAxisOnGpu = false
-bool useGjkContacts = false; //////option for CPU/host testing when findSeparatingAxisOnGpu = false
-
-static int myframecount = 0; ///for testing
-
-///This file was written by Erwin Coumans
-///Separating axis rest based on work from Pierre Terdiman, see
-///And contact clipping based on work from Simon Hobbs
-
-//#define B3_DEBUG_SAT_FACE
-
-//#define CHECK_ON_HOST
-
-#ifdef CHECK_ON_HOST
-//#define PERSISTENT_CONTACTS_HOST
-#endif
-
-int b3g_actualSATPairTests = 0;
-
-#include "b3ConvexHullContact.h"
-#include <string.h> //memcpy
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3MprPenetration.h"
-
-#include "Bullet3OpenCL/NarrowphaseCollision/b3ContactCache.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-
-typedef b3AlignedObjectArray<b3Vector3> b3VertexArray;
-
-#include <float.h> //for FLT_MAX
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-//#include "AdlQuaternion.h"
-
-#include "kernels/satKernels.h"
-#include "kernels/mprKernels.h"
-
-#include "kernels/satConcaveKernels.h"
-
-#include "kernels/satClipHullContacts.h"
-#include "kernels/bvhTraversal.h"
-#include "kernels/primitiveContacts.h"
-
-#include "Bullet3Geometry/b3AabbUtil.h"
-
-#define BT_NARROWPHASE_SAT_PATH "src/Bullet3OpenCL/NarrowphaseCollision/kernels/sat.cl"
-#define BT_NARROWPHASE_SAT_CONCAVE_PATH "src/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcave.cl"
-
-#define BT_NARROWPHASE_MPR_PATH "src/Bullet3OpenCL/NarrowphaseCollision/kernels/mpr.cl"
-
-#define BT_NARROWPHASE_CLIPHULL_PATH "src/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.cl"
-#define BT_NARROWPHASE_BVH_TRAVERSAL_PATH "src/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.cl"
-#define BT_NARROWPHASE_PRIMITIVE_CONTACT_PATH "src/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.cl"
-
-#ifndef __global
-#define __global
-#endif
-
-#ifndef __kernel
-#define __kernel
-#endif
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3BvhTraversal.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3FindConcaveSatAxis.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ClipFaces.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3NewContactReduction.h"
-
-#define dot3F4 b3Dot
-
-GpuSatCollision::GpuSatCollision(cl_context ctx, cl_device_id device, cl_command_queue q)
- : m_context(ctx),
- m_device(device),
- m_queue(q),
-
- m_findSeparatingAxisKernel(0),
- m_findSeparatingAxisVertexFaceKernel(0),
- m_findSeparatingAxisEdgeEdgeKernel(0),
- m_unitSphereDirections(m_context, m_queue),
-
- m_totalContactsOut(m_context, m_queue),
- m_sepNormals(m_context, m_queue),
- m_dmins(m_context, m_queue),
-
- m_hasSeparatingNormals(m_context, m_queue),
- m_concaveSepNormals(m_context, m_queue),
- m_concaveHasSeparatingNormals(m_context, m_queue),
- m_numConcavePairsOut(m_context, m_queue),
-
- m_gpuCompoundPairs(m_context, m_queue),
-
- m_gpuCompoundSepNormals(m_context, m_queue),
- m_gpuHasCompoundSepNormals(m_context, m_queue),
-
- m_numCompoundPairsOut(m_context, m_queue)
-{
- m_totalContactsOut.push_back(0);
-
- cl_int errNum = 0;
-
- if (1)
- {
- const char* mprSrc = mprKernelsCL;
-
- const char* srcConcave = satConcaveKernelsCL;
- char flags[1024] = {0};
- //#ifdef CL_PLATFORM_INTEL
- // sprintf(flags,"-g -s \"%s\"","C:/develop/bullet3_experiments2/opencl/gpu_narrowphase/kernels/sat.cl");
- //#endif
- m_mprPenetrationKernel = 0;
- m_findSeparatingAxisUnitSphereKernel = 0;
-
- if (useMprGpu)
- {
- cl_program mprProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, mprSrc, &errNum, flags, BT_NARROWPHASE_MPR_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- m_mprPenetrationKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, mprSrc, "mprPenetrationKernel", &errNum, mprProg);
- b3Assert(m_mprPenetrationKernel);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findSeparatingAxisUnitSphereKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, mprSrc, "findSeparatingAxisUnitSphereKernel", &errNum, mprProg);
- b3Assert(m_findSeparatingAxisUnitSphereKernel);
- b3Assert(errNum == CL_SUCCESS);
-
- int numDirections = sizeof(unitSphere162) / sizeof(b3Vector3);
- m_unitSphereDirections.resize(numDirections);
- m_unitSphereDirections.copyFromHostPointer(unitSphere162, numDirections, 0, true);
- }
-
- cl_program satProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, satKernelsCL, &errNum, flags, BT_NARROWPHASE_SAT_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- cl_program satConcaveProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, srcConcave, &errNum, flags, BT_NARROWPHASE_SAT_CONCAVE_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findSeparatingAxisKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, satKernelsCL, "findSeparatingAxisKernel", &errNum, satProg);
- b3Assert(m_findSeparatingAxisKernel);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findSeparatingAxisVertexFaceKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, satKernelsCL, "findSeparatingAxisVertexFaceKernel", &errNum, satProg);
- b3Assert(m_findSeparatingAxisVertexFaceKernel);
-
- m_findSeparatingAxisEdgeEdgeKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, satKernelsCL, "findSeparatingAxisEdgeEdgeKernel", &errNum, satProg);
- b3Assert(m_findSeparatingAxisVertexFaceKernel);
-
- m_findConcaveSeparatingAxisKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, satKernelsCL, "findConcaveSeparatingAxisKernel", &errNum, satProg);
- b3Assert(m_findConcaveSeparatingAxisKernel);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findConcaveSeparatingAxisVertexFaceKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcConcave, "findConcaveSeparatingAxisVertexFaceKernel", &errNum, satConcaveProg);
- b3Assert(m_findConcaveSeparatingAxisVertexFaceKernel);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findConcaveSeparatingAxisEdgeEdgeKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcConcave, "findConcaveSeparatingAxisEdgeEdgeKernel", &errNum, satConcaveProg);
- b3Assert(m_findConcaveSeparatingAxisEdgeEdgeKernel);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findCompoundPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, satKernelsCL, "findCompoundPairsKernel", &errNum, satProg);
- b3Assert(m_findCompoundPairsKernel);
- b3Assert(errNum == CL_SUCCESS);
- m_processCompoundPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, satKernelsCL, "processCompoundPairsKernel", &errNum, satProg);
- b3Assert(m_processCompoundPairsKernel);
- b3Assert(errNum == CL_SUCCESS);
- }
-
- if (1)
- {
- const char* srcClip = satClipKernelsCL;
-
- char flags[1024] = {0};
- //#ifdef CL_PLATFORM_INTEL
- // sprintf(flags,"-g -s \"%s\"","C:/develop/bullet3_experiments2/opencl/gpu_narrowphase/kernels/satClipHullContacts.cl");
- //#endif
-
- cl_program satClipContactsProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, srcClip, &errNum, flags, BT_NARROWPHASE_CLIPHULL_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- m_clipHullHullKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcClip, "clipHullHullKernel", &errNum, satClipContactsProg);
- b3Assert(errNum == CL_SUCCESS);
-
- m_clipCompoundsHullHullKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcClip, "clipCompoundsHullHullKernel", &errNum, satClipContactsProg);
- b3Assert(errNum == CL_SUCCESS);
-
- m_findClippingFacesKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcClip, "findClippingFacesKernel", &errNum, satClipContactsProg);
- b3Assert(errNum == CL_SUCCESS);
-
- m_clipFacesAndFindContacts = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcClip, "clipFacesAndFindContactsKernel", &errNum, satClipContactsProg);
- b3Assert(errNum == CL_SUCCESS);
-
- m_clipHullHullConcaveConvexKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcClip, "clipHullHullConcaveConvexKernel", &errNum, satClipContactsProg);
- b3Assert(errNum == CL_SUCCESS);
-
- // m_extractManifoldAndAddContactKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device,srcClip, "extractManifoldAndAddContactKernel",&errNum,satClipContactsProg);
- // b3Assert(errNum==CL_SUCCESS);
-
- m_newContactReductionKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcClip,
- "newContactReductionKernel", &errNum, satClipContactsProg);
- b3Assert(errNum == CL_SUCCESS);
- }
- else
- {
- m_clipHullHullKernel = 0;
- m_clipCompoundsHullHullKernel = 0;
- m_findClippingFacesKernel = 0;
- m_newContactReductionKernel = 0;
- m_clipFacesAndFindContacts = 0;
- m_clipHullHullConcaveConvexKernel = 0;
- // m_extractManifoldAndAddContactKernel = 0;
- }
-
- if (1)
- {
- const char* srcBvh = bvhTraversalKernelCL;
- cl_program bvhTraversalProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, srcBvh, &errNum, "", BT_NARROWPHASE_BVH_TRAVERSAL_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- m_bvhTraversalKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, srcBvh, "bvhTraversalKernel", &errNum, bvhTraversalProg, "");
- b3Assert(errNum == CL_SUCCESS);
- }
-
- {
- const char* primitiveContactsSrc = primitiveContactsKernelsCL;
- cl_program primitiveContactsProg = b3OpenCLUtils::compileCLProgramFromString(m_context, m_device, primitiveContactsSrc, &errNum, "", BT_NARROWPHASE_PRIMITIVE_CONTACT_PATH);
- b3Assert(errNum == CL_SUCCESS);
-
- m_primitiveContactsKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, primitiveContactsSrc, "primitiveContactsKernel", &errNum, primitiveContactsProg, "");
- b3Assert(errNum == CL_SUCCESS);
-
- m_findConcaveSphereContactsKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, primitiveContactsSrc, "findConcaveSphereContactsKernel", &errNum, primitiveContactsProg);
- b3Assert(errNum == CL_SUCCESS);
- b3Assert(m_findConcaveSphereContactsKernel);
-
- m_processCompoundPairsPrimitivesKernel = b3OpenCLUtils::compileCLKernelFromString(m_context, m_device, primitiveContactsSrc, "processCompoundPairsPrimitivesKernel", &errNum, primitiveContactsProg, "");
- b3Assert(errNum == CL_SUCCESS);
- b3Assert(m_processCompoundPairsPrimitivesKernel);
- }
-}
-
-GpuSatCollision::~GpuSatCollision()
-{
- if (m_findSeparatingAxisVertexFaceKernel)
- clReleaseKernel(m_findSeparatingAxisVertexFaceKernel);
-
- if (m_findSeparatingAxisEdgeEdgeKernel)
- clReleaseKernel(m_findSeparatingAxisEdgeEdgeKernel);
-
- if (m_findSeparatingAxisUnitSphereKernel)
- clReleaseKernel(m_findSeparatingAxisUnitSphereKernel);
-
- if (m_mprPenetrationKernel)
- clReleaseKernel(m_mprPenetrationKernel);
-
- if (m_findSeparatingAxisKernel)
- clReleaseKernel(m_findSeparatingAxisKernel);
-
- if (m_findConcaveSeparatingAxisVertexFaceKernel)
- clReleaseKernel(m_findConcaveSeparatingAxisVertexFaceKernel);
-
- if (m_findConcaveSeparatingAxisEdgeEdgeKernel)
- clReleaseKernel(m_findConcaveSeparatingAxisEdgeEdgeKernel);
-
- if (m_findConcaveSeparatingAxisKernel)
- clReleaseKernel(m_findConcaveSeparatingAxisKernel);
-
- if (m_findCompoundPairsKernel)
- clReleaseKernel(m_findCompoundPairsKernel);
-
- if (m_processCompoundPairsKernel)
- clReleaseKernel(m_processCompoundPairsKernel);
-
- if (m_findClippingFacesKernel)
- clReleaseKernel(m_findClippingFacesKernel);
-
- if (m_clipFacesAndFindContacts)
- clReleaseKernel(m_clipFacesAndFindContacts);
- if (m_newContactReductionKernel)
- clReleaseKernel(m_newContactReductionKernel);
- if (m_primitiveContactsKernel)
- clReleaseKernel(m_primitiveContactsKernel);
-
- if (m_findConcaveSphereContactsKernel)
- clReleaseKernel(m_findConcaveSphereContactsKernel);
-
- if (m_processCompoundPairsPrimitivesKernel)
- clReleaseKernel(m_processCompoundPairsPrimitivesKernel);
-
- if (m_clipHullHullKernel)
- clReleaseKernel(m_clipHullHullKernel);
- if (m_clipCompoundsHullHullKernel)
- clReleaseKernel(m_clipCompoundsHullHullKernel);
-
- if (m_clipHullHullConcaveConvexKernel)
- clReleaseKernel(m_clipHullHullConcaveConvexKernel);
- // if (m_extractManifoldAndAddContactKernel)
- // clReleaseKernel(m_extractManifoldAndAddContactKernel);
-
- if (m_bvhTraversalKernel)
- clReleaseKernel(m_bvhTraversalKernel);
-}
-
-struct MyTriangleCallback : public b3NodeOverlapCallback
-{
- int m_bodyIndexA;
- int m_bodyIndexB;
-
- virtual void processNode(int subPart, int triangleIndex)
- {
- printf("bodyIndexA %d, bodyIndexB %d\n", m_bodyIndexA, m_bodyIndexB);
- printf("triangleIndex %d\n", triangleIndex);
- }
-};
-
-#define float4 b3Vector3
-#define make_float4(x, y, z, w) b3MakeVector3(x, y, z, w)
-
-float signedDistanceFromPointToPlane(const float4& point, const float4& planeEqn, float4* closestPointOnFace)
-{
- float4 n = planeEqn;
- n[3] = 0.f;
- float dist = dot3F4(n, point) + planeEqn[3];
- *closestPointOnFace = point - dist * n;
- return dist;
-}
-
-#define cross3(a, b) (a.cross(b))
-b3Vector3 transform(const b3Vector3* v, const b3Vector3* pos, const b3Quaternion* orn)
-{
- b3Transform tr;
- tr.setIdentity();
- tr.setOrigin(*pos);
- tr.setRotation(*orn);
- b3Vector3 res = tr(*v);
- return res;
-}
-
-inline bool IsPointInPolygon(const float4& p,
- const b3GpuFace* face,
- const float4* baseVertex,
- const int* convexIndices,
- float4* out)
-{
- float4 a;
- float4 b;
- float4 ab;
- float4 ap;
- float4 v;
-
- float4 plane = b3MakeVector3(face->m_plane.x, face->m_plane.y, face->m_plane.z, 0.f);
-
- if (face->m_numIndices < 2)
- return false;
-
- float4 v0 = baseVertex[convexIndices[face->m_indexOffset + face->m_numIndices - 1]];
- b = v0;
-
- for (unsigned i = 0; i != face->m_numIndices; ++i)
- {
- a = b;
- float4 vi = baseVertex[convexIndices[face->m_indexOffset + i]];
- b = vi;
- ab = b - a;
- ap = p - a;
- v = cross3(ab, plane);
-
- if (b3Dot(ap, v) > 0.f)
- {
- float ab_m2 = b3Dot(ab, ab);
- float rt = ab_m2 != 0.f ? b3Dot(ab, ap) / ab_m2 : 0.f;
- if (rt <= 0.f)
- {
- *out = a;
- }
- else if (rt >= 1.f)
- {
- *out = b;
- }
- else
- {
- float s = 1.f - rt;
- out[0].x = s * a.x + rt * b.x;
- out[0].y = s * a.y + rt * b.y;
- out[0].z = s * a.z + rt * b.z;
- }
- return false;
- }
- }
- return true;
-}
-
-#define normalize3(a) (a.normalize())
-
-int extractManifoldSequentialGlobal(const float4* p, int nPoints, const float4& nearNormal, b3Int4* contactIdx)
-{
- if (nPoints == 0)
- return 0;
-
- if (nPoints <= 4)
- return nPoints;
-
- if (nPoints > 64)
- nPoints = 64;
-
- float4 center = b3MakeVector3(0, 0, 0, 0);
- {
- for (int i = 0; i < nPoints; i++)
- center += p[i];
- center /= (float)nPoints;
- }
-
- // sample 4 directions
-
- float4 aVector = p[0] - center;
- float4 u = cross3(nearNormal, aVector);
- float4 v = cross3(nearNormal, u);
- u = normalize3(u);
- v = normalize3(v);
-
- //keep point with deepest penetration
- float minW = FLT_MAX;
-
- int minIndex = -1;
-
- float4 maxDots;
- maxDots.x = FLT_MIN;
- maxDots.y = FLT_MIN;
- maxDots.z = FLT_MIN;
- maxDots.w = FLT_MIN;
-
- // idx, distance
- for (int ie = 0; ie < nPoints; ie++)
- {
- if (p[ie].w < minW)
- {
- minW = p[ie].w;
- minIndex = ie;
- }
- float f;
- float4 r = p[ie] - center;
- f = dot3F4(u, r);
- if (f < maxDots.x)
- {
- maxDots.x = f;
- contactIdx[0].x = ie;
- }
-
- f = dot3F4(-u, r);
- if (f < maxDots.y)
- {
- maxDots.y = f;
- contactIdx[0].y = ie;
- }
-
- f = dot3F4(v, r);
- if (f < maxDots.z)
- {
- maxDots.z = f;
- contactIdx[0].z = ie;
- }
-
- f = dot3F4(-v, r);
- if (f < maxDots.w)
- {
- maxDots.w = f;
- contactIdx[0].w = ie;
- }
- }
-
- if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)
- {
- //replace the first contact with minimum (todo: replace contact with least penetration)
- contactIdx[0].x = minIndex;
- }
-
- return 4;
-}
-
-#define MAX_VERTS 1024
-
-inline void project(const b3ConvexPolyhedronData& hull, const float4& pos, const b3Quaternion& orn, const float4& dir, const b3AlignedObjectArray<b3Vector3>& vertices, b3Scalar& min, b3Scalar& max)
-{
- min = FLT_MAX;
- max = -FLT_MAX;
- int numVerts = hull.m_numVertices;
-
- const float4 localDir = b3QuatRotate(orn.inverse(), dir);
-
- b3Scalar offset = dot3F4(pos, dir);
-
- for (int i = 0; i < numVerts; i++)
- {
- //b3Vector3 pt = trans * vertices[m_vertexOffset+i];
- //b3Scalar dp = pt.dot(dir);
- //b3Vector3 vertex = vertices[hull.m_vertexOffset+i];
- b3Scalar dp = dot3F4((float4&)vertices[hull.m_vertexOffset + i], localDir);
- //b3Assert(dp==dpL);
- if (dp < min) min = dp;
- if (dp > max) max = dp;
- }
- if (min > max)
- {
- b3Scalar tmp = min;
- min = max;
- max = tmp;
- }
- min += offset;
- max += offset;
-}
-
-static bool TestSepAxis(const b3ConvexPolyhedronData& hullA, const b3ConvexPolyhedronData& hullB,
- const float4& posA, const b3Quaternion& ornA,
- const float4& posB, const b3Quaternion& ornB,
- const float4& sep_axis, const b3AlignedObjectArray<b3Vector3>& verticesA, const b3AlignedObjectArray<b3Vector3>& verticesB, b3Scalar& depth)
-{
- b3Scalar Min0, Max0;
- b3Scalar Min1, Max1;
- project(hullA, posA, ornA, sep_axis, verticesA, Min0, Max0);
- project(hullB, posB, ornB, sep_axis, verticesB, Min1, Max1);
-
- if (Max0 < Min1 || Max1 < Min0)
- return false;
-
- b3Scalar d0 = Max0 - Min1;
- assert(d0 >= 0.0f);
- b3Scalar d1 = Max1 - Min0;
- assert(d1 >= 0.0f);
- depth = d0 < d1 ? d0 : d1;
- return true;
-}
-
-inline bool IsAlmostZero(const b3Vector3& v)
-{
- if (fabsf(v.x) > 1e-6 || fabsf(v.y) > 1e-6 || fabsf(v.z) > 1e-6) return false;
- return true;
-}
-
-static bool findSeparatingAxis(const b3ConvexPolyhedronData& hullA, const b3ConvexPolyhedronData& hullB,
- const float4& posA1,
- const b3Quaternion& ornA,
- const float4& posB1,
- const b3Quaternion& ornB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesA,
- const b3AlignedObjectArray<b3GpuFace>& facesA,
- const b3AlignedObjectArray<int>& indicesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesB,
- const b3AlignedObjectArray<b3GpuFace>& facesB,
- const b3AlignedObjectArray<int>& indicesB,
-
- b3Vector3& sep)
-{
- B3_PROFILE("findSeparatingAxis");
-
- b3g_actualSATPairTests++;
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
- //#ifdef TEST_INTERNAL_OBJECTS
- float4 c0local = (float4&)hullA.m_localCenter;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = (float4&)hullB.m_localCenter;
- float4 c1 = transform(&c1local, &posB, &ornB);
- const float4 deltaC2 = c0 - c1;
- //#endif
-
- b3Scalar dmin = FLT_MAX;
- int curPlaneTests = 0;
-
- int numFacesA = hullA.m_numFaces;
- // Test normals from hullA
- for (int i = 0; i < numFacesA; i++)
- {
- const float4& normal = (float4&)facesA[hullA.m_faceOffset + i].m_plane;
- float4 faceANormalWS = b3QuatRotate(ornA, normal);
-
- if (dot3F4(deltaC2, faceANormalWS) < 0)
- faceANormalWS *= -1.f;
-
- curPlaneTests++;
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, faceANormalWS, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- b3Scalar d;
- if (!TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, faceANormalWS, verticesA, verticesB, d))
- return false;
-
- if (d < dmin)
- {
- dmin = d;
- sep = (b3Vector3&)faceANormalWS;
- }
- }
-
- int numFacesB = hullB.m_numFaces;
- // Test normals from hullB
- for (int i = 0; i < numFacesB; i++)
- {
- float4 normal = (float4&)facesB[hullB.m_faceOffset + i].m_plane;
- float4 WorldNormal = b3QuatRotate(ornB, normal);
-
- if (dot3F4(deltaC2, WorldNormal) < 0)
- {
- WorldNormal *= -1.f;
- }
- curPlaneTests++;
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, WorldNormal, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- b3Scalar d;
- if (!TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, WorldNormal, verticesA, verticesB, d))
- return false;
-
- if (d < dmin)
- {
- dmin = d;
- sep = (b3Vector3&)WorldNormal;
- }
- }
-
- int curEdgeEdge = 0;
- // Test edges
- for (int e0 = 0; e0 < hullA.m_numUniqueEdges; e0++)
- {
- const float4& edge0 = (float4&)uniqueEdgesA[hullA.m_uniqueEdgesOffset + e0];
- float4 edge0World = b3QuatRotate(ornA, (float4&)edge0);
-
- for (int e1 = 0; e1 < hullB.m_numUniqueEdges; e1++)
- {
- const b3Vector3 edge1 = uniqueEdgesB[hullB.m_uniqueEdgesOffset + e1];
- float4 edge1World = b3QuatRotate(ornB, (float4&)edge1);
-
- float4 crossje = cross3(edge0World, edge1World);
-
- curEdgeEdge++;
- if (!IsAlmostZero((b3Vector3&)crossje))
- {
- crossje = normalize3(crossje);
- if (dot3F4(deltaC2, crossje) < 0)
- crossje *= -1.f;
-
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, Cross, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- b3Scalar dist;
- if (!TestSepAxis(hullA, hullB, posA, ornA, posB, ornB, crossje, verticesA, verticesB, dist))
- return false;
-
- if (dist < dmin)
- {
- dmin = dist;
- sep = (b3Vector3&)crossje;
- }
- }
- }
- }
-
- if ((dot3F4(-deltaC2, (float4&)sep)) > 0.0f)
- sep = -sep;
-
- return true;
-}
-
-bool findSeparatingAxisEdgeEdge(__global const b3ConvexPolyhedronData* hullA, __global const b3ConvexPolyhedronData* hullB,
- const b3Float4& posA1,
- const b3Quat& ornA,
- const b3Float4& posB1,
- const b3Quat& ornB,
- const b3Float4& DeltaC2,
- __global const b3AlignedObjectArray<float4>& vertices,
- __global const b3AlignedObjectArray<float4>& uniqueEdges,
- __global const b3AlignedObjectArray<b3GpuFace>& faces,
- __global const b3AlignedObjectArray<int>& indices,
- float4* sep,
- float* dmin)
-{
- // int i = get_global_id(0);
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- //int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test edges
- for (int e0 = 0; e0 < hullA->m_numUniqueEdges; e0++)
- {
- const float4 edge0 = uniqueEdges[hullA->m_uniqueEdgesOffset + e0];
- float4 edge0World = b3QuatRotate(ornA, edge0);
-
- for (int e1 = 0; e1 < hullB->m_numUniqueEdges; e1++)
- {
- const float4 edge1 = uniqueEdges[hullB->m_uniqueEdgesOffset + e1];
- float4 edge1World = b3QuatRotate(ornB, edge1);
-
- float4 crossje = cross3(edge0World, edge1World);
-
- curEdgeEdge++;
- if (!IsAlmostZero(crossje))
- {
- crossje = normalize3(crossje);
- if (dot3F4(DeltaC2, crossje) < 0)
- crossje *= -1.f;
-
- float dist;
- bool result = true;
- {
- float Min0, Max0;
- float Min1, Max1;
- project(*hullA, posA, ornA, crossje, vertices, Min0, Max0);
- project(*hullB, posB, ornB, crossje, vertices, Min1, Max1);
-
- if (Max0 < Min1 || Max1 < Min0)
- result = false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0 < d1 ? d0 : d1;
- result = true;
- }
-
- if (dist < *dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
- }
-
- if ((dot3F4(-DeltaC2, *sep)) > 0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-__inline float4 lerp3(const float4& a, const float4& b, float t)
-{
- return b3MakeVector3(a.x + (b.x - a.x) * t,
- a.y + (b.y - a.y) * t,
- a.z + (b.z - a.z) * t,
- 0.f);
-}
-
-// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut
-int clipFace(const float4* pVtxIn, int numVertsIn, float4& planeNormalWS, float planeEqWS, float4* ppVtxOut)
-{
- int ve;
- float ds, de;
- int numVertsOut = 0;
- if (numVertsIn < 2)
- return 0;
-
- float4 firstVertex = pVtxIn[numVertsIn - 1];
- float4 endVertex = pVtxIn[0];
-
- ds = dot3F4(planeNormalWS, firstVertex) + planeEqWS;
-
- for (ve = 0; ve < numVertsIn; ve++)
- {
- endVertex = pVtxIn[ve];
-
- de = dot3F4(planeNormalWS, endVertex) + planeEqWS;
-
- if (ds < 0)
- {
- if (de < 0)
- {
- // Start < 0, end < 0, so output endVertex
- ppVtxOut[numVertsOut++] = endVertex;
- }
- else
- {
- // Start < 0, end >= 0, so output intersection
- ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex, (ds * 1.f / (ds - de)));
- }
- }
- else
- {
- if (de < 0)
- {
- // Start >= 0, end < 0 so output intersection and end
- ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex, (ds * 1.f / (ds - de)));
- ppVtxOut[numVertsOut++] = endVertex;
- }
- }
- firstVertex = endVertex;
- ds = de;
- }
- return numVertsOut;
-}
-
-int clipFaceAgainstHull(const float4& separatingNormal, const b3ConvexPolyhedronData* hullA,
- const float4& posA, const b3Quaternion& ornA, float4* worldVertsB1, int numWorldVertsB1,
- float4* worldVertsB2, int capacityWorldVertsB2,
- const float minDist, float maxDist,
- const b3AlignedObjectArray<float4>& verticesA, const b3AlignedObjectArray<b3GpuFace>& facesA, const b3AlignedObjectArray<int>& indicesA,
- //const float4* verticesB, const b3GpuFace* facesB, const int* indicesB,
- float4* contactsOut,
- int contactCapacity)
-{
- int numContactsOut = 0;
-
- float4* pVtxIn = worldVertsB1;
- float4* pVtxOut = worldVertsB2;
-
- int numVertsIn = numWorldVertsB1;
- int numVertsOut = 0;
-
- int closestFaceA = -1;
- {
- float dmin = FLT_MAX;
- for (int face = 0; face < hullA->m_numFaces; face++)
- {
- const float4 Normal = b3MakeVector3(
- facesA[hullA->m_faceOffset + face].m_plane.x,
- facesA[hullA->m_faceOffset + face].m_plane.y,
- facesA[hullA->m_faceOffset + face].m_plane.z, 0.f);
- const float4 faceANormalWS = b3QuatRotate(ornA, Normal);
-
- float d = dot3F4(faceANormalWS, separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- }
- }
- }
- if (closestFaceA < 0)
- return numContactsOut;
-
- b3GpuFace polyA = facesA[hullA->m_faceOffset + closestFaceA];
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
- // int numContacts = numWorldVertsB1;
- int numVerticesA = polyA.m_numIndices;
- for (int e0 = 0; e0 < numVerticesA; e0++)
- {
- const float4 a = verticesA[hullA->m_vertexOffset + indicesA[polyA.m_indexOffset + e0]];
- const float4 b = verticesA[hullA->m_vertexOffset + indicesA[polyA.m_indexOffset + ((e0 + 1) % numVerticesA)]];
- const float4 edge0 = a - b;
- const float4 WorldEdge0 = b3QuatRotate(ornA, edge0);
- float4 planeNormalA = make_float4(polyA.m_plane.x, polyA.m_plane.y, polyA.m_plane.z, 0.f);
- float4 worldPlaneAnormal1 = b3QuatRotate(ornA, planeNormalA);
-
- float4 planeNormalWS1 = -cross3(WorldEdge0, worldPlaneAnormal1);
- float4 worldA1 = transform(&a, &posA, &ornA);
- float planeEqWS1 = -dot3F4(worldA1, planeNormalWS1);
-
- float4 planeNormalWS = planeNormalWS1;
- float planeEqWS = planeEqWS1;
-
- //clip face
- //clipFace(*pVtxIn, *pVtxOut,planeNormalWS,planeEqWS);
- numVertsOut = clipFace(pVtxIn, numVertsIn, planeNormalWS, planeEqWS, pVtxOut);
-
- //btSwap(pVtxIn,pVtxOut);
- float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsIn = numVertsOut;
- numVertsOut = 0;
- }
-
- // only keep points that are behind the witness face
- {
- float4 localPlaneNormal = make_float4(polyA.m_plane.x, polyA.m_plane.y, polyA.m_plane.z, 0.f);
- float localPlaneEq = polyA.m_plane.w;
- float4 planeNormalWS = b3QuatRotate(ornA, localPlaneNormal);
- float planeEqWS = localPlaneEq - dot3F4(planeNormalWS, posA);
- for (int i = 0; i < numVertsIn; i++)
- {
- float depth = dot3F4(planeNormalWS, pVtxIn[i]) + planeEqWS;
- if (depth <= minDist)
- {
- depth = minDist;
- }
- if (numContactsOut < contactCapacity)
- {
- if (depth <= maxDist)
- {
- float4 pointInWorld = pVtxIn[i];
- //resultOut.addContactPoint(separatingNormal,point,depth);
- contactsOut[numContactsOut++] = b3MakeVector3(pointInWorld.x, pointInWorld.y, pointInWorld.z, depth);
- //printf("depth=%f\n",depth);
- }
- }
- else
- {
- b3Error("exceeding contact capacity (%d,%df)\n", numContactsOut, contactCapacity);
- }
- }
- }
-
- return numContactsOut;
-}
-
-static int clipHullAgainstHull(const float4& separatingNormal,
- const b3ConvexPolyhedronData& hullA, const b3ConvexPolyhedronData& hullB,
- const float4& posA, const b3Quaternion& ornA, const float4& posB, const b3Quaternion& ornB,
- float4* worldVertsB1, float4* worldVertsB2, int capacityWorldVerts,
- const float minDist, float maxDist,
- const b3AlignedObjectArray<float4>& verticesA, const b3AlignedObjectArray<b3GpuFace>& facesA, const b3AlignedObjectArray<int>& indicesA,
- const b3AlignedObjectArray<float4>& verticesB, const b3AlignedObjectArray<b3GpuFace>& facesB, const b3AlignedObjectArray<int>& indicesB,
-
- float4* contactsOut,
- int contactCapacity)
-{
- int numContactsOut = 0;
- int numWorldVertsB1 = 0;
-
- B3_PROFILE("clipHullAgainstHull");
-
- // float curMaxDist=maxDist;
- int closestFaceB = -1;
- float dmax = -FLT_MAX;
-
- {
- //B3_PROFILE("closestFaceB");
- if (hullB.m_numFaces != 1)
- {
- //printf("wtf\n");
- }
- static bool once = true;
- //printf("separatingNormal=%f,%f,%f\n",separatingNormal.x,separatingNormal.y,separatingNormal.z);
-
- for (int face = 0; face < hullB.m_numFaces; face++)
- {
-#ifdef BT_DEBUG_SAT_FACE
- if (once)
- printf("face %d\n", face);
- const b3GpuFace* faceB = &facesB[hullB.m_faceOffset + face];
- if (once)
- {
- for (int i = 0; i < faceB->m_numIndices; i++)
- {
- float4 vert = verticesB[hullB.m_vertexOffset + indicesB[faceB->m_indexOffset + i]];
- printf("vert[%d] = %f,%f,%f\n", i, vert.x, vert.y, vert.z);
- }
- }
-#endif //BT_DEBUG_SAT_FACE \
- //if (facesB[hullB.m_faceOffset+face].m_numIndices>2)
- {
- const float4 Normal = b3MakeVector3(facesB[hullB.m_faceOffset + face].m_plane.x,
- facesB[hullB.m_faceOffset + face].m_plane.y, facesB[hullB.m_faceOffset + face].m_plane.z, 0.f);
- const float4 WorldNormal = b3QuatRotate(ornB, Normal);
-#ifdef BT_DEBUG_SAT_FACE
- if (once)
- printf("faceNormal = %f,%f,%f\n", Normal.x, Normal.y, Normal.z);
-#endif
- float d = dot3F4(WorldNormal, separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
- once = false;
- }
-
- b3Assert(closestFaceB >= 0);
- {
- //B3_PROFILE("worldVertsB1");
- const b3GpuFace& polyB = facesB[hullB.m_faceOffset + closestFaceB];
- const int numVertices = polyB.m_numIndices;
- for (int e0 = 0; e0 < numVertices; e0++)
- {
- const float4& b = verticesB[hullB.m_vertexOffset + indicesB[polyB.m_indexOffset + e0]];
- worldVertsB1[numWorldVertsB1++] = transform(&b, &posB, &ornB);
- }
- }
-
- if (closestFaceB >= 0)
- {
- //B3_PROFILE("clipFaceAgainstHull");
- numContactsOut = clipFaceAgainstHull((float4&)separatingNormal, &hullA,
- posA, ornA,
- worldVertsB1, numWorldVertsB1, worldVertsB2, capacityWorldVerts, minDist, maxDist,
- verticesA, facesA, indicesA,
- contactsOut, contactCapacity);
- }
-
- return numContactsOut;
-}
-
-#define PARALLEL_SUM(v, n) \
- for (int j = 1; j < n; j++) v[0] += v[j];
-#define PARALLEL_DO(execution, n) \
- for (int ie = 0; ie < n; ie++) \
- { \
- execution; \
- }
-#define REDUCE_MAX(v, n) \
- { \
- int i = 0; \
- for (int offset = 0; offset < n; offset++) v[i] = (v[i].y > v[i + offset].y) ? v[i] : v[i + offset]; \
- }
-#define REDUCE_MIN(v, n) \
- { \
- int i = 0; \
- for (int offset = 0; offset < n; offset++) v[i] = (v[i].y < v[i + offset].y) ? v[i] : v[i + offset]; \
- }
-
-int extractManifold(const float4* p, int nPoints, const float4& nearNormal, b3Int4* contactIdx)
-{
- if (nPoints == 0)
- return 0;
-
- if (nPoints <= 4)
- return nPoints;
-
- if (nPoints > 64)
- nPoints = 64;
-
- float4 center = make_float4(0, 0, 0, 0);
- {
- for (int i = 0; i < nPoints; i++)
- center += p[i];
- center /= (float)nPoints;
- }
-
- // sample 4 directions
-
- float4 aVector = p[0] - center;
- float4 u = cross3(nearNormal, aVector);
- float4 v = cross3(nearNormal, u);
- u = normalize3(u);
- v = normalize3(v);
-
- //keep point with deepest penetration
- float minW = FLT_MAX;
-
- int minIndex = -1;
-
- float4 maxDots;
- maxDots.x = FLT_MIN;
- maxDots.y = FLT_MIN;
- maxDots.z = FLT_MIN;
- maxDots.w = FLT_MIN;
-
- // idx, distance
- for (int ie = 0; ie < nPoints; ie++)
- {
- if (p[ie].w < minW)
- {
- minW = p[ie].w;
- minIndex = ie;
- }
- float f;
- float4 r = p[ie] - center;
- f = dot3F4(u, r);
- if (f < maxDots.x)
- {
- maxDots.x = f;
- contactIdx[0].x = ie;
- }
-
- f = dot3F4(-u, r);
- if (f < maxDots.y)
- {
- maxDots.y = f;
- contactIdx[0].y = ie;
- }
-
- f = dot3F4(v, r);
- if (f < maxDots.z)
- {
- maxDots.z = f;
- contactIdx[0].z = ie;
- }
-
- f = dot3F4(-v, r);
- if (f < maxDots.w)
- {
- maxDots.w = f;
- contactIdx[0].w = ie;
- }
- }
-
- if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)
- {
- //replace the first contact with minimum (todo: replace contact with least penetration)
- contactIdx[0].x = minIndex;
- }
-
- return 4;
-}
-
-int clipHullHullSingle(
- int bodyIndexA, int bodyIndexB,
- const float4& posA,
- const b3Quaternion& ornA,
- const float4& posB,
- const b3Quaternion& ornB,
-
- int collidableIndexA, int collidableIndexB,
-
- const b3AlignedObjectArray<b3RigidBodyData>* bodyBuf,
- b3AlignedObjectArray<b3Contact4>* globalContactOut,
- int& nContacts,
-
- const b3AlignedObjectArray<b3ConvexPolyhedronData>& hostConvexDataA,
- const b3AlignedObjectArray<b3ConvexPolyhedronData>& hostConvexDataB,
-
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesA,
- const b3AlignedObjectArray<b3GpuFace>& facesA,
- const b3AlignedObjectArray<int>& indicesA,
-
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdgesB,
- const b3AlignedObjectArray<b3GpuFace>& facesB,
- const b3AlignedObjectArray<int>& indicesB,
-
- const b3AlignedObjectArray<b3Collidable>& hostCollidablesA,
- const b3AlignedObjectArray<b3Collidable>& hostCollidablesB,
- const b3Vector3& sepNormalWorldSpace,
- int maxContactCapacity)
-{
- int contactIndex = -1;
- b3ConvexPolyhedronData hullA, hullB;
-
- b3Collidable colA = hostCollidablesA[collidableIndexA];
- hullA = hostConvexDataA[colA.m_shapeIndex];
- //printf("numvertsA = %d\n",hullA.m_numVertices);
-
- b3Collidable colB = hostCollidablesB[collidableIndexB];
- hullB = hostConvexDataB[colB.m_shapeIndex];
- //printf("numvertsB = %d\n",hullB.m_numVertices);
-
- float4 contactsOut[MAX_VERTS];
- int localContactCapacity = MAX_VERTS;
-
-#ifdef _WIN32
- b3Assert(_finite(bodyBuf->at(bodyIndexA).m_pos.x));
- b3Assert(_finite(bodyBuf->at(bodyIndexB).m_pos.x));
-#endif
-
- {
- float4 worldVertsB1[MAX_VERTS];
- float4 worldVertsB2[MAX_VERTS];
- int capacityWorldVerts = MAX_VERTS;
-
- float4 hostNormal = make_float4(sepNormalWorldSpace.x, sepNormalWorldSpace.y, sepNormalWorldSpace.z, 0.f);
- int shapeA = hostCollidablesA[collidableIndexA].m_shapeIndex;
- int shapeB = hostCollidablesB[collidableIndexB].m_shapeIndex;
-
- b3Scalar minDist = -1;
- b3Scalar maxDist = 0.;
-
- b3Transform trA, trB;
- {
- //B3_PROFILE("transform computation");
- //trA.setIdentity();
- trA.setOrigin(b3MakeVector3(posA.x, posA.y, posA.z));
- trA.setRotation(b3Quaternion(ornA.x, ornA.y, ornA.z, ornA.w));
-
- //trB.setIdentity();
- trB.setOrigin(b3MakeVector3(posB.x, posB.y, posB.z));
- trB.setRotation(b3Quaternion(ornB.x, ornB.y, ornB.z, ornB.w));
- }
-
- b3Quaternion trAorn = trA.getRotation();
- b3Quaternion trBorn = trB.getRotation();
-
- int numContactsOut = clipHullAgainstHull(hostNormal,
- hostConvexDataA.at(shapeA),
- hostConvexDataB.at(shapeB),
- (float4&)trA.getOrigin(), (b3Quaternion&)trAorn,
- (float4&)trB.getOrigin(), (b3Quaternion&)trBorn,
- worldVertsB1, worldVertsB2, capacityWorldVerts,
- minDist, maxDist,
- verticesA, facesA, indicesA,
- verticesB, facesB, indicesB,
-
- contactsOut, localContactCapacity);
-
- if (numContactsOut > 0)
- {
- B3_PROFILE("overlap");
-
- float4 normalOnSurfaceB = (float4&)hostNormal;
-
- b3Int4 contactIdx;
- contactIdx.x = 0;
- contactIdx.y = 1;
- contactIdx.z = 2;
- contactIdx.w = 3;
-
- int numPoints = 0;
-
- {
- // B3_PROFILE("extractManifold");
- numPoints = extractManifold(contactsOut, numContactsOut, normalOnSurfaceB, &contactIdx);
- }
-
- b3Assert(numPoints);
-
- if (nContacts < maxContactCapacity)
- {
- contactIndex = nContacts;
- globalContactOut->expand();
- b3Contact4& contact = globalContactOut->at(nContacts);
- contact.m_batchIdx = 0; //i;
- contact.m_bodyAPtrAndSignBit = (bodyBuf->at(bodyIndexA).m_invMass == 0) ? -bodyIndexA : bodyIndexA;
- contact.m_bodyBPtrAndSignBit = (bodyBuf->at(bodyIndexB).m_invMass == 0) ? -bodyIndexB : bodyIndexB;
-
- contact.m_frictionCoeffCmp = 45874;
- contact.m_restituitionCoeffCmp = 0;
-
- // float distance = 0.f;
- for (int p = 0; p < numPoints; p++)
- {
- contact.m_worldPosB[p] = contactsOut[contactIdx.s[p]]; //check if it is actually on B
- contact.m_worldNormalOnB = normalOnSurfaceB;
- }
- //printf("bodyIndexA %d,bodyIndexB %d,normal=%f,%f,%f numPoints %d\n",bodyIndexA,bodyIndexB,normalOnSurfaceB.x,normalOnSurfaceB.y,normalOnSurfaceB.z,numPoints);
- contact.m_worldNormalOnB.w = (b3Scalar)numPoints;
- nContacts++;
- }
- else
- {
- b3Error("Error: exceeding contact capacity (%d/%d)\n", nContacts, maxContactCapacity);
- }
- }
- }
- return contactIndex;
-}
-
-void computeContactPlaneConvex(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3RigidBodyData* rigidBodies,
- const b3Collidable* collidables,
- const b3ConvexPolyhedronData* convexShapes,
- const b3Vector3* convexVertices,
- const int* convexIndices,
- const b3GpuFace* faces,
- b3Contact4* globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity)
-{
- int shapeIndex = collidables[collidableIndexB].m_shapeIndex;
- const b3ConvexPolyhedronData* hullB = &convexShapes[shapeIndex];
-
- b3Vector3 posB = rigidBodies[bodyIndexB].m_pos;
- b3Quaternion ornB = rigidBodies[bodyIndexB].m_quat;
- b3Vector3 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat;
-
- // int numContactsOut = 0;
- // int numWorldVertsB1= 0;
-
- b3Vector3 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane;
- b3Vector3 planeNormal = b3MakeVector3(planeEq.x, planeEq.y, planeEq.z);
- b3Vector3 planeNormalWorld = b3QuatRotate(ornA, planeNormal);
- float planeConstant = planeEq.w;
- b3Transform convexWorldTransform;
- convexWorldTransform.setIdentity();
- convexWorldTransform.setOrigin(posB);
- convexWorldTransform.setRotation(ornB);
- b3Transform planeTransform;
- planeTransform.setIdentity();
- planeTransform.setOrigin(posA);
- planeTransform.setRotation(ornA);
-
- b3Transform planeInConvex;
- planeInConvex = convexWorldTransform.inverse() * planeTransform;
- b3Transform convexInPlane;
- convexInPlane = planeTransform.inverse() * convexWorldTransform;
-
- b3Vector3 planeNormalInConvex = planeInConvex.getBasis() * -planeNormal;
- float maxDot = -1e30;
- int hitVertex = -1;
- b3Vector3 hitVtx;
-
-#define MAX_PLANE_CONVEX_POINTS 64
-
- b3Vector3 contactPoints[MAX_PLANE_CONVEX_POINTS];
- int numPoints = 0;
-
- b3Int4 contactIdx;
- contactIdx.s[0] = 0;
- contactIdx.s[1] = 1;
- contactIdx.s[2] = 2;
- contactIdx.s[3] = 3;
-
- for (int i = 0; i < hullB->m_numVertices; i++)
- {
- b3Vector3 vtx = convexVertices[hullB->m_vertexOffset + i];
- float curDot = vtx.dot(planeNormalInConvex);
-
- if (curDot > maxDot)
- {
- hitVertex = i;
- maxDot = curDot;
- hitVtx = vtx;
- //make sure the deepest points is always included
- if (numPoints == MAX_PLANE_CONVEX_POINTS)
- numPoints--;
- }
-
- if (numPoints < MAX_PLANE_CONVEX_POINTS)
- {
- b3Vector3 vtxWorld = convexWorldTransform * vtx;
- b3Vector3 vtxInPlane = planeTransform.inverse() * vtxWorld;
- float dist = planeNormal.dot(vtxInPlane) - planeConstant;
- if (dist < 0.f)
- {
- vtxWorld.w = dist;
- contactPoints[numPoints] = vtxWorld;
- numPoints++;
- }
- }
- }
-
- int numReducedPoints = 0;
-
- numReducedPoints = numPoints;
-
- if (numPoints > 4)
- {
- numReducedPoints = extractManifoldSequentialGlobal(contactPoints, numPoints, planeNormalInConvex, &contactIdx);
- }
- int dstIdx;
- // dstIdx = nGlobalContactsOut++;//AppendInc( nGlobalContactsOut, dstIdx );
-
- if (numReducedPoints > 0)
- {
- if (nGlobalContactsOut < maxContactCapacity)
- {
- dstIdx = nGlobalContactsOut;
- nGlobalContactsOut++;
-
- b3Contact4* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -planeNormalWorld;
- c->setFrictionCoeff(0.7);
- c->setRestituitionCoeff(0.f);
-
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass == 0 ? -bodyIndexA : bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass == 0 ? -bodyIndexB : bodyIndexB;
- for (int i = 0; i < numReducedPoints; i++)
- {
- b3Vector3 pOnB1 = contactPoints[contactIdx.s[i]];
- c->m_worldPosB[i] = pOnB1;
- }
- c->m_worldNormalOnB.w = (b3Scalar)numReducedPoints;
- } //if (dstIdx < numPairs)
- }
-
- // printf("computeContactPlaneConvex\n");
-}
-
-B3_FORCE_INLINE b3Vector3 MyUnQuantize(const unsigned short* vecIn, const b3Vector3& quantization, const b3Vector3& bvhAabbMin)
-{
- b3Vector3 vecOut;
- vecOut.setValue(
- (b3Scalar)(vecIn[0]) / (quantization.x),
- (b3Scalar)(vecIn[1]) / (quantization.y),
- (b3Scalar)(vecIn[2]) / (quantization.z));
- vecOut += bvhAabbMin;
- return vecOut;
-}
-
-void traverseTreeTree()
-{
-}
-
-#include "Bullet3Common/shared/b3Mat3x3.h"
-
-int numAabbChecks = 0;
-int maxNumAabbChecks = 0;
-int maxDepth = 0;
-
-// work-in-progress
-__kernel void findCompoundPairsKernel(
- int pairIndex,
- int bodyIndexA,
- int bodyIndexB,
- int collidableIndexA,
- int collidableIndexB,
- __global const b3RigidBodyData* rigidBodies,
- __global const b3Collidable* collidables,
- __global const b3ConvexPolyhedronData* convexShapes,
- __global const b3AlignedObjectArray<b3Float4>& vertices,
- __global const b3AlignedObjectArray<b3Aabb>& aabbsWorldSpace,
- __global const b3AlignedObjectArray<b3Aabb>& aabbsLocalSpace,
- __global const b3GpuChildShape* gpuChildShapes,
- __global b3Int4* gpuCompoundPairsOut,
- __global int* numCompoundPairsOut,
- int maxNumCompoundPairsCapacity,
- b3AlignedObjectArray<b3QuantizedBvhNode>& treeNodesCPU,
- b3AlignedObjectArray<b3BvhSubtreeInfo>& subTreesCPU,
- b3AlignedObjectArray<b3BvhInfo>& bvhInfoCPU)
-{
- numAabbChecks = 0;
- maxNumAabbChecks = 0;
- // int i = pairIndex;
- {
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass == 0) && (rigidBodies[bodyIndexB].m_invMass == 0))
- {
- return;
- }
-
- if ((collidables[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS) && (collidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS))
- {
- int bvhA = collidables[collidableIndexA].m_compoundBvhIndex;
- int bvhB = collidables[collidableIndexB].m_compoundBvhIndex;
- int numSubTreesA = bvhInfoCPU[bvhA].m_numSubTrees;
- int subTreesOffsetA = bvhInfoCPU[bvhA].m_subTreeOffset;
- int subTreesOffsetB = bvhInfoCPU[bvhB].m_subTreeOffset;
-
- int numSubTreesB = bvhInfoCPU[bvhB].m_numSubTrees;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
-
- b3Transform transA;
- transA.setIdentity();
- transA.setOrigin(posA);
- transA.setRotation(ornA);
-
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- b3Transform transB;
- transB.setIdentity();
- transB.setOrigin(posB);
- transB.setRotation(ornB);
-
- for (int p = 0; p < numSubTreesA; p++)
- {
- b3BvhSubtreeInfo subtreeA = subTreesCPU[subTreesOffsetA + p];
- //bvhInfoCPU[bvhA].m_quantization
- b3Vector3 treeAminLocal = MyUnQuantize(subtreeA.m_quantizedAabbMin, bvhInfoCPU[bvhA].m_quantization, bvhInfoCPU[bvhA].m_aabbMin);
- b3Vector3 treeAmaxLocal = MyUnQuantize(subtreeA.m_quantizedAabbMax, bvhInfoCPU[bvhA].m_quantization, bvhInfoCPU[bvhA].m_aabbMin);
-
- b3Vector3 aabbAMinOut, aabbAMaxOut;
- float margin = 0.f;
- b3TransformAabb2(treeAminLocal, treeAmaxLocal, margin, transA.getOrigin(), transA.getRotation(), &aabbAMinOut, &aabbAMaxOut);
-
- for (int q = 0; q < numSubTreesB; q++)
- {
- b3BvhSubtreeInfo subtreeB = subTreesCPU[subTreesOffsetB + q];
-
- b3Vector3 treeBminLocal = MyUnQuantize(subtreeB.m_quantizedAabbMin, bvhInfoCPU[bvhB].m_quantization, bvhInfoCPU[bvhB].m_aabbMin);
- b3Vector3 treeBmaxLocal = MyUnQuantize(subtreeB.m_quantizedAabbMax, bvhInfoCPU[bvhB].m_quantization, bvhInfoCPU[bvhB].m_aabbMin);
-
- b3Vector3 aabbBMinOut, aabbBMaxOut;
- float margin = 0.f;
- b3TransformAabb2(treeBminLocal, treeBmaxLocal, margin, transB.getOrigin(), transB.getRotation(), &aabbBMinOut, &aabbBMaxOut);
-
- numAabbChecks = 0;
- bool aabbOverlap = b3TestAabbAgainstAabb(aabbAMinOut, aabbAMaxOut, aabbBMinOut, aabbBMaxOut);
- if (aabbOverlap)
- {
- int startNodeIndexA = subtreeA.m_rootNodeIndex + bvhInfoCPU[bvhA].m_nodeOffset;
- // int endNodeIndexA = startNodeIndexA+subtreeA.m_subtreeSize;
-
- int startNodeIndexB = subtreeB.m_rootNodeIndex + bvhInfoCPU[bvhB].m_nodeOffset;
- // int endNodeIndexB = startNodeIndexB+subtreeB.m_subtreeSize;
-
- b3AlignedObjectArray<b3Int2> nodeStack;
- b3Int2 node0;
- node0.x = startNodeIndexA;
- node0.y = startNodeIndexB;
-
- int maxStackDepth = 1024;
- nodeStack.resize(maxStackDepth);
- int depth = 0;
- nodeStack[depth++] = node0;
-
- do
- {
- if (depth > maxDepth)
- {
- maxDepth = depth;
- printf("maxDepth=%d\n", maxDepth);
- }
- b3Int2 node = nodeStack[--depth];
-
- b3Vector3 aMinLocal = MyUnQuantize(treeNodesCPU[node.x].m_quantizedAabbMin, bvhInfoCPU[bvhA].m_quantization, bvhInfoCPU[bvhA].m_aabbMin);
- b3Vector3 aMaxLocal = MyUnQuantize(treeNodesCPU[node.x].m_quantizedAabbMax, bvhInfoCPU[bvhA].m_quantization, bvhInfoCPU[bvhA].m_aabbMin);
-
- b3Vector3 bMinLocal = MyUnQuantize(treeNodesCPU[node.y].m_quantizedAabbMin, bvhInfoCPU[bvhB].m_quantization, bvhInfoCPU[bvhB].m_aabbMin);
- b3Vector3 bMaxLocal = MyUnQuantize(treeNodesCPU[node.y].m_quantizedAabbMax, bvhInfoCPU[bvhB].m_quantization, bvhInfoCPU[bvhB].m_aabbMin);
-
- float margin = 0.f;
- b3Vector3 aabbAMinOut, aabbAMaxOut;
- b3TransformAabb2(aMinLocal, aMaxLocal, margin, transA.getOrigin(), transA.getRotation(), &aabbAMinOut, &aabbAMaxOut);
-
- b3Vector3 aabbBMinOut, aabbBMaxOut;
- b3TransformAabb2(bMinLocal, bMaxLocal, margin, transB.getOrigin(), transB.getRotation(), &aabbBMinOut, &aabbBMaxOut);
-
- numAabbChecks++;
- bool nodeOverlap = b3TestAabbAgainstAabb(aabbAMinOut, aabbAMaxOut, aabbBMinOut, aabbBMaxOut);
- if (nodeOverlap)
- {
- bool isLeafA = treeNodesCPU[node.x].isLeafNode();
- bool isLeafB = treeNodesCPU[node.y].isLeafNode();
- bool isInternalA = !isLeafA;
- bool isInternalB = !isLeafB;
-
- //fail, even though it might hit two leaf nodes
- if (depth + 4 > maxStackDepth && !(isLeafA && isLeafB))
- {
- b3Error("Error: traversal exceeded maxStackDepth\n");
- continue;
- }
-
- if (isInternalA)
- {
- int nodeAleftChild = node.x + 1;
- bool isNodeALeftChildLeaf = treeNodesCPU[node.x + 1].isLeafNode();
- int nodeArightChild = isNodeALeftChildLeaf ? node.x + 2 : node.x + 1 + treeNodesCPU[node.x + 1].getEscapeIndex();
-
- if (isInternalB)
- {
- int nodeBleftChild = node.y + 1;
- bool isNodeBLeftChildLeaf = treeNodesCPU[node.y + 1].isLeafNode();
- int nodeBrightChild = isNodeBLeftChildLeaf ? node.y + 2 : node.y + 1 + treeNodesCPU[node.y + 1].getEscapeIndex();
-
- nodeStack[depth++] = b3MakeInt2(nodeAleftChild, nodeBleftChild);
- nodeStack[depth++] = b3MakeInt2(nodeArightChild, nodeBleftChild);
- nodeStack[depth++] = b3MakeInt2(nodeAleftChild, nodeBrightChild);
- nodeStack[depth++] = b3MakeInt2(nodeArightChild, nodeBrightChild);
- }
- else
- {
- nodeStack[depth++] = b3MakeInt2(nodeAleftChild, node.y);
- nodeStack[depth++] = b3MakeInt2(nodeArightChild, node.y);
- }
- }
- else
- {
- if (isInternalB)
- {
- int nodeBleftChild = node.y + 1;
- bool isNodeBLeftChildLeaf = treeNodesCPU[node.y + 1].isLeafNode();
- int nodeBrightChild = isNodeBLeftChildLeaf ? node.y + 2 : node.y + 1 + treeNodesCPU[node.y + 1].getEscapeIndex();
- nodeStack[depth++] = b3MakeInt2(node.x, nodeBleftChild);
- nodeStack[depth++] = b3MakeInt2(node.x, nodeBrightChild);
- }
- else
- {
- int compoundPairIdx = b3AtomicInc(numCompoundPairsOut);
- if (compoundPairIdx < maxNumCompoundPairsCapacity)
- {
- int childShapeIndexA = treeNodesCPU[node.x].getTriangleIndex();
- int childShapeIndexB = treeNodesCPU[node.y].getTriangleIndex();
- gpuCompoundPairsOut[compoundPairIdx] = b3MakeInt4(bodyIndexA, bodyIndexB, childShapeIndexA, childShapeIndexB);
- }
- }
- }
- }
- } while (depth);
- maxNumAabbChecks = b3Max(numAabbChecks, maxNumAabbChecks);
- }
- }
- }
-
- return;
- }
-
- if ((collidables[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS) || (collidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS))
- {
- if (collidables[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int numChildrenA = collidables[collidableIndexA].m_numChildShapes;
- for (int c = 0; c < numChildrenA; c++)
- {
- int childShapeIndexA = collidables[collidableIndexA].m_shapeIndex + c;
- int childColIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- b3Quat childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = b3QuatRotate(ornA, childPosA) + posA;
- b3Quat newOrnA = b3QuatMul(ornA, childOrnA);
-
- b3Aabb aabbA = aabbsLocalSpace[childColIndexA];
-
- b3Transform transA;
- transA.setIdentity();
- transA.setOrigin(newPosA);
- transA.setRotation(newOrnA);
- b3Scalar margin = 0.0f;
-
- b3Vector3 aabbAMinOut, aabbAMaxOut;
-
- b3TransformAabb2((const b3Float4&)aabbA.m_min, (const b3Float4&)aabbA.m_max, margin, transA.getOrigin(), transA.getRotation(), &aabbAMinOut, &aabbAMaxOut);
-
- if (collidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- for (int b = 0; b < numChildrenB; b++)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex + b;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quat childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB, &posB, &ornB);
- b3Quat newOrnB = b3QuatMul(ornB, childOrnB);
-
- b3Aabb aabbB = aabbsLocalSpace[childColIndexB];
-
- b3Transform transB;
- transB.setIdentity();
- transB.setOrigin(newPosB);
- transB.setRotation(newOrnB);
-
- b3Vector3 aabbBMinOut, aabbBMaxOut;
- b3TransformAabb2((const b3Float4&)aabbB.m_min, (const b3Float4&)aabbB.m_max, margin, transB.getOrigin(), transB.getRotation(), &aabbBMinOut, &aabbBMaxOut);
-
- numAabbChecks++;
- bool aabbOverlap = b3TestAabbAgainstAabb(aabbAMinOut, aabbAMaxOut, aabbBMinOut, aabbBMaxOut);
- if (aabbOverlap)
- {
- /*
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- float dmin = FLT_MAX;
- float4 posA = newPosA;
- posA.w = 0.f;
- float4 posB = newPosB;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- b3Quat ornA = newOrnA;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- b3Quat ornB =newOrnB;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- */
- { //
- int compoundPairIdx = b3AtomicInc(numCompoundPairsOut);
- if (compoundPairIdx < maxNumCompoundPairsCapacity)
- {
- gpuCompoundPairsOut[compoundPairIdx] = b3MakeInt4(bodyIndexA, bodyIndexB, childShapeIndexA, childShapeIndexB);
- }
- } //
- } //fi(1)
- } //for (int b=0
- } //if (collidables[collidableIndexB].
- else //if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- if (1)
- {
- // int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- // float dmin = FLT_MAX;
- float4 posA = newPosA;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- b3Quat ornA = newOrnA;
- float4 c0;
- c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 c1;
- c1 = transform(&c1local, &posB, &ornB);
- // const float4 DeltaC2 = c0 - c1;
-
- {
- int compoundPairIdx = b3AtomicInc(numCompoundPairsOut);
- if (compoundPairIdx < maxNumCompoundPairsCapacity)
- {
- gpuCompoundPairsOut[compoundPairIdx] = b3MakeInt4(bodyIndexA, bodyIndexB, childShapeIndexA, -1);
- } //if (compoundPairIdx<maxNumCompoundPairsCapacity)
- } //
- } //fi (1)
- } //if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- } //for (int b=0;b<numChildrenB;b++)
- return;
- } //if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- if ((collidables[collidableIndexA].m_shapeType != SHAPE_CONCAVE_TRIMESH) && (collidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS))
- {
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- for (int b = 0; b < numChildrenB; b++)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex + b;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quat childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = b3QuatRotate(ornB, childPosB) + posB;
- b3Quat newOrnB = b3QuatMul(ornB, childOrnB);
-
- int shapeIndexB = collidables[childColIndexB].m_shapeIndex;
-
- //////////////////////////////////////
-
- if (1)
- {
- // int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- // float dmin = FLT_MAX;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = newPosB;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
- float4 c0;
- c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- b3Quat ornB = newOrnB;
- float4 c1;
- c1 = transform(&c1local, &posB, &ornB);
- // const float4 DeltaC2 = c0 - c1;
- { //
- int compoundPairIdx = b3AtomicInc(numCompoundPairsOut);
- if (compoundPairIdx < maxNumCompoundPairsCapacity)
- {
- gpuCompoundPairsOut[compoundPairIdx] = b3MakeInt4(bodyIndexA, bodyIndexB, -1, childShapeIndexB);
- } //fi (compoundPairIdx<maxNumCompoundPairsCapacity)
- } //
- } //fi (1)
- } //for (int b=0;b<numChildrenB;b++)
- return;
- } //if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- return;
- } //fi ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) ||(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))
- } //i<numPairs
-}
-
-__kernel void processCompoundPairsKernel(__global const b3Int4* gpuCompoundPairs,
- __global const b3RigidBodyData* rigidBodies,
- __global const b3Collidable* collidables,
- __global const b3ConvexPolyhedronData* convexShapes,
- __global const b3AlignedObjectArray<b3Float4>& vertices,
- __global const b3AlignedObjectArray<b3Float4>& uniqueEdges,
- __global const b3AlignedObjectArray<b3GpuFace>& faces,
- __global const b3AlignedObjectArray<int>& indices,
- __global b3Aabb* aabbs,
- __global const b3GpuChildShape* gpuChildShapes,
- __global b3AlignedObjectArray<b3Float4>& gpuCompoundSepNormalsOut,
- __global b3AlignedObjectArray<int>& gpuHasCompoundSepNormalsOut,
- int numCompoundPairs,
- int i)
-{
- // int i = get_global_id(0);
- if (i < numCompoundPairs)
- {
- int bodyIndexA = gpuCompoundPairs[i].x;
- int bodyIndexB = gpuCompoundPairs[i].y;
-
- int childShapeIndexA = gpuCompoundPairs[i].z;
- int childShapeIndexB = gpuCompoundPairs[i].w;
-
- int collidableIndexA = -1;
- int collidableIndexB = -1;
-
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
-
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- if (childShapeIndexA >= 0)
- {
- collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- b3Quat childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = b3QuatRotate(ornA, childPosA) + posA;
- b3Quat newOrnA = b3QuatMul(ornA, childOrnA);
- posA = newPosA;
- ornA = newOrnA;
- }
- else
- {
- collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- }
-
- if (childShapeIndexB >= 0)
- {
- collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quat childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = b3QuatRotate(ornB, childPosB) + posB;
- b3Quat newOrnB = b3QuatMul(ornB, childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- }
- else
- {
- collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
- }
-
- gpuHasCompoundSepNormalsOut[i] = 0;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- int shapeTypeA = collidables[collidableIndexA].m_shapeType;
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
-
- if ((shapeTypeA != SHAPE_CONVEX_HULL) || (shapeTypeB != SHAPE_CONVEX_HULL))
- {
- return;
- }
-
- int hasSeparatingAxis = 5;
-
- // int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- float dmin = FLT_MAX;
- posA.w = 0.f;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 c1 = transform(&c1local, &posB, &ornB);
- const float4 DeltaC2 = c0 - c1;
- float4 sepNormal = make_float4(1, 0, 0, 0);
- // bool sepA = findSeparatingAxis( convexShapes[shapeIndexA], convexShapes[shapeIndexB],posA,ornA,posB,ornB,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);
- bool sepA = findSeparatingAxis(convexShapes[shapeIndexA], convexShapes[shapeIndexB], posA, ornA, posB, ornB, vertices, uniqueEdges, faces, indices, vertices, uniqueEdges, faces, indices, sepNormal); //,&dmin);
-
- hasSeparatingAxis = 4;
- if (!sepA)
- {
- hasSeparatingAxis = 0;
- }
- else
- {
- bool sepB = findSeparatingAxis(convexShapes[shapeIndexB], convexShapes[shapeIndexA], posB, ornB, posA, ornA, vertices, uniqueEdges, faces, indices, vertices, uniqueEdges, faces, indices, sepNormal); //,&dmin);
-
- if (!sepB)
- {
- hasSeparatingAxis = 0;
- }
- else //(!sepB)
- {
- bool sepEE = findSeparatingAxisEdgeEdge(&convexShapes[shapeIndexA], &convexShapes[shapeIndexB], posA, ornA, posB, ornB, DeltaC2, vertices, uniqueEdges, faces, indices, &sepNormal, &dmin);
- if (sepEE)
- {
- gpuCompoundSepNormalsOut[i] = sepNormal; //fastNormalize4(sepNormal);
- gpuHasCompoundSepNormalsOut[i] = 1;
- } //sepEE
- } //(!sepB)
- } //(!sepA)
- }
-}
-
-__kernel void clipCompoundsHullHullKernel(__global const b3Int4* gpuCompoundPairs,
- __global const b3RigidBodyData* rigidBodies,
- __global const b3Collidable* collidables,
- __global const b3ConvexPolyhedronData* convexShapes,
- __global const b3AlignedObjectArray<b3Float4>& vertices,
- __global const b3AlignedObjectArray<b3Float4>& uniqueEdges,
- __global const b3AlignedObjectArray<b3GpuFace>& faces,
- __global const b3AlignedObjectArray<int>& indices,
- __global const b3GpuChildShape* gpuChildShapes,
- __global const b3AlignedObjectArray<b3Float4>& gpuCompoundSepNormalsOut,
- __global const b3AlignedObjectArray<int>& gpuHasCompoundSepNormalsOut,
- __global struct b3Contact4Data* globalContactsOut,
- int* nGlobalContactsOut,
- int numCompoundPairs, int maxContactCapacity, int i)
-{
- // int i = get_global_id(0);
- int pairIndex = i;
-
- float4 worldVertsB1[64];
- float4 worldVertsB2[64];
- int capacityWorldVerts = 64;
-
- float4 localContactsOut[64];
- int localContactCapacity = 64;
-
- float minDist = -1e30f;
- float maxDist = 0.0f;
-
- if (i < numCompoundPairs)
- {
- if (gpuHasCompoundSepNormalsOut[i])
- {
- int bodyIndexA = gpuCompoundPairs[i].x;
- int bodyIndexB = gpuCompoundPairs[i].y;
-
- int childShapeIndexA = gpuCompoundPairs[i].z;
- int childShapeIndexB = gpuCompoundPairs[i].w;
-
- int collidableIndexA = -1;
- int collidableIndexB = -1;
-
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
-
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- if (childShapeIndexA >= 0)
- {
- collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- b3Quat childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = b3QuatRotate(ornA, childPosA) + posA;
- b3Quat newOrnA = b3QuatMul(ornA, childOrnA);
- posA = newPosA;
- ornA = newOrnA;
- }
- else
- {
- collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- }
-
- if (childShapeIndexB >= 0)
- {
- collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quat childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = b3QuatRotate(ornB, childPosB) + posB;
- b3Quat newOrnB = b3QuatMul(ornB, childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- }
- else
- {
- collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
- }
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- int numLocalContactsOut = clipHullAgainstHull(gpuCompoundSepNormalsOut[i],
- convexShapes[shapeIndexA], convexShapes[shapeIndexB],
- posA, ornA,
- posB, ornB,
- worldVertsB1, worldVertsB2, capacityWorldVerts,
- minDist, maxDist,
- vertices, faces, indices,
- vertices, faces, indices,
- localContactsOut, localContactCapacity);
-
- if (numLocalContactsOut > 0)
- {
- float4 normal = -gpuCompoundSepNormalsOut[i];
- int nPoints = numLocalContactsOut;
- float4* pointsIn = localContactsOut;
- b3Int4 contactIdx; // = {-1,-1,-1,-1};
-
- contactIdx.s[0] = 0;
- contactIdx.s[1] = 1;
- contactIdx.s[2] = 2;
- contactIdx.s[3] = 3;
-
- int nReducedContacts = extractManifoldSequentialGlobal(pointsIn, nPoints, normal, &contactIdx);
-
- int dstIdx;
- dstIdx = b3AtomicInc(nGlobalContactsOut);
- if ((dstIdx + nReducedContacts) < maxContactCapacity)
- {
- __global struct b3Contact4Data* c = globalContactsOut + dstIdx;
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f * 0xffff);
- c->m_frictionCoeffCmp = (0.7f * 0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = gpuCompoundPairs[pairIndex].x;
- int bodyB = gpuCompoundPairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass == 0 ? -bodyA : bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass == 0 ? -bodyB : bodyB;
- c->m_childIndexA = childShapeIndexA;
- c->m_childIndexB = childShapeIndexB;
- for (int i = 0; i < nReducedContacts; i++)
- {
- c->m_worldPosB[i] = pointsIn[contactIdx.s[i]];
- }
- b3Contact4Data_setNumPoints(c, nReducedContacts);
- }
-
- } // if (numContactsOut>0)
- } // if (gpuHasCompoundSepNormalsOut[i])
- } // if (i<numCompoundPairs)
-}
-
-void computeContactCompoundCompound(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3RigidBodyData* rigidBodies,
- const b3Collidable* collidables,
- const b3ConvexPolyhedronData* convexShapes,
- const b3GpuChildShape* cpuChildShapes,
- const b3AlignedObjectArray<b3Aabb>& hostAabbsWorldSpace,
- const b3AlignedObjectArray<b3Aabb>& hostAabbsLocalSpace,
-
- const b3AlignedObjectArray<b3Vector3>& convexVertices,
- const b3AlignedObjectArray<b3Vector3>& hostUniqueEdges,
- const b3AlignedObjectArray<int>& convexIndices,
- const b3AlignedObjectArray<b3GpuFace>& faces,
-
- b3Contact4* globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity,
- b3AlignedObjectArray<b3QuantizedBvhNode>& treeNodesCPU,
- b3AlignedObjectArray<b3BvhSubtreeInfo>& subTreesCPU,
- b3AlignedObjectArray<b3BvhInfo>& bvhInfoCPU)
-{
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
- b3Assert(shapeTypeB == SHAPE_COMPOUND_OF_CONVEX_HULLS);
-
- b3AlignedObjectArray<b3Int4> cpuCompoundPairsOut;
- int numCompoundPairsOut = 0;
- int maxNumCompoundPairsCapacity = 8192; //1024;
- cpuCompoundPairsOut.resize(maxNumCompoundPairsCapacity);
-
- // work-in-progress
- findCompoundPairsKernel(
- pairIndex,
- bodyIndexA, bodyIndexB,
- collidableIndexA, collidableIndexB,
- rigidBodies,
- collidables,
- convexShapes,
- convexVertices,
- hostAabbsWorldSpace,
- hostAabbsLocalSpace,
- cpuChildShapes,
- &cpuCompoundPairsOut[0],
- &numCompoundPairsOut,
- maxNumCompoundPairsCapacity,
- treeNodesCPU,
- subTreesCPU,
- bvhInfoCPU);
-
- printf("maxNumAabbChecks=%d\n", maxNumAabbChecks);
- if (numCompoundPairsOut > maxNumCompoundPairsCapacity)
- {
- b3Error("numCompoundPairsOut exceeded maxNumCompoundPairsCapacity (%d)\n", maxNumCompoundPairsCapacity);
- numCompoundPairsOut = maxNumCompoundPairsCapacity;
- }
- b3AlignedObjectArray<b3Float4> cpuCompoundSepNormalsOut;
- b3AlignedObjectArray<int> cpuHasCompoundSepNormalsOut;
- cpuCompoundSepNormalsOut.resize(numCompoundPairsOut);
- cpuHasCompoundSepNormalsOut.resize(numCompoundPairsOut);
-
- for (int i = 0; i < numCompoundPairsOut; i++)
- {
- processCompoundPairsKernel(&cpuCompoundPairsOut[0], rigidBodies, collidables, convexShapes, convexVertices, hostUniqueEdges, faces, convexIndices, 0, cpuChildShapes,
- cpuCompoundSepNormalsOut, cpuHasCompoundSepNormalsOut, numCompoundPairsOut, i);
- }
-
- for (int i = 0; i < numCompoundPairsOut; i++)
- {
- clipCompoundsHullHullKernel(&cpuCompoundPairsOut[0], rigidBodies, collidables, convexShapes, convexVertices, hostUniqueEdges, faces, convexIndices, cpuChildShapes,
- cpuCompoundSepNormalsOut, cpuHasCompoundSepNormalsOut, globalContactsOut, &nGlobalContactsOut, numCompoundPairsOut, maxContactCapacity, i);
- }
- /*
- int childColIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- b3Quat childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = b3QuatRotate(ornA,childPosA)+posA;
- b3Quat newOrnA = b3QuatMul(ornA,childOrnA);
-
- int shapeIndexA = collidables[childColIndexA].m_shapeIndex;
-
-
- bool foundSepAxis = findSeparatingAxis(hullA,hullB,
- posA,
- ornA,
- posB,
- ornB,
-
- convexVertices,uniqueEdges,faces,convexIndices,
- convexVertices,uniqueEdges,faces,convexIndices,
-
- sepNormalWorldSpace
- );
- */
-
- /*
- if (foundSepAxis)
- {
-
-
- contactIndex = clipHullHullSingle(
- bodyIndexA, bodyIndexB,
- posA,ornA,
- posB,ornB,
- collidableIndexA, collidableIndexB,
- &rigidBodies,
- &globalContactsOut,
- nGlobalContactsOut,
-
- convexShapes,
- convexShapes,
-
- convexVertices,
- uniqueEdges,
- faces,
- convexIndices,
-
- convexVertices,
- uniqueEdges,
- faces,
- convexIndices,
-
- collidables,
- collidables,
- sepNormalWorldSpace,
- maxContactCapacity);
-
- }
- */
-
- // return contactIndex;
-
- /*
-
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- for (int c=0;c<numChildrenB;c++)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+c;
- int childColIndexB = cpuChildShapes[childShapeIndexB].m_shapeIndex;
-
- float4 rootPosB = rigidBodies[bodyIndexB].m_pos;
- b3Quaternion rootOrnB = rigidBodies[bodyIndexB].m_quat;
- b3Vector3 childPosB = cpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quaternion childOrnB = cpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 posB = b3QuatRotate(rootOrnB,childPosB)+rootPosB;
- b3Quaternion ornB = b3QuatMul(rootOrnB,childOrnB);//b3QuatMul(ornB,childOrnB);
-
- int shapeIndexB = collidables[childColIndexB].m_shapeIndex;
-
- const b3ConvexPolyhedronData* hullB = &convexShapes[shapeIndexB];
-
- }
- */
-}
-
-void computeContactPlaneCompound(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3RigidBodyData* rigidBodies,
- const b3Collidable* collidables,
- const b3ConvexPolyhedronData* convexShapes,
- const b3GpuChildShape* cpuChildShapes,
- const b3Vector3* convexVertices,
- const int* convexIndices,
- const b3GpuFace* faces,
-
- b3Contact4* globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity)
-{
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
- b3Assert(shapeTypeB == SHAPE_COMPOUND_OF_CONVEX_HULLS);
-
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- for (int c = 0; c < numChildrenB; c++)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex + c;
- int childColIndexB = cpuChildShapes[childShapeIndexB].m_shapeIndex;
-
- float4 rootPosB = rigidBodies[bodyIndexB].m_pos;
- b3Quaternion rootOrnB = rigidBodies[bodyIndexB].m_quat;
- b3Vector3 childPosB = cpuChildShapes[childShapeIndexB].m_childPosition;
- b3Quaternion childOrnB = cpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 posB = b3QuatRotate(rootOrnB, childPosB) + rootPosB;
- b3Quaternion ornB = rootOrnB * childOrnB; //b3QuatMul(ornB,childOrnB);
-
- int shapeIndexB = collidables[childColIndexB].m_shapeIndex;
-
- const b3ConvexPolyhedronData* hullB = &convexShapes[shapeIndexB];
-
- b3Vector3 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat;
-
- // int numContactsOut = 0;
- // int numWorldVertsB1= 0;
-
- b3Vector3 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane;
- b3Vector3 planeNormal = b3MakeVector3(planeEq.x, planeEq.y, planeEq.z);
- b3Vector3 planeNormalWorld = b3QuatRotate(ornA, planeNormal);
- float planeConstant = planeEq.w;
- b3Transform convexWorldTransform;
- convexWorldTransform.setIdentity();
- convexWorldTransform.setOrigin(posB);
- convexWorldTransform.setRotation(ornB);
- b3Transform planeTransform;
- planeTransform.setIdentity();
- planeTransform.setOrigin(posA);
- planeTransform.setRotation(ornA);
-
- b3Transform planeInConvex;
- planeInConvex = convexWorldTransform.inverse() * planeTransform;
- b3Transform convexInPlane;
- convexInPlane = planeTransform.inverse() * convexWorldTransform;
-
- b3Vector3 planeNormalInConvex = planeInConvex.getBasis() * -planeNormal;
- float maxDot = -1e30;
- int hitVertex = -1;
- b3Vector3 hitVtx;
-
-#define MAX_PLANE_CONVEX_POINTS 64
-
- b3Vector3 contactPoints[MAX_PLANE_CONVEX_POINTS];
- int numPoints = 0;
-
- b3Int4 contactIdx;
- contactIdx.s[0] = 0;
- contactIdx.s[1] = 1;
- contactIdx.s[2] = 2;
- contactIdx.s[3] = 3;
-
- for (int i = 0; i < hullB->m_numVertices; i++)
- {
- b3Vector3 vtx = convexVertices[hullB->m_vertexOffset + i];
- float curDot = vtx.dot(planeNormalInConvex);
-
- if (curDot > maxDot)
- {
- hitVertex = i;
- maxDot = curDot;
- hitVtx = vtx;
- //make sure the deepest points is always included
- if (numPoints == MAX_PLANE_CONVEX_POINTS)
- numPoints--;
- }
-
- if (numPoints < MAX_PLANE_CONVEX_POINTS)
- {
- b3Vector3 vtxWorld = convexWorldTransform * vtx;
- b3Vector3 vtxInPlane = planeTransform.inverse() * vtxWorld;
- float dist = planeNormal.dot(vtxInPlane) - planeConstant;
- if (dist < 0.f)
- {
- vtxWorld.w = dist;
- contactPoints[numPoints] = vtxWorld;
- numPoints++;
- }
- }
- }
-
- int numReducedPoints = 0;
-
- numReducedPoints = numPoints;
-
- if (numPoints > 4)
- {
- numReducedPoints = extractManifoldSequentialGlobal(contactPoints, numPoints, planeNormalInConvex, &contactIdx);
- }
- int dstIdx;
- // dstIdx = nGlobalContactsOut++;//AppendInc( nGlobalContactsOut, dstIdx );
-
- if (numReducedPoints > 0)
- {
- if (nGlobalContactsOut < maxContactCapacity)
- {
- dstIdx = nGlobalContactsOut;
- nGlobalContactsOut++;
-
- b3Contact4* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -planeNormalWorld;
- c->setFrictionCoeff(0.7);
- c->setRestituitionCoeff(0.f);
-
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass == 0 ? -bodyIndexA : bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass == 0 ? -bodyIndexB : bodyIndexB;
- for (int i = 0; i < numReducedPoints; i++)
- {
- b3Vector3 pOnB1 = contactPoints[contactIdx.s[i]];
- c->m_worldPosB[i] = pOnB1;
- }
- c->m_worldNormalOnB.w = (b3Scalar)numReducedPoints;
- } //if (dstIdx < numPairs)
- }
- }
-}
-
-void computeContactSphereConvex(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3RigidBodyData* rigidBodies,
- const b3Collidable* collidables,
- const b3ConvexPolyhedronData* convexShapes,
- const b3Vector3* convexVertices,
- const int* convexIndices,
- const b3GpuFace* faces,
- b3Contact4* globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity)
-{
- float radius = collidables[collidableIndexA].m_radius;
- float4 spherePos1 = rigidBodies[bodyIndexA].m_pos;
- b3Quaternion sphereOrn = rigidBodies[bodyIndexA].m_quat;
-
- float4 pos = rigidBodies[bodyIndexB].m_pos;
-
- b3Quaternion quat = rigidBodies[bodyIndexB].m_quat;
-
- b3Transform tr;
- tr.setIdentity();
- tr.setOrigin(pos);
- tr.setRotation(quat);
- b3Transform trInv = tr.inverse();
-
- float4 spherePos = trInv(spherePos1);
-
- int collidableIndex = rigidBodies[bodyIndexB].m_collidableIdx;
- int shapeIndex = collidables[collidableIndex].m_shapeIndex;
- int numFaces = convexShapes[shapeIndex].m_numFaces;
- float4 closestPnt = b3MakeVector3(0, 0, 0, 0);
- // float4 hitNormalWorld = b3MakeVector3(0, 0, 0, 0);
- float minDist = -1000000.f; // TODO: What is the largest/smallest float?
- bool bCollide = true;
- int region = -1;
- float4 localHitNormal;
- for (int f = 0; f < numFaces; f++)
- {
- b3GpuFace face = faces[convexShapes[shapeIndex].m_faceOffset + f];
- float4 planeEqn;
- float4 localPlaneNormal = b3MakeVector3(face.m_plane.x, face.m_plane.y, face.m_plane.z, 0.f);
- float4 n1 = localPlaneNormal; //quatRotate(quat,localPlaneNormal);
- planeEqn = n1;
- planeEqn[3] = face.m_plane.w;
-
- float4 pntReturn;
- float dist = signedDistanceFromPointToPlane(spherePos, planeEqn, &pntReturn);
-
- if (dist > radius)
- {
- bCollide = false;
- break;
- }
-
- if (dist > 0)
- {
- //might hit an edge or vertex
- b3Vector3 out;
-
- bool isInPoly = IsPointInPolygon(spherePos,
- &face,
- &convexVertices[convexShapes[shapeIndex].m_vertexOffset],
- convexIndices,
- &out);
- if (isInPoly)
- {
- if (dist > minDist)
- {
- minDist = dist;
- closestPnt = pntReturn;
- localHitNormal = planeEqn;
- region = 1;
- }
- }
- else
- {
- b3Vector3 tmp = spherePos - out;
- b3Scalar l2 = tmp.length2();
- if (l2 < radius * radius)
- {
- dist = b3Sqrt(l2);
- if (dist > minDist)
- {
- minDist = dist;
- closestPnt = out;
- localHitNormal = tmp / dist;
- region = 2;
- }
- }
- else
- {
- bCollide = false;
- break;
- }
- }
- }
- else
- {
- if (dist > minDist)
- {
- minDist = dist;
- closestPnt = pntReturn;
- localHitNormal = planeEqn;
- region = 3;
- }
- }
- }
- static int numChecks = 0;
- numChecks++;
-
- if (bCollide && minDist > -10000)
- {
- float4 normalOnSurfaceB1 = tr.getBasis() * localHitNormal; //-hitNormalWorld;
- float4 pOnB1 = tr(closestPnt);
- //printf("dist ,%f,",minDist);
- float actualDepth = minDist - radius;
- if (actualDepth < 0)
- {
- //printf("actualDepth = ,%f,", actualDepth);
- //printf("normalOnSurfaceB1 = ,%f,%f,%f,", normalOnSurfaceB1.x,normalOnSurfaceB1.y,normalOnSurfaceB1.z);
- //printf("region=,%d,\n", region);
- pOnB1[3] = actualDepth;
-
- int dstIdx;
- // dstIdx = nGlobalContactsOut++;//AppendInc( nGlobalContactsOut, dstIdx );
-
- if (nGlobalContactsOut < maxContactCapacity)
- {
- dstIdx = nGlobalContactsOut;
- nGlobalContactsOut++;
-
- b3Contact4* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = normalOnSurfaceB1;
- c->setFrictionCoeff(0.7);
- c->setRestituitionCoeff(0.f);
-
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass == 0 ? -bodyIndexA : bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass == 0 ? -bodyIndexB : bodyIndexB;
- c->m_worldPosB[0] = pOnB1;
- int numPoints = 1;
- c->m_worldNormalOnB.w = (b3Scalar)numPoints;
- } //if (dstIdx < numPairs)
- }
- } //if (hasCollision)
-}
-
-int computeContactConvexConvex2(
- int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- const b3AlignedObjectArray<b3RigidBodyData>& rigidBodies,
- const b3AlignedObjectArray<b3Collidable>& collidables,
- const b3AlignedObjectArray<b3ConvexPolyhedronData>& convexShapes,
- const b3AlignedObjectArray<b3Vector3>& convexVertices,
- const b3AlignedObjectArray<b3Vector3>& uniqueEdges,
- const b3AlignedObjectArray<int>& convexIndices,
- const b3AlignedObjectArray<b3GpuFace>& faces,
- b3AlignedObjectArray<b3Contact4>& globalContactsOut,
- int& nGlobalContactsOut,
- int maxContactCapacity,
- const b3AlignedObjectArray<b3Contact4>& oldContacts)
-{
- int contactIndex = -1;
- b3Vector3 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quaternion ornA = rigidBodies[bodyIndexA].m_quat;
- b3Vector3 posB = rigidBodies[bodyIndexB].m_pos;
- b3Quaternion ornB = rigidBodies[bodyIndexB].m_quat;
-
- b3ConvexPolyhedronData hullA, hullB;
-
- b3Vector3 sepNormalWorldSpace;
-
- b3Collidable colA = collidables[collidableIndexA];
- hullA = convexShapes[colA.m_shapeIndex];
- //printf("numvertsA = %d\n",hullA.m_numVertices);
-
- b3Collidable colB = collidables[collidableIndexB];
- hullB = convexShapes[colB.m_shapeIndex];
- //printf("numvertsB = %d\n",hullB.m_numVertices);
-
- // int contactCapacity = MAX_VERTS;
- //int numContactsOut=0;
-
-#ifdef _WIN32
- b3Assert(_finite(rigidBodies[bodyIndexA].m_pos.x));
- b3Assert(_finite(rigidBodies[bodyIndexB].m_pos.x));
-#endif
-
- bool foundSepAxis = findSeparatingAxis(hullA, hullB,
- posA,
- ornA,
- posB,
- ornB,
-
- convexVertices, uniqueEdges, faces, convexIndices,
- convexVertices, uniqueEdges, faces, convexIndices,
-
- sepNormalWorldSpace);
-
- if (foundSepAxis)
- {
- contactIndex = clipHullHullSingle(
- bodyIndexA, bodyIndexB,
- posA, ornA,
- posB, ornB,
- collidableIndexA, collidableIndexB,
- &rigidBodies,
- &globalContactsOut,
- nGlobalContactsOut,
-
- convexShapes,
- convexShapes,
-
- convexVertices,
- uniqueEdges,
- faces,
- convexIndices,
-
- convexVertices,
- uniqueEdges,
- faces,
- convexIndices,
-
- collidables,
- collidables,
- sepNormalWorldSpace,
- maxContactCapacity);
- }
-
- return contactIndex;
-}
-
-void GpuSatCollision::computeConvexConvexContactsGPUSAT(b3OpenCLArray<b3Int4>* pairs, int nPairs,
- const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
- b3OpenCLArray<b3Contact4>* contactOut, int& nContacts,
- const b3OpenCLArray<b3Contact4>* oldContacts,
- int maxContactCapacity,
- int compoundPairCapacity,
- const b3OpenCLArray<b3ConvexPolyhedronData>& convexData,
- const b3OpenCLArray<b3Vector3>& gpuVertices,
- const b3OpenCLArray<b3Vector3>& gpuUniqueEdges,
- const b3OpenCLArray<b3GpuFace>& gpuFaces,
- const b3OpenCLArray<int>& gpuIndices,
- const b3OpenCLArray<b3Collidable>& gpuCollidables,
- const b3OpenCLArray<b3GpuChildShape>& gpuChildShapes,
-
- const b3OpenCLArray<b3Aabb>& clAabbsWorldSpace,
- const b3OpenCLArray<b3Aabb>& clAabbsLocalSpace,
-
- b3OpenCLArray<b3Vector3>& worldVertsB1GPU,
- b3OpenCLArray<b3Int4>& clippingFacesOutGPU,
- b3OpenCLArray<b3Vector3>& worldNormalsAGPU,
- b3OpenCLArray<b3Vector3>& worldVertsA1GPU,
- b3OpenCLArray<b3Vector3>& worldVertsB2GPU,
- b3AlignedObjectArray<class b3OptimizedBvh*>& bvhDataUnused,
- b3OpenCLArray<b3QuantizedBvhNode>* treeNodesGPU,
- b3OpenCLArray<b3BvhSubtreeInfo>* subTreesGPU,
- b3OpenCLArray<b3BvhInfo>* bvhInfo,
-
- int numObjects,
- int maxTriConvexPairCapacity,
- b3OpenCLArray<b3Int4>& triangleConvexPairsOut,
- int& numTriConvexPairsOut)
-{
- myframecount++;
-
- if (!nPairs)
- return;
-
-#ifdef CHECK_ON_HOST
-
- b3AlignedObjectArray<b3QuantizedBvhNode> treeNodesCPU;
- treeNodesGPU->copyToHost(treeNodesCPU);
-
- b3AlignedObjectArray<b3BvhSubtreeInfo> subTreesCPU;
- subTreesGPU->copyToHost(subTreesCPU);
-
- b3AlignedObjectArray<b3BvhInfo> bvhInfoCPU;
- bvhInfo->copyToHost(bvhInfoCPU);
-
- b3AlignedObjectArray<b3Aabb> hostAabbsWorldSpace;
- clAabbsWorldSpace.copyToHost(hostAabbsWorldSpace);
-
- b3AlignedObjectArray<b3Aabb> hostAabbsLocalSpace;
- clAabbsLocalSpace.copyToHost(hostAabbsLocalSpace);
-
- b3AlignedObjectArray<b3Int4> hostPairs;
- pairs->copyToHost(hostPairs);
-
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> hostConvexData;
- convexData.copyToHost(hostConvexData);
-
- b3AlignedObjectArray<b3Vector3> hostVertices;
- gpuVertices.copyToHost(hostVertices);
-
- b3AlignedObjectArray<b3Vector3> hostUniqueEdges;
- gpuUniqueEdges.copyToHost(hostUniqueEdges);
- b3AlignedObjectArray<b3GpuFace> hostFaces;
- gpuFaces.copyToHost(hostFaces);
- b3AlignedObjectArray<int> hostIndices;
- gpuIndices.copyToHost(hostIndices);
- b3AlignedObjectArray<b3Collidable> hostCollidables;
- gpuCollidables.copyToHost(hostCollidables);
-
- b3AlignedObjectArray<b3GpuChildShape> cpuChildShapes;
- gpuChildShapes.copyToHost(cpuChildShapes);
-
- b3AlignedObjectArray<b3Int4> hostTriangleConvexPairs;
-
- b3AlignedObjectArray<b3Contact4> hostContacts;
- if (nContacts)
- {
- contactOut->copyToHost(hostContacts);
- }
-
- b3AlignedObjectArray<b3Contact4> oldHostContacts;
-
- if (oldContacts->size())
- {
- oldContacts->copyToHost(oldHostContacts);
- }
-
- hostContacts.resize(maxContactCapacity);
-
- for (int i = 0; i < nPairs; i++)
- {
- int bodyIndexA = hostPairs[i].x;
- int bodyIndexB = hostPairs[i].y;
- int collidableIndexA = hostBodyBuf[bodyIndexA].m_collidableIdx;
- int collidableIndexB = hostBodyBuf[bodyIndexB].m_collidableIdx;
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
- computeContactSphereConvex(i, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &hostVertices[0], &hostIndices[0], &hostFaces[0], &hostContacts[0], nContacts, maxContactCapacity);
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)
- {
- computeContactSphereConvex(i, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &hostVertices[0], &hostIndices[0], &hostFaces[0], &hostContacts[0], nContacts, maxContactCapacity);
- //printf("convex-sphere\n");
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_PLANE)
- {
- computeContactPlaneConvex(i, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &hostVertices[0], &hostIndices[0], &hostFaces[0], &hostContacts[0], nContacts, maxContactCapacity);
- // printf("convex-plane\n");
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_PLANE &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
- computeContactPlaneConvex(i, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &hostVertices[0], &hostIndices[0], &hostFaces[0], &hostContacts[0], nContacts, maxContactCapacity);
- // printf("plane-convex\n");
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- computeContactCompoundCompound(i, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &cpuChildShapes[0], hostAabbsWorldSpace, hostAabbsLocalSpace, hostVertices, hostUniqueEdges, hostIndices, hostFaces, &hostContacts[0],
- nContacts, maxContactCapacity, treeNodesCPU, subTreesCPU, bvhInfoCPU);
- // printf("convex-plane\n");
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_PLANE)
- {
- computeContactPlaneCompound(i, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &cpuChildShapes[0], &hostVertices[0], &hostIndices[0], &hostFaces[0], &hostContacts[0], nContacts, maxContactCapacity);
- // printf("convex-plane\n");
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_PLANE &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- computeContactPlaneCompound(i, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, &hostBodyBuf[0],
- &hostCollidables[0], &hostConvexData[0], &cpuChildShapes[0], &hostVertices[0], &hostIndices[0], &hostFaces[0], &hostContacts[0], nContacts, maxContactCapacity);
- // printf("plane-convex\n");
- }
-
- if (hostCollidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- hostCollidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
- //printf("hostPairs[i].z=%d\n",hostPairs[i].z);
- int contactIndex = computeContactConvexConvex2(i, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, hostBodyBuf, hostCollidables, hostConvexData, hostVertices, hostUniqueEdges, hostIndices, hostFaces, hostContacts, nContacts, maxContactCapacity, oldHostContacts);
- //int contactIndex = computeContactConvexConvex(hostPairs,i,bodyIndexA,bodyIndexB,collidableIndexA,collidableIndexB,hostBodyBuf,hostCollidables,hostConvexData,hostVertices,hostUniqueEdges,hostIndices,hostFaces,hostContacts,nContacts,maxContactCapacity,oldHostContacts);
-
- if (contactIndex >= 0)
- {
- // printf("convex convex contactIndex = %d\n",contactIndex);
- hostPairs[i].z = contactIndex;
- }
- // printf("plane-convex\n");
- }
- }
-
- if (hostPairs.size())
- {
- pairs->copyFromHost(hostPairs);
- }
-
- hostContacts.resize(nContacts);
- if (nContacts)
- {
- contactOut->copyFromHost(hostContacts);
- }
- else
- {
- contactOut->resize(0);
- }
-
- m_totalContactsOut.copyFromHostPointer(&nContacts, 1, 0, true);
- //printf("(HOST) nContacts = %d\n",nContacts);
-
-#else
-
- {
- if (nPairs)
- {
- m_totalContactsOut.copyFromHostPointer(&nContacts, 1, 0, true);
-
- B3_PROFILE("primitiveContactsKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_primitiveContactsKernel, "m_primitiveContactsKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nPairs);
- launcher.setConst(maxContactCapacity);
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
-
- nContacts = m_totalContactsOut.at(0);
- contactOut->resize(nContacts);
- }
- }
-
-#endif //CHECK_ON_HOST
-
- B3_PROFILE("computeConvexConvexContactsGPUSAT");
- // printf("nContacts = %d\n",nContacts);
-
- m_sepNormals.resize(nPairs);
- m_hasSeparatingNormals.resize(nPairs);
-
- int concaveCapacity = maxTriConvexPairCapacity;
- m_concaveSepNormals.resize(concaveCapacity);
- m_concaveHasSeparatingNormals.resize(concaveCapacity);
- m_numConcavePairsOut.resize(0);
- m_numConcavePairsOut.push_back(0);
-
- m_gpuCompoundPairs.resize(compoundPairCapacity);
-
- m_gpuCompoundSepNormals.resize(compoundPairCapacity);
-
- m_gpuHasCompoundSepNormals.resize(compoundPairCapacity);
-
- m_numCompoundPairsOut.resize(0);
- m_numCompoundPairsOut.push_back(0);
-
- int numCompoundPairs = 0;
-
- int numConcavePairs = 0;
-
- {
- clFinish(m_queue);
- if (findSeparatingAxisOnGpu)
- {
- m_dmins.resize(nPairs);
- if (splitSearchSepAxisConvex)
- {
- if (useMprGpu)
- {
- nContacts = m_totalContactsOut.at(0);
- {
- B3_PROFILE("mprPenetrationKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_mprPenetrationKernel, "mprPenetrationKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
-
- launcher.setConst(maxContactCapacity);
- launcher.setConst(nPairs);
-
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- /*
- b3AlignedObjectArray<int>hostHasSepAxis;
- m_hasSeparatingNormals.copyToHost(hostHasSepAxis);
- b3AlignedObjectArray<b3Vector3>hostSepAxis;
- m_sepNormals.copyToHost(hostSepAxis);
- */
- nContacts = m_totalContactsOut.at(0);
- contactOut->resize(nContacts);
- // printf("nContacts (after mprPenetrationKernel) = %d\n",nContacts);
- if (nContacts > maxContactCapacity)
- {
- b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
- nContacts = maxContactCapacity;
- }
- }
- }
-
- if (1)
- {
- if (1)
- {
- {
- B3_PROFILE("findSeparatingAxisVertexFaceKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(m_dmins.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findSeparatingAxisVertexFaceKernel, "findSeparatingAxisVertexFaceKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nPairs);
-
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
-
- int numDirections = sizeof(unitSphere162) / sizeof(b3Vector3);
-
- {
- B3_PROFILE("findSeparatingAxisEdgeEdgeKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(m_dmins.getBufferCL()),
- b3BufferInfoCL(m_unitSphereDirections.getBufferCL(), true)
-
- };
-
- b3LauncherCL launcher(m_queue, m_findSeparatingAxisEdgeEdgeKernel, "findSeparatingAxisEdgeEdgeKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numDirections);
- launcher.setConst(nPairs);
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
- }
- if (useMprGpu)
- {
- B3_PROFILE("findSeparatingAxisUnitSphereKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(m_unitSphereDirections.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(m_dmins.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findSeparatingAxisUnitSphereKernel, "findSeparatingAxisUnitSphereKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- int numDirections = sizeof(unitSphere162) / sizeof(b3Vector3);
- launcher.setConst(numDirections);
-
- launcher.setConst(nPairs);
-
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
- }
- }
- else
- {
- B3_PROFILE("findSeparatingAxisKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findSeparatingAxisKernel, "m_findSeparatingAxisKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nPairs);
-
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
- }
- else
- {
- B3_PROFILE("findSeparatingAxisKernel CPU");
-
- b3AlignedObjectArray<b3Int4> hostPairs;
- pairs->copyToHost(hostPairs);
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
-
- b3AlignedObjectArray<b3Collidable> hostCollidables;
- gpuCollidables.copyToHost(hostCollidables);
-
- b3AlignedObjectArray<b3GpuChildShape> cpuChildShapes;
- gpuChildShapes.copyToHost(cpuChildShapes);
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> hostConvexShapeData;
- convexData.copyToHost(hostConvexShapeData);
-
- b3AlignedObjectArray<b3Vector3> hostVertices;
- gpuVertices.copyToHost(hostVertices);
-
- b3AlignedObjectArray<int> hostHasSepAxis;
- hostHasSepAxis.resize(nPairs);
- b3AlignedObjectArray<b3Vector3> hostSepAxis;
- hostSepAxis.resize(nPairs);
-
- b3AlignedObjectArray<b3Vector3> hostUniqueEdges;
- gpuUniqueEdges.copyToHost(hostUniqueEdges);
- b3AlignedObjectArray<b3GpuFace> hostFaces;
- gpuFaces.copyToHost(hostFaces);
-
- b3AlignedObjectArray<int> hostIndices;
- gpuIndices.copyToHost(hostIndices);
-
- b3AlignedObjectArray<b3Contact4> hostContacts;
- if (nContacts)
- {
- contactOut->copyToHost(hostContacts);
- }
- hostContacts.resize(maxContactCapacity);
- int nGlobalContactsOut = nContacts;
-
- for (int i = 0; i < nPairs; i++)
- {
- int bodyIndexA = hostPairs[i].x;
- int bodyIndexB = hostPairs[i].y;
- int collidableIndexA = hostBodyBuf[bodyIndexA].m_collidableIdx;
- int collidableIndexB = hostBodyBuf[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = hostCollidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = hostCollidables[collidableIndexB].m_shapeIndex;
-
- hostHasSepAxis[i] = 0;
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((hostBodyBuf[bodyIndexA].m_invMass == 0) && (hostBodyBuf[bodyIndexB].m_invMass == 0))
- {
- continue;
- }
-
- if ((hostCollidables[collidableIndexA].m_shapeType != SHAPE_CONVEX_HULL) || (hostCollidables[collidableIndexB].m_shapeType != SHAPE_CONVEX_HULL))
- {
- continue;
- }
-
- float dmin = FLT_MAX;
-
- b3ConvexPolyhedronData* convexShapeA = &hostConvexShapeData[shapeIndexA];
- b3ConvexPolyhedronData* convexShapeB = &hostConvexShapeData[shapeIndexB];
- b3Vector3 posA = hostBodyBuf[bodyIndexA].m_pos;
- b3Vector3 posB = hostBodyBuf[bodyIndexB].m_pos;
- b3Quaternion ornA = hostBodyBuf[bodyIndexA].m_quat;
- b3Quaternion ornB = hostBodyBuf[bodyIndexB].m_quat;
-
- if (useGjk)
- {
- //first approximate the separating axis, to 'fail-proof' GJK+EPA or MPR
- {
- b3Vector3 c0local = hostConvexShapeData[shapeIndexA].m_localCenter;
- b3Vector3 c0 = b3TransformPoint(c0local, posA, ornA);
- b3Vector3 c1local = hostConvexShapeData[shapeIndexB].m_localCenter;
- b3Vector3 c1 = b3TransformPoint(c1local, posB, ornB);
- b3Vector3 DeltaC2 = c0 - c1;
-
- b3Vector3 sepAxis;
-
- bool hasSepAxisA = b3FindSeparatingAxis(convexShapeA, convexShapeB, posA, ornA, posB, ornB, DeltaC2,
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &sepAxis, &dmin);
-
- if (hasSepAxisA)
- {
- bool hasSepAxisB = b3FindSeparatingAxis(convexShapeB, convexShapeA, posB, ornB, posA, ornA, DeltaC2,
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &sepAxis, &dmin);
- if (hasSepAxisB)
- {
- bool hasEdgeEdge = b3FindSeparatingAxisEdgeEdge(convexShapeA, convexShapeB, posA, ornA, posB, ornB, DeltaC2,
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &sepAxis, &dmin, false);
-
- if (hasEdgeEdge)
- {
- hostHasSepAxis[i] = 1;
- hostSepAxis[i] = sepAxis;
- hostSepAxis[i].w = dmin;
- }
- }
- }
- }
-
- if (hostHasSepAxis[i])
- {
- int pairIndex = i;
-
- bool useMpr = true;
- if (useMpr)
- {
- int res = 0;
- float depth = 0.f;
- b3Vector3 sepAxis2 = b3MakeVector3(1, 0, 0);
- b3Vector3 resultPointOnBWorld = b3MakeVector3(0, 0, 0);
-
- float depthOut;
- b3Vector3 dirOut;
- b3Vector3 posOut;
-
- //res = b3MprPenetration(bodyIndexA,bodyIndexB,hostBodyBuf,hostConvexShapeData,hostCollidables,hostVertices,&mprConfig,&depthOut,&dirOut,&posOut);
- res = b3MprPenetration(pairIndex, bodyIndexA, bodyIndexB, &hostBodyBuf[0], &hostConvexShapeData[0], &hostCollidables[0], &hostVertices[0], &hostSepAxis[0], &hostHasSepAxis[0], &depthOut, &dirOut, &posOut);
- depth = depthOut;
- sepAxis2 = b3MakeVector3(-dirOut.x, -dirOut.y, -dirOut.z);
- resultPointOnBWorld = posOut;
- //hostHasSepAxis[i] = 0;
-
- if (res == 0)
- {
- //add point?
- //printf("depth = %f\n",depth);
- //printf("normal = %f,%f,%f\n",dir.v[0],dir.v[1],dir.v[2]);
- //qprintf("pos = %f,%f,%f\n",pos.v[0],pos.v[1],pos.v[2]);
-
- float dist = 0.f;
-
- const b3ConvexPolyhedronData& hullA = hostConvexShapeData[hostCollidables[hostBodyBuf[bodyIndexA].m_collidableIdx].m_shapeIndex];
- const b3ConvexPolyhedronData& hullB = hostConvexShapeData[hostCollidables[hostBodyBuf[bodyIndexB].m_collidableIdx].m_shapeIndex];
-
- if (b3TestSepAxis(&hullA, &hullB, posA, ornA, posB, ornB, &sepAxis2, &hostVertices[0], &hostVertices[0], &dist))
- {
- if (depth > dist)
- {
- float diff = depth - dist;
-
- static float maxdiff = 0.f;
- if (maxdiff < diff)
- {
- maxdiff = diff;
- printf("maxdiff = %20.10f\n", maxdiff);
- }
- }
- }
- if (depth > dmin)
- {
- b3Vector3 oldAxis = hostSepAxis[i];
- depth = dmin;
- sepAxis2 = oldAxis;
- }
-
- if (b3TestSepAxis(&hullA, &hullB, posA, ornA, posB, ornB, &sepAxis2, &hostVertices[0], &hostVertices[0], &dist))
- {
- if (depth > dist)
- {
- float diff = depth - dist;
- //printf("?diff = %f\n",diff );
- static float maxdiff = 0.f;
- if (maxdiff < diff)
- {
- maxdiff = diff;
- printf("maxdiff = %20.10f\n", maxdiff);
- }
- }
- //this is used for SAT
- //hostHasSepAxis[i] = 1;
- //hostSepAxis[i] = sepAxis2;
-
- //add contact point
-
- //int contactIndex = nGlobalContactsOut;
- b3Contact4& newContact = hostContacts.at(nGlobalContactsOut);
- nGlobalContactsOut++;
- newContact.m_batchIdx = 0; //i;
- newContact.m_bodyAPtrAndSignBit = (hostBodyBuf.at(bodyIndexA).m_invMass == 0) ? -bodyIndexA : bodyIndexA;
- newContact.m_bodyBPtrAndSignBit = (hostBodyBuf.at(bodyIndexB).m_invMass == 0) ? -bodyIndexB : bodyIndexB;
-
- newContact.m_frictionCoeffCmp = 45874;
- newContact.m_restituitionCoeffCmp = 0;
-
- static float maxDepth = 0.f;
-
- if (depth > maxDepth)
- {
- maxDepth = depth;
- printf("MPR maxdepth = %f\n", maxDepth);
- }
-
- resultPointOnBWorld.w = -depth;
- newContact.m_worldPosB[0] = resultPointOnBWorld;
- //b3Vector3 resultPointOnAWorld = resultPointOnBWorld+depth*sepAxis2;
- newContact.m_worldNormalOnB = sepAxis2;
- newContact.m_worldNormalOnB.w = (b3Scalar)1;
- }
- else
- {
- printf("rejected\n");
- }
- }
- }
- else
- {
- //int contactIndex = computeContactConvexConvex2( i,bodyIndexA,bodyIndexB,collidableIndexA,collidableIndexB,hostBodyBuf, hostCollidables,hostConvexData,hostVertices,hostUniqueEdges,hostIndices,hostFaces,hostContacts,nContacts,maxContactCapacity,oldHostContacts);
- b3AlignedObjectArray<b3Contact4> oldHostContacts;
- int result;
- result = computeContactConvexConvex2( //hostPairs,
- pairIndex,
- bodyIndexA, bodyIndexB,
- collidableIndexA, collidableIndexB,
- hostBodyBuf,
- hostCollidables,
- hostConvexShapeData,
- hostVertices,
- hostUniqueEdges,
- hostIndices,
- hostFaces,
- hostContacts,
- nGlobalContactsOut,
- maxContactCapacity,
- oldHostContacts
- //hostHasSepAxis,
- //hostSepAxis
-
- );
- } //mpr
- } //hostHasSepAxis[i] = 1;
- }
- else
- {
- b3Vector3 c0local = hostConvexShapeData[shapeIndexA].m_localCenter;
- b3Vector3 c0 = b3TransformPoint(c0local, posA, ornA);
- b3Vector3 c1local = hostConvexShapeData[shapeIndexB].m_localCenter;
- b3Vector3 c1 = b3TransformPoint(c1local, posB, ornB);
- b3Vector3 DeltaC2 = c0 - c1;
-
- b3Vector3 sepAxis;
-
- bool hasSepAxisA = b3FindSeparatingAxis(convexShapeA, convexShapeB, posA, ornA, posB, ornB, DeltaC2,
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &sepAxis, &dmin);
-
- if (hasSepAxisA)
- {
- bool hasSepAxisB = b3FindSeparatingAxis(convexShapeB, convexShapeA, posB, ornB, posA, ornA, DeltaC2,
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &sepAxis, &dmin);
- if (hasSepAxisB)
- {
- bool hasEdgeEdge = b3FindSeparatingAxisEdgeEdge(convexShapeA, convexShapeB, posA, ornA, posB, ornB, DeltaC2,
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &hostVertices.at(0), &hostUniqueEdges.at(0), &hostFaces.at(0), &hostIndices.at(0),
- &sepAxis, &dmin, true);
-
- if (hasEdgeEdge)
- {
- hostHasSepAxis[i] = 1;
- hostSepAxis[i] = sepAxis;
- }
- }
- }
- }
- }
-
- if (useGjkContacts) //nGlobalContactsOut>0)
- {
- //printf("nGlobalContactsOut=%d\n",nGlobalContactsOut);
- nContacts = nGlobalContactsOut;
- contactOut->copyFromHost(hostContacts);
-
- m_totalContactsOut.copyFromHostPointer(&nContacts, 1, 0, true);
- }
-
- m_hasSeparatingNormals.copyFromHost(hostHasSepAxis);
- m_sepNormals.copyFromHost(hostSepAxis);
-
- /*
- //double-check results from GPU (comment-out the 'else' so both paths are executed
- b3AlignedObjectArray<int> checkHasSepAxis;
- m_hasSeparatingNormals.copyToHost(checkHasSepAxis);
- static int frameCount = 0;
- frameCount++;
- for (int i=0;i<nPairs;i++)
- {
- if (hostHasSepAxis[i] != checkHasSepAxis[i])
- {
- printf("at frameCount %d hostHasSepAxis[%d] = %d but checkHasSepAxis[i] = %d\n",
- frameCount,i,hostHasSepAxis[i],checkHasSepAxis[i]);
- }
- }
- //m_hasSeparatingNormals.copyFromHost(hostHasSepAxis);
- // m_sepNormals.copyFromHost(hostSepAxis);
- */
- }
-
- numCompoundPairs = m_numCompoundPairsOut.at(0);
- bool useGpuFindCompoundPairs = true;
- if (useGpuFindCompoundPairs)
- {
- B3_PROFILE("findCompoundPairsKernel");
- b3BufferInfoCL bInfo[] =
- {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsLocalSpace.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(m_gpuCompoundPairs.getBufferCL()),
- b3BufferInfoCL(m_numCompoundPairsOut.getBufferCL()),
- b3BufferInfoCL(subTreesGPU->getBufferCL()),
- b3BufferInfoCL(treeNodesGPU->getBufferCL()),
- b3BufferInfoCL(bvhInfo->getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findCompoundPairsKernel, "m_findCompoundPairsKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nPairs);
- launcher.setConst(compoundPairCapacity);
-
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
-
- numCompoundPairs = m_numCompoundPairsOut.at(0);
- //printf("numCompoundPairs =%d\n",numCompoundPairs );
- if (numCompoundPairs)
- {
- //printf("numCompoundPairs=%d\n",numCompoundPairs);
- }
- }
- else
- {
- b3AlignedObjectArray<b3QuantizedBvhNode> treeNodesCPU;
- treeNodesGPU->copyToHost(treeNodesCPU);
-
- b3AlignedObjectArray<b3BvhSubtreeInfo> subTreesCPU;
- subTreesGPU->copyToHost(subTreesCPU);
-
- b3AlignedObjectArray<b3BvhInfo> bvhInfoCPU;
- bvhInfo->copyToHost(bvhInfoCPU);
-
- b3AlignedObjectArray<b3Aabb> hostAabbsWorldSpace;
- clAabbsWorldSpace.copyToHost(hostAabbsWorldSpace);
-
- b3AlignedObjectArray<b3Aabb> hostAabbsLocalSpace;
- clAabbsLocalSpace.copyToHost(hostAabbsLocalSpace);
-
- b3AlignedObjectArray<b3Int4> hostPairs;
- pairs->copyToHost(hostPairs);
-
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
-
- b3AlignedObjectArray<b3Int4> cpuCompoundPairsOut;
- cpuCompoundPairsOut.resize(compoundPairCapacity);
-
- b3AlignedObjectArray<b3Collidable> hostCollidables;
- gpuCollidables.copyToHost(hostCollidables);
-
- b3AlignedObjectArray<b3GpuChildShape> cpuChildShapes;
- gpuChildShapes.copyToHost(cpuChildShapes);
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> hostConvexData;
- convexData.copyToHost(hostConvexData);
-
- b3AlignedObjectArray<b3Vector3> hostVertices;
- gpuVertices.copyToHost(hostVertices);
-
- for (int pairIndex = 0; pairIndex < nPairs; pairIndex++)
- {
- int bodyIndexA = hostPairs[pairIndex].x;
- int bodyIndexB = hostPairs[pairIndex].y;
- int collidableIndexA = hostBodyBuf[bodyIndexA].m_collidableIdx;
- int collidableIndexB = hostBodyBuf[bodyIndexB].m_collidableIdx;
- if (cpuChildShapes.size())
- {
- findCompoundPairsKernel(
- pairIndex,
- bodyIndexA,
- bodyIndexB,
- collidableIndexA,
- collidableIndexB,
- &hostBodyBuf[0],
- &hostCollidables[0],
- &hostConvexData[0],
- hostVertices,
- hostAabbsWorldSpace,
- hostAabbsLocalSpace,
- &cpuChildShapes[0],
- &cpuCompoundPairsOut[0],
- &numCompoundPairs,
- compoundPairCapacity,
- treeNodesCPU,
- subTreesCPU,
- bvhInfoCPU);
- }
- }
-
- m_numCompoundPairsOut.copyFromHostPointer(&numCompoundPairs, 1, 0, true);
- if (numCompoundPairs)
- {
- b3CompoundOverlappingPair* ptr = (b3CompoundOverlappingPair*)&cpuCompoundPairsOut[0];
- m_gpuCompoundPairs.copyFromHostPointer(ptr, numCompoundPairs, 0, true);
- }
- //cpuCompoundPairsOut
- }
- if (numCompoundPairs)
- {
- printf("numCompoundPairs=%d\n", numCompoundPairs);
- }
-
- if (numCompoundPairs > compoundPairCapacity)
- {
- b3Error("Exceeded compound pair capacity (%d/%d)\n", numCompoundPairs, compoundPairCapacity);
- numCompoundPairs = compoundPairCapacity;
- }
-
- m_gpuCompoundPairs.resize(numCompoundPairs);
- m_gpuHasCompoundSepNormals.resize(numCompoundPairs);
- m_gpuCompoundSepNormals.resize(numCompoundPairs);
-
- if (numCompoundPairs)
- {
- B3_PROFILE("processCompoundPairsPrimitivesKernel");
- b3BufferInfoCL bInfo[] =
- {
- b3BufferInfoCL(m_gpuCompoundPairs.getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_processCompoundPairsPrimitivesKernel, "m_processCompoundPairsPrimitivesKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numCompoundPairs);
- launcher.setConst(maxContactCapacity);
-
- int num = numCompoundPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- nContacts = m_totalContactsOut.at(0);
- //printf("nContacts (after processCompoundPairsPrimitivesKernel) = %d\n",nContacts);
- if (nContacts > maxContactCapacity)
- {
- b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
- nContacts = maxContactCapacity;
- }
- }
-
- if (numCompoundPairs)
- {
- B3_PROFILE("processCompoundPairsKernel");
- b3BufferInfoCL bInfo[] =
- {
- b3BufferInfoCL(m_gpuCompoundPairs.getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(m_gpuCompoundSepNormals.getBufferCL()),
- b3BufferInfoCL(m_gpuHasCompoundSepNormals.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_processCompoundPairsKernel, "m_processCompoundPairsKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numCompoundPairs);
-
- int num = numCompoundPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
-
- //printf("numConcave = %d\n",numConcave);
-
- // printf("hostNormals.size()=%d\n",hostNormals.size());
- //int numPairs = pairCount.at(0);
- }
- int vertexFaceCapacity = 64;
-
- {
- //now perform the tree query on GPU
-
- if (treeNodesGPU->size() && treeNodesGPU->size())
- {
- if (bvhTraversalKernelGPU)
- {
- B3_PROFILE("m_bvhTraversalKernel");
-
- numConcavePairs = m_numConcavePairsOut.at(0);
-
- b3LauncherCL launcher(m_queue, m_bvhTraversalKernel, "m_bvhTraversalKernel");
- launcher.setBuffer(pairs->getBufferCL());
- launcher.setBuffer(bodyBuf->getBufferCL());
- launcher.setBuffer(gpuCollidables.getBufferCL());
- launcher.setBuffer(clAabbsWorldSpace.getBufferCL());
- launcher.setBuffer(triangleConvexPairsOut.getBufferCL());
- launcher.setBuffer(m_numConcavePairsOut.getBufferCL());
- launcher.setBuffer(subTreesGPU->getBufferCL());
- launcher.setBuffer(treeNodesGPU->getBufferCL());
- launcher.setBuffer(bvhInfo->getBufferCL());
-
- launcher.setConst(nPairs);
- launcher.setConst(maxTriConvexPairCapacity);
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- numConcavePairs = m_numConcavePairsOut.at(0);
- }
- else
- {
- b3AlignedObjectArray<b3Int4> hostPairs;
- pairs->copyToHost(hostPairs);
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
- b3AlignedObjectArray<b3Collidable> hostCollidables;
- gpuCollidables.copyToHost(hostCollidables);
- b3AlignedObjectArray<b3Aabb> hostAabbsWorldSpace;
- clAabbsWorldSpace.copyToHost(hostAabbsWorldSpace);
-
- //int maxTriConvexPairCapacity,
- b3AlignedObjectArray<b3Int4> triangleConvexPairsOutHost;
- triangleConvexPairsOutHost.resize(maxTriConvexPairCapacity);
-
- //int numTriConvexPairsOutHost=0;
- numConcavePairs = 0;
- //m_numConcavePairsOut
-
- b3AlignedObjectArray<b3QuantizedBvhNode> treeNodesCPU;
- treeNodesGPU->copyToHost(treeNodesCPU);
- b3AlignedObjectArray<b3BvhSubtreeInfo> subTreesCPU;
- subTreesGPU->copyToHost(subTreesCPU);
- b3AlignedObjectArray<b3BvhInfo> bvhInfoCPU;
- bvhInfo->copyToHost(bvhInfoCPU);
- //compute it...
-
- volatile int hostNumConcavePairsOut = 0;
-
- //
- for (int i = 0; i < nPairs; i++)
- {
- b3BvhTraversal(&hostPairs.at(0),
- &hostBodyBuf.at(0),
- &hostCollidables.at(0),
- &hostAabbsWorldSpace.at(0),
- &triangleConvexPairsOutHost.at(0),
- &hostNumConcavePairsOut,
- &subTreesCPU.at(0),
- &treeNodesCPU.at(0),
- &bvhInfoCPU.at(0),
- nPairs,
- maxTriConvexPairCapacity,
- i);
- }
- numConcavePairs = hostNumConcavePairsOut;
-
- if (hostNumConcavePairsOut)
- {
- triangleConvexPairsOutHost.resize(hostNumConcavePairsOut);
- triangleConvexPairsOut.copyFromHost(triangleConvexPairsOutHost);
- }
- //
-
- m_numConcavePairsOut.resize(0);
- m_numConcavePairsOut.push_back(numConcavePairs);
- }
-
- //printf("numConcavePairs=%d (max = %d\n",numConcavePairs,maxTriConvexPairCapacity);
-
- if (numConcavePairs > maxTriConvexPairCapacity)
- {
- static int exceeded_maxTriConvexPairCapacity_count = 0;
- b3Error("Exceeded the maxTriConvexPairCapacity (found %d but max is %d, it happened %d times)\n",
- numConcavePairs, maxTriConvexPairCapacity, exceeded_maxTriConvexPairCapacity_count++);
- numConcavePairs = maxTriConvexPairCapacity;
- }
- triangleConvexPairsOut.resize(numConcavePairs);
-
- if (numConcavePairs)
- {
- clippingFacesOutGPU.resize(numConcavePairs);
- worldNormalsAGPU.resize(numConcavePairs);
- worldVertsA1GPU.resize(vertexFaceCapacity * (numConcavePairs));
- worldVertsB1GPU.resize(vertexFaceCapacity * (numConcavePairs));
-
- if (findConcaveSeparatingAxisKernelGPU)
- {
- /*
- m_concaveHasSeparatingNormals.copyFromHost(concaveHasSeparatingNormalsCPU);
- clippingFacesOutGPU.copyFromHost(clippingFacesOutCPU);
- worldVertsA1GPU.copyFromHost(worldVertsA1CPU);
- worldNormalsAGPU.copyFromHost(worldNormalsACPU);
- worldVertsB1GPU.copyFromHost(worldVertsB1CPU);
- */
-
- //now perform a SAT test for each triangle-convex element (stored in triangleConvexPairsOut)
- if (splitSearchSepAxisConcave)
- {
- //printf("numConcavePairs = %d\n",numConcavePairs);
- m_dmins.resize(numConcavePairs);
- {
- B3_PROFILE("findConcaveSeparatingAxisVertexFaceKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(triangleConvexPairsOut.getBufferCL()),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(m_concaveSepNormals.getBufferCL()),
- b3BufferInfoCL(m_concaveHasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsA1GPU.getBufferCL()),
- b3BufferInfoCL(worldNormalsAGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB1GPU.getBufferCL()),
- b3BufferInfoCL(m_dmins.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findConcaveSeparatingAxisVertexFaceKernel, "m_findConcaveSeparatingAxisVertexFaceKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
- launcher.setConst(numConcavePairs);
-
- int num = numConcavePairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
- // numConcavePairs = 0;
- if (1)
- {
- B3_PROFILE("findConcaveSeparatingAxisEdgeEdgeKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(triangleConvexPairsOut.getBufferCL()),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(m_concaveSepNormals.getBufferCL()),
- b3BufferInfoCL(m_concaveHasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsA1GPU.getBufferCL()),
- b3BufferInfoCL(worldNormalsAGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB1GPU.getBufferCL()),
- b3BufferInfoCL(m_dmins.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findConcaveSeparatingAxisEdgeEdgeKernel, "m_findConcaveSeparatingAxisEdgeEdgeKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
- launcher.setConst(numConcavePairs);
-
- int num = numConcavePairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
-
- // numConcavePairs = 0;
- }
- else
- {
- B3_PROFILE("findConcaveSeparatingAxisKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(triangleConvexPairsOut.getBufferCL()),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(m_concaveSepNormals.getBufferCL()),
- b3BufferInfoCL(m_concaveHasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsA1GPU.getBufferCL()),
- b3BufferInfoCL(worldNormalsAGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB1GPU.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findConcaveSeparatingAxisKernel, "m_findConcaveSeparatingAxisKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
- launcher.setConst(numConcavePairs);
-
- int num = numConcavePairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
- }
- else
- {
- b3AlignedObjectArray<b3Int4> clippingFacesOutCPU;
- b3AlignedObjectArray<b3Vector3> worldVertsA1CPU;
- b3AlignedObjectArray<b3Vector3> worldNormalsACPU;
- b3AlignedObjectArray<b3Vector3> worldVertsB1CPU;
- b3AlignedObjectArray<int> concaveHasSeparatingNormalsCPU;
-
- b3AlignedObjectArray<b3Int4> triangleConvexPairsOutHost;
- triangleConvexPairsOut.copyToHost(triangleConvexPairsOutHost);
- //triangleConvexPairsOutHost.resize(maxTriConvexPairCapacity);
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
- b3AlignedObjectArray<b3Collidable> hostCollidables;
- gpuCollidables.copyToHost(hostCollidables);
- b3AlignedObjectArray<b3Aabb> hostAabbsWorldSpace;
- clAabbsWorldSpace.copyToHost(hostAabbsWorldSpace);
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> hostConvexData;
- convexData.copyToHost(hostConvexData);
-
- b3AlignedObjectArray<b3Vector3> hostVertices;
- gpuVertices.copyToHost(hostVertices);
-
- b3AlignedObjectArray<b3Vector3> hostUniqueEdges;
- gpuUniqueEdges.copyToHost(hostUniqueEdges);
- b3AlignedObjectArray<b3GpuFace> hostFaces;
- gpuFaces.copyToHost(hostFaces);
- b3AlignedObjectArray<int> hostIndices;
- gpuIndices.copyToHost(hostIndices);
- b3AlignedObjectArray<b3GpuChildShape> cpuChildShapes;
- gpuChildShapes.copyToHost(cpuChildShapes);
-
- b3AlignedObjectArray<b3Vector3> concaveSepNormalsHost;
- m_concaveSepNormals.copyToHost(concaveSepNormalsHost);
- concaveHasSeparatingNormalsCPU.resize(concaveSepNormalsHost.size());
-
- b3GpuChildShape* childShapePointerCPU = 0;
- if (cpuChildShapes.size())
- childShapePointerCPU = &cpuChildShapes.at(0);
-
- clippingFacesOutCPU.resize(clippingFacesOutGPU.size());
- worldVertsA1CPU.resize(worldVertsA1GPU.size());
- worldNormalsACPU.resize(worldNormalsAGPU.size());
- worldVertsB1CPU.resize(worldVertsB1GPU.size());
-
- for (int i = 0; i < numConcavePairs; i++)
- {
- b3FindConcaveSeparatingAxisKernel(&triangleConvexPairsOutHost.at(0),
- &hostBodyBuf.at(0),
- &hostCollidables.at(0),
- &hostConvexData.at(0), &hostVertices.at(0), &hostUniqueEdges.at(0),
- &hostFaces.at(0), &hostIndices.at(0), childShapePointerCPU,
- &hostAabbsWorldSpace.at(0),
- &concaveSepNormalsHost.at(0),
- &clippingFacesOutCPU.at(0),
- &worldVertsA1CPU.at(0),
- &worldNormalsACPU.at(0),
- &worldVertsB1CPU.at(0),
- &concaveHasSeparatingNormalsCPU.at(0),
- vertexFaceCapacity,
- numConcavePairs, i);
- };
-
- m_concaveSepNormals.copyFromHost(concaveSepNormalsHost);
- m_concaveHasSeparatingNormals.copyFromHost(concaveHasSeparatingNormalsCPU);
- clippingFacesOutGPU.copyFromHost(clippingFacesOutCPU);
- worldVertsA1GPU.copyFromHost(worldVertsA1CPU);
- worldNormalsAGPU.copyFromHost(worldNormalsACPU);
- worldVertsB1GPU.copyFromHost(worldVertsB1CPU);
- }
- // b3AlignedObjectArray<b3Vector3> cpuCompoundSepNormals;
- // m_concaveSepNormals.copyToHost(cpuCompoundSepNormals);
- // b3AlignedObjectArray<b3Int4> cpuConcavePairs;
- // triangleConvexPairsOut.copyToHost(cpuConcavePairs);
- }
- }
- }
-
- if (numConcavePairs)
- {
- if (numConcavePairs)
- {
- B3_PROFILE("findConcaveSphereContactsKernel");
- nContacts = m_totalContactsOut.at(0);
- // printf("nContacts1 = %d\n",nContacts);
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(triangleConvexPairsOut.getBufferCL()),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(clAabbsWorldSpace.getBufferCL(), true),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findConcaveSphereContactsKernel, "m_findConcaveSphereContactsKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
-
- launcher.setConst(numConcavePairs);
- launcher.setConst(maxContactCapacity);
-
- int num = numConcavePairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- nContacts = m_totalContactsOut.at(0);
- //printf("nContacts (after findConcaveSphereContactsKernel) = %d\n",nContacts);
-
- //printf("nContacts2 = %d\n",nContacts);
-
- if (nContacts >= maxContactCapacity)
- {
- b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
- nContacts = maxContactCapacity;
- }
- }
- }
-
-#ifdef __APPLE__
- bool contactClippingOnGpu = true;
-#else
- bool contactClippingOnGpu = true;
-#endif
-
- if (contactClippingOnGpu)
- {
- m_totalContactsOut.copyFromHostPointer(&nContacts, 1, 0, true);
- // printf("nContacts3 = %d\n",nContacts);
-
- //B3_PROFILE("clipHullHullKernel");
-
- bool breakupConcaveConvexKernel = true;
-
-#ifdef __APPLE__
- //actually, some Apple OpenCL platform/device combinations work fine...
- breakupConcaveConvexKernel = true;
-#endif
- //concave-convex contact clipping
- if (numConcavePairs)
- {
- // printf("numConcavePairs = %d\n", numConcavePairs);
- // nContacts = m_totalContactsOut.at(0);
- // printf("nContacts before = %d\n", nContacts);
-
- if (breakupConcaveConvexKernel)
- {
- worldVertsB2GPU.resize(vertexFaceCapacity * numConcavePairs);
-
- //clipFacesAndFindContacts
-
- if (clipConcaveFacesAndFindContactsCPU)
- {
- b3AlignedObjectArray<b3Int4> clippingFacesOutCPU;
- b3AlignedObjectArray<b3Vector3> worldVertsA1CPU;
- b3AlignedObjectArray<b3Vector3> worldNormalsACPU;
- b3AlignedObjectArray<b3Vector3> worldVertsB1CPU;
-
- clippingFacesOutGPU.copyToHost(clippingFacesOutCPU);
- worldVertsA1GPU.copyToHost(worldVertsA1CPU);
- worldNormalsAGPU.copyToHost(worldNormalsACPU);
- worldVertsB1GPU.copyToHost(worldVertsB1CPU);
-
- b3AlignedObjectArray<int> concaveHasSeparatingNormalsCPU;
- m_concaveHasSeparatingNormals.copyToHost(concaveHasSeparatingNormalsCPU);
-
- b3AlignedObjectArray<b3Vector3> concaveSepNormalsHost;
- m_concaveSepNormals.copyToHost(concaveSepNormalsHost);
-
- b3AlignedObjectArray<b3Vector3> worldVertsB2CPU;
- worldVertsB2CPU.resize(worldVertsB2GPU.size());
-
- for (int i = 0; i < numConcavePairs; i++)
- {
- clipFacesAndFindContactsKernel(&concaveSepNormalsHost.at(0),
- &concaveHasSeparatingNormalsCPU.at(0),
- &clippingFacesOutCPU.at(0),
- &worldVertsA1CPU.at(0),
- &worldNormalsACPU.at(0),
- &worldVertsB1CPU.at(0),
- &worldVertsB2CPU.at(0),
- vertexFaceCapacity,
- i);
- }
-
- clippingFacesOutGPU.copyFromHost(clippingFacesOutCPU);
- worldVertsB2GPU.copyFromHost(worldVertsB2CPU);
- }
- else
- {
- if (1)
- {
- B3_PROFILE("clipFacesAndFindContacts");
- //nContacts = m_totalContactsOut.at(0);
- //int h = m_hasSeparatingNormals.at(0);
- //int4 p = clippingFacesOutGPU.at(0);
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_concaveSepNormals.getBufferCL()),
- b3BufferInfoCL(m_concaveHasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsA1GPU.getBufferCL()),
- b3BufferInfoCL(worldNormalsAGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB1GPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB2GPU.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_clipFacesAndFindContacts, "m_clipFacesAndFindContacts");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
-
- launcher.setConst(numConcavePairs);
- int debugMode = 0;
- launcher.setConst(debugMode);
- int num = numConcavePairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- //int bla = m_totalContactsOut.at(0);
- }
- }
- //contactReduction
- {
- int newContactCapacity = nContacts + numConcavePairs;
- contactOut->reserve(newContactCapacity);
- if (reduceConcaveContactsOnGPU)
- {
- // printf("newReservation = %d\n",newReservation);
- {
- B3_PROFILE("newContactReductionKernel");
- b3BufferInfoCL bInfo[] =
- {
- b3BufferInfoCL(triangleConvexPairsOut.getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(m_concaveSepNormals.getBufferCL()),
- b3BufferInfoCL(m_concaveHasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB2GPU.getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_newContactReductionKernel, "m_newContactReductionKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
- launcher.setConst(newContactCapacity);
- launcher.setConst(numConcavePairs);
- int num = numConcavePairs;
-
- launcher.launch1D(num);
- }
- nContacts = m_totalContactsOut.at(0);
- contactOut->resize(nContacts);
-
- //printf("contactOut4 (after newContactReductionKernel) = %d\n",nContacts);
- }
- else
- {
- volatile int nGlobalContactsOut = nContacts;
- b3AlignedObjectArray<b3Int4> triangleConvexPairsOutHost;
- triangleConvexPairsOut.copyToHost(triangleConvexPairsOutHost);
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
-
- b3AlignedObjectArray<int> concaveHasSeparatingNormalsCPU;
- m_concaveHasSeparatingNormals.copyToHost(concaveHasSeparatingNormalsCPU);
-
- b3AlignedObjectArray<b3Vector3> concaveSepNormalsHost;
- m_concaveSepNormals.copyToHost(concaveSepNormalsHost);
-
- b3AlignedObjectArray<b3Contact4> hostContacts;
- if (nContacts)
- {
- contactOut->copyToHost(hostContacts);
- }
- hostContacts.resize(newContactCapacity);
-
- b3AlignedObjectArray<b3Int4> clippingFacesOutCPU;
- b3AlignedObjectArray<b3Vector3> worldVertsB2CPU;
-
- clippingFacesOutGPU.copyToHost(clippingFacesOutCPU);
- worldVertsB2GPU.copyToHost(worldVertsB2CPU);
-
- for (int i = 0; i < numConcavePairs; i++)
- {
- b3NewContactReductionKernel(&triangleConvexPairsOutHost.at(0),
- &hostBodyBuf.at(0),
- &concaveSepNormalsHost.at(0),
- &concaveHasSeparatingNormalsCPU.at(0),
- &hostContacts.at(0),
- &clippingFacesOutCPU.at(0),
- &worldVertsB2CPU.at(0),
- &nGlobalContactsOut,
- vertexFaceCapacity,
- newContactCapacity,
- numConcavePairs,
- i);
- }
-
- nContacts = nGlobalContactsOut;
- m_totalContactsOut.copyFromHostPointer(&nContacts, 1, 0, true);
- // nContacts = m_totalContactsOut.at(0);
- //contactOut->resize(nContacts);
- hostContacts.resize(nContacts);
- //printf("contactOut4 (after newContactReductionKernel) = %d\n",nContacts);
- contactOut->copyFromHost(hostContacts);
- }
- }
- //re-use?
- }
- else
- {
- B3_PROFILE("clipHullHullConcaveConvexKernel");
- nContacts = m_totalContactsOut.at(0);
- int newContactCapacity = contactOut->capacity();
-
- //printf("contactOut5 = %d\n",nContacts);
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(triangleConvexPairsOut.getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(m_concaveSepNormals.getBufferCL()),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_clipHullHullConcaveConvexKernel, "m_clipHullHullConcaveConvexKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(newContactCapacity);
- launcher.setConst(numConcavePairs);
- int num = numConcavePairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- nContacts = m_totalContactsOut.at(0);
- contactOut->resize(nContacts);
- //printf("contactOut6 = %d\n",nContacts);
- b3AlignedObjectArray<b3Contact4> cpuContacts;
- contactOut->copyToHost(cpuContacts);
- }
- // printf("nContacts after = %d\n", nContacts);
- } //numConcavePairs
-
- //convex-convex contact clipping
-
- bool breakupKernel = false;
-
-#ifdef __APPLE__
- breakupKernel = true;
-#endif
-
-#ifdef CHECK_ON_HOST
- bool computeConvexConvex = false;
-#else
- bool computeConvexConvex = true;
-#endif //CHECK_ON_HOST
- if (computeConvexConvex)
- {
- B3_PROFILE("clipHullHullKernel");
- if (breakupKernel)
- {
- worldVertsB1GPU.resize(vertexFaceCapacity * nPairs);
- clippingFacesOutGPU.resize(nPairs);
- worldNormalsAGPU.resize(nPairs);
- worldVertsA1GPU.resize(vertexFaceCapacity * nPairs);
- worldVertsB2GPU.resize(vertexFaceCapacity * nPairs);
-
- if (findConvexClippingFacesGPU)
- {
- B3_PROFILE("findClippingFacesKernel");
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsA1GPU.getBufferCL()),
- b3BufferInfoCL(worldNormalsAGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB1GPU.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_findClippingFacesKernel, "m_findClippingFacesKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
- launcher.setConst(nPairs);
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
- else
- {
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> hostConvexData;
- convexData.copyToHost(hostConvexData);
- b3AlignedObjectArray<b3Collidable> hostCollidables;
- gpuCollidables.copyToHost(hostCollidables);
-
- b3AlignedObjectArray<int> hostHasSepNormals;
- m_hasSeparatingNormals.copyToHost(hostHasSepNormals);
- b3AlignedObjectArray<b3Vector3> cpuSepNormals;
- m_sepNormals.copyToHost(cpuSepNormals);
-
- b3AlignedObjectArray<b3Int4> hostPairs;
- pairs->copyToHost(hostPairs);
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
-
- //worldVertsB1GPU.resize(vertexFaceCapacity*nPairs);
- b3AlignedObjectArray<b3Vector3> worldVertsB1CPU;
- worldVertsB1GPU.copyToHost(worldVertsB1CPU);
-
- b3AlignedObjectArray<b3Int4> clippingFacesOutCPU;
- clippingFacesOutGPU.copyToHost(clippingFacesOutCPU);
-
- b3AlignedObjectArray<b3Vector3> worldNormalsACPU;
- worldNormalsACPU.resize(nPairs);
-
- b3AlignedObjectArray<b3Vector3> worldVertsA1CPU;
- worldVertsA1CPU.resize(worldVertsA1GPU.size());
-
- b3AlignedObjectArray<b3Vector3> hostVertices;
- gpuVertices.copyToHost(hostVertices);
- b3AlignedObjectArray<b3GpuFace> hostFaces;
- gpuFaces.copyToHost(hostFaces);
- b3AlignedObjectArray<int> hostIndices;
- gpuIndices.copyToHost(hostIndices);
-
- for (int i = 0; i < nPairs; i++)
- {
- int bodyIndexA = hostPairs[i].x;
- int bodyIndexB = hostPairs[i].y;
-
- int collidableIndexA = hostBodyBuf[bodyIndexA].m_collidableIdx;
- int collidableIndexB = hostBodyBuf[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = hostCollidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = hostCollidables[collidableIndexB].m_shapeIndex;
-
- if (hostHasSepNormals[i])
- {
- b3FindClippingFaces(cpuSepNormals[i],
- &hostConvexData[shapeIndexA],
- &hostConvexData[shapeIndexB],
- hostBodyBuf[bodyIndexA].m_pos, hostBodyBuf[bodyIndexA].m_quat,
- hostBodyBuf[bodyIndexB].m_pos, hostBodyBuf[bodyIndexB].m_quat,
- &worldVertsA1CPU.at(0), &worldNormalsACPU.at(0),
- &worldVertsB1CPU.at(0),
- vertexFaceCapacity, minDist, maxDist,
- &hostVertices.at(0), &hostFaces.at(0),
- &hostIndices.at(0),
- &hostVertices.at(0), &hostFaces.at(0),
- &hostIndices.at(0), &clippingFacesOutCPU.at(0), i);
- }
- }
-
- clippingFacesOutGPU.copyFromHost(clippingFacesOutCPU);
- worldVertsA1GPU.copyFromHost(worldVertsA1CPU);
- worldNormalsAGPU.copyFromHost(worldNormalsACPU);
- worldVertsB1GPU.copyFromHost(worldVertsB1CPU);
- }
-
- ///clip face B against face A, reduce contacts and append them to a global contact array
- if (1)
- {
- if (clipConvexFacesAndFindContactsCPU)
- {
- //b3AlignedObjectArray<b3Int4> hostPairs;
- //pairs->copyToHost(hostPairs);
-
- b3AlignedObjectArray<b3Vector3> hostSepNormals;
- m_sepNormals.copyToHost(hostSepNormals);
- b3AlignedObjectArray<int> hostHasSepAxis;
- m_hasSeparatingNormals.copyToHost(hostHasSepAxis);
-
- b3AlignedObjectArray<b3Int4> hostClippingFaces;
- clippingFacesOutGPU.copyToHost(hostClippingFaces);
- b3AlignedObjectArray<b3Vector3> worldVertsB2CPU;
- worldVertsB2CPU.resize(vertexFaceCapacity * nPairs);
-
- b3AlignedObjectArray<b3Vector3> worldVertsA1CPU;
- worldVertsA1GPU.copyToHost(worldVertsA1CPU);
- b3AlignedObjectArray<b3Vector3> worldNormalsACPU;
- worldNormalsAGPU.copyToHost(worldNormalsACPU);
-
- b3AlignedObjectArray<b3Vector3> worldVertsB1CPU;
- worldVertsB1GPU.copyToHost(worldVertsB1CPU);
-
- /*
- __global const b3Float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global b3Int4* clippingFacesOut,
- __global b3Float4* worldVertsA1,
- __global b3Float4* worldNormalsA1,
- __global b3Float4* worldVertsB1,
- __global b3Float4* worldVertsB2,
- int vertexFaceCapacity,
- int pairIndex
- */
- for (int i = 0; i < nPairs; i++)
- {
- clipFacesAndFindContactsKernel(
- &hostSepNormals.at(0),
- &hostHasSepAxis.at(0),
- &hostClippingFaces.at(0),
- &worldVertsA1CPU.at(0),
- &worldNormalsACPU.at(0),
- &worldVertsB1CPU.at(0),
- &worldVertsB2CPU.at(0),
-
- vertexFaceCapacity,
- i);
- }
-
- clippingFacesOutGPU.copyFromHost(hostClippingFaces);
- worldVertsB2GPU.copyFromHost(worldVertsB2CPU);
- }
- else
- {
- B3_PROFILE("clipFacesAndFindContacts");
- //nContacts = m_totalContactsOut.at(0);
- //int h = m_hasSeparatingNormals.at(0);
- //int4 p = clippingFacesOutGPU.at(0);
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsA1GPU.getBufferCL()),
- b3BufferInfoCL(worldNormalsAGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB1GPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB2GPU.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_clipFacesAndFindContacts, "m_clipFacesAndFindContacts");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
-
- launcher.setConst(nPairs);
- int debugMode = 0;
- launcher.setConst(debugMode);
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
- }
-
- {
- nContacts = m_totalContactsOut.at(0);
- //printf("nContacts = %d\n",nContacts);
-
- int newContactCapacity = nContacts + nPairs;
- contactOut->reserve(newContactCapacity);
-
- if (reduceConvexContactsOnGPU)
- {
- {
- B3_PROFILE("newContactReductionKernel");
- b3BufferInfoCL bInfo[] =
- {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(clippingFacesOutGPU.getBufferCL()),
- b3BufferInfoCL(worldVertsB2GPU.getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_newContactReductionKernel, "m_newContactReductionKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(vertexFaceCapacity);
- launcher.setConst(newContactCapacity);
- launcher.setConst(nPairs);
- int num = nPairs;
-
- launcher.launch1D(num);
- }
- nContacts = m_totalContactsOut.at(0);
- contactOut->resize(nContacts);
- }
- else
- {
- volatile int nGlobalContactsOut = nContacts;
- b3AlignedObjectArray<b3Int4> hostPairs;
- pairs->copyToHost(hostPairs);
- b3AlignedObjectArray<b3RigidBodyData> hostBodyBuf;
- bodyBuf->copyToHost(hostBodyBuf);
- b3AlignedObjectArray<b3Vector3> hostSepNormals;
- m_sepNormals.copyToHost(hostSepNormals);
- b3AlignedObjectArray<int> hostHasSepAxis;
- m_hasSeparatingNormals.copyToHost(hostHasSepAxis);
- b3AlignedObjectArray<b3Contact4> hostContactsOut;
- contactOut->copyToHost(hostContactsOut);
- hostContactsOut.resize(newContactCapacity);
-
- b3AlignedObjectArray<b3Int4> hostClippingFaces;
- clippingFacesOutGPU.copyToHost(hostClippingFaces);
- b3AlignedObjectArray<b3Vector3> worldVertsB2CPU;
- worldVertsB2GPU.copyToHost(worldVertsB2CPU);
-
- for (int i = 0; i < nPairs; i++)
- {
- b3NewContactReductionKernel(&hostPairs.at(0),
- &hostBodyBuf.at(0),
- &hostSepNormals.at(0),
- &hostHasSepAxis.at(0),
- &hostContactsOut.at(0),
- &hostClippingFaces.at(0),
- &worldVertsB2CPU.at(0),
- &nGlobalContactsOut,
- vertexFaceCapacity,
- newContactCapacity,
- nPairs,
- i);
- }
-
- nContacts = nGlobalContactsOut;
- m_totalContactsOut.copyFromHostPointer(&nContacts, 1, 0, true);
- hostContactsOut.resize(nContacts);
- //printf("contactOut4 (after newContactReductionKernel) = %d\n",nContacts);
- contactOut->copyFromHost(hostContactsOut);
- }
- // b3Contact4 pt = contactOut->at(0);
- // printf("nContacts = %d\n",nContacts);
- }
- }
- }
- else //breakupKernel
- {
- if (nPairs)
- {
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(pairs->getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(m_sepNormals.getBufferCL()),
- b3BufferInfoCL(m_hasSeparatingNormals.getBufferCL()),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_clipHullHullKernel, "m_clipHullHullKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nPairs);
- launcher.setConst(maxContactCapacity);
-
- int num = nPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
-
- nContacts = m_totalContactsOut.at(0);
- if (nContacts >= maxContactCapacity)
- {
- b3Error("Exceeded contact capacity (%d/%d)\n", nContacts, maxContactCapacity);
- nContacts = maxContactCapacity;
- }
- contactOut->resize(nContacts);
- }
- }
-
- int nCompoundsPairs = m_gpuCompoundPairs.size();
-
- if (nCompoundsPairs)
- {
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_gpuCompoundPairs.getBufferCL(), true),
- b3BufferInfoCL(bodyBuf->getBufferCL(), true),
- b3BufferInfoCL(gpuCollidables.getBufferCL(), true),
- b3BufferInfoCL(convexData.getBufferCL(), true),
- b3BufferInfoCL(gpuVertices.getBufferCL(), true),
- b3BufferInfoCL(gpuUniqueEdges.getBufferCL(), true),
- b3BufferInfoCL(gpuFaces.getBufferCL(), true),
- b3BufferInfoCL(gpuIndices.getBufferCL(), true),
- b3BufferInfoCL(gpuChildShapes.getBufferCL(), true),
- b3BufferInfoCL(m_gpuCompoundSepNormals.getBufferCL(), true),
- b3BufferInfoCL(m_gpuHasCompoundSepNormals.getBufferCL(), true),
- b3BufferInfoCL(contactOut->getBufferCL()),
- b3BufferInfoCL(m_totalContactsOut.getBufferCL())};
- b3LauncherCL launcher(m_queue, m_clipCompoundsHullHullKernel, "m_clipCompoundsHullHullKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nCompoundsPairs);
- launcher.setConst(maxContactCapacity);
-
- int num = nCompoundsPairs;
- launcher.launch1D(num);
- clFinish(m_queue);
-
- nContacts = m_totalContactsOut.at(0);
- if (nContacts > maxContactCapacity)
- {
- b3Error("Error: contacts exceeds capacity (%d/%d)\n", nContacts, maxContactCapacity);
- nContacts = maxContactCapacity;
- }
- contactOut->resize(nContacts);
- } //if nCompoundsPairs
- }
- } //contactClippingOnGpu
-
- //printf("nContacts end = %d\n",nContacts);
-
- //printf("frameCount = %d\n",frameCount++);
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.h
deleted file mode 100644
index 53e8c4ed4d..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.h
+++ /dev/null
@@ -1,106 +0,0 @@
-
-#ifndef _CONVEX_HULL_CONTACT_H
-#define _CONVEX_HULL_CONTACT_H
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-#include "Bullet3Common/shared/b3Int2.h"
-#include "Bullet3Common/shared/b3Int4.h"
-#include "b3OptimizedBvh.h"
-#include "b3BvhInfo.h"
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-
-//#include "../../dynamics/basic_demo/Stubs/ChNarrowPhase.h"
-
-struct GpuSatCollision
-{
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
- cl_kernel m_findSeparatingAxisKernel;
- cl_kernel m_mprPenetrationKernel;
- cl_kernel m_findSeparatingAxisUnitSphereKernel;
-
- cl_kernel m_findSeparatingAxisVertexFaceKernel;
- cl_kernel m_findSeparatingAxisEdgeEdgeKernel;
-
- cl_kernel m_findConcaveSeparatingAxisKernel;
- cl_kernel m_findConcaveSeparatingAxisVertexFaceKernel;
- cl_kernel m_findConcaveSeparatingAxisEdgeEdgeKernel;
-
- cl_kernel m_findCompoundPairsKernel;
- cl_kernel m_processCompoundPairsKernel;
-
- cl_kernel m_clipHullHullKernel;
- cl_kernel m_clipCompoundsHullHullKernel;
-
- cl_kernel m_clipFacesAndFindContacts;
- cl_kernel m_findClippingFacesKernel;
-
- cl_kernel m_clipHullHullConcaveConvexKernel;
- // cl_kernel m_extractManifoldAndAddContactKernel;
- cl_kernel m_newContactReductionKernel;
-
- cl_kernel m_bvhTraversalKernel;
- cl_kernel m_primitiveContactsKernel;
- cl_kernel m_findConcaveSphereContactsKernel;
-
- cl_kernel m_processCompoundPairsPrimitivesKernel;
-
- b3OpenCLArray<b3Vector3> m_unitSphereDirections;
-
- b3OpenCLArray<int> m_totalContactsOut;
-
- b3OpenCLArray<b3Vector3> m_sepNormals;
- b3OpenCLArray<float> m_dmins;
-
- b3OpenCLArray<int> m_hasSeparatingNormals;
- b3OpenCLArray<b3Vector3> m_concaveSepNormals;
- b3OpenCLArray<int> m_concaveHasSeparatingNormals;
- b3OpenCLArray<int> m_numConcavePairsOut;
- b3OpenCLArray<b3CompoundOverlappingPair> m_gpuCompoundPairs;
- b3OpenCLArray<b3Vector3> m_gpuCompoundSepNormals;
- b3OpenCLArray<int> m_gpuHasCompoundSepNormals;
- b3OpenCLArray<int> m_numCompoundPairsOut;
-
- GpuSatCollision(cl_context ctx, cl_device_id device, cl_command_queue q);
- virtual ~GpuSatCollision();
-
- void computeConvexConvexContactsGPUSAT(b3OpenCLArray<b3Int4>* pairs, int nPairs,
- const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
- b3OpenCLArray<b3Contact4>* contactOut, int& nContacts,
- const b3OpenCLArray<b3Contact4>* oldContacts,
- int maxContactCapacity,
- int compoundPairCapacity,
- const b3OpenCLArray<b3ConvexPolyhedronData>& hostConvexData,
- const b3OpenCLArray<b3Vector3>& vertices,
- const b3OpenCLArray<b3Vector3>& uniqueEdges,
- const b3OpenCLArray<b3GpuFace>& faces,
- const b3OpenCLArray<int>& indices,
- const b3OpenCLArray<b3Collidable>& gpuCollidables,
- const b3OpenCLArray<b3GpuChildShape>& gpuChildShapes,
-
- const b3OpenCLArray<b3Aabb>& clAabbsWorldSpace,
- const b3OpenCLArray<b3Aabb>& clAabbsLocalSpace,
-
- b3OpenCLArray<b3Vector3>& worldVertsB1GPU,
- b3OpenCLArray<b3Int4>& clippingFacesOutGPU,
- b3OpenCLArray<b3Vector3>& worldNormalsAGPU,
- b3OpenCLArray<b3Vector3>& worldVertsA1GPU,
- b3OpenCLArray<b3Vector3>& worldVertsB2GPU,
- b3AlignedObjectArray<class b3OptimizedBvh*>& bvhData,
- b3OpenCLArray<b3QuantizedBvhNode>* treeNodesGPU,
- b3OpenCLArray<b3BvhSubtreeInfo>* subTreesGPU,
- b3OpenCLArray<b3BvhInfo>* bvhInfo,
- int numObjects,
- int maxTriConvexPairCapacity,
- b3OpenCLArray<b3Int4>& triangleConvexPairs,
- int& numTriConvexPairsOut);
-};
-
-#endif //_CONVEX_HULL_CONTACT_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexPolyhedronCL.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexPolyhedronCL.h
deleted file mode 100644
index c4cf700076..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3ConvexPolyhedronCL.h
+++ /dev/null
@@ -1,7 +0,0 @@
-#ifndef CONVEX_POLYHEDRON_CL
-#define CONVEX_POLYHEDRON_CL
-
-#include "Bullet3Common/b3Transform.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-
-#endif //CONVEX_POLYHEDRON_CL
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.cpp
deleted file mode 100644
index 974b246f03..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.cpp
+++ /dev/null
@@ -1,1062 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the
-use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software in a
-product, an acknowledgment in the product documentation would be appreciated
-but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-GJK-EPA collision solver by Nathanael Presson, 2008
-*/
-
-#include "b3GjkEpa.h"
-
-#include "b3SupportMappings.h"
-
-namespace gjkepa2_impl2
-{
-// Config
-
-/* GJK */
-#define GJK_MAX_ITERATIONS 128
-#define GJK_ACCURACY ((b3Scalar)0.0001)
-#define GJK_MIN_DISTANCE ((b3Scalar)0.0001)
-#define GJK_DUPLICATED_EPS ((b3Scalar)0.0001)
-#define GJK_SIMPLEX2_EPS ((b3Scalar)0.0)
-#define GJK_SIMPLEX3_EPS ((b3Scalar)0.0)
-#define GJK_SIMPLEX4_EPS ((b3Scalar)0.0)
-
-/* EPA */
-#define EPA_MAX_VERTICES 64
-#define EPA_MAX_FACES (EPA_MAX_VERTICES * 2)
-#define EPA_MAX_ITERATIONS 255
-#define EPA_ACCURACY ((b3Scalar)0.0001)
-#define EPA_FALLBACK (10 * EPA_ACCURACY)
-#define EPA_PLANE_EPS ((b3Scalar)0.00001)
-#define EPA_INSIDE_EPS ((b3Scalar)0.01)
-
-// Shorthands
-
-// MinkowskiDiff
-struct b3MinkowskiDiff
-{
- const b3ConvexPolyhedronData* m_shapes[2];
-
- b3Matrix3x3 m_toshape1;
- b3Transform m_toshape0;
-
- bool m_enableMargin;
-
- void EnableMargin(bool enable)
- {
- m_enableMargin = enable;
- }
- inline b3Vector3 Support0(const b3Vector3& d, const b3AlignedObjectArray<b3Vector3>& verticesA) const
- {
- if (m_enableMargin)
- {
- return localGetSupportVertexWithMargin(d, m_shapes[0], verticesA, 0.f);
- }
- else
- {
- return localGetSupportVertexWithoutMargin(d, m_shapes[0], verticesA);
- }
- }
- inline b3Vector3 Support1(const b3Vector3& d, const b3AlignedObjectArray<b3Vector3>& verticesB) const
- {
- if (m_enableMargin)
- {
- return m_toshape0 * (localGetSupportVertexWithMargin(m_toshape1 * d, m_shapes[1], verticesB, 0.f));
- }
- else
- {
- return m_toshape0 * (localGetSupportVertexWithoutMargin(m_toshape1 * d, m_shapes[1], verticesB));
- }
- }
-
- inline b3Vector3 Support(const b3Vector3& d, const b3AlignedObjectArray<b3Vector3>& verticesA, const b3AlignedObjectArray<b3Vector3>& verticesB) const
- {
- return (Support0(d, verticesA) - Support1(-d, verticesB));
- }
- b3Vector3 Support(const b3Vector3& d, unsigned int index, const b3AlignedObjectArray<b3Vector3>& verticesA, const b3AlignedObjectArray<b3Vector3>& verticesB) const
- {
- if (index)
- return (Support1(d, verticesA));
- else
- return (Support0(d, verticesB));
- }
-};
-
-typedef b3MinkowskiDiff tShape;
-
-// GJK
-struct b3GJK
-{
- /* Types */
- struct sSV
- {
- b3Vector3 d, w;
- };
- struct sSimplex
- {
- sSV* c[4];
- b3Scalar p[4];
- unsigned int rank;
- };
- struct eStatus
- {
- enum _
- {
- Valid,
- Inside,
- Failed
- };
- };
- /* Fields */
- tShape m_shape;
- const b3AlignedObjectArray<b3Vector3>& m_verticesA;
- const b3AlignedObjectArray<b3Vector3>& m_verticesB;
- b3Vector3 m_ray;
- b3Scalar m_distance;
- sSimplex m_simplices[2];
- sSV m_store[4];
- sSV* m_free[4];
- unsigned int m_nfree;
- unsigned int m_current;
- sSimplex* m_simplex;
- eStatus::_ m_status;
- /* Methods */
- b3GJK(const b3AlignedObjectArray<b3Vector3>& verticesA, const b3AlignedObjectArray<b3Vector3>& verticesB)
- : m_verticesA(verticesA), m_verticesB(verticesB)
- {
- Initialize();
- }
- void Initialize()
- {
- m_ray = b3MakeVector3(0, 0, 0);
- m_nfree = 0;
- m_status = eStatus::Failed;
- m_current = 0;
- m_distance = 0;
- }
- eStatus::_ Evaluate(const tShape& shapearg, const b3Vector3& guess)
- {
- unsigned int iterations = 0;
- b3Scalar sqdist = 0;
- b3Scalar alpha = 0;
- b3Vector3 lastw[4];
- unsigned int clastw = 0;
- /* Initialize solver */
- m_free[0] = &m_store[0];
- m_free[1] = &m_store[1];
- m_free[2] = &m_store[2];
- m_free[3] = &m_store[3];
- m_nfree = 4;
- m_current = 0;
- m_status = eStatus::Valid;
- m_shape = shapearg;
- m_distance = 0;
- /* Initialize simplex */
- m_simplices[0].rank = 0;
- m_ray = guess;
- const b3Scalar sqrl = m_ray.length2();
- appendvertice(m_simplices[0], sqrl > 0 ? -m_ray : b3MakeVector3(1, 0, 0));
- m_simplices[0].p[0] = 1;
- m_ray = m_simplices[0].c[0]->w;
- sqdist = sqrl;
- lastw[0] =
- lastw[1] =
- lastw[2] =
- lastw[3] = m_ray;
- /* Loop */
- do
- {
- const unsigned int next = 1 - m_current;
- sSimplex& cs = m_simplices[m_current];
- sSimplex& ns = m_simplices[next];
- /* Check zero */
- const b3Scalar rl = m_ray.length();
- if (rl < GJK_MIN_DISTANCE)
- { /* Touching or inside */
- m_status = eStatus::Inside;
- break;
- }
- /* Append new vertice in -'v' direction */
- appendvertice(cs, -m_ray);
- const b3Vector3& w = cs.c[cs.rank - 1]->w;
- bool found = false;
- for (unsigned int i = 0; i < 4; ++i)
- {
- if ((w - lastw[i]).length2() < GJK_DUPLICATED_EPS)
- {
- found = true;
- break;
- }
- }
- if (found)
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- else
- { /* Update lastw */
- lastw[clastw = (clastw + 1) & 3] = w;
- }
- /* Check for termination */
- const b3Scalar omega = b3Dot(m_ray, w) / rl;
- alpha = b3Max(omega, alpha);
- if (((rl - alpha) - (GJK_ACCURACY * rl)) <= 0)
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- /* Reduce simplex */
- b3Scalar weights[4];
- unsigned int mask = 0;
- switch (cs.rank)
- {
- case 2:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- weights, mask);
- break;
- case 3:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- cs.c[2]->w,
- weights, mask);
- break;
- case 4:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- cs.c[2]->w,
- cs.c[3]->w,
- weights, mask);
- break;
- }
- if (sqdist >= 0)
- { /* Valid */
- ns.rank = 0;
- m_ray = b3MakeVector3(0, 0, 0);
- m_current = next;
- for (unsigned int i = 0, ni = cs.rank; i < ni; ++i)
- {
- if (mask & (1 << i))
- {
- ns.c[ns.rank] = cs.c[i];
- ns.p[ns.rank++] = weights[i];
- m_ray += cs.c[i]->w * weights[i];
- }
- else
- {
- m_free[m_nfree++] = cs.c[i];
- }
- }
- if (mask == 15) m_status = eStatus::Inside;
- }
- else
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- m_status = ((++iterations) < GJK_MAX_ITERATIONS) ? m_status : eStatus::Failed;
- } while (m_status == eStatus::Valid);
- m_simplex = &m_simplices[m_current];
- switch (m_status)
- {
- case eStatus::Valid:
- m_distance = m_ray.length();
- break;
- case eStatus::Inside:
- m_distance = 0;
- break;
- default:
- {
- }
- }
- return (m_status);
- }
- bool EncloseOrigin()
- {
- switch (m_simplex->rank)
- {
- case 1:
- {
- for (unsigned int i = 0; i < 3; ++i)
- {
- b3Vector3 axis = b3MakeVector3(0, 0, 0);
- axis[i] = 1;
- appendvertice(*m_simplex, axis);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -axis);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- break;
- case 2:
- {
- const b3Vector3 d = m_simplex->c[1]->w - m_simplex->c[0]->w;
- for (unsigned int i = 0; i < 3; ++i)
- {
- b3Vector3 axis = b3MakeVector3(0, 0, 0);
- axis[i] = 1;
- const b3Vector3 p = b3Cross(d, axis);
- if (p.length2() > 0)
- {
- appendvertice(*m_simplex, p);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -p);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- }
- break;
- case 3:
- {
- const b3Vector3 n = b3Cross(m_simplex->c[1]->w - m_simplex->c[0]->w,
- m_simplex->c[2]->w - m_simplex->c[0]->w);
- if (n.length2() > 0)
- {
- appendvertice(*m_simplex, n);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -n);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- break;
- case 4:
- {
- if (b3Fabs(det(m_simplex->c[0]->w - m_simplex->c[3]->w,
- m_simplex->c[1]->w - m_simplex->c[3]->w,
- m_simplex->c[2]->w - m_simplex->c[3]->w)) > 0)
- return (true);
- }
- break;
- }
- return (false);
- }
- /* Internals */
- void getsupport(const b3Vector3& d, sSV& sv) const
- {
- sv.d = d / d.length();
- sv.w = m_shape.Support(sv.d, m_verticesA, m_verticesB);
- }
- void removevertice(sSimplex& simplex)
- {
- m_free[m_nfree++] = simplex.c[--simplex.rank];
- }
- void appendvertice(sSimplex& simplex, const b3Vector3& v)
- {
- simplex.p[simplex.rank] = 0;
- simplex.c[simplex.rank] = m_free[--m_nfree];
- getsupport(v, *simplex.c[simplex.rank++]);
- }
- static b3Scalar det(const b3Vector3& a, const b3Vector3& b, const b3Vector3& c)
- {
- return (a.y * b.z * c.x + a.z * b.x * c.y -
- a.x * b.z * c.y - a.y * b.x * c.z +
- a.x * b.y * c.z - a.z * b.y * c.x);
- }
- static b3Scalar projectorigin(const b3Vector3& a,
- const b3Vector3& b,
- b3Scalar* w, unsigned int& m)
- {
- const b3Vector3 d = b - a;
- const b3Scalar l = d.length2();
- if (l > GJK_SIMPLEX2_EPS)
- {
- const b3Scalar t(l > 0 ? -b3Dot(a, d) / l : 0);
- if (t >= 1)
- {
- w[0] = 0;
- w[1] = 1;
- m = 2;
- return (b.length2());
- }
- else if (t <= 0)
- {
- w[0] = 1;
- w[1] = 0;
- m = 1;
- return (a.length2());
- }
- else
- {
- w[0] = 1 - (w[1] = t);
- m = 3;
- return ((a + d * t).length2());
- }
- }
- return (-1);
- }
- static b3Scalar projectorigin(const b3Vector3& a,
- const b3Vector3& b,
- const b3Vector3& c,
- b3Scalar* w, unsigned int& m)
- {
- static const unsigned int imd3[] = {1, 2, 0};
- const b3Vector3* vt[] = {&a, &b, &c};
- const b3Vector3 dl[] = {a - b, b - c, c - a};
- const b3Vector3 n = b3Cross(dl[0], dl[1]);
- const b3Scalar l = n.length2();
- if (l > GJK_SIMPLEX3_EPS)
- {
- b3Scalar mindist = -1;
- b3Scalar subw[2] = {0.f, 0.f};
- unsigned int subm(0);
- for (unsigned int i = 0; i < 3; ++i)
- {
- if (b3Dot(*vt[i], b3Cross(dl[i], n)) > 0)
- {
- const unsigned int j = imd3[i];
- const b3Scalar subd(projectorigin(*vt[i], *vt[j], subw, subm));
- if ((mindist < 0) || (subd < mindist))
- {
- mindist = subd;
- m = static_cast<unsigned int>(((subm & 1) ? 1 << i : 0) + ((subm & 2) ? 1 << j : 0));
- w[i] = subw[0];
- w[j] = subw[1];
- w[imd3[j]] = 0;
- }
- }
- }
- if (mindist < 0)
- {
- const b3Scalar d = b3Dot(a, n);
- const b3Scalar s = b3Sqrt(l);
- const b3Vector3 p = n * (d / l);
- mindist = p.length2();
- m = 7;
- w[0] = (b3Cross(dl[1], b - p)).length() / s;
- w[1] = (b3Cross(dl[2], c - p)).length() / s;
- w[2] = 1 - (w[0] + w[1]);
- }
- return (mindist);
- }
- return (-1);
- }
- static b3Scalar projectorigin(const b3Vector3& a,
- const b3Vector3& b,
- const b3Vector3& c,
- const b3Vector3& d,
- b3Scalar* w, unsigned int& m)
- {
- static const unsigned int imd3[] = {1, 2, 0};
- const b3Vector3* vt[] = {&a, &b, &c, &d};
- const b3Vector3 dl[] = {a - d, b - d, c - d};
- const b3Scalar vl = det(dl[0], dl[1], dl[2]);
- const bool ng = (vl * b3Dot(a, b3Cross(b - c, a - b))) <= 0;
- if (ng && (b3Fabs(vl) > GJK_SIMPLEX4_EPS))
- {
- b3Scalar mindist = -1;
- b3Scalar subw[3] = {0.f, 0.f, 0.f};
- unsigned int subm(0);
- for (unsigned int i = 0; i < 3; ++i)
- {
- const unsigned int j = imd3[i];
- const b3Scalar s = vl * b3Dot(d, b3Cross(dl[i], dl[j]));
- if (s > 0)
- {
- const b3Scalar subd = projectorigin(*vt[i], *vt[j], d, subw, subm);
- if ((mindist < 0) || (subd < mindist))
- {
- mindist = subd;
- m = static_cast<unsigned int>((subm & 1 ? 1 << i : 0) +
- (subm & 2 ? 1 << j : 0) +
- (subm & 4 ? 8 : 0));
- w[i] = subw[0];
- w[j] = subw[1];
- w[imd3[j]] = 0;
- w[3] = subw[2];
- }
- }
- }
- if (mindist < 0)
- {
- mindist = 0;
- m = 15;
- w[0] = det(c, b, d) / vl;
- w[1] = det(a, c, d) / vl;
- w[2] = det(b, a, d) / vl;
- w[3] = 1 - (w[0] + w[1] + w[2]);
- }
- return (mindist);
- }
- return (-1);
- }
-};
-
-// EPA
-struct b3EPA
-{
- /* Types */
- typedef b3GJK::sSV sSV;
- struct sFace
- {
- b3Vector3 n;
- b3Scalar d;
- sSV* c[3];
- sFace* f[3];
- sFace* l[2];
- unsigned char e[3];
- unsigned char pass;
- };
- struct sList
- {
- sFace* root;
- unsigned int count;
- sList() : root(0), count(0) {}
- };
- struct sHorizon
- {
- sFace* cf;
- sFace* ff;
- unsigned int nf;
- sHorizon() : cf(0), ff(0), nf(0) {}
- };
- struct eStatus
- {
- enum _
- {
- Valid,
- Touching,
- Degenerated,
- NonConvex,
- InvalidHull,
- OutOfFaces,
- OutOfVertices,
- AccuraryReached,
- FallBack,
- Failed
- };
- };
- /* Fields */
- eStatus::_ m_status;
- b3GJK::sSimplex m_result;
- b3Vector3 m_normal;
- b3Scalar m_depth;
- sSV m_sv_store[EPA_MAX_VERTICES];
- sFace m_fc_store[EPA_MAX_FACES];
- unsigned int m_nextsv;
- sList m_hull;
- sList m_stock;
- /* Methods */
- b3EPA()
- {
- Initialize();
- }
-
- static inline void bind(sFace* fa, unsigned int ea, sFace* fb, unsigned int eb)
- {
- fa->e[ea] = (unsigned char)eb;
- fa->f[ea] = fb;
- fb->e[eb] = (unsigned char)ea;
- fb->f[eb] = fa;
- }
- static inline void append(sList& list, sFace* face)
- {
- face->l[0] = 0;
- face->l[1] = list.root;
- if (list.root) list.root->l[0] = face;
- list.root = face;
- ++list.count;
- }
- static inline void remove(sList& list, sFace* face)
- {
- if (face->l[1]) face->l[1]->l[0] = face->l[0];
- if (face->l[0]) face->l[0]->l[1] = face->l[1];
- if (face == list.root) list.root = face->l[1];
- --list.count;
- }
-
- void Initialize()
- {
- m_status = eStatus::Failed;
- m_normal = b3MakeVector3(0, 0, 0);
- m_depth = 0;
- m_nextsv = 0;
- for (unsigned int i = 0; i < EPA_MAX_FACES; ++i)
- {
- append(m_stock, &m_fc_store[EPA_MAX_FACES - i - 1]);
- }
- }
- eStatus::_ Evaluate(b3GJK& gjk, const b3Vector3& guess)
- {
- b3GJK::sSimplex& simplex = *gjk.m_simplex;
- if ((simplex.rank > 1) && gjk.EncloseOrigin())
- {
- /* Clean up */
- while (m_hull.root)
- {
- sFace* f = m_hull.root;
- remove(m_hull, f);
- append(m_stock, f);
- }
- m_status = eStatus::Valid;
- m_nextsv = 0;
- /* Orient simplex */
- if (gjk.det(simplex.c[0]->w - simplex.c[3]->w,
- simplex.c[1]->w - simplex.c[3]->w,
- simplex.c[2]->w - simplex.c[3]->w) < 0)
- {
- b3Swap(simplex.c[0], simplex.c[1]);
- b3Swap(simplex.p[0], simplex.p[1]);
- }
- /* Build initial hull */
- sFace* tetra[] = {newface(simplex.c[0], simplex.c[1], simplex.c[2], true),
- newface(simplex.c[1], simplex.c[0], simplex.c[3], true),
- newface(simplex.c[2], simplex.c[1], simplex.c[3], true),
- newface(simplex.c[0], simplex.c[2], simplex.c[3], true)};
- if (m_hull.count == 4)
- {
- sFace* best = findbest();
- sFace outer = *best;
- unsigned int pass = 0;
- unsigned int iterations = 0;
- bind(tetra[0], 0, tetra[1], 0);
- bind(tetra[0], 1, tetra[2], 0);
- bind(tetra[0], 2, tetra[3], 0);
- bind(tetra[1], 1, tetra[3], 2);
- bind(tetra[1], 2, tetra[2], 1);
- bind(tetra[2], 2, tetra[3], 1);
- m_status = eStatus::Valid;
- for (; iterations < EPA_MAX_ITERATIONS; ++iterations)
- {
- if (m_nextsv < EPA_MAX_VERTICES)
- {
- sHorizon horizon;
- sSV* w = &m_sv_store[m_nextsv++];
- bool valid = true;
- best->pass = (unsigned char)(++pass);
- gjk.getsupport(best->n, *w);
- const b3Scalar wdist = b3Dot(best->n, w->w) - best->d;
- if (wdist > EPA_ACCURACY)
- {
- for (unsigned int j = 0; (j < 3) && valid; ++j)
- {
- valid &= expand(pass, w,
- best->f[j], best->e[j],
- horizon);
- }
- if (valid && (horizon.nf >= 3))
- {
- bind(horizon.cf, 1, horizon.ff, 2);
- remove(m_hull, best);
- append(m_stock, best);
- best = findbest();
- outer = *best;
- }
- else
- {
- m_status = eStatus::Failed;
- //m_status=eStatus::InvalidHull;
- break;
- }
- }
- else
- {
- m_status = eStatus::AccuraryReached;
- break;
- }
- }
- else
- {
- m_status = eStatus::OutOfVertices;
- break;
- }
- }
- const b3Vector3 projection = outer.n * outer.d;
- m_normal = outer.n;
- m_depth = outer.d;
- m_result.rank = 3;
- m_result.c[0] = outer.c[0];
- m_result.c[1] = outer.c[1];
- m_result.c[2] = outer.c[2];
- m_result.p[0] = b3Cross(outer.c[1]->w - projection,
- outer.c[2]->w - projection)
- .length();
- m_result.p[1] = b3Cross(outer.c[2]->w - projection,
- outer.c[0]->w - projection)
- .length();
- m_result.p[2] = b3Cross(outer.c[0]->w - projection,
- outer.c[1]->w - projection)
- .length();
- const b3Scalar sum = m_result.p[0] + m_result.p[1] + m_result.p[2];
- m_result.p[0] /= sum;
- m_result.p[1] /= sum;
- m_result.p[2] /= sum;
- return (m_status);
- }
- }
- /* Fallback */
- m_status = eStatus::FallBack;
- m_normal = -guess;
- const b3Scalar nl = m_normal.length();
- if (nl > 0)
- m_normal = m_normal / nl;
- else
- m_normal = b3MakeVector3(1, 0, 0);
- m_depth = 0;
- m_result.rank = 1;
- m_result.c[0] = simplex.c[0];
- m_result.p[0] = 1;
- return (m_status);
- }
- bool getedgedist(sFace* face, sSV* a, sSV* b, b3Scalar& dist)
- {
- const b3Vector3 ba = b->w - a->w;
- const b3Vector3 n_ab = b3Cross(ba, face->n); // Outward facing edge normal direction, on triangle plane
- const b3Scalar a_dot_nab = b3Dot(a->w, n_ab); // Only care about the sign to determine inside/outside, so not normalization required
-
- if (a_dot_nab < 0)
- {
- // Outside of edge a->b
-
- const b3Scalar ba_l2 = ba.length2();
- const b3Scalar a_dot_ba = b3Dot(a->w, ba);
- const b3Scalar b_dot_ba = b3Dot(b->w, ba);
-
- if (a_dot_ba > 0)
- {
- // Pick distance vertex a
- dist = a->w.length();
- }
- else if (b_dot_ba < 0)
- {
- // Pick distance vertex b
- dist = b->w.length();
- }
- else
- {
- // Pick distance to edge a->b
- const b3Scalar a_dot_b = b3Dot(a->w, b->w);
- dist = b3Sqrt(b3Max((a->w.length2() * b->w.length2() - a_dot_b * a_dot_b) / ba_l2, (b3Scalar)0));
- }
-
- return true;
- }
-
- return false;
- }
- sFace* newface(sSV* a, sSV* b, sSV* c, bool forced)
- {
- if (m_stock.root)
- {
- sFace* face = m_stock.root;
- remove(m_stock, face);
- append(m_hull, face);
- face->pass = 0;
- face->c[0] = a;
- face->c[1] = b;
- face->c[2] = c;
- face->n = b3Cross(b->w - a->w, c->w - a->w);
- const b3Scalar l = face->n.length();
- const bool v = l > EPA_ACCURACY;
-
- if (v)
- {
- if (!(getedgedist(face, a, b, face->d) ||
- getedgedist(face, b, c, face->d) ||
- getedgedist(face, c, a, face->d)))
- {
- // Origin projects to the interior of the triangle
- // Use distance to triangle plane
- face->d = b3Dot(a->w, face->n) / l;
- }
-
- face->n /= l;
- if (forced || (face->d >= -EPA_PLANE_EPS))
- {
- return face;
- }
- else
- m_status = eStatus::NonConvex;
- }
- else
- m_status = eStatus::Degenerated;
-
- remove(m_hull, face);
- append(m_stock, face);
- return 0;
- }
- m_status = m_stock.root ? eStatus::OutOfVertices : eStatus::OutOfFaces;
- return 0;
- }
- sFace* findbest()
- {
- sFace* minf = m_hull.root;
- b3Scalar mind = minf->d * minf->d;
- for (sFace* f = minf->l[1]; f; f = f->l[1])
- {
- const b3Scalar sqd = f->d * f->d;
- if (sqd < mind)
- {
- minf = f;
- mind = sqd;
- }
- }
- return (minf);
- }
- bool expand(unsigned int pass, sSV* w, sFace* f, unsigned int e, sHorizon& horizon)
- {
- static const unsigned int i1m3[] = {1, 2, 0};
- static const unsigned int i2m3[] = {2, 0, 1};
- if (f->pass != pass)
- {
- const unsigned int e1 = i1m3[e];
- if ((b3Dot(f->n, w->w) - f->d) < -EPA_PLANE_EPS)
- {
- sFace* nf = newface(f->c[e1], f->c[e], w, false);
- if (nf)
- {
- bind(nf, 0, f, e);
- if (horizon.cf)
- bind(horizon.cf, 1, nf, 2);
- else
- horizon.ff = nf;
- horizon.cf = nf;
- ++horizon.nf;
- return (true);
- }
- }
- else
- {
- const unsigned int e2 = i2m3[e];
- f->pass = (unsigned char)pass;
- if (expand(pass, w, f->f[e1], f->e[e1], horizon) &&
- expand(pass, w, f->f[e2], f->e[e2], horizon))
- {
- remove(m_hull, f);
- append(m_stock, f);
- return (true);
- }
- }
- }
- return (false);
- }
-};
-
-//
-static void Initialize(const b3Transform& transA, const b3Transform& transB,
- const b3ConvexPolyhedronData* hullA, const b3ConvexPolyhedronData* hullB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- b3GjkEpaSolver2::sResults& results,
- tShape& shape,
- bool withmargins)
-{
- /* Results */
- results.witnesses[0] =
- results.witnesses[1] = b3MakeVector3(0, 0, 0);
- results.status = b3GjkEpaSolver2::sResults::Separated;
- /* Shape */
- shape.m_shapes[0] = hullA;
- shape.m_shapes[1] = hullB;
- shape.m_toshape1 = transB.getBasis().transposeTimes(transA.getBasis());
- shape.m_toshape0 = transA.inverseTimes(transB);
- shape.EnableMargin(withmargins);
-}
-
-} // namespace gjkepa2_impl2
-
-//
-// Api
-//
-
-using namespace gjkepa2_impl2;
-
-//
-int b3GjkEpaSolver2::StackSizeRequirement()
-{
- return (sizeof(b3GJK) + sizeof(b3EPA));
-}
-
-//
-bool b3GjkEpaSolver2::Distance(const b3Transform& transA, const b3Transform& transB,
- const b3ConvexPolyhedronData* hullA, const b3ConvexPolyhedronData* hullB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3Vector3& guess,
- sResults& results)
-{
- tShape shape;
- Initialize(transA, transB, hullA, hullB, verticesA, verticesB, results, shape, false);
- b3GJK gjk(verticesA, verticesB);
- b3GJK::eStatus::_ gjk_status = gjk.Evaluate(shape, guess);
- if (gjk_status == b3GJK::eStatus::Valid)
- {
- b3Vector3 w0 = b3MakeVector3(0, 0, 0);
- b3Vector3 w1 = b3MakeVector3(0, 0, 0);
- for (unsigned int i = 0; i < gjk.m_simplex->rank; ++i)
- {
- const b3Scalar p = gjk.m_simplex->p[i];
- w0 += shape.Support(gjk.m_simplex->c[i]->d, 0, verticesA, verticesB) * p;
- w1 += shape.Support(-gjk.m_simplex->c[i]->d, 1, verticesA, verticesB) * p;
- }
- results.witnesses[0] = transA * w0;
- results.witnesses[1] = transA * w1;
- results.normal = w0 - w1;
- results.distance = results.normal.length();
- results.normal /= results.distance > GJK_MIN_DISTANCE ? results.distance : 1;
- return (true);
- }
- else
- {
- results.status = gjk_status == b3GJK::eStatus::Inside ? sResults::Penetrating : sResults::GJK_Failed;
- return (false);
- }
-}
-
-//
-bool b3GjkEpaSolver2::Penetration(const b3Transform& transA, const b3Transform& transB,
- const b3ConvexPolyhedronData* hullA, const b3ConvexPolyhedronData* hullB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3Vector3& guess,
- sResults& results,
- bool usemargins)
-{
- tShape shape;
- Initialize(transA, transB, hullA, hullB, verticesA, verticesB, results, shape, usemargins);
- b3GJK gjk(verticesA, verticesB);
- b3GJK::eStatus::_ gjk_status = gjk.Evaluate(shape, guess);
- switch (gjk_status)
- {
- case b3GJK::eStatus::Inside:
- {
- b3EPA epa;
- b3EPA::eStatus::_ epa_status = epa.Evaluate(gjk, -guess);
- if (epa_status != b3EPA::eStatus::Failed)
- {
- b3Vector3 w0 = b3MakeVector3(0, 0, 0);
- for (unsigned int i = 0; i < epa.m_result.rank; ++i)
- {
- w0 += shape.Support(epa.m_result.c[i]->d, 0, verticesA, verticesB) * epa.m_result.p[i];
- }
- results.status = sResults::Penetrating;
- results.witnesses[0] = transA * w0;
- results.witnesses[1] = transA * (w0 - epa.m_normal * epa.m_depth);
- results.normal = -epa.m_normal;
- results.distance = -epa.m_depth;
- return (true);
- }
- else
- results.status = sResults::EPA_Failed;
- }
- break;
- case b3GJK::eStatus::Failed:
- results.status = sResults::GJK_Failed;
- break;
- default:
- {
- }
- }
- return (false);
-}
-
-#if 0
-//
-b3Scalar b3GjkEpaSolver2::SignedDistance(const b3Vector3& position,
- b3Scalar margin,
- const b3Transform& transA,
- const b3ConvexPolyhedronData& hullA,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- sResults& results)
-{
- tShape shape;
- btSphereShape shape1(margin);
- b3Transform wtrs1(b3Quaternion(0,0,0,1),position);
- Initialize(shape0,wtrs0,&shape1,wtrs1,results,shape,false);
- GJK gjk;
- GJK::eStatus::_ gjk_status=gjk.Evaluate(shape,b3Vector3(1,1,1));
- if(gjk_status==GJK::eStatus::Valid)
- {
- b3Vector3 w0=b3Vector3(0,0,0);
- b3Vector3 w1=b3Vector3(0,0,0);
- for(unsigned int i=0;i<gjk.m_simplex->rank;++i)
- {
- const b3Scalar p=gjk.m_simplex->p[i];
- w0+=shape.Support( gjk.m_simplex->c[i]->d,0)*p;
- w1+=shape.Support(-gjk.m_simplex->c[i]->d,1)*p;
- }
- results.witnesses[0] = wtrs0*w0;
- results.witnesses[1] = wtrs0*w1;
- const b3Vector3 delta= results.witnesses[1]-
- results.witnesses[0];
- const b3Scalar margin= shape0->getMarginNonVirtual()+
- shape1.getMarginNonVirtual();
- const b3Scalar length= delta.length();
- results.normal = delta/length;
- results.witnesses[0] += results.normal*margin;
- return(length-margin);
- }
- else
- {
- if(gjk_status==GJK::eStatus::Inside)
- {
- if(Penetration(shape0,wtrs0,&shape1,wtrs1,gjk.m_ray,results))
- {
- const b3Vector3 delta= results.witnesses[0]-
- results.witnesses[1];
- const b3Scalar length= delta.length();
- if (length >= B3_EPSILON)
- results.normal = delta/length;
- return(-length);
- }
- }
- }
- return(B3_INFINITY);
-}
-
-//
-bool b3GjkEpaSolver2::SignedDistance(const btConvexShape* shape0,
- const b3Transform& wtrs0,
- const btConvexShape* shape1,
- const b3Transform& wtrs1,
- const b3Vector3& guess,
- sResults& results)
-{
- if(!Distance(shape0,wtrs0,shape1,wtrs1,guess,results))
- return(Penetration(shape0,wtrs0,shape1,wtrs1,guess,results,false));
- else
- return(true);
-}
-#endif
-
-/* Symbols cleanup */
-
-#undef GJK_MAX_ITERATIONS
-#undef GJK_ACCURACY
-#undef GJK_MIN_DISTANCE
-#undef GJK_DUPLICATED_EPS
-#undef GJK_SIMPLEX2_EPS
-#undef GJK_SIMPLEX3_EPS
-#undef GJK_SIMPLEX4_EPS
-
-#undef EPA_MAX_VERTICES
-#undef EPA_MAX_FACES
-#undef EPA_MAX_ITERATIONS
-#undef EPA_ACCURACY
-#undef EPA_FALLBACK
-#undef EPA_PLANE_EPS
-#undef EPA_INSIDE_EPS
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.h
deleted file mode 100644
index 7db32c6309..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3GjkEpa.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the
-use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software in a
-product, an acknowledgment in the product documentation would be appreciated
-but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-GJK-EPA collision solver by Nathanael Presson, 2008
-*/
-#ifndef B3_GJK_EPA2_H
-#define B3_GJK_EPA2_H
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Transform.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-
-///btGjkEpaSolver contributed under zlib by Nathanael Presson
-struct b3GjkEpaSolver2
-{
- struct sResults
- {
- enum eStatus
- {
- Separated, /* Shapes doesnt penetrate */
- Penetrating, /* Shapes are penetrating */
- GJK_Failed, /* GJK phase fail, no big issue, shapes are probably just 'touching' */
- EPA_Failed /* EPA phase fail, bigger problem, need to save parameters, and debug */
- } status;
- b3Vector3 witnesses[2];
- b3Vector3 normal;
- b3Scalar distance;
- };
-
- static int StackSizeRequirement();
-
- static bool Distance(const b3Transform& transA, const b3Transform& transB,
- const b3ConvexPolyhedronData* hullA, const b3ConvexPolyhedronData* hullB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3Vector3& guess,
- sResults& results);
-
- static bool Penetration(const b3Transform& transA, const b3Transform& transB,
- const b3ConvexPolyhedronData* hullA, const b3ConvexPolyhedronData* hullB,
- const b3AlignedObjectArray<b3Vector3>& verticesA,
- const b3AlignedObjectArray<b3Vector3>& verticesB,
- const b3Vector3& guess,
- sResults& results,
- bool usemargins = true);
-#if 0
-static b3Scalar SignedDistance( const b3Vector3& position,
- b3Scalar margin,
- const btConvexShape* shape,
- const btTransform& wtrs,
- sResults& results);
-
-static bool SignedDistance( const btConvexShape* shape0,const btTransform& wtrs0,
- const btConvexShape* shape1,const btTransform& wtrs1,
- const b3Vector3& guess,
- sResults& results);
-#endif
-};
-
-#endif //B3_GJK_EPA2_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.cpp
deleted file mode 100644
index 4938fa17af..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.cpp
+++ /dev/null
@@ -1,363 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3OptimizedBvh.h"
-#include "b3StridingMeshInterface.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-
-b3OptimizedBvh::b3OptimizedBvh()
-{
-}
-
-b3OptimizedBvh::~b3OptimizedBvh()
-{
-}
-
-void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantizedAabbCompression, const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax)
-{
- m_useQuantization = useQuantizedAabbCompression;
-
- // NodeArray triangleNodes;
-
- struct NodeTriangleCallback : public b3InternalTriangleIndexCallback
- {
- NodeArray& m_triangleNodes;
-
- NodeTriangleCallback& operator=(NodeTriangleCallback& other)
- {
- m_triangleNodes.copyFromArray(other.m_triangleNodes);
- return *this;
- }
-
- NodeTriangleCallback(NodeArray& triangleNodes)
- : m_triangleNodes(triangleNodes)
- {
- }
-
- virtual void internalProcessTriangleIndex(b3Vector3* triangle, int partId, int triangleIndex)
- {
- b3OptimizedBvhNode node;
- b3Vector3 aabbMin, aabbMax;
- aabbMin.setValue(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
- aabbMax.setValue(b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT));
- aabbMin.setMin(triangle[0]);
- aabbMax.setMax(triangle[0]);
- aabbMin.setMin(triangle[1]);
- aabbMax.setMax(triangle[1]);
- aabbMin.setMin(triangle[2]);
- aabbMax.setMax(triangle[2]);
-
- //with quantization?
- node.m_aabbMinOrg = aabbMin;
- node.m_aabbMaxOrg = aabbMax;
-
- node.m_escapeIndex = -1;
-
- //for child nodes
- node.m_subPart = partId;
- node.m_triangleIndex = triangleIndex;
- m_triangleNodes.push_back(node);
- }
- };
- struct QuantizedNodeTriangleCallback : public b3InternalTriangleIndexCallback
- {
- QuantizedNodeArray& m_triangleNodes;
- const b3QuantizedBvh* m_optimizedTree; // for quantization
-
- QuantizedNodeTriangleCallback& operator=(QuantizedNodeTriangleCallback& other)
- {
- m_triangleNodes.copyFromArray(other.m_triangleNodes);
- m_optimizedTree = other.m_optimizedTree;
- return *this;
- }
-
- QuantizedNodeTriangleCallback(QuantizedNodeArray& triangleNodes, const b3QuantizedBvh* tree)
- : m_triangleNodes(triangleNodes), m_optimizedTree(tree)
- {
- }
-
- virtual void internalProcessTriangleIndex(b3Vector3* triangle, int partId, int triangleIndex)
- {
- // The partId and triangle index must fit in the same (positive) integer
- b3Assert(partId < (1 << MAX_NUM_PARTS_IN_BITS));
- b3Assert(triangleIndex < (1 << (31 - MAX_NUM_PARTS_IN_BITS)));
- //negative indices are reserved for escapeIndex
- b3Assert(triangleIndex >= 0);
-
- b3QuantizedBvhNode node;
- b3Vector3 aabbMin, aabbMax;
- aabbMin.setValue(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
- aabbMax.setValue(b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT));
- aabbMin.setMin(triangle[0]);
- aabbMax.setMax(triangle[0]);
- aabbMin.setMin(triangle[1]);
- aabbMax.setMax(triangle[1]);
- aabbMin.setMin(triangle[2]);
- aabbMax.setMax(triangle[2]);
-
- //PCK: add these checks for zero dimensions of aabb
- const b3Scalar MIN_AABB_DIMENSION = b3Scalar(0.002);
- const b3Scalar MIN_AABB_HALF_DIMENSION = b3Scalar(0.001);
- if (aabbMax.getX() - aabbMin.getX() < MIN_AABB_DIMENSION)
- {
- aabbMax.setX(aabbMax.getX() + MIN_AABB_HALF_DIMENSION);
- aabbMin.setX(aabbMin.getX() - MIN_AABB_HALF_DIMENSION);
- }
- if (aabbMax.getY() - aabbMin.getY() < MIN_AABB_DIMENSION)
- {
- aabbMax.setY(aabbMax.getY() + MIN_AABB_HALF_DIMENSION);
- aabbMin.setY(aabbMin.getY() - MIN_AABB_HALF_DIMENSION);
- }
- if (aabbMax.getZ() - aabbMin.getZ() < MIN_AABB_DIMENSION)
- {
- aabbMax.setZ(aabbMax.getZ() + MIN_AABB_HALF_DIMENSION);
- aabbMin.setZ(aabbMin.getZ() - MIN_AABB_HALF_DIMENSION);
- }
-
- m_optimizedTree->quantize(&node.m_quantizedAabbMin[0], aabbMin, 0);
- m_optimizedTree->quantize(&node.m_quantizedAabbMax[0], aabbMax, 1);
-
- node.m_escapeIndexOrTriangleIndex = (partId << (31 - MAX_NUM_PARTS_IN_BITS)) | triangleIndex;
-
- m_triangleNodes.push_back(node);
- }
- };
-
- int numLeafNodes = 0;
-
- if (m_useQuantization)
- {
- //initialize quantization values
- setQuantizationValues(bvhAabbMin, bvhAabbMax);
-
- QuantizedNodeTriangleCallback callback(m_quantizedLeafNodes, this);
-
- triangles->InternalProcessAllTriangles(&callback, m_bvhAabbMin, m_bvhAabbMax);
-
- //now we have an array of leafnodes in m_leafNodes
- numLeafNodes = m_quantizedLeafNodes.size();
-
- m_quantizedContiguousNodes.resize(2 * numLeafNodes);
- }
- else
- {
- NodeTriangleCallback callback(m_leafNodes);
-
- b3Vector3 aabbMin = b3MakeVector3(b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT));
- b3Vector3 aabbMax = b3MakeVector3(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
-
- triangles->InternalProcessAllTriangles(&callback, aabbMin, aabbMax);
-
- //now we have an array of leafnodes in m_leafNodes
- numLeafNodes = m_leafNodes.size();
-
- m_contiguousNodes.resize(2 * numLeafNodes);
- }
-
- m_curNodeIndex = 0;
-
- buildTree(0, numLeafNodes);
-
- ///if the entire tree is small then subtree size, we need to create a header info for the tree
- if (m_useQuantization && !m_SubtreeHeaders.size())
- {
- b3BvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[0]);
- subtree.m_rootNodeIndex = 0;
- subtree.m_subtreeSize = m_quantizedContiguousNodes[0].isLeafNode() ? 1 : m_quantizedContiguousNodes[0].getEscapeIndex();
- }
-
- //PCK: update the copy of the size
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-
- //PCK: clear m_quantizedLeafNodes and m_leafNodes, they are temporary
- m_quantizedLeafNodes.clear();
- m_leafNodes.clear();
-}
-
-void b3OptimizedBvh::refit(b3StridingMeshInterface* meshInterface, const b3Vector3& aabbMin, const b3Vector3& aabbMax)
-{
- if (m_useQuantization)
- {
- setQuantizationValues(aabbMin, aabbMax);
-
- updateBvhNodes(meshInterface, 0, m_curNodeIndex, 0);
-
- ///now update all subtree headers
-
- int i;
- for (i = 0; i < m_SubtreeHeaders.size(); i++)
- {
- b3BvhSubtreeInfo& subtree = m_SubtreeHeaders[i];
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[subtree.m_rootNodeIndex]);
- }
- }
- else
- {
- }
-}
-
-void b3OptimizedBvh::refitPartial(b3StridingMeshInterface* meshInterface, const b3Vector3& aabbMin, const b3Vector3& aabbMax)
-{
- //incrementally initialize quantization values
- b3Assert(m_useQuantization);
-
- b3Assert(aabbMin.getX() > m_bvhAabbMin.getX());
- b3Assert(aabbMin.getY() > m_bvhAabbMin.getY());
- b3Assert(aabbMin.getZ() > m_bvhAabbMin.getZ());
-
- b3Assert(aabbMax.getX() < m_bvhAabbMax.getX());
- b3Assert(aabbMax.getY() < m_bvhAabbMax.getY());
- b3Assert(aabbMax.getZ() < m_bvhAabbMax.getZ());
-
- ///we should update all quantization values, using updateBvhNodes(meshInterface);
- ///but we only update chunks that overlap the given aabb
-
- unsigned short quantizedQueryAabbMin[3];
- unsigned short quantizedQueryAabbMax[3];
-
- quantize(&quantizedQueryAabbMin[0], aabbMin, 0);
- quantize(&quantizedQueryAabbMax[0], aabbMax, 1);
-
- int i;
- for (i = 0; i < this->m_SubtreeHeaders.size(); i++)
- {
- b3BvhSubtreeInfo& subtree = m_SubtreeHeaders[i];
-
- //PCK: unsigned instead of bool
- unsigned overlap = b3TestQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, subtree.m_quantizedAabbMin, subtree.m_quantizedAabbMax);
- if (overlap != 0)
- {
- updateBvhNodes(meshInterface, subtree.m_rootNodeIndex, subtree.m_rootNodeIndex + subtree.m_subtreeSize, i);
-
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[subtree.m_rootNodeIndex]);
- }
- }
-}
-
-void b3OptimizedBvh::updateBvhNodes(b3StridingMeshInterface* meshInterface, int firstNode, int endNode, int index)
-{
- (void)index;
-
- b3Assert(m_useQuantization);
-
- int curNodeSubPart = -1;
-
- //get access info to trianglemesh data
- const unsigned char* vertexbase = 0;
- int numverts = 0;
- PHY_ScalarType type = PHY_INTEGER;
- int stride = 0;
- const unsigned char* indexbase = 0;
- int indexstride = 0;
- int numfaces = 0;
- PHY_ScalarType indicestype = PHY_INTEGER;
-
- b3Vector3 triangleVerts[3];
- b3Vector3 aabbMin, aabbMax;
- const b3Vector3& meshScaling = meshInterface->getScaling();
-
- int i;
- for (i = endNode - 1; i >= firstNode; i--)
- {
- b3QuantizedBvhNode& curNode = m_quantizedContiguousNodes[i];
- if (curNode.isLeafNode())
- {
- //recalc aabb from triangle data
- int nodeSubPart = curNode.getPartId();
- int nodeTriangleIndex = curNode.getTriangleIndex();
- if (nodeSubPart != curNodeSubPart)
- {
- if (curNodeSubPart >= 0)
- meshInterface->unLockReadOnlyVertexBase(curNodeSubPart);
- meshInterface->getLockedReadOnlyVertexIndexBase(&vertexbase, numverts, type, stride, &indexbase, indexstride, numfaces, indicestype, nodeSubPart);
-
- curNodeSubPart = nodeSubPart;
- }
- //triangles->getLockedReadOnlyVertexIndexBase(vertexBase,numVerts,
-
- unsigned int* gfxbase = (unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
-
- for (int j = 2; j >= 0; j--)
- {
- int graphicsindex;
- switch (indicestype) {
- case PHY_INTEGER: graphicsindex = gfxbase[j]; break;
- case PHY_SHORT: graphicsindex = ((unsigned short*)gfxbase)[j]; break;
- case PHY_UCHAR: graphicsindex = ((unsigned char*)gfxbase)[j]; break;
- default: b3Assert(0);
- }
- if (type == PHY_FLOAT)
- {
- float* graphicsbase = (float*)(vertexbase + graphicsindex * stride);
- triangleVerts[j] = b3MakeVector3(
- graphicsbase[0] * meshScaling.getX(),
- graphicsbase[1] * meshScaling.getY(),
- graphicsbase[2] * meshScaling.getZ());
- }
- else
- {
- double* graphicsbase = (double*)(vertexbase + graphicsindex * stride);
- triangleVerts[j] = b3MakeVector3(b3Scalar(graphicsbase[0] * meshScaling.getX()), b3Scalar(graphicsbase[1] * meshScaling.getY()), b3Scalar(graphicsbase[2] * meshScaling.getZ()));
- }
- }
-
- aabbMin.setValue(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
- aabbMax.setValue(b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT));
- aabbMin.setMin(triangleVerts[0]);
- aabbMax.setMax(triangleVerts[0]);
- aabbMin.setMin(triangleVerts[1]);
- aabbMax.setMax(triangleVerts[1]);
- aabbMin.setMin(triangleVerts[2]);
- aabbMax.setMax(triangleVerts[2]);
-
- quantize(&curNode.m_quantizedAabbMin[0], aabbMin, 0);
- quantize(&curNode.m_quantizedAabbMax[0], aabbMax, 1);
- }
- else
- {
- //combine aabb from both children
-
- b3QuantizedBvhNode* leftChildNode = &m_quantizedContiguousNodes[i + 1];
-
- b3QuantizedBvhNode* rightChildNode = leftChildNode->isLeafNode() ? &m_quantizedContiguousNodes[i + 2] : &m_quantizedContiguousNodes[i + 1 + leftChildNode->getEscapeIndex()];
-
- {
- for (int i = 0; i < 3; i++)
- {
- curNode.m_quantizedAabbMin[i] = leftChildNode->m_quantizedAabbMin[i];
- if (curNode.m_quantizedAabbMin[i] > rightChildNode->m_quantizedAabbMin[i])
- curNode.m_quantizedAabbMin[i] = rightChildNode->m_quantizedAabbMin[i];
-
- curNode.m_quantizedAabbMax[i] = leftChildNode->m_quantizedAabbMax[i];
- if (curNode.m_quantizedAabbMax[i] < rightChildNode->m_quantizedAabbMax[i])
- curNode.m_quantizedAabbMax[i] = rightChildNode->m_quantizedAabbMax[i];
- }
- }
- }
- }
-
- if (curNodeSubPart >= 0)
- meshInterface->unLockReadOnlyVertexBase(curNodeSubPart);
-}
-
-///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place'
-b3OptimizedBvh* b3OptimizedBvh::deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian)
-{
- b3QuantizedBvh* bvh = b3QuantizedBvh::deSerializeInPlace(i_alignedDataBuffer, i_dataBufferSize, i_swapEndian);
-
- //we don't add additional data so just do a static upcast
- return static_cast<b3OptimizedBvh*>(bvh);
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.h
deleted file mode 100644
index 1286552939..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///Contains contributions from Disney Studio's
-
-#ifndef B3_OPTIMIZED_BVH_H
-#define B3_OPTIMIZED_BVH_H
-
-#include "b3QuantizedBvh.h"
-
-class b3StridingMeshInterface;
-
-///The b3OptimizedBvh extends the b3QuantizedBvh to create AABB tree for triangle meshes, through the b3StridingMeshInterface.
-B3_ATTRIBUTE_ALIGNED16(class)
-b3OptimizedBvh : public b3QuantizedBvh
-{
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
-protected:
-public:
- b3OptimizedBvh();
-
- virtual ~b3OptimizedBvh();
-
- void build(b3StridingMeshInterface * triangles, bool useQuantizedAabbCompression, const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax);
-
- void refit(b3StridingMeshInterface * triangles, const b3Vector3& aabbMin, const b3Vector3& aabbMax);
-
- void refitPartial(b3StridingMeshInterface * triangles, const b3Vector3& aabbMin, const b3Vector3& aabbMax);
-
- void updateBvhNodes(b3StridingMeshInterface * meshInterface, int firstNode, int endNode, int index);
-
- /// Data buffer MUST be 16 byte aligned
- virtual bool serializeInPlace(void* o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const
- {
- return b3QuantizedBvh::serialize(o_alignedDataBuffer, i_dataBufferSize, i_swapEndian);
- }
-
- ///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place'
- static b3OptimizedBvh* deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian);
-};
-
-#endif //B3_OPTIMIZED_BVH_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.cpp
deleted file mode 100644
index 9a448495f3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.cpp
+++ /dev/null
@@ -1,1254 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3QuantizedBvh.h"
-
-#include "Bullet3Geometry/b3AabbUtil.h"
-
-#define RAYAABB2
-
-b3QuantizedBvh::b3QuantizedBvh() : m_bulletVersion(B3_BULLET_VERSION),
- m_useQuantization(false),
- m_traversalMode(TRAVERSAL_STACKLESS_CACHE_FRIENDLY)
- //m_traversalMode(TRAVERSAL_STACKLESS)
- //m_traversalMode(TRAVERSAL_RECURSIVE)
- ,
- m_subtreeHeaderCount(0) //PCK: add this line
-{
- m_bvhAabbMin.setValue(-B3_INFINITY, -B3_INFINITY, -B3_INFINITY);
- m_bvhAabbMax.setValue(B3_INFINITY, B3_INFINITY, B3_INFINITY);
-}
-
-void b3QuantizedBvh::buildInternal()
-{
- ///assumes that caller filled in the m_quantizedLeafNodes
- m_useQuantization = true;
- int numLeafNodes = 0;
-
- if (m_useQuantization)
- {
- //now we have an array of leafnodes in m_leafNodes
- numLeafNodes = m_quantizedLeafNodes.size();
-
- m_quantizedContiguousNodes.resize(2 * numLeafNodes);
- }
-
- m_curNodeIndex = 0;
-
- buildTree(0, numLeafNodes);
-
- ///if the entire tree is small then subtree size, we need to create a header info for the tree
- if (m_useQuantization && !m_SubtreeHeaders.size())
- {
- b3BvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[0]);
- subtree.m_rootNodeIndex = 0;
- subtree.m_subtreeSize = m_quantizedContiguousNodes[0].isLeafNode() ? 1 : m_quantizedContiguousNodes[0].getEscapeIndex();
- }
-
- //PCK: update the copy of the size
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-
- //PCK: clear m_quantizedLeafNodes and m_leafNodes, they are temporary
- m_quantizedLeafNodes.clear();
- m_leafNodes.clear();
-}
-
-///just for debugging, to visualize the individual patches/subtrees
-#ifdef DEBUG_PATCH_COLORS
-b3Vector3 color[4] =
- {
- b3Vector3(1, 0, 0),
- b3Vector3(0, 1, 0),
- b3Vector3(0, 0, 1),
- b3Vector3(0, 1, 1)};
-#endif //DEBUG_PATCH_COLORS
-
-void b3QuantizedBvh::setQuantizationValues(const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax, b3Scalar quantizationMargin)
-{
- //enlarge the AABB to avoid division by zero when initializing the quantization values
- b3Vector3 clampValue = b3MakeVector3(quantizationMargin, quantizationMargin, quantizationMargin);
- m_bvhAabbMin = bvhAabbMin - clampValue;
- m_bvhAabbMax = bvhAabbMax + clampValue;
- b3Vector3 aabbSize = m_bvhAabbMax - m_bvhAabbMin;
- m_bvhQuantization = b3MakeVector3(b3Scalar(65533.0), b3Scalar(65533.0), b3Scalar(65533.0)) / aabbSize;
- m_useQuantization = true;
-}
-
-b3QuantizedBvh::~b3QuantizedBvh()
-{
-}
-
-#ifdef DEBUG_TREE_BUILDING
-int gStackDepth = 0;
-int gMaxStackDepth = 0;
-#endif //DEBUG_TREE_BUILDING
-
-void b3QuantizedBvh::buildTree(int startIndex, int endIndex)
-{
-#ifdef DEBUG_TREE_BUILDING
- gStackDepth++;
- if (gStackDepth > gMaxStackDepth)
- gMaxStackDepth = gStackDepth;
-#endif //DEBUG_TREE_BUILDING
-
- int splitAxis, splitIndex, i;
- int numIndices = endIndex - startIndex;
- int curIndex = m_curNodeIndex;
-
- b3Assert(numIndices > 0);
-
- if (numIndices == 1)
- {
-#ifdef DEBUG_TREE_BUILDING
- gStackDepth--;
-#endif //DEBUG_TREE_BUILDING
-
- assignInternalNodeFromLeafNode(m_curNodeIndex, startIndex);
-
- m_curNodeIndex++;
- return;
- }
- //calculate Best Splitting Axis and where to split it. Sort the incoming 'leafNodes' array within range 'startIndex/endIndex'.
-
- splitAxis = calcSplittingAxis(startIndex, endIndex);
-
- splitIndex = sortAndCalcSplittingIndex(startIndex, endIndex, splitAxis);
-
- int internalNodeIndex = m_curNodeIndex;
-
- //set the min aabb to 'inf' or a max value, and set the max aabb to a -inf/minimum value.
- //the aabb will be expanded during buildTree/mergeInternalNodeAabb with actual node values
- setInternalNodeAabbMin(m_curNodeIndex, m_bvhAabbMax); //can't use b3Vector3(B3_INFINITY,B3_INFINITY,B3_INFINITY)) because of quantization
- setInternalNodeAabbMax(m_curNodeIndex, m_bvhAabbMin); //can't use b3Vector3(-B3_INFINITY,-B3_INFINITY,-B3_INFINITY)) because of quantization
-
- for (i = startIndex; i < endIndex; i++)
- {
- mergeInternalNodeAabb(m_curNodeIndex, getAabbMin(i), getAabbMax(i));
- }
-
- m_curNodeIndex++;
-
- //internalNode->m_escapeIndex;
-
- int leftChildNodexIndex = m_curNodeIndex;
-
- //build left child tree
- buildTree(startIndex, splitIndex);
-
- int rightChildNodexIndex = m_curNodeIndex;
- //build right child tree
- buildTree(splitIndex, endIndex);
-
-#ifdef DEBUG_TREE_BUILDING
- gStackDepth--;
-#endif //DEBUG_TREE_BUILDING
-
- int escapeIndex = m_curNodeIndex - curIndex;
-
- if (m_useQuantization)
- {
- //escapeIndex is the number of nodes of this subtree
- const int sizeQuantizedNode = sizeof(b3QuantizedBvhNode);
- const int treeSizeInBytes = escapeIndex * sizeQuantizedNode;
- if (treeSizeInBytes > MAX_SUBTREE_SIZE_IN_BYTES)
- {
- updateSubtreeHeaders(leftChildNodexIndex, rightChildNodexIndex);
- }
- }
- else
- {
- }
-
- setInternalNodeEscapeIndex(internalNodeIndex, escapeIndex);
-}
-
-void b3QuantizedBvh::updateSubtreeHeaders(int leftChildNodexIndex, int rightChildNodexIndex)
-{
- b3Assert(m_useQuantization);
-
- b3QuantizedBvhNode& leftChildNode = m_quantizedContiguousNodes[leftChildNodexIndex];
- int leftSubTreeSize = leftChildNode.isLeafNode() ? 1 : leftChildNode.getEscapeIndex();
- int leftSubTreeSizeInBytes = leftSubTreeSize * static_cast<int>(sizeof(b3QuantizedBvhNode));
-
- b3QuantizedBvhNode& rightChildNode = m_quantizedContiguousNodes[rightChildNodexIndex];
- int rightSubTreeSize = rightChildNode.isLeafNode() ? 1 : rightChildNode.getEscapeIndex();
- int rightSubTreeSizeInBytes = rightSubTreeSize * static_cast<int>(sizeof(b3QuantizedBvhNode));
-
- if (leftSubTreeSizeInBytes <= MAX_SUBTREE_SIZE_IN_BYTES)
- {
- b3BvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(leftChildNode);
- subtree.m_rootNodeIndex = leftChildNodexIndex;
- subtree.m_subtreeSize = leftSubTreeSize;
- }
-
- if (rightSubTreeSizeInBytes <= MAX_SUBTREE_SIZE_IN_BYTES)
- {
- b3BvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(rightChildNode);
- subtree.m_rootNodeIndex = rightChildNodexIndex;
- subtree.m_subtreeSize = rightSubTreeSize;
- }
-
- //PCK: update the copy of the size
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-}
-
-int b3QuantizedBvh::sortAndCalcSplittingIndex(int startIndex, int endIndex, int splitAxis)
-{
- int i;
- int splitIndex = startIndex;
- int numIndices = endIndex - startIndex;
- b3Scalar splitValue;
-
- b3Vector3 means = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- for (i = startIndex; i < endIndex; i++)
- {
- b3Vector3 center = b3Scalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- means += center;
- }
- means *= (b3Scalar(1.) / (b3Scalar)numIndices);
-
- splitValue = means[splitAxis];
-
- //sort leafNodes so all values larger then splitValue comes first, and smaller values start from 'splitIndex'.
- for (i = startIndex; i < endIndex; i++)
- {
- b3Vector3 center = b3Scalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- if (center[splitAxis] > splitValue)
- {
- //swap
- swapLeafNodes(i, splitIndex);
- splitIndex++;
- }
- }
-
- //if the splitIndex causes unbalanced trees, fix this by using the center in between startIndex and endIndex
- //otherwise the tree-building might fail due to stack-overflows in certain cases.
- //unbalanced1 is unsafe: it can cause stack overflows
- //bool unbalanced1 = ((splitIndex==startIndex) || (splitIndex == (endIndex-1)));
-
- //unbalanced2 should work too: always use center (perfect balanced trees)
- //bool unbalanced2 = true;
-
- //this should be safe too:
- int rangeBalancedIndices = numIndices / 3;
- bool unbalanced = ((splitIndex <= (startIndex + rangeBalancedIndices)) || (splitIndex >= (endIndex - 1 - rangeBalancedIndices)));
-
- if (unbalanced)
- {
- splitIndex = startIndex + (numIndices >> 1);
- }
-
- bool unbal = (splitIndex == startIndex) || (splitIndex == (endIndex));
- (void)unbal;
- b3Assert(!unbal);
-
- return splitIndex;
-}
-
-int b3QuantizedBvh::calcSplittingAxis(int startIndex, int endIndex)
-{
- int i;
-
- b3Vector3 means = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- b3Vector3 variance = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- int numIndices = endIndex - startIndex;
-
- for (i = startIndex; i < endIndex; i++)
- {
- b3Vector3 center = b3Scalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- means += center;
- }
- means *= (b3Scalar(1.) / (b3Scalar)numIndices);
-
- for (i = startIndex; i < endIndex; i++)
- {
- b3Vector3 center = b3Scalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- b3Vector3 diff2 = center - means;
- diff2 = diff2 * diff2;
- variance += diff2;
- }
- variance *= (b3Scalar(1.) / ((b3Scalar)numIndices - 1));
-
- return variance.maxAxis();
-}
-
-void b3QuantizedBvh::reportAabbOverlappingNodex(b3NodeOverlapCallback* nodeCallback, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const
-{
- //either choose recursive traversal (walkTree) or stackless (walkStacklessTree)
-
- if (m_useQuantization)
- {
- ///quantize query AABB
- unsigned short int quantizedQueryAabbMin[3];
- unsigned short int quantizedQueryAabbMax[3];
- quantizeWithClamp(quantizedQueryAabbMin, aabbMin, 0);
- quantizeWithClamp(quantizedQueryAabbMax, aabbMax, 1);
-
- switch (m_traversalMode)
- {
- case TRAVERSAL_STACKLESS:
- walkStacklessQuantizedTree(nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax, 0, m_curNodeIndex);
- break;
- case TRAVERSAL_STACKLESS_CACHE_FRIENDLY:
- walkStacklessQuantizedTreeCacheFriendly(nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
- break;
- case TRAVERSAL_RECURSIVE:
- {
- const b3QuantizedBvhNode* rootNode = &m_quantizedContiguousNodes[0];
- walkRecursiveQuantizedTreeAgainstQueryAabb(rootNode, nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
- }
- break;
- default:
- //unsupported
- b3Assert(0);
- }
- }
- else
- {
- walkStacklessTree(nodeCallback, aabbMin, aabbMax);
- }
-}
-
-static int b3s_maxIterations = 0;
-
-void b3QuantizedBvh::walkStacklessTree(b3NodeOverlapCallback* nodeCallback, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const
-{
- b3Assert(!m_useQuantization);
-
- const b3OptimizedBvhNode* rootNode = &m_contiguousNodes[0];
- int escapeIndex, curIndex = 0;
- int walkIterations = 0;
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap;
-
- while (curIndex < m_curNodeIndex)
- {
- //catch bugs in tree data
- b3Assert(walkIterations < m_curNodeIndex);
-
- walkIterations++;
- aabbOverlap = b3TestAabbAgainstAabb2(aabbMin, aabbMax, rootNode->m_aabbMinOrg, rootNode->m_aabbMaxOrg);
- isLeafNode = rootNode->m_escapeIndex == -1;
-
- //PCK: unsigned instead of bool
- if (isLeafNode && (aabbOverlap != 0))
- {
- nodeCallback->processNode(rootNode->m_subPart, rootNode->m_triangleIndex);
- }
-
- //PCK: unsigned instead of bool
- if ((aabbOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->m_escapeIndex;
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
- if (b3s_maxIterations < walkIterations)
- b3s_maxIterations = walkIterations;
-}
-
-/*
-///this was the original recursive traversal, before we optimized towards stackless traversal
-void b3QuantizedBvh::walkTree(b3OptimizedBvhNode* rootNode,b3NodeOverlapCallback* nodeCallback,const b3Vector3& aabbMin,const b3Vector3& aabbMax) const
-{
- bool isLeafNode, aabbOverlap = TestAabbAgainstAabb2(aabbMin,aabbMax,rootNode->m_aabbMin,rootNode->m_aabbMax);
- if (aabbOverlap)
- {
- isLeafNode = (!rootNode->m_leftChild && !rootNode->m_rightChild);
- if (isLeafNode)
- {
- nodeCallback->processNode(rootNode);
- } else
- {
- walkTree(rootNode->m_leftChild,nodeCallback,aabbMin,aabbMax);
- walkTree(rootNode->m_rightChild,nodeCallback,aabbMin,aabbMax);
- }
- }
-
-}
-*/
-
-void b3QuantizedBvh::walkRecursiveQuantizedTreeAgainstQueryAabb(const b3QuantizedBvhNode* currentNode, b3NodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const
-{
- b3Assert(m_useQuantization);
-
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap;
-
- //PCK: unsigned instead of bool
- aabbOverlap = b3TestQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, currentNode->m_quantizedAabbMin, currentNode->m_quantizedAabbMax);
- isLeafNode = currentNode->isLeafNode();
-
- //PCK: unsigned instead of bool
- if (aabbOverlap != 0)
- {
- if (isLeafNode)
- {
- nodeCallback->processNode(currentNode->getPartId(), currentNode->getTriangleIndex());
- }
- else
- {
- //process left and right children
- const b3QuantizedBvhNode* leftChildNode = currentNode + 1;
- walkRecursiveQuantizedTreeAgainstQueryAabb(leftChildNode, nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
-
- const b3QuantizedBvhNode* rightChildNode = leftChildNode->isLeafNode() ? leftChildNode + 1 : leftChildNode + leftChildNode->getEscapeIndex();
- walkRecursiveQuantizedTreeAgainstQueryAabb(rightChildNode, nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
- }
- }
-}
-
-void b3QuantizedBvh::walkStacklessTreeAgainstRay(b3NodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex, int endNodeIndex) const
-{
- b3Assert(!m_useQuantization);
-
- const b3OptimizedBvhNode* rootNode = &m_contiguousNodes[0];
- int escapeIndex, curIndex = 0;
- int walkIterations = 0;
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap = 0;
- unsigned rayBoxOverlap = 0;
- b3Scalar lambda_max = 1.0;
-
- /* Quick pruning by quantized box */
- b3Vector3 rayAabbMin = raySource;
- b3Vector3 rayAabbMax = raySource;
- rayAabbMin.setMin(rayTarget);
- rayAabbMax.setMax(rayTarget);
-
- /* Add box cast extents to bounding box */
- rayAabbMin += aabbMin;
- rayAabbMax += aabbMax;
-
-#ifdef RAYAABB2
- b3Vector3 rayDir = (rayTarget - raySource);
- rayDir.normalize();
- lambda_max = rayDir.dot(rayTarget - raySource);
- ///what about division by zero? --> just set rayDirection[i] to 1.0
- b3Vector3 rayDirectionInverse;
- rayDirectionInverse[0] = rayDir[0] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[0];
- rayDirectionInverse[1] = rayDir[1] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[1];
- rayDirectionInverse[2] = rayDir[2] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDir[2];
- unsigned int sign[3] = {rayDirectionInverse[0] < 0.0, rayDirectionInverse[1] < 0.0, rayDirectionInverse[2] < 0.0};
-#endif
-
- b3Vector3 bounds[2];
-
- while (curIndex < m_curNodeIndex)
- {
- b3Scalar param = 1.0;
- //catch bugs in tree data
- b3Assert(walkIterations < m_curNodeIndex);
-
- walkIterations++;
-
- bounds[0] = rootNode->m_aabbMinOrg;
- bounds[1] = rootNode->m_aabbMaxOrg;
- /* Add box cast extents */
- bounds[0] -= aabbMax;
- bounds[1] -= aabbMin;
-
- aabbOverlap = b3TestAabbAgainstAabb2(rayAabbMin, rayAabbMax, rootNode->m_aabbMinOrg, rootNode->m_aabbMaxOrg);
- //perhaps profile if it is worth doing the aabbOverlap test first
-
-#ifdef RAYAABB2
- ///careful with this check: need to check division by zero (above) and fix the unQuantize method
- ///thanks Joerg/hiker for the reproduction case!
- ///http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=1858
- rayBoxOverlap = aabbOverlap ? b3RayAabb2(raySource, rayDirectionInverse, sign, bounds, param, 0.0f, lambda_max) : false;
-
-#else
- b3Vector3 normal;
- rayBoxOverlap = b3RayAabb(raySource, rayTarget, bounds[0], bounds[1], param, normal);
-#endif
-
- isLeafNode = rootNode->m_escapeIndex == -1;
-
- //PCK: unsigned instead of bool
- if (isLeafNode && (rayBoxOverlap != 0))
- {
- nodeCallback->processNode(rootNode->m_subPart, rootNode->m_triangleIndex);
- }
-
- //PCK: unsigned instead of bool
- if ((rayBoxOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->m_escapeIndex;
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
- if (b3s_maxIterations < walkIterations)
- b3s_maxIterations = walkIterations;
-}
-
-void b3QuantizedBvh::walkStacklessQuantizedTreeAgainstRay(b3NodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex, int endNodeIndex) const
-{
- b3Assert(m_useQuantization);
-
- int curIndex = startNodeIndex;
- int walkIterations = 0;
- int subTreeSize = endNodeIndex - startNodeIndex;
- (void)subTreeSize;
-
- const b3QuantizedBvhNode* rootNode = &m_quantizedContiguousNodes[startNodeIndex];
- int escapeIndex;
-
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned boxBoxOverlap = 0;
- unsigned rayBoxOverlap = 0;
-
- b3Scalar lambda_max = 1.0;
-
-#ifdef RAYAABB2
- b3Vector3 rayDirection = (rayTarget - raySource);
- rayDirection.normalize();
- lambda_max = rayDirection.dot(rayTarget - raySource);
- ///what about division by zero? --> just set rayDirection[i] to 1.0
- rayDirection[0] = rayDirection[0] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDirection[0];
- rayDirection[1] = rayDirection[1] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDirection[1];
- rayDirection[2] = rayDirection[2] == b3Scalar(0.0) ? b3Scalar(B3_LARGE_FLOAT) : b3Scalar(1.0) / rayDirection[2];
- unsigned int sign[3] = {rayDirection[0] < 0.0, rayDirection[1] < 0.0, rayDirection[2] < 0.0};
-#endif
-
- /* Quick pruning by quantized box */
- b3Vector3 rayAabbMin = raySource;
- b3Vector3 rayAabbMax = raySource;
- rayAabbMin.setMin(rayTarget);
- rayAabbMax.setMax(rayTarget);
-
- /* Add box cast extents to bounding box */
- rayAabbMin += aabbMin;
- rayAabbMax += aabbMax;
-
- unsigned short int quantizedQueryAabbMin[3];
- unsigned short int quantizedQueryAabbMax[3];
- quantizeWithClamp(quantizedQueryAabbMin, rayAabbMin, 0);
- quantizeWithClamp(quantizedQueryAabbMax, rayAabbMax, 1);
-
- while (curIndex < endNodeIndex)
- {
-//#define VISUALLY_ANALYZE_BVH 1
-#ifdef VISUALLY_ANALYZE_BVH
- //some code snippet to debugDraw aabb, to visually analyze bvh structure
- static int drawPatch = 0;
- //need some global access to a debugDrawer
- extern b3IDebugDraw* debugDrawerPtr;
- if (curIndex == drawPatch)
- {
- b3Vector3 aabbMin, aabbMax;
- aabbMin = unQuantize(rootNode->m_quantizedAabbMin);
- aabbMax = unQuantize(rootNode->m_quantizedAabbMax);
- b3Vector3 color(1, 0, 0);
- debugDrawerPtr->drawAabb(aabbMin, aabbMax, color);
- }
-#endif //VISUALLY_ANALYZE_BVH
-
- //catch bugs in tree data
- b3Assert(walkIterations < subTreeSize);
-
- walkIterations++;
- //PCK: unsigned instead of bool
- // only interested if this is closer than any previous hit
- b3Scalar param = 1.0;
- rayBoxOverlap = 0;
- boxBoxOverlap = b3TestQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, rootNode->m_quantizedAabbMin, rootNode->m_quantizedAabbMax);
- isLeafNode = rootNode->isLeafNode();
- if (boxBoxOverlap)
- {
- b3Vector3 bounds[2];
- bounds[0] = unQuantize(rootNode->m_quantizedAabbMin);
- bounds[1] = unQuantize(rootNode->m_quantizedAabbMax);
- /* Add box cast extents */
- bounds[0] -= aabbMax;
- bounds[1] -= aabbMin;
-#if 0
- b3Vector3 normal;
- bool ra2 = b3RayAabb2 (raySource, rayDirection, sign, bounds, param, 0.0, lambda_max);
- bool ra = b3RayAabb (raySource, rayTarget, bounds[0], bounds[1], param, normal);
- if (ra2 != ra)
- {
- printf("functions don't match\n");
- }
-#endif
-#ifdef RAYAABB2
- ///careful with this check: need to check division by zero (above) and fix the unQuantize method
- ///thanks Joerg/hiker for the reproduction case!
- ///http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=1858
-
- //B3_PROFILE("b3RayAabb2");
- rayBoxOverlap = b3RayAabb2(raySource, rayDirection, sign, bounds, param, 0.0f, lambda_max);
-
-#else
- rayBoxOverlap = true; //b3RayAabb(raySource, rayTarget, bounds[0], bounds[1], param, normal);
-#endif
- }
-
- if (isLeafNode && rayBoxOverlap)
- {
- nodeCallback->processNode(rootNode->getPartId(), rootNode->getTriangleIndex());
- }
-
- //PCK: unsigned instead of bool
- if ((rayBoxOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->getEscapeIndex();
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
- if (b3s_maxIterations < walkIterations)
- b3s_maxIterations = walkIterations;
-}
-
-void b3QuantizedBvh::walkStacklessQuantizedTree(b3NodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax, int startNodeIndex, int endNodeIndex) const
-{
- b3Assert(m_useQuantization);
-
- int curIndex = startNodeIndex;
- int walkIterations = 0;
- int subTreeSize = endNodeIndex - startNodeIndex;
- (void)subTreeSize;
-
- const b3QuantizedBvhNode* rootNode = &m_quantizedContiguousNodes[startNodeIndex];
- int escapeIndex;
-
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap;
-
- while (curIndex < endNodeIndex)
- {
-//#define VISUALLY_ANALYZE_BVH 1
-#ifdef VISUALLY_ANALYZE_BVH
- //some code snippet to debugDraw aabb, to visually analyze bvh structure
- static int drawPatch = 0;
- //need some global access to a debugDrawer
- extern b3IDebugDraw* debugDrawerPtr;
- if (curIndex == drawPatch)
- {
- b3Vector3 aabbMin, aabbMax;
- aabbMin = unQuantize(rootNode->m_quantizedAabbMin);
- aabbMax = unQuantize(rootNode->m_quantizedAabbMax);
- b3Vector3 color(1, 0, 0);
- debugDrawerPtr->drawAabb(aabbMin, aabbMax, color);
- }
-#endif //VISUALLY_ANALYZE_BVH
-
- //catch bugs in tree data
- b3Assert(walkIterations < subTreeSize);
-
- walkIterations++;
- //PCK: unsigned instead of bool
- aabbOverlap = b3TestQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, rootNode->m_quantizedAabbMin, rootNode->m_quantizedAabbMax);
- isLeafNode = rootNode->isLeafNode();
-
- if (isLeafNode && aabbOverlap)
- {
- nodeCallback->processNode(rootNode->getPartId(), rootNode->getTriangleIndex());
- }
-
- //PCK: unsigned instead of bool
- if ((aabbOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->getEscapeIndex();
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
- if (b3s_maxIterations < walkIterations)
- b3s_maxIterations = walkIterations;
-}
-
-//This traversal can be called from Playstation 3 SPU
-void b3QuantizedBvh::walkStacklessQuantizedTreeCacheFriendly(b3NodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const
-{
- b3Assert(m_useQuantization);
-
- int i;
-
- for (i = 0; i < this->m_SubtreeHeaders.size(); i++)
- {
- const b3BvhSubtreeInfo& subtree = m_SubtreeHeaders[i];
-
- //PCK: unsigned instead of bool
- unsigned overlap = b3TestQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, subtree.m_quantizedAabbMin, subtree.m_quantizedAabbMax);
- if (overlap != 0)
- {
- walkStacklessQuantizedTree(nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax,
- subtree.m_rootNodeIndex,
- subtree.m_rootNodeIndex + subtree.m_subtreeSize);
- }
- }
-}
-
-void b3QuantizedBvh::reportRayOverlappingNodex(b3NodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget) const
-{
- reportBoxCastOverlappingNodex(nodeCallback, raySource, rayTarget, b3MakeVector3(0, 0, 0), b3MakeVector3(0, 0, 0));
-}
-
-void b3QuantizedBvh::reportBoxCastOverlappingNodex(b3NodeOverlapCallback* nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const
-{
- //always use stackless
-
- if (m_useQuantization)
- {
- walkStacklessQuantizedTreeAgainstRay(nodeCallback, raySource, rayTarget, aabbMin, aabbMax, 0, m_curNodeIndex);
- }
- else
- {
- walkStacklessTreeAgainstRay(nodeCallback, raySource, rayTarget, aabbMin, aabbMax, 0, m_curNodeIndex);
- }
- /*
- {
- //recursive traversal
- b3Vector3 qaabbMin = raySource;
- b3Vector3 qaabbMax = raySource;
- qaabbMin.setMin(rayTarget);
- qaabbMax.setMax(rayTarget);
- qaabbMin += aabbMin;
- qaabbMax += aabbMax;
- reportAabbOverlappingNodex(nodeCallback,qaabbMin,qaabbMax);
- }
- */
-}
-
-void b3QuantizedBvh::swapLeafNodes(int i, int splitIndex)
-{
- if (m_useQuantization)
- {
- b3QuantizedBvhNode tmp = m_quantizedLeafNodes[i];
- m_quantizedLeafNodes[i] = m_quantizedLeafNodes[splitIndex];
- m_quantizedLeafNodes[splitIndex] = tmp;
- }
- else
- {
- b3OptimizedBvhNode tmp = m_leafNodes[i];
- m_leafNodes[i] = m_leafNodes[splitIndex];
- m_leafNodes[splitIndex] = tmp;
- }
-}
-
-void b3QuantizedBvh::assignInternalNodeFromLeafNode(int internalNode, int leafNodeIndex)
-{
- if (m_useQuantization)
- {
- m_quantizedContiguousNodes[internalNode] = m_quantizedLeafNodes[leafNodeIndex];
- }
- else
- {
- m_contiguousNodes[internalNode] = m_leafNodes[leafNodeIndex];
- }
-}
-
-//PCK: include
-#include <new>
-
-#if 0
-//PCK: consts
-static const unsigned BVH_ALIGNMENT = 16;
-static const unsigned BVH_ALIGNMENT_MASK = BVH_ALIGNMENT-1;
-
-static const unsigned BVH_ALIGNMENT_BLOCKS = 2;
-#endif
-
-unsigned int b3QuantizedBvh::getAlignmentSerializationPadding()
-{
- // I changed this to 0 since the extra padding is not needed or used.
- return 0; //BVH_ALIGNMENT_BLOCKS * BVH_ALIGNMENT;
-}
-
-unsigned b3QuantizedBvh::calculateSerializeBufferSize() const
-{
- unsigned baseSize = sizeof(b3QuantizedBvh) + getAlignmentSerializationPadding();
- baseSize += sizeof(b3BvhSubtreeInfo) * m_subtreeHeaderCount;
- if (m_useQuantization)
- {
- return baseSize + m_curNodeIndex * sizeof(b3QuantizedBvhNode);
- }
- return baseSize + m_curNodeIndex * sizeof(b3OptimizedBvhNode);
-}
-
-bool b3QuantizedBvh::serialize(void* o_alignedDataBuffer, unsigned /*i_dataBufferSize */, bool i_swapEndian) const
-{
- b3Assert(m_subtreeHeaderCount == m_SubtreeHeaders.size());
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-
- /* if (i_dataBufferSize < calculateSerializeBufferSize() || o_alignedDataBuffer == NULL || (((unsigned)o_alignedDataBuffer & BVH_ALIGNMENT_MASK) != 0))
- {
- ///check alignedment for buffer?
- b3Assert(0);
- return false;
- }
-*/
-
- b3QuantizedBvh* targetBvh = (b3QuantizedBvh*)o_alignedDataBuffer;
-
- // construct the class so the virtual function table, etc will be set up
- // Also, m_leafNodes and m_quantizedLeafNodes will be initialized to default values by the constructor
- new (targetBvh) b3QuantizedBvh;
-
- if (i_swapEndian)
- {
- targetBvh->m_curNodeIndex = static_cast<int>(b3SwapEndian(m_curNodeIndex));
-
- b3SwapVector3Endian(m_bvhAabbMin, targetBvh->m_bvhAabbMin);
- b3SwapVector3Endian(m_bvhAabbMax, targetBvh->m_bvhAabbMax);
- b3SwapVector3Endian(m_bvhQuantization, targetBvh->m_bvhQuantization);
-
- targetBvh->m_traversalMode = (b3TraversalMode)b3SwapEndian(m_traversalMode);
- targetBvh->m_subtreeHeaderCount = static_cast<int>(b3SwapEndian(m_subtreeHeaderCount));
- }
- else
- {
- targetBvh->m_curNodeIndex = m_curNodeIndex;
- targetBvh->m_bvhAabbMin = m_bvhAabbMin;
- targetBvh->m_bvhAabbMax = m_bvhAabbMax;
- targetBvh->m_bvhQuantization = m_bvhQuantization;
- targetBvh->m_traversalMode = m_traversalMode;
- targetBvh->m_subtreeHeaderCount = m_subtreeHeaderCount;
- }
-
- targetBvh->m_useQuantization = m_useQuantization;
-
- unsigned char* nodeData = (unsigned char*)targetBvh;
- nodeData += sizeof(b3QuantizedBvh);
-
- unsigned sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- int nodeCount = m_curNodeIndex;
-
- if (m_useQuantization)
- {
- targetBvh->m_quantizedContiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0] = b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1] = b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2] = b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2]);
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0] = b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1] = b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2] = b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2]);
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = static_cast<int>(b3SwapEndian(m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex));
- }
- }
- else
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2];
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2];
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex;
- }
- }
- nodeData += sizeof(b3QuantizedBvhNode) * nodeCount;
-
- // this clears the pointer in the member variable it doesn't really do anything to the data
- // it does call the destructor on the contained objects, but they are all classes with no destructor defined
- // so the memory (which is not freed) is left alone
- targetBvh->m_quantizedContiguousNodes.initializeFromBuffer(NULL, 0, 0);
- }
- else
- {
- targetBvh->m_contiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- b3SwapVector3Endian(m_contiguousNodes[nodeIndex].m_aabbMinOrg, targetBvh->m_contiguousNodes[nodeIndex].m_aabbMinOrg);
- b3SwapVector3Endian(m_contiguousNodes[nodeIndex].m_aabbMaxOrg, targetBvh->m_contiguousNodes[nodeIndex].m_aabbMaxOrg);
-
- targetBvh->m_contiguousNodes[nodeIndex].m_escapeIndex = static_cast<int>(b3SwapEndian(m_contiguousNodes[nodeIndex].m_escapeIndex));
- targetBvh->m_contiguousNodes[nodeIndex].m_subPart = static_cast<int>(b3SwapEndian(m_contiguousNodes[nodeIndex].m_subPart));
- targetBvh->m_contiguousNodes[nodeIndex].m_triangleIndex = static_cast<int>(b3SwapEndian(m_contiguousNodes[nodeIndex].m_triangleIndex));
- }
- }
- else
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- targetBvh->m_contiguousNodes[nodeIndex].m_aabbMinOrg = m_contiguousNodes[nodeIndex].m_aabbMinOrg;
- targetBvh->m_contiguousNodes[nodeIndex].m_aabbMaxOrg = m_contiguousNodes[nodeIndex].m_aabbMaxOrg;
-
- targetBvh->m_contiguousNodes[nodeIndex].m_escapeIndex = m_contiguousNodes[nodeIndex].m_escapeIndex;
- targetBvh->m_contiguousNodes[nodeIndex].m_subPart = m_contiguousNodes[nodeIndex].m_subPart;
- targetBvh->m_contiguousNodes[nodeIndex].m_triangleIndex = m_contiguousNodes[nodeIndex].m_triangleIndex;
- }
- }
- nodeData += sizeof(b3OptimizedBvhNode) * nodeCount;
-
- // this clears the pointer in the member variable it doesn't really do anything to the data
- // it does call the destructor on the contained objects, but they are all classes with no destructor defined
- // so the memory (which is not freed) is left alone
- targetBvh->m_contiguousNodes.initializeFromBuffer(NULL, 0, 0);
- }
-
- sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- // Now serialize the subtree headers
- targetBvh->m_SubtreeHeaders.initializeFromBuffer(nodeData, m_subtreeHeaderCount, m_subtreeHeaderCount);
- if (i_swapEndian)
- {
- for (int i = 0; i < m_subtreeHeaderCount; i++)
- {
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0] = b3SwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMin[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1] = b3SwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMin[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2] = b3SwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMin[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0] = b3SwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMax[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1] = b3SwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMax[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2] = b3SwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMax[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_rootNodeIndex = static_cast<int>(b3SwapEndian(m_SubtreeHeaders[i].m_rootNodeIndex));
- targetBvh->m_SubtreeHeaders[i].m_subtreeSize = static_cast<int>(b3SwapEndian(m_SubtreeHeaders[i].m_subtreeSize));
- }
- }
- else
- {
- for (int i = 0; i < m_subtreeHeaderCount; i++)
- {
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0] = (m_SubtreeHeaders[i].m_quantizedAabbMin[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1] = (m_SubtreeHeaders[i].m_quantizedAabbMin[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2] = (m_SubtreeHeaders[i].m_quantizedAabbMin[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0] = (m_SubtreeHeaders[i].m_quantizedAabbMax[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1] = (m_SubtreeHeaders[i].m_quantizedAabbMax[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2] = (m_SubtreeHeaders[i].m_quantizedAabbMax[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_rootNodeIndex = (m_SubtreeHeaders[i].m_rootNodeIndex);
- targetBvh->m_SubtreeHeaders[i].m_subtreeSize = (m_SubtreeHeaders[i].m_subtreeSize);
-
- // need to clear padding in destination buffer
- targetBvh->m_SubtreeHeaders[i].m_padding[0] = 0;
- targetBvh->m_SubtreeHeaders[i].m_padding[1] = 0;
- targetBvh->m_SubtreeHeaders[i].m_padding[2] = 0;
- }
- }
- nodeData += sizeof(b3BvhSubtreeInfo) * m_subtreeHeaderCount;
-
- // this clears the pointer in the member variable it doesn't really do anything to the data
- // it does call the destructor on the contained objects, but they are all classes with no destructor defined
- // so the memory (which is not freed) is left alone
- targetBvh->m_SubtreeHeaders.initializeFromBuffer(NULL, 0, 0);
-
- // this wipes the virtual function table pointer at the start of the buffer for the class
- *((void**)o_alignedDataBuffer) = NULL;
-
- return true;
-}
-
-b3QuantizedBvh* b3QuantizedBvh::deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian)
-{
- if (i_alignedDataBuffer == NULL) // || (((unsigned)i_alignedDataBuffer & BVH_ALIGNMENT_MASK) != 0))
- {
- return NULL;
- }
- b3QuantizedBvh* bvh = (b3QuantizedBvh*)i_alignedDataBuffer;
-
- if (i_swapEndian)
- {
- bvh->m_curNodeIndex = static_cast<int>(b3SwapEndian(bvh->m_curNodeIndex));
-
- b3UnSwapVector3Endian(bvh->m_bvhAabbMin);
- b3UnSwapVector3Endian(bvh->m_bvhAabbMax);
- b3UnSwapVector3Endian(bvh->m_bvhQuantization);
-
- bvh->m_traversalMode = (b3TraversalMode)b3SwapEndian(bvh->m_traversalMode);
- bvh->m_subtreeHeaderCount = static_cast<int>(b3SwapEndian(bvh->m_subtreeHeaderCount));
- }
-
- unsigned int calculatedBufSize = bvh->calculateSerializeBufferSize();
- b3Assert(calculatedBufSize <= i_dataBufferSize);
-
- if (calculatedBufSize > i_dataBufferSize)
- {
- return NULL;
- }
-
- unsigned char* nodeData = (unsigned char*)bvh;
- nodeData += sizeof(b3QuantizedBvh);
-
- unsigned sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- int nodeCount = bvh->m_curNodeIndex;
-
- // Must call placement new to fill in virtual function table, etc, but we don't want to overwrite most data, so call a special version of the constructor
- // Also, m_leafNodes and m_quantizedLeafNodes will be initialized to default values by the constructor
- new (bvh) b3QuantizedBvh(*bvh, false);
-
- if (bvh->m_useQuantization)
- {
- bvh->m_quantizedContiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0] = b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1] = b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2] = b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2]);
-
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0] = b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1] = b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2] = b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2]);
-
- bvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = static_cast<int>(b3SwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex));
- }
- }
- nodeData += sizeof(b3QuantizedBvhNode) * nodeCount;
- }
- else
- {
- bvh->m_contiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- b3UnSwapVector3Endian(bvh->m_contiguousNodes[nodeIndex].m_aabbMinOrg);
- b3UnSwapVector3Endian(bvh->m_contiguousNodes[nodeIndex].m_aabbMaxOrg);
-
- bvh->m_contiguousNodes[nodeIndex].m_escapeIndex = static_cast<int>(b3SwapEndian(bvh->m_contiguousNodes[nodeIndex].m_escapeIndex));
- bvh->m_contiguousNodes[nodeIndex].m_subPart = static_cast<int>(b3SwapEndian(bvh->m_contiguousNodes[nodeIndex].m_subPart));
- bvh->m_contiguousNodes[nodeIndex].m_triangleIndex = static_cast<int>(b3SwapEndian(bvh->m_contiguousNodes[nodeIndex].m_triangleIndex));
- }
- }
- nodeData += sizeof(b3OptimizedBvhNode) * nodeCount;
- }
-
- sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- // Now serialize the subtree headers
- bvh->m_SubtreeHeaders.initializeFromBuffer(nodeData, bvh->m_subtreeHeaderCount, bvh->m_subtreeHeaderCount);
- if (i_swapEndian)
- {
- for (int i = 0; i < bvh->m_subtreeHeaderCount; i++)
- {
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0] = b3SwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1] = b3SwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2] = b3SwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2]);
-
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0] = b3SwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1] = b3SwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2] = b3SwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2]);
-
- bvh->m_SubtreeHeaders[i].m_rootNodeIndex = static_cast<int>(b3SwapEndian(bvh->m_SubtreeHeaders[i].m_rootNodeIndex));
- bvh->m_SubtreeHeaders[i].m_subtreeSize = static_cast<int>(b3SwapEndian(bvh->m_SubtreeHeaders[i].m_subtreeSize));
- }
- }
-
- return bvh;
-}
-
-// Constructor that prevents b3Vector3's default constructor from being called
-b3QuantizedBvh::b3QuantizedBvh(b3QuantizedBvh& self, bool /* ownsMemory */) : m_bvhAabbMin(self.m_bvhAabbMin),
- m_bvhAabbMax(self.m_bvhAabbMax),
- m_bvhQuantization(self.m_bvhQuantization),
- m_bulletVersion(B3_BULLET_VERSION)
-{
-}
-
-void b3QuantizedBvh::deSerializeFloat(struct b3QuantizedBvhFloatData& quantizedBvhFloatData)
-{
- m_bvhAabbMax.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMax);
- m_bvhAabbMin.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMin);
- m_bvhQuantization.deSerializeFloat(quantizedBvhFloatData.m_bvhQuantization);
-
- m_curNodeIndex = quantizedBvhFloatData.m_curNodeIndex;
- m_useQuantization = quantizedBvhFloatData.m_useQuantization != 0;
-
- {
- int numElem = quantizedBvhFloatData.m_numContiguousLeafNodes;
- m_contiguousNodes.resize(numElem);
-
- if (numElem)
- {
- b3OptimizedBvhNodeFloatData* memPtr = quantizedBvhFloatData.m_contiguousNodesPtr;
-
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_contiguousNodes[i].m_aabbMaxOrg.deSerializeFloat(memPtr->m_aabbMaxOrg);
- m_contiguousNodes[i].m_aabbMinOrg.deSerializeFloat(memPtr->m_aabbMinOrg);
- m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex;
- m_contiguousNodes[i].m_subPart = memPtr->m_subPart;
- m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex;
- }
- }
- }
-
- {
- int numElem = quantizedBvhFloatData.m_numQuantizedContiguousNodes;
- m_quantizedContiguousNodes.resize(numElem);
-
- if (numElem)
- {
- b3QuantizedBvhNodeData* memPtr = quantizedBvhFloatData.m_quantizedContiguousNodesPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex = memPtr->m_escapeIndexOrTriangleIndex;
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- }
- }
- }
-
- m_traversalMode = b3TraversalMode(quantizedBvhFloatData.m_traversalMode);
-
- {
- int numElem = quantizedBvhFloatData.m_numSubtreeHeaders;
- m_SubtreeHeaders.resize(numElem);
- if (numElem)
- {
- b3BvhSubtreeInfoData* memPtr = quantizedBvhFloatData.m_subTreeInfoPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_SubtreeHeaders[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex;
- m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize;
- }
- }
- }
-}
-
-void b3QuantizedBvh::deSerializeDouble(struct b3QuantizedBvhDoubleData& quantizedBvhDoubleData)
-{
- m_bvhAabbMax.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMax);
- m_bvhAabbMin.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMin);
- m_bvhQuantization.deSerializeDouble(quantizedBvhDoubleData.m_bvhQuantization);
-
- m_curNodeIndex = quantizedBvhDoubleData.m_curNodeIndex;
- m_useQuantization = quantizedBvhDoubleData.m_useQuantization != 0;
-
- {
- int numElem = quantizedBvhDoubleData.m_numContiguousLeafNodes;
- m_contiguousNodes.resize(numElem);
-
- if (numElem)
- {
- b3OptimizedBvhNodeDoubleData* memPtr = quantizedBvhDoubleData.m_contiguousNodesPtr;
-
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_contiguousNodes[i].m_aabbMaxOrg.deSerializeDouble(memPtr->m_aabbMaxOrg);
- m_contiguousNodes[i].m_aabbMinOrg.deSerializeDouble(memPtr->m_aabbMinOrg);
- m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex;
- m_contiguousNodes[i].m_subPart = memPtr->m_subPart;
- m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex;
- }
- }
- }
-
- {
- int numElem = quantizedBvhDoubleData.m_numQuantizedContiguousNodes;
- m_quantizedContiguousNodes.resize(numElem);
-
- if (numElem)
- {
- b3QuantizedBvhNodeData* memPtr = quantizedBvhDoubleData.m_quantizedContiguousNodesPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex = memPtr->m_escapeIndexOrTriangleIndex;
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- }
- }
- }
-
- m_traversalMode = b3TraversalMode(quantizedBvhDoubleData.m_traversalMode);
-
- {
- int numElem = quantizedBvhDoubleData.m_numSubtreeHeaders;
- m_SubtreeHeaders.resize(numElem);
- if (numElem)
- {
- b3BvhSubtreeInfoData* memPtr = quantizedBvhDoubleData.m_subTreeInfoPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_SubtreeHeaders[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex;
- m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize;
- }
- }
- }
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* b3QuantizedBvh::serialize(void* dataBuffer, b3Serializer* serializer) const
-{
- b3Assert(0);
- return 0;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.h
deleted file mode 100644
index 48b41abcad..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.h
+++ /dev/null
@@ -1,511 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_QUANTIZED_BVH_H
-#define B3_QUANTIZED_BVH_H
-
-class b3Serializer;
-
-//#define DEBUG_CHECK_DEQUANTIZATION 1
-#ifdef DEBUG_CHECK_DEQUANTIZATION
-#ifdef __SPU__
-#define printf spu_printf
-#endif //__SPU__
-
-#include <stdio.h>
-#include <stdlib.h>
-#endif //DEBUG_CHECK_DEQUANTIZATION
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3AlignedAllocator.h"
-
-#ifdef B3_USE_DOUBLE_PRECISION
-#define b3QuantizedBvhData b3QuantizedBvhDoubleData
-#define b3OptimizedBvhNodeData b3OptimizedBvhNodeDoubleData
-#define b3QuantizedBvhDataName "b3QuantizedBvhDoubleData"
-#else
-#define b3QuantizedBvhData b3QuantizedBvhFloatData
-#define b3OptimizedBvhNodeData b3OptimizedBvhNodeFloatData
-#define b3QuantizedBvhDataName "b3QuantizedBvhFloatData"
-#endif
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3QuantizedBvhNodeData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3BvhSubtreeInfoData.h"
-
-//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrf__m128.asp
-
-//Note: currently we have 16 bytes per quantized node
-#define MAX_SUBTREE_SIZE_IN_BYTES 2048
-
-// 10 gives the potential for 1024 parts, with at most 2^21 (2097152) (minus one
-// actually) triangles each (since the sign bit is reserved
-#define MAX_NUM_PARTS_IN_BITS 10
-
-///b3QuantizedBvhNode is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3QuantizedBvhNode : public b3QuantizedBvhNodeData
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- bool isLeafNode() const
- {
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (m_escapeIndexOrTriangleIndex >= 0);
- }
- int getEscapeIndex() const
- {
- b3Assert(!isLeafNode());
- return -m_escapeIndexOrTriangleIndex;
- }
- int getTriangleIndex() const
- {
- b3Assert(isLeafNode());
- unsigned int x = 0;
- unsigned int y = (~(x & 0)) << (31 - MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (m_escapeIndexOrTriangleIndex & ~(y));
- }
- int getPartId() const
- {
- b3Assert(isLeafNode());
- // Get only the highest bits where the part index is stored
- return (m_escapeIndexOrTriangleIndex >> (31 - MAX_NUM_PARTS_IN_BITS));
- }
-};
-
-/// b3OptimizedBvhNode contains both internal and leaf node information.
-/// Total node size is 44 bytes / node. You can use the compressed version of 16 bytes.
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3OptimizedBvhNode
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- //32 bytes
- b3Vector3 m_aabbMinOrg;
- b3Vector3 m_aabbMaxOrg;
-
- //4
- int m_escapeIndex;
-
- //8
- //for child nodes
- int m_subPart;
- int m_triangleIndex;
-
- //pad the size to 64 bytes
- char m_padding[20];
-};
-
-///b3BvhSubtreeInfo provides info to gather a subtree of limited size
-B3_ATTRIBUTE_ALIGNED16(class)
-b3BvhSubtreeInfo : public b3BvhSubtreeInfoData
-{
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3BvhSubtreeInfo()
- {
- //memset(&m_padding[0], 0, sizeof(m_padding));
- }
-
- void setAabbFromQuantizeNode(const b3QuantizedBvhNode& quantizedNode)
- {
- m_quantizedAabbMin[0] = quantizedNode.m_quantizedAabbMin[0];
- m_quantizedAabbMin[1] = quantizedNode.m_quantizedAabbMin[1];
- m_quantizedAabbMin[2] = quantizedNode.m_quantizedAabbMin[2];
- m_quantizedAabbMax[0] = quantizedNode.m_quantizedAabbMax[0];
- m_quantizedAabbMax[1] = quantizedNode.m_quantizedAabbMax[1];
- m_quantizedAabbMax[2] = quantizedNode.m_quantizedAabbMax[2];
- }
-};
-
-class b3NodeOverlapCallback
-{
-public:
- virtual ~b3NodeOverlapCallback(){};
-
- virtual void processNode(int subPart, int triangleIndex) = 0;
-};
-
-#include "Bullet3Common/b3AlignedAllocator.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-///for code readability:
-typedef b3AlignedObjectArray<b3OptimizedBvhNode> NodeArray;
-typedef b3AlignedObjectArray<b3QuantizedBvhNode> QuantizedNodeArray;
-typedef b3AlignedObjectArray<b3BvhSubtreeInfo> BvhSubtreeInfoArray;
-
-///The b3QuantizedBvh class stores an AABB tree that can be quickly traversed on CPU and Cell SPU.
-///It is used by the b3BvhTriangleMeshShape as midphase
-///It is recommended to use quantization for better performance and lower memory requirements.
-B3_ATTRIBUTE_ALIGNED16(class)
-b3QuantizedBvh
-{
-public:
- enum b3TraversalMode
- {
- TRAVERSAL_STACKLESS = 0,
- TRAVERSAL_STACKLESS_CACHE_FRIENDLY,
- TRAVERSAL_RECURSIVE
- };
-
- b3Vector3 m_bvhAabbMin;
- b3Vector3 m_bvhAabbMax;
- b3Vector3 m_bvhQuantization;
-
-protected:
- int m_bulletVersion; //for serialization versioning. It could also be used to detect endianess.
-
- int m_curNodeIndex;
- //quantization data
- bool m_useQuantization;
-
- NodeArray m_leafNodes;
- NodeArray m_contiguousNodes;
- QuantizedNodeArray m_quantizedLeafNodes;
- QuantizedNodeArray m_quantizedContiguousNodes;
-
- b3TraversalMode m_traversalMode;
- BvhSubtreeInfoArray m_SubtreeHeaders;
-
- //This is only used for serialization so we don't have to add serialization directly to b3AlignedObjectArray
- mutable int m_subtreeHeaderCount;
-
- ///two versions, one for quantized and normal nodes. This allows code-reuse while maintaining readability (no template/macro!)
- ///this might be refactored into a virtual, it is usually not calculated at run-time
- void setInternalNodeAabbMin(int nodeIndex, const b3Vector3& aabbMin)
- {
- if (m_useQuantization)
- {
- quantize(&m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0], aabbMin, 0);
- }
- else
- {
- m_contiguousNodes[nodeIndex].m_aabbMinOrg = aabbMin;
- }
- }
- void setInternalNodeAabbMax(int nodeIndex, const b3Vector3& aabbMax)
- {
- if (m_useQuantization)
- {
- quantize(&m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0], aabbMax, 1);
- }
- else
- {
- m_contiguousNodes[nodeIndex].m_aabbMaxOrg = aabbMax;
- }
- }
-
- b3Vector3 getAabbMin(int nodeIndex) const
- {
- if (m_useQuantization)
- {
- return unQuantize(&m_quantizedLeafNodes[nodeIndex].m_quantizedAabbMin[0]);
- }
- //non-quantized
- return m_leafNodes[nodeIndex].m_aabbMinOrg;
- }
- b3Vector3 getAabbMax(int nodeIndex) const
- {
- if (m_useQuantization)
- {
- return unQuantize(&m_quantizedLeafNodes[nodeIndex].m_quantizedAabbMax[0]);
- }
- //non-quantized
- return m_leafNodes[nodeIndex].m_aabbMaxOrg;
- }
-
- void setInternalNodeEscapeIndex(int nodeIndex, int escapeIndex)
- {
- if (m_useQuantization)
- {
- m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = -escapeIndex;
- }
- else
- {
- m_contiguousNodes[nodeIndex].m_escapeIndex = escapeIndex;
- }
- }
-
- void mergeInternalNodeAabb(int nodeIndex, const b3Vector3& newAabbMin, const b3Vector3& newAabbMax)
- {
- if (m_useQuantization)
- {
- unsigned short int quantizedAabbMin[3];
- unsigned short int quantizedAabbMax[3];
- quantize(quantizedAabbMin, newAabbMin, 0);
- quantize(quantizedAabbMax, newAabbMax, 1);
- for (int i = 0; i < 3; i++)
- {
- if (m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[i] > quantizedAabbMin[i])
- m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[i] = quantizedAabbMin[i];
-
- if (m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[i] < quantizedAabbMax[i])
- m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[i] = quantizedAabbMax[i];
- }
- }
- else
- {
- //non-quantized
- m_contiguousNodes[nodeIndex].m_aabbMinOrg.setMin(newAabbMin);
- m_contiguousNodes[nodeIndex].m_aabbMaxOrg.setMax(newAabbMax);
- }
- }
-
- void swapLeafNodes(int firstIndex, int secondIndex);
-
- void assignInternalNodeFromLeafNode(int internalNode, int leafNodeIndex);
-
-protected:
- void buildTree(int startIndex, int endIndex);
-
- int calcSplittingAxis(int startIndex, int endIndex);
-
- int sortAndCalcSplittingIndex(int startIndex, int endIndex, int splitAxis);
-
- void walkStacklessTree(b3NodeOverlapCallback * nodeCallback, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const;
-
- void walkStacklessQuantizedTreeAgainstRay(b3NodeOverlapCallback * nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex, int endNodeIndex) const;
- void walkStacklessQuantizedTree(b3NodeOverlapCallback * nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax, int startNodeIndex, int endNodeIndex) const;
- void walkStacklessTreeAgainstRay(b3NodeOverlapCallback * nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax, int startNodeIndex, int endNodeIndex) const;
-
- ///tree traversal designed for small-memory processors like PS3 SPU
- void walkStacklessQuantizedTreeCacheFriendly(b3NodeOverlapCallback * nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const;
-
- ///use the 16-byte stackless 'skipindex' node tree to do a recursive traversal
- void walkRecursiveQuantizedTreeAgainstQueryAabb(const b3QuantizedBvhNode* currentNode, b3NodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const;
-
- ///use the 16-byte stackless 'skipindex' node tree to do a recursive traversal
- void walkRecursiveQuantizedTreeAgainstQuantizedTree(const b3QuantizedBvhNode* treeNodeA, const b3QuantizedBvhNode* treeNodeB, b3NodeOverlapCallback* nodeCallback) const;
-
- void updateSubtreeHeaders(int leftChildNodexIndex, int rightChildNodexIndex);
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3QuantizedBvh();
-
- virtual ~b3QuantizedBvh();
-
- ///***************************************** expert/internal use only *************************
- void setQuantizationValues(const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax, b3Scalar quantizationMargin = b3Scalar(1.0));
- QuantizedNodeArray& getLeafNodeArray() { return m_quantizedLeafNodes; }
- ///buildInternal is expert use only: assumes that setQuantizationValues and LeafNodeArray are initialized
- void buildInternal();
- ///***************************************** expert/internal use only *************************
-
- void reportAabbOverlappingNodex(b3NodeOverlapCallback * nodeCallback, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const;
- void reportRayOverlappingNodex(b3NodeOverlapCallback * nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget) const;
- void reportBoxCastOverlappingNodex(b3NodeOverlapCallback * nodeCallback, const b3Vector3& raySource, const b3Vector3& rayTarget, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const;
-
- B3_FORCE_INLINE void quantize(unsigned short* out, const b3Vector3& point, int isMax) const
- {
- b3Assert(m_useQuantization);
-
- b3Assert(point.getX() <= m_bvhAabbMax.getX());
- b3Assert(point.getY() <= m_bvhAabbMax.getY());
- b3Assert(point.getZ() <= m_bvhAabbMax.getZ());
-
- b3Assert(point.getX() >= m_bvhAabbMin.getX());
- b3Assert(point.getY() >= m_bvhAabbMin.getY());
- b3Assert(point.getZ() >= m_bvhAabbMin.getZ());
-
- b3Vector3 v = (point - m_bvhAabbMin) * m_bvhQuantization;
- ///Make sure rounding is done in a way that unQuantize(quantizeWithClamp(...)) is conservative
- ///end-points always set the first bit, so that they are sorted properly (so that neighbouring AABBs overlap properly)
- ///@todo: double-check this
- if (isMax)
- {
- out[0] = (unsigned short)(((unsigned short)(v.getX() + b3Scalar(1.)) | 1));
- out[1] = (unsigned short)(((unsigned short)(v.getY() + b3Scalar(1.)) | 1));
- out[2] = (unsigned short)(((unsigned short)(v.getZ() + b3Scalar(1.)) | 1));
- }
- else
- {
- out[0] = (unsigned short)(((unsigned short)(v.getX()) & 0xfffe));
- out[1] = (unsigned short)(((unsigned short)(v.getY()) & 0xfffe));
- out[2] = (unsigned short)(((unsigned short)(v.getZ()) & 0xfffe));
- }
-
-#ifdef DEBUG_CHECK_DEQUANTIZATION
- b3Vector3 newPoint = unQuantize(out);
- if (isMax)
- {
- if (newPoint.getX() < point.getX())
- {
- printf("unconservative X, diffX = %f, oldX=%f,newX=%f\n", newPoint.getX() - point.getX(), newPoint.getX(), point.getX());
- }
- if (newPoint.getY() < point.getY())
- {
- printf("unconservative Y, diffY = %f, oldY=%f,newY=%f\n", newPoint.getY() - point.getY(), newPoint.getY(), point.getY());
- }
- if (newPoint.getZ() < point.getZ())
- {
- printf("unconservative Z, diffZ = %f, oldZ=%f,newZ=%f\n", newPoint.getZ() - point.getZ(), newPoint.getZ(), point.getZ());
- }
- }
- else
- {
- if (newPoint.getX() > point.getX())
- {
- printf("unconservative X, diffX = %f, oldX=%f,newX=%f\n", newPoint.getX() - point.getX(), newPoint.getX(), point.getX());
- }
- if (newPoint.getY() > point.getY())
- {
- printf("unconservative Y, diffY = %f, oldY=%f,newY=%f\n", newPoint.getY() - point.getY(), newPoint.getY(), point.getY());
- }
- if (newPoint.getZ() > point.getZ())
- {
- printf("unconservative Z, diffZ = %f, oldZ=%f,newZ=%f\n", newPoint.getZ() - point.getZ(), newPoint.getZ(), point.getZ());
- }
- }
-#endif //DEBUG_CHECK_DEQUANTIZATION
- }
-
- B3_FORCE_INLINE void quantizeWithClamp(unsigned short* out, const b3Vector3& point2, int isMax) const
- {
- b3Assert(m_useQuantization);
-
- b3Vector3 clampedPoint(point2);
- clampedPoint.setMax(m_bvhAabbMin);
- clampedPoint.setMin(m_bvhAabbMax);
-
- quantize(out, clampedPoint, isMax);
- }
-
- B3_FORCE_INLINE b3Vector3 unQuantize(const unsigned short* vecIn) const
- {
- b3Vector3 vecOut;
- vecOut.setValue(
- (b3Scalar)(vecIn[0]) / (m_bvhQuantization.getX()),
- (b3Scalar)(vecIn[1]) / (m_bvhQuantization.getY()),
- (b3Scalar)(vecIn[2]) / (m_bvhQuantization.getZ()));
- vecOut += m_bvhAabbMin;
- return vecOut;
- }
-
- ///setTraversalMode let's you choose between stackless, recursive or stackless cache friendly tree traversal. Note this is only implemented for quantized trees.
- void setTraversalMode(b3TraversalMode traversalMode)
- {
- m_traversalMode = traversalMode;
- }
-
- B3_FORCE_INLINE QuantizedNodeArray& getQuantizedNodeArray()
- {
- return m_quantizedContiguousNodes;
- }
-
- B3_FORCE_INLINE BvhSubtreeInfoArray& getSubtreeInfoArray()
- {
- return m_SubtreeHeaders;
- }
-
- ////////////////////////////////////////////////////////////////////
-
- /////Calculate space needed to store BVH for serialization
- unsigned calculateSerializeBufferSize() const;
-
- /// Data buffer MUST be 16 byte aligned
- virtual bool serialize(void* o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const;
-
- ///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place'
- static b3QuantizedBvh* deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian);
-
- static unsigned int getAlignmentSerializationPadding();
- //////////////////////////////////////////////////////////////////////
-
- virtual int calculateSerializeBufferSizeNew() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, b3Serializer* serializer) const;
-
- virtual void deSerializeFloat(struct b3QuantizedBvhFloatData & quantizedBvhFloatData);
-
- virtual void deSerializeDouble(struct b3QuantizedBvhDoubleData & quantizedBvhDoubleData);
-
- ////////////////////////////////////////////////////////////////////
-
- B3_FORCE_INLINE bool isQuantized()
- {
- return m_useQuantization;
- }
-
-private:
- // Special "copy" constructor that allows for in-place deserialization
- // Prevents b3Vector3's default constructor from being called, but doesn't inialize much else
- // ownsMemory should most likely be false if deserializing, and if you are not, don't call this (it also changes the function signature, which we need)
- b3QuantizedBvh(b3QuantizedBvh & other, bool ownsMemory);
-};
-
-struct b3OptimizedBvhNodeFloatData
-{
- b3Vector3FloatData m_aabbMinOrg;
- b3Vector3FloatData m_aabbMaxOrg;
- int m_escapeIndex;
- int m_subPart;
- int m_triangleIndex;
- char m_pad[4];
-};
-
-struct b3OptimizedBvhNodeDoubleData
-{
- b3Vector3DoubleData m_aabbMinOrg;
- b3Vector3DoubleData m_aabbMaxOrg;
- int m_escapeIndex;
- int m_subPart;
- int m_triangleIndex;
- char m_pad[4];
-};
-
-struct b3QuantizedBvhFloatData
-{
- b3Vector3FloatData m_bvhAabbMin;
- b3Vector3FloatData m_bvhAabbMax;
- b3Vector3FloatData m_bvhQuantization;
- int m_curNodeIndex;
- int m_useQuantization;
- int m_numContiguousLeafNodes;
- int m_numQuantizedContiguousNodes;
- b3OptimizedBvhNodeFloatData* m_contiguousNodesPtr;
- b3QuantizedBvhNodeData* m_quantizedContiguousNodesPtr;
- b3BvhSubtreeInfoData* m_subTreeInfoPtr;
- int m_traversalMode;
- int m_numSubtreeHeaders;
-};
-
-struct b3QuantizedBvhDoubleData
-{
- b3Vector3DoubleData m_bvhAabbMin;
- b3Vector3DoubleData m_bvhAabbMax;
- b3Vector3DoubleData m_bvhQuantization;
- int m_curNodeIndex;
- int m_useQuantization;
- int m_numContiguousLeafNodes;
- int m_numQuantizedContiguousNodes;
- b3OptimizedBvhNodeDoubleData* m_contiguousNodesPtr;
- b3QuantizedBvhNodeData* m_quantizedContiguousNodesPtr;
-
- int m_traversalMode;
- int m_numSubtreeHeaders;
- b3BvhSubtreeInfoData* m_subTreeInfoPtr;
-};
-
-B3_FORCE_INLINE int b3QuantizedBvh::calculateSerializeBufferSizeNew() const
-{
- return sizeof(b3QuantizedBvhData);
-}
-
-#endif //B3_QUANTIZED_BVH_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.cpp
deleted file mode 100644
index 6b0c941f23..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.cpp
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3StridingMeshInterface.h"
-
-b3StridingMeshInterface::~b3StridingMeshInterface()
-{
-}
-
-void b3StridingMeshInterface::InternalProcessAllTriangles(b3InternalTriangleIndexCallback* callback, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const
-{
- (void)aabbMin;
- (void)aabbMax;
- int numtotalphysicsverts = 0;
- int part, graphicssubparts = getNumSubParts();
- const unsigned char* vertexbase;
- const unsigned char* indexbase;
- int indexstride;
- PHY_ScalarType type;
- PHY_ScalarType gfxindextype;
- int stride, numverts, numtriangles;
- int gfxindex;
- b3Vector3 triangle[3];
-
- b3Vector3 meshScaling = getScaling();
-
- ///if the number of parts is big, the performance might drop due to the innerloop switch on indextype
- for (part = 0; part < graphicssubparts; part++)
- {
- getLockedReadOnlyVertexIndexBase(&vertexbase, numverts, type, stride, &indexbase, indexstride, numtriangles, gfxindextype, part);
- numtotalphysicsverts += numtriangles * 3; //upper bound
-
- ///unlike that developers want to pass in double-precision meshes in single-precision Bullet build
- ///so disable this feature by default
- ///see patch http://code.google.com/p/bullet/issues/detail?id=213
-
- switch (type)
- {
- case PHY_FLOAT:
- {
- float* graphicsbase;
-
- switch (gfxindextype)
- {
- case PHY_INTEGER:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned int* tri_indices = (unsigned int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (float*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_SHORT:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned short int* tri_indices = (unsigned short int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (float*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_UCHAR:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned char* tri_indices = (unsigned char*)(indexbase + gfxindex * indexstride);
- graphicsbase = (float*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- default:
- b3Assert((gfxindextype == PHY_INTEGER) || (gfxindextype == PHY_SHORT));
- }
- break;
- }
-
- case PHY_DOUBLE:
- {
- double* graphicsbase;
-
- switch (gfxindextype)
- {
- case PHY_INTEGER:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned int* tri_indices = (unsigned int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (double*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_SHORT:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned short int* tri_indices = (unsigned short int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (double*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_UCHAR:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned char* tri_indices = (unsigned char*)(indexbase + gfxindex * indexstride);
- graphicsbase = (double*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue((b3Scalar)graphicsbase[0] * meshScaling.getX(), (b3Scalar)graphicsbase[1] * meshScaling.getY(), (b3Scalar)graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- default:
- b3Assert((gfxindextype == PHY_INTEGER) || (gfxindextype == PHY_SHORT));
- }
- break;
- }
- default:
- b3Assert((type == PHY_FLOAT) || (type == PHY_DOUBLE));
- }
-
- unLockReadOnlyVertexBase(part);
- }
-}
-
-void b3StridingMeshInterface::calculateAabbBruteForce(b3Vector3& aabbMin, b3Vector3& aabbMax)
-{
- struct AabbCalculationCallback : public b3InternalTriangleIndexCallback
- {
- b3Vector3 m_aabbMin;
- b3Vector3 m_aabbMax;
-
- AabbCalculationCallback()
- {
- m_aabbMin.setValue(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
- m_aabbMax.setValue(b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT));
- }
-
- virtual void internalProcessTriangleIndex(b3Vector3* triangle, int partId, int triangleIndex)
- {
- (void)partId;
- (void)triangleIndex;
-
- m_aabbMin.setMin(triangle[0]);
- m_aabbMax.setMax(triangle[0]);
- m_aabbMin.setMin(triangle[1]);
- m_aabbMax.setMax(triangle[1]);
- m_aabbMin.setMin(triangle[2]);
- m_aabbMax.setMax(triangle[2]);
- }
- };
-
- //first calculate the total aabb for all triangles
- AabbCalculationCallback aabbCallback;
- aabbMin.setValue(b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT), b3Scalar(-B3_LARGE_FLOAT));
- aabbMax.setValue(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
- InternalProcessAllTriangles(&aabbCallback, aabbMin, aabbMax);
-
- aabbMin = aabbCallback.m_aabbMin;
- aabbMax = aabbCallback.m_aabbMax;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.h
deleted file mode 100644
index 2b1e63be75..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3StridingMeshInterface.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_STRIDING_MESHINTERFACE_H
-#define B3_STRIDING_MESHINTERFACE_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "b3TriangleCallback.h"
-//#include "b3ConcaveShape.h"
-
-enum PHY_ScalarType
-{
- PHY_FLOAT,
- PHY_DOUBLE,
- PHY_INTEGER,
- PHY_SHORT,
- PHY_FIXEDPOINT88,
- PHY_UCHAR
-};
-
-/// The b3StridingMeshInterface is the interface class for high performance generic access to triangle meshes, used in combination with b3BvhTriangleMeshShape and some other collision shapes.
-/// Using index striding of 3*sizeof(integer) it can use triangle arrays, using index striding of 1*sizeof(integer) it can handle triangle strips.
-/// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory.
-B3_ATTRIBUTE_ALIGNED16(class)
-b3StridingMeshInterface
-{
-protected:
- b3Vector3 m_scaling;
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3StridingMeshInterface() : m_scaling(b3MakeVector3(b3Scalar(1.), b3Scalar(1.), b3Scalar(1.)))
- {
- }
-
- virtual ~b3StridingMeshInterface();
-
- virtual void InternalProcessAllTriangles(b3InternalTriangleIndexCallback * callback, const b3Vector3& aabbMin, const b3Vector3& aabbMax) const;
-
- ///brute force method to calculate aabb
- void calculateAabbBruteForce(b3Vector3 & aabbMin, b3Vector3 & aabbMax);
-
- /// get read and write access to a subpart of a triangle mesh
- /// this subpart has a continuous array of vertices and indices
- /// in this way the mesh can be handled as chunks of memory with striding
- /// very similar to OpenGL vertexarray support
- /// make a call to unLockVertexBase when the read and write access is finished
- virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) = 0;
-
- virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const = 0;
-
- /// unLockVertexBase finishes the access to a subpart of the triangle mesh
- /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished
- virtual void unLockVertexBase(int subpart) = 0;
-
- virtual void unLockReadOnlyVertexBase(int subpart) const = 0;
-
- /// getNumSubParts returns the number of separate subparts
- /// each subpart has a continuous array of vertices and indices
- virtual int getNumSubParts() const = 0;
-
- virtual void preallocateVertices(int numverts) = 0;
- virtual void preallocateIndices(int numindices) = 0;
-
- virtual bool hasPremadeAabb() const { return false; }
- virtual void setPremadeAabb(const b3Vector3& aabbMin, const b3Vector3& aabbMax) const
- {
- (void)aabbMin;
- (void)aabbMax;
- }
- virtual void getPremadeAabb(b3Vector3 * aabbMin, b3Vector3 * aabbMax) const
- {
- (void)aabbMin;
- (void)aabbMax;
- }
-
- const b3Vector3& getScaling() const
- {
- return m_scaling;
- }
- void setScaling(const b3Vector3& scaling)
- {
- m_scaling = scaling;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- //virtual const char* serialize(void* dataBuffer, b3Serializer* serializer) const;
-};
-
-struct b3IntIndexData
-{
- int m_value;
-};
-
-struct b3ShortIntIndexData
-{
- short m_value;
- char m_pad[2];
-};
-
-struct b3ShortIntIndexTripletData
-{
- short m_values[3];
- char m_pad[2];
-};
-
-struct b3CharIndexTripletData
-{
- unsigned char m_values[3];
- char m_pad;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3MeshPartData
-{
- b3Vector3FloatData* m_vertices3f;
- b3Vector3DoubleData* m_vertices3d;
-
- b3IntIndexData* m_indices32;
- b3ShortIntIndexTripletData* m_3indices16;
- b3CharIndexTripletData* m_3indices8;
-
- b3ShortIntIndexData* m_indices16; //backwards compatibility
-
- int m_numTriangles; //length of m_indices = m_numTriangles
- int m_numVertices;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct b3StridingMeshInterfaceData
-{
- b3MeshPartData* m_meshPartsPtr;
- b3Vector3FloatData m_scaling;
- int m_numMeshParts;
- char m_padding[4];
-};
-
-B3_FORCE_INLINE int b3StridingMeshInterface::calculateSerializeBufferSize() const
-{
- return sizeof(b3StridingMeshInterfaceData);
-}
-
-#endif //B3_STRIDING_MESHINTERFACE_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3SupportMappings.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3SupportMappings.h
deleted file mode 100644
index 9ca1e22949..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3SupportMappings.h
+++ /dev/null
@@ -1,34 +0,0 @@
-
-#ifndef B3_SUPPORT_MAPPINGS_H
-#define B3_SUPPORT_MAPPINGS_H
-
-#include "Bullet3Common/b3Transform.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "b3VectorFloat4.h"
-
-struct b3GjkPairDetector;
-
-inline b3Vector3 localGetSupportVertexWithMargin(const float4& supportVec, const struct b3ConvexPolyhedronData* hull,
- const b3AlignedObjectArray<b3Vector3>& verticesA, b3Scalar margin)
-{
- b3Vector3 supVec = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- b3Scalar maxDot = b3Scalar(-B3_LARGE_FLOAT);
-
- // Here we take advantage of dot(a, b*c) = dot(a*b, c). Note: This is true mathematically, but not numerically.
- if (0 < hull->m_numVertices)
- {
- const b3Vector3 scaled = supportVec;
- int index = (int)scaled.maxDot(&verticesA[hull->m_vertexOffset], hull->m_numVertices, maxDot);
- return verticesA[hull->m_vertexOffset + index];
- }
-
- return supVec;
-}
-
-inline b3Vector3 localGetSupportVertexWithoutMargin(const float4& supportVec, const struct b3ConvexPolyhedronData* hull,
- const b3AlignedObjectArray<b3Vector3>& verticesA)
-{
- return localGetSupportVertexWithMargin(supportVec, hull, verticesA, 0.f);
-}
-
-#endif //B3_SUPPORT_MAPPINGS_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.cpp
deleted file mode 100644
index 3908c6de89..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3TriangleCallback.h"
-
-b3TriangleCallback::~b3TriangleCallback()
-{
-}
-
-b3InternalTriangleIndexCallback::~b3InternalTriangleIndexCallback()
-{
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.h
deleted file mode 100644
index a0fd3e7ac7..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleCallback.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_TRIANGLE_CALLBACK_H
-#define B3_TRIANGLE_CALLBACK_H
-
-#include "Bullet3Common/b3Vector3.h"
-
-///The b3TriangleCallback provides a callback for each overlapping triangle when calling processAllTriangles.
-///This callback is called by processAllTriangles for all b3ConcaveShape derived class, such as b3BvhTriangleMeshShape, b3StaticPlaneShape and b3HeightfieldTerrainShape.
-class b3TriangleCallback
-{
-public:
- virtual ~b3TriangleCallback();
- virtual void processTriangle(b3Vector3* triangle, int partId, int triangleIndex) = 0;
-};
-
-class b3InternalTriangleIndexCallback
-{
-public:
- virtual ~b3InternalTriangleIndexCallback();
- virtual void internalProcessTriangleIndex(b3Vector3* triangle, int partId, int triangleIndex) = 0;
-};
-
-#endif //B3_TRIANGLE_CALLBACK_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.cpp
deleted file mode 100644
index 73faadbdd0..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3TriangleIndexVertexArray.h"
-
-b3TriangleIndexVertexArray::b3TriangleIndexVertexArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride, int numVertices, b3Scalar* vertexBase, int vertexStride)
- : m_hasAabb(0)
-{
- b3IndexedMesh mesh;
-
- mesh.m_numTriangles = numTriangles;
- mesh.m_triangleIndexBase = (const unsigned char*)triangleIndexBase;
- mesh.m_triangleIndexStride = triangleIndexStride;
- mesh.m_numVertices = numVertices;
- mesh.m_vertexBase = (const unsigned char*)vertexBase;
- mesh.m_vertexStride = vertexStride;
-
- addIndexedMesh(mesh);
-}
-
-b3TriangleIndexVertexArray::~b3TriangleIndexVertexArray()
-{
-}
-
-void b3TriangleIndexVertexArray::getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart)
-{
- b3Assert(subpart < getNumSubParts());
-
- b3IndexedMesh& mesh = m_indexedMeshes[subpart];
-
- numverts = mesh.m_numVertices;
- (*vertexbase) = (unsigned char*)mesh.m_vertexBase;
-
- type = mesh.m_vertexType;
-
- vertexStride = mesh.m_vertexStride;
-
- numfaces = mesh.m_numTriangles;
-
- (*indexbase) = (unsigned char*)mesh.m_triangleIndexBase;
- indexstride = mesh.m_triangleIndexStride;
- indicestype = mesh.m_indexType;
-}
-
-void b3TriangleIndexVertexArray::getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart) const
-{
- const b3IndexedMesh& mesh = m_indexedMeshes[subpart];
-
- numverts = mesh.m_numVertices;
- (*vertexbase) = (const unsigned char*)mesh.m_vertexBase;
-
- type = mesh.m_vertexType;
-
- vertexStride = mesh.m_vertexStride;
-
- numfaces = mesh.m_numTriangles;
- (*indexbase) = (const unsigned char*)mesh.m_triangleIndexBase;
- indexstride = mesh.m_triangleIndexStride;
- indicestype = mesh.m_indexType;
-}
-
-bool b3TriangleIndexVertexArray::hasPremadeAabb() const
-{
- return (m_hasAabb == 1);
-}
-
-void b3TriangleIndexVertexArray::setPremadeAabb(const b3Vector3& aabbMin, const b3Vector3& aabbMax) const
-{
- m_aabbMin = aabbMin;
- m_aabbMax = aabbMax;
- m_hasAabb = 1; // this is intentionally an int see notes in header
-}
-
-void b3TriangleIndexVertexArray::getPremadeAabb(b3Vector3* aabbMin, b3Vector3* aabbMax) const
-{
- *aabbMin = m_aabbMin;
- *aabbMax = m_aabbMax;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.h
deleted file mode 100644
index 57cbf03dc2..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_TRIANGLE_INDEX_VERTEX_ARRAY_H
-#define B3_TRIANGLE_INDEX_VERTEX_ARRAY_H
-
-#include "b3StridingMeshInterface.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Scalar.h"
-
-///The b3IndexedMesh indexes a single vertex and index array. Multiple b3IndexedMesh objects can be passed into a b3TriangleIndexVertexArray using addIndexedMesh.
-///Instead of the number of indices, we pass the number of triangles.
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3IndexedMesh
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_numTriangles;
- const unsigned char* m_triangleIndexBase;
- // Size in byte of the indices for one triangle (3*sizeof(index_type) if the indices are tightly packed)
- int m_triangleIndexStride;
- int m_numVertices;
- const unsigned char* m_vertexBase;
- // Size of a vertex, in bytes
- int m_vertexStride;
-
- // The index type is set when adding an indexed mesh to the
- // b3TriangleIndexVertexArray, do not set it manually
- PHY_ScalarType m_indexType;
-
- // The vertex type has a default type similar to Bullet's precision mode (float or double)
- // but can be set manually if you for example run Bullet with double precision but have
- // mesh data in single precision..
- PHY_ScalarType m_vertexType;
-
- b3IndexedMesh()
- : m_indexType(PHY_INTEGER),
-#ifdef B3_USE_DOUBLE_PRECISION
- m_vertexType(PHY_DOUBLE)
-#else // B3_USE_DOUBLE_PRECISION
- m_vertexType(PHY_FLOAT)
-#endif // B3_USE_DOUBLE_PRECISION
- {
- }
-};
-
-typedef b3AlignedObjectArray<b3IndexedMesh> IndexedMeshArray;
-
-///The b3TriangleIndexVertexArray allows to access multiple triangle meshes, by indexing into existing triangle/index arrays.
-///Additional meshes can be added using addIndexedMesh
-///No duplcate is made of the vertex/index data, it only indexes into external vertex/index arrays.
-///So keep those arrays around during the lifetime of this b3TriangleIndexVertexArray.
-B3_ATTRIBUTE_ALIGNED16(class)
-b3TriangleIndexVertexArray : public b3StridingMeshInterface
-{
-protected:
- IndexedMeshArray m_indexedMeshes;
- int m_pad[2];
- mutable int m_hasAabb; // using int instead of bool to maintain alignment
- mutable b3Vector3 m_aabbMin;
- mutable b3Vector3 m_aabbMax;
-
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3TriangleIndexVertexArray() : m_hasAabb(0)
- {
- }
-
- virtual ~b3TriangleIndexVertexArray();
-
- //just to be backwards compatible
- b3TriangleIndexVertexArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride, int numVertices, b3Scalar* vertexBase, int vertexStride);
-
- void addIndexedMesh(const b3IndexedMesh& mesh, PHY_ScalarType indexType = PHY_INTEGER)
- {
- m_indexedMeshes.push_back(mesh);
- m_indexedMeshes[m_indexedMeshes.size() - 1].m_indexType = indexType;
- }
-
- virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0);
-
- virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const;
-
- /// unLockVertexBase finishes the access to a subpart of the triangle mesh
- /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished
- virtual void unLockVertexBase(int subpart) { (void)subpart; }
-
- virtual void unLockReadOnlyVertexBase(int subpart) const { (void)subpart; }
-
- /// getNumSubParts returns the number of separate subparts
- /// each subpart has a continuous array of vertices and indices
- virtual int getNumSubParts() const
- {
- return (int)m_indexedMeshes.size();
- }
-
- IndexedMeshArray& getIndexedMeshArray()
- {
- return m_indexedMeshes;
- }
-
- const IndexedMeshArray& getIndexedMeshArray() const
- {
- return m_indexedMeshes;
- }
-
- virtual void preallocateVertices(int numverts) { (void)numverts; }
- virtual void preallocateIndices(int numindices) { (void)numindices; }
-
- virtual bool hasPremadeAabb() const;
- virtual void setPremadeAabb(const b3Vector3& aabbMin, const b3Vector3& aabbMax) const;
- virtual void getPremadeAabb(b3Vector3 * aabbMin, b3Vector3 * aabbMax) const;
-};
-
-#endif //B3_TRIANGLE_INDEX_VERTEX_ARRAY_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VectorFloat4.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VectorFloat4.h
deleted file mode 100644
index 5cc4b5a626..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VectorFloat4.h
+++ /dev/null
@@ -1,10 +0,0 @@
-#ifndef B3_VECTOR_FLOAT4_H
-#define B3_VECTOR_FLOAT4_H
-
-#include "Bullet3Common/b3Transform.h"
-
-//#define cross3(a,b) (a.cross(b))
-#define float4 b3Vector3
-//#define make_float4(x,y,z,w) b3Vector4(x,y,z,w)
-
-#endif //B3_VECTOR_FLOAT4_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.cpp b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.cpp
deleted file mode 100644
index 8b0a834efe..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.cpp
+++ /dev/null
@@ -1,574 +0,0 @@
-
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
- Elsevier CDROM license agreements grants nonexclusive license to use the software
- for any purpose, commercial or non-commercial as long as the following credit is included
- identifying the original source of the software:
-
- Parts of the source are "from the book Real-Time Collision Detection by
- Christer Ericson, published by Morgan Kaufmann Publishers,
- (c) 2005 Elsevier Inc."
-
-*/
-
-#include "b3VoronoiSimplexSolver.h"
-
-#define VERTA 0
-#define VERTB 1
-#define VERTC 2
-#define VERTD 3
-
-#define B3_CATCH_DEGENERATE_TETRAHEDRON 1
-void b3VoronoiSimplexSolver::removeVertex(int index)
-{
- b3Assert(m_numVertices > 0);
- m_numVertices--;
- m_simplexVectorW[index] = m_simplexVectorW[m_numVertices];
- m_simplexPointsP[index] = m_simplexPointsP[m_numVertices];
- m_simplexPointsQ[index] = m_simplexPointsQ[m_numVertices];
-}
-
-void b3VoronoiSimplexSolver::reduceVertices(const b3UsageBitfield& usedVerts)
-{
- if ((numVertices() >= 4) && (!usedVerts.usedVertexD))
- removeVertex(3);
-
- if ((numVertices() >= 3) && (!usedVerts.usedVertexC))
- removeVertex(2);
-
- if ((numVertices() >= 2) && (!usedVerts.usedVertexB))
- removeVertex(1);
-
- if ((numVertices() >= 1) && (!usedVerts.usedVertexA))
- removeVertex(0);
-}
-
-//clear the simplex, remove all the vertices
-void b3VoronoiSimplexSolver::reset()
-{
- m_cachedValidClosest = false;
- m_numVertices = 0;
- m_needsUpdate = true;
- m_lastW = b3MakeVector3(b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT), b3Scalar(B3_LARGE_FLOAT));
- m_cachedBC.reset();
-}
-
-//add a vertex
-void b3VoronoiSimplexSolver::addVertex(const b3Vector3& w, const b3Vector3& p, const b3Vector3& q)
-{
- m_lastW = w;
- m_needsUpdate = true;
-
- m_simplexVectorW[m_numVertices] = w;
- m_simplexPointsP[m_numVertices] = p;
- m_simplexPointsQ[m_numVertices] = q;
-
- m_numVertices++;
-}
-
-bool b3VoronoiSimplexSolver::updateClosestVectorAndPoints()
-{
- if (m_needsUpdate)
- {
- m_cachedBC.reset();
-
- m_needsUpdate = false;
-
- switch (numVertices())
- {
- case 0:
- m_cachedValidClosest = false;
- break;
- case 1:
- {
- m_cachedP1 = m_simplexPointsP[0];
- m_cachedP2 = m_simplexPointsQ[0];
- m_cachedV = m_cachedP1 - m_cachedP2; //== m_simplexVectorW[0]
- m_cachedBC.reset();
- m_cachedBC.setBarycentricCoordinates(b3Scalar(1.), b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- m_cachedValidClosest = m_cachedBC.isValid();
- break;
- };
- case 2:
- {
- //closest point origin from line segment
- const b3Vector3& from = m_simplexVectorW[0];
- const b3Vector3& to = m_simplexVectorW[1];
- b3Vector3 nearest;
-
- b3Vector3 p = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- b3Vector3 diff = p - from;
- b3Vector3 v = to - from;
- b3Scalar t = v.dot(diff);
-
- if (t > 0)
- {
- b3Scalar dotVV = v.dot(v);
- if (t < dotVV)
- {
- t /= dotVV;
- diff -= t * v;
- m_cachedBC.m_usedVertices.usedVertexA = true;
- m_cachedBC.m_usedVertices.usedVertexB = true;
- }
- else
- {
- t = 1;
- diff -= v;
- //reduce to 1 point
- m_cachedBC.m_usedVertices.usedVertexB = true;
- }
- }
- else
- {
- t = 0;
- //reduce to 1 point
- m_cachedBC.m_usedVertices.usedVertexA = true;
- }
- m_cachedBC.setBarycentricCoordinates(1 - t, t);
- nearest = from + t * v;
-
- m_cachedP1 = m_simplexPointsP[0] + t * (m_simplexPointsP[1] - m_simplexPointsP[0]);
- m_cachedP2 = m_simplexPointsQ[0] + t * (m_simplexPointsQ[1] - m_simplexPointsQ[0]);
- m_cachedV = m_cachedP1 - m_cachedP2;
-
- reduceVertices(m_cachedBC.m_usedVertices);
-
- m_cachedValidClosest = m_cachedBC.isValid();
- break;
- }
- case 3:
- {
- //closest point origin from triangle
- b3Vector3 p = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
-
- const b3Vector3& a = m_simplexVectorW[0];
- const b3Vector3& b = m_simplexVectorW[1];
- const b3Vector3& c = m_simplexVectorW[2];
-
- closestPtPointTriangle(p, a, b, c, m_cachedBC);
- m_cachedP1 = m_simplexPointsP[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsP[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsP[2] * m_cachedBC.m_barycentricCoords[2];
-
- m_cachedP2 = m_simplexPointsQ[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsQ[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsQ[2] * m_cachedBC.m_barycentricCoords[2];
-
- m_cachedV = m_cachedP1 - m_cachedP2;
-
- reduceVertices(m_cachedBC.m_usedVertices);
- m_cachedValidClosest = m_cachedBC.isValid();
-
- break;
- }
- case 4:
- {
- b3Vector3 p = b3MakeVector3(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
-
- const b3Vector3& a = m_simplexVectorW[0];
- const b3Vector3& b = m_simplexVectorW[1];
- const b3Vector3& c = m_simplexVectorW[2];
- const b3Vector3& d = m_simplexVectorW[3];
-
- bool hasSeparation = closestPtPointTetrahedron(p, a, b, c, d, m_cachedBC);
-
- if (hasSeparation)
- {
- m_cachedP1 = m_simplexPointsP[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsP[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsP[2] * m_cachedBC.m_barycentricCoords[2] +
- m_simplexPointsP[3] * m_cachedBC.m_barycentricCoords[3];
-
- m_cachedP2 = m_simplexPointsQ[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsQ[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsQ[2] * m_cachedBC.m_barycentricCoords[2] +
- m_simplexPointsQ[3] * m_cachedBC.m_barycentricCoords[3];
-
- m_cachedV = m_cachedP1 - m_cachedP2;
- reduceVertices(m_cachedBC.m_usedVertices);
- }
- else
- {
- // printf("sub distance got penetration\n");
-
- if (m_cachedBC.m_degenerate)
- {
- m_cachedValidClosest = false;
- }
- else
- {
- m_cachedValidClosest = true;
- //degenerate case == false, penetration = true + zero
- m_cachedV.setValue(b3Scalar(0.), b3Scalar(0.), b3Scalar(0.));
- }
- break;
- }
-
- m_cachedValidClosest = m_cachedBC.isValid();
-
- //closest point origin from tetrahedron
- break;
- }
- default:
- {
- m_cachedValidClosest = false;
- }
- };
- }
-
- return m_cachedValidClosest;
-}
-
-//return/calculate the closest vertex
-bool b3VoronoiSimplexSolver::closest(b3Vector3& v)
-{
- bool succes = updateClosestVectorAndPoints();
- v = m_cachedV;
- return succes;
-}
-
-b3Scalar b3VoronoiSimplexSolver::maxVertex()
-{
- int i, numverts = numVertices();
- b3Scalar maxV = b3Scalar(0.);
- for (i = 0; i < numverts; i++)
- {
- b3Scalar curLen2 = m_simplexVectorW[i].length2();
- if (maxV < curLen2)
- maxV = curLen2;
- }
- return maxV;
-}
-
-//return the current simplex
-int b3VoronoiSimplexSolver::getSimplex(b3Vector3* pBuf, b3Vector3* qBuf, b3Vector3* yBuf) const
-{
- int i;
- for (i = 0; i < numVertices(); i++)
- {
- yBuf[i] = m_simplexVectorW[i];
- pBuf[i] = m_simplexPointsP[i];
- qBuf[i] = m_simplexPointsQ[i];
- }
- return numVertices();
-}
-
-bool b3VoronoiSimplexSolver::inSimplex(const b3Vector3& w)
-{
- bool found = false;
- int i, numverts = numVertices();
- //b3Scalar maxV = b3Scalar(0.);
-
- //w is in the current (reduced) simplex
- for (i = 0; i < numverts; i++)
- {
-#ifdef BT_USE_EQUAL_VERTEX_THRESHOLD
- if (m_simplexVectorW[i].distance2(w) <= m_equalVertexThreshold)
-#else
- if (m_simplexVectorW[i] == w)
-#endif
- found = true;
- }
-
- //check in case lastW is already removed
- if (w == m_lastW)
- return true;
-
- return found;
-}
-
-void b3VoronoiSimplexSolver::backup_closest(b3Vector3& v)
-{
- v = m_cachedV;
-}
-
-bool b3VoronoiSimplexSolver::emptySimplex() const
-{
- return (numVertices() == 0);
-}
-
-void b3VoronoiSimplexSolver::compute_points(b3Vector3& p1, b3Vector3& p2)
-{
- updateClosestVectorAndPoints();
- p1 = m_cachedP1;
- p2 = m_cachedP2;
-}
-
-bool b3VoronoiSimplexSolver::closestPtPointTriangle(const b3Vector3& p, const b3Vector3& a, const b3Vector3& b, const b3Vector3& c, b3SubSimplexClosestResult& result)
-{
- result.m_usedVertices.reset();
-
- // Check if P in vertex region outside A
- b3Vector3 ab = b - a;
- b3Vector3 ac = c - a;
- b3Vector3 ap = p - a;
- b3Scalar d1 = ab.dot(ap);
- b3Scalar d2 = ac.dot(ap);
- if (d1 <= b3Scalar(0.0) && d2 <= b3Scalar(0.0))
- {
- result.m_closestPointOnSimplex = a;
- result.m_usedVertices.usedVertexA = true;
- result.setBarycentricCoordinates(1, 0, 0);
- return true; // a; // barycentric coordinates (1,0,0)
- }
-
- // Check if P in vertex region outside B
- b3Vector3 bp = p - b;
- b3Scalar d3 = ab.dot(bp);
- b3Scalar d4 = ac.dot(bp);
- if (d3 >= b3Scalar(0.0) && d4 <= d3)
- {
- result.m_closestPointOnSimplex = b;
- result.m_usedVertices.usedVertexB = true;
- result.setBarycentricCoordinates(0, 1, 0);
-
- return true; // b; // barycentric coordinates (0,1,0)
- }
- // Check if P in edge region of AB, if so return projection of P onto AB
- b3Scalar vc = d1 * d4 - d3 * d2;
- if (vc <= b3Scalar(0.0) && d1 >= b3Scalar(0.0) && d3 <= b3Scalar(0.0))
- {
- b3Scalar v = d1 / (d1 - d3);
- result.m_closestPointOnSimplex = a + v * ab;
- result.m_usedVertices.usedVertexA = true;
- result.m_usedVertices.usedVertexB = true;
- result.setBarycentricCoordinates(1 - v, v, 0);
- return true;
- //return a + v * ab; // barycentric coordinates (1-v,v,0)
- }
-
- // Check if P in vertex region outside C
- b3Vector3 cp = p - c;
- b3Scalar d5 = ab.dot(cp);
- b3Scalar d6 = ac.dot(cp);
- if (d6 >= b3Scalar(0.0) && d5 <= d6)
- {
- result.m_closestPointOnSimplex = c;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(0, 0, 1);
- return true; //c; // barycentric coordinates (0,0,1)
- }
-
- // Check if P in edge region of AC, if so return projection of P onto AC
- b3Scalar vb = d5 * d2 - d1 * d6;
- if (vb <= b3Scalar(0.0) && d2 >= b3Scalar(0.0) && d6 <= b3Scalar(0.0))
- {
- b3Scalar w = d2 / (d2 - d6);
- result.m_closestPointOnSimplex = a + w * ac;
- result.m_usedVertices.usedVertexA = true;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(1 - w, 0, w);
- return true;
- //return a + w * ac; // barycentric coordinates (1-w,0,w)
- }
-
- // Check if P in edge region of BC, if so return projection of P onto BC
- b3Scalar va = d3 * d6 - d5 * d4;
- if (va <= b3Scalar(0.0) && (d4 - d3) >= b3Scalar(0.0) && (d5 - d6) >= b3Scalar(0.0))
- {
- b3Scalar w = (d4 - d3) / ((d4 - d3) + (d5 - d6));
-
- result.m_closestPointOnSimplex = b + w * (c - b);
- result.m_usedVertices.usedVertexB = true;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(0, 1 - w, w);
- return true;
- // return b + w * (c - b); // barycentric coordinates (0,1-w,w)
- }
-
- // P inside face region. Compute Q through its barycentric coordinates (u,v,w)
- b3Scalar denom = b3Scalar(1.0) / (va + vb + vc);
- b3Scalar v = vb * denom;
- b3Scalar w = vc * denom;
-
- result.m_closestPointOnSimplex = a + ab * v + ac * w;
- result.m_usedVertices.usedVertexA = true;
- result.m_usedVertices.usedVertexB = true;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(1 - v - w, v, w);
-
- return true;
- // return a + ab * v + ac * w; // = u*a + v*b + w*c, u = va * denom = b3Scalar(1.0) - v - w
-}
-
-/// Test if point p and d lie on opposite sides of plane through abc
-int b3VoronoiSimplexSolver::pointOutsideOfPlane(const b3Vector3& p, const b3Vector3& a, const b3Vector3& b, const b3Vector3& c, const b3Vector3& d)
-{
- b3Vector3 normal = (b - a).cross(c - a);
-
- b3Scalar signp = (p - a).dot(normal); // [AP AB AC]
- b3Scalar signd = (d - a).dot(normal); // [AD AB AC]
-
-#ifdef B3_CATCH_DEGENERATE_TETRAHEDRON
-#ifdef BT_USE_DOUBLE_PRECISION
- if (signd * signd < (b3Scalar(1e-8) * b3Scalar(1e-8)))
- {
- return -1;
- }
-#else
- if (signd * signd < (b3Scalar(1e-4) * b3Scalar(1e-4)))
- {
- // printf("affine dependent/degenerate\n");//
- return -1;
- }
-#endif
-
-#endif
- // Points on opposite sides if expression signs are opposite
- return signp * signd < b3Scalar(0.);
-}
-
-bool b3VoronoiSimplexSolver::closestPtPointTetrahedron(const b3Vector3& p, const b3Vector3& a, const b3Vector3& b, const b3Vector3& c, const b3Vector3& d, b3SubSimplexClosestResult& finalResult)
-{
- b3SubSimplexClosestResult tempResult;
-
- // Start out assuming point inside all halfspaces, so closest to itself
- finalResult.m_closestPointOnSimplex = p;
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = true;
- finalResult.m_usedVertices.usedVertexB = true;
- finalResult.m_usedVertices.usedVertexC = true;
- finalResult.m_usedVertices.usedVertexD = true;
-
- int pointOutsideABC = pointOutsideOfPlane(p, a, b, c, d);
- int pointOutsideACD = pointOutsideOfPlane(p, a, c, d, b);
- int pointOutsideADB = pointOutsideOfPlane(p, a, d, b, c);
- int pointOutsideBDC = pointOutsideOfPlane(p, b, d, c, a);
-
- if (pointOutsideABC < 0 || pointOutsideACD < 0 || pointOutsideADB < 0 || pointOutsideBDC < 0)
- {
- finalResult.m_degenerate = true;
- return false;
- }
-
- if (!pointOutsideABC && !pointOutsideACD && !pointOutsideADB && !pointOutsideBDC)
- {
- return false;
- }
-
- b3Scalar bestSqDist = FLT_MAX;
- // If point outside face abc then compute closest point on abc
- if (pointOutsideABC)
- {
- closestPtPointTriangle(p, a, b, c, tempResult);
- b3Vector3 q = tempResult.m_closestPointOnSimplex;
-
- b3Scalar sqDist = (q - p).dot(q - p);
- // Update best closest point if (squared) distance is less than current best
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- //convert result bitmask!
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
- finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexB;
- finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexC;
- finalResult.setBarycentricCoordinates(
- tempResult.m_barycentricCoords[VERTA],
- tempResult.m_barycentricCoords[VERTB],
- tempResult.m_barycentricCoords[VERTC],
- 0);
- }
- }
-
- // Repeat test for face acd
- if (pointOutsideACD)
- {
- closestPtPointTriangle(p, a, c, d, tempResult);
- b3Vector3 q = tempResult.m_closestPointOnSimplex;
- //convert result bitmask!
-
- b3Scalar sqDist = (q - p).dot(q - p);
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
-
- finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexB;
- finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexC;
- finalResult.setBarycentricCoordinates(
- tempResult.m_barycentricCoords[VERTA],
- 0,
- tempResult.m_barycentricCoords[VERTB],
- tempResult.m_barycentricCoords[VERTC]);
- }
- }
- // Repeat test for face adb
-
- if (pointOutsideADB)
- {
- closestPtPointTriangle(p, a, d, b, tempResult);
- b3Vector3 q = tempResult.m_closestPointOnSimplex;
- //convert result bitmask!
-
- b3Scalar sqDist = (q - p).dot(q - p);
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
- finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexC;
-
- finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
- finalResult.setBarycentricCoordinates(
- tempResult.m_barycentricCoords[VERTA],
- tempResult.m_barycentricCoords[VERTC],
- 0,
- tempResult.m_barycentricCoords[VERTB]);
- }
- }
- // Repeat test for face bdc
-
- if (pointOutsideBDC)
- {
- closestPtPointTriangle(p, b, d, c, tempResult);
- b3Vector3 q = tempResult.m_closestPointOnSimplex;
- //convert result bitmask!
- b3Scalar sqDist = (q - p).dot(q - p);
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- finalResult.m_usedVertices.reset();
- //
- finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexA;
- finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexC;
- finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
-
- finalResult.setBarycentricCoordinates(
- 0,
- tempResult.m_barycentricCoords[VERTA],
- tempResult.m_barycentricCoords[VERTC],
- tempResult.m_barycentricCoords[VERTB]);
- }
- }
-
- //help! we ended up full !
-
- if (finalResult.m_usedVertices.usedVertexA &&
- finalResult.m_usedVertices.usedVertexB &&
- finalResult.m_usedVertices.usedVertexC &&
- finalResult.m_usedVertices.usedVertexD)
- {
- return true;
- }
-
- return true;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.h
deleted file mode 100644
index b40b169978..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/b3VoronoiSimplexSolver.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_VORONOI_SIMPLEX_SOLVER_H
-#define B3_VORONOI_SIMPLEX_SOLVER_H
-
-#include "Bullet3Common/b3Vector3.h"
-
-#define VORONOI_SIMPLEX_MAX_VERTS 5
-
-///disable next define, or use defaultCollisionConfiguration->getSimplexSolver()->setEqualVertexThreshold(0.f) to disable/configure
-//#define BT_USE_EQUAL_VERTEX_THRESHOLD
-#define VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD 0.0001f
-
-struct b3UsageBitfield
-{
- b3UsageBitfield()
- {
- reset();
- }
-
- void reset()
- {
- usedVertexA = false;
- usedVertexB = false;
- usedVertexC = false;
- usedVertexD = false;
- }
- unsigned short usedVertexA : 1;
- unsigned short usedVertexB : 1;
- unsigned short usedVertexC : 1;
- unsigned short usedVertexD : 1;
- unsigned short unused1 : 1;
- unsigned short unused2 : 1;
- unsigned short unused3 : 1;
- unsigned short unused4 : 1;
-};
-
-struct b3SubSimplexClosestResult
-{
- b3Vector3 m_closestPointOnSimplex;
- //MASK for m_usedVertices
- //stores the simplex vertex-usage, using the MASK,
- // if m_usedVertices & MASK then the related vertex is used
- b3UsageBitfield m_usedVertices;
- b3Scalar m_barycentricCoords[4];
- bool m_degenerate;
-
- void reset()
- {
- m_degenerate = false;
- setBarycentricCoordinates();
- m_usedVertices.reset();
- }
- bool isValid()
- {
- bool valid = (m_barycentricCoords[0] >= b3Scalar(0.)) &&
- (m_barycentricCoords[1] >= b3Scalar(0.)) &&
- (m_barycentricCoords[2] >= b3Scalar(0.)) &&
- (m_barycentricCoords[3] >= b3Scalar(0.));
-
- return valid;
- }
- void setBarycentricCoordinates(b3Scalar a = b3Scalar(0.), b3Scalar b = b3Scalar(0.), b3Scalar c = b3Scalar(0.), b3Scalar d = b3Scalar(0.))
- {
- m_barycentricCoords[0] = a;
- m_barycentricCoords[1] = b;
- m_barycentricCoords[2] = c;
- m_barycentricCoords[3] = d;
- }
-};
-
-/// b3VoronoiSimplexSolver is an implementation of the closest point distance algorithm from a 1-4 points simplex to the origin.
-/// Can be used with GJK, as an alternative to Johnson distance algorithm.
-
-B3_ATTRIBUTE_ALIGNED16(class)
-b3VoronoiSimplexSolver
-{
-public:
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_numVertices;
-
- b3Vector3 m_simplexVectorW[VORONOI_SIMPLEX_MAX_VERTS];
- b3Vector3 m_simplexPointsP[VORONOI_SIMPLEX_MAX_VERTS];
- b3Vector3 m_simplexPointsQ[VORONOI_SIMPLEX_MAX_VERTS];
-
- b3Vector3 m_cachedP1;
- b3Vector3 m_cachedP2;
- b3Vector3 m_cachedV;
- b3Vector3 m_lastW;
-
- b3Scalar m_equalVertexThreshold;
- bool m_cachedValidClosest;
-
- b3SubSimplexClosestResult m_cachedBC;
-
- bool m_needsUpdate;
-
- void removeVertex(int index);
- void reduceVertices(const b3UsageBitfield& usedVerts);
- bool updateClosestVectorAndPoints();
-
- bool closestPtPointTetrahedron(const b3Vector3& p, const b3Vector3& a, const b3Vector3& b, const b3Vector3& c, const b3Vector3& d, b3SubSimplexClosestResult& finalResult);
- int pointOutsideOfPlane(const b3Vector3& p, const b3Vector3& a, const b3Vector3& b, const b3Vector3& c, const b3Vector3& d);
- bool closestPtPointTriangle(const b3Vector3& p, const b3Vector3& a, const b3Vector3& b, const b3Vector3& c, b3SubSimplexClosestResult& result);
-
-public:
- b3VoronoiSimplexSolver()
- : m_equalVertexThreshold(VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD)
- {
- }
- void reset();
-
- void addVertex(const b3Vector3& w, const b3Vector3& p, const b3Vector3& q);
-
- void setEqualVertexThreshold(b3Scalar threshold)
- {
- m_equalVertexThreshold = threshold;
- }
-
- b3Scalar getEqualVertexThreshold() const
- {
- return m_equalVertexThreshold;
- }
-
- bool closest(b3Vector3 & v);
-
- b3Scalar maxVertex();
-
- bool fullSimplex() const
- {
- return (m_numVertices == 4);
- }
-
- int getSimplex(b3Vector3 * pBuf, b3Vector3 * qBuf, b3Vector3 * yBuf) const;
-
- bool inSimplex(const b3Vector3& w);
-
- void backup_closest(b3Vector3 & v);
-
- bool emptySimplex() const;
-
- void compute_points(b3Vector3 & p1, b3Vector3 & p2);
-
- int numVertices() const
- {
- return m_numVertices;
- }
-};
-
-#endif //B3_VORONOI_SIMPLEX_SOLVER_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.cl b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.cl
deleted file mode 100644
index faa413441c..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.cl
+++ /dev/null
@@ -1,283 +0,0 @@
-//keep this enum in sync with the CPU version (in btCollidable.h)
-//written by Erwin Coumans
-
-#define SHAPE_CONVEX_HULL 3
-#define SHAPE_CONCAVE_TRIMESH 5
-#define TRIANGLE_NUM_CONVEX_FACES 5
-#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6
-#define SHAPE_SPHERE 7
-
-typedef unsigned int u32;
-
-#define MAX_NUM_PARTS_IN_BITS 10
-
-///btQuantizedBvhNode is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-typedef struct
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes
- int m_escapeIndexOrTriangleIndex;
-} btQuantizedBvhNode;
-
-typedef struct
-{
- float4 m_aabbMin;
- float4 m_aabbMax;
- float4 m_quantization;
- int m_numNodes;
- int m_numSubTrees;
- int m_nodeOffset;
- int m_subTreeOffset;
-
-} b3BvhInfo;
-
-int getTriangleIndex(const btQuantizedBvhNode* rootNode)
-{
- unsigned int x=0;
- unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (rootNode->m_escapeIndexOrTriangleIndex&~(y));
-}
-
-int isLeaf(const btQuantizedBvhNode* rootNode)
-{
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;
-}
-
-int getEscapeIndex(const btQuantizedBvhNode* rootNode)
-{
- return -rootNode->m_escapeIndexOrTriangleIndex;
-}
-
-typedef struct
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes, points to the root of the subtree
- int m_rootNodeIndex;
- //4 bytes
- int m_subtreeSize;
- int m_padding[3];
-} btBvhSubtreeInfo;
-
-///keep this in sync with btCollidable.h
-typedef struct
-{
- int m_numChildShapes;
- int blaat2;
- int m_shapeType;
- int m_shapeIndex;
-
-} btCollidableGpu;
-
-typedef struct
-{
- float4 m_childPosition;
- float4 m_childOrientation;
- int m_shapeIndex;
- int m_unused0;
- int m_unused1;
- int m_unused2;
-} btGpuChildShape;
-
-
-typedef struct
-{
- float4 m_pos;
- float4 m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_collidableIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} BodyData;
-
-typedef struct
-{
- union
- {
- float4 m_min;
- float m_minElems[4];
- int m_minIndices[4];
- };
- union
- {
- float4 m_max;
- float m_maxElems[4];
- int m_maxIndices[4];
- };
-} btAabbCL;
-
-
-int testQuantizedAabbAgainstQuantizedAabb(
- const unsigned short int* aabbMin1,
- const unsigned short int* aabbMax1,
- const unsigned short int* aabbMin2,
- const unsigned short int* aabbMax2)
-{
- //int overlap = 1;
- if (aabbMin1[0] > aabbMax2[0])
- return 0;
- if (aabbMax1[0] < aabbMin2[0])
- return 0;
- if (aabbMin1[1] > aabbMax2[1])
- return 0;
- if (aabbMax1[1] < aabbMin2[1])
- return 0;
- if (aabbMin1[2] > aabbMax2[2])
- return 0;
- if (aabbMax1[2] < aabbMin2[2])
- return 0;
- return 1;
- //overlap = ((aabbMin1[0] > aabbMax2[0]) || (aabbMax1[0] < aabbMin2[0])) ? 0 : overlap;
- //overlap = ((aabbMin1[2] > aabbMax2[2]) || (aabbMax1[2] < aabbMin2[2])) ? 0 : overlap;
- //overlap = ((aabbMin1[1] > aabbMax2[1]) || (aabbMax1[1] < aabbMin2[1])) ? 0 : overlap;
- //return overlap;
-}
-
-
-void quantizeWithClamp(unsigned short* out, float4 point2,int isMax, float4 bvhAabbMin, float4 bvhAabbMax, float4 bvhQuantization)
-{
- float4 clampedPoint = max(point2,bvhAabbMin);
- clampedPoint = min (clampedPoint, bvhAabbMax);
-
- float4 v = (clampedPoint - bvhAabbMin) * bvhQuantization;
- if (isMax)
- {
- out[0] = (unsigned short) (((unsigned short)(v.x+1.f) | 1));
- out[1] = (unsigned short) (((unsigned short)(v.y+1.f) | 1));
- out[2] = (unsigned short) (((unsigned short)(v.z+1.f) | 1));
- } else
- {
- out[0] = (unsigned short) (((unsigned short)(v.x) & 0xfffe));
- out[1] = (unsigned short) (((unsigned short)(v.y) & 0xfffe));
- out[2] = (unsigned short) (((unsigned short)(v.z) & 0xfffe));
- }
-
-}
-
-
-// work-in-progress
-__kernel void bvhTraversalKernel( __global const int4* pairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global btAabbCL* aabbs,
- __global int4* concavePairsOut,
- __global volatile int* numConcavePairsOut,
- __global const btBvhSubtreeInfo* subtreeHeadersRoot,
- __global const btQuantizedBvhNode* quantizedNodesRoot,
- __global const b3BvhInfo* bvhInfos,
- int numPairs,
- int maxNumConcavePairsCapacity)
-{
- int id = get_global_id(0);
- if (id>=numPairs)
- return;
-
- int bodyIndexA = pairs[id].x;
- int bodyIndexB = pairs[id].y;
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))
- {
- return;
- }
-
- if (collidables[collidableIndexA].m_shapeType!=SHAPE_CONCAVE_TRIMESH)
- return;
-
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
-
- if (shapeTypeB!=SHAPE_CONVEX_HULL &&
- shapeTypeB!=SHAPE_SPHERE &&
- shapeTypeB!=SHAPE_COMPOUND_OF_CONVEX_HULLS
- )
- return;
-
- b3BvhInfo bvhInfo = bvhInfos[collidables[collidableIndexA].m_numChildShapes];
-
- float4 bvhAabbMin = bvhInfo.m_aabbMin;
- float4 bvhAabbMax = bvhInfo.m_aabbMax;
- float4 bvhQuantization = bvhInfo.m_quantization;
- int numSubtreeHeaders = bvhInfo.m_numSubTrees;
- __global const btBvhSubtreeInfo* subtreeHeaders = &subtreeHeadersRoot[bvhInfo.m_subTreeOffset];
- __global const btQuantizedBvhNode* quantizedNodes = &quantizedNodesRoot[bvhInfo.m_nodeOffset];
-
-
- unsigned short int quantizedQueryAabbMin[3];
- unsigned short int quantizedQueryAabbMax[3];
- quantizeWithClamp(quantizedQueryAabbMin,aabbs[bodyIndexB].m_min,false,bvhAabbMin, bvhAabbMax,bvhQuantization);
- quantizeWithClamp(quantizedQueryAabbMax,aabbs[bodyIndexB].m_max,true ,bvhAabbMin, bvhAabbMax,bvhQuantization);
-
- for (int i=0;i<numSubtreeHeaders;i++)
- {
- btBvhSubtreeInfo subtree = subtreeHeaders[i];
-
- int overlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin,quantizedQueryAabbMax,subtree.m_quantizedAabbMin,subtree.m_quantizedAabbMax);
- if (overlap != 0)
- {
- int startNodeIndex = subtree.m_rootNodeIndex;
- int endNodeIndex = subtree.m_rootNodeIndex+subtree.m_subtreeSize;
- int curIndex = startNodeIndex;
- int escapeIndex;
- int isLeafNode;
- int aabbOverlap;
- while (curIndex < endNodeIndex)
- {
- btQuantizedBvhNode rootNode = quantizedNodes[curIndex];
- aabbOverlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin,quantizedQueryAabbMax,rootNode.m_quantizedAabbMin,rootNode.m_quantizedAabbMax);
- isLeafNode = isLeaf(&rootNode);
- if (aabbOverlap)
- {
- if (isLeafNode)
- {
- int triangleIndex = getTriangleIndex(&rootNode);
- if (shapeTypeB==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- int pairIdx = atomic_add(numConcavePairsOut,numChildrenB);
- for (int b=0;b<numChildrenB;b++)
- {
- if ((pairIdx+b)<maxNumConcavePairsCapacity)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+b;
- int4 newPair = (int4)(bodyIndexA,bodyIndexB,triangleIndex,childShapeIndexB);
- concavePairsOut[pairIdx+b] = newPair;
- }
- }
- } else
- {
- int pairIdx = atomic_inc(numConcavePairsOut);
- if (pairIdx<maxNumConcavePairsCapacity)
- {
- int4 newPair = (int4)(bodyIndexA,bodyIndexB,triangleIndex,0);
- concavePairsOut[pairIdx] = newPair;
- }
- }
- }
- curIndex++;
- } else
- {
- if (isLeafNode)
- {
- curIndex++;
- } else
- {
- escapeIndex = getEscapeIndex(&rootNode);
- curIndex += escapeIndex;
- }
- }
- }
- }
- }
-
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.h
deleted file mode 100644
index f1df8a6970..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/bvhTraversal.h
+++ /dev/null
@@ -1,257 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* bvhTraversalKernelCL =
- "//keep this enum in sync with the CPU version (in btCollidable.h)\n"
- "//written by Erwin Coumans\n"
- "#define SHAPE_CONVEX_HULL 3\n"
- "#define SHAPE_CONCAVE_TRIMESH 5\n"
- "#define TRIANGLE_NUM_CONVEX_FACES 5\n"
- "#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6\n"
- "#define SHAPE_SPHERE 7\n"
- "typedef unsigned int u32;\n"
- "#define MAX_NUM_PARTS_IN_BITS 10\n"
- "///btQuantizedBvhNode is a compressed aabb node, 16 bytes.\n"
- "///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).\n"
- "typedef struct\n"
- "{\n"
- " //12 bytes\n"
- " unsigned short int m_quantizedAabbMin[3];\n"
- " unsigned short int m_quantizedAabbMax[3];\n"
- " //4 bytes\n"
- " int m_escapeIndexOrTriangleIndex;\n"
- "} btQuantizedBvhNode;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_aabbMin;\n"
- " float4 m_aabbMax;\n"
- " float4 m_quantization;\n"
- " int m_numNodes;\n"
- " int m_numSubTrees;\n"
- " int m_nodeOffset;\n"
- " int m_subTreeOffset;\n"
- "} b3BvhInfo;\n"
- "int getTriangleIndex(const btQuantizedBvhNode* rootNode)\n"
- "{\n"
- " unsigned int x=0;\n"
- " unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);\n"
- " // Get only the lower bits where the triangle index is stored\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex&~(y));\n"
- "}\n"
- "int isLeaf(const btQuantizedBvhNode* rootNode)\n"
- "{\n"
- " //skipindex is negative (internal node), triangleindex >=0 (leafnode)\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;\n"
- "}\n"
- " \n"
- "int getEscapeIndex(const btQuantizedBvhNode* rootNode)\n"
- "{\n"
- " return -rootNode->m_escapeIndexOrTriangleIndex;\n"
- "}\n"
- "typedef struct\n"
- "{\n"
- " //12 bytes\n"
- " unsigned short int m_quantizedAabbMin[3];\n"
- " unsigned short int m_quantizedAabbMax[3];\n"
- " //4 bytes, points to the root of the subtree\n"
- " int m_rootNodeIndex;\n"
- " //4 bytes\n"
- " int m_subtreeSize;\n"
- " int m_padding[3];\n"
- "} btBvhSubtreeInfo;\n"
- "///keep this in sync with btCollidable.h\n"
- "typedef struct\n"
- "{\n"
- " int m_numChildShapes;\n"
- " int blaat2;\n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- " \n"
- "} btCollidableGpu;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_childPosition;\n"
- " float4 m_childOrientation;\n"
- " int m_shapeIndex;\n"
- " int m_unused0;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "} btGpuChildShape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " float4 m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} BodyData;\n"
- "typedef struct \n"
- "{\n"
- " union\n"
- " {\n"
- " float4 m_min;\n"
- " float m_minElems[4];\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float4 m_max;\n"
- " float m_maxElems[4];\n"
- " int m_maxIndices[4];\n"
- " };\n"
- "} btAabbCL;\n"
- "int testQuantizedAabbAgainstQuantizedAabb(\n"
- " const unsigned short int* aabbMin1,\n"
- " const unsigned short int* aabbMax1,\n"
- " const unsigned short int* aabbMin2,\n"
- " const unsigned short int* aabbMax2)\n"
- "{\n"
- " //int overlap = 1;\n"
- " if (aabbMin1[0] > aabbMax2[0])\n"
- " return 0;\n"
- " if (aabbMax1[0] < aabbMin2[0])\n"
- " return 0;\n"
- " if (aabbMin1[1] > aabbMax2[1])\n"
- " return 0;\n"
- " if (aabbMax1[1] < aabbMin2[1])\n"
- " return 0;\n"
- " if (aabbMin1[2] > aabbMax2[2])\n"
- " return 0;\n"
- " if (aabbMax1[2] < aabbMin2[2])\n"
- " return 0;\n"
- " return 1;\n"
- " //overlap = ((aabbMin1[0] > aabbMax2[0]) || (aabbMax1[0] < aabbMin2[0])) ? 0 : overlap;\n"
- " //overlap = ((aabbMin1[2] > aabbMax2[2]) || (aabbMax1[2] < aabbMin2[2])) ? 0 : overlap;\n"
- " //overlap = ((aabbMin1[1] > aabbMax2[1]) || (aabbMax1[1] < aabbMin2[1])) ? 0 : overlap;\n"
- " //return overlap;\n"
- "}\n"
- "void quantizeWithClamp(unsigned short* out, float4 point2,int isMax, float4 bvhAabbMin, float4 bvhAabbMax, float4 bvhQuantization)\n"
- "{\n"
- " float4 clampedPoint = max(point2,bvhAabbMin);\n"
- " clampedPoint = min (clampedPoint, bvhAabbMax);\n"
- " float4 v = (clampedPoint - bvhAabbMin) * bvhQuantization;\n"
- " if (isMax)\n"
- " {\n"
- " out[0] = (unsigned short) (((unsigned short)(v.x+1.f) | 1));\n"
- " out[1] = (unsigned short) (((unsigned short)(v.y+1.f) | 1));\n"
- " out[2] = (unsigned short) (((unsigned short)(v.z+1.f) | 1));\n"
- " } else\n"
- " {\n"
- " out[0] = (unsigned short) (((unsigned short)(v.x) & 0xfffe));\n"
- " out[1] = (unsigned short) (((unsigned short)(v.y) & 0xfffe));\n"
- " out[2] = (unsigned short) (((unsigned short)(v.z) & 0xfffe));\n"
- " }\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void bvhTraversalKernel( __global const int4* pairs, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global btAabbCL* aabbs,\n"
- " __global int4* concavePairsOut,\n"
- " __global volatile int* numConcavePairsOut,\n"
- " __global const btBvhSubtreeInfo* subtreeHeadersRoot,\n"
- " __global const btQuantizedBvhNode* quantizedNodesRoot,\n"
- " __global const b3BvhInfo* bvhInfos,\n"
- " int numPairs,\n"
- " int maxNumConcavePairsCapacity)\n"
- "{\n"
- " int id = get_global_id(0);\n"
- " if (id>=numPairs)\n"
- " return;\n"
- " \n"
- " int bodyIndexA = pairs[id].x;\n"
- " int bodyIndexB = pairs[id].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " //once the broadphase avoids static-static pairs, we can remove this test\n"
- " if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))\n"
- " {\n"
- " return;\n"
- " }\n"
- " \n"
- " if (collidables[collidableIndexA].m_shapeType!=SHAPE_CONCAVE_TRIMESH)\n"
- " return;\n"
- " int shapeTypeB = collidables[collidableIndexB].m_shapeType;\n"
- " \n"
- " if (shapeTypeB!=SHAPE_CONVEX_HULL &&\n"
- " shapeTypeB!=SHAPE_SPHERE &&\n"
- " shapeTypeB!=SHAPE_COMPOUND_OF_CONVEX_HULLS\n"
- " )\n"
- " return;\n"
- " b3BvhInfo bvhInfo = bvhInfos[collidables[collidableIndexA].m_numChildShapes];\n"
- " float4 bvhAabbMin = bvhInfo.m_aabbMin;\n"
- " float4 bvhAabbMax = bvhInfo.m_aabbMax;\n"
- " float4 bvhQuantization = bvhInfo.m_quantization;\n"
- " int numSubtreeHeaders = bvhInfo.m_numSubTrees;\n"
- " __global const btBvhSubtreeInfo* subtreeHeaders = &subtreeHeadersRoot[bvhInfo.m_subTreeOffset];\n"
- " __global const btQuantizedBvhNode* quantizedNodes = &quantizedNodesRoot[bvhInfo.m_nodeOffset];\n"
- " \n"
- " unsigned short int quantizedQueryAabbMin[3];\n"
- " unsigned short int quantizedQueryAabbMax[3];\n"
- " quantizeWithClamp(quantizedQueryAabbMin,aabbs[bodyIndexB].m_min,false,bvhAabbMin, bvhAabbMax,bvhQuantization);\n"
- " quantizeWithClamp(quantizedQueryAabbMax,aabbs[bodyIndexB].m_max,true ,bvhAabbMin, bvhAabbMax,bvhQuantization);\n"
- " \n"
- " for (int i=0;i<numSubtreeHeaders;i++)\n"
- " {\n"
- " btBvhSubtreeInfo subtree = subtreeHeaders[i];\n"
- " \n"
- " int overlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin,quantizedQueryAabbMax,subtree.m_quantizedAabbMin,subtree.m_quantizedAabbMax);\n"
- " if (overlap != 0)\n"
- " {\n"
- " int startNodeIndex = subtree.m_rootNodeIndex;\n"
- " int endNodeIndex = subtree.m_rootNodeIndex+subtree.m_subtreeSize;\n"
- " int curIndex = startNodeIndex;\n"
- " int escapeIndex;\n"
- " int isLeafNode;\n"
- " int aabbOverlap;\n"
- " while (curIndex < endNodeIndex)\n"
- " {\n"
- " btQuantizedBvhNode rootNode = quantizedNodes[curIndex];\n"
- " aabbOverlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin,quantizedQueryAabbMax,rootNode.m_quantizedAabbMin,rootNode.m_quantizedAabbMax);\n"
- " isLeafNode = isLeaf(&rootNode);\n"
- " if (aabbOverlap)\n"
- " {\n"
- " if (isLeafNode)\n"
- " {\n"
- " int triangleIndex = getTriangleIndex(&rootNode);\n"
- " if (shapeTypeB==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " int numChildrenB = collidables[collidableIndexB].m_numChildShapes;\n"
- " int pairIdx = atomic_add(numConcavePairsOut,numChildrenB);\n"
- " for (int b=0;b<numChildrenB;b++)\n"
- " {\n"
- " if ((pairIdx+b)<maxNumConcavePairsCapacity)\n"
- " {\n"
- " int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+b;\n"
- " int4 newPair = (int4)(bodyIndexA,bodyIndexB,triangleIndex,childShapeIndexB);\n"
- " concavePairsOut[pairIdx+b] = newPair;\n"
- " }\n"
- " }\n"
- " } else\n"
- " {\n"
- " int pairIdx = atomic_inc(numConcavePairsOut);\n"
- " if (pairIdx<maxNumConcavePairsCapacity)\n"
- " {\n"
- " int4 newPair = (int4)(bodyIndexA,bodyIndexB,triangleIndex,0);\n"
- " concavePairsOut[pairIdx] = newPair;\n"
- " }\n"
- " }\n"
- " } \n"
- " curIndex++;\n"
- " } else\n"
- " {\n"
- " if (isLeafNode)\n"
- " {\n"
- " curIndex++;\n"
- " } else\n"
- " {\n"
- " escapeIndex = getEscapeIndex(&rootNode);\n"
- " curIndex += escapeIndex;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mpr.cl b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mpr.cl
deleted file mode 100644
index e754f4e1da..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mpr.cl
+++ /dev/null
@@ -1,311 +0,0 @@
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3MprPenetration.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#define AppendInc(x, out) out = atomic_inc(x)
-#define GET_NPOINTS(x) (x).m_worldNormalOnB.w
-#ifdef cl_ext_atomic_counters_32
- #pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
- #define counter32_t volatile __global int*
-#endif
-
-
-__kernel void mprPenetrationKernel( __global int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const b3ConvexPolyhedronData_t* convexShapes,
- __global const float4* vertices,
- __global float4* separatingNormals,
- __global int* hasSeparatingAxis,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int contactCapacity,
- int numPairs)
-{
- int i = get_global_id(0);
- int pairIndex = i;
- if (i<numPairs)
- {
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))
- {
- return;
- }
-
-
- if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONVEX_HULL) ||(collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL))
- {
- return;
- }
-
- float depthOut;
- b3Float4 dirOut;
- b3Float4 posOut;
-
-
- int res = b3MprPenetration(pairIndex, bodyIndexA, bodyIndexB,rigidBodies,convexShapes,collidables,vertices,separatingNormals,hasSeparatingAxis,&depthOut, &dirOut, &posOut);
-
-
-
-
-
- if (res==0)
- {
- //add a contact
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
- if (dstIdx<contactCapacity)
- {
- pairs[pairIndex].z = dstIdx;
- __global struct b3Contact4Data* c = globalContactsOut + dstIdx;
- c->m_worldNormalOnB = -dirOut;//normal;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0 ? -bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0 ? -bodyB:bodyB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
- //for (int i=0;i<nContacts;i++)
- posOut.w = -depthOut;
- c->m_worldPosB[0] = posOut;//localPoints[contactIdx[i]];
- GET_NPOINTS(*c) = 1;//nContacts;
- }
- }
-
- }
-}
-
-typedef float4 Quaternion;
-#define make_float4 (float4)
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)
-{
- return qtRotate( *orientation, *p ) + (*translation);
-}
-
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-
-inline void project(__global const b3ConvexPolyhedronData_t* hull, const float4 pos, const float4 orn,
-const float4* dir, __global const float4* vertices, float* min, float* max)
-{
- min[0] = FLT_MAX;
- max[0] = -FLT_MAX;
- int numVerts = hull->m_numVertices;
-
- const float4 localDir = qtInvRotate(orn,*dir);
- float offset = dot(pos,*dir);
- for(int i=0;i<numVerts;i++)
- {
- float dp = dot(vertices[hull->m_vertexOffset+i],localDir);
- if(dp < min[0])
- min[0] = dp;
- if(dp > max[0])
- max[0] = dp;
- }
- if(min[0]>max[0])
- {
- float tmp = min[0];
- min[0] = max[0];
- max[0] = tmp;
- }
- min[0] += offset;
- max[0] += offset;
-}
-
-
-bool findSeparatingAxisUnitSphere( __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- __global const float4* vertices,
- __global const float4* unitSphereDirections,
- int numUnitSphereDirections,
- float4* sep,
- float* dmin)
-{
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test unit sphere directions
- for (int i=0;i<numUnitSphereDirections;i++)
- {
-
- float4 crossje;
- crossje = unitSphereDirections[i];
-
- if (dot3F4(DeltaC2,crossje)>0)
- crossje *= -1.f;
- {
- float dist;
- bool result = true;
- float Min0,Max0;
- float Min1,Max1;
- project(hullA,posA,ornA,&crossje,vertices, &Min0, &Max0);
- project(hullB,posB,ornB,&crossje,vertices, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0<d1 ? d0:d1;
- result = true;
-
- if(dist<*dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
-
-
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-
-__kernel void findSeparatingAxisUnitSphereKernel( __global const int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const b3ConvexPolyhedronData_t* convexShapes,
- __global const float4* vertices,
- __global const float4* unitSphereDirections,
- __global float4* separatingNormals,
- __global int* hasSeparatingAxis,
- __global float* dmins,
- int numUnitSphereDirections,
- int numPairs
- )
-{
-
- int i = get_global_id(0);
-
- if (i<numPairs)
- {
-
- if (hasSeparatingAxis[i])
- {
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
-
- float dmin = dmins[i];
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- float4 sepNormal = separatingNormals[i];
-
- int numEdgeEdgeDirections = convexShapes[shapeIndexA].m_numUniqueEdges*convexShapes[shapeIndexB].m_numUniqueEdges;
- if (numEdgeEdgeDirections>numUnitSphereDirections)
- {
- bool sepEE = findSeparatingAxisUnitSphere( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,
- posB,ornB,
- DeltaC2,
- vertices,unitSphereDirections,numUnitSphereDirections,&sepNormal,&dmin);
- if (!sepEE)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- hasSeparatingAxis[i] = 1;
- separatingNormals[i] = sepNormal;
- }
- }
- } //if (hasSeparatingAxis[i])
- }//(i<numPairs)
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mprKernels.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mprKernels.h
deleted file mode 100644
index 74959a931c..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/mprKernels.h
+++ /dev/null
@@ -1,1445 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* mprKernelsCL =
- "/***\n"
- " * ---------------------------------\n"
- " * Copyright (c)2012 Daniel Fiser <danfis@danfis.cz>\n"
- " *\n"
- " * This file was ported from mpr.c file, part of libccd.\n"
- " * The Minkoski Portal Refinement implementation was ported \n"
- " * to OpenCL by Erwin Coumans for the Bullet 3 Physics library.\n"
- " * at http://github.com/erwincoumans/bullet3\n"
- " *\n"
- " * Distributed under the OSI-approved BSD License (the \"License\");\n"
- " * see <http://www.opensource.org/licenses/bsd-license.php>.\n"
- " * This software is distributed WITHOUT ANY WARRANTY; without even the\n"
- " * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.\n"
- " * See the License for more information.\n"
- " */\n"
- "#ifndef B3_MPR_PENETRATION_H\n"
- "#define B3_MPR_PENETRATION_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_RIGIDBODY_DATA_H\n"
- "#define B3_RIGIDBODY_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3RigidBodyData b3RigidBodyData_t;\n"
- "struct b3RigidBodyData\n"
- "{\n"
- " b3Float4 m_pos;\n"
- " b3Quat m_quat;\n"
- " b3Float4 m_linVel;\n"
- " b3Float4 m_angVel;\n"
- " int m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "};\n"
- "typedef struct b3InertiaData b3InertiaData_t;\n"
- "struct b3InertiaData\n"
- "{\n"
- " b3Mat3x3 m_invInertiaWorld;\n"
- " b3Mat3x3 m_initInvInertia;\n"
- "};\n"
- "#endif //B3_RIGIDBODY_DATA_H\n"
- " \n"
- "#ifndef B3_CONVEX_POLYHEDRON_DATA_H\n"
- "#define B3_CONVEX_POLYHEDRON_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "typedef struct b3GpuFace b3GpuFace_t;\n"
- "struct b3GpuFace\n"
- "{\n"
- " b3Float4 m_plane;\n"
- " int m_indexOffset;\n"
- " int m_numIndices;\n"
- " int m_unusedPadding1;\n"
- " int m_unusedPadding2;\n"
- "};\n"
- "typedef struct b3ConvexPolyhedronData b3ConvexPolyhedronData_t;\n"
- "struct b3ConvexPolyhedronData\n"
- "{\n"
- " b3Float4 m_localCenter;\n"
- " b3Float4 m_extents;\n"
- " b3Float4 mC;\n"
- " b3Float4 mE;\n"
- " float m_radius;\n"
- " int m_faceOffset;\n"
- " int m_numFaces;\n"
- " int m_numVertices;\n"
- " int m_vertexOffset;\n"
- " int m_uniqueEdgesOffset;\n"
- " int m_numUniqueEdges;\n"
- " int m_unused;\n"
- "};\n"
- "#endif //B3_CONVEX_POLYHEDRON_DATA_H\n"
- "#ifndef B3_COLLIDABLE_H\n"
- "#define B3_COLLIDABLE_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "enum b3ShapeTypes\n"
- "{\n"
- " SHAPE_HEIGHT_FIELD=1,\n"
- " SHAPE_CONVEX_HULL=3,\n"
- " SHAPE_PLANE=4,\n"
- " SHAPE_CONCAVE_TRIMESH=5,\n"
- " SHAPE_COMPOUND_OF_CONVEX_HULLS=6,\n"
- " SHAPE_SPHERE=7,\n"
- " MAX_NUM_SHAPE_TYPES,\n"
- "};\n"
- "typedef struct b3Collidable b3Collidable_t;\n"
- "struct b3Collidable\n"
- "{\n"
- " union {\n"
- " int m_numChildShapes;\n"
- " int m_bvhIndex;\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_radius;\n"
- " int m_compoundBvhIndex;\n"
- " };\n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- "};\n"
- "typedef struct b3GpuChildShape b3GpuChildShape_t;\n"
- "struct b3GpuChildShape\n"
- "{\n"
- " b3Float4 m_childPosition;\n"
- " b3Quat m_childOrientation;\n"
- " int m_shapeIndex;\n"
- " int m_unused0;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "struct b3CompoundOverlappingPair\n"
- "{\n"
- " int m_bodyIndexA;\n"
- " int m_bodyIndexB;\n"
- "// int m_pairType;\n"
- " int m_childShapeIndexA;\n"
- " int m_childShapeIndexB;\n"
- "};\n"
- "#endif //B3_COLLIDABLE_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#define B3_MPR_SQRT sqrt\n"
- "#endif\n"
- "#define B3_MPR_FMIN(x, y) ((x) < (y) ? (x) : (y))\n"
- "#define B3_MPR_FABS fabs\n"
- "#define B3_MPR_TOLERANCE 1E-6f\n"
- "#define B3_MPR_MAX_ITERATIONS 1000\n"
- "struct _b3MprSupport_t \n"
- "{\n"
- " b3Float4 v; //!< Support point in minkowski sum\n"
- " b3Float4 v1; //!< Support point in obj1\n"
- " b3Float4 v2; //!< Support point in obj2\n"
- "};\n"
- "typedef struct _b3MprSupport_t b3MprSupport_t;\n"
- "struct _b3MprSimplex_t \n"
- "{\n"
- " b3MprSupport_t ps[4];\n"
- " int last; //!< index of last added point\n"
- "};\n"
- "typedef struct _b3MprSimplex_t b3MprSimplex_t;\n"
- "inline b3MprSupport_t* b3MprSimplexPointW(b3MprSimplex_t *s, int idx)\n"
- "{\n"
- " return &s->ps[idx];\n"
- "}\n"
- "inline void b3MprSimplexSetSize(b3MprSimplex_t *s, int size)\n"
- "{\n"
- " s->last = size - 1;\n"
- "}\n"
- "inline int b3MprSimplexSize(const b3MprSimplex_t *s)\n"
- "{\n"
- " return s->last + 1;\n"
- "}\n"
- "inline const b3MprSupport_t* b3MprSimplexPoint(const b3MprSimplex_t* s, int idx)\n"
- "{\n"
- " // here is no check on boundaries\n"
- " return &s->ps[idx];\n"
- "}\n"
- "inline void b3MprSupportCopy(b3MprSupport_t *d, const b3MprSupport_t *s)\n"
- "{\n"
- " *d = *s;\n"
- "}\n"
- "inline void b3MprSimplexSet(b3MprSimplex_t *s, size_t pos, const b3MprSupport_t *a)\n"
- "{\n"
- " b3MprSupportCopy(s->ps + pos, a);\n"
- "}\n"
- "inline void b3MprSimplexSwap(b3MprSimplex_t *s, size_t pos1, size_t pos2)\n"
- "{\n"
- " b3MprSupport_t supp;\n"
- " b3MprSupportCopy(&supp, &s->ps[pos1]);\n"
- " b3MprSupportCopy(&s->ps[pos1], &s->ps[pos2]);\n"
- " b3MprSupportCopy(&s->ps[pos2], &supp);\n"
- "}\n"
- "inline int b3MprIsZero(float val)\n"
- "{\n"
- " return B3_MPR_FABS(val) < FLT_EPSILON;\n"
- "}\n"
- "inline int b3MprEq(float _a, float _b)\n"
- "{\n"
- " float ab;\n"
- " float a, b;\n"
- " ab = B3_MPR_FABS(_a - _b);\n"
- " if (B3_MPR_FABS(ab) < FLT_EPSILON)\n"
- " return 1;\n"
- " a = B3_MPR_FABS(_a);\n"
- " b = B3_MPR_FABS(_b);\n"
- " if (b > a){\n"
- " return ab < FLT_EPSILON * b;\n"
- " }else{\n"
- " return ab < FLT_EPSILON * a;\n"
- " }\n"
- "}\n"
- "inline int b3MprVec3Eq(const b3Float4* a, const b3Float4 *b)\n"
- "{\n"
- " return b3MprEq((*a).x, (*b).x)\n"
- " && b3MprEq((*a).y, (*b).y)\n"
- " && b3MprEq((*a).z, (*b).z);\n"
- "}\n"
- "inline b3Float4 b3LocalGetSupportVertex(b3Float4ConstArg supportVec,__global const b3ConvexPolyhedronData_t* hull, b3ConstArray(b3Float4) verticesA)\n"
- "{\n"
- " b3Float4 supVec = b3MakeFloat4(0,0,0,0);\n"
- " float maxDot = -B3_LARGE_FLOAT;\n"
- " if( 0 < hull->m_numVertices )\n"
- " {\n"
- " const b3Float4 scaled = supportVec;\n"
- " int index = b3MaxDot(scaled, &verticesA[hull->m_vertexOffset], hull->m_numVertices, &maxDot);\n"
- " return verticesA[hull->m_vertexOffset+index];\n"
- " }\n"
- " return supVec;\n"
- "}\n"
- "B3_STATIC void b3MprConvexSupport(int pairIndex,int bodyIndex, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, \n"
- " b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData, \n"
- " b3ConstArray(b3Collidable_t) cpuCollidables,\n"
- " b3ConstArray(b3Float4) cpuVertices,\n"
- " __global b3Float4* sepAxis,\n"
- " const b3Float4* _dir, b3Float4* outp, int logme)\n"
- "{\n"
- " //dir is in worldspace, move to local space\n"
- " \n"
- " b3Float4 pos = cpuBodyBuf[bodyIndex].m_pos;\n"
- " b3Quat orn = cpuBodyBuf[bodyIndex].m_quat;\n"
- " \n"
- " b3Float4 dir = b3MakeFloat4((*_dir).x,(*_dir).y,(*_dir).z,0.f);\n"
- " \n"
- " const b3Float4 localDir = b3QuatRotate(b3QuatInverse(orn),dir);\n"
- " \n"
- " //find local support vertex\n"
- " int colIndex = cpuBodyBuf[bodyIndex].m_collidableIdx;\n"
- " \n"
- " b3Assert(cpuCollidables[colIndex].m_shapeType==SHAPE_CONVEX_HULL);\n"
- " __global const b3ConvexPolyhedronData_t* hull = &cpuConvexData[cpuCollidables[colIndex].m_shapeIndex];\n"
- " \n"
- " b3Float4 pInA;\n"
- " if (logme)\n"
- " {\n"
- " b3Float4 supVec = b3MakeFloat4(0,0,0,0);\n"
- " float maxDot = -B3_LARGE_FLOAT;\n"
- " if( 0 < hull->m_numVertices )\n"
- " {\n"
- " const b3Float4 scaled = localDir;\n"
- " int index = b3MaxDot(scaled, &cpuVertices[hull->m_vertexOffset], hull->m_numVertices, &maxDot);\n"
- " pInA = cpuVertices[hull->m_vertexOffset+index];\n"
- " \n"
- " }\n"
- " } else\n"
- " {\n"
- " pInA = b3LocalGetSupportVertex(localDir,hull,cpuVertices);\n"
- " }\n"
- " //move vertex to world space\n"
- " *outp = b3TransformPoint(pInA,pos,orn);\n"
- " \n"
- "}\n"
- "inline void b3MprSupport(int pairIndex,int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, \n"
- " b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData, \n"
- " b3ConstArray(b3Collidable_t) cpuCollidables,\n"
- " b3ConstArray(b3Float4) cpuVertices,\n"
- " __global b3Float4* sepAxis,\n"
- " const b3Float4* _dir, b3MprSupport_t *supp)\n"
- "{\n"
- " b3Float4 dir;\n"
- " dir = *_dir;\n"
- " b3MprConvexSupport(pairIndex,bodyIndexA,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices,sepAxis,&dir, &supp->v1,0);\n"
- " dir = *_dir*-1.f;\n"
- " b3MprConvexSupport(pairIndex,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices,sepAxis,&dir, &supp->v2,0);\n"
- " supp->v = supp->v1 - supp->v2;\n"
- "}\n"
- "inline void b3FindOrigin(int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, b3MprSupport_t *center)\n"
- "{\n"
- " center->v1 = cpuBodyBuf[bodyIndexA].m_pos;\n"
- " center->v2 = cpuBodyBuf[bodyIndexB].m_pos;\n"
- " center->v = center->v1 - center->v2;\n"
- "}\n"
- "inline void b3MprVec3Set(b3Float4 *v, float x, float y, float z)\n"
- "{\n"
- " (*v).x = x;\n"
- " (*v).y = y;\n"
- " (*v).z = z;\n"
- " (*v).w = 0.f;\n"
- "}\n"
- "inline void b3MprVec3Add(b3Float4 *v, const b3Float4 *w)\n"
- "{\n"
- " (*v).x += (*w).x;\n"
- " (*v).y += (*w).y;\n"
- " (*v).z += (*w).z;\n"
- "}\n"
- "inline void b3MprVec3Copy(b3Float4 *v, const b3Float4 *w)\n"
- "{\n"
- " *v = *w;\n"
- "}\n"
- "inline void b3MprVec3Scale(b3Float4 *d, float k)\n"
- "{\n"
- " *d *= k;\n"
- "}\n"
- "inline float b3MprVec3Dot(const b3Float4 *a, const b3Float4 *b)\n"
- "{\n"
- " float dot;\n"
- " dot = b3Dot3F4(*a,*b);\n"
- " return dot;\n"
- "}\n"
- "inline float b3MprVec3Len2(const b3Float4 *v)\n"
- "{\n"
- " return b3MprVec3Dot(v, v);\n"
- "}\n"
- "inline void b3MprVec3Normalize(b3Float4 *d)\n"
- "{\n"
- " float k = 1.f / B3_MPR_SQRT(b3MprVec3Len2(d));\n"
- " b3MprVec3Scale(d, k);\n"
- "}\n"
- "inline void b3MprVec3Cross(b3Float4 *d, const b3Float4 *a, const b3Float4 *b)\n"
- "{\n"
- " *d = b3Cross3(*a,*b);\n"
- " \n"
- "}\n"
- "inline void b3MprVec3Sub2(b3Float4 *d, const b3Float4 *v, const b3Float4 *w)\n"
- "{\n"
- " *d = *v - *w;\n"
- "}\n"
- "inline void b3PortalDir(const b3MprSimplex_t *portal, b3Float4 *dir)\n"
- "{\n"
- " b3Float4 v2v1, v3v1;\n"
- " b3MprVec3Sub2(&v2v1, &b3MprSimplexPoint(portal, 2)->v,\n"
- " &b3MprSimplexPoint(portal, 1)->v);\n"
- " b3MprVec3Sub2(&v3v1, &b3MprSimplexPoint(portal, 3)->v,\n"
- " &b3MprSimplexPoint(portal, 1)->v);\n"
- " b3MprVec3Cross(dir, &v2v1, &v3v1);\n"
- " b3MprVec3Normalize(dir);\n"
- "}\n"
- "inline int portalEncapsulesOrigin(const b3MprSimplex_t *portal,\n"
- " const b3Float4 *dir)\n"
- "{\n"
- " float dot;\n"
- " dot = b3MprVec3Dot(dir, &b3MprSimplexPoint(portal, 1)->v);\n"
- " return b3MprIsZero(dot) || dot > 0.f;\n"
- "}\n"
- "inline int portalReachTolerance(const b3MprSimplex_t *portal,\n"
- " const b3MprSupport_t *v4,\n"
- " const b3Float4 *dir)\n"
- "{\n"
- " float dv1, dv2, dv3, dv4;\n"
- " float dot1, dot2, dot3;\n"
- " // find the smallest dot product of dir and {v1-v4, v2-v4, v3-v4}\n"
- " dv1 = b3MprVec3Dot(&b3MprSimplexPoint(portal, 1)->v, dir);\n"
- " dv2 = b3MprVec3Dot(&b3MprSimplexPoint(portal, 2)->v, dir);\n"
- " dv3 = b3MprVec3Dot(&b3MprSimplexPoint(portal, 3)->v, dir);\n"
- " dv4 = b3MprVec3Dot(&v4->v, dir);\n"
- " dot1 = dv4 - dv1;\n"
- " dot2 = dv4 - dv2;\n"
- " dot3 = dv4 - dv3;\n"
- " dot1 = B3_MPR_FMIN(dot1, dot2);\n"
- " dot1 = B3_MPR_FMIN(dot1, dot3);\n"
- " return b3MprEq(dot1, B3_MPR_TOLERANCE) || dot1 < B3_MPR_TOLERANCE;\n"
- "}\n"
- "inline int portalCanEncapsuleOrigin(const b3MprSimplex_t *portal, \n"
- " const b3MprSupport_t *v4,\n"
- " const b3Float4 *dir)\n"
- "{\n"
- " float dot;\n"
- " dot = b3MprVec3Dot(&v4->v, dir);\n"
- " return b3MprIsZero(dot) || dot > 0.f;\n"
- "}\n"
- "inline void b3ExpandPortal(b3MprSimplex_t *portal,\n"
- " const b3MprSupport_t *v4)\n"
- "{\n"
- " float dot;\n"
- " b3Float4 v4v0;\n"
- " b3MprVec3Cross(&v4v0, &v4->v, &b3MprSimplexPoint(portal, 0)->v);\n"
- " dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 1)->v, &v4v0);\n"
- " if (dot > 0.f){\n"
- " dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 2)->v, &v4v0);\n"
- " if (dot > 0.f){\n"
- " b3MprSimplexSet(portal, 1, v4);\n"
- " }else{\n"
- " b3MprSimplexSet(portal, 3, v4);\n"
- " }\n"
- " }else{\n"
- " dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 3)->v, &v4v0);\n"
- " if (dot > 0.f){\n"
- " b3MprSimplexSet(portal, 2, v4);\n"
- " }else{\n"
- " b3MprSimplexSet(portal, 1, v4);\n"
- " }\n"
- " }\n"
- "}\n"
- "B3_STATIC int b3DiscoverPortal(int pairIndex, int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, \n"
- " b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData, \n"
- " b3ConstArray(b3Collidable_t) cpuCollidables,\n"
- " b3ConstArray(b3Float4) cpuVertices,\n"
- " __global b3Float4* sepAxis,\n"
- " __global int* hasSepAxis,\n"
- " b3MprSimplex_t *portal)\n"
- "{\n"
- " b3Float4 dir, va, vb;\n"
- " float dot;\n"
- " int cont;\n"
- " \n"
- " \n"
- " // vertex 0 is center of portal\n"
- " b3FindOrigin(bodyIndexA,bodyIndexB,cpuBodyBuf, b3MprSimplexPointW(portal, 0));\n"
- " // vertex 0 is center of portal\n"
- " b3MprSimplexSetSize(portal, 1);\n"
- " \n"
- " b3Float4 zero = b3MakeFloat4(0,0,0,0);\n"
- " b3Float4* b3mpr_vec3_origin = &zero;\n"
- " if (b3MprVec3Eq(&b3MprSimplexPoint(portal, 0)->v, b3mpr_vec3_origin)){\n"
- " // Portal's center lies on origin (0,0,0) => we know that objects\n"
- " // intersect but we would need to know penetration info.\n"
- " // So move center little bit...\n"
- " b3MprVec3Set(&va, FLT_EPSILON * 10.f, 0.f, 0.f);\n"
- " b3MprVec3Add(&b3MprSimplexPointW(portal, 0)->v, &va);\n"
- " }\n"
- " // vertex 1 = support in direction of origin\n"
- " b3MprVec3Copy(&dir, &b3MprSimplexPoint(portal, 0)->v);\n"
- " b3MprVec3Scale(&dir, -1.f);\n"
- " b3MprVec3Normalize(&dir);\n"
- " b3MprSupport(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&dir, b3MprSimplexPointW(portal, 1));\n"
- " b3MprSimplexSetSize(portal, 2);\n"
- " // test if origin isn't outside of v1\n"
- " dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 1)->v, &dir);\n"
- " \n"
- " if (b3MprIsZero(dot) || dot < 0.f)\n"
- " return -1;\n"
- " // vertex 2\n"
- " b3MprVec3Cross(&dir, &b3MprSimplexPoint(portal, 0)->v,\n"
- " &b3MprSimplexPoint(portal, 1)->v);\n"
- " if (b3MprIsZero(b3MprVec3Len2(&dir))){\n"
- " if (b3MprVec3Eq(&b3MprSimplexPoint(portal, 1)->v, b3mpr_vec3_origin)){\n"
- " // origin lies on v1\n"
- " return 1;\n"
- " }else{\n"
- " // origin lies on v0-v1 segment\n"
- " return 2;\n"
- " }\n"
- " }\n"
- " b3MprVec3Normalize(&dir);\n"
- " b3MprSupport(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&dir, b3MprSimplexPointW(portal, 2));\n"
- " \n"
- " dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 2)->v, &dir);\n"
- " if (b3MprIsZero(dot) || dot < 0.f)\n"
- " return -1;\n"
- " b3MprSimplexSetSize(portal, 3);\n"
- " // vertex 3 direction\n"
- " b3MprVec3Sub2(&va, &b3MprSimplexPoint(portal, 1)->v,\n"
- " &b3MprSimplexPoint(portal, 0)->v);\n"
- " b3MprVec3Sub2(&vb, &b3MprSimplexPoint(portal, 2)->v,\n"
- " &b3MprSimplexPoint(portal, 0)->v);\n"
- " b3MprVec3Cross(&dir, &va, &vb);\n"
- " b3MprVec3Normalize(&dir);\n"
- " // it is better to form portal faces to be oriented \"outside\" origin\n"
- " dot = b3MprVec3Dot(&dir, &b3MprSimplexPoint(portal, 0)->v);\n"
- " if (dot > 0.f){\n"
- " b3MprSimplexSwap(portal, 1, 2);\n"
- " b3MprVec3Scale(&dir, -1.f);\n"
- " }\n"
- " while (b3MprSimplexSize(portal) < 4){\n"
- " b3MprSupport(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&dir, b3MprSimplexPointW(portal, 3));\n"
- " \n"
- " dot = b3MprVec3Dot(&b3MprSimplexPoint(portal, 3)->v, &dir);\n"
- " if (b3MprIsZero(dot) || dot < 0.f)\n"
- " return -1;\n"
- " cont = 0;\n"
- " // test if origin is outside (v1, v0, v3) - set v2 as v3 and\n"
- " // continue\n"
- " b3MprVec3Cross(&va, &b3MprSimplexPoint(portal, 1)->v,\n"
- " &b3MprSimplexPoint(portal, 3)->v);\n"
- " dot = b3MprVec3Dot(&va, &b3MprSimplexPoint(portal, 0)->v);\n"
- " if (dot < 0.f && !b3MprIsZero(dot)){\n"
- " b3MprSimplexSet(portal, 2, b3MprSimplexPoint(portal, 3));\n"
- " cont = 1;\n"
- " }\n"
- " if (!cont){\n"
- " // test if origin is outside (v3, v0, v2) - set v1 as v3 and\n"
- " // continue\n"
- " b3MprVec3Cross(&va, &b3MprSimplexPoint(portal, 3)->v,\n"
- " &b3MprSimplexPoint(portal, 2)->v);\n"
- " dot = b3MprVec3Dot(&va, &b3MprSimplexPoint(portal, 0)->v);\n"
- " if (dot < 0.f && !b3MprIsZero(dot)){\n"
- " b3MprSimplexSet(portal, 1, b3MprSimplexPoint(portal, 3));\n"
- " cont = 1;\n"
- " }\n"
- " }\n"
- " if (cont){\n"
- " b3MprVec3Sub2(&va, &b3MprSimplexPoint(portal, 1)->v,\n"
- " &b3MprSimplexPoint(portal, 0)->v);\n"
- " b3MprVec3Sub2(&vb, &b3MprSimplexPoint(portal, 2)->v,\n"
- " &b3MprSimplexPoint(portal, 0)->v);\n"
- " b3MprVec3Cross(&dir, &va, &vb);\n"
- " b3MprVec3Normalize(&dir);\n"
- " }else{\n"
- " b3MprSimplexSetSize(portal, 4);\n"
- " }\n"
- " }\n"
- " return 0;\n"
- "}\n"
- "B3_STATIC int b3RefinePortal(int pairIndex,int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, \n"
- " b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData, \n"
- " b3ConstArray(b3Collidable_t) cpuCollidables,\n"
- " b3ConstArray(b3Float4) cpuVertices,\n"
- " __global b3Float4* sepAxis,\n"
- " b3MprSimplex_t *portal)\n"
- "{\n"
- " b3Float4 dir;\n"
- " b3MprSupport_t v4;\n"
- " for (int i=0;i<B3_MPR_MAX_ITERATIONS;i++)\n"
- " //while (1)\n"
- " {\n"
- " // compute direction outside the portal (from v0 throught v1,v2,v3\n"
- " // face)\n"
- " b3PortalDir(portal, &dir);\n"
- " // test if origin is inside the portal\n"
- " if (portalEncapsulesOrigin(portal, &dir))\n"
- " return 0;\n"
- " // get next support point\n"
- " \n"
- " b3MprSupport(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&dir, &v4);\n"
- " // test if v4 can expand portal to contain origin and if portal\n"
- " // expanding doesn't reach given tolerance\n"
- " if (!portalCanEncapsuleOrigin(portal, &v4, &dir)\n"
- " || portalReachTolerance(portal, &v4, &dir))\n"
- " {\n"
- " return -1;\n"
- " }\n"
- " // v1-v2-v3 triangle must be rearranged to face outside Minkowski\n"
- " // difference (direction from v0).\n"
- " b3ExpandPortal(portal, &v4);\n"
- " }\n"
- " return -1;\n"
- "}\n"
- "B3_STATIC void b3FindPos(const b3MprSimplex_t *portal, b3Float4 *pos)\n"
- "{\n"
- " b3Float4 zero = b3MakeFloat4(0,0,0,0);\n"
- " b3Float4* b3mpr_vec3_origin = &zero;\n"
- " b3Float4 dir;\n"
- " size_t i;\n"
- " float b[4], sum, inv;\n"
- " b3Float4 vec, p1, p2;\n"
- " b3PortalDir(portal, &dir);\n"
- " // use barycentric coordinates of tetrahedron to find origin\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 1)->v,\n"
- " &b3MprSimplexPoint(portal, 2)->v);\n"
- " b[0] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 3)->v);\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 3)->v,\n"
- " &b3MprSimplexPoint(portal, 2)->v);\n"
- " b[1] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 0)->v);\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 0)->v,\n"
- " &b3MprSimplexPoint(portal, 1)->v);\n"
- " b[2] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 3)->v);\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 2)->v,\n"
- " &b3MprSimplexPoint(portal, 1)->v);\n"
- " b[3] = b3MprVec3Dot(&vec, &b3MprSimplexPoint(portal, 0)->v);\n"
- " sum = b[0] + b[1] + b[2] + b[3];\n"
- " if (b3MprIsZero(sum) || sum < 0.f){\n"
- " b[0] = 0.f;\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 2)->v,\n"
- " &b3MprSimplexPoint(portal, 3)->v);\n"
- " b[1] = b3MprVec3Dot(&vec, &dir);\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 3)->v,\n"
- " &b3MprSimplexPoint(portal, 1)->v);\n"
- " b[2] = b3MprVec3Dot(&vec, &dir);\n"
- " b3MprVec3Cross(&vec, &b3MprSimplexPoint(portal, 1)->v,\n"
- " &b3MprSimplexPoint(portal, 2)->v);\n"
- " b[3] = b3MprVec3Dot(&vec, &dir);\n"
- " sum = b[1] + b[2] + b[3];\n"
- " }\n"
- " inv = 1.f / sum;\n"
- " b3MprVec3Copy(&p1, b3mpr_vec3_origin);\n"
- " b3MprVec3Copy(&p2, b3mpr_vec3_origin);\n"
- " for (i = 0; i < 4; i++){\n"
- " b3MprVec3Copy(&vec, &b3MprSimplexPoint(portal, i)->v1);\n"
- " b3MprVec3Scale(&vec, b[i]);\n"
- " b3MprVec3Add(&p1, &vec);\n"
- " b3MprVec3Copy(&vec, &b3MprSimplexPoint(portal, i)->v2);\n"
- " b3MprVec3Scale(&vec, b[i]);\n"
- " b3MprVec3Add(&p2, &vec);\n"
- " }\n"
- " b3MprVec3Scale(&p1, inv);\n"
- " b3MprVec3Scale(&p2, inv);\n"
- " b3MprVec3Copy(pos, &p1);\n"
- " b3MprVec3Add(pos, &p2);\n"
- " b3MprVec3Scale(pos, 0.5);\n"
- "}\n"
- "inline float b3MprVec3Dist2(const b3Float4 *a, const b3Float4 *b)\n"
- "{\n"
- " b3Float4 ab;\n"
- " b3MprVec3Sub2(&ab, a, b);\n"
- " return b3MprVec3Len2(&ab);\n"
- "}\n"
- "inline float _b3MprVec3PointSegmentDist2(const b3Float4 *P,\n"
- " const b3Float4 *x0,\n"
- " const b3Float4 *b,\n"
- " b3Float4 *witness)\n"
- "{\n"
- " // The computation comes from solving equation of segment:\n"
- " // S(t) = x0 + t.d\n"
- " // where - x0 is initial point of segment\n"
- " // - d is direction of segment from x0 (|d| > 0)\n"
- " // - t belongs to <0, 1> interval\n"
- " // \n"
- " // Than, distance from a segment to some point P can be expressed:\n"
- " // D(t) = |x0 + t.d - P|^2\n"
- " // which is distance from any point on segment. Minimization\n"
- " // of this function brings distance from P to segment.\n"
- " // Minimization of D(t) leads to simple quadratic equation that's\n"
- " // solving is straightforward.\n"
- " //\n"
- " // Bonus of this method is witness point for free.\n"
- " float dist, t;\n"
- " b3Float4 d, a;\n"
- " // direction of segment\n"
- " b3MprVec3Sub2(&d, b, x0);\n"
- " // precompute vector from P to x0\n"
- " b3MprVec3Sub2(&a, x0, P);\n"
- " t = -1.f * b3MprVec3Dot(&a, &d);\n"
- " t /= b3MprVec3Len2(&d);\n"
- " if (t < 0.f || b3MprIsZero(t)){\n"
- " dist = b3MprVec3Dist2(x0, P);\n"
- " if (witness)\n"
- " b3MprVec3Copy(witness, x0);\n"
- " }else if (t > 1.f || b3MprEq(t, 1.f)){\n"
- " dist = b3MprVec3Dist2(b, P);\n"
- " if (witness)\n"
- " b3MprVec3Copy(witness, b);\n"
- " }else{\n"
- " if (witness){\n"
- " b3MprVec3Copy(witness, &d);\n"
- " b3MprVec3Scale(witness, t);\n"
- " b3MprVec3Add(witness, x0);\n"
- " dist = b3MprVec3Dist2(witness, P);\n"
- " }else{\n"
- " // recycling variables\n"
- " b3MprVec3Scale(&d, t);\n"
- " b3MprVec3Add(&d, &a);\n"
- " dist = b3MprVec3Len2(&d);\n"
- " }\n"
- " }\n"
- " return dist;\n"
- "}\n"
- "inline float b3MprVec3PointTriDist2(const b3Float4 *P,\n"
- " const b3Float4 *x0, const b3Float4 *B,\n"
- " const b3Float4 *C,\n"
- " b3Float4 *witness)\n"
- "{\n"
- " // Computation comes from analytic expression for triangle (x0, B, C)\n"
- " // T(s, t) = x0 + s.d1 + t.d2, where d1 = B - x0 and d2 = C - x0 and\n"
- " // Then equation for distance is:\n"
- " // D(s, t) = | T(s, t) - P |^2\n"
- " // This leads to minimization of quadratic function of two variables.\n"
- " // The solution from is taken only if s is between 0 and 1, t is\n"
- " // between 0 and 1 and t + s < 1, otherwise distance from segment is\n"
- " // computed.\n"
- " b3Float4 d1, d2, a;\n"
- " float u, v, w, p, q, r;\n"
- " float s, t, dist, dist2;\n"
- " b3Float4 witness2;\n"
- " b3MprVec3Sub2(&d1, B, x0);\n"
- " b3MprVec3Sub2(&d2, C, x0);\n"
- " b3MprVec3Sub2(&a, x0, P);\n"
- " u = b3MprVec3Dot(&a, &a);\n"
- " v = b3MprVec3Dot(&d1, &d1);\n"
- " w = b3MprVec3Dot(&d2, &d2);\n"
- " p = b3MprVec3Dot(&a, &d1);\n"
- " q = b3MprVec3Dot(&a, &d2);\n"
- " r = b3MprVec3Dot(&d1, &d2);\n"
- " s = (q * r - w * p) / (w * v - r * r);\n"
- " t = (-s * r - q) / w;\n"
- " if ((b3MprIsZero(s) || s > 0.f)\n"
- " && (b3MprEq(s, 1.f) || s < 1.f)\n"
- " && (b3MprIsZero(t) || t > 0.f)\n"
- " && (b3MprEq(t, 1.f) || t < 1.f)\n"
- " && (b3MprEq(t + s, 1.f) || t + s < 1.f)){\n"
- " if (witness){\n"
- " b3MprVec3Scale(&d1, s);\n"
- " b3MprVec3Scale(&d2, t);\n"
- " b3MprVec3Copy(witness, x0);\n"
- " b3MprVec3Add(witness, &d1);\n"
- " b3MprVec3Add(witness, &d2);\n"
- " dist = b3MprVec3Dist2(witness, P);\n"
- " }else{\n"
- " dist = s * s * v;\n"
- " dist += t * t * w;\n"
- " dist += 2.f * s * t * r;\n"
- " dist += 2.f * s * p;\n"
- " dist += 2.f * t * q;\n"
- " dist += u;\n"
- " }\n"
- " }else{\n"
- " dist = _b3MprVec3PointSegmentDist2(P, x0, B, witness);\n"
- " dist2 = _b3MprVec3PointSegmentDist2(P, x0, C, &witness2);\n"
- " if (dist2 < dist){\n"
- " dist = dist2;\n"
- " if (witness)\n"
- " b3MprVec3Copy(witness, &witness2);\n"
- " }\n"
- " dist2 = _b3MprVec3PointSegmentDist2(P, B, C, &witness2);\n"
- " if (dist2 < dist){\n"
- " dist = dist2;\n"
- " if (witness)\n"
- " b3MprVec3Copy(witness, &witness2);\n"
- " }\n"
- " }\n"
- " return dist;\n"
- "}\n"
- "B3_STATIC void b3FindPenetr(int pairIndex,int bodyIndexA, int bodyIndexB, b3ConstArray(b3RigidBodyData_t) cpuBodyBuf, \n"
- " b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData, \n"
- " b3ConstArray(b3Collidable_t) cpuCollidables,\n"
- " b3ConstArray(b3Float4) cpuVertices,\n"
- " __global b3Float4* sepAxis,\n"
- " b3MprSimplex_t *portal,\n"
- " float *depth, b3Float4 *pdir, b3Float4 *pos)\n"
- "{\n"
- " b3Float4 dir;\n"
- " b3MprSupport_t v4;\n"
- " unsigned long iterations;\n"
- " b3Float4 zero = b3MakeFloat4(0,0,0,0);\n"
- " b3Float4* b3mpr_vec3_origin = &zero;\n"
- " iterations = 1UL;\n"
- " for (int i=0;i<B3_MPR_MAX_ITERATIONS;i++)\n"
- " //while (1)\n"
- " {\n"
- " // compute portal direction and obtain next support point\n"
- " b3PortalDir(portal, &dir);\n"
- " \n"
- " b3MprSupport(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&dir, &v4);\n"
- " // reached tolerance -> find penetration info\n"
- " if (portalReachTolerance(portal, &v4, &dir)\n"
- " || iterations ==B3_MPR_MAX_ITERATIONS)\n"
- " {\n"
- " *depth = b3MprVec3PointTriDist2(b3mpr_vec3_origin,&b3MprSimplexPoint(portal, 1)->v,&b3MprSimplexPoint(portal, 2)->v,&b3MprSimplexPoint(portal, 3)->v,pdir);\n"
- " *depth = B3_MPR_SQRT(*depth);\n"
- " \n"
- " if (b3MprIsZero((*pdir).x) && b3MprIsZero((*pdir).y) && b3MprIsZero((*pdir).z))\n"
- " {\n"
- " \n"
- " *pdir = dir;\n"
- " } \n"
- " b3MprVec3Normalize(pdir);\n"
- " \n"
- " // barycentric coordinates:\n"
- " b3FindPos(portal, pos);\n"
- " return;\n"
- " }\n"
- " b3ExpandPortal(portal, &v4);\n"
- " iterations++;\n"
- " }\n"
- "}\n"
- "B3_STATIC void b3FindPenetrTouch(b3MprSimplex_t *portal,float *depth, b3Float4 *dir, b3Float4 *pos)\n"
- "{\n"
- " // Touching contact on portal's v1 - so depth is zero and direction\n"
- " // is unimportant and pos can be guessed\n"
- " *depth = 0.f;\n"
- " b3Float4 zero = b3MakeFloat4(0,0,0,0);\n"
- " b3Float4* b3mpr_vec3_origin = &zero;\n"
- " b3MprVec3Copy(dir, b3mpr_vec3_origin);\n"
- " b3MprVec3Copy(pos, &b3MprSimplexPoint(portal, 1)->v1);\n"
- " b3MprVec3Add(pos, &b3MprSimplexPoint(portal, 1)->v2);\n"
- " b3MprVec3Scale(pos, 0.5);\n"
- "}\n"
- "B3_STATIC void b3FindPenetrSegment(b3MprSimplex_t *portal,\n"
- " float *depth, b3Float4 *dir, b3Float4 *pos)\n"
- "{\n"
- " \n"
- " // Origin lies on v0-v1 segment.\n"
- " // Depth is distance to v1, direction also and position must be\n"
- " // computed\n"
- " b3MprVec3Copy(pos, &b3MprSimplexPoint(portal, 1)->v1);\n"
- " b3MprVec3Add(pos, &b3MprSimplexPoint(portal, 1)->v2);\n"
- " b3MprVec3Scale(pos, 0.5f);\n"
- " \n"
- " b3MprVec3Copy(dir, &b3MprSimplexPoint(portal, 1)->v);\n"
- " *depth = B3_MPR_SQRT(b3MprVec3Len2(dir));\n"
- " b3MprVec3Normalize(dir);\n"
- "}\n"
- "inline int b3MprPenetration(int pairIndex, int bodyIndexA, int bodyIndexB,\n"
- " b3ConstArray(b3RigidBodyData_t) cpuBodyBuf,\n"
- " b3ConstArray(b3ConvexPolyhedronData_t) cpuConvexData, \n"
- " b3ConstArray(b3Collidable_t) cpuCollidables,\n"
- " b3ConstArray(b3Float4) cpuVertices,\n"
- " __global b3Float4* sepAxis,\n"
- " __global int* hasSepAxis,\n"
- " float *depthOut, b3Float4* dirOut, b3Float4* posOut)\n"
- "{\n"
- " \n"
- " b3MprSimplex_t portal;\n"
- " \n"
- "// if (!hasSepAxis[pairIndex])\n"
- " // return -1;\n"
- " \n"
- " hasSepAxis[pairIndex] = 0;\n"
- " int res;\n"
- " // Phase 1: Portal discovery\n"
- " res = b3DiscoverPortal(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices,sepAxis,hasSepAxis, &portal);\n"
- " \n"
- " \n"
- " //sepAxis[pairIndex] = *pdir;//or -dir?\n"
- " switch (res)\n"
- " {\n"
- " case 0:\n"
- " {\n"
- " // Phase 2: Portal refinement\n"
- " \n"
- " res = b3RefinePortal(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&portal);\n"
- " if (res < 0)\n"
- " return -1;\n"
- " // Phase 3. Penetration info\n"
- " b3FindPenetr(pairIndex,bodyIndexA,bodyIndexB,cpuBodyBuf,cpuConvexData,cpuCollidables,cpuVertices, sepAxis,&portal, depthOut, dirOut, posOut);\n"
- " hasSepAxis[pairIndex] = 1;\n"
- " sepAxis[pairIndex] = -*dirOut;\n"
- " break;\n"
- " }\n"
- " case 1:\n"
- " {\n"
- " // Touching contact on portal's v1.\n"
- " b3FindPenetrTouch(&portal, depthOut, dirOut, posOut);\n"
- " break;\n"
- " }\n"
- " case 2:\n"
- " {\n"
- " \n"
- " b3FindPenetrSegment( &portal, depthOut, dirOut, posOut);\n"
- " break;\n"
- " }\n"
- " default:\n"
- " {\n"
- " hasSepAxis[pairIndex]=0;\n"
- " //if (res < 0)\n"
- " //{\n"
- " // Origin isn't inside portal - no collision.\n"
- " return -1;\n"
- " //}\n"
- " }\n"
- " };\n"
- " \n"
- " return 0;\n"
- "};\n"
- "#endif //B3_MPR_PENETRATION_H\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define GET_NPOINTS(x) (x).m_worldNormalOnB.w\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- " #pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- " #define counter32_t volatile __global int*\n"
- "#endif\n"
- "__kernel void mprPenetrationKernel( __global int4* pairs,\n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const b3ConvexPolyhedronData_t* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global float4* separatingNormals,\n"
- " __global int* hasSeparatingAxis,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int contactCapacity,\n"
- " int numPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " if (i<numPairs)\n"
- " {\n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " //once the broadphase avoids static-static pairs, we can remove this test\n"
- " if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))\n"
- " {\n"
- " return;\n"
- " }\n"
- " \n"
- " if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONVEX_HULL) ||(collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL))\n"
- " {\n"
- " return;\n"
- " }\n"
- " float depthOut;\n"
- " b3Float4 dirOut;\n"
- " b3Float4 posOut;\n"
- " int res = b3MprPenetration(pairIndex, bodyIndexA, bodyIndexB,rigidBodies,convexShapes,collidables,vertices,separatingNormals,hasSeparatingAxis,&depthOut, &dirOut, &posOut);\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " if (res==0)\n"
- " {\n"
- " //add a contact\n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " if (dstIdx<contactCapacity)\n"
- " {\n"
- " pairs[pairIndex].z = dstIdx;\n"
- " __global struct b3Contact4Data* c = globalContactsOut + dstIdx;\n"
- " c->m_worldNormalOnB = -dirOut;//normal;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = pairs[pairIndex].x;\n"
- " int bodyB = pairs[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0 ? -bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0 ? -bodyB:bodyB;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " //for (int i=0;i<nContacts;i++)\n"
- " posOut.w = -depthOut;\n"
- " c->m_worldPosB[0] = posOut;//localPoints[contactIdx[i]];\n"
- " GET_NPOINTS(*c) = 1;//nContacts;\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "typedef float4 Quaternion;\n"
- "#define make_float4 (float4)\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)\n"
- "{\n"
- " return qtRotate( *orientation, *p ) + (*translation);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "inline void project(__global const b3ConvexPolyhedronData_t* hull, const float4 pos, const float4 orn, \n"
- "const float4* dir, __global const float4* vertices, float* min, float* max)\n"
- "{\n"
- " min[0] = FLT_MAX;\n"
- " max[0] = -FLT_MAX;\n"
- " int numVerts = hull->m_numVertices;\n"
- " const float4 localDir = qtInvRotate(orn,*dir);\n"
- " float offset = dot(pos,*dir);\n"
- " for(int i=0;i<numVerts;i++)\n"
- " {\n"
- " float dp = dot(vertices[hull->m_vertexOffset+i],localDir);\n"
- " if(dp < min[0]) \n"
- " min[0] = dp;\n"
- " if(dp > max[0]) \n"
- " max[0] = dp;\n"
- " }\n"
- " if(min[0]>max[0])\n"
- " {\n"
- " float tmp = min[0];\n"
- " min[0] = max[0];\n"
- " max[0] = tmp;\n"
- " }\n"
- " min[0] += offset;\n"
- " max[0] += offset;\n"
- "}\n"
- "bool findSeparatingAxisUnitSphere( __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " __global const float4* vertices,\n"
- " __global const float4* unitSphereDirections,\n"
- " int numUnitSphereDirections,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " \n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " int curEdgeEdge = 0;\n"
- " // Test unit sphere directions\n"
- " for (int i=0;i<numUnitSphereDirections;i++)\n"
- " {\n"
- " float4 crossje;\n"
- " crossje = unitSphereDirections[i]; \n"
- " if (dot3F4(DeltaC2,crossje)>0)\n"
- " crossje *= -1.f;\n"
- " {\n"
- " float dist;\n"
- " bool result = true;\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " project(hullA,posA,ornA,&crossje,vertices, &Min0, &Max0);\n"
- " project(hullB,posB,ornB,&crossje,vertices, &Min1, &Max1);\n"
- " \n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " return false;\n"
- " \n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " dist = d0<d1 ? d0:d1;\n"
- " result = true;\n"
- " \n"
- " if(dist<*dmin)\n"
- " {\n"
- " *dmin = dist;\n"
- " *sep = crossje;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "__kernel void findSeparatingAxisUnitSphereKernel( __global const int4* pairs, \n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const b3ConvexPolyhedronData_t* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* unitSphereDirections,\n"
- " __global float4* separatingNormals,\n"
- " __global int* hasSeparatingAxis,\n"
- " __global float* dmins,\n"
- " int numUnitSphereDirections,\n"
- " int numPairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " if (hasSeparatingAxis[i])\n"
- " {\n"
- " \n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " \n"
- " float dmin = dmins[i];\n"
- " \n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " float4 sepNormal = separatingNormals[i];\n"
- " \n"
- " int numEdgeEdgeDirections = convexShapes[shapeIndexA].m_numUniqueEdges*convexShapes[shapeIndexB].m_numUniqueEdges;\n"
- " if (numEdgeEdgeDirections>numUnitSphereDirections)\n"
- " {\n"
- " bool sepEE = findSeparatingAxisUnitSphere( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " vertices,unitSphereDirections,numUnitSphereDirections,&sepNormal,&dmin);\n"
- " if (!sepEE)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis[i] = 1;\n"
- " separatingNormals[i] = sepNormal;\n"
- " }\n"
- " }\n"
- " } //if (hasSeparatingAxis[i])\n"
- " }//(i<numPairs)\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.cl b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.cl
deleted file mode 100644
index 9c9e920f13..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.cl
+++ /dev/null
@@ -1,1374 +0,0 @@
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#define SHAPE_CONVEX_HULL 3
-#define SHAPE_PLANE 4
-#define SHAPE_CONCAVE_TRIMESH 5
-#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6
-#define SHAPE_SPHERE 7
-
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile __global int*
-#endif
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-#define max2 max
-#define min2 min
-
-typedef unsigned int u32;
-
-
-
-
-typedef struct
-{
- union
- {
- float4 m_min;
- float m_minElems[4];
- int m_minIndices[4];
- };
- union
- {
- float4 m_max;
- float m_maxElems[4];
- int m_maxIndices[4];
- };
-} btAabbCL;
-
-///keep this in sync with btCollidable.h
-typedef struct
-{
- int m_numChildShapes;
- float m_radius;
- int m_shapeType;
- int m_shapeIndex;
-
-} btCollidableGpu;
-
-typedef struct
-{
- float4 m_childPosition;
- float4 m_childOrientation;
- int m_shapeIndex;
- int m_unused0;
- int m_unused1;
- int m_unused2;
-} btGpuChildShape;
-
-#define GET_NPOINTS(x) (x).m_worldNormalOnB.w
-
-typedef struct
-{
- float4 m_pos;
- float4 m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_collidableIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} BodyData;
-
-
-typedef struct
-{
- float4 m_localCenter;
- float4 m_extents;
- float4 mC;
- float4 mE;
-
- float m_radius;
- int m_faceOffset;
- int m_numFaces;
- int m_numVertices;
-
- int m_vertexOffset;
- int m_uniqueEdgesOffset;
- int m_numUniqueEdges;
- int m_unused;
-
-} ConvexPolyhedronCL;
-
-typedef struct
-{
- float4 m_plane;
- int m_indexOffset;
- int m_numIndices;
-} btGpuFace;
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-__inline
-float fastDiv(float numerator, float denominator)
-{
- return native_divide(numerator, denominator);
-// return numerator/denominator;
-}
-
-__inline
-float4 fastDiv4(float4 numerator, float4 denominator)
-{
- return native_divide(numerator, denominator);
-}
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-//#define dot3F4 dot
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-__inline
-float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)
-{
- return qtRotate( *orientation, *p ) + (*translation);
-}
-
-void trInverse(float4 translationIn, Quaternion orientationIn,
- float4* translationOut, Quaternion* orientationOut)
-{
- *orientationOut = qtInvert(orientationIn);
- *translationOut = qtRotate(*orientationOut, -translationIn);
-}
-
-void trMul(float4 translationA, Quaternion orientationA,
- float4 translationB, Quaternion orientationB,
- float4* translationOut, Quaternion* orientationOut)
-{
- *orientationOut = qtMul(orientationA,orientationB);
- *translationOut = transform(&translationB,&translationA,&orientationA);
-}
-
-
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-}
-
-
-__inline float4 lerp3(const float4 a,const float4 b, float t)
-{
- return make_float4( a.x + (b.x - a.x) * t,
- a.y + (b.y - a.y) * t,
- a.z + (b.z - a.z) * t,
- 0.f);
-}
-
-
-float signedDistanceFromPointToPlane(float4 point, float4 planeEqn, float4* closestPointOnFace)
-{
- float4 n = (float4)(planeEqn.x, planeEqn.y, planeEqn.z, 0);
- float dist = dot3F4(n, point) + planeEqn.w;
- *closestPointOnFace = point - dist * n;
- return dist;
-}
-
-
-
-inline bool IsPointInPolygon(float4 p,
- const btGpuFace* face,
- __global const float4* baseVertex,
- __global const int* convexIndices,
- float4* out)
-{
- float4 a;
- float4 b;
- float4 ab;
- float4 ap;
- float4 v;
-
- float4 plane = make_float4(face->m_plane.x,face->m_plane.y,face->m_plane.z,0.f);
-
- if (face->m_numIndices<2)
- return false;
-
-
- float4 v0 = baseVertex[convexIndices[face->m_indexOffset + face->m_numIndices-1]];
-
- b = v0;
-
- for(unsigned i=0; i != face->m_numIndices; ++i)
- {
- a = b;
- float4 vi = baseVertex[convexIndices[face->m_indexOffset + i]];
- b = vi;
- ab = b-a;
- ap = p-a;
- v = cross3(ab,plane);
-
- if (dot(ap, v) > 0.f)
- {
- float ab_m2 = dot(ab, ab);
- float rt = ab_m2 != 0.f ? dot(ab, ap) / ab_m2 : 0.f;
- if (rt <= 0.f)
- {
- *out = a;
- }
- else if (rt >= 1.f)
- {
- *out = b;
- }
- else
- {
- float s = 1.f - rt;
- out[0].x = s * a.x + rt * b.x;
- out[0].y = s * a.y + rt * b.y;
- out[0].z = s * a.z + rt * b.z;
- }
- return false;
- }
- }
- return true;
-}
-
-
-
-
-void computeContactSphereConvex(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* convexVertices,
- __global const int* convexIndices,
- __global const btGpuFace* faces,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int maxContactCapacity,
- float4 spherePos2,
- float radius,
- float4 pos,
- float4 quat
- )
-{
-
- float4 invPos;
- float4 invOrn;
-
- trInverse(pos,quat, &invPos,&invOrn);
-
- float4 spherePos = transform(&spherePos2,&invPos,&invOrn);
-
- int shapeIndex = collidables[collidableIndexB].m_shapeIndex;
- int numFaces = convexShapes[shapeIndex].m_numFaces;
- float4 closestPnt = (float4)(0, 0, 0, 0);
- float4 hitNormalWorld = (float4)(0, 0, 0, 0);
- float minDist = -1000000.f;
- bool bCollide = true;
-
- for ( int f = 0; f < numFaces; f++ )
- {
- btGpuFace face = faces[convexShapes[shapeIndex].m_faceOffset+f];
-
- // set up a plane equation
- float4 planeEqn;
- float4 n1 = face.m_plane;
- n1.w = 0.f;
- planeEqn = n1;
- planeEqn.w = face.m_plane.w;
-
-
- // compute a signed distance from the vertex in cloth to the face of rigidbody.
- float4 pntReturn;
- float dist = signedDistanceFromPointToPlane(spherePos, planeEqn, &pntReturn);
-
- // If the distance is positive, the plane is a separating plane.
- if ( dist > radius )
- {
- bCollide = false;
- break;
- }
-
-
- if (dist>0)
- {
- //might hit an edge or vertex
- float4 out;
- float4 zeroPos = make_float4(0,0,0,0);
-
- bool isInPoly = IsPointInPolygon(spherePos,
- &face,
- &convexVertices[convexShapes[shapeIndex].m_vertexOffset],
- convexIndices,
- &out);
- if (isInPoly)
- {
- if (dist>minDist)
- {
- minDist = dist;
- closestPnt = pntReturn;
- hitNormalWorld = planeEqn;
-
- }
- } else
- {
- float4 tmp = spherePos-out;
- float l2 = dot(tmp,tmp);
- if (l2<radius*radius)
- {
- dist = sqrt(l2);
- if (dist>minDist)
- {
- minDist = dist;
- closestPnt = out;
- hitNormalWorld = tmp/dist;
-
- }
-
- } else
- {
- bCollide = false;
- break;
- }
- }
- } else
- {
- if ( dist > minDist )
- {
- minDist = dist;
- closestPnt = pntReturn;
- hitNormalWorld.xyz = planeEqn.xyz;
- }
- }
-
- }
-
-
-
- if (bCollide && minDist > -10000)
- {
- float4 normalOnSurfaceB1 = qtRotate(quat,-hitNormalWorld);
- float4 pOnB1 = transform(&closestPnt,&pos,&quat);
-
- float actualDepth = minDist-radius;
- if (actualDepth<=0.f)
- {
-
-
- pOnB1.w = actualDepth;
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
-
-
- if (1)//dstIdx < maxContactCapacity)
- {
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -normalOnSurfaceB1;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;
- c->m_worldPosB[0] = pOnB1;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
-
- GET_NPOINTS(*c) = 1;
- }
-
- }
- }//if (hasCollision)
-
-}
-
-
-
-int extractManifoldSequential(const float4* p, int nPoints, float4 nearNormal, int4* contactIdx)
-{
- if( nPoints == 0 )
- return 0;
-
- if (nPoints <=4)
- return nPoints;
-
-
- if (nPoints >64)
- nPoints = 64;
-
- float4 center = make_float4(0.f);
- {
-
- for (int i=0;i<nPoints;i++)
- center += p[i];
- center /= (float)nPoints;
- }
-
-
-
- // sample 4 directions
-
- float4 aVector = p[0] - center;
- float4 u = cross3( nearNormal, aVector );
- float4 v = cross3( nearNormal, u );
- u = normalize3( u );
- v = normalize3( v );
-
-
- //keep point with deepest penetration
- float minW= FLT_MAX;
-
- int minIndex=-1;
-
- float4 maxDots;
- maxDots.x = FLT_MIN;
- maxDots.y = FLT_MIN;
- maxDots.z = FLT_MIN;
- maxDots.w = FLT_MIN;
-
- // idx, distance
- for(int ie = 0; ie<nPoints; ie++ )
- {
- if (p[ie].w<minW)
- {
- minW = p[ie].w;
- minIndex=ie;
- }
- float f;
- float4 r = p[ie]-center;
- f = dot3F4( u, r );
- if (f<maxDots.x)
- {
- maxDots.x = f;
- contactIdx[0].x = ie;
- }
-
- f = dot3F4( -u, r );
- if (f<maxDots.y)
- {
- maxDots.y = f;
- contactIdx[0].y = ie;
- }
-
-
- f = dot3F4( v, r );
- if (f<maxDots.z)
- {
- maxDots.z = f;
- contactIdx[0].z = ie;
- }
-
- f = dot3F4( -v, r );
- if (f<maxDots.w)
- {
- maxDots.w = f;
- contactIdx[0].w = ie;
- }
-
- }
-
- if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)
- {
- //replace the first contact with minimum (todo: replace contact with least penetration)
- contactIdx[0].x = minIndex;
- }
-
- return 4;
-
-}
-
-#define MAX_PLANE_CONVEX_POINTS 64
-
-int computeContactPlaneConvex(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu*collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* convexVertices,
- __global const int* convexIndices,
- __global const btGpuFace* faces,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int maxContactCapacity,
- float4 posB,
- Quaternion ornB
- )
-{
- int resultIndex=-1;
-
- int shapeIndex = collidables[collidableIndexB].m_shapeIndex;
- __global const ConvexPolyhedronCL* hullB = &convexShapes[shapeIndex];
-
- float4 posA;
- posA = rigidBodies[bodyIndexA].m_pos;
- Quaternion ornA;
- ornA = rigidBodies[bodyIndexA].m_quat;
-
- int numContactsOut = 0;
- int numWorldVertsB1= 0;
-
- float4 planeEq;
- planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane;
- float4 planeNormal = make_float4(planeEq.x,planeEq.y,planeEq.z,0.f);
- float4 planeNormalWorld;
- planeNormalWorld = qtRotate(ornA,planeNormal);
- float planeConstant = planeEq.w;
-
- float4 invPosA;Quaternion invOrnA;
- float4 convexInPlaneTransPos1; Quaternion convexInPlaneTransOrn1;
- {
-
- trInverse(posA,ornA,&invPosA,&invOrnA);
- trMul(invPosA,invOrnA,posB,ornB,&convexInPlaneTransPos1,&convexInPlaneTransOrn1);
- }
- float4 invPosB;Quaternion invOrnB;
- float4 planeInConvexPos1; Quaternion planeInConvexOrn1;
- {
-
- trInverse(posB,ornB,&invPosB,&invOrnB);
- trMul(invPosB,invOrnB,posA,ornA,&planeInConvexPos1,&planeInConvexOrn1);
- }
-
-
- float4 planeNormalInConvex = qtRotate(planeInConvexOrn1,-planeNormal);
- float maxDot = -1e30;
- int hitVertex=-1;
- float4 hitVtx;
-
-
-
- float4 contactPoints[MAX_PLANE_CONVEX_POINTS];
- int numPoints = 0;
-
- int4 contactIdx;
- contactIdx=make_int4(0,1,2,3);
-
-
- for (int i=0;i<hullB->m_numVertices;i++)
- {
- float4 vtx = convexVertices[hullB->m_vertexOffset+i];
- float curDot = dot(vtx,planeNormalInConvex);
-
-
- if (curDot>maxDot)
- {
- hitVertex=i;
- maxDot=curDot;
- hitVtx = vtx;
- //make sure the deepest points is always included
- if (numPoints==MAX_PLANE_CONVEX_POINTS)
- numPoints--;
- }
-
- if (numPoints<MAX_PLANE_CONVEX_POINTS)
- {
- float4 vtxWorld = transform(&vtx, &posB, &ornB);
- float4 vtxInPlane = transform(&vtxWorld, &invPosA, &invOrnA);//oplaneTransform.inverse()*vtxWorld;
- float dist = dot(planeNormal,vtxInPlane)-planeConstant;
- if (dist<0.f)
- {
- vtxWorld.w = dist;
- contactPoints[numPoints] = vtxWorld;
- numPoints++;
- }
- }
-
- }
-
- int numReducedPoints = numPoints;
- if (numPoints>4)
- {
- numReducedPoints = extractManifoldSequential( contactPoints, numPoints, planeNormalInConvex, &contactIdx);
- }
-
- if (numReducedPoints>0)
- {
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
-
- if (dstIdx < maxContactCapacity)
- {
- resultIndex = dstIdx;
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -planeNormalWorld;
- //c->setFrictionCoeff(0.7);
- //c->setRestituitionCoeff(0.f);
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
-
- switch (numReducedPoints)
- {
- case 4:
- c->m_worldPosB[3] = contactPoints[contactIdx.w];
- case 3:
- c->m_worldPosB[2] = contactPoints[contactIdx.z];
- case 2:
- c->m_worldPosB[1] = contactPoints[contactIdx.y];
- case 1:
- c->m_worldPosB[0] = contactPoints[contactIdx.x];
- default:
- {
- }
- };
-
- GET_NPOINTS(*c) = numReducedPoints;
- }//if (dstIdx < numPairs)
- }
-
- return resultIndex;
-}
-
-
-void computeContactPlaneSphere(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const btGpuFace* faces,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int maxContactCapacity)
-{
- float4 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane;
- float radius = collidables[collidableIndexB].m_radius;
- float4 posA1 = rigidBodies[bodyIndexA].m_pos;
- float4 ornA1 = rigidBodies[bodyIndexA].m_quat;
- float4 posB1 = rigidBodies[bodyIndexB].m_pos;
- float4 ornB1 = rigidBodies[bodyIndexB].m_quat;
-
- bool hasCollision = false;
- float4 planeNormal1 = make_float4(planeEq.x,planeEq.y,planeEq.z,0.f);
- float planeConstant = planeEq.w;
- float4 convexInPlaneTransPos1; Quaternion convexInPlaneTransOrn1;
- {
- float4 invPosA;Quaternion invOrnA;
- trInverse(posA1,ornA1,&invPosA,&invOrnA);
- trMul(invPosA,invOrnA,posB1,ornB1,&convexInPlaneTransPos1,&convexInPlaneTransOrn1);
- }
- float4 planeInConvexPos1; Quaternion planeInConvexOrn1;
- {
- float4 invPosB;Quaternion invOrnB;
- trInverse(posB1,ornB1,&invPosB,&invOrnB);
- trMul(invPosB,invOrnB,posA1,ornA1,&planeInConvexPos1,&planeInConvexOrn1);
- }
- float4 vtx1 = qtRotate(planeInConvexOrn1,-planeNormal1)*radius;
- float4 vtxInPlane1 = transform(&vtx1,&convexInPlaneTransPos1,&convexInPlaneTransOrn1);
- float distance = dot3F4(planeNormal1,vtxInPlane1) - planeConstant;
- hasCollision = distance < 0.f;//m_manifoldPtr->getContactBreakingThreshold();
- if (hasCollision)
- {
- float4 vtxInPlaneProjected1 = vtxInPlane1 - distance*planeNormal1;
- float4 vtxInPlaneWorld1 = transform(&vtxInPlaneProjected1,&posA1,&ornA1);
- float4 normalOnSurfaceB1 = qtRotate(ornA1,planeNormal1);
- float4 pOnB1 = vtxInPlaneWorld1+normalOnSurfaceB1*distance;
- pOnB1.w = distance;
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
-
- if (dstIdx < maxContactCapacity)
- {
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -normalOnSurfaceB1;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;
- c->m_worldPosB[0] = pOnB1;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
- GET_NPOINTS(*c) = 1;
- }//if (dstIdx < numPairs)
- }//if (hasCollision)
-}
-
-
-__kernel void primitiveContactsKernel( __global int4* pairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int numPairs, int maxContactCapacity)
-{
-
- int i = get_global_id(0);
- int pairIndex = i;
-
- float4 worldVertsB1[64];
- float4 worldVertsB2[64];
- int capacityWorldVerts = 64;
-
- float4 localContactsOut[64];
- int localContactCapacity=64;
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- if (i<numPairs)
- {
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_PLANE &&
- collidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
-
- float4 posB;
- posB = rigidBodies[bodyIndexB].m_pos;
- Quaternion ornB;
- ornB = rigidBodies[bodyIndexB].m_quat;
- int contactIndex = computeContactPlaneConvex(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB,
- rigidBodies,collidables,convexShapes,vertices,indices,
- faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity, posB,ornB);
- if (contactIndex>=0)
- pairs[pairIndex].z = contactIndex;
-
- return;
- }
-
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- collidables[collidableIndexB].m_shapeType == SHAPE_PLANE)
- {
-
- float4 posA;
- posA = rigidBodies[bodyIndexA].m_pos;
- Quaternion ornA;
- ornA = rigidBodies[bodyIndexA].m_quat;
-
-
- int contactIndex = computeContactPlaneConvex( pairIndex, bodyIndexB,bodyIndexA, collidableIndexB,collidableIndexA,
- rigidBodies,collidables,convexShapes,vertices,indices,
- faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,posA,ornA);
-
- if (contactIndex>=0)
- pairs[pairIndex].z = contactIndex;
-
- return;
- }
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_PLANE &&
- collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)
- {
- computeContactPlaneSphere(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB,
- rigidBodies,collidables,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity);
- return;
- }
-
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&
- collidables[collidableIndexB].m_shapeType == SHAPE_PLANE)
- {
-
-
- computeContactPlaneSphere( pairIndex, bodyIndexB,bodyIndexA, collidableIndexB,collidableIndexA,
- rigidBodies,collidables,
- faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity);
-
- return;
- }
-
-
-
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&
- collidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)
- {
-
- float4 spherePos = rigidBodies[bodyIndexA].m_pos;
- float sphereRadius = collidables[collidableIndexA].m_radius;
- float4 convexPos = rigidBodies[bodyIndexB].m_pos;
- float4 convexOrn = rigidBodies[bodyIndexB].m_quat;
-
- computeContactSphereConvex(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB,
- rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,
- spherePos,sphereRadius,convexPos,convexOrn);
-
- return;
- }
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&
- collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)
- {
-
- float4 spherePos = rigidBodies[bodyIndexB].m_pos;
- float sphereRadius = collidables[collidableIndexB].m_radius;
- float4 convexPos = rigidBodies[bodyIndexA].m_pos;
- float4 convexOrn = rigidBodies[bodyIndexA].m_quat;
-
- computeContactSphereConvex(pairIndex, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA,
- rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,
- spherePos,sphereRadius,convexPos,convexOrn);
- return;
- }
-
-
-
-
-
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&
- collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)
- {
- //sphere-sphere
- float radiusA = collidables[collidableIndexA].m_radius;
- float radiusB = collidables[collidableIndexB].m_radius;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- float4 diff = posA-posB;
- float len = length(diff);
-
- ///iff distance positive, don't generate a new contact
- if ( len <= (radiusA+radiusB))
- {
- ///distance (negative means penetration)
- float dist = len - (radiusA+radiusB);
- float4 normalOnSurfaceB = make_float4(1.f,0.f,0.f,0.f);
- if (len > 0.00001)
- {
- normalOnSurfaceB = diff / len;
- }
- float4 contactPosB = posB + normalOnSurfaceB*radiusB;
- contactPosB.w = dist;
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
-
- if (dstIdx < maxContactCapacity)
- {
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = normalOnSurfaceB;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;
- c->m_worldPosB[0] = contactPosB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
- GET_NPOINTS(*c) = 1;
- }//if (dstIdx < numPairs)
- }//if ( len <= (radiusA+radiusB))
-
- return;
- }//SHAPE_SPHERE SHAPE_SPHERE
-
- }// if (i<numPairs)
-
-}
-
-
-// work-in-progress
-__kernel void processCompoundPairsPrimitivesKernel( __global const int4* gpuCompoundPairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global btAabbCL* aabbs,
- __global const btGpuChildShape* gpuChildShapes,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int numCompoundPairs, int maxContactCapacity
- )
-{
-
- int i = get_global_id(0);
- if (i<numCompoundPairs)
- {
- int bodyIndexA = gpuCompoundPairs[i].x;
- int bodyIndexB = gpuCompoundPairs[i].y;
-
- int childShapeIndexA = gpuCompoundPairs[i].z;
- int childShapeIndexB = gpuCompoundPairs[i].w;
-
- int collidableIndexA = -1;
- int collidableIndexB = -1;
-
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
-
- float4 ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- if (childShapeIndexA >= 0)
- {
- collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = qtRotate(ornA,childPosA)+posA;
- float4 newOrnA = qtMul(ornA,childOrnA);
- posA = newPosA;
- ornA = newOrnA;
- } else
- {
- collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- }
-
- if (childShapeIndexB>=0)
- {
- collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- } else
- {
- collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
- }
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- int shapeTypeA = collidables[collidableIndexA].m_shapeType;
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
-
- int pairIndex = i;
- if ((shapeTypeA == SHAPE_PLANE) && (shapeTypeB==SHAPE_CONVEX_HULL))
- {
-
- computeContactPlaneConvex( pairIndex, bodyIndexA,bodyIndexB, collidableIndexA,collidableIndexB,
- rigidBodies,collidables,convexShapes,vertices,indices,
- faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,posB,ornB);
- return;
- }
-
- if ((shapeTypeA == SHAPE_CONVEX_HULL) && (shapeTypeB==SHAPE_PLANE))
- {
-
- computeContactPlaneConvex( pairIndex, bodyIndexB,bodyIndexA, collidableIndexB,collidableIndexA,
- rigidBodies,collidables,convexShapes,vertices,indices,
- faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,posA,ornA);
- return;
- }
-
- if ((shapeTypeA == SHAPE_CONVEX_HULL) && (shapeTypeB == SHAPE_SPHERE))
- {
- float4 spherePos = rigidBodies[bodyIndexB].m_pos;
- float sphereRadius = collidables[collidableIndexB].m_radius;
- float4 convexPos = posA;
- float4 convexOrn = ornA;
-
- computeContactSphereConvex(pairIndex, bodyIndexB, bodyIndexA , collidableIndexB,collidableIndexA,
- rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,
- spherePos,sphereRadius,convexPos,convexOrn);
-
- return;
- }
-
- if ((shapeTypeA == SHAPE_SPHERE) && (shapeTypeB == SHAPE_CONVEX_HULL))
- {
-
- float4 spherePos = rigidBodies[bodyIndexA].m_pos;
- float sphereRadius = collidables[collidableIndexA].m_radius;
- float4 convexPos = posB;
- float4 convexOrn = ornB;
-
-
- computeContactSphereConvex(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB,
- rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,
- spherePos,sphereRadius,convexPos,convexOrn);
-
- return;
- }
- }// if (i<numCompoundPairs)
-}
-
-
-bool pointInTriangle(const float4* vertices, const float4* normal, float4 *p )
-{
-
- const float4* p1 = &vertices[0];
- const float4* p2 = &vertices[1];
- const float4* p3 = &vertices[2];
-
- float4 edge1; edge1 = (*p2 - *p1);
- float4 edge2; edge2 = ( *p3 - *p2 );
- float4 edge3; edge3 = ( *p1 - *p3 );
-
-
- float4 p1_to_p; p1_to_p = ( *p - *p1 );
- float4 p2_to_p; p2_to_p = ( *p - *p2 );
- float4 p3_to_p; p3_to_p = ( *p - *p3 );
-
- float4 edge1_normal; edge1_normal = ( cross(edge1,*normal));
- float4 edge2_normal; edge2_normal = ( cross(edge2,*normal));
- float4 edge3_normal; edge3_normal = ( cross(edge3,*normal));
-
-
-
- float r1, r2, r3;
- r1 = dot(edge1_normal,p1_to_p );
- r2 = dot(edge2_normal,p2_to_p );
- r3 = dot(edge3_normal,p3_to_p );
-
- if ( r1 > 0 && r2 > 0 && r3 > 0 )
- return true;
- if ( r1 <= 0 && r2 <= 0 && r3 <= 0 )
- return true;
- return false;
-
-}
-
-
-float segmentSqrDistance(float4 from, float4 to,float4 p, float4* nearest)
-{
- float4 diff = p - from;
- float4 v = to - from;
- float t = dot(v,diff);
-
- if (t > 0)
- {
- float dotVV = dot(v,v);
- if (t < dotVV)
- {
- t /= dotVV;
- diff -= t*v;
- } else
- {
- t = 1;
- diff -= v;
- }
- } else
- {
- t = 0;
- }
- *nearest = from + t*v;
- return dot(diff,diff);
-}
-
-
-void computeContactSphereTriangle(int pairIndex,
- int bodyIndexA, int bodyIndexB,
- int collidableIndexA, int collidableIndexB,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- const float4* triangleVertices,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int maxContactCapacity,
- float4 spherePos2,
- float radius,
- float4 pos,
- float4 quat,
- int faceIndex
- )
-{
-
- float4 invPos;
- float4 invOrn;
-
- trInverse(pos,quat, &invPos,&invOrn);
- float4 spherePos = transform(&spherePos2,&invPos,&invOrn);
- int numFaces = 3;
- float4 closestPnt = (float4)(0, 0, 0, 0);
- float4 hitNormalWorld = (float4)(0, 0, 0, 0);
- float minDist = -1000000.f;
- bool bCollide = false;
-
-
- //////////////////////////////////////
-
- float4 sphereCenter;
- sphereCenter = spherePos;
-
- const float4* vertices = triangleVertices;
- float contactBreakingThreshold = 0.f;//todo?
- float radiusWithThreshold = radius + contactBreakingThreshold;
- float4 edge10;
- edge10 = vertices[1]-vertices[0];
- edge10.w = 0.f;//is this needed?
- float4 edge20;
- edge20 = vertices[2]-vertices[0];
- edge20.w = 0.f;//is this needed?
- float4 normal = cross3(edge10,edge20);
- normal = normalize(normal);
- float4 p1ToCenter;
- p1ToCenter = sphereCenter - vertices[0];
-
- float distanceFromPlane = dot(p1ToCenter,normal);
-
- if (distanceFromPlane < 0.f)
- {
- //triangle facing the other way
- distanceFromPlane *= -1.f;
- normal *= -1.f;
- }
- hitNormalWorld = normal;
-
- bool isInsideContactPlane = distanceFromPlane < radiusWithThreshold;
-
- // Check for contact / intersection
- bool hasContact = false;
- float4 contactPoint;
- if (isInsideContactPlane)
- {
-
- if (pointInTriangle(vertices,&normal, &sphereCenter))
- {
- // Inside the contact wedge - touches a point on the shell plane
- hasContact = true;
- contactPoint = sphereCenter - normal*distanceFromPlane;
-
- } else {
- // Could be inside one of the contact capsules
- float contactCapsuleRadiusSqr = radiusWithThreshold*radiusWithThreshold;
- float4 nearestOnEdge;
- int numEdges = 3;
- for (int i = 0; i < numEdges; i++)
- {
- float4 pa =vertices[i];
- float4 pb = vertices[(i+1)%3];
-
- float distanceSqr = segmentSqrDistance(pa,pb,sphereCenter, &nearestOnEdge);
- if (distanceSqr < contactCapsuleRadiusSqr)
- {
- // Yep, we're inside a capsule
- hasContact = true;
- contactPoint = nearestOnEdge;
-
- }
-
- }
- }
- }
-
- if (hasContact)
- {
-
- closestPnt = contactPoint;
- float4 contactToCenter = sphereCenter - contactPoint;
- minDist = length(contactToCenter);
- if (minDist>FLT_EPSILON)
- {
- hitNormalWorld = normalize(contactToCenter);//*(1./minDist);
- bCollide = true;
- }
-
- }
-
-
- /////////////////////////////////////
-
- if (bCollide && minDist > -10000)
- {
-
- float4 normalOnSurfaceB1 = qtRotate(quat,-hitNormalWorld);
- float4 pOnB1 = transform(&closestPnt,&pos,&quat);
- float actualDepth = minDist-radius;
-
-
- if (actualDepth<=0.f)
- {
- pOnB1.w = actualDepth;
- int dstIdx;
-
-
- float lenSqr = dot3F4(normalOnSurfaceB1,normalOnSurfaceB1);
- if (lenSqr>FLT_EPSILON)
- {
- AppendInc( nGlobalContactsOut, dstIdx );
-
- if (dstIdx < maxContactCapacity)
- {
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -normalOnSurfaceB1;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;
- c->m_worldPosB[0] = pOnB1;
-
- c->m_childIndexA = -1;
- c->m_childIndexB = faceIndex;
-
- GET_NPOINTS(*c) = 1;
- }
- }
-
- }
- }//if (hasCollision)
-
-}
-
-
-
-// work-in-progress
-__kernel void findConcaveSphereContactsKernel( __global int4* concavePairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global btAabbCL* aabbs,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int numConcavePairs, int maxContactCapacity
- )
-{
-
- int i = get_global_id(0);
- if (i>=numConcavePairs)
- return;
- int pairIdx = i;
-
- int bodyIndexA = concavePairs[i].x;
- int bodyIndexB = concavePairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- if (collidables[collidableIndexB].m_shapeType==SHAPE_SPHERE)
- {
- int f = concavePairs[i].z;
- btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];
-
- float4 verticesA[3];
- for (int i=0;i<3;i++)
- {
- int index = indices[face.m_indexOffset+i];
- float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];
- verticesA[i] = vert;
- }
-
- float4 spherePos = rigidBodies[bodyIndexB].m_pos;
- float sphereRadius = collidables[collidableIndexB].m_radius;
- float4 convexPos = rigidBodies[bodyIndexA].m_pos;
- float4 convexOrn = rigidBodies[bodyIndexA].m_quat;
-
- computeContactSphereTriangle(i, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA,
- rigidBodies,collidables,
- verticesA,
- globalContactsOut, nGlobalContactsOut,maxContactCapacity,
- spherePos,sphereRadius,convexPos,convexOrn, f);
-
- return;
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.h
deleted file mode 100644
index b2e0a2dd47..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/primitiveContacts.h
+++ /dev/null
@@ -1,1288 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* primitiveContactsKernelsCL =
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#define SHAPE_CONVEX_HULL 3\n"
- "#define SHAPE_PLANE 4\n"
- "#define SHAPE_CONCAVE_TRIMESH 5\n"
- "#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6\n"
- "#define SHAPE_SPHERE 7\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile __global int*\n"
- "#endif\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "typedef unsigned int u32;\n"
- "typedef struct \n"
- "{\n"
- " union\n"
- " {\n"
- " float4 m_min;\n"
- " float m_minElems[4];\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float4 m_max;\n"
- " float m_maxElems[4];\n"
- " int m_maxIndices[4];\n"
- " };\n"
- "} btAabbCL;\n"
- "///keep this in sync with btCollidable.h\n"
- "typedef struct\n"
- "{\n"
- " int m_numChildShapes;\n"
- " float m_radius;\n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- " \n"
- "} btCollidableGpu;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_childPosition;\n"
- " float4 m_childOrientation;\n"
- " int m_shapeIndex;\n"
- " int m_unused0;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "} btGpuChildShape;\n"
- "#define GET_NPOINTS(x) (x).m_worldNormalOnB.w\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " float4 m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_collidableIdx; \n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} BodyData;\n"
- "typedef struct \n"
- "{\n"
- " float4 m_localCenter;\n"
- " float4 m_extents;\n"
- " float4 mC;\n"
- " float4 mE;\n"
- " \n"
- " float m_radius;\n"
- " int m_faceOffset;\n"
- " int m_numFaces;\n"
- " int m_numVertices;\n"
- " \n"
- " int m_vertexOffset;\n"
- " int m_uniqueEdgesOffset;\n"
- " int m_numUniqueEdges;\n"
- " int m_unused;\n"
- "} ConvexPolyhedronCL;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_plane;\n"
- " int m_indexOffset;\n"
- " int m_numIndices;\n"
- "} btGpuFace;\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "__inline\n"
- "float fastDiv(float numerator, float denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "// return numerator/denominator; \n"
- "}\n"
- "__inline\n"
- "float4 fastDiv4(float4 numerator, float4 denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "//#define dot3F4 dot\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "__inline\n"
- "float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)\n"
- "{\n"
- " return qtRotate( *orientation, *p ) + (*translation);\n"
- "}\n"
- "void trInverse(float4 translationIn, Quaternion orientationIn,\n"
- " float4* translationOut, Quaternion* orientationOut)\n"
- "{\n"
- " *orientationOut = qtInvert(orientationIn);\n"
- " *translationOut = qtRotate(*orientationOut, -translationIn);\n"
- "}\n"
- "void trMul(float4 translationA, Quaternion orientationA,\n"
- " float4 translationB, Quaternion orientationB,\n"
- " float4* translationOut, Quaternion* orientationOut)\n"
- "{\n"
- " *orientationOut = qtMul(orientationA,orientationB);\n"
- " *translationOut = transform(&translationB,&translationA,&orientationA);\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "}\n"
- "__inline float4 lerp3(const float4 a,const float4 b, float t)\n"
- "{\n"
- " return make_float4( a.x + (b.x - a.x) * t,\n"
- " a.y + (b.y - a.y) * t,\n"
- " a.z + (b.z - a.z) * t,\n"
- " 0.f);\n"
- "}\n"
- "float signedDistanceFromPointToPlane(float4 point, float4 planeEqn, float4* closestPointOnFace)\n"
- "{\n"
- " float4 n = (float4)(planeEqn.x, planeEqn.y, planeEqn.z, 0);\n"
- " float dist = dot3F4(n, point) + planeEqn.w;\n"
- " *closestPointOnFace = point - dist * n;\n"
- " return dist;\n"
- "}\n"
- "inline bool IsPointInPolygon(float4 p, \n"
- " const btGpuFace* face,\n"
- " __global const float4* baseVertex,\n"
- " __global const int* convexIndices,\n"
- " float4* out)\n"
- "{\n"
- " float4 a;\n"
- " float4 b;\n"
- " float4 ab;\n"
- " float4 ap;\n"
- " float4 v;\n"
- " float4 plane = make_float4(face->m_plane.x,face->m_plane.y,face->m_plane.z,0.f);\n"
- " \n"
- " if (face->m_numIndices<2)\n"
- " return false;\n"
- " \n"
- " float4 v0 = baseVertex[convexIndices[face->m_indexOffset + face->m_numIndices-1]];\n"
- " \n"
- " b = v0;\n"
- " for(unsigned i=0; i != face->m_numIndices; ++i)\n"
- " {\n"
- " a = b;\n"
- " float4 vi = baseVertex[convexIndices[face->m_indexOffset + i]];\n"
- " b = vi;\n"
- " ab = b-a;\n"
- " ap = p-a;\n"
- " v = cross3(ab,plane);\n"
- " if (dot(ap, v) > 0.f)\n"
- " {\n"
- " float ab_m2 = dot(ab, ab);\n"
- " float rt = ab_m2 != 0.f ? dot(ab, ap) / ab_m2 : 0.f;\n"
- " if (rt <= 0.f)\n"
- " {\n"
- " *out = a;\n"
- " }\n"
- " else if (rt >= 1.f) \n"
- " {\n"
- " *out = b;\n"
- " }\n"
- " else\n"
- " {\n"
- " float s = 1.f - rt;\n"
- " out[0].x = s * a.x + rt * b.x;\n"
- " out[0].y = s * a.y + rt * b.y;\n"
- " out[0].z = s * a.z + rt * b.z;\n"
- " }\n"
- " return false;\n"
- " }\n"
- " }\n"
- " return true;\n"
- "}\n"
- "void computeContactSphereConvex(int pairIndex,\n"
- " int bodyIndexA, int bodyIndexB, \n"
- " int collidableIndexA, int collidableIndexB, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes,\n"
- " __global const float4* convexVertices,\n"
- " __global const int* convexIndices,\n"
- " __global const btGpuFace* faces,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int maxContactCapacity,\n"
- " float4 spherePos2,\n"
- " float radius,\n"
- " float4 pos,\n"
- " float4 quat\n"
- " )\n"
- "{\n"
- " float4 invPos;\n"
- " float4 invOrn;\n"
- " trInverse(pos,quat, &invPos,&invOrn);\n"
- " float4 spherePos = transform(&spherePos2,&invPos,&invOrn);\n"
- " int shapeIndex = collidables[collidableIndexB].m_shapeIndex;\n"
- " int numFaces = convexShapes[shapeIndex].m_numFaces;\n"
- " float4 closestPnt = (float4)(0, 0, 0, 0);\n"
- " float4 hitNormalWorld = (float4)(0, 0, 0, 0);\n"
- " float minDist = -1000000.f;\n"
- " bool bCollide = true;\n"
- " for ( int f = 0; f < numFaces; f++ )\n"
- " {\n"
- " btGpuFace face = faces[convexShapes[shapeIndex].m_faceOffset+f];\n"
- " // set up a plane equation \n"
- " float4 planeEqn;\n"
- " float4 n1 = face.m_plane;\n"
- " n1.w = 0.f;\n"
- " planeEqn = n1;\n"
- " planeEqn.w = face.m_plane.w;\n"
- " \n"
- " \n"
- " // compute a signed distance from the vertex in cloth to the face of rigidbody.\n"
- " float4 pntReturn;\n"
- " float dist = signedDistanceFromPointToPlane(spherePos, planeEqn, &pntReturn);\n"
- " // If the distance is positive, the plane is a separating plane. \n"
- " if ( dist > radius )\n"
- " {\n"
- " bCollide = false;\n"
- " break;\n"
- " }\n"
- " if (dist>0)\n"
- " {\n"
- " //might hit an edge or vertex\n"
- " float4 out;\n"
- " float4 zeroPos = make_float4(0,0,0,0);\n"
- " bool isInPoly = IsPointInPolygon(spherePos,\n"
- " &face,\n"
- " &convexVertices[convexShapes[shapeIndex].m_vertexOffset],\n"
- " convexIndices,\n"
- " &out);\n"
- " if (isInPoly)\n"
- " {\n"
- " if (dist>minDist)\n"
- " {\n"
- " minDist = dist;\n"
- " closestPnt = pntReturn;\n"
- " hitNormalWorld = planeEqn;\n"
- " \n"
- " }\n"
- " } else\n"
- " {\n"
- " float4 tmp = spherePos-out;\n"
- " float l2 = dot(tmp,tmp);\n"
- " if (l2<radius*radius)\n"
- " {\n"
- " dist = sqrt(l2);\n"
- " if (dist>minDist)\n"
- " {\n"
- " minDist = dist;\n"
- " closestPnt = out;\n"
- " hitNormalWorld = tmp/dist;\n"
- " \n"
- " }\n"
- " \n"
- " } else\n"
- " {\n"
- " bCollide = false;\n"
- " break;\n"
- " }\n"
- " }\n"
- " } else\n"
- " {\n"
- " if ( dist > minDist )\n"
- " {\n"
- " minDist = dist;\n"
- " closestPnt = pntReturn;\n"
- " hitNormalWorld.xyz = planeEqn.xyz;\n"
- " }\n"
- " }\n"
- " \n"
- " }\n"
- " \n"
- " if (bCollide && minDist > -10000)\n"
- " {\n"
- " float4 normalOnSurfaceB1 = qtRotate(quat,-hitNormalWorld);\n"
- " float4 pOnB1 = transform(&closestPnt,&pos,&quat);\n"
- " \n"
- " float actualDepth = minDist-radius;\n"
- " if (actualDepth<=0.f)\n"
- " {\n"
- " \n"
- " pOnB1.w = actualDepth;\n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " \n"
- " \n"
- " if (1)//dstIdx < maxContactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = -normalOnSurfaceB1;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;\n"
- " c->m_worldPosB[0] = pOnB1;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " GET_NPOINTS(*c) = 1;\n"
- " } \n"
- " }\n"
- " }//if (hasCollision)\n"
- "}\n"
- " \n"
- "int extractManifoldSequential(const float4* p, int nPoints, float4 nearNormal, int4* contactIdx)\n"
- "{\n"
- " if( nPoints == 0 )\n"
- " return 0;\n"
- " \n"
- " if (nPoints <=4)\n"
- " return nPoints;\n"
- " \n"
- " \n"
- " if (nPoints >64)\n"
- " nPoints = 64;\n"
- " \n"
- " float4 center = make_float4(0.f);\n"
- " {\n"
- " \n"
- " for (int i=0;i<nPoints;i++)\n"
- " center += p[i];\n"
- " center /= (float)nPoints;\n"
- " }\n"
- " \n"
- " \n"
- " \n"
- " // sample 4 directions\n"
- " \n"
- " float4 aVector = p[0] - center;\n"
- " float4 u = cross3( nearNormal, aVector );\n"
- " float4 v = cross3( nearNormal, u );\n"
- " u = normalize3( u );\n"
- " v = normalize3( v );\n"
- " \n"
- " \n"
- " //keep point with deepest penetration\n"
- " float minW= FLT_MAX;\n"
- " \n"
- " int minIndex=-1;\n"
- " \n"
- " float4 maxDots;\n"
- " maxDots.x = FLT_MIN;\n"
- " maxDots.y = FLT_MIN;\n"
- " maxDots.z = FLT_MIN;\n"
- " maxDots.w = FLT_MIN;\n"
- " \n"
- " // idx, distance\n"
- " for(int ie = 0; ie<nPoints; ie++ )\n"
- " {\n"
- " if (p[ie].w<minW)\n"
- " {\n"
- " minW = p[ie].w;\n"
- " minIndex=ie;\n"
- " }\n"
- " float f;\n"
- " float4 r = p[ie]-center;\n"
- " f = dot3F4( u, r );\n"
- " if (f<maxDots.x)\n"
- " {\n"
- " maxDots.x = f;\n"
- " contactIdx[0].x = ie;\n"
- " }\n"
- " \n"
- " f = dot3F4( -u, r );\n"
- " if (f<maxDots.y)\n"
- " {\n"
- " maxDots.y = f;\n"
- " contactIdx[0].y = ie;\n"
- " }\n"
- " \n"
- " \n"
- " f = dot3F4( v, r );\n"
- " if (f<maxDots.z)\n"
- " {\n"
- " maxDots.z = f;\n"
- " contactIdx[0].z = ie;\n"
- " }\n"
- " \n"
- " f = dot3F4( -v, r );\n"
- " if (f<maxDots.w)\n"
- " {\n"
- " maxDots.w = f;\n"
- " contactIdx[0].w = ie;\n"
- " }\n"
- " \n"
- " }\n"
- " \n"
- " if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)\n"
- " {\n"
- " //replace the first contact with minimum (todo: replace contact with least penetration)\n"
- " contactIdx[0].x = minIndex;\n"
- " }\n"
- " \n"
- " return 4;\n"
- " \n"
- "}\n"
- "#define MAX_PLANE_CONVEX_POINTS 64\n"
- "int computeContactPlaneConvex(int pairIndex,\n"
- " int bodyIndexA, int bodyIndexB, \n"
- " int collidableIndexA, int collidableIndexB, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu*collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes,\n"
- " __global const float4* convexVertices,\n"
- " __global const int* convexIndices,\n"
- " __global const btGpuFace* faces,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int maxContactCapacity,\n"
- " float4 posB,\n"
- " Quaternion ornB\n"
- " )\n"
- "{\n"
- " int resultIndex=-1;\n"
- " int shapeIndex = collidables[collidableIndexB].m_shapeIndex;\n"
- " __global const ConvexPolyhedronCL* hullB = &convexShapes[shapeIndex];\n"
- " \n"
- " float4 posA;\n"
- " posA = rigidBodies[bodyIndexA].m_pos;\n"
- " Quaternion ornA;\n"
- " ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " int numContactsOut = 0;\n"
- " int numWorldVertsB1= 0;\n"
- " float4 planeEq;\n"
- " planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane;\n"
- " float4 planeNormal = make_float4(planeEq.x,planeEq.y,planeEq.z,0.f);\n"
- " float4 planeNormalWorld;\n"
- " planeNormalWorld = qtRotate(ornA,planeNormal);\n"
- " float planeConstant = planeEq.w;\n"
- " \n"
- " float4 invPosA;Quaternion invOrnA;\n"
- " float4 convexInPlaneTransPos1; Quaternion convexInPlaneTransOrn1;\n"
- " {\n"
- " \n"
- " trInverse(posA,ornA,&invPosA,&invOrnA);\n"
- " trMul(invPosA,invOrnA,posB,ornB,&convexInPlaneTransPos1,&convexInPlaneTransOrn1);\n"
- " }\n"
- " float4 invPosB;Quaternion invOrnB;\n"
- " float4 planeInConvexPos1; Quaternion planeInConvexOrn1;\n"
- " {\n"
- " \n"
- " trInverse(posB,ornB,&invPosB,&invOrnB);\n"
- " trMul(invPosB,invOrnB,posA,ornA,&planeInConvexPos1,&planeInConvexOrn1); \n"
- " }\n"
- " \n"
- " float4 planeNormalInConvex = qtRotate(planeInConvexOrn1,-planeNormal);\n"
- " float maxDot = -1e30;\n"
- " int hitVertex=-1;\n"
- " float4 hitVtx;\n"
- " float4 contactPoints[MAX_PLANE_CONVEX_POINTS];\n"
- " int numPoints = 0;\n"
- " int4 contactIdx;\n"
- " contactIdx=make_int4(0,1,2,3);\n"
- " \n"
- " \n"
- " for (int i=0;i<hullB->m_numVertices;i++)\n"
- " {\n"
- " float4 vtx = convexVertices[hullB->m_vertexOffset+i];\n"
- " float curDot = dot(vtx,planeNormalInConvex);\n"
- " if (curDot>maxDot)\n"
- " {\n"
- " hitVertex=i;\n"
- " maxDot=curDot;\n"
- " hitVtx = vtx;\n"
- " //make sure the deepest points is always included\n"
- " if (numPoints==MAX_PLANE_CONVEX_POINTS)\n"
- " numPoints--;\n"
- " }\n"
- " if (numPoints<MAX_PLANE_CONVEX_POINTS)\n"
- " {\n"
- " float4 vtxWorld = transform(&vtx, &posB, &ornB);\n"
- " float4 vtxInPlane = transform(&vtxWorld, &invPosA, &invOrnA);//oplaneTransform.inverse()*vtxWorld;\n"
- " float dist = dot(planeNormal,vtxInPlane)-planeConstant;\n"
- " if (dist<0.f)\n"
- " {\n"
- " vtxWorld.w = dist;\n"
- " contactPoints[numPoints] = vtxWorld;\n"
- " numPoints++;\n"
- " }\n"
- " }\n"
- " }\n"
- " int numReducedPoints = numPoints;\n"
- " if (numPoints>4)\n"
- " {\n"
- " numReducedPoints = extractManifoldSequential( contactPoints, numPoints, planeNormalInConvex, &contactIdx);\n"
- " }\n"
- " if (numReducedPoints>0)\n"
- " {\n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " if (dstIdx < maxContactCapacity)\n"
- " {\n"
- " resultIndex = dstIdx;\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = -planeNormalWorld;\n"
- " //c->setFrictionCoeff(0.7);\n"
- " //c->setRestituitionCoeff(0.f);\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " switch (numReducedPoints)\n"
- " {\n"
- " case 4:\n"
- " c->m_worldPosB[3] = contactPoints[contactIdx.w];\n"
- " case 3:\n"
- " c->m_worldPosB[2] = contactPoints[contactIdx.z];\n"
- " case 2:\n"
- " c->m_worldPosB[1] = contactPoints[contactIdx.y];\n"
- " case 1:\n"
- " c->m_worldPosB[0] = contactPoints[contactIdx.x];\n"
- " default:\n"
- " {\n"
- " }\n"
- " };\n"
- " \n"
- " GET_NPOINTS(*c) = numReducedPoints;\n"
- " }//if (dstIdx < numPairs)\n"
- " } \n"
- " return resultIndex;\n"
- "}\n"
- "void computeContactPlaneSphere(int pairIndex,\n"
- " int bodyIndexA, int bodyIndexB, \n"
- " int collidableIndexA, int collidableIndexB, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const btGpuFace* faces,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int maxContactCapacity)\n"
- "{\n"
- " float4 planeEq = faces[collidables[collidableIndexA].m_shapeIndex].m_plane;\n"
- " float radius = collidables[collidableIndexB].m_radius;\n"
- " float4 posA1 = rigidBodies[bodyIndexA].m_pos;\n"
- " float4 ornA1 = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 posB1 = rigidBodies[bodyIndexB].m_pos;\n"
- " float4 ornB1 = rigidBodies[bodyIndexB].m_quat;\n"
- " \n"
- " bool hasCollision = false;\n"
- " float4 planeNormal1 = make_float4(planeEq.x,planeEq.y,planeEq.z,0.f);\n"
- " float planeConstant = planeEq.w;\n"
- " float4 convexInPlaneTransPos1; Quaternion convexInPlaneTransOrn1;\n"
- " {\n"
- " float4 invPosA;Quaternion invOrnA;\n"
- " trInverse(posA1,ornA1,&invPosA,&invOrnA);\n"
- " trMul(invPosA,invOrnA,posB1,ornB1,&convexInPlaneTransPos1,&convexInPlaneTransOrn1);\n"
- " }\n"
- " float4 planeInConvexPos1; Quaternion planeInConvexOrn1;\n"
- " {\n"
- " float4 invPosB;Quaternion invOrnB;\n"
- " trInverse(posB1,ornB1,&invPosB,&invOrnB);\n"
- " trMul(invPosB,invOrnB,posA1,ornA1,&planeInConvexPos1,&planeInConvexOrn1); \n"
- " }\n"
- " float4 vtx1 = qtRotate(planeInConvexOrn1,-planeNormal1)*radius;\n"
- " float4 vtxInPlane1 = transform(&vtx1,&convexInPlaneTransPos1,&convexInPlaneTransOrn1);\n"
- " float distance = dot3F4(planeNormal1,vtxInPlane1) - planeConstant;\n"
- " hasCollision = distance < 0.f;//m_manifoldPtr->getContactBreakingThreshold();\n"
- " if (hasCollision)\n"
- " {\n"
- " float4 vtxInPlaneProjected1 = vtxInPlane1 - distance*planeNormal1;\n"
- " float4 vtxInPlaneWorld1 = transform(&vtxInPlaneProjected1,&posA1,&ornA1);\n"
- " float4 normalOnSurfaceB1 = qtRotate(ornA1,planeNormal1);\n"
- " float4 pOnB1 = vtxInPlaneWorld1+normalOnSurfaceB1*distance;\n"
- " pOnB1.w = distance;\n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " \n"
- " if (dstIdx < maxContactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = -normalOnSurfaceB1;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;\n"
- " c->m_worldPosB[0] = pOnB1;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " GET_NPOINTS(*c) = 1;\n"
- " }//if (dstIdx < numPairs)\n"
- " }//if (hasCollision)\n"
- "}\n"
- "__kernel void primitiveContactsKernel( __global int4* pairs, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int numPairs, int maxContactCapacity)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " float4 worldVertsB1[64];\n"
- " float4 worldVertsB2[64];\n"
- " int capacityWorldVerts = 64; \n"
- " float4 localContactsOut[64];\n"
- " int localContactCapacity=64;\n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " if (i<numPairs)\n"
- " {\n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_PLANE &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)\n"
- " {\n"
- " float4 posB;\n"
- " posB = rigidBodies[bodyIndexB].m_pos;\n"
- " Quaternion ornB;\n"
- " ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " int contactIndex = computeContactPlaneConvex(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,\n"
- " faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity, posB,ornB);\n"
- " if (contactIndex>=0)\n"
- " pairs[pairIndex].z = contactIndex;\n"
- " return;\n"
- " }\n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_PLANE)\n"
- " {\n"
- " float4 posA;\n"
- " posA = rigidBodies[bodyIndexA].m_pos;\n"
- " Quaternion ornA;\n"
- " ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " int contactIndex = computeContactPlaneConvex( pairIndex, bodyIndexB,bodyIndexA, collidableIndexB,collidableIndexA, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,\n"
- " faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,posA,ornA);\n"
- " if (contactIndex>=0)\n"
- " pairs[pairIndex].z = contactIndex;\n"
- " return;\n"
- " }\n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_PLANE &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)\n"
- " {\n"
- " computeContactPlaneSphere(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, \n"
- " rigidBodies,collidables,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity);\n"
- " return;\n"
- " }\n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_PLANE)\n"
- " {\n"
- " computeContactPlaneSphere( pairIndex, bodyIndexB,bodyIndexA, collidableIndexB,collidableIndexA, \n"
- " rigidBodies,collidables,\n"
- " faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity);\n"
- " return;\n"
- " }\n"
- " \n"
- " \n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_CONVEX_HULL)\n"
- " {\n"
- " \n"
- " float4 spherePos = rigidBodies[bodyIndexA].m_pos;\n"
- " float sphereRadius = collidables[collidableIndexA].m_radius;\n"
- " float4 convexPos = rigidBodies[bodyIndexB].m_pos;\n"
- " float4 convexOrn = rigidBodies[bodyIndexB].m_quat;\n"
- " computeContactSphereConvex(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,\n"
- " spherePos,sphereRadius,convexPos,convexOrn);\n"
- " return;\n"
- " }\n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_CONVEX_HULL &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)\n"
- " {\n"
- " \n"
- " float4 spherePos = rigidBodies[bodyIndexB].m_pos;\n"
- " float sphereRadius = collidables[collidableIndexB].m_radius;\n"
- " float4 convexPos = rigidBodies[bodyIndexA].m_pos;\n"
- " float4 convexOrn = rigidBodies[bodyIndexA].m_quat;\n"
- " computeContactSphereConvex(pairIndex, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,\n"
- " spherePos,sphereRadius,convexPos,convexOrn);\n"
- " return;\n"
- " }\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " \n"
- " \n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)\n"
- " {\n"
- " //sphere-sphere\n"
- " float radiusA = collidables[collidableIndexA].m_radius;\n"
- " float radiusB = collidables[collidableIndexB].m_radius;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " float4 diff = posA-posB;\n"
- " float len = length(diff);\n"
- " \n"
- " ///iff distance positive, don't generate a new contact\n"
- " if ( len <= (radiusA+radiusB))\n"
- " {\n"
- " ///distance (negative means penetration)\n"
- " float dist = len - (radiusA+radiusB);\n"
- " float4 normalOnSurfaceB = make_float4(1.f,0.f,0.f,0.f);\n"
- " if (len > 0.00001)\n"
- " {\n"
- " normalOnSurfaceB = diff / len;\n"
- " }\n"
- " float4 contactPosB = posB + normalOnSurfaceB*radiusB;\n"
- " contactPosB.w = dist;\n"
- " \n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " \n"
- " if (dstIdx < maxContactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = normalOnSurfaceB;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = pairs[pairIndex].x;\n"
- " int bodyB = pairs[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
- " c->m_worldPosB[0] = contactPosB;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " GET_NPOINTS(*c) = 1;\n"
- " }//if (dstIdx < numPairs)\n"
- " }//if ( len <= (radiusA+radiusB))\n"
- " return;\n"
- " }//SHAPE_SPHERE SHAPE_SPHERE\n"
- " }// if (i<numPairs)\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void processCompoundPairsPrimitivesKernel( __global const int4* gpuCompoundPairs,\n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global btAabbCL* aabbs,\n"
- " __global const btGpuChildShape* gpuChildShapes,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int numCompoundPairs, int maxContactCapacity\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i<numCompoundPairs)\n"
- " {\n"
- " int bodyIndexA = gpuCompoundPairs[i].x;\n"
- " int bodyIndexB = gpuCompoundPairs[i].y;\n"
- " int childShapeIndexA = gpuCompoundPairs[i].z;\n"
- " int childShapeIndexB = gpuCompoundPairs[i].w;\n"
- " \n"
- " int collidableIndexA = -1;\n"
- " int collidableIndexB = -1;\n"
- " \n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " \n"
- " float4 ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " \n"
- " if (childShapeIndexA >= 0)\n"
- " {\n"
- " collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;\n"
- " float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;\n"
- " float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;\n"
- " float4 newPosA = qtRotate(ornA,childPosA)+posA;\n"
- " float4 newOrnA = qtMul(ornA,childOrnA);\n"
- " posA = newPosA;\n"
- " ornA = newOrnA;\n"
- " } else\n"
- " {\n"
- " collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " }\n"
- " \n"
- " if (childShapeIndexB>=0)\n"
- " {\n"
- " collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " } else\n"
- " {\n"
- " collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx; \n"
- " }\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " int shapeTypeA = collidables[collidableIndexA].m_shapeType;\n"
- " int shapeTypeB = collidables[collidableIndexB].m_shapeType;\n"
- " int pairIndex = i;\n"
- " if ((shapeTypeA == SHAPE_PLANE) && (shapeTypeB==SHAPE_CONVEX_HULL))\n"
- " {\n"
- " computeContactPlaneConvex( pairIndex, bodyIndexA,bodyIndexB, collidableIndexA,collidableIndexB, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,\n"
- " faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,posB,ornB);\n"
- " return;\n"
- " }\n"
- " if ((shapeTypeA == SHAPE_CONVEX_HULL) && (shapeTypeB==SHAPE_PLANE))\n"
- " {\n"
- " computeContactPlaneConvex( pairIndex, bodyIndexB,bodyIndexA, collidableIndexB,collidableIndexA, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,\n"
- " faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,posA,ornA);\n"
- " return;\n"
- " }\n"
- " if ((shapeTypeA == SHAPE_CONVEX_HULL) && (shapeTypeB == SHAPE_SPHERE))\n"
- " {\n"
- " float4 spherePos = rigidBodies[bodyIndexB].m_pos;\n"
- " float sphereRadius = collidables[collidableIndexB].m_radius;\n"
- " float4 convexPos = posA;\n"
- " float4 convexOrn = ornA;\n"
- " \n"
- " computeContactSphereConvex(pairIndex, bodyIndexB, bodyIndexA , collidableIndexB,collidableIndexA, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,\n"
- " spherePos,sphereRadius,convexPos,convexOrn);\n"
- " \n"
- " return;\n"
- " }\n"
- " if ((shapeTypeA == SHAPE_SPHERE) && (shapeTypeB == SHAPE_CONVEX_HULL))\n"
- " {\n"
- " float4 spherePos = rigidBodies[bodyIndexA].m_pos;\n"
- " float sphereRadius = collidables[collidableIndexA].m_radius;\n"
- " float4 convexPos = posB;\n"
- " float4 convexOrn = ornB;\n"
- " \n"
- " computeContactSphereConvex(pairIndex, bodyIndexA, bodyIndexB, collidableIndexA, collidableIndexB, \n"
- " rigidBodies,collidables,convexShapes,vertices,indices,faces, globalContactsOut, nGlobalContactsOut,maxContactCapacity,\n"
- " spherePos,sphereRadius,convexPos,convexOrn);\n"
- " \n"
- " return;\n"
- " }\n"
- " }// if (i<numCompoundPairs)\n"
- "}\n"
- "bool pointInTriangle(const float4* vertices, const float4* normal, float4 *p )\n"
- "{\n"
- " const float4* p1 = &vertices[0];\n"
- " const float4* p2 = &vertices[1];\n"
- " const float4* p3 = &vertices[2];\n"
- " float4 edge1; edge1 = (*p2 - *p1);\n"
- " float4 edge2; edge2 = ( *p3 - *p2 );\n"
- " float4 edge3; edge3 = ( *p1 - *p3 );\n"
- " \n"
- " float4 p1_to_p; p1_to_p = ( *p - *p1 );\n"
- " float4 p2_to_p; p2_to_p = ( *p - *p2 );\n"
- " float4 p3_to_p; p3_to_p = ( *p - *p3 );\n"
- " float4 edge1_normal; edge1_normal = ( cross(edge1,*normal));\n"
- " float4 edge2_normal; edge2_normal = ( cross(edge2,*normal));\n"
- " float4 edge3_normal; edge3_normal = ( cross(edge3,*normal));\n"
- " \n"
- " \n"
- " float r1, r2, r3;\n"
- " r1 = dot(edge1_normal,p1_to_p );\n"
- " r2 = dot(edge2_normal,p2_to_p );\n"
- " r3 = dot(edge3_normal,p3_to_p );\n"
- " \n"
- " if ( r1 > 0 && r2 > 0 && r3 > 0 )\n"
- " return true;\n"
- " if ( r1 <= 0 && r2 <= 0 && r3 <= 0 ) \n"
- " return true;\n"
- " return false;\n"
- "}\n"
- "float segmentSqrDistance(float4 from, float4 to,float4 p, float4* nearest) \n"
- "{\n"
- " float4 diff = p - from;\n"
- " float4 v = to - from;\n"
- " float t = dot(v,diff);\n"
- " \n"
- " if (t > 0) \n"
- " {\n"
- " float dotVV = dot(v,v);\n"
- " if (t < dotVV) \n"
- " {\n"
- " t /= dotVV;\n"
- " diff -= t*v;\n"
- " } else \n"
- " {\n"
- " t = 1;\n"
- " diff -= v;\n"
- " }\n"
- " } else\n"
- " {\n"
- " t = 0;\n"
- " }\n"
- " *nearest = from + t*v;\n"
- " return dot(diff,diff); \n"
- "}\n"
- "void computeContactSphereTriangle(int pairIndex,\n"
- " int bodyIndexA, int bodyIndexB,\n"
- " int collidableIndexA, int collidableIndexB, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " const float4* triangleVertices,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int maxContactCapacity,\n"
- " float4 spherePos2,\n"
- " float radius,\n"
- " float4 pos,\n"
- " float4 quat,\n"
- " int faceIndex\n"
- " )\n"
- "{\n"
- " float4 invPos;\n"
- " float4 invOrn;\n"
- " trInverse(pos,quat, &invPos,&invOrn);\n"
- " float4 spherePos = transform(&spherePos2,&invPos,&invOrn);\n"
- " int numFaces = 3;\n"
- " float4 closestPnt = (float4)(0, 0, 0, 0);\n"
- " float4 hitNormalWorld = (float4)(0, 0, 0, 0);\n"
- " float minDist = -1000000.f;\n"
- " bool bCollide = false;\n"
- " \n"
- " //////////////////////////////////////\n"
- " float4 sphereCenter;\n"
- " sphereCenter = spherePos;\n"
- " const float4* vertices = triangleVertices;\n"
- " float contactBreakingThreshold = 0.f;//todo?\n"
- " float radiusWithThreshold = radius + contactBreakingThreshold;\n"
- " float4 edge10;\n"
- " edge10 = vertices[1]-vertices[0];\n"
- " edge10.w = 0.f;//is this needed?\n"
- " float4 edge20;\n"
- " edge20 = vertices[2]-vertices[0];\n"
- " edge20.w = 0.f;//is this needed?\n"
- " float4 normal = cross3(edge10,edge20);\n"
- " normal = normalize(normal);\n"
- " float4 p1ToCenter;\n"
- " p1ToCenter = sphereCenter - vertices[0];\n"
- " \n"
- " float distanceFromPlane = dot(p1ToCenter,normal);\n"
- " if (distanceFromPlane < 0.f)\n"
- " {\n"
- " //triangle facing the other way\n"
- " distanceFromPlane *= -1.f;\n"
- " normal *= -1.f;\n"
- " }\n"
- " hitNormalWorld = normal;\n"
- " bool isInsideContactPlane = distanceFromPlane < radiusWithThreshold;\n"
- " \n"
- " // Check for contact / intersection\n"
- " bool hasContact = false;\n"
- " float4 contactPoint;\n"
- " if (isInsideContactPlane) \n"
- " {\n"
- " \n"
- " if (pointInTriangle(vertices,&normal, &sphereCenter)) \n"
- " {\n"
- " // Inside the contact wedge - touches a point on the shell plane\n"
- " hasContact = true;\n"
- " contactPoint = sphereCenter - normal*distanceFromPlane;\n"
- " \n"
- " } else {\n"
- " // Could be inside one of the contact capsules\n"
- " float contactCapsuleRadiusSqr = radiusWithThreshold*radiusWithThreshold;\n"
- " float4 nearestOnEdge;\n"
- " int numEdges = 3;\n"
- " for (int i = 0; i < numEdges; i++) \n"
- " {\n"
- " float4 pa =vertices[i];\n"
- " float4 pb = vertices[(i+1)%3];\n"
- " float distanceSqr = segmentSqrDistance(pa,pb,sphereCenter, &nearestOnEdge);\n"
- " if (distanceSqr < contactCapsuleRadiusSqr) \n"
- " {\n"
- " // Yep, we're inside a capsule\n"
- " hasContact = true;\n"
- " contactPoint = nearestOnEdge;\n"
- " \n"
- " }\n"
- " \n"
- " }\n"
- " }\n"
- " }\n"
- " if (hasContact) \n"
- " {\n"
- " closestPnt = contactPoint;\n"
- " float4 contactToCenter = sphereCenter - contactPoint;\n"
- " minDist = length(contactToCenter);\n"
- " if (minDist>FLT_EPSILON)\n"
- " {\n"
- " hitNormalWorld = normalize(contactToCenter);//*(1./minDist);\n"
- " bCollide = true;\n"
- " }\n"
- " \n"
- " }\n"
- " /////////////////////////////////////\n"
- " if (bCollide && minDist > -10000)\n"
- " {\n"
- " \n"
- " float4 normalOnSurfaceB1 = qtRotate(quat,-hitNormalWorld);\n"
- " float4 pOnB1 = transform(&closestPnt,&pos,&quat);\n"
- " float actualDepth = minDist-radius;\n"
- " \n"
- " if (actualDepth<=0.f)\n"
- " {\n"
- " pOnB1.w = actualDepth;\n"
- " int dstIdx;\n"
- " \n"
- " float lenSqr = dot3F4(normalOnSurfaceB1,normalOnSurfaceB1);\n"
- " if (lenSqr>FLT_EPSILON)\n"
- " {\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " \n"
- " if (dstIdx < maxContactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = -normalOnSurfaceB1;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyIndexA].m_invMass==0?-bodyIndexA:bodyIndexA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyIndexB].m_invMass==0?-bodyIndexB:bodyIndexB;\n"
- " c->m_worldPosB[0] = pOnB1;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = faceIndex;\n"
- " GET_NPOINTS(*c) = 1;\n"
- " } \n"
- " }\n"
- " }\n"
- " }//if (hasCollision)\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void findConcaveSphereContactsKernel( __global int4* concavePairs,\n"
- " __global const BodyData* rigidBodies,\n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global btAabbCL* aabbs,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int numConcavePairs, int maxContactCapacity\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numConcavePairs)\n"
- " return;\n"
- " int pairIdx = i;\n"
- " int bodyIndexA = concavePairs[i].x;\n"
- " int bodyIndexB = concavePairs[i].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " if (collidables[collidableIndexB].m_shapeType==SHAPE_SPHERE)\n"
- " {\n"
- " int f = concavePairs[i].z;\n"
- " btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];\n"
- " \n"
- " float4 verticesA[3];\n"
- " for (int i=0;i<3;i++)\n"
- " {\n"
- " int index = indices[face.m_indexOffset+i];\n"
- " float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];\n"
- " verticesA[i] = vert;\n"
- " }\n"
- " float4 spherePos = rigidBodies[bodyIndexB].m_pos;\n"
- " float sphereRadius = collidables[collidableIndexB].m_radius;\n"
- " float4 convexPos = rigidBodies[bodyIndexA].m_pos;\n"
- " float4 convexOrn = rigidBodies[bodyIndexA].m_quat;\n"
- " computeContactSphereTriangle(i, bodyIndexB, bodyIndexA, collidableIndexB, collidableIndexA, \n"
- " rigidBodies,collidables,\n"
- " verticesA,\n"
- " globalContactsOut, nGlobalContactsOut,maxContactCapacity,\n"
- " spherePos,sphereRadius,convexPos,convexOrn, f);\n"
- " return;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/sat.cl b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/sat.cl
deleted file mode 100644
index a6565fd6fa..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/sat.cl
+++ /dev/null
@@ -1,2018 +0,0 @@
-//keep this enum in sync with the CPU version (in btCollidable.h)
-//written by Erwin Coumans
-
-
-#define SHAPE_CONVEX_HULL 3
-#define SHAPE_CONCAVE_TRIMESH 5
-#define TRIANGLE_NUM_CONVEX_FACES 5
-#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6
-
-#define B3_MAX_STACK_DEPTH 256
-
-
-typedef unsigned int u32;
-
-///keep this in sync with btCollidable.h
-typedef struct
-{
- union {
- int m_numChildShapes;
- int m_bvhIndex;
- };
- union
- {
- float m_radius;
- int m_compoundBvhIndex;
- };
-
- int m_shapeType;
- int m_shapeIndex;
-
-} btCollidableGpu;
-
-#define MAX_NUM_PARTS_IN_BITS 10
-
-///b3QuantizedBvhNode is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-typedef struct
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes
- int m_escapeIndexOrTriangleIndex;
-} b3QuantizedBvhNode;
-
-typedef struct
-{
- float4 m_aabbMin;
- float4 m_aabbMax;
- float4 m_quantization;
- int m_numNodes;
- int m_numSubTrees;
- int m_nodeOffset;
- int m_subTreeOffset;
-
-} b3BvhInfo;
-
-
-int getTriangleIndex(const b3QuantizedBvhNode* rootNode)
-{
- unsigned int x=0;
- unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (rootNode->m_escapeIndexOrTriangleIndex&~(y));
-}
-
-int getTriangleIndexGlobal(__global const b3QuantizedBvhNode* rootNode)
-{
- unsigned int x=0;
- unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (rootNode->m_escapeIndexOrTriangleIndex&~(y));
-}
-
-int isLeafNode(const b3QuantizedBvhNode* rootNode)
-{
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;
-}
-
-int isLeafNodeGlobal(__global const b3QuantizedBvhNode* rootNode)
-{
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;
-}
-
-int getEscapeIndex(const b3QuantizedBvhNode* rootNode)
-{
- return -rootNode->m_escapeIndexOrTriangleIndex;
-}
-
-int getEscapeIndexGlobal(__global const b3QuantizedBvhNode* rootNode)
-{
- return -rootNode->m_escapeIndexOrTriangleIndex;
-}
-
-
-typedef struct
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes, points to the root of the subtree
- int m_rootNodeIndex;
- //4 bytes
- int m_subtreeSize;
- int m_padding[3];
-} b3BvhSubtreeInfo;
-
-
-
-
-
-
-
-typedef struct
-{
- float4 m_childPosition;
- float4 m_childOrientation;
- int m_shapeIndex;
- int m_unused0;
- int m_unused1;
- int m_unused2;
-} btGpuChildShape;
-
-
-typedef struct
-{
- float4 m_pos;
- float4 m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_collidableIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} BodyData;
-
-
-typedef struct
-{
- float4 m_localCenter;
- float4 m_extents;
- float4 mC;
- float4 mE;
-
- float m_radius;
- int m_faceOffset;
- int m_numFaces;
- int m_numVertices;
-
- int m_vertexOffset;
- int m_uniqueEdgesOffset;
- int m_numUniqueEdges;
- int m_unused;
-} ConvexPolyhedronCL;
-
-typedef struct
-{
- union
- {
- float4 m_min;
- float m_minElems[4];
- int m_minIndices[4];
- };
- union
- {
- float4 m_max;
- float m_maxElems[4];
- int m_maxIndices[4];
- };
-} btAabbCL;
-
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Common/shared/b3Int2.h"
-
-
-
-typedef struct
-{
- float4 m_plane;
- int m_indexOffset;
- int m_numIndices;
-} btGpuFace;
-
-#define make_float4 (float4)
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-
-
-// float4 a1 = make_float4(a.xyz,0.f);
-// float4 b1 = make_float4(b.xyz,0.f);
-
-// return cross(a1,b1);
-
-//float4 c = make_float4(a.y*b.z - a.z*b.y,a.z*b.x - a.x*b.z,a.x*b.y - a.y*b.x,0.f);
-
- // float4 c = make_float4(a.y*b.z - a.z*b.y,1.f,a.x*b.y - a.y*b.x,0.f);
-
- //return c;
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- v = make_float4(v.xyz,0.f);
- return fast_normalize(v);
-}
-
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-__inline
-float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)
-{
- return qtRotate( *orientation, *p ) + (*translation);
-}
-
-
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-}
-
-inline void projectLocal(const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn,
-const float4* dir, const float4* vertices, float* min, float* max)
-{
- min[0] = FLT_MAX;
- max[0] = -FLT_MAX;
- int numVerts = hull->m_numVertices;
-
- const float4 localDir = qtInvRotate(orn,*dir);
- float offset = dot(pos,*dir);
- for(int i=0;i<numVerts;i++)
- {
- float dp = dot(vertices[hull->m_vertexOffset+i],localDir);
- if(dp < min[0])
- min[0] = dp;
- if(dp > max[0])
- max[0] = dp;
- }
- if(min[0]>max[0])
- {
- float tmp = min[0];
- min[0] = max[0];
- max[0] = tmp;
- }
- min[0] += offset;
- max[0] += offset;
-}
-
-inline void project(__global const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn,
-const float4* dir, __global const float4* vertices, float* min, float* max)
-{
- min[0] = FLT_MAX;
- max[0] = -FLT_MAX;
- int numVerts = hull->m_numVertices;
-
- const float4 localDir = qtInvRotate(orn,*dir);
- float offset = dot(pos,*dir);
- for(int i=0;i<numVerts;i++)
- {
- float dp = dot(vertices[hull->m_vertexOffset+i],localDir);
- if(dp < min[0])
- min[0] = dp;
- if(dp > max[0])
- max[0] = dp;
- }
- if(min[0]>max[0])
- {
- float tmp = min[0];
- min[0] = max[0];
- max[0] = tmp;
- }
- min[0] += offset;
- max[0] += offset;
-}
-
-inline bool TestSepAxisLocalA(const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA,const float4 ornA,
- const float4 posB,const float4 ornB,
- float4* sep_axis, const float4* verticesA, __global const float4* verticesB,float* depth)
-{
- float Min0,Max0;
- float Min1,Max1;
- projectLocal(hullA,posA,ornA,sep_axis,verticesA, &Min0, &Max0);
- project(hullB,posB,ornB, sep_axis,verticesB, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- *depth = d0<d1 ? d0:d1;
- return true;
-}
-
-
-
-
-inline bool IsAlmostZero(const float4 v)
-{
- if(fabs(v.x)>1e-6f || fabs(v.y)>1e-6f || fabs(v.z)>1e-6f)
- return false;
- return true;
-}
-
-
-
-bool findSeparatingAxisLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
-
- const float4* verticesA,
- const float4* uniqueEdgesA,
- const btGpuFace* facesA,
- const int* indicesA,
-
- __global const float4* verticesB,
- __global const float4* uniqueEdgesB,
- __global const btGpuFace* facesB,
- __global const int* indicesB,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
- int curPlaneTests=0;
- {
- int numFacesA = hullA->m_numFaces;
- // Test normals from hullA
- for(int i=0;i<numFacesA;i++)
- {
- const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;
- float4 faceANormalWS = qtRotate(ornA,normal);
- if (dot3F4(DeltaC2,faceANormalWS)<0)
- faceANormalWS*=-1.f;
- curPlaneTests++;
- float d;
- if(!TestSepAxisLocalA( hullA, hullB, posA,ornA,posB,ornB,&faceANormalWS, verticesA, verticesB,&d))
- return false;
- if(d<*dmin)
- {
- *dmin = d;
- *sep = faceANormalWS;
- }
- }
- }
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-bool findSeparatingAxisLocalB( __global const ConvexPolyhedronCL* hullA, const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- __global const float4* verticesA,
- __global const float4* uniqueEdgesA,
- __global const btGpuFace* facesA,
- __global const int* indicesA,
- const float4* verticesB,
- const float4* uniqueEdgesB,
- const btGpuFace* facesB,
- const int* indicesB,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
- int curPlaneTests=0;
- {
- int numFacesA = hullA->m_numFaces;
- // Test normals from hullA
- for(int i=0;i<numFacesA;i++)
- {
- const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;
- float4 faceANormalWS = qtRotate(ornA,normal);
- if (dot3F4(DeltaC2,faceANormalWS)<0)
- faceANormalWS *= -1.f;
- curPlaneTests++;
- float d;
- if(!TestSepAxisLocalA( hullB, hullA, posB,ornB,posA,ornA, &faceANormalWS, verticesB,verticesA, &d))
- return false;
- if(d<*dmin)
- {
- *dmin = d;
- *sep = faceANormalWS;
- }
- }
- }
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-
-bool findSeparatingAxisEdgeEdgeLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- const float4* verticesA,
- const float4* uniqueEdgesA,
- const btGpuFace* facesA,
- const int* indicesA,
- __global const float4* verticesB,
- __global const float4* uniqueEdgesB,
- __global const btGpuFace* facesB,
- __global const int* indicesB,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test edges
- for(int e0=0;e0<hullA->m_numUniqueEdges;e0++)
- {
- const float4 edge0 = uniqueEdgesA[hullA->m_uniqueEdgesOffset+e0];
- float4 edge0World = qtRotate(ornA,edge0);
-
- for(int e1=0;e1<hullB->m_numUniqueEdges;e1++)
- {
- const float4 edge1 = uniqueEdgesB[hullB->m_uniqueEdgesOffset+e1];
- float4 edge1World = qtRotate(ornB,edge1);
-
-
- float4 crossje = cross3(edge0World,edge1World);
-
- curEdgeEdge++;
- if(!IsAlmostZero(crossje))
- {
- crossje = normalize3(crossje);
- if (dot3F4(DeltaC2,crossje)<0)
- crossje *= -1.f;
-
- float dist;
- bool result = true;
- {
- float Min0,Max0;
- float Min1,Max1;
- projectLocal(hullA,posA,ornA,&crossje,verticesA, &Min0, &Max0);
- project(hullB,posB,ornB,&crossje,verticesB, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- result = false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0<d1 ? d0:d1;
- result = true;
-
- }
-
-
- if(dist<*dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
-
- }
-
-
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-inline bool TestSepAxis(__global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA,const float4 ornA,
- const float4 posB,const float4 ornB,
- float4* sep_axis, __global const float4* vertices,float* depth)
-{
- float Min0,Max0;
- float Min1,Max1;
- project(hullA,posA,ornA,sep_axis,vertices, &Min0, &Max0);
- project(hullB,posB,ornB, sep_axis,vertices, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- *depth = d0<d1 ? d0:d1;
- return true;
-}
-
-
-bool findSeparatingAxis( __global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- int curPlaneTests=0;
-
- {
- int numFacesA = hullA->m_numFaces;
- // Test normals from hullA
- for(int i=0;i<numFacesA;i++)
- {
- const float4 normal = faces[hullA->m_faceOffset+i].m_plane;
- float4 faceANormalWS = qtRotate(ornA,normal);
-
- if (dot3F4(DeltaC2,faceANormalWS)<0)
- faceANormalWS*=-1.f;
-
- curPlaneTests++;
-
- float d;
- if(!TestSepAxis( hullA, hullB, posA,ornA,posB,ornB,&faceANormalWS, vertices,&d))
- return false;
-
- if(d<*dmin)
- {
- *dmin = d;
- *sep = faceANormalWS;
- }
- }
- }
-
-
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
-
- return true;
-}
-
-
-
-
-bool findSeparatingAxisUnitSphere( __global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- __global const float4* vertices,
- __global const float4* unitSphereDirections,
- int numUnitSphereDirections,
- float4* sep,
- float* dmin)
-{
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test unit sphere directions
- for (int i=0;i<numUnitSphereDirections;i++)
- {
-
- float4 crossje;
- crossje = unitSphereDirections[i];
-
- if (dot3F4(DeltaC2,crossje)>0)
- crossje *= -1.f;
- {
- float dist;
- bool result = true;
- float Min0,Max0;
- float Min1,Max1;
- project(hullA,posA,ornA,&crossje,vertices, &Min0, &Max0);
- project(hullB,posB,ornB,&crossje,vertices, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0<d1 ? d0:d1;
- result = true;
-
- if(dist<*dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
-
-
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-bool findSeparatingAxisEdgeEdge( __global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test edges
- for(int e0=0;e0<hullA->m_numUniqueEdges;e0++)
- {
- const float4 edge0 = uniqueEdges[hullA->m_uniqueEdgesOffset+e0];
- float4 edge0World = qtRotate(ornA,edge0);
-
- for(int e1=0;e1<hullB->m_numUniqueEdges;e1++)
- {
- const float4 edge1 = uniqueEdges[hullB->m_uniqueEdgesOffset+e1];
- float4 edge1World = qtRotate(ornB,edge1);
-
-
- float4 crossje = cross3(edge0World,edge1World);
-
- curEdgeEdge++;
- if(!IsAlmostZero(crossje))
- {
- crossje = normalize3(crossje);
- if (dot3F4(DeltaC2,crossje)<0)
- crossje*=-1.f;
-
- float dist;
- bool result = true;
- {
- float Min0,Max0;
- float Min1,Max1;
- project(hullA,posA,ornA,&crossje,vertices, &Min0, &Max0);
- project(hullB,posB,ornB,&crossje,vertices, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0<d1 ? d0:d1;
- result = true;
-
- }
-
-
- if(dist<*dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
-
- }
-
-
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-// work-in-progress
-__kernel void processCompoundPairsKernel( __global const int4* gpuCompoundPairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global btAabbCL* aabbs,
- __global const btGpuChildShape* gpuChildShapes,
- __global volatile float4* gpuCompoundSepNormalsOut,
- __global volatile int* gpuHasCompoundSepNormalsOut,
- int numCompoundPairs
- )
-{
-
- int i = get_global_id(0);
- if (i<numCompoundPairs)
- {
- int bodyIndexA = gpuCompoundPairs[i].x;
- int bodyIndexB = gpuCompoundPairs[i].y;
-
- int childShapeIndexA = gpuCompoundPairs[i].z;
- int childShapeIndexB = gpuCompoundPairs[i].w;
-
- int collidableIndexA = -1;
- int collidableIndexB = -1;
-
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
-
- float4 ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- if (childShapeIndexA >= 0)
- {
- collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = qtRotate(ornA,childPosA)+posA;
- float4 newOrnA = qtMul(ornA,childOrnA);
- posA = newPosA;
- ornA = newOrnA;
- } else
- {
- collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- }
-
- if (childShapeIndexB>=0)
- {
- collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- } else
- {
- collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
- }
-
- gpuHasCompoundSepNormalsOut[i] = 0;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- int shapeTypeA = collidables[collidableIndexA].m_shapeType;
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
-
-
- if ((shapeTypeA != SHAPE_CONVEX_HULL) || (shapeTypeB != SHAPE_CONVEX_HULL))
- {
- return;
- }
-
- int hasSeparatingAxis = 5;
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- float dmin = FLT_MAX;
- posA.w = 0.f;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- float4 sepNormal = make_float4(1,0,0,0);
- bool sepA = findSeparatingAxis( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,posB,ornB,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);
- hasSeparatingAxis = 4;
- if (!sepA)
- {
- hasSeparatingAxis = 0;
- } else
- {
- bool sepB = findSeparatingAxis( &convexShapes[shapeIndexB],&convexShapes[shapeIndexA],posB,ornB,posA,ornA,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);
-
- if (!sepB)
- {
- hasSeparatingAxis = 0;
- } else//(!sepB)
- {
- bool sepEE = findSeparatingAxisEdgeEdge( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,posB,ornB,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);
- if (sepEE)
- {
- gpuCompoundSepNormalsOut[i] = sepNormal;//fastNormalize4(sepNormal);
- gpuHasCompoundSepNormalsOut[i] = 1;
- }//sepEE
- }//(!sepB)
- }//(!sepA)
-
-
- }
-
-}
-
-
-inline b3Float4 MyUnQuantize(const unsigned short* vecIn, b3Float4 quantization, b3Float4 bvhAabbMin)
-{
- b3Float4 vecOut;
- vecOut = b3MakeFloat4(
- (float)(vecIn[0]) / (quantization.x),
- (float)(vecIn[1]) / (quantization.y),
- (float)(vecIn[2]) / (quantization.z),
- 0.f);
-
- vecOut += bvhAabbMin;
- return vecOut;
-}
-
-inline b3Float4 MyUnQuantizeGlobal(__global const unsigned short* vecIn, b3Float4 quantization, b3Float4 bvhAabbMin)
-{
- b3Float4 vecOut;
- vecOut = b3MakeFloat4(
- (float)(vecIn[0]) / (quantization.x),
- (float)(vecIn[1]) / (quantization.y),
- (float)(vecIn[2]) / (quantization.z),
- 0.f);
-
- vecOut += bvhAabbMin;
- return vecOut;
-}
-
-
-// work-in-progress
-__kernel void findCompoundPairsKernel( __global const int4* pairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global b3Aabb_t* aabbLocalSpace,
- __global const btGpuChildShape* gpuChildShapes,
- __global volatile int4* gpuCompoundPairsOut,
- __global volatile int* numCompoundPairsOut,
- __global const b3BvhSubtreeInfo* subtrees,
- __global const b3QuantizedBvhNode* quantizedNodes,
- __global const b3BvhInfo* bvhInfos,
- int numPairs,
- int maxNumCompoundPairsCapacity
- )
-{
-
- int i = get_global_id(0);
-
- if (i<numPairs)
- {
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))
- {
- return;
- }
-
- if ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) &&(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))
- {
- int bvhA = collidables[collidableIndexA].m_compoundBvhIndex;
- int bvhB = collidables[collidableIndexB].m_compoundBvhIndex;
- int numSubTreesA = bvhInfos[bvhA].m_numSubTrees;
- int subTreesOffsetA = bvhInfos[bvhA].m_subTreeOffset;
- int subTreesOffsetB = bvhInfos[bvhB].m_subTreeOffset;
-
-
- int numSubTreesB = bvhInfos[bvhB].m_numSubTrees;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- b3Quat ornA = rigidBodies[bodyIndexA].m_quat;
-
- b3Quat ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
-
- for (int p=0;p<numSubTreesA;p++)
- {
- b3BvhSubtreeInfo subtreeA = subtrees[subTreesOffsetA+p];
- //bvhInfos[bvhA].m_quantization
- b3Float4 treeAminLocal = MyUnQuantize(subtreeA.m_quantizedAabbMin,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);
- b3Float4 treeAmaxLocal = MyUnQuantize(subtreeA.m_quantizedAabbMax,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);
-
- b3Float4 aabbAMinOut,aabbAMaxOut;
- float margin=0.f;
- b3TransformAabb2(treeAminLocal,treeAmaxLocal, margin,posA,ornA,&aabbAMinOut,&aabbAMaxOut);
-
- for (int q=0;q<numSubTreesB;q++)
- {
- b3BvhSubtreeInfo subtreeB = subtrees[subTreesOffsetB+q];
-
- b3Float4 treeBminLocal = MyUnQuantize(subtreeB.m_quantizedAabbMin,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);
- b3Float4 treeBmaxLocal = MyUnQuantize(subtreeB.m_quantizedAabbMax,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);
-
- b3Float4 aabbBMinOut,aabbBMaxOut;
- float margin=0.f;
- b3TransformAabb2(treeBminLocal,treeBmaxLocal, margin,posB,ornB,&aabbBMinOut,&aabbBMaxOut);
-
-
-
- bool aabbOverlap = b3TestAabbAgainstAabb(aabbAMinOut,aabbAMaxOut,aabbBMinOut,aabbBMaxOut);
- if (aabbOverlap)
- {
-
- int startNodeIndexA = subtreeA.m_rootNodeIndex+bvhInfos[bvhA].m_nodeOffset;
- int endNodeIndexA = startNodeIndexA+subtreeA.m_subtreeSize;
-
- int startNodeIndexB = subtreeB.m_rootNodeIndex+bvhInfos[bvhB].m_nodeOffset;
- int endNodeIndexB = startNodeIndexB+subtreeB.m_subtreeSize;
-
-
- b3Int2 nodeStack[B3_MAX_STACK_DEPTH];
- b3Int2 node0;
- node0.x = startNodeIndexA;
- node0.y = startNodeIndexB;
- int maxStackDepth = B3_MAX_STACK_DEPTH;
- int depth=0;
- nodeStack[depth++]=node0;
-
- do
- {
- b3Int2 node = nodeStack[--depth];
-
- b3Float4 aMinLocal = MyUnQuantizeGlobal(quantizedNodes[node.x].m_quantizedAabbMin,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);
- b3Float4 aMaxLocal = MyUnQuantizeGlobal(quantizedNodes[node.x].m_quantizedAabbMax,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);
-
- b3Float4 bMinLocal = MyUnQuantizeGlobal(quantizedNodes[node.y].m_quantizedAabbMin,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);
- b3Float4 bMaxLocal = MyUnQuantizeGlobal(quantizedNodes[node.y].m_quantizedAabbMax,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);
-
- float margin=0.f;
- b3Float4 aabbAMinOut,aabbAMaxOut;
- b3TransformAabb2(aMinLocal,aMaxLocal, margin,posA,ornA,&aabbAMinOut,&aabbAMaxOut);
-
- b3Float4 aabbBMinOut,aabbBMaxOut;
- b3TransformAabb2(bMinLocal,bMaxLocal, margin,posB,ornB,&aabbBMinOut,&aabbBMaxOut);
-
-
- bool nodeOverlap = b3TestAabbAgainstAabb(aabbAMinOut,aabbAMaxOut,aabbBMinOut,aabbBMaxOut);
- if (nodeOverlap)
- {
- bool isLeafA = isLeafNodeGlobal(&quantizedNodes[node.x]);
- bool isLeafB = isLeafNodeGlobal(&quantizedNodes[node.y]);
- bool isInternalA = !isLeafA;
- bool isInternalB = !isLeafB;
-
- //fail, even though it might hit two leaf nodes
- if (depth+4>maxStackDepth && !(isLeafA && isLeafB))
- {
- //printf("Error: traversal exceeded maxStackDepth");
- continue;
- }
-
- if(isInternalA)
- {
- int nodeAleftChild = node.x+1;
- bool isNodeALeftChildLeaf = isLeafNodeGlobal(&quantizedNodes[node.x+1]);
- int nodeArightChild = isNodeALeftChildLeaf? node.x+2 : node.x+1 + getEscapeIndexGlobal(&quantizedNodes[node.x+1]);
-
- if(isInternalB)
- {
- int nodeBleftChild = node.y+1;
- bool isNodeBLeftChildLeaf = isLeafNodeGlobal(&quantizedNodes[node.y+1]);
- int nodeBrightChild = isNodeBLeftChildLeaf? node.y+2 : node.y+1 + getEscapeIndexGlobal(&quantizedNodes[node.y+1]);
-
- nodeStack[depth++] = b3MakeInt2(nodeAleftChild, nodeBleftChild);
- nodeStack[depth++] = b3MakeInt2(nodeArightChild, nodeBleftChild);
- nodeStack[depth++] = b3MakeInt2(nodeAleftChild, nodeBrightChild);
- nodeStack[depth++] = b3MakeInt2(nodeArightChild, nodeBrightChild);
- }
- else
- {
- nodeStack[depth++] = b3MakeInt2(nodeAleftChild,node.y);
- nodeStack[depth++] = b3MakeInt2(nodeArightChild,node.y);
- }
- }
- else
- {
- if(isInternalB)
- {
- int nodeBleftChild = node.y+1;
- bool isNodeBLeftChildLeaf = isLeafNodeGlobal(&quantizedNodes[node.y+1]);
- int nodeBrightChild = isNodeBLeftChildLeaf? node.y+2 : node.y+1 + getEscapeIndexGlobal(&quantizedNodes[node.y+1]);
- nodeStack[depth++] = b3MakeInt2(node.x,nodeBleftChild);
- nodeStack[depth++] = b3MakeInt2(node.x,nodeBrightChild);
- }
- else
- {
- int compoundPairIdx = atomic_inc(numCompoundPairsOut);
- if (compoundPairIdx<maxNumCompoundPairsCapacity)
- {
- int childShapeIndexA = getTriangleIndexGlobal(&quantizedNodes[node.x]);
- int childShapeIndexB = getTriangleIndexGlobal(&quantizedNodes[node.y]);
- gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,childShapeIndexA,childShapeIndexB);
- }
- }
- }
- }
- } while (depth);
- }
- }
- }
-
- return;
- }
-
-
-
-
-
- if ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) ||(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))
- {
-
- if (collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
-
- int numChildrenA = collidables[collidableIndexA].m_numChildShapes;
- for (int c=0;c<numChildrenA;c++)
- {
- int childShapeIndexA = collidables[collidableIndexA].m_shapeIndex+c;
- int childColIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = qtRotate(ornA,childPosA)+posA;
- float4 newOrnA = qtMul(ornA,childOrnA);
-
- int shapeIndexA = collidables[childColIndexA].m_shapeIndex;
- b3Aabb_t aabbAlocal = aabbLocalSpace[shapeIndexA];
- float margin = 0.f;
-
- b3Float4 aabbAMinWS;
- b3Float4 aabbAMaxWS;
-
- b3TransformAabb2(aabbAlocal.m_minVec,aabbAlocal.m_maxVec,margin,
- newPosA,
- newOrnA,
- &aabbAMinWS,&aabbAMaxWS);
-
-
- if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- for (int b=0;b<numChildrenB;b++)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+b;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
-
- int shapeIndexB = collidables[childColIndexB].m_shapeIndex;
- b3Aabb_t aabbBlocal = aabbLocalSpace[shapeIndexB];
-
- b3Float4 aabbBMinWS;
- b3Float4 aabbBMaxWS;
-
- b3TransformAabb2(aabbBlocal.m_minVec,aabbBlocal.m_maxVec,margin,
- newPosB,
- newOrnB,
- &aabbBMinWS,&aabbBMaxWS);
-
-
-
- bool aabbOverlap = b3TestAabbAgainstAabb(aabbAMinWS,aabbAMaxWS,aabbBMinWS,aabbBMaxWS);
- if (aabbOverlap)
- {
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- float dmin = FLT_MAX;
- float4 posA = newPosA;
- posA.w = 0.f;
- float4 posB = newPosB;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = newOrnA;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB =newOrnB;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
-
- {//
- int compoundPairIdx = atomic_inc(numCompoundPairsOut);
- if (compoundPairIdx<maxNumCompoundPairsCapacity)
- {
- gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,childShapeIndexA,childShapeIndexB);
- }
- }//
- }//fi(1)
- } //for (int b=0
- }//if (collidables[collidableIndexB].
- else//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- if (1)
- {
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- float dmin = FLT_MAX;
- float4 posA = newPosA;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = newOrnA;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB = rigidBodies[bodyIndexB].m_quat;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
-
- {
- int compoundPairIdx = atomic_inc(numCompoundPairsOut);
- if (compoundPairIdx<maxNumCompoundPairsCapacity)
- {
- gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,childShapeIndexA,-1);
- }//if (compoundPairIdx<maxNumCompoundPairsCapacity)
- }//
- }//fi (1)
- }//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- }//for (int b=0;b<numChildrenB;b++)
- return;
- }//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONCAVE_TRIMESH)
- && (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))
- {
- int numChildrenB = collidables[collidableIndexB].m_numChildShapes;
- for (int b=0;b<numChildrenB;b++)
- {
- int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+b;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = qtRotate(ornB,childPosB)+posB;
- float4 newOrnB = qtMul(ornB,childOrnB);
-
- int shapeIndexB = collidables[childColIndexB].m_shapeIndex;
-
-
- //////////////////////////////////////
-
- if (1)
- {
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- float dmin = FLT_MAX;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = newPosB;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB =newOrnB;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- {//
- int compoundPairIdx = atomic_inc(numCompoundPairsOut);
- if (compoundPairIdx<maxNumCompoundPairsCapacity)
- {
- gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,-1,childShapeIndexB);
- }//fi (compoundPairIdx<maxNumCompoundPairsCapacity)
- }//
- }//fi (1)
- }//for (int b=0;b<numChildrenB;b++)
- return;
- }//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- return;
- }//fi ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) ||(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))
- }//i<numPairs
-}
-
-// work-in-progress
-__kernel void findSeparatingAxisKernel( __global const int4* pairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global btAabbCL* aabbs,
- __global volatile float4* separatingNormals,
- __global volatile int* hasSeparatingAxis,
- int numPairs
- )
-{
-
- int i = get_global_id(0);
-
- if (i<numPairs)
- {
-
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))
- {
- hasSeparatingAxis[i] = 0;
- return;
- }
-
-
- if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONVEX_HULL) ||(collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL))
- {
- hasSeparatingAxis[i] = 0;
- return;
- }
-
- if ((collidables[collidableIndexA].m_shapeType==SHAPE_CONCAVE_TRIMESH))
- {
- hasSeparatingAxis[i] = 0;
- return;
- }
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
-
- float dmin = FLT_MAX;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- float4 sepNormal;
-
- bool sepA = findSeparatingAxis( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,
- posB,ornB,
- DeltaC2,
- vertices,uniqueEdges,faces,
- indices,&sepNormal,&dmin);
- hasSeparatingAxis[i] = 4;
- if (!sepA)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- bool sepB = findSeparatingAxis( &convexShapes[shapeIndexB],&convexShapes[shapeIndexA],posB,ornB,
- posA,ornA,
- DeltaC2,
- vertices,uniqueEdges,faces,
- indices,&sepNormal,&dmin);
-
- if (!sepB)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- bool sepEE = findSeparatingAxisEdgeEdge( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,
- posB,ornB,
- DeltaC2,
- vertices,uniqueEdges,faces,
- indices,&sepNormal,&dmin);
- if (!sepEE)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- hasSeparatingAxis[i] = 1;
- separatingNormals[i] = sepNormal;
- }
- }
- }
-
- }
-
-}
-
-
-__kernel void findSeparatingAxisVertexFaceKernel( __global const int4* pairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global btAabbCL* aabbs,
- __global volatile float4* separatingNormals,
- __global volatile int* hasSeparatingAxis,
- __global float* dmins,
- int numPairs
- )
-{
-
- int i = get_global_id(0);
-
- if (i<numPairs)
- {
-
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- hasSeparatingAxis[i] = 0;
-
- //once the broadphase avoids static-static pairs, we can remove this test
- if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))
- {
- return;
- }
-
-
- if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONVEX_HULL) ||(collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL))
- {
- return;
- }
-
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
-
- float dmin = FLT_MAX;
-
- dmins[i] = dmin;
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- float4 sepNormal;
-
- bool sepA = findSeparatingAxis( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,
- posB,ornB,
- DeltaC2,
- vertices,uniqueEdges,faces,
- indices,&sepNormal,&dmin);
- hasSeparatingAxis[i] = 4;
- if (!sepA)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- bool sepB = findSeparatingAxis( &convexShapes[shapeIndexB],&convexShapes[shapeIndexA],posB,ornB,
- posA,ornA,
- DeltaC2,
- vertices,uniqueEdges,faces,
- indices,&sepNormal,&dmin);
-
- if (sepB)
- {
- dmins[i] = dmin;
- hasSeparatingAxis[i] = 1;
- separatingNormals[i] = sepNormal;
- }
- }
-
- }
-
-}
-
-
-__kernel void findSeparatingAxisEdgeEdgeKernel( __global const int4* pairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global btAabbCL* aabbs,
- __global float4* separatingNormals,
- __global int* hasSeparatingAxis,
- __global float* dmins,
- __global const float4* unitSphereDirections,
- int numUnitSphereDirections,
- int numPairs
- )
-{
-
- int i = get_global_id(0);
-
- if (i<numPairs)
- {
-
- if (hasSeparatingAxis[i])
- {
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
-
- float dmin = dmins[i];
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 c0local = convexShapes[shapeIndexA].m_localCenter;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
- float4 sepNormal = separatingNormals[i];
-
-
-
- bool sepEE = false;
- int numEdgeEdgeDirections = convexShapes[shapeIndexA].m_numUniqueEdges*convexShapes[shapeIndexB].m_numUniqueEdges;
- if (numEdgeEdgeDirections<=numUnitSphereDirections)
- {
- sepEE = findSeparatingAxisEdgeEdge( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,
- posB,ornB,
- DeltaC2,
- vertices,uniqueEdges,faces,
- indices,&sepNormal,&dmin);
-
- if (!sepEE)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- hasSeparatingAxis[i] = 1;
- separatingNormals[i] = sepNormal;
- }
- }
- /*
- ///else case is a separate kernel, to make Mac OSX OpenCL compiler happy
- else
- {
- sepEE = findSeparatingAxisUnitSphere(&convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,
- posB,ornB,
- DeltaC2,
- vertices,unitSphereDirections,numUnitSphereDirections,
- &sepNormal,&dmin);
- if (!sepEE)
- {
- hasSeparatingAxis[i] = 0;
- } else
- {
- hasSeparatingAxis[i] = 1;
- separatingNormals[i] = sepNormal;
- }
- }
- */
- } //if (hasSeparatingAxis[i])
- }//(i<numPairs)
-}
-
-
-
-
-
-inline int findClippingFaces(const float4 separatingNormal,
- const ConvexPolyhedronCL* hullA,
- __global const ConvexPolyhedronCL* hullB,
- const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,
- __global float4* worldVertsA1,
- __global float4* worldNormalsA1,
- __global float4* worldVertsB1,
- int capacityWorldVerts,
- const float minDist, float maxDist,
- const float4* verticesA,
- const btGpuFace* facesA,
- const int* indicesA,
- __global const float4* verticesB,
- __global const btGpuFace* facesB,
- __global const int* indicesB,
- __global int4* clippingFaces, int pairIndex)
-{
- int numContactsOut = 0;
- int numWorldVertsB1= 0;
-
-
- int closestFaceB=0;
- float dmax = -FLT_MAX;
-
- {
- for(int face=0;face<hullB->m_numFaces;face++)
- {
- const float4 Normal = make_float4(facesB[hullB->m_faceOffset+face].m_plane.x,
- facesB[hullB->m_faceOffset+face].m_plane.y, facesB[hullB->m_faceOffset+face].m_plane.z,0.f);
- const float4 WorldNormal = qtRotate(ornB, Normal);
- float d = dot3F4(WorldNormal,separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
-
- {
- const btGpuFace polyB = facesB[hullB->m_faceOffset+closestFaceB];
- int numVertices = polyB.m_numIndices;
- if (numVertices>capacityWorldVerts)
- numVertices = capacityWorldVerts;
-
- for(int e0=0;e0<numVertices;e0++)
- {
- if (e0<capacityWorldVerts)
- {
- const float4 b = verticesB[hullB->m_vertexOffset+indicesB[polyB.m_indexOffset+e0]];
- worldVertsB1[pairIndex*capacityWorldVerts+numWorldVertsB1++] = transform(&b,&posB,&ornB);
- }
- }
- }
-
- int closestFaceA=0;
- {
- float dmin = FLT_MAX;
- for(int face=0;face<hullA->m_numFaces;face++)
- {
- const float4 Normal = make_float4(
- facesA[hullA->m_faceOffset+face].m_plane.x,
- facesA[hullA->m_faceOffset+face].m_plane.y,
- facesA[hullA->m_faceOffset+face].m_plane.z,
- 0.f);
- const float4 faceANormalWS = qtRotate(ornA,Normal);
-
- float d = dot3F4(faceANormalWS,separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- worldNormalsA1[pairIndex] = faceANormalWS;
- }
- }
- }
-
- int numVerticesA = facesA[hullA->m_faceOffset+closestFaceA].m_numIndices;
- if (numVerticesA>capacityWorldVerts)
- numVerticesA = capacityWorldVerts;
-
- for(int e0=0;e0<numVerticesA;e0++)
- {
- if (e0<capacityWorldVerts)
- {
- const float4 a = verticesA[hullA->m_vertexOffset+indicesA[facesA[hullA->m_faceOffset+closestFaceA].m_indexOffset+e0]];
- worldVertsA1[pairIndex*capacityWorldVerts+e0] = transform(&a, &posA,&ornA);
- }
- }
-
- clippingFaces[pairIndex].x = closestFaceA;
- clippingFaces[pairIndex].y = closestFaceB;
- clippingFaces[pairIndex].z = numVerticesA;
- clippingFaces[pairIndex].w = numWorldVertsB1;
-
-
- return numContactsOut;
-}
-
-
-
-
-// work-in-progress
-__kernel void findConcaveSeparatingAxisKernel( __global int4* concavePairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global const btGpuChildShape* gpuChildShapes,
- __global btAabbCL* aabbs,
- __global float4* concaveSeparatingNormalsOut,
- __global int* concaveHasSeparatingNormals,
- __global int4* clippingFacesOut,
- __global float4* worldVertsA1GPU,
- __global float4* worldNormalsAGPU,
- __global float4* worldVertsB1GPU,
- int vertexFaceCapacity,
- int numConcavePairs
- )
-{
-
- int i = get_global_id(0);
- if (i>=numConcavePairs)
- return;
-
- concaveHasSeparatingNormals[i] = 0;
-
- int pairIdx = i;
-
- int bodyIndexA = concavePairs[i].x;
- int bodyIndexB = concavePairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- if (collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL&&
- collidables[collidableIndexB].m_shapeType!=SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- concavePairs[pairIdx].w = -1;
- return;
- }
-
-
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- int numActualConcaveConvexTests = 0;
-
- int f = concavePairs[i].z;
-
- bool overlap = false;
-
- ConvexPolyhedronCL convexPolyhedronA;
-
- //add 3 vertices of the triangle
- convexPolyhedronA.m_numVertices = 3;
- convexPolyhedronA.m_vertexOffset = 0;
- float4 localCenter = make_float4(0.f,0.f,0.f,0.f);
-
- btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];
- float4 triMinAabb, triMaxAabb;
- btAabbCL triAabb;
- triAabb.m_min = make_float4(1e30f,1e30f,1e30f,0.f);
- triAabb.m_max = make_float4(-1e30f,-1e30f,-1e30f,0.f);
-
- float4 verticesA[3];
- for (int i=0;i<3;i++)
- {
- int index = indices[face.m_indexOffset+i];
- float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];
- verticesA[i] = vert;
- localCenter += vert;
-
- triAabb.m_min = min(triAabb.m_min,vert);
- triAabb.m_max = max(triAabb.m_max,vert);
-
- }
-
- overlap = true;
- overlap = (triAabb.m_min.x > aabbs[bodyIndexB].m_max.x || triAabb.m_max.x < aabbs[bodyIndexB].m_min.x) ? false : overlap;
- overlap = (triAabb.m_min.z > aabbs[bodyIndexB].m_max.z || triAabb.m_max.z < aabbs[bodyIndexB].m_min.z) ? false : overlap;
- overlap = (triAabb.m_min.y > aabbs[bodyIndexB].m_max.y || triAabb.m_max.y < aabbs[bodyIndexB].m_min.y) ? false : overlap;
-
- if (overlap)
- {
- float dmin = FLT_MAX;
- int hasSeparatingAxis=5;
- float4 sepAxis=make_float4(1,2,3,4);
-
- int localCC=0;
- numActualConcaveConvexTests++;
-
- //a triangle has 3 unique edges
- convexPolyhedronA.m_numUniqueEdges = 3;
- convexPolyhedronA.m_uniqueEdgesOffset = 0;
- float4 uniqueEdgesA[3];
-
- uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);
- uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);
- uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);
-
-
- convexPolyhedronA.m_faceOffset = 0;
-
- float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);
-
- btGpuFace facesA[TRIANGLE_NUM_CONVEX_FACES];
- int indicesA[3+3+2+2+2];
- int curUsedIndices=0;
- int fidx=0;
-
- //front size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[0] = 0;
- indicesA[1] = 1;
- indicesA[2] = 2;
- curUsedIndices+=3;
- float c = face.m_plane.w;
- facesA[fidx].m_plane.x = normal.x;
- facesA[fidx].m_plane.y = normal.y;
- facesA[fidx].m_plane.z = normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
- //back size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[3]=2;
- indicesA[4]=1;
- indicesA[5]=0;
- curUsedIndices+=3;
- float c = dot(normal,verticesA[0]);
- float c1 = -face.m_plane.w;
- facesA[fidx].m_plane.x = -normal.x;
- facesA[fidx].m_plane.y = -normal.y;
- facesA[fidx].m_plane.z = -normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
-
- bool addEdgePlanes = true;
- if (addEdgePlanes)
- {
- int numVertices=3;
- int prevVertex = numVertices-1;
- for (int i=0;i<numVertices;i++)
- {
- float4 v0 = verticesA[i];
- float4 v1 = verticesA[prevVertex];
-
- float4 edgeNormal = normalize(cross(normal,v1-v0));
- float c = -dot(edgeNormal,v0);
-
- facesA[fidx].m_numIndices = 2;
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[curUsedIndices++]=i;
- indicesA[curUsedIndices++]=prevVertex;
-
- facesA[fidx].m_plane.x = edgeNormal.x;
- facesA[fidx].m_plane.y = edgeNormal.y;
- facesA[fidx].m_plane.z = edgeNormal.z;
- facesA[fidx].m_plane.w = c;
- fidx++;
- prevVertex = i;
- }
- }
- convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;
- convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);
-
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
-
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
-
-
-
-
- ///////////////////
- ///compound shape support
-
- if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int compoundChild = concavePairs[pairIdx].w;
- int childShapeIndexB = compoundChild;//collidables[collidableIndexB].m_shapeIndex+compoundChild;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- shapeIndexB = collidables[childColIndexB].m_shapeIndex;
- }
- //////////////////
-
- float4 c0local = convexPolyhedronA.m_localCenter;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
-
-
- bool sepA = findSeparatingAxisLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- DeltaC2,
- verticesA,uniqueEdgesA,facesA,indicesA,
- vertices,uniqueEdges,faces,indices,
- &sepAxis,&dmin);
- hasSeparatingAxis = 4;
- if (!sepA)
- {
- hasSeparatingAxis = 0;
- } else
- {
- bool sepB = findSeparatingAxisLocalB( &convexShapes[shapeIndexB],&convexPolyhedronA,
- posB,ornB,
- posA,ornA,
- DeltaC2,
- vertices,uniqueEdges,faces,indices,
- verticesA,uniqueEdgesA,facesA,indicesA,
- &sepAxis,&dmin);
-
- if (!sepB)
- {
- hasSeparatingAxis = 0;
- } else
- {
- bool sepEE = findSeparatingAxisEdgeEdgeLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- DeltaC2,
- verticesA,uniqueEdgesA,facesA,indicesA,
- vertices,uniqueEdges,faces,indices,
- &sepAxis,&dmin);
-
- if (!sepEE)
- {
- hasSeparatingAxis = 0;
- } else
- {
- hasSeparatingAxis = 1;
- }
- }
- }
-
- if (hasSeparatingAxis)
- {
- sepAxis.w = dmin;
- concaveSeparatingNormalsOut[pairIdx]=sepAxis;
- concaveHasSeparatingNormals[i]=1;
-
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
-
-
- findClippingFaces(sepAxis,
- &convexPolyhedronA,
- &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- worldVertsA1GPU,
- worldNormalsAGPU,
- worldVertsB1GPU,
- vertexFaceCapacity,
- minDist, maxDist,
- verticesA,
- facesA,
- indicesA,
- vertices,
- faces,
- indices,
- clippingFacesOut, pairIdx);
-
-
- } else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
- }
- else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
-
- concavePairs[pairIdx].z = -1;//now z is used for existing/persistent contacts
-}
-
-
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.cl b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.cl
deleted file mode 100644
index f433971741..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.cl
+++ /dev/null
@@ -1,1888 +0,0 @@
-
-#define TRIANGLE_NUM_CONVEX_FACES 5
-
-
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile __global int*
-#endif
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-#define max2 max
-#define min2 min
-
-typedef unsigned int u32;
-
-
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-
-
-#define GET_NPOINTS(x) (x).m_worldNormalOnB.w
-
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-__inline
-float fastDiv(float numerator, float denominator)
-{
- return native_divide(numerator, denominator);
-// return numerator/denominator;
-}
-
-__inline
-float4 fastDiv4(float4 numerator, float4 denominator)
-{
- return native_divide(numerator, denominator);
-}
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-//#define dot3F4 dot
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-__inline
-float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)
-{
- return qtRotate( *orientation, *p ) + (*translation);
-}
-
-
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-}
-
-
-__inline float4 lerp3(const float4 a,const float4 b, float t)
-{
- return make_float4( a.x + (b.x - a.x) * t,
- a.y + (b.y - a.y) * t,
- a.z + (b.z - a.z) * t,
- 0.f);
-}
-
-
-
-// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut
-int clipFaceGlobal(__global const float4* pVtxIn, int numVertsIn, float4 planeNormalWS,float planeEqWS, __global float4* ppVtxOut)
-{
-
- int ve;
- float ds, de;
- int numVertsOut = 0;
- //double-check next test
- if (numVertsIn < 2)
- return 0;
-
- float4 firstVertex=pVtxIn[numVertsIn-1];
- float4 endVertex = pVtxIn[0];
-
- ds = dot3F4(planeNormalWS,firstVertex)+planeEqWS;
-
- for (ve = 0; ve < numVertsIn; ve++)
- {
- endVertex=pVtxIn[ve];
- de = dot3F4(planeNormalWS,endVertex)+planeEqWS;
- if (ds<0)
- {
- if (de<0)
- {
- // Start < 0, end < 0, so output endVertex
- ppVtxOut[numVertsOut++] = endVertex;
- }
- else
- {
- // Start < 0, end >= 0, so output intersection
- ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );
- }
- }
- else
- {
- if (de<0)
- {
- // Start >= 0, end < 0 so output intersection and end
- ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );
- ppVtxOut[numVertsOut++] = endVertex;
- }
- }
- firstVertex = endVertex;
- ds = de;
- }
- return numVertsOut;
-}
-
-
-
-// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut
-int clipFace(const float4* pVtxIn, int numVertsIn, float4 planeNormalWS,float planeEqWS, float4* ppVtxOut)
-{
-
- int ve;
- float ds, de;
- int numVertsOut = 0;
-//double-check next test
- if (numVertsIn < 2)
- return 0;
-
- float4 firstVertex=pVtxIn[numVertsIn-1];
- float4 endVertex = pVtxIn[0];
-
- ds = dot3F4(planeNormalWS,firstVertex)+planeEqWS;
-
- for (ve = 0; ve < numVertsIn; ve++)
- {
- endVertex=pVtxIn[ve];
-
- de = dot3F4(planeNormalWS,endVertex)+planeEqWS;
-
- if (ds<0)
- {
- if (de<0)
- {
- // Start < 0, end < 0, so output endVertex
- ppVtxOut[numVertsOut++] = endVertex;
- }
- else
- {
- // Start < 0, end >= 0, so output intersection
- ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );
- }
- }
- else
- {
- if (de<0)
- {
- // Start >= 0, end < 0 so output intersection and end
- ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );
- ppVtxOut[numVertsOut++] = endVertex;
- }
- }
- firstVertex = endVertex;
- ds = de;
- }
- return numVertsOut;
-}
-
-
-int clipFaceAgainstHull(const float4 separatingNormal, __global const b3ConvexPolyhedronData_t* hullA,
- const float4 posA, const Quaternion ornA, float4* worldVertsB1, int numWorldVertsB1,
- float4* worldVertsB2, int capacityWorldVertsB2,
- const float minDist, float maxDist,
- __global const float4* vertices,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- float4* contactsOut,
- int contactCapacity)
-{
- int numContactsOut = 0;
-
- float4* pVtxIn = worldVertsB1;
- float4* pVtxOut = worldVertsB2;
-
- int numVertsIn = numWorldVertsB1;
- int numVertsOut = 0;
-
- int closestFaceA=-1;
- {
- float dmin = FLT_MAX;
- for(int face=0;face<hullA->m_numFaces;face++)
- {
- const float4 Normal = make_float4(
- faces[hullA->m_faceOffset+face].m_plane.x,
- faces[hullA->m_faceOffset+face].m_plane.y,
- faces[hullA->m_faceOffset+face].m_plane.z,0.f);
- const float4 faceANormalWS = qtRotate(ornA,Normal);
-
- float d = dot3F4(faceANormalWS,separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- }
- }
- }
- if (closestFaceA<0)
- return numContactsOut;
-
- b3GpuFace_t polyA = faces[hullA->m_faceOffset+closestFaceA];
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
- int numVerticesA = polyA.m_numIndices;
- for(int e0=0;e0<numVerticesA;e0++)
- {
- const float4 a = vertices[hullA->m_vertexOffset+indices[polyA.m_indexOffset+e0]];
- const float4 b = vertices[hullA->m_vertexOffset+indices[polyA.m_indexOffset+((e0+1)%numVerticesA)]];
- const float4 edge0 = a - b;
- const float4 WorldEdge0 = qtRotate(ornA,edge0);
- float4 planeNormalA = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);
- float4 worldPlaneAnormal1 = qtRotate(ornA,planeNormalA);
-
- float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);
- float4 worldA1 = transform(&a,&posA,&ornA);
- float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);
-
- float4 planeNormalWS = planeNormalWS1;
- float planeEqWS=planeEqWS1;
-
- //clip face
- //clipFace(*pVtxIn, *pVtxOut,planeNormalWS,planeEqWS);
- numVertsOut = clipFace(pVtxIn, numVertsIn, planeNormalWS,planeEqWS, pVtxOut);
-
- //btSwap(pVtxIn,pVtxOut);
- float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsIn = numVertsOut;
- numVertsOut = 0;
- }
-
-
- // only keep points that are behind the witness face
- {
- float4 localPlaneNormal = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);
- float localPlaneEq = polyA.m_plane.w;
- float4 planeNormalWS = qtRotate(ornA,localPlaneNormal);
- float planeEqWS=localPlaneEq-dot3F4(planeNormalWS,posA);
- for (int i=0;i<numVertsIn;i++)
- {
- float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;
- if (depth <=minDist)
- {
- depth = minDist;
- }
-
- if (depth <=maxDist)
- {
- float4 pointInWorld = pVtxIn[i];
- //resultOut.addContactPoint(separatingNormal,point,depth);
- contactsOut[numContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);
- }
- }
- }
-
- return numContactsOut;
-}
-
-
-
-int clipFaceAgainstHullLocalA(const float4 separatingNormal, const b3ConvexPolyhedronData_t* hullA,
- const float4 posA, const Quaternion ornA, float4* worldVertsB1, int numWorldVertsB1,
- float4* worldVertsB2, int capacityWorldVertsB2,
- const float minDist, float maxDist,
- const float4* verticesA,
- const b3GpuFace_t* facesA,
- const int* indicesA,
- __global const float4* verticesB,
- __global const b3GpuFace_t* facesB,
- __global const int* indicesB,
- float4* contactsOut,
- int contactCapacity)
-{
- int numContactsOut = 0;
-
- float4* pVtxIn = worldVertsB1;
- float4* pVtxOut = worldVertsB2;
-
- int numVertsIn = numWorldVertsB1;
- int numVertsOut = 0;
-
- int closestFaceA=-1;
- {
- float dmin = FLT_MAX;
- for(int face=0;face<hullA->m_numFaces;face++)
- {
- const float4 Normal = make_float4(
- facesA[hullA->m_faceOffset+face].m_plane.x,
- facesA[hullA->m_faceOffset+face].m_plane.y,
- facesA[hullA->m_faceOffset+face].m_plane.z,0.f);
- const float4 faceANormalWS = qtRotate(ornA,Normal);
-
- float d = dot3F4(faceANormalWS,separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- }
- }
- }
- if (closestFaceA<0)
- return numContactsOut;
-
- b3GpuFace_t polyA = facesA[hullA->m_faceOffset+closestFaceA];
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
- int numVerticesA = polyA.m_numIndices;
- for(int e0=0;e0<numVerticesA;e0++)
- {
- const float4 a = verticesA[hullA->m_vertexOffset+indicesA[polyA.m_indexOffset+e0]];
- const float4 b = verticesA[hullA->m_vertexOffset+indicesA[polyA.m_indexOffset+((e0+1)%numVerticesA)]];
- const float4 edge0 = a - b;
- const float4 WorldEdge0 = qtRotate(ornA,edge0);
- float4 planeNormalA = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);
- float4 worldPlaneAnormal1 = qtRotate(ornA,planeNormalA);
-
- float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);
- float4 worldA1 = transform(&a,&posA,&ornA);
- float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);
-
- float4 planeNormalWS = planeNormalWS1;
- float planeEqWS=planeEqWS1;
-
- //clip face
- //clipFace(*pVtxIn, *pVtxOut,planeNormalWS,planeEqWS);
- numVertsOut = clipFace(pVtxIn, numVertsIn, planeNormalWS,planeEqWS, pVtxOut);
-
- //btSwap(pVtxIn,pVtxOut);
- float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsIn = numVertsOut;
- numVertsOut = 0;
- }
-
-
- // only keep points that are behind the witness face
- {
- float4 localPlaneNormal = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);
- float localPlaneEq = polyA.m_plane.w;
- float4 planeNormalWS = qtRotate(ornA,localPlaneNormal);
- float planeEqWS=localPlaneEq-dot3F4(planeNormalWS,posA);
- for (int i=0;i<numVertsIn;i++)
- {
- float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;
- if (depth <=minDist)
- {
- depth = minDist;
- }
-
- if (depth <=maxDist)
- {
- float4 pointInWorld = pVtxIn[i];
- //resultOut.addContactPoint(separatingNormal,point,depth);
- contactsOut[numContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);
- }
- }
- }
-
- return numContactsOut;
-}
-
-int clipHullAgainstHull(const float4 separatingNormal,
- __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB,
- const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,
- float4* worldVertsB1, float4* worldVertsB2, int capacityWorldVerts,
- const float minDist, float maxDist,
- __global const float4* vertices,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- float4* localContactsOut,
- int localContactCapacity)
-{
- int numContactsOut = 0;
- int numWorldVertsB1= 0;
-
-
- int closestFaceB=-1;
- float dmax = -FLT_MAX;
-
- {
- for(int face=0;face<hullB->m_numFaces;face++)
- {
- const float4 Normal = make_float4(faces[hullB->m_faceOffset+face].m_plane.x,
- faces[hullB->m_faceOffset+face].m_plane.y, faces[hullB->m_faceOffset+face].m_plane.z,0.f);
- const float4 WorldNormal = qtRotate(ornB, Normal);
- float d = dot3F4(WorldNormal,separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
-
- {
- const b3GpuFace_t polyB = faces[hullB->m_faceOffset+closestFaceB];
- const int numVertices = polyB.m_numIndices;
- for(int e0=0;e0<numVertices;e0++)
- {
- const float4 b = vertices[hullB->m_vertexOffset+indices[polyB.m_indexOffset+e0]];
- worldVertsB1[numWorldVertsB1++] = transform(&b,&posB,&ornB);
- }
- }
-
- if (closestFaceB>=0)
- {
- numContactsOut = clipFaceAgainstHull(separatingNormal, hullA,
- posA,ornA,
- worldVertsB1,numWorldVertsB1,worldVertsB2,capacityWorldVerts, minDist, maxDist,vertices,
- faces,
- indices,localContactsOut,localContactCapacity);
- }
-
- return numContactsOut;
-}
-
-
-int clipHullAgainstHullLocalA(const float4 separatingNormal,
- const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB,
- const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,
- float4* worldVertsB1, float4* worldVertsB2, int capacityWorldVerts,
- const float minDist, float maxDist,
- const float4* verticesA,
- const b3GpuFace_t* facesA,
- const int* indicesA,
- __global const float4* verticesB,
- __global const b3GpuFace_t* facesB,
- __global const int* indicesB,
- float4* localContactsOut,
- int localContactCapacity)
-{
- int numContactsOut = 0;
- int numWorldVertsB1= 0;
-
-
- int closestFaceB=-1;
- float dmax = -FLT_MAX;
-
- {
- for(int face=0;face<hullB->m_numFaces;face++)
- {
- const float4 Normal = make_float4(facesB[hullB->m_faceOffset+face].m_plane.x,
- facesB[hullB->m_faceOffset+face].m_plane.y, facesB[hullB->m_faceOffset+face].m_plane.z,0.f);
- const float4 WorldNormal = qtRotate(ornB, Normal);
- float d = dot3F4(WorldNormal,separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
-
- {
- const b3GpuFace_t polyB = facesB[hullB->m_faceOffset+closestFaceB];
- const int numVertices = polyB.m_numIndices;
- for(int e0=0;e0<numVertices;e0++)
- {
- const float4 b = verticesB[hullB->m_vertexOffset+indicesB[polyB.m_indexOffset+e0]];
- worldVertsB1[numWorldVertsB1++] = transform(&b,&posB,&ornB);
- }
- }
-
- if (closestFaceB>=0)
- {
- numContactsOut = clipFaceAgainstHullLocalA(separatingNormal, hullA,
- posA,ornA,
- worldVertsB1,numWorldVertsB1,worldVertsB2,capacityWorldVerts, minDist, maxDist,
- verticesA,facesA,indicesA,
- verticesB,facesB,indicesB,
- localContactsOut,localContactCapacity);
- }
-
- return numContactsOut;
-}
-
-#define PARALLEL_SUM(v, n) for(int j=1; j<n; j++) v[0] += v[j];
-#define PARALLEL_DO(execution, n) for(int ie=0; ie<n; ie++){execution;}
-#define REDUCE_MAX(v, n) {int i=0;\
-for(int offset=0; offset<n; offset++) v[i] = (v[i].y > v[i+offset].y)? v[i]: v[i+offset]; }
-#define REDUCE_MIN(v, n) {int i=0;\
-for(int offset=0; offset<n; offset++) v[i] = (v[i].y < v[i+offset].y)? v[i]: v[i+offset]; }
-
-int extractManifoldSequentialGlobal(__global const float4* p, int nPoints, float4 nearNormal, int4* contactIdx)
-{
- if( nPoints == 0 )
- return 0;
-
- if (nPoints <=4)
- return nPoints;
-
-
- if (nPoints >64)
- nPoints = 64;
-
- float4 center = make_float4(0.f);
- {
-
- for (int i=0;i<nPoints;i++)
- center += p[i];
- center /= (float)nPoints;
- }
-
-
-
- // sample 4 directions
-
- float4 aVector = p[0] - center;
- float4 u = cross3( nearNormal, aVector );
- float4 v = cross3( nearNormal, u );
- u = normalize3( u );
- v = normalize3( v );
-
-
- //keep point with deepest penetration
- float minW= FLT_MAX;
-
- int minIndex=-1;
-
- float4 maxDots;
- maxDots.x = FLT_MIN;
- maxDots.y = FLT_MIN;
- maxDots.z = FLT_MIN;
- maxDots.w = FLT_MIN;
-
- // idx, distance
- for(int ie = 0; ie<nPoints; ie++ )
- {
- if (p[ie].w<minW)
- {
- minW = p[ie].w;
- minIndex=ie;
- }
- float f;
- float4 r = p[ie]-center;
- f = dot3F4( u, r );
- if (f<maxDots.x)
- {
- maxDots.x = f;
- contactIdx[0].x = ie;
- }
-
- f = dot3F4( -u, r );
- if (f<maxDots.y)
- {
- maxDots.y = f;
- contactIdx[0].y = ie;
- }
-
-
- f = dot3F4( v, r );
- if (f<maxDots.z)
- {
- maxDots.z = f;
- contactIdx[0].z = ie;
- }
-
- f = dot3F4( -v, r );
- if (f<maxDots.w)
- {
- maxDots.w = f;
- contactIdx[0].w = ie;
- }
-
- }
-
- if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)
- {
- //replace the first contact with minimum (todo: replace contact with least penetration)
- contactIdx[0].x = minIndex;
- }
-
- return 4;
-
-}
-
-
-int extractManifoldSequentialGlobalFake(__global const float4* p, int nPoints, float4 nearNormal, int* contactIdx)
-{
- contactIdx[0] = 0;
- contactIdx[1] = 1;
- contactIdx[2] = 2;
- contactIdx[3] = 3;
-
- if( nPoints == 0 ) return 0;
-
- nPoints = min2( nPoints, 4 );
- return nPoints;
-
-}
-
-
-
-int extractManifoldSequential(const float4* p, int nPoints, float4 nearNormal, int* contactIdx)
-{
- if( nPoints == 0 ) return 0;
-
- nPoints = min2( nPoints, 64 );
-
- float4 center = make_float4(0.f);
- {
- float4 v[64];
- for (int i=0;i<nPoints;i++)
- v[i] = p[i];
- //memcpy( v, p, nPoints*sizeof(float4) );
- PARALLEL_SUM( v, nPoints );
- center = v[0]/(float)nPoints;
- }
-
-
-
- { // sample 4 directions
- if( nPoints < 4 )
- {
- for(int i=0; i<nPoints; i++)
- contactIdx[i] = i;
- return nPoints;
- }
-
- float4 aVector = p[0] - center;
- float4 u = cross3( nearNormal, aVector );
- float4 v = cross3( nearNormal, u );
- u = normalize3( u );
- v = normalize3( v );
-
- int idx[4];
-
- float2 max00 = make_float2(0,FLT_MAX);
- {
- // idx, distance
- {
- {
- int4 a[64];
- for(int ie = 0; ie<nPoints; ie++ )
- {
-
-
- float f;
- float4 r = p[ie]-center;
- f = dot3F4( u, r );
- a[ie].x = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);
-
- f = dot3F4( -u, r );
- a[ie].y = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);
-
- f = dot3F4( v, r );
- a[ie].z = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);
-
- f = dot3F4( -v, r );
- a[ie].w = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);
- }
-
- for(int ie=0; ie<nPoints; ie++)
- {
- a[0].x = (a[0].x > a[ie].x )? a[0].x: a[ie].x;
- a[0].y = (a[0].y > a[ie].y )? a[0].y: a[ie].y;
- a[0].z = (a[0].z > a[ie].z )? a[0].z: a[ie].z;
- a[0].w = (a[0].w > a[ie].w )? a[0].w: a[ie].w;
- }
-
- idx[0] = (int)a[0].x & 0xff;
- idx[1] = (int)a[0].y & 0xff;
- idx[2] = (int)a[0].z & 0xff;
- idx[3] = (int)a[0].w & 0xff;
- }
- }
-
- {
- float2 h[64];
- PARALLEL_DO( h[ie] = make_float2((float)ie, p[ie].w), nPoints );
- REDUCE_MIN( h, nPoints );
- max00 = h[0];
- }
- }
-
- contactIdx[0] = idx[0];
- contactIdx[1] = idx[1];
- contactIdx[2] = idx[2];
- contactIdx[3] = idx[3];
-
-
- return 4;
- }
-}
-
-
-
-__kernel void extractManifoldAndAddContactKernel(__global const int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const float4* closestPointsWorld,
- __global const float4* separatingNormalsWorld,
- __global const int* contactCounts,
- __global const int* contactOffsets,
- __global struct b3Contact4Data* restrict contactsOut,
- counter32_t nContactsOut,
- int contactCapacity,
- int numPairs,
- int pairIndex
- )
-{
- int idx = get_global_id(0);
-
- if (idx<numPairs)
- {
- float4 normal = separatingNormalsWorld[idx];
- int nPoints = contactCounts[idx];
- __global const float4* pointsIn = &closestPointsWorld[contactOffsets[idx]];
- float4 localPoints[64];
- for (int i=0;i<nPoints;i++)
- {
- localPoints[i] = pointsIn[i];
- }
-
- int contactIdx[4];// = {-1,-1,-1,-1};
- contactIdx[0] = -1;
- contactIdx[1] = -1;
- contactIdx[2] = -1;
- contactIdx[3] = -1;
-
- int nContacts = extractManifoldSequential(localPoints, nPoints, normal, contactIdx);
-
- int dstIdx;
- AppendInc( nContactsOut, dstIdx );
- if (dstIdx<contactCapacity)
- {
- __global struct b3Contact4Data* c = contactsOut + dstIdx;
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = idx;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0 ? -bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0 ? -bodyB:bodyB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
- for (int i=0;i<nContacts;i++)
- {
- c->m_worldPosB[i] = localPoints[contactIdx[i]];
- }
- GET_NPOINTS(*c) = nContacts;
- }
- }
-}
-
-
-void trInverse(float4 translationIn, Quaternion orientationIn,
- float4* translationOut, Quaternion* orientationOut)
-{
- *orientationOut = qtInvert(orientationIn);
- *translationOut = qtRotate(*orientationOut, -translationIn);
-}
-
-void trMul(float4 translationA, Quaternion orientationA,
- float4 translationB, Quaternion orientationB,
- float4* translationOut, Quaternion* orientationOut)
-{
- *orientationOut = qtMul(orientationA,orientationB);
- *translationOut = transform(&translationB,&translationA,&orientationA);
-}
-
-
-
-
-__kernel void clipHullHullKernel( __global int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const b3ConvexPolyhedronData_t* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- __global const float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int numPairs,
- int contactCapacity)
-{
-
- int i = get_global_id(0);
- int pairIndex = i;
-
- float4 worldVertsB1[64];
- float4 worldVertsB2[64];
- int capacityWorldVerts = 64;
-
- float4 localContactsOut[64];
- int localContactCapacity=64;
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- if (i<numPairs)
- {
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- if (hasSeparatingAxis[i])
- {
-
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
-
-
- int numLocalContactsOut = clipHullAgainstHull(separatingNormals[i],
- &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],
- rigidBodies[bodyIndexA].m_pos,rigidBodies[bodyIndexA].m_quat,
- rigidBodies[bodyIndexB].m_pos,rigidBodies[bodyIndexB].m_quat,
- worldVertsB1,worldVertsB2,capacityWorldVerts,
- minDist, maxDist,
- vertices,faces,indices,
- localContactsOut,localContactCapacity);
-
- if (numLocalContactsOut>0)
- {
- float4 normal = -separatingNormals[i];
- int nPoints = numLocalContactsOut;
- float4* pointsIn = localContactsOut;
- int contactIdx[4];// = {-1,-1,-1,-1};
-
- contactIdx[0] = -1;
- contactIdx[1] = -1;
- contactIdx[2] = -1;
- contactIdx[3] = -1;
-
- int nReducedContacts = extractManifoldSequential(pointsIn, nPoints, normal, contactIdx);
-
-
- int mprContactIndex = pairs[pairIndex].z;
-
- int dstIdx = mprContactIndex;
- if (dstIdx<0)
- {
- AppendInc( nGlobalContactsOut, dstIdx );
- }
-
- if (dstIdx<contactCapacity)
- {
- pairs[pairIndex].z = dstIdx;
-
- __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
-
- for (int i=0;i<nReducedContacts;i++)
- {
- //this condition means: overwrite contact point, unless at index i==0 we have a valid 'mpr' contact
- if (i>0||(mprContactIndex<0))
- {
- c->m_worldPosB[i] = pointsIn[contactIdx[i]];
- }
- }
- GET_NPOINTS(*c) = nReducedContacts;
- }
-
- }// if (numContactsOut>0)
- }// if (hasSeparatingAxis[i])
- }// if (i<numPairs)
-
-}
-
-
-__kernel void clipCompoundsHullHullKernel( __global const int4* gpuCompoundPairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const b3ConvexPolyhedronData_t* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- __global const b3GpuChildShape_t* gpuChildShapes,
- __global const float4* gpuCompoundSepNormalsOut,
- __global const int* gpuHasCompoundSepNormalsOut,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int numCompoundPairs, int maxContactCapacity)
-{
-
- int i = get_global_id(0);
- int pairIndex = i;
-
- float4 worldVertsB1[64];
- float4 worldVertsB2[64];
- int capacityWorldVerts = 64;
-
- float4 localContactsOut[64];
- int localContactCapacity=64;
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- if (i<numCompoundPairs)
- {
-
- if (gpuHasCompoundSepNormalsOut[i])
- {
-
- int bodyIndexA = gpuCompoundPairs[i].x;
- int bodyIndexB = gpuCompoundPairs[i].y;
-
- int childShapeIndexA = gpuCompoundPairs[i].z;
- int childShapeIndexB = gpuCompoundPairs[i].w;
-
- int collidableIndexA = -1;
- int collidableIndexB = -1;
-
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
-
- float4 ornB = rigidBodies[bodyIndexB].m_quat;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- if (childShapeIndexA >= 0)
- {
- collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;
- float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;
- float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;
- float4 newPosA = qtRotate(ornA,childPosA)+posA;
- float4 newOrnA = qtMul(ornA,childOrnA);
- posA = newPosA;
- ornA = newOrnA;
- } else
- {
- collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- }
-
- if (childShapeIndexB>=0)
- {
- collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- } else
- {
- collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
- }
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- int numLocalContactsOut = clipHullAgainstHull(gpuCompoundSepNormalsOut[i],
- &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- worldVertsB1,worldVertsB2,capacityWorldVerts,
- minDist, maxDist,
- vertices,faces,indices,
- localContactsOut,localContactCapacity);
-
- if (numLocalContactsOut>0)
- {
- float4 normal = -gpuCompoundSepNormalsOut[i];
- int nPoints = numLocalContactsOut;
- float4* pointsIn = localContactsOut;
- int contactIdx[4];// = {-1,-1,-1,-1};
-
- contactIdx[0] = -1;
- contactIdx[1] = -1;
- contactIdx[2] = -1;
- contactIdx[3] = -1;
-
- int nReducedContacts = extractManifoldSequential(pointsIn, nPoints, normal, contactIdx);
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
- if ((dstIdx+nReducedContacts) < maxContactCapacity)
- {
- __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = gpuCompoundPairs[pairIndex].x;
- int bodyB = gpuCompoundPairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;
- c->m_childIndexA = childShapeIndexA;
- c->m_childIndexB = childShapeIndexB;
- for (int i=0;i<nReducedContacts;i++)
- {
- c->m_worldPosB[i] = pointsIn[contactIdx[i]];
- }
- GET_NPOINTS(*c) = nReducedContacts;
- }
-
- }// if (numContactsOut>0)
- }// if (gpuHasCompoundSepNormalsOut[i])
- }// if (i<numCompoundPairs)
-
-}
-
-
-
-__kernel void sphereSphereCollisionKernel( __global const int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int contactCapacity,
- int numPairs)
-{
-
- int i = get_global_id(0);
- int pairIndex = i;
-
- if (i<numPairs)
- {
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&
- collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)
- {
- //sphere-sphere
- float radiusA = collidables[collidableIndexA].m_radius;
- float radiusB = collidables[collidableIndexB].m_radius;
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
-
- float4 diff = posA-posB;
- float len = length(diff);
-
- ///iff distance positive, don't generate a new contact
- if ( len <= (radiusA+radiusB))
- {
- ///distance (negative means penetration)
- float dist = len - (radiusA+radiusB);
- float4 normalOnSurfaceB = make_float4(1.f,0.f,0.f,0.f);
- if (len > 0.00001)
- {
- normalOnSurfaceB = diff / len;
- }
- float4 contactPosB = posB + normalOnSurfaceB*radiusB;
- contactPosB.w = dist;
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
- if (dstIdx < contactCapacity)
- {
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -normalOnSurfaceB;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;
- c->m_worldPosB[0] = contactPosB;
- c->m_childIndexA = -1;
- c->m_childIndexB = -1;
-
- GET_NPOINTS(*c) = 1;
- }//if (dstIdx < numPairs)
- }//if ( len <= (radiusA+radiusB))
- }//SHAPE_SPHERE SHAPE_SPHERE
- }//if (i<numPairs)
-}
-
-__kernel void clipHullHullConcaveConvexKernel( __global int4* concavePairsIn,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const b3ConvexPolyhedronData_t* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- __global const b3GpuChildShape_t* gpuChildShapes,
- __global const float4* separatingNormals,
- __global struct b3Contact4Data* restrict globalContactsOut,
- counter32_t nGlobalContactsOut,
- int contactCapacity,
- int numConcavePairs)
-{
-
- int i = get_global_id(0);
- int pairIndex = i;
-
- float4 worldVertsB1[64];
- float4 worldVertsB2[64];
- int capacityWorldVerts = 64;
-
- float4 localContactsOut[64];
- int localContactCapacity=64;
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- if (i<numConcavePairs)
- {
- //negative value means that the pair is invalid
- if (concavePairsIn[i].w<0)
- return;
-
- int bodyIndexA = concavePairsIn[i].x;
- int bodyIndexB = concavePairsIn[i].y;
- int f = concavePairsIn[i].z;
- int childShapeIndexA = f;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- ///////////////////////////////////////////////////////////////
-
-
- bool overlap = false;
-
- b3ConvexPolyhedronData_t convexPolyhedronA;
-
- //add 3 vertices of the triangle
- convexPolyhedronA.m_numVertices = 3;
- convexPolyhedronA.m_vertexOffset = 0;
- float4 localCenter = make_float4(0.f,0.f,0.f,0.f);
-
- b3GpuFace_t face = faces[convexShapes[shapeIndexA].m_faceOffset+f];
-
- float4 verticesA[3];
- for (int i=0;i<3;i++)
- {
- int index = indices[face.m_indexOffset+i];
- float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];
- verticesA[i] = vert;
- localCenter += vert;
- }
-
- float dmin = FLT_MAX;
-
- int localCC=0;
-
- //a triangle has 3 unique edges
- convexPolyhedronA.m_numUniqueEdges = 3;
- convexPolyhedronA.m_uniqueEdgesOffset = 0;
- float4 uniqueEdgesA[3];
-
- uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);
- uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);
- uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);
-
-
- convexPolyhedronA.m_faceOffset = 0;
-
- float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);
-
- b3GpuFace_t facesA[TRIANGLE_NUM_CONVEX_FACES];
- int indicesA[3+3+2+2+2];
- int curUsedIndices=0;
- int fidx=0;
-
- //front size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[0] = 0;
- indicesA[1] = 1;
- indicesA[2] = 2;
- curUsedIndices+=3;
- float c = face.m_plane.w;
- facesA[fidx].m_plane.x = normal.x;
- facesA[fidx].m_plane.y = normal.y;
- facesA[fidx].m_plane.z = normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
- //back size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[3]=2;
- indicesA[4]=1;
- indicesA[5]=0;
- curUsedIndices+=3;
- float c = dot3F4(normal,verticesA[0]);
- float c1 = -face.m_plane.w;
- facesA[fidx].m_plane.x = -normal.x;
- facesA[fidx].m_plane.y = -normal.y;
- facesA[fidx].m_plane.z = -normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
-
- bool addEdgePlanes = true;
- if (addEdgePlanes)
- {
- int numVertices=3;
- int prevVertex = numVertices-1;
- for (int i=0;i<numVertices;i++)
- {
- float4 v0 = verticesA[i];
- float4 v1 = verticesA[prevVertex];
-
- float4 edgeNormal = normalize(cross(normal,v1-v0));
- float c = -dot3F4(edgeNormal,v0);
-
- facesA[fidx].m_numIndices = 2;
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[curUsedIndices++]=i;
- indicesA[curUsedIndices++]=prevVertex;
-
- facesA[fidx].m_plane.x = edgeNormal.x;
- facesA[fidx].m_plane.y = edgeNormal.y;
- facesA[fidx].m_plane.z = edgeNormal.z;
- facesA[fidx].m_plane.w = c;
- fidx++;
- prevVertex = i;
- }
- }
- convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;
- convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);
-
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
-
-
- float4 sepAxis = separatingNormals[i];
-
- int shapeTypeB = collidables[collidableIndexB].m_shapeType;
- int childShapeIndexB =-1;
- if (shapeTypeB==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- ///////////////////
- ///compound shape support
-
- childShapeIndexB = concavePairsIn[pairIndex].w;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- shapeIndexB = collidables[childColIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
-
- }
-
- ////////////////////////////////////////
-
-
-
- int numLocalContactsOut = clipHullAgainstHullLocalA(sepAxis,
- &convexPolyhedronA, &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- worldVertsB1,worldVertsB2,capacityWorldVerts,
- minDist, maxDist,
- &verticesA,&facesA,&indicesA,
- vertices,faces,indices,
- localContactsOut,localContactCapacity);
-
- if (numLocalContactsOut>0)
- {
- float4 normal = -separatingNormals[i];
- int nPoints = numLocalContactsOut;
- float4* pointsIn = localContactsOut;
- int contactIdx[4];// = {-1,-1,-1,-1};
-
- contactIdx[0] = -1;
- contactIdx[1] = -1;
- contactIdx[2] = -1;
- contactIdx[3] = -1;
-
- int nReducedContacts = extractManifoldSequential(pointsIn, nPoints, normal, contactIdx);
-
- int dstIdx;
- AppendInc( nGlobalContactsOut, dstIdx );
- if (dstIdx<contactCapacity)
- {
- __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = concavePairsIn[pairIndex].x;
- int bodyB = concavePairsIn[pairIndex].y;
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;
- c->m_childIndexA = childShapeIndexA;
- c->m_childIndexB = childShapeIndexB;
- for (int i=0;i<nReducedContacts;i++)
- {
- c->m_worldPosB[i] = pointsIn[contactIdx[i]];
- }
- GET_NPOINTS(*c) = nReducedContacts;
- }
-
- }// if (numContactsOut>0)
- }// if (i<numPairs)
-}
-
-
-
-
-
-
-int findClippingFaces(const float4 separatingNormal,
- __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB,
- const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,
- __global float4* worldVertsA1,
- __global float4* worldNormalsA1,
- __global float4* worldVertsB1,
- int capacityWorldVerts,
- const float minDist, float maxDist,
- __global const float4* vertices,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- __global int4* clippingFaces, int pairIndex)
-{
- int numContactsOut = 0;
- int numWorldVertsB1= 0;
-
-
- int closestFaceB=-1;
- float dmax = -FLT_MAX;
-
- {
- for(int face=0;face<hullB->m_numFaces;face++)
- {
- const float4 Normal = make_float4(faces[hullB->m_faceOffset+face].m_plane.x,
- faces[hullB->m_faceOffset+face].m_plane.y, faces[hullB->m_faceOffset+face].m_plane.z,0.f);
- const float4 WorldNormal = qtRotate(ornB, Normal);
- float d = dot3F4(WorldNormal,separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
-
- {
- const b3GpuFace_t polyB = faces[hullB->m_faceOffset+closestFaceB];
- const int numVertices = polyB.m_numIndices;
- for(int e0=0;e0<numVertices;e0++)
- {
- const float4 b = vertices[hullB->m_vertexOffset+indices[polyB.m_indexOffset+e0]];
- worldVertsB1[pairIndex*capacityWorldVerts+numWorldVertsB1++] = transform(&b,&posB,&ornB);
- }
- }
-
- int closestFaceA=-1;
- {
- float dmin = FLT_MAX;
- for(int face=0;face<hullA->m_numFaces;face++)
- {
- const float4 Normal = make_float4(
- faces[hullA->m_faceOffset+face].m_plane.x,
- faces[hullA->m_faceOffset+face].m_plane.y,
- faces[hullA->m_faceOffset+face].m_plane.z,
- 0.f);
- const float4 faceANormalWS = qtRotate(ornA,Normal);
-
- float d = dot3F4(faceANormalWS,separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- worldNormalsA1[pairIndex] = faceANormalWS;
- }
- }
- }
-
- int numVerticesA = faces[hullA->m_faceOffset+closestFaceA].m_numIndices;
- for(int e0=0;e0<numVerticesA;e0++)
- {
- const float4 a = vertices[hullA->m_vertexOffset+indices[faces[hullA->m_faceOffset+closestFaceA].m_indexOffset+e0]];
- worldVertsA1[pairIndex*capacityWorldVerts+e0] = transform(&a, &posA,&ornA);
- }
-
- clippingFaces[pairIndex].x = closestFaceA;
- clippingFaces[pairIndex].y = closestFaceB;
- clippingFaces[pairIndex].z = numVerticesA;
- clippingFaces[pairIndex].w = numWorldVertsB1;
-
-
- return numContactsOut;
-}
-
-
-
-int clipFaces(__global float4* worldVertsA1,
- __global float4* worldNormalsA1,
- __global float4* worldVertsB1,
- __global float4* worldVertsB2,
- int capacityWorldVertsB2,
- const float minDist, float maxDist,
- __global int4* clippingFaces,
- int pairIndex)
-{
- int numContactsOut = 0;
-
- int closestFaceA = clippingFaces[pairIndex].x;
- int closestFaceB = clippingFaces[pairIndex].y;
- int numVertsInA = clippingFaces[pairIndex].z;
- int numVertsInB = clippingFaces[pairIndex].w;
-
- int numVertsOut = 0;
-
- if (closestFaceA<0)
- return numContactsOut;
-
- __global float4* pVtxIn = &worldVertsB1[pairIndex*capacityWorldVertsB2];
- __global float4* pVtxOut = &worldVertsB2[pairIndex*capacityWorldVertsB2];
-
-
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
-
- for(int e0=0;e0<numVertsInA;e0++)
- {
- const float4 aw = worldVertsA1[pairIndex*capacityWorldVertsB2+e0];
- const float4 bw = worldVertsA1[pairIndex*capacityWorldVertsB2+((e0+1)%numVertsInA)];
- const float4 WorldEdge0 = aw - bw;
- float4 worldPlaneAnormal1 = worldNormalsA1[pairIndex];
- float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);
- float4 worldA1 = aw;
- float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);
- float4 planeNormalWS = planeNormalWS1;
- float planeEqWS=planeEqWS1;
- numVertsOut = clipFaceGlobal(pVtxIn, numVertsInB, planeNormalWS,planeEqWS, pVtxOut);
- __global float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsInB = numVertsOut;
- numVertsOut = 0;
- }
-
- //float4 planeNormalWS = worldNormalsA1[pairIndex];
- //float planeEqWS=-dot3F4(planeNormalWS,worldVertsA1[pairIndex*capacityWorldVertsB2]);
-
-
-
- /*for (int i=0;i<numVertsInB;i++)
- {
- pVtxOut[i] = pVtxIn[i];
- }*/
-
-
-
-
- //numVertsInB=0;
-
- float4 planeNormalWS = worldNormalsA1[pairIndex];
- float planeEqWS=-dot3F4(planeNormalWS,worldVertsA1[pairIndex*capacityWorldVertsB2]);
-
- for (int i=0;i<numVertsInB;i++)
- {
- float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;
- if (depth <=minDist)
- {
- depth = minDist;
- }
-
- if (depth <=maxDist)
- {
- float4 pointInWorld = pVtxIn[i];
- pVtxOut[numContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);
- }
- }
-
- clippingFaces[pairIndex].w =numContactsOut;
-
-
- return numContactsOut;
-
-}
-
-
-
-
-__kernel void findClippingFacesKernel( __global const int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const b3Collidable_t* collidables,
- __global const b3ConvexPolyhedronData_t* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const b3GpuFace_t* faces,
- __global const int* indices,
- __global const float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global int4* clippingFacesOut,
- __global float4* worldVertsA1,
- __global float4* worldNormalsA1,
- __global float4* worldVertsB1,
- int capacityWorldVerts,
- int numPairs
- )
-{
-
- int i = get_global_id(0);
- int pairIndex = i;
-
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- if (i<numPairs)
- {
-
- if (hasSeparatingAxis[i])
- {
-
- int bodyIndexA = pairs[i].x;
- int bodyIndexB = pairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
-
- int numLocalContactsOut = findClippingFaces(separatingNormals[i],
- &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],
- rigidBodies[bodyIndexA].m_pos,rigidBodies[bodyIndexA].m_quat,
- rigidBodies[bodyIndexB].m_pos,rigidBodies[bodyIndexB].m_quat,
- worldVertsA1,
- worldNormalsA1,
- worldVertsB1,capacityWorldVerts,
- minDist, maxDist,
- vertices,faces,indices,
- clippingFacesOut,i);
-
-
- }// if (hasSeparatingAxis[i])
- }// if (i<numPairs)
-
-}
-
-
-
-
-__kernel void clipFacesAndFindContactsKernel( __global const float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global int4* clippingFacesOut,
- __global float4* worldVertsA1,
- __global float4* worldNormalsA1,
- __global float4* worldVertsB1,
- __global float4* worldVertsB2,
- int vertexFaceCapacity,
- int numPairs,
- int debugMode
- )
-{
- int i = get_global_id(0);
- int pairIndex = i;
-
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
- if (i<numPairs)
- {
-
- if (hasSeparatingAxis[i])
- {
-
-// int bodyIndexA = pairs[i].x;
- // int bodyIndexB = pairs[i].y;
-
- int numLocalContactsOut = 0;
-
- int capacityWorldVertsB2 = vertexFaceCapacity;
-
- __global float4* pVtxIn = &worldVertsB1[pairIndex*capacityWorldVertsB2];
- __global float4* pVtxOut = &worldVertsB2[pairIndex*capacityWorldVertsB2];
-
-
- {
- __global int4* clippingFaces = clippingFacesOut;
-
-
- int closestFaceA = clippingFaces[pairIndex].x;
- int closestFaceB = clippingFaces[pairIndex].y;
- int numVertsInA = clippingFaces[pairIndex].z;
- int numVertsInB = clippingFaces[pairIndex].w;
-
- int numVertsOut = 0;
-
- if (closestFaceA>=0)
- {
-
-
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
-
- for(int e0=0;e0<numVertsInA;e0++)
- {
- const float4 aw = worldVertsA1[pairIndex*capacityWorldVertsB2+e0];
- const float4 bw = worldVertsA1[pairIndex*capacityWorldVertsB2+((e0+1)%numVertsInA)];
- const float4 WorldEdge0 = aw - bw;
- float4 worldPlaneAnormal1 = worldNormalsA1[pairIndex];
- float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);
- float4 worldA1 = aw;
- float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);
- float4 planeNormalWS = planeNormalWS1;
- float planeEqWS=planeEqWS1;
- numVertsOut = clipFaceGlobal(pVtxIn, numVertsInB, planeNormalWS,planeEqWS, pVtxOut);
- __global float4* tmp = pVtxOut;
- pVtxOut = pVtxIn;
- pVtxIn = tmp;
- numVertsInB = numVertsOut;
- numVertsOut = 0;
- }
-
- float4 planeNormalWS = worldNormalsA1[pairIndex];
- float planeEqWS=-dot3F4(planeNormalWS,worldVertsA1[pairIndex*capacityWorldVertsB2]);
-
- for (int i=0;i<numVertsInB;i++)
- {
- float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;
- if (depth <=minDist)
- {
- depth = minDist;
- }
-
- if (depth <=maxDist)
- {
- float4 pointInWorld = pVtxIn[i];
- pVtxOut[numLocalContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);
- }
- }
-
- }
- clippingFaces[pairIndex].w =numLocalContactsOut;
-
-
- }
-
- for (int i=0;i<numLocalContactsOut;i++)
- pVtxIn[i] = pVtxOut[i];
-
- }// if (hasSeparatingAxis[i])
- }// if (i<numPairs)
-
-}
-
-
-
-
-
-__kernel void newContactReductionKernel( __global int4* pairs,
- __global const b3RigidBodyData_t* rigidBodies,
- __global const float4* separatingNormals,
- __global const int* hasSeparatingAxis,
- __global struct b3Contact4Data* globalContactsOut,
- __global int4* clippingFaces,
- __global float4* worldVertsB2,
- volatile __global int* nGlobalContactsOut,
- int vertexFaceCapacity,
- int contactCapacity,
- int numPairs
- )
-{
- int i = get_global_id(0);
- int pairIndex = i;
-
- int4 contactIdx;
- contactIdx=make_int4(0,1,2,3);
-
- if (i<numPairs)
- {
-
- if (hasSeparatingAxis[i])
- {
-
-
-
-
- int nPoints = clippingFaces[pairIndex].w;
-
- if (nPoints>0)
- {
-
- __global float4* pointsIn = &worldVertsB2[pairIndex*vertexFaceCapacity];
- float4 normal = -separatingNormals[i];
-
- int nReducedContacts = extractManifoldSequentialGlobal(pointsIn, nPoints, normal, &contactIdx);
-
- int mprContactIndex = pairs[pairIndex].z;
-
- int dstIdx = mprContactIndex;
-
- if (dstIdx<0)
- {
- AppendInc( nGlobalContactsOut, dstIdx );
- }
-//#if 0
-
- if (dstIdx < contactCapacity)
- {
-
- __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];
- c->m_worldNormalOnB = -normal;
- c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);
- c->m_batchIdx = pairIndex;
- int bodyA = pairs[pairIndex].x;
- int bodyB = pairs[pairIndex].y;
-
- pairs[pairIndex].w = dstIdx;
-
- c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;
- c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;
- c->m_childIndexA =-1;
- c->m_childIndexB =-1;
-
- switch (nReducedContacts)
- {
- case 4:
- c->m_worldPosB[3] = pointsIn[contactIdx.w];
- case 3:
- c->m_worldPosB[2] = pointsIn[contactIdx.z];
- case 2:
- c->m_worldPosB[1] = pointsIn[contactIdx.y];
- case 1:
- if (mprContactIndex<0)//test
- c->m_worldPosB[0] = pointsIn[contactIdx.x];
- default:
- {
- }
- };
-
- GET_NPOINTS(*c) = nReducedContacts;
-
- }
-
-
-//#endif
-
- }// if (numContactsOut>0)
- }// if (hasSeparatingAxis[i])
- }// if (i<numPairs)
-
-
-
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.h
deleted file mode 100644
index 907809d8bd..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satClipHullContacts.h
+++ /dev/null
@@ -1,2098 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* satClipKernelsCL =
- "#define TRIANGLE_NUM_CONVEX_FACES 5\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile __global int*\n"
- "#endif\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "typedef unsigned int u32;\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#ifndef B3_CONVEX_POLYHEDRON_DATA_H\n"
- "#define B3_CONVEX_POLYHEDRON_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "typedef struct b3GpuFace b3GpuFace_t;\n"
- "struct b3GpuFace\n"
- "{\n"
- " b3Float4 m_plane;\n"
- " int m_indexOffset;\n"
- " int m_numIndices;\n"
- " int m_unusedPadding1;\n"
- " int m_unusedPadding2;\n"
- "};\n"
- "typedef struct b3ConvexPolyhedronData b3ConvexPolyhedronData_t;\n"
- "struct b3ConvexPolyhedronData\n"
- "{\n"
- " b3Float4 m_localCenter;\n"
- " b3Float4 m_extents;\n"
- " b3Float4 mC;\n"
- " b3Float4 mE;\n"
- " float m_radius;\n"
- " int m_faceOffset;\n"
- " int m_numFaces;\n"
- " int m_numVertices;\n"
- " int m_vertexOffset;\n"
- " int m_uniqueEdgesOffset;\n"
- " int m_numUniqueEdges;\n"
- " int m_unused;\n"
- "};\n"
- "#endif //B3_CONVEX_POLYHEDRON_DATA_H\n"
- "#ifndef B3_COLLIDABLE_H\n"
- "#define B3_COLLIDABLE_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "enum b3ShapeTypes\n"
- "{\n"
- " SHAPE_HEIGHT_FIELD=1,\n"
- " SHAPE_CONVEX_HULL=3,\n"
- " SHAPE_PLANE=4,\n"
- " SHAPE_CONCAVE_TRIMESH=5,\n"
- " SHAPE_COMPOUND_OF_CONVEX_HULLS=6,\n"
- " SHAPE_SPHERE=7,\n"
- " MAX_NUM_SHAPE_TYPES,\n"
- "};\n"
- "typedef struct b3Collidable b3Collidable_t;\n"
- "struct b3Collidable\n"
- "{\n"
- " union {\n"
- " int m_numChildShapes;\n"
- " int m_bvhIndex;\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_radius;\n"
- " int m_compoundBvhIndex;\n"
- " };\n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- "};\n"
- "typedef struct b3GpuChildShape b3GpuChildShape_t;\n"
- "struct b3GpuChildShape\n"
- "{\n"
- " b3Float4 m_childPosition;\n"
- " b3Quat m_childOrientation;\n"
- " int m_shapeIndex;\n"
- " int m_unused0;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "struct b3CompoundOverlappingPair\n"
- "{\n"
- " int m_bodyIndexA;\n"
- " int m_bodyIndexB;\n"
- "// int m_pairType;\n"
- " int m_childShapeIndexA;\n"
- " int m_childShapeIndexB;\n"
- "};\n"
- "#endif //B3_COLLIDABLE_H\n"
- "#ifndef B3_RIGIDBODY_DATA_H\n"
- "#define B3_RIGIDBODY_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3RigidBodyData b3RigidBodyData_t;\n"
- "struct b3RigidBodyData\n"
- "{\n"
- " b3Float4 m_pos;\n"
- " b3Quat m_quat;\n"
- " b3Float4 m_linVel;\n"
- " b3Float4 m_angVel;\n"
- " int m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "};\n"
- "typedef struct b3InertiaData b3InertiaData_t;\n"
- "struct b3InertiaData\n"
- "{\n"
- " b3Mat3x3 m_invInertiaWorld;\n"
- " b3Mat3x3 m_initInvInertia;\n"
- "};\n"
- "#endif //B3_RIGIDBODY_DATA_H\n"
- " \n"
- "#define GET_NPOINTS(x) (x).m_worldNormalOnB.w\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "__inline\n"
- "float fastDiv(float numerator, float denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "// return numerator/denominator; \n"
- "}\n"
- "__inline\n"
- "float4 fastDiv4(float4 numerator, float4 denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "//#define dot3F4 dot\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "__inline\n"
- "float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)\n"
- "{\n"
- " return qtRotate( *orientation, *p ) + (*translation);\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "}\n"
- "__inline float4 lerp3(const float4 a,const float4 b, float t)\n"
- "{\n"
- " return make_float4( a.x + (b.x - a.x) * t,\n"
- " a.y + (b.y - a.y) * t,\n"
- " a.z + (b.z - a.z) * t,\n"
- " 0.f);\n"
- "}\n"
- "// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut\n"
- "int clipFaceGlobal(__global const float4* pVtxIn, int numVertsIn, float4 planeNormalWS,float planeEqWS, __global float4* ppVtxOut)\n"
- "{\n"
- " \n"
- " int ve;\n"
- " float ds, de;\n"
- " int numVertsOut = 0;\n"
- " //double-check next test\n"
- " if (numVertsIn < 2)\n"
- " return 0;\n"
- " \n"
- " float4 firstVertex=pVtxIn[numVertsIn-1];\n"
- " float4 endVertex = pVtxIn[0];\n"
- " \n"
- " ds = dot3F4(planeNormalWS,firstVertex)+planeEqWS;\n"
- " \n"
- " for (ve = 0; ve < numVertsIn; ve++)\n"
- " {\n"
- " endVertex=pVtxIn[ve];\n"
- " de = dot3F4(planeNormalWS,endVertex)+planeEqWS;\n"
- " if (ds<0)\n"
- " {\n"
- " if (de<0)\n"
- " {\n"
- " // Start < 0, end < 0, so output endVertex\n"
- " ppVtxOut[numVertsOut++] = endVertex;\n"
- " }\n"
- " else\n"
- " {\n"
- " // Start < 0, end >= 0, so output intersection\n"
- " ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );\n"
- " }\n"
- " }\n"
- " else\n"
- " {\n"
- " if (de<0)\n"
- " {\n"
- " // Start >= 0, end < 0 so output intersection and end\n"
- " ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );\n"
- " ppVtxOut[numVertsOut++] = endVertex;\n"
- " }\n"
- " }\n"
- " firstVertex = endVertex;\n"
- " ds = de;\n"
- " }\n"
- " return numVertsOut;\n"
- "}\n"
- "// Clips a face to the back of a plane, return the number of vertices out, stored in ppVtxOut\n"
- "int clipFace(const float4* pVtxIn, int numVertsIn, float4 planeNormalWS,float planeEqWS, float4* ppVtxOut)\n"
- "{\n"
- " \n"
- " int ve;\n"
- " float ds, de;\n"
- " int numVertsOut = 0;\n"
- "//double-check next test\n"
- " if (numVertsIn < 2)\n"
- " return 0;\n"
- " float4 firstVertex=pVtxIn[numVertsIn-1];\n"
- " float4 endVertex = pVtxIn[0];\n"
- " \n"
- " ds = dot3F4(planeNormalWS,firstVertex)+planeEqWS;\n"
- " for (ve = 0; ve < numVertsIn; ve++)\n"
- " {\n"
- " endVertex=pVtxIn[ve];\n"
- " de = dot3F4(planeNormalWS,endVertex)+planeEqWS;\n"
- " if (ds<0)\n"
- " {\n"
- " if (de<0)\n"
- " {\n"
- " // Start < 0, end < 0, so output endVertex\n"
- " ppVtxOut[numVertsOut++] = endVertex;\n"
- " }\n"
- " else\n"
- " {\n"
- " // Start < 0, end >= 0, so output intersection\n"
- " ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );\n"
- " }\n"
- " }\n"
- " else\n"
- " {\n"
- " if (de<0)\n"
- " {\n"
- " // Start >= 0, end < 0 so output intersection and end\n"
- " ppVtxOut[numVertsOut++] = lerp3(firstVertex, endVertex,(ds * 1.f/(ds - de)) );\n"
- " ppVtxOut[numVertsOut++] = endVertex;\n"
- " }\n"
- " }\n"
- " firstVertex = endVertex;\n"
- " ds = de;\n"
- " }\n"
- " return numVertsOut;\n"
- "}\n"
- "int clipFaceAgainstHull(const float4 separatingNormal, __global const b3ConvexPolyhedronData_t* hullA, \n"
- " const float4 posA, const Quaternion ornA, float4* worldVertsB1, int numWorldVertsB1,\n"
- " float4* worldVertsB2, int capacityWorldVertsB2,\n"
- " const float minDist, float maxDist,\n"
- " __global const float4* vertices,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " float4* contactsOut,\n"
- " int contactCapacity)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " float4* pVtxIn = worldVertsB1;\n"
- " float4* pVtxOut = worldVertsB2;\n"
- " \n"
- " int numVertsIn = numWorldVertsB1;\n"
- " int numVertsOut = 0;\n"
- " int closestFaceA=-1;\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " for(int face=0;face<hullA->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(\n"
- " faces[hullA->m_faceOffset+face].m_plane.x, \n"
- " faces[hullA->m_faceOffset+face].m_plane.y, \n"
- " faces[hullA->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 faceANormalWS = qtRotate(ornA,Normal);\n"
- " \n"
- " float d = dot3F4(faceANormalWS,separatingNormal);\n"
- " if (d < dmin)\n"
- " {\n"
- " dmin = d;\n"
- " closestFaceA = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " if (closestFaceA<0)\n"
- " return numContactsOut;\n"
- " b3GpuFace_t polyA = faces[hullA->m_faceOffset+closestFaceA];\n"
- " // clip polygon to back of planes of all faces of hull A that are adjacent to witness face\n"
- " int numVerticesA = polyA.m_numIndices;\n"
- " for(int e0=0;e0<numVerticesA;e0++)\n"
- " {\n"
- " const float4 a = vertices[hullA->m_vertexOffset+indices[polyA.m_indexOffset+e0]];\n"
- " const float4 b = vertices[hullA->m_vertexOffset+indices[polyA.m_indexOffset+((e0+1)%numVerticesA)]];\n"
- " const float4 edge0 = a - b;\n"
- " const float4 WorldEdge0 = qtRotate(ornA,edge0);\n"
- " float4 planeNormalA = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);\n"
- " float4 worldPlaneAnormal1 = qtRotate(ornA,planeNormalA);\n"
- " float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);\n"
- " float4 worldA1 = transform(&a,&posA,&ornA);\n"
- " float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);\n"
- " \n"
- " float4 planeNormalWS = planeNormalWS1;\n"
- " float planeEqWS=planeEqWS1;\n"
- " \n"
- " //clip face\n"
- " //clipFace(*pVtxIn, *pVtxOut,planeNormalWS,planeEqWS);\n"
- " numVertsOut = clipFace(pVtxIn, numVertsIn, planeNormalWS,planeEqWS, pVtxOut);\n"
- " //btSwap(pVtxIn,pVtxOut);\n"
- " float4* tmp = pVtxOut;\n"
- " pVtxOut = pVtxIn;\n"
- " pVtxIn = tmp;\n"
- " numVertsIn = numVertsOut;\n"
- " numVertsOut = 0;\n"
- " }\n"
- " \n"
- " // only keep points that are behind the witness face\n"
- " {\n"
- " float4 localPlaneNormal = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);\n"
- " float localPlaneEq = polyA.m_plane.w;\n"
- " float4 planeNormalWS = qtRotate(ornA,localPlaneNormal);\n"
- " float planeEqWS=localPlaneEq-dot3F4(planeNormalWS,posA);\n"
- " for (int i=0;i<numVertsIn;i++)\n"
- " {\n"
- " float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;\n"
- " if (depth <=minDist)\n"
- " {\n"
- " depth = minDist;\n"
- " }\n"
- " if (depth <=maxDist)\n"
- " {\n"
- " float4 pointInWorld = pVtxIn[i];\n"
- " //resultOut.addContactPoint(separatingNormal,point,depth);\n"
- " contactsOut[numContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);\n"
- " }\n"
- " }\n"
- " }\n"
- " return numContactsOut;\n"
- "}\n"
- "int clipFaceAgainstHullLocalA(const float4 separatingNormal, const b3ConvexPolyhedronData_t* hullA, \n"
- " const float4 posA, const Quaternion ornA, float4* worldVertsB1, int numWorldVertsB1,\n"
- " float4* worldVertsB2, int capacityWorldVertsB2,\n"
- " const float minDist, float maxDist,\n"
- " const float4* verticesA,\n"
- " const b3GpuFace_t* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB,\n"
- " __global const b3GpuFace_t* facesB,\n"
- " __global const int* indicesB,\n"
- " float4* contactsOut,\n"
- " int contactCapacity)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " float4* pVtxIn = worldVertsB1;\n"
- " float4* pVtxOut = worldVertsB2;\n"
- " \n"
- " int numVertsIn = numWorldVertsB1;\n"
- " int numVertsOut = 0;\n"
- " int closestFaceA=-1;\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " for(int face=0;face<hullA->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(\n"
- " facesA[hullA->m_faceOffset+face].m_plane.x, \n"
- " facesA[hullA->m_faceOffset+face].m_plane.y, \n"
- " facesA[hullA->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 faceANormalWS = qtRotate(ornA,Normal);\n"
- " \n"
- " float d = dot3F4(faceANormalWS,separatingNormal);\n"
- " if (d < dmin)\n"
- " {\n"
- " dmin = d;\n"
- " closestFaceA = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " if (closestFaceA<0)\n"
- " return numContactsOut;\n"
- " b3GpuFace_t polyA = facesA[hullA->m_faceOffset+closestFaceA];\n"
- " // clip polygon to back of planes of all faces of hull A that are adjacent to witness face\n"
- " int numVerticesA = polyA.m_numIndices;\n"
- " for(int e0=0;e0<numVerticesA;e0++)\n"
- " {\n"
- " const float4 a = verticesA[hullA->m_vertexOffset+indicesA[polyA.m_indexOffset+e0]];\n"
- " const float4 b = verticesA[hullA->m_vertexOffset+indicesA[polyA.m_indexOffset+((e0+1)%numVerticesA)]];\n"
- " const float4 edge0 = a - b;\n"
- " const float4 WorldEdge0 = qtRotate(ornA,edge0);\n"
- " float4 planeNormalA = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);\n"
- " float4 worldPlaneAnormal1 = qtRotate(ornA,planeNormalA);\n"
- " float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);\n"
- " float4 worldA1 = transform(&a,&posA,&ornA);\n"
- " float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);\n"
- " \n"
- " float4 planeNormalWS = planeNormalWS1;\n"
- " float planeEqWS=planeEqWS1;\n"
- " \n"
- " //clip face\n"
- " //clipFace(*pVtxIn, *pVtxOut,planeNormalWS,planeEqWS);\n"
- " numVertsOut = clipFace(pVtxIn, numVertsIn, planeNormalWS,planeEqWS, pVtxOut);\n"
- " //btSwap(pVtxIn,pVtxOut);\n"
- " float4* tmp = pVtxOut;\n"
- " pVtxOut = pVtxIn;\n"
- " pVtxIn = tmp;\n"
- " numVertsIn = numVertsOut;\n"
- " numVertsOut = 0;\n"
- " }\n"
- " \n"
- " // only keep points that are behind the witness face\n"
- " {\n"
- " float4 localPlaneNormal = make_float4(polyA.m_plane.x,polyA.m_plane.y,polyA.m_plane.z,0.f);\n"
- " float localPlaneEq = polyA.m_plane.w;\n"
- " float4 planeNormalWS = qtRotate(ornA,localPlaneNormal);\n"
- " float planeEqWS=localPlaneEq-dot3F4(planeNormalWS,posA);\n"
- " for (int i=0;i<numVertsIn;i++)\n"
- " {\n"
- " float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;\n"
- " if (depth <=minDist)\n"
- " {\n"
- " depth = minDist;\n"
- " }\n"
- " if (depth <=maxDist)\n"
- " {\n"
- " float4 pointInWorld = pVtxIn[i];\n"
- " //resultOut.addContactPoint(separatingNormal,point,depth);\n"
- " contactsOut[numContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);\n"
- " }\n"
- " }\n"
- " }\n"
- " return numContactsOut;\n"
- "}\n"
- "int clipHullAgainstHull(const float4 separatingNormal,\n"
- " __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB, \n"
- " const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB, \n"
- " float4* worldVertsB1, float4* worldVertsB2, int capacityWorldVerts,\n"
- " const float minDist, float maxDist,\n"
- " __global const float4* vertices,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " float4* localContactsOut,\n"
- " int localContactCapacity)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " int numWorldVertsB1= 0;\n"
- " int closestFaceB=-1;\n"
- " float dmax = -FLT_MAX;\n"
- " {\n"
- " for(int face=0;face<hullB->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(faces[hullB->m_faceOffset+face].m_plane.x, \n"
- " faces[hullB->m_faceOffset+face].m_plane.y, faces[hullB->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 WorldNormal = qtRotate(ornB, Normal);\n"
- " float d = dot3F4(WorldNormal,separatingNormal);\n"
- " if (d > dmax)\n"
- " {\n"
- " dmax = d;\n"
- " closestFaceB = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " {\n"
- " const b3GpuFace_t polyB = faces[hullB->m_faceOffset+closestFaceB];\n"
- " const int numVertices = polyB.m_numIndices;\n"
- " for(int e0=0;e0<numVertices;e0++)\n"
- " {\n"
- " const float4 b = vertices[hullB->m_vertexOffset+indices[polyB.m_indexOffset+e0]];\n"
- " worldVertsB1[numWorldVertsB1++] = transform(&b,&posB,&ornB);\n"
- " }\n"
- " }\n"
- " if (closestFaceB>=0)\n"
- " {\n"
- " numContactsOut = clipFaceAgainstHull(separatingNormal, hullA, \n"
- " posA,ornA,\n"
- " worldVertsB1,numWorldVertsB1,worldVertsB2,capacityWorldVerts, minDist, maxDist,vertices,\n"
- " faces,\n"
- " indices,localContactsOut,localContactCapacity);\n"
- " }\n"
- " return numContactsOut;\n"
- "}\n"
- "int clipHullAgainstHullLocalA(const float4 separatingNormal,\n"
- " const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB, \n"
- " const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB, \n"
- " float4* worldVertsB1, float4* worldVertsB2, int capacityWorldVerts,\n"
- " const float minDist, float maxDist,\n"
- " const float4* verticesA,\n"
- " const b3GpuFace_t* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB,\n"
- " __global const b3GpuFace_t* facesB,\n"
- " __global const int* indicesB,\n"
- " float4* localContactsOut,\n"
- " int localContactCapacity)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " int numWorldVertsB1= 0;\n"
- " int closestFaceB=-1;\n"
- " float dmax = -FLT_MAX;\n"
- " {\n"
- " for(int face=0;face<hullB->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(facesB[hullB->m_faceOffset+face].m_plane.x, \n"
- " facesB[hullB->m_faceOffset+face].m_plane.y, facesB[hullB->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 WorldNormal = qtRotate(ornB, Normal);\n"
- " float d = dot3F4(WorldNormal,separatingNormal);\n"
- " if (d > dmax)\n"
- " {\n"
- " dmax = d;\n"
- " closestFaceB = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " {\n"
- " const b3GpuFace_t polyB = facesB[hullB->m_faceOffset+closestFaceB];\n"
- " const int numVertices = polyB.m_numIndices;\n"
- " for(int e0=0;e0<numVertices;e0++)\n"
- " {\n"
- " const float4 b = verticesB[hullB->m_vertexOffset+indicesB[polyB.m_indexOffset+e0]];\n"
- " worldVertsB1[numWorldVertsB1++] = transform(&b,&posB,&ornB);\n"
- " }\n"
- " }\n"
- " if (closestFaceB>=0)\n"
- " {\n"
- " numContactsOut = clipFaceAgainstHullLocalA(separatingNormal, hullA, \n"
- " posA,ornA,\n"
- " worldVertsB1,numWorldVertsB1,worldVertsB2,capacityWorldVerts, minDist, maxDist,\n"
- " verticesA,facesA,indicesA,\n"
- " verticesB,facesB,indicesB,\n"
- " localContactsOut,localContactCapacity);\n"
- " }\n"
- " return numContactsOut;\n"
- "}\n"
- "#define PARALLEL_SUM(v, n) for(int j=1; j<n; j++) v[0] += v[j];\n"
- "#define PARALLEL_DO(execution, n) for(int ie=0; ie<n; ie++){execution;}\n"
- "#define REDUCE_MAX(v, n) {int i=0; for(int offset=0; offset<n; offset++) v[i] = (v[i].y > v[i+offset].y)? v[i]: v[i+offset]; }\n"
- "#define REDUCE_MIN(v, n) {int i=0; for(int offset=0; offset<n; offset++) v[i] = (v[i].y < v[i+offset].y)? v[i]: v[i+offset]; }\n"
- "int extractManifoldSequentialGlobal(__global const float4* p, int nPoints, float4 nearNormal, int4* contactIdx)\n"
- "{\n"
- " if( nPoints == 0 )\n"
- " return 0;\n"
- " \n"
- " if (nPoints <=4)\n"
- " return nPoints;\n"
- " \n"
- " \n"
- " if (nPoints >64)\n"
- " nPoints = 64;\n"
- " \n"
- " float4 center = make_float4(0.f);\n"
- " {\n"
- " \n"
- " for (int i=0;i<nPoints;i++)\n"
- " center += p[i];\n"
- " center /= (float)nPoints;\n"
- " }\n"
- " \n"
- " \n"
- " \n"
- " // sample 4 directions\n"
- " \n"
- " float4 aVector = p[0] - center;\n"
- " float4 u = cross3( nearNormal, aVector );\n"
- " float4 v = cross3( nearNormal, u );\n"
- " u = normalize3( u );\n"
- " v = normalize3( v );\n"
- " \n"
- " \n"
- " //keep point with deepest penetration\n"
- " float minW= FLT_MAX;\n"
- " \n"
- " int minIndex=-1;\n"
- " \n"
- " float4 maxDots;\n"
- " maxDots.x = FLT_MIN;\n"
- " maxDots.y = FLT_MIN;\n"
- " maxDots.z = FLT_MIN;\n"
- " maxDots.w = FLT_MIN;\n"
- " \n"
- " // idx, distance\n"
- " for(int ie = 0; ie<nPoints; ie++ )\n"
- " {\n"
- " if (p[ie].w<minW)\n"
- " {\n"
- " minW = p[ie].w;\n"
- " minIndex=ie;\n"
- " }\n"
- " float f;\n"
- " float4 r = p[ie]-center;\n"
- " f = dot3F4( u, r );\n"
- " if (f<maxDots.x)\n"
- " {\n"
- " maxDots.x = f;\n"
- " contactIdx[0].x = ie;\n"
- " }\n"
- " \n"
- " f = dot3F4( -u, r );\n"
- " if (f<maxDots.y)\n"
- " {\n"
- " maxDots.y = f;\n"
- " contactIdx[0].y = ie;\n"
- " }\n"
- " \n"
- " \n"
- " f = dot3F4( v, r );\n"
- " if (f<maxDots.z)\n"
- " {\n"
- " maxDots.z = f;\n"
- " contactIdx[0].z = ie;\n"
- " }\n"
- " \n"
- " f = dot3F4( -v, r );\n"
- " if (f<maxDots.w)\n"
- " {\n"
- " maxDots.w = f;\n"
- " contactIdx[0].w = ie;\n"
- " }\n"
- " \n"
- " }\n"
- " \n"
- " if (contactIdx[0].x != minIndex && contactIdx[0].y != minIndex && contactIdx[0].z != minIndex && contactIdx[0].w != minIndex)\n"
- " {\n"
- " //replace the first contact with minimum (todo: replace contact with least penetration)\n"
- " contactIdx[0].x = minIndex;\n"
- " }\n"
- " \n"
- " return 4;\n"
- " \n"
- "}\n"
- "int extractManifoldSequentialGlobalFake(__global const float4* p, int nPoints, float4 nearNormal, int* contactIdx)\n"
- "{\n"
- " contactIdx[0] = 0;\n"
- " contactIdx[1] = 1;\n"
- " contactIdx[2] = 2;\n"
- " contactIdx[3] = 3;\n"
- " \n"
- " if( nPoints == 0 ) return 0;\n"
- " \n"
- " nPoints = min2( nPoints, 4 );\n"
- " return nPoints;\n"
- " \n"
- "}\n"
- "int extractManifoldSequential(const float4* p, int nPoints, float4 nearNormal, int* contactIdx)\n"
- "{\n"
- " if( nPoints == 0 ) return 0;\n"
- " nPoints = min2( nPoints, 64 );\n"
- " float4 center = make_float4(0.f);\n"
- " {\n"
- " float4 v[64];\n"
- " for (int i=0;i<nPoints;i++)\n"
- " v[i] = p[i];\n"
- " //memcpy( v, p, nPoints*sizeof(float4) );\n"
- " PARALLEL_SUM( v, nPoints );\n"
- " center = v[0]/(float)nPoints;\n"
- " }\n"
- " \n"
- " { // sample 4 directions\n"
- " if( nPoints < 4 )\n"
- " {\n"
- " for(int i=0; i<nPoints; i++) \n"
- " contactIdx[i] = i;\n"
- " return nPoints;\n"
- " }\n"
- " float4 aVector = p[0] - center;\n"
- " float4 u = cross3( nearNormal, aVector );\n"
- " float4 v = cross3( nearNormal, u );\n"
- " u = normalize3( u );\n"
- " v = normalize3( v );\n"
- " int idx[4];\n"
- " float2 max00 = make_float2(0,FLT_MAX);\n"
- " {\n"
- " // idx, distance\n"
- " {\n"
- " {\n"
- " int4 a[64];\n"
- " for(int ie = 0; ie<nPoints; ie++ )\n"
- " {\n"
- " \n"
- " \n"
- " float f;\n"
- " float4 r = p[ie]-center;\n"
- " f = dot3F4( u, r );\n"
- " a[ie].x = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);\n"
- " f = dot3F4( -u, r );\n"
- " a[ie].y = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);\n"
- " f = dot3F4( v, r );\n"
- " a[ie].z = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);\n"
- " f = dot3F4( -v, r );\n"
- " a[ie].w = ((*(u32*)&f) & 0xffffff00) | (0xff & ie);\n"
- " }\n"
- " for(int ie=0; ie<nPoints; ie++)\n"
- " {\n"
- " a[0].x = (a[0].x > a[ie].x )? a[0].x: a[ie].x;\n"
- " a[0].y = (a[0].y > a[ie].y )? a[0].y: a[ie].y;\n"
- " a[0].z = (a[0].z > a[ie].z )? a[0].z: a[ie].z;\n"
- " a[0].w = (a[0].w > a[ie].w )? a[0].w: a[ie].w;\n"
- " }\n"
- " idx[0] = (int)a[0].x & 0xff;\n"
- " idx[1] = (int)a[0].y & 0xff;\n"
- " idx[2] = (int)a[0].z & 0xff;\n"
- " idx[3] = (int)a[0].w & 0xff;\n"
- " }\n"
- " }\n"
- " {\n"
- " float2 h[64];\n"
- " PARALLEL_DO( h[ie] = make_float2((float)ie, p[ie].w), nPoints );\n"
- " REDUCE_MIN( h, nPoints );\n"
- " max00 = h[0];\n"
- " }\n"
- " }\n"
- " contactIdx[0] = idx[0];\n"
- " contactIdx[1] = idx[1];\n"
- " contactIdx[2] = idx[2];\n"
- " contactIdx[3] = idx[3];\n"
- " return 4;\n"
- " }\n"
- "}\n"
- "__kernel void extractManifoldAndAddContactKernel(__global const int4* pairs, \n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const float4* closestPointsWorld,\n"
- " __global const float4* separatingNormalsWorld,\n"
- " __global const int* contactCounts,\n"
- " __global const int* contactOffsets,\n"
- " __global struct b3Contact4Data* restrict contactsOut,\n"
- " counter32_t nContactsOut,\n"
- " int contactCapacity,\n"
- " int numPairs,\n"
- " int pairIndex\n"
- " )\n"
- "{\n"
- " int idx = get_global_id(0);\n"
- " \n"
- " if (idx<numPairs)\n"
- " {\n"
- " float4 normal = separatingNormalsWorld[idx];\n"
- " int nPoints = contactCounts[idx];\n"
- " __global const float4* pointsIn = &closestPointsWorld[contactOffsets[idx]];\n"
- " float4 localPoints[64];\n"
- " for (int i=0;i<nPoints;i++)\n"
- " {\n"
- " localPoints[i] = pointsIn[i];\n"
- " }\n"
- " int contactIdx[4];// = {-1,-1,-1,-1};\n"
- " contactIdx[0] = -1;\n"
- " contactIdx[1] = -1;\n"
- " contactIdx[2] = -1;\n"
- " contactIdx[3] = -1;\n"
- " int nContacts = extractManifoldSequential(localPoints, nPoints, normal, contactIdx);\n"
- " int dstIdx;\n"
- " AppendInc( nContactsOut, dstIdx );\n"
- " if (dstIdx<contactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = contactsOut + dstIdx;\n"
- " c->m_worldNormalOnB = -normal;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = idx;\n"
- " int bodyA = pairs[pairIndex].x;\n"
- " int bodyB = pairs[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0 ? -bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0 ? -bodyB:bodyB;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " for (int i=0;i<nContacts;i++)\n"
- " {\n"
- " c->m_worldPosB[i] = localPoints[contactIdx[i]];\n"
- " }\n"
- " GET_NPOINTS(*c) = nContacts;\n"
- " }\n"
- " }\n"
- "}\n"
- "void trInverse(float4 translationIn, Quaternion orientationIn,\n"
- " float4* translationOut, Quaternion* orientationOut)\n"
- "{\n"
- " *orientationOut = qtInvert(orientationIn);\n"
- " *translationOut = qtRotate(*orientationOut, -translationIn);\n"
- "}\n"
- "void trMul(float4 translationA, Quaternion orientationA,\n"
- " float4 translationB, Quaternion orientationB,\n"
- " float4* translationOut, Quaternion* orientationOut)\n"
- "{\n"
- " *orientationOut = qtMul(orientationA,orientationB);\n"
- " *translationOut = transform(&translationB,&translationA,&orientationA);\n"
- "}\n"
- "__kernel void clipHullHullKernel( __global int4* pairs, \n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const b3ConvexPolyhedronData_t* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " __global const float4* separatingNormals,\n"
- " __global const int* hasSeparatingAxis,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int numPairs,\n"
- " int contactCapacity)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " float4 worldVertsB1[64];\n"
- " float4 worldVertsB2[64];\n"
- " int capacityWorldVerts = 64; \n"
- " float4 localContactsOut[64];\n"
- " int localContactCapacity=64;\n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " if (i<numPairs)\n"
- " {\n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " if (hasSeparatingAxis[i])\n"
- " {\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " int numLocalContactsOut = clipHullAgainstHull(separatingNormals[i],\n"
- " &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],\n"
- " rigidBodies[bodyIndexA].m_pos,rigidBodies[bodyIndexA].m_quat,\n"
- " rigidBodies[bodyIndexB].m_pos,rigidBodies[bodyIndexB].m_quat,\n"
- " worldVertsB1,worldVertsB2,capacityWorldVerts,\n"
- " minDist, maxDist,\n"
- " vertices,faces,indices,\n"
- " localContactsOut,localContactCapacity);\n"
- " \n"
- " if (numLocalContactsOut>0)\n"
- " {\n"
- " float4 normal = -separatingNormals[i];\n"
- " int nPoints = numLocalContactsOut;\n"
- " float4* pointsIn = localContactsOut;\n"
- " int contactIdx[4];// = {-1,-1,-1,-1};\n"
- " contactIdx[0] = -1;\n"
- " contactIdx[1] = -1;\n"
- " contactIdx[2] = -1;\n"
- " contactIdx[3] = -1;\n"
- " \n"
- " int nReducedContacts = extractManifoldSequential(pointsIn, nPoints, normal, contactIdx);\n"
- " \n"
- " \n"
- " int mprContactIndex = pairs[pairIndex].z;\n"
- " int dstIdx = mprContactIndex;\n"
- " if (dstIdx<0)\n"
- " {\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " }\n"
- " if (dstIdx<contactCapacity)\n"
- " {\n"
- " pairs[pairIndex].z = dstIdx;\n"
- " __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;\n"
- " c->m_worldNormalOnB = -normal;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = pairs[pairIndex].x;\n"
- " int bodyB = pairs[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " for (int i=0;i<nReducedContacts;i++)\n"
- " {\n"
- " //this condition means: overwrite contact point, unless at index i==0 we have a valid 'mpr' contact\n"
- " if (i>0||(mprContactIndex<0))\n"
- " {\n"
- " c->m_worldPosB[i] = pointsIn[contactIdx[i]];\n"
- " }\n"
- " }\n"
- " GET_NPOINTS(*c) = nReducedContacts;\n"
- " }\n"
- " \n"
- " }// if (numContactsOut>0)\n"
- " }// if (hasSeparatingAxis[i])\n"
- " }// if (i<numPairs)\n"
- "}\n"
- "__kernel void clipCompoundsHullHullKernel( __global const int4* gpuCompoundPairs, \n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const b3ConvexPolyhedronData_t* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " __global const b3GpuChildShape_t* gpuChildShapes,\n"
- " __global const float4* gpuCompoundSepNormalsOut,\n"
- " __global const int* gpuHasCompoundSepNormalsOut,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int numCompoundPairs, int maxContactCapacity)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " float4 worldVertsB1[64];\n"
- " float4 worldVertsB2[64];\n"
- " int capacityWorldVerts = 64; \n"
- " float4 localContactsOut[64];\n"
- " int localContactCapacity=64;\n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " if (i<numCompoundPairs)\n"
- " {\n"
- " if (gpuHasCompoundSepNormalsOut[i])\n"
- " {\n"
- " int bodyIndexA = gpuCompoundPairs[i].x;\n"
- " int bodyIndexB = gpuCompoundPairs[i].y;\n"
- " \n"
- " int childShapeIndexA = gpuCompoundPairs[i].z;\n"
- " int childShapeIndexB = gpuCompoundPairs[i].w;\n"
- " \n"
- " int collidableIndexA = -1;\n"
- " int collidableIndexB = -1;\n"
- " \n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " \n"
- " float4 ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " \n"
- " if (childShapeIndexA >= 0)\n"
- " {\n"
- " collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;\n"
- " float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;\n"
- " float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;\n"
- " float4 newPosA = qtRotate(ornA,childPosA)+posA;\n"
- " float4 newOrnA = qtMul(ornA,childOrnA);\n"
- " posA = newPosA;\n"
- " ornA = newOrnA;\n"
- " } else\n"
- " {\n"
- " collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " }\n"
- " \n"
- " if (childShapeIndexB>=0)\n"
- " {\n"
- " collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " } else\n"
- " {\n"
- " collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx; \n"
- " }\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " int numLocalContactsOut = clipHullAgainstHull(gpuCompoundSepNormalsOut[i],\n"
- " &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " worldVertsB1,worldVertsB2,capacityWorldVerts,\n"
- " minDist, maxDist,\n"
- " vertices,faces,indices,\n"
- " localContactsOut,localContactCapacity);\n"
- " \n"
- " if (numLocalContactsOut>0)\n"
- " {\n"
- " float4 normal = -gpuCompoundSepNormalsOut[i];\n"
- " int nPoints = numLocalContactsOut;\n"
- " float4* pointsIn = localContactsOut;\n"
- " int contactIdx[4];// = {-1,-1,-1,-1};\n"
- " contactIdx[0] = -1;\n"
- " contactIdx[1] = -1;\n"
- " contactIdx[2] = -1;\n"
- " contactIdx[3] = -1;\n"
- " \n"
- " int nReducedContacts = extractManifoldSequential(pointsIn, nPoints, normal, contactIdx);\n"
- " \n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " if ((dstIdx+nReducedContacts) < maxContactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;\n"
- " c->m_worldNormalOnB = -normal;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = gpuCompoundPairs[pairIndex].x;\n"
- " int bodyB = gpuCompoundPairs[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
- " c->m_childIndexA = childShapeIndexA;\n"
- " c->m_childIndexB = childShapeIndexB;\n"
- " for (int i=0;i<nReducedContacts;i++)\n"
- " {\n"
- " c->m_worldPosB[i] = pointsIn[contactIdx[i]];\n"
- " }\n"
- " GET_NPOINTS(*c) = nReducedContacts;\n"
- " }\n"
- " \n"
- " }// if (numContactsOut>0)\n"
- " }// if (gpuHasCompoundSepNormalsOut[i])\n"
- " }// if (i<numCompoundPairs)\n"
- "}\n"
- "__kernel void sphereSphereCollisionKernel( __global const int4* pairs, \n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const float4* separatingNormals,\n"
- " __global const int* hasSeparatingAxis,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int contactCapacity,\n"
- " int numPairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " if (collidables[collidableIndexA].m_shapeType == SHAPE_SPHERE &&\n"
- " collidables[collidableIndexB].m_shapeType == SHAPE_SPHERE)\n"
- " {\n"
- " //sphere-sphere\n"
- " float radiusA = collidables[collidableIndexA].m_radius;\n"
- " float radiusB = collidables[collidableIndexB].m_radius;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " float4 diff = posA-posB;\n"
- " float len = length(diff);\n"
- " \n"
- " ///iff distance positive, don't generate a new contact\n"
- " if ( len <= (radiusA+radiusB))\n"
- " {\n"
- " ///distance (negative means penetration)\n"
- " float dist = len - (radiusA+radiusB);\n"
- " float4 normalOnSurfaceB = make_float4(1.f,0.f,0.f,0.f);\n"
- " if (len > 0.00001)\n"
- " {\n"
- " normalOnSurfaceB = diff / len;\n"
- " }\n"
- " float4 contactPosB = posB + normalOnSurfaceB*radiusB;\n"
- " contactPosB.w = dist;\n"
- " \n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " if (dstIdx < contactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = -normalOnSurfaceB;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = pairs[pairIndex].x;\n"
- " int bodyB = pairs[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
- " c->m_worldPosB[0] = contactPosB;\n"
- " c->m_childIndexA = -1;\n"
- " c->m_childIndexB = -1;\n"
- " GET_NPOINTS(*c) = 1;\n"
- " }//if (dstIdx < numPairs)\n"
- " }//if ( len <= (radiusA+radiusB))\n"
- " }//SHAPE_SPHERE SHAPE_SPHERE\n"
- " }//if (i<numPairs)\n"
- "} \n"
- "__kernel void clipHullHullConcaveConvexKernel( __global int4* concavePairsIn,\n"
- " __global const b3RigidBodyData_t* rigidBodies, \n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const b3ConvexPolyhedronData_t* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " __global const b3GpuChildShape_t* gpuChildShapes,\n"
- " __global const float4* separatingNormals,\n"
- " __global struct b3Contact4Data* restrict globalContactsOut,\n"
- " counter32_t nGlobalContactsOut,\n"
- " int contactCapacity,\n"
- " int numConcavePairs)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " float4 worldVertsB1[64];\n"
- " float4 worldVertsB2[64];\n"
- " int capacityWorldVerts = 64; \n"
- " float4 localContactsOut[64];\n"
- " int localContactCapacity=64;\n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " if (i<numConcavePairs)\n"
- " {\n"
- " //negative value means that the pair is invalid\n"
- " if (concavePairsIn[i].w<0)\n"
- " return;\n"
- " int bodyIndexA = concavePairsIn[i].x;\n"
- " int bodyIndexB = concavePairsIn[i].y;\n"
- " int f = concavePairsIn[i].z;\n"
- " int childShapeIndexA = f;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " ///////////////////////////////////////////////////////////////\n"
- " \n"
- " \n"
- " bool overlap = false;\n"
- " \n"
- " b3ConvexPolyhedronData_t convexPolyhedronA;\n"
- " //add 3 vertices of the triangle\n"
- " convexPolyhedronA.m_numVertices = 3;\n"
- " convexPolyhedronA.m_vertexOffset = 0;\n"
- " float4 localCenter = make_float4(0.f,0.f,0.f,0.f);\n"
- " b3GpuFace_t face = faces[convexShapes[shapeIndexA].m_faceOffset+f];\n"
- " \n"
- " float4 verticesA[3];\n"
- " for (int i=0;i<3;i++)\n"
- " {\n"
- " int index = indices[face.m_indexOffset+i];\n"
- " float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];\n"
- " verticesA[i] = vert;\n"
- " localCenter += vert;\n"
- " }\n"
- " float dmin = FLT_MAX;\n"
- " int localCC=0;\n"
- " //a triangle has 3 unique edges\n"
- " convexPolyhedronA.m_numUniqueEdges = 3;\n"
- " convexPolyhedronA.m_uniqueEdgesOffset = 0;\n"
- " float4 uniqueEdgesA[3];\n"
- " \n"
- " uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);\n"
- " uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);\n"
- " uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);\n"
- " convexPolyhedronA.m_faceOffset = 0;\n"
- " \n"
- " float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);\n"
- " \n"
- " b3GpuFace_t facesA[TRIANGLE_NUM_CONVEX_FACES];\n"
- " int indicesA[3+3+2+2+2];\n"
- " int curUsedIndices=0;\n"
- " int fidx=0;\n"
- " //front size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[0] = 0;\n"
- " indicesA[1] = 1;\n"
- " indicesA[2] = 2;\n"
- " curUsedIndices+=3;\n"
- " float c = face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = normal.x;\n"
- " facesA[fidx].m_plane.y = normal.y;\n"
- " facesA[fidx].m_plane.z = normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " //back size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[3]=2;\n"
- " indicesA[4]=1;\n"
- " indicesA[5]=0;\n"
- " curUsedIndices+=3;\n"
- " float c = dot3F4(normal,verticesA[0]);\n"
- " float c1 = -face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = -normal.x;\n"
- " facesA[fidx].m_plane.y = -normal.y;\n"
- " facesA[fidx].m_plane.z = -normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " bool addEdgePlanes = true;\n"
- " if (addEdgePlanes)\n"
- " {\n"
- " int numVertices=3;\n"
- " int prevVertex = numVertices-1;\n"
- " for (int i=0;i<numVertices;i++)\n"
- " {\n"
- " float4 v0 = verticesA[i];\n"
- " float4 v1 = verticesA[prevVertex];\n"
- " \n"
- " float4 edgeNormal = normalize(cross(normal,v1-v0));\n"
- " float c = -dot3F4(edgeNormal,v0);\n"
- " facesA[fidx].m_numIndices = 2;\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[curUsedIndices++]=i;\n"
- " indicesA[curUsedIndices++]=prevVertex;\n"
- " \n"
- " facesA[fidx].m_plane.x = edgeNormal.x;\n"
- " facesA[fidx].m_plane.y = edgeNormal.y;\n"
- " facesA[fidx].m_plane.z = edgeNormal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " fidx++;\n"
- " prevVertex = i;\n"
- " }\n"
- " }\n"
- " convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;\n"
- " convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " float4 sepAxis = separatingNormals[i];\n"
- " \n"
- " int shapeTypeB = collidables[collidableIndexB].m_shapeType;\n"
- " int childShapeIndexB =-1;\n"
- " if (shapeTypeB==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " ///////////////////\n"
- " ///compound shape support\n"
- " \n"
- " childShapeIndexB = concavePairsIn[pairIndex].w;\n"
- " int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " \n"
- " }\n"
- " \n"
- " ////////////////////////////////////////\n"
- " \n"
- " \n"
- " \n"
- " int numLocalContactsOut = clipHullAgainstHullLocalA(sepAxis,\n"
- " &convexPolyhedronA, &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " worldVertsB1,worldVertsB2,capacityWorldVerts,\n"
- " minDist, maxDist,\n"
- " &verticesA,&facesA,&indicesA,\n"
- " vertices,faces,indices,\n"
- " localContactsOut,localContactCapacity);\n"
- " \n"
- " if (numLocalContactsOut>0)\n"
- " {\n"
- " float4 normal = -separatingNormals[i];\n"
- " int nPoints = numLocalContactsOut;\n"
- " float4* pointsIn = localContactsOut;\n"
- " int contactIdx[4];// = {-1,-1,-1,-1};\n"
- " contactIdx[0] = -1;\n"
- " contactIdx[1] = -1;\n"
- " contactIdx[2] = -1;\n"
- " contactIdx[3] = -1;\n"
- " \n"
- " int nReducedContacts = extractManifoldSequential(pointsIn, nPoints, normal, contactIdx);\n"
- " \n"
- " int dstIdx;\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " if (dstIdx<contactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = globalContactsOut+ dstIdx;\n"
- " c->m_worldNormalOnB = -normal;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = concavePairsIn[pairIndex].x;\n"
- " int bodyB = concavePairsIn[pairIndex].y;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
- " c->m_childIndexA = childShapeIndexA;\n"
- " c->m_childIndexB = childShapeIndexB;\n"
- " for (int i=0;i<nReducedContacts;i++)\n"
- " {\n"
- " c->m_worldPosB[i] = pointsIn[contactIdx[i]];\n"
- " }\n"
- " GET_NPOINTS(*c) = nReducedContacts;\n"
- " }\n"
- " \n"
- " }// if (numContactsOut>0)\n"
- " }// if (i<numPairs)\n"
- "}\n"
- "int findClippingFaces(const float4 separatingNormal,\n"
- " __global const b3ConvexPolyhedronData_t* hullA, __global const b3ConvexPolyhedronData_t* hullB,\n"
- " const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,\n"
- " __global float4* worldVertsA1,\n"
- " __global float4* worldNormalsA1,\n"
- " __global float4* worldVertsB1,\n"
- " int capacityWorldVerts,\n"
- " const float minDist, float maxDist,\n"
- " __global const float4* vertices,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " __global int4* clippingFaces, int pairIndex)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " int numWorldVertsB1= 0;\n"
- " \n"
- " \n"
- " int closestFaceB=-1;\n"
- " float dmax = -FLT_MAX;\n"
- " \n"
- " {\n"
- " for(int face=0;face<hullB->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(faces[hullB->m_faceOffset+face].m_plane.x,\n"
- " faces[hullB->m_faceOffset+face].m_plane.y, faces[hullB->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 WorldNormal = qtRotate(ornB, Normal);\n"
- " float d = dot3F4(WorldNormal,separatingNormal);\n"
- " if (d > dmax)\n"
- " {\n"
- " dmax = d;\n"
- " closestFaceB = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " {\n"
- " const b3GpuFace_t polyB = faces[hullB->m_faceOffset+closestFaceB];\n"
- " const int numVertices = polyB.m_numIndices;\n"
- " for(int e0=0;e0<numVertices;e0++)\n"
- " {\n"
- " const float4 b = vertices[hullB->m_vertexOffset+indices[polyB.m_indexOffset+e0]];\n"
- " worldVertsB1[pairIndex*capacityWorldVerts+numWorldVertsB1++] = transform(&b,&posB,&ornB);\n"
- " }\n"
- " }\n"
- " \n"
- " int closestFaceA=-1;\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " for(int face=0;face<hullA->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(\n"
- " faces[hullA->m_faceOffset+face].m_plane.x,\n"
- " faces[hullA->m_faceOffset+face].m_plane.y,\n"
- " faces[hullA->m_faceOffset+face].m_plane.z,\n"
- " 0.f);\n"
- " const float4 faceANormalWS = qtRotate(ornA,Normal);\n"
- " \n"
- " float d = dot3F4(faceANormalWS,separatingNormal);\n"
- " if (d < dmin)\n"
- " {\n"
- " dmin = d;\n"
- " closestFaceA = face;\n"
- " worldNormalsA1[pairIndex] = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " int numVerticesA = faces[hullA->m_faceOffset+closestFaceA].m_numIndices;\n"
- " for(int e0=0;e0<numVerticesA;e0++)\n"
- " {\n"
- " const float4 a = vertices[hullA->m_vertexOffset+indices[faces[hullA->m_faceOffset+closestFaceA].m_indexOffset+e0]];\n"
- " worldVertsA1[pairIndex*capacityWorldVerts+e0] = transform(&a, &posA,&ornA);\n"
- " }\n"
- " \n"
- " clippingFaces[pairIndex].x = closestFaceA;\n"
- " clippingFaces[pairIndex].y = closestFaceB;\n"
- " clippingFaces[pairIndex].z = numVerticesA;\n"
- " clippingFaces[pairIndex].w = numWorldVertsB1;\n"
- " \n"
- " \n"
- " return numContactsOut;\n"
- "}\n"
- "int clipFaces(__global float4* worldVertsA1,\n"
- " __global float4* worldNormalsA1,\n"
- " __global float4* worldVertsB1,\n"
- " __global float4* worldVertsB2, \n"
- " int capacityWorldVertsB2,\n"
- " const float minDist, float maxDist,\n"
- " __global int4* clippingFaces,\n"
- " int pairIndex)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " \n"
- " int closestFaceA = clippingFaces[pairIndex].x;\n"
- " int closestFaceB = clippingFaces[pairIndex].y;\n"
- " int numVertsInA = clippingFaces[pairIndex].z;\n"
- " int numVertsInB = clippingFaces[pairIndex].w;\n"
- " \n"
- " int numVertsOut = 0;\n"
- " \n"
- " if (closestFaceA<0)\n"
- " return numContactsOut;\n"
- " \n"
- " __global float4* pVtxIn = &worldVertsB1[pairIndex*capacityWorldVertsB2];\n"
- " __global float4* pVtxOut = &worldVertsB2[pairIndex*capacityWorldVertsB2];\n"
- " \n"
- " \n"
- " \n"
- " // clip polygon to back of planes of all faces of hull A that are adjacent to witness face\n"
- " \n"
- " for(int e0=0;e0<numVertsInA;e0++)\n"
- " {\n"
- " const float4 aw = worldVertsA1[pairIndex*capacityWorldVertsB2+e0];\n"
- " const float4 bw = worldVertsA1[pairIndex*capacityWorldVertsB2+((e0+1)%numVertsInA)];\n"
- " const float4 WorldEdge0 = aw - bw;\n"
- " float4 worldPlaneAnormal1 = worldNormalsA1[pairIndex];\n"
- " float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);\n"
- " float4 worldA1 = aw;\n"
- " float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);\n"
- " float4 planeNormalWS = planeNormalWS1;\n"
- " float planeEqWS=planeEqWS1;\n"
- " numVertsOut = clipFaceGlobal(pVtxIn, numVertsInB, planeNormalWS,planeEqWS, pVtxOut);\n"
- " __global float4* tmp = pVtxOut;\n"
- " pVtxOut = pVtxIn;\n"
- " pVtxIn = tmp;\n"
- " numVertsInB = numVertsOut;\n"
- " numVertsOut = 0;\n"
- " }\n"
- " \n"
- " //float4 planeNormalWS = worldNormalsA1[pairIndex];\n"
- " //float planeEqWS=-dot3F4(planeNormalWS,worldVertsA1[pairIndex*capacityWorldVertsB2]);\n"
- " \n"
- " /*for (int i=0;i<numVertsInB;i++)\n"
- " {\n"
- " pVtxOut[i] = pVtxIn[i];\n"
- " }*/\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " //numVertsInB=0;\n"
- " \n"
- " float4 planeNormalWS = worldNormalsA1[pairIndex];\n"
- " float planeEqWS=-dot3F4(planeNormalWS,worldVertsA1[pairIndex*capacityWorldVertsB2]);\n"
- " for (int i=0;i<numVertsInB;i++)\n"
- " {\n"
- " float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;\n"
- " if (depth <=minDist)\n"
- " {\n"
- " depth = minDist;\n"
- " }\n"
- " \n"
- " if (depth <=maxDist)\n"
- " {\n"
- " float4 pointInWorld = pVtxIn[i];\n"
- " pVtxOut[numContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);\n"
- " }\n"
- " }\n"
- " \n"
- " clippingFaces[pairIndex].w =numContactsOut;\n"
- " \n"
- " \n"
- " return numContactsOut;\n"
- "}\n"
- "__kernel void findClippingFacesKernel( __global const int4* pairs,\n"
- " __global const b3RigidBodyData_t* rigidBodies,\n"
- " __global const b3Collidable_t* collidables,\n"
- " __global const b3ConvexPolyhedronData_t* convexShapes,\n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const b3GpuFace_t* faces,\n"
- " __global const int* indices,\n"
- " __global const float4* separatingNormals,\n"
- " __global const int* hasSeparatingAxis,\n"
- " __global int4* clippingFacesOut,\n"
- " __global float4* worldVertsA1,\n"
- " __global float4* worldNormalsA1,\n"
- " __global float4* worldVertsB1,\n"
- " int capacityWorldVerts,\n"
- " int numPairs\n"
- " )\n"
- "{\n"
- " \n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " \n"
- " if (hasSeparatingAxis[i])\n"
- " {\n"
- " \n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " \n"
- " int numLocalContactsOut = findClippingFaces(separatingNormals[i],\n"
- " &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],\n"
- " rigidBodies[bodyIndexA].m_pos,rigidBodies[bodyIndexA].m_quat,\n"
- " rigidBodies[bodyIndexB].m_pos,rigidBodies[bodyIndexB].m_quat,\n"
- " worldVertsA1,\n"
- " worldNormalsA1,\n"
- " worldVertsB1,capacityWorldVerts,\n"
- " minDist, maxDist,\n"
- " vertices,faces,indices,\n"
- " clippingFacesOut,i);\n"
- " \n"
- " \n"
- " }// if (hasSeparatingAxis[i])\n"
- " }// if (i<numPairs)\n"
- " \n"
- "}\n"
- "__kernel void clipFacesAndFindContactsKernel( __global const float4* separatingNormals,\n"
- " __global const int* hasSeparatingAxis,\n"
- " __global int4* clippingFacesOut,\n"
- " __global float4* worldVertsA1,\n"
- " __global float4* worldNormalsA1,\n"
- " __global float4* worldVertsB1,\n"
- " __global float4* worldVertsB2,\n"
- " int vertexFaceCapacity,\n"
- " int numPairs,\n"
- " int debugMode\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " \n"
- " if (hasSeparatingAxis[i])\n"
- " {\n"
- " \n"
- "// int bodyIndexA = pairs[i].x;\n"
- " // int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int numLocalContactsOut = 0;\n"
- " int capacityWorldVertsB2 = vertexFaceCapacity;\n"
- " \n"
- " __global float4* pVtxIn = &worldVertsB1[pairIndex*capacityWorldVertsB2];\n"
- " __global float4* pVtxOut = &worldVertsB2[pairIndex*capacityWorldVertsB2];\n"
- " \n"
- " {\n"
- " __global int4* clippingFaces = clippingFacesOut;\n"
- " \n"
- " \n"
- " int closestFaceA = clippingFaces[pairIndex].x;\n"
- " int closestFaceB = clippingFaces[pairIndex].y;\n"
- " int numVertsInA = clippingFaces[pairIndex].z;\n"
- " int numVertsInB = clippingFaces[pairIndex].w;\n"
- " \n"
- " int numVertsOut = 0;\n"
- " \n"
- " if (closestFaceA>=0)\n"
- " {\n"
- " \n"
- " \n"
- " \n"
- " // clip polygon to back of planes of all faces of hull A that are adjacent to witness face\n"
- " \n"
- " for(int e0=0;e0<numVertsInA;e0++)\n"
- " {\n"
- " const float4 aw = worldVertsA1[pairIndex*capacityWorldVertsB2+e0];\n"
- " const float4 bw = worldVertsA1[pairIndex*capacityWorldVertsB2+((e0+1)%numVertsInA)];\n"
- " const float4 WorldEdge0 = aw - bw;\n"
- " float4 worldPlaneAnormal1 = worldNormalsA1[pairIndex];\n"
- " float4 planeNormalWS1 = -cross3(WorldEdge0,worldPlaneAnormal1);\n"
- " float4 worldA1 = aw;\n"
- " float planeEqWS1 = -dot3F4(worldA1,planeNormalWS1);\n"
- " float4 planeNormalWS = planeNormalWS1;\n"
- " float planeEqWS=planeEqWS1;\n"
- " numVertsOut = clipFaceGlobal(pVtxIn, numVertsInB, planeNormalWS,planeEqWS, pVtxOut);\n"
- " __global float4* tmp = pVtxOut;\n"
- " pVtxOut = pVtxIn;\n"
- " pVtxIn = tmp;\n"
- " numVertsInB = numVertsOut;\n"
- " numVertsOut = 0;\n"
- " }\n"
- " \n"
- " float4 planeNormalWS = worldNormalsA1[pairIndex];\n"
- " float planeEqWS=-dot3F4(planeNormalWS,worldVertsA1[pairIndex*capacityWorldVertsB2]);\n"
- " \n"
- " for (int i=0;i<numVertsInB;i++)\n"
- " {\n"
- " float depth = dot3F4(planeNormalWS,pVtxIn[i])+planeEqWS;\n"
- " if (depth <=minDist)\n"
- " {\n"
- " depth = minDist;\n"
- " }\n"
- " \n"
- " if (depth <=maxDist)\n"
- " {\n"
- " float4 pointInWorld = pVtxIn[i];\n"
- " pVtxOut[numLocalContactsOut++] = make_float4(pointInWorld.x,pointInWorld.y,pointInWorld.z,depth);\n"
- " }\n"
- " }\n"
- " \n"
- " }\n"
- " clippingFaces[pairIndex].w =numLocalContactsOut;\n"
- " \n"
- " }\n"
- " \n"
- " for (int i=0;i<numLocalContactsOut;i++)\n"
- " pVtxIn[i] = pVtxOut[i];\n"
- " \n"
- " }// if (hasSeparatingAxis[i])\n"
- " }// if (i<numPairs)\n"
- " \n"
- "}\n"
- "__kernel void newContactReductionKernel( __global int4* pairs,\n"
- " __global const b3RigidBodyData_t* rigidBodies,\n"
- " __global const float4* separatingNormals,\n"
- " __global const int* hasSeparatingAxis,\n"
- " __global struct b3Contact4Data* globalContactsOut,\n"
- " __global int4* clippingFaces,\n"
- " __global float4* worldVertsB2,\n"
- " volatile __global int* nGlobalContactsOut,\n"
- " int vertexFaceCapacity,\n"
- " int contactCapacity,\n"
- " int numPairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " int pairIndex = i;\n"
- " \n"
- " int4 contactIdx;\n"
- " contactIdx=make_int4(0,1,2,3);\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " \n"
- " if (hasSeparatingAxis[i])\n"
- " {\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " int nPoints = clippingFaces[pairIndex].w;\n"
- " \n"
- " if (nPoints>0)\n"
- " {\n"
- " __global float4* pointsIn = &worldVertsB2[pairIndex*vertexFaceCapacity];\n"
- " float4 normal = -separatingNormals[i];\n"
- " \n"
- " int nReducedContacts = extractManifoldSequentialGlobal(pointsIn, nPoints, normal, &contactIdx);\n"
- " \n"
- " int mprContactIndex = pairs[pairIndex].z;\n"
- " int dstIdx = mprContactIndex;\n"
- " if (dstIdx<0)\n"
- " {\n"
- " AppendInc( nGlobalContactsOut, dstIdx );\n"
- " }\n"
- "//#if 0\n"
- " \n"
- " if (dstIdx < contactCapacity)\n"
- " {\n"
- " __global struct b3Contact4Data* c = &globalContactsOut[dstIdx];\n"
- " c->m_worldNormalOnB = -normal;\n"
- " c->m_restituitionCoeffCmp = (0.f*0xffff);c->m_frictionCoeffCmp = (0.7f*0xffff);\n"
- " c->m_batchIdx = pairIndex;\n"
- " int bodyA = pairs[pairIndex].x;\n"
- " int bodyB = pairs[pairIndex].y;\n"
- " pairs[pairIndex].w = dstIdx;\n"
- " c->m_bodyAPtrAndSignBit = rigidBodies[bodyA].m_invMass==0?-bodyA:bodyA;\n"
- " c->m_bodyBPtrAndSignBit = rigidBodies[bodyB].m_invMass==0?-bodyB:bodyB;\n"
- " c->m_childIndexA =-1;\n"
- " c->m_childIndexB =-1;\n"
- " switch (nReducedContacts)\n"
- " {\n"
- " case 4:\n"
- " c->m_worldPosB[3] = pointsIn[contactIdx.w];\n"
- " case 3:\n"
- " c->m_worldPosB[2] = pointsIn[contactIdx.z];\n"
- " case 2:\n"
- " c->m_worldPosB[1] = pointsIn[contactIdx.y];\n"
- " case 1:\n"
- " if (mprContactIndex<0)//test\n"
- " c->m_worldPosB[0] = pointsIn[contactIdx.x];\n"
- " default:\n"
- " {\n"
- " }\n"
- " };\n"
- " \n"
- " GET_NPOINTS(*c) = nReducedContacts;\n"
- " \n"
- " }\n"
- " \n"
- " \n"
- "//#endif\n"
- " \n"
- " }// if (numContactsOut>0)\n"
- " }// if (hasSeparatingAxis[i])\n"
- " }// if (i<numPairs)\n"
- " \n"
- " \n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcave.cl b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcave.cl
deleted file mode 100644
index 31ca43b8cd..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcave.cl
+++ /dev/null
@@ -1,1220 +0,0 @@
-
-//keep this enum in sync with the CPU version (in btCollidable.h)
-//written by Erwin Coumans
-
-
-#define SHAPE_CONVEX_HULL 3
-#define SHAPE_CONCAVE_TRIMESH 5
-#define TRIANGLE_NUM_CONVEX_FACES 5
-#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6
-
-#define B3_MAX_STACK_DEPTH 256
-
-
-typedef unsigned int u32;
-
-///keep this in sync with btCollidable.h
-typedef struct
-{
- union {
- int m_numChildShapes;
- int m_bvhIndex;
- };
- union
- {
- float m_radius;
- int m_compoundBvhIndex;
- };
-
- int m_shapeType;
- int m_shapeIndex;
-
-} btCollidableGpu;
-
-#define MAX_NUM_PARTS_IN_BITS 10
-
-///b3QuantizedBvhNode is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-typedef struct
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes
- int m_escapeIndexOrTriangleIndex;
-} b3QuantizedBvhNode;
-
-typedef struct
-{
- float4 m_aabbMin;
- float4 m_aabbMax;
- float4 m_quantization;
- int m_numNodes;
- int m_numSubTrees;
- int m_nodeOffset;
- int m_subTreeOffset;
-
-} b3BvhInfo;
-
-
-int getTriangleIndex(const b3QuantizedBvhNode* rootNode)
-{
- unsigned int x=0;
- unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (rootNode->m_escapeIndexOrTriangleIndex&~(y));
-}
-
-int getTriangleIndexGlobal(__global const b3QuantizedBvhNode* rootNode)
-{
- unsigned int x=0;
- unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (rootNode->m_escapeIndexOrTriangleIndex&~(y));
-}
-
-int isLeafNode(const b3QuantizedBvhNode* rootNode)
-{
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;
-}
-
-int isLeafNodeGlobal(__global const b3QuantizedBvhNode* rootNode)
-{
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;
-}
-
-int getEscapeIndex(const b3QuantizedBvhNode* rootNode)
-{
- return -rootNode->m_escapeIndexOrTriangleIndex;
-}
-
-int getEscapeIndexGlobal(__global const b3QuantizedBvhNode* rootNode)
-{
- return -rootNode->m_escapeIndexOrTriangleIndex;
-}
-
-
-typedef struct
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes, points to the root of the subtree
- int m_rootNodeIndex;
- //4 bytes
- int m_subtreeSize;
- int m_padding[3];
-} b3BvhSubtreeInfo;
-
-
-
-
-
-
-
-typedef struct
-{
- float4 m_childPosition;
- float4 m_childOrientation;
- int m_shapeIndex;
- int m_unused0;
- int m_unused1;
- int m_unused2;
-} btGpuChildShape;
-
-
-typedef struct
-{
- float4 m_pos;
- float4 m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_collidableIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} BodyData;
-
-
-typedef struct
-{
- float4 m_localCenter;
- float4 m_extents;
- float4 mC;
- float4 mE;
-
- float m_radius;
- int m_faceOffset;
- int m_numFaces;
- int m_numVertices;
-
- int m_vertexOffset;
- int m_uniqueEdgesOffset;
- int m_numUniqueEdges;
- int m_unused;
-} ConvexPolyhedronCL;
-
-typedef struct
-{
- union
- {
- float4 m_min;
- float m_minElems[4];
- int m_minIndices[4];
- };
- union
- {
- float4 m_max;
- float m_maxElems[4];
- int m_maxIndices[4];
- };
-} btAabbCL;
-
-#include "Bullet3Collision/BroadPhaseCollision/shared/b3Aabb.h"
-#include "Bullet3Common/shared/b3Int2.h"
-
-
-
-typedef struct
-{
- float4 m_plane;
- int m_indexOffset;
- int m_numIndices;
-} btGpuFace;
-
-#define make_float4 (float4)
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-
-
-// float4 a1 = make_float4(a.xyz,0.f);
-// float4 b1 = make_float4(b.xyz,0.f);
-
-// return cross(a1,b1);
-
-//float4 c = make_float4(a.y*b.z - a.z*b.y,a.z*b.x - a.x*b.z,a.x*b.y - a.y*b.x,0.f);
-
- // float4 c = make_float4(a.y*b.z - a.z*b.y,1.f,a.x*b.y - a.y*b.x,0.f);
-
- //return c;
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- v = make_float4(v.xyz,0.f);
- return fast_normalize(v);
-}
-
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-__inline
-float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)
-{
- return qtRotate( *orientation, *p ) + (*translation);
-}
-
-
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-}
-
-inline void projectLocal(const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn,
-const float4* dir, const float4* vertices, float* min, float* max)
-{
- min[0] = FLT_MAX;
- max[0] = -FLT_MAX;
- int numVerts = hull->m_numVertices;
-
- const float4 localDir = qtInvRotate(orn,*dir);
- float offset = dot(pos,*dir);
- for(int i=0;i<numVerts;i++)
- {
- float dp = dot(vertices[hull->m_vertexOffset+i],localDir);
- if(dp < min[0])
- min[0] = dp;
- if(dp > max[0])
- max[0] = dp;
- }
- if(min[0]>max[0])
- {
- float tmp = min[0];
- min[0] = max[0];
- max[0] = tmp;
- }
- min[0] += offset;
- max[0] += offset;
-}
-
-inline void project(__global const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn,
-const float4* dir, __global const float4* vertices, float* min, float* max)
-{
- min[0] = FLT_MAX;
- max[0] = -FLT_MAX;
- int numVerts = hull->m_numVertices;
-
- const float4 localDir = qtInvRotate(orn,*dir);
- float offset = dot(pos,*dir);
- for(int i=0;i<numVerts;i++)
- {
- float dp = dot(vertices[hull->m_vertexOffset+i],localDir);
- if(dp < min[0])
- min[0] = dp;
- if(dp > max[0])
- max[0] = dp;
- }
- if(min[0]>max[0])
- {
- float tmp = min[0];
- min[0] = max[0];
- max[0] = tmp;
- }
- min[0] += offset;
- max[0] += offset;
-}
-
-inline bool TestSepAxisLocalA(const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA,const float4 ornA,
- const float4 posB,const float4 ornB,
- float4* sep_axis, const float4* verticesA, __global const float4* verticesB,float* depth)
-{
- float Min0,Max0;
- float Min1,Max1;
- projectLocal(hullA,posA,ornA,sep_axis,verticesA, &Min0, &Max0);
- project(hullB,posB,ornB, sep_axis,verticesB, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- return false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- *depth = d0<d1 ? d0:d1;
- return true;
-}
-
-
-
-
-inline bool IsAlmostZero(const float4 v)
-{
- if(fabs(v.x)>1e-6f || fabs(v.y)>1e-6f || fabs(v.z)>1e-6f)
- return false;
- return true;
-}
-
-
-
-bool findSeparatingAxisLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
-
- const float4* verticesA,
- const float4* uniqueEdgesA,
- const btGpuFace* facesA,
- const int* indicesA,
-
- __global const float4* verticesB,
- __global const float4* uniqueEdgesB,
- __global const btGpuFace* facesB,
- __global const int* indicesB,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
- int curPlaneTests=0;
- {
- int numFacesA = hullA->m_numFaces;
- // Test normals from hullA
- for(int i=0;i<numFacesA;i++)
- {
- const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;
- float4 faceANormalWS = qtRotate(ornA,normal);
- if (dot3F4(DeltaC2,faceANormalWS)<0)
- faceANormalWS*=-1.f;
- curPlaneTests++;
- float d;
- if(!TestSepAxisLocalA( hullA, hullB, posA,ornA,posB,ornB,&faceANormalWS, verticesA, verticesB,&d))
- return false;
- if(d<*dmin)
- {
- *dmin = d;
- *sep = faceANormalWS;
- }
- }
- }
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-bool findSeparatingAxisLocalB( __global const ConvexPolyhedronCL* hullA, const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- __global const float4* verticesA,
- __global const float4* uniqueEdgesA,
- __global const btGpuFace* facesA,
- __global const int* indicesA,
- const float4* verticesB,
- const float4* uniqueEdgesB,
- const btGpuFace* facesB,
- const int* indicesB,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
- int curPlaneTests=0;
- {
- int numFacesA = hullA->m_numFaces;
- // Test normals from hullA
- for(int i=0;i<numFacesA;i++)
- {
- const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;
- float4 faceANormalWS = qtRotate(ornA,normal);
- if (dot3F4(DeltaC2,faceANormalWS)<0)
- faceANormalWS *= -1.f;
- curPlaneTests++;
- float d;
- if(!TestSepAxisLocalA( hullB, hullA, posB,ornB,posA,ornA, &faceANormalWS, verticesB,verticesA, &d))
- return false;
- if(d<*dmin)
- {
- *dmin = d;
- *sep = faceANormalWS;
- }
- }
- }
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-
-bool findSeparatingAxisEdgeEdgeLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB,
- const float4 posA1,
- const float4 ornA,
- const float4 posB1,
- const float4 ornB,
- const float4 DeltaC2,
- const float4* verticesA,
- const float4* uniqueEdgesA,
- const btGpuFace* facesA,
- const int* indicesA,
- __global const float4* verticesB,
- __global const float4* uniqueEdgesB,
- __global const btGpuFace* facesB,
- __global const int* indicesB,
- float4* sep,
- float* dmin)
-{
-
-
- float4 posA = posA1;
- posA.w = 0.f;
- float4 posB = posB1;
- posB.w = 0.f;
-
- int curPlaneTests=0;
-
- int curEdgeEdge = 0;
- // Test edges
- for(int e0=0;e0<hullA->m_numUniqueEdges;e0++)
- {
- const float4 edge0 = uniqueEdgesA[hullA->m_uniqueEdgesOffset+e0];
- float4 edge0World = qtRotate(ornA,edge0);
-
- for(int e1=0;e1<hullB->m_numUniqueEdges;e1++)
- {
- const float4 edge1 = uniqueEdgesB[hullB->m_uniqueEdgesOffset+e1];
- float4 edge1World = qtRotate(ornB,edge1);
-
-
- float4 crossje = cross3(edge0World,edge1World);
-
- curEdgeEdge++;
- if(!IsAlmostZero(crossje))
- {
- crossje = normalize3(crossje);
- if (dot3F4(DeltaC2,crossje)<0)
- crossje *= -1.f;
-
- float dist;
- bool result = true;
- {
- float Min0,Max0;
- float Min1,Max1;
- projectLocal(hullA,posA,ornA,&crossje,verticesA, &Min0, &Max0);
- project(hullB,posB,ornB,&crossje,verticesB, &Min1, &Max1);
-
- if(Max0<Min1 || Max1<Min0)
- result = false;
-
- float d0 = Max0 - Min1;
- float d1 = Max1 - Min0;
- dist = d0<d1 ? d0:d1;
- result = true;
-
- }
-
-
- if(dist<*dmin)
- {
- *dmin = dist;
- *sep = crossje;
- }
- }
- }
-
- }
-
-
- if((dot3F4(-DeltaC2,*sep))>0.0f)
- {
- *sep = -(*sep);
- }
- return true;
-}
-
-
-
-inline int findClippingFaces(const float4 separatingNormal,
- const ConvexPolyhedronCL* hullA,
- __global const ConvexPolyhedronCL* hullB,
- const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,
- __global float4* worldVertsA1,
- __global float4* worldNormalsA1,
- __global float4* worldVertsB1,
- int capacityWorldVerts,
- const float minDist, float maxDist,
- const float4* verticesA,
- const btGpuFace* facesA,
- const int* indicesA,
- __global const float4* verticesB,
- __global const btGpuFace* facesB,
- __global const int* indicesB,
- __global int4* clippingFaces, int pairIndex)
-{
- int numContactsOut = 0;
- int numWorldVertsB1= 0;
-
-
- int closestFaceB=0;
- float dmax = -FLT_MAX;
-
- {
- for(int face=0;face<hullB->m_numFaces;face++)
- {
- const float4 Normal = make_float4(facesB[hullB->m_faceOffset+face].m_plane.x,
- facesB[hullB->m_faceOffset+face].m_plane.y, facesB[hullB->m_faceOffset+face].m_plane.z,0.f);
- const float4 WorldNormal = qtRotate(ornB, Normal);
- float d = dot3F4(WorldNormal,separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
-
- {
- const btGpuFace polyB = facesB[hullB->m_faceOffset+closestFaceB];
- int numVertices = polyB.m_numIndices;
- if (numVertices>capacityWorldVerts)
- numVertices = capacityWorldVerts;
- if (numVertices<0)
- numVertices = 0;
-
- for(int e0=0;e0<numVertices;e0++)
- {
- if (e0<capacityWorldVerts)
- {
- const float4 b = verticesB[hullB->m_vertexOffset+indicesB[polyB.m_indexOffset+e0]];
- worldVertsB1[pairIndex*capacityWorldVerts+numWorldVertsB1++] = transform(&b,&posB,&ornB);
- }
- }
- }
-
- int closestFaceA=0;
- {
- float dmin = FLT_MAX;
- for(int face=0;face<hullA->m_numFaces;face++)
- {
- const float4 Normal = make_float4(
- facesA[hullA->m_faceOffset+face].m_plane.x,
- facesA[hullA->m_faceOffset+face].m_plane.y,
- facesA[hullA->m_faceOffset+face].m_plane.z,
- 0.f);
- const float4 faceANormalWS = qtRotate(ornA,Normal);
-
- float d = dot3F4(faceANormalWS,separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- worldNormalsA1[pairIndex] = faceANormalWS;
- }
- }
- }
-
- int numVerticesA = facesA[hullA->m_faceOffset+closestFaceA].m_numIndices;
- if (numVerticesA>capacityWorldVerts)
- numVerticesA = capacityWorldVerts;
- if (numVerticesA<0)
- numVerticesA=0;
-
- for(int e0=0;e0<numVerticesA;e0++)
- {
- if (e0<capacityWorldVerts)
- {
- const float4 a = verticesA[hullA->m_vertexOffset+indicesA[facesA[hullA->m_faceOffset+closestFaceA].m_indexOffset+e0]];
- worldVertsA1[pairIndex*capacityWorldVerts+e0] = transform(&a, &posA,&ornA);
- }
- }
-
- clippingFaces[pairIndex].x = closestFaceA;
- clippingFaces[pairIndex].y = closestFaceB;
- clippingFaces[pairIndex].z = numVerticesA;
- clippingFaces[pairIndex].w = numWorldVertsB1;
-
-
- return numContactsOut;
-}
-
-
-
-
-// work-in-progress
-__kernel void findConcaveSeparatingAxisVertexFaceKernel( __global int4* concavePairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global const btGpuChildShape* gpuChildShapes,
- __global btAabbCL* aabbs,
- __global float4* concaveSeparatingNormalsOut,
- __global int* concaveHasSeparatingNormals,
- __global int4* clippingFacesOut,
- __global float4* worldVertsA1GPU,
- __global float4* worldNormalsAGPU,
- __global float4* worldVertsB1GPU,
- __global float* dmins,
- int vertexFaceCapacity,
- int numConcavePairs
- )
-{
-
- int i = get_global_id(0);
- if (i>=numConcavePairs)
- return;
-
- concaveHasSeparatingNormals[i] = 0;
-
- int pairIdx = i;
-
- int bodyIndexA = concavePairs[i].x;
- int bodyIndexB = concavePairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
- if (collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL&&
- collidables[collidableIndexB].m_shapeType!=SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- concavePairs[pairIdx].w = -1;
- return;
- }
-
-
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- int numActualConcaveConvexTests = 0;
-
- int f = concavePairs[i].z;
-
- bool overlap = false;
-
- ConvexPolyhedronCL convexPolyhedronA;
-
- //add 3 vertices of the triangle
- convexPolyhedronA.m_numVertices = 3;
- convexPolyhedronA.m_vertexOffset = 0;
- float4 localCenter = make_float4(0.f,0.f,0.f,0.f);
-
- btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];
- float4 triMinAabb, triMaxAabb;
- btAabbCL triAabb;
- triAabb.m_min = make_float4(1e30f,1e30f,1e30f,0.f);
- triAabb.m_max = make_float4(-1e30f,-1e30f,-1e30f,0.f);
-
- float4 verticesA[3];
- for (int i=0;i<3;i++)
- {
- int index = indices[face.m_indexOffset+i];
- float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];
- verticesA[i] = vert;
- localCenter += vert;
-
- triAabb.m_min = min(triAabb.m_min,vert);
- triAabb.m_max = max(triAabb.m_max,vert);
-
- }
-
- overlap = true;
- overlap = (triAabb.m_min.x > aabbs[bodyIndexB].m_max.x || triAabb.m_max.x < aabbs[bodyIndexB].m_min.x) ? false : overlap;
- overlap = (triAabb.m_min.z > aabbs[bodyIndexB].m_max.z || triAabb.m_max.z < aabbs[bodyIndexB].m_min.z) ? false : overlap;
- overlap = (triAabb.m_min.y > aabbs[bodyIndexB].m_max.y || triAabb.m_max.y < aabbs[bodyIndexB].m_min.y) ? false : overlap;
-
- if (overlap)
- {
- float dmin = FLT_MAX;
- int hasSeparatingAxis=5;
- float4 sepAxis=make_float4(1,2,3,4);
-
- int localCC=0;
- numActualConcaveConvexTests++;
-
- //a triangle has 3 unique edges
- convexPolyhedronA.m_numUniqueEdges = 3;
- convexPolyhedronA.m_uniqueEdgesOffset = 0;
- float4 uniqueEdgesA[3];
-
- uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);
- uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);
- uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);
-
-
- convexPolyhedronA.m_faceOffset = 0;
-
- float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);
-
- btGpuFace facesA[TRIANGLE_NUM_CONVEX_FACES];
- int indicesA[3+3+2+2+2];
- int curUsedIndices=0;
- int fidx=0;
-
- //front size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[0] = 0;
- indicesA[1] = 1;
- indicesA[2] = 2;
- curUsedIndices+=3;
- float c = face.m_plane.w;
- facesA[fidx].m_plane.x = normal.x;
- facesA[fidx].m_plane.y = normal.y;
- facesA[fidx].m_plane.z = normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
- //back size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[3]=2;
- indicesA[4]=1;
- indicesA[5]=0;
- curUsedIndices+=3;
- float c = dot(normal,verticesA[0]);
- float c1 = -face.m_plane.w;
- facesA[fidx].m_plane.x = -normal.x;
- facesA[fidx].m_plane.y = -normal.y;
- facesA[fidx].m_plane.z = -normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
-
- bool addEdgePlanes = true;
- if (addEdgePlanes)
- {
- int numVertices=3;
- int prevVertex = numVertices-1;
- for (int i=0;i<numVertices;i++)
- {
- float4 v0 = verticesA[i];
- float4 v1 = verticesA[prevVertex];
-
- float4 edgeNormal = normalize(cross(normal,v1-v0));
- float c = -dot(edgeNormal,v0);
-
- facesA[fidx].m_numIndices = 2;
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[curUsedIndices++]=i;
- indicesA[curUsedIndices++]=prevVertex;
-
- facesA[fidx].m_plane.x = edgeNormal.x;
- facesA[fidx].m_plane.y = edgeNormal.y;
- facesA[fidx].m_plane.z = edgeNormal.z;
- facesA[fidx].m_plane.w = c;
- fidx++;
- prevVertex = i;
- }
- }
- convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;
- convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);
-
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
-
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
-
-
-
-
- ///////////////////
- ///compound shape support
-
- if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int compoundChild = concavePairs[pairIdx].w;
- int childShapeIndexB = compoundChild;//collidables[collidableIndexB].m_shapeIndex+compoundChild;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- shapeIndexB = collidables[childColIndexB].m_shapeIndex;
- }
- //////////////////
-
- float4 c0local = convexPolyhedronA.m_localCenter;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
-
-
- bool sepA = findSeparatingAxisLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- DeltaC2,
- verticesA,uniqueEdgesA,facesA,indicesA,
- vertices,uniqueEdges,faces,indices,
- &sepAxis,&dmin);
- hasSeparatingAxis = 4;
- if (!sepA)
- {
- hasSeparatingAxis = 0;
- } else
- {
- bool sepB = findSeparatingAxisLocalB( &convexShapes[shapeIndexB],&convexPolyhedronA,
- posB,ornB,
- posA,ornA,
- DeltaC2,
- vertices,uniqueEdges,faces,indices,
- verticesA,uniqueEdgesA,facesA,indicesA,
- &sepAxis,&dmin);
-
- if (!sepB)
- {
- hasSeparatingAxis = 0;
- } else
- {
- hasSeparatingAxis = 1;
- }
- }
-
- if (hasSeparatingAxis)
- {
- dmins[i] = dmin;
- concaveSeparatingNormalsOut[pairIdx]=sepAxis;
- concaveHasSeparatingNormals[i]=1;
-
- } else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
- }
- else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
-}
-
-
-
-
-// work-in-progress
-__kernel void findConcaveSeparatingAxisEdgeEdgeKernel( __global int4* concavePairs,
- __global const BodyData* rigidBodies,
- __global const btCollidableGpu* collidables,
- __global const ConvexPolyhedronCL* convexShapes,
- __global const float4* vertices,
- __global const float4* uniqueEdges,
- __global const btGpuFace* faces,
- __global const int* indices,
- __global const btGpuChildShape* gpuChildShapes,
- __global btAabbCL* aabbs,
- __global float4* concaveSeparatingNormalsOut,
- __global int* concaveHasSeparatingNormals,
- __global int4* clippingFacesOut,
- __global float4* worldVertsA1GPU,
- __global float4* worldNormalsAGPU,
- __global float4* worldVertsB1GPU,
- __global float* dmins,
- int vertexFaceCapacity,
- int numConcavePairs
- )
-{
-
- int i = get_global_id(0);
- if (i>=numConcavePairs)
- return;
-
- if (!concaveHasSeparatingNormals[i])
- return;
-
- int pairIdx = i;
-
- int bodyIndexA = concavePairs[i].x;
- int bodyIndexB = concavePairs[i].y;
-
- int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;
- int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;
-
- int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;
- int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;
-
-
- int numFacesA = convexShapes[shapeIndexA].m_numFaces;
- int numActualConcaveConvexTests = 0;
-
- int f = concavePairs[i].z;
-
- bool overlap = false;
-
- ConvexPolyhedronCL convexPolyhedronA;
-
- //add 3 vertices of the triangle
- convexPolyhedronA.m_numVertices = 3;
- convexPolyhedronA.m_vertexOffset = 0;
- float4 localCenter = make_float4(0.f,0.f,0.f,0.f);
-
- btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];
- float4 triMinAabb, triMaxAabb;
- btAabbCL triAabb;
- triAabb.m_min = make_float4(1e30f,1e30f,1e30f,0.f);
- triAabb.m_max = make_float4(-1e30f,-1e30f,-1e30f,0.f);
-
- float4 verticesA[3];
- for (int i=0;i<3;i++)
- {
- int index = indices[face.m_indexOffset+i];
- float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];
- verticesA[i] = vert;
- localCenter += vert;
-
- triAabb.m_min = min(triAabb.m_min,vert);
- triAabb.m_max = max(triAabb.m_max,vert);
-
- }
-
- overlap = true;
- overlap = (triAabb.m_min.x > aabbs[bodyIndexB].m_max.x || triAabb.m_max.x < aabbs[bodyIndexB].m_min.x) ? false : overlap;
- overlap = (triAabb.m_min.z > aabbs[bodyIndexB].m_max.z || triAabb.m_max.z < aabbs[bodyIndexB].m_min.z) ? false : overlap;
- overlap = (triAabb.m_min.y > aabbs[bodyIndexB].m_max.y || triAabb.m_max.y < aabbs[bodyIndexB].m_min.y) ? false : overlap;
-
- if (overlap)
- {
- float dmin = dmins[i];
- int hasSeparatingAxis=5;
- float4 sepAxis=make_float4(1,2,3,4);
- sepAxis = concaveSeparatingNormalsOut[pairIdx];
-
- int localCC=0;
- numActualConcaveConvexTests++;
-
- //a triangle has 3 unique edges
- convexPolyhedronA.m_numUniqueEdges = 3;
- convexPolyhedronA.m_uniqueEdgesOffset = 0;
- float4 uniqueEdgesA[3];
-
- uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);
- uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);
- uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);
-
-
- convexPolyhedronA.m_faceOffset = 0;
-
- float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);
-
- btGpuFace facesA[TRIANGLE_NUM_CONVEX_FACES];
- int indicesA[3+3+2+2+2];
- int curUsedIndices=0;
- int fidx=0;
-
- //front size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[0] = 0;
- indicesA[1] = 1;
- indicesA[2] = 2;
- curUsedIndices+=3;
- float c = face.m_plane.w;
- facesA[fidx].m_plane.x = normal.x;
- facesA[fidx].m_plane.y = normal.y;
- facesA[fidx].m_plane.z = normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
- //back size of triangle
- {
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[3]=2;
- indicesA[4]=1;
- indicesA[5]=0;
- curUsedIndices+=3;
- float c = dot(normal,verticesA[0]);
- float c1 = -face.m_plane.w;
- facesA[fidx].m_plane.x = -normal.x;
- facesA[fidx].m_plane.y = -normal.y;
- facesA[fidx].m_plane.z = -normal.z;
- facesA[fidx].m_plane.w = c;
- facesA[fidx].m_numIndices=3;
- }
- fidx++;
-
- bool addEdgePlanes = true;
- if (addEdgePlanes)
- {
- int numVertices=3;
- int prevVertex = numVertices-1;
- for (int i=0;i<numVertices;i++)
- {
- float4 v0 = verticesA[i];
- float4 v1 = verticesA[prevVertex];
-
- float4 edgeNormal = normalize(cross(normal,v1-v0));
- float c = -dot(edgeNormal,v0);
-
- facesA[fidx].m_numIndices = 2;
- facesA[fidx].m_indexOffset=curUsedIndices;
- indicesA[curUsedIndices++]=i;
- indicesA[curUsedIndices++]=prevVertex;
-
- facesA[fidx].m_plane.x = edgeNormal.x;
- facesA[fidx].m_plane.y = edgeNormal.y;
- facesA[fidx].m_plane.z = edgeNormal.z;
- facesA[fidx].m_plane.w = c;
- fidx++;
- prevVertex = i;
- }
- }
- convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;
- convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);
-
-
- float4 posA = rigidBodies[bodyIndexA].m_pos;
- posA.w = 0.f;
- float4 posB = rigidBodies[bodyIndexB].m_pos;
- posB.w = 0.f;
-
- float4 ornA = rigidBodies[bodyIndexA].m_quat;
- float4 ornB =rigidBodies[bodyIndexB].m_quat;
-
-
-
-
- ///////////////////
- ///compound shape support
-
- if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)
- {
- int compoundChild = concavePairs[pairIdx].w;
- int childShapeIndexB = compoundChild;//collidables[collidableIndexB].m_shapeIndex+compoundChild;
- int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;
- float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;
- float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;
- float4 newPosB = transform(&childPosB,&posB,&ornB);
- float4 newOrnB = qtMul(ornB,childOrnB);
- posB = newPosB;
- ornB = newOrnB;
- shapeIndexB = collidables[childColIndexB].m_shapeIndex;
- }
- //////////////////
-
- float4 c0local = convexPolyhedronA.m_localCenter;
- float4 c0 = transform(&c0local, &posA, &ornA);
- float4 c1local = convexShapes[shapeIndexB].m_localCenter;
- float4 c1 = transform(&c1local,&posB,&ornB);
- const float4 DeltaC2 = c0 - c1;
-
-
- {
- bool sepEE = findSeparatingAxisEdgeEdgeLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- DeltaC2,
- verticesA,uniqueEdgesA,facesA,indicesA,
- vertices,uniqueEdges,faces,indices,
- &sepAxis,&dmin);
-
- if (!sepEE)
- {
- hasSeparatingAxis = 0;
- } else
- {
- hasSeparatingAxis = 1;
- }
- }
-
-
- if (hasSeparatingAxis)
- {
- sepAxis.w = dmin;
- dmins[i] = dmin;
- concaveSeparatingNormalsOut[pairIdx]=sepAxis;
- concaveHasSeparatingNormals[i]=1;
-
- float minDist = -1e30f;
- float maxDist = 0.02f;
-
-
- findClippingFaces(sepAxis,
- &convexPolyhedronA,
- &convexShapes[shapeIndexB],
- posA,ornA,
- posB,ornB,
- worldVertsA1GPU,
- worldNormalsAGPU,
- worldVertsB1GPU,
- vertexFaceCapacity,
- minDist, maxDist,
- verticesA,
- facesA,
- indicesA,
- vertices,
- faces,
- indices,
- clippingFacesOut, pairIdx);
-
-
- } else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
- }
- else
- {
- //mark this pair as in-active
- concavePairs[pairIdx].w = -1;
- }
-
- concavePairs[i].z = -1;//for the next stage, z is used to determine existing contact points
-}
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcaveKernels.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcaveKernels.h
deleted file mode 100644
index a60702ca62..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satConcaveKernels.h
+++ /dev/null
@@ -1,1456 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* satConcaveKernelsCL =
- "//keep this enum in sync with the CPU version (in btCollidable.h)\n"
- "//written by Erwin Coumans\n"
- "#define SHAPE_CONVEX_HULL 3\n"
- "#define SHAPE_CONCAVE_TRIMESH 5\n"
- "#define TRIANGLE_NUM_CONVEX_FACES 5\n"
- "#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6\n"
- "#define B3_MAX_STACK_DEPTH 256\n"
- "typedef unsigned int u32;\n"
- "///keep this in sync with btCollidable.h\n"
- "typedef struct\n"
- "{\n"
- " union {\n"
- " int m_numChildShapes;\n"
- " int m_bvhIndex;\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_radius;\n"
- " int m_compoundBvhIndex;\n"
- " };\n"
- " \n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- " \n"
- "} btCollidableGpu;\n"
- "#define MAX_NUM_PARTS_IN_BITS 10\n"
- "///b3QuantizedBvhNode is a compressed aabb node, 16 bytes.\n"
- "///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).\n"
- "typedef struct\n"
- "{\n"
- " //12 bytes\n"
- " unsigned short int m_quantizedAabbMin[3];\n"
- " unsigned short int m_quantizedAabbMax[3];\n"
- " //4 bytes\n"
- " int m_escapeIndexOrTriangleIndex;\n"
- "} b3QuantizedBvhNode;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_aabbMin;\n"
- " float4 m_aabbMax;\n"
- " float4 m_quantization;\n"
- " int m_numNodes;\n"
- " int m_numSubTrees;\n"
- " int m_nodeOffset;\n"
- " int m_subTreeOffset;\n"
- "} b3BvhInfo;\n"
- "int getTriangleIndex(const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " unsigned int x=0;\n"
- " unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);\n"
- " // Get only the lower bits where the triangle index is stored\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex&~(y));\n"
- "}\n"
- "int getTriangleIndexGlobal(__global const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " unsigned int x=0;\n"
- " unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);\n"
- " // Get only the lower bits where the triangle index is stored\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex&~(y));\n"
- "}\n"
- "int isLeafNode(const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " //skipindex is negative (internal node), triangleindex >=0 (leafnode)\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;\n"
- "}\n"
- "int isLeafNodeGlobal(__global const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " //skipindex is negative (internal node), triangleindex >=0 (leafnode)\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;\n"
- "}\n"
- " \n"
- "int getEscapeIndex(const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " return -rootNode->m_escapeIndexOrTriangleIndex;\n"
- "}\n"
- "int getEscapeIndexGlobal(__global const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " return -rootNode->m_escapeIndexOrTriangleIndex;\n"
- "}\n"
- "typedef struct\n"
- "{\n"
- " //12 bytes\n"
- " unsigned short int m_quantizedAabbMin[3];\n"
- " unsigned short int m_quantizedAabbMax[3];\n"
- " //4 bytes, points to the root of the subtree\n"
- " int m_rootNodeIndex;\n"
- " //4 bytes\n"
- " int m_subtreeSize;\n"
- " int m_padding[3];\n"
- "} b3BvhSubtreeInfo;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_childPosition;\n"
- " float4 m_childOrientation;\n"
- " int m_shapeIndex;\n"
- " int m_unused0;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "} btGpuChildShape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " float4 m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} BodyData;\n"
- "typedef struct \n"
- "{\n"
- " float4 m_localCenter;\n"
- " float4 m_extents;\n"
- " float4 mC;\n"
- " float4 mE;\n"
- " \n"
- " float m_radius;\n"
- " int m_faceOffset;\n"
- " int m_numFaces;\n"
- " int m_numVertices;\n"
- " int m_vertexOffset;\n"
- " int m_uniqueEdgesOffset;\n"
- " int m_numUniqueEdges;\n"
- " int m_unused;\n"
- "} ConvexPolyhedronCL;\n"
- "typedef struct \n"
- "{\n"
- " union\n"
- " {\n"
- " float4 m_min;\n"
- " float m_minElems[4];\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float4 m_max;\n"
- " float m_maxElems[4];\n"
- " int m_maxIndices[4];\n"
- " };\n"
- "} btAabbCL;\n"
- "#ifndef B3_AABB_H\n"
- "#define B3_AABB_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3Aabb b3Aabb_t;\n"
- "struct b3Aabb\n"
- "{\n"
- " union\n"
- " {\n"
- " float m_min[4];\n"
- " b3Float4 m_minVec;\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_max[4];\n"
- " b3Float4 m_maxVec;\n"
- " int m_signedMaxIndices[4];\n"
- " };\n"
- "};\n"
- "inline void b3TransformAabb2(b3Float4ConstArg localAabbMin,b3Float4ConstArg localAabbMax, float margin,\n"
- " b3Float4ConstArg pos,\n"
- " b3QuatConstArg orn,\n"
- " b3Float4* aabbMinOut,b3Float4* aabbMaxOut)\n"
- "{\n"
- " b3Float4 localHalfExtents = 0.5f*(localAabbMax-localAabbMin);\n"
- " localHalfExtents+=b3MakeFloat4(margin,margin,margin,0.f);\n"
- " b3Float4 localCenter = 0.5f*(localAabbMax+localAabbMin);\n"
- " b3Mat3x3 m;\n"
- " m = b3QuatGetRotationMatrix(orn);\n"
- " b3Mat3x3 abs_b = b3AbsoluteMat3x3(m);\n"
- " b3Float4 center = b3TransformPoint(localCenter,pos,orn);\n"
- " \n"
- " b3Float4 extent = b3MakeFloat4(b3Dot3F4(localHalfExtents,b3GetRow(abs_b,0)),\n"
- " b3Dot3F4(localHalfExtents,b3GetRow(abs_b,1)),\n"
- " b3Dot3F4(localHalfExtents,b3GetRow(abs_b,2)),\n"
- " 0.f);\n"
- " *aabbMinOut = center-extent;\n"
- " *aabbMaxOut = center+extent;\n"
- "}\n"
- "/// conservative test for overlap between two aabbs\n"
- "inline bool b3TestAabbAgainstAabb(b3Float4ConstArg aabbMin1,b3Float4ConstArg aabbMax1,\n"
- " b3Float4ConstArg aabbMin2, b3Float4ConstArg aabbMax2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabbMin1.x > aabbMax2.x || aabbMax1.x < aabbMin2.x) ? false : overlap;\n"
- " overlap = (aabbMin1.z > aabbMax2.z || aabbMax1.z < aabbMin2.z) ? false : overlap;\n"
- " overlap = (aabbMin1.y > aabbMax2.y || aabbMax1.y < aabbMin2.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "#endif //B3_AABB_H\n"
- "/*\n"
- "Bullet Continuous Collision Detection and Physics Library\n"
- "Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org\n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose,\n"
- "including commercial applications, and to alter it and redistribute it freely,\n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "#ifndef B3_INT2_H\n"
- "#define B3_INT2_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#define b3UnsignedInt2 uint2\n"
- "#define b3Int2 int2\n"
- "#define b3MakeInt2 (int2)\n"
- "#endif //__cplusplus\n"
- "#endif\n"
- "typedef struct\n"
- "{\n"
- " float4 m_plane;\n"
- " int m_indexOffset;\n"
- " int m_numIndices;\n"
- "} btGpuFace;\n"
- "#define make_float4 (float4)\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- " \n"
- "// float4 a1 = make_float4(a.xyz,0.f);\n"
- "// float4 b1 = make_float4(b.xyz,0.f);\n"
- "// return cross(a1,b1);\n"
- "//float4 c = make_float4(a.y*b.z - a.z*b.y,a.z*b.x - a.x*b.z,a.x*b.y - a.y*b.x,0.f);\n"
- " \n"
- " // float4 c = make_float4(a.y*b.z - a.z*b.y,1.f,a.x*b.y - a.y*b.x,0.f);\n"
- " \n"
- " //return c;\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " v = make_float4(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "__inline\n"
- "float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)\n"
- "{\n"
- " return qtRotate( *orientation, *p ) + (*translation);\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "}\n"
- "inline void projectLocal(const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn, \n"
- "const float4* dir, const float4* vertices, float* min, float* max)\n"
- "{\n"
- " min[0] = FLT_MAX;\n"
- " max[0] = -FLT_MAX;\n"
- " int numVerts = hull->m_numVertices;\n"
- " const float4 localDir = qtInvRotate(orn,*dir);\n"
- " float offset = dot(pos,*dir);\n"
- " for(int i=0;i<numVerts;i++)\n"
- " {\n"
- " float dp = dot(vertices[hull->m_vertexOffset+i],localDir);\n"
- " if(dp < min[0]) \n"
- " min[0] = dp;\n"
- " if(dp > max[0]) \n"
- " max[0] = dp;\n"
- " }\n"
- " if(min[0]>max[0])\n"
- " {\n"
- " float tmp = min[0];\n"
- " min[0] = max[0];\n"
- " max[0] = tmp;\n"
- " }\n"
- " min[0] += offset;\n"
- " max[0] += offset;\n"
- "}\n"
- "inline void project(__global const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn, \n"
- "const float4* dir, __global const float4* vertices, float* min, float* max)\n"
- "{\n"
- " min[0] = FLT_MAX;\n"
- " max[0] = -FLT_MAX;\n"
- " int numVerts = hull->m_numVertices;\n"
- " const float4 localDir = qtInvRotate(orn,*dir);\n"
- " float offset = dot(pos,*dir);\n"
- " for(int i=0;i<numVerts;i++)\n"
- " {\n"
- " float dp = dot(vertices[hull->m_vertexOffset+i],localDir);\n"
- " if(dp < min[0]) \n"
- " min[0] = dp;\n"
- " if(dp > max[0]) \n"
- " max[0] = dp;\n"
- " }\n"
- " if(min[0]>max[0])\n"
- " {\n"
- " float tmp = min[0];\n"
- " min[0] = max[0];\n"
- " max[0] = tmp;\n"
- " }\n"
- " min[0] += offset;\n"
- " max[0] += offset;\n"
- "}\n"
- "inline bool TestSepAxisLocalA(const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA,const float4 ornA,\n"
- " const float4 posB,const float4 ornB,\n"
- " float4* sep_axis, const float4* verticesA, __global const float4* verticesB,float* depth)\n"
- "{\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " projectLocal(hullA,posA,ornA,sep_axis,verticesA, &Min0, &Max0);\n"
- " project(hullB,posB,ornB, sep_axis,verticesB, &Min1, &Max1);\n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " return false;\n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " *depth = d0<d1 ? d0:d1;\n"
- " return true;\n"
- "}\n"
- "inline bool IsAlmostZero(const float4 v)\n"
- "{\n"
- " if(fabs(v.x)>1e-6f || fabs(v.y)>1e-6f || fabs(v.z)>1e-6f)\n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " \n"
- " const float4* verticesA, \n"
- " const float4* uniqueEdgesA, \n"
- " const btGpuFace* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB, \n"
- " __global const float4* uniqueEdgesB, \n"
- " __global const btGpuFace* facesB,\n"
- " __global const int* indicesB,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " \n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " {\n"
- " int numFacesA = hullA->m_numFaces;\n"
- " // Test normals from hullA\n"
- " for(int i=0;i<numFacesA;i++)\n"
- " {\n"
- " const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;\n"
- " float4 faceANormalWS = qtRotate(ornA,normal);\n"
- " if (dot3F4(DeltaC2,faceANormalWS)<0)\n"
- " faceANormalWS*=-1.f;\n"
- " curPlaneTests++;\n"
- " float d;\n"
- " if(!TestSepAxisLocalA( hullA, hullB, posA,ornA,posB,ornB,&faceANormalWS, verticesA, verticesB,&d))\n"
- " return false;\n"
- " if(d<*dmin)\n"
- " {\n"
- " *dmin = d;\n"
- " *sep = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisLocalB( __global const ConvexPolyhedronCL* hullA, const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " __global const float4* verticesA, \n"
- " __global const float4* uniqueEdgesA, \n"
- " __global const btGpuFace* facesA,\n"
- " __global const int* indicesA,\n"
- " const float4* verticesB,\n"
- " const float4* uniqueEdgesB, \n"
- " const btGpuFace* facesB,\n"
- " const int* indicesB,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " {\n"
- " int numFacesA = hullA->m_numFaces;\n"
- " // Test normals from hullA\n"
- " for(int i=0;i<numFacesA;i++)\n"
- " {\n"
- " const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;\n"
- " float4 faceANormalWS = qtRotate(ornA,normal);\n"
- " if (dot3F4(DeltaC2,faceANormalWS)<0)\n"
- " faceANormalWS *= -1.f;\n"
- " curPlaneTests++;\n"
- " float d;\n"
- " if(!TestSepAxisLocalA( hullB, hullA, posB,ornB,posA,ornA, &faceANormalWS, verticesB,verticesA, &d))\n"
- " return false;\n"
- " if(d<*dmin)\n"
- " {\n"
- " *dmin = d;\n"
- " *sep = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisEdgeEdgeLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " const float4* verticesA, \n"
- " const float4* uniqueEdgesA, \n"
- " const btGpuFace* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB, \n"
- " __global const float4* uniqueEdgesB, \n"
- " __global const btGpuFace* facesB,\n"
- " __global const int* indicesB,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " int curEdgeEdge = 0;\n"
- " // Test edges\n"
- " for(int e0=0;e0<hullA->m_numUniqueEdges;e0++)\n"
- " {\n"
- " const float4 edge0 = uniqueEdgesA[hullA->m_uniqueEdgesOffset+e0];\n"
- " float4 edge0World = qtRotate(ornA,edge0);\n"
- " for(int e1=0;e1<hullB->m_numUniqueEdges;e1++)\n"
- " {\n"
- " const float4 edge1 = uniqueEdgesB[hullB->m_uniqueEdgesOffset+e1];\n"
- " float4 edge1World = qtRotate(ornB,edge1);\n"
- " float4 crossje = cross3(edge0World,edge1World);\n"
- " curEdgeEdge++;\n"
- " if(!IsAlmostZero(crossje))\n"
- " {\n"
- " crossje = normalize3(crossje);\n"
- " if (dot3F4(DeltaC2,crossje)<0)\n"
- " crossje *= -1.f;\n"
- " float dist;\n"
- " bool result = true;\n"
- " {\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " projectLocal(hullA,posA,ornA,&crossje,verticesA, &Min0, &Max0);\n"
- " project(hullB,posB,ornB,&crossje,verticesB, &Min1, &Max1);\n"
- " \n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " result = false;\n"
- " \n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " dist = d0<d1 ? d0:d1;\n"
- " result = true;\n"
- " }\n"
- " \n"
- " if(dist<*dmin)\n"
- " {\n"
- " *dmin = dist;\n"
- " *sep = crossje;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "inline int findClippingFaces(const float4 separatingNormal,\n"
- " const ConvexPolyhedronCL* hullA, \n"
- " __global const ConvexPolyhedronCL* hullB,\n"
- " const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,\n"
- " __global float4* worldVertsA1,\n"
- " __global float4* worldNormalsA1,\n"
- " __global float4* worldVertsB1,\n"
- " int capacityWorldVerts,\n"
- " const float minDist, float maxDist,\n"
- " const float4* verticesA,\n"
- " const btGpuFace* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB,\n"
- " __global const btGpuFace* facesB,\n"
- " __global const int* indicesB,\n"
- " __global int4* clippingFaces, int pairIndex)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " int numWorldVertsB1= 0;\n"
- " \n"
- " \n"
- " int closestFaceB=0;\n"
- " float dmax = -FLT_MAX;\n"
- " \n"
- " {\n"
- " for(int face=0;face<hullB->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(facesB[hullB->m_faceOffset+face].m_plane.x,\n"
- " facesB[hullB->m_faceOffset+face].m_plane.y, facesB[hullB->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 WorldNormal = qtRotate(ornB, Normal);\n"
- " float d = dot3F4(WorldNormal,separatingNormal);\n"
- " if (d > dmax)\n"
- " {\n"
- " dmax = d;\n"
- " closestFaceB = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " {\n"
- " const btGpuFace polyB = facesB[hullB->m_faceOffset+closestFaceB];\n"
- " int numVertices = polyB.m_numIndices;\n"
- " if (numVertices>capacityWorldVerts)\n"
- " numVertices = capacityWorldVerts;\n"
- " if (numVertices<0)\n"
- " numVertices = 0;\n"
- " \n"
- " for(int e0=0;e0<numVertices;e0++)\n"
- " {\n"
- " if (e0<capacityWorldVerts)\n"
- " {\n"
- " const float4 b = verticesB[hullB->m_vertexOffset+indicesB[polyB.m_indexOffset+e0]];\n"
- " worldVertsB1[pairIndex*capacityWorldVerts+numWorldVertsB1++] = transform(&b,&posB,&ornB);\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " int closestFaceA=0;\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " for(int face=0;face<hullA->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(\n"
- " facesA[hullA->m_faceOffset+face].m_plane.x,\n"
- " facesA[hullA->m_faceOffset+face].m_plane.y,\n"
- " facesA[hullA->m_faceOffset+face].m_plane.z,\n"
- " 0.f);\n"
- " const float4 faceANormalWS = qtRotate(ornA,Normal);\n"
- " \n"
- " float d = dot3F4(faceANormalWS,separatingNormal);\n"
- " if (d < dmin)\n"
- " {\n"
- " dmin = d;\n"
- " closestFaceA = face;\n"
- " worldNormalsA1[pairIndex] = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " int numVerticesA = facesA[hullA->m_faceOffset+closestFaceA].m_numIndices;\n"
- " if (numVerticesA>capacityWorldVerts)\n"
- " numVerticesA = capacityWorldVerts;\n"
- " if (numVerticesA<0)\n"
- " numVerticesA=0;\n"
- " \n"
- " for(int e0=0;e0<numVerticesA;e0++)\n"
- " {\n"
- " if (e0<capacityWorldVerts)\n"
- " {\n"
- " const float4 a = verticesA[hullA->m_vertexOffset+indicesA[facesA[hullA->m_faceOffset+closestFaceA].m_indexOffset+e0]];\n"
- " worldVertsA1[pairIndex*capacityWorldVerts+e0] = transform(&a, &posA,&ornA);\n"
- " }\n"
- " }\n"
- " \n"
- " clippingFaces[pairIndex].x = closestFaceA;\n"
- " clippingFaces[pairIndex].y = closestFaceB;\n"
- " clippingFaces[pairIndex].z = numVerticesA;\n"
- " clippingFaces[pairIndex].w = numWorldVertsB1;\n"
- " \n"
- " \n"
- " return numContactsOut;\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void findConcaveSeparatingAxisVertexFaceKernel( __global int4* concavePairs,\n"
- " __global const BodyData* rigidBodies,\n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes,\n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global const btGpuChildShape* gpuChildShapes,\n"
- " __global btAabbCL* aabbs,\n"
- " __global float4* concaveSeparatingNormalsOut,\n"
- " __global int* concaveHasSeparatingNormals,\n"
- " __global int4* clippingFacesOut,\n"
- " __global float4* worldVertsA1GPU,\n"
- " __global float4* worldNormalsAGPU,\n"
- " __global float4* worldVertsB1GPU,\n"
- " __global float* dmins,\n"
- " int vertexFaceCapacity,\n"
- " int numConcavePairs\n"
- " )\n"
- "{\n"
- " \n"
- " int i = get_global_id(0);\n"
- " if (i>=numConcavePairs)\n"
- " return;\n"
- " \n"
- " concaveHasSeparatingNormals[i] = 0;\n"
- " \n"
- " int pairIdx = i;\n"
- " \n"
- " int bodyIndexA = concavePairs[i].x;\n"
- " int bodyIndexB = concavePairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " if (collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL&&\n"
- " collidables[collidableIndexB].m_shapeType!=SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " concavePairs[pairIdx].w = -1;\n"
- " return;\n"
- " }\n"
- " \n"
- " \n"
- " \n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " int numActualConcaveConvexTests = 0;\n"
- " \n"
- " int f = concavePairs[i].z;\n"
- " \n"
- " bool overlap = false;\n"
- " \n"
- " ConvexPolyhedronCL convexPolyhedronA;\n"
- " \n"
- " //add 3 vertices of the triangle\n"
- " convexPolyhedronA.m_numVertices = 3;\n"
- " convexPolyhedronA.m_vertexOffset = 0;\n"
- " float4 localCenter = make_float4(0.f,0.f,0.f,0.f);\n"
- " \n"
- " btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];\n"
- " float4 triMinAabb, triMaxAabb;\n"
- " btAabbCL triAabb;\n"
- " triAabb.m_min = make_float4(1e30f,1e30f,1e30f,0.f);\n"
- " triAabb.m_max = make_float4(-1e30f,-1e30f,-1e30f,0.f);\n"
- " \n"
- " float4 verticesA[3];\n"
- " for (int i=0;i<3;i++)\n"
- " {\n"
- " int index = indices[face.m_indexOffset+i];\n"
- " float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];\n"
- " verticesA[i] = vert;\n"
- " localCenter += vert;\n"
- " \n"
- " triAabb.m_min = min(triAabb.m_min,vert);\n"
- " triAabb.m_max = max(triAabb.m_max,vert);\n"
- " \n"
- " }\n"
- " \n"
- " overlap = true;\n"
- " overlap = (triAabb.m_min.x > aabbs[bodyIndexB].m_max.x || triAabb.m_max.x < aabbs[bodyIndexB].m_min.x) ? false : overlap;\n"
- " overlap = (triAabb.m_min.z > aabbs[bodyIndexB].m_max.z || triAabb.m_max.z < aabbs[bodyIndexB].m_min.z) ? false : overlap;\n"
- " overlap = (triAabb.m_min.y > aabbs[bodyIndexB].m_max.y || triAabb.m_max.y < aabbs[bodyIndexB].m_min.y) ? false : overlap;\n"
- " \n"
- " if (overlap)\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " int hasSeparatingAxis=5;\n"
- " float4 sepAxis=make_float4(1,2,3,4);\n"
- " \n"
- " int localCC=0;\n"
- " numActualConcaveConvexTests++;\n"
- " \n"
- " //a triangle has 3 unique edges\n"
- " convexPolyhedronA.m_numUniqueEdges = 3;\n"
- " convexPolyhedronA.m_uniqueEdgesOffset = 0;\n"
- " float4 uniqueEdgesA[3];\n"
- " \n"
- " uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);\n"
- " uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);\n"
- " uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);\n"
- " \n"
- " \n"
- " convexPolyhedronA.m_faceOffset = 0;\n"
- " \n"
- " float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);\n"
- " \n"
- " btGpuFace facesA[TRIANGLE_NUM_CONVEX_FACES];\n"
- " int indicesA[3+3+2+2+2];\n"
- " int curUsedIndices=0;\n"
- " int fidx=0;\n"
- " \n"
- " //front size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[0] = 0;\n"
- " indicesA[1] = 1;\n"
- " indicesA[2] = 2;\n"
- " curUsedIndices+=3;\n"
- " float c = face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = normal.x;\n"
- " facesA[fidx].m_plane.y = normal.y;\n"
- " facesA[fidx].m_plane.z = normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " //back size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[3]=2;\n"
- " indicesA[4]=1;\n"
- " indicesA[5]=0;\n"
- " curUsedIndices+=3;\n"
- " float c = dot(normal,verticesA[0]);\n"
- " float c1 = -face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = -normal.x;\n"
- " facesA[fidx].m_plane.y = -normal.y;\n"
- " facesA[fidx].m_plane.z = -normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " \n"
- " bool addEdgePlanes = true;\n"
- " if (addEdgePlanes)\n"
- " {\n"
- " int numVertices=3;\n"
- " int prevVertex = numVertices-1;\n"
- " for (int i=0;i<numVertices;i++)\n"
- " {\n"
- " float4 v0 = verticesA[i];\n"
- " float4 v1 = verticesA[prevVertex];\n"
- " \n"
- " float4 edgeNormal = normalize(cross(normal,v1-v0));\n"
- " float c = -dot(edgeNormal,v0);\n"
- " \n"
- " facesA[fidx].m_numIndices = 2;\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[curUsedIndices++]=i;\n"
- " indicesA[curUsedIndices++]=prevVertex;\n"
- " \n"
- " facesA[fidx].m_plane.x = edgeNormal.x;\n"
- " facesA[fidx].m_plane.y = edgeNormal.y;\n"
- " facesA[fidx].m_plane.z = edgeNormal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " fidx++;\n"
- " prevVertex = i;\n"
- " }\n"
- " }\n"
- " convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;\n"
- " convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);\n"
- " \n"
- " \n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " \n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " ///////////////////\n"
- " ///compound shape support\n"
- " \n"
- " if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " int compoundChild = concavePairs[pairIdx].w;\n"
- " int childShapeIndexB = compoundChild;//collidables[collidableIndexB].m_shapeIndex+compoundChild;\n"
- " int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
- " }\n"
- " //////////////////\n"
- " \n"
- " float4 c0local = convexPolyhedronA.m_localCenter;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " \n"
- " \n"
- " bool sepA = findSeparatingAxisLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " verticesA,uniqueEdgesA,facesA,indicesA,\n"
- " vertices,uniqueEdges,faces,indices,\n"
- " &sepAxis,&dmin);\n"
- " hasSeparatingAxis = 4;\n"
- " if (!sepA)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " bool sepB = findSeparatingAxisLocalB( &convexShapes[shapeIndexB],&convexPolyhedronA,\n"
- " posB,ornB,\n"
- " posA,ornA,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,indices,\n"
- " verticesA,uniqueEdgesA,facesA,indicesA,\n"
- " &sepAxis,&dmin);\n"
- " \n"
- " if (!sepB)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis = 1;\n"
- " }\n"
- " } \n"
- " \n"
- " if (hasSeparatingAxis)\n"
- " {\n"
- " dmins[i] = dmin;\n"
- " concaveSeparatingNormalsOut[pairIdx]=sepAxis;\n"
- " concaveHasSeparatingNormals[i]=1;\n"
- " \n"
- " } else\n"
- " { \n"
- " //mark this pair as in-active\n"
- " concavePairs[pairIdx].w = -1;\n"
- " }\n"
- " }\n"
- " else\n"
- " { \n"
- " //mark this pair as in-active\n"
- " concavePairs[pairIdx].w = -1;\n"
- " }\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void findConcaveSeparatingAxisEdgeEdgeKernel( __global int4* concavePairs,\n"
- " __global const BodyData* rigidBodies,\n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes,\n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global const btGpuChildShape* gpuChildShapes,\n"
- " __global btAabbCL* aabbs,\n"
- " __global float4* concaveSeparatingNormalsOut,\n"
- " __global int* concaveHasSeparatingNormals,\n"
- " __global int4* clippingFacesOut,\n"
- " __global float4* worldVertsA1GPU,\n"
- " __global float4* worldNormalsAGPU,\n"
- " __global float4* worldVertsB1GPU,\n"
- " __global float* dmins,\n"
- " int vertexFaceCapacity,\n"
- " int numConcavePairs\n"
- " )\n"
- "{\n"
- " \n"
- " int i = get_global_id(0);\n"
- " if (i>=numConcavePairs)\n"
- " return;\n"
- " \n"
- " if (!concaveHasSeparatingNormals[i])\n"
- " return;\n"
- " \n"
- " int pairIdx = i;\n"
- " \n"
- " int bodyIndexA = concavePairs[i].x;\n"
- " int bodyIndexB = concavePairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " int numActualConcaveConvexTests = 0;\n"
- " \n"
- " int f = concavePairs[i].z;\n"
- " \n"
- " bool overlap = false;\n"
- " \n"
- " ConvexPolyhedronCL convexPolyhedronA;\n"
- " \n"
- " //add 3 vertices of the triangle\n"
- " convexPolyhedronA.m_numVertices = 3;\n"
- " convexPolyhedronA.m_vertexOffset = 0;\n"
- " float4 localCenter = make_float4(0.f,0.f,0.f,0.f);\n"
- " \n"
- " btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];\n"
- " float4 triMinAabb, triMaxAabb;\n"
- " btAabbCL triAabb;\n"
- " triAabb.m_min = make_float4(1e30f,1e30f,1e30f,0.f);\n"
- " triAabb.m_max = make_float4(-1e30f,-1e30f,-1e30f,0.f);\n"
- " \n"
- " float4 verticesA[3];\n"
- " for (int i=0;i<3;i++)\n"
- " {\n"
- " int index = indices[face.m_indexOffset+i];\n"
- " float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];\n"
- " verticesA[i] = vert;\n"
- " localCenter += vert;\n"
- " \n"
- " triAabb.m_min = min(triAabb.m_min,vert);\n"
- " triAabb.m_max = max(triAabb.m_max,vert);\n"
- " \n"
- " }\n"
- " \n"
- " overlap = true;\n"
- " overlap = (triAabb.m_min.x > aabbs[bodyIndexB].m_max.x || triAabb.m_max.x < aabbs[bodyIndexB].m_min.x) ? false : overlap;\n"
- " overlap = (triAabb.m_min.z > aabbs[bodyIndexB].m_max.z || triAabb.m_max.z < aabbs[bodyIndexB].m_min.z) ? false : overlap;\n"
- " overlap = (triAabb.m_min.y > aabbs[bodyIndexB].m_max.y || triAabb.m_max.y < aabbs[bodyIndexB].m_min.y) ? false : overlap;\n"
- " \n"
- " if (overlap)\n"
- " {\n"
- " float dmin = dmins[i];\n"
- " int hasSeparatingAxis=5;\n"
- " float4 sepAxis=make_float4(1,2,3,4);\n"
- " sepAxis = concaveSeparatingNormalsOut[pairIdx];\n"
- " \n"
- " int localCC=0;\n"
- " numActualConcaveConvexTests++;\n"
- " \n"
- " //a triangle has 3 unique edges\n"
- " convexPolyhedronA.m_numUniqueEdges = 3;\n"
- " convexPolyhedronA.m_uniqueEdgesOffset = 0;\n"
- " float4 uniqueEdgesA[3];\n"
- " \n"
- " uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);\n"
- " uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);\n"
- " uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);\n"
- " \n"
- " \n"
- " convexPolyhedronA.m_faceOffset = 0;\n"
- " \n"
- " float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);\n"
- " \n"
- " btGpuFace facesA[TRIANGLE_NUM_CONVEX_FACES];\n"
- " int indicesA[3+3+2+2+2];\n"
- " int curUsedIndices=0;\n"
- " int fidx=0;\n"
- " \n"
- " //front size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[0] = 0;\n"
- " indicesA[1] = 1;\n"
- " indicesA[2] = 2;\n"
- " curUsedIndices+=3;\n"
- " float c = face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = normal.x;\n"
- " facesA[fidx].m_plane.y = normal.y;\n"
- " facesA[fidx].m_plane.z = normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " //back size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[3]=2;\n"
- " indicesA[4]=1;\n"
- " indicesA[5]=0;\n"
- " curUsedIndices+=3;\n"
- " float c = dot(normal,verticesA[0]);\n"
- " float c1 = -face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = -normal.x;\n"
- " facesA[fidx].m_plane.y = -normal.y;\n"
- " facesA[fidx].m_plane.z = -normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " \n"
- " bool addEdgePlanes = true;\n"
- " if (addEdgePlanes)\n"
- " {\n"
- " int numVertices=3;\n"
- " int prevVertex = numVertices-1;\n"
- " for (int i=0;i<numVertices;i++)\n"
- " {\n"
- " float4 v0 = verticesA[i];\n"
- " float4 v1 = verticesA[prevVertex];\n"
- " \n"
- " float4 edgeNormal = normalize(cross(normal,v1-v0));\n"
- " float c = -dot(edgeNormal,v0);\n"
- " \n"
- " facesA[fidx].m_numIndices = 2;\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[curUsedIndices++]=i;\n"
- " indicesA[curUsedIndices++]=prevVertex;\n"
- " \n"
- " facesA[fidx].m_plane.x = edgeNormal.x;\n"
- " facesA[fidx].m_plane.y = edgeNormal.y;\n"
- " facesA[fidx].m_plane.z = edgeNormal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " fidx++;\n"
- " prevVertex = i;\n"
- " }\n"
- " }\n"
- " convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;\n"
- " convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);\n"
- " \n"
- " \n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " \n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " ///////////////////\n"
- " ///compound shape support\n"
- " \n"
- " if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " int compoundChild = concavePairs[pairIdx].w;\n"
- " int childShapeIndexB = compoundChild;//collidables[collidableIndexB].m_shapeIndex+compoundChild;\n"
- " int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
- " }\n"
- " //////////////////\n"
- " \n"
- " float4 c0local = convexPolyhedronA.m_localCenter;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " \n"
- " \n"
- " {\n"
- " bool sepEE = findSeparatingAxisEdgeEdgeLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " verticesA,uniqueEdgesA,facesA,indicesA,\n"
- " vertices,uniqueEdges,faces,indices,\n"
- " &sepAxis,&dmin);\n"
- " \n"
- " if (!sepEE)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis = 1;\n"
- " }\n"
- " }\n"
- " \n"
- " \n"
- " if (hasSeparatingAxis)\n"
- " {\n"
- " sepAxis.w = dmin;\n"
- " dmins[i] = dmin;\n"
- " concaveSeparatingNormalsOut[pairIdx]=sepAxis;\n"
- " concaveHasSeparatingNormals[i]=1;\n"
- " \n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " \n"
- " findClippingFaces(sepAxis,\n"
- " &convexPolyhedronA,\n"
- " &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " worldVertsA1GPU,\n"
- " worldNormalsAGPU,\n"
- " worldVertsB1GPU,\n"
- " vertexFaceCapacity,\n"
- " minDist, maxDist,\n"
- " verticesA,\n"
- " facesA,\n"
- " indicesA,\n"
- " vertices,\n"
- " faces,\n"
- " indices,\n"
- " clippingFacesOut, pairIdx);\n"
- " \n"
- " \n"
- " } else\n"
- " { \n"
- " //mark this pair as in-active\n"
- " concavePairs[pairIdx].w = -1;\n"
- " }\n"
- " }\n"
- " else\n"
- " { \n"
- " //mark this pair as in-active\n"
- " concavePairs[pairIdx].w = -1;\n"
- " }\n"
- " \n"
- " concavePairs[i].z = -1;//for the next stage, z is used to determine existing contact points\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satKernels.h b/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satKernels.h
deleted file mode 100644
index e627af2799..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/NarrowphaseCollision/kernels/satKernels.h
+++ /dev/null
@@ -1,2103 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* satKernelsCL =
- "//keep this enum in sync with the CPU version (in btCollidable.h)\n"
- "//written by Erwin Coumans\n"
- "#define SHAPE_CONVEX_HULL 3\n"
- "#define SHAPE_CONCAVE_TRIMESH 5\n"
- "#define TRIANGLE_NUM_CONVEX_FACES 5\n"
- "#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6\n"
- "#define B3_MAX_STACK_DEPTH 256\n"
- "typedef unsigned int u32;\n"
- "///keep this in sync with btCollidable.h\n"
- "typedef struct\n"
- "{\n"
- " union {\n"
- " int m_numChildShapes;\n"
- " int m_bvhIndex;\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_radius;\n"
- " int m_compoundBvhIndex;\n"
- " };\n"
- " \n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- " \n"
- "} btCollidableGpu;\n"
- "#define MAX_NUM_PARTS_IN_BITS 10\n"
- "///b3QuantizedBvhNode is a compressed aabb node, 16 bytes.\n"
- "///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).\n"
- "typedef struct\n"
- "{\n"
- " //12 bytes\n"
- " unsigned short int m_quantizedAabbMin[3];\n"
- " unsigned short int m_quantizedAabbMax[3];\n"
- " //4 bytes\n"
- " int m_escapeIndexOrTriangleIndex;\n"
- "} b3QuantizedBvhNode;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_aabbMin;\n"
- " float4 m_aabbMax;\n"
- " float4 m_quantization;\n"
- " int m_numNodes;\n"
- " int m_numSubTrees;\n"
- " int m_nodeOffset;\n"
- " int m_subTreeOffset;\n"
- "} b3BvhInfo;\n"
- "int getTriangleIndex(const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " unsigned int x=0;\n"
- " unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);\n"
- " // Get only the lower bits where the triangle index is stored\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex&~(y));\n"
- "}\n"
- "int getTriangleIndexGlobal(__global const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " unsigned int x=0;\n"
- " unsigned int y = (~(x&0))<<(31-MAX_NUM_PARTS_IN_BITS);\n"
- " // Get only the lower bits where the triangle index is stored\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex&~(y));\n"
- "}\n"
- "int isLeafNode(const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " //skipindex is negative (internal node), triangleindex >=0 (leafnode)\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;\n"
- "}\n"
- "int isLeafNodeGlobal(__global const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " //skipindex is negative (internal node), triangleindex >=0 (leafnode)\n"
- " return (rootNode->m_escapeIndexOrTriangleIndex >= 0)? 1 : 0;\n"
- "}\n"
- " \n"
- "int getEscapeIndex(const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " return -rootNode->m_escapeIndexOrTriangleIndex;\n"
- "}\n"
- "int getEscapeIndexGlobal(__global const b3QuantizedBvhNode* rootNode)\n"
- "{\n"
- " return -rootNode->m_escapeIndexOrTriangleIndex;\n"
- "}\n"
- "typedef struct\n"
- "{\n"
- " //12 bytes\n"
- " unsigned short int m_quantizedAabbMin[3];\n"
- " unsigned short int m_quantizedAabbMax[3];\n"
- " //4 bytes, points to the root of the subtree\n"
- " int m_rootNodeIndex;\n"
- " //4 bytes\n"
- " int m_subtreeSize;\n"
- " int m_padding[3];\n"
- "} b3BvhSubtreeInfo;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_childPosition;\n"
- " float4 m_childOrientation;\n"
- " int m_shapeIndex;\n"
- " int m_unused0;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "} btGpuChildShape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " float4 m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} BodyData;\n"
- "typedef struct \n"
- "{\n"
- " float4 m_localCenter;\n"
- " float4 m_extents;\n"
- " float4 mC;\n"
- " float4 mE;\n"
- " \n"
- " float m_radius;\n"
- " int m_faceOffset;\n"
- " int m_numFaces;\n"
- " int m_numVertices;\n"
- " int m_vertexOffset;\n"
- " int m_uniqueEdgesOffset;\n"
- " int m_numUniqueEdges;\n"
- " int m_unused;\n"
- "} ConvexPolyhedronCL;\n"
- "typedef struct \n"
- "{\n"
- " union\n"
- " {\n"
- " float4 m_min;\n"
- " float m_minElems[4];\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float4 m_max;\n"
- " float m_maxElems[4];\n"
- " int m_maxIndices[4];\n"
- " };\n"
- "} btAabbCL;\n"
- "#ifndef B3_AABB_H\n"
- "#define B3_AABB_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3Aabb b3Aabb_t;\n"
- "struct b3Aabb\n"
- "{\n"
- " union\n"
- " {\n"
- " float m_min[4];\n"
- " b3Float4 m_minVec;\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_max[4];\n"
- " b3Float4 m_maxVec;\n"
- " int m_signedMaxIndices[4];\n"
- " };\n"
- "};\n"
- "inline void b3TransformAabb2(b3Float4ConstArg localAabbMin,b3Float4ConstArg localAabbMax, float margin,\n"
- " b3Float4ConstArg pos,\n"
- " b3QuatConstArg orn,\n"
- " b3Float4* aabbMinOut,b3Float4* aabbMaxOut)\n"
- "{\n"
- " b3Float4 localHalfExtents = 0.5f*(localAabbMax-localAabbMin);\n"
- " localHalfExtents+=b3MakeFloat4(margin,margin,margin,0.f);\n"
- " b3Float4 localCenter = 0.5f*(localAabbMax+localAabbMin);\n"
- " b3Mat3x3 m;\n"
- " m = b3QuatGetRotationMatrix(orn);\n"
- " b3Mat3x3 abs_b = b3AbsoluteMat3x3(m);\n"
- " b3Float4 center = b3TransformPoint(localCenter,pos,orn);\n"
- " \n"
- " b3Float4 extent = b3MakeFloat4(b3Dot3F4(localHalfExtents,b3GetRow(abs_b,0)),\n"
- " b3Dot3F4(localHalfExtents,b3GetRow(abs_b,1)),\n"
- " b3Dot3F4(localHalfExtents,b3GetRow(abs_b,2)),\n"
- " 0.f);\n"
- " *aabbMinOut = center-extent;\n"
- " *aabbMaxOut = center+extent;\n"
- "}\n"
- "/// conservative test for overlap between two aabbs\n"
- "inline bool b3TestAabbAgainstAabb(b3Float4ConstArg aabbMin1,b3Float4ConstArg aabbMax1,\n"
- " b3Float4ConstArg aabbMin2, b3Float4ConstArg aabbMax2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabbMin1.x > aabbMax2.x || aabbMax1.x < aabbMin2.x) ? false : overlap;\n"
- " overlap = (aabbMin1.z > aabbMax2.z || aabbMax1.z < aabbMin2.z) ? false : overlap;\n"
- " overlap = (aabbMin1.y > aabbMax2.y || aabbMax1.y < aabbMin2.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "#endif //B3_AABB_H\n"
- "/*\n"
- "Bullet Continuous Collision Detection and Physics Library\n"
- "Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org\n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose,\n"
- "including commercial applications, and to alter it and redistribute it freely,\n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "#ifndef B3_INT2_H\n"
- "#define B3_INT2_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#define b3UnsignedInt2 uint2\n"
- "#define b3Int2 int2\n"
- "#define b3MakeInt2 (int2)\n"
- "#endif //__cplusplus\n"
- "#endif\n"
- "typedef struct\n"
- "{\n"
- " float4 m_plane;\n"
- " int m_indexOffset;\n"
- " int m_numIndices;\n"
- "} btGpuFace;\n"
- "#define make_float4 (float4)\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- " \n"
- "// float4 a1 = make_float4(a.xyz,0.f);\n"
- "// float4 b1 = make_float4(b.xyz,0.f);\n"
- "// return cross(a1,b1);\n"
- "//float4 c = make_float4(a.y*b.z - a.z*b.y,a.z*b.x - a.x*b.z,a.x*b.y - a.y*b.x,0.f);\n"
- " \n"
- " // float4 c = make_float4(a.y*b.z - a.z*b.y,1.f,a.x*b.y - a.y*b.x,0.f);\n"
- " \n"
- " //return c;\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " v = make_float4(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "__inline\n"
- "float4 transform(const float4* p, const float4* translation, const Quaternion* orientation)\n"
- "{\n"
- " return qtRotate( *orientation, *p ) + (*translation);\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "}\n"
- "inline void projectLocal(const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn, \n"
- "const float4* dir, const float4* vertices, float* min, float* max)\n"
- "{\n"
- " min[0] = FLT_MAX;\n"
- " max[0] = -FLT_MAX;\n"
- " int numVerts = hull->m_numVertices;\n"
- " const float4 localDir = qtInvRotate(orn,*dir);\n"
- " float offset = dot(pos,*dir);\n"
- " for(int i=0;i<numVerts;i++)\n"
- " {\n"
- " float dp = dot(vertices[hull->m_vertexOffset+i],localDir);\n"
- " if(dp < min[0]) \n"
- " min[0] = dp;\n"
- " if(dp > max[0]) \n"
- " max[0] = dp;\n"
- " }\n"
- " if(min[0]>max[0])\n"
- " {\n"
- " float tmp = min[0];\n"
- " min[0] = max[0];\n"
- " max[0] = tmp;\n"
- " }\n"
- " min[0] += offset;\n"
- " max[0] += offset;\n"
- "}\n"
- "inline void project(__global const ConvexPolyhedronCL* hull, const float4 pos, const float4 orn, \n"
- "const float4* dir, __global const float4* vertices, float* min, float* max)\n"
- "{\n"
- " min[0] = FLT_MAX;\n"
- " max[0] = -FLT_MAX;\n"
- " int numVerts = hull->m_numVertices;\n"
- " const float4 localDir = qtInvRotate(orn,*dir);\n"
- " float offset = dot(pos,*dir);\n"
- " for(int i=0;i<numVerts;i++)\n"
- " {\n"
- " float dp = dot(vertices[hull->m_vertexOffset+i],localDir);\n"
- " if(dp < min[0]) \n"
- " min[0] = dp;\n"
- " if(dp > max[0]) \n"
- " max[0] = dp;\n"
- " }\n"
- " if(min[0]>max[0])\n"
- " {\n"
- " float tmp = min[0];\n"
- " min[0] = max[0];\n"
- " max[0] = tmp;\n"
- " }\n"
- " min[0] += offset;\n"
- " max[0] += offset;\n"
- "}\n"
- "inline bool TestSepAxisLocalA(const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA,const float4 ornA,\n"
- " const float4 posB,const float4 ornB,\n"
- " float4* sep_axis, const float4* verticesA, __global const float4* verticesB,float* depth)\n"
- "{\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " projectLocal(hullA,posA,ornA,sep_axis,verticesA, &Min0, &Max0);\n"
- " project(hullB,posB,ornB, sep_axis,verticesB, &Min1, &Max1);\n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " return false;\n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " *depth = d0<d1 ? d0:d1;\n"
- " return true;\n"
- "}\n"
- "inline bool IsAlmostZero(const float4 v)\n"
- "{\n"
- " if(fabs(v.x)>1e-6f || fabs(v.y)>1e-6f || fabs(v.z)>1e-6f)\n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " \n"
- " const float4* verticesA, \n"
- " const float4* uniqueEdgesA, \n"
- " const btGpuFace* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB, \n"
- " __global const float4* uniqueEdgesB, \n"
- " __global const btGpuFace* facesB,\n"
- " __global const int* indicesB,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " \n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " {\n"
- " int numFacesA = hullA->m_numFaces;\n"
- " // Test normals from hullA\n"
- " for(int i=0;i<numFacesA;i++)\n"
- " {\n"
- " const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;\n"
- " float4 faceANormalWS = qtRotate(ornA,normal);\n"
- " if (dot3F4(DeltaC2,faceANormalWS)<0)\n"
- " faceANormalWS*=-1.f;\n"
- " curPlaneTests++;\n"
- " float d;\n"
- " if(!TestSepAxisLocalA( hullA, hullB, posA,ornA,posB,ornB,&faceANormalWS, verticesA, verticesB,&d))\n"
- " return false;\n"
- " if(d<*dmin)\n"
- " {\n"
- " *dmin = d;\n"
- " *sep = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisLocalB( __global const ConvexPolyhedronCL* hullA, const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " __global const float4* verticesA, \n"
- " __global const float4* uniqueEdgesA, \n"
- " __global const btGpuFace* facesA,\n"
- " __global const int* indicesA,\n"
- " const float4* verticesB,\n"
- " const float4* uniqueEdgesB, \n"
- " const btGpuFace* facesB,\n"
- " const int* indicesB,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " {\n"
- " int numFacesA = hullA->m_numFaces;\n"
- " // Test normals from hullA\n"
- " for(int i=0;i<numFacesA;i++)\n"
- " {\n"
- " const float4 normal = facesA[hullA->m_faceOffset+i].m_plane;\n"
- " float4 faceANormalWS = qtRotate(ornA,normal);\n"
- " if (dot3F4(DeltaC2,faceANormalWS)<0)\n"
- " faceANormalWS *= -1.f;\n"
- " curPlaneTests++;\n"
- " float d;\n"
- " if(!TestSepAxisLocalA( hullB, hullA, posB,ornB,posA,ornA, &faceANormalWS, verticesB,verticesA, &d))\n"
- " return false;\n"
- " if(d<*dmin)\n"
- " {\n"
- " *dmin = d;\n"
- " *sep = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisEdgeEdgeLocalA( const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " const float4* verticesA, \n"
- " const float4* uniqueEdgesA, \n"
- " const btGpuFace* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB, \n"
- " __global const float4* uniqueEdgesB, \n"
- " __global const btGpuFace* facesB,\n"
- " __global const int* indicesB,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " int curEdgeEdge = 0;\n"
- " // Test edges\n"
- " for(int e0=0;e0<hullA->m_numUniqueEdges;e0++)\n"
- " {\n"
- " const float4 edge0 = uniqueEdgesA[hullA->m_uniqueEdgesOffset+e0];\n"
- " float4 edge0World = qtRotate(ornA,edge0);\n"
- " for(int e1=0;e1<hullB->m_numUniqueEdges;e1++)\n"
- " {\n"
- " const float4 edge1 = uniqueEdgesB[hullB->m_uniqueEdgesOffset+e1];\n"
- " float4 edge1World = qtRotate(ornB,edge1);\n"
- " float4 crossje = cross3(edge0World,edge1World);\n"
- " curEdgeEdge++;\n"
- " if(!IsAlmostZero(crossje))\n"
- " {\n"
- " crossje = normalize3(crossje);\n"
- " if (dot3F4(DeltaC2,crossje)<0)\n"
- " crossje *= -1.f;\n"
- " float dist;\n"
- " bool result = true;\n"
- " {\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " projectLocal(hullA,posA,ornA,&crossje,verticesA, &Min0, &Max0);\n"
- " project(hullB,posB,ornB,&crossje,verticesB, &Min1, &Max1);\n"
- " \n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " result = false;\n"
- " \n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " dist = d0<d1 ? d0:d1;\n"
- " result = true;\n"
- " }\n"
- " \n"
- " if(dist<*dmin)\n"
- " {\n"
- " *dmin = dist;\n"
- " *sep = crossje;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "inline bool TestSepAxis(__global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA,const float4 ornA,\n"
- " const float4 posB,const float4 ornB,\n"
- " float4* sep_axis, __global const float4* vertices,float* depth)\n"
- "{\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " project(hullA,posA,ornA,sep_axis,vertices, &Min0, &Max0);\n"
- " project(hullB,posB,ornB, sep_axis,vertices, &Min1, &Max1);\n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " return false;\n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " *depth = d0<d1 ? d0:d1;\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxis( __global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " __global const float4* vertices, \n"
- " __global const float4* uniqueEdges, \n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " \n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " \n"
- " int curPlaneTests=0;\n"
- " {\n"
- " int numFacesA = hullA->m_numFaces;\n"
- " // Test normals from hullA\n"
- " for(int i=0;i<numFacesA;i++)\n"
- " {\n"
- " const float4 normal = faces[hullA->m_faceOffset+i].m_plane;\n"
- " float4 faceANormalWS = qtRotate(ornA,normal);\n"
- " \n"
- " if (dot3F4(DeltaC2,faceANormalWS)<0)\n"
- " faceANormalWS*=-1.f;\n"
- " \n"
- " curPlaneTests++;\n"
- " \n"
- " float d;\n"
- " if(!TestSepAxis( hullA, hullB, posA,ornA,posB,ornB,&faceANormalWS, vertices,&d))\n"
- " return false;\n"
- " \n"
- " if(d<*dmin)\n"
- " {\n"
- " *dmin = d;\n"
- " *sep = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " \n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisUnitSphere( __global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " __global const float4* vertices,\n"
- " __global const float4* unitSphereDirections,\n"
- " int numUnitSphereDirections,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " \n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " int curEdgeEdge = 0;\n"
- " // Test unit sphere directions\n"
- " for (int i=0;i<numUnitSphereDirections;i++)\n"
- " {\n"
- " float4 crossje;\n"
- " crossje = unitSphereDirections[i]; \n"
- " if (dot3F4(DeltaC2,crossje)>0)\n"
- " crossje *= -1.f;\n"
- " {\n"
- " float dist;\n"
- " bool result = true;\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " project(hullA,posA,ornA,&crossje,vertices, &Min0, &Max0);\n"
- " project(hullB,posB,ornB,&crossje,vertices, &Min1, &Max1);\n"
- " \n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " return false;\n"
- " \n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " dist = d0<d1 ? d0:d1;\n"
- " result = true;\n"
- " \n"
- " if(dist<*dmin)\n"
- " {\n"
- " *dmin = dist;\n"
- " *sep = crossje;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "bool findSeparatingAxisEdgeEdge( __global const ConvexPolyhedronCL* hullA, __global const ConvexPolyhedronCL* hullB, \n"
- " const float4 posA1,\n"
- " const float4 ornA,\n"
- " const float4 posB1,\n"
- " const float4 ornB,\n"
- " const float4 DeltaC2,\n"
- " __global const float4* vertices, \n"
- " __global const float4* uniqueEdges, \n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " float4* sep,\n"
- " float* dmin)\n"
- "{\n"
- " \n"
- " float4 posA = posA1;\n"
- " posA.w = 0.f;\n"
- " float4 posB = posB1;\n"
- " posB.w = 0.f;\n"
- " int curPlaneTests=0;\n"
- " int curEdgeEdge = 0;\n"
- " // Test edges\n"
- " for(int e0=0;e0<hullA->m_numUniqueEdges;e0++)\n"
- " {\n"
- " const float4 edge0 = uniqueEdges[hullA->m_uniqueEdgesOffset+e0];\n"
- " float4 edge0World = qtRotate(ornA,edge0);\n"
- " for(int e1=0;e1<hullB->m_numUniqueEdges;e1++)\n"
- " {\n"
- " const float4 edge1 = uniqueEdges[hullB->m_uniqueEdgesOffset+e1];\n"
- " float4 edge1World = qtRotate(ornB,edge1);\n"
- " float4 crossje = cross3(edge0World,edge1World);\n"
- " curEdgeEdge++;\n"
- " if(!IsAlmostZero(crossje))\n"
- " {\n"
- " crossje = normalize3(crossje);\n"
- " if (dot3F4(DeltaC2,crossje)<0)\n"
- " crossje*=-1.f;\n"
- " \n"
- " float dist;\n"
- " bool result = true;\n"
- " {\n"
- " float Min0,Max0;\n"
- " float Min1,Max1;\n"
- " project(hullA,posA,ornA,&crossje,vertices, &Min0, &Max0);\n"
- " project(hullB,posB,ornB,&crossje,vertices, &Min1, &Max1);\n"
- " \n"
- " if(Max0<Min1 || Max1<Min0)\n"
- " return false;\n"
- " \n"
- " float d0 = Max0 - Min1;\n"
- " float d1 = Max1 - Min0;\n"
- " dist = d0<d1 ? d0:d1;\n"
- " result = true;\n"
- " }\n"
- " \n"
- " if(dist<*dmin)\n"
- " {\n"
- " *dmin = dist;\n"
- " *sep = crossje;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " if((dot3F4(-DeltaC2,*sep))>0.0f)\n"
- " {\n"
- " *sep = -(*sep);\n"
- " }\n"
- " return true;\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void processCompoundPairsKernel( __global const int4* gpuCompoundPairs,\n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global btAabbCL* aabbs,\n"
- " __global const btGpuChildShape* gpuChildShapes,\n"
- " __global volatile float4* gpuCompoundSepNormalsOut,\n"
- " __global volatile int* gpuHasCompoundSepNormalsOut,\n"
- " int numCompoundPairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i<numCompoundPairs)\n"
- " {\n"
- " int bodyIndexA = gpuCompoundPairs[i].x;\n"
- " int bodyIndexB = gpuCompoundPairs[i].y;\n"
- " int childShapeIndexA = gpuCompoundPairs[i].z;\n"
- " int childShapeIndexB = gpuCompoundPairs[i].w;\n"
- " \n"
- " int collidableIndexA = -1;\n"
- " int collidableIndexB = -1;\n"
- " \n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " \n"
- " float4 ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " \n"
- " if (childShapeIndexA >= 0)\n"
- " {\n"
- " collidableIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;\n"
- " float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;\n"
- " float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;\n"
- " float4 newPosA = qtRotate(ornA,childPosA)+posA;\n"
- " float4 newOrnA = qtMul(ornA,childOrnA);\n"
- " posA = newPosA;\n"
- " ornA = newOrnA;\n"
- " } else\n"
- " {\n"
- " collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " }\n"
- " \n"
- " if (childShapeIndexB>=0)\n"
- " {\n"
- " collidableIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " } else\n"
- " {\n"
- " collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx; \n"
- " }\n"
- " \n"
- " gpuHasCompoundSepNormalsOut[i] = 0;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " int shapeTypeA = collidables[collidableIndexA].m_shapeType;\n"
- " int shapeTypeB = collidables[collidableIndexB].m_shapeType;\n"
- " \n"
- " if ((shapeTypeA != SHAPE_CONVEX_HULL) || (shapeTypeB != SHAPE_CONVEX_HULL))\n"
- " {\n"
- " return;\n"
- " }\n"
- " int hasSeparatingAxis = 5;\n"
- " \n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " float dmin = FLT_MAX;\n"
- " posA.w = 0.f;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " float4 sepNormal = make_float4(1,0,0,0);\n"
- " bool sepA = findSeparatingAxis( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,posB,ornB,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);\n"
- " hasSeparatingAxis = 4;\n"
- " if (!sepA)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " bool sepB = findSeparatingAxis( &convexShapes[shapeIndexB],&convexShapes[shapeIndexA],posB,ornB,posA,ornA,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);\n"
- " if (!sepB)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else//(!sepB)\n"
- " {\n"
- " bool sepEE = findSeparatingAxisEdgeEdge( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,posB,ornB,DeltaC2,vertices,uniqueEdges,faces,indices,&sepNormal,&dmin);\n"
- " if (sepEE)\n"
- " {\n"
- " gpuCompoundSepNormalsOut[i] = sepNormal;//fastNormalize4(sepNormal);\n"
- " gpuHasCompoundSepNormalsOut[i] = 1;\n"
- " }//sepEE\n"
- " }//(!sepB)\n"
- " }//(!sepA)\n"
- " \n"
- " \n"
- " }\n"
- " \n"
- "}\n"
- "inline b3Float4 MyUnQuantize(const unsigned short* vecIn, b3Float4 quantization, b3Float4 bvhAabbMin)\n"
- "{\n"
- " b3Float4 vecOut;\n"
- " vecOut = b3MakeFloat4(\n"
- " (float)(vecIn[0]) / (quantization.x),\n"
- " (float)(vecIn[1]) / (quantization.y),\n"
- " (float)(vecIn[2]) / (quantization.z),\n"
- " 0.f);\n"
- " vecOut += bvhAabbMin;\n"
- " return vecOut;\n"
- "}\n"
- "inline b3Float4 MyUnQuantizeGlobal(__global const unsigned short* vecIn, b3Float4 quantization, b3Float4 bvhAabbMin)\n"
- "{\n"
- " b3Float4 vecOut;\n"
- " vecOut = b3MakeFloat4(\n"
- " (float)(vecIn[0]) / (quantization.x),\n"
- " (float)(vecIn[1]) / (quantization.y),\n"
- " (float)(vecIn[2]) / (quantization.z),\n"
- " 0.f);\n"
- " vecOut += bvhAabbMin;\n"
- " return vecOut;\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void findCompoundPairsKernel( __global const int4* pairs, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global b3Aabb_t* aabbLocalSpace,\n"
- " __global const btGpuChildShape* gpuChildShapes,\n"
- " __global volatile int4* gpuCompoundPairsOut,\n"
- " __global volatile int* numCompoundPairsOut,\n"
- " __global const b3BvhSubtreeInfo* subtrees,\n"
- " __global const b3QuantizedBvhNode* quantizedNodes,\n"
- " __global const b3BvhInfo* bvhInfos,\n"
- " int numPairs,\n"
- " int maxNumCompoundPairsCapacity\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i<numPairs)\n"
- " {\n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " //once the broadphase avoids static-static pairs, we can remove this test\n"
- " if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))\n"
- " {\n"
- " return;\n"
- " }\n"
- " if ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) &&(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))\n"
- " {\n"
- " int bvhA = collidables[collidableIndexA].m_compoundBvhIndex;\n"
- " int bvhB = collidables[collidableIndexB].m_compoundBvhIndex;\n"
- " int numSubTreesA = bvhInfos[bvhA].m_numSubTrees;\n"
- " int subTreesOffsetA = bvhInfos[bvhA].m_subTreeOffset;\n"
- " int subTreesOffsetB = bvhInfos[bvhB].m_subTreeOffset;\n"
- " int numSubTreesB = bvhInfos[bvhB].m_numSubTrees;\n"
- " \n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " b3Quat ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " b3Quat ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " \n"
- " for (int p=0;p<numSubTreesA;p++)\n"
- " {\n"
- " b3BvhSubtreeInfo subtreeA = subtrees[subTreesOffsetA+p];\n"
- " //bvhInfos[bvhA].m_quantization\n"
- " b3Float4 treeAminLocal = MyUnQuantize(subtreeA.m_quantizedAabbMin,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);\n"
- " b3Float4 treeAmaxLocal = MyUnQuantize(subtreeA.m_quantizedAabbMax,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);\n"
- " b3Float4 aabbAMinOut,aabbAMaxOut;\n"
- " float margin=0.f;\n"
- " b3TransformAabb2(treeAminLocal,treeAmaxLocal, margin,posA,ornA,&aabbAMinOut,&aabbAMaxOut);\n"
- " \n"
- " for (int q=0;q<numSubTreesB;q++)\n"
- " {\n"
- " b3BvhSubtreeInfo subtreeB = subtrees[subTreesOffsetB+q];\n"
- " b3Float4 treeBminLocal = MyUnQuantize(subtreeB.m_quantizedAabbMin,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);\n"
- " b3Float4 treeBmaxLocal = MyUnQuantize(subtreeB.m_quantizedAabbMax,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);\n"
- " b3Float4 aabbBMinOut,aabbBMaxOut;\n"
- " float margin=0.f;\n"
- " b3TransformAabb2(treeBminLocal,treeBmaxLocal, margin,posB,ornB,&aabbBMinOut,&aabbBMaxOut);\n"
- " \n"
- " \n"
- " bool aabbOverlap = b3TestAabbAgainstAabb(aabbAMinOut,aabbAMaxOut,aabbBMinOut,aabbBMaxOut);\n"
- " if (aabbOverlap)\n"
- " {\n"
- " \n"
- " int startNodeIndexA = subtreeA.m_rootNodeIndex+bvhInfos[bvhA].m_nodeOffset;\n"
- " int endNodeIndexA = startNodeIndexA+subtreeA.m_subtreeSize;\n"
- " int startNodeIndexB = subtreeB.m_rootNodeIndex+bvhInfos[bvhB].m_nodeOffset;\n"
- " int endNodeIndexB = startNodeIndexB+subtreeB.m_subtreeSize;\n"
- " b3Int2 nodeStack[B3_MAX_STACK_DEPTH];\n"
- " b3Int2 node0;\n"
- " node0.x = startNodeIndexA;\n"
- " node0.y = startNodeIndexB;\n"
- " int maxStackDepth = B3_MAX_STACK_DEPTH;\n"
- " int depth=0;\n"
- " nodeStack[depth++]=node0;\n"
- " do\n"
- " {\n"
- " b3Int2 node = nodeStack[--depth];\n"
- " b3Float4 aMinLocal = MyUnQuantizeGlobal(quantizedNodes[node.x].m_quantizedAabbMin,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);\n"
- " b3Float4 aMaxLocal = MyUnQuantizeGlobal(quantizedNodes[node.x].m_quantizedAabbMax,bvhInfos[bvhA].m_quantization,bvhInfos[bvhA].m_aabbMin);\n"
- " b3Float4 bMinLocal = MyUnQuantizeGlobal(quantizedNodes[node.y].m_quantizedAabbMin,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);\n"
- " b3Float4 bMaxLocal = MyUnQuantizeGlobal(quantizedNodes[node.y].m_quantizedAabbMax,bvhInfos[bvhB].m_quantization,bvhInfos[bvhB].m_aabbMin);\n"
- " float margin=0.f;\n"
- " b3Float4 aabbAMinOut,aabbAMaxOut;\n"
- " b3TransformAabb2(aMinLocal,aMaxLocal, margin,posA,ornA,&aabbAMinOut,&aabbAMaxOut);\n"
- " b3Float4 aabbBMinOut,aabbBMaxOut;\n"
- " b3TransformAabb2(bMinLocal,bMaxLocal, margin,posB,ornB,&aabbBMinOut,&aabbBMaxOut);\n"
- " \n"
- " bool nodeOverlap = b3TestAabbAgainstAabb(aabbAMinOut,aabbAMaxOut,aabbBMinOut,aabbBMaxOut);\n"
- " if (nodeOverlap)\n"
- " {\n"
- " bool isLeafA = isLeafNodeGlobal(&quantizedNodes[node.x]);\n"
- " bool isLeafB = isLeafNodeGlobal(&quantizedNodes[node.y]);\n"
- " bool isInternalA = !isLeafA;\n"
- " bool isInternalB = !isLeafB;\n"
- " //fail, even though it might hit two leaf nodes\n"
- " if (depth+4>maxStackDepth && !(isLeafA && isLeafB))\n"
- " {\n"
- " //printf(\"Error: traversal exceeded maxStackDepth\");\n"
- " continue;\n"
- " }\n"
- " if(isInternalA)\n"
- " {\n"
- " int nodeAleftChild = node.x+1;\n"
- " bool isNodeALeftChildLeaf = isLeafNodeGlobal(&quantizedNodes[node.x+1]);\n"
- " int nodeArightChild = isNodeALeftChildLeaf? node.x+2 : node.x+1 + getEscapeIndexGlobal(&quantizedNodes[node.x+1]);\n"
- " if(isInternalB)\n"
- " { \n"
- " int nodeBleftChild = node.y+1;\n"
- " bool isNodeBLeftChildLeaf = isLeafNodeGlobal(&quantizedNodes[node.y+1]);\n"
- " int nodeBrightChild = isNodeBLeftChildLeaf? node.y+2 : node.y+1 + getEscapeIndexGlobal(&quantizedNodes[node.y+1]);\n"
- " nodeStack[depth++] = b3MakeInt2(nodeAleftChild, nodeBleftChild);\n"
- " nodeStack[depth++] = b3MakeInt2(nodeArightChild, nodeBleftChild);\n"
- " nodeStack[depth++] = b3MakeInt2(nodeAleftChild, nodeBrightChild);\n"
- " nodeStack[depth++] = b3MakeInt2(nodeArightChild, nodeBrightChild);\n"
- " }\n"
- " else\n"
- " {\n"
- " nodeStack[depth++] = b3MakeInt2(nodeAleftChild,node.y);\n"
- " nodeStack[depth++] = b3MakeInt2(nodeArightChild,node.y);\n"
- " }\n"
- " }\n"
- " else\n"
- " {\n"
- " if(isInternalB)\n"
- " {\n"
- " int nodeBleftChild = node.y+1;\n"
- " bool isNodeBLeftChildLeaf = isLeafNodeGlobal(&quantizedNodes[node.y+1]);\n"
- " int nodeBrightChild = isNodeBLeftChildLeaf? node.y+2 : node.y+1 + getEscapeIndexGlobal(&quantizedNodes[node.y+1]);\n"
- " nodeStack[depth++] = b3MakeInt2(node.x,nodeBleftChild);\n"
- " nodeStack[depth++] = b3MakeInt2(node.x,nodeBrightChild);\n"
- " }\n"
- " else\n"
- " {\n"
- " int compoundPairIdx = atomic_inc(numCompoundPairsOut);\n"
- " if (compoundPairIdx<maxNumCompoundPairsCapacity)\n"
- " {\n"
- " int childShapeIndexA = getTriangleIndexGlobal(&quantizedNodes[node.x]);\n"
- " int childShapeIndexB = getTriangleIndexGlobal(&quantizedNodes[node.y]);\n"
- " gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,childShapeIndexA,childShapeIndexB);\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " } while (depth);\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " return;\n"
- " }\n"
- " if ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) ||(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))\n"
- " {\n"
- " if (collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) \n"
- " {\n"
- " int numChildrenA = collidables[collidableIndexA].m_numChildShapes;\n"
- " for (int c=0;c<numChildrenA;c++)\n"
- " {\n"
- " int childShapeIndexA = collidables[collidableIndexA].m_shapeIndex+c;\n"
- " int childColIndexA = gpuChildShapes[childShapeIndexA].m_shapeIndex;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 childPosA = gpuChildShapes[childShapeIndexA].m_childPosition;\n"
- " float4 childOrnA = gpuChildShapes[childShapeIndexA].m_childOrientation;\n"
- " float4 newPosA = qtRotate(ornA,childPosA)+posA;\n"
- " float4 newOrnA = qtMul(ornA,childOrnA);\n"
- " int shapeIndexA = collidables[childColIndexA].m_shapeIndex;\n"
- " b3Aabb_t aabbAlocal = aabbLocalSpace[shapeIndexA];\n"
- " float margin = 0.f;\n"
- " \n"
- " b3Float4 aabbAMinWS;\n"
- " b3Float4 aabbAMaxWS;\n"
- " \n"
- " b3TransformAabb2(aabbAlocal.m_minVec,aabbAlocal.m_maxVec,margin,\n"
- " newPosA,\n"
- " newOrnA,\n"
- " &aabbAMinWS,&aabbAMaxWS);\n"
- " \n"
- " \n"
- " if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " int numChildrenB = collidables[collidableIndexB].m_numChildShapes;\n"
- " for (int b=0;b<numChildrenB;b++)\n"
- " {\n"
- " int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+b;\n"
- " int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " int shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
- " b3Aabb_t aabbBlocal = aabbLocalSpace[shapeIndexB];\n"
- " \n"
- " b3Float4 aabbBMinWS;\n"
- " b3Float4 aabbBMaxWS;\n"
- " \n"
- " b3TransformAabb2(aabbBlocal.m_minVec,aabbBlocal.m_maxVec,margin,\n"
- " newPosB,\n"
- " newOrnB,\n"
- " &aabbBMinWS,&aabbBMaxWS);\n"
- " \n"
- " \n"
- " \n"
- " bool aabbOverlap = b3TestAabbAgainstAabb(aabbAMinWS,aabbAMaxWS,aabbBMinWS,aabbBMaxWS);\n"
- " if (aabbOverlap)\n"
- " {\n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " float dmin = FLT_MAX;\n"
- " float4 posA = newPosA;\n"
- " posA.w = 0.f;\n"
- " float4 posB = newPosB;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = newOrnA;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB =newOrnB;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " {//\n"
- " int compoundPairIdx = atomic_inc(numCompoundPairsOut);\n"
- " if (compoundPairIdx<maxNumCompoundPairsCapacity)\n"
- " {\n"
- " gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,childShapeIndexA,childShapeIndexB);\n"
- " }\n"
- " }//\n"
- " }//fi(1)\n"
- " } //for (int b=0\n"
- " }//if (collidables[collidableIndexB].\n"
- " else//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " if (1)\n"
- " {\n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " float dmin = FLT_MAX;\n"
- " float4 posA = newPosA;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = newOrnA;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " {\n"
- " int compoundPairIdx = atomic_inc(numCompoundPairsOut);\n"
- " if (compoundPairIdx<maxNumCompoundPairsCapacity)\n"
- " {\n"
- " gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,childShapeIndexA,-1);\n"
- " }//if (compoundPairIdx<maxNumCompoundPairsCapacity)\n"
- " }//\n"
- " }//fi (1)\n"
- " }//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " }//for (int b=0;b<numChildrenB;b++) \n"
- " return;\n"
- " }//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONCAVE_TRIMESH) \n"
- " && (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))\n"
- " {\n"
- " int numChildrenB = collidables[collidableIndexB].m_numChildShapes;\n"
- " for (int b=0;b<numChildrenB;b++)\n"
- " {\n"
- " int childShapeIndexB = collidables[collidableIndexB].m_shapeIndex+b;\n"
- " int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 ornB = rigidBodies[bodyIndexB].m_quat;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = qtRotate(ornB,childPosB)+posB;\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " int shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
- " //////////////////////////////////////\n"
- " if (1)\n"
- " {\n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " float dmin = FLT_MAX;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = newPosB;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB =newOrnB;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " {//\n"
- " int compoundPairIdx = atomic_inc(numCompoundPairsOut);\n"
- " if (compoundPairIdx<maxNumCompoundPairsCapacity)\n"
- " {\n"
- " gpuCompoundPairsOut[compoundPairIdx] = (int4)(bodyIndexA,bodyIndexB,-1,childShapeIndexB);\n"
- " }//fi (compoundPairIdx<maxNumCompoundPairsCapacity)\n"
- " }//\n"
- " }//fi (1) \n"
- " }//for (int b=0;b<numChildrenB;b++)\n"
- " return;\n"
- " }//if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " return;\n"
- " }//fi ((collidables[collidableIndexA].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS) ||(collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS))\n"
- " }//i<numPairs\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void findSeparatingAxisKernel( __global const int4* pairs, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global btAabbCL* aabbs,\n"
- " __global volatile float4* separatingNormals,\n"
- " __global volatile int* hasSeparatingAxis,\n"
- " int numPairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " \n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " //once the broadphase avoids static-static pairs, we can remove this test\n"
- " if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " return;\n"
- " }\n"
- " \n"
- " if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONVEX_HULL) ||(collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL))\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " return;\n"
- " }\n"
- " \n"
- " if ((collidables[collidableIndexA].m_shapeType==SHAPE_CONCAVE_TRIMESH))\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " return;\n"
- " }\n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " float dmin = FLT_MAX;\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " float4 sepNormal;\n"
- " \n"
- " bool sepA = findSeparatingAxis( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,\n"
- " indices,&sepNormal,&dmin);\n"
- " hasSeparatingAxis[i] = 4;\n"
- " if (!sepA)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " bool sepB = findSeparatingAxis( &convexShapes[shapeIndexB],&convexShapes[shapeIndexA],posB,ornB,\n"
- " posA,ornA,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,\n"
- " indices,&sepNormal,&dmin);\n"
- " if (!sepB)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " bool sepEE = findSeparatingAxisEdgeEdge( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,\n"
- " indices,&sepNormal,&dmin);\n"
- " if (!sepEE)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis[i] = 1;\n"
- " separatingNormals[i] = sepNormal;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " }\n"
- "}\n"
- "__kernel void findSeparatingAxisVertexFaceKernel( __global const int4* pairs, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global btAabbCL* aabbs,\n"
- " __global volatile float4* separatingNormals,\n"
- " __global volatile int* hasSeparatingAxis,\n"
- " __global float* dmins,\n"
- " int numPairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " \n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " hasSeparatingAxis[i] = 0; \n"
- " \n"
- " //once the broadphase avoids static-static pairs, we can remove this test\n"
- " if ((rigidBodies[bodyIndexA].m_invMass==0) &&(rigidBodies[bodyIndexB].m_invMass==0))\n"
- " {\n"
- " return;\n"
- " }\n"
- " \n"
- " if ((collidables[collidableIndexA].m_shapeType!=SHAPE_CONVEX_HULL) ||(collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL))\n"
- " {\n"
- " return;\n"
- " }\n"
- " \n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " float dmin = FLT_MAX;\n"
- " dmins[i] = dmin;\n"
- " \n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " float4 sepNormal;\n"
- " \n"
- " bool sepA = findSeparatingAxis( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,\n"
- " indices,&sepNormal,&dmin);\n"
- " hasSeparatingAxis[i] = 4;\n"
- " if (!sepA)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " bool sepB = findSeparatingAxis( &convexShapes[shapeIndexB],&convexShapes[shapeIndexA],posB,ornB,\n"
- " posA,ornA,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,\n"
- " indices,&sepNormal,&dmin);\n"
- " if (sepB)\n"
- " {\n"
- " dmins[i] = dmin;\n"
- " hasSeparatingAxis[i] = 1;\n"
- " separatingNormals[i] = sepNormal;\n"
- " }\n"
- " }\n"
- " \n"
- " }\n"
- "}\n"
- "__kernel void findSeparatingAxisEdgeEdgeKernel( __global const int4* pairs, \n"
- " __global const BodyData* rigidBodies, \n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global btAabbCL* aabbs,\n"
- " __global float4* separatingNormals,\n"
- " __global int* hasSeparatingAxis,\n"
- " __global float* dmins,\n"
- " __global const float4* unitSphereDirections,\n"
- " int numUnitSphereDirections,\n"
- " int numPairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " \n"
- " if (i<numPairs)\n"
- " {\n"
- " if (hasSeparatingAxis[i])\n"
- " {\n"
- " \n"
- " int bodyIndexA = pairs[i].x;\n"
- " int bodyIndexB = pairs[i].y;\n"
- " \n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " \n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " \n"
- " \n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " \n"
- " float dmin = dmins[i];\n"
- " \n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 c0local = convexShapes[shapeIndexA].m_localCenter;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " float4 sepNormal = separatingNormals[i];\n"
- " \n"
- " \n"
- " \n"
- " bool sepEE = false;\n"
- " int numEdgeEdgeDirections = convexShapes[shapeIndexA].m_numUniqueEdges*convexShapes[shapeIndexB].m_numUniqueEdges;\n"
- " if (numEdgeEdgeDirections<=numUnitSphereDirections)\n"
- " {\n"
- " sepEE = findSeparatingAxisEdgeEdge( &convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,\n"
- " indices,&sepNormal,&dmin);\n"
- " \n"
- " if (!sepEE)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis[i] = 1;\n"
- " separatingNormals[i] = sepNormal;\n"
- " }\n"
- " }\n"
- " /*\n"
- " ///else case is a separate kernel, to make Mac OSX OpenCL compiler happy\n"
- " else\n"
- " {\n"
- " sepEE = findSeparatingAxisUnitSphere(&convexShapes[shapeIndexA], &convexShapes[shapeIndexB],posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " vertices,unitSphereDirections,numUnitSphereDirections,\n"
- " &sepNormal,&dmin);\n"
- " if (!sepEE)\n"
- " {\n"
- " hasSeparatingAxis[i] = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis[i] = 1;\n"
- " separatingNormals[i] = sepNormal;\n"
- " }\n"
- " }\n"
- " */\n"
- " } //if (hasSeparatingAxis[i])\n"
- " }//(i<numPairs)\n"
- "}\n"
- "inline int findClippingFaces(const float4 separatingNormal,\n"
- " const ConvexPolyhedronCL* hullA, \n"
- " __global const ConvexPolyhedronCL* hullB,\n"
- " const float4 posA, const Quaternion ornA,const float4 posB, const Quaternion ornB,\n"
- " __global float4* worldVertsA1,\n"
- " __global float4* worldNormalsA1,\n"
- " __global float4* worldVertsB1,\n"
- " int capacityWorldVerts,\n"
- " const float minDist, float maxDist,\n"
- " const float4* verticesA,\n"
- " const btGpuFace* facesA,\n"
- " const int* indicesA,\n"
- " __global const float4* verticesB,\n"
- " __global const btGpuFace* facesB,\n"
- " __global const int* indicesB,\n"
- " __global int4* clippingFaces, int pairIndex)\n"
- "{\n"
- " int numContactsOut = 0;\n"
- " int numWorldVertsB1= 0;\n"
- " \n"
- " \n"
- " int closestFaceB=0;\n"
- " float dmax = -FLT_MAX;\n"
- " \n"
- " {\n"
- " for(int face=0;face<hullB->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(facesB[hullB->m_faceOffset+face].m_plane.x,\n"
- " facesB[hullB->m_faceOffset+face].m_plane.y, facesB[hullB->m_faceOffset+face].m_plane.z,0.f);\n"
- " const float4 WorldNormal = qtRotate(ornB, Normal);\n"
- " float d = dot3F4(WorldNormal,separatingNormal);\n"
- " if (d > dmax)\n"
- " {\n"
- " dmax = d;\n"
- " closestFaceB = face;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " {\n"
- " const btGpuFace polyB = facesB[hullB->m_faceOffset+closestFaceB];\n"
- " int numVertices = polyB.m_numIndices;\n"
- " if (numVertices>capacityWorldVerts)\n"
- " numVertices = capacityWorldVerts;\n"
- " \n"
- " for(int e0=0;e0<numVertices;e0++)\n"
- " {\n"
- " if (e0<capacityWorldVerts)\n"
- " {\n"
- " const float4 b = verticesB[hullB->m_vertexOffset+indicesB[polyB.m_indexOffset+e0]];\n"
- " worldVertsB1[pairIndex*capacityWorldVerts+numWorldVertsB1++] = transform(&b,&posB,&ornB);\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " int closestFaceA=0;\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " for(int face=0;face<hullA->m_numFaces;face++)\n"
- " {\n"
- " const float4 Normal = make_float4(\n"
- " facesA[hullA->m_faceOffset+face].m_plane.x,\n"
- " facesA[hullA->m_faceOffset+face].m_plane.y,\n"
- " facesA[hullA->m_faceOffset+face].m_plane.z,\n"
- " 0.f);\n"
- " const float4 faceANormalWS = qtRotate(ornA,Normal);\n"
- " \n"
- " float d = dot3F4(faceANormalWS,separatingNormal);\n"
- " if (d < dmin)\n"
- " {\n"
- " dmin = d;\n"
- " closestFaceA = face;\n"
- " worldNormalsA1[pairIndex] = faceANormalWS;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " int numVerticesA = facesA[hullA->m_faceOffset+closestFaceA].m_numIndices;\n"
- " if (numVerticesA>capacityWorldVerts)\n"
- " numVerticesA = capacityWorldVerts;\n"
- " \n"
- " for(int e0=0;e0<numVerticesA;e0++)\n"
- " {\n"
- " if (e0<capacityWorldVerts)\n"
- " {\n"
- " const float4 a = verticesA[hullA->m_vertexOffset+indicesA[facesA[hullA->m_faceOffset+closestFaceA].m_indexOffset+e0]];\n"
- " worldVertsA1[pairIndex*capacityWorldVerts+e0] = transform(&a, &posA,&ornA);\n"
- " }\n"
- " }\n"
- " \n"
- " clippingFaces[pairIndex].x = closestFaceA;\n"
- " clippingFaces[pairIndex].y = closestFaceB;\n"
- " clippingFaces[pairIndex].z = numVerticesA;\n"
- " clippingFaces[pairIndex].w = numWorldVertsB1;\n"
- " \n"
- " \n"
- " return numContactsOut;\n"
- "}\n"
- "// work-in-progress\n"
- "__kernel void findConcaveSeparatingAxisKernel( __global int4* concavePairs,\n"
- " __global const BodyData* rigidBodies,\n"
- " __global const btCollidableGpu* collidables,\n"
- " __global const ConvexPolyhedronCL* convexShapes, \n"
- " __global const float4* vertices,\n"
- " __global const float4* uniqueEdges,\n"
- " __global const btGpuFace* faces,\n"
- " __global const int* indices,\n"
- " __global const btGpuChildShape* gpuChildShapes,\n"
- " __global btAabbCL* aabbs,\n"
- " __global float4* concaveSeparatingNormalsOut,\n"
- " __global int* concaveHasSeparatingNormals,\n"
- " __global int4* clippingFacesOut,\n"
- " __global float4* worldVertsA1GPU,\n"
- " __global float4* worldNormalsAGPU,\n"
- " __global float4* worldVertsB1GPU,\n"
- " int vertexFaceCapacity,\n"
- " int numConcavePairs\n"
- " )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numConcavePairs)\n"
- " return;\n"
- " concaveHasSeparatingNormals[i] = 0;\n"
- " int pairIdx = i;\n"
- " int bodyIndexA = concavePairs[i].x;\n"
- " int bodyIndexB = concavePairs[i].y;\n"
- " int collidableIndexA = rigidBodies[bodyIndexA].m_collidableIdx;\n"
- " int collidableIndexB = rigidBodies[bodyIndexB].m_collidableIdx;\n"
- " int shapeIndexA = collidables[collidableIndexA].m_shapeIndex;\n"
- " int shapeIndexB = collidables[collidableIndexB].m_shapeIndex;\n"
- " if (collidables[collidableIndexB].m_shapeType!=SHAPE_CONVEX_HULL&&\n"
- " collidables[collidableIndexB].m_shapeType!=SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " concavePairs[pairIdx].w = -1;\n"
- " return;\n"
- " }\n"
- " int numFacesA = convexShapes[shapeIndexA].m_numFaces;\n"
- " int numActualConcaveConvexTests = 0;\n"
- " \n"
- " int f = concavePairs[i].z;\n"
- " \n"
- " bool overlap = false;\n"
- " \n"
- " ConvexPolyhedronCL convexPolyhedronA;\n"
- " //add 3 vertices of the triangle\n"
- " convexPolyhedronA.m_numVertices = 3;\n"
- " convexPolyhedronA.m_vertexOffset = 0;\n"
- " float4 localCenter = make_float4(0.f,0.f,0.f,0.f);\n"
- " btGpuFace face = faces[convexShapes[shapeIndexA].m_faceOffset+f];\n"
- " float4 triMinAabb, triMaxAabb;\n"
- " btAabbCL triAabb;\n"
- " triAabb.m_min = make_float4(1e30f,1e30f,1e30f,0.f);\n"
- " triAabb.m_max = make_float4(-1e30f,-1e30f,-1e30f,0.f);\n"
- " \n"
- " float4 verticesA[3];\n"
- " for (int i=0;i<3;i++)\n"
- " {\n"
- " int index = indices[face.m_indexOffset+i];\n"
- " float4 vert = vertices[convexShapes[shapeIndexA].m_vertexOffset+index];\n"
- " verticesA[i] = vert;\n"
- " localCenter += vert;\n"
- " \n"
- " triAabb.m_min = min(triAabb.m_min,vert); \n"
- " triAabb.m_max = max(triAabb.m_max,vert); \n"
- " }\n"
- " overlap = true;\n"
- " overlap = (triAabb.m_min.x > aabbs[bodyIndexB].m_max.x || triAabb.m_max.x < aabbs[bodyIndexB].m_min.x) ? false : overlap;\n"
- " overlap = (triAabb.m_min.z > aabbs[bodyIndexB].m_max.z || triAabb.m_max.z < aabbs[bodyIndexB].m_min.z) ? false : overlap;\n"
- " overlap = (triAabb.m_min.y > aabbs[bodyIndexB].m_max.y || triAabb.m_max.y < aabbs[bodyIndexB].m_min.y) ? false : overlap;\n"
- " \n"
- " if (overlap)\n"
- " {\n"
- " float dmin = FLT_MAX;\n"
- " int hasSeparatingAxis=5;\n"
- " float4 sepAxis=make_float4(1,2,3,4);\n"
- " int localCC=0;\n"
- " numActualConcaveConvexTests++;\n"
- " //a triangle has 3 unique edges\n"
- " convexPolyhedronA.m_numUniqueEdges = 3;\n"
- " convexPolyhedronA.m_uniqueEdgesOffset = 0;\n"
- " float4 uniqueEdgesA[3];\n"
- " \n"
- " uniqueEdgesA[0] = (verticesA[1]-verticesA[0]);\n"
- " uniqueEdgesA[1] = (verticesA[2]-verticesA[1]);\n"
- " uniqueEdgesA[2] = (verticesA[0]-verticesA[2]);\n"
- " convexPolyhedronA.m_faceOffset = 0;\n"
- " \n"
- " float4 normal = make_float4(face.m_plane.x,face.m_plane.y,face.m_plane.z,0.f);\n"
- " \n"
- " btGpuFace facesA[TRIANGLE_NUM_CONVEX_FACES];\n"
- " int indicesA[3+3+2+2+2];\n"
- " int curUsedIndices=0;\n"
- " int fidx=0;\n"
- " //front size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[0] = 0;\n"
- " indicesA[1] = 1;\n"
- " indicesA[2] = 2;\n"
- " curUsedIndices+=3;\n"
- " float c = face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = normal.x;\n"
- " facesA[fidx].m_plane.y = normal.y;\n"
- " facesA[fidx].m_plane.z = normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " //back size of triangle\n"
- " {\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[3]=2;\n"
- " indicesA[4]=1;\n"
- " indicesA[5]=0;\n"
- " curUsedIndices+=3;\n"
- " float c = dot(normal,verticesA[0]);\n"
- " float c1 = -face.m_plane.w;\n"
- " facesA[fidx].m_plane.x = -normal.x;\n"
- " facesA[fidx].m_plane.y = -normal.y;\n"
- " facesA[fidx].m_plane.z = -normal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " facesA[fidx].m_numIndices=3;\n"
- " }\n"
- " fidx++;\n"
- " bool addEdgePlanes = true;\n"
- " if (addEdgePlanes)\n"
- " {\n"
- " int numVertices=3;\n"
- " int prevVertex = numVertices-1;\n"
- " for (int i=0;i<numVertices;i++)\n"
- " {\n"
- " float4 v0 = verticesA[i];\n"
- " float4 v1 = verticesA[prevVertex];\n"
- " \n"
- " float4 edgeNormal = normalize(cross(normal,v1-v0));\n"
- " float c = -dot(edgeNormal,v0);\n"
- " facesA[fidx].m_numIndices = 2;\n"
- " facesA[fidx].m_indexOffset=curUsedIndices;\n"
- " indicesA[curUsedIndices++]=i;\n"
- " indicesA[curUsedIndices++]=prevVertex;\n"
- " \n"
- " facesA[fidx].m_plane.x = edgeNormal.x;\n"
- " facesA[fidx].m_plane.y = edgeNormal.y;\n"
- " facesA[fidx].m_plane.z = edgeNormal.z;\n"
- " facesA[fidx].m_plane.w = c;\n"
- " fidx++;\n"
- " prevVertex = i;\n"
- " }\n"
- " }\n"
- " convexPolyhedronA.m_numFaces = TRIANGLE_NUM_CONVEX_FACES;\n"
- " convexPolyhedronA.m_localCenter = localCenter*(1.f/3.f);\n"
- " float4 posA = rigidBodies[bodyIndexA].m_pos;\n"
- " posA.w = 0.f;\n"
- " float4 posB = rigidBodies[bodyIndexB].m_pos;\n"
- " posB.w = 0.f;\n"
- " float4 ornA = rigidBodies[bodyIndexA].m_quat;\n"
- " float4 ornB =rigidBodies[bodyIndexB].m_quat;\n"
- " \n"
- " ///////////////////\n"
- " ///compound shape support\n"
- " if (collidables[collidableIndexB].m_shapeType==SHAPE_COMPOUND_OF_CONVEX_HULLS)\n"
- " {\n"
- " int compoundChild = concavePairs[pairIdx].w;\n"
- " int childShapeIndexB = compoundChild;//collidables[collidableIndexB].m_shapeIndex+compoundChild;\n"
- " int childColIndexB = gpuChildShapes[childShapeIndexB].m_shapeIndex;\n"
- " float4 childPosB = gpuChildShapes[childShapeIndexB].m_childPosition;\n"
- " float4 childOrnB = gpuChildShapes[childShapeIndexB].m_childOrientation;\n"
- " float4 newPosB = transform(&childPosB,&posB,&ornB);\n"
- " float4 newOrnB = qtMul(ornB,childOrnB);\n"
- " posB = newPosB;\n"
- " ornB = newOrnB;\n"
- " shapeIndexB = collidables[childColIndexB].m_shapeIndex;\n"
- " }\n"
- " //////////////////\n"
- " float4 c0local = convexPolyhedronA.m_localCenter;\n"
- " float4 c0 = transform(&c0local, &posA, &ornA);\n"
- " float4 c1local = convexShapes[shapeIndexB].m_localCenter;\n"
- " float4 c1 = transform(&c1local,&posB,&ornB);\n"
- " const float4 DeltaC2 = c0 - c1;\n"
- " bool sepA = findSeparatingAxisLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " verticesA,uniqueEdgesA,facesA,indicesA,\n"
- " vertices,uniqueEdges,faces,indices,\n"
- " &sepAxis,&dmin);\n"
- " hasSeparatingAxis = 4;\n"
- " if (!sepA)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " bool sepB = findSeparatingAxisLocalB( &convexShapes[shapeIndexB],&convexPolyhedronA,\n"
- " posB,ornB,\n"
- " posA,ornA,\n"
- " DeltaC2,\n"
- " vertices,uniqueEdges,faces,indices,\n"
- " verticesA,uniqueEdgesA,facesA,indicesA,\n"
- " &sepAxis,&dmin);\n"
- " if (!sepB)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " bool sepEE = findSeparatingAxisEdgeEdgeLocalA( &convexPolyhedronA, &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " DeltaC2,\n"
- " verticesA,uniqueEdgesA,facesA,indicesA,\n"
- " vertices,uniqueEdges,faces,indices,\n"
- " &sepAxis,&dmin);\n"
- " \n"
- " if (!sepEE)\n"
- " {\n"
- " hasSeparatingAxis = 0;\n"
- " } else\n"
- " {\n"
- " hasSeparatingAxis = 1;\n"
- " }\n"
- " }\n"
- " } \n"
- " \n"
- " if (hasSeparatingAxis)\n"
- " {\n"
- " sepAxis.w = dmin;\n"
- " concaveSeparatingNormalsOut[pairIdx]=sepAxis;\n"
- " concaveHasSeparatingNormals[i]=1;\n"
- " float minDist = -1e30f;\n"
- " float maxDist = 0.02f;\n"
- " \n"
- " findClippingFaces(sepAxis,\n"
- " &convexPolyhedronA,\n"
- " &convexShapes[shapeIndexB],\n"
- " posA,ornA,\n"
- " posB,ornB,\n"
- " worldVertsA1GPU,\n"
- " worldNormalsAGPU,\n"
- " worldVertsB1GPU,\n"
- " vertexFaceCapacity,\n"
- " minDist, maxDist,\n"
- " verticesA,\n"
- " facesA,\n"
- " indicesA,\n"
- " vertices,\n"
- " faces,\n"
- " indices,\n"
- " clippingFacesOut, pairIdx);\n"
- " } else\n"
- " { \n"
- " //mark this pair as in-active\n"
- " concavePairs[pairIdx].w = -1;\n"
- " }\n"
- " }\n"
- " else\n"
- " { \n"
- " //mark this pair as in-active\n"
- " concavePairs[pairIdx].w = -1;\n"
- " }\n"
- " \n"
- " concavePairs[pairIdx].z = -1;//now z is used for existing/persistent contacts\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.cpp b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.cpp
deleted file mode 100644
index c0e11bfb26..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-//Host-code rewritten by Erwin Coumans
-
-#define BOUNDSEARCH_PATH "src/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernels.cl"
-#define KERNEL0 "SearchSortDataLowerKernel"
-#define KERNEL1 "SearchSortDataUpperKernel"
-#define KERNEL2 "SubtractKernel"
-
-#include "b3BoundSearchCL.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "b3LauncherCL.h"
-#include "kernels/BoundSearchKernelsCL.h"
-
-b3BoundSearchCL::b3BoundSearchCL(cl_context ctx, cl_device_id device, cl_command_queue queue, int maxSize)
- : m_context(ctx),
- m_device(device),
- m_queue(queue)
-{
- const char* additionalMacros = "";
- //const char* srcFileNameForCaching="";
-
- cl_int pErrNum;
- const char* kernelSource = boundSearchKernelsCL;
-
- cl_program boundSearchProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, kernelSource, &pErrNum, additionalMacros, BOUNDSEARCH_PATH);
- b3Assert(boundSearchProg);
-
- m_lowerSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SearchSortDataLowerKernel", &pErrNum, boundSearchProg, additionalMacros);
- b3Assert(m_lowerSortDataKernel);
-
- m_upperSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SearchSortDataUpperKernel", &pErrNum, boundSearchProg, additionalMacros);
- b3Assert(m_upperSortDataKernel);
-
- m_subtractKernel = 0;
-
- if (maxSize)
- {
- m_subtractKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SubtractKernel", &pErrNum, boundSearchProg, additionalMacros);
- b3Assert(m_subtractKernel);
- }
-
- //m_constBuffer = new b3OpenCLArray<b3Int4>( device, 1, BufferBase::BUFFER_CONST );
-
- m_lower = (maxSize == 0) ? 0 : new b3OpenCLArray<unsigned int>(ctx, queue, maxSize);
- m_upper = (maxSize == 0) ? 0 : new b3OpenCLArray<unsigned int>(ctx, queue, maxSize);
-
- m_filler = new b3FillCL(ctx, device, queue);
-}
-
-b3BoundSearchCL::~b3BoundSearchCL()
-{
- delete m_lower;
- delete m_upper;
- delete m_filler;
-
- clReleaseKernel(m_lowerSortDataKernel);
- clReleaseKernel(m_upperSortDataKernel);
- clReleaseKernel(m_subtractKernel);
-}
-
-void b3BoundSearchCL::execute(b3OpenCLArray<b3SortData>& src, int nSrc, b3OpenCLArray<unsigned int>& dst, int nDst, Option option)
-{
- b3Int4 constBuffer;
- constBuffer.x = nSrc;
- constBuffer.y = nDst;
-
- if (option == BOUND_LOWER)
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src.getBufferCL(), true), b3BufferInfoCL(dst.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_lowerSortDataKernel, "m_lowerSortDataKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nSrc);
- launcher.setConst(nDst);
-
- launcher.launch1D(nSrc, 64);
- }
- else if (option == BOUND_UPPER)
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src.getBufferCL(), true), b3BufferInfoCL(dst.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_upperSortDataKernel, "m_upperSortDataKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nSrc);
- launcher.setConst(nDst);
-
- launcher.launch1D(nSrc, 64);
- }
- else if (option == COUNT)
- {
- b3Assert(m_lower);
- b3Assert(m_upper);
- b3Assert(m_lower->capacity() <= (int)nDst);
- b3Assert(m_upper->capacity() <= (int)nDst);
-
- int zero = 0;
- m_filler->execute(*m_lower, zero, nDst);
- m_filler->execute(*m_upper, zero, nDst);
-
- execute(src, nSrc, *m_lower, nDst, BOUND_LOWER);
- execute(src, nSrc, *m_upper, nDst, BOUND_UPPER);
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(m_upper->getBufferCL(), true), b3BufferInfoCL(m_lower->getBufferCL(), true), b3BufferInfoCL(dst.getBufferCL())};
-
- b3LauncherCL launcher(m_queue, m_subtractKernel, "m_subtractKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(nSrc);
- launcher.setConst(nDst);
-
- launcher.launch1D(nDst, 64);
- }
- }
- else
- {
- b3Assert(0);
- }
-}
-
-void b3BoundSearchCL::executeHost(b3AlignedObjectArray<b3SortData>& src, int nSrc,
- b3AlignedObjectArray<unsigned int>& dst, int nDst, Option option)
-{
- for (int i = 0; i < nSrc - 1; i++)
- b3Assert(src[i].m_key <= src[i + 1].m_key);
-
- b3SortData minData, zeroData, maxData;
- minData.m_key = -1;
- minData.m_value = -1;
- zeroData.m_key = 0;
- zeroData.m_value = 0;
- maxData.m_key = nDst;
- maxData.m_value = nDst;
-
- if (option == BOUND_LOWER)
- {
- for (int i = 0; i < nSrc; i++)
- {
- b3SortData& iData = (i == 0) ? minData : src[i - 1];
- b3SortData& jData = (i == nSrc) ? maxData : src[i];
-
- if (iData.m_key != jData.m_key)
- {
- int k = jData.m_key;
- {
- dst[k] = i;
- }
- }
- }
- }
- else if (option == BOUND_UPPER)
- {
- for (int i = 1; i < nSrc + 1; i++)
- {
- b3SortData& iData = src[i - 1];
- b3SortData& jData = (i == nSrc) ? maxData : src[i];
-
- if (iData.m_key != jData.m_key)
- {
- int k = iData.m_key;
- {
- dst[k] = i;
- }
- }
- }
- }
- else if (option == COUNT)
- {
- b3AlignedObjectArray<unsigned int> lower;
- lower.resize(nDst);
- b3AlignedObjectArray<unsigned int> upper;
- upper.resize(nDst);
-
- for (int i = 0; i < nDst; i++)
- {
- lower[i] = upper[i] = 0;
- }
-
- executeHost(src, nSrc, lower, nDst, BOUND_LOWER);
- executeHost(src, nSrc, upper, nDst, BOUND_UPPER);
-
- for (int i = 0; i < nDst; i++)
- {
- dst[i] = upper[i] - lower[i];
- }
- }
- else
- {
- b3Assert(0);
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h
deleted file mode 100644
index 0d633e3d23..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-#ifndef B3_BOUNDSEARCH_H
-#define B3_BOUNDSEARCH_H
-
-#pragma once
-
-/*#include <Adl/Adl.h>
-#include <AdlPrimitives/Math/Math.h>
-#include <AdlPrimitives/Sort/SortData.h>
-#include <AdlPrimitives/Fill/Fill.h>
-*/
-
-#include "b3OpenCLArray.h"
-#include "b3FillCL.h"
-#include "b3RadixSort32CL.h" //for b3SortData (perhaps move it?)
-class b3BoundSearchCL
-{
-public:
- enum Option
- {
- BOUND_LOWER,
- BOUND_UPPER,
- COUNT,
- };
-
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
- cl_kernel m_lowerSortDataKernel;
- cl_kernel m_upperSortDataKernel;
- cl_kernel m_subtractKernel;
-
- b3OpenCLArray<b3Int4>* m_constbtOpenCLArray;
- b3OpenCLArray<unsigned int>* m_lower;
- b3OpenCLArray<unsigned int>* m_upper;
-
- b3FillCL* m_filler;
-
- b3BoundSearchCL(cl_context context, cl_device_id device, cl_command_queue queue, int size);
-
- virtual ~b3BoundSearchCL();
-
- // src has to be src[i].m_key <= src[i+1].m_key
- void execute(b3OpenCLArray<b3SortData>& src, int nSrc, b3OpenCLArray<unsigned int>& dst, int nDst, Option option = BOUND_LOWER);
-
- void executeHost(b3AlignedObjectArray<b3SortData>& src, int nSrc, b3AlignedObjectArray<unsigned int>& dst, int nDst, Option option = BOUND_LOWER);
-};
-
-#endif //B3_BOUNDSEARCH_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BufferInfoCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BufferInfoCL.h
deleted file mode 100644
index 35fc467b20..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3BufferInfoCL.h
+++ /dev/null
@@ -1,18 +0,0 @@
-
-#ifndef B3_BUFFER_INFO_CL_H
-#define B3_BUFFER_INFO_CL_H
-
-#include "b3OpenCLArray.h"
-
-struct b3BufferInfoCL
-{
- //b3BufferInfoCL(){}
-
- // template<typename T>
- b3BufferInfoCL(cl_mem buff, bool isReadOnly = false) : m_clBuffer(buff), m_isReadOnly(isReadOnly) {}
-
- cl_mem m_clBuffer;
- bool m_isReadOnly;
-};
-
-#endif //B3_BUFFER_INFO_CL_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.cpp b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.cpp
deleted file mode 100644
index bd25bb2101..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-#include "b3FillCL.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "b3BufferInfoCL.h"
-#include "b3LauncherCL.h"
-
-#define FILL_CL_PROGRAM_PATH "src/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernels.cl"
-
-#include "kernels/FillKernelsCL.h"
-
-b3FillCL::b3FillCL(cl_context ctx, cl_device_id device, cl_command_queue queue)
- : m_commandQueue(queue)
-{
- const char* kernelSource = fillKernelsCL;
- cl_int pErrNum;
- const char* additionalMacros = "";
-
- cl_program fillProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, kernelSource, &pErrNum, additionalMacros, FILL_CL_PROGRAM_PATH);
- b3Assert(fillProg);
-
- m_fillIntKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillIntKernel", &pErrNum, fillProg, additionalMacros);
- b3Assert(m_fillIntKernel);
-
- m_fillUnsignedIntKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillUnsignedIntKernel", &pErrNum, fillProg, additionalMacros);
- b3Assert(m_fillIntKernel);
-
- m_fillFloatKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillFloatKernel", &pErrNum, fillProg, additionalMacros);
- b3Assert(m_fillFloatKernel);
-
- m_fillKernelInt2 = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "FillInt2Kernel", &pErrNum, fillProg, additionalMacros);
- b3Assert(m_fillKernelInt2);
-}
-
-b3FillCL::~b3FillCL()
-{
- clReleaseKernel(m_fillKernelInt2);
- clReleaseKernel(m_fillIntKernel);
- clReleaseKernel(m_fillUnsignedIntKernel);
- clReleaseKernel(m_fillFloatKernel);
-}
-
-void b3FillCL::execute(b3OpenCLArray<float>& src, const float value, int n, int offset)
-{
- b3Assert(n > 0);
-
- {
- b3LauncherCL launcher(m_commandQueue, m_fillFloatKernel, "m_fillFloatKernel");
- launcher.setBuffer(src.getBufferCL());
- launcher.setConst(n);
- launcher.setConst(value);
- launcher.setConst(offset);
-
- launcher.launch1D(n);
- }
-}
-
-void b3FillCL::execute(b3OpenCLArray<int>& src, const int value, int n, int offset)
-{
- b3Assert(n > 0);
-
- {
- b3LauncherCL launcher(m_commandQueue, m_fillIntKernel, "m_fillIntKernel");
- launcher.setBuffer(src.getBufferCL());
- launcher.setConst(n);
- launcher.setConst(value);
- launcher.setConst(offset);
- launcher.launch1D(n);
- }
-}
-
-void b3FillCL::execute(b3OpenCLArray<unsigned int>& src, const unsigned int value, int n, int offset)
-{
- b3Assert(n > 0);
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src.getBufferCL())};
-
- b3LauncherCL launcher(m_commandQueue, m_fillUnsignedIntKernel, "m_fillUnsignedIntKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(n);
- launcher.setConst(value);
- launcher.setConst(offset);
-
- launcher.launch1D(n);
- }
-}
-
-void b3FillCL::executeHost(b3AlignedObjectArray<b3Int2>& src, const b3Int2& value, int n, int offset)
-{
- for (int i = 0; i < n; i++)
- {
- src[i + offset] = value;
- }
-}
-
-void b3FillCL::executeHost(b3AlignedObjectArray<int>& src, const int value, int n, int offset)
-{
- for (int i = 0; i < n; i++)
- {
- src[i + offset] = value;
- }
-}
-
-void b3FillCL::execute(b3OpenCLArray<b3Int2>& src, const b3Int2& value, int n, int offset)
-{
- b3Assert(n > 0);
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src.getBufferCL())};
-
- b3LauncherCL launcher(m_commandQueue, m_fillKernelInt2, "m_fillKernelInt2");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(n);
- launcher.setConst(value);
- launcher.setConst(offset);
-
- //( constBuffer );
- launcher.launch1D(n);
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.h
deleted file mode 100644
index c92c3e5119..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3FillCL.h
+++ /dev/null
@@ -1,52 +0,0 @@
-#ifndef B3_FILL_CL_H
-#define B3_FILL_CL_H
-
-#include "b3OpenCLArray.h"
-#include "Bullet3Common/b3Scalar.h"
-
-#include "Bullet3Common/shared/b3Int2.h"
-#include "Bullet3Common/shared/b3Int4.h"
-
-class b3FillCL
-{
- cl_command_queue m_commandQueue;
-
- cl_kernel m_fillKernelInt2;
- cl_kernel m_fillIntKernel;
- cl_kernel m_fillUnsignedIntKernel;
- cl_kernel m_fillFloatKernel;
-
-public:
- struct b3ConstData
- {
- union {
- b3Int4 m_data;
- b3UnsignedInt4 m_UnsignedData;
- };
- int m_offset;
- int m_n;
- int m_padding[2];
- };
-
-protected:
-public:
- b3FillCL(cl_context ctx, cl_device_id device, cl_command_queue queue);
-
- virtual ~b3FillCL();
-
- void execute(b3OpenCLArray<unsigned int>& src, const unsigned int value, int n, int offset = 0);
-
- void execute(b3OpenCLArray<int>& src, const int value, int n, int offset = 0);
-
- void execute(b3OpenCLArray<float>& src, const float value, int n, int offset = 0);
-
- void execute(b3OpenCLArray<b3Int2>& src, const b3Int2& value, int n, int offset = 0);
-
- void executeHost(b3AlignedObjectArray<b3Int2>& src, const b3Int2& value, int n, int offset);
-
- void executeHost(b3AlignedObjectArray<int>& src, const int value, int n, int offset);
-
- // void execute(b3OpenCLArray<b3Int4>& src, const b3Int4& value, int n, int offset = 0);
-};
-
-#endif //B3_FILL_CL_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp
deleted file mode 100644
index c97d02eb45..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.cpp
+++ /dev/null
@@ -1,296 +0,0 @@
-#include "b3LauncherCL.h"
-
-bool gDebugLauncherCL = false;
-
-b3LauncherCL::b3LauncherCL(cl_command_queue queue, cl_kernel kernel, const char* name)
- : m_commandQueue(queue),
- m_kernel(kernel),
- m_idx(0),
- m_enableSerialization(false),
- m_name(name)
-{
- if (gDebugLauncherCL)
- {
- static int counter = 0;
- printf("[%d] Prepare to launch OpenCL kernel %s\n", counter++, name);
- }
-
- m_serializationSizeInBytes = sizeof(int);
-}
-
-b3LauncherCL::~b3LauncherCL()
-{
- for (int i = 0; i < m_arrays.size(); i++)
- {
- delete (m_arrays[i]);
- }
-
- m_arrays.clear();
- if (gDebugLauncherCL)
- {
- static int counter = 0;
- printf("[%d] Finished launching OpenCL kernel %s\n", counter++, m_name);
- }
-}
-
-void b3LauncherCL::setBuffer(cl_mem clBuffer)
-{
- if (m_enableSerialization)
- {
- b3KernelArgData kernelArg;
- kernelArg.m_argIndex = m_idx;
- kernelArg.m_isBuffer = 1;
- kernelArg.m_clBuffer = clBuffer;
-
- cl_mem_info param_name = CL_MEM_SIZE;
- size_t param_value;
- size_t sizeInBytes = sizeof(size_t);
- size_t actualSizeInBytes;
- cl_int err;
- err = clGetMemObjectInfo(kernelArg.m_clBuffer,
- param_name,
- sizeInBytes,
- &param_value,
- &actualSizeInBytes);
-
- b3Assert(err == CL_SUCCESS);
- kernelArg.m_argSizeInBytes = param_value;
-
- m_kernelArguments.push_back(kernelArg);
- m_serializationSizeInBytes += sizeof(b3KernelArgData);
- m_serializationSizeInBytes += param_value;
- }
- cl_int status = clSetKernelArg(m_kernel, m_idx++, sizeof(cl_mem), &clBuffer);
- b3Assert(status == CL_SUCCESS);
-}
-
-void b3LauncherCL::setBuffers(b3BufferInfoCL* buffInfo, int n)
-{
- for (int i = 0; i < n; i++)
- {
- if (m_enableSerialization)
- {
- b3KernelArgData kernelArg;
- kernelArg.m_argIndex = m_idx;
- kernelArg.m_isBuffer = 1;
- kernelArg.m_clBuffer = buffInfo[i].m_clBuffer;
-
- cl_mem_info param_name = CL_MEM_SIZE;
- size_t param_value;
- size_t sizeInBytes = sizeof(size_t);
- size_t actualSizeInBytes;
- cl_int err;
- err = clGetMemObjectInfo(kernelArg.m_clBuffer,
- param_name,
- sizeInBytes,
- &param_value,
- &actualSizeInBytes);
-
- b3Assert(err == CL_SUCCESS);
- kernelArg.m_argSizeInBytes = param_value;
-
- m_kernelArguments.push_back(kernelArg);
- m_serializationSizeInBytes += sizeof(b3KernelArgData);
- m_serializationSizeInBytes += param_value;
- }
- cl_int status = clSetKernelArg(m_kernel, m_idx++, sizeof(cl_mem), &buffInfo[i].m_clBuffer);
- b3Assert(status == CL_SUCCESS);
- }
-}
-
-struct b3KernelArgDataUnaligned
-{
- int m_isBuffer;
- int m_argIndex;
- int m_argSizeInBytes;
- int m_unusedPadding;
- union {
- cl_mem m_clBuffer;
- unsigned char m_argData[B3_CL_MAX_ARG_SIZE];
- };
-};
-#include <string.h>
-
-int b3LauncherCL::deserializeArgs(unsigned char* buf, int bufSize, cl_context ctx)
-{
- int index = 0;
-
- int numArguments = *(int*)&buf[index];
- index += sizeof(int);
-
- for (int i = 0; i < numArguments; i++)
- {
- b3KernelArgDataUnaligned* arg = (b3KernelArgDataUnaligned*)&buf[index];
-
- index += sizeof(b3KernelArgData);
- if (arg->m_isBuffer)
- {
- b3OpenCLArray<unsigned char>* clData = new b3OpenCLArray<unsigned char>(ctx, m_commandQueue, arg->m_argSizeInBytes);
- clData->resize(arg->m_argSizeInBytes);
-
- clData->copyFromHostPointer(&buf[index], arg->m_argSizeInBytes);
-
- arg->m_clBuffer = clData->getBufferCL();
-
- m_arrays.push_back(clData);
-
- cl_int status = clSetKernelArg(m_kernel, m_idx++, sizeof(cl_mem), &arg->m_clBuffer);
- b3Assert(status == CL_SUCCESS);
- index += arg->m_argSizeInBytes;
- }
- else
- {
- cl_int status = clSetKernelArg(m_kernel, m_idx++, arg->m_argSizeInBytes, &arg->m_argData);
- b3Assert(status == CL_SUCCESS);
- }
- b3KernelArgData b;
- memcpy(&b, arg, sizeof(b3KernelArgDataUnaligned));
- m_kernelArguments.push_back(b);
- }
- m_serializationSizeInBytes = index;
- return index;
-}
-
-int b3LauncherCL::validateResults(unsigned char* goldBuffer, int goldBufferCapacity, cl_context ctx)
-{
- int index = 0;
-
- int numArguments = *(int*)&goldBuffer[index];
- index += sizeof(int);
-
- if (numArguments != m_kernelArguments.size())
- {
- printf("failed validation: expected %d arguments, found %d\n", numArguments, m_kernelArguments.size());
- return -1;
- }
-
- for (int ii = 0; ii < numArguments; ii++)
- {
- b3KernelArgData* argGold = (b3KernelArgData*)&goldBuffer[index];
-
- if (m_kernelArguments[ii].m_argSizeInBytes != argGold->m_argSizeInBytes)
- {
- printf("failed validation: argument %d sizeInBytes expected: %d, found %d\n", ii, argGold->m_argSizeInBytes, m_kernelArguments[ii].m_argSizeInBytes);
- return -2;
- }
-
- {
- int expected = argGold->m_isBuffer;
- int found = m_kernelArguments[ii].m_isBuffer;
-
- if (expected != found)
- {
- printf("failed validation: argument %d isBuffer expected: %d, found %d\n", ii, expected, found);
- return -3;
- }
- }
- index += sizeof(b3KernelArgData);
-
- if (argGold->m_isBuffer)
- {
- unsigned char* memBuf = (unsigned char*)malloc(m_kernelArguments[ii].m_argSizeInBytes);
- unsigned char* goldBuf = &goldBuffer[index];
- for (int j = 0; j < m_kernelArguments[j].m_argSizeInBytes; j++)
- {
- memBuf[j] = 0xaa;
- }
-
- cl_int status = 0;
- status = clEnqueueReadBuffer(m_commandQueue, m_kernelArguments[ii].m_clBuffer, CL_TRUE, 0, m_kernelArguments[ii].m_argSizeInBytes,
- memBuf, 0, 0, 0);
- b3Assert(status == CL_SUCCESS);
- clFinish(m_commandQueue);
-
- for (int b = 0; b < m_kernelArguments[ii].m_argSizeInBytes; b++)
- {
- int expected = goldBuf[b];
- int found = memBuf[b];
- if (expected != found)
- {
- printf("failed validation: argument %d OpenCL data at byte position %d expected: %d, found %d\n",
- ii, b, expected, found);
- return -4;
- }
- }
-
- index += argGold->m_argSizeInBytes;
- }
- else
- {
- //compare content
- for (int b = 0; b < m_kernelArguments[ii].m_argSizeInBytes; b++)
- {
- int expected = argGold->m_argData[b];
- int found = m_kernelArguments[ii].m_argData[b];
- if (expected != found)
- {
- printf("failed validation: argument %d const data at byte position %d expected: %d, found %d\n",
- ii, b, expected, found);
- return -5;
- }
- }
- }
- }
- return index;
-}
-
-int b3LauncherCL::serializeArguments(unsigned char* destBuffer, int destBufferCapacity)
-{
- //initialize to known values
- for (int i = 0; i < destBufferCapacity; i++)
- destBuffer[i] = 0xec;
-
- assert(destBufferCapacity >= m_serializationSizeInBytes);
-
- //todo: use the b3Serializer for this to allow for 32/64bit, endianness etc
- int numArguments = m_kernelArguments.size();
- int curBufferSize = 0;
- int* dest = (int*)&destBuffer[curBufferSize];
- *dest = numArguments;
- curBufferSize += sizeof(int);
-
- for (int i = 0; i < this->m_kernelArguments.size(); i++)
- {
- b3KernelArgData* arg = (b3KernelArgData*)&destBuffer[curBufferSize];
- *arg = m_kernelArguments[i];
- curBufferSize += sizeof(b3KernelArgData);
- if (arg->m_isBuffer == 1)
- {
- //copy the OpenCL buffer content
- cl_int status = 0;
- status = clEnqueueReadBuffer(m_commandQueue, arg->m_clBuffer, 0, 0, arg->m_argSizeInBytes,
- &destBuffer[curBufferSize], 0, 0, 0);
- b3Assert(status == CL_SUCCESS);
- clFinish(m_commandQueue);
- curBufferSize += arg->m_argSizeInBytes;
- }
- }
- return curBufferSize;
-}
-
-void b3LauncherCL::serializeToFile(const char* fileName, int numWorkItems)
-{
- int num = numWorkItems;
- int buffSize = getSerializationBufferSize();
- unsigned char* buf = new unsigned char[buffSize + sizeof(int)];
- for (int i = 0; i < buffSize + 1; i++)
- {
- unsigned char* ptr = (unsigned char*)&buf[i];
- *ptr = 0xff;
- }
- // int actualWrite = serializeArguments(buf,buffSize);
-
- // unsigned char* cptr = (unsigned char*)&buf[buffSize];
- // printf("buf[buffSize] = %d\n",*cptr);
-
- assert(buf[buffSize] == 0xff); //check for buffer overrun
- int* ptr = (int*)&buf[buffSize];
-
- *ptr = num;
-
- FILE* f = fopen(fileName, "wb");
- fwrite(buf, buffSize + sizeof(int), 1, f);
- fclose(f);
-
- delete[] buf;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h
deleted file mode 100644
index 18e9c1db2b..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h
+++ /dev/null
@@ -1,128 +0,0 @@
-
-#ifndef B3_LAUNCHER_CL_H
-#define B3_LAUNCHER_CL_H
-
-#include "b3BufferInfoCL.h"
-#include "Bullet3Common/b3MinMax.h"
-#include "b3OpenCLArray.h"
-#include <stdio.h>
-
-#define B3_DEBUG_SERIALIZE_CL
-
-#ifdef _WIN32
-#pragma warning(disable : 4996)
-#endif
-#define B3_CL_MAX_ARG_SIZE 16
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3KernelArgData
-{
- int m_isBuffer;
- int m_argIndex;
- int m_argSizeInBytes;
- int m_unusedPadding;
- union {
- cl_mem m_clBuffer;
- unsigned char m_argData[B3_CL_MAX_ARG_SIZE];
- };
-};
-
-class b3LauncherCL
-{
- cl_command_queue m_commandQueue;
- cl_kernel m_kernel;
- int m_idx;
-
- b3AlignedObjectArray<b3KernelArgData> m_kernelArguments;
- int m_serializationSizeInBytes;
- bool m_enableSerialization;
-
- const char* m_name;
-
-public:
- b3AlignedObjectArray<b3OpenCLArray<unsigned char>*> m_arrays;
-
- b3LauncherCL(cl_command_queue queue, cl_kernel kernel, const char* name);
-
- virtual ~b3LauncherCL();
-
- void setBuffer(cl_mem clBuffer);
-
- void setBuffers(b3BufferInfoCL* buffInfo, int n);
-
- int getSerializationBufferSize() const
- {
- return m_serializationSizeInBytes;
- }
-
- int deserializeArgs(unsigned char* buf, int bufSize, cl_context ctx);
-
- inline int validateResults(unsigned char* goldBuffer, int goldBufferCapacity, cl_context ctx);
-
- int serializeArguments(unsigned char* destBuffer, int destBufferCapacity);
-
- int getNumArguments() const
- {
- return m_kernelArguments.size();
- }
-
- b3KernelArgData getArgument(int index)
- {
- return m_kernelArguments[index];
- }
-
- void serializeToFile(const char* fileName, int numWorkItems);
-
- template <typename T>
- inline void setConst(const T& consts)
- {
- int sz = sizeof(T);
- b3Assert(sz <= B3_CL_MAX_ARG_SIZE);
-
- if (m_enableSerialization)
- {
- b3KernelArgData kernelArg;
- kernelArg.m_argIndex = m_idx;
- kernelArg.m_isBuffer = 0;
- T* destArg = (T*)kernelArg.m_argData;
- *destArg = consts;
- kernelArg.m_argSizeInBytes = sizeof(T);
- m_kernelArguments.push_back(kernelArg);
- m_serializationSizeInBytes += sizeof(b3KernelArgData);
- }
-
- cl_int status = clSetKernelArg(m_kernel, m_idx++, sz, &consts);
- b3Assert(status == CL_SUCCESS);
- }
-
- inline void launch1D(int numThreads, int localSize = 64)
- {
- launch2D(numThreads, 1, localSize, 1);
- }
-
- inline void launch2D(int numThreadsX, int numThreadsY, int localSizeX, int localSizeY)
- {
- size_t gRange[3] = {1, 1, 1};
- size_t lRange[3] = {1, 1, 1};
- lRange[0] = localSizeX;
- lRange[1] = localSizeY;
- gRange[0] = b3Max((size_t)1, (numThreadsX / lRange[0]) + (!(numThreadsX % lRange[0]) ? 0 : 1));
- gRange[0] *= lRange[0];
- gRange[1] = b3Max((size_t)1, (numThreadsY / lRange[1]) + (!(numThreadsY % lRange[1]) ? 0 : 1));
- gRange[1] *= lRange[1];
-
- cl_int status = clEnqueueNDRangeKernel(m_commandQueue,
- m_kernel, 2, NULL, gRange, lRange, 0, 0, 0);
- if (status != CL_SUCCESS)
- {
- printf("Error: OpenCL status = %d\n", status);
- }
- b3Assert(status == CL_SUCCESS);
- }
-
- void enableSerialization(bool serialize)
- {
- m_enableSerialization = serialize;
- }
-};
-
-#endif //B3_LAUNCHER_CL_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h
deleted file mode 100644
index e837cceb66..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h
+++ /dev/null
@@ -1,300 +0,0 @@
-#ifndef B3_OPENCL_ARRAY_H
-#define B3_OPENCL_ARRAY_H
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-
-template <typename T>
-class b3OpenCLArray
-{
- size_t m_size;
- size_t m_capacity;
- cl_mem m_clBuffer;
-
- cl_context m_clContext;
- cl_command_queue m_commandQueue;
-
- bool m_ownsMemory;
-
- bool m_allowGrowingCapacity;
-
- void deallocate()
- {
- if (m_clBuffer && m_ownsMemory)
- {
- clReleaseMemObject(m_clBuffer);
- }
- m_clBuffer = 0;
- m_capacity = 0;
- }
-
- b3OpenCLArray<T>& operator=(const b3OpenCLArray<T>& src);
-
- B3_FORCE_INLINE size_t allocSize(size_t size)
- {
- return (size ? size * 2 : 1);
- }
-
-public:
- b3OpenCLArray(cl_context ctx, cl_command_queue queue, size_t initialCapacity = 0, bool allowGrowingCapacity = true)
- : m_size(0), m_capacity(0), m_clBuffer(0), m_clContext(ctx), m_commandQueue(queue), m_ownsMemory(true), m_allowGrowingCapacity(true)
- {
- if (initialCapacity)
- {
- reserve(initialCapacity);
- }
- m_allowGrowingCapacity = allowGrowingCapacity;
- }
-
- ///this is an error-prone method with no error checking, be careful!
- void setFromOpenCLBuffer(cl_mem buffer, size_t sizeInElements)
- {
- deallocate();
- m_ownsMemory = false;
- m_allowGrowingCapacity = false;
- m_clBuffer = buffer;
- m_size = sizeInElements;
- m_capacity = sizeInElements;
- }
-
- // we could enable this assignment, but need to make sure to avoid accidental deep copies
- // b3OpenCLArray<T>& operator=(const b3AlignedObjectArray<T>& src)
- // {
- // copyFromArray(src);
- // return *this;
- // }
-
- cl_mem getBufferCL() const
- {
- return m_clBuffer;
- }
-
- virtual ~b3OpenCLArray()
- {
- deallocate();
- m_size = 0;
- m_capacity = 0;
- }
-
- B3_FORCE_INLINE bool push_back(const T& _Val, bool waitForCompletion = true)
- {
- bool result = true;
- size_t sz = size();
- if (sz == capacity())
- {
- result = reserve(allocSize(size()));
- }
- copyFromHostPointer(&_Val, 1, sz, waitForCompletion);
- m_size++;
- return result;
- }
-
- B3_FORCE_INLINE T forcedAt(size_t n) const
- {
- b3Assert(n >= 0);
- b3Assert(n < capacity());
- T elem;
- copyToHostPointer(&elem, 1, n, true);
- return elem;
- }
-
- B3_FORCE_INLINE T at(size_t n) const
- {
- b3Assert(n >= 0);
- b3Assert(n < size());
- T elem;
- copyToHostPointer(&elem, 1, n, true);
- return elem;
- }
-
- B3_FORCE_INLINE bool resize(size_t newsize, bool copyOldContents = true)
- {
- bool result = true;
- size_t curSize = size();
-
- if (newsize < curSize)
- {
- //leave the OpenCL memory for now
- }
- else
- {
- if (newsize > size())
- {
- result = reserve(newsize, copyOldContents);
- }
-
- //leave new data uninitialized (init in debug mode?)
- //for (size_t i=curSize;i<newsize;i++) ...
- }
-
- if (result)
- {
- m_size = newsize;
- }
- else
- {
- m_size = 0;
- }
- return result;
- }
-
- B3_FORCE_INLINE size_t size() const
- {
- return m_size;
- }
-
- B3_FORCE_INLINE size_t capacity() const
- {
- return m_capacity;
- }
-
- B3_FORCE_INLINE bool reserve(size_t _Count, bool copyOldContents = true)
- {
- bool result = true;
- // determine new minimum length of allocated storage
- if (capacity() < _Count)
- { // not enough room, reallocate
-
- if (m_allowGrowingCapacity)
- {
- cl_int ciErrNum;
- //create a new OpenCL buffer
- size_t memSizeInBytes = sizeof(T) * _Count;
- cl_mem buf = clCreateBuffer(m_clContext, CL_MEM_READ_WRITE, memSizeInBytes, NULL, &ciErrNum);
- if (ciErrNum != CL_SUCCESS)
- {
- b3Error("OpenCL out-of-memory\n");
- _Count = 0;
- result = false;
- }
-//#define B3_ALWAYS_INITIALIZE_OPENCL_BUFFERS
-#ifdef B3_ALWAYS_INITIALIZE_OPENCL_BUFFERS
- unsigned char* src = (unsigned char*)malloc(memSizeInBytes);
- for (size_t i = 0; i < memSizeInBytes; i++)
- src[i] = 0xbb;
- ciErrNum = clEnqueueWriteBuffer(m_commandQueue, buf, CL_TRUE, 0, memSizeInBytes, src, 0, 0, 0);
- b3Assert(ciErrNum == CL_SUCCESS);
- clFinish(m_commandQueue);
- free(src);
-#endif //B3_ALWAYS_INITIALIZE_OPENCL_BUFFERS
-
- if (result)
- {
- if (copyOldContents)
- copyToCL(buf, size());
- }
-
- //deallocate the old buffer
- deallocate();
-
- m_clBuffer = buf;
-
- m_capacity = _Count;
- }
- else
- {
- //fail: assert and
- b3Assert(0);
- deallocate();
- result = false;
- }
- }
- return result;
- }
-
- void copyToCL(cl_mem destination, size_t numElements, size_t firstElem = 0, size_t dstOffsetInElems = 0) const
- {
- if (numElements <= 0)
- return;
-
- b3Assert(m_clBuffer);
- b3Assert(destination);
-
- //likely some error, destination is same as source
- b3Assert(m_clBuffer != destination);
-
- b3Assert((firstElem + numElements) <= m_size);
-
- cl_int status = 0;
-
- b3Assert(numElements > 0);
- b3Assert(numElements <= m_size);
-
- size_t srcOffsetBytes = sizeof(T) * firstElem;
- size_t dstOffsetInBytes = sizeof(T) * dstOffsetInElems;
-
- status = clEnqueueCopyBuffer(m_commandQueue, m_clBuffer, destination,
- srcOffsetBytes, dstOffsetInBytes, sizeof(T) * numElements, 0, 0, 0);
-
- b3Assert(status == CL_SUCCESS);
- }
-
- void copyFromHost(const b3AlignedObjectArray<T>& srcArray, bool waitForCompletion = true)
- {
- size_t newSize = srcArray.size();
-
- bool copyOldContents = false;
- resize(newSize, copyOldContents);
- if (newSize)
- copyFromHostPointer(&srcArray[0], newSize, 0, waitForCompletion);
- }
-
- void copyFromHostPointer(const T* src, size_t numElems, size_t destFirstElem = 0, bool waitForCompletion = true)
- {
- b3Assert(numElems + destFirstElem <= capacity());
-
- if (numElems + destFirstElem)
- {
- cl_int status = 0;
- size_t sizeInBytes = sizeof(T) * numElems;
- status = clEnqueueWriteBuffer(m_commandQueue, m_clBuffer, 0, sizeof(T) * destFirstElem, sizeInBytes,
- src, 0, 0, 0);
- b3Assert(status == CL_SUCCESS);
- if (waitForCompletion)
- clFinish(m_commandQueue);
- }
- else
- {
- b3Error("copyFromHostPointer invalid range\n");
- }
- }
-
- void copyToHost(b3AlignedObjectArray<T>& destArray, bool waitForCompletion = true) const
- {
- destArray.resize(this->size());
- if (size())
- copyToHostPointer(&destArray[0], size(), 0, waitForCompletion);
- }
-
- void copyToHostPointer(T* destPtr, size_t numElem, size_t srcFirstElem = 0, bool waitForCompletion = true) const
- {
- b3Assert(numElem + srcFirstElem <= capacity());
-
- if (numElem + srcFirstElem <= capacity())
- {
- cl_int status = 0;
- status = clEnqueueReadBuffer(m_commandQueue, m_clBuffer, 0, sizeof(T) * srcFirstElem, sizeof(T) * numElem,
- destPtr, 0, 0, 0);
- b3Assert(status == CL_SUCCESS);
-
- if (waitForCompletion)
- clFinish(m_commandQueue);
- }
- else
- {
- b3Error("copyToHostPointer invalid range\n");
- }
- }
-
- void copyFromOpenCLArray(const b3OpenCLArray& src)
- {
- size_t newSize = src.size();
- resize(newSize);
- if (size())
- {
- src.copyToCL(m_clBuffer, size());
- }
- }
-};
-
-#endif //B3_OPENCL_ARRAY_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.cpp b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.cpp
deleted file mode 100644
index 822b511633..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-#include "b3PrefixScanCL.h"
-#include "b3FillCL.h"
-#define B3_PREFIXSCAN_PROG_PATH "src/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernels.cl"
-
-#include "b3LauncherCL.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "kernels/PrefixScanKernelsCL.h"
-
-b3PrefixScanCL::b3PrefixScanCL(cl_context ctx, cl_device_id device, cl_command_queue queue, int size)
- : m_commandQueue(queue)
-{
- const char* scanKernelSource = prefixScanKernelsCL;
- cl_int pErrNum;
- char* additionalMacros = 0;
-
- m_workBuffer = new b3OpenCLArray<unsigned int>(ctx, queue, size);
- cl_program scanProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, scanKernelSource, &pErrNum, additionalMacros, B3_PREFIXSCAN_PROG_PATH);
- b3Assert(scanProg);
-
- m_localScanKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, scanKernelSource, "LocalScanKernel", &pErrNum, scanProg, additionalMacros);
- b3Assert(m_localScanKernel);
- m_blockSumKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, scanKernelSource, "TopLevelScanKernel", &pErrNum, scanProg, additionalMacros);
- b3Assert(m_blockSumKernel);
- m_propagationKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, scanKernelSource, "AddOffsetKernel", &pErrNum, scanProg, additionalMacros);
- b3Assert(m_propagationKernel);
-}
-
-b3PrefixScanCL::~b3PrefixScanCL()
-{
- delete m_workBuffer;
- clReleaseKernel(m_localScanKernel);
- clReleaseKernel(m_blockSumKernel);
- clReleaseKernel(m_propagationKernel);
-}
-
-template <class T>
-T b3NextPowerOf2(T n)
-{
- n -= 1;
- for (int i = 0; i < sizeof(T) * 8; i++)
- n = n | (n >> i);
- return n + 1;
-}
-
-void b3PrefixScanCL::execute(b3OpenCLArray<unsigned int>& src, b3OpenCLArray<unsigned int>& dst, int n, unsigned int* sum)
-{
- // b3Assert( data->m_option == EXCLUSIVE );
- const unsigned int numBlocks = (const unsigned int)((n + BLOCK_SIZE * 2 - 1) / (BLOCK_SIZE * 2));
-
- dst.resize(src.size());
- m_workBuffer->resize(src.size());
-
- b3Int4 constBuffer;
- constBuffer.x = n;
- constBuffer.y = numBlocks;
- constBuffer.z = (int)b3NextPowerOf2(numBlocks);
-
- b3OpenCLArray<unsigned int>* srcNative = &src;
- b3OpenCLArray<unsigned int>* dstNative = &dst;
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(dstNative->getBufferCL()), b3BufferInfoCL(srcNative->getBufferCL()), b3BufferInfoCL(m_workBuffer->getBufferCL())};
-
- b3LauncherCL launcher(m_commandQueue, m_localScanKernel, "m_localScanKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(constBuffer);
- launcher.launch1D(numBlocks * BLOCK_SIZE, BLOCK_SIZE);
- }
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(m_workBuffer->getBufferCL())};
-
- b3LauncherCL launcher(m_commandQueue, m_blockSumKernel, "m_blockSumKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(constBuffer);
- launcher.launch1D(BLOCK_SIZE, BLOCK_SIZE);
- }
-
- if (numBlocks > 1)
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(dstNative->getBufferCL()), b3BufferInfoCL(m_workBuffer->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_propagationKernel, "m_propagationKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(constBuffer);
- launcher.launch1D((numBlocks - 1) * BLOCK_SIZE, BLOCK_SIZE);
- }
-
- if (sum)
- {
- clFinish(m_commandQueue);
- dstNative->copyToHostPointer(sum, 1, n - 1, true);
- }
-}
-
-void b3PrefixScanCL::executeHost(b3AlignedObjectArray<unsigned int>& src, b3AlignedObjectArray<unsigned int>& dst, int n, unsigned int* sum)
-{
- unsigned int s = 0;
- //if( data->m_option == EXCLUSIVE )
- {
- for (int i = 0; i < n; i++)
- {
- dst[i] = s;
- s += src[i];
- }
- }
- /*else
- {
- for(int i=0; i<n; i++)
- {
- s += hSrc[i];
- hDst[i] = s;
- }
- }
- */
-
- if (sum)
- {
- *sum = dst[n - 1];
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h
deleted file mode 100644
index 346efa0c73..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h
+++ /dev/null
@@ -1,35 +0,0 @@
-
-#ifndef B3_PREFIX_SCAN_CL_H
-#define B3_PREFIX_SCAN_CL_H
-
-#include "b3OpenCLArray.h"
-#include "b3BufferInfoCL.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-class b3PrefixScanCL
-{
- enum
- {
- BLOCK_SIZE = 128
- };
-
- // Option m_option;
-
- cl_command_queue m_commandQueue;
-
- cl_kernel m_localScanKernel;
- cl_kernel m_blockSumKernel;
- cl_kernel m_propagationKernel;
-
- b3OpenCLArray<unsigned int>* m_workBuffer;
-
-public:
- b3PrefixScanCL(cl_context ctx, cl_device_id device, cl_command_queue queue, int size = 0);
-
- virtual ~b3PrefixScanCL();
-
- void execute(b3OpenCLArray<unsigned int>& src, b3OpenCLArray<unsigned int>& dst, int n, unsigned int* sum = 0);
- void executeHost(b3AlignedObjectArray<unsigned int>& src, b3AlignedObjectArray<unsigned int>& dst, int n, unsigned int* sum = 0);
-};
-
-#endif //B3_PREFIX_SCAN_CL_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.cpp b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.cpp
deleted file mode 100644
index 1cac97c988..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.cpp
+++ /dev/null
@@ -1,120 +0,0 @@
-#include "b3PrefixScanFloat4CL.h"
-#include "b3FillCL.h"
-#define B3_PREFIXSCAN_FLOAT4_PROG_PATH "src/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanFloat4Kernels.cl"
-
-#include "b3LauncherCL.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "kernels/PrefixScanKernelsFloat4CL.h"
-
-b3PrefixScanFloat4CL::b3PrefixScanFloat4CL(cl_context ctx, cl_device_id device, cl_command_queue queue, int size)
- : m_commandQueue(queue)
-{
- const char* scanKernelSource = prefixScanKernelsFloat4CL;
- cl_int pErrNum;
- char* additionalMacros = 0;
-
- m_workBuffer = new b3OpenCLArray<b3Vector3>(ctx, queue, size);
- cl_program scanProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, scanKernelSource, &pErrNum, additionalMacros, B3_PREFIXSCAN_FLOAT4_PROG_PATH);
- b3Assert(scanProg);
-
- m_localScanKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, scanKernelSource, "LocalScanKernel", &pErrNum, scanProg, additionalMacros);
- b3Assert(m_localScanKernel);
- m_blockSumKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, scanKernelSource, "TopLevelScanKernel", &pErrNum, scanProg, additionalMacros);
- b3Assert(m_blockSumKernel);
- m_propagationKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, scanKernelSource, "AddOffsetKernel", &pErrNum, scanProg, additionalMacros);
- b3Assert(m_propagationKernel);
-}
-
-b3PrefixScanFloat4CL::~b3PrefixScanFloat4CL()
-{
- delete m_workBuffer;
- clReleaseKernel(m_localScanKernel);
- clReleaseKernel(m_blockSumKernel);
- clReleaseKernel(m_propagationKernel);
-}
-
-template <class T>
-T b3NextPowerOf2(T n)
-{
- n -= 1;
- for (int i = 0; i < sizeof(T) * 8; i++)
- n = n | (n >> i);
- return n + 1;
-}
-
-void b3PrefixScanFloat4CL::execute(b3OpenCLArray<b3Vector3>& src, b3OpenCLArray<b3Vector3>& dst, int n, b3Vector3* sum)
-{
- // b3Assert( data->m_option == EXCLUSIVE );
- const unsigned int numBlocks = (const unsigned int)((n + BLOCK_SIZE * 2 - 1) / (BLOCK_SIZE * 2));
-
- dst.resize(src.size());
- m_workBuffer->resize(src.size());
-
- b3Int4 constBuffer;
- constBuffer.x = n;
- constBuffer.y = numBlocks;
- constBuffer.z = (int)b3NextPowerOf2(numBlocks);
-
- b3OpenCLArray<b3Vector3>* srcNative = &src;
- b3OpenCLArray<b3Vector3>* dstNative = &dst;
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(dstNative->getBufferCL()), b3BufferInfoCL(srcNative->getBufferCL()), b3BufferInfoCL(m_workBuffer->getBufferCL())};
-
- b3LauncherCL launcher(m_commandQueue, m_localScanKernel, "m_localScanKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(constBuffer);
- launcher.launch1D(numBlocks * BLOCK_SIZE, BLOCK_SIZE);
- }
-
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(m_workBuffer->getBufferCL())};
-
- b3LauncherCL launcher(m_commandQueue, m_blockSumKernel, "m_blockSumKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(constBuffer);
- launcher.launch1D(BLOCK_SIZE, BLOCK_SIZE);
- }
-
- if (numBlocks > 1)
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(dstNative->getBufferCL()), b3BufferInfoCL(m_workBuffer->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_propagationKernel, "m_propagationKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(constBuffer);
- launcher.launch1D((numBlocks - 1) * BLOCK_SIZE, BLOCK_SIZE);
- }
-
- if (sum)
- {
- clFinish(m_commandQueue);
- dstNative->copyToHostPointer(sum, 1, n - 1, true);
- }
-}
-
-void b3PrefixScanFloat4CL::executeHost(b3AlignedObjectArray<b3Vector3>& src, b3AlignedObjectArray<b3Vector3>& dst, int n, b3Vector3* sum)
-{
- b3Vector3 s = b3MakeVector3(0, 0, 0);
- //if( data->m_option == EXCLUSIVE )
- {
- for (int i = 0; i < n; i++)
- {
- dst[i] = s;
- s += src[i];
- }
- }
- /*else
- {
- for(int i=0; i<n; i++)
- {
- s += hSrc[i];
- hDst[i] = s;
- }
- }
- */
-
- if (sum)
- {
- *sum = dst[n - 1];
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.h
deleted file mode 100644
index 122b0bfd68..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3PrefixScanFloat4CL.h
+++ /dev/null
@@ -1,36 +0,0 @@
-
-#ifndef B3_PREFIX_SCAN_CL_H
-#define B3_PREFIX_SCAN_CL_H
-
-#include "b3OpenCLArray.h"
-#include "b3BufferInfoCL.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Vector3.h"
-
-class b3PrefixScanFloat4CL
-{
- enum
- {
- BLOCK_SIZE = 128
- };
-
- // Option m_option;
-
- cl_command_queue m_commandQueue;
-
- cl_kernel m_localScanKernel;
- cl_kernel m_blockSumKernel;
- cl_kernel m_propagationKernel;
-
- b3OpenCLArray<b3Vector3>* m_workBuffer;
-
-public:
- b3PrefixScanFloat4CL(cl_context ctx, cl_device_id device, cl_command_queue queue, int size = 0);
-
- virtual ~b3PrefixScanFloat4CL();
-
- void execute(b3OpenCLArray<b3Vector3>& src, b3OpenCLArray<b3Vector3>& dst, int n, b3Vector3* sum = 0);
- void executeHost(b3AlignedObjectArray<b3Vector3>& src, b3AlignedObjectArray<b3Vector3>& dst, int n, b3Vector3* sum);
-};
-
-#endif //B3_PREFIX_SCAN_CL_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.cpp b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.cpp
deleted file mode 100644
index e86af6583f..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.cpp
+++ /dev/null
@@ -1,646 +0,0 @@
-
-#include "b3RadixSort32CL.h"
-#include "b3LauncherCL.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "b3PrefixScanCL.h"
-#include "b3FillCL.h"
-
-#define RADIXSORT32_PATH "src/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32Kernels.cl"
-
-#include "kernels/RadixSort32KernelsCL.h"
-
-b3RadixSort32CL::b3RadixSort32CL(cl_context ctx, cl_device_id device, cl_command_queue queue, int initialCapacity)
- : m_commandQueue(queue)
-{
- b3OpenCLDeviceInfo info;
- b3OpenCLUtils::getDeviceInfo(device, &info);
- m_deviceCPU = (info.m_deviceType & CL_DEVICE_TYPE_CPU) != 0;
-
- m_workBuffer1 = new b3OpenCLArray<unsigned int>(ctx, queue);
- m_workBuffer2 = new b3OpenCLArray<unsigned int>(ctx, queue);
- m_workBuffer3 = new b3OpenCLArray<b3SortData>(ctx, queue);
- m_workBuffer3a = new b3OpenCLArray<unsigned int>(ctx, queue);
- m_workBuffer4 = new b3OpenCLArray<b3SortData>(ctx, queue);
- m_workBuffer4a = new b3OpenCLArray<unsigned int>(ctx, queue);
-
- if (initialCapacity > 0)
- {
- m_workBuffer1->resize(initialCapacity);
- m_workBuffer3->resize(initialCapacity);
- m_workBuffer3a->resize(initialCapacity);
- m_workBuffer4->resize(initialCapacity);
- m_workBuffer4a->resize(initialCapacity);
- }
-
- m_scan = new b3PrefixScanCL(ctx, device, queue);
- m_fill = new b3FillCL(ctx, device, queue);
-
- const char* additionalMacros = "";
-
- cl_int pErrNum;
- const char* kernelSource = radixSort32KernelsCL;
-
- cl_program sortProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, kernelSource, &pErrNum, additionalMacros, RADIXSORT32_PATH);
- b3Assert(sortProg);
-
- m_streamCountSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "StreamCountSortDataKernel", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_streamCountSortDataKernel);
-
- m_streamCountKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "StreamCountKernel", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_streamCountKernel);
-
- if (m_deviceCPU)
- {
- m_sortAndScatterSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SortAndScatterSortDataKernelSerial", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_sortAndScatterSortDataKernel);
- m_sortAndScatterKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SortAndScatterKernelSerial", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_sortAndScatterKernel);
- }
- else
- {
- m_sortAndScatterSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SortAndScatterSortDataKernel", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_sortAndScatterSortDataKernel);
- m_sortAndScatterKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "SortAndScatterKernel", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_sortAndScatterKernel);
- }
-
- m_prefixScanKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, kernelSource, "PrefixScanKernel", &pErrNum, sortProg, additionalMacros);
- b3Assert(m_prefixScanKernel);
-}
-
-b3RadixSort32CL::~b3RadixSort32CL()
-{
- delete m_scan;
- delete m_fill;
- delete m_workBuffer1;
- delete m_workBuffer2;
- delete m_workBuffer3;
- delete m_workBuffer3a;
- delete m_workBuffer4;
- delete m_workBuffer4a;
-
- clReleaseKernel(m_streamCountSortDataKernel);
- clReleaseKernel(m_streamCountKernel);
- clReleaseKernel(m_sortAndScatterSortDataKernel);
- clReleaseKernel(m_sortAndScatterKernel);
- clReleaseKernel(m_prefixScanKernel);
-}
-
-void b3RadixSort32CL::executeHost(b3AlignedObjectArray<b3SortData>& inout, int sortBits /* = 32 */)
-{
- int n = inout.size();
- const int BITS_PER_PASS = 8;
- const int NUM_TABLES = (1 << BITS_PER_PASS);
-
- int tables[NUM_TABLES];
- int counter[NUM_TABLES];
-
- b3SortData* src = &inout[0];
- b3AlignedObjectArray<b3SortData> workbuffer;
- workbuffer.resize(inout.size());
- b3SortData* dst = &workbuffer[0];
-
- int count = 0;
- for (int startBit = 0; startBit < sortBits; startBit += BITS_PER_PASS)
- {
- for (int i = 0; i < NUM_TABLES; i++)
- {
- tables[i] = 0;
- }
-
- for (int i = 0; i < n; i++)
- {
- int tableIdx = (src[i].m_key >> startBit) & (NUM_TABLES - 1);
- tables[tableIdx]++;
- }
-//#define TEST
-#ifdef TEST
- printf("histogram size=%d\n", NUM_TABLES);
- for (int i = 0; i < NUM_TABLES; i++)
- {
- if (tables[i] != 0)
- {
- printf("tables[%d]=%d]\n", i, tables[i]);
- }
- }
-#endif //TEST \
- // prefix scan
- int sum = 0;
- for (int i = 0; i < NUM_TABLES; i++)
- {
- int iData = tables[i];
- tables[i] = sum;
- sum += iData;
- counter[i] = 0;
- }
-
- // distribute
- for (int i = 0; i < n; i++)
- {
- int tableIdx = (src[i].m_key >> startBit) & (NUM_TABLES - 1);
-
- dst[tables[tableIdx] + counter[tableIdx]] = src[i];
- counter[tableIdx]++;
- }
-
- b3Swap(src, dst);
- count++;
- }
-
- if (count & 1)
- {
- b3Assert(0); //need to copy
- }
-}
-
-void b3RadixSort32CL::executeHost(b3OpenCLArray<b3SortData>& keyValuesInOut, int sortBits /* = 32 */)
-{
- b3AlignedObjectArray<b3SortData> inout;
- keyValuesInOut.copyToHost(inout);
-
- executeHost(inout, sortBits);
-
- keyValuesInOut.copyFromHost(inout);
-}
-
-void b3RadixSort32CL::execute(b3OpenCLArray<unsigned int>& keysIn, b3OpenCLArray<unsigned int>& keysOut, b3OpenCLArray<unsigned int>& valuesIn,
- b3OpenCLArray<unsigned int>& valuesOut, int n, int sortBits)
-{
-}
-
-//#define DEBUG_RADIXSORT
-//#define DEBUG_RADIXSORT2
-
-void b3RadixSort32CL::execute(b3OpenCLArray<b3SortData>& keyValuesInOut, int sortBits /* = 32 */)
-{
- int originalSize = keyValuesInOut.size();
- int workingSize = originalSize;
-
- int dataAlignment = DATA_ALIGNMENT;
-
-#ifdef DEBUG_RADIXSORT2
- b3AlignedObjectArray<b3SortData> test2;
- keyValuesInOut.copyToHost(test2);
- printf("numElem = %d\n", test2.size());
- for (int i = 0; i < test2.size(); i++)
- {
- printf("test2[%d].m_key=%d\n", i, test2[i].m_key);
- printf("test2[%d].m_value=%d\n", i, test2[i].m_value);
- }
-#endif //DEBUG_RADIXSORT2
-
- b3OpenCLArray<b3SortData>* src = 0;
-
- if (workingSize % dataAlignment)
- {
- workingSize += dataAlignment - (workingSize % dataAlignment);
- m_workBuffer4->copyFromOpenCLArray(keyValuesInOut);
- m_workBuffer4->resize(workingSize);
- b3SortData fillValue;
- fillValue.m_key = 0xffffffff;
- fillValue.m_value = 0xffffffff;
-
-#define USE_BTFILL
-#ifdef USE_BTFILL
- m_fill->execute((b3OpenCLArray<b3Int2>&)*m_workBuffer4, (b3Int2&)fillValue, workingSize - originalSize, originalSize);
-#else
- //fill the remaining bits (very slow way, todo: fill on GPU/OpenCL side)
-
- for (int i = originalSize; i < workingSize; i++)
- {
- m_workBuffer4->copyFromHostPointer(&fillValue, 1, i);
- }
-#endif //USE_BTFILL
-
- src = m_workBuffer4;
- }
- else
- {
- src = &keyValuesInOut;
- m_workBuffer4->resize(0);
- }
-
- b3Assert(workingSize % DATA_ALIGNMENT == 0);
- int minCap = NUM_BUCKET * NUM_WGS;
-
- int n = workingSize;
-
- m_workBuffer1->resize(minCap);
- m_workBuffer3->resize(workingSize);
-
- // ADLASSERT( ELEMENTS_PER_WORK_ITEM == 4 );
- b3Assert(BITS_PER_PASS == 4);
- b3Assert(WG_SIZE == 64);
- b3Assert((sortBits & 0x3) == 0);
-
- b3OpenCLArray<b3SortData>* dst = m_workBuffer3;
-
- b3OpenCLArray<unsigned int>* srcHisto = m_workBuffer1;
- b3OpenCLArray<unsigned int>* destHisto = m_workBuffer2;
-
- int nWGs = NUM_WGS;
- b3ConstData cdata;
-
- {
- int blockSize = ELEMENTS_PER_WORK_ITEM * WG_SIZE; //set at 256
- int nBlocks = (n + blockSize - 1) / (blockSize);
- cdata.m_n = n;
- cdata.m_nWGs = NUM_WGS;
- cdata.m_startBit = 0;
- cdata.m_nBlocksPerWG = (nBlocks + cdata.m_nWGs - 1) / cdata.m_nWGs;
- if (nBlocks < NUM_WGS)
- {
- cdata.m_nBlocksPerWG = 1;
- nWGs = nBlocks;
- }
- }
-
- int count = 0;
- for (int ib = 0; ib < sortBits; ib += 4)
- {
-#ifdef DEBUG_RADIXSORT2
- keyValuesInOut.copyToHost(test2);
- printf("numElem = %d\n", test2.size());
- for (int i = 0; i < test2.size(); i++)
- {
- if (test2[i].m_key != test2[i].m_value)
- {
- printf("test2[%d].m_key=%d\n", i, test2[i].m_key);
- printf("test2[%d].m_value=%d\n", i, test2[i].m_value);
- }
- }
-#endif //DEBUG_RADIXSORT2
-
- cdata.m_startBit = ib;
-
- if (src->size())
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src->getBufferCL(), true), b3BufferInfoCL(srcHisto->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_streamCountSortDataKernel, "m_streamCountSortDataKernel");
-
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
-
- int num = NUM_WGS * WG_SIZE;
- launcher.launch1D(num, WG_SIZE);
- }
-
-#ifdef DEBUG_RADIXSORT
- b3AlignedObjectArray<unsigned int> testHist;
- srcHisto->copyToHost(testHist);
- printf("ib = %d, testHist size = %d, non zero elements:\n", ib, testHist.size());
- for (int i = 0; i < testHist.size(); i++)
- {
- if (testHist[i] != 0)
- printf("testHist[%d]=%d\n", i, testHist[i]);
- }
-#endif //DEBUG_RADIXSORT
-
-//fast prefix scan is not working properly on Mac OSX yet
-#ifdef __APPLE__
- bool fastScan = false;
-#else
- bool fastScan = !m_deviceCPU; //only use fast scan on GPU
-#endif
-
- if (fastScan)
- { // prefix scan group histogram
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(srcHisto->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_prefixScanKernel, "m_prefixScanKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
- launcher.launch1D(128, 128);
- destHisto = srcHisto;
- }
- else
- {
- //unsigned int sum; //for debugging
- m_scan->execute(*srcHisto, *destHisto, 1920, 0); //,&sum);
- }
-
-#ifdef DEBUG_RADIXSORT
- destHisto->copyToHost(testHist);
- printf("ib = %d, testHist size = %d, non zero elements:\n", ib, testHist.size());
- for (int i = 0; i < testHist.size(); i++)
- {
- if (testHist[i] != 0)
- printf("testHist[%d]=%d\n", i, testHist[i]);
- }
-
- for (int i = 0; i < testHist.size(); i += NUM_WGS)
- {
- printf("testHist[%d]=%d\n", i / NUM_WGS, testHist[i]);
- }
-
-#endif //DEBUG_RADIXSORT
-
-#define USE_GPU
-#ifdef USE_GPU
-
- if (src->size())
- { // local sort and distribute
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src->getBufferCL(), true), b3BufferInfoCL(destHisto->getBufferCL(), true), b3BufferInfoCL(dst->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_sortAndScatterSortDataKernel, "m_sortAndScatterSortDataKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
- launcher.launch1D(nWGs * WG_SIZE, WG_SIZE);
- }
-#else
- {
-#define NUM_TABLES 16
-//#define SEQUENTIAL
-#ifdef SEQUENTIAL
- int counter2[NUM_TABLES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
- int tables[NUM_TABLES];
- int startBit = ib;
-
- destHisto->copyToHost(testHist);
- b3AlignedObjectArray<b3SortData> srcHost;
- b3AlignedObjectArray<b3SortData> dstHost;
- dstHost.resize(src->size());
-
- src->copyToHost(srcHost);
-
- for (int i = 0; i < NUM_TABLES; i++)
- {
- tables[i] = testHist[i * NUM_WGS];
- }
-
- // distribute
- for (int i = 0; i < n; i++)
- {
- int tableIdx = (srcHost[i].m_key >> startBit) & (NUM_TABLES - 1);
-
- dstHost[tables[tableIdx] + counter2[tableIdx]] = srcHost[i];
- counter2[tableIdx]++;
- }
-
-#else
-
- int counter2[NUM_TABLES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- int tables[NUM_TABLES];
- b3AlignedObjectArray<b3SortData> dstHostOK;
- dstHostOK.resize(src->size());
-
- destHisto->copyToHost(testHist);
- b3AlignedObjectArray<b3SortData> srcHost;
- src->copyToHost(srcHost);
-
- int blockSize = 256;
- int nBlocksPerWG = cdata.m_nBlocksPerWG;
- int startBit = ib;
-
- {
- for (int i = 0; i < NUM_TABLES; i++)
- {
- tables[i] = testHist[i * NUM_WGS];
- }
-
- // distribute
- for (int i = 0; i < n; i++)
- {
- int tableIdx = (srcHost[i].m_key >> startBit) & (NUM_TABLES - 1);
-
- dstHostOK[tables[tableIdx] + counter2[tableIdx]] = srcHost[i];
- counter2[tableIdx]++;
- }
- }
-
- b3AlignedObjectArray<b3SortData> dstHost;
- dstHost.resize(src->size());
-
- int counter[NUM_TABLES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- for (int wgIdx = 0; wgIdx < NUM_WGS; wgIdx++)
- {
- int counter[NUM_TABLES] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
-
- int nBlocks = (n) / blockSize - nBlocksPerWG * wgIdx;
-
- for (int iblock = 0; iblock < b3Min(cdata.m_nBlocksPerWG, nBlocks); iblock++)
- {
- for (int lIdx = 0; lIdx < 64; lIdx++)
- {
- int addr = iblock * blockSize + blockSize * cdata.m_nBlocksPerWG * wgIdx + ELEMENTS_PER_WORK_ITEM * lIdx;
-
- // MY_HISTOGRAM( localKeys.x ) ++ is much expensive than atomic add as it requires read and write while atomics can just add on AMD
- // Using registers didn't perform well. It seems like use localKeys to address requires a lot of alu ops
- // AMD: AtomInc performs better while NV prefers ++
- for (int j = 0; j < ELEMENTS_PER_WORK_ITEM; j++)
- {
- if (addr + j < n)
- {
- // printf ("addr+j=%d\n", addr+j);
-
- int i = addr + j;
-
- int tableIdx = (srcHost[i].m_key >> startBit) & (NUM_TABLES - 1);
-
- int destIndex = testHist[tableIdx * NUM_WGS + wgIdx] + counter[tableIdx];
-
- b3SortData ok = dstHostOK[destIndex];
-
- if (ok.m_key != srcHost[i].m_key)
- {
- printf("ok.m_key = %d, srcHost[i].m_key = %d\n", ok.m_key, srcHost[i].m_key);
- printf("(ok.m_value = %d, srcHost[i].m_value = %d)\n", ok.m_value, srcHost[i].m_value);
- }
- if (ok.m_value != srcHost[i].m_value)
- {
- printf("ok.m_value = %d, srcHost[i].m_value = %d\n", ok.m_value, srcHost[i].m_value);
- printf("(ok.m_key = %d, srcHost[i].m_key = %d)\n", ok.m_key, srcHost[i].m_key);
- }
-
- dstHost[destIndex] = srcHost[i];
- counter[tableIdx]++;
- }
- }
- }
- }
- }
-
-#endif //SEQUENTIAL
-
- dst->copyFromHost(dstHost);
- }
-#endif //USE_GPU
-
-#ifdef DEBUG_RADIXSORT
- destHisto->copyToHost(testHist);
- printf("ib = %d, testHist size = %d, non zero elements:\n", ib, testHist.size());
- for (int i = 0; i < testHist.size(); i++)
- {
- if (testHist[i] != 0)
- printf("testHist[%d]=%d\n", i, testHist[i]);
- }
-#endif //DEBUG_RADIXSORT
- b3Swap(src, dst);
- b3Swap(srcHisto, destHisto);
-
-#ifdef DEBUG_RADIXSORT2
- keyValuesInOut.copyToHost(test2);
- printf("numElem = %d\n", test2.size());
- for (int i = 0; i < test2.size(); i++)
- {
- if (test2[i].m_key != test2[i].m_value)
- {
- printf("test2[%d].m_key=%d\n", i, test2[i].m_key);
- printf("test2[%d].m_value=%d\n", i, test2[i].m_value);
- }
- }
-#endif //DEBUG_RADIXSORT2
-
- count++;
- }
-
- if (count & 1)
- {
- b3Assert(0); //need to copy from workbuffer to keyValuesInOut
- }
-
- if (m_workBuffer4->size())
- {
- m_workBuffer4->resize(originalSize);
- keyValuesInOut.copyFromOpenCLArray(*m_workBuffer4);
- }
-
-#ifdef DEBUG_RADIXSORT
- keyValuesInOut.copyToHost(test2);
-
- printf("numElem = %d\n", test2.size());
- for (int i = 0; i < test2.size(); i++)
- {
- printf("test2[%d].m_key=%d\n", i, test2[i].m_key);
- printf("test2[%d].m_value=%d\n", i, test2[i].m_value);
- }
-#endif
-}
-
-void b3RadixSort32CL::execute(b3OpenCLArray<unsigned int>& keysInOut, int sortBits /* = 32 */)
-{
- int originalSize = keysInOut.size();
- int workingSize = originalSize;
-
- int dataAlignment = DATA_ALIGNMENT;
-
- b3OpenCLArray<unsigned int>* src = 0;
-
- if (workingSize % dataAlignment)
- {
- workingSize += dataAlignment - (workingSize % dataAlignment);
- m_workBuffer4a->copyFromOpenCLArray(keysInOut);
- m_workBuffer4a->resize(workingSize);
- unsigned int fillValue = 0xffffffff;
-
- m_fill->execute(*m_workBuffer4a, fillValue, workingSize - originalSize, originalSize);
-
- src = m_workBuffer4a;
- }
- else
- {
- src = &keysInOut;
- m_workBuffer4a->resize(0);
- }
-
- b3Assert(workingSize % DATA_ALIGNMENT == 0);
- int minCap = NUM_BUCKET * NUM_WGS;
-
- int n = workingSize;
-
- m_workBuffer1->resize(minCap);
- m_workBuffer3->resize(workingSize);
- m_workBuffer3a->resize(workingSize);
-
- // ADLASSERT( ELEMENTS_PER_WORK_ITEM == 4 );
- b3Assert(BITS_PER_PASS == 4);
- b3Assert(WG_SIZE == 64);
- b3Assert((sortBits & 0x3) == 0);
-
- b3OpenCLArray<unsigned int>* dst = m_workBuffer3a;
-
- b3OpenCLArray<unsigned int>* srcHisto = m_workBuffer1;
- b3OpenCLArray<unsigned int>* destHisto = m_workBuffer2;
-
- int nWGs = NUM_WGS;
- b3ConstData cdata;
-
- {
- int blockSize = ELEMENTS_PER_WORK_ITEM * WG_SIZE; //set at 256
- int nBlocks = (n + blockSize - 1) / (blockSize);
- cdata.m_n = n;
- cdata.m_nWGs = NUM_WGS;
- cdata.m_startBit = 0;
- cdata.m_nBlocksPerWG = (nBlocks + cdata.m_nWGs - 1) / cdata.m_nWGs;
- if (nBlocks < NUM_WGS)
- {
- cdata.m_nBlocksPerWG = 1;
- nWGs = nBlocks;
- }
- }
-
- int count = 0;
- for (int ib = 0; ib < sortBits; ib += 4)
- {
- cdata.m_startBit = ib;
-
- if (src->size())
- {
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src->getBufferCL(), true), b3BufferInfoCL(srcHisto->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_streamCountKernel, "m_streamCountKernel");
-
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
-
- int num = NUM_WGS * WG_SIZE;
- launcher.launch1D(num, WG_SIZE);
- }
-
-//fast prefix scan is not working properly on Mac OSX yet
-#ifdef __APPLE__
- bool fastScan = false;
-#else
- bool fastScan = !m_deviceCPU;
-#endif
-
- if (fastScan)
- { // prefix scan group histogram
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(srcHisto->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_prefixScanKernel, "m_prefixScanKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
- launcher.launch1D(128, 128);
- destHisto = srcHisto;
- }
- else
- {
- //unsigned int sum; //for debugging
- m_scan->execute(*srcHisto, *destHisto, 1920, 0); //,&sum);
- }
-
- if (src->size())
- { // local sort and distribute
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(src->getBufferCL(), true), b3BufferInfoCL(destHisto->getBufferCL(), true), b3BufferInfoCL(dst->getBufferCL())};
- b3LauncherCL launcher(m_commandQueue, m_sortAndScatterKernel, "m_sortAndScatterKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
- launcher.launch1D(nWGs * WG_SIZE, WG_SIZE);
- }
-
- b3Swap(src, dst);
- b3Swap(srcHisto, destHisto);
-
- count++;
- }
-
- if (count & 1)
- {
- b3Assert(0); //need to copy from workbuffer to keyValuesInOut
- }
-
- if (m_workBuffer4a->size())
- {
- m_workBuffer4a->resize(originalSize);
- keysInOut.copyFromOpenCLArray(*m_workBuffer4a);
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h
deleted file mode 100644
index 69caf182d7..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h
+++ /dev/null
@@ -1,84 +0,0 @@
-
-#ifndef B3_RADIXSORT32_H
-#define B3_RADIXSORT32_H
-
-#include "b3OpenCLArray.h"
-
-struct b3SortData
-{
- union {
- unsigned int m_key;
- unsigned int x;
- };
-
- union {
- unsigned int m_value;
- unsigned int y;
- };
-};
-#include "b3BufferInfoCL.h"
-
-class b3RadixSort32CL
-{
- b3OpenCLArray<unsigned int>* m_workBuffer1;
- b3OpenCLArray<unsigned int>* m_workBuffer2;
-
- b3OpenCLArray<b3SortData>* m_workBuffer3;
- b3OpenCLArray<b3SortData>* m_workBuffer4;
-
- b3OpenCLArray<unsigned int>* m_workBuffer3a;
- b3OpenCLArray<unsigned int>* m_workBuffer4a;
-
- cl_command_queue m_commandQueue;
-
- cl_kernel m_streamCountSortDataKernel;
- cl_kernel m_streamCountKernel;
-
- cl_kernel m_prefixScanKernel;
- cl_kernel m_sortAndScatterSortDataKernel;
- cl_kernel m_sortAndScatterKernel;
-
- bool m_deviceCPU;
-
- class b3PrefixScanCL* m_scan;
- class b3FillCL* m_fill;
-
-public:
- struct b3ConstData
- {
- int m_n;
- int m_nWGs;
- int m_startBit;
- int m_nBlocksPerWG;
- };
- enum
- {
- DATA_ALIGNMENT = 256,
- WG_SIZE = 64,
- BLOCK_SIZE = 256,
- ELEMENTS_PER_WORK_ITEM = (BLOCK_SIZE / WG_SIZE),
- BITS_PER_PASS = 4,
- NUM_BUCKET = (1 << BITS_PER_PASS),
- // if you change this, change nPerWI in kernel as well
- NUM_WGS = 20 * 6, // cypress
- // NUM_WGS = 24*6, // cayman
- // NUM_WGS = 32*4, // nv
- };
-
-private:
-public:
- b3RadixSort32CL(cl_context ctx, cl_device_id device, cl_command_queue queue, int initialCapacity = 0);
-
- virtual ~b3RadixSort32CL();
-
- void execute(b3OpenCLArray<unsigned int>& keysIn, b3OpenCLArray<unsigned int>& keysOut, b3OpenCLArray<unsigned int>& valuesIn,
- b3OpenCLArray<unsigned int>& valuesOut, int n, int sortBits = 32);
-
- ///keys only
- void execute(b3OpenCLArray<unsigned int>& keysInOut, int sortBits = 32);
-
- void execute(b3OpenCLArray<b3SortData>& keyValuesInOut, int sortBits = 32);
- void executeHost(b3OpenCLArray<b3SortData>& keyValuesInOut, int sortBits = 32);
- void executeHost(b3AlignedObjectArray<b3SortData>& keyValuesInOut, int sortBits = 32);
-};
-#endif //B3_RADIXSORT32_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernels.cl b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernels.cl
deleted file mode 100644
index f3b4a1e8a7..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernels.cl
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-typedef unsigned int u32;
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-
-typedef struct
-{
- u32 m_key;
- u32 m_value;
-}SortData;
-
-
-
-typedef struct
-{
- u32 m_nSrc;
- u32 m_nDst;
- u32 m_padding[2];
-} ConstBuffer;
-
-
-
-__attribute__((reqd_work_group_size(64,1,1)))
-__kernel
-void SearchSortDataLowerKernel(__global SortData* src, __global u32 *dst,
- unsigned int nSrc, unsigned int nDst)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nSrc )
- {
- SortData first; first.m_key = (u32)(-1); first.m_value = (u32)(-1);
- SortData end; end.m_key = nDst; end.m_value = nDst;
-
- SortData iData = (gIdx==0)? first: src[gIdx-1];
- SortData jData = (gIdx==nSrc)? end: src[gIdx];
-
- if( iData.m_key != jData.m_key )
- {
-// for(u32 k=iData.m_key+1; k<=min(jData.m_key, nDst-1); k++)
- u32 k = jData.m_key;
- {
- dst[k] = gIdx;
- }
- }
- }
-}
-
-
-__attribute__((reqd_work_group_size(64,1,1)))
-__kernel
-void SearchSortDataUpperKernel(__global SortData* src, __global u32 *dst,
- unsigned int nSrc, unsigned int nDst)
-{
- int gIdx = GET_GLOBAL_IDX+1;
-
- if( gIdx < nSrc+1 )
- {
- SortData first; first.m_key = 0; first.m_value = 0;
- SortData end; end.m_key = nDst; end.m_value = nDst;
-
- SortData iData = src[gIdx-1];
- SortData jData = (gIdx==nSrc)? end: src[gIdx];
-
- if( iData.m_key != jData.m_key )
- {
- u32 k = iData.m_key;
- {
- dst[k] = gIdx;
- }
- }
- }
-}
-
-__attribute__((reqd_work_group_size(64,1,1)))
-__kernel
-void SubtractKernel(__global u32* A, __global u32 *B, __global u32 *C,
- unsigned int nSrc, unsigned int nDst)
-{
- int gIdx = GET_GLOBAL_IDX;
-
-
- if( gIdx < nDst )
- {
- C[gIdx] = A[gIdx] - B[gIdx];
- }
-}
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernelsCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernelsCL.h
deleted file mode 100644
index 1758dd41e3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/BoundSearchKernelsCL.h
+++ /dev/null
@@ -1,86 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* boundSearchKernelsCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "typedef unsigned int u32;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "typedef struct\n"
- "{\n"
- " u32 m_key; \n"
- " u32 m_value;\n"
- "}SortData;\n"
- "typedef struct\n"
- "{\n"
- " u32 m_nSrc;\n"
- " u32 m_nDst;\n"
- " u32 m_padding[2];\n"
- "} ConstBuffer;\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "__kernel\n"
- "void SearchSortDataLowerKernel(__global SortData* src, __global u32 *dst, \n"
- " unsigned int nSrc, unsigned int nDst)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nSrc )\n"
- " {\n"
- " SortData first; first.m_key = (u32)(-1); first.m_value = (u32)(-1);\n"
- " SortData end; end.m_key = nDst; end.m_value = nDst;\n"
- " SortData iData = (gIdx==0)? first: src[gIdx-1];\n"
- " SortData jData = (gIdx==nSrc)? end: src[gIdx];\n"
- " if( iData.m_key != jData.m_key )\n"
- " {\n"
- "// for(u32 k=iData.m_key+1; k<=min(jData.m_key, nDst-1); k++)\n"
- " u32 k = jData.m_key;\n"
- " {\n"
- " dst[k] = gIdx;\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "__kernel\n"
- "void SearchSortDataUpperKernel(__global SortData* src, __global u32 *dst, \n"
- " unsigned int nSrc, unsigned int nDst)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX+1;\n"
- " if( gIdx < nSrc+1 )\n"
- " {\n"
- " SortData first; first.m_key = 0; first.m_value = 0;\n"
- " SortData end; end.m_key = nDst; end.m_value = nDst;\n"
- " SortData iData = src[gIdx-1];\n"
- " SortData jData = (gIdx==nSrc)? end: src[gIdx];\n"
- " if( iData.m_key != jData.m_key )\n"
- " {\n"
- " u32 k = iData.m_key;\n"
- " {\n"
- " dst[k] = gIdx;\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "__kernel\n"
- "void SubtractKernel(__global u32* A, __global u32 *B, __global u32 *C, \n"
- " unsigned int nSrc, unsigned int nDst)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " \n"
- " if( gIdx < nDst )\n"
- " {\n"
- " C[gIdx] = A[gIdx] - B[gIdx];\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernels.cl b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernels.cl
deleted file mode 100644
index 2eee5752ec..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernels.cl
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-
-typedef unsigned int u32;
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-
-#define make_uint4 (uint4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-typedef struct
-{
- int m_n;
- int m_padding[3];
-} ConstBuffer;
-
-
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void Copy1F4Kernel(__global float4* dst, __global float4* src,
- ConstBuffer cb)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < cb.m_n )
- {
- float4 a0 = src[gIdx];
-
- dst[ gIdx ] = a0;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void Copy2F4Kernel(__global float4* dst, __global float4* src,
- ConstBuffer cb)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( 2*gIdx <= cb.m_n )
- {
- float4 a0 = src[gIdx*2+0];
- float4 a1 = src[gIdx*2+1];
-
- dst[ gIdx*2+0 ] = a0;
- dst[ gIdx*2+1 ] = a1;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void Copy4F4Kernel(__global float4* dst, __global float4* src,
- ConstBuffer cb)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( 4*gIdx <= cb.m_n )
- {
- int idx0 = gIdx*4+0;
- int idx1 = gIdx*4+1;
- int idx2 = gIdx*4+2;
- int idx3 = gIdx*4+3;
-
- float4 a0 = src[idx0];
- float4 a1 = src[idx1];
- float4 a2 = src[idx2];
- float4 a3 = src[idx3];
-
- dst[ idx0 ] = a0;
- dst[ idx1 ] = a1;
- dst[ idx2 ] = a2;
- dst[ idx3 ] = a3;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void CopyF1Kernel(__global float* dstF1, __global float* srcF1,
- ConstBuffer cb)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < cb.m_n )
- {
- float a0 = srcF1[gIdx];
-
- dstF1[ gIdx ] = a0;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void CopyF2Kernel(__global float2* dstF2, __global float2* srcF2,
- ConstBuffer cb)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < cb.m_n )
- {
- float2 a0 = srcF2[gIdx];
-
- dstF2[ gIdx ] = a0;
- }
-}
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernelsCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernelsCL.h
deleted file mode 100644
index 33c9279462..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/CopyKernelsCL.h
+++ /dev/null
@@ -1,131 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* copyKernelsCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "\n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "\n"
- "typedef unsigned int u32;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "\n"
- "#define make_uint4 (uint4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "\n"
- "typedef struct\n"
- "{\n"
- " int m_n;\n"
- " int m_padding[3];\n"
- "} ConstBuffer;\n"
- "\n"
- "\n"
- "\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void Copy1F4Kernel(__global float4* dst, __global float4* src, \n"
- " ConstBuffer cb)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- "\n"
- " if( gIdx < cb.m_n )\n"
- " {\n"
- " float4 a0 = src[gIdx];\n"
- "\n"
- " dst[ gIdx ] = a0;\n"
- " }\n"
- "}\n"
- "\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void Copy2F4Kernel(__global float4* dst, __global float4* src, \n"
- " ConstBuffer cb)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- "\n"
- " if( 2*gIdx <= cb.m_n )\n"
- " {\n"
- " float4 a0 = src[gIdx*2+0];\n"
- " float4 a1 = src[gIdx*2+1];\n"
- "\n"
- " dst[ gIdx*2+0 ] = a0;\n"
- " dst[ gIdx*2+1 ] = a1;\n"
- " }\n"
- "}\n"
- "\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void Copy4F4Kernel(__global float4* dst, __global float4* src, \n"
- " ConstBuffer cb)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- "\n"
- " if( 4*gIdx <= cb.m_n )\n"
- " {\n"
- " int idx0 = gIdx*4+0;\n"
- " int idx1 = gIdx*4+1;\n"
- " int idx2 = gIdx*4+2;\n"
- " int idx3 = gIdx*4+3;\n"
- "\n"
- " float4 a0 = src[idx0];\n"
- " float4 a1 = src[idx1];\n"
- " float4 a2 = src[idx2];\n"
- " float4 a3 = src[idx3];\n"
- "\n"
- " dst[ idx0 ] = a0;\n"
- " dst[ idx1 ] = a1;\n"
- " dst[ idx2 ] = a2;\n"
- " dst[ idx3 ] = a3;\n"
- " }\n"
- "}\n"
- "\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void CopyF1Kernel(__global float* dstF1, __global float* srcF1, \n"
- " ConstBuffer cb)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- "\n"
- " if( gIdx < cb.m_n )\n"
- " {\n"
- " float a0 = srcF1[gIdx];\n"
- "\n"
- " dstF1[ gIdx ] = a0;\n"
- " }\n"
- "}\n"
- "\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void CopyF2Kernel(__global float2* dstF2, __global float2* srcF2, \n"
- " ConstBuffer cb)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- "\n"
- " if( gIdx < cb.m_n )\n"
- " {\n"
- " float2 a0 = srcF2[gIdx];\n"
- "\n"
- " dstF2[ gIdx ] = a0;\n"
- " }\n"
- "}\n"
- "\n"
- "\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernels.cl b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernels.cl
deleted file mode 100644
index 71c31075dd..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernels.cl
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-
-typedef unsigned int u32;
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-
-#define make_uint4 (uint4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-typedef struct
-{
- union
- {
- int4 m_data;
- uint4 m_unsignedData;
- float m_floatData;
- };
- int m_offset;
- int m_n;
- int m_padding[2];
-} ConstBuffer;
-
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void FillIntKernel(__global int* dstInt, int num_elements, int value, const int offset)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < num_elements )
- {
- dstInt[ offset+gIdx ] = value;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void FillFloatKernel(__global float* dstFloat, int num_elements, float value, const int offset)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < num_elements )
- {
- dstFloat[ offset+gIdx ] = value;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void FillUnsignedIntKernel(__global unsigned int* dstInt, const int num, const unsigned int value, const int offset)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < num )
- {
- dstInt[ offset+gIdx ] = value;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void FillInt2Kernel(__global int2* dstInt2, const int num, const int2 value, const int offset)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < num )
- {
- dstInt2[ gIdx + offset] = make_int2( value.x, value.y );
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(64,1,1)))
-void FillInt4Kernel(__global int4* dstInt4, const int num, const int4 value, const int offset)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < num )
- {
- dstInt4[ offset+gIdx ] = value;
- }
-}
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernelsCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernelsCL.h
deleted file mode 100644
index 983e652270..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/FillKernelsCL.h
+++ /dev/null
@@ -1,90 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* fillKernelsCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "typedef unsigned int u32;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define make_uint4 (uint4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "typedef struct\n"
- "{\n"
- " union\n"
- " {\n"
- " int4 m_data;\n"
- " uint4 m_unsignedData;\n"
- " float m_floatData;\n"
- " };\n"
- " int m_offset;\n"
- " int m_n;\n"
- " int m_padding[2];\n"
- "} ConstBuffer;\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void FillIntKernel(__global int* dstInt, int num_elements, int value, const int offset)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < num_elements )\n"
- " {\n"
- " dstInt[ offset+gIdx ] = value;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void FillFloatKernel(__global float* dstFloat, int num_elements, float value, const int offset)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < num_elements )\n"
- " {\n"
- " dstFloat[ offset+gIdx ] = value;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void FillUnsignedIntKernel(__global unsigned int* dstInt, const int num, const unsigned int value, const int offset)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < num )\n"
- " {\n"
- " dstInt[ offset+gIdx ] = value;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void FillInt2Kernel(__global int2* dstInt2, const int num, const int2 value, const int offset)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < num )\n"
- " {\n"
- " dstInt2[ gIdx + offset] = make_int2( value.x, value.y );\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(64,1,1)))\n"
- "void FillInt4Kernel(__global int4* dstInt4, const int num, const int4 value, const int offset)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < num )\n"
- " {\n"
- " dstInt4[ offset+gIdx ] = value;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanFloat4Kernels.cl b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanFloat4Kernels.cl
deleted file mode 100644
index c9da79854a..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanFloat4Kernels.cl
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-typedef unsigned int u32;
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-
-// takahiro end
-#define WG_SIZE 128
-#define m_numElems x
-#define m_numBlocks y
-#define m_numScanBlocks z
-
-/*typedef struct
-{
- uint m_numElems;
- uint m_numBlocks;
- uint m_numScanBlocks;
- uint m_padding[1];
-} ConstBuffer;
-*/
-
-float4 ScanExclusiveFloat4(__local float4* data, u32 n, int lIdx, int lSize)
-{
- float4 blocksum;
- int offset = 1;
- for(int nActive=n>>1; nActive>0; nActive>>=1, offset<<=1)
- {
- GROUP_LDS_BARRIER;
- for(int iIdx=lIdx; iIdx<nActive; iIdx+=lSize)
- {
- int ai = offset*(2*iIdx+1)-1;
- int bi = offset*(2*iIdx+2)-1;
- data[bi] += data[ai];
- }
- }
-
- GROUP_LDS_BARRIER;
-
- if( lIdx == 0 )
- {
- blocksum = data[ n-1 ];
- data[ n-1 ] = 0;
- }
-
- GROUP_LDS_BARRIER;
-
- offset >>= 1;
- for(int nActive=1; nActive<n; nActive<<=1, offset>>=1 )
- {
- GROUP_LDS_BARRIER;
- for( int iIdx = lIdx; iIdx<nActive; iIdx += lSize )
- {
- int ai = offset*(2*iIdx+1)-1;
- int bi = offset*(2*iIdx+2)-1;
- float4 temp = data[ai];
- data[ai] = data[bi];
- data[bi] += temp;
- }
- }
- GROUP_LDS_BARRIER;
-
- return blocksum;
-}
-
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-__kernel
-void LocalScanKernel(__global float4* dst, __global float4* src, __global float4* sumBuffer, uint4 cb)
-{
- __local float4 ldsData[WG_SIZE*2];
-
- int gIdx = GET_GLOBAL_IDX;
- int lIdx = GET_LOCAL_IDX;
-
- ldsData[2*lIdx] = ( 2*gIdx < cb.m_numElems )? src[2*gIdx]: 0;
- ldsData[2*lIdx + 1] = ( 2*gIdx+1 < cb.m_numElems )? src[2*gIdx + 1]: 0;
-
- float4 sum = ScanExclusiveFloat4(ldsData, WG_SIZE*2, GET_LOCAL_IDX, GET_GROUP_SIZE);
-
- if( lIdx == 0 )
- sumBuffer[GET_GROUP_IDX] = sum;
-
- if( (2*gIdx) < cb.m_numElems )
- {
- dst[2*gIdx] = ldsData[2*lIdx];
- }
- if( (2*gIdx + 1) < cb.m_numElems )
- {
- dst[2*gIdx + 1] = ldsData[2*lIdx + 1];
- }
-}
-
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-__kernel
-void AddOffsetKernel(__global float4* dst, __global float4* blockSum, uint4 cb)
-{
- const u32 blockSize = WG_SIZE*2;
-
- int myIdx = GET_GROUP_IDX+1;
- int lIdx = GET_LOCAL_IDX;
-
- float4 iBlockSum = blockSum[myIdx];
-
- int endValue = min((myIdx+1)*(blockSize), cb.m_numElems);
- for(int i=myIdx*blockSize+lIdx; i<endValue; i+=GET_GROUP_SIZE)
- {
- dst[i] += iBlockSum;
- }
-}
-
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-__kernel
-void TopLevelScanKernel(__global float4* dst, uint4 cb)
-{
- __local float4 ldsData[2048];
- int gIdx = GET_GLOBAL_IDX;
- int lIdx = GET_LOCAL_IDX;
- int lSize = GET_GROUP_SIZE;
-
- for(int i=lIdx; i<cb.m_numScanBlocks; i+=lSize )
- {
- ldsData[i] = (i<cb.m_numBlocks)? dst[i]:0;
- }
-
- GROUP_LDS_BARRIER;
-
- float4 sum = ScanExclusiveFloat4(ldsData, cb.m_numScanBlocks, GET_LOCAL_IDX, GET_GROUP_SIZE);
-
- for(int i=lIdx; i<cb.m_numBlocks; i+=lSize )
- {
- dst[i] = ldsData[i];
- }
-
- if( gIdx == 0 )
- {
- dst[cb.m_numBlocks] = sum;
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernels.cl b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernels.cl
deleted file mode 100644
index 963cc1e48e..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernels.cl
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-typedef unsigned int u32;
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-
-// takahiro end
-#define WG_SIZE 128
-#define m_numElems x
-#define m_numBlocks y
-#define m_numScanBlocks z
-
-/*typedef struct
-{
- uint m_numElems;
- uint m_numBlocks;
- uint m_numScanBlocks;
- uint m_padding[1];
-} ConstBuffer;
-*/
-
-u32 ScanExclusive(__local u32* data, u32 n, int lIdx, int lSize)
-{
- u32 blocksum;
- int offset = 1;
- for(int nActive=n>>1; nActive>0; nActive>>=1, offset<<=1)
- {
- GROUP_LDS_BARRIER;
- for(int iIdx=lIdx; iIdx<nActive; iIdx+=lSize)
- {
- int ai = offset*(2*iIdx+1)-1;
- int bi = offset*(2*iIdx+2)-1;
- data[bi] += data[ai];
- }
- }
-
- GROUP_LDS_BARRIER;
-
- if( lIdx == 0 )
- {
- blocksum = data[ n-1 ];
- data[ n-1 ] = 0;
- }
-
- GROUP_LDS_BARRIER;
-
- offset >>= 1;
- for(int nActive=1; nActive<n; nActive<<=1, offset>>=1 )
- {
- GROUP_LDS_BARRIER;
- for( int iIdx = lIdx; iIdx<nActive; iIdx += lSize )
- {
- int ai = offset*(2*iIdx+1)-1;
- int bi = offset*(2*iIdx+2)-1;
- u32 temp = data[ai];
- data[ai] = data[bi];
- data[bi] += temp;
- }
- }
- GROUP_LDS_BARRIER;
-
- return blocksum;
-}
-
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-__kernel
-void LocalScanKernel(__global u32* dst, __global u32 *src, __global u32 *sumBuffer,
- uint4 cb)
-{
- __local u32 ldsData[WG_SIZE*2];
-
- int gIdx = GET_GLOBAL_IDX;
- int lIdx = GET_LOCAL_IDX;
-
- ldsData[2*lIdx] = ( 2*gIdx < cb.m_numElems )? src[2*gIdx]: 0;
- ldsData[2*lIdx + 1] = ( 2*gIdx+1 < cb.m_numElems )? src[2*gIdx + 1]: 0;
-
- u32 sum = ScanExclusive(ldsData, WG_SIZE*2, GET_LOCAL_IDX, GET_GROUP_SIZE);
-
- if( lIdx == 0 ) sumBuffer[GET_GROUP_IDX] = sum;
-
- if( (2*gIdx) < cb.m_numElems )
- {
- dst[2*gIdx] = ldsData[2*lIdx];
- }
- if( (2*gIdx + 1) < cb.m_numElems )
- {
- dst[2*gIdx + 1] = ldsData[2*lIdx + 1];
- }
-}
-
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-__kernel
-void AddOffsetKernel(__global u32 *dst, __global u32 *blockSum, uint4 cb)
-{
- const u32 blockSize = WG_SIZE*2;
-
- int myIdx = GET_GROUP_IDX+1;
- int lIdx = GET_LOCAL_IDX;
-
- u32 iBlockSum = blockSum[myIdx];
-
- int endValue = min((myIdx+1)*(blockSize), cb.m_numElems);
- for(int i=myIdx*blockSize+lIdx; i<endValue; i+=GET_GROUP_SIZE)
- {
- dst[i] += iBlockSum;
- }
-}
-
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-__kernel
-void TopLevelScanKernel(__global u32* dst, uint4 cb)
-{
- __local u32 ldsData[2048];
- int gIdx = GET_GLOBAL_IDX;
- int lIdx = GET_LOCAL_IDX;
- int lSize = GET_GROUP_SIZE;
-
- for(int i=lIdx; i<cb.m_numScanBlocks; i+=lSize )
- {
- ldsData[i] = (i<cb.m_numBlocks)? dst[i]:0;
- }
-
- GROUP_LDS_BARRIER;
-
- u32 sum = ScanExclusive(ldsData, cb.m_numScanBlocks, GET_LOCAL_IDX, GET_GROUP_SIZE);
-
- for(int i=lIdx; i<cb.m_numBlocks; i+=lSize )
- {
- dst[i] = ldsData[i];
- }
-
- if( gIdx == 0 )
- {
- dst[cb.m_numBlocks] = sum;
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsCL.h
deleted file mode 100644
index fc5e7b865c..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsCL.h
+++ /dev/null
@@ -1,128 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* prefixScanKernelsCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "typedef unsigned int u32;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "// takahiro end\n"
- "#define WG_SIZE 128 \n"
- "#define m_numElems x\n"
- "#define m_numBlocks y\n"
- "#define m_numScanBlocks z\n"
- "/*typedef struct\n"
- "{\n"
- " uint m_numElems;\n"
- " uint m_numBlocks;\n"
- " uint m_numScanBlocks;\n"
- " uint m_padding[1];\n"
- "} ConstBuffer;\n"
- "*/\n"
- "u32 ScanExclusive(__local u32* data, u32 n, int lIdx, int lSize)\n"
- "{\n"
- " u32 blocksum;\n"
- " int offset = 1;\n"
- " for(int nActive=n>>1; nActive>0; nActive>>=1, offset<<=1)\n"
- " {\n"
- " GROUP_LDS_BARRIER;\n"
- " for(int iIdx=lIdx; iIdx<nActive; iIdx+=lSize)\n"
- " {\n"
- " int ai = offset*(2*iIdx+1)-1;\n"
- " int bi = offset*(2*iIdx+2)-1;\n"
- " data[bi] += data[ai];\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " if( lIdx == 0 )\n"
- " {\n"
- " blocksum = data[ n-1 ];\n"
- " data[ n-1 ] = 0;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " offset >>= 1;\n"
- " for(int nActive=1; nActive<n; nActive<<=1, offset>>=1 )\n"
- " {\n"
- " GROUP_LDS_BARRIER;\n"
- " for( int iIdx = lIdx; iIdx<nActive; iIdx += lSize )\n"
- " {\n"
- " int ai = offset*(2*iIdx+1)-1;\n"
- " int bi = offset*(2*iIdx+2)-1;\n"
- " u32 temp = data[ai];\n"
- " data[ai] = data[bi];\n"
- " data[bi] += temp;\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " return blocksum;\n"
- "}\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "__kernel\n"
- "void LocalScanKernel(__global u32* dst, __global u32 *src, __global u32 *sumBuffer,\n"
- " uint4 cb)\n"
- "{\n"
- " __local u32 ldsData[WG_SIZE*2];\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " ldsData[2*lIdx] = ( 2*gIdx < cb.m_numElems )? src[2*gIdx]: 0;\n"
- " ldsData[2*lIdx + 1] = ( 2*gIdx+1 < cb.m_numElems )? src[2*gIdx + 1]: 0;\n"
- " u32 sum = ScanExclusive(ldsData, WG_SIZE*2, GET_LOCAL_IDX, GET_GROUP_SIZE);\n"
- " if( lIdx == 0 ) sumBuffer[GET_GROUP_IDX] = sum;\n"
- " if( (2*gIdx) < cb.m_numElems )\n"
- " {\n"
- " dst[2*gIdx] = ldsData[2*lIdx];\n"
- " }\n"
- " if( (2*gIdx + 1) < cb.m_numElems )\n"
- " {\n"
- " dst[2*gIdx + 1] = ldsData[2*lIdx + 1];\n"
- " }\n"
- "}\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "__kernel\n"
- "void AddOffsetKernel(__global u32 *dst, __global u32 *blockSum, uint4 cb)\n"
- "{\n"
- " const u32 blockSize = WG_SIZE*2;\n"
- " int myIdx = GET_GROUP_IDX+1;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " u32 iBlockSum = blockSum[myIdx];\n"
- " int endValue = min((myIdx+1)*(blockSize), cb.m_numElems);\n"
- " for(int i=myIdx*blockSize+lIdx; i<endValue; i+=GET_GROUP_SIZE)\n"
- " {\n"
- " dst[i] += iBlockSum;\n"
- " }\n"
- "}\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "__kernel\n"
- "void TopLevelScanKernel(__global u32* dst, uint4 cb)\n"
- "{\n"
- " __local u32 ldsData[2048];\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " int lSize = GET_GROUP_SIZE;\n"
- " for(int i=lIdx; i<cb.m_numScanBlocks; i+=lSize )\n"
- " {\n"
- " ldsData[i] = (i<cb.m_numBlocks)? dst[i]:0;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " u32 sum = ScanExclusive(ldsData, cb.m_numScanBlocks, GET_LOCAL_IDX, GET_GROUP_SIZE);\n"
- " for(int i=lIdx; i<cb.m_numBlocks; i+=lSize )\n"
- " {\n"
- " dst[i] = ldsData[i];\n"
- " }\n"
- " if( gIdx == 0 )\n"
- " {\n"
- " dst[cb.m_numBlocks] = sum;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsFloat4CL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsFloat4CL.h
deleted file mode 100644
index 15d1bc5195..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/PrefixScanKernelsFloat4CL.h
+++ /dev/null
@@ -1,128 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* prefixScanKernelsFloat4CL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "typedef unsigned int u32;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "// takahiro end\n"
- "#define WG_SIZE 128 \n"
- "#define m_numElems x\n"
- "#define m_numBlocks y\n"
- "#define m_numScanBlocks z\n"
- "/*typedef struct\n"
- "{\n"
- " uint m_numElems;\n"
- " uint m_numBlocks;\n"
- " uint m_numScanBlocks;\n"
- " uint m_padding[1];\n"
- "} ConstBuffer;\n"
- "*/\n"
- "float4 ScanExclusiveFloat4(__local float4* data, u32 n, int lIdx, int lSize)\n"
- "{\n"
- " float4 blocksum;\n"
- " int offset = 1;\n"
- " for(int nActive=n>>1; nActive>0; nActive>>=1, offset<<=1)\n"
- " {\n"
- " GROUP_LDS_BARRIER;\n"
- " for(int iIdx=lIdx; iIdx<nActive; iIdx+=lSize)\n"
- " {\n"
- " int ai = offset*(2*iIdx+1)-1;\n"
- " int bi = offset*(2*iIdx+2)-1;\n"
- " data[bi] += data[ai];\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " if( lIdx == 0 )\n"
- " {\n"
- " blocksum = data[ n-1 ];\n"
- " data[ n-1 ] = 0;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " offset >>= 1;\n"
- " for(int nActive=1; nActive<n; nActive<<=1, offset>>=1 )\n"
- " {\n"
- " GROUP_LDS_BARRIER;\n"
- " for( int iIdx = lIdx; iIdx<nActive; iIdx += lSize )\n"
- " {\n"
- " int ai = offset*(2*iIdx+1)-1;\n"
- " int bi = offset*(2*iIdx+2)-1;\n"
- " float4 temp = data[ai];\n"
- " data[ai] = data[bi];\n"
- " data[bi] += temp;\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " return blocksum;\n"
- "}\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "__kernel\n"
- "void LocalScanKernel(__global float4* dst, __global float4* src, __global float4* sumBuffer, uint4 cb)\n"
- "{\n"
- " __local float4 ldsData[WG_SIZE*2];\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " ldsData[2*lIdx] = ( 2*gIdx < cb.m_numElems )? src[2*gIdx]: 0;\n"
- " ldsData[2*lIdx + 1] = ( 2*gIdx+1 < cb.m_numElems )? src[2*gIdx + 1]: 0;\n"
- " float4 sum = ScanExclusiveFloat4(ldsData, WG_SIZE*2, GET_LOCAL_IDX, GET_GROUP_SIZE);\n"
- " if( lIdx == 0 ) \n"
- " sumBuffer[GET_GROUP_IDX] = sum;\n"
- " if( (2*gIdx) < cb.m_numElems )\n"
- " {\n"
- " dst[2*gIdx] = ldsData[2*lIdx];\n"
- " }\n"
- " if( (2*gIdx + 1) < cb.m_numElems )\n"
- " {\n"
- " dst[2*gIdx + 1] = ldsData[2*lIdx + 1];\n"
- " }\n"
- "}\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "__kernel\n"
- "void AddOffsetKernel(__global float4* dst, __global float4* blockSum, uint4 cb)\n"
- "{\n"
- " const u32 blockSize = WG_SIZE*2;\n"
- " int myIdx = GET_GROUP_IDX+1;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " float4 iBlockSum = blockSum[myIdx];\n"
- " int endValue = min((myIdx+1)*(blockSize), cb.m_numElems);\n"
- " for(int i=myIdx*blockSize+lIdx; i<endValue; i+=GET_GROUP_SIZE)\n"
- " {\n"
- " dst[i] += iBlockSum;\n"
- " }\n"
- "}\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "__kernel\n"
- "void TopLevelScanKernel(__global float4* dst, uint4 cb)\n"
- "{\n"
- " __local float4 ldsData[2048];\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " int lSize = GET_GROUP_SIZE;\n"
- " for(int i=lIdx; i<cb.m_numScanBlocks; i+=lSize )\n"
- " {\n"
- " ldsData[i] = (i<cb.m_numBlocks)? dst[i]:0;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " float4 sum = ScanExclusiveFloat4(ldsData, cb.m_numScanBlocks, GET_LOCAL_IDX, GET_GROUP_SIZE);\n"
- " for(int i=lIdx; i<cb.m_numBlocks; i+=lSize )\n"
- " {\n"
- " dst[i] = ldsData[i];\n"
- " }\n"
- " if( gIdx == 0 )\n"
- " {\n"
- " dst[cb.m_numBlocks] = sum;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32Kernels.cl b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32Kernels.cl
deleted file mode 100644
index 7402e2f3b3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32Kernels.cl
+++ /dev/null
@@ -1,1071 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Author Takahiro Harada
-
-
-//#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-
-typedef unsigned int u32;
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AtomAdd(x, value) atom_add(&(x), value)
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-
-#define make_uint4 (uint4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-#define WG_SIZE 64
-#define ELEMENTS_PER_WORK_ITEM (256/WG_SIZE)
-#define BITS_PER_PASS 4
-#define NUM_BUCKET (1<<BITS_PER_PASS)
-typedef uchar u8;
-
-// this isn't optimization for VLIW. But just reducing writes.
-#define USE_2LEVEL_REDUCE 1
-
-//#define CHECK_BOUNDARY 1
-
-//#define NV_GPU 1
-
-
-// Cypress
-#define nPerWI 16
-// Cayman
-//#define nPerWI 20
-
-#define m_n x
-#define m_nWGs y
-#define m_startBit z
-#define m_nBlocksPerWG w
-
-/*
-typedef struct
-{
- int m_n;
- int m_nWGs;
- int m_startBit;
- int m_nBlocksPerWG;
-} ConstBuffer;
-*/
-
-typedef struct
-{
- unsigned int m_key;
- unsigned int m_value;
-} SortDataCL;
-
-
-uint prefixScanVectorEx( uint4* data )
-{
- u32 sum = 0;
- u32 tmp = data[0].x;
- data[0].x = sum;
- sum += tmp;
- tmp = data[0].y;
- data[0].y = sum;
- sum += tmp;
- tmp = data[0].z;
- data[0].z = sum;
- sum += tmp;
- tmp = data[0].w;
- data[0].w = sum;
- sum += tmp;
- return sum;
-}
-
-u32 localPrefixSum( u32 pData, uint lIdx, uint* totalSum, __local u32* sorterSharedMemory, int wgSize /*64 or 128*/ )
-{
- { // Set data
- sorterSharedMemory[lIdx] = 0;
- sorterSharedMemory[lIdx+wgSize] = pData;
- }
-
- GROUP_LDS_BARRIER;
-
- { // Prefix sum
- int idx = 2*lIdx + (wgSize+1);
-#if defined(USE_2LEVEL_REDUCE)
- if( lIdx < 64 )
- {
- u32 u0, u1, u2;
- u0 = sorterSharedMemory[idx-3];
- u1 = sorterSharedMemory[idx-2];
- u2 = sorterSharedMemory[idx-1];
- AtomAdd( sorterSharedMemory[idx], u0+u1+u2 );
- GROUP_MEM_FENCE;
-
- u0 = sorterSharedMemory[idx-12];
- u1 = sorterSharedMemory[idx-8];
- u2 = sorterSharedMemory[idx-4];
- AtomAdd( sorterSharedMemory[idx], u0+u1+u2 );
- GROUP_MEM_FENCE;
-
- u0 = sorterSharedMemory[idx-48];
- u1 = sorterSharedMemory[idx-32];
- u2 = sorterSharedMemory[idx-16];
- AtomAdd( sorterSharedMemory[idx], u0+u1+u2 );
- GROUP_MEM_FENCE;
- if( wgSize > 64 )
- {
- sorterSharedMemory[idx] += sorterSharedMemory[idx-64];
- GROUP_MEM_FENCE;
- }
-
- sorterSharedMemory[idx-1] += sorterSharedMemory[idx-2];
- GROUP_MEM_FENCE;
- }
-#else
- if( lIdx < 64 )
- {
- sorterSharedMemory[idx] += sorterSharedMemory[idx-1];
- GROUP_MEM_FENCE;
- sorterSharedMemory[idx] += sorterSharedMemory[idx-2];
- GROUP_MEM_FENCE;
- sorterSharedMemory[idx] += sorterSharedMemory[idx-4];
- GROUP_MEM_FENCE;
- sorterSharedMemory[idx] += sorterSharedMemory[idx-8];
- GROUP_MEM_FENCE;
- sorterSharedMemory[idx] += sorterSharedMemory[idx-16];
- GROUP_MEM_FENCE;
- sorterSharedMemory[idx] += sorterSharedMemory[idx-32];
- GROUP_MEM_FENCE;
- if( wgSize > 64 )
- {
- sorterSharedMemory[idx] += sorterSharedMemory[idx-64];
- GROUP_MEM_FENCE;
- }
-
- sorterSharedMemory[idx-1] += sorterSharedMemory[idx-2];
- GROUP_MEM_FENCE;
- }
-#endif
- }
-
- GROUP_LDS_BARRIER;
-
- *totalSum = sorterSharedMemory[wgSize*2-1];
- u32 addValue = sorterSharedMemory[lIdx+wgSize-1];
- return addValue;
-}
-
-//__attribute__((reqd_work_group_size(128,1,1)))
-uint4 localPrefixSum128V( uint4 pData, uint lIdx, uint* totalSum, __local u32* sorterSharedMemory )
-{
- u32 s4 = prefixScanVectorEx( &pData );
- u32 rank = localPrefixSum( s4, lIdx, totalSum, sorterSharedMemory, 128 );
- return pData + make_uint4( rank, rank, rank, rank );
-}
-
-
-//__attribute__((reqd_work_group_size(64,1,1)))
-uint4 localPrefixSum64V( uint4 pData, uint lIdx, uint* totalSum, __local u32* sorterSharedMemory )
-{
- u32 s4 = prefixScanVectorEx( &pData );
- u32 rank = localPrefixSum( s4, lIdx, totalSum, sorterSharedMemory, 64 );
- return pData + make_uint4( rank, rank, rank, rank );
-}
-
-u32 unpack4Key( u32 key, int keyIdx ){ return (key>>(keyIdx*8)) & 0xff;}
-
-u32 bit8Scan(u32 v)
-{
- return (v<<8) + (v<<16) + (v<<24);
-}
-
-//===
-
-
-
-
-#define MY_HISTOGRAM(idx) localHistogramMat[(idx)*WG_SIZE+lIdx]
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void StreamCountKernel( __global u32* gSrc, __global u32* histogramOut, int4 cb )
-{
- __local u32 localHistogramMat[NUM_BUCKET*WG_SIZE];
-
- u32 gIdx = GET_GLOBAL_IDX;
- u32 lIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- u32 wgSize = GET_GROUP_SIZE;
- const int startBit = cb.m_startBit;
- const int n = cb.m_n;
- const int nWGs = cb.m_nWGs;
- const int nBlocksPerWG = cb.m_nBlocksPerWG;
-
- for(int i=0; i<NUM_BUCKET; i++)
- {
- MY_HISTOGRAM(i) = 0;
- }
-
- GROUP_LDS_BARRIER;
-
- const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;
- u32 localKey;
-
- int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;
-
- int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;
-
- for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)
- {
- // MY_HISTOGRAM( localKeys.x ) ++ is much expensive than atomic add as it requires read and write while atomics can just add on AMD
- // Using registers didn't perform well. It seems like use localKeys to address requires a lot of alu ops
- // AMD: AtomInc performs better while NV prefers ++
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
- {
-#if defined(CHECK_BOUNDARY)
- if( addr+i < n )
-#endif
- {
- localKey = (gSrc[addr+i]>>startBit) & 0xf;
-#if defined(NV_GPU)
- MY_HISTOGRAM( localKey )++;
-#else
- AtomInc( MY_HISTOGRAM( localKey ) );
-#endif
- }
- }
- }
-
- GROUP_LDS_BARRIER;
-
- if( lIdx < NUM_BUCKET )
- {
- u32 sum = 0;
- for(int i=0; i<GET_GROUP_SIZE; i++)
- {
- sum += localHistogramMat[lIdx*WG_SIZE+(i+lIdx)%GET_GROUP_SIZE];
- }
- histogramOut[lIdx*nWGs+wgIdx] = sum;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void StreamCountSortDataKernel( __global SortDataCL* gSrc, __global u32* histogramOut, int4 cb )
-{
- __local u32 localHistogramMat[NUM_BUCKET*WG_SIZE];
-
- u32 gIdx = GET_GLOBAL_IDX;
- u32 lIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- u32 wgSize = GET_GROUP_SIZE;
- const int startBit = cb.m_startBit;
- const int n = cb.m_n;
- const int nWGs = cb.m_nWGs;
- const int nBlocksPerWG = cb.m_nBlocksPerWG;
-
- for(int i=0; i<NUM_BUCKET; i++)
- {
- MY_HISTOGRAM(i) = 0;
- }
-
- GROUP_LDS_BARRIER;
-
- const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;
- u32 localKey;
-
- int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;
-
- int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;
-
- for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)
- {
- // MY_HISTOGRAM( localKeys.x ) ++ is much expensive than atomic add as it requires read and write while atomics can just add on AMD
- // Using registers didn't perform well. It seems like use localKeys to address requires a lot of alu ops
- // AMD: AtomInc performs better while NV prefers ++
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
- {
-#if defined(CHECK_BOUNDARY)
- if( addr+i < n )
-#endif
- {
- localKey = (gSrc[addr+i].m_key>>startBit) & 0xf;
-#if defined(NV_GPU)
- MY_HISTOGRAM( localKey )++;
-#else
- AtomInc( MY_HISTOGRAM( localKey ) );
-#endif
- }
- }
- }
-
- GROUP_LDS_BARRIER;
-
- if( lIdx < NUM_BUCKET )
- {
- u32 sum = 0;
- for(int i=0; i<GET_GROUP_SIZE; i++)
- {
- sum += localHistogramMat[lIdx*WG_SIZE+(i+lIdx)%GET_GROUP_SIZE];
- }
- histogramOut[lIdx*nWGs+wgIdx] = sum;
- }
-}
-
-#define nPerLane (nPerWI/4)
-
-// NUM_BUCKET*nWGs < 128*nPerWI
-__kernel
-__attribute__((reqd_work_group_size(128,1,1)))
-void PrefixScanKernel( __global u32* wHistogram1, int4 cb )
-{
- __local u32 ldsTopScanData[128*2];
-
- u32 lIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- const int nWGs = cb.m_nWGs;
-
- u32 data[nPerWI];
- for(int i=0; i<nPerWI; i++)
- {
- data[i] = 0;
- if( (nPerWI*lIdx+i) < NUM_BUCKET*nWGs )
- data[i] = wHistogram1[nPerWI*lIdx+i];
- }
-
- uint4 myData = make_uint4(0,0,0,0);
-
- for(int i=0; i<nPerLane; i++)
- {
- myData.x += data[nPerLane*0+i];
- myData.y += data[nPerLane*1+i];
- myData.z += data[nPerLane*2+i];
- myData.w += data[nPerLane*3+i];
- }
-
- uint totalSum;
- uint4 scanned = localPrefixSum128V( myData, lIdx, &totalSum, ldsTopScanData );
-
-// for(int j=0; j<4; j++) // somehow it introduces a lot of branches
- { int j = 0;
- u32 sum = 0;
- for(int i=0; i<nPerLane; i++)
- {
- u32 tmp = data[nPerLane*j+i];
- data[nPerLane*j+i] = sum;
- sum += tmp;
- }
- }
- { int j = 1;
- u32 sum = 0;
- for(int i=0; i<nPerLane; i++)
- {
- u32 tmp = data[nPerLane*j+i];
- data[nPerLane*j+i] = sum;
- sum += tmp;
- }
- }
- { int j = 2;
- u32 sum = 0;
- for(int i=0; i<nPerLane; i++)
- {
- u32 tmp = data[nPerLane*j+i];
- data[nPerLane*j+i] = sum;
- sum += tmp;
- }
- }
- { int j = 3;
- u32 sum = 0;
- for(int i=0; i<nPerLane; i++)
- {
- u32 tmp = data[nPerLane*j+i];
- data[nPerLane*j+i] = sum;
- sum += tmp;
- }
- }
-
- for(int i=0; i<nPerLane; i++)
- {
- data[nPerLane*0+i] += scanned.x;
- data[nPerLane*1+i] += scanned.y;
- data[nPerLane*2+i] += scanned.z;
- data[nPerLane*3+i] += scanned.w;
- }
-
- for(int i=0; i<nPerWI; i++)
- {
- int index = nPerWI*lIdx+i;
- if (index < NUM_BUCKET*nWGs)
- wHistogram1[nPerWI*lIdx+i] = data[i];
- }
-}
-
-// 4 scan, 4 exchange
-void sort4Bits(u32 sortData[4], int startBit, int lIdx, __local u32* ldsSortData)
-{
- for(int bitIdx=0; bitIdx<BITS_PER_PASS; bitIdx++)
- {
- u32 mask = (1<<bitIdx);
- uint4 cmpResult = make_uint4( (sortData[0]>>startBit) & mask, (sortData[1]>>startBit) & mask, (sortData[2]>>startBit) & mask, (sortData[3]>>startBit) & mask );
- uint4 prefixSum = SELECT_UINT4( make_uint4(1,1,1,1), make_uint4(0,0,0,0), cmpResult != make_uint4(0,0,0,0) );
- u32 total;
- prefixSum = localPrefixSum64V( prefixSum, lIdx, &total, ldsSortData );
- {
- uint4 localAddr = make_uint4(lIdx*4+0,lIdx*4+1,lIdx*4+2,lIdx*4+3);
- uint4 dstAddr = localAddr - prefixSum + make_uint4( total, total, total, total );
- dstAddr = SELECT_UINT4( prefixSum, dstAddr, cmpResult != make_uint4(0, 0, 0, 0) );
-
- GROUP_LDS_BARRIER;
-
- ldsSortData[dstAddr.x] = sortData[0];
- ldsSortData[dstAddr.y] = sortData[1];
- ldsSortData[dstAddr.z] = sortData[2];
- ldsSortData[dstAddr.w] = sortData[3];
-
- GROUP_LDS_BARRIER;
-
- sortData[0] = ldsSortData[localAddr.x];
- sortData[1] = ldsSortData[localAddr.y];
- sortData[2] = ldsSortData[localAddr.z];
- sortData[3] = ldsSortData[localAddr.w];
-
- GROUP_LDS_BARRIER;
- }
- }
-}
-
-// 2 scan, 2 exchange
-void sort4Bits1(u32 sortData[4], int startBit, int lIdx, __local u32* ldsSortData)
-{
- for(uint ibit=0; ibit<BITS_PER_PASS; ibit+=2)
- {
- uint4 b = make_uint4((sortData[0]>>(startBit+ibit)) & 0x3,
- (sortData[1]>>(startBit+ibit)) & 0x3,
- (sortData[2]>>(startBit+ibit)) & 0x3,
- (sortData[3]>>(startBit+ibit)) & 0x3);
-
- u32 key4;
- u32 sKeyPacked[4] = { 0, 0, 0, 0 };
- {
- sKeyPacked[0] |= 1<<(8*b.x);
- sKeyPacked[1] |= 1<<(8*b.y);
- sKeyPacked[2] |= 1<<(8*b.z);
- sKeyPacked[3] |= 1<<(8*b.w);
-
- key4 = sKeyPacked[0] + sKeyPacked[1] + sKeyPacked[2] + sKeyPacked[3];
- }
-
- u32 rankPacked;
- u32 sumPacked;
- {
- rankPacked = localPrefixSum( key4, lIdx, &sumPacked, ldsSortData, WG_SIZE );
- }
-
- GROUP_LDS_BARRIER;
-
- u32 newOffset[4] = { 0,0,0,0 };
- {
- u32 sumScanned = bit8Scan( sumPacked );
-
- u32 scannedKeys[4];
- scannedKeys[0] = 1<<(8*b.x);
- scannedKeys[1] = 1<<(8*b.y);
- scannedKeys[2] = 1<<(8*b.z);
- scannedKeys[3] = 1<<(8*b.w);
- { // 4 scans at once
- u32 sum4 = 0;
- for(int ie=0; ie<4; ie++)
- {
- u32 tmp = scannedKeys[ie];
- scannedKeys[ie] = sum4;
- sum4 += tmp;
- }
- }
-
- {
- u32 sumPlusRank = sumScanned + rankPacked;
- { u32 ie = b.x;
- scannedKeys[0] += sumPlusRank;
- newOffset[0] = unpack4Key( scannedKeys[0], ie );
- }
- { u32 ie = b.y;
- scannedKeys[1] += sumPlusRank;
- newOffset[1] = unpack4Key( scannedKeys[1], ie );
- }
- { u32 ie = b.z;
- scannedKeys[2] += sumPlusRank;
- newOffset[2] = unpack4Key( scannedKeys[2], ie );
- }
- { u32 ie = b.w;
- scannedKeys[3] += sumPlusRank;
- newOffset[3] = unpack4Key( scannedKeys[3], ie );
- }
- }
- }
-
-
- GROUP_LDS_BARRIER;
-
- {
- ldsSortData[newOffset[0]] = sortData[0];
- ldsSortData[newOffset[1]] = sortData[1];
- ldsSortData[newOffset[2]] = sortData[2];
- ldsSortData[newOffset[3]] = sortData[3];
-
- GROUP_LDS_BARRIER;
-
- u32 dstAddr = 4*lIdx;
- sortData[0] = ldsSortData[dstAddr+0];
- sortData[1] = ldsSortData[dstAddr+1];
- sortData[2] = ldsSortData[dstAddr+2];
- sortData[3] = ldsSortData[dstAddr+3];
-
- GROUP_LDS_BARRIER;
- }
- }
-}
-
-#define SET_HISTOGRAM(setIdx, key) ldsSortData[(setIdx)*NUM_BUCKET+key]
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SortAndScatterKernel( __global const u32* restrict gSrc, __global const u32* rHistogram, __global u32* restrict gDst, int4 cb )
-{
- __local u32 ldsSortData[WG_SIZE*ELEMENTS_PER_WORK_ITEM+16];
- __local u32 localHistogramToCarry[NUM_BUCKET];
- __local u32 localHistogram[NUM_BUCKET*2];
-
- u32 gIdx = GET_GLOBAL_IDX;
- u32 lIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- u32 wgSize = GET_GROUP_SIZE;
-
- const int n = cb.m_n;
- const int nWGs = cb.m_nWGs;
- const int startBit = cb.m_startBit;
- const int nBlocksPerWG = cb.m_nBlocksPerWG;
-
- if( lIdx < (NUM_BUCKET) )
- {
- localHistogramToCarry[lIdx] = rHistogram[lIdx*nWGs + wgIdx];
- }
-
- GROUP_LDS_BARRIER;
-
- const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;
-
- int nBlocks = n/blockSize - nBlocksPerWG*wgIdx;
-
- int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;
-
- for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)
- {
- u32 myHistogram = 0;
-
- u32 sortData[ELEMENTS_PER_WORK_ITEM];
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
-#if defined(CHECK_BOUNDARY)
- sortData[i] = ( addr+i < n )? gSrc[ addr+i ] : 0xffffffff;
-#else
- sortData[i] = gSrc[ addr+i ];
-#endif
-
- sort4Bits(sortData, startBit, lIdx, ldsSortData);
-
- u32 keys[ELEMENTS_PER_WORK_ITEM];
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
- keys[i] = (sortData[i]>>startBit) & 0xf;
-
- { // create histogram
- u32 setIdx = lIdx/16;
- if( lIdx < NUM_BUCKET )
- {
- localHistogram[lIdx] = 0;
- }
- ldsSortData[lIdx] = 0;
- GROUP_LDS_BARRIER;
-
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
-#if defined(CHECK_BOUNDARY)
- if( addr+i < n )
-#endif
-
-#if defined(NV_GPU)
- SET_HISTOGRAM( setIdx, keys[i] )++;
-#else
- AtomInc( SET_HISTOGRAM( setIdx, keys[i] ) );
-#endif
-
- GROUP_LDS_BARRIER;
-
- uint hIdx = NUM_BUCKET+lIdx;
- if( lIdx < NUM_BUCKET )
- {
- u32 sum = 0;
- for(int i=0; i<WG_SIZE/16; i++)
- {
- sum += SET_HISTOGRAM( i, lIdx );
- }
- myHistogram = sum;
- localHistogram[hIdx] = sum;
- }
- GROUP_LDS_BARRIER;
-
-#if defined(USE_2LEVEL_REDUCE)
- if( lIdx < NUM_BUCKET )
- {
- localHistogram[hIdx] = localHistogram[hIdx-1];
- GROUP_MEM_FENCE;
-
- u32 u0, u1, u2;
- u0 = localHistogram[hIdx-3];
- u1 = localHistogram[hIdx-2];
- u2 = localHistogram[hIdx-1];
- AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );
- GROUP_MEM_FENCE;
- u0 = localHistogram[hIdx-12];
- u1 = localHistogram[hIdx-8];
- u2 = localHistogram[hIdx-4];
- AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );
- GROUP_MEM_FENCE;
- }
-#else
- if( lIdx < NUM_BUCKET )
- {
- localHistogram[hIdx] = localHistogram[hIdx-1];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-1];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-2];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-4];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-8];
- GROUP_MEM_FENCE;
- }
-#endif
- GROUP_LDS_BARRIER;
- }
-
- {
- for(int ie=0; ie<ELEMENTS_PER_WORK_ITEM; ie++)
- {
- int dataIdx = ELEMENTS_PER_WORK_ITEM*lIdx+ie;
- int binIdx = keys[ie];
- int groupOffset = localHistogramToCarry[binIdx];
- int myIdx = dataIdx - localHistogram[NUM_BUCKET+binIdx];
-#if defined(CHECK_BOUNDARY)
- if( addr+ie < n )
-#endif
- gDst[ groupOffset + myIdx ] = sortData[ie];
- }
- }
-
- GROUP_LDS_BARRIER;
-
- if( lIdx < NUM_BUCKET )
- {
- localHistogramToCarry[lIdx] += myHistogram;
- }
- GROUP_LDS_BARRIER;
- }
-}
-
-// 2 scan, 2 exchange
-void sort4Bits1KeyValue(u32 sortData[4], int sortVal[4], int startBit, int lIdx, __local u32* ldsSortData, __local int *ldsSortVal)
-{
- for(uint ibit=0; ibit<BITS_PER_PASS; ibit+=2)
- {
- uint4 b = make_uint4((sortData[0]>>(startBit+ibit)) & 0x3,
- (sortData[1]>>(startBit+ibit)) & 0x3,
- (sortData[2]>>(startBit+ibit)) & 0x3,
- (sortData[3]>>(startBit+ibit)) & 0x3);
-
- u32 key4;
- u32 sKeyPacked[4] = { 0, 0, 0, 0 };
- {
- sKeyPacked[0] |= 1<<(8*b.x);
- sKeyPacked[1] |= 1<<(8*b.y);
- sKeyPacked[2] |= 1<<(8*b.z);
- sKeyPacked[3] |= 1<<(8*b.w);
-
- key4 = sKeyPacked[0] + sKeyPacked[1] + sKeyPacked[2] + sKeyPacked[3];
- }
-
- u32 rankPacked;
- u32 sumPacked;
- {
- rankPacked = localPrefixSum( key4, lIdx, &sumPacked, ldsSortData, WG_SIZE );
- }
-
- GROUP_LDS_BARRIER;
-
- u32 newOffset[4] = { 0,0,0,0 };
- {
- u32 sumScanned = bit8Scan( sumPacked );
-
- u32 scannedKeys[4];
- scannedKeys[0] = 1<<(8*b.x);
- scannedKeys[1] = 1<<(8*b.y);
- scannedKeys[2] = 1<<(8*b.z);
- scannedKeys[3] = 1<<(8*b.w);
- { // 4 scans at once
- u32 sum4 = 0;
- for(int ie=0; ie<4; ie++)
- {
- u32 tmp = scannedKeys[ie];
- scannedKeys[ie] = sum4;
- sum4 += tmp;
- }
- }
-
- {
- u32 sumPlusRank = sumScanned + rankPacked;
- { u32 ie = b.x;
- scannedKeys[0] += sumPlusRank;
- newOffset[0] = unpack4Key( scannedKeys[0], ie );
- }
- { u32 ie = b.y;
- scannedKeys[1] += sumPlusRank;
- newOffset[1] = unpack4Key( scannedKeys[1], ie );
- }
- { u32 ie = b.z;
- scannedKeys[2] += sumPlusRank;
- newOffset[2] = unpack4Key( scannedKeys[2], ie );
- }
- { u32 ie = b.w;
- scannedKeys[3] += sumPlusRank;
- newOffset[3] = unpack4Key( scannedKeys[3], ie );
- }
- }
- }
-
-
- GROUP_LDS_BARRIER;
-
- {
- ldsSortData[newOffset[0]] = sortData[0];
- ldsSortData[newOffset[1]] = sortData[1];
- ldsSortData[newOffset[2]] = sortData[2];
- ldsSortData[newOffset[3]] = sortData[3];
-
- ldsSortVal[newOffset[0]] = sortVal[0];
- ldsSortVal[newOffset[1]] = sortVal[1];
- ldsSortVal[newOffset[2]] = sortVal[2];
- ldsSortVal[newOffset[3]] = sortVal[3];
-
- GROUP_LDS_BARRIER;
-
- u32 dstAddr = 4*lIdx;
- sortData[0] = ldsSortData[dstAddr+0];
- sortData[1] = ldsSortData[dstAddr+1];
- sortData[2] = ldsSortData[dstAddr+2];
- sortData[3] = ldsSortData[dstAddr+3];
-
- sortVal[0] = ldsSortVal[dstAddr+0];
- sortVal[1] = ldsSortVal[dstAddr+1];
- sortVal[2] = ldsSortVal[dstAddr+2];
- sortVal[3] = ldsSortVal[dstAddr+3];
-
- GROUP_LDS_BARRIER;
- }
- }
-}
-
-
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SortAndScatterSortDataKernel( __global const SortDataCL* restrict gSrc, __global const u32* rHistogram, __global SortDataCL* restrict gDst, int4 cb)
-{
- __local int ldsSortData[WG_SIZE*ELEMENTS_PER_WORK_ITEM+16];
- __local int ldsSortVal[WG_SIZE*ELEMENTS_PER_WORK_ITEM+16];
- __local u32 localHistogramToCarry[NUM_BUCKET];
- __local u32 localHistogram[NUM_BUCKET*2];
-
- u32 gIdx = GET_GLOBAL_IDX;
- u32 lIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- u32 wgSize = GET_GROUP_SIZE;
-
- const int n = cb.m_n;
- const int nWGs = cb.m_nWGs;
- const int startBit = cb.m_startBit;
- const int nBlocksPerWG = cb.m_nBlocksPerWG;
-
- if( lIdx < (NUM_BUCKET) )
- {
- localHistogramToCarry[lIdx] = rHistogram[lIdx*nWGs + wgIdx];
- }
-
- GROUP_LDS_BARRIER;
-
-
- const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;
-
- int nBlocks = n/blockSize - nBlocksPerWG*wgIdx;
-
- int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;
-
- for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)
- {
-
- u32 myHistogram = 0;
-
- int sortData[ELEMENTS_PER_WORK_ITEM];
- int sortVal[ELEMENTS_PER_WORK_ITEM];
-
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
-#if defined(CHECK_BOUNDARY)
- {
- sortData[i] = ( addr+i < n )? gSrc[ addr+i ].m_key : 0xffffffff;
- sortVal[i] = ( addr+i < n )? gSrc[ addr+i ].m_value : 0xffffffff;
- }
-#else
- {
- sortData[i] = gSrc[ addr+i ].m_key;
- sortVal[i] = gSrc[ addr+i ].m_value;
- }
-#endif
-
- sort4Bits1KeyValue(sortData, sortVal, startBit, lIdx, ldsSortData, ldsSortVal);
-
- u32 keys[ELEMENTS_PER_WORK_ITEM];
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
- keys[i] = (sortData[i]>>startBit) & 0xf;
-
- { // create histogram
- u32 setIdx = lIdx/16;
- if( lIdx < NUM_BUCKET )
- {
- localHistogram[lIdx] = 0;
- }
- ldsSortData[lIdx] = 0;
- GROUP_LDS_BARRIER;
-
- for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)
-#if defined(CHECK_BOUNDARY)
- if( addr+i < n )
-#endif
-
-#if defined(NV_GPU)
- SET_HISTOGRAM( setIdx, keys[i] )++;
-#else
- AtomInc( SET_HISTOGRAM( setIdx, keys[i] ) );
-#endif
-
- GROUP_LDS_BARRIER;
-
- uint hIdx = NUM_BUCKET+lIdx;
- if( lIdx < NUM_BUCKET )
- {
- u32 sum = 0;
- for(int i=0; i<WG_SIZE/16; i++)
- {
- sum += SET_HISTOGRAM( i, lIdx );
- }
- myHistogram = sum;
- localHistogram[hIdx] = sum;
- }
- GROUP_LDS_BARRIER;
-
-#if defined(USE_2LEVEL_REDUCE)
- if( lIdx < NUM_BUCKET )
- {
- localHistogram[hIdx] = localHistogram[hIdx-1];
- GROUP_MEM_FENCE;
-
- u32 u0, u1, u2;
- u0 = localHistogram[hIdx-3];
- u1 = localHistogram[hIdx-2];
- u2 = localHistogram[hIdx-1];
- AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );
- GROUP_MEM_FENCE;
- u0 = localHistogram[hIdx-12];
- u1 = localHistogram[hIdx-8];
- u2 = localHistogram[hIdx-4];
- AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );
- GROUP_MEM_FENCE;
- }
-#else
- if( lIdx < NUM_BUCKET )
- {
- localHistogram[hIdx] = localHistogram[hIdx-1];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-1];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-2];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-4];
- GROUP_MEM_FENCE;
- localHistogram[hIdx] += localHistogram[hIdx-8];
- GROUP_MEM_FENCE;
- }
-#endif
- GROUP_LDS_BARRIER;
- }
-
- {
- for(int ie=0; ie<ELEMENTS_PER_WORK_ITEM; ie++)
- {
- int dataIdx = ELEMENTS_PER_WORK_ITEM*lIdx+ie;
- int binIdx = keys[ie];
- int groupOffset = localHistogramToCarry[binIdx];
- int myIdx = dataIdx - localHistogram[NUM_BUCKET+binIdx];
-#if defined(CHECK_BOUNDARY)
- if( addr+ie < n )
- {
- if ((groupOffset + myIdx)<n)
- {
- if (sortData[ie]==sortVal[ie])
- {
-
- SortDataCL tmp;
- tmp.m_key = sortData[ie];
- tmp.m_value = sortVal[ie];
- if (tmp.m_key == tmp.m_value)
- gDst[groupOffset + myIdx ] = tmp;
- }
-
- }
- }
-#else
- if ((groupOffset + myIdx)<n)
- {
- gDst[ groupOffset + myIdx ].m_key = sortData[ie];
- gDst[ groupOffset + myIdx ].m_value = sortVal[ie];
- }
-#endif
- }
- }
-
- GROUP_LDS_BARRIER;
-
- if( lIdx < NUM_BUCKET )
- {
- localHistogramToCarry[lIdx] += myHistogram;
- }
- GROUP_LDS_BARRIER;
- }
-}
-
-
-
-
-
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SortAndScatterSortDataKernelSerial( __global const SortDataCL* restrict gSrc, __global const u32* rHistogram, __global SortDataCL* restrict gDst, int4 cb)
-{
-
- u32 gIdx = GET_GLOBAL_IDX;
- u32 realLocalIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- u32 wgSize = GET_GROUP_SIZE;
- const int startBit = cb.m_startBit;
- const int n = cb.m_n;
- const int nWGs = cb.m_nWGs;
- const int nBlocksPerWG = cb.m_nBlocksPerWG;
-
- int counter[NUM_BUCKET];
-
- if (realLocalIdx>0)
- return;
-
- for (int c=0;c<NUM_BUCKET;c++)
- counter[c]=0;
-
- const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;
-
- int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;
-
- for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++)
- {
- for (int lIdx=0;lIdx<WG_SIZE;lIdx++)
- {
- int addr2 = iblock*blockSize + blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;
-
- for(int j=0; j<ELEMENTS_PER_WORK_ITEM; j++)
- {
- int i = addr2+j;
- if( i < n )
- {
- int tableIdx;
- tableIdx = (gSrc[i].m_key>>startBit) & 0xf;//0xf = NUM_TABLES-1
- gDst[rHistogram[tableIdx*nWGs+wgIdx] + counter[tableIdx]] = gSrc[i];
- counter[tableIdx] ++;
- }
- }
- }
- }
-
-}
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SortAndScatterKernelSerial( __global const u32* restrict gSrc, __global const u32* rHistogram, __global u32* restrict gDst, int4 cb )
-{
-
- u32 gIdx = GET_GLOBAL_IDX;
- u32 realLocalIdx = GET_LOCAL_IDX;
- u32 wgIdx = GET_GROUP_IDX;
- u32 wgSize = GET_GROUP_SIZE;
- const int startBit = cb.m_startBit;
- const int n = cb.m_n;
- const int nWGs = cb.m_nWGs;
- const int nBlocksPerWG = cb.m_nBlocksPerWG;
-
- int counter[NUM_BUCKET];
-
- if (realLocalIdx>0)
- return;
-
- for (int c=0;c<NUM_BUCKET;c++)
- counter[c]=0;
-
- const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;
-
- int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;
-
- for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++)
- {
- for (int lIdx=0;lIdx<WG_SIZE;lIdx++)
- {
- int addr2 = iblock*blockSize + blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;
-
- for(int j=0; j<ELEMENTS_PER_WORK_ITEM; j++)
- {
- int i = addr2+j;
- if( i < n )
- {
- int tableIdx;
- tableIdx = (gSrc[i]>>startBit) & 0xf;//0xf = NUM_TABLES-1
- gDst[rHistogram[tableIdx*nWGs+wgIdx] + counter[tableIdx]] = gSrc[i];
- counter[tableIdx] ++;
- }
- }
- }
- }
-
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32KernelsCL.h b/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32KernelsCL.h
deleted file mode 100644
index fb4bdda303..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/ParallelPrimitives/kernels/RadixSort32KernelsCL.h
+++ /dev/null
@@ -1,909 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* radixSort32KernelsCL =
- "/*\n"
- "Bullet Continuous Collision Detection and Physics Library\n"
- "Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org\n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Author Takahiro Harada\n"
- "//#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "typedef unsigned int u32;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_uint4 (uint4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "#define WG_SIZE 64\n"
- "#define ELEMENTS_PER_WORK_ITEM (256/WG_SIZE)\n"
- "#define BITS_PER_PASS 4\n"
- "#define NUM_BUCKET (1<<BITS_PER_PASS)\n"
- "typedef uchar u8;\n"
- "// this isn't optimization for VLIW. But just reducing writes. \n"
- "#define USE_2LEVEL_REDUCE 1\n"
- "//#define CHECK_BOUNDARY 1\n"
- "//#define NV_GPU 1\n"
- "// Cypress\n"
- "#define nPerWI 16\n"
- "// Cayman\n"
- "//#define nPerWI 20\n"
- "#define m_n x\n"
- "#define m_nWGs y\n"
- "#define m_startBit z\n"
- "#define m_nBlocksPerWG w\n"
- "/*\n"
- "typedef struct\n"
- "{\n"
- " int m_n;\n"
- " int m_nWGs;\n"
- " int m_startBit;\n"
- " int m_nBlocksPerWG;\n"
- "} ConstBuffer;\n"
- "*/\n"
- "typedef struct\n"
- "{\n"
- " unsigned int m_key;\n"
- " unsigned int m_value;\n"
- "} SortDataCL;\n"
- "uint prefixScanVectorEx( uint4* data )\n"
- "{\n"
- " u32 sum = 0;\n"
- " u32 tmp = data[0].x;\n"
- " data[0].x = sum;\n"
- " sum += tmp;\n"
- " tmp = data[0].y;\n"
- " data[0].y = sum;\n"
- " sum += tmp;\n"
- " tmp = data[0].z;\n"
- " data[0].z = sum;\n"
- " sum += tmp;\n"
- " tmp = data[0].w;\n"
- " data[0].w = sum;\n"
- " sum += tmp;\n"
- " return sum;\n"
- "}\n"
- "u32 localPrefixSum( u32 pData, uint lIdx, uint* totalSum, __local u32* sorterSharedMemory, int wgSize /*64 or 128*/ )\n"
- "{\n"
- " { // Set data\n"
- " sorterSharedMemory[lIdx] = 0;\n"
- " sorterSharedMemory[lIdx+wgSize] = pData;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " { // Prefix sum\n"
- " int idx = 2*lIdx + (wgSize+1);\n"
- "#if defined(USE_2LEVEL_REDUCE)\n"
- " if( lIdx < 64 )\n"
- " {\n"
- " u32 u0, u1, u2;\n"
- " u0 = sorterSharedMemory[idx-3];\n"
- " u1 = sorterSharedMemory[idx-2];\n"
- " u2 = sorterSharedMemory[idx-1];\n"
- " AtomAdd( sorterSharedMemory[idx], u0+u1+u2 ); \n"
- " GROUP_MEM_FENCE;\n"
- " u0 = sorterSharedMemory[idx-12];\n"
- " u1 = sorterSharedMemory[idx-8];\n"
- " u2 = sorterSharedMemory[idx-4];\n"
- " AtomAdd( sorterSharedMemory[idx], u0+u1+u2 ); \n"
- " GROUP_MEM_FENCE;\n"
- " u0 = sorterSharedMemory[idx-48];\n"
- " u1 = sorterSharedMemory[idx-32];\n"
- " u2 = sorterSharedMemory[idx-16];\n"
- " AtomAdd( sorterSharedMemory[idx], u0+u1+u2 ); \n"
- " GROUP_MEM_FENCE;\n"
- " if( wgSize > 64 )\n"
- " {\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-64];\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- " sorterSharedMemory[idx-1] += sorterSharedMemory[idx-2];\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- "#else\n"
- " if( lIdx < 64 )\n"
- " {\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-2]; \n"
- " GROUP_MEM_FENCE;\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-4];\n"
- " GROUP_MEM_FENCE;\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-8];\n"
- " GROUP_MEM_FENCE;\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-16];\n"
- " GROUP_MEM_FENCE;\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-32];\n"
- " GROUP_MEM_FENCE;\n"
- " if( wgSize > 64 )\n"
- " {\n"
- " sorterSharedMemory[idx] += sorterSharedMemory[idx-64];\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- " sorterSharedMemory[idx-1] += sorterSharedMemory[idx-2];\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- "#endif\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " *totalSum = sorterSharedMemory[wgSize*2-1];\n"
- " u32 addValue = sorterSharedMemory[lIdx+wgSize-1];\n"
- " return addValue;\n"
- "}\n"
- "//__attribute__((reqd_work_group_size(128,1,1)))\n"
- "uint4 localPrefixSum128V( uint4 pData, uint lIdx, uint* totalSum, __local u32* sorterSharedMemory )\n"
- "{\n"
- " u32 s4 = prefixScanVectorEx( &pData );\n"
- " u32 rank = localPrefixSum( s4, lIdx, totalSum, sorterSharedMemory, 128 );\n"
- " return pData + make_uint4( rank, rank, rank, rank );\n"
- "}\n"
- "//__attribute__((reqd_work_group_size(64,1,1)))\n"
- "uint4 localPrefixSum64V( uint4 pData, uint lIdx, uint* totalSum, __local u32* sorterSharedMemory )\n"
- "{\n"
- " u32 s4 = prefixScanVectorEx( &pData );\n"
- " u32 rank = localPrefixSum( s4, lIdx, totalSum, sorterSharedMemory, 64 );\n"
- " return pData + make_uint4( rank, rank, rank, rank );\n"
- "}\n"
- "u32 unpack4Key( u32 key, int keyIdx ){ return (key>>(keyIdx*8)) & 0xff;}\n"
- "u32 bit8Scan(u32 v)\n"
- "{\n"
- " return (v<<8) + (v<<16) + (v<<24);\n"
- "}\n"
- "//===\n"
- "#define MY_HISTOGRAM(idx) localHistogramMat[(idx)*WG_SIZE+lIdx]\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void StreamCountKernel( __global u32* gSrc, __global u32* histogramOut, int4 cb )\n"
- "{\n"
- " __local u32 localHistogramMat[NUM_BUCKET*WG_SIZE];\n"
- " u32 gIdx = GET_GLOBAL_IDX;\n"
- " u32 lIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " u32 wgSize = GET_GROUP_SIZE;\n"
- " const int startBit = cb.m_startBit;\n"
- " const int n = cb.m_n;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " const int nBlocksPerWG = cb.m_nBlocksPerWG;\n"
- " for(int i=0; i<NUM_BUCKET; i++)\n"
- " {\n"
- " MY_HISTOGRAM(i) = 0;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;\n"
- " u32 localKey;\n"
- " int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;\n"
- " int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;\n"
- " for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)\n"
- " {\n"
- " // MY_HISTOGRAM( localKeys.x ) ++ is much expensive than atomic add as it requires read and write while atomics can just add on AMD\n"
- " // Using registers didn't perform well. It seems like use localKeys to address requires a lot of alu ops\n"
- " // AMD: AtomInc performs better while NV prefers ++\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- " {\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " if( addr+i < n )\n"
- "#endif\n"
- " {\n"
- " localKey = (gSrc[addr+i]>>startBit) & 0xf;\n"
- "#if defined(NV_GPU)\n"
- " MY_HISTOGRAM( localKey )++;\n"
- "#else\n"
- " AtomInc( MY_HISTOGRAM( localKey ) );\n"
- "#endif\n"
- " }\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<GET_GROUP_SIZE; i++)\n"
- " {\n"
- " sum += localHistogramMat[lIdx*WG_SIZE+(i+lIdx)%GET_GROUP_SIZE];\n"
- " }\n"
- " histogramOut[lIdx*nWGs+wgIdx] = sum;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void StreamCountSortDataKernel( __global SortDataCL* gSrc, __global u32* histogramOut, int4 cb )\n"
- "{\n"
- " __local u32 localHistogramMat[NUM_BUCKET*WG_SIZE];\n"
- " u32 gIdx = GET_GLOBAL_IDX;\n"
- " u32 lIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " u32 wgSize = GET_GROUP_SIZE;\n"
- " const int startBit = cb.m_startBit;\n"
- " const int n = cb.m_n;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " const int nBlocksPerWG = cb.m_nBlocksPerWG;\n"
- " for(int i=0; i<NUM_BUCKET; i++)\n"
- " {\n"
- " MY_HISTOGRAM(i) = 0;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;\n"
- " u32 localKey;\n"
- " int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;\n"
- " int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;\n"
- " for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)\n"
- " {\n"
- " // MY_HISTOGRAM( localKeys.x ) ++ is much expensive than atomic add as it requires read and write while atomics can just add on AMD\n"
- " // Using registers didn't perform well. It seems like use localKeys to address requires a lot of alu ops\n"
- " // AMD: AtomInc performs better while NV prefers ++\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- " {\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " if( addr+i < n )\n"
- "#endif\n"
- " {\n"
- " localKey = (gSrc[addr+i].m_key>>startBit) & 0xf;\n"
- "#if defined(NV_GPU)\n"
- " MY_HISTOGRAM( localKey )++;\n"
- "#else\n"
- " AtomInc( MY_HISTOGRAM( localKey ) );\n"
- "#endif\n"
- " }\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<GET_GROUP_SIZE; i++)\n"
- " {\n"
- " sum += localHistogramMat[lIdx*WG_SIZE+(i+lIdx)%GET_GROUP_SIZE];\n"
- " }\n"
- " histogramOut[lIdx*nWGs+wgIdx] = sum;\n"
- " }\n"
- "}\n"
- "#define nPerLane (nPerWI/4)\n"
- "// NUM_BUCKET*nWGs < 128*nPerWI\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(128,1,1)))\n"
- "void PrefixScanKernel( __global u32* wHistogram1, int4 cb )\n"
- "{\n"
- " __local u32 ldsTopScanData[128*2];\n"
- " u32 lIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " u32 data[nPerWI];\n"
- " for(int i=0; i<nPerWI; i++)\n"
- " {\n"
- " data[i] = 0;\n"
- " if( (nPerWI*lIdx+i) < NUM_BUCKET*nWGs )\n"
- " data[i] = wHistogram1[nPerWI*lIdx+i];\n"
- " }\n"
- " uint4 myData = make_uint4(0,0,0,0);\n"
- " for(int i=0; i<nPerLane; i++)\n"
- " {\n"
- " myData.x += data[nPerLane*0+i];\n"
- " myData.y += data[nPerLane*1+i];\n"
- " myData.z += data[nPerLane*2+i];\n"
- " myData.w += data[nPerLane*3+i];\n"
- " }\n"
- " uint totalSum;\n"
- " uint4 scanned = localPrefixSum128V( myData, lIdx, &totalSum, ldsTopScanData );\n"
- "// for(int j=0; j<4; j++) // somehow it introduces a lot of branches\n"
- " { int j = 0;\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<nPerLane; i++)\n"
- " {\n"
- " u32 tmp = data[nPerLane*j+i];\n"
- " data[nPerLane*j+i] = sum;\n"
- " sum += tmp;\n"
- " }\n"
- " }\n"
- " { int j = 1;\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<nPerLane; i++)\n"
- " {\n"
- " u32 tmp = data[nPerLane*j+i];\n"
- " data[nPerLane*j+i] = sum;\n"
- " sum += tmp;\n"
- " }\n"
- " }\n"
- " { int j = 2;\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<nPerLane; i++)\n"
- " {\n"
- " u32 tmp = data[nPerLane*j+i];\n"
- " data[nPerLane*j+i] = sum;\n"
- " sum += tmp;\n"
- " }\n"
- " }\n"
- " { int j = 3;\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<nPerLane; i++)\n"
- " {\n"
- " u32 tmp = data[nPerLane*j+i];\n"
- " data[nPerLane*j+i] = sum;\n"
- " sum += tmp;\n"
- " }\n"
- " }\n"
- " for(int i=0; i<nPerLane; i++)\n"
- " {\n"
- " data[nPerLane*0+i] += scanned.x;\n"
- " data[nPerLane*1+i] += scanned.y;\n"
- " data[nPerLane*2+i] += scanned.z;\n"
- " data[nPerLane*3+i] += scanned.w;\n"
- " }\n"
- " for(int i=0; i<nPerWI; i++)\n"
- " {\n"
- " int index = nPerWI*lIdx+i;\n"
- " if (index < NUM_BUCKET*nWGs)\n"
- " wHistogram1[nPerWI*lIdx+i] = data[i];\n"
- " }\n"
- "}\n"
- "// 4 scan, 4 exchange\n"
- "void sort4Bits(u32 sortData[4], int startBit, int lIdx, __local u32* ldsSortData)\n"
- "{\n"
- " for(int bitIdx=0; bitIdx<BITS_PER_PASS; bitIdx++)\n"
- " {\n"
- " u32 mask = (1<<bitIdx);\n"
- " uint4 cmpResult = make_uint4( (sortData[0]>>startBit) & mask, (sortData[1]>>startBit) & mask, (sortData[2]>>startBit) & mask, (sortData[3]>>startBit) & mask );\n"
- " uint4 prefixSum = SELECT_UINT4( make_uint4(1,1,1,1), make_uint4(0,0,0,0), cmpResult != make_uint4(0,0,0,0) );\n"
- " u32 total;\n"
- " prefixSum = localPrefixSum64V( prefixSum, lIdx, &total, ldsSortData );\n"
- " {\n"
- " uint4 localAddr = make_uint4(lIdx*4+0,lIdx*4+1,lIdx*4+2,lIdx*4+3);\n"
- " uint4 dstAddr = localAddr - prefixSum + make_uint4( total, total, total, total );\n"
- " dstAddr = SELECT_UINT4( prefixSum, dstAddr, cmpResult != make_uint4(0, 0, 0, 0) );\n"
- " GROUP_LDS_BARRIER;\n"
- " ldsSortData[dstAddr.x] = sortData[0];\n"
- " ldsSortData[dstAddr.y] = sortData[1];\n"
- " ldsSortData[dstAddr.z] = sortData[2];\n"
- " ldsSortData[dstAddr.w] = sortData[3];\n"
- " GROUP_LDS_BARRIER;\n"
- " sortData[0] = ldsSortData[localAddr.x];\n"
- " sortData[1] = ldsSortData[localAddr.y];\n"
- " sortData[2] = ldsSortData[localAddr.z];\n"
- " sortData[3] = ldsSortData[localAddr.w];\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " }\n"
- "}\n"
- "// 2 scan, 2 exchange\n"
- "void sort4Bits1(u32 sortData[4], int startBit, int lIdx, __local u32* ldsSortData)\n"
- "{\n"
- " for(uint ibit=0; ibit<BITS_PER_PASS; ibit+=2)\n"
- " {\n"
- " uint4 b = make_uint4((sortData[0]>>(startBit+ibit)) & 0x3, \n"
- " (sortData[1]>>(startBit+ibit)) & 0x3, \n"
- " (sortData[2]>>(startBit+ibit)) & 0x3, \n"
- " (sortData[3]>>(startBit+ibit)) & 0x3);\n"
- " u32 key4;\n"
- " u32 sKeyPacked[4] = { 0, 0, 0, 0 };\n"
- " {\n"
- " sKeyPacked[0] |= 1<<(8*b.x);\n"
- " sKeyPacked[1] |= 1<<(8*b.y);\n"
- " sKeyPacked[2] |= 1<<(8*b.z);\n"
- " sKeyPacked[3] |= 1<<(8*b.w);\n"
- " key4 = sKeyPacked[0] + sKeyPacked[1] + sKeyPacked[2] + sKeyPacked[3];\n"
- " }\n"
- " u32 rankPacked;\n"
- " u32 sumPacked;\n"
- " {\n"
- " rankPacked = localPrefixSum( key4, lIdx, &sumPacked, ldsSortData, WG_SIZE );\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " u32 newOffset[4] = { 0,0,0,0 };\n"
- " {\n"
- " u32 sumScanned = bit8Scan( sumPacked );\n"
- " u32 scannedKeys[4];\n"
- " scannedKeys[0] = 1<<(8*b.x);\n"
- " scannedKeys[1] = 1<<(8*b.y);\n"
- " scannedKeys[2] = 1<<(8*b.z);\n"
- " scannedKeys[3] = 1<<(8*b.w);\n"
- " { // 4 scans at once\n"
- " u32 sum4 = 0;\n"
- " for(int ie=0; ie<4; ie++)\n"
- " {\n"
- " u32 tmp = scannedKeys[ie];\n"
- " scannedKeys[ie] = sum4;\n"
- " sum4 += tmp;\n"
- " }\n"
- " }\n"
- " {\n"
- " u32 sumPlusRank = sumScanned + rankPacked;\n"
- " { u32 ie = b.x;\n"
- " scannedKeys[0] += sumPlusRank;\n"
- " newOffset[0] = unpack4Key( scannedKeys[0], ie );\n"
- " }\n"
- " { u32 ie = b.y;\n"
- " scannedKeys[1] += sumPlusRank;\n"
- " newOffset[1] = unpack4Key( scannedKeys[1], ie );\n"
- " }\n"
- " { u32 ie = b.z;\n"
- " scannedKeys[2] += sumPlusRank;\n"
- " newOffset[2] = unpack4Key( scannedKeys[2], ie );\n"
- " }\n"
- " { u32 ie = b.w;\n"
- " scannedKeys[3] += sumPlusRank;\n"
- " newOffset[3] = unpack4Key( scannedKeys[3], ie );\n"
- " }\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " {\n"
- " ldsSortData[newOffset[0]] = sortData[0];\n"
- " ldsSortData[newOffset[1]] = sortData[1];\n"
- " ldsSortData[newOffset[2]] = sortData[2];\n"
- " ldsSortData[newOffset[3]] = sortData[3];\n"
- " GROUP_LDS_BARRIER;\n"
- " u32 dstAddr = 4*lIdx;\n"
- " sortData[0] = ldsSortData[dstAddr+0];\n"
- " sortData[1] = ldsSortData[dstAddr+1];\n"
- " sortData[2] = ldsSortData[dstAddr+2];\n"
- " sortData[3] = ldsSortData[dstAddr+3];\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " }\n"
- "}\n"
- "#define SET_HISTOGRAM(setIdx, key) ldsSortData[(setIdx)*NUM_BUCKET+key]\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SortAndScatterKernel( __global const u32* restrict gSrc, __global const u32* rHistogram, __global u32* restrict gDst, int4 cb )\n"
- "{\n"
- " __local u32 ldsSortData[WG_SIZE*ELEMENTS_PER_WORK_ITEM+16];\n"
- " __local u32 localHistogramToCarry[NUM_BUCKET];\n"
- " __local u32 localHistogram[NUM_BUCKET*2];\n"
- " u32 gIdx = GET_GLOBAL_IDX;\n"
- " u32 lIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " u32 wgSize = GET_GROUP_SIZE;\n"
- " const int n = cb.m_n;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " const int startBit = cb.m_startBit;\n"
- " const int nBlocksPerWG = cb.m_nBlocksPerWG;\n"
- " if( lIdx < (NUM_BUCKET) )\n"
- " {\n"
- " localHistogramToCarry[lIdx] = rHistogram[lIdx*nWGs + wgIdx];\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;\n"
- " int nBlocks = n/blockSize - nBlocksPerWG*wgIdx;\n"
- " int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;\n"
- " for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)\n"
- " {\n"
- " u32 myHistogram = 0;\n"
- " u32 sortData[ELEMENTS_PER_WORK_ITEM];\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " sortData[i] = ( addr+i < n )? gSrc[ addr+i ] : 0xffffffff;\n"
- "#else\n"
- " sortData[i] = gSrc[ addr+i ];\n"
- "#endif\n"
- " sort4Bits(sortData, startBit, lIdx, ldsSortData);\n"
- " u32 keys[ELEMENTS_PER_WORK_ITEM];\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- " keys[i] = (sortData[i]>>startBit) & 0xf;\n"
- " { // create histogram\n"
- " u32 setIdx = lIdx/16;\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogram[lIdx] = 0;\n"
- " }\n"
- " ldsSortData[lIdx] = 0;\n"
- " GROUP_LDS_BARRIER;\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " if( addr+i < n )\n"
- "#endif\n"
- "#if defined(NV_GPU)\n"
- " SET_HISTOGRAM( setIdx, keys[i] )++;\n"
- "#else\n"
- " AtomInc( SET_HISTOGRAM( setIdx, keys[i] ) );\n"
- "#endif\n"
- " \n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " uint hIdx = NUM_BUCKET+lIdx;\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<WG_SIZE/16; i++)\n"
- " {\n"
- " sum += SET_HISTOGRAM( i, lIdx );\n"
- " }\n"
- " myHistogram = sum;\n"
- " localHistogram[hIdx] = sum;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- "#if defined(USE_2LEVEL_REDUCE)\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogram[hIdx] = localHistogram[hIdx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " u32 u0, u1, u2;\n"
- " u0 = localHistogram[hIdx-3];\n"
- " u1 = localHistogram[hIdx-2];\n"
- " u2 = localHistogram[hIdx-1];\n"
- " AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );\n"
- " GROUP_MEM_FENCE;\n"
- " u0 = localHistogram[hIdx-12];\n"
- " u1 = localHistogram[hIdx-8];\n"
- " u2 = localHistogram[hIdx-4];\n"
- " AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- "#else\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogram[hIdx] = localHistogram[hIdx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-2];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-4];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-8];\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- "#endif\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " {\n"
- " for(int ie=0; ie<ELEMENTS_PER_WORK_ITEM; ie++)\n"
- " {\n"
- " int dataIdx = ELEMENTS_PER_WORK_ITEM*lIdx+ie;\n"
- " int binIdx = keys[ie];\n"
- " int groupOffset = localHistogramToCarry[binIdx];\n"
- " int myIdx = dataIdx - localHistogram[NUM_BUCKET+binIdx];\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " if( addr+ie < n )\n"
- "#endif\n"
- " gDst[ groupOffset + myIdx ] = sortData[ie];\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogramToCarry[lIdx] += myHistogram;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- "}\n"
- "// 2 scan, 2 exchange\n"
- "void sort4Bits1KeyValue(u32 sortData[4], int sortVal[4], int startBit, int lIdx, __local u32* ldsSortData, __local int *ldsSortVal)\n"
- "{\n"
- " for(uint ibit=0; ibit<BITS_PER_PASS; ibit+=2)\n"
- " {\n"
- " uint4 b = make_uint4((sortData[0]>>(startBit+ibit)) & 0x3, \n"
- " (sortData[1]>>(startBit+ibit)) & 0x3, \n"
- " (sortData[2]>>(startBit+ibit)) & 0x3, \n"
- " (sortData[3]>>(startBit+ibit)) & 0x3);\n"
- " u32 key4;\n"
- " u32 sKeyPacked[4] = { 0, 0, 0, 0 };\n"
- " {\n"
- " sKeyPacked[0] |= 1<<(8*b.x);\n"
- " sKeyPacked[1] |= 1<<(8*b.y);\n"
- " sKeyPacked[2] |= 1<<(8*b.z);\n"
- " sKeyPacked[3] |= 1<<(8*b.w);\n"
- " key4 = sKeyPacked[0] + sKeyPacked[1] + sKeyPacked[2] + sKeyPacked[3];\n"
- " }\n"
- " u32 rankPacked;\n"
- " u32 sumPacked;\n"
- " {\n"
- " rankPacked = localPrefixSum( key4, lIdx, &sumPacked, ldsSortData, WG_SIZE );\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " u32 newOffset[4] = { 0,0,0,0 };\n"
- " {\n"
- " u32 sumScanned = bit8Scan( sumPacked );\n"
- " u32 scannedKeys[4];\n"
- " scannedKeys[0] = 1<<(8*b.x);\n"
- " scannedKeys[1] = 1<<(8*b.y);\n"
- " scannedKeys[2] = 1<<(8*b.z);\n"
- " scannedKeys[3] = 1<<(8*b.w);\n"
- " { // 4 scans at once\n"
- " u32 sum4 = 0;\n"
- " for(int ie=0; ie<4; ie++)\n"
- " {\n"
- " u32 tmp = scannedKeys[ie];\n"
- " scannedKeys[ie] = sum4;\n"
- " sum4 += tmp;\n"
- " }\n"
- " }\n"
- " {\n"
- " u32 sumPlusRank = sumScanned + rankPacked;\n"
- " { u32 ie = b.x;\n"
- " scannedKeys[0] += sumPlusRank;\n"
- " newOffset[0] = unpack4Key( scannedKeys[0], ie );\n"
- " }\n"
- " { u32 ie = b.y;\n"
- " scannedKeys[1] += sumPlusRank;\n"
- " newOffset[1] = unpack4Key( scannedKeys[1], ie );\n"
- " }\n"
- " { u32 ie = b.z;\n"
- " scannedKeys[2] += sumPlusRank;\n"
- " newOffset[2] = unpack4Key( scannedKeys[2], ie );\n"
- " }\n"
- " { u32 ie = b.w;\n"
- " scannedKeys[3] += sumPlusRank;\n"
- " newOffset[3] = unpack4Key( scannedKeys[3], ie );\n"
- " }\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " {\n"
- " ldsSortData[newOffset[0]] = sortData[0];\n"
- " ldsSortData[newOffset[1]] = sortData[1];\n"
- " ldsSortData[newOffset[2]] = sortData[2];\n"
- " ldsSortData[newOffset[3]] = sortData[3];\n"
- " ldsSortVal[newOffset[0]] = sortVal[0];\n"
- " ldsSortVal[newOffset[1]] = sortVal[1];\n"
- " ldsSortVal[newOffset[2]] = sortVal[2];\n"
- " ldsSortVal[newOffset[3]] = sortVal[3];\n"
- " GROUP_LDS_BARRIER;\n"
- " u32 dstAddr = 4*lIdx;\n"
- " sortData[0] = ldsSortData[dstAddr+0];\n"
- " sortData[1] = ldsSortData[dstAddr+1];\n"
- " sortData[2] = ldsSortData[dstAddr+2];\n"
- " sortData[3] = ldsSortData[dstAddr+3];\n"
- " sortVal[0] = ldsSortVal[dstAddr+0];\n"
- " sortVal[1] = ldsSortVal[dstAddr+1];\n"
- " sortVal[2] = ldsSortVal[dstAddr+2];\n"
- " sortVal[3] = ldsSortVal[dstAddr+3];\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SortAndScatterSortDataKernel( __global const SortDataCL* restrict gSrc, __global const u32* rHistogram, __global SortDataCL* restrict gDst, int4 cb)\n"
- "{\n"
- " __local int ldsSortData[WG_SIZE*ELEMENTS_PER_WORK_ITEM+16];\n"
- " __local int ldsSortVal[WG_SIZE*ELEMENTS_PER_WORK_ITEM+16];\n"
- " __local u32 localHistogramToCarry[NUM_BUCKET];\n"
- " __local u32 localHistogram[NUM_BUCKET*2];\n"
- " u32 gIdx = GET_GLOBAL_IDX;\n"
- " u32 lIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " u32 wgSize = GET_GROUP_SIZE;\n"
- " const int n = cb.m_n;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " const int startBit = cb.m_startBit;\n"
- " const int nBlocksPerWG = cb.m_nBlocksPerWG;\n"
- " if( lIdx < (NUM_BUCKET) )\n"
- " {\n"
- " localHistogramToCarry[lIdx] = rHistogram[lIdx*nWGs + wgIdx];\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;\n"
- " int nBlocks = n/blockSize - nBlocksPerWG*wgIdx;\n"
- " int addr = blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;\n"
- " for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++, addr+=blockSize)\n"
- " {\n"
- " u32 myHistogram = 0;\n"
- " int sortData[ELEMENTS_PER_WORK_ITEM];\n"
- " int sortVal[ELEMENTS_PER_WORK_ITEM];\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " {\n"
- " sortData[i] = ( addr+i < n )? gSrc[ addr+i ].m_key : 0xffffffff;\n"
- " sortVal[i] = ( addr+i < n )? gSrc[ addr+i ].m_value : 0xffffffff;\n"
- " }\n"
- "#else\n"
- " {\n"
- " sortData[i] = gSrc[ addr+i ].m_key;\n"
- " sortVal[i] = gSrc[ addr+i ].m_value;\n"
- " }\n"
- "#endif\n"
- " sort4Bits1KeyValue(sortData, sortVal, startBit, lIdx, ldsSortData, ldsSortVal);\n"
- " u32 keys[ELEMENTS_PER_WORK_ITEM];\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- " keys[i] = (sortData[i]>>startBit) & 0xf;\n"
- " { // create histogram\n"
- " u32 setIdx = lIdx/16;\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogram[lIdx] = 0;\n"
- " }\n"
- " ldsSortData[lIdx] = 0;\n"
- " GROUP_LDS_BARRIER;\n"
- " for(int i=0; i<ELEMENTS_PER_WORK_ITEM; i++)\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " if( addr+i < n )\n"
- "#endif\n"
- "#if defined(NV_GPU)\n"
- " SET_HISTOGRAM( setIdx, keys[i] )++;\n"
- "#else\n"
- " AtomInc( SET_HISTOGRAM( setIdx, keys[i] ) );\n"
- "#endif\n"
- " \n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " uint hIdx = NUM_BUCKET+lIdx;\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " u32 sum = 0;\n"
- " for(int i=0; i<WG_SIZE/16; i++)\n"
- " {\n"
- " sum += SET_HISTOGRAM( i, lIdx );\n"
- " }\n"
- " myHistogram = sum;\n"
- " localHistogram[hIdx] = sum;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- "#if defined(USE_2LEVEL_REDUCE)\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogram[hIdx] = localHistogram[hIdx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " u32 u0, u1, u2;\n"
- " u0 = localHistogram[hIdx-3];\n"
- " u1 = localHistogram[hIdx-2];\n"
- " u2 = localHistogram[hIdx-1];\n"
- " AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );\n"
- " GROUP_MEM_FENCE;\n"
- " u0 = localHistogram[hIdx-12];\n"
- " u1 = localHistogram[hIdx-8];\n"
- " u2 = localHistogram[hIdx-4];\n"
- " AtomAdd( localHistogram[hIdx], u0 + u1 + u2 );\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- "#else\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogram[hIdx] = localHistogram[hIdx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-1];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-2];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-4];\n"
- " GROUP_MEM_FENCE;\n"
- " localHistogram[hIdx] += localHistogram[hIdx-8];\n"
- " GROUP_MEM_FENCE;\n"
- " }\n"
- "#endif\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " {\n"
- " for(int ie=0; ie<ELEMENTS_PER_WORK_ITEM; ie++)\n"
- " {\n"
- " int dataIdx = ELEMENTS_PER_WORK_ITEM*lIdx+ie;\n"
- " int binIdx = keys[ie];\n"
- " int groupOffset = localHistogramToCarry[binIdx];\n"
- " int myIdx = dataIdx - localHistogram[NUM_BUCKET+binIdx];\n"
- "#if defined(CHECK_BOUNDARY)\n"
- " if( addr+ie < n )\n"
- " {\n"
- " if ((groupOffset + myIdx)<n)\n"
- " {\n"
- " if (sortData[ie]==sortVal[ie])\n"
- " {\n"
- " \n"
- " SortDataCL tmp;\n"
- " tmp.m_key = sortData[ie];\n"
- " tmp.m_value = sortVal[ie];\n"
- " if (tmp.m_key == tmp.m_value)\n"
- " gDst[groupOffset + myIdx ] = tmp;\n"
- " }\n"
- " \n"
- " }\n"
- " }\n"
- "#else\n"
- " if ((groupOffset + myIdx)<n)\n"
- " {\n"
- " gDst[ groupOffset + myIdx ].m_key = sortData[ie];\n"
- " gDst[ groupOffset + myIdx ].m_value = sortVal[ie];\n"
- " }\n"
- "#endif\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " if( lIdx < NUM_BUCKET )\n"
- " {\n"
- " localHistogramToCarry[lIdx] += myHistogram;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SortAndScatterSortDataKernelSerial( __global const SortDataCL* restrict gSrc, __global const u32* rHistogram, __global SortDataCL* restrict gDst, int4 cb)\n"
- "{\n"
- " \n"
- " u32 gIdx = GET_GLOBAL_IDX;\n"
- " u32 realLocalIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " u32 wgSize = GET_GROUP_SIZE;\n"
- " const int startBit = cb.m_startBit;\n"
- " const int n = cb.m_n;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " const int nBlocksPerWG = cb.m_nBlocksPerWG;\n"
- " int counter[NUM_BUCKET];\n"
- " \n"
- " if (realLocalIdx>0)\n"
- " return;\n"
- " \n"
- " for (int c=0;c<NUM_BUCKET;c++)\n"
- " counter[c]=0;\n"
- " const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;\n"
- " \n"
- " int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;\n"
- " for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++)\n"
- " {\n"
- " for (int lIdx=0;lIdx<WG_SIZE;lIdx++)\n"
- " {\n"
- " int addr2 = iblock*blockSize + blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;\n"
- " \n"
- " for(int j=0; j<ELEMENTS_PER_WORK_ITEM; j++)\n"
- " {\n"
- " int i = addr2+j;\n"
- " if( i < n )\n"
- " {\n"
- " int tableIdx;\n"
- " tableIdx = (gSrc[i].m_key>>startBit) & 0xf;//0xf = NUM_TABLES-1\n"
- " gDst[rHistogram[tableIdx*nWGs+wgIdx] + counter[tableIdx]] = gSrc[i];\n"
- " counter[tableIdx] ++;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SortAndScatterKernelSerial( __global const u32* restrict gSrc, __global const u32* rHistogram, __global u32* restrict gDst, int4 cb )\n"
- "{\n"
- " \n"
- " u32 gIdx = GET_GLOBAL_IDX;\n"
- " u32 realLocalIdx = GET_LOCAL_IDX;\n"
- " u32 wgIdx = GET_GROUP_IDX;\n"
- " u32 wgSize = GET_GROUP_SIZE;\n"
- " const int startBit = cb.m_startBit;\n"
- " const int n = cb.m_n;\n"
- " const int nWGs = cb.m_nWGs;\n"
- " const int nBlocksPerWG = cb.m_nBlocksPerWG;\n"
- " int counter[NUM_BUCKET];\n"
- " \n"
- " if (realLocalIdx>0)\n"
- " return;\n"
- " \n"
- " for (int c=0;c<NUM_BUCKET;c++)\n"
- " counter[c]=0;\n"
- " const int blockSize = ELEMENTS_PER_WORK_ITEM*WG_SIZE;\n"
- " \n"
- " int nBlocks = (n)/blockSize - nBlocksPerWG*wgIdx;\n"
- " for(int iblock=0; iblock<min(nBlocksPerWG, nBlocks); iblock++)\n"
- " {\n"
- " for (int lIdx=0;lIdx<WG_SIZE;lIdx++)\n"
- " {\n"
- " int addr2 = iblock*blockSize + blockSize*nBlocksPerWG*wgIdx + ELEMENTS_PER_WORK_ITEM*lIdx;\n"
- " \n"
- " for(int j=0; j<ELEMENTS_PER_WORK_ITEM; j++)\n"
- " {\n"
- " int i = addr2+j;\n"
- " if( i < n )\n"
- " {\n"
- " int tableIdx;\n"
- " tableIdx = (gSrc[i]>>startBit) & 0xf;//0xf = NUM_TABLES-1\n"
- " gDst[rHistogram[tableIdx*nWGs+wgIdx] + counter[tableIdx]] = gSrc[i];\n"
- " counter[tableIdx] ++;\n"
- " }\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.cpp b/thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.cpp
deleted file mode 100644
index 6571f30548..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-
-#include "b3GpuRaycast.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhaseInternalData.h"
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3FillCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3GpuParallelLinearBvh.h"
-
-#include "Bullet3OpenCL/Raycast/kernels/rayCastKernels.h"
-
-#define B3_RAYCAST_PATH "src/Bullet3OpenCL/Raycast/kernels/rayCastKernels.cl"
-
-struct b3GpuRaycastInternalData
-{
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_q;
- cl_kernel m_raytraceKernel;
- cl_kernel m_raytracePairsKernel;
- cl_kernel m_findRayRigidPairIndexRanges;
-
- b3GpuParallelLinearBvh* m_plbvh;
- b3RadixSort32CL* m_radixSorter;
- b3FillCL* m_fill;
-
- //1 element per ray
- b3OpenCLArray<b3RayInfo>* m_gpuRays;
- b3OpenCLArray<b3RayHit>* m_gpuHitResults;
- b3OpenCLArray<int>* m_firstRayRigidPairIndexPerRay;
- b3OpenCLArray<int>* m_numRayRigidPairsPerRay;
-
- //1 element per (ray index, rigid index) pair, where the ray intersects with the rigid's AABB
- b3OpenCLArray<int>* m_gpuNumRayRigidPairs;
- b3OpenCLArray<b3Int2>* m_gpuRayRigidPairs; //x == ray index, y == rigid index
-
- int m_test;
-};
-
-b3GpuRaycast::b3GpuRaycast(cl_context ctx, cl_device_id device, cl_command_queue q)
-{
- m_data = new b3GpuRaycastInternalData;
- m_data->m_context = ctx;
- m_data->m_device = device;
- m_data->m_q = q;
- m_data->m_raytraceKernel = 0;
- m_data->m_raytracePairsKernel = 0;
- m_data->m_findRayRigidPairIndexRanges = 0;
-
- m_data->m_plbvh = new b3GpuParallelLinearBvh(ctx, device, q);
- m_data->m_radixSorter = new b3RadixSort32CL(ctx, device, q);
- m_data->m_fill = new b3FillCL(ctx, device, q);
-
- m_data->m_gpuRays = new b3OpenCLArray<b3RayInfo>(ctx, q);
- m_data->m_gpuHitResults = new b3OpenCLArray<b3RayHit>(ctx, q);
- m_data->m_firstRayRigidPairIndexPerRay = new b3OpenCLArray<int>(ctx, q);
- m_data->m_numRayRigidPairsPerRay = new b3OpenCLArray<int>(ctx, q);
- m_data->m_gpuNumRayRigidPairs = new b3OpenCLArray<int>(ctx, q);
- m_data->m_gpuRayRigidPairs = new b3OpenCLArray<b3Int2>(ctx, q);
-
- {
- cl_int errNum = 0;
- cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_data->m_context, m_data->m_device, rayCastKernelCL, &errNum, "", B3_RAYCAST_PATH);
- b3Assert(errNum == CL_SUCCESS);
- m_data->m_raytraceKernel = b3OpenCLUtils::compileCLKernelFromString(m_data->m_context, m_data->m_device, rayCastKernelCL, "rayCastKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_data->m_raytracePairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_data->m_context, m_data->m_device, rayCastKernelCL, "rayCastPairsKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_data->m_findRayRigidPairIndexRanges = b3OpenCLUtils::compileCLKernelFromString(m_data->m_context, m_data->m_device, rayCastKernelCL, "findRayRigidPairIndexRanges", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- clReleaseProgram(prog);
- }
-}
-
-b3GpuRaycast::~b3GpuRaycast()
-{
- clReleaseKernel(m_data->m_raytraceKernel);
- clReleaseKernel(m_data->m_raytracePairsKernel);
- clReleaseKernel(m_data->m_findRayRigidPairIndexRanges);
-
- delete m_data->m_plbvh;
- delete m_data->m_radixSorter;
- delete m_data->m_fill;
-
- delete m_data->m_gpuRays;
- delete m_data->m_gpuHitResults;
- delete m_data->m_firstRayRigidPairIndexPerRay;
- delete m_data->m_numRayRigidPairsPerRay;
- delete m_data->m_gpuNumRayRigidPairs;
- delete m_data->m_gpuRayRigidPairs;
-
- delete m_data;
-}
-
-bool sphere_intersect(const b3Vector3& spherePos, b3Scalar radius, const b3Vector3& rayFrom, const b3Vector3& rayTo, float& hitFraction)
-{
- b3Vector3 rs = rayFrom - spherePos;
- b3Vector3 rayDir = rayTo - rayFrom;
-
- float A = b3Dot(rayDir, rayDir);
- float B = b3Dot(rs, rayDir);
- float C = b3Dot(rs, rs) - (radius * radius);
-
- float D = B * B - A * C;
-
- if (D > 0.0)
- {
- float t = (-B - sqrt(D)) / A;
-
- if ((t >= 0.0f) && (t < hitFraction))
- {
- hitFraction = t;
- return true;
- }
- }
- return false;
-}
-
-bool rayConvex(const b3Vector3& rayFromLocal, const b3Vector3& rayToLocal, const b3ConvexPolyhedronData& poly,
- const b3AlignedObjectArray<b3GpuFace>& faces, float& hitFraction, b3Vector3& hitNormal)
-{
- float exitFraction = hitFraction;
- float enterFraction = -0.1f;
- b3Vector3 curHitNormal = b3MakeVector3(0, 0, 0);
- for (int i = 0; i < poly.m_numFaces; i++)
- {
- const b3GpuFace& face = faces[poly.m_faceOffset + i];
- float fromPlaneDist = b3Dot(rayFromLocal, face.m_plane) + face.m_plane.w;
- float toPlaneDist = b3Dot(rayToLocal, face.m_plane) + face.m_plane.w;
- if (fromPlaneDist < 0.f)
- {
- if (toPlaneDist >= 0.f)
- {
- float fraction = fromPlaneDist / (fromPlaneDist - toPlaneDist);
- if (exitFraction > fraction)
- {
- exitFraction = fraction;
- }
- }
- }
- else
- {
- if (toPlaneDist < 0.f)
- {
- float fraction = fromPlaneDist / (fromPlaneDist - toPlaneDist);
- if (enterFraction <= fraction)
- {
- enterFraction = fraction;
- curHitNormal = face.m_plane;
- curHitNormal.w = 0.f;
- }
- }
- else
- {
- return false;
- }
- }
- if (exitFraction <= enterFraction)
- return false;
- }
-
- if (enterFraction < 0.f)
- return false;
-
- hitFraction = enterFraction;
- hitNormal = curHitNormal;
- return true;
-}
-
-void b3GpuRaycast::castRaysHost(const b3AlignedObjectArray<b3RayInfo>& rays, b3AlignedObjectArray<b3RayHit>& hitResults,
- int numBodies, const struct b3RigidBodyData* bodies, int numCollidables, const struct b3Collidable* collidables, const struct b3GpuNarrowPhaseInternalData* narrowphaseData)
-{
- // return castRays(rays,hitResults,numBodies,bodies,numCollidables,collidables);
-
- B3_PROFILE("castRaysHost");
- for (int r = 0; r < rays.size(); r++)
- {
- b3Vector3 rayFrom = rays[r].m_from;
- b3Vector3 rayTo = rays[r].m_to;
- float hitFraction = hitResults[r].m_hitFraction;
-
- int hitBodyIndex = -1;
- b3Vector3 hitNormal;
-
- for (int b = 0; b < numBodies; b++)
- {
- const b3Vector3& pos = bodies[b].m_pos;
- //const b3Quaternion& orn = bodies[b].m_quat;
-
- switch (collidables[bodies[b].m_collidableIdx].m_shapeType)
- {
- case SHAPE_SPHERE:
- {
- b3Scalar radius = collidables[bodies[b].m_collidableIdx].m_radius;
- if (sphere_intersect(pos, radius, rayFrom, rayTo, hitFraction))
- {
- hitBodyIndex = b;
- b3Vector3 hitPoint;
- hitPoint.setInterpolate3(rays[r].m_from, rays[r].m_to, hitFraction);
- hitNormal = (hitPoint - bodies[b].m_pos).normalize();
- }
- }
- case SHAPE_CONVEX_HULL:
- {
- b3Transform convexWorldTransform;
- convexWorldTransform.setIdentity();
- convexWorldTransform.setOrigin(bodies[b].m_pos);
- convexWorldTransform.setRotation(bodies[b].m_quat);
- b3Transform convexWorld2Local = convexWorldTransform.inverse();
-
- b3Vector3 rayFromLocal = convexWorld2Local(rayFrom);
- b3Vector3 rayToLocal = convexWorld2Local(rayTo);
-
- int shapeIndex = collidables[bodies[b].m_collidableIdx].m_shapeIndex;
- const b3ConvexPolyhedronData& poly = narrowphaseData->m_convexPolyhedra[shapeIndex];
- if (rayConvex(rayFromLocal, rayToLocal, poly, narrowphaseData->m_convexFaces, hitFraction, hitNormal))
- {
- hitBodyIndex = b;
- }
-
- break;
- }
- default:
- {
- static bool once = true;
- if (once)
- {
- once = false;
- b3Warning("Raytest: unsupported shape type\n");
- }
- }
- }
- }
- if (hitBodyIndex >= 0)
- {
- hitResults[r].m_hitFraction = hitFraction;
- hitResults[r].m_hitPoint.setInterpolate3(rays[r].m_from, rays[r].m_to, hitFraction);
- hitResults[r].m_hitNormal = hitNormal;
- hitResults[r].m_hitBody = hitBodyIndex;
- }
- }
-}
-///todo: add some acceleration structure (AABBs, tree etc)
-void b3GpuRaycast::castRays(const b3AlignedObjectArray<b3RayInfo>& rays, b3AlignedObjectArray<b3RayHit>& hitResults,
- int numBodies, const struct b3RigidBodyData* bodies, int numCollidables, const struct b3Collidable* collidables,
- const struct b3GpuNarrowPhaseInternalData* narrowphaseData, class b3GpuBroadphaseInterface* broadphase)
-{
- //castRaysHost(rays,hitResults,numBodies,bodies,numCollidables,collidables,narrowphaseData);
-
- B3_PROFILE("castRaysGPU");
-
- {
- B3_PROFILE("raycast copyFromHost");
- m_data->m_gpuRays->copyFromHost(rays);
- m_data->m_gpuHitResults->copyFromHost(hitResults);
- }
-
- int numRays = hitResults.size();
- {
- m_data->m_firstRayRigidPairIndexPerRay->resize(numRays);
- m_data->m_numRayRigidPairsPerRay->resize(numRays);
-
- m_data->m_gpuNumRayRigidPairs->resize(1);
- m_data->m_gpuRayRigidPairs->resize(numRays * 16);
- }
-
- //run kernel
- const bool USE_BRUTE_FORCE_RAYCAST = false;
- if (USE_BRUTE_FORCE_RAYCAST)
- {
- B3_PROFILE("raycast launch1D");
-
- b3LauncherCL launcher(m_data->m_q, m_data->m_raytraceKernel, "m_raytraceKernel");
- int numRays = rays.size();
- launcher.setConst(numRays);
-
- launcher.setBuffer(m_data->m_gpuRays->getBufferCL());
- launcher.setBuffer(m_data->m_gpuHitResults->getBufferCL());
-
- launcher.setConst(numBodies);
- launcher.setBuffer(narrowphaseData->m_bodyBufferGPU->getBufferCL());
- launcher.setBuffer(narrowphaseData->m_collidablesGPU->getBufferCL());
- launcher.setBuffer(narrowphaseData->m_convexFacesGPU->getBufferCL());
- launcher.setBuffer(narrowphaseData->m_convexPolyhedraGPU->getBufferCL());
-
- launcher.launch1D(numRays);
- clFinish(m_data->m_q);
- }
- else
- {
- m_data->m_plbvh->build(broadphase->getAllAabbsGPU(), broadphase->getSmallAabbIndicesGPU(), broadphase->getLargeAabbIndicesGPU());
-
- m_data->m_plbvh->testRaysAgainstBvhAabbs(*m_data->m_gpuRays, *m_data->m_gpuNumRayRigidPairs, *m_data->m_gpuRayRigidPairs);
-
- int numRayRigidPairs = -1;
- m_data->m_gpuNumRayRigidPairs->copyToHostPointer(&numRayRigidPairs, 1);
- if (numRayRigidPairs > m_data->m_gpuRayRigidPairs->size())
- {
- numRayRigidPairs = m_data->m_gpuRayRigidPairs->size();
- m_data->m_gpuNumRayRigidPairs->copyFromHostPointer(&numRayRigidPairs, 1);
- }
-
- m_data->m_gpuRayRigidPairs->resize(numRayRigidPairs); //Radix sort needs b3OpenCLArray::size() to be correct
-
- //Sort ray-rigid pairs by ray index
- {
- B3_PROFILE("sort ray-rigid pairs");
- m_data->m_radixSorter->execute(*reinterpret_cast<b3OpenCLArray<b3SortData>*>(m_data->m_gpuRayRigidPairs));
- }
-
- //detect start,count of each ray pair
- {
- B3_PROFILE("detect ray-rigid pair index ranges");
-
- {
- B3_PROFILE("reset ray-rigid pair index ranges");
-
- m_data->m_fill->execute(*m_data->m_firstRayRigidPairIndexPerRay, numRayRigidPairs, numRays); //atomic_min used to find first index
- m_data->m_fill->execute(*m_data->m_numRayRigidPairsPerRay, 0, numRays);
- clFinish(m_data->m_q);
- }
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_data->m_gpuRayRigidPairs->getBufferCL()),
-
- b3BufferInfoCL(m_data->m_firstRayRigidPairIndexPerRay->getBufferCL()),
- b3BufferInfoCL(m_data->m_numRayRigidPairsPerRay->getBufferCL())};
-
- b3LauncherCL launcher(m_data->m_q, m_data->m_findRayRigidPairIndexRanges, "m_findRayRigidPairIndexRanges");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numRayRigidPairs);
-
- launcher.launch1D(numRayRigidPairs);
- clFinish(m_data->m_q);
- }
-
- {
- B3_PROFILE("ray-rigid intersection");
-
- b3BufferInfoCL bufferInfo[] =
- {
- b3BufferInfoCL(m_data->m_gpuRays->getBufferCL()),
- b3BufferInfoCL(m_data->m_gpuHitResults->getBufferCL()),
- b3BufferInfoCL(m_data->m_firstRayRigidPairIndexPerRay->getBufferCL()),
- b3BufferInfoCL(m_data->m_numRayRigidPairsPerRay->getBufferCL()),
-
- b3BufferInfoCL(narrowphaseData->m_bodyBufferGPU->getBufferCL()),
- b3BufferInfoCL(narrowphaseData->m_collidablesGPU->getBufferCL()),
- b3BufferInfoCL(narrowphaseData->m_convexFacesGPU->getBufferCL()),
- b3BufferInfoCL(narrowphaseData->m_convexPolyhedraGPU->getBufferCL()),
-
- b3BufferInfoCL(m_data->m_gpuRayRigidPairs->getBufferCL())};
-
- b3LauncherCL launcher(m_data->m_q, m_data->m_raytracePairsKernel, "m_raytracePairsKernel");
- launcher.setBuffers(bufferInfo, sizeof(bufferInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(numRays);
-
- launcher.launch1D(numRays);
- clFinish(m_data->m_q);
- }
- }
-
- //copy results
- {
- B3_PROFILE("raycast copyToHost");
- m_data->m_gpuHitResults->copyToHost(hitResults);
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.h b/thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.h
deleted file mode 100644
index f1f6ffd402..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Raycast/b3GpuRaycast.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef B3_GPU_RAYCAST_H
-#define B3_GPU_RAYCAST_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h"
-
-class b3GpuRaycast
-{
-protected:
- struct b3GpuRaycastInternalData* m_data;
-
-public:
- b3GpuRaycast(cl_context ctx, cl_device_id device, cl_command_queue q);
- virtual ~b3GpuRaycast();
-
- void castRaysHost(const b3AlignedObjectArray<b3RayInfo>& raysIn, b3AlignedObjectArray<b3RayHit>& hitResults,
- int numBodies, const struct b3RigidBodyData* bodies, int numCollidables, const struct b3Collidable* collidables,
- const struct b3GpuNarrowPhaseInternalData* narrowphaseData);
-
- void castRays(const b3AlignedObjectArray<b3RayInfo>& rays, b3AlignedObjectArray<b3RayHit>& hitResults,
- int numBodies, const struct b3RigidBodyData* bodies, int numCollidables, const struct b3Collidable* collidables,
- const struct b3GpuNarrowPhaseInternalData* narrowphaseData, class b3GpuBroadphaseInterface* broadphase);
-};
-
-#endif //B3_GPU_RAYCAST_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.cl b/thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.cl
deleted file mode 100644
index e72d96876b..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.cl
+++ /dev/null
@@ -1,439 +0,0 @@
-
-#define SHAPE_CONVEX_HULL 3
-#define SHAPE_PLANE 4
-#define SHAPE_CONCAVE_TRIMESH 5
-#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6
-#define SHAPE_SPHERE 7
-
-
-typedef struct
-{
- float4 m_from;
- float4 m_to;
-} b3RayInfo;
-
-typedef struct
-{
- float m_hitFraction;
- int m_hitResult0;
- int m_hitResult1;
- int m_hitResult2;
- float4 m_hitPoint;
- float4 m_hitNormal;
-} b3RayHit;
-
-typedef struct
-{
- float4 m_pos;
- float4 m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- unsigned int m_collidableIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} Body;
-
-typedef struct Collidable
-{
- union {
- int m_numChildShapes;
- int m_bvhIndex;
- };
- float m_radius;
- int m_shapeType;
- int m_shapeIndex;
-} Collidable;
-
-
-typedef struct
-{
- float4 m_localCenter;
- float4 m_extents;
- float4 mC;
- float4 mE;
-
- float m_radius;
- int m_faceOffset;
- int m_numFaces;
- int m_numVertices;
-
- int m_vertexOffset;
- int m_uniqueEdgesOffset;
- int m_numUniqueEdges;
- int m_unused;
-
-} ConvexPolyhedronCL;
-
-typedef struct
-{
- float4 m_plane;
- int m_indexOffset;
- int m_numIndices;
-} b3GpuFace;
-
-
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
- Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
- Quaternion qtNormalize(Quaternion in);
-
-
-__inline
- Quaternion qtInvert(Quaternion q);
-
-
-__inline
- float dot3F4(float4 a, float4 b)
-{
- float4 a1 = (float4)(a.xyz,0.f);
- float4 b1 = (float4)(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-
-__inline
- Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross( a, b );
- ans += a.w*b+b.w*a;
- // ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
- Quaternion qtNormalize(Quaternion in)
-{
- return fast_normalize(in);
- // in /= length( in );
- // return in;
-}
-__inline
- float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(q,vcpy);
- out = qtMul(out,qInv);
- return out;
-}
-
-__inline
- Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
- float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-
-
-void trInverse(float4 translationIn, Quaternion orientationIn,
- float4* translationOut, Quaternion* orientationOut)
-{
- *orientationOut = qtInvert(orientationIn);
- *translationOut = qtRotate(*orientationOut, -translationIn);
-}
-
-
-
-
-
-bool rayConvex(float4 rayFromLocal, float4 rayToLocal, int numFaces, int faceOffset,
- __global const b3GpuFace* faces, float* hitFraction, float4* hitNormal)
-{
- rayFromLocal.w = 0.f;
- rayToLocal.w = 0.f;
- bool result = true;
-
- float exitFraction = hitFraction[0];
- float enterFraction = -0.3f;
- float4 curHitNormal = (float4)(0,0,0,0);
- for (int i=0;i<numFaces && result;i++)
- {
- b3GpuFace face = faces[faceOffset+i];
- float fromPlaneDist = dot(rayFromLocal,face.m_plane)+face.m_plane.w;
- float toPlaneDist = dot(rayToLocal,face.m_plane)+face.m_plane.w;
- if (fromPlaneDist<0.f)
- {
- if (toPlaneDist >= 0.f)
- {
- float fraction = fromPlaneDist / (fromPlaneDist-toPlaneDist);
- if (exitFraction>fraction)
- {
- exitFraction = fraction;
- }
- }
- } else
- {
- if (toPlaneDist<0.f)
- {
- float fraction = fromPlaneDist / (fromPlaneDist-toPlaneDist);
- if (enterFraction <= fraction)
- {
- enterFraction = fraction;
- curHitNormal = face.m_plane;
- curHitNormal.w = 0.f;
- }
- } else
- {
- result = false;
- }
- }
- if (exitFraction <= enterFraction)
- result = false;
- }
-
- if (enterFraction < 0.f)
- {
- result = false;
- }
-
- if (result)
- {
- hitFraction[0] = enterFraction;
- hitNormal[0] = curHitNormal;
- }
- return result;
-}
-
-
-
-
-
-
-bool sphere_intersect(float4 spherePos, float radius, float4 rayFrom, float4 rayTo, float* hitFraction)
-{
- float4 rs = rayFrom - spherePos;
- rs.w = 0.f;
- float4 rayDir = rayTo-rayFrom;
- rayDir.w = 0.f;
- float A = dot(rayDir,rayDir);
- float B = dot(rs, rayDir);
- float C = dot(rs, rs) - (radius * radius);
-
- float D = B * B - A*C;
-
- if (D > 0.0f)
- {
- float t = (-B - sqrt(D))/A;
-
- if ( (t >= 0.0f) && (t < (*hitFraction)) )
- {
- *hitFraction = t;
- return true;
- }
- }
- return false;
-}
-
-float4 setInterpolate3(float4 from, float4 to, float t)
-{
- float s = 1.0f - t;
- float4 result;
- result = s * from + t * to;
- result.w = 0.f;
- return result;
-}
-
-__kernel void rayCastKernel(
- int numRays,
- const __global b3RayInfo* rays,
- __global b3RayHit* hitResults,
- const int numBodies,
- __global Body* bodies,
- __global Collidable* collidables,
- __global const b3GpuFace* faces,
- __global const ConvexPolyhedronCL* convexShapes )
-{
-
- int i = get_global_id(0);
- if (i>=numRays)
- return;
-
- hitResults[i].m_hitFraction = 1.f;
-
- float4 rayFrom = rays[i].m_from;
- float4 rayTo = rays[i].m_to;
- float hitFraction = 1.f;
- float4 hitPoint;
- float4 hitNormal;
- int hitBodyIndex= -1;
-
- int cachedCollidableIndex = -1;
- Collidable cachedCollidable;
-
- for (int b=0;b<numBodies;b++)
- {
- if (hitResults[i].m_hitResult2==b)
- continue;
- Body body = bodies[b];
- float4 pos = body.m_pos;
- float4 orn = body.m_quat;
- if (cachedCollidableIndex != body.m_collidableIdx)
- {
- cachedCollidableIndex = body.m_collidableIdx;
- cachedCollidable = collidables[cachedCollidableIndex];
- }
- if (cachedCollidable.m_shapeType == SHAPE_CONVEX_HULL)
- {
-
- float4 invPos = (float4)(0,0,0,0);
- float4 invOrn = (float4)(0,0,0,0);
- float4 rayFromLocal = (float4)(0,0,0,0);
- float4 rayToLocal = (float4)(0,0,0,0);
- invOrn = qtInvert(orn);
- invPos = qtRotate(invOrn, -pos);
- rayFromLocal = qtRotate( invOrn, rayFrom ) + invPos;
- rayToLocal = qtRotate( invOrn, rayTo) + invPos;
- rayFromLocal.w = 0.f;
- rayToLocal.w = 0.f;
- int numFaces = convexShapes[cachedCollidable.m_shapeIndex].m_numFaces;
- int faceOffset = convexShapes[cachedCollidable.m_shapeIndex].m_faceOffset;
- if (numFaces)
- {
- if (rayConvex(rayFromLocal, rayToLocal, numFaces, faceOffset,faces, &hitFraction, &hitNormal))
- {
- hitBodyIndex = b;
-
- }
- }
- }
- if (cachedCollidable.m_shapeType == SHAPE_SPHERE)
- {
- float radius = cachedCollidable.m_radius;
-
- if (sphere_intersect(pos, radius, rayFrom, rayTo, &hitFraction))
- {
- hitBodyIndex = b;
- hitNormal = (float4) (hitPoint-bodies[b].m_pos);
- }
- }
- }
-
- if (hitBodyIndex>=0)
- {
- hitPoint = setInterpolate3(rayFrom, rayTo,hitFraction);
- hitResults[i].m_hitFraction = hitFraction;
- hitResults[i].m_hitPoint = hitPoint;
- hitResults[i].m_hitNormal = normalize(hitNormal);
- hitResults[i].m_hitResult0 = hitBodyIndex;
- }
-
-}
-
-
-__kernel void findRayRigidPairIndexRanges(__global int2* rayRigidPairs,
- __global int* out_firstRayRigidPairIndexPerRay,
- __global int* out_numRayRigidPairsPerRay,
- int numRayRigidPairs)
-{
- int rayRigidPairIndex = get_global_id(0);
- if (rayRigidPairIndex >= numRayRigidPairs) return;
-
- int rayIndex = rayRigidPairs[rayRigidPairIndex].x;
-
- atomic_min(&out_firstRayRigidPairIndexPerRay[rayIndex], rayRigidPairIndex);
- atomic_inc(&out_numRayRigidPairsPerRay[rayIndex]);
-}
-
-__kernel void rayCastPairsKernel(const __global b3RayInfo* rays,
- __global b3RayHit* hitResults,
- __global int* firstRayRigidPairIndexPerRay,
- __global int* numRayRigidPairsPerRay,
-
- __global Body* bodies,
- __global Collidable* collidables,
- __global const b3GpuFace* faces,
- __global const ConvexPolyhedronCL* convexShapes,
-
- __global int2* rayRigidPairs,
- int numRays)
-{
- int i = get_global_id(0);
- if (i >= numRays) return;
-
- float4 rayFrom = rays[i].m_from;
- float4 rayTo = rays[i].m_to;
-
- hitResults[i].m_hitFraction = 1.f;
-
- float hitFraction = 1.f;
- float4 hitPoint;
- float4 hitNormal;
- int hitBodyIndex = -1;
-
- //
- for(int pair = 0; pair < numRayRigidPairsPerRay[i]; ++pair)
- {
- int rayRigidPairIndex = pair + firstRayRigidPairIndexPerRay[i];
- int b = rayRigidPairs[rayRigidPairIndex].y;
-
- if (hitResults[i].m_hitResult2 == b) continue;
-
- Body body = bodies[b];
- Collidable rigidCollidable = collidables[body.m_collidableIdx];
-
- float4 pos = body.m_pos;
- float4 orn = body.m_quat;
-
- if (rigidCollidable.m_shapeType == SHAPE_CONVEX_HULL)
- {
- float4 invPos = (float4)(0,0,0,0);
- float4 invOrn = (float4)(0,0,0,0);
- float4 rayFromLocal = (float4)(0,0,0,0);
- float4 rayToLocal = (float4)(0,0,0,0);
- invOrn = qtInvert(orn);
- invPos = qtRotate(invOrn, -pos);
- rayFromLocal = qtRotate( invOrn, rayFrom ) + invPos;
- rayToLocal = qtRotate( invOrn, rayTo) + invPos;
- rayFromLocal.w = 0.f;
- rayToLocal.w = 0.f;
- int numFaces = convexShapes[rigidCollidable.m_shapeIndex].m_numFaces;
- int faceOffset = convexShapes[rigidCollidable.m_shapeIndex].m_faceOffset;
-
- if (numFaces && rayConvex(rayFromLocal, rayToLocal, numFaces, faceOffset,faces, &hitFraction, &hitNormal))
- {
- hitBodyIndex = b;
- hitPoint = setInterpolate3(rayFrom, rayTo, hitFraction);
- }
- }
-
- if (rigidCollidable.m_shapeType == SHAPE_SPHERE)
- {
- float radius = rigidCollidable.m_radius;
-
- if (sphere_intersect(pos, radius, rayFrom, rayTo, &hitFraction))
- {
- hitBodyIndex = b;
- hitPoint = setInterpolate3(rayFrom, rayTo, hitFraction);
- hitNormal = (float4) (hitPoint - bodies[b].m_pos);
- }
- }
- }
-
- if (hitBodyIndex >= 0)
- {
- hitResults[i].m_hitFraction = hitFraction;
- hitResults[i].m_hitPoint = hitPoint;
- hitResults[i].m_hitNormal = normalize(hitNormal);
- hitResults[i].m_hitResult0 = hitBodyIndex;
- }
-
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.h b/thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.h
deleted file mode 100644
index 94f6a8eb9f..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/Raycast/kernels/rayCastKernels.h
+++ /dev/null
@@ -1,380 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* rayCastKernelCL =
- "#define SHAPE_CONVEX_HULL 3\n"
- "#define SHAPE_PLANE 4\n"
- "#define SHAPE_CONCAVE_TRIMESH 5\n"
- "#define SHAPE_COMPOUND_OF_CONVEX_HULLS 6\n"
- "#define SHAPE_SPHERE 7\n"
- "typedef struct\n"
- "{\n"
- " float4 m_from;\n"
- " float4 m_to;\n"
- "} b3RayInfo;\n"
- "typedef struct\n"
- "{\n"
- " float m_hitFraction;\n"
- " int m_hitResult0;\n"
- " int m_hitResult1;\n"
- " int m_hitResult2;\n"
- " float4 m_hitPoint;\n"
- " float4 m_hitNormal;\n"
- "} b3RayHit;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " float4 m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " unsigned int m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} Body;\n"
- "typedef struct Collidable\n"
- "{\n"
- " union {\n"
- " int m_numChildShapes;\n"
- " int m_bvhIndex;\n"
- " };\n"
- " float m_radius;\n"
- " int m_shapeType;\n"
- " int m_shapeIndex;\n"
- "} Collidable;\n"
- "typedef struct \n"
- "{\n"
- " float4 m_localCenter;\n"
- " float4 m_extents;\n"
- " float4 mC;\n"
- " float4 mE;\n"
- " float m_radius;\n"
- " int m_faceOffset;\n"
- " int m_numFaces;\n"
- " int m_numVertices;\n"
- " int m_vertexOffset;\n"
- " int m_uniqueEdgesOffset;\n"
- " int m_numUniqueEdges;\n"
- " int m_unused;\n"
- "} ConvexPolyhedronCL;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_plane;\n"
- " int m_indexOffset;\n"
- " int m_numIndices;\n"
- "} b3GpuFace;\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- " Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- " Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- " Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- " float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = (float4)(a.xyz,0.f);\n"
- " float4 b1 = (float4)(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- " Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- " // ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- " Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fast_normalize(in);\n"
- " // in /= length( in );\n"
- " // return in;\n"
- "}\n"
- "__inline\n"
- " float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(q,vcpy);\n"
- " out = qtMul(out,qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- " Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- " float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "void trInverse(float4 translationIn, Quaternion orientationIn,\n"
- " float4* translationOut, Quaternion* orientationOut)\n"
- "{\n"
- " *orientationOut = qtInvert(orientationIn);\n"
- " *translationOut = qtRotate(*orientationOut, -translationIn);\n"
- "}\n"
- "bool rayConvex(float4 rayFromLocal, float4 rayToLocal, int numFaces, int faceOffset,\n"
- " __global const b3GpuFace* faces, float* hitFraction, float4* hitNormal)\n"
- "{\n"
- " rayFromLocal.w = 0.f;\n"
- " rayToLocal.w = 0.f;\n"
- " bool result = true;\n"
- " float exitFraction = hitFraction[0];\n"
- " float enterFraction = -0.3f;\n"
- " float4 curHitNormal = (float4)(0,0,0,0);\n"
- " for (int i=0;i<numFaces && result;i++)\n"
- " {\n"
- " b3GpuFace face = faces[faceOffset+i];\n"
- " float fromPlaneDist = dot(rayFromLocal,face.m_plane)+face.m_plane.w;\n"
- " float toPlaneDist = dot(rayToLocal,face.m_plane)+face.m_plane.w;\n"
- " if (fromPlaneDist<0.f)\n"
- " {\n"
- " if (toPlaneDist >= 0.f)\n"
- " {\n"
- " float fraction = fromPlaneDist / (fromPlaneDist-toPlaneDist);\n"
- " if (exitFraction>fraction)\n"
- " {\n"
- " exitFraction = fraction;\n"
- " }\n"
- " } \n"
- " } else\n"
- " {\n"
- " if (toPlaneDist<0.f)\n"
- " {\n"
- " float fraction = fromPlaneDist / (fromPlaneDist-toPlaneDist);\n"
- " if (enterFraction <= fraction)\n"
- " {\n"
- " enterFraction = fraction;\n"
- " curHitNormal = face.m_plane;\n"
- " curHitNormal.w = 0.f;\n"
- " }\n"
- " } else\n"
- " {\n"
- " result = false;\n"
- " }\n"
- " }\n"
- " if (exitFraction <= enterFraction)\n"
- " result = false;\n"
- " }\n"
- " if (enterFraction < 0.f)\n"
- " {\n"
- " result = false;\n"
- " }\n"
- " if (result)\n"
- " { \n"
- " hitFraction[0] = enterFraction;\n"
- " hitNormal[0] = curHitNormal;\n"
- " }\n"
- " return result;\n"
- "}\n"
- "bool sphere_intersect(float4 spherePos, float radius, float4 rayFrom, float4 rayTo, float* hitFraction)\n"
- "{\n"
- " float4 rs = rayFrom - spherePos;\n"
- " rs.w = 0.f;\n"
- " float4 rayDir = rayTo-rayFrom;\n"
- " rayDir.w = 0.f;\n"
- " float A = dot(rayDir,rayDir);\n"
- " float B = dot(rs, rayDir);\n"
- " float C = dot(rs, rs) - (radius * radius);\n"
- " float D = B * B - A*C;\n"
- " if (D > 0.0f)\n"
- " {\n"
- " float t = (-B - sqrt(D))/A;\n"
- " if ( (t >= 0.0f) && (t < (*hitFraction)) )\n"
- " {\n"
- " *hitFraction = t;\n"
- " return true;\n"
- " }\n"
- " }\n"
- " return false;\n"
- "}\n"
- "float4 setInterpolate3(float4 from, float4 to, float t)\n"
- "{\n"
- " float s = 1.0f - t;\n"
- " float4 result;\n"
- " result = s * from + t * to;\n"
- " result.w = 0.f; \n"
- " return result; \n"
- "}\n"
- "__kernel void rayCastKernel( \n"
- " int numRays, \n"
- " const __global b3RayInfo* rays, \n"
- " __global b3RayHit* hitResults, \n"
- " const int numBodies, \n"
- " __global Body* bodies,\n"
- " __global Collidable* collidables,\n"
- " __global const b3GpuFace* faces,\n"
- " __global const ConvexPolyhedronCL* convexShapes )\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numRays)\n"
- " return;\n"
- " hitResults[i].m_hitFraction = 1.f;\n"
- " float4 rayFrom = rays[i].m_from;\n"
- " float4 rayTo = rays[i].m_to;\n"
- " float hitFraction = 1.f;\n"
- " float4 hitPoint;\n"
- " float4 hitNormal;\n"
- " int hitBodyIndex= -1;\n"
- " int cachedCollidableIndex = -1;\n"
- " Collidable cachedCollidable;\n"
- " for (int b=0;b<numBodies;b++)\n"
- " {\n"
- " if (hitResults[i].m_hitResult2==b)\n"
- " continue;\n"
- " Body body = bodies[b];\n"
- " float4 pos = body.m_pos;\n"
- " float4 orn = body.m_quat;\n"
- " if (cachedCollidableIndex != body.m_collidableIdx)\n"
- " {\n"
- " cachedCollidableIndex = body.m_collidableIdx;\n"
- " cachedCollidable = collidables[cachedCollidableIndex];\n"
- " }\n"
- " if (cachedCollidable.m_shapeType == SHAPE_CONVEX_HULL)\n"
- " {\n"
- " float4 invPos = (float4)(0,0,0,0);\n"
- " float4 invOrn = (float4)(0,0,0,0);\n"
- " float4 rayFromLocal = (float4)(0,0,0,0);\n"
- " float4 rayToLocal = (float4)(0,0,0,0);\n"
- " invOrn = qtInvert(orn);\n"
- " invPos = qtRotate(invOrn, -pos);\n"
- " rayFromLocal = qtRotate( invOrn, rayFrom ) + invPos;\n"
- " rayToLocal = qtRotate( invOrn, rayTo) + invPos;\n"
- " rayFromLocal.w = 0.f;\n"
- " rayToLocal.w = 0.f;\n"
- " int numFaces = convexShapes[cachedCollidable.m_shapeIndex].m_numFaces;\n"
- " int faceOffset = convexShapes[cachedCollidable.m_shapeIndex].m_faceOffset;\n"
- " if (numFaces)\n"
- " {\n"
- " if (rayConvex(rayFromLocal, rayToLocal, numFaces, faceOffset,faces, &hitFraction, &hitNormal))\n"
- " {\n"
- " hitBodyIndex = b;\n"
- " \n"
- " }\n"
- " }\n"
- " }\n"
- " if (cachedCollidable.m_shapeType == SHAPE_SPHERE)\n"
- " {\n"
- " float radius = cachedCollidable.m_radius;\n"
- " \n"
- " if (sphere_intersect(pos, radius, rayFrom, rayTo, &hitFraction))\n"
- " {\n"
- " hitBodyIndex = b;\n"
- " hitNormal = (float4) (hitPoint-bodies[b].m_pos);\n"
- " }\n"
- " }\n"
- " }\n"
- " if (hitBodyIndex>=0)\n"
- " {\n"
- " hitPoint = setInterpolate3(rayFrom, rayTo,hitFraction);\n"
- " hitResults[i].m_hitFraction = hitFraction;\n"
- " hitResults[i].m_hitPoint = hitPoint;\n"
- " hitResults[i].m_hitNormal = normalize(hitNormal);\n"
- " hitResults[i].m_hitResult0 = hitBodyIndex;\n"
- " }\n"
- "}\n"
- "__kernel void findRayRigidPairIndexRanges(__global int2* rayRigidPairs, \n"
- " __global int* out_firstRayRigidPairIndexPerRay,\n"
- " __global int* out_numRayRigidPairsPerRay,\n"
- " int numRayRigidPairs)\n"
- "{\n"
- " int rayRigidPairIndex = get_global_id(0);\n"
- " if (rayRigidPairIndex >= numRayRigidPairs) return;\n"
- " \n"
- " int rayIndex = rayRigidPairs[rayRigidPairIndex].x;\n"
- " \n"
- " atomic_min(&out_firstRayRigidPairIndexPerRay[rayIndex], rayRigidPairIndex);\n"
- " atomic_inc(&out_numRayRigidPairsPerRay[rayIndex]);\n"
- "}\n"
- "__kernel void rayCastPairsKernel(const __global b3RayInfo* rays, \n"
- " __global b3RayHit* hitResults, \n"
- " __global int* firstRayRigidPairIndexPerRay,\n"
- " __global int* numRayRigidPairsPerRay,\n"
- " \n"
- " __global Body* bodies,\n"
- " __global Collidable* collidables,\n"
- " __global const b3GpuFace* faces,\n"
- " __global const ConvexPolyhedronCL* convexShapes,\n"
- " \n"
- " __global int2* rayRigidPairs,\n"
- " int numRays)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i >= numRays) return;\n"
- " \n"
- " float4 rayFrom = rays[i].m_from;\n"
- " float4 rayTo = rays[i].m_to;\n"
- " \n"
- " hitResults[i].m_hitFraction = 1.f;\n"
- " \n"
- " float hitFraction = 1.f;\n"
- " float4 hitPoint;\n"
- " float4 hitNormal;\n"
- " int hitBodyIndex = -1;\n"
- " \n"
- " //\n"
- " for(int pair = 0; pair < numRayRigidPairsPerRay[i]; ++pair)\n"
- " {\n"
- " int rayRigidPairIndex = pair + firstRayRigidPairIndexPerRay[i];\n"
- " int b = rayRigidPairs[rayRigidPairIndex].y;\n"
- " \n"
- " if (hitResults[i].m_hitResult2 == b) continue;\n"
- " \n"
- " Body body = bodies[b];\n"
- " Collidable rigidCollidable = collidables[body.m_collidableIdx];\n"
- " \n"
- " float4 pos = body.m_pos;\n"
- " float4 orn = body.m_quat;\n"
- " \n"
- " if (rigidCollidable.m_shapeType == SHAPE_CONVEX_HULL)\n"
- " {\n"
- " float4 invPos = (float4)(0,0,0,0);\n"
- " float4 invOrn = (float4)(0,0,0,0);\n"
- " float4 rayFromLocal = (float4)(0,0,0,0);\n"
- " float4 rayToLocal = (float4)(0,0,0,0);\n"
- " invOrn = qtInvert(orn);\n"
- " invPos = qtRotate(invOrn, -pos);\n"
- " rayFromLocal = qtRotate( invOrn, rayFrom ) + invPos;\n"
- " rayToLocal = qtRotate( invOrn, rayTo) + invPos;\n"
- " rayFromLocal.w = 0.f;\n"
- " rayToLocal.w = 0.f;\n"
- " int numFaces = convexShapes[rigidCollidable.m_shapeIndex].m_numFaces;\n"
- " int faceOffset = convexShapes[rigidCollidable.m_shapeIndex].m_faceOffset;\n"
- " \n"
- " if (numFaces && rayConvex(rayFromLocal, rayToLocal, numFaces, faceOffset,faces, &hitFraction, &hitNormal))\n"
- " {\n"
- " hitBodyIndex = b;\n"
- " hitPoint = setInterpolate3(rayFrom, rayTo, hitFraction);\n"
- " }\n"
- " }\n"
- " \n"
- " if (rigidCollidable.m_shapeType == SHAPE_SPHERE)\n"
- " {\n"
- " float radius = rigidCollidable.m_radius;\n"
- " \n"
- " if (sphere_intersect(pos, radius, rayFrom, rayTo, &hitFraction))\n"
- " {\n"
- " hitBodyIndex = b;\n"
- " hitPoint = setInterpolate3(rayFrom, rayTo, hitFraction);\n"
- " hitNormal = (float4) (hitPoint - bodies[b].m_pos);\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " if (hitBodyIndex >= 0)\n"
- " {\n"
- " hitResults[i].m_hitFraction = hitFraction;\n"
- " hitResults[i].m_hitPoint = hitPoint;\n"
- " hitResults[i].m_hitNormal = normalize(hitNormal);\n"
- " hitResults[i].m_hitResult0 = hitBodyIndex;\n"
- " }\n"
- " \n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuConstraint4.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuConstraint4.h
deleted file mode 100644
index 89c0142ab3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuConstraint4.h
+++ /dev/null
@@ -1,17 +0,0 @@
-
-#ifndef B3_CONSTRAINT4_h
-#define B3_CONSTRAINT4_h
-#include "Bullet3Common/b3Vector3.h"
-
-#include "Bullet3Dynamics/shared/b3ContactConstraint4.h"
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3GpuConstraint4 : public b3ContactConstraint4
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- inline void setFrictionCoeff(float value) { m_linear[3] = value; }
- inline float getFrictionCoeff() const { return m_linear[3]; }
-};
-
-#endif //B3_CONSTRAINT4_h
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.cpp
deleted file mode 100644
index a271090af4..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.cpp
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#include "b3GpuGenericConstraint.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-#include <new>
-#include "Bullet3Common/b3Transform.h"
-
-void b3GpuGenericConstraint::getInfo1(unsigned int* info, const b3RigidBodyData* bodies)
-{
- switch (m_constraintType)
- {
- case B3_GPU_POINT2POINT_CONSTRAINT_TYPE:
- {
- *info = 3;
- break;
- };
- default:
- {
- b3Assert(0);
- }
- };
-}
-
-void getInfo2Point2Point(b3GpuGenericConstraint* constraint, b3GpuConstraintInfo2* info, const b3RigidBodyData* bodies)
-{
- b3Transform trA;
- trA.setIdentity();
- trA.setOrigin(bodies[constraint->m_rbA].m_pos);
- trA.setRotation(bodies[constraint->m_rbA].m_quat);
-
- b3Transform trB;
- trB.setIdentity();
- trB.setOrigin(bodies[constraint->m_rbB].m_pos);
- trB.setRotation(bodies[constraint->m_rbB].m_quat);
-
- // anchor points in global coordinates with respect to body PORs.
-
- // set jacobian
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[info->rowskip + 1] = 1;
- info->m_J1linearAxis[2 * info->rowskip + 2] = 1;
-
- b3Vector3 a1 = trA.getBasis() * constraint->getPivotInA();
- //b3Vector3 a1a = b3QuatRotate(trA.getRotation(),constraint->getPivotInA());
-
- {
- b3Vector3* angular0 = (b3Vector3*)(info->m_J1angularAxis);
- b3Vector3* angular1 = (b3Vector3*)(info->m_J1angularAxis + info->rowskip);
- b3Vector3* angular2 = (b3Vector3*)(info->m_J1angularAxis + 2 * info->rowskip);
- b3Vector3 a1neg = -a1;
- a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- if (info->m_J2linearAxis)
- {
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[info->rowskip + 1] = -1;
- info->m_J2linearAxis[2 * info->rowskip + 2] = -1;
- }
-
- b3Vector3 a2 = trB.getBasis() * constraint->getPivotInB();
-
- {
- // b3Vector3 a2n = -a2;
- b3Vector3* angular0 = (b3Vector3*)(info->m_J2angularAxis);
- b3Vector3* angular1 = (b3Vector3*)(info->m_J2angularAxis + info->rowskip);
- b3Vector3* angular2 = (b3Vector3*)(info->m_J2angularAxis + 2 * info->rowskip);
- a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- // set right hand side
- // b3Scalar currERP = (m_flags & B3_P2P_FLAGS_ERP) ? m_erp : info->erp;
- b3Scalar currERP = info->erp;
-
- b3Scalar k = info->fps * currERP;
- int j;
- for (j = 0; j < 3; j++)
- {
- info->m_constraintError[j * info->rowskip] = k * (a2[j] + trB.getOrigin()[j] - a1[j] - trA.getOrigin()[j]);
- //printf("info->m_constraintError[%d]=%f\n",j,info->m_constraintError[j]);
- }
-#if 0
- if(m_flags & B3_P2P_FLAGS_CFM)
- {
- for (j=0; j<3; j++)
- {
- info->cfm[j*info->rowskip] = m_cfm;
- }
- }
-#endif
-
-#if 0
- b3Scalar impulseClamp = m_setting.m_impulseClamp;//
- for (j=0; j<3; j++)
- {
- if (m_setting.m_impulseClamp > 0)
- {
- info->m_lowerLimit[j*info->rowskip] = -impulseClamp;
- info->m_upperLimit[j*info->rowskip] = impulseClamp;
- }
- }
- info->m_damping = m_setting.m_damping;
-#endif
-}
-
-void b3GpuGenericConstraint::getInfo2(b3GpuConstraintInfo2* info, const b3RigidBodyData* bodies)
-{
- switch (m_constraintType)
- {
- case B3_GPU_POINT2POINT_CONSTRAINT_TYPE:
- {
- getInfo2Point2Point(this, info, bodies);
- break;
- };
- default:
- {
- b3Assert(0);
- }
- };
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.h
deleted file mode 100644
index 1f163ba7d5..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef B3_GPU_GENERIC_CONSTRAINT_H
-#define B3_GPU_GENERIC_CONSTRAINT_H
-
-#include "Bullet3Common/b3Quaternion.h"
-struct b3RigidBodyData;
-enum B3_CONSTRAINT_FLAGS
-{
- B3_CONSTRAINT_FLAG_ENABLED = 1,
-};
-
-enum b3GpuGenericConstraintType
-{
- B3_GPU_POINT2POINT_CONSTRAINT_TYPE = 3,
- B3_GPU_FIXED_CONSTRAINT_TYPE = 4,
- // B3_HINGE_CONSTRAINT_TYPE,
- // B3_CONETWIST_CONSTRAINT_TYPE,
- // B3_D6_CONSTRAINT_TYPE,
- // B3_SLIDER_CONSTRAINT_TYPE,
- // B3_CONTACT_CONSTRAINT_TYPE,
- // B3_D6_SPRING_CONSTRAINT_TYPE,
- // B3_GEAR_CONSTRAINT_TYPE,
-
- B3_GPU_MAX_CONSTRAINT_TYPE
-};
-
-struct b3GpuConstraintInfo2
-{
- // integrator parameters: frames per second (1/stepsize), default error
- // reduction parameter (0..1).
- b3Scalar fps, erp;
-
- // for the first and second body, pointers to two (linear and angular)
- // n*3 jacobian sub matrices, stored by rows. these matrices will have
- // been initialized to 0 on entry. if the second body is zero then the
- // J2xx pointers may be 0.
- b3Scalar *m_J1linearAxis, *m_J1angularAxis, *m_J2linearAxis, *m_J2angularAxis;
-
- // elements to jump from one row to the next in J's
- int rowskip;
-
- // right hand sides of the equation J*v = c + cfm * lambda. cfm is the
- // "constraint force mixing" vector. c is set to zero on entry, cfm is
- // set to a constant value (typically very small or zero) value on entry.
- b3Scalar *m_constraintError, *cfm;
-
- // lo and hi limits for variables (set to -/+ infinity on entry).
- b3Scalar *m_lowerLimit, *m_upperLimit;
-
- // findex vector for variables. see the LCP solver interface for a
- // description of what this does. this is set to -1 on entry.
- // note that the returned indexes are relative to the first index of
- // the constraint.
- int* findex;
- // number of solver iterations
- int m_numIterations;
-
- //damping of the velocity
- b3Scalar m_damping;
-};
-
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3GpuGenericConstraint
-{
- int m_constraintType;
- int m_rbA;
- int m_rbB;
- float m_breakingImpulseThreshold;
-
- b3Vector3 m_pivotInA;
- b3Vector3 m_pivotInB;
- b3Quaternion m_relTargetAB;
-
- int m_flags;
- int m_uid;
- int m_padding[2];
-
- int getRigidBodyA() const
- {
- return m_rbA;
- }
- int getRigidBodyB() const
- {
- return m_rbB;
- }
-
- const b3Vector3& getPivotInA() const
- {
- return m_pivotInA;
- }
-
- const b3Vector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- int isEnabled() const
- {
- return m_flags & B3_CONSTRAINT_FLAG_ENABLED;
- }
-
- float getBreakingImpulseThreshold() const
- {
- return m_breakingImpulseThreshold;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- void getInfo1(unsigned int* info, const b3RigidBodyData* bodies);
-
- ///internal method used by the constraint solver, don't use them directly
- void getInfo2(b3GpuConstraintInfo2 * info, const b3RigidBodyData* bodies);
-};
-
-#endif //B3_GPU_GENERIC_CONSTRAINT_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.cpp
deleted file mode 100644
index 089fb1f6a6..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.cpp
+++ /dev/null
@@ -1,1305 +0,0 @@
-
-#include "b3GpuJacobiContactSolver.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3FillCL.h" //b3Int2
-class b3Vector3;
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "Bullet3OpenCL/RigidBody/kernels/solverUtils.h"
-#include "Bullet3Common/b3Logging.h"
-#include "b3GpuConstraint4.h"
-#include "Bullet3Common/shared/b3Int2.h"
-#include "Bullet3Common/shared/b3Int4.h"
-#define SOLVER_UTILS_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solverUtils.cl"
-
-struct b3GpuJacobiSolverInternalData
-{
- //btRadixSort32CL* m_sort32;
- //btBoundSearchCL* m_search;
- b3PrefixScanCL* m_scan;
-
- b3OpenCLArray<unsigned int>* m_bodyCount;
- b3OpenCLArray<b3Int2>* m_contactConstraintOffsets;
- b3OpenCLArray<unsigned int>* m_offsetSplitBodies;
-
- b3OpenCLArray<b3Vector3>* m_deltaLinearVelocities;
- b3OpenCLArray<b3Vector3>* m_deltaAngularVelocities;
-
- b3AlignedObjectArray<b3Vector3> m_deltaLinearVelocitiesCPU;
- b3AlignedObjectArray<b3Vector3> m_deltaAngularVelocitiesCPU;
-
- b3OpenCLArray<b3GpuConstraint4>* m_contactConstraints;
-
- b3FillCL* m_filler;
-
- cl_kernel m_countBodiesKernel;
- cl_kernel m_contactToConstraintSplitKernel;
- cl_kernel m_clearVelocitiesKernel;
- cl_kernel m_averageVelocitiesKernel;
- cl_kernel m_updateBodyVelocitiesKernel;
- cl_kernel m_solveContactKernel;
- cl_kernel m_solveFrictionKernel;
-};
-
-b3GpuJacobiContactSolver::b3GpuJacobiContactSolver(cl_context ctx, cl_device_id device, cl_command_queue queue, int pairCapacity)
- : m_context(ctx),
- m_device(device),
- m_queue(queue)
-{
- m_data = new b3GpuJacobiSolverInternalData;
- m_data->m_scan = new b3PrefixScanCL(m_context, m_device, m_queue);
- m_data->m_bodyCount = new b3OpenCLArray<unsigned int>(m_context, m_queue);
- m_data->m_filler = new b3FillCL(m_context, m_device, m_queue);
- m_data->m_contactConstraintOffsets = new b3OpenCLArray<b3Int2>(m_context, m_queue);
- m_data->m_offsetSplitBodies = new b3OpenCLArray<unsigned int>(m_context, m_queue);
- m_data->m_contactConstraints = new b3OpenCLArray<b3GpuConstraint4>(m_context, m_queue);
- m_data->m_deltaLinearVelocities = new b3OpenCLArray<b3Vector3>(m_context, m_queue);
- m_data->m_deltaAngularVelocities = new b3OpenCLArray<b3Vector3>(m_context, m_queue);
-
- cl_int pErrNum;
- const char* additionalMacros = "";
- const char* solverUtilsSource = solverUtilsCL;
- {
- cl_program solverUtilsProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solverUtilsSource, &pErrNum, additionalMacros, SOLVER_UTILS_KERNEL_PATH);
- b3Assert(solverUtilsProg);
- m_data->m_countBodiesKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "CountBodiesKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_countBodiesKernel);
-
- m_data->m_contactToConstraintSplitKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "ContactToConstraintSplitKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_contactToConstraintSplitKernel);
- m_data->m_clearVelocitiesKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "ClearVelocitiesKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_clearVelocitiesKernel);
-
- m_data->m_averageVelocitiesKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "AverageVelocitiesKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_averageVelocitiesKernel);
-
- m_data->m_updateBodyVelocitiesKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "UpdateBodyVelocitiesKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_updateBodyVelocitiesKernel);
-
- m_data->m_solveContactKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "SolveContactJacobiKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_solveContactKernel);
-
- m_data->m_solveFrictionKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverUtilsSource, "SolveFrictionJacobiKernel", &pErrNum, solverUtilsProg, additionalMacros);
- b3Assert(m_data->m_solveFrictionKernel);
- }
-}
-
-b3GpuJacobiContactSolver::~b3GpuJacobiContactSolver()
-{
- clReleaseKernel(m_data->m_solveContactKernel);
- clReleaseKernel(m_data->m_solveFrictionKernel);
- clReleaseKernel(m_data->m_countBodiesKernel);
- clReleaseKernel(m_data->m_contactToConstraintSplitKernel);
- clReleaseKernel(m_data->m_averageVelocitiesKernel);
- clReleaseKernel(m_data->m_updateBodyVelocitiesKernel);
- clReleaseKernel(m_data->m_clearVelocitiesKernel);
-
- delete m_data->m_deltaLinearVelocities;
- delete m_data->m_deltaAngularVelocities;
- delete m_data->m_contactConstraints;
- delete m_data->m_offsetSplitBodies;
- delete m_data->m_contactConstraintOffsets;
- delete m_data->m_bodyCount;
- delete m_data->m_filler;
- delete m_data->m_scan;
- delete m_data;
-}
-
-b3Vector3 make_float4(float v)
-{
- return b3MakeVector3(v, v, v);
-}
-
-b3Vector4 make_float4(float x, float y, float z, float w)
-{
- return b3MakeVector4(x, y, z, w);
-}
-
-static inline float calcRelVel(const b3Vector3& l0, const b3Vector3& l1, const b3Vector3& a0, const b3Vector3& a1,
- const b3Vector3& linVel0, const b3Vector3& angVel0, const b3Vector3& linVel1, const b3Vector3& angVel1)
-{
- return b3Dot(l0, linVel0) + b3Dot(a0, angVel0) + b3Dot(l1, linVel1) + b3Dot(a1, angVel1);
-}
-
-static inline void setLinearAndAngular(const b3Vector3& n, const b3Vector3& r0, const b3Vector3& r1,
- b3Vector3& linear, b3Vector3& angular0, b3Vector3& angular1)
-{
- linear = n;
- angular0 = b3Cross(r0, n);
- angular1 = -b3Cross(r1, n);
-}
-
-static __inline void solveContact(b3GpuConstraint4& cs,
- const b3Vector3& posA, const b3Vector3& linVelARO, const b3Vector3& angVelARO, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, const b3Vector3& linVelBRO, const b3Vector3& angVelBRO, float invMassB, const b3Matrix3x3& invInertiaB,
- float maxRambdaDt[4], float minRambdaDt[4], b3Vector3& dLinVelA, b3Vector3& dAngVelA, b3Vector3& dLinVelB, b3Vector3& dAngVelB)
-{
- for (int ic = 0; ic < 4; ic++)
- {
- // dont necessary because this makes change to 0
- if (cs.m_jacCoeffInv[ic] == 0.f) continue;
-
- {
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = cs.m_worldPos[ic] - (b3Vector3&)posA;
- b3Vector3 r1 = cs.m_worldPos[ic] - (b3Vector3&)posB;
- setLinearAndAngular((const b3Vector3&)cs.m_linear, (const b3Vector3&)r0, (const b3Vector3&)r1, linear, angular0, angular1);
-
- float rambdaDt = calcRelVel((const b3Vector3&)cs.m_linear, (const b3Vector3&)-cs.m_linear, angular0, angular1,
- linVelARO + dLinVelA, angVelARO + dAngVelA, linVelBRO + dLinVelB, angVelBRO + dAngVelB) +
- cs.m_b[ic];
- rambdaDt *= cs.m_jacCoeffInv[ic];
-
- {
- float prevSum = cs.m_appliedRambdaDt[ic];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt[ic]);
- updated = b3Min(updated, maxRambdaDt[ic]);
- rambdaDt = updated - prevSum;
- cs.m_appliedRambdaDt[ic] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-#ifdef _WIN32
- b3Assert(_finite(linImp0.getX()));
- b3Assert(_finite(linImp1.getX()));
-#endif
-
- if (invMassA)
- {
- dLinVelA += linImp0;
- dAngVelA += angImp0;
- }
- if (invMassB)
- {
- dLinVelB += linImp1;
- dAngVelB += angImp1;
- }
- }
- }
-}
-
-void solveContact3(b3GpuConstraint4* cs,
- b3Vector3* posAPtr, b3Vector3* linVelA, b3Vector3* angVelA, float invMassA, const b3Matrix3x3& invInertiaA,
- b3Vector3* posBPtr, b3Vector3* linVelB, b3Vector3* angVelB, float invMassB, const b3Matrix3x3& invInertiaB,
- b3Vector3* dLinVelA, b3Vector3* dAngVelA, b3Vector3* dLinVelB, b3Vector3* dAngVelB)
-{
- float minRambdaDt = 0;
- float maxRambdaDt = FLT_MAX;
-
- for (int ic = 0; ic < 4; ic++)
- {
- if (cs->m_jacCoeffInv[ic] == 0.f) continue;
-
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = cs->m_worldPos[ic] - *posAPtr;
- b3Vector3 r1 = cs->m_worldPos[ic] - *posBPtr;
- setLinearAndAngular(cs->m_linear, r0, r1, linear, angular0, angular1);
-
- float rambdaDt = calcRelVel(cs->m_linear, -cs->m_linear, angular0, angular1,
- *linVelA + *dLinVelA, *angVelA + *dAngVelA, *linVelB + *dLinVelB, *angVelB + *dAngVelB) +
- cs->m_b[ic];
- rambdaDt *= cs->m_jacCoeffInv[ic];
-
- {
- float prevSum = cs->m_appliedRambdaDt[ic];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt);
- updated = b3Min(updated, maxRambdaDt);
- rambdaDt = updated - prevSum;
- cs->m_appliedRambdaDt[ic] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-
- if (invMassA)
- {
- *dLinVelA += linImp0;
- *dAngVelA += angImp0;
- }
- if (invMassB)
- {
- *dLinVelB += linImp1;
- *dAngVelB += angImp1;
- }
- }
-}
-
-static inline void solveFriction(b3GpuConstraint4& cs,
- const b3Vector3& posA, const b3Vector3& linVelARO, const b3Vector3& angVelARO, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, const b3Vector3& linVelBRO, const b3Vector3& angVelBRO, float invMassB, const b3Matrix3x3& invInertiaB,
- float maxRambdaDt[4], float minRambdaDt[4], b3Vector3& dLinVelA, b3Vector3& dAngVelA, b3Vector3& dLinVelB, b3Vector3& dAngVelB)
-{
- b3Vector3 linVelA = linVelARO + dLinVelA;
- b3Vector3 linVelB = linVelBRO + dLinVelB;
- b3Vector3 angVelA = angVelARO + dAngVelA;
- b3Vector3 angVelB = angVelBRO + dAngVelB;
-
- if (cs.m_fJacCoeffInv[0] == 0 && cs.m_fJacCoeffInv[0] == 0) return;
- const b3Vector3& center = (const b3Vector3&)cs.m_center;
-
- b3Vector3 n = -(const b3Vector3&)cs.m_linear;
-
- b3Vector3 tangent[2];
-#if 1
- b3PlaneSpace1(n, tangent[0], tangent[1]);
-#else
- b3Vector3 r = cs.m_worldPos[0] - center;
- tangent[0] = cross3(n, r);
- tangent[1] = cross3(tangent[0], n);
- tangent[0] = normalize3(tangent[0]);
- tangent[1] = normalize3(tangent[1]);
-#endif
-
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = center - posA;
- b3Vector3 r1 = center - posB;
- for (int i = 0; i < 2; i++)
- {
- setLinearAndAngular(tangent[i], r0, r1, linear, angular0, angular1);
- float rambdaDt = calcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB);
- rambdaDt *= cs.m_fJacCoeffInv[i];
-
- {
- float prevSum = cs.m_fAppliedRambdaDt[i];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt[i]);
- updated = b3Min(updated, maxRambdaDt[i]);
- rambdaDt = updated - prevSum;
- cs.m_fAppliedRambdaDt[i] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-#ifdef _WIN32
- b3Assert(_finite(linImp0.getX()));
- b3Assert(_finite(linImp1.getX()));
-#endif
- if (invMassA)
- {
- dLinVelA += linImp0;
- dAngVelA += angImp0;
- }
- if (invMassB)
- {
- dLinVelB += linImp1;
- dAngVelB += angImp1;
- }
- }
-
- { // angular damping for point constraint
- b3Vector3 ab = (posB - posA).normalized();
- b3Vector3 ac = (center - posA).normalized();
- if (b3Dot(ab, ac) > 0.95f || (invMassA == 0.f || invMassB == 0.f))
- {
- float angNA = b3Dot(n, angVelA);
- float angNB = b3Dot(n, angVelB);
-
- if (invMassA)
- dAngVelA -= (angNA * 0.1f) * n;
- if (invMassB)
- dAngVelB -= (angNB * 0.1f) * n;
- }
- }
-}
-
-float calcJacCoeff(const b3Vector3& linear0, const b3Vector3& linear1, const b3Vector3& angular0, const b3Vector3& angular1,
- float invMass0, const b3Matrix3x3* invInertia0, float invMass1, const b3Matrix3x3* invInertia1, float countA, float countB)
-{
- // linear0,1 are normlized
- float jmj0 = invMass0; //dot3F4(linear0, linear0)*invMass0;
-
- float jmj1 = b3Dot(mtMul3(angular0, *invInertia0), angular0);
- float jmj2 = invMass1; //dot3F4(linear1, linear1)*invMass1;
- float jmj3 = b3Dot(mtMul3(angular1, *invInertia1), angular1);
- return -1.f / ((jmj0 + jmj1) * countA + (jmj2 + jmj3) * countB);
- // return -1.f/((jmj0+jmj1)+(jmj2+jmj3));
-}
-
-void setConstraint4(const b3Vector3& posA, const b3Vector3& linVelA, const b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, const b3Vector3& linVelB, const b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB,
- b3Contact4* src, float dt, float positionDrift, float positionConstraintCoeff, float countA, float countB,
- b3GpuConstraint4* dstC)
-{
- dstC->m_bodyA = abs(src->m_bodyAPtrAndSignBit);
- dstC->m_bodyB = abs(src->m_bodyBPtrAndSignBit);
-
- float dtInv = 1.f / dt;
- for (int ic = 0; ic < 4; ic++)
- {
- dstC->m_appliedRambdaDt[ic] = 0.f;
- }
- dstC->m_fJacCoeffInv[0] = dstC->m_fJacCoeffInv[1] = 0.f;
-
- dstC->m_linear = src->m_worldNormalOnB;
- dstC->m_linear[3] = 0.7f; //src->getFrictionCoeff() );
- for (int ic = 0; ic < 4; ic++)
- {
- b3Vector3 r0 = src->m_worldPosB[ic] - posA;
- b3Vector3 r1 = src->m_worldPosB[ic] - posB;
-
- if (ic >= src->m_worldNormalOnB[3]) //npoints
- {
- dstC->m_jacCoeffInv[ic] = 0.f;
- continue;
- }
-
- float relVelN;
- {
- b3Vector3 linear, angular0, angular1;
- setLinearAndAngular(src->m_worldNormalOnB, r0, r1, linear, angular0, angular1);
-
- dstC->m_jacCoeffInv[ic] = calcJacCoeff(linear, -linear, angular0, angular1,
- invMassA, &invInertiaA, invMassB, &invInertiaB, countA, countB);
-
- relVelN = calcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB);
-
- float e = 0.f; //src->getRestituitionCoeff();
- if (relVelN * relVelN < 0.004f)
- {
- e = 0.f;
- }
-
- dstC->m_b[ic] = e * relVelN;
- //float penetration = src->m_worldPos[ic].w;
- dstC->m_b[ic] += (src->m_worldPosB[ic][3] + positionDrift) * positionConstraintCoeff * dtInv;
- dstC->m_appliedRambdaDt[ic] = 0.f;
- }
- }
-
- if (src->m_worldNormalOnB[3] > 0) //npoints
- { // prepare friction
- b3Vector3 center = make_float4(0.f);
- for (int i = 0; i < src->m_worldNormalOnB[3]; i++)
- center += src->m_worldPosB[i];
- center /= (float)src->m_worldNormalOnB[3];
-
- b3Vector3 tangent[2];
- b3PlaneSpace1(src->m_worldNormalOnB, tangent[0], tangent[1]);
-
- b3Vector3 r[2];
- r[0] = center - posA;
- r[1] = center - posB;
-
- for (int i = 0; i < 2; i++)
- {
- b3Vector3 linear, angular0, angular1;
- setLinearAndAngular(tangent[i], r[0], r[1], linear, angular0, angular1);
-
- dstC->m_fJacCoeffInv[i] = calcJacCoeff(linear, -linear, angular0, angular1,
- invMassA, &invInertiaA, invMassB, &invInertiaB, countA, countB);
- dstC->m_fAppliedRambdaDt[i] = 0.f;
- }
- dstC->m_center = center;
- }
-
- for (int i = 0; i < 4; i++)
- {
- if (i < src->m_worldNormalOnB[3])
- {
- dstC->m_worldPos[i] = src->m_worldPosB[i];
- }
- else
- {
- dstC->m_worldPos[i] = make_float4(0.f);
- }
- }
-}
-
-void ContactToConstraintKernel(b3Contact4* gContact, b3RigidBodyData* gBodies, b3InertiaData* gShapes, b3GpuConstraint4* gConstraintOut, int nContacts,
- float dt,
- float positionDrift,
- float positionConstraintCoeff, int gIdx, b3AlignedObjectArray<unsigned int>& bodyCount)
-{
- //int gIdx = 0;//GET_GLOBAL_IDX;
-
- if (gIdx < nContacts)
- {
- int aIdx = abs(gContact[gIdx].m_bodyAPtrAndSignBit);
- int bIdx = abs(gContact[gIdx].m_bodyBPtrAndSignBit);
-
- b3Vector3 posA = gBodies[aIdx].m_pos;
- b3Vector3 linVelA = gBodies[aIdx].m_linVel;
- b3Vector3 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- b3Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertiaWorld; //.m_invInertia;
-
- b3Vector3 posB = gBodies[bIdx].m_pos;
- b3Vector3 linVelB = gBodies[bIdx].m_linVel;
- b3Vector3 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- b3Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertiaWorld; //m_invInertia;
-
- b3GpuConstraint4 cs;
- float countA = invMassA ? (float)(bodyCount[aIdx]) : 1;
- float countB = invMassB ? (float)(bodyCount[bIdx]) : 1;
- setConstraint4(posA, linVelA, angVelA, invMassA, invInertiaA, posB, linVelB, angVelB, invMassB, invInertiaB,
- &gContact[gIdx], dt, positionDrift, positionConstraintCoeff, countA, countB,
- &cs);
-
- cs.m_batchIdx = gContact[gIdx].m_batchIdx;
-
- gConstraintOut[gIdx] = cs;
- }
-}
-
-void b3GpuJacobiContactSolver::solveGroupHost(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, b3Contact4* manifoldPtr, int numManifolds, const b3JacobiSolverInfo& solverInfo)
-{
- B3_PROFILE("b3GpuJacobiContactSolver::solveGroup");
-
- b3AlignedObjectArray<unsigned int> bodyCount;
- bodyCount.resize(numBodies);
- for (int i = 0; i < numBodies; i++)
- bodyCount[i] = 0;
-
- b3AlignedObjectArray<b3Int2> contactConstraintOffsets;
- contactConstraintOffsets.resize(numManifolds);
-
- for (int i = 0; i < numManifolds; i++)
- {
- int pa = manifoldPtr[i].m_bodyAPtrAndSignBit;
- int pb = manifoldPtr[i].m_bodyBPtrAndSignBit;
-
- bool isFixedA = (pa < 0) || (pa == solverInfo.m_fixedBodyIndex);
- bool isFixedB = (pb < 0) || (pb == solverInfo.m_fixedBodyIndex);
-
- int bodyIndexA = manifoldPtr[i].getBodyA();
- int bodyIndexB = manifoldPtr[i].getBodyB();
-
- if (!isFixedA)
- {
- contactConstraintOffsets[i].x = bodyCount[bodyIndexA];
- bodyCount[bodyIndexA]++;
- }
- if (!isFixedB)
- {
- contactConstraintOffsets[i].y = bodyCount[bodyIndexB];
- bodyCount[bodyIndexB]++;
- }
- }
-
- b3AlignedObjectArray<unsigned int> offsetSplitBodies;
- offsetSplitBodies.resize(numBodies);
- unsigned int totalNumSplitBodies;
- m_data->m_scan->executeHost(bodyCount, offsetSplitBodies, numBodies, &totalNumSplitBodies);
- int numlastBody = bodyCount[numBodies - 1];
- totalNumSplitBodies += numlastBody;
- printf("totalNumSplitBodies = %d\n", totalNumSplitBodies);
-
- b3AlignedObjectArray<b3GpuConstraint4> contactConstraints;
- contactConstraints.resize(numManifolds);
-
- for (int i = 0; i < numManifolds; i++)
- {
- ContactToConstraintKernel(&manifoldPtr[0], bodies, inertias, &contactConstraints[0], numManifolds,
- solverInfo.m_deltaTime,
- solverInfo.m_positionDrift,
- solverInfo.m_positionConstraintCoeff,
- i, bodyCount);
- }
- int maxIter = solverInfo.m_numIterations;
-
- b3AlignedObjectArray<b3Vector3> deltaLinearVelocities;
- b3AlignedObjectArray<b3Vector3> deltaAngularVelocities;
- deltaLinearVelocities.resize(totalNumSplitBodies);
- deltaAngularVelocities.resize(totalNumSplitBodies);
- for (unsigned int i = 0; i < totalNumSplitBodies; i++)
- {
- deltaLinearVelocities[i].setZero();
- deltaAngularVelocities[i].setZero();
- }
-
- for (int iter = 0; iter < maxIter; iter++)
- {
- int i = 0;
- for (i = 0; i < numManifolds; i++)
- {
- //float frictionCoeff = contactConstraints[i].getFrictionCoeff();
- int aIdx = (int)contactConstraints[i].m_bodyA;
- int bIdx = (int)contactConstraints[i].m_bodyB;
- b3RigidBodyData& bodyA = bodies[aIdx];
- b3RigidBodyData& bodyB = bodies[bIdx];
-
- b3Vector3 zero = b3MakeVector3(0, 0, 0);
-
- b3Vector3* dlvAPtr = &zero;
- b3Vector3* davAPtr = &zero;
- b3Vector3* dlvBPtr = &zero;
- b3Vector3* davBPtr = &zero;
-
- if (bodyA.m_invMass)
- {
- int bodyOffsetA = offsetSplitBodies[aIdx];
- int constraintOffsetA = contactConstraintOffsets[i].x;
- int splitIndexA = bodyOffsetA + constraintOffsetA;
- dlvAPtr = &deltaLinearVelocities[splitIndexA];
- davAPtr = &deltaAngularVelocities[splitIndexA];
- }
-
- if (bodyB.m_invMass)
- {
- int bodyOffsetB = offsetSplitBodies[bIdx];
- int constraintOffsetB = contactConstraintOffsets[i].y;
- int splitIndexB = bodyOffsetB + constraintOffsetB;
- dlvBPtr = &deltaLinearVelocities[splitIndexB];
- davBPtr = &deltaAngularVelocities[splitIndexB];
- }
-
- {
- float maxRambdaDt[4] = {FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX};
- float minRambdaDt[4] = {0.f, 0.f, 0.f, 0.f};
-
- solveContact(contactConstraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, inertias[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, inertias[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt, *dlvAPtr, *davAPtr, *dlvBPtr, *davBPtr);
- }
- }
-
- //easy
- for (int i = 0; i < numBodies; i++)
- {
- if (bodies[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- float factor = 1.f / float(count);
- b3Vector3 averageLinVel;
- averageLinVel.setZero();
- b3Vector3 averageAngVel;
- averageAngVel.setZero();
- for (int j = 0; j < count; j++)
- {
- averageLinVel += deltaLinearVelocities[bodyOffset + j] * factor;
- averageAngVel += deltaAngularVelocities[bodyOffset + j] * factor;
- }
- for (int j = 0; j < count; j++)
- {
- deltaLinearVelocities[bodyOffset + j] = averageLinVel;
- deltaAngularVelocities[bodyOffset + j] = averageAngVel;
- }
- }
- }
- }
- for (int iter = 0; iter < maxIter; iter++)
- {
- //int i=0;
-
- //solve friction
-
- for (int i = 0; i < numManifolds; i++)
- {
- float maxRambdaDt[4] = {FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX};
- float minRambdaDt[4] = {0.f, 0.f, 0.f, 0.f};
-
- float sum = 0;
- for (int j = 0; j < 4; j++)
- {
- sum += contactConstraints[i].m_appliedRambdaDt[j];
- }
- float frictionCoeff = contactConstraints[i].getFrictionCoeff();
- int aIdx = (int)contactConstraints[i].m_bodyA;
- int bIdx = (int)contactConstraints[i].m_bodyB;
- b3RigidBodyData& bodyA = bodies[aIdx];
- b3RigidBodyData& bodyB = bodies[bIdx];
-
- b3Vector3 zero = b3MakeVector3(0, 0, 0);
-
- b3Vector3* dlvAPtr = &zero;
- b3Vector3* davAPtr = &zero;
- b3Vector3* dlvBPtr = &zero;
- b3Vector3* davBPtr = &zero;
-
- if (bodyA.m_invMass)
- {
- int bodyOffsetA = offsetSplitBodies[aIdx];
- int constraintOffsetA = contactConstraintOffsets[i].x;
- int splitIndexA = bodyOffsetA + constraintOffsetA;
- dlvAPtr = &deltaLinearVelocities[splitIndexA];
- davAPtr = &deltaAngularVelocities[splitIndexA];
- }
-
- if (bodyB.m_invMass)
- {
- int bodyOffsetB = offsetSplitBodies[bIdx];
- int constraintOffsetB = contactConstraintOffsets[i].y;
- int splitIndexB = bodyOffsetB + constraintOffsetB;
- dlvBPtr = &deltaLinearVelocities[splitIndexB];
- davBPtr = &deltaAngularVelocities[splitIndexB];
- }
-
- for (int j = 0; j < 4; j++)
- {
- maxRambdaDt[j] = frictionCoeff * sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
-
- solveFriction(contactConstraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, inertias[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, inertias[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt, *dlvAPtr, *davAPtr, *dlvBPtr, *davBPtr);
- }
-
- //easy
- for (int i = 0; i < numBodies; i++)
- {
- if (bodies[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- float factor = 1.f / float(count);
- b3Vector3 averageLinVel;
- averageLinVel.setZero();
- b3Vector3 averageAngVel;
- averageAngVel.setZero();
- for (int j = 0; j < count; j++)
- {
- averageLinVel += deltaLinearVelocities[bodyOffset + j] * factor;
- averageAngVel += deltaAngularVelocities[bodyOffset + j] * factor;
- }
- for (int j = 0; j < count; j++)
- {
- deltaLinearVelocities[bodyOffset + j] = averageLinVel;
- deltaAngularVelocities[bodyOffset + j] = averageAngVel;
- }
- }
- }
- }
-
- //easy
- for (int i = 0; i < numBodies; i++)
- {
- if (bodies[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- if (count)
- {
- bodies[i].m_linVel += deltaLinearVelocities[bodyOffset];
- bodies[i].m_angVel += deltaAngularVelocities[bodyOffset];
- }
- }
- }
-}
-
-void b3GpuJacobiContactSolver::solveContacts(int numBodies, cl_mem bodyBuf, cl_mem inertiaBuf, int numContacts, cl_mem contactBuf, const struct b3Config& config, int static0Index)
-//
-//
-//void b3GpuJacobiContactSolver::solveGroup(b3OpenCLArray<b3RigidBodyData>* bodies,b3OpenCLArray<b3InertiaData>* inertias,b3OpenCLArray<b3Contact4>* manifoldPtr,const btJacobiSolverInfo& solverInfo)
-{
- b3JacobiSolverInfo solverInfo;
- solverInfo.m_fixedBodyIndex = static0Index;
-
- B3_PROFILE("b3GpuJacobiContactSolver::solveGroup");
-
- //int numBodies = bodies->size();
- int numManifolds = numContacts; //manifoldPtr->size();
-
- {
- B3_PROFILE("resize");
- m_data->m_bodyCount->resize(numBodies);
- }
-
- unsigned int val = 0;
- b3Int2 val2;
- val2.x = 0;
- val2.y = 0;
-
- {
- B3_PROFILE("m_filler");
- m_data->m_contactConstraintOffsets->resize(numManifolds);
- m_data->m_filler->execute(*m_data->m_bodyCount, val, numBodies);
-
- m_data->m_filler->execute(*m_data->m_contactConstraintOffsets, val2, numManifolds);
- }
-
- {
- B3_PROFILE("m_countBodiesKernel");
- b3LauncherCL launcher(this->m_queue, m_data->m_countBodiesKernel, "m_countBodiesKernel");
- launcher.setBuffer(contactBuf); //manifoldPtr->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_contactConstraintOffsets->getBufferCL());
- launcher.setConst(numManifolds);
- launcher.setConst(solverInfo.m_fixedBodyIndex);
- launcher.launch1D(numManifolds);
- }
- unsigned int totalNumSplitBodies = 0;
- {
- B3_PROFILE("m_scan->execute");
-
- m_data->m_offsetSplitBodies->resize(numBodies);
- m_data->m_scan->execute(*m_data->m_bodyCount, *m_data->m_offsetSplitBodies, numBodies, &totalNumSplitBodies);
- totalNumSplitBodies += m_data->m_bodyCount->at(numBodies - 1);
- }
-
- {
- B3_PROFILE("m_data->m_contactConstraints->resize");
- //int numContacts = manifoldPtr->size();
- m_data->m_contactConstraints->resize(numContacts);
- }
-
- {
- B3_PROFILE("contactToConstraintSplitKernel");
- b3LauncherCL launcher(m_queue, m_data->m_contactToConstraintSplitKernel, "m_contactToConstraintSplitKernel");
- launcher.setBuffer(contactBuf);
- launcher.setBuffer(bodyBuf);
- launcher.setBuffer(inertiaBuf);
- launcher.setBuffer(m_data->m_contactConstraints->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setConst(numContacts);
- launcher.setConst(solverInfo.m_deltaTime);
- launcher.setConst(solverInfo.m_positionDrift);
- launcher.setConst(solverInfo.m_positionConstraintCoeff);
- launcher.launch1D(numContacts, 64);
- }
-
- {
- B3_PROFILE("m_data->m_deltaLinearVelocities->resize");
- m_data->m_deltaLinearVelocities->resize(totalNumSplitBodies);
- m_data->m_deltaAngularVelocities->resize(totalNumSplitBodies);
- }
-
- {
- B3_PROFILE("m_clearVelocitiesKernel");
- b3LauncherCL launch(m_queue, m_data->m_clearVelocitiesKernel, "m_clearVelocitiesKernel");
- launch.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launch.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launch.setConst(totalNumSplitBodies);
- launch.launch1D(totalNumSplitBodies);
- clFinish(m_queue);
- }
-
- int maxIter = solverInfo.m_numIterations;
-
- for (int iter = 0; iter < maxIter; iter++)
- {
- {
- B3_PROFILE("m_solveContactKernel");
- b3LauncherCL launcher(m_queue, m_data->m_solveContactKernel, "m_solveContactKernel");
- launcher.setBuffer(m_data->m_contactConstraints->getBufferCL());
- launcher.setBuffer(bodyBuf);
- launcher.setBuffer(inertiaBuf);
- launcher.setBuffer(m_data->m_contactConstraintOffsets->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(solverInfo.m_deltaTime);
- launcher.setConst(solverInfo.m_positionDrift);
- launcher.setConst(solverInfo.m_positionConstraintCoeff);
- launcher.setConst(solverInfo.m_fixedBodyIndex);
- launcher.setConst(numManifolds);
-
- launcher.launch1D(numManifolds);
- clFinish(m_queue);
- }
-
- {
- B3_PROFILE("average velocities");
- b3LauncherCL launcher(m_queue, m_data->m_averageVelocitiesKernel, "m_averageVelocitiesKernel");
- launcher.setBuffer(bodyBuf);
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_queue);
- }
-
- {
- B3_PROFILE("m_solveFrictionKernel");
- b3LauncherCL launcher(m_queue, m_data->m_solveFrictionKernel, "m_solveFrictionKernel");
- launcher.setBuffer(m_data->m_contactConstraints->getBufferCL());
- launcher.setBuffer(bodyBuf);
- launcher.setBuffer(inertiaBuf);
- launcher.setBuffer(m_data->m_contactConstraintOffsets->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(solverInfo.m_deltaTime);
- launcher.setConst(solverInfo.m_positionDrift);
- launcher.setConst(solverInfo.m_positionConstraintCoeff);
- launcher.setConst(solverInfo.m_fixedBodyIndex);
- launcher.setConst(numManifolds);
-
- launcher.launch1D(numManifolds);
- clFinish(m_queue);
- }
-
- {
- B3_PROFILE("average velocities");
- b3LauncherCL launcher(m_queue, m_data->m_averageVelocitiesKernel, "m_averageVelocitiesKernel");
- launcher.setBuffer(bodyBuf);
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_queue);
- }
- }
-
- {
- B3_PROFILE("update body velocities");
- b3LauncherCL launcher(m_queue, m_data->m_updateBodyVelocitiesKernel, "m_updateBodyVelocitiesKernel");
- launcher.setBuffer(bodyBuf);
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_queue);
- }
-}
-
-#if 0
-
-void b3GpuJacobiContactSolver::solveGroupMixed(b3OpenCLArray<b3RigidBodyData>* bodiesGPU,b3OpenCLArray<b3InertiaData>* inertiasGPU,b3OpenCLArray<b3Contact4>* manifoldPtrGPU,const btJacobiSolverInfo& solverInfo)
-{
-
- b3AlignedObjectArray<b3RigidBodyData> bodiesCPU;
- bodiesGPU->copyToHost(bodiesCPU);
- b3AlignedObjectArray<b3InertiaData> inertiasCPU;
- inertiasGPU->copyToHost(inertiasCPU);
- b3AlignedObjectArray<b3Contact4> manifoldPtrCPU;
- manifoldPtrGPU->copyToHost(manifoldPtrCPU);
-
- int numBodiesCPU = bodiesGPU->size();
- int numManifoldsCPU = manifoldPtrGPU->size();
- B3_PROFILE("b3GpuJacobiContactSolver::solveGroupMixed");
-
- b3AlignedObjectArray<unsigned int> bodyCount;
- bodyCount.resize(numBodiesCPU);
- for (int i=0;i<numBodiesCPU;i++)
- bodyCount[i] = 0;
-
- b3AlignedObjectArray<b3Int2> contactConstraintOffsets;
- contactConstraintOffsets.resize(numManifoldsCPU);
-
-
- for (int i=0;i<numManifoldsCPU;i++)
- {
- int pa = manifoldPtrCPU[i].m_bodyAPtrAndSignBit;
- int pb = manifoldPtrCPU[i].m_bodyBPtrAndSignBit;
-
- bool isFixedA = (pa <0) || (pa == solverInfo.m_fixedBodyIndex);
- bool isFixedB = (pb <0) || (pb == solverInfo.m_fixedBodyIndex);
-
- int bodyIndexA = manifoldPtrCPU[i].getBodyA();
- int bodyIndexB = manifoldPtrCPU[i].getBodyB();
-
- if (!isFixedA)
- {
- contactConstraintOffsets[i].x = bodyCount[bodyIndexA];
- bodyCount[bodyIndexA]++;
- }
- if (!isFixedB)
- {
- contactConstraintOffsets[i].y = bodyCount[bodyIndexB];
- bodyCount[bodyIndexB]++;
- }
- }
-
- b3AlignedObjectArray<unsigned int> offsetSplitBodies;
- offsetSplitBodies.resize(numBodiesCPU);
- unsigned int totalNumSplitBodiesCPU;
- m_data->m_scan->executeHost(bodyCount,offsetSplitBodies,numBodiesCPU,&totalNumSplitBodiesCPU);
- int numlastBody = bodyCount[numBodiesCPU-1];
- totalNumSplitBodiesCPU += numlastBody;
-
- int numBodies = bodiesGPU->size();
- int numManifolds = manifoldPtrGPU->size();
-
- m_data->m_bodyCount->resize(numBodies);
-
- unsigned int val=0;
- b3Int2 val2;
- val2.x=0;
- val2.y=0;
-
- {
- B3_PROFILE("m_filler");
- m_data->m_contactConstraintOffsets->resize(numManifolds);
- m_data->m_filler->execute(*m_data->m_bodyCount,val,numBodies);
-
-
- m_data->m_filler->execute(*m_data->m_contactConstraintOffsets,val2,numManifolds);
- }
-
- {
- B3_PROFILE("m_countBodiesKernel");
- b3LauncherCL launcher(this->m_queue,m_data->m_countBodiesKernel);
- launcher.setBuffer(manifoldPtrGPU->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_contactConstraintOffsets->getBufferCL());
- launcher.setConst(numManifolds);
- launcher.setConst(solverInfo.m_fixedBodyIndex);
- launcher.launch1D(numManifolds);
- }
-
- unsigned int totalNumSplitBodies=0;
- m_data->m_offsetSplitBodies->resize(numBodies);
- m_data->m_scan->execute(*m_data->m_bodyCount,*m_data->m_offsetSplitBodies,numBodies,&totalNumSplitBodies);
- totalNumSplitBodies+=m_data->m_bodyCount->at(numBodies-1);
-
- if (totalNumSplitBodies != totalNumSplitBodiesCPU)
- {
- printf("error in totalNumSplitBodies!\n");
- }
-
- int numContacts = manifoldPtrGPU->size();
- m_data->m_contactConstraints->resize(numContacts);
-
-
- {
- B3_PROFILE("contactToConstraintSplitKernel");
- b3LauncherCL launcher( m_queue, m_data->m_contactToConstraintSplitKernel);
- launcher.setBuffer(manifoldPtrGPU->getBufferCL());
- launcher.setBuffer(bodiesGPU->getBufferCL());
- launcher.setBuffer(inertiasGPU->getBufferCL());
- launcher.setBuffer(m_data->m_contactConstraints->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setConst(numContacts);
- launcher.setConst(solverInfo.m_deltaTime);
- launcher.setConst(solverInfo.m_positionDrift);
- launcher.setConst(solverInfo.m_positionConstraintCoeff);
- launcher.launch1D( numContacts, 64 );
- clFinish(m_queue);
- }
-
-
-
- b3AlignedObjectArray<b3GpuConstraint4> contactConstraints;
- contactConstraints.resize(numManifoldsCPU);
-
- for (int i=0;i<numManifoldsCPU;i++)
- {
- ContactToConstraintKernel(&manifoldPtrCPU[0],&bodiesCPU[0],&inertiasCPU[0],&contactConstraints[0],numManifoldsCPU,
- solverInfo.m_deltaTime,
- solverInfo.m_positionDrift,
- solverInfo.m_positionConstraintCoeff,
- i, bodyCount);
- }
- int maxIter = solverInfo.m_numIterations;
-
-
- b3AlignedObjectArray<b3Vector3> deltaLinearVelocities;
- b3AlignedObjectArray<b3Vector3> deltaAngularVelocities;
- deltaLinearVelocities.resize(totalNumSplitBodiesCPU);
- deltaAngularVelocities.resize(totalNumSplitBodiesCPU);
- for (int i=0;i<totalNumSplitBodiesCPU;i++)
- {
- deltaLinearVelocities[i].setZero();
- deltaAngularVelocities[i].setZero();
- }
-
- m_data->m_deltaLinearVelocities->resize(totalNumSplitBodies);
- m_data->m_deltaAngularVelocities->resize(totalNumSplitBodies);
-
-
-
- {
- B3_PROFILE("m_clearVelocitiesKernel");
- b3LauncherCL launch(m_queue,m_data->m_clearVelocitiesKernel);
- launch.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launch.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launch.setConst(totalNumSplitBodies);
- launch.launch1D(totalNumSplitBodies);
- }
-
-
- ///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
-
-
- m_data->m_contactConstraints->copyToHost(contactConstraints);
- m_data->m_offsetSplitBodies->copyToHost(offsetSplitBodies);
- m_data->m_contactConstraintOffsets->copyToHost(contactConstraintOffsets);
- m_data->m_deltaLinearVelocities->copyToHost(deltaLinearVelocities);
- m_data->m_deltaAngularVelocities->copyToHost(deltaAngularVelocities);
-
- for (int iter = 0;iter<maxIter;iter++)
- {
-
- {
- B3_PROFILE("m_solveContactKernel");
- b3LauncherCL launcher( m_queue, m_data->m_solveContactKernel );
- launcher.setBuffer(m_data->m_contactConstraints->getBufferCL());
- launcher.setBuffer(bodiesGPU->getBufferCL());
- launcher.setBuffer(inertiasGPU->getBufferCL());
- launcher.setBuffer(m_data->m_contactConstraintOffsets->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(solverInfo.m_deltaTime);
- launcher.setConst(solverInfo.m_positionDrift);
- launcher.setConst(solverInfo.m_positionConstraintCoeff);
- launcher.setConst(solverInfo.m_fixedBodyIndex);
- launcher.setConst(numManifolds);
-
- launcher.launch1D(numManifolds);
- clFinish(m_queue);
- }
-
-
- int i=0;
- for( i=0; i<numManifoldsCPU; i++)
- {
-
- float frictionCoeff = contactConstraints[i].getFrictionCoeff();
- int aIdx = (int)contactConstraints[i].m_bodyA;
- int bIdx = (int)contactConstraints[i].m_bodyB;
- b3RigidBodyData& bodyA = bodiesCPU[aIdx];
- b3RigidBodyData& bodyB = bodiesCPU[bIdx];
-
- b3Vector3 zero(0,0,0);
-
- b3Vector3* dlvAPtr=&zero;
- b3Vector3* davAPtr=&zero;
- b3Vector3* dlvBPtr=&zero;
- b3Vector3* davBPtr=&zero;
-
- if (bodyA.m_invMass)
- {
- int bodyOffsetA = offsetSplitBodies[aIdx];
- int constraintOffsetA = contactConstraintOffsets[i].x;
- int splitIndexA = bodyOffsetA+constraintOffsetA;
- dlvAPtr = &deltaLinearVelocities[splitIndexA];
- davAPtr = &deltaAngularVelocities[splitIndexA];
- }
-
- if (bodyB.m_invMass)
- {
- int bodyOffsetB = offsetSplitBodies[bIdx];
- int constraintOffsetB = contactConstraintOffsets[i].y;
- int splitIndexB= bodyOffsetB+constraintOffsetB;
- dlvBPtr =&deltaLinearVelocities[splitIndexB];
- davBPtr = &deltaAngularVelocities[splitIndexB];
- }
-
-
-
- {
- float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};
- float minRambdaDt[4] = {0.f,0.f,0.f,0.f};
-
- solveContact( contactConstraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, inertiasCPU[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, inertiasCPU[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt , *dlvAPtr,*davAPtr,*dlvBPtr,*davBPtr );
-
-
- }
- }
-
-
- {
- B3_PROFILE("average velocities");
- b3LauncherCL launcher( m_queue, m_data->m_averageVelocitiesKernel);
- launcher.setBuffer(bodiesGPU->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_queue);
- }
-
- //easy
- for (int i=0;i<numBodiesCPU;i++)
- {
- if (bodiesCPU[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- float factor = 1.f/float(count);
- b3Vector3 averageLinVel;
- averageLinVel.setZero();
- b3Vector3 averageAngVel;
- averageAngVel.setZero();
- for (int j=0;j<count;j++)
- {
- averageLinVel += deltaLinearVelocities[bodyOffset+j]*factor;
- averageAngVel += deltaAngularVelocities[bodyOffset+j]*factor;
- }
- for (int j=0;j<count;j++)
- {
- deltaLinearVelocities[bodyOffset+j] = averageLinVel;
- deltaAngularVelocities[bodyOffset+j] = averageAngVel;
- }
- }
- }
-// m_data->m_deltaAngularVelocities->copyFromHost(deltaAngularVelocities);
- //m_data->m_deltaLinearVelocities->copyFromHost(deltaLinearVelocities);
- m_data->m_deltaAngularVelocities->copyToHost(deltaAngularVelocities);
- m_data->m_deltaLinearVelocities->copyToHost(deltaLinearVelocities);
-
-#if 0
-
- {
- B3_PROFILE("m_solveFrictionKernel");
- b3LauncherCL launcher( m_queue, m_data->m_solveFrictionKernel);
- launcher.setBuffer(m_data->m_contactConstraints->getBufferCL());
- launcher.setBuffer(bodiesGPU->getBufferCL());
- launcher.setBuffer(inertiasGPU->getBufferCL());
- launcher.setBuffer(m_data->m_contactConstraintOffsets->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(solverInfo.m_deltaTime);
- launcher.setConst(solverInfo.m_positionDrift);
- launcher.setConst(solverInfo.m_positionConstraintCoeff);
- launcher.setConst(solverInfo.m_fixedBodyIndex);
- launcher.setConst(numManifolds);
-
- launcher.launch1D(numManifolds);
- clFinish(m_queue);
- }
-
- //solve friction
-
- for(int i=0; i<numManifoldsCPU; i++)
- {
- float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};
- float minRambdaDt[4] = {0.f,0.f,0.f,0.f};
-
- float sum = 0;
- for(int j=0; j<4; j++)
- {
- sum +=contactConstraints[i].m_appliedRambdaDt[j];
- }
- float frictionCoeff = contactConstraints[i].getFrictionCoeff();
- int aIdx = (int)contactConstraints[i].m_bodyA;
- int bIdx = (int)contactConstraints[i].m_bodyB;
- b3RigidBodyData& bodyA = bodiesCPU[aIdx];
- b3RigidBodyData& bodyB = bodiesCPU[bIdx];
-
- b3Vector3 zero(0,0,0);
-
- b3Vector3* dlvAPtr=&zero;
- b3Vector3* davAPtr=&zero;
- b3Vector3* dlvBPtr=&zero;
- b3Vector3* davBPtr=&zero;
-
- if (bodyA.m_invMass)
- {
- int bodyOffsetA = offsetSplitBodies[aIdx];
- int constraintOffsetA = contactConstraintOffsets[i].x;
- int splitIndexA = bodyOffsetA+constraintOffsetA;
- dlvAPtr = &deltaLinearVelocities[splitIndexA];
- davAPtr = &deltaAngularVelocities[splitIndexA];
- }
-
- if (bodyB.m_invMass)
- {
- int bodyOffsetB = offsetSplitBodies[bIdx];
- int constraintOffsetB = contactConstraintOffsets[i].y;
- int splitIndexB= bodyOffsetB+constraintOffsetB;
- dlvBPtr =&deltaLinearVelocities[splitIndexB];
- davBPtr = &deltaAngularVelocities[splitIndexB];
- }
-
- for(int j=0; j<4; j++)
- {
- maxRambdaDt[j] = frictionCoeff*sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
-
- solveFriction( contactConstraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass,inertiasCPU[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, inertiasCPU[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt , *dlvAPtr,*davAPtr,*dlvBPtr,*davBPtr);
-
- }
-
- {
- B3_PROFILE("average velocities");
- b3LauncherCL launcher( m_queue, m_data->m_averageVelocitiesKernel);
- launcher.setBuffer(bodiesGPU->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_queue);
- }
-
- //easy
- for (int i=0;i<numBodiesCPU;i++)
- {
- if (bodiesCPU[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- float factor = 1.f/float(count);
- b3Vector3 averageLinVel;
- averageLinVel.setZero();
- b3Vector3 averageAngVel;
- averageAngVel.setZero();
- for (int j=0;j<count;j++)
- {
- averageLinVel += deltaLinearVelocities[bodyOffset+j]*factor;
- averageAngVel += deltaAngularVelocities[bodyOffset+j]*factor;
- }
- for (int j=0;j<count;j++)
- {
- deltaLinearVelocities[bodyOffset+j] = averageLinVel;
- deltaAngularVelocities[bodyOffset+j] = averageAngVel;
- }
- }
- }
-
-#endif
-
- }
-
- {
- B3_PROFILE("update body velocities");
- b3LauncherCL launcher( m_queue, m_data->m_updateBodyVelocitiesKernel);
- launcher.setBuffer(bodiesGPU->getBufferCL());
- launcher.setBuffer(m_data->m_offsetSplitBodies->getBufferCL());
- launcher.setBuffer(m_data->m_bodyCount->getBufferCL());
- launcher.setBuffer(m_data->m_deltaLinearVelocities->getBufferCL());
- launcher.setBuffer(m_data->m_deltaAngularVelocities->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_queue);
- }
-
-
- //easy
- for (int i=0;i<numBodiesCPU;i++)
- {
- if (bodiesCPU[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- if (count)
- {
- bodiesCPU[i].m_linVel += deltaLinearVelocities[bodyOffset];
- bodiesCPU[i].m_angVel += deltaAngularVelocities[bodyOffset];
- }
- }
- }
-
-
-// bodiesGPU->copyFromHost(bodiesCPU);
-
-
-}
-#endif
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.h
deleted file mode 100644
index 8281aee05d..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuJacobiContactSolver.h
+++ /dev/null
@@ -1,56 +0,0 @@
-
-#ifndef B3_GPU_JACOBI_CONTACT_SOLVER_H
-#define B3_GPU_JACOBI_CONTACT_SOLVER_H
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-//#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-
-//struct b3InertiaData;
-//b3InertiaData
-
-class b3TypedConstraint;
-
-struct b3JacobiSolverInfo
-{
- int m_fixedBodyIndex;
-
- float m_deltaTime;
- float m_positionDrift;
- float m_positionConstraintCoeff;
- int m_numIterations;
-
- b3JacobiSolverInfo()
- : m_fixedBodyIndex(0),
- m_deltaTime(1. / 60.f),
- m_positionDrift(0.005f),
- m_positionConstraintCoeff(0.99f),
- m_numIterations(7)
- {
- }
-};
-class b3GpuJacobiContactSolver
-{
-protected:
- struct b3GpuJacobiSolverInternalData* m_data;
-
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
-public:
- b3GpuJacobiContactSolver(cl_context ctx, cl_device_id device, cl_command_queue queue, int pairCapacity);
- virtual ~b3GpuJacobiContactSolver();
-
- void solveContacts(int numBodies, cl_mem bodyBuf, cl_mem inertiaBuf, int numContacts, cl_mem contactBuf, const struct b3Config& config, int static0Index);
- void solveGroupHost(b3RigidBodyData* bodies, b3InertiaData* inertias, int numBodies, struct b3Contact4* manifoldPtr, int numManifolds, const b3JacobiSolverInfo& solverInfo);
- //void solveGroupHost(btRigidBodyCL* bodies,b3InertiaData* inertias,int numBodies,btContact4* manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btJacobiSolverInfo& solverInfo);
-
- //b3Scalar solveGroup(b3OpenCLArray<b3RigidBodyData>* gpuBodies,b3OpenCLArray<b3InertiaData>* gpuInertias, int numBodies,b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints,int numConstraints,const b3ContactSolverInfo& infoGlobal);
-
- //void solveGroup(btOpenCLArray<btRigidBodyCL>* bodies,btOpenCLArray<btInertiaCL>* inertias,btOpenCLArray<btContact4>* manifoldPtr,const btJacobiSolverInfo& solverInfo);
- //void solveGroupMixed(btOpenCLArray<btRigidBodyCL>* bodies,btOpenCLArray<btInertiaCL>* inertias,btOpenCLArray<btContact4>* manifoldPtr,const btJacobiSolverInfo& solverInfo);
-};
-#endif //B3_GPU_JACOBI_CONTACT_SOLVER_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.cpp
deleted file mode 100644
index 2e4f6c1572..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.cpp
+++ /dev/null
@@ -1,1013 +0,0 @@
-#include "b3GpuNarrowPhase.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3OpenCL/NarrowphaseCollision/b3ConvexHullContact.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h"
-#include <string.h>
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-#include "Bullet3OpenCL/NarrowphaseCollision/b3OptimizedBvh.h"
-#include "Bullet3OpenCL/NarrowphaseCollision/b3TriangleIndexVertexArray.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-#include "Bullet3OpenCL/NarrowphaseCollision/b3BvhInfo.h"
-
-#include "b3GpuNarrowPhaseInternalData.h"
-#include "Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3ConvexUtility.h"
-
-b3GpuNarrowPhase::b3GpuNarrowPhase(cl_context ctx, cl_device_id device, cl_command_queue queue, const b3Config& config)
- : m_data(0), m_planeBodyIndex(-1), m_static0Index(-1), m_context(ctx), m_device(device), m_queue(queue)
-{
- m_data = new b3GpuNarrowPhaseInternalData();
- m_data->m_currentContactBuffer = 0;
-
- memset(m_data, 0, sizeof(b3GpuNarrowPhaseInternalData));
-
- m_data->m_config = config;
-
- m_data->m_gpuSatCollision = new GpuSatCollision(ctx, device, queue);
-
- m_data->m_triangleConvexPairs = new b3OpenCLArray<b3Int4>(m_context, m_queue, config.m_maxTriConvexPairCapacity);
-
- //m_data->m_convexPairsOutGPU = new b3OpenCLArray<b3Int2>(ctx,queue,config.m_maxBroadphasePairs,false);
- //m_data->m_planePairs = new b3OpenCLArray<b3Int2>(ctx,queue,config.m_maxBroadphasePairs,false);
-
- m_data->m_pBufContactOutCPU = new b3AlignedObjectArray<b3Contact4>();
- m_data->m_pBufContactOutCPU->resize(config.m_maxBroadphasePairs);
- m_data->m_bodyBufferCPU = new b3AlignedObjectArray<b3RigidBodyData>();
- m_data->m_bodyBufferCPU->resize(config.m_maxConvexBodies);
-
- m_data->m_inertiaBufferCPU = new b3AlignedObjectArray<b3InertiaData>();
- m_data->m_inertiaBufferCPU->resize(config.m_maxConvexBodies);
-
- m_data->m_pBufContactBuffersGPU[0] = new b3OpenCLArray<b3Contact4>(ctx, queue, config.m_maxContactCapacity, true);
- m_data->m_pBufContactBuffersGPU[1] = new b3OpenCLArray<b3Contact4>(ctx, queue, config.m_maxContactCapacity, true);
-
- m_data->m_inertiaBufferGPU = new b3OpenCLArray<b3InertiaData>(ctx, queue, config.m_maxConvexBodies, false);
- m_data->m_collidablesGPU = new b3OpenCLArray<b3Collidable>(ctx, queue, config.m_maxConvexShapes);
- m_data->m_collidablesCPU.reserve(config.m_maxConvexShapes);
-
- m_data->m_localShapeAABBCPU = new b3AlignedObjectArray<b3SapAabb>;
- m_data->m_localShapeAABBGPU = new b3OpenCLArray<b3SapAabb>(ctx, queue, config.m_maxConvexShapes);
-
- //m_data->m_solverDataGPU = adl::Solver<adl::TYPE_CL>::allocate(ctx,queue, config.m_maxBroadphasePairs,false);
- m_data->m_bodyBufferGPU = new b3OpenCLArray<b3RigidBodyData>(ctx, queue, config.m_maxConvexBodies, false);
-
- m_data->m_convexFacesGPU = new b3OpenCLArray<b3GpuFace>(ctx, queue, config.m_maxConvexShapes * config.m_maxFacesPerShape, false);
- m_data->m_convexFaces.reserve(config.m_maxConvexShapes * config.m_maxFacesPerShape);
-
- m_data->m_gpuChildShapes = new b3OpenCLArray<b3GpuChildShape>(ctx, queue, config.m_maxCompoundChildShapes, false);
-
- m_data->m_convexPolyhedraGPU = new b3OpenCLArray<b3ConvexPolyhedronData>(ctx, queue, config.m_maxConvexShapes, false);
- m_data->m_convexPolyhedra.reserve(config.m_maxConvexShapes);
-
- m_data->m_uniqueEdgesGPU = new b3OpenCLArray<b3Vector3>(ctx, queue, config.m_maxConvexUniqueEdges, true);
- m_data->m_uniqueEdges.reserve(config.m_maxConvexUniqueEdges);
-
- m_data->m_convexVerticesGPU = new b3OpenCLArray<b3Vector3>(ctx, queue, config.m_maxConvexVertices, true);
- m_data->m_convexVertices.reserve(config.m_maxConvexVertices);
-
- m_data->m_convexIndicesGPU = new b3OpenCLArray<int>(ctx, queue, config.m_maxConvexIndices, true);
- m_data->m_convexIndices.reserve(config.m_maxConvexIndices);
-
- m_data->m_worldVertsB1GPU = new b3OpenCLArray<b3Vector3>(ctx, queue, config.m_maxConvexBodies * config.m_maxVerticesPerFace);
- m_data->m_clippingFacesOutGPU = new b3OpenCLArray<b3Int4>(ctx, queue, config.m_maxConvexBodies);
- m_data->m_worldNormalsAGPU = new b3OpenCLArray<b3Vector3>(ctx, queue, config.m_maxConvexBodies);
- m_data->m_worldVertsA1GPU = new b3OpenCLArray<b3Vector3>(ctx, queue, config.m_maxConvexBodies * config.m_maxVerticesPerFace);
- m_data->m_worldVertsB2GPU = new b3OpenCLArray<b3Vector3>(ctx, queue, config.m_maxConvexBodies * config.m_maxVerticesPerFace);
-
- m_data->m_convexData = new b3AlignedObjectArray<b3ConvexUtility*>();
-
- m_data->m_convexData->resize(config.m_maxConvexShapes);
- m_data->m_convexPolyhedra.resize(config.m_maxConvexShapes);
-
- m_data->m_numAcceleratedShapes = 0;
- m_data->m_numAcceleratedRigidBodies = 0;
-
- m_data->m_subTreesGPU = new b3OpenCLArray<b3BvhSubtreeInfo>(this->m_context, this->m_queue);
- m_data->m_treeNodesGPU = new b3OpenCLArray<b3QuantizedBvhNode>(this->m_context, this->m_queue);
- m_data->m_bvhInfoGPU = new b3OpenCLArray<b3BvhInfo>(this->m_context, this->m_queue);
-
- //m_data->m_contactCGPU = new b3OpenCLArray<Constraint4>(ctx,queue,config.m_maxBroadphasePairs,false);
- //m_data->m_frictionCGPU = new b3OpenCLArray<adl::Solver<adl::TYPE_CL>::allocateFrictionConstraint( m_data->m_deviceCL, config.m_maxBroadphasePairs);
-}
-
-b3GpuNarrowPhase::~b3GpuNarrowPhase()
-{
- delete m_data->m_gpuSatCollision;
-
- delete m_data->m_triangleConvexPairs;
- //delete m_data->m_convexPairsOutGPU;
- //delete m_data->m_planePairs;
- delete m_data->m_pBufContactOutCPU;
- delete m_data->m_bodyBufferCPU;
- delete m_data->m_inertiaBufferCPU;
- delete m_data->m_pBufContactBuffersGPU[0];
- delete m_data->m_pBufContactBuffersGPU[1];
-
- delete m_data->m_inertiaBufferGPU;
- delete m_data->m_collidablesGPU;
- delete m_data->m_localShapeAABBCPU;
- delete m_data->m_localShapeAABBGPU;
- delete m_data->m_bodyBufferGPU;
- delete m_data->m_convexFacesGPU;
- delete m_data->m_gpuChildShapes;
- delete m_data->m_convexPolyhedraGPU;
- delete m_data->m_uniqueEdgesGPU;
- delete m_data->m_convexVerticesGPU;
- delete m_data->m_convexIndicesGPU;
- delete m_data->m_worldVertsB1GPU;
- delete m_data->m_clippingFacesOutGPU;
- delete m_data->m_worldNormalsAGPU;
- delete m_data->m_worldVertsA1GPU;
- delete m_data->m_worldVertsB2GPU;
-
- delete m_data->m_bvhInfoGPU;
-
- for (int i = 0; i < m_data->m_bvhData.size(); i++)
- {
- delete m_data->m_bvhData[i];
- }
- for (int i = 0; i < m_data->m_meshInterfaces.size(); i++)
- {
- delete m_data->m_meshInterfaces[i];
- }
- m_data->m_meshInterfaces.clear();
- m_data->m_bvhData.clear();
- delete m_data->m_treeNodesGPU;
- delete m_data->m_subTreesGPU;
-
- delete m_data->m_convexData;
- delete m_data;
-}
-
-int b3GpuNarrowPhase::allocateCollidable()
-{
- int curSize = m_data->m_collidablesCPU.size();
- if (curSize < m_data->m_config.m_maxConvexShapes)
- {
- m_data->m_collidablesCPU.expand();
- return curSize;
- }
- else
- {
- b3Error("allocateCollidable out-of-range %d\n", m_data->m_config.m_maxConvexShapes);
- }
- return -1;
-}
-
-int b3GpuNarrowPhase::registerSphereShape(float radius)
-{
- int collidableIndex = allocateCollidable();
- if (collidableIndex < 0)
- return collidableIndex;
-
- b3Collidable& col = getCollidableCpu(collidableIndex);
- col.m_shapeType = SHAPE_SPHERE;
- col.m_shapeIndex = 0;
- col.m_radius = radius;
-
- if (col.m_shapeIndex >= 0)
- {
- b3SapAabb aabb;
- b3Vector3 myAabbMin = b3MakeVector3(-radius, -radius, -radius);
- b3Vector3 myAabbMax = b3MakeVector3(radius, radius, radius);
-
- aabb.m_min[0] = myAabbMin[0]; //s_convexHeightField->m_aabb.m_min.x;
- aabb.m_min[1] = myAabbMin[1]; //s_convexHeightField->m_aabb.m_min.y;
- aabb.m_min[2] = myAabbMin[2]; //s_convexHeightField->m_aabb.m_min.z;
- aabb.m_minIndices[3] = 0;
-
- aabb.m_max[0] = myAabbMax[0]; //s_convexHeightField->m_aabb.m_max.x;
- aabb.m_max[1] = myAabbMax[1]; //s_convexHeightField->m_aabb.m_max.y;
- aabb.m_max[2] = myAabbMax[2]; //s_convexHeightField->m_aabb.m_max.z;
- aabb.m_signedMaxIndices[3] = 0;
-
- m_data->m_localShapeAABBCPU->push_back(aabb);
- // m_data->m_localShapeAABBGPU->push_back(aabb);
- clFinish(m_queue);
- }
-
- return collidableIndex;
-}
-
-int b3GpuNarrowPhase::registerFace(const b3Vector3& faceNormal, float faceConstant)
-{
- int faceOffset = m_data->m_convexFaces.size();
- b3GpuFace& face = m_data->m_convexFaces.expand();
- face.m_plane = b3MakeVector3(faceNormal.x, faceNormal.y, faceNormal.z, faceConstant);
- return faceOffset;
-}
-
-int b3GpuNarrowPhase::registerPlaneShape(const b3Vector3& planeNormal, float planeConstant)
-{
- int collidableIndex = allocateCollidable();
- if (collidableIndex < 0)
- return collidableIndex;
-
- b3Collidable& col = getCollidableCpu(collidableIndex);
- col.m_shapeType = SHAPE_PLANE;
- col.m_shapeIndex = registerFace(planeNormal, planeConstant);
- col.m_radius = planeConstant;
-
- if (col.m_shapeIndex >= 0)
- {
- b3SapAabb aabb;
- aabb.m_min[0] = -1e30f;
- aabb.m_min[1] = -1e30f;
- aabb.m_min[2] = -1e30f;
- aabb.m_minIndices[3] = 0;
-
- aabb.m_max[0] = 1e30f;
- aabb.m_max[1] = 1e30f;
- aabb.m_max[2] = 1e30f;
- aabb.m_signedMaxIndices[3] = 0;
-
- m_data->m_localShapeAABBCPU->push_back(aabb);
- // m_data->m_localShapeAABBGPU->push_back(aabb);
- clFinish(m_queue);
- }
-
- return collidableIndex;
-}
-
-int b3GpuNarrowPhase::registerConvexHullShapeInternal(b3ConvexUtility* convexPtr, b3Collidable& col)
-{
- m_data->m_convexData->resize(m_data->m_numAcceleratedShapes + 1);
- m_data->m_convexPolyhedra.resize(m_data->m_numAcceleratedShapes + 1);
-
- b3ConvexPolyhedronData& convex = m_data->m_convexPolyhedra.at(m_data->m_convexPolyhedra.size() - 1);
- convex.mC = convexPtr->mC;
- convex.mE = convexPtr->mE;
- convex.m_extents = convexPtr->m_extents;
- convex.m_localCenter = convexPtr->m_localCenter;
- convex.m_radius = convexPtr->m_radius;
-
- convex.m_numUniqueEdges = convexPtr->m_uniqueEdges.size();
- int edgeOffset = m_data->m_uniqueEdges.size();
- convex.m_uniqueEdgesOffset = edgeOffset;
-
- m_data->m_uniqueEdges.resize(edgeOffset + convex.m_numUniqueEdges);
-
- //convex data here
- int i;
- for (i = 0; i < convexPtr->m_uniqueEdges.size(); i++)
- {
- m_data->m_uniqueEdges[edgeOffset + i] = convexPtr->m_uniqueEdges[i];
- }
-
- int faceOffset = m_data->m_convexFaces.size();
- convex.m_faceOffset = faceOffset;
- convex.m_numFaces = convexPtr->m_faces.size();
-
- m_data->m_convexFaces.resize(faceOffset + convex.m_numFaces);
-
- for (i = 0; i < convexPtr->m_faces.size(); i++)
- {
- m_data->m_convexFaces[convex.m_faceOffset + i].m_plane = b3MakeVector3(convexPtr->m_faces[i].m_plane[0],
- convexPtr->m_faces[i].m_plane[1],
- convexPtr->m_faces[i].m_plane[2],
- convexPtr->m_faces[i].m_plane[3]);
-
- int indexOffset = m_data->m_convexIndices.size();
- int numIndices = convexPtr->m_faces[i].m_indices.size();
- m_data->m_convexFaces[convex.m_faceOffset + i].m_numIndices = numIndices;
- m_data->m_convexFaces[convex.m_faceOffset + i].m_indexOffset = indexOffset;
- m_data->m_convexIndices.resize(indexOffset + numIndices);
- for (int p = 0; p < numIndices; p++)
- {
- m_data->m_convexIndices[indexOffset + p] = convexPtr->m_faces[i].m_indices[p];
- }
- }
-
- convex.m_numVertices = convexPtr->m_vertices.size();
- int vertexOffset = m_data->m_convexVertices.size();
- convex.m_vertexOffset = vertexOffset;
-
- m_data->m_convexVertices.resize(vertexOffset + convex.m_numVertices);
- for (int i = 0; i < convexPtr->m_vertices.size(); i++)
- {
- m_data->m_convexVertices[vertexOffset + i] = convexPtr->m_vertices[i];
- }
-
- (*m_data->m_convexData)[m_data->m_numAcceleratedShapes] = convexPtr;
-
- return m_data->m_numAcceleratedShapes++;
-}
-
-int b3GpuNarrowPhase::registerConvexHullShape(const float* vertices, int strideInBytes, int numVertices, const float* scaling)
-{
- b3AlignedObjectArray<b3Vector3> verts;
-
- unsigned char* vts = (unsigned char*)vertices;
- for (int i = 0; i < numVertices; i++)
- {
- float* vertex = (float*)&vts[i * strideInBytes];
- verts.push_back(b3MakeVector3(vertex[0] * scaling[0], vertex[1] * scaling[1], vertex[2] * scaling[2]));
- }
-
- b3ConvexUtility* utilPtr = new b3ConvexUtility();
- bool merge = true;
- if (numVertices)
- {
- utilPtr->initializePolyhedralFeatures(&verts[0], verts.size(), merge);
- }
-
- int collidableIndex = registerConvexHullShape(utilPtr);
- delete utilPtr;
- return collidableIndex;
-}
-
-int b3GpuNarrowPhase::registerConvexHullShape(b3ConvexUtility* utilPtr)
-{
- int collidableIndex = allocateCollidable();
- if (collidableIndex < 0)
- return collidableIndex;
-
- b3Collidable& col = getCollidableCpu(collidableIndex);
- col.m_shapeType = SHAPE_CONVEX_HULL;
- col.m_shapeIndex = -1;
-
- {
- b3Vector3 localCenter = b3MakeVector3(0, 0, 0);
- for (int i = 0; i < utilPtr->m_vertices.size(); i++)
- localCenter += utilPtr->m_vertices[i];
- localCenter *= (1.f / utilPtr->m_vertices.size());
- utilPtr->m_localCenter = localCenter;
-
- col.m_shapeIndex = registerConvexHullShapeInternal(utilPtr, col);
- }
-
- if (col.m_shapeIndex >= 0)
- {
- b3SapAabb aabb;
-
- b3Vector3 myAabbMin = b3MakeVector3(1e30f, 1e30f, 1e30f);
- b3Vector3 myAabbMax = b3MakeVector3(-1e30f, -1e30f, -1e30f);
-
- for (int i = 0; i < utilPtr->m_vertices.size(); i++)
- {
- myAabbMin.setMin(utilPtr->m_vertices[i]);
- myAabbMax.setMax(utilPtr->m_vertices[i]);
- }
- aabb.m_min[0] = myAabbMin[0];
- aabb.m_min[1] = myAabbMin[1];
- aabb.m_min[2] = myAabbMin[2];
- aabb.m_minIndices[3] = 0;
-
- aabb.m_max[0] = myAabbMax[0];
- aabb.m_max[1] = myAabbMax[1];
- aabb.m_max[2] = myAabbMax[2];
- aabb.m_signedMaxIndices[3] = 0;
-
- m_data->m_localShapeAABBCPU->push_back(aabb);
- // m_data->m_localShapeAABBGPU->push_back(aabb);
- }
-
- return collidableIndex;
-}
-
-int b3GpuNarrowPhase::registerCompoundShape(b3AlignedObjectArray<b3GpuChildShape>* childShapes)
-{
- int collidableIndex = allocateCollidable();
- if (collidableIndex < 0)
- return collidableIndex;
-
- b3Collidable& col = getCollidableCpu(collidableIndex);
- col.m_shapeType = SHAPE_COMPOUND_OF_CONVEX_HULLS;
- col.m_shapeIndex = m_data->m_cpuChildShapes.size();
- col.m_compoundBvhIndex = m_data->m_bvhInfoCPU.size();
-
- {
- b3Assert(col.m_shapeIndex + childShapes->size() < m_data->m_config.m_maxCompoundChildShapes);
- for (int i = 0; i < childShapes->size(); i++)
- {
- m_data->m_cpuChildShapes.push_back(childShapes->at(i));
- }
- }
-
- col.m_numChildShapes = childShapes->size();
-
- b3SapAabb aabbLocalSpace;
- b3Vector3 myAabbMin = b3MakeVector3(1e30f, 1e30f, 1e30f);
- b3Vector3 myAabbMax = b3MakeVector3(-1e30f, -1e30f, -1e30f);
-
- b3AlignedObjectArray<b3Aabb> childLocalAabbs;
- childLocalAabbs.resize(childShapes->size());
-
- //compute local AABB of the compound of all children
- for (int i = 0; i < childShapes->size(); i++)
- {
- int childColIndex = childShapes->at(i).m_shapeIndex;
- //b3Collidable& childCol = getCollidableCpu(childColIndex);
- b3SapAabb aabbLoc = m_data->m_localShapeAABBCPU->at(childColIndex);
-
- b3Vector3 childLocalAabbMin = b3MakeVector3(aabbLoc.m_min[0], aabbLoc.m_min[1], aabbLoc.m_min[2]);
- b3Vector3 childLocalAabbMax = b3MakeVector3(aabbLoc.m_max[0], aabbLoc.m_max[1], aabbLoc.m_max[2]);
- b3Vector3 aMin, aMax;
- b3Scalar margin(0.f);
- b3Transform childTr;
- childTr.setIdentity();
-
- childTr.setOrigin(childShapes->at(i).m_childPosition);
- childTr.setRotation(b3Quaternion(childShapes->at(i).m_childOrientation));
- b3TransformAabb(childLocalAabbMin, childLocalAabbMax, margin, childTr, aMin, aMax);
- myAabbMin.setMin(aMin);
- myAabbMax.setMax(aMax);
- childLocalAabbs[i].m_min[0] = aMin[0];
- childLocalAabbs[i].m_min[1] = aMin[1];
- childLocalAabbs[i].m_min[2] = aMin[2];
- childLocalAabbs[i].m_min[3] = 0;
- childLocalAabbs[i].m_max[0] = aMax[0];
- childLocalAabbs[i].m_max[1] = aMax[1];
- childLocalAabbs[i].m_max[2] = aMax[2];
- childLocalAabbs[i].m_max[3] = 0;
- }
-
- aabbLocalSpace.m_min[0] = myAabbMin[0]; //s_convexHeightField->m_aabb.m_min.x;
- aabbLocalSpace.m_min[1] = myAabbMin[1]; //s_convexHeightField->m_aabb.m_min.y;
- aabbLocalSpace.m_min[2] = myAabbMin[2]; //s_convexHeightField->m_aabb.m_min.z;
- aabbLocalSpace.m_minIndices[3] = 0;
-
- aabbLocalSpace.m_max[0] = myAabbMax[0]; //s_convexHeightField->m_aabb.m_max.x;
- aabbLocalSpace.m_max[1] = myAabbMax[1]; //s_convexHeightField->m_aabb.m_max.y;
- aabbLocalSpace.m_max[2] = myAabbMax[2]; //s_convexHeightField->m_aabb.m_max.z;
- aabbLocalSpace.m_signedMaxIndices[3] = 0;
-
- m_data->m_localShapeAABBCPU->push_back(aabbLocalSpace);
-
- b3QuantizedBvh* bvh = new b3QuantizedBvh;
- bvh->setQuantizationValues(myAabbMin, myAabbMax);
- QuantizedNodeArray& nodes = bvh->getLeafNodeArray();
- int numNodes = childShapes->size();
-
- for (int i = 0; i < numNodes; i++)
- {
- b3QuantizedBvhNode node;
- b3Vector3 aabbMin, aabbMax;
- aabbMin = (b3Vector3&)childLocalAabbs[i].m_min;
- aabbMax = (b3Vector3&)childLocalAabbs[i].m_max;
-
- bvh->quantize(&node.m_quantizedAabbMin[0], aabbMin, 0);
- bvh->quantize(&node.m_quantizedAabbMax[0], aabbMax, 1);
- int partId = 0;
- node.m_escapeIndexOrTriangleIndex = (partId << (31 - MAX_NUM_PARTS_IN_BITS)) | i;
- nodes.push_back(node);
- }
- bvh->buildInternal();
-
- int numSubTrees = bvh->getSubtreeInfoArray().size();
-
- //void setQuantizationValues(const b3Vector3& bvhAabbMin,const b3Vector3& bvhAabbMax,b3Scalar quantizationMargin=b3Scalar(1.0));
- //QuantizedNodeArray& getLeafNodeArray() { return m_quantizedLeafNodes; }
- ///buildInternal is expert use only: assumes that setQuantizationValues and LeafNodeArray are initialized
- //void buildInternal();
-
- b3BvhInfo bvhInfo;
-
- bvhInfo.m_aabbMin = bvh->m_bvhAabbMin;
- bvhInfo.m_aabbMax = bvh->m_bvhAabbMax;
- bvhInfo.m_quantization = bvh->m_bvhQuantization;
- bvhInfo.m_numNodes = numNodes;
- bvhInfo.m_numSubTrees = numSubTrees;
- bvhInfo.m_nodeOffset = m_data->m_treeNodesCPU.size();
- bvhInfo.m_subTreeOffset = m_data->m_subTreesCPU.size();
-
- int numNewNodes = bvh->getQuantizedNodeArray().size();
-
- for (int i = 0; i < numNewNodes - 1; i++)
- {
- if (bvh->getQuantizedNodeArray()[i].isLeafNode())
- {
- int orgIndex = bvh->getQuantizedNodeArray()[i].getTriangleIndex();
-
- b3Vector3 nodeMinVec = bvh->unQuantize(bvh->getQuantizedNodeArray()[i].m_quantizedAabbMin);
- b3Vector3 nodeMaxVec = bvh->unQuantize(bvh->getQuantizedNodeArray()[i].m_quantizedAabbMax);
-
- for (int c = 0; c < 3; c++)
- {
- if (childLocalAabbs[orgIndex].m_min[c] < nodeMinVec[c])
- {
- printf("min org (%f) and new (%f) ? at i:%d,c:%d\n", childLocalAabbs[i].m_min[c], nodeMinVec[c], i, c);
- }
- if (childLocalAabbs[orgIndex].m_max[c] > nodeMaxVec[c])
- {
- printf("max org (%f) and new (%f) ? at i:%d,c:%d\n", childLocalAabbs[i].m_max[c], nodeMaxVec[c], i, c);
- }
- }
- }
- }
-
- m_data->m_bvhInfoCPU.push_back(bvhInfo);
-
- int numNewSubtrees = bvh->getSubtreeInfoArray().size();
- m_data->m_subTreesCPU.reserve(m_data->m_subTreesCPU.size() + numNewSubtrees);
- for (int i = 0; i < numNewSubtrees; i++)
- {
- m_data->m_subTreesCPU.push_back(bvh->getSubtreeInfoArray()[i]);
- }
- int numNewTreeNodes = bvh->getQuantizedNodeArray().size();
-
- for (int i = 0; i < numNewTreeNodes; i++)
- {
- m_data->m_treeNodesCPU.push_back(bvh->getQuantizedNodeArray()[i]);
- }
-
- // m_data->m_localShapeAABBGPU->push_back(aabbWS);
- clFinish(m_queue);
- return collidableIndex;
-}
-
-int b3GpuNarrowPhase::registerConcaveMesh(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, const float* scaling1)
-{
- b3Vector3 scaling = b3MakeVector3(scaling1[0], scaling1[1], scaling1[2]);
-
- int collidableIndex = allocateCollidable();
- if (collidableIndex < 0)
- return collidableIndex;
-
- b3Collidable& col = getCollidableCpu(collidableIndex);
-
- col.m_shapeType = SHAPE_CONCAVE_TRIMESH;
- col.m_shapeIndex = registerConcaveMeshShape(vertices, indices, col, scaling);
- col.m_bvhIndex = m_data->m_bvhInfoCPU.size();
-
- b3SapAabb aabb;
- b3Vector3 myAabbMin = b3MakeVector3(1e30f, 1e30f, 1e30f);
- b3Vector3 myAabbMax = b3MakeVector3(-1e30f, -1e30f, -1e30f);
-
- for (int i = 0; i < vertices->size(); i++)
- {
- b3Vector3 vtx(vertices->at(i) * scaling);
- myAabbMin.setMin(vtx);
- myAabbMax.setMax(vtx);
- }
- aabb.m_min[0] = myAabbMin[0];
- aabb.m_min[1] = myAabbMin[1];
- aabb.m_min[2] = myAabbMin[2];
- aabb.m_minIndices[3] = 0;
-
- aabb.m_max[0] = myAabbMax[0];
- aabb.m_max[1] = myAabbMax[1];
- aabb.m_max[2] = myAabbMax[2];
- aabb.m_signedMaxIndices[3] = 0;
-
- m_data->m_localShapeAABBCPU->push_back(aabb);
- // m_data->m_localShapeAABBGPU->push_back(aabb);
-
- b3OptimizedBvh* bvh = new b3OptimizedBvh();
- //void b3OptimizedBvh::build(b3StridingMeshInterface* triangles, bool useQuantizedAabbCompression, const b3Vector3& bvhAabbMin, const b3Vector3& bvhAabbMax)
-
- bool useQuantizedAabbCompression = true;
- b3TriangleIndexVertexArray* meshInterface = new b3TriangleIndexVertexArray();
- m_data->m_meshInterfaces.push_back(meshInterface);
- b3IndexedMesh mesh;
- mesh.m_numTriangles = indices->size() / 3;
- mesh.m_numVertices = vertices->size();
- mesh.m_vertexBase = (const unsigned char*)&vertices->at(0).x;
- mesh.m_vertexStride = sizeof(b3Vector3);
- mesh.m_triangleIndexStride = 3 * sizeof(int); // or sizeof(int)
- mesh.m_triangleIndexBase = (const unsigned char*)&indices->at(0);
-
- meshInterface->addIndexedMesh(mesh);
- bvh->build(meshInterface, useQuantizedAabbCompression, (b3Vector3&)aabb.m_min, (b3Vector3&)aabb.m_max);
- m_data->m_bvhData.push_back(bvh);
- int numNodes = bvh->getQuantizedNodeArray().size();
- //b3OpenCLArray<b3QuantizedBvhNode>* treeNodesGPU = new b3OpenCLArray<b3QuantizedBvhNode>(this->m_context,this->m_queue,numNodes);
- int numSubTrees = bvh->getSubtreeInfoArray().size();
-
- b3BvhInfo bvhInfo;
-
- bvhInfo.m_aabbMin = bvh->m_bvhAabbMin;
- bvhInfo.m_aabbMax = bvh->m_bvhAabbMax;
- bvhInfo.m_quantization = bvh->m_bvhQuantization;
- bvhInfo.m_numNodes = numNodes;
- bvhInfo.m_numSubTrees = numSubTrees;
- bvhInfo.m_nodeOffset = m_data->m_treeNodesCPU.size();
- bvhInfo.m_subTreeOffset = m_data->m_subTreesCPU.size();
-
- m_data->m_bvhInfoCPU.push_back(bvhInfo);
-
- int numNewSubtrees = bvh->getSubtreeInfoArray().size();
- m_data->m_subTreesCPU.reserve(m_data->m_subTreesCPU.size() + numNewSubtrees);
- for (int i = 0; i < numNewSubtrees; i++)
- {
- m_data->m_subTreesCPU.push_back(bvh->getSubtreeInfoArray()[i]);
- }
- int numNewTreeNodes = bvh->getQuantizedNodeArray().size();
-
- for (int i = 0; i < numNewTreeNodes; i++)
- {
- m_data->m_treeNodesCPU.push_back(bvh->getQuantizedNodeArray()[i]);
- }
-
- return collidableIndex;
-}
-
-int b3GpuNarrowPhase::registerConcaveMeshShape(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, b3Collidable& col, const float* scaling1)
-{
- b3Vector3 scaling = b3MakeVector3(scaling1[0], scaling1[1], scaling1[2]);
-
- m_data->m_convexData->resize(m_data->m_numAcceleratedShapes + 1);
- m_data->m_convexPolyhedra.resize(m_data->m_numAcceleratedShapes + 1);
-
- b3ConvexPolyhedronData& convex = m_data->m_convexPolyhedra.at(m_data->m_convexPolyhedra.size() - 1);
- convex.mC = b3MakeVector3(0, 0, 0);
- convex.mE = b3MakeVector3(0, 0, 0);
- convex.m_extents = b3MakeVector3(0, 0, 0);
- convex.m_localCenter = b3MakeVector3(0, 0, 0);
- convex.m_radius = 0.f;
-
- convex.m_numUniqueEdges = 0;
- int edgeOffset = m_data->m_uniqueEdges.size();
- convex.m_uniqueEdgesOffset = edgeOffset;
-
- int faceOffset = m_data->m_convexFaces.size();
- convex.m_faceOffset = faceOffset;
-
- convex.m_numFaces = indices->size() / 3;
- m_data->m_convexFaces.resize(faceOffset + convex.m_numFaces);
- m_data->m_convexIndices.reserve(convex.m_numFaces * 3);
- for (int i = 0; i < convex.m_numFaces; i++)
- {
- if (i % 256 == 0)
- {
- //printf("i=%d out of %d", i,convex.m_numFaces);
- }
- b3Vector3 vert0(vertices->at(indices->at(i * 3)) * scaling);
- b3Vector3 vert1(vertices->at(indices->at(i * 3 + 1)) * scaling);
- b3Vector3 vert2(vertices->at(indices->at(i * 3 + 2)) * scaling);
-
- b3Vector3 normal = ((vert1 - vert0).cross(vert2 - vert0)).normalize();
- b3Scalar c = -(normal.dot(vert0));
-
- m_data->m_convexFaces[convex.m_faceOffset + i].m_plane = b3MakeVector4(normal.x, normal.y, normal.z, c);
- int indexOffset = m_data->m_convexIndices.size();
- int numIndices = 3;
- m_data->m_convexFaces[convex.m_faceOffset + i].m_numIndices = numIndices;
- m_data->m_convexFaces[convex.m_faceOffset + i].m_indexOffset = indexOffset;
- m_data->m_convexIndices.resize(indexOffset + numIndices);
- for (int p = 0; p < numIndices; p++)
- {
- int vi = indices->at(i * 3 + p);
- m_data->m_convexIndices[indexOffset + p] = vi; //convexPtr->m_faces[i].m_indices[p];
- }
- }
-
- convex.m_numVertices = vertices->size();
- int vertexOffset = m_data->m_convexVertices.size();
- convex.m_vertexOffset = vertexOffset;
- m_data->m_convexVertices.resize(vertexOffset + convex.m_numVertices);
- for (int i = 0; i < vertices->size(); i++)
- {
- m_data->m_convexVertices[vertexOffset + i] = vertices->at(i) * scaling;
- }
-
- (*m_data->m_convexData)[m_data->m_numAcceleratedShapes] = 0;
-
- return m_data->m_numAcceleratedShapes++;
-}
-
-cl_mem b3GpuNarrowPhase::getBodiesGpu()
-{
- return (cl_mem)m_data->m_bodyBufferGPU->getBufferCL();
-}
-
-const struct b3RigidBodyData* b3GpuNarrowPhase::getBodiesCpu() const
-{
- return &m_data->m_bodyBufferCPU->at(0);
-};
-
-int b3GpuNarrowPhase::getNumBodiesGpu() const
-{
- return m_data->m_bodyBufferGPU->size();
-}
-
-cl_mem b3GpuNarrowPhase::getBodyInertiasGpu()
-{
- return (cl_mem)m_data->m_inertiaBufferGPU->getBufferCL();
-}
-
-int b3GpuNarrowPhase::getNumBodyInertiasGpu() const
-{
- return m_data->m_inertiaBufferGPU->size();
-}
-
-b3Collidable& b3GpuNarrowPhase::getCollidableCpu(int collidableIndex)
-{
- return m_data->m_collidablesCPU[collidableIndex];
-}
-
-const b3Collidable& b3GpuNarrowPhase::getCollidableCpu(int collidableIndex) const
-{
- return m_data->m_collidablesCPU[collidableIndex];
-}
-
-cl_mem b3GpuNarrowPhase::getCollidablesGpu()
-{
- return m_data->m_collidablesGPU->getBufferCL();
-}
-
-const struct b3Collidable* b3GpuNarrowPhase::getCollidablesCpu() const
-{
- if (m_data->m_collidablesCPU.size())
- return &m_data->m_collidablesCPU[0];
- return 0;
-}
-
-const struct b3SapAabb* b3GpuNarrowPhase::getLocalSpaceAabbsCpu() const
-{
- if (m_data->m_localShapeAABBCPU->size())
- {
- return &m_data->m_localShapeAABBCPU->at(0);
- }
- return 0;
-}
-
-cl_mem b3GpuNarrowPhase::getAabbLocalSpaceBufferGpu()
-{
- return m_data->m_localShapeAABBGPU->getBufferCL();
-}
-int b3GpuNarrowPhase::getNumCollidablesGpu() const
-{
- return m_data->m_collidablesGPU->size();
-}
-
-int b3GpuNarrowPhase::getNumContactsGpu() const
-{
- return m_data->m_pBufContactBuffersGPU[m_data->m_currentContactBuffer]->size();
-}
-cl_mem b3GpuNarrowPhase::getContactsGpu()
-{
- return m_data->m_pBufContactBuffersGPU[m_data->m_currentContactBuffer]->getBufferCL();
-}
-
-const b3Contact4* b3GpuNarrowPhase::getContactsCPU() const
-{
- m_data->m_pBufContactBuffersGPU[m_data->m_currentContactBuffer]->copyToHost(*m_data->m_pBufContactOutCPU);
- return &m_data->m_pBufContactOutCPU->at(0);
-}
-
-void b3GpuNarrowPhase::computeContacts(cl_mem broadphasePairs, int numBroadphasePairs, cl_mem aabbsWorldSpace, int numObjects)
-{
- cl_mem aabbsLocalSpace = m_data->m_localShapeAABBGPU->getBufferCL();
-
- int nContactOut = 0;
-
- //swap buffer
- m_data->m_currentContactBuffer = 1 - m_data->m_currentContactBuffer;
-
- //int curSize = m_data->m_pBufContactBuffersGPU[m_data->m_currentContactBuffer]->size();
-
- int maxTriConvexPairCapacity = m_data->m_config.m_maxTriConvexPairCapacity;
- int numTriConvexPairsOut = 0;
-
- b3OpenCLArray<b3Int4> broadphasePairsGPU(m_context, m_queue);
- broadphasePairsGPU.setFromOpenCLBuffer(broadphasePairs, numBroadphasePairs);
-
- b3OpenCLArray<b3Aabb> clAabbArrayWorldSpace(this->m_context, this->m_queue);
- clAabbArrayWorldSpace.setFromOpenCLBuffer(aabbsWorldSpace, numObjects);
-
- b3OpenCLArray<b3Aabb> clAabbArrayLocalSpace(this->m_context, this->m_queue);
- clAabbArrayLocalSpace.setFromOpenCLBuffer(aabbsLocalSpace, numObjects);
-
- m_data->m_gpuSatCollision->computeConvexConvexContactsGPUSAT(
- &broadphasePairsGPU, numBroadphasePairs,
- m_data->m_bodyBufferGPU,
- m_data->m_pBufContactBuffersGPU[m_data->m_currentContactBuffer],
- nContactOut,
- m_data->m_pBufContactBuffersGPU[1 - m_data->m_currentContactBuffer],
- m_data->m_config.m_maxContactCapacity,
- m_data->m_config.m_compoundPairCapacity,
- *m_data->m_convexPolyhedraGPU,
- *m_data->m_convexVerticesGPU,
- *m_data->m_uniqueEdgesGPU,
- *m_data->m_convexFacesGPU,
- *m_data->m_convexIndicesGPU,
- *m_data->m_collidablesGPU,
- *m_data->m_gpuChildShapes,
- clAabbArrayWorldSpace,
- clAabbArrayLocalSpace,
- *m_data->m_worldVertsB1GPU,
- *m_data->m_clippingFacesOutGPU,
- *m_data->m_worldNormalsAGPU,
- *m_data->m_worldVertsA1GPU,
- *m_data->m_worldVertsB2GPU,
- m_data->m_bvhData,
- m_data->m_treeNodesGPU,
- m_data->m_subTreesGPU,
- m_data->m_bvhInfoGPU,
- numObjects,
- maxTriConvexPairCapacity,
- *m_data->m_triangleConvexPairs,
- numTriConvexPairsOut);
-
- /*b3AlignedObjectArray<b3Int4> broadphasePairsCPU;
- broadphasePairsGPU.copyToHost(broadphasePairsCPU);
- printf("checking pairs\n");
- */
-}
-
-const b3SapAabb& b3GpuNarrowPhase::getLocalSpaceAabb(int collidableIndex) const
-{
- return m_data->m_localShapeAABBCPU->at(collidableIndex);
-}
-
-int b3GpuNarrowPhase::registerRigidBody(int collidableIndex, float mass, const float* position, const float* orientation, const float* aabbMinPtr, const float* aabbMaxPtr, bool writeToGpu)
-{
- b3Vector3 aabbMin = b3MakeVector3(aabbMinPtr[0], aabbMinPtr[1], aabbMinPtr[2]);
- b3Vector3 aabbMax = b3MakeVector3(aabbMaxPtr[0], aabbMaxPtr[1], aabbMaxPtr[2]);
-
- if (m_data->m_numAcceleratedRigidBodies >= (m_data->m_config.m_maxConvexBodies))
- {
- b3Error("registerRigidBody: exceeding the number of rigid bodies, %d > %d \n", m_data->m_numAcceleratedRigidBodies, m_data->m_config.m_maxConvexBodies);
- return -1;
- }
-
- m_data->m_bodyBufferCPU->resize(m_data->m_numAcceleratedRigidBodies + 1);
-
- b3RigidBodyData& body = m_data->m_bodyBufferCPU->at(m_data->m_numAcceleratedRigidBodies);
-
- float friction = 1.f;
- float restitution = 0.f;
-
- body.m_frictionCoeff = friction;
- body.m_restituitionCoeff = restitution;
- body.m_angVel = b3MakeVector3(0, 0, 0);
- body.m_linVel = b3MakeVector3(0, 0, 0); //.setZero();
- body.m_pos = b3MakeVector3(position[0], position[1], position[2]);
- body.m_quat.setValue(orientation[0], orientation[1], orientation[2], orientation[3]);
- body.m_collidableIdx = collidableIndex;
- if (collidableIndex >= 0)
- {
- // body.m_shapeType = m_data->m_collidablesCPU.at(collidableIndex).m_shapeType;
- }
- else
- {
- // body.m_shapeType = CollisionShape::SHAPE_PLANE;
- m_planeBodyIndex = m_data->m_numAcceleratedRigidBodies;
- }
- //body.m_shapeType = shapeType;
-
- body.m_invMass = mass ? 1.f / mass : 0.f;
-
- if (writeToGpu)
- {
- m_data->m_bodyBufferGPU->copyFromHostPointer(&body, 1, m_data->m_numAcceleratedRigidBodies);
- }
-
- b3InertiaData& shapeInfo = m_data->m_inertiaBufferCPU->at(m_data->m_numAcceleratedRigidBodies);
-
- if (mass == 0.f)
- {
- if (m_data->m_numAcceleratedRigidBodies == 0)
- m_static0Index = 0;
-
- shapeInfo.m_initInvInertia.setValue(0, 0, 0, 0, 0, 0, 0, 0, 0);
- shapeInfo.m_invInertiaWorld.setValue(0, 0, 0, 0, 0, 0, 0, 0, 0);
- }
- else
- {
- b3Assert(body.m_collidableIdx >= 0);
-
- //approximate using the aabb of the shape
-
- //Aabb aabb = (*m_data->m_shapePointers)[shapeIndex]->m_aabb;
- b3Vector3 halfExtents = (aabbMax - aabbMin); //*0.5f;//fake larger inertia makes demos more stable ;-)
-
- b3Vector3 localInertia;
-
- float lx = 2.f * halfExtents[0];
- float ly = 2.f * halfExtents[1];
- float lz = 2.f * halfExtents[2];
-
- localInertia.setValue((mass / 12.0f) * (ly * ly + lz * lz),
- (mass / 12.0f) * (lx * lx + lz * lz),
- (mass / 12.0f) * (lx * lx + ly * ly));
-
- b3Vector3 invLocalInertia;
- invLocalInertia[0] = 1.f / localInertia[0];
- invLocalInertia[1] = 1.f / localInertia[1];
- invLocalInertia[2] = 1.f / localInertia[2];
- invLocalInertia[3] = 0.f;
-
- shapeInfo.m_initInvInertia.setValue(
- invLocalInertia[0], 0, 0,
- 0, invLocalInertia[1], 0,
- 0, 0, invLocalInertia[2]);
-
- b3Matrix3x3 m(body.m_quat);
-
- shapeInfo.m_invInertiaWorld = m.scaled(invLocalInertia) * m.transpose();
- }
-
- if (writeToGpu)
- m_data->m_inertiaBufferGPU->copyFromHostPointer(&shapeInfo, 1, m_data->m_numAcceleratedRigidBodies);
-
- return m_data->m_numAcceleratedRigidBodies++;
-}
-
-int b3GpuNarrowPhase::getNumRigidBodies() const
-{
- return m_data->m_numAcceleratedRigidBodies;
-}
-
-void b3GpuNarrowPhase::writeAllBodiesToGpu()
-{
- if (m_data->m_localShapeAABBCPU->size())
- {
- m_data->m_localShapeAABBGPU->copyFromHost(*m_data->m_localShapeAABBCPU);
- }
-
- m_data->m_gpuChildShapes->copyFromHost(m_data->m_cpuChildShapes);
- m_data->m_convexFacesGPU->copyFromHost(m_data->m_convexFaces);
- m_data->m_convexPolyhedraGPU->copyFromHost(m_data->m_convexPolyhedra);
- m_data->m_uniqueEdgesGPU->copyFromHost(m_data->m_uniqueEdges);
- m_data->m_convexVerticesGPU->copyFromHost(m_data->m_convexVertices);
- m_data->m_convexIndicesGPU->copyFromHost(m_data->m_convexIndices);
- m_data->m_bvhInfoGPU->copyFromHost(m_data->m_bvhInfoCPU);
- m_data->m_treeNodesGPU->copyFromHost(m_data->m_treeNodesCPU);
- m_data->m_subTreesGPU->copyFromHost(m_data->m_subTreesCPU);
-
- m_data->m_bodyBufferGPU->resize(m_data->m_numAcceleratedRigidBodies);
- m_data->m_inertiaBufferGPU->resize(m_data->m_numAcceleratedRigidBodies);
-
- if (m_data->m_numAcceleratedRigidBodies)
- {
- m_data->m_bodyBufferGPU->copyFromHostPointer(&m_data->m_bodyBufferCPU->at(0), m_data->m_numAcceleratedRigidBodies);
- m_data->m_inertiaBufferGPU->copyFromHostPointer(&m_data->m_inertiaBufferCPU->at(0), m_data->m_numAcceleratedRigidBodies);
- }
- if (m_data->m_collidablesCPU.size())
- {
- m_data->m_collidablesGPU->copyFromHost(m_data->m_collidablesCPU);
- }
-}
-
-void b3GpuNarrowPhase::reset()
-{
- m_data->m_numAcceleratedShapes = 0;
- m_data->m_numAcceleratedRigidBodies = 0;
- this->m_static0Index = -1;
- m_data->m_uniqueEdges.resize(0);
- m_data->m_convexVertices.resize(0);
- m_data->m_convexPolyhedra.resize(0);
- m_data->m_convexIndices.resize(0);
- m_data->m_cpuChildShapes.resize(0);
- m_data->m_convexFaces.resize(0);
- m_data->m_collidablesCPU.resize(0);
- m_data->m_localShapeAABBCPU->resize(0);
- m_data->m_bvhData.resize(0);
- m_data->m_treeNodesCPU.resize(0);
- m_data->m_subTreesCPU.resize(0);
- m_data->m_bvhInfoCPU.resize(0);
-}
-
-void b3GpuNarrowPhase::readbackAllBodiesToCpu()
-{
- m_data->m_bodyBufferGPU->copyToHostPointer(&m_data->m_bodyBufferCPU->at(0), m_data->m_numAcceleratedRigidBodies);
-}
-
-void b3GpuNarrowPhase::setObjectTransformCpu(float* position, float* orientation, int bodyIndex)
-{
- if (bodyIndex >= 0 && bodyIndex < m_data->m_bodyBufferCPU->size())
- {
- m_data->m_bodyBufferCPU->at(bodyIndex).m_pos = b3MakeVector3(position[0], position[1], position[2]);
- m_data->m_bodyBufferCPU->at(bodyIndex).m_quat.setValue(orientation[0], orientation[1], orientation[2], orientation[3]);
- }
- else
- {
- b3Warning("setObjectVelocityCpu out of range.\n");
- }
-}
-void b3GpuNarrowPhase::setObjectVelocityCpu(float* linVel, float* angVel, int bodyIndex)
-{
- if (bodyIndex >= 0 && bodyIndex < m_data->m_bodyBufferCPU->size())
- {
- m_data->m_bodyBufferCPU->at(bodyIndex).m_linVel = b3MakeVector3(linVel[0], linVel[1], linVel[2]);
- m_data->m_bodyBufferCPU->at(bodyIndex).m_angVel = b3MakeVector3(angVel[0], angVel[1], angVel[2]);
- }
- else
- {
- b3Warning("setObjectVelocityCpu out of range.\n");
- }
-}
-
-bool b3GpuNarrowPhase::getObjectTransformFromCpu(float* position, float* orientation, int bodyIndex) const
-{
- if (bodyIndex >= 0 && bodyIndex < m_data->m_bodyBufferCPU->size())
- {
- position[0] = m_data->m_bodyBufferCPU->at(bodyIndex).m_pos.x;
- position[1] = m_data->m_bodyBufferCPU->at(bodyIndex).m_pos.y;
- position[2] = m_data->m_bodyBufferCPU->at(bodyIndex).m_pos.z;
- position[3] = 1.f; //or 1
-
- orientation[0] = m_data->m_bodyBufferCPU->at(bodyIndex).m_quat.x;
- orientation[1] = m_data->m_bodyBufferCPU->at(bodyIndex).m_quat.y;
- orientation[2] = m_data->m_bodyBufferCPU->at(bodyIndex).m_quat.z;
- orientation[3] = m_data->m_bodyBufferCPU->at(bodyIndex).m_quat.w;
- return true;
- }
-
- b3Warning("getObjectTransformFromCpu out of range.\n");
- return false;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h
deleted file mode 100644
index 21a68de343..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhase.h
+++ /dev/null
@@ -1,101 +0,0 @@
-#ifndef B3_GPU_NARROWPHASE_H
-#define B3_GPU_NARROWPHASE_H
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Vector3.h"
-
-class b3GpuNarrowPhase
-{
-protected:
- struct b3GpuNarrowPhaseInternalData* m_data;
- int m_acceleratedCompanionShapeIndex;
- int m_planeBodyIndex;
- int m_static0Index;
-
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
- int registerConvexHullShapeInternal(class b3ConvexUtility* convexPtr, b3Collidable& col);
- int registerConcaveMeshShape(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, b3Collidable& col, const float* scaling);
-
-public:
- b3GpuNarrowPhase(cl_context vtx, cl_device_id dev, cl_command_queue q, const struct b3Config& config);
-
- virtual ~b3GpuNarrowPhase(void);
-
- int registerSphereShape(float radius);
- int registerPlaneShape(const b3Vector3& planeNormal, float planeConstant);
-
- int registerCompoundShape(b3AlignedObjectArray<b3GpuChildShape>* childShapes);
- int registerFace(const b3Vector3& faceNormal, float faceConstant);
-
- int registerConcaveMesh(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, const float* scaling);
-
- //do they need to be merged?
-
- int registerConvexHullShape(b3ConvexUtility* utilPtr);
- int registerConvexHullShape(const float* vertices, int strideInBytes, int numVertices, const float* scaling);
-
- int registerRigidBody(int collidableIndex, float mass, const float* position, const float* orientation, const float* aabbMin, const float* aabbMax, bool writeToGpu);
- void setObjectTransform(const float* position, const float* orientation, int bodyIndex);
-
- void writeAllBodiesToGpu();
- void reset();
- void readbackAllBodiesToCpu();
- bool getObjectTransformFromCpu(float* position, float* orientation, int bodyIndex) const;
-
- void setObjectTransformCpu(float* position, float* orientation, int bodyIndex);
- void setObjectVelocityCpu(float* linVel, float* angVel, int bodyIndex);
-
- virtual void computeContacts(cl_mem broadphasePairs, int numBroadphasePairs, cl_mem aabbsWorldSpace, int numObjects);
-
- cl_mem getBodiesGpu();
- const struct b3RigidBodyData* getBodiesCpu() const;
- //struct b3RigidBodyData* getBodiesCpu();
-
- int getNumBodiesGpu() const;
-
- cl_mem getBodyInertiasGpu();
- int getNumBodyInertiasGpu() const;
-
- cl_mem getCollidablesGpu();
- const struct b3Collidable* getCollidablesCpu() const;
- int getNumCollidablesGpu() const;
-
- const struct b3SapAabb* getLocalSpaceAabbsCpu() const;
-
- const struct b3Contact4* getContactsCPU() const;
-
- cl_mem getContactsGpu();
- int getNumContactsGpu() const;
-
- cl_mem getAabbLocalSpaceBufferGpu();
-
- int getNumRigidBodies() const;
-
- int allocateCollidable();
-
- int getStatic0Index() const
- {
- return m_static0Index;
- }
- b3Collidable& getCollidableCpu(int collidableIndex);
- const b3Collidable& getCollidableCpu(int collidableIndex) const;
-
- const b3GpuNarrowPhaseInternalData* getInternalData() const
- {
- return m_data;
- }
-
- b3GpuNarrowPhaseInternalData* getInternalData()
- {
- return m_data;
- }
-
- const struct b3SapAabb& getLocalSpaceAabb(int collidableIndex) const;
-};
-
-#endif //B3_GPU_NARROWPHASE_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhaseInternalData.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhaseInternalData.h
deleted file mode 100644
index 716a5ea0fc..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuNarrowPhaseInternalData.h
+++ /dev/null
@@ -1,89 +0,0 @@
-
-#ifndef B3_GPU_NARROWPHASE_INTERNAL_DATA_H
-#define B3_GPU_NARROWPHASE_INTERNAL_DATA_H
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3ConvexPolyhedronData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3Vector3.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h"
-
-#include "Bullet3OpenCL/NarrowphaseCollision/b3QuantizedBvh.h"
-#include "Bullet3OpenCL/NarrowphaseCollision/b3BvhInfo.h"
-#include "Bullet3Common/shared/b3Int4.h"
-#include "Bullet3Common/shared/b3Int2.h"
-
-class b3ConvexUtility;
-
-struct b3GpuNarrowPhaseInternalData
-{
- b3AlignedObjectArray<b3ConvexUtility*>* m_convexData;
-
- b3AlignedObjectArray<b3ConvexPolyhedronData> m_convexPolyhedra;
- b3AlignedObjectArray<b3Vector3> m_uniqueEdges;
- b3AlignedObjectArray<b3Vector3> m_convexVertices;
- b3AlignedObjectArray<int> m_convexIndices;
-
- b3OpenCLArray<b3ConvexPolyhedronData>* m_convexPolyhedraGPU;
- b3OpenCLArray<b3Vector3>* m_uniqueEdgesGPU;
- b3OpenCLArray<b3Vector3>* m_convexVerticesGPU;
- b3OpenCLArray<int>* m_convexIndicesGPU;
-
- b3OpenCLArray<b3Vector3>* m_worldVertsB1GPU;
- b3OpenCLArray<b3Int4>* m_clippingFacesOutGPU;
- b3OpenCLArray<b3Vector3>* m_worldNormalsAGPU;
- b3OpenCLArray<b3Vector3>* m_worldVertsA1GPU;
- b3OpenCLArray<b3Vector3>* m_worldVertsB2GPU;
-
- b3AlignedObjectArray<b3GpuChildShape> m_cpuChildShapes;
- b3OpenCLArray<b3GpuChildShape>* m_gpuChildShapes;
-
- b3AlignedObjectArray<b3GpuFace> m_convexFaces;
- b3OpenCLArray<b3GpuFace>* m_convexFacesGPU;
-
- struct GpuSatCollision* m_gpuSatCollision;
-
- b3OpenCLArray<b3Int4>* m_triangleConvexPairs;
-
- b3OpenCLArray<b3Contact4>* m_pBufContactBuffersGPU[2];
- int m_currentContactBuffer;
- b3AlignedObjectArray<b3Contact4>* m_pBufContactOutCPU;
-
- b3AlignedObjectArray<b3RigidBodyData>* m_bodyBufferCPU;
- b3OpenCLArray<b3RigidBodyData>* m_bodyBufferGPU;
-
- b3AlignedObjectArray<b3InertiaData>* m_inertiaBufferCPU;
- b3OpenCLArray<b3InertiaData>* m_inertiaBufferGPU;
-
- int m_numAcceleratedShapes;
- int m_numAcceleratedRigidBodies;
-
- b3AlignedObjectArray<b3Collidable> m_collidablesCPU;
- b3OpenCLArray<b3Collidable>* m_collidablesGPU;
-
- b3OpenCLArray<b3SapAabb>* m_localShapeAABBGPU;
- b3AlignedObjectArray<b3SapAabb>* m_localShapeAABBCPU;
-
- b3AlignedObjectArray<class b3OptimizedBvh*> m_bvhData;
- b3AlignedObjectArray<class b3TriangleIndexVertexArray*> m_meshInterfaces;
-
- b3AlignedObjectArray<b3QuantizedBvhNode> m_treeNodesCPU;
- b3AlignedObjectArray<b3BvhSubtreeInfo> m_subTreesCPU;
-
- b3AlignedObjectArray<b3BvhInfo> m_bvhInfoCPU;
- b3OpenCLArray<b3BvhInfo>* m_bvhInfoGPU;
-
- b3OpenCLArray<b3QuantizedBvhNode>* m_treeNodesGPU;
- b3OpenCLArray<b3BvhSubtreeInfo>* m_subTreesGPU;
-
- b3Config m_config;
-};
-
-#endif //B3_GPU_NARROWPHASE_INTERNAL_DATA_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.cpp
deleted file mode 100644
index bd9d6bb04b..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.cpp
+++ /dev/null
@@ -1,1068 +0,0 @@
-
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-bool useGpuInitSolverBodies = true;
-bool useGpuInfo1 = true;
-bool useGpuInfo2 = true;
-bool useGpuSolveJointConstraintRows = true;
-bool useGpuWriteBackVelocities = true;
-bool gpuBreakConstraints = true;
-
-#include "b3GpuPgsConstraintSolver.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-#include "Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h"
-#include <new>
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include <string.h> //for memset
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
-
-#include "Bullet3OpenCL/RigidBody/kernels/jointSolver.h" //solveConstraintRowsCL
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-
-#define B3_JOINT_SOLVER_PATH "src/Bullet3OpenCL/RigidBody/kernels/jointSolver.cl"
-
-struct b3GpuPgsJacobiSolverInternalData
-{
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
- b3PrefixScanCL* m_prefixScan;
-
- cl_kernel m_solveJointConstraintRowsKernels;
- cl_kernel m_initSolverBodiesKernel;
- cl_kernel m_getInfo1Kernel;
- cl_kernel m_initBatchConstraintsKernel;
- cl_kernel m_getInfo2Kernel;
- cl_kernel m_writeBackVelocitiesKernel;
- cl_kernel m_breakViolatedConstraintsKernel;
-
- b3OpenCLArray<unsigned int>* m_gpuConstraintRowOffsets;
-
- b3OpenCLArray<b3GpuSolverBody>* m_gpuSolverBodies;
- b3OpenCLArray<b3BatchConstraint>* m_gpuBatchConstraints;
- b3OpenCLArray<b3GpuSolverConstraint>* m_gpuConstraintRows;
- b3OpenCLArray<unsigned int>* m_gpuConstraintInfo1;
-
- // b3AlignedObjectArray<b3GpuSolverBody> m_cpuSolverBodies;
- b3AlignedObjectArray<b3BatchConstraint> m_cpuBatchConstraints;
- b3AlignedObjectArray<b3GpuSolverConstraint> m_cpuConstraintRows;
- b3AlignedObjectArray<unsigned int> m_cpuConstraintInfo1;
- b3AlignedObjectArray<unsigned int> m_cpuConstraintRowOffsets;
-
- b3AlignedObjectArray<b3RigidBodyData> m_cpuBodies;
- b3AlignedObjectArray<b3InertiaData> m_cpuInertias;
-
- b3AlignedObjectArray<b3GpuGenericConstraint> m_cpuConstraints;
-
- b3AlignedObjectArray<int> m_batchSizes;
-};
-
-/*
-static b3Transform getWorldTransform(b3RigidBodyData* rb)
-{
- b3Transform newTrans;
- newTrans.setOrigin(rb->m_pos);
- newTrans.setRotation(rb->m_quat);
- return newTrans;
-}
-
-static const b3Matrix3x3& getInvInertiaTensorWorld(b3InertiaData* inertia)
-{
- return inertia->m_invInertiaWorld;
-}
-
-*/
-
-static const b3Vector3& getLinearVelocity(b3RigidBodyData* rb)
-{
- return rb->m_linVel;
-}
-
-static const b3Vector3& getAngularVelocity(b3RigidBodyData* rb)
-{
- return rb->m_angVel;
-}
-
-b3Vector3 getVelocityInLocalPoint(b3RigidBodyData* rb, const b3Vector3& rel_pos)
-{
- //we also calculate lin/ang velocity for kinematic objects
- return getLinearVelocity(rb) + getAngularVelocity(rb).cross(rel_pos);
-}
-
-b3GpuPgsConstraintSolver::b3GpuPgsConstraintSolver(cl_context ctx, cl_device_id device, cl_command_queue queue, bool usePgs)
-{
- m_usePgs = usePgs;
- m_gpuData = new b3GpuPgsJacobiSolverInternalData();
- m_gpuData->m_context = ctx;
- m_gpuData->m_device = device;
- m_gpuData->m_queue = queue;
-
- m_gpuData->m_prefixScan = new b3PrefixScanCL(ctx, device, queue);
-
- m_gpuData->m_gpuConstraintRowOffsets = new b3OpenCLArray<unsigned int>(m_gpuData->m_context, m_gpuData->m_queue);
-
- m_gpuData->m_gpuSolverBodies = new b3OpenCLArray<b3GpuSolverBody>(m_gpuData->m_context, m_gpuData->m_queue);
- m_gpuData->m_gpuBatchConstraints = new b3OpenCLArray<b3BatchConstraint>(m_gpuData->m_context, m_gpuData->m_queue);
- m_gpuData->m_gpuConstraintRows = new b3OpenCLArray<b3GpuSolverConstraint>(m_gpuData->m_context, m_gpuData->m_queue);
- m_gpuData->m_gpuConstraintInfo1 = new b3OpenCLArray<unsigned int>(m_gpuData->m_context, m_gpuData->m_queue);
- cl_int errNum = 0;
-
- {
- cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, &errNum, "", B3_JOINT_SOLVER_PATH);
- //cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_gpuData->m_context,m_gpuData->m_device,0,&errNum,"",B3_JOINT_SOLVER_PATH,true);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_solveJointConstraintRowsKernels = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "solveJointConstraintRows", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_initSolverBodiesKernel = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "initSolverBodies", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_getInfo1Kernel = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "getInfo1Kernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_initBatchConstraintsKernel = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "initBatchConstraintsKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_getInfo2Kernel = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "getInfo2Kernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_writeBackVelocitiesKernel = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "writeBackVelocitiesKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- m_gpuData->m_breakViolatedConstraintsKernel = b3OpenCLUtils::compileCLKernelFromString(m_gpuData->m_context, m_gpuData->m_device, solveConstraintRowsCL, "breakViolatedConstraintsKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
-
- clReleaseProgram(prog);
- }
-}
-
-b3GpuPgsConstraintSolver::~b3GpuPgsConstraintSolver()
-{
- clReleaseKernel(m_gpuData->m_solveJointConstraintRowsKernels);
- clReleaseKernel(m_gpuData->m_initSolverBodiesKernel);
- clReleaseKernel(m_gpuData->m_getInfo1Kernel);
- clReleaseKernel(m_gpuData->m_initBatchConstraintsKernel);
- clReleaseKernel(m_gpuData->m_getInfo2Kernel);
- clReleaseKernel(m_gpuData->m_writeBackVelocitiesKernel);
- clReleaseKernel(m_gpuData->m_breakViolatedConstraintsKernel);
-
- delete m_gpuData->m_prefixScan;
- delete m_gpuData->m_gpuConstraintRowOffsets;
- delete m_gpuData->m_gpuSolverBodies;
- delete m_gpuData->m_gpuBatchConstraints;
- delete m_gpuData->m_gpuConstraintRows;
- delete m_gpuData->m_gpuConstraintInfo1;
-
- delete m_gpuData;
-}
-
-struct b3BatchConstraint
-{
- int m_bodyAPtrAndSignBit;
- int m_bodyBPtrAndSignBit;
- int m_originalConstraintIndex;
- int m_batchId;
-};
-
-static b3AlignedObjectArray<b3BatchConstraint> batchConstraints;
-
-void b3GpuPgsConstraintSolver::recomputeBatches()
-{
- m_gpuData->m_batchSizes.clear();
-}
-
-b3Scalar b3GpuPgsConstraintSolver::solveGroupCacheFriendlySetup(b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias, int numBodies, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("GPU solveGroupCacheFriendlySetup");
- batchConstraints.resize(numConstraints);
- m_gpuData->m_gpuBatchConstraints->resize(numConstraints);
- m_staticIdx = -1;
- m_maxOverrideNumSolverIterations = 0;
-
- /* m_gpuData->m_gpuBodies->resize(numBodies);
- m_gpuData->m_gpuBodies->copyFromHostPointer(bodies,numBodies);
-
- b3OpenCLArray<b3InertiaData> gpuInertias(m_gpuData->m_context,m_gpuData->m_queue);
- gpuInertias.resize(numBodies);
- gpuInertias.copyFromHostPointer(inertias,numBodies);
- */
-
- m_gpuData->m_gpuSolverBodies->resize(numBodies);
-
- m_tmpSolverBodyPool.resize(numBodies);
- {
- if (useGpuInitSolverBodies)
- {
- B3_PROFILE("m_initSolverBodiesKernel");
-
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_initSolverBodiesKernel, "m_initSolverBodiesKernel");
- launcher.setBuffer(m_gpuData->m_gpuSolverBodies->getBufferCL());
- launcher.setBuffer(gpuBodies->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_gpuData->m_queue);
-
- // m_gpuData->m_gpuSolverBodies->copyToHost(m_tmpSolverBodyPool);
- }
- else
- {
- gpuBodies->copyToHost(m_gpuData->m_cpuBodies);
- for (int i = 0; i < numBodies; i++)
- {
- b3RigidBodyData& body = m_gpuData->m_cpuBodies[i];
- b3GpuSolverBody& solverBody = m_tmpSolverBodyPool[i];
- initSolverBody(i, &solverBody, &body);
- solverBody.m_originalBodyIndex = i;
- }
- m_gpuData->m_gpuSolverBodies->copyFromHost(m_tmpSolverBodyPool);
- }
- }
-
- // int totalBodies = 0;
- int totalNumRows = 0;
- //b3RigidBody* rb0=0,*rb1=0;
- //if (1)
- {
- {
- // int i;
-
- m_tmpConstraintSizesPool.resizeNoInitialize(numConstraints);
-
- // b3OpenCLArray<b3GpuGenericConstraint> gpuConstraints(m_gpuData->m_context,m_gpuData->m_queue);
-
- if (useGpuInfo1)
- {
- B3_PROFILE("info1 and init batchConstraint");
-
- m_gpuData->m_gpuConstraintInfo1->resize(numConstraints);
-
- if (1)
- {
- B3_PROFILE("getInfo1Kernel");
-
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_getInfo1Kernel, "m_getInfo1Kernel");
- launcher.setBuffer(m_gpuData->m_gpuConstraintInfo1->getBufferCL());
- launcher.setBuffer(gpuConstraints->getBufferCL());
- launcher.setConst(numConstraints);
- launcher.launch1D(numConstraints);
- clFinish(m_gpuData->m_queue);
- }
-
- if (m_gpuData->m_batchSizes.size() == 0)
- {
- B3_PROFILE("initBatchConstraintsKernel");
-
- m_gpuData->m_gpuConstraintRowOffsets->resize(numConstraints);
- unsigned int total = 0;
- m_gpuData->m_prefixScan->execute(*m_gpuData->m_gpuConstraintInfo1, *m_gpuData->m_gpuConstraintRowOffsets, numConstraints, &total);
- unsigned int lastElem = m_gpuData->m_gpuConstraintInfo1->at(numConstraints - 1);
- totalNumRows = total + lastElem;
-
- {
- B3_PROFILE("init batch constraints");
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_initBatchConstraintsKernel, "m_initBatchConstraintsKernel");
- launcher.setBuffer(m_gpuData->m_gpuConstraintInfo1->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintRowOffsets->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuBatchConstraints->getBufferCL());
- launcher.setBuffer(gpuConstraints->getBufferCL());
- launcher.setBuffer(gpuBodies->getBufferCL());
- launcher.setConst(numConstraints);
- launcher.launch1D(numConstraints);
- clFinish(m_gpuData->m_queue);
- }
- //assume the batching happens on CPU, so copy the data
- m_gpuData->m_gpuBatchConstraints->copyToHost(batchConstraints);
- }
- }
- else
- {
- totalNumRows = 0;
- gpuConstraints->copyToHost(m_gpuData->m_cpuConstraints);
- //calculate the total number of contraint rows
- for (int i = 0; i < numConstraints; i++)
- {
- unsigned int& info1 = m_tmpConstraintSizesPool[i];
- // unsigned int info1;
- if (m_gpuData->m_cpuConstraints[i].isEnabled())
- {
- m_gpuData->m_cpuConstraints[i].getInfo1(&info1, &m_gpuData->m_cpuBodies[0]);
- }
- else
- {
- info1 = 0;
- }
-
- totalNumRows += info1;
- }
-
- m_gpuData->m_gpuBatchConstraints->copyFromHost(batchConstraints);
- m_gpuData->m_gpuConstraintInfo1->copyFromHost(m_tmpConstraintSizesPool);
- }
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(totalNumRows);
- m_gpuData->m_gpuConstraintRows->resize(totalNumRows);
-
- // b3GpuConstraintArray verify;
-
- if (useGpuInfo2)
- {
- {
- B3_PROFILE("getInfo2Kernel");
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_getInfo2Kernel, "m_getInfo2Kernel");
- launcher.setBuffer(m_gpuData->m_gpuConstraintRows->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintInfo1->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintRowOffsets->getBufferCL());
- launcher.setBuffer(gpuConstraints->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuBatchConstraints->getBufferCL());
- launcher.setBuffer(gpuBodies->getBufferCL());
- launcher.setBuffer(gpuInertias->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuSolverBodies->getBufferCL());
- launcher.setConst(infoGlobal.m_timeStep);
- launcher.setConst(infoGlobal.m_erp);
- launcher.setConst(infoGlobal.m_globalCfm);
- launcher.setConst(infoGlobal.m_damping);
- launcher.setConst(infoGlobal.m_numIterations);
- launcher.setConst(numConstraints);
- launcher.launch1D(numConstraints);
- clFinish(m_gpuData->m_queue);
-
- if (m_gpuData->m_batchSizes.size() == 0)
- m_gpuData->m_gpuBatchConstraints->copyToHost(batchConstraints);
- //m_gpuData->m_gpuConstraintRows->copyToHost(verify);
- //m_gpuData->m_gpuConstraintRows->copyToHost(m_tmpSolverNonContactConstraintPool);
- }
- }
- else
- {
- gpuInertias->copyToHost(m_gpuData->m_cpuInertias);
-
- ///setup the b3SolverConstraints
-
- for (int i = 0; i < numConstraints; i++)
- {
- const int& info1 = m_tmpConstraintSizesPool[i];
-
- if (info1)
- {
- int constraintIndex = batchConstraints[i].m_originalConstraintIndex;
- int constraintRowOffset = m_gpuData->m_cpuConstraintRowOffsets[constraintIndex];
-
- b3GpuSolverConstraint* currentConstraintRow = &m_tmpSolverNonContactConstraintPool[constraintRowOffset];
- b3GpuGenericConstraint& constraint = m_gpuData->m_cpuConstraints[i];
-
- b3RigidBodyData& rbA = m_gpuData->m_cpuBodies[constraint.getRigidBodyA()];
- //b3RigidBody& rbA = constraint.getRigidBodyA();
- // b3RigidBody& rbB = constraint.getRigidBodyB();
- b3RigidBodyData& rbB = m_gpuData->m_cpuBodies[constraint.getRigidBodyB()];
-
- int solverBodyIdA = constraint.getRigidBodyA(); //getOrInitSolverBody(constraint.getRigidBodyA(),bodies,inertias);
- int solverBodyIdB = constraint.getRigidBodyB(); //getOrInitSolverBody(constraint.getRigidBodyB(),bodies,inertias);
-
- b3GpuSolverBody* bodyAPtr = &m_tmpSolverBodyPool[solverBodyIdA];
- b3GpuSolverBody* bodyBPtr = &m_tmpSolverBodyPool[solverBodyIdB];
-
- if (rbA.m_invMass)
- {
- batchConstraints[i].m_bodyAPtrAndSignBit = solverBodyIdA;
- }
- else
- {
- if (!solverBodyIdA)
- m_staticIdx = 0;
- batchConstraints[i].m_bodyAPtrAndSignBit = -solverBodyIdA;
- }
-
- if (rbB.m_invMass)
- {
- batchConstraints[i].m_bodyBPtrAndSignBit = solverBodyIdB;
- }
- else
- {
- if (!solverBodyIdB)
- m_staticIdx = 0;
- batchConstraints[i].m_bodyBPtrAndSignBit = -solverBodyIdB;
- }
-
- int overrideNumSolverIterations = 0; //constraint->getOverrideNumSolverIterations() > 0 ? constraint->getOverrideNumSolverIterations() : infoGlobal.m_numIterations;
- if (overrideNumSolverIterations > m_maxOverrideNumSolverIterations)
- m_maxOverrideNumSolverIterations = overrideNumSolverIterations;
-
- int j;
- for (j = 0; j < info1; j++)
- {
- memset(&currentConstraintRow[j], 0, sizeof(b3GpuSolverConstraint));
- currentConstraintRow[j].m_angularComponentA.setValue(0, 0, 0);
- currentConstraintRow[j].m_angularComponentB.setValue(0, 0, 0);
- currentConstraintRow[j].m_appliedImpulse = 0.f;
- currentConstraintRow[j].m_appliedPushImpulse = 0.f;
- currentConstraintRow[j].m_cfm = 0.f;
- currentConstraintRow[j].m_contactNormal.setValue(0, 0, 0);
- currentConstraintRow[j].m_friction = 0.f;
- currentConstraintRow[j].m_frictionIndex = 0;
- currentConstraintRow[j].m_jacDiagABInv = 0.f;
- currentConstraintRow[j].m_lowerLimit = 0.f;
- currentConstraintRow[j].m_upperLimit = 0.f;
-
- currentConstraintRow[j].m_originalContactPoint = 0;
- currentConstraintRow[j].m_overrideNumSolverIterations = 0;
- currentConstraintRow[j].m_relpos1CrossNormal.setValue(0, 0, 0);
- currentConstraintRow[j].m_relpos2CrossNormal.setValue(0, 0, 0);
- currentConstraintRow[j].m_rhs = 0.f;
- currentConstraintRow[j].m_rhsPenetration = 0.f;
- currentConstraintRow[j].m_solverBodyIdA = 0;
- currentConstraintRow[j].m_solverBodyIdB = 0;
-
- currentConstraintRow[j].m_lowerLimit = -B3_INFINITY;
- currentConstraintRow[j].m_upperLimit = B3_INFINITY;
- currentConstraintRow[j].m_appliedImpulse = 0.f;
- currentConstraintRow[j].m_appliedPushImpulse = 0.f;
- currentConstraintRow[j].m_solverBodyIdA = solverBodyIdA;
- currentConstraintRow[j].m_solverBodyIdB = solverBodyIdB;
- currentConstraintRow[j].m_overrideNumSolverIterations = overrideNumSolverIterations;
- }
-
- bodyAPtr->internalGetDeltaLinearVelocity().setValue(0.f, 0.f, 0.f);
- bodyAPtr->internalGetDeltaAngularVelocity().setValue(0.f, 0.f, 0.f);
- bodyAPtr->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- bodyAPtr->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetDeltaLinearVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetDeltaAngularVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- bodyBPtr->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
-
- b3GpuConstraintInfo2 info2;
- info2.fps = 1.f / infoGlobal.m_timeStep;
- info2.erp = infoGlobal.m_erp;
- info2.m_J1linearAxis = currentConstraintRow->m_contactNormal;
- info2.m_J1angularAxis = currentConstraintRow->m_relpos1CrossNormal;
- info2.m_J2linearAxis = 0;
- info2.m_J2angularAxis = currentConstraintRow->m_relpos2CrossNormal;
- info2.rowskip = sizeof(b3GpuSolverConstraint) / sizeof(b3Scalar); //check this
- ///the size of b3GpuSolverConstraint needs be a multiple of b3Scalar
- b3Assert(info2.rowskip * sizeof(b3Scalar) == sizeof(b3GpuSolverConstraint));
- info2.m_constraintError = &currentConstraintRow->m_rhs;
- currentConstraintRow->m_cfm = infoGlobal.m_globalCfm;
- info2.m_damping = infoGlobal.m_damping;
- info2.cfm = &currentConstraintRow->m_cfm;
- info2.m_lowerLimit = &currentConstraintRow->m_lowerLimit;
- info2.m_upperLimit = &currentConstraintRow->m_upperLimit;
- info2.m_numIterations = infoGlobal.m_numIterations;
- m_gpuData->m_cpuConstraints[i].getInfo2(&info2, &m_gpuData->m_cpuBodies[0]);
-
- ///finalize the constraint setup
- for (j = 0; j < info1; j++)
- {
- b3GpuSolverConstraint& solverConstraint = currentConstraintRow[j];
-
- if (solverConstraint.m_upperLimit >= m_gpuData->m_cpuConstraints[i].getBreakingImpulseThreshold())
- {
- solverConstraint.m_upperLimit = m_gpuData->m_cpuConstraints[i].getBreakingImpulseThreshold();
- }
-
- if (solverConstraint.m_lowerLimit <= -m_gpuData->m_cpuConstraints[i].getBreakingImpulseThreshold())
- {
- solverConstraint.m_lowerLimit = -m_gpuData->m_cpuConstraints[i].getBreakingImpulseThreshold();
- }
-
- // solverConstraint.m_originalContactPoint = constraint;
-
- b3Matrix3x3& invInertiaWorldA = m_gpuData->m_cpuInertias[constraint.getRigidBodyA()].m_invInertiaWorld;
- {
- //b3Vector3 angularFactorA(1,1,1);
- const b3Vector3& ftorqueAxis1 = solverConstraint.m_relpos1CrossNormal;
- solverConstraint.m_angularComponentA = invInertiaWorldA * ftorqueAxis1; //*angularFactorA;
- }
-
- b3Matrix3x3& invInertiaWorldB = m_gpuData->m_cpuInertias[constraint.getRigidBodyB()].m_invInertiaWorld;
- {
- const b3Vector3& ftorqueAxis2 = solverConstraint.m_relpos2CrossNormal;
- solverConstraint.m_angularComponentB = invInertiaWorldB * ftorqueAxis2; //*constraint.getRigidBodyB().getAngularFactor();
- }
-
- {
- //it is ok to use solverConstraint.m_contactNormal instead of -solverConstraint.m_contactNormal
- //because it gets multiplied iMJlB
- b3Vector3 iMJlA = solverConstraint.m_contactNormal * rbA.m_invMass;
- b3Vector3 iMJaA = invInertiaWorldA * solverConstraint.m_relpos1CrossNormal;
- b3Vector3 iMJlB = solverConstraint.m_contactNormal * rbB.m_invMass; //sign of normal?
- b3Vector3 iMJaB = invInertiaWorldB * solverConstraint.m_relpos2CrossNormal;
-
- b3Scalar sum = iMJlA.dot(solverConstraint.m_contactNormal);
- sum += iMJaA.dot(solverConstraint.m_relpos1CrossNormal);
- sum += iMJlB.dot(solverConstraint.m_contactNormal);
- sum += iMJaB.dot(solverConstraint.m_relpos2CrossNormal);
- b3Scalar fsum = b3Fabs(sum);
- b3Assert(fsum > B3_EPSILON);
- solverConstraint.m_jacDiagABInv = fsum > B3_EPSILON ? b3Scalar(1.) / sum : 0.f;
- }
-
- ///fix rhs
- ///todo: add force/torque accelerators
- {
- b3Scalar rel_vel;
- b3Scalar vel1Dotn = solverConstraint.m_contactNormal.dot(rbA.m_linVel) + solverConstraint.m_relpos1CrossNormal.dot(rbA.m_angVel);
- b3Scalar vel2Dotn = -solverConstraint.m_contactNormal.dot(rbB.m_linVel) + solverConstraint.m_relpos2CrossNormal.dot(rbB.m_angVel);
-
- rel_vel = vel1Dotn + vel2Dotn;
-
- b3Scalar restitution = 0.f;
- b3Scalar positionalError = solverConstraint.m_rhs; //already filled in by getConstraintInfo2
- b3Scalar velocityError = restitution - rel_vel * info2.m_damping;
- b3Scalar penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- b3Scalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_appliedImpulse = 0.f;
- }
- }
- }
- }
-
- m_gpuData->m_gpuConstraintRows->copyFromHost(m_tmpSolverNonContactConstraintPool);
- m_gpuData->m_gpuConstraintInfo1->copyFromHost(m_tmpConstraintSizesPool);
-
- if (m_gpuData->m_batchSizes.size() == 0)
- m_gpuData->m_gpuBatchConstraints->copyFromHost(batchConstraints);
- else
- m_gpuData->m_gpuBatchConstraints->copyToHost(batchConstraints);
-
- m_gpuData->m_gpuSolverBodies->copyFromHost(m_tmpSolverBodyPool);
-
- } //end useGpuInfo2
- }
-
-#ifdef B3_SUPPORT_CONTACT_CONSTRAINTS
- {
- int i;
-
- for (i = 0; i < numManifolds; i++)
- {
- b3Contact4& manifold = manifoldPtr[i];
- convertContact(bodies, inertias, &manifold, infoGlobal);
- }
- }
-#endif //B3_SUPPORT_CONTACT_CONSTRAINTS
- }
-
- // b3ContactSolverInfo info = infoGlobal;
-
- // int numNonContactPool = m_tmpSolverNonContactConstraintPool.size();
- // int numConstraintPool = m_tmpSolverContactConstraintPool.size();
- // int numFrictionPool = m_tmpSolverContactFrictionConstraintPool.size();
-
- return 0.f;
-}
-
-///a straight copy from GPU/OpenCL kernel, for debugging
-__inline void internalApplyImpulse(b3GpuSolverBody* body, const b3Vector3& linearComponent, const b3Vector3& angularComponent, float impulseMagnitude)
-{
- body->m_deltaLinearVelocity += linearComponent * impulseMagnitude * body->m_linearFactor;
- body->m_deltaAngularVelocity += angularComponent * (impulseMagnitude * body->m_angularFactor);
-}
-
-void resolveSingleConstraintRowGeneric2(b3GpuSolverBody* body1, b3GpuSolverBody* body2, b3GpuSolverConstraint* c)
-{
- float deltaImpulse = c->m_rhs - b3Scalar(c->m_appliedImpulse) * c->m_cfm;
- float deltaVel1Dotn = b3Dot(c->m_contactNormal, body1->m_deltaLinearVelocity) + b3Dot(c->m_relpos1CrossNormal, body1->m_deltaAngularVelocity);
- float deltaVel2Dotn = -b3Dot(c->m_contactNormal, body2->m_deltaLinearVelocity) + b3Dot(c->m_relpos2CrossNormal, body2->m_deltaAngularVelocity);
-
- deltaImpulse -= deltaVel1Dotn * c->m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c->m_jacDiagABInv;
-
- float sum = b3Scalar(c->m_appliedImpulse) + deltaImpulse;
- if (sum < c->m_lowerLimit)
- {
- deltaImpulse = c->m_lowerLimit - b3Scalar(c->m_appliedImpulse);
- c->m_appliedImpulse = c->m_lowerLimit;
- }
- else if (sum > c->m_upperLimit)
- {
- deltaImpulse = c->m_upperLimit - b3Scalar(c->m_appliedImpulse);
- c->m_appliedImpulse = c->m_upperLimit;
- }
- else
- {
- c->m_appliedImpulse = sum;
- }
-
- internalApplyImpulse(body1, c->m_contactNormal * body1->m_invMass, c->m_angularComponentA, deltaImpulse);
- internalApplyImpulse(body2, -c->m_contactNormal * body2->m_invMass, c->m_angularComponentB, deltaImpulse);
-}
-
-void b3GpuPgsConstraintSolver::initSolverBody(int bodyIndex, b3GpuSolverBody* solverBody, b3RigidBodyData* rb)
-{
- solverBody->m_deltaLinearVelocity.setValue(0.f, 0.f, 0.f);
- solverBody->m_deltaAngularVelocity.setValue(0.f, 0.f, 0.f);
- solverBody->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- solverBody->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
-
- b3Assert(rb);
- // solverBody->m_worldTransform = getWorldTransform(rb);
- solverBody->internalSetInvMass(b3MakeVector3(rb->m_invMass, rb->m_invMass, rb->m_invMass));
- solverBody->m_originalBodyIndex = bodyIndex;
- solverBody->m_angularFactor = b3MakeVector3(1, 1, 1);
- solverBody->m_linearFactor = b3MakeVector3(1, 1, 1);
- solverBody->m_linearVelocity = getLinearVelocity(rb);
- solverBody->m_angularVelocity = getAngularVelocity(rb);
-}
-
-void b3GpuPgsConstraintSolver::averageVelocities()
-{
-}
-
-b3Scalar b3GpuPgsConstraintSolver::solveGroupCacheFriendlyIterations(b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints1, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- //only create the batches once.
- //@todo: incrementally update batches when constraints are added/activated and/or removed/deactivated
- B3_PROFILE("GpuSolveGroupCacheFriendlyIterations");
-
- bool createBatches = m_gpuData->m_batchSizes.size() == 0;
- {
- if (createBatches)
- {
- m_gpuData->m_batchSizes.resize(0);
-
- {
- m_gpuData->m_gpuBatchConstraints->copyToHost(batchConstraints);
-
- B3_PROFILE("batch joints");
- b3Assert(batchConstraints.size() == numConstraints);
- int simdWidth = numConstraints + 1;
- int numBodies = m_tmpSolverBodyPool.size();
- sortConstraintByBatch3(&batchConstraints[0], numConstraints, simdWidth, m_staticIdx, numBodies);
-
- m_gpuData->m_gpuBatchConstraints->copyFromHost(batchConstraints);
- }
- }
- else
- {
- /*b3AlignedObjectArray<b3BatchConstraint> cpuCheckBatches;
- m_gpuData->m_gpuBatchConstraints->copyToHost(cpuCheckBatches);
- b3Assert(cpuCheckBatches.size()==batchConstraints.size());
- printf(".\n");
- */
- //>copyFromHost(batchConstraints);
- }
- int maxIterations = infoGlobal.m_numIterations;
-
- bool useBatching = true;
-
- if (useBatching)
- {
- if (!useGpuSolveJointConstraintRows)
- {
- B3_PROFILE("copy to host");
- m_gpuData->m_gpuSolverBodies->copyToHost(m_tmpSolverBodyPool);
- m_gpuData->m_gpuBatchConstraints->copyToHost(batchConstraints);
- m_gpuData->m_gpuConstraintRows->copyToHost(m_tmpSolverNonContactConstraintPool);
- m_gpuData->m_gpuConstraintInfo1->copyToHost(m_gpuData->m_cpuConstraintInfo1);
- m_gpuData->m_gpuConstraintRowOffsets->copyToHost(m_gpuData->m_cpuConstraintRowOffsets);
- gpuConstraints1->copyToHost(m_gpuData->m_cpuConstraints);
- }
-
- for (int iteration = 0; iteration < maxIterations; iteration++)
- {
- int batchOffset = 0;
- int constraintOffset = 0;
- int numBatches = m_gpuData->m_batchSizes.size();
- for (int bb = 0; bb < numBatches; bb++)
- {
- int numConstraintsInBatch = m_gpuData->m_batchSizes[bb];
-
- if (useGpuSolveJointConstraintRows)
- {
- B3_PROFILE("solveJointConstraintRowsKernels");
-
- /*
- __kernel void solveJointConstraintRows(__global b3GpuSolverBody* solverBodies,
- __global b3BatchConstraint* batchConstraints,
- __global b3SolverConstraint* rows,
- __global unsigned int* numConstraintRowsInfo1,
- __global unsigned int* rowOffsets,
- __global b3GpuGenericConstraint* constraints,
- int batchOffset,
- int numConstraintsInBatch*/
-
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_solveJointConstraintRowsKernels, "m_solveJointConstraintRowsKernels");
- launcher.setBuffer(m_gpuData->m_gpuSolverBodies->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuBatchConstraints->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintRows->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintInfo1->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintRowOffsets->getBufferCL());
- launcher.setBuffer(gpuConstraints1->getBufferCL()); //to detect disabled constraints
- launcher.setConst(batchOffset);
- launcher.setConst(numConstraintsInBatch);
-
- launcher.launch1D(numConstraintsInBatch);
- }
- else //useGpu
- {
- for (int b = 0; b < numConstraintsInBatch; b++)
- {
- const b3BatchConstraint& c = batchConstraints[batchOffset + b];
- /*printf("-----------\n");
- printf("bb=%d\n",bb);
- printf("c.batchId = %d\n", c.m_batchId);
- */
- b3Assert(c.m_batchId == bb);
- b3GpuGenericConstraint* constraint = &m_gpuData->m_cpuConstraints[c.m_originalConstraintIndex];
- if (constraint->m_flags & B3_CONSTRAINT_FLAG_ENABLED)
- {
- int numConstraintRows = m_gpuData->m_cpuConstraintInfo1[c.m_originalConstraintIndex];
- int constraintOffset = m_gpuData->m_cpuConstraintRowOffsets[c.m_originalConstraintIndex];
-
- for (int jj = 0; jj < numConstraintRows; jj++)
- {
- //
- b3GpuSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[constraintOffset + jj];
- //resolveSingleConstraintRowGenericSIMD(m_tmpSolverBodyPool[constraint.m_solverBodyIdA],m_tmpSolverBodyPool[constraint.m_solverBodyIdB],constraint);
- resolveSingleConstraintRowGeneric2(&m_tmpSolverBodyPool[constraint.m_solverBodyIdA], &m_tmpSolverBodyPool[constraint.m_solverBodyIdB], &constraint);
- }
- }
- }
- } //useGpu
- batchOffset += numConstraintsInBatch;
- constraintOffset += numConstraintsInBatch;
- }
- } //for (int iteration...
-
- if (!useGpuSolveJointConstraintRows)
- {
- {
- B3_PROFILE("copy from host");
- m_gpuData->m_gpuSolverBodies->copyFromHost(m_tmpSolverBodyPool);
- m_gpuData->m_gpuBatchConstraints->copyFromHost(batchConstraints);
- m_gpuData->m_gpuConstraintRows->copyFromHost(m_tmpSolverNonContactConstraintPool);
- }
-
- //B3_PROFILE("copy to host");
- //m_gpuData->m_gpuSolverBodies->copyToHost(m_tmpSolverBodyPool);
- }
- //int sz = sizeof(b3GpuSolverBody);
- //printf("cpu sizeof(b3GpuSolverBody)=%d\n",sz);
- }
- else
- {
- for (int iteration = 0; iteration < maxIterations; iteration++)
- {
- int numJoints = m_tmpSolverNonContactConstraintPool.size();
- for (int j = 0; j < numJoints; j++)
- {
- b3GpuSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[j];
- resolveSingleConstraintRowGeneric2(&m_tmpSolverBodyPool[constraint.m_solverBodyIdA], &m_tmpSolverBodyPool[constraint.m_solverBodyIdB], &constraint);
- }
-
- if (!m_usePgs)
- {
- averageVelocities();
- }
- }
- }
- }
- clFinish(m_gpuData->m_queue);
- return 0.f;
-}
-
-static b3AlignedObjectArray<int> bodyUsed;
-static b3AlignedObjectArray<int> curUsed;
-
-inline int b3GpuPgsConstraintSolver::sortConstraintByBatch3(b3BatchConstraint* cs, int numConstraints, int simdWidth, int staticIdx, int numBodies)
-{
- //int sz = sizeof(b3BatchConstraint);
-
- B3_PROFILE("sortConstraintByBatch3");
-
- static int maxSwaps = 0;
- int numSwaps = 0;
-
- curUsed.resize(2 * simdWidth);
-
- static int maxNumConstraints = 0;
- if (maxNumConstraints < numConstraints)
- {
- maxNumConstraints = numConstraints;
- //printf("maxNumConstraints = %d\n",maxNumConstraints );
- }
-
- int numUsedArray = numBodies / 32 + 1;
- bodyUsed.resize(numUsedArray);
-
- for (int q = 0; q < numUsedArray; q++)
- bodyUsed[q] = 0;
-
- int curBodyUsed = 0;
-
- int numIter = 0;
-
-#if defined(_DEBUG)
- for (int i = 0; i < numConstraints; i++)
- cs[i].m_batchId = -1;
-#endif
-
- int numValidConstraints = 0;
- // int unprocessedConstraintIndex = 0;
-
- int batchIdx = 0;
-
- {
- B3_PROFILE("cpu batch innerloop");
-
- while (numValidConstraints < numConstraints)
- {
- numIter++;
- int nCurrentBatch = 0;
- // clear flag
- for (int i = 0; i < curBodyUsed; i++)
- bodyUsed[curUsed[i] / 32] = 0;
-
- curBodyUsed = 0;
-
- for (int i = numValidConstraints; i < numConstraints; i++)
- {
- int idx = i;
- b3Assert(idx < numConstraints);
- // check if it can go
- int bodyAS = cs[idx].m_bodyAPtrAndSignBit;
- int bodyBS = cs[idx].m_bodyBPtrAndSignBit;
- int bodyA = abs(bodyAS);
- int bodyB = abs(bodyBS);
- bool aIsStatic = (bodyAS < 0) || bodyAS == staticIdx;
- bool bIsStatic = (bodyBS < 0) || bodyBS == staticIdx;
- int aUnavailable = 0;
- int bUnavailable = 0;
- if (!aIsStatic)
- {
- aUnavailable = bodyUsed[bodyA / 32] & (1 << (bodyA & 31));
- }
- if (!aUnavailable)
- if (!bIsStatic)
- {
- bUnavailable = bodyUsed[bodyB / 32] & (1 << (bodyB & 31));
- }
-
- if (aUnavailable == 0 && bUnavailable == 0) // ok
- {
- if (!aIsStatic)
- {
- bodyUsed[bodyA / 32] |= (1 << (bodyA & 31));
- curUsed[curBodyUsed++] = bodyA;
- }
- if (!bIsStatic)
- {
- bodyUsed[bodyB / 32] |= (1 << (bodyB & 31));
- curUsed[curBodyUsed++] = bodyB;
- }
-
- cs[idx].m_batchId = batchIdx;
-
- if (i != numValidConstraints)
- {
- b3Swap(cs[i], cs[numValidConstraints]);
- numSwaps++;
- }
-
- numValidConstraints++;
- {
- nCurrentBatch++;
- if (nCurrentBatch == simdWidth)
- {
- nCurrentBatch = 0;
- for (int i = 0; i < curBodyUsed; i++)
- bodyUsed[curUsed[i] / 32] = 0;
- curBodyUsed = 0;
- }
- }
- }
- }
- m_gpuData->m_batchSizes.push_back(nCurrentBatch);
- batchIdx++;
- }
- }
-
-#if defined(_DEBUG)
- // debugPrintf( "nBatches: %d\n", batchIdx );
- for (int i = 0; i < numConstraints; i++)
- {
- b3Assert(cs[i].m_batchId != -1);
- }
-#endif
-
- if (maxSwaps < numSwaps)
- {
- maxSwaps = numSwaps;
- //printf("maxSwaps = %d\n", maxSwaps);
- }
-
- return batchIdx;
-}
-
-/// b3PgsJacobiSolver Sequentially applies impulses
-b3Scalar b3GpuPgsConstraintSolver::solveGroup(b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias,
- int numBodies, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("solveJoints");
- //you need to provide at least some bodies
-
- solveGroupCacheFriendlySetup(gpuBodies, gpuInertias, numBodies, gpuConstraints, numConstraints, infoGlobal);
-
- solveGroupCacheFriendlyIterations(gpuConstraints, numConstraints, infoGlobal);
-
- solveGroupCacheFriendlyFinish(gpuBodies, gpuInertias, numBodies, gpuConstraints, numConstraints, infoGlobal);
-
- return 0.f;
-}
-
-void b3GpuPgsConstraintSolver::solveJoints(int numBodies, b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias,
- int numConstraints, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints)
-{
- b3ContactSolverInfo infoGlobal;
- infoGlobal.m_splitImpulse = false;
- infoGlobal.m_timeStep = 1.f / 60.f;
- infoGlobal.m_numIterations = 4; //4;
- // infoGlobal.m_solverMode|=B3_SOLVER_USE_2_FRICTION_DIRECTIONS|B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS|B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION;
- //infoGlobal.m_solverMode|=B3_SOLVER_USE_2_FRICTION_DIRECTIONS|B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS;
- infoGlobal.m_solverMode |= B3_SOLVER_USE_2_FRICTION_DIRECTIONS;
-
- //if (infoGlobal.m_solverMode & B3_SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS)
- //if ((infoGlobal.m_solverMode & B3_SOLVER_USE_2_FRICTION_DIRECTIONS) && (infoGlobal.m_solverMode & B3_SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION))
-
- solveGroup(gpuBodies, gpuInertias, numBodies, gpuConstraints, numConstraints, infoGlobal);
-}
-
-//b3AlignedObjectArray<b3RigidBodyData> testBodies;
-
-b3Scalar b3GpuPgsConstraintSolver::solveGroupCacheFriendlyFinish(b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias, int numBodies, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints, int numConstraints, const b3ContactSolverInfo& infoGlobal)
-{
- B3_PROFILE("solveGroupCacheFriendlyFinish");
- // int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- // int i,j;
-
- {
- if (gpuBreakConstraints)
- {
- B3_PROFILE("breakViolatedConstraintsKernel");
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_breakViolatedConstraintsKernel, "m_breakViolatedConstraintsKernel");
- launcher.setBuffer(gpuConstraints->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintInfo1->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintRowOffsets->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuConstraintRows->getBufferCL());
- launcher.setConst(numConstraints);
- launcher.launch1D(numConstraints);
- }
- else
- {
- gpuConstraints->copyToHost(m_gpuData->m_cpuConstraints);
- m_gpuData->m_gpuBatchConstraints->copyToHost(m_gpuData->m_cpuBatchConstraints);
- m_gpuData->m_gpuConstraintRows->copyToHost(m_gpuData->m_cpuConstraintRows);
- gpuConstraints->copyToHost(m_gpuData->m_cpuConstraints);
- m_gpuData->m_gpuConstraintInfo1->copyToHost(m_gpuData->m_cpuConstraintInfo1);
- m_gpuData->m_gpuConstraintRowOffsets->copyToHost(m_gpuData->m_cpuConstraintRowOffsets);
-
- for (int cid = 0; cid < numConstraints; cid++)
- {
- int originalConstraintIndex = batchConstraints[cid].m_originalConstraintIndex;
- int constraintRowOffset = m_gpuData->m_cpuConstraintRowOffsets[originalConstraintIndex];
- int numRows = m_gpuData->m_cpuConstraintInfo1[originalConstraintIndex];
- if (numRows)
- {
- // printf("cid=%d, breakingThreshold =%f\n",cid,breakingThreshold);
- for (int i = 0; i < numRows; i++)
- {
- int rowIndex = constraintRowOffset + i;
- int orgConstraintIndex = m_gpuData->m_cpuConstraintRows[rowIndex].m_originalConstraintIndex;
- float breakingThreshold = m_gpuData->m_cpuConstraints[orgConstraintIndex].m_breakingImpulseThreshold;
- // printf("rows[%d].m_appliedImpulse=%f\n",rowIndex,rows[rowIndex].m_appliedImpulse);
- if (b3Fabs(m_gpuData->m_cpuConstraintRows[rowIndex].m_appliedImpulse) >= breakingThreshold)
- {
- m_gpuData->m_cpuConstraints[orgConstraintIndex].m_flags = 0; //&= ~B3_CONSTRAINT_FLAG_ENABLED;
- }
- }
- }
- }
-
- gpuConstraints->copyFromHost(m_gpuData->m_cpuConstraints);
- }
- }
-
- {
- if (useGpuWriteBackVelocities)
- {
- B3_PROFILE("GPU write back velocities and transforms");
-
- b3LauncherCL launcher(m_gpuData->m_queue, m_gpuData->m_writeBackVelocitiesKernel, "m_writeBackVelocitiesKernel");
- launcher.setBuffer(gpuBodies->getBufferCL());
- launcher.setBuffer(m_gpuData->m_gpuSolverBodies->getBufferCL());
- launcher.setConst(numBodies);
- launcher.launch1D(numBodies);
- clFinish(m_gpuData->m_queue);
- // m_gpuData->m_gpuSolverBodies->copyToHost(m_tmpSolverBodyPool);
- // m_gpuData->m_gpuBodies->copyToHostPointer(bodies,numBodies);
- //m_gpuData->m_gpuBodies->copyToHost(testBodies);
- }
- else
- {
- B3_PROFILE("CPU write back velocities and transforms");
-
- m_gpuData->m_gpuSolverBodies->copyToHost(m_tmpSolverBodyPool);
- gpuBodies->copyToHost(m_gpuData->m_cpuBodies);
- for (int i = 0; i < m_tmpSolverBodyPool.size(); i++)
- {
- int bodyIndex = m_tmpSolverBodyPool[i].m_originalBodyIndex;
- //printf("bodyIndex=%d\n",bodyIndex);
- b3Assert(i == bodyIndex);
-
- b3RigidBodyData* body = &m_gpuData->m_cpuBodies[bodyIndex];
- if (body->m_invMass)
- {
- if (infoGlobal.m_splitImpulse)
- m_tmpSolverBodyPool[i].writebackVelocityAndTransform(infoGlobal.m_timeStep, infoGlobal.m_splitImpulseTurnErp);
- else
- m_tmpSolverBodyPool[i].writebackVelocity();
-
- if (m_usePgs)
- {
- body->m_linVel = m_tmpSolverBodyPool[i].m_linearVelocity;
- body->m_angVel = m_tmpSolverBodyPool[i].m_angularVelocity;
- }
- else
- {
- b3Assert(0);
- }
- /*
- if (infoGlobal.m_splitImpulse)
- {
- body->m_pos = m_tmpSolverBodyPool[i].m_worldTransform.getOrigin();
- b3Quaternion orn;
- orn = m_tmpSolverBodyPool[i].m_worldTransform.getRotation();
- body->m_quat = orn;
- }
- */
- }
- } //for
-
- gpuBodies->copyFromHost(m_gpuData->m_cpuBodies);
- }
- }
-
- clFinish(m_gpuData->m_queue);
-
- m_tmpSolverContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactFrictionConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactRollingFrictionConstraintPool.resizeNoInitialize(0);
-
- m_tmpSolverBodyPool.resizeNoInitialize(0);
- return 0.f;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.h
deleted file mode 100644
index 00bc544f02..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.h
+++ /dev/null
@@ -1,76 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef B3_GPU_PGS_CONSTRAINT_SOLVER_H
-#define B3_GPU_PGS_CONSTRAINT_SOLVER_H
-
-struct b3Contact4;
-struct b3ContactPoint;
-
-class b3Dispatcher;
-
-#include "Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h"
-#include "Bullet3Dynamics/ConstraintSolver/b3ContactSolverInfo.h"
-#include "b3GpuSolverBody.h"
-#include "b3GpuSolverConstraint.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-struct b3RigidBodyData;
-struct b3InertiaData;
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "b3GpuGenericConstraint.h"
-
-class b3GpuPgsConstraintSolver
-{
-protected:
- int m_staticIdx;
- struct b3GpuPgsJacobiSolverInternalData* m_gpuData;
-
-protected:
- b3AlignedObjectArray<b3GpuSolverBody> m_tmpSolverBodyPool;
- b3GpuConstraintArray m_tmpSolverContactConstraintPool;
- b3GpuConstraintArray m_tmpSolverNonContactConstraintPool;
- b3GpuConstraintArray m_tmpSolverContactFrictionConstraintPool;
- b3GpuConstraintArray m_tmpSolverContactRollingFrictionConstraintPool;
-
- b3AlignedObjectArray<unsigned int> m_tmpConstraintSizesPool;
-
- bool m_usePgs;
- void averageVelocities();
-
- int m_maxOverrideNumSolverIterations;
-
- int m_numSplitImpulseRecoveries;
-
- // int getOrInitSolverBody(int bodyIndex, b3RigidBodyData* bodies,b3InertiaData* inertias);
- void initSolverBody(int bodyIndex, b3GpuSolverBody* solverBody, b3RigidBodyData* rb);
-
-public:
- b3GpuPgsConstraintSolver(cl_context ctx, cl_device_id device, cl_command_queue queue, bool usePgs);
- virtual ~b3GpuPgsConstraintSolver();
-
- virtual b3Scalar solveGroupCacheFriendlyIterations(b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints1, int numConstraints, const b3ContactSolverInfo& infoGlobal);
- virtual b3Scalar solveGroupCacheFriendlySetup(b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias, int numBodies, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
- b3Scalar solveGroupCacheFriendlyFinish(b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias, int numBodies, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
-
- b3Scalar solveGroup(b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias, int numBodies, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints, int numConstraints, const b3ContactSolverInfo& infoGlobal);
- void solveJoints(int numBodies, b3OpenCLArray<b3RigidBodyData>* gpuBodies, b3OpenCLArray<b3InertiaData>* gpuInertias,
- int numConstraints, b3OpenCLArray<b3GpuGenericConstraint>* gpuConstraints);
-
- int sortConstraintByBatch3(struct b3BatchConstraint* cs, int numConstraints, int simdWidth, int staticIdx, int numBodies);
- void recomputeBatches();
-};
-
-#endif //B3_GPU_PGS_CONSTRAINT_SOLVER_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.cpp
deleted file mode 100644
index e3d235a4fd..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.cpp
+++ /dev/null
@@ -1,1529 +0,0 @@
-
-bool gUseLargeBatches = false;
-bool gCpuBatchContacts = false;
-bool gCpuSolveConstraint = false;
-bool gCpuRadixSort = false;
-bool gCpuSetSortData = false;
-bool gCpuSortContactsDeterminism = false;
-bool gUseCpuCopyConstraints = false;
-bool gUseScanHost = false;
-bool gReorderContactsOnCpu = false;
-
-bool optionalSortContactsDeterminism = true;
-
-#include "b3GpuPgsContactSolver.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
-#include <string.h>
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-#include "b3Solver.h"
-
-#define B3_SOLVER_SETUP_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solverSetup.cl"
-#define B3_SOLVER_SETUP2_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solverSetup2.cl"
-#define B3_SOLVER_CONTACT_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solveContact.cl"
-#define B3_SOLVER_FRICTION_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solveFriction.cl"
-#define B3_BATCHING_PATH "src/Bullet3OpenCL/RigidBody/kernels/batchingKernels.cl"
-#define B3_BATCHING_NEW_PATH "src/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.cl"
-
-#include "kernels/solverSetup.h"
-#include "kernels/solverSetup2.h"
-#include "kernels/solveContact.h"
-#include "kernels/solveFriction.h"
-#include "kernels/batchingKernels.h"
-#include "kernels/batchingKernelsNew.h"
-
-struct b3GpuBatchingPgsSolverInternalData
-{
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
- int m_pairCapacity;
- int m_nIterations;
-
- b3OpenCLArray<b3GpuConstraint4>* m_contactCGPU;
- b3OpenCLArray<unsigned int>* m_numConstraints;
- b3OpenCLArray<unsigned int>* m_offsets;
-
- b3Solver* m_solverGPU;
-
- cl_kernel m_batchingKernel;
- cl_kernel m_batchingKernelNew;
- cl_kernel m_solveContactKernel;
- cl_kernel m_solveSingleContactKernel;
- cl_kernel m_solveSingleFrictionKernel;
- cl_kernel m_solveFrictionKernel;
- cl_kernel m_contactToConstraintKernel;
- cl_kernel m_setSortDataKernel;
- cl_kernel m_reorderContactKernel;
- cl_kernel m_copyConstraintKernel;
-
- cl_kernel m_setDeterminismSortDataBodyAKernel;
- cl_kernel m_setDeterminismSortDataBodyBKernel;
- cl_kernel m_setDeterminismSortDataChildShapeAKernel;
- cl_kernel m_setDeterminismSortDataChildShapeBKernel;
-
- class b3RadixSort32CL* m_sort32;
- class b3BoundSearchCL* m_search;
- class b3PrefixScanCL* m_scan;
-
- b3OpenCLArray<b3SortData>* m_sortDataBuffer;
- b3OpenCLArray<b3Contact4>* m_contactBuffer;
-
- b3OpenCLArray<b3RigidBodyData>* m_bodyBufferGPU;
- b3OpenCLArray<b3InertiaData>* m_inertiaBufferGPU;
- b3OpenCLArray<b3Contact4>* m_pBufContactOutGPU;
-
- b3OpenCLArray<b3Contact4>* m_pBufContactOutGPUCopy;
- b3OpenCLArray<b3SortData>* m_contactKeyValues;
-
- b3AlignedObjectArray<unsigned int> m_idxBuffer;
- b3AlignedObjectArray<b3SortData> m_sortData;
- b3AlignedObjectArray<b3Contact4> m_old;
-
- b3AlignedObjectArray<int> m_batchSizes;
- b3OpenCLArray<int>* m_batchSizesGpu;
-};
-
-b3GpuPgsContactSolver::b3GpuPgsContactSolver(cl_context ctx, cl_device_id device, cl_command_queue q, int pairCapacity)
-{
- m_debugOutput = 0;
- m_data = new b3GpuBatchingPgsSolverInternalData;
- m_data->m_context = ctx;
- m_data->m_device = device;
- m_data->m_queue = q;
- m_data->m_pairCapacity = pairCapacity;
- m_data->m_nIterations = 4;
- m_data->m_batchSizesGpu = new b3OpenCLArray<int>(ctx, q);
- m_data->m_bodyBufferGPU = new b3OpenCLArray<b3RigidBodyData>(ctx, q);
- m_data->m_inertiaBufferGPU = new b3OpenCLArray<b3InertiaData>(ctx, q);
- m_data->m_pBufContactOutGPU = new b3OpenCLArray<b3Contact4>(ctx, q);
-
- m_data->m_pBufContactOutGPUCopy = new b3OpenCLArray<b3Contact4>(ctx, q);
- m_data->m_contactKeyValues = new b3OpenCLArray<b3SortData>(ctx, q);
-
- m_data->m_solverGPU = new b3Solver(ctx, device, q, 512 * 1024);
-
- m_data->m_sort32 = new b3RadixSort32CL(ctx, device, m_data->m_queue);
- m_data->m_scan = new b3PrefixScanCL(ctx, device, m_data->m_queue, B3_SOLVER_N_CELLS);
- m_data->m_search = new b3BoundSearchCL(ctx, device, m_data->m_queue, B3_SOLVER_N_CELLS);
-
- const int sortSize = B3NEXTMULTIPLEOF(pairCapacity, 512);
-
- m_data->m_sortDataBuffer = new b3OpenCLArray<b3SortData>(ctx, m_data->m_queue, sortSize);
- m_data->m_contactBuffer = new b3OpenCLArray<b3Contact4>(ctx, m_data->m_queue);
-
- m_data->m_numConstraints = new b3OpenCLArray<unsigned int>(ctx, m_data->m_queue, B3_SOLVER_N_CELLS);
- m_data->m_numConstraints->resize(B3_SOLVER_N_CELLS);
-
- m_data->m_contactCGPU = new b3OpenCLArray<b3GpuConstraint4>(ctx, q, pairCapacity);
-
- m_data->m_offsets = new b3OpenCLArray<unsigned int>(ctx, m_data->m_queue, B3_SOLVER_N_CELLS);
- m_data->m_offsets->resize(B3_SOLVER_N_CELLS);
- const char* additionalMacros = "";
- //const char* srcFileNameForCaching="";
-
- cl_int pErrNum;
- const char* batchKernelSource = batchingKernelsCL;
- const char* batchKernelNewSource = batchingKernelsNewCL;
- const char* solverSetupSource = solverSetupCL;
- const char* solverSetup2Source = solverSetup2CL;
- const char* solveContactSource = solveContactCL;
- const char* solveFrictionSource = solveFrictionCL;
-
- {
- cl_program solveContactProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solveContactSource, &pErrNum, additionalMacros, B3_SOLVER_CONTACT_KERNEL_PATH);
- b3Assert(solveContactProg);
-
- cl_program solveFrictionProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solveFrictionSource, &pErrNum, additionalMacros, B3_SOLVER_FRICTION_KERNEL_PATH);
- b3Assert(solveFrictionProg);
-
- cl_program solverSetup2Prog = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solverSetup2Source, &pErrNum, additionalMacros, B3_SOLVER_SETUP2_KERNEL_PATH);
-
- b3Assert(solverSetup2Prog);
-
- cl_program solverSetupProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solverSetupSource, &pErrNum, additionalMacros, B3_SOLVER_SETUP_KERNEL_PATH);
- b3Assert(solverSetupProg);
-
- m_data->m_solveFrictionKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solveFrictionSource, "BatchSolveKernelFriction", &pErrNum, solveFrictionProg, additionalMacros);
- b3Assert(m_data->m_solveFrictionKernel);
-
- m_data->m_solveContactKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solveContactSource, "BatchSolveKernelContact", &pErrNum, solveContactProg, additionalMacros);
- b3Assert(m_data->m_solveContactKernel);
-
- m_data->m_solveSingleContactKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solveContactSource, "solveSingleContactKernel", &pErrNum, solveContactProg, additionalMacros);
- b3Assert(m_data->m_solveSingleContactKernel);
-
- m_data->m_solveSingleFrictionKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solveFrictionSource, "solveSingleFrictionKernel", &pErrNum, solveFrictionProg, additionalMacros);
- b3Assert(m_data->m_solveSingleFrictionKernel);
-
- m_data->m_contactToConstraintKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetupSource, "ContactToConstraintKernel", &pErrNum, solverSetupProg, additionalMacros);
- b3Assert(m_data->m_contactToConstraintKernel);
-
- m_data->m_setSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "SetSortDataKernel", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_setSortDataKernel);
-
- m_data->m_setDeterminismSortDataBodyAKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "SetDeterminismSortDataBodyA", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_setDeterminismSortDataBodyAKernel);
-
- m_data->m_setDeterminismSortDataBodyBKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "SetDeterminismSortDataBodyB", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_setDeterminismSortDataBodyBKernel);
-
- m_data->m_setDeterminismSortDataChildShapeAKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "SetDeterminismSortDataChildShapeA", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_setDeterminismSortDataChildShapeAKernel);
-
- m_data->m_setDeterminismSortDataChildShapeBKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "SetDeterminismSortDataChildShapeB", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_setDeterminismSortDataChildShapeBKernel);
-
- m_data->m_reorderContactKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "ReorderContactKernel", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_reorderContactKernel);
-
- m_data->m_copyConstraintKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "CopyConstraintKernel", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_data->m_copyConstraintKernel);
- }
-
- {
- cl_program batchingProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, batchKernelSource, &pErrNum, additionalMacros, B3_BATCHING_PATH);
- b3Assert(batchingProg);
-
- m_data->m_batchingKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, batchKernelSource, "CreateBatches", &pErrNum, batchingProg, additionalMacros);
- b3Assert(m_data->m_batchingKernel);
- }
-
- {
- cl_program batchingNewProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, batchKernelNewSource, &pErrNum, additionalMacros, B3_BATCHING_NEW_PATH);
- b3Assert(batchingNewProg);
-
- m_data->m_batchingKernelNew = b3OpenCLUtils::compileCLKernelFromString(ctx, device, batchKernelNewSource, "CreateBatchesNew", &pErrNum, batchingNewProg, additionalMacros);
- b3Assert(m_data->m_batchingKernelNew);
- }
-}
-
-b3GpuPgsContactSolver::~b3GpuPgsContactSolver()
-{
- delete m_data->m_batchSizesGpu;
- delete m_data->m_bodyBufferGPU;
- delete m_data->m_inertiaBufferGPU;
- delete m_data->m_pBufContactOutGPU;
- delete m_data->m_pBufContactOutGPUCopy;
- delete m_data->m_contactKeyValues;
-
- delete m_data->m_contactCGPU;
- delete m_data->m_numConstraints;
- delete m_data->m_offsets;
- delete m_data->m_sortDataBuffer;
- delete m_data->m_contactBuffer;
-
- delete m_data->m_sort32;
- delete m_data->m_scan;
- delete m_data->m_search;
- delete m_data->m_solverGPU;
-
- clReleaseKernel(m_data->m_batchingKernel);
- clReleaseKernel(m_data->m_batchingKernelNew);
- clReleaseKernel(m_data->m_solveSingleContactKernel);
- clReleaseKernel(m_data->m_solveSingleFrictionKernel);
- clReleaseKernel(m_data->m_solveContactKernel);
- clReleaseKernel(m_data->m_solveFrictionKernel);
-
- clReleaseKernel(m_data->m_contactToConstraintKernel);
- clReleaseKernel(m_data->m_setSortDataKernel);
- clReleaseKernel(m_data->m_reorderContactKernel);
- clReleaseKernel(m_data->m_copyConstraintKernel);
-
- clReleaseKernel(m_data->m_setDeterminismSortDataBodyAKernel);
- clReleaseKernel(m_data->m_setDeterminismSortDataBodyBKernel);
- clReleaseKernel(m_data->m_setDeterminismSortDataChildShapeAKernel);
- clReleaseKernel(m_data->m_setDeterminismSortDataChildShapeBKernel);
-
- delete m_data;
-}
-
-struct b3ConstraintCfg
-{
- b3ConstraintCfg(float dt = 0.f) : m_positionDrift(0.005f), m_positionConstraintCoeff(0.2f), m_dt(dt), m_staticIdx(0) {}
-
- float m_positionDrift;
- float m_positionConstraintCoeff;
- float m_dt;
- bool m_enableParallelSolve;
- float m_batchCellSize;
- int m_staticIdx;
-};
-
-void b3GpuPgsContactSolver::solveContactConstraintBatchSizes(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, int numIterations, const b3AlignedObjectArray<int>* batchSizes) //const b3OpenCLArray<int>* gpuBatchSizes)
-{
- B3_PROFILE("solveContactConstraintBatchSizes");
- int numBatches = batchSizes->size() / B3_MAX_NUM_BATCHES;
- for (int iter = 0; iter < numIterations; iter++)
- {
- for (int cellId = 0; cellId < numBatches; cellId++)
- {
- int offset = 0;
- for (int ii = 0; ii < B3_MAX_NUM_BATCHES; ii++)
- {
- int numInBatch = batchSizes->at(cellId * B3_MAX_NUM_BATCHES + ii);
- if (!numInBatch)
- break;
-
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solveSingleContactKernel, "m_solveSingleContactKernel");
- launcher.setBuffer(bodyBuf->getBufferCL());
- launcher.setBuffer(shapeBuf->getBufferCL());
- launcher.setBuffer(constraint->getBufferCL());
- launcher.setConst(cellId);
- launcher.setConst(offset);
- launcher.setConst(numInBatch);
- launcher.launch1D(numInBatch);
- offset += numInBatch;
- }
- }
- }
- }
-
- for (int iter = 0; iter < numIterations; iter++)
- {
- for (int cellId = 0; cellId < numBatches; cellId++)
- {
- int offset = 0;
- for (int ii = 0; ii < B3_MAX_NUM_BATCHES; ii++)
- {
- int numInBatch = batchSizes->at(cellId * B3_MAX_NUM_BATCHES + ii);
- if (!numInBatch)
- break;
-
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solveSingleFrictionKernel, "m_solveSingleFrictionKernel");
- launcher.setBuffer(bodyBuf->getBufferCL());
- launcher.setBuffer(shapeBuf->getBufferCL());
- launcher.setBuffer(constraint->getBufferCL());
- launcher.setConst(cellId);
- launcher.setConst(offset);
- launcher.setConst(numInBatch);
- launcher.launch1D(numInBatch);
- offset += numInBatch;
- }
- }
- }
- }
-}
-
-void b3GpuPgsContactSolver::solveContactConstraint(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, int numIterations, const b3AlignedObjectArray<int>* batchSizes) //,const b3OpenCLArray<int>* gpuBatchSizes)
-{
- //sort the contacts
-
- b3Int4 cdata = b3MakeInt4(n, 0, 0, 0);
- {
- const int nn = B3_SOLVER_N_CELLS;
-
- cdata.x = 0;
- cdata.y = maxNumBatches; //250;
-
- int numWorkItems = 64 * nn / B3_SOLVER_N_BATCHES;
-#ifdef DEBUG_ME
- SolverDebugInfo* debugInfo = new SolverDebugInfo[numWorkItems];
- adl::b3OpenCLArray<SolverDebugInfo> gpuDebugInfo(data->m_device, numWorkItems);
-#endif
-
- {
- B3_PROFILE("m_batchSolveKernel iterations");
- for (int iter = 0; iter < numIterations; iter++)
- {
- for (int ib = 0; ib < B3_SOLVER_N_BATCHES; ib++)
- {
-#ifdef DEBUG_ME
- memset(debugInfo, 0, sizeof(SolverDebugInfo) * numWorkItems);
- gpuDebugInfo.write(debugInfo, numWorkItems);
-#endif
-
- cdata.z = ib;
-
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solveContactKernel, "m_solveContactKernel");
-#if 1
-
- b3BufferInfoCL bInfo[] = {
-
- b3BufferInfoCL(bodyBuf->getBufferCL()),
- b3BufferInfoCL(shapeBuf->getBufferCL()),
- b3BufferInfoCL(constraint->getBufferCL()),
- b3BufferInfoCL(m_data->m_solverGPU->m_numConstraints->getBufferCL()),
- b3BufferInfoCL(m_data->m_solverGPU->m_offsets->getBufferCL())
-#ifdef DEBUG_ME
- ,
- b3BufferInfoCL(&gpuDebugInfo)
-#endif
- };
-
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setBuffer(m_data->m_solverGPU->m_batchSizes.getBufferCL());
- //launcher.setConst( cdata.x );
- launcher.setConst(cdata.y);
- launcher.setConst(cdata.z);
- b3Int4 nSplit;
- nSplit.x = B3_SOLVER_N_SPLIT_X;
- nSplit.y = B3_SOLVER_N_SPLIT_Y;
- nSplit.z = B3_SOLVER_N_SPLIT_Z;
-
- launcher.setConst(nSplit);
- launcher.launch1D(numWorkItems, 64);
-
-#else
- const char* fileName = "m_batchSolveKernel.bin";
- FILE* f = fopen(fileName, "rb");
- if (f)
- {
- int sizeInBytes = 0;
- if (fseek(f, 0, SEEK_END) || (sizeInBytes = ftell(f)) == EOF || fseek(f, 0, SEEK_SET))
- {
- printf("error, cannot get file size\n");
- exit(0);
- }
-
- unsigned char* buf = (unsigned char*)malloc(sizeInBytes);
- fread(buf, sizeInBytes, 1, f);
- int serializedBytes = launcher.deserializeArgs(buf, sizeInBytes, m_context);
- int num = *(int*)&buf[serializedBytes];
-
- launcher.launch1D(num);
-
- //this clFinish is for testing on errors
- clFinish(m_queue);
- }
-
-#endif
-
-#ifdef DEBUG_ME
- clFinish(m_queue);
- gpuDebugInfo.read(debugInfo, numWorkItems);
- clFinish(m_queue);
- for (int i = 0; i < numWorkItems; i++)
- {
- if (debugInfo[i].m_valInt2 > 0)
- {
- printf("debugInfo[i].m_valInt2 = %d\n", i, debugInfo[i].m_valInt2);
- }
-
- if (debugInfo[i].m_valInt3 > 0)
- {
- printf("debugInfo[i].m_valInt3 = %d\n", i, debugInfo[i].m_valInt3);
- }
- }
-#endif //DEBUG_ME
- }
- }
-
- clFinish(m_data->m_queue);
- }
-
- cdata.x = 1;
- bool applyFriction = true;
- if (applyFriction)
- {
- B3_PROFILE("m_batchSolveKernel iterations2");
- for (int iter = 0; iter < numIterations; iter++)
- {
- for (int ib = 0; ib < B3_SOLVER_N_BATCHES; ib++)
- {
- cdata.z = ib;
-
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(bodyBuf->getBufferCL()),
- b3BufferInfoCL(shapeBuf->getBufferCL()),
- b3BufferInfoCL(constraint->getBufferCL()),
- b3BufferInfoCL(m_data->m_solverGPU->m_numConstraints->getBufferCL()),
- b3BufferInfoCL(m_data->m_solverGPU->m_offsets->getBufferCL())
-#ifdef DEBUG_ME
- ,
- b3BufferInfoCL(&gpuDebugInfo)
-#endif //DEBUG_ME
- };
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solveFrictionKernel, "m_solveFrictionKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setBuffer(m_data->m_solverGPU->m_batchSizes.getBufferCL());
- //launcher.setConst( cdata.x );
- launcher.setConst(cdata.y);
- launcher.setConst(cdata.z);
-
- b3Int4 nSplit;
- nSplit.x = B3_SOLVER_N_SPLIT_X;
- nSplit.y = B3_SOLVER_N_SPLIT_Y;
- nSplit.z = B3_SOLVER_N_SPLIT_Z;
-
- launcher.setConst(nSplit);
-
- launcher.launch1D(64 * nn / B3_SOLVER_N_BATCHES, 64);
- }
- }
- clFinish(m_data->m_queue);
- }
-#ifdef DEBUG_ME
- delete[] debugInfo;
-#endif //DEBUG_ME
- }
-}
-
-static bool sortfnc(const b3SortData& a, const b3SortData& b)
-{
- return (a.m_key < b.m_key);
-}
-
-static bool b3ContactCmp(const b3Contact4& p, const b3Contact4& q)
-{
- return ((p.m_bodyAPtrAndSignBit < q.m_bodyAPtrAndSignBit) ||
- ((p.m_bodyAPtrAndSignBit == q.m_bodyAPtrAndSignBit) && (p.m_bodyBPtrAndSignBit < q.m_bodyBPtrAndSignBit)) ||
- ((p.m_bodyAPtrAndSignBit == q.m_bodyAPtrAndSignBit) && (p.m_bodyBPtrAndSignBit == q.m_bodyBPtrAndSignBit) && p.m_childIndexA < q.m_childIndexA) ||
- ((p.m_bodyAPtrAndSignBit == q.m_bodyAPtrAndSignBit) && (p.m_bodyBPtrAndSignBit == q.m_bodyBPtrAndSignBit) && p.m_childIndexA < q.m_childIndexA) ||
- ((p.m_bodyAPtrAndSignBit == q.m_bodyAPtrAndSignBit) && (p.m_bodyBPtrAndSignBit == q.m_bodyBPtrAndSignBit) && p.m_childIndexA == q.m_childIndexA && p.m_childIndexB < q.m_childIndexB));
-}
-
-#define USE_SPATIAL_BATCHING 1
-#define USE_4x4_GRID 1
-
-#ifndef USE_SPATIAL_BATCHING
-static const int gridTable4x4[] =
- {
- 0, 1, 17, 16,
- 1, 2, 18, 19,
- 17, 18, 32, 3,
- 16, 19, 3, 34};
-static const int gridTable8x8[] =
- {
- 0, 2, 3, 16, 17, 18, 19, 1,
- 66, 64, 80, 67, 82, 81, 65, 83,
- 131, 144, 128, 130, 147, 129, 145, 146,
- 208, 195, 194, 192, 193, 211, 210, 209,
- 21, 22, 23, 5, 4, 6, 7, 20,
- 86, 85, 69, 87, 70, 68, 84, 71,
- 151, 133, 149, 150, 135, 148, 132, 134,
- 197, 27, 214, 213, 212, 199, 198, 196
-
-};
-
-#endif
-
-void SetSortDataCPU(b3Contact4* gContact, b3RigidBodyData* gBodies, b3SortData* gSortDataOut, int nContacts, float scale, const b3Int4& nSplit, int staticIdx)
-{
- for (int gIdx = 0; gIdx < nContacts; gIdx++)
- {
- if (gIdx < nContacts)
- {
- int aPtrAndSignBit = gContact[gIdx].m_bodyAPtrAndSignBit;
- int bPtrAndSignBit = gContact[gIdx].m_bodyBPtrAndSignBit;
-
- int aIdx = abs(aPtrAndSignBit);
- int bIdx = abs(bPtrAndSignBit);
-
- bool aStatic = (aPtrAndSignBit < 0) || (aPtrAndSignBit == staticIdx);
-
-#if USE_SPATIAL_BATCHING
- int idx = (aStatic) ? bIdx : aIdx;
- b3Vector3 p = gBodies[idx].m_pos;
- int xIdx = (int)((p.x - ((p.x < 0.f) ? 1.f : 0.f)) * scale) & (nSplit.x - 1);
- int yIdx = (int)((p.y - ((p.y < 0.f) ? 1.f : 0.f)) * scale) & (nSplit.y - 1);
- int zIdx = (int)((p.z - ((p.z < 0.f) ? 1.f : 0.f)) * scale) & (nSplit.z - 1);
-
- int newIndex = (xIdx + yIdx * nSplit.x + zIdx * nSplit.x * nSplit.y);
-
-#else //USE_SPATIAL_BATCHING
- bool bStatic = (bPtrAndSignBit < 0) || (bPtrAndSignBit == staticIdx);
-
-#if USE_4x4_GRID
- int aa = aIdx & 3;
- int bb = bIdx & 3;
- if (aStatic)
- aa = bb;
- if (bStatic)
- bb = aa;
-
- int gridIndex = aa + bb * 4;
- int newIndex = gridTable4x4[gridIndex];
-#else //USE_4x4_GRID
- int aa = aIdx & 7;
- int bb = bIdx & 7;
- if (aStatic)
- aa = bb;
- if (bStatic)
- bb = aa;
-
- int gridIndex = aa + bb * 8;
- int newIndex = gridTable8x8[gridIndex];
-#endif //USE_4x4_GRID
-#endif //USE_SPATIAL_BATCHING
-
- gSortDataOut[gIdx].x = newIndex;
- gSortDataOut[gIdx].y = gIdx;
- }
- else
- {
- gSortDataOut[gIdx].x = 0xffffffff;
- }
- }
-}
-
-void b3GpuPgsContactSolver::solveContacts(int numBodies, cl_mem bodyBuf, cl_mem inertiaBuf, int numContacts, cl_mem contactBuf, const b3Config& config, int static0Index)
-{
- B3_PROFILE("solveContacts");
- m_data->m_bodyBufferGPU->setFromOpenCLBuffer(bodyBuf, numBodies);
- m_data->m_inertiaBufferGPU->setFromOpenCLBuffer(inertiaBuf, numBodies);
- m_data->m_pBufContactOutGPU->setFromOpenCLBuffer(contactBuf, numContacts);
-
- if (optionalSortContactsDeterminism)
- {
- if (!gCpuSortContactsDeterminism)
- {
- B3_PROFILE("GPU Sort contact constraints (determinism)");
-
- m_data->m_pBufContactOutGPUCopy->resize(numContacts);
- m_data->m_contactKeyValues->resize(numContacts);
-
- m_data->m_pBufContactOutGPU->copyToCL(m_data->m_pBufContactOutGPUCopy->getBufferCL(), numContacts, 0, 0);
-
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_setDeterminismSortDataChildShapeBKernel, "m_setDeterminismSortDataChildShapeBKernel");
- launcher.setBuffer(m_data->m_pBufContactOutGPUCopy->getBufferCL());
- launcher.setBuffer(m_data->m_contactKeyValues->getBufferCL());
- launcher.setConst(numContacts);
- launcher.launch1D(numContacts, 64);
- }
- m_data->m_solverGPU->m_sort32->execute(*m_data->m_contactKeyValues);
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_setDeterminismSortDataChildShapeAKernel, "m_setDeterminismSortDataChildShapeAKernel");
- launcher.setBuffer(m_data->m_pBufContactOutGPUCopy->getBufferCL());
- launcher.setBuffer(m_data->m_contactKeyValues->getBufferCL());
- launcher.setConst(numContacts);
- launcher.launch1D(numContacts, 64);
- }
- m_data->m_solverGPU->m_sort32->execute(*m_data->m_contactKeyValues);
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_setDeterminismSortDataBodyBKernel, "m_setDeterminismSortDataBodyBKernel");
- launcher.setBuffer(m_data->m_pBufContactOutGPUCopy->getBufferCL());
- launcher.setBuffer(m_data->m_contactKeyValues->getBufferCL());
- launcher.setConst(numContacts);
- launcher.launch1D(numContacts, 64);
- }
-
- m_data->m_solverGPU->m_sort32->execute(*m_data->m_contactKeyValues);
-
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_setDeterminismSortDataBodyAKernel, "m_setDeterminismSortDataBodyAKernel");
- launcher.setBuffer(m_data->m_pBufContactOutGPUCopy->getBufferCL());
- launcher.setBuffer(m_data->m_contactKeyValues->getBufferCL());
- launcher.setConst(numContacts);
- launcher.launch1D(numContacts, 64);
- }
-
- m_data->m_solverGPU->m_sort32->execute(*m_data->m_contactKeyValues);
-
- {
- B3_PROFILE("gpu reorderContactKernel (determinism)");
-
- b3Int4 cdata;
- cdata.x = numContacts;
-
- //b3BufferInfoCL bInfo[] = { b3BufferInfoCL( m_data->m_pBufContactOutGPU->getBufferCL() ), b3BufferInfoCL( m_data->m_solverGPU->m_contactBuffer2->getBufferCL())
- // , b3BufferInfoCL( m_data->m_solverGPU->m_sortDataBuffer->getBufferCL()) };
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solverGPU->m_reorderContactKernel, "m_reorderContactKernel");
- launcher.setBuffer(m_data->m_pBufContactOutGPUCopy->getBufferCL());
- launcher.setBuffer(m_data->m_pBufContactOutGPU->getBufferCL());
- launcher.setBuffer(m_data->m_contactKeyValues->getBufferCL());
- launcher.setConst(cdata);
- launcher.launch1D(numContacts, 64);
- }
- }
- else
- {
- B3_PROFILE("CPU Sort contact constraints (determinism)");
- b3AlignedObjectArray<b3Contact4> cpuConstraints;
- m_data->m_pBufContactOutGPU->copyToHost(cpuConstraints);
- bool sort = true;
- if (sort)
- {
- cpuConstraints.quickSort(b3ContactCmp);
-
- for (int i = 0; i < cpuConstraints.size(); i++)
- {
- cpuConstraints[i].m_batchIdx = i;
- }
- }
- m_data->m_pBufContactOutGPU->copyFromHost(cpuConstraints);
- if (m_debugOutput == 100)
- {
- for (int i = 0; i < cpuConstraints.size(); i++)
- {
- printf("c[%d].m_bodyA = %d, m_bodyB = %d, batchId = %d\n", i, cpuConstraints[i].m_bodyAPtrAndSignBit, cpuConstraints[i].m_bodyBPtrAndSignBit, cpuConstraints[i].m_batchIdx);
- }
- }
-
- m_debugOutput++;
- }
- }
-
- int nContactOut = m_data->m_pBufContactOutGPU->size();
-
- bool useSolver = true;
-
- if (useSolver)
- {
- float dt = 1. / 60.;
- b3ConstraintCfg csCfg(dt);
- csCfg.m_enableParallelSolve = true;
- csCfg.m_batchCellSize = 6;
- csCfg.m_staticIdx = static0Index;
-
- b3OpenCLArray<b3RigidBodyData>* bodyBuf = m_data->m_bodyBufferGPU;
-
- void* additionalData = 0; //m_data->m_frictionCGPU;
- const b3OpenCLArray<b3InertiaData>* shapeBuf = m_data->m_inertiaBufferGPU;
- b3OpenCLArray<b3GpuConstraint4>* contactConstraintOut = m_data->m_contactCGPU;
- int nContacts = nContactOut;
-
- int maxNumBatches = 0;
-
- if (!gUseLargeBatches)
- {
- if (m_data->m_solverGPU->m_contactBuffer2)
- {
- m_data->m_solverGPU->m_contactBuffer2->resize(nContacts);
- }
-
- if (m_data->m_solverGPU->m_contactBuffer2 == 0)
- {
- m_data->m_solverGPU->m_contactBuffer2 = new b3OpenCLArray<b3Contact4>(m_data->m_context, m_data->m_queue, nContacts);
- m_data->m_solverGPU->m_contactBuffer2->resize(nContacts);
- }
-
- //clFinish(m_data->m_queue);
-
- {
- B3_PROFILE("batching");
- //@todo: just reserve it, without copy of original contact (unless we use warmstarting)
-
- //const b3OpenCLArray<b3RigidBodyData>* bodyNative = bodyBuf;
-
- {
- //b3OpenCLArray<b3RigidBodyData>* bodyNative = b3OpenCLArrayUtils::map<adl::TYPE_CL, true>( data->m_device, bodyBuf );
- //b3OpenCLArray<b3Contact4>* contactNative = b3OpenCLArrayUtils::map<adl::TYPE_CL, true>( data->m_device, contactsIn );
-
- const int sortAlignment = 512; // todo. get this out of sort
- if (csCfg.m_enableParallelSolve)
- {
- int sortSize = B3NEXTMULTIPLEOF(nContacts, sortAlignment);
-
- b3OpenCLArray<unsigned int>* countsNative = m_data->m_solverGPU->m_numConstraints;
- b3OpenCLArray<unsigned int>* offsetsNative = m_data->m_solverGPU->m_offsets;
-
- if (!gCpuSetSortData)
- { // 2. set cell idx
- B3_PROFILE("GPU set cell idx");
- struct CB
- {
- int m_nContacts;
- int m_staticIdx;
- float m_scale;
- b3Int4 m_nSplit;
- };
-
- b3Assert(sortSize % 64 == 0);
- CB cdata;
- cdata.m_nContacts = nContacts;
- cdata.m_staticIdx = csCfg.m_staticIdx;
- cdata.m_scale = 1.f / csCfg.m_batchCellSize;
- cdata.m_nSplit.x = B3_SOLVER_N_SPLIT_X;
- cdata.m_nSplit.y = B3_SOLVER_N_SPLIT_Y;
- cdata.m_nSplit.z = B3_SOLVER_N_SPLIT_Z;
-
- m_data->m_solverGPU->m_sortDataBuffer->resize(nContacts);
-
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(m_data->m_pBufContactOutGPU->getBufferCL()), b3BufferInfoCL(bodyBuf->getBufferCL()), b3BufferInfoCL(m_data->m_solverGPU->m_sortDataBuffer->getBufferCL())};
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solverGPU->m_setSortDataKernel, "m_setSortDataKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata.m_nContacts);
- launcher.setConst(cdata.m_scale);
- launcher.setConst(cdata.m_nSplit);
- launcher.setConst(cdata.m_staticIdx);
-
- launcher.launch1D(sortSize, 64);
- }
- else
- {
- m_data->m_solverGPU->m_sortDataBuffer->resize(nContacts);
- b3AlignedObjectArray<b3SortData> sortDataCPU;
- m_data->m_solverGPU->m_sortDataBuffer->copyToHost(sortDataCPU);
-
- b3AlignedObjectArray<b3Contact4> contactCPU;
- m_data->m_pBufContactOutGPU->copyToHost(contactCPU);
- b3AlignedObjectArray<b3RigidBodyData> bodiesCPU;
- bodyBuf->copyToHost(bodiesCPU);
- float scale = 1.f / csCfg.m_batchCellSize;
- b3Int4 nSplit;
- nSplit.x = B3_SOLVER_N_SPLIT_X;
- nSplit.y = B3_SOLVER_N_SPLIT_Y;
- nSplit.z = B3_SOLVER_N_SPLIT_Z;
-
- SetSortDataCPU(&contactCPU[0], &bodiesCPU[0], &sortDataCPU[0], nContacts, scale, nSplit, csCfg.m_staticIdx);
-
- m_data->m_solverGPU->m_sortDataBuffer->copyFromHost(sortDataCPU);
- }
-
- if (!gCpuRadixSort)
- { // 3. sort by cell idx
- B3_PROFILE("gpuRadixSort");
- //int n = B3_SOLVER_N_SPLIT*B3_SOLVER_N_SPLIT;
- //int sortBit = 32;
- //if( n <= 0xffff ) sortBit = 16;
- //if( n <= 0xff ) sortBit = 8;
- //adl::RadixSort<adl::TYPE_CL>::execute( data->m_sort, *data->m_sortDataBuffer, sortSize );
- //adl::RadixSort32<adl::TYPE_CL>::execute( data->m_sort32, *data->m_sortDataBuffer, sortSize );
- b3OpenCLArray<b3SortData>& keyValuesInOut = *(m_data->m_solverGPU->m_sortDataBuffer);
- this->m_data->m_solverGPU->m_sort32->execute(keyValuesInOut);
- }
- else
- {
- b3OpenCLArray<b3SortData>& keyValuesInOut = *(m_data->m_solverGPU->m_sortDataBuffer);
- b3AlignedObjectArray<b3SortData> hostValues;
- keyValuesInOut.copyToHost(hostValues);
- hostValues.quickSort(sortfnc);
- keyValuesInOut.copyFromHost(hostValues);
- }
-
- if (gUseScanHost)
- {
- // 4. find entries
- B3_PROFILE("cpuBoundSearch");
- b3AlignedObjectArray<unsigned int> countsHost;
- countsNative->copyToHost(countsHost);
-
- b3AlignedObjectArray<b3SortData> sortDataHost;
- m_data->m_solverGPU->m_sortDataBuffer->copyToHost(sortDataHost);
-
- //m_data->m_solverGPU->m_search->executeHost(*m_data->m_solverGPU->m_sortDataBuffer,nContacts,*countsNative,B3_SOLVER_N_CELLS,b3BoundSearchCL::COUNT);
- m_data->m_solverGPU->m_search->executeHost(sortDataHost, nContacts, countsHost, B3_SOLVER_N_CELLS, b3BoundSearchCL::COUNT);
-
- countsNative->copyFromHost(countsHost);
-
- //adl::BoundSearch<adl::TYPE_CL>::execute( data->m_search, *data->m_sortDataBuffer, nContacts, *countsNative,
- // B3_SOLVER_N_SPLIT*B3_SOLVER_N_SPLIT, adl::BoundSearchBase::COUNT );
-
- //unsigned int sum;
- //m_data->m_solverGPU->m_scan->execute(*countsNative,*offsetsNative, B3_SOLVER_N_CELLS);//,&sum );
- b3AlignedObjectArray<unsigned int> offsetsHost;
- offsetsHost.resize(offsetsNative->size());
-
- m_data->m_solverGPU->m_scan->executeHost(countsHost, offsetsHost, B3_SOLVER_N_CELLS); //,&sum );
- offsetsNative->copyFromHost(offsetsHost);
-
- //printf("sum = %d\n",sum);
- }
- else
- {
- // 4. find entries
- B3_PROFILE("gpuBoundSearch");
- m_data->m_solverGPU->m_search->execute(*m_data->m_solverGPU->m_sortDataBuffer, nContacts, *countsNative, B3_SOLVER_N_CELLS, b3BoundSearchCL::COUNT);
- m_data->m_solverGPU->m_scan->execute(*countsNative, *offsetsNative, B3_SOLVER_N_CELLS); //,&sum );
- }
-
- if (nContacts)
- { // 5. sort constraints by cellIdx
- if (gReorderContactsOnCpu)
- {
- B3_PROFILE("cpu m_reorderContactKernel");
- b3AlignedObjectArray<b3SortData> sortDataHost;
- m_data->m_solverGPU->m_sortDataBuffer->copyToHost(sortDataHost);
- b3AlignedObjectArray<b3Contact4> inContacts;
- b3AlignedObjectArray<b3Contact4> outContacts;
- m_data->m_pBufContactOutGPU->copyToHost(inContacts);
- outContacts.resize(inContacts.size());
- for (int i = 0; i < nContacts; i++)
- {
- int srcIdx = sortDataHost[i].y;
- outContacts[i] = inContacts[srcIdx];
- }
- m_data->m_solverGPU->m_contactBuffer2->copyFromHost(outContacts);
-
- /* "void ReorderContactKernel(__global struct b3Contact4Data* in, __global struct b3Contact4Data* out, __global int2* sortData, int4 cb )\n"
- "{\n"
- " int nContacts = cb.x;\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int srcIdx = sortData[gIdx].y;\n"
- " out[gIdx] = in[srcIdx];\n"
- " }\n"
- "}\n"
- */
- }
- else
- {
- B3_PROFILE("gpu m_reorderContactKernel");
-
- b3Int4 cdata;
- cdata.x = nContacts;
-
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_data->m_pBufContactOutGPU->getBufferCL()),
- b3BufferInfoCL(m_data->m_solverGPU->m_contactBuffer2->getBufferCL()), b3BufferInfoCL(m_data->m_solverGPU->m_sortDataBuffer->getBufferCL())};
-
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solverGPU->m_reorderContactKernel, "m_reorderContactKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
- launcher.launch1D(nContacts, 64);
- }
- }
- }
- }
-
- //clFinish(m_data->m_queue);
-
- // {
- // b3AlignedObjectArray<unsigned int> histogram;
- // m_data->m_solverGPU->m_numConstraints->copyToHost(histogram);
- // printf(",,,\n");
- // }
-
- if (nContacts)
- {
- if (gUseCpuCopyConstraints)
- {
- for (int i = 0; i < nContacts; i++)
- {
- m_data->m_pBufContactOutGPU->copyFromOpenCLArray(*m_data->m_solverGPU->m_contactBuffer2);
- // m_data->m_solverGPU->m_contactBuffer2->getBufferCL();
- // m_data->m_pBufContactOutGPU->getBufferCL()
- }
- }
- else
- {
- B3_PROFILE("gpu m_copyConstraintKernel");
- b3Int4 cdata;
- cdata.x = nContacts;
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(m_data->m_solverGPU->m_contactBuffer2->getBufferCL()),
- b3BufferInfoCL(m_data->m_pBufContactOutGPU->getBufferCL())};
-
- b3LauncherCL launcher(m_data->m_queue, m_data->m_solverGPU->m_copyConstraintKernel, "m_copyConstraintKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- launcher.setConst(cdata);
- launcher.launch1D(nContacts, 64);
- //we use the clFinish for proper benchmark/profile
- clFinish(m_data->m_queue);
- }
- }
-
- // bool compareGPU = false;
- if (nContacts)
- {
- if (!gCpuBatchContacts)
- {
- B3_PROFILE("gpu batchContacts");
- maxNumBatches = 250; //250;
- m_data->m_solverGPU->batchContacts(m_data->m_pBufContactOutGPU, nContacts, m_data->m_solverGPU->m_numConstraints, m_data->m_solverGPU->m_offsets, csCfg.m_staticIdx);
- clFinish(m_data->m_queue);
- }
- else
- {
- B3_PROFILE("cpu batchContacts");
- static b3AlignedObjectArray<b3Contact4> cpuContacts;
- b3OpenCLArray<b3Contact4>* contactsIn = m_data->m_solverGPU->m_contactBuffer2;
- {
- B3_PROFILE("copyToHost");
- contactsIn->copyToHost(cpuContacts);
- }
- b3OpenCLArray<unsigned int>* countsNative = m_data->m_solverGPU->m_numConstraints;
- b3OpenCLArray<unsigned int>* offsetsNative = m_data->m_solverGPU->m_offsets;
-
- b3AlignedObjectArray<unsigned int> nNativeHost;
- b3AlignedObjectArray<unsigned int> offsetsNativeHost;
-
- {
- B3_PROFILE("countsNative/offsetsNative copyToHost");
- countsNative->copyToHost(nNativeHost);
- offsetsNative->copyToHost(offsetsNativeHost);
- }
-
- int numNonzeroGrid = 0;
-
- if (gUseLargeBatches)
- {
- m_data->m_batchSizes.resize(B3_MAX_NUM_BATCHES);
- int totalNumConstraints = cpuContacts.size();
- //int simdWidth =numBodies+1;//-1;//64;//-1;//32;
- int numBatches = sortConstraintByBatch3(&cpuContacts[0], totalNumConstraints, totalNumConstraints + 1, csCfg.m_staticIdx, numBodies, &m_data->m_batchSizes[0]); // on GPU
- maxNumBatches = b3Max(numBatches, maxNumBatches);
- static int globalMaxBatch = 0;
- if (maxNumBatches > globalMaxBatch)
- {
- globalMaxBatch = maxNumBatches;
- b3Printf("maxNumBatches = %d\n", maxNumBatches);
- }
- }
- else
- {
- m_data->m_batchSizes.resize(B3_SOLVER_N_CELLS * B3_MAX_NUM_BATCHES);
- B3_PROFILE("cpu batch grid");
- for (int i = 0; i < B3_SOLVER_N_CELLS; i++)
- {
- int n = (nNativeHost)[i];
- int offset = (offsetsNativeHost)[i];
- if (n)
- {
- numNonzeroGrid++;
- int simdWidth = numBodies + 1; //-1;//64;//-1;//32;
- int numBatches = sortConstraintByBatch3(&cpuContacts[0] + offset, n, simdWidth, csCfg.m_staticIdx, numBodies, &m_data->m_batchSizes[i * B3_MAX_NUM_BATCHES]); // on GPU
- maxNumBatches = b3Max(numBatches, maxNumBatches);
- static int globalMaxBatch = 0;
- if (maxNumBatches > globalMaxBatch)
- {
- globalMaxBatch = maxNumBatches;
- b3Printf("maxNumBatches = %d\n", maxNumBatches);
- }
- //we use the clFinish for proper benchmark/profile
- }
- }
- //clFinish(m_data->m_queue);
- }
- {
- B3_PROFILE("m_contactBuffer->copyFromHost");
- m_data->m_solverGPU->m_contactBuffer2->copyFromHost((b3AlignedObjectArray<b3Contact4>&)cpuContacts);
- }
- }
- }
- }
- }
-
- //printf("maxNumBatches = %d\n", maxNumBatches);
-
- if (gUseLargeBatches)
- {
- if (nContacts)
- {
- B3_PROFILE("cpu batchContacts");
- static b3AlignedObjectArray<b3Contact4> cpuContacts;
- // b3OpenCLArray<b3Contact4>* contactsIn = m_data->m_solverGPU->m_contactBuffer2;
- {
- B3_PROFILE("copyToHost");
- m_data->m_pBufContactOutGPU->copyToHost(cpuContacts);
- }
- // b3OpenCLArray<unsigned int>* countsNative = m_data->m_solverGPU->m_numConstraints;
- // b3OpenCLArray<unsigned int>* offsetsNative = m_data->m_solverGPU->m_offsets;
-
- // int numNonzeroGrid=0;
-
- {
- m_data->m_batchSizes.resize(B3_MAX_NUM_BATCHES);
- int totalNumConstraints = cpuContacts.size();
- // int simdWidth =numBodies+1;//-1;//64;//-1;//32;
- int numBatches = sortConstraintByBatch3(&cpuContacts[0], totalNumConstraints, totalNumConstraints + 1, csCfg.m_staticIdx, numBodies, &m_data->m_batchSizes[0]); // on GPU
- maxNumBatches = b3Max(numBatches, maxNumBatches);
- static int globalMaxBatch = 0;
- if (maxNumBatches > globalMaxBatch)
- {
- globalMaxBatch = maxNumBatches;
- b3Printf("maxNumBatches = %d\n", maxNumBatches);
- }
- }
- {
- B3_PROFILE("m_contactBuffer->copyFromHost");
- m_data->m_solverGPU->m_contactBuffer2->copyFromHost((b3AlignedObjectArray<b3Contact4>&)cpuContacts);
- }
- }
- }
-
- if (nContacts)
- {
- B3_PROFILE("gpu convertToConstraints");
- m_data->m_solverGPU->convertToConstraints(bodyBuf,
- shapeBuf, m_data->m_solverGPU->m_contactBuffer2,
- contactConstraintOut,
- additionalData, nContacts,
- (b3SolverBase::ConstraintCfg&)csCfg);
- clFinish(m_data->m_queue);
- }
-
- if (1)
- {
- int numIter = 4;
-
- m_data->m_solverGPU->m_nIterations = numIter; //10
- if (!gCpuSolveConstraint)
- {
- B3_PROFILE("GPU solveContactConstraint");
-
- /*m_data->m_solverGPU->solveContactConstraint(
- m_data->m_bodyBufferGPU,
- m_data->m_inertiaBufferGPU,
- m_data->m_contactCGPU,0,
- nContactOut ,
- maxNumBatches);
- */
-
- //m_data->m_batchSizesGpu->copyFromHost(m_data->m_batchSizes);
-
- if (gUseLargeBatches)
- {
- solveContactConstraintBatchSizes(m_data->m_bodyBufferGPU,
- m_data->m_inertiaBufferGPU,
- m_data->m_contactCGPU, 0,
- nContactOut,
- maxNumBatches, numIter, &m_data->m_batchSizes);
- }
- else
- {
- solveContactConstraint(
- m_data->m_bodyBufferGPU,
- m_data->m_inertiaBufferGPU,
- m_data->m_contactCGPU, 0,
- nContactOut,
- maxNumBatches, numIter, &m_data->m_batchSizes); //m_data->m_batchSizesGpu);
- }
- }
- else
- {
- B3_PROFILE("Host solveContactConstraint");
-
- m_data->m_solverGPU->solveContactConstraintHost(m_data->m_bodyBufferGPU, m_data->m_inertiaBufferGPU, m_data->m_contactCGPU, 0, nContactOut, maxNumBatches, &m_data->m_batchSizes);
- }
- }
-
-#if 0
- if (0)
- {
- B3_PROFILE("read body velocities back to CPU");
- //read body updated linear/angular velocities back to CPU
- m_data->m_bodyBufferGPU->read(
- m_data->m_bodyBufferCPU->m_ptr,numOfConvexRBodies);
- adl::DeviceUtils::waitForCompletion( m_data->m_deviceCL );
- }
-#endif
- }
-}
-
-void b3GpuPgsContactSolver::batchContacts(b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* n, b3OpenCLArray<unsigned int>* offsets, int staticIdx)
-{
-}
-
-b3AlignedObjectArray<unsigned int> idxBuffer;
-b3AlignedObjectArray<b3SortData> sortData;
-b3AlignedObjectArray<b3Contact4> old;
-
-inline int b3GpuPgsContactSolver::sortConstraintByBatch(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies)
-{
- B3_PROFILE("sortConstraintByBatch");
- int numIter = 0;
-
- sortData.resize(n);
- idxBuffer.resize(n);
- old.resize(n);
-
- unsigned int* idxSrc = &idxBuffer[0];
- unsigned int* idxDst = &idxBuffer[0];
- int nIdxSrc, nIdxDst;
-
- const int N_FLG = 256;
- const int FLG_MASK = N_FLG - 1;
- unsigned int flg[N_FLG / 32];
-#if defined(_DEBUG)
- for (int i = 0; i < n; i++)
- cs[i].getBatchIdx() = -1;
-#endif
- for (int i = 0; i < n; i++)
- idxSrc[i] = i;
- nIdxSrc = n;
-
- int batchIdx = 0;
-
- {
- B3_PROFILE("cpu batch innerloop");
- while (nIdxSrc)
- {
- numIter++;
- nIdxDst = 0;
- int nCurrentBatch = 0;
-
- // clear flag
- for (int i = 0; i < N_FLG / 32; i++) flg[i] = 0;
-
- for (int i = 0; i < nIdxSrc; i++)
- {
- int idx = idxSrc[i];
-
- b3Assert(idx < n);
- // check if it can go
- int bodyAS = cs[idx].m_bodyAPtrAndSignBit;
- int bodyBS = cs[idx].m_bodyBPtrAndSignBit;
-
- int bodyA = abs(bodyAS);
- int bodyB = abs(bodyBS);
-
- int aIdx = bodyA & FLG_MASK;
- int bIdx = bodyB & FLG_MASK;
-
- unsigned int aUnavailable = flg[aIdx / 32] & (1 << (aIdx & 31));
- unsigned int bUnavailable = flg[bIdx / 32] & (1 << (bIdx & 31));
-
- bool aIsStatic = (bodyAS < 0) || bodyAS == staticIdx;
- bool bIsStatic = (bodyBS < 0) || bodyBS == staticIdx;
-
- //use inv_mass!
- aUnavailable = !aIsStatic ? aUnavailable : 0; //
- bUnavailable = !bIsStatic ? bUnavailable : 0;
-
- if (aUnavailable == 0 && bUnavailable == 0) // ok
- {
- if (!aIsStatic)
- flg[aIdx / 32] |= (1 << (aIdx & 31));
- if (!bIsStatic)
- flg[bIdx / 32] |= (1 << (bIdx & 31));
-
- cs[idx].getBatchIdx() = batchIdx;
- sortData[idx].m_key = batchIdx;
- sortData[idx].m_value = idx;
-
- {
- nCurrentBatch++;
- if (nCurrentBatch == simdWidth)
- {
- nCurrentBatch = 0;
- for (int i = 0; i < N_FLG / 32; i++) flg[i] = 0;
- }
- }
- }
- else
- {
- idxDst[nIdxDst++] = idx;
- }
- }
- b3Swap(idxSrc, idxDst);
- b3Swap(nIdxSrc, nIdxDst);
- batchIdx++;
- }
- }
- {
- B3_PROFILE("quickSort");
- sortData.quickSort(sortfnc);
- }
-
- {
- B3_PROFILE("reorder");
- // reorder
-
- memcpy(&old[0], cs, sizeof(b3Contact4) * n);
- for (int i = 0; i < n; i++)
- {
- int idx = sortData[i].m_value;
- cs[i] = old[idx];
- }
- }
-
-#if defined(_DEBUG)
- // debugPrintf( "nBatches: %d\n", batchIdx );
- for (int i = 0; i < n; i++)
- {
- b3Assert(cs[i].getBatchIdx() != -1);
- }
-#endif
- return batchIdx;
-}
-
-b3AlignedObjectArray<int> bodyUsed2;
-
-inline int b3GpuPgsContactSolver::sortConstraintByBatch2(b3Contact4* cs, int numConstraints, int simdWidth, int staticIdx, int numBodies)
-{
- B3_PROFILE("sortConstraintByBatch2");
-
- bodyUsed2.resize(2 * simdWidth);
-
- for (int q = 0; q < 2 * simdWidth; q++)
- bodyUsed2[q] = 0;
-
- int curBodyUsed = 0;
-
- int numIter = 0;
-
- m_data->m_sortData.resize(numConstraints);
- m_data->m_idxBuffer.resize(numConstraints);
- m_data->m_old.resize(numConstraints);
-
- unsigned int* idxSrc = &m_data->m_idxBuffer[0];
-
-#if defined(_DEBUG)
- for (int i = 0; i < numConstraints; i++)
- cs[i].getBatchIdx() = -1;
-#endif
- for (int i = 0; i < numConstraints; i++)
- idxSrc[i] = i;
-
- int numValidConstraints = 0;
- // int unprocessedConstraintIndex = 0;
-
- int batchIdx = 0;
-
- {
- B3_PROFILE("cpu batch innerloop");
-
- while (numValidConstraints < numConstraints)
- {
- numIter++;
- int nCurrentBatch = 0;
- // clear flag
- for (int i = 0; i < curBodyUsed; i++)
- bodyUsed2[i] = 0;
- curBodyUsed = 0;
-
- for (int i = numValidConstraints; i < numConstraints; i++)
- {
- int idx = idxSrc[i];
- b3Assert(idx < numConstraints);
- // check if it can go
- int bodyAS = cs[idx].m_bodyAPtrAndSignBit;
- int bodyBS = cs[idx].m_bodyBPtrAndSignBit;
- int bodyA = abs(bodyAS);
- int bodyB = abs(bodyBS);
- bool aIsStatic = (bodyAS < 0) || bodyAS == staticIdx;
- bool bIsStatic = (bodyBS < 0) || bodyBS == staticIdx;
- int aUnavailable = 0;
- int bUnavailable = 0;
- if (!aIsStatic)
- {
- for (int j = 0; j < curBodyUsed; j++)
- {
- if (bodyA == bodyUsed2[j])
- {
- aUnavailable = 1;
- break;
- }
- }
- }
- if (!aUnavailable)
- if (!bIsStatic)
- {
- for (int j = 0; j < curBodyUsed; j++)
- {
- if (bodyB == bodyUsed2[j])
- {
- bUnavailable = 1;
- break;
- }
- }
- }
-
- if (aUnavailable == 0 && bUnavailable == 0) // ok
- {
- if (!aIsStatic)
- {
- bodyUsed2[curBodyUsed++] = bodyA;
- }
- if (!bIsStatic)
- {
- bodyUsed2[curBodyUsed++] = bodyB;
- }
-
- cs[idx].getBatchIdx() = batchIdx;
- m_data->m_sortData[idx].m_key = batchIdx;
- m_data->m_sortData[idx].m_value = idx;
-
- if (i != numValidConstraints)
- {
- b3Swap(idxSrc[i], idxSrc[numValidConstraints]);
- }
-
- numValidConstraints++;
- {
- nCurrentBatch++;
- if (nCurrentBatch == simdWidth)
- {
- nCurrentBatch = 0;
- for (int i = 0; i < curBodyUsed; i++)
- bodyUsed2[i] = 0;
-
- curBodyUsed = 0;
- }
- }
- }
- }
-
- batchIdx++;
- }
- }
- {
- B3_PROFILE("quickSort");
- //m_data->m_sortData.quickSort(sortfnc);
- }
-
- {
- B3_PROFILE("reorder");
- // reorder
-
- memcpy(&m_data->m_old[0], cs, sizeof(b3Contact4) * numConstraints);
-
- for (int i = 0; i < numConstraints; i++)
- {
- b3Assert(m_data->m_sortData[idxSrc[i]].m_value == idxSrc[i]);
- int idx = m_data->m_sortData[idxSrc[i]].m_value;
- cs[i] = m_data->m_old[idx];
- }
- }
-
-#if defined(_DEBUG)
- // debugPrintf( "nBatches: %d\n", batchIdx );
- for (int i = 0; i < numConstraints; i++)
- {
- b3Assert(cs[i].getBatchIdx() != -1);
- }
-#endif
-
- return batchIdx;
-}
-
-b3AlignedObjectArray<int> bodyUsed;
-b3AlignedObjectArray<int> curUsed;
-
-inline int b3GpuPgsContactSolver::sortConstraintByBatch3(b3Contact4* cs, int numConstraints, int simdWidth, int staticIdx, int numBodies, int* batchSizes)
-{
- B3_PROFILE("sortConstraintByBatch3");
-
- static int maxSwaps = 0;
- int numSwaps = 0;
-
- curUsed.resize(2 * simdWidth);
-
- static int maxNumConstraints = 0;
- if (maxNumConstraints < numConstraints)
- {
- maxNumConstraints = numConstraints;
- //printf("maxNumConstraints = %d\n",maxNumConstraints );
- }
-
- int numUsedArray = numBodies / 32 + 1;
- bodyUsed.resize(numUsedArray);
-
- for (int q = 0; q < numUsedArray; q++)
- bodyUsed[q] = 0;
-
- int curBodyUsed = 0;
-
- int numIter = 0;
-
- m_data->m_sortData.resize(0);
- m_data->m_idxBuffer.resize(0);
- m_data->m_old.resize(0);
-
-#if defined(_DEBUG)
- for (int i = 0; i < numConstraints; i++)
- cs[i].getBatchIdx() = -1;
-#endif
-
- int numValidConstraints = 0;
- // int unprocessedConstraintIndex = 0;
-
- int batchIdx = 0;
-
- {
- B3_PROFILE("cpu batch innerloop");
-
- while (numValidConstraints < numConstraints)
- {
- numIter++;
- int nCurrentBatch = 0;
- batchSizes[batchIdx] = 0;
-
- // clear flag
- for (int i = 0; i < curBodyUsed; i++)
- bodyUsed[curUsed[i] / 32] = 0;
-
- curBodyUsed = 0;
-
- for (int i = numValidConstraints; i < numConstraints; i++)
- {
- int idx = i;
- b3Assert(idx < numConstraints);
- // check if it can go
- int bodyAS = cs[idx].m_bodyAPtrAndSignBit;
- int bodyBS = cs[idx].m_bodyBPtrAndSignBit;
- int bodyA = abs(bodyAS);
- int bodyB = abs(bodyBS);
- bool aIsStatic = (bodyAS < 0) || bodyAS == staticIdx;
- bool bIsStatic = (bodyBS < 0) || bodyBS == staticIdx;
- int aUnavailable = 0;
- int bUnavailable = 0;
- if (!aIsStatic)
- {
- aUnavailable = bodyUsed[bodyA / 32] & (1 << (bodyA & 31));
- }
- if (!aUnavailable)
- if (!bIsStatic)
- {
- bUnavailable = bodyUsed[bodyB / 32] & (1 << (bodyB & 31));
- }
-
- if (aUnavailable == 0 && bUnavailable == 0) // ok
- {
- if (!aIsStatic)
- {
- bodyUsed[bodyA / 32] |= (1 << (bodyA & 31));
- curUsed[curBodyUsed++] = bodyA;
- }
- if (!bIsStatic)
- {
- bodyUsed[bodyB / 32] |= (1 << (bodyB & 31));
- curUsed[curBodyUsed++] = bodyB;
- }
-
- cs[idx].getBatchIdx() = batchIdx;
-
- if (i != numValidConstraints)
- {
- b3Swap(cs[i], cs[numValidConstraints]);
- numSwaps++;
- }
-
- numValidConstraints++;
- {
- nCurrentBatch++;
- if (nCurrentBatch == simdWidth)
- {
- batchSizes[batchIdx] += simdWidth;
- nCurrentBatch = 0;
- for (int i = 0; i < curBodyUsed; i++)
- bodyUsed[curUsed[i] / 32] = 0;
- curBodyUsed = 0;
- }
- }
- }
- }
-
- if (batchIdx >= B3_MAX_NUM_BATCHES)
- {
- b3Error("batchIdx>=B3_MAX_NUM_BATCHES");
- b3Assert(0);
- break;
- }
-
- batchSizes[batchIdx] += nCurrentBatch;
-
- batchIdx++;
- }
- }
-
-#if defined(_DEBUG)
- // debugPrintf( "nBatches: %d\n", batchIdx );
- for (int i = 0; i < numConstraints; i++)
- {
- b3Assert(cs[i].getBatchIdx() != -1);
- }
-#endif
-
- batchSizes[batchIdx] = 0;
-
- if (maxSwaps < numSwaps)
- {
- maxSwaps = numSwaps;
- //printf("maxSwaps = %d\n", maxSwaps);
- }
-
- return batchIdx;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.h
deleted file mode 100644
index 6ab7502af3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuPgsContactSolver.h
+++ /dev/null
@@ -1,37 +0,0 @@
-
-#ifndef B3_GPU_BATCHING_PGS_SOLVER_H
-#define B3_GPU_BATCHING_PGS_SOLVER_H
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-#include "b3GpuConstraint4.h"
-
-class b3GpuPgsContactSolver
-{
-protected:
- int m_debugOutput;
-
- struct b3GpuBatchingPgsSolverInternalData* m_data;
-
- void batchContacts(b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* n, b3OpenCLArray<unsigned int>* offsets, int staticIdx);
-
- inline int sortConstraintByBatch(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies);
- inline int sortConstraintByBatch2(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies);
- inline int sortConstraintByBatch3(b3Contact4* cs, int n, int simdWidth, int staticIdx, int numBodies, int* batchSizes);
-
- void solveContactConstraintBatchSizes(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, int numIterations, const b3AlignedObjectArray<int>* batchSizes); //const b3OpenCLArray<int>* gpuBatchSizes);
-
- void solveContactConstraint(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, int numIterations, const b3AlignedObjectArray<int>* batchSizes); //const b3OpenCLArray<int>* gpuBatchSizes);
-
-public:
- b3GpuPgsContactSolver(cl_context ctx, cl_device_id device, cl_command_queue q, int pairCapacity);
- virtual ~b3GpuPgsContactSolver();
-
- void solveContacts(int numBodies, cl_mem bodyBuf, cl_mem inertiaBuf, int numContacts, cl_mem contactBuf, const struct b3Config& config, int static0Index);
-};
-
-#endif //B3_GPU_BATCHING_PGS_SOLVER_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.cpp
deleted file mode 100644
index fef33ad1cd..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.cpp
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#include "b3GpuRigidBodyPipeline.h"
-#include "b3GpuRigidBodyPipelineInternalData.h"
-#include "kernels/integrateKernel.h"
-#include "kernels/updateAabbsKernel.h"
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-#include "b3GpuNarrowPhase.h"
-#include "Bullet3Geometry/b3AabbUtil.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h"
-#include "Bullet3OpenCL/BroadphaseCollision/b3GpuBroadphaseInterface.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-#include "Bullet3Dynamics/ConstraintSolver/b3PgsJacobiSolver.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3UpdateAabbs.h"
-#include "Bullet3Collision/BroadPhaseCollision/b3DynamicBvhBroadphase.h"
-
-//#define TEST_OTHER_GPU_SOLVER
-
-#define B3_RIGIDBODY_INTEGRATE_PATH "src/Bullet3OpenCL/RigidBody/kernels/integrateKernel.cl"
-#define B3_RIGIDBODY_UPDATEAABB_PATH "src/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.cl"
-
-bool useBullet2CpuSolver = true;
-
-//choice of contact solver
-bool gUseJacobi = false;
-bool gUseDbvt = false;
-bool gDumpContactStats = false;
-bool gCalcWorldSpaceAabbOnCpu = false;
-bool gUseCalculateOverlappingPairsHost = false;
-bool gIntegrateOnCpu = false;
-bool gClearPairsOnGpu = true;
-
-#define TEST_OTHER_GPU_SOLVER 1
-#ifdef TEST_OTHER_GPU_SOLVER
-#include "b3GpuJacobiContactSolver.h"
-#endif //TEST_OTHER_GPU_SOLVER
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-#include "Bullet3OpenCL/RigidBody/b3GpuPgsConstraintSolver.h"
-
-#include "b3GpuPgsContactSolver.h"
-#include "b3Solver.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-#include "Bullet3OpenCL/Raycast/b3GpuRaycast.h"
-
-#include "Bullet3Dynamics/shared/b3IntegrateTransforms.h"
-#include "Bullet3OpenCL/RigidBody/b3GpuNarrowPhaseInternalData.h"
-
-b3GpuRigidBodyPipeline::b3GpuRigidBodyPipeline(cl_context ctx, cl_device_id device, cl_command_queue q, class b3GpuNarrowPhase* narrowphase, class b3GpuBroadphaseInterface* broadphaseSap, struct b3DynamicBvhBroadphase* broadphaseDbvt, const b3Config& config)
-{
- m_data = new b3GpuRigidBodyPipelineInternalData;
- m_data->m_constraintUid = 0;
- m_data->m_config = config;
- m_data->m_context = ctx;
- m_data->m_device = device;
- m_data->m_queue = q;
-
- m_data->m_solver = new b3PgsJacobiSolver(true); //new b3PgsJacobiSolver(true);
- m_data->m_gpuSolver = new b3GpuPgsConstraintSolver(ctx, device, q, true); //new b3PgsJacobiSolver(true);
-
- m_data->m_allAabbsGPU = new b3OpenCLArray<b3SapAabb>(ctx, q, config.m_maxConvexBodies);
- m_data->m_overlappingPairsGPU = new b3OpenCLArray<b3BroadphasePair>(ctx, q, config.m_maxBroadphasePairs);
-
- m_data->m_gpuConstraints = new b3OpenCLArray<b3GpuGenericConstraint>(ctx, q);
-#ifdef TEST_OTHER_GPU_SOLVER
- m_data->m_solver3 = new b3GpuJacobiContactSolver(ctx, device, q, config.m_maxBroadphasePairs);
-#endif // TEST_OTHER_GPU_SOLVER
-
- m_data->m_solver2 = new b3GpuPgsContactSolver(ctx, device, q, config.m_maxBroadphasePairs);
-
- m_data->m_raycaster = new b3GpuRaycast(ctx, device, q);
-
- m_data->m_broadphaseDbvt = broadphaseDbvt;
- m_data->m_broadphaseSap = broadphaseSap;
- m_data->m_narrowphase = narrowphase;
- m_data->m_gravity.setValue(0.f, -9.8f, 0.f);
-
- cl_int errNum = 0;
-
- {
- cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_data->m_context, m_data->m_device, integrateKernelCL, &errNum, "", B3_RIGIDBODY_INTEGRATE_PATH);
- b3Assert(errNum == CL_SUCCESS);
- m_data->m_integrateTransformsKernel = b3OpenCLUtils::compileCLKernelFromString(m_data->m_context, m_data->m_device, integrateKernelCL, "integrateTransformsKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
- clReleaseProgram(prog);
- }
- {
- cl_program prog = b3OpenCLUtils::compileCLProgramFromString(m_data->m_context, m_data->m_device, updateAabbsKernelCL, &errNum, "", B3_RIGIDBODY_UPDATEAABB_PATH);
- b3Assert(errNum == CL_SUCCESS);
- m_data->m_updateAabbsKernel = b3OpenCLUtils::compileCLKernelFromString(m_data->m_context, m_data->m_device, updateAabbsKernelCL, "initializeGpuAabbsFull", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
-
- m_data->m_clearOverlappingPairsKernel = b3OpenCLUtils::compileCLKernelFromString(m_data->m_context, m_data->m_device, updateAabbsKernelCL, "clearOverlappingPairsKernel", &errNum, prog);
- b3Assert(errNum == CL_SUCCESS);
-
- clReleaseProgram(prog);
- }
-}
-
-b3GpuRigidBodyPipeline::~b3GpuRigidBodyPipeline()
-{
- if (m_data->m_integrateTransformsKernel)
- clReleaseKernel(m_data->m_integrateTransformsKernel);
-
- if (m_data->m_updateAabbsKernel)
- clReleaseKernel(m_data->m_updateAabbsKernel);
-
- if (m_data->m_clearOverlappingPairsKernel)
- clReleaseKernel(m_data->m_clearOverlappingPairsKernel);
- delete m_data->m_raycaster;
- delete m_data->m_solver;
- delete m_data->m_allAabbsGPU;
- delete m_data->m_gpuConstraints;
- delete m_data->m_overlappingPairsGPU;
-
-#ifdef TEST_OTHER_GPU_SOLVER
- delete m_data->m_solver3;
-#endif //TEST_OTHER_GPU_SOLVER
-
- delete m_data->m_solver2;
-
- delete m_data;
-}
-
-void b3GpuRigidBodyPipeline::reset()
-{
- m_data->m_gpuConstraints->resize(0);
- m_data->m_cpuConstraints.resize(0);
- m_data->m_allAabbsGPU->resize(0);
- m_data->m_allAabbsCPU.resize(0);
-}
-
-void b3GpuRigidBodyPipeline::addConstraint(b3TypedConstraint* constraint)
-{
- m_data->m_joints.push_back(constraint);
-}
-
-void b3GpuRigidBodyPipeline::removeConstraint(b3TypedConstraint* constraint)
-{
- m_data->m_joints.remove(constraint);
-}
-
-void b3GpuRigidBodyPipeline::removeConstraintByUid(int uid)
-{
- m_data->m_gpuSolver->recomputeBatches();
- //slow linear search
- m_data->m_gpuConstraints->copyToHost(m_data->m_cpuConstraints);
- //remove
- for (int i = 0; i < m_data->m_cpuConstraints.size(); i++)
- {
- if (m_data->m_cpuConstraints[i].m_uid == uid)
- {
- //m_data->m_cpuConstraints.remove(m_data->m_cpuConstraints[i]);
- m_data->m_cpuConstraints.swap(i, m_data->m_cpuConstraints.size() - 1);
- m_data->m_cpuConstraints.pop_back();
-
- break;
- }
- }
-
- if (m_data->m_cpuConstraints.size())
- {
- m_data->m_gpuConstraints->copyFromHost(m_data->m_cpuConstraints);
- }
- else
- {
- m_data->m_gpuConstraints->resize(0);
- }
-}
-int b3GpuRigidBodyPipeline::createPoint2PointConstraint(int bodyA, int bodyB, const float* pivotInA, const float* pivotInB, float breakingThreshold)
-{
- m_data->m_gpuSolver->recomputeBatches();
- b3GpuGenericConstraint c;
- c.m_uid = m_data->m_constraintUid;
- m_data->m_constraintUid++;
- c.m_flags = B3_CONSTRAINT_FLAG_ENABLED;
- c.m_rbA = bodyA;
- c.m_rbB = bodyB;
- c.m_pivotInA.setValue(pivotInA[0], pivotInA[1], pivotInA[2]);
- c.m_pivotInB.setValue(pivotInB[0], pivotInB[1], pivotInB[2]);
- c.m_breakingImpulseThreshold = breakingThreshold;
- c.m_constraintType = B3_GPU_POINT2POINT_CONSTRAINT_TYPE;
- m_data->m_cpuConstraints.push_back(c);
- return c.m_uid;
-}
-int b3GpuRigidBodyPipeline::createFixedConstraint(int bodyA, int bodyB, const float* pivotInA, const float* pivotInB, const float* relTargetAB, float breakingThreshold)
-{
- m_data->m_gpuSolver->recomputeBatches();
- b3GpuGenericConstraint c;
- c.m_uid = m_data->m_constraintUid;
- m_data->m_constraintUid++;
- c.m_flags = B3_CONSTRAINT_FLAG_ENABLED;
- c.m_rbA = bodyA;
- c.m_rbB = bodyB;
- c.m_pivotInA.setValue(pivotInA[0], pivotInA[1], pivotInA[2]);
- c.m_pivotInB.setValue(pivotInB[0], pivotInB[1], pivotInB[2]);
- c.m_relTargetAB.setValue(relTargetAB[0], relTargetAB[1], relTargetAB[2], relTargetAB[3]);
- c.m_breakingImpulseThreshold = breakingThreshold;
- c.m_constraintType = B3_GPU_FIXED_CONSTRAINT_TYPE;
-
- m_data->m_cpuConstraints.push_back(c);
- return c.m_uid;
-}
-
-void b3GpuRigidBodyPipeline::stepSimulation(float deltaTime)
-{
- //update worldspace AABBs from local AABB/worldtransform
- {
- B3_PROFILE("setupGpuAabbs");
- setupGpuAabbsFull();
- }
-
- int numPairs = 0;
-
- //compute overlapping pairs
- {
- if (gUseDbvt)
- {
- {
- B3_PROFILE("setAabb");
- m_data->m_allAabbsGPU->copyToHost(m_data->m_allAabbsCPU);
- for (int i = 0; i < m_data->m_allAabbsCPU.size(); i++)
- {
- b3Vector3 aabbMin = b3MakeVector3(m_data->m_allAabbsCPU[i].m_min[0], m_data->m_allAabbsCPU[i].m_min[1], m_data->m_allAabbsCPU[i].m_min[2]);
- b3Vector3 aabbMax = b3MakeVector3(m_data->m_allAabbsCPU[i].m_max[0], m_data->m_allAabbsCPU[i].m_max[1], m_data->m_allAabbsCPU[i].m_max[2]);
- m_data->m_broadphaseDbvt->setAabb(i, aabbMin, aabbMax, 0);
- }
- }
-
- {
- B3_PROFILE("calculateOverlappingPairs");
- m_data->m_broadphaseDbvt->calculateOverlappingPairs();
- }
- numPairs = m_data->m_broadphaseDbvt->getOverlappingPairCache()->getNumOverlappingPairs();
- }
- else
- {
- if (gUseCalculateOverlappingPairsHost)
- {
- m_data->m_broadphaseSap->calculateOverlappingPairsHost(m_data->m_config.m_maxBroadphasePairs);
- }
- else
- {
- m_data->m_broadphaseSap->calculateOverlappingPairs(m_data->m_config.m_maxBroadphasePairs);
- }
- numPairs = m_data->m_broadphaseSap->getNumOverlap();
- }
- }
-
- //compute contact points
- // printf("numPairs=%d\n",numPairs);
-
- int numContacts = 0;
-
- int numBodies = m_data->m_narrowphase->getNumRigidBodies();
-
- if (numPairs)
- {
- cl_mem pairs = 0;
- cl_mem aabbsWS = 0;
- if (gUseDbvt)
- {
- B3_PROFILE("m_overlappingPairsGPU->copyFromHost");
- m_data->m_overlappingPairsGPU->copyFromHost(m_data->m_broadphaseDbvt->getOverlappingPairCache()->getOverlappingPairArray());
- pairs = m_data->m_overlappingPairsGPU->getBufferCL();
- aabbsWS = m_data->m_allAabbsGPU->getBufferCL();
- }
- else
- {
- pairs = m_data->m_broadphaseSap->getOverlappingPairBuffer();
- aabbsWS = m_data->m_broadphaseSap->getAabbBufferWS();
- }
-
- m_data->m_overlappingPairsGPU->resize(numPairs);
-
- //mark the contacts for each pair as 'unused'
- if (numPairs)
- {
- b3OpenCLArray<b3BroadphasePair> gpuPairs(this->m_data->m_context, m_data->m_queue);
- gpuPairs.setFromOpenCLBuffer(pairs, numPairs);
-
- if (gClearPairsOnGpu)
- {
- //b3AlignedObjectArray<b3BroadphasePair> hostPairs;//just for debugging
- //gpuPairs.copyToHost(hostPairs);
-
- b3LauncherCL launcher(m_data->m_queue, m_data->m_clearOverlappingPairsKernel, "clearOverlappingPairsKernel");
- launcher.setBuffer(pairs);
- launcher.setConst(numPairs);
- launcher.launch1D(numPairs);
-
- //gpuPairs.copyToHost(hostPairs);
- }
- else
- {
- b3AlignedObjectArray<b3BroadphasePair> hostPairs;
- gpuPairs.copyToHost(hostPairs);
-
- for (int i = 0; i < hostPairs.size(); i++)
- {
- hostPairs[i].z = 0xffffffff;
- }
-
- gpuPairs.copyFromHost(hostPairs);
- }
- }
-
- m_data->m_narrowphase->computeContacts(pairs, numPairs, aabbsWS, numBodies);
- numContacts = m_data->m_narrowphase->getNumContactsGpu();
-
- if (gUseDbvt)
- {
- ///store the cached information (contact locations in the 'z' component)
- B3_PROFILE("m_overlappingPairsGPU->copyToHost");
- m_data->m_overlappingPairsGPU->copyToHost(m_data->m_broadphaseDbvt->getOverlappingPairCache()->getOverlappingPairArray());
- }
- if (gDumpContactStats && numContacts)
- {
- m_data->m_narrowphase->getContactsGpu();
-
- printf("numContacts = %d\n", numContacts);
-
- int totalPoints = 0;
- const b3Contact4* contacts = m_data->m_narrowphase->getContactsCPU();
-
- for (int i = 0; i < numContacts; i++)
- {
- totalPoints += contacts->getNPoints();
- }
- printf("totalPoints=%d\n", totalPoints);
- }
- }
-
- //convert contact points to contact constraints
-
- //solve constraints
-
- b3OpenCLArray<b3RigidBodyData> gpuBodies(m_data->m_context, m_data->m_queue, 0, true);
- gpuBodies.setFromOpenCLBuffer(m_data->m_narrowphase->getBodiesGpu(), m_data->m_narrowphase->getNumRigidBodies());
- b3OpenCLArray<b3InertiaData> gpuInertias(m_data->m_context, m_data->m_queue, 0, true);
- gpuInertias.setFromOpenCLBuffer(m_data->m_narrowphase->getBodyInertiasGpu(), m_data->m_narrowphase->getNumRigidBodies());
- b3OpenCLArray<b3Contact4> gpuContacts(m_data->m_context, m_data->m_queue, 0, true);
- gpuContacts.setFromOpenCLBuffer(m_data->m_narrowphase->getContactsGpu(), m_data->m_narrowphase->getNumContactsGpu());
-
- int numJoints = m_data->m_joints.size() ? m_data->m_joints.size() : m_data->m_cpuConstraints.size();
- if (useBullet2CpuSolver && numJoints)
- {
- // b3AlignedObjectArray<b3Contact4> hostContacts;
- //gpuContacts.copyToHost(hostContacts);
- {
- bool useGpu = m_data->m_joints.size() == 0;
-
- // b3Contact4* contacts = numContacts? &hostContacts[0]: 0;
- //m_data->m_solver->solveContacts(m_data->m_narrowphase->getNumBodiesGpu(),&hostBodies[0],&hostInertias[0],numContacts,contacts,numJoints, joints);
- if (useGpu)
- {
- m_data->m_gpuSolver->solveJoints(m_data->m_narrowphase->getNumRigidBodies(), &gpuBodies, &gpuInertias, numJoints, m_data->m_gpuConstraints);
- }
- else
- {
- b3AlignedObjectArray<b3RigidBodyData> hostBodies;
- gpuBodies.copyToHost(hostBodies);
- b3AlignedObjectArray<b3InertiaData> hostInertias;
- gpuInertias.copyToHost(hostInertias);
-
- b3TypedConstraint** joints = numJoints ? &m_data->m_joints[0] : 0;
- m_data->m_solver->solveContacts(m_data->m_narrowphase->getNumRigidBodies(), &hostBodies[0], &hostInertias[0], 0, 0, numJoints, joints);
- gpuBodies.copyFromHost(hostBodies);
- }
- }
- }
-
- if (numContacts)
- {
-#ifdef TEST_OTHER_GPU_SOLVER
-
- if (gUseJacobi)
- {
- bool useGpu = true;
- if (useGpu)
- {
- bool forceHost = false;
- if (forceHost)
- {
- b3AlignedObjectArray<b3RigidBodyData> hostBodies;
- b3AlignedObjectArray<b3InertiaData> hostInertias;
- b3AlignedObjectArray<b3Contact4> hostContacts;
-
- {
- B3_PROFILE("copyToHost");
- gpuBodies.copyToHost(hostBodies);
- gpuInertias.copyToHost(hostInertias);
- gpuContacts.copyToHost(hostContacts);
- }
-
- {
- b3JacobiSolverInfo solverInfo;
- m_data->m_solver3->solveGroupHost(&hostBodies[0], &hostInertias[0], hostBodies.size(), &hostContacts[0], hostContacts.size(), solverInfo);
- }
- {
- B3_PROFILE("copyFromHost");
- gpuBodies.copyFromHost(hostBodies);
- }
- }
- else
-
- {
- int static0Index = m_data->m_narrowphase->getStatic0Index();
- b3JacobiSolverInfo solverInfo;
- //m_data->m_solver3->solveContacts( >solveGroup(&gpuBodies, &gpuInertias, &gpuContacts,solverInfo);
- //m_data->m_solver3->solveContacts(m_data->m_narrowphase->getNumBodiesGpu(),&hostBodies[0],&hostInertias[0],numContacts,&hostContacts[0]);
- m_data->m_solver3->solveContacts(numBodies, gpuBodies.getBufferCL(), gpuInertias.getBufferCL(), numContacts, gpuContacts.getBufferCL(), m_data->m_config, static0Index);
- }
- }
- else
- {
- b3AlignedObjectArray<b3RigidBodyData> hostBodies;
- gpuBodies.copyToHost(hostBodies);
- b3AlignedObjectArray<b3InertiaData> hostInertias;
- gpuInertias.copyToHost(hostInertias);
- b3AlignedObjectArray<b3Contact4> hostContacts;
- gpuContacts.copyToHost(hostContacts);
- {
- //m_data->m_solver->solveContacts(m_data->m_narrowphase->getNumBodiesGpu(),&hostBodies[0],&hostInertias[0],numContacts,&hostContacts[0]);
- }
- gpuBodies.copyFromHost(hostBodies);
- }
- }
- else
-#endif //TEST_OTHER_GPU_SOLVER
- {
- int static0Index = m_data->m_narrowphase->getStatic0Index();
- m_data->m_solver2->solveContacts(numBodies, gpuBodies.getBufferCL(), gpuInertias.getBufferCL(), numContacts, gpuContacts.getBufferCL(), m_data->m_config, static0Index);
-
- //m_data->m_solver4->solveContacts(m_data->m_narrowphase->getNumBodiesGpu(), gpuBodies.getBufferCL(), gpuInertias.getBufferCL(), numContacts, gpuContacts.getBufferCL());
-
- /*m_data->m_solver3->solveContactConstraintHost(
- (b3OpenCLArray<RigidBodyBase::Body>*)&gpuBodies,
- (b3OpenCLArray<RigidBodyBase::Inertia>*)&gpuInertias,
- (b3OpenCLArray<Constraint4>*) &gpuContacts,
- 0,numContacts,256);
- */
- }
- }
-
- integrate(deltaTime);
-}
-
-void b3GpuRigidBodyPipeline::integrate(float timeStep)
-{
- //integrate
- int numBodies = m_data->m_narrowphase->getNumRigidBodies();
- float angularDamp = 0.99f;
-
- if (gIntegrateOnCpu)
- {
- if (numBodies)
- {
- b3GpuNarrowPhaseInternalData* npData = m_data->m_narrowphase->getInternalData();
- npData->m_bodyBufferGPU->copyToHost(*npData->m_bodyBufferCPU);
-
- b3RigidBodyData_t* bodies = &npData->m_bodyBufferCPU->at(0);
-
- for (int nodeID = 0; nodeID < numBodies; nodeID++)
- {
- integrateSingleTransform(bodies, nodeID, timeStep, angularDamp, m_data->m_gravity);
- }
- npData->m_bodyBufferGPU->copyFromHost(*npData->m_bodyBufferCPU);
- }
- }
- else
- {
- b3LauncherCL launcher(m_data->m_queue, m_data->m_integrateTransformsKernel, "m_integrateTransformsKernel");
- launcher.setBuffer(m_data->m_narrowphase->getBodiesGpu());
-
- launcher.setConst(numBodies);
- launcher.setConst(timeStep);
- launcher.setConst(angularDamp);
- launcher.setConst(m_data->m_gravity);
- launcher.launch1D(numBodies);
- }
-}
-
-void b3GpuRigidBodyPipeline::setupGpuAabbsFull()
-{
- cl_int ciErrNum = 0;
-
- int numBodies = m_data->m_narrowphase->getNumRigidBodies();
- if (!numBodies)
- return;
-
- if (gCalcWorldSpaceAabbOnCpu)
- {
- if (numBodies)
- {
- if (gUseDbvt)
- {
- m_data->m_allAabbsCPU.resize(numBodies);
- m_data->m_narrowphase->readbackAllBodiesToCpu();
- for (int i = 0; i < numBodies; i++)
- {
- b3ComputeWorldAabb(i, m_data->m_narrowphase->getBodiesCpu(), m_data->m_narrowphase->getCollidablesCpu(), m_data->m_narrowphase->getLocalSpaceAabbsCpu(), &m_data->m_allAabbsCPU[0]);
- }
- m_data->m_allAabbsGPU->copyFromHost(m_data->m_allAabbsCPU);
- }
- else
- {
- m_data->m_broadphaseSap->getAllAabbsCPU().resize(numBodies);
- m_data->m_narrowphase->readbackAllBodiesToCpu();
- for (int i = 0; i < numBodies; i++)
- {
- b3ComputeWorldAabb(i, m_data->m_narrowphase->getBodiesCpu(), m_data->m_narrowphase->getCollidablesCpu(), m_data->m_narrowphase->getLocalSpaceAabbsCpu(), &m_data->m_broadphaseSap->getAllAabbsCPU()[0]);
- }
- m_data->m_broadphaseSap->getAllAabbsGPU().copyFromHost(m_data->m_broadphaseSap->getAllAabbsCPU());
- //m_data->m_broadphaseSap->writeAabbsToGpu();
- }
- }
- }
- else
- {
- //__kernel void initializeGpuAabbsFull( const int numNodes, __global Body* gBodies,__global Collidable* collidables, __global b3AABBCL* plocalShapeAABB, __global b3AABBCL* pAABB)
- b3LauncherCL launcher(m_data->m_queue, m_data->m_updateAabbsKernel, "m_updateAabbsKernel");
- launcher.setConst(numBodies);
- cl_mem bodies = m_data->m_narrowphase->getBodiesGpu();
- launcher.setBuffer(bodies);
- cl_mem collidables = m_data->m_narrowphase->getCollidablesGpu();
- launcher.setBuffer(collidables);
- cl_mem localAabbs = m_data->m_narrowphase->getAabbLocalSpaceBufferGpu();
- launcher.setBuffer(localAabbs);
-
- cl_mem worldAabbs = 0;
- if (gUseDbvt)
- {
- worldAabbs = m_data->m_allAabbsGPU->getBufferCL();
- }
- else
- {
- worldAabbs = m_data->m_broadphaseSap->getAabbBufferWS();
- }
- launcher.setBuffer(worldAabbs);
- launcher.launch1D(numBodies);
-
- oclCHECKERROR(ciErrNum, CL_SUCCESS);
- }
-
- /*
- b3AlignedObjectArray<b3SapAabb> aabbs;
- m_data->m_broadphaseSap->m_allAabbsGPU.copyToHost(aabbs);
-
- printf("numAabbs = %d\n", aabbs.size());
-
- for (int i=0;i<aabbs.size();i++)
- {
- printf("aabb[%d].m_min=%f,%f,%f,%d\n",i,aabbs[i].m_minVec[0],aabbs[i].m_minVec[1],aabbs[i].m_minVec[2],aabbs[i].m_minIndices[3]);
- printf("aabb[%d].m_max=%f,%f,%f,%d\n",i,aabbs[i].m_maxVec[0],aabbs[i].m_maxVec[1],aabbs[i].m_maxVec[2],aabbs[i].m_signedMaxIndices[3]);
-
- };
- */
-}
-
-cl_mem b3GpuRigidBodyPipeline::getBodyBuffer()
-{
- return m_data->m_narrowphase->getBodiesGpu();
-}
-
-int b3GpuRigidBodyPipeline::getNumBodies() const
-{
- return m_data->m_narrowphase->getNumRigidBodies();
-}
-
-void b3GpuRigidBodyPipeline::setGravity(const float* grav)
-{
- m_data->m_gravity.setValue(grav[0], grav[1], grav[2]);
-}
-
-void b3GpuRigidBodyPipeline::copyConstraintsToHost()
-{
- m_data->m_gpuConstraints->copyToHost(m_data->m_cpuConstraints);
-}
-
-void b3GpuRigidBodyPipeline::writeAllInstancesToGpu()
-{
- m_data->m_allAabbsGPU->copyFromHost(m_data->m_allAabbsCPU);
- m_data->m_gpuConstraints->copyFromHost(m_data->m_cpuConstraints);
-}
-
-int b3GpuRigidBodyPipeline::registerPhysicsInstance(float mass, const float* position, const float* orientation, int collidableIndex, int userIndex, bool writeInstanceToGpu)
-{
- b3Vector3 aabbMin = b3MakeVector3(0, 0, 0), aabbMax = b3MakeVector3(0, 0, 0);
-
- if (collidableIndex >= 0)
- {
- b3SapAabb localAabb = m_data->m_narrowphase->getLocalSpaceAabb(collidableIndex);
- b3Vector3 localAabbMin = b3MakeVector3(localAabb.m_min[0], localAabb.m_min[1], localAabb.m_min[2]);
- b3Vector3 localAabbMax = b3MakeVector3(localAabb.m_max[0], localAabb.m_max[1], localAabb.m_max[2]);
-
- b3Scalar margin = 0.01f;
- b3Transform t;
- t.setIdentity();
- t.setOrigin(b3MakeVector3(position[0], position[1], position[2]));
- t.setRotation(b3Quaternion(orientation[0], orientation[1], orientation[2], orientation[3]));
- b3TransformAabb(localAabbMin, localAabbMax, margin, t, aabbMin, aabbMax);
- }
- else
- {
- b3Error("registerPhysicsInstance using invalid collidableIndex\n");
- return -1;
- }
-
- bool writeToGpu = false;
- int bodyIndex = m_data->m_narrowphase->getNumRigidBodies();
- bodyIndex = m_data->m_narrowphase->registerRigidBody(collidableIndex, mass, position, orientation, &aabbMin.getX(), &aabbMax.getX(), writeToGpu);
-
- if (bodyIndex >= 0)
- {
- if (gUseDbvt)
- {
- m_data->m_broadphaseDbvt->createProxy(aabbMin, aabbMax, bodyIndex, 0, 1, 1);
- b3SapAabb aabb;
- for (int i = 0; i < 3; i++)
- {
- aabb.m_min[i] = aabbMin[i];
- aabb.m_max[i] = aabbMax[i];
- aabb.m_minIndices[3] = bodyIndex;
- }
- m_data->m_allAabbsCPU.push_back(aabb);
- if (writeInstanceToGpu)
- {
- m_data->m_allAabbsGPU->copyFromHost(m_data->m_allAabbsCPU);
- }
- }
- else
- {
- if (mass)
- {
- m_data->m_broadphaseSap->createProxy(aabbMin, aabbMax, bodyIndex, 1, 1); //m_dispatcher);
- }
- else
- {
- m_data->m_broadphaseSap->createLargeProxy(aabbMin, aabbMax, bodyIndex, 1, 1); //m_dispatcher);
- }
- }
- }
-
- /*
- if (mass>0.f)
- m_numDynamicPhysicsInstances++;
-
- m_numPhysicsInstances++;
- */
-
- return bodyIndex;
-}
-
-void b3GpuRigidBodyPipeline::castRays(const b3AlignedObjectArray<b3RayInfo>& rays, b3AlignedObjectArray<b3RayHit>& hitResults)
-{
- this->m_data->m_raycaster->castRays(rays, hitResults,
- getNumBodies(), this->m_data->m_narrowphase->getBodiesCpu(),
- m_data->m_narrowphase->getNumCollidablesGpu(), m_data->m_narrowphase->getCollidablesCpu(),
- m_data->m_narrowphase->getInternalData(), m_data->m_broadphaseSap);
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h
deleted file mode 100644
index 0e5c6fec12..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipeline.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef B3_GPU_RIGIDBODY_PIPELINE_H
-#define B3_GPU_RIGIDBODY_PIPELINE_H
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3RaycastInfo.h"
-
-class b3GpuRigidBodyPipeline
-{
-protected:
- struct b3GpuRigidBodyPipelineInternalData* m_data;
-
- int allocateCollidable();
-
-public:
- b3GpuRigidBodyPipeline(cl_context ctx, cl_device_id device, cl_command_queue q, class b3GpuNarrowPhase* narrowphase, class b3GpuBroadphaseInterface* broadphaseSap, struct b3DynamicBvhBroadphase* broadphaseDbvt, const b3Config& config);
- virtual ~b3GpuRigidBodyPipeline();
-
- void stepSimulation(float deltaTime);
- void integrate(float timeStep);
- void setupGpuAabbsFull();
-
- int registerConvexPolyhedron(class b3ConvexUtility* convex);
-
- //int registerConvexPolyhedron(const float* vertices, int strideInBytes, int numVertices, const float* scaling);
- //int registerSphereShape(float radius);
- //int registerPlaneShape(const b3Vector3& planeNormal, float planeConstant);
-
- //int registerConcaveMesh(b3AlignedObjectArray<b3Vector3>* vertices, b3AlignedObjectArray<int>* indices, const float* scaling);
- //int registerCompoundShape(b3AlignedObjectArray<b3GpuChildShape>* childShapes);
-
- int registerPhysicsInstance(float mass, const float* position, const float* orientation, int collisionShapeIndex, int userData, bool writeInstanceToGpu);
- //if you passed "writeInstanceToGpu" false in the registerPhysicsInstance method (for performance) you need to call writeAllInstancesToGpu after all instances are registered
- void writeAllInstancesToGpu();
- void copyConstraintsToHost();
- void setGravity(const float* grav);
- void reset();
-
- int createPoint2PointConstraint(int bodyA, int bodyB, const float* pivotInA, const float* pivotInB, float breakingThreshold);
- int createFixedConstraint(int bodyA, int bodyB, const float* pivotInA, const float* pivotInB, const float* relTargetAB, float breakingThreshold);
- void removeConstraintByUid(int uid);
-
- void addConstraint(class b3TypedConstraint* constraint);
- void removeConstraint(b3TypedConstraint* constraint);
-
- void castRays(const b3AlignedObjectArray<b3RayInfo>& rays, b3AlignedObjectArray<b3RayHit>& hitResults);
-
- cl_mem getBodyBuffer();
-
- int getNumBodies() const;
-};
-
-#endif //B3_GPU_RIGIDBODY_PIPELINE_H \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipelineInternalData.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipelineInternalData.h
deleted file mode 100644
index e0a26fda17..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuRigidBodyPipelineInternalData.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef B3_GPU_RIGIDBODY_PIPELINE_INTERNAL_DATA_H
-#define B3_GPU_RIGIDBODY_PIPELINE_INTERNAL_DATA_H
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLInclude.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Collidable.h"
-
-#include "Bullet3OpenCL/BroadphaseCollision/b3SapAabb.h"
-#include "Bullet3Dynamics/ConstraintSolver/b3TypedConstraint.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Config.h"
-
-#include "Bullet3Collision/BroadPhaseCollision/b3OverlappingPair.h"
-#include "Bullet3OpenCL/RigidBody/b3GpuGenericConstraint.h"
-
-struct b3GpuRigidBodyPipelineInternalData
-{
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
- cl_kernel m_integrateTransformsKernel;
- cl_kernel m_updateAabbsKernel;
- cl_kernel m_clearOverlappingPairsKernel;
-
- class b3PgsJacobiSolver* m_solver;
-
- class b3GpuPgsConstraintSolver* m_gpuSolver;
-
- class b3GpuPgsContactSolver* m_solver2;
- class b3GpuJacobiContactSolver* m_solver3;
- class b3GpuRaycast* m_raycaster;
-
- class b3GpuBroadphaseInterface* m_broadphaseSap;
-
- struct b3DynamicBvhBroadphase* m_broadphaseDbvt;
- b3OpenCLArray<b3SapAabb>* m_allAabbsGPU;
- b3AlignedObjectArray<b3SapAabb> m_allAabbsCPU;
- b3OpenCLArray<b3BroadphasePair>* m_overlappingPairsGPU;
-
- b3OpenCLArray<b3GpuGenericConstraint>* m_gpuConstraints;
- b3AlignedObjectArray<b3GpuGenericConstraint> m_cpuConstraints;
-
- b3AlignedObjectArray<b3TypedConstraint*> m_joints;
- int m_constraintUid;
- class b3GpuNarrowPhase* m_narrowphase;
- b3Vector3 m_gravity;
-
- b3Config m_config;
-};
-
-#endif //B3_GPU_RIGIDBODY_PIPELINE_INTERNAL_DATA_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverBody.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverBody.h
deleted file mode 100644
index db815d9b31..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverBody.h
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#ifndef B3_GPU_SOLVER_BODY_H
-#define B3_GPU_SOLVER_BODY_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3Matrix3x3.h"
-
-#include "Bullet3Common/b3AlignedAllocator.h"
-#include "Bullet3Common/b3TransformUtil.h"
-
-///Until we get other contributions, only use SIMD on Windows, when using Visual Studio 2008 or later, and not double precision
-#ifdef B3_USE_SSE
-#define USE_SIMD 1
-#endif //
-
-///The b3SolverBody is an internal datastructure for the constraint solver. Only necessary data is packed to increase cache coherence/performance.
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3GpuSolverBody
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
- // b3Transform m_worldTransformUnused;
- b3Vector3 m_deltaLinearVelocity;
- b3Vector3 m_deltaAngularVelocity;
- b3Vector3 m_angularFactor;
- b3Vector3 m_linearFactor;
- b3Vector3 m_invMass;
- b3Vector3 m_pushVelocity;
- b3Vector3 m_turnVelocity;
- b3Vector3 m_linearVelocity;
- b3Vector3 m_angularVelocity;
-
- union {
- void* m_originalBody;
- int m_originalBodyIndex;
- };
-
- int padding[3];
-
- /*
- void setWorldTransform(const b3Transform& worldTransform)
- {
- m_worldTransform = worldTransform;
- }
-
- const b3Transform& getWorldTransform() const
- {
- return m_worldTransform;
- }
- */
- B3_FORCE_INLINE void getVelocityInLocalPointObsolete(const b3Vector3& rel_pos, b3Vector3& velocity) const
- {
- if (m_originalBody)
- velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos);
- else
- velocity.setValue(0, 0, 0);
- }
-
- B3_FORCE_INLINE void getAngularVelocity(b3Vector3 & angVel) const
- {
- if (m_originalBody)
- angVel = m_angularVelocity + m_deltaAngularVelocity;
- else
- angVel.setValue(0, 0, 0);
- }
-
- //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position
- B3_FORCE_INLINE void applyImpulse(const b3Vector3& linearComponent, const b3Vector3& angularComponent, const b3Scalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- B3_FORCE_INLINE void internalApplyPushImpulse(const b3Vector3& linearComponent, const b3Vector3& angularComponent, b3Scalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_pushVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_turnVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- const b3Vector3& getDeltaLinearVelocity() const
- {
- return m_deltaLinearVelocity;
- }
-
- const b3Vector3& getDeltaAngularVelocity() const
- {
- return m_deltaAngularVelocity;
- }
-
- const b3Vector3& getPushVelocity() const
- {
- return m_pushVelocity;
- }
-
- const b3Vector3& getTurnVelocity() const
- {
- return m_turnVelocity;
- }
-
- ////////////////////////////////////////////////
- ///some internal methods, don't use them
-
- b3Vector3& internalGetDeltaLinearVelocity()
- {
- return m_deltaLinearVelocity;
- }
-
- b3Vector3& internalGetDeltaAngularVelocity()
- {
- return m_deltaAngularVelocity;
- }
-
- const b3Vector3& internalGetAngularFactor() const
- {
- return m_angularFactor;
- }
-
- const b3Vector3& internalGetInvMass() const
- {
- return m_invMass;
- }
-
- void internalSetInvMass(const b3Vector3& invMass)
- {
- m_invMass = invMass;
- }
-
- b3Vector3& internalGetPushVelocity()
- {
- return m_pushVelocity;
- }
-
- b3Vector3& internalGetTurnVelocity()
- {
- return m_turnVelocity;
- }
-
- B3_FORCE_INLINE void internalGetVelocityInLocalPointObsolete(const b3Vector3& rel_pos, b3Vector3& velocity) const
- {
- velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos);
- }
-
- B3_FORCE_INLINE void internalGetAngularVelocity(b3Vector3 & angVel) const
- {
- angVel = m_angularVelocity + m_deltaAngularVelocity;
- }
-
- //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position
- B3_FORCE_INLINE void internalApplyImpulse(const b3Vector3& linearComponent, const b3Vector3& angularComponent, const b3Scalar impulseMagnitude)
- {
- //if (m_originalBody)
- {
- m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- void writebackVelocity()
- {
- //if (m_originalBody>=0)
- {
- m_linearVelocity += m_deltaLinearVelocity;
- m_angularVelocity += m_deltaAngularVelocity;
-
- //m_originalBody->setCompanionId(-1);
- }
- }
-
- void writebackVelocityAndTransform(b3Scalar timeStep, b3Scalar splitImpulseTurnErp)
- {
- (void)timeStep;
- if (m_originalBody)
- {
- m_linearVelocity += m_deltaLinearVelocity;
- m_angularVelocity += m_deltaAngularVelocity;
-
- //correct the position/orientation based on push/turn recovery
- b3Transform newTransform;
- if (m_pushVelocity[0] != 0.f || m_pushVelocity[1] != 0 || m_pushVelocity[2] != 0 || m_turnVelocity[0] != 0.f || m_turnVelocity[1] != 0 || m_turnVelocity[2] != 0)
- {
- // b3Quaternion orn = m_worldTransform.getRotation();
- // b3TransformUtil::integrateTransform(m_worldTransform,m_pushVelocity,m_turnVelocity*splitImpulseTurnErp,timeStep,newTransform);
- // m_worldTransform = newTransform;
- }
- //m_worldTransform.setRotation(orn);
- //m_originalBody->setCompanionId(-1);
- }
- }
-};
-
-#endif //B3_SOLVER_BODY_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverConstraint.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverConstraint.h
deleted file mode 100644
index 7d9eea243a..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3GpuSolverConstraint.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://github.com/erwincoumans/bullet3
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_GPU_SOLVER_CONSTRAINT_H
-#define B3_GPU_SOLVER_CONSTRAINT_H
-
-#include "Bullet3Common/b3Vector3.h"
-#include "Bullet3Common/b3Matrix3x3.h"
-//#include "b3JacobianEntry.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-
-//#define NO_FRICTION_TANGENTIALS 1
-
-///1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and friction constraints.
-B3_ATTRIBUTE_ALIGNED16(struct)
-b3GpuSolverConstraint
-{
- B3_DECLARE_ALIGNED_ALLOCATOR();
-
- b3Vector3 m_relpos1CrossNormal;
- b3Vector3 m_contactNormal;
-
- b3Vector3 m_relpos2CrossNormal;
- //b3Vector3 m_contactNormal2;//usually m_contactNormal2 == -m_contactNormal
-
- b3Vector3 m_angularComponentA;
- b3Vector3 m_angularComponentB;
-
- mutable b3Scalar m_appliedPushImpulse;
- mutable b3Scalar m_appliedImpulse;
- int m_padding1;
- int m_padding2;
- b3Scalar m_friction;
- b3Scalar m_jacDiagABInv;
- b3Scalar m_rhs;
- b3Scalar m_cfm;
-
- b3Scalar m_lowerLimit;
- b3Scalar m_upperLimit;
- b3Scalar m_rhsPenetration;
- union {
- void* m_originalContactPoint;
- int m_originalConstraintIndex;
- b3Scalar m_unusedPadding4;
- };
-
- int m_overrideNumSolverIterations;
- int m_frictionIndex;
- int m_solverBodyIdA;
- int m_solverBodyIdB;
-
- enum b3SolverConstraintType
- {
- B3_SOLVER_CONTACT_1D = 0,
- B3_SOLVER_FRICTION_1D
- };
-};
-
-typedef b3AlignedObjectArray<b3GpuSolverConstraint> b3GpuConstraintArray;
-
-#endif //B3_GPU_SOLVER_CONSTRAINT_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.cpp b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.cpp
deleted file mode 100644
index ccf67da1a8..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.cpp
+++ /dev/null
@@ -1,1128 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-#include "b3Solver.h"
-
-///useNewBatchingKernel is a rewritten kernel using just a single thread of the warp, for experiments
-bool useNewBatchingKernel = true;
-bool gConvertConstraintOnCpu = false;
-
-#define B3_SOLVER_SETUP_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solverSetup.cl"
-#define B3_SOLVER_SETUP2_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solverSetup2.cl"
-#define B3_SOLVER_CONTACT_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solveContact.cl"
-#define B3_SOLVER_FRICTION_KERNEL_PATH "src/Bullet3OpenCL/RigidBody/kernels/solveFriction.cl"
-#define B3_BATCHING_PATH "src/Bullet3OpenCL/RigidBody/kernels/batchingKernels.cl"
-#define B3_BATCHING_NEW_PATH "src/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.cl"
-
-#include "Bullet3Dynamics/shared/b3ConvertConstraint4.h"
-
-#include "kernels/solverSetup.h"
-#include "kernels/solverSetup2.h"
-
-#include "kernels/solveContact.h"
-#include "kernels/solveFriction.h"
-
-#include "kernels/batchingKernels.h"
-#include "kernels/batchingKernelsNew.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3LauncherCL.h"
-#include "Bullet3Common/b3Vector3.h"
-
-struct SolverDebugInfo
-{
- int m_valInt0;
- int m_valInt1;
- int m_valInt2;
- int m_valInt3;
-
- int m_valInt4;
- int m_valInt5;
- int m_valInt6;
- int m_valInt7;
-
- int m_valInt8;
- int m_valInt9;
- int m_valInt10;
- int m_valInt11;
-
- int m_valInt12;
- int m_valInt13;
- int m_valInt14;
- int m_valInt15;
-
- float m_val0;
- float m_val1;
- float m_val2;
- float m_val3;
-};
-
-class SolverDeviceInl
-{
-public:
- struct ParallelSolveData
- {
- b3OpenCLArray<unsigned int>* m_numConstraints;
- b3OpenCLArray<unsigned int>* m_offsets;
- };
-};
-
-b3Solver::b3Solver(cl_context ctx, cl_device_id device, cl_command_queue queue, int pairCapacity)
- : m_context(ctx),
- m_device(device),
- m_queue(queue),
- m_batchSizes(ctx, queue),
- m_nIterations(4)
-{
- m_sort32 = new b3RadixSort32CL(ctx, device, queue);
- m_scan = new b3PrefixScanCL(ctx, device, queue, B3_SOLVER_N_CELLS);
- m_search = new b3BoundSearchCL(ctx, device, queue, B3_SOLVER_N_CELLS);
-
- const int sortSize = B3NEXTMULTIPLEOF(pairCapacity, 512);
-
- m_sortDataBuffer = new b3OpenCLArray<b3SortData>(ctx, queue, sortSize);
- m_contactBuffer2 = new b3OpenCLArray<b3Contact4>(ctx, queue);
-
- m_numConstraints = new b3OpenCLArray<unsigned int>(ctx, queue, B3_SOLVER_N_CELLS);
- m_numConstraints->resize(B3_SOLVER_N_CELLS);
-
- m_offsets = new b3OpenCLArray<unsigned int>(ctx, queue, B3_SOLVER_N_CELLS);
- m_offsets->resize(B3_SOLVER_N_CELLS);
- const char* additionalMacros = "";
- // const char* srcFileNameForCaching="";
-
- cl_int pErrNum;
- const char* batchKernelSource = batchingKernelsCL;
- const char* batchKernelNewSource = batchingKernelsNewCL;
-
- const char* solverSetupSource = solverSetupCL;
- const char* solverSetup2Source = solverSetup2CL;
- const char* solveContactSource = solveContactCL;
- const char* solveFrictionSource = solveFrictionCL;
-
- {
- cl_program solveContactProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solveContactSource, &pErrNum, additionalMacros, B3_SOLVER_CONTACT_KERNEL_PATH);
- b3Assert(solveContactProg);
-
- cl_program solveFrictionProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solveFrictionSource, &pErrNum, additionalMacros, B3_SOLVER_FRICTION_KERNEL_PATH);
- b3Assert(solveFrictionProg);
-
- cl_program solverSetup2Prog = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solverSetup2Source, &pErrNum, additionalMacros, B3_SOLVER_SETUP2_KERNEL_PATH);
- b3Assert(solverSetup2Prog);
-
- cl_program solverSetupProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, solverSetupSource, &pErrNum, additionalMacros, B3_SOLVER_SETUP_KERNEL_PATH);
- b3Assert(solverSetupProg);
-
- m_solveFrictionKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solveFrictionSource, "BatchSolveKernelFriction", &pErrNum, solveFrictionProg, additionalMacros);
- b3Assert(m_solveFrictionKernel);
-
- m_solveContactKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solveContactSource, "BatchSolveKernelContact", &pErrNum, solveContactProg, additionalMacros);
- b3Assert(m_solveContactKernel);
-
- m_contactToConstraintKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetupSource, "ContactToConstraintKernel", &pErrNum, solverSetupProg, additionalMacros);
- b3Assert(m_contactToConstraintKernel);
-
- m_setSortDataKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "SetSortDataKernel", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_setSortDataKernel);
-
- m_reorderContactKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "ReorderContactKernel", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_reorderContactKernel);
-
- m_copyConstraintKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, solverSetup2Source, "CopyConstraintKernel", &pErrNum, solverSetup2Prog, additionalMacros);
- b3Assert(m_copyConstraintKernel);
- }
-
- {
- cl_program batchingProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, batchKernelSource, &pErrNum, additionalMacros, B3_BATCHING_PATH);
- //cl_program batchingProg = b3OpenCLUtils::compileCLProgramFromString( ctx, device, 0, &pErrNum,additionalMacros, B3_BATCHING_PATH,true);
- b3Assert(batchingProg);
-
- m_batchingKernel = b3OpenCLUtils::compileCLKernelFromString(ctx, device, batchKernelSource, "CreateBatches", &pErrNum, batchingProg, additionalMacros);
- b3Assert(m_batchingKernel);
- }
- {
- cl_program batchingNewProg = b3OpenCLUtils::compileCLProgramFromString(ctx, device, batchKernelNewSource, &pErrNum, additionalMacros, B3_BATCHING_NEW_PATH);
- b3Assert(batchingNewProg);
-
- m_batchingKernelNew = b3OpenCLUtils::compileCLKernelFromString(ctx, device, batchKernelNewSource, "CreateBatchesNew", &pErrNum, batchingNewProg, additionalMacros);
- //m_batchingKernelNew = b3OpenCLUtils::compileCLKernelFromString( ctx, device, batchKernelNewSource, "CreateBatchesBruteForce", &pErrNum, batchingNewProg,additionalMacros );
- b3Assert(m_batchingKernelNew);
- }
-}
-
-b3Solver::~b3Solver()
-{
- delete m_offsets;
- delete m_numConstraints;
- delete m_sortDataBuffer;
- delete m_contactBuffer2;
-
- delete m_sort32;
- delete m_scan;
- delete m_search;
-
- clReleaseKernel(m_batchingKernel);
- clReleaseKernel(m_batchingKernelNew);
-
- clReleaseKernel(m_solveContactKernel);
- clReleaseKernel(m_solveFrictionKernel);
-
- clReleaseKernel(m_contactToConstraintKernel);
- clReleaseKernel(m_setSortDataKernel);
- clReleaseKernel(m_reorderContactKernel);
- clReleaseKernel(m_copyConstraintKernel);
-}
-
-template <bool JACOBI>
-static __inline void solveContact(b3GpuConstraint4& cs,
- const b3Vector3& posA, b3Vector3& linVelA, b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, b3Vector3& linVelB, b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB,
- float maxRambdaDt[4], float minRambdaDt[4])
-{
- b3Vector3 dLinVelA;
- dLinVelA.setZero();
- b3Vector3 dAngVelA;
- dAngVelA.setZero();
- b3Vector3 dLinVelB;
- dLinVelB.setZero();
- b3Vector3 dAngVelB;
- dAngVelB.setZero();
-
- for (int ic = 0; ic < 4; ic++)
- {
- // dont necessary because this makes change to 0
- if (cs.m_jacCoeffInv[ic] == 0.f) continue;
-
- {
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = cs.m_worldPos[ic] - (b3Vector3&)posA;
- b3Vector3 r1 = cs.m_worldPos[ic] - (b3Vector3&)posB;
- setLinearAndAngular((const b3Vector3&)cs.m_linear, (const b3Vector3&)r0, (const b3Vector3&)r1, &linear, &angular0, &angular1);
-
- float rambdaDt = calcRelVel((const b3Vector3&)cs.m_linear, (const b3Vector3&)-cs.m_linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB) +
- cs.m_b[ic];
- rambdaDt *= cs.m_jacCoeffInv[ic];
-
- {
- float prevSum = cs.m_appliedRambdaDt[ic];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt[ic]);
- updated = b3Min(updated, maxRambdaDt[ic]);
- rambdaDt = updated - prevSum;
- cs.m_appliedRambdaDt[ic] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-#ifdef _WIN32
- b3Assert(_finite(linImp0.getX()));
- b3Assert(_finite(linImp1.getX()));
-#endif
- if (JACOBI)
- {
- dLinVelA += linImp0;
- dAngVelA += angImp0;
- dLinVelB += linImp1;
- dAngVelB += angImp1;
- }
- else
- {
- linVelA += linImp0;
- angVelA += angImp0;
- linVelB += linImp1;
- angVelB += angImp1;
- }
- }
- }
-
- if (JACOBI)
- {
- linVelA += dLinVelA;
- angVelA += dAngVelA;
- linVelB += dLinVelB;
- angVelB += dAngVelB;
- }
-}
-
-static __inline void solveFriction(b3GpuConstraint4& cs,
- const b3Vector3& posA, b3Vector3& linVelA, b3Vector3& angVelA, float invMassA, const b3Matrix3x3& invInertiaA,
- const b3Vector3& posB, b3Vector3& linVelB, b3Vector3& angVelB, float invMassB, const b3Matrix3x3& invInertiaB,
- float maxRambdaDt[4], float minRambdaDt[4])
-{
- if (cs.m_fJacCoeffInv[0] == 0 && cs.m_fJacCoeffInv[0] == 0) return;
- const b3Vector3& center = (const b3Vector3&)cs.m_center;
-
- b3Vector3 n = -(const b3Vector3&)cs.m_linear;
-
- b3Vector3 tangent[2];
-#if 1
- b3PlaneSpace1(n, tangent[0], tangent[1]);
-#else
- b3Vector3 r = cs.m_worldPos[0] - center;
- tangent[0] = cross3(n, r);
- tangent[1] = cross3(tangent[0], n);
- tangent[0] = normalize3(tangent[0]);
- tangent[1] = normalize3(tangent[1]);
-#endif
-
- b3Vector3 angular0, angular1, linear;
- b3Vector3 r0 = center - posA;
- b3Vector3 r1 = center - posB;
- for (int i = 0; i < 2; i++)
- {
- setLinearAndAngular(tangent[i], r0, r1, &linear, &angular0, &angular1);
- float rambdaDt = calcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB);
- rambdaDt *= cs.m_fJacCoeffInv[i];
-
- {
- float prevSum = cs.m_fAppliedRambdaDt[i];
- float updated = prevSum;
- updated += rambdaDt;
- updated = b3Max(updated, minRambdaDt[i]);
- updated = b3Min(updated, maxRambdaDt[i]);
- rambdaDt = updated - prevSum;
- cs.m_fAppliedRambdaDt[i] = updated;
- }
-
- b3Vector3 linImp0 = invMassA * linear * rambdaDt;
- b3Vector3 linImp1 = invMassB * (-linear) * rambdaDt;
- b3Vector3 angImp0 = (invInertiaA * angular0) * rambdaDt;
- b3Vector3 angImp1 = (invInertiaB * angular1) * rambdaDt;
-#ifdef _WIN32
- b3Assert(_finite(linImp0.getX()));
- b3Assert(_finite(linImp1.getX()));
-#endif
- linVelA += linImp0;
- angVelA += angImp0;
- linVelB += linImp1;
- angVelB += angImp1;
- }
-
- { // angular damping for point constraint
- b3Vector3 ab = (posB - posA).normalized();
- b3Vector3 ac = (center - posA).normalized();
- if (b3Dot(ab, ac) > 0.95f || (invMassA == 0.f || invMassB == 0.f))
- {
- float angNA = b3Dot(n, angVelA);
- float angNB = b3Dot(n, angVelB);
-
- angVelA -= (angNA * 0.1f) * n;
- angVelB -= (angNB * 0.1f) * n;
- }
- }
-}
-/*
- b3AlignedObjectArray<b3RigidBodyData>& m_bodies;
- b3AlignedObjectArray<b3InertiaData>& m_shapes;
- b3AlignedObjectArray<b3GpuConstraint4>& m_constraints;
- b3AlignedObjectArray<int>* m_batchSizes;
- int m_cellIndex;
- int m_curWgidx;
- int m_start;
- int m_nConstraints;
- bool m_solveFriction;
- int m_maxNumBatches;
- */
-
-struct SolveTask // : public ThreadPool::Task
-{
- SolveTask(b3AlignedObjectArray<b3RigidBodyData>& bodies, b3AlignedObjectArray<b3InertiaData>& shapes, b3AlignedObjectArray<b3GpuConstraint4>& constraints,
- int start, int nConstraints, int maxNumBatches, b3AlignedObjectArray<int>* wgUsedBodies, int curWgidx, b3AlignedObjectArray<int>* batchSizes, int cellIndex)
- : m_bodies(bodies), m_shapes(shapes), m_constraints(constraints), m_batchSizes(batchSizes), m_cellIndex(cellIndex), m_curWgidx(curWgidx), m_start(start), m_nConstraints(nConstraints), m_solveFriction(true), m_maxNumBatches(maxNumBatches)
- {
- }
-
- unsigned short int getType() { return 0; }
-
- void run(int tIdx)
- {
- int offset = 0;
- for (int ii = 0; ii < B3_MAX_NUM_BATCHES; ii++)
- {
- int numInBatch = m_batchSizes->at(m_cellIndex * B3_MAX_NUM_BATCHES + ii);
- if (!numInBatch)
- break;
-
- for (int jj = 0; jj < numInBatch; jj++)
- {
- int i = m_start + offset + jj;
- int batchId = m_constraints[i].m_batchIdx;
- b3Assert(batchId == ii);
- float frictionCoeff = m_constraints[i].getFrictionCoeff();
- int aIdx = (int)m_constraints[i].m_bodyA;
- int bIdx = (int)m_constraints[i].m_bodyB;
- // int localBatch = m_constraints[i].m_batchIdx;
- b3RigidBodyData& bodyA = m_bodies[aIdx];
- b3RigidBodyData& bodyB = m_bodies[bIdx];
-
- if (!m_solveFriction)
- {
- float maxRambdaDt[4] = {FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX};
- float minRambdaDt[4] = {0.f, 0.f, 0.f, 0.f};
-
- solveContact<false>(m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, (const b3Matrix3x3&)m_shapes[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, (const b3Matrix3x3&)m_shapes[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt);
- }
- else
- {
- float maxRambdaDt[4] = {FLT_MAX, FLT_MAX, FLT_MAX, FLT_MAX};
- float minRambdaDt[4] = {0.f, 0.f, 0.f, 0.f};
- float sum = 0;
- for (int j = 0; j < 4; j++)
- {
- sum += m_constraints[i].m_appliedRambdaDt[j];
- }
- frictionCoeff = 0.7f;
- for (int j = 0; j < 4; j++)
- {
- maxRambdaDt[j] = frictionCoeff * sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
- solveFriction(m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, (const b3Matrix3x3&)m_shapes[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, (const b3Matrix3x3&)m_shapes[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt);
- }
- }
- offset += numInBatch;
- }
- /* for (int bb=0;bb<m_maxNumBatches;bb++)
- {
- //for(int ic=m_nConstraints-1; ic>=0; ic--)
- for(int ic=0; ic<m_nConstraints; ic++)
- {
-
- int i = m_start + ic;
- if (m_constraints[i].m_batchIdx != bb)
- continue;
-
- float frictionCoeff = m_constraints[i].getFrictionCoeff();
- int aIdx = (int)m_constraints[i].m_bodyA;
- int bIdx = (int)m_constraints[i].m_bodyB;
- int localBatch = m_constraints[i].m_batchIdx;
- b3RigidBodyData& bodyA = m_bodies[aIdx];
- b3RigidBodyData& bodyB = m_bodies[bIdx];
-
- if( !m_solveFriction )
- {
- float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};
- float minRambdaDt[4] = {0.f,0.f,0.f,0.f};
-
- solveContact<false>( m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass, (const b3Matrix3x3 &)m_shapes[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass, (const b3Matrix3x3 &)m_shapes[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt );
- }
- else
- {
- float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};
- float minRambdaDt[4] = {0.f,0.f,0.f,0.f};
- float sum = 0;
- for(int j=0; j<4; j++)
- {
- sum +=m_constraints[i].m_appliedRambdaDt[j];
- }
- frictionCoeff = 0.7f;
- for(int j=0; j<4; j++)
- {
- maxRambdaDt[j] = frictionCoeff*sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
- solveFriction( m_constraints[i], (b3Vector3&)bodyA.m_pos, (b3Vector3&)bodyA.m_linVel, (b3Vector3&)bodyA.m_angVel, bodyA.m_invMass,(const b3Matrix3x3 &) m_shapes[aIdx].m_invInertiaWorld,
- (b3Vector3&)bodyB.m_pos, (b3Vector3&)bodyB.m_linVel, (b3Vector3&)bodyB.m_angVel, bodyB.m_invMass,(const b3Matrix3x3 &) m_shapes[bIdx].m_invInertiaWorld,
- maxRambdaDt, minRambdaDt );
-
- }
- }
- }
- */
- }
-
- b3AlignedObjectArray<b3RigidBodyData>& m_bodies;
- b3AlignedObjectArray<b3InertiaData>& m_shapes;
- b3AlignedObjectArray<b3GpuConstraint4>& m_constraints;
- b3AlignedObjectArray<int>* m_batchSizes;
- int m_cellIndex;
- int m_curWgidx;
- int m_start;
- int m_nConstraints;
- bool m_solveFriction;
- int m_maxNumBatches;
-};
-
-void b3Solver::solveContactConstraintHost(b3OpenCLArray<b3RigidBodyData>* bodyBuf, b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, b3AlignedObjectArray<int>* batchSizes)
-{
-#if 0
- {
- int nSplitX = B3_SOLVER_N_SPLIT_X;
- int nSplitY = B3_SOLVER_N_SPLIT_Y;
- int numWorkgroups = B3_SOLVER_N_CELLS/B3_SOLVER_N_BATCHES;
- for (int z=0;z<4;z++)
- {
- for (int y=0;y<4;y++)
- {
- for (int x=0;x<4;x++)
- {
- int newIndex = (x+y*nSplitX+z*nSplitX*nSplitY);
- // printf("newIndex=%d\n",newIndex);
-
- int zIdx = newIndex/(nSplitX*nSplitY);
- int remain = newIndex%(nSplitX*nSplitY);
- int yIdx = remain/nSplitX;
- int xIdx = remain%nSplitX;
- // printf("newIndex=%d\n",newIndex);
- }
- }
- }
-
- //for (int wgIdx=numWorkgroups-1;wgIdx>=0;wgIdx--)
- for (int cellBatch=0;cellBatch<B3_SOLVER_N_BATCHES;cellBatch++)
- {
- for (int wgIdx=0;wgIdx<numWorkgroups;wgIdx++)
- {
- int zIdx = (wgIdx/((nSplitX*nSplitY)/4))*2+((cellBatch&4)>>2);
- int remain= (wgIdx%((nSplitX*nSplitY)/4));
- int yIdx = (remain/(nSplitX/2))*2 + ((cellBatch&2)>>1);
- int xIdx = (remain%(nSplitX/2))*2 + (cellBatch&1);
-
- /*int zIdx = newIndex/(nSplitX*nSplitY);
- int remain = newIndex%(nSplitX*nSplitY);
- int yIdx = remain/nSplitX;
- int xIdx = remain%nSplitX;
- */
- int cellIdx = xIdx+yIdx*nSplitX+zIdx*(nSplitX*nSplitY);
- // printf("wgIdx %d: xIdx=%d, yIdx=%d, zIdx=%d, cellIdx=%d, cell Batch %d\n",wgIdx,xIdx,yIdx,zIdx,cellIdx,cellBatch);
- }
- }
- }
-#endif
-
- b3AlignedObjectArray<b3RigidBodyData> bodyNative;
- bodyBuf->copyToHost(bodyNative);
- b3AlignedObjectArray<b3InertiaData> shapeNative;
- shapeBuf->copyToHost(shapeNative);
- b3AlignedObjectArray<b3GpuConstraint4> constraintNative;
- constraint->copyToHost(constraintNative);
-
- b3AlignedObjectArray<unsigned int> numConstraintsHost;
- m_numConstraints->copyToHost(numConstraintsHost);
-
- //printf("------------------------\n");
- b3AlignedObjectArray<unsigned int> offsetsHost;
- m_offsets->copyToHost(offsetsHost);
- static int frame = 0;
- bool useBatches = true;
- if (useBatches)
- {
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- for (int cellBatch = 0; cellBatch < B3_SOLVER_N_BATCHES; cellBatch++)
- {
- int nSplitX = B3_SOLVER_N_SPLIT_X;
- int nSplitY = B3_SOLVER_N_SPLIT_Y;
- int numWorkgroups = B3_SOLVER_N_CELLS / B3_SOLVER_N_BATCHES;
- //printf("cell Batch %d\n",cellBatch);
- b3AlignedObjectArray<int> usedBodies[B3_SOLVER_N_CELLS];
- for (int i = 0; i < B3_SOLVER_N_CELLS; i++)
- {
- usedBodies[i].resize(0);
- }
-
- //for (int wgIdx=numWorkgroups-1;wgIdx>=0;wgIdx--)
- for (int wgIdx = 0; wgIdx < numWorkgroups; wgIdx++)
- {
- int zIdx = (wgIdx / ((nSplitX * nSplitY) / 4)) * 2 + ((cellBatch & 4) >> 2);
- int remain = (wgIdx % ((nSplitX * nSplitY) / 4));
- int yIdx = (remain / (nSplitX / 2)) * 2 + ((cellBatch & 2) >> 1);
- int xIdx = (remain % (nSplitX / 2)) * 2 + (cellBatch & 1);
- int cellIdx = xIdx + yIdx * nSplitX + zIdx * (nSplitX * nSplitY);
-
- if (numConstraintsHost[cellIdx] == 0)
- continue;
-
- //printf("wgIdx %d: xIdx=%d, yIdx=%d, zIdx=%d, cellIdx=%d, cell Batch %d\n",wgIdx,xIdx,yIdx,zIdx,cellIdx,cellBatch);
- //printf("cell %d has %d constraints\n", cellIdx,numConstraintsHost[cellIdx]);
- if (zIdx)
- {
- //printf("?\n");
- }
-
- if (iter == 0)
- {
- //printf("frame=%d, Cell xIdx=%x, yIdx=%d ",frame, xIdx,yIdx);
- //printf("cellBatch=%d, wgIdx=%d, #constraints in cell=%d\n",cellBatch,wgIdx,numConstraintsHost[cellIdx]);
- }
- const int start = offsetsHost[cellIdx];
- int numConstraintsInCell = numConstraintsHost[cellIdx];
- // const int end = start + numConstraintsInCell;
-
- SolveTask task(bodyNative, shapeNative, constraintNative, start, numConstraintsInCell, maxNumBatches, usedBodies, wgIdx, batchSizes, cellIdx);
- task.m_solveFriction = false;
- task.run(0);
- }
- }
- }
-
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- for (int cellBatch = 0; cellBatch < B3_SOLVER_N_BATCHES; cellBatch++)
- {
- int nSplitX = B3_SOLVER_N_SPLIT_X;
- int nSplitY = B3_SOLVER_N_SPLIT_Y;
-
- int numWorkgroups = B3_SOLVER_N_CELLS / B3_SOLVER_N_BATCHES;
-
- for (int wgIdx = 0; wgIdx < numWorkgroups; wgIdx++)
- {
- int zIdx = (wgIdx / ((nSplitX * nSplitY) / 4)) * 2 + ((cellBatch & 4) >> 2);
- int remain = (wgIdx % ((nSplitX * nSplitY) / 4));
- int yIdx = (remain / (nSplitX / 2)) * 2 + ((cellBatch & 2) >> 1);
- int xIdx = (remain % (nSplitX / 2)) * 2 + (cellBatch & 1);
-
- int cellIdx = xIdx + yIdx * nSplitX + zIdx * (nSplitX * nSplitY);
-
- if (numConstraintsHost[cellIdx] == 0)
- continue;
-
- //printf("yIdx=%d\n",yIdx);
-
- const int start = offsetsHost[cellIdx];
- int numConstraintsInCell = numConstraintsHost[cellIdx];
- // const int end = start + numConstraintsInCell;
-
- SolveTask task(bodyNative, shapeNative, constraintNative, start, numConstraintsInCell, maxNumBatches, 0, 0, batchSizes, cellIdx);
- task.m_solveFriction = true;
- task.run(0);
- }
- }
- }
- }
- else
- {
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- SolveTask task(bodyNative, shapeNative, constraintNative, 0, n, maxNumBatches, 0, 0, 0, 0);
- task.m_solveFriction = false;
- task.run(0);
- }
-
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- SolveTask task(bodyNative, shapeNative, constraintNative, 0, n, maxNumBatches, 0, 0, 0, 0);
- task.m_solveFriction = true;
- task.run(0);
- }
- }
-
- bodyBuf->copyFromHost(bodyNative);
- shapeBuf->copyFromHost(shapeNative);
- constraint->copyFromHost(constraintNative);
- frame++;
-}
-
-void checkConstraintBatch(const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
- const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint,
- b3OpenCLArray<unsigned int>* m_numConstraints,
- b3OpenCLArray<unsigned int>* m_offsets,
- int batchId)
-{
- // b3BufferInfoCL( m_numConstraints->getBufferCL() ),
- // b3BufferInfoCL( m_offsets->getBufferCL() )
-
- int cellBatch = batchId;
- const int nn = B3_SOLVER_N_CELLS;
- // int numWorkItems = 64*nn/B3_SOLVER_N_BATCHES;
-
- b3AlignedObjectArray<unsigned int> gN;
- m_numConstraints->copyToHost(gN);
- b3AlignedObjectArray<unsigned int> gOffsets;
- m_offsets->copyToHost(gOffsets);
- int nSplitX = B3_SOLVER_N_SPLIT_X;
- int nSplitY = B3_SOLVER_N_SPLIT_Y;
-
- // int bIdx = batchId;
-
- b3AlignedObjectArray<b3GpuConstraint4> cpuConstraints;
- constraint->copyToHost(cpuConstraints);
-
- printf("batch = %d\n", batchId);
-
- int numWorkgroups = nn / B3_SOLVER_N_BATCHES;
- b3AlignedObjectArray<int> usedBodies;
-
- for (int wgIdx = 0; wgIdx < numWorkgroups; wgIdx++)
- {
- printf("wgIdx = %d ", wgIdx);
-
- int zIdx = (wgIdx / ((nSplitX * nSplitY)) / 2) * 2 + ((cellBatch & 4) >> 2);
- int remain = wgIdx % ((nSplitX * nSplitY));
- int yIdx = (remain % (nSplitX / 2)) * 2 + ((cellBatch & 2) >> 1);
- int xIdx = (remain / (nSplitX / 2)) * 2 + (cellBatch & 1);
-
- int cellIdx = xIdx + yIdx * nSplitX + zIdx * (nSplitX * nSplitY);
- printf("cellIdx=%d\n", cellIdx);
- if (gN[cellIdx] == 0)
- continue;
-
- const int start = gOffsets[cellIdx];
- const int end = start + gN[cellIdx];
-
- for (int c = start; c < end; c++)
- {
- b3GpuConstraint4& constraint = cpuConstraints[c];
- //printf("constraint (%d,%d)\n", constraint.m_bodyA,constraint.m_bodyB);
- if (usedBodies.findLinearSearch(constraint.m_bodyA) < usedBodies.size())
- {
- printf("error?\n");
- }
- if (usedBodies.findLinearSearch(constraint.m_bodyB) < usedBodies.size())
- {
- printf("error?\n");
- }
- }
-
- for (int c = start; c < end; c++)
- {
- b3GpuConstraint4& constraint = cpuConstraints[c];
- usedBodies.push_back(constraint.m_bodyA);
- usedBodies.push_back(constraint.m_bodyB);
- }
- }
-}
-
-static bool verify = false;
-
-void b3Solver::solveContactConstraint(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches)
-{
- b3Int4 cdata = b3MakeInt4(n, 0, 0, 0);
- {
- const int nn = B3_SOLVER_N_CELLS;
-
- cdata.x = 0;
- cdata.y = maxNumBatches; //250;
-
- int numWorkItems = 64 * nn / B3_SOLVER_N_BATCHES;
-#ifdef DEBUG_ME
- SolverDebugInfo* debugInfo = new SolverDebugInfo[numWorkItems];
- adl::b3OpenCLArray<SolverDebugInfo> gpuDebugInfo(data->m_device, numWorkItems);
-#endif
-
- {
- B3_PROFILE("m_batchSolveKernel iterations");
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- for (int ib = 0; ib < B3_SOLVER_N_BATCHES; ib++)
- {
- if (verify)
- {
- checkConstraintBatch(bodyBuf, shapeBuf, constraint, m_numConstraints, m_offsets, ib);
- }
-
-#ifdef DEBUG_ME
- memset(debugInfo, 0, sizeof(SolverDebugInfo) * numWorkItems);
- gpuDebugInfo.write(debugInfo, numWorkItems);
-#endif
-
- cdata.z = ib;
-
- b3LauncherCL launcher(m_queue, m_solveContactKernel, "m_solveContactKernel");
-#if 1
-
- b3BufferInfoCL bInfo[] = {
-
- b3BufferInfoCL(bodyBuf->getBufferCL()),
- b3BufferInfoCL(shapeBuf->getBufferCL()),
- b3BufferInfoCL(constraint->getBufferCL()),
- b3BufferInfoCL(m_numConstraints->getBufferCL()),
- b3BufferInfoCL(m_offsets->getBufferCL())
-#ifdef DEBUG_ME
- ,
- b3BufferInfoCL(&gpuDebugInfo)
-#endif
- };
-
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- //launcher.setConst( cdata.x );
- launcher.setConst(cdata.y);
- launcher.setConst(cdata.z);
- b3Int4 nSplit;
- nSplit.x = B3_SOLVER_N_SPLIT_X;
- nSplit.y = B3_SOLVER_N_SPLIT_Y;
- nSplit.z = B3_SOLVER_N_SPLIT_Z;
-
- launcher.setConst(nSplit);
- launcher.launch1D(numWorkItems, 64);
-
-#else
- const char* fileName = "m_batchSolveKernel.bin";
- FILE* f = fopen(fileName, "rb");
- if (f)
- {
- int sizeInBytes = 0;
- if (fseek(f, 0, SEEK_END) || (sizeInBytes = ftell(f)) == EOF || fseek(f, 0, SEEK_SET))
- {
- printf("error, cannot get file size\n");
- exit(0);
- }
-
- unsigned char* buf = (unsigned char*)malloc(sizeInBytes);
- fread(buf, sizeInBytes, 1, f);
- int serializedBytes = launcher.deserializeArgs(buf, sizeInBytes, m_context);
- int num = *(int*)&buf[serializedBytes];
-
- launcher.launch1D(num);
-
- //this clFinish is for testing on errors
- clFinish(m_queue);
- }
-
-#endif
-
-#ifdef DEBUG_ME
- clFinish(m_queue);
- gpuDebugInfo.read(debugInfo, numWorkItems);
- clFinish(m_queue);
- for (int i = 0; i < numWorkItems; i++)
- {
- if (debugInfo[i].m_valInt2 > 0)
- {
- printf("debugInfo[i].m_valInt2 = %d\n", i, debugInfo[i].m_valInt2);
- }
-
- if (debugInfo[i].m_valInt3 > 0)
- {
- printf("debugInfo[i].m_valInt3 = %d\n", i, debugInfo[i].m_valInt3);
- }
- }
-#endif //DEBUG_ME
- }
- }
-
- clFinish(m_queue);
- }
-
- cdata.x = 1;
- bool applyFriction = true;
- if (applyFriction)
- {
- B3_PROFILE("m_batchSolveKernel iterations2");
- for (int iter = 0; iter < m_nIterations; iter++)
- {
- for (int ib = 0; ib < B3_SOLVER_N_BATCHES; ib++)
- {
- cdata.z = ib;
-
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL(bodyBuf->getBufferCL()),
- b3BufferInfoCL(shapeBuf->getBufferCL()),
- b3BufferInfoCL(constraint->getBufferCL()),
- b3BufferInfoCL(m_numConstraints->getBufferCL()),
- b3BufferInfoCL(m_offsets->getBufferCL())
-#ifdef DEBUG_ME
- ,
- b3BufferInfoCL(&gpuDebugInfo)
-#endif //DEBUG_ME
- };
- b3LauncherCL launcher(m_queue, m_solveFrictionKernel, "m_solveFrictionKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- //launcher.setConst( cdata.x );
- launcher.setConst(cdata.y);
- launcher.setConst(cdata.z);
- b3Int4 nSplit;
- nSplit.x = B3_SOLVER_N_SPLIT_X;
- nSplit.y = B3_SOLVER_N_SPLIT_Y;
- nSplit.z = B3_SOLVER_N_SPLIT_Z;
-
- launcher.setConst(nSplit);
-
- launcher.launch1D(64 * nn / B3_SOLVER_N_BATCHES, 64);
- }
- }
- clFinish(m_queue);
- }
-#ifdef DEBUG_ME
- delete[] debugInfo;
-#endif //DEBUG_ME
- }
-}
-
-void b3Solver::convertToConstraints(const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
- const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3Contact4>* contactsIn, b3OpenCLArray<b3GpuConstraint4>* contactCOut, void* additionalData,
- int nContacts, const ConstraintCfg& cfg)
-{
- // b3OpenCLArray<b3GpuConstraint4>* constraintNative =0;
- contactCOut->resize(nContacts);
- struct CB
- {
- int m_nContacts;
- float m_dt;
- float m_positionDrift;
- float m_positionConstraintCoeff;
- };
-
- {
- CB cdata;
- cdata.m_nContacts = nContacts;
- cdata.m_dt = cfg.m_dt;
- cdata.m_positionDrift = cfg.m_positionDrift;
- cdata.m_positionConstraintCoeff = cfg.m_positionConstraintCoeff;
-
- if (gConvertConstraintOnCpu)
- {
- b3AlignedObjectArray<b3RigidBodyData> gBodies;
- bodyBuf->copyToHost(gBodies);
-
- b3AlignedObjectArray<b3Contact4> gContact;
- contactsIn->copyToHost(gContact);
-
- b3AlignedObjectArray<b3InertiaData> gShapes;
- shapeBuf->copyToHost(gShapes);
-
- b3AlignedObjectArray<b3GpuConstraint4> gConstraintOut;
- gConstraintOut.resize(nContacts);
-
- B3_PROFILE("cpu contactToConstraintKernel");
- for (int gIdx = 0; gIdx < nContacts; gIdx++)
- {
- int aIdx = abs(gContact[gIdx].m_bodyAPtrAndSignBit);
- int bIdx = abs(gContact[gIdx].m_bodyBPtrAndSignBit);
-
- b3Float4 posA = gBodies[aIdx].m_pos;
- b3Float4 linVelA = gBodies[aIdx].m_linVel;
- b3Float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- b3Mat3x3 invInertiaA = gShapes[aIdx].m_initInvInertia;
-
- b3Float4 posB = gBodies[bIdx].m_pos;
- b3Float4 linVelB = gBodies[bIdx].m_linVel;
- b3Float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- b3Mat3x3 invInertiaB = gShapes[bIdx].m_initInvInertia;
-
- b3ContactConstraint4_t cs;
-
- setConstraint4(posA, linVelA, angVelA, invMassA, invInertiaA, posB, linVelB, angVelB, invMassB, invInertiaB,
- &gContact[gIdx], cdata.m_dt, cdata.m_positionDrift, cdata.m_positionConstraintCoeff,
- &cs);
-
- cs.m_batchIdx = gContact[gIdx].m_batchIdx;
-
- gConstraintOut[gIdx] = (b3GpuConstraint4&)cs;
- }
-
- contactCOut->copyFromHost(gConstraintOut);
- }
- else
- {
- B3_PROFILE("gpu m_contactToConstraintKernel");
-
- b3BufferInfoCL bInfo[] = {b3BufferInfoCL(contactsIn->getBufferCL()), b3BufferInfoCL(bodyBuf->getBufferCL()), b3BufferInfoCL(shapeBuf->getBufferCL()),
- b3BufferInfoCL(contactCOut->getBufferCL())};
- b3LauncherCL launcher(m_queue, m_contactToConstraintKernel, "m_contactToConstraintKernel");
- launcher.setBuffers(bInfo, sizeof(bInfo) / sizeof(b3BufferInfoCL));
- //launcher.setConst( cdata );
-
- launcher.setConst(cdata.m_nContacts);
- launcher.setConst(cdata.m_dt);
- launcher.setConst(cdata.m_positionDrift);
- launcher.setConst(cdata.m_positionConstraintCoeff);
-
- launcher.launch1D(nContacts, 64);
- clFinish(m_queue);
- }
- }
-}
-
-/*
-void b3Solver::sortContacts( const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
- b3OpenCLArray<b3Contact4>* contactsIn, void* additionalData,
- int nContacts, const b3Solver::ConstraintCfg& cfg )
-{
-
-
-
- const int sortAlignment = 512; // todo. get this out of sort
- if( cfg.m_enableParallelSolve )
- {
-
-
- int sortSize = NEXTMULTIPLEOF( nContacts, sortAlignment );
-
- b3OpenCLArray<unsigned int>* countsNative = m_numConstraints;//BufferUtils::map<TYPE_CL, false>( data->m_device, &countsHost );
- b3OpenCLArray<unsigned int>* offsetsNative = m_offsets;//BufferUtils::map<TYPE_CL, false>( data->m_device, &offsetsHost );
-
- { // 2. set cell idx
- struct CB
- {
- int m_nContacts;
- int m_staticIdx;
- float m_scale;
- int m_nSplit;
- };
-
- b3Assert( sortSize%64 == 0 );
- CB cdata;
- cdata.m_nContacts = nContacts;
- cdata.m_staticIdx = cfg.m_staticIdx;
- cdata.m_scale = 1.f/(N_OBJ_PER_SPLIT*cfg.m_averageExtent);
- cdata.m_nSplit = B3_SOLVER_N_SPLIT;
-
-
- b3BufferInfoCL bInfo[] = { b3BufferInfoCL( contactsIn->getBufferCL() ), b3BufferInfoCL( bodyBuf->getBufferCL() ), b3BufferInfoCL( m_sortDataBuffer->getBufferCL() ) };
- b3LauncherCL launcher( m_queue, m_setSortDataKernel );
- launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(b3BufferInfoCL) );
- launcher.setConst( cdata );
- launcher.launch1D( sortSize, 64 );
- }
-
- { // 3. sort by cell idx
- int n = B3_SOLVER_N_SPLIT*B3_SOLVER_N_SPLIT;
- int sortBit = 32;
- //if( n <= 0xffff ) sortBit = 16;
- //if( n <= 0xff ) sortBit = 8;
- m_sort32->execute(*m_sortDataBuffer,sortSize);
- }
- { // 4. find entries
- m_search->execute( *m_sortDataBuffer, nContacts, *countsNative, B3_SOLVER_N_SPLIT*B3_SOLVER_N_SPLIT, b3BoundSearchCL::COUNT);
-
- m_scan->execute( *countsNative, *offsetsNative, B3_SOLVER_N_SPLIT*B3_SOLVER_N_SPLIT );
- }
-
- { // 5. sort constraints by cellIdx
- // todo. preallocate this
-// b3Assert( contactsIn->getType() == TYPE_HOST );
-// b3OpenCLArray<b3Contact4>* out = BufferUtils::map<TYPE_CL, false>( data->m_device, contactsIn ); // copying contacts to this buffer
-
- {
-
-
- b3Int4 cdata; cdata.x = nContacts;
- b3BufferInfoCL bInfo[] = { b3BufferInfoCL( contactsIn->getBufferCL() ), b3BufferInfoCL( m_contactBuffer->getBufferCL() ), b3BufferInfoCL( m_sortDataBuffer->getBufferCL() ) };
- b3LauncherCL launcher( m_queue, m_reorderContactKernel );
- launcher.setBuffers( bInfo, sizeof(bInfo)/sizeof(b3BufferInfoCL) );
- launcher.setConst( cdata );
- launcher.launch1D( nContacts, 64 );
- }
-// BufferUtils::unmap<true>( out, contactsIn, nContacts );
- }
- }
-
-
-}
-
-*/
-void b3Solver::batchContacts(b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* nNative, b3OpenCLArray<unsigned int>* offsetsNative, int staticIdx)
-{
- int numWorkItems = 64 * B3_SOLVER_N_CELLS;
- {
- B3_PROFILE("batch generation");
-
- b3Int4 cdata;
- cdata.x = nContacts;
- cdata.y = 0;
- cdata.z = staticIdx;
-
-#ifdef BATCH_DEBUG
- SolverDebugInfo* debugInfo = new SolverDebugInfo[numWorkItems];
- adl::b3OpenCLArray<SolverDebugInfo> gpuDebugInfo(data->m_device, numWorkItems);
- memset(debugInfo, 0, sizeof(SolverDebugInfo) * numWorkItems);
- gpuDebugInfo.write(debugInfo, numWorkItems);
-#endif
-
-#if 0
- b3BufferInfoCL bInfo[] = {
- b3BufferInfoCL( contacts->getBufferCL() ),
- b3BufferInfoCL( m_contactBuffer2->getBufferCL()),
- b3BufferInfoCL( nNative->getBufferCL() ),
- b3BufferInfoCL( offsetsNative->getBufferCL() ),
-#ifdef BATCH_DEBUG
- , b3BufferInfoCL(&gpuDebugInfo)
-#endif
- };
-#endif
-
- {
- m_batchSizes.resize(nNative->size());
- B3_PROFILE("batchingKernel");
- //b3LauncherCL launcher( m_queue, m_batchingKernel);
- cl_kernel k = useNewBatchingKernel ? m_batchingKernelNew : m_batchingKernel;
-
- b3LauncherCL launcher(m_queue, k, "*batchingKernel");
- if (!useNewBatchingKernel)
- {
- launcher.setBuffer(contacts->getBufferCL());
- }
- launcher.setBuffer(m_contactBuffer2->getBufferCL());
- launcher.setBuffer(nNative->getBufferCL());
- launcher.setBuffer(offsetsNative->getBufferCL());
-
- launcher.setBuffer(m_batchSizes.getBufferCL());
-
- //launcher.setConst( cdata );
- launcher.setConst(staticIdx);
-
- launcher.launch1D(numWorkItems, 64);
- //clFinish(m_queue);
- //b3AlignedObjectArray<int> batchSizesCPU;
- //m_batchSizes.copyToHost(batchSizesCPU);
- //printf(".\n");
- }
-
-#ifdef BATCH_DEBUG
- aaaa
- b3Contact4* hostContacts = new b3Contact4[nContacts];
- m_contactBuffer->read(hostContacts, nContacts);
- clFinish(m_queue);
-
- gpuDebugInfo.read(debugInfo, numWorkItems);
- clFinish(m_queue);
-
- for (int i = 0; i < numWorkItems; i++)
- {
- if (debugInfo[i].m_valInt1 > 0)
- {
- printf("catch\n");
- }
- if (debugInfo[i].m_valInt2 > 0)
- {
- printf("catch22\n");
- }
-
- if (debugInfo[i].m_valInt3 > 0)
- {
- printf("catch666\n");
- }
-
- if (debugInfo[i].m_valInt4 > 0)
- {
- printf("catch777\n");
- }
- }
- delete[] debugInfo;
-#endif //BATCH_DEBUG
- }
-
- // copy buffer to buffer
- //b3Assert(m_contactBuffer->size()==nContacts);
- //contacts->copyFromOpenCLArray( *m_contactBuffer);
- //clFinish(m_queue);//needed?
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h
deleted file mode 100644
index ee63531d78..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/b3Solver.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-#ifndef __ADL_SOLVER_H
-#define __ADL_SOLVER_H
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3OpenCLArray.h"
-#include "b3GpuConstraint4.h"
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-#include "Bullet3Collision/NarrowPhaseCollision/b3Contact4.h"
-
-#include "Bullet3OpenCL/ParallelPrimitives/b3PrefixScanCL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3RadixSort32CL.h"
-#include "Bullet3OpenCL/ParallelPrimitives/b3BoundSearchCL.h"
-
-#include "Bullet3OpenCL/Initialize/b3OpenCLUtils.h"
-
-#define B3NEXTMULTIPLEOF(num, alignment) (((num) / (alignment) + (((num) % (alignment) == 0) ? 0 : 1)) * (alignment))
-
-enum
-{
- B3_SOLVER_N_SPLIT_X = 8, //16,//4,
- B3_SOLVER_N_SPLIT_Y = 4, //16,//4,
- B3_SOLVER_N_SPLIT_Z = 8, //,
- B3_SOLVER_N_CELLS = B3_SOLVER_N_SPLIT_X * B3_SOLVER_N_SPLIT_Y * B3_SOLVER_N_SPLIT_Z,
- B3_SOLVER_N_BATCHES = 8, //4,//8,//4,
- B3_MAX_NUM_BATCHES = 128,
-};
-
-class b3SolverBase
-{
-public:
- struct ConstraintCfg
- {
- ConstraintCfg(float dt = 0.f) : m_positionDrift(0.005f), m_positionConstraintCoeff(0.2f), m_dt(dt), m_staticIdx(-1) {}
-
- float m_positionDrift;
- float m_positionConstraintCoeff;
- float m_dt;
- bool m_enableParallelSolve;
- float m_batchCellSize;
- int m_staticIdx;
- };
-};
-
-class b3Solver : public b3SolverBase
-{
-public:
- cl_context m_context;
- cl_device_id m_device;
- cl_command_queue m_queue;
-
- b3OpenCLArray<unsigned int>* m_numConstraints;
- b3OpenCLArray<unsigned int>* m_offsets;
- b3OpenCLArray<int> m_batchSizes;
-
- int m_nIterations;
- cl_kernel m_batchingKernel;
- cl_kernel m_batchingKernelNew;
- cl_kernel m_solveContactKernel;
- cl_kernel m_solveFrictionKernel;
- cl_kernel m_contactToConstraintKernel;
- cl_kernel m_setSortDataKernel;
- cl_kernel m_reorderContactKernel;
- cl_kernel m_copyConstraintKernel;
-
- class b3RadixSort32CL* m_sort32;
- class b3BoundSearchCL* m_search;
- class b3PrefixScanCL* m_scan;
-
- b3OpenCLArray<b3SortData>* m_sortDataBuffer;
- b3OpenCLArray<b3Contact4>* m_contactBuffer2;
-
- enum
- {
- DYNAMIC_CONTACT_ALLOCATION_THRESHOLD = 2000000,
- };
-
- b3Solver(cl_context ctx, cl_device_id device, cl_command_queue queue, int pairCapacity);
-
- virtual ~b3Solver();
-
- void solveContactConstraint(const b3OpenCLArray<b3RigidBodyData>* bodyBuf, const b3OpenCLArray<b3InertiaData>* inertiaBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches);
-
- void solveContactConstraintHost(b3OpenCLArray<b3RigidBodyData>* bodyBuf, b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3GpuConstraint4>* constraint, void* additionalData, int n, int maxNumBatches, b3AlignedObjectArray<int>* batchSizes);
-
- void convertToConstraints(const b3OpenCLArray<b3RigidBodyData>* bodyBuf,
- const b3OpenCLArray<b3InertiaData>* shapeBuf,
- b3OpenCLArray<b3Contact4>* contactsIn, b3OpenCLArray<b3GpuConstraint4>* contactCOut, void* additionalData,
- int nContacts, const ConstraintCfg& cfg);
-
- void batchContacts(b3OpenCLArray<b3Contact4>* contacts, int nContacts, b3OpenCLArray<unsigned int>* n, b3OpenCLArray<unsigned int>* offsets, int staticIdx);
-};
-
-#endif //__ADL_SOLVER_H
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.cl
deleted file mode 100644
index 3b891b863d..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.cl
+++ /dev/null
@@ -1,353 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile __global int*
-#endif
-
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-#define WG_SIZE 64
-
-
-
-
-
-typedef struct
-{
- int m_n;
- int m_start;
- int m_staticIdx;
- int m_paddings[1];
-} ConstBuffer;
-
-typedef struct
-{
- int m_a;
- int m_b;
- u32 m_idx;
-}Elem;
-
-#define STACK_SIZE (WG_SIZE*10)
-//#define STACK_SIZE (WG_SIZE)
-#define RING_SIZE 1024
-#define RING_SIZE_MASK (RING_SIZE-1)
-#define CHECK_SIZE (WG_SIZE)
-
-
-#define GET_RING_CAPACITY (RING_SIZE - ldsRingEnd)
-#define RING_END ldsTmp
-
-u32 readBuf(__local u32* buff, int idx)
-{
- idx = idx % (32*CHECK_SIZE);
- int bitIdx = idx%32;
- int bufIdx = idx/32;
- return buff[bufIdx] & (1<<bitIdx);
-}
-
-void writeBuf(__local u32* buff, int idx)
-{
- idx = idx % (32*CHECK_SIZE);
- int bitIdx = idx%32;
- int bufIdx = idx/32;
-// buff[bufIdx] |= (1<<bitIdx);
- atom_or( &buff[bufIdx], (1<<bitIdx) );
-}
-
-u32 tryWrite(__local u32* buff, int idx)
-{
- idx = idx % (32*CHECK_SIZE);
- int bitIdx = idx%32;
- int bufIdx = idx/32;
- u32 ans = (u32)atom_or( &buff[bufIdx], (1<<bitIdx) );
- return ((ans >> bitIdx)&1) == 0;
-}
-
-// batching on the GPU
-__kernel void CreateBatches( __global const struct b3Contact4Data* gConstraints, __global struct b3Contact4Data* gConstraintsOut,
- __global const u32* gN, __global const u32* gStart, __global int* batchSizes,
- int m_staticIdx )
-{
- __local u32 ldsStackIdx[STACK_SIZE];
- __local u32 ldsStackEnd;
- __local Elem ldsRingElem[RING_SIZE];
- __local u32 ldsRingEnd;
- __local u32 ldsTmp;
- __local u32 ldsCheckBuffer[CHECK_SIZE];
- __local u32 ldsFixedBuffer[CHECK_SIZE];
- __local u32 ldsGEnd;
- __local u32 ldsDstEnd;
-
- int wgIdx = GET_GROUP_IDX;
- int lIdx = GET_LOCAL_IDX;
-
- const int m_n = gN[wgIdx];
- const int m_start = gStart[wgIdx];
-
- if( lIdx == 0 )
- {
- ldsRingEnd = 0;
- ldsGEnd = 0;
- ldsStackEnd = 0;
- ldsDstEnd = m_start;
- }
-
-
-
-// while(1)
-//was 250
- int ie=0;
- int maxBatch = 0;
- for(ie=0; ie<50; ie++)
- {
- ldsFixedBuffer[lIdx] = 0;
-
- for(int giter=0; giter<4; giter++)
- {
- int ringCap = GET_RING_CAPACITY;
-
- // 1. fill ring
- if( ldsGEnd < m_n )
- {
- while( ringCap > WG_SIZE )
- {
- if( ldsGEnd >= m_n ) break;
- if( lIdx < ringCap - WG_SIZE )
- {
- int srcIdx;
- AtomInc1( ldsGEnd, srcIdx );
- if( srcIdx < m_n )
- {
- int dstIdx;
- AtomInc1( ldsRingEnd, dstIdx );
-
- int a = gConstraints[m_start+srcIdx].m_bodyAPtrAndSignBit;
- int b = gConstraints[m_start+srcIdx].m_bodyBPtrAndSignBit;
- ldsRingElem[dstIdx].m_a = (a>b)? b:a;
- ldsRingElem[dstIdx].m_b = (a>b)? a:b;
- ldsRingElem[dstIdx].m_idx = srcIdx;
- }
- }
- ringCap = GET_RING_CAPACITY;
- }
- }
-
- GROUP_LDS_BARRIER;
-
- // 2. fill stack
- __local Elem* dst = ldsRingElem;
- if( lIdx == 0 ) RING_END = 0;
-
- int srcIdx=lIdx;
- int end = ldsRingEnd;
-
- {
- for(int ii=0; ii<end; ii+=WG_SIZE, srcIdx+=WG_SIZE)
- {
- Elem e;
- if(srcIdx<end) e = ldsRingElem[srcIdx];
- bool done = (srcIdx<end)?false:true;
-
- for(int i=lIdx; i<CHECK_SIZE; i+=WG_SIZE) ldsCheckBuffer[lIdx] = 0;
-
- if( !done )
- {
- int aUsed = readBuf( ldsFixedBuffer, abs(e.m_a));
- int bUsed = readBuf( ldsFixedBuffer, abs(e.m_b));
-
- if( aUsed==0 && bUsed==0 )
- {
- int aAvailable=1;
- int bAvailable=1;
- int ea = abs(e.m_a);
- int eb = abs(e.m_b);
-
- bool aStatic = (e.m_a<0) ||(ea==m_staticIdx);
- bool bStatic = (e.m_b<0) ||(eb==m_staticIdx);
-
- if (!aStatic)
- aAvailable = tryWrite( ldsCheckBuffer, ea );
- if (!bStatic)
- bAvailable = tryWrite( ldsCheckBuffer, eb );
-
- //aAvailable = aStatic? 1: aAvailable;
- //bAvailable = bStatic? 1: bAvailable;
-
- bool success = (aAvailable && bAvailable);
- if(success)
- {
-
- if (!aStatic)
- writeBuf( ldsFixedBuffer, ea );
- if (!bStatic)
- writeBuf( ldsFixedBuffer, eb );
- }
- done = success;
- }
- }
-
- // put it aside
- if(srcIdx<end)
- {
- if( done )
- {
- int dstIdx; AtomInc1( ldsStackEnd, dstIdx );
- if( dstIdx < STACK_SIZE )
- ldsStackIdx[dstIdx] = e.m_idx;
- else{
- done = false;
- AtomAdd( ldsStackEnd, -1 );
- }
- }
- if( !done )
- {
- int dstIdx; AtomInc1( RING_END, dstIdx );
- dst[dstIdx] = e;
- }
- }
-
- // if filled, flush
- if( ldsStackEnd == STACK_SIZE )
- {
- for(int i=lIdx; i<STACK_SIZE; i+=WG_SIZE)
- {
- int idx = m_start + ldsStackIdx[i];
- int dstIdx; AtomInc1( ldsDstEnd, dstIdx );
- gConstraintsOut[ dstIdx ] = gConstraints[ idx ];
- gConstraintsOut[ dstIdx ].m_batchIdx = ie;
- }
- if( lIdx == 0 ) ldsStackEnd = 0;
-
- //for(int i=lIdx; i<CHECK_SIZE; i+=WG_SIZE)
- ldsFixedBuffer[lIdx] = 0;
- }
- }
- }
-
- if( lIdx == 0 ) ldsRingEnd = RING_END;
- }
-
- GROUP_LDS_BARRIER;
-
- for(int i=lIdx; i<ldsStackEnd; i+=WG_SIZE)
- {
- int idx = m_start + ldsStackIdx[i];
- int dstIdx; AtomInc1( ldsDstEnd, dstIdx );
- gConstraintsOut[ dstIdx ] = gConstraints[ idx ];
- gConstraintsOut[ dstIdx ].m_batchIdx = ie;
- }
-
- // in case it couldn't consume any pair. Flush them
- // todo. Serial batch worth while?
- if( ldsStackEnd == 0 )
- {
- for(int i=lIdx; i<ldsRingEnd; i+=WG_SIZE)
- {
- int idx = m_start + ldsRingElem[i].m_idx;
- int dstIdx; AtomInc1( ldsDstEnd, dstIdx );
- gConstraintsOut[ dstIdx ] = gConstraints[ idx ];
- int curBatch = 100+i;
- if (maxBatch < curBatch)
- maxBatch = curBatch;
-
- gConstraintsOut[ dstIdx ].m_batchIdx = curBatch;
-
- }
- GROUP_LDS_BARRIER;
- if( lIdx == 0 ) ldsRingEnd = 0;
- }
-
- if( lIdx == 0 ) ldsStackEnd = 0;
-
- GROUP_LDS_BARRIER;
-
- // termination
- if( ldsGEnd == m_n && ldsRingEnd == 0 )
- break;
- }
-
- if( lIdx == 0 )
- {
- if (maxBatch < ie)
- maxBatch=ie;
- batchSizes[wgIdx]=maxBatch;
- }
-
-}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.h
deleted file mode 100644
index 7c73c96baa..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernels.h
+++ /dev/null
@@ -1,387 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* batchingKernelsCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile __global int*\n"
- "#endif\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "#define WG_SIZE 64\n"
- "typedef struct \n"
- "{\n"
- " int m_n;\n"
- " int m_start;\n"
- " int m_staticIdx;\n"
- " int m_paddings[1];\n"
- "} ConstBuffer;\n"
- "typedef struct \n"
- "{\n"
- " int m_a;\n"
- " int m_b;\n"
- " u32 m_idx;\n"
- "}Elem;\n"
- "#define STACK_SIZE (WG_SIZE*10)\n"
- "//#define STACK_SIZE (WG_SIZE)\n"
- "#define RING_SIZE 1024\n"
- "#define RING_SIZE_MASK (RING_SIZE-1)\n"
- "#define CHECK_SIZE (WG_SIZE)\n"
- "#define GET_RING_CAPACITY (RING_SIZE - ldsRingEnd)\n"
- "#define RING_END ldsTmp\n"
- "u32 readBuf(__local u32* buff, int idx)\n"
- "{\n"
- " idx = idx % (32*CHECK_SIZE);\n"
- " int bitIdx = idx%32;\n"
- " int bufIdx = idx/32;\n"
- " return buff[bufIdx] & (1<<bitIdx);\n"
- "}\n"
- "void writeBuf(__local u32* buff, int idx)\n"
- "{\n"
- " idx = idx % (32*CHECK_SIZE);\n"
- " int bitIdx = idx%32;\n"
- " int bufIdx = idx/32;\n"
- "// buff[bufIdx] |= (1<<bitIdx);\n"
- " atom_or( &buff[bufIdx], (1<<bitIdx) );\n"
- "}\n"
- "u32 tryWrite(__local u32* buff, int idx)\n"
- "{\n"
- " idx = idx % (32*CHECK_SIZE);\n"
- " int bitIdx = idx%32;\n"
- " int bufIdx = idx/32;\n"
- " u32 ans = (u32)atom_or( &buff[bufIdx], (1<<bitIdx) );\n"
- " return ((ans >> bitIdx)&1) == 0;\n"
- "}\n"
- "// batching on the GPU\n"
- "__kernel void CreateBatches( __global const struct b3Contact4Data* gConstraints, __global struct b3Contact4Data* gConstraintsOut,\n"
- " __global const u32* gN, __global const u32* gStart, __global int* batchSizes, \n"
- " int m_staticIdx )\n"
- "{\n"
- " __local u32 ldsStackIdx[STACK_SIZE];\n"
- " __local u32 ldsStackEnd;\n"
- " __local Elem ldsRingElem[RING_SIZE];\n"
- " __local u32 ldsRingEnd;\n"
- " __local u32 ldsTmp;\n"
- " __local u32 ldsCheckBuffer[CHECK_SIZE];\n"
- " __local u32 ldsFixedBuffer[CHECK_SIZE];\n"
- " __local u32 ldsGEnd;\n"
- " __local u32 ldsDstEnd;\n"
- " int wgIdx = GET_GROUP_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " \n"
- " const int m_n = gN[wgIdx];\n"
- " const int m_start = gStart[wgIdx];\n"
- " \n"
- " if( lIdx == 0 )\n"
- " {\n"
- " ldsRingEnd = 0;\n"
- " ldsGEnd = 0;\n"
- " ldsStackEnd = 0;\n"
- " ldsDstEnd = m_start;\n"
- " }\n"
- " \n"
- " \n"
- " \n"
- "// while(1)\n"
- "//was 250\n"
- " int ie=0;\n"
- " int maxBatch = 0;\n"
- " for(ie=0; ie<50; ie++)\n"
- " {\n"
- " ldsFixedBuffer[lIdx] = 0;\n"
- " for(int giter=0; giter<4; giter++)\n"
- " {\n"
- " int ringCap = GET_RING_CAPACITY;\n"
- " \n"
- " // 1. fill ring\n"
- " if( ldsGEnd < m_n )\n"
- " {\n"
- " while( ringCap > WG_SIZE )\n"
- " {\n"
- " if( ldsGEnd >= m_n ) break;\n"
- " if( lIdx < ringCap - WG_SIZE )\n"
- " {\n"
- " int srcIdx;\n"
- " AtomInc1( ldsGEnd, srcIdx );\n"
- " if( srcIdx < m_n )\n"
- " {\n"
- " int dstIdx;\n"
- " AtomInc1( ldsRingEnd, dstIdx );\n"
- " \n"
- " int a = gConstraints[m_start+srcIdx].m_bodyAPtrAndSignBit;\n"
- " int b = gConstraints[m_start+srcIdx].m_bodyBPtrAndSignBit;\n"
- " ldsRingElem[dstIdx].m_a = (a>b)? b:a;\n"
- " ldsRingElem[dstIdx].m_b = (a>b)? a:b;\n"
- " ldsRingElem[dstIdx].m_idx = srcIdx;\n"
- " }\n"
- " }\n"
- " ringCap = GET_RING_CAPACITY;\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " // 2. fill stack\n"
- " __local Elem* dst = ldsRingElem;\n"
- " if( lIdx == 0 ) RING_END = 0;\n"
- " int srcIdx=lIdx;\n"
- " int end = ldsRingEnd;\n"
- " {\n"
- " for(int ii=0; ii<end; ii+=WG_SIZE, srcIdx+=WG_SIZE)\n"
- " {\n"
- " Elem e;\n"
- " if(srcIdx<end) e = ldsRingElem[srcIdx];\n"
- " bool done = (srcIdx<end)?false:true;\n"
- " for(int i=lIdx; i<CHECK_SIZE; i+=WG_SIZE) ldsCheckBuffer[lIdx] = 0;\n"
- " \n"
- " if( !done )\n"
- " {\n"
- " int aUsed = readBuf( ldsFixedBuffer, abs(e.m_a));\n"
- " int bUsed = readBuf( ldsFixedBuffer, abs(e.m_b));\n"
- " if( aUsed==0 && bUsed==0 )\n"
- " {\n"
- " int aAvailable=1;\n"
- " int bAvailable=1;\n"
- " int ea = abs(e.m_a);\n"
- " int eb = abs(e.m_b);\n"
- " bool aStatic = (e.m_a<0) ||(ea==m_staticIdx);\n"
- " bool bStatic = (e.m_b<0) ||(eb==m_staticIdx);\n"
- " \n"
- " if (!aStatic)\n"
- " aAvailable = tryWrite( ldsCheckBuffer, ea );\n"
- " if (!bStatic)\n"
- " bAvailable = tryWrite( ldsCheckBuffer, eb );\n"
- " \n"
- " //aAvailable = aStatic? 1: aAvailable;\n"
- " //bAvailable = bStatic? 1: bAvailable;\n"
- " bool success = (aAvailable && bAvailable);\n"
- " if(success)\n"
- " {\n"
- " \n"
- " if (!aStatic)\n"
- " writeBuf( ldsFixedBuffer, ea );\n"
- " if (!bStatic)\n"
- " writeBuf( ldsFixedBuffer, eb );\n"
- " }\n"
- " done = success;\n"
- " }\n"
- " }\n"
- " // put it aside\n"
- " if(srcIdx<end)\n"
- " {\n"
- " if( done )\n"
- " {\n"
- " int dstIdx; AtomInc1( ldsStackEnd, dstIdx );\n"
- " if( dstIdx < STACK_SIZE )\n"
- " ldsStackIdx[dstIdx] = e.m_idx;\n"
- " else{\n"
- " done = false;\n"
- " AtomAdd( ldsStackEnd, -1 );\n"
- " }\n"
- " }\n"
- " if( !done )\n"
- " {\n"
- " int dstIdx; AtomInc1( RING_END, dstIdx );\n"
- " dst[dstIdx] = e;\n"
- " }\n"
- " }\n"
- " // if filled, flush\n"
- " if( ldsStackEnd == STACK_SIZE )\n"
- " {\n"
- " for(int i=lIdx; i<STACK_SIZE; i+=WG_SIZE)\n"
- " {\n"
- " int idx = m_start + ldsStackIdx[i];\n"
- " int dstIdx; AtomInc1( ldsDstEnd, dstIdx );\n"
- " gConstraintsOut[ dstIdx ] = gConstraints[ idx ];\n"
- " gConstraintsOut[ dstIdx ].m_batchIdx = ie;\n"
- " }\n"
- " if( lIdx == 0 ) ldsStackEnd = 0;\n"
- " //for(int i=lIdx; i<CHECK_SIZE; i+=WG_SIZE) \n"
- " ldsFixedBuffer[lIdx] = 0;\n"
- " }\n"
- " }\n"
- " }\n"
- " if( lIdx == 0 ) ldsRingEnd = RING_END;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " for(int i=lIdx; i<ldsStackEnd; i+=WG_SIZE)\n"
- " {\n"
- " int idx = m_start + ldsStackIdx[i];\n"
- " int dstIdx; AtomInc1( ldsDstEnd, dstIdx );\n"
- " gConstraintsOut[ dstIdx ] = gConstraints[ idx ];\n"
- " gConstraintsOut[ dstIdx ].m_batchIdx = ie;\n"
- " }\n"
- " // in case it couldn't consume any pair. Flush them\n"
- " // todo. Serial batch worth while?\n"
- " if( ldsStackEnd == 0 )\n"
- " {\n"
- " for(int i=lIdx; i<ldsRingEnd; i+=WG_SIZE)\n"
- " {\n"
- " int idx = m_start + ldsRingElem[i].m_idx;\n"
- " int dstIdx; AtomInc1( ldsDstEnd, dstIdx );\n"
- " gConstraintsOut[ dstIdx ] = gConstraints[ idx ];\n"
- " int curBatch = 100+i;\n"
- " if (maxBatch < curBatch)\n"
- " maxBatch = curBatch;\n"
- " \n"
- " gConstraintsOut[ dstIdx ].m_batchIdx = curBatch;\n"
- " \n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " if( lIdx == 0 ) ldsRingEnd = 0;\n"
- " }\n"
- " if( lIdx == 0 ) ldsStackEnd = 0;\n"
- " GROUP_LDS_BARRIER;\n"
- " // termination\n"
- " if( ldsGEnd == m_n && ldsRingEnd == 0 )\n"
- " break;\n"
- " }\n"
- " if( lIdx == 0 )\n"
- " {\n"
- " if (maxBatch < ie)\n"
- " maxBatch=ie;\n"
- " batchSizes[wgIdx]=maxBatch;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.cl
deleted file mode 100644
index ba1b66d2c3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.cl
+++ /dev/null
@@ -1,231 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile __global int*
-#endif
-
-#define SIMD_WIDTH 64
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-#define WG_SIZE 64
-
-
-
-
-
-typedef struct
-{
- int m_n;
- int m_start;
- int m_staticIdx;
- int m_paddings[1];
-} ConstBuffer;
-
-typedef struct
-{
- int m_a;
- int m_b;
- u32 m_idx;
-}Elem;
-
-
-
-
-
-// batching on the GPU
-__kernel void CreateBatchesBruteForce( __global struct b3Contact4Data* gConstraints, __global const u32* gN, __global const u32* gStart, int m_staticIdx )
-{
- int wgIdx = GET_GROUP_IDX;
- int lIdx = GET_LOCAL_IDX;
-
- const int m_n = gN[wgIdx];
- const int m_start = gStart[wgIdx];
-
- if( lIdx == 0 )
- {
- for (int i=0;i<m_n;i++)
- {
- int srcIdx = i+m_start;
- int batchIndex = i;
- gConstraints[ srcIdx ].m_batchIdx = batchIndex;
- }
- }
-}
-
-
-#define CHECK_SIZE (WG_SIZE)
-
-
-
-
-u32 readBuf(__local u32* buff, int idx)
-{
- idx = idx % (32*CHECK_SIZE);
- int bitIdx = idx%32;
- int bufIdx = idx/32;
- return buff[bufIdx] & (1<<bitIdx);
-}
-
-void writeBuf(__local u32* buff, int idx)
-{
- idx = idx % (32*CHECK_SIZE);
- int bitIdx = idx%32;
- int bufIdx = idx/32;
- buff[bufIdx] |= (1<<bitIdx);
- //atom_or( &buff[bufIdx], (1<<bitIdx) );
-}
-
-u32 tryWrite(__local u32* buff, int idx)
-{
- idx = idx % (32*CHECK_SIZE);
- int bitIdx = idx%32;
- int bufIdx = idx/32;
- u32 ans = (u32)atom_or( &buff[bufIdx], (1<<bitIdx) );
- return ((ans >> bitIdx)&1) == 0;
-}
-
-
-// batching on the GPU
-__kernel void CreateBatchesNew( __global struct b3Contact4Data* gConstraints, __global const u32* gN, __global const u32* gStart, __global int* batchSizes, int staticIdx )
-{
- int wgIdx = GET_GROUP_IDX;
- int lIdx = GET_LOCAL_IDX;
- const int numConstraints = gN[wgIdx];
- const int m_start = gStart[wgIdx];
- b3Contact4Data_t tmp;
-
- __local u32 ldsFixedBuffer[CHECK_SIZE];
-
-
-
-
-
- if( lIdx == 0 )
- {
-
-
- __global struct b3Contact4Data* cs = &gConstraints[m_start];
-
-
- int numValidConstraints = 0;
- int batchIdx = 0;
-
- while( numValidConstraints < numConstraints)
- {
- int nCurrentBatch = 0;
- // clear flag
-
- for(int i=0; i<CHECK_SIZE; i++)
- ldsFixedBuffer[i] = 0;
-
- for(int i=numValidConstraints; i<numConstraints; i++)
- {
-
- int bodyAS = cs[i].m_bodyAPtrAndSignBit;
- int bodyBS = cs[i].m_bodyBPtrAndSignBit;
- int bodyA = abs(bodyAS);
- int bodyB = abs(bodyBS);
- bool aIsStatic = (bodyAS<0) || bodyAS==staticIdx;
- bool bIsStatic = (bodyBS<0) || bodyBS==staticIdx;
- int aUnavailable = aIsStatic ? 0 : readBuf( ldsFixedBuffer, bodyA);
- int bUnavailable = bIsStatic ? 0 : readBuf( ldsFixedBuffer, bodyB);
-
- if( aUnavailable==0 && bUnavailable==0 ) // ok
- {
- if (!aIsStatic)
- {
- writeBuf( ldsFixedBuffer, bodyA );
- }
- if (!bIsStatic)
- {
- writeBuf( ldsFixedBuffer, bodyB );
- }
-
- cs[i].m_batchIdx = batchIdx;
-
- if (i!=numValidConstraints)
- {
-
- tmp = cs[i];
- cs[i] = cs[numValidConstraints];
- cs[numValidConstraints] = tmp;
-
-
- }
-
- numValidConstraints++;
-
- nCurrentBatch++;
- if( nCurrentBatch == SIMD_WIDTH)
- {
- nCurrentBatch = 0;
- for(int i=0; i<CHECK_SIZE; i++)
- ldsFixedBuffer[i] = 0;
-
- }
- }
- }//for
- batchIdx ++;
- }//while
-
- batchSizes[wgIdx] = batchIdx;
-
- }//if( lIdx == 0 )
-
- //return batchIdx;
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.h
deleted file mode 100644
index 05800656cb..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/batchingKernelsNew.h
+++ /dev/null
@@ -1,290 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* batchingKernelsNewCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Erwin Coumans\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile __global int*\n"
- "#endif\n"
- "#define SIMD_WIDTH 64\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "#define WG_SIZE 64\n"
- "typedef struct \n"
- "{\n"
- " int m_n;\n"
- " int m_start;\n"
- " int m_staticIdx;\n"
- " int m_paddings[1];\n"
- "} ConstBuffer;\n"
- "typedef struct \n"
- "{\n"
- " int m_a;\n"
- " int m_b;\n"
- " u32 m_idx;\n"
- "}Elem;\n"
- "// batching on the GPU\n"
- "__kernel void CreateBatchesBruteForce( __global struct b3Contact4Data* gConstraints, __global const u32* gN, __global const u32* gStart, int m_staticIdx )\n"
- "{\n"
- " int wgIdx = GET_GROUP_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " \n"
- " const int m_n = gN[wgIdx];\n"
- " const int m_start = gStart[wgIdx];\n"
- " \n"
- " if( lIdx == 0 )\n"
- " {\n"
- " for (int i=0;i<m_n;i++)\n"
- " {\n"
- " int srcIdx = i+m_start;\n"
- " int batchIndex = i;\n"
- " gConstraints[ srcIdx ].m_batchIdx = batchIndex; \n"
- " }\n"
- " }\n"
- "}\n"
- "#define CHECK_SIZE (WG_SIZE)\n"
- "u32 readBuf(__local u32* buff, int idx)\n"
- "{\n"
- " idx = idx % (32*CHECK_SIZE);\n"
- " int bitIdx = idx%32;\n"
- " int bufIdx = idx/32;\n"
- " return buff[bufIdx] & (1<<bitIdx);\n"
- "}\n"
- "void writeBuf(__local u32* buff, int idx)\n"
- "{\n"
- " idx = idx % (32*CHECK_SIZE);\n"
- " int bitIdx = idx%32;\n"
- " int bufIdx = idx/32;\n"
- " buff[bufIdx] |= (1<<bitIdx);\n"
- " //atom_or( &buff[bufIdx], (1<<bitIdx) );\n"
- "}\n"
- "u32 tryWrite(__local u32* buff, int idx)\n"
- "{\n"
- " idx = idx % (32*CHECK_SIZE);\n"
- " int bitIdx = idx%32;\n"
- " int bufIdx = idx/32;\n"
- " u32 ans = (u32)atom_or( &buff[bufIdx], (1<<bitIdx) );\n"
- " return ((ans >> bitIdx)&1) == 0;\n"
- "}\n"
- "// batching on the GPU\n"
- "__kernel void CreateBatchesNew( __global struct b3Contact4Data* gConstraints, __global const u32* gN, __global const u32* gStart, __global int* batchSizes, int staticIdx )\n"
- "{\n"
- " int wgIdx = GET_GROUP_IDX;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " const int numConstraints = gN[wgIdx];\n"
- " const int m_start = gStart[wgIdx];\n"
- " b3Contact4Data_t tmp;\n"
- " \n"
- " __local u32 ldsFixedBuffer[CHECK_SIZE];\n"
- " \n"
- " \n"
- " \n"
- " \n"
- " \n"
- " if( lIdx == 0 )\n"
- " {\n"
- " \n"
- " \n"
- " __global struct b3Contact4Data* cs = &gConstraints[m_start]; \n"
- " \n"
- " \n"
- " int numValidConstraints = 0;\n"
- " int batchIdx = 0;\n"
- " while( numValidConstraints < numConstraints)\n"
- " {\n"
- " int nCurrentBatch = 0;\n"
- " // clear flag\n"
- " \n"
- " for(int i=0; i<CHECK_SIZE; i++) \n"
- " ldsFixedBuffer[i] = 0; \n"
- " for(int i=numValidConstraints; i<numConstraints; i++)\n"
- " {\n"
- " int bodyAS = cs[i].m_bodyAPtrAndSignBit;\n"
- " int bodyBS = cs[i].m_bodyBPtrAndSignBit;\n"
- " int bodyA = abs(bodyAS);\n"
- " int bodyB = abs(bodyBS);\n"
- " bool aIsStatic = (bodyAS<0) || bodyAS==staticIdx;\n"
- " bool bIsStatic = (bodyBS<0) || bodyBS==staticIdx;\n"
- " int aUnavailable = aIsStatic ? 0 : readBuf( ldsFixedBuffer, bodyA);\n"
- " int bUnavailable = bIsStatic ? 0 : readBuf( ldsFixedBuffer, bodyB);\n"
- " \n"
- " if( aUnavailable==0 && bUnavailable==0 ) // ok\n"
- " {\n"
- " if (!aIsStatic)\n"
- " {\n"
- " writeBuf( ldsFixedBuffer, bodyA );\n"
- " }\n"
- " if (!bIsStatic)\n"
- " {\n"
- " writeBuf( ldsFixedBuffer, bodyB );\n"
- " }\n"
- " cs[i].m_batchIdx = batchIdx;\n"
- " if (i!=numValidConstraints)\n"
- " {\n"
- " tmp = cs[i];\n"
- " cs[i] = cs[numValidConstraints];\n"
- " cs[numValidConstraints] = tmp;\n"
- " }\n"
- " numValidConstraints++;\n"
- " \n"
- " nCurrentBatch++;\n"
- " if( nCurrentBatch == SIMD_WIDTH)\n"
- " {\n"
- " nCurrentBatch = 0;\n"
- " for(int i=0; i<CHECK_SIZE; i++) \n"
- " ldsFixedBuffer[i] = 0;\n"
- " \n"
- " }\n"
- " }\n"
- " }//for\n"
- " batchIdx ++;\n"
- " }//while\n"
- " \n"
- " batchSizes[wgIdx] = batchIdx;\n"
- " }//if( lIdx == 0 )\n"
- " \n"
- " //return batchIdx;\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.cl
deleted file mode 100644
index e22bc9bc33..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.cl
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3RigidBodyData.h"
-
-#include "Bullet3Dynamics/shared/b3IntegrateTransforms.h"
-
-
-
-__kernel void
- integrateTransformsKernel( __global b3RigidBodyData_t* bodies,const int numNodes, float timeStep, float angularDamping, float4 gravityAcceleration)
-{
- int nodeID = get_global_id(0);
-
- if( nodeID < numNodes)
- {
- integrateSingleTransform(bodies,nodeID, timeStep, angularDamping,gravityAcceleration);
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.h
deleted file mode 100644
index 6e9c53e161..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/integrateKernel.h
+++ /dev/null
@@ -1,432 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* integrateKernelCL =
- "/*\n"
- "Copyright (c) 2013 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Erwin Coumans\n"
- "#ifndef B3_RIGIDBODY_DATA_H\n"
- "#define B3_RIGIDBODY_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3RigidBodyData b3RigidBodyData_t;\n"
- "struct b3RigidBodyData\n"
- "{\n"
- " b3Float4 m_pos;\n"
- " b3Quat m_quat;\n"
- " b3Float4 m_linVel;\n"
- " b3Float4 m_angVel;\n"
- " int m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "};\n"
- "typedef struct b3InertiaData b3InertiaData_t;\n"
- "struct b3InertiaData\n"
- "{\n"
- " b3Mat3x3 m_invInertiaWorld;\n"
- " b3Mat3x3 m_initInvInertia;\n"
- "};\n"
- "#endif //B3_RIGIDBODY_DATA_H\n"
- " \n"
- "#ifndef B3_RIGIDBODY_DATA_H\n"
- "#endif //B3_RIGIDBODY_DATA_H\n"
- " \n"
- "inline void integrateSingleTransform( __global b3RigidBodyData_t* bodies,int nodeID, float timeStep, float angularDamping, b3Float4ConstArg gravityAcceleration)\n"
- "{\n"
- " \n"
- " if (bodies[nodeID].m_invMass != 0.f)\n"
- " {\n"
- " float BT_GPU_ANGULAR_MOTION_THRESHOLD = (0.25f * 3.14159254f);\n"
- " //angular velocity\n"
- " {\n"
- " b3Float4 axis;\n"
- " //add some hardcoded angular damping\n"
- " bodies[nodeID].m_angVel.x *= angularDamping;\n"
- " bodies[nodeID].m_angVel.y *= angularDamping;\n"
- " bodies[nodeID].m_angVel.z *= angularDamping;\n"
- " \n"
- " b3Float4 angvel = bodies[nodeID].m_angVel;\n"
- " float fAngle = b3Sqrt(b3Dot3F4(angvel, angvel));\n"
- " \n"
- " //limit the angular motion\n"
- " if(fAngle*timeStep > BT_GPU_ANGULAR_MOTION_THRESHOLD)\n"
- " {\n"
- " fAngle = BT_GPU_ANGULAR_MOTION_THRESHOLD / timeStep;\n"
- " }\n"
- " if(fAngle < 0.001f)\n"
- " {\n"
- " // use Taylor's expansions of sync function\n"
- " axis = angvel * (0.5f*timeStep-(timeStep*timeStep*timeStep)*0.020833333333f * fAngle * fAngle);\n"
- " }\n"
- " else\n"
- " {\n"
- " // sync(fAngle) = sin(c*fAngle)/t\n"
- " axis = angvel * ( b3Sin(0.5f * fAngle * timeStep) / fAngle);\n"
- " }\n"
- " \n"
- " b3Quat dorn;\n"
- " dorn.x = axis.x;\n"
- " dorn.y = axis.y;\n"
- " dorn.z = axis.z;\n"
- " dorn.w = b3Cos(fAngle * timeStep * 0.5f);\n"
- " b3Quat orn0 = bodies[nodeID].m_quat;\n"
- " b3Quat predictedOrn = b3QuatMul(dorn, orn0);\n"
- " predictedOrn = b3QuatNormalized(predictedOrn);\n"
- " bodies[nodeID].m_quat=predictedOrn;\n"
- " }\n"
- " //linear velocity \n"
- " bodies[nodeID].m_pos += bodies[nodeID].m_linVel * timeStep;\n"
- " \n"
- " //apply gravity\n"
- " bodies[nodeID].m_linVel += gravityAcceleration * timeStep;\n"
- " \n"
- " }\n"
- " \n"
- "}\n"
- "inline void b3IntegrateTransform( __global b3RigidBodyData_t* body, float timeStep, float angularDamping, b3Float4ConstArg gravityAcceleration)\n"
- "{\n"
- " float BT_GPU_ANGULAR_MOTION_THRESHOLD = (0.25f * 3.14159254f);\n"
- " \n"
- " if( (body->m_invMass != 0.f))\n"
- " {\n"
- " //angular velocity\n"
- " {\n"
- " b3Float4 axis;\n"
- " //add some hardcoded angular damping\n"
- " body->m_angVel.x *= angularDamping;\n"
- " body->m_angVel.y *= angularDamping;\n"
- " body->m_angVel.z *= angularDamping;\n"
- " \n"
- " b3Float4 angvel = body->m_angVel;\n"
- " float fAngle = b3Sqrt(b3Dot3F4(angvel, angvel));\n"
- " //limit the angular motion\n"
- " if(fAngle*timeStep > BT_GPU_ANGULAR_MOTION_THRESHOLD)\n"
- " {\n"
- " fAngle = BT_GPU_ANGULAR_MOTION_THRESHOLD / timeStep;\n"
- " }\n"
- " if(fAngle < 0.001f)\n"
- " {\n"
- " // use Taylor's expansions of sync function\n"
- " axis = angvel * (0.5f*timeStep-(timeStep*timeStep*timeStep)*0.020833333333f * fAngle * fAngle);\n"
- " }\n"
- " else\n"
- " {\n"
- " // sync(fAngle) = sin(c*fAngle)/t\n"
- " axis = angvel * ( b3Sin(0.5f * fAngle * timeStep) / fAngle);\n"
- " }\n"
- " b3Quat dorn;\n"
- " dorn.x = axis.x;\n"
- " dorn.y = axis.y;\n"
- " dorn.z = axis.z;\n"
- " dorn.w = b3Cos(fAngle * timeStep * 0.5f);\n"
- " b3Quat orn0 = body->m_quat;\n"
- " b3Quat predictedOrn = b3QuatMul(dorn, orn0);\n"
- " predictedOrn = b3QuatNormalized(predictedOrn);\n"
- " body->m_quat=predictedOrn;\n"
- " }\n"
- " //apply gravity\n"
- " body->m_linVel += gravityAcceleration * timeStep;\n"
- " //linear velocity \n"
- " body->m_pos += body->m_linVel * timeStep;\n"
- " \n"
- " }\n"
- " \n"
- "}\n"
- "__kernel void \n"
- " integrateTransformsKernel( __global b3RigidBodyData_t* bodies,const int numNodes, float timeStep, float angularDamping, float4 gravityAcceleration)\n"
- "{\n"
- " int nodeID = get_global_id(0);\n"
- " \n"
- " if( nodeID < numNodes)\n"
- " {\n"
- " integrateSingleTransform(bodies,nodeID, timeStep, angularDamping,gravityAcceleration);\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.cl
deleted file mode 100644
index 7f5dabe274..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.cl
+++ /dev/null
@@ -1,877 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#define B3_CONSTRAINT_FLAG_ENABLED 1
-
-#define B3_GPU_POINT2POINT_CONSTRAINT_TYPE 3
-#define B3_GPU_FIXED_CONSTRAINT_TYPE 4
-
-#define MOTIONCLAMP 100000 //unused, for debugging/safety in case constraint solver fails
-#define B3_INFINITY 1e30f
-
-#define mymake_float4 (float4)
-
-
-__inline float dot3F4(float4 a, float4 b)
-{
- float4 a1 = mymake_float4(a.xyz,0.f);
- float4 b1 = mymake_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-
-typedef float4 Quaternion;
-
-
-typedef struct
-{
- float4 m_row[3];
-}Matrix3x3;
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b);
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b);
-
-
-
-
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b)
-{
- float4 ans;
- ans.x = dot3F4( a.m_row[0], b );
- ans.y = dot3F4( a.m_row[1], b );
- ans.z = dot3F4( a.m_row[2], b );
- ans.w = 0.f;
- return ans;
-}
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b)
-{
- float4 colx = mymake_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
- float4 coly = mymake_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
- float4 colz = mymake_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
-
- float4 ans;
- ans.x = dot3F4( a, colx );
- ans.y = dot3F4( a, coly );
- ans.z = dot3F4( a, colz );
- return ans;
-}
-
-
-
-typedef struct
-{
- Matrix3x3 m_invInertiaWorld;
- Matrix3x3 m_initInvInertia;
-} BodyInertia;
-
-
-typedef struct
-{
- Matrix3x3 m_basis;//orientation
- float4 m_origin;//transform
-}b3Transform;
-
-typedef struct
-{
-// b3Transform m_worldTransformUnused;
- float4 m_deltaLinearVelocity;
- float4 m_deltaAngularVelocity;
- float4 m_angularFactor;
- float4 m_linearFactor;
- float4 m_invMass;
- float4 m_pushVelocity;
- float4 m_turnVelocity;
- float4 m_linearVelocity;
- float4 m_angularVelocity;
-
- union
- {
- void* m_originalBody;
- int m_originalBodyIndex;
- };
- int padding[3];
-
-} b3GpuSolverBody;
-
-typedef struct
-{
- float4 m_pos;
- Quaternion m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- unsigned int m_shapeIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} b3RigidBodyCL;
-
-typedef struct
-{
-
- float4 m_relpos1CrossNormal;
- float4 m_contactNormal;
-
- float4 m_relpos2CrossNormal;
- //float4 m_contactNormal2;//usually m_contactNormal2 == -m_contactNormal
-
- float4 m_angularComponentA;
- float4 m_angularComponentB;
-
- float m_appliedPushImpulse;
- float m_appliedImpulse;
- int m_padding1;
- int m_padding2;
- float m_friction;
- float m_jacDiagABInv;
- float m_rhs;
- float m_cfm;
-
- float m_lowerLimit;
- float m_upperLimit;
- float m_rhsPenetration;
- int m_originalConstraint;
-
-
- int m_overrideNumSolverIterations;
- int m_frictionIndex;
- int m_solverBodyIdA;
- int m_solverBodyIdB;
-
-} b3SolverConstraint;
-
-typedef struct
-{
- int m_bodyAPtrAndSignBit;
- int m_bodyBPtrAndSignBit;
- int m_originalConstraintIndex;
- int m_batchId;
-} b3BatchConstraint;
-
-
-
-
-
-
-typedef struct
-{
- int m_constraintType;
- int m_rbA;
- int m_rbB;
- float m_breakingImpulseThreshold;
-
- float4 m_pivotInA;
- float4 m_pivotInB;
- Quaternion m_relTargetAB;
-
- int m_flags;
- int m_padding[3];
-} b3GpuGenericConstraint;
-
-
-/*b3Transform getWorldTransform(b3RigidBodyCL* rb)
-{
- b3Transform newTrans;
- newTrans.setOrigin(rb->m_pos);
- newTrans.setRotation(rb->m_quat);
- return newTrans;
-}*/
-
-
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- v = mymake_float4(v.xyz,0.f);
- return fast_normalize(v);
-}
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-
-__inline void internalApplyImpulse(__global b3GpuSolverBody* body, float4 linearComponent, float4 angularComponent,float impulseMagnitude)
-{
- body->m_deltaLinearVelocity += linearComponent*impulseMagnitude*body->m_linearFactor;
- body->m_deltaAngularVelocity += angularComponent*(impulseMagnitude*body->m_angularFactor);
-}
-
-
-void resolveSingleConstraintRowGeneric(__global b3GpuSolverBody* body1, __global b3GpuSolverBody* body2, __global b3SolverConstraint* c)
-{
- float deltaImpulse = c->m_rhs-c->m_appliedImpulse*c->m_cfm;
- float deltaVel1Dotn = dot3F4(c->m_contactNormal,body1->m_deltaLinearVelocity) + dot3F4(c->m_relpos1CrossNormal,body1->m_deltaAngularVelocity);
- float deltaVel2Dotn = -dot3F4(c->m_contactNormal,body2->m_deltaLinearVelocity) + dot3F4(c->m_relpos2CrossNormal,body2->m_deltaAngularVelocity);
-
- deltaImpulse -= deltaVel1Dotn*c->m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn*c->m_jacDiagABInv;
-
- float sum = c->m_appliedImpulse + deltaImpulse;
- if (sum < c->m_lowerLimit)
- {
- deltaImpulse = c->m_lowerLimit-c->m_appliedImpulse;
- c->m_appliedImpulse = c->m_lowerLimit;
- }
- else if (sum > c->m_upperLimit)
- {
- deltaImpulse = c->m_upperLimit-c->m_appliedImpulse;
- c->m_appliedImpulse = c->m_upperLimit;
- }
- else
- {
- c->m_appliedImpulse = sum;
- }
-
- internalApplyImpulse(body1,c->m_contactNormal*body1->m_invMass,c->m_angularComponentA,deltaImpulse);
- internalApplyImpulse(body2,-c->m_contactNormal*body2->m_invMass,c->m_angularComponentB,deltaImpulse);
-
-}
-
-__kernel void solveJointConstraintRows(__global b3GpuSolverBody* solverBodies,
- __global b3BatchConstraint* batchConstraints,
- __global b3SolverConstraint* rows,
- __global unsigned int* numConstraintRowsInfo1,
- __global unsigned int* rowOffsets,
- __global b3GpuGenericConstraint* constraints,
- int batchOffset,
- int numConstraintsInBatch
- )
-{
- int b = get_global_id(0);
- if (b>=numConstraintsInBatch)
- return;
-
- __global b3BatchConstraint* c = &batchConstraints[b+batchOffset];
- int originalConstraintIndex = c->m_originalConstraintIndex;
- if (constraints[originalConstraintIndex].m_flags&B3_CONSTRAINT_FLAG_ENABLED)
- {
- int numConstraintRows = numConstraintRowsInfo1[originalConstraintIndex];
- int rowOffset = rowOffsets[originalConstraintIndex];
- for (int jj=0;jj<numConstraintRows;jj++)
- {
- __global b3SolverConstraint* constraint = &rows[rowOffset+jj];
- resolveSingleConstraintRowGeneric(&solverBodies[constraint->m_solverBodyIdA],&solverBodies[constraint->m_solverBodyIdB],constraint);
- }
- }
-};
-
-__kernel void initSolverBodies(__global b3GpuSolverBody* solverBodies,__global b3RigidBodyCL* bodiesCL, int numBodies)
-{
- int i = get_global_id(0);
- if (i>=numBodies)
- return;
-
- __global b3GpuSolverBody* solverBody = &solverBodies[i];
- __global b3RigidBodyCL* bodyCL = &bodiesCL[i];
-
- solverBody->m_deltaLinearVelocity = (float4)(0.f,0.f,0.f,0.f);
- solverBody->m_deltaAngularVelocity = (float4)(0.f,0.f,0.f,0.f);
- solverBody->m_pushVelocity = (float4)(0.f,0.f,0.f,0.f);
- solverBody->m_pushVelocity = (float4)(0.f,0.f,0.f,0.f);
- solverBody->m_invMass = (float4)(bodyCL->m_invMass,bodyCL->m_invMass,bodyCL->m_invMass,0.f);
- solverBody->m_originalBodyIndex = i;
- solverBody->m_angularFactor = (float4)(1,1,1,0);
- solverBody->m_linearFactor = (float4) (1,1,1,0);
- solverBody->m_linearVelocity = bodyCL->m_linVel;
- solverBody->m_angularVelocity = bodyCL->m_angVel;
-}
-
-__kernel void breakViolatedConstraintsKernel(__global b3GpuGenericConstraint* constraints, __global unsigned int* numConstraintRows, __global unsigned int* rowOffsets, __global b3SolverConstraint* rows, int numConstraints)
-{
- int cid = get_global_id(0);
- if (cid>=numConstraints)
- return;
- int numRows = numConstraintRows[cid];
- if (numRows)
- {
- for (int i=0;i<numRows;i++)
- {
- int rowIndex = rowOffsets[cid]+i;
- float breakingThreshold = constraints[cid].m_breakingImpulseThreshold;
- if (fabs(rows[rowIndex].m_appliedImpulse) >= breakingThreshold)
- {
- constraints[cid].m_flags =0;//&= ~B3_CONSTRAINT_FLAG_ENABLED;
- }
- }
- }
-}
-
-
-
-__kernel void getInfo1Kernel(__global unsigned int* infos, __global b3GpuGenericConstraint* constraints, int numConstraints)
-{
- int i = get_global_id(0);
- if (i>=numConstraints)
- return;
-
- __global b3GpuGenericConstraint* constraint = &constraints[i];
-
- switch (constraint->m_constraintType)
- {
- case B3_GPU_POINT2POINT_CONSTRAINT_TYPE:
- {
- infos[i] = 3;
- break;
- }
- case B3_GPU_FIXED_CONSTRAINT_TYPE:
- {
- infos[i] = 6;
- break;
- }
- default:
- {
- }
- }
-}
-
-__kernel void initBatchConstraintsKernel(__global unsigned int* numConstraintRows, __global unsigned int* rowOffsets,
- __global b3BatchConstraint* batchConstraints,
- __global b3GpuGenericConstraint* constraints,
- __global b3RigidBodyCL* bodies,
- int numConstraints)
-{
- int i = get_global_id(0);
- if (i>=numConstraints)
- return;
-
- int rbA = constraints[i].m_rbA;
- int rbB = constraints[i].m_rbB;
-
- batchConstraints[i].m_bodyAPtrAndSignBit = bodies[rbA].m_invMass != 0.f ? rbA : -rbA;
- batchConstraints[i].m_bodyBPtrAndSignBit = bodies[rbB].m_invMass != 0.f ? rbB : -rbB;
- batchConstraints[i].m_batchId = -1;
- batchConstraints[i].m_originalConstraintIndex = i;
-
-}
-
-
-
-
-typedef struct
-{
- // integrator parameters: frames per second (1/stepsize), default error
- // reduction parameter (0..1).
- float fps,erp;
-
- // for the first and second body, pointers to two (linear and angular)
- // n*3 jacobian sub matrices, stored by rows. these matrices will have
- // been initialized to 0 on entry. if the second body is zero then the
- // J2xx pointers may be 0.
- union
- {
- __global float4* m_J1linearAxisFloat4;
- __global float* m_J1linearAxis;
- };
- union
- {
- __global float4* m_J1angularAxisFloat4;
- __global float* m_J1angularAxis;
-
- };
- union
- {
- __global float4* m_J2linearAxisFloat4;
- __global float* m_J2linearAxis;
- };
- union
- {
- __global float4* m_J2angularAxisFloat4;
- __global float* m_J2angularAxis;
- };
- // elements to jump from one row to the next in J's
- int rowskip;
-
- // right hand sides of the equation J*v = c + cfm * lambda. cfm is the
- // "constraint force mixing" vector. c is set to zero on entry, cfm is
- // set to a constant value (typically very small or zero) value on entry.
- __global float* m_constraintError;
- __global float* cfm;
-
- // lo and hi limits for variables (set to -/+ infinity on entry).
- __global float* m_lowerLimit;
- __global float* m_upperLimit;
-
- // findex vector for variables. see the LCP solver interface for a
- // description of what this does. this is set to -1 on entry.
- // note that the returned indexes are relative to the first index of
- // the constraint.
- __global int *findex;
- // number of solver iterations
- int m_numIterations;
-
- //damping of the velocity
- float m_damping;
-} b3GpuConstraintInfo2;
-
-
-void getSkewSymmetricMatrix(float4 vecIn, __global float4* v0,__global float4* v1,__global float4* v2)
-{
- *v0 = (float4)(0. ,-vecIn.z ,vecIn.y,0.f);
- *v1 = (float4)(vecIn.z ,0. ,-vecIn.x,0.f);
- *v2 = (float4)(-vecIn.y ,vecIn.x ,0.f,0.f);
-}
-
-
-void getInfo2Point2Point(__global b3GpuGenericConstraint* constraint,b3GpuConstraintInfo2* info,__global b3RigidBodyCL* bodies)
-{
- float4 posA = bodies[constraint->m_rbA].m_pos;
- Quaternion rotA = bodies[constraint->m_rbA].m_quat;
-
- float4 posB = bodies[constraint->m_rbB].m_pos;
- Quaternion rotB = bodies[constraint->m_rbB].m_quat;
-
-
-
- // anchor points in global coordinates with respect to body PORs.
-
- // set jacobian
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[info->rowskip+1] = 1;
- info->m_J1linearAxis[2*info->rowskip+2] = 1;
-
- float4 a1 = qtRotate(rotA,constraint->m_pivotInA);
-
- {
- __global float4* angular0 = (__global float4*)(info->m_J1angularAxis);
- __global float4* angular1 = (__global float4*)(info->m_J1angularAxis+info->rowskip);
- __global float4* angular2 = (__global float4*)(info->m_J1angularAxis+2*info->rowskip);
- float4 a1neg = -a1;
- getSkewSymmetricMatrix(a1neg,angular0,angular1,angular2);
- }
- if (info->m_J2linearAxis)
- {
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[info->rowskip+1] = -1;
- info->m_J2linearAxis[2*info->rowskip+2] = -1;
- }
-
- float4 a2 = qtRotate(rotB,constraint->m_pivotInB);
-
- {
- // float4 a2n = -a2;
- __global float4* angular0 = (__global float4*)(info->m_J2angularAxis);
- __global float4* angular1 = (__global float4*)(info->m_J2angularAxis+info->rowskip);
- __global float4* angular2 = (__global float4*)(info->m_J2angularAxis+2*info->rowskip);
- getSkewSymmetricMatrix(a2,angular0,angular1,angular2);
- }
-
- // set right hand side
-// float currERP = (m_flags & B3_P2P_FLAGS_ERP) ? m_erp : info->erp;
- float currERP = info->erp;
-
- float k = info->fps * currERP;
- int j;
- float4 result = a2 + posB - a1 - posA;
- float* resultPtr = &result;
-
- for (j=0; j<3; j++)
- {
- info->m_constraintError[j*info->rowskip] = k * (resultPtr[j]);
- }
-}
-
-Quaternion nearest( Quaternion first, Quaternion qd)
-{
- Quaternion diff,sum;
- diff = first- qd;
- sum = first + qd;
-
- if( dot(diff,diff) < dot(sum,sum) )
- return qd;
- return (-qd);
-}
-
-float b3Acos(float x)
-{
- if (x<-1)
- x=-1;
- if (x>1)
- x=1;
- return acos(x);
-}
-
-float getAngle(Quaternion orn)
-{
- if (orn.w>=1.f)
- orn.w=1.f;
- float s = 2.f * b3Acos(orn.w);
- return s;
-}
-
-void calculateDiffAxisAngleQuaternion( Quaternion orn0,Quaternion orn1a,float4* axis,float* angle)
-{
- Quaternion orn1 = nearest(orn0,orn1a);
-
- Quaternion dorn = qtMul(orn1,qtInvert(orn0));
- *angle = getAngle(dorn);
- *axis = (float4)(dorn.x,dorn.y,dorn.z,0.f);
-
- //check for axis length
- float len = dot3F4(*axis,*axis);
- if (len < FLT_EPSILON*FLT_EPSILON)
- *axis = (float4)(1,0,0,0);
- else
- *axis /= sqrt(len);
-}
-
-
-
-void getInfo2FixedOrientation(__global b3GpuGenericConstraint* constraint,b3GpuConstraintInfo2* info,__global b3RigidBodyCL* bodies, int start_row)
-{
- Quaternion worldOrnA = bodies[constraint->m_rbA].m_quat;
- Quaternion worldOrnB = bodies[constraint->m_rbB].m_quat;
-
- int s = info->rowskip;
- int start_index = start_row * s;
-
- // 3 rows to make body rotations equal
- info->m_J1angularAxis[start_index] = 1;
- info->m_J1angularAxis[start_index + s + 1] = 1;
- info->m_J1angularAxis[start_index + s*2+2] = 1;
- if ( info->m_J2angularAxis)
- {
- info->m_J2angularAxis[start_index] = -1;
- info->m_J2angularAxis[start_index + s+1] = -1;
- info->m_J2angularAxis[start_index + s*2+2] = -1;
- }
-
- float currERP = info->erp;
- float k = info->fps * currERP;
- float4 diff;
- float angle;
- float4 qrelCur = qtMul(worldOrnA,qtInvert(worldOrnB));
-
- calculateDiffAxisAngleQuaternion(constraint->m_relTargetAB,qrelCur,&diff,&angle);
- diff*=-angle;
-
- float* resultPtr = &diff;
-
- for (int j=0; j<3; j++)
- {
- info->m_constraintError[(3+j)*info->rowskip] = k * resultPtr[j];
- }
-
-
-}
-
-
-__kernel void writeBackVelocitiesKernel(__global b3RigidBodyCL* bodies,__global b3GpuSolverBody* solverBodies,int numBodies)
-{
- int i = get_global_id(0);
- if (i>=numBodies)
- return;
-
- if (bodies[i].m_invMass)
- {
-// if (length(solverBodies[i].m_deltaLinearVelocity)<MOTIONCLAMP)
- {
- bodies[i].m_linVel += solverBodies[i].m_deltaLinearVelocity;
- }
-// if (length(solverBodies[i].m_deltaAngularVelocity)<MOTIONCLAMP)
- {
- bodies[i].m_angVel += solverBodies[i].m_deltaAngularVelocity;
- }
- }
-}
-
-
-__kernel void getInfo2Kernel(__global b3SolverConstraint* solverConstraintRows,
- __global unsigned int* infos,
- __global unsigned int* constraintRowOffsets,
- __global b3GpuGenericConstraint* constraints,
- __global b3BatchConstraint* batchConstraints,
- __global b3RigidBodyCL* bodies,
- __global BodyInertia* inertias,
- __global b3GpuSolverBody* solverBodies,
- float timeStep,
- float globalErp,
- float globalCfm,
- float globalDamping,
- int globalNumIterations,
- int numConstraints)
-{
-
- int i = get_global_id(0);
- if (i>=numConstraints)
- return;
-
- //for now, always initialize the batch info
- int info1 = infos[i];
-
- __global b3SolverConstraint* currentConstraintRow = &solverConstraintRows[constraintRowOffsets[i]];
- __global b3GpuGenericConstraint* constraint = &constraints[i];
-
- __global b3RigidBodyCL* rbA = &bodies[ constraint->m_rbA];
- __global b3RigidBodyCL* rbB = &bodies[ constraint->m_rbB];
-
- int solverBodyIdA = constraint->m_rbA;
- int solverBodyIdB = constraint->m_rbB;
-
- __global b3GpuSolverBody* bodyAPtr = &solverBodies[solverBodyIdA];
- __global b3GpuSolverBody* bodyBPtr = &solverBodies[solverBodyIdB];
-
-
- if (rbA->m_invMass)
- {
- batchConstraints[i].m_bodyAPtrAndSignBit = solverBodyIdA;
- } else
- {
-// if (!solverBodyIdA)
-// m_staticIdx = 0;
- batchConstraints[i].m_bodyAPtrAndSignBit = -solverBodyIdA;
- }
-
- if (rbB->m_invMass)
- {
- batchConstraints[i].m_bodyBPtrAndSignBit = solverBodyIdB;
- } else
- {
-// if (!solverBodyIdB)
-// m_staticIdx = 0;
- batchConstraints[i].m_bodyBPtrAndSignBit = -solverBodyIdB;
- }
-
- if (info1)
- {
- int overrideNumSolverIterations = 0;//constraint->getOverrideNumSolverIterations() > 0 ? constraint->getOverrideNumSolverIterations() : infoGlobal.m_numIterations;
-// if (overrideNumSolverIterations>m_maxOverrideNumSolverIterations)
- // m_maxOverrideNumSolverIterations = overrideNumSolverIterations;
-
-
- int j;
- for ( j=0;j<info1;j++)
- {
-// memset(&currentConstraintRow[j],0,sizeof(b3SolverConstraint));
- currentConstraintRow[j].m_angularComponentA = (float4)(0,0,0,0);
- currentConstraintRow[j].m_angularComponentB = (float4)(0,0,0,0);
- currentConstraintRow[j].m_appliedImpulse = 0.f;
- currentConstraintRow[j].m_appliedPushImpulse = 0.f;
- currentConstraintRow[j].m_cfm = 0.f;
- currentConstraintRow[j].m_contactNormal = (float4)(0,0,0,0);
- currentConstraintRow[j].m_friction = 0.f;
- currentConstraintRow[j].m_frictionIndex = 0;
- currentConstraintRow[j].m_jacDiagABInv = 0.f;
- currentConstraintRow[j].m_lowerLimit = 0.f;
- currentConstraintRow[j].m_upperLimit = 0.f;
-
- currentConstraintRow[j].m_originalConstraint = i;
- currentConstraintRow[j].m_overrideNumSolverIterations = 0;
- currentConstraintRow[j].m_relpos1CrossNormal = (float4)(0,0,0,0);
- currentConstraintRow[j].m_relpos2CrossNormal = (float4)(0,0,0,0);
- currentConstraintRow[j].m_rhs = 0.f;
- currentConstraintRow[j].m_rhsPenetration = 0.f;
- currentConstraintRow[j].m_solverBodyIdA = 0;
- currentConstraintRow[j].m_solverBodyIdB = 0;
-
- currentConstraintRow[j].m_lowerLimit = -B3_INFINITY;
- currentConstraintRow[j].m_upperLimit = B3_INFINITY;
- currentConstraintRow[j].m_appliedImpulse = 0.f;
- currentConstraintRow[j].m_appliedPushImpulse = 0.f;
- currentConstraintRow[j].m_solverBodyIdA = solverBodyIdA;
- currentConstraintRow[j].m_solverBodyIdB = solverBodyIdB;
- currentConstraintRow[j].m_overrideNumSolverIterations = overrideNumSolverIterations;
- }
-
- bodyAPtr->m_deltaLinearVelocity = (float4)(0,0,0,0);
- bodyAPtr->m_deltaAngularVelocity = (float4)(0,0,0,0);
- bodyAPtr->m_pushVelocity = (float4)(0,0,0,0);
- bodyAPtr->m_turnVelocity = (float4)(0,0,0,0);
- bodyBPtr->m_deltaLinearVelocity = (float4)(0,0,0,0);
- bodyBPtr->m_deltaAngularVelocity = (float4)(0,0,0,0);
- bodyBPtr->m_pushVelocity = (float4)(0,0,0,0);
- bodyBPtr->m_turnVelocity = (float4)(0,0,0,0);
-
- int rowskip = sizeof(b3SolverConstraint)/sizeof(float);//check this
-
-
-
-
- b3GpuConstraintInfo2 info2;
- info2.fps = 1.f/timeStep;
- info2.erp = globalErp;
- info2.m_J1linearAxisFloat4 = &currentConstraintRow->m_contactNormal;
- info2.m_J1angularAxisFloat4 = &currentConstraintRow->m_relpos1CrossNormal;
- info2.m_J2linearAxisFloat4 = 0;
- info2.m_J2angularAxisFloat4 = &currentConstraintRow->m_relpos2CrossNormal;
- info2.rowskip = sizeof(b3SolverConstraint)/sizeof(float);//check this
-
- ///the size of b3SolverConstraint needs be a multiple of float
-// b3Assert(info2.rowskip*sizeof(float)== sizeof(b3SolverConstraint));
- info2.m_constraintError = &currentConstraintRow->m_rhs;
- currentConstraintRow->m_cfm = globalCfm;
- info2.m_damping = globalDamping;
- info2.cfm = &currentConstraintRow->m_cfm;
- info2.m_lowerLimit = &currentConstraintRow->m_lowerLimit;
- info2.m_upperLimit = &currentConstraintRow->m_upperLimit;
- info2.m_numIterations = globalNumIterations;
-
- switch (constraint->m_constraintType)
- {
- case B3_GPU_POINT2POINT_CONSTRAINT_TYPE:
- {
- getInfo2Point2Point(constraint,&info2,bodies);
- break;
- }
- case B3_GPU_FIXED_CONSTRAINT_TYPE:
- {
- getInfo2Point2Point(constraint,&info2,bodies);
-
- getInfo2FixedOrientation(constraint,&info2,bodies,3);
-
- break;
- }
-
- default:
- {
- }
- }
-
- ///finalize the constraint setup
- for ( j=0;j<info1;j++)
- {
- __global b3SolverConstraint* solverConstraint = &currentConstraintRow[j];
-
- if (solverConstraint->m_upperLimit>=constraint->m_breakingImpulseThreshold)
- {
- solverConstraint->m_upperLimit = constraint->m_breakingImpulseThreshold;
- }
-
- if (solverConstraint->m_lowerLimit<=-constraint->m_breakingImpulseThreshold)
- {
- solverConstraint->m_lowerLimit = -constraint->m_breakingImpulseThreshold;
- }
-
-// solverConstraint->m_originalContactPoint = constraint;
-
- Matrix3x3 invInertiaWorldA= inertias[constraint->m_rbA].m_invInertiaWorld;
- {
-
- //float4 angularFactorA(1,1,1);
- float4 ftorqueAxis1 = solverConstraint->m_relpos1CrossNormal;
- solverConstraint->m_angularComponentA = mtMul1(invInertiaWorldA,ftorqueAxis1);//*angularFactorA;
- }
-
- Matrix3x3 invInertiaWorldB= inertias[constraint->m_rbB].m_invInertiaWorld;
- {
-
- float4 ftorqueAxis2 = solverConstraint->m_relpos2CrossNormal;
- solverConstraint->m_angularComponentB = mtMul1(invInertiaWorldB,ftorqueAxis2);//*constraint->m_rbB.getAngularFactor();
- }
-
- {
- //it is ok to use solverConstraint->m_contactNormal instead of -solverConstraint->m_contactNormal
- //because it gets multiplied iMJlB
- float4 iMJlA = solverConstraint->m_contactNormal*rbA->m_invMass;
- float4 iMJaA = mtMul3(solverConstraint->m_relpos1CrossNormal,invInertiaWorldA);
- float4 iMJlB = solverConstraint->m_contactNormal*rbB->m_invMass;//sign of normal?
- float4 iMJaB = mtMul3(solverConstraint->m_relpos2CrossNormal,invInertiaWorldB);
-
- float sum = dot3F4(iMJlA,solverConstraint->m_contactNormal);
- sum += dot3F4(iMJaA,solverConstraint->m_relpos1CrossNormal);
- sum += dot3F4(iMJlB,solverConstraint->m_contactNormal);
- sum += dot3F4(iMJaB,solverConstraint->m_relpos2CrossNormal);
- float fsum = fabs(sum);
- if (fsum>FLT_EPSILON)
- {
- solverConstraint->m_jacDiagABInv = 1.f/sum;
- } else
- {
- solverConstraint->m_jacDiagABInv = 0.f;
- }
- }
-
-
- ///fix rhs
- ///todo: add force/torque accelerators
- {
- float rel_vel;
- float vel1Dotn = dot3F4(solverConstraint->m_contactNormal,rbA->m_linVel) + dot3F4(solverConstraint->m_relpos1CrossNormal,rbA->m_angVel);
- float vel2Dotn = -dot3F4(solverConstraint->m_contactNormal,rbB->m_linVel) + dot3F4(solverConstraint->m_relpos2CrossNormal,rbB->m_angVel);
-
- rel_vel = vel1Dotn+vel2Dotn;
-
- float restitution = 0.f;
- float positionalError = solverConstraint->m_rhs;//already filled in by getConstraintInfo2
- float velocityError = restitution - rel_vel * info2.m_damping;
- float penetrationImpulse = positionalError*solverConstraint->m_jacDiagABInv;
- float velocityImpulse = velocityError *solverConstraint->m_jacDiagABInv;
- solverConstraint->m_rhs = penetrationImpulse+velocityImpulse;
- solverConstraint->m_appliedImpulse = 0.f;
-
- }
- }
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.h
deleted file mode 100644
index c94b55851e..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/jointSolver.h
+++ /dev/null
@@ -1,720 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* solveConstraintRowsCL =
- "/*\n"
- "Copyright (c) 2013 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Erwin Coumans\n"
- "#define B3_CONSTRAINT_FLAG_ENABLED 1\n"
- "#define B3_GPU_POINT2POINT_CONSTRAINT_TYPE 3\n"
- "#define B3_GPU_FIXED_CONSTRAINT_TYPE 4\n"
- "#define MOTIONCLAMP 100000 //unused, for debugging/safety in case constraint solver fails\n"
- "#define B3_INFINITY 1e30f\n"
- "#define mymake_float4 (float4)\n"
- "__inline float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = mymake_float4(a.xyz,0.f);\n"
- " float4 b1 = mymake_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "typedef float4 Quaternion;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_row[3];\n"
- "}Matrix3x3;\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b);\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b);\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b)\n"
- "{\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a.m_row[0], b );\n"
- " ans.y = dot3F4( a.m_row[1], b );\n"
- " ans.z = dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b)\n"
- "{\n"
- " float4 colx = mymake_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " float4 coly = mymake_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " float4 colz = mymake_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a, colx );\n"
- " ans.y = dot3F4( a, coly );\n"
- " ans.z = dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "typedef struct\n"
- "{\n"
- " Matrix3x3 m_invInertiaWorld;\n"
- " Matrix3x3 m_initInvInertia;\n"
- "} BodyInertia;\n"
- "typedef struct\n"
- "{\n"
- " Matrix3x3 m_basis;//orientation\n"
- " float4 m_origin;//transform\n"
- "}b3Transform;\n"
- "typedef struct\n"
- "{\n"
- "// b3Transform m_worldTransformUnused;\n"
- " float4 m_deltaLinearVelocity;\n"
- " float4 m_deltaAngularVelocity;\n"
- " float4 m_angularFactor;\n"
- " float4 m_linearFactor;\n"
- " float4 m_invMass;\n"
- " float4 m_pushVelocity;\n"
- " float4 m_turnVelocity;\n"
- " float4 m_linearVelocity;\n"
- " float4 m_angularVelocity;\n"
- " union \n"
- " {\n"
- " void* m_originalBody;\n"
- " int m_originalBodyIndex;\n"
- " };\n"
- " int padding[3];\n"
- "} b3GpuSolverBody;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " Quaternion m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " unsigned int m_shapeIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} b3RigidBodyCL;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_relpos1CrossNormal;\n"
- " float4 m_contactNormal;\n"
- " float4 m_relpos2CrossNormal;\n"
- " //float4 m_contactNormal2;//usually m_contactNormal2 == -m_contactNormal\n"
- " float4 m_angularComponentA;\n"
- " float4 m_angularComponentB;\n"
- " \n"
- " float m_appliedPushImpulse;\n"
- " float m_appliedImpulse;\n"
- " int m_padding1;\n"
- " int m_padding2;\n"
- " float m_friction;\n"
- " float m_jacDiagABInv;\n"
- " float m_rhs;\n"
- " float m_cfm;\n"
- " \n"
- " float m_lowerLimit;\n"
- " float m_upperLimit;\n"
- " float m_rhsPenetration;\n"
- " int m_originalConstraint;\n"
- " int m_overrideNumSolverIterations;\n"
- " int m_frictionIndex;\n"
- " int m_solverBodyIdA;\n"
- " int m_solverBodyIdB;\n"
- "} b3SolverConstraint;\n"
- "typedef struct \n"
- "{\n"
- " int m_bodyAPtrAndSignBit;\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_originalConstraintIndex;\n"
- " int m_batchId;\n"
- "} b3BatchConstraint;\n"
- "typedef struct \n"
- "{\n"
- " int m_constraintType;\n"
- " int m_rbA;\n"
- " int m_rbB;\n"
- " float m_breakingImpulseThreshold;\n"
- " float4 m_pivotInA;\n"
- " float4 m_pivotInB;\n"
- " Quaternion m_relTargetAB;\n"
- " int m_flags;\n"
- " int m_padding[3];\n"
- "} b3GpuGenericConstraint;\n"
- "/*b3Transform getWorldTransform(b3RigidBodyCL* rb)\n"
- "{\n"
- " b3Transform newTrans;\n"
- " newTrans.setOrigin(rb->m_pos);\n"
- " newTrans.setRotation(rb->m_quat);\n"
- " return newTrans;\n"
- "}*/\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " v = mymake_float4(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline void internalApplyImpulse(__global b3GpuSolverBody* body, float4 linearComponent, float4 angularComponent,float impulseMagnitude)\n"
- "{\n"
- " body->m_deltaLinearVelocity += linearComponent*impulseMagnitude*body->m_linearFactor;\n"
- " body->m_deltaAngularVelocity += angularComponent*(impulseMagnitude*body->m_angularFactor);\n"
- "}\n"
- "void resolveSingleConstraintRowGeneric(__global b3GpuSolverBody* body1, __global b3GpuSolverBody* body2, __global b3SolverConstraint* c)\n"
- "{\n"
- " float deltaImpulse = c->m_rhs-c->m_appliedImpulse*c->m_cfm;\n"
- " float deltaVel1Dotn = dot3F4(c->m_contactNormal,body1->m_deltaLinearVelocity) + dot3F4(c->m_relpos1CrossNormal,body1->m_deltaAngularVelocity);\n"
- " float deltaVel2Dotn = -dot3F4(c->m_contactNormal,body2->m_deltaLinearVelocity) + dot3F4(c->m_relpos2CrossNormal,body2->m_deltaAngularVelocity);\n"
- " deltaImpulse -= deltaVel1Dotn*c->m_jacDiagABInv;\n"
- " deltaImpulse -= deltaVel2Dotn*c->m_jacDiagABInv;\n"
- " float sum = c->m_appliedImpulse + deltaImpulse;\n"
- " if (sum < c->m_lowerLimit)\n"
- " {\n"
- " deltaImpulse = c->m_lowerLimit-c->m_appliedImpulse;\n"
- " c->m_appliedImpulse = c->m_lowerLimit;\n"
- " }\n"
- " else if (sum > c->m_upperLimit) \n"
- " {\n"
- " deltaImpulse = c->m_upperLimit-c->m_appliedImpulse;\n"
- " c->m_appliedImpulse = c->m_upperLimit;\n"
- " }\n"
- " else\n"
- " {\n"
- " c->m_appliedImpulse = sum;\n"
- " }\n"
- " internalApplyImpulse(body1,c->m_contactNormal*body1->m_invMass,c->m_angularComponentA,deltaImpulse);\n"
- " internalApplyImpulse(body2,-c->m_contactNormal*body2->m_invMass,c->m_angularComponentB,deltaImpulse);\n"
- "}\n"
- "__kernel void solveJointConstraintRows(__global b3GpuSolverBody* solverBodies,\n"
- " __global b3BatchConstraint* batchConstraints,\n"
- " __global b3SolverConstraint* rows,\n"
- " __global unsigned int* numConstraintRowsInfo1, \n"
- " __global unsigned int* rowOffsets,\n"
- " __global b3GpuGenericConstraint* constraints,\n"
- " int batchOffset,\n"
- " int numConstraintsInBatch\n"
- " )\n"
- "{\n"
- " int b = get_global_id(0);\n"
- " if (b>=numConstraintsInBatch)\n"
- " return;\n"
- " __global b3BatchConstraint* c = &batchConstraints[b+batchOffset];\n"
- " int originalConstraintIndex = c->m_originalConstraintIndex;\n"
- " if (constraints[originalConstraintIndex].m_flags&B3_CONSTRAINT_FLAG_ENABLED)\n"
- " {\n"
- " int numConstraintRows = numConstraintRowsInfo1[originalConstraintIndex];\n"
- " int rowOffset = rowOffsets[originalConstraintIndex];\n"
- " for (int jj=0;jj<numConstraintRows;jj++)\n"
- " {\n"
- " __global b3SolverConstraint* constraint = &rows[rowOffset+jj];\n"
- " resolveSingleConstraintRowGeneric(&solverBodies[constraint->m_solverBodyIdA],&solverBodies[constraint->m_solverBodyIdB],constraint);\n"
- " }\n"
- " }\n"
- "};\n"
- "__kernel void initSolverBodies(__global b3GpuSolverBody* solverBodies,__global b3RigidBodyCL* bodiesCL, int numBodies)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numBodies)\n"
- " return;\n"
- " __global b3GpuSolverBody* solverBody = &solverBodies[i];\n"
- " __global b3RigidBodyCL* bodyCL = &bodiesCL[i];\n"
- " solverBody->m_deltaLinearVelocity = (float4)(0.f,0.f,0.f,0.f);\n"
- " solverBody->m_deltaAngularVelocity = (float4)(0.f,0.f,0.f,0.f);\n"
- " solverBody->m_pushVelocity = (float4)(0.f,0.f,0.f,0.f);\n"
- " solverBody->m_pushVelocity = (float4)(0.f,0.f,0.f,0.f);\n"
- " solverBody->m_invMass = (float4)(bodyCL->m_invMass,bodyCL->m_invMass,bodyCL->m_invMass,0.f);\n"
- " solverBody->m_originalBodyIndex = i;\n"
- " solverBody->m_angularFactor = (float4)(1,1,1,0);\n"
- " solverBody->m_linearFactor = (float4) (1,1,1,0);\n"
- " solverBody->m_linearVelocity = bodyCL->m_linVel;\n"
- " solverBody->m_angularVelocity = bodyCL->m_angVel;\n"
- "}\n"
- "__kernel void breakViolatedConstraintsKernel(__global b3GpuGenericConstraint* constraints, __global unsigned int* numConstraintRows, __global unsigned int* rowOffsets, __global b3SolverConstraint* rows, int numConstraints)\n"
- "{\n"
- " int cid = get_global_id(0);\n"
- " if (cid>=numConstraints)\n"
- " return;\n"
- " int numRows = numConstraintRows[cid];\n"
- " if (numRows)\n"
- " {\n"
- " for (int i=0;i<numRows;i++)\n"
- " {\n"
- " int rowIndex = rowOffsets[cid]+i;\n"
- " float breakingThreshold = constraints[cid].m_breakingImpulseThreshold;\n"
- " if (fabs(rows[rowIndex].m_appliedImpulse) >= breakingThreshold)\n"
- " {\n"
- " constraints[cid].m_flags =0;//&= ~B3_CONSTRAINT_FLAG_ENABLED;\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void getInfo1Kernel(__global unsigned int* infos, __global b3GpuGenericConstraint* constraints, int numConstraints)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numConstraints)\n"
- " return;\n"
- " __global b3GpuGenericConstraint* constraint = &constraints[i];\n"
- " switch (constraint->m_constraintType)\n"
- " {\n"
- " case B3_GPU_POINT2POINT_CONSTRAINT_TYPE:\n"
- " {\n"
- " infos[i] = 3;\n"
- " break;\n"
- " }\n"
- " case B3_GPU_FIXED_CONSTRAINT_TYPE:\n"
- " {\n"
- " infos[i] = 6;\n"
- " break;\n"
- " }\n"
- " default:\n"
- " {\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel void initBatchConstraintsKernel(__global unsigned int* numConstraintRows, __global unsigned int* rowOffsets, \n"
- " __global b3BatchConstraint* batchConstraints, \n"
- " __global b3GpuGenericConstraint* constraints,\n"
- " __global b3RigidBodyCL* bodies,\n"
- " int numConstraints)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numConstraints)\n"
- " return;\n"
- " int rbA = constraints[i].m_rbA;\n"
- " int rbB = constraints[i].m_rbB;\n"
- " batchConstraints[i].m_bodyAPtrAndSignBit = bodies[rbA].m_invMass != 0.f ? rbA : -rbA;\n"
- " batchConstraints[i].m_bodyBPtrAndSignBit = bodies[rbB].m_invMass != 0.f ? rbB : -rbB;\n"
- " batchConstraints[i].m_batchId = -1;\n"
- " batchConstraints[i].m_originalConstraintIndex = i;\n"
- "}\n"
- "typedef struct\n"
- "{\n"
- " // integrator parameters: frames per second (1/stepsize), default error\n"
- " // reduction parameter (0..1).\n"
- " float fps,erp;\n"
- " // for the first and second body, pointers to two (linear and angular)\n"
- " // n*3 jacobian sub matrices, stored by rows. these matrices will have\n"
- " // been initialized to 0 on entry. if the second body is zero then the\n"
- " // J2xx pointers may be 0.\n"
- " union \n"
- " {\n"
- " __global float4* m_J1linearAxisFloat4;\n"
- " __global float* m_J1linearAxis;\n"
- " };\n"
- " union\n"
- " {\n"
- " __global float4* m_J1angularAxisFloat4;\n"
- " __global float* m_J1angularAxis;\n"
- " };\n"
- " union\n"
- " {\n"
- " __global float4* m_J2linearAxisFloat4;\n"
- " __global float* m_J2linearAxis;\n"
- " };\n"
- " union\n"
- " {\n"
- " __global float4* m_J2angularAxisFloat4;\n"
- " __global float* m_J2angularAxis;\n"
- " };\n"
- " // elements to jump from one row to the next in J's\n"
- " int rowskip;\n"
- " // right hand sides of the equation J*v = c + cfm * lambda. cfm is the\n"
- " // \"constraint force mixing\" vector. c is set to zero on entry, cfm is\n"
- " // set to a constant value (typically very small or zero) value on entry.\n"
- " __global float* m_constraintError;\n"
- " __global float* cfm;\n"
- " // lo and hi limits for variables (set to -/+ infinity on entry).\n"
- " __global float* m_lowerLimit;\n"
- " __global float* m_upperLimit;\n"
- " // findex vector for variables. see the LCP solver interface for a\n"
- " // description of what this does. this is set to -1 on entry.\n"
- " // note that the returned indexes are relative to the first index of\n"
- " // the constraint.\n"
- " __global int *findex;\n"
- " // number of solver iterations\n"
- " int m_numIterations;\n"
- " //damping of the velocity\n"
- " float m_damping;\n"
- "} b3GpuConstraintInfo2;\n"
- "void getSkewSymmetricMatrix(float4 vecIn, __global float4* v0,__global float4* v1,__global float4* v2)\n"
- "{\n"
- " *v0 = (float4)(0. ,-vecIn.z ,vecIn.y,0.f);\n"
- " *v1 = (float4)(vecIn.z ,0. ,-vecIn.x,0.f);\n"
- " *v2 = (float4)(-vecIn.y ,vecIn.x ,0.f,0.f);\n"
- "}\n"
- "void getInfo2Point2Point(__global b3GpuGenericConstraint* constraint,b3GpuConstraintInfo2* info,__global b3RigidBodyCL* bodies)\n"
- "{\n"
- " float4 posA = bodies[constraint->m_rbA].m_pos;\n"
- " Quaternion rotA = bodies[constraint->m_rbA].m_quat;\n"
- " float4 posB = bodies[constraint->m_rbB].m_pos;\n"
- " Quaternion rotB = bodies[constraint->m_rbB].m_quat;\n"
- " // anchor points in global coordinates with respect to body PORs.\n"
- " \n"
- " // set jacobian\n"
- " info->m_J1linearAxis[0] = 1;\n"
- " info->m_J1linearAxis[info->rowskip+1] = 1;\n"
- " info->m_J1linearAxis[2*info->rowskip+2] = 1;\n"
- " float4 a1 = qtRotate(rotA,constraint->m_pivotInA);\n"
- " {\n"
- " __global float4* angular0 = (__global float4*)(info->m_J1angularAxis);\n"
- " __global float4* angular1 = (__global float4*)(info->m_J1angularAxis+info->rowskip);\n"
- " __global float4* angular2 = (__global float4*)(info->m_J1angularAxis+2*info->rowskip);\n"
- " float4 a1neg = -a1;\n"
- " getSkewSymmetricMatrix(a1neg,angular0,angular1,angular2);\n"
- " }\n"
- " if (info->m_J2linearAxis)\n"
- " {\n"
- " info->m_J2linearAxis[0] = -1;\n"
- " info->m_J2linearAxis[info->rowskip+1] = -1;\n"
- " info->m_J2linearAxis[2*info->rowskip+2] = -1;\n"
- " }\n"
- " \n"
- " float4 a2 = qtRotate(rotB,constraint->m_pivotInB);\n"
- " \n"
- " {\n"
- " // float4 a2n = -a2;\n"
- " __global float4* angular0 = (__global float4*)(info->m_J2angularAxis);\n"
- " __global float4* angular1 = (__global float4*)(info->m_J2angularAxis+info->rowskip);\n"
- " __global float4* angular2 = (__global float4*)(info->m_J2angularAxis+2*info->rowskip);\n"
- " getSkewSymmetricMatrix(a2,angular0,angular1,angular2);\n"
- " }\n"
- " \n"
- " // set right hand side\n"
- "// float currERP = (m_flags & B3_P2P_FLAGS_ERP) ? m_erp : info->erp;\n"
- " float currERP = info->erp;\n"
- " float k = info->fps * currERP;\n"
- " int j;\n"
- " float4 result = a2 + posB - a1 - posA;\n"
- " float* resultPtr = &result;\n"
- " for (j=0; j<3; j++)\n"
- " {\n"
- " info->m_constraintError[j*info->rowskip] = k * (resultPtr[j]);\n"
- " }\n"
- "}\n"
- "Quaternion nearest( Quaternion first, Quaternion qd)\n"
- "{\n"
- " Quaternion diff,sum;\n"
- " diff = first- qd;\n"
- " sum = first + qd;\n"
- " \n"
- " if( dot(diff,diff) < dot(sum,sum) )\n"
- " return qd;\n"
- " return (-qd);\n"
- "}\n"
- "float b3Acos(float x) \n"
- "{ \n"
- " if (x<-1) \n"
- " x=-1; \n"
- " if (x>1) \n"
- " x=1;\n"
- " return acos(x); \n"
- "}\n"
- "float getAngle(Quaternion orn)\n"
- "{\n"
- " if (orn.w>=1.f)\n"
- " orn.w=1.f;\n"
- " float s = 2.f * b3Acos(orn.w);\n"
- " return s;\n"
- "}\n"
- "void calculateDiffAxisAngleQuaternion( Quaternion orn0,Quaternion orn1a,float4* axis,float* angle)\n"
- "{\n"
- " Quaternion orn1 = nearest(orn0,orn1a);\n"
- " \n"
- " Quaternion dorn = qtMul(orn1,qtInvert(orn0));\n"
- " *angle = getAngle(dorn);\n"
- " *axis = (float4)(dorn.x,dorn.y,dorn.z,0.f);\n"
- " \n"
- " //check for axis length\n"
- " float len = dot3F4(*axis,*axis);\n"
- " if (len < FLT_EPSILON*FLT_EPSILON)\n"
- " *axis = (float4)(1,0,0,0);\n"
- " else\n"
- " *axis /= sqrt(len);\n"
- "}\n"
- "void getInfo2FixedOrientation(__global b3GpuGenericConstraint* constraint,b3GpuConstraintInfo2* info,__global b3RigidBodyCL* bodies, int start_row)\n"
- "{\n"
- " Quaternion worldOrnA = bodies[constraint->m_rbA].m_quat;\n"
- " Quaternion worldOrnB = bodies[constraint->m_rbB].m_quat;\n"
- " int s = info->rowskip;\n"
- " int start_index = start_row * s;\n"
- " // 3 rows to make body rotations equal\n"
- " info->m_J1angularAxis[start_index] = 1;\n"
- " info->m_J1angularAxis[start_index + s + 1] = 1;\n"
- " info->m_J1angularAxis[start_index + s*2+2] = 1;\n"
- " if ( info->m_J2angularAxis)\n"
- " {\n"
- " info->m_J2angularAxis[start_index] = -1;\n"
- " info->m_J2angularAxis[start_index + s+1] = -1;\n"
- " info->m_J2angularAxis[start_index + s*2+2] = -1;\n"
- " }\n"
- " \n"
- " float currERP = info->erp;\n"
- " float k = info->fps * currERP;\n"
- " float4 diff;\n"
- " float angle;\n"
- " float4 qrelCur = qtMul(worldOrnA,qtInvert(worldOrnB));\n"
- " \n"
- " calculateDiffAxisAngleQuaternion(constraint->m_relTargetAB,qrelCur,&diff,&angle);\n"
- " diff*=-angle;\n"
- " \n"
- " float* resultPtr = &diff;\n"
- " \n"
- " for (int j=0; j<3; j++)\n"
- " {\n"
- " info->m_constraintError[(3+j)*info->rowskip] = k * resultPtr[j];\n"
- " }\n"
- " \n"
- "}\n"
- "__kernel void writeBackVelocitiesKernel(__global b3RigidBodyCL* bodies,__global b3GpuSolverBody* solverBodies,int numBodies)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numBodies)\n"
- " return;\n"
- " if (bodies[i].m_invMass)\n"
- " {\n"
- "// if (length(solverBodies[i].m_deltaLinearVelocity)<MOTIONCLAMP)\n"
- " {\n"
- " bodies[i].m_linVel += solverBodies[i].m_deltaLinearVelocity;\n"
- " }\n"
- "// if (length(solverBodies[i].m_deltaAngularVelocity)<MOTIONCLAMP)\n"
- " {\n"
- " bodies[i].m_angVel += solverBodies[i].m_deltaAngularVelocity;\n"
- " } \n"
- " }\n"
- "}\n"
- "__kernel void getInfo2Kernel(__global b3SolverConstraint* solverConstraintRows, \n"
- " __global unsigned int* infos, \n"
- " __global unsigned int* constraintRowOffsets, \n"
- " __global b3GpuGenericConstraint* constraints, \n"
- " __global b3BatchConstraint* batchConstraints, \n"
- " __global b3RigidBodyCL* bodies,\n"
- " __global BodyInertia* inertias,\n"
- " __global b3GpuSolverBody* solverBodies,\n"
- " float timeStep,\n"
- " float globalErp,\n"
- " float globalCfm,\n"
- " float globalDamping,\n"
- " int globalNumIterations,\n"
- " int numConstraints)\n"
- "{\n"
- " int i = get_global_id(0);\n"
- " if (i>=numConstraints)\n"
- " return;\n"
- " \n"
- " //for now, always initialize the batch info\n"
- " int info1 = infos[i];\n"
- " \n"
- " __global b3SolverConstraint* currentConstraintRow = &solverConstraintRows[constraintRowOffsets[i]];\n"
- " __global b3GpuGenericConstraint* constraint = &constraints[i];\n"
- " __global b3RigidBodyCL* rbA = &bodies[ constraint->m_rbA];\n"
- " __global b3RigidBodyCL* rbB = &bodies[ constraint->m_rbB];\n"
- " int solverBodyIdA = constraint->m_rbA;\n"
- " int solverBodyIdB = constraint->m_rbB;\n"
- " __global b3GpuSolverBody* bodyAPtr = &solverBodies[solverBodyIdA];\n"
- " __global b3GpuSolverBody* bodyBPtr = &solverBodies[solverBodyIdB];\n"
- " if (rbA->m_invMass)\n"
- " {\n"
- " batchConstraints[i].m_bodyAPtrAndSignBit = solverBodyIdA;\n"
- " } else\n"
- " {\n"
- "// if (!solverBodyIdA)\n"
- "// m_staticIdx = 0;\n"
- " batchConstraints[i].m_bodyAPtrAndSignBit = -solverBodyIdA;\n"
- " }\n"
- " if (rbB->m_invMass)\n"
- " {\n"
- " batchConstraints[i].m_bodyBPtrAndSignBit = solverBodyIdB;\n"
- " } else\n"
- " {\n"
- "// if (!solverBodyIdB)\n"
- "// m_staticIdx = 0;\n"
- " batchConstraints[i].m_bodyBPtrAndSignBit = -solverBodyIdB;\n"
- " }\n"
- " if (info1)\n"
- " {\n"
- " int overrideNumSolverIterations = 0;//constraint->getOverrideNumSolverIterations() > 0 ? constraint->getOverrideNumSolverIterations() : infoGlobal.m_numIterations;\n"
- "// if (overrideNumSolverIterations>m_maxOverrideNumSolverIterations)\n"
- " // m_maxOverrideNumSolverIterations = overrideNumSolverIterations;\n"
- " int j;\n"
- " for ( j=0;j<info1;j++)\n"
- " {\n"
- "// memset(&currentConstraintRow[j],0,sizeof(b3SolverConstraint));\n"
- " currentConstraintRow[j].m_angularComponentA = (float4)(0,0,0,0);\n"
- " currentConstraintRow[j].m_angularComponentB = (float4)(0,0,0,0);\n"
- " currentConstraintRow[j].m_appliedImpulse = 0.f;\n"
- " currentConstraintRow[j].m_appliedPushImpulse = 0.f;\n"
- " currentConstraintRow[j].m_cfm = 0.f;\n"
- " currentConstraintRow[j].m_contactNormal = (float4)(0,0,0,0);\n"
- " currentConstraintRow[j].m_friction = 0.f;\n"
- " currentConstraintRow[j].m_frictionIndex = 0;\n"
- " currentConstraintRow[j].m_jacDiagABInv = 0.f;\n"
- " currentConstraintRow[j].m_lowerLimit = 0.f;\n"
- " currentConstraintRow[j].m_upperLimit = 0.f;\n"
- " currentConstraintRow[j].m_originalConstraint = i;\n"
- " currentConstraintRow[j].m_overrideNumSolverIterations = 0;\n"
- " currentConstraintRow[j].m_relpos1CrossNormal = (float4)(0,0,0,0);\n"
- " currentConstraintRow[j].m_relpos2CrossNormal = (float4)(0,0,0,0);\n"
- " currentConstraintRow[j].m_rhs = 0.f;\n"
- " currentConstraintRow[j].m_rhsPenetration = 0.f;\n"
- " currentConstraintRow[j].m_solverBodyIdA = 0;\n"
- " currentConstraintRow[j].m_solverBodyIdB = 0;\n"
- " \n"
- " currentConstraintRow[j].m_lowerLimit = -B3_INFINITY;\n"
- " currentConstraintRow[j].m_upperLimit = B3_INFINITY;\n"
- " currentConstraintRow[j].m_appliedImpulse = 0.f;\n"
- " currentConstraintRow[j].m_appliedPushImpulse = 0.f;\n"
- " currentConstraintRow[j].m_solverBodyIdA = solverBodyIdA;\n"
- " currentConstraintRow[j].m_solverBodyIdB = solverBodyIdB;\n"
- " currentConstraintRow[j].m_overrideNumSolverIterations = overrideNumSolverIterations; \n"
- " }\n"
- " bodyAPtr->m_deltaLinearVelocity = (float4)(0,0,0,0);\n"
- " bodyAPtr->m_deltaAngularVelocity = (float4)(0,0,0,0);\n"
- " bodyAPtr->m_pushVelocity = (float4)(0,0,0,0);\n"
- " bodyAPtr->m_turnVelocity = (float4)(0,0,0,0);\n"
- " bodyBPtr->m_deltaLinearVelocity = (float4)(0,0,0,0);\n"
- " bodyBPtr->m_deltaAngularVelocity = (float4)(0,0,0,0);\n"
- " bodyBPtr->m_pushVelocity = (float4)(0,0,0,0);\n"
- " bodyBPtr->m_turnVelocity = (float4)(0,0,0,0);\n"
- " int rowskip = sizeof(b3SolverConstraint)/sizeof(float);//check this\n"
- " \n"
- " b3GpuConstraintInfo2 info2;\n"
- " info2.fps = 1.f/timeStep;\n"
- " info2.erp = globalErp;\n"
- " info2.m_J1linearAxisFloat4 = &currentConstraintRow->m_contactNormal;\n"
- " info2.m_J1angularAxisFloat4 = &currentConstraintRow->m_relpos1CrossNormal;\n"
- " info2.m_J2linearAxisFloat4 = 0;\n"
- " info2.m_J2angularAxisFloat4 = &currentConstraintRow->m_relpos2CrossNormal;\n"
- " info2.rowskip = sizeof(b3SolverConstraint)/sizeof(float);//check this\n"
- " ///the size of b3SolverConstraint needs be a multiple of float\n"
- "// b3Assert(info2.rowskip*sizeof(float)== sizeof(b3SolverConstraint));\n"
- " info2.m_constraintError = &currentConstraintRow->m_rhs;\n"
- " currentConstraintRow->m_cfm = globalCfm;\n"
- " info2.m_damping = globalDamping;\n"
- " info2.cfm = &currentConstraintRow->m_cfm;\n"
- " info2.m_lowerLimit = &currentConstraintRow->m_lowerLimit;\n"
- " info2.m_upperLimit = &currentConstraintRow->m_upperLimit;\n"
- " info2.m_numIterations = globalNumIterations;\n"
- " switch (constraint->m_constraintType)\n"
- " {\n"
- " case B3_GPU_POINT2POINT_CONSTRAINT_TYPE:\n"
- " {\n"
- " getInfo2Point2Point(constraint,&info2,bodies);\n"
- " break;\n"
- " }\n"
- " case B3_GPU_FIXED_CONSTRAINT_TYPE:\n"
- " {\n"
- " getInfo2Point2Point(constraint,&info2,bodies);\n"
- " getInfo2FixedOrientation(constraint,&info2,bodies,3);\n"
- " break;\n"
- " }\n"
- " default:\n"
- " {\n"
- " }\n"
- " }\n"
- " ///finalize the constraint setup\n"
- " for ( j=0;j<info1;j++)\n"
- " {\n"
- " __global b3SolverConstraint* solverConstraint = &currentConstraintRow[j];\n"
- " if (solverConstraint->m_upperLimit>=constraint->m_breakingImpulseThreshold)\n"
- " {\n"
- " solverConstraint->m_upperLimit = constraint->m_breakingImpulseThreshold;\n"
- " }\n"
- " if (solverConstraint->m_lowerLimit<=-constraint->m_breakingImpulseThreshold)\n"
- " {\n"
- " solverConstraint->m_lowerLimit = -constraint->m_breakingImpulseThreshold;\n"
- " }\n"
- "// solverConstraint->m_originalContactPoint = constraint;\n"
- " \n"
- " Matrix3x3 invInertiaWorldA= inertias[constraint->m_rbA].m_invInertiaWorld;\n"
- " {\n"
- " //float4 angularFactorA(1,1,1);\n"
- " float4 ftorqueAxis1 = solverConstraint->m_relpos1CrossNormal;\n"
- " solverConstraint->m_angularComponentA = mtMul1(invInertiaWorldA,ftorqueAxis1);//*angularFactorA;\n"
- " }\n"
- " \n"
- " Matrix3x3 invInertiaWorldB= inertias[constraint->m_rbB].m_invInertiaWorld;\n"
- " {\n"
- " float4 ftorqueAxis2 = solverConstraint->m_relpos2CrossNormal;\n"
- " solverConstraint->m_angularComponentB = mtMul1(invInertiaWorldB,ftorqueAxis2);//*constraint->m_rbB.getAngularFactor();\n"
- " }\n"
- " {\n"
- " //it is ok to use solverConstraint->m_contactNormal instead of -solverConstraint->m_contactNormal\n"
- " //because it gets multiplied iMJlB\n"
- " float4 iMJlA = solverConstraint->m_contactNormal*rbA->m_invMass;\n"
- " float4 iMJaA = mtMul3(solverConstraint->m_relpos1CrossNormal,invInertiaWorldA);\n"
- " float4 iMJlB = solverConstraint->m_contactNormal*rbB->m_invMass;//sign of normal?\n"
- " float4 iMJaB = mtMul3(solverConstraint->m_relpos2CrossNormal,invInertiaWorldB);\n"
- " float sum = dot3F4(iMJlA,solverConstraint->m_contactNormal);\n"
- " sum += dot3F4(iMJaA,solverConstraint->m_relpos1CrossNormal);\n"
- " sum += dot3F4(iMJlB,solverConstraint->m_contactNormal);\n"
- " sum += dot3F4(iMJaB,solverConstraint->m_relpos2CrossNormal);\n"
- " float fsum = fabs(sum);\n"
- " if (fsum>FLT_EPSILON)\n"
- " {\n"
- " solverConstraint->m_jacDiagABInv = 1.f/sum;\n"
- " } else\n"
- " {\n"
- " solverConstraint->m_jacDiagABInv = 0.f;\n"
- " }\n"
- " }\n"
- " ///fix rhs\n"
- " ///todo: add force/torque accelerators\n"
- " {\n"
- " float rel_vel;\n"
- " float vel1Dotn = dot3F4(solverConstraint->m_contactNormal,rbA->m_linVel) + dot3F4(solverConstraint->m_relpos1CrossNormal,rbA->m_angVel);\n"
- " float vel2Dotn = -dot3F4(solverConstraint->m_contactNormal,rbB->m_linVel) + dot3F4(solverConstraint->m_relpos2CrossNormal,rbB->m_angVel);\n"
- " rel_vel = vel1Dotn+vel2Dotn;\n"
- " float restitution = 0.f;\n"
- " float positionalError = solverConstraint->m_rhs;//already filled in by getConstraintInfo2\n"
- " float velocityError = restitution - rel_vel * info2.m_damping;\n"
- " float penetrationImpulse = positionalError*solverConstraint->m_jacDiagABInv;\n"
- " float velocityImpulse = velocityError *solverConstraint->m_jacDiagABInv;\n"
- " solverConstraint->m_rhs = penetrationImpulse+velocityImpulse;\n"
- " solverConstraint->m_appliedImpulse = 0.f;\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.cl
deleted file mode 100644
index 5c4d62e4ec..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.cl
+++ /dev/null
@@ -1,501 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-//#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile global int*
-#endif
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define mymake_float4 (float4)
-//#define make_float2 (float2)
-//#define make_uint4 (uint4)
-//#define make_int4 (int4)
-//#define make_uint2 (uint2)
-//#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-///////////////////////////////////////
-// Vector
-///////////////////////////////////////
-
-
-
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = mymake_float4(a.xyz,0.f);
- float4 b1 = mymake_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-
-
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = mymake_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-// float length = sqrtf(dot3F4(a, a));
-// return 1.f/length * a;
-}
-
-
-
-
-///////////////////////////////////////
-// Matrix3x3
-///////////////////////////////////////
-
-typedef struct
-{
- float4 m_row[3];
-}Matrix3x3;
-
-
-
-
-
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b);
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b);
-
-
-
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b)
-{
- float4 ans;
- ans.x = dot3F4( a.m_row[0], b );
- ans.y = dot3F4( a.m_row[1], b );
- ans.z = dot3F4( a.m_row[2], b );
- ans.w = 0.f;
- return ans;
-}
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b)
-{
- float4 colx = mymake_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
- float4 coly = mymake_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
- float4 colz = mymake_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
-
- float4 ans;
- ans.x = dot3F4( a, colx );
- ans.y = dot3F4( a, coly );
- ans.z = dot3F4( a, colz );
- return ans;
-}
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-
-
-
-
-
-
-#define WG_SIZE 64
-
-typedef struct
-{
- float4 m_pos;
- Quaternion m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_shapeIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} Body;
-
-typedef struct
-{
- Matrix3x3 m_invInertia;
- Matrix3x3 m_initInvInertia;
-} Shape;
-
-typedef struct
-{
- float4 m_linear;
- float4 m_worldPos[4];
- float4 m_center;
- float m_jacCoeffInv[4];
- float m_b[4];
- float m_appliedRambdaDt[4];
-
- float m_fJacCoeffInv[2];
- float m_fAppliedRambdaDt[2];
-
- u32 m_bodyA;
- u32 m_bodyB;
-
- int m_batchIdx;
- u32 m_paddings[1];
-} Constraint4;
-
-
-
-typedef struct
-{
- int m_nConstraints;
- int m_start;
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBuffer;
-
-typedef struct
-{
- int m_solveFriction;
- int m_maxBatch; // long batch really kills the performance
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBufferBatchSolve;
-
-void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1);
-
-void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1)
-{
- *linear = mymake_float4(-n.xyz,0.f);
- *angular0 = -cross3(r0, n);
- *angular1 = cross3(r1, n);
-}
-
-float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 );
-
-float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 )
-{
- return dot3F4(l0, linVel0) + dot3F4(a0, angVel0) + dot3F4(l1, linVel1) + dot3F4(a1, angVel1);
-}
-
-
-float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,
- float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1);
-
-float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,
- float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1)
-{
- // linear0,1 are normlized
- float jmj0 = invMass0;//dot3F4(linear0, linear0)*invMass0;
- float jmj1 = dot3F4(mtMul3(angular0,*invInertia0), angular0);
- float jmj2 = invMass1;//dot3F4(linear1, linear1)*invMass1;
- float jmj3 = dot3F4(mtMul3(angular1,*invInertia1), angular1);
- return -1.f/(jmj0+jmj1+jmj2+jmj3);
-}
-
-
-void solveContact(__global Constraint4* cs,
- float4 posA, float4* linVelA, float4* angVelA, float invMassA, Matrix3x3 invInertiaA,
- float4 posB, float4* linVelB, float4* angVelB, float invMassB, Matrix3x3 invInertiaB);
-
-void solveContact(__global Constraint4* cs,
- float4 posA, float4* linVelA, float4* angVelA, float invMassA, Matrix3x3 invInertiaA,
- float4 posB, float4* linVelB, float4* angVelB, float invMassB, Matrix3x3 invInertiaB)
-{
- float minRambdaDt = 0;
- float maxRambdaDt = FLT_MAX;
-
- for(int ic=0; ic<4; ic++)
- {
- if( cs->m_jacCoeffInv[ic] == 0.f ) continue;
-
- float4 angular0, angular1, linear;
- float4 r0 = cs->m_worldPos[ic] - posA;
- float4 r1 = cs->m_worldPos[ic] - posB;
- setLinearAndAngular( -cs->m_linear, r0, r1, &linear, &angular0, &angular1 );
-
- float rambdaDt = calcRelVel( cs->m_linear, -cs->m_linear, angular0, angular1,
- *linVelA, *angVelA, *linVelB, *angVelB ) + cs->m_b[ic];
- rambdaDt *= cs->m_jacCoeffInv[ic];
-
- {
- float prevSum = cs->m_appliedRambdaDt[ic];
- float updated = prevSum;
- updated += rambdaDt;
- updated = max2( updated, minRambdaDt );
- updated = min2( updated, maxRambdaDt );
- rambdaDt = updated - prevSum;
- cs->m_appliedRambdaDt[ic] = updated;
- }
-
- float4 linImp0 = invMassA*linear*rambdaDt;
- float4 linImp1 = invMassB*(-linear)*rambdaDt;
- float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;
- float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;
-
- *linVelA += linImp0;
- *angVelA += angImp0;
- *linVelB += linImp1;
- *angVelB += angImp1;
- }
-}
-
-void btPlaneSpace1 (const float4* n, float4* p, float4* q);
- void btPlaneSpace1 (const float4* n, float4* p, float4* q)
-{
- if (fabs(n[0].z) > 0.70710678f) {
- // choose p in y-z plane
- float a = n[0].y*n[0].y + n[0].z*n[0].z;
- float k = 1.f/sqrt(a);
- p[0].x = 0;
- p[0].y = -n[0].z*k;
- p[0].z = n[0].y*k;
- // set q = n x p
- q[0].x = a*k;
- q[0].y = -n[0].x*p[0].z;
- q[0].z = n[0].x*p[0].y;
- }
- else {
- // choose p in x-y plane
- float a = n[0].x*n[0].x + n[0].y*n[0].y;
- float k = 1.f/sqrt(a);
- p[0].x = -n[0].y*k;
- p[0].y = n[0].x*k;
- p[0].z = 0;
- // set q = n x p
- q[0].x = -n[0].z*p[0].y;
- q[0].y = n[0].z*p[0].x;
- q[0].z = a*k;
- }
-}
-
-void solveContactConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs);
-void solveContactConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs)
-{
- //float frictionCoeff = ldsCs[0].m_linear.w;
- int aIdx = ldsCs[0].m_bodyA;
- int bIdx = ldsCs[0].m_bodyB;
-
- float4 posA = gBodies[aIdx].m_pos;
- float4 linVelA = gBodies[aIdx].m_linVel;
- float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;
-
- float4 posB = gBodies[bIdx].m_pos;
- float4 linVelB = gBodies[bIdx].m_linVel;
- float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;
-
- solveContact( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,
- posB, &linVelB, &angVelB, invMassB, invInertiaB );
-
- if (gBodies[aIdx].m_invMass)
- {
- gBodies[aIdx].m_linVel = linVelA;
- gBodies[aIdx].m_angVel = angVelA;
- } else
- {
- gBodies[aIdx].m_linVel = mymake_float4(0,0,0,0);
- gBodies[aIdx].m_angVel = mymake_float4(0,0,0,0);
-
- }
- if (gBodies[bIdx].m_invMass)
- {
- gBodies[bIdx].m_linVel = linVelB;
- gBodies[bIdx].m_angVel = angVelB;
- } else
- {
- gBodies[bIdx].m_linVel = mymake_float4(0,0,0,0);
- gBodies[bIdx].m_angVel = mymake_float4(0,0,0,0);
-
- }
-
-}
-
-
-
-typedef struct
-{
- int m_valInt0;
- int m_valInt1;
- int m_valInt2;
- int m_valInt3;
-
- float m_val0;
- float m_val1;
- float m_val2;
- float m_val3;
-} SolverDebugInfo;
-
-
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void BatchSolveKernelContact(__global Body* gBodies,
- __global Shape* gShapes,
- __global Constraint4* gConstraints,
- __global int* gN,
- __global int* gOffsets,
- __global int* batchSizes,
- int maxBatch1,
- int cellBatch,
- int4 nSplit
- )
-{
- //__local int ldsBatchIdx[WG_SIZE+1];
- __local int ldsCurBatch;
- __local int ldsNextBatch;
- __local int ldsStart;
-
- int lIdx = GET_LOCAL_IDX;
- int wgIdx = GET_GROUP_IDX;
-
-// int gIdx = GET_GLOBAL_IDX;
-// debugInfo[gIdx].m_valInt0 = gIdx;
- //debugInfo[gIdx].m_valInt1 = GET_GROUP_SIZE;
-
-
-
-
- int zIdx = (wgIdx/((nSplit.x*nSplit.y)/4))*2+((cellBatch&4)>>2);
- int remain= (wgIdx%((nSplit.x*nSplit.y)/4));
- int yIdx = (remain/(nSplit.x/2))*2 + ((cellBatch&2)>>1);
- int xIdx = (remain%(nSplit.x/2))*2 + (cellBatch&1);
- int cellIdx = xIdx+yIdx*nSplit.x+zIdx*(nSplit.x*nSplit.y);
-
- //int xIdx = (wgIdx/(nSplit/2))*2 + (bIdx&1);
- //int yIdx = (wgIdx%(nSplit/2))*2 + (bIdx>>1);
- //int cellIdx = xIdx+yIdx*nSplit;
-
- if( gN[cellIdx] == 0 )
- return;
-
- int maxBatch = batchSizes[cellIdx];
-
-
- const int start = gOffsets[cellIdx];
- const int end = start + gN[cellIdx];
-
-
-
-
- if( lIdx == 0 )
- {
- ldsCurBatch = 0;
- ldsNextBatch = 0;
- ldsStart = start;
- }
-
-
- GROUP_LDS_BARRIER;
-
- int idx=ldsStart+lIdx;
- while (ldsCurBatch < maxBatch)
- {
- for(; idx<end; )
- {
- if (gConstraints[idx].m_batchIdx == ldsCurBatch)
- {
- solveContactConstraint( gBodies, gShapes, &gConstraints[idx] );
-
- idx+=64;
- } else
- {
- break;
- }
- }
- GROUP_LDS_BARRIER;
-
- if( lIdx == 0 )
- {
- ldsCurBatch++;
- }
- GROUP_LDS_BARRIER;
- }
-
-
-}
-
-
-
-__kernel void solveSingleContactKernel(__global Body* gBodies,
- __global Shape* gShapes,
- __global Constraint4* gConstraints,
- int cellIdx,
- int batchOffset,
- int numConstraintsInBatch
- )
-{
-
- int index = get_global_id(0);
- if (index < numConstraintsInBatch)
- {
- int idx=batchOffset+index;
- solveContactConstraint( gBodies, gShapes, &gConstraints[idx] );
- }
-}
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.h
deleted file mode 100644
index 6e14ad51fc..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveContact.h
+++ /dev/null
@@ -1,392 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* solveContactCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "//#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile global int*\n"
- "#endif\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define mymake_float4 (float4)\n"
- "//#define make_float2 (float2)\n"
- "//#define make_uint4 (uint4)\n"
- "//#define make_int4 (int4)\n"
- "//#define make_uint2 (uint2)\n"
- "//#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "///////////////////////////////////////\n"
- "// Vector\n"
- "///////////////////////////////////////\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = mymake_float4(a.xyz,0.f);\n"
- " float4 b1 = mymake_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = mymake_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "// float length = sqrtf(dot3F4(a, a));\n"
- "// return 1.f/length * a;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Matrix3x3\n"
- "///////////////////////////////////////\n"
- "typedef struct\n"
- "{\n"
- " float4 m_row[3];\n"
- "}Matrix3x3;\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b);\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b);\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b)\n"
- "{\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a.m_row[0], b );\n"
- " ans.y = dot3F4( a.m_row[1], b );\n"
- " ans.z = dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b)\n"
- "{\n"
- " float4 colx = mymake_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " float4 coly = mymake_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " float4 colz = mymake_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a, colx );\n"
- " ans.y = dot3F4( a, coly );\n"
- " ans.z = dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "#define WG_SIZE 64\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " Quaternion m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_shapeIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} Body;\n"
- "typedef struct\n"
- "{\n"
- " Matrix3x3 m_invInertia;\n"
- " Matrix3x3 m_initInvInertia;\n"
- "} Shape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_linear;\n"
- " float4 m_worldPos[4];\n"
- " float4 m_center; \n"
- " float m_jacCoeffInv[4];\n"
- " float m_b[4];\n"
- " float m_appliedRambdaDt[4];\n"
- " float m_fJacCoeffInv[2]; \n"
- " float m_fAppliedRambdaDt[2]; \n"
- " u32 m_bodyA;\n"
- " u32 m_bodyB;\n"
- " int m_batchIdx;\n"
- " u32 m_paddings[1];\n"
- "} Constraint4;\n"
- "typedef struct\n"
- "{\n"
- " int m_nConstraints;\n"
- " int m_start;\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBuffer;\n"
- "typedef struct\n"
- "{\n"
- " int m_solveFriction;\n"
- " int m_maxBatch; // long batch really kills the performance\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBufferBatchSolve;\n"
- "void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1);\n"
- "void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1)\n"
- "{\n"
- " *linear = mymake_float4(-n.xyz,0.f);\n"
- " *angular0 = -cross3(r0, n);\n"
- " *angular1 = cross3(r1, n);\n"
- "}\n"
- "float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 );\n"
- "float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 )\n"
- "{\n"
- " return dot3F4(l0, linVel0) + dot3F4(a0, angVel0) + dot3F4(l1, linVel1) + dot3F4(a1, angVel1);\n"
- "}\n"
- "float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,\n"
- " float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1);\n"
- "float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,\n"
- " float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1)\n"
- "{\n"
- " // linear0,1 are normlized\n"
- " float jmj0 = invMass0;//dot3F4(linear0, linear0)*invMass0;\n"
- " float jmj1 = dot3F4(mtMul3(angular0,*invInertia0), angular0);\n"
- " float jmj2 = invMass1;//dot3F4(linear1, linear1)*invMass1;\n"
- " float jmj3 = dot3F4(mtMul3(angular1,*invInertia1), angular1);\n"
- " return -1.f/(jmj0+jmj1+jmj2+jmj3);\n"
- "}\n"
- "void solveContact(__global Constraint4* cs,\n"
- " float4 posA, float4* linVelA, float4* angVelA, float invMassA, Matrix3x3 invInertiaA,\n"
- " float4 posB, float4* linVelB, float4* angVelB, float invMassB, Matrix3x3 invInertiaB);\n"
- "void solveContact(__global Constraint4* cs,\n"
- " float4 posA, float4* linVelA, float4* angVelA, float invMassA, Matrix3x3 invInertiaA,\n"
- " float4 posB, float4* linVelB, float4* angVelB, float invMassB, Matrix3x3 invInertiaB)\n"
- "{\n"
- " float minRambdaDt = 0;\n"
- " float maxRambdaDt = FLT_MAX;\n"
- " for(int ic=0; ic<4; ic++)\n"
- " {\n"
- " if( cs->m_jacCoeffInv[ic] == 0.f ) continue;\n"
- " float4 angular0, angular1, linear;\n"
- " float4 r0 = cs->m_worldPos[ic] - posA;\n"
- " float4 r1 = cs->m_worldPos[ic] - posB;\n"
- " setLinearAndAngular( -cs->m_linear, r0, r1, &linear, &angular0, &angular1 );\n"
- " float rambdaDt = calcRelVel( cs->m_linear, -cs->m_linear, angular0, angular1, \n"
- " *linVelA, *angVelA, *linVelB, *angVelB ) + cs->m_b[ic];\n"
- " rambdaDt *= cs->m_jacCoeffInv[ic];\n"
- " {\n"
- " float prevSum = cs->m_appliedRambdaDt[ic];\n"
- " float updated = prevSum;\n"
- " updated += rambdaDt;\n"
- " updated = max2( updated, minRambdaDt );\n"
- " updated = min2( updated, maxRambdaDt );\n"
- " rambdaDt = updated - prevSum;\n"
- " cs->m_appliedRambdaDt[ic] = updated;\n"
- " }\n"
- " float4 linImp0 = invMassA*linear*rambdaDt;\n"
- " float4 linImp1 = invMassB*(-linear)*rambdaDt;\n"
- " float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;\n"
- " float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;\n"
- " *linVelA += linImp0;\n"
- " *angVelA += angImp0;\n"
- " *linVelB += linImp1;\n"
- " *angVelB += angImp1;\n"
- " }\n"
- "}\n"
- "void btPlaneSpace1 (const float4* n, float4* p, float4* q);\n"
- " void btPlaneSpace1 (const float4* n, float4* p, float4* q)\n"
- "{\n"
- " if (fabs(n[0].z) > 0.70710678f) {\n"
- " // choose p in y-z plane\n"
- " float a = n[0].y*n[0].y + n[0].z*n[0].z;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = 0;\n"
- " p[0].y = -n[0].z*k;\n"
- " p[0].z = n[0].y*k;\n"
- " // set q = n x p\n"
- " q[0].x = a*k;\n"
- " q[0].y = -n[0].x*p[0].z;\n"
- " q[0].z = n[0].x*p[0].y;\n"
- " }\n"
- " else {\n"
- " // choose p in x-y plane\n"
- " float a = n[0].x*n[0].x + n[0].y*n[0].y;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = -n[0].y*k;\n"
- " p[0].y = n[0].x*k;\n"
- " p[0].z = 0;\n"
- " // set q = n x p\n"
- " q[0].x = -n[0].z*p[0].y;\n"
- " q[0].y = n[0].z*p[0].x;\n"
- " q[0].z = a*k;\n"
- " }\n"
- "}\n"
- "void solveContactConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs);\n"
- "void solveContactConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs)\n"
- "{\n"
- " //float frictionCoeff = ldsCs[0].m_linear.w;\n"
- " int aIdx = ldsCs[0].m_bodyA;\n"
- " int bIdx = ldsCs[0].m_bodyB;\n"
- " float4 posA = gBodies[aIdx].m_pos;\n"
- " float4 linVelA = gBodies[aIdx].m_linVel;\n"
- " float4 angVelA = gBodies[aIdx].m_angVel;\n"
- " float invMassA = gBodies[aIdx].m_invMass;\n"
- " Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;\n"
- " float4 posB = gBodies[bIdx].m_pos;\n"
- " float4 linVelB = gBodies[bIdx].m_linVel;\n"
- " float4 angVelB = gBodies[bIdx].m_angVel;\n"
- " float invMassB = gBodies[bIdx].m_invMass;\n"
- " Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;\n"
- " solveContact( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,\n"
- " posB, &linVelB, &angVelB, invMassB, invInertiaB );\n"
- " if (gBodies[aIdx].m_invMass)\n"
- " {\n"
- " gBodies[aIdx].m_linVel = linVelA;\n"
- " gBodies[aIdx].m_angVel = angVelA;\n"
- " } else\n"
- " {\n"
- " gBodies[aIdx].m_linVel = mymake_float4(0,0,0,0);\n"
- " gBodies[aIdx].m_angVel = mymake_float4(0,0,0,0);\n"
- " \n"
- " }\n"
- " if (gBodies[bIdx].m_invMass)\n"
- " {\n"
- " gBodies[bIdx].m_linVel = linVelB;\n"
- " gBodies[bIdx].m_angVel = angVelB;\n"
- " } else\n"
- " {\n"
- " gBodies[bIdx].m_linVel = mymake_float4(0,0,0,0);\n"
- " gBodies[bIdx].m_angVel = mymake_float4(0,0,0,0);\n"
- " \n"
- " }\n"
- "}\n"
- "typedef struct \n"
- "{\n"
- " int m_valInt0;\n"
- " int m_valInt1;\n"
- " int m_valInt2;\n"
- " int m_valInt3;\n"
- " float m_val0;\n"
- " float m_val1;\n"
- " float m_val2;\n"
- " float m_val3;\n"
- "} SolverDebugInfo;\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void BatchSolveKernelContact(__global Body* gBodies,\n"
- " __global Shape* gShapes,\n"
- " __global Constraint4* gConstraints,\n"
- " __global int* gN,\n"
- " __global int* gOffsets,\n"
- " __global int* batchSizes,\n"
- " int maxBatch1,\n"
- " int cellBatch,\n"
- " int4 nSplit\n"
- " )\n"
- "{\n"
- " //__local int ldsBatchIdx[WG_SIZE+1];\n"
- " __local int ldsCurBatch;\n"
- " __local int ldsNextBatch;\n"
- " __local int ldsStart;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " int wgIdx = GET_GROUP_IDX;\n"
- "// int gIdx = GET_GLOBAL_IDX;\n"
- "// debugInfo[gIdx].m_valInt0 = gIdx;\n"
- " //debugInfo[gIdx].m_valInt1 = GET_GROUP_SIZE;\n"
- " \n"
- " \n"
- " int zIdx = (wgIdx/((nSplit.x*nSplit.y)/4))*2+((cellBatch&4)>>2);\n"
- " int remain= (wgIdx%((nSplit.x*nSplit.y)/4));\n"
- " int yIdx = (remain/(nSplit.x/2))*2 + ((cellBatch&2)>>1);\n"
- " int xIdx = (remain%(nSplit.x/2))*2 + (cellBatch&1);\n"
- " int cellIdx = xIdx+yIdx*nSplit.x+zIdx*(nSplit.x*nSplit.y);\n"
- " //int xIdx = (wgIdx/(nSplit/2))*2 + (bIdx&1);\n"
- " //int yIdx = (wgIdx%(nSplit/2))*2 + (bIdx>>1);\n"
- " //int cellIdx = xIdx+yIdx*nSplit;\n"
- " \n"
- " if( gN[cellIdx] == 0 ) \n"
- " return;\n"
- " int maxBatch = batchSizes[cellIdx];\n"
- " \n"
- " \n"
- " const int start = gOffsets[cellIdx];\n"
- " const int end = start + gN[cellIdx];\n"
- " \n"
- " \n"
- " \n"
- " if( lIdx == 0 )\n"
- " {\n"
- " ldsCurBatch = 0;\n"
- " ldsNextBatch = 0;\n"
- " ldsStart = start;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " int idx=ldsStart+lIdx;\n"
- " while (ldsCurBatch < maxBatch)\n"
- " {\n"
- " for(; idx<end; )\n"
- " {\n"
- " if (gConstraints[idx].m_batchIdx == ldsCurBatch)\n"
- " {\n"
- " solveContactConstraint( gBodies, gShapes, &gConstraints[idx] );\n"
- " idx+=64;\n"
- " } else\n"
- " {\n"
- " break;\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " \n"
- " if( lIdx == 0 )\n"
- " {\n"
- " ldsCurBatch++;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " \n"
- " \n"
- "}\n"
- "__kernel void solveSingleContactKernel(__global Body* gBodies,\n"
- " __global Shape* gShapes,\n"
- " __global Constraint4* gConstraints,\n"
- " int cellIdx,\n"
- " int batchOffset,\n"
- " int numConstraintsInBatch\n"
- " )\n"
- "{\n"
- " int index = get_global_id(0);\n"
- " if (index < numConstraintsInBatch)\n"
- " {\n"
- " int idx=batchOffset+index;\n"
- " solveContactConstraint( gBodies, gShapes, &gConstraints[idx] );\n"
- " } \n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.cl
deleted file mode 100644
index 1d70fbbae3..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.cl
+++ /dev/null
@@ -1,527 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-//#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile global int*
-#endif
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define mymake_float4 (float4)
-//#define make_float2 (float2)
-//#define make_uint4 (uint4)
-//#define make_int4 (int4)
-//#define make_uint2 (uint2)
-//#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-///////////////////////////////////////
-// Vector
-///////////////////////////////////////
-
-
-
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = mymake_float4(a.xyz,0.f);
- float4 b1 = mymake_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-
-
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = mymake_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-// float length = sqrtf(dot3F4(a, a));
-// return 1.f/length * a;
-}
-
-
-
-
-///////////////////////////////////////
-// Matrix3x3
-///////////////////////////////////////
-
-typedef struct
-{
- float4 m_row[3];
-}Matrix3x3;
-
-
-
-
-
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b);
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b);
-
-
-
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b)
-{
- float4 ans;
- ans.x = dot3F4( a.m_row[0], b );
- ans.y = dot3F4( a.m_row[1], b );
- ans.z = dot3F4( a.m_row[2], b );
- ans.w = 0.f;
- return ans;
-}
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b)
-{
- float4 colx = mymake_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
- float4 coly = mymake_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
- float4 colz = mymake_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
-
- float4 ans;
- ans.x = dot3F4( a, colx );
- ans.y = dot3F4( a, coly );
- ans.z = dot3F4( a, colz );
- return ans;
-}
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-
-
-
-
-
-
-#define WG_SIZE 64
-
-typedef struct
-{
- float4 m_pos;
- Quaternion m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_shapeIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} Body;
-
-typedef struct
-{
- Matrix3x3 m_invInertia;
- Matrix3x3 m_initInvInertia;
-} Shape;
-
-typedef struct
-{
- float4 m_linear;
- float4 m_worldPos[4];
- float4 m_center;
- float m_jacCoeffInv[4];
- float m_b[4];
- float m_appliedRambdaDt[4];
-
- float m_fJacCoeffInv[2];
- float m_fAppliedRambdaDt[2];
-
- u32 m_bodyA;
- u32 m_bodyB;
-
- int m_batchIdx;
- u32 m_paddings[1];
-} Constraint4;
-
-
-
-typedef struct
-{
- int m_nConstraints;
- int m_start;
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBuffer;
-
-typedef struct
-{
- int m_solveFriction;
- int m_maxBatch; // long batch really kills the performance
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBufferBatchSolve;
-
-void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1);
-
-void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1)
-{
- *linear = mymake_float4(-n.xyz,0.f);
- *angular0 = -cross3(r0, n);
- *angular1 = cross3(r1, n);
-}
-
-float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 );
-
-float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 )
-{
- return dot3F4(l0, linVel0) + dot3F4(a0, angVel0) + dot3F4(l1, linVel1) + dot3F4(a1, angVel1);
-}
-
-
-float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,
- float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1);
-
-float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,
- float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1)
-{
- // linear0,1 are normlized
- float jmj0 = invMass0;//dot3F4(linear0, linear0)*invMass0;
- float jmj1 = dot3F4(mtMul3(angular0,*invInertia0), angular0);
- float jmj2 = invMass1;//dot3F4(linear1, linear1)*invMass1;
- float jmj3 = dot3F4(mtMul3(angular1,*invInertia1), angular1);
- return -1.f/(jmj0+jmj1+jmj2+jmj3);
-}
-void btPlaneSpace1 (const float4* n, float4* p, float4* q);
- void btPlaneSpace1 (const float4* n, float4* p, float4* q)
-{
- if (fabs(n[0].z) > 0.70710678f) {
- // choose p in y-z plane
- float a = n[0].y*n[0].y + n[0].z*n[0].z;
- float k = 1.f/sqrt(a);
- p[0].x = 0;
- p[0].y = -n[0].z*k;
- p[0].z = n[0].y*k;
- // set q = n x p
- q[0].x = a*k;
- q[0].y = -n[0].x*p[0].z;
- q[0].z = n[0].x*p[0].y;
- }
- else {
- // choose p in x-y plane
- float a = n[0].x*n[0].x + n[0].y*n[0].y;
- float k = 1.f/sqrt(a);
- p[0].x = -n[0].y*k;
- p[0].y = n[0].x*k;
- p[0].z = 0;
- // set q = n x p
- q[0].x = -n[0].z*p[0].y;
- q[0].y = n[0].z*p[0].x;
- q[0].z = a*k;
- }
-}
-
-
-void solveFrictionConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs);
-void solveFrictionConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs)
-{
- float frictionCoeff = ldsCs[0].m_linear.w;
- int aIdx = ldsCs[0].m_bodyA;
- int bIdx = ldsCs[0].m_bodyB;
-
-
- float4 posA = gBodies[aIdx].m_pos;
- float4 linVelA = gBodies[aIdx].m_linVel;
- float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;
-
- float4 posB = gBodies[bIdx].m_pos;
- float4 linVelB = gBodies[bIdx].m_linVel;
- float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;
-
-
- {
- float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};
- float minRambdaDt[4] = {0.f,0.f,0.f,0.f};
-
- float sum = 0;
- for(int j=0; j<4; j++)
- {
- sum +=ldsCs[0].m_appliedRambdaDt[j];
- }
- frictionCoeff = 0.7f;
- for(int j=0; j<4; j++)
- {
- maxRambdaDt[j] = frictionCoeff*sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
-
-
-// solveFriction( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,
-// posB, &linVelB, &angVelB, invMassB, invInertiaB, maxRambdaDt, minRambdaDt );
-
-
- {
-
- __global Constraint4* cs = ldsCs;
-
- if( cs->m_fJacCoeffInv[0] == 0 && cs->m_fJacCoeffInv[0] == 0 ) return;
- const float4 center = cs->m_center;
-
- float4 n = -cs->m_linear;
-
- float4 tangent[2];
- btPlaneSpace1(&n,&tangent[0],&tangent[1]);
- float4 angular0, angular1, linear;
- float4 r0 = center - posA;
- float4 r1 = center - posB;
- for(int i=0; i<2; i++)
- {
- setLinearAndAngular( tangent[i], r0, r1, &linear, &angular0, &angular1 );
- float rambdaDt = calcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB );
- rambdaDt *= cs->m_fJacCoeffInv[i];
-
- {
- float prevSum = cs->m_fAppliedRambdaDt[i];
- float updated = prevSum;
- updated += rambdaDt;
- updated = max2( updated, minRambdaDt[i] );
- updated = min2( updated, maxRambdaDt[i] );
- rambdaDt = updated - prevSum;
- cs->m_fAppliedRambdaDt[i] = updated;
- }
-
- float4 linImp0 = invMassA*linear*rambdaDt;
- float4 linImp1 = invMassB*(-linear)*rambdaDt;
- float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;
- float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;
-
- linVelA += linImp0;
- angVelA += angImp0;
- linVelB += linImp1;
- angVelB += angImp1;
- }
- { // angular damping for point constraint
- float4 ab = normalize3( posB - posA );
- float4 ac = normalize3( center - posA );
- if( dot3F4( ab, ac ) > 0.95f || (invMassA == 0.f || invMassB == 0.f))
- {
- float angNA = dot3F4( n, angVelA );
- float angNB = dot3F4( n, angVelB );
-
- angVelA -= (angNA*0.1f)*n;
- angVelB -= (angNB*0.1f)*n;
- }
- }
- }
-
-
-
- }
-
- if (gBodies[aIdx].m_invMass)
- {
- gBodies[aIdx].m_linVel = linVelA;
- gBodies[aIdx].m_angVel = angVelA;
- } else
- {
- gBodies[aIdx].m_linVel = mymake_float4(0,0,0,0);
- gBodies[aIdx].m_angVel = mymake_float4(0,0,0,0);
- }
- if (gBodies[bIdx].m_invMass)
- {
- gBodies[bIdx].m_linVel = linVelB;
- gBodies[bIdx].m_angVel = angVelB;
- } else
- {
- gBodies[bIdx].m_linVel = mymake_float4(0,0,0,0);
- gBodies[bIdx].m_angVel = mymake_float4(0,0,0,0);
- }
-
-
-}
-
-typedef struct
-{
- int m_valInt0;
- int m_valInt1;
- int m_valInt2;
- int m_valInt3;
-
- float m_val0;
- float m_val1;
- float m_val2;
- float m_val3;
-} SolverDebugInfo;
-
-
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void BatchSolveKernelFriction(__global Body* gBodies,
- __global Shape* gShapes,
- __global Constraint4* gConstraints,
- __global int* gN,
- __global int* gOffsets,
- __global int* batchSizes,
- int maxBatch1,
- int cellBatch,
- int4 nSplit
- )
-{
- //__local int ldsBatchIdx[WG_SIZE+1];
- __local int ldsCurBatch;
- __local int ldsNextBatch;
- __local int ldsStart;
-
- int lIdx = GET_LOCAL_IDX;
- int wgIdx = GET_GROUP_IDX;
-
-// int gIdx = GET_GLOBAL_IDX;
-// debugInfo[gIdx].m_valInt0 = gIdx;
- //debugInfo[gIdx].m_valInt1 = GET_GROUP_SIZE;
-
-
- int zIdx = (wgIdx/((nSplit.x*nSplit.y)/4))*2+((cellBatch&4)>>2);
- int remain= (wgIdx%((nSplit.x*nSplit.y)/4));
- int yIdx = (remain/(nSplit.x/2))*2 + ((cellBatch&2)>>1);
- int xIdx = (remain%(nSplit.x/2))*2 + (cellBatch&1);
- int cellIdx = xIdx+yIdx*nSplit.x+zIdx*(nSplit.x*nSplit.y);
-
-
- if( gN[cellIdx] == 0 )
- return;
-
- int maxBatch = batchSizes[cellIdx];
-
- const int start = gOffsets[cellIdx];
- const int end = start + gN[cellIdx];
-
-
- if( lIdx == 0 )
- {
- ldsCurBatch = 0;
- ldsNextBatch = 0;
- ldsStart = start;
- }
-
-
- GROUP_LDS_BARRIER;
-
- int idx=ldsStart+lIdx;
- while (ldsCurBatch < maxBatch)
- {
- for(; idx<end; )
- {
- if (gConstraints[idx].m_batchIdx == ldsCurBatch)
- {
-
- solveFrictionConstraint( gBodies, gShapes, &gConstraints[idx] );
-
- idx+=64;
- } else
- {
- break;
- }
- }
- GROUP_LDS_BARRIER;
- if( lIdx == 0 )
- {
- ldsCurBatch++;
- }
- GROUP_LDS_BARRIER;
- }
-
-
-}
-
-
-
-
-
-
-__kernel void solveSingleFrictionKernel(__global Body* gBodies,
- __global Shape* gShapes,
- __global Constraint4* gConstraints,
- int cellIdx,
- int batchOffset,
- int numConstraintsInBatch
- )
-{
-
- int index = get_global_id(0);
- if (index < numConstraintsInBatch)
- {
-
- int idx=batchOffset+index;
-
- solveFrictionConstraint( gBodies, gShapes, &gConstraints[idx] );
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.h
deleted file mode 100644
index 9707cdb25d..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solveFriction.h
+++ /dev/null
@@ -1,420 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* solveFrictionCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "//#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile global int*\n"
- "#endif\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define mymake_float4 (float4)\n"
- "//#define make_float2 (float2)\n"
- "//#define make_uint4 (uint4)\n"
- "//#define make_int4 (int4)\n"
- "//#define make_uint2 (uint2)\n"
- "//#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "///////////////////////////////////////\n"
- "// Vector\n"
- "///////////////////////////////////////\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = mymake_float4(a.xyz,0.f);\n"
- " float4 b1 = mymake_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = mymake_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "// float length = sqrtf(dot3F4(a, a));\n"
- "// return 1.f/length * a;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Matrix3x3\n"
- "///////////////////////////////////////\n"
- "typedef struct\n"
- "{\n"
- " float4 m_row[3];\n"
- "}Matrix3x3;\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b);\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b);\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b)\n"
- "{\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a.m_row[0], b );\n"
- " ans.y = dot3F4( a.m_row[1], b );\n"
- " ans.z = dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b)\n"
- "{\n"
- " float4 colx = mymake_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " float4 coly = mymake_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " float4 colz = mymake_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a, colx );\n"
- " ans.y = dot3F4( a, coly );\n"
- " ans.z = dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "#define WG_SIZE 64\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " Quaternion m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_shapeIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} Body;\n"
- "typedef struct\n"
- "{\n"
- " Matrix3x3 m_invInertia;\n"
- " Matrix3x3 m_initInvInertia;\n"
- "} Shape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_linear;\n"
- " float4 m_worldPos[4];\n"
- " float4 m_center; \n"
- " float m_jacCoeffInv[4];\n"
- " float m_b[4];\n"
- " float m_appliedRambdaDt[4];\n"
- " float m_fJacCoeffInv[2]; \n"
- " float m_fAppliedRambdaDt[2]; \n"
- " u32 m_bodyA;\n"
- " u32 m_bodyB;\n"
- " int m_batchIdx;\n"
- " u32 m_paddings[1];\n"
- "} Constraint4;\n"
- "typedef struct\n"
- "{\n"
- " int m_nConstraints;\n"
- " int m_start;\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBuffer;\n"
- "typedef struct\n"
- "{\n"
- " int m_solveFriction;\n"
- " int m_maxBatch; // long batch really kills the performance\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBufferBatchSolve;\n"
- "void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1);\n"
- "void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1)\n"
- "{\n"
- " *linear = mymake_float4(-n.xyz,0.f);\n"
- " *angular0 = -cross3(r0, n);\n"
- " *angular1 = cross3(r1, n);\n"
- "}\n"
- "float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 );\n"
- "float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 )\n"
- "{\n"
- " return dot3F4(l0, linVel0) + dot3F4(a0, angVel0) + dot3F4(l1, linVel1) + dot3F4(a1, angVel1);\n"
- "}\n"
- "float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,\n"
- " float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1);\n"
- "float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,\n"
- " float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1)\n"
- "{\n"
- " // linear0,1 are normlized\n"
- " float jmj0 = invMass0;//dot3F4(linear0, linear0)*invMass0;\n"
- " float jmj1 = dot3F4(mtMul3(angular0,*invInertia0), angular0);\n"
- " float jmj2 = invMass1;//dot3F4(linear1, linear1)*invMass1;\n"
- " float jmj3 = dot3F4(mtMul3(angular1,*invInertia1), angular1);\n"
- " return -1.f/(jmj0+jmj1+jmj2+jmj3);\n"
- "}\n"
- "void btPlaneSpace1 (const float4* n, float4* p, float4* q);\n"
- " void btPlaneSpace1 (const float4* n, float4* p, float4* q)\n"
- "{\n"
- " if (fabs(n[0].z) > 0.70710678f) {\n"
- " // choose p in y-z plane\n"
- " float a = n[0].y*n[0].y + n[0].z*n[0].z;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = 0;\n"
- " p[0].y = -n[0].z*k;\n"
- " p[0].z = n[0].y*k;\n"
- " // set q = n x p\n"
- " q[0].x = a*k;\n"
- " q[0].y = -n[0].x*p[0].z;\n"
- " q[0].z = n[0].x*p[0].y;\n"
- " }\n"
- " else {\n"
- " // choose p in x-y plane\n"
- " float a = n[0].x*n[0].x + n[0].y*n[0].y;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = -n[0].y*k;\n"
- " p[0].y = n[0].x*k;\n"
- " p[0].z = 0;\n"
- " // set q = n x p\n"
- " q[0].x = -n[0].z*p[0].y;\n"
- " q[0].y = n[0].z*p[0].x;\n"
- " q[0].z = a*k;\n"
- " }\n"
- "}\n"
- "void solveFrictionConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs);\n"
- "void solveFrictionConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs)\n"
- "{\n"
- " float frictionCoeff = ldsCs[0].m_linear.w;\n"
- " int aIdx = ldsCs[0].m_bodyA;\n"
- " int bIdx = ldsCs[0].m_bodyB;\n"
- " float4 posA = gBodies[aIdx].m_pos;\n"
- " float4 linVelA = gBodies[aIdx].m_linVel;\n"
- " float4 angVelA = gBodies[aIdx].m_angVel;\n"
- " float invMassA = gBodies[aIdx].m_invMass;\n"
- " Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;\n"
- " float4 posB = gBodies[bIdx].m_pos;\n"
- " float4 linVelB = gBodies[bIdx].m_linVel;\n"
- " float4 angVelB = gBodies[bIdx].m_angVel;\n"
- " float invMassB = gBodies[bIdx].m_invMass;\n"
- " Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;\n"
- " \n"
- " {\n"
- " float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};\n"
- " float minRambdaDt[4] = {0.f,0.f,0.f,0.f};\n"
- " float sum = 0;\n"
- " for(int j=0; j<4; j++)\n"
- " {\n"
- " sum +=ldsCs[0].m_appliedRambdaDt[j];\n"
- " }\n"
- " frictionCoeff = 0.7f;\n"
- " for(int j=0; j<4; j++)\n"
- " {\n"
- " maxRambdaDt[j] = frictionCoeff*sum;\n"
- " minRambdaDt[j] = -maxRambdaDt[j];\n"
- " }\n"
- " \n"
- "// solveFriction( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,\n"
- "// posB, &linVelB, &angVelB, invMassB, invInertiaB, maxRambdaDt, minRambdaDt );\n"
- " \n"
- " \n"
- " {\n"
- " \n"
- " __global Constraint4* cs = ldsCs;\n"
- " \n"
- " if( cs->m_fJacCoeffInv[0] == 0 && cs->m_fJacCoeffInv[0] == 0 ) return;\n"
- " const float4 center = cs->m_center;\n"
- " \n"
- " float4 n = -cs->m_linear;\n"
- " \n"
- " float4 tangent[2];\n"
- " btPlaneSpace1(&n,&tangent[0],&tangent[1]);\n"
- " float4 angular0, angular1, linear;\n"
- " float4 r0 = center - posA;\n"
- " float4 r1 = center - posB;\n"
- " for(int i=0; i<2; i++)\n"
- " {\n"
- " setLinearAndAngular( tangent[i], r0, r1, &linear, &angular0, &angular1 );\n"
- " float rambdaDt = calcRelVel(linear, -linear, angular0, angular1,\n"
- " linVelA, angVelA, linVelB, angVelB );\n"
- " rambdaDt *= cs->m_fJacCoeffInv[i];\n"
- " \n"
- " {\n"
- " float prevSum = cs->m_fAppliedRambdaDt[i];\n"
- " float updated = prevSum;\n"
- " updated += rambdaDt;\n"
- " updated = max2( updated, minRambdaDt[i] );\n"
- " updated = min2( updated, maxRambdaDt[i] );\n"
- " rambdaDt = updated - prevSum;\n"
- " cs->m_fAppliedRambdaDt[i] = updated;\n"
- " }\n"
- " \n"
- " float4 linImp0 = invMassA*linear*rambdaDt;\n"
- " float4 linImp1 = invMassB*(-linear)*rambdaDt;\n"
- " float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;\n"
- " float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;\n"
- " \n"
- " linVelA += linImp0;\n"
- " angVelA += angImp0;\n"
- " linVelB += linImp1;\n"
- " angVelB += angImp1;\n"
- " }\n"
- " { // angular damping for point constraint\n"
- " float4 ab = normalize3( posB - posA );\n"
- " float4 ac = normalize3( center - posA );\n"
- " if( dot3F4( ab, ac ) > 0.95f || (invMassA == 0.f || invMassB == 0.f))\n"
- " {\n"
- " float angNA = dot3F4( n, angVelA );\n"
- " float angNB = dot3F4( n, angVelB );\n"
- " \n"
- " angVelA -= (angNA*0.1f)*n;\n"
- " angVelB -= (angNB*0.1f)*n;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " \n"
- " }\n"
- " if (gBodies[aIdx].m_invMass)\n"
- " {\n"
- " gBodies[aIdx].m_linVel = linVelA;\n"
- " gBodies[aIdx].m_angVel = angVelA;\n"
- " } else\n"
- " {\n"
- " gBodies[aIdx].m_linVel = mymake_float4(0,0,0,0);\n"
- " gBodies[aIdx].m_angVel = mymake_float4(0,0,0,0);\n"
- " }\n"
- " if (gBodies[bIdx].m_invMass)\n"
- " {\n"
- " gBodies[bIdx].m_linVel = linVelB;\n"
- " gBodies[bIdx].m_angVel = angVelB;\n"
- " } else\n"
- " {\n"
- " gBodies[bIdx].m_linVel = mymake_float4(0,0,0,0);\n"
- " gBodies[bIdx].m_angVel = mymake_float4(0,0,0,0);\n"
- " }\n"
- " \n"
- "}\n"
- "typedef struct \n"
- "{\n"
- " int m_valInt0;\n"
- " int m_valInt1;\n"
- " int m_valInt2;\n"
- " int m_valInt3;\n"
- " float m_val0;\n"
- " float m_val1;\n"
- " float m_val2;\n"
- " float m_val3;\n"
- "} SolverDebugInfo;\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void BatchSolveKernelFriction(__global Body* gBodies,\n"
- " __global Shape* gShapes,\n"
- " __global Constraint4* gConstraints,\n"
- " __global int* gN,\n"
- " __global int* gOffsets,\n"
- " __global int* batchSizes,\n"
- " int maxBatch1,\n"
- " int cellBatch,\n"
- " int4 nSplit\n"
- " )\n"
- "{\n"
- " //__local int ldsBatchIdx[WG_SIZE+1];\n"
- " __local int ldsCurBatch;\n"
- " __local int ldsNextBatch;\n"
- " __local int ldsStart;\n"
- " int lIdx = GET_LOCAL_IDX;\n"
- " int wgIdx = GET_GROUP_IDX;\n"
- "// int gIdx = GET_GLOBAL_IDX;\n"
- "// debugInfo[gIdx].m_valInt0 = gIdx;\n"
- " //debugInfo[gIdx].m_valInt1 = GET_GROUP_SIZE;\n"
- " int zIdx = (wgIdx/((nSplit.x*nSplit.y)/4))*2+((cellBatch&4)>>2);\n"
- " int remain= (wgIdx%((nSplit.x*nSplit.y)/4));\n"
- " int yIdx = (remain/(nSplit.x/2))*2 + ((cellBatch&2)>>1);\n"
- " int xIdx = (remain%(nSplit.x/2))*2 + (cellBatch&1);\n"
- " int cellIdx = xIdx+yIdx*nSplit.x+zIdx*(nSplit.x*nSplit.y);\n"
- " \n"
- " if( gN[cellIdx] == 0 ) \n"
- " return;\n"
- " int maxBatch = batchSizes[cellIdx];\n"
- " const int start = gOffsets[cellIdx];\n"
- " const int end = start + gN[cellIdx];\n"
- " \n"
- " if( lIdx == 0 )\n"
- " {\n"
- " ldsCurBatch = 0;\n"
- " ldsNextBatch = 0;\n"
- " ldsStart = start;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " int idx=ldsStart+lIdx;\n"
- " while (ldsCurBatch < maxBatch)\n"
- " {\n"
- " for(; idx<end; )\n"
- " {\n"
- " if (gConstraints[idx].m_batchIdx == ldsCurBatch)\n"
- " {\n"
- " solveFrictionConstraint( gBodies, gShapes, &gConstraints[idx] );\n"
- " idx+=64;\n"
- " } else\n"
- " {\n"
- " break;\n"
- " }\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " if( lIdx == 0 )\n"
- " {\n"
- " ldsCurBatch++;\n"
- " }\n"
- " GROUP_LDS_BARRIER;\n"
- " }\n"
- " \n"
- " \n"
- "}\n"
- "__kernel void solveSingleFrictionKernel(__global Body* gBodies,\n"
- " __global Shape* gShapes,\n"
- " __global Constraint4* gConstraints,\n"
- " int cellIdx,\n"
- " int batchOffset,\n"
- " int numConstraintsInBatch\n"
- " )\n"
- "{\n"
- " int index = get_global_id(0);\n"
- " if (index < numConstraintsInBatch)\n"
- " {\n"
- " \n"
- " int idx=batchOffset+index;\n"
- " \n"
- " solveFrictionConstraint( gBodies, gShapes, &gConstraints[idx] );\n"
- " } \n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.cl
deleted file mode 100644
index 8e2de7b5a6..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.cl
+++ /dev/null
@@ -1,277 +0,0 @@
-
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-#include "Bullet3Dynamics/shared/b3ConvertConstraint4.h"
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile global int*
-#endif
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-///////////////////////////////////////
-// Vector
-///////////////////////////////////////
-__inline
-float fastDiv(float numerator, float denominator)
-{
- return native_divide(numerator, denominator);
-// return numerator/denominator;
-}
-
-__inline
-float4 fastDiv4(float4 numerator, float4 denominator)
-{
- return native_divide(numerator, denominator);
-}
-
-__inline
-float fastSqrtf(float f2)
-{
- return native_sqrt(f2);
-// return sqrt(f2);
-}
-
-__inline
-float fastRSqrt(float f2)
-{
- return native_rsqrt(f2);
-}
-
-__inline
-float fastLength4(float4 v)
-{
- return fast_length(v);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-__inline
-float sqrtf(float a)
-{
-// return sqrt(a);
- return native_sqrt(a);
-}
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float length3(const float4 a)
-{
- return sqrtf(dot3F4(a,a));
-}
-
-__inline
-float dot4(const float4 a, const float4 b)
-{
- return dot( a, b );
-}
-
-// for height
-__inline
-float dot3w1(const float4 point, const float4 eqn)
-{
- return dot3F4(point,eqn) + eqn.w;
-}
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-// float length = sqrtf(dot3F4(a, a));
-// return 1.f/length * a;
-}
-
-__inline
-float4 normalize4(const float4 a)
-{
- float length = sqrtf(dot4(a, a));
- return 1.f/length * a;
-}
-
-__inline
-float4 createEquation(const float4 a, const float4 b, const float4 c)
-{
- float4 eqn;
- float4 ab = b-a;
- float4 ac = c-a;
- eqn = normalize3( cross3(ab, ac) );
- eqn.w = -dot3F4(eqn,a);
- return eqn;
-}
-
-
-
-#define WG_SIZE 64
-
-
-
-
-
-
-
-typedef struct
-{
- int m_nConstraints;
- int m_start;
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBuffer;
-
-typedef struct
-{
- int m_solveFriction;
- int m_maxBatch; // long batch really kills the performance
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBufferBatchSolve;
-
-
-
-
-
-
-
-typedef struct
-{
- int m_valInt0;
- int m_valInt1;
- int m_valInt2;
- int m_valInt3;
-
- float m_val0;
- float m_val1;
- float m_val2;
- float m_val3;
-} SolverDebugInfo;
-
-
-
-
-
-
-typedef struct
-{
- int m_nContacts;
- float m_dt;
- float m_positionDrift;
- float m_positionConstraintCoeff;
-} ConstBufferCTC;
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void ContactToConstraintKernel(__global struct b3Contact4Data* gContact, __global b3RigidBodyData_t* gBodies, __global b3InertiaData_t* gShapes, __global b3ContactConstraint4_t* gConstraintOut,
-int nContacts,
-float dt,
-float positionDrift,
-float positionConstraintCoeff
-)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int aIdx = abs(gContact[gIdx].m_bodyAPtrAndSignBit);
- int bIdx = abs(gContact[gIdx].m_bodyBPtrAndSignBit);
-
- float4 posA = gBodies[aIdx].m_pos;
- float4 linVelA = gBodies[aIdx].m_linVel;
- float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- b3Mat3x3 invInertiaA = gShapes[aIdx].m_initInvInertia;
-
- float4 posB = gBodies[bIdx].m_pos;
- float4 linVelB = gBodies[bIdx].m_linVel;
- float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- b3Mat3x3 invInertiaB = gShapes[bIdx].m_initInvInertia;
-
- b3ContactConstraint4_t cs;
-
- setConstraint4( posA, linVelA, angVelA, invMassA, invInertiaA, posB, linVelB, angVelB, invMassB, invInertiaB,
- &gContact[gIdx], dt, positionDrift, positionConstraintCoeff,
- &cs );
-
- cs.m_batchIdx = gContact[gIdx].m_batchIdx;
-
- gConstraintOut[gIdx] = cs;
- }
-}
-
-
-
-
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.h
deleted file mode 100644
index d53db03181..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup.h
+++ /dev/null
@@ -1,702 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* solverSetupCL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#ifndef B3_CONTACT_CONSTRAINT5_H\n"
- "#define B3_CONTACT_CONSTRAINT5_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3ContactConstraint4 b3ContactConstraint4_t;\n"
- "struct b3ContactConstraint4\n"
- "{\n"
- " b3Float4 m_linear;//normal?\n"
- " b3Float4 m_worldPos[4];\n"
- " b3Float4 m_center; // friction\n"
- " float m_jacCoeffInv[4];\n"
- " float m_b[4];\n"
- " float m_appliedRambdaDt[4];\n"
- " float m_fJacCoeffInv[2]; // friction\n"
- " float m_fAppliedRambdaDt[2]; // friction\n"
- " unsigned int m_bodyA;\n"
- " unsigned int m_bodyB;\n"
- " int m_batchIdx;\n"
- " unsigned int m_paddings;\n"
- "};\n"
- "//inline void setFrictionCoeff(float value) { m_linear[3] = value; }\n"
- "inline float b3GetFrictionCoeff(b3ContactConstraint4_t* constraint) \n"
- "{\n"
- " return constraint->m_linear.w; \n"
- "}\n"
- "#endif //B3_CONTACT_CONSTRAINT5_H\n"
- "#ifndef B3_RIGIDBODY_DATA_H\n"
- "#define B3_RIGIDBODY_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3RigidBodyData b3RigidBodyData_t;\n"
- "struct b3RigidBodyData\n"
- "{\n"
- " b3Float4 m_pos;\n"
- " b3Quat m_quat;\n"
- " b3Float4 m_linVel;\n"
- " b3Float4 m_angVel;\n"
- " int m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "};\n"
- "typedef struct b3InertiaData b3InertiaData_t;\n"
- "struct b3InertiaData\n"
- "{\n"
- " b3Mat3x3 m_invInertiaWorld;\n"
- " b3Mat3x3 m_initInvInertia;\n"
- "};\n"
- "#endif //B3_RIGIDBODY_DATA_H\n"
- " \n"
- "void b3PlaneSpace1 (b3Float4ConstArg n, b3Float4* p, b3Float4* q);\n"
- " void b3PlaneSpace1 (b3Float4ConstArg n, b3Float4* p, b3Float4* q)\n"
- "{\n"
- " if (b3Fabs(n.z) > 0.70710678f) {\n"
- " // choose p in y-z plane\n"
- " float a = n.y*n.y + n.z*n.z;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = 0;\n"
- " p[0].y = -n.z*k;\n"
- " p[0].z = n.y*k;\n"
- " // set q = n x p\n"
- " q[0].x = a*k;\n"
- " q[0].y = -n.x*p[0].z;\n"
- " q[0].z = n.x*p[0].y;\n"
- " }\n"
- " else {\n"
- " // choose p in x-y plane\n"
- " float a = n.x*n.x + n.y*n.y;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = -n.y*k;\n"
- " p[0].y = n.x*k;\n"
- " p[0].z = 0;\n"
- " // set q = n x p\n"
- " q[0].x = -n.z*p[0].y;\n"
- " q[0].y = n.z*p[0].x;\n"
- " q[0].z = a*k;\n"
- " }\n"
- "}\n"
- " \n"
- "void setLinearAndAngular( b3Float4ConstArg n, b3Float4ConstArg r0, b3Float4ConstArg r1, b3Float4* linear, b3Float4* angular0, b3Float4* angular1)\n"
- "{\n"
- " *linear = b3MakeFloat4(n.x,n.y,n.z,0.f);\n"
- " *angular0 = b3Cross3(r0, n);\n"
- " *angular1 = -b3Cross3(r1, n);\n"
- "}\n"
- "float calcRelVel( b3Float4ConstArg l0, b3Float4ConstArg l1, b3Float4ConstArg a0, b3Float4ConstArg a1, b3Float4ConstArg linVel0,\n"
- " b3Float4ConstArg angVel0, b3Float4ConstArg linVel1, b3Float4ConstArg angVel1 )\n"
- "{\n"
- " return b3Dot3F4(l0, linVel0) + b3Dot3F4(a0, angVel0) + b3Dot3F4(l1, linVel1) + b3Dot3F4(a1, angVel1);\n"
- "}\n"
- "float calcJacCoeff(b3Float4ConstArg linear0, b3Float4ConstArg linear1, b3Float4ConstArg angular0, b3Float4ConstArg angular1,\n"
- " float invMass0, const b3Mat3x3* invInertia0, float invMass1, const b3Mat3x3* invInertia1)\n"
- "{\n"
- " // linear0,1 are normlized\n"
- " float jmj0 = invMass0;//b3Dot3F4(linear0, linear0)*invMass0;\n"
- " float jmj1 = b3Dot3F4(mtMul3(angular0,*invInertia0), angular0);\n"
- " float jmj2 = invMass1;//b3Dot3F4(linear1, linear1)*invMass1;\n"
- " float jmj3 = b3Dot3F4(mtMul3(angular1,*invInertia1), angular1);\n"
- " return -1.f/(jmj0+jmj1+jmj2+jmj3);\n"
- "}\n"
- "void setConstraint4( b3Float4ConstArg posA, b3Float4ConstArg linVelA, b3Float4ConstArg angVelA, float invMassA, b3Mat3x3ConstArg invInertiaA,\n"
- " b3Float4ConstArg posB, b3Float4ConstArg linVelB, b3Float4ConstArg angVelB, float invMassB, b3Mat3x3ConstArg invInertiaB, \n"
- " __global struct b3Contact4Data* src, float dt, float positionDrift, float positionConstraintCoeff,\n"
- " b3ContactConstraint4_t* dstC )\n"
- "{\n"
- " dstC->m_bodyA = abs(src->m_bodyAPtrAndSignBit);\n"
- " dstC->m_bodyB = abs(src->m_bodyBPtrAndSignBit);\n"
- " float dtInv = 1.f/dt;\n"
- " for(int ic=0; ic<4; ic++)\n"
- " {\n"
- " dstC->m_appliedRambdaDt[ic] = 0.f;\n"
- " }\n"
- " dstC->m_fJacCoeffInv[0] = dstC->m_fJacCoeffInv[1] = 0.f;\n"
- " dstC->m_linear = src->m_worldNormalOnB;\n"
- " dstC->m_linear.w = 0.7f ;//src->getFrictionCoeff() );\n"
- " for(int ic=0; ic<4; ic++)\n"
- " {\n"
- " b3Float4 r0 = src->m_worldPosB[ic] - posA;\n"
- " b3Float4 r1 = src->m_worldPosB[ic] - posB;\n"
- " if( ic >= src->m_worldNormalOnB.w )//npoints\n"
- " {\n"
- " dstC->m_jacCoeffInv[ic] = 0.f;\n"
- " continue;\n"
- " }\n"
- " float relVelN;\n"
- " {\n"
- " b3Float4 linear, angular0, angular1;\n"
- " setLinearAndAngular(src->m_worldNormalOnB, r0, r1, &linear, &angular0, &angular1);\n"
- " dstC->m_jacCoeffInv[ic] = calcJacCoeff(linear, -linear, angular0, angular1,\n"
- " invMassA, &invInertiaA, invMassB, &invInertiaB );\n"
- " relVelN = calcRelVel(linear, -linear, angular0, angular1,\n"
- " linVelA, angVelA, linVelB, angVelB);\n"
- " float e = 0.f;//src->getRestituitionCoeff();\n"
- " if( relVelN*relVelN < 0.004f ) e = 0.f;\n"
- " dstC->m_b[ic] = e*relVelN;\n"
- " //float penetration = src->m_worldPosB[ic].w;\n"
- " dstC->m_b[ic] += (src->m_worldPosB[ic].w + positionDrift)*positionConstraintCoeff*dtInv;\n"
- " dstC->m_appliedRambdaDt[ic] = 0.f;\n"
- " }\n"
- " }\n"
- " if( src->m_worldNormalOnB.w > 0 )//npoints\n"
- " { // prepare friction\n"
- " b3Float4 center = b3MakeFloat4(0.f,0.f,0.f,0.f);\n"
- " for(int i=0; i<src->m_worldNormalOnB.w; i++) \n"
- " center += src->m_worldPosB[i];\n"
- " center /= (float)src->m_worldNormalOnB.w;\n"
- " b3Float4 tangent[2];\n"
- " b3PlaneSpace1(src->m_worldNormalOnB,&tangent[0],&tangent[1]);\n"
- " \n"
- " b3Float4 r[2];\n"
- " r[0] = center - posA;\n"
- " r[1] = center - posB;\n"
- " for(int i=0; i<2; i++)\n"
- " {\n"
- " b3Float4 linear, angular0, angular1;\n"
- " setLinearAndAngular(tangent[i], r[0], r[1], &linear, &angular0, &angular1);\n"
- " dstC->m_fJacCoeffInv[i] = calcJacCoeff(linear, -linear, angular0, angular1,\n"
- " invMassA, &invInertiaA, invMassB, &invInertiaB );\n"
- " dstC->m_fAppliedRambdaDt[i] = 0.f;\n"
- " }\n"
- " dstC->m_center = center;\n"
- " }\n"
- " for(int i=0; i<4; i++)\n"
- " {\n"
- " if( i<src->m_worldNormalOnB.w )\n"
- " {\n"
- " dstC->m_worldPos[i] = src->m_worldPosB[i];\n"
- " }\n"
- " else\n"
- " {\n"
- " dstC->m_worldPos[i] = b3MakeFloat4(0.f,0.f,0.f,0.f);\n"
- " }\n"
- " }\n"
- "}\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile global int*\n"
- "#endif\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "///////////////////////////////////////\n"
- "// Vector\n"
- "///////////////////////////////////////\n"
- "__inline\n"
- "float fastDiv(float numerator, float denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "// return numerator/denominator; \n"
- "}\n"
- "__inline\n"
- "float4 fastDiv4(float4 numerator, float4 denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "}\n"
- "__inline\n"
- "float fastSqrtf(float f2)\n"
- "{\n"
- " return native_sqrt(f2);\n"
- "// return sqrt(f2);\n"
- "}\n"
- "__inline\n"
- "float fastRSqrt(float f2)\n"
- "{\n"
- " return native_rsqrt(f2);\n"
- "}\n"
- "__inline\n"
- "float fastLength4(float4 v)\n"
- "{\n"
- " return fast_length(v);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "__inline\n"
- "float sqrtf(float a)\n"
- "{\n"
- "// return sqrt(a);\n"
- " return native_sqrt(a);\n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float length3(const float4 a)\n"
- "{\n"
- " return sqrtf(dot3F4(a,a));\n"
- "}\n"
- "__inline\n"
- "float dot4(const float4 a, const float4 b)\n"
- "{\n"
- " return dot( a, b );\n"
- "}\n"
- "// for height\n"
- "__inline\n"
- "float dot3w1(const float4 point, const float4 eqn)\n"
- "{\n"
- " return dot3F4(point,eqn) + eqn.w;\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "// float length = sqrtf(dot3F4(a, a));\n"
- "// return 1.f/length * a;\n"
- "}\n"
- "__inline\n"
- "float4 normalize4(const float4 a)\n"
- "{\n"
- " float length = sqrtf(dot4(a, a));\n"
- " return 1.f/length * a;\n"
- "}\n"
- "__inline\n"
- "float4 createEquation(const float4 a, const float4 b, const float4 c)\n"
- "{\n"
- " float4 eqn;\n"
- " float4 ab = b-a;\n"
- " float4 ac = c-a;\n"
- " eqn = normalize3( cross3(ab, ac) );\n"
- " eqn.w = -dot3F4(eqn,a);\n"
- " return eqn;\n"
- "}\n"
- "#define WG_SIZE 64\n"
- "typedef struct\n"
- "{\n"
- " int m_nConstraints;\n"
- " int m_start;\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBuffer;\n"
- "typedef struct\n"
- "{\n"
- " int m_solveFriction;\n"
- " int m_maxBatch; // long batch really kills the performance\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBufferBatchSolve;\n"
- " \n"
- "typedef struct \n"
- "{\n"
- " int m_valInt0;\n"
- " int m_valInt1;\n"
- " int m_valInt2;\n"
- " int m_valInt3;\n"
- " float m_val0;\n"
- " float m_val1;\n"
- " float m_val2;\n"
- " float m_val3;\n"
- "} SolverDebugInfo;\n"
- "typedef struct\n"
- "{\n"
- " int m_nContacts;\n"
- " float m_dt;\n"
- " float m_positionDrift;\n"
- " float m_positionConstraintCoeff;\n"
- "} ConstBufferCTC;\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void ContactToConstraintKernel(__global struct b3Contact4Data* gContact, __global b3RigidBodyData_t* gBodies, __global b3InertiaData_t* gShapes, __global b3ContactConstraint4_t* gConstraintOut, \n"
- "int nContacts,\n"
- "float dt,\n"
- "float positionDrift,\n"
- "float positionConstraintCoeff\n"
- ")\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " \n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int aIdx = abs(gContact[gIdx].m_bodyAPtrAndSignBit);\n"
- " int bIdx = abs(gContact[gIdx].m_bodyBPtrAndSignBit);\n"
- " float4 posA = gBodies[aIdx].m_pos;\n"
- " float4 linVelA = gBodies[aIdx].m_linVel;\n"
- " float4 angVelA = gBodies[aIdx].m_angVel;\n"
- " float invMassA = gBodies[aIdx].m_invMass;\n"
- " b3Mat3x3 invInertiaA = gShapes[aIdx].m_initInvInertia;\n"
- " float4 posB = gBodies[bIdx].m_pos;\n"
- " float4 linVelB = gBodies[bIdx].m_linVel;\n"
- " float4 angVelB = gBodies[bIdx].m_angVel;\n"
- " float invMassB = gBodies[bIdx].m_invMass;\n"
- " b3Mat3x3 invInertiaB = gShapes[bIdx].m_initInvInertia;\n"
- " b3ContactConstraint4_t cs;\n"
- " setConstraint4( posA, linVelA, angVelA, invMassA, invInertiaA, posB, linVelB, angVelB, invMassB, invInertiaB,\n"
- " &gContact[gIdx], dt, positionDrift, positionConstraintCoeff,\n"
- " &cs );\n"
- " \n"
- " cs.m_batchIdx = gContact[gIdx].m_batchIdx;\n"
- " gConstraintOut[gIdx] = cs;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.cl
deleted file mode 100644
index 3dc48d4350..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.cl
+++ /dev/null
@@ -1,613 +0,0 @@
-/*
-Copyright (c) 2012 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Takahiro Harada
-
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile global int*
-#endif
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-///////////////////////////////////////
-// Vector
-///////////////////////////////////////
-__inline
-float fastDiv(float numerator, float denominator)
-{
- return native_divide(numerator, denominator);
-// return numerator/denominator;
-}
-
-__inline
-float4 fastDiv4(float4 numerator, float4 denominator)
-{
- return native_divide(numerator, denominator);
-}
-
-__inline
-float fastSqrtf(float f2)
-{
- return native_sqrt(f2);
-// return sqrt(f2);
-}
-
-__inline
-float fastRSqrt(float f2)
-{
- return native_rsqrt(f2);
-}
-
-__inline
-float fastLength4(float4 v)
-{
- return fast_length(v);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-__inline
-float sqrtf(float a)
-{
-// return sqrt(a);
- return native_sqrt(a);
-}
-
-__inline
-float4 cross3(float4 a, float4 b)
-{
- return cross(a,b);
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float length3(const float4 a)
-{
- return sqrtf(dot3F4(a,a));
-}
-
-__inline
-float dot4(const float4 a, const float4 b)
-{
- return dot( a, b );
-}
-
-// for height
-__inline
-float dot3w1(const float4 point, const float4 eqn)
-{
- return dot3F4(point,eqn) + eqn.w;
-}
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-// float length = sqrtf(dot3F4(a, a));
-// return 1.f/length * a;
-}
-
-__inline
-float4 normalize4(const float4 a)
-{
- float length = sqrtf(dot4(a, a));
- return 1.f/length * a;
-}
-
-__inline
-float4 createEquation(const float4 a, const float4 b, const float4 c)
-{
- float4 eqn;
- float4 ab = b-a;
- float4 ac = c-a;
- eqn = normalize3( cross3(ab, ac) );
- eqn.w = -dot3F4(eqn,a);
- return eqn;
-}
-
-///////////////////////////////////////
-// Matrix3x3
-///////////////////////////////////////
-
-typedef struct
-{
- float4 m_row[3];
-}Matrix3x3;
-
-__inline
-Matrix3x3 mtZero();
-
-__inline
-Matrix3x3 mtIdentity();
-
-__inline
-Matrix3x3 mtTranspose(Matrix3x3 m);
-
-__inline
-Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b);
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b);
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b);
-
-__inline
-Matrix3x3 mtZero()
-{
- Matrix3x3 m;
- m.m_row[0] = (float4)(0.f);
- m.m_row[1] = (float4)(0.f);
- m.m_row[2] = (float4)(0.f);
- return m;
-}
-
-__inline
-Matrix3x3 mtIdentity()
-{
- Matrix3x3 m;
- m.m_row[0] = (float4)(1,0,0,0);
- m.m_row[1] = (float4)(0,1,0,0);
- m.m_row[2] = (float4)(0,0,1,0);
- return m;
-}
-
-__inline
-Matrix3x3 mtTranspose(Matrix3x3 m)
-{
- Matrix3x3 out;
- out.m_row[0] = (float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);
- out.m_row[1] = (float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);
- out.m_row[2] = (float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);
- return out;
-}
-
-__inline
-Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b)
-{
- Matrix3x3 transB;
- transB = mtTranspose( b );
- Matrix3x3 ans;
- // why this doesn't run when 0ing in the for{}
- a.m_row[0].w = 0.f;
- a.m_row[1].w = 0.f;
- a.m_row[2].w = 0.f;
- for(int i=0; i<3; i++)
- {
-// a.m_row[i].w = 0.f;
- ans.m_row[i].x = dot3F4(a.m_row[i],transB.m_row[0]);
- ans.m_row[i].y = dot3F4(a.m_row[i],transB.m_row[1]);
- ans.m_row[i].z = dot3F4(a.m_row[i],transB.m_row[2]);
- ans.m_row[i].w = 0.f;
- }
- return ans;
-}
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b)
-{
- float4 ans;
- ans.x = dot3F4( a.m_row[0], b );
- ans.y = dot3F4( a.m_row[1], b );
- ans.z = dot3F4( a.m_row[2], b );
- ans.w = 0.f;
- return ans;
-}
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b)
-{
- float4 colx = make_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
- float4 coly = make_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
- float4 colz = make_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
-
- float4 ans;
- ans.x = dot3F4( a, colx );
- ans.y = dot3F4( a, coly );
- ans.z = dot3F4( a, colz );
- return ans;
-}
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-
-
-
-#define WG_SIZE 64
-
-typedef struct
-{
- float4 m_pos;
- Quaternion m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_shapeIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} Body;
-
-typedef struct
-{
- Matrix3x3 m_invInertia;
- Matrix3x3 m_initInvInertia;
-} Shape;
-
-typedef struct
-{
- float4 m_linear;
- float4 m_worldPos[4];
- float4 m_center;
- float m_jacCoeffInv[4];
- float m_b[4];
- float m_appliedRambdaDt[4];
-
- float m_fJacCoeffInv[2];
- float m_fAppliedRambdaDt[2];
-
- u32 m_bodyA;
- u32 m_bodyB;
-
- int m_batchIdx;
- u32 m_paddings[1];
-} Constraint4;
-
-
-
-typedef struct
-{
- int m_nConstraints;
- int m_start;
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBuffer;
-
-typedef struct
-{
- int m_solveFriction;
- int m_maxBatch; // long batch really kills the performance
- int m_batchIdx;
- int m_nSplit;
-// int m_paddings[1];
-} ConstBufferBatchSolve;
-
-
-
-
-
-typedef struct
-{
- int m_valInt0;
- int m_valInt1;
- int m_valInt2;
- int m_valInt3;
-
- float m_val0;
- float m_val1;
- float m_val2;
- float m_val3;
-} SolverDebugInfo;
-
-
-
-
-// others
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void ReorderContactKernel(__global struct b3Contact4Data* in, __global struct b3Contact4Data* out, __global int2* sortData, int4 cb )
-{
- int nContacts = cb.x;
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int srcIdx = sortData[gIdx].y;
- out[gIdx] = in[srcIdx];
- }
-}
-
-__kernel __attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SetDeterminismSortDataChildShapeB(__global struct b3Contact4Data* contactsIn, __global int2* sortDataOut, int nContacts)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int2 sd;
- sd.x = contactsIn[gIdx].m_childIndexB;
- sd.y = gIdx;
- sortDataOut[gIdx] = sd;
- }
-}
-
-__kernel __attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SetDeterminismSortDataChildShapeA(__global struct b3Contact4Data* contactsIn, __global int2* sortDataInOut, int nContacts)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int2 sdIn;
- sdIn = sortDataInOut[gIdx];
- int2 sdOut;
- sdOut.x = contactsIn[sdIn.y].m_childIndexA;
- sdOut.y = sdIn.y;
- sortDataInOut[gIdx] = sdOut;
- }
-}
-
-__kernel __attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SetDeterminismSortDataBodyA(__global struct b3Contact4Data* contactsIn, __global int2* sortDataInOut, int nContacts)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int2 sdIn;
- sdIn = sortDataInOut[gIdx];
- int2 sdOut;
- sdOut.x = contactsIn[sdIn.y].m_bodyAPtrAndSignBit;
- sdOut.y = sdIn.y;
- sortDataInOut[gIdx] = sdOut;
- }
-}
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SetDeterminismSortDataBodyB(__global struct b3Contact4Data* contactsIn, __global int2* sortDataInOut, int nContacts)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int2 sdIn;
- sdIn = sortDataInOut[gIdx];
- int2 sdOut;
- sdOut.x = contactsIn[sdIn.y].m_bodyBPtrAndSignBit;
- sdOut.y = sdIn.y;
- sortDataInOut[gIdx] = sdOut;
- }
-}
-
-
-
-
-typedef struct
-{
- int m_nContacts;
- int m_staticIdx;
- float m_scale;
- int m_nSplit;
-} ConstBufferSSD;
-
-
-__constant const int gridTable4x4[] =
-{
- 0,1,17,16,
- 1,2,18,19,
- 17,18,32,3,
- 16,19,3,34
-};
-
-__constant const int gridTable8x8[] =
-{
- 0, 2, 3, 16, 17, 18, 19, 1,
- 66, 64, 80, 67, 82, 81, 65, 83,
- 131,144,128,130,147,129,145,146,
- 208,195,194,192,193,211,210,209,
- 21, 22, 23, 5, 4, 6, 7, 20,
- 86, 85, 69, 87, 70, 68, 84, 71,
- 151,133,149,150,135,148,132,134,
- 197,27,214,213,212,199,198,196
-
-};
-
-
-
-
-#define USE_SPATIAL_BATCHING 1
-#define USE_4x4_GRID 1
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void SetSortDataKernel(__global struct b3Contact4Data* gContact, __global Body* gBodies, __global int2* gSortDataOut,
-int nContacts,float scale,int4 nSplit,int staticIdx)
-
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int aPtrAndSignBit = gContact[gIdx].m_bodyAPtrAndSignBit;
- int bPtrAndSignBit = gContact[gIdx].m_bodyBPtrAndSignBit;
-
- int aIdx = abs(aPtrAndSignBit );
- int bIdx = abs(bPtrAndSignBit);
-
- bool aStatic = (aPtrAndSignBit<0) ||(aPtrAndSignBit==staticIdx);
- bool bStatic = (bPtrAndSignBit<0) ||(bPtrAndSignBit==staticIdx);
-
-#if USE_SPATIAL_BATCHING
- int idx = (aStatic)? bIdx: aIdx;
- float4 p = gBodies[idx].m_pos;
- int xIdx = (int)((p.x-((p.x<0.f)?1.f:0.f))*scale) & (nSplit.x-1);
- int yIdx = (int)((p.y-((p.y<0.f)?1.f:0.f))*scale) & (nSplit.y-1);
- int zIdx = (int)((p.z-((p.z<0.f)?1.f:0.f))*scale) & (nSplit.z-1);
- int newIndex = (xIdx+yIdx*nSplit.x+zIdx*nSplit.x*nSplit.y);
-
-#else//USE_SPATIAL_BATCHING
- #if USE_4x4_GRID
- int aa = aIdx&3;
- int bb = bIdx&3;
- if (aStatic)
- aa = bb;
- if (bStatic)
- bb = aa;
-
- int gridIndex = aa + bb*4;
- int newIndex = gridTable4x4[gridIndex];
- #else//USE_4x4_GRID
- int aa = aIdx&7;
- int bb = bIdx&7;
- if (aStatic)
- aa = bb;
- if (bStatic)
- bb = aa;
-
- int gridIndex = aa + bb*8;
- int newIndex = gridTable8x8[gridIndex];
- #endif//USE_4x4_GRID
-#endif//USE_SPATIAL_BATCHING
-
-
- gSortDataOut[gIdx].x = newIndex;
- gSortDataOut[gIdx].y = gIdx;
- }
- else
- {
- gSortDataOut[gIdx].x = 0xffffffff;
- }
-}
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void CopyConstraintKernel(__global struct b3Contact4Data* gIn, __global struct b3Contact4Data* gOut, int4 cb )
-{
- int gIdx = GET_GLOBAL_IDX;
- if( gIdx < cb.x )
- {
- gOut[gIdx] = gIn[gIdx];
- }
-}
-
-
-
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.h
deleted file mode 100644
index 1e6e3579b6..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverSetup2.h
+++ /dev/null
@@ -1,600 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* solverSetup2CL =
- "/*\n"
- "Copyright (c) 2012 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Takahiro Harada\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile global int*\n"
- "#endif\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "///////////////////////////////////////\n"
- "// Vector\n"
- "///////////////////////////////////////\n"
- "__inline\n"
- "float fastDiv(float numerator, float denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "// return numerator/denominator; \n"
- "}\n"
- "__inline\n"
- "float4 fastDiv4(float4 numerator, float4 denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "}\n"
- "__inline\n"
- "float fastSqrtf(float f2)\n"
- "{\n"
- " return native_sqrt(f2);\n"
- "// return sqrt(f2);\n"
- "}\n"
- "__inline\n"
- "float fastRSqrt(float f2)\n"
- "{\n"
- " return native_rsqrt(f2);\n"
- "}\n"
- "__inline\n"
- "float fastLength4(float4 v)\n"
- "{\n"
- " return fast_length(v);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "__inline\n"
- "float sqrtf(float a)\n"
- "{\n"
- "// return sqrt(a);\n"
- " return native_sqrt(a);\n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a, float4 b)\n"
- "{\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float length3(const float4 a)\n"
- "{\n"
- " return sqrtf(dot3F4(a,a));\n"
- "}\n"
- "__inline\n"
- "float dot4(const float4 a, const float4 b)\n"
- "{\n"
- " return dot( a, b );\n"
- "}\n"
- "// for height\n"
- "__inline\n"
- "float dot3w1(const float4 point, const float4 eqn)\n"
- "{\n"
- " return dot3F4(point,eqn) + eqn.w;\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "// float length = sqrtf(dot3F4(a, a));\n"
- "// return 1.f/length * a;\n"
- "}\n"
- "__inline\n"
- "float4 normalize4(const float4 a)\n"
- "{\n"
- " float length = sqrtf(dot4(a, a));\n"
- " return 1.f/length * a;\n"
- "}\n"
- "__inline\n"
- "float4 createEquation(const float4 a, const float4 b, const float4 c)\n"
- "{\n"
- " float4 eqn;\n"
- " float4 ab = b-a;\n"
- " float4 ac = c-a;\n"
- " eqn = normalize3( cross3(ab, ac) );\n"
- " eqn.w = -dot3F4(eqn,a);\n"
- " return eqn;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Matrix3x3\n"
- "///////////////////////////////////////\n"
- "typedef struct\n"
- "{\n"
- " float4 m_row[3];\n"
- "}Matrix3x3;\n"
- "__inline\n"
- "Matrix3x3 mtZero();\n"
- "__inline\n"
- "Matrix3x3 mtIdentity();\n"
- "__inline\n"
- "Matrix3x3 mtTranspose(Matrix3x3 m);\n"
- "__inline\n"
- "Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b);\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b);\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b);\n"
- "__inline\n"
- "Matrix3x3 mtZero()\n"
- "{\n"
- " Matrix3x3 m;\n"
- " m.m_row[0] = (float4)(0.f);\n"
- " m.m_row[1] = (float4)(0.f);\n"
- " m.m_row[2] = (float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "Matrix3x3 mtIdentity()\n"
- "{\n"
- " Matrix3x3 m;\n"
- " m.m_row[0] = (float4)(1,0,0,0);\n"
- " m.m_row[1] = (float4)(0,1,0,0);\n"
- " m.m_row[2] = (float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "Matrix3x3 mtTranspose(Matrix3x3 m)\n"
- "{\n"
- " Matrix3x3 out;\n"
- " out.m_row[0] = (float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b)\n"
- "{\n"
- " Matrix3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " Matrix3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b)\n"
- "{\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a.m_row[0], b );\n"
- " ans.y = dot3F4( a.m_row[1], b );\n"
- " ans.z = dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b)\n"
- "{\n"
- " float4 colx = make_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " float4 coly = make_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " float4 colz = make_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a, colx );\n"
- " ans.y = dot3F4( a, coly );\n"
- " ans.z = dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "#define WG_SIZE 64\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " Quaternion m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_shapeIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} Body;\n"
- "typedef struct\n"
- "{\n"
- " Matrix3x3 m_invInertia;\n"
- " Matrix3x3 m_initInvInertia;\n"
- "} Shape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_linear;\n"
- " float4 m_worldPos[4];\n"
- " float4 m_center; \n"
- " float m_jacCoeffInv[4];\n"
- " float m_b[4];\n"
- " float m_appliedRambdaDt[4];\n"
- " float m_fJacCoeffInv[2]; \n"
- " float m_fAppliedRambdaDt[2]; \n"
- " u32 m_bodyA;\n"
- " u32 m_bodyB;\n"
- " int m_batchIdx;\n"
- " u32 m_paddings[1];\n"
- "} Constraint4;\n"
- "typedef struct\n"
- "{\n"
- " int m_nConstraints;\n"
- " int m_start;\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBuffer;\n"
- "typedef struct\n"
- "{\n"
- " int m_solveFriction;\n"
- " int m_maxBatch; // long batch really kills the performance\n"
- " int m_batchIdx;\n"
- " int m_nSplit;\n"
- "// int m_paddings[1];\n"
- "} ConstBufferBatchSolve;\n"
- " \n"
- "typedef struct \n"
- "{\n"
- " int m_valInt0;\n"
- " int m_valInt1;\n"
- " int m_valInt2;\n"
- " int m_valInt3;\n"
- " float m_val0;\n"
- " float m_val1;\n"
- " float m_val2;\n"
- " float m_val3;\n"
- "} SolverDebugInfo;\n"
- "// others\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void ReorderContactKernel(__global struct b3Contact4Data* in, __global struct b3Contact4Data* out, __global int2* sortData, int4 cb )\n"
- "{\n"
- " int nContacts = cb.x;\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int srcIdx = sortData[gIdx].y;\n"
- " out[gIdx] = in[srcIdx];\n"
- " }\n"
- "}\n"
- "__kernel __attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SetDeterminismSortDataChildShapeB(__global struct b3Contact4Data* contactsIn, __global int2* sortDataOut, int nContacts)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int2 sd;\n"
- " sd.x = contactsIn[gIdx].m_childIndexB;\n"
- " sd.y = gIdx;\n"
- " sortDataOut[gIdx] = sd;\n"
- " }\n"
- "}\n"
- "__kernel __attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SetDeterminismSortDataChildShapeA(__global struct b3Contact4Data* contactsIn, __global int2* sortDataInOut, int nContacts)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int2 sdIn;\n"
- " sdIn = sortDataInOut[gIdx];\n"
- " int2 sdOut;\n"
- " sdOut.x = contactsIn[sdIn.y].m_childIndexA;\n"
- " sdOut.y = sdIn.y;\n"
- " sortDataInOut[gIdx] = sdOut;\n"
- " }\n"
- "}\n"
- "__kernel __attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SetDeterminismSortDataBodyA(__global struct b3Contact4Data* contactsIn, __global int2* sortDataInOut, int nContacts)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int2 sdIn;\n"
- " sdIn = sortDataInOut[gIdx];\n"
- " int2 sdOut;\n"
- " sdOut.x = contactsIn[sdIn.y].m_bodyAPtrAndSignBit;\n"
- " sdOut.y = sdIn.y;\n"
- " sortDataInOut[gIdx] = sdOut;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SetDeterminismSortDataBodyB(__global struct b3Contact4Data* contactsIn, __global int2* sortDataInOut, int nContacts)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int2 sdIn;\n"
- " sdIn = sortDataInOut[gIdx];\n"
- " int2 sdOut;\n"
- " sdOut.x = contactsIn[sdIn.y].m_bodyBPtrAndSignBit;\n"
- " sdOut.y = sdIn.y;\n"
- " sortDataInOut[gIdx] = sdOut;\n"
- " }\n"
- "}\n"
- "typedef struct\n"
- "{\n"
- " int m_nContacts;\n"
- " int m_staticIdx;\n"
- " float m_scale;\n"
- " int m_nSplit;\n"
- "} ConstBufferSSD;\n"
- "__constant const int gridTable4x4[] = \n"
- "{\n"
- " 0,1,17,16,\n"
- " 1,2,18,19,\n"
- " 17,18,32,3,\n"
- " 16,19,3,34\n"
- "};\n"
- "__constant const int gridTable8x8[] = \n"
- "{\n"
- " 0, 2, 3, 16, 17, 18, 19, 1,\n"
- " 66, 64, 80, 67, 82, 81, 65, 83,\n"
- " 131,144,128,130,147,129,145,146,\n"
- " 208,195,194,192,193,211,210,209,\n"
- " 21, 22, 23, 5, 4, 6, 7, 20,\n"
- " 86, 85, 69, 87, 70, 68, 84, 71,\n"
- " 151,133,149,150,135,148,132,134,\n"
- " 197,27,214,213,212,199,198,196\n"
- " \n"
- "};\n"
- "#define USE_SPATIAL_BATCHING 1\n"
- "#define USE_4x4_GRID 1\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void SetSortDataKernel(__global struct b3Contact4Data* gContact, __global Body* gBodies, __global int2* gSortDataOut, \n"
- "int nContacts,float scale,int4 nSplit,int staticIdx)\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " \n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int aPtrAndSignBit = gContact[gIdx].m_bodyAPtrAndSignBit;\n"
- " int bPtrAndSignBit = gContact[gIdx].m_bodyBPtrAndSignBit;\n"
- " int aIdx = abs(aPtrAndSignBit );\n"
- " int bIdx = abs(bPtrAndSignBit);\n"
- " bool aStatic = (aPtrAndSignBit<0) ||(aPtrAndSignBit==staticIdx);\n"
- " bool bStatic = (bPtrAndSignBit<0) ||(bPtrAndSignBit==staticIdx);\n"
- "#if USE_SPATIAL_BATCHING \n"
- " int idx = (aStatic)? bIdx: aIdx;\n"
- " float4 p = gBodies[idx].m_pos;\n"
- " int xIdx = (int)((p.x-((p.x<0.f)?1.f:0.f))*scale) & (nSplit.x-1);\n"
- " int yIdx = (int)((p.y-((p.y<0.f)?1.f:0.f))*scale) & (nSplit.y-1);\n"
- " int zIdx = (int)((p.z-((p.z<0.f)?1.f:0.f))*scale) & (nSplit.z-1);\n"
- " int newIndex = (xIdx+yIdx*nSplit.x+zIdx*nSplit.x*nSplit.y);\n"
- " \n"
- "#else//USE_SPATIAL_BATCHING\n"
- " #if USE_4x4_GRID\n"
- " int aa = aIdx&3;\n"
- " int bb = bIdx&3;\n"
- " if (aStatic)\n"
- " aa = bb;\n"
- " if (bStatic)\n"
- " bb = aa;\n"
- " int gridIndex = aa + bb*4;\n"
- " int newIndex = gridTable4x4[gridIndex];\n"
- " #else//USE_4x4_GRID\n"
- " int aa = aIdx&7;\n"
- " int bb = bIdx&7;\n"
- " if (aStatic)\n"
- " aa = bb;\n"
- " if (bStatic)\n"
- " bb = aa;\n"
- " int gridIndex = aa + bb*8;\n"
- " int newIndex = gridTable8x8[gridIndex];\n"
- " #endif//USE_4x4_GRID\n"
- "#endif//USE_SPATIAL_BATCHING\n"
- " gSortDataOut[gIdx].x = newIndex;\n"
- " gSortDataOut[gIdx].y = gIdx;\n"
- " }\n"
- " else\n"
- " {\n"
- " gSortDataOut[gIdx].x = 0xffffffff;\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void CopyConstraintKernel(__global struct b3Contact4Data* gIn, __global struct b3Contact4Data* gOut, int4 cb )\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " if( gIdx < cb.x )\n"
- " {\n"
- " gOut[gIdx] = gIn[gIdx];\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.cl
deleted file mode 100644
index a21a08c3b4..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.cl
+++ /dev/null
@@ -1,968 +0,0 @@
-/*
-Copyright (c) 2013 Advanced Micro Devices, Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-//Originally written by Erwin Coumans
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3Contact4Data.h"
-
-#pragma OPENCL EXTENSION cl_amd_printf : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable
-#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable
-
-
-#ifdef cl_ext_atomic_counters_32
-#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable
-#else
-#define counter32_t volatile global int*
-#endif
-
-typedef unsigned int u32;
-typedef unsigned short u16;
-typedef unsigned char u8;
-
-#define GET_GROUP_IDX get_group_id(0)
-#define GET_LOCAL_IDX get_local_id(0)
-#define GET_GLOBAL_IDX get_global_id(0)
-#define GET_GROUP_SIZE get_local_size(0)
-#define GET_NUM_GROUPS get_num_groups(0)
-#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)
-#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)
-#define AtomInc(x) atom_inc(&(x))
-#define AtomInc1(x, out) out = atom_inc(&(x))
-#define AppendInc(x, out) out = atomic_inc(x)
-#define AtomAdd(x, value) atom_add(&(x), value)
-#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )
-#define AtomXhg(x, value) atom_xchg ( &(x), value )
-
-
-#define SELECT_UINT4( b, a, condition ) select( b,a,condition )
-
-#define make_float4 (float4)
-#define make_float2 (float2)
-#define make_uint4 (uint4)
-#define make_int4 (int4)
-#define make_uint2 (uint2)
-#define make_int2 (int2)
-
-
-#define max2 max
-#define min2 min
-
-
-///////////////////////////////////////
-// Vector
-///////////////////////////////////////
-__inline
-float fastDiv(float numerator, float denominator)
-{
- return native_divide(numerator, denominator);
-// return numerator/denominator;
-}
-
-__inline
-float4 fastDiv4(float4 numerator, float4 denominator)
-{
- return native_divide(numerator, denominator);
-}
-
-__inline
-float fastSqrtf(float f2)
-{
- return native_sqrt(f2);
-// return sqrt(f2);
-}
-
-__inline
-float fastRSqrt(float f2)
-{
- return native_rsqrt(f2);
-}
-
-__inline
-float fastLength4(float4 v)
-{
- return fast_length(v);
-}
-
-__inline
-float4 fastNormalize4(float4 v)
-{
- return fast_normalize(v);
-}
-
-
-__inline
-float sqrtf(float a)
-{
-// return sqrt(a);
- return native_sqrt(a);
-}
-
-__inline
-float4 cross3(float4 a1, float4 b1)
-{
-
- float4 a=make_float4(a1.xyz,0.f);
- float4 b=make_float4(b1.xyz,0.f);
- //float4 a=a1;
- //float4 b=b1;
- return cross(a,b);
-}
-
-__inline
-float dot3F4(float4 a, float4 b)
-{
- float4 a1 = make_float4(a.xyz,0.f);
- float4 b1 = make_float4(b.xyz,0.f);
- return dot(a1, b1);
-}
-
-__inline
-float length3(const float4 a)
-{
- return sqrtf(dot3F4(a,a));
-}
-
-__inline
-float dot4(const float4 a, const float4 b)
-{
- return dot( a, b );
-}
-
-// for height
-__inline
-float dot3w1(const float4 point, const float4 eqn)
-{
- return dot3F4(point,eqn) + eqn.w;
-}
-
-__inline
-float4 normalize3(const float4 a)
-{
- float4 n = make_float4(a.x, a.y, a.z, 0.f);
- return fastNormalize4( n );
-// float length = sqrtf(dot3F4(a, a));
-// return 1.f/length * a;
-}
-
-__inline
-float4 normalize4(const float4 a)
-{
- float length = sqrtf(dot4(a, a));
- return 1.f/length * a;
-}
-
-__inline
-float4 createEquation(const float4 a, const float4 b, const float4 c)
-{
- float4 eqn;
- float4 ab = b-a;
- float4 ac = c-a;
- eqn = normalize3( cross3(ab, ac) );
- eqn.w = -dot3F4(eqn,a);
- return eqn;
-}
-
-///////////////////////////////////////
-// Matrix3x3
-///////////////////////////////////////
-
-typedef struct
-{
- float4 m_row[3];
-}Matrix3x3;
-
-__inline
-Matrix3x3 mtZero();
-
-__inline
-Matrix3x3 mtIdentity();
-
-__inline
-Matrix3x3 mtTranspose(Matrix3x3 m);
-
-__inline
-Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b);
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b);
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b);
-
-__inline
-Matrix3x3 mtZero()
-{
- Matrix3x3 m;
- m.m_row[0] = (float4)(0.f);
- m.m_row[1] = (float4)(0.f);
- m.m_row[2] = (float4)(0.f);
- return m;
-}
-
-__inline
-Matrix3x3 mtIdentity()
-{
- Matrix3x3 m;
- m.m_row[0] = (float4)(1,0,0,0);
- m.m_row[1] = (float4)(0,1,0,0);
- m.m_row[2] = (float4)(0,0,1,0);
- return m;
-}
-
-__inline
-Matrix3x3 mtTranspose(Matrix3x3 m)
-{
- Matrix3x3 out;
- out.m_row[0] = (float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);
- out.m_row[1] = (float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);
- out.m_row[2] = (float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);
- return out;
-}
-
-__inline
-Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b)
-{
- Matrix3x3 transB;
- transB = mtTranspose( b );
- Matrix3x3 ans;
- // why this doesn't run when 0ing in the for{}
- a.m_row[0].w = 0.f;
- a.m_row[1].w = 0.f;
- a.m_row[2].w = 0.f;
- for(int i=0; i<3; i++)
- {
-// a.m_row[i].w = 0.f;
- ans.m_row[i].x = dot3F4(a.m_row[i],transB.m_row[0]);
- ans.m_row[i].y = dot3F4(a.m_row[i],transB.m_row[1]);
- ans.m_row[i].z = dot3F4(a.m_row[i],transB.m_row[2]);
- ans.m_row[i].w = 0.f;
- }
- return ans;
-}
-
-__inline
-float4 mtMul1(Matrix3x3 a, float4 b)
-{
- float4 ans;
- ans.x = dot3F4( a.m_row[0], b );
- ans.y = dot3F4( a.m_row[1], b );
- ans.z = dot3F4( a.m_row[2], b );
- ans.w = 0.f;
- return ans;
-}
-
-__inline
-float4 mtMul3(float4 a, Matrix3x3 b)
-{
- float4 colx = make_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);
- float4 coly = make_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);
- float4 colz = make_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);
-
- float4 ans;
- ans.x = dot3F4( a, colx );
- ans.y = dot3F4( a, coly );
- ans.z = dot3F4( a, colz );
- return ans;
-}
-
-///////////////////////////////////////
-// Quaternion
-///////////////////////////////////////
-
-typedef float4 Quaternion;
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b);
-
-__inline
-Quaternion qtNormalize(Quaternion in);
-
-__inline
-float4 qtRotate(Quaternion q, float4 vec);
-
-__inline
-Quaternion qtInvert(Quaternion q);
-
-
-
-
-
-__inline
-Quaternion qtMul(Quaternion a, Quaternion b)
-{
- Quaternion ans;
- ans = cross3( a, b );
- ans += a.w*b+b.w*a;
-// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);
- ans.w = a.w*b.w - dot3F4(a, b);
- return ans;
-}
-
-__inline
-Quaternion qtNormalize(Quaternion in)
-{
- return fastNormalize4(in);
-// in /= length( in );
-// return in;
-}
-__inline
-float4 qtRotate(Quaternion q, float4 vec)
-{
- Quaternion qInv = qtInvert( q );
- float4 vcpy = vec;
- vcpy.w = 0.f;
- float4 out = qtMul(qtMul(q,vcpy),qInv);
- return out;
-}
-
-__inline
-Quaternion qtInvert(Quaternion q)
-{
- return (Quaternion)(-q.xyz, q.w);
-}
-
-__inline
-float4 qtInvRotate(const Quaternion q, float4 vec)
-{
- return qtRotate( qtInvert( q ), vec );
-}
-
-
-
-
-#define WG_SIZE 64
-
-typedef struct
-{
- float4 m_pos;
- Quaternion m_quat;
- float4 m_linVel;
- float4 m_angVel;
-
- u32 m_shapeIdx;
- float m_invMass;
- float m_restituitionCoeff;
- float m_frictionCoeff;
-} Body;
-
-
-
-typedef struct
-{
- Matrix3x3 m_invInertia;
- Matrix3x3 m_initInvInertia;
-} Shape;
-
-typedef struct
-{
- float4 m_linear;
- float4 m_worldPos[4];
- float4 m_center;
- float m_jacCoeffInv[4];
- float m_b[4];
- float m_appliedRambdaDt[4];
-
- float m_fJacCoeffInv[2];
- float m_fAppliedRambdaDt[2];
-
- u32 m_bodyA;
- u32 m_bodyB;
- int m_batchIdx;
- u32 m_paddings;
-} Constraint4;
-
-
-
-
-
-
-__kernel void CountBodiesKernel(__global struct b3Contact4Data* manifoldPtr, __global unsigned int* bodyCount, __global int2* contactConstraintOffsets, int numContactManifolds, int fixedBodyIndex)
-{
- int i = GET_GLOBAL_IDX;
-
- if( i < numContactManifolds)
- {
- int pa = manifoldPtr[i].m_bodyAPtrAndSignBit;
- bool isFixedA = (pa <0) || (pa == fixedBodyIndex);
- int bodyIndexA = abs(pa);
- if (!isFixedA)
- {
- AtomInc1(bodyCount[bodyIndexA],contactConstraintOffsets[i].x);
- }
- barrier(CLK_GLOBAL_MEM_FENCE);
- int pb = manifoldPtr[i].m_bodyBPtrAndSignBit;
- bool isFixedB = (pb <0) || (pb == fixedBodyIndex);
- int bodyIndexB = abs(pb);
- if (!isFixedB)
- {
- AtomInc1(bodyCount[bodyIndexB],contactConstraintOffsets[i].y);
- }
- }
-}
-
-__kernel void ClearVelocitiesKernel(__global float4* linearVelocities,__global float4* angularVelocities, int numSplitBodies)
-{
- int i = GET_GLOBAL_IDX;
-
- if( i < numSplitBodies)
- {
- linearVelocities[i] = make_float4(0);
- angularVelocities[i] = make_float4(0);
- }
-}
-
-
-__kernel void AverageVelocitiesKernel(__global Body* gBodies,__global int* offsetSplitBodies,__global const unsigned int* bodyCount,
-__global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities, int numBodies)
-{
- int i = GET_GLOBAL_IDX;
- if (i<numBodies)
- {
- if (gBodies[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- float factor = 1.f/((float)count);
- float4 averageLinVel = make_float4(0.f);
- float4 averageAngVel = make_float4(0.f);
-
- for (int j=0;j<count;j++)
- {
- averageLinVel += deltaLinearVelocities[bodyOffset+j]*factor;
- averageAngVel += deltaAngularVelocities[bodyOffset+j]*factor;
- }
-
- for (int j=0;j<count;j++)
- {
- deltaLinearVelocities[bodyOffset+j] = averageLinVel;
- deltaAngularVelocities[bodyOffset+j] = averageAngVel;
- }
-
- }//bodies[i].m_invMass
- }//i<numBodies
-}
-
-
-
-void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1)
-{
- *linear = make_float4(n.xyz,0.f);
- *angular0 = cross3(r0, n);
- *angular1 = -cross3(r1, n);
-}
-
-
-float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 )
-{
- return dot3F4(l0, linVel0) + dot3F4(a0, angVel0) + dot3F4(l1, linVel1) + dot3F4(a1, angVel1);
-}
-
-
-float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,
- float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1, float countA, float countB)
-{
- // linear0,1 are normlized
- float jmj0 = invMass0;//dot3F4(linear0, linear0)*invMass0;
- float jmj1 = dot3F4(mtMul3(angular0,*invInertia0), angular0);
- float jmj2 = invMass1;//dot3F4(linear1, linear1)*invMass1;
- float jmj3 = dot3F4(mtMul3(angular1,*invInertia1), angular1);
- return -1.f/((jmj0+jmj1)*countA+(jmj2+jmj3)*countB);
-}
-
-
-void btPlaneSpace1 (float4 n, float4* p, float4* q);
- void btPlaneSpace1 (float4 n, float4* p, float4* q)
-{
- if (fabs(n.z) > 0.70710678f) {
- // choose p in y-z plane
- float a = n.y*n.y + n.z*n.z;
- float k = 1.f/sqrt(a);
- p[0].x = 0;
- p[0].y = -n.z*k;
- p[0].z = n.y*k;
- // set q = n x p
- q[0].x = a*k;
- q[0].y = -n.x*p[0].z;
- q[0].z = n.x*p[0].y;
- }
- else {
- // choose p in x-y plane
- float a = n.x*n.x + n.y*n.y;
- float k = 1.f/sqrt(a);
- p[0].x = -n.y*k;
- p[0].y = n.x*k;
- p[0].z = 0;
- // set q = n x p
- q[0].x = -n.z*p[0].y;
- q[0].y = n.z*p[0].x;
- q[0].z = a*k;
- }
-}
-
-
-
-
-
-void solveContact(__global Constraint4* cs,
- float4 posA, float4* linVelA, float4* angVelA, float invMassA, Matrix3x3 invInertiaA,
- float4 posB, float4* linVelB, float4* angVelB, float invMassB, Matrix3x3 invInertiaB,
- float4* dLinVelA, float4* dAngVelA, float4* dLinVelB, float4* dAngVelB)
-{
- float minRambdaDt = 0;
- float maxRambdaDt = FLT_MAX;
-
- for(int ic=0; ic<4; ic++)
- {
- if( cs->m_jacCoeffInv[ic] == 0.f ) continue;
-
- float4 angular0, angular1, linear;
- float4 r0 = cs->m_worldPos[ic] - posA;
- float4 r1 = cs->m_worldPos[ic] - posB;
- setLinearAndAngular( cs->m_linear, r0, r1, &linear, &angular0, &angular1 );
-
-
-
- float rambdaDt = calcRelVel( cs->m_linear, -cs->m_linear, angular0, angular1,
- *linVelA+*dLinVelA, *angVelA+*dAngVelA, *linVelB+*dLinVelB, *angVelB+*dAngVelB ) + cs->m_b[ic];
- rambdaDt *= cs->m_jacCoeffInv[ic];
-
-
- {
- float prevSum = cs->m_appliedRambdaDt[ic];
- float updated = prevSum;
- updated += rambdaDt;
- updated = max2( updated, minRambdaDt );
- updated = min2( updated, maxRambdaDt );
- rambdaDt = updated - prevSum;
- cs->m_appliedRambdaDt[ic] = updated;
- }
-
-
- float4 linImp0 = invMassA*linear*rambdaDt;
- float4 linImp1 = invMassB*(-linear)*rambdaDt;
- float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;
- float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;
-
-
- if (invMassA)
- {
- *dLinVelA += linImp0;
- *dAngVelA += angImp0;
- }
- if (invMassB)
- {
- *dLinVelB += linImp1;
- *dAngVelB += angImp1;
- }
- }
-}
-
-
-// solveContactConstraint( gBodies, gShapes, &gConstraints[i] ,contactConstraintOffsets,offsetSplitBodies, deltaLinearVelocities, deltaAngularVelocities);
-
-
-void solveContactConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs,
-__global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,
-__global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities)
-{
-
- //float frictionCoeff = ldsCs[0].m_linear.w;
- int aIdx = ldsCs[0].m_bodyA;
- int bIdx = ldsCs[0].m_bodyB;
-
- float4 posA = gBodies[aIdx].m_pos;
- float4 linVelA = gBodies[aIdx].m_linVel;
- float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;
-
- float4 posB = gBodies[bIdx].m_pos;
- float4 linVelB = gBodies[bIdx].m_linVel;
- float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;
-
-
- float4 dLinVelA = make_float4(0,0,0,0);
- float4 dAngVelA = make_float4(0,0,0,0);
- float4 dLinVelB = make_float4(0,0,0,0);
- float4 dAngVelB = make_float4(0,0,0,0);
-
- int bodyOffsetA = offsetSplitBodies[aIdx];
- int constraintOffsetA = contactConstraintOffsets[0].x;
- int splitIndexA = bodyOffsetA+constraintOffsetA;
-
- if (invMassA)
- {
- dLinVelA = deltaLinearVelocities[splitIndexA];
- dAngVelA = deltaAngularVelocities[splitIndexA];
- }
-
- int bodyOffsetB = offsetSplitBodies[bIdx];
- int constraintOffsetB = contactConstraintOffsets[0].y;
- int splitIndexB= bodyOffsetB+constraintOffsetB;
-
- if (invMassB)
- {
- dLinVelB = deltaLinearVelocities[splitIndexB];
- dAngVelB = deltaAngularVelocities[splitIndexB];
- }
-
- solveContact( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,
- posB, &linVelB, &angVelB, invMassB, invInertiaB ,&dLinVelA, &dAngVelA, &dLinVelB, &dAngVelB);
-
- if (invMassA)
- {
- deltaLinearVelocities[splitIndexA] = dLinVelA;
- deltaAngularVelocities[splitIndexA] = dAngVelA;
- }
- if (invMassB)
- {
- deltaLinearVelocities[splitIndexB] = dLinVelB;
- deltaAngularVelocities[splitIndexB] = dAngVelB;
- }
-
-}
-
-
-__kernel void SolveContactJacobiKernel(__global Constraint4* gConstraints, __global Body* gBodies, __global Shape* gShapes ,
-__global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,__global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities,
-float deltaTime, float positionDrift, float positionConstraintCoeff, int fixedBodyIndex, int numManifolds
-)
-{
- int i = GET_GLOBAL_IDX;
- if (i<numManifolds)
- {
- solveContactConstraint( gBodies, gShapes, &gConstraints[i] ,&contactConstraintOffsets[i],offsetSplitBodies, deltaLinearVelocities, deltaAngularVelocities);
- }
-}
-
-
-
-
-void solveFrictionConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs,
- __global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,
- __global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities)
-{
- float frictionCoeff = 0.7f;//ldsCs[0].m_linear.w;
- int aIdx = ldsCs[0].m_bodyA;
- int bIdx = ldsCs[0].m_bodyB;
-
-
- float4 posA = gBodies[aIdx].m_pos;
- float4 linVelA = gBodies[aIdx].m_linVel;
- float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;
-
- float4 posB = gBodies[bIdx].m_pos;
- float4 linVelB = gBodies[bIdx].m_linVel;
- float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;
-
-
- float4 dLinVelA = make_float4(0,0,0,0);
- float4 dAngVelA = make_float4(0,0,0,0);
- float4 dLinVelB = make_float4(0,0,0,0);
- float4 dAngVelB = make_float4(0,0,0,0);
-
- int bodyOffsetA = offsetSplitBodies[aIdx];
- int constraintOffsetA = contactConstraintOffsets[0].x;
- int splitIndexA = bodyOffsetA+constraintOffsetA;
-
- if (invMassA)
- {
- dLinVelA = deltaLinearVelocities[splitIndexA];
- dAngVelA = deltaAngularVelocities[splitIndexA];
- }
-
- int bodyOffsetB = offsetSplitBodies[bIdx];
- int constraintOffsetB = contactConstraintOffsets[0].y;
- int splitIndexB= bodyOffsetB+constraintOffsetB;
-
- if (invMassB)
- {
- dLinVelB = deltaLinearVelocities[splitIndexB];
- dAngVelB = deltaAngularVelocities[splitIndexB];
- }
-
-
-
-
- {
- float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};
- float minRambdaDt[4] = {0.f,0.f,0.f,0.f};
-
- float sum = 0;
- for(int j=0; j<4; j++)
- {
- sum +=ldsCs[0].m_appliedRambdaDt[j];
- }
- frictionCoeff = 0.7f;
- for(int j=0; j<4; j++)
- {
- maxRambdaDt[j] = frictionCoeff*sum;
- minRambdaDt[j] = -maxRambdaDt[j];
- }
-
-
-// solveFriction( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,
-// posB, &linVelB, &angVelB, invMassB, invInertiaB, maxRambdaDt, minRambdaDt );
-
-
- {
-
- __global Constraint4* cs = ldsCs;
-
- if( cs->m_fJacCoeffInv[0] == 0 && cs->m_fJacCoeffInv[0] == 0 ) return;
- const float4 center = cs->m_center;
-
- float4 n = -cs->m_linear;
-
- float4 tangent[2];
- btPlaneSpace1(n,&tangent[0],&tangent[1]);
- float4 angular0, angular1, linear;
- float4 r0 = center - posA;
- float4 r1 = center - posB;
- for(int i=0; i<2; i++)
- {
- setLinearAndAngular( tangent[i], r0, r1, &linear, &angular0, &angular1 );
- float rambdaDt = calcRelVel(linear, -linear, angular0, angular1,
- linVelA+dLinVelA, angVelA+dAngVelA, linVelB+dLinVelB, angVelB+dAngVelB );
- rambdaDt *= cs->m_fJacCoeffInv[i];
-
- {
- float prevSum = cs->m_fAppliedRambdaDt[i];
- float updated = prevSum;
- updated += rambdaDt;
- updated = max2( updated, minRambdaDt[i] );
- updated = min2( updated, maxRambdaDt[i] );
- rambdaDt = updated - prevSum;
- cs->m_fAppliedRambdaDt[i] = updated;
- }
-
- float4 linImp0 = invMassA*linear*rambdaDt;
- float4 linImp1 = invMassB*(-linear)*rambdaDt;
- float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;
- float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;
-
- dLinVelA += linImp0;
- dAngVelA += angImp0;
- dLinVelB += linImp1;
- dAngVelB += angImp1;
- }
- { // angular damping for point constraint
- float4 ab = normalize3( posB - posA );
- float4 ac = normalize3( center - posA );
- if( dot3F4( ab, ac ) > 0.95f || (invMassA == 0.f || invMassB == 0.f))
- {
- float angNA = dot3F4( n, angVelA );
- float angNB = dot3F4( n, angVelB );
-
- dAngVelA -= (angNA*0.1f)*n;
- dAngVelB -= (angNB*0.1f)*n;
- }
- }
- }
-
-
-
- }
-
- if (invMassA)
- {
- deltaLinearVelocities[splitIndexA] = dLinVelA;
- deltaAngularVelocities[splitIndexA] = dAngVelA;
- }
- if (invMassB)
- {
- deltaLinearVelocities[splitIndexB] = dLinVelB;
- deltaAngularVelocities[splitIndexB] = dAngVelB;
- }
-
-
-}
-
-
-__kernel void SolveFrictionJacobiKernel(__global Constraint4* gConstraints, __global Body* gBodies, __global Shape* gShapes ,
- __global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,
- __global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities,
- float deltaTime, float positionDrift, float positionConstraintCoeff, int fixedBodyIndex, int numManifolds
-)
-{
- int i = GET_GLOBAL_IDX;
- if (i<numManifolds)
- {
- solveFrictionConstraint( gBodies, gShapes, &gConstraints[i] ,&contactConstraintOffsets[i],offsetSplitBodies, deltaLinearVelocities, deltaAngularVelocities);
- }
-}
-
-
-__kernel void UpdateBodyVelocitiesKernel(__global Body* gBodies,__global int* offsetSplitBodies,__global const unsigned int* bodyCount,
- __global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities, int numBodies)
-{
- int i = GET_GLOBAL_IDX;
- if (i<numBodies)
- {
- if (gBodies[i].m_invMass)
- {
- int bodyOffset = offsetSplitBodies[i];
- int count = bodyCount[i];
- if (count)
- {
- gBodies[i].m_linVel += deltaLinearVelocities[bodyOffset];
- gBodies[i].m_angVel += deltaAngularVelocities[bodyOffset];
- }
- }
- }
-}
-
-
-
-void setConstraint4( const float4 posA, const float4 linVelA, const float4 angVelA, float invMassA, const Matrix3x3 invInertiaA,
- const float4 posB, const float4 linVelB, const float4 angVelB, float invMassB, const Matrix3x3 invInertiaB,
- __global struct b3Contact4Data* src, float dt, float positionDrift, float positionConstraintCoeff,float countA, float countB,
- Constraint4* dstC )
-{
- dstC->m_bodyA = abs(src->m_bodyAPtrAndSignBit);
- dstC->m_bodyB = abs(src->m_bodyBPtrAndSignBit);
-
- float dtInv = 1.f/dt;
- for(int ic=0; ic<4; ic++)
- {
- dstC->m_appliedRambdaDt[ic] = 0.f;
- }
- dstC->m_fJacCoeffInv[0] = dstC->m_fJacCoeffInv[1] = 0.f;
-
-
- dstC->m_linear = src->m_worldNormalOnB;
- dstC->m_linear.w = 0.7f ;//src->getFrictionCoeff() );
- for(int ic=0; ic<4; ic++)
- {
- float4 r0 = src->m_worldPosB[ic] - posA;
- float4 r1 = src->m_worldPosB[ic] - posB;
-
- if( ic >= src->m_worldNormalOnB.w )//npoints
- {
- dstC->m_jacCoeffInv[ic] = 0.f;
- continue;
- }
-
- float relVelN;
- {
- float4 linear, angular0, angular1;
- setLinearAndAngular(src->m_worldNormalOnB, r0, r1, &linear, &angular0, &angular1);
-
- dstC->m_jacCoeffInv[ic] = calcJacCoeff(linear, -linear, angular0, angular1,
- invMassA, &invInertiaA, invMassB, &invInertiaB , countA, countB);
-
- relVelN = calcRelVel(linear, -linear, angular0, angular1,
- linVelA, angVelA, linVelB, angVelB);
-
- float e = 0.f;//src->getRestituitionCoeff();
- if( relVelN*relVelN < 0.004f ) e = 0.f;
-
- dstC->m_b[ic] = e*relVelN;
- //float penetration = src->m_worldPosB[ic].w;
- dstC->m_b[ic] += (src->m_worldPosB[ic].w + positionDrift)*positionConstraintCoeff*dtInv;
- dstC->m_appliedRambdaDt[ic] = 0.f;
- }
- }
-
- if( src->m_worldNormalOnB.w > 0 )//npoints
- { // prepare friction
- float4 center = make_float4(0.f);
- for(int i=0; i<src->m_worldNormalOnB.w; i++)
- center += src->m_worldPosB[i];
- center /= (float)src->m_worldNormalOnB.w;
-
- float4 tangent[2];
- btPlaneSpace1(-src->m_worldNormalOnB,&tangent[0],&tangent[1]);
-
- float4 r[2];
- r[0] = center - posA;
- r[1] = center - posB;
-
- for(int i=0; i<2; i++)
- {
- float4 linear, angular0, angular1;
- setLinearAndAngular(tangent[i], r[0], r[1], &linear, &angular0, &angular1);
-
- dstC->m_fJacCoeffInv[i] = calcJacCoeff(linear, -linear, angular0, angular1,
- invMassA, &invInertiaA, invMassB, &invInertiaB ,countA, countB);
- dstC->m_fAppliedRambdaDt[i] = 0.f;
- }
- dstC->m_center = center;
- }
-
- for(int i=0; i<4; i++)
- {
- if( i<src->m_worldNormalOnB.w )
- {
- dstC->m_worldPos[i] = src->m_worldPosB[i];
- }
- else
- {
- dstC->m_worldPos[i] = make_float4(0.f);
- }
- }
-}
-
-
-__kernel
-__attribute__((reqd_work_group_size(WG_SIZE,1,1)))
-void ContactToConstraintSplitKernel(__global const struct b3Contact4Data* gContact, __global const Body* gBodies, __global const Shape* gShapes, __global Constraint4* gConstraintOut,
-__global const unsigned int* bodyCount,
-int nContacts,
-float dt,
-float positionDrift,
-float positionConstraintCoeff
-)
-{
- int gIdx = GET_GLOBAL_IDX;
-
- if( gIdx < nContacts )
- {
- int aIdx = abs(gContact[gIdx].m_bodyAPtrAndSignBit);
- int bIdx = abs(gContact[gIdx].m_bodyBPtrAndSignBit);
-
- float4 posA = gBodies[aIdx].m_pos;
- float4 linVelA = gBodies[aIdx].m_linVel;
- float4 angVelA = gBodies[aIdx].m_angVel;
- float invMassA = gBodies[aIdx].m_invMass;
- Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;
-
- float4 posB = gBodies[bIdx].m_pos;
- float4 linVelB = gBodies[bIdx].m_linVel;
- float4 angVelB = gBodies[bIdx].m_angVel;
- float invMassB = gBodies[bIdx].m_invMass;
- Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;
-
- Constraint4 cs;
-
- float countA = invMassA != 0.f ? (float)bodyCount[aIdx] : 1;
- float countB = invMassB != 0.f ? (float)bodyCount[bIdx] : 1;
-
- setConstraint4( posA, linVelA, angVelA, invMassA, invInertiaA, posB, linVelB, angVelB, invMassB, invInertiaB,
- &gContact[gIdx], dt, positionDrift, positionConstraintCoeff,countA,countB,
- &cs );
-
- cs.m_batchIdx = gContact[gIdx].m_batchIdx;
-
- gConstraintOut[gIdx] = cs;
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.h
deleted file mode 100644
index f4d98d9941..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/solverUtils.h
+++ /dev/null
@@ -1,908 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* solverUtilsCL =
- "/*\n"
- "Copyright (c) 2013 Advanced Micro Devices, Inc. \n"
- "This software is provided 'as-is', without any express or implied warranty.\n"
- "In no event will the authors be held liable for any damages arising from the use of this software.\n"
- "Permission is granted to anyone to use this software for any purpose, \n"
- "including commercial applications, and to alter it and redistribute it freely, \n"
- "subject to the following restrictions:\n"
- "1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.\n"
- "2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.\n"
- "3. This notice may not be removed or altered from any source distribution.\n"
- "*/\n"
- "//Originally written by Erwin Coumans\n"
- "#ifndef B3_CONTACT4DATA_H\n"
- "#define B3_CONTACT4DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "typedef struct b3Contact4Data b3Contact4Data_t;\n"
- "struct b3Contact4Data\n"
- "{\n"
- " b3Float4 m_worldPosB[4];\n"
- "// b3Float4 m_localPosA[4];\n"
- "// b3Float4 m_localPosB[4];\n"
- " b3Float4 m_worldNormalOnB; // w: m_nPoints\n"
- " unsigned short m_restituitionCoeffCmp;\n"
- " unsigned short m_frictionCoeffCmp;\n"
- " int m_batchIdx;\n"
- " int m_bodyAPtrAndSignBit;//x:m_bodyAPtr, y:m_bodyBPtr\n"
- " int m_bodyBPtrAndSignBit;\n"
- " int m_childIndexA;\n"
- " int m_childIndexB;\n"
- " int m_unused1;\n"
- " int m_unused2;\n"
- "};\n"
- "inline int b3Contact4Data_getNumPoints(const struct b3Contact4Data* contact)\n"
- "{\n"
- " return (int)contact->m_worldNormalOnB.w;\n"
- "};\n"
- "inline void b3Contact4Data_setNumPoints(struct b3Contact4Data* contact, int numPoints)\n"
- "{\n"
- " contact->m_worldNormalOnB.w = (float)numPoints;\n"
- "};\n"
- "#endif //B3_CONTACT4DATA_H\n"
- "#pragma OPENCL EXTENSION cl_amd_printf : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_base_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_local_int32_extended_atomics : enable\n"
- "#pragma OPENCL EXTENSION cl_khr_global_int32_extended_atomics : enable\n"
- "#ifdef cl_ext_atomic_counters_32\n"
- "#pragma OPENCL EXTENSION cl_ext_atomic_counters_32 : enable\n"
- "#else\n"
- "#define counter32_t volatile global int*\n"
- "#endif\n"
- "typedef unsigned int u32;\n"
- "typedef unsigned short u16;\n"
- "typedef unsigned char u8;\n"
- "#define GET_GROUP_IDX get_group_id(0)\n"
- "#define GET_LOCAL_IDX get_local_id(0)\n"
- "#define GET_GLOBAL_IDX get_global_id(0)\n"
- "#define GET_GROUP_SIZE get_local_size(0)\n"
- "#define GET_NUM_GROUPS get_num_groups(0)\n"
- "#define GROUP_LDS_BARRIER barrier(CLK_LOCAL_MEM_FENCE)\n"
- "#define GROUP_MEM_FENCE mem_fence(CLK_LOCAL_MEM_FENCE)\n"
- "#define AtomInc(x) atom_inc(&(x))\n"
- "#define AtomInc1(x, out) out = atom_inc(&(x))\n"
- "#define AppendInc(x, out) out = atomic_inc(x)\n"
- "#define AtomAdd(x, value) atom_add(&(x), value)\n"
- "#define AtomCmpxhg(x, cmp, value) atom_cmpxchg( &(x), cmp, value )\n"
- "#define AtomXhg(x, value) atom_xchg ( &(x), value )\n"
- "#define SELECT_UINT4( b, a, condition ) select( b,a,condition )\n"
- "#define make_float4 (float4)\n"
- "#define make_float2 (float2)\n"
- "#define make_uint4 (uint4)\n"
- "#define make_int4 (int4)\n"
- "#define make_uint2 (uint2)\n"
- "#define make_int2 (int2)\n"
- "#define max2 max\n"
- "#define min2 min\n"
- "///////////////////////////////////////\n"
- "// Vector\n"
- "///////////////////////////////////////\n"
- "__inline\n"
- "float fastDiv(float numerator, float denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "// return numerator/denominator; \n"
- "}\n"
- "__inline\n"
- "float4 fastDiv4(float4 numerator, float4 denominator)\n"
- "{\n"
- " return native_divide(numerator, denominator); \n"
- "}\n"
- "__inline\n"
- "float fastSqrtf(float f2)\n"
- "{\n"
- " return native_sqrt(f2);\n"
- "// return sqrt(f2);\n"
- "}\n"
- "__inline\n"
- "float fastRSqrt(float f2)\n"
- "{\n"
- " return native_rsqrt(f2);\n"
- "}\n"
- "__inline\n"
- "float fastLength4(float4 v)\n"
- "{\n"
- " return fast_length(v);\n"
- "}\n"
- "__inline\n"
- "float4 fastNormalize4(float4 v)\n"
- "{\n"
- " return fast_normalize(v);\n"
- "}\n"
- "__inline\n"
- "float sqrtf(float a)\n"
- "{\n"
- "// return sqrt(a);\n"
- " return native_sqrt(a);\n"
- "}\n"
- "__inline\n"
- "float4 cross3(float4 a1, float4 b1)\n"
- "{\n"
- " float4 a=make_float4(a1.xyz,0.f);\n"
- " float4 b=make_float4(b1.xyz,0.f);\n"
- " //float4 a=a1;\n"
- " //float4 b=b1;\n"
- " return cross(a,b);\n"
- "}\n"
- "__inline\n"
- "float dot3F4(float4 a, float4 b)\n"
- "{\n"
- " float4 a1 = make_float4(a.xyz,0.f);\n"
- " float4 b1 = make_float4(b.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- "}\n"
- "__inline\n"
- "float length3(const float4 a)\n"
- "{\n"
- " return sqrtf(dot3F4(a,a));\n"
- "}\n"
- "__inline\n"
- "float dot4(const float4 a, const float4 b)\n"
- "{\n"
- " return dot( a, b );\n"
- "}\n"
- "// for height\n"
- "__inline\n"
- "float dot3w1(const float4 point, const float4 eqn)\n"
- "{\n"
- " return dot3F4(point,eqn) + eqn.w;\n"
- "}\n"
- "__inline\n"
- "float4 normalize3(const float4 a)\n"
- "{\n"
- " float4 n = make_float4(a.x, a.y, a.z, 0.f);\n"
- " return fastNormalize4( n );\n"
- "// float length = sqrtf(dot3F4(a, a));\n"
- "// return 1.f/length * a;\n"
- "}\n"
- "__inline\n"
- "float4 normalize4(const float4 a)\n"
- "{\n"
- " float length = sqrtf(dot4(a, a));\n"
- " return 1.f/length * a;\n"
- "}\n"
- "__inline\n"
- "float4 createEquation(const float4 a, const float4 b, const float4 c)\n"
- "{\n"
- " float4 eqn;\n"
- " float4 ab = b-a;\n"
- " float4 ac = c-a;\n"
- " eqn = normalize3( cross3(ab, ac) );\n"
- " eqn.w = -dot3F4(eqn,a);\n"
- " return eqn;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Matrix3x3\n"
- "///////////////////////////////////////\n"
- "typedef struct\n"
- "{\n"
- " float4 m_row[3];\n"
- "}Matrix3x3;\n"
- "__inline\n"
- "Matrix3x3 mtZero();\n"
- "__inline\n"
- "Matrix3x3 mtIdentity();\n"
- "__inline\n"
- "Matrix3x3 mtTranspose(Matrix3x3 m);\n"
- "__inline\n"
- "Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b);\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b);\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b);\n"
- "__inline\n"
- "Matrix3x3 mtZero()\n"
- "{\n"
- " Matrix3x3 m;\n"
- " m.m_row[0] = (float4)(0.f);\n"
- " m.m_row[1] = (float4)(0.f);\n"
- " m.m_row[2] = (float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "Matrix3x3 mtIdentity()\n"
- "{\n"
- " Matrix3x3 m;\n"
- " m.m_row[0] = (float4)(1,0,0,0);\n"
- " m.m_row[1] = (float4)(0,1,0,0);\n"
- " m.m_row[2] = (float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "Matrix3x3 mtTranspose(Matrix3x3 m)\n"
- "{\n"
- " Matrix3x3 out;\n"
- " out.m_row[0] = (float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Matrix3x3 mtMul(Matrix3x3 a, Matrix3x3 b)\n"
- "{\n"
- " Matrix3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " Matrix3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul1(Matrix3x3 a, float4 b)\n"
- "{\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a.m_row[0], b );\n"
- " ans.y = dot3F4( a.m_row[1], b );\n"
- " ans.z = dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "float4 mtMul3(float4 a, Matrix3x3 b)\n"
- "{\n"
- " float4 colx = make_float4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " float4 coly = make_float4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " float4 colz = make_float4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " float4 ans;\n"
- " ans.x = dot3F4( a, colx );\n"
- " ans.y = dot3F4( a, coly );\n"
- " ans.z = dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "///////////////////////////////////////\n"
- "// Quaternion\n"
- "///////////////////////////////////////\n"
- "typedef float4 Quaternion;\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b);\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in);\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec);\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q);\n"
- "__inline\n"
- "Quaternion qtMul(Quaternion a, Quaternion b)\n"
- "{\n"
- " Quaternion ans;\n"
- " ans = cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtNormalize(Quaternion in)\n"
- "{\n"
- " return fastNormalize4(in);\n"
- "// in /= length( in );\n"
- "// return in;\n"
- "}\n"
- "__inline\n"
- "float4 qtRotate(Quaternion q, float4 vec)\n"
- "{\n"
- " Quaternion qInv = qtInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = qtMul(qtMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "Quaternion qtInvert(Quaternion q)\n"
- "{\n"
- " return (Quaternion)(-q.xyz, q.w);\n"
- "}\n"
- "__inline\n"
- "float4 qtInvRotate(const Quaternion q, float4 vec)\n"
- "{\n"
- " return qtRotate( qtInvert( q ), vec );\n"
- "}\n"
- "#define WG_SIZE 64\n"
- "typedef struct\n"
- "{\n"
- " float4 m_pos;\n"
- " Quaternion m_quat;\n"
- " float4 m_linVel;\n"
- " float4 m_angVel;\n"
- " u32 m_shapeIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "} Body;\n"
- "typedef struct\n"
- "{\n"
- " Matrix3x3 m_invInertia;\n"
- " Matrix3x3 m_initInvInertia;\n"
- "} Shape;\n"
- "typedef struct\n"
- "{\n"
- " float4 m_linear;\n"
- " float4 m_worldPos[4];\n"
- " float4 m_center; \n"
- " float m_jacCoeffInv[4];\n"
- " float m_b[4];\n"
- " float m_appliedRambdaDt[4];\n"
- " float m_fJacCoeffInv[2]; \n"
- " float m_fAppliedRambdaDt[2]; \n"
- " u32 m_bodyA;\n"
- " u32 m_bodyB;\n"
- " int m_batchIdx;\n"
- " u32 m_paddings;\n"
- "} Constraint4;\n"
- "__kernel void CountBodiesKernel(__global struct b3Contact4Data* manifoldPtr, __global unsigned int* bodyCount, __global int2* contactConstraintOffsets, int numContactManifolds, int fixedBodyIndex)\n"
- "{\n"
- " int i = GET_GLOBAL_IDX;\n"
- " \n"
- " if( i < numContactManifolds)\n"
- " {\n"
- " int pa = manifoldPtr[i].m_bodyAPtrAndSignBit;\n"
- " bool isFixedA = (pa <0) || (pa == fixedBodyIndex);\n"
- " int bodyIndexA = abs(pa);\n"
- " if (!isFixedA)\n"
- " {\n"
- " AtomInc1(bodyCount[bodyIndexA],contactConstraintOffsets[i].x);\n"
- " }\n"
- " barrier(CLK_GLOBAL_MEM_FENCE);\n"
- " int pb = manifoldPtr[i].m_bodyBPtrAndSignBit;\n"
- " bool isFixedB = (pb <0) || (pb == fixedBodyIndex);\n"
- " int bodyIndexB = abs(pb);\n"
- " if (!isFixedB)\n"
- " {\n"
- " AtomInc1(bodyCount[bodyIndexB],contactConstraintOffsets[i].y);\n"
- " } \n"
- " }\n"
- "}\n"
- "__kernel void ClearVelocitiesKernel(__global float4* linearVelocities,__global float4* angularVelocities, int numSplitBodies)\n"
- "{\n"
- " int i = GET_GLOBAL_IDX;\n"
- " \n"
- " if( i < numSplitBodies)\n"
- " {\n"
- " linearVelocities[i] = make_float4(0);\n"
- " angularVelocities[i] = make_float4(0);\n"
- " }\n"
- "}\n"
- "__kernel void AverageVelocitiesKernel(__global Body* gBodies,__global int* offsetSplitBodies,__global const unsigned int* bodyCount,\n"
- "__global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities, int numBodies)\n"
- "{\n"
- " int i = GET_GLOBAL_IDX;\n"
- " if (i<numBodies)\n"
- " {\n"
- " if (gBodies[i].m_invMass)\n"
- " {\n"
- " int bodyOffset = offsetSplitBodies[i];\n"
- " int count = bodyCount[i];\n"
- " float factor = 1.f/((float)count);\n"
- " float4 averageLinVel = make_float4(0.f);\n"
- " float4 averageAngVel = make_float4(0.f);\n"
- " \n"
- " for (int j=0;j<count;j++)\n"
- " {\n"
- " averageLinVel += deltaLinearVelocities[bodyOffset+j]*factor;\n"
- " averageAngVel += deltaAngularVelocities[bodyOffset+j]*factor;\n"
- " }\n"
- " \n"
- " for (int j=0;j<count;j++)\n"
- " {\n"
- " deltaLinearVelocities[bodyOffset+j] = averageLinVel;\n"
- " deltaAngularVelocities[bodyOffset+j] = averageAngVel;\n"
- " }\n"
- " \n"
- " }//bodies[i].m_invMass\n"
- " }//i<numBodies\n"
- "}\n"
- "void setLinearAndAngular( float4 n, float4 r0, float4 r1, float4* linear, float4* angular0, float4* angular1)\n"
- "{\n"
- " *linear = make_float4(n.xyz,0.f);\n"
- " *angular0 = cross3(r0, n);\n"
- " *angular1 = -cross3(r1, n);\n"
- "}\n"
- "float calcRelVel( float4 l0, float4 l1, float4 a0, float4 a1, float4 linVel0, float4 angVel0, float4 linVel1, float4 angVel1 )\n"
- "{\n"
- " return dot3F4(l0, linVel0) + dot3F4(a0, angVel0) + dot3F4(l1, linVel1) + dot3F4(a1, angVel1);\n"
- "}\n"
- "float calcJacCoeff(const float4 linear0, const float4 linear1, const float4 angular0, const float4 angular1,\n"
- " float invMass0, const Matrix3x3* invInertia0, float invMass1, const Matrix3x3* invInertia1, float countA, float countB)\n"
- "{\n"
- " // linear0,1 are normlized\n"
- " float jmj0 = invMass0;//dot3F4(linear0, linear0)*invMass0;\n"
- " float jmj1 = dot3F4(mtMul3(angular0,*invInertia0), angular0);\n"
- " float jmj2 = invMass1;//dot3F4(linear1, linear1)*invMass1;\n"
- " float jmj3 = dot3F4(mtMul3(angular1,*invInertia1), angular1);\n"
- " return -1.f/((jmj0+jmj1)*countA+(jmj2+jmj3)*countB);\n"
- "}\n"
- "void btPlaneSpace1 (float4 n, float4* p, float4* q);\n"
- " void btPlaneSpace1 (float4 n, float4* p, float4* q)\n"
- "{\n"
- " if (fabs(n.z) > 0.70710678f) {\n"
- " // choose p in y-z plane\n"
- " float a = n.y*n.y + n.z*n.z;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = 0;\n"
- " p[0].y = -n.z*k;\n"
- " p[0].z = n.y*k;\n"
- " // set q = n x p\n"
- " q[0].x = a*k;\n"
- " q[0].y = -n.x*p[0].z;\n"
- " q[0].z = n.x*p[0].y;\n"
- " }\n"
- " else {\n"
- " // choose p in x-y plane\n"
- " float a = n.x*n.x + n.y*n.y;\n"
- " float k = 1.f/sqrt(a);\n"
- " p[0].x = -n.y*k;\n"
- " p[0].y = n.x*k;\n"
- " p[0].z = 0;\n"
- " // set q = n x p\n"
- " q[0].x = -n.z*p[0].y;\n"
- " q[0].y = n.z*p[0].x;\n"
- " q[0].z = a*k;\n"
- " }\n"
- "}\n"
- "void solveContact(__global Constraint4* cs,\n"
- " float4 posA, float4* linVelA, float4* angVelA, float invMassA, Matrix3x3 invInertiaA,\n"
- " float4 posB, float4* linVelB, float4* angVelB, float invMassB, Matrix3x3 invInertiaB,\n"
- " float4* dLinVelA, float4* dAngVelA, float4* dLinVelB, float4* dAngVelB)\n"
- "{\n"
- " float minRambdaDt = 0;\n"
- " float maxRambdaDt = FLT_MAX;\n"
- " for(int ic=0; ic<4; ic++)\n"
- " {\n"
- " if( cs->m_jacCoeffInv[ic] == 0.f ) continue;\n"
- " float4 angular0, angular1, linear;\n"
- " float4 r0 = cs->m_worldPos[ic] - posA;\n"
- " float4 r1 = cs->m_worldPos[ic] - posB;\n"
- " setLinearAndAngular( cs->m_linear, r0, r1, &linear, &angular0, &angular1 );\n"
- " \n"
- " float rambdaDt = calcRelVel( cs->m_linear, -cs->m_linear, angular0, angular1, \n"
- " *linVelA+*dLinVelA, *angVelA+*dAngVelA, *linVelB+*dLinVelB, *angVelB+*dAngVelB ) + cs->m_b[ic];\n"
- " rambdaDt *= cs->m_jacCoeffInv[ic];\n"
- " \n"
- " {\n"
- " float prevSum = cs->m_appliedRambdaDt[ic];\n"
- " float updated = prevSum;\n"
- " updated += rambdaDt;\n"
- " updated = max2( updated, minRambdaDt );\n"
- " updated = min2( updated, maxRambdaDt );\n"
- " rambdaDt = updated - prevSum;\n"
- " cs->m_appliedRambdaDt[ic] = updated;\n"
- " }\n"
- " \n"
- " float4 linImp0 = invMassA*linear*rambdaDt;\n"
- " float4 linImp1 = invMassB*(-linear)*rambdaDt;\n"
- " float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;\n"
- " float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;\n"
- " \n"
- " if (invMassA)\n"
- " {\n"
- " *dLinVelA += linImp0;\n"
- " *dAngVelA += angImp0;\n"
- " }\n"
- " if (invMassB)\n"
- " {\n"
- " *dLinVelB += linImp1;\n"
- " *dAngVelB += angImp1;\n"
- " }\n"
- " }\n"
- "}\n"
- "// solveContactConstraint( gBodies, gShapes, &gConstraints[i] ,contactConstraintOffsets,offsetSplitBodies, deltaLinearVelocities, deltaAngularVelocities);\n"
- "void solveContactConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs, \n"
- "__global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,\n"
- "__global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities)\n"
- "{\n"
- " //float frictionCoeff = ldsCs[0].m_linear.w;\n"
- " int aIdx = ldsCs[0].m_bodyA;\n"
- " int bIdx = ldsCs[0].m_bodyB;\n"
- " float4 posA = gBodies[aIdx].m_pos;\n"
- " float4 linVelA = gBodies[aIdx].m_linVel;\n"
- " float4 angVelA = gBodies[aIdx].m_angVel;\n"
- " float invMassA = gBodies[aIdx].m_invMass;\n"
- " Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;\n"
- " float4 posB = gBodies[bIdx].m_pos;\n"
- " float4 linVelB = gBodies[bIdx].m_linVel;\n"
- " float4 angVelB = gBodies[bIdx].m_angVel;\n"
- " float invMassB = gBodies[bIdx].m_invMass;\n"
- " Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;\n"
- " \n"
- " float4 dLinVelA = make_float4(0,0,0,0);\n"
- " float4 dAngVelA = make_float4(0,0,0,0);\n"
- " float4 dLinVelB = make_float4(0,0,0,0);\n"
- " float4 dAngVelB = make_float4(0,0,0,0);\n"
- " \n"
- " int bodyOffsetA = offsetSplitBodies[aIdx];\n"
- " int constraintOffsetA = contactConstraintOffsets[0].x;\n"
- " int splitIndexA = bodyOffsetA+constraintOffsetA;\n"
- " \n"
- " if (invMassA)\n"
- " {\n"
- " dLinVelA = deltaLinearVelocities[splitIndexA];\n"
- " dAngVelA = deltaAngularVelocities[splitIndexA];\n"
- " }\n"
- " int bodyOffsetB = offsetSplitBodies[bIdx];\n"
- " int constraintOffsetB = contactConstraintOffsets[0].y;\n"
- " int splitIndexB= bodyOffsetB+constraintOffsetB;\n"
- " if (invMassB)\n"
- " {\n"
- " dLinVelB = deltaLinearVelocities[splitIndexB];\n"
- " dAngVelB = deltaAngularVelocities[splitIndexB];\n"
- " }\n"
- " solveContact( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,\n"
- " posB, &linVelB, &angVelB, invMassB, invInertiaB ,&dLinVelA, &dAngVelA, &dLinVelB, &dAngVelB);\n"
- " if (invMassA)\n"
- " {\n"
- " deltaLinearVelocities[splitIndexA] = dLinVelA;\n"
- " deltaAngularVelocities[splitIndexA] = dAngVelA;\n"
- " } \n"
- " if (invMassB)\n"
- " {\n"
- " deltaLinearVelocities[splitIndexB] = dLinVelB;\n"
- " deltaAngularVelocities[splitIndexB] = dAngVelB;\n"
- " }\n"
- "}\n"
- "__kernel void SolveContactJacobiKernel(__global Constraint4* gConstraints, __global Body* gBodies, __global Shape* gShapes ,\n"
- "__global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,__global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities,\n"
- "float deltaTime, float positionDrift, float positionConstraintCoeff, int fixedBodyIndex, int numManifolds\n"
- ")\n"
- "{\n"
- " int i = GET_GLOBAL_IDX;\n"
- " if (i<numManifolds)\n"
- " {\n"
- " solveContactConstraint( gBodies, gShapes, &gConstraints[i] ,&contactConstraintOffsets[i],offsetSplitBodies, deltaLinearVelocities, deltaAngularVelocities);\n"
- " }\n"
- "}\n"
- "void solveFrictionConstraint(__global Body* gBodies, __global Shape* gShapes, __global Constraint4* ldsCs,\n"
- " __global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,\n"
- " __global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities)\n"
- "{\n"
- " float frictionCoeff = 0.7f;//ldsCs[0].m_linear.w;\n"
- " int aIdx = ldsCs[0].m_bodyA;\n"
- " int bIdx = ldsCs[0].m_bodyB;\n"
- " float4 posA = gBodies[aIdx].m_pos;\n"
- " float4 linVelA = gBodies[aIdx].m_linVel;\n"
- " float4 angVelA = gBodies[aIdx].m_angVel;\n"
- " float invMassA = gBodies[aIdx].m_invMass;\n"
- " Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;\n"
- " float4 posB = gBodies[bIdx].m_pos;\n"
- " float4 linVelB = gBodies[bIdx].m_linVel;\n"
- " float4 angVelB = gBodies[bIdx].m_angVel;\n"
- " float invMassB = gBodies[bIdx].m_invMass;\n"
- " Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;\n"
- " \n"
- " float4 dLinVelA = make_float4(0,0,0,0);\n"
- " float4 dAngVelA = make_float4(0,0,0,0);\n"
- " float4 dLinVelB = make_float4(0,0,0,0);\n"
- " float4 dAngVelB = make_float4(0,0,0,0);\n"
- " \n"
- " int bodyOffsetA = offsetSplitBodies[aIdx];\n"
- " int constraintOffsetA = contactConstraintOffsets[0].x;\n"
- " int splitIndexA = bodyOffsetA+constraintOffsetA;\n"
- " \n"
- " if (invMassA)\n"
- " {\n"
- " dLinVelA = deltaLinearVelocities[splitIndexA];\n"
- " dAngVelA = deltaAngularVelocities[splitIndexA];\n"
- " }\n"
- " int bodyOffsetB = offsetSplitBodies[bIdx];\n"
- " int constraintOffsetB = contactConstraintOffsets[0].y;\n"
- " int splitIndexB= bodyOffsetB+constraintOffsetB;\n"
- " if (invMassB)\n"
- " {\n"
- " dLinVelB = deltaLinearVelocities[splitIndexB];\n"
- " dAngVelB = deltaAngularVelocities[splitIndexB];\n"
- " }\n"
- " {\n"
- " float maxRambdaDt[4] = {FLT_MAX,FLT_MAX,FLT_MAX,FLT_MAX};\n"
- " float minRambdaDt[4] = {0.f,0.f,0.f,0.f};\n"
- " float sum = 0;\n"
- " for(int j=0; j<4; j++)\n"
- " {\n"
- " sum +=ldsCs[0].m_appliedRambdaDt[j];\n"
- " }\n"
- " frictionCoeff = 0.7f;\n"
- " for(int j=0; j<4; j++)\n"
- " {\n"
- " maxRambdaDt[j] = frictionCoeff*sum;\n"
- " minRambdaDt[j] = -maxRambdaDt[j];\n"
- " }\n"
- " \n"
- "// solveFriction( ldsCs, posA, &linVelA, &angVelA, invMassA, invInertiaA,\n"
- "// posB, &linVelB, &angVelB, invMassB, invInertiaB, maxRambdaDt, minRambdaDt );\n"
- " \n"
- " \n"
- " {\n"
- " \n"
- " __global Constraint4* cs = ldsCs;\n"
- " \n"
- " if( cs->m_fJacCoeffInv[0] == 0 && cs->m_fJacCoeffInv[0] == 0 ) return;\n"
- " const float4 center = cs->m_center;\n"
- " \n"
- " float4 n = -cs->m_linear;\n"
- " \n"
- " float4 tangent[2];\n"
- " btPlaneSpace1(n,&tangent[0],&tangent[1]);\n"
- " float4 angular0, angular1, linear;\n"
- " float4 r0 = center - posA;\n"
- " float4 r1 = center - posB;\n"
- " for(int i=0; i<2; i++)\n"
- " {\n"
- " setLinearAndAngular( tangent[i], r0, r1, &linear, &angular0, &angular1 );\n"
- " float rambdaDt = calcRelVel(linear, -linear, angular0, angular1,\n"
- " linVelA+dLinVelA, angVelA+dAngVelA, linVelB+dLinVelB, angVelB+dAngVelB );\n"
- " rambdaDt *= cs->m_fJacCoeffInv[i];\n"
- " \n"
- " {\n"
- " float prevSum = cs->m_fAppliedRambdaDt[i];\n"
- " float updated = prevSum;\n"
- " updated += rambdaDt;\n"
- " updated = max2( updated, minRambdaDt[i] );\n"
- " updated = min2( updated, maxRambdaDt[i] );\n"
- " rambdaDt = updated - prevSum;\n"
- " cs->m_fAppliedRambdaDt[i] = updated;\n"
- " }\n"
- " \n"
- " float4 linImp0 = invMassA*linear*rambdaDt;\n"
- " float4 linImp1 = invMassB*(-linear)*rambdaDt;\n"
- " float4 angImp0 = mtMul1(invInertiaA, angular0)*rambdaDt;\n"
- " float4 angImp1 = mtMul1(invInertiaB, angular1)*rambdaDt;\n"
- " \n"
- " dLinVelA += linImp0;\n"
- " dAngVelA += angImp0;\n"
- " dLinVelB += linImp1;\n"
- " dAngVelB += angImp1;\n"
- " }\n"
- " { // angular damping for point constraint\n"
- " float4 ab = normalize3( posB - posA );\n"
- " float4 ac = normalize3( center - posA );\n"
- " if( dot3F4( ab, ac ) > 0.95f || (invMassA == 0.f || invMassB == 0.f))\n"
- " {\n"
- " float angNA = dot3F4( n, angVelA );\n"
- " float angNB = dot3F4( n, angVelB );\n"
- " \n"
- " dAngVelA -= (angNA*0.1f)*n;\n"
- " dAngVelB -= (angNB*0.1f)*n;\n"
- " }\n"
- " }\n"
- " }\n"
- " \n"
- " \n"
- " }\n"
- " if (invMassA)\n"
- " {\n"
- " deltaLinearVelocities[splitIndexA] = dLinVelA;\n"
- " deltaAngularVelocities[splitIndexA] = dAngVelA;\n"
- " } \n"
- " if (invMassB)\n"
- " {\n"
- " deltaLinearVelocities[splitIndexB] = dLinVelB;\n"
- " deltaAngularVelocities[splitIndexB] = dAngVelB;\n"
- " }\n"
- " \n"
- "}\n"
- "__kernel void SolveFrictionJacobiKernel(__global Constraint4* gConstraints, __global Body* gBodies, __global Shape* gShapes ,\n"
- " __global int2* contactConstraintOffsets,__global unsigned int* offsetSplitBodies,\n"
- " __global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities,\n"
- " float deltaTime, float positionDrift, float positionConstraintCoeff, int fixedBodyIndex, int numManifolds\n"
- ")\n"
- "{\n"
- " int i = GET_GLOBAL_IDX;\n"
- " if (i<numManifolds)\n"
- " {\n"
- " solveFrictionConstraint( gBodies, gShapes, &gConstraints[i] ,&contactConstraintOffsets[i],offsetSplitBodies, deltaLinearVelocities, deltaAngularVelocities);\n"
- " }\n"
- "}\n"
- "__kernel void UpdateBodyVelocitiesKernel(__global Body* gBodies,__global int* offsetSplitBodies,__global const unsigned int* bodyCount,\n"
- " __global float4* deltaLinearVelocities, __global float4* deltaAngularVelocities, int numBodies)\n"
- "{\n"
- " int i = GET_GLOBAL_IDX;\n"
- " if (i<numBodies)\n"
- " {\n"
- " if (gBodies[i].m_invMass)\n"
- " {\n"
- " int bodyOffset = offsetSplitBodies[i];\n"
- " int count = bodyCount[i];\n"
- " if (count)\n"
- " {\n"
- " gBodies[i].m_linVel += deltaLinearVelocities[bodyOffset];\n"
- " gBodies[i].m_angVel += deltaAngularVelocities[bodyOffset];\n"
- " }\n"
- " }\n"
- " }\n"
- "}\n"
- "void setConstraint4( const float4 posA, const float4 linVelA, const float4 angVelA, float invMassA, const Matrix3x3 invInertiaA,\n"
- " const float4 posB, const float4 linVelB, const float4 angVelB, float invMassB, const Matrix3x3 invInertiaB, \n"
- " __global struct b3Contact4Data* src, float dt, float positionDrift, float positionConstraintCoeff,float countA, float countB,\n"
- " Constraint4* dstC )\n"
- "{\n"
- " dstC->m_bodyA = abs(src->m_bodyAPtrAndSignBit);\n"
- " dstC->m_bodyB = abs(src->m_bodyBPtrAndSignBit);\n"
- " float dtInv = 1.f/dt;\n"
- " for(int ic=0; ic<4; ic++)\n"
- " {\n"
- " dstC->m_appliedRambdaDt[ic] = 0.f;\n"
- " }\n"
- " dstC->m_fJacCoeffInv[0] = dstC->m_fJacCoeffInv[1] = 0.f;\n"
- " dstC->m_linear = src->m_worldNormalOnB;\n"
- " dstC->m_linear.w = 0.7f ;//src->getFrictionCoeff() );\n"
- " for(int ic=0; ic<4; ic++)\n"
- " {\n"
- " float4 r0 = src->m_worldPosB[ic] - posA;\n"
- " float4 r1 = src->m_worldPosB[ic] - posB;\n"
- " if( ic >= src->m_worldNormalOnB.w )//npoints\n"
- " {\n"
- " dstC->m_jacCoeffInv[ic] = 0.f;\n"
- " continue;\n"
- " }\n"
- " float relVelN;\n"
- " {\n"
- " float4 linear, angular0, angular1;\n"
- " setLinearAndAngular(src->m_worldNormalOnB, r0, r1, &linear, &angular0, &angular1);\n"
- " dstC->m_jacCoeffInv[ic] = calcJacCoeff(linear, -linear, angular0, angular1,\n"
- " invMassA, &invInertiaA, invMassB, &invInertiaB , countA, countB);\n"
- " relVelN = calcRelVel(linear, -linear, angular0, angular1,\n"
- " linVelA, angVelA, linVelB, angVelB);\n"
- " float e = 0.f;//src->getRestituitionCoeff();\n"
- " if( relVelN*relVelN < 0.004f ) e = 0.f;\n"
- " dstC->m_b[ic] = e*relVelN;\n"
- " //float penetration = src->m_worldPosB[ic].w;\n"
- " dstC->m_b[ic] += (src->m_worldPosB[ic].w + positionDrift)*positionConstraintCoeff*dtInv;\n"
- " dstC->m_appliedRambdaDt[ic] = 0.f;\n"
- " }\n"
- " }\n"
- " if( src->m_worldNormalOnB.w > 0 )//npoints\n"
- " { // prepare friction\n"
- " float4 center = make_float4(0.f);\n"
- " for(int i=0; i<src->m_worldNormalOnB.w; i++) \n"
- " center += src->m_worldPosB[i];\n"
- " center /= (float)src->m_worldNormalOnB.w;\n"
- " float4 tangent[2];\n"
- " btPlaneSpace1(-src->m_worldNormalOnB,&tangent[0],&tangent[1]);\n"
- " \n"
- " float4 r[2];\n"
- " r[0] = center - posA;\n"
- " r[1] = center - posB;\n"
- " for(int i=0; i<2; i++)\n"
- " {\n"
- " float4 linear, angular0, angular1;\n"
- " setLinearAndAngular(tangent[i], r[0], r[1], &linear, &angular0, &angular1);\n"
- " dstC->m_fJacCoeffInv[i] = calcJacCoeff(linear, -linear, angular0, angular1,\n"
- " invMassA, &invInertiaA, invMassB, &invInertiaB ,countA, countB);\n"
- " dstC->m_fAppliedRambdaDt[i] = 0.f;\n"
- " }\n"
- " dstC->m_center = center;\n"
- " }\n"
- " for(int i=0; i<4; i++)\n"
- " {\n"
- " if( i<src->m_worldNormalOnB.w )\n"
- " {\n"
- " dstC->m_worldPos[i] = src->m_worldPosB[i];\n"
- " }\n"
- " else\n"
- " {\n"
- " dstC->m_worldPos[i] = make_float4(0.f);\n"
- " }\n"
- " }\n"
- "}\n"
- "__kernel\n"
- "__attribute__((reqd_work_group_size(WG_SIZE,1,1)))\n"
- "void ContactToConstraintSplitKernel(__global const struct b3Contact4Data* gContact, __global const Body* gBodies, __global const Shape* gShapes, __global Constraint4* gConstraintOut, \n"
- "__global const unsigned int* bodyCount,\n"
- "int nContacts,\n"
- "float dt,\n"
- "float positionDrift,\n"
- "float positionConstraintCoeff\n"
- ")\n"
- "{\n"
- " int gIdx = GET_GLOBAL_IDX;\n"
- " \n"
- " if( gIdx < nContacts )\n"
- " {\n"
- " int aIdx = abs(gContact[gIdx].m_bodyAPtrAndSignBit);\n"
- " int bIdx = abs(gContact[gIdx].m_bodyBPtrAndSignBit);\n"
- " float4 posA = gBodies[aIdx].m_pos;\n"
- " float4 linVelA = gBodies[aIdx].m_linVel;\n"
- " float4 angVelA = gBodies[aIdx].m_angVel;\n"
- " float invMassA = gBodies[aIdx].m_invMass;\n"
- " Matrix3x3 invInertiaA = gShapes[aIdx].m_invInertia;\n"
- " float4 posB = gBodies[bIdx].m_pos;\n"
- " float4 linVelB = gBodies[bIdx].m_linVel;\n"
- " float4 angVelB = gBodies[bIdx].m_angVel;\n"
- " float invMassB = gBodies[bIdx].m_invMass;\n"
- " Matrix3x3 invInertiaB = gShapes[bIdx].m_invInertia;\n"
- " Constraint4 cs;\n"
- " float countA = invMassA != 0.f ? (float)bodyCount[aIdx] : 1;\n"
- " float countB = invMassB != 0.f ? (float)bodyCount[bIdx] : 1;\n"
- " setConstraint4( posA, linVelA, angVelA, invMassA, invInertiaA, posB, linVelB, angVelB, invMassB, invInertiaB,\n"
- " &gContact[gIdx], dt, positionDrift, positionConstraintCoeff,countA,countB,\n"
- " &cs );\n"
- " \n"
- " cs.m_batchIdx = gContact[gIdx].m_batchIdx;\n"
- " gConstraintOut[gIdx] = cs;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.cl b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.cl
deleted file mode 100644
index ba8ba735d0..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.cl
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
-#include "Bullet3Collision/NarrowPhaseCollision/shared/b3UpdateAabbs.h"
-
-
-__kernel void initializeGpuAabbsFull( const int numNodes, __global b3RigidBodyData_t* gBodies,__global b3Collidable_t* collidables, __global b3Aabb_t* plocalShapeAABB, __global b3Aabb_t* pAABB)
-{
- int nodeID = get_global_id(0);
- if( nodeID < numNodes )
- {
- b3ComputeWorldAabb(nodeID, gBodies, collidables, plocalShapeAABB,pAABB);
- }
-}
-
-__kernel void clearOverlappingPairsKernel( __global int4* pairs, int numPairs)
-{
- int pairId = get_global_id(0);
- if( pairId< numPairs )
- {
- pairs[pairId].z = 0xffffffff;
- }
-} \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.h b/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.h
deleted file mode 100644
index bb949b2027..0000000000
--- a/thirdparty/bullet/Bullet3OpenCL/RigidBody/kernels/updateAabbsKernel.h
+++ /dev/null
@@ -1,482 +0,0 @@
-//this file is autogenerated using stringify.bat (premake --stringify) in the build folder of this project
-static const char* updateAabbsKernelCL =
- "#ifndef B3_UPDATE_AABBS_H\n"
- "#define B3_UPDATE_AABBS_H\n"
- "#ifndef B3_AABB_H\n"
- "#define B3_AABB_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#define B3_FLOAT4_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#define B3_PLATFORM_DEFINITIONS_H\n"
- "struct MyTest\n"
- "{\n"
- " int bla;\n"
- "};\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "//keep B3_LARGE_FLOAT*B3_LARGE_FLOAT < FLT_MAX\n"
- "#define B3_LARGE_FLOAT 1e18f\n"
- "#define B3_INFINITY 1e18f\n"
- "#define b3Assert(a)\n"
- "#define b3ConstArray(a) __global const a*\n"
- "#define b3AtomicInc atomic_inc\n"
- "#define b3AtomicAdd atomic_add\n"
- "#define b3Fabs fabs\n"
- "#define b3Sqrt native_sqrt\n"
- "#define b3Sin native_sin\n"
- "#define b3Cos native_cos\n"
- "#define B3_STATIC\n"
- "#endif\n"
- "#endif\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Float4;\n"
- " #define b3Float4ConstArg const b3Float4\n"
- " #define b3MakeFloat4 (float4)\n"
- " float b3Dot3F4(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return dot(a1, b1);\n"
- " }\n"
- " b3Float4 b3Cross3(b3Float4ConstArg v0,b3Float4ConstArg v1)\n"
- " {\n"
- " float4 a1 = b3MakeFloat4(v0.xyz,0.f);\n"
- " float4 b1 = b3MakeFloat4(v1.xyz,0.f);\n"
- " return cross(a1, b1);\n"
- " }\n"
- " #define b3MinFloat4 min\n"
- " #define b3MaxFloat4 max\n"
- " #define b3Normalized(a) normalize(a)\n"
- "#endif \n"
- " \n"
- "inline bool b3IsAlmostZero(b3Float4ConstArg v)\n"
- "{\n"
- " if(b3Fabs(v.x)>1e-6 || b3Fabs(v.y)>1e-6 || b3Fabs(v.z)>1e-6) \n"
- " return false;\n"
- " return true;\n"
- "}\n"
- "inline int b3MaxDot( b3Float4ConstArg vec, __global const b3Float4* vecArray, int vecLen, float* dotOut )\n"
- "{\n"
- " float maxDot = -B3_INFINITY;\n"
- " int i = 0;\n"
- " int ptIndex = -1;\n"
- " for( i = 0; i < vecLen; i++ )\n"
- " {\n"
- " float dot = b3Dot3F4(vecArray[i],vec);\n"
- " \n"
- " if( dot > maxDot )\n"
- " {\n"
- " maxDot = dot;\n"
- " ptIndex = i;\n"
- " }\n"
- " }\n"
- " b3Assert(ptIndex>=0);\n"
- " if (ptIndex<0)\n"
- " {\n"
- " ptIndex = 0;\n"
- " }\n"
- " *dotOut = maxDot;\n"
- " return ptIndex;\n"
- "}\n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#define B3_MAT3x3_H\n"
- "#ifndef B3_QUAT_H\n"
- "#define B3_QUAT_H\n"
- "#ifndef B3_PLATFORM_DEFINITIONS_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- " typedef float4 b3Quat;\n"
- " #define b3QuatConstArg const b3Quat\n"
- " \n"
- " \n"
- "inline float4 b3FastNormalize4(float4 v)\n"
- "{\n"
- " v = (float4)(v.xyz,0.f);\n"
- " return fast_normalize(v);\n"
- "}\n"
- " \n"
- "inline b3Quat b3QuatMul(b3Quat a, b3Quat b);\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in);\n"
- "inline b3Quat b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec);\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q);\n"
- "inline b3Quat b3QuatMul(b3QuatConstArg a, b3QuatConstArg b)\n"
- "{\n"
- " b3Quat ans;\n"
- " ans = b3Cross3( a, b );\n"
- " ans += a.w*b+b.w*a;\n"
- "// ans.w = a.w*b.w - (a.x*b.x+a.y*b.y+a.z*b.z);\n"
- " ans.w = a.w*b.w - b3Dot3F4(a, b);\n"
- " return ans;\n"
- "}\n"
- "inline b3Quat b3QuatNormalized(b3QuatConstArg in)\n"
- "{\n"
- " b3Quat q;\n"
- " q=in;\n"
- " //return b3FastNormalize4(in);\n"
- " float len = native_sqrt(dot(q, q));\n"
- " if(len > 0.f)\n"
- " {\n"
- " q *= 1.f / len;\n"
- " }\n"
- " else\n"
- " {\n"
- " q.x = q.y = q.z = 0.f;\n"
- " q.w = 1.f;\n"
- " }\n"
- " return q;\n"
- "}\n"
- "inline float4 b3QuatRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " b3Quat qInv = b3QuatInvert( q );\n"
- " float4 vcpy = vec;\n"
- " vcpy.w = 0.f;\n"
- " float4 out = b3QuatMul(b3QuatMul(q,vcpy),qInv);\n"
- " return out;\n"
- "}\n"
- "inline b3Quat b3QuatInverse(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline b3Quat b3QuatInvert(b3QuatConstArg q)\n"
- "{\n"
- " return (b3Quat)(-q.xyz, q.w);\n"
- "}\n"
- "inline float4 b3QuatInvRotate(b3QuatConstArg q, b3QuatConstArg vec)\n"
- "{\n"
- " return b3QuatRotate( b3QuatInvert( q ), vec );\n"
- "}\n"
- "inline b3Float4 b3TransformPoint(b3Float4ConstArg point, b3Float4ConstArg translation, b3QuatConstArg orientation)\n"
- "{\n"
- " return b3QuatRotate( orientation, point ) + (translation);\n"
- "}\n"
- " \n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "typedef struct\n"
- "{\n"
- " b3Float4 m_row[3];\n"
- "}b3Mat3x3;\n"
- "#define b3Mat3x3ConstArg const b3Mat3x3\n"
- "#define b3GetRow(m,row) (m.m_row[row])\n"
- "inline b3Mat3x3 b3QuatGetRotationMatrix(b3Quat quat)\n"
- "{\n"
- " b3Float4 quat2 = (b3Float4)(quat.x*quat.x, quat.y*quat.y, quat.z*quat.z, 0.f);\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0].x=1-2*quat2.y-2*quat2.z;\n"
- " out.m_row[0].y=2*quat.x*quat.y-2*quat.w*quat.z;\n"
- " out.m_row[0].z=2*quat.x*quat.z+2*quat.w*quat.y;\n"
- " out.m_row[0].w = 0.f;\n"
- " out.m_row[1].x=2*quat.x*quat.y+2*quat.w*quat.z;\n"
- " out.m_row[1].y=1-2*quat2.x-2*quat2.z;\n"
- " out.m_row[1].z=2*quat.y*quat.z-2*quat.w*quat.x;\n"
- " out.m_row[1].w = 0.f;\n"
- " out.m_row[2].x=2*quat.x*quat.z-2*quat.w*quat.y;\n"
- " out.m_row[2].y=2*quat.y*quat.z+2*quat.w*quat.x;\n"
- " out.m_row[2].z=1-2*quat2.x-2*quat2.y;\n"
- " out.m_row[2].w = 0.f;\n"
- " return out;\n"
- "}\n"
- "inline b3Mat3x3 b3AbsoluteMat3x3(b3Mat3x3ConstArg matIn)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = fabs(matIn.m_row[0]);\n"
- " out.m_row[1] = fabs(matIn.m_row[1]);\n"
- " out.m_row[2] = fabs(matIn.m_row[2]);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtZero();\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity();\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m);\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b);\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b);\n"
- "__inline\n"
- "b3Mat3x3 mtZero()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(0.f);\n"
- " m.m_row[1] = (b3Float4)(0.f);\n"
- " m.m_row[2] = (b3Float4)(0.f);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtIdentity()\n"
- "{\n"
- " b3Mat3x3 m;\n"
- " m.m_row[0] = (b3Float4)(1,0,0,0);\n"
- " m.m_row[1] = (b3Float4)(0,1,0,0);\n"
- " m.m_row[2] = (b3Float4)(0,0,1,0);\n"
- " return m;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtTranspose(b3Mat3x3 m)\n"
- "{\n"
- " b3Mat3x3 out;\n"
- " out.m_row[0] = (b3Float4)(m.m_row[0].x, m.m_row[1].x, m.m_row[2].x, 0.f);\n"
- " out.m_row[1] = (b3Float4)(m.m_row[0].y, m.m_row[1].y, m.m_row[2].y, 0.f);\n"
- " out.m_row[2] = (b3Float4)(m.m_row[0].z, m.m_row[1].z, m.m_row[2].z, 0.f);\n"
- " return out;\n"
- "}\n"
- "__inline\n"
- "b3Mat3x3 mtMul(b3Mat3x3 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Mat3x3 transB;\n"
- " transB = mtTranspose( b );\n"
- " b3Mat3x3 ans;\n"
- " // why this doesn't run when 0ing in the for{}\n"
- " a.m_row[0].w = 0.f;\n"
- " a.m_row[1].w = 0.f;\n"
- " a.m_row[2].w = 0.f;\n"
- " for(int i=0; i<3; i++)\n"
- " {\n"
- "// a.m_row[i].w = 0.f;\n"
- " ans.m_row[i].x = b3Dot3F4(a.m_row[i],transB.m_row[0]);\n"
- " ans.m_row[i].y = b3Dot3F4(a.m_row[i],transB.m_row[1]);\n"
- " ans.m_row[i].z = b3Dot3F4(a.m_row[i],transB.m_row[2]);\n"
- " ans.m_row[i].w = 0.f;\n"
- " }\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul1(b3Mat3x3 a, b3Float4 b)\n"
- "{\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a.m_row[0], b );\n"
- " ans.y = b3Dot3F4( a.m_row[1], b );\n"
- " ans.z = b3Dot3F4( a.m_row[2], b );\n"
- " ans.w = 0.f;\n"
- " return ans;\n"
- "}\n"
- "__inline\n"
- "b3Float4 mtMul3(b3Float4 a, b3Mat3x3 b)\n"
- "{\n"
- " b3Float4 colx = b3MakeFloat4(b.m_row[0].x, b.m_row[1].x, b.m_row[2].x, 0);\n"
- " b3Float4 coly = b3MakeFloat4(b.m_row[0].y, b.m_row[1].y, b.m_row[2].y, 0);\n"
- " b3Float4 colz = b3MakeFloat4(b.m_row[0].z, b.m_row[1].z, b.m_row[2].z, 0);\n"
- " b3Float4 ans;\n"
- " ans.x = b3Dot3F4( a, colx );\n"
- " ans.y = b3Dot3F4( a, coly );\n"
- " ans.z = b3Dot3F4( a, colz );\n"
- " return ans;\n"
- "}\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3Aabb b3Aabb_t;\n"
- "struct b3Aabb\n"
- "{\n"
- " union\n"
- " {\n"
- " float m_min[4];\n"
- " b3Float4 m_minVec;\n"
- " int m_minIndices[4];\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_max[4];\n"
- " b3Float4 m_maxVec;\n"
- " int m_signedMaxIndices[4];\n"
- " };\n"
- "};\n"
- "inline void b3TransformAabb2(b3Float4ConstArg localAabbMin,b3Float4ConstArg localAabbMax, float margin,\n"
- " b3Float4ConstArg pos,\n"
- " b3QuatConstArg orn,\n"
- " b3Float4* aabbMinOut,b3Float4* aabbMaxOut)\n"
- "{\n"
- " b3Float4 localHalfExtents = 0.5f*(localAabbMax-localAabbMin);\n"
- " localHalfExtents+=b3MakeFloat4(margin,margin,margin,0.f);\n"
- " b3Float4 localCenter = 0.5f*(localAabbMax+localAabbMin);\n"
- " b3Mat3x3 m;\n"
- " m = b3QuatGetRotationMatrix(orn);\n"
- " b3Mat3x3 abs_b = b3AbsoluteMat3x3(m);\n"
- " b3Float4 center = b3TransformPoint(localCenter,pos,orn);\n"
- " \n"
- " b3Float4 extent = b3MakeFloat4(b3Dot3F4(localHalfExtents,b3GetRow(abs_b,0)),\n"
- " b3Dot3F4(localHalfExtents,b3GetRow(abs_b,1)),\n"
- " b3Dot3F4(localHalfExtents,b3GetRow(abs_b,2)),\n"
- " 0.f);\n"
- " *aabbMinOut = center-extent;\n"
- " *aabbMaxOut = center+extent;\n"
- "}\n"
- "/// conservative test for overlap between two aabbs\n"
- "inline bool b3TestAabbAgainstAabb(b3Float4ConstArg aabbMin1,b3Float4ConstArg aabbMax1,\n"
- " b3Float4ConstArg aabbMin2, b3Float4ConstArg aabbMax2)\n"
- "{\n"
- " bool overlap = true;\n"
- " overlap = (aabbMin1.x > aabbMax2.x || aabbMax1.x < aabbMin2.x) ? false : overlap;\n"
- " overlap = (aabbMin1.z > aabbMax2.z || aabbMax1.z < aabbMin2.z) ? false : overlap;\n"
- " overlap = (aabbMin1.y > aabbMax2.y || aabbMax1.y < aabbMin2.y) ? false : overlap;\n"
- " return overlap;\n"
- "}\n"
- "#endif //B3_AABB_H\n"
- "#ifndef B3_COLLIDABLE_H\n"
- "#define B3_COLLIDABLE_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "enum b3ShapeTypes\n"
- "{\n"
- " SHAPE_HEIGHT_FIELD=1,\n"
- " SHAPE_CONVEX_HULL=3,\n"
- " SHAPE_PLANE=4,\n"
- " SHAPE_CONCAVE_TRIMESH=5,\n"
- " SHAPE_COMPOUND_OF_CONVEX_HULLS=6,\n"
- " SHAPE_SPHERE=7,\n"
- " MAX_NUM_SHAPE_TYPES,\n"
- "};\n"
- "typedef struct b3Collidable b3Collidable_t;\n"
- "struct b3Collidable\n"
- "{\n"
- " union {\n"
- " int m_numChildShapes;\n"
- " int m_bvhIndex;\n"
- " };\n"
- " union\n"
- " {\n"
- " float m_radius;\n"
- " int m_compoundBvhIndex;\n"
- " };\n"
- " int m_shapeType;\n"
- " union\n"
- " {\n"
- " int m_shapeIndex;\n"
- " float m_height;\n"
- " };\n"
- "};\n"
- "typedef struct b3GpuChildShape b3GpuChildShape_t;\n"
- "struct b3GpuChildShape\n"
- "{\n"
- " b3Float4 m_childPosition;\n"
- " b3Quat m_childOrientation;\n"
- " union\n"
- " {\n"
- " int m_shapeIndex;//used for SHAPE_COMPOUND_OF_CONVEX_HULLS\n"
- " int m_capsuleAxis;\n"
- " };\n"
- " union \n"
- " {\n"
- " float m_radius;//used for childshape of SHAPE_COMPOUND_OF_SPHERES or SHAPE_COMPOUND_OF_CAPSULES\n"
- " int m_numChildShapes;//used for compound shape\n"
- " };\n"
- " union \n"
- " {\n"
- " float m_height;//used for childshape of SHAPE_COMPOUND_OF_CAPSULES\n"
- " int m_collidableShapeIndex;\n"
- " };\n"
- " int m_shapeType;\n"
- "};\n"
- "struct b3CompoundOverlappingPair\n"
- "{\n"
- " int m_bodyIndexA;\n"
- " int m_bodyIndexB;\n"
- "// int m_pairType;\n"
- " int m_childShapeIndexA;\n"
- " int m_childShapeIndexB;\n"
- "};\n"
- "#endif //B3_COLLIDABLE_H\n"
- "#ifndef B3_RIGIDBODY_DATA_H\n"
- "#define B3_RIGIDBODY_DATA_H\n"
- "#ifndef B3_FLOAT4_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_FLOAT4_H\n"
- "#ifndef B3_QUAT_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif \n"
- "#endif //B3_QUAT_H\n"
- "#ifndef B3_MAT3x3_H\n"
- "#ifdef __cplusplus\n"
- "#else\n"
- "#endif\n"
- "#endif //B3_MAT3x3_H\n"
- "typedef struct b3RigidBodyData b3RigidBodyData_t;\n"
- "struct b3RigidBodyData\n"
- "{\n"
- " b3Float4 m_pos;\n"
- " b3Quat m_quat;\n"
- " b3Float4 m_linVel;\n"
- " b3Float4 m_angVel;\n"
- " int m_collidableIdx;\n"
- " float m_invMass;\n"
- " float m_restituitionCoeff;\n"
- " float m_frictionCoeff;\n"
- "};\n"
- "typedef struct b3InertiaData b3InertiaData_t;\n"
- "struct b3InertiaData\n"
- "{\n"
- " b3Mat3x3 m_invInertiaWorld;\n"
- " b3Mat3x3 m_initInvInertia;\n"
- "};\n"
- "#endif //B3_RIGIDBODY_DATA_H\n"
- " \n"
- "void b3ComputeWorldAabb( int bodyId, __global const b3RigidBodyData_t* bodies, __global const b3Collidable_t* collidables, __global const b3Aabb_t* localShapeAABB, __global b3Aabb_t* worldAabbs)\n"
- "{\n"
- " __global const b3RigidBodyData_t* body = &bodies[bodyId];\n"
- " b3Float4 position = body->m_pos;\n"
- " b3Quat orientation = body->m_quat;\n"
- " \n"
- " int collidableIndex = body->m_collidableIdx;\n"
- " int shapeIndex = collidables[collidableIndex].m_shapeIndex;\n"
- " \n"
- " if (shapeIndex>=0)\n"
- " {\n"
- " \n"
- " b3Aabb_t localAabb = localShapeAABB[collidableIndex];\n"
- " b3Aabb_t worldAabb;\n"
- " \n"
- " b3Float4 aabbAMinOut,aabbAMaxOut; \n"
- " float margin = 0.f;\n"
- " b3TransformAabb2(localAabb.m_minVec,localAabb.m_maxVec,margin,position,orientation,&aabbAMinOut,&aabbAMaxOut);\n"
- " \n"
- " worldAabb.m_minVec =aabbAMinOut;\n"
- " worldAabb.m_minIndices[3] = bodyId;\n"
- " worldAabb.m_maxVec = aabbAMaxOut;\n"
- " worldAabb.m_signedMaxIndices[3] = body[bodyId].m_invMass==0.f? 0 : 1;\n"
- " worldAabbs[bodyId] = worldAabb;\n"
- " }\n"
- "}\n"
- "#endif //B3_UPDATE_AABBS_H\n"
- "__kernel void initializeGpuAabbsFull( const int numNodes, __global b3RigidBodyData_t* gBodies,__global b3Collidable_t* collidables, __global b3Aabb_t* plocalShapeAABB, __global b3Aabb_t* pAABB)\n"
- "{\n"
- " int nodeID = get_global_id(0);\n"
- " if( nodeID < numNodes )\n"
- " {\n"
- " b3ComputeWorldAabb(nodeID, gBodies, collidables, plocalShapeAABB,pAABB);\n"
- " }\n"
- "}\n"
- "__kernel void clearOverlappingPairsKernel( __global int4* pairs, int numPairs)\n"
- "{\n"
- " int pairId = get_global_id(0);\n"
- " if( pairId< numPairs )\n"
- " {\n"
- " pairs[pairId].z = 0xffffffff;\n"
- " }\n"
- "}\n";
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h
deleted file mode 100644
index eaa27dfe8f..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/autogenerated/bullet2.h
+++ /dev/null
@@ -1,987 +0,0 @@
-/* Copyright (C) 2011 Erwin Coumans & Charlie C
-*
-* This software is provided 'as-is', without any express or implied
-* warranty. In no event will the authors be held liable for any damages
-* arising from the use of this software.
-*
-* Permission is granted to anyone to use this software for any purpose,
-* including commercial applications, and to alter it and redistribute it
-* freely, subject to the following restrictions:
-*
-* 1. The origin of this software must not be misrepresented; you must not
-* claim that you wrote the original software. If you use this software
-* in a product, an acknowledgment in the product documentation would be
-* appreciated but is not required.
-* 2. Altered source versions must be plainly marked as such, and must not be
-* misrepresented as being the original software.
-* 3. This notice may not be removed or altered from any source distribution.
-*/
-// Auto generated from Bullet/Extras/HeaderGenerator/bulletGenerate.py
-#ifndef __BULLET2_H__
-#define __BULLET2_H__
-namespace Bullet3SerializeBullet2
-{
-// put an empty struct in the case
-typedef struct bInvalidHandle
-{
- int unused;
-} bInvalidHandle;
-
-class PointerArray;
-class b3PhysicsSystem;
-class ListBase;
-class b3Vector3FloatData;
-class b3Vector3DoubleData;
-class b3Matrix3x3FloatData;
-class b3Matrix3x3DoubleData;
-class b3TransformFloatData;
-class b3TransformDoubleData;
-class b3BvhSubtreeInfoData;
-class b3OptimizedBvhNodeFloatData;
-class b3OptimizedBvhNodeDoubleData;
-class b3QuantizedBvhNodeData;
-class b3QuantizedBvhFloatData;
-class b3QuantizedBvhDoubleData;
-class b3CollisionShapeData;
-class b3StaticPlaneShapeData;
-class b3ConvexInternalShapeData;
-class b3PositionAndRadius;
-class b3MultiSphereShapeData;
-class b3IntIndexData;
-class b3ShortIntIndexData;
-class b3ShortIntIndexTripletData;
-class b3CharIndexTripletData;
-class b3MeshPartData;
-class b3StridingMeshInterfaceData;
-class b3TriangleMeshShapeData;
-class b3ScaledTriangleMeshShapeData;
-class b3CompoundShapeChildData;
-class b3CompoundShapeData;
-class b3CylinderShapeData;
-class b3CapsuleShapeData;
-class b3TriangleInfoData;
-class b3TriangleInfoMapData;
-class b3GImpactMeshShapeData;
-class b3ConvexHullShapeData;
-class b3CollisionObjectDoubleData;
-class b3CollisionObjectFloatData;
-class b3DynamicsWorldDoubleData;
-class b3DynamicsWorldFloatData;
-class b3RigidBodyFloatData;
-class b3RigidBodyDoubleData;
-class b3ConstraintInfo1;
-class b3TypedConstraintData;
-class b3Point2PointConstraintFloatData;
-class b3Point2PointConstraintDoubleData;
-class b3HingeConstraintDoubleData;
-class b3HingeConstraintFloatData;
-class b3ConeTwistConstraintData;
-class b3Generic6DofConstraintData;
-class b3Generic6DofSpringConstraintData;
-class b3SliderConstraintData;
-class b3ContactSolverInfoDoubleData;
-class b3ContactSolverInfoFloatData;
-class SoftBodyMaterialData;
-class SoftBodyNodeData;
-class SoftBodyLinkData;
-class SoftBodyFaceData;
-class SoftBodyTetraData;
-class SoftRigidAnchorData;
-class SoftBodyConfigData;
-class SoftBodyPoseData;
-class SoftBodyClusterData;
-class b3SoftBodyJointData;
-class b3SoftBodyFloatData;
-// -------------------------------------------------- //
-class PointerArray
-{
-public:
- int m_size;
- int m_capacity;
- void *m_data;
-};
-
-// -------------------------------------------------- //
-class b3PhysicsSystem
-{
-public:
- PointerArray m_collisionShapes;
- PointerArray m_collisionObjects;
- PointerArray m_constraints;
-};
-
-// -------------------------------------------------- //
-class ListBase
-{
-public:
- void *first;
- void *last;
-};
-
-// -------------------------------------------------- //
-class b3Vector3FloatData
-{
-public:
- float m_floats[4];
-};
-
-// -------------------------------------------------- //
-class b3Vector3DoubleData
-{
-public:
- double m_floats[4];
-};
-
-// -------------------------------------------------- //
-class b3Matrix3x3FloatData
-{
-public:
- b3Vector3FloatData m_el[3];
-};
-
-// -------------------------------------------------- //
-class b3Matrix3x3DoubleData
-{
-public:
- b3Vector3DoubleData m_el[3];
-};
-
-// -------------------------------------------------- //
-class b3TransformFloatData
-{
-public:
- b3Matrix3x3FloatData m_basis;
- b3Vector3FloatData m_origin;
-};
-
-// -------------------------------------------------- //
-class b3TransformDoubleData
-{
-public:
- b3Matrix3x3DoubleData m_basis;
- b3Vector3DoubleData m_origin;
-};
-
-// -------------------------------------------------- //
-class b3BvhSubtreeInfoData
-{
-public:
- int m_rootNodeIndex;
- int m_subtreeSize;
- short m_quantizedAabbMin[3];
- short m_quantizedAabbMax[3];
-};
-
-// -------------------------------------------------- //
-class b3OptimizedBvhNodeFloatData
-{
-public:
- b3Vector3FloatData m_aabbMinOrg;
- b3Vector3FloatData m_aabbMaxOrg;
- int m_escapeIndex;
- int m_subPart;
- int m_triangleIndex;
- char m_pad[4];
-};
-
-// -------------------------------------------------- //
-class b3OptimizedBvhNodeDoubleData
-{
-public:
- b3Vector3DoubleData m_aabbMinOrg;
- b3Vector3DoubleData m_aabbMaxOrg;
- int m_escapeIndex;
- int m_subPart;
- int m_triangleIndex;
- char m_pad[4];
-};
-
-// -------------------------------------------------- //
-class b3QuantizedBvhNodeData
-{
-public:
- short m_quantizedAabbMin[3];
- short m_quantizedAabbMax[3];
- int m_escapeIndexOrTriangleIndex;
-};
-
-// -------------------------------------------------- //
-class b3QuantizedBvhFloatData
-{
-public:
- b3Vector3FloatData m_bvhAabbMin;
- b3Vector3FloatData m_bvhAabbMax;
- b3Vector3FloatData m_bvhQuantization;
- int m_curNodeIndex;
- int m_useQuantization;
- int m_numContiguousLeafNodes;
- int m_numQuantizedContiguousNodes;
- b3OptimizedBvhNodeFloatData *m_contiguousNodesPtr;
- b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
- b3BvhSubtreeInfoData *m_subTreeInfoPtr;
- int m_traversalMode;
- int m_numSubtreeHeaders;
-};
-
-// -------------------------------------------------- //
-class b3QuantizedBvhDoubleData
-{
-public:
- b3Vector3DoubleData m_bvhAabbMin;
- b3Vector3DoubleData m_bvhAabbMax;
- b3Vector3DoubleData m_bvhQuantization;
- int m_curNodeIndex;
- int m_useQuantization;
- int m_numContiguousLeafNodes;
- int m_numQuantizedContiguousNodes;
- b3OptimizedBvhNodeDoubleData *m_contiguousNodesPtr;
- b3QuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
- int m_traversalMode;
- int m_numSubtreeHeaders;
- b3BvhSubtreeInfoData *m_subTreeInfoPtr;
-};
-
-// -------------------------------------------------- //
-class b3CollisionShapeData
-{
-public:
- char *m_name;
- int m_shapeType;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3StaticPlaneShapeData
-{
-public:
- b3CollisionShapeData m_collisionShapeData;
- b3Vector3FloatData m_localScaling;
- b3Vector3FloatData m_planeNormal;
- float m_planeConstant;
- char m_pad[4];
-};
-
-// -------------------------------------------------- //
-class b3ConvexInternalShapeData
-{
-public:
- b3CollisionShapeData m_collisionShapeData;
- b3Vector3FloatData m_localScaling;
- b3Vector3FloatData m_implicitShapeDimensions;
- float m_collisionMargin;
- int m_padding;
-};
-
-// -------------------------------------------------- //
-class b3PositionAndRadius
-{
-public:
- b3Vector3FloatData m_pos;
- float m_radius;
-};
-
-// -------------------------------------------------- //
-class b3MultiSphereShapeData
-{
-public:
- b3ConvexInternalShapeData m_convexInternalShapeData;
- b3PositionAndRadius *m_localPositionArrayPtr;
- int m_localPositionArraySize;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3IntIndexData
-{
-public:
- int m_value;
-};
-
-// -------------------------------------------------- //
-class b3ShortIntIndexData
-{
-public:
- short m_value;
- char m_pad[2];
-};
-
-// -------------------------------------------------- //
-class b3ShortIntIndexTripletData
-{
-public:
- short m_values[3];
- char m_pad[2];
-};
-
-// -------------------------------------------------- //
-class b3CharIndexTripletData
-{
-public:
- char m_values[3];
- char m_pad;
-};
-
-// -------------------------------------------------- //
-class b3MeshPartData
-{
-public:
- b3Vector3FloatData *m_vertices3f;
- b3Vector3DoubleData *m_vertices3d;
- b3IntIndexData *m_indices32;
- b3ShortIntIndexTripletData *m_3indices16;
- b3CharIndexTripletData *m_3indices8;
- b3ShortIntIndexData *m_indices16;
- int m_numTriangles;
- int m_numVertices;
-};
-
-// -------------------------------------------------- //
-class b3StridingMeshInterfaceData
-{
-public:
- b3MeshPartData *m_meshPartsPtr;
- b3Vector3FloatData m_scaling;
- int m_numMeshParts;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3TriangleMeshShapeData
-{
-public:
- b3CollisionShapeData m_collisionShapeData;
- b3StridingMeshInterfaceData m_meshInterface;
- b3QuantizedBvhFloatData *m_quantizedFloatBvh;
- b3QuantizedBvhDoubleData *m_quantizedDoubleBvh;
- b3TriangleInfoMapData *m_triangleInfoMap;
- float m_collisionMargin;
- char m_pad3[4];
-};
-
-// -------------------------------------------------- //
-class b3ScaledTriangleMeshShapeData
-{
-public:
- b3TriangleMeshShapeData m_trimeshShapeData;
- b3Vector3FloatData m_localScaling;
-};
-
-// -------------------------------------------------- //
-class b3CompoundShapeChildData
-{
-public:
- b3TransformFloatData m_transform;
- b3CollisionShapeData *m_childShape;
- int m_childShapeType;
- float m_childMargin;
-};
-
-// -------------------------------------------------- //
-class b3CompoundShapeData
-{
-public:
- b3CollisionShapeData m_collisionShapeData;
- b3CompoundShapeChildData *m_childShapePtr;
- int m_numChildShapes;
- float m_collisionMargin;
-};
-
-// -------------------------------------------------- //
-class b3CylinderShapeData
-{
-public:
- b3ConvexInternalShapeData m_convexInternalShapeData;
- int m_upAxis;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3CapsuleShapeData
-{
-public:
- b3ConvexInternalShapeData m_convexInternalShapeData;
- int m_upAxis;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3TriangleInfoData
-{
-public:
- int m_flags;
- float m_edgeV0V1Angle;
- float m_edgeV1V2Angle;
- float m_edgeV2V0Angle;
-};
-
-// -------------------------------------------------- //
-class b3TriangleInfoMapData
-{
-public:
- int *m_hashTablePtr;
- int *m_nextPtr;
- b3TriangleInfoData *m_valueArrayPtr;
- int *m_keyArrayPtr;
- float m_convexEpsilon;
- float m_planarEpsilon;
- float m_equalVertexThreshold;
- float m_edgeDistanceThreshold;
- float m_zeroAreaThreshold;
- int m_nextSize;
- int m_hashTableSize;
- int m_numValues;
- int m_numKeys;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3GImpactMeshShapeData
-{
-public:
- b3CollisionShapeData m_collisionShapeData;
- b3StridingMeshInterfaceData m_meshInterface;
- b3Vector3FloatData m_localScaling;
- float m_collisionMargin;
- int m_gimpactSubType;
-};
-
-// -------------------------------------------------- //
-class b3ConvexHullShapeData
-{
-public:
- b3ConvexInternalShapeData m_convexInternalShapeData;
- b3Vector3FloatData *m_unscaledPointsFloatPtr;
- b3Vector3DoubleData *m_unscaledPointsDoublePtr;
- int m_numUnscaledPoints;
- char m_padding3[4];
-};
-
-// -------------------------------------------------- //
-class b3CollisionObjectDoubleData
-{
-public:
- void *m_broadphaseHandle;
- void *m_collisionShape;
- b3CollisionShapeData *m_rootCollisionShape;
- char *m_name;
- b3TransformDoubleData m_worldTransform;
- b3TransformDoubleData m_interpolationWorldTransform;
- b3Vector3DoubleData m_interpolationLinearVelocity;
- b3Vector3DoubleData m_interpolationAngularVelocity;
- b3Vector3DoubleData m_anisotropicFriction;
- double m_contactProcessingThreshold;
- double m_deactivationTime;
- double m_friction;
- double m_rollingFriction;
- double m_restitution;
- double m_hitFraction;
- double m_ccdSweptSphereRadius;
- double m_ccdMotionThreshold;
- int m_hasAnisotropicFriction;
- int m_collisionFlags;
- int m_islandTag1;
- int m_companionId;
- int m_activationState1;
- int m_internalType;
- int m_checkCollideWith;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3CollisionObjectFloatData
-{
-public:
- void *m_broadphaseHandle;
- void *m_collisionShape;
- b3CollisionShapeData *m_rootCollisionShape;
- char *m_name;
- b3TransformFloatData m_worldTransform;
- b3TransformFloatData m_interpolationWorldTransform;
- b3Vector3FloatData m_interpolationLinearVelocity;
- b3Vector3FloatData m_interpolationAngularVelocity;
- b3Vector3FloatData m_anisotropicFriction;
- float m_contactProcessingThreshold;
- float m_deactivationTime;
- float m_friction;
- float m_rollingFriction;
- float m_restitution;
- float m_hitFraction;
- float m_ccdSweptSphereRadius;
- float m_ccdMotionThreshold;
- int m_hasAnisotropicFriction;
- int m_collisionFlags;
- int m_islandTag1;
- int m_companionId;
- int m_activationState1;
- int m_internalType;
- int m_checkCollideWith;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3RigidBodyFloatData
-{
-public:
- b3CollisionObjectFloatData m_collisionObjectData;
- b3Matrix3x3FloatData m_invInertiaTensorWorld;
- b3Vector3FloatData m_linearVelocity;
- b3Vector3FloatData m_angularVelocity;
- b3Vector3FloatData m_angularFactor;
- b3Vector3FloatData m_linearFactor;
- b3Vector3FloatData m_gravity;
- b3Vector3FloatData m_gravity_acceleration;
- b3Vector3FloatData m_invInertiaLocal;
- b3Vector3FloatData m_totalForce;
- b3Vector3FloatData m_totalTorque;
- float m_inverseMass;
- float m_linearDamping;
- float m_angularDamping;
- float m_additionalDampingFactor;
- float m_additionalLinearDampingThresholdSqr;
- float m_additionalAngularDampingThresholdSqr;
- float m_additionalAngularDampingFactor;
- float m_linearSleepingThreshold;
- float m_angularSleepingThreshold;
- int m_additionalDamping;
-};
-
-// -------------------------------------------------- //
-class b3RigidBodyDoubleData
-{
-public:
- b3CollisionObjectDoubleData m_collisionObjectData;
- b3Matrix3x3DoubleData m_invInertiaTensorWorld;
- b3Vector3DoubleData m_linearVelocity;
- b3Vector3DoubleData m_angularVelocity;
- b3Vector3DoubleData m_angularFactor;
- b3Vector3DoubleData m_linearFactor;
- b3Vector3DoubleData m_gravity;
- b3Vector3DoubleData m_gravity_acceleration;
- b3Vector3DoubleData m_invInertiaLocal;
- b3Vector3DoubleData m_totalForce;
- b3Vector3DoubleData m_totalTorque;
- double m_inverseMass;
- double m_linearDamping;
- double m_angularDamping;
- double m_additionalDampingFactor;
- double m_additionalLinearDampingThresholdSqr;
- double m_additionalAngularDampingThresholdSqr;
- double m_additionalAngularDampingFactor;
- double m_linearSleepingThreshold;
- double m_angularSleepingThreshold;
- int m_additionalDamping;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3ConstraintInfo1
-{
-public:
- int m_numConstraintRows;
- int nub;
-};
-
-// -------------------------------------------------- //
-class b3TypedConstraintData
-{
-public:
- bInvalidHandle *m_rbA;
- bInvalidHandle *m_rbB;
- char *m_name;
- int m_objectType;
- int m_userConstraintType;
- int m_userConstraintId;
- int m_needsFeedback;
- float m_appliedImpulse;
- float m_dbgDrawSize;
- int m_disableCollisionsBetweenLinkedBodies;
- int m_overrideNumSolverIterations;
- float m_breakingImpulseThreshold;
- int m_isEnabled;
-};
-
-// -------------------------------------------------- //
-class b3Point2PointConstraintFloatData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3Vector3FloatData m_pivotInA;
- b3Vector3FloatData m_pivotInB;
-};
-
-// -------------------------------------------------- //
-class b3Point2PointConstraintDoubleData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3Vector3DoubleData m_pivotInA;
- b3Vector3DoubleData m_pivotInB;
-};
-
-// -------------------------------------------------- //
-class b3HingeConstraintDoubleData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3TransformDoubleData m_rbAFrame;
- b3TransformDoubleData m_rbBFrame;
- int m_useReferenceFrameA;
- int m_angularOnly;
- int m_enableAngularMotor;
- float m_motorTargetVelocity;
- float m_maxMotorImpulse;
- float m_lowerLimit;
- float m_upperLimit;
- float m_limitSoftness;
- float m_biasFactor;
- float m_relaxationFactor;
-};
-
-// -------------------------------------------------- //
-class b3HingeConstraintFloatData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3TransformFloatData m_rbAFrame;
- b3TransformFloatData m_rbBFrame;
- int m_useReferenceFrameA;
- int m_angularOnly;
- int m_enableAngularMotor;
- float m_motorTargetVelocity;
- float m_maxMotorImpulse;
- float m_lowerLimit;
- float m_upperLimit;
- float m_limitSoftness;
- float m_biasFactor;
- float m_relaxationFactor;
-};
-
-// -------------------------------------------------- //
-class b3ConeTwistConstraintData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3TransformFloatData m_rbAFrame;
- b3TransformFloatData m_rbBFrame;
- float m_swingSpan1;
- float m_swingSpan2;
- float m_twistSpan;
- float m_limitSoftness;
- float m_biasFactor;
- float m_relaxationFactor;
- float m_damping;
- char m_pad[4];
-};
-
-// -------------------------------------------------- //
-class b3Generic6DofConstraintData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3TransformFloatData m_rbAFrame;
- b3TransformFloatData m_rbBFrame;
- b3Vector3FloatData m_linearUpperLimit;
- b3Vector3FloatData m_linearLowerLimit;
- b3Vector3FloatData m_angularUpperLimit;
- b3Vector3FloatData m_angularLowerLimit;
- int m_useLinearReferenceFrameA;
- int m_useOffsetForConstraintFrame;
-};
-
-// -------------------------------------------------- //
-class b3Generic6DofSpringConstraintData
-{
-public:
- b3Generic6DofConstraintData m_6dofData;
- int m_springEnabled[6];
- float m_equilibriumPoint[6];
- float m_springStiffness[6];
- float m_springDamping[6];
-};
-
-// -------------------------------------------------- //
-class b3SliderConstraintData
-{
-public:
- b3TypedConstraintData m_typeConstraintData;
- b3TransformFloatData m_rbAFrame;
- b3TransformFloatData m_rbBFrame;
- float m_linearUpperLimit;
- float m_linearLowerLimit;
- float m_angularUpperLimit;
- float m_angularLowerLimit;
- int m_useLinearReferenceFrameA;
- int m_useOffsetForConstraintFrame;
-};
-
-// -------------------------------------------------- //
-class b3ContactSolverInfoDoubleData
-{
-public:
- double m_tau;
- double m_damping;
- double m_friction;
- double m_timeStep;
- double m_restitution;
- double m_maxErrorReduction;
- double m_sor;
- double m_erp;
- double m_erp2;
- double m_globalCfm;
- double m_splitImpulsePenetrationThreshold;
- double m_splitImpulseTurnErp;
- double m_linearSlop;
- double m_warmstartingFactor;
- double m_maxGyroscopicForce;
- double m_singleAxisRollingFrictionThreshold;
- int m_numIterations;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
- int m_splitImpulse;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3ContactSolverInfoFloatData
-{
-public:
- float m_tau;
- float m_damping;
- float m_friction;
- float m_timeStep;
- float m_restitution;
- float m_maxErrorReduction;
- float m_sor;
- float m_erp;
- float m_erp2;
- float m_globalCfm;
- float m_splitImpulsePenetrationThreshold;
- float m_splitImpulseTurnErp;
- float m_linearSlop;
- float m_warmstartingFactor;
- float m_maxGyroscopicForce;
- float m_singleAxisRollingFrictionThreshold;
- int m_numIterations;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
- int m_splitImpulse;
- char m_padding[4];
-};
-
-// -------------------------------------------------- //
-class b3DynamicsWorldDoubleData
-{
-public:
- b3ContactSolverInfoDoubleData m_solverInfo;
- b3Vector3DoubleData m_gravity;
-};
-
-// -------------------------------------------------- //
-class b3DynamicsWorldFloatData
-{
-public:
- b3ContactSolverInfoFloatData m_solverInfo;
- b3Vector3FloatData m_gravity;
-};
-
-// -------------------------------------------------- //
-class SoftBodyMaterialData
-{
-public:
- float m_linearStiffness;
- float m_angularStiffness;
- float m_volumeStiffness;
- int m_flags;
-};
-
-// -------------------------------------------------- //
-class SoftBodyNodeData
-{
-public:
- SoftBodyMaterialData *m_material;
- b3Vector3FloatData m_position;
- b3Vector3FloatData m_previousPosition;
- b3Vector3FloatData m_velocity;
- b3Vector3FloatData m_accumulatedForce;
- b3Vector3FloatData m_normal;
- float m_inverseMass;
- float m_area;
- int m_attach;
- int m_pad;
-};
-
-// -------------------------------------------------- //
-class SoftBodyLinkData
-{
-public:
- SoftBodyMaterialData *m_material;
- int m_nodeIndices[2];
- float m_restLength;
- int m_bbending;
-};
-
-// -------------------------------------------------- //
-class SoftBodyFaceData
-{
-public:
- b3Vector3FloatData m_normal;
- SoftBodyMaterialData *m_material;
- int m_nodeIndices[3];
- float m_restArea;
-};
-
-// -------------------------------------------------- //
-class SoftBodyTetraData
-{
-public:
- b3Vector3FloatData m_c0[4];
- SoftBodyMaterialData *m_material;
- int m_nodeIndices[4];
- float m_restVolume;
- float m_c1;
- float m_c2;
- int m_pad;
-};
-
-// -------------------------------------------------- //
-class SoftRigidAnchorData
-{
-public:
- b3Matrix3x3FloatData m_c0;
- b3Vector3FloatData m_c1;
- b3Vector3FloatData m_localFrame;
- bInvalidHandle *m_rigidBody;
- int m_nodeIndex;
- float m_c2;
-};
-
-// -------------------------------------------------- //
-class SoftBodyConfigData
-{
-public:
- int m_aeroModel;
- float m_baumgarte;
- float m_damping;
- float m_drag;
- float m_lift;
- float m_pressure;
- float m_volume;
- float m_dynamicFriction;
- float m_poseMatch;
- float m_rigidContactHardness;
- float m_kineticContactHardness;
- float m_softContactHardness;
- float m_anchorHardness;
- float m_softRigidClusterHardness;
- float m_softKineticClusterHardness;
- float m_softSoftClusterHardness;
- float m_softRigidClusterImpulseSplit;
- float m_softKineticClusterImpulseSplit;
- float m_softSoftClusterImpulseSplit;
- float m_maxVolume;
- float m_timeScale;
- int m_velocityIterations;
- int m_positionIterations;
- int m_driftIterations;
- int m_clusterIterations;
- int m_collisionFlags;
-};
-
-// -------------------------------------------------- //
-class SoftBodyPoseData
-{
-public:
- b3Matrix3x3FloatData m_rot;
- b3Matrix3x3FloatData m_scale;
- b3Matrix3x3FloatData m_aqq;
- b3Vector3FloatData m_com;
- b3Vector3FloatData *m_positions;
- float *m_weights;
- int m_numPositions;
- int m_numWeigts;
- int m_bvolume;
- int m_bframe;
- float m_restVolume;
- int m_pad;
-};
-
-// -------------------------------------------------- //
-class SoftBodyClusterData
-{
-public:
- b3TransformFloatData m_framexform;
- b3Matrix3x3FloatData m_locii;
- b3Matrix3x3FloatData m_invwi;
- b3Vector3FloatData m_com;
- b3Vector3FloatData m_vimpulses[2];
- b3Vector3FloatData m_dimpulses[2];
- b3Vector3FloatData m_lv;
- b3Vector3FloatData m_av;
- b3Vector3FloatData *m_framerefs;
- int *m_nodeIndices;
- float *m_masses;
- int m_numFrameRefs;
- int m_numNodes;
- int m_numMasses;
- float m_idmass;
- float m_imass;
- int m_nvimpulses;
- int m_ndimpulses;
- float m_ndamping;
- float m_ldamping;
- float m_adamping;
- float m_matching;
- float m_maxSelfCollisionImpulse;
- float m_selfCollisionImpulseFactor;
- int m_containsAnchor;
- int m_collide;
- int m_clusterIndex;
-};
-
-// -------------------------------------------------- //
-class b3SoftBodyJointData
-{
-public:
- void *m_bodyA;
- void *m_bodyB;
- b3Vector3FloatData m_refs[2];
- float m_cfm;
- float m_erp;
- float m_split;
- int m_delete;
- b3Vector3FloatData m_relPosition[2];
- int m_bodyAtype;
- int m_bodyBtype;
- int m_jointType;
- int m_pad;
-};
-
-// -------------------------------------------------- //
-class b3SoftBodyFloatData
-{
-public:
- b3CollisionObjectFloatData m_collisionObjectData;
- SoftBodyPoseData *m_pose;
- SoftBodyMaterialData **m_materials;
- SoftBodyNodeData *m_nodes;
- SoftBodyLinkData *m_links;
- SoftBodyFaceData *m_faces;
- SoftBodyTetraData *m_tetrahedra;
- SoftRigidAnchorData *m_anchors;
- SoftBodyClusterData *m_clusters;
- b3SoftBodyJointData *m_joints;
- int m_numMaterials;
- int m_numNodes;
- int m_numLinks;
- int m_numFaces;
- int m_numTetrahedra;
- int m_numAnchors;
- int m_numClusters;
- int m_numJoints;
- SoftBodyConfigData m_config;
-};
-
-} // namespace Bullet3SerializeBullet2
-#endif //__BULLET2_H__ \ No newline at end of file
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp
deleted file mode 100644
index d2a7163670..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.cpp
+++ /dev/null
@@ -1,400 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2010 Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3BulletFile.h"
-#include "b3Defines.h"
-#include "b3DNA.h"
-
-#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__)
-#include <memory.h>
-#endif
-#include <string.h>
-
-// 32 && 64 bit versions
-#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-#ifdef _WIN64
-extern char b3s_bulletDNAstr64[];
-extern int b3s_bulletDNAlen64;
-#else
-extern char b3s_bulletDNAstr[];
-extern int b3s_bulletDNAlen;
-#endif //_WIN64
-#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-
-extern char b3s_bulletDNAstr64[];
-extern int b3s_bulletDNAlen64;
-extern char b3s_bulletDNAstr[];
-extern int b3s_bulletDNAlen;
-
-#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-
-using namespace bParse;
-
-b3BulletFile::b3BulletFile()
- : bFile("", "BULLET ")
-{
- mMemoryDNA = new bDNA(); //this memory gets released in the bFile::~bFile destructor,@todo not consistent with the rule 'who allocates it, has to deallocate it"
-
- m_DnaCopy = 0;
-
-#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-#ifdef _WIN64
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64);
- mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen64);
-#else //_WIN64
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen);
- mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen);
-#endif //_WIN64
-#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64);
- mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen64);
- }
- else
- {
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen);
- mMemoryDNA->init(m_DnaCopy, b3s_bulletDNAlen);
- }
-#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-}
-
-b3BulletFile::b3BulletFile(const char* fileName)
- : bFile(fileName, "BULLET ")
-{
- m_DnaCopy = 0;
-}
-
-b3BulletFile::b3BulletFile(char* memoryBuffer, int len)
- : bFile(memoryBuffer, len, "BULLET ")
-{
- m_DnaCopy = 0;
-}
-
-b3BulletFile::~b3BulletFile()
-{
- if (m_DnaCopy)
- b3AlignedFree(m_DnaCopy);
-
- while (m_dataBlocks.size())
- {
- char* dataBlock = m_dataBlocks[m_dataBlocks.size() - 1];
- delete[] dataBlock;
- m_dataBlocks.pop_back();
- }
-}
-
-// ----------------------------------------------------- //
-void b3BulletFile::parseData()
-{
- // printf ("Building datablocks");
- // printf ("Chunk size = %d",CHUNK_HEADER_LEN);
- // printf ("File chunk size = %d",ChunkUtils::getOffset(mFlags));
-
- const bool brokenDNA = (mFlags & FD_BROKEN_DNA) != 0;
-
- //const bool swap = (mFlags&FD_ENDIAN_SWAP)!=0;
-
- mDataStart = 12;
-
- char* dataPtr = mFileBuffer + mDataStart;
-
- bChunkInd dataChunk;
- dataChunk.code = 0;
-
- //dataPtr += ChunkUtils::getNextBlock(&dataChunk, dataPtr, mFlags);
- int seek = getNextBlock(&dataChunk, dataPtr, mFlags);
-
- if (mFlags & FD_ENDIAN_SWAP)
- swapLen(dataPtr);
-
- //dataPtr += ChunkUtils::getOffset(mFlags);
- char* dataPtrHead = 0;
-
- while (dataChunk.code != B3_DNA1)
- {
- if (!brokenDNA || (dataChunk.code != B3_QUANTIZED_BVH_CODE))
- {
- // one behind
- if (dataChunk.code == B3_SDNA) break;
- //if (dataChunk.code == DNA1) break;
-
- // same as (BHEAD+DATA dependency)
- dataPtrHead = dataPtr + ChunkUtils::getOffset(mFlags);
- if (dataChunk.dna_nr >= 0)
- {
- char* id = readStruct(dataPtrHead, dataChunk);
-
- // lookup maps
- if (id)
- {
- m_chunkPtrPtrMap.insert(dataChunk.oldPtr, dataChunk);
- mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)id);
-
- m_chunks.push_back(dataChunk);
- // block it
- //bListBasePtr *listID = mMain->getListBasePtr(dataChunk.code);
- //if (listID)
- // listID->push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_SOFTBODY_CODE)
- {
- m_softBodies.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_RIGIDBODY_CODE)
- {
- m_rigidBodies.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_DYNAMICSWORLD_CODE)
- {
- m_dynamicsWorldInfo.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_CONSTRAINT_CODE)
- {
- m_constraints.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_QUANTIZED_BVH_CODE)
- {
- m_bvhs.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_TRIANLGE_INFO_MAP)
- {
- m_triangleInfoMaps.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_COLLISIONOBJECT_CODE)
- {
- m_collisionObjects.push_back((bStructHandle*)id);
- }
-
- if (dataChunk.code == B3_SHAPE_CODE)
- {
- m_collisionShapes.push_back((bStructHandle*)id);
- }
-
- // if (dataChunk.code == GLOB)
- // {
- // m_glob = (bStructHandle*) id;
- // }
- }
- else
- {
- //printf("unknown chunk\n");
-
- mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)dataPtrHead);
- }
- }
- else
- {
- printf("skipping B3_QUANTIZED_BVH_CODE due to broken DNA\n");
- }
-
- dataPtr += seek;
-
- seek = getNextBlock(&dataChunk, dataPtr, mFlags);
- if (mFlags & FD_ENDIAN_SWAP)
- swapLen(dataPtr);
-
- if (seek < 0)
- break;
- }
-}
-
-void b3BulletFile::addDataBlock(char* dataBlock)
-{
- m_dataBlocks.push_back(dataBlock);
-}
-
-void b3BulletFile::writeDNA(FILE* fp)
-{
- bChunkInd dataChunk;
- dataChunk.code = B3_DNA1;
- dataChunk.dna_nr = 0;
- dataChunk.nr = 1;
-#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
-#ifdef _WIN64
- dataChunk.len = b3s_bulletDNAlen64;
- dataChunk.oldPtr = b3s_bulletDNAstr64;
- fwrite(&dataChunk, sizeof(bChunkInd), 1, fp);
- fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64, 1, fp);
-#else
- b3Assert(0);
-#endif
- }
- else
- {
-#ifndef _WIN64
- dataChunk.len = b3s_bulletDNAlen;
- dataChunk.oldPtr = b3s_bulletDNAstr;
- fwrite(&dataChunk, sizeof(bChunkInd), 1, fp);
- fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen, 1, fp);
-#else //_WIN64
- b3Assert(0);
-#endif //_WIN64
- }
-#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
- dataChunk.len = b3s_bulletDNAlen64;
- dataChunk.oldPtr = b3s_bulletDNAstr64;
- fwrite(&dataChunk, sizeof(bChunkInd), 1, fp);
- fwrite(b3s_bulletDNAstr64, b3s_bulletDNAlen64, 1, fp);
- }
- else
- {
- dataChunk.len = b3s_bulletDNAlen;
- dataChunk.oldPtr = b3s_bulletDNAstr;
- fwrite(&dataChunk, sizeof(bChunkInd), 1, fp);
- fwrite(b3s_bulletDNAstr, b3s_bulletDNAlen, 1, fp);
- }
-#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-}
-
-void b3BulletFile::parse(int verboseMode)
-{
-#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
-#ifdef _WIN64
-
- if (m_DnaCopy)
- delete m_DnaCopy;
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64);
- parseInternal(verboseMode, (char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64);
-#else
- b3Assert(0);
-#endif
- }
- else
- {
-#ifndef _WIN64
-
- if (m_DnaCopy)
- delete m_DnaCopy;
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen);
- parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen);
-#else
- b3Assert(0);
-#endif
- }
-#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
- if (m_DnaCopy)
- delete m_DnaCopy;
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen64, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr64, b3s_bulletDNAlen64);
- parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen64);
- }
- else
- {
- if (m_DnaCopy)
- delete m_DnaCopy;
- m_DnaCopy = (char*)b3AlignedAlloc(b3s_bulletDNAlen, 16);
- memcpy(m_DnaCopy, b3s_bulletDNAstr, b3s_bulletDNAlen);
- parseInternal(verboseMode, m_DnaCopy, b3s_bulletDNAlen);
- }
-#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
-
- //the parsing will convert to cpu endian
- mFlags &= ~FD_ENDIAN_SWAP;
-
- int littleEndian = 1;
- littleEndian = ((char*)&littleEndian)[0];
-
- mFileBuffer[8] = littleEndian ? 'v' : 'V';
-}
-
-// experimental
-int b3BulletFile::write(const char* fileName, bool fixupPointers)
-{
- FILE* fp = fopen(fileName, "wb");
- if (fp)
- {
- char header[B3_SIZEOFBLENDERHEADER];
- memcpy(header, m_headerString, 7);
- int endian = 1;
- endian = ((char*)&endian)[0];
-
- if (endian)
- {
- header[7] = '_';
- }
- else
- {
- header[7] = '-';
- }
- if (VOID_IS_8)
- {
- header[8] = 'V';
- }
- else
- {
- header[8] = 'v';
- }
-
- header[9] = '2';
- header[10] = '7';
- header[11] = '5';
-
- fwrite(header, B3_SIZEOFBLENDERHEADER, 1, fp);
-
- writeChunks(fp, fixupPointers);
-
- writeDNA(fp);
-
- fclose(fp);
- }
- else
- {
- printf("Error: cannot open file %s for writing\n", fileName);
- return 0;
- }
- return 1;
-}
-
-void b3BulletFile::addStruct(const char* structType, void* data, int len, void* oldPtr, int code)
-{
- bParse::bChunkInd dataChunk;
- dataChunk.code = code;
- dataChunk.nr = 1;
- dataChunk.len = len;
- dataChunk.dna_nr = mMemoryDNA->getReverseType(structType);
- dataChunk.oldPtr = oldPtr;
-
- ///Perform structure size validation
- short* structInfo = mMemoryDNA->getStruct(dataChunk.dna_nr);
- int elemBytes;
- elemBytes = mMemoryDNA->getLength(structInfo[0]);
- // int elemBytes = mMemoryDNA->getElementSize(structInfo[0],structInfo[1]);
- assert(len == elemBytes);
-
- mLibPointers.insert(dataChunk.oldPtr, (bStructHandle*)data);
- m_chunks.push_back(dataChunk);
-}
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h
deleted file mode 100644
index ede1d378ae..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3BulletFile.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2010 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_BULLET_FILE_H
-#define B3_BULLET_FILE_H
-
-#include "b3File.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "b3Defines.h"
-
-#include "Bullet3Serialize/Bullet2FileLoader/b3Serializer.h"
-
-namespace bParse
-{
-// ----------------------------------------------------- //
-class b3BulletFile : public bFile
-{
-protected:
- char* m_DnaCopy;
-
-public:
- b3AlignedObjectArray<bStructHandle*> m_softBodies;
-
- b3AlignedObjectArray<bStructHandle*> m_rigidBodies;
-
- b3AlignedObjectArray<bStructHandle*> m_collisionObjects;
-
- b3AlignedObjectArray<bStructHandle*> m_collisionShapes;
-
- b3AlignedObjectArray<bStructHandle*> m_constraints;
-
- b3AlignedObjectArray<bStructHandle*> m_bvhs;
-
- b3AlignedObjectArray<bStructHandle*> m_triangleInfoMaps;
-
- b3AlignedObjectArray<bStructHandle*> m_dynamicsWorldInfo;
-
- b3AlignedObjectArray<char*> m_dataBlocks;
- b3BulletFile();
-
- b3BulletFile(const char* fileName);
-
- b3BulletFile(char* memoryBuffer, int len);
-
- virtual ~b3BulletFile();
-
- virtual void addDataBlock(char* dataBlock);
-
- // experimental
- virtual int write(const char* fileName, bool fixupPointers = false);
-
- virtual void parse(int verboseMode);
-
- virtual void parseData();
-
- virtual void writeDNA(FILE* fp);
-
- void addStruct(const char* structType, void* data, int len, void* oldPtr, int code);
-};
-}; // namespace bParse
-
-#endif //B3_BULLET_FILE_H
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp
deleted file mode 100644
index ff75ff8cc4..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.cpp
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "b3Chunk.h"
-#include "b3Defines.h"
-#include "b3File.h"
-
-#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__)
-#include <memory.h>
-#endif
-#include <string.h>
-
-using namespace bParse;
-
-// ----------------------------------------------------- //
-short ChunkUtils::swapShort(short sht)
-{
- B3_SWITCH_SHORT(sht);
- return sht;
-}
-
-// ----------------------------------------------------- //
-int ChunkUtils::swapInt(int inte)
-{
- B3_SWITCH_INT(inte);
- return inte;
-}
-
-// ----------------------------------------------------- //
-b3Long64 ChunkUtils::swapLong64(b3Long64 lng)
-{
- B3_SWITCH_LONGINT(lng);
- return lng;
-}
-
-// ----------------------------------------------------- //
-int ChunkUtils::getOffset(int flags)
-{
- // if the file is saved in a
- // different format, get the
- // file's chunk size
- int res = CHUNK_HEADER_LEN;
-
- if (VOID_IS_8)
- {
- if (flags & FD_BITS_VARIES)
- res = sizeof(bChunkPtr4);
- }
- else
- {
- if (flags & FD_BITS_VARIES)
- res = sizeof(bChunkPtr8);
- }
- return res;
-}
-
-//eof
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h
deleted file mode 100644
index c9d0f37d9e..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Chunk.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef __BCHUNK_H__
-#define __BCHUNK_H__
-
-#if defined(_WIN32) && !defined(__MINGW32__)
-#define b3Long64 __int64
-#elif defined(__MINGW32__)
-#include <stdint.h>
-#define b3Long64 int64_t
-#else
-#define b3Long64 long long
-#endif
-
-namespace bParse
-{
-// ----------------------------------------------------- //
-class bChunkPtr4
-{
-public:
- bChunkPtr4() {}
- int code;
- int len;
- union {
- int m_uniqueInt;
- };
- int dna_nr;
- int nr;
-};
-
-// ----------------------------------------------------- //
-class bChunkPtr8
-{
-public:
- bChunkPtr8() {}
- int code, len;
- union {
- b3Long64 oldPrev;
- int m_uniqueInts[2];
- };
- int dna_nr, nr;
-};
-
-// ----------------------------------------------------- //
-class bChunkInd
-{
-public:
- bChunkInd() {}
- int code, len;
- void *oldPtr;
- int dna_nr, nr;
-};
-
-// ----------------------------------------------------- //
-class ChunkUtils
-{
-public:
- // file chunk offset
- static int getOffset(int flags);
-
- // endian utils
- static short swapShort(short sht);
- static int swapInt(int inte);
- static b3Long64 swapLong64(b3Long64 lng);
-};
-
-const int CHUNK_HEADER_LEN = ((sizeof(bChunkInd)));
-const bool VOID_IS_8 = ((sizeof(void *) == 8));
-} // namespace bParse
-
-#endif //__BCHUNK_H__
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h
deleted file mode 100644
index 5884fad4d6..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Common.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef __BCOMMON_H__
-#define __BCOMMON_H__
-
-#include <assert.h>
-//#include "bLog.h"
-#include "Bullet3Common/b3AlignedObjectArray.h"
-#include "Bullet3Common/b3HashMap.h"
-
-namespace bParse
-{
-class bMain;
-class bFileData;
-class bFile;
-class bDNA;
-
-// delete void* undefined
-typedef struct bStructHandle
-{
- int unused;
-} bStructHandle;
-typedef b3AlignedObjectArray<bStructHandle*> bListBasePtr;
-typedef b3HashMap<b3HashPtr, bStructHandle*> bPtrMap;
-} // namespace bParse
-
-#endif //__BCOMMON_H__
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
deleted file mode 100644
index 09c8f23859..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.cpp
+++ /dev/null
@@ -1,616 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#include <assert.h>
-
-#include "b3DNA.h"
-#include "b3Chunk.h"
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-
-//this define will force traversal of structures, to check backward (and forward) compatibility
-//#define TEST_BACKWARD_FORWARD_COMPATIBILITY
-
-using namespace bParse;
-
-// ----------------------------------------------------- //
-bDNA::bDNA()
- : mPtrLen(0)
-{
- // --
-}
-
-// ----------------------------------------------------- //
-bDNA::~bDNA()
-{
- // --
-}
-
-// ----------------------------------------------------- //
-bool bDNA::lessThan(bDNA *file)
-{
- return (m_Names.size() < file->m_Names.size());
-}
-
-// ----------------------------------------------------- //
-char *bDNA::getName(int ind)
-{
- assert(ind <= (int)m_Names.size());
- return m_Names[ind].m_name;
-}
-
-// ----------------------------------------------------- //
-char *bDNA::getType(int ind)
-{
- assert(ind <= (int)mTypes.size());
- return mTypes[ind];
-}
-
-// ----------------------------------------------------- //
-short *bDNA::getStruct(int ind)
-{
- assert(ind <= (int)mStructs.size());
- return mStructs[ind];
-}
-
-// ----------------------------------------------------- //
-short bDNA::getLength(int ind)
-{
- assert(ind <= (int)mTlens.size());
- return mTlens[ind];
-}
-
-// ----------------------------------------------------- //
-int bDNA::getReverseType(short type)
-{
- int *intPtr = mStructReverse.find(type);
- if (intPtr)
- return *intPtr;
-
- return -1;
-}
-
-// ----------------------------------------------------- //
-int bDNA::getReverseType(const char *type)
-{
- b3HashString key(type);
- int *valuePtr = mTypeLookup.find(key);
- if (valuePtr)
- return *valuePtr;
-
- return -1;
-}
-
-// ----------------------------------------------------- //
-int bDNA::getNumStructs()
-{
- return (int)mStructs.size();
-}
-
-// ----------------------------------------------------- //
-bool bDNA::flagNotEqual(int dna_nr)
-{
- assert(dna_nr <= (int)mCMPFlags.size());
- return mCMPFlags[dna_nr] == FDF_STRUCT_NEQU;
-}
-
-// ----------------------------------------------------- //
-bool bDNA::flagEqual(int dna_nr)
-{
- assert(dna_nr <= (int)mCMPFlags.size());
- int flag = mCMPFlags[dna_nr];
- return flag == FDF_STRUCT_EQU;
-}
-
-// ----------------------------------------------------- //
-bool bDNA::flagNone(int dna_nr)
-{
- assert(dna_nr <= (int)mCMPFlags.size());
- return mCMPFlags[dna_nr] == FDF_NONE;
-}
-
-// ----------------------------------------------------- //
-int bDNA::getPointerSize()
-{
- return mPtrLen;
-}
-
-// ----------------------------------------------------- //
-void bDNA::initRecurseCmpFlags(int iter)
-{
- // iter is FDF_STRUCT_NEQU
-
- short *oldStrc = mStructs[iter];
- short type = oldStrc[0];
-
- for (int i = 0; i < (int)mStructs.size(); i++)
- {
- if (i != iter && mCMPFlags[i] == FDF_STRUCT_EQU)
- {
- short *curStruct = mStructs[i];
- int eleLen = curStruct[1];
- curStruct += 2;
-
- for (int j = 0; j < eleLen; j++, curStruct += 2)
- {
- if (curStruct[0] == type)
- {
- //char *name = m_Names[curStruct[1]].m_name;
- //if (name[0] != '*')
- if (m_Names[curStruct[1]].m_isPointer)
- {
- mCMPFlags[i] = FDF_STRUCT_NEQU;
- initRecurseCmpFlags(i);
- }
- }
- }
- }
- }
-}
-
-// ----------------------------------------------------- //
-void bDNA::initCmpFlags(bDNA *memDNA)
-{
- // compare the file to memory
- // this ptr should be the file data
-
- assert(!(m_Names.size() == 0)); // && "SDNA empty!");
- mCMPFlags.resize(mStructs.size(), FDF_NONE);
-
- int i;
- for (i = 0; i < (int)mStructs.size(); i++)
- {
- short *oldStruct = mStructs[i];
-
- int oldLookup = getReverseType(oldStruct[0]);
- if (oldLookup == -1)
- {
- mCMPFlags[i] = FDF_NONE;
- continue;
- }
- //char* typeName = mTypes[oldStruct[0]];
-
-//#define SLOW_FORWARD_COMPATIBLE 1
-#ifdef SLOW_FORWARD_COMPATIBLE
- char *typeName = mTypes[oldLookup];
- int newLookup = memDNA->getReverseType(typeName);
- if (newLookup == -1)
- {
- mCMPFlags[i] = FDF_NONE;
- continue;
- }
- short *curStruct = memDNA->mStructs[newLookup];
-#else
- // memory for file
-
- if (oldLookup < memDNA->mStructs.size())
- {
- short *curStruct = memDNA->mStructs[oldLookup];
-#endif
-
- // rebuild...
- mCMPFlags[i] = FDF_STRUCT_NEQU;
-
-#ifndef TEST_BACKWARD_FORWARD_COMPATIBILITY
-
- if (curStruct[1] == oldStruct[1])
- {
- // type len same ...
- if (mTlens[oldStruct[0]] == memDNA->mTlens[curStruct[0]])
- {
- bool isSame = true;
- int elementLength = oldStruct[1];
-
- curStruct += 2;
- oldStruct += 2;
-
- for (int j = 0; j < elementLength; j++, curStruct += 2, oldStruct += 2)
- {
- // type the same
- //const char* typeFileDNA = mTypes[oldStruct[0]];
- //const char* typeMemDNA = mTypes[curStruct[0]];
- if (strcmp(mTypes[oldStruct[0]], memDNA->mTypes[curStruct[0]]) != 0)
- {
- isSame = false;
- break;
- }
-
- // name the same
- if (strcmp(m_Names[oldStruct[1]].m_name, memDNA->m_Names[curStruct[1]].m_name) != 0)
- {
- isSame = false;
- break;
- }
- }
- // flag valid ==
- if (isSame)
- mCMPFlags[i] = FDF_STRUCT_EQU;
- }
- }
-#endif
- }
-}
-
-// recurse in
-for (i = 0; i < (int)mStructs.size(); i++)
-{
- if (mCMPFlags[i] == FDF_STRUCT_NEQU)
- initRecurseCmpFlags(i);
-}
-}
-
-static int name_is_array(char *name, int *dim1, int *dim2)
-{
- int len = strlen(name);
- /*fprintf(stderr,"[%s]",name);*/
- /*if (len >= 1) {
- if (name[len-1] != ']')
- return 1;
- }
- return 0;*/
- char *bp;
- int num;
- if (dim1)
- {
- *dim1 = 1;
- }
- if (dim2)
- {
- *dim2 = 1;
- }
- bp = strchr(name, '[');
- if (!bp)
- {
- return 0;
- }
- num = 0;
- while (++bp < name + len - 1)
- {
- const char c = *bp;
- if (c == ']')
- {
- break;
- }
- if (c <= '9' && c >= '0')
- {
- num *= 10;
- num += (c - '0');
- }
- else
- {
- printf("array parse error.\n");
- return 0;
- }
- }
- if (dim2)
- {
- *dim2 = num;
- }
-
- /* find second dim, if any. */
- bp = strchr(bp, '[');
- if (!bp)
- {
- return 1; /* at least we got the first dim. */
- }
- num = 0;
- while (++bp < name + len - 1)
- {
- const char c = *bp;
- if (c == ']')
- {
- break;
- }
- if (c <= '9' && c >= '0')
- {
- num *= 10;
- num += (c - '0');
- }
- else
- {
- printf("array2 parse error.\n");
- return 1;
- }
- }
- if (dim1)
- {
- if (dim2)
- {
- *dim1 = *dim2;
- *dim2 = num;
- }
- else
- {
- *dim1 = num;
- }
- }
-
- return 1;
-}
-
-// ----------------------------------------------------- //
-void bDNA::init(char *data, int len, bool swap)
-{
- int *intPtr = 0;
- short *shtPtr = 0;
- char *cp = 0;
- int dataLen = 0;
- //long nr=0;
- intPtr = (int *)data;
-
- /*
- SDNA (4 bytes) (magic number)
- NAME (4 bytes)
- <nr> (4 bytes) amount of names (int)
- <string>
- <string>
- */
-
- if (strncmp(data, "SDNA", 4) == 0)
- {
- // skip ++ NAME
- intPtr++;
- intPtr++;
- }
-
- // Parse names
- if (swap)
- {
- *intPtr = ChunkUtils::swapInt(*intPtr);
- }
- dataLen = *intPtr;
- intPtr++;
-
- cp = (char *)intPtr;
- int i;
- for (i = 0; i < dataLen; i++)
- {
- bNameInfo info;
- info.m_name = cp;
- info.m_isPointer = (info.m_name[0] == '*') || (info.m_name[1] == '*');
- name_is_array(info.m_name, &info.m_dim0, &info.m_dim1);
- m_Names.push_back(info);
- while (*cp) cp++;
- cp++;
- }
-
- cp = b3AlignPointer(cp, 4);
-
- /*
- TYPE (4 bytes)
- <nr> amount of types (int)
- <string>
- <string>
- */
-
- intPtr = (int *)cp;
- assert(strncmp(cp, "TYPE", 4) == 0);
- intPtr++;
-
- if (swap)
- {
- *intPtr = ChunkUtils::swapInt(*intPtr);
- }
- dataLen = *intPtr;
- intPtr++;
-
- cp = (char *)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- mTypes.push_back(cp);
- while (*cp) cp++;
- cp++;
- }
-
- cp = b3AlignPointer(cp, 4);
-
- /*
- TLEN (4 bytes)
- <len> (short) the lengths of types
- <len>
- */
-
- // Parse type lens
- intPtr = (int *)cp;
- assert(strncmp(cp, "TLEN", 4) == 0);
- intPtr++;
-
- dataLen = (int)mTypes.size();
-
- shtPtr = (short *)intPtr;
- for (i = 0; i < dataLen; i++, shtPtr++)
- {
- if (swap)
- shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
- mTlens.push_back(shtPtr[0]);
- }
-
- if (dataLen & 1) shtPtr++;
-
- /*
- STRC (4 bytes)
- <nr> amount of structs (int)
- <typenr>
- <nr_of_elems>
- <typenr>
- <namenr>
- <typenr>
- <namenr>
- */
-
- intPtr = (int *)shtPtr;
- cp = (char *)intPtr;
- assert(strncmp(cp, "STRC", 4) == 0);
- intPtr++;
-
- if (swap)
- {
- *intPtr = ChunkUtils::swapInt(*intPtr);
- }
- dataLen = *intPtr;
- intPtr++;
-
- shtPtr = (short *)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- mStructs.push_back(shtPtr);
- if (swap)
- {
- shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
- shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]);
-
- int len = shtPtr[1];
- shtPtr += 2;
-
- for (int a = 0; a < len; a++, shtPtr += 2)
- {
- shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
- shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]);
- }
- }
- else
- shtPtr += (2 * shtPtr[1]) + 2;
- }
-
- // build reverse lookups
- for (i = 0; i < (int)mStructs.size(); i++)
- {
- short *strc = mStructs.at(i);
- if (!mPtrLen && strcmp(mTypes[strc[0]], "ListBase") == 0)
- {
- mPtrLen = mTlens[strc[0]] / 2;
- }
-
- mStructReverse.insert(strc[0], i);
- mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i);
- }
-}
-
-// ----------------------------------------------------- //
-int bDNA::getArraySize(char *string)
-{
- int ret = 1;
- int len = strlen(string);
-
- char *next = 0;
- for (int i = 0; i < len; i++)
- {
- char c = string[i];
-
- if (c == '[')
- next = &string[i + 1];
- else if (c == ']')
- if (next)
- ret *= atoi(next);
- }
-
- // print (string << ' ' << ret);
- return ret;
-}
-
-void bDNA::dumpTypeDefinitions()
-{
- int i;
-
- int numTypes = mTypes.size();
-
- for (i = 0; i < numTypes; i++)
- {
- }
-
- for (i = 0; i < (int)mStructs.size(); i++)
- {
- int totalBytes = 0;
- short *oldStruct = mStructs[i];
-
- int oldLookup = getReverseType(oldStruct[0]);
- if (oldLookup == -1)
- {
- mCMPFlags[i] = FDF_NONE;
- continue;
- }
-
- short *newStruct = mStructs[oldLookup];
- char *typeName = mTypes[newStruct[0]];
- printf("%3d: %s ", i, typeName);
-
- //char *name = mNames[oldStruct[1]];
- int len = oldStruct[1];
- printf(" (%d fields) ", len);
- oldStruct += 2;
-
- printf("{");
- int j;
- for (j = 0; j < len; ++j, oldStruct += 2)
- {
- const char *name = m_Names[oldStruct[1]].m_name;
- printf("%s %s", mTypes[oldStruct[0]], name);
- int elemNumBytes = 0;
- int arrayDimensions = getArraySizeNew(oldStruct[1]);
-
- if (m_Names[oldStruct[1]].m_isPointer)
- {
- elemNumBytes = VOID_IS_8 ? 8 : 4;
- }
- else
- {
- elemNumBytes = getLength(oldStruct[0]);
- }
- printf(" /* %d bytes */", elemNumBytes * arrayDimensions);
-
- if (j == len - 1)
- {
- printf(";}");
- }
- else
- {
- printf("; ");
- }
- totalBytes += elemNumBytes * arrayDimensions;
- }
- printf("\ntotalBytes=%d\n\n", totalBytes);
- }
-
-#if 0
- /* dump out display of types and their sizes */
- for (i=0; i<bf->types_count; ++i) {
- /* if (!bf->types[i].is_struct)*/
- {
- printf("%3d: sizeof(%s%s)=%d",
- i,
- bf->types[i].is_struct ? "struct " : "atomic ",
- bf->types[i].name, bf->types[i].size);
- if (bf->types[i].is_struct) {
- int j;
- printf(", %d fields: { ", bf->types[i].fieldtypes_count);
- for (j=0; j<bf->types[i].fieldtypes_count; ++j) {
- printf("%s %s",
- bf->types[bf->types[i].fieldtypes[j]].name,
- bf->names[bf->types[i].fieldnames[j]]);
- if (j == bf->types[i].fieldtypes_count-1) {
- printf(";}");
- } else {
- printf("; ");
- }
- }
- }
- printf("\n\n");
-
- }
- }
-#endif
-}
-
-//eof
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h
deleted file mode 100644
index ca6004d960..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3DNA.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef __BDNA_H__
-#define __BDNA_H__
-
-#include "b3Common.h"
-
-namespace bParse
-{
-struct bNameInfo
-{
- char *m_name;
- bool m_isPointer;
- int m_dim0;
- int m_dim1;
-};
-
-class bDNA
-{
-public:
- bDNA();
- ~bDNA();
-
- void init(char *data, int len, bool swap = false);
-
- int getArraySize(char *str);
- int getArraySizeNew(short name)
- {
- const bNameInfo &nameInfo = m_Names[name];
- return nameInfo.m_dim0 * nameInfo.m_dim1;
- }
- int getElementSize(short type, short name)
- {
- const bNameInfo &nameInfo = m_Names[name];
- int size = nameInfo.m_isPointer ? mPtrLen * nameInfo.m_dim0 * nameInfo.m_dim1 : mTlens[type] * nameInfo.m_dim0 * nameInfo.m_dim1;
- return size;
- }
-
- int getNumNames() const
- {
- return m_Names.size();
- }
-
- char *getName(int ind);
- char *getType(int ind);
- short *getStruct(int ind);
- short getLength(int ind);
- int getReverseType(short type);
- int getReverseType(const char *type);
-
- int getNumStructs();
-
- //
- bool lessThan(bDNA *other);
-
- void initCmpFlags(bDNA *memDNA);
- bool flagNotEqual(int dna_nr);
- bool flagEqual(int dna_nr);
- bool flagNone(int dna_nr);
-
- int getPointerSize();
-
- void dumpTypeDefinitions();
-
-private:
- enum FileDNAFlags
- {
- FDF_NONE = 0,
- FDF_STRUCT_NEQU,
- FDF_STRUCT_EQU
- };
-
- void initRecurseCmpFlags(int i);
-
- b3AlignedObjectArray<int> mCMPFlags;
-
- b3AlignedObjectArray<bNameInfo> m_Names;
- b3AlignedObjectArray<char *> mTypes;
- b3AlignedObjectArray<short *> mStructs;
- b3AlignedObjectArray<short> mTlens;
- b3HashMap<b3HashInt, int> mStructReverse;
- b3HashMap<b3HashString, int> mTypeLookup;
-
- int mPtrLen;
-};
-} // namespace bParse
-
-#endif //__BDNA_H__
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h
deleted file mode 100644
index 0524c94db1..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Defines.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/* Copyright (C) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-*
-* This software is provided 'as-is', without any express or implied
-* warranty. In no event will the authors be held liable for any damages
-* arising from the use of this software.
-*
-* Permission is granted to anyone to use this software for any purpose,
-* including commercial applications, and to alter it and redistribute it
-* freely, subject to the following restrictions:
-*
-* 1. The origin of this software must not be misrepresented; you must not
-* claim that you wrote the original software. If you use this software
-* in a product, an acknowledgment in the product documentation would be
-* appreciated but is not required.
-* 2. Altered source versions must be plainly marked as such, and must not be
-* misrepresented as being the original software.
-* 3. This notice may not be removed or altered from any source distribution.
-*/
-#ifndef __B_DEFINES_H__
-#define __B_DEFINES_H__
-
-// MISC defines, see BKE_global.h, BKE_utildefines.h
-#define B3_SIZEOFBLENDERHEADER 12
-
-// ------------------------------------------------------------
-#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__)
-#define B3_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d))
-#else
-#define B3_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a))
-#endif
-
-// ------------------------------------------------------------
-#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__)
-#define B3_MAKE_ID2(c, d) ((c) << 8 | (d))
-#else
-#define B3_MAKE_ID2(c, d) ((d) << 8 | (c))
-#endif
-
-// ------------------------------------------------------------
-#define B3_ID_SCE B3_MAKE_ID2('S', 'C')
-#define B3_ID_LI B3_MAKE_ID2('L', 'I')
-#define B3_ID_OB B3_MAKE_ID2('O', 'B')
-#define B3_ID_ME B3_MAKE_ID2('M', 'E')
-#define B3_ID_CU B3_MAKE_ID2('C', 'U')
-#define B3_ID_MB B3_MAKE_ID2('M', 'B')
-#define B3_ID_MA B3_MAKE_ID2('M', 'A')
-#define B3_ID_TE B3_MAKE_ID2('T', 'E')
-#define B3_ID_IM B3_MAKE_ID2('I', 'M')
-#define B3_ID_IK B3_MAKE_ID2('I', 'K')
-#define B3_ID_WV B3_MAKE_ID2('W', 'V')
-#define B3_ID_LT B3_MAKE_ID2('L', 'T')
-#define B3_ID_SE B3_MAKE_ID2('S', 'E')
-#define B3_ID_LF B3_MAKE_ID2('L', 'F')
-#define B3_ID_LA B3_MAKE_ID2('L', 'A')
-#define B3_ID_CA B3_MAKE_ID2('C', 'A')
-#define B3_ID_IP B3_MAKE_ID2('I', 'P')
-#define B3_ID_KE B3_MAKE_ID2('K', 'E')
-#define B3_ID_WO B3_MAKE_ID2('W', 'O')
-#define B3_ID_SCR B3_MAKE_ID2('S', 'R')
-#define B3_ID_VF B3_MAKE_ID2('V', 'F')
-#define B3_ID_TXT B3_MAKE_ID2('T', 'X')
-#define B3_ID_SO B3_MAKE_ID2('S', 'O')
-#define B3_ID_SAMPLE B3_MAKE_ID2('S', 'A')
-#define B3_ID_GR B3_MAKE_ID2('G', 'R')
-#define B3_ID_ID B3_MAKE_ID2('I', 'D')
-#define B3_ID_AR B3_MAKE_ID2('A', 'R')
-#define B3_ID_AC B3_MAKE_ID2('A', 'C')
-#define B3_ID_SCRIPT B3_MAKE_ID2('P', 'Y')
-#define B3_ID_FLUIDSIM B3_MAKE_ID2('F', 'S')
-#define B3_ID_NT B3_MAKE_ID2('N', 'T')
-#define B3_ID_BR B3_MAKE_ID2('B', 'R')
-
-#define B3_ID_SEQ B3_MAKE_ID2('S', 'Q')
-#define B3_ID_CO B3_MAKE_ID2('C', 'O')
-#define B3_ID_PO B3_MAKE_ID2('A', 'C')
-#define B3_ID_NLA B3_MAKE_ID2('N', 'L')
-
-#define B3_ID_VS B3_MAKE_ID2('V', 'S')
-#define B3_ID_VN B3_MAKE_ID2('V', 'N')
-
-// ------------------------------------------------------------
-#define B3_FORM B3_MAKE_ID('F', 'O', 'R', 'M')
-#define B3_DDG1 B3_MAKE_ID('3', 'D', 'G', '1')
-#define B3_DDG2 B3_MAKE_ID('3', 'D', 'G', '2')
-#define B3_DDG3 B3_MAKE_ID('3', 'D', 'G', '3')
-#define B3_DDG4 B3_MAKE_ID('3', 'D', 'G', '4')
-#define B3_GOUR B3_MAKE_ID('G', 'O', 'U', 'R')
-#define B3_BLEN B3_MAKE_ID('B', 'L', 'E', 'N')
-#define B3_DER_ B3_MAKE_ID('D', 'E', 'R', '_')
-#define B3_V100 B3_MAKE_ID('V', '1', '0', '0')
-#define B3_DATA B3_MAKE_ID('D', 'A', 'T', 'A')
-#define B3_GLOB B3_MAKE_ID('G', 'L', 'O', 'B')
-#define B3_IMAG B3_MAKE_ID('I', 'M', 'A', 'G')
-#define B3_TEST B3_MAKE_ID('T', 'E', 'S', 'T')
-#define B3_USER B3_MAKE_ID('U', 'S', 'E', 'R')
-
-// ------------------------------------------------------------
-#define B3_DNA1 B3_MAKE_ID('D', 'N', 'A', '1')
-#define B3_REND B3_MAKE_ID('R', 'E', 'N', 'D')
-#define B3_ENDB B3_MAKE_ID('E', 'N', 'D', 'B')
-#define B3_NAME B3_MAKE_ID('N', 'A', 'M', 'E')
-#define B3_SDNA B3_MAKE_ID('S', 'D', 'N', 'A')
-#define B3_TYPE B3_MAKE_ID('T', 'Y', 'P', 'E')
-#define B3_TLEN B3_MAKE_ID('T', 'L', 'E', 'N')
-#define B3_STRC B3_MAKE_ID('S', 'T', 'R', 'C')
-
-// ------------------------------------------------------------
-#define B3_SWITCH_INT(a) \
- { \
- char s_i, *p_i; \
- p_i = (char *)&(a); \
- s_i = p_i[0]; \
- p_i[0] = p_i[3]; \
- p_i[3] = s_i; \
- s_i = p_i[1]; \
- p_i[1] = p_i[2]; \
- p_i[2] = s_i; \
- }
-
-// ------------------------------------------------------------
-#define B3_SWITCH_SHORT(a) \
- { \
- char s_i, *p_i; \
- p_i = (char *)&(a); \
- s_i = p_i[0]; \
- p_i[0] = p_i[1]; \
- p_i[1] = s_i; \
- }
-
-// ------------------------------------------------------------
-#define B3_SWITCH_LONGINT(a) \
- { \
- char s_i, *p_i; \
- p_i = (char *)&(a); \
- s_i = p_i[0]; \
- p_i[0] = p_i[7]; \
- p_i[7] = s_i; \
- s_i = p_i[1]; \
- p_i[1] = p_i[6]; \
- p_i[6] = s_i; \
- s_i = p_i[2]; \
- p_i[2] = p_i[5]; \
- p_i[5] = s_i; \
- s_i = p_i[3]; \
- p_i[3] = p_i[4]; \
- p_i[4] = s_i; \
- }
-
-#endif //__B_DEFINES_H__
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
deleted file mode 100644
index f6c779a919..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.cpp
+++ /dev/null
@@ -1,1653 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#include "b3File.h"
-#include "b3Common.h"
-#include "b3Chunk.h"
-#include "b3DNA.h"
-#include <math.h>
-#include <string.h>
-#include <stdlib.h>
-#include "b3Defines.h"
-#include "Bullet3Serialize/Bullet2FileLoader/b3Serializer.h"
-#include "Bullet3Common/b3AlignedAllocator.h"
-#include "Bullet3Common/b3MinMax.h"
-
-#define B3_SIZEOFBLENDERHEADER 12
-#define MAX_ARRAY_LENGTH 512
-using namespace bParse;
-#define MAX_STRLEN 1024
-
-const char *getCleanName(const char *memName, char *buffer)
-{
- int slen = strlen(memName);
- assert(slen < MAX_STRLEN);
- slen = b3Min(slen, MAX_STRLEN);
- for (int i = 0; i < slen; i++)
- {
- if (memName[i] == ']' || memName[i] == '[')
- {
- buffer[i] = 0; //'_';
- }
- else
- {
- buffer[i] = memName[i];
- }
- }
- buffer[slen] = 0;
- return buffer;
-}
-
-// ----------------------------------------------------- //
-bFile::bFile(const char *filename, const char headerString[7])
- : mOwnsBuffer(true),
- mFileBuffer(0),
- mFileLen(0),
- mVersion(0),
- mDataStart(0),
- mFileDNA(0),
- mMemoryDNA(0),
- mFlags(FD_INVALID)
-{
- for (int i = 0; i < 7; i++)
- {
- m_headerString[i] = headerString[i];
- }
-
- FILE *fp = fopen(filename, "rb");
- if (fp)
- {
- fseek(fp, 0L, SEEK_END);
- mFileLen = ftell(fp);
- fseek(fp, 0L, SEEK_SET);
-
- mFileBuffer = (char *)malloc(mFileLen + 1);
- int bytesRead;
- bytesRead = fread(mFileBuffer, mFileLen, 1, fp);
-
- fclose(fp);
-
- //
- parseHeader();
- }
-}
-
-// ----------------------------------------------------- //
-bFile::bFile(char *memoryBuffer, int len, const char headerString[7])
- : mOwnsBuffer(false),
- mFileBuffer(0),
- mFileLen(0),
- mVersion(0),
- mDataStart(0),
- mFileDNA(0),
- mMemoryDNA(0),
- mFlags(FD_INVALID)
-{
- for (int i = 0; i < 7; i++)
- {
- m_headerString[i] = headerString[i];
- }
- mFileBuffer = memoryBuffer;
- mFileLen = len;
-
- parseHeader();
-}
-
-// ----------------------------------------------------- //
-bFile::~bFile()
-{
- if (mOwnsBuffer && mFileBuffer)
- {
- free(mFileBuffer);
- mFileBuffer = 0;
- }
-
- delete mMemoryDNA;
- delete mFileDNA;
-}
-
-// ----------------------------------------------------- //
-void bFile::parseHeader()
-{
- if (!mFileLen || !mFileBuffer)
- return;
-
- char *blenderBuf = mFileBuffer;
- char header[B3_SIZEOFBLENDERHEADER + 1];
- memcpy(header, blenderBuf, B3_SIZEOFBLENDERHEADER);
- header[B3_SIZEOFBLENDERHEADER] = '\0';
-
- if (strncmp(header, m_headerString, 6) != 0)
- {
- memcpy(header, m_headerString, B3_SIZEOFBLENDERHEADER);
- return;
- }
-
- if (header[6] == 'd')
- {
- mFlags |= FD_DOUBLE_PRECISION;
- }
-
- char *ver = header + 9;
- mVersion = atoi(ver);
- if (mVersion <= 241)
- {
- //printf("Warning, %d not fully tested : <= 242\n", mVersion);
- }
-
- int littleEndian = 1;
- littleEndian = ((char *)&littleEndian)[0];
-
- // swap ptr sizes...
- if (header[7] == '-')
- {
- mFlags |= FD_FILE_64;
- if (!VOID_IS_8)
- mFlags |= FD_BITS_VARIES;
- }
- else if (VOID_IS_8)
- mFlags |= FD_BITS_VARIES;
-
- // swap endian...
- if (header[8] == 'V')
- {
- if (littleEndian == 1)
- mFlags |= FD_ENDIAN_SWAP;
- }
- else if (littleEndian == 0)
- mFlags |= FD_ENDIAN_SWAP;
-
- mFlags |= FD_OK;
-}
-
-// ----------------------------------------------------- //
-bool bFile::ok()
-{
- return (mFlags & FD_OK) != 0;
-}
-
-// ----------------------------------------------------- //
-void bFile::parseInternal(int verboseMode, char *memDna, int memDnaLength)
-{
- if ((mFlags & FD_OK) == 0)
- return;
-
- char *blenderData = mFileBuffer;
- bChunkInd dna;
- dna.oldPtr = 0;
-
- char *tempBuffer = blenderData;
- for (int i = 0; i < mFileLen; i++)
- {
- // looking for the data's starting position
- // and the start of SDNA decls
-
- if (!mDataStart && strncmp(tempBuffer, "REND", 4) == 0)
- mDataStart = i;
-
- if (strncmp(tempBuffer, "DNA1", 4) == 0)
- {
- // read the DNA1 block and extract SDNA
- if (getNextBlock(&dna, tempBuffer, mFlags) > 0)
- {
- if (strncmp((tempBuffer + ChunkUtils::getOffset(mFlags)), "SDNANAME", 8) == 0)
- dna.oldPtr = (tempBuffer + ChunkUtils::getOffset(mFlags));
- else
- dna.oldPtr = 0;
- }
- else
- dna.oldPtr = 0;
- }
- // Some Bullet files are missing the DNA1 block
- // In Blender it's DNA1 + ChunkUtils::getOffset() + SDNA + NAME
- // In Bullet tests its SDNA + NAME
- else if (strncmp(tempBuffer, "SDNANAME", 8) == 0)
- {
- dna.oldPtr = blenderData + i;
- dna.len = mFileLen - i;
-
- // Also no REND block, so exit now.
- if (mVersion == 276) break;
- }
-
- if (mDataStart && dna.oldPtr) break;
- tempBuffer++;
- }
- if (!dna.oldPtr || !dna.len)
- {
- //printf("Failed to find DNA1+SDNA pair\n");
- mFlags &= ~FD_OK;
- return;
- }
-
- mFileDNA = new bDNA();
-
- ///mFileDNA->init will convert part of DNA file endianness to current CPU endianness if necessary
- mFileDNA->init((char *)dna.oldPtr, dna.len, (mFlags & FD_ENDIAN_SWAP) != 0);
-
- if (mVersion == 276)
- {
- int i;
- for (i = 0; i < mFileDNA->getNumNames(); i++)
- {
- if (strcmp(mFileDNA->getName(i), "int") == 0)
- {
- mFlags |= FD_BROKEN_DNA;
- }
- }
- if ((mFlags & FD_BROKEN_DNA) != 0)
- {
- //printf("warning: fixing some broken DNA version\n");
- }
- }
-
- if (verboseMode & FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS)
- mFileDNA->dumpTypeDefinitions();
-
- mMemoryDNA = new bDNA();
- int littleEndian = 1;
- littleEndian = ((char *)&littleEndian)[0];
-
- mMemoryDNA->init(memDna, memDnaLength, littleEndian == 0);
-
- ///@todo we need a better version check, add version/sub version info from FileGlobal into memory DNA/header files
- if (mMemoryDNA->getNumNames() != mFileDNA->getNumNames())
- {
- mFlags |= FD_VERSION_VARIES;
- //printf ("Warning, file DNA is different than built in, performance is reduced. Best to re-export file with a matching version/platform");
- }
-
- // as long as it kept up to date it will be ok!!
- if (mMemoryDNA->lessThan(mFileDNA))
- {
- //printf ("Warning, file DNA is newer than built in.");
- }
-
- mFileDNA->initCmpFlags(mMemoryDNA);
-
- parseData();
-
- resolvePointers(verboseMode);
-
- updateOldPointers();
-}
-
-// ----------------------------------------------------- //
-void bFile::swap(char *head, bChunkInd &dataChunk, bool ignoreEndianFlag)
-{
- char *data = head;
- short *strc = mFileDNA->getStruct(dataChunk.dna_nr);
-
- const char s[] = "SoftBodyMaterialData";
- int szs = sizeof(s);
- if (strncmp((char *)&dataChunk.code, "ARAY", 4) == 0)
- {
- short *oldStruct = mFileDNA->getStruct(dataChunk.dna_nr);
- char *oldType = mFileDNA->getType(oldStruct[0]);
- if (strncmp(oldType, s, szs) == 0)
- {
- return;
- }
- }
-
- int len = mFileDNA->getLength(strc[0]);
-
- for (int i = 0; i < dataChunk.nr; i++)
- {
- swapStruct(dataChunk.dna_nr, data, ignoreEndianFlag);
- data += len;
- }
-}
-
-void bFile::swapLen(char *dataPtr)
-{
- const bool VOID_IS_8 = ((sizeof(void *) == 8));
- if (VOID_IS_8)
- {
- if (mFlags & FD_BITS_VARIES)
- {
- bChunkPtr4 *c = (bChunkPtr4 *)dataPtr;
- if ((c->code & 0xFFFF) == 0)
- c->code >>= 16;
- B3_SWITCH_INT(c->len);
- B3_SWITCH_INT(c->dna_nr);
- B3_SWITCH_INT(c->nr);
- }
- else
- {
- bChunkPtr8 *c = (bChunkPtr8 *)dataPtr;
- if ((c->code & 0xFFFF) == 0)
- c->code >>= 16;
- B3_SWITCH_INT(c->len);
- B3_SWITCH_INT(c->dna_nr);
- B3_SWITCH_INT(c->nr);
- }
- }
- else
- {
- if (mFlags & FD_BITS_VARIES)
- {
- bChunkPtr8 *c = (bChunkPtr8 *)dataPtr;
- if ((c->code & 0xFFFF) == 0)
- c->code >>= 16;
- B3_SWITCH_INT(c->len);
- B3_SWITCH_INT(c->dna_nr);
- B3_SWITCH_INT(c->nr);
- }
- else
- {
- bChunkPtr4 *c = (bChunkPtr4 *)dataPtr;
- if ((c->code & 0xFFFF) == 0)
- c->code >>= 16;
- B3_SWITCH_INT(c->len);
-
- B3_SWITCH_INT(c->dna_nr);
- B3_SWITCH_INT(c->nr);
- }
- }
-}
-
-void bFile::swapDNA(char *ptr)
-{
- bool swap = ((mFlags & FD_ENDIAN_SWAP) != 0);
-
- char *data = &ptr[20];
- // void bDNA::init(char *data, int len, bool swap)
- int *intPtr = 0;
- short *shtPtr = 0;
- char *cp = 0;
- int dataLen = 0;
- //long nr=0;
- intPtr = (int *)data;
-
- /*
- SDNA (4 bytes) (magic number)
- NAME (4 bytes)
- <nr> (4 bytes) amount of names (int)
- <string>
- <string>
- */
-
- if (strncmp(data, "SDNA", 4) == 0)
- {
- // skip ++ NAME
- intPtr++;
- intPtr++;
- }
-
- // Parse names
- if (swap)
- dataLen = ChunkUtils::swapInt(*intPtr);
- else
- dataLen = *intPtr;
-
- *intPtr = ChunkUtils::swapInt(*intPtr);
- intPtr++;
-
- cp = (char *)intPtr;
- int i;
- for (i = 0; i < dataLen; i++)
- {
- while (*cp) cp++;
- cp++;
- }
-
- cp = b3AlignPointer(cp, 4);
-
- /*
- TYPE (4 bytes)
- <nr> amount of types (int)
- <string>
- <string>
- */
-
- intPtr = (int *)cp;
- assert(strncmp(cp, "TYPE", 4) == 0);
- intPtr++;
-
- if (swap)
- dataLen = ChunkUtils::swapInt(*intPtr);
- else
- dataLen = *intPtr;
-
- *intPtr = ChunkUtils::swapInt(*intPtr);
-
- intPtr++;
-
- cp = (char *)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- while (*cp) cp++;
- cp++;
- }
-
- cp = b3AlignPointer(cp, 4);
-
- /*
- TLEN (4 bytes)
- <len> (short) the lengths of types
- <len>
- */
-
- // Parse type lens
- intPtr = (int *)cp;
- assert(strncmp(cp, "TLEN", 4) == 0);
- intPtr++;
-
- shtPtr = (short *)intPtr;
- for (i = 0; i < dataLen; i++, shtPtr++)
- {
- //??????if (swap)
- shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
- }
-
- if (dataLen & 1)
- shtPtr++;
-
- /*
- STRC (4 bytes)
- <nr> amount of structs (int)
- <typenr>
- <nr_of_elems>
- <typenr>
- <namenr>
- <typenr>
- <namenr>
- */
-
- intPtr = (int *)shtPtr;
- cp = (char *)intPtr;
- assert(strncmp(cp, "STRC", 4) == 0);
- intPtr++;
-
- if (swap)
- dataLen = ChunkUtils::swapInt(*intPtr);
- else
- dataLen = *intPtr;
-
- *intPtr = ChunkUtils::swapInt(*intPtr);
-
- intPtr++;
-
- shtPtr = (short *)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- //if (swap)
- {
- int len = shtPtr[1];
-
- shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
- shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]);
-
- shtPtr += 2;
-
- for (int a = 0; a < len; a++, shtPtr += 2)
- {
- shtPtr[0] = ChunkUtils::swapShort(shtPtr[0]);
- shtPtr[1] = ChunkUtils::swapShort(shtPtr[1]);
- }
- }
- // else
- // shtPtr+= (2*shtPtr[1])+2;
- }
-}
-
-void bFile::writeFile(const char *fileName)
-{
- FILE *f = fopen(fileName, "wb");
- fwrite(mFileBuffer, 1, mFileLen, f);
- fclose(f);
-}
-
-void bFile::preSwap()
-{
- //const bool brokenDNA = (mFlags&FD_BROKEN_DNA)!=0;
- //FD_ENDIAN_SWAP
- //byte 8 determines the endianness of the file, little (v) versus big (V)
- int littleEndian = 1;
- littleEndian = ((char *)&littleEndian)[0];
-
- if (mFileBuffer[8] == 'V')
- {
- mFileBuffer[8] = 'v';
- }
- else
- {
- mFileBuffer[8] = 'V';
- }
-
- mDataStart = 12;
-
- char *dataPtr = mFileBuffer + mDataStart;
-
- bChunkInd dataChunk;
- dataChunk.code = 0;
- bool ignoreEndianFlag = true;
-
- //we always want to swap here
-
- int seek = getNextBlock(&dataChunk, dataPtr, mFlags);
- //dataPtr += ChunkUtils::getOffset(mFlags);
- char *dataPtrHead = 0;
-
- while (1)
- {
- // one behind
- if (dataChunk.code == B3_SDNA || dataChunk.code == B3_DNA1 || dataChunk.code == B3_TYPE || dataChunk.code == B3_TLEN || dataChunk.code == B3_STRC)
- {
- swapDNA(dataPtr);
- break;
- }
- else
- {
- //if (dataChunk.code == DNA1) break;
- dataPtrHead = dataPtr + ChunkUtils::getOffset(mFlags);
-
- swapLen(dataPtr);
- if (dataChunk.dna_nr >= 0)
- {
- swap(dataPtrHead, dataChunk, ignoreEndianFlag);
- }
- else
- {
- //printf("unknown chunk\n");
- }
- }
-
- // next please!
- dataPtr += seek;
-
- seek = getNextBlock(&dataChunk, dataPtr, mFlags);
- if (seek < 0)
- break;
- }
-
- if (mFlags & FD_ENDIAN_SWAP)
- {
- mFlags &= ~FD_ENDIAN_SWAP;
- }
- else
- {
- mFlags |= FD_ENDIAN_SWAP;
- }
-}
-
-// ----------------------------------------------------- //
-char *bFile::readStruct(char *head, bChunkInd &dataChunk)
-{
- bool ignoreEndianFlag = false;
-
- if (mFlags & FD_ENDIAN_SWAP)
- swap(head, dataChunk, ignoreEndianFlag);
-
- if (!mFileDNA->flagEqual(dataChunk.dna_nr))
- {
- // Ouch! need to rebuild the struct
- short *oldStruct, *curStruct;
- char *oldType, *newType;
- int oldLen, curLen, reverseOld;
-
- oldStruct = mFileDNA->getStruct(dataChunk.dna_nr);
- oldType = mFileDNA->getType(oldStruct[0]);
-
- oldLen = mFileDNA->getLength(oldStruct[0]);
-
- if ((mFlags & FD_BROKEN_DNA) != 0)
- {
- if ((strcmp(oldType, "b3QuantizedBvhNodeData") == 0) && oldLen == 20)
- {
- return 0;
- }
- if ((strcmp(oldType, "b3ShortIntIndexData") == 0))
- {
- int allocLen = 2;
- char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1];
- memset(dataAlloc, 0, (dataChunk.nr * allocLen) + 1);
- short *dest = (short *)dataAlloc;
- const short *src = (short *)head;
- for (int i = 0; i < dataChunk.nr; i++)
- {
- dest[i] = src[i];
- if (mFlags & FD_ENDIAN_SWAP)
- {
- B3_SWITCH_SHORT(dest[i]);
- }
- }
- addDataBlock(dataAlloc);
- return dataAlloc;
- }
- }
-
- ///don't try to convert Link block data, just memcpy it. Other data can be converted.
- if (strcmp("Link", oldType) != 0)
- {
- reverseOld = mMemoryDNA->getReverseType(oldType);
-
- if ((reverseOld != -1))
- {
- // make sure it's here
- //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!");
-
- //
- curStruct = mMemoryDNA->getStruct(reverseOld);
- newType = mMemoryDNA->getType(curStruct[0]);
- curLen = mMemoryDNA->getLength(curStruct[0]);
-
- // make sure it's the same
- assert((strcmp(oldType, newType) == 0) && "internal error, struct mismatch!");
-
- // numBlocks * length
-
- int allocLen = (curLen);
- char *dataAlloc = new char[(dataChunk.nr * allocLen) + 1];
- memset(dataAlloc, 0, (dataChunk.nr * allocLen));
-
- // track allocated
- addDataBlock(dataAlloc);
-
- char *cur = dataAlloc;
- char *old = head;
- for (int block = 0; block < dataChunk.nr; block++)
- {
- bool fixupPointers = true;
- parseStruct(cur, old, dataChunk.dna_nr, reverseOld, fixupPointers);
- mLibPointers.insert(old, (bStructHandle *)cur);
-
- cur += curLen;
- old += oldLen;
- }
- return dataAlloc;
- }
- }
- else
- {
- //printf("Link found\n");
- }
- }
- else
- {
-//#define DEBUG_EQUAL_STRUCTS
-#ifdef DEBUG_EQUAL_STRUCTS
- short *oldStruct;
- char *oldType;
- oldStruct = mFileDNA->getStruct(dataChunk.dna_nr);
- oldType = mFileDNA->getType(oldStruct[0]);
- printf("%s equal structure, just memcpy\n", oldType);
-#endif //
- }
-
- char *dataAlloc = new char[(dataChunk.len) + 1];
- memset(dataAlloc, 0, dataChunk.len + 1);
-
- // track allocated
- addDataBlock(dataAlloc);
-
- memcpy(dataAlloc, head, dataChunk.len);
- return dataAlloc;
-}
-
-// ----------------------------------------------------- //
-void bFile::parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers)
-{
- if (old_dna == -1) return;
- if (new_dna == -1) return;
-
- //disable this, because we need to fixup pointers/ListBase
- if (0) //mFileDNA->flagEqual(old_dna))
- {
- short *strc = mFileDNA->getStruct(old_dna);
- int len = mFileDNA->getLength(strc[0]);
-
- memcpy(strcPtr, dtPtr, len);
- return;
- }
-
- // Ok, now build the struct
- char *memType, *memName, *cpc, *cpo;
- short *fileStruct, *filePtrOld, *memoryStruct, *firstStruct;
- int elementLength, size, revType, old_nr, new_nr, fpLen;
- short firstStructType;
-
- // File to memory lookup
- memoryStruct = mMemoryDNA->getStruct(new_dna);
- fileStruct = mFileDNA->getStruct(old_dna);
- firstStruct = fileStruct;
-
- filePtrOld = fileStruct;
- firstStructType = mMemoryDNA->getStruct(0)[0];
-
- // Get number of elements
- elementLength = memoryStruct[1];
- memoryStruct += 2;
-
- cpc = strcPtr;
- cpo = 0;
- for (int ele = 0; ele < elementLength; ele++, memoryStruct += 2)
- {
- memType = mMemoryDNA->getType(memoryStruct[0]);
- memName = mMemoryDNA->getName(memoryStruct[1]);
-
- size = mMemoryDNA->getElementSize(memoryStruct[0], memoryStruct[1]);
- revType = mMemoryDNA->getReverseType(memoryStruct[0]);
-
- if (revType != -1 && memoryStruct[0] >= firstStructType && memName[0] != '*')
- {
- cpo = getFileElement(firstStruct, memName, memType, dtPtr, &filePtrOld);
- if (cpo)
- {
- int arrayLen = mFileDNA->getArraySizeNew(filePtrOld[1]);
- old_nr = mFileDNA->getReverseType(memType);
- new_nr = revType;
- fpLen = mFileDNA->getElementSize(filePtrOld[0], filePtrOld[1]);
- if (arrayLen == 1)
- {
- parseStruct(cpc, cpo, old_nr, new_nr, fixupPointers);
- }
- else
- {
- char *tmpCpc = cpc;
- char *tmpCpo = cpo;
-
- for (int i = 0; i < arrayLen; i++)
- {
- parseStruct(tmpCpc, tmpCpo, old_nr, new_nr, fixupPointers);
- tmpCpc += size / arrayLen;
- tmpCpo += fpLen / arrayLen;
- }
- }
- cpc += size;
- cpo += fpLen;
- }
- else
- cpc += size;
- }
- else
- {
- getMatchingFileDNA(fileStruct, memName, memType, cpc, dtPtr, fixupPointers);
- cpc += size;
- }
- }
-}
-
-// ----------------------------------------------------- //
-static void getElement(int arrayLen, const char *cur, const char *old, char *oldPtr, char *curData)
-{
-#define b3GetEle(value, current, type, cast, size, ptr) \
- if (strcmp(current, type) == 0) \
- { \
- value = (*(cast *)ptr); \
- ptr += size; \
- }
-
-#define b3SetEle(value, current, type, cast, size, ptr) \
- if (strcmp(current, type) == 0) \
- { \
- (*(cast *)ptr) = (cast)value; \
- ptr += size; \
- }
- double value = 0.0;
-
- for (int i = 0; i < arrayLen; i++)
- {
- b3GetEle(value, old, "char", char, sizeof(char), oldPtr);
- b3SetEle(value, cur, "char", char, sizeof(char), curData);
- b3GetEle(value, old, "short", short, sizeof(short), oldPtr);
- b3SetEle(value, cur, "short", short, sizeof(short), curData);
- b3GetEle(value, old, "ushort", unsigned short, sizeof(unsigned short), oldPtr);
- b3SetEle(value, cur, "ushort", unsigned short, sizeof(unsigned short), curData);
- b3GetEle(value, old, "int", int, sizeof(int), oldPtr);
- b3SetEle(value, cur, "int", int, sizeof(int), curData);
- b3GetEle(value, old, "long", int, sizeof(int), oldPtr);
- b3SetEle(value, cur, "long", int, sizeof(int), curData);
- b3GetEle(value, old, "float", float, sizeof(float), oldPtr);
- b3SetEle(value, cur, "float", float, sizeof(float), curData);
- b3GetEle(value, old, "double", double, sizeof(double), oldPtr);
- b3SetEle(value, cur, "double", double, sizeof(double), curData);
- }
-}
-
-// ----------------------------------------------------- //
-void bFile::swapData(char *data, short type, int arraySize, bool ignoreEndianFlag)
-{
- if (ignoreEndianFlag || (mFlags & FD_ENDIAN_SWAP))
- {
- if (type == 2 || type == 3)
- {
- short *sp = (short *)data;
- for (int i = 0; i < arraySize; i++)
- {
- sp[0] = ChunkUtils::swapShort(sp[0]);
- sp++;
- }
- }
- if (type > 3 && type < 8)
- {
- char c;
- char *cp = data;
- for (int i = 0; i < arraySize; i++)
- {
- c = cp[0];
- cp[0] = cp[3];
- cp[3] = c;
- c = cp[1];
- cp[1] = cp[2];
- cp[2] = c;
- cp += 4;
- }
- }
- }
-}
-
-void bFile::safeSwapPtr(char *dst, const char *src)
-{
- if (!src || !dst)
- return;
-
- int ptrFile = mFileDNA->getPointerSize();
- int ptrMem = mMemoryDNA->getPointerSize();
-
- if (ptrFile == ptrMem)
- {
- memcpy(dst, src, ptrMem);
- }
- else if (ptrMem == 4 && ptrFile == 8)
- {
- b3PointerUid *oldPtr = (b3PointerUid *)src;
- b3PointerUid *newPtr = (b3PointerUid *)dst;
-
- if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1])
- {
- //Bullet stores the 32bit unique ID in both upper and lower part of 64bit pointers
- //so it can be used to distinguish between .blend and .bullet
- newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0];
- }
- else
- {
- //deal with pointers the Blender .blend style way, see
- //readfile.c in the Blender source tree
- b3Long64 longValue = *((b3Long64 *)src);
- //endian swap for 64bit pointer otherwise truncation will fail due to trailing zeros
- if (mFlags & FD_ENDIAN_SWAP)
- B3_SWITCH_LONGINT(longValue);
- *((int *)dst) = (int)(longValue >> 3);
- }
- }
- else if (ptrMem == 8 && ptrFile == 4)
- {
- b3PointerUid *oldPtr = (b3PointerUid *)src;
- b3PointerUid *newPtr = (b3PointerUid *)dst;
- if (oldPtr->m_uniqueIds[0] == oldPtr->m_uniqueIds[1])
- {
- newPtr->m_uniqueIds[0] = oldPtr->m_uniqueIds[0];
- newPtr->m_uniqueIds[1] = 0;
- }
- else
- {
- *((b3Long64 *)dst) = *((int *)src);
- }
- }
- else
- {
- printf("%d %d\n", ptrFile, ptrMem);
- assert(0 && "Invalid pointer len");
- }
-}
-
-// ----------------------------------------------------- //
-void bFile::getMatchingFileDNA(short *dna_addr, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers)
-{
- // find the matching memory dna data
- // to the file being loaded. Fill the
- // memory with the file data...
-
- int len = dna_addr[1];
- dna_addr += 2;
-
- for (int i = 0; i < len; i++, dna_addr += 2)
- {
- const char *type = mFileDNA->getType(dna_addr[0]);
- const char *name = mFileDNA->getName(dna_addr[1]);
-
- int eleLen = mFileDNA->getElementSize(dna_addr[0], dna_addr[1]);
-
- if ((mFlags & FD_BROKEN_DNA) != 0)
- {
- if ((strcmp(type, "short") == 0) && (strcmp(name, "int") == 0))
- {
- eleLen = 0;
- }
- }
-
- if (strcmp(lookupName, name) == 0)
- {
- //int arrayLenold = mFileDNA->getArraySize((char*)name.c_str());
- int arrayLen = mFileDNA->getArraySizeNew(dna_addr[1]);
- //assert(arrayLenold == arrayLen);
-
- if (name[0] == '*')
- {
- // cast pointers
- int ptrFile = mFileDNA->getPointerSize();
- int ptrMem = mMemoryDNA->getPointerSize();
- safeSwapPtr(strcData, data);
-
- if (fixupPointers)
- {
- if (arrayLen > 1)
- {
- //void **sarray = (void**)strcData;
- //void **darray = (void**)data;
-
- char *cpc, *cpo;
- cpc = (char *)strcData;
- cpo = (char *)data;
-
- for (int a = 0; a < arrayLen; a++)
- {
- safeSwapPtr(cpc, cpo);
- m_pointerFixupArray.push_back(cpc);
- cpc += ptrMem;
- cpo += ptrFile;
- }
- }
- else
- {
- if (name[1] == '*')
- m_pointerPtrFixupArray.push_back(strcData);
- else
- m_pointerFixupArray.push_back(strcData);
- }
- }
- else
- {
- // printf("skipped %s %s : %x\n",type.c_str(),name.c_str(),strcData);
- }
- }
-
- else if (strcmp(type, lookupType) == 0)
- memcpy(strcData, data, eleLen);
- else
- getElement(arrayLen, lookupType, type, data, strcData);
-
- // --
- return;
- }
- data += eleLen;
- }
-}
-
-// ----------------------------------------------------- //
-char *bFile::getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos)
-{
- short *old = firstStruct; //mFileDNA->getStruct(old_nr);
- int elementLength = old[1];
- old += 2;
-
- for (int i = 0; i < elementLength; i++, old += 2)
- {
- char *type = mFileDNA->getType(old[0]);
- char *name = mFileDNA->getName(old[1]);
- int len = mFileDNA->getElementSize(old[0], old[1]);
-
- if (strcmp(lookupName, name) == 0)
- {
- if (strcmp(type, lookupType) == 0)
- {
- if (foundPos)
- *foundPos = old;
- return data;
- }
- return 0;
- }
- data += len;
- }
- return 0;
-}
-
-// ----------------------------------------------------- //
-void bFile::swapStruct(int dna_nr, char *data, bool ignoreEndianFlag)
-{
- if (dna_nr == -1) return;
-
- short *strc = mFileDNA->getStruct(dna_nr);
- //short *firstStrc = strc;
-
- int elementLen = strc[1];
- strc += 2;
-
- short first = mFileDNA->getStruct(0)[0];
-
- char *buf = data;
- for (int i = 0; i < elementLen; i++, strc += 2)
- {
- char *type = mFileDNA->getType(strc[0]);
- char *name = mFileDNA->getName(strc[1]);
-
- int size = mFileDNA->getElementSize(strc[0], strc[1]);
- if (strc[0] >= first && name[0] != '*')
- {
- int old_nr = mFileDNA->getReverseType(type);
- int arrayLen = mFileDNA->getArraySizeNew(strc[1]);
- if (arrayLen == 1)
- {
- swapStruct(old_nr, buf, ignoreEndianFlag);
- }
- else
- {
- char *tmpBuf = buf;
- for (int i = 0; i < arrayLen; i++)
- {
- swapStruct(old_nr, tmpBuf, ignoreEndianFlag);
- tmpBuf += size / arrayLen;
- }
- }
- }
- else
- {
- //int arrayLenOld = mFileDNA->getArraySize(name);
- int arrayLen = mFileDNA->getArraySizeNew(strc[1]);
- //assert(arrayLenOld == arrayLen);
- swapData(buf, strc[0], arrayLen, ignoreEndianFlag);
- }
- buf += size;
- }
-}
-
-void bFile::resolvePointersMismatch()
-{
- // printf("resolvePointersStructMismatch\n");
-
- int i;
-
- for (i = 0; i < m_pointerFixupArray.size(); i++)
- {
- char *cur = m_pointerFixupArray.at(i);
- void **ptrptr = (void **)cur;
- void *ptr = *ptrptr;
- ptr = findLibPointer(ptr);
- if (ptr)
- {
- //printf("Fixup pointer!\n");
- *(ptrptr) = ptr;
- }
- else
- {
- // printf("pointer not found: %x\n",cur);
- }
- }
-
- for (i = 0; i < m_pointerPtrFixupArray.size(); i++)
- {
- char *cur = m_pointerPtrFixupArray.at(i);
- void **ptrptr = (void **)cur;
-
- bChunkInd *block = m_chunkPtrPtrMap.find(*ptrptr);
- if (block)
- {
- int ptrMem = mMemoryDNA->getPointerSize();
- int ptrFile = mFileDNA->getPointerSize();
-
- int blockLen = block->len / ptrFile;
-
- void *onptr = findLibPointer(*ptrptr);
- if (onptr)
- {
- char *newPtr = new char[blockLen * ptrMem];
- addDataBlock(newPtr);
- memset(newPtr, 0, blockLen * ptrMem);
-
- void **onarray = (void **)onptr;
- char *oldPtr = (char *)onarray;
-
- int p = 0;
- while (blockLen-- > 0)
- {
- b3PointerUid dp = {{0}};
- safeSwapPtr((char *)dp.m_uniqueIds, oldPtr);
-
- void **tptr = (void **)(newPtr + p * ptrMem);
- *tptr = findLibPointer(dp.m_ptr);
-
- oldPtr += ptrFile;
- ++p;
- }
-
- *ptrptr = newPtr;
- }
- }
- }
-}
-
-///this loop only works fine if the Blender DNA structure of the file matches the headerfiles
-void bFile::resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode)
-{
- bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA;
-
- short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr);
- short oldLen = fileDna->getLength(oldStruct[0]);
- //char* structType = fileDna->getType(oldStruct[0]);
-
- char *cur = (char *)findLibPointer(dataChunk.oldPtr);
- for (int block = 0; block < dataChunk.nr; block++)
- {
- resolvePointersStructRecursive(cur, dataChunk.dna_nr, verboseMode, 1);
- cur += oldLen;
- }
-}
-
-int bFile::resolvePointersStructRecursive(char *strcPtr, int dna_nr, int verboseMode, int recursion)
-{
- bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA;
-
- char *memType;
- char *memName;
- short firstStructType = fileDna->getStruct(0)[0];
-
- char *elemPtr = strcPtr;
-
- short int *oldStruct = fileDna->getStruct(dna_nr);
-
- int elementLength = oldStruct[1];
- oldStruct += 2;
-
- int totalSize = 0;
-
- for (int ele = 0; ele < elementLength; ele++, oldStruct += 2)
- {
- memType = fileDna->getType(oldStruct[0]);
- memName = fileDna->getName(oldStruct[1]);
-
- int arrayLen = fileDna->getArraySizeNew(oldStruct[1]);
- if (memName[0] == '*')
- {
- if (arrayLen > 1)
- {
- void **array = (void **)elemPtr;
- for (int a = 0; a < arrayLen; a++)
- {
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- for (int i = 0; i < recursion; i++)
- {
- printf(" ");
- }
- //skip the *
- printf("<%s type=\"pointer\"> ", &memName[1]);
- printf("%p ", array[a]);
- printf("</%s>\n", &memName[1]);
- }
-
- array[a] = findLibPointer(array[a]);
- }
- }
- else
- {
- void **ptrptr = (void **)elemPtr;
- void *ptr = *ptrptr;
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- for (int i = 0; i < recursion; i++)
- {
- printf(" ");
- }
- printf("<%s type=\"pointer\"> ", &memName[1]);
- printf("%p ", ptr);
- printf("</%s>\n", &memName[1]);
- }
- ptr = findLibPointer(ptr);
-
- if (ptr)
- {
- // printf("Fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr);
- *(ptrptr) = ptr;
- if (memName[1] == '*' && ptrptr && *ptrptr)
- {
- // This will only work if the given **array is continuous
- void **array = (void **)*(ptrptr);
- void *np = array[0];
- int n = 0;
- while (np)
- {
- np = findLibPointer(array[n]);
- if (np) array[n] = np;
- n++;
- }
- }
- }
- else
- {
- // printf("Cannot fixup pointer at 0x%x from 0x%x to 0x%x!\n",ptrptr,*ptrptr,ptr);
- }
- }
- }
- else
- {
- int revType = fileDna->getReverseType(oldStruct[0]);
- if (oldStruct[0] >= firstStructType) //revType != -1 &&
- {
- char cleanName[MAX_STRLEN];
- getCleanName(memName, cleanName);
-
- int arrayLen = fileDna->getArraySizeNew(oldStruct[1]);
- int byteOffset = 0;
-
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- for (int i = 0; i < recursion; i++)
- {
- printf(" ");
- }
-
- if (arrayLen > 1)
- {
- printf("<%s type=\"%s\" count=%d>\n", cleanName, memType, arrayLen);
- }
- else
- {
- printf("<%s type=\"%s\">\n", cleanName, memType);
- }
- }
-
- for (int i = 0; i < arrayLen; i++)
- {
- byteOffset += resolvePointersStructRecursive(elemPtr + byteOffset, revType, verboseMode, recursion + 1);
- }
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- for (int i = 0; i < recursion; i++)
- {
- printf(" ");
- }
- printf("</%s>\n", cleanName);
- }
- }
- else
- {
- //export a simple type
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- if (arrayLen > MAX_ARRAY_LENGTH)
- {
- printf("too long\n");
- }
- else
- {
- //printf("%s %s\n",memType,memName);
-
- bool isIntegerType = (strcmp(memType, "char") == 0) || (strcmp(memType, "int") == 0) || (strcmp(memType, "short") == 0);
-
- if (isIntegerType)
- {
- const char *newtype = "int";
- int dbarray[MAX_ARRAY_LENGTH];
- int *dbPtr = 0;
- char *tmp = elemPtr;
- dbPtr = &dbarray[0];
- if (dbPtr)
- {
- char cleanName[MAX_STRLEN];
- getCleanName(memName, cleanName);
-
- int i;
- getElement(arrayLen, newtype, memType, tmp, (char *)dbPtr);
- for (i = 0; i < recursion; i++)
- printf(" ");
- if (arrayLen == 1)
- printf("<%s type=\"%s\">", cleanName, memType);
- else
- printf("<%s type=\"%s\" count=%d>", cleanName, memType, arrayLen);
- for (i = 0; i < arrayLen; i++)
- printf(" %d ", dbPtr[i]);
- printf("</%s>\n", cleanName);
- }
- }
- else
- {
- const char *newtype = "double";
- double dbarray[MAX_ARRAY_LENGTH];
- double *dbPtr = 0;
- char *tmp = elemPtr;
- dbPtr = &dbarray[0];
- if (dbPtr)
- {
- int i;
- getElement(arrayLen, newtype, memType, tmp, (char *)dbPtr);
- for (i = 0; i < recursion; i++)
- printf(" ");
- char cleanName[MAX_STRLEN];
- getCleanName(memName, cleanName);
-
- if (arrayLen == 1)
- {
- printf("<%s type=\"%s\">", memName, memType);
- }
- else
- {
- printf("<%s type=\"%s\" count=%d>", cleanName, memType, arrayLen);
- }
- for (i = 0; i < arrayLen; i++)
- printf(" %f ", dbPtr[i]);
- printf("</%s>\n", cleanName);
- }
- }
- }
- }
- }
- }
-
- int size = fileDna->getElementSize(oldStruct[0], oldStruct[1]);
- totalSize += size;
- elemPtr += size;
- }
-
- return totalSize;
-}
-
-///Resolve pointers replaces the original pointers in structures, and linked lists by the new in-memory structures
-void bFile::resolvePointers(int verboseMode)
-{
- bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA;
-
- //char *dataPtr = mFileBuffer+mDataStart;
-
- if (1) //mFlags & (FD_BITS_VARIES | FD_VERSION_VARIES))
- {
- resolvePointersMismatch();
- }
-
- {
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- printf("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
- int numitems = m_chunks.size();
- printf("<bullet_physics version=%d itemcount = %d>\n", b3GetVersion(), numitems);
- }
- for (int i = 0; i < m_chunks.size(); i++)
- {
- const bChunkInd &dataChunk = m_chunks.at(i);
-
- if (!mFileDNA || fileDna->flagEqual(dataChunk.dna_nr))
- {
- //dataChunk.len
- short int *oldStruct = fileDna->getStruct(dataChunk.dna_nr);
- char *oldType = fileDna->getType(oldStruct[0]);
-
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- printf(" <%s pointer=%p>\n", oldType, dataChunk.oldPtr);
-
- resolvePointersChunk(dataChunk, verboseMode);
-
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- printf(" </%s>\n", oldType);
- }
- else
- {
- //printf("skipping mStruct\n");
- }
- }
- if (verboseMode & FD_VERBOSE_EXPORT_XML)
- {
- printf("</bullet_physics>\n");
- }
- }
-}
-
-// ----------------------------------------------------- //
-void *bFile::findLibPointer(void *ptr)
-{
- bStructHandle **ptrptr = getLibPointers().find(ptr);
- if (ptrptr)
- return *ptrptr;
- return 0;
-}
-
-void bFile::updateOldPointers()
-{
- int i;
-
- for (i = 0; i < m_chunks.size(); i++)
- {
- bChunkInd &dataChunk = m_chunks[i];
- dataChunk.oldPtr = findLibPointer(dataChunk.oldPtr);
- }
-}
-void bFile::dumpChunks(bParse::bDNA *dna)
-{
- int i;
-
- for (i = 0; i < m_chunks.size(); i++)
- {
- bChunkInd &dataChunk = m_chunks[i];
- char *codeptr = (char *)&dataChunk.code;
- char codestr[5] = {codeptr[0], codeptr[1], codeptr[2], codeptr[3], 0};
-
- short *newStruct = dna->getStruct(dataChunk.dna_nr);
- char *typeName = dna->getType(newStruct[0]);
- printf("%3d: %s ", i, typeName);
-
- printf("code=%s ", codestr);
-
- printf("ptr=%p ", dataChunk.oldPtr);
- printf("len=%d ", dataChunk.len);
- printf("nr=%d ", dataChunk.nr);
- if (dataChunk.nr != 1)
- {
- printf("not 1\n");
- }
- printf("\n");
- }
-
-#if 0
- IDFinderData ifd;
- ifd.success = 0;
- ifd.IDname = NULL;
- ifd.just_print_it = 1;
- for (i=0; i<bf->m_blocks.size(); ++i)
- {
- BlendBlock* bb = bf->m_blocks[i];
- printf("tag='%s'\tptr=%p\ttype=%s\t[%4d]", bb->tag, bb,bf->types[bb->type_index].name,bb->m_array_entries_.size());
- block_ID_finder(bb, bf, &ifd);
- printf("\n");
- }
-#endif
-}
-
-void bFile::writeChunks(FILE *fp, bool fixupPointers)
-{
- bParse::bDNA *fileDna = mFileDNA ? mFileDNA : mMemoryDNA;
-
- for (int i = 0; i < m_chunks.size(); i++)
- {
- bChunkInd &dataChunk = m_chunks.at(i);
-
- // Ouch! need to rebuild the struct
- short *oldStruct, *curStruct;
- char *oldType, *newType;
- int oldLen, curLen, reverseOld;
-
- oldStruct = fileDna->getStruct(dataChunk.dna_nr);
- oldType = fileDna->getType(oldStruct[0]);
- oldLen = fileDna->getLength(oldStruct[0]);
- ///don't try to convert Link block data, just memcpy it. Other data can be converted.
- reverseOld = mMemoryDNA->getReverseType(oldType);
-
- if ((reverseOld != -1))
- {
- // make sure it's here
- //assert(reverseOld!= -1 && "getReverseType() returned -1, struct required!");
- //
- curStruct = mMemoryDNA->getStruct(reverseOld);
- newType = mMemoryDNA->getType(curStruct[0]);
- // make sure it's the same
- assert((strcmp(oldType, newType) == 0) && "internal error, struct mismatch!");
-
- curLen = mMemoryDNA->getLength(curStruct[0]);
- dataChunk.dna_nr = reverseOld;
- if (strcmp("Link", oldType) != 0)
- {
- dataChunk.len = curLen * dataChunk.nr;
- }
- else
- {
- // printf("keep length of link = %d\n",dataChunk.len);
- }
-
- //write the structure header
- fwrite(&dataChunk, sizeof(bChunkInd), 1, fp);
-
- short int *curStruct1;
- curStruct1 = mMemoryDNA->getStruct(dataChunk.dna_nr);
- assert(curStruct1 == curStruct);
-
- char *cur = fixupPointers ? (char *)findLibPointer(dataChunk.oldPtr) : (char *)dataChunk.oldPtr;
-
- //write the actual contents of the structure(s)
- fwrite(cur, dataChunk.len, 1, fp);
- }
- else
- {
- printf("serious error, struct mismatch: don't write\n");
- }
- }
-}
-
-// ----------------------------------------------------- //
-int bFile::getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags)
-{
- bool swap = false;
- bool varies = false;
-
- if (flags & FD_ENDIAN_SWAP)
- swap = true;
- if (flags & FD_BITS_VARIES)
- varies = true;
-
- if (VOID_IS_8)
- {
- if (varies)
- {
- bChunkPtr4 head;
- memcpy(&head, dataPtr, sizeof(bChunkPtr4));
-
- bChunkPtr8 chunk;
-
- chunk.code = head.code;
- chunk.len = head.len;
- chunk.m_uniqueInts[0] = head.m_uniqueInt;
- chunk.m_uniqueInts[1] = 0;
- chunk.dna_nr = head.dna_nr;
- chunk.nr = head.nr;
-
- if (swap)
- {
- if ((chunk.code & 0xFFFF) == 0)
- chunk.code >>= 16;
-
- B3_SWITCH_INT(chunk.len);
- B3_SWITCH_INT(chunk.dna_nr);
- B3_SWITCH_INT(chunk.nr);
- }
-
- memcpy(dataChunk, &chunk, sizeof(bChunkInd));
- }
- else
- {
- bChunkPtr8 c;
- memcpy(&c, dataPtr, sizeof(bChunkPtr8));
-
- if (swap)
- {
- if ((c.code & 0xFFFF) == 0)
- c.code >>= 16;
-
- B3_SWITCH_INT(c.len);
- B3_SWITCH_INT(c.dna_nr);
- B3_SWITCH_INT(c.nr);
- }
-
- memcpy(dataChunk, &c, sizeof(bChunkInd));
- }
- }
- else
- {
- if (varies)
- {
- bChunkPtr8 head;
- memcpy(&head, dataPtr, sizeof(bChunkPtr8));
-
- bChunkPtr4 chunk;
- chunk.code = head.code;
- chunk.len = head.len;
-
- if (head.m_uniqueInts[0] == head.m_uniqueInts[1])
- {
- chunk.m_uniqueInt = head.m_uniqueInts[0];
- }
- else
- {
- b3Long64 oldPtr = 0;
- memcpy(&oldPtr, &head.m_uniqueInts[0], 8);
- if (swap)
- B3_SWITCH_LONGINT(oldPtr);
- chunk.m_uniqueInt = (int)(oldPtr >> 3);
- }
-
- chunk.dna_nr = head.dna_nr;
- chunk.nr = head.nr;
-
- if (swap)
- {
- if ((chunk.code & 0xFFFF) == 0)
- chunk.code >>= 16;
-
- B3_SWITCH_INT(chunk.len);
- B3_SWITCH_INT(chunk.dna_nr);
- B3_SWITCH_INT(chunk.nr);
- }
-
- memcpy(dataChunk, &chunk, sizeof(bChunkInd));
- }
- else
- {
- bChunkPtr4 c;
- memcpy(&c, dataPtr, sizeof(bChunkPtr4));
-
- if (swap)
- {
- if ((c.code & 0xFFFF) == 0)
- c.code >>= 16;
-
- B3_SWITCH_INT(c.len);
- B3_SWITCH_INT(c.dna_nr);
- B3_SWITCH_INT(c.nr);
- }
- memcpy(dataChunk, &c, sizeof(bChunkInd));
- }
- }
-
- if (dataChunk->len < 0)
- return -1;
-
-#if 0
- print ("----------");
- print (dataChunk->code);
- print (dataChunk->len);
- print (dataChunk->old);
- print (dataChunk->dna_nr);
- print (dataChunk->nr);
-#endif
- return (dataChunk->len + ChunkUtils::getOffset(flags));
-}
-
-//eof
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h
deleted file mode 100644
index bda229cfbd..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3File.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
-bParse
-Copyright (c) 2006-2009 Charlie C & Erwin Coumans http://gamekit.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef __BFILE_H__
-#define __BFILE_H__
-
-#include "b3Common.h"
-#include "b3Chunk.h"
-#include <stdio.h>
-
-namespace bParse
-{
-// ----------------------------------------------------- //
-enum bFileFlags
-{
- FD_INVALID = 0,
- FD_OK = 1,
- FD_VOID_IS_8 = 2,
- FD_ENDIAN_SWAP = 4,
- FD_FILE_64 = 8,
- FD_BITS_VARIES = 16,
- FD_VERSION_VARIES = 32,
- FD_DOUBLE_PRECISION = 64,
- FD_BROKEN_DNA = 128
-};
-
-enum bFileVerboseMode
-{
- FD_VERBOSE_EXPORT_XML = 1,
- FD_VERBOSE_DUMP_DNA_TYPE_DEFINITIONS = 2,
- FD_VERBOSE_DUMP_CHUNKS = 4,
- FD_VERBOSE_DUMP_FILE_INFO = 8,
-};
-// ----------------------------------------------------- //
-class bFile
-{
-protected:
- char m_headerString[7];
-
- bool mOwnsBuffer;
- char *mFileBuffer;
- int mFileLen;
- int mVersion;
-
- bPtrMap mLibPointers;
-
- int mDataStart;
- bDNA *mFileDNA;
- bDNA *mMemoryDNA;
-
- b3AlignedObjectArray<char *> m_pointerFixupArray;
- b3AlignedObjectArray<char *> m_pointerPtrFixupArray;
-
- b3AlignedObjectArray<bChunkInd> m_chunks;
- b3HashMap<b3HashPtr, bChunkInd> m_chunkPtrPtrMap;
-
- //
-
- bPtrMap mDataPointers;
-
- int mFlags;
-
- // ////////////////////////////////////////////////////////////////////////////
-
- // buffer offset util
- int getNextBlock(bChunkInd *dataChunk, const char *dataPtr, const int flags);
- void safeSwapPtr(char *dst, const char *src);
-
- virtual void parseHeader();
-
- virtual void parseData() = 0;
-
- void resolvePointersMismatch();
- void resolvePointersChunk(const bChunkInd &dataChunk, int verboseMode);
-
- int resolvePointersStructRecursive(char *strcPtr, int old_dna, int verboseMode, int recursion);
- //void swapPtr(char *dst, char *src);
-
- void parseStruct(char *strcPtr, char *dtPtr, int old_dna, int new_dna, bool fixupPointers);
- void getMatchingFileDNA(short *old, const char *lookupName, const char *lookupType, char *strcData, char *data, bool fixupPointers);
- char *getFileElement(short *firstStruct, char *lookupName, char *lookupType, char *data, short **foundPos);
-
- void swap(char *head, class bChunkInd &ch, bool ignoreEndianFlag);
- void swapData(char *data, short type, int arraySize, bool ignoreEndianFlag);
- void swapStruct(int dna_nr, char *data, bool ignoreEndianFlag);
- void swapLen(char *dataPtr);
- void swapDNA(char *ptr);
-
- char *readStruct(char *head, class bChunkInd &chunk);
- char *getAsString(int code);
-
- void parseInternal(int verboseMode, char *memDna, int memDnaLength);
-
-public:
- bFile(const char *filename, const char headerString[7]);
-
- //todo: make memoryBuffer const char
- //bFile( const char *memoryBuffer, int len);
- bFile(char *memoryBuffer, int len, const char headerString[7]);
- virtual ~bFile();
-
- bDNA *getFileDNA()
- {
- return mFileDNA;
- }
-
- virtual void addDataBlock(char *dataBlock) = 0;
-
- int getFlags() const
- {
- return mFlags;
- }
-
- bPtrMap &getLibPointers()
- {
- return mLibPointers;
- }
-
- void *findLibPointer(void *ptr);
-
- bool ok();
-
- virtual void parse(int verboseMode) = 0;
-
- virtual int write(const char *fileName, bool fixupPointers = false) = 0;
-
- virtual void writeChunks(FILE *fp, bool fixupPointers);
-
- virtual void writeDNA(FILE *fp) = 0;
-
- void updateOldPointers();
- void resolvePointers(int verboseMode);
-
- void dumpChunks(bDNA *dna);
-
- int getVersion() const
- {
- return mVersion;
- }
- //pre-swap the endianness, so that data loaded on a target with different endianness doesn't need to be swapped
- void preSwap();
- void writeFile(const char *fileName);
-};
-} // namespace bParse
-
-#endif //__BFILE_H__
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp
deleted file mode 100644
index ea4a8e2007..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.cpp
+++ /dev/null
@@ -1,18062 +0,0 @@
-char b3s_bulletDNAstr[] = {
- char(83),
- char(68),
- char(78),
- char(65),
- char(78),
- char(65),
- char(77),
- char(69),
- char(63),
- char(1),
- char(0),
- char(0),
- char(109),
- char(95),
- char(115),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(97),
- char(112),
- char(97),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(42),
- char(109),
- char(95),
- char(100),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(42),
- char(102),
- char(105),
- char(114),
- char(115),
- char(116),
- char(0),
- char(42),
- char(108),
- char(97),
- char(115),
- char(116),
- char(0),
- char(109),
- char(95),
- char(102),
- char(108),
- char(111),
- char(97),
- char(116),
- char(115),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(101),
- char(108),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(98),
- char(97),
- char(115),
- char(105),
- char(115),
- char(0),
- char(109),
- char(95),
- char(111),
- char(114),
- char(105),
- char(103),
- char(105),
- char(110),
- char(0),
- char(109),
- char(95),
- char(114),
- char(111),
- char(111),
- char(116),
- char(78),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(115),
- char(117),
- char(98),
- char(116),
- char(114),
- char(101),
- char(101),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(105),
- char(110),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(97),
- char(120),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(97),
- char(97),
- char(98),
- char(98),
- char(77),
- char(105),
- char(110),
- char(79),
- char(114),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(97),
- char(98),
- char(98),
- char(77),
- char(97),
- char(120),
- char(79),
- char(114),
- char(103),
- char(0),
- char(109),
- char(95),
- char(101),
- char(115),
- char(99),
- char(97),
- char(112),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(115),
- char(117),
- char(98),
- char(80),
- char(97),
- char(114),
- char(116),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(101),
- char(115),
- char(99),
- char(97),
- char(112),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(79),
- char(114),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(104),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(105),
- char(110),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(104),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(97),
- char(120),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(104),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(117),
- char(114),
- char(78),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(76),
- char(101),
- char(97),
- char(102),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(67),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(67),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(115),
- char(117),
- char(98),
- char(84),
- char(114),
- char(101),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(97),
- char(118),
- char(101),
- char(114),
- char(115),
- char(97),
- char(108),
- char(77),
- char(111),
- char(100),
- char(101),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(83),
- char(117),
- char(98),
- char(116),
- char(114),
- char(101),
- char(101),
- char(72),
- char(101),
- char(97),
- char(100),
- char(101),
- char(114),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(104),
- char(97),
- char(112),
- char(101),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(100),
- char(105),
- char(110),
- char(103),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(83),
- char(99),
- char(97),
- char(108),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(112),
- char(108),
- char(97),
- char(110),
- char(101),
- char(78),
- char(111),
- char(114),
- char(109),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(112),
- char(108),
- char(97),
- char(110),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(97),
- char(110),
- char(116),
- char(0),
- char(109),
- char(95),
- char(105),
- char(109),
- char(112),
- char(108),
- char(105),
- char(99),
- char(105),
- char(116),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(105),
- char(109),
- char(101),
- char(110),
- char(115),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(77),
- char(97),
- char(114),
- char(103),
- char(105),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(100),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(0),
- char(109),
- char(95),
- char(114),
- char(97),
- char(100),
- char(105),
- char(117),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(110),
- char(97),
- char(108),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(42),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(118),
- char(97),
- char(108),
- char(117),
- char(101),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(118),
- char(97),
- char(108),
- char(117),
- char(101),
- char(115),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(0),
- char(42),
- char(109),
- char(95),
- char(118),
- char(101),
- char(114),
- char(116),
- char(105),
- char(99),
- char(101),
- char(115),
- char(51),
- char(102),
- char(0),
- char(42),
- char(109),
- char(95),
- char(118),
- char(101),
- char(114),
- char(116),
- char(105),
- char(99),
- char(101),
- char(115),
- char(51),
- char(100),
- char(0),
- char(42),
- char(109),
- char(95),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(51),
- char(50),
- char(0),
- char(42),
- char(109),
- char(95),
- char(51),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(49),
- char(54),
- char(0),
- char(42),
- char(109),
- char(95),
- char(51),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(56),
- char(0),
- char(42),
- char(109),
- char(95),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(49),
- char(54),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(86),
- char(101),
- char(114),
- char(116),
- char(105),
- char(99),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(109),
- char(101),
- char(115),
- char(104),
- char(80),
- char(97),
- char(114),
- char(116),
- char(115),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(115),
- char(99),
- char(97),
- char(108),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(77),
- char(101),
- char(115),
- char(104),
- char(80),
- char(97),
- char(114),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(109),
- char(101),
- char(115),
- char(104),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(102),
- char(97),
- char(99),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(66),
- char(118),
- char(104),
- char(0),
- char(42),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(66),
- char(118),
- char(104),
- char(0),
- char(42),
- char(109),
- char(95),
- char(116),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(77),
- char(97),
- char(112),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(51),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(105),
- char(109),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(77),
- char(97),
- char(114),
- char(103),
- char(105),
- char(110),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(117),
- char(112),
- char(65),
- char(120),
- char(105),
- char(115),
- char(0),
- char(109),
- char(95),
- char(102),
- char(108),
- char(97),
- char(103),
- char(115),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(86),
- char(48),
- char(86),
- char(49),
- char(65),
- char(110),
- char(103),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(86),
- char(49),
- char(86),
- char(50),
- char(65),
- char(110),
- char(103),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(86),
- char(50),
- char(86),
- char(48),
- char(65),
- char(110),
- char(103),
- char(108),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(104),
- char(97),
- char(115),
- char(104),
- char(84),
- char(97),
- char(98),
- char(108),
- char(101),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(101),
- char(120),
- char(116),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(118),
- char(97),
- char(108),
- char(117),
- char(101),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(107),
- char(101),
- char(121),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(69),
- char(112),
- char(115),
- char(105),
- char(108),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(108),
- char(97),
- char(110),
- char(97),
- char(114),
- char(69),
- char(112),
- char(115),
- char(105),
- char(108),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(101),
- char(113),
- char(117),
- char(97),
- char(108),
- char(86),
- char(101),
- char(114),
- char(116),
- char(101),
- char(120),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(68),
- char(105),
- char(115),
- char(116),
- char(97),
- char(110),
- char(99),
- char(101),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(122),
- char(101),
- char(114),
- char(111),
- char(65),
- char(114),
- char(101),
- char(97),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(110),
- char(101),
- char(120),
- char(116),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(104),
- char(97),
- char(115),
- char(104),
- char(84),
- char(97),
- char(98),
- char(108),
- char(101),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(86),
- char(97),
- char(108),
- char(117),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(75),
- char(101),
- char(121),
- char(115),
- char(0),
- char(109),
- char(95),
- char(103),
- char(105),
- char(109),
- char(112),
- char(97),
- char(99),
- char(116),
- char(83),
- char(117),
- char(98),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(117),
- char(110),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(117),
- char(110),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(85),
- char(110),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(100),
- char(105),
- char(110),
- char(103),
- char(51),
- char(91),
- char(52),
- char(93),
- char(0),
- char(42),
- char(109),
- char(95),
- char(98),
- char(114),
- char(111),
- char(97),
- char(100),
- char(112),
- char(104),
- char(97),
- char(115),
- char(101),
- char(72),
- char(97),
- char(110),
- char(100),
- char(108),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(111),
- char(111),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(119),
- char(111),
- char(114),
- char(108),
- char(100),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(112),
- char(111),
- char(108),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(112),
- char(111),
- char(108),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(76),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(112),
- char(111),
- char(108),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(105),
- char(115),
- char(111),
- char(116),
- char(114),
- char(111),
- char(112),
- char(105),
- char(99),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(80),
- char(114),
- char(111),
- char(99),
- char(101),
- char(115),
- char(115),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(100),
- char(101),
- char(97),
- char(99),
- char(116),
- char(105),
- char(118),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(105),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(102),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(114),
- char(111),
- char(108),
- char(108),
- char(105),
- char(110),
- char(103),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(105),
- char(116),
- char(117),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(104),
- char(105),
- char(116),
- char(70),
- char(114),
- char(97),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(99),
- char(100),
- char(83),
- char(119),
- char(101),
- char(112),
- char(116),
- char(83),
- char(112),
- char(104),
- char(101),
- char(114),
- char(101),
- char(82),
- char(97),
- char(100),
- char(105),
- char(117),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(99),
- char(100),
- char(77),
- char(111),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(104),
- char(97),
- char(115),
- char(65),
- char(110),
- char(105),
- char(115),
- char(111),
- char(116),
- char(114),
- char(111),
- char(112),
- char(105),
- char(99),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(70),
- char(108),
- char(97),
- char(103),
- char(115),
- char(0),
- char(109),
- char(95),
- char(105),
- char(115),
- char(108),
- char(97),
- char(110),
- char(100),
- char(84),
- char(97),
- char(103),
- char(49),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(109),
- char(112),
- char(97),
- char(110),
- char(105),
- char(111),
- char(110),
- char(73),
- char(100),
- char(0),
- char(109),
- char(95),
- char(97),
- char(99),
- char(116),
- char(105),
- char(118),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(83),
- char(116),
- char(97),
- char(116),
- char(101),
- char(49),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(110),
- char(97),
- char(108),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(104),
- char(101),
- char(99),
- char(107),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(100),
- char(101),
- char(87),
- char(105),
- char(116),
- char(104),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(110),
- char(102),
- char(111),
- char(0),
- char(109),
- char(95),
- char(103),
- char(114),
- char(97),
- char(118),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(73),
- char(110),
- char(101),
- char(114),
- char(116),
- char(105),
- char(97),
- char(84),
- char(101),
- char(110),
- char(115),
- char(111),
- char(114),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(103),
- char(114),
- char(97),
- char(118),
- char(105),
- char(116),
- char(121),
- char(95),
- char(97),
- char(99),
- char(99),
- char(101),
- char(108),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(73),
- char(110),
- char(101),
- char(114),
- char(116),
- char(105),
- char(97),
- char(76),
- char(111),
- char(99),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(116),
- char(111),
- char(116),
- char(97),
- char(108),
- char(70),
- char(111),
- char(114),
- char(99),
- char(101),
- char(0),
- char(109),
- char(95),
- char(116),
- char(111),
- char(116),
- char(97),
- char(108),
- char(84),
- char(111),
- char(114),
- char(113),
- char(117),
- char(101),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(101),
- char(114),
- char(115),
- char(101),
- char(77),
- char(97),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(76),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(83),
- char(113),
- char(114),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(83),
- char(113),
- char(114),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(83),
- char(108),
- char(101),
- char(101),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(83),
- char(108),
- char(101),
- char(101),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(82),
- char(111),
- char(119),
- char(115),
- char(0),
- char(110),
- char(117),
- char(98),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(98),
- char(65),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(98),
- char(66),
- char(0),
- char(109),
- char(95),
- char(111),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(73),
- char(100),
- char(0),
- char(109),
- char(95),
- char(110),
- char(101),
- char(101),
- char(100),
- char(115),
- char(70),
- char(101),
- char(101),
- char(100),
- char(98),
- char(97),
- char(99),
- char(107),
- char(0),
- char(109),
- char(95),
- char(97),
- char(112),
- char(112),
- char(108),
- char(105),
- char(101),
- char(100),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(98),
- char(103),
- char(68),
- char(114),
- char(97),
- char(119),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(105),
- char(115),
- char(97),
- char(98),
- char(108),
- char(101),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(115),
- char(66),
- char(101),
- char(116),
- char(119),
- char(101),
- char(101),
- char(110),
- char(76),
- char(105),
- char(110),
- char(107),
- char(101),
- char(100),
- char(66),
- char(111),
- char(100),
- char(105),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(111),
- char(118),
- char(101),
- char(114),
- char(114),
- char(105),
- char(100),
- char(101),
- char(78),
- char(117),
- char(109),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(98),
- char(114),
- char(101),
- char(97),
- char(107),
- char(105),
- char(110),
- char(103),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(105),
- char(115),
- char(69),
- char(110),
- char(97),
- char(98),
- char(108),
- char(101),
- char(100),
- char(0),
- char(109),
- char(95),
- char(116),
- char(121),
- char(112),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(112),
- char(105),
- char(118),
- char(111),
- char(116),
- char(73),
- char(110),
- char(65),
- char(0),
- char(109),
- char(95),
- char(112),
- char(105),
- char(118),
- char(111),
- char(116),
- char(73),
- char(110),
- char(66),
- char(0),
- char(109),
- char(95),
- char(114),
- char(98),
- char(65),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(114),
- char(98),
- char(66),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(82),
- char(101),
- char(102),
- char(101),
- char(114),
- char(101),
- char(110),
- char(99),
- char(101),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(65),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(79),
- char(110),
- char(108),
- char(121),
- char(0),
- char(109),
- char(95),
- char(101),
- char(110),
- char(97),
- char(98),
- char(108),
- char(101),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(77),
- char(111),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(109),
- char(111),
- char(116),
- char(111),
- char(114),
- char(84),
- char(97),
- char(114),
- char(103),
- char(101),
- char(116),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(77),
- char(111),
- char(116),
- char(111),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(119),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(117),
- char(112),
- char(112),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(109),
- char(105),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(98),
- char(105),
- char(97),
- char(115),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(108),
- char(97),
- char(120),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(115),
- char(119),
- char(105),
- char(110),
- char(103),
- char(83),
- char(112),
- char(97),
- char(110),
- char(49),
- char(0),
- char(109),
- char(95),
- char(115),
- char(119),
- char(105),
- char(110),
- char(103),
- char(83),
- char(112),
- char(97),
- char(110),
- char(50),
- char(0),
- char(109),
- char(95),
- char(116),
- char(119),
- char(105),
- char(115),
- char(116),
- char(83),
- char(112),
- char(97),
- char(110),
- char(0),
- char(109),
- char(95),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(85),
- char(112),
- char(112),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(76),
- char(111),
- char(119),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(85),
- char(112),
- char(112),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(76),
- char(111),
- char(119),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(76),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(82),
- char(101),
- char(102),
- char(101),
- char(114),
- char(101),
- char(110),
- char(99),
- char(101),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(65),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(79),
- char(102),
- char(102),
- char(115),
- char(101),
- char(116),
- char(70),
- char(111),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(54),
- char(100),
- char(111),
- char(102),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(69),
- char(110),
- char(97),
- char(98),
- char(108),
- char(101),
- char(100),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(101),
- char(113),
- char(117),
- char(105),
- char(108),
- char(105),
- char(98),
- char(114),
- char(105),
- char(117),
- char(109),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(116),
- char(97),
- char(117),
- char(0),
- char(109),
- char(95),
- char(116),
- char(105),
- char(109),
- char(101),
- char(83),
- char(116),
- char(101),
- char(112),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(69),
- char(114),
- char(114),
- char(111),
- char(114),
- char(82),
- char(101),
- char(100),
- char(117),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(101),
- char(114),
- char(112),
- char(0),
- char(109),
- char(95),
- char(101),
- char(114),
- char(112),
- char(50),
- char(0),
- char(109),
- char(95),
- char(103),
- char(108),
- char(111),
- char(98),
- char(97),
- char(108),
- char(67),
- char(102),
- char(109),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(80),
- char(101),
- char(110),
- char(101),
- char(116),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(84),
- char(117),
- char(114),
- char(110),
- char(69),
- char(114),
- char(112),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(83),
- char(108),
- char(111),
- char(112),
- char(0),
- char(109),
- char(95),
- char(119),
- char(97),
- char(114),
- char(109),
- char(115),
- char(116),
- char(97),
- char(114),
- char(116),
- char(105),
- char(110),
- char(103),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(71),
- char(121),
- char(114),
- char(111),
- char(115),
- char(99),
- char(111),
- char(112),
- char(105),
- char(99),
- char(70),
- char(111),
- char(114),
- char(99),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(105),
- char(110),
- char(103),
- char(108),
- char(101),
- char(65),
- char(120),
- char(105),
- char(115),
- char(82),
- char(111),
- char(108),
- char(108),
- char(105),
- char(110),
- char(103),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(77),
- char(111),
- char(100),
- char(101),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(105),
- char(110),
- char(103),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(82),
- char(101),
- char(115),
- char(116),
- char(105),
- char(116),
- char(117),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(109),
- char(105),
- char(110),
- char(105),
- char(109),
- char(117),
- char(109),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(66),
- char(97),
- char(116),
- char(99),
- char(104),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(118),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(109),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(114),
- char(101),
- char(118),
- char(105),
- char(111),
- char(117),
- char(115),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(118),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(99),
- char(99),
- char(117),
- char(109),
- char(117),
- char(108),
- char(97),
- char(116),
- char(101),
- char(100),
- char(70),
- char(111),
- char(114),
- char(99),
- char(101),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(114),
- char(109),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(97),
- char(114),
- char(101),
- char(97),
- char(0),
- char(109),
- char(95),
- char(97),
- char(116),
- char(116),
- char(97),
- char(99),
- char(104),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(76),
- char(101),
- char(110),
- char(103),
- char(116),
- char(104),
- char(0),
- char(109),
- char(95),
- char(98),
- char(98),
- char(101),
- char(110),
- char(100),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(65),
- char(114),
- char(101),
- char(97),
- char(0),
- char(109),
- char(95),
- char(99),
- char(48),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(86),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(49),
- char(0),
- char(109),
- char(95),
- char(99),
- char(50),
- char(0),
- char(109),
- char(95),
- char(99),
- char(48),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(97),
- char(101),
- char(114),
- char(111),
- char(77),
- char(111),
- char(100),
- char(101),
- char(108),
- char(0),
- char(109),
- char(95),
- char(98),
- char(97),
- char(117),
- char(109),
- char(103),
- char(97),
- char(114),
- char(116),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(114),
- char(97),
- char(103),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(102),
- char(116),
- char(0),
- char(109),
- char(95),
- char(112),
- char(114),
- char(101),
- char(115),
- char(115),
- char(117),
- char(114),
- char(101),
- char(0),
- char(109),
- char(95),
- char(118),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(121),
- char(110),
- char(97),
- char(109),
- char(105),
- char(99),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(101),
- char(77),
- char(97),
- char(116),
- char(99),
- char(104),
- char(0),
- char(109),
- char(95),
- char(114),
- char(105),
- char(103),
- char(105),
- char(100),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(107),
- char(105),
- char(110),
- char(101),
- char(116),
- char(105),
- char(99),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(75),
- char(105),
- char(110),
- char(101),
- char(116),
- char(105),
- char(99),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(83),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(75),
- char(105),
- char(110),
- char(101),
- char(116),
- char(105),
- char(99),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(83),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(83),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(86),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(116),
- char(105),
- char(109),
- char(101),
- char(83),
- char(99),
- char(97),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(118),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(100),
- char(114),
- char(105),
- char(102),
- char(116),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(114),
- char(111),
- char(116),
- char(0),
- char(109),
- char(95),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(97),
- char(113),
- char(113),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(109),
- char(0),
- char(42),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(119),
- char(101),
- char(105),
- char(103),
- char(104),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(87),
- char(101),
- char(105),
- char(103),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(98),
- char(102),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(102),
- char(114),
- char(97),
- char(109),
- char(101),
- char(120),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(105),
- char(105),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(119),
- char(105),
- char(0),
- char(109),
- char(95),
- char(118),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(100),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(108),
- char(118),
- char(0),
- char(109),
- char(95),
- char(97),
- char(118),
- char(0),
- char(42),
- char(109),
- char(95),
- char(102),
- char(114),
- char(97),
- char(109),
- char(101),
- char(114),
- char(101),
- char(102),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(109),
- char(97),
- char(115),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(82),
- char(101),
- char(102),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(77),
- char(97),
- char(115),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(105),
- char(100),
- char(109),
- char(97),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(105),
- char(109),
- char(97),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(118),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(100),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(108),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(116),
- char(99),
- char(104),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(83),
- char(101),
- char(108),
- char(102),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(101),
- char(108),
- char(102),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(116),
- char(97),
- char(105),
- char(110),
- char(115),
- char(65),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(100),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(42),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(65),
- char(0),
- char(42),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(66),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(102),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(99),
- char(102),
- char(109),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(100),
- char(101),
- char(108),
- char(101),
- char(116),
- char(101),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(108),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(65),
- char(116),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(66),
- char(116),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(106),
- char(111),
- char(105),
- char(110),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(101),
- char(0),
- char(42),
- char(42),
- char(109),
- char(95),
- char(109),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(107),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(102),
- char(97),
- char(99),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(116),
- char(101),
- char(116),
- char(114),
- char(97),
- char(104),
- char(101),
- char(100),
- char(114),
- char(97),
- char(0),
- char(42),
- char(109),
- char(95),
- char(97),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(106),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(77),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(76),
- char(105),
- char(110),
- char(107),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(70),
- char(97),
- char(99),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(84),
- char(101),
- char(116),
- char(114),
- char(97),
- char(104),
- char(101),
- char(100),
- char(114),
- char(97),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(65),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(74),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(102),
- char(105),
- char(103),
- char(0),
- char(84),
- char(89),
- char(80),
- char(69),
- char(76),
- char(0),
- char(0),
- char(0),
- char(99),
- char(104),
- char(97),
- char(114),
- char(0),
- char(117),
- char(99),
- char(104),
- char(97),
- char(114),
- char(0),
- char(115),
- char(104),
- char(111),
- char(114),
- char(116),
- char(0),
- char(117),
- char(115),
- char(104),
- char(111),
- char(114),
- char(116),
- char(0),
- char(105),
- char(110),
- char(116),
- char(0),
- char(108),
- char(111),
- char(110),
- char(103),
- char(0),
- char(117),
- char(108),
- char(111),
- char(110),
- char(103),
- char(0),
- char(102),
- char(108),
- char(111),
- char(97),
- char(116),
- char(0),
- char(100),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(0),
- char(118),
- char(111),
- char(105),
- char(100),
- char(0),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(0),
- char(98),
- char(116),
- char(80),
- char(104),
- char(121),
- char(115),
- char(105),
- char(99),
- char(115),
- char(83),
- char(121),
- char(115),
- char(116),
- char(101),
- char(109),
- char(0),
- char(76),
- char(105),
- char(115),
- char(116),
- char(66),
- char(97),
- char(115),
- char(101),
- char(0),
- char(98),
- char(116),
- char(86),
- char(101),
- char(99),
- char(116),
- char(111),
- char(114),
- char(51),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(86),
- char(101),
- char(99),
- char(116),
- char(111),
- char(114),
- char(51),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(77),
- char(97),
- char(116),
- char(114),
- char(105),
- char(120),
- char(51),
- char(120),
- char(51),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(77),
- char(97),
- char(116),
- char(114),
- char(105),
- char(120),
- char(51),
- char(120),
- char(51),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(66),
- char(118),
- char(104),
- char(83),
- char(117),
- char(98),
- char(116),
- char(114),
- char(101),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(79),
- char(112),
- char(116),
- char(105),
- char(109),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(78),
- char(111),
- char(100),
- char(101),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(79),
- char(112),
- char(116),
- char(105),
- char(109),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(78),
- char(111),
- char(100),
- char(101),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(78),
- char(111),
- char(100),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(116),
- char(97),
- char(116),
- char(105),
- char(99),
- char(80),
- char(108),
- char(97),
- char(110),
- char(101),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(110),
- char(97),
- char(108),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(110),
- char(100),
- char(82),
- char(97),
- char(100),
- char(105),
- char(117),
- char(115),
- char(0),
- char(98),
- char(116),
- char(77),
- char(117),
- char(108),
- char(116),
- char(105),
- char(83),
- char(112),
- char(104),
- char(101),
- char(114),
- char(101),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(73),
- char(110),
- char(116),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(104),
- char(111),
- char(114),
- char(116),
- char(73),
- char(110),
- char(116),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(104),
- char(111),
- char(114),
- char(116),
- char(73),
- char(110),
- char(116),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(84),
- char(114),
- char(105),
- char(112),
- char(108),
- char(101),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(104),
- char(97),
- char(114),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(84),
- char(114),
- char(105),
- char(112),
- char(108),
- char(101),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(77),
- char(101),
- char(115),
- char(104),
- char(80),
- char(97),
- char(114),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(116),
- char(114),
- char(105),
- char(100),
- char(105),
- char(110),
- char(103),
- char(77),
- char(101),
- char(115),
- char(104),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(102),
- char(97),
- char(99),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(77),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(77),
- char(97),
- char(112),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(77),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(109),
- char(112),
- char(111),
- char(117),
- char(110),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(67),
- char(104),
- char(105),
- char(108),
- char(100),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(109),
- char(112),
- char(111),
- char(117),
- char(110),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(121),
- char(108),
- char(105),
- char(110),
- char(100),
- char(101),
- char(114),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(97),
- char(112),
- char(115),
- char(117),
- char(108),
- char(101),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(71),
- char(73),
- char(109),
- char(112),
- char(97),
- char(99),
- char(116),
- char(77),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(72),
- char(117),
- char(108),
- char(108),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(68),
- char(121),
- char(110),
- char(97),
- char(109),
- char(105),
- char(99),
- char(115),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(110),
- char(102),
- char(111),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(68),
- char(121),
- char(110),
- char(97),
- char(109),
- char(105),
- char(99),
- char(115),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(110),
- char(102),
- char(111),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(73),
- char(110),
- char(102),
- char(111),
- char(49),
- char(0),
- char(98),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(100),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(50),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(50),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(72),
- char(105),
- char(110),
- char(103),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(72),
- char(105),
- char(110),
- char(103),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(101),
- char(84),
- char(119),
- char(105),
- char(115),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(71),
- char(101),
- char(110),
- char(101),
- char(114),
- char(105),
- char(99),
- char(54),
- char(68),
- char(111),
- char(102),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(71),
- char(101),
- char(110),
- char(101),
- char(114),
- char(105),
- char(99),
- char(54),
- char(68),
- char(111),
- char(102),
- char(83),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(108),
- char(105),
- char(100),
- char(101),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(77),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(78),
- char(111),
- char(100),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(76),
- char(105),
- char(110),
- char(107),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(70),
- char(97),
- char(99),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(84),
- char(101),
- char(116),
- char(114),
- char(97),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(65),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(67),
- char(111),
- char(110),
- char(102),
- char(105),
- char(103),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(80),
- char(111),
- char(115),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(74),
- char(111),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(0),
- char(0),
- char(84),
- char(76),
- char(69),
- char(78),
- char(1),
- char(0),
- char(1),
- char(0),
- char(2),
- char(0),
- char(2),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(8),
- char(0),
- char(0),
- char(0),
- char(12),
- char(0),
- char(36),
- char(0),
- char(8),
- char(0),
- char(16),
- char(0),
- char(32),
- char(0),
- char(48),
- char(0),
- char(96),
- char(0),
- char(64),
- char(0),
- char(-128),
- char(0),
- char(20),
- char(0),
- char(48),
- char(0),
- char(80),
- char(0),
- char(16),
- char(0),
- char(84),
- char(0),
- char(-124),
- char(0),
- char(12),
- char(0),
- char(52),
- char(0),
- char(52),
- char(0),
- char(20),
- char(0),
- char(64),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(8),
- char(0),
- char(4),
- char(0),
- char(32),
- char(0),
- char(28),
- char(0),
- char(60),
- char(0),
- char(56),
- char(0),
- char(76),
- char(0),
- char(76),
- char(0),
- char(24),
- char(0),
- char(60),
- char(0),
- char(60),
- char(0),
- char(16),
- char(0),
- char(64),
- char(0),
- char(68),
- char(0),
- char(-48),
- char(1),
- char(0),
- char(1),
- char(-72),
- char(0),
- char(-104),
- char(0),
- char(104),
- char(0),
- char(88),
- char(0),
- char(-24),
- char(1),
- char(-96),
- char(3),
- char(8),
- char(0),
- char(52),
- char(0),
- char(0),
- char(0),
- char(84),
- char(0),
- char(116),
- char(0),
- char(92),
- char(1),
- char(-36),
- char(0),
- char(-44),
- char(0),
- char(-4),
- char(0),
- char(92),
- char(1),
- char(-52),
- char(0),
- char(16),
- char(0),
- char(100),
- char(0),
- char(20),
- char(0),
- char(36),
- char(0),
- char(100),
- char(0),
- char(92),
- char(0),
- char(104),
- char(0),
- char(-64),
- char(0),
- char(92),
- char(1),
- char(104),
- char(0),
- char(-84),
- char(1),
- char(83),
- char(84),
- char(82),
- char(67),
- char(65),
- char(0),
- char(0),
- char(0),
- char(10),
- char(0),
- char(3),
- char(0),
- char(4),
- char(0),
- char(0),
- char(0),
- char(4),
- char(0),
- char(1),
- char(0),
- char(9),
- char(0),
- char(2),
- char(0),
- char(11),
- char(0),
- char(3),
- char(0),
- char(10),
- char(0),
- char(3),
- char(0),
- char(10),
- char(0),
- char(4),
- char(0),
- char(10),
- char(0),
- char(5),
- char(0),
- char(12),
- char(0),
- char(2),
- char(0),
- char(9),
- char(0),
- char(6),
- char(0),
- char(9),
- char(0),
- char(7),
- char(0),
- char(13),
- char(0),
- char(1),
- char(0),
- char(7),
- char(0),
- char(8),
- char(0),
- char(14),
- char(0),
- char(1),
- char(0),
- char(8),
- char(0),
- char(8),
- char(0),
- char(15),
- char(0),
- char(1),
- char(0),
- char(13),
- char(0),
- char(9),
- char(0),
- char(16),
- char(0),
- char(1),
- char(0),
- char(14),
- char(0),
- char(9),
- char(0),
- char(17),
- char(0),
- char(2),
- char(0),
- char(15),
- char(0),
- char(10),
- char(0),
- char(13),
- char(0),
- char(11),
- char(0),
- char(18),
- char(0),
- char(2),
- char(0),
- char(16),
- char(0),
- char(10),
- char(0),
- char(14),
- char(0),
- char(11),
- char(0),
- char(19),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(12),
- char(0),
- char(4),
- char(0),
- char(13),
- char(0),
- char(2),
- char(0),
- char(14),
- char(0),
- char(2),
- char(0),
- char(15),
- char(0),
- char(20),
- char(0),
- char(6),
- char(0),
- char(13),
- char(0),
- char(16),
- char(0),
- char(13),
- char(0),
- char(17),
- char(0),
- char(4),
- char(0),
- char(18),
- char(0),
- char(4),
- char(0),
- char(19),
- char(0),
- char(4),
- char(0),
- char(20),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(21),
- char(0),
- char(6),
- char(0),
- char(14),
- char(0),
- char(16),
- char(0),
- char(14),
- char(0),
- char(17),
- char(0),
- char(4),
- char(0),
- char(18),
- char(0),
- char(4),
- char(0),
- char(19),
- char(0),
- char(4),
- char(0),
- char(20),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(22),
- char(0),
- char(3),
- char(0),
- char(2),
- char(0),
- char(14),
- char(0),
- char(2),
- char(0),
- char(15),
- char(0),
- char(4),
- char(0),
- char(22),
- char(0),
- char(23),
- char(0),
- char(12),
- char(0),
- char(13),
- char(0),
- char(23),
- char(0),
- char(13),
- char(0),
- char(24),
- char(0),
- char(13),
- char(0),
- char(25),
- char(0),
- char(4),
- char(0),
- char(26),
- char(0),
- char(4),
- char(0),
- char(27),
- char(0),
- char(4),
- char(0),
- char(28),
- char(0),
- char(4),
- char(0),
- char(29),
- char(0),
- char(20),
- char(0),
- char(30),
- char(0),
- char(22),
- char(0),
- char(31),
- char(0),
- char(19),
- char(0),
- char(32),
- char(0),
- char(4),
- char(0),
- char(33),
- char(0),
- char(4),
- char(0),
- char(34),
- char(0),
- char(24),
- char(0),
- char(12),
- char(0),
- char(14),
- char(0),
- char(23),
- char(0),
- char(14),
- char(0),
- char(24),
- char(0),
- char(14),
- char(0),
- char(25),
- char(0),
- char(4),
- char(0),
- char(26),
- char(0),
- char(4),
- char(0),
- char(27),
- char(0),
- char(4),
- char(0),
- char(28),
- char(0),
- char(4),
- char(0),
- char(29),
- char(0),
- char(21),
- char(0),
- char(30),
- char(0),
- char(22),
- char(0),
- char(31),
- char(0),
- char(4),
- char(0),
- char(33),
- char(0),
- char(4),
- char(0),
- char(34),
- char(0),
- char(19),
- char(0),
- char(32),
- char(0),
- char(25),
- char(0),
- char(3),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(4),
- char(0),
- char(36),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(26),
- char(0),
- char(5),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(13),
- char(0),
- char(40),
- char(0),
- char(7),
- char(0),
- char(41),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(27),
- char(0),
- char(5),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(13),
- char(0),
- char(42),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(4),
- char(0),
- char(44),
- char(0),
- char(28),
- char(0),
- char(2),
- char(0),
- char(13),
- char(0),
- char(45),
- char(0),
- char(7),
- char(0),
- char(46),
- char(0),
- char(29),
- char(0),
- char(4),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(28),
- char(0),
- char(48),
- char(0),
- char(4),
- char(0),
- char(49),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(30),
- char(0),
- char(1),
- char(0),
- char(4),
- char(0),
- char(50),
- char(0),
- char(31),
- char(0),
- char(2),
- char(0),
- char(2),
- char(0),
- char(50),
- char(0),
- char(0),
- char(0),
- char(51),
- char(0),
- char(32),
- char(0),
- char(2),
- char(0),
- char(2),
- char(0),
- char(52),
- char(0),
- char(0),
- char(0),
- char(51),
- char(0),
- char(33),
- char(0),
- char(2),
- char(0),
- char(0),
- char(0),
- char(52),
- char(0),
- char(0),
- char(0),
- char(53),
- char(0),
- char(34),
- char(0),
- char(8),
- char(0),
- char(13),
- char(0),
- char(54),
- char(0),
- char(14),
- char(0),
- char(55),
- char(0),
- char(30),
- char(0),
- char(56),
- char(0),
- char(32),
- char(0),
- char(57),
- char(0),
- char(33),
- char(0),
- char(58),
- char(0),
- char(31),
- char(0),
- char(59),
- char(0),
- char(4),
- char(0),
- char(60),
- char(0),
- char(4),
- char(0),
- char(61),
- char(0),
- char(35),
- char(0),
- char(4),
- char(0),
- char(34),
- char(0),
- char(62),
- char(0),
- char(13),
- char(0),
- char(63),
- char(0),
- char(4),
- char(0),
- char(64),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(36),
- char(0),
- char(7),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(35),
- char(0),
- char(65),
- char(0),
- char(23),
- char(0),
- char(66),
- char(0),
- char(24),
- char(0),
- char(67),
- char(0),
- char(37),
- char(0),
- char(68),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(0),
- char(0),
- char(69),
- char(0),
- char(38),
- char(0),
- char(2),
- char(0),
- char(36),
- char(0),
- char(70),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(39),
- char(0),
- char(4),
- char(0),
- char(17),
- char(0),
- char(71),
- char(0),
- char(25),
- char(0),
- char(72),
- char(0),
- char(4),
- char(0),
- char(73),
- char(0),
- char(7),
- char(0),
- char(74),
- char(0),
- char(40),
- char(0),
- char(4),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(39),
- char(0),
- char(75),
- char(0),
- char(4),
- char(0),
- char(76),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(41),
- char(0),
- char(3),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(4),
- char(0),
- char(77),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(42),
- char(0),
- char(3),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(4),
- char(0),
- char(77),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(43),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(78),
- char(0),
- char(7),
- char(0),
- char(79),
- char(0),
- char(7),
- char(0),
- char(80),
- char(0),
- char(7),
- char(0),
- char(81),
- char(0),
- char(37),
- char(0),
- char(14),
- char(0),
- char(4),
- char(0),
- char(82),
- char(0),
- char(4),
- char(0),
- char(83),
- char(0),
- char(43),
- char(0),
- char(84),
- char(0),
- char(4),
- char(0),
- char(85),
- char(0),
- char(7),
- char(0),
- char(86),
- char(0),
- char(7),
- char(0),
- char(87),
- char(0),
- char(7),
- char(0),
- char(88),
- char(0),
- char(7),
- char(0),
- char(89),
- char(0),
- char(7),
- char(0),
- char(90),
- char(0),
- char(4),
- char(0),
- char(91),
- char(0),
- char(4),
- char(0),
- char(92),
- char(0),
- char(4),
- char(0),
- char(93),
- char(0),
- char(4),
- char(0),
- char(94),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(44),
- char(0),
- char(5),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(35),
- char(0),
- char(65),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(4),
- char(0),
- char(95),
- char(0),
- char(45),
- char(0),
- char(5),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(13),
- char(0),
- char(96),
- char(0),
- char(14),
- char(0),
- char(97),
- char(0),
- char(4),
- char(0),
- char(98),
- char(0),
- char(0),
- char(0),
- char(99),
- char(0),
- char(46),
- char(0),
- char(25),
- char(0),
- char(9),
- char(0),
- char(100),
- char(0),
- char(9),
- char(0),
- char(101),
- char(0),
- char(25),
- char(0),
- char(102),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(18),
- char(0),
- char(103),
- char(0),
- char(18),
- char(0),
- char(104),
- char(0),
- char(14),
- char(0),
- char(105),
- char(0),
- char(14),
- char(0),
- char(106),
- char(0),
- char(14),
- char(0),
- char(107),
- char(0),
- char(8),
- char(0),
- char(108),
- char(0),
- char(8),
- char(0),
- char(109),
- char(0),
- char(8),
- char(0),
- char(110),
- char(0),
- char(8),
- char(0),
- char(111),
- char(0),
- char(8),
- char(0),
- char(112),
- char(0),
- char(8),
- char(0),
- char(113),
- char(0),
- char(8),
- char(0),
- char(114),
- char(0),
- char(8),
- char(0),
- char(115),
- char(0),
- char(4),
- char(0),
- char(116),
- char(0),
- char(4),
- char(0),
- char(117),
- char(0),
- char(4),
- char(0),
- char(118),
- char(0),
- char(4),
- char(0),
- char(119),
- char(0),
- char(4),
- char(0),
- char(120),
- char(0),
- char(4),
- char(0),
- char(121),
- char(0),
- char(4),
- char(0),
- char(122),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(47),
- char(0),
- char(25),
- char(0),
- char(9),
- char(0),
- char(100),
- char(0),
- char(9),
- char(0),
- char(101),
- char(0),
- char(25),
- char(0),
- char(102),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(17),
- char(0),
- char(103),
- char(0),
- char(17),
- char(0),
- char(104),
- char(0),
- char(13),
- char(0),
- char(105),
- char(0),
- char(13),
- char(0),
- char(106),
- char(0),
- char(13),
- char(0),
- char(107),
- char(0),
- char(7),
- char(0),
- char(108),
- char(0),
- char(7),
- char(0),
- char(109),
- char(0),
- char(7),
- char(0),
- char(110),
- char(0),
- char(7),
- char(0),
- char(111),
- char(0),
- char(7),
- char(0),
- char(112),
- char(0),
- char(7),
- char(0),
- char(113),
- char(0),
- char(7),
- char(0),
- char(114),
- char(0),
- char(7),
- char(0),
- char(115),
- char(0),
- char(4),
- char(0),
- char(116),
- char(0),
- char(4),
- char(0),
- char(117),
- char(0),
- char(4),
- char(0),
- char(118),
- char(0),
- char(4),
- char(0),
- char(119),
- char(0),
- char(4),
- char(0),
- char(120),
- char(0),
- char(4),
- char(0),
- char(121),
- char(0),
- char(4),
- char(0),
- char(122),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(48),
- char(0),
- char(2),
- char(0),
- char(49),
- char(0),
- char(123),
- char(0),
- char(14),
- char(0),
- char(124),
- char(0),
- char(50),
- char(0),
- char(2),
- char(0),
- char(51),
- char(0),
- char(123),
- char(0),
- char(13),
- char(0),
- char(124),
- char(0),
- char(52),
- char(0),
- char(21),
- char(0),
- char(47),
- char(0),
- char(125),
- char(0),
- char(15),
- char(0),
- char(126),
- char(0),
- char(13),
- char(0),
- char(127),
- char(0),
- char(13),
- char(0),
- char(-128),
- char(0),
- char(13),
- char(0),
- char(-127),
- char(0),
- char(13),
- char(0),
- char(-126),
- char(0),
- char(13),
- char(0),
- char(124),
- char(0),
- char(13),
- char(0),
- char(-125),
- char(0),
- char(13),
- char(0),
- char(-124),
- char(0),
- char(13),
- char(0),
- char(-123),
- char(0),
- char(13),
- char(0),
- char(-122),
- char(0),
- char(7),
- char(0),
- char(-121),
- char(0),
- char(7),
- char(0),
- char(-120),
- char(0),
- char(7),
- char(0),
- char(-119),
- char(0),
- char(7),
- char(0),
- char(-118),
- char(0),
- char(7),
- char(0),
- char(-117),
- char(0),
- char(7),
- char(0),
- char(-116),
- char(0),
- char(7),
- char(0),
- char(-115),
- char(0),
- char(7),
- char(0),
- char(-114),
- char(0),
- char(7),
- char(0),
- char(-113),
- char(0),
- char(4),
- char(0),
- char(-112),
- char(0),
- char(53),
- char(0),
- char(22),
- char(0),
- char(46),
- char(0),
- char(125),
- char(0),
- char(16),
- char(0),
- char(126),
- char(0),
- char(14),
- char(0),
- char(127),
- char(0),
- char(14),
- char(0),
- char(-128),
- char(0),
- char(14),
- char(0),
- char(-127),
- char(0),
- char(14),
- char(0),
- char(-126),
- char(0),
- char(14),
- char(0),
- char(124),
- char(0),
- char(14),
- char(0),
- char(-125),
- char(0),
- char(14),
- char(0),
- char(-124),
- char(0),
- char(14),
- char(0),
- char(-123),
- char(0),
- char(14),
- char(0),
- char(-122),
- char(0),
- char(8),
- char(0),
- char(-121),
- char(0),
- char(8),
- char(0),
- char(-120),
- char(0),
- char(8),
- char(0),
- char(-119),
- char(0),
- char(8),
- char(0),
- char(-118),
- char(0),
- char(8),
- char(0),
- char(-117),
- char(0),
- char(8),
- char(0),
- char(-116),
- char(0),
- char(8),
- char(0),
- char(-115),
- char(0),
- char(8),
- char(0),
- char(-114),
- char(0),
- char(8),
- char(0),
- char(-113),
- char(0),
- char(4),
- char(0),
- char(-112),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(54),
- char(0),
- char(2),
- char(0),
- char(4),
- char(0),
- char(-111),
- char(0),
- char(4),
- char(0),
- char(-110),
- char(0),
- char(55),
- char(0),
- char(13),
- char(0),
- char(56),
- char(0),
- char(-109),
- char(0),
- char(56),
- char(0),
- char(-108),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(4),
- char(0),
- char(-107),
- char(0),
- char(4),
- char(0),
- char(-106),
- char(0),
- char(4),
- char(0),
- char(-105),
- char(0),
- char(4),
- char(0),
- char(-104),
- char(0),
- char(7),
- char(0),
- char(-103),
- char(0),
- char(7),
- char(0),
- char(-102),
- char(0),
- char(4),
- char(0),
- char(-101),
- char(0),
- char(4),
- char(0),
- char(-100),
- char(0),
- char(7),
- char(0),
- char(-99),
- char(0),
- char(4),
- char(0),
- char(-98),
- char(0),
- char(57),
- char(0),
- char(3),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(13),
- char(0),
- char(-96),
- char(0),
- char(13),
- char(0),
- char(-95),
- char(0),
- char(58),
- char(0),
- char(3),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(14),
- char(0),
- char(-96),
- char(0),
- char(14),
- char(0),
- char(-95),
- char(0),
- char(59),
- char(0),
- char(13),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(18),
- char(0),
- char(-94),
- char(0),
- char(18),
- char(0),
- char(-93),
- char(0),
- char(4),
- char(0),
- char(-92),
- char(0),
- char(4),
- char(0),
- char(-91),
- char(0),
- char(4),
- char(0),
- char(-90),
- char(0),
- char(7),
- char(0),
- char(-89),
- char(0),
- char(7),
- char(0),
- char(-88),
- char(0),
- char(7),
- char(0),
- char(-87),
- char(0),
- char(7),
- char(0),
- char(-86),
- char(0),
- char(7),
- char(0),
- char(-85),
- char(0),
- char(7),
- char(0),
- char(-84),
- char(0),
- char(7),
- char(0),
- char(-83),
- char(0),
- char(60),
- char(0),
- char(13),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(4),
- char(0),
- char(-92),
- char(0),
- char(4),
- char(0),
- char(-91),
- char(0),
- char(4),
- char(0),
- char(-90),
- char(0),
- char(7),
- char(0),
- char(-89),
- char(0),
- char(7),
- char(0),
- char(-88),
- char(0),
- char(7),
- char(0),
- char(-87),
- char(0),
- char(7),
- char(0),
- char(-86),
- char(0),
- char(7),
- char(0),
- char(-85),
- char(0),
- char(7),
- char(0),
- char(-84),
- char(0),
- char(7),
- char(0),
- char(-83),
- char(0),
- char(61),
- char(0),
- char(11),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(7),
- char(0),
- char(-82),
- char(0),
- char(7),
- char(0),
- char(-81),
- char(0),
- char(7),
- char(0),
- char(-80),
- char(0),
- char(7),
- char(0),
- char(-85),
- char(0),
- char(7),
- char(0),
- char(-84),
- char(0),
- char(7),
- char(0),
- char(-83),
- char(0),
- char(7),
- char(0),
- char(-79),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(62),
- char(0),
- char(9),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(13),
- char(0),
- char(-78),
- char(0),
- char(13),
- char(0),
- char(-77),
- char(0),
- char(13),
- char(0),
- char(-76),
- char(0),
- char(13),
- char(0),
- char(-75),
- char(0),
- char(4),
- char(0),
- char(-74),
- char(0),
- char(4),
- char(0),
- char(-73),
- char(0),
- char(63),
- char(0),
- char(5),
- char(0),
- char(62),
- char(0),
- char(-72),
- char(0),
- char(4),
- char(0),
- char(-71),
- char(0),
- char(7),
- char(0),
- char(-70),
- char(0),
- char(7),
- char(0),
- char(-69),
- char(0),
- char(7),
- char(0),
- char(-68),
- char(0),
- char(64),
- char(0),
- char(9),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(7),
- char(0),
- char(-78),
- char(0),
- char(7),
- char(0),
- char(-77),
- char(0),
- char(7),
- char(0),
- char(-76),
- char(0),
- char(7),
- char(0),
- char(-75),
- char(0),
- char(4),
- char(0),
- char(-74),
- char(0),
- char(4),
- char(0),
- char(-73),
- char(0),
- char(49),
- char(0),
- char(22),
- char(0),
- char(8),
- char(0),
- char(-67),
- char(0),
- char(8),
- char(0),
- char(-79),
- char(0),
- char(8),
- char(0),
- char(110),
- char(0),
- char(8),
- char(0),
- char(-66),
- char(0),
- char(8),
- char(0),
- char(112),
- char(0),
- char(8),
- char(0),
- char(-65),
- char(0),
- char(8),
- char(0),
- char(-64),
- char(0),
- char(8),
- char(0),
- char(-63),
- char(0),
- char(8),
- char(0),
- char(-62),
- char(0),
- char(8),
- char(0),
- char(-61),
- char(0),
- char(8),
- char(0),
- char(-60),
- char(0),
- char(8),
- char(0),
- char(-59),
- char(0),
- char(8),
- char(0),
- char(-58),
- char(0),
- char(8),
- char(0),
- char(-57),
- char(0),
- char(8),
- char(0),
- char(-56),
- char(0),
- char(8),
- char(0),
- char(-55),
- char(0),
- char(4),
- char(0),
- char(-54),
- char(0),
- char(4),
- char(0),
- char(-53),
- char(0),
- char(4),
- char(0),
- char(-52),
- char(0),
- char(4),
- char(0),
- char(-51),
- char(0),
- char(4),
- char(0),
- char(-50),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(51),
- char(0),
- char(22),
- char(0),
- char(7),
- char(0),
- char(-67),
- char(0),
- char(7),
- char(0),
- char(-79),
- char(0),
- char(7),
- char(0),
- char(110),
- char(0),
- char(7),
- char(0),
- char(-66),
- char(0),
- char(7),
- char(0),
- char(112),
- char(0),
- char(7),
- char(0),
- char(-65),
- char(0),
- char(7),
- char(0),
- char(-64),
- char(0),
- char(7),
- char(0),
- char(-63),
- char(0),
- char(7),
- char(0),
- char(-62),
- char(0),
- char(7),
- char(0),
- char(-61),
- char(0),
- char(7),
- char(0),
- char(-60),
- char(0),
- char(7),
- char(0),
- char(-59),
- char(0),
- char(7),
- char(0),
- char(-58),
- char(0),
- char(7),
- char(0),
- char(-57),
- char(0),
- char(7),
- char(0),
- char(-56),
- char(0),
- char(7),
- char(0),
- char(-55),
- char(0),
- char(4),
- char(0),
- char(-54),
- char(0),
- char(4),
- char(0),
- char(-53),
- char(0),
- char(4),
- char(0),
- char(-52),
- char(0),
- char(4),
- char(0),
- char(-51),
- char(0),
- char(4),
- char(0),
- char(-50),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(65),
- char(0),
- char(4),
- char(0),
- char(7),
- char(0),
- char(-49),
- char(0),
- char(7),
- char(0),
- char(-48),
- char(0),
- char(7),
- char(0),
- char(-47),
- char(0),
- char(4),
- char(0),
- char(78),
- char(0),
- char(66),
- char(0),
- char(10),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(13),
- char(0),
- char(-45),
- char(0),
- char(13),
- char(0),
- char(-44),
- char(0),
- char(13),
- char(0),
- char(-43),
- char(0),
- char(13),
- char(0),
- char(-42),
- char(0),
- char(13),
- char(0),
- char(-41),
- char(0),
- char(7),
- char(0),
- char(-121),
- char(0),
- char(7),
- char(0),
- char(-40),
- char(0),
- char(4),
- char(0),
- char(-39),
- char(0),
- char(4),
- char(0),
- char(53),
- char(0),
- char(67),
- char(0),
- char(4),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(4),
- char(0),
- char(-38),
- char(0),
- char(7),
- char(0),
- char(-37),
- char(0),
- char(4),
- char(0),
- char(-36),
- char(0),
- char(68),
- char(0),
- char(4),
- char(0),
- char(13),
- char(0),
- char(-41),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(4),
- char(0),
- char(-35),
- char(0),
- char(7),
- char(0),
- char(-34),
- char(0),
- char(69),
- char(0),
- char(7),
- char(0),
- char(13),
- char(0),
- char(-33),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(4),
- char(0),
- char(-32),
- char(0),
- char(7),
- char(0),
- char(-31),
- char(0),
- char(7),
- char(0),
- char(-30),
- char(0),
- char(7),
- char(0),
- char(-29),
- char(0),
- char(4),
- char(0),
- char(53),
- char(0),
- char(70),
- char(0),
- char(6),
- char(0),
- char(15),
- char(0),
- char(-28),
- char(0),
- char(13),
- char(0),
- char(-30),
- char(0),
- char(13),
- char(0),
- char(-27),
- char(0),
- char(56),
- char(0),
- char(-26),
- char(0),
- char(4),
- char(0),
- char(-25),
- char(0),
- char(7),
- char(0),
- char(-29),
- char(0),
- char(71),
- char(0),
- char(26),
- char(0),
- char(4),
- char(0),
- char(-24),
- char(0),
- char(7),
- char(0),
- char(-23),
- char(0),
- char(7),
- char(0),
- char(-79),
- char(0),
- char(7),
- char(0),
- char(-22),
- char(0),
- char(7),
- char(0),
- char(-21),
- char(0),
- char(7),
- char(0),
- char(-20),
- char(0),
- char(7),
- char(0),
- char(-19),
- char(0),
- char(7),
- char(0),
- char(-18),
- char(0),
- char(7),
- char(0),
- char(-17),
- char(0),
- char(7),
- char(0),
- char(-16),
- char(0),
- char(7),
- char(0),
- char(-15),
- char(0),
- char(7),
- char(0),
- char(-14),
- char(0),
- char(7),
- char(0),
- char(-13),
- char(0),
- char(7),
- char(0),
- char(-12),
- char(0),
- char(7),
- char(0),
- char(-11),
- char(0),
- char(7),
- char(0),
- char(-10),
- char(0),
- char(7),
- char(0),
- char(-9),
- char(0),
- char(7),
- char(0),
- char(-8),
- char(0),
- char(7),
- char(0),
- char(-7),
- char(0),
- char(7),
- char(0),
- char(-6),
- char(0),
- char(7),
- char(0),
- char(-5),
- char(0),
- char(4),
- char(0),
- char(-4),
- char(0),
- char(4),
- char(0),
- char(-3),
- char(0),
- char(4),
- char(0),
- char(-2),
- char(0),
- char(4),
- char(0),
- char(-1),
- char(0),
- char(4),
- char(0),
- char(117),
- char(0),
- char(72),
- char(0),
- char(12),
- char(0),
- char(15),
- char(0),
- char(0),
- char(1),
- char(15),
- char(0),
- char(1),
- char(1),
- char(15),
- char(0),
- char(2),
- char(1),
- char(13),
- char(0),
- char(3),
- char(1),
- char(13),
- char(0),
- char(4),
- char(1),
- char(7),
- char(0),
- char(5),
- char(1),
- char(4),
- char(0),
- char(6),
- char(1),
- char(4),
- char(0),
- char(7),
- char(1),
- char(4),
- char(0),
- char(8),
- char(1),
- char(4),
- char(0),
- char(9),
- char(1),
- char(7),
- char(0),
- char(-31),
- char(0),
- char(4),
- char(0),
- char(53),
- char(0),
- char(73),
- char(0),
- char(27),
- char(0),
- char(17),
- char(0),
- char(10),
- char(1),
- char(15),
- char(0),
- char(11),
- char(1),
- char(15),
- char(0),
- char(12),
- char(1),
- char(13),
- char(0),
- char(3),
- char(1),
- char(13),
- char(0),
- char(13),
- char(1),
- char(13),
- char(0),
- char(14),
- char(1),
- char(13),
- char(0),
- char(15),
- char(1),
- char(13),
- char(0),
- char(16),
- char(1),
- char(13),
- char(0),
- char(17),
- char(1),
- char(4),
- char(0),
- char(18),
- char(1),
- char(7),
- char(0),
- char(19),
- char(1),
- char(4),
- char(0),
- char(20),
- char(1),
- char(4),
- char(0),
- char(21),
- char(1),
- char(4),
- char(0),
- char(22),
- char(1),
- char(7),
- char(0),
- char(23),
- char(1),
- char(7),
- char(0),
- char(24),
- char(1),
- char(4),
- char(0),
- char(25),
- char(1),
- char(4),
- char(0),
- char(26),
- char(1),
- char(7),
- char(0),
- char(27),
- char(1),
- char(7),
- char(0),
- char(28),
- char(1),
- char(7),
- char(0),
- char(29),
- char(1),
- char(7),
- char(0),
- char(30),
- char(1),
- char(7),
- char(0),
- char(31),
- char(1),
- char(7),
- char(0),
- char(32),
- char(1),
- char(4),
- char(0),
- char(33),
- char(1),
- char(4),
- char(0),
- char(34),
- char(1),
- char(4),
- char(0),
- char(35),
- char(1),
- char(74),
- char(0),
- char(12),
- char(0),
- char(9),
- char(0),
- char(36),
- char(1),
- char(9),
- char(0),
- char(37),
- char(1),
- char(13),
- char(0),
- char(38),
- char(1),
- char(7),
- char(0),
- char(39),
- char(1),
- char(7),
- char(0),
- char(-63),
- char(0),
- char(7),
- char(0),
- char(40),
- char(1),
- char(4),
- char(0),
- char(41),
- char(1),
- char(13),
- char(0),
- char(42),
- char(1),
- char(4),
- char(0),
- char(43),
- char(1),
- char(4),
- char(0),
- char(44),
- char(1),
- char(4),
- char(0),
- char(45),
- char(1),
- char(4),
- char(0),
- char(53),
- char(0),
- char(75),
- char(0),
- char(19),
- char(0),
- char(47),
- char(0),
- char(125),
- char(0),
- char(72),
- char(0),
- char(46),
- char(1),
- char(65),
- char(0),
- char(47),
- char(1),
- char(66),
- char(0),
- char(48),
- char(1),
- char(67),
- char(0),
- char(49),
- char(1),
- char(68),
- char(0),
- char(50),
- char(1),
- char(69),
- char(0),
- char(51),
- char(1),
- char(70),
- char(0),
- char(52),
- char(1),
- char(73),
- char(0),
- char(53),
- char(1),
- char(74),
- char(0),
- char(54),
- char(1),
- char(4),
- char(0),
- char(55),
- char(1),
- char(4),
- char(0),
- char(21),
- char(1),
- char(4),
- char(0),
- char(56),
- char(1),
- char(4),
- char(0),
- char(57),
- char(1),
- char(4),
- char(0),
- char(58),
- char(1),
- char(4),
- char(0),
- char(59),
- char(1),
- char(4),
- char(0),
- char(60),
- char(1),
- char(4),
- char(0),
- char(61),
- char(1),
- char(71),
- char(0),
- char(62),
- char(1),
-};
-int b3s_bulletDNAlen = sizeof(b3s_bulletDNAstr);
-char b3s_bulletDNAstr64[] = {
- char(83),
- char(68),
- char(78),
- char(65),
- char(78),
- char(65),
- char(77),
- char(69),
- char(63),
- char(1),
- char(0),
- char(0),
- char(109),
- char(95),
- char(115),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(97),
- char(112),
- char(97),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(42),
- char(109),
- char(95),
- char(100),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(42),
- char(102),
- char(105),
- char(114),
- char(115),
- char(116),
- char(0),
- char(42),
- char(108),
- char(97),
- char(115),
- char(116),
- char(0),
- char(109),
- char(95),
- char(102),
- char(108),
- char(111),
- char(97),
- char(116),
- char(115),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(101),
- char(108),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(98),
- char(97),
- char(115),
- char(105),
- char(115),
- char(0),
- char(109),
- char(95),
- char(111),
- char(114),
- char(105),
- char(103),
- char(105),
- char(110),
- char(0),
- char(109),
- char(95),
- char(114),
- char(111),
- char(111),
- char(116),
- char(78),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(115),
- char(117),
- char(98),
- char(116),
- char(114),
- char(101),
- char(101),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(105),
- char(110),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(97),
- char(120),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(97),
- char(97),
- char(98),
- char(98),
- char(77),
- char(105),
- char(110),
- char(79),
- char(114),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(97),
- char(98),
- char(98),
- char(77),
- char(97),
- char(120),
- char(79),
- char(114),
- char(103),
- char(0),
- char(109),
- char(95),
- char(101),
- char(115),
- char(99),
- char(97),
- char(112),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(115),
- char(117),
- char(98),
- char(80),
- char(97),
- char(114),
- char(116),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(101),
- char(115),
- char(99),
- char(97),
- char(112),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(79),
- char(114),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(104),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(105),
- char(110),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(104),
- char(65),
- char(97),
- char(98),
- char(98),
- char(77),
- char(97),
- char(120),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(104),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(117),
- char(114),
- char(78),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(76),
- char(101),
- char(97),
- char(102),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(67),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(67),
- char(111),
- char(110),
- char(116),
- char(105),
- char(103),
- char(117),
- char(111),
- char(117),
- char(115),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(115),
- char(117),
- char(98),
- char(84),
- char(114),
- char(101),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(97),
- char(118),
- char(101),
- char(114),
- char(115),
- char(97),
- char(108),
- char(77),
- char(111),
- char(100),
- char(101),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(83),
- char(117),
- char(98),
- char(116),
- char(114),
- char(101),
- char(101),
- char(72),
- char(101),
- char(97),
- char(100),
- char(101),
- char(114),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(104),
- char(97),
- char(112),
- char(101),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(100),
- char(105),
- char(110),
- char(103),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(83),
- char(99),
- char(97),
- char(108),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(112),
- char(108),
- char(97),
- char(110),
- char(101),
- char(78),
- char(111),
- char(114),
- char(109),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(112),
- char(108),
- char(97),
- char(110),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(97),
- char(110),
- char(116),
- char(0),
- char(109),
- char(95),
- char(105),
- char(109),
- char(112),
- char(108),
- char(105),
- char(99),
- char(105),
- char(116),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(105),
- char(109),
- char(101),
- char(110),
- char(115),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(77),
- char(97),
- char(114),
- char(103),
- char(105),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(100),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(0),
- char(109),
- char(95),
- char(114),
- char(97),
- char(100),
- char(105),
- char(117),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(110),
- char(97),
- char(108),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(42),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(118),
- char(97),
- char(108),
- char(117),
- char(101),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(118),
- char(97),
- char(108),
- char(117),
- char(101),
- char(115),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(0),
- char(42),
- char(109),
- char(95),
- char(118),
- char(101),
- char(114),
- char(116),
- char(105),
- char(99),
- char(101),
- char(115),
- char(51),
- char(102),
- char(0),
- char(42),
- char(109),
- char(95),
- char(118),
- char(101),
- char(114),
- char(116),
- char(105),
- char(99),
- char(101),
- char(115),
- char(51),
- char(100),
- char(0),
- char(42),
- char(109),
- char(95),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(51),
- char(50),
- char(0),
- char(42),
- char(109),
- char(95),
- char(51),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(49),
- char(54),
- char(0),
- char(42),
- char(109),
- char(95),
- char(51),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(56),
- char(0),
- char(42),
- char(109),
- char(95),
- char(105),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(49),
- char(54),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(86),
- char(101),
- char(114),
- char(116),
- char(105),
- char(99),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(109),
- char(101),
- char(115),
- char(104),
- char(80),
- char(97),
- char(114),
- char(116),
- char(115),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(115),
- char(99),
- char(97),
- char(108),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(77),
- char(101),
- char(115),
- char(104),
- char(80),
- char(97),
- char(114),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(109),
- char(101),
- char(115),
- char(104),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(102),
- char(97),
- char(99),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(66),
- char(118),
- char(104),
- char(0),
- char(42),
- char(109),
- char(95),
- char(113),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(66),
- char(118),
- char(104),
- char(0),
- char(42),
- char(109),
- char(95),
- char(116),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(77),
- char(97),
- char(112),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(51),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(105),
- char(109),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(116),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(77),
- char(97),
- char(114),
- char(103),
- char(105),
- char(110),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(104),
- char(105),
- char(108),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(117),
- char(112),
- char(65),
- char(120),
- char(105),
- char(115),
- char(0),
- char(109),
- char(95),
- char(102),
- char(108),
- char(97),
- char(103),
- char(115),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(86),
- char(48),
- char(86),
- char(49),
- char(65),
- char(110),
- char(103),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(86),
- char(49),
- char(86),
- char(50),
- char(65),
- char(110),
- char(103),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(86),
- char(50),
- char(86),
- char(48),
- char(65),
- char(110),
- char(103),
- char(108),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(104),
- char(97),
- char(115),
- char(104),
- char(84),
- char(97),
- char(98),
- char(108),
- char(101),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(101),
- char(120),
- char(116),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(118),
- char(97),
- char(108),
- char(117),
- char(101),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(107),
- char(101),
- char(121),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(69),
- char(112),
- char(115),
- char(105),
- char(108),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(108),
- char(97),
- char(110),
- char(97),
- char(114),
- char(69),
- char(112),
- char(115),
- char(105),
- char(108),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(101),
- char(113),
- char(117),
- char(97),
- char(108),
- char(86),
- char(101),
- char(114),
- char(116),
- char(101),
- char(120),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(101),
- char(100),
- char(103),
- char(101),
- char(68),
- char(105),
- char(115),
- char(116),
- char(97),
- char(110),
- char(99),
- char(101),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(122),
- char(101),
- char(114),
- char(111),
- char(65),
- char(114),
- char(101),
- char(97),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(110),
- char(101),
- char(120),
- char(116),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(104),
- char(97),
- char(115),
- char(104),
- char(84),
- char(97),
- char(98),
- char(108),
- char(101),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(86),
- char(97),
- char(108),
- char(117),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(75),
- char(101),
- char(121),
- char(115),
- char(0),
- char(109),
- char(95),
- char(103),
- char(105),
- char(109),
- char(112),
- char(97),
- char(99),
- char(116),
- char(83),
- char(117),
- char(98),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(117),
- char(110),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(80),
- char(116),
- char(114),
- char(0),
- char(42),
- char(109),
- char(95),
- char(117),
- char(110),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(80),
- char(116),
- char(114),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(85),
- char(110),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(112),
- char(97),
- char(100),
- char(100),
- char(105),
- char(110),
- char(103),
- char(51),
- char(91),
- char(52),
- char(93),
- char(0),
- char(42),
- char(109),
- char(95),
- char(98),
- char(114),
- char(111),
- char(97),
- char(100),
- char(112),
- char(104),
- char(97),
- char(115),
- char(101),
- char(72),
- char(97),
- char(110),
- char(100),
- char(108),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(111),
- char(111),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(119),
- char(111),
- char(114),
- char(108),
- char(100),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(112),
- char(111),
- char(108),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(112),
- char(111),
- char(108),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(76),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(112),
- char(111),
- char(108),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(105),
- char(115),
- char(111),
- char(116),
- char(114),
- char(111),
- char(112),
- char(105),
- char(99),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(80),
- char(114),
- char(111),
- char(99),
- char(101),
- char(115),
- char(115),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(100),
- char(101),
- char(97),
- char(99),
- char(116),
- char(105),
- char(118),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(105),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(102),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(114),
- char(111),
- char(108),
- char(108),
- char(105),
- char(110),
- char(103),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(105),
- char(116),
- char(117),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(104),
- char(105),
- char(116),
- char(70),
- char(114),
- char(97),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(99),
- char(100),
- char(83),
- char(119),
- char(101),
- char(112),
- char(116),
- char(83),
- char(112),
- char(104),
- char(101),
- char(114),
- char(101),
- char(82),
- char(97),
- char(100),
- char(105),
- char(117),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(99),
- char(100),
- char(77),
- char(111),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(104),
- char(97),
- char(115),
- char(65),
- char(110),
- char(105),
- char(115),
- char(111),
- char(116),
- char(114),
- char(111),
- char(112),
- char(105),
- char(99),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(70),
- char(108),
- char(97),
- char(103),
- char(115),
- char(0),
- char(109),
- char(95),
- char(105),
- char(115),
- char(108),
- char(97),
- char(110),
- char(100),
- char(84),
- char(97),
- char(103),
- char(49),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(109),
- char(112),
- char(97),
- char(110),
- char(105),
- char(111),
- char(110),
- char(73),
- char(100),
- char(0),
- char(109),
- char(95),
- char(97),
- char(99),
- char(116),
- char(105),
- char(118),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(83),
- char(116),
- char(97),
- char(116),
- char(101),
- char(49),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(110),
- char(97),
- char(108),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(104),
- char(101),
- char(99),
- char(107),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(100),
- char(101),
- char(87),
- char(105),
- char(116),
- char(104),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(110),
- char(102),
- char(111),
- char(0),
- char(109),
- char(95),
- char(103),
- char(114),
- char(97),
- char(118),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(73),
- char(110),
- char(101),
- char(114),
- char(116),
- char(105),
- char(97),
- char(84),
- char(101),
- char(110),
- char(115),
- char(111),
- char(114),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(103),
- char(114),
- char(97),
- char(118),
- char(105),
- char(116),
- char(121),
- char(95),
- char(97),
- char(99),
- char(99),
- char(101),
- char(108),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(73),
- char(110),
- char(101),
- char(114),
- char(116),
- char(105),
- char(97),
- char(76),
- char(111),
- char(99),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(116),
- char(111),
- char(116),
- char(97),
- char(108),
- char(70),
- char(111),
- char(114),
- char(99),
- char(101),
- char(0),
- char(109),
- char(95),
- char(116),
- char(111),
- char(116),
- char(97),
- char(108),
- char(84),
- char(111),
- char(114),
- char(113),
- char(117),
- char(101),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(101),
- char(114),
- char(115),
- char(101),
- char(77),
- char(97),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(76),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(83),
- char(113),
- char(114),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(83),
- char(113),
- char(114),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(83),
- char(108),
- char(101),
- char(101),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(83),
- char(108),
- char(101),
- char(101),
- char(112),
- char(105),
- char(110),
- char(103),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(100),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(97),
- char(108),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(82),
- char(111),
- char(119),
- char(115),
- char(0),
- char(110),
- char(117),
- char(98),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(98),
- char(65),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(98),
- char(66),
- char(0),
- char(109),
- char(95),
- char(111),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(73),
- char(100),
- char(0),
- char(109),
- char(95),
- char(110),
- char(101),
- char(101),
- char(100),
- char(115),
- char(70),
- char(101),
- char(101),
- char(100),
- char(98),
- char(97),
- char(99),
- char(107),
- char(0),
- char(109),
- char(95),
- char(97),
- char(112),
- char(112),
- char(108),
- char(105),
- char(101),
- char(100),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(98),
- char(103),
- char(68),
- char(114),
- char(97),
- char(119),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(105),
- char(115),
- char(97),
- char(98),
- char(108),
- char(101),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(115),
- char(66),
- char(101),
- char(116),
- char(119),
- char(101),
- char(101),
- char(110),
- char(76),
- char(105),
- char(110),
- char(107),
- char(101),
- char(100),
- char(66),
- char(111),
- char(100),
- char(105),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(111),
- char(118),
- char(101),
- char(114),
- char(114),
- char(105),
- char(100),
- char(101),
- char(78),
- char(117),
- char(109),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(98),
- char(114),
- char(101),
- char(97),
- char(107),
- char(105),
- char(110),
- char(103),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(105),
- char(115),
- char(69),
- char(110),
- char(97),
- char(98),
- char(108),
- char(101),
- char(100),
- char(0),
- char(109),
- char(95),
- char(116),
- char(121),
- char(112),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(112),
- char(105),
- char(118),
- char(111),
- char(116),
- char(73),
- char(110),
- char(65),
- char(0),
- char(109),
- char(95),
- char(112),
- char(105),
- char(118),
- char(111),
- char(116),
- char(73),
- char(110),
- char(66),
- char(0),
- char(109),
- char(95),
- char(114),
- char(98),
- char(65),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(114),
- char(98),
- char(66),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(82),
- char(101),
- char(102),
- char(101),
- char(114),
- char(101),
- char(110),
- char(99),
- char(101),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(65),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(79),
- char(110),
- char(108),
- char(121),
- char(0),
- char(109),
- char(95),
- char(101),
- char(110),
- char(97),
- char(98),
- char(108),
- char(101),
- char(65),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(77),
- char(111),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(109),
- char(111),
- char(116),
- char(111),
- char(114),
- char(84),
- char(97),
- char(114),
- char(103),
- char(101),
- char(116),
- char(86),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(77),
- char(111),
- char(116),
- char(111),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(119),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(117),
- char(112),
- char(112),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(109),
- char(105),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(98),
- char(105),
- char(97),
- char(115),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(108),
- char(97),
- char(120),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(115),
- char(119),
- char(105),
- char(110),
- char(103),
- char(83),
- char(112),
- char(97),
- char(110),
- char(49),
- char(0),
- char(109),
- char(95),
- char(115),
- char(119),
- char(105),
- char(110),
- char(103),
- char(83),
- char(112),
- char(97),
- char(110),
- char(50),
- char(0),
- char(109),
- char(95),
- char(116),
- char(119),
- char(105),
- char(115),
- char(116),
- char(83),
- char(112),
- char(97),
- char(110),
- char(0),
- char(109),
- char(95),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(85),
- char(112),
- char(112),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(76),
- char(111),
- char(119),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(85),
- char(112),
- char(112),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(76),
- char(111),
- char(119),
- char(101),
- char(114),
- char(76),
- char(105),
- char(109),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(76),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(82),
- char(101),
- char(102),
- char(101),
- char(114),
- char(101),
- char(110),
- char(99),
- char(101),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(65),
- char(0),
- char(109),
- char(95),
- char(117),
- char(115),
- char(101),
- char(79),
- char(102),
- char(102),
- char(115),
- char(101),
- char(116),
- char(70),
- char(111),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(54),
- char(100),
- char(111),
- char(102),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(69),
- char(110),
- char(97),
- char(98),
- char(108),
- char(101),
- char(100),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(101),
- char(113),
- char(117),
- char(105),
- char(108),
- char(105),
- char(98),
- char(114),
- char(105),
- char(117),
- char(109),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(68),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(91),
- char(54),
- char(93),
- char(0),
- char(109),
- char(95),
- char(116),
- char(97),
- char(117),
- char(0),
- char(109),
- char(95),
- char(116),
- char(105),
- char(109),
- char(101),
- char(83),
- char(116),
- char(101),
- char(112),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(69),
- char(114),
- char(114),
- char(111),
- char(114),
- char(82),
- char(101),
- char(100),
- char(117),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(101),
- char(114),
- char(112),
- char(0),
- char(109),
- char(95),
- char(101),
- char(114),
- char(112),
- char(50),
- char(0),
- char(109),
- char(95),
- char(103),
- char(108),
- char(111),
- char(98),
- char(97),
- char(108),
- char(67),
- char(102),
- char(109),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(80),
- char(101),
- char(110),
- char(101),
- char(116),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(84),
- char(117),
- char(114),
- char(110),
- char(69),
- char(114),
- char(112),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(83),
- char(108),
- char(111),
- char(112),
- char(0),
- char(109),
- char(95),
- char(119),
- char(97),
- char(114),
- char(109),
- char(115),
- char(116),
- char(97),
- char(114),
- char(116),
- char(105),
- char(110),
- char(103),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(71),
- char(121),
- char(114),
- char(111),
- char(115),
- char(99),
- char(111),
- char(112),
- char(105),
- char(99),
- char(70),
- char(111),
- char(114),
- char(99),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(105),
- char(110),
- char(103),
- char(108),
- char(101),
- char(65),
- char(120),
- char(105),
- char(115),
- char(82),
- char(111),
- char(108),
- char(108),
- char(105),
- char(110),
- char(103),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(77),
- char(111),
- char(100),
- char(101),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(105),
- char(110),
- char(103),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(82),
- char(101),
- char(115),
- char(116),
- char(105),
- char(116),
- char(117),
- char(116),
- char(105),
- char(111),
- char(110),
- char(84),
- char(104),
- char(114),
- char(101),
- char(115),
- char(104),
- char(111),
- char(108),
- char(100),
- char(0),
- char(109),
- char(95),
- char(109),
- char(105),
- char(110),
- char(105),
- char(109),
- char(117),
- char(109),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(66),
- char(97),
- char(116),
- char(99),
- char(104),
- char(83),
- char(105),
- char(122),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(101),
- char(97),
- char(114),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(103),
- char(117),
- char(108),
- char(97),
- char(114),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(118),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(83),
- char(116),
- char(105),
- char(102),
- char(102),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(109),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(114),
- char(101),
- char(118),
- char(105),
- char(111),
- char(117),
- char(115),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(118),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(0),
- char(109),
- char(95),
- char(97),
- char(99),
- char(99),
- char(117),
- char(109),
- char(117),
- char(108),
- char(97),
- char(116),
- char(101),
- char(100),
- char(70),
- char(111),
- char(114),
- char(99),
- char(101),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(114),
- char(109),
- char(97),
- char(108),
- char(0),
- char(109),
- char(95),
- char(97),
- char(114),
- char(101),
- char(97),
- char(0),
- char(109),
- char(95),
- char(97),
- char(116),
- char(116),
- char(97),
- char(99),
- char(104),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(76),
- char(101),
- char(110),
- char(103),
- char(116),
- char(104),
- char(0),
- char(109),
- char(95),
- char(98),
- char(98),
- char(101),
- char(110),
- char(100),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(91),
- char(51),
- char(93),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(65),
- char(114),
- char(101),
- char(97),
- char(0),
- char(109),
- char(95),
- char(99),
- char(48),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(91),
- char(52),
- char(93),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(115),
- char(116),
- char(86),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(49),
- char(0),
- char(109),
- char(95),
- char(99),
- char(50),
- char(0),
- char(109),
- char(95),
- char(99),
- char(48),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(97),
- char(108),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(114),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(0),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(109),
- char(95),
- char(97),
- char(101),
- char(114),
- char(111),
- char(77),
- char(111),
- char(100),
- char(101),
- char(108),
- char(0),
- char(109),
- char(95),
- char(98),
- char(97),
- char(117),
- char(109),
- char(103),
- char(97),
- char(114),
- char(116),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(114),
- char(97),
- char(103),
- char(0),
- char(109),
- char(95),
- char(108),
- char(105),
- char(102),
- char(116),
- char(0),
- char(109),
- char(95),
- char(112),
- char(114),
- char(101),
- char(115),
- char(115),
- char(117),
- char(114),
- char(101),
- char(0),
- char(109),
- char(95),
- char(118),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(100),
- char(121),
- char(110),
- char(97),
- char(109),
- char(105),
- char(99),
- char(70),
- char(114),
- char(105),
- char(99),
- char(116),
- char(105),
- char(111),
- char(110),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(101),
- char(77),
- char(97),
- char(116),
- char(99),
- char(104),
- char(0),
- char(109),
- char(95),
- char(114),
- char(105),
- char(103),
- char(105),
- char(100),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(107),
- char(105),
- char(110),
- char(101),
- char(116),
- char(105),
- char(99),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(97),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(75),
- char(105),
- char(110),
- char(101),
- char(116),
- char(105),
- char(99),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(72),
- char(97),
- char(114),
- char(100),
- char(110),
- char(101),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(83),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(75),
- char(105),
- char(110),
- char(101),
- char(116),
- char(105),
- char(99),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(83),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(115),
- char(111),
- char(102),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(83),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(86),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(116),
- char(105),
- char(109),
- char(101),
- char(83),
- char(99),
- char(97),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(118),
- char(101),
- char(108),
- char(111),
- char(99),
- char(105),
- char(116),
- char(121),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(100),
- char(114),
- char(105),
- char(102),
- char(116),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(116),
- char(101),
- char(114),
- char(97),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(114),
- char(111),
- char(116),
- char(0),
- char(109),
- char(95),
- char(115),
- char(99),
- char(97),
- char(108),
- char(101),
- char(0),
- char(109),
- char(95),
- char(97),
- char(113),
- char(113),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(109),
- char(0),
- char(42),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(119),
- char(101),
- char(105),
- char(103),
- char(104),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(87),
- char(101),
- char(105),
- char(103),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(98),
- char(118),
- char(111),
- char(108),
- char(117),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(98),
- char(102),
- char(114),
- char(97),
- char(109),
- char(101),
- char(0),
- char(109),
- char(95),
- char(102),
- char(114),
- char(97),
- char(109),
- char(101),
- char(120),
- char(102),
- char(111),
- char(114),
- char(109),
- char(0),
- char(109),
- char(95),
- char(108),
- char(111),
- char(99),
- char(105),
- char(105),
- char(0),
- char(109),
- char(95),
- char(105),
- char(110),
- char(118),
- char(119),
- char(105),
- char(0),
- char(109),
- char(95),
- char(118),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(100),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(108),
- char(118),
- char(0),
- char(109),
- char(95),
- char(97),
- char(118),
- char(0),
- char(42),
- char(109),
- char(95),
- char(102),
- char(114),
- char(97),
- char(109),
- char(101),
- char(114),
- char(101),
- char(102),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(73),
- char(110),
- char(100),
- char(105),
- char(99),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(109),
- char(97),
- char(115),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(70),
- char(114),
- char(97),
- char(109),
- char(101),
- char(82),
- char(101),
- char(102),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(78),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(77),
- char(97),
- char(115),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(105),
- char(100),
- char(109),
- char(97),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(105),
- char(109),
- char(97),
- char(115),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(118),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(100),
- char(105),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(108),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(97),
- char(100),
- char(97),
- char(109),
- char(112),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(116),
- char(99),
- char(104),
- char(105),
- char(110),
- char(103),
- char(0),
- char(109),
- char(95),
- char(109),
- char(97),
- char(120),
- char(83),
- char(101),
- char(108),
- char(102),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(0),
- char(109),
- char(95),
- char(115),
- char(101),
- char(108),
- char(102),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(73),
- char(109),
- char(112),
- char(117),
- char(108),
- char(115),
- char(101),
- char(70),
- char(97),
- char(99),
- char(116),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(116),
- char(97),
- char(105),
- char(110),
- char(115),
- char(65),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(108),
- char(108),
- char(105),
- char(100),
- char(101),
- char(0),
- char(109),
- char(95),
- char(99),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(0),
- char(42),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(65),
- char(0),
- char(42),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(66),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(102),
- char(115),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(99),
- char(102),
- char(109),
- char(0),
- char(109),
- char(95),
- char(115),
- char(112),
- char(108),
- char(105),
- char(116),
- char(0),
- char(109),
- char(95),
- char(100),
- char(101),
- char(108),
- char(101),
- char(116),
- char(101),
- char(0),
- char(109),
- char(95),
- char(114),
- char(101),
- char(108),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(91),
- char(50),
- char(93),
- char(0),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(65),
- char(116),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(98),
- char(111),
- char(100),
- char(121),
- char(66),
- char(116),
- char(121),
- char(112),
- char(101),
- char(0),
- char(109),
- char(95),
- char(106),
- char(111),
- char(105),
- char(110),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(0),
- char(42),
- char(109),
- char(95),
- char(112),
- char(111),
- char(115),
- char(101),
- char(0),
- char(42),
- char(42),
- char(109),
- char(95),
- char(109),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(110),
- char(111),
- char(100),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(108),
- char(105),
- char(110),
- char(107),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(102),
- char(97),
- char(99),
- char(101),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(116),
- char(101),
- char(116),
- char(114),
- char(97),
- char(104),
- char(101),
- char(100),
- char(114),
- char(97),
- char(0),
- char(42),
- char(109),
- char(95),
- char(97),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(99),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(115),
- char(0),
- char(42),
- char(109),
- char(95),
- char(106),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(77),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(76),
- char(105),
- char(110),
- char(107),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(70),
- char(97),
- char(99),
- char(101),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(84),
- char(101),
- char(116),
- char(114),
- char(97),
- char(104),
- char(101),
- char(100),
- char(114),
- char(97),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(65),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(115),
- char(0),
- char(109),
- char(95),
- char(110),
- char(117),
- char(109),
- char(74),
- char(111),
- char(105),
- char(110),
- char(116),
- char(115),
- char(0),
- char(109),
- char(95),
- char(99),
- char(111),
- char(110),
- char(102),
- char(105),
- char(103),
- char(0),
- char(84),
- char(89),
- char(80),
- char(69),
- char(76),
- char(0),
- char(0),
- char(0),
- char(99),
- char(104),
- char(97),
- char(114),
- char(0),
- char(117),
- char(99),
- char(104),
- char(97),
- char(114),
- char(0),
- char(115),
- char(104),
- char(111),
- char(114),
- char(116),
- char(0),
- char(117),
- char(115),
- char(104),
- char(111),
- char(114),
- char(116),
- char(0),
- char(105),
- char(110),
- char(116),
- char(0),
- char(108),
- char(111),
- char(110),
- char(103),
- char(0),
- char(117),
- char(108),
- char(111),
- char(110),
- char(103),
- char(0),
- char(102),
- char(108),
- char(111),
- char(97),
- char(116),
- char(0),
- char(100),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(0),
- char(118),
- char(111),
- char(105),
- char(100),
- char(0),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(101),
- char(114),
- char(65),
- char(114),
- char(114),
- char(97),
- char(121),
- char(0),
- char(98),
- char(116),
- char(80),
- char(104),
- char(121),
- char(115),
- char(105),
- char(99),
- char(115),
- char(83),
- char(121),
- char(115),
- char(116),
- char(101),
- char(109),
- char(0),
- char(76),
- char(105),
- char(115),
- char(116),
- char(66),
- char(97),
- char(115),
- char(101),
- char(0),
- char(98),
- char(116),
- char(86),
- char(101),
- char(99),
- char(116),
- char(111),
- char(114),
- char(51),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(86),
- char(101),
- char(99),
- char(116),
- char(111),
- char(114),
- char(51),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(77),
- char(97),
- char(116),
- char(114),
- char(105),
- char(120),
- char(51),
- char(120),
- char(51),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(77),
- char(97),
- char(116),
- char(114),
- char(105),
- char(120),
- char(51),
- char(120),
- char(51),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(97),
- char(110),
- char(115),
- char(102),
- char(111),
- char(114),
- char(109),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(66),
- char(118),
- char(104),
- char(83),
- char(117),
- char(98),
- char(116),
- char(114),
- char(101),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(79),
- char(112),
- char(116),
- char(105),
- char(109),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(78),
- char(111),
- char(100),
- char(101),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(79),
- char(112),
- char(116),
- char(105),
- char(109),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(78),
- char(111),
- char(100),
- char(101),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(78),
- char(111),
- char(100),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(81),
- char(117),
- char(97),
- char(110),
- char(116),
- char(105),
- char(122),
- char(101),
- char(100),
- char(66),
- char(118),
- char(104),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(116),
- char(97),
- char(116),
- char(105),
- char(99),
- char(80),
- char(108),
- char(97),
- char(110),
- char(101),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(110),
- char(97),
- char(108),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(80),
- char(111),
- char(115),
- char(105),
- char(116),
- char(105),
- char(111),
- char(110),
- char(65),
- char(110),
- char(100),
- char(82),
- char(97),
- char(100),
- char(105),
- char(117),
- char(115),
- char(0),
- char(98),
- char(116),
- char(77),
- char(117),
- char(108),
- char(116),
- char(105),
- char(83),
- char(112),
- char(104),
- char(101),
- char(114),
- char(101),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(73),
- char(110),
- char(116),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(104),
- char(111),
- char(114),
- char(116),
- char(73),
- char(110),
- char(116),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(104),
- char(111),
- char(114),
- char(116),
- char(73),
- char(110),
- char(116),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(84),
- char(114),
- char(105),
- char(112),
- char(108),
- char(101),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(104),
- char(97),
- char(114),
- char(73),
- char(110),
- char(100),
- char(101),
- char(120),
- char(84),
- char(114),
- char(105),
- char(112),
- char(108),
- char(101),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(77),
- char(101),
- char(115),
- char(104),
- char(80),
- char(97),
- char(114),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(116),
- char(114),
- char(105),
- char(100),
- char(105),
- char(110),
- char(103),
- char(77),
- char(101),
- char(115),
- char(104),
- char(73),
- char(110),
- char(116),
- char(101),
- char(114),
- char(102),
- char(97),
- char(99),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(77),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(77),
- char(97),
- char(112),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(99),
- char(97),
- char(108),
- char(101),
- char(100),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(77),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(109),
- char(112),
- char(111),
- char(117),
- char(110),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(67),
- char(104),
- char(105),
- char(108),
- char(100),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(109),
- char(112),
- char(111),
- char(117),
- char(110),
- char(100),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(121),
- char(108),
- char(105),
- char(110),
- char(100),
- char(101),
- char(114),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(97),
- char(112),
- char(115),
- char(117),
- char(108),
- char(101),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(84),
- char(114),
- char(105),
- char(97),
- char(110),
- char(103),
- char(108),
- char(101),
- char(73),
- char(110),
- char(102),
- char(111),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(71),
- char(73),
- char(109),
- char(112),
- char(97),
- char(99),
- char(116),
- char(77),
- char(101),
- char(115),
- char(104),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(118),
- char(101),
- char(120),
- char(72),
- char(117),
- char(108),
- char(108),
- char(83),
- char(104),
- char(97),
- char(112),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(108),
- char(108),
- char(105),
- char(115),
- char(105),
- char(111),
- char(110),
- char(79),
- char(98),
- char(106),
- char(101),
- char(99),
- char(116),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(68),
- char(121),
- char(110),
- char(97),
- char(109),
- char(105),
- char(99),
- char(115),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(110),
- char(102),
- char(111),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(68),
- char(121),
- char(110),
- char(97),
- char(109),
- char(105),
- char(99),
- char(115),
- char(87),
- char(111),
- char(114),
- char(108),
- char(100),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(116),
- char(97),
- char(99),
- char(116),
- char(83),
- char(111),
- char(108),
- char(118),
- char(101),
- char(114),
- char(73),
- char(110),
- char(102),
- char(111),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(73),
- char(110),
- char(102),
- char(111),
- char(49),
- char(0),
- char(98),
- char(116),
- char(84),
- char(121),
- char(112),
- char(101),
- char(100),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(66),
- char(111),
- char(100),
- char(121),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(50),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(50),
- char(80),
- char(111),
- char(105),
- char(110),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(72),
- char(105),
- char(110),
- char(103),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(111),
- char(117),
- char(98),
- char(108),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(72),
- char(105),
- char(110),
- char(103),
- char(101),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(67),
- char(111),
- char(110),
- char(101),
- char(84),
- char(119),
- char(105),
- char(115),
- char(116),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(71),
- char(101),
- char(110),
- char(101),
- char(114),
- char(105),
- char(99),
- char(54),
- char(68),
- char(111),
- char(102),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(71),
- char(101),
- char(110),
- char(101),
- char(114),
- char(105),
- char(99),
- char(54),
- char(68),
- char(111),
- char(102),
- char(83),
- char(112),
- char(114),
- char(105),
- char(110),
- char(103),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(108),
- char(105),
- char(100),
- char(101),
- char(114),
- char(67),
- char(111),
- char(110),
- char(115),
- char(116),
- char(114),
- char(97),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(77),
- char(97),
- char(116),
- char(101),
- char(114),
- char(105),
- char(97),
- char(108),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(78),
- char(111),
- char(100),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(76),
- char(105),
- char(110),
- char(107),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(70),
- char(97),
- char(99),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(84),
- char(101),
- char(116),
- char(114),
- char(97),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(82),
- char(105),
- char(103),
- char(105),
- char(100),
- char(65),
- char(110),
- char(99),
- char(104),
- char(111),
- char(114),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(67),
- char(111),
- char(110),
- char(102),
- char(105),
- char(103),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(80),
- char(111),
- char(115),
- char(101),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(67),
- char(108),
- char(117),
- char(115),
- char(116),
- char(101),
- char(114),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(74),
- char(111),
- char(105),
- char(110),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(98),
- char(116),
- char(83),
- char(111),
- char(102),
- char(116),
- char(66),
- char(111),
- char(100),
- char(121),
- char(70),
- char(108),
- char(111),
- char(97),
- char(116),
- char(68),
- char(97),
- char(116),
- char(97),
- char(0),
- char(0),
- char(0),
- char(84),
- char(76),
- char(69),
- char(78),
- char(1),
- char(0),
- char(1),
- char(0),
- char(2),
- char(0),
- char(2),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(8),
- char(0),
- char(0),
- char(0),
- char(16),
- char(0),
- char(48),
- char(0),
- char(16),
- char(0),
- char(16),
- char(0),
- char(32),
- char(0),
- char(48),
- char(0),
- char(96),
- char(0),
- char(64),
- char(0),
- char(-128),
- char(0),
- char(20),
- char(0),
- char(48),
- char(0),
- char(80),
- char(0),
- char(16),
- char(0),
- char(96),
- char(0),
- char(-112),
- char(0),
- char(16),
- char(0),
- char(56),
- char(0),
- char(56),
- char(0),
- char(20),
- char(0),
- char(72),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(8),
- char(0),
- char(4),
- char(0),
- char(56),
- char(0),
- char(32),
- char(0),
- char(80),
- char(0),
- char(72),
- char(0),
- char(96),
- char(0),
- char(80),
- char(0),
- char(32),
- char(0),
- char(64),
- char(0),
- char(64),
- char(0),
- char(16),
- char(0),
- char(72),
- char(0),
- char(80),
- char(0),
- char(-32),
- char(1),
- char(16),
- char(1),
- char(-72),
- char(0),
- char(-104),
- char(0),
- char(104),
- char(0),
- char(88),
- char(0),
- char(-8),
- char(1),
- char(-80),
- char(3),
- char(8),
- char(0),
- char(64),
- char(0),
- char(0),
- char(0),
- char(96),
- char(0),
- char(-128),
- char(0),
- char(104),
- char(1),
- char(-24),
- char(0),
- char(-32),
- char(0),
- char(8),
- char(1),
- char(104),
- char(1),
- char(-40),
- char(0),
- char(16),
- char(0),
- char(104),
- char(0),
- char(24),
- char(0),
- char(40),
- char(0),
- char(104),
- char(0),
- char(96),
- char(0),
- char(104),
- char(0),
- char(-56),
- char(0),
- char(104),
- char(1),
- char(112),
- char(0),
- char(-32),
- char(1),
- char(83),
- char(84),
- char(82),
- char(67),
- char(65),
- char(0),
- char(0),
- char(0),
- char(10),
- char(0),
- char(3),
- char(0),
- char(4),
- char(0),
- char(0),
- char(0),
- char(4),
- char(0),
- char(1),
- char(0),
- char(9),
- char(0),
- char(2),
- char(0),
- char(11),
- char(0),
- char(3),
- char(0),
- char(10),
- char(0),
- char(3),
- char(0),
- char(10),
- char(0),
- char(4),
- char(0),
- char(10),
- char(0),
- char(5),
- char(0),
- char(12),
- char(0),
- char(2),
- char(0),
- char(9),
- char(0),
- char(6),
- char(0),
- char(9),
- char(0),
- char(7),
- char(0),
- char(13),
- char(0),
- char(1),
- char(0),
- char(7),
- char(0),
- char(8),
- char(0),
- char(14),
- char(0),
- char(1),
- char(0),
- char(8),
- char(0),
- char(8),
- char(0),
- char(15),
- char(0),
- char(1),
- char(0),
- char(13),
- char(0),
- char(9),
- char(0),
- char(16),
- char(0),
- char(1),
- char(0),
- char(14),
- char(0),
- char(9),
- char(0),
- char(17),
- char(0),
- char(2),
- char(0),
- char(15),
- char(0),
- char(10),
- char(0),
- char(13),
- char(0),
- char(11),
- char(0),
- char(18),
- char(0),
- char(2),
- char(0),
- char(16),
- char(0),
- char(10),
- char(0),
- char(14),
- char(0),
- char(11),
- char(0),
- char(19),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(12),
- char(0),
- char(4),
- char(0),
- char(13),
- char(0),
- char(2),
- char(0),
- char(14),
- char(0),
- char(2),
- char(0),
- char(15),
- char(0),
- char(20),
- char(0),
- char(6),
- char(0),
- char(13),
- char(0),
- char(16),
- char(0),
- char(13),
- char(0),
- char(17),
- char(0),
- char(4),
- char(0),
- char(18),
- char(0),
- char(4),
- char(0),
- char(19),
- char(0),
- char(4),
- char(0),
- char(20),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(21),
- char(0),
- char(6),
- char(0),
- char(14),
- char(0),
- char(16),
- char(0),
- char(14),
- char(0),
- char(17),
- char(0),
- char(4),
- char(0),
- char(18),
- char(0),
- char(4),
- char(0),
- char(19),
- char(0),
- char(4),
- char(0),
- char(20),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(22),
- char(0),
- char(3),
- char(0),
- char(2),
- char(0),
- char(14),
- char(0),
- char(2),
- char(0),
- char(15),
- char(0),
- char(4),
- char(0),
- char(22),
- char(0),
- char(23),
- char(0),
- char(12),
- char(0),
- char(13),
- char(0),
- char(23),
- char(0),
- char(13),
- char(0),
- char(24),
- char(0),
- char(13),
- char(0),
- char(25),
- char(0),
- char(4),
- char(0),
- char(26),
- char(0),
- char(4),
- char(0),
- char(27),
- char(0),
- char(4),
- char(0),
- char(28),
- char(0),
- char(4),
- char(0),
- char(29),
- char(0),
- char(20),
- char(0),
- char(30),
- char(0),
- char(22),
- char(0),
- char(31),
- char(0),
- char(19),
- char(0),
- char(32),
- char(0),
- char(4),
- char(0),
- char(33),
- char(0),
- char(4),
- char(0),
- char(34),
- char(0),
- char(24),
- char(0),
- char(12),
- char(0),
- char(14),
- char(0),
- char(23),
- char(0),
- char(14),
- char(0),
- char(24),
- char(0),
- char(14),
- char(0),
- char(25),
- char(0),
- char(4),
- char(0),
- char(26),
- char(0),
- char(4),
- char(0),
- char(27),
- char(0),
- char(4),
- char(0),
- char(28),
- char(0),
- char(4),
- char(0),
- char(29),
- char(0),
- char(21),
- char(0),
- char(30),
- char(0),
- char(22),
- char(0),
- char(31),
- char(0),
- char(4),
- char(0),
- char(33),
- char(0),
- char(4),
- char(0),
- char(34),
- char(0),
- char(19),
- char(0),
- char(32),
- char(0),
- char(25),
- char(0),
- char(3),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(4),
- char(0),
- char(36),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(26),
- char(0),
- char(5),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(13),
- char(0),
- char(40),
- char(0),
- char(7),
- char(0),
- char(41),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(27),
- char(0),
- char(5),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(13),
- char(0),
- char(42),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(4),
- char(0),
- char(44),
- char(0),
- char(28),
- char(0),
- char(2),
- char(0),
- char(13),
- char(0),
- char(45),
- char(0),
- char(7),
- char(0),
- char(46),
- char(0),
- char(29),
- char(0),
- char(4),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(28),
- char(0),
- char(48),
- char(0),
- char(4),
- char(0),
- char(49),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(30),
- char(0),
- char(1),
- char(0),
- char(4),
- char(0),
- char(50),
- char(0),
- char(31),
- char(0),
- char(2),
- char(0),
- char(2),
- char(0),
- char(50),
- char(0),
- char(0),
- char(0),
- char(51),
- char(0),
- char(32),
- char(0),
- char(2),
- char(0),
- char(2),
- char(0),
- char(52),
- char(0),
- char(0),
- char(0),
- char(51),
- char(0),
- char(33),
- char(0),
- char(2),
- char(0),
- char(0),
- char(0),
- char(52),
- char(0),
- char(0),
- char(0),
- char(53),
- char(0),
- char(34),
- char(0),
- char(8),
- char(0),
- char(13),
- char(0),
- char(54),
- char(0),
- char(14),
- char(0),
- char(55),
- char(0),
- char(30),
- char(0),
- char(56),
- char(0),
- char(32),
- char(0),
- char(57),
- char(0),
- char(33),
- char(0),
- char(58),
- char(0),
- char(31),
- char(0),
- char(59),
- char(0),
- char(4),
- char(0),
- char(60),
- char(0),
- char(4),
- char(0),
- char(61),
- char(0),
- char(35),
- char(0),
- char(4),
- char(0),
- char(34),
- char(0),
- char(62),
- char(0),
- char(13),
- char(0),
- char(63),
- char(0),
- char(4),
- char(0),
- char(64),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(36),
- char(0),
- char(7),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(35),
- char(0),
- char(65),
- char(0),
- char(23),
- char(0),
- char(66),
- char(0),
- char(24),
- char(0),
- char(67),
- char(0),
- char(37),
- char(0),
- char(68),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(0),
- char(0),
- char(69),
- char(0),
- char(38),
- char(0),
- char(2),
- char(0),
- char(36),
- char(0),
- char(70),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(39),
- char(0),
- char(4),
- char(0),
- char(17),
- char(0),
- char(71),
- char(0),
- char(25),
- char(0),
- char(72),
- char(0),
- char(4),
- char(0),
- char(73),
- char(0),
- char(7),
- char(0),
- char(74),
- char(0),
- char(40),
- char(0),
- char(4),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(39),
- char(0),
- char(75),
- char(0),
- char(4),
- char(0),
- char(76),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(41),
- char(0),
- char(3),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(4),
- char(0),
- char(77),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(42),
- char(0),
- char(3),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(4),
- char(0),
- char(77),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(43),
- char(0),
- char(4),
- char(0),
- char(4),
- char(0),
- char(78),
- char(0),
- char(7),
- char(0),
- char(79),
- char(0),
- char(7),
- char(0),
- char(80),
- char(0),
- char(7),
- char(0),
- char(81),
- char(0),
- char(37),
- char(0),
- char(14),
- char(0),
- char(4),
- char(0),
- char(82),
- char(0),
- char(4),
- char(0),
- char(83),
- char(0),
- char(43),
- char(0),
- char(84),
- char(0),
- char(4),
- char(0),
- char(85),
- char(0),
- char(7),
- char(0),
- char(86),
- char(0),
- char(7),
- char(0),
- char(87),
- char(0),
- char(7),
- char(0),
- char(88),
- char(0),
- char(7),
- char(0),
- char(89),
- char(0),
- char(7),
- char(0),
- char(90),
- char(0),
- char(4),
- char(0),
- char(91),
- char(0),
- char(4),
- char(0),
- char(92),
- char(0),
- char(4),
- char(0),
- char(93),
- char(0),
- char(4),
- char(0),
- char(94),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(44),
- char(0),
- char(5),
- char(0),
- char(25),
- char(0),
- char(38),
- char(0),
- char(35),
- char(0),
- char(65),
- char(0),
- char(13),
- char(0),
- char(39),
- char(0),
- char(7),
- char(0),
- char(43),
- char(0),
- char(4),
- char(0),
- char(95),
- char(0),
- char(45),
- char(0),
- char(5),
- char(0),
- char(27),
- char(0),
- char(47),
- char(0),
- char(13),
- char(0),
- char(96),
- char(0),
- char(14),
- char(0),
- char(97),
- char(0),
- char(4),
- char(0),
- char(98),
- char(0),
- char(0),
- char(0),
- char(99),
- char(0),
- char(46),
- char(0),
- char(25),
- char(0),
- char(9),
- char(0),
- char(100),
- char(0),
- char(9),
- char(0),
- char(101),
- char(0),
- char(25),
- char(0),
- char(102),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(18),
- char(0),
- char(103),
- char(0),
- char(18),
- char(0),
- char(104),
- char(0),
- char(14),
- char(0),
- char(105),
- char(0),
- char(14),
- char(0),
- char(106),
- char(0),
- char(14),
- char(0),
- char(107),
- char(0),
- char(8),
- char(0),
- char(108),
- char(0),
- char(8),
- char(0),
- char(109),
- char(0),
- char(8),
- char(0),
- char(110),
- char(0),
- char(8),
- char(0),
- char(111),
- char(0),
- char(8),
- char(0),
- char(112),
- char(0),
- char(8),
- char(0),
- char(113),
- char(0),
- char(8),
- char(0),
- char(114),
- char(0),
- char(8),
- char(0),
- char(115),
- char(0),
- char(4),
- char(0),
- char(116),
- char(0),
- char(4),
- char(0),
- char(117),
- char(0),
- char(4),
- char(0),
- char(118),
- char(0),
- char(4),
- char(0),
- char(119),
- char(0),
- char(4),
- char(0),
- char(120),
- char(0),
- char(4),
- char(0),
- char(121),
- char(0),
- char(4),
- char(0),
- char(122),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(47),
- char(0),
- char(25),
- char(0),
- char(9),
- char(0),
- char(100),
- char(0),
- char(9),
- char(0),
- char(101),
- char(0),
- char(25),
- char(0),
- char(102),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(17),
- char(0),
- char(103),
- char(0),
- char(17),
- char(0),
- char(104),
- char(0),
- char(13),
- char(0),
- char(105),
- char(0),
- char(13),
- char(0),
- char(106),
- char(0),
- char(13),
- char(0),
- char(107),
- char(0),
- char(7),
- char(0),
- char(108),
- char(0),
- char(7),
- char(0),
- char(109),
- char(0),
- char(7),
- char(0),
- char(110),
- char(0),
- char(7),
- char(0),
- char(111),
- char(0),
- char(7),
- char(0),
- char(112),
- char(0),
- char(7),
- char(0),
- char(113),
- char(0),
- char(7),
- char(0),
- char(114),
- char(0),
- char(7),
- char(0),
- char(115),
- char(0),
- char(4),
- char(0),
- char(116),
- char(0),
- char(4),
- char(0),
- char(117),
- char(0),
- char(4),
- char(0),
- char(118),
- char(0),
- char(4),
- char(0),
- char(119),
- char(0),
- char(4),
- char(0),
- char(120),
- char(0),
- char(4),
- char(0),
- char(121),
- char(0),
- char(4),
- char(0),
- char(122),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(48),
- char(0),
- char(2),
- char(0),
- char(49),
- char(0),
- char(123),
- char(0),
- char(14),
- char(0),
- char(124),
- char(0),
- char(50),
- char(0),
- char(2),
- char(0),
- char(51),
- char(0),
- char(123),
- char(0),
- char(13),
- char(0),
- char(124),
- char(0),
- char(52),
- char(0),
- char(21),
- char(0),
- char(47),
- char(0),
- char(125),
- char(0),
- char(15),
- char(0),
- char(126),
- char(0),
- char(13),
- char(0),
- char(127),
- char(0),
- char(13),
- char(0),
- char(-128),
- char(0),
- char(13),
- char(0),
- char(-127),
- char(0),
- char(13),
- char(0),
- char(-126),
- char(0),
- char(13),
- char(0),
- char(124),
- char(0),
- char(13),
- char(0),
- char(-125),
- char(0),
- char(13),
- char(0),
- char(-124),
- char(0),
- char(13),
- char(0),
- char(-123),
- char(0),
- char(13),
- char(0),
- char(-122),
- char(0),
- char(7),
- char(0),
- char(-121),
- char(0),
- char(7),
- char(0),
- char(-120),
- char(0),
- char(7),
- char(0),
- char(-119),
- char(0),
- char(7),
- char(0),
- char(-118),
- char(0),
- char(7),
- char(0),
- char(-117),
- char(0),
- char(7),
- char(0),
- char(-116),
- char(0),
- char(7),
- char(0),
- char(-115),
- char(0),
- char(7),
- char(0),
- char(-114),
- char(0),
- char(7),
- char(0),
- char(-113),
- char(0),
- char(4),
- char(0),
- char(-112),
- char(0),
- char(53),
- char(0),
- char(22),
- char(0),
- char(46),
- char(0),
- char(125),
- char(0),
- char(16),
- char(0),
- char(126),
- char(0),
- char(14),
- char(0),
- char(127),
- char(0),
- char(14),
- char(0),
- char(-128),
- char(0),
- char(14),
- char(0),
- char(-127),
- char(0),
- char(14),
- char(0),
- char(-126),
- char(0),
- char(14),
- char(0),
- char(124),
- char(0),
- char(14),
- char(0),
- char(-125),
- char(0),
- char(14),
- char(0),
- char(-124),
- char(0),
- char(14),
- char(0),
- char(-123),
- char(0),
- char(14),
- char(0),
- char(-122),
- char(0),
- char(8),
- char(0),
- char(-121),
- char(0),
- char(8),
- char(0),
- char(-120),
- char(0),
- char(8),
- char(0),
- char(-119),
- char(0),
- char(8),
- char(0),
- char(-118),
- char(0),
- char(8),
- char(0),
- char(-117),
- char(0),
- char(8),
- char(0),
- char(-116),
- char(0),
- char(8),
- char(0),
- char(-115),
- char(0),
- char(8),
- char(0),
- char(-114),
- char(0),
- char(8),
- char(0),
- char(-113),
- char(0),
- char(4),
- char(0),
- char(-112),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(54),
- char(0),
- char(2),
- char(0),
- char(4),
- char(0),
- char(-111),
- char(0),
- char(4),
- char(0),
- char(-110),
- char(0),
- char(55),
- char(0),
- char(13),
- char(0),
- char(56),
- char(0),
- char(-109),
- char(0),
- char(56),
- char(0),
- char(-108),
- char(0),
- char(0),
- char(0),
- char(35),
- char(0),
- char(4),
- char(0),
- char(-107),
- char(0),
- char(4),
- char(0),
- char(-106),
- char(0),
- char(4),
- char(0),
- char(-105),
- char(0),
- char(4),
- char(0),
- char(-104),
- char(0),
- char(7),
- char(0),
- char(-103),
- char(0),
- char(7),
- char(0),
- char(-102),
- char(0),
- char(4),
- char(0),
- char(-101),
- char(0),
- char(4),
- char(0),
- char(-100),
- char(0),
- char(7),
- char(0),
- char(-99),
- char(0),
- char(4),
- char(0),
- char(-98),
- char(0),
- char(57),
- char(0),
- char(3),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(13),
- char(0),
- char(-96),
- char(0),
- char(13),
- char(0),
- char(-95),
- char(0),
- char(58),
- char(0),
- char(3),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(14),
- char(0),
- char(-96),
- char(0),
- char(14),
- char(0),
- char(-95),
- char(0),
- char(59),
- char(0),
- char(13),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(18),
- char(0),
- char(-94),
- char(0),
- char(18),
- char(0),
- char(-93),
- char(0),
- char(4),
- char(0),
- char(-92),
- char(0),
- char(4),
- char(0),
- char(-91),
- char(0),
- char(4),
- char(0),
- char(-90),
- char(0),
- char(7),
- char(0),
- char(-89),
- char(0),
- char(7),
- char(0),
- char(-88),
- char(0),
- char(7),
- char(0),
- char(-87),
- char(0),
- char(7),
- char(0),
- char(-86),
- char(0),
- char(7),
- char(0),
- char(-85),
- char(0),
- char(7),
- char(0),
- char(-84),
- char(0),
- char(7),
- char(0),
- char(-83),
- char(0),
- char(60),
- char(0),
- char(13),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(4),
- char(0),
- char(-92),
- char(0),
- char(4),
- char(0),
- char(-91),
- char(0),
- char(4),
- char(0),
- char(-90),
- char(0),
- char(7),
- char(0),
- char(-89),
- char(0),
- char(7),
- char(0),
- char(-88),
- char(0),
- char(7),
- char(0),
- char(-87),
- char(0),
- char(7),
- char(0),
- char(-86),
- char(0),
- char(7),
- char(0),
- char(-85),
- char(0),
- char(7),
- char(0),
- char(-84),
- char(0),
- char(7),
- char(0),
- char(-83),
- char(0),
- char(61),
- char(0),
- char(11),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(7),
- char(0),
- char(-82),
- char(0),
- char(7),
- char(0),
- char(-81),
- char(0),
- char(7),
- char(0),
- char(-80),
- char(0),
- char(7),
- char(0),
- char(-85),
- char(0),
- char(7),
- char(0),
- char(-84),
- char(0),
- char(7),
- char(0),
- char(-83),
- char(0),
- char(7),
- char(0),
- char(-79),
- char(0),
- char(0),
- char(0),
- char(21),
- char(0),
- char(62),
- char(0),
- char(9),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(13),
- char(0),
- char(-78),
- char(0),
- char(13),
- char(0),
- char(-77),
- char(0),
- char(13),
- char(0),
- char(-76),
- char(0),
- char(13),
- char(0),
- char(-75),
- char(0),
- char(4),
- char(0),
- char(-74),
- char(0),
- char(4),
- char(0),
- char(-73),
- char(0),
- char(63),
- char(0),
- char(5),
- char(0),
- char(62),
- char(0),
- char(-72),
- char(0),
- char(4),
- char(0),
- char(-71),
- char(0),
- char(7),
- char(0),
- char(-70),
- char(0),
- char(7),
- char(0),
- char(-69),
- char(0),
- char(7),
- char(0),
- char(-68),
- char(0),
- char(64),
- char(0),
- char(9),
- char(0),
- char(55),
- char(0),
- char(-97),
- char(0),
- char(17),
- char(0),
- char(-94),
- char(0),
- char(17),
- char(0),
- char(-93),
- char(0),
- char(7),
- char(0),
- char(-78),
- char(0),
- char(7),
- char(0),
- char(-77),
- char(0),
- char(7),
- char(0),
- char(-76),
- char(0),
- char(7),
- char(0),
- char(-75),
- char(0),
- char(4),
- char(0),
- char(-74),
- char(0),
- char(4),
- char(0),
- char(-73),
- char(0),
- char(49),
- char(0),
- char(22),
- char(0),
- char(8),
- char(0),
- char(-67),
- char(0),
- char(8),
- char(0),
- char(-79),
- char(0),
- char(8),
- char(0),
- char(110),
- char(0),
- char(8),
- char(0),
- char(-66),
- char(0),
- char(8),
- char(0),
- char(112),
- char(0),
- char(8),
- char(0),
- char(-65),
- char(0),
- char(8),
- char(0),
- char(-64),
- char(0),
- char(8),
- char(0),
- char(-63),
- char(0),
- char(8),
- char(0),
- char(-62),
- char(0),
- char(8),
- char(0),
- char(-61),
- char(0),
- char(8),
- char(0),
- char(-60),
- char(0),
- char(8),
- char(0),
- char(-59),
- char(0),
- char(8),
- char(0),
- char(-58),
- char(0),
- char(8),
- char(0),
- char(-57),
- char(0),
- char(8),
- char(0),
- char(-56),
- char(0),
- char(8),
- char(0),
- char(-55),
- char(0),
- char(4),
- char(0),
- char(-54),
- char(0),
- char(4),
- char(0),
- char(-53),
- char(0),
- char(4),
- char(0),
- char(-52),
- char(0),
- char(4),
- char(0),
- char(-51),
- char(0),
- char(4),
- char(0),
- char(-50),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(51),
- char(0),
- char(22),
- char(0),
- char(7),
- char(0),
- char(-67),
- char(0),
- char(7),
- char(0),
- char(-79),
- char(0),
- char(7),
- char(0),
- char(110),
- char(0),
- char(7),
- char(0),
- char(-66),
- char(0),
- char(7),
- char(0),
- char(112),
- char(0),
- char(7),
- char(0),
- char(-65),
- char(0),
- char(7),
- char(0),
- char(-64),
- char(0),
- char(7),
- char(0),
- char(-63),
- char(0),
- char(7),
- char(0),
- char(-62),
- char(0),
- char(7),
- char(0),
- char(-61),
- char(0),
- char(7),
- char(0),
- char(-60),
- char(0),
- char(7),
- char(0),
- char(-59),
- char(0),
- char(7),
- char(0),
- char(-58),
- char(0),
- char(7),
- char(0),
- char(-57),
- char(0),
- char(7),
- char(0),
- char(-56),
- char(0),
- char(7),
- char(0),
- char(-55),
- char(0),
- char(4),
- char(0),
- char(-54),
- char(0),
- char(4),
- char(0),
- char(-53),
- char(0),
- char(4),
- char(0),
- char(-52),
- char(0),
- char(4),
- char(0),
- char(-51),
- char(0),
- char(4),
- char(0),
- char(-50),
- char(0),
- char(0),
- char(0),
- char(37),
- char(0),
- char(65),
- char(0),
- char(4),
- char(0),
- char(7),
- char(0),
- char(-49),
- char(0),
- char(7),
- char(0),
- char(-48),
- char(0),
- char(7),
- char(0),
- char(-47),
- char(0),
- char(4),
- char(0),
- char(78),
- char(0),
- char(66),
- char(0),
- char(10),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(13),
- char(0),
- char(-45),
- char(0),
- char(13),
- char(0),
- char(-44),
- char(0),
- char(13),
- char(0),
- char(-43),
- char(0),
- char(13),
- char(0),
- char(-42),
- char(0),
- char(13),
- char(0),
- char(-41),
- char(0),
- char(7),
- char(0),
- char(-121),
- char(0),
- char(7),
- char(0),
- char(-40),
- char(0),
- char(4),
- char(0),
- char(-39),
- char(0),
- char(4),
- char(0),
- char(53),
- char(0),
- char(67),
- char(0),
- char(4),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(4),
- char(0),
- char(-38),
- char(0),
- char(7),
- char(0),
- char(-37),
- char(0),
- char(4),
- char(0),
- char(-36),
- char(0),
- char(68),
- char(0),
- char(4),
- char(0),
- char(13),
- char(0),
- char(-41),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(4),
- char(0),
- char(-35),
- char(0),
- char(7),
- char(0),
- char(-34),
- char(0),
- char(69),
- char(0),
- char(7),
- char(0),
- char(13),
- char(0),
- char(-33),
- char(0),
- char(65),
- char(0),
- char(-46),
- char(0),
- char(4),
- char(0),
- char(-32),
- char(0),
- char(7),
- char(0),
- char(-31),
- char(0),
- char(7),
- char(0),
- char(-30),
- char(0),
- char(7),
- char(0),
- char(-29),
- char(0),
- char(4),
- char(0),
- char(53),
- char(0),
- char(70),
- char(0),
- char(6),
- char(0),
- char(15),
- char(0),
- char(-28),
- char(0),
- char(13),
- char(0),
- char(-30),
- char(0),
- char(13),
- char(0),
- char(-27),
- char(0),
- char(56),
- char(0),
- char(-26),
- char(0),
- char(4),
- char(0),
- char(-25),
- char(0),
- char(7),
- char(0),
- char(-29),
- char(0),
- char(71),
- char(0),
- char(26),
- char(0),
- char(4),
- char(0),
- char(-24),
- char(0),
- char(7),
- char(0),
- char(-23),
- char(0),
- char(7),
- char(0),
- char(-79),
- char(0),
- char(7),
- char(0),
- char(-22),
- char(0),
- char(7),
- char(0),
- char(-21),
- char(0),
- char(7),
- char(0),
- char(-20),
- char(0),
- char(7),
- char(0),
- char(-19),
- char(0),
- char(7),
- char(0),
- char(-18),
- char(0),
- char(7),
- char(0),
- char(-17),
- char(0),
- char(7),
- char(0),
- char(-16),
- char(0),
- char(7),
- char(0),
- char(-15),
- char(0),
- char(7),
- char(0),
- char(-14),
- char(0),
- char(7),
- char(0),
- char(-13),
- char(0),
- char(7),
- char(0),
- char(-12),
- char(0),
- char(7),
- char(0),
- char(-11),
- char(0),
- char(7),
- char(0),
- char(-10),
- char(0),
- char(7),
- char(0),
- char(-9),
- char(0),
- char(7),
- char(0),
- char(-8),
- char(0),
- char(7),
- char(0),
- char(-7),
- char(0),
- char(7),
- char(0),
- char(-6),
- char(0),
- char(7),
- char(0),
- char(-5),
- char(0),
- char(4),
- char(0),
- char(-4),
- char(0),
- char(4),
- char(0),
- char(-3),
- char(0),
- char(4),
- char(0),
- char(-2),
- char(0),
- char(4),
- char(0),
- char(-1),
- char(0),
- char(4),
- char(0),
- char(117),
- char(0),
- char(72),
- char(0),
- char(12),
- char(0),
- char(15),
- char(0),
- char(0),
- char(1),
- char(15),
- char(0),
- char(1),
- char(1),
- char(15),
- char(0),
- char(2),
- char(1),
- char(13),
- char(0),
- char(3),
- char(1),
- char(13),
- char(0),
- char(4),
- char(1),
- char(7),
- char(0),
- char(5),
- char(1),
- char(4),
- char(0),
- char(6),
- char(1),
- char(4),
- char(0),
- char(7),
- char(1),
- char(4),
- char(0),
- char(8),
- char(1),
- char(4),
- char(0),
- char(9),
- char(1),
- char(7),
- char(0),
- char(-31),
- char(0),
- char(4),
- char(0),
- char(53),
- char(0),
- char(73),
- char(0),
- char(27),
- char(0),
- char(17),
- char(0),
- char(10),
- char(1),
- char(15),
- char(0),
- char(11),
- char(1),
- char(15),
- char(0),
- char(12),
- char(1),
- char(13),
- char(0),
- char(3),
- char(1),
- char(13),
- char(0),
- char(13),
- char(1),
- char(13),
- char(0),
- char(14),
- char(1),
- char(13),
- char(0),
- char(15),
- char(1),
- char(13),
- char(0),
- char(16),
- char(1),
- char(13),
- char(0),
- char(17),
- char(1),
- char(4),
- char(0),
- char(18),
- char(1),
- char(7),
- char(0),
- char(19),
- char(1),
- char(4),
- char(0),
- char(20),
- char(1),
- char(4),
- char(0),
- char(21),
- char(1),
- char(4),
- char(0),
- char(22),
- char(1),
- char(7),
- char(0),
- char(23),
- char(1),
- char(7),
- char(0),
- char(24),
- char(1),
- char(4),
- char(0),
- char(25),
- char(1),
- char(4),
- char(0),
- char(26),
- char(1),
- char(7),
- char(0),
- char(27),
- char(1),
- char(7),
- char(0),
- char(28),
- char(1),
- char(7),
- char(0),
- char(29),
- char(1),
- char(7),
- char(0),
- char(30),
- char(1),
- char(7),
- char(0),
- char(31),
- char(1),
- char(7),
- char(0),
- char(32),
- char(1),
- char(4),
- char(0),
- char(33),
- char(1),
- char(4),
- char(0),
- char(34),
- char(1),
- char(4),
- char(0),
- char(35),
- char(1),
- char(74),
- char(0),
- char(12),
- char(0),
- char(9),
- char(0),
- char(36),
- char(1),
- char(9),
- char(0),
- char(37),
- char(1),
- char(13),
- char(0),
- char(38),
- char(1),
- char(7),
- char(0),
- char(39),
- char(1),
- char(7),
- char(0),
- char(-63),
- char(0),
- char(7),
- char(0),
- char(40),
- char(1),
- char(4),
- char(0),
- char(41),
- char(1),
- char(13),
- char(0),
- char(42),
- char(1),
- char(4),
- char(0),
- char(43),
- char(1),
- char(4),
- char(0),
- char(44),
- char(1),
- char(4),
- char(0),
- char(45),
- char(1),
- char(4),
- char(0),
- char(53),
- char(0),
- char(75),
- char(0),
- char(19),
- char(0),
- char(47),
- char(0),
- char(125),
- char(0),
- char(72),
- char(0),
- char(46),
- char(1),
- char(65),
- char(0),
- char(47),
- char(1),
- char(66),
- char(0),
- char(48),
- char(1),
- char(67),
- char(0),
- char(49),
- char(1),
- char(68),
- char(0),
- char(50),
- char(1),
- char(69),
- char(0),
- char(51),
- char(1),
- char(70),
- char(0),
- char(52),
- char(1),
- char(73),
- char(0),
- char(53),
- char(1),
- char(74),
- char(0),
- char(54),
- char(1),
- char(4),
- char(0),
- char(55),
- char(1),
- char(4),
- char(0),
- char(21),
- char(1),
- char(4),
- char(0),
- char(56),
- char(1),
- char(4),
- char(0),
- char(57),
- char(1),
- char(4),
- char(0),
- char(58),
- char(1),
- char(4),
- char(0),
- char(59),
- char(1),
- char(4),
- char(0),
- char(60),
- char(1),
- char(4),
- char(0),
- char(61),
- char(1),
- char(71),
- char(0),
- char(62),
- char(1),
-};
-int b3s_bulletDNAlen64 = sizeof(b3s_bulletDNAstr64);
diff --git a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h b/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h
deleted file mode 100644
index d9e153e238..0000000000
--- a/thirdparty/bullet/Bullet3Serialize/Bullet2FileLoader/b3Serializer.h
+++ /dev/null
@@ -1,601 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef B3_SERIALIZER_H
-#define B3_SERIALIZER_H
-
-#include "Bullet3Common/b3Scalar.h" // has definitions like B3_FORCE_INLINE
-#include "Bullet3Common/b3StackAlloc.h"
-#include "Bullet3Common/b3HashMap.h"
-
-#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__)
-#include <memory.h>
-#endif
-#include <string.h>
-
-extern char b3s_bulletDNAstr[];
-extern int b3s_bulletDNAlen;
-extern char b3s_bulletDNAstr64[];
-extern int b3s_bulletDNAlen64;
-
-B3_FORCE_INLINE int b3StrLen(const char* str)
-{
- if (!str)
- return (0);
- int len = 0;
-
- while (*str != 0)
- {
- str++;
- len++;
- }
-
- return len;
-}
-
-class b3Chunk
-{
-public:
- int m_chunkCode;
- int m_length;
- void* m_oldPtr;
- int m_dna_nr;
- int m_number;
-};
-
-enum b3SerializationFlags
-{
- B3_SERIALIZE_NO_BVH = 1,
- B3_SERIALIZE_NO_TRIANGLEINFOMAP = 2,
- B3_SERIALIZE_NO_DUPLICATE_ASSERT = 4
-};
-
-class b3Serializer
-{
-public:
- virtual ~b3Serializer() {}
-
- virtual const unsigned char* getBufferPointer() const = 0;
-
- virtual int getCurrentBufferSize() const = 0;
-
- virtual b3Chunk* allocate(size_t size, int numElements) = 0;
-
- virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode, void* oldPtr) = 0;
-
- virtual void* findPointer(void* oldPtr) = 0;
-
- virtual void* getUniquePointer(void* oldPtr) = 0;
-
- virtual void startSerialization() = 0;
-
- virtual void finishSerialization() = 0;
-
- virtual const char* findNameForPointer(const void* ptr) const = 0;
-
- virtual void registerNameForPointer(const void* ptr, const char* name) = 0;
-
- virtual void serializeName(const char* ptr) = 0;
-
- virtual int getSerializationFlags() const = 0;
-
- virtual void setSerializationFlags(int flags) = 0;
-};
-
-#define B3_HEADER_LENGTH 12
-#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__)
-#define B3_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d))
-#else
-#define B3_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a))
-#endif
-
-#define B3_SOFTBODY_CODE B3_MAKE_ID('S', 'B', 'D', 'Y')
-#define B3_COLLISIONOBJECT_CODE B3_MAKE_ID('C', 'O', 'B', 'J')
-#define B3_RIGIDBODY_CODE B3_MAKE_ID('R', 'B', 'D', 'Y')
-#define B3_CONSTRAINT_CODE B3_MAKE_ID('C', 'O', 'N', 'S')
-#define B3_BOXSHAPE_CODE B3_MAKE_ID('B', 'O', 'X', 'S')
-#define B3_QUANTIZED_BVH_CODE B3_MAKE_ID('Q', 'B', 'V', 'H')
-#define B3_TRIANLGE_INFO_MAP B3_MAKE_ID('T', 'M', 'A', 'P')
-#define B3_SHAPE_CODE B3_MAKE_ID('S', 'H', 'A', 'P')
-#define B3_ARRAY_CODE B3_MAKE_ID('A', 'R', 'A', 'Y')
-#define B3_SBMATERIAL_CODE B3_MAKE_ID('S', 'B', 'M', 'T')
-#define B3_SBNODE_CODE B3_MAKE_ID('S', 'B', 'N', 'D')
-#define B3_DYNAMICSWORLD_CODE B3_MAKE_ID('D', 'W', 'L', 'D')
-#define B3_DNA_CODE B3_MAKE_ID('D', 'N', 'A', '1')
-
-struct b3PointerUid
-{
- union {
- void* m_ptr;
- int m_uniqueIds[2];
- };
-};
-
-///The b3DefaultSerializer is the main Bullet serialization class.
-///The constructor takes an optional argument for backwards compatibility, it is recommended to leave this empty/zero.
-class b3DefaultSerializer : public b3Serializer
-{
- b3AlignedObjectArray<char*> mTypes;
- b3AlignedObjectArray<short*> mStructs;
- b3AlignedObjectArray<short> mTlens;
- b3HashMap<b3HashInt, int> mStructReverse;
- b3HashMap<b3HashString, int> mTypeLookup;
-
- b3HashMap<b3HashPtr, void*> m_chunkP;
-
- b3HashMap<b3HashPtr, const char*> m_nameMap;
-
- b3HashMap<b3HashPtr, b3PointerUid> m_uniquePointers;
- int m_uniqueIdGenerator;
-
- int m_totalSize;
- unsigned char* m_buffer;
- int m_currentSize;
- void* m_dna;
- int m_dnaLength;
-
- int m_serializationFlags;
-
- b3AlignedObjectArray<b3Chunk*> m_chunkPtrs;
-
-protected:
- virtual void* findPointer(void* oldPtr)
- {
- void** ptr = m_chunkP.find(oldPtr);
- if (ptr && *ptr)
- return *ptr;
- return 0;
- }
-
- void writeDNA()
- {
- b3Chunk* dnaChunk = allocate(m_dnaLength, 1);
- memcpy(dnaChunk->m_oldPtr, m_dna, m_dnaLength);
- finalizeChunk(dnaChunk, "DNA1", B3_DNA_CODE, m_dna);
- }
-
- int getReverseType(const char* type) const
- {
- b3HashString key(type);
- const int* valuePtr = mTypeLookup.find(key);
- if (valuePtr)
- return *valuePtr;
-
- return -1;
- }
-
- void initDNA(const char* bdnaOrg, int dnalen)
- {
- ///was already initialized
- if (m_dna)
- return;
-
- int littleEndian = 1;
- littleEndian = ((char*)&littleEndian)[0];
-
- m_dna = b3AlignedAlloc(dnalen, 16);
- memcpy(m_dna, bdnaOrg, dnalen);
- m_dnaLength = dnalen;
-
- int* intPtr = 0;
- short* shtPtr = 0;
- char* cp = 0;
- int dataLen = 0;
- intPtr = (int*)m_dna;
-
- /*
- SDNA (4 bytes) (magic number)
- NAME (4 bytes)
- <nr> (4 bytes) amount of names (int)
- <string>
- <string>
- */
-
- if (strncmp((const char*)m_dna, "SDNA", 4) == 0)
- {
- // skip ++ NAME
- intPtr++;
- intPtr++;
- }
-
- // Parse names
- if (!littleEndian)
- *intPtr = b3SwapEndian(*intPtr);
-
- dataLen = *intPtr;
-
- intPtr++;
-
- cp = (char*)intPtr;
- int i;
- for (i = 0; i < dataLen; i++)
- {
- while (*cp) cp++;
- cp++;
- }
- cp = b3AlignPointer(cp, 4);
-
- /*
- TYPE (4 bytes)
- <nr> amount of types (int)
- <string>
- <string>
- */
-
- intPtr = (int*)cp;
- b3Assert(strncmp(cp, "TYPE", 4) == 0);
- intPtr++;
-
- if (!littleEndian)
- *intPtr = b3SwapEndian(*intPtr);
-
- dataLen = *intPtr;
- intPtr++;
-
- cp = (char*)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- mTypes.push_back(cp);
- while (*cp) cp++;
- cp++;
- }
-
- cp = b3AlignPointer(cp, 4);
-
- /*
- TLEN (4 bytes)
- <len> (short) the lengths of types
- <len>
- */
-
- // Parse type lens
- intPtr = (int*)cp;
- b3Assert(strncmp(cp, "TLEN", 4) == 0);
- intPtr++;
-
- dataLen = (int)mTypes.size();
-
- shtPtr = (short*)intPtr;
- for (i = 0; i < dataLen; i++, shtPtr++)
- {
- if (!littleEndian)
- shtPtr[0] = b3SwapEndian(shtPtr[0]);
- mTlens.push_back(shtPtr[0]);
- }
-
- if (dataLen & 1) shtPtr++;
-
- /*
- STRC (4 bytes)
- <nr> amount of structs (int)
- <typenr>
- <nr_of_elems>
- <typenr>
- <namenr>
- <typenr>
- <namenr>
- */
-
- intPtr = (int*)shtPtr;
- cp = (char*)intPtr;
- b3Assert(strncmp(cp, "STRC", 4) == 0);
- intPtr++;
-
- if (!littleEndian)
- *intPtr = b3SwapEndian(*intPtr);
- dataLen = *intPtr;
- intPtr++;
-
- shtPtr = (short*)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- mStructs.push_back(shtPtr);
-
- if (!littleEndian)
- {
- shtPtr[0] = b3SwapEndian(shtPtr[0]);
- shtPtr[1] = b3SwapEndian(shtPtr[1]);
-
- int len = shtPtr[1];
- shtPtr += 2;
-
- for (int a = 0; a < len; a++, shtPtr += 2)
- {
- shtPtr[0] = b3SwapEndian(shtPtr[0]);
- shtPtr[1] = b3SwapEndian(shtPtr[1]);
- }
- }
- else
- {
- shtPtr += (2 * shtPtr[1]) + 2;
- }
- }
-
- // build reverse lookups
- for (i = 0; i < (int)mStructs.size(); i++)
- {
- short* strc = mStructs.at(i);
- mStructReverse.insert(strc[0], i);
- mTypeLookup.insert(b3HashString(mTypes[strc[0]]), i);
- }
- }
-
-public:
- b3DefaultSerializer(int totalSize = 0)
- : m_totalSize(totalSize),
- m_currentSize(0),
- m_dna(0),
- m_dnaLength(0),
- m_serializationFlags(0)
- {
- m_buffer = m_totalSize ? (unsigned char*)b3AlignedAlloc(totalSize, 16) : 0;
-
- const bool VOID_IS_8 = ((sizeof(void*) == 8));
-
-#ifdef B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
-#if _WIN64
- initDNA((const char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64);
-#else
- b3Assert(0);
-#endif
- }
- else
- {
-#ifndef _WIN64
- initDNA((const char*)b3s_bulletDNAstr, b3s_bulletDNAlen);
-#else
- b3Assert(0);
-#endif
- }
-
-#else //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
- initDNA((const char*)b3s_bulletDNAstr64, b3s_bulletDNAlen64);
- }
- else
- {
- initDNA((const char*)b3s_bulletDNAstr, b3s_bulletDNAlen);
- }
-#endif //B3_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- }
-
- virtual ~b3DefaultSerializer()
- {
- if (m_buffer)
- b3AlignedFree(m_buffer);
- if (m_dna)
- b3AlignedFree(m_dna);
- }
-
- void writeHeader(unsigned char* buffer) const
- {
-#ifdef B3_USE_DOUBLE_PRECISION
- memcpy(buffer, "BULLETd", 7);
-#else
- memcpy(buffer, "BULLETf", 7);
-#endif //B3_USE_DOUBLE_PRECISION
-
- int littleEndian = 1;
- littleEndian = ((char*)&littleEndian)[0];
-
- if (sizeof(void*) == 8)
- {
- buffer[7] = '-';
- }
- else
- {
- buffer[7] = '_';
- }
-
- if (littleEndian)
- {
- buffer[8] = 'v';
- }
- else
- {
- buffer[8] = 'V';
- }
-
- buffer[9] = '2';
- buffer[10] = '8';
- buffer[11] = '1';
- }
-
- virtual void startSerialization()
- {
- m_uniqueIdGenerator = 1;
- if (m_totalSize)
- {
- unsigned char* buffer = internalAlloc(B3_HEADER_LENGTH);
- writeHeader(buffer);
- }
- }
-
- virtual void finishSerialization()
- {
- writeDNA();
-
- //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now
- int mysize = 0;
- if (!m_totalSize)
- {
- if (m_buffer)
- b3AlignedFree(m_buffer);
-
- m_currentSize += B3_HEADER_LENGTH;
- m_buffer = (unsigned char*)b3AlignedAlloc(m_currentSize, 16);
-
- unsigned char* currentPtr = m_buffer;
- writeHeader(m_buffer);
- currentPtr += B3_HEADER_LENGTH;
- mysize += B3_HEADER_LENGTH;
- for (int i = 0; i < m_chunkPtrs.size(); i++)
- {
- int curLength = sizeof(b3Chunk) + m_chunkPtrs[i]->m_length;
- memcpy(currentPtr, m_chunkPtrs[i], curLength);
- b3AlignedFree(m_chunkPtrs[i]);
- currentPtr += curLength;
- mysize += curLength;
- }
- }
-
- mTypes.clear();
- mStructs.clear();
- mTlens.clear();
- mStructReverse.clear();
- mTypeLookup.clear();
- m_chunkP.clear();
- m_nameMap.clear();
- m_uniquePointers.clear();
- m_chunkPtrs.clear();
- }
-
- virtual void* getUniquePointer(void* oldPtr)
- {
- if (!oldPtr)
- return 0;
-
- b3PointerUid* uptr = (b3PointerUid*)m_uniquePointers.find(oldPtr);
- if (uptr)
- {
- return uptr->m_ptr;
- }
- m_uniqueIdGenerator++;
-
- b3PointerUid uid;
- uid.m_uniqueIds[0] = m_uniqueIdGenerator;
- uid.m_uniqueIds[1] = m_uniqueIdGenerator;
- m_uniquePointers.insert(oldPtr, uid);
- return uid.m_ptr;
- }
-
- virtual const unsigned char* getBufferPointer() const
- {
- return m_buffer;
- }
-
- virtual int getCurrentBufferSize() const
- {
- return m_currentSize;
- }
-
- virtual void finalizeChunk(b3Chunk* chunk, const char* structType, int chunkCode, void* oldPtr)
- {
- if (!(m_serializationFlags & B3_SERIALIZE_NO_DUPLICATE_ASSERT))
- {
- b3Assert(!findPointer(oldPtr));
- }
-
- chunk->m_dna_nr = getReverseType(structType);
-
- chunk->m_chunkCode = chunkCode;
-
- void* uniquePtr = getUniquePointer(oldPtr);
-
- m_chunkP.insert(oldPtr, uniquePtr); //chunk->m_oldPtr);
- chunk->m_oldPtr = uniquePtr; //oldPtr;
- }
-
- virtual unsigned char* internalAlloc(size_t size)
- {
- unsigned char* ptr = 0;
-
- if (m_totalSize)
- {
- ptr = m_buffer + m_currentSize;
- m_currentSize += int(size);
- b3Assert(m_currentSize < m_totalSize);
- }
- else
- {
- ptr = (unsigned char*)b3AlignedAlloc(size, 16);
- m_currentSize += int(size);
- }
- return ptr;
- }
-
- virtual b3Chunk* allocate(size_t size, int numElements)
- {
- unsigned char* ptr = internalAlloc(int(size) * numElements + sizeof(b3Chunk));
-
- unsigned char* data = ptr + sizeof(b3Chunk);
-
- b3Chunk* chunk = (b3Chunk*)ptr;
- chunk->m_chunkCode = 0;
- chunk->m_oldPtr = data;
- chunk->m_length = int(size) * numElements;
- chunk->m_number = numElements;
-
- m_chunkPtrs.push_back(chunk);
-
- return chunk;
- }
-
- virtual const char* findNameForPointer(const void* ptr) const
- {
- const char* const* namePtr = m_nameMap.find(ptr);
- if (namePtr && *namePtr)
- return *namePtr;
- return 0;
- }
-
- virtual void registerNameForPointer(const void* ptr, const char* name)
- {
- m_nameMap.insert(ptr, name);
- }
-
- virtual void serializeName(const char* name)
- {
- if (name)
- {
- //don't serialize name twice
- if (findPointer((void*)name))
- return;
-
- int len = b3StrLen(name);
- if (len)
- {
- int newLen = len + 1;
- int padding = ((newLen + 3) & ~3) - newLen;
- newLen += padding;
-
- //serialize name string now
- b3Chunk* chunk = allocate(sizeof(char), newLen);
- char* destinationName = (char*)chunk->m_oldPtr;
- for (int i = 0; i < len; i++)
- {
- destinationName[i] = name[i];
- }
- destinationName[len] = 0;
- finalizeChunk(chunk, "char", B3_ARRAY_CODE, (void*)name);
- }
- }
- }
-
- virtual int getSerializationFlags() const
- {
- return m_serializationFlags;
- }
-
- virtual void setSerializationFlags(int flags)
- {
- m_serializationFlags = flags;
- }
-};
-
-#endif //B3_SERIALIZER_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp
deleted file mode 100644
index ec6fe9f4d8..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.cpp
+++ /dev/null
@@ -1,33 +0,0 @@
-
-//Bullet Continuous Collision Detection and Physics Library
-//Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-//
-// btAxisSweep3
-//
-// Copyright (c) 2006 Simon Hobbs
-//
-// This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-//
-// 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-//
-// 3. This notice may not be removed or altered from any source distribution.
-#include "btAxisSweep3.h"
-
-btAxisSweep3::btAxisSweep3(const btVector3& worldAabbMin, const btVector3& worldAabbMax, unsigned short int maxHandles, btOverlappingPairCache* pairCache, bool disableRaycastAccelerator)
- : btAxisSweep3Internal<unsigned short int>(worldAabbMin, worldAabbMax, 0xfffe, 0xffff, maxHandles, pairCache, disableRaycastAccelerator)
-{
- // 1 handle is reserved as sentinel
- btAssert(maxHandles > 1 && maxHandles < 32767);
-}
-
-bt32BitAxisSweep3::bt32BitAxisSweep3(const btVector3& worldAabbMin, const btVector3& worldAabbMax, unsigned int maxHandles, btOverlappingPairCache* pairCache, bool disableRaycastAccelerator)
- : btAxisSweep3Internal<unsigned int>(worldAabbMin, worldAabbMax, 0xfffffffe, 0x7fffffff, maxHandles, pairCache, disableRaycastAccelerator)
-{
- // 1 handle is reserved as sentinel
- btAssert(maxHandles > 1 && maxHandles < 2147483647);
-}
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h
deleted file mode 100644
index 1e42f25f3b..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3.h
+++ /dev/null
@@ -1,48 +0,0 @@
-//Bullet Continuous Collision Detection and Physics Library
-//Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-//
-// btAxisSweep3.h
-//
-// Copyright (c) 2006 Simon Hobbs
-//
-// This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-//
-// 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-//
-// 3. This notice may not be removed or altered from any source distribution.
-
-#ifndef BT_AXIS_SWEEP_3_H
-#define BT_AXIS_SWEEP_3_H
-
-#include "LinearMath/btVector3.h"
-#include "btOverlappingPairCache.h"
-#include "btBroadphaseInterface.h"
-#include "btBroadphaseProxy.h"
-#include "btOverlappingPairCallback.h"
-#include "btDbvtBroadphase.h"
-#include "btAxisSweep3Internal.h"
-
-/// The btAxisSweep3 is an efficient implementation of the 3d axis sweep and prune broadphase.
-/// It uses arrays rather then lists for storage of the 3 axis. Also it operates using 16 bit integer coordinates instead of floats.
-/// For large worlds and many objects, use bt32BitAxisSweep3 or btDbvtBroadphase instead. bt32BitAxisSweep3 has higher precision and allows more then 16384 objects at the cost of more memory and bit of performance.
-class btAxisSweep3 : public btAxisSweep3Internal<unsigned short int>
-{
-public:
- btAxisSweep3(const btVector3& worldAabbMin, const btVector3& worldAabbMax, unsigned short int maxHandles = 16384, btOverlappingPairCache* pairCache = 0, bool disableRaycastAccelerator = false);
-};
-
-/// The bt32BitAxisSweep3 allows higher precision quantization and more objects compared to the btAxisSweep3 sweep and prune.
-/// This comes at the cost of more memory per handle, and a bit slower performance.
-/// It uses arrays rather then lists for storage of the 3 axis.
-class bt32BitAxisSweep3 : public btAxisSweep3Internal<unsigned int>
-{
-public:
- bt32BitAxisSweep3(const btVector3& worldAabbMin, const btVector3& worldAabbMax, unsigned int maxHandles = 1500000, btOverlappingPairCache* pairCache = 0, bool disableRaycastAccelerator = false);
-};
-
-#endif
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3Internal.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3Internal.h
deleted file mode 100644
index 2ee35528fd..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btAxisSweep3Internal.h
+++ /dev/null
@@ -1,954 +0,0 @@
-//Bullet Continuous Collision Detection and Physics Library
-//Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-//
-// btAxisSweep3.h
-//
-// Copyright (c) 2006 Simon Hobbs
-//
-// This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages arising from the use of this software.
-//
-// Permission is granted to anyone to use this software for any purpose, including commercial applications, and to alter it and redistribute it freely, subject to the following restrictions:
-//
-// 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-//
-// 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-//
-// 3. This notice may not be removed or altered from any source distribution.
-
-#ifndef BT_AXIS_SWEEP_3_INTERNAL_H
-#define BT_AXIS_SWEEP_3_INTERNAL_H
-
-#include "LinearMath/btVector3.h"
-#include "btOverlappingPairCache.h"
-#include "btBroadphaseInterface.h"
-#include "btBroadphaseProxy.h"
-#include "btOverlappingPairCallback.h"
-#include "btDbvtBroadphase.h"
-
-//#define DEBUG_BROADPHASE 1
-#define USE_OVERLAP_TEST_ON_REMOVES 1
-
-/// The internal templace class btAxisSweep3Internal implements the sweep and prune broadphase.
-/// It uses quantized integers to represent the begin and end points for each of the 3 axis.
-/// Dont use this class directly, use btAxisSweep3 or bt32BitAxisSweep3 instead.
-template <typename BP_FP_INT_TYPE>
-class btAxisSweep3Internal : public btBroadphaseInterface
-{
-protected:
- BP_FP_INT_TYPE m_bpHandleMask;
- BP_FP_INT_TYPE m_handleSentinel;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- class Edge
- {
- public:
- BP_FP_INT_TYPE m_pos; // low bit is min/max
- BP_FP_INT_TYPE m_handle;
-
- BP_FP_INT_TYPE IsMax() const { return static_cast<BP_FP_INT_TYPE>(m_pos & 1); }
- };
-
-public:
- class Handle : public btBroadphaseProxy
- {
- public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- // indexes into the edge arrays
- BP_FP_INT_TYPE m_minEdges[3], m_maxEdges[3]; // 6 * 2 = 12
- // BP_FP_INT_TYPE m_uniqueId;
- btBroadphaseProxy* m_dbvtProxy; //for faster raycast
- //void* m_pOwner; this is now in btBroadphaseProxy.m_clientObject
-
- SIMD_FORCE_INLINE void SetNextFree(BP_FP_INT_TYPE next) { m_minEdges[0] = next; }
- SIMD_FORCE_INLINE BP_FP_INT_TYPE GetNextFree() const { return m_minEdges[0]; }
- }; // 24 bytes + 24 for Edge structures = 44 bytes total per entry
-
-protected:
- btVector3 m_worldAabbMin; // overall system bounds
- btVector3 m_worldAabbMax; // overall system bounds
-
- btVector3 m_quantize; // scaling factor for quantization
-
- BP_FP_INT_TYPE m_numHandles; // number of active handles
- BP_FP_INT_TYPE m_maxHandles; // max number of handles
- Handle* m_pHandles; // handles pool
-
- BP_FP_INT_TYPE m_firstFreeHandle; // free handles list
-
- Edge* m_pEdges[3]; // edge arrays for the 3 axes (each array has m_maxHandles * 2 + 2 sentinel entries)
- void* m_pEdgesRawPtr[3];
-
- btOverlappingPairCache* m_pairCache;
-
- ///btOverlappingPairCallback is an additional optional user callback for adding/removing overlapping pairs, similar interface to btOverlappingPairCache.
- btOverlappingPairCallback* m_userPairCallback;
-
- bool m_ownsPairCache;
-
- int m_invalidPair;
-
- ///additional dynamic aabb structure, used to accelerate ray cast queries.
- ///can be disabled using a optional argument in the constructor
- btDbvtBroadphase* m_raycastAccelerator;
- btOverlappingPairCache* m_nullPairCache;
-
- // allocation/deallocation
- BP_FP_INT_TYPE allocHandle();
- void freeHandle(BP_FP_INT_TYPE handle);
-
- bool testOverlap2D(const Handle* pHandleA, const Handle* pHandleB, int axis0, int axis1);
-
-#ifdef DEBUG_BROADPHASE
- void debugPrintAxis(int axis, bool checkCardinality = true);
-#endif //DEBUG_BROADPHASE
-
- //Overlap* AddOverlap(BP_FP_INT_TYPE handleA, BP_FP_INT_TYPE handleB);
- //void RemoveOverlap(BP_FP_INT_TYPE handleA, BP_FP_INT_TYPE handleB);
-
- void sortMinDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps);
- void sortMinUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps);
- void sortMaxDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps);
- void sortMaxUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps);
-
-public:
- btAxisSweep3Internal(const btVector3& worldAabbMin, const btVector3& worldAabbMax, BP_FP_INT_TYPE handleMask, BP_FP_INT_TYPE handleSentinel, BP_FP_INT_TYPE maxHandles = 16384, btOverlappingPairCache* pairCache = 0, bool disableRaycastAccelerator = false);
-
- virtual ~btAxisSweep3Internal();
-
- BP_FP_INT_TYPE getNumHandles() const
- {
- return m_numHandles;
- }
-
- virtual void calculateOverlappingPairs(btDispatcher* dispatcher);
-
- BP_FP_INT_TYPE addHandle(const btVector3& aabbMin, const btVector3& aabbMax, void* pOwner, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher);
- void removeHandle(BP_FP_INT_TYPE handle, btDispatcher* dispatcher);
- void updateHandle(BP_FP_INT_TYPE handle, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher);
- SIMD_FORCE_INLINE Handle* getHandle(BP_FP_INT_TYPE index) const { return m_pHandles + index; }
-
- virtual void resetPool(btDispatcher* dispatcher);
-
- void processAllOverlappingPairs(btOverlapCallback* callback);
-
- //Broadphase Interface
- virtual btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher);
- virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher);
- virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher);
- virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0));
- virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback);
-
- void quantize(BP_FP_INT_TYPE* out, const btVector3& point, int isMax) const;
- ///unQuantize should be conservative: aabbMin/aabbMax should be larger then 'getAabb' result
- void unQuantize(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const;
-
- bool testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1);
-
- btOverlappingPairCache* getOverlappingPairCache()
- {
- return m_pairCache;
- }
- const btOverlappingPairCache* getOverlappingPairCache() const
- {
- return m_pairCache;
- }
-
- void setOverlappingPairUserCallback(btOverlappingPairCallback* pairCallback)
- {
- m_userPairCallback = pairCallback;
- }
- const btOverlappingPairCallback* getOverlappingPairUserCallback() const
- {
- return m_userPairCallback;
- }
-
- ///getAabb returns the axis aligned bounding box in the 'global' coordinate frame
- ///will add some transform later
- virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const
- {
- aabbMin = m_worldAabbMin;
- aabbMax = m_worldAabbMax;
- }
-
- virtual void printStats()
- {
- /* printf("btAxisSweep3.h\n");
- printf("numHandles = %d, maxHandles = %d\n",m_numHandles,m_maxHandles);
- printf("aabbMin=%f,%f,%f,aabbMax=%f,%f,%f\n",m_worldAabbMin.getX(),m_worldAabbMin.getY(),m_worldAabbMin.getZ(),
- m_worldAabbMax.getX(),m_worldAabbMax.getY(),m_worldAabbMax.getZ());
- */
- }
-};
-
-////////////////////////////////////////////////////////////////////
-
-#ifdef DEBUG_BROADPHASE
-#include <stdio.h>
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3<BP_FP_INT_TYPE>::debugPrintAxis(int axis, bool checkCardinality)
-{
- int numEdges = m_pHandles[0].m_maxEdges[axis];
- printf("SAP Axis %d, numEdges=%d\n", axis, numEdges);
-
- int i;
- for (i = 0; i < numEdges + 1; i++)
- {
- Edge* pEdge = m_pEdges[axis] + i;
- Handle* pHandlePrev = getHandle(pEdge->m_handle);
- int handleIndex = pEdge->IsMax() ? pHandlePrev->m_maxEdges[axis] : pHandlePrev->m_minEdges[axis];
- char beginOrEnd;
- beginOrEnd = pEdge->IsMax() ? 'E' : 'B';
- printf(" [%c,h=%d,p=%x,i=%d]\n", beginOrEnd, pEdge->m_handle, pEdge->m_pos, handleIndex);
- }
-
- if (checkCardinality)
- btAssert(numEdges == m_numHandles * 2 + 1);
-}
-#endif //DEBUG_BROADPHASE
-
-template <typename BP_FP_INT_TYPE>
-btBroadphaseProxy* btAxisSweep3Internal<BP_FP_INT_TYPE>::createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher)
-{
- (void)shapeType;
- BP_FP_INT_TYPE handleId = addHandle(aabbMin, aabbMax, userPtr, collisionFilterGroup, collisionFilterMask, dispatcher);
-
- Handle* handle = getHandle(handleId);
-
- if (m_raycastAccelerator)
- {
- btBroadphaseProxy* rayProxy = m_raycastAccelerator->createProxy(aabbMin, aabbMax, shapeType, userPtr, collisionFilterGroup, collisionFilterMask, dispatcher);
- handle->m_dbvtProxy = rayProxy;
- }
- return handle;
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher)
-{
- Handle* handle = static_cast<Handle*>(proxy);
- if (m_raycastAccelerator)
- m_raycastAccelerator->destroyProxy(handle->m_dbvtProxy, dispatcher);
- removeHandle(static_cast<BP_FP_INT_TYPE>(handle->m_uniqueId), dispatcher);
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher)
-{
- Handle* handle = static_cast<Handle*>(proxy);
- handle->m_aabbMin = aabbMin;
- handle->m_aabbMax = aabbMax;
- updateHandle(static_cast<BP_FP_INT_TYPE>(handle->m_uniqueId), aabbMin, aabbMax, dispatcher);
- if (m_raycastAccelerator)
- m_raycastAccelerator->setAabb(handle->m_dbvtProxy, aabbMin, aabbMax, dispatcher);
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin, const btVector3& aabbMax)
-{
- if (m_raycastAccelerator)
- {
- m_raycastAccelerator->rayTest(rayFrom, rayTo, rayCallback, aabbMin, aabbMax);
- }
- else
- {
- //choose axis?
- BP_FP_INT_TYPE axis = 0;
- //for each proxy
- for (BP_FP_INT_TYPE i = 1; i < m_numHandles * 2 + 1; i++)
- {
- if (m_pEdges[axis][i].IsMax())
- {
- rayCallback.process(getHandle(m_pEdges[axis][i].m_handle));
- }
- }
- }
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback)
-{
- if (m_raycastAccelerator)
- {
- m_raycastAccelerator->aabbTest(aabbMin, aabbMax, callback);
- }
- else
- {
- //choose axis?
- BP_FP_INT_TYPE axis = 0;
- //for each proxy
- for (BP_FP_INT_TYPE i = 1; i < m_numHandles * 2 + 1; i++)
- {
- if (m_pEdges[axis][i].IsMax())
- {
- Handle* handle = getHandle(m_pEdges[axis][i].m_handle);
- if (TestAabbAgainstAabb2(aabbMin, aabbMax, handle->m_aabbMin, handle->m_aabbMax))
- {
- callback.process(handle);
- }
- }
- }
- }
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const
-{
- Handle* pHandle = static_cast<Handle*>(proxy);
- aabbMin = pHandle->m_aabbMin;
- aabbMax = pHandle->m_aabbMax;
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::unQuantize(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const
-{
- Handle* pHandle = static_cast<Handle*>(proxy);
-
- unsigned short vecInMin[3];
- unsigned short vecInMax[3];
-
- vecInMin[0] = m_pEdges[0][pHandle->m_minEdges[0]].m_pos;
- vecInMax[0] = m_pEdges[0][pHandle->m_maxEdges[0]].m_pos + 1;
- vecInMin[1] = m_pEdges[1][pHandle->m_minEdges[1]].m_pos;
- vecInMax[1] = m_pEdges[1][pHandle->m_maxEdges[1]].m_pos + 1;
- vecInMin[2] = m_pEdges[2][pHandle->m_minEdges[2]].m_pos;
- vecInMax[2] = m_pEdges[2][pHandle->m_maxEdges[2]].m_pos + 1;
-
- aabbMin.setValue((btScalar)(vecInMin[0]) / (m_quantize.getX()), (btScalar)(vecInMin[1]) / (m_quantize.getY()), (btScalar)(vecInMin[2]) / (m_quantize.getZ()));
- aabbMin += m_worldAabbMin;
-
- aabbMax.setValue((btScalar)(vecInMax[0]) / (m_quantize.getX()), (btScalar)(vecInMax[1]) / (m_quantize.getY()), (btScalar)(vecInMax[2]) / (m_quantize.getZ()));
- aabbMax += m_worldAabbMin;
-}
-
-template <typename BP_FP_INT_TYPE>
-btAxisSweep3Internal<BP_FP_INT_TYPE>::btAxisSweep3Internal(const btVector3& worldAabbMin, const btVector3& worldAabbMax, BP_FP_INT_TYPE handleMask, BP_FP_INT_TYPE handleSentinel, BP_FP_INT_TYPE userMaxHandles, btOverlappingPairCache* pairCache, bool disableRaycastAccelerator)
- : m_bpHandleMask(handleMask),
- m_handleSentinel(handleSentinel),
- m_pairCache(pairCache),
- m_userPairCallback(0),
- m_ownsPairCache(false),
- m_invalidPair(0),
- m_raycastAccelerator(0)
-{
- BP_FP_INT_TYPE maxHandles = static_cast<BP_FP_INT_TYPE>(userMaxHandles + 1); //need to add one sentinel handle
-
- if (!m_pairCache)
- {
- void* ptr = btAlignedAlloc(sizeof(btHashedOverlappingPairCache), 16);
- m_pairCache = new (ptr) btHashedOverlappingPairCache();
- m_ownsPairCache = true;
- }
-
- if (!disableRaycastAccelerator)
- {
- m_nullPairCache = new (btAlignedAlloc(sizeof(btNullPairCache), 16)) btNullPairCache();
- m_raycastAccelerator = new (btAlignedAlloc(sizeof(btDbvtBroadphase), 16)) btDbvtBroadphase(m_nullPairCache); //m_pairCache);
- m_raycastAccelerator->m_deferedcollide = true; //don't add/remove pairs
- }
-
- //btAssert(bounds.HasVolume());
-
- // init bounds
- m_worldAabbMin = worldAabbMin;
- m_worldAabbMax = worldAabbMax;
-
- btVector3 aabbSize = m_worldAabbMax - m_worldAabbMin;
-
- BP_FP_INT_TYPE maxInt = m_handleSentinel;
-
- m_quantize = btVector3(btScalar(maxInt), btScalar(maxInt), btScalar(maxInt)) / aabbSize;
-
- // allocate handles buffer, using btAlignedAlloc, and put all handles on free list
- m_pHandles = new Handle[maxHandles];
-
- m_maxHandles = maxHandles;
- m_numHandles = 0;
-
- // handle 0 is reserved as the null index, and is also used as the sentinel
- m_firstFreeHandle = 1;
- {
- for (BP_FP_INT_TYPE i = m_firstFreeHandle; i < maxHandles; i++)
- m_pHandles[i].SetNextFree(static_cast<BP_FP_INT_TYPE>(i + 1));
- m_pHandles[maxHandles - 1].SetNextFree(0);
- }
-
- {
- // allocate edge buffers
- for (int i = 0; i < 3; i++)
- {
- m_pEdgesRawPtr[i] = btAlignedAlloc(sizeof(Edge) * maxHandles * 2, 16);
- m_pEdges[i] = new (m_pEdgesRawPtr[i]) Edge[maxHandles * 2];
- }
- }
- //removed overlap management
-
- // make boundary sentinels
-
- m_pHandles[0].m_clientObject = 0;
-
- for (int axis = 0; axis < 3; axis++)
- {
- m_pHandles[0].m_minEdges[axis] = 0;
- m_pHandles[0].m_maxEdges[axis] = 1;
-
- m_pEdges[axis][0].m_pos = 0;
- m_pEdges[axis][0].m_handle = 0;
- m_pEdges[axis][1].m_pos = m_handleSentinel;
- m_pEdges[axis][1].m_handle = 0;
-#ifdef DEBUG_BROADPHASE
- debugPrintAxis(axis);
-#endif //DEBUG_BROADPHASE
- }
-}
-
-template <typename BP_FP_INT_TYPE>
-btAxisSweep3Internal<BP_FP_INT_TYPE>::~btAxisSweep3Internal()
-{
- if (m_raycastAccelerator)
- {
- m_nullPairCache->~btOverlappingPairCache();
- btAlignedFree(m_nullPairCache);
- m_raycastAccelerator->~btDbvtBroadphase();
- btAlignedFree(m_raycastAccelerator);
- }
-
- for (int i = 2; i >= 0; i--)
- {
- btAlignedFree(m_pEdgesRawPtr[i]);
- }
- delete[] m_pHandles;
-
- if (m_ownsPairCache)
- {
- m_pairCache->~btOverlappingPairCache();
- btAlignedFree(m_pairCache);
- }
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::quantize(BP_FP_INT_TYPE* out, const btVector3& point, int isMax) const
-{
-#ifdef OLD_CLAMPING_METHOD
- ///problem with this clamping method is that the floating point during quantization might still go outside the range [(0|isMax) .. (m_handleSentinel&m_bpHandleMask]|isMax]
- ///see http://code.google.com/p/bullet/issues/detail?id=87
- btVector3 clampedPoint(point);
- clampedPoint.setMax(m_worldAabbMin);
- clampedPoint.setMin(m_worldAabbMax);
- btVector3 v = (clampedPoint - m_worldAabbMin) * m_quantize;
- out[0] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getX() & m_bpHandleMask) | isMax);
- out[1] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getY() & m_bpHandleMask) | isMax);
- out[2] = (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v.getZ() & m_bpHandleMask) | isMax);
-#else
- btVector3 v = (point - m_worldAabbMin) * m_quantize;
- out[0] = (v[0] <= 0) ? (BP_FP_INT_TYPE)isMax : (v[0] >= m_handleSentinel) ? (BP_FP_INT_TYPE)((m_handleSentinel & m_bpHandleMask) | isMax) : (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v[0] & m_bpHandleMask) | isMax);
- out[1] = (v[1] <= 0) ? (BP_FP_INT_TYPE)isMax : (v[1] >= m_handleSentinel) ? (BP_FP_INT_TYPE)((m_handleSentinel & m_bpHandleMask) | isMax) : (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v[1] & m_bpHandleMask) | isMax);
- out[2] = (v[2] <= 0) ? (BP_FP_INT_TYPE)isMax : (v[2] >= m_handleSentinel) ? (BP_FP_INT_TYPE)((m_handleSentinel & m_bpHandleMask) | isMax) : (BP_FP_INT_TYPE)(((BP_FP_INT_TYPE)v[2] & m_bpHandleMask) | isMax);
-#endif //OLD_CLAMPING_METHOD
-}
-
-template <typename BP_FP_INT_TYPE>
-BP_FP_INT_TYPE btAxisSweep3Internal<BP_FP_INT_TYPE>::allocHandle()
-{
- btAssert(m_firstFreeHandle);
-
- BP_FP_INT_TYPE handle = m_firstFreeHandle;
- m_firstFreeHandle = getHandle(handle)->GetNextFree();
- m_numHandles++;
-
- return handle;
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::freeHandle(BP_FP_INT_TYPE handle)
-{
- btAssert(handle > 0 && handle < m_maxHandles);
-
- getHandle(handle)->SetNextFree(m_firstFreeHandle);
- m_firstFreeHandle = handle;
-
- m_numHandles--;
-}
-
-template <typename BP_FP_INT_TYPE>
-BP_FP_INT_TYPE btAxisSweep3Internal<BP_FP_INT_TYPE>::addHandle(const btVector3& aabbMin, const btVector3& aabbMax, void* pOwner, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher)
-{
- // quantize the bounds
- BP_FP_INT_TYPE min[3], max[3];
- quantize(min, aabbMin, 0);
- quantize(max, aabbMax, 1);
-
- // allocate a handle
- BP_FP_INT_TYPE handle = allocHandle();
-
- Handle* pHandle = getHandle(handle);
-
- pHandle->m_uniqueId = static_cast<int>(handle);
- //pHandle->m_pOverlaps = 0;
- pHandle->m_clientObject = pOwner;
- pHandle->m_collisionFilterGroup = collisionFilterGroup;
- pHandle->m_collisionFilterMask = collisionFilterMask;
-
- // compute current limit of edge arrays
- BP_FP_INT_TYPE limit = static_cast<BP_FP_INT_TYPE>(m_numHandles * 2);
-
- // insert new edges just inside the max boundary edge
- for (BP_FP_INT_TYPE axis = 0; axis < 3; axis++)
- {
- m_pHandles[0].m_maxEdges[axis] += 2;
-
- m_pEdges[axis][limit + 1] = m_pEdges[axis][limit - 1];
-
- m_pEdges[axis][limit - 1].m_pos = min[axis];
- m_pEdges[axis][limit - 1].m_handle = handle;
-
- m_pEdges[axis][limit].m_pos = max[axis];
- m_pEdges[axis][limit].m_handle = handle;
-
- pHandle->m_minEdges[axis] = static_cast<BP_FP_INT_TYPE>(limit - 1);
- pHandle->m_maxEdges[axis] = limit;
- }
-
- // now sort the new edges to their correct position
- sortMinDown(0, pHandle->m_minEdges[0], dispatcher, false);
- sortMaxDown(0, pHandle->m_maxEdges[0], dispatcher, false);
- sortMinDown(1, pHandle->m_minEdges[1], dispatcher, false);
- sortMaxDown(1, pHandle->m_maxEdges[1], dispatcher, false);
- sortMinDown(2, pHandle->m_minEdges[2], dispatcher, true);
- sortMaxDown(2, pHandle->m_maxEdges[2], dispatcher, true);
-
- return handle;
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::removeHandle(BP_FP_INT_TYPE handle, btDispatcher* dispatcher)
-{
- Handle* pHandle = getHandle(handle);
-
- //explicitly remove the pairs containing the proxy
- //we could do it also in the sortMinUp (passing true)
- ///@todo: compare performance
- if (!m_pairCache->hasDeferredRemoval())
- {
- m_pairCache->removeOverlappingPairsContainingProxy(pHandle, dispatcher);
- }
-
- // compute current limit of edge arrays
- int limit = static_cast<int>(m_numHandles * 2);
-
- int axis;
-
- for (axis = 0; axis < 3; axis++)
- {
- m_pHandles[0].m_maxEdges[axis] -= 2;
- }
-
- // remove the edges by sorting them up to the end of the list
- for (axis = 0; axis < 3; axis++)
- {
- Edge* pEdges = m_pEdges[axis];
- BP_FP_INT_TYPE max = pHandle->m_maxEdges[axis];
- pEdges[max].m_pos = m_handleSentinel;
-
- sortMaxUp(axis, max, dispatcher, false);
-
- BP_FP_INT_TYPE i = pHandle->m_minEdges[axis];
- pEdges[i].m_pos = m_handleSentinel;
-
- sortMinUp(axis, i, dispatcher, false);
-
- pEdges[limit - 1].m_handle = 0;
- pEdges[limit - 1].m_pos = m_handleSentinel;
-
-#ifdef DEBUG_BROADPHASE
- debugPrintAxis(axis, false);
-#endif //DEBUG_BROADPHASE
- }
-
- // free the handle
- freeHandle(handle);
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::resetPool(btDispatcher* /*dispatcher*/)
-{
- if (m_numHandles == 0)
- {
- m_firstFreeHandle = 1;
- {
- for (BP_FP_INT_TYPE i = m_firstFreeHandle; i < m_maxHandles; i++)
- m_pHandles[i].SetNextFree(static_cast<BP_FP_INT_TYPE>(i + 1));
- m_pHandles[m_maxHandles - 1].SetNextFree(0);
- }
- }
-}
-
-//#include <stdio.h>
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::calculateOverlappingPairs(btDispatcher* dispatcher)
-{
- if (m_pairCache->hasDeferredRemoval())
- {
- btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray();
-
- //perform a sort, to find duplicates and to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(btBroadphasePairSortPredicate());
-
- overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair);
- m_invalidPair = 0;
-
- int i;
-
- btBroadphasePair previousPair;
- previousPair.m_pProxy0 = 0;
- previousPair.m_pProxy1 = 0;
- previousPair.m_algorithm = 0;
-
- for (i = 0; i < overlappingPairArray.size(); i++)
- {
- btBroadphasePair& pair = overlappingPairArray[i];
-
- bool isDuplicate = (pair == previousPair);
-
- previousPair = pair;
-
- bool needsRemoval = false;
-
- if (!isDuplicate)
- {
- ///important to use an AABB test that is consistent with the broadphase
- bool hasOverlap = testAabbOverlap(pair.m_pProxy0, pair.m_pProxy1);
-
- if (hasOverlap)
- {
- needsRemoval = false; //callback->processOverlap(pair);
- }
- else
- {
- needsRemoval = true;
- }
- }
- else
- {
- //remove duplicate
- needsRemoval = true;
- //should have no algorithm
- btAssert(!pair.m_algorithm);
- }
-
- if (needsRemoval)
- {
- m_pairCache->cleanOverlappingPair(pair, dispatcher);
-
- // m_overlappingPairArray.swap(i,m_overlappingPairArray.size()-1);
- // m_overlappingPairArray.pop_back();
- pair.m_pProxy0 = 0;
- pair.m_pProxy1 = 0;
- m_invalidPair++;
- }
- }
-
-///if you don't like to skip the invalid pairs in the array, execute following code:
-#define CLEAN_INVALID_PAIRS 1
-#ifdef CLEAN_INVALID_PAIRS
-
- //perform a sort, to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(btBroadphasePairSortPredicate());
-
- overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair);
- m_invalidPair = 0;
-#endif //CLEAN_INVALID_PAIRS
-
- //printf("overlappingPairArray.size()=%d\n",overlappingPairArray.size());
- }
-}
-
-template <typename BP_FP_INT_TYPE>
-bool btAxisSweep3Internal<BP_FP_INT_TYPE>::testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
-{
- const Handle* pHandleA = static_cast<Handle*>(proxy0);
- const Handle* pHandleB = static_cast<Handle*>(proxy1);
-
- //optimization 1: check the array index (memory address), instead of the m_pos
-
- for (int axis = 0; axis < 3; axis++)
- {
- if (pHandleA->m_maxEdges[axis] < pHandleB->m_minEdges[axis] ||
- pHandleB->m_maxEdges[axis] < pHandleA->m_minEdges[axis])
- {
- return false;
- }
- }
- return true;
-}
-
-template <typename BP_FP_INT_TYPE>
-bool btAxisSweep3Internal<BP_FP_INT_TYPE>::testOverlap2D(const Handle* pHandleA, const Handle* pHandleB, int axis0, int axis1)
-{
- //optimization 1: check the array index (memory address), instead of the m_pos
-
- if (pHandleA->m_maxEdges[axis0] < pHandleB->m_minEdges[axis0] ||
- pHandleB->m_maxEdges[axis0] < pHandleA->m_minEdges[axis0] ||
- pHandleA->m_maxEdges[axis1] < pHandleB->m_minEdges[axis1] ||
- pHandleB->m_maxEdges[axis1] < pHandleA->m_minEdges[axis1])
- {
- return false;
- }
- return true;
-}
-
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::updateHandle(BP_FP_INT_TYPE handle, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher)
-{
- // btAssert(bounds.IsFinite());
- //btAssert(bounds.HasVolume());
-
- Handle* pHandle = getHandle(handle);
-
- // quantize the new bounds
- BP_FP_INT_TYPE min[3], max[3];
- quantize(min, aabbMin, 0);
- quantize(max, aabbMax, 1);
-
- // update changed edges
- for (int axis = 0; axis < 3; axis++)
- {
- BP_FP_INT_TYPE emin = pHandle->m_minEdges[axis];
- BP_FP_INT_TYPE emax = pHandle->m_maxEdges[axis];
-
- int dmin = (int)min[axis] - (int)m_pEdges[axis][emin].m_pos;
- int dmax = (int)max[axis] - (int)m_pEdges[axis][emax].m_pos;
-
- m_pEdges[axis][emin].m_pos = min[axis];
- m_pEdges[axis][emax].m_pos = max[axis];
-
- // expand (only adds overlaps)
- if (dmin < 0)
- sortMinDown(axis, emin, dispatcher, true);
-
- if (dmax > 0)
- sortMaxUp(axis, emax, dispatcher, true);
-
- // shrink (only removes overlaps)
- if (dmin > 0)
- sortMinUp(axis, emin, dispatcher, true);
-
- if (dmax < 0)
- sortMaxDown(axis, emax, dispatcher, true);
-
-#ifdef DEBUG_BROADPHASE
- debugPrintAxis(axis);
-#endif //DEBUG_BROADPHASE
- }
-}
-
-// sorting a min edge downwards can only ever *add* overlaps
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::sortMinDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* /* dispatcher */, bool updateOverlaps)
-{
- Edge* pEdge = m_pEdges[axis] + edge;
- Edge* pPrev = pEdge - 1;
- Handle* pHandleEdge = getHandle(pEdge->m_handle);
-
- while (pEdge->m_pos < pPrev->m_pos)
- {
- Handle* pHandlePrev = getHandle(pPrev->m_handle);
-
- if (pPrev->IsMax())
- {
- // if previous edge is a maximum check the bounds and add an overlap if necessary
- const int axis1 = (1 << axis) & 3;
- const int axis2 = (1 << axis1) & 3;
- if (updateOverlaps && testOverlap2D(pHandleEdge, pHandlePrev, axis1, axis2))
- {
- m_pairCache->addOverlappingPair(pHandleEdge, pHandlePrev);
- if (m_userPairCallback)
- m_userPairCallback->addOverlappingPair(pHandleEdge, pHandlePrev);
-
- //AddOverlap(pEdge->m_handle, pPrev->m_handle);
- }
-
- // update edge reference in other handle
- pHandlePrev->m_maxEdges[axis]++;
- }
- else
- pHandlePrev->m_minEdges[axis]++;
-
- pHandleEdge->m_minEdges[axis]--;
-
- // swap the edges
- Edge swap = *pEdge;
- *pEdge = *pPrev;
- *pPrev = swap;
-
- // decrement
- pEdge--;
- pPrev--;
- }
-
-#ifdef DEBUG_BROADPHASE
- debugPrintAxis(axis);
-#endif //DEBUG_BROADPHASE
-}
-
-// sorting a min edge upwards can only ever *remove* overlaps
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::sortMinUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps)
-{
- Edge* pEdge = m_pEdges[axis] + edge;
- Edge* pNext = pEdge + 1;
- Handle* pHandleEdge = getHandle(pEdge->m_handle);
-
- while (pNext->m_handle && (pEdge->m_pos >= pNext->m_pos))
- {
- Handle* pHandleNext = getHandle(pNext->m_handle);
-
- if (pNext->IsMax())
- {
- Handle* handle0 = getHandle(pEdge->m_handle);
- Handle* handle1 = getHandle(pNext->m_handle);
- const int axis1 = (1 << axis) & 3;
- const int axis2 = (1 << axis1) & 3;
-
- // if next edge is maximum remove any overlap between the two handles
- if (updateOverlaps
-#ifdef USE_OVERLAP_TEST_ON_REMOVES
- && testOverlap2D(handle0, handle1, axis1, axis2)
-#endif //USE_OVERLAP_TEST_ON_REMOVES
- )
- {
- m_pairCache->removeOverlappingPair(handle0, handle1, dispatcher);
- if (m_userPairCallback)
- m_userPairCallback->removeOverlappingPair(handle0, handle1, dispatcher);
- }
-
- // update edge reference in other handle
- pHandleNext->m_maxEdges[axis]--;
- }
- else
- pHandleNext->m_minEdges[axis]--;
-
- pHandleEdge->m_minEdges[axis]++;
-
- // swap the edges
- Edge swap = *pEdge;
- *pEdge = *pNext;
- *pNext = swap;
-
- // increment
- pEdge++;
- pNext++;
- }
-}
-
-// sorting a max edge downwards can only ever *remove* overlaps
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::sortMaxDown(int axis, BP_FP_INT_TYPE edge, btDispatcher* dispatcher, bool updateOverlaps)
-{
- Edge* pEdge = m_pEdges[axis] + edge;
- Edge* pPrev = pEdge - 1;
- Handle* pHandleEdge = getHandle(pEdge->m_handle);
-
- while (pEdge->m_pos < pPrev->m_pos)
- {
- Handle* pHandlePrev = getHandle(pPrev->m_handle);
-
- if (!pPrev->IsMax())
- {
- // if previous edge was a minimum remove any overlap between the two handles
- Handle* handle0 = getHandle(pEdge->m_handle);
- Handle* handle1 = getHandle(pPrev->m_handle);
- const int axis1 = (1 << axis) & 3;
- const int axis2 = (1 << axis1) & 3;
-
- if (updateOverlaps
-#ifdef USE_OVERLAP_TEST_ON_REMOVES
- && testOverlap2D(handle0, handle1, axis1, axis2)
-#endif //USE_OVERLAP_TEST_ON_REMOVES
- )
- {
- //this is done during the overlappingpairarray iteration/narrowphase collision
-
- m_pairCache->removeOverlappingPair(handle0, handle1, dispatcher);
- if (m_userPairCallback)
- m_userPairCallback->removeOverlappingPair(handle0, handle1, dispatcher);
- }
-
- // update edge reference in other handle
- pHandlePrev->m_minEdges[axis]++;
- ;
- }
- else
- pHandlePrev->m_maxEdges[axis]++;
-
- pHandleEdge->m_maxEdges[axis]--;
-
- // swap the edges
- Edge swap = *pEdge;
- *pEdge = *pPrev;
- *pPrev = swap;
-
- // decrement
- pEdge--;
- pPrev--;
- }
-
-#ifdef DEBUG_BROADPHASE
- debugPrintAxis(axis);
-#endif //DEBUG_BROADPHASE
-}
-
-// sorting a max edge upwards can only ever *add* overlaps
-template <typename BP_FP_INT_TYPE>
-void btAxisSweep3Internal<BP_FP_INT_TYPE>::sortMaxUp(int axis, BP_FP_INT_TYPE edge, btDispatcher* /* dispatcher */, bool updateOverlaps)
-{
- Edge* pEdge = m_pEdges[axis] + edge;
- Edge* pNext = pEdge + 1;
- Handle* pHandleEdge = getHandle(pEdge->m_handle);
-
- while (pNext->m_handle && (pEdge->m_pos >= pNext->m_pos))
- {
- Handle* pHandleNext = getHandle(pNext->m_handle);
-
- const int axis1 = (1 << axis) & 3;
- const int axis2 = (1 << axis1) & 3;
-
- if (!pNext->IsMax())
- {
- // if next edge is a minimum check the bounds and add an overlap if necessary
- if (updateOverlaps && testOverlap2D(pHandleEdge, pHandleNext, axis1, axis2))
- {
- Handle* handle0 = getHandle(pEdge->m_handle);
- Handle* handle1 = getHandle(pNext->m_handle);
- m_pairCache->addOverlappingPair(handle0, handle1);
- if (m_userPairCallback)
- m_userPairCallback->addOverlappingPair(handle0, handle1);
- }
-
- // update edge reference in other handle
- pHandleNext->m_minEdges[axis]--;
- }
- else
- pHandleNext->m_maxEdges[axis]--;
-
- pHandleEdge->m_maxEdges[axis]++;
-
- // swap the edges
- Edge swap = *pEdge;
- *pEdge = *pNext;
- *pNext = swap;
-
- // increment
- pEdge++;
- pNext++;
- }
-}
-
-#endif
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h
deleted file mode 100644
index b097eca5f5..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseInterface.h
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_BROADPHASE_INTERFACE_H
-#define BT_BROADPHASE_INTERFACE_H
-
-struct btDispatcherInfo;
-class btDispatcher;
-#include "btBroadphaseProxy.h"
-
-class btOverlappingPairCache;
-
-struct btBroadphaseAabbCallback
-{
- virtual ~btBroadphaseAabbCallback() {}
- virtual bool process(const btBroadphaseProxy* proxy) = 0;
-};
-
-struct btBroadphaseRayCallback : public btBroadphaseAabbCallback
-{
- ///added some cached data to accelerate ray-AABB tests
- btVector3 m_rayDirectionInverse;
- unsigned int m_signs[3];
- btScalar m_lambda_max;
-
- virtual ~btBroadphaseRayCallback() {}
-
-protected:
- btBroadphaseRayCallback() {}
-};
-
-#include "LinearMath/btVector3.h"
-
-///The btBroadphaseInterface class provides an interface to detect aabb-overlapping object pairs.
-///Some implementations for this broadphase interface include btAxisSweep3, bt32BitAxisSweep3 and btDbvtBroadphase.
-///The actual overlapping pair management, storage, adding and removing of pairs is dealt by the btOverlappingPairCache class.
-class btBroadphaseInterface
-{
-public:
- virtual ~btBroadphaseInterface() {}
-
- virtual btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher) = 0;
- virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher) = 0;
- virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher) = 0;
- virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const = 0;
-
- virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0)) = 0;
-
- virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback) = 0;
-
- ///calculateOverlappingPairs is optional: incremental algorithms (sweep and prune) might do it during the set aabb
- virtual void calculateOverlappingPairs(btDispatcher* dispatcher) = 0;
-
- virtual btOverlappingPairCache* getOverlappingPairCache() = 0;
- virtual const btOverlappingPairCache* getOverlappingPairCache() const = 0;
-
- ///getAabb returns the axis aligned bounding box in the 'global' coordinate frame
- ///will add some transform later
- virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const = 0;
-
- ///reset broadphase internal structures, to ensure determinism/reproducability
- virtual void resetPool(btDispatcher* dispatcher) { (void)dispatcher; };
-
- virtual void printStats() = 0;
-};
-
-#endif //BT_BROADPHASE_INTERFACE_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp
deleted file mode 100644
index 7ee065aac3..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp
+++ /dev/null
@@ -1,18 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btBroadphaseProxy.h"
-
-BT_NOT_EMPTY_FILE // fix warning LNK4221: This object file does not define any previously undefined public symbols, so it will not be used by any link operation that consumes this library
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h
deleted file mode 100644
index bc0742ad62..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btBroadphaseProxy.h
+++ /dev/null
@@ -1,248 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_BROADPHASE_PROXY_H
-#define BT_BROADPHASE_PROXY_H
-
-#include "LinearMath/btScalar.h" //for SIMD_FORCE_INLINE
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btAlignedAllocator.h"
-
-/// btDispatcher uses these types
-/// IMPORTANT NOTE:The types are ordered polyhedral, implicit convex and concave
-/// to facilitate type checking
-/// CUSTOM_POLYHEDRAL_SHAPE_TYPE,CUSTOM_CONVEX_SHAPE_TYPE and CUSTOM_CONCAVE_SHAPE_TYPE can be used to extend Bullet without modifying source code
-enum BroadphaseNativeTypes
-{
- // polyhedral convex shapes
- BOX_SHAPE_PROXYTYPE,
- TRIANGLE_SHAPE_PROXYTYPE,
- TETRAHEDRAL_SHAPE_PROXYTYPE,
- CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE,
- CONVEX_HULL_SHAPE_PROXYTYPE,
- CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE,
- CUSTOM_POLYHEDRAL_SHAPE_TYPE,
- //implicit convex shapes
- IMPLICIT_CONVEX_SHAPES_START_HERE,
- SPHERE_SHAPE_PROXYTYPE,
- MULTI_SPHERE_SHAPE_PROXYTYPE,
- CAPSULE_SHAPE_PROXYTYPE,
- CONE_SHAPE_PROXYTYPE,
- CONVEX_SHAPE_PROXYTYPE,
- CYLINDER_SHAPE_PROXYTYPE,
- UNIFORM_SCALING_SHAPE_PROXYTYPE,
- MINKOWSKI_SUM_SHAPE_PROXYTYPE,
- MINKOWSKI_DIFFERENCE_SHAPE_PROXYTYPE,
- BOX_2D_SHAPE_PROXYTYPE,
- CONVEX_2D_SHAPE_PROXYTYPE,
- CUSTOM_CONVEX_SHAPE_TYPE,
- //concave shapes
- CONCAVE_SHAPES_START_HERE,
- //keep all the convex shapetype below here, for the check IsConvexShape in broadphase proxy!
- TRIANGLE_MESH_SHAPE_PROXYTYPE,
- SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE,
- ///used for demo integration FAST/Swift collision library and Bullet
- FAST_CONCAVE_MESH_PROXYTYPE,
- //terrain
- TERRAIN_SHAPE_PROXYTYPE,
- ///Used for GIMPACT Trimesh integration
- GIMPACT_SHAPE_PROXYTYPE,
- ///Multimaterial mesh
- MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE,
-
- EMPTY_SHAPE_PROXYTYPE,
- STATIC_PLANE_PROXYTYPE,
- CUSTOM_CONCAVE_SHAPE_TYPE,
- SDF_SHAPE_PROXYTYPE = CUSTOM_CONCAVE_SHAPE_TYPE,
- CONCAVE_SHAPES_END_HERE,
-
- COMPOUND_SHAPE_PROXYTYPE,
-
- SOFTBODY_SHAPE_PROXYTYPE,
- HFFLUID_SHAPE_PROXYTYPE,
- HFFLUID_BUOYANT_CONVEX_SHAPE_PROXYTYPE,
- INVALID_SHAPE_PROXYTYPE,
-
- MAX_BROADPHASE_COLLISION_TYPES
-
-};
-
-///The btBroadphaseProxy is the main class that can be used with the Bullet broadphases.
-///It stores collision shape type information, collision filter information and a client object, typically a btCollisionObject or btRigidBody.
-ATTRIBUTE_ALIGNED16(struct)
-btBroadphaseProxy
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- ///optional filtering to cull potential collisions
- enum CollisionFilterGroups
- {
- DefaultFilter = 1,
- StaticFilter = 2,
- KinematicFilter = 4,
- DebrisFilter = 8,
- SensorTrigger = 16,
- CharacterFilter = 32,
- AllFilter = -1 //all bits sets: DefaultFilter | StaticFilter | KinematicFilter | DebrisFilter | SensorTrigger
- };
-
- //Usually the client btCollisionObject or Rigidbody class
- void* m_clientObject;
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
-
- int m_uniqueId; //m_uniqueId is introduced for paircache. could get rid of this, by calculating the address offset etc.
-
- btVector3 m_aabbMin;
- btVector3 m_aabbMax;
-
- SIMD_FORCE_INLINE int getUid() const
- {
- return m_uniqueId;
- }
-
- //used for memory pools
- btBroadphaseProxy() : m_clientObject(0)
- {
- }
-
- btBroadphaseProxy(const btVector3& aabbMin, const btVector3& aabbMax, void* userPtr, int collisionFilterGroup, int collisionFilterMask)
- : m_clientObject(userPtr),
- m_collisionFilterGroup(collisionFilterGroup),
- m_collisionFilterMask(collisionFilterMask),
- m_aabbMin(aabbMin),
- m_aabbMax(aabbMax)
- {
- }
-
- static SIMD_FORCE_INLINE bool isPolyhedral(int proxyType)
- {
- return (proxyType < IMPLICIT_CONVEX_SHAPES_START_HERE);
- }
-
- static SIMD_FORCE_INLINE bool isConvex(int proxyType)
- {
- return (proxyType < CONCAVE_SHAPES_START_HERE);
- }
-
- static SIMD_FORCE_INLINE bool isNonMoving(int proxyType)
- {
- return (isConcave(proxyType) && !(proxyType == GIMPACT_SHAPE_PROXYTYPE));
- }
-
- static SIMD_FORCE_INLINE bool isConcave(int proxyType)
- {
- return ((proxyType > CONCAVE_SHAPES_START_HERE) &&
- (proxyType < CONCAVE_SHAPES_END_HERE));
- }
- static SIMD_FORCE_INLINE bool isCompound(int proxyType)
- {
- return (proxyType == COMPOUND_SHAPE_PROXYTYPE);
- }
-
- static SIMD_FORCE_INLINE bool isSoftBody(int proxyType)
- {
- return (proxyType == SOFTBODY_SHAPE_PROXYTYPE);
- }
-
- static SIMD_FORCE_INLINE bool isInfinite(int proxyType)
- {
- return (proxyType == STATIC_PLANE_PROXYTYPE);
- }
-
- static SIMD_FORCE_INLINE bool isConvex2d(int proxyType)
- {
- return (proxyType == BOX_2D_SHAPE_PROXYTYPE) || (proxyType == CONVEX_2D_SHAPE_PROXYTYPE);
- }
-};
-
-class btCollisionAlgorithm;
-
-struct btBroadphaseProxy;
-
-///The btBroadphasePair class contains a pair of aabb-overlapping objects.
-///A btDispatcher can search a btCollisionAlgorithm that performs exact/narrowphase collision detection on the actual collision shapes.
-ATTRIBUTE_ALIGNED16(struct)
-btBroadphasePair
-{
- btBroadphasePair()
- : m_pProxy0(0),
- m_pProxy1(0),
- m_algorithm(0),
- m_internalInfo1(0)
- {
- }
-
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btBroadphasePair(btBroadphaseProxy & proxy0, btBroadphaseProxy & proxy1)
- {
- //keep them sorted, so the std::set operations work
- if (proxy0.m_uniqueId < proxy1.m_uniqueId)
- {
- m_pProxy0 = &proxy0;
- m_pProxy1 = &proxy1;
- }
- else
- {
- m_pProxy0 = &proxy1;
- m_pProxy1 = &proxy0;
- }
-
- m_algorithm = 0;
- m_internalInfo1 = 0;
- }
-
- btBroadphaseProxy* m_pProxy0;
- btBroadphaseProxy* m_pProxy1;
-
- mutable btCollisionAlgorithm* m_algorithm;
- union {
- void* m_internalInfo1;
- int m_internalTmpValue;
- }; //don't use this data, it will be removed in future version.
-};
-
-/*
-//comparison for set operation, see Solid DT_Encounter
-SIMD_FORCE_INLINE bool operator<(const btBroadphasePair& a, const btBroadphasePair& b)
-{
- return a.m_pProxy0 < b.m_pProxy0 ||
- (a.m_pProxy0 == b.m_pProxy0 && a.m_pProxy1 < b.m_pProxy1);
-}
-*/
-
-class btBroadphasePairSortPredicate
-{
-public:
- bool operator()(const btBroadphasePair& a, const btBroadphasePair& b) const
- {
- const int uidA0 = a.m_pProxy0 ? a.m_pProxy0->m_uniqueId : -1;
- const int uidB0 = b.m_pProxy0 ? b.m_pProxy0->m_uniqueId : -1;
- const int uidA1 = a.m_pProxy1 ? a.m_pProxy1->m_uniqueId : -1;
- const int uidB1 = b.m_pProxy1 ? b.m_pProxy1->m_uniqueId : -1;
-
- return uidA0 > uidB0 ||
- (a.m_pProxy0 == b.m_pProxy0 && uidA1 > uidB1) ||
- (a.m_pProxy0 == b.m_pProxy0 && a.m_pProxy1 == b.m_pProxy1 && a.m_algorithm > b.m_algorithm);
- }
-};
-
-SIMD_FORCE_INLINE bool operator==(const btBroadphasePair& a, const btBroadphasePair& b)
-{
- return (a.m_pProxy0 == b.m_pProxy0) && (a.m_pProxy1 == b.m_pProxy1);
-}
-
-#endif //BT_BROADPHASE_PROXY_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp
deleted file mode 100644
index 6e36d3bd73..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCollisionAlgorithm.h"
-#include "btDispatcher.h"
-
-btCollisionAlgorithm::btCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
-{
- m_dispatcher = ci.m_dispatcher1;
-}
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h
deleted file mode 100644
index b00c0b1b4b..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_ALGORITHM_H
-#define BT_COLLISION_ALGORITHM_H
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-struct btBroadphaseProxy;
-class btDispatcher;
-class btManifoldResult;
-class btCollisionObject;
-struct btCollisionObjectWrapper;
-struct btDispatcherInfo;
-class btPersistentManifold;
-
-typedef btAlignedObjectArray<btPersistentManifold*> btManifoldArray;
-
-struct btCollisionAlgorithmConstructionInfo
-{
- btCollisionAlgorithmConstructionInfo()
- : m_dispatcher1(0),
- m_manifold(0)
- {
- }
- btCollisionAlgorithmConstructionInfo(btDispatcher* dispatcher, int temp)
- : m_dispatcher1(dispatcher)
- {
- (void)temp;
- }
-
- btDispatcher* m_dispatcher1;
- btPersistentManifold* m_manifold;
-
- // int getDispatcherId();
-};
-
-///btCollisionAlgorithm is an collision interface that is compatible with the Broadphase and btDispatcher.
-///It is persistent over frames
-class btCollisionAlgorithm
-{
-protected:
- btDispatcher* m_dispatcher;
-
-protected:
- // int getDispatcherId();
-
-public:
- btCollisionAlgorithm(){};
-
- btCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci);
-
- virtual ~btCollisionAlgorithm(){};
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut) = 0;
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut) = 0;
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray) = 0;
-};
-
-#endif //BT_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.cpp
deleted file mode 100644
index 166cb04c0b..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.cpp
+++ /dev/null
@@ -1,1357 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btDbvt implementation by Nathanael Presson
-
-#include "btDbvt.h"
-
-//
-typedef btAlignedObjectArray<btDbvtNode*> tNodeArray;
-typedef btAlignedObjectArray<const btDbvtNode*> tConstNodeArray;
-
-//
-struct btDbvtNodeEnumerator : btDbvt::ICollide
-{
- tConstNodeArray nodes;
- void Process(const btDbvtNode* n) { nodes.push_back(n); }
-};
-
-//
-static DBVT_INLINE int indexof(const btDbvtNode* node)
-{
- return (node->parent->childs[1] == node);
-}
-
-//
-static DBVT_INLINE btDbvtVolume merge(const btDbvtVolume& a,
- const btDbvtVolume& b)
-{
-#ifdef BT_USE_SSE
- ATTRIBUTE_ALIGNED16(char locals[sizeof(btDbvtAabbMm)]);
- btDbvtVolume* ptr = (btDbvtVolume*)locals;
- btDbvtVolume& res = *ptr;
-#else
- btDbvtVolume res;
-#endif
- Merge(a, b, res);
- return (res);
-}
-
-// volume+edge lengths
-static DBVT_INLINE btScalar size(const btDbvtVolume& a)
-{
- const btVector3 edges = a.Lengths();
- return (edges.x() * edges.y() * edges.z() +
- edges.x() + edges.y() + edges.z());
-}
-
-//
-static void getmaxdepth(const btDbvtNode* node, int depth, int& maxdepth)
-{
- if (node->isinternal())
- {
- getmaxdepth(node->childs[0], depth + 1, maxdepth);
- getmaxdepth(node->childs[1], depth + 1, maxdepth);
- }
- else
- maxdepth = btMax(maxdepth, depth);
-}
-
-//
-static DBVT_INLINE void deletenode(btDbvt* pdbvt,
- btDbvtNode* node)
-{
- btAlignedFree(pdbvt->m_free);
- pdbvt->m_free = node;
-}
-
-//
-static void recursedeletenode(btDbvt* pdbvt,
- btDbvtNode* node)
-{
- if (node == 0) return;
- if (!node->isleaf())
- {
- recursedeletenode(pdbvt, node->childs[0]);
- recursedeletenode(pdbvt, node->childs[1]);
- }
- if (node == pdbvt->m_root) pdbvt->m_root = 0;
- deletenode(pdbvt, node);
-}
-
-//
-static DBVT_INLINE btDbvtNode* createnode(btDbvt* pdbvt,
- btDbvtNode* parent,
- void* data)
-{
- btDbvtNode* node;
- if (pdbvt->m_free)
- {
- node = pdbvt->m_free;
- pdbvt->m_free = 0;
- }
- else
- {
- node = new (btAlignedAlloc(sizeof(btDbvtNode), 16)) btDbvtNode();
- }
- node->parent = parent;
- node->data = data;
- node->childs[1] = 0;
- return (node);
-}
-
-//
-static DBVT_INLINE btDbvtNode* createnode(btDbvt* pdbvt,
- btDbvtNode* parent,
- const btDbvtVolume& volume,
- void* data)
-{
- btDbvtNode* node = createnode(pdbvt, parent, data);
- node->volume = volume;
- return (node);
-}
-
-//
-static DBVT_INLINE btDbvtNode* createnode(btDbvt* pdbvt,
- btDbvtNode* parent,
- const btDbvtVolume& volume0,
- const btDbvtVolume& volume1,
- void* data)
-{
- btDbvtNode* node = createnode(pdbvt, parent, data);
- Merge(volume0, volume1, node->volume);
- return (node);
-}
-
-//
-static void insertleaf(btDbvt* pdbvt,
- btDbvtNode* root,
- btDbvtNode* leaf)
-{
- if (!pdbvt->m_root)
- {
- pdbvt->m_root = leaf;
- leaf->parent = 0;
- }
- else
- {
- if (!root->isleaf())
- {
- do
- {
- root = root->childs[Select(leaf->volume,
- root->childs[0]->volume,
- root->childs[1]->volume)];
- } while (!root->isleaf());
- }
- btDbvtNode* prev = root->parent;
- btDbvtNode* node = createnode(pdbvt, prev, leaf->volume, root->volume, 0);
- if (prev)
- {
- prev->childs[indexof(root)] = node;
- node->childs[0] = root;
- root->parent = node;
- node->childs[1] = leaf;
- leaf->parent = node;
- do
- {
- if (!prev->volume.Contain(node->volume))
- Merge(prev->childs[0]->volume, prev->childs[1]->volume, prev->volume);
- else
- break;
- node = prev;
- } while (0 != (prev = node->parent));
- }
- else
- {
- node->childs[0] = root;
- root->parent = node;
- node->childs[1] = leaf;
- leaf->parent = node;
- pdbvt->m_root = node;
- }
- }
-}
-
-//
-static btDbvtNode* removeleaf(btDbvt* pdbvt,
- btDbvtNode* leaf)
-{
- if (leaf == pdbvt->m_root)
- {
- pdbvt->m_root = 0;
- return (0);
- }
- else
- {
- btDbvtNode* parent = leaf->parent;
- btDbvtNode* prev = parent->parent;
- btDbvtNode* sibling = parent->childs[1 - indexof(leaf)];
- if (prev)
- {
- prev->childs[indexof(parent)] = sibling;
- sibling->parent = prev;
- deletenode(pdbvt, parent);
- while (prev)
- {
- const btDbvtVolume pb = prev->volume;
- Merge(prev->childs[0]->volume, prev->childs[1]->volume, prev->volume);
- if (NotEqual(pb, prev->volume))
- {
- prev = prev->parent;
- }
- else
- break;
- }
- return (prev ? prev : pdbvt->m_root);
- }
- else
- {
- pdbvt->m_root = sibling;
- sibling->parent = 0;
- deletenode(pdbvt, parent);
- return (pdbvt->m_root);
- }
- }
-}
-
-//
-static void fetchleaves(btDbvt* pdbvt,
- btDbvtNode* root,
- tNodeArray& leaves,
- int depth = -1)
-{
- if (root->isinternal() && depth)
- {
- fetchleaves(pdbvt, root->childs[0], leaves, depth - 1);
- fetchleaves(pdbvt, root->childs[1], leaves, depth - 1);
- deletenode(pdbvt, root);
- }
- else
- {
- leaves.push_back(root);
- }
-}
-
-//
-static bool leftOfAxis(const btDbvtNode* node,
- const btVector3& org,
- const btVector3& axis)
-{
- return btDot(axis, node->volume.Center() - org) <= 0;
-}
-
-// Partitions leaves such that leaves[0, n) are on the
-// left of axis, and leaves[n, count) are on the right
-// of axis. returns N.
-static int split(btDbvtNode** leaves,
- int count,
- const btVector3& org,
- const btVector3& axis)
-{
- int begin = 0;
- int end = count;
- for (;;)
- {
- while (begin != end && leftOfAxis(leaves[begin], org, axis))
- {
- ++begin;
- }
-
- if (begin == end)
- {
- break;
- }
-
- while (begin != end && !leftOfAxis(leaves[end - 1], org, axis))
- {
- --end;
- }
-
- if (begin == end)
- {
- break;
- }
-
- // swap out of place nodes
- --end;
- btDbvtNode* temp = leaves[begin];
- leaves[begin] = leaves[end];
- leaves[end] = temp;
- ++begin;
- }
-
- return begin;
-}
-
-//
-static btDbvtVolume bounds(btDbvtNode** leaves,
- int count)
-{
-#ifdef BT_USE_SSE
- ATTRIBUTE_ALIGNED16(char locals[sizeof(btDbvtVolume)]);
- btDbvtVolume* ptr = (btDbvtVolume*)locals;
- btDbvtVolume& volume = *ptr;
- volume = leaves[0]->volume;
-#else
- btDbvtVolume volume = leaves[0]->volume;
-#endif
- for (int i = 1, ni = count; i < ni; ++i)
- {
- Merge(volume, leaves[i]->volume, volume);
- }
- return (volume);
-}
-
-//
-static void bottomup(btDbvt* pdbvt,
- btDbvtNode** leaves,
- int count)
-{
- while (count > 1)
- {
- btScalar minsize = SIMD_INFINITY;
- int minidx[2] = {-1, -1};
- for (int i = 0; i < count; ++i)
- {
- for (int j = i + 1; j < count; ++j)
- {
- const btScalar sz = size(merge(leaves[i]->volume, leaves[j]->volume));
- if (sz < minsize)
- {
- minsize = sz;
- minidx[0] = i;
- minidx[1] = j;
- }
- }
- }
- btDbvtNode* n[] = {leaves[minidx[0]], leaves[minidx[1]]};
- btDbvtNode* p = createnode(pdbvt, 0, n[0]->volume, n[1]->volume, 0);
- p->childs[0] = n[0];
- p->childs[1] = n[1];
- n[0]->parent = p;
- n[1]->parent = p;
- leaves[minidx[0]] = p;
- leaves[minidx[1]] = leaves[count - 1];
- --count;
- }
-}
-
-//
-static btDbvtNode* topdown(btDbvt* pdbvt,
- btDbvtNode** leaves,
- int count,
- int bu_treshold)
-{
- static const btVector3 axis[] = {btVector3(1, 0, 0),
- btVector3(0, 1, 0),
- btVector3(0, 0, 1)};
- btAssert(bu_treshold > 2);
- if (count > 1)
- {
- if (count > bu_treshold)
- {
- const btDbvtVolume vol = bounds(leaves, count);
- const btVector3 org = vol.Center();
- int partition;
- int bestaxis = -1;
- int bestmidp = count;
- int splitcount[3][2] = {{0, 0}, {0, 0}, {0, 0}};
- int i;
- for (i = 0; i < count; ++i)
- {
- const btVector3 x = leaves[i]->volume.Center() - org;
- for (int j = 0; j < 3; ++j)
- {
- ++splitcount[j][btDot(x, axis[j]) > 0 ? 1 : 0];
- }
- }
- for (i = 0; i < 3; ++i)
- {
- if ((splitcount[i][0] > 0) && (splitcount[i][1] > 0))
- {
- const int midp = (int)btFabs(btScalar(splitcount[i][0] - splitcount[i][1]));
- if (midp < bestmidp)
- {
- bestaxis = i;
- bestmidp = midp;
- }
- }
- }
- if (bestaxis >= 0)
- {
- partition = split(leaves, count, org, axis[bestaxis]);
- btAssert(partition != 0 && partition != count);
- }
- else
- {
- partition = count / 2 + 1;
- }
- btDbvtNode* node = createnode(pdbvt, 0, vol, 0);
- node->childs[0] = topdown(pdbvt, &leaves[0], partition, bu_treshold);
- node->childs[1] = topdown(pdbvt, &leaves[partition], count - partition, bu_treshold);
- node->childs[0]->parent = node;
- node->childs[1]->parent = node;
- return (node);
- }
- else
- {
- bottomup(pdbvt, leaves, count);
- return (leaves[0]);
- }
- }
- return (leaves[0]);
-}
-
-//
-static DBVT_INLINE btDbvtNode* sort(btDbvtNode* n, btDbvtNode*& r)
-{
- btDbvtNode* p = n->parent;
- btAssert(n->isinternal());
- if (p > n)
- {
- const int i = indexof(n);
- const int j = 1 - i;
- btDbvtNode* s = p->childs[j];
- btDbvtNode* q = p->parent;
- btAssert(n == p->childs[i]);
- if (q)
- q->childs[indexof(p)] = n;
- else
- r = n;
- s->parent = n;
- p->parent = n;
- n->parent = q;
- p->childs[0] = n->childs[0];
- p->childs[1] = n->childs[1];
- n->childs[0]->parent = p;
- n->childs[1]->parent = p;
- n->childs[i] = p;
- n->childs[j] = s;
- btSwap(p->volume, n->volume);
- return (p);
- }
- return (n);
-}
-
-#if 0
-static DBVT_INLINE btDbvtNode* walkup(btDbvtNode* n,int count)
-{
- while(n&&(count--)) n=n->parent;
- return(n);
-}
-#endif
-
-//
-// Api
-//
-
-//
-btDbvt::btDbvt()
-{
- m_root = 0;
- m_free = 0;
- m_lkhd = -1;
- m_leaves = 0;
- m_opath = 0;
-}
-
-//
-btDbvt::~btDbvt()
-{
- clear();
-}
-
-//
-void btDbvt::clear()
-{
- if (m_root)
- recursedeletenode(this, m_root);
- btAlignedFree(m_free);
- m_free = 0;
- m_lkhd = -1;
- m_stkStack.clear();
- m_opath = 0;
-}
-
-//
-void btDbvt::optimizeBottomUp()
-{
- if (m_root)
- {
- tNodeArray leaves;
- leaves.reserve(m_leaves);
- fetchleaves(this, m_root, leaves);
- bottomup(this, &leaves[0], leaves.size());
- m_root = leaves[0];
- }
-}
-
-//
-void btDbvt::optimizeTopDown(int bu_treshold)
-{
- if (m_root)
- {
- tNodeArray leaves;
- leaves.reserve(m_leaves);
- fetchleaves(this, m_root, leaves);
- m_root = topdown(this, &leaves[0], leaves.size(), bu_treshold);
- }
-}
-
-//
-void btDbvt::optimizeIncremental(int passes)
-{
- if (passes < 0) passes = m_leaves;
- if (m_root && (passes > 0))
- {
- do
- {
- btDbvtNode* node = m_root;
- unsigned bit = 0;
- while (node->isinternal())
- {
- node = sort(node, m_root)->childs[(m_opath >> bit) & 1];
- bit = (bit + 1) & (sizeof(unsigned) * 8 - 1);
- }
- update(node);
- ++m_opath;
- } while (--passes);
- }
-}
-
-//
-btDbvtNode* btDbvt::insert(const btDbvtVolume& volume, void* data)
-{
- btDbvtNode* leaf = createnode(this, 0, volume, data);
- insertleaf(this, m_root, leaf);
- ++m_leaves;
- return (leaf);
-}
-
-//
-void btDbvt::update(btDbvtNode* leaf, int lookahead)
-{
- btDbvtNode* root = removeleaf(this, leaf);
- if (root)
- {
- if (lookahead >= 0)
- {
- for (int i = 0; (i < lookahead) && root->parent; ++i)
- {
- root = root->parent;
- }
- }
- else
- root = m_root;
- }
- insertleaf(this, root, leaf);
-}
-
-//
-void btDbvt::update(btDbvtNode* leaf, btDbvtVolume& volume)
-{
- btDbvtNode* root = removeleaf(this, leaf);
- if (root)
- {
- if (m_lkhd >= 0)
- {
- for (int i = 0; (i < m_lkhd) && root->parent; ++i)
- {
- root = root->parent;
- }
- }
- else
- root = m_root;
- }
- leaf->volume = volume;
- insertleaf(this, root, leaf);
-}
-
-//
-bool btDbvt::update(btDbvtNode* leaf, btDbvtVolume& volume, const btVector3& velocity, btScalar margin)
-{
- if (leaf->volume.Contain(volume)) return (false);
- volume.Expand(btVector3(margin, margin, margin));
- volume.SignedExpand(velocity);
- update(leaf, volume);
- return (true);
-}
-
-//
-bool btDbvt::update(btDbvtNode* leaf, btDbvtVolume& volume, const btVector3& velocity)
-{
- if (leaf->volume.Contain(volume)) return (false);
- volume.SignedExpand(velocity);
- update(leaf, volume);
- return (true);
-}
-
-//
-bool btDbvt::update(btDbvtNode* leaf, btDbvtVolume& volume, btScalar margin)
-{
- if (leaf->volume.Contain(volume)) return (false);
- volume.Expand(btVector3(margin, margin, margin));
- update(leaf, volume);
- return (true);
-}
-
-//
-void btDbvt::remove(btDbvtNode* leaf)
-{
- removeleaf(this, leaf);
- deletenode(this, leaf);
- --m_leaves;
-}
-
-//
-void btDbvt::write(IWriter* iwriter) const
-{
- btDbvtNodeEnumerator nodes;
- nodes.nodes.reserve(m_leaves * 2);
- enumNodes(m_root, nodes);
- iwriter->Prepare(m_root, nodes.nodes.size());
- for (int i = 0; i < nodes.nodes.size(); ++i)
- {
- const btDbvtNode* n = nodes.nodes[i];
- int p = -1;
- if (n->parent) p = nodes.nodes.findLinearSearch(n->parent);
- if (n->isinternal())
- {
- const int c0 = nodes.nodes.findLinearSearch(n->childs[0]);
- const int c1 = nodes.nodes.findLinearSearch(n->childs[1]);
- iwriter->WriteNode(n, i, p, c0, c1);
- }
- else
- {
- iwriter->WriteLeaf(n, i, p);
- }
- }
-}
-
-//
-void btDbvt::clone(btDbvt& dest, IClone* iclone) const
-{
- dest.clear();
- if (m_root != 0)
- {
- btAlignedObjectArray<sStkCLN> stack;
- stack.reserve(m_leaves);
- stack.push_back(sStkCLN(m_root, 0));
- do
- {
- const int i = stack.size() - 1;
- const sStkCLN e = stack[i];
- btDbvtNode* n = createnode(&dest, e.parent, e.node->volume, e.node->data);
- stack.pop_back();
- if (e.parent != 0)
- e.parent->childs[i & 1] = n;
- else
- dest.m_root = n;
- if (e.node->isinternal())
- {
- stack.push_back(sStkCLN(e.node->childs[0], n));
- stack.push_back(sStkCLN(e.node->childs[1], n));
- }
- else
- {
- iclone->CloneLeaf(n);
- }
- } while (stack.size() > 0);
- }
-}
-
-//
-int btDbvt::maxdepth(const btDbvtNode* node)
-{
- int depth = 0;
- if (node) getmaxdepth(node, 1, depth);
- return (depth);
-}
-
-//
-int btDbvt::countLeaves(const btDbvtNode* node)
-{
- if (node->isinternal())
- return (countLeaves(node->childs[0]) + countLeaves(node->childs[1]));
- else
- return (1);
-}
-
-//
-void btDbvt::extractLeaves(const btDbvtNode* node, btAlignedObjectArray<const btDbvtNode*>& leaves)
-{
- if (node->isinternal())
- {
- extractLeaves(node->childs[0], leaves);
- extractLeaves(node->childs[1], leaves);
- }
- else
- {
- leaves.push_back(node);
- }
-}
-
-//
-#if DBVT_ENABLE_BENCHMARK
-
-#include <stdio.h>
-#include <stdlib.h>
-#include "LinearMath/btQuickProf.h"
-
-/*
-q6600,2.4ghz
-
-/Ox /Ob2 /Oi /Ot /I "." /I "..\.." /I "..\..\src" /D "NDEBUG" /D "_LIB" /D "_WINDOWS" /D "_CRT_SECURE_NO_DEPRECATE" /D "_CRT_NONSTDC_NO_DEPRECATE" /D "WIN32"
-/GF /FD /MT /GS- /Gy /arch:SSE2 /Zc:wchar_t- /Fp"..\..\out\release8\build\libbulletcollision\libbulletcollision.pch"
-/Fo"..\..\out\release8\build\libbulletcollision\\"
-/Fd"..\..\out\release8\build\libbulletcollision\bulletcollision.pdb"
-/W3 /nologo /c /Wp64 /Zi /errorReport:prompt
-
-Benchmarking dbvt...
-World scale: 100.000000
-Extents base: 1.000000
-Extents range: 4.000000
-Leaves: 8192
-sizeof(btDbvtVolume): 32 bytes
-sizeof(btDbvtNode): 44 bytes
-[1] btDbvtVolume intersections: 3499 ms (-1%)
-[2] btDbvtVolume merges: 1934 ms (0%)
-[3] btDbvt::collideTT: 5485 ms (-21%)
-[4] btDbvt::collideTT self: 2814 ms (-20%)
-[5] btDbvt::collideTT xform: 7379 ms (-1%)
-[6] btDbvt::collideTT xform,self: 7270 ms (-2%)
-[7] btDbvt::rayTest: 6314 ms (0%),(332143 r/s)
-[8] insert/remove: 2093 ms (0%),(1001983 ir/s)
-[9] updates (teleport): 1879 ms (-3%),(1116100 u/s)
-[10] updates (jitter): 1244 ms (-4%),(1685813 u/s)
-[11] optimize (incremental): 2514 ms (0%),(1668000 o/s)
-[12] btDbvtVolume notequal: 3659 ms (0%)
-[13] culling(OCL+fullsort): 2218 ms (0%),(461 t/s)
-[14] culling(OCL+qsort): 3688 ms (5%),(2221 t/s)
-[15] culling(KDOP+qsort): 1139 ms (-1%),(7192 t/s)
-[16] insert/remove batch(256): 5092 ms (0%),(823704 bir/s)
-[17] btDbvtVolume select: 3419 ms (0%)
-*/
-
-struct btDbvtBenchmark
-{
- struct NilPolicy : btDbvt::ICollide
- {
- NilPolicy() : m_pcount(0), m_depth(-SIMD_INFINITY), m_checksort(true) {}
- void Process(const btDbvtNode*, const btDbvtNode*) { ++m_pcount; }
- void Process(const btDbvtNode*) { ++m_pcount; }
- void Process(const btDbvtNode*, btScalar depth)
- {
- ++m_pcount;
- if (m_checksort)
- {
- if (depth >= m_depth)
- m_depth = depth;
- else
- printf("wrong depth: %f (should be >= %f)\r\n", depth, m_depth);
- }
- }
- int m_pcount;
- btScalar m_depth;
- bool m_checksort;
- };
- struct P14 : btDbvt::ICollide
- {
- struct Node
- {
- const btDbvtNode* leaf;
- btScalar depth;
- };
- void Process(const btDbvtNode* leaf, btScalar depth)
- {
- Node n;
- n.leaf = leaf;
- n.depth = depth;
- }
- static int sortfnc(const Node& a, const Node& b)
- {
- if (a.depth < b.depth) return (+1);
- if (a.depth > b.depth) return (-1);
- return (0);
- }
- btAlignedObjectArray<Node> m_nodes;
- };
- struct P15 : btDbvt::ICollide
- {
- struct Node
- {
- const btDbvtNode* leaf;
- btScalar depth;
- };
- void Process(const btDbvtNode* leaf)
- {
- Node n;
- n.leaf = leaf;
- n.depth = dot(leaf->volume.Center(), m_axis);
- }
- static int sortfnc(const Node& a, const Node& b)
- {
- if (a.depth < b.depth) return (+1);
- if (a.depth > b.depth) return (-1);
- return (0);
- }
- btAlignedObjectArray<Node> m_nodes;
- btVector3 m_axis;
- };
- static btScalar RandUnit()
- {
- return (rand() / (btScalar)RAND_MAX);
- }
- static btVector3 RandVector3()
- {
- return (btVector3(RandUnit(), RandUnit(), RandUnit()));
- }
- static btVector3 RandVector3(btScalar cs)
- {
- return (RandVector3() * cs - btVector3(cs, cs, cs) / 2);
- }
- static btDbvtVolume RandVolume(btScalar cs, btScalar eb, btScalar es)
- {
- return (btDbvtVolume::FromCE(RandVector3(cs), btVector3(eb, eb, eb) + RandVector3() * es));
- }
- static btTransform RandTransform(btScalar cs)
- {
- btTransform t;
- t.setOrigin(RandVector3(cs));
- t.setRotation(btQuaternion(RandUnit() * SIMD_PI * 2, RandUnit() * SIMD_PI * 2, RandUnit() * SIMD_PI * 2).normalized());
- return (t);
- }
- static void RandTree(btScalar cs, btScalar eb, btScalar es, int leaves, btDbvt& dbvt)
- {
- dbvt.clear();
- for (int i = 0; i < leaves; ++i)
- {
- dbvt.insert(RandVolume(cs, eb, es), 0);
- }
- }
-};
-
-void btDbvt::benchmark()
-{
- static const btScalar cfgVolumeCenterScale = 100;
- static const btScalar cfgVolumeExentsBase = 1;
- static const btScalar cfgVolumeExentsScale = 4;
- static const int cfgLeaves = 8192;
- static const bool cfgEnable = true;
-
- //[1] btDbvtVolume intersections
- bool cfgBenchmark1_Enable = cfgEnable;
- static const int cfgBenchmark1_Iterations = 8;
- static const int cfgBenchmark1_Reference = 3499;
- //[2] btDbvtVolume merges
- bool cfgBenchmark2_Enable = cfgEnable;
- static const int cfgBenchmark2_Iterations = 4;
- static const int cfgBenchmark2_Reference = 1945;
- //[3] btDbvt::collideTT
- bool cfgBenchmark3_Enable = cfgEnable;
- static const int cfgBenchmark3_Iterations = 512;
- static const int cfgBenchmark3_Reference = 5485;
- //[4] btDbvt::collideTT self
- bool cfgBenchmark4_Enable = cfgEnable;
- static const int cfgBenchmark4_Iterations = 512;
- static const int cfgBenchmark4_Reference = 2814;
- //[5] btDbvt::collideTT xform
- bool cfgBenchmark5_Enable = cfgEnable;
- static const int cfgBenchmark5_Iterations = 512;
- static const btScalar cfgBenchmark5_OffsetScale = 2;
- static const int cfgBenchmark5_Reference = 7379;
- //[6] btDbvt::collideTT xform,self
- bool cfgBenchmark6_Enable = cfgEnable;
- static const int cfgBenchmark6_Iterations = 512;
- static const btScalar cfgBenchmark6_OffsetScale = 2;
- static const int cfgBenchmark6_Reference = 7270;
- //[7] btDbvt::rayTest
- bool cfgBenchmark7_Enable = cfgEnable;
- static const int cfgBenchmark7_Passes = 32;
- static const int cfgBenchmark7_Iterations = 65536;
- static const int cfgBenchmark7_Reference = 6307;
- //[8] insert/remove
- bool cfgBenchmark8_Enable = cfgEnable;
- static const int cfgBenchmark8_Passes = 32;
- static const int cfgBenchmark8_Iterations = 65536;
- static const int cfgBenchmark8_Reference = 2105;
- //[9] updates (teleport)
- bool cfgBenchmark9_Enable = cfgEnable;
- static const int cfgBenchmark9_Passes = 32;
- static const int cfgBenchmark9_Iterations = 65536;
- static const int cfgBenchmark9_Reference = 1879;
- //[10] updates (jitter)
- bool cfgBenchmark10_Enable = cfgEnable;
- static const btScalar cfgBenchmark10_Scale = cfgVolumeCenterScale / 10000;
- static const int cfgBenchmark10_Passes = 32;
- static const int cfgBenchmark10_Iterations = 65536;
- static const int cfgBenchmark10_Reference = 1244;
- //[11] optimize (incremental)
- bool cfgBenchmark11_Enable = cfgEnable;
- static const int cfgBenchmark11_Passes = 64;
- static const int cfgBenchmark11_Iterations = 65536;
- static const int cfgBenchmark11_Reference = 2510;
- //[12] btDbvtVolume notequal
- bool cfgBenchmark12_Enable = cfgEnable;
- static const int cfgBenchmark12_Iterations = 32;
- static const int cfgBenchmark12_Reference = 3677;
- //[13] culling(OCL+fullsort)
- bool cfgBenchmark13_Enable = cfgEnable;
- static const int cfgBenchmark13_Iterations = 1024;
- static const int cfgBenchmark13_Reference = 2231;
- //[14] culling(OCL+qsort)
- bool cfgBenchmark14_Enable = cfgEnable;
- static const int cfgBenchmark14_Iterations = 8192;
- static const int cfgBenchmark14_Reference = 3500;
- //[15] culling(KDOP+qsort)
- bool cfgBenchmark15_Enable = cfgEnable;
- static const int cfgBenchmark15_Iterations = 8192;
- static const int cfgBenchmark15_Reference = 1151;
- //[16] insert/remove batch
- bool cfgBenchmark16_Enable = cfgEnable;
- static const int cfgBenchmark16_BatchCount = 256;
- static const int cfgBenchmark16_Passes = 16384;
- static const int cfgBenchmark16_Reference = 5138;
- //[17] select
- bool cfgBenchmark17_Enable = cfgEnable;
- static const int cfgBenchmark17_Iterations = 4;
- static const int cfgBenchmark17_Reference = 3390;
-
- btClock wallclock;
- printf("Benchmarking dbvt...\r\n");
- printf("\tWorld scale: %f\r\n", cfgVolumeCenterScale);
- printf("\tExtents base: %f\r\n", cfgVolumeExentsBase);
- printf("\tExtents range: %f\r\n", cfgVolumeExentsScale);
- printf("\tLeaves: %u\r\n", cfgLeaves);
- printf("\tsizeof(btDbvtVolume): %u bytes\r\n", sizeof(btDbvtVolume));
- printf("\tsizeof(btDbvtNode): %u bytes\r\n", sizeof(btDbvtNode));
- if (cfgBenchmark1_Enable)
- { // Benchmark 1
- srand(380843);
- btAlignedObjectArray<btDbvtVolume> volumes;
- btAlignedObjectArray<bool> results;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- volumes[i] = btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- printf("[1] btDbvtVolume intersections: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark1_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- results[k] = Intersect(volumes[j], volumes[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark1_Reference) * 100 / time);
- }
- if (cfgBenchmark2_Enable)
- { // Benchmark 2
- srand(380843);
- btAlignedObjectArray<btDbvtVolume> volumes;
- btAlignedObjectArray<btDbvtVolume> results;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- volumes[i] = btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- printf("[2] btDbvtVolume merges: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark2_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- Merge(volumes[j], volumes[k], results[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark2_Reference) * 100 / time);
- }
- if (cfgBenchmark3_Enable)
- { // Benchmark 3
- srand(380843);
- btDbvt dbvt[2];
- btDbvtBenchmark::NilPolicy policy;
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[0]);
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[1]);
- dbvt[0].optimizeTopDown();
- dbvt[1].optimizeTopDown();
- printf("[3] btDbvt::collideTT: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark3_Iterations; ++i)
- {
- btDbvt::collideTT(dbvt[0].m_root, dbvt[1].m_root, policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark3_Reference) * 100 / time);
- }
- if (cfgBenchmark4_Enable)
- { // Benchmark 4
- srand(380843);
- btDbvt dbvt;
- btDbvtBenchmark::NilPolicy policy;
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[4] btDbvt::collideTT self: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark4_Iterations; ++i)
- {
- btDbvt::collideTT(dbvt.m_root, dbvt.m_root, policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark4_Reference) * 100 / time);
- }
- if (cfgBenchmark5_Enable)
- { // Benchmark 5
- srand(380843);
- btDbvt dbvt[2];
- btAlignedObjectArray<btTransform> transforms;
- btDbvtBenchmark::NilPolicy policy;
- transforms.resize(cfgBenchmark5_Iterations);
- for (int i = 0; i < transforms.size(); ++i)
- {
- transforms[i] = btDbvtBenchmark::RandTransform(cfgVolumeCenterScale * cfgBenchmark5_OffsetScale);
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[0]);
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt[1]);
- dbvt[0].optimizeTopDown();
- dbvt[1].optimizeTopDown();
- printf("[5] btDbvt::collideTT xform: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark5_Iterations; ++i)
- {
- btDbvt::collideTT(dbvt[0].m_root, dbvt[1].m_root, transforms[i], policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark5_Reference) * 100 / time);
- }
- if (cfgBenchmark6_Enable)
- { // Benchmark 6
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<btTransform> transforms;
- btDbvtBenchmark::NilPolicy policy;
- transforms.resize(cfgBenchmark6_Iterations);
- for (int i = 0; i < transforms.size(); ++i)
- {
- transforms[i] = btDbvtBenchmark::RandTransform(cfgVolumeCenterScale * cfgBenchmark6_OffsetScale);
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[6] btDbvt::collideTT xform,self: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark6_Iterations; ++i)
- {
- btDbvt::collideTT(dbvt.m_root, dbvt.m_root, transforms[i], policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark6_Reference) * 100 / time);
- }
- if (cfgBenchmark7_Enable)
- { // Benchmark 7
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<btVector3> rayorg;
- btAlignedObjectArray<btVector3> raydir;
- btDbvtBenchmark::NilPolicy policy;
- rayorg.resize(cfgBenchmark7_Iterations);
- raydir.resize(cfgBenchmark7_Iterations);
- for (int i = 0; i < rayorg.size(); ++i)
- {
- rayorg[i] = btDbvtBenchmark::RandVector3(cfgVolumeCenterScale * 2);
- raydir[i] = btDbvtBenchmark::RandVector3(cfgVolumeCenterScale * 2);
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[7] btDbvt::rayTest: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark7_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark7_Iterations; ++j)
- {
- btDbvt::rayTest(dbvt.m_root, rayorg[j], rayorg[j] + raydir[j], policy);
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- unsigned rays = cfgBenchmark7_Passes * cfgBenchmark7_Iterations;
- printf("%u ms (%i%%),(%u r/s)\r\n", time, (time - cfgBenchmark7_Reference) * 100 / time, (rays * 1000) / time);
- }
- if (cfgBenchmark8_Enable)
- { // Benchmark 8
- srand(380843);
- btDbvt dbvt;
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[8] insert/remove: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark8_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark8_Iterations; ++j)
- {
- dbvt.remove(dbvt.insert(btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale), 0));
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int ir = cfgBenchmark8_Passes * cfgBenchmark8_Iterations;
- printf("%u ms (%i%%),(%u ir/s)\r\n", time, (time - cfgBenchmark8_Reference) * 100 / time, ir * 1000 / time);
- }
- if (cfgBenchmark9_Enable)
- { // Benchmark 9
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<const btDbvtNode*> leaves;
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- dbvt.extractLeaves(dbvt.m_root, leaves);
- printf("[9] updates (teleport): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark9_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark9_Iterations; ++j)
- {
- dbvt.update(const_cast<btDbvtNode*>(leaves[rand() % cfgLeaves]),
- btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale));
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int up = cfgBenchmark9_Passes * cfgBenchmark9_Iterations;
- printf("%u ms (%i%%),(%u u/s)\r\n", time, (time - cfgBenchmark9_Reference) * 100 / time, up * 1000 / time);
- }
- if (cfgBenchmark10_Enable)
- { // Benchmark 10
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<const btDbvtNode*> leaves;
- btAlignedObjectArray<btVector3> vectors;
- vectors.resize(cfgBenchmark10_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (btDbvtBenchmark::RandVector3() * 2 - btVector3(1, 1, 1)) * cfgBenchmark10_Scale;
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- dbvt.extractLeaves(dbvt.m_root, leaves);
- printf("[10] updates (jitter): ");
- wallclock.reset();
-
- for (int i = 0; i < cfgBenchmark10_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark10_Iterations; ++j)
- {
- const btVector3& d = vectors[j];
- btDbvtNode* l = const_cast<btDbvtNode*>(leaves[rand() % cfgLeaves]);
- btDbvtVolume v = btDbvtVolume::FromMM(l->volume.Mins() + d, l->volume.Maxs() + d);
- dbvt.update(l, v);
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int up = cfgBenchmark10_Passes * cfgBenchmark10_Iterations;
- printf("%u ms (%i%%),(%u u/s)\r\n", time, (time - cfgBenchmark10_Reference) * 100 / time, up * 1000 / time);
- }
- if (cfgBenchmark11_Enable)
- { // Benchmark 11
- srand(380843);
- btDbvt dbvt;
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[11] optimize (incremental): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark11_Passes; ++i)
- {
- dbvt.optimizeIncremental(cfgBenchmark11_Iterations);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int op = cfgBenchmark11_Passes * cfgBenchmark11_Iterations;
- printf("%u ms (%i%%),(%u o/s)\r\n", time, (time - cfgBenchmark11_Reference) * 100 / time, op / time * 1000);
- }
- if (cfgBenchmark12_Enable)
- { // Benchmark 12
- srand(380843);
- btAlignedObjectArray<btDbvtVolume> volumes;
- btAlignedObjectArray<bool> results;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- volumes[i] = btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- printf("[12] btDbvtVolume notequal: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark12_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- results[k] = NotEqual(volumes[j], volumes[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark12_Reference) * 100 / time);
- }
- if (cfgBenchmark13_Enable)
- { // Benchmark 13
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<btVector3> vectors;
- btDbvtBenchmark::NilPolicy policy;
- vectors.resize(cfgBenchmark13_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (btDbvtBenchmark::RandVector3() * 2 - btVector3(1, 1, 1)).normalized();
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- printf("[13] culling(OCL+fullsort): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark13_Iterations; ++i)
- {
- static const btScalar offset = 0;
- policy.m_depth = -SIMD_INFINITY;
- dbvt.collideOCL(dbvt.m_root, &vectors[i], &offset, vectors[i], 1, policy);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int t = cfgBenchmark13_Iterations;
- printf("%u ms (%i%%),(%u t/s)\r\n", time, (time - cfgBenchmark13_Reference) * 100 / time, (t * 1000) / time);
- }
- if (cfgBenchmark14_Enable)
- { // Benchmark 14
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<btVector3> vectors;
- btDbvtBenchmark::P14 policy;
- vectors.resize(cfgBenchmark14_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (btDbvtBenchmark::RandVector3() * 2 - btVector3(1, 1, 1)).normalized();
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- policy.m_nodes.reserve(cfgLeaves);
- printf("[14] culling(OCL+qsort): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark14_Iterations; ++i)
- {
- static const btScalar offset = 0;
- policy.m_nodes.resize(0);
- dbvt.collideOCL(dbvt.m_root, &vectors[i], &offset, vectors[i], 1, policy, false);
- policy.m_nodes.quickSort(btDbvtBenchmark::P14::sortfnc);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int t = cfgBenchmark14_Iterations;
- printf("%u ms (%i%%),(%u t/s)\r\n", time, (time - cfgBenchmark14_Reference) * 100 / time, (t * 1000) / time);
- }
- if (cfgBenchmark15_Enable)
- { // Benchmark 15
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<btVector3> vectors;
- btDbvtBenchmark::P15 policy;
- vectors.resize(cfgBenchmark15_Iterations);
- for (int i = 0; i < vectors.size(); ++i)
- {
- vectors[i] = (btDbvtBenchmark::RandVector3() * 2 - btVector3(1, 1, 1)).normalized();
- }
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- policy.m_nodes.reserve(cfgLeaves);
- printf("[15] culling(KDOP+qsort): ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark15_Iterations; ++i)
- {
- static const btScalar offset = 0;
- policy.m_nodes.resize(0);
- policy.m_axis = vectors[i];
- dbvt.collideKDOP(dbvt.m_root, &vectors[i], &offset, 1, policy);
- policy.m_nodes.quickSort(btDbvtBenchmark::P15::sortfnc);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int t = cfgBenchmark15_Iterations;
- printf("%u ms (%i%%),(%u t/s)\r\n", time, (time - cfgBenchmark15_Reference) * 100 / time, (t * 1000) / time);
- }
- if (cfgBenchmark16_Enable)
- { // Benchmark 16
- srand(380843);
- btDbvt dbvt;
- btAlignedObjectArray<btDbvtNode*> batch;
- btDbvtBenchmark::RandTree(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale, cfgLeaves, dbvt);
- dbvt.optimizeTopDown();
- batch.reserve(cfgBenchmark16_BatchCount);
- printf("[16] insert/remove batch(%u): ", cfgBenchmark16_BatchCount);
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark16_Passes; ++i)
- {
- for (int j = 0; j < cfgBenchmark16_BatchCount; ++j)
- {
- batch.push_back(dbvt.insert(btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale), 0));
- }
- for (int j = 0; j < cfgBenchmark16_BatchCount; ++j)
- {
- dbvt.remove(batch[j]);
- }
- batch.resize(0);
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- const int ir = cfgBenchmark16_Passes * cfgBenchmark16_BatchCount;
- printf("%u ms (%i%%),(%u bir/s)\r\n", time, (time - cfgBenchmark16_Reference) * 100 / time, int(ir * 1000.0 / time));
- }
- if (cfgBenchmark17_Enable)
- { // Benchmark 17
- srand(380843);
- btAlignedObjectArray<btDbvtVolume> volumes;
- btAlignedObjectArray<int> results;
- btAlignedObjectArray<int> indices;
- volumes.resize(cfgLeaves);
- results.resize(cfgLeaves);
- indices.resize(cfgLeaves);
- for (int i = 0; i < cfgLeaves; ++i)
- {
- indices[i] = i;
- volumes[i] = btDbvtBenchmark::RandVolume(cfgVolumeCenterScale, cfgVolumeExentsBase, cfgVolumeExentsScale);
- }
- for (int i = 0; i < cfgLeaves; ++i)
- {
- btSwap(indices[i], indices[rand() % cfgLeaves]);
- }
- printf("[17] btDbvtVolume select: ");
- wallclock.reset();
- for (int i = 0; i < cfgBenchmark17_Iterations; ++i)
- {
- for (int j = 0; j < cfgLeaves; ++j)
- {
- for (int k = 0; k < cfgLeaves; ++k)
- {
- const int idx = indices[k];
- results[idx] = Select(volumes[idx], volumes[j], volumes[k]);
- }
- }
- }
- const int time = (int)wallclock.getTimeMilliseconds();
- printf("%u ms (%i%%)\r\n", time, (time - cfgBenchmark17_Reference) * 100 / time);
- }
- printf("\r\n\r\n");
-}
-#endif
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.h
deleted file mode 100644
index 55daa7fb57..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvt.h
+++ /dev/null
@@ -1,1578 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2007 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btDbvt implementation by Nathanael Presson
-
-#ifndef BT_DYNAMIC_BOUNDING_VOLUME_TREE_H
-#define BT_DYNAMIC_BOUNDING_VOLUME_TREE_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btAabbUtil2.h"
-//
-// Compile time configuration
-//
-
-// Implementation profiles
-#define DBVT_IMPL_GENERIC 0 // Generic implementation
-#define DBVT_IMPL_SSE 1 // SSE
-
-// Template implementation of ICollide
-#ifdef _WIN32
-#if (defined(_MSC_VER) && _MSC_VER >= 1400)
-#define DBVT_USE_TEMPLATE 1
-#else
-#define DBVT_USE_TEMPLATE 0
-#endif
-#else
-#define DBVT_USE_TEMPLATE 0
-#endif
-
-// Use only intrinsics instead of inline asm
-#define DBVT_USE_INTRINSIC_SSE 1
-
-// Using memmov for collideOCL
-#define DBVT_USE_MEMMOVE 1
-
-// Enable benchmarking code
-#define DBVT_ENABLE_BENCHMARK 0
-
-// Inlining
-#define DBVT_INLINE SIMD_FORCE_INLINE
-
-// Specific methods implementation
-
-//SSE gives errors on a MSVC 7.1
-#if defined(BT_USE_SSE) //&& defined (_WIN32)
-#define DBVT_SELECT_IMPL DBVT_IMPL_SSE
-#define DBVT_MERGE_IMPL DBVT_IMPL_SSE
-#define DBVT_INT0_IMPL DBVT_IMPL_SSE
-#else
-#define DBVT_SELECT_IMPL DBVT_IMPL_GENERIC
-#define DBVT_MERGE_IMPL DBVT_IMPL_GENERIC
-#define DBVT_INT0_IMPL DBVT_IMPL_GENERIC
-#endif
-
-#if (DBVT_SELECT_IMPL == DBVT_IMPL_SSE) || \
- (DBVT_MERGE_IMPL == DBVT_IMPL_SSE) || \
- (DBVT_INT0_IMPL == DBVT_IMPL_SSE)
-#include <emmintrin.h>
-#endif
-
-//
-// Auto config and checks
-//
-
-#if DBVT_USE_TEMPLATE
-#define DBVT_VIRTUAL
-#define DBVT_VIRTUAL_DTOR(a)
-#define DBVT_PREFIX template <typename T>
-#define DBVT_IPOLICY T& policy
-#define DBVT_CHECKTYPE \
- static const ICollide& typechecker = *(T*)1; \
- (void)typechecker;
-#else
-#define DBVT_VIRTUAL_DTOR(a) \
- virtual ~a() {}
-#define DBVT_VIRTUAL virtual
-#define DBVT_PREFIX
-#define DBVT_IPOLICY ICollide& policy
-#define DBVT_CHECKTYPE
-#endif
-
-#if DBVT_USE_MEMMOVE
-#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__)
-#include <memory.h>
-#endif
-#include <string.h>
-#endif
-
-#ifndef DBVT_USE_TEMPLATE
-#error "DBVT_USE_TEMPLATE undefined"
-#endif
-
-#ifndef DBVT_USE_MEMMOVE
-#error "DBVT_USE_MEMMOVE undefined"
-#endif
-
-#ifndef DBVT_ENABLE_BENCHMARK
-#error "DBVT_ENABLE_BENCHMARK undefined"
-#endif
-
-#ifndef DBVT_SELECT_IMPL
-#error "DBVT_SELECT_IMPL undefined"
-#endif
-
-#ifndef DBVT_MERGE_IMPL
-#error "DBVT_MERGE_IMPL undefined"
-#endif
-
-#ifndef DBVT_INT0_IMPL
-#error "DBVT_INT0_IMPL undefined"
-#endif
-
-//
-// Defaults volumes
-//
-
-/* btDbvtAabbMm */
-struct btDbvtAabbMm
-{
- DBVT_INLINE btDbvtAabbMm(){}
- DBVT_INLINE btVector3 Center() const { return ((mi + mx) / 2); }
- DBVT_INLINE btVector3 Lengths() const { return (mx - mi); }
- DBVT_INLINE btVector3 Extents() const { return ((mx - mi) / 2); }
- DBVT_INLINE const btVector3& Mins() const { return (mi); }
- DBVT_INLINE const btVector3& Maxs() const { return (mx); }
- static inline btDbvtAabbMm FromCE(const btVector3& c, const btVector3& e);
- static inline btDbvtAabbMm FromCR(const btVector3& c, btScalar r);
- static inline btDbvtAabbMm FromMM(const btVector3& mi, const btVector3& mx);
- static inline btDbvtAabbMm FromPoints(const btVector3* pts, int n);
- static inline btDbvtAabbMm FromPoints(const btVector3** ppts, int n);
- DBVT_INLINE void Expand(const btVector3& e);
- DBVT_INLINE void SignedExpand(const btVector3& e);
- DBVT_INLINE bool Contain(const btDbvtAabbMm& a) const;
- DBVT_INLINE int Classify(const btVector3& n, btScalar o, int s) const;
- DBVT_INLINE btScalar ProjectMinimum(const btVector3& v, unsigned signs) const;
- DBVT_INLINE friend bool Intersect(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b);
-
- DBVT_INLINE friend bool Intersect(const btDbvtAabbMm& a,
- const btVector3& b);
-
- DBVT_INLINE friend btScalar Proximity(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b);
- DBVT_INLINE friend int Select(const btDbvtAabbMm& o,
- const btDbvtAabbMm& a,
- const btDbvtAabbMm& b);
- DBVT_INLINE friend void Merge(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b,
- btDbvtAabbMm& r);
- DBVT_INLINE friend bool NotEqual(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b);
-
- DBVT_INLINE btVector3& tMins() { return (mi); }
- DBVT_INLINE btVector3& tMaxs() { return (mx); }
-
-private:
- DBVT_INLINE void AddSpan(const btVector3& d, btScalar& smi, btScalar& smx) const;
-
-private:
- btVector3 mi, mx;
-};
-
-// Types
-typedef btDbvtAabbMm btDbvtVolume;
-
-/* btDbvtNode */
-struct btDbvtNode
-{
- btDbvtVolume volume;
- btDbvtNode* parent;
- DBVT_INLINE bool isleaf() const { return (childs[1] == 0); }
- DBVT_INLINE bool isinternal() const { return (!isleaf()); }
- union {
- btDbvtNode* childs[2];
- void* data;
- int dataAsInt;
- };
-};
-
-/* btDbv(normal)tNode */
-struct btDbvntNode
-{
- btDbvtVolume volume;
- btVector3 normal;
- btScalar angle;
- DBVT_INLINE bool isleaf() const { return (childs[1] == 0); }
- DBVT_INLINE bool isinternal() const { return (!isleaf()); }
- btDbvntNode* childs[2];
- void* data;
-
- btDbvntNode(const btDbvtNode* n)
- : volume(n->volume)
- , normal(0,0,0)
- , angle(0)
- , data(n->data)
- {
- childs[0] = 0;
- childs[1] = 0;
- }
-
- ~btDbvntNode()
- {
- if (childs[0])
- delete childs[0];
- if (childs[1])
- delete childs[1];
- }
-};
-
-typedef btAlignedObjectArray<const btDbvtNode*> btNodeStack;
-
-///The btDbvt class implements a fast dynamic bounding volume tree based on axis aligned bounding boxes (aabb tree).
-///This btDbvt is used for soft body collision detection and for the btDbvtBroadphase. It has a fast insert, remove and update of nodes.
-///Unlike the btQuantizedBvh, nodes can be dynamically moved around, which allows for change in topology of the underlying data structure.
-struct btDbvt
-{
- /* Stack element */
- struct sStkNN
- {
- const btDbvtNode* a;
- const btDbvtNode* b;
- sStkNN() {}
- sStkNN(const btDbvtNode* na, const btDbvtNode* nb) : a(na), b(nb) {}
- };
- struct sStkNP
- {
- const btDbvtNode* node;
- int mask;
- sStkNP(const btDbvtNode* n, unsigned m) : node(n), mask(m) {}
- };
- struct sStkNPS
- {
- const btDbvtNode* node;
- int mask;
- btScalar value;
- sStkNPS() {}
- sStkNPS(const btDbvtNode* n, unsigned m, btScalar v) : node(n), mask(m), value(v) {}
- };
- struct sStkCLN
- {
- const btDbvtNode* node;
- btDbvtNode* parent;
- sStkCLN(const btDbvtNode* n, btDbvtNode* p) : node(n), parent(p) {}
- };
-
- struct sStknNN
- {
- const btDbvntNode* a;
- const btDbvntNode* b;
- sStknNN() {}
- sStknNN(const btDbvntNode* na, const btDbvntNode* nb) : a(na), b(nb) {}
- };
- // Policies/Interfaces
-
- /* ICollide */
- struct ICollide
- {
- DBVT_VIRTUAL_DTOR(ICollide)
- DBVT_VIRTUAL void Process(const btDbvtNode*, const btDbvtNode*) {}
- DBVT_VIRTUAL void Process(const btDbvtNode*) {}
- DBVT_VIRTUAL void Process(const btDbvtNode* n, btScalar) { Process(n); }
- DBVT_VIRTUAL void Process(const btDbvntNode*, const btDbvntNode*) {}
- DBVT_VIRTUAL bool Descent(const btDbvtNode*) { return (true); }
- DBVT_VIRTUAL bool AllLeaves(const btDbvtNode*) { return (true); }
- };
- /* IWriter */
- struct IWriter
- {
- virtual ~IWriter() {}
- virtual void Prepare(const btDbvtNode* root, int numnodes) = 0;
- virtual void WriteNode(const btDbvtNode*, int index, int parent, int child0, int child1) = 0;
- virtual void WriteLeaf(const btDbvtNode*, int index, int parent) = 0;
- };
- /* IClone */
- struct IClone
- {
- virtual ~IClone() {}
- virtual void CloneLeaf(btDbvtNode*) {}
- };
-
- // Constants
- enum
- {
- SIMPLE_STACKSIZE = 64,
- DOUBLE_STACKSIZE = SIMPLE_STACKSIZE * 2
- };
-
- // Fields
- btDbvtNode* m_root;
- btDbvtNode* m_free;
- int m_lkhd;
- int m_leaves;
- unsigned m_opath;
-
- btAlignedObjectArray<sStkNN> m_stkStack;
-
- // Methods
- btDbvt();
- ~btDbvt();
- void clear();
- bool empty() const { return (0 == m_root); }
- void optimizeBottomUp();
- void optimizeTopDown(int bu_treshold = 128);
- void optimizeIncremental(int passes);
- btDbvtNode* insert(const btDbvtVolume& box, void* data);
- void update(btDbvtNode* leaf, int lookahead = -1);
- void update(btDbvtNode* leaf, btDbvtVolume& volume);
- bool update(btDbvtNode* leaf, btDbvtVolume& volume, const btVector3& velocity, btScalar margin);
- bool update(btDbvtNode* leaf, btDbvtVolume& volume, const btVector3& velocity);
- bool update(btDbvtNode* leaf, btDbvtVolume& volume, btScalar margin);
- void remove(btDbvtNode* leaf);
- void write(IWriter* iwriter) const;
- void clone(btDbvt& dest, IClone* iclone = 0) const;
- static int maxdepth(const btDbvtNode* node);
- static int countLeaves(const btDbvtNode* node);
- static void extractLeaves(const btDbvtNode* node, btAlignedObjectArray<const btDbvtNode*>& leaves);
-#if DBVT_ENABLE_BENCHMARK
- static void benchmark();
-#else
- static void benchmark()
- {
- }
-#endif
- // DBVT_IPOLICY must support ICollide policy/interface
- DBVT_PREFIX
- static void enumNodes(const btDbvtNode* root,
- DBVT_IPOLICY);
- DBVT_PREFIX
- static void enumLeaves(const btDbvtNode* root,
- DBVT_IPOLICY);
- DBVT_PREFIX
- void collideTT(const btDbvtNode* root0,
- const btDbvtNode* root1,
- DBVT_IPOLICY);
- DBVT_PREFIX
- void selfCollideT(const btDbvntNode* root,
- DBVT_IPOLICY);
- DBVT_PREFIX
- void selfCollideTT(const btDbvtNode* root,
- DBVT_IPOLICY);
-
- DBVT_PREFIX
- void collideTTpersistentStack(const btDbvtNode* root0,
- const btDbvtNode* root1,
- DBVT_IPOLICY);
-#if 0
- DBVT_PREFIX
- void collideTT( const btDbvtNode* root0,
- const btDbvtNode* root1,
- const btTransform& xform,
- DBVT_IPOLICY);
- DBVT_PREFIX
- void collideTT( const btDbvtNode* root0,
- const btTransform& xform0,
- const btDbvtNode* root1,
- const btTransform& xform1,
- DBVT_IPOLICY);
-#endif
-
- DBVT_PREFIX
- void collideTV(const btDbvtNode* root,
- const btDbvtVolume& volume,
- DBVT_IPOLICY) const;
-
- DBVT_PREFIX
- void collideTVNoStackAlloc(const btDbvtNode* root,
- const btDbvtVolume& volume,
- btNodeStack& stack,
- DBVT_IPOLICY) const;
-
- ///rayTest is a re-entrant ray test, and can be called in parallel as long as the btAlignedAlloc is thread-safe (uses locking etc)
- ///rayTest is slower than rayTestInternal, because it builds a local stack, using memory allocations, and it recomputes signs/rayDirectionInverses each time
- DBVT_PREFIX
- static void rayTest(const btDbvtNode* root,
- const btVector3& rayFrom,
- const btVector3& rayTo,
- DBVT_IPOLICY);
- ///rayTestInternal is faster than rayTest, because it uses a persistent stack (to reduce dynamic memory allocations to a minimum) and it uses precomputed signs/rayInverseDirections
- ///rayTestInternal is used by btDbvtBroadphase to accelerate world ray casts
- DBVT_PREFIX
- void rayTestInternal(const btDbvtNode* root,
- const btVector3& rayFrom,
- const btVector3& rayTo,
- const btVector3& rayDirectionInverse,
- unsigned int signs[3],
- btScalar lambda_max,
- const btVector3& aabbMin,
- const btVector3& aabbMax,
- btAlignedObjectArray<const btDbvtNode*>& stack,
- DBVT_IPOLICY) const;
-
- DBVT_PREFIX
- static void collideKDOP(const btDbvtNode* root,
- const btVector3* normals,
- const btScalar* offsets,
- int count,
- DBVT_IPOLICY);
- DBVT_PREFIX
- static void collideOCL(const btDbvtNode* root,
- const btVector3* normals,
- const btScalar* offsets,
- const btVector3& sortaxis,
- int count,
- DBVT_IPOLICY,
- bool fullsort = true);
- DBVT_PREFIX
- static void collideTU(const btDbvtNode* root,
- DBVT_IPOLICY);
- // Helpers
- static DBVT_INLINE int nearest(const int* i, const btDbvt::sStkNPS* a, btScalar v, int l, int h)
- {
- int m = 0;
- while (l < h)
- {
- m = (l + h) >> 1;
- if (a[i[m]].value >= v)
- l = m + 1;
- else
- h = m;
- }
- return (h);
- }
- static DBVT_INLINE int allocate(btAlignedObjectArray<int>& ifree,
- btAlignedObjectArray<sStkNPS>& stock,
- const sStkNPS& value)
- {
- int i;
- if (ifree.size() > 0)
- {
- i = ifree[ifree.size() - 1];
- ifree.pop_back();
- stock[i] = value;
- }
- else
- {
- i = stock.size();
- stock.push_back(value);
- }
- return (i);
- }
- //
-private:
- btDbvt(const btDbvt&) {}
-};
-
-//
-// Inline's
-//
-
-//
-inline btDbvtAabbMm btDbvtAabbMm::FromCE(const btVector3& c, const btVector3& e)
-{
- btDbvtAabbMm box;
- box.mi = c - e;
- box.mx = c + e;
- return (box);
-}
-
-//
-inline btDbvtAabbMm btDbvtAabbMm::FromCR(const btVector3& c, btScalar r)
-{
- return (FromCE(c, btVector3(r, r, r)));
-}
-
-//
-inline btDbvtAabbMm btDbvtAabbMm::FromMM(const btVector3& mi, const btVector3& mx)
-{
- btDbvtAabbMm box;
- box.mi = mi;
- box.mx = mx;
- return (box);
-}
-
-//
-inline btDbvtAabbMm btDbvtAabbMm::FromPoints(const btVector3* pts, int n)
-{
- btDbvtAabbMm box;
- box.mi = box.mx = pts[0];
- for (int i = 1; i < n; ++i)
- {
- box.mi.setMin(pts[i]);
- box.mx.setMax(pts[i]);
- }
- return (box);
-}
-
-//
-inline btDbvtAabbMm btDbvtAabbMm::FromPoints(const btVector3** ppts, int n)
-{
- btDbvtAabbMm box;
- box.mi = box.mx = *ppts[0];
- for (int i = 1; i < n; ++i)
- {
- box.mi.setMin(*ppts[i]);
- box.mx.setMax(*ppts[i]);
- }
- return (box);
-}
-
-//
-DBVT_INLINE void btDbvtAabbMm::Expand(const btVector3& e)
-{
- mi -= e;
- mx += e;
-}
-
-//
-DBVT_INLINE void btDbvtAabbMm::SignedExpand(const btVector3& e)
-{
- if (e.x() > 0)
- mx.setX(mx.x() + e[0]);
- else
- mi.setX(mi.x() + e[0]);
- if (e.y() > 0)
- mx.setY(mx.y() + e[1]);
- else
- mi.setY(mi.y() + e[1]);
- if (e.z() > 0)
- mx.setZ(mx.z() + e[2]);
- else
- mi.setZ(mi.z() + e[2]);
-}
-
-//
-DBVT_INLINE bool btDbvtAabbMm::Contain(const btDbvtAabbMm& a) const
-{
- return ((mi.x() <= a.mi.x()) &&
- (mi.y() <= a.mi.y()) &&
- (mi.z() <= a.mi.z()) &&
- (mx.x() >= a.mx.x()) &&
- (mx.y() >= a.mx.y()) &&
- (mx.z() >= a.mx.z()));
-}
-
-//
-DBVT_INLINE int btDbvtAabbMm::Classify(const btVector3& n, btScalar o, int s) const
-{
- btVector3 pi, px;
- switch (s)
- {
- case (0 + 0 + 0):
- px = btVector3(mi.x(), mi.y(), mi.z());
- pi = btVector3(mx.x(), mx.y(), mx.z());
- break;
- case (1 + 0 + 0):
- px = btVector3(mx.x(), mi.y(), mi.z());
- pi = btVector3(mi.x(), mx.y(), mx.z());
- break;
- case (0 + 2 + 0):
- px = btVector3(mi.x(), mx.y(), mi.z());
- pi = btVector3(mx.x(), mi.y(), mx.z());
- break;
- case (1 + 2 + 0):
- px = btVector3(mx.x(), mx.y(), mi.z());
- pi = btVector3(mi.x(), mi.y(), mx.z());
- break;
- case (0 + 0 + 4):
- px = btVector3(mi.x(), mi.y(), mx.z());
- pi = btVector3(mx.x(), mx.y(), mi.z());
- break;
- case (1 + 0 + 4):
- px = btVector3(mx.x(), mi.y(), mx.z());
- pi = btVector3(mi.x(), mx.y(), mi.z());
- break;
- case (0 + 2 + 4):
- px = btVector3(mi.x(), mx.y(), mx.z());
- pi = btVector3(mx.x(), mi.y(), mi.z());
- break;
- case (1 + 2 + 4):
- px = btVector3(mx.x(), mx.y(), mx.z());
- pi = btVector3(mi.x(), mi.y(), mi.z());
- break;
- }
- if ((btDot(n, px) + o) < 0) return (-1);
- if ((btDot(n, pi) + o) >= 0) return (+1);
- return (0);
-}
-
-//
-DBVT_INLINE btScalar btDbvtAabbMm::ProjectMinimum(const btVector3& v, unsigned signs) const
-{
- const btVector3* b[] = {&mx, &mi};
- const btVector3 p(b[(signs >> 0) & 1]->x(),
- b[(signs >> 1) & 1]->y(),
- b[(signs >> 2) & 1]->z());
- return (btDot(p, v));
-}
-
-//
-DBVT_INLINE void btDbvtAabbMm::AddSpan(const btVector3& d, btScalar& smi, btScalar& smx) const
-{
- for (int i = 0; i < 3; ++i)
- {
- if (d[i] < 0)
- {
- smi += mx[i] * d[i];
- smx += mi[i] * d[i];
- }
- else
- {
- smi += mi[i] * d[i];
- smx += mx[i] * d[i];
- }
- }
-}
-
-//
-DBVT_INLINE bool Intersect(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b)
-{
-#if DBVT_INT0_IMPL == DBVT_IMPL_SSE
- const __m128 rt(_mm_or_ps(_mm_cmplt_ps(_mm_load_ps(b.mx), _mm_load_ps(a.mi)),
- _mm_cmplt_ps(_mm_load_ps(a.mx), _mm_load_ps(b.mi))));
-#if defined(_WIN32)
- const __int32* pu((const __int32*)&rt);
-#else
- const int* pu((const int*)&rt);
-#endif
- return ((pu[0] | pu[1] | pu[2]) == 0);
-#else
- return ((a.mi.x() <= b.mx.x()) &&
- (a.mx.x() >= b.mi.x()) &&
- (a.mi.y() <= b.mx.y()) &&
- (a.mx.y() >= b.mi.y()) &&
- (a.mi.z() <= b.mx.z()) &&
- (a.mx.z() >= b.mi.z()));
-#endif
-}
-
-//
-DBVT_INLINE bool Intersect(const btDbvtAabbMm& a,
- const btVector3& b)
-{
- return ((b.x() >= a.mi.x()) &&
- (b.y() >= a.mi.y()) &&
- (b.z() >= a.mi.z()) &&
- (b.x() <= a.mx.x()) &&
- (b.y() <= a.mx.y()) &&
- (b.z() <= a.mx.z()));
-}
-
-//////////////////////////////////////
-
-//
-DBVT_INLINE btScalar Proximity(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b)
-{
- const btVector3 d = (a.mi + a.mx) - (b.mi + b.mx);
- return (btFabs(d.x()) + btFabs(d.y()) + btFabs(d.z()));
-}
-
-//
-DBVT_INLINE int Select(const btDbvtAabbMm& o,
- const btDbvtAabbMm& a,
- const btDbvtAabbMm& b)
-{
-#if DBVT_SELECT_IMPL == DBVT_IMPL_SSE
-
-#if defined(_WIN32)
- static ATTRIBUTE_ALIGNED16(const unsigned __int32) mask[] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff};
-#else
- static ATTRIBUTE_ALIGNED16(const unsigned int) mask[] = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x00000000 /*0x7fffffff*/};
-#endif
- ///@todo: the intrinsic version is 11% slower
-#if DBVT_USE_INTRINSIC_SSE
-
- union btSSEUnion ///NOTE: if we use more intrinsics, move btSSEUnion into the LinearMath directory
- {
- __m128 ssereg;
- float floats[4];
- int ints[4];
- };
-
- __m128 omi(_mm_load_ps(o.mi));
- omi = _mm_add_ps(omi, _mm_load_ps(o.mx));
- __m128 ami(_mm_load_ps(a.mi));
- ami = _mm_add_ps(ami, _mm_load_ps(a.mx));
- ami = _mm_sub_ps(ami, omi);
- ami = _mm_and_ps(ami, _mm_load_ps((const float*)mask));
- __m128 bmi(_mm_load_ps(b.mi));
- bmi = _mm_add_ps(bmi, _mm_load_ps(b.mx));
- bmi = _mm_sub_ps(bmi, omi);
- bmi = _mm_and_ps(bmi, _mm_load_ps((const float*)mask));
- __m128 t0(_mm_movehl_ps(ami, ami));
- ami = _mm_add_ps(ami, t0);
- ami = _mm_add_ss(ami, _mm_shuffle_ps(ami, ami, 1));
- __m128 t1(_mm_movehl_ps(bmi, bmi));
- bmi = _mm_add_ps(bmi, t1);
- bmi = _mm_add_ss(bmi, _mm_shuffle_ps(bmi, bmi, 1));
-
- btSSEUnion tmp;
- tmp.ssereg = _mm_cmple_ss(bmi, ami);
- return tmp.ints[0] & 1;
-
-#else
- ATTRIBUTE_ALIGNED16(__int32 r[1]);
- __asm
- {
- mov eax,o
- mov ecx,a
- mov edx,b
- movaps xmm0,[eax]
- movaps xmm5,mask
- addps xmm0,[eax+16]
- movaps xmm1,[ecx]
- movaps xmm2,[edx]
- addps xmm1,[ecx+16]
- addps xmm2,[edx+16]
- subps xmm1,xmm0
- subps xmm2,xmm0
- andps xmm1,xmm5
- andps xmm2,xmm5
- movhlps xmm3,xmm1
- movhlps xmm4,xmm2
- addps xmm1,xmm3
- addps xmm2,xmm4
- pshufd xmm3,xmm1,1
- pshufd xmm4,xmm2,1
- addss xmm1,xmm3
- addss xmm2,xmm4
- cmpless xmm2,xmm1
- movss r,xmm2
- }
- return (r[0] & 1);
-#endif
-#else
- return (Proximity(o, a) < Proximity(o, b) ? 0 : 1);
-#endif
-}
-
-//
-DBVT_INLINE void Merge(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b,
- btDbvtAabbMm& r)
-{
-#if DBVT_MERGE_IMPL == DBVT_IMPL_SSE
- __m128 ami(_mm_load_ps(a.mi));
- __m128 amx(_mm_load_ps(a.mx));
- __m128 bmi(_mm_load_ps(b.mi));
- __m128 bmx(_mm_load_ps(b.mx));
- ami = _mm_min_ps(ami, bmi);
- amx = _mm_max_ps(amx, bmx);
- _mm_store_ps(r.mi, ami);
- _mm_store_ps(r.mx, amx);
-#else
- for (int i = 0; i < 3; ++i)
- {
- if (a.mi[i] < b.mi[i])
- r.mi[i] = a.mi[i];
- else
- r.mi[i] = b.mi[i];
- if (a.mx[i] > b.mx[i])
- r.mx[i] = a.mx[i];
- else
- r.mx[i] = b.mx[i];
- }
-#endif
-}
-
-//
-DBVT_INLINE bool NotEqual(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b)
-{
- return ((a.mi.x() != b.mi.x()) ||
- (a.mi.y() != b.mi.y()) ||
- (a.mi.z() != b.mi.z()) ||
- (a.mx.x() != b.mx.x()) ||
- (a.mx.y() != b.mx.y()) ||
- (a.mx.z() != b.mx.z()));
-}
-
-//
-// Inline's
-//
-
-//
-DBVT_PREFIX
-inline void btDbvt::enumNodes(const btDbvtNode* root,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- policy.Process(root);
- if (root->isinternal())
- {
- enumNodes(root->childs[0], policy);
- enumNodes(root->childs[1], policy);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::enumLeaves(const btDbvtNode* root,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root->isinternal())
- {
- enumLeaves(root->childs[0], policy);
- enumLeaves(root->childs[1], policy);
- }
- else
- {
- policy.Process(root);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::collideTT(const btDbvtNode* root0,
- const btDbvtNode* root1,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root0 && root1)
- {
- int depth = 1;
- int treshold = DOUBLE_STACKSIZE - 4;
- btAlignedObjectArray<sStkNN> stkStack;
- stkStack.resize(DOUBLE_STACKSIZE);
- stkStack[0] = sStkNN(root0, root1);
- do
- {
- sStkNN p = stkStack[--depth];
- if (depth > treshold)
- {
- stkStack.resize(stkStack.size() * 2);
- treshold = stkStack.size() - 4;
- }
- if (p.a == p.b)
- {
- if (p.a->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]);
- stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]);
- }
- }
- else if (Intersect(p.a->volume, p.b->volume))
- {
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a, p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a, p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::selfCollideT(const btDbvntNode* root,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root)
- {
- int depth = 1;
- int treshold = DOUBLE_STACKSIZE - 4;
- btAlignedObjectArray<sStknNN> stkStack;
- stkStack.resize(DOUBLE_STACKSIZE);
- stkStack[0] = sStknNN(root, root);
- do
- {
- sStknNN p = stkStack[--depth];
- if (depth > treshold)
- {
- stkStack.resize(stkStack.size() * 2);
- treshold = stkStack.size() - 4;
- }
- if (p.a == p.b)
- {
- if (p.a->isinternal() && p.a->angle > SIMD_PI)
- {
- stkStack[depth++] = sStknNN(p.a->childs[0], p.a->childs[0]);
- stkStack[depth++] = sStknNN(p.a->childs[1], p.a->childs[1]);
- stkStack[depth++] = sStknNN(p.a->childs[0], p.a->childs[1]);
- }
- }
- else if (Intersect(p.a->volume, p.b->volume))
- {
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStknNN(p.a->childs[0], p.b->childs[0]);
- stkStack[depth++] = sStknNN(p.a->childs[1], p.b->childs[0]);
- stkStack[depth++] = sStknNN(p.a->childs[0], p.b->childs[1]);
- stkStack[depth++] = sStknNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- stkStack[depth++] = sStknNN(p.a->childs[0], p.b);
- stkStack[depth++] = sStknNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStknNN(p.a, p.b->childs[0]);
- stkStack[depth++] = sStknNN(p.a, p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::selfCollideTT(const btDbvtNode* root,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root)
- {
- int depth = 1;
- int treshold = DOUBLE_STACKSIZE - 4;
- btAlignedObjectArray<sStkNN> stkStack;
- stkStack.resize(DOUBLE_STACKSIZE);
- stkStack[0] = sStkNN(root, root);
- do
- {
- sStkNN p = stkStack[--depth];
- if (depth > treshold)
- {
- stkStack.resize(stkStack.size() * 2);
- treshold = stkStack.size() - 4;
- }
- if (p.a == p.b)
- {
- if (p.a->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]);
- stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]);
- }
- }
- else if (Intersect(p.a->volume, p.b->volume))
- {
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- stkStack[depth++] = sStkNN(p.a->childs[0], p.b);
- stkStack[depth++] = sStkNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = sStkNN(p.a, p.b->childs[0]);
- stkStack[depth++] = sStkNN(p.a, p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-
-DBVT_PREFIX
-inline void btDbvt::collideTTpersistentStack(const btDbvtNode* root0,
- const btDbvtNode* root1,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root0 && root1)
- {
- int depth = 1;
- int treshold = DOUBLE_STACKSIZE - 4;
-
- m_stkStack.resize(DOUBLE_STACKSIZE);
- m_stkStack[0] = sStkNN(root0, root1);
- do
- {
- sStkNN p = m_stkStack[--depth];
- if (depth > treshold)
- {
- m_stkStack.resize(m_stkStack.size() * 2);
- treshold = m_stkStack.size() - 4;
- }
- if (p.a == p.b)
- {
- if (p.a->isinternal())
- {
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.a->childs[1]);
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.a->childs[1]);
- }
- }
- else if (Intersect(p.a->volume, p.b->volume))
- {
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b->childs[1]);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- m_stkStack[depth++] = sStkNN(p.a->childs[0], p.b);
- m_stkStack[depth++] = sStkNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- m_stkStack[depth++] = sStkNN(p.a, p.b->childs[0]);
- m_stkStack[depth++] = sStkNN(p.a, p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-#if 0
-//
-DBVT_PREFIX
-inline void btDbvt::collideTT( const btDbvtNode* root0,
- const btDbvtNode* root1,
- const btTransform& xform,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if(root0&&root1)
- {
- int depth=1;
- int treshold=DOUBLE_STACKSIZE-4;
- btAlignedObjectArray<sStkNN> stkStack;
- stkStack.resize(DOUBLE_STACKSIZE);
- stkStack[0]=sStkNN(root0,root1);
- do {
- sStkNN p=stkStack[--depth];
- if(Intersect(p.a->volume,p.b->volume,xform))
- {
- if(depth>treshold)
- {
- stkStack.resize(stkStack.size()*2);
- treshold=stkStack.size()-4;
- }
- if(p.a->isinternal())
- {
- if(p.b->isinternal())
- {
- stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[0]);
- stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[0]);
- stkStack[depth++]=sStkNN(p.a->childs[0],p.b->childs[1]);
- stkStack[depth++]=sStkNN(p.a->childs[1],p.b->childs[1]);
- }
- else
- {
- stkStack[depth++]=sStkNN(p.a->childs[0],p.b);
- stkStack[depth++]=sStkNN(p.a->childs[1],p.b);
- }
- }
- else
- {
- if(p.b->isinternal())
- {
- stkStack[depth++]=sStkNN(p.a,p.b->childs[0]);
- stkStack[depth++]=sStkNN(p.a,p.b->childs[1]);
- }
- else
- {
- policy.Process(p.a,p.b);
- }
- }
- }
- } while(depth);
- }
-}
-//
-DBVT_PREFIX
-inline void btDbvt::collideTT( const btDbvtNode* root0,
- const btTransform& xform0,
- const btDbvtNode* root1,
- const btTransform& xform1,
- DBVT_IPOLICY)
-{
- const btTransform xform=xform0.inverse()*xform1;
- collideTT(root0,root1,xform,policy);
-}
-#endif
-
-DBVT_PREFIX
-inline void btDbvt::collideTV(const btDbvtNode* root,
- const btDbvtVolume& vol,
- DBVT_IPOLICY) const
-{
- DBVT_CHECKTYPE
- if (root)
- {
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- volume(vol);
- btAlignedObjectArray<const btDbvtNode*> stack;
- stack.resize(0);
-#ifndef BT_DISABLE_STACK_TEMP_MEMORY
- char tempmemory[SIMPLE_STACKSIZE * sizeof(const btDbvtNode*)];
- stack.initializeFromBuffer(tempmemory, 0, SIMPLE_STACKSIZE);
-#else
- stack.reserve(SIMPLE_STACKSIZE);
-#endif //BT_DISABLE_STACK_TEMP_MEMORY
-
- stack.push_back(root);
- do
- {
- const btDbvtNode* n = stack[stack.size() - 1];
- stack.pop_back();
- if (Intersect(n->volume, volume))
- {
- if (n->isinternal())
- {
- stack.push_back(n->childs[0]);
- stack.push_back(n->childs[1]);
- }
- else
- {
- policy.Process(n);
- }
- }
- } while (stack.size() > 0);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::collideTVNoStackAlloc(const btDbvtNode* root,
- const btDbvtVolume& vol,
- btNodeStack& stack,
- DBVT_IPOLICY) const
-{
- DBVT_CHECKTYPE
- if (root)
- {
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- volume(vol);
- stack.resize(0);
- stack.reserve(SIMPLE_STACKSIZE);
- stack.push_back(root);
- do
- {
- const btDbvtNode* n = stack[stack.size() - 1];
- stack.pop_back();
- if (Intersect(n->volume, volume))
- {
- if (n->isinternal())
- {
- stack.push_back(n->childs[0]);
- stack.push_back(n->childs[1]);
- }
- else
- {
- policy.Process(n);
- }
- }
- } while (stack.size() > 0);
- }
-}
-
-DBVT_PREFIX
-inline void btDbvt::rayTestInternal(const btDbvtNode* root,
- const btVector3& rayFrom,
- const btVector3& rayTo,
- const btVector3& rayDirectionInverse,
- unsigned int signs[3],
- btScalar lambda_max,
- const btVector3& aabbMin,
- const btVector3& aabbMax,
- btAlignedObjectArray<const btDbvtNode*>& stack,
- DBVT_IPOLICY) const
-{
- (void)rayTo;
- DBVT_CHECKTYPE
- if (root)
- {
- btVector3 resultNormal;
-
- int depth = 1;
- int treshold = DOUBLE_STACKSIZE - 2;
- stack.resize(DOUBLE_STACKSIZE);
- stack[0] = root;
- btVector3 bounds[2];
- do
- {
- const btDbvtNode* node = stack[--depth];
- bounds[0] = node->volume.Mins() - aabbMax;
- bounds[1] = node->volume.Maxs() - aabbMin;
- btScalar tmin = 1.f, lambda_min = 0.f;
- unsigned int result1 = false;
- result1 = btRayAabb2(rayFrom, rayDirectionInverse, signs, bounds, tmin, lambda_min, lambda_max);
- if (result1)
- {
- if (node->isinternal())
- {
- if (depth > treshold)
- {
- stack.resize(stack.size() * 2);
- treshold = stack.size() - 2;
- }
- stack[depth++] = node->childs[0];
- stack[depth++] = node->childs[1];
- }
- else
- {
- policy.Process(node);
- }
- }
- } while (depth);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::rayTest(const btDbvtNode* root,
- const btVector3& rayFrom,
- const btVector3& rayTo,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root)
- {
- btVector3 rayDir = (rayTo - rayFrom);
- rayDir.normalize();
-
- ///what about division by zero? --> just set rayDirection[i] to INF/BT_LARGE_FLOAT
- btVector3 rayDirectionInverse;
- rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[0];
- rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[1];
- rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[2];
- unsigned int signs[3] = {rayDirectionInverse[0] < 0.0, rayDirectionInverse[1] < 0.0, rayDirectionInverse[2] < 0.0};
-
- btScalar lambda_max = rayDir.dot(rayTo - rayFrom);
-
- btVector3 resultNormal;
-
- btAlignedObjectArray<const btDbvtNode*> stack;
-
- int depth = 1;
- int treshold = DOUBLE_STACKSIZE - 2;
-
- char tempmemory[DOUBLE_STACKSIZE * sizeof(const btDbvtNode*)];
-#ifndef BT_DISABLE_STACK_TEMP_MEMORY
- stack.initializeFromBuffer(tempmemory, DOUBLE_STACKSIZE, DOUBLE_STACKSIZE);
-#else //BT_DISABLE_STACK_TEMP_MEMORY
- stack.resize(DOUBLE_STACKSIZE);
-#endif //BT_DISABLE_STACK_TEMP_MEMORY
- stack[0] = root;
- btVector3 bounds[2];
- do
- {
- const btDbvtNode* node = stack[--depth];
-
- bounds[0] = node->volume.Mins();
- bounds[1] = node->volume.Maxs();
-
- btScalar tmin = 1.f, lambda_min = 0.f;
- unsigned int result1 = btRayAabb2(rayFrom, rayDirectionInverse, signs, bounds, tmin, lambda_min, lambda_max);
-
-#ifdef COMPARE_BTRAY_AABB2
- btScalar param = 1.f;
- bool result2 = btRayAabb(rayFrom, rayTo, node->volume.Mins(), node->volume.Maxs(), param, resultNormal);
- btAssert(result1 == result2);
-#endif //TEST_BTRAY_AABB2
-
- if (result1)
- {
- if (node->isinternal())
- {
- if (depth > treshold)
- {
- stack.resize(stack.size() * 2);
- treshold = stack.size() - 2;
- }
- stack[depth++] = node->childs[0];
- stack[depth++] = node->childs[1];
- }
- else
- {
- policy.Process(node);
- }
- }
- } while (depth);
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::collideKDOP(const btDbvtNode* root,
- const btVector3* normals,
- const btScalar* offsets,
- int count,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root)
- {
- const int inside = (1 << count) - 1;
- btAlignedObjectArray<sStkNP> stack;
- int signs[sizeof(unsigned) * 8];
- btAssert(count < int(sizeof(signs) / sizeof(signs[0])));
- for (int i = 0; i < count; ++i)
- {
- signs[i] = ((normals[i].x() >= 0) ? 1 : 0) +
- ((normals[i].y() >= 0) ? 2 : 0) +
- ((normals[i].z() >= 0) ? 4 : 0);
- }
- stack.reserve(SIMPLE_STACKSIZE);
- stack.push_back(sStkNP(root, 0));
- do
- {
- sStkNP se = stack[stack.size() - 1];
- bool out = false;
- stack.pop_back();
- for (int i = 0, j = 1; (!out) && (i < count); ++i, j <<= 1)
- {
- if (0 == (se.mask & j))
- {
- const int side = se.node->volume.Classify(normals[i], offsets[i], signs[i]);
- switch (side)
- {
- case -1:
- out = true;
- break;
- case +1:
- se.mask |= j;
- break;
- }
- }
- }
- if (!out)
- {
- if ((se.mask != inside) && (se.node->isinternal()))
- {
- stack.push_back(sStkNP(se.node->childs[0], se.mask));
- stack.push_back(sStkNP(se.node->childs[1], se.mask));
- }
- else
- {
- if (policy.AllLeaves(se.node)) enumLeaves(se.node, policy);
- }
- }
- } while (stack.size());
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::collideOCL(const btDbvtNode* root,
- const btVector3* normals,
- const btScalar* offsets,
- const btVector3& sortaxis,
- int count,
- DBVT_IPOLICY,
- bool fsort)
-{
- DBVT_CHECKTYPE
- if (root)
- {
- const unsigned srtsgns = (sortaxis[0] >= 0 ? 1 : 0) +
- (sortaxis[1] >= 0 ? 2 : 0) +
- (sortaxis[2] >= 0 ? 4 : 0);
- const int inside = (1 << count) - 1;
- btAlignedObjectArray<sStkNPS> stock;
- btAlignedObjectArray<int> ifree;
- btAlignedObjectArray<int> stack;
- int signs[sizeof(unsigned) * 8];
- btAssert(count < int(sizeof(signs) / sizeof(signs[0])));
- for (int i = 0; i < count; ++i)
- {
- signs[i] = ((normals[i].x() >= 0) ? 1 : 0) +
- ((normals[i].y() >= 0) ? 2 : 0) +
- ((normals[i].z() >= 0) ? 4 : 0);
- }
- stock.reserve(SIMPLE_STACKSIZE);
- stack.reserve(SIMPLE_STACKSIZE);
- ifree.reserve(SIMPLE_STACKSIZE);
- stack.push_back(allocate(ifree, stock, sStkNPS(root, 0, root->volume.ProjectMinimum(sortaxis, srtsgns))));
- do
- {
- const int id = stack[stack.size() - 1];
- sStkNPS se = stock[id];
- stack.pop_back();
- ifree.push_back(id);
- if (se.mask != inside)
- {
- bool out = false;
- for (int i = 0, j = 1; (!out) && (i < count); ++i, j <<= 1)
- {
- if (0 == (se.mask & j))
- {
- const int side = se.node->volume.Classify(normals[i], offsets[i], signs[i]);
- switch (side)
- {
- case -1:
- out = true;
- break;
- case +1:
- se.mask |= j;
- break;
- }
- }
- }
- if (out) continue;
- }
- if (policy.Descent(se.node))
- {
- if (se.node->isinternal())
- {
- const btDbvtNode* pns[] = {se.node->childs[0], se.node->childs[1]};
- sStkNPS nes[] = {sStkNPS(pns[0], se.mask, pns[0]->volume.ProjectMinimum(sortaxis, srtsgns)),
- sStkNPS(pns[1], se.mask, pns[1]->volume.ProjectMinimum(sortaxis, srtsgns))};
- const int q = nes[0].value < nes[1].value ? 1 : 0;
- int j = stack.size();
- if (fsort && (j > 0))
- {
- /* Insert 0 */
- j = nearest(&stack[0], &stock[0], nes[q].value, 0, stack.size());
- stack.push_back(0);
-
- //void * memmove ( void * destination, const void * source, size_t num );
-
-#if DBVT_USE_MEMMOVE
- {
- int num_items_to_move = stack.size() - 1 - j;
- if (num_items_to_move > 0)
- memmove(&stack[j + 1], &stack[j], sizeof(int) * num_items_to_move);
- }
-#else
- for (int k = stack.size() - 1; k > j; --k)
- {
- stack[k] = stack[k - 1];
- }
-#endif
- stack[j] = allocate(ifree, stock, nes[q]);
- /* Insert 1 */
- j = nearest(&stack[0], &stock[0], nes[1 - q].value, j, stack.size());
- stack.push_back(0);
-#if DBVT_USE_MEMMOVE
- {
- int num_items_to_move = stack.size() - 1 - j;
- if (num_items_to_move > 0)
- memmove(&stack[j + 1], &stack[j], sizeof(int) * num_items_to_move);
- }
-#else
- for (int k = stack.size() - 1; k > j; --k)
- {
- stack[k] = stack[k - 1];
- }
-#endif
- stack[j] = allocate(ifree, stock, nes[1 - q]);
- }
- else
- {
- stack.push_back(allocate(ifree, stock, nes[q]));
- stack.push_back(allocate(ifree, stock, nes[1 - q]));
- }
- }
- else
- {
- policy.Process(se.node, se.value);
- }
- }
- } while (stack.size());
- }
-}
-
-//
-DBVT_PREFIX
-inline void btDbvt::collideTU(const btDbvtNode* root,
- DBVT_IPOLICY)
-{
- DBVT_CHECKTYPE
- if (root)
- {
- btAlignedObjectArray<const btDbvtNode*> stack;
- stack.reserve(SIMPLE_STACKSIZE);
- stack.push_back(root);
- do
- {
- const btDbvtNode* n = stack[stack.size() - 1];
- stack.pop_back();
- if (policy.Descent(n))
- {
- if (n->isinternal())
- {
- stack.push_back(n->childs[0]);
- stack.push_back(n->childs[1]);
- }
- else
- {
- policy.Process(n);
- }
- }
- } while (stack.size() > 0);
- }
-}
-
-//
-// PP Cleanup
-//
-
-#undef DBVT_USE_MEMMOVE
-#undef DBVT_USE_TEMPLATE
-#undef DBVT_VIRTUAL_DTOR
-#undef DBVT_VIRTUAL
-#undef DBVT_PREFIX
-#undef DBVT_IPOLICY
-#undef DBVT_CHECKTYPE
-#undef DBVT_IMPL_GENERIC
-#undef DBVT_IMPL_SSE
-#undef DBVT_USE_INTRINSIC_SSE
-#undef DBVT_SELECT_IMPL
-#undef DBVT_MERGE_IMPL
-#undef DBVT_INT0_IMPL
-
-#endif
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp
deleted file mode 100644
index 7b39dbdc0f..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp
+++ /dev/null
@@ -1,828 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///btDbvtBroadphase implementation by Nathanael Presson
-
-#include "btDbvtBroadphase.h"
-#include "LinearMath/btThreads.h"
-btScalar gDbvtMargin = btScalar(0.05);
-//
-// Profiling
-//
-
-#if DBVT_BP_PROFILE || DBVT_BP_ENABLE_BENCHMARK
-#include <stdio.h>
-#endif
-
-#if DBVT_BP_PROFILE
-struct ProfileScope
-{
- __forceinline ProfileScope(btClock& clock, unsigned long& value) : m_clock(&clock), m_value(&value), m_base(clock.getTimeMicroseconds())
- {
- }
- __forceinline ~ProfileScope()
- {
- (*m_value) += m_clock->getTimeMicroseconds() - m_base;
- }
- btClock* m_clock;
- unsigned long* m_value;
- unsigned long m_base;
-};
-#define SPC(_value_) ProfileScope spc_scope(m_clock, _value_)
-#else
-#define SPC(_value_)
-#endif
-
-//
-// Helpers
-//
-
-//
-template <typename T>
-static inline void listappend(T* item, T*& list)
-{
- item->links[0] = 0;
- item->links[1] = list;
- if (list) list->links[0] = item;
- list = item;
-}
-
-//
-template <typename T>
-static inline void listremove(T* item, T*& list)
-{
- if (item->links[0])
- item->links[0]->links[1] = item->links[1];
- else
- list = item->links[1];
- if (item->links[1]) item->links[1]->links[0] = item->links[0];
-}
-
-//
-template <typename T>
-static inline int listcount(T* root)
-{
- int n = 0;
- while (root)
- {
- ++n;
- root = root->links[1];
- }
- return (n);
-}
-
-//
-template <typename T>
-static inline void clear(T& value)
-{
- static const struct ZeroDummy : T
- {
- } zerodummy;
- value = zerodummy;
-}
-
-//
-// Colliders
-//
-
-/* Tree collider */
-struct btDbvtTreeCollider : btDbvt::ICollide
-{
- btDbvtBroadphase* pbp;
- btDbvtProxy* proxy;
- btDbvtTreeCollider(btDbvtBroadphase* p) : pbp(p) {}
- void Process(const btDbvtNode* na, const btDbvtNode* nb)
- {
- if (na != nb)
- {
- btDbvtProxy* pa = (btDbvtProxy*)na->data;
- btDbvtProxy* pb = (btDbvtProxy*)nb->data;
-#if DBVT_BP_SORTPAIRS
- if (pa->m_uniqueId > pb->m_uniqueId)
- btSwap(pa, pb);
-#endif
- pbp->m_paircache->addOverlappingPair(pa, pb);
- ++pbp->m_newpairs;
- }
- }
- void Process(const btDbvtNode* n)
- {
- Process(n, proxy->leaf);
- }
-};
-
-//
-// btDbvtBroadphase
-//
-
-//
-btDbvtBroadphase::btDbvtBroadphase(btOverlappingPairCache* paircache)
-{
- m_deferedcollide = false;
- m_needcleanup = true;
- m_releasepaircache = (paircache != 0) ? false : true;
- m_prediction = 0;
- m_stageCurrent = 0;
- m_fixedleft = 0;
- m_fupdates = 1;
- m_dupdates = 0;
- m_cupdates = 10;
- m_newpairs = 1;
- m_updates_call = 0;
- m_updates_done = 0;
- m_updates_ratio = 0;
- m_paircache = paircache ? paircache : new (btAlignedAlloc(sizeof(btHashedOverlappingPairCache), 16)) btHashedOverlappingPairCache();
- m_gid = 0;
- m_pid = 0;
- m_cid = 0;
- for (int i = 0; i <= STAGECOUNT; ++i)
- {
- m_stageRoots[i] = 0;
- }
-#if BT_THREADSAFE
- m_rayTestStacks.resize(BT_MAX_THREAD_COUNT);
-#else
- m_rayTestStacks.resize(1);
-#endif
-#if DBVT_BP_PROFILE
- clear(m_profiling);
-#endif
-}
-
-//
-btDbvtBroadphase::~btDbvtBroadphase()
-{
- if (m_releasepaircache)
- {
- m_paircache->~btOverlappingPairCache();
- btAlignedFree(m_paircache);
- }
-}
-
-//
-btBroadphaseProxy* btDbvtBroadphase::createProxy(const btVector3& aabbMin,
- const btVector3& aabbMax,
- int /*shapeType*/,
- void* userPtr,
- int collisionFilterGroup,
- int collisionFilterMask,
- btDispatcher* /*dispatcher*/)
-{
- btDbvtProxy* proxy = new (btAlignedAlloc(sizeof(btDbvtProxy), 16)) btDbvtProxy(aabbMin, aabbMax, userPtr,
- collisionFilterGroup,
- collisionFilterMask);
-
- btDbvtAabbMm aabb = btDbvtVolume::FromMM(aabbMin, aabbMax);
-
- //bproxy->aabb = btDbvtVolume::FromMM(aabbMin,aabbMax);
- proxy->stage = m_stageCurrent;
- proxy->m_uniqueId = ++m_gid;
- proxy->leaf = m_sets[0].insert(aabb, proxy);
- listappend(proxy, m_stageRoots[m_stageCurrent]);
- if (!m_deferedcollide)
- {
- btDbvtTreeCollider collider(this);
- collider.proxy = proxy;
- m_sets[0].collideTV(m_sets[0].m_root, aabb, collider);
- m_sets[1].collideTV(m_sets[1].m_root, aabb, collider);
- }
- return (proxy);
-}
-
-//
-void btDbvtBroadphase::destroyProxy(btBroadphaseProxy* absproxy,
- btDispatcher* dispatcher)
-{
- btDbvtProxy* proxy = (btDbvtProxy*)absproxy;
- if (proxy->stage == STAGECOUNT)
- m_sets[1].remove(proxy->leaf);
- else
- m_sets[0].remove(proxy->leaf);
- listremove(proxy, m_stageRoots[proxy->stage]);
- m_paircache->removeOverlappingPairsContainingProxy(proxy, dispatcher);
- btAlignedFree(proxy);
- m_needcleanup = true;
-}
-
-void btDbvtBroadphase::getAabb(btBroadphaseProxy* absproxy, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btDbvtProxy* proxy = (btDbvtProxy*)absproxy;
- aabbMin = proxy->m_aabbMin;
- aabbMax = proxy->m_aabbMax;
-}
-
-struct BroadphaseRayTester : btDbvt::ICollide
-{
- btBroadphaseRayCallback& m_rayCallback;
- BroadphaseRayTester(btBroadphaseRayCallback& orgCallback)
- : m_rayCallback(orgCallback)
- {
- }
- void Process(const btDbvtNode* leaf)
- {
- btDbvtProxy* proxy = (btDbvtProxy*)leaf->data;
- m_rayCallback.process(proxy);
- }
-};
-
-void btDbvtBroadphase::rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin, const btVector3& aabbMax)
-{
- BroadphaseRayTester callback(rayCallback);
- btAlignedObjectArray<const btDbvtNode*>* stack = &m_rayTestStacks[0];
-#if BT_THREADSAFE
- // for this function to be threadsafe, each thread must have a separate copy
- // of this stack. This could be thread-local static to avoid dynamic allocations,
- // instead of just a local.
- int threadIndex = btGetCurrentThreadIndex();
- btAlignedObjectArray<const btDbvtNode*> localStack;
- //todo(erwincoumans, "why do we get tsan issue here?")
- if (0)//threadIndex < m_rayTestStacks.size())
- //if (threadIndex < m_rayTestStacks.size())
- {
- // use per-thread preallocated stack if possible to avoid dynamic allocations
- stack = &m_rayTestStacks[threadIndex];
- }
- else
- {
- stack = &localStack;
- }
-#endif
-
- m_sets[0].rayTestInternal(m_sets[0].m_root,
- rayFrom,
- rayTo,
- rayCallback.m_rayDirectionInverse,
- rayCallback.m_signs,
- rayCallback.m_lambda_max,
- aabbMin,
- aabbMax,
- *stack,
- callback);
-
- m_sets[1].rayTestInternal(m_sets[1].m_root,
- rayFrom,
- rayTo,
- rayCallback.m_rayDirectionInverse,
- rayCallback.m_signs,
- rayCallback.m_lambda_max,
- aabbMin,
- aabbMax,
- *stack,
- callback);
-}
-
-struct BroadphaseAabbTester : btDbvt::ICollide
-{
- btBroadphaseAabbCallback& m_aabbCallback;
- BroadphaseAabbTester(btBroadphaseAabbCallback& orgCallback)
- : m_aabbCallback(orgCallback)
- {
- }
- void Process(const btDbvtNode* leaf)
- {
- btDbvtProxy* proxy = (btDbvtProxy*)leaf->data;
- m_aabbCallback.process(proxy);
- }
-};
-
-void btDbvtBroadphase::aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& aabbCallback)
-{
- BroadphaseAabbTester callback(aabbCallback);
-
- const ATTRIBUTE_ALIGNED16(btDbvtVolume) bounds = btDbvtVolume::FromMM(aabbMin, aabbMax);
- //process all children, that overlap with the given AABB bounds
- m_sets[0].collideTV(m_sets[0].m_root, bounds, callback);
- m_sets[1].collideTV(m_sets[1].m_root, bounds, callback);
-}
-
-//
-void btDbvtBroadphase::setAabb(btBroadphaseProxy* absproxy,
- const btVector3& aabbMin,
- const btVector3& aabbMax,
- btDispatcher* /*dispatcher*/)
-{
- btDbvtProxy* proxy = (btDbvtProxy*)absproxy;
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- aabb = btDbvtVolume::FromMM(aabbMin, aabbMax);
-#if DBVT_BP_PREVENTFALSEUPDATE
- if (NotEqual(aabb, proxy->leaf->volume))
-#endif
- {
- bool docollide = false;
- if (proxy->stage == STAGECOUNT)
- { /* fixed -> dynamic set */
- m_sets[1].remove(proxy->leaf);
- proxy->leaf = m_sets[0].insert(aabb, proxy);
- docollide = true;
- }
- else
- { /* dynamic set */
- ++m_updates_call;
- if (Intersect(proxy->leaf->volume, aabb))
- { /* Moving */
-
- const btVector3 delta = aabbMin - proxy->m_aabbMin;
- btVector3 velocity(((proxy->m_aabbMax - proxy->m_aabbMin) / 2) * m_prediction);
- if (delta[0] < 0) velocity[0] = -velocity[0];
- if (delta[1] < 0) velocity[1] = -velocity[1];
- if (delta[2] < 0) velocity[2] = -velocity[2];
- if (
- m_sets[0].update(proxy->leaf, aabb, velocity, gDbvtMargin)
-
- )
- {
- ++m_updates_done;
- docollide = true;
- }
- }
- else
- { /* Teleporting */
- m_sets[0].update(proxy->leaf, aabb);
- ++m_updates_done;
- docollide = true;
- }
- }
- listremove(proxy, m_stageRoots[proxy->stage]);
- proxy->m_aabbMin = aabbMin;
- proxy->m_aabbMax = aabbMax;
- proxy->stage = m_stageCurrent;
- listappend(proxy, m_stageRoots[m_stageCurrent]);
- if (docollide)
- {
- m_needcleanup = true;
- if (!m_deferedcollide)
- {
- btDbvtTreeCollider collider(this);
- m_sets[1].collideTTpersistentStack(m_sets[1].m_root, proxy->leaf, collider);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, proxy->leaf, collider);
- }
- }
- }
-}
-
-//
-void btDbvtBroadphase::setAabbForceUpdate(btBroadphaseProxy* absproxy,
- const btVector3& aabbMin,
- const btVector3& aabbMax,
- btDispatcher* /*dispatcher*/)
-{
- btDbvtProxy* proxy = (btDbvtProxy*)absproxy;
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- aabb = btDbvtVolume::FromMM(aabbMin, aabbMax);
- bool docollide = false;
- if (proxy->stage == STAGECOUNT)
- { /* fixed -> dynamic set */
- m_sets[1].remove(proxy->leaf);
- proxy->leaf = m_sets[0].insert(aabb, proxy);
- docollide = true;
- }
- else
- { /* dynamic set */
- ++m_updates_call;
- /* Teleporting */
- m_sets[0].update(proxy->leaf, aabb);
- ++m_updates_done;
- docollide = true;
- }
- listremove(proxy, m_stageRoots[proxy->stage]);
- proxy->m_aabbMin = aabbMin;
- proxy->m_aabbMax = aabbMax;
- proxy->stage = m_stageCurrent;
- listappend(proxy, m_stageRoots[m_stageCurrent]);
- if (docollide)
- {
- m_needcleanup = true;
- if (!m_deferedcollide)
- {
- btDbvtTreeCollider collider(this);
- m_sets[1].collideTTpersistentStack(m_sets[1].m_root, proxy->leaf, collider);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, proxy->leaf, collider);
- }
- }
-}
-
-//
-void btDbvtBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
-{
- collide(dispatcher);
-#if DBVT_BP_PROFILE
- if (0 == (m_pid % DBVT_BP_PROFILING_RATE))
- {
- printf("fixed(%u) dynamics(%u) pairs(%u)\r\n", m_sets[1].m_leaves, m_sets[0].m_leaves, m_paircache->getNumOverlappingPairs());
- unsigned int total = m_profiling.m_total;
- if (total <= 0) total = 1;
- printf("ddcollide: %u%% (%uus)\r\n", (50 + m_profiling.m_ddcollide * 100) / total, m_profiling.m_ddcollide / DBVT_BP_PROFILING_RATE);
- printf("fdcollide: %u%% (%uus)\r\n", (50 + m_profiling.m_fdcollide * 100) / total, m_profiling.m_fdcollide / DBVT_BP_PROFILING_RATE);
- printf("cleanup: %u%% (%uus)\r\n", (50 + m_profiling.m_cleanup * 100) / total, m_profiling.m_cleanup / DBVT_BP_PROFILING_RATE);
- printf("total: %uus\r\n", total / DBVT_BP_PROFILING_RATE);
- const unsigned long sum = m_profiling.m_ddcollide +
- m_profiling.m_fdcollide +
- m_profiling.m_cleanup;
- printf("leaked: %u%% (%uus)\r\n", 100 - ((50 + sum * 100) / total), (total - sum) / DBVT_BP_PROFILING_RATE);
- printf("job counts: %u%%\r\n", (m_profiling.m_jobcount * 100) / ((m_sets[0].m_leaves + m_sets[1].m_leaves) * DBVT_BP_PROFILING_RATE));
- clear(m_profiling);
- m_clock.reset();
- }
-#endif
-
- performDeferredRemoval(dispatcher);
-}
-
-void btDbvtBroadphase::performDeferredRemoval(btDispatcher* dispatcher)
-{
- if (m_paircache->hasDeferredRemoval())
- {
- btBroadphasePairArray& overlappingPairArray = m_paircache->getOverlappingPairArray();
-
- //perform a sort, to find duplicates and to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(btBroadphasePairSortPredicate());
-
- int invalidPair = 0;
-
- int i;
-
- btBroadphasePair previousPair;
- previousPair.m_pProxy0 = 0;
- previousPair.m_pProxy1 = 0;
- previousPair.m_algorithm = 0;
-
- for (i = 0; i < overlappingPairArray.size(); i++)
- {
- btBroadphasePair& pair = overlappingPairArray[i];
-
- bool isDuplicate = (pair == previousPair);
-
- previousPair = pair;
-
- bool needsRemoval = false;
-
- if (!isDuplicate)
- {
- //important to perform AABB check that is consistent with the broadphase
- btDbvtProxy* pa = (btDbvtProxy*)pair.m_pProxy0;
- btDbvtProxy* pb = (btDbvtProxy*)pair.m_pProxy1;
- bool hasOverlap = Intersect(pa->leaf->volume, pb->leaf->volume);
-
- if (hasOverlap)
- {
- needsRemoval = false;
- }
- else
- {
- needsRemoval = true;
- }
- }
- else
- {
- //remove duplicate
- needsRemoval = true;
- //should have no algorithm
- btAssert(!pair.m_algorithm);
- }
-
- if (needsRemoval)
- {
- m_paircache->cleanOverlappingPair(pair, dispatcher);
-
- pair.m_pProxy0 = 0;
- pair.m_pProxy1 = 0;
- invalidPair++;
- }
- }
-
- //perform a sort, to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(btBroadphasePairSortPredicate());
- overlappingPairArray.resize(overlappingPairArray.size() - invalidPair);
- }
-}
-
-//
-void btDbvtBroadphase::collide(btDispatcher* dispatcher)
-{
- /*printf("---------------------------------------------------------\n");
- printf("m_sets[0].m_leaves=%d\n",m_sets[0].m_leaves);
- printf("m_sets[1].m_leaves=%d\n",m_sets[1].m_leaves);
- printf("numPairs = %d\n",getOverlappingPairCache()->getNumOverlappingPairs());
- {
- int i;
- for (i=0;i<getOverlappingPairCache()->getNumOverlappingPairs();i++)
- {
- printf("pair[%d]=(%d,%d),",i,getOverlappingPairCache()->getOverlappingPairArray()[i].m_pProxy0->getUid(),
- getOverlappingPairCache()->getOverlappingPairArray()[i].m_pProxy1->getUid());
- }
- printf("\n");
- }
-*/
-
- SPC(m_profiling.m_total);
- /* optimize */
- m_sets[0].optimizeIncremental(1 + (m_sets[0].m_leaves * m_dupdates) / 100);
- if (m_fixedleft)
- {
- const int count = 1 + (m_sets[1].m_leaves * m_fupdates) / 100;
- m_sets[1].optimizeIncremental(1 + (m_sets[1].m_leaves * m_fupdates) / 100);
- m_fixedleft = btMax<int>(0, m_fixedleft - count);
- }
- /* dynamic -> fixed set */
- m_stageCurrent = (m_stageCurrent + 1) % STAGECOUNT;
- btDbvtProxy* current = m_stageRoots[m_stageCurrent];
- if (current)
- {
-#if DBVT_BP_ACCURATESLEEPING
- btDbvtTreeCollider collider(this);
-#endif
- do
- {
- btDbvtProxy* next = current->links[1];
- listremove(current, m_stageRoots[current->stage]);
- listappend(current, m_stageRoots[STAGECOUNT]);
-#if DBVT_BP_ACCURATESLEEPING
- m_paircache->removeOverlappingPairsContainingProxy(current, dispatcher);
- collider.proxy = current;
- btDbvt::collideTV(m_sets[0].m_root, current->aabb, collider);
- btDbvt::collideTV(m_sets[1].m_root, current->aabb, collider);
-#endif
- m_sets[0].remove(current->leaf);
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- curAabb = btDbvtVolume::FromMM(current->m_aabbMin, current->m_aabbMax);
- current->leaf = m_sets[1].insert(curAabb, current);
- current->stage = STAGECOUNT;
- current = next;
- } while (current);
- m_fixedleft = m_sets[1].m_leaves;
- m_needcleanup = true;
- }
- /* collide dynamics */
- {
- btDbvtTreeCollider collider(this);
- if (m_deferedcollide)
- {
- SPC(m_profiling.m_fdcollide);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, m_sets[1].m_root, collider);
- }
- if (m_deferedcollide)
- {
- SPC(m_profiling.m_ddcollide);
- m_sets[0].collideTTpersistentStack(m_sets[0].m_root, m_sets[0].m_root, collider);
- }
- }
- /* clean up */
- if (m_needcleanup)
- {
- SPC(m_profiling.m_cleanup);
- btBroadphasePairArray& pairs = m_paircache->getOverlappingPairArray();
- if (pairs.size() > 0)
- {
- int ni = btMin(pairs.size(), btMax<int>(m_newpairs, (pairs.size() * m_cupdates) / 100));
- for (int i = 0; i < ni; ++i)
- {
- btBroadphasePair& p = pairs[(m_cid + i) % pairs.size()];
- btDbvtProxy* pa = (btDbvtProxy*)p.m_pProxy0;
- btDbvtProxy* pb = (btDbvtProxy*)p.m_pProxy1;
- if (!Intersect(pa->leaf->volume, pb->leaf->volume))
- {
-#if DBVT_BP_SORTPAIRS
- if (pa->m_uniqueId > pb->m_uniqueId)
- btSwap(pa, pb);
-#endif
- m_paircache->removeOverlappingPair(pa, pb, dispatcher);
- --ni;
- --i;
- }
- }
- if (pairs.size() > 0)
- m_cid = (m_cid + ni) % pairs.size();
- else
- m_cid = 0;
- }
- }
- ++m_pid;
- m_newpairs = 1;
- m_needcleanup = false;
- if (m_updates_call > 0)
- {
- m_updates_ratio = m_updates_done / (btScalar)m_updates_call;
- }
- else
- {
- m_updates_ratio = 0;
- }
- m_updates_done /= 2;
- m_updates_call /= 2;
-}
-
-//
-void btDbvtBroadphase::optimize()
-{
- m_sets[0].optimizeTopDown();
- m_sets[1].optimizeTopDown();
-}
-
-//
-btOverlappingPairCache* btDbvtBroadphase::getOverlappingPairCache()
-{
- return (m_paircache);
-}
-
-//
-const btOverlappingPairCache* btDbvtBroadphase::getOverlappingPairCache() const
-{
- return (m_paircache);
-}
-
-//
-void btDbvtBroadphase::getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const
-{
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- bounds;
-
- if (!m_sets[0].empty())
- if (!m_sets[1].empty())
- Merge(m_sets[0].m_root->volume,
- m_sets[1].m_root->volume, bounds);
- else
- bounds = m_sets[0].m_root->volume;
- else if (!m_sets[1].empty())
- bounds = m_sets[1].m_root->volume;
- else
- bounds = btDbvtVolume::FromCR(btVector3(0, 0, 0), 0);
- aabbMin = bounds.Mins();
- aabbMax = bounds.Maxs();
-}
-
-void btDbvtBroadphase::resetPool(btDispatcher* dispatcher)
-{
- int totalObjects = m_sets[0].m_leaves + m_sets[1].m_leaves;
- if (!totalObjects)
- {
- //reset internal dynamic tree data structures
- m_sets[0].clear();
- m_sets[1].clear();
-
- m_deferedcollide = false;
- m_needcleanup = true;
- m_stageCurrent = 0;
- m_fixedleft = 0;
- m_fupdates = 1;
- m_dupdates = 0;
- m_cupdates = 10;
- m_newpairs = 1;
- m_updates_call = 0;
- m_updates_done = 0;
- m_updates_ratio = 0;
-
- m_gid = 0;
- m_pid = 0;
- m_cid = 0;
- for (int i = 0; i <= STAGECOUNT; ++i)
- {
- m_stageRoots[i] = 0;
- }
- }
-}
-
-//
-void btDbvtBroadphase::printStats()
-{
-}
-
-//
-#if DBVT_BP_ENABLE_BENCHMARK
-
-struct btBroadphaseBenchmark
-{
- struct Experiment
- {
- const char* name;
- int object_count;
- int update_count;
- int spawn_count;
- int iterations;
- btScalar speed;
- btScalar amplitude;
- };
- struct Object
- {
- btVector3 center;
- btVector3 extents;
- btBroadphaseProxy* proxy;
- btScalar time;
- void update(btScalar speed, btScalar amplitude, btBroadphaseInterface* pbi)
- {
- time += speed;
- center[0] = btCos(time * (btScalar)2.17) * amplitude +
- btSin(time) * amplitude / 2;
- center[1] = btCos(time * (btScalar)1.38) * amplitude +
- btSin(time) * amplitude;
- center[2] = btSin(time * (btScalar)0.777) * amplitude;
- pbi->setAabb(proxy, center - extents, center + extents, 0);
- }
- };
- static int UnsignedRand(int range = RAND_MAX - 1) { return (rand() % (range + 1)); }
- static btScalar UnitRand() { return (UnsignedRand(16384) / (btScalar)16384); }
- static void OutputTime(const char* name, btClock& c, unsigned count = 0)
- {
- const unsigned long us = c.getTimeMicroseconds();
- const unsigned long ms = (us + 500) / 1000;
- const btScalar sec = us / (btScalar)(1000 * 1000);
- if (count > 0)
- printf("%s : %u us (%u ms), %.2f/s\r\n", name, us, ms, count / sec);
- else
- printf("%s : %u us (%u ms)\r\n", name, us, ms);
- }
-};
-
-void btDbvtBroadphase::benchmark(btBroadphaseInterface* pbi)
-{
- static const btBroadphaseBenchmark::Experiment experiments[] =
- {
- {"1024o.10%", 1024, 10, 0, 8192, (btScalar)0.005, (btScalar)100},
- /*{"4096o.10%",4096,10,0,8192,(btScalar)0.005,(btScalar)100},
- {"8192o.10%",8192,10,0,8192,(btScalar)0.005,(btScalar)100},*/
- };
- static const int nexperiments = sizeof(experiments) / sizeof(experiments[0]);
- btAlignedObjectArray<btBroadphaseBenchmark::Object*> objects;
- btClock wallclock;
- /* Begin */
- for (int iexp = 0; iexp < nexperiments; ++iexp)
- {
- const btBroadphaseBenchmark::Experiment& experiment = experiments[iexp];
- const int object_count = experiment.object_count;
- const int update_count = (object_count * experiment.update_count) / 100;
- const int spawn_count = (object_count * experiment.spawn_count) / 100;
- const btScalar speed = experiment.speed;
- const btScalar amplitude = experiment.amplitude;
- printf("Experiment #%u '%s':\r\n", iexp, experiment.name);
- printf("\tObjects: %u\r\n", object_count);
- printf("\tUpdate: %u\r\n", update_count);
- printf("\tSpawn: %u\r\n", spawn_count);
- printf("\tSpeed: %f\r\n", speed);
- printf("\tAmplitude: %f\r\n", amplitude);
- srand(180673);
- /* Create objects */
- wallclock.reset();
- objects.reserve(object_count);
- for (int i = 0; i < object_count; ++i)
- {
- btBroadphaseBenchmark::Object* po = new btBroadphaseBenchmark::Object();
- po->center[0] = btBroadphaseBenchmark::UnitRand() * 50;
- po->center[1] = btBroadphaseBenchmark::UnitRand() * 50;
- po->center[2] = btBroadphaseBenchmark::UnitRand() * 50;
- po->extents[0] = btBroadphaseBenchmark::UnitRand() * 2 + 2;
- po->extents[1] = btBroadphaseBenchmark::UnitRand() * 2 + 2;
- po->extents[2] = btBroadphaseBenchmark::UnitRand() * 2 + 2;
- po->time = btBroadphaseBenchmark::UnitRand() * 2000;
- po->proxy = pbi->createProxy(po->center - po->extents, po->center + po->extents, 0, po, 1, 1, 0, 0);
- objects.push_back(po);
- }
- btBroadphaseBenchmark::OutputTime("\tInitialization", wallclock);
- /* First update */
- wallclock.reset();
- for (int i = 0; i < objects.size(); ++i)
- {
- objects[i]->update(speed, amplitude, pbi);
- }
- btBroadphaseBenchmark::OutputTime("\tFirst update", wallclock);
- /* Updates */
- wallclock.reset();
- for (int i = 0; i < experiment.iterations; ++i)
- {
- for (int j = 0; j < update_count; ++j)
- {
- objects[j]->update(speed, amplitude, pbi);
- }
- pbi->calculateOverlappingPairs(0);
- }
- btBroadphaseBenchmark::OutputTime("\tUpdate", wallclock, experiment.iterations);
- /* Clean up */
- wallclock.reset();
- for (int i = 0; i < objects.size(); ++i)
- {
- pbi->destroyProxy(objects[i]->proxy, 0);
- delete objects[i];
- }
- objects.resize(0);
- btBroadphaseBenchmark::OutputTime("\tRelease", wallclock);
- }
-}
-#else
-void btDbvtBroadphase::benchmark(btBroadphaseInterface*)
-{
-}
-#endif
-
-#if DBVT_BP_PROFILE
-#undef SPC
-#endif
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h
deleted file mode 100644
index a71feef53b..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDbvtBroadphase.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///btDbvtBroadphase implementation by Nathanael Presson
-#ifndef BT_DBVT_BROADPHASE_H
-#define BT_DBVT_BROADPHASE_H
-
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
-
-//
-// Compile time config
-//
-
-#define DBVT_BP_PROFILE 0
-//#define DBVT_BP_SORTPAIRS 1
-#define DBVT_BP_PREVENTFALSEUPDATE 0
-#define DBVT_BP_ACCURATESLEEPING 0
-#define DBVT_BP_ENABLE_BENCHMARK 0
-//#define DBVT_BP_MARGIN (btScalar)0.05
-extern btScalar gDbvtMargin;
-
-#if DBVT_BP_PROFILE
-#define DBVT_BP_PROFILING_RATE 256
-#include "LinearMath/btQuickprof.h"
-#endif
-
-//
-// btDbvtProxy
-//
-struct btDbvtProxy : btBroadphaseProxy
-{
- /* Fields */
- //btDbvtAabbMm aabb;
- btDbvtNode* leaf;
- btDbvtProxy* links[2];
- int stage;
- /* ctor */
- btDbvtProxy(const btVector3& aabbMin, const btVector3& aabbMax, void* userPtr, int collisionFilterGroup, int collisionFilterMask) : btBroadphaseProxy(aabbMin, aabbMax, userPtr, collisionFilterGroup, collisionFilterMask)
- {
- links[0] = links[1] = 0;
- }
-};
-
-typedef btAlignedObjectArray<btDbvtProxy*> btDbvtProxyArray;
-
-///The btDbvtBroadphase implements a broadphase using two dynamic AABB bounding volume hierarchies/trees (see btDbvt).
-///One tree is used for static/non-moving objects, and another tree is used for dynamic objects. Objects can move from one tree to the other.
-///This is a very fast broadphase, especially for very dynamic worlds where many objects are moving. Its insert/add and remove of objects is generally faster than the sweep and prune broadphases btAxisSweep3 and bt32BitAxisSweep3.
-struct btDbvtBroadphase : btBroadphaseInterface
-{
- /* Config */
- enum
- {
- DYNAMIC_SET = 0, /* Dynamic set index */
- FIXED_SET = 1, /* Fixed set index */
- STAGECOUNT = 2 /* Number of stages */
- };
- /* Fields */
- btDbvt m_sets[2]; // Dbvt sets
- btDbvtProxy* m_stageRoots[STAGECOUNT + 1]; // Stages list
- btOverlappingPairCache* m_paircache; // Pair cache
- btScalar m_prediction; // Velocity prediction
- int m_stageCurrent; // Current stage
- int m_fupdates; // % of fixed updates per frame
- int m_dupdates; // % of dynamic updates per frame
- int m_cupdates; // % of cleanup updates per frame
- int m_newpairs; // Number of pairs created
- int m_fixedleft; // Fixed optimization left
- unsigned m_updates_call; // Number of updates call
- unsigned m_updates_done; // Number of updates done
- btScalar m_updates_ratio; // m_updates_done/m_updates_call
- int m_pid; // Parse id
- int m_cid; // Cleanup index
- int m_gid; // Gen id
- bool m_releasepaircache; // Release pair cache on delete
- bool m_deferedcollide; // Defere dynamic/static collision to collide call
- bool m_needcleanup; // Need to run cleanup?
- btAlignedObjectArray<btAlignedObjectArray<const btDbvtNode*> > m_rayTestStacks;
-#if DBVT_BP_PROFILE
- btClock m_clock;
- struct
- {
- unsigned long m_total;
- unsigned long m_ddcollide;
- unsigned long m_fdcollide;
- unsigned long m_cleanup;
- unsigned long m_jobcount;
- } m_profiling;
-#endif
- /* Methods */
- btDbvtBroadphase(btOverlappingPairCache* paircache = 0);
- ~btDbvtBroadphase();
- void collide(btDispatcher* dispatcher);
- void optimize();
-
- /* btBroadphaseInterface Implementation */
- btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher);
- virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher);
- virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher);
- virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0));
- virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback);
-
- virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const;
- virtual void calculateOverlappingPairs(btDispatcher* dispatcher);
- virtual btOverlappingPairCache* getOverlappingPairCache();
- virtual const btOverlappingPairCache* getOverlappingPairCache() const;
- virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const;
- virtual void printStats();
-
- ///reset broadphase internal structures, to ensure determinism/reproducability
- virtual void resetPool(btDispatcher* dispatcher);
-
- void performDeferredRemoval(btDispatcher* dispatcher);
-
- void setVelocityPrediction(btScalar prediction)
- {
- m_prediction = prediction;
- }
- btScalar getVelocityPrediction() const
- {
- return m_prediction;
- }
-
- ///this setAabbForceUpdate is similar to setAabb but always forces the aabb update.
- ///it is not part of the btBroadphaseInterface but specific to btDbvtBroadphase.
- ///it bypasses certain optimizations that prevent aabb updates (when the aabb shrinks), see
- ///http://code.google.com/p/bullet/issues/detail?id=223
- void setAabbForceUpdate(btBroadphaseProxy* absproxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* /*dispatcher*/);
-
- static void benchmark(btBroadphaseInterface*);
-};
-
-#endif
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.cpp
deleted file mode 100644
index d76d408aa6..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btDispatcher.h"
-
-btDispatcher::~btDispatcher()
-{
-}
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h
deleted file mode 100644
index b09b7d4d42..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btDispatcher.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_DISPATCHER_H
-#define BT_DISPATCHER_H
-#include "LinearMath/btScalar.h"
-
-class btCollisionAlgorithm;
-struct btBroadphaseProxy;
-class btRigidBody;
-class btCollisionObject;
-class btOverlappingPairCache;
-struct btCollisionObjectWrapper;
-
-class btPersistentManifold;
-class btPoolAllocator;
-
-struct btDispatcherInfo
-{
- enum DispatchFunc
- {
- DISPATCH_DISCRETE = 1,
- DISPATCH_CONTINUOUS
- };
- btDispatcherInfo()
- : m_timeStep(btScalar(0.)),
- m_stepCount(0),
- m_dispatchFunc(DISPATCH_DISCRETE),
- m_timeOfImpact(btScalar(1.)),
- m_useContinuous(true),
- m_debugDraw(0),
- m_enableSatConvex(false),
- m_enableSPU(true),
- m_useEpa(true),
- m_allowedCcdPenetration(btScalar(0.04)),
- m_useConvexConservativeDistanceUtil(false),
- m_convexConservativeDistanceThreshold(0.0f),
- m_deterministicOverlappingPairs(false)
- {
- }
- btScalar m_timeStep;
- int m_stepCount;
- int m_dispatchFunc;
- mutable btScalar m_timeOfImpact;
- bool m_useContinuous;
- class btIDebugDraw* m_debugDraw;
- bool m_enableSatConvex;
- bool m_enableSPU;
- bool m_useEpa;
- btScalar m_allowedCcdPenetration;
- bool m_useConvexConservativeDistanceUtil;
- btScalar m_convexConservativeDistanceThreshold;
- bool m_deterministicOverlappingPairs;
-};
-
-enum ebtDispatcherQueryType
-{
- BT_CONTACT_POINT_ALGORITHMS = 1,
- BT_CLOSEST_POINT_ALGORITHMS = 2
-};
-
-///The btDispatcher interface class can be used in combination with broadphase to dispatch calculations for overlapping pairs.
-///For example for pairwise collision detection, calculating contact points stored in btPersistentManifold or user callbacks (game logic).
-class btDispatcher
-{
-public:
- virtual ~btDispatcher();
-
- virtual btCollisionAlgorithm* findAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btPersistentManifold* sharedManifold, ebtDispatcherQueryType queryType) = 0;
-
- virtual btPersistentManifold* getNewManifold(const btCollisionObject* b0, const btCollisionObject* b1) = 0;
-
- virtual void releaseManifold(btPersistentManifold* manifold) = 0;
-
- virtual void clearManifold(btPersistentManifold* manifold) = 0;
-
- virtual bool needsCollision(const btCollisionObject* body0, const btCollisionObject* body1) = 0;
-
- virtual bool needsResponse(const btCollisionObject* body0, const btCollisionObject* body1) = 0;
-
- virtual void dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& dispatchInfo, btDispatcher* dispatcher) = 0;
-
- virtual int getNumManifolds() const = 0;
-
- virtual btPersistentManifold* getManifoldByIndexInternal(int index) = 0;
-
- virtual btPersistentManifold** getInternalManifoldPointer() = 0;
-
- virtual btPoolAllocator* getInternalManifoldPool() = 0;
-
- virtual const btPoolAllocator* getInternalManifoldPool() const = 0;
-
- virtual void* allocateCollisionAlgorithm(int size) = 0;
-
- virtual void freeCollisionAlgorithm(void* ptr) = 0;
-};
-
-#endif //BT_DISPATCHER_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp
deleted file mode 100644
index 8ce1087c9f..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp
+++ /dev/null
@@ -1,611 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btOverlappingPairCache.h"
-
-#include "btDispatcher.h"
-#include "btCollisionAlgorithm.h"
-#include "LinearMath/btAabbUtil2.h"
-
-#include <stdio.h>
-
-btHashedOverlappingPairCache::btHashedOverlappingPairCache() : m_overlapFilterCallback(0),
- m_ghostPairCallback(0)
-{
- int initialAllocatedSize = 2;
- m_overlappingPairArray.reserve(initialAllocatedSize);
- growTables();
-}
-
-btHashedOverlappingPairCache::~btHashedOverlappingPairCache()
-{
-}
-
-void btHashedOverlappingPairCache::cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher)
-{
- if (pair.m_algorithm && dispatcher)
- {
- {
- pair.m_algorithm->~btCollisionAlgorithm();
- dispatcher->freeCollisionAlgorithm(pair.m_algorithm);
- pair.m_algorithm = 0;
- }
- }
-}
-
-void btHashedOverlappingPairCache::cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher)
-{
- class CleanPairCallback : public btOverlapCallback
- {
- btBroadphaseProxy* m_cleanProxy;
- btOverlappingPairCache* m_pairCache;
- btDispatcher* m_dispatcher;
-
- public:
- CleanPairCallback(btBroadphaseProxy* cleanProxy, btOverlappingPairCache* pairCache, btDispatcher* dispatcher)
- : m_cleanProxy(cleanProxy),
- m_pairCache(pairCache),
- m_dispatcher(dispatcher)
- {
- }
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- if ((pair.m_pProxy0 == m_cleanProxy) ||
- (pair.m_pProxy1 == m_cleanProxy))
- {
- m_pairCache->cleanOverlappingPair(pair, m_dispatcher);
- }
- return false;
- }
- };
-
- CleanPairCallback cleanPairs(proxy, this, dispatcher);
-
- processAllOverlappingPairs(&cleanPairs, dispatcher);
-}
-
-void btHashedOverlappingPairCache::removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher)
-{
- class RemovePairCallback : public btOverlapCallback
- {
- btBroadphaseProxy* m_obsoleteProxy;
-
- public:
- RemovePairCallback(btBroadphaseProxy* obsoleteProxy)
- : m_obsoleteProxy(obsoleteProxy)
- {
- }
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- return ((pair.m_pProxy0 == m_obsoleteProxy) ||
- (pair.m_pProxy1 == m_obsoleteProxy));
- }
- };
-
- RemovePairCallback removeCallback(proxy);
-
- processAllOverlappingPairs(&removeCallback, dispatcher);
-}
-
-btBroadphasePair* btHashedOverlappingPairCache::findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
-{
- if (proxy0->m_uniqueId > proxy1->m_uniqueId)
- btSwap(proxy0, proxy1);
- int proxyId1 = proxy0->getUid();
- int proxyId2 = proxy1->getUid();
-
- /*if (proxyId1 > proxyId2)
- btSwap(proxyId1, proxyId2);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1));
-
- if (hash >= m_hashTable.size())
- {
- return NULL;
- }
-
- int index = m_hashTable[hash];
- while (index != BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false)
- {
- index = m_next[index];
- }
-
- if (index == BT_NULL_PAIR)
- {
- return NULL;
- }
-
- btAssert(index < m_overlappingPairArray.size());
-
- return &m_overlappingPairArray[index];
-}
-
-//#include <stdio.h>
-
-void btHashedOverlappingPairCache::growTables()
-{
- int newCapacity = m_overlappingPairArray.capacity();
-
- if (m_hashTable.size() < newCapacity)
- {
- //grow hashtable and next table
- int curHashtableSize = m_hashTable.size();
-
- m_hashTable.resize(newCapacity);
- m_next.resize(newCapacity);
-
- int i;
-
- for (i = 0; i < newCapacity; ++i)
- {
- m_hashTable[i] = BT_NULL_PAIR;
- }
- for (i = 0; i < newCapacity; ++i)
- {
- m_next[i] = BT_NULL_PAIR;
- }
-
- for (i = 0; i < curHashtableSize; i++)
- {
- const btBroadphasePair& pair = m_overlappingPairArray[i];
- int proxyId1 = pair.m_pProxy0->getUid();
- int proxyId2 = pair.m_pProxy1->getUid();
- /*if (proxyId1 > proxyId2)
- btSwap(proxyId1, proxyId2);*/
- int hashValue = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1)); // New hash value with new mask
- m_next[i] = m_hashTable[hashValue];
- m_hashTable[hashValue] = i;
- }
- }
-}
-
-btBroadphasePair* btHashedOverlappingPairCache::internalAddPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
-{
- if (proxy0->m_uniqueId > proxy1->m_uniqueId)
- btSwap(proxy0, proxy1);
- int proxyId1 = proxy0->getUid();
- int proxyId2 = proxy1->getUid();
-
- /*if (proxyId1 > proxyId2)
- btSwap(proxyId1, proxyId2);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1)); // New hash value with new mask
-
- btBroadphasePair* pair = internalFindPair(proxy0, proxy1, hash);
- if (pair != NULL)
- {
- return pair;
- }
- /*for(int i=0;i<m_overlappingPairArray.size();++i)
- {
- if( (m_overlappingPairArray[i].m_pProxy0==proxy0)&&
- (m_overlappingPairArray[i].m_pProxy1==proxy1))
- {
- printf("Adding duplicated %u<>%u\r\n",proxyId1,proxyId2);
- internalFindPair(proxy0, proxy1, hash);
- }
- }*/
- int count = m_overlappingPairArray.size();
- int oldCapacity = m_overlappingPairArray.capacity();
- void* mem = &m_overlappingPairArray.expandNonInitializing();
-
- //this is where we add an actual pair, so also call the 'ghost'
- if (m_ghostPairCallback)
- m_ghostPairCallback->addOverlappingPair(proxy0, proxy1);
-
- int newCapacity = m_overlappingPairArray.capacity();
-
- if (oldCapacity < newCapacity)
- {
- growTables();
- //hash with new capacity
- hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1));
- }
-
- pair = new (mem) btBroadphasePair(*proxy0, *proxy1);
- // pair->m_pProxy0 = proxy0;
- // pair->m_pProxy1 = proxy1;
- pair->m_algorithm = 0;
- pair->m_internalTmpValue = 0;
-
- m_next[count] = m_hashTable[hash];
- m_hashTable[hash] = count;
-
- return pair;
-}
-
-void* btHashedOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher)
-{
- if (proxy0->m_uniqueId > proxy1->m_uniqueId)
- btSwap(proxy0, proxy1);
- int proxyId1 = proxy0->getUid();
- int proxyId2 = proxy1->getUid();
-
- /*if (proxyId1 > proxyId2)
- btSwap(proxyId1, proxyId2);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(proxyId1), static_cast<unsigned int>(proxyId2)) & (m_overlappingPairArray.capacity() - 1));
-
- btBroadphasePair* pair = internalFindPair(proxy0, proxy1, hash);
- if (pair == NULL)
- {
- return 0;
- }
-
- cleanOverlappingPair(*pair, dispatcher);
-
- void* userData = pair->m_internalInfo1;
-
- btAssert(pair->m_pProxy0->getUid() == proxyId1);
- btAssert(pair->m_pProxy1->getUid() == proxyId2);
-
- int pairIndex = int(pair - &m_overlappingPairArray[0]);
- btAssert(pairIndex < m_overlappingPairArray.size());
-
- // Remove the pair from the hash table.
- int index = m_hashTable[hash];
- btAssert(index != BT_NULL_PAIR);
-
- int previous = BT_NULL_PAIR;
- while (index != pairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != BT_NULL_PAIR)
- {
- btAssert(m_next[previous] == pairIndex);
- m_next[previous] = m_next[pairIndex];
- }
- else
- {
- m_hashTable[hash] = m_next[pairIndex];
- }
-
- // We now move the last pair into spot of the
- // pair being removed. We need to fix the hash
- // table indices to support the move.
-
- int lastPairIndex = m_overlappingPairArray.size() - 1;
-
- if (m_ghostPairCallback)
- m_ghostPairCallback->removeOverlappingPair(proxy0, proxy1, dispatcher);
-
- // If the removed pair is the last pair, we are done.
- if (lastPairIndex == pairIndex)
- {
- m_overlappingPairArray.pop_back();
- return userData;
- }
-
- // Remove the last pair from the hash table.
- const btBroadphasePair* last = &m_overlappingPairArray[lastPairIndex];
- /* missing swap here too, Nat. */
- int lastHash = static_cast<int>(getHash(static_cast<unsigned int>(last->m_pProxy0->getUid()), static_cast<unsigned int>(last->m_pProxy1->getUid())) & (m_overlappingPairArray.capacity() - 1));
-
- index = m_hashTable[lastHash];
- btAssert(index != BT_NULL_PAIR);
-
- previous = BT_NULL_PAIR;
- while (index != lastPairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != BT_NULL_PAIR)
- {
- btAssert(m_next[previous] == lastPairIndex);
- m_next[previous] = m_next[lastPairIndex];
- }
- else
- {
- m_hashTable[lastHash] = m_next[lastPairIndex];
- }
-
- // Copy the last pair into the remove pair's spot.
- m_overlappingPairArray[pairIndex] = m_overlappingPairArray[lastPairIndex];
-
- // Insert the last pair into the hash table
- m_next[pairIndex] = m_hashTable[lastHash];
- m_hashTable[lastHash] = pairIndex;
-
- m_overlappingPairArray.pop_back();
-
- return userData;
-}
-//#include <stdio.h>
-#include "LinearMath/btQuickprof.h"
-void btHashedOverlappingPairCache::processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher)
-{
- BT_PROFILE("btHashedOverlappingPairCache::processAllOverlappingPairs");
- int i;
-
- // printf("m_overlappingPairArray.size()=%d\n",m_overlappingPairArray.size());
- for (i = 0; i < m_overlappingPairArray.size();)
- {
- btBroadphasePair* pair = &m_overlappingPairArray[i];
- if (callback->processOverlap(*pair))
- {
- removeOverlappingPair(pair->m_pProxy0, pair->m_pProxy1, dispatcher);
- }
- else
- {
- i++;
- }
- }
-}
-
-struct MyPairIndex
-{
- int m_orgIndex;
- int m_uidA0;
- int m_uidA1;
-};
-
-class MyPairIndeSortPredicate
-{
-public:
- bool operator()(const MyPairIndex& a, const MyPairIndex& b) const
- {
- const int uidA0 = a.m_uidA0;
- const int uidB0 = b.m_uidA0;
- const int uidA1 = a.m_uidA1;
- const int uidB1 = b.m_uidA1;
- return uidA0 > uidB0 || (uidA0 == uidB0 && uidA1 > uidB1);
- }
-};
-
-void btHashedOverlappingPairCache::processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher, const struct btDispatcherInfo& dispatchInfo)
-{
- if (dispatchInfo.m_deterministicOverlappingPairs)
- {
- btBroadphasePairArray& pa = getOverlappingPairArray();
- btAlignedObjectArray<MyPairIndex> indices;
- {
- BT_PROFILE("sortOverlappingPairs");
- indices.resize(pa.size());
- for (int i = 0; i < indices.size(); i++)
- {
- const btBroadphasePair& p = pa[i];
- const int uidA0 = p.m_pProxy0 ? p.m_pProxy0->m_uniqueId : -1;
- const int uidA1 = p.m_pProxy1 ? p.m_pProxy1->m_uniqueId : -1;
-
- indices[i].m_uidA0 = uidA0;
- indices[i].m_uidA1 = uidA1;
- indices[i].m_orgIndex = i;
- }
- indices.quickSort(MyPairIndeSortPredicate());
- }
- {
- BT_PROFILE("btHashedOverlappingPairCache::processAllOverlappingPairs");
- int i;
- for (i = 0; i < indices.size();)
- {
- btBroadphasePair* pair = &pa[indices[i].m_orgIndex];
- if (callback->processOverlap(*pair))
- {
- removeOverlappingPair(pair->m_pProxy0, pair->m_pProxy1, dispatcher);
- }
- else
- {
- i++;
- }
- }
- }
- }
- else
- {
- processAllOverlappingPairs(callback, dispatcher);
- }
-}
-
-void btHashedOverlappingPairCache::sortOverlappingPairs(btDispatcher* dispatcher)
-{
- ///need to keep hashmap in sync with pair address, so rebuild all
- btBroadphasePairArray tmpPairs;
- int i;
- for (i = 0; i < m_overlappingPairArray.size(); i++)
- {
- tmpPairs.push_back(m_overlappingPairArray[i]);
- }
-
- for (i = 0; i < tmpPairs.size(); i++)
- {
- removeOverlappingPair(tmpPairs[i].m_pProxy0, tmpPairs[i].m_pProxy1, dispatcher);
- }
-
- for (i = 0; i < m_next.size(); i++)
- {
- m_next[i] = BT_NULL_PAIR;
- }
-
- tmpPairs.quickSort(btBroadphasePairSortPredicate());
-
- for (i = 0; i < tmpPairs.size(); i++)
- {
- addOverlappingPair(tmpPairs[i].m_pProxy0, tmpPairs[i].m_pProxy1);
- }
-}
-
-void* btSortedOverlappingPairCache::removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher)
-{
- if (!hasDeferredRemoval())
- {
- btBroadphasePair findPair(*proxy0, *proxy1);
-
- int findIndex = m_overlappingPairArray.findLinearSearch(findPair);
- if (findIndex < m_overlappingPairArray.size())
- {
- btBroadphasePair& pair = m_overlappingPairArray[findIndex];
- void* userData = pair.m_internalInfo1;
- cleanOverlappingPair(pair, dispatcher);
- if (m_ghostPairCallback)
- m_ghostPairCallback->removeOverlappingPair(proxy0, proxy1, dispatcher);
-
- m_overlappingPairArray.swap(findIndex, m_overlappingPairArray.capacity() - 1);
- m_overlappingPairArray.pop_back();
- return userData;
- }
- }
-
- return 0;
-}
-
-btBroadphasePair* btSortedOverlappingPairCache::addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
-{
- //don't add overlap with own
- btAssert(proxy0 != proxy1);
-
- if (!needsBroadphaseCollision(proxy0, proxy1))
- return 0;
-
- void* mem = &m_overlappingPairArray.expandNonInitializing();
- btBroadphasePair* pair = new (mem) btBroadphasePair(*proxy0, *proxy1);
-
- if (m_ghostPairCallback)
- m_ghostPairCallback->addOverlappingPair(proxy0, proxy1);
- return pair;
-}
-
-///this findPair becomes really slow. Either sort the list to speedup the query, or
-///use a different solution. It is mainly used for Removing overlapping pairs. Removal could be delayed.
-///we could keep a linked list in each proxy, and store pair in one of the proxies (with lowest memory address)
-///Also we can use a 2D bitmap, which can be useful for a future GPU implementation
-btBroadphasePair* btSortedOverlappingPairCache::findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
-{
- if (!needsBroadphaseCollision(proxy0, proxy1))
- return 0;
-
- btBroadphasePair tmpPair(*proxy0, *proxy1);
- int findIndex = m_overlappingPairArray.findLinearSearch(tmpPair);
-
- if (findIndex < m_overlappingPairArray.size())
- {
- //btAssert(it != m_overlappingPairSet.end());
- btBroadphasePair* pair = &m_overlappingPairArray[findIndex];
- return pair;
- }
- return 0;
-}
-
-//#include <stdio.h>
-
-void btSortedOverlappingPairCache::processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher)
-{
- int i;
-
- for (i = 0; i < m_overlappingPairArray.size();)
- {
- btBroadphasePair* pair = &m_overlappingPairArray[i];
- if (callback->processOverlap(*pair))
- {
- cleanOverlappingPair(*pair, dispatcher);
- pair->m_pProxy0 = 0;
- pair->m_pProxy1 = 0;
- m_overlappingPairArray.swap(i, m_overlappingPairArray.size() - 1);
- m_overlappingPairArray.pop_back();
- }
- else
- {
- i++;
- }
- }
-}
-
-btSortedOverlappingPairCache::btSortedOverlappingPairCache() : m_blockedForChanges(false),
- m_hasDeferredRemoval(true),
- m_overlapFilterCallback(0),
- m_ghostPairCallback(0)
-{
- int initialAllocatedSize = 2;
- m_overlappingPairArray.reserve(initialAllocatedSize);
-}
-
-btSortedOverlappingPairCache::~btSortedOverlappingPairCache()
-{
-}
-
-void btSortedOverlappingPairCache::cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher)
-{
- if (pair.m_algorithm)
- {
- {
- pair.m_algorithm->~btCollisionAlgorithm();
- dispatcher->freeCollisionAlgorithm(pair.m_algorithm);
- pair.m_algorithm = 0;
- }
- }
-}
-
-void btSortedOverlappingPairCache::cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher)
-{
- class CleanPairCallback : public btOverlapCallback
- {
- btBroadphaseProxy* m_cleanProxy;
- btOverlappingPairCache* m_pairCache;
- btDispatcher* m_dispatcher;
-
- public:
- CleanPairCallback(btBroadphaseProxy* cleanProxy, btOverlappingPairCache* pairCache, btDispatcher* dispatcher)
- : m_cleanProxy(cleanProxy),
- m_pairCache(pairCache),
- m_dispatcher(dispatcher)
- {
- }
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- if ((pair.m_pProxy0 == m_cleanProxy) ||
- (pair.m_pProxy1 == m_cleanProxy))
- {
- m_pairCache->cleanOverlappingPair(pair, m_dispatcher);
- }
- return false;
- }
- };
-
- CleanPairCallback cleanPairs(proxy, this, dispatcher);
-
- processAllOverlappingPairs(&cleanPairs, dispatcher);
-}
-
-void btSortedOverlappingPairCache::removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher)
-{
- class RemovePairCallback : public btOverlapCallback
- {
- btBroadphaseProxy* m_obsoleteProxy;
-
- public:
- RemovePairCallback(btBroadphaseProxy* obsoleteProxy)
- : m_obsoleteProxy(obsoleteProxy)
- {
- }
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- return ((pair.m_pProxy0 == m_obsoleteProxy) ||
- (pair.m_pProxy1 == m_obsoleteProxy));
- }
- };
-
- RemovePairCallback removeCallback(proxy);
-
- processAllOverlappingPairs(&removeCallback, dispatcher);
-}
-
-void btSortedOverlappingPairCache::sortOverlappingPairs(btDispatcher* dispatcher)
-{
- //should already be sorted
-}
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h
deleted file mode 100644
index 56011899cb..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCache.h
+++ /dev/null
@@ -1,434 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_OVERLAPPING_PAIR_CACHE_H
-#define BT_OVERLAPPING_PAIR_CACHE_H
-
-#include "btBroadphaseInterface.h"
-#include "btBroadphaseProxy.h"
-#include "btOverlappingPairCallback.h"
-
-#include "LinearMath/btAlignedObjectArray.h"
-class btDispatcher;
-
-typedef btAlignedObjectArray<btBroadphasePair> btBroadphasePairArray;
-
-struct btOverlapCallback
-{
- virtual ~btOverlapCallback()
- {
- }
- //return true for deletion of the pair
- virtual bool processOverlap(btBroadphasePair& pair) = 0;
-};
-
-struct btOverlapFilterCallback
-{
- virtual ~btOverlapFilterCallback()
- {
- }
- // return true when pairs need collision
- virtual bool needBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) const = 0;
-};
-
-const int BT_NULL_PAIR = 0xffffffff;
-
-///The btOverlappingPairCache provides an interface for overlapping pair management (add, remove, storage), used by the btBroadphaseInterface broadphases.
-///The btHashedOverlappingPairCache and btSortedOverlappingPairCache classes are two implementations.
-class btOverlappingPairCache : public btOverlappingPairCallback
-{
-public:
- virtual ~btOverlappingPairCache() {} // this is needed so we can get to the derived class destructor
-
- virtual btBroadphasePair* getOverlappingPairArrayPtr() = 0;
-
- virtual const btBroadphasePair* getOverlappingPairArrayPtr() const = 0;
-
- virtual btBroadphasePairArray& getOverlappingPairArray() = 0;
-
- virtual void cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher) = 0;
-
- virtual int getNumOverlappingPairs() const = 0;
- virtual bool needsBroadphaseCollision(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1) const = 0;
- virtual btOverlapFilterCallback* getOverlapFilterCallback() = 0;
- virtual void cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher) = 0;
-
- virtual void setOverlapFilterCallback(btOverlapFilterCallback* callback) = 0;
-
- virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher* dispatcher) = 0;
-
- virtual void processAllOverlappingPairs(btOverlapCallback* callback, btDispatcher* dispatcher, const struct btDispatcherInfo& /*dispatchInfo*/)
- {
- processAllOverlappingPairs(callback, dispatcher);
- }
- virtual btBroadphasePair* findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) = 0;
-
- virtual bool hasDeferredRemoval() = 0;
-
- virtual void setInternalGhostPairCallback(btOverlappingPairCallback* ghostPairCallback) = 0;
-
- virtual void sortOverlappingPairs(btDispatcher* dispatcher) = 0;
-};
-
-/// Hash-space based Pair Cache, thanks to Erin Catto, Box2D, http://www.box2d.org, and Pierre Terdiman, Codercorner, http://codercorner.com
-
-ATTRIBUTE_ALIGNED16(class)
-btHashedOverlappingPairCache : public btOverlappingPairCache
-{
- btBroadphasePairArray m_overlappingPairArray;
- btOverlapFilterCallback* m_overlapFilterCallback;
-
-protected:
- btAlignedObjectArray<int> m_hashTable;
- btAlignedObjectArray<int> m_next;
- btOverlappingPairCallback* m_ghostPairCallback;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btHashedOverlappingPairCache();
- virtual ~btHashedOverlappingPairCache();
-
- void removeOverlappingPairsContainingProxy(btBroadphaseProxy * proxy, btDispatcher * dispatcher);
-
- virtual void* removeOverlappingPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1, btDispatcher * dispatcher);
-
- SIMD_FORCE_INLINE bool needsBroadphaseCollision(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1) const
- {
- if (m_overlapFilterCallback)
- return m_overlapFilterCallback->needBroadphaseCollision(proxy0, proxy1);
-
- bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
- collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
-
- return collides;
- }
-
- // Add a pair and return the new pair. If the pair already exists,
- // no new pair is created and the old one is returned.
- virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1)
- {
- if (!needsBroadphaseCollision(proxy0, proxy1))
- return 0;
-
- return internalAddPair(proxy0, proxy1);
- }
-
- void cleanProxyFromPairs(btBroadphaseProxy * proxy, btDispatcher * dispatcher);
-
- virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher * dispatcher);
-
- virtual void processAllOverlappingPairs(btOverlapCallback * callback, btDispatcher * dispatcher, const struct btDispatcherInfo& dispatchInfo);
-
- virtual btBroadphasePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
-
- const btBroadphasePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
-
- btBroadphasePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- const btBroadphasePairArray& getOverlappingPairArray() const
- {
- return m_overlappingPairArray;
- }
-
- void cleanOverlappingPair(btBroadphasePair & pair, btDispatcher * dispatcher);
-
- btBroadphasePair* findPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1);
-
- int GetCount() const { return m_overlappingPairArray.size(); }
- // btBroadphasePair* GetPairs() { return m_pairs; }
-
- btOverlapFilterCallback* getOverlapFilterCallback()
- {
- return m_overlapFilterCallback;
- }
-
- void setOverlapFilterCallback(btOverlapFilterCallback * callback)
- {
- m_overlapFilterCallback = callback;
- }
-
- int getNumOverlappingPairs() const
- {
- return m_overlappingPairArray.size();
- }
-
-private:
- btBroadphasePair* internalAddPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1);
-
- void growTables();
-
- SIMD_FORCE_INLINE bool equalsPair(const btBroadphasePair& pair, int proxyId1, int proxyId2)
- {
- return pair.m_pProxy0->getUid() == proxyId1 && pair.m_pProxy1->getUid() == proxyId2;
- }
-
- /*
- // Thomas Wang's hash, see: http://www.concentric.net/~Ttwang/tech/inthash.htm
- // This assumes proxyId1 and proxyId2 are 16-bit.
- SIMD_FORCE_INLINE int getHash(int proxyId1, int proxyId2)
- {
- int key = (proxyId2 << 16) | proxyId1;
- key = ~key + (key << 15);
- key = key ^ (key >> 12);
- key = key + (key << 2);
- key = key ^ (key >> 4);
- key = key * 2057;
- key = key ^ (key >> 16);
- return key;
- }
- */
-
- SIMD_FORCE_INLINE unsigned int getHash(unsigned int proxyId1, unsigned int proxyId2)
- {
- unsigned int key = proxyId1 | (proxyId2 << 16);
- // Thomas Wang's hash
-
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-
- SIMD_FORCE_INLINE btBroadphasePair* internalFindPair(btBroadphaseProxy * proxy0, btBroadphaseProxy * proxy1, int hash)
- {
- int proxyId1 = proxy0->getUid();
- int proxyId2 = proxy1->getUid();
-#if 0 // wrong, 'equalsPair' use unsorted uids, copy-past devil striked again. Nat.
- if (proxyId1 > proxyId2)
- btSwap(proxyId1, proxyId2);
-#endif
-
- int index = m_hashTable[hash];
-
- while (index != BT_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyId1, proxyId2) == false)
- {
- index = m_next[index];
- }
-
- if (index == BT_NULL_PAIR)
- {
- return NULL;
- }
-
- btAssert(index < m_overlappingPairArray.size());
-
- return &m_overlappingPairArray[index];
- }
-
- virtual bool hasDeferredRemoval()
- {
- return false;
- }
-
- virtual void setInternalGhostPairCallback(btOverlappingPairCallback * ghostPairCallback)
- {
- m_ghostPairCallback = ghostPairCallback;
- }
-
- virtual void sortOverlappingPairs(btDispatcher * dispatcher);
-};
-
-///btSortedOverlappingPairCache maintains the objects with overlapping AABB
-///Typically managed by the Broadphase, Axis3Sweep or btSimpleBroadphase
-class btSortedOverlappingPairCache : public btOverlappingPairCache
-{
-protected:
- //avoid brute-force finding all the time
- btBroadphasePairArray m_overlappingPairArray;
-
- //during the dispatch, check that user doesn't destroy/create proxy
- bool m_blockedForChanges;
-
- ///by default, do the removal during the pair traversal
- bool m_hasDeferredRemoval;
-
- //if set, use the callback instead of the built in filter in needBroadphaseCollision
- btOverlapFilterCallback* m_overlapFilterCallback;
-
- btOverlappingPairCallback* m_ghostPairCallback;
-
-public:
- btSortedOverlappingPairCache();
- virtual ~btSortedOverlappingPairCache();
-
- virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher* dispatcher);
-
- void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher);
-
- void cleanOverlappingPair(btBroadphasePair& pair, btDispatcher* dispatcher);
-
- btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1);
-
- btBroadphasePair* findPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1);
-
- void cleanProxyFromPairs(btBroadphaseProxy* proxy, btDispatcher* dispatcher);
-
- void removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher);
-
- inline bool needsBroadphaseCollision(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) const
- {
- if (m_overlapFilterCallback)
- return m_overlapFilterCallback->needBroadphaseCollision(proxy0, proxy1);
-
- bool collides = (proxy0->m_collisionFilterGroup & proxy1->m_collisionFilterMask) != 0;
- collides = collides && (proxy1->m_collisionFilterGroup & proxy0->m_collisionFilterMask);
-
- return collides;
- }
-
- btBroadphasePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- const btBroadphasePairArray& getOverlappingPairArray() const
- {
- return m_overlappingPairArray;
- }
-
- btBroadphasePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
-
- const btBroadphasePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
-
- int getNumOverlappingPairs() const
- {
- return m_overlappingPairArray.size();
- }
-
- btOverlapFilterCallback* getOverlapFilterCallback()
- {
- return m_overlapFilterCallback;
- }
-
- void setOverlapFilterCallback(btOverlapFilterCallback* callback)
- {
- m_overlapFilterCallback = callback;
- }
-
- virtual bool hasDeferredRemoval()
- {
- return m_hasDeferredRemoval;
- }
-
- virtual void setInternalGhostPairCallback(btOverlappingPairCallback* ghostPairCallback)
- {
- m_ghostPairCallback = ghostPairCallback;
- }
-
- virtual void sortOverlappingPairs(btDispatcher* dispatcher);
-};
-
-///btNullPairCache skips add/removal of overlapping pairs. Userful for benchmarking and unit testing.
-class btNullPairCache : public btOverlappingPairCache
-{
- btBroadphasePairArray m_overlappingPairArray;
-
-public:
- virtual btBroadphasePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
- const btBroadphasePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
- btBroadphasePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- virtual void cleanOverlappingPair(btBroadphasePair& /*pair*/, btDispatcher* /*dispatcher*/)
- {
- }
-
- virtual int getNumOverlappingPairs() const
- {
- return 0;
- }
-
- virtual void cleanProxyFromPairs(btBroadphaseProxy* /*proxy*/, btDispatcher* /*dispatcher*/)
- {
- }
-
- bool needsBroadphaseCollision(btBroadphaseProxy*, btBroadphaseProxy*) const
- {
- return true;
- }
- btOverlapFilterCallback* getOverlapFilterCallback()
- {
- return 0;
- }
- virtual void setOverlapFilterCallback(btOverlapFilterCallback* /*callback*/)
- {
- }
-
- virtual void processAllOverlappingPairs(btOverlapCallback*, btDispatcher* /*dispatcher*/)
- {
- }
-
- virtual btBroadphasePair* findPair(btBroadphaseProxy* /*proxy0*/, btBroadphaseProxy* /*proxy1*/)
- {
- return 0;
- }
-
- virtual bool hasDeferredRemoval()
- {
- return true;
- }
-
- virtual void setInternalGhostPairCallback(btOverlappingPairCallback* /* ghostPairCallback */)
- {
- }
-
- virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* /*proxy0*/, btBroadphaseProxy* /*proxy1*/)
- {
- return 0;
- }
-
- virtual void* removeOverlappingPair(btBroadphaseProxy* /*proxy0*/, btBroadphaseProxy* /*proxy1*/, btDispatcher* /*dispatcher*/)
- {
- return 0;
- }
-
- virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy* /*proxy0*/, btDispatcher* /*dispatcher*/)
- {
- }
-
- virtual void sortOverlappingPairs(btDispatcher* dispatcher)
- {
- (void)dispatcher;
- }
-};
-
-#endif //BT_OVERLAPPING_PAIR_CACHE_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h
deleted file mode 100644
index d16c72542f..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h
+++ /dev/null
@@ -1,41 +0,0 @@
-
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef OVERLAPPING_PAIR_CALLBACK_H
-#define OVERLAPPING_PAIR_CALLBACK_H
-
-class btDispatcher;
-struct btBroadphasePair;
-
-///The btOverlappingPairCallback class is an additional optional broadphase user callback for adding/removing overlapping pairs, similar interface to btOverlappingPairCache.
-class btOverlappingPairCallback
-{
-protected:
- btOverlappingPairCallback() {}
-
-public:
- virtual ~btOverlappingPairCallback()
- {
- }
-
- virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1) = 0;
-
- virtual void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher) = 0;
-
- virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy* proxy0, btDispatcher* dispatcher) = 0;
-};
-
-#endif //OVERLAPPING_PAIR_CALLBACK_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp
deleted file mode 100644
index 19f1737b73..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp
+++ /dev/null
@@ -1,1341 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btQuantizedBvh.h"
-
-#include "LinearMath/btAabbUtil2.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btSerializer.h"
-
-#define RAYAABB2
-
-btQuantizedBvh::btQuantizedBvh() : m_bulletVersion(BT_BULLET_VERSION),
- m_useQuantization(false),
- //m_traversalMode(TRAVERSAL_STACKLESS_CACHE_FRIENDLY)
- m_traversalMode(TRAVERSAL_STACKLESS)
- //m_traversalMode(TRAVERSAL_RECURSIVE)
- ,
- m_subtreeHeaderCount(0) //PCK: add this line
-{
- m_bvhAabbMin.setValue(-SIMD_INFINITY, -SIMD_INFINITY, -SIMD_INFINITY);
- m_bvhAabbMax.setValue(SIMD_INFINITY, SIMD_INFINITY, SIMD_INFINITY);
-}
-
-void btQuantizedBvh::buildInternal()
-{
- ///assumes that caller filled in the m_quantizedLeafNodes
- m_useQuantization = true;
- int numLeafNodes = 0;
-
- if (m_useQuantization)
- {
- //now we have an array of leafnodes in m_leafNodes
- numLeafNodes = m_quantizedLeafNodes.size();
-
- m_quantizedContiguousNodes.resize(2 * numLeafNodes);
- }
-
- m_curNodeIndex = 0;
-
- buildTree(0, numLeafNodes);
-
- ///if the entire tree is small then subtree size, we need to create a header info for the tree
- if (m_useQuantization && !m_SubtreeHeaders.size())
- {
- btBvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[0]);
- subtree.m_rootNodeIndex = 0;
- subtree.m_subtreeSize = m_quantizedContiguousNodes[0].isLeafNode() ? 1 : m_quantizedContiguousNodes[0].getEscapeIndex();
- }
-
- //PCK: update the copy of the size
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-
- //PCK: clear m_quantizedLeafNodes and m_leafNodes, they are temporary
- m_quantizedLeafNodes.clear();
- m_leafNodes.clear();
-}
-
-///just for debugging, to visualize the individual patches/subtrees
-#ifdef DEBUG_PATCH_COLORS
-btVector3 color[4] =
- {
- btVector3(1, 0, 0),
- btVector3(0, 1, 0),
- btVector3(0, 0, 1),
- btVector3(0, 1, 1)};
-#endif //DEBUG_PATCH_COLORS
-
-void btQuantizedBvh::setQuantizationValues(const btVector3& bvhAabbMin, const btVector3& bvhAabbMax, btScalar quantizationMargin)
-{
- //enlarge the AABB to avoid division by zero when initializing the quantization values
- btVector3 clampValue(quantizationMargin, quantizationMargin, quantizationMargin);
- m_bvhAabbMin = bvhAabbMin - clampValue;
- m_bvhAabbMax = bvhAabbMax + clampValue;
- btVector3 aabbSize = m_bvhAabbMax - m_bvhAabbMin;
- m_bvhQuantization = btVector3(btScalar(65533.0), btScalar(65533.0), btScalar(65533.0)) / aabbSize;
-
- m_useQuantization = true;
-
- {
- unsigned short vecIn[3];
- btVector3 v;
- {
- quantize(vecIn, m_bvhAabbMin, false);
- v = unQuantize(vecIn);
- m_bvhAabbMin.setMin(v - clampValue);
- }
- aabbSize = m_bvhAabbMax - m_bvhAabbMin;
- m_bvhQuantization = btVector3(btScalar(65533.0), btScalar(65533.0), btScalar(65533.0)) / aabbSize;
- {
- quantize(vecIn, m_bvhAabbMax, true);
- v = unQuantize(vecIn);
- m_bvhAabbMax.setMax(v + clampValue);
- }
- aabbSize = m_bvhAabbMax - m_bvhAabbMin;
- m_bvhQuantization = btVector3(btScalar(65533.0), btScalar(65533.0), btScalar(65533.0)) / aabbSize;
- }
-}
-
-btQuantizedBvh::~btQuantizedBvh()
-{
-}
-
-#ifdef DEBUG_TREE_BUILDING
-int gStackDepth = 0;
-int gMaxStackDepth = 0;
-#endif //DEBUG_TREE_BUILDING
-
-void btQuantizedBvh::buildTree(int startIndex, int endIndex)
-{
-#ifdef DEBUG_TREE_BUILDING
- gStackDepth++;
- if (gStackDepth > gMaxStackDepth)
- gMaxStackDepth = gStackDepth;
-#endif //DEBUG_TREE_BUILDING
-
- int splitAxis, splitIndex, i;
- int numIndices = endIndex - startIndex;
- int curIndex = m_curNodeIndex;
-
- btAssert(numIndices > 0);
-
- if (numIndices == 1)
- {
-#ifdef DEBUG_TREE_BUILDING
- gStackDepth--;
-#endif //DEBUG_TREE_BUILDING
-
- assignInternalNodeFromLeafNode(m_curNodeIndex, startIndex);
-
- m_curNodeIndex++;
- return;
- }
- //calculate Best Splitting Axis and where to split it. Sort the incoming 'leafNodes' array within range 'startIndex/endIndex'.
-
- splitAxis = calcSplittingAxis(startIndex, endIndex);
-
- splitIndex = sortAndCalcSplittingIndex(startIndex, endIndex, splitAxis);
-
- int internalNodeIndex = m_curNodeIndex;
-
- //set the min aabb to 'inf' or a max value, and set the max aabb to a -inf/minimum value.
- //the aabb will be expanded during buildTree/mergeInternalNodeAabb with actual node values
- setInternalNodeAabbMin(m_curNodeIndex, m_bvhAabbMax); //can't use btVector3(SIMD_INFINITY,SIMD_INFINITY,SIMD_INFINITY)) because of quantization
- setInternalNodeAabbMax(m_curNodeIndex, m_bvhAabbMin); //can't use btVector3(-SIMD_INFINITY,-SIMD_INFINITY,-SIMD_INFINITY)) because of quantization
-
- for (i = startIndex; i < endIndex; i++)
- {
- mergeInternalNodeAabb(m_curNodeIndex, getAabbMin(i), getAabbMax(i));
- }
-
- m_curNodeIndex++;
-
- //internalNode->m_escapeIndex;
-
- int leftChildNodexIndex = m_curNodeIndex;
-
- //build left child tree
- buildTree(startIndex, splitIndex);
-
- int rightChildNodexIndex = m_curNodeIndex;
- //build right child tree
- buildTree(splitIndex, endIndex);
-
-#ifdef DEBUG_TREE_BUILDING
- gStackDepth--;
-#endif //DEBUG_TREE_BUILDING
-
- int escapeIndex = m_curNodeIndex - curIndex;
-
- if (m_useQuantization)
- {
- //escapeIndex is the number of nodes of this subtree
- const int sizeQuantizedNode = sizeof(btQuantizedBvhNode);
- const int treeSizeInBytes = escapeIndex * sizeQuantizedNode;
- if (treeSizeInBytes > MAX_SUBTREE_SIZE_IN_BYTES)
- {
- updateSubtreeHeaders(leftChildNodexIndex, rightChildNodexIndex);
- }
- }
- else
- {
- }
-
- setInternalNodeEscapeIndex(internalNodeIndex, escapeIndex);
-}
-
-void btQuantizedBvh::updateSubtreeHeaders(int leftChildNodexIndex, int rightChildNodexIndex)
-{
- btAssert(m_useQuantization);
-
- btQuantizedBvhNode& leftChildNode = m_quantizedContiguousNodes[leftChildNodexIndex];
- int leftSubTreeSize = leftChildNode.isLeafNode() ? 1 : leftChildNode.getEscapeIndex();
- int leftSubTreeSizeInBytes = leftSubTreeSize * static_cast<int>(sizeof(btQuantizedBvhNode));
-
- btQuantizedBvhNode& rightChildNode = m_quantizedContiguousNodes[rightChildNodexIndex];
- int rightSubTreeSize = rightChildNode.isLeafNode() ? 1 : rightChildNode.getEscapeIndex();
- int rightSubTreeSizeInBytes = rightSubTreeSize * static_cast<int>(sizeof(btQuantizedBvhNode));
-
- if (leftSubTreeSizeInBytes <= MAX_SUBTREE_SIZE_IN_BYTES)
- {
- btBvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(leftChildNode);
- subtree.m_rootNodeIndex = leftChildNodexIndex;
- subtree.m_subtreeSize = leftSubTreeSize;
- }
-
- if (rightSubTreeSizeInBytes <= MAX_SUBTREE_SIZE_IN_BYTES)
- {
- btBvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(rightChildNode);
- subtree.m_rootNodeIndex = rightChildNodexIndex;
- subtree.m_subtreeSize = rightSubTreeSize;
- }
-
- //PCK: update the copy of the size
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-}
-
-int btQuantizedBvh::sortAndCalcSplittingIndex(int startIndex, int endIndex, int splitAxis)
-{
- int i;
- int splitIndex = startIndex;
- int numIndices = endIndex - startIndex;
- btScalar splitValue;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- splitValue = means[splitAxis];
-
- //sort leafNodes so all values larger then splitValue comes first, and smaller values start from 'splitIndex'.
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- if (center[splitAxis] > splitValue)
- {
- //swap
- swapLeafNodes(i, splitIndex);
- splitIndex++;
- }
- }
-
- //if the splitIndex causes unbalanced trees, fix this by using the center in between startIndex and endIndex
- //otherwise the tree-building might fail due to stack-overflows in certain cases.
- //unbalanced1 is unsafe: it can cause stack overflows
- //bool unbalanced1 = ((splitIndex==startIndex) || (splitIndex == (endIndex-1)));
-
- //unbalanced2 should work too: always use center (perfect balanced trees)
- //bool unbalanced2 = true;
-
- //this should be safe too:
- int rangeBalancedIndices = numIndices / 3;
- bool unbalanced = ((splitIndex <= (startIndex + rangeBalancedIndices)) || (splitIndex >= (endIndex - 1 - rangeBalancedIndices)));
-
- if (unbalanced)
- {
- splitIndex = startIndex + (numIndices >> 1);
- }
-
- bool unbal = (splitIndex == startIndex) || (splitIndex == (endIndex));
- (void)unbal;
- btAssert(!unbal);
-
- return splitIndex;
-}
-
-int btQuantizedBvh::calcSplittingAxis(int startIndex, int endIndex)
-{
- int i;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- btVector3 variance(btScalar(0.), btScalar(0.), btScalar(0.));
- int numIndices = endIndex - startIndex;
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (getAabbMax(i) + getAabbMin(i));
- btVector3 diff2 = center - means;
- diff2 = diff2 * diff2;
- variance += diff2;
- }
- variance *= (btScalar(1.) / ((btScalar)numIndices - 1));
-
- return variance.maxAxis();
-}
-
-void btQuantizedBvh::reportAabbOverlappingNodex(btNodeOverlapCallback* nodeCallback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- //either choose recursive traversal (walkTree) or stackless (walkStacklessTree)
-
- if (m_useQuantization)
- {
- ///quantize query AABB
- unsigned short int quantizedQueryAabbMin[3];
- unsigned short int quantizedQueryAabbMax[3];
- quantizeWithClamp(quantizedQueryAabbMin, aabbMin, 0);
- quantizeWithClamp(quantizedQueryAabbMax, aabbMax, 1);
-
- switch (m_traversalMode)
- {
- case TRAVERSAL_STACKLESS:
- walkStacklessQuantizedTree(nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax, 0, m_curNodeIndex);
- break;
- case TRAVERSAL_STACKLESS_CACHE_FRIENDLY:
- walkStacklessQuantizedTreeCacheFriendly(nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
- break;
- case TRAVERSAL_RECURSIVE:
- {
- const btQuantizedBvhNode* rootNode = &m_quantizedContiguousNodes[0];
- walkRecursiveQuantizedTreeAgainstQueryAabb(rootNode, nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
- }
- break;
- default:
- //unsupported
- btAssert(0);
- }
- }
- else
- {
- walkStacklessTree(nodeCallback, aabbMin, aabbMax);
- }
-}
-
-void btQuantizedBvh::walkStacklessTree(btNodeOverlapCallback* nodeCallback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- btAssert(!m_useQuantization);
-
- const btOptimizedBvhNode* rootNode = &m_contiguousNodes[0];
- int escapeIndex, curIndex = 0;
- int walkIterations = 0;
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap;
-
- while (curIndex < m_curNodeIndex)
- {
- //catch bugs in tree data
- btAssert(walkIterations < m_curNodeIndex);
-
- walkIterations++;
- aabbOverlap = TestAabbAgainstAabb2(aabbMin, aabbMax, rootNode->m_aabbMinOrg, rootNode->m_aabbMaxOrg);
- isLeafNode = rootNode->m_escapeIndex == -1;
-
- //PCK: unsigned instead of bool
- if (isLeafNode && (aabbOverlap != 0))
- {
- nodeCallback->processNode(rootNode->m_subPart, rootNode->m_triangleIndex);
- }
-
- //PCK: unsigned instead of bool
- if ((aabbOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->m_escapeIndex;
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
-}
-
-/*
-///this was the original recursive traversal, before we optimized towards stackless traversal
-void btQuantizedBvh::walkTree(btOptimizedBvhNode* rootNode,btNodeOverlapCallback* nodeCallback,const btVector3& aabbMin,const btVector3& aabbMax) const
-{
- bool isLeafNode, aabbOverlap = TestAabbAgainstAabb2(aabbMin,aabbMax,rootNode->m_aabbMin,rootNode->m_aabbMax);
- if (aabbOverlap)
- {
- isLeafNode = (!rootNode->m_leftChild && !rootNode->m_rightChild);
- if (isLeafNode)
- {
- nodeCallback->processNode(rootNode);
- } else
- {
- walkTree(rootNode->m_leftChild,nodeCallback,aabbMin,aabbMax);
- walkTree(rootNode->m_rightChild,nodeCallback,aabbMin,aabbMax);
- }
- }
-
-}
-*/
-
-void btQuantizedBvh::walkRecursiveQuantizedTreeAgainstQueryAabb(const btQuantizedBvhNode* currentNode, btNodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const
-{
- btAssert(m_useQuantization);
-
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap;
-
- //PCK: unsigned instead of bool
- aabbOverlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, currentNode->m_quantizedAabbMin, currentNode->m_quantizedAabbMax);
- isLeafNode = currentNode->isLeafNode();
-
- //PCK: unsigned instead of bool
- if (aabbOverlap != 0)
- {
- if (isLeafNode)
- {
- nodeCallback->processNode(currentNode->getPartId(), currentNode->getTriangleIndex());
- }
- else
- {
- //process left and right children
- const btQuantizedBvhNode* leftChildNode = currentNode + 1;
- walkRecursiveQuantizedTreeAgainstQueryAabb(leftChildNode, nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
-
- const btQuantizedBvhNode* rightChildNode = leftChildNode->isLeafNode() ? leftChildNode + 1 : leftChildNode + leftChildNode->getEscapeIndex();
- walkRecursiveQuantizedTreeAgainstQueryAabb(rightChildNode, nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax);
- }
- }
-}
-
-void btQuantizedBvh::walkStacklessTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex, int endNodeIndex) const
-{
- btAssert(!m_useQuantization);
-
- const btOptimizedBvhNode* rootNode = &m_contiguousNodes[0];
- int escapeIndex, curIndex = 0;
- int walkIterations = 0;
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap = 0;
- unsigned rayBoxOverlap = 0;
- btScalar lambda_max = 1.0;
-
- /* Quick pruning by quantized box */
- btVector3 rayAabbMin = raySource;
- btVector3 rayAabbMax = raySource;
- rayAabbMin.setMin(rayTarget);
- rayAabbMax.setMax(rayTarget);
-
- /* Add box cast extents to bounding box */
- rayAabbMin += aabbMin;
- rayAabbMax += aabbMax;
-
-#ifdef RAYAABB2
- btVector3 rayDir = (rayTarget - raySource);
- rayDir.safeNormalize();// stephengold changed normalize to safeNormalize 2020-02-17
- lambda_max = rayDir.dot(rayTarget - raySource);
- ///what about division by zero? --> just set rayDirection[i] to 1.0
- btVector3 rayDirectionInverse;
- rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[0];
- rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[1];
- rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[2];
- unsigned int sign[3] = {rayDirectionInverse[0] < 0.0, rayDirectionInverse[1] < 0.0, rayDirectionInverse[2] < 0.0};
-#endif
-
- btVector3 bounds[2];
-
- while (curIndex < m_curNodeIndex)
- {
- btScalar param = 1.0;
- //catch bugs in tree data
- btAssert(walkIterations < m_curNodeIndex);
-
- walkIterations++;
-
- bounds[0] = rootNode->m_aabbMinOrg;
- bounds[1] = rootNode->m_aabbMaxOrg;
- /* Add box cast extents */
- bounds[0] -= aabbMax;
- bounds[1] -= aabbMin;
-
- aabbOverlap = TestAabbAgainstAabb2(rayAabbMin, rayAabbMax, rootNode->m_aabbMinOrg, rootNode->m_aabbMaxOrg);
- //perhaps profile if it is worth doing the aabbOverlap test first
-
-#ifdef RAYAABB2
- ///careful with this check: need to check division by zero (above) and fix the unQuantize method
- ///thanks Joerg/hiker for the reproduction case!
- ///http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=1858
- rayBoxOverlap = aabbOverlap ? btRayAabb2(raySource, rayDirectionInverse, sign, bounds, param, 0.0f, lambda_max) : false;
-
-#else
- btVector3 normal;
- rayBoxOverlap = btRayAabb(raySource, rayTarget, bounds[0], bounds[1], param, normal);
-#endif
-
- isLeafNode = rootNode->m_escapeIndex == -1;
-
- //PCK: unsigned instead of bool
- if (isLeafNode && (rayBoxOverlap != 0))
- {
- nodeCallback->processNode(rootNode->m_subPart, rootNode->m_triangleIndex);
- }
-
- //PCK: unsigned instead of bool
- if ((rayBoxOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->m_escapeIndex;
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
-}
-
-void btQuantizedBvh::walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex, int endNodeIndex) const
-{
- btAssert(m_useQuantization);
-
- int curIndex = startNodeIndex;
- int walkIterations = 0;
- int subTreeSize = endNodeIndex - startNodeIndex;
- (void)subTreeSize;
-
- const btQuantizedBvhNode* rootNode = &m_quantizedContiguousNodes[startNodeIndex];
- int escapeIndex;
-
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned boxBoxOverlap = 0;
- unsigned rayBoxOverlap = 0;
-
- btScalar lambda_max = 1.0;
-
-#ifdef RAYAABB2
- btVector3 rayDirection = (rayTarget - raySource);
- rayDirection.safeNormalize();// stephengold changed normalize to safeNormalize 2020-02-17
- lambda_max = rayDirection.dot(rayTarget - raySource);
- ///what about division by zero? --> just set rayDirection[i] to 1.0
- rayDirection[0] = rayDirection[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDirection[0];
- rayDirection[1] = rayDirection[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDirection[1];
- rayDirection[2] = rayDirection[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDirection[2];
- unsigned int sign[3] = {rayDirection[0] < 0.0, rayDirection[1] < 0.0, rayDirection[2] < 0.0};
-#endif
-
- /* Quick pruning by quantized box */
- btVector3 rayAabbMin = raySource;
- btVector3 rayAabbMax = raySource;
- rayAabbMin.setMin(rayTarget);
- rayAabbMax.setMax(rayTarget);
-
- /* Add box cast extents to bounding box */
- rayAabbMin += aabbMin;
- rayAabbMax += aabbMax;
-
- unsigned short int quantizedQueryAabbMin[3];
- unsigned short int quantizedQueryAabbMax[3];
- quantizeWithClamp(quantizedQueryAabbMin, rayAabbMin, 0);
- quantizeWithClamp(quantizedQueryAabbMax, rayAabbMax, 1);
-
- while (curIndex < endNodeIndex)
- {
-//#define VISUALLY_ANALYZE_BVH 1
-#ifdef VISUALLY_ANALYZE_BVH
- //some code snippet to debugDraw aabb, to visually analyze bvh structure
- static int drawPatch = 0;
- //need some global access to a debugDrawer
- extern btIDebugDraw* debugDrawerPtr;
- if (curIndex == drawPatch)
- {
- btVector3 aabbMin, aabbMax;
- aabbMin = unQuantize(rootNode->m_quantizedAabbMin);
- aabbMax = unQuantize(rootNode->m_quantizedAabbMax);
- btVector3 color(1, 0, 0);
- debugDrawerPtr->drawAabb(aabbMin, aabbMax, color);
- }
-#endif //VISUALLY_ANALYZE_BVH
-
- //catch bugs in tree data
- btAssert(walkIterations < subTreeSize);
-
- walkIterations++;
- //PCK: unsigned instead of bool
- // only interested if this is closer than any previous hit
- btScalar param = 1.0;
- rayBoxOverlap = 0;
- boxBoxOverlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, rootNode->m_quantizedAabbMin, rootNode->m_quantizedAabbMax);
- isLeafNode = rootNode->isLeafNode();
- if (boxBoxOverlap)
- {
- btVector3 bounds[2];
- bounds[0] = unQuantize(rootNode->m_quantizedAabbMin);
- bounds[1] = unQuantize(rootNode->m_quantizedAabbMax);
- /* Add box cast extents */
- bounds[0] -= aabbMax;
- bounds[1] -= aabbMin;
- btVector3 normal;
-#if 0
- bool ra2 = btRayAabb2 (raySource, rayDirection, sign, bounds, param, 0.0, lambda_max);
- bool ra = btRayAabb (raySource, rayTarget, bounds[0], bounds[1], param, normal);
- if (ra2 != ra)
- {
- printf("functions don't match\n");
- }
-#endif
-#ifdef RAYAABB2
- ///careful with this check: need to check division by zero (above) and fix the unQuantize method
- ///thanks Joerg/hiker for the reproduction case!
- ///http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=9&t=1858
-
- //BT_PROFILE("btRayAabb2");
- rayBoxOverlap = btRayAabb2(raySource, rayDirection, sign, bounds, param, 0.0f, lambda_max);
-
-#else
- rayBoxOverlap = true; //btRayAabb(raySource, rayTarget, bounds[0], bounds[1], param, normal);
-#endif
- }
-
- if (isLeafNode && rayBoxOverlap)
- {
- nodeCallback->processNode(rootNode->getPartId(), rootNode->getTriangleIndex());
- }
-
- //PCK: unsigned instead of bool
- if ((rayBoxOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->getEscapeIndex();
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
-}
-
-void btQuantizedBvh::walkStacklessQuantizedTree(btNodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax, int startNodeIndex, int endNodeIndex) const
-{
- btAssert(m_useQuantization);
-
- int curIndex = startNodeIndex;
- int walkIterations = 0;
- int subTreeSize = endNodeIndex - startNodeIndex;
- (void)subTreeSize;
-
- const btQuantizedBvhNode* rootNode = &m_quantizedContiguousNodes[startNodeIndex];
- int escapeIndex;
-
- bool isLeafNode;
- //PCK: unsigned instead of bool
- unsigned aabbOverlap;
-
- while (curIndex < endNodeIndex)
- {
-//#define VISUALLY_ANALYZE_BVH 1
-#ifdef VISUALLY_ANALYZE_BVH
- //some code snippet to debugDraw aabb, to visually analyze bvh structure
- static int drawPatch = 0;
- //need some global access to a debugDrawer
- extern btIDebugDraw* debugDrawerPtr;
- if (curIndex == drawPatch)
- {
- btVector3 aabbMin, aabbMax;
- aabbMin = unQuantize(rootNode->m_quantizedAabbMin);
- aabbMax = unQuantize(rootNode->m_quantizedAabbMax);
- btVector3 color(1, 0, 0);
- debugDrawerPtr->drawAabb(aabbMin, aabbMax, color);
- }
-#endif //VISUALLY_ANALYZE_BVH
-
- //catch bugs in tree data
- btAssert(walkIterations < subTreeSize);
-
- walkIterations++;
- //PCK: unsigned instead of bool
- aabbOverlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, rootNode->m_quantizedAabbMin, rootNode->m_quantizedAabbMax);
- isLeafNode = rootNode->isLeafNode();
-
- if (isLeafNode && aabbOverlap)
- {
- nodeCallback->processNode(rootNode->getPartId(), rootNode->getTriangleIndex());
- }
-
- //PCK: unsigned instead of bool
- if ((aabbOverlap != 0) || isLeafNode)
- {
- rootNode++;
- curIndex++;
- }
- else
- {
- escapeIndex = rootNode->getEscapeIndex();
- rootNode += escapeIndex;
- curIndex += escapeIndex;
- }
- }
-}
-
-//This traversal can be called from Playstation 3 SPU
-void btQuantizedBvh::walkStacklessQuantizedTreeCacheFriendly(btNodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const
-{
- btAssert(m_useQuantization);
-
- int i;
-
- for (i = 0; i < this->m_SubtreeHeaders.size(); i++)
- {
- const btBvhSubtreeInfo& subtree = m_SubtreeHeaders[i];
-
- //PCK: unsigned instead of bool
- unsigned overlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, subtree.m_quantizedAabbMin, subtree.m_quantizedAabbMax);
- if (overlap != 0)
- {
- walkStacklessQuantizedTree(nodeCallback, quantizedQueryAabbMin, quantizedQueryAabbMax,
- subtree.m_rootNodeIndex,
- subtree.m_rootNodeIndex + subtree.m_subtreeSize);
- }
- }
-}
-
-void btQuantizedBvh::reportRayOverlappingNodex(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget) const
-{
- reportBoxCastOverlappingNodex(nodeCallback, raySource, rayTarget, btVector3(0, 0, 0), btVector3(0, 0, 0));
-}
-
-void btQuantizedBvh::reportBoxCastOverlappingNodex(btNodeOverlapCallback* nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- //always use stackless
-
- if (m_useQuantization)
- {
- walkStacklessQuantizedTreeAgainstRay(nodeCallback, raySource, rayTarget, aabbMin, aabbMax, 0, m_curNodeIndex);
- }
- else
- {
- walkStacklessTreeAgainstRay(nodeCallback, raySource, rayTarget, aabbMin, aabbMax, 0, m_curNodeIndex);
- }
- /*
- {
- //recursive traversal
- btVector3 qaabbMin = raySource;
- btVector3 qaabbMax = raySource;
- qaabbMin.setMin(rayTarget);
- qaabbMax.setMax(rayTarget);
- qaabbMin += aabbMin;
- qaabbMax += aabbMax;
- reportAabbOverlappingNodex(nodeCallback,qaabbMin,qaabbMax);
- }
- */
-}
-
-void btQuantizedBvh::swapLeafNodes(int i, int splitIndex)
-{
- if (m_useQuantization)
- {
- btQuantizedBvhNode tmp = m_quantizedLeafNodes[i];
- m_quantizedLeafNodes[i] = m_quantizedLeafNodes[splitIndex];
- m_quantizedLeafNodes[splitIndex] = tmp;
- }
- else
- {
- btOptimizedBvhNode tmp = m_leafNodes[i];
- m_leafNodes[i] = m_leafNodes[splitIndex];
- m_leafNodes[splitIndex] = tmp;
- }
-}
-
-void btQuantizedBvh::assignInternalNodeFromLeafNode(int internalNode, int leafNodeIndex)
-{
- if (m_useQuantization)
- {
- m_quantizedContiguousNodes[internalNode] = m_quantizedLeafNodes[leafNodeIndex];
- }
- else
- {
- m_contiguousNodes[internalNode] = m_leafNodes[leafNodeIndex];
- }
-}
-
-//PCK: include
-#include <new>
-
-#if 0
-//PCK: consts
-static const unsigned BVH_ALIGNMENT = 16;
-static const unsigned BVH_ALIGNMENT_MASK = BVH_ALIGNMENT-1;
-
-static const unsigned BVH_ALIGNMENT_BLOCKS = 2;
-#endif
-
-unsigned int btQuantizedBvh::getAlignmentSerializationPadding()
-{
- // I changed this to 0 since the extra padding is not needed or used.
- return 0; //BVH_ALIGNMENT_BLOCKS * BVH_ALIGNMENT;
-}
-
-unsigned btQuantizedBvh::calculateSerializeBufferSize() const
-{
- unsigned baseSize = sizeof(btQuantizedBvh) + getAlignmentSerializationPadding();
- baseSize += sizeof(btBvhSubtreeInfo) * m_subtreeHeaderCount;
- if (m_useQuantization)
- {
- return baseSize + m_curNodeIndex * sizeof(btQuantizedBvhNode);
- }
- return baseSize + m_curNodeIndex * sizeof(btOptimizedBvhNode);
-}
-
-bool btQuantizedBvh::serialize(void* o_alignedDataBuffer, unsigned /*i_dataBufferSize */, bool i_swapEndian) const
-{
- btAssert(m_subtreeHeaderCount == m_SubtreeHeaders.size());
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-
- /* if (i_dataBufferSize < calculateSerializeBufferSize() || o_alignedDataBuffer == NULL || (((unsigned)o_alignedDataBuffer & BVH_ALIGNMENT_MASK) != 0))
- {
- ///check alignedment for buffer?
- btAssert(0);
- return false;
- }
-*/
-
- btQuantizedBvh* targetBvh = (btQuantizedBvh*)o_alignedDataBuffer;
-
- // construct the class so the virtual function table, etc will be set up
- // Also, m_leafNodes and m_quantizedLeafNodes will be initialized to default values by the constructor
- new (targetBvh) btQuantizedBvh;
-
- if (i_swapEndian)
- {
- targetBvh->m_curNodeIndex = static_cast<int>(btSwapEndian(m_curNodeIndex));
-
- btSwapVector3Endian(m_bvhAabbMin, targetBvh->m_bvhAabbMin);
- btSwapVector3Endian(m_bvhAabbMax, targetBvh->m_bvhAabbMax);
- btSwapVector3Endian(m_bvhQuantization, targetBvh->m_bvhQuantization);
-
- targetBvh->m_traversalMode = (btTraversalMode)btSwapEndian(m_traversalMode);
- targetBvh->m_subtreeHeaderCount = static_cast<int>(btSwapEndian(m_subtreeHeaderCount));
- }
- else
- {
- targetBvh->m_curNodeIndex = m_curNodeIndex;
- targetBvh->m_bvhAabbMin = m_bvhAabbMin;
- targetBvh->m_bvhAabbMax = m_bvhAabbMax;
- targetBvh->m_bvhQuantization = m_bvhQuantization;
- targetBvh->m_traversalMode = m_traversalMode;
- targetBvh->m_subtreeHeaderCount = m_subtreeHeaderCount;
- }
-
- targetBvh->m_useQuantization = m_useQuantization;
-
- unsigned char* nodeData = (unsigned char*)targetBvh;
- nodeData += sizeof(btQuantizedBvh);
-
- unsigned sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- int nodeCount = m_curNodeIndex;
-
- if (m_useQuantization)
- {
- targetBvh->m_quantizedContiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0] = btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1] = btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2] = btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2]);
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0] = btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1] = btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1]);
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2] = btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2]);
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = static_cast<int>(btSwapEndian(m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex));
- }
- }
- else
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2];
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1];
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2] = m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2];
-
- targetBvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex;
- }
- }
- nodeData += sizeof(btQuantizedBvhNode) * nodeCount;
-
- // this clears the pointer in the member variable it doesn't really do anything to the data
- // it does call the destructor on the contained objects, but they are all classes with no destructor defined
- // so the memory (which is not freed) is left alone
- targetBvh->m_quantizedContiguousNodes.initializeFromBuffer(NULL, 0, 0);
- }
- else
- {
- targetBvh->m_contiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- btSwapVector3Endian(m_contiguousNodes[nodeIndex].m_aabbMinOrg, targetBvh->m_contiguousNodes[nodeIndex].m_aabbMinOrg);
- btSwapVector3Endian(m_contiguousNodes[nodeIndex].m_aabbMaxOrg, targetBvh->m_contiguousNodes[nodeIndex].m_aabbMaxOrg);
-
- targetBvh->m_contiguousNodes[nodeIndex].m_escapeIndex = static_cast<int>(btSwapEndian(m_contiguousNodes[nodeIndex].m_escapeIndex));
- targetBvh->m_contiguousNodes[nodeIndex].m_subPart = static_cast<int>(btSwapEndian(m_contiguousNodes[nodeIndex].m_subPart));
- targetBvh->m_contiguousNodes[nodeIndex].m_triangleIndex = static_cast<int>(btSwapEndian(m_contiguousNodes[nodeIndex].m_triangleIndex));
- }
- }
- else
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- targetBvh->m_contiguousNodes[nodeIndex].m_aabbMinOrg = m_contiguousNodes[nodeIndex].m_aabbMinOrg;
- targetBvh->m_contiguousNodes[nodeIndex].m_aabbMaxOrg = m_contiguousNodes[nodeIndex].m_aabbMaxOrg;
-
- targetBvh->m_contiguousNodes[nodeIndex].m_escapeIndex = m_contiguousNodes[nodeIndex].m_escapeIndex;
- targetBvh->m_contiguousNodes[nodeIndex].m_subPart = m_contiguousNodes[nodeIndex].m_subPart;
- targetBvh->m_contiguousNodes[nodeIndex].m_triangleIndex = m_contiguousNodes[nodeIndex].m_triangleIndex;
- }
- }
- nodeData += sizeof(btOptimizedBvhNode) * nodeCount;
-
- // this clears the pointer in the member variable it doesn't really do anything to the data
- // it does call the destructor on the contained objects, but they are all classes with no destructor defined
- // so the memory (which is not freed) is left alone
- targetBvh->m_contiguousNodes.initializeFromBuffer(NULL, 0, 0);
- }
-
- sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- // Now serialize the subtree headers
- targetBvh->m_SubtreeHeaders.initializeFromBuffer(nodeData, m_subtreeHeaderCount, m_subtreeHeaderCount);
- if (i_swapEndian)
- {
- for (int i = 0; i < m_subtreeHeaderCount; i++)
- {
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0] = btSwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMin[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1] = btSwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMin[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2] = btSwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMin[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0] = btSwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMax[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1] = btSwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMax[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2] = btSwapEndian(m_SubtreeHeaders[i].m_quantizedAabbMax[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_rootNodeIndex = static_cast<int>(btSwapEndian(m_SubtreeHeaders[i].m_rootNodeIndex));
- targetBvh->m_SubtreeHeaders[i].m_subtreeSize = static_cast<int>(btSwapEndian(m_SubtreeHeaders[i].m_subtreeSize));
- }
- }
- else
- {
- for (int i = 0; i < m_subtreeHeaderCount; i++)
- {
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0] = (m_SubtreeHeaders[i].m_quantizedAabbMin[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1] = (m_SubtreeHeaders[i].m_quantizedAabbMin[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2] = (m_SubtreeHeaders[i].m_quantizedAabbMin[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0] = (m_SubtreeHeaders[i].m_quantizedAabbMax[0]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1] = (m_SubtreeHeaders[i].m_quantizedAabbMax[1]);
- targetBvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2] = (m_SubtreeHeaders[i].m_quantizedAabbMax[2]);
-
- targetBvh->m_SubtreeHeaders[i].m_rootNodeIndex = (m_SubtreeHeaders[i].m_rootNodeIndex);
- targetBvh->m_SubtreeHeaders[i].m_subtreeSize = (m_SubtreeHeaders[i].m_subtreeSize);
-
- // need to clear padding in destination buffer
- targetBvh->m_SubtreeHeaders[i].m_padding[0] = 0;
- targetBvh->m_SubtreeHeaders[i].m_padding[1] = 0;
- targetBvh->m_SubtreeHeaders[i].m_padding[2] = 0;
- }
- }
- nodeData += sizeof(btBvhSubtreeInfo) * m_subtreeHeaderCount;
-
- // this clears the pointer in the member variable it doesn't really do anything to the data
- // it does call the destructor on the contained objects, but they are all classes with no destructor defined
- // so the memory (which is not freed) is left alone
- targetBvh->m_SubtreeHeaders.initializeFromBuffer(NULL, 0, 0);
-
- // this wipes the virtual function table pointer at the start of the buffer for the class
- *((void**)o_alignedDataBuffer) = NULL;
-
- return true;
-}
-
-btQuantizedBvh* btQuantizedBvh::deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian)
-{
- if (i_alignedDataBuffer == NULL) // || (((unsigned)i_alignedDataBuffer & BVH_ALIGNMENT_MASK) != 0))
- {
- return NULL;
- }
- btQuantizedBvh* bvh = (btQuantizedBvh*)i_alignedDataBuffer;
-
- if (i_swapEndian)
- {
- bvh->m_curNodeIndex = static_cast<int>(btSwapEndian(bvh->m_curNodeIndex));
-
- btUnSwapVector3Endian(bvh->m_bvhAabbMin);
- btUnSwapVector3Endian(bvh->m_bvhAabbMax);
- btUnSwapVector3Endian(bvh->m_bvhQuantization);
-
- bvh->m_traversalMode = (btTraversalMode)btSwapEndian(bvh->m_traversalMode);
- bvh->m_subtreeHeaderCount = static_cast<int>(btSwapEndian(bvh->m_subtreeHeaderCount));
- }
-
- unsigned int calculatedBufSize = bvh->calculateSerializeBufferSize();
- btAssert(calculatedBufSize <= i_dataBufferSize);
-
- if (calculatedBufSize > i_dataBufferSize)
- {
- return NULL;
- }
-
- unsigned char* nodeData = (unsigned char*)bvh;
- nodeData += sizeof(btQuantizedBvh);
-
- unsigned sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- int nodeCount = bvh->m_curNodeIndex;
-
- // Must call placement new to fill in virtual function table, etc, but we don't want to overwrite most data, so call a special version of the constructor
- // Also, m_leafNodes and m_quantizedLeafNodes will be initialized to default values by the constructor
- new (bvh) btQuantizedBvh(*bvh, false);
-
- if (bvh->m_useQuantization)
- {
- bvh->m_quantizedContiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0] = btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1] = btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[1]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2] = btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[2]);
-
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0] = btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1] = btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[1]);
- bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2] = btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[2]);
-
- bvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = static_cast<int>(btSwapEndian(bvh->m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex));
- }
- }
- nodeData += sizeof(btQuantizedBvhNode) * nodeCount;
- }
- else
- {
- bvh->m_contiguousNodes.initializeFromBuffer(nodeData, nodeCount, nodeCount);
-
- if (i_swapEndian)
- {
- for (int nodeIndex = 0; nodeIndex < nodeCount; nodeIndex++)
- {
- btUnSwapVector3Endian(bvh->m_contiguousNodes[nodeIndex].m_aabbMinOrg);
- btUnSwapVector3Endian(bvh->m_contiguousNodes[nodeIndex].m_aabbMaxOrg);
-
- bvh->m_contiguousNodes[nodeIndex].m_escapeIndex = static_cast<int>(btSwapEndian(bvh->m_contiguousNodes[nodeIndex].m_escapeIndex));
- bvh->m_contiguousNodes[nodeIndex].m_subPart = static_cast<int>(btSwapEndian(bvh->m_contiguousNodes[nodeIndex].m_subPart));
- bvh->m_contiguousNodes[nodeIndex].m_triangleIndex = static_cast<int>(btSwapEndian(bvh->m_contiguousNodes[nodeIndex].m_triangleIndex));
- }
- }
- nodeData += sizeof(btOptimizedBvhNode) * nodeCount;
- }
-
- sizeToAdd = 0; //(BVH_ALIGNMENT-((unsigned)nodeData & BVH_ALIGNMENT_MASK))&BVH_ALIGNMENT_MASK;
- nodeData += sizeToAdd;
-
- // Now serialize the subtree headers
- bvh->m_SubtreeHeaders.initializeFromBuffer(nodeData, bvh->m_subtreeHeaderCount, bvh->m_subtreeHeaderCount);
- if (i_swapEndian)
- {
- for (int i = 0; i < bvh->m_subtreeHeaderCount; i++)
- {
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0] = btSwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[0]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1] = btSwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[1]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2] = btSwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMin[2]);
-
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0] = btSwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[0]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1] = btSwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[1]);
- bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2] = btSwapEndian(bvh->m_SubtreeHeaders[i].m_quantizedAabbMax[2]);
-
- bvh->m_SubtreeHeaders[i].m_rootNodeIndex = static_cast<int>(btSwapEndian(bvh->m_SubtreeHeaders[i].m_rootNodeIndex));
- bvh->m_SubtreeHeaders[i].m_subtreeSize = static_cast<int>(btSwapEndian(bvh->m_SubtreeHeaders[i].m_subtreeSize));
- }
- }
-
- return bvh;
-}
-
-// Constructor that prevents btVector3's default constructor from being called
-btQuantizedBvh::btQuantizedBvh(btQuantizedBvh& self, bool /* ownsMemory */) : m_bvhAabbMin(self.m_bvhAabbMin),
- m_bvhAabbMax(self.m_bvhAabbMax),
- m_bvhQuantization(self.m_bvhQuantization),
- m_bulletVersion(BT_BULLET_VERSION)
-{
-}
-
-void btQuantizedBvh::deSerializeFloat(struct btQuantizedBvhFloatData& quantizedBvhFloatData)
-{
- m_bvhAabbMax.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMax);
- m_bvhAabbMin.deSerializeFloat(quantizedBvhFloatData.m_bvhAabbMin);
- m_bvhQuantization.deSerializeFloat(quantizedBvhFloatData.m_bvhQuantization);
-
- m_curNodeIndex = quantizedBvhFloatData.m_curNodeIndex;
- m_useQuantization = quantizedBvhFloatData.m_useQuantization != 0;
-
- {
- int numElem = quantizedBvhFloatData.m_numContiguousLeafNodes;
- m_contiguousNodes.resize(numElem);
-
- if (numElem)
- {
- btOptimizedBvhNodeFloatData* memPtr = quantizedBvhFloatData.m_contiguousNodesPtr;
-
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_contiguousNodes[i].m_aabbMaxOrg.deSerializeFloat(memPtr->m_aabbMaxOrg);
- m_contiguousNodes[i].m_aabbMinOrg.deSerializeFloat(memPtr->m_aabbMinOrg);
- m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex;
- m_contiguousNodes[i].m_subPart = memPtr->m_subPart;
- m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex;
- }
- }
- }
-
- {
- int numElem = quantizedBvhFloatData.m_numQuantizedContiguousNodes;
- m_quantizedContiguousNodes.resize(numElem);
-
- if (numElem)
- {
- btQuantizedBvhNodeData* memPtr = quantizedBvhFloatData.m_quantizedContiguousNodesPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex = memPtr->m_escapeIndexOrTriangleIndex;
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- }
- }
- }
-
- m_traversalMode = btTraversalMode(quantizedBvhFloatData.m_traversalMode);
-
- {
- int numElem = quantizedBvhFloatData.m_numSubtreeHeaders;
- m_SubtreeHeaders.resize(numElem);
- if (numElem)
- {
- btBvhSubtreeInfoData* memPtr = quantizedBvhFloatData.m_subTreeInfoPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_SubtreeHeaders[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex;
- m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize;
- }
- }
- }
-}
-
-void btQuantizedBvh::deSerializeDouble(struct btQuantizedBvhDoubleData& quantizedBvhDoubleData)
-{
- m_bvhAabbMax.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMax);
- m_bvhAabbMin.deSerializeDouble(quantizedBvhDoubleData.m_bvhAabbMin);
- m_bvhQuantization.deSerializeDouble(quantizedBvhDoubleData.m_bvhQuantization);
-
- m_curNodeIndex = quantizedBvhDoubleData.m_curNodeIndex;
- m_useQuantization = quantizedBvhDoubleData.m_useQuantization != 0;
-
- {
- int numElem = quantizedBvhDoubleData.m_numContiguousLeafNodes;
- m_contiguousNodes.resize(numElem);
-
- if (numElem)
- {
- btOptimizedBvhNodeDoubleData* memPtr = quantizedBvhDoubleData.m_contiguousNodesPtr;
-
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_contiguousNodes[i].m_aabbMaxOrg.deSerializeDouble(memPtr->m_aabbMaxOrg);
- m_contiguousNodes[i].m_aabbMinOrg.deSerializeDouble(memPtr->m_aabbMinOrg);
- m_contiguousNodes[i].m_escapeIndex = memPtr->m_escapeIndex;
- m_contiguousNodes[i].m_subPart = memPtr->m_subPart;
- m_contiguousNodes[i].m_triangleIndex = memPtr->m_triangleIndex;
- }
- }
- }
-
- {
- int numElem = quantizedBvhDoubleData.m_numQuantizedContiguousNodes;
- m_quantizedContiguousNodes.resize(numElem);
-
- if (numElem)
- {
- btQuantizedBvhNodeData* memPtr = quantizedBvhDoubleData.m_quantizedContiguousNodesPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex = memPtr->m_escapeIndexOrTriangleIndex;
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_quantizedContiguousNodes[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- }
- }
- }
-
- m_traversalMode = btTraversalMode(quantizedBvhDoubleData.m_traversalMode);
-
- {
- int numElem = quantizedBvhDoubleData.m_numSubtreeHeaders;
- m_SubtreeHeaders.resize(numElem);
- if (numElem)
- {
- btBvhSubtreeInfoData* memPtr = quantizedBvhDoubleData.m_subTreeInfoPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_SubtreeHeaders[i].m_quantizedAabbMax[0] = memPtr->m_quantizedAabbMax[0];
- m_SubtreeHeaders[i].m_quantizedAabbMax[1] = memPtr->m_quantizedAabbMax[1];
- m_SubtreeHeaders[i].m_quantizedAabbMax[2] = memPtr->m_quantizedAabbMax[2];
- m_SubtreeHeaders[i].m_quantizedAabbMin[0] = memPtr->m_quantizedAabbMin[0];
- m_SubtreeHeaders[i].m_quantizedAabbMin[1] = memPtr->m_quantizedAabbMin[1];
- m_SubtreeHeaders[i].m_quantizedAabbMin[2] = memPtr->m_quantizedAabbMin[2];
- m_SubtreeHeaders[i].m_rootNodeIndex = memPtr->m_rootNodeIndex;
- m_SubtreeHeaders[i].m_subtreeSize = memPtr->m_subtreeSize;
- }
- }
- }
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btQuantizedBvh::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btQuantizedBvhData* quantizedData = (btQuantizedBvhData*)dataBuffer;
-
- m_bvhAabbMax.serialize(quantizedData->m_bvhAabbMax);
- m_bvhAabbMin.serialize(quantizedData->m_bvhAabbMin);
- m_bvhQuantization.serialize(quantizedData->m_bvhQuantization);
-
- quantizedData->m_curNodeIndex = m_curNodeIndex;
- quantizedData->m_useQuantization = m_useQuantization;
-
- quantizedData->m_numContiguousLeafNodes = m_contiguousNodes.size();
- quantizedData->m_contiguousNodesPtr = (btOptimizedBvhNodeData*)(m_contiguousNodes.size() ? serializer->getUniquePointer((void*)&m_contiguousNodes[0]) : 0);
- if (quantizedData->m_contiguousNodesPtr)
- {
- int sz = sizeof(btOptimizedBvhNodeData);
- int numElem = m_contiguousNodes.size();
- btChunk* chunk = serializer->allocate(sz, numElem);
- btOptimizedBvhNodeData* memPtr = (btOptimizedBvhNodeData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_contiguousNodes[i].m_aabbMaxOrg.serialize(memPtr->m_aabbMaxOrg);
- m_contiguousNodes[i].m_aabbMinOrg.serialize(memPtr->m_aabbMinOrg);
- memPtr->m_escapeIndex = m_contiguousNodes[i].m_escapeIndex;
- memPtr->m_subPart = m_contiguousNodes[i].m_subPart;
- memPtr->m_triangleIndex = m_contiguousNodes[i].m_triangleIndex;
- // Fill padding with zeros to appease msan.
- memset(memPtr->m_pad, 0, sizeof(memPtr->m_pad));
- }
- serializer->finalizeChunk(chunk, "btOptimizedBvhNodeData", BT_ARRAY_CODE, (void*)&m_contiguousNodes[0]);
- }
-
- quantizedData->m_numQuantizedContiguousNodes = m_quantizedContiguousNodes.size();
- // printf("quantizedData->m_numQuantizedContiguousNodes=%d\n",quantizedData->m_numQuantizedContiguousNodes);
- quantizedData->m_quantizedContiguousNodesPtr = (btQuantizedBvhNodeData*)(m_quantizedContiguousNodes.size() ? serializer->getUniquePointer((void*)&m_quantizedContiguousNodes[0]) : 0);
- if (quantizedData->m_quantizedContiguousNodesPtr)
- {
- int sz = sizeof(btQuantizedBvhNodeData);
- int numElem = m_quantizedContiguousNodes.size();
- btChunk* chunk = serializer->allocate(sz, numElem);
- btQuantizedBvhNodeData* memPtr = (btQuantizedBvhNodeData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_escapeIndexOrTriangleIndex = m_quantizedContiguousNodes[i].m_escapeIndexOrTriangleIndex;
- memPtr->m_quantizedAabbMax[0] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[0];
- memPtr->m_quantizedAabbMax[1] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[1];
- memPtr->m_quantizedAabbMax[2] = m_quantizedContiguousNodes[i].m_quantizedAabbMax[2];
- memPtr->m_quantizedAabbMin[0] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[0];
- memPtr->m_quantizedAabbMin[1] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[1];
- memPtr->m_quantizedAabbMin[2] = m_quantizedContiguousNodes[i].m_quantizedAabbMin[2];
- }
- serializer->finalizeChunk(chunk, "btQuantizedBvhNodeData", BT_ARRAY_CODE, (void*)&m_quantizedContiguousNodes[0]);
- }
-
- quantizedData->m_traversalMode = int(m_traversalMode);
- quantizedData->m_numSubtreeHeaders = m_SubtreeHeaders.size();
-
- quantizedData->m_subTreeInfoPtr = (btBvhSubtreeInfoData*)(m_SubtreeHeaders.size() ? serializer->getUniquePointer((void*)&m_SubtreeHeaders[0]) : 0);
- if (quantizedData->m_subTreeInfoPtr)
- {
- int sz = sizeof(btBvhSubtreeInfoData);
- int numElem = m_SubtreeHeaders.size();
- btChunk* chunk = serializer->allocate(sz, numElem);
- btBvhSubtreeInfoData* memPtr = (btBvhSubtreeInfoData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_quantizedAabbMax[0] = m_SubtreeHeaders[i].m_quantizedAabbMax[0];
- memPtr->m_quantizedAabbMax[1] = m_SubtreeHeaders[i].m_quantizedAabbMax[1];
- memPtr->m_quantizedAabbMax[2] = m_SubtreeHeaders[i].m_quantizedAabbMax[2];
- memPtr->m_quantizedAabbMin[0] = m_SubtreeHeaders[i].m_quantizedAabbMin[0];
- memPtr->m_quantizedAabbMin[1] = m_SubtreeHeaders[i].m_quantizedAabbMin[1];
- memPtr->m_quantizedAabbMin[2] = m_SubtreeHeaders[i].m_quantizedAabbMin[2];
-
- memPtr->m_rootNodeIndex = m_SubtreeHeaders[i].m_rootNodeIndex;
- memPtr->m_subtreeSize = m_SubtreeHeaders[i].m_subtreeSize;
- }
- serializer->finalizeChunk(chunk, "btBvhSubtreeInfoData", BT_ARRAY_CODE, (void*)&m_SubtreeHeaders[0]);
- }
- return btQuantizedBvhDataName;
-}
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h
deleted file mode 100644
index 1c47b9ccf2..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btQuantizedBvh.h
+++ /dev/null
@@ -1,543 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_QUANTIZED_BVH_H
-#define BT_QUANTIZED_BVH_H
-
-class btSerializer;
-
-//#define DEBUG_CHECK_DEQUANTIZATION 1
-#ifdef DEBUG_CHECK_DEQUANTIZATION
-#ifdef __SPU__
-#define printf spu_printf
-#endif //__SPU__
-
-#include <stdio.h>
-#include <stdlib.h>
-#endif //DEBUG_CHECK_DEQUANTIZATION
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btAlignedAllocator.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btQuantizedBvhData btQuantizedBvhDoubleData
-#define btOptimizedBvhNodeData btOptimizedBvhNodeDoubleData
-#define btQuantizedBvhDataName "btQuantizedBvhDoubleData"
-#else
-#define btQuantizedBvhData btQuantizedBvhFloatData
-#define btOptimizedBvhNodeData btOptimizedBvhNodeFloatData
-#define btQuantizedBvhDataName "btQuantizedBvhFloatData"
-#endif
-
-//http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vclang/html/vclrf__m128.asp
-
-//Note: currently we have 16 bytes per quantized node
-#define MAX_SUBTREE_SIZE_IN_BYTES 2048
-
-// 10 gives the potential for 1024 parts, with at most 2^21 (2097152) (minus one
-// actually) triangles each (since the sign bit is reserved
-#define MAX_NUM_PARTS_IN_BITS 10
-
-///btQuantizedBvhNode is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-ATTRIBUTE_ALIGNED16(struct)
-btQuantizedBvhNode
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes
- int m_escapeIndexOrTriangleIndex;
-
- bool isLeafNode() const
- {
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (m_escapeIndexOrTriangleIndex >= 0);
- }
- int getEscapeIndex() const
- {
- btAssert(!isLeafNode());
- return -m_escapeIndexOrTriangleIndex;
- }
- int getTriangleIndex() const
- {
- btAssert(isLeafNode());
- unsigned int x = 0;
- unsigned int y = (~(x & 0)) << (31 - MAX_NUM_PARTS_IN_BITS);
- // Get only the lower bits where the triangle index is stored
- return (m_escapeIndexOrTriangleIndex & ~(y));
- }
- int getPartId() const
- {
- btAssert(isLeafNode());
- // Get only the highest bits where the part index is stored
- return (m_escapeIndexOrTriangleIndex >> (31 - MAX_NUM_PARTS_IN_BITS));
- }
-};
-
-/// btOptimizedBvhNode contains both internal and leaf node information.
-/// Total node size is 44 bytes / node. You can use the compressed version of 16 bytes.
-ATTRIBUTE_ALIGNED16(struct)
-btOptimizedBvhNode
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- //32 bytes
- btVector3 m_aabbMinOrg;
- btVector3 m_aabbMaxOrg;
-
- //4
- int m_escapeIndex;
-
- //8
- //for child nodes
- int m_subPart;
- int m_triangleIndex;
-
- //pad the size to 64 bytes
- char m_padding[20];
-};
-
-///btBvhSubtreeInfo provides info to gather a subtree of limited size
-ATTRIBUTE_ALIGNED16(class)
-btBvhSubtreeInfo
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes, points to the root of the subtree
- int m_rootNodeIndex;
- //4 bytes
- int m_subtreeSize;
- int m_padding[3];
-
- btBvhSubtreeInfo()
- {
- //memset(&m_padding[0], 0, sizeof(m_padding));
- }
-
- void setAabbFromQuantizeNode(const btQuantizedBvhNode& quantizedNode)
- {
- m_quantizedAabbMin[0] = quantizedNode.m_quantizedAabbMin[0];
- m_quantizedAabbMin[1] = quantizedNode.m_quantizedAabbMin[1];
- m_quantizedAabbMin[2] = quantizedNode.m_quantizedAabbMin[2];
- m_quantizedAabbMax[0] = quantizedNode.m_quantizedAabbMax[0];
- m_quantizedAabbMax[1] = quantizedNode.m_quantizedAabbMax[1];
- m_quantizedAabbMax[2] = quantizedNode.m_quantizedAabbMax[2];
- }
-};
-
-class btNodeOverlapCallback
-{
-public:
- virtual ~btNodeOverlapCallback(){};
-
- virtual void processNode(int subPart, int triangleIndex) = 0;
-};
-
-#include "LinearMath/btAlignedAllocator.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-///for code readability:
-typedef btAlignedObjectArray<btOptimizedBvhNode> NodeArray;
-typedef btAlignedObjectArray<btQuantizedBvhNode> QuantizedNodeArray;
-typedef btAlignedObjectArray<btBvhSubtreeInfo> BvhSubtreeInfoArray;
-
-///The btQuantizedBvh class stores an AABB tree that can be quickly traversed on CPU and Cell SPU.
-///It is used by the btBvhTriangleMeshShape as midphase.
-///It is recommended to use quantization for better performance and lower memory requirements.
-ATTRIBUTE_ALIGNED16(class)
-btQuantizedBvh
-{
-public:
- enum btTraversalMode
- {
- TRAVERSAL_STACKLESS = 0,
- TRAVERSAL_STACKLESS_CACHE_FRIENDLY,
- TRAVERSAL_RECURSIVE
- };
-
-protected:
- btVector3 m_bvhAabbMin;
- btVector3 m_bvhAabbMax;
- btVector3 m_bvhQuantization;
-
- int m_bulletVersion; //for serialization versioning. It could also be used to detect endianess.
-
- int m_curNodeIndex;
- //quantization data
- bool m_useQuantization;
-
- NodeArray m_leafNodes;
- NodeArray m_contiguousNodes;
- QuantizedNodeArray m_quantizedLeafNodes;
- QuantizedNodeArray m_quantizedContiguousNodes;
-
- btTraversalMode m_traversalMode;
- BvhSubtreeInfoArray m_SubtreeHeaders;
-
- //This is only used for serialization so we don't have to add serialization directly to btAlignedObjectArray
- mutable int m_subtreeHeaderCount;
-
- ///two versions, one for quantized and normal nodes. This allows code-reuse while maintaining readability (no template/macro!)
- ///this might be refactored into a virtual, it is usually not calculated at run-time
- void setInternalNodeAabbMin(int nodeIndex, const btVector3& aabbMin)
- {
- if (m_useQuantization)
- {
- quantize(&m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[0], aabbMin, 0);
- }
- else
- {
- m_contiguousNodes[nodeIndex].m_aabbMinOrg = aabbMin;
- }
- }
- void setInternalNodeAabbMax(int nodeIndex, const btVector3& aabbMax)
- {
- if (m_useQuantization)
- {
- quantize(&m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[0], aabbMax, 1);
- }
- else
- {
- m_contiguousNodes[nodeIndex].m_aabbMaxOrg = aabbMax;
- }
- }
-
- btVector3 getAabbMin(int nodeIndex) const
- {
- if (m_useQuantization)
- {
- return unQuantize(&m_quantizedLeafNodes[nodeIndex].m_quantizedAabbMin[0]);
- }
- //non-quantized
- return m_leafNodes[nodeIndex].m_aabbMinOrg;
- }
- btVector3 getAabbMax(int nodeIndex) const
- {
- if (m_useQuantization)
- {
- return unQuantize(&m_quantizedLeafNodes[nodeIndex].m_quantizedAabbMax[0]);
- }
- //non-quantized
- return m_leafNodes[nodeIndex].m_aabbMaxOrg;
- }
-
- void setInternalNodeEscapeIndex(int nodeIndex, int escapeIndex)
- {
- if (m_useQuantization)
- {
- m_quantizedContiguousNodes[nodeIndex].m_escapeIndexOrTriangleIndex = -escapeIndex;
- }
- else
- {
- m_contiguousNodes[nodeIndex].m_escapeIndex = escapeIndex;
- }
- }
-
- void mergeInternalNodeAabb(int nodeIndex, const btVector3& newAabbMin, const btVector3& newAabbMax)
- {
- if (m_useQuantization)
- {
- unsigned short int quantizedAabbMin[3];
- unsigned short int quantizedAabbMax[3];
- quantize(quantizedAabbMin, newAabbMin, 0);
- quantize(quantizedAabbMax, newAabbMax, 1);
- for (int i = 0; i < 3; i++)
- {
- if (m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[i] > quantizedAabbMin[i])
- m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMin[i] = quantizedAabbMin[i];
-
- if (m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[i] < quantizedAabbMax[i])
- m_quantizedContiguousNodes[nodeIndex].m_quantizedAabbMax[i] = quantizedAabbMax[i];
- }
- }
- else
- {
- //non-quantized
- m_contiguousNodes[nodeIndex].m_aabbMinOrg.setMin(newAabbMin);
- m_contiguousNodes[nodeIndex].m_aabbMaxOrg.setMax(newAabbMax);
- }
- }
-
- void swapLeafNodes(int firstIndex, int secondIndex);
-
- void assignInternalNodeFromLeafNode(int internalNode, int leafNodeIndex);
-
-protected:
- void buildTree(int startIndex, int endIndex);
-
- int calcSplittingAxis(int startIndex, int endIndex);
-
- int sortAndCalcSplittingIndex(int startIndex, int endIndex, int splitAxis);
-
- void walkStacklessTree(btNodeOverlapCallback * nodeCallback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- void walkStacklessQuantizedTreeAgainstRay(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex, int endNodeIndex) const;
- void walkStacklessQuantizedTree(btNodeOverlapCallback * nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax, int startNodeIndex, int endNodeIndex) const;
- void walkStacklessTreeAgainstRay(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax, int startNodeIndex, int endNodeIndex) const;
-
- ///tree traversal designed for small-memory processors like PS3 SPU
- void walkStacklessQuantizedTreeCacheFriendly(btNodeOverlapCallback * nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const;
-
- ///use the 16-byte stackless 'skipindex' node tree to do a recursive traversal
- void walkRecursiveQuantizedTreeAgainstQueryAabb(const btQuantizedBvhNode* currentNode, btNodeOverlapCallback* nodeCallback, unsigned short int* quantizedQueryAabbMin, unsigned short int* quantizedQueryAabbMax) const;
-
- ///use the 16-byte stackless 'skipindex' node tree to do a recursive traversal
- void walkRecursiveQuantizedTreeAgainstQuantizedTree(const btQuantizedBvhNode* treeNodeA, const btQuantizedBvhNode* treeNodeB, btNodeOverlapCallback* nodeCallback) const;
-
- void updateSubtreeHeaders(int leftChildNodexIndex, int rightChildNodexIndex);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btQuantizedBvh();
-
- virtual ~btQuantizedBvh();
-
- ///***************************************** expert/internal use only *************************
- void setQuantizationValues(const btVector3& bvhAabbMin, const btVector3& bvhAabbMax, btScalar quantizationMargin = btScalar(1.0));
- QuantizedNodeArray& getLeafNodeArray() { return m_quantizedLeafNodes; }
- ///buildInternal is expert use only: assumes that setQuantizationValues and LeafNodeArray are initialized
- void buildInternal();
- ///***************************************** expert/internal use only *************************
-
- void reportAabbOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3& aabbMin, const btVector3& aabbMax) const;
- void reportRayOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget) const;
- void reportBoxCastOverlappingNodex(btNodeOverlapCallback * nodeCallback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- SIMD_FORCE_INLINE void quantize(unsigned short* out, const btVector3& point, int isMax) const
- {
- btAssert(m_useQuantization);
-
- btAssert(point.getX() <= m_bvhAabbMax.getX());
- btAssert(point.getY() <= m_bvhAabbMax.getY());
- btAssert(point.getZ() <= m_bvhAabbMax.getZ());
-
- btAssert(point.getX() >= m_bvhAabbMin.getX());
- btAssert(point.getY() >= m_bvhAabbMin.getY());
- btAssert(point.getZ() >= m_bvhAabbMin.getZ());
-
- btVector3 v = (point - m_bvhAabbMin) * m_bvhQuantization;
- ///Make sure rounding is done in a way that unQuantize(quantizeWithClamp(...)) is conservative
- ///end-points always set the first bit, so that they are sorted properly (so that neighbouring AABBs overlap properly)
- ///@todo: double-check this
- if (isMax)
- {
- out[0] = (unsigned short)(((unsigned short)(v.getX() + btScalar(1.)) | 1));
- out[1] = (unsigned short)(((unsigned short)(v.getY() + btScalar(1.)) | 1));
- out[2] = (unsigned short)(((unsigned short)(v.getZ() + btScalar(1.)) | 1));
- }
- else
- {
- out[0] = (unsigned short)(((unsigned short)(v.getX()) & 0xfffe));
- out[1] = (unsigned short)(((unsigned short)(v.getY()) & 0xfffe));
- out[2] = (unsigned short)(((unsigned short)(v.getZ()) & 0xfffe));
- }
-
-#ifdef DEBUG_CHECK_DEQUANTIZATION
- btVector3 newPoint = unQuantize(out);
- if (isMax)
- {
- if (newPoint.getX() < point.getX())
- {
- printf("unconservative X, diffX = %f, oldX=%f,newX=%f\n", newPoint.getX() - point.getX(), newPoint.getX(), point.getX());
- }
- if (newPoint.getY() < point.getY())
- {
- printf("unconservative Y, diffY = %f, oldY=%f,newY=%f\n", newPoint.getY() - point.getY(), newPoint.getY(), point.getY());
- }
- if (newPoint.getZ() < point.getZ())
- {
- printf("unconservative Z, diffZ = %f, oldZ=%f,newZ=%f\n", newPoint.getZ() - point.getZ(), newPoint.getZ(), point.getZ());
- }
- }
- else
- {
- if (newPoint.getX() > point.getX())
- {
- printf("unconservative X, diffX = %f, oldX=%f,newX=%f\n", newPoint.getX() - point.getX(), newPoint.getX(), point.getX());
- }
- if (newPoint.getY() > point.getY())
- {
- printf("unconservative Y, diffY = %f, oldY=%f,newY=%f\n", newPoint.getY() - point.getY(), newPoint.getY(), point.getY());
- }
- if (newPoint.getZ() > point.getZ())
- {
- printf("unconservative Z, diffZ = %f, oldZ=%f,newZ=%f\n", newPoint.getZ() - point.getZ(), newPoint.getZ(), point.getZ());
- }
- }
-#endif //DEBUG_CHECK_DEQUANTIZATION
- }
-
- SIMD_FORCE_INLINE void quantizeWithClamp(unsigned short* out, const btVector3& point2, int isMax) const
- {
- btAssert(m_useQuantization);
-
- btVector3 clampedPoint(point2);
- clampedPoint.setMax(m_bvhAabbMin);
- clampedPoint.setMin(m_bvhAabbMax);
-
- quantize(out, clampedPoint, isMax);
- }
-
- SIMD_FORCE_INLINE btVector3 unQuantize(const unsigned short* vecIn) const
- {
- btVector3 vecOut;
- vecOut.setValue(
- (btScalar)(vecIn[0]) / (m_bvhQuantization.getX()),
- (btScalar)(vecIn[1]) / (m_bvhQuantization.getY()),
- (btScalar)(vecIn[2]) / (m_bvhQuantization.getZ()));
- vecOut += m_bvhAabbMin;
- return vecOut;
- }
-
- ///setTraversalMode let's you choose between stackless, recursive or stackless cache friendly tree traversal. Note this is only implemented for quantized trees.
- void setTraversalMode(btTraversalMode traversalMode)
- {
- m_traversalMode = traversalMode;
- }
-
- SIMD_FORCE_INLINE QuantizedNodeArray& getQuantizedNodeArray()
- {
- return m_quantizedContiguousNodes;
- }
-
- SIMD_FORCE_INLINE BvhSubtreeInfoArray& getSubtreeInfoArray()
- {
- return m_SubtreeHeaders;
- }
-
- ////////////////////////////////////////////////////////////////////
-
- /////Calculate space needed to store BVH for serialization
- unsigned calculateSerializeBufferSize() const;
-
- /// Data buffer MUST be 16 byte aligned
- virtual bool serialize(void* o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const;
-
- ///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place'
- static btQuantizedBvh* deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian);
-
- static unsigned int getAlignmentSerializationPadding();
- //////////////////////////////////////////////////////////////////////
-
- virtual int calculateSerializeBufferSizeNew() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-
- virtual void deSerializeFloat(struct btQuantizedBvhFloatData & quantizedBvhFloatData);
-
- virtual void deSerializeDouble(struct btQuantizedBvhDoubleData & quantizedBvhDoubleData);
-
- ////////////////////////////////////////////////////////////////////
-
- SIMD_FORCE_INLINE bool isQuantized()
- {
- return m_useQuantization;
- }
-
-private:
- // Special "copy" constructor that allows for in-place deserialization
- // Prevents btVector3's default constructor from being called, but doesn't inialize much else
- // ownsMemory should most likely be false if deserializing, and if you are not, don't call this (it also changes the function signature, which we need)
- btQuantizedBvh(btQuantizedBvh & other, bool ownsMemory);
-};
-
-// clang-format off
-// parser needs * with the name
-struct btBvhSubtreeInfoData
-{
- int m_rootNodeIndex;
- int m_subtreeSize;
- unsigned short m_quantizedAabbMin[3];
- unsigned short m_quantizedAabbMax[3];
-};
-
-struct btOptimizedBvhNodeFloatData
-{
- btVector3FloatData m_aabbMinOrg;
- btVector3FloatData m_aabbMaxOrg;
- int m_escapeIndex;
- int m_subPart;
- int m_triangleIndex;
- char m_pad[4];
-};
-
-struct btOptimizedBvhNodeDoubleData
-{
- btVector3DoubleData m_aabbMinOrg;
- btVector3DoubleData m_aabbMaxOrg;
- int m_escapeIndex;
- int m_subPart;
- int m_triangleIndex;
- char m_pad[4];
-};
-
-
-struct btQuantizedBvhNodeData
-{
- unsigned short m_quantizedAabbMin[3];
- unsigned short m_quantizedAabbMax[3];
- int m_escapeIndexOrTriangleIndex;
-};
-
-struct btQuantizedBvhFloatData
-{
- btVector3FloatData m_bvhAabbMin;
- btVector3FloatData m_bvhAabbMax;
- btVector3FloatData m_bvhQuantization;
- int m_curNodeIndex;
- int m_useQuantization;
- int m_numContiguousLeafNodes;
- int m_numQuantizedContiguousNodes;
- btOptimizedBvhNodeFloatData *m_contiguousNodesPtr;
- btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
- btBvhSubtreeInfoData *m_subTreeInfoPtr;
- int m_traversalMode;
- int m_numSubtreeHeaders;
-
-};
-
-struct btQuantizedBvhDoubleData
-{
- btVector3DoubleData m_bvhAabbMin;
- btVector3DoubleData m_bvhAabbMax;
- btVector3DoubleData m_bvhQuantization;
- int m_curNodeIndex;
- int m_useQuantization;
- int m_numContiguousLeafNodes;
- int m_numQuantizedContiguousNodes;
- btOptimizedBvhNodeDoubleData *m_contiguousNodesPtr;
- btQuantizedBvhNodeData *m_quantizedContiguousNodesPtr;
-
- int m_traversalMode;
- int m_numSubtreeHeaders;
- btBvhSubtreeInfoData *m_subTreeInfoPtr;
-};
-// clang-format on
-
-SIMD_FORCE_INLINE int btQuantizedBvh::calculateSerializeBufferSizeNew() const
-{
- return sizeof(btQuantizedBvhData);
-}
-
-#endif //BT_QUANTIZED_BVH_H
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp
deleted file mode 100644
index b7fe0a1f34..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp
+++ /dev/null
@@ -1,325 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSimpleBroadphase.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "LinearMath/btAabbUtil2.h"
-
-#include <new>
-
-void btSimpleBroadphase::validate()
-{
- for (int i = 0; i < m_numHandles; i++)
- {
- for (int j = i + 1; j < m_numHandles; j++)
- {
- btAssert(&m_pHandles[i] != &m_pHandles[j]);
- }
- }
-}
-
-btSimpleBroadphase::btSimpleBroadphase(int maxProxies, btOverlappingPairCache* overlappingPairCache)
- : m_pairCache(overlappingPairCache),
- m_ownsPairCache(false),
- m_invalidPair(0)
-{
- if (!overlappingPairCache)
- {
- void* mem = btAlignedAlloc(sizeof(btHashedOverlappingPairCache), 16);
- m_pairCache = new (mem) btHashedOverlappingPairCache();
- m_ownsPairCache = true;
- }
-
- // allocate handles buffer and put all handles on free list
- m_pHandlesRawPtr = btAlignedAlloc(sizeof(btSimpleBroadphaseProxy) * maxProxies, 16);
- m_pHandles = new (m_pHandlesRawPtr) btSimpleBroadphaseProxy[maxProxies];
- m_maxHandles = maxProxies;
- m_numHandles = 0;
- m_firstFreeHandle = 0;
- m_LastHandleIndex = -1;
-
- {
- for (int i = m_firstFreeHandle; i < maxProxies; i++)
- {
- m_pHandles[i].SetNextFree(i + 1);
- m_pHandles[i].m_uniqueId = i + 2; //any UID will do, we just avoid too trivial values (0,1) for debugging purposes
- }
- m_pHandles[maxProxies - 1].SetNextFree(0);
- }
-}
-
-btSimpleBroadphase::~btSimpleBroadphase()
-{
- btAlignedFree(m_pHandlesRawPtr);
-
- if (m_ownsPairCache)
- {
- m_pairCache->~btOverlappingPairCache();
- btAlignedFree(m_pairCache);
- }
-}
-
-btBroadphaseProxy* btSimpleBroadphase::createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* /*dispatcher*/)
-{
- if (m_numHandles >= m_maxHandles)
- {
- btAssert(0);
- return 0; //should never happen, but don't let the game crash ;-)
- }
- btAssert(aabbMin[0] <= aabbMax[0] && aabbMin[1] <= aabbMax[1] && aabbMin[2] <= aabbMax[2]);
-
- int newHandleIndex = allocHandle();
- btSimpleBroadphaseProxy* proxy = new (&m_pHandles[newHandleIndex]) btSimpleBroadphaseProxy(aabbMin, aabbMax, shapeType, userPtr, collisionFilterGroup, collisionFilterMask);
-
- return proxy;
-}
-
-class RemovingOverlapCallback : public btOverlapCallback
-{
-protected:
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- (void)pair;
- btAssert(0);
- return false;
- }
-};
-
-class RemovePairContainingProxy
-{
- btBroadphaseProxy* m_targetProxy;
-
-public:
- virtual ~RemovePairContainingProxy()
- {
- }
-
-protected:
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- btSimpleBroadphaseProxy* proxy0 = static_cast<btSimpleBroadphaseProxy*>(pair.m_pProxy0);
- btSimpleBroadphaseProxy* proxy1 = static_cast<btSimpleBroadphaseProxy*>(pair.m_pProxy1);
-
- return ((m_targetProxy == proxy0 || m_targetProxy == proxy1));
- };
-};
-
-void btSimpleBroadphase::destroyProxy(btBroadphaseProxy* proxyOrg, btDispatcher* dispatcher)
-{
- m_pairCache->removeOverlappingPairsContainingProxy(proxyOrg, dispatcher);
-
- btSimpleBroadphaseProxy* proxy0 = static_cast<btSimpleBroadphaseProxy*>(proxyOrg);
- freeHandle(proxy0);
-
- //validate();
-}
-
-void btSimpleBroadphase::getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const
-{
- const btSimpleBroadphaseProxy* sbp = getSimpleProxyFromProxy(proxy);
- aabbMin = sbp->m_aabbMin;
- aabbMax = sbp->m_aabbMax;
-}
-
-void btSimpleBroadphase::setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* /*dispatcher*/)
-{
- btSimpleBroadphaseProxy* sbp = getSimpleProxyFromProxy(proxy);
- sbp->m_aabbMin = aabbMin;
- sbp->m_aabbMax = aabbMax;
-}
-
-void btSimpleBroadphase::rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin, const btVector3& aabbMax)
-{
- for (int i = 0; i <= m_LastHandleIndex; i++)
- {
- btSimpleBroadphaseProxy* proxy = &m_pHandles[i];
- if (!proxy->m_clientObject)
- {
- continue;
- }
- rayCallback.process(proxy);
- }
-}
-
-void btSimpleBroadphase::aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback)
-{
- for (int i = 0; i <= m_LastHandleIndex; i++)
- {
- btSimpleBroadphaseProxy* proxy = &m_pHandles[i];
- if (!proxy->m_clientObject)
- {
- continue;
- }
- if (TestAabbAgainstAabb2(aabbMin, aabbMax, proxy->m_aabbMin, proxy->m_aabbMax))
- {
- callback.process(proxy);
- }
- }
-}
-
-bool btSimpleBroadphase::aabbOverlap(btSimpleBroadphaseProxy* proxy0, btSimpleBroadphaseProxy* proxy1)
-{
- return proxy0->m_aabbMin[0] <= proxy1->m_aabbMax[0] && proxy1->m_aabbMin[0] <= proxy0->m_aabbMax[0] &&
- proxy0->m_aabbMin[1] <= proxy1->m_aabbMax[1] && proxy1->m_aabbMin[1] <= proxy0->m_aabbMax[1] &&
- proxy0->m_aabbMin[2] <= proxy1->m_aabbMax[2] && proxy1->m_aabbMin[2] <= proxy0->m_aabbMax[2];
-}
-
-//then remove non-overlapping ones
-class CheckOverlapCallback : public btOverlapCallback
-{
-public:
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- return (!btSimpleBroadphase::aabbOverlap(static_cast<btSimpleBroadphaseProxy*>(pair.m_pProxy0), static_cast<btSimpleBroadphaseProxy*>(pair.m_pProxy1)));
- }
-};
-
-void btSimpleBroadphase::calculateOverlappingPairs(btDispatcher* dispatcher)
-{
- //first check for new overlapping pairs
- int i, j;
- if (m_numHandles >= 0)
- {
- int new_largest_index = -1;
- for (i = 0; i <= m_LastHandleIndex; i++)
- {
- btSimpleBroadphaseProxy* proxy0 = &m_pHandles[i];
- if (!proxy0->m_clientObject)
- {
- continue;
- }
- new_largest_index = i;
- for (j = i + 1; j <= m_LastHandleIndex; j++)
- {
- btSimpleBroadphaseProxy* proxy1 = &m_pHandles[j];
- btAssert(proxy0 != proxy1);
- if (!proxy1->m_clientObject)
- {
- continue;
- }
-
- btSimpleBroadphaseProxy* p0 = getSimpleProxyFromProxy(proxy0);
- btSimpleBroadphaseProxy* p1 = getSimpleProxyFromProxy(proxy1);
-
- if (aabbOverlap(p0, p1))
- {
- if (!m_pairCache->findPair(proxy0, proxy1))
- {
- m_pairCache->addOverlappingPair(proxy0, proxy1);
- }
- }
- else
- {
- if (!m_pairCache->hasDeferredRemoval())
- {
- if (m_pairCache->findPair(proxy0, proxy1))
- {
- m_pairCache->removeOverlappingPair(proxy0, proxy1, dispatcher);
- }
- }
- }
- }
- }
-
- m_LastHandleIndex = new_largest_index;
-
- if (m_ownsPairCache && m_pairCache->hasDeferredRemoval())
- {
- btBroadphasePairArray& overlappingPairArray = m_pairCache->getOverlappingPairArray();
-
- //perform a sort, to find duplicates and to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(btBroadphasePairSortPredicate());
-
- overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair);
- m_invalidPair = 0;
-
- btBroadphasePair previousPair;
- previousPair.m_pProxy0 = 0;
- previousPair.m_pProxy1 = 0;
- previousPair.m_algorithm = 0;
-
- for (i = 0; i < overlappingPairArray.size(); i++)
- {
- btBroadphasePair& pair = overlappingPairArray[i];
-
- bool isDuplicate = (pair == previousPair);
-
- previousPair = pair;
-
- bool needsRemoval = false;
-
- if (!isDuplicate)
- {
- bool hasOverlap = testAabbOverlap(pair.m_pProxy0, pair.m_pProxy1);
-
- if (hasOverlap)
- {
- needsRemoval = false; //callback->processOverlap(pair);
- }
- else
- {
- needsRemoval = true;
- }
- }
- else
- {
- //remove duplicate
- needsRemoval = true;
- //should have no algorithm
- btAssert(!pair.m_algorithm);
- }
-
- if (needsRemoval)
- {
- m_pairCache->cleanOverlappingPair(pair, dispatcher);
-
- // m_overlappingPairArray.swap(i,m_overlappingPairArray.size()-1);
- // m_overlappingPairArray.pop_back();
- pair.m_pProxy0 = 0;
- pair.m_pProxy1 = 0;
- m_invalidPair++;
- }
- }
-
- ///if you don't like to skip the invalid pairs in the array, execute following code:
-#define CLEAN_INVALID_PAIRS 1
-#ifdef CLEAN_INVALID_PAIRS
-
- //perform a sort, to sort 'invalid' pairs to the end
- overlappingPairArray.quickSort(btBroadphasePairSortPredicate());
-
- overlappingPairArray.resize(overlappingPairArray.size() - m_invalidPair);
- m_invalidPair = 0;
-#endif //CLEAN_INVALID_PAIRS
- }
- }
-}
-
-bool btSimpleBroadphase::testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
-{
- btSimpleBroadphaseProxy* p0 = getSimpleProxyFromProxy(proxy0);
- btSimpleBroadphaseProxy* p1 = getSimpleProxyFromProxy(proxy1);
- return aabbOverlap(p0, p1);
-}
-
-void btSimpleBroadphase::resetPool(btDispatcher* dispatcher)
-{
- //not yet
-}
diff --git a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h b/thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h
deleted file mode 100644
index 3e02fdc003..0000000000
--- a/thirdparty/bullet/BulletCollision/BroadphaseCollision/btSimpleBroadphase.h
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMPLE_BROADPHASE_H
-#define BT_SIMPLE_BROADPHASE_H
-
-#include "btOverlappingPairCache.h"
-
-struct btSimpleBroadphaseProxy : public btBroadphaseProxy
-{
- int m_nextFree;
-
- // int m_handleId;
-
- btSimpleBroadphaseProxy(){};
-
- btSimpleBroadphaseProxy(const btVector3& minpt, const btVector3& maxpt, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask)
- : btBroadphaseProxy(minpt, maxpt, userPtr, collisionFilterGroup, collisionFilterMask)
- {
- (void)shapeType;
- }
-
- SIMD_FORCE_INLINE void SetNextFree(int next) { m_nextFree = next; }
- SIMD_FORCE_INLINE int GetNextFree() const { return m_nextFree; }
-};
-
-///The SimpleBroadphase is just a unit-test for btAxisSweep3, bt32BitAxisSweep3, or btDbvtBroadphase, so use those classes instead.
-///It is a brute force aabb culling broadphase based on O(n^2) aabb checks
-class btSimpleBroadphase : public btBroadphaseInterface
-{
-protected:
- int m_numHandles; // number of active handles
- int m_maxHandles; // max number of handles
- int m_LastHandleIndex;
-
- btSimpleBroadphaseProxy* m_pHandles; // handles pool
-
- void* m_pHandlesRawPtr;
- int m_firstFreeHandle; // free handles list
-
- int allocHandle()
- {
- btAssert(m_numHandles < m_maxHandles);
- int freeHandle = m_firstFreeHandle;
- m_firstFreeHandle = m_pHandles[freeHandle].GetNextFree();
- m_numHandles++;
- if (freeHandle > m_LastHandleIndex)
- {
- m_LastHandleIndex = freeHandle;
- }
- return freeHandle;
- }
-
- void freeHandle(btSimpleBroadphaseProxy* proxy)
- {
- int handle = int(proxy - m_pHandles);
- btAssert(handle >= 0 && handle < m_maxHandles);
- if (handle == m_LastHandleIndex)
- {
- m_LastHandleIndex--;
- }
- proxy->SetNextFree(m_firstFreeHandle);
- m_firstFreeHandle = handle;
-
- proxy->m_clientObject = 0;
-
- m_numHandles--;
- }
-
- btOverlappingPairCache* m_pairCache;
- bool m_ownsPairCache;
-
- int m_invalidPair;
-
- inline btSimpleBroadphaseProxy* getSimpleProxyFromProxy(btBroadphaseProxy* proxy)
- {
- btSimpleBroadphaseProxy* proxy0 = static_cast<btSimpleBroadphaseProxy*>(proxy);
- return proxy0;
- }
-
- inline const btSimpleBroadphaseProxy* getSimpleProxyFromProxy(btBroadphaseProxy* proxy) const
- {
- const btSimpleBroadphaseProxy* proxy0 = static_cast<const btSimpleBroadphaseProxy*>(proxy);
- return proxy0;
- }
-
- ///reset broadphase internal structures, to ensure determinism/reproducability
- virtual void resetPool(btDispatcher* dispatcher);
-
- void validate();
-
-protected:
-public:
- btSimpleBroadphase(int maxProxies = 16384, btOverlappingPairCache* overlappingPairCache = 0);
- virtual ~btSimpleBroadphase();
-
- static bool aabbOverlap(btSimpleBroadphaseProxy* proxy0, btSimpleBroadphaseProxy* proxy1);
-
- virtual btBroadphaseProxy* createProxy(const btVector3& aabbMin, const btVector3& aabbMax, int shapeType, void* userPtr, int collisionFilterGroup, int collisionFilterMask, btDispatcher* dispatcher);
-
- virtual void calculateOverlappingPairs(btDispatcher* dispatcher);
-
- virtual void destroyProxy(btBroadphaseProxy* proxy, btDispatcher* dispatcher);
- virtual void setAabb(btBroadphaseProxy* proxy, const btVector3& aabbMin, const btVector3& aabbMax, btDispatcher* dispatcher);
- virtual void getAabb(btBroadphaseProxy* proxy, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btBroadphaseRayCallback& rayCallback, const btVector3& aabbMin = btVector3(0, 0, 0), const btVector3& aabbMax = btVector3(0, 0, 0));
- virtual void aabbTest(const btVector3& aabbMin, const btVector3& aabbMax, btBroadphaseAabbCallback& callback);
-
- btOverlappingPairCache* getOverlappingPairCache()
- {
- return m_pairCache;
- }
- const btOverlappingPairCache* getOverlappingPairCache() const
- {
- return m_pairCache;
- }
-
- bool testAabbOverlap(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1);
-
- ///getAabb returns the axis aligned bounding box in the 'global' coordinate frame
- ///will add some transform later
- virtual void getBroadphaseAabb(btVector3& aabbMin, btVector3& aabbMax) const
- {
- aabbMin.setValue(-BT_LARGE_FLOAT, -BT_LARGE_FLOAT, -BT_LARGE_FLOAT);
- aabbMax.setValue(BT_LARGE_FLOAT, BT_LARGE_FLOAT, BT_LARGE_FLOAT);
- }
-
- virtual void printStats()
- {
- // printf("btSimpleBroadphase.h\n");
- // printf("numHandles = %d, maxHandles = %d\n",m_numHandles,m_maxHandles);
- }
-};
-
-#endif //BT_SIMPLE_BROADPHASE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp
deleted file mode 100644
index 7647f67360..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btScalar.h"
-#include "SphereTriangleDetector.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-
-SphereTriangleDetector::SphereTriangleDetector(btSphereShape* sphere, btTriangleShape* triangle, btScalar contactBreakingThreshold)
- : m_sphere(sphere),
- m_triangle(triangle),
- m_contactBreakingThreshold(contactBreakingThreshold)
-{
-}
-
-void SphereTriangleDetector::getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults)
-{
- (void)debugDraw;
- const btTransform& transformA = input.m_transformA;
- const btTransform& transformB = input.m_transformB;
-
- btVector3 point, normal;
- btScalar timeOfImpact = btScalar(1.);
- btScalar depth = btScalar(0.);
- // output.m_distance = btScalar(BT_LARGE_FLOAT);
- //move sphere into triangle space
- btTransform sphereInTr = transformB.inverseTimes(transformA);
-
- if (collide(sphereInTr.getOrigin(), point, normal, depth, timeOfImpact, m_contactBreakingThreshold))
- {
- if (swapResults)
- {
- btVector3 normalOnB = transformB.getBasis() * normal;
- btVector3 normalOnA = -normalOnB;
- btVector3 pointOnA = transformB * point + normalOnB * depth;
- output.addContactPoint(normalOnA, pointOnA, depth);
- }
- else
- {
- output.addContactPoint(transformB.getBasis() * normal, transformB * point, depth);
- }
- }
-}
-
-// See also geometrictools.com
-// Basic idea: D = |p - (lo + t0*lv)| where t0 = lv . (p - lo) / lv . lv
-btScalar SegmentSqrDistance(const btVector3& from, const btVector3& to, const btVector3& p, btVector3& nearest);
-
-btScalar SegmentSqrDistance(const btVector3& from, const btVector3& to, const btVector3& p, btVector3& nearest)
-{
- btVector3 diff = p - from;
- btVector3 v = to - from;
- btScalar t = v.dot(diff);
-
- if (t > 0)
- {
- btScalar dotVV = v.dot(v);
- if (t < dotVV)
- {
- t /= dotVV;
- diff -= t * v;
- }
- else
- {
- t = 1;
- diff -= v;
- }
- }
- else
- t = 0;
-
- nearest = from + t * v;
- return diff.dot(diff);
-}
-
-bool SphereTriangleDetector::facecontains(const btVector3& p, const btVector3* vertices, btVector3& normal)
-{
- btVector3 lp(p);
- btVector3 lnormal(normal);
-
- return pointInTriangle(vertices, lnormal, &lp);
-}
-
-bool SphereTriangleDetector::collide(const btVector3& sphereCenter, btVector3& point, btVector3& resultNormal, btScalar& depth, btScalar& timeOfImpact, btScalar contactBreakingThreshold)
-{
- const btVector3* vertices = &m_triangle->getVertexPtr(0);
-
- btScalar radius = m_sphere->getRadius();
- btScalar radiusWithThreshold = radius + contactBreakingThreshold;
-
- btVector3 normal = (vertices[1] - vertices[0]).cross(vertices[2] - vertices[0]);
-
- btScalar l2 = normal.length2();
- bool hasContact = false;
- btVector3 contactPoint;
-
- if (l2 >= SIMD_EPSILON * SIMD_EPSILON)
- {
- normal /= btSqrt(l2);
-
- btVector3 p1ToCentre = sphereCenter - vertices[0];
- btScalar distanceFromPlane = p1ToCentre.dot(normal);
-
- if (distanceFromPlane < btScalar(0.))
- {
- //triangle facing the other way
- distanceFromPlane *= btScalar(-1.);
- normal *= btScalar(-1.);
- }
-
- bool isInsideContactPlane = distanceFromPlane < radiusWithThreshold;
-
- // Check for contact / intersection
-
- if (isInsideContactPlane)
- {
- if (facecontains(sphereCenter, vertices, normal))
- {
- // Inside the contact wedge - touches a point on the shell plane
- hasContact = true;
- contactPoint = sphereCenter - normal * distanceFromPlane;
- }
- else
- {
- // Could be inside one of the contact capsules
- btScalar contactCapsuleRadiusSqr = radiusWithThreshold * radiusWithThreshold;
- btScalar minDistSqr = contactCapsuleRadiusSqr;
- btVector3 nearestOnEdge;
- for (int i = 0; i < m_triangle->getNumEdges(); i++)
- {
- btVector3 pa;
- btVector3 pb;
-
- m_triangle->getEdge(i, pa, pb);
-
- btScalar distanceSqr = SegmentSqrDistance(pa, pb, sphereCenter, nearestOnEdge);
- if (distanceSqr < minDistSqr)
- {
- // Yep, we're inside a capsule, and record the capsule with smallest distance
- minDistSqr = distanceSqr;
- hasContact = true;
- contactPoint = nearestOnEdge;
- }
- }
- }
- }
- }
-
- if (hasContact)
- {
- btVector3 contactToCentre = sphereCenter - contactPoint;
- btScalar distanceSqr = contactToCentre.length2();
-
- if (distanceSqr < radiusWithThreshold * radiusWithThreshold)
- {
- if (distanceSqr > SIMD_EPSILON)
- {
- btScalar distance = btSqrt(distanceSqr);
- resultNormal = contactToCentre;
- resultNormal.normalize();
- point = contactPoint;
- depth = -(radius - distance);
- }
- else
- {
- resultNormal = normal;
- point = contactPoint;
- depth = -radius;
- }
- return true;
- }
- }
-
- return false;
-}
-
-bool SphereTriangleDetector::pointInTriangle(const btVector3 vertices[], const btVector3& normal, btVector3* p)
-{
- const btVector3* p1 = &vertices[0];
- const btVector3* p2 = &vertices[1];
- const btVector3* p3 = &vertices[2];
-
- btVector3 edge1(*p2 - *p1);
- btVector3 edge2(*p3 - *p2);
- btVector3 edge3(*p1 - *p3);
-
- btVector3 p1_to_p(*p - *p1);
- btVector3 p2_to_p(*p - *p2);
- btVector3 p3_to_p(*p - *p3);
-
- btVector3 edge1_normal(edge1.cross(normal));
- btVector3 edge2_normal(edge2.cross(normal));
- btVector3 edge3_normal(edge3.cross(normal));
-
- btScalar r1, r2, r3;
- r1 = edge1_normal.dot(p1_to_p);
- r2 = edge2_normal.dot(p2_to_p);
- r3 = edge3_normal.dot(p3_to_p);
- if ((r1 > 0 && r2 > 0 && r3 > 0) ||
- (r1 <= 0 && r2 <= 0 && r3 <= 0))
- return true;
- return false;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h
deleted file mode 100644
index d47e47530d..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/SphereTriangleDetector.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SPHERE_TRIANGLE_DETECTOR_H
-#define BT_SPHERE_TRIANGLE_DETECTOR_H
-
-#include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h"
-
-class btSphereShape;
-class btTriangleShape;
-
-/// sphere-triangle to match the btDiscreteCollisionDetectorInterface
-struct SphereTriangleDetector : public btDiscreteCollisionDetectorInterface
-{
- virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false);
-
- SphereTriangleDetector(btSphereShape* sphere, btTriangleShape* triangle, btScalar contactBreakingThreshold);
-
- virtual ~SphereTriangleDetector(){};
-
- bool collide(const btVector3& sphereCenter, btVector3& point, btVector3& resultNormal, btScalar& depth, btScalar& timeOfImpact, btScalar contactBreakingThreshold);
-
-private:
- bool pointInTriangle(const btVector3 vertices[], const btVector3& normal, btVector3* p);
- bool facecontains(const btVector3& p, const btVector3* vertices, btVector3& normal);
-
- btSphereShape* m_sphere;
- btTriangleShape* m_triangle;
- btScalar m_contactBreakingThreshold;
-};
-#endif //BT_SPHERE_TRIANGLE_DETECTOR_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp
deleted file mode 100644
index ac5de45d27..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "btCollisionDispatcher.h"
-#include "btCollisionObject.h"
-
-btActivatingCollisionAlgorithm::btActivatingCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btCollisionAlgorithm(ci)
-//,
-//m_colObj0(0),
-//m_colObj1(0)
-{
-}
-btActivatingCollisionAlgorithm::btActivatingCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper*, const btCollisionObjectWrapper*)
- : btCollisionAlgorithm(ci)
-//,
-//m_colObj0(0),
-//m_colObj1(0)
-{
- // if (ci.m_dispatcher1->needsCollision(colObj0,colObj1))
- // {
- // m_colObj0 = colObj0;
- // m_colObj1 = colObj1;
- //
- // m_colObj0->activate();
- // m_colObj1->activate();
- // }
-}
-
-btActivatingCollisionAlgorithm::~btActivatingCollisionAlgorithm()
-{
- // m_colObj0->activate();
- // m_colObj1->activate();
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h
deleted file mode 100644
index 862060571b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef __BT_ACTIVATING_COLLISION_ALGORITHM_H
-#define __BT_ACTIVATING_COLLISION_ALGORITHM_H
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-
-///This class is not enabled yet (work-in-progress) to more aggressively activate objects.
-class btActivatingCollisionAlgorithm : public btCollisionAlgorithm
-{
- // btCollisionObject* m_colObj0;
- // btCollisionObject* m_colObj1;
-
-protected:
- btActivatingCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci);
-
- btActivatingCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
-public:
- virtual ~btActivatingCollisionAlgorithm();
-};
-#endif //__BT_ACTIVATING_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp
deleted file mode 100644
index 6873a95d90..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,411 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-* The b2CollidePolygons routines are Copyright (c) 2006-2007 Erin Catto http://www.gphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///btBox2dBox2dCollisionAlgorithm, with modified b2CollidePolygons routines from the Box2D library.
-///The modifications include: switching from b2Vec to btVector3, redefinition of b2Dot, b2Cross
-
-#include "btBox2dBox2dCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionDispatch/btBoxBoxDetector.h"
-#include "BulletCollision/CollisionShapes/btBox2dShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-#define USE_PERSISTENT_CONTACTS 1
-
-btBox2dBox2dCollisionAlgorithm::btBox2dBox2dCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* obj0Wrap, const btCollisionObjectWrapper* obj1Wrap)
- : btActivatingCollisionAlgorithm(ci, obj0Wrap, obj1Wrap),
- m_ownManifold(false),
- m_manifoldPtr(mf)
-{
- if (!m_manifoldPtr && m_dispatcher->needsCollision(obj0Wrap->getCollisionObject(), obj1Wrap->getCollisionObject()))
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(obj0Wrap->getCollisionObject(), obj1Wrap->getCollisionObject());
- m_ownManifold = true;
- }
-}
-
-btBox2dBox2dCollisionAlgorithm::~btBox2dBox2dCollisionAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void b2CollidePolygons(btManifoldResult* manifold, const btBox2dShape* polyA, const btTransform& xfA, const btBox2dShape* polyB, const btTransform& xfB);
-
-//#include <stdio.h>
-void btBox2dBox2dCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- if (!m_manifoldPtr)
- return;
-
- const btBox2dShape* box0 = (const btBox2dShape*)body0Wrap->getCollisionShape();
- const btBox2dShape* box1 = (const btBox2dShape*)body1Wrap->getCollisionShape();
-
- resultOut->setPersistentManifold(m_manifoldPtr);
-
- b2CollidePolygons(resultOut, box0, body0Wrap->getWorldTransform(), box1, body1Wrap->getWorldTransform());
-
- // refreshContactPoints is only necessary when using persistent contact points. otherwise all points are newly added
- if (m_ownManifold)
- {
- resultOut->refreshContactPoints();
- }
-}
-
-btScalar btBox2dBox2dCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* /*body0*/, btCollisionObject* /*body1*/, const btDispatcherInfo& /*dispatchInfo*/, btManifoldResult* /*resultOut*/)
-{
- //not yet
- return 1.f;
-}
-
-struct ClipVertex
-{
- btVector3 v;
- int id;
- //b2ContactID id;
- //b2ContactID id;
-};
-
-#define b2Dot(a, b) (a).dot(b)
-#define b2Mul(a, b) (a) * (b)
-#define b2MulT(a, b) (a).transpose() * (b)
-#define b2Cross(a, b) (a).cross(b)
-#define btCrossS(a, s) btVector3(s* a.getY(), -s* a.getX(), 0.f)
-
-int b2_maxManifoldPoints = 2;
-
-static int ClipSegmentToLine(ClipVertex vOut[2], ClipVertex vIn[2],
- const btVector3& normal, btScalar offset)
-{
- // Start with no output points
- int numOut = 0;
-
- // Calculate the distance of end points to the line
- btScalar distance0 = b2Dot(normal, vIn[0].v) - offset;
- btScalar distance1 = b2Dot(normal, vIn[1].v) - offset;
-
- // If the points are behind the plane
- if (distance0 <= 0.0f) vOut[numOut++] = vIn[0];
- if (distance1 <= 0.0f) vOut[numOut++] = vIn[1];
-
- // If the points are on different sides of the plane
- if (distance0 * distance1 < 0.0f)
- {
- // Find intersection point of edge and plane
- btScalar interp = distance0 / (distance0 - distance1);
- vOut[numOut].v = vIn[0].v + interp * (vIn[1].v - vIn[0].v);
- if (distance0 > 0.0f)
- {
- vOut[numOut].id = vIn[0].id;
- }
- else
- {
- vOut[numOut].id = vIn[1].id;
- }
- ++numOut;
- }
-
- return numOut;
-}
-
-// Find the separation between poly1 and poly2 for a give edge normal on poly1.
-static btScalar EdgeSeparation(const btBox2dShape* poly1, const btTransform& xf1, int edge1,
- const btBox2dShape* poly2, const btTransform& xf2)
-{
- const btVector3* vertices1 = poly1->getVertices();
- const btVector3* normals1 = poly1->getNormals();
-
- int count2 = poly2->getVertexCount();
- const btVector3* vertices2 = poly2->getVertices();
-
- btAssert(0 <= edge1 && edge1 < poly1->getVertexCount());
-
- // Convert normal from poly1's frame into poly2's frame.
- btVector3 normal1World = b2Mul(xf1.getBasis(), normals1[edge1]);
- btVector3 normal1 = b2MulT(xf2.getBasis(), normal1World);
-
- // Find support vertex on poly2 for -normal.
- int index = 0;
- btScalar minDot = BT_LARGE_FLOAT;
-
- if (count2 > 0)
- index = (int)normal1.minDot(vertices2, count2, minDot);
-
- btVector3 v1 = b2Mul(xf1, vertices1[edge1]);
- btVector3 v2 = b2Mul(xf2, vertices2[index]);
- btScalar separation = b2Dot(v2 - v1, normal1World);
- return separation;
-}
-
-// Find the max separation between poly1 and poly2 using edge normals from poly1.
-static btScalar FindMaxSeparation(int* edgeIndex,
- const btBox2dShape* poly1, const btTransform& xf1,
- const btBox2dShape* poly2, const btTransform& xf2)
-{
- int count1 = poly1->getVertexCount();
- const btVector3* normals1 = poly1->getNormals();
-
- // Vector pointing from the centroid of poly1 to the centroid of poly2.
- btVector3 d = b2Mul(xf2, poly2->getCentroid()) - b2Mul(xf1, poly1->getCentroid());
- btVector3 dLocal1 = b2MulT(xf1.getBasis(), d);
-
- // Find edge normal on poly1 that has the largest projection onto d.
- int edge = 0;
- btScalar maxDot;
- if (count1 > 0)
- edge = (int)dLocal1.maxDot(normals1, count1, maxDot);
-
- // Get the separation for the edge normal.
- btScalar s = EdgeSeparation(poly1, xf1, edge, poly2, xf2);
- if (s > 0.0f)
- {
- return s;
- }
-
- // Check the separation for the previous edge normal.
- int prevEdge = edge - 1 >= 0 ? edge - 1 : count1 - 1;
- btScalar sPrev = EdgeSeparation(poly1, xf1, prevEdge, poly2, xf2);
- if (sPrev > 0.0f)
- {
- return sPrev;
- }
-
- // Check the separation for the next edge normal.
- int nextEdge = edge + 1 < count1 ? edge + 1 : 0;
- btScalar sNext = EdgeSeparation(poly1, xf1, nextEdge, poly2, xf2);
- if (sNext > 0.0f)
- {
- return sNext;
- }
-
- // Find the best edge and the search direction.
- int bestEdge;
- btScalar bestSeparation;
- int increment;
- if (sPrev > s && sPrev > sNext)
- {
- increment = -1;
- bestEdge = prevEdge;
- bestSeparation = sPrev;
- }
- else if (sNext > s)
- {
- increment = 1;
- bestEdge = nextEdge;
- bestSeparation = sNext;
- }
- else
- {
- *edgeIndex = edge;
- return s;
- }
-
- // Perform a local search for the best edge normal.
- for (;;)
- {
- if (increment == -1)
- edge = bestEdge - 1 >= 0 ? bestEdge - 1 : count1 - 1;
- else
- edge = bestEdge + 1 < count1 ? bestEdge + 1 : 0;
-
- s = EdgeSeparation(poly1, xf1, edge, poly2, xf2);
- if (s > 0.0f)
- {
- return s;
- }
-
- if (s > bestSeparation)
- {
- bestEdge = edge;
- bestSeparation = s;
- }
- else
- {
- break;
- }
- }
-
- *edgeIndex = bestEdge;
- return bestSeparation;
-}
-
-static void FindIncidentEdge(ClipVertex c[2],
- const btBox2dShape* poly1, const btTransform& xf1, int edge1,
- const btBox2dShape* poly2, const btTransform& xf2)
-{
- const btVector3* normals1 = poly1->getNormals();
-
- int count2 = poly2->getVertexCount();
- const btVector3* vertices2 = poly2->getVertices();
- const btVector3* normals2 = poly2->getNormals();
-
- btAssert(0 <= edge1 && edge1 < poly1->getVertexCount());
-
- // Get the normal of the reference edge in poly2's frame.
- btVector3 normal1 = b2MulT(xf2.getBasis(), b2Mul(xf1.getBasis(), normals1[edge1]));
-
- // Find the incident edge on poly2.
- int index = 0;
- btScalar minDot = BT_LARGE_FLOAT;
- for (int i = 0; i < count2; ++i)
- {
- btScalar dot = b2Dot(normal1, normals2[i]);
- if (dot < minDot)
- {
- minDot = dot;
- index = i;
- }
- }
-
- // Build the clip vertices for the incident edge.
- int i1 = index;
- int i2 = i1 + 1 < count2 ? i1 + 1 : 0;
-
- c[0].v = b2Mul(xf2, vertices2[i1]);
- // c[0].id.features.referenceEdge = (unsigned char)edge1;
- // c[0].id.features.incidentEdge = (unsigned char)i1;
- // c[0].id.features.incidentVertex = 0;
-
- c[1].v = b2Mul(xf2, vertices2[i2]);
- // c[1].id.features.referenceEdge = (unsigned char)edge1;
- // c[1].id.features.incidentEdge = (unsigned char)i2;
- // c[1].id.features.incidentVertex = 1;
-}
-
-// Find edge normal of max separation on A - return if separating axis is found
-// Find edge normal of max separation on B - return if separation axis is found
-// Choose reference edge as min(minA, minB)
-// Find incident edge
-// Clip
-
-// The normal points from 1 to 2
-void b2CollidePolygons(btManifoldResult* manifold,
- const btBox2dShape* polyA, const btTransform& xfA,
- const btBox2dShape* polyB, const btTransform& xfB)
-{
- int edgeA = 0;
- btScalar separationA = FindMaxSeparation(&edgeA, polyA, xfA, polyB, xfB);
- if (separationA > 0.0f)
- return;
-
- int edgeB = 0;
- btScalar separationB = FindMaxSeparation(&edgeB, polyB, xfB, polyA, xfA);
- if (separationB > 0.0f)
- return;
-
- const btBox2dShape* poly1; // reference poly
- const btBox2dShape* poly2; // incident poly
- btTransform xf1, xf2;
- int edge1; // reference edge
- unsigned char flip;
- const btScalar k_relativeTol = 0.98f;
- const btScalar k_absoluteTol = 0.001f;
-
- // TODO_ERIN use "radius" of poly for absolute tolerance.
- if (separationB > k_relativeTol * separationA + k_absoluteTol)
- {
- poly1 = polyB;
- poly2 = polyA;
- xf1 = xfB;
- xf2 = xfA;
- edge1 = edgeB;
- flip = 1;
- }
- else
- {
- poly1 = polyA;
- poly2 = polyB;
- xf1 = xfA;
- xf2 = xfB;
- edge1 = edgeA;
- flip = 0;
- }
-
- ClipVertex incidentEdge[2];
- FindIncidentEdge(incidentEdge, poly1, xf1, edge1, poly2, xf2);
-
- int count1 = poly1->getVertexCount();
- const btVector3* vertices1 = poly1->getVertices();
-
- btVector3 v11 = vertices1[edge1];
- btVector3 v12 = edge1 + 1 < count1 ? vertices1[edge1 + 1] : vertices1[0];
-
- //btVector3 dv = v12 - v11;
- btVector3 sideNormal = b2Mul(xf1.getBasis(), v12 - v11);
- sideNormal.normalize();
- btVector3 frontNormal = btCrossS(sideNormal, 1.0f);
-
- v11 = b2Mul(xf1, v11);
- v12 = b2Mul(xf1, v12);
-
- btScalar frontOffset = b2Dot(frontNormal, v11);
- btScalar sideOffset1 = -b2Dot(sideNormal, v11);
- btScalar sideOffset2 = b2Dot(sideNormal, v12);
-
- // Clip incident edge against extruded edge1 side edges.
- ClipVertex clipPoints1[2];
- clipPoints1[0].v.setValue(0, 0, 0);
- clipPoints1[1].v.setValue(0, 0, 0);
-
- ClipVertex clipPoints2[2];
- clipPoints2[0].v.setValue(0, 0, 0);
- clipPoints2[1].v.setValue(0, 0, 0);
-
- int np;
-
- // Clip to box side 1
- np = ClipSegmentToLine(clipPoints1, incidentEdge, -sideNormal, sideOffset1);
-
- if (np < 2)
- return;
-
- // Clip to negative box side 1
- np = ClipSegmentToLine(clipPoints2, clipPoints1, sideNormal, sideOffset2);
-
- if (np < 2)
- {
- return;
- }
-
- // Now clipPoints2 contains the clipped points.
- btVector3 manifoldNormal = flip ? -frontNormal : frontNormal;
-
- int pointCount = 0;
- for (int i = 0; i < b2_maxManifoldPoints; ++i)
- {
- btScalar separation = b2Dot(frontNormal, clipPoints2[i].v) - frontOffset;
-
- if (separation <= 0.0f)
- {
- //b2ManifoldPoint* cp = manifold->points + pointCount;
- //btScalar separation = separation;
- //cp->localPoint1 = b2MulT(xfA, clipPoints2[i].v);
- //cp->localPoint2 = b2MulT(xfB, clipPoints2[i].v);
-
- manifold->addContactPoint(-manifoldNormal, clipPoints2[i].v, separation);
-
- // cp->id = clipPoints2[i].id;
- // cp->id.features.flip = flip;
- ++pointCount;
- }
- }
-
- // manifold->pointCount = pointCount;}
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h
deleted file mode 100644
index 3b66d1fd0b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_BOX_2D_BOX_2D__COLLISION_ALGORITHM_H
-#define BT_BOX_2D_BOX_2D__COLLISION_ALGORITHM_H
-
-#include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-
-class btPersistentManifold;
-
-///box-box collision detection
-class btBox2dBox2dCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
-
-public:
- btBox2dBox2dCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btActivatingCollisionAlgorithm(ci) {}
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btBox2dBox2dCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
- virtual ~btBox2dBox2dCollisionAlgorithm();
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- {
- manifoldArray.push_back(m_manifoldPtr);
- }
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- int bbsize = sizeof(btBox2dBox2dCollisionAlgorithm);
- void* ptr = ci.m_dispatcher1->allocateCollisionAlgorithm(bbsize);
- return new (ptr) btBox2dBox2dCollisionAlgorithm(0, ci, body0Wrap, body1Wrap);
- }
- };
-};
-
-#endif //BT_BOX_2D_BOX_2D__COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp
deleted file mode 100644
index 7a391e059a..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btBoxBoxCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "btBoxBoxDetector.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-#define USE_PERSISTENT_CONTACTS 1
-
-btBoxBoxCollisionAlgorithm::btBoxBoxCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_ownManifold(false),
- m_manifoldPtr(mf)
-{
- if (!m_manifoldPtr && m_dispatcher->needsCollision(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject()))
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject());
- m_ownManifold = true;
- }
-}
-
-btBoxBoxCollisionAlgorithm::~btBoxBoxCollisionAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btBoxBoxCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- if (!m_manifoldPtr)
- return;
-
- const btBoxShape* box0 = (btBoxShape*)body0Wrap->getCollisionShape();
- const btBoxShape* box1 = (btBoxShape*)body1Wrap->getCollisionShape();
-
- /// report a contact. internally this will be kept persistent, and contact reduction is done
- resultOut->setPersistentManifold(m_manifoldPtr);
-#ifndef USE_PERSISTENT_CONTACTS
- m_manifoldPtr->clearManifold();
-#endif //USE_PERSISTENT_CONTACTS
-
- btDiscreteCollisionDetectorInterface::ClosestPointInput input;
- input.m_maximumDistanceSquared = BT_LARGE_FLOAT;
- input.m_transformA = body0Wrap->getWorldTransform();
- input.m_transformB = body1Wrap->getWorldTransform();
-
- btBoxBoxDetector detector(box0, box1);
- detector.getClosestPoints(input, *resultOut, dispatchInfo.m_debugDraw);
-
-#ifdef USE_PERSISTENT_CONTACTS
- // refreshContactPoints is only necessary when using persistent contact points. otherwise all points are newly added
- if (m_ownManifold)
- {
- resultOut->refreshContactPoints();
- }
-#endif //USE_PERSISTENT_CONTACTS
-}
-
-btScalar btBoxBoxCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* /*body0*/, btCollisionObject* /*body1*/, const btDispatcherInfo& /*dispatchInfo*/, btManifoldResult* /*resultOut*/)
-{
- //not yet
- return 1.f;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h
deleted file mode 100644
index eb21065765..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_BOX_BOX__COLLISION_ALGORITHM_H
-#define BT_BOX_BOX__COLLISION_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-
-class btPersistentManifold;
-
-///box-box collision detection
-class btBoxBoxCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
-
-public:
- btBoxBoxCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btActivatingCollisionAlgorithm(ci) {}
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btBoxBoxCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
- virtual ~btBoxBoxCollisionAlgorithm();
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- {
- manifoldArray.push_back(m_manifoldPtr);
- }
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- int bbsize = sizeof(btBoxBoxCollisionAlgorithm);
- void* ptr = ci.m_dispatcher1->allocateCollisionAlgorithm(bbsize);
- return new (ptr) btBoxBoxCollisionAlgorithm(0, ci, body0Wrap, body1Wrap);
- }
- };
-};
-
-#endif //BT_BOX_BOX__COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp
deleted file mode 100644
index 202039956e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp
+++ /dev/null
@@ -1,767 +0,0 @@
-/*
- * Box-Box collision detection re-distributed under the ZLib license with permission from Russell L. Smith
- * Original version is from Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.
- * All rights reserved. Email: russ@q12.org Web: www.q12.org
- Bullet Continuous Collision Detection and Physics Library
- Bullet is Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///ODE box-box collision detection is adapted to work with Bullet
-
-#include "btBoxBoxDetector.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-
-#include <float.h>
-#include <string.h>
-
-btBoxBoxDetector::btBoxBoxDetector(const btBoxShape* box1, const btBoxShape* box2)
- : m_box1(box1),
- m_box2(box2)
-{
-}
-
-// given two boxes (p1,R1,side1) and (p2,R2,side2), collide them together and
-// generate contact points. this returns 0 if there is no contact otherwise
-// it returns the number of contacts generated.
-// `normal' returns the contact normal.
-// `depth' returns the maximum penetration depth along that normal.
-// `return_code' returns a number indicating the type of contact that was
-// detected:
-// 1,2,3 = box 2 intersects with a face of box 1
-// 4,5,6 = box 1 intersects with a face of box 2
-// 7..15 = edge-edge contact
-// `maxc' is the maximum number of contacts allowed to be generated, i.e.
-// the size of the `contact' array.
-// `contact' and `skip' are the contact array information provided to the
-// collision functions. this function only fills in the position and depth
-// fields.
-struct dContactGeom;
-#define dDOTpq(a, b, p, q) ((a)[0] * (b)[0] + (a)[p] * (b)[q] + (a)[2 * (p)] * (b)[2 * (q)])
-#define dInfinity FLT_MAX
-
-/*PURE_INLINE btScalar dDOT (const btScalar *a, const btScalar *b) { return dDOTpq(a,b,1,1); }
-PURE_INLINE btScalar dDOT13 (const btScalar *a, const btScalar *b) { return dDOTpq(a,b,1,3); }
-PURE_INLINE btScalar dDOT31 (const btScalar *a, const btScalar *b) { return dDOTpq(a,b,3,1); }
-PURE_INLINE btScalar dDOT33 (const btScalar *a, const btScalar *b) { return dDOTpq(a,b,3,3); }
-*/
-static btScalar dDOT(const btScalar* a, const btScalar* b) { return dDOTpq(a, b, 1, 1); }
-static btScalar dDOT44(const btScalar* a, const btScalar* b) { return dDOTpq(a, b, 4, 4); }
-static btScalar dDOT41(const btScalar* a, const btScalar* b) { return dDOTpq(a, b, 4, 1); }
-static btScalar dDOT14(const btScalar* a, const btScalar* b) { return dDOTpq(a, b, 1, 4); }
-#define dMULTIPLYOP1_331(A, op, B, C) \
- { \
- (A)[0] op dDOT41((B), (C)); \
- (A)[1] op dDOT41((B + 1), (C)); \
- (A)[2] op dDOT41((B + 2), (C)); \
- }
-
-#define dMULTIPLYOP0_331(A, op, B, C) \
- { \
- (A)[0] op dDOT((B), (C)); \
- (A)[1] op dDOT((B + 4), (C)); \
- (A)[2] op dDOT((B + 8), (C)); \
- }
-
-#define dMULTIPLY1_331(A, B, C) dMULTIPLYOP1_331(A, =, B, C)
-#define dMULTIPLY0_331(A, B, C) dMULTIPLYOP0_331(A, =, B, C)
-
-typedef btScalar dMatrix3[4 * 3];
-
-void dLineClosestApproach(const btVector3& pa, const btVector3& ua,
- const btVector3& pb, const btVector3& ub,
- btScalar* alpha, btScalar* beta);
-void dLineClosestApproach(const btVector3& pa, const btVector3& ua,
- const btVector3& pb, const btVector3& ub,
- btScalar* alpha, btScalar* beta)
-{
- btVector3 p;
- p[0] = pb[0] - pa[0];
- p[1] = pb[1] - pa[1];
- p[2] = pb[2] - pa[2];
- btScalar uaub = dDOT(ua, ub);
- btScalar q1 = dDOT(ua, p);
- btScalar q2 = -dDOT(ub, p);
- btScalar d = 1 - uaub * uaub;
- if (d <= btScalar(0.0001f))
- {
- // @@@ this needs to be made more robust
- *alpha = 0;
- *beta = 0;
- }
- else
- {
- d = 1.f / d;
- *alpha = (q1 + uaub * q2) * d;
- *beta = (uaub * q1 + q2) * d;
- }
-}
-
-// find all the intersection points between the 2D rectangle with vertices
-// at (+/-h[0],+/-h[1]) and the 2D quadrilateral with vertices (p[0],p[1]),
-// (p[2],p[3]),(p[4],p[5]),(p[6],p[7]).
-//
-// the intersection points are returned as x,y pairs in the 'ret' array.
-// the number of intersection points is returned by the function (this will
-// be in the range 0 to 8).
-
-static int intersectRectQuad2(btScalar h[2], btScalar p[8], btScalar ret[16])
-{
- // q (and r) contain nq (and nr) coordinate points for the current (and
- // chopped) polygons
- int nq = 4, nr = 0;
- btScalar buffer[16];
- btScalar* q = p;
- btScalar* r = ret;
- for (int dir = 0; dir <= 1; dir++)
- {
- // direction notation: xy[0] = x axis, xy[1] = y axis
- for (int sign = -1; sign <= 1; sign += 2)
- {
- // chop q along the line xy[dir] = sign*h[dir]
- btScalar* pq = q;
- btScalar* pr = r;
- nr = 0;
- for (int i = nq; i > 0; i--)
- {
- // go through all points in q and all lines between adjacent points
- if (sign * pq[dir] < h[dir])
- {
- // this point is inside the chopping line
- pr[0] = pq[0];
- pr[1] = pq[1];
- pr += 2;
- nr++;
- if (nr & 8)
- {
- q = r;
- goto done;
- }
- }
- btScalar* nextq = (i > 1) ? pq + 2 : q;
- if ((sign * pq[dir] < h[dir]) ^ (sign * nextq[dir] < h[dir]))
- {
- // this line crosses the chopping line
- pr[1 - dir] = pq[1 - dir] + (nextq[1 - dir] - pq[1 - dir]) /
- (nextq[dir] - pq[dir]) * (sign * h[dir] - pq[dir]);
- pr[dir] = sign * h[dir];
- pr += 2;
- nr++;
- if (nr & 8)
- {
- q = r;
- goto done;
- }
- }
- pq += 2;
- }
- q = r;
- r = (q == ret) ? buffer : ret;
- nq = nr;
- }
- }
-done:
- if (q != ret) memcpy(ret, q, nr * 2 * sizeof(btScalar));
- return nr;
-}
-
-#define M__PI 3.14159265f
-
-// given n points in the plane (array p, of size 2*n), generate m points that
-// best represent the whole set. the definition of 'best' here is not
-// predetermined - the idea is to select points that give good box-box
-// collision detection behavior. the chosen point indexes are returned in the
-// array iret (of size m). 'i0' is always the first entry in the array.
-// n must be in the range [1..8]. m must be in the range [1..n]. i0 must be
-// in the range [0..n-1].
-
-void cullPoints2(int n, btScalar p[], int m, int i0, int iret[]);
-void cullPoints2(int n, btScalar p[], int m, int i0, int iret[])
-{
- // compute the centroid of the polygon in cx,cy
- int i, j;
- btScalar a, cx, cy, q;
- if (n == 1)
- {
- cx = p[0];
- cy = p[1];
- }
- else if (n == 2)
- {
- cx = btScalar(0.5) * (p[0] + p[2]);
- cy = btScalar(0.5) * (p[1] + p[3]);
- }
- else
- {
- a = 0;
- cx = 0;
- cy = 0;
- for (i = 0; i < (n - 1); i++)
- {
- q = p[i * 2] * p[i * 2 + 3] - p[i * 2 + 2] * p[i * 2 + 1];
- a += q;
- cx += q * (p[i * 2] + p[i * 2 + 2]);
- cy += q * (p[i * 2 + 1] + p[i * 2 + 3]);
- }
- q = p[n * 2 - 2] * p[1] - p[0] * p[n * 2 - 1];
- if (btFabs(a + q) > SIMD_EPSILON)
- {
- a = 1.f / (btScalar(3.0) * (a + q));
- }
- else
- {
- a = BT_LARGE_FLOAT;
- }
- cx = a * (cx + q * (p[n * 2 - 2] + p[0]));
- cy = a * (cy + q * (p[n * 2 - 1] + p[1]));
- }
-
- // compute the angle of each point w.r.t. the centroid
- btScalar A[8];
- for (i = 0; i < n; i++) A[i] = btAtan2(p[i * 2 + 1] - cy, p[i * 2] - cx);
-
- // search for points that have angles closest to A[i0] + i*(2*pi/m).
- int avail[8];
- for (i = 0; i < n; i++) avail[i] = 1;
- avail[i0] = 0;
- iret[0] = i0;
- iret++;
- for (j = 1; j < m; j++)
- {
- a = btScalar(j) * (2 * M__PI / m) + A[i0];
- if (a > M__PI) a -= 2 * M__PI;
- btScalar maxdiff = 1e9, diff;
-
- *iret = i0; // iret is not allowed to keep this value, but it sometimes does, when diff=#QNAN0
-
- for (i = 0; i < n; i++)
- {
- if (avail[i])
- {
- diff = btFabs(A[i] - a);
- if (diff > M__PI) diff = 2 * M__PI - diff;
- if (diff < maxdiff)
- {
- maxdiff = diff;
- *iret = i;
- }
- }
- }
-#if defined(DEBUG) || defined(_DEBUG)
- btAssert(*iret != i0); // ensure iret got set
-#endif
- avail[*iret] = 0;
- iret++;
- }
-}
-
-int dBoxBox2(const btVector3& p1, const dMatrix3 R1,
- const btVector3& side1, const btVector3& p2,
- const dMatrix3 R2, const btVector3& side2,
- btVector3& normal, btScalar* depth, int* return_code,
- int maxc, dContactGeom* /*contact*/, int /*skip*/, btDiscreteCollisionDetectorInterface::Result& output);
-int dBoxBox2(const btVector3& p1, const dMatrix3 R1,
- const btVector3& side1, const btVector3& p2,
- const dMatrix3 R2, const btVector3& side2,
- btVector3& normal, btScalar* depth, int* return_code,
- int maxc, dContactGeom* /*contact*/, int /*skip*/, btDiscreteCollisionDetectorInterface::Result& output)
-{
- const btScalar fudge_factor = btScalar(1.05);
- btVector3 p, pp, normalC(0.f, 0.f, 0.f);
- const btScalar* normalR = 0;
- btScalar A[3], B[3], R11, R12, R13, R21, R22, R23, R31, R32, R33,
- Q11, Q12, Q13, Q21, Q22, Q23, Q31, Q32, Q33, s, s2, l;
- int i, j, invert_normal, code;
-
- // get vector from centers of box 1 to box 2, relative to box 1
- p = p2 - p1;
- dMULTIPLY1_331(pp, R1, p); // get pp = p relative to body 1
-
- // get side lengths / 2
- A[0] = side1[0] * btScalar(0.5);
- A[1] = side1[1] * btScalar(0.5);
- A[2] = side1[2] * btScalar(0.5);
- B[0] = side2[0] * btScalar(0.5);
- B[1] = side2[1] * btScalar(0.5);
- B[2] = side2[2] * btScalar(0.5);
-
- // Rij is R1'*R2, i.e. the relative rotation between R1 and R2
- R11 = dDOT44(R1 + 0, R2 + 0);
- R12 = dDOT44(R1 + 0, R2 + 1);
- R13 = dDOT44(R1 + 0, R2 + 2);
- R21 = dDOT44(R1 + 1, R2 + 0);
- R22 = dDOT44(R1 + 1, R2 + 1);
- R23 = dDOT44(R1 + 1, R2 + 2);
- R31 = dDOT44(R1 + 2, R2 + 0);
- R32 = dDOT44(R1 + 2, R2 + 1);
- R33 = dDOT44(R1 + 2, R2 + 2);
-
- Q11 = btFabs(R11);
- Q12 = btFabs(R12);
- Q13 = btFabs(R13);
- Q21 = btFabs(R21);
- Q22 = btFabs(R22);
- Q23 = btFabs(R23);
- Q31 = btFabs(R31);
- Q32 = btFabs(R32);
- Q33 = btFabs(R33);
-
- // for all 15 possible separating axes:
- // * see if the axis separates the boxes. if so, return 0.
- // * find the depth of the penetration along the separating axis (s2)
- // * if this is the largest depth so far, record it.
- // the normal vector will be set to the separating axis with the smallest
- // depth. note: normalR is set to point to a column of R1 or R2 if that is
- // the smallest depth normal so far. otherwise normalR is 0 and normalC is
- // set to a vector relative to body 1. invert_normal is 1 if the sign of
- // the normal should be flipped.
-
-#define TST(expr1, expr2, norm, cc) \
- s2 = btFabs(expr1) - (expr2); \
- if (s2 > 0) return 0; \
- if (s2 > s) \
- { \
- s = s2; \
- normalR = norm; \
- invert_normal = ((expr1) < 0); \
- code = (cc); \
- }
-
- s = -dInfinity;
- invert_normal = 0;
- code = 0;
-
- // separating axis = u1,u2,u3
- TST(pp[0], (A[0] + B[0] * Q11 + B[1] * Q12 + B[2] * Q13), R1 + 0, 1);
- TST(pp[1], (A[1] + B[0] * Q21 + B[1] * Q22 + B[2] * Q23), R1 + 1, 2);
- TST(pp[2], (A[2] + B[0] * Q31 + B[1] * Q32 + B[2] * Q33), R1 + 2, 3);
-
- // separating axis = v1,v2,v3
- TST(dDOT41(R2 + 0, p), (A[0] * Q11 + A[1] * Q21 + A[2] * Q31 + B[0]), R2 + 0, 4);
- TST(dDOT41(R2 + 1, p), (A[0] * Q12 + A[1] * Q22 + A[2] * Q32 + B[1]), R2 + 1, 5);
- TST(dDOT41(R2 + 2, p), (A[0] * Q13 + A[1] * Q23 + A[2] * Q33 + B[2]), R2 + 2, 6);
-
- // note: cross product axes need to be scaled when s is computed.
- // normal (n1,n2,n3) is relative to box 1.
-#undef TST
-#define TST(expr1, expr2, n1, n2, n3, cc) \
- s2 = btFabs(expr1) - (expr2); \
- if (s2 > SIMD_EPSILON) return 0; \
- l = btSqrt((n1) * (n1) + (n2) * (n2) + (n3) * (n3)); \
- if (l > SIMD_EPSILON) \
- { \
- s2 /= l; \
- if (s2 * fudge_factor > s) \
- { \
- s = s2; \
- normalR = 0; \
- normalC[0] = (n1) / l; \
- normalC[1] = (n2) / l; \
- normalC[2] = (n3) / l; \
- invert_normal = ((expr1) < 0); \
- code = (cc); \
- } \
- }
-
- btScalar fudge2(1.0e-5f);
-
- Q11 += fudge2;
- Q12 += fudge2;
- Q13 += fudge2;
-
- Q21 += fudge2;
- Q22 += fudge2;
- Q23 += fudge2;
-
- Q31 += fudge2;
- Q32 += fudge2;
- Q33 += fudge2;
-
- // separating axis = u1 x (v1,v2,v3)
- TST(pp[2] * R21 - pp[1] * R31, (A[1] * Q31 + A[2] * Q21 + B[1] * Q13 + B[2] * Q12), 0, -R31, R21, 7);
- TST(pp[2] * R22 - pp[1] * R32, (A[1] * Q32 + A[2] * Q22 + B[0] * Q13 + B[2] * Q11), 0, -R32, R22, 8);
- TST(pp[2] * R23 - pp[1] * R33, (A[1] * Q33 + A[2] * Q23 + B[0] * Q12 + B[1] * Q11), 0, -R33, R23, 9);
-
- // separating axis = u2 x (v1,v2,v3)
- TST(pp[0] * R31 - pp[2] * R11, (A[0] * Q31 + A[2] * Q11 + B[1] * Q23 + B[2] * Q22), R31, 0, -R11, 10);
- TST(pp[0] * R32 - pp[2] * R12, (A[0] * Q32 + A[2] * Q12 + B[0] * Q23 + B[2] * Q21), R32, 0, -R12, 11);
- TST(pp[0] * R33 - pp[2] * R13, (A[0] * Q33 + A[2] * Q13 + B[0] * Q22 + B[1] * Q21), R33, 0, -R13, 12);
-
- // separating axis = u3 x (v1,v2,v3)
- TST(pp[1] * R11 - pp[0] * R21, (A[0] * Q21 + A[1] * Q11 + B[1] * Q33 + B[2] * Q32), -R21, R11, 0, 13);
- TST(pp[1] * R12 - pp[0] * R22, (A[0] * Q22 + A[1] * Q12 + B[0] * Q33 + B[2] * Q31), -R22, R12, 0, 14);
- TST(pp[1] * R13 - pp[0] * R23, (A[0] * Q23 + A[1] * Q13 + B[0] * Q32 + B[1] * Q31), -R23, R13, 0, 15);
-
-#undef TST
-
- if (!code) return 0;
-
- // if we get to this point, the boxes interpenetrate. compute the normal
- // in global coordinates.
- if (normalR)
- {
- normal[0] = normalR[0];
- normal[1] = normalR[4];
- normal[2] = normalR[8];
- }
- else
- {
- dMULTIPLY0_331(normal, R1, normalC);
- }
- if (invert_normal)
- {
- normal[0] = -normal[0];
- normal[1] = -normal[1];
- normal[2] = -normal[2];
- }
- *depth = -s;
-
- // compute contact point(s)
-
- if (code > 6)
- {
- // an edge from box 1 touches an edge from box 2.
- // find a point pa on the intersecting edge of box 1
- btVector3 pa;
- btScalar sign;
- for (i = 0; i < 3; i++) pa[i] = p1[i];
- for (j = 0; j < 3; j++)
- {
- sign = (dDOT14(normal, R1 + j) > 0) ? btScalar(1.0) : btScalar(-1.0);
- for (i = 0; i < 3; i++) pa[i] += sign * A[j] * R1[i * 4 + j];
- }
-
- // find a point pb on the intersecting edge of box 2
- btVector3 pb;
- for (i = 0; i < 3; i++) pb[i] = p2[i];
- for (j = 0; j < 3; j++)
- {
- sign = (dDOT14(normal, R2 + j) > 0) ? btScalar(-1.0) : btScalar(1.0);
- for (i = 0; i < 3; i++) pb[i] += sign * B[j] * R2[i * 4 + j];
- }
-
- btScalar alpha, beta;
- btVector3 ua, ub;
- for (i = 0; i < 3; i++) ua[i] = R1[((code)-7) / 3 + i * 4];
- for (i = 0; i < 3; i++) ub[i] = R2[((code)-7) % 3 + i * 4];
-
- dLineClosestApproach(pa, ua, pb, ub, &alpha, &beta);
- for (i = 0; i < 3; i++) pa[i] += ua[i] * alpha;
- for (i = 0; i < 3; i++) pb[i] += ub[i] * beta;
-
- {
- //contact[0].pos[i] = btScalar(0.5)*(pa[i]+pb[i]);
- //contact[0].depth = *depth;
- btVector3 pointInWorld;
-
-#ifdef USE_CENTER_POINT
- for (i = 0; i < 3; i++)
- pointInWorld[i] = (pa[i] + pb[i]) * btScalar(0.5);
- output.addContactPoint(-normal, pointInWorld, -*depth);
-#else
- output.addContactPoint(-normal, pb, -*depth);
-
-#endif //
- *return_code = code;
- }
- return 1;
- }
-
- // okay, we have a face-something intersection (because the separating
- // axis is perpendicular to a face). define face 'a' to be the reference
- // face (i.e. the normal vector is perpendicular to this) and face 'b' to be
- // the incident face (the closest face of the other box).
-
- const btScalar *Ra, *Rb, *pa, *pb, *Sa, *Sb;
- if (code <= 3)
- {
- Ra = R1;
- Rb = R2;
- pa = p1;
- pb = p2;
- Sa = A;
- Sb = B;
- }
- else
- {
- Ra = R2;
- Rb = R1;
- pa = p2;
- pb = p1;
- Sa = B;
- Sb = A;
- }
-
- // nr = normal vector of reference face dotted with axes of incident box.
- // anr = absolute values of nr.
- btVector3 normal2, nr, anr;
- if (code <= 3)
- {
- normal2[0] = normal[0];
- normal2[1] = normal[1];
- normal2[2] = normal[2];
- }
- else
- {
- normal2[0] = -normal[0];
- normal2[1] = -normal[1];
- normal2[2] = -normal[2];
- }
- dMULTIPLY1_331(nr, Rb, normal2);
- anr[0] = btFabs(nr[0]);
- anr[1] = btFabs(nr[1]);
- anr[2] = btFabs(nr[2]);
-
- // find the largest compontent of anr: this corresponds to the normal
- // for the indident face. the other axis numbers of the indicent face
- // are stored in a1,a2.
- int lanr, a1, a2;
- if (anr[1] > anr[0])
- {
- if (anr[1] > anr[2])
- {
- a1 = 0;
- lanr = 1;
- a2 = 2;
- }
- else
- {
- a1 = 0;
- a2 = 1;
- lanr = 2;
- }
- }
- else
- {
- if (anr[0] > anr[2])
- {
- lanr = 0;
- a1 = 1;
- a2 = 2;
- }
- else
- {
- a1 = 0;
- a2 = 1;
- lanr = 2;
- }
- }
-
- // compute center point of incident face, in reference-face coordinates
- btVector3 center;
- if (nr[lanr] < 0)
- {
- for (i = 0; i < 3; i++) center[i] = pb[i] - pa[i] + Sb[lanr] * Rb[i * 4 + lanr];
- }
- else
- {
- for (i = 0; i < 3; i++) center[i] = pb[i] - pa[i] - Sb[lanr] * Rb[i * 4 + lanr];
- }
-
- // find the normal and non-normal axis numbers of the reference box
- int codeN, code1, code2;
- if (code <= 3)
- codeN = code - 1;
- else
- codeN = code - 4;
- if (codeN == 0)
- {
- code1 = 1;
- code2 = 2;
- }
- else if (codeN == 1)
- {
- code1 = 0;
- code2 = 2;
- }
- else
- {
- code1 = 0;
- code2 = 1;
- }
-
- // find the four corners of the incident face, in reference-face coordinates
- btScalar quad[8]; // 2D coordinate of incident face (x,y pairs)
- btScalar c1, c2, m11, m12, m21, m22;
- c1 = dDOT14(center, Ra + code1);
- c2 = dDOT14(center, Ra + code2);
- // optimize this? - we have already computed this data above, but it is not
- // stored in an easy-to-index format. for now it's quicker just to recompute
- // the four dot products.
- m11 = dDOT44(Ra + code1, Rb + a1);
- m12 = dDOT44(Ra + code1, Rb + a2);
- m21 = dDOT44(Ra + code2, Rb + a1);
- m22 = dDOT44(Ra + code2, Rb + a2);
- {
- btScalar k1 = m11 * Sb[a1];
- btScalar k2 = m21 * Sb[a1];
- btScalar k3 = m12 * Sb[a2];
- btScalar k4 = m22 * Sb[a2];
- quad[0] = c1 - k1 - k3;
- quad[1] = c2 - k2 - k4;
- quad[2] = c1 - k1 + k3;
- quad[3] = c2 - k2 + k4;
- quad[4] = c1 + k1 + k3;
- quad[5] = c2 + k2 + k4;
- quad[6] = c1 + k1 - k3;
- quad[7] = c2 + k2 - k4;
- }
-
- // find the size of the reference face
- btScalar rect[2];
- rect[0] = Sa[code1];
- rect[1] = Sa[code2];
-
- // intersect the incident and reference faces
- btScalar ret[16];
- int n = intersectRectQuad2(rect, quad, ret);
- if (n < 1) return 0; // this should never happen
-
- // convert the intersection points into reference-face coordinates,
- // and compute the contact position and depth for each point. only keep
- // those points that have a positive (penetrating) depth. delete points in
- // the 'ret' array as necessary so that 'point' and 'ret' correspond.
- btScalar point[3 * 8]; // penetrating contact points
- btScalar dep[8]; // depths for those points
- btScalar det1 = 1.f / (m11 * m22 - m12 * m21);
- m11 *= det1;
- m12 *= det1;
- m21 *= det1;
- m22 *= det1;
- int cnum = 0; // number of penetrating contact points found
- for (j = 0; j < n; j++)
- {
- btScalar k1 = m22 * (ret[j * 2] - c1) - m12 * (ret[j * 2 + 1] - c2);
- btScalar k2 = -m21 * (ret[j * 2] - c1) + m11 * (ret[j * 2 + 1] - c2);
- for (i = 0; i < 3; i++) point[cnum * 3 + i] =
- center[i] + k1 * Rb[i * 4 + a1] + k2 * Rb[i * 4 + a2];
- dep[cnum] = Sa[codeN] - dDOT(normal2, point + cnum * 3);
- if (dep[cnum] >= 0)
- {
- ret[cnum * 2] = ret[j * 2];
- ret[cnum * 2 + 1] = ret[j * 2 + 1];
- cnum++;
- }
- }
- if (cnum < 1) return 0; // this should never happen
-
- // we can't generate more contacts than we actually have
- if (maxc > cnum) maxc = cnum;
- if (maxc < 1) maxc = 1;
-
- if (cnum <= maxc)
- {
- if (code < 4)
- {
- // we have less contacts than we need, so we use them all
- for (j = 0; j < cnum; j++)
- {
- btVector3 pointInWorld;
- for (i = 0; i < 3; i++)
- pointInWorld[i] = point[j * 3 + i] + pa[i];
- output.addContactPoint(-normal, pointInWorld, -dep[j]);
- }
- }
- else
- {
- // we have less contacts than we need, so we use them all
- for (j = 0; j < cnum; j++)
- {
- btVector3 pointInWorld;
- for (i = 0; i < 3; i++)
- pointInWorld[i] = point[j * 3 + i] + pa[i] - normal[i] * dep[j];
- //pointInWorld[i] = point[j*3+i] + pa[i];
- output.addContactPoint(-normal, pointInWorld, -dep[j]);
- }
- }
- }
- else
- {
- // we have more contacts than are wanted, some of them must be culled.
- // find the deepest point, it is always the first contact.
- int i1 = 0;
- btScalar maxdepth = dep[0];
- for (i = 1; i < cnum; i++)
- {
- if (dep[i] > maxdepth)
- {
- maxdepth = dep[i];
- i1 = i;
- }
- }
-
- int iret[8];
- cullPoints2(cnum, ret, maxc, i1, iret);
-
- for (j = 0; j < maxc; j++)
- {
- // dContactGeom *con = CONTACT(contact,skip*j);
- // for (i=0; i<3; i++) con->pos[i] = point[iret[j]*3+i] + pa[i];
- // con->depth = dep[iret[j]];
-
- btVector3 posInWorld;
- for (i = 0; i < 3; i++)
- posInWorld[i] = point[iret[j] * 3 + i] + pa[i];
- if (code < 4)
- {
- output.addContactPoint(-normal, posInWorld, -dep[iret[j]]);
- }
- else
- {
- output.addContactPoint(-normal, posInWorld - normal * dep[iret[j]], -dep[iret[j]]);
- }
- }
- cnum = maxc;
- }
-
- *return_code = code;
- return cnum;
-}
-
-void btBoxBoxDetector::getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* /*debugDraw*/, bool /*swapResults*/)
-{
- const btTransform& transformA = input.m_transformA;
- const btTransform& transformB = input.m_transformB;
-
- int skip = 0;
- dContactGeom* contact = 0;
-
- dMatrix3 R1;
- dMatrix3 R2;
-
- for (int j = 0; j < 3; j++)
- {
- R1[0 + 4 * j] = transformA.getBasis()[j].x();
- R2[0 + 4 * j] = transformB.getBasis()[j].x();
-
- R1[1 + 4 * j] = transformA.getBasis()[j].y();
- R2[1 + 4 * j] = transformB.getBasis()[j].y();
-
- R1[2 + 4 * j] = transformA.getBasis()[j].z();
- R2[2 + 4 * j] = transformB.getBasis()[j].z();
- }
-
- btVector3 normal;
- btScalar depth;
- int return_code;
- int maxc = 4;
-
- dBoxBox2(transformA.getOrigin(),
- R1,
- 2.f * m_box1->getHalfExtentsWithMargin(),
- transformB.getOrigin(),
- R2,
- 2.f * m_box2->getHalfExtentsWithMargin(),
- normal, &depth, &return_code,
- maxc, contact, skip,
- output);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h
deleted file mode 100644
index 9f7d988fc1..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btBoxBoxDetector.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Box-Box collision detection re-distributed under the ZLib license with permission from Russell L. Smith
- * Original version is from Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith.
- * All rights reserved. Email: russ@q12.org Web: www.q12.org
-
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#ifndef BT_BOX_BOX_DETECTOR_H
-#define BT_BOX_BOX_DETECTOR_H
-
-class btBoxShape;
-#include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h"
-
-/// btBoxBoxDetector wraps the ODE box-box collision detector
-/// re-distributed under the Zlib license with permission from Russell L. Smith
-struct btBoxBoxDetector : public btDiscreteCollisionDetectorInterface
-{
- const btBoxShape* m_box1;
- const btBoxShape* m_box2;
-
-public:
- btBoxBoxDetector(const btBoxShape* box1, const btBoxShape* box2);
-
- virtual ~btBoxBoxDetector(){};
-
- virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false);
-};
-
-#endif //BT_BOX_BOX_DETECTOR_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h
deleted file mode 100644
index d6e15f555b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionConfiguration.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_CONFIGURATION
-#define BT_COLLISION_CONFIGURATION
-
-struct btCollisionAlgorithmCreateFunc;
-
-class btPoolAllocator;
-
-///btCollisionConfiguration allows to configure Bullet collision detection
-///stack allocator size, default collision algorithms and persistent manifold pool size
-///@todo: describe the meaning
-class btCollisionConfiguration
-{
-public:
- virtual ~btCollisionConfiguration()
- {
- }
-
- ///memory pools
- virtual btPoolAllocator* getPersistentManifoldPool() = 0;
-
- virtual btPoolAllocator* getCollisionAlgorithmPool() = 0;
-
- virtual btCollisionAlgorithmCreateFunc* getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1) = 0;
-
- virtual btCollisionAlgorithmCreateFunc* getClosestPointsAlgorithmCreateFunc(int proxyType0, int proxyType1) = 0;
-};
-
-#endif //BT_COLLISION_CONFIGURATION
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h
deleted file mode 100644
index bd81284939..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionCreateFunc.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_CREATE_FUNC
-#define BT_COLLISION_CREATE_FUNC
-
-#include "LinearMath/btAlignedObjectArray.h"
-class btCollisionAlgorithm;
-class btCollisionObject;
-struct btCollisionObjectWrapper;
-struct btCollisionAlgorithmConstructionInfo;
-
-///Used by the btCollisionDispatcher to register and create instances for btCollisionAlgorithm
-struct btCollisionAlgorithmCreateFunc
-{
- bool m_swapped;
-
- btCollisionAlgorithmCreateFunc()
- : m_swapped(false)
- {
- }
- virtual ~btCollisionAlgorithmCreateFunc(){};
-
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo&, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- (void)body0Wrap;
- (void)body1Wrap;
- return 0;
- }
-};
-#endif //BT_COLLISION_CREATE_FUNC
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp
deleted file mode 100644
index 25b2b1ea46..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp
+++ /dev/null
@@ -1,289 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCollisionDispatcher.h"
-#include "LinearMath/btQuickprof.h"
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
-#include "LinearMath/btPoolAllocator.h"
-#include "BulletCollision/CollisionDispatch/btCollisionConfiguration.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-#ifdef BT_DEBUG
-#include <stdio.h>
-#endif
-
-btCollisionDispatcher::btCollisionDispatcher(btCollisionConfiguration* collisionConfiguration) : m_dispatcherFlags(btCollisionDispatcher::CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD),
- m_collisionConfiguration(collisionConfiguration)
-{
- int i;
-
- setNearCallback(defaultNearCallback);
-
- m_collisionAlgorithmPoolAllocator = collisionConfiguration->getCollisionAlgorithmPool();
-
- m_persistentManifoldPoolAllocator = collisionConfiguration->getPersistentManifoldPool();
-
- for (i = 0; i < MAX_BROADPHASE_COLLISION_TYPES; i++)
- {
- for (int j = 0; j < MAX_BROADPHASE_COLLISION_TYPES; j++)
- {
- m_doubleDispatchContactPoints[i][j] = m_collisionConfiguration->getCollisionAlgorithmCreateFunc(i, j);
- btAssert(m_doubleDispatchContactPoints[i][j]);
- m_doubleDispatchClosestPoints[i][j] = m_collisionConfiguration->getClosestPointsAlgorithmCreateFunc(i, j);
- }
- }
-}
-
-void btCollisionDispatcher::registerCollisionCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc)
-{
- m_doubleDispatchContactPoints[proxyType0][proxyType1] = createFunc;
-}
-
-void btCollisionDispatcher::registerClosestPointsCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc)
-{
- m_doubleDispatchClosestPoints[proxyType0][proxyType1] = createFunc;
-}
-
-btCollisionDispatcher::~btCollisionDispatcher()
-{
-}
-
-btPersistentManifold* btCollisionDispatcher::getNewManifold(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- //btAssert(gNumManifold < 65535);
-
- //optional relative contact breaking threshold, turned on by default (use setDispatcherFlags to switch off feature for improved performance)
-
- btScalar contactBreakingThreshold = (m_dispatcherFlags & btCollisionDispatcher::CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD) ? btMin(body0->getCollisionShape()->getContactBreakingThreshold(gContactBreakingThreshold), body1->getCollisionShape()->getContactBreakingThreshold(gContactBreakingThreshold))
- : gContactBreakingThreshold;
-
- btScalar contactProcessingThreshold = btMin(body0->getContactProcessingThreshold(), body1->getContactProcessingThreshold());
-
- void* mem = m_persistentManifoldPoolAllocator->allocate(sizeof(btPersistentManifold));
- if (NULL == mem)
- {
- //we got a pool memory overflow, by default we fallback to dynamically allocate memory. If we require a contiguous contact pool then assert.
- if ((m_dispatcherFlags & CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION) == 0)
- {
- mem = btAlignedAlloc(sizeof(btPersistentManifold), 16);
- }
- else
- {
- btAssert(0);
- //make sure to increase the m_defaultMaxPersistentManifoldPoolSize in the btDefaultCollisionConstructionInfo/btDefaultCollisionConfiguration
- return 0;
- }
- }
- btPersistentManifold* manifold = new (mem) btPersistentManifold(body0, body1, 0, contactBreakingThreshold, contactProcessingThreshold);
- manifold->m_index1a = m_manifoldsPtr.size();
- m_manifoldsPtr.push_back(manifold);
-
- return manifold;
-}
-
-void btCollisionDispatcher::clearManifold(btPersistentManifold* manifold)
-{
- manifold->clearManifold();
-}
-
-void btCollisionDispatcher::releaseManifold(btPersistentManifold* manifold)
-{
- //printf("releaseManifold: gNumManifold %d\n",gNumManifold);
- clearManifold(manifold);
-
- int findIndex = manifold->m_index1a;
- btAssert(findIndex < m_manifoldsPtr.size());
- m_manifoldsPtr.swap(findIndex, m_manifoldsPtr.size() - 1);
- m_manifoldsPtr[findIndex]->m_index1a = findIndex;
- m_manifoldsPtr.pop_back();
-
- manifold->~btPersistentManifold();
- if (m_persistentManifoldPoolAllocator->validPtr(manifold))
- {
- m_persistentManifoldPoolAllocator->freeMemory(manifold);
- }
- else
- {
- btAlignedFree(manifold);
- }
-}
-
-btCollisionAlgorithm* btCollisionDispatcher::findAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btPersistentManifold* sharedManifold, ebtDispatcherQueryType algoType)
-{
- btCollisionAlgorithmConstructionInfo ci;
-
- ci.m_dispatcher1 = this;
- ci.m_manifold = sharedManifold;
- btCollisionAlgorithm* algo = 0;
- if (algoType == BT_CONTACT_POINT_ALGORITHMS)
- {
- algo = m_doubleDispatchContactPoints[body0Wrap->getCollisionShape()->getShapeType()][body1Wrap->getCollisionShape()->getShapeType()]->CreateCollisionAlgorithm(ci, body0Wrap, body1Wrap);
- }
- else
- {
- algo = m_doubleDispatchClosestPoints[body0Wrap->getCollisionShape()->getShapeType()][body1Wrap->getCollisionShape()->getShapeType()]->CreateCollisionAlgorithm(ci, body0Wrap, body1Wrap);
- }
-
- return algo;
-}
-
-bool btCollisionDispatcher::needsResponse(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- //here you can do filtering
- bool hasResponse =
- (body0->hasContactResponse() && body1->hasContactResponse());
- //no response between two static/kinematic bodies:
- hasResponse = hasResponse &&
- ((!body0->isStaticOrKinematicObject()) || (!body1->isStaticOrKinematicObject()));
- return hasResponse;
-}
-
-bool btCollisionDispatcher::needsCollision(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- btAssert(body0);
- btAssert(body1);
-
- bool needsCollision = true;
-
-#ifdef BT_DEBUG
- if (!(m_dispatcherFlags & btCollisionDispatcher::CD_STATIC_STATIC_REPORTED))
- {
- //broadphase filtering already deals with this
- if (body0->isStaticOrKinematicObject() && body1->isStaticOrKinematicObject())
- {
- m_dispatcherFlags |= btCollisionDispatcher::CD_STATIC_STATIC_REPORTED;
- printf("warning btCollisionDispatcher::needsCollision: static-static collision!\n");
- }
- }
-#endif //BT_DEBUG
-
- if ((!body0->isActive()) && (!body1->isActive()))
- needsCollision = false;
- else if ((!body0->checkCollideWith(body1)) || (!body1->checkCollideWith(body0)))
- needsCollision = false;
-
- return needsCollision;
-}
-
-///interface for iterating all overlapping collision pairs, no matter how those pairs are stored (array, set, map etc)
-///this is useful for the collision dispatcher.
-class btCollisionPairCallback : public btOverlapCallback
-{
- const btDispatcherInfo& m_dispatchInfo;
- btCollisionDispatcher* m_dispatcher;
-
-public:
- btCollisionPairCallback(const btDispatcherInfo& dispatchInfo, btCollisionDispatcher* dispatcher)
- : m_dispatchInfo(dispatchInfo),
- m_dispatcher(dispatcher)
- {
- }
-
- /*btCollisionPairCallback& operator=(btCollisionPairCallback& other)
- {
- m_dispatchInfo = other.m_dispatchInfo;
- m_dispatcher = other.m_dispatcher;
- return *this;
- }
- */
-
- virtual ~btCollisionPairCallback() {}
-
- virtual bool processOverlap(btBroadphasePair& pair)
- {
- (*m_dispatcher->getNearCallback())(pair, *m_dispatcher, m_dispatchInfo);
- return false;
- }
-};
-
-void btCollisionDispatcher::dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& dispatchInfo, btDispatcher* dispatcher)
-{
- //m_blockedForChanges = true;
-
- btCollisionPairCallback collisionCallback(dispatchInfo, this);
-
- {
- BT_PROFILE("processAllOverlappingPairs");
- pairCache->processAllOverlappingPairs(&collisionCallback, dispatcher, dispatchInfo);
- }
-
- //m_blockedForChanges = false;
-}
-
-//by default, Bullet will use this near callback
-void btCollisionDispatcher::defaultNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo)
-{
- btCollisionObject* colObj0 = (btCollisionObject*)collisionPair.m_pProxy0->m_clientObject;
- btCollisionObject* colObj1 = (btCollisionObject*)collisionPair.m_pProxy1->m_clientObject;
-
- if (dispatcher.needsCollision(colObj0, colObj1))
- {
- btCollisionObjectWrapper obj0Wrap(0, colObj0->getCollisionShape(), colObj0, colObj0->getWorldTransform(), -1, -1);
- btCollisionObjectWrapper obj1Wrap(0, colObj1->getCollisionShape(), colObj1, colObj1->getWorldTransform(), -1, -1);
-
- //dispatcher will keep algorithms persistent in the collision pair
- if (!collisionPair.m_algorithm)
- {
- collisionPair.m_algorithm = dispatcher.findAlgorithm(&obj0Wrap, &obj1Wrap, 0, BT_CONTACT_POINT_ALGORITHMS);
- }
-
- if (collisionPair.m_algorithm)
- {
- btManifoldResult contactPointResult(&obj0Wrap, &obj1Wrap);
-
- if (dispatchInfo.m_dispatchFunc == btDispatcherInfo::DISPATCH_DISCRETE)
- {
- //discrete collision detection query
-
- collisionPair.m_algorithm->processCollision(&obj0Wrap, &obj1Wrap, dispatchInfo, &contactPointResult);
- }
- else
- {
- //continuous collision detection query, time of impact (toi)
- btScalar toi = collisionPair.m_algorithm->calculateTimeOfImpact(colObj0, colObj1, dispatchInfo, &contactPointResult);
- if (dispatchInfo.m_timeOfImpact > toi)
- dispatchInfo.m_timeOfImpact = toi;
- }
- }
- }
-}
-
-void* btCollisionDispatcher::allocateCollisionAlgorithm(int size)
-{
- void* mem = m_collisionAlgorithmPoolAllocator->allocate(size);
- if (NULL == mem)
- {
- //warn user for overflow?
- return btAlignedAlloc(static_cast<size_t>(size), 16);
- }
- return mem;
-}
-
-void btCollisionDispatcher::freeCollisionAlgorithm(void* ptr)
-{
- if (m_collisionAlgorithmPoolAllocator->validPtr(ptr))
- {
- m_collisionAlgorithmPoolAllocator->freeMemory(ptr);
- }
- else
- {
- btAlignedFree(ptr);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h
deleted file mode 100644
index 04309670cf..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcher.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION__DISPATCHER_H
-#define BT_COLLISION__DISPATCHER_H
-
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-class btIDebugDraw;
-class btOverlappingPairCache;
-class btPoolAllocator;
-class btCollisionConfiguration;
-
-#include "btCollisionCreateFunc.h"
-
-#define USE_DISPATCH_REGISTRY_ARRAY 1
-
-class btCollisionDispatcher;
-///user can override this nearcallback for collision filtering and more finegrained control over collision detection
-typedef void (*btNearCallback)(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo);
-
-///btCollisionDispatcher supports algorithms that handle ConvexConvex and ConvexConcave collision pairs.
-///Time of Impact, Closest Points and Penetration Depth.
-class btCollisionDispatcher : public btDispatcher
-{
-protected:
- int m_dispatcherFlags;
-
- btAlignedObjectArray<btPersistentManifold*> m_manifoldsPtr;
-
- btNearCallback m_nearCallback;
-
- btPoolAllocator* m_collisionAlgorithmPoolAllocator;
-
- btPoolAllocator* m_persistentManifoldPoolAllocator;
-
- btCollisionAlgorithmCreateFunc* m_doubleDispatchContactPoints[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES];
-
- btCollisionAlgorithmCreateFunc* m_doubleDispatchClosestPoints[MAX_BROADPHASE_COLLISION_TYPES][MAX_BROADPHASE_COLLISION_TYPES];
-
- btCollisionConfiguration* m_collisionConfiguration;
-
-public:
- enum DispatcherFlags
- {
- CD_STATIC_STATIC_REPORTED = 1,
- CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD = 2,
- CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION = 4
- };
-
- int getDispatcherFlags() const
- {
- return m_dispatcherFlags;
- }
-
- void setDispatcherFlags(int flags)
- {
- m_dispatcherFlags = flags;
- }
-
- ///registerCollisionCreateFunc allows registration of custom/alternative collision create functions
- void registerCollisionCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc);
-
- void registerClosestPointsCreateFunc(int proxyType0, int proxyType1, btCollisionAlgorithmCreateFunc* createFunc);
-
- int getNumManifolds() const
- {
- return int(m_manifoldsPtr.size());
- }
-
- btPersistentManifold** getInternalManifoldPointer()
- {
- return m_manifoldsPtr.size() ? &m_manifoldsPtr[0] : 0;
- }
-
- btPersistentManifold* getManifoldByIndexInternal(int index)
- {
- btAssert(index>=0);
- btAssert(index<m_manifoldsPtr.size());
- return m_manifoldsPtr[index];
- }
-
- const btPersistentManifold* getManifoldByIndexInternal(int index) const
- {
- btAssert(index>=0);
- btAssert(index<m_manifoldsPtr.size());
- return m_manifoldsPtr[index];
- }
-
- btCollisionDispatcher(btCollisionConfiguration* collisionConfiguration);
-
- virtual ~btCollisionDispatcher();
-
- virtual btPersistentManifold* getNewManifold(const btCollisionObject* b0, const btCollisionObject* b1);
-
- virtual void releaseManifold(btPersistentManifold* manifold);
-
- virtual void clearManifold(btPersistentManifold* manifold);
-
- btCollisionAlgorithm* findAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btPersistentManifold* sharedManifold, ebtDispatcherQueryType queryType);
-
- virtual bool needsCollision(const btCollisionObject* body0, const btCollisionObject* body1);
-
- virtual bool needsResponse(const btCollisionObject* body0, const btCollisionObject* body1);
-
- virtual void dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& dispatchInfo, btDispatcher* dispatcher);
-
- void setNearCallback(btNearCallback nearCallback)
- {
- m_nearCallback = nearCallback;
- }
-
- btNearCallback getNearCallback() const
- {
- return m_nearCallback;
- }
-
- //by default, Bullet will use this near callback
- static void defaultNearCallback(btBroadphasePair& collisionPair, btCollisionDispatcher& dispatcher, const btDispatcherInfo& dispatchInfo);
-
- virtual void* allocateCollisionAlgorithm(int size);
-
- virtual void freeCollisionAlgorithm(void* ptr);
-
- btCollisionConfiguration* getCollisionConfiguration()
- {
- return m_collisionConfiguration;
- }
-
- const btCollisionConfiguration* getCollisionConfiguration() const
- {
- return m_collisionConfiguration;
- }
-
- void setCollisionConfiguration(btCollisionConfiguration* config)
- {
- m_collisionConfiguration = config;
- }
-
- virtual btPoolAllocator* getInternalManifoldPool()
- {
- return m_persistentManifoldPoolAllocator;
- }
-
- virtual const btPoolAllocator* getInternalManifoldPool() const
- {
- return m_persistentManifoldPoolAllocator;
- }
-};
-
-#endif //BT_COLLISION__DISPATCHER_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.cpp
deleted file mode 100644
index 89bc8d920e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.cpp
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCollisionDispatcherMt.h"
-#include "LinearMath/btQuickprof.h"
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
-#include "LinearMath/btPoolAllocator.h"
-#include "BulletCollision/CollisionDispatch/btCollisionConfiguration.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-btCollisionDispatcherMt::btCollisionDispatcherMt(btCollisionConfiguration* config, int grainSize)
- : btCollisionDispatcher(config)
-{
- m_batchManifoldsPtr.resize(btGetTaskScheduler()->getNumThreads());
- m_batchUpdating = false;
- m_grainSize = grainSize; // iterations per task
-}
-
-btPersistentManifold* btCollisionDispatcherMt::getNewManifold(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- //optional relative contact breaking threshold, turned on by default (use setDispatcherFlags to switch off feature for improved performance)
-
- btScalar contactBreakingThreshold = (m_dispatcherFlags & btCollisionDispatcher::CD_USE_RELATIVE_CONTACT_BREAKING_THRESHOLD) ? btMin(body0->getCollisionShape()->getContactBreakingThreshold(gContactBreakingThreshold), body1->getCollisionShape()->getContactBreakingThreshold(gContactBreakingThreshold))
- : gContactBreakingThreshold;
-
- btScalar contactProcessingThreshold = btMin(body0->getContactProcessingThreshold(), body1->getContactProcessingThreshold());
-
- void* mem = m_persistentManifoldPoolAllocator->allocate(sizeof(btPersistentManifold));
- if (NULL == mem)
- {
- //we got a pool memory overflow, by default we fallback to dynamically allocate memory. If we require a contiguous contact pool then assert.
- if ((m_dispatcherFlags & CD_DISABLE_CONTACTPOOL_DYNAMIC_ALLOCATION) == 0)
- {
- mem = btAlignedAlloc(sizeof(btPersistentManifold), 16);
- }
- else
- {
- btAssert(0);
- //make sure to increase the m_defaultMaxPersistentManifoldPoolSize in the btDefaultCollisionConstructionInfo/btDefaultCollisionConfiguration
- return 0;
- }
- }
- btPersistentManifold* manifold = new (mem) btPersistentManifold(body0, body1, 0, contactBreakingThreshold, contactProcessingThreshold);
- if (!m_batchUpdating)
- {
- // batch updater will update manifold pointers array after finishing, so
- // only need to update array when not batch-updating
- //btAssert( !btThreadsAreRunning() );
- manifold->m_index1a = m_manifoldsPtr.size();
- m_manifoldsPtr.push_back(manifold);
- }
- else
- {
- m_batchManifoldsPtr[btGetCurrentThreadIndex()].push_back(manifold);
- }
-
- return manifold;
-}
-
-void btCollisionDispatcherMt::releaseManifold(btPersistentManifold* manifold)
-{
- clearManifold(manifold);
- //btAssert( !btThreadsAreRunning() );
- if (!m_batchUpdating)
- {
- // batch updater will update manifold pointers array after finishing, so
- // only need to update array when not batch-updating
- int findIndex = manifold->m_index1a;
- btAssert(findIndex < m_manifoldsPtr.size());
- m_manifoldsPtr.swap(findIndex, m_manifoldsPtr.size() - 1);
- m_manifoldsPtr[findIndex]->m_index1a = findIndex;
- m_manifoldsPtr.pop_back();
- }
-
- manifold->~btPersistentManifold();
- if (m_persistentManifoldPoolAllocator->validPtr(manifold))
- {
- m_persistentManifoldPoolAllocator->freeMemory(manifold);
- }
- else
- {
- btAlignedFree(manifold);
- }
-}
-
-struct CollisionDispatcherUpdater : public btIParallelForBody
-{
- btBroadphasePair* mPairArray;
- btNearCallback mCallback;
- btCollisionDispatcher* mDispatcher;
- const btDispatcherInfo* mInfo;
-
- CollisionDispatcherUpdater()
- {
- mPairArray = NULL;
- mCallback = NULL;
- mDispatcher = NULL;
- mInfo = NULL;
- }
- void forLoop(int iBegin, int iEnd) const
- {
- for (int i = iBegin; i < iEnd; ++i)
- {
- btBroadphasePair* pair = &mPairArray[i];
- mCallback(*pair, *mDispatcher, *mInfo);
- }
- }
-};
-
-void btCollisionDispatcherMt::dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& info, btDispatcher* dispatcher)
-{
- const int pairCount = pairCache->getNumOverlappingPairs();
- if (pairCount == 0)
- {
- return;
- }
- CollisionDispatcherUpdater updater;
- updater.mCallback = getNearCallback();
- updater.mPairArray = pairCache->getOverlappingPairArrayPtr();
- updater.mDispatcher = this;
- updater.mInfo = &info;
-
- m_batchUpdating = true;
- btParallelFor(0, pairCount, m_grainSize, updater);
- m_batchUpdating = false;
-
- // merge new manifolds, if any
- for (int i = 0; i < m_batchManifoldsPtr.size(); ++i)
- {
- btAlignedObjectArray<btPersistentManifold*>& batchManifoldsPtr = m_batchManifoldsPtr[i];
-
- for (int j = 0; j < batchManifoldsPtr.size(); ++j)
- {
- m_manifoldsPtr.push_back(batchManifoldsPtr[j]);
- }
-
- batchManifoldsPtr.resizeNoInitialize(0);
- }
-
- // update the indices (used when releasing manifolds)
- for (int i = 0; i < m_manifoldsPtr.size(); ++i)
- {
- m_manifoldsPtr[i]->m_index1a = i;
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.h
deleted file mode 100644
index 1155de2cfe..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionDispatcherMt.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_DISPATCHER_MT_H
-#define BT_COLLISION_DISPATCHER_MT_H
-
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "LinearMath/btThreads.h"
-
-class btCollisionDispatcherMt : public btCollisionDispatcher
-{
-public:
- btCollisionDispatcherMt(btCollisionConfiguration* config, int grainSize = 40);
-
- virtual btPersistentManifold* getNewManifold(const btCollisionObject* body0, const btCollisionObject* body1) BT_OVERRIDE;
- virtual void releaseManifold(btPersistentManifold* manifold) BT_OVERRIDE;
-
- virtual void dispatchAllCollisionPairs(btOverlappingPairCache* pairCache, const btDispatcherInfo& info, btDispatcher* dispatcher) BT_OVERRIDE;
-
-protected:
- btAlignedObjectArray<btAlignedObjectArray<btPersistentManifold*> > m_batchManifoldsPtr;
- bool m_batchUpdating;
- int m_grainSize;
-};
-
-#endif //BT_COLLISION_DISPATCHER_MT_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.cpp
deleted file mode 100644
index b48d9301d7..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.cpp
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCollisionObject.h"
-#include "LinearMath/btSerializer.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-
-btCollisionObject::btCollisionObject()
- : m_interpolationLinearVelocity(0.f, 0.f, 0.f),
- m_interpolationAngularVelocity(0.f, 0.f, 0.f),
- m_anisotropicFriction(1.f, 1.f, 1.f),
- m_hasAnisotropicFriction(false),
- m_contactProcessingThreshold(BT_LARGE_FLOAT),
- m_broadphaseHandle(0),
- m_collisionShape(0),
- m_extensionPointer(0),
- m_rootCollisionShape(0),
- m_collisionFlags(btCollisionObject::CF_STATIC_OBJECT),
- m_islandTag1(-1),
- m_companionId(-1),
- m_worldArrayIndex(-1),
- m_activationState1(1),
- m_deactivationTime(btScalar(0.)),
- m_friction(btScalar(0.5)),
- m_restitution(btScalar(0.)),
- m_rollingFriction(0.0f),
- m_spinningFriction(0.f),
- m_contactDamping(.1),
- m_contactStiffness(BT_LARGE_FLOAT),
- m_internalType(CO_COLLISION_OBJECT),
- m_userObjectPointer(0),
- m_userIndex2(-1),
- m_userIndex(-1),
- m_userIndex3(-1),
- m_hitFraction(btScalar(1.)),
- m_ccdSweptSphereRadius(btScalar(0.)),
- m_ccdMotionThreshold(btScalar(0.)),
- m_checkCollideWith(false),
- m_updateRevision(0)
-{
- m_worldTransform.setIdentity();
- m_interpolationWorldTransform.setIdentity();
-}
-
-btCollisionObject::~btCollisionObject()
-{
-}
-
-void btCollisionObject::setActivationState(int newState) const
-{
- if ((m_activationState1 != DISABLE_DEACTIVATION) && (m_activationState1 != DISABLE_SIMULATION))
- m_activationState1 = newState;
-}
-
-void btCollisionObject::forceActivationState(int newState) const
-{
- m_activationState1 = newState;
-}
-
-void btCollisionObject::activate(bool forceActivation) const
-{
- if (forceActivation || !(m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT)))
- {
- setActivationState(ACTIVE_TAG);
- m_deactivationTime = btScalar(0.);
- }
-}
-
-const char* btCollisionObject::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btCollisionObjectData* dataOut = (btCollisionObjectData*)dataBuffer;
-
- m_worldTransform.serialize(dataOut->m_worldTransform);
- m_interpolationWorldTransform.serialize(dataOut->m_interpolationWorldTransform);
- m_interpolationLinearVelocity.serialize(dataOut->m_interpolationLinearVelocity);
- m_interpolationAngularVelocity.serialize(dataOut->m_interpolationAngularVelocity);
- m_anisotropicFriction.serialize(dataOut->m_anisotropicFriction);
- dataOut->m_hasAnisotropicFriction = m_hasAnisotropicFriction;
- dataOut->m_contactProcessingThreshold = m_contactProcessingThreshold;
- dataOut->m_broadphaseHandle = 0;
- dataOut->m_collisionShape = serializer->getUniquePointer(m_collisionShape);
- dataOut->m_rootCollisionShape = 0; //@todo
- dataOut->m_collisionFlags = m_collisionFlags;
- dataOut->m_islandTag1 = m_islandTag1;
- dataOut->m_companionId = m_companionId;
- dataOut->m_activationState1 = m_activationState1;
- dataOut->m_deactivationTime = m_deactivationTime;
- dataOut->m_friction = m_friction;
- dataOut->m_rollingFriction = m_rollingFriction;
- dataOut->m_contactDamping = m_contactDamping;
- dataOut->m_contactStiffness = m_contactStiffness;
- dataOut->m_restitution = m_restitution;
- dataOut->m_internalType = m_internalType;
-
- char* name = (char*)serializer->findNameForPointer(this);
- dataOut->m_name = (char*)serializer->getUniquePointer(name);
- if (dataOut->m_name)
- {
- serializer->serializeName(name);
- }
- dataOut->m_hitFraction = m_hitFraction;
- dataOut->m_ccdSweptSphereRadius = m_ccdSweptSphereRadius;
- dataOut->m_ccdMotionThreshold = m_ccdMotionThreshold;
- dataOut->m_checkCollideWith = m_checkCollideWith;
- if (m_broadphaseHandle)
- {
- dataOut->m_collisionFilterGroup = m_broadphaseHandle->m_collisionFilterGroup;
- dataOut->m_collisionFilterMask = m_broadphaseHandle->m_collisionFilterMask;
- dataOut->m_uniqueId = m_broadphaseHandle->m_uniqueId;
- }
- else
- {
- dataOut->m_collisionFilterGroup = 0;
- dataOut->m_collisionFilterMask = 0;
- dataOut->m_uniqueId = -1;
- }
- return btCollisionObjectDataName;
-}
-
-void btCollisionObject::serializeSingleObject(class btSerializer* serializer) const
-{
- int len = calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_COLLISIONOBJECT_CODE, (void*)this);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h
deleted file mode 100644
index dbe82fd61f..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObject.h
+++ /dev/null
@@ -1,690 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_OBJECT_H
-#define BT_COLLISION_OBJECT_H
-
-#include "LinearMath/btTransform.h"
-
-//island management, m_activationState1
-#define ACTIVE_TAG 1
-#define ISLAND_SLEEPING 2
-#define WANTS_DEACTIVATION 3
-#define DISABLE_DEACTIVATION 4
-#define DISABLE_SIMULATION 5
-#define FIXED_BASE_MULTI_BODY 6
-
-struct btBroadphaseProxy;
-class btCollisionShape;
-struct btCollisionShapeData;
-#include "LinearMath/btMotionState.h"
-#include "LinearMath/btAlignedAllocator.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-typedef btAlignedObjectArray<class btCollisionObject*> btCollisionObjectArray;
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btCollisionObjectData btCollisionObjectDoubleData
-#define btCollisionObjectDataName "btCollisionObjectDoubleData"
-#else
-#define btCollisionObjectData btCollisionObjectFloatData
-#define btCollisionObjectDataName "btCollisionObjectFloatData"
-#endif
-
-/// btCollisionObject can be used to manage collision detection objects.
-/// btCollisionObject maintains all information that is needed for a collision detection: Shape, Transform and AABB proxy.
-/// They can be added to the btCollisionWorld.
-ATTRIBUTE_ALIGNED16(class)
-btCollisionObject
-{
-protected:
- btTransform m_worldTransform;
-
- ///m_interpolationWorldTransform is used for CCD and interpolation
- ///it can be either previous or future (predicted) transform
- btTransform m_interpolationWorldTransform;
- //those two are experimental: just added for bullet time effect, so you can still apply impulses (directly modifying velocities)
- //without destroying the continuous interpolated motion (which uses this interpolation velocities)
- btVector3 m_interpolationLinearVelocity;
- btVector3 m_interpolationAngularVelocity;
-
- btVector3 m_anisotropicFriction;
- int m_hasAnisotropicFriction;
- btScalar m_contactProcessingThreshold;
-
- btBroadphaseProxy* m_broadphaseHandle;
- btCollisionShape* m_collisionShape;
- ///m_extensionPointer is used by some internal low-level Bullet extensions.
- void* m_extensionPointer;
-
- ///m_rootCollisionShape is temporarily used to store the original collision shape
- ///The m_collisionShape might be temporarily replaced by a child collision shape during collision detection purposes
- ///If it is NULL, the m_collisionShape is not temporarily replaced.
- btCollisionShape* m_rootCollisionShape;
-
- int m_collisionFlags;
-
- int m_islandTag1;
- int m_companionId;
- int m_worldArrayIndex; // index of object in world's collisionObjects array
-
- mutable int m_activationState1;
- mutable btScalar m_deactivationTime;
-
- btScalar m_friction;
- btScalar m_restitution;
- btScalar m_rollingFriction; //torsional friction orthogonal to contact normal (useful to stop spheres rolling forever)
- btScalar m_spinningFriction; // torsional friction around the contact normal (useful for grasping)
- btScalar m_contactDamping;
- btScalar m_contactStiffness;
-
- ///m_internalType is reserved to distinguish Bullet's btCollisionObject, btRigidBody, btSoftBody, btGhostObject etc.
- ///do not assign your own m_internalType unless you write a new dynamics object class.
- int m_internalType;
-
- ///users can point to their objects, m_userPointer is not used by Bullet, see setUserPointer/getUserPointer
-
- void* m_userObjectPointer;
-
- int m_userIndex2;
-
- int m_userIndex;
-
- int m_userIndex3;
-
- ///time of impact calculation
- btScalar m_hitFraction;
-
- ///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
- btScalar m_ccdSweptSphereRadius;
-
- /// Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold
- btScalar m_ccdMotionThreshold;
-
- /// If some object should have elaborate collision filtering by sub-classes
- int m_checkCollideWith;
-
- btAlignedObjectArray<const btCollisionObject*> m_objectsWithoutCollisionCheck;
-
- ///internal update revision number. It will be increased when the object changes. This allows some subsystems to perform lazy evaluation.
- int m_updateRevision;
-
- btVector3 m_customDebugColorRGB;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- enum CollisionFlags
- {
- CF_DYNAMIC_OBJECT = 0,
- CF_STATIC_OBJECT = 1,
- CF_KINEMATIC_OBJECT = 2,
- CF_NO_CONTACT_RESPONSE = 4,
- CF_CUSTOM_MATERIAL_CALLBACK = 8, //this allows per-triangle material (friction/restitution)
- CF_CHARACTER_OBJECT = 16,
- CF_DISABLE_VISUALIZE_OBJECT = 32, //disable debug drawing
- CF_DISABLE_SPU_COLLISION_PROCESSING = 64, //disable parallel/SPU processing
- CF_HAS_CONTACT_STIFFNESS_DAMPING = 128,
- CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR = 256,
- CF_HAS_FRICTION_ANCHOR = 512,
- CF_HAS_COLLISION_SOUND_TRIGGER = 1024
- };
-
- enum CollisionObjectTypes
- {
- CO_COLLISION_OBJECT = 1,
- CO_RIGID_BODY = 2,
- ///CO_GHOST_OBJECT keeps track of all objects overlapping its AABB and that pass its collision filter
- ///It is useful for collision sensors, explosion objects, character controller etc.
- CO_GHOST_OBJECT = 4,
- CO_SOFT_BODY = 8,
- CO_HF_FLUID = 16,
- CO_USER_TYPE = 32,
- CO_FEATHERSTONE_LINK = 64
- };
-
- enum AnisotropicFrictionFlags
- {
- CF_ANISOTROPIC_FRICTION_DISABLED = 0,
- CF_ANISOTROPIC_FRICTION = 1,
- CF_ANISOTROPIC_ROLLING_FRICTION = 2
- };
-
- SIMD_FORCE_INLINE bool mergesSimulationIslands() const
- {
- ///static objects, kinematic and object without contact response don't merge islands
- return ((m_collisionFlags & (CF_STATIC_OBJECT | CF_KINEMATIC_OBJECT | CF_NO_CONTACT_RESPONSE)) == 0);
- }
-
- const btVector3& getAnisotropicFriction() const
- {
- return m_anisotropicFriction;
- }
- void setAnisotropicFriction(const btVector3& anisotropicFriction, int frictionMode = CF_ANISOTROPIC_FRICTION)
- {
- m_anisotropicFriction = anisotropicFriction;
- bool isUnity = (anisotropicFriction[0] != 1.f) || (anisotropicFriction[1] != 1.f) || (anisotropicFriction[2] != 1.f);
- m_hasAnisotropicFriction = isUnity ? frictionMode : 0;
- }
- bool hasAnisotropicFriction(int frictionMode = CF_ANISOTROPIC_FRICTION) const
- {
- return (m_hasAnisotropicFriction & frictionMode) != 0;
- }
-
- ///the constraint solver can discard solving contacts, if the distance is above this threshold. 0 by default.
- ///Note that using contacts with positive distance can improve stability. It increases, however, the chance of colliding with degerate contacts, such as 'interior' triangle edges
- void setContactProcessingThreshold(btScalar contactProcessingThreshold)
- {
- m_contactProcessingThreshold = contactProcessingThreshold;
- }
- btScalar getContactProcessingThreshold() const
- {
- return m_contactProcessingThreshold;
- }
-
- SIMD_FORCE_INLINE bool isStaticObject() const
- {
- return (m_collisionFlags & CF_STATIC_OBJECT) != 0;
- }
-
- SIMD_FORCE_INLINE bool isKinematicObject() const
- {
- return (m_collisionFlags & CF_KINEMATIC_OBJECT) != 0;
- }
-
- SIMD_FORCE_INLINE bool isStaticOrKinematicObject() const
- {
- return (m_collisionFlags & (CF_KINEMATIC_OBJECT | CF_STATIC_OBJECT)) != 0;
- }
-
- SIMD_FORCE_INLINE bool hasContactResponse() const
- {
- return (m_collisionFlags & CF_NO_CONTACT_RESPONSE) == 0;
- }
-
- btCollisionObject();
-
- virtual ~btCollisionObject();
-
- virtual void setCollisionShape(btCollisionShape * collisionShape)
- {
- m_updateRevision++;
- m_collisionShape = collisionShape;
- m_rootCollisionShape = collisionShape;
- }
-
- SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const
- {
- return m_collisionShape;
- }
-
- SIMD_FORCE_INLINE btCollisionShape* getCollisionShape()
- {
- return m_collisionShape;
- }
-
- void setIgnoreCollisionCheck(const btCollisionObject* co, bool ignoreCollisionCheck)
- {
- if (ignoreCollisionCheck)
- {
- //We don't check for duplicates. Is it ok to leave that up to the user of this API?
- //int index = m_objectsWithoutCollisionCheck.findLinearSearch(co);
- //if (index == m_objectsWithoutCollisionCheck.size())
- //{
- m_objectsWithoutCollisionCheck.push_back(co);
- //}
- }
- else
- {
- m_objectsWithoutCollisionCheck.remove(co);
- }
- m_checkCollideWith = m_objectsWithoutCollisionCheck.size() > 0;
- }
-
- int getNumObjectsWithoutCollision() const
- {
- return m_objectsWithoutCollisionCheck.size();
- }
-
- const btCollisionObject* getObjectWithoutCollision(int index)
- {
- return m_objectsWithoutCollisionCheck[index];
- }
-
- virtual bool checkCollideWithOverride(const btCollisionObject* co) const
- {
- int index = m_objectsWithoutCollisionCheck.findLinearSearch(co);
- if (index < m_objectsWithoutCollisionCheck.size())
- {
- return false;
- }
- return true;
- }
-
- ///Avoid using this internal API call, the extension pointer is used by some Bullet extensions.
- ///If you need to store your own user pointer, use 'setUserPointer/getUserPointer' instead.
- void* internalGetExtensionPointer() const
- {
- return m_extensionPointer;
- }
- ///Avoid using this internal API call, the extension pointer is used by some Bullet extensions
- ///If you need to store your own user pointer, use 'setUserPointer/getUserPointer' instead.
- void internalSetExtensionPointer(void* pointer)
- {
- m_extensionPointer = pointer;
- }
-
- SIMD_FORCE_INLINE int getActivationState() const { return m_activationState1; }
-
- void setActivationState(int newState) const;
-
- void setDeactivationTime(btScalar time)
- {
- m_deactivationTime = time;
- }
- btScalar getDeactivationTime() const
- {
- return m_deactivationTime;
- }
-
- void forceActivationState(int newState) const;
-
- void activate(bool forceActivation = false) const;
-
- SIMD_FORCE_INLINE bool isActive() const
- {
- return ((getActivationState() != FIXED_BASE_MULTI_BODY) && (getActivationState() != ISLAND_SLEEPING) && (getActivationState() != DISABLE_SIMULATION));
- }
-
- void setRestitution(btScalar rest)
- {
- m_updateRevision++;
- m_restitution = rest;
- }
- btScalar getRestitution() const
- {
- return m_restitution;
- }
- void setFriction(btScalar frict)
- {
- m_updateRevision++;
- m_friction = frict;
- }
- btScalar getFriction() const
- {
- return m_friction;
- }
-
- void setRollingFriction(btScalar frict)
- {
- m_updateRevision++;
- m_rollingFriction = frict;
- }
- btScalar getRollingFriction() const
- {
- return m_rollingFriction;
- }
- void setSpinningFriction(btScalar frict)
- {
- m_updateRevision++;
- m_spinningFriction = frict;
- }
- btScalar getSpinningFriction() const
- {
- return m_spinningFriction;
- }
- void setContactStiffnessAndDamping(btScalar stiffness, btScalar damping)
- {
- m_updateRevision++;
- m_contactStiffness = stiffness;
- m_contactDamping = damping;
-
- m_collisionFlags |= CF_HAS_CONTACT_STIFFNESS_DAMPING;
-
- //avoid divisions by zero...
- if (m_contactStiffness < SIMD_EPSILON)
- {
- m_contactStiffness = SIMD_EPSILON;
- }
- }
-
- btScalar getContactStiffness() const
- {
- return m_contactStiffness;
- }
-
- btScalar getContactDamping() const
- {
- return m_contactDamping;
- }
-
- ///reserved for Bullet internal usage
- int getInternalType() const
- {
- return m_internalType;
- }
-
- btTransform& getWorldTransform()
- {
- return m_worldTransform;
- }
-
- const btTransform& getWorldTransform() const
- {
- return m_worldTransform;
- }
-
- void setWorldTransform(const btTransform& worldTrans)
- {
- m_updateRevision++;
- m_worldTransform = worldTrans;
- }
-
- SIMD_FORCE_INLINE btBroadphaseProxy* getBroadphaseHandle()
- {
- return m_broadphaseHandle;
- }
-
- SIMD_FORCE_INLINE const btBroadphaseProxy* getBroadphaseHandle() const
- {
- return m_broadphaseHandle;
- }
-
- void setBroadphaseHandle(btBroadphaseProxy * handle)
- {
- m_broadphaseHandle = handle;
- }
-
- const btTransform& getInterpolationWorldTransform() const
- {
- return m_interpolationWorldTransform;
- }
-
- btTransform& getInterpolationWorldTransform()
- {
- return m_interpolationWorldTransform;
- }
-
- void setInterpolationWorldTransform(const btTransform& trans)
- {
- m_updateRevision++;
- m_interpolationWorldTransform = trans;
- }
-
- void setInterpolationLinearVelocity(const btVector3& linvel)
- {
- m_updateRevision++;
- m_interpolationLinearVelocity = linvel;
- }
-
- void setInterpolationAngularVelocity(const btVector3& angvel)
- {
- m_updateRevision++;
- m_interpolationAngularVelocity = angvel;
- }
-
- const btVector3& getInterpolationLinearVelocity() const
- {
- return m_interpolationLinearVelocity;
- }
-
- const btVector3& getInterpolationAngularVelocity() const
- {
- return m_interpolationAngularVelocity;
- }
-
- SIMD_FORCE_INLINE int getIslandTag() const
- {
- return m_islandTag1;
- }
-
- void setIslandTag(int tag)
- {
- m_islandTag1 = tag;
- }
-
- SIMD_FORCE_INLINE int getCompanionId() const
- {
- return m_companionId;
- }
-
- void setCompanionId(int id)
- {
- m_companionId = id;
- }
-
- SIMD_FORCE_INLINE int getWorldArrayIndex() const
- {
- return m_worldArrayIndex;
- }
-
- // only should be called by CollisionWorld
- void setWorldArrayIndex(int ix)
- {
- m_worldArrayIndex = ix;
- }
-
- SIMD_FORCE_INLINE btScalar getHitFraction() const
- {
- return m_hitFraction;
- }
-
- void setHitFraction(btScalar hitFraction)
- {
- m_hitFraction = hitFraction;
- }
-
- SIMD_FORCE_INLINE int getCollisionFlags() const
- {
- return m_collisionFlags;
- }
-
- void setCollisionFlags(int flags)
- {
- m_collisionFlags = flags;
- }
-
- ///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
- btScalar getCcdSweptSphereRadius() const
- {
- return m_ccdSweptSphereRadius;
- }
-
- ///Swept sphere radius (0.0 by default), see btConvexConvexAlgorithm::
- void setCcdSweptSphereRadius(btScalar radius)
- {
- m_ccdSweptSphereRadius = radius;
- }
-
- btScalar getCcdMotionThreshold() const
- {
- return m_ccdMotionThreshold;
- }
-
- btScalar getCcdSquareMotionThreshold() const
- {
- return m_ccdMotionThreshold * m_ccdMotionThreshold;
- }
-
- /// Don't do continuous collision detection if the motion (in one step) is less then m_ccdMotionThreshold
- void setCcdMotionThreshold(btScalar ccdMotionThreshold)
- {
- m_ccdMotionThreshold = ccdMotionThreshold;
- }
-
- ///users can point to their objects, userPointer is not used by Bullet
- void* getUserPointer() const
- {
- return m_userObjectPointer;
- }
-
- int getUserIndex() const
- {
- return m_userIndex;
- }
-
- int getUserIndex2() const
- {
- return m_userIndex2;
- }
-
- int getUserIndex3() const
- {
- return m_userIndex3;
- }
-
- ///users can point to their objects, userPointer is not used by Bullet
- void setUserPointer(void* userPointer)
- {
- m_userObjectPointer = userPointer;
- }
-
- ///users can point to their objects, userPointer is not used by Bullet
- void setUserIndex(int index)
- {
- m_userIndex = index;
- }
-
- void setUserIndex2(int index)
- {
- m_userIndex2 = index;
- }
-
- void setUserIndex3(int index)
- {
- m_userIndex3 = index;
- }
-
- int getUpdateRevisionInternal() const
- {
- return m_updateRevision;
- }
-
- void setCustomDebugColor(const btVector3& colorRGB)
- {
- m_customDebugColorRGB = colorRGB;
- m_collisionFlags |= CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR;
- }
-
- void removeCustomDebugColor()
- {
- m_collisionFlags &= ~CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR;
- }
-
- bool getCustomDebugColor(btVector3 & colorRGB) const
- {
- bool hasCustomColor = (0 != (m_collisionFlags & CF_HAS_CUSTOM_DEBUG_RENDERING_COLOR));
- if (hasCustomColor)
- {
- colorRGB = m_customDebugColorRGB;
- }
- return hasCustomColor;
- }
-
- inline bool checkCollideWith(const btCollisionObject* co) const
- {
- if (m_checkCollideWith)
- return checkCollideWithOverride(co);
-
- return true;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
-
- virtual void serializeSingleObject(class btSerializer * serializer) const;
-};
-
-// clang-format off
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCollisionObjectDoubleData
-{
- void *m_broadphaseHandle;
- void *m_collisionShape;
- btCollisionShapeData *m_rootCollisionShape;
- char *m_name;
-
- btTransformDoubleData m_worldTransform;
- btTransformDoubleData m_interpolationWorldTransform;
- btVector3DoubleData m_interpolationLinearVelocity;
- btVector3DoubleData m_interpolationAngularVelocity;
- btVector3DoubleData m_anisotropicFriction;
- double m_contactProcessingThreshold;
- double m_deactivationTime;
- double m_friction;
- double m_rollingFriction;
- double m_contactDamping;
- double m_contactStiffness;
- double m_restitution;
- double m_hitFraction;
- double m_ccdSweptSphereRadius;
- double m_ccdMotionThreshold;
- int m_hasAnisotropicFriction;
- int m_collisionFlags;
- int m_islandTag1;
- int m_companionId;
- int m_activationState1;
- int m_internalType;
- int m_checkCollideWith;
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
- int m_uniqueId;//m_uniqueId is introduced for paircache. could get rid of this, by calculating the address offset etc.
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCollisionObjectFloatData
-{
- void *m_broadphaseHandle;
- void *m_collisionShape;
- btCollisionShapeData *m_rootCollisionShape;
- char *m_name;
-
- btTransformFloatData m_worldTransform;
- btTransformFloatData m_interpolationWorldTransform;
- btVector3FloatData m_interpolationLinearVelocity;
- btVector3FloatData m_interpolationAngularVelocity;
- btVector3FloatData m_anisotropicFriction;
- float m_contactProcessingThreshold;
- float m_deactivationTime;
- float m_friction;
- float m_rollingFriction;
- float m_contactDamping;
- float m_contactStiffness;
- float m_restitution;
- float m_hitFraction;
- float m_ccdSweptSphereRadius;
- float m_ccdMotionThreshold;
- int m_hasAnisotropicFriction;
- int m_collisionFlags;
- int m_islandTag1;
- int m_companionId;
- int m_activationState1;
- int m_internalType;
- int m_checkCollideWith;
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
- int m_uniqueId;
-};
-// clang-format on
-
-SIMD_FORCE_INLINE int btCollisionObject::calculateSerializeBufferSize() const
-{
- return sizeof(btCollisionObjectData);
-}
-
-#endif //BT_COLLISION_OBJECT_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h
deleted file mode 100644
index 56341b7d29..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h
+++ /dev/null
@@ -1,49 +0,0 @@
-#ifndef BT_COLLISION_OBJECT_WRAPPER_H
-#define BT_COLLISION_OBJECT_WRAPPER_H
-
-///btCollisionObjectWrapperis an internal data structure.
-///Most users can ignore this and use btCollisionObject and btCollisionShape instead
-class btCollisionShape;
-class btCollisionObject;
-class btTransform;
-#include "LinearMath/btScalar.h" // for SIMD_FORCE_INLINE definition
-
-#define BT_DECLARE_STACK_ONLY_OBJECT \
-private: \
- void* operator new(size_t size); \
- void operator delete(void*);
-
-struct btCollisionObjectWrapper;
-struct btCollisionObjectWrapper
-{
- BT_DECLARE_STACK_ONLY_OBJECT
-
-private:
- btCollisionObjectWrapper(const btCollisionObjectWrapper&); // not implemented. Not allowed.
- btCollisionObjectWrapper* operator=(const btCollisionObjectWrapper&);
-
-public:
- const btCollisionObjectWrapper* m_parent;
- const btCollisionShape* m_shape;
- const btCollisionObject* m_collisionObject;
- const btTransform& m_worldTransform;
- const btTransform* m_preTransform;
- int m_partId;
- int m_index;
-
- btCollisionObjectWrapper(const btCollisionObjectWrapper* parent, const btCollisionShape* shape, const btCollisionObject* collisionObject, const btTransform& worldTransform, int partId, int index)
- : m_parent(parent), m_shape(shape), m_collisionObject(collisionObject), m_worldTransform(worldTransform), m_preTransform(NULL), m_partId(partId), m_index(index)
- {
- }
-
- btCollisionObjectWrapper(const btCollisionObjectWrapper* parent, const btCollisionShape* shape, const btCollisionObject* collisionObject, const btTransform& worldTransform, const btTransform& preTransform, int partId, int index)
- : m_parent(parent), m_shape(shape), m_collisionObject(collisionObject), m_worldTransform(worldTransform), m_preTransform(&preTransform), m_partId(partId), m_index(index)
- {
- }
-
- SIMD_FORCE_INLINE const btTransform& getWorldTransform() const { return m_worldTransform; }
- SIMD_FORCE_INLINE const btCollisionObject* getCollisionObject() const { return m_collisionObject; }
- SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const { return m_shape; }
-};
-
-#endif //BT_COLLISION_OBJECT_WRAPPER_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
deleted file mode 100644
index f74dcabc54..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.cpp
+++ /dev/null
@@ -1,1625 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCollisionWorld.h"
-#include "btCollisionDispatcher.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h" //for raycasting
-#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h" //for raycasting
-#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h" //for raycasting
-#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h" //for raycasting
-#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h"
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-#include "LinearMath/btAabbUtil2.h"
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btSerializer.h"
-#include "BulletCollision/CollisionShapes/btConvexPolyhedron.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-//#define DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
-
-//#define USE_BRUTEFORCE_RAYBROADPHASE 1
-//RECALCULATE_AABB is slower, but benefit is that you don't need to call 'stepSimulation' or 'updateAabbs' before using a rayTest
-//#define RECALCULATE_AABB_RAYCAST 1
-
-//When the user doesn't provide dispatcher or broadphase, create basic versions (and delete them in destructor)
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
-#include "BulletCollision/CollisionDispatch/btCollisionConfiguration.h"
-
-///for debug drawing
-
-//for debug rendering
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionShapes/btCapsuleShape.h"
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "BulletCollision/CollisionShapes/btConeShape.h"
-#include "BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btCylinderShape.h"
-#include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
-#include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleCallback.h"
-#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
-
-btCollisionWorld::btCollisionWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btCollisionConfiguration* collisionConfiguration)
- : m_dispatcher1(dispatcher),
- m_broadphasePairCache(pairCache),
- m_debugDrawer(0),
- m_forceUpdateAllAabbs(true)
-{
-}
-
-btCollisionWorld::~btCollisionWorld()
-{
- //clean up remaining objects
- int i;
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* collisionObject = m_collisionObjects[i];
-
- btBroadphaseProxy* bp = collisionObject->getBroadphaseHandle();
- if (bp)
- {
- //
- // only clear the cached algorithms
- //
- getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(bp, m_dispatcher1);
- getBroadphase()->destroyProxy(bp, m_dispatcher1);
- collisionObject->setBroadphaseHandle(0);
- }
- }
-}
-
-void btCollisionWorld::refreshBroadphaseProxy(btCollisionObject* collisionObject)
-{
- if (collisionObject->getBroadphaseHandle())
- {
- int collisionFilterGroup = collisionObject->getBroadphaseHandle()->m_collisionFilterGroup;
- int collisionFilterMask = collisionObject->getBroadphaseHandle()->m_collisionFilterMask;
-
- getBroadphase()->destroyProxy(collisionObject->getBroadphaseHandle(), getDispatcher());
-
- //calculate new AABB
- btTransform trans = collisionObject->getWorldTransform();
-
- btVector3 minAabb;
- btVector3 maxAabb;
- collisionObject->getCollisionShape()->getAabb(trans, minAabb, maxAabb);
-
- int type = collisionObject->getCollisionShape()->getShapeType();
- collisionObject->setBroadphaseHandle(getBroadphase()->createProxy(
- minAabb,
- maxAabb,
- type,
- collisionObject,
- collisionFilterGroup,
- collisionFilterMask,
- m_dispatcher1));
- }
-}
-
-void btCollisionWorld::addCollisionObject(btCollisionObject* collisionObject, int collisionFilterGroup, int collisionFilterMask)
-{
- btAssert(collisionObject);
-
- //check that the object isn't already added
- btAssert(m_collisionObjects.findLinearSearch(collisionObject) == m_collisionObjects.size());
- btAssert(collisionObject->getWorldArrayIndex() == -1); // do not add the same object to more than one collision world
-
- collisionObject->setWorldArrayIndex(m_collisionObjects.size());
- m_collisionObjects.push_back(collisionObject);
-
- //calculate new AABB
- btTransform trans = collisionObject->getWorldTransform();
-
- btVector3 minAabb;
- btVector3 maxAabb;
- collisionObject->getCollisionShape()->getAabb(trans, minAabb, maxAabb);
-
- int type = collisionObject->getCollisionShape()->getShapeType();
- collisionObject->setBroadphaseHandle(getBroadphase()->createProxy(
- minAabb,
- maxAabb,
- type,
- collisionObject,
- collisionFilterGroup,
- collisionFilterMask,
- m_dispatcher1));
-}
-
-void btCollisionWorld::updateSingleAabb(btCollisionObject* colObj)
-{
- btVector3 minAabb, maxAabb;
- colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), minAabb, maxAabb);
- //need to increase the aabb for contact thresholds
- btVector3 contactThreshold(gContactBreakingThreshold, gContactBreakingThreshold, gContactBreakingThreshold);
- minAabb -= contactThreshold;
- maxAabb += contactThreshold;
-
- if (getDispatchInfo().m_useContinuous && colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY && !colObj->isStaticOrKinematicObject())
- {
- btVector3 minAabb2, maxAabb2;
- colObj->getCollisionShape()->getAabb(colObj->getInterpolationWorldTransform(), minAabb2, maxAabb2);
- minAabb2 -= contactThreshold;
- maxAabb2 += contactThreshold;
- minAabb.setMin(minAabb2);
- maxAabb.setMax(maxAabb2);
- }
-
- btBroadphaseInterface* bp = (btBroadphaseInterface*)m_broadphasePairCache;
-
- //moving objects should be moderately sized, probably something wrong if not
- if (colObj->isStaticObject() || ((maxAabb - minAabb).length2() < btScalar(1e12)))
- {
- bp->setAabb(colObj->getBroadphaseHandle(), minAabb, maxAabb, m_dispatcher1);
- }
- else
- {
- //something went wrong, investigate
- //this assert is unwanted in 3D modelers (danger of loosing work)
- colObj->setActivationState(DISABLE_SIMULATION);
-
- static bool reportMe = true;
- if (reportMe && m_debugDrawer)
- {
- reportMe = false;
- m_debugDrawer->reportErrorWarning("Overflow in AABB, object removed from simulation");
- m_debugDrawer->reportErrorWarning("If you can reproduce this, please email bugs@continuousphysics.com\n");
- m_debugDrawer->reportErrorWarning("Please include above information, your Platform, version of OS.\n");
- m_debugDrawer->reportErrorWarning("Thanks.\n");
- }
- }
-}
-
-void btCollisionWorld::updateAabbs()
-{
- BT_PROFILE("updateAabbs");
-
- btTransform predictedTrans;
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btAssert(colObj->getWorldArrayIndex() == i);
-
- //only update aabb of active objects
- if (m_forceUpdateAllAabbs || colObj->isActive())
- {
- updateSingleAabb(colObj);
- }
- }
-}
-
-void btCollisionWorld::computeOverlappingPairs()
-{
- BT_PROFILE("calculateOverlappingPairs");
- m_broadphasePairCache->calculateOverlappingPairs(m_dispatcher1);
-}
-
-void btCollisionWorld::performDiscreteCollisionDetection()
-{
- BT_PROFILE("performDiscreteCollisionDetection");
-
- btDispatcherInfo& dispatchInfo = getDispatchInfo();
-
- updateAabbs();
-
- computeOverlappingPairs();
-
- btDispatcher* dispatcher = getDispatcher();
- {
- BT_PROFILE("dispatchAllCollisionPairs");
- if (dispatcher)
- dispatcher->dispatchAllCollisionPairs(m_broadphasePairCache->getOverlappingPairCache(), dispatchInfo, m_dispatcher1);
- }
-}
-
-void btCollisionWorld::removeCollisionObject(btCollisionObject* collisionObject)
-{
- //bool removeFromBroadphase = false;
-
- {
- btBroadphaseProxy* bp = collisionObject->getBroadphaseHandle();
- if (bp)
- {
- //
- // only clear the cached algorithms
- //
- getBroadphase()->getOverlappingPairCache()->cleanProxyFromPairs(bp, m_dispatcher1);
- getBroadphase()->destroyProxy(bp, m_dispatcher1);
- collisionObject->setBroadphaseHandle(0);
- }
- }
-
- int iObj = collisionObject->getWorldArrayIndex();
- // btAssert(iObj >= 0 && iObj < m_collisionObjects.size()); // trying to remove an object that was never added or already removed previously?
- if (iObj >= 0 && iObj < m_collisionObjects.size())
- {
- btAssert(collisionObject == m_collisionObjects[iObj]);
- m_collisionObjects.swap(iObj, m_collisionObjects.size() - 1);
- m_collisionObjects.pop_back();
- if (iObj < m_collisionObjects.size())
- {
- m_collisionObjects[iObj]->setWorldArrayIndex(iObj);
- }
- }
- else
- {
- // slow linear search
- //swapremove
- m_collisionObjects.remove(collisionObject);
- }
- collisionObject->setWorldArrayIndex(-1);
-}
-
-void btCollisionWorld::rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback)
-{
- btCollisionObjectWrapper colObWrap(0, collisionShape, collisionObject, colObjWorldTransform, -1, -1);
- btCollisionWorld::rayTestSingleInternal(rayFromTrans, rayToTrans, &colObWrap, resultCallback);
-}
-
-void btCollisionWorld::rayTestSingleInternal(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- const btCollisionObjectWrapper* collisionObjectWrap,
- RayResultCallback& resultCallback)
-{
- btSphereShape pointShape(btScalar(0.0));
- pointShape.setMargin(0.f);
- const btConvexShape* castShape = &pointShape;
- const btCollisionShape* collisionShape = collisionObjectWrap->getCollisionShape();
- const btTransform& colObjWorldTransform = collisionObjectWrap->getWorldTransform();
-
- if (collisionShape->isConvex())
- {
- // BT_PROFILE("rayTestConvex");
- btConvexCast::CastResult castResult;
- castResult.m_fraction = resultCallback.m_closestHitFraction;
-
- btConvexShape* convexShape = (btConvexShape*)collisionShape;
- btVoronoiSimplexSolver simplexSolver;
- btSubsimplexConvexCast subSimplexConvexCaster(castShape, convexShape, &simplexSolver);
-
- btGjkConvexCast gjkConvexCaster(castShape, convexShape, &simplexSolver);
-
- //btContinuousConvexCollision convexCaster(castShape,convexShape,&simplexSolver,0);
-
- btConvexCast* convexCasterPtr = 0;
- //use kF_UseSubSimplexConvexCastRaytest by default
- if (resultCallback.m_flags & btTriangleRaycastCallback::kF_UseGjkConvexCastRaytest)
- convexCasterPtr = &gjkConvexCaster;
- else
- convexCasterPtr = &subSimplexConvexCaster;
-
- btConvexCast& convexCaster = *convexCasterPtr;
-
- if (convexCaster.calcTimeOfImpact(rayFromTrans, rayToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
- {
- //add hit
- if (castResult.m_normal.length2() > btScalar(0.0001))
- {
- if (castResult.m_fraction < resultCallback.m_closestHitFraction)
- {
- //todo: figure out what this is about. When is rayFromTest.getBasis() not identity?
-#ifdef USE_SUBSIMPLEX_CONVEX_CAST
- //rotate normal into worldspace
- castResult.m_normal = rayFromTrans.getBasis() * castResult.m_normal;
-#endif //USE_SUBSIMPLEX_CONVEX_CAST
-
- castResult.m_normal.normalize();
- btCollisionWorld::LocalRayResult localRayResult(
- collisionObjectWrap->getCollisionObject(),
- 0,
- castResult.m_normal,
- castResult.m_fraction);
-
- bool normalInWorldSpace = true;
- resultCallback.addSingleResult(localRayResult, normalInWorldSpace);
- }
- }
- }
- }
- else
- {
- if (collisionShape->isConcave())
- {
- //ConvexCast::CastResult
- struct BridgeTriangleRaycastCallback : public btTriangleRaycastCallback
- {
- btCollisionWorld::RayResultCallback* m_resultCallback;
- const btCollisionObject* m_collisionObject;
- const btConcaveShape* m_triangleMesh;
-
- btTransform m_colObjWorldTransform;
-
- BridgeTriangleRaycastCallback(const btVector3& from, const btVector3& to,
- btCollisionWorld::RayResultCallback* resultCallback, const btCollisionObject* collisionObject, const btConcaveShape* triangleMesh, const btTransform& colObjWorldTransform) : //@BP Mod
- btTriangleRaycastCallback(from, to, resultCallback->m_flags),
- m_resultCallback(resultCallback),
- m_collisionObject(collisionObject),
- m_triangleMesh(triangleMesh),
- m_colObjWorldTransform(colObjWorldTransform)
- {
- }
-
- virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = partId;
- shapeInfo.m_triangleIndex = triangleIndex;
-
- btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
-
- btCollisionWorld::LocalRayResult rayResult(m_collisionObject,
- &shapeInfo,
- hitNormalWorld,
- hitFraction);
-
- bool normalInWorldSpace = true;
- return m_resultCallback->addSingleResult(rayResult, normalInWorldSpace);
- }
- };
-
- btTransform worldTocollisionObject = colObjWorldTransform.inverse();
- btVector3 rayFromLocal = worldTocollisionObject * rayFromTrans.getOrigin();
- btVector3 rayToLocal = worldTocollisionObject * rayToTrans.getOrigin();
-
- // BT_PROFILE("rayTestConcave");
- if (collisionShape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- ///optimized version for btBvhTriangleMeshShape
- btBvhTriangleMeshShape* triangleMesh = (btBvhTriangleMeshShape*)collisionShape;
-
- BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->getCollisionObject(), triangleMesh, colObjWorldTransform);
- rcb.m_hitFraction = resultCallback.m_closestHitFraction;
- triangleMesh->performRaycast(&rcb, rayFromLocal, rayToLocal);
- }
- else if (collisionShape->getShapeType() == SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- ///optimized version for btScaledBvhTriangleMeshShape
- btScaledBvhTriangleMeshShape* scaledTriangleMesh = (btScaledBvhTriangleMeshShape*)collisionShape;
- btBvhTriangleMeshShape* triangleMesh = (btBvhTriangleMeshShape*)scaledTriangleMesh->getChildShape();
-
- //scale the ray positions
- btVector3 scale = scaledTriangleMesh->getLocalScaling();
- btVector3 rayFromLocalScaled = rayFromLocal / scale;
- btVector3 rayToLocalScaled = rayToLocal / scale;
-
- //perform raycast in the underlying btBvhTriangleMeshShape
- BridgeTriangleRaycastCallback rcb(rayFromLocalScaled, rayToLocalScaled, &resultCallback, collisionObjectWrap->getCollisionObject(), triangleMesh, colObjWorldTransform);
- rcb.m_hitFraction = resultCallback.m_closestHitFraction;
- triangleMesh->performRaycast(&rcb, rayFromLocalScaled, rayToLocalScaled);
- }
- else if (((resultCallback.m_flags&btTriangleRaycastCallback::kF_DisableHeightfieldAccelerator)==0)
- && collisionShape->getShapeType() == TERRAIN_SHAPE_PROXYTYPE
- )
- {
- ///optimized version for btHeightfieldTerrainShape
- btHeightfieldTerrainShape* heightField = (btHeightfieldTerrainShape*)collisionShape;
- btTransform worldTocollisionObject = colObjWorldTransform.inverse();
- btVector3 rayFromLocal = worldTocollisionObject * rayFromTrans.getOrigin();
- btVector3 rayToLocal = worldTocollisionObject * rayToTrans.getOrigin();
-
- BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->getCollisionObject(), heightField, colObjWorldTransform);
- rcb.m_hitFraction = resultCallback.m_closestHitFraction;
- heightField->performRaycast(&rcb, rayFromLocal, rayToLocal);
- }
- else
- {
- //generic (slower) case
- btConcaveShape* concaveShape = (btConcaveShape*)collisionShape;
-
- btTransform worldTocollisionObject = colObjWorldTransform.inverse();
-
- btVector3 rayFromLocal = worldTocollisionObject * rayFromTrans.getOrigin();
- btVector3 rayToLocal = worldTocollisionObject * rayToTrans.getOrigin();
-
- //ConvexCast::CastResult
-
- struct BridgeTriangleRaycastCallback : public btTriangleRaycastCallback
- {
- btCollisionWorld::RayResultCallback* m_resultCallback;
- const btCollisionObject* m_collisionObject;
- btConcaveShape* m_triangleMesh;
-
- btTransform m_colObjWorldTransform;
-
- BridgeTriangleRaycastCallback(const btVector3& from, const btVector3& to,
- btCollisionWorld::RayResultCallback* resultCallback, const btCollisionObject* collisionObject, btConcaveShape* triangleMesh, const btTransform& colObjWorldTransform) : //@BP Mod
- btTriangleRaycastCallback(from, to, resultCallback->m_flags),
- m_resultCallback(resultCallback),
- m_collisionObject(collisionObject),
- m_triangleMesh(triangleMesh),
- m_colObjWorldTransform(colObjWorldTransform)
- {
- }
-
- virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = partId;
- shapeInfo.m_triangleIndex = triangleIndex;
-
- btVector3 hitNormalWorld = m_colObjWorldTransform.getBasis() * hitNormalLocal;
-
- btCollisionWorld::LocalRayResult rayResult(m_collisionObject,
- &shapeInfo,
- hitNormalWorld,
- hitFraction);
-
- bool normalInWorldSpace = true;
- return m_resultCallback->addSingleResult(rayResult, normalInWorldSpace);
- }
- };
-
- BridgeTriangleRaycastCallback rcb(rayFromLocal, rayToLocal, &resultCallback, collisionObjectWrap->getCollisionObject(), concaveShape, colObjWorldTransform);
- rcb.m_hitFraction = resultCallback.m_closestHitFraction;
-
- btVector3 rayAabbMinLocal = rayFromLocal;
- rayAabbMinLocal.setMin(rayToLocal);
- btVector3 rayAabbMaxLocal = rayFromLocal;
- rayAabbMaxLocal.setMax(rayToLocal);
-
- concaveShape->processAllTriangles(&rcb, rayAabbMinLocal, rayAabbMaxLocal);
- }
- }
- else
- {
- // BT_PROFILE("rayTestCompound");
- if (collisionShape->isCompound())
- {
- struct LocalInfoAdder2 : public RayResultCallback
- {
- RayResultCallback* m_userCallback;
- int m_i;
-
- LocalInfoAdder2(int i, RayResultCallback* user)
- : m_userCallback(user), m_i(i)
- {
- m_closestHitFraction = m_userCallback->m_closestHitFraction;
- m_flags = m_userCallback->m_flags;
- }
- virtual bool needsCollision(btBroadphaseProxy* p) const
- {
- return m_userCallback->needsCollision(p);
- }
-
- virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& r, bool b)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = -1;
- shapeInfo.m_triangleIndex = m_i;
- if (r.m_localShapeInfo == NULL)
- r.m_localShapeInfo = &shapeInfo;
-
- const btScalar result = m_userCallback->addSingleResult(r, b);
- m_closestHitFraction = m_userCallback->m_closestHitFraction;
- return result;
- }
- };
-
- struct RayTester : btDbvt::ICollide
- {
- const btCollisionObject* m_collisionObject;
- const btCompoundShape* m_compoundShape;
- const btTransform& m_colObjWorldTransform;
- const btTransform& m_rayFromTrans;
- const btTransform& m_rayToTrans;
- RayResultCallback& m_resultCallback;
-
- RayTester(const btCollisionObject* collisionObject,
- const btCompoundShape* compoundShape,
- const btTransform& colObjWorldTransform,
- const btTransform& rayFromTrans,
- const btTransform& rayToTrans,
- RayResultCallback& resultCallback) : m_collisionObject(collisionObject),
- m_compoundShape(compoundShape),
- m_colObjWorldTransform(colObjWorldTransform),
- m_rayFromTrans(rayFromTrans),
- m_rayToTrans(rayToTrans),
- m_resultCallback(resultCallback)
- {
- }
-
- void ProcessLeaf(int i)
- {
- const btCollisionShape* childCollisionShape = m_compoundShape->getChildShape(i);
- const btTransform& childTrans = m_compoundShape->getChildTransform(i);
- btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
-
- btCollisionObjectWrapper tmpOb(0, childCollisionShape, m_collisionObject, childWorldTrans, -1, i);
- // replace collision shape so that callback can determine the triangle
-
- LocalInfoAdder2 my_cb(i, &m_resultCallback);
-
- rayTestSingleInternal(
- m_rayFromTrans,
- m_rayToTrans,
- &tmpOb,
- my_cb);
- }
-
- void Process(const btDbvtNode* leaf)
- {
- ProcessLeaf(leaf->dataAsInt);
- }
- };
-
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(collisionShape);
- const btDbvt* dbvt = compoundShape->getDynamicAabbTree();
-
- RayTester rayCB(
- collisionObjectWrap->getCollisionObject(),
- compoundShape,
- colObjWorldTransform,
- rayFromTrans,
- rayToTrans,
- resultCallback);
-#ifndef DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
- if (dbvt)
- {
- btVector3 localRayFrom = colObjWorldTransform.inverseTimes(rayFromTrans).getOrigin();
- btVector3 localRayTo = colObjWorldTransform.inverseTimes(rayToTrans).getOrigin();
- btDbvt::rayTest(dbvt->m_root, localRayFrom, localRayTo, rayCB);
- }
- else
-#endif //DISABLE_DBVT_COMPOUNDSHAPE_RAYCAST_ACCELERATION
- {
- for (int i = 0, n = compoundShape->getNumChildShapes(); i < n; ++i)
- {
- rayCB.ProcessLeaf(i);
- }
- }
- }
- }
- }
-}
-
-void btCollisionWorld::objectQuerySingle(const btConvexShape* castShape, const btTransform& convexFromTrans, const btTransform& convexToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- ConvexResultCallback& resultCallback, btScalar allowedPenetration)
-{
- btCollisionObjectWrapper tmpOb(0, collisionShape, collisionObject, colObjWorldTransform, -1, -1);
- btCollisionWorld::objectQuerySingleInternal(castShape, convexFromTrans, convexToTrans, &tmpOb, resultCallback, allowedPenetration);
-}
-
-void btCollisionWorld::objectQuerySingleInternal(const btConvexShape* castShape, const btTransform& convexFromTrans, const btTransform& convexToTrans,
- const btCollisionObjectWrapper* colObjWrap,
- ConvexResultCallback& resultCallback, btScalar allowedPenetration)
-{
- const btCollisionShape* collisionShape = colObjWrap->getCollisionShape();
- const btTransform& colObjWorldTransform = colObjWrap->getWorldTransform();
-
- if (collisionShape->isConvex())
- {
- //BT_PROFILE("convexSweepConvex");
- btConvexCast::CastResult castResult;
- castResult.m_allowedPenetration = allowedPenetration;
- castResult.m_fraction = resultCallback.m_closestHitFraction; //btScalar(1.);//??
-
- btConvexShape* convexShape = (btConvexShape*)collisionShape;
- btVoronoiSimplexSolver simplexSolver;
- btGjkEpaPenetrationDepthSolver gjkEpaPenetrationSolver;
-
- btContinuousConvexCollision convexCaster1(castShape, convexShape, &simplexSolver, &gjkEpaPenetrationSolver);
- //btGjkConvexCast convexCaster2(castShape,convexShape,&simplexSolver);
- //btSubsimplexConvexCast convexCaster3(castShape,convexShape,&simplexSolver);
-
- btConvexCast* castPtr = &convexCaster1;
-
- if (castPtr->calcTimeOfImpact(convexFromTrans, convexToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
- {
- //add hit
- if (castResult.m_normal.length2() > btScalar(0.0001))
- {
- if (castResult.m_fraction < resultCallback.m_closestHitFraction)
- {
- castResult.m_normal.normalize();
- btCollisionWorld::LocalConvexResult localConvexResult(
- colObjWrap->getCollisionObject(),
- 0,
- castResult.m_normal,
- castResult.m_hitPoint,
- castResult.m_fraction);
-
- bool normalInWorldSpace = true;
- resultCallback.addSingleResult(localConvexResult, normalInWorldSpace);
- }
- }
- }
- }
- else
- {
- if (collisionShape->isConcave())
- {
- if (collisionShape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- //BT_PROFILE("convexSweepbtBvhTriangleMesh");
- btBvhTriangleMeshShape* triangleMesh = (btBvhTriangleMeshShape*)collisionShape;
- btTransform worldTocollisionObject = colObjWorldTransform.inverse();
- btVector3 convexFromLocal = worldTocollisionObject * convexFromTrans.getOrigin();
- btVector3 convexToLocal = worldTocollisionObject * convexToTrans.getOrigin();
- // rotation of box in local mesh space = MeshRotation^-1 * ConvexToRotation
- btTransform rotationXform = btTransform(worldTocollisionObject.getBasis() * convexToTrans.getBasis());
-
- //ConvexCast::CastResult
- struct BridgeTriangleConvexcastCallback : public btTriangleConvexcastCallback
- {
- btCollisionWorld::ConvexResultCallback* m_resultCallback;
- const btCollisionObject* m_collisionObject;
- btTriangleMeshShape* m_triangleMesh;
-
- BridgeTriangleConvexcastCallback(const btConvexShape* castShape, const btTransform& from, const btTransform& to,
- btCollisionWorld::ConvexResultCallback* resultCallback, const btCollisionObject* collisionObject, btTriangleMeshShape* triangleMesh, const btTransform& triangleToWorld) : btTriangleConvexcastCallback(castShape, from, to, triangleToWorld, triangleMesh->getMargin()),
- m_resultCallback(resultCallback),
- m_collisionObject(collisionObject),
- m_triangleMesh(triangleMesh)
- {
- }
-
- virtual btScalar reportHit(const btVector3& hitNormalLocal, const btVector3& hitPointLocal, btScalar hitFraction, int partId, int triangleIndex)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = partId;
- shapeInfo.m_triangleIndex = triangleIndex;
- if (hitFraction <= m_resultCallback->m_closestHitFraction)
- {
- btCollisionWorld::LocalConvexResult convexResult(m_collisionObject,
- &shapeInfo,
- hitNormalLocal,
- hitPointLocal,
- hitFraction);
-
- bool normalInWorldSpace = true;
-
- return m_resultCallback->addSingleResult(convexResult, normalInWorldSpace);
- }
- return hitFraction;
- }
- };
-
- BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans, convexToTrans, &resultCallback, colObjWrap->getCollisionObject(), triangleMesh, colObjWorldTransform);
- tccb.m_hitFraction = resultCallback.m_closestHitFraction;
- tccb.m_allowedPenetration = allowedPenetration;
- btVector3 boxMinLocal, boxMaxLocal;
- castShape->getAabb(rotationXform, boxMinLocal, boxMaxLocal);
- triangleMesh->performConvexcast(&tccb, convexFromLocal, convexToLocal, boxMinLocal, boxMaxLocal);
- }
- else
- {
- if (collisionShape->getShapeType() == STATIC_PLANE_PROXYTYPE)
- {
- btConvexCast::CastResult castResult;
- castResult.m_allowedPenetration = allowedPenetration;
- castResult.m_fraction = resultCallback.m_closestHitFraction;
- btStaticPlaneShape* planeShape = (btStaticPlaneShape*)collisionShape;
- btContinuousConvexCollision convexCaster1(castShape, planeShape);
- btConvexCast* castPtr = &convexCaster1;
-
- if (castPtr->calcTimeOfImpact(convexFromTrans, convexToTrans, colObjWorldTransform, colObjWorldTransform, castResult))
- {
- //add hit
- if (castResult.m_normal.length2() > btScalar(0.0001))
- {
- if (castResult.m_fraction < resultCallback.m_closestHitFraction)
- {
- castResult.m_normal.normalize();
- btCollisionWorld::LocalConvexResult localConvexResult(
- colObjWrap->getCollisionObject(),
- 0,
- castResult.m_normal,
- castResult.m_hitPoint,
- castResult.m_fraction);
-
- bool normalInWorldSpace = true;
- resultCallback.addSingleResult(localConvexResult, normalInWorldSpace);
- }
- }
- }
- }
- else
- {
- //BT_PROFILE("convexSweepConcave");
- btConcaveShape* concaveShape = (btConcaveShape*)collisionShape;
- btTransform worldTocollisionObject = colObjWorldTransform.inverse();
- btVector3 convexFromLocal = worldTocollisionObject * convexFromTrans.getOrigin();
- btVector3 convexToLocal = worldTocollisionObject * convexToTrans.getOrigin();
- // rotation of box in local mesh space = MeshRotation^-1 * ConvexToRotation
- btTransform rotationXform = btTransform(worldTocollisionObject.getBasis() * convexToTrans.getBasis());
-
- //ConvexCast::CastResult
- struct BridgeTriangleConvexcastCallback : public btTriangleConvexcastCallback
- {
- btCollisionWorld::ConvexResultCallback* m_resultCallback;
- const btCollisionObject* m_collisionObject;
- btConcaveShape* m_triangleMesh;
-
- BridgeTriangleConvexcastCallback(const btConvexShape* castShape, const btTransform& from, const btTransform& to,
- btCollisionWorld::ConvexResultCallback* resultCallback, const btCollisionObject* collisionObject, btConcaveShape* triangleMesh, const btTransform& triangleToWorld) : btTriangleConvexcastCallback(castShape, from, to, triangleToWorld, triangleMesh->getMargin()),
- m_resultCallback(resultCallback),
- m_collisionObject(collisionObject),
- m_triangleMesh(triangleMesh)
- {
- }
-
- virtual btScalar reportHit(const btVector3& hitNormalLocal, const btVector3& hitPointLocal, btScalar hitFraction, int partId, int triangleIndex)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = partId;
- shapeInfo.m_triangleIndex = triangleIndex;
- if (hitFraction <= m_resultCallback->m_closestHitFraction)
- {
- btCollisionWorld::LocalConvexResult convexResult(m_collisionObject,
- &shapeInfo,
- hitNormalLocal,
- hitPointLocal,
- hitFraction);
-
- bool normalInWorldSpace = true;
-
- return m_resultCallback->addSingleResult(convexResult, normalInWorldSpace);
- }
- return hitFraction;
- }
- };
-
- BridgeTriangleConvexcastCallback tccb(castShape, convexFromTrans, convexToTrans, &resultCallback, colObjWrap->getCollisionObject(), concaveShape, colObjWorldTransform);
- tccb.m_hitFraction = resultCallback.m_closestHitFraction;
- tccb.m_allowedPenetration = allowedPenetration;
- btVector3 boxMinLocal, boxMaxLocal;
- castShape->getAabb(rotationXform, boxMinLocal, boxMaxLocal);
-
- btVector3 rayAabbMinLocal = convexFromLocal;
- rayAabbMinLocal.setMin(convexToLocal);
- btVector3 rayAabbMaxLocal = convexFromLocal;
- rayAabbMaxLocal.setMax(convexToLocal);
- rayAabbMinLocal += boxMinLocal;
- rayAabbMaxLocal += boxMaxLocal;
- concaveShape->processAllTriangles(&tccb, rayAabbMinLocal, rayAabbMaxLocal);
- }
- }
- }
- else
- {
- if (collisionShape->isCompound())
- {
- struct btCompoundLeafCallback : btDbvt::ICollide
- {
- btCompoundLeafCallback(
- const btCollisionObjectWrapper* colObjWrap,
- const btConvexShape* castShape,
- const btTransform& convexFromTrans,
- const btTransform& convexToTrans,
- btScalar allowedPenetration,
- const btCompoundShape* compoundShape,
- const btTransform& colObjWorldTransform,
- ConvexResultCallback& resultCallback)
- : m_colObjWrap(colObjWrap),
- m_castShape(castShape),
- m_convexFromTrans(convexFromTrans),
- m_convexToTrans(convexToTrans),
- m_allowedPenetration(allowedPenetration),
- m_compoundShape(compoundShape),
- m_colObjWorldTransform(colObjWorldTransform),
- m_resultCallback(resultCallback)
- {
- }
-
- const btCollisionObjectWrapper* m_colObjWrap;
- const btConvexShape* m_castShape;
- const btTransform& m_convexFromTrans;
- const btTransform& m_convexToTrans;
- btScalar m_allowedPenetration;
- const btCompoundShape* m_compoundShape;
- const btTransform& m_colObjWorldTransform;
- ConvexResultCallback& m_resultCallback;
-
- public:
- void ProcessChild(int index, const btTransform& childTrans, const btCollisionShape* childCollisionShape)
- {
- btTransform childWorldTrans = m_colObjWorldTransform * childTrans;
-
- struct LocalInfoAdder : public ConvexResultCallback
- {
- ConvexResultCallback* m_userCallback;
- int m_i;
-
- LocalInfoAdder(int i, ConvexResultCallback* user)
- : m_userCallback(user), m_i(i)
- {
- m_closestHitFraction = m_userCallback->m_closestHitFraction;
- }
- virtual bool needsCollision(btBroadphaseProxy* p) const
- {
- return m_userCallback->needsCollision(p);
- }
- virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& r, bool b)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = -1;
- shapeInfo.m_triangleIndex = m_i;
- if (r.m_localShapeInfo == NULL)
- r.m_localShapeInfo = &shapeInfo;
- const btScalar result = m_userCallback->addSingleResult(r, b);
- m_closestHitFraction = m_userCallback->m_closestHitFraction;
- return result;
- }
- };
-
- LocalInfoAdder my_cb(index, &m_resultCallback);
-
- btCollisionObjectWrapper tmpObj(m_colObjWrap, childCollisionShape, m_colObjWrap->getCollisionObject(), childWorldTrans, -1, index);
-
- objectQuerySingleInternal(m_castShape, m_convexFromTrans, m_convexToTrans, &tmpObj, my_cb, m_allowedPenetration);
- }
-
- void Process(const btDbvtNode* leaf)
- {
- // Processing leaf node
- int index = leaf->dataAsInt;
-
- btTransform childTrans = m_compoundShape->getChildTransform(index);
- const btCollisionShape* childCollisionShape = m_compoundShape->getChildShape(index);
-
- ProcessChild(index, childTrans, childCollisionShape);
- }
- };
-
- BT_PROFILE("convexSweepCompound");
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(collisionShape);
-
- btVector3 fromLocalAabbMin, fromLocalAabbMax;
- btVector3 toLocalAabbMin, toLocalAabbMax;
-
- castShape->getAabb(colObjWorldTransform.inverse() * convexFromTrans, fromLocalAabbMin, fromLocalAabbMax);
- castShape->getAabb(colObjWorldTransform.inverse() * convexToTrans, toLocalAabbMin, toLocalAabbMax);
-
- fromLocalAabbMin.setMin(toLocalAabbMin);
- fromLocalAabbMax.setMax(toLocalAabbMax);
-
- btCompoundLeafCallback callback(colObjWrap, castShape, convexFromTrans, convexToTrans,
- allowedPenetration, compoundShape, colObjWorldTransform, resultCallback);
-
- const btDbvt* tree = compoundShape->getDynamicAabbTree();
- if (tree)
- {
- const ATTRIBUTE_ALIGNED16(btDbvtVolume) bounds = btDbvtVolume::FromMM(fromLocalAabbMin, fromLocalAabbMax);
- tree->collideTV(tree->m_root, bounds, callback);
- }
- else
- {
- int i;
- for (i = 0; i < compoundShape->getNumChildShapes(); i++)
- {
- const btCollisionShape* childCollisionShape = compoundShape->getChildShape(i);
- btTransform childTrans = compoundShape->getChildTransform(i);
- callback.ProcessChild(i, childTrans, childCollisionShape);
- }
- }
- }
- }
- }
-}
-
-struct btSingleRayCallback : public btBroadphaseRayCallback
-{
- btVector3 m_rayFromWorld;
- btVector3 m_rayToWorld;
- btTransform m_rayFromTrans;
- btTransform m_rayToTrans;
- btVector3 m_hitNormal;
-
- const btCollisionWorld* m_world;
- btCollisionWorld::RayResultCallback& m_resultCallback;
-
- btSingleRayCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld, const btCollisionWorld* world, btCollisionWorld::RayResultCallback& resultCallback)
- : m_rayFromWorld(rayFromWorld),
- m_rayToWorld(rayToWorld),
- m_world(world),
- m_resultCallback(resultCallback)
- {
- m_rayFromTrans.setIdentity();
- m_rayFromTrans.setOrigin(m_rayFromWorld);
- m_rayToTrans.setIdentity();
- m_rayToTrans.setOrigin(m_rayToWorld);
-
- btVector3 rayDir = (rayToWorld - rayFromWorld);
-
- rayDir.normalize();
- ///what about division by zero? --> just set rayDirection[i] to INF/BT_LARGE_FLOAT
- m_rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[0];
- m_rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[1];
- m_rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[2];
- m_signs[0] = m_rayDirectionInverse[0] < 0.0;
- m_signs[1] = m_rayDirectionInverse[1] < 0.0;
- m_signs[2] = m_rayDirectionInverse[2] < 0.0;
-
- m_lambda_max = rayDir.dot(m_rayToWorld - m_rayFromWorld);
- }
-
- virtual bool process(const btBroadphaseProxy* proxy)
- {
- ///terminate further ray tests, once the closestHitFraction reached zero
- if (m_resultCallback.m_closestHitFraction == btScalar(0.f))
- return false;
-
- btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
-
- //only perform raycast if filterMask matches
- if (m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- //btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
-#if 0
-#ifdef RECALCULATE_AABB
- btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
- collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(),collisionObjectAabbMin,collisionObjectAabbMax);
-#else
- //getBroadphase()->getAabb(collisionObject->getBroadphaseHandle(),collisionObjectAabbMin,collisionObjectAabbMax);
- const btVector3& collisionObjectAabbMin = collisionObject->getBroadphaseHandle()->m_aabbMin;
- const btVector3& collisionObjectAabbMax = collisionObject->getBroadphaseHandle()->m_aabbMax;
-#endif
-#endif
- //btScalar hitLambda = m_resultCallback.m_closestHitFraction;
- //culling already done by broadphase
- //if (btRayAabb(m_rayFromWorld,m_rayToWorld,collisionObjectAabbMin,collisionObjectAabbMax,hitLambda,m_hitNormal))
- {
- m_world->rayTestSingle(m_rayFromTrans, m_rayToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- m_resultCallback);
- }
- }
- return true;
- }
-};
-
-void btCollisionWorld::rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const
-{
- //BT_PROFILE("rayTest");
- /// use the broadphase to accelerate the search for objects, based on their aabb
- /// and for each object with ray-aabb overlap, perform an exact ray test
- btSingleRayCallback rayCB(rayFromWorld, rayToWorld, this, resultCallback);
-
-#ifndef USE_BRUTEFORCE_RAYBROADPHASE
- m_broadphasePairCache->rayTest(rayFromWorld, rayToWorld, rayCB);
-#else
- for (int i = 0; i < this->getNumCollisionObjects(); i++)
- {
- rayCB.process(m_collisionObjects[i]->getBroadphaseHandle());
- }
-#endif //USE_BRUTEFORCE_RAYBROADPHASE
-}
-
-struct btSingleSweepCallback : public btBroadphaseRayCallback
-{
- btTransform m_convexFromTrans;
- btTransform m_convexToTrans;
- btVector3 m_hitNormal;
- const btCollisionWorld* m_world;
- btCollisionWorld::ConvexResultCallback& m_resultCallback;
- btScalar m_allowedCcdPenetration;
- const btConvexShape* m_castShape;
-
- btSingleSweepCallback(const btConvexShape* castShape, const btTransform& convexFromTrans, const btTransform& convexToTrans, const btCollisionWorld* world, btCollisionWorld::ConvexResultCallback& resultCallback, btScalar allowedPenetration)
- : m_convexFromTrans(convexFromTrans),
- m_convexToTrans(convexToTrans),
- m_world(world),
- m_resultCallback(resultCallback),
- m_allowedCcdPenetration(allowedPenetration),
- m_castShape(castShape)
- {
- btVector3 unnormalizedRayDir = (m_convexToTrans.getOrigin() - m_convexFromTrans.getOrigin());
- btVector3 rayDir = unnormalizedRayDir.fuzzyZero() ? btVector3(btScalar(0.0), btScalar(0.0), btScalar(0.0)) : unnormalizedRayDir.normalized();
- ///what about division by zero? --> just set rayDirection[i] to INF/BT_LARGE_FLOAT
- m_rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[0];
- m_rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[1];
- m_rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(BT_LARGE_FLOAT) : btScalar(1.0) / rayDir[2];
- m_signs[0] = m_rayDirectionInverse[0] < 0.0;
- m_signs[1] = m_rayDirectionInverse[1] < 0.0;
- m_signs[2] = m_rayDirectionInverse[2] < 0.0;
-
- m_lambda_max = rayDir.dot(unnormalizedRayDir);
- }
-
- virtual bool process(const btBroadphaseProxy* proxy)
- {
- ///terminate further convex sweep tests, once the closestHitFraction reached zero
- if (m_resultCallback.m_closestHitFraction == btScalar(0.f))
- return false;
-
- btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
-
- //only perform raycast if filterMask matches
- if (m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- m_world->objectQuerySingle(m_castShape, m_convexFromTrans, m_convexToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- m_resultCallback,
- m_allowedCcdPenetration);
- }
-
- return true;
- }
-};
-
-void btCollisionWorld::convexSweepTest(const btConvexShape* castShape, const btTransform& convexFromWorld, const btTransform& convexToWorld, ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration) const
-{
- BT_PROFILE("convexSweepTest");
- /// use the broadphase to accelerate the search for objects, based on their aabb
- /// and for each object with ray-aabb overlap, perform an exact ray test
- /// unfortunately the implementation for rayTest and convexSweepTest duplicated, albeit practically identical
-
- btTransform convexFromTrans, convexToTrans;
- convexFromTrans = convexFromWorld;
- convexToTrans = convexToWorld;
- btVector3 castShapeAabbMin, castShapeAabbMax;
- /* Compute AABB that encompasses angular movement */
- {
- btVector3 linVel, angVel;
- btTransformUtil::calculateVelocity(convexFromTrans, convexToTrans, 1.0f, linVel, angVel);
- btVector3 zeroLinVel;
- zeroLinVel.setValue(0, 0, 0);
- btTransform R;
- R.setIdentity();
- R.setRotation(convexFromTrans.getRotation());
- castShape->calculateTemporalAabb(R, zeroLinVel, angVel, 1.0f, castShapeAabbMin, castShapeAabbMax);
- }
-
-#ifndef USE_BRUTEFORCE_RAYBROADPHASE
-
- btSingleSweepCallback convexCB(castShape, convexFromWorld, convexToWorld, this, resultCallback, allowedCcdPenetration);
-
- m_broadphasePairCache->rayTest(convexFromTrans.getOrigin(), convexToTrans.getOrigin(), convexCB, castShapeAabbMin, castShapeAabbMax);
-
-#else
- /// go over all objects, and if the ray intersects their aabb + cast shape aabb,
- // do a ray-shape query using convexCaster (CCD)
- int i;
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* collisionObject = m_collisionObjects[i];
- //only perform raycast if filterMask matches
- if (resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- btVector3 collisionObjectAabbMin, collisionObjectAabbMax;
- collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(), collisionObjectAabbMin, collisionObjectAabbMax);
- AabbExpand(collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
- btScalar hitLambda = btScalar(1.); //could use resultCallback.m_closestHitFraction, but needs testing
- btVector3 hitNormal;
- if (btRayAabb(convexFromWorld.getOrigin(), convexToWorld.getOrigin(), collisionObjectAabbMin, collisionObjectAabbMax, hitLambda, hitNormal))
- {
- objectQuerySingle(castShape, convexFromTrans, convexToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- resultCallback,
- allowedCcdPenetration);
- }
- }
- }
-#endif //USE_BRUTEFORCE_RAYBROADPHASE
-}
-
-struct btBridgedManifoldResult : public btManifoldResult
-{
- btCollisionWorld::ContactResultCallback& m_resultCallback;
-
- btBridgedManifoldResult(const btCollisionObjectWrapper* obj0Wrap, const btCollisionObjectWrapper* obj1Wrap, btCollisionWorld::ContactResultCallback& resultCallback)
- : btManifoldResult(obj0Wrap, obj1Wrap),
- m_resultCallback(resultCallback)
- {
- }
-
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth)
- {
- bool isSwapped = m_manifoldPtr->getBody0() != m_body0Wrap->getCollisionObject();
- btVector3 pointA = pointInWorld + normalOnBInWorld * depth;
- btVector3 localA;
- btVector3 localB;
- if (isSwapped)
- {
- localA = m_body1Wrap->getCollisionObject()->getWorldTransform().invXform(pointA);
- localB = m_body0Wrap->getCollisionObject()->getWorldTransform().invXform(pointInWorld);
- }
- else
- {
- localA = m_body0Wrap->getCollisionObject()->getWorldTransform().invXform(pointA);
- localB = m_body1Wrap->getCollisionObject()->getWorldTransform().invXform(pointInWorld);
- }
-
- btManifoldPoint newPt(localA, localB, normalOnBInWorld, depth);
- newPt.m_positionWorldOnA = pointA;
- newPt.m_positionWorldOnB = pointInWorld;
-
- //BP mod, store contact triangles.
- if (isSwapped)
- {
- newPt.m_partId0 = m_partId1;
- newPt.m_partId1 = m_partId0;
- newPt.m_index0 = m_index1;
- newPt.m_index1 = m_index0;
- }
- else
- {
- newPt.m_partId0 = m_partId0;
- newPt.m_partId1 = m_partId1;
- newPt.m_index0 = m_index0;
- newPt.m_index1 = m_index1;
- }
-
- //experimental feature info, for per-triangle material etc.
- const btCollisionObjectWrapper* obj0Wrap = isSwapped ? m_body1Wrap : m_body0Wrap;
- const btCollisionObjectWrapper* obj1Wrap = isSwapped ? m_body0Wrap : m_body1Wrap;
- m_resultCallback.addSingleResult(newPt, obj0Wrap, newPt.m_partId0, newPt.m_index0, obj1Wrap, newPt.m_partId1, newPt.m_index1);
- }
-};
-
-struct btSingleContactCallback : public btBroadphaseAabbCallback
-{
- btCollisionObject* m_collisionObject;
- btCollisionWorld* m_world;
- btCollisionWorld::ContactResultCallback& m_resultCallback;
-
- btSingleContactCallback(btCollisionObject* collisionObject, btCollisionWorld* world, btCollisionWorld::ContactResultCallback& resultCallback)
- : m_collisionObject(collisionObject),
- m_world(world),
- m_resultCallback(resultCallback)
- {
- }
-
- virtual bool process(const btBroadphaseProxy* proxy)
- {
- btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
- if (collisionObject == m_collisionObject)
- return true;
-
- //only perform raycast if filterMask matches
- if (m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- btCollisionObjectWrapper ob0(0, m_collisionObject->getCollisionShape(), m_collisionObject, m_collisionObject->getWorldTransform(), -1, -1);
- btCollisionObjectWrapper ob1(0, collisionObject->getCollisionShape(), collisionObject, collisionObject->getWorldTransform(), -1, -1);
-
- btCollisionAlgorithm* algorithm = m_world->getDispatcher()->findAlgorithm(&ob0, &ob1, 0, BT_CLOSEST_POINT_ALGORITHMS);
- if (algorithm)
- {
- btBridgedManifoldResult contactPointResult(&ob0, &ob1, m_resultCallback);
- //discrete collision detection query
-
- algorithm->processCollision(&ob0, &ob1, m_world->getDispatchInfo(), &contactPointResult);
-
- algorithm->~btCollisionAlgorithm();
- m_world->getDispatcher()->freeCollisionAlgorithm(algorithm);
- }
- }
- return true;
- }
-};
-
-///contactTest performs a discrete collision test against all objects in the btCollisionWorld, and calls the resultCallback.
-///it reports one or more contact points for every overlapping object (including the one with deepest penetration)
-void btCollisionWorld::contactTest(btCollisionObject* colObj, ContactResultCallback& resultCallback)
-{
- btVector3 aabbMin, aabbMax;
- colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), aabbMin, aabbMax);
- btSingleContactCallback contactCB(colObj, this, resultCallback);
-
- m_broadphasePairCache->aabbTest(aabbMin, aabbMax, contactCB);
-}
-
-///contactTest performs a discrete collision test between two collision objects and calls the resultCallback if overlap if detected.
-///it reports one or more contact points (including the one with deepest penetration)
-void btCollisionWorld::contactPairTest(btCollisionObject* colObjA, btCollisionObject* colObjB, ContactResultCallback& resultCallback)
-{
- btCollisionObjectWrapper obA(0, colObjA->getCollisionShape(), colObjA, colObjA->getWorldTransform(), -1, -1);
- btCollisionObjectWrapper obB(0, colObjB->getCollisionShape(), colObjB, colObjB->getWorldTransform(), -1, -1);
-
- btCollisionAlgorithm* algorithm = getDispatcher()->findAlgorithm(&obA, &obB, 0, BT_CLOSEST_POINT_ALGORITHMS);
- if (algorithm)
- {
- btBridgedManifoldResult contactPointResult(&obA, &obB, resultCallback);
- contactPointResult.m_closestPointDistanceThreshold = resultCallback.m_closestDistanceThreshold;
- //discrete collision detection query
- algorithm->processCollision(&obA, &obB, getDispatchInfo(), &contactPointResult);
-
- algorithm->~btCollisionAlgorithm();
- getDispatcher()->freeCollisionAlgorithm(algorithm);
- }
-}
-
-class DebugDrawcallback : public btTriangleCallback, public btInternalTriangleIndexCallback
-{
- btIDebugDraw* m_debugDrawer;
- btVector3 m_color;
- btTransform m_worldTrans;
-
-public:
- DebugDrawcallback(btIDebugDraw* debugDrawer, const btTransform& worldTrans, const btVector3& color) : m_debugDrawer(debugDrawer),
- m_color(color),
- m_worldTrans(worldTrans)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- processTriangle(triangle, partId, triangleIndex);
- }
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)partId;
- (void)triangleIndex;
-
- btVector3 wv0, wv1, wv2;
- wv0 = m_worldTrans * triangle[0];
- wv1 = m_worldTrans * triangle[1];
- wv2 = m_worldTrans * triangle[2];
- btVector3 center = (wv0 + wv1 + wv2) * btScalar(1. / 3.);
-
- if (m_debugDrawer->getDebugMode() & btIDebugDraw::DBG_DrawNormals)
- {
- btVector3 normal = (wv1 - wv0).cross(wv2 - wv0);
- normal.normalize();
- btVector3 normalColor(1, 1, 0);
- m_debugDrawer->drawLine(center, center + normal, normalColor);
- }
- m_debugDrawer->drawTriangle(wv0, wv1, wv2, m_color, 1.0);
- }
-};
-
-void btCollisionWorld::debugDrawObject(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color)
-{
- // Draw a small simplex at the center of the object
- if (getDebugDrawer() && getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawFrames)
- {
- getDebugDrawer()->drawTransform(worldTransform, .1);
- }
-
- if (shape->getShapeType() == COMPOUND_SHAPE_PROXYTYPE)
- {
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(shape);
- for (int i = compoundShape->getNumChildShapes() - 1; i >= 0; i--)
- {
- btTransform childTrans = compoundShape->getChildTransform(i);
- const btCollisionShape* colShape = compoundShape->getChildShape(i);
- debugDrawObject(worldTransform * childTrans, colShape, color);
- }
- }
- else
- {
- switch (shape->getShapeType())
- {
- case BOX_SHAPE_PROXYTYPE:
- {
- const btBoxShape* boxShape = static_cast<const btBoxShape*>(shape);
- btVector3 halfExtents = boxShape->getHalfExtentsWithMargin();
- getDebugDrawer()->drawBox(-halfExtents, halfExtents, worldTransform, color);
- break;
- }
-
- case SPHERE_SHAPE_PROXYTYPE:
- {
- const btSphereShape* sphereShape = static_cast<const btSphereShape*>(shape);
- btScalar radius = sphereShape->getMargin(); //radius doesn't include the margin, so draw with margin
-
- getDebugDrawer()->drawSphere(radius, worldTransform, color);
- break;
- }
- case MULTI_SPHERE_SHAPE_PROXYTYPE:
- {
- const btMultiSphereShape* multiSphereShape = static_cast<const btMultiSphereShape*>(shape);
-
- btTransform childTransform;
- childTransform.setIdentity();
-
- for (int i = multiSphereShape->getSphereCount() - 1; i >= 0; i--)
- {
- childTransform.setOrigin(multiSphereShape->getSpherePosition(i));
- getDebugDrawer()->drawSphere(multiSphereShape->getSphereRadius(i), worldTransform * childTransform, color);
- }
-
- break;
- }
- case CAPSULE_SHAPE_PROXYTYPE:
- {
- const btCapsuleShape* capsuleShape = static_cast<const btCapsuleShape*>(shape);
-
- btScalar radius = capsuleShape->getRadius();
- btScalar halfHeight = capsuleShape->getHalfHeight();
-
- int upAxis = capsuleShape->getUpAxis();
- getDebugDrawer()->drawCapsule(radius, halfHeight, upAxis, worldTransform, color);
- break;
- }
- case CONE_SHAPE_PROXYTYPE:
- {
- const btConeShape* coneShape = static_cast<const btConeShape*>(shape);
- btScalar radius = coneShape->getRadius(); //+coneShape->getMargin();
- btScalar height = coneShape->getHeight(); //+coneShape->getMargin();
-
- int upAxis = coneShape->getConeUpIndex();
- getDebugDrawer()->drawCone(radius, height, upAxis, worldTransform, color);
- break;
- }
- case CYLINDER_SHAPE_PROXYTYPE:
- {
- const btCylinderShape* cylinder = static_cast<const btCylinderShape*>(shape);
- int upAxis = cylinder->getUpAxis();
- btScalar radius = cylinder->getRadius();
- btScalar halfHeight = cylinder->getHalfExtentsWithMargin()[upAxis];
- getDebugDrawer()->drawCylinder(radius, halfHeight, upAxis, worldTransform, color);
- break;
- }
-
- case STATIC_PLANE_PROXYTYPE:
- {
- const btStaticPlaneShape* staticPlaneShape = static_cast<const btStaticPlaneShape*>(shape);
- btScalar planeConst = staticPlaneShape->getPlaneConstant();
- const btVector3& planeNormal = staticPlaneShape->getPlaneNormal();
- getDebugDrawer()->drawPlane(planeNormal, planeConst, worldTransform, color);
- break;
- }
- default:
- {
- /// for polyhedral shapes
- if (shape->isPolyhedral())
- {
- btPolyhedralConvexShape* polyshape = (btPolyhedralConvexShape*)shape;
-
- int i;
- if (polyshape->getConvexPolyhedron())
- {
- const btConvexPolyhedron* poly = polyshape->getConvexPolyhedron();
- for (i = 0; i < poly->m_faces.size(); i++)
- {
- btVector3 centroid(0, 0, 0);
- int numVerts = poly->m_faces[i].m_indices.size();
- if (numVerts)
- {
- int lastV = poly->m_faces[i].m_indices[numVerts - 1];
- for (int v = 0; v < poly->m_faces[i].m_indices.size(); v++)
- {
- int curVert = poly->m_faces[i].m_indices[v];
- centroid += poly->m_vertices[curVert];
- getDebugDrawer()->drawLine(worldTransform * poly->m_vertices[lastV], worldTransform * poly->m_vertices[curVert], color);
- lastV = curVert;
- }
- }
- centroid *= btScalar(1.f) / btScalar(numVerts);
- if (getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawNormals)
- {
- btVector3 normalColor(1, 1, 0);
- btVector3 faceNormal(poly->m_faces[i].m_plane[0], poly->m_faces[i].m_plane[1], poly->m_faces[i].m_plane[2]);
- getDebugDrawer()->drawLine(worldTransform * centroid, worldTransform * (centroid + faceNormal), normalColor);
- }
- }
- }
- else
- {
- for (i = 0; i < polyshape->getNumEdges(); i++)
- {
- btVector3 a, b;
- polyshape->getEdge(i, a, b);
- btVector3 wa = worldTransform * a;
- btVector3 wb = worldTransform * b;
- getDebugDrawer()->drawLine(wa, wb, color);
- }
- }
- }
-
- if (shape->isConcave())
- {
- btConcaveShape* concaveMesh = (btConcaveShape*)shape;
-
- ///@todo pass camera, for some culling? no -> we are not a graphics lib
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- btVector3 aabbMin(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
-
- DebugDrawcallback drawCallback(getDebugDrawer(), worldTransform, color);
- concaveMesh->processAllTriangles(&drawCallback, aabbMin, aabbMax);
- }
-
- if (shape->getShapeType() == CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE)
- {
- btConvexTriangleMeshShape* convexMesh = (btConvexTriangleMeshShape*)shape;
- //todo: pass camera for some culling
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- btVector3 aabbMin(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- //DebugDrawcallback drawCallback;
- DebugDrawcallback drawCallback(getDebugDrawer(), worldTransform, color);
- convexMesh->getMeshInterface()->InternalProcessAllTriangles(&drawCallback, aabbMin, aabbMax);
- }
- }
- }
- }
-}
-
-void btCollisionWorld::debugDrawWorld()
-{
- if (getDebugDrawer())
- {
- getDebugDrawer()->clearLines();
-
- btIDebugDraw::DefaultColors defaultColors = getDebugDrawer()->getDefaultColors();
-
- if (getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawContactPoints)
- {
- if (getDispatcher())
- {
- int numManifolds = getDispatcher()->getNumManifolds();
-
- for (int i = 0; i < numManifolds; i++)
- {
- btPersistentManifold* contactManifold = getDispatcher()->getManifoldByIndexInternal(i);
- //btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
- //btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
-
- int numContacts = contactManifold->getNumContacts();
- for (int j = 0; j < numContacts; j++)
- {
- btManifoldPoint& cp = contactManifold->getContactPoint(j);
- getDebugDrawer()->drawContactPoint(cp.m_positionWorldOnB, cp.m_normalWorldOnB, cp.getDistance(), cp.getLifeTime(), defaultColors.m_contactPoint);
- }
- }
- }
- }
-
- if ((getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe | btIDebugDraw::DBG_DrawAabb)))
- {
- int i;
-
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- if ((colObj->getCollisionFlags() & btCollisionObject::CF_DISABLE_VISUALIZE_OBJECT) == 0)
- {
- if (getDebugDrawer() && (getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawWireframe))
- {
- btVector3 color(btScalar(0.4), btScalar(0.4), btScalar(0.4));
-
- switch (colObj->getActivationState())
- {
- case ACTIVE_TAG:
- color = defaultColors.m_activeObject;
- break;
- case ISLAND_SLEEPING:
- color = defaultColors.m_deactivatedObject;
- break;
- case WANTS_DEACTIVATION:
- color = defaultColors.m_wantsDeactivationObject;
- break;
- case DISABLE_DEACTIVATION:
- color = defaultColors.m_disabledDeactivationObject;
- break;
- case DISABLE_SIMULATION:
- color = defaultColors.m_disabledSimulationObject;
- break;
- default:
- {
- color = btVector3(btScalar(.3), btScalar(0.3), btScalar(0.3));
- }
- };
-
- colObj->getCustomDebugColor(color);
-
- debugDrawObject(colObj->getWorldTransform(), colObj->getCollisionShape(), color);
- }
- if (m_debugDrawer && (m_debugDrawer->getDebugMode() & btIDebugDraw::DBG_DrawAabb))
- {
- btVector3 minAabb, maxAabb;
- btVector3 colorvec = defaultColors.m_aabb;
- colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), minAabb, maxAabb);
- btVector3 contactThreshold(gContactBreakingThreshold, gContactBreakingThreshold, gContactBreakingThreshold);
- minAabb -= contactThreshold;
- maxAabb += contactThreshold;
-
- btVector3 minAabb2, maxAabb2;
-
- if (getDispatchInfo().m_useContinuous && colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY && !colObj->isStaticOrKinematicObject())
- {
- colObj->getCollisionShape()->getAabb(colObj->getInterpolationWorldTransform(), minAabb2, maxAabb2);
- minAabb2 -= contactThreshold;
- maxAabb2 += contactThreshold;
- minAabb.setMin(minAabb2);
- maxAabb.setMax(maxAabb2);
- }
-
- m_debugDrawer->drawAabb(minAabb, maxAabb, colorvec);
- }
- }
- }
- }
- }
-}
-
-void btCollisionWorld::serializeCollisionObjects(btSerializer* serializer)
-{
- int i;
-
- ///keep track of shapes already serialized
- btHashMap<btHashPtr, btCollisionShape*> serializedShapes;
-
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btCollisionShape* shape = colObj->getCollisionShape();
-
- if (!serializedShapes.find(shape))
- {
- serializedShapes.insert(shape, shape);
- shape->serializeSingleShape(serializer);
- }
- }
-
- //serialize all collision objects
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- if (colObj->getInternalType() == btCollisionObject::CO_COLLISION_OBJECT)
- {
- colObj->serializeSingleObject(serializer);
- }
- }
-}
-
-void btCollisionWorld::serializeContactManifolds(btSerializer* serializer)
-{
- if (serializer->getSerializationFlags() & BT_SERIALIZE_CONTACT_MANIFOLDS)
- {
- int numManifolds = getDispatcher()->getNumManifolds();
- for (int i = 0; i < numManifolds; i++)
- {
- const btPersistentManifold* manifold = getDispatcher()->getInternalManifoldPointer()[i];
- //don't serialize empty manifolds, they just take space
- //(may have to do it anyway if it destroys determinism)
- if (manifold->getNumContacts() == 0)
- continue;
-
- btChunk* chunk = serializer->allocate(manifold->calculateSerializeBufferSize(), 1);
- const char* structType = manifold->serialize(manifold, chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_CONTACTMANIFOLD_CODE, (void*)manifold);
- }
- }
-}
-
-void btCollisionWorld::serialize(btSerializer* serializer)
-{
- serializer->startSerialization();
-
- serializeCollisionObjects(serializer);
-
- serializeContactManifolds(serializer);
-
- serializer->finishSerialization();
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h
deleted file mode 100644
index fd0e5b9bbd..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorld.h
+++ /dev/null
@@ -1,513 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/**
- * @mainpage Bullet Documentation
- *
- * @section intro_sec Introduction
- * Bullet is a Collision Detection and Rigid Body Dynamics Library. The Library is Open Source and free for commercial use, under the ZLib license ( http://opensource.org/licenses/zlib-license.php ).
- *
- * The main documentation is Bullet_User_Manual.pdf, included in the source code distribution.
- * There is the Physics Forum for feedback and general Collision Detection and Physics discussions.
- * Please visit http://www.bulletphysics.org
- *
- * @section install_sec Installation
- *
- * @subsection step1 Step 1: Download
- * You can download the Bullet Physics Library from the github repository: https://github.com/bulletphysics/bullet3/releases
- *
- * @subsection step2 Step 2: Building
- * Bullet has multiple build systems, including premake, cmake and autotools. Premake and cmake support all platforms.
- * Premake is included in the Bullet/build folder for Windows, Mac OSX and Linux.
- * Under Windows you can click on Bullet/build/vs2010.bat to create Microsoft Visual Studio projects.
- * On Mac OSX and Linux you can open a terminal and generate Makefile, codeblocks or Xcode4 projects:
- * cd Bullet/build
- * ./premake4_osx gmake or ./premake4_linux gmake or ./premake4_linux64 gmake or (for Mac) ./premake4_osx xcode4
- * cd Bullet/build/gmake
- * make
- *
- * An alternative to premake is cmake. You can download cmake from http://www.cmake.org
- * cmake can autogenerate projectfiles for Microsoft Visual Studio, Apple Xcode, KDevelop and Unix Makefiles.
- * The easiest is to run the CMake cmake-gui graphical user interface and choose the options and generate projectfiles.
- * You can also use cmake in the command-line. Here are some examples for various platforms:
- * cmake . -G "Visual Studio 9 2008"
- * cmake . -G Xcode
- * cmake . -G "Unix Makefiles"
- * Although cmake is recommended, you can also use autotools for UNIX: ./autogen.sh ./configure to create a Makefile and then run make.
- *
- * @subsection step3 Step 3: Testing demos
- * Try to run and experiment with BasicDemo executable as a starting point.
- * Bullet can be used in several ways, as Full Rigid Body simulation, as Collision Detector Library or Low Level / Snippets like the GJK Closest Point calculation.
- * The Dependencies can be seen in this documentation under Directories
- *
- * @subsection step4 Step 4: Integrating in your application, full Rigid Body and Soft Body simulation
- * Check out BasicDemo how to create a btDynamicsWorld, btRigidBody and btCollisionShape, Stepping the simulation and synchronizing your graphics object transform.
- * Check out SoftDemo how to use soft body dynamics, using btSoftRigidDynamicsWorld.
- * @subsection step5 Step 5 : Integrate the Collision Detection Library (without Dynamics and other Extras)
- * Bullet Collision Detection can also be used without the Dynamics/Extras.
- * Check out btCollisionWorld and btCollisionObject, and the CollisionInterfaceDemo.
- * @subsection step6 Step 6 : Use Snippets like the GJK Closest Point calculation.
- * Bullet has been designed in a modular way keeping dependencies to a minimum. The ConvexHullDistance demo demonstrates direct use of btGjkPairDetector.
- *
- * @section copyright Copyright
- * For up-to-data information and copyright and contributors list check out the Bullet_User_Manual.pdf
- *
- */
-
-#ifndef BT_COLLISION_WORLD_H
-#define BT_COLLISION_WORLD_H
-
-class btCollisionShape;
-class btConvexShape;
-class btBroadphaseInterface;
-class btSerializer;
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "btCollisionObject.h"
-#include "btCollisionDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-///CollisionWorld is interface and container for the collision detection
-class btCollisionWorld
-{
-protected:
- btAlignedObjectArray<btCollisionObject*> m_collisionObjects;
-
- btDispatcher* m_dispatcher1;
-
- btDispatcherInfo m_dispatchInfo;
-
- btBroadphaseInterface* m_broadphasePairCache;
-
- btIDebugDraw* m_debugDrawer;
-
- ///m_forceUpdateAllAabbs can be set to false as an optimization to only update active object AABBs
- ///it is true by default, because it is error-prone (setting the position of static objects wouldn't update their AABB)
- bool m_forceUpdateAllAabbs;
-
- void serializeCollisionObjects(btSerializer* serializer);
-
- void serializeContactManifolds(btSerializer* serializer);
-
-public:
- //this constructor doesn't own the dispatcher and paircache/broadphase
- btCollisionWorld(btDispatcher* dispatcher, btBroadphaseInterface* broadphasePairCache, btCollisionConfiguration* collisionConfiguration);
-
- virtual ~btCollisionWorld();
-
- void setBroadphase(btBroadphaseInterface* pairCache)
- {
- m_broadphasePairCache = pairCache;
- }
-
- const btBroadphaseInterface* getBroadphase() const
- {
- return m_broadphasePairCache;
- }
-
- btBroadphaseInterface* getBroadphase()
- {
- return m_broadphasePairCache;
- }
-
- btOverlappingPairCache* getPairCache()
- {
- return m_broadphasePairCache->getOverlappingPairCache();
- }
-
- btDispatcher* getDispatcher()
- {
- return m_dispatcher1;
- }
-
- const btDispatcher* getDispatcher() const
- {
- return m_dispatcher1;
- }
-
- void updateSingleAabb(btCollisionObject* colObj);
-
- virtual void updateAabbs();
-
- ///the computeOverlappingPairs is usually already called by performDiscreteCollisionDetection (or stepSimulation)
- ///it can be useful to use if you perform ray tests without collision detection/simulation
- virtual void computeOverlappingPairs();
-
- virtual void setDebugDrawer(btIDebugDraw* debugDrawer)
- {
- m_debugDrawer = debugDrawer;
- }
-
- virtual btIDebugDraw* getDebugDrawer()
- {
- return m_debugDrawer;
- }
-
- virtual void debugDrawWorld();
-
- virtual void debugDrawObject(const btTransform& worldTransform, const btCollisionShape* shape, const btVector3& color);
-
- ///LocalShapeInfo gives extra information for complex shapes
- ///Currently, only btTriangleMeshShape is available, so it just contains triangleIndex and subpart
- struct LocalShapeInfo
- {
- int m_shapePart;
- int m_triangleIndex;
-
- //const btCollisionShape* m_shapeTemp;
- //const btTransform* m_shapeLocalTransform;
- };
-
- struct LocalRayResult
- {
- LocalRayResult(const btCollisionObject* collisionObject,
- LocalShapeInfo* localShapeInfo,
- const btVector3& hitNormalLocal,
- btScalar hitFraction)
- : m_collisionObject(collisionObject),
- m_localShapeInfo(localShapeInfo),
- m_hitNormalLocal(hitNormalLocal),
- m_hitFraction(hitFraction)
- {
- }
-
- const btCollisionObject* m_collisionObject;
- LocalShapeInfo* m_localShapeInfo;
- btVector3 m_hitNormalLocal;
- btScalar m_hitFraction;
- };
-
- ///RayResultCallback is used to report new raycast results
- struct RayResultCallback
- {
- btScalar m_closestHitFraction;
- const btCollisionObject* m_collisionObject;
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
- //@BP Mod - Custom flags, currently used to enable backface culling on tri-meshes, see btRaycastCallback.h. Apply any of the EFlags defined there on m_flags here to invoke.
- unsigned int m_flags;
-
- virtual ~RayResultCallback()
- {
- }
- bool hasHit() const
- {
- return (m_collisionObject != 0);
- }
-
- RayResultCallback()
- : m_closestHitFraction(btScalar(1.)),
- m_collisionObject(0),
- m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter),
- m_collisionFilterMask(btBroadphaseProxy::AllFilter),
- //@BP Mod
- m_flags(0)
- {
- }
-
- virtual bool needsCollision(btBroadphaseProxy* proxy0) const
- {
- bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
- collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
- return collides;
- }
-
- virtual btScalar addSingleResult(LocalRayResult& rayResult, bool normalInWorldSpace) = 0;
- };
-
- struct ClosestRayResultCallback : public RayResultCallback
- {
- ClosestRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld)
- : m_rayFromWorld(rayFromWorld),
- m_rayToWorld(rayToWorld)
- {
- }
-
- btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction
- btVector3 m_rayToWorld;
-
- btVector3 m_hitNormalWorld;
- btVector3 m_hitPointWorld;
-
- virtual btScalar addSingleResult(LocalRayResult& rayResult, bool normalInWorldSpace)
- {
- //caller already does the filter on the m_closestHitFraction
- btAssert(rayResult.m_hitFraction <= m_closestHitFraction);
-
- m_closestHitFraction = rayResult.m_hitFraction;
- m_collisionObject = rayResult.m_collisionObject;
- if (normalInWorldSpace)
- {
- m_hitNormalWorld = rayResult.m_hitNormalLocal;
- }
- else
- {
- ///need to transform normal into worldspace
- m_hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal;
- }
- m_hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, rayResult.m_hitFraction);
- return rayResult.m_hitFraction;
- }
- };
-
- struct AllHitsRayResultCallback : public RayResultCallback
- {
- AllHitsRayResultCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld)
- : m_rayFromWorld(rayFromWorld),
- m_rayToWorld(rayToWorld)
- {
- }
-
- btAlignedObjectArray<const btCollisionObject*> m_collisionObjects;
-
- btVector3 m_rayFromWorld; //used to calculate hitPointWorld from hitFraction
- btVector3 m_rayToWorld;
-
- btAlignedObjectArray<btVector3> m_hitNormalWorld;
- btAlignedObjectArray<btVector3> m_hitPointWorld;
- btAlignedObjectArray<btScalar> m_hitFractions;
-
- virtual btScalar addSingleResult(LocalRayResult& rayResult, bool normalInWorldSpace)
- {
- m_collisionObject = rayResult.m_collisionObject;
- m_collisionObjects.push_back(rayResult.m_collisionObject);
- btVector3 hitNormalWorld;
- if (normalInWorldSpace)
- {
- hitNormalWorld = rayResult.m_hitNormalLocal;
- }
- else
- {
- ///need to transform normal into worldspace
- hitNormalWorld = m_collisionObject->getWorldTransform().getBasis() * rayResult.m_hitNormalLocal;
- }
- m_hitNormalWorld.push_back(hitNormalWorld);
- btVector3 hitPointWorld;
- hitPointWorld.setInterpolate3(m_rayFromWorld, m_rayToWorld, rayResult.m_hitFraction);
- m_hitPointWorld.push_back(hitPointWorld);
- m_hitFractions.push_back(rayResult.m_hitFraction);
- return m_closestHitFraction;
- }
- };
-
- struct LocalConvexResult
- {
- LocalConvexResult(const btCollisionObject* hitCollisionObject,
- LocalShapeInfo* localShapeInfo,
- const btVector3& hitNormalLocal,
- const btVector3& hitPointLocal,
- btScalar hitFraction)
- : m_hitCollisionObject(hitCollisionObject),
- m_localShapeInfo(localShapeInfo),
- m_hitNormalLocal(hitNormalLocal),
- m_hitPointLocal(hitPointLocal),
- m_hitFraction(hitFraction)
- {
- }
-
- const btCollisionObject* m_hitCollisionObject;
- LocalShapeInfo* m_localShapeInfo;
- btVector3 m_hitNormalLocal;
- btVector3 m_hitPointLocal;
- btScalar m_hitFraction;
- };
-
- ///RayResultCallback is used to report new raycast results
- struct ConvexResultCallback
- {
- btScalar m_closestHitFraction;
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
-
- ConvexResultCallback()
- : m_closestHitFraction(btScalar(1.)),
- m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter),
- m_collisionFilterMask(btBroadphaseProxy::AllFilter)
- {
- }
-
- virtual ~ConvexResultCallback()
- {
- }
-
- bool hasHit() const
- {
- return (m_closestHitFraction < btScalar(1.));
- }
-
- virtual bool needsCollision(btBroadphaseProxy* proxy0) const
- {
- bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
- collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
- return collides;
- }
-
- virtual btScalar addSingleResult(LocalConvexResult& convexResult, bool normalInWorldSpace) = 0;
- };
-
- struct ClosestConvexResultCallback : public ConvexResultCallback
- {
- ClosestConvexResultCallback(const btVector3& convexFromWorld, const btVector3& convexToWorld)
- : m_convexFromWorld(convexFromWorld),
- m_convexToWorld(convexToWorld),
- m_hitCollisionObject(0)
- {
- }
-
- btVector3 m_convexFromWorld; //used to calculate hitPointWorld from hitFraction
- btVector3 m_convexToWorld;
-
- btVector3 m_hitNormalWorld;
- btVector3 m_hitPointWorld;
- const btCollisionObject* m_hitCollisionObject;
-
- virtual btScalar addSingleResult(LocalConvexResult& convexResult, bool normalInWorldSpace)
- {
- //caller already does the filter on the m_closestHitFraction
- btAssert(convexResult.m_hitFraction <= m_closestHitFraction);
-
- m_closestHitFraction = convexResult.m_hitFraction;
- m_hitCollisionObject = convexResult.m_hitCollisionObject;
- if (normalInWorldSpace)
- {
- m_hitNormalWorld = convexResult.m_hitNormalLocal;
- }
- else
- {
- ///need to transform normal into worldspace
- m_hitNormalWorld = m_hitCollisionObject->getWorldTransform().getBasis() * convexResult.m_hitNormalLocal;
- }
- m_hitPointWorld = convexResult.m_hitPointLocal;
- return convexResult.m_hitFraction;
- }
- };
-
- ///ContactResultCallback is used to report contact points
- struct ContactResultCallback
- {
- int m_collisionFilterGroup;
- int m_collisionFilterMask;
- btScalar m_closestDistanceThreshold;
-
- ContactResultCallback()
- : m_collisionFilterGroup(btBroadphaseProxy::DefaultFilter),
- m_collisionFilterMask(btBroadphaseProxy::AllFilter),
- m_closestDistanceThreshold(0)
- {
- }
-
- virtual ~ContactResultCallback()
- {
- }
-
- virtual bool needsCollision(btBroadphaseProxy* proxy0) const
- {
- bool collides = (proxy0->m_collisionFilterGroup & m_collisionFilterMask) != 0;
- collides = collides && (m_collisionFilterGroup & proxy0->m_collisionFilterMask);
- return collides;
- }
-
- virtual btScalar addSingleResult(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper* colObj1Wrap, int partId1, int index1) = 0;
- };
-
- int getNumCollisionObjects() const
- {
- return int(m_collisionObjects.size());
- }
-
- /// rayTest performs a raycast on all objects in the btCollisionWorld, and calls the resultCallback
- /// This allows for several queries: first hit, all hits, any hit, dependent on the value returned by the callback.
- virtual void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const;
-
- /// convexTest performs a swept convex cast on all objects in the btCollisionWorld, and calls the resultCallback
- /// This allows for several queries: first hit, all hits, any hit, dependent on the value return by the callback.
- void convexSweepTest(const btConvexShape* castShape, const btTransform& from, const btTransform& to, ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration = btScalar(0.)) const;
-
- ///contactTest performs a discrete collision test between colObj against all objects in the btCollisionWorld, and calls the resultCallback.
- ///it reports one or more contact points for every overlapping object (including the one with deepest penetration)
- void contactTest(btCollisionObject* colObj, ContactResultCallback& resultCallback);
-
- ///contactTest performs a discrete collision test between two collision objects and calls the resultCallback if overlap if detected.
- ///it reports one or more contact points (including the one with deepest penetration)
- void contactPairTest(btCollisionObject* colObjA, btCollisionObject* colObjB, ContactResultCallback& resultCallback);
-
- /// rayTestSingle performs a raycast call and calls the resultCallback. It is used internally by rayTest.
- /// In a future implementation, we consider moving the ray test as a virtual method in btCollisionShape.
- /// This allows more customization.
- static void rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback);
-
- static void rayTestSingleInternal(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- const btCollisionObjectWrapper* collisionObjectWrap,
- RayResultCallback& resultCallback);
-
- /// objectQuerySingle performs a collision detection query and calls the resultCallback. It is used internally by rayTest.
- static void objectQuerySingle(const btConvexShape* castShape, const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- ConvexResultCallback& resultCallback, btScalar allowedPenetration);
-
- static void objectQuerySingleInternal(const btConvexShape* castShape, const btTransform& convexFromTrans, const btTransform& convexToTrans,
- const btCollisionObjectWrapper* colObjWrap,
- ConvexResultCallback& resultCallback, btScalar allowedPenetration);
-
- virtual void addCollisionObject(btCollisionObject* collisionObject, int collisionFilterGroup = btBroadphaseProxy::DefaultFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter);
-
- virtual void refreshBroadphaseProxy(btCollisionObject* collisionObject);
-
- btCollisionObjectArray& getCollisionObjectArray()
- {
- return m_collisionObjects;
- }
-
- const btCollisionObjectArray& getCollisionObjectArray() const
- {
- return m_collisionObjects;
- }
-
- virtual void removeCollisionObject(btCollisionObject* collisionObject);
-
- virtual void performDiscreteCollisionDetection();
-
- btDispatcherInfo& getDispatchInfo()
- {
- return m_dispatchInfo;
- }
-
- const btDispatcherInfo& getDispatchInfo() const
- {
- return m_dispatchInfo;
- }
-
- bool getForceUpdateAllAabbs() const
- {
- return m_forceUpdateAllAabbs;
- }
- void setForceUpdateAllAabbs(bool forceUpdateAllAabbs)
- {
- m_forceUpdateAllAabbs = forceUpdateAllAabbs;
- }
-
- ///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (Bullet/Demos/SerializeDemo)
- virtual void serialize(btSerializer* serializer);
-};
-
-#endif //BT_COLLISION_WORLD_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.cpp
deleted file mode 100644
index e56e73dcf5..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.cpp
+++ /dev/null
@@ -1,1087 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCollisionWorldImporter.h"
-#include "btBulletCollisionCommon.h"
-#include "LinearMath/btSerializer.h" //for btBulletSerializedArrays definition
-
-#ifdef SUPPORT_GIMPACT_SHAPE_IMPORT
-#include "BulletCollision/Gimpact/btGImpactShape.h"
-#endif //SUPPORT_GIMPACT_SHAPE_IMPORT
-
-btCollisionWorldImporter::btCollisionWorldImporter(btCollisionWorld* world)
- : m_collisionWorld(world),
- m_verboseMode(0)
-{
-}
-
-btCollisionWorldImporter::~btCollisionWorldImporter()
-{
-}
-
-bool btCollisionWorldImporter::convertAllObjects(btBulletSerializedArrays* arrays)
-{
- m_shapeMap.clear();
- m_bodyMap.clear();
-
- int i;
-
- for (i = 0; i < arrays->m_bvhsDouble.size(); i++)
- {
- btOptimizedBvh* bvh = createOptimizedBvh();
- btQuantizedBvhDoubleData* bvhData = arrays->m_bvhsDouble[i];
- bvh->deSerializeDouble(*bvhData);
- m_bvhMap.insert(arrays->m_bvhsDouble[i], bvh);
- }
- for (i = 0; i < arrays->m_bvhsFloat.size(); i++)
- {
- btOptimizedBvh* bvh = createOptimizedBvh();
- btQuantizedBvhFloatData* bvhData = arrays->m_bvhsFloat[i];
- bvh->deSerializeFloat(*bvhData);
- m_bvhMap.insert(arrays->m_bvhsFloat[i], bvh);
- }
-
- for (i = 0; i < arrays->m_colShapeData.size(); i++)
- {
- btCollisionShapeData* shapeData = arrays->m_colShapeData[i];
- btCollisionShape* shape = convertCollisionShape(shapeData);
- if (shape)
- {
- // printf("shapeMap.insert(%x,%x)\n",shapeData,shape);
- m_shapeMap.insert(shapeData, shape);
- }
-
- if (shape && shapeData->m_name)
- {
- char* newname = duplicateName(shapeData->m_name);
- m_objectNameMap.insert(shape, newname);
- m_nameShapeMap.insert(newname, shape);
- }
- }
-
- for (i = 0; i < arrays->m_collisionObjectDataDouble.size(); i++)
- {
- btCollisionObjectDoubleData* colObjData = arrays->m_collisionObjectDataDouble[i];
- btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionShape);
- if (shapePtr && *shapePtr)
- {
- btTransform startTransform;
- colObjData->m_worldTransform.m_origin.m_floats[3] = 0.f;
- startTransform.deSerializeDouble(colObjData->m_worldTransform);
-
- btCollisionShape* shape = (btCollisionShape*)*shapePtr;
- btCollisionObject* body = createCollisionObject(startTransform, shape, colObjData->m_name);
- body->setFriction(btScalar(colObjData->m_friction));
- body->setRestitution(btScalar(colObjData->m_restitution));
-
-#ifdef USE_INTERNAL_EDGE_UTILITY
- if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*)shape;
- if (trimesh->getTriangleInfoMap())
- {
- body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK);
- }
- }
-#endif //USE_INTERNAL_EDGE_UTILITY
- m_bodyMap.insert(colObjData, body);
- }
- else
- {
- printf("error: no shape found\n");
- }
- }
- for (i = 0; i < arrays->m_collisionObjectDataFloat.size(); i++)
- {
- btCollisionObjectFloatData* colObjData = arrays->m_collisionObjectDataFloat[i];
- btCollisionShape** shapePtr = m_shapeMap.find(colObjData->m_collisionShape);
- if (shapePtr && *shapePtr)
- {
- btTransform startTransform;
- colObjData->m_worldTransform.m_origin.m_floats[3] = 0.f;
- startTransform.deSerializeFloat(colObjData->m_worldTransform);
-
- btCollisionShape* shape = (btCollisionShape*)*shapePtr;
- btCollisionObject* body = createCollisionObject(startTransform, shape, colObjData->m_name);
-
-#ifdef USE_INTERNAL_EDGE_UTILITY
- if (shape->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- btBvhTriangleMeshShape* trimesh = (btBvhTriangleMeshShape*)shape;
- if (trimesh->getTriangleInfoMap())
- {
- body->setCollisionFlags(body->getCollisionFlags() | btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK);
- }
- }
-#endif //USE_INTERNAL_EDGE_UTILITY
- m_bodyMap.insert(colObjData, body);
- }
- else
- {
- printf("error: no shape found\n");
- }
- }
-
- return true;
-}
-
-void btCollisionWorldImporter::deleteAllData()
-{
- int i;
-
- for (i = 0; i < m_allocatedCollisionObjects.size(); i++)
- {
- if (m_collisionWorld)
- m_collisionWorld->removeCollisionObject(m_allocatedCollisionObjects[i]);
- delete m_allocatedCollisionObjects[i];
- }
-
- m_allocatedCollisionObjects.clear();
-
- for (i = 0; i < m_allocatedCollisionShapes.size(); i++)
- {
- delete m_allocatedCollisionShapes[i];
- }
- m_allocatedCollisionShapes.clear();
-
- for (i = 0; i < m_allocatedBvhs.size(); i++)
- {
- delete m_allocatedBvhs[i];
- }
- m_allocatedBvhs.clear();
-
- for (i = 0; i < m_allocatedTriangleInfoMaps.size(); i++)
- {
- delete m_allocatedTriangleInfoMaps[i];
- }
- m_allocatedTriangleInfoMaps.clear();
- for (i = 0; i < m_allocatedTriangleIndexArrays.size(); i++)
- {
- delete m_allocatedTriangleIndexArrays[i];
- }
- m_allocatedTriangleIndexArrays.clear();
- for (i = 0; i < m_allocatedNames.size(); i++)
- {
- delete[] m_allocatedNames[i];
- }
- m_allocatedNames.clear();
-
- for (i = 0; i < m_allocatedbtStridingMeshInterfaceDatas.size(); i++)
- {
- btStridingMeshInterfaceData* curData = m_allocatedbtStridingMeshInterfaceDatas[i];
-
- for (int a = 0; a < curData->m_numMeshParts; a++)
- {
- btMeshPartData* curPart = &curData->m_meshPartsPtr[a];
- if (curPart->m_vertices3f)
- delete[] curPart->m_vertices3f;
-
- if (curPart->m_vertices3d)
- delete[] curPart->m_vertices3d;
-
- if (curPart->m_indices32)
- delete[] curPart->m_indices32;
-
- if (curPart->m_3indices16)
- delete[] curPart->m_3indices16;
-
- if (curPart->m_indices16)
- delete[] curPart->m_indices16;
-
- if (curPart->m_3indices8)
- delete[] curPart->m_3indices8;
- }
- delete[] curData->m_meshPartsPtr;
- delete curData;
- }
- m_allocatedbtStridingMeshInterfaceDatas.clear();
-
- for (i = 0; i < m_indexArrays.size(); i++)
- {
- btAlignedFree(m_indexArrays[i]);
- }
- m_indexArrays.clear();
-
- for (i = 0; i < m_shortIndexArrays.size(); i++)
- {
- btAlignedFree(m_shortIndexArrays[i]);
- }
- m_shortIndexArrays.clear();
-
- for (i = 0; i < m_charIndexArrays.size(); i++)
- {
- btAlignedFree(m_charIndexArrays[i]);
- }
- m_charIndexArrays.clear();
-
- for (i = 0; i < m_floatVertexArrays.size(); i++)
- {
- btAlignedFree(m_floatVertexArrays[i]);
- }
- m_floatVertexArrays.clear();
-
- for (i = 0; i < m_doubleVertexArrays.size(); i++)
- {
- btAlignedFree(m_doubleVertexArrays[i]);
- }
- m_doubleVertexArrays.clear();
-}
-
-btCollisionShape* btCollisionWorldImporter::convertCollisionShape(btCollisionShapeData* shapeData)
-{
- btCollisionShape* shape = 0;
-
- switch (shapeData->m_shapeType)
- {
- case STATIC_PLANE_PROXYTYPE:
- {
- btStaticPlaneShapeData* planeData = (btStaticPlaneShapeData*)shapeData;
- btVector3 planeNormal, localScaling;
- planeNormal.deSerializeFloat(planeData->m_planeNormal);
- localScaling.deSerializeFloat(planeData->m_localScaling);
- shape = createPlaneShape(planeNormal, planeData->m_planeConstant);
- shape->setLocalScaling(localScaling);
-
- break;
- }
- case SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE:
- {
- btScaledTriangleMeshShapeData* scaledMesh = (btScaledTriangleMeshShapeData*)shapeData;
- btCollisionShapeData* colShapeData = (btCollisionShapeData*)&scaledMesh->m_trimeshShapeData;
- colShapeData->m_shapeType = TRIANGLE_MESH_SHAPE_PROXYTYPE;
- btCollisionShape* childShape = convertCollisionShape(colShapeData);
- btBvhTriangleMeshShape* meshShape = (btBvhTriangleMeshShape*)childShape;
- btVector3 localScaling;
- localScaling.deSerializeFloat(scaledMesh->m_localScaling);
-
- shape = createScaledTrangleMeshShape(meshShape, localScaling);
- break;
- }
-#ifdef SUPPORT_GIMPACT_SHAPE_IMPORT
- case GIMPACT_SHAPE_PROXYTYPE:
- {
- btGImpactMeshShapeData* gimpactData = (btGImpactMeshShapeData*)shapeData;
- if (gimpactData->m_gimpactSubType == CONST_GIMPACT_TRIMESH_SHAPE)
- {
- btStridingMeshInterfaceData* interfaceData = createStridingMeshInterfaceData(&gimpactData->m_meshInterface);
- btTriangleIndexVertexArray* meshInterface = createMeshInterface(*interfaceData);
-
- btGImpactMeshShape* gimpactShape = createGimpactShape(meshInterface);
- btVector3 localScaling;
- localScaling.deSerializeFloat(gimpactData->m_localScaling);
- gimpactShape->setLocalScaling(localScaling);
- gimpactShape->setMargin(btScalar(gimpactData->m_collisionMargin));
- gimpactShape->updateBound();
- shape = gimpactShape;
- }
- else
- {
- printf("unsupported gimpact sub type\n");
- }
- break;
- }
-#endif //SUPPORT_GIMPACT_SHAPE_IMPORT
- //The btCapsuleShape* API has issue passing the margin/scaling/halfextents unmodified through the API
- //so deal with this
- case CAPSULE_SHAPE_PROXYTYPE:
- {
- btCapsuleShapeData* capData = (btCapsuleShapeData*)shapeData;
-
- switch (capData->m_upAxis)
- {
- case 0:
- {
- shape = createCapsuleShapeX(1, 1);
- break;
- }
- case 1:
- {
- shape = createCapsuleShapeY(1, 1);
- break;
- }
- case 2:
- {
- shape = createCapsuleShapeZ(1, 1);
- break;
- }
- default:
- {
- printf("error: wrong up axis for btCapsuleShape\n");
- }
- };
- if (shape)
- {
- btCapsuleShape* cap = (btCapsuleShape*)shape;
- cap->deSerializeFloat(capData);
- }
- break;
- }
- case CYLINDER_SHAPE_PROXYTYPE:
- case CONE_SHAPE_PROXYTYPE:
- case BOX_SHAPE_PROXYTYPE:
- case SPHERE_SHAPE_PROXYTYPE:
- case MULTI_SPHERE_SHAPE_PROXYTYPE:
- case CONVEX_HULL_SHAPE_PROXYTYPE:
- {
- btConvexInternalShapeData* bsd = (btConvexInternalShapeData*)shapeData;
- btVector3 implicitShapeDimensions;
- implicitShapeDimensions.deSerializeFloat(bsd->m_implicitShapeDimensions);
- btVector3 localScaling;
- localScaling.deSerializeFloat(bsd->m_localScaling);
- btVector3 margin(bsd->m_collisionMargin, bsd->m_collisionMargin, bsd->m_collisionMargin);
- switch (shapeData->m_shapeType)
- {
- case BOX_SHAPE_PROXYTYPE:
- {
- btBoxShape* box = (btBoxShape*)createBoxShape(implicitShapeDimensions / localScaling + margin);
- //box->initializePolyhedralFeatures();
- shape = box;
-
- break;
- }
- case SPHERE_SHAPE_PROXYTYPE:
- {
- shape = createSphereShape(implicitShapeDimensions.getX());
- break;
- }
-
- case CYLINDER_SHAPE_PROXYTYPE:
- {
- btCylinderShapeData* cylData = (btCylinderShapeData*)shapeData;
- btVector3 halfExtents = implicitShapeDimensions + margin;
- switch (cylData->m_upAxis)
- {
- case 0:
- {
- shape = createCylinderShapeX(halfExtents.getY(), halfExtents.getX());
- break;
- }
- case 1:
- {
- shape = createCylinderShapeY(halfExtents.getX(), halfExtents.getY());
- break;
- }
- case 2:
- {
- shape = createCylinderShapeZ(halfExtents.getX(), halfExtents.getZ());
- break;
- }
- default:
- {
- printf("unknown Cylinder up axis\n");
- }
- };
-
- break;
- }
- case CONE_SHAPE_PROXYTYPE:
- {
- btConeShapeData* conData = (btConeShapeData*)shapeData;
- btVector3 halfExtents = implicitShapeDimensions; //+margin;
- switch (conData->m_upIndex)
- {
- case 0:
- {
- shape = createConeShapeX(halfExtents.getY(), halfExtents.getX());
- break;
- }
- case 1:
- {
- shape = createConeShapeY(halfExtents.getX(), halfExtents.getY());
- break;
- }
- case 2:
- {
- shape = createConeShapeZ(halfExtents.getX(), halfExtents.getZ());
- break;
- }
- default:
- {
- printf("unknown Cone up axis\n");
- }
- };
-
- break;
- }
- case MULTI_SPHERE_SHAPE_PROXYTYPE:
- {
- btMultiSphereShapeData* mss = (btMultiSphereShapeData*)bsd;
- int numSpheres = mss->m_localPositionArraySize;
-
- btAlignedObjectArray<btVector3> tmpPos;
- btAlignedObjectArray<btScalar> radii;
- radii.resize(numSpheres);
- tmpPos.resize(numSpheres);
- int i;
- for (i = 0; i < numSpheres; i++)
- {
- tmpPos[i].deSerializeFloat(mss->m_localPositionArrayPtr[i].m_pos);
- radii[i] = mss->m_localPositionArrayPtr[i].m_radius;
- }
- shape = createMultiSphereShape(&tmpPos[0], &radii[0], numSpheres);
- break;
- }
- case CONVEX_HULL_SHAPE_PROXYTYPE:
- {
- // int sz = sizeof(btConvexHullShapeData);
- // int sz2 = sizeof(btConvexInternalShapeData);
- // int sz3 = sizeof(btCollisionShapeData);
- btConvexHullShapeData* convexData = (btConvexHullShapeData*)bsd;
- int numPoints = convexData->m_numUnscaledPoints;
-
- btAlignedObjectArray<btVector3> tmpPoints;
- tmpPoints.resize(numPoints);
- int i;
- for (i = 0; i < numPoints; i++)
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- if (convexData->m_unscaledPointsDoublePtr)
- tmpPoints[i].deSerialize(convexData->m_unscaledPointsDoublePtr[i]);
- if (convexData->m_unscaledPointsFloatPtr)
- tmpPoints[i].deSerializeFloat(convexData->m_unscaledPointsFloatPtr[i]);
-#else
- if (convexData->m_unscaledPointsFloatPtr)
- tmpPoints[i].deSerialize(convexData->m_unscaledPointsFloatPtr[i]);
- if (convexData->m_unscaledPointsDoublePtr)
- tmpPoints[i].deSerializeDouble(convexData->m_unscaledPointsDoublePtr[i]);
-#endif //BT_USE_DOUBLE_PRECISION
- }
- btConvexHullShape* hullShape = createConvexHullShape();
- for (i = 0; i < numPoints; i++)
- {
- hullShape->addPoint(tmpPoints[i]);
- }
- hullShape->setMargin(bsd->m_collisionMargin);
- //hullShape->initializePolyhedralFeatures();
- shape = hullShape;
- break;
- }
- default:
- {
- printf("error: cannot create shape type (%d)\n", shapeData->m_shapeType);
- }
- }
-
- if (shape)
- {
- shape->setMargin(bsd->m_collisionMargin);
-
- btVector3 localScaling;
- localScaling.deSerializeFloat(bsd->m_localScaling);
- shape->setLocalScaling(localScaling);
- }
- break;
- }
- case TRIANGLE_MESH_SHAPE_PROXYTYPE:
- {
- btTriangleMeshShapeData* trimesh = (btTriangleMeshShapeData*)shapeData;
- btStridingMeshInterfaceData* interfaceData = createStridingMeshInterfaceData(&trimesh->m_meshInterface);
- btTriangleIndexVertexArray* meshInterface = createMeshInterface(*interfaceData);
- if (!meshInterface->getNumSubParts())
- {
- return 0;
- }
-
- btVector3 scaling;
- scaling.deSerializeFloat(trimesh->m_meshInterface.m_scaling);
- meshInterface->setScaling(scaling);
-
- btOptimizedBvh* bvh = 0;
-#if 1
- if (trimesh->m_quantizedFloatBvh)
- {
- btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedFloatBvh);
- if (bvhPtr && *bvhPtr)
- {
- bvh = *bvhPtr;
- }
- else
- {
- bvh = createOptimizedBvh();
- bvh->deSerializeFloat(*trimesh->m_quantizedFloatBvh);
- }
- }
- if (trimesh->m_quantizedDoubleBvh)
- {
- btOptimizedBvh** bvhPtr = m_bvhMap.find(trimesh->m_quantizedDoubleBvh);
- if (bvhPtr && *bvhPtr)
- {
- bvh = *bvhPtr;
- }
- else
- {
- bvh = createOptimizedBvh();
- bvh->deSerializeDouble(*trimesh->m_quantizedDoubleBvh);
- }
- }
-#endif
-
- btBvhTriangleMeshShape* trimeshShape = createBvhTriangleMeshShape(meshInterface, bvh);
- trimeshShape->setMargin(trimesh->m_collisionMargin);
- shape = trimeshShape;
-
- if (trimesh->m_triangleInfoMap)
- {
- btTriangleInfoMap* map = createTriangleInfoMap();
- map->deSerialize(*trimesh->m_triangleInfoMap);
- trimeshShape->setTriangleInfoMap(map);
-
-#ifdef USE_INTERNAL_EDGE_UTILITY
- gContactAddedCallback = btAdjustInternalEdgeContactsCallback;
-#endif //USE_INTERNAL_EDGE_UTILITY
- }
-
- //printf("trimesh->m_collisionMargin=%f\n",trimesh->m_collisionMargin);
- break;
- }
- case COMPOUND_SHAPE_PROXYTYPE:
- {
- btCompoundShapeData* compoundData = (btCompoundShapeData*)shapeData;
- btCompoundShape* compoundShape = createCompoundShape();
-
- //btCompoundShapeChildData* childShapeDataArray = &compoundData->m_childShapePtr[0];
-
- btAlignedObjectArray<btCollisionShape*> childShapes;
- for (int i = 0; i < compoundData->m_numChildShapes; i++)
- {
- //btCompoundShapeChildData* ptr = &compoundData->m_childShapePtr[i];
-
- btCollisionShapeData* cd = compoundData->m_childShapePtr[i].m_childShape;
-
- btCollisionShape* childShape = convertCollisionShape(cd);
- if (childShape)
- {
- btTransform localTransform;
- localTransform.deSerializeFloat(compoundData->m_childShapePtr[i].m_transform);
- compoundShape->addChildShape(localTransform, childShape);
- }
- else
- {
-#ifdef _DEBUG
- printf("error: couldn't create childShape for compoundShape\n");
-#endif
- }
- }
- shape = compoundShape;
-
- break;
- }
- case SOFTBODY_SHAPE_PROXYTYPE:
- {
- return 0;
- }
- default:
- {
-#ifdef _DEBUG
- printf("unsupported shape type (%d)\n", shapeData->m_shapeType);
-#endif
- }
- }
-
- return shape;
-}
-
-char* btCollisionWorldImporter::duplicateName(const char* name)
-{
- if (name)
- {
- int l = (int)strlen(name);
- char* newName = new char[l + 1];
- memcpy(newName, name, l);
- newName[l] = 0;
- m_allocatedNames.push_back(newName);
- return newName;
- }
- return 0;
-}
-
-btTriangleIndexVertexArray* btCollisionWorldImporter::createMeshInterface(btStridingMeshInterfaceData& meshData)
-{
- btTriangleIndexVertexArray* meshInterface = createTriangleMeshContainer();
-
- for (int i = 0; i < meshData.m_numMeshParts; i++)
- {
- btIndexedMesh meshPart;
- meshPart.m_numTriangles = meshData.m_meshPartsPtr[i].m_numTriangles;
- meshPart.m_numVertices = meshData.m_meshPartsPtr[i].m_numVertices;
-
- if (meshData.m_meshPartsPtr[i].m_indices32)
- {
- meshPart.m_indexType = PHY_INTEGER;
- meshPart.m_triangleIndexStride = 3 * sizeof(int);
- int* indexArray = (int*)btAlignedAlloc(sizeof(int) * 3 * meshPart.m_numTriangles, 16);
- m_indexArrays.push_back(indexArray);
- for (int j = 0; j < 3 * meshPart.m_numTriangles; j++)
- {
- indexArray[j] = meshData.m_meshPartsPtr[i].m_indices32[j].m_value;
- }
- meshPart.m_triangleIndexBase = (const unsigned char*)indexArray;
- }
- else
- {
- if (meshData.m_meshPartsPtr[i].m_3indices16)
- {
- meshPart.m_indexType = PHY_SHORT;
- meshPart.m_triangleIndexStride = sizeof(short int) * 3; //sizeof(btShortIntIndexTripletData);
-
- short int* indexArray = (short int*)btAlignedAlloc(sizeof(short int) * 3 * meshPart.m_numTriangles, 16);
- m_shortIndexArrays.push_back(indexArray);
-
- for (int j = 0; j < meshPart.m_numTriangles; j++)
- {
- indexArray[3 * j] = meshData.m_meshPartsPtr[i].m_3indices16[j].m_values[0];
- indexArray[3 * j + 1] = meshData.m_meshPartsPtr[i].m_3indices16[j].m_values[1];
- indexArray[3 * j + 2] = meshData.m_meshPartsPtr[i].m_3indices16[j].m_values[2];
- }
-
- meshPart.m_triangleIndexBase = (const unsigned char*)indexArray;
- }
- if (meshData.m_meshPartsPtr[i].m_indices16)
- {
- meshPart.m_indexType = PHY_SHORT;
- meshPart.m_triangleIndexStride = 3 * sizeof(short int);
- short int* indexArray = (short int*)btAlignedAlloc(sizeof(short int) * 3 * meshPart.m_numTriangles, 16);
- m_shortIndexArrays.push_back(indexArray);
- for (int j = 0; j < 3 * meshPart.m_numTriangles; j++)
- {
- indexArray[j] = meshData.m_meshPartsPtr[i].m_indices16[j].m_value;
- }
-
- meshPart.m_triangleIndexBase = (const unsigned char*)indexArray;
- }
-
- if (meshData.m_meshPartsPtr[i].m_3indices8)
- {
- meshPart.m_indexType = PHY_UCHAR;
- meshPart.m_triangleIndexStride = sizeof(unsigned char) * 3;
-
- unsigned char* indexArray = (unsigned char*)btAlignedAlloc(sizeof(unsigned char) * 3 * meshPart.m_numTriangles, 16);
- m_charIndexArrays.push_back(indexArray);
-
- for (int j = 0; j < meshPart.m_numTriangles; j++)
- {
- indexArray[3 * j] = meshData.m_meshPartsPtr[i].m_3indices8[j].m_values[0];
- indexArray[3 * j + 1] = meshData.m_meshPartsPtr[i].m_3indices8[j].m_values[1];
- indexArray[3 * j + 2] = meshData.m_meshPartsPtr[i].m_3indices8[j].m_values[2];
- }
-
- meshPart.m_triangleIndexBase = (const unsigned char*)indexArray;
- }
- }
-
- if (meshData.m_meshPartsPtr[i].m_vertices3f)
- {
- meshPart.m_vertexType = PHY_FLOAT;
- meshPart.m_vertexStride = sizeof(btVector3FloatData);
- btVector3FloatData* vertices = (btVector3FloatData*)btAlignedAlloc(sizeof(btVector3FloatData) * meshPart.m_numVertices, 16);
- m_floatVertexArrays.push_back(vertices);
-
- for (int j = 0; j < meshPart.m_numVertices; j++)
- {
- vertices[j].m_floats[0] = meshData.m_meshPartsPtr[i].m_vertices3f[j].m_floats[0];
- vertices[j].m_floats[1] = meshData.m_meshPartsPtr[i].m_vertices3f[j].m_floats[1];
- vertices[j].m_floats[2] = meshData.m_meshPartsPtr[i].m_vertices3f[j].m_floats[2];
- vertices[j].m_floats[3] = meshData.m_meshPartsPtr[i].m_vertices3f[j].m_floats[3];
- }
- meshPart.m_vertexBase = (const unsigned char*)vertices;
- }
- else
- {
- meshPart.m_vertexType = PHY_DOUBLE;
- meshPart.m_vertexStride = sizeof(btVector3DoubleData);
-
- btVector3DoubleData* vertices = (btVector3DoubleData*)btAlignedAlloc(sizeof(btVector3DoubleData) * meshPart.m_numVertices, 16);
- m_doubleVertexArrays.push_back(vertices);
-
- for (int j = 0; j < meshPart.m_numVertices; j++)
- {
- vertices[j].m_floats[0] = meshData.m_meshPartsPtr[i].m_vertices3d[j].m_floats[0];
- vertices[j].m_floats[1] = meshData.m_meshPartsPtr[i].m_vertices3d[j].m_floats[1];
- vertices[j].m_floats[2] = meshData.m_meshPartsPtr[i].m_vertices3d[j].m_floats[2];
- vertices[j].m_floats[3] = meshData.m_meshPartsPtr[i].m_vertices3d[j].m_floats[3];
- }
- meshPart.m_vertexBase = (const unsigned char*)vertices;
- }
-
- if (meshPart.m_triangleIndexBase && meshPart.m_vertexBase)
- {
- meshInterface->addIndexedMesh(meshPart, meshPart.m_indexType);
- }
- }
-
- return meshInterface;
-}
-
-btStridingMeshInterfaceData* btCollisionWorldImporter::createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData)
-{
- //create a new btStridingMeshInterfaceData that is an exact copy of shapedata and store it in the WorldImporter
- btStridingMeshInterfaceData* newData = new btStridingMeshInterfaceData;
-
- newData->m_scaling = interfaceData->m_scaling;
- newData->m_numMeshParts = interfaceData->m_numMeshParts;
- newData->m_meshPartsPtr = new btMeshPartData[newData->m_numMeshParts];
-
- for (int i = 0; i < newData->m_numMeshParts; i++)
- {
- btMeshPartData* curPart = &interfaceData->m_meshPartsPtr[i];
- btMeshPartData* curNewPart = &newData->m_meshPartsPtr[i];
-
- curNewPart->m_numTriangles = curPart->m_numTriangles;
- curNewPart->m_numVertices = curPart->m_numVertices;
-
- if (curPart->m_vertices3f)
- {
- curNewPart->m_vertices3f = new btVector3FloatData[curNewPart->m_numVertices];
- memcpy(curNewPart->m_vertices3f, curPart->m_vertices3f, sizeof(btVector3FloatData) * curNewPart->m_numVertices);
- }
- else
- curNewPart->m_vertices3f = NULL;
-
- if (curPart->m_vertices3d)
- {
- curNewPart->m_vertices3d = new btVector3DoubleData[curNewPart->m_numVertices];
- memcpy(curNewPart->m_vertices3d, curPart->m_vertices3d, sizeof(btVector3DoubleData) * curNewPart->m_numVertices);
- }
- else
- curNewPart->m_vertices3d = NULL;
-
- int numIndices = curNewPart->m_numTriangles * 3;
- ///the m_3indices8 was not initialized in some Bullet versions, this can cause crashes at loading time
- ///we catch it by only dealing with m_3indices8 if none of the other indices are initialized
- bool uninitialized3indices8Workaround = false;
-
- if (curPart->m_indices32)
- {
- uninitialized3indices8Workaround = true;
- curNewPart->m_indices32 = new btIntIndexData[numIndices];
- memcpy(curNewPart->m_indices32, curPart->m_indices32, sizeof(btIntIndexData) * numIndices);
- }
- else
- curNewPart->m_indices32 = NULL;
-
- if (curPart->m_3indices16)
- {
- uninitialized3indices8Workaround = true;
- curNewPart->m_3indices16 = new btShortIntIndexTripletData[curNewPart->m_numTriangles];
- memcpy(curNewPart->m_3indices16, curPart->m_3indices16, sizeof(btShortIntIndexTripletData) * curNewPart->m_numTriangles);
- }
- else
- curNewPart->m_3indices16 = NULL;
-
- if (curPart->m_indices16)
- {
- uninitialized3indices8Workaround = true;
- curNewPart->m_indices16 = new btShortIntIndexData[numIndices];
- memcpy(curNewPart->m_indices16, curPart->m_indices16, sizeof(btShortIntIndexData) * numIndices);
- }
- else
- curNewPart->m_indices16 = NULL;
-
- if (!uninitialized3indices8Workaround && curPart->m_3indices8)
- {
- curNewPart->m_3indices8 = new btCharIndexTripletData[curNewPart->m_numTriangles];
- memcpy(curNewPart->m_3indices8, curPart->m_3indices8, sizeof(btCharIndexTripletData) * curNewPart->m_numTriangles);
- }
- else
- curNewPart->m_3indices8 = NULL;
- }
-
- m_allocatedbtStridingMeshInterfaceDatas.push_back(newData);
-
- return (newData);
-}
-
-#ifdef USE_INTERNAL_EDGE_UTILITY
-extern ContactAddedCallback gContactAddedCallback;
-
-static bool btAdjustInternalEdgeContactsCallback(btManifoldPoint& cp, const btCollisionObject* colObj0, int partId0, int index0, const btCollisionObject* colObj1, int partId1, int index1)
-{
- btAdjustInternalEdgeContacts(cp, colObj1, colObj0, partId1, index1);
- //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_BACKFACE_MODE);
- //btAdjustInternalEdgeContacts(cp,colObj1,colObj0, partId1,index1, BT_TRIANGLE_CONVEX_DOUBLE_SIDED+BT_TRIANGLE_CONCAVE_DOUBLE_SIDED);
- return true;
-}
-#endif //USE_INTERNAL_EDGE_UTILITY
-
-/*
-btRigidBody* btWorldImporter::createRigidBody(bool isDynamic, btScalar mass, const btTransform& startTransform,btCollisionShape* shape,const char* bodyName)
-{
- btVector3 localInertia;
- localInertia.setZero();
-
- if (mass)
- shape->calculateLocalInertia(mass,localInertia);
-
- btRigidBody* body = new btRigidBody(mass,0,shape,localInertia);
- body->setWorldTransform(startTransform);
-
- if (m_dynamicsWorld)
- m_dynamicsWorld->addRigidBody(body);
-
- if (bodyName)
- {
- char* newname = duplicateName(bodyName);
- m_objectNameMap.insert(body,newname);
- m_nameBodyMap.insert(newname,body);
- }
- m_allocatedRigidBodies.push_back(body);
- return body;
-
-}
-*/
-
-btCollisionObject* btCollisionWorldImporter::getCollisionObjectByName(const char* name)
-{
- btCollisionObject** bodyPtr = m_nameColObjMap.find(name);
- if (bodyPtr && *bodyPtr)
- {
- return *bodyPtr;
- }
- return 0;
-}
-
-btCollisionObject* btCollisionWorldImporter::createCollisionObject(const btTransform& startTransform, btCollisionShape* shape, const char* bodyName)
-{
- btCollisionObject* colObj = new btCollisionObject();
- colObj->setWorldTransform(startTransform);
- colObj->setCollisionShape(shape);
- m_collisionWorld->addCollisionObject(colObj); //todo: flags etc
-
- if (bodyName)
- {
- char* newname = duplicateName(bodyName);
- m_objectNameMap.insert(colObj, newname);
- m_nameColObjMap.insert(newname, colObj);
- }
- m_allocatedCollisionObjects.push_back(colObj);
-
- return colObj;
-}
-
-btCollisionShape* btCollisionWorldImporter::createPlaneShape(const btVector3& planeNormal, btScalar planeConstant)
-{
- btStaticPlaneShape* shape = new btStaticPlaneShape(planeNormal, planeConstant);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-btCollisionShape* btCollisionWorldImporter::createBoxShape(const btVector3& halfExtents)
-{
- btBoxShape* shape = new btBoxShape(halfExtents);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-btCollisionShape* btCollisionWorldImporter::createSphereShape(btScalar radius)
-{
- btSphereShape* shape = new btSphereShape(radius);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createCapsuleShapeX(btScalar radius, btScalar height)
-{
- btCapsuleShapeX* shape = new btCapsuleShapeX(radius, height);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createCapsuleShapeY(btScalar radius, btScalar height)
-{
- btCapsuleShape* shape = new btCapsuleShape(radius, height);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createCapsuleShapeZ(btScalar radius, btScalar height)
-{
- btCapsuleShapeZ* shape = new btCapsuleShapeZ(radius, height);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createCylinderShapeX(btScalar radius, btScalar height)
-{
- btCylinderShapeX* shape = new btCylinderShapeX(btVector3(height, radius, radius));
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createCylinderShapeY(btScalar radius, btScalar height)
-{
- btCylinderShape* shape = new btCylinderShape(btVector3(radius, height, radius));
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createCylinderShapeZ(btScalar radius, btScalar height)
-{
- btCylinderShapeZ* shape = new btCylinderShapeZ(btVector3(radius, radius, height));
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createConeShapeX(btScalar radius, btScalar height)
-{
- btConeShapeX* shape = new btConeShapeX(radius, height);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createConeShapeY(btScalar radius, btScalar height)
-{
- btConeShape* shape = new btConeShape(radius, height);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCollisionShape* btCollisionWorldImporter::createConeShapeZ(btScalar radius, btScalar height)
-{
- btConeShapeZ* shape = new btConeShapeZ(radius, height);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btTriangleIndexVertexArray* btCollisionWorldImporter::createTriangleMeshContainer()
-{
- btTriangleIndexVertexArray* in = new btTriangleIndexVertexArray();
- m_allocatedTriangleIndexArrays.push_back(in);
- return in;
-}
-
-btOptimizedBvh* btCollisionWorldImporter::createOptimizedBvh()
-{
- btOptimizedBvh* bvh = new btOptimizedBvh();
- m_allocatedBvhs.push_back(bvh);
- return bvh;
-}
-
-btTriangleInfoMap* btCollisionWorldImporter::createTriangleInfoMap()
-{
- btTriangleInfoMap* tim = new btTriangleInfoMap();
- m_allocatedTriangleInfoMaps.push_back(tim);
- return tim;
-}
-
-btBvhTriangleMeshShape* btCollisionWorldImporter::createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh)
-{
- if (bvh)
- {
- btBvhTriangleMeshShape* bvhTriMesh = new btBvhTriangleMeshShape(trimesh, bvh->isQuantized(), false);
- bvhTriMesh->setOptimizedBvh(bvh);
- m_allocatedCollisionShapes.push_back(bvhTriMesh);
- return bvhTriMesh;
- }
-
- btBvhTriangleMeshShape* ts = new btBvhTriangleMeshShape(trimesh, true);
- m_allocatedCollisionShapes.push_back(ts);
- return ts;
-}
-btCollisionShape* btCollisionWorldImporter::createConvexTriangleMeshShape(btStridingMeshInterface* trimesh)
-{
- return 0;
-}
-#ifdef SUPPORT_GIMPACT_SHAPE_IMPORT
-btGImpactMeshShape* btCollisionWorldImporter::createGimpactShape(btStridingMeshInterface* trimesh)
-{
- btGImpactMeshShape* shape = new btGImpactMeshShape(trimesh);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-#endif //SUPPORT_GIMPACT_SHAPE_IMPORT
-
-btConvexHullShape* btCollisionWorldImporter::createConvexHullShape()
-{
- btConvexHullShape* shape = new btConvexHullShape();
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btCompoundShape* btCollisionWorldImporter::createCompoundShape()
-{
- btCompoundShape* shape = new btCompoundShape();
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btScaledBvhTriangleMeshShape* btCollisionWorldImporter::createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape, const btVector3& localScaling)
-{
- btScaledBvhTriangleMeshShape* shape = new btScaledBvhTriangleMeshShape(meshShape, localScaling);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-btMultiSphereShape* btCollisionWorldImporter::createMultiSphereShape(const btVector3* positions, const btScalar* radi, int numSpheres)
-{
- btMultiSphereShape* shape = new btMultiSphereShape(positions, radi, numSpheres);
- m_allocatedCollisionShapes.push_back(shape);
- return shape;
-}
-
-// query for data
-int btCollisionWorldImporter::getNumCollisionShapes() const
-{
- return m_allocatedCollisionShapes.size();
-}
-
-btCollisionShape* btCollisionWorldImporter::getCollisionShapeByIndex(int index)
-{
- return m_allocatedCollisionShapes[index];
-}
-
-btCollisionShape* btCollisionWorldImporter::getCollisionShapeByName(const char* name)
-{
- btCollisionShape** shapePtr = m_nameShapeMap.find(name);
- if (shapePtr && *shapePtr)
- {
- return *shapePtr;
- }
- return 0;
-}
-
-const char* btCollisionWorldImporter::getNameForPointer(const void* ptr) const
-{
- const char* const* namePtr = m_objectNameMap.find(ptr);
- if (namePtr && *namePtr)
- return *namePtr;
- return 0;
-}
-
-int btCollisionWorldImporter::getNumRigidBodies() const
-{
- return m_allocatedRigidBodies.size();
-}
-
-btCollisionObject* btCollisionWorldImporter::getRigidBodyByIndex(int index) const
-{
- return m_allocatedRigidBodies[index];
-}
-
-int btCollisionWorldImporter::getNumBvhs() const
-{
- return m_allocatedBvhs.size();
-}
-btOptimizedBvh* btCollisionWorldImporter::getBvhByIndex(int index) const
-{
- return m_allocatedBvhs[index];
-}
-
-int btCollisionWorldImporter::getNumTriangleInfoMaps() const
-{
- return m_allocatedTriangleInfoMaps.size();
-}
-
-btTriangleInfoMap* btCollisionWorldImporter::getTriangleInfoMapByIndex(int index) const
-{
- return m_allocatedTriangleInfoMaps[index];
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.h
deleted file mode 100644
index 5e8bc95341..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCollisionWorldImporter.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_WORLD_IMPORTER_H
-#define BT_COLLISION_WORLD_IMPORTER_H
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btHashMap.h"
-
-class btCollisionShape;
-class btCollisionObject;
-struct btBulletSerializedArrays;
-
-struct ConstraintInput;
-class btCollisionWorld;
-struct btCollisionShapeData;
-class btTriangleIndexVertexArray;
-class btStridingMeshInterface;
-struct btStridingMeshInterfaceData;
-class btGImpactMeshShape;
-class btOptimizedBvh;
-struct btTriangleInfoMap;
-class btBvhTriangleMeshShape;
-class btPoint2PointConstraint;
-class btHingeConstraint;
-class btConeTwistConstraint;
-class btGeneric6DofConstraint;
-class btGeneric6DofSpringConstraint;
-class btSliderConstraint;
-class btGearConstraint;
-struct btContactSolverInfo;
-
-class btCollisionWorldImporter
-{
-protected:
- btCollisionWorld* m_collisionWorld;
-
- int m_verboseMode;
-
- btAlignedObjectArray<btCollisionShape*> m_allocatedCollisionShapes;
- btAlignedObjectArray<btCollisionObject*> m_allocatedRigidBodies;
-
- btAlignedObjectArray<btOptimizedBvh*> m_allocatedBvhs;
- btAlignedObjectArray<btTriangleInfoMap*> m_allocatedTriangleInfoMaps;
- btAlignedObjectArray<btTriangleIndexVertexArray*> m_allocatedTriangleIndexArrays;
- btAlignedObjectArray<btStridingMeshInterfaceData*> m_allocatedbtStridingMeshInterfaceDatas;
- btAlignedObjectArray<btCollisionObject*> m_allocatedCollisionObjects;
-
- btAlignedObjectArray<char*> m_allocatedNames;
-
- btAlignedObjectArray<int*> m_indexArrays;
- btAlignedObjectArray<short int*> m_shortIndexArrays;
- btAlignedObjectArray<unsigned char*> m_charIndexArrays;
-
- btAlignedObjectArray<btVector3FloatData*> m_floatVertexArrays;
- btAlignedObjectArray<btVector3DoubleData*> m_doubleVertexArrays;
-
- btHashMap<btHashPtr, btOptimizedBvh*> m_bvhMap;
- btHashMap<btHashPtr, btTriangleInfoMap*> m_timMap;
-
- btHashMap<btHashString, btCollisionShape*> m_nameShapeMap;
- btHashMap<btHashString, btCollisionObject*> m_nameColObjMap;
-
- btHashMap<btHashPtr, const char*> m_objectNameMap;
-
- btHashMap<btHashPtr, btCollisionShape*> m_shapeMap;
- btHashMap<btHashPtr, btCollisionObject*> m_bodyMap;
-
- //methods
-
- char* duplicateName(const char* name);
-
- btCollisionShape* convertCollisionShape(btCollisionShapeData* shapeData);
-
-public:
- btCollisionWorldImporter(btCollisionWorld* world);
-
- virtual ~btCollisionWorldImporter();
-
- bool convertAllObjects(btBulletSerializedArrays* arrays);
-
- ///delete all memory collision shapes, rigid bodies, constraints etc. allocated during the load.
- ///make sure you don't use the dynamics world containing objects after you call this method
- virtual void deleteAllData();
-
- void setVerboseMode(int verboseMode)
- {
- m_verboseMode = verboseMode;
- }
-
- int getVerboseMode() const
- {
- return m_verboseMode;
- }
-
- // query for data
- int getNumCollisionShapes() const;
- btCollisionShape* getCollisionShapeByIndex(int index);
- int getNumRigidBodies() const;
- btCollisionObject* getRigidBodyByIndex(int index) const;
-
- int getNumBvhs() const;
- btOptimizedBvh* getBvhByIndex(int index) const;
- int getNumTriangleInfoMaps() const;
- btTriangleInfoMap* getTriangleInfoMapByIndex(int index) const;
-
- // queris involving named objects
- btCollisionShape* getCollisionShapeByName(const char* name);
- btCollisionObject* getCollisionObjectByName(const char* name);
-
- const char* getNameForPointer(const void* ptr) const;
-
- ///those virtuals are called by load and can be overridden by the user
-
- //bodies
-
- virtual btCollisionObject* createCollisionObject(const btTransform& startTransform, btCollisionShape* shape, const char* bodyName);
-
- ///shapes
-
- virtual btCollisionShape* createPlaneShape(const btVector3& planeNormal, btScalar planeConstant);
- virtual btCollisionShape* createBoxShape(const btVector3& halfExtents);
- virtual btCollisionShape* createSphereShape(btScalar radius);
- virtual btCollisionShape* createCapsuleShapeX(btScalar radius, btScalar height);
- virtual btCollisionShape* createCapsuleShapeY(btScalar radius, btScalar height);
- virtual btCollisionShape* createCapsuleShapeZ(btScalar radius, btScalar height);
-
- virtual btCollisionShape* createCylinderShapeX(btScalar radius, btScalar height);
- virtual btCollisionShape* createCylinderShapeY(btScalar radius, btScalar height);
- virtual btCollisionShape* createCylinderShapeZ(btScalar radius, btScalar height);
- virtual btCollisionShape* createConeShapeX(btScalar radius, btScalar height);
- virtual btCollisionShape* createConeShapeY(btScalar radius, btScalar height);
- virtual btCollisionShape* createConeShapeZ(btScalar radius, btScalar height);
- virtual class btTriangleIndexVertexArray* createTriangleMeshContainer();
- virtual btBvhTriangleMeshShape* createBvhTriangleMeshShape(btStridingMeshInterface* trimesh, btOptimizedBvh* bvh);
- virtual btCollisionShape* createConvexTriangleMeshShape(btStridingMeshInterface* trimesh);
-#ifdef SUPPORT_GIMPACT_SHAPE_IMPORT
- virtual btGImpactMeshShape* createGimpactShape(btStridingMeshInterface* trimesh);
-#endif //SUPPORT_GIMPACT_SHAPE_IMPORT
- virtual btStridingMeshInterfaceData* createStridingMeshInterfaceData(btStridingMeshInterfaceData* interfaceData);
-
- virtual class btConvexHullShape* createConvexHullShape();
- virtual class btCompoundShape* createCompoundShape();
- virtual class btScaledBvhTriangleMeshShape* createScaledTrangleMeshShape(btBvhTriangleMeshShape* meshShape, const btVector3& localScalingbtBvhTriangleMeshShape);
-
- virtual class btMultiSphereShape* createMultiSphereShape(const btVector3* positions, const btScalar* radi, int numSpheres);
-
- virtual btTriangleIndexVertexArray* createMeshInterface(btStridingMeshInterfaceData& meshData);
-
- ///acceleration and connectivity structures
- virtual btOptimizedBvh* createOptimizedBvh();
- virtual btTriangleInfoMap* createTriangleInfoMap();
-};
-
-#endif //BT_WORLD_IMPORTER_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp
deleted file mode 100644
index b5f4a3c869..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,390 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-*/
-
-#include "BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btAabbUtil2.h"
-#include "btManifoldResult.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-btShapePairCallback gCompoundChildShapePairCallback = 0;
-
-btCompoundCollisionAlgorithm::btCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_isSwapped(isSwapped),
- m_sharedManifold(ci.m_manifold)
-{
- m_ownsManifold = false;
-
- const btCollisionObjectWrapper* colObjWrap = m_isSwapped ? body1Wrap : body0Wrap;
- btAssert(colObjWrap->getCollisionShape()->isCompound());
-
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(colObjWrap->getCollisionShape());
- m_compoundShapeRevision = compoundShape->getUpdateRevision();
-
- preallocateChildAlgorithms(body0Wrap, body1Wrap);
-}
-
-void btCompoundCollisionAlgorithm::preallocateChildAlgorithms(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
-{
- const btCollisionObjectWrapper* colObjWrap = m_isSwapped ? body1Wrap : body0Wrap;
- const btCollisionObjectWrapper* otherObjWrap = m_isSwapped ? body0Wrap : body1Wrap;
- btAssert(colObjWrap->getCollisionShape()->isCompound());
-
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(colObjWrap->getCollisionShape());
-
- int numChildren = compoundShape->getNumChildShapes();
- int i;
-
- m_childCollisionAlgorithms.resize(numChildren);
- for (i = 0; i < numChildren; i++)
- {
- if (compoundShape->getDynamicAabbTree())
- {
- m_childCollisionAlgorithms[i] = 0;
- }
- else
- {
- const btCollisionShape* childShape = compoundShape->getChildShape(i);
-
- btCollisionObjectWrapper childWrap(colObjWrap, childShape, colObjWrap->getCollisionObject(), colObjWrap->getWorldTransform(), -1, i); //wrong child trans, but unused (hopefully)
- m_childCollisionAlgorithms[i] = m_dispatcher->findAlgorithm(&childWrap, otherObjWrap, m_sharedManifold, BT_CONTACT_POINT_ALGORITHMS);
-
- btAlignedObjectArray<btCollisionAlgorithm*> m_childCollisionAlgorithmsContact;
- btAlignedObjectArray<btCollisionAlgorithm*> m_childCollisionAlgorithmsClosestPoints;
- }
- }
-}
-
-void btCompoundCollisionAlgorithm::removeChildAlgorithms()
-{
- int numChildren = m_childCollisionAlgorithms.size();
- int i;
- for (i = 0; i < numChildren; i++)
- {
- if (m_childCollisionAlgorithms[i])
- {
- m_childCollisionAlgorithms[i]->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(m_childCollisionAlgorithms[i]);
- }
- }
-}
-
-btCompoundCollisionAlgorithm::~btCompoundCollisionAlgorithm()
-{
- removeChildAlgorithms();
-}
-
-struct btCompoundLeafCallback : btDbvt::ICollide
-{
-public:
- const btCollisionObjectWrapper* m_compoundColObjWrap;
- const btCollisionObjectWrapper* m_otherObjWrap;
- btDispatcher* m_dispatcher;
- const btDispatcherInfo& m_dispatchInfo;
- btManifoldResult* m_resultOut;
- btCollisionAlgorithm** m_childCollisionAlgorithms;
- btPersistentManifold* m_sharedManifold;
-
- btCompoundLeafCallback(const btCollisionObjectWrapper* compoundObjWrap, const btCollisionObjectWrapper* otherObjWrap, btDispatcher* dispatcher, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut, btCollisionAlgorithm** childCollisionAlgorithms, btPersistentManifold* sharedManifold)
- : m_compoundColObjWrap(compoundObjWrap), m_otherObjWrap(otherObjWrap), m_dispatcher(dispatcher), m_dispatchInfo(dispatchInfo), m_resultOut(resultOut), m_childCollisionAlgorithms(childCollisionAlgorithms), m_sharedManifold(sharedManifold)
- {
- }
-
- void ProcessChildShape(const btCollisionShape* childShape, int index)
- {
- btAssert(index >= 0);
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(m_compoundColObjWrap->getCollisionShape());
- btAssert(index < compoundShape->getNumChildShapes());
-
- if (gCompoundChildShapePairCallback)
- {
- if (!gCompoundChildShapePairCallback(m_otherObjWrap->getCollisionShape(), childShape))
- return;
- }
-
- //backup
- btTransform orgTrans = m_compoundColObjWrap->getWorldTransform();
-
- const btTransform& childTrans = compoundShape->getChildTransform(index);
- btTransform newChildWorldTrans = orgTrans * childTrans;
-
- //perform an AABB check first
- btVector3 aabbMin0, aabbMax0;
- childShape->getAabb(newChildWorldTrans, aabbMin0, aabbMax0);
-
- btVector3 extendAabb(m_resultOut->m_closestPointDistanceThreshold, m_resultOut->m_closestPointDistanceThreshold, m_resultOut->m_closestPointDistanceThreshold);
- aabbMin0 -= extendAabb;
- aabbMax0 += extendAabb;
-
- btVector3 aabbMin1, aabbMax1;
- m_otherObjWrap->getCollisionShape()->getAabb(m_otherObjWrap->getWorldTransform(), aabbMin1, aabbMax1);
-
-
- if (TestAabbAgainstAabb2(aabbMin0, aabbMax0, aabbMin1, aabbMax1))
- {
- btTransform preTransform = childTrans;
- if (this->m_compoundColObjWrap->m_preTransform)
- {
- preTransform = preTransform *(*(this->m_compoundColObjWrap->m_preTransform));
- }
- btCollisionObjectWrapper compoundWrap(this->m_compoundColObjWrap, childShape, m_compoundColObjWrap->getCollisionObject(), newChildWorldTrans, preTransform, -1, index);
-
- btCollisionAlgorithm* algo = 0;
- bool allocatedAlgorithm = false;
-
- if (m_resultOut->m_closestPointDistanceThreshold > 0)
- {
- algo = m_dispatcher->findAlgorithm(&compoundWrap, m_otherObjWrap, 0, BT_CLOSEST_POINT_ALGORITHMS);
- allocatedAlgorithm = true;
- }
- else
- {
- //the contactpoint is still projected back using the original inverted worldtrans
- if (!m_childCollisionAlgorithms[index])
- {
- m_childCollisionAlgorithms[index] = m_dispatcher->findAlgorithm(&compoundWrap, m_otherObjWrap, m_sharedManifold, BT_CONTACT_POINT_ALGORITHMS);
- }
- algo = m_childCollisionAlgorithms[index];
- }
-
- const btCollisionObjectWrapper* tmpWrap = 0;
-
- ///detect swapping case
- if (m_resultOut->getBody0Internal() == m_compoundColObjWrap->getCollisionObject())
- {
- tmpWrap = m_resultOut->getBody0Wrap();
- m_resultOut->setBody0Wrap(&compoundWrap);
- m_resultOut->setShapeIdentifiersA(-1, index);
- }
- else
- {
- tmpWrap = m_resultOut->getBody1Wrap();
- m_resultOut->setBody1Wrap(&compoundWrap);
- m_resultOut->setShapeIdentifiersB(-1, index);
- }
-
- algo->processCollision(&compoundWrap, m_otherObjWrap, m_dispatchInfo, m_resultOut);
-
-#if 0
- if (m_dispatchInfo.m_debugDraw && (m_dispatchInfo.m_debugDraw->getDebugMode() & btIDebugDraw::DBG_DrawAabb))
- {
- btVector3 worldAabbMin,worldAabbMax;
- m_dispatchInfo.m_debugDraw->drawAabb(aabbMin0,aabbMax0,btVector3(1,1,1));
- m_dispatchInfo.m_debugDraw->drawAabb(aabbMin1,aabbMax1,btVector3(1,1,1));
- }
-#endif
-
- if (m_resultOut->getBody0Internal() == m_compoundColObjWrap->getCollisionObject())
- {
- m_resultOut->setBody0Wrap(tmpWrap);
- }
- else
- {
- m_resultOut->setBody1Wrap(tmpWrap);
- }
- if (allocatedAlgorithm)
- {
- algo->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(algo);
- }
- }
- }
- void Process(const btDbvtNode* leaf)
- {
- int index = leaf->dataAsInt;
-
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(m_compoundColObjWrap->getCollisionShape());
- const btCollisionShape* childShape = compoundShape->getChildShape(index);
-
-#if 0
- if (m_dispatchInfo.m_debugDraw && (m_dispatchInfo.m_debugDraw->getDebugMode() & btIDebugDraw::DBG_DrawAabb))
- {
- btVector3 worldAabbMin,worldAabbMax;
- btTransform orgTrans = m_compoundColObjWrap->getWorldTransform();
- btTransformAabb(leaf->volume.Mins(),leaf->volume.Maxs(),0.,orgTrans,worldAabbMin,worldAabbMax);
- m_dispatchInfo.m_debugDraw->drawAabb(worldAabbMin,worldAabbMax,btVector3(1,0,0));
- }
-#endif
-
- ProcessChildShape(childShape, index);
- }
-};
-
-void btCompoundCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- const btCollisionObjectWrapper* colObjWrap = m_isSwapped ? body1Wrap : body0Wrap;
- const btCollisionObjectWrapper* otherObjWrap = m_isSwapped ? body0Wrap : body1Wrap;
-
- btAssert(colObjWrap->getCollisionShape()->isCompound());
- const btCompoundShape* compoundShape = static_cast<const btCompoundShape*>(colObjWrap->getCollisionShape());
-
- ///btCompoundShape might have changed:
- ////make sure the internal child collision algorithm caches are still valid
- if (compoundShape->getUpdateRevision() != m_compoundShapeRevision)
- {
- ///clear and update all
- removeChildAlgorithms();
-
- preallocateChildAlgorithms(body0Wrap, body1Wrap);
- m_compoundShapeRevision = compoundShape->getUpdateRevision();
- }
-
- if (m_childCollisionAlgorithms.size() == 0)
- return;
-
- const btDbvt* tree = compoundShape->getDynamicAabbTree();
- //use a dynamic aabb tree to cull potential child-overlaps
- btCompoundLeafCallback callback(colObjWrap, otherObjWrap, m_dispatcher, dispatchInfo, resultOut, &m_childCollisionAlgorithms[0], m_sharedManifold);
-
- ///we need to refresh all contact manifolds
- ///note that we should actually recursively traverse all children, btCompoundShape can nested more then 1 level deep
- ///so we should add a 'refreshManifolds' in the btCollisionAlgorithm
- {
- int i;
- manifoldArray.resize(0);
- for (i = 0; i < m_childCollisionAlgorithms.size(); i++)
- {
- if (m_childCollisionAlgorithms[i])
- {
- m_childCollisionAlgorithms[i]->getAllContactManifolds(manifoldArray);
- for (int m = 0; m < manifoldArray.size(); m++)
- {
- if (manifoldArray[m]->getNumContacts())
- {
- resultOut->setPersistentManifold(manifoldArray[m]);
- resultOut->refreshContactPoints();
- resultOut->setPersistentManifold(0); //??necessary?
- }
- }
- manifoldArray.resize(0);
- }
- }
- }
-
- if (tree)
- {
- btVector3 localAabbMin, localAabbMax;
- btTransform otherInCompoundSpace;
- otherInCompoundSpace = colObjWrap->getWorldTransform().inverse() * otherObjWrap->getWorldTransform();
- otherObjWrap->getCollisionShape()->getAabb(otherInCompoundSpace, localAabbMin, localAabbMax);
- btVector3 extraExtends(resultOut->m_closestPointDistanceThreshold, resultOut->m_closestPointDistanceThreshold, resultOut->m_closestPointDistanceThreshold);
- localAabbMin -= extraExtends;
- localAabbMax += extraExtends;
-
- const ATTRIBUTE_ALIGNED16(btDbvtVolume) bounds = btDbvtVolume::FromMM(localAabbMin, localAabbMax);
- //process all children, that overlap with the given AABB bounds
- tree->collideTVNoStackAlloc(tree->m_root, bounds, stack2, callback);
- }
- else
- {
- //iterate over all children, perform an AABB check inside ProcessChildShape
- int numChildren = m_childCollisionAlgorithms.size();
- int i;
- for (i = 0; i < numChildren; i++)
- {
- callback.ProcessChildShape(compoundShape->getChildShape(i), i);
- }
- }
-
- {
- //iterate over all children, perform an AABB check inside ProcessChildShape
- int numChildren = m_childCollisionAlgorithms.size();
- int i;
- manifoldArray.resize(0);
- const btCollisionShape* childShape = 0;
- btTransform orgTrans;
-
- btTransform newChildWorldTrans;
- btVector3 aabbMin0, aabbMax0, aabbMin1, aabbMax1;
-
- for (i = 0; i < numChildren; i++)
- {
- if (m_childCollisionAlgorithms[i])
- {
- childShape = compoundShape->getChildShape(i);
- //if not longer overlapping, remove the algorithm
- orgTrans = colObjWrap->getWorldTransform();
-
- const btTransform& childTrans = compoundShape->getChildTransform(i);
- newChildWorldTrans = orgTrans * childTrans;
-
- //perform an AABB check first
- childShape->getAabb(newChildWorldTrans, aabbMin0, aabbMax0);
- otherObjWrap->getCollisionShape()->getAabb(otherObjWrap->getWorldTransform(), aabbMin1, aabbMax1);
-
- if (!TestAabbAgainstAabb2(aabbMin0, aabbMax0, aabbMin1, aabbMax1))
- {
- m_childCollisionAlgorithms[i]->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(m_childCollisionAlgorithms[i]);
- m_childCollisionAlgorithms[i] = 0;
- }
- }
- }
- }
-}
-
-btScalar btCompoundCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- btAssert(0);
- //needs to be fixed, using btCollisionObjectWrapper and NOT modifying internal data structures
- btCollisionObject* colObj = m_isSwapped ? body1 : body0;
- btCollisionObject* otherObj = m_isSwapped ? body0 : body1;
-
- btAssert(colObj->getCollisionShape()->isCompound());
-
- btCompoundShape* compoundShape = static_cast<btCompoundShape*>(colObj->getCollisionShape());
-
- //We will use the OptimizedBVH, AABB tree to cull potential child-overlaps
- //If both proxies are Compound, we will deal with that directly, by performing sequential/parallel tree traversals
- //given Proxy0 and Proxy1, if both have a tree, Tree0 and Tree1, this means:
- //determine overlapping nodes of Proxy1 using Proxy0 AABB against Tree1
- //then use each overlapping node AABB against Tree0
- //and vise versa.
-
- btScalar hitFraction = btScalar(1.);
-
- int numChildren = m_childCollisionAlgorithms.size();
- int i;
- btTransform orgTrans;
- btScalar frac;
- for (i = 0; i < numChildren; i++)
- {
- //btCollisionShape* childShape = compoundShape->getChildShape(i);
-
- //backup
- orgTrans = colObj->getWorldTransform();
-
- const btTransform& childTrans = compoundShape->getChildTransform(i);
- //btTransform newChildWorldTrans = orgTrans*childTrans ;
- colObj->setWorldTransform(orgTrans * childTrans);
-
- //btCollisionShape* tmpShape = colObj->getCollisionShape();
- //colObj->internalSetTemporaryCollisionShape( childShape );
- frac = m_childCollisionAlgorithms[i]->calculateTimeOfImpact(colObj, otherObj, dispatchInfo, resultOut);
- if (frac < hitFraction)
- {
- hitFraction = frac;
- }
- //revert back
- //colObj->internalSetTemporaryCollisionShape( tmpShape);
- colObj->setWorldTransform(orgTrans);
- }
- return hitFraction;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h
deleted file mode 100644
index 4ea5e77185..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-*/
-
-#ifndef BT_COMPOUND_COLLISION_ALGORITHM_H
-#define BT_COMPOUND_COLLISION_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-class btDispatcher;
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "btCollisionCreateFunc.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-class btDispatcher;
-class btCollisionObject;
-
-class btCollisionShape;
-typedef bool (*btShapePairCallback)(const btCollisionShape* pShape0, const btCollisionShape* pShape1);
-extern btShapePairCallback gCompoundChildShapePairCallback;
-
-/// btCompoundCollisionAlgorithm supports collision between CompoundCollisionShapes and other collision shapes
-class btCompoundCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- btNodeStack stack2;
- btManifoldArray manifoldArray;
-
-protected:
- btAlignedObjectArray<btCollisionAlgorithm*> m_childCollisionAlgorithms;
- bool m_isSwapped;
-
- class btPersistentManifold* m_sharedManifold;
- bool m_ownsManifold;
-
- int m_compoundShapeRevision; //to keep track of changes, so that childAlgorithm array can be updated
-
- void removeChildAlgorithms();
-
- void preallocateChildAlgorithms(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
-public:
- btCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- virtual ~btCompoundCollisionAlgorithm();
-
- btCollisionAlgorithm* getChildAlgorithm(int n) const
- {
- return m_childCollisionAlgorithms[n];
- }
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- int i;
- for (i = 0; i < m_childCollisionAlgorithms.size(); i++)
- {
- if (m_childCollisionAlgorithms[i])
- m_childCollisionAlgorithms[i]->getAllContactManifolds(manifoldArray);
- }
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCollisionAlgorithm));
- return new (mem) btCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, false);
- }
- };
-
- struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCollisionAlgorithm));
- return new (mem) btCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, true);
- }
- };
-};
-
-#endif //BT_COMPOUND_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp
deleted file mode 100644
index 044b60dbb1..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,413 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-*/
-
-#include "btCompoundCompoundCollisionAlgorithm.h"
-#include "LinearMath/btQuickprof.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btAabbUtil2.h"
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-//USE_LOCAL_STACK will avoid most (often all) dynamic memory allocations due to resizing in processCollision and MycollideTT
-#define USE_LOCAL_STACK 1
-
-btShapePairCallback gCompoundCompoundChildShapePairCallback = 0;
-
-btCompoundCompoundCollisionAlgorithm::btCompoundCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped)
- : btCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, isSwapped)
-{
- void* ptr = btAlignedAlloc(sizeof(btHashedSimplePairCache), 16);
- m_childCollisionAlgorithmCache = new (ptr) btHashedSimplePairCache();
-
- const btCollisionObjectWrapper* col0ObjWrap = body0Wrap;
- btAssert(col0ObjWrap->getCollisionShape()->isCompound());
-
- const btCollisionObjectWrapper* col1ObjWrap = body1Wrap;
- btAssert(col1ObjWrap->getCollisionShape()->isCompound());
-
- const btCompoundShape* compoundShape0 = static_cast<const btCompoundShape*>(col0ObjWrap->getCollisionShape());
- m_compoundShapeRevision0 = compoundShape0->getUpdateRevision();
-
- const btCompoundShape* compoundShape1 = static_cast<const btCompoundShape*>(col1ObjWrap->getCollisionShape());
- m_compoundShapeRevision1 = compoundShape1->getUpdateRevision();
-}
-
-btCompoundCompoundCollisionAlgorithm::~btCompoundCompoundCollisionAlgorithm()
-{
- removeChildAlgorithms();
- m_childCollisionAlgorithmCache->~btHashedSimplePairCache();
- btAlignedFree(m_childCollisionAlgorithmCache);
-}
-
-void btCompoundCompoundCollisionAlgorithm::getAllContactManifolds(btManifoldArray& manifoldArray)
-{
- int i;
- btSimplePairArray& pairs = m_childCollisionAlgorithmCache->getOverlappingPairArray();
- for (i = 0; i < pairs.size(); i++)
- {
- if (pairs[i].m_userPointer)
- {
- ((btCollisionAlgorithm*)pairs[i].m_userPointer)->getAllContactManifolds(manifoldArray);
- }
- }
-}
-
-void btCompoundCompoundCollisionAlgorithm::removeChildAlgorithms()
-{
- btSimplePairArray& pairs = m_childCollisionAlgorithmCache->getOverlappingPairArray();
-
- int numChildren = pairs.size();
- int i;
- for (i = 0; i < numChildren; i++)
- {
- if (pairs[i].m_userPointer)
- {
- btCollisionAlgorithm* algo = (btCollisionAlgorithm*)pairs[i].m_userPointer;
- algo->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(algo);
- }
- }
- m_childCollisionAlgorithmCache->removeAllPairs();
-}
-
-struct btCompoundCompoundLeafCallback : btDbvt::ICollide
-{
- int m_numOverlapPairs;
-
- const btCollisionObjectWrapper* m_compound0ColObjWrap;
- const btCollisionObjectWrapper* m_compound1ColObjWrap;
- btDispatcher* m_dispatcher;
- const btDispatcherInfo& m_dispatchInfo;
- btManifoldResult* m_resultOut;
-
- class btHashedSimplePairCache* m_childCollisionAlgorithmCache;
-
- btPersistentManifold* m_sharedManifold;
-
- btCompoundCompoundLeafCallback(const btCollisionObjectWrapper* compound1ObjWrap,
- const btCollisionObjectWrapper* compound0ObjWrap,
- btDispatcher* dispatcher,
- const btDispatcherInfo& dispatchInfo,
- btManifoldResult* resultOut,
- btHashedSimplePairCache* childAlgorithmsCache,
- btPersistentManifold* sharedManifold)
- : m_numOverlapPairs(0), m_compound0ColObjWrap(compound1ObjWrap), m_compound1ColObjWrap(compound0ObjWrap), m_dispatcher(dispatcher), m_dispatchInfo(dispatchInfo), m_resultOut(resultOut), m_childCollisionAlgorithmCache(childAlgorithmsCache), m_sharedManifold(sharedManifold)
- {
- }
-
- void Process(const btDbvtNode* leaf0, const btDbvtNode* leaf1)
- {
- BT_PROFILE("btCompoundCompoundLeafCallback::Process");
- m_numOverlapPairs++;
-
- int childIndex0 = leaf0->dataAsInt;
- int childIndex1 = leaf1->dataAsInt;
-
- btAssert(childIndex0 >= 0);
- btAssert(childIndex1 >= 0);
-
- const btCompoundShape* compoundShape0 = static_cast<const btCompoundShape*>(m_compound0ColObjWrap->getCollisionShape());
- btAssert(childIndex0 < compoundShape0->getNumChildShapes());
-
- const btCompoundShape* compoundShape1 = static_cast<const btCompoundShape*>(m_compound1ColObjWrap->getCollisionShape());
- btAssert(childIndex1 < compoundShape1->getNumChildShapes());
-
- const btCollisionShape* childShape0 = compoundShape0->getChildShape(childIndex0);
- const btCollisionShape* childShape1 = compoundShape1->getChildShape(childIndex1);
-
- //backup
- btTransform orgTrans0 = m_compound0ColObjWrap->getWorldTransform();
- const btTransform& childTrans0 = compoundShape0->getChildTransform(childIndex0);
- btTransform newChildWorldTrans0 = orgTrans0 * childTrans0;
-
- btTransform orgTrans1 = m_compound1ColObjWrap->getWorldTransform();
- const btTransform& childTrans1 = compoundShape1->getChildTransform(childIndex1);
- btTransform newChildWorldTrans1 = orgTrans1 * childTrans1;
-
- //perform an AABB check first
- btVector3 aabbMin0, aabbMax0, aabbMin1, aabbMax1;
- childShape0->getAabb(newChildWorldTrans0, aabbMin0, aabbMax0);
- childShape1->getAabb(newChildWorldTrans1, aabbMin1, aabbMax1);
-
- btVector3 thresholdVec(m_resultOut->m_closestPointDistanceThreshold, m_resultOut->m_closestPointDistanceThreshold, m_resultOut->m_closestPointDistanceThreshold);
-
- aabbMin0 -= thresholdVec;
- aabbMax0 += thresholdVec;
-
- if (gCompoundCompoundChildShapePairCallback)
- {
- if (!gCompoundCompoundChildShapePairCallback(childShape0, childShape1))
- return;
- }
-
- if (TestAabbAgainstAabb2(aabbMin0, aabbMax0, aabbMin1, aabbMax1))
- {
- btCollisionObjectWrapper compoundWrap0(this->m_compound0ColObjWrap, childShape0, m_compound0ColObjWrap->getCollisionObject(), newChildWorldTrans0, -1, childIndex0);
- btCollisionObjectWrapper compoundWrap1(this->m_compound1ColObjWrap, childShape1, m_compound1ColObjWrap->getCollisionObject(), newChildWorldTrans1, -1, childIndex1);
-
- btSimplePair* pair = m_childCollisionAlgorithmCache->findPair(childIndex0, childIndex1);
- bool removePair = false;
- btCollisionAlgorithm* colAlgo = 0;
- if (m_resultOut->m_closestPointDistanceThreshold > 0)
- {
- colAlgo = m_dispatcher->findAlgorithm(&compoundWrap0, &compoundWrap1, 0, BT_CLOSEST_POINT_ALGORITHMS);
- removePair = true;
- }
- else
- {
- if (pair)
- {
- colAlgo = (btCollisionAlgorithm*)pair->m_userPointer;
- }
- else
- {
- colAlgo = m_dispatcher->findAlgorithm(&compoundWrap0, &compoundWrap1, m_sharedManifold, BT_CONTACT_POINT_ALGORITHMS);
- pair = m_childCollisionAlgorithmCache->addOverlappingPair(childIndex0, childIndex1);
- btAssert(pair);
- pair->m_userPointer = colAlgo;
- }
- }
-
- btAssert(colAlgo);
-
- const btCollisionObjectWrapper* tmpWrap0 = 0;
- const btCollisionObjectWrapper* tmpWrap1 = 0;
-
- tmpWrap0 = m_resultOut->getBody0Wrap();
- tmpWrap1 = m_resultOut->getBody1Wrap();
-
- m_resultOut->setBody0Wrap(&compoundWrap0);
- m_resultOut->setBody1Wrap(&compoundWrap1);
-
- m_resultOut->setShapeIdentifiersA(-1, childIndex0);
- m_resultOut->setShapeIdentifiersB(-1, childIndex1);
-
- colAlgo->processCollision(&compoundWrap0, &compoundWrap1, m_dispatchInfo, m_resultOut);
-
- m_resultOut->setBody0Wrap(tmpWrap0);
- m_resultOut->setBody1Wrap(tmpWrap1);
-
- if (removePair)
- {
- colAlgo->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(colAlgo);
- }
- }
- }
-};
-
-static DBVT_INLINE bool MyIntersect(const btDbvtAabbMm& a,
- const btDbvtAabbMm& b, const btTransform& xform, btScalar distanceThreshold)
-{
- btVector3 newmin, newmax;
- btTransformAabb(b.Mins(), b.Maxs(), 0.f, xform, newmin, newmax);
- newmin -= btVector3(distanceThreshold, distanceThreshold, distanceThreshold);
- newmax += btVector3(distanceThreshold, distanceThreshold, distanceThreshold);
- btDbvtAabbMm newb = btDbvtAabbMm::FromMM(newmin, newmax);
- return Intersect(a, newb);
-}
-
-static inline void MycollideTT(const btDbvtNode* root0,
- const btDbvtNode* root1,
- const btTransform& xform,
- btCompoundCompoundLeafCallback* callback, btScalar distanceThreshold)
-{
- if (root0 && root1)
- {
- int depth = 1;
- int treshold = btDbvt::DOUBLE_STACKSIZE - 4;
- btAlignedObjectArray<btDbvt::sStkNN> stkStack;
-#ifdef USE_LOCAL_STACK
- ATTRIBUTE_ALIGNED16(btDbvt::sStkNN localStack[btDbvt::DOUBLE_STACKSIZE]);
- stkStack.initializeFromBuffer(&localStack, btDbvt::DOUBLE_STACKSIZE, btDbvt::DOUBLE_STACKSIZE);
-#else
- stkStack.resize(btDbvt::DOUBLE_STACKSIZE);
-#endif
- stkStack[0] = btDbvt::sStkNN(root0, root1);
- do
- {
- btDbvt::sStkNN p = stkStack[--depth];
- if (MyIntersect(p.a->volume, p.b->volume, xform, distanceThreshold))
- {
- if (depth > treshold)
- {
- stkStack.resize(stkStack.size() * 2);
- treshold = stkStack.size() - 4;
- }
- if (p.a->isinternal())
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = btDbvt::sStkNN(p.a->childs[0], p.b->childs[0]);
- stkStack[depth++] = btDbvt::sStkNN(p.a->childs[1], p.b->childs[0]);
- stkStack[depth++] = btDbvt::sStkNN(p.a->childs[0], p.b->childs[1]);
- stkStack[depth++] = btDbvt::sStkNN(p.a->childs[1], p.b->childs[1]);
- }
- else
- {
- stkStack[depth++] = btDbvt::sStkNN(p.a->childs[0], p.b);
- stkStack[depth++] = btDbvt::sStkNN(p.a->childs[1], p.b);
- }
- }
- else
- {
- if (p.b->isinternal())
- {
- stkStack[depth++] = btDbvt::sStkNN(p.a, p.b->childs[0]);
- stkStack[depth++] = btDbvt::sStkNN(p.a, p.b->childs[1]);
- }
- else
- {
- callback->Process(p.a, p.b);
- }
- }
- }
- } while (depth);
- }
-}
-
-void btCompoundCompoundCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- const btCollisionObjectWrapper* col0ObjWrap = body0Wrap;
- const btCollisionObjectWrapper* col1ObjWrap = body1Wrap;
-
- btAssert(col0ObjWrap->getCollisionShape()->isCompound());
- btAssert(col1ObjWrap->getCollisionShape()->isCompound());
- const btCompoundShape* compoundShape0 = static_cast<const btCompoundShape*>(col0ObjWrap->getCollisionShape());
- const btCompoundShape* compoundShape1 = static_cast<const btCompoundShape*>(col1ObjWrap->getCollisionShape());
-
- const btDbvt* tree0 = compoundShape0->getDynamicAabbTree();
- const btDbvt* tree1 = compoundShape1->getDynamicAabbTree();
- if (!tree0 || !tree1)
- {
- return btCompoundCollisionAlgorithm::processCollision(body0Wrap, body1Wrap, dispatchInfo, resultOut);
- }
- ///btCompoundShape might have changed:
- ////make sure the internal child collision algorithm caches are still valid
- if ((compoundShape0->getUpdateRevision() != m_compoundShapeRevision0) || (compoundShape1->getUpdateRevision() != m_compoundShapeRevision1))
- {
- ///clear all
- removeChildAlgorithms();
- m_compoundShapeRevision0 = compoundShape0->getUpdateRevision();
- m_compoundShapeRevision1 = compoundShape1->getUpdateRevision();
- }
-
- ///we need to refresh all contact manifolds
- ///note that we should actually recursively traverse all children, btCompoundShape can nested more then 1 level deep
- ///so we should add a 'refreshManifolds' in the btCollisionAlgorithm
- {
- int i;
- btManifoldArray manifoldArray;
-#ifdef USE_LOCAL_STACK
- btPersistentManifold localManifolds[4];
- manifoldArray.initializeFromBuffer(&localManifolds, 0, 4);
-#endif
- btSimplePairArray& pairs = m_childCollisionAlgorithmCache->getOverlappingPairArray();
- for (i = 0; i < pairs.size(); i++)
- {
- if (pairs[i].m_userPointer)
- {
- btCollisionAlgorithm* algo = (btCollisionAlgorithm*)pairs[i].m_userPointer;
- algo->getAllContactManifolds(manifoldArray);
- for (int m = 0; m < manifoldArray.size(); m++)
- {
- if (manifoldArray[m]->getNumContacts())
- {
- resultOut->setPersistentManifold(manifoldArray[m]);
- resultOut->refreshContactPoints();
- resultOut->setPersistentManifold(0);
- }
- }
- manifoldArray.resize(0);
- }
- }
- }
-
- btCompoundCompoundLeafCallback callback(col0ObjWrap, col1ObjWrap, this->m_dispatcher, dispatchInfo, resultOut, this->m_childCollisionAlgorithmCache, m_sharedManifold);
-
- const btTransform xform = col0ObjWrap->getWorldTransform().inverse() * col1ObjWrap->getWorldTransform();
- MycollideTT(tree0->m_root, tree1->m_root, xform, &callback, resultOut->m_closestPointDistanceThreshold);
-
- //printf("#compound-compound child/leaf overlap =%d \r",callback.m_numOverlapPairs);
-
- //remove non-overlapping child pairs
-
- {
- btAssert(m_removePairs.size() == 0);
-
- //iterate over all children, perform an AABB check inside ProcessChildShape
- btSimplePairArray& pairs = m_childCollisionAlgorithmCache->getOverlappingPairArray();
-
- int i;
- btManifoldArray manifoldArray;
-
- btVector3 aabbMin0, aabbMax0, aabbMin1, aabbMax1;
-
- for (i = 0; i < pairs.size(); i++)
- {
- if (pairs[i].m_userPointer)
- {
- btCollisionAlgorithm* algo = (btCollisionAlgorithm*)pairs[i].m_userPointer;
-
- {
- const btCollisionShape* childShape0 = 0;
-
- btTransform newChildWorldTrans0;
- childShape0 = compoundShape0->getChildShape(pairs[i].m_indexA);
- const btTransform& childTrans0 = compoundShape0->getChildTransform(pairs[i].m_indexA);
- newChildWorldTrans0 = col0ObjWrap->getWorldTransform() * childTrans0;
- childShape0->getAabb(newChildWorldTrans0, aabbMin0, aabbMax0);
- }
- btVector3 thresholdVec(resultOut->m_closestPointDistanceThreshold, resultOut->m_closestPointDistanceThreshold, resultOut->m_closestPointDistanceThreshold);
- aabbMin0 -= thresholdVec;
- aabbMax0 += thresholdVec;
- {
- const btCollisionShape* childShape1 = 0;
- btTransform newChildWorldTrans1;
-
- childShape1 = compoundShape1->getChildShape(pairs[i].m_indexB);
- const btTransform& childTrans1 = compoundShape1->getChildTransform(pairs[i].m_indexB);
- newChildWorldTrans1 = col1ObjWrap->getWorldTransform() * childTrans1;
- childShape1->getAabb(newChildWorldTrans1, aabbMin1, aabbMax1);
- }
-
- aabbMin1 -= thresholdVec;
- aabbMax1 += thresholdVec;
-
- if (!TestAabbAgainstAabb2(aabbMin0, aabbMax0, aabbMin1, aabbMax1))
- {
- algo->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(algo);
- m_removePairs.push_back(btSimplePair(pairs[i].m_indexA, pairs[i].m_indexB));
- }
- }
- }
- for (int i = 0; i < m_removePairs.size(); i++)
- {
- m_childCollisionAlgorithmCache->removeOverlappingPair(m_removePairs[i].m_indexA, m_removePairs[i].m_indexB);
- }
- m_removePairs.clear();
- }
-}
-
-btScalar btCompoundCompoundCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- btAssert(0);
- return 0.f;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h
deleted file mode 100644
index a940d840e0..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-*/
-
-#ifndef BT_COMPOUND_COMPOUND_COLLISION_ALGORITHM_H
-#define BT_COMPOUND_COMPOUND_COLLISION_ALGORITHM_H
-
-#include "btCompoundCollisionAlgorithm.h"
-
-#include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-class btDispatcher;
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "BulletCollision/CollisionDispatch/btHashedSimplePairCache.h"
-class btDispatcher;
-class btCollisionObject;
-
-class btCollisionShape;
-
-extern btShapePairCallback gCompoundCompoundChildShapePairCallback;
-
-/// btCompoundCompoundCollisionAlgorithm supports collision between two btCompoundCollisionShape shapes
-class btCompoundCompoundCollisionAlgorithm : public btCompoundCollisionAlgorithm
-{
- class btHashedSimplePairCache* m_childCollisionAlgorithmCache;
- btSimplePairArray m_removePairs;
-
- int m_compoundShapeRevision0; //to keep track of changes, so that childAlgorithm array can be updated
- int m_compoundShapeRevision1;
-
- void removeChildAlgorithms();
-
- // void preallocateChildAlgorithms(const btCollisionObjectWrapper* body0Wrap,const btCollisionObjectWrapper* body1Wrap);
-
-public:
- btCompoundCompoundCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- virtual ~btCompoundCompoundCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray);
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCompoundCollisionAlgorithm));
- return new (mem) btCompoundCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, false);
- }
- };
-
- struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btCompoundCompoundCollisionAlgorithm));
- return new (mem) btCompoundCompoundCollisionAlgorithm(ci, body0Wrap, body1Wrap, true);
- }
- };
-};
-
-#endif //BT_COMPOUND_COMPOUND_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp
deleted file mode 100644
index 9087f84398..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp
+++ /dev/null
@@ -1,211 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvex2dConvex2dAlgorithm.h"
-
-//#include <stdio.h>
-#include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/CollisionShapes/btCapsuleShape.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-btConvex2dConvex2dAlgorithm::CreateFunc::CreateFunc(btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* pdSolver)
-{
- m_simplexSolver = simplexSolver;
- m_pdSolver = pdSolver;
-}
-
-btConvex2dConvex2dAlgorithm::CreateFunc::~CreateFunc()
-{
-}
-
-btConvex2dConvex2dAlgorithm::btConvex2dConvex2dAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* pdSolver, int /* numPerturbationIterations */, int /* minimumPointsPerturbationThreshold */)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_simplexSolver(simplexSolver),
- m_pdSolver(pdSolver),
- m_ownManifold(false),
- m_manifoldPtr(mf),
- m_lowLevelOfDetail(false)
-{
- (void)body0Wrap;
- (void)body1Wrap;
-}
-
-btConvex2dConvex2dAlgorithm::~btConvex2dConvex2dAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btConvex2dConvex2dAlgorithm ::setLowLevelOfDetail(bool useLowLevel)
-{
- m_lowLevelOfDetail = useLowLevel;
-}
-
-extern btScalar gContactBreakingThreshold;
-
-//
-// Convex-Convex collision algorithm
-//
-void btConvex2dConvex2dAlgorithm ::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- if (!m_manifoldPtr)
- {
- //swapped?
- m_manifoldPtr = m_dispatcher->getNewManifold(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject());
- m_ownManifold = true;
- }
- resultOut->setPersistentManifold(m_manifoldPtr);
-
- //comment-out next line to test multi-contact generation
- //resultOut->getPersistentManifold()->clearManifold();
-
- const btConvexShape* min0 = static_cast<const btConvexShape*>(body0Wrap->getCollisionShape());
- const btConvexShape* min1 = static_cast<const btConvexShape*>(body1Wrap->getCollisionShape());
-
- btVector3 normalOnB;
- btVector3 pointOnBWorld;
-
- {
- btGjkPairDetector::ClosestPointInput input;
-
- btGjkPairDetector gjkPairDetector(min0, min1, m_simplexSolver, m_pdSolver);
- //TODO: if (dispatchInfo.m_useContinuous)
- gjkPairDetector.setMinkowskiA(min0);
- gjkPairDetector.setMinkowskiB(min1);
-
- {
- input.m_maximumDistanceSquared = min0->getMargin() + min1->getMargin() + m_manifoldPtr->getContactBreakingThreshold();
- input.m_maximumDistanceSquared *= input.m_maximumDistanceSquared;
- }
-
- input.m_transformA = body0Wrap->getWorldTransform();
- input.m_transformB = body1Wrap->getWorldTransform();
-
- gjkPairDetector.getClosestPoints(input, *resultOut, dispatchInfo.m_debugDraw);
-
- btVector3 v0, v1;
- btVector3 sepNormalWorldSpace;
- }
-
- if (m_ownManifold)
- {
- resultOut->refreshContactPoints();
- }
-}
-
-btScalar btConvex2dConvex2dAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- ///Rather then checking ALL pairs, only calculate TOI when motion exceeds threshold
-
- ///Linear motion for one of objects needs to exceed m_ccdSquareMotionThreshold
- ///col0->m_worldTransform,
- btScalar resultFraction = btScalar(1.);
-
- btScalar squareMot0 = (col0->getInterpolationWorldTransform().getOrigin() - col0->getWorldTransform().getOrigin()).length2();
- btScalar squareMot1 = (col1->getInterpolationWorldTransform().getOrigin() - col1->getWorldTransform().getOrigin()).length2();
-
- if (squareMot0 < col0->getCcdSquareMotionThreshold() &&
- squareMot1 < col1->getCcdSquareMotionThreshold())
- return resultFraction;
-
- //An adhoc way of testing the Continuous Collision Detection algorithms
- //One object is approximated as a sphere, to simplify things
- //Starting in penetration should report no time of impact
- //For proper CCD, better accuracy and handling of 'allowed' penetration should be added
- //also the mainloop of the physics should have a kind of toi queue (something like Brian Mirtich's application of Timewarp for Rigidbodies)
-
- /// Convex0 against sphere for Convex1
- {
- btConvexShape* convex0 = static_cast<btConvexShape*>(col0->getCollisionShape());
-
- btSphereShape sphere1(col1->getCcdSweptSphereRadius()); //todo: allow non-zero sphere sizes, for better approximation
- btConvexCast::CastResult result;
- btVoronoiSimplexSolver voronoiSimplex;
- //SubsimplexConvexCast ccd0(&sphere,min0,&voronoiSimplex);
- ///Simplification, one object is simplified as a sphere
- btGjkConvexCast ccd1(convex0, &sphere1, &voronoiSimplex);
- //ContinuousConvexCollision ccd(min0,min1,&voronoiSimplex,0);
- if (ccd1.calcTimeOfImpact(col0->getWorldTransform(), col0->getInterpolationWorldTransform(),
- col1->getWorldTransform(), col1->getInterpolationWorldTransform(), result))
- {
- //store result.m_fraction in both bodies
-
- if (col0->getHitFraction() > result.m_fraction)
- col0->setHitFraction(result.m_fraction);
-
- if (col1->getHitFraction() > result.m_fraction)
- col1->setHitFraction(result.m_fraction);
-
- if (resultFraction > result.m_fraction)
- resultFraction = result.m_fraction;
- }
- }
-
- /// Sphere (for convex0) against Convex1
- {
- btConvexShape* convex1 = static_cast<btConvexShape*>(col1->getCollisionShape());
-
- btSphereShape sphere0(col0->getCcdSweptSphereRadius()); //todo: allow non-zero sphere sizes, for better approximation
- btConvexCast::CastResult result;
- btVoronoiSimplexSolver voronoiSimplex;
- //SubsimplexConvexCast ccd0(&sphere,min0,&voronoiSimplex);
- ///Simplification, one object is simplified as a sphere
- btGjkConvexCast ccd1(&sphere0, convex1, &voronoiSimplex);
- //ContinuousConvexCollision ccd(min0,min1,&voronoiSimplex,0);
- if (ccd1.calcTimeOfImpact(col0->getWorldTransform(), col0->getInterpolationWorldTransform(),
- col1->getWorldTransform(), col1->getInterpolationWorldTransform(), result))
- {
- //store result.m_fraction in both bodies
-
- if (col0->getHitFraction() > result.m_fraction)
- col0->setHitFraction(result.m_fraction);
-
- if (col1->getHitFraction() > result.m_fraction)
- col1->setHitFraction(result.m_fraction);
-
- if (resultFraction > result.m_fraction)
- resultFraction = result.m_fraction;
- }
- }
-
- return resultFraction;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h
deleted file mode 100644
index 9fca463fbe..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_2D_CONVEX_2D_ALGORITHM_H
-#define BT_CONVEX_2D_CONVEX_2D_ALGORITHM_H
-
-#include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "LinearMath/btTransformUtil.h" //for btConvexSeparatingDistanceUtil
-
-class btConvexPenetrationDepthSolver;
-
-///The convex2dConvex2dAlgorithm collision algorithm support 2d collision detection for btConvex2dShape
-///Currently it requires the btMinkowskiPenetrationDepthSolver, it has support for 2d penetration depth computation
-class btConvex2dConvex2dAlgorithm : public btActivatingCollisionAlgorithm
-{
- btSimplexSolverInterface* m_simplexSolver;
- btConvexPenetrationDepthSolver* m_pdSolver;
-
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
- bool m_lowLevelOfDetail;
-
-public:
- btConvex2dConvex2dAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold);
-
- virtual ~btConvex2dConvex2dAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- ///should we use m_ownManifold to avoid adding duplicates?
- if (m_manifoldPtr && m_ownManifold)
- manifoldArray.push_back(m_manifoldPtr);
- }
-
- void setLowLevelOfDetail(bool useLowLevel);
-
- const btPersistentManifold* getManifold()
- {
- return m_manifoldPtr;
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- btConvexPenetrationDepthSolver* m_pdSolver;
- btSimplexSolverInterface* m_simplexSolver;
- int m_numPerturbationIterations;
- int m_minimumPointsPerturbationThreshold;
-
- CreateFunc(btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* pdSolver);
-
- virtual ~CreateFunc();
-
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvex2dConvex2dAlgorithm));
- return new (mem) btConvex2dConvex2dAlgorithm(ci.m_manifold, ci, body0Wrap, body1Wrap, m_simplexSolver, m_pdSolver, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold);
- }
- };
-};
-
-#endif //BT_CONVEX_2D_CONVEX_2D_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp
deleted file mode 100644
index e50f85e2bb..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvexConcaveCollisionAlgorithm.h"
-#include "LinearMath/btQuickprof.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionShapes/btConcaveShape.h"
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-#include "BulletCollision/CollisionShapes/btSdfCollisionShape.h"
-
-btConvexConcaveCollisionAlgorithm::btConvexConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_btConvexTriangleCallback(ci.m_dispatcher1, body0Wrap, body1Wrap, isSwapped),
- m_isSwapped(isSwapped)
-{
-}
-
-btConvexConcaveCollisionAlgorithm::~btConvexConcaveCollisionAlgorithm()
-{
-}
-
-void btConvexConcaveCollisionAlgorithm::getAllContactManifolds(btManifoldArray& manifoldArray)
-{
- if (m_btConvexTriangleCallback.m_manifoldPtr)
- {
- manifoldArray.push_back(m_btConvexTriangleCallback.m_manifoldPtr);
- }
-}
-
-btConvexTriangleCallback::btConvexTriangleCallback(btDispatcher* dispatcher, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped) : m_dispatcher(dispatcher),
- m_dispatchInfoPtr(0)
-{
- m_convexBodyWrap = isSwapped ? body1Wrap : body0Wrap;
- m_triBodyWrap = isSwapped ? body0Wrap : body1Wrap;
-
- //
- // create the manifold from the dispatcher 'manifold pool'
- //
- m_manifoldPtr = m_dispatcher->getNewManifold(m_convexBodyWrap->getCollisionObject(), m_triBodyWrap->getCollisionObject());
-
- clearCache();
-}
-
-btConvexTriangleCallback::~btConvexTriangleCallback()
-{
- clearCache();
- m_dispatcher->releaseManifold(m_manifoldPtr);
-}
-
-void btConvexTriangleCallback::clearCache()
-{
- m_dispatcher->clearManifold(m_manifoldPtr);
-}
-
-void btConvexTriangleCallback::processTriangle(btVector3* triangle, int partId, int triangleIndex)
-{
- BT_PROFILE("btConvexTriangleCallback::processTriangle");
-
- if (!TestTriangleAgainstAabb2(triangle, m_aabbMin, m_aabbMax))
- {
- return;
- }
-
- //just for debugging purposes
- //printf("triangle %d",m_triangleCount++);
-
- btCollisionAlgorithmConstructionInfo ci;
- ci.m_dispatcher1 = m_dispatcher;
-
-#if 0
-
- ///debug drawing of the overlapping triangles
- if (m_dispatchInfoPtr && m_dispatchInfoPtr->m_debugDraw && (m_dispatchInfoPtr->m_debugDraw->getDebugMode() &btIDebugDraw::DBG_DrawWireframe ))
- {
- const btCollisionObject* ob = const_cast<btCollisionObject*>(m_triBodyWrap->getCollisionObject());
- btVector3 color(1,1,0);
- btTransform& tr = ob->getWorldTransform();
- m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[0]),tr(triangle[1]),color);
- m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[1]),tr(triangle[2]),color);
- m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[2]),tr(triangle[0]),color);
- }
-#endif
-
- if (m_convexBodyWrap->getCollisionShape()->isConvex())
- {
- btTriangleShape tm(triangle[0], triangle[1], triangle[2]);
- tm.setMargin(m_collisionMarginTriangle);
-
- btCollisionObjectWrapper triObWrap(m_triBodyWrap, &tm, m_triBodyWrap->getCollisionObject(), m_triBodyWrap->getWorldTransform(), partId, triangleIndex); //correct transform?
- btCollisionAlgorithm* colAlgo = 0;
-
- if (m_resultOut->m_closestPointDistanceThreshold > 0)
- {
- colAlgo = ci.m_dispatcher1->findAlgorithm(m_convexBodyWrap, &triObWrap, 0, BT_CLOSEST_POINT_ALGORITHMS);
- }
- else
- {
- colAlgo = ci.m_dispatcher1->findAlgorithm(m_convexBodyWrap, &triObWrap, m_manifoldPtr, BT_CONTACT_POINT_ALGORITHMS);
- }
- const btCollisionObjectWrapper* tmpWrap = 0;
-
- if (m_resultOut->getBody0Internal() == m_triBodyWrap->getCollisionObject())
- {
- tmpWrap = m_resultOut->getBody0Wrap();
- m_resultOut->setBody0Wrap(&triObWrap);
- m_resultOut->setShapeIdentifiersA(partId, triangleIndex);
- }
- else
- {
- tmpWrap = m_resultOut->getBody1Wrap();
- m_resultOut->setBody1Wrap(&triObWrap);
- m_resultOut->setShapeIdentifiersB(partId, triangleIndex);
- }
-
- colAlgo->processCollision(m_convexBodyWrap, &triObWrap, *m_dispatchInfoPtr, m_resultOut);
-
- if (m_resultOut->getBody0Internal() == m_triBodyWrap->getCollisionObject())
- {
- m_resultOut->setBody0Wrap(tmpWrap);
- }
- else
- {
- m_resultOut->setBody1Wrap(tmpWrap);
- }
-
- colAlgo->~btCollisionAlgorithm();
- ci.m_dispatcher1->freeCollisionAlgorithm(colAlgo);
- }
-}
-
-void btConvexTriangleCallback::setTimeStepAndCounters(btScalar collisionMarginTriangle, const btDispatcherInfo& dispatchInfo, const btCollisionObjectWrapper* convexBodyWrap, const btCollisionObjectWrapper* triBodyWrap, btManifoldResult* resultOut)
-{
- m_convexBodyWrap = convexBodyWrap;
- m_triBodyWrap = triBodyWrap;
-
- m_dispatchInfoPtr = &dispatchInfo;
- m_collisionMarginTriangle = collisionMarginTriangle;
- m_resultOut = resultOut;
-
- //recalc aabbs
- btTransform convexInTriangleSpace;
- convexInTriangleSpace = m_triBodyWrap->getWorldTransform().inverse() * m_convexBodyWrap->getWorldTransform();
- const btCollisionShape* convexShape = static_cast<const btCollisionShape*>(m_convexBodyWrap->getCollisionShape());
- //CollisionShape* triangleShape = static_cast<btCollisionShape*>(triBody->m_collisionShape);
- convexShape->getAabb(convexInTriangleSpace, m_aabbMin, m_aabbMax);
- btScalar extraMargin = collisionMarginTriangle + resultOut->m_closestPointDistanceThreshold;
-
- btVector3 extra(extraMargin, extraMargin, extraMargin);
-
- m_aabbMax += extra;
- m_aabbMin -= extra;
-}
-
-void btConvexConcaveCollisionAlgorithm::clearCache()
-{
- m_btConvexTriangleCallback.clearCache();
-}
-
-void btConvexConcaveCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- BT_PROFILE("btConvexConcaveCollisionAlgorithm::processCollision");
-
- const btCollisionObjectWrapper* convexBodyWrap = m_isSwapped ? body1Wrap : body0Wrap;
- const btCollisionObjectWrapper* triBodyWrap = m_isSwapped ? body0Wrap : body1Wrap;
-
- if (triBodyWrap->getCollisionShape()->isConcave())
- {
- if (triBodyWrap->getCollisionShape()->getShapeType() == SDF_SHAPE_PROXYTYPE)
- {
- btSdfCollisionShape* sdfShape = (btSdfCollisionShape*)triBodyWrap->getCollisionShape();
- if (convexBodyWrap->getCollisionShape()->isConvex())
- {
- btConvexShape* convex = (btConvexShape*)convexBodyWrap->getCollisionShape();
- btAlignedObjectArray<btVector3> queryVertices;
-
- if (convex->isPolyhedral())
- {
- btPolyhedralConvexShape* poly = (btPolyhedralConvexShape*)convex;
- for (int v = 0; v < poly->getNumVertices(); v++)
- {
- btVector3 vtx;
- poly->getVertex(v, vtx);
- queryVertices.push_back(vtx);
- }
- }
- btScalar maxDist = SIMD_EPSILON;
-
- if (convex->getShapeType() == SPHERE_SHAPE_PROXYTYPE)
- {
- queryVertices.push_back(btVector3(0, 0, 0));
- btSphereShape* sphere = (btSphereShape*)convex;
- maxDist = sphere->getRadius() + SIMD_EPSILON;
- }
- if (queryVertices.size())
- {
- resultOut->setPersistentManifold(m_btConvexTriangleCallback.m_manifoldPtr);
- //m_btConvexTriangleCallback.m_manifoldPtr->clearManifold();
-
- btPolyhedralConvexShape* poly = (btPolyhedralConvexShape*)convex;
- for (int v = 0; v < queryVertices.size(); v++)
- {
- const btVector3& vtx = queryVertices[v];
- btVector3 vtxWorldSpace = convexBodyWrap->getWorldTransform() * vtx;
- btVector3 vtxInSdf = triBodyWrap->getWorldTransform().invXform(vtxWorldSpace);
-
- btVector3 normalLocal;
- btScalar dist;
- if (sdfShape->queryPoint(vtxInSdf, dist, normalLocal))
- {
- if (dist <= maxDist)
- {
- normalLocal.safeNormalize();
- btVector3 normal = triBodyWrap->getWorldTransform().getBasis() * normalLocal;
-
- if (convex->getShapeType() == SPHERE_SHAPE_PROXYTYPE)
- {
- btSphereShape* sphere = (btSphereShape*)convex;
- dist -= sphere->getRadius();
- vtxWorldSpace -= sphere->getRadius() * normal;
- }
- resultOut->addContactPoint(normal, vtxWorldSpace - normal * dist, dist);
- }
- }
- }
- resultOut->refreshContactPoints();
- }
- }
- }
- else
- {
- const btConcaveShape* concaveShape = static_cast<const btConcaveShape*>(triBodyWrap->getCollisionShape());
-
- if (convexBodyWrap->getCollisionShape()->isConvex())
- {
- btScalar collisionMarginTriangle = concaveShape->getMargin();
-
- resultOut->setPersistentManifold(m_btConvexTriangleCallback.m_manifoldPtr);
- m_btConvexTriangleCallback.setTimeStepAndCounters(collisionMarginTriangle, dispatchInfo, convexBodyWrap, triBodyWrap, resultOut);
-
- m_btConvexTriangleCallback.m_manifoldPtr->setBodies(convexBodyWrap->getCollisionObject(), triBodyWrap->getCollisionObject());
-
- concaveShape->processAllTriangles(&m_btConvexTriangleCallback, m_btConvexTriangleCallback.getAabbMin(), m_btConvexTriangleCallback.getAabbMax());
-
- resultOut->refreshContactPoints();
-
- m_btConvexTriangleCallback.clearWrapperData();
- }
- }
- }
-}
-
-btScalar btConvexConcaveCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- btCollisionObject* convexbody = m_isSwapped ? body1 : body0;
- btCollisionObject* triBody = m_isSwapped ? body0 : body1;
-
- //quick approximation using raycast, todo: hook up to the continuous collision detection (one of the btConvexCast)
-
- //only perform CCD above a certain threshold, this prevents blocking on the long run
- //because object in a blocked ccd state (hitfraction<1) get their linear velocity halved each frame...
- btScalar squareMot0 = (convexbody->getInterpolationWorldTransform().getOrigin() - convexbody->getWorldTransform().getOrigin()).length2();
- if (squareMot0 < convexbody->getCcdSquareMotionThreshold())
- {
- return btScalar(1.);
- }
-
- //const btVector3& from = convexbody->m_worldTransform.getOrigin();
- //btVector3 to = convexbody->m_interpolationWorldTransform.getOrigin();
- //todo: only do if the motion exceeds the 'radius'
-
- btTransform triInv = triBody->getWorldTransform().inverse();
- btTransform convexFromLocal = triInv * convexbody->getWorldTransform();
- btTransform convexToLocal = triInv * convexbody->getInterpolationWorldTransform();
-
- struct LocalTriangleSphereCastCallback : public btTriangleCallback
- {
- btTransform m_ccdSphereFromTrans;
- btTransform m_ccdSphereToTrans;
- btTransform m_meshTransform;
-
- btScalar m_ccdSphereRadius;
- btScalar m_hitFraction;
-
- LocalTriangleSphereCastCallback(const btTransform& from, const btTransform& to, btScalar ccdSphereRadius, btScalar hitFraction)
- : m_ccdSphereFromTrans(from),
- m_ccdSphereToTrans(to),
- m_ccdSphereRadius(ccdSphereRadius),
- m_hitFraction(hitFraction)
- {
- }
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- BT_PROFILE("processTriangle");
- (void)partId;
- (void)triangleIndex;
- //do a swept sphere for now
- btTransform ident;
- ident.setIdentity();
- btConvexCast::CastResult castResult;
- castResult.m_fraction = m_hitFraction;
- btSphereShape pointShape(m_ccdSphereRadius);
- btTriangleShape triShape(triangle[0], triangle[1], triangle[2]);
- btVoronoiSimplexSolver simplexSolver;
- btSubsimplexConvexCast convexCaster(&pointShape, &triShape, &simplexSolver);
- //GjkConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
- //ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
- //local space?
-
- if (convexCaster.calcTimeOfImpact(m_ccdSphereFromTrans, m_ccdSphereToTrans,
- ident, ident, castResult))
- {
- if (m_hitFraction > castResult.m_fraction)
- m_hitFraction = castResult.m_fraction;
- }
- }
- };
-
- if (triBody->getCollisionShape()->isConcave())
- {
- btVector3 rayAabbMin = convexFromLocal.getOrigin();
- rayAabbMin.setMin(convexToLocal.getOrigin());
- btVector3 rayAabbMax = convexFromLocal.getOrigin();
- rayAabbMax.setMax(convexToLocal.getOrigin());
- btScalar ccdRadius0 = convexbody->getCcdSweptSphereRadius();
- rayAabbMin -= btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
- rayAabbMax += btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
-
- btScalar curHitFraction = btScalar(1.); //is this available?
- LocalTriangleSphereCastCallback raycastCallback(convexFromLocal, convexToLocal,
- convexbody->getCcdSweptSphereRadius(), curHitFraction);
-
- raycastCallback.m_hitFraction = convexbody->getHitFraction();
-
- btCollisionObject* concavebody = triBody;
-
- btConcaveShape* triangleMesh = (btConcaveShape*)concavebody->getCollisionShape();
-
- if (triangleMesh)
- {
- triangleMesh->processAllTriangles(&raycastCallback, rayAabbMin, rayAabbMax);
- }
-
- if (raycastCallback.m_hitFraction < convexbody->getHitFraction())
- {
- convexbody->setHitFraction(raycastCallback.m_hitFraction);
- return raycastCallback.m_hitFraction;
- }
- }
-
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h
deleted file mode 100644
index b72e402981..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H
-#define BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/CollisionShapes/btTriangleCallback.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-class btDispatcher;
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "btCollisionCreateFunc.h"
-
-///For each triangle in the concave mesh that overlaps with the AABB of a convex (m_convexProxy), processTriangle is called.
-ATTRIBUTE_ALIGNED16(class)
-btConvexTriangleCallback : public btTriangleCallback
-{
- btVector3 m_aabbMin;
- btVector3 m_aabbMax;
-
- const btCollisionObjectWrapper* m_convexBodyWrap;
- const btCollisionObjectWrapper* m_triBodyWrap;
-
- btManifoldResult* m_resultOut;
- btDispatcher* m_dispatcher;
- const btDispatcherInfo* m_dispatchInfoPtr;
- btScalar m_collisionMarginTriangle;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_triangleCount;
-
- btPersistentManifold* m_manifoldPtr;
-
- btConvexTriangleCallback(btDispatcher * dispatcher, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btDispatcherInfo& dispatchInfo, const btCollisionObjectWrapper* convexBodyWrap, const btCollisionObjectWrapper* triBodyWrap, btManifoldResult* resultOut);
-
- void clearWrapperData()
- {
- m_convexBodyWrap = 0;
- m_triBodyWrap = 0;
- }
- virtual ~btConvexTriangleCallback();
-
- virtual void processTriangle(btVector3 * triangle, int partId, int triangleIndex);
-
- void clearCache();
-
- SIMD_FORCE_INLINE const btVector3& getAabbMin() const
- {
- return m_aabbMin;
- }
- SIMD_FORCE_INLINE const btVector3& getAabbMax() const
- {
- return m_aabbMax;
- }
-};
-
-/// btConvexConcaveCollisionAlgorithm supports collision between convex shapes and (concave) trianges meshes.
-ATTRIBUTE_ALIGNED16(class)
-btConvexConcaveCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- btConvexTriangleCallback m_btConvexTriangleCallback;
-
- bool m_isSwapped;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConvexConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- virtual ~btConvexConcaveCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btScalar calculateTimeOfImpact(btCollisionObject * body0, btCollisionObject * body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray & manifoldArray);
-
- void clearCache();
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConcaveCollisionAlgorithm));
- return new (mem) btConvexConcaveCollisionAlgorithm(ci, body0Wrap, body1Wrap, false);
- }
- };
-
- struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConcaveCollisionAlgorithm));
- return new (mem) btConvexConcaveCollisionAlgorithm(ci, body0Wrap, body1Wrap, true);
- }
- };
-};
-
-#endif //BT_CONVEX_CONCAVE_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp
deleted file mode 100644
index b48d97f2b2..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp
+++ /dev/null
@@ -1,873 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///Specialized capsule-capsule collision algorithm has been added for Bullet 2.75 release to increase ragdoll performance
-///If you experience problems with capsule-capsule collision, try to define BT_DISABLE_CAPSULE_CAPSULE_COLLIDER and report it in the Bullet forums
-///with reproduction case
-//#define BT_DISABLE_CAPSULE_CAPSULE_COLLIDER 1
-//#define ZERO_MARGIN
-
-#include "btConvexConvexAlgorithm.h"
-
-//#include <stdio.h>
-#include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/CollisionShapes/btCapsuleShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/CollisionShapes/btConvexPolyhedron.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-///////////
-
-static SIMD_FORCE_INLINE void segmentsClosestPoints(
- btVector3& ptsVector,
- btVector3& offsetA,
- btVector3& offsetB,
- btScalar& tA, btScalar& tB,
- const btVector3& translation,
- const btVector3& dirA, btScalar hlenA,
- const btVector3& dirB, btScalar hlenB)
-{
- // compute the parameters of the closest points on each line segment
-
- btScalar dirA_dot_dirB = btDot(dirA, dirB);
- btScalar dirA_dot_trans = btDot(dirA, translation);
- btScalar dirB_dot_trans = btDot(dirB, translation);
-
- btScalar denom = 1.0f - dirA_dot_dirB * dirA_dot_dirB;
-
- if (denom == 0.0f)
- {
- tA = 0.0f;
- }
- else
- {
- tA = (dirA_dot_trans - dirB_dot_trans * dirA_dot_dirB) / denom;
- if (tA < -hlenA)
- tA = -hlenA;
- else if (tA > hlenA)
- tA = hlenA;
- }
-
- tB = tA * dirA_dot_dirB - dirB_dot_trans;
-
- if (tB < -hlenB)
- {
- tB = -hlenB;
- tA = tB * dirA_dot_dirB + dirA_dot_trans;
-
- if (tA < -hlenA)
- tA = -hlenA;
- else if (tA > hlenA)
- tA = hlenA;
- }
- else if (tB > hlenB)
- {
- tB = hlenB;
- tA = tB * dirA_dot_dirB + dirA_dot_trans;
-
- if (tA < -hlenA)
- tA = -hlenA;
- else if (tA > hlenA)
- tA = hlenA;
- }
-
- // compute the closest points relative to segment centers.
-
- offsetA = dirA * tA;
- offsetB = dirB * tB;
-
- ptsVector = translation - offsetA + offsetB;
-}
-
-static SIMD_FORCE_INLINE btScalar capsuleCapsuleDistance(
- btVector3& normalOnB,
- btVector3& pointOnB,
- btScalar capsuleLengthA,
- btScalar capsuleRadiusA,
- btScalar capsuleLengthB,
- btScalar capsuleRadiusB,
- int capsuleAxisA,
- int capsuleAxisB,
- const btTransform& transformA,
- const btTransform& transformB,
- btScalar distanceThreshold)
-{
- btVector3 directionA = transformA.getBasis().getColumn(capsuleAxisA);
- btVector3 translationA = transformA.getOrigin();
- btVector3 directionB = transformB.getBasis().getColumn(capsuleAxisB);
- btVector3 translationB = transformB.getOrigin();
-
- // translation between centers
-
- btVector3 translation = translationB - translationA;
-
- // compute the closest points of the capsule line segments
-
- btVector3 ptsVector; // the vector between the closest points
-
- btVector3 offsetA, offsetB; // offsets from segment centers to their closest points
- btScalar tA, tB; // parameters on line segment
-
- segmentsClosestPoints(ptsVector, offsetA, offsetB, tA, tB, translation,
- directionA, capsuleLengthA, directionB, capsuleLengthB);
-
- btScalar distance = ptsVector.length() - capsuleRadiusA - capsuleRadiusB;
-
- if (distance > distanceThreshold)
- return distance;
-
- btScalar lenSqr = ptsVector.length2();
- if (lenSqr <= (SIMD_EPSILON * SIMD_EPSILON))
- {
- //degenerate case where 2 capsules are likely at the same location: take a vector tangential to 'directionA'
- btVector3 q;
- btPlaneSpace1(directionA, normalOnB, q);
- }
- else
- {
- // compute the contact normal
- normalOnB = ptsVector * -btRecipSqrt(lenSqr);
- }
- pointOnB = transformB.getOrigin() + offsetB + normalOnB * capsuleRadiusB;
-
- return distance;
-}
-
-//////////
-
-btConvexConvexAlgorithm::CreateFunc::CreateFunc(btConvexPenetrationDepthSolver* pdSolver)
-{
- m_numPerturbationIterations = 0;
- m_minimumPointsPerturbationThreshold = 3;
- m_pdSolver = pdSolver;
-}
-
-btConvexConvexAlgorithm::CreateFunc::~CreateFunc()
-{
-}
-
-btConvexConvexAlgorithm::btConvexConvexAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btConvexPenetrationDepthSolver* pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_pdSolver(pdSolver),
- m_ownManifold(false),
- m_manifoldPtr(mf),
- m_lowLevelOfDetail(false),
-#ifdef USE_SEPDISTANCE_UTIL2
- m_sepDistance((static_cast<btConvexShape*>(body0->getCollisionShape()))->getAngularMotionDisc(),
- (static_cast<btConvexShape*>(body1->getCollisionShape()))->getAngularMotionDisc()),
-#endif
- m_numPerturbationIterations(numPerturbationIterations),
- m_minimumPointsPerturbationThreshold(minimumPointsPerturbationThreshold)
-{
- (void)body0Wrap;
- (void)body1Wrap;
-}
-
-btConvexConvexAlgorithm::~btConvexConvexAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btConvexConvexAlgorithm ::setLowLevelOfDetail(bool useLowLevel)
-{
- m_lowLevelOfDetail = useLowLevel;
-}
-
-struct btPerturbedContactResult : public btManifoldResult
-{
- btManifoldResult* m_originalManifoldResult;
- btTransform m_transformA;
- btTransform m_transformB;
- btTransform m_unPerturbedTransform;
- bool m_perturbA;
- btIDebugDraw* m_debugDrawer;
-
- btPerturbedContactResult(btManifoldResult* originalResult, const btTransform& transformA, const btTransform& transformB, const btTransform& unPerturbedTransform, bool perturbA, btIDebugDraw* debugDrawer)
- : m_originalManifoldResult(originalResult),
- m_transformA(transformA),
- m_transformB(transformB),
- m_unPerturbedTransform(unPerturbedTransform),
- m_perturbA(perturbA),
- m_debugDrawer(debugDrawer)
- {
- }
- virtual ~btPerturbedContactResult()
- {
- }
-
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar orgDepth)
- {
- btVector3 endPt, startPt;
- btScalar newDepth;
- btVector3 newNormal;
-
- if (m_perturbA)
- {
- btVector3 endPtOrg = pointInWorld + normalOnBInWorld * orgDepth;
- endPt = (m_unPerturbedTransform * m_transformA.inverse())(endPtOrg);
- newDepth = (endPt - pointInWorld).dot(normalOnBInWorld);
- startPt = endPt - normalOnBInWorld * newDepth;
- }
- else
- {
- endPt = pointInWorld + normalOnBInWorld * orgDepth;
- startPt = (m_unPerturbedTransform * m_transformB.inverse())(pointInWorld);
- newDepth = (endPt - startPt).dot(normalOnBInWorld);
- }
-
-//#define DEBUG_CONTACTS 1
-#ifdef DEBUG_CONTACTS
- m_debugDrawer->drawLine(startPt, endPt, btVector3(1, 0, 0));
- m_debugDrawer->drawSphere(startPt, 0.05, btVector3(0, 1, 0));
- m_debugDrawer->drawSphere(endPt, 0.05, btVector3(0, 0, 1));
-#endif //DEBUG_CONTACTS
-
- m_originalManifoldResult->addContactPoint(normalOnBInWorld, startPt, newDepth);
- }
-};
-
-extern btScalar gContactBreakingThreshold;
-
-//
-// Convex-Convex collision algorithm
-//
-void btConvexConvexAlgorithm ::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- if (!m_manifoldPtr)
- {
- //swapped?
- m_manifoldPtr = m_dispatcher->getNewManifold(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject());
- m_ownManifold = true;
- }
- resultOut->setPersistentManifold(m_manifoldPtr);
-
- //comment-out next line to test multi-contact generation
- //resultOut->getPersistentManifold()->clearManifold();
-
- const btConvexShape* min0 = static_cast<const btConvexShape*>(body0Wrap->getCollisionShape());
- const btConvexShape* min1 = static_cast<const btConvexShape*>(body1Wrap->getCollisionShape());
-
- btVector3 normalOnB;
- btVector3 pointOnBWorld;
-#ifndef BT_DISABLE_CAPSULE_CAPSULE_COLLIDER
- if ((min0->getShapeType() == CAPSULE_SHAPE_PROXYTYPE) && (min1->getShapeType() == CAPSULE_SHAPE_PROXYTYPE))
- {
- //m_manifoldPtr->clearManifold();
-
- btCapsuleShape* capsuleA = (btCapsuleShape*)min0;
- btCapsuleShape* capsuleB = (btCapsuleShape*)min1;
-
- btScalar threshold = m_manifoldPtr->getContactBreakingThreshold()+ resultOut->m_closestPointDistanceThreshold;
-
- btScalar dist = capsuleCapsuleDistance(normalOnB, pointOnBWorld, capsuleA->getHalfHeight(), capsuleA->getRadius(),
- capsuleB->getHalfHeight(), capsuleB->getRadius(), capsuleA->getUpAxis(), capsuleB->getUpAxis(),
- body0Wrap->getWorldTransform(), body1Wrap->getWorldTransform(), threshold);
-
- if (dist < threshold)
- {
- btAssert(normalOnB.length2() >= (SIMD_EPSILON * SIMD_EPSILON));
- resultOut->addContactPoint(normalOnB, pointOnBWorld, dist);
- }
- resultOut->refreshContactPoints();
- return;
- }
-
- if ((min0->getShapeType() == CAPSULE_SHAPE_PROXYTYPE) && (min1->getShapeType() == SPHERE_SHAPE_PROXYTYPE))
- {
- //m_manifoldPtr->clearManifold();
-
- btCapsuleShape* capsuleA = (btCapsuleShape*)min0;
- btSphereShape* capsuleB = (btSphereShape*)min1;
-
- btScalar threshold = m_manifoldPtr->getContactBreakingThreshold()+ resultOut->m_closestPointDistanceThreshold;
-
- btScalar dist = capsuleCapsuleDistance(normalOnB, pointOnBWorld, capsuleA->getHalfHeight(), capsuleA->getRadius(),
- 0., capsuleB->getRadius(), capsuleA->getUpAxis(), 1,
- body0Wrap->getWorldTransform(), body1Wrap->getWorldTransform(), threshold);
-
- if (dist < threshold)
- {
- btAssert(normalOnB.length2() >= (SIMD_EPSILON * SIMD_EPSILON));
- resultOut->addContactPoint(normalOnB, pointOnBWorld, dist);
- }
- resultOut->refreshContactPoints();
- return;
- }
-
- if ((min0->getShapeType() == SPHERE_SHAPE_PROXYTYPE) && (min1->getShapeType() == CAPSULE_SHAPE_PROXYTYPE))
- {
- //m_manifoldPtr->clearManifold();
-
- btSphereShape* capsuleA = (btSphereShape*)min0;
- btCapsuleShape* capsuleB = (btCapsuleShape*)min1;
-
- btScalar threshold = m_manifoldPtr->getContactBreakingThreshold()+ resultOut->m_closestPointDistanceThreshold;
-
- btScalar dist = capsuleCapsuleDistance(normalOnB, pointOnBWorld, 0., capsuleA->getRadius(),
- capsuleB->getHalfHeight(), capsuleB->getRadius(), 1, capsuleB->getUpAxis(),
- body0Wrap->getWorldTransform(), body1Wrap->getWorldTransform(), threshold);
-
- if (dist < threshold)
- {
- btAssert(normalOnB.length2() >= (SIMD_EPSILON * SIMD_EPSILON));
- resultOut->addContactPoint(normalOnB, pointOnBWorld, dist);
- }
- resultOut->refreshContactPoints();
- return;
- }
-#endif //BT_DISABLE_CAPSULE_CAPSULE_COLLIDER
-
-#ifdef USE_SEPDISTANCE_UTIL2
- if (dispatchInfo.m_useConvexConservativeDistanceUtil)
- {
- m_sepDistance.updateSeparatingDistance(body0->getWorldTransform(), body1->getWorldTransform());
- }
-
- if (!dispatchInfo.m_useConvexConservativeDistanceUtil || m_sepDistance.getConservativeSeparatingDistance() <= 0.f)
-#endif //USE_SEPDISTANCE_UTIL2
-
- {
- btGjkPairDetector::ClosestPointInput input;
- btVoronoiSimplexSolver simplexSolver;
- btGjkPairDetector gjkPairDetector(min0, min1, &simplexSolver, m_pdSolver);
- //TODO: if (dispatchInfo.m_useContinuous)
- gjkPairDetector.setMinkowskiA(min0);
- gjkPairDetector.setMinkowskiB(min1);
-
-#ifdef USE_SEPDISTANCE_UTIL2
- if (dispatchInfo.m_useConvexConservativeDistanceUtil)
- {
- input.m_maximumDistanceSquared = BT_LARGE_FLOAT;
- }
- else
-#endif //USE_SEPDISTANCE_UTIL2
- {
- //if (dispatchInfo.m_convexMaxDistanceUseCPT)
- //{
- // input.m_maximumDistanceSquared = min0->getMargin() + min1->getMargin() + m_manifoldPtr->getContactProcessingThreshold();
- //} else
- //{
- input.m_maximumDistanceSquared = min0->getMargin() + min1->getMargin() + m_manifoldPtr->getContactBreakingThreshold() + resultOut->m_closestPointDistanceThreshold;
- // }
-
- input.m_maximumDistanceSquared *= input.m_maximumDistanceSquared;
- }
-
- input.m_transformA = body0Wrap->getWorldTransform();
- input.m_transformB = body1Wrap->getWorldTransform();
-
-#ifdef USE_SEPDISTANCE_UTIL2
- btScalar sepDist = 0.f;
- if (dispatchInfo.m_useConvexConservativeDistanceUtil)
- {
- sepDist = gjkPairDetector.getCachedSeparatingDistance();
- if (sepDist > SIMD_EPSILON)
- {
- sepDist += dispatchInfo.m_convexConservativeDistanceThreshold;
- //now perturbe directions to get multiple contact points
- }
- }
-#endif //USE_SEPDISTANCE_UTIL2
-
- if (min0->isPolyhedral() && min1->isPolyhedral())
- {
- struct btDummyResult : public btDiscreteCollisionDetectorInterface::Result
- {
- btVector3 m_normalOnBInWorld;
- btVector3 m_pointInWorld;
- btScalar m_depth;
- bool m_hasContact;
-
- btDummyResult()
- : m_hasContact(false)
- {
- }
-
- virtual void setShapeIdentifiersA(int partId0, int index0) {}
- virtual void setShapeIdentifiersB(int partId1, int index1) {}
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth)
- {
- m_hasContact = true;
- m_normalOnBInWorld = normalOnBInWorld;
- m_pointInWorld = pointInWorld;
- m_depth = depth;
- }
- };
-
- struct btWithoutMarginResult : public btDiscreteCollisionDetectorInterface::Result
- {
- btDiscreteCollisionDetectorInterface::Result* m_originalResult;
- btVector3 m_reportedNormalOnWorld;
- btScalar m_marginOnA;
- btScalar m_marginOnB;
- btScalar m_reportedDistance;
-
- bool m_foundResult;
- btWithoutMarginResult(btDiscreteCollisionDetectorInterface::Result* result, btScalar marginOnA, btScalar marginOnB)
- : m_originalResult(result),
- m_marginOnA(marginOnA),
- m_marginOnB(marginOnB),
- m_foundResult(false)
- {
- }
-
- virtual void setShapeIdentifiersA(int partId0, int index0) {}
- virtual void setShapeIdentifiersB(int partId1, int index1) {}
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorldOrg, btScalar depthOrg)
- {
- m_reportedDistance = depthOrg;
- m_reportedNormalOnWorld = normalOnBInWorld;
-
- btVector3 adjustedPointB = pointInWorldOrg - normalOnBInWorld * m_marginOnB;
- m_reportedDistance = depthOrg + (m_marginOnA + m_marginOnB);
- if (m_reportedDistance < 0.f)
- {
- m_foundResult = true;
- }
- m_originalResult->addContactPoint(normalOnBInWorld, adjustedPointB, m_reportedDistance);
- }
- };
-
- btDummyResult dummy;
-
- ///btBoxShape is an exception: its vertices are created WITH margin so don't subtract it
-
- btScalar min0Margin = min0->getShapeType() == BOX_SHAPE_PROXYTYPE ? 0.f : min0->getMargin();
- btScalar min1Margin = min1->getShapeType() == BOX_SHAPE_PROXYTYPE ? 0.f : min1->getMargin();
-
- btWithoutMarginResult withoutMargin(resultOut, min0Margin, min1Margin);
-
- btPolyhedralConvexShape* polyhedronA = (btPolyhedralConvexShape*)min0;
- btPolyhedralConvexShape* polyhedronB = (btPolyhedralConvexShape*)min1;
- if (polyhedronA->getConvexPolyhedron() && polyhedronB->getConvexPolyhedron())
- {
- btScalar threshold = m_manifoldPtr->getContactBreakingThreshold()+ resultOut->m_closestPointDistanceThreshold;
-
- btScalar minDist = -1e30f;
- btVector3 sepNormalWorldSpace;
- bool foundSepAxis = true;
-
- if (dispatchInfo.m_enableSatConvex)
- {
- foundSepAxis = btPolyhedralContactClipping::findSeparatingAxis(
- *polyhedronA->getConvexPolyhedron(), *polyhedronB->getConvexPolyhedron(),
- body0Wrap->getWorldTransform(),
- body1Wrap->getWorldTransform(),
- sepNormalWorldSpace, *resultOut);
- }
- else
- {
-#ifdef ZERO_MARGIN
- gjkPairDetector.setIgnoreMargin(true);
- gjkPairDetector.getClosestPoints(input, *resultOut, dispatchInfo.m_debugDraw);
-#else
-
- gjkPairDetector.getClosestPoints(input, withoutMargin, dispatchInfo.m_debugDraw);
- //gjkPairDetector.getClosestPoints(input,dummy,dispatchInfo.m_debugDraw);
-#endif //ZERO_MARGIN
- //btScalar l2 = gjkPairDetector.getCachedSeparatingAxis().length2();
- //if (l2>SIMD_EPSILON)
- {
- sepNormalWorldSpace = withoutMargin.m_reportedNormalOnWorld; //gjkPairDetector.getCachedSeparatingAxis()*(1.f/l2);
- //minDist = -1e30f;//gjkPairDetector.getCachedSeparatingDistance();
- minDist = withoutMargin.m_reportedDistance; //gjkPairDetector.getCachedSeparatingDistance()+min0->getMargin()+min1->getMargin();
-
-#ifdef ZERO_MARGIN
- foundSepAxis = true; //gjkPairDetector.getCachedSeparatingDistance()<0.f;
-#else
- foundSepAxis = withoutMargin.m_foundResult && minDist < 0; //-(min0->getMargin()+min1->getMargin());
-#endif
- }
- }
- if (foundSepAxis)
- {
- // printf("sepNormalWorldSpace=%f,%f,%f\n",sepNormalWorldSpace.getX(),sepNormalWorldSpace.getY(),sepNormalWorldSpace.getZ());
-
- worldVertsB1.resize(0);
- btPolyhedralContactClipping::clipHullAgainstHull(sepNormalWorldSpace, *polyhedronA->getConvexPolyhedron(), *polyhedronB->getConvexPolyhedron(),
- body0Wrap->getWorldTransform(),
- body1Wrap->getWorldTransform(), minDist - threshold, threshold, worldVertsB1, worldVertsB2,
- *resultOut);
- }
- if (m_ownManifold)
- {
- resultOut->refreshContactPoints();
- }
- return;
- }
- else
- {
- //we can also deal with convex versus triangle (without connectivity data)
- if (dispatchInfo.m_enableSatConvex && polyhedronA->getConvexPolyhedron() && polyhedronB->getShapeType() == TRIANGLE_SHAPE_PROXYTYPE)
- {
- btVertexArray worldSpaceVertices;
- btTriangleShape* tri = (btTriangleShape*)polyhedronB;
- worldSpaceVertices.push_back(body1Wrap->getWorldTransform() * tri->m_vertices1[0]);
- worldSpaceVertices.push_back(body1Wrap->getWorldTransform() * tri->m_vertices1[1]);
- worldSpaceVertices.push_back(body1Wrap->getWorldTransform() * tri->m_vertices1[2]);
-
- //tri->initializePolyhedralFeatures();
-
- btScalar threshold = m_manifoldPtr->getContactBreakingThreshold()+ resultOut->m_closestPointDistanceThreshold;
-
- btVector3 sepNormalWorldSpace;
- btScalar minDist = -1e30f;
- btScalar maxDist = threshold;
-
- bool foundSepAxis = false;
- bool useSatSepNormal = true;
-
- if (useSatSepNormal)
- {
-#if 0
- if (0)
- {
- //initializePolyhedralFeatures performs a convex hull computation, not needed for a single triangle
- polyhedronB->initializePolyhedralFeatures();
- } else
-#endif
- {
- btVector3 uniqueEdges[3] = {tri->m_vertices1[1] - tri->m_vertices1[0],
- tri->m_vertices1[2] - tri->m_vertices1[1],
- tri->m_vertices1[0] - tri->m_vertices1[2]};
-
- uniqueEdges[0].normalize();
- uniqueEdges[1].normalize();
- uniqueEdges[2].normalize();
-
- btConvexPolyhedron polyhedron;
- polyhedron.m_vertices.push_back(tri->m_vertices1[2]);
- polyhedron.m_vertices.push_back(tri->m_vertices1[0]);
- polyhedron.m_vertices.push_back(tri->m_vertices1[1]);
-
- {
- btFace combinedFaceA;
- combinedFaceA.m_indices.push_back(0);
- combinedFaceA.m_indices.push_back(1);
- combinedFaceA.m_indices.push_back(2);
- btVector3 faceNormal = uniqueEdges[0].cross(uniqueEdges[1]);
- faceNormal.normalize();
- btScalar planeEq = 1e30f;
- for (int v = 0; v < combinedFaceA.m_indices.size(); v++)
- {
- btScalar eq = tri->m_vertices1[combinedFaceA.m_indices[v]].dot(faceNormal);
- if (planeEq > eq)
- {
- planeEq = eq;
- }
- }
- combinedFaceA.m_plane[0] = faceNormal[0];
- combinedFaceA.m_plane[1] = faceNormal[1];
- combinedFaceA.m_plane[2] = faceNormal[2];
- combinedFaceA.m_plane[3] = -planeEq;
- polyhedron.m_faces.push_back(combinedFaceA);
- }
- {
- btFace combinedFaceB;
- combinedFaceB.m_indices.push_back(0);
- combinedFaceB.m_indices.push_back(2);
- combinedFaceB.m_indices.push_back(1);
- btVector3 faceNormal = -uniqueEdges[0].cross(uniqueEdges[1]);
- faceNormal.normalize();
- btScalar planeEq = 1e30f;
- for (int v = 0; v < combinedFaceB.m_indices.size(); v++)
- {
- btScalar eq = tri->m_vertices1[combinedFaceB.m_indices[v]].dot(faceNormal);
- if (planeEq > eq)
- {
- planeEq = eq;
- }
- }
-
- combinedFaceB.m_plane[0] = faceNormal[0];
- combinedFaceB.m_plane[1] = faceNormal[1];
- combinedFaceB.m_plane[2] = faceNormal[2];
- combinedFaceB.m_plane[3] = -planeEq;
- polyhedron.m_faces.push_back(combinedFaceB);
- }
-
- polyhedron.m_uniqueEdges.push_back(uniqueEdges[0]);
- polyhedron.m_uniqueEdges.push_back(uniqueEdges[1]);
- polyhedron.m_uniqueEdges.push_back(uniqueEdges[2]);
- polyhedron.initialize2();
-
- polyhedronB->setPolyhedralFeatures(polyhedron);
- }
-
- foundSepAxis = btPolyhedralContactClipping::findSeparatingAxis(
- *polyhedronA->getConvexPolyhedron(), *polyhedronB->getConvexPolyhedron(),
- body0Wrap->getWorldTransform(),
- body1Wrap->getWorldTransform(),
- sepNormalWorldSpace, *resultOut);
- // printf("sepNormalWorldSpace=%f,%f,%f\n",sepNormalWorldSpace.getX(),sepNormalWorldSpace.getY(),sepNormalWorldSpace.getZ());
- }
- else
- {
-#ifdef ZERO_MARGIN
- gjkPairDetector.setIgnoreMargin(true);
- gjkPairDetector.getClosestPoints(input, *resultOut, dispatchInfo.m_debugDraw);
-#else
- gjkPairDetector.getClosestPoints(input, dummy, dispatchInfo.m_debugDraw);
-#endif //ZERO_MARGIN
-
- if (dummy.m_hasContact && dummy.m_depth < 0)
- {
- if (foundSepAxis)
- {
- if (dummy.m_normalOnBInWorld.dot(sepNormalWorldSpace) < 0.99)
- {
- printf("?\n");
- }
- }
- else
- {
- printf("!\n");
- }
- sepNormalWorldSpace.setValue(0, 0, 1); // = dummy.m_normalOnBInWorld;
- //minDist = dummy.m_depth;
- foundSepAxis = true;
- }
-#if 0
- btScalar l2 = gjkPairDetector.getCachedSeparatingAxis().length2();
- if (l2>SIMD_EPSILON)
- {
- sepNormalWorldSpace = gjkPairDetector.getCachedSeparatingAxis()*(1.f/l2);
- //minDist = gjkPairDetector.getCachedSeparatingDistance();
- //maxDist = threshold;
- minDist = gjkPairDetector.getCachedSeparatingDistance()-min0->getMargin()-min1->getMargin();
- foundSepAxis = true;
- }
-#endif
- }
-
- if (foundSepAxis)
- {
- worldVertsB2.resize(0);
- btPolyhedralContactClipping::clipFaceAgainstHull(sepNormalWorldSpace, *polyhedronA->getConvexPolyhedron(),
- body0Wrap->getWorldTransform(), worldSpaceVertices, worldVertsB2, minDist - threshold, maxDist, *resultOut);
- }
-
- if (m_ownManifold)
- {
- resultOut->refreshContactPoints();
- }
-
- return;
- }
- }
- }
-
- gjkPairDetector.getClosestPoints(input, *resultOut, dispatchInfo.m_debugDraw);
-
- //now perform 'm_numPerturbationIterations' collision queries with the perturbated collision objects
-
- //perform perturbation when more then 'm_minimumPointsPerturbationThreshold' points
- if (m_numPerturbationIterations && resultOut->getPersistentManifold()->getNumContacts() < m_minimumPointsPerturbationThreshold)
- {
- int i;
- btVector3 v0, v1;
- btVector3 sepNormalWorldSpace;
- btScalar l2 = gjkPairDetector.getCachedSeparatingAxis().length2();
-
- if (l2 > SIMD_EPSILON)
- {
- sepNormalWorldSpace = gjkPairDetector.getCachedSeparatingAxis() * (1.f / l2);
-
- btPlaneSpace1(sepNormalWorldSpace, v0, v1);
-
- bool perturbeA = true;
- const btScalar angleLimit = 0.125f * SIMD_PI;
- btScalar perturbeAngle;
- btScalar radiusA = min0->getAngularMotionDisc();
- btScalar radiusB = min1->getAngularMotionDisc();
- if (radiusA < radiusB)
- {
- perturbeAngle = gContactBreakingThreshold / radiusA;
- perturbeA = true;
- }
- else
- {
- perturbeAngle = gContactBreakingThreshold / radiusB;
- perturbeA = false;
- }
- if (perturbeAngle > angleLimit)
- perturbeAngle = angleLimit;
-
- btTransform unPerturbedTransform;
- if (perturbeA)
- {
- unPerturbedTransform = input.m_transformA;
- }
- else
- {
- unPerturbedTransform = input.m_transformB;
- }
-
- for (i = 0; i < m_numPerturbationIterations; i++)
- {
- if (v0.length2() > SIMD_EPSILON)
- {
- btQuaternion perturbeRot(v0, perturbeAngle);
- btScalar iterationAngle = i * (SIMD_2_PI / btScalar(m_numPerturbationIterations));
- btQuaternion rotq(sepNormalWorldSpace, iterationAngle);
-
- if (perturbeA)
- {
- input.m_transformA.setBasis(btMatrix3x3(rotq.inverse() * perturbeRot * rotq) * body0Wrap->getWorldTransform().getBasis());
- input.m_transformB = body1Wrap->getWorldTransform();
-#ifdef DEBUG_CONTACTS
- dispatchInfo.m_debugDraw->drawTransform(input.m_transformA, 10.0);
-#endif //DEBUG_CONTACTS
- }
- else
- {
- input.m_transformA = body0Wrap->getWorldTransform();
- input.m_transformB.setBasis(btMatrix3x3(rotq.inverse() * perturbeRot * rotq) * body1Wrap->getWorldTransform().getBasis());
-#ifdef DEBUG_CONTACTS
- dispatchInfo.m_debugDraw->drawTransform(input.m_transformB, 10.0);
-#endif
- }
-
- btPerturbedContactResult perturbedResultOut(resultOut, input.m_transformA, input.m_transformB, unPerturbedTransform, perturbeA, dispatchInfo.m_debugDraw);
- gjkPairDetector.getClosestPoints(input, perturbedResultOut, dispatchInfo.m_debugDraw);
- }
- }
- }
- }
-
-#ifdef USE_SEPDISTANCE_UTIL2
- if (dispatchInfo.m_useConvexConservativeDistanceUtil && (sepDist > SIMD_EPSILON))
- {
- m_sepDistance.initSeparatingDistance(gjkPairDetector.getCachedSeparatingAxis(), sepDist, body0->getWorldTransform(), body1->getWorldTransform());
- }
-#endif //USE_SEPDISTANCE_UTIL2
- }
-
- if (m_ownManifold)
- {
- resultOut->refreshContactPoints();
- }
-}
-
-bool disableCcd = false;
-btScalar btConvexConvexAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- ///Rather then checking ALL pairs, only calculate TOI when motion exceeds threshold
-
- ///Linear motion for one of objects needs to exceed m_ccdSquareMotionThreshold
- ///col0->m_worldTransform,
- btScalar resultFraction = btScalar(1.);
-
- btScalar squareMot0 = (col0->getInterpolationWorldTransform().getOrigin() - col0->getWorldTransform().getOrigin()).length2();
- btScalar squareMot1 = (col1->getInterpolationWorldTransform().getOrigin() - col1->getWorldTransform().getOrigin()).length2();
-
- if (squareMot0 < col0->getCcdSquareMotionThreshold() &&
- squareMot1 < col1->getCcdSquareMotionThreshold())
- return resultFraction;
-
- if (disableCcd)
- return btScalar(1.);
-
- //An adhoc way of testing the Continuous Collision Detection algorithms
- //One object is approximated as a sphere, to simplify things
- //Starting in penetration should report no time of impact
- //For proper CCD, better accuracy and handling of 'allowed' penetration should be added
- //also the mainloop of the physics should have a kind of toi queue (something like Brian Mirtich's application of Timewarp for Rigidbodies)
-
- /// Convex0 against sphere for Convex1
- {
- btConvexShape* convex0 = static_cast<btConvexShape*>(col0->getCollisionShape());
-
- btSphereShape sphere1(col1->getCcdSweptSphereRadius()); //todo: allow non-zero sphere sizes, for better approximation
- btConvexCast::CastResult result;
- btVoronoiSimplexSolver voronoiSimplex;
- //SubsimplexConvexCast ccd0(&sphere,min0,&voronoiSimplex);
- ///Simplification, one object is simplified as a sphere
- btGjkConvexCast ccd1(convex0, &sphere1, &voronoiSimplex);
- //ContinuousConvexCollision ccd(min0,min1,&voronoiSimplex,0);
- if (ccd1.calcTimeOfImpact(col0->getWorldTransform(), col0->getInterpolationWorldTransform(),
- col1->getWorldTransform(), col1->getInterpolationWorldTransform(), result))
- {
- //store result.m_fraction in both bodies
-
- if (col0->getHitFraction() > result.m_fraction)
- col0->setHitFraction(result.m_fraction);
-
- if (col1->getHitFraction() > result.m_fraction)
- col1->setHitFraction(result.m_fraction);
-
- if (resultFraction > result.m_fraction)
- resultFraction = result.m_fraction;
- }
- }
-
- /// Sphere (for convex0) against Convex1
- {
- btConvexShape* convex1 = static_cast<btConvexShape*>(col1->getCollisionShape());
-
- btSphereShape sphere0(col0->getCcdSweptSphereRadius()); //todo: allow non-zero sphere sizes, for better approximation
- btConvexCast::CastResult result;
- btVoronoiSimplexSolver voronoiSimplex;
- //SubsimplexConvexCast ccd0(&sphere,min0,&voronoiSimplex);
- ///Simplification, one object is simplified as a sphere
- btGjkConvexCast ccd1(&sphere0, convex1, &voronoiSimplex);
- //ContinuousConvexCollision ccd(min0,min1,&voronoiSimplex,0);
- if (ccd1.calcTimeOfImpact(col0->getWorldTransform(), col0->getInterpolationWorldTransform(),
- col1->getWorldTransform(), col1->getInterpolationWorldTransform(), result))
- {
- //store result.m_fraction in both bodies
-
- if (col0->getHitFraction() > result.m_fraction)
- col0->setHitFraction(result.m_fraction);
-
- if (col1->getHitFraction() > result.m_fraction)
- col1->setHitFraction(result.m_fraction);
-
- if (resultFraction > result.m_fraction)
- resultFraction = result.m_fraction;
- }
- }
-
- return resultFraction;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h
deleted file mode 100644
index eac5b4d824..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_CONVEX_ALGORITHM_H
-#define BT_CONVEX_CONVEX_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-#include "btCollisionCreateFunc.h"
-#include "btCollisionDispatcher.h"
-#include "LinearMath/btTransformUtil.h" //for btConvexSeparatingDistanceUtil
-#include "BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h"
-
-class btConvexPenetrationDepthSolver;
-
-///Enabling USE_SEPDISTANCE_UTIL2 requires 100% reliable distance computation. However, when using large size ratios GJK can be imprecise
-///so the distance is not conservative. In that case, enabling this USE_SEPDISTANCE_UTIL2 would result in failing/missing collisions.
-///Either improve GJK for large size ratios (testing a 100 units versus a 0.1 unit object) or only enable the util
-///for certain pairs that have a small size ratio
-
-//#define USE_SEPDISTANCE_UTIL2 1
-
-///The convexConvexAlgorithm collision algorithm implements time of impact, convex closest points and penetration depth calculations between two convex objects.
-///Multiple contact points are calculated by perturbing the orientation of the smallest object orthogonal to the separating normal.
-///This idea was described by Gino van den Bergen in this forum topic http://www.bulletphysics.com/Bullet/phpBB3/viewtopic.php?f=4&t=288&p=888#p888
-class btConvexConvexAlgorithm : public btActivatingCollisionAlgorithm
-{
-#ifdef USE_SEPDISTANCE_UTIL2
- btConvexSeparatingDistanceUtil m_sepDistance;
-#endif
- btConvexPenetrationDepthSolver* m_pdSolver;
-
- btVertexArray worldVertsB1;
- btVertexArray worldVertsB2;
-
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
- bool m_lowLevelOfDetail;
-
- int m_numPerturbationIterations;
- int m_minimumPointsPerturbationThreshold;
-
- ///cache separating vector to speedup collision detection
-
-public:
- btConvexConvexAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, btConvexPenetrationDepthSolver* pdSolver, int numPerturbationIterations, int minimumPointsPerturbationThreshold);
-
- virtual ~btConvexConvexAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- ///should we use m_ownManifold to avoid adding duplicates?
- if (m_manifoldPtr && m_ownManifold)
- manifoldArray.push_back(m_manifoldPtr);
- }
-
- void setLowLevelOfDetail(bool useLowLevel);
-
- const btPersistentManifold* getManifold()
- {
- return m_manifoldPtr;
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- btConvexPenetrationDepthSolver* m_pdSolver;
- int m_numPerturbationIterations;
- int m_minimumPointsPerturbationThreshold;
-
- CreateFunc(btConvexPenetrationDepthSolver* pdSolver);
-
- virtual ~CreateFunc();
-
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexConvexAlgorithm));
- return new (mem) btConvexConvexAlgorithm(ci.m_manifold, ci, body0Wrap, body1Wrap, m_pdSolver, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold);
- }
- };
-};
-
-#endif //BT_CONVEX_CONVEX_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp
deleted file mode 100644
index ba1bc06b69..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvexPlaneCollisionAlgorithm.h"
-
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-//#include <stdio.h>
-
-btConvexPlaneCollisionAlgorithm::btConvexPlaneCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap, bool isSwapped, int numPerturbationIterations, int minimumPointsPerturbationThreshold)
- : btCollisionAlgorithm(ci),
- m_ownManifold(false),
- m_manifoldPtr(mf),
- m_isSwapped(isSwapped),
- m_numPerturbationIterations(numPerturbationIterations),
- m_minimumPointsPerturbationThreshold(minimumPointsPerturbationThreshold)
-{
- const btCollisionObjectWrapper* convexObjWrap = m_isSwapped ? col1Wrap : col0Wrap;
- const btCollisionObjectWrapper* planeObjWrap = m_isSwapped ? col0Wrap : col1Wrap;
-
- if (!m_manifoldPtr && m_dispatcher->needsCollision(convexObjWrap->getCollisionObject(), planeObjWrap->getCollisionObject()))
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(convexObjWrap->getCollisionObject(), planeObjWrap->getCollisionObject());
- m_ownManifold = true;
- }
-}
-
-btConvexPlaneCollisionAlgorithm::~btConvexPlaneCollisionAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btConvexPlaneCollisionAlgorithm::collideSingleContact(const btQuaternion& perturbeRot, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- const btCollisionObjectWrapper* convexObjWrap = m_isSwapped ? body1Wrap : body0Wrap;
- const btCollisionObjectWrapper* planeObjWrap = m_isSwapped ? body0Wrap : body1Wrap;
-
- btConvexShape* convexShape = (btConvexShape*)convexObjWrap->getCollisionShape();
- btStaticPlaneShape* planeShape = (btStaticPlaneShape*)planeObjWrap->getCollisionShape();
-
- bool hasCollision = false;
- const btVector3& planeNormal = planeShape->getPlaneNormal();
- const btScalar& planeConstant = planeShape->getPlaneConstant();
-
- btTransform convexWorldTransform = convexObjWrap->getWorldTransform();
- btTransform convexInPlaneTrans;
- convexInPlaneTrans = planeObjWrap->getWorldTransform().inverse() * convexWorldTransform;
- //now perturbe the convex-world transform
- convexWorldTransform.getBasis() *= btMatrix3x3(perturbeRot);
- btTransform planeInConvex;
- planeInConvex = convexWorldTransform.inverse() * planeObjWrap->getWorldTransform();
-
- btVector3 vtx = convexShape->localGetSupportingVertex(planeInConvex.getBasis() * -planeNormal);
-
- btVector3 vtxInPlane = convexInPlaneTrans(vtx);
- btScalar distance = (planeNormal.dot(vtxInPlane) - planeConstant);
-
- btVector3 vtxInPlaneProjected = vtxInPlane - distance * planeNormal;
- btVector3 vtxInPlaneWorld = planeObjWrap->getWorldTransform() * vtxInPlaneProjected;
-
- hasCollision = distance < m_manifoldPtr->getContactBreakingThreshold();
- resultOut->setPersistentManifold(m_manifoldPtr);
- if (hasCollision)
- {
- /// report a contact. internally this will be kept persistent, and contact reduction is done
- btVector3 normalOnSurfaceB = planeObjWrap->getWorldTransform().getBasis() * planeNormal;
- btVector3 pOnB = vtxInPlaneWorld;
- resultOut->addContactPoint(normalOnSurfaceB, pOnB, distance);
- }
-}
-
-void btConvexPlaneCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)dispatchInfo;
- if (!m_manifoldPtr)
- return;
-
- const btCollisionObjectWrapper* convexObjWrap = m_isSwapped ? body1Wrap : body0Wrap;
- const btCollisionObjectWrapper* planeObjWrap = m_isSwapped ? body0Wrap : body1Wrap;
-
- btConvexShape* convexShape = (btConvexShape*)convexObjWrap->getCollisionShape();
- btStaticPlaneShape* planeShape = (btStaticPlaneShape*)planeObjWrap->getCollisionShape();
-
- bool hasCollision = false;
- const btVector3& planeNormal = planeShape->getPlaneNormal();
- const btScalar& planeConstant = planeShape->getPlaneConstant();
- btTransform planeInConvex;
- planeInConvex = convexObjWrap->getWorldTransform().inverse() * planeObjWrap->getWorldTransform();
- btTransform convexInPlaneTrans;
- convexInPlaneTrans = planeObjWrap->getWorldTransform().inverse() * convexObjWrap->getWorldTransform();
-
- btVector3 vtx = convexShape->localGetSupportingVertex(planeInConvex.getBasis() * -planeNormal);
- btVector3 vtxInPlane = convexInPlaneTrans(vtx);
- btScalar distance = (planeNormal.dot(vtxInPlane) - planeConstant);
-
- btVector3 vtxInPlaneProjected = vtxInPlane - distance * planeNormal;
- btVector3 vtxInPlaneWorld = planeObjWrap->getWorldTransform() * vtxInPlaneProjected;
-
- hasCollision = distance < m_manifoldPtr->getContactBreakingThreshold()+ resultOut->m_closestPointDistanceThreshold;
- resultOut->setPersistentManifold(m_manifoldPtr);
- if (hasCollision)
- {
- /// report a contact. internally this will be kept persistent, and contact reduction is done
- btVector3 normalOnSurfaceB = planeObjWrap->getWorldTransform().getBasis() * planeNormal;
- btVector3 pOnB = vtxInPlaneWorld;
- resultOut->addContactPoint(normalOnSurfaceB, pOnB, distance);
- }
-
- //the perturbation algorithm doesn't work well with implicit surfaces such as spheres, cylinder and cones:
- //they keep on rolling forever because of the additional off-center contact points
- //so only enable the feature for polyhedral shapes (btBoxShape, btConvexHullShape etc)
- if (convexShape->isPolyhedral() && resultOut->getPersistentManifold()->getNumContacts() < m_minimumPointsPerturbationThreshold)
- {
- btVector3 v0, v1;
- btPlaneSpace1(planeNormal, v0, v1);
- //now perform 'm_numPerturbationIterations' collision queries with the perturbated collision objects
-
- const btScalar angleLimit = 0.125f * SIMD_PI;
- btScalar perturbeAngle;
- btScalar radius = convexShape->getAngularMotionDisc();
- perturbeAngle = gContactBreakingThreshold / radius;
- if (perturbeAngle > angleLimit)
- perturbeAngle = angleLimit;
-
- btQuaternion perturbeRot(v0, perturbeAngle);
- for (int i = 0; i < m_numPerturbationIterations; i++)
- {
- btScalar iterationAngle = i * (SIMD_2_PI / btScalar(m_numPerturbationIterations));
- btQuaternion rotq(planeNormal, iterationAngle);
- collideSingleContact(rotq.inverse() * perturbeRot * rotq, body0Wrap, body1Wrap, dispatchInfo, resultOut);
- }
- }
-
- if (m_ownManifold)
- {
- if (m_manifoldPtr->getNumContacts())
- {
- resultOut->refreshContactPoints();
- }
- }
-}
-
-btScalar btConvexPlaneCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- (void)col0;
- (void)col1;
-
- //not yet
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h
deleted file mode 100644
index b693da118f..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_PLANE_COLLISION_ALGORITHM_H
-#define BT_CONVEX_PLANE_COLLISION_ALGORITHM_H
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-class btPersistentManifold;
-#include "btCollisionDispatcher.h"
-
-#include "LinearMath/btVector3.h"
-
-/// btSphereBoxCollisionAlgorithm provides sphere-box collision detection.
-/// Other features are frame-coherency (persistent data) and collision response.
-class btConvexPlaneCollisionAlgorithm : public btCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
- bool m_isSwapped;
- int m_numPerturbationIterations;
- int m_minimumPointsPerturbationThreshold;
-
-public:
- btConvexPlaneCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped, int numPerturbationIterations, int minimumPointsPerturbationThreshold);
-
- virtual ~btConvexPlaneCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- void collideSingleContact(const btQuaternion& perturbeRot, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- {
- manifoldArray.push_back(m_manifoldPtr);
- }
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- int m_numPerturbationIterations;
- int m_minimumPointsPerturbationThreshold;
-
- CreateFunc()
- : m_numPerturbationIterations(1),
- m_minimumPointsPerturbationThreshold(0)
- {
- }
-
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btConvexPlaneCollisionAlgorithm));
- if (!m_swapped)
- {
- return new (mem) btConvexPlaneCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, false, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold);
- }
- else
- {
- return new (mem) btConvexPlaneCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, true, m_numPerturbationIterations, m_minimumPointsPerturbationThreshold);
- }
- }
- };
-};
-
-#endif //BT_CONVEX_PLANE_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp
deleted file mode 100644
index ef3ea9e394..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp
+++ /dev/null
@@ -1,362 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btDefaultCollisionConfiguration.h"
-
-#include "BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.h"
-
-#include "BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h"
-#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM
-#include "BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h"
-#endif //USE_BUGGY_SPHERE_BOX_ALGORITHM
-#include "BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-
-#include "LinearMath/btPoolAllocator.h"
-
-btDefaultCollisionConfiguration::btDefaultCollisionConfiguration(const btDefaultCollisionConstructionInfo& constructionInfo)
-//btDefaultCollisionConfiguration::btDefaultCollisionConfiguration(btStackAlloc* stackAlloc,btPoolAllocator* persistentManifoldPool,btPoolAllocator* collisionAlgorithmPool)
-{
- void* mem = NULL;
- if (constructionInfo.m_useEpaPenetrationAlgorithm)
- {
- mem = btAlignedAlloc(sizeof(btGjkEpaPenetrationDepthSolver), 16);
- m_pdSolver = new (mem) btGjkEpaPenetrationDepthSolver;
- }
- else
- {
- mem = btAlignedAlloc(sizeof(btMinkowskiPenetrationDepthSolver), 16);
- m_pdSolver = new (mem) btMinkowskiPenetrationDepthSolver;
- }
-
- //default CreationFunctions, filling the m_doubleDispatch table
- mem = btAlignedAlloc(sizeof(btConvexConvexAlgorithm::CreateFunc), 16);
- m_convexConvexCreateFunc = new (mem) btConvexConvexAlgorithm::CreateFunc(m_pdSolver);
- mem = btAlignedAlloc(sizeof(btConvexConcaveCollisionAlgorithm::CreateFunc), 16);
- m_convexConcaveCreateFunc = new (mem) btConvexConcaveCollisionAlgorithm::CreateFunc;
- mem = btAlignedAlloc(sizeof(btConvexConcaveCollisionAlgorithm::CreateFunc), 16);
- m_swappedConvexConcaveCreateFunc = new (mem) btConvexConcaveCollisionAlgorithm::SwappedCreateFunc;
- mem = btAlignedAlloc(sizeof(btCompoundCollisionAlgorithm::CreateFunc), 16);
- m_compoundCreateFunc = new (mem) btCompoundCollisionAlgorithm::CreateFunc;
-
- mem = btAlignedAlloc(sizeof(btCompoundCompoundCollisionAlgorithm::CreateFunc), 16);
- m_compoundCompoundCreateFunc = new (mem) btCompoundCompoundCollisionAlgorithm::CreateFunc;
-
- mem = btAlignedAlloc(sizeof(btCompoundCollisionAlgorithm::SwappedCreateFunc), 16);
- m_swappedCompoundCreateFunc = new (mem) btCompoundCollisionAlgorithm::SwappedCreateFunc;
- mem = btAlignedAlloc(sizeof(btEmptyAlgorithm::CreateFunc), 16);
- m_emptyCreateFunc = new (mem) btEmptyAlgorithm::CreateFunc;
-
- mem = btAlignedAlloc(sizeof(btSphereSphereCollisionAlgorithm::CreateFunc), 16);
- m_sphereSphereCF = new (mem) btSphereSphereCollisionAlgorithm::CreateFunc;
-#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM
- mem = btAlignedAlloc(sizeof(btSphereBoxCollisionAlgorithm::CreateFunc), 16);
- m_sphereBoxCF = new (mem) btSphereBoxCollisionAlgorithm::CreateFunc;
- mem = btAlignedAlloc(sizeof(btSphereBoxCollisionAlgorithm::CreateFunc), 16);
- m_boxSphereCF = new (mem) btSphereBoxCollisionAlgorithm::CreateFunc;
- m_boxSphereCF->m_swapped = true;
-#endif //USE_BUGGY_SPHERE_BOX_ALGORITHM
-
- mem = btAlignedAlloc(sizeof(btSphereTriangleCollisionAlgorithm::CreateFunc), 16);
- m_sphereTriangleCF = new (mem) btSphereTriangleCollisionAlgorithm::CreateFunc;
- mem = btAlignedAlloc(sizeof(btSphereTriangleCollisionAlgorithm::CreateFunc), 16);
- m_triangleSphereCF = new (mem) btSphereTriangleCollisionAlgorithm::CreateFunc;
- m_triangleSphereCF->m_swapped = true;
-
- mem = btAlignedAlloc(sizeof(btBoxBoxCollisionAlgorithm::CreateFunc), 16);
- m_boxBoxCF = new (mem) btBoxBoxCollisionAlgorithm::CreateFunc;
-
- //convex versus plane
- mem = btAlignedAlloc(sizeof(btConvexPlaneCollisionAlgorithm::CreateFunc), 16);
- m_convexPlaneCF = new (mem) btConvexPlaneCollisionAlgorithm::CreateFunc;
- mem = btAlignedAlloc(sizeof(btConvexPlaneCollisionAlgorithm::CreateFunc), 16);
- m_planeConvexCF = new (mem) btConvexPlaneCollisionAlgorithm::CreateFunc;
- m_planeConvexCF->m_swapped = true;
-
- ///calculate maximum element size, big enough to fit any collision algorithm in the memory pool
- int maxSize = sizeof(btConvexConvexAlgorithm);
- int maxSize2 = sizeof(btConvexConcaveCollisionAlgorithm);
- int maxSize3 = sizeof(btCompoundCollisionAlgorithm);
- int maxSize4 = sizeof(btCompoundCompoundCollisionAlgorithm);
-
- int collisionAlgorithmMaxElementSize = btMax(maxSize, constructionInfo.m_customCollisionAlgorithmMaxElementSize);
- collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize2);
- collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize3);
- collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize4);
-
- if (constructionInfo.m_persistentManifoldPool)
- {
- m_ownsPersistentManifoldPool = false;
- m_persistentManifoldPool = constructionInfo.m_persistentManifoldPool;
- }
- else
- {
- m_ownsPersistentManifoldPool = true;
- void* mem = btAlignedAlloc(sizeof(btPoolAllocator), 16);
- m_persistentManifoldPool = new (mem) btPoolAllocator(sizeof(btPersistentManifold), constructionInfo.m_defaultMaxPersistentManifoldPoolSize);
- }
-
- collisionAlgorithmMaxElementSize = (collisionAlgorithmMaxElementSize + 16) & 0xffffffffffff0;
- if (constructionInfo.m_collisionAlgorithmPool)
- {
- m_ownsCollisionAlgorithmPool = false;
- m_collisionAlgorithmPool = constructionInfo.m_collisionAlgorithmPool;
- }
- else
- {
- m_ownsCollisionAlgorithmPool = true;
- void* mem = btAlignedAlloc(sizeof(btPoolAllocator), 16);
- m_collisionAlgorithmPool = new (mem) btPoolAllocator(collisionAlgorithmMaxElementSize, constructionInfo.m_defaultMaxCollisionAlgorithmPoolSize);
- }
-}
-
-btDefaultCollisionConfiguration::~btDefaultCollisionConfiguration()
-{
- if (m_ownsCollisionAlgorithmPool)
- {
- m_collisionAlgorithmPool->~btPoolAllocator();
- btAlignedFree(m_collisionAlgorithmPool);
- }
- if (m_ownsPersistentManifoldPool)
- {
- m_persistentManifoldPool->~btPoolAllocator();
- btAlignedFree(m_persistentManifoldPool);
- }
-
- m_convexConvexCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_convexConvexCreateFunc);
-
- m_convexConcaveCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_convexConcaveCreateFunc);
- m_swappedConvexConcaveCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_swappedConvexConcaveCreateFunc);
-
- m_compoundCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_compoundCreateFunc);
-
- m_compoundCompoundCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_compoundCompoundCreateFunc);
-
- m_swappedCompoundCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_swappedCompoundCreateFunc);
-
- m_emptyCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_emptyCreateFunc);
-
- m_sphereSphereCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_sphereSphereCF);
-
-#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM
- m_sphereBoxCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_sphereBoxCF);
- m_boxSphereCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_boxSphereCF);
-#endif //USE_BUGGY_SPHERE_BOX_ALGORITHM
-
- m_sphereTriangleCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_sphereTriangleCF);
- m_triangleSphereCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_triangleSphereCF);
- m_boxBoxCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_boxBoxCF);
-
- m_convexPlaneCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_convexPlaneCF);
- m_planeConvexCF->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_planeConvexCF);
-
- m_pdSolver->~btConvexPenetrationDepthSolver();
-
- btAlignedFree(m_pdSolver);
-}
-
-btCollisionAlgorithmCreateFunc* btDefaultCollisionConfiguration::getClosestPointsAlgorithmCreateFunc(int proxyType0, int proxyType1)
-{
- if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1 == SPHERE_SHAPE_PROXYTYPE))
- {
- return m_sphereSphereCF;
- }
-#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM
- if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1 == BOX_SHAPE_PROXYTYPE))
- {
- return m_sphereBoxCF;
- }
-
- if ((proxyType0 == BOX_SHAPE_PROXYTYPE) && (proxyType1 == SPHERE_SHAPE_PROXYTYPE))
- {
- return m_boxSphereCF;
- }
-#endif //USE_BUGGY_SPHERE_BOX_ALGORITHM
-
- if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1 == TRIANGLE_SHAPE_PROXYTYPE))
- {
- return m_sphereTriangleCF;
- }
-
- if ((proxyType0 == TRIANGLE_SHAPE_PROXYTYPE) && (proxyType1 == SPHERE_SHAPE_PROXYTYPE))
- {
- return m_triangleSphereCF;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType0) && (proxyType1 == STATIC_PLANE_PROXYTYPE))
- {
- return m_convexPlaneCF;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType1) && (proxyType0 == STATIC_PLANE_PROXYTYPE))
- {
- return m_planeConvexCF;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType0) && btBroadphaseProxy::isConvex(proxyType1))
- {
- return m_convexConvexCreateFunc;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType0) && btBroadphaseProxy::isConcave(proxyType1))
- {
- return m_convexConcaveCreateFunc;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType1) && btBroadphaseProxy::isConcave(proxyType0))
- {
- return m_swappedConvexConcaveCreateFunc;
- }
-
- if (btBroadphaseProxy::isCompound(proxyType0) && btBroadphaseProxy::isCompound(proxyType1))
- {
- return m_compoundCompoundCreateFunc;
- }
-
- if (btBroadphaseProxy::isCompound(proxyType0))
- {
- return m_compoundCreateFunc;
- }
- else
- {
- if (btBroadphaseProxy::isCompound(proxyType1))
- {
- return m_swappedCompoundCreateFunc;
- }
- }
-
- //failed to find an algorithm
- return m_emptyCreateFunc;
-}
-
-btCollisionAlgorithmCreateFunc* btDefaultCollisionConfiguration::getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1)
-{
- if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1 == SPHERE_SHAPE_PROXYTYPE))
- {
- return m_sphereSphereCF;
- }
-#ifdef USE_BUGGY_SPHERE_BOX_ALGORITHM
- if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1 == BOX_SHAPE_PROXYTYPE))
- {
- return m_sphereBoxCF;
- }
-
- if ((proxyType0 == BOX_SHAPE_PROXYTYPE) && (proxyType1 == SPHERE_SHAPE_PROXYTYPE))
- {
- return m_boxSphereCF;
- }
-#endif //USE_BUGGY_SPHERE_BOX_ALGORITHM
-
- if ((proxyType0 == SPHERE_SHAPE_PROXYTYPE) && (proxyType1 == TRIANGLE_SHAPE_PROXYTYPE))
- {
- return m_sphereTriangleCF;
- }
-
- if ((proxyType0 == TRIANGLE_SHAPE_PROXYTYPE) && (proxyType1 == SPHERE_SHAPE_PROXYTYPE))
- {
- return m_triangleSphereCF;
- }
-
- if ((proxyType0 == BOX_SHAPE_PROXYTYPE) && (proxyType1 == BOX_SHAPE_PROXYTYPE))
- {
- return m_boxBoxCF;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType0) && (proxyType1 == STATIC_PLANE_PROXYTYPE))
- {
- return m_convexPlaneCF;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType1) && (proxyType0 == STATIC_PLANE_PROXYTYPE))
- {
- return m_planeConvexCF;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType0) && btBroadphaseProxy::isConvex(proxyType1))
- {
- return m_convexConvexCreateFunc;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType0) && btBroadphaseProxy::isConcave(proxyType1))
- {
- return m_convexConcaveCreateFunc;
- }
-
- if (btBroadphaseProxy::isConvex(proxyType1) && btBroadphaseProxy::isConcave(proxyType0))
- {
- return m_swappedConvexConcaveCreateFunc;
- }
-
- if (btBroadphaseProxy::isCompound(proxyType0) && btBroadphaseProxy::isCompound(proxyType1))
- {
- return m_compoundCompoundCreateFunc;
- }
-
- if (btBroadphaseProxy::isCompound(proxyType0))
- {
- return m_compoundCreateFunc;
- }
- else
- {
- if (btBroadphaseProxy::isCompound(proxyType1))
- {
- return m_swappedCompoundCreateFunc;
- }
- }
-
- //failed to find an algorithm
- return m_emptyCreateFunc;
-}
-
-void btDefaultCollisionConfiguration::setConvexConvexMultipointIterations(int numPerturbationIterations, int minimumPointsPerturbationThreshold)
-{
- btConvexConvexAlgorithm::CreateFunc* convexConvex = (btConvexConvexAlgorithm::CreateFunc*)m_convexConvexCreateFunc;
- convexConvex->m_numPerturbationIterations = numPerturbationIterations;
- convexConvex->m_minimumPointsPerturbationThreshold = minimumPointsPerturbationThreshold;
-}
-
-void btDefaultCollisionConfiguration::setPlaneConvexMultipointIterations(int numPerturbationIterations, int minimumPointsPerturbationThreshold)
-{
- btConvexPlaneCollisionAlgorithm::CreateFunc* cpCF = (btConvexPlaneCollisionAlgorithm::CreateFunc*)m_convexPlaneCF;
- cpCF->m_numPerturbationIterations = numPerturbationIterations;
- cpCF->m_minimumPointsPerturbationThreshold = minimumPointsPerturbationThreshold;
-
- btConvexPlaneCollisionAlgorithm::CreateFunc* pcCF = (btConvexPlaneCollisionAlgorithm::CreateFunc*)m_planeConvexCF;
- pcCF->m_numPerturbationIterations = numPerturbationIterations;
- pcCF->m_minimumPointsPerturbationThreshold = minimumPointsPerturbationThreshold;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h
deleted file mode 100644
index b39a3f41de..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_DEFAULT_COLLISION_CONFIGURATION
-#define BT_DEFAULT_COLLISION_CONFIGURATION
-
-#include "btCollisionConfiguration.h"
-class btVoronoiSimplexSolver;
-class btConvexPenetrationDepthSolver;
-
-struct btDefaultCollisionConstructionInfo
-{
- btPoolAllocator* m_persistentManifoldPool;
- btPoolAllocator* m_collisionAlgorithmPool;
- int m_defaultMaxPersistentManifoldPoolSize;
- int m_defaultMaxCollisionAlgorithmPoolSize;
- int m_customCollisionAlgorithmMaxElementSize;
- int m_useEpaPenetrationAlgorithm;
-
- btDefaultCollisionConstructionInfo()
- : m_persistentManifoldPool(0),
- m_collisionAlgorithmPool(0),
- m_defaultMaxPersistentManifoldPoolSize(4096),
- m_defaultMaxCollisionAlgorithmPoolSize(4096),
- m_customCollisionAlgorithmMaxElementSize(0),
- m_useEpaPenetrationAlgorithm(true)
- {
- }
-};
-
-///btCollisionConfiguration allows to configure Bullet collision detection
-///stack allocator, pool memory allocators
-///@todo: describe the meaning
-class btDefaultCollisionConfiguration : public btCollisionConfiguration
-{
-protected:
- int m_persistentManifoldPoolSize;
-
- btPoolAllocator* m_persistentManifoldPool;
- bool m_ownsPersistentManifoldPool;
-
- btPoolAllocator* m_collisionAlgorithmPool;
- bool m_ownsCollisionAlgorithmPool;
-
- //default penetration depth solver
- btConvexPenetrationDepthSolver* m_pdSolver;
-
- //default CreationFunctions, filling the m_doubleDispatch table
- btCollisionAlgorithmCreateFunc* m_convexConvexCreateFunc;
- btCollisionAlgorithmCreateFunc* m_convexConcaveCreateFunc;
- btCollisionAlgorithmCreateFunc* m_swappedConvexConcaveCreateFunc;
- btCollisionAlgorithmCreateFunc* m_compoundCreateFunc;
- btCollisionAlgorithmCreateFunc* m_compoundCompoundCreateFunc;
-
- btCollisionAlgorithmCreateFunc* m_swappedCompoundCreateFunc;
- btCollisionAlgorithmCreateFunc* m_emptyCreateFunc;
- btCollisionAlgorithmCreateFunc* m_sphereSphereCF;
- btCollisionAlgorithmCreateFunc* m_sphereBoxCF;
- btCollisionAlgorithmCreateFunc* m_boxSphereCF;
-
- btCollisionAlgorithmCreateFunc* m_boxBoxCF;
- btCollisionAlgorithmCreateFunc* m_sphereTriangleCF;
- btCollisionAlgorithmCreateFunc* m_triangleSphereCF;
- btCollisionAlgorithmCreateFunc* m_planeConvexCF;
- btCollisionAlgorithmCreateFunc* m_convexPlaneCF;
-
-public:
- btDefaultCollisionConfiguration(const btDefaultCollisionConstructionInfo& constructionInfo = btDefaultCollisionConstructionInfo());
-
- virtual ~btDefaultCollisionConfiguration();
-
- ///memory pools
- virtual btPoolAllocator* getPersistentManifoldPool()
- {
- return m_persistentManifoldPool;
- }
-
- virtual btPoolAllocator* getCollisionAlgorithmPool()
- {
- return m_collisionAlgorithmPool;
- }
-
- virtual btCollisionAlgorithmCreateFunc* getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1);
-
- virtual btCollisionAlgorithmCreateFunc* getClosestPointsAlgorithmCreateFunc(int proxyType0, int proxyType1);
-
- ///Use this method to allow to generate multiple contact points between at once, between two objects using the generic convex-convex algorithm.
- ///By default, this feature is disabled for best performance.
- ///@param numPerturbationIterations controls the number of collision queries. Set it to zero to disable the feature.
- ///@param minimumPointsPerturbationThreshold is the minimum number of points in the contact cache, above which the feature is disabled
- ///3 is a good value for both params, if you want to enable the feature. This is because the default contact cache contains a maximum of 4 points, and one collision query at the unperturbed orientation is performed first.
- ///See Bullet/Demos/CollisionDemo for an example how this feature gathers multiple points.
- ///@todo we could add a per-object setting of those parameters, for level-of-detail collision detection.
- void setConvexConvexMultipointIterations(int numPerturbationIterations = 3, int minimumPointsPerturbationThreshold = 3);
-
- void setPlaneConvexMultipointIterations(int numPerturbationIterations = 3, int minimumPointsPerturbationThreshold = 3);
-};
-
-#endif //BT_DEFAULT_COLLISION_CONFIGURATION
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp
deleted file mode 100644
index 7cd41bdb33..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btEmptyCollisionAlgorithm.h"
-
-btEmptyAlgorithm::btEmptyAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btCollisionAlgorithm(ci)
-{
-}
-
-void btEmptyAlgorithm::processCollision(const btCollisionObjectWrapper*, const btCollisionObjectWrapper*, const btDispatcherInfo&, btManifoldResult*)
-{
-}
-
-btScalar btEmptyAlgorithm::calculateTimeOfImpact(btCollisionObject*, btCollisionObject*, const btDispatcherInfo&, btManifoldResult*)
-{
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h
deleted file mode 100644
index 65ef83e094..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_EMPTY_ALGORITH
-#define BT_EMPTY_ALGORITH
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "btCollisionCreateFunc.h"
-#include "btCollisionDispatcher.h"
-
-#define ATTRIBUTE_ALIGNED(a)
-
-///EmptyAlgorithm is a stub for unsupported collision pairs.
-///The dispatcher can dispatch a persistent btEmptyAlgorithm to avoid a search every frame.
-class btEmptyAlgorithm : public btCollisionAlgorithm
-{
-public:
- btEmptyAlgorithm(const btCollisionAlgorithmConstructionInfo& ci);
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- (void)body0Wrap;
- (void)body1Wrap;
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btEmptyAlgorithm));
- return new (mem) btEmptyAlgorithm(ci);
- }
- };
-
-} ATTRIBUTE_ALIGNED(16);
-
-#endif //BT_EMPTY_ALGORITH
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.cpp
deleted file mode 100644
index 00f16fd0a8..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.cpp
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGhostObject.h"
-#include "btCollisionWorld.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "LinearMath/btAabbUtil2.h"
-
-btGhostObject::btGhostObject()
-{
- m_internalType = CO_GHOST_OBJECT;
-}
-
-btGhostObject::~btGhostObject()
-{
- ///btGhostObject should have been removed from the world, so no overlapping objects
- btAssert(!m_overlappingObjects.size());
-}
-
-void btGhostObject::addOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btBroadphaseProxy* thisProxy)
-{
- btCollisionObject* otherObject = (btCollisionObject*)otherProxy->m_clientObject;
- btAssert(otherObject);
- ///if this linearSearch becomes too slow (too many overlapping objects) we should add a more appropriate data structure
- int index = m_overlappingObjects.findLinearSearch(otherObject);
- if (index == m_overlappingObjects.size())
- {
- //not found
- m_overlappingObjects.push_back(otherObject);
- }
-}
-
-void btGhostObject::removeOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btDispatcher* dispatcher, btBroadphaseProxy* thisProxy)
-{
- btCollisionObject* otherObject = (btCollisionObject*)otherProxy->m_clientObject;
- btAssert(otherObject);
- int index = m_overlappingObjects.findLinearSearch(otherObject);
- if (index < m_overlappingObjects.size())
- {
- m_overlappingObjects[index] = m_overlappingObjects[m_overlappingObjects.size() - 1];
- m_overlappingObjects.pop_back();
- }
-}
-
-btPairCachingGhostObject::btPairCachingGhostObject()
-{
- m_hashPairCache = new (btAlignedAlloc(sizeof(btHashedOverlappingPairCache), 16)) btHashedOverlappingPairCache();
-}
-
-btPairCachingGhostObject::~btPairCachingGhostObject()
-{
- m_hashPairCache->~btHashedOverlappingPairCache();
- btAlignedFree(m_hashPairCache);
-}
-
-void btPairCachingGhostObject::addOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btBroadphaseProxy* thisProxy)
-{
- btBroadphaseProxy* actualThisProxy = thisProxy ? thisProxy : getBroadphaseHandle();
- btAssert(actualThisProxy);
-
- btCollisionObject* otherObject = (btCollisionObject*)otherProxy->m_clientObject;
- btAssert(otherObject);
- int index = m_overlappingObjects.findLinearSearch(otherObject);
- if (index == m_overlappingObjects.size())
- {
- m_overlappingObjects.push_back(otherObject);
- m_hashPairCache->addOverlappingPair(actualThisProxy, otherProxy);
- }
-}
-
-void btPairCachingGhostObject::removeOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btDispatcher* dispatcher, btBroadphaseProxy* thisProxy1)
-{
- btCollisionObject* otherObject = (btCollisionObject*)otherProxy->m_clientObject;
- btBroadphaseProxy* actualThisProxy = thisProxy1 ? thisProxy1 : getBroadphaseHandle();
- btAssert(actualThisProxy);
-
- btAssert(otherObject);
- int index = m_overlappingObjects.findLinearSearch(otherObject);
- if (index < m_overlappingObjects.size())
- {
- m_overlappingObjects[index] = m_overlappingObjects[m_overlappingObjects.size() - 1];
- m_overlappingObjects.pop_back();
- m_hashPairCache->removeOverlappingPair(actualThisProxy, otherProxy, dispatcher);
- }
-}
-
-void btGhostObject::convexSweepTest(const btConvexShape* castShape, const btTransform& convexFromWorld, const btTransform& convexToWorld, btCollisionWorld::ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration) const
-{
- btTransform convexFromTrans, convexToTrans;
- convexFromTrans = convexFromWorld;
- convexToTrans = convexToWorld;
- btVector3 castShapeAabbMin, castShapeAabbMax;
- /* Compute AABB that encompasses angular movement */
- {
- btVector3 linVel, angVel;
- btTransformUtil::calculateVelocity(convexFromTrans, convexToTrans, 1.0, linVel, angVel);
- btTransform R;
- R.setIdentity();
- R.setRotation(convexFromTrans.getRotation());
- castShape->calculateTemporalAabb(R, linVel, angVel, 1.0, castShapeAabbMin, castShapeAabbMax);
- }
-
- /// go over all objects, and if the ray intersects their aabb + cast shape aabb,
- // do a ray-shape query using convexCaster (CCD)
- int i;
- for (i = 0; i < m_overlappingObjects.size(); i++)
- {
- btCollisionObject* collisionObject = m_overlappingObjects[i];
- //only perform raycast if filterMask matches
- if (resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- btVector3 collisionObjectAabbMin, collisionObjectAabbMax;
- collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(), collisionObjectAabbMin, collisionObjectAabbMax);
- AabbExpand(collisionObjectAabbMin, collisionObjectAabbMax, castShapeAabbMin, castShapeAabbMax);
- btScalar hitLambda = btScalar(1.); //could use resultCallback.m_closestHitFraction, but needs testing
- btVector3 hitNormal;
- if (btRayAabb(convexFromWorld.getOrigin(), convexToWorld.getOrigin(), collisionObjectAabbMin, collisionObjectAabbMax, hitLambda, hitNormal))
- {
- btCollisionWorld::objectQuerySingle(castShape, convexFromTrans, convexToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- resultCallback,
- allowedCcdPenetration);
- }
- }
- }
-}
-
-void btGhostObject::rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, btCollisionWorld::RayResultCallback& resultCallback) const
-{
- btTransform rayFromTrans;
- rayFromTrans.setIdentity();
- rayFromTrans.setOrigin(rayFromWorld);
- btTransform rayToTrans;
- rayToTrans.setIdentity();
- rayToTrans.setOrigin(rayToWorld);
-
- int i;
- for (i = 0; i < m_overlappingObjects.size(); i++)
- {
- btCollisionObject* collisionObject = m_overlappingObjects[i];
- //only perform raycast if filterMask matches
- if (resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- btCollisionWorld::rayTestSingle(rayFromTrans, rayToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- resultCallback);
- }
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.h
deleted file mode 100644
index aa7f48d5cb..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btGhostObject.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GHOST_OBJECT_H
-#define BT_GHOST_OBJECT_H
-
-#include "btCollisionObject.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCallback.h"
-#include "LinearMath/btAlignedAllocator.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
-#include "btCollisionWorld.h"
-
-class btConvexShape;
-
-class btDispatcher;
-
-///The btGhostObject can keep track of all objects that are overlapping
-///By default, this overlap is based on the AABB
-///This is useful for creating a character controller, collision sensors/triggers, explosions etc.
-///We plan on adding rayTest and other queries for the btGhostObject
-ATTRIBUTE_ALIGNED16(class)
-btGhostObject : public btCollisionObject
-{
-protected:
- btAlignedObjectArray<btCollisionObject*> m_overlappingObjects;
-
-public:
- btGhostObject();
-
- virtual ~btGhostObject();
-
- void convexSweepTest(const class btConvexShape* castShape, const btTransform& convexFromWorld, const btTransform& convexToWorld, btCollisionWorld::ConvexResultCallback& resultCallback, btScalar allowedCcdPenetration = 0.f) const;
-
- void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, btCollisionWorld::RayResultCallback& resultCallback) const;
-
- ///this method is mainly for expert/internal use only.
- virtual void addOverlappingObjectInternal(btBroadphaseProxy * otherProxy, btBroadphaseProxy* thisProxy = 0);
- ///this method is mainly for expert/internal use only.
- virtual void removeOverlappingObjectInternal(btBroadphaseProxy * otherProxy, btDispatcher * dispatcher, btBroadphaseProxy* thisProxy = 0);
-
- int getNumOverlappingObjects() const
- {
- return m_overlappingObjects.size();
- }
-
- btCollisionObject* getOverlappingObject(int index)
- {
- return m_overlappingObjects[index];
- }
-
- const btCollisionObject* getOverlappingObject(int index) const
- {
- return m_overlappingObjects[index];
- }
-
- btAlignedObjectArray<btCollisionObject*>& getOverlappingPairs()
- {
- return m_overlappingObjects;
- }
-
- const btAlignedObjectArray<btCollisionObject*> getOverlappingPairs() const
- {
- return m_overlappingObjects;
- }
-
- //
- // internal cast
- //
-
- static const btGhostObject* upcast(const btCollisionObject* colObj)
- {
- if (colObj->getInternalType() == CO_GHOST_OBJECT)
- return (const btGhostObject*)colObj;
- return 0;
- }
- static btGhostObject* upcast(btCollisionObject * colObj)
- {
- if (colObj->getInternalType() == CO_GHOST_OBJECT)
- return (btGhostObject*)colObj;
- return 0;
- }
-};
-
-class btPairCachingGhostObject : public btGhostObject
-{
- btHashedOverlappingPairCache* m_hashPairCache;
-
-public:
- btPairCachingGhostObject();
-
- virtual ~btPairCachingGhostObject();
-
- ///this method is mainly for expert/internal use only.
- virtual void addOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btBroadphaseProxy* thisProxy = 0);
-
- virtual void removeOverlappingObjectInternal(btBroadphaseProxy* otherProxy, btDispatcher* dispatcher, btBroadphaseProxy* thisProxy = 0);
-
- btHashedOverlappingPairCache* getOverlappingPairCache()
- {
- return m_hashPairCache;
- }
-};
-
-///The btGhostPairCallback interfaces and forwards adding and removal of overlapping pairs from the btBroadphaseInterface to btGhostObject.
-class btGhostPairCallback : public btOverlappingPairCallback
-{
-public:
- btGhostPairCallback()
- {
- }
-
- virtual ~btGhostPairCallback()
- {
- }
-
- virtual btBroadphasePair* addOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1)
- {
- btCollisionObject* colObj0 = (btCollisionObject*)proxy0->m_clientObject;
- btCollisionObject* colObj1 = (btCollisionObject*)proxy1->m_clientObject;
- btGhostObject* ghost0 = btGhostObject::upcast(colObj0);
- btGhostObject* ghost1 = btGhostObject::upcast(colObj1);
- if (ghost0)
- ghost0->addOverlappingObjectInternal(proxy1, proxy0);
- if (ghost1)
- ghost1->addOverlappingObjectInternal(proxy0, proxy1);
- return 0;
- }
-
- virtual void* removeOverlappingPair(btBroadphaseProxy* proxy0, btBroadphaseProxy* proxy1, btDispatcher* dispatcher)
- {
- btCollisionObject* colObj0 = (btCollisionObject*)proxy0->m_clientObject;
- btCollisionObject* colObj1 = (btCollisionObject*)proxy1->m_clientObject;
- btGhostObject* ghost0 = btGhostObject::upcast(colObj0);
- btGhostObject* ghost1 = btGhostObject::upcast(colObj1);
- if (ghost0)
- ghost0->removeOverlappingObjectInternal(proxy1, dispatcher, proxy0);
- if (ghost1)
- ghost1->removeOverlappingObjectInternal(proxy0, dispatcher, proxy1);
- return 0;
- }
-
- virtual void removeOverlappingPairsContainingProxy(btBroadphaseProxy* /*proxy0*/, btDispatcher* /*dispatcher*/)
- {
- btAssert(0);
- //need to keep track of all ghost objects and call them here
- //m_hashPairCache->removeOverlappingPairsContainingProxy(proxy0,dispatcher);
- }
-};
-
-#endif
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp
deleted file mode 100644
index b686d98d1e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btHashedSimplePairCache.h"
-
-#include <stdio.h>
-
-#ifdef BT_DEBUG_COLLISION_PAIRS
-int gOverlappingSimplePairs = 0;
-int gRemoveSimplePairs = 0;
-int gAddedSimplePairs = 0;
-int gFindSimplePairs = 0;
-#endif //BT_DEBUG_COLLISION_PAIRS
-
-btHashedSimplePairCache::btHashedSimplePairCache()
-{
- int initialAllocatedSize = 2;
- m_overlappingPairArray.reserve(initialAllocatedSize);
- growTables();
-}
-
-btHashedSimplePairCache::~btHashedSimplePairCache()
-{
-}
-
-void btHashedSimplePairCache::removeAllPairs()
-{
- m_overlappingPairArray.clear();
- m_hashTable.clear();
- m_next.clear();
-
- int initialAllocatedSize = 2;
- m_overlappingPairArray.reserve(initialAllocatedSize);
- growTables();
-}
-
-btSimplePair* btHashedSimplePairCache::findPair(int indexA, int indexB)
-{
-#ifdef BT_DEBUG_COLLISION_PAIRS
- gFindSimplePairs++;
-#endif
-
- /*if (indexA > indexB)
- btSwap(indexA, indexB);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(indexA), static_cast<unsigned int>(indexB)) & (m_overlappingPairArray.capacity() - 1));
-
- if (hash >= m_hashTable.size())
- {
- return NULL;
- }
-
- int index = m_hashTable[hash];
- while (index != BT_SIMPLE_NULL_PAIR && equalsPair(m_overlappingPairArray[index], indexA, indexB) == false)
- {
- index = m_next[index];
- }
-
- if (index == BT_SIMPLE_NULL_PAIR)
- {
- return NULL;
- }
-
- btAssert(index < m_overlappingPairArray.size());
-
- return &m_overlappingPairArray[index];
-}
-
-//#include <stdio.h>
-
-void btHashedSimplePairCache::growTables()
-{
- int newCapacity = m_overlappingPairArray.capacity();
-
- if (m_hashTable.size() < newCapacity)
- {
- //grow hashtable and next table
- int curHashtableSize = m_hashTable.size();
-
- m_hashTable.resize(newCapacity);
- m_next.resize(newCapacity);
-
- int i;
-
- for (i = 0; i < newCapacity; ++i)
- {
- m_hashTable[i] = BT_SIMPLE_NULL_PAIR;
- }
- for (i = 0; i < newCapacity; ++i)
- {
- m_next[i] = BT_SIMPLE_NULL_PAIR;
- }
-
- for (i = 0; i < curHashtableSize; i++)
- {
- const btSimplePair& pair = m_overlappingPairArray[i];
- int indexA = pair.m_indexA;
- int indexB = pair.m_indexB;
-
- int hashValue = static_cast<int>(getHash(static_cast<unsigned int>(indexA), static_cast<unsigned int>(indexB)) & (m_overlappingPairArray.capacity() - 1)); // New hash value with new mask
- m_next[i] = m_hashTable[hashValue];
- m_hashTable[hashValue] = i;
- }
- }
-}
-
-btSimplePair* btHashedSimplePairCache::internalAddPair(int indexA, int indexB)
-{
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(indexA), static_cast<unsigned int>(indexB)) & (m_overlappingPairArray.capacity() - 1)); // New hash value with new mask
-
- btSimplePair* pair = internalFindPair(indexA, indexB, hash);
- if (pair != NULL)
- {
- return pair;
- }
-
- int count = m_overlappingPairArray.size();
- int oldCapacity = m_overlappingPairArray.capacity();
- void* mem = &m_overlappingPairArray.expandNonInitializing();
-
- int newCapacity = m_overlappingPairArray.capacity();
-
- if (oldCapacity < newCapacity)
- {
- growTables();
- //hash with new capacity
- hash = static_cast<int>(getHash(static_cast<unsigned int>(indexA), static_cast<unsigned int>(indexB)) & (m_overlappingPairArray.capacity() - 1));
- }
-
- pair = new (mem) btSimplePair(indexA, indexB);
-
- pair->m_userPointer = 0;
-
- m_next[count] = m_hashTable[hash];
- m_hashTable[hash] = count;
-
- return pair;
-}
-
-void* btHashedSimplePairCache::removeOverlappingPair(int indexA, int indexB)
-{
-#ifdef BT_DEBUG_COLLISION_PAIRS
- gRemoveSimplePairs++;
-#endif
-
- /*if (indexA > indexB)
- btSwap(indexA, indexB);*/
-
- int hash = static_cast<int>(getHash(static_cast<unsigned int>(indexA), static_cast<unsigned int>(indexB)) & (m_overlappingPairArray.capacity() - 1));
-
- btSimplePair* pair = internalFindPair(indexA, indexB, hash);
- if (pair == NULL)
- {
- return 0;
- }
-
- void* userData = pair->m_userPointer;
-
- int pairIndex = int(pair - &m_overlappingPairArray[0]);
- btAssert(pairIndex < m_overlappingPairArray.size());
-
- // Remove the pair from the hash table.
- int index = m_hashTable[hash];
- btAssert(index != BT_SIMPLE_NULL_PAIR);
-
- int previous = BT_SIMPLE_NULL_PAIR;
- while (index != pairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != BT_SIMPLE_NULL_PAIR)
- {
- btAssert(m_next[previous] == pairIndex);
- m_next[previous] = m_next[pairIndex];
- }
- else
- {
- m_hashTable[hash] = m_next[pairIndex];
- }
-
- // We now move the last pair into spot of the
- // pair being removed. We need to fix the hash
- // table indices to support the move.
-
- int lastPairIndex = m_overlappingPairArray.size() - 1;
-
- // If the removed pair is the last pair, we are done.
- if (lastPairIndex == pairIndex)
- {
- m_overlappingPairArray.pop_back();
- return userData;
- }
-
- // Remove the last pair from the hash table.
- const btSimplePair* last = &m_overlappingPairArray[lastPairIndex];
- /* missing swap here too, Nat. */
- int lastHash = static_cast<int>(getHash(static_cast<unsigned int>(last->m_indexA), static_cast<unsigned int>(last->m_indexB)) & (m_overlappingPairArray.capacity() - 1));
-
- index = m_hashTable[lastHash];
- btAssert(index != BT_SIMPLE_NULL_PAIR);
-
- previous = BT_SIMPLE_NULL_PAIR;
- while (index != lastPairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != BT_SIMPLE_NULL_PAIR)
- {
- btAssert(m_next[previous] == lastPairIndex);
- m_next[previous] = m_next[lastPairIndex];
- }
- else
- {
- m_hashTable[lastHash] = m_next[lastPairIndex];
- }
-
- // Copy the last pair into the remove pair's spot.
- m_overlappingPairArray[pairIndex] = m_overlappingPairArray[lastPairIndex];
-
- // Insert the last pair into the hash table
- m_next[pairIndex] = m_hashTable[lastHash];
- m_hashTable[lastHash] = pairIndex;
-
- m_overlappingPairArray.pop_back();
-
- return userData;
-}
-//#include <stdio.h>
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.h
deleted file mode 100644
index fd38a4f0e1..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btHashedSimplePairCache.h
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_HASHED_SIMPLE_PAIR_CACHE_H
-#define BT_HASHED_SIMPLE_PAIR_CACHE_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-
-const int BT_SIMPLE_NULL_PAIR = 0xffffffff;
-
-struct btSimplePair
-{
- btSimplePair(int indexA, int indexB)
- : m_indexA(indexA),
- m_indexB(indexB),
- m_userPointer(0)
- {
- }
-
- int m_indexA;
- int m_indexB;
- union {
- void* m_userPointer;
- int m_userValue;
- };
-};
-
-typedef btAlignedObjectArray<btSimplePair> btSimplePairArray;
-
-#ifdef BT_DEBUG_COLLISION_PAIRS
-extern int gOverlappingSimplePairs;
-extern int gRemoveSimplePairs;
-extern int gAddedSimplePairs;
-extern int gFindSimplePairs;
-#endif //BT_DEBUG_COLLISION_PAIRS
-
-class btHashedSimplePairCache
-{
- btSimplePairArray m_overlappingPairArray;
-
-protected:
- btAlignedObjectArray<int> m_hashTable;
- btAlignedObjectArray<int> m_next;
-
-public:
- btHashedSimplePairCache();
- virtual ~btHashedSimplePairCache();
-
- void removeAllPairs();
-
- virtual void* removeOverlappingPair(int indexA, int indexB);
-
- // Add a pair and return the new pair. If the pair already exists,
- // no new pair is created and the old one is returned.
- virtual btSimplePair* addOverlappingPair(int indexA, int indexB)
- {
-#ifdef BT_DEBUG_COLLISION_PAIRS
- gAddedSimplePairs++;
-#endif
-
- return internalAddPair(indexA, indexB);
- }
-
- virtual btSimplePair* getOverlappingPairArrayPtr()
- {
- return &m_overlappingPairArray[0];
- }
-
- const btSimplePair* getOverlappingPairArrayPtr() const
- {
- return &m_overlappingPairArray[0];
- }
-
- btSimplePairArray& getOverlappingPairArray()
- {
- return m_overlappingPairArray;
- }
-
- const btSimplePairArray& getOverlappingPairArray() const
- {
- return m_overlappingPairArray;
- }
-
- btSimplePair* findPair(int indexA, int indexB);
-
- int GetCount() const { return m_overlappingPairArray.size(); }
-
- int getNumOverlappingPairs() const
- {
- return m_overlappingPairArray.size();
- }
-
-private:
- btSimplePair* internalAddPair(int indexA, int indexB);
-
- void growTables();
-
- SIMD_FORCE_INLINE bool equalsPair(const btSimplePair& pair, int indexA, int indexB)
- {
- return pair.m_indexA == indexA && pair.m_indexB == indexB;
- }
-
- SIMD_FORCE_INLINE unsigned int getHash(unsigned int indexA, unsigned int indexB)
- {
- unsigned int key = indexA | (indexB << 16);
- // Thomas Wang's hash
-
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-
- SIMD_FORCE_INLINE btSimplePair* internalFindPair(int proxyIdA, int proxyIdB, int hash)
- {
- int index = m_hashTable[hash];
-
- while (index != BT_SIMPLE_NULL_PAIR && equalsPair(m_overlappingPairArray[index], proxyIdA, proxyIdB) == false)
- {
- index = m_next[index];
- }
-
- if (index == BT_SIMPLE_NULL_PAIR)
- {
- return NULL;
- }
-
- btAssert(index < m_overlappingPairArray.size());
-
- return &m_overlappingPairArray[index];
- }
-};
-
-#endif //BT_HASHED_SIMPLE_PAIR_CACHE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp
deleted file mode 100644
index a71700f58a..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp
+++ /dev/null
@@ -1,900 +0,0 @@
-#include "btInternalEdgeUtility.h"
-
-#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h"
-
-#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-//#define DEBUG_INTERNAL_EDGE
-
-#ifdef DEBUG_INTERNAL_EDGE
-#include <stdio.h>
-#endif //DEBUG_INTERNAL_EDGE
-
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
-static btIDebugDraw* gDebugDrawer = 0;
-
-void btSetDebugDrawer(btIDebugDraw* debugDrawer)
-{
- gDebugDrawer = debugDrawer;
-}
-
-static void btDebugDrawLine(const btVector3& from, const btVector3& to, const btVector3& color)
-{
- if (gDebugDrawer)
- gDebugDrawer->drawLine(from, to, color);
-}
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
-static int btGetHash(int partId, int triangleIndex)
-{
- int hash = (partId << (31 - MAX_NUM_PARTS_IN_BITS)) | triangleIndex;
- return hash;
-}
-
-static btScalar btGetAngle(const btVector3& edgeA, const btVector3& normalA, const btVector3& normalB)
-{
- const btVector3 refAxis0 = edgeA;
- const btVector3 refAxis1 = normalA;
- const btVector3 swingAxis = normalB;
- btScalar angle = btAtan2(swingAxis.dot(refAxis0), swingAxis.dot(refAxis1));
- return angle;
-}
-
-struct btConnectivityProcessor : public btTriangleCallback
-{
- int m_partIdA;
- int m_triangleIndexA;
- btVector3* m_triangleVerticesA;
- btTriangleInfoMap* m_triangleInfoMap;
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- //skip self-collisions
- if ((m_partIdA == partId) && (m_triangleIndexA == triangleIndex))
- return;
-
- //skip duplicates (disabled for now)
- //if ((m_partIdA <= partId) && (m_triangleIndexA <= triangleIndex))
- // return;
-
- //search for shared vertices and edges
- int numshared = 0;
- int sharedVertsA[3] = {-1, -1, -1};
- int sharedVertsB[3] = {-1, -1, -1};
-
- ///skip degenerate triangles
- btScalar crossBSqr = ((triangle[1] - triangle[0]).cross(triangle[2] - triangle[0])).length2();
- if (crossBSqr < m_triangleInfoMap->m_equalVertexThreshold)
- return;
-
- btScalar crossASqr = ((m_triangleVerticesA[1] - m_triangleVerticesA[0]).cross(m_triangleVerticesA[2] - m_triangleVerticesA[0])).length2();
- ///skip degenerate triangles
- if (crossASqr < m_triangleInfoMap->m_equalVertexThreshold)
- return;
-
-#if 0
- printf("triangle A[0] = (%f,%f,%f)\ntriangle A[1] = (%f,%f,%f)\ntriangle A[2] = (%f,%f,%f)\n",
- m_triangleVerticesA[0].getX(),m_triangleVerticesA[0].getY(),m_triangleVerticesA[0].getZ(),
- m_triangleVerticesA[1].getX(),m_triangleVerticesA[1].getY(),m_triangleVerticesA[1].getZ(),
- m_triangleVerticesA[2].getX(),m_triangleVerticesA[2].getY(),m_triangleVerticesA[2].getZ());
-
- printf("partId=%d, triangleIndex=%d\n",partId,triangleIndex);
- printf("triangle B[0] = (%f,%f,%f)\ntriangle B[1] = (%f,%f,%f)\ntriangle B[2] = (%f,%f,%f)\n",
- triangle[0].getX(),triangle[0].getY(),triangle[0].getZ(),
- triangle[1].getX(),triangle[1].getY(),triangle[1].getZ(),
- triangle[2].getX(),triangle[2].getY(),triangle[2].getZ());
-#endif
-
- for (int i = 0; i < 3; i++)
- {
- for (int j = 0; j < 3; j++)
- {
- if ((m_triangleVerticesA[i] - triangle[j]).length2() < m_triangleInfoMap->m_equalVertexThreshold)
- {
- sharedVertsA[numshared] = i;
- sharedVertsB[numshared] = j;
- numshared++;
- ///degenerate case
- if (numshared >= 3)
- return;
- }
- }
- ///degenerate case
- if (numshared >= 3)
- return;
- }
- switch (numshared)
- {
- case 0:
- {
- break;
- }
- case 1:
- {
- //shared vertex
- break;
- }
- case 2:
- {
- //shared edge
- //we need to make sure the edge is in the order V2V0 and not V0V2 so that the signs are correct
- if (sharedVertsA[0] == 0 && sharedVertsA[1] == 2)
- {
- sharedVertsA[0] = 2;
- sharedVertsA[1] = 0;
- int tmp = sharedVertsB[1];
- sharedVertsB[1] = sharedVertsB[0];
- sharedVertsB[0] = tmp;
- }
-
- int hash = btGetHash(m_partIdA, m_triangleIndexA);
-
- btTriangleInfo* info = m_triangleInfoMap->find(hash);
- if (!info)
- {
- btTriangleInfo tmp;
- m_triangleInfoMap->insert(hash, tmp);
- info = m_triangleInfoMap->find(hash);
- }
-
- int sumvertsA = sharedVertsA[0] + sharedVertsA[1];
- int otherIndexA = 3 - sumvertsA;
-
- btVector3 edge(m_triangleVerticesA[sharedVertsA[1]] - m_triangleVerticesA[sharedVertsA[0]]);
-
- btTriangleShape tA(m_triangleVerticesA[0], m_triangleVerticesA[1], m_triangleVerticesA[2]);
- int otherIndexB = 3 - (sharedVertsB[0] + sharedVertsB[1]);
-
- btTriangleShape tB(triangle[sharedVertsB[1]], triangle[sharedVertsB[0]], triangle[otherIndexB]);
- //btTriangleShape tB(triangle[0],triangle[1],triangle[2]);
-
- btVector3 normalA;
- btVector3 normalB;
- tA.calcNormal(normalA);
- tB.calcNormal(normalB);
- edge.normalize();
- btVector3 edgeCrossA = edge.cross(normalA).normalize();
-
- {
- btVector3 tmp = m_triangleVerticesA[otherIndexA] - m_triangleVerticesA[sharedVertsA[0]];
- if (edgeCrossA.dot(tmp) < 0)
- {
- edgeCrossA *= -1;
- }
- }
-
- btVector3 edgeCrossB = edge.cross(normalB).normalize();
-
- {
- btVector3 tmp = triangle[otherIndexB] - triangle[sharedVertsB[0]];
- if (edgeCrossB.dot(tmp) < 0)
- {
- edgeCrossB *= -1;
- }
- }
-
- btScalar angle2 = 0;
- btScalar ang4 = 0.f;
-
- btVector3 calculatedEdge = edgeCrossA.cross(edgeCrossB);
- btScalar len2 = calculatedEdge.length2();
-
- btScalar correctedAngle(0);
- //btVector3 calculatedNormalB = normalA;
- bool isConvex = false;
-
- if (len2 < m_triangleInfoMap->m_planarEpsilon)
- {
- angle2 = 0.f;
- ang4 = 0.f;
- }
- else
- {
- calculatedEdge.normalize();
- btVector3 calculatedNormalA = calculatedEdge.cross(edgeCrossA);
- calculatedNormalA.normalize();
- angle2 = btGetAngle(calculatedNormalA, edgeCrossA, edgeCrossB);
- ang4 = SIMD_PI - angle2;
- btScalar dotA = normalA.dot(edgeCrossB);
- ///@todo: check if we need some epsilon, due to floating point imprecision
- isConvex = (dotA < 0.);
-
- correctedAngle = isConvex ? ang4 : -ang4;
- }
-
- //alternatively use
- //btVector3 calculatedNormalB2 = quatRotate(orn,normalA);
-
- switch (sumvertsA)
- {
- case 1:
- {
- btVector3 edge = m_triangleVerticesA[0] - m_triangleVerticesA[1];
- btQuaternion orn(edge, -correctedAngle);
- btVector3 computedNormalB = quatRotate(orn, normalA);
- btScalar bla = computedNormalB.dot(normalB);
- if (bla < 0)
- {
- computedNormalB *= -1;
- info->m_flags |= TRI_INFO_V0V1_SWAP_NORMALB;
- }
-#ifdef DEBUG_INTERNAL_EDGE
- if ((computedNormalB - normalB).length() > 0.0001)
- {
- printf("warning: normals not identical\n");
- }
-#endif //DEBUG_INTERNAL_EDGE
-
- info->m_edgeV0V1Angle = -correctedAngle;
-
- if (isConvex)
- info->m_flags |= TRI_INFO_V0V1_CONVEX;
- break;
- }
- case 2:
- {
- btVector3 edge = m_triangleVerticesA[2] - m_triangleVerticesA[0];
- btQuaternion orn(edge, -correctedAngle);
- btVector3 computedNormalB = quatRotate(orn, normalA);
- if (computedNormalB.dot(normalB) < 0)
- {
- computedNormalB *= -1;
- info->m_flags |= TRI_INFO_V2V0_SWAP_NORMALB;
- }
-
-#ifdef DEBUG_INTERNAL_EDGE
- if ((computedNormalB - normalB).length() > 0.0001)
- {
- printf("warning: normals not identical\n");
- }
-#endif //DEBUG_INTERNAL_EDGE
- info->m_edgeV2V0Angle = -correctedAngle;
- if (isConvex)
- info->m_flags |= TRI_INFO_V2V0_CONVEX;
- break;
- }
- case 3:
- {
- btVector3 edge = m_triangleVerticesA[1] - m_triangleVerticesA[2];
- btQuaternion orn(edge, -correctedAngle);
- btVector3 computedNormalB = quatRotate(orn, normalA);
- if (computedNormalB.dot(normalB) < 0)
- {
- info->m_flags |= TRI_INFO_V1V2_SWAP_NORMALB;
- computedNormalB *= -1;
- }
-#ifdef DEBUG_INTERNAL_EDGE
- if ((computedNormalB - normalB).length() > 0.0001)
- {
- printf("warning: normals not identical\n");
- }
-#endif //DEBUG_INTERNAL_EDGE
- info->m_edgeV1V2Angle = -correctedAngle;
-
- if (isConvex)
- info->m_flags |= TRI_INFO_V1V2_CONVEX;
- break;
- }
- }
-
- break;
- }
- default:
- {
- // printf("warning: duplicate triangle\n");
- }
- }
- }
-};
-
-
-struct b3ProcessAllTrianglesHeightfield: public btTriangleCallback
-{
- btHeightfieldTerrainShape* m_heightfieldShape;
- btTriangleInfoMap* m_triangleInfoMap;
-
-
- b3ProcessAllTrianglesHeightfield(btHeightfieldTerrainShape* heightFieldShape, btTriangleInfoMap* triangleInfoMap)
- :m_heightfieldShape(heightFieldShape),
- m_triangleInfoMap(triangleInfoMap)
- {
- }
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- btConnectivityProcessor connectivityProcessor;
- connectivityProcessor.m_partIdA = partId;
- connectivityProcessor.m_triangleIndexA = triangleIndex;
- connectivityProcessor.m_triangleVerticesA = triangle;
- connectivityProcessor.m_triangleInfoMap = m_triangleInfoMap;
- btVector3 aabbMin, aabbMax;
- aabbMin.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMin.setMin(triangle[0]);
- aabbMax.setMax(triangle[0]);
- aabbMin.setMin(triangle[1]);
- aabbMax.setMax(triangle[1]);
- aabbMin.setMin(triangle[2]);
- aabbMax.setMax(triangle[2]);
-
- m_heightfieldShape->processAllTriangles(&connectivityProcessor, aabbMin, aabbMax);
- }
-};
-/////////////////////////////////////////////////////////
-/////////////////////////////////////////////////////////
-
-void btGenerateInternalEdgeInfo(btBvhTriangleMeshShape* trimeshShape, btTriangleInfoMap* triangleInfoMap)
-{
- //the user pointer shouldn't already be used for other purposes, we intend to store connectivity info there!
- if (trimeshShape->getTriangleInfoMap())
- return;
-
- trimeshShape->setTriangleInfoMap(triangleInfoMap);
-
- btStridingMeshInterface* meshInterface = trimeshShape->getMeshInterface();
- const btVector3& meshScaling = meshInterface->getScaling();
-
- for (int partId = 0; partId < meshInterface->getNumSubParts(); partId++)
- {
- const unsigned char* vertexbase = 0;
- int numverts = 0;
- PHY_ScalarType type = PHY_INTEGER;
- int stride = 0;
- const unsigned char* indexbase = 0;
- int indexstride = 0;
- int numfaces = 0;
- PHY_ScalarType indicestype = PHY_INTEGER;
- //PHY_ScalarType indexType=0;
-
- btVector3 triangleVerts[3];
- meshInterface->getLockedReadOnlyVertexIndexBase(&vertexbase, numverts, type, stride, &indexbase, indexstride, numfaces, indicestype, partId);
- btVector3 aabbMin, aabbMax;
-
- for (int triangleIndex = 0; triangleIndex < numfaces; triangleIndex++)
- {
- unsigned int* gfxbase = (unsigned int*)(indexbase + triangleIndex * indexstride);
-
- for (int j = 2; j >= 0; j--)
- {
- int graphicsindex;
- switch (indicestype) {
- case PHY_INTEGER: graphicsindex = gfxbase[j]; break;
- case PHY_SHORT: graphicsindex = ((unsigned short*)gfxbase)[j]; break;
- case PHY_UCHAR: graphicsindex = ((unsigned char*)gfxbase)[j]; break;
- default: btAssert(0);
- }
- if (type == PHY_FLOAT)
- {
- float* graphicsbase = (float*)(vertexbase + graphicsindex * stride);
- triangleVerts[j] = btVector3(
- graphicsbase[0] * meshScaling.getX(),
- graphicsbase[1] * meshScaling.getY(),
- graphicsbase[2] * meshScaling.getZ());
- }
- else
- {
- double* graphicsbase = (double*)(vertexbase + graphicsindex * stride);
- triangleVerts[j] = btVector3(btScalar(graphicsbase[0] * meshScaling.getX()), btScalar(graphicsbase[1] * meshScaling.getY()), btScalar(graphicsbase[2] * meshScaling.getZ()));
- }
- }
- aabbMin.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMin.setMin(triangleVerts[0]);
- aabbMax.setMax(triangleVerts[0]);
- aabbMin.setMin(triangleVerts[1]);
- aabbMax.setMax(triangleVerts[1]);
- aabbMin.setMin(triangleVerts[2]);
- aabbMax.setMax(triangleVerts[2]);
-
- btConnectivityProcessor connectivityProcessor;
- connectivityProcessor.m_partIdA = partId;
- connectivityProcessor.m_triangleIndexA = triangleIndex;
- connectivityProcessor.m_triangleVerticesA = &triangleVerts[0];
- connectivityProcessor.m_triangleInfoMap = triangleInfoMap;
-
- trimeshShape->processAllTriangles(&connectivityProcessor, aabbMin, aabbMax);
- }
- }
-}
-
-
-void btGenerateInternalEdgeInfo(btHeightfieldTerrainShape* heightfieldShape, btTriangleInfoMap* triangleInfoMap)
-{
-
- //the user pointer shouldn't already be used for other purposes, we intend to store connectivity info there!
- if (heightfieldShape->getTriangleInfoMap())
- return;
-
- heightfieldShape->setTriangleInfoMap(triangleInfoMap);
-
- //get all the triangles of the heightfield
-
- btVector3 aabbMin, aabbMax;
-
- aabbMax.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- aabbMin.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
-
- b3ProcessAllTrianglesHeightfield processHeightfield(heightfieldShape, triangleInfoMap);
- heightfieldShape->processAllTriangles(&processHeightfield, aabbMin, aabbMax);
-
-}
-
-// Given a point and a line segment (defined by two points), compute the closest point
-// in the line. Cap the point at the endpoints of the line segment.
-void btNearestPointInLineSegment(const btVector3& point, const btVector3& line0, const btVector3& line1, btVector3& nearestPoint)
-{
- btVector3 lineDelta = line1 - line0;
-
- // Handle degenerate lines
- if (lineDelta.fuzzyZero())
- {
- nearestPoint = line0;
- }
- else
- {
- btScalar delta = (point - line0).dot(lineDelta) / (lineDelta).dot(lineDelta);
-
- // Clamp the point to conform to the segment's endpoints
- if (delta < 0)
- delta = 0;
- else if (delta > 1)
- delta = 1;
-
- nearestPoint = line0 + lineDelta * delta;
- }
-}
-
-bool btClampNormal(const btVector3& edge, const btVector3& tri_normal_org, const btVector3& localContactNormalOnB, btScalar correctedEdgeAngle, btVector3& clampedLocalNormal)
-{
- btVector3 tri_normal = tri_normal_org;
- //we only have a local triangle normal, not a local contact normal -> only normal in world space...
- //either compute the current angle all in local space, or all in world space
-
- btVector3 edgeCross = edge.cross(tri_normal).normalize();
- btScalar curAngle = btGetAngle(edgeCross, tri_normal, localContactNormalOnB);
-
- if (correctedEdgeAngle < 0)
- {
- if (curAngle < correctedEdgeAngle)
- {
- btScalar diffAngle = correctedEdgeAngle - curAngle;
- btQuaternion rotation(edge, diffAngle);
- clampedLocalNormal = btMatrix3x3(rotation) * localContactNormalOnB;
- return true;
- }
- }
-
- if (correctedEdgeAngle >= 0)
- {
- if (curAngle > correctedEdgeAngle)
- {
- btScalar diffAngle = correctedEdgeAngle - curAngle;
- btQuaternion rotation(edge, diffAngle);
- clampedLocalNormal = btMatrix3x3(rotation) * localContactNormalOnB;
- return true;
- }
- }
- return false;
-}
-
-/// Changes a btManifoldPoint collision normal to the normal from the mesh.
-void btAdjustInternalEdgeContacts(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, const btCollisionObjectWrapper* colObj1Wrap, int partId0, int index0, int normalAdjustFlags)
-{
- //btAssert(colObj0->getCollisionShape()->getShapeType() == TRIANGLE_SHAPE_PROXYTYPE);
- if (colObj0Wrap->getCollisionShape()->getShapeType() != TRIANGLE_SHAPE_PROXYTYPE)
- return;
-
-
- btTriangleInfoMap* triangleInfoMapPtr = 0;
-
- if (colObj0Wrap->getCollisionObject()->getCollisionShape()->getShapeType() == TERRAIN_SHAPE_PROXYTYPE)
- {
- btHeightfieldTerrainShape* heightfield = (btHeightfieldTerrainShape*)colObj0Wrap->getCollisionObject()->getCollisionShape();
- triangleInfoMapPtr = heightfield->getTriangleInfoMap();
-
-//#define USE_HEIGHTFIELD_TRIANGLES
-#ifdef USE_HEIGHTFIELD_TRIANGLES
- btVector3 newNormal = btVector3(0, 0, 1);
-
- const btTriangleShape* tri_shape = static_cast<const btTriangleShape*>(colObj0Wrap->getCollisionShape());
- btVector3 tri_normal;
- tri_shape->calcNormal(tri_normal);
- newNormal = tri_normal;
- // cp.m_distance1 = cp.m_distance1 * newNormal.dot(cp.m_normalWorldOnB);
- cp.m_normalWorldOnB = newNormal;
- // Reproject collision point along normal. (what about cp.m_distance1?)
- cp.m_positionWorldOnB = cp.m_positionWorldOnA - cp.m_normalWorldOnB * cp.m_distance1;
- cp.m_localPointB = colObj0Wrap->getWorldTransform().invXform(cp.m_positionWorldOnB);
- return;
-#endif
- }
-
-
- btBvhTriangleMeshShape* trimesh = 0;
-
- if (colObj0Wrap->getCollisionObject()->getCollisionShape()->getShapeType() == SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- trimesh = ((btScaledBvhTriangleMeshShape*)colObj0Wrap->getCollisionObject()->getCollisionShape())->getChildShape();
- }
- else
- {
- if (colObj0Wrap->getCollisionObject()->getCollisionShape()->getShapeType() == TRIANGLE_MESH_SHAPE_PROXYTYPE)
- {
- trimesh = (btBvhTriangleMeshShape*)colObj0Wrap->getCollisionObject()->getCollisionShape();
- }
- }
- if (trimesh)
- {
- triangleInfoMapPtr = (btTriangleInfoMap*)trimesh->getTriangleInfoMap();
- }
-
-
- if (!triangleInfoMapPtr)
- return;
-
- int hash = btGetHash(partId0, index0);
-
- btTriangleInfo* info = triangleInfoMapPtr->find(hash);
- if (!info)
- return;
-
- btScalar frontFacing = (normalAdjustFlags & BT_TRIANGLE_CONVEX_BACKFACE_MODE) == 0 ? 1.f : -1.f;
-
- const btTriangleShape* tri_shape = static_cast<const btTriangleShape*>(colObj0Wrap->getCollisionShape());
- btVector3 v0, v1, v2;
- tri_shape->getVertex(0, v0);
- tri_shape->getVertex(1, v1);
- tri_shape->getVertex(2, v2);
-
- //btVector3 center = (v0+v1+v2)*btScalar(1./3.);
-
- btVector3 red(1, 0, 0), green(0, 1, 0), blue(0, 0, 1), white(1, 1, 1), black(0, 0, 0);
- btVector3 tri_normal;
- tri_shape->calcNormal(tri_normal);
-
- //btScalar dot = tri_normal.dot(cp.m_normalWorldOnB);
- btVector3 nearest;
- btNearestPointInLineSegment(cp.m_localPointB, v0, v1, nearest);
-
- btVector3 contact = cp.m_localPointB;
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- const btTransform& tr = colObj0->getWorldTransform();
- btDebugDrawLine(tr * nearest, tr * cp.m_localPointB, red);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- bool isNearEdge = false;
-
- int numConcaveEdgeHits = 0;
- int numConvexEdgeHits = 0;
-
- btVector3 localContactNormalOnB = colObj0Wrap->getWorldTransform().getBasis().transpose() * cp.m_normalWorldOnB;
- localContactNormalOnB.normalize(); //is this necessary?
-
- // Get closest edge
- int bestedge = -1;
- btScalar disttobestedge = BT_LARGE_FLOAT;
- //
- // Edge 0 -> 1
- if (btFabs(info->m_edgeV0V1Angle) < triangleInfoMapPtr->m_maxEdgeAngleThreshold)
- {
- btVector3 nearest;
- btNearestPointInLineSegment(cp.m_localPointB, v0, v1, nearest);
- btScalar len = (contact - nearest).length();
- //
- if (len < disttobestedge)
- {
- bestedge = 0;
- disttobestedge = len;
- }
- }
- // Edge 1 -> 2
- if (btFabs(info->m_edgeV1V2Angle) < triangleInfoMapPtr->m_maxEdgeAngleThreshold)
- {
- btVector3 nearest;
- btNearestPointInLineSegment(cp.m_localPointB, v1, v2, nearest);
- btScalar len = (contact - nearest).length();
- //
- if (len < disttobestedge)
- {
- bestedge = 1;
- disttobestedge = len;
- }
- }
- // Edge 2 -> 0
- if (btFabs(info->m_edgeV2V0Angle) < triangleInfoMapPtr->m_maxEdgeAngleThreshold)
- {
- btVector3 nearest;
- btNearestPointInLineSegment(cp.m_localPointB, v2, v0, nearest);
- btScalar len = (contact - nearest).length();
- //
- if (len < disttobestedge)
- {
- bestedge = 2;
- disttobestedge = len;
- }
- }
-
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btVector3 upfix = tri_normal * btVector3(0.1f, 0.1f, 0.1f);
- btDebugDrawLine(tr * v0 + upfix, tr * v1 + upfix, red);
-#endif
- if (btFabs(info->m_edgeV0V1Angle) < triangleInfoMapPtr->m_maxEdgeAngleThreshold)
- {
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * contact, tr * (contact + cp.m_normalWorldOnB * 10), black);
-#endif
- btScalar len = (contact - nearest).length();
- if (len < triangleInfoMapPtr->m_edgeDistanceThreshold)
- if (bestedge == 0)
- {
- btVector3 edge(v0 - v1);
- isNearEdge = true;
-
- if (info->m_edgeV0V1Angle == btScalar(0))
- {
- numConcaveEdgeHits++;
- }
- else
- {
- bool isEdgeConvex = (info->m_flags & TRI_INFO_V0V1_CONVEX);
- btScalar swapFactor = isEdgeConvex ? btScalar(1) : btScalar(-1);
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * (nearest + swapFactor * tri_normal * 10), white);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btVector3 nA = swapFactor * tri_normal;
-
- btQuaternion orn(edge, info->m_edgeV0V1Angle);
- btVector3 computedNormalB = quatRotate(orn, tri_normal);
- if (info->m_flags & TRI_INFO_V0V1_SWAP_NORMALB)
- computedNormalB *= -1;
- btVector3 nB = swapFactor * computedNormalB;
-
- btScalar NdotA = localContactNormalOnB.dot(nA);
- btScalar NdotB = localContactNormalOnB.dot(nB);
- bool backFacingNormal = (NdotA < triangleInfoMapPtr->m_convexEpsilon) && (NdotB < triangleInfoMapPtr->m_convexEpsilon);
-
-#ifdef DEBUG_INTERNAL_EDGE
- {
- btDebugDrawLine(cp.getPositionWorldOnB(), cp.getPositionWorldOnB() + tr.getBasis() * (nB * 20), red);
- }
-#endif //DEBUG_INTERNAL_EDGE
-
- if (backFacingNormal)
- {
- numConcaveEdgeHits++;
- }
- else
- {
- numConvexEdgeHits++;
- btVector3 clampedLocalNormal;
- bool isClamped = btClampNormal(edge, swapFactor * tri_normal, localContactNormalOnB, info->m_edgeV0V1Angle, clampedLocalNormal);
- if (isClamped)
- {
- if (((normalAdjustFlags & BT_TRIANGLE_CONVEX_DOUBLE_SIDED) != 0) || (clampedLocalNormal.dot(frontFacing * tri_normal) > 0))
- {
- btVector3 newNormal = colObj0Wrap->getWorldTransform().getBasis() * clampedLocalNormal;
- // cp.m_distance1 = cp.m_distance1 * newNormal.dot(cp.m_normalWorldOnB);
- cp.m_normalWorldOnB = newNormal;
- // Reproject collision point along normal. (what about cp.m_distance1?)
- cp.m_positionWorldOnB = cp.m_positionWorldOnA - cp.m_normalWorldOnB * cp.m_distance1;
- cp.m_localPointB = colObj0Wrap->getWorldTransform().invXform(cp.m_positionWorldOnB);
- }
- }
- }
- }
- }
- }
-
- btNearestPointInLineSegment(contact, v1, v2, nearest);
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * cp.m_localPointB, green);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * v1 + upfix, tr * v2 + upfix, green);
-#endif
-
- if (btFabs(info->m_edgeV1V2Angle) < triangleInfoMapPtr->m_maxEdgeAngleThreshold)
- {
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * contact, tr * (contact + cp.m_normalWorldOnB * 10), black);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btScalar len = (contact - nearest).length();
- if (len < triangleInfoMapPtr->m_edgeDistanceThreshold)
- if (bestedge == 1)
- {
- isNearEdge = true;
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * (nearest + tri_normal * 10), white);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btVector3 edge(v1 - v2);
-
- isNearEdge = true;
-
- if (info->m_edgeV1V2Angle == btScalar(0))
- {
- numConcaveEdgeHits++;
- }
- else
- {
- bool isEdgeConvex = (info->m_flags & TRI_INFO_V1V2_CONVEX) != 0;
- btScalar swapFactor = isEdgeConvex ? btScalar(1) : btScalar(-1);
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * (nearest + swapFactor * tri_normal * 10), white);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btVector3 nA = swapFactor * tri_normal;
-
- btQuaternion orn(edge, info->m_edgeV1V2Angle);
- btVector3 computedNormalB = quatRotate(orn, tri_normal);
- if (info->m_flags & TRI_INFO_V1V2_SWAP_NORMALB)
- computedNormalB *= -1;
- btVector3 nB = swapFactor * computedNormalB;
-
-#ifdef DEBUG_INTERNAL_EDGE
- {
- btDebugDrawLine(cp.getPositionWorldOnB(), cp.getPositionWorldOnB() + tr.getBasis() * (nB * 20), red);
- }
-#endif //DEBUG_INTERNAL_EDGE
-
- btScalar NdotA = localContactNormalOnB.dot(nA);
- btScalar NdotB = localContactNormalOnB.dot(nB);
- bool backFacingNormal = (NdotA < triangleInfoMapPtr->m_convexEpsilon) && (NdotB < triangleInfoMapPtr->m_convexEpsilon);
-
- if (backFacingNormal)
- {
- numConcaveEdgeHits++;
- }
- else
- {
- numConvexEdgeHits++;
- btVector3 localContactNormalOnB = colObj0Wrap->getWorldTransform().getBasis().transpose() * cp.m_normalWorldOnB;
- btVector3 clampedLocalNormal;
- bool isClamped = btClampNormal(edge, swapFactor * tri_normal, localContactNormalOnB, info->m_edgeV1V2Angle, clampedLocalNormal);
- if (isClamped)
- {
- if (((normalAdjustFlags & BT_TRIANGLE_CONVEX_DOUBLE_SIDED) != 0) || (clampedLocalNormal.dot(frontFacing * tri_normal) > 0))
- {
- btVector3 newNormal = colObj0Wrap->getWorldTransform().getBasis() * clampedLocalNormal;
- // cp.m_distance1 = cp.m_distance1 * newNormal.dot(cp.m_normalWorldOnB);
- cp.m_normalWorldOnB = newNormal;
- // Reproject collision point along normal.
- cp.m_positionWorldOnB = cp.m_positionWorldOnA - cp.m_normalWorldOnB * cp.m_distance1;
- cp.m_localPointB = colObj0Wrap->getWorldTransform().invXform(cp.m_positionWorldOnB);
- }
- }
- }
- }
- }
- }
-
- btNearestPointInLineSegment(contact, v2, v0, nearest);
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * cp.m_localPointB, blue);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * v2 + upfix, tr * v0 + upfix, blue);
-#endif
-
- if (btFabs(info->m_edgeV2V0Angle) < triangleInfoMapPtr->m_maxEdgeAngleThreshold)
- {
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * contact, tr * (contact + cp.m_normalWorldOnB * 10), black);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btScalar len = (contact - nearest).length();
- if (len < triangleInfoMapPtr->m_edgeDistanceThreshold)
- if (bestedge == 2)
- {
- isNearEdge = true;
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * (nearest + tri_normal * 10), white);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btVector3 edge(v2 - v0);
-
- if (info->m_edgeV2V0Angle == btScalar(0))
- {
- numConcaveEdgeHits++;
- }
- else
- {
- bool isEdgeConvex = (info->m_flags & TRI_INFO_V2V0_CONVEX) != 0;
- btScalar swapFactor = isEdgeConvex ? btScalar(1) : btScalar(-1);
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
- btDebugDrawLine(tr * nearest, tr * (nearest + swapFactor * tri_normal * 10), white);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
- btVector3 nA = swapFactor * tri_normal;
- btQuaternion orn(edge, info->m_edgeV2V0Angle);
- btVector3 computedNormalB = quatRotate(orn, tri_normal);
- if (info->m_flags & TRI_INFO_V2V0_SWAP_NORMALB)
- computedNormalB *= -1;
- btVector3 nB = swapFactor * computedNormalB;
-
-#ifdef DEBUG_INTERNAL_EDGE
- {
- btDebugDrawLine(cp.getPositionWorldOnB(), cp.getPositionWorldOnB() + tr.getBasis() * (nB * 20), red);
- }
-#endif //DEBUG_INTERNAL_EDGE
-
- btScalar NdotA = localContactNormalOnB.dot(nA);
- btScalar NdotB = localContactNormalOnB.dot(nB);
- bool backFacingNormal = (NdotA < triangleInfoMapPtr->m_convexEpsilon) && (NdotB < triangleInfoMapPtr->m_convexEpsilon);
-
- if (backFacingNormal)
- {
- numConcaveEdgeHits++;
- }
- else
- {
- numConvexEdgeHits++;
- // printf("hitting convex edge\n");
-
- btVector3 localContactNormalOnB = colObj0Wrap->getWorldTransform().getBasis().transpose() * cp.m_normalWorldOnB;
- btVector3 clampedLocalNormal;
- bool isClamped = btClampNormal(edge, swapFactor * tri_normal, localContactNormalOnB, info->m_edgeV2V0Angle, clampedLocalNormal);
- if (isClamped)
- {
- if (((normalAdjustFlags & BT_TRIANGLE_CONVEX_DOUBLE_SIDED) != 0) || (clampedLocalNormal.dot(frontFacing * tri_normal) > 0))
- {
- btVector3 newNormal = colObj0Wrap->getWorldTransform().getBasis() * clampedLocalNormal;
- // cp.m_distance1 = cp.m_distance1 * newNormal.dot(cp.m_normalWorldOnB);
- cp.m_normalWorldOnB = newNormal;
- // Reproject collision point along normal.
- cp.m_positionWorldOnB = cp.m_positionWorldOnA - cp.m_normalWorldOnB * cp.m_distance1;
- cp.m_localPointB = colObj0Wrap->getWorldTransform().invXform(cp.m_positionWorldOnB);
- }
- }
- }
- }
- }
- }
-
-#ifdef DEBUG_INTERNAL_EDGE
- {
- btVector3 color(0, 1, 1);
- btDebugDrawLine(cp.getPositionWorldOnB(), cp.getPositionWorldOnB() + cp.m_normalWorldOnB * 10, color);
- }
-#endif //DEBUG_INTERNAL_EDGE
-
- if (isNearEdge)
- {
- if (numConcaveEdgeHits > 0)
- {
- if ((normalAdjustFlags & BT_TRIANGLE_CONCAVE_DOUBLE_SIDED) != 0)
- {
- //fix tri_normal so it pointing the same direction as the current local contact normal
- if (tri_normal.dot(localContactNormalOnB) < 0)
- {
- tri_normal *= -1;
- }
- cp.m_normalWorldOnB = colObj0Wrap->getWorldTransform().getBasis() * tri_normal;
- }
- else
- {
- btVector3 newNormal = tri_normal * frontFacing;
- //if the tri_normal is pointing opposite direction as the current local contact normal, skip it
- btScalar d = newNormal.dot(localContactNormalOnB);
- if (d < 0)
- {
- return;
- }
- //modify the normal to be the triangle normal (or backfacing normal)
- cp.m_normalWorldOnB = colObj0Wrap->getWorldTransform().getBasis() * newNormal;
- }
-
- // Reproject collision point along normal.
- cp.m_positionWorldOnB = cp.m_positionWorldOnA - cp.m_normalWorldOnB * cp.m_distance1;
- cp.m_localPointB = colObj0Wrap->getWorldTransform().invXform(cp.m_positionWorldOnB);
- }
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h
deleted file mode 100644
index cc6d11c241..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btInternalEdgeUtility.h
+++ /dev/null
@@ -1,44 +0,0 @@
-
-#ifndef BT_INTERNAL_EDGE_UTILITY_H
-#define BT_INTERNAL_EDGE_UTILITY_H
-
-#include "LinearMath/btHashMap.h"
-#include "LinearMath/btVector3.h"
-
-#include "BulletCollision/CollisionShapes/btTriangleInfoMap.h"
-
-///The btInternalEdgeUtility helps to avoid or reduce artifacts due to wrong collision normals caused by internal edges.
-///See also http://code.google.com/p/bullet/issues/detail?id=27
-
-class btBvhTriangleMeshShape;
-class btCollisionObject;
-struct btCollisionObjectWrapper;
-class btManifoldPoint;
-class btIDebugDraw;
-class btHeightfieldTerrainShape;
-
-enum btInternalEdgeAdjustFlags
-{
- BT_TRIANGLE_CONVEX_BACKFACE_MODE = 1,
- BT_TRIANGLE_CONCAVE_DOUBLE_SIDED = 2, //double sided options are experimental, single sided is recommended
- BT_TRIANGLE_CONVEX_DOUBLE_SIDED = 4
-};
-
-///Call btGenerateInternalEdgeInfo to create triangle info, store in the shape 'userInfo'
-void btGenerateInternalEdgeInfo(btBvhTriangleMeshShape* trimeshShape, btTriangleInfoMap* triangleInfoMap);
-
-void btGenerateInternalEdgeInfo(btHeightfieldTerrainShape* trimeshShape, btTriangleInfoMap* triangleInfoMap);
-
-///Call the btFixMeshNormal to adjust the collision normal, using the triangle info map (generated using btGenerateInternalEdgeInfo)
-///If this info map is missing, or the triangle is not store in this map, nothing will be done
-void btAdjustInternalEdgeContacts(btManifoldPoint& cp, const btCollisionObjectWrapper* trimeshColObj0Wrap, const btCollisionObjectWrapper* otherColObj1Wrap, int partId0, int index0, int normalAdjustFlags = 0);
-
-///Enable the BT_INTERNAL_EDGE_DEBUG_DRAW define and call btSetDebugDrawer, to get visual info to see if the internal edge utility works properly.
-///If the utility doesn't work properly, you might have to adjust the threshold values in btTriangleInfoMap
-//#define BT_INTERNAL_EDGE_DEBUG_DRAW
-
-#ifdef BT_INTERNAL_EDGE_DEBUG_DRAW
-void btSetDebugDrawer(btIDebugDraw* debugDrawer);
-#endif //BT_INTERNAL_EDGE_DEBUG_DRAW
-
-#endif //BT_INTERNAL_EDGE_UTILITY_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.cpp
deleted file mode 100644
index 770eb24369..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btManifoldResult.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-///This is to allow MaterialCombiner/Custom Friction/Restitution values
-ContactAddedCallback gContactAddedCallback = 0;
-
-CalculateCombinedCallback gCalculateCombinedRestitutionCallback = &btManifoldResult::calculateCombinedRestitution;
-CalculateCombinedCallback gCalculateCombinedFrictionCallback = &btManifoldResult::calculateCombinedFriction;
-CalculateCombinedCallback gCalculateCombinedRollingFrictionCallback = &btManifoldResult::calculateCombinedRollingFriction;
-CalculateCombinedCallback gCalculateCombinedSpinningFrictionCallback = &btManifoldResult::calculateCombinedSpinningFriction;
-CalculateCombinedCallback gCalculateCombinedContactDampingCallback = &btManifoldResult::calculateCombinedContactDamping;
-CalculateCombinedCallback gCalculateCombinedContactStiffnessCallback = &btManifoldResult::calculateCombinedContactStiffness;
-
-btScalar btManifoldResult::calculateCombinedRollingFriction(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- btScalar friction = body0->getRollingFriction() * body1->getFriction() + body1->getRollingFriction() * body0->getFriction();
-
- const btScalar MAX_FRICTION = btScalar(10.);
- if (friction < -MAX_FRICTION)
- friction = -MAX_FRICTION;
- if (friction > MAX_FRICTION)
- friction = MAX_FRICTION;
- return friction;
-}
-
-btScalar btManifoldResult::calculateCombinedSpinningFriction(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- btScalar friction = body0->getSpinningFriction() * body1->getFriction() + body1->getSpinningFriction() * body0->getFriction();
-
- const btScalar MAX_FRICTION = btScalar(10.);
- if (friction < -MAX_FRICTION)
- friction = -MAX_FRICTION;
- if (friction > MAX_FRICTION)
- friction = MAX_FRICTION;
- return friction;
-}
-
-///User can override this material combiner by implementing gContactAddedCallback and setting body0->m_collisionFlags |= btCollisionObject::customMaterialCallback;
-btScalar btManifoldResult::calculateCombinedFriction(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- btScalar friction = body0->getFriction() * body1->getFriction();
-
- const btScalar MAX_FRICTION = btScalar(10.);
- if (friction < -MAX_FRICTION)
- friction = -MAX_FRICTION;
- if (friction > MAX_FRICTION)
- friction = MAX_FRICTION;
- return friction;
-}
-
-btScalar btManifoldResult::calculateCombinedRestitution(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- return body0->getRestitution() * body1->getRestitution();
-}
-
-btScalar btManifoldResult::calculateCombinedContactDamping(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- return body0->getContactDamping() + body1->getContactDamping();
-}
-
-btScalar btManifoldResult::calculateCombinedContactStiffness(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- btScalar s0 = body0->getContactStiffness();
- btScalar s1 = body1->getContactStiffness();
-
- btScalar tmp0 = btScalar(1) / s0;
- btScalar tmp1 = btScalar(1) / s1;
- btScalar combinedStiffness = btScalar(1) / (tmp0 + tmp1);
- return combinedStiffness;
-}
-
-btManifoldResult::btManifoldResult(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- : m_manifoldPtr(0),
- m_body0Wrap(body0Wrap),
- m_body1Wrap(body1Wrap)
-#ifdef DEBUG_PART_INDEX
- ,
- m_partId0(-1),
- m_partId1(-1),
- m_index0(-1),
- m_index1(-1)
-#endif //DEBUG_PART_INDEX
- ,
- m_closestPointDistanceThreshold(0)
-{
-}
-
-void btManifoldResult::addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth)
-{
- btAssert(m_manifoldPtr);
- //order in manifold needs to match
-
- if (depth > m_manifoldPtr->getContactBreakingThreshold())
- // if (depth > m_manifoldPtr->getContactProcessingThreshold())
- return;
-
- bool isSwapped = m_manifoldPtr->getBody0() != m_body0Wrap->getCollisionObject();
- bool isNewCollision = m_manifoldPtr->getNumContacts() == 0;
-
- btVector3 pointA = pointInWorld + normalOnBInWorld * depth;
-
- btVector3 localA;
- btVector3 localB;
-
- if (isSwapped)
- {
- localA = m_body1Wrap->getCollisionObject()->getWorldTransform().invXform(pointA);
- localB = m_body0Wrap->getCollisionObject()->getWorldTransform().invXform(pointInWorld);
- }
- else
- {
- localA = m_body0Wrap->getCollisionObject()->getWorldTransform().invXform(pointA);
- localB = m_body1Wrap->getCollisionObject()->getWorldTransform().invXform(pointInWorld);
- }
-
- btManifoldPoint newPt(localA, localB, normalOnBInWorld, depth);
- newPt.m_positionWorldOnA = pointA;
- newPt.m_positionWorldOnB = pointInWorld;
-
- int insertIndex = m_manifoldPtr->getCacheEntry(newPt);
-
- newPt.m_combinedFriction = gCalculateCombinedFrictionCallback(m_body0Wrap->getCollisionObject(), m_body1Wrap->getCollisionObject());
- newPt.m_combinedRestitution = gCalculateCombinedRestitutionCallback(m_body0Wrap->getCollisionObject(), m_body1Wrap->getCollisionObject());
- newPt.m_combinedRollingFriction = gCalculateCombinedRollingFrictionCallback(m_body0Wrap->getCollisionObject(), m_body1Wrap->getCollisionObject());
- newPt.m_combinedSpinningFriction = gCalculateCombinedSpinningFrictionCallback(m_body0Wrap->getCollisionObject(), m_body1Wrap->getCollisionObject());
-
- if ((m_body0Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_HAS_CONTACT_STIFFNESS_DAMPING) ||
- (m_body1Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_HAS_CONTACT_STIFFNESS_DAMPING))
- {
- newPt.m_combinedContactDamping1 = gCalculateCombinedContactDampingCallback(m_body0Wrap->getCollisionObject(), m_body1Wrap->getCollisionObject());
- newPt.m_combinedContactStiffness1 = gCalculateCombinedContactStiffnessCallback(m_body0Wrap->getCollisionObject(), m_body1Wrap->getCollisionObject());
- newPt.m_contactPointFlags |= BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING;
- }
-
- if ((m_body0Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_HAS_FRICTION_ANCHOR) ||
- (m_body1Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_HAS_FRICTION_ANCHOR))
- {
- newPt.m_contactPointFlags |= BT_CONTACT_FLAG_FRICTION_ANCHOR;
- }
-
- btPlaneSpace1(newPt.m_normalWorldOnB, newPt.m_lateralFrictionDir1, newPt.m_lateralFrictionDir2);
-
- //BP mod, store contact triangles.
- if (isSwapped)
- {
- newPt.m_partId0 = m_partId1;
- newPt.m_partId1 = m_partId0;
- newPt.m_index0 = m_index1;
- newPt.m_index1 = m_index0;
- }
- else
- {
- newPt.m_partId0 = m_partId0;
- newPt.m_partId1 = m_partId1;
- newPt.m_index0 = m_index0;
- newPt.m_index1 = m_index1;
- }
- //printf("depth=%f\n",depth);
- ///@todo, check this for any side effects
- if (insertIndex >= 0)
- {
- //const btManifoldPoint& oldPoint = m_manifoldPtr->getContactPoint(insertIndex);
- m_manifoldPtr->replaceContactPoint(newPt, insertIndex);
- }
- else
- {
- insertIndex = m_manifoldPtr->addManifoldPoint(newPt);
- }
-
- //User can override friction and/or restitution
- if (gContactAddedCallback &&
- //and if either of the two bodies requires custom material
- ((m_body0Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK) ||
- (m_body1Wrap->getCollisionObject()->getCollisionFlags() & btCollisionObject::CF_CUSTOM_MATERIAL_CALLBACK)))
- {
- //experimental feature info, for per-triangle material etc.
- const btCollisionObjectWrapper* obj0Wrap = isSwapped ? m_body1Wrap : m_body0Wrap;
- const btCollisionObjectWrapper* obj1Wrap = isSwapped ? m_body0Wrap : m_body1Wrap;
- (*gContactAddedCallback)(m_manifoldPtr->getContactPoint(insertIndex), obj0Wrap, newPt.m_partId0, newPt.m_index0, obj1Wrap, newPt.m_partId1, newPt.m_index1);
- }
-
- if (gContactStartedCallback && isNewCollision)
- {
- gContactStartedCallback(m_manifoldPtr);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h
deleted file mode 100644
index 6c0a2d9a43..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btManifoldResult.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MANIFOLD_RESULT_H
-#define BT_MANIFOLD_RESULT_H
-
-class btCollisionObject;
-struct btCollisionObjectWrapper;
-
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-class btManifoldPoint;
-
-#include "BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h"
-
-#include "LinearMath/btTransform.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-typedef bool (*ContactAddedCallback)(btManifoldPoint& cp, const btCollisionObjectWrapper* colObj0Wrap, int partId0, int index0, const btCollisionObjectWrapper* colObj1Wrap, int partId1, int index1);
-extern ContactAddedCallback gContactAddedCallback;
-
-//#define DEBUG_PART_INDEX 1
-
-/// These callbacks are used to customize the algorith that combine restitution, friction, damping, Stiffness
-typedef btScalar (*CalculateCombinedCallback)(const btCollisionObject* body0, const btCollisionObject* body1);
-
-extern CalculateCombinedCallback gCalculateCombinedRestitutionCallback;
-extern CalculateCombinedCallback gCalculateCombinedFrictionCallback;
-extern CalculateCombinedCallback gCalculateCombinedRollingFrictionCallback;
-extern CalculateCombinedCallback gCalculateCombinedSpinningFrictionCallback;
-extern CalculateCombinedCallback gCalculateCombinedContactDampingCallback;
-extern CalculateCombinedCallback gCalculateCombinedContactStiffnessCallback;
-
-///btManifoldResult is a helper class to manage contact results.
-class btManifoldResult : public btDiscreteCollisionDetectorInterface::Result
-{
-protected:
- btPersistentManifold* m_manifoldPtr;
-
- const btCollisionObjectWrapper* m_body0Wrap;
- const btCollisionObjectWrapper* m_body1Wrap;
- int m_partId0;
- int m_partId1;
- int m_index0;
- int m_index1;
-
-public:
- btManifoldResult()
- :
-#ifdef DEBUG_PART_INDEX
-
- m_partId0(-1),
- m_partId1(-1),
- m_index0(-1),
- m_index1(-1)
-#endif //DEBUG_PART_INDEX
- m_closestPointDistanceThreshold(0)
- {
- }
-
- btManifoldResult(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
- virtual ~btManifoldResult(){};
-
- void setPersistentManifold(btPersistentManifold* manifoldPtr)
- {
- m_manifoldPtr = manifoldPtr;
- }
-
- const btPersistentManifold* getPersistentManifold() const
- {
- return m_manifoldPtr;
- }
- btPersistentManifold* getPersistentManifold()
- {
- return m_manifoldPtr;
- }
-
- virtual void setShapeIdentifiersA(int partId0, int index0)
- {
- m_partId0 = partId0;
- m_index0 = index0;
- }
-
- virtual void setShapeIdentifiersB(int partId1, int index1)
- {
- m_partId1 = partId1;
- m_index1 = index1;
- }
-
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth);
-
- SIMD_FORCE_INLINE void refreshContactPoints()
- {
- btAssert(m_manifoldPtr);
- if (!m_manifoldPtr->getNumContacts())
- return;
-
- bool isSwapped = m_manifoldPtr->getBody0() != m_body0Wrap->getCollisionObject();
-
- if (isSwapped)
- {
- m_manifoldPtr->refreshContactPoints(m_body1Wrap->getCollisionObject()->getWorldTransform(), m_body0Wrap->getCollisionObject()->getWorldTransform());
- }
- else
- {
- m_manifoldPtr->refreshContactPoints(m_body0Wrap->getCollisionObject()->getWorldTransform(), m_body1Wrap->getCollisionObject()->getWorldTransform());
- }
- }
-
- const btCollisionObjectWrapper* getBody0Wrap() const
- {
- return m_body0Wrap;
- }
- const btCollisionObjectWrapper* getBody1Wrap() const
- {
- return m_body1Wrap;
- }
-
- void setBody0Wrap(const btCollisionObjectWrapper* obj0Wrap)
- {
- m_body0Wrap = obj0Wrap;
- }
-
- void setBody1Wrap(const btCollisionObjectWrapper* obj1Wrap)
- {
- m_body1Wrap = obj1Wrap;
- }
-
- const btCollisionObject* getBody0Internal() const
- {
- return m_body0Wrap->getCollisionObject();
- }
-
- const btCollisionObject* getBody1Internal() const
- {
- return m_body1Wrap->getCollisionObject();
- }
-
- btScalar m_closestPointDistanceThreshold;
-
- /// in the future we can let the user override the methods to combine restitution and friction
- static btScalar calculateCombinedRestitution(const btCollisionObject* body0, const btCollisionObject* body1);
- static btScalar calculateCombinedFriction(const btCollisionObject* body0, const btCollisionObject* body1);
- static btScalar calculateCombinedRollingFriction(const btCollisionObject* body0, const btCollisionObject* body1);
- static btScalar calculateCombinedSpinningFriction(const btCollisionObject* body0, const btCollisionObject* body1);
- static btScalar calculateCombinedContactDamping(const btCollisionObject* body0, const btCollisionObject* body1);
- static btScalar calculateCombinedContactStiffness(const btCollisionObject* body0, const btCollisionObject* body1);
-};
-
-#endif //BT_MANIFOLD_RESULT_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
deleted file mode 100644
index 327b3f076a..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp
+++ /dev/null
@@ -1,445 +0,0 @@
-
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btScalar.h"
-#include "btSimulationIslandManager.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
-
-//#include <stdio.h>
-#include "LinearMath/btQuickprof.h"
-
-btSimulationIslandManager::btSimulationIslandManager() : m_splitIslands(true)
-{
-}
-
-btSimulationIslandManager::~btSimulationIslandManager()
-{
-}
-
-void btSimulationIslandManager::initUnionFind(int n)
-{
- m_unionFind.reset(n);
-}
-
-void btSimulationIslandManager::findUnions(btDispatcher* /* dispatcher */, btCollisionWorld* colWorld)
-{
- {
- btOverlappingPairCache* pairCachePtr = colWorld->getPairCache();
- const int numOverlappingPairs = pairCachePtr->getNumOverlappingPairs();
- if (numOverlappingPairs)
- {
- btBroadphasePair* pairPtr = pairCachePtr->getOverlappingPairArrayPtr();
-
- for (int i = 0; i < numOverlappingPairs; i++)
- {
- const btBroadphasePair& collisionPair = pairPtr[i];
- btCollisionObject* colObj0 = (btCollisionObject*)collisionPair.m_pProxy0->m_clientObject;
- btCollisionObject* colObj1 = (btCollisionObject*)collisionPair.m_pProxy1->m_clientObject;
-
- if (((colObj0) && ((colObj0)->mergesSimulationIslands())) &&
- ((colObj1) && ((colObj1)->mergesSimulationIslands())))
- {
- m_unionFind.unite((colObj0)->getIslandTag(),
- (colObj1)->getIslandTag());
- }
- }
- }
- }
-}
-
-#ifdef STATIC_SIMULATION_ISLAND_OPTIMIZATION
-void btSimulationIslandManager::updateActivationState(btCollisionWorld* colWorld, btDispatcher* dispatcher)
-{
- // put the index into m_controllers into m_tag
- int index = 0;
- {
- int i;
- for (i = 0; i < colWorld->getCollisionObjectArray().size(); i++)
- {
- btCollisionObject* collisionObject = colWorld->getCollisionObjectArray()[i];
- //Adding filtering here
- if (!collisionObject->isStaticOrKinematicObject())
- {
- collisionObject->setIslandTag(index++);
- }
- collisionObject->setCompanionId(-1);
- collisionObject->setHitFraction(btScalar(1.));
- }
- }
- // do the union find
-
- initUnionFind(index);
-
- findUnions(dispatcher, colWorld);
-}
-
-void btSimulationIslandManager::storeIslandActivationState(btCollisionWorld* colWorld)
-{
- // put the islandId ('find' value) into m_tag
- {
- int index = 0;
- int i;
- for (i = 0; i < colWorld->getCollisionObjectArray().size(); i++)
- {
- btCollisionObject* collisionObject = colWorld->getCollisionObjectArray()[i];
- if (!collisionObject->isStaticOrKinematicObject())
- {
- collisionObject->setIslandTag(m_unionFind.find(index));
- //Set the correct object offset in Collision Object Array
- m_unionFind.getElement(index).m_sz = i;
- collisionObject->setCompanionId(-1);
- index++;
- }
- else
- {
- collisionObject->setIslandTag(-1);
- collisionObject->setCompanionId(-2);
- }
- }
- }
-}
-
-#else //STATIC_SIMULATION_ISLAND_OPTIMIZATION
-void btSimulationIslandManager::updateActivationState(btCollisionWorld* colWorld, btDispatcher* dispatcher)
-{
- initUnionFind(int(colWorld->getCollisionObjectArray().size()));
-
- // put the index into m_controllers into m_tag
- {
- int index = 0;
- int i;
- for (i = 0; i < colWorld->getCollisionObjectArray().size(); i++)
- {
- btCollisionObject* collisionObject = colWorld->getCollisionObjectArray()[i];
- collisionObject->setIslandTag(index);
- collisionObject->setCompanionId(-1);
- collisionObject->setHitFraction(btScalar(1.));
- index++;
- }
- }
- // do the union find
-
- findUnions(dispatcher, colWorld);
-}
-
-void btSimulationIslandManager::storeIslandActivationState(btCollisionWorld* colWorld)
-{
- // put the islandId ('find' value) into m_tag
- {
- int index = 0;
- int i;
- for (i = 0; i < colWorld->getCollisionObjectArray().size(); i++)
- {
- btCollisionObject* collisionObject = colWorld->getCollisionObjectArray()[i];
- if (!collisionObject->isStaticOrKinematicObject())
- {
- collisionObject->setIslandTag(m_unionFind.find(index));
- collisionObject->setCompanionId(-1);
- }
- else
- {
- collisionObject->setIslandTag(-1);
- collisionObject->setCompanionId(-2);
- }
- index++;
- }
- }
-}
-
-#endif //STATIC_SIMULATION_ISLAND_OPTIMIZATION
-
-inline int getIslandId(const btPersistentManifold* lhs)
-{
- int islandId;
- const btCollisionObject* rcolObj0 = static_cast<const btCollisionObject*>(lhs->getBody0());
- const btCollisionObject* rcolObj1 = static_cast<const btCollisionObject*>(lhs->getBody1());
- islandId = rcolObj0->getIslandTag() >= 0 ? rcolObj0->getIslandTag() : rcolObj1->getIslandTag();
- return islandId;
-}
-
-/// function object that routes calls to operator<
-class btPersistentManifoldSortPredicate
-{
-public:
- SIMD_FORCE_INLINE bool operator()(const btPersistentManifold* lhs, const btPersistentManifold* rhs) const
- {
- return getIslandId(lhs) < getIslandId(rhs);
- }
-};
-
-class btPersistentManifoldSortPredicateDeterministic
-{
-public:
- SIMD_FORCE_INLINE bool operator()(const btPersistentManifold* lhs, const btPersistentManifold* rhs) const
- {
- return (
- (getIslandId(lhs) < getIslandId(rhs)) || ((getIslandId(lhs) == getIslandId(rhs)) && lhs->getBody0()->getBroadphaseHandle()->m_uniqueId < rhs->getBody0()->getBroadphaseHandle()->m_uniqueId) || ((getIslandId(lhs) == getIslandId(rhs)) && (lhs->getBody0()->getBroadphaseHandle()->m_uniqueId == rhs->getBody0()->getBroadphaseHandle()->m_uniqueId) && (lhs->getBody1()->getBroadphaseHandle()->m_uniqueId < rhs->getBody1()->getBroadphaseHandle()->m_uniqueId)));
- }
-};
-
-void btSimulationIslandManager::buildIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld)
-{
- BT_PROFILE("islandUnionFindAndQuickSort");
-
- btCollisionObjectArray& collisionObjects = collisionWorld->getCollisionObjectArray();
-
- m_islandmanifold.resize(0);
-
- //we are going to sort the unionfind array, and store the element id in the size
- //afterwards, we clean unionfind, to make sure no-one uses it anymore
-
- getUnionFind().sortIslands();
- int numElem = getUnionFind().getNumElements();
-
- int endIslandIndex = 1;
- int startIslandIndex;
-
- //update the sleeping state for bodies, if all are sleeping
- for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex)
- {
- int islandId = getUnionFind().getElement(startIslandIndex).m_id;
- for (endIslandIndex = startIslandIndex + 1; (endIslandIndex < numElem) && (getUnionFind().getElement(endIslandIndex).m_id == islandId); endIslandIndex++)
- {
- }
-
- //int numSleeping = 0;
-
- bool allSleeping = true;
-
- int idx;
- for (idx = startIslandIndex; idx < endIslandIndex; idx++)
- {
- int i = getUnionFind().getElement(idx).m_sz;
-
- btCollisionObject* colObj0 = collisionObjects[i];
- if ((colObj0->getIslandTag() != islandId) && (colObj0->getIslandTag() != -1))
- {
- // printf("error in island management\n");
- }
-
- btAssert((colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1));
- if (colObj0->getIslandTag() == islandId)
- {
- if (colObj0->getActivationState() == ACTIVE_TAG ||
- colObj0->getActivationState() == DISABLE_DEACTIVATION)
- {
- allSleeping = false;
- break;
- }
- }
- }
-
- if (allSleeping)
- {
- int idx;
- for (idx = startIslandIndex; idx < endIslandIndex; idx++)
- {
- int i = getUnionFind().getElement(idx).m_sz;
- btCollisionObject* colObj0 = collisionObjects[i];
- if ((colObj0->getIslandTag() != islandId) && (colObj0->getIslandTag() != -1))
- {
- // printf("error in island management\n");
- }
-
- btAssert((colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1));
-
- if (colObj0->getIslandTag() == islandId)
- {
- colObj0->setActivationState(ISLAND_SLEEPING);
- }
- }
- }
- else
- {
- int idx;
- for (idx = startIslandIndex; idx < endIslandIndex; idx++)
- {
- int i = getUnionFind().getElement(idx).m_sz;
-
- btCollisionObject* colObj0 = collisionObjects[i];
- if ((colObj0->getIslandTag() != islandId) && (colObj0->getIslandTag() != -1))
- {
- // printf("error in island management\n");
- }
-
- btAssert((colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1));
-
-
- if (colObj0->getIslandTag() == islandId)
- {
- if (colObj0->getActivationState() == ISLAND_SLEEPING)
- {
- colObj0->setActivationState(WANTS_DEACTIVATION);
- colObj0->setDeactivationTime(0.f);
- }
- }
- }
- }
- }
-
- int i;
- int maxNumManifolds = dispatcher->getNumManifolds();
-
- //#define SPLIT_ISLANDS 1
- //#ifdef SPLIT_ISLANDS
-
- //#endif //SPLIT_ISLANDS
-
- for (i = 0; i < maxNumManifolds; i++)
- {
- btPersistentManifold* manifold = dispatcher->getManifoldByIndexInternal(i);
- if (collisionWorld->getDispatchInfo().m_deterministicOverlappingPairs)
- {
- if (manifold->getNumContacts() == 0)
- continue;
- }
-
- const btCollisionObject* colObj0 = static_cast<const btCollisionObject*>(manifold->getBody0());
- const btCollisionObject* colObj1 = static_cast<const btCollisionObject*>(manifold->getBody1());
-
- ///@todo: check sleeping conditions!
- if (((colObj0) && colObj0->getActivationState() != ISLAND_SLEEPING) ||
- ((colObj1) && colObj1->getActivationState() != ISLAND_SLEEPING))
- {
- //kinematic objects don't merge islands, but wake up all connected objects
- if (colObj0->isKinematicObject() && colObj0->getActivationState() != ISLAND_SLEEPING)
- {
- if (colObj0->hasContactResponse())
- colObj1->activate();
- }
- if (colObj1->isKinematicObject() && colObj1->getActivationState() != ISLAND_SLEEPING)
- {
- if (colObj1->hasContactResponse())
- colObj0->activate();
- }
- if (m_splitIslands)
- {
- //filtering for response
- if (dispatcher->needsResponse(colObj0, colObj1))
- m_islandmanifold.push_back(manifold);
- }
- }
- }
-}
-
-
-///@todo: this is random access, it can be walked 'cache friendly'!
-void btSimulationIslandManager::buildAndProcessIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, IslandCallback* callback)
-{
- buildIslands(dispatcher, collisionWorld);
- processIslands(dispatcher, collisionWorld, callback);
-}
-
-void btSimulationIslandManager::processIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, IslandCallback* callback)
-{
- btCollisionObjectArray& collisionObjects = collisionWorld->getCollisionObjectArray();
- int endIslandIndex = 1;
- int startIslandIndex;
- int numElem = getUnionFind().getNumElements();
-
- BT_PROFILE("processIslands");
-
- if (!m_splitIslands)
- {
- btPersistentManifold** manifold = dispatcher->getInternalManifoldPointer();
- int maxNumManifolds = dispatcher->getNumManifolds();
- callback->processIsland(&collisionObjects[0], collisionObjects.size(), manifold, maxNumManifolds, -1);
- }
- else
- {
- // Sort manifolds, based on islands
- // Sort the vector using predicate and std::sort
- //std::sort(islandmanifold.begin(), islandmanifold.end(), btPersistentManifoldSortPredicate);
-
- int numManifolds = int(m_islandmanifold.size());
-
- //tried a radix sort, but quicksort/heapsort seems still faster
- //@todo rewrite island management
- //btPersistentManifoldSortPredicateDeterministic sorts contact manifolds based on islandid,
- //but also based on object0 unique id and object1 unique id
- if (collisionWorld->getDispatchInfo().m_deterministicOverlappingPairs)
- {
- m_islandmanifold.quickSort(btPersistentManifoldSortPredicateDeterministic());
- }
- else
- {
- m_islandmanifold.quickSort(btPersistentManifoldSortPredicate());
- }
-
- //m_islandmanifold.heapSort(btPersistentManifoldSortPredicate());
-
- //now process all active islands (sets of manifolds for now)
-
- int startManifoldIndex = 0;
- int endManifoldIndex = 1;
-
- //int islandId;
-
- // printf("Start Islands\n");
-
- //traverse the simulation islands, and call the solver, unless all objects are sleeping/deactivated
- for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex)
- {
- int islandId = getUnionFind().getElement(startIslandIndex).m_id;
-
- bool islandSleeping = true;
-
- for (endIslandIndex = startIslandIndex; (endIslandIndex < numElem) && (getUnionFind().getElement(endIslandIndex).m_id == islandId); endIslandIndex++)
- {
- int i = getUnionFind().getElement(endIslandIndex).m_sz;
- btCollisionObject* colObj0 = collisionObjects[i];
- m_islandBodies.push_back(colObj0);
- if (colObj0->isActive())
- islandSleeping = false;
- }
-
- //find the accompanying contact manifold for this islandId
- int numIslandManifolds = 0;
- btPersistentManifold** startManifold = 0;
-
- if (startManifoldIndex < numManifolds)
- {
- int curIslandId = getIslandId(m_islandmanifold[startManifoldIndex]);
- if (curIslandId == islandId)
- {
- startManifold = &m_islandmanifold[startManifoldIndex];
-
- for (endManifoldIndex = startManifoldIndex + 1; (endManifoldIndex < numManifolds) && (islandId == getIslandId(m_islandmanifold[endManifoldIndex])); endManifoldIndex++)
- {
- }
- /// Process the actual simulation, only if not sleeping/deactivated
- numIslandManifolds = endManifoldIndex - startManifoldIndex;
- }
- }
-
- if (!islandSleeping)
- {
- callback->processIsland(&m_islandBodies[0], m_islandBodies.size(), startManifold, numIslandManifolds, islandId);
- // printf("Island callback of size:%d bodies, %d manifolds\n",islandBodies.size(),numIslandManifolds);
- }
-
- if (numIslandManifolds)
- {
- startManifoldIndex = endManifoldIndex;
- }
-
- m_islandBodies.resize(0);
- }
- } // else if(!splitIslands)
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h
deleted file mode 100644
index 197bb457cf..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSimulationIslandManager.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMULATION_ISLAND_MANAGER_H
-#define BT_SIMULATION_ISLAND_MANAGER_H
-
-#include "BulletCollision/CollisionDispatch/btUnionFind.h"
-#include "btCollisionCreateFunc.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "btCollisionObject.h"
-
-class btCollisionObject;
-class btCollisionWorld;
-class btDispatcher;
-class btPersistentManifold;
-
-///SimulationIslandManager creates and handles simulation islands, using btUnionFind
-class btSimulationIslandManager
-{
- btUnionFind m_unionFind;
-
- btAlignedObjectArray<btPersistentManifold*> m_islandmanifold;
- btAlignedObjectArray<btCollisionObject*> m_islandBodies;
-
- bool m_splitIslands;
-
-public:
- btSimulationIslandManager();
- virtual ~btSimulationIslandManager();
-
- void initUnionFind(int n);
-
- btUnionFind& getUnionFind() { return m_unionFind; }
-
- virtual void updateActivationState(btCollisionWorld* colWorld, btDispatcher* dispatcher);
- virtual void storeIslandActivationState(btCollisionWorld* world);
-
- void findUnions(btDispatcher* dispatcher, btCollisionWorld* colWorld);
-
- struct IslandCallback
- {
- virtual ~IslandCallback(){};
-
- virtual void processIsland(btCollisionObject** bodies, int numBodies, class btPersistentManifold** manifolds, int numManifolds, int islandId) = 0;
- };
-
- void buildAndProcessIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, IslandCallback* callback);
-
- void buildIslands(btDispatcher* dispatcher, btCollisionWorld* colWorld);
-
- void processIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld, IslandCallback* callback);
-
- bool getSplitIslands()
- {
- return m_splitIslands;
- }
- void setSplitIslands(bool doSplitIslands)
- {
- m_splitIslands = doSplitIslands;
- }
-};
-
-#endif //BT_SIMULATION_ISLAND_MANAGER_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp
deleted file mode 100644
index bc68b285b8..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,209 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSphereBoxCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-//#include <stdio.h>
-
-btSphereBoxCollisionAlgorithm::btSphereBoxCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap, bool isSwapped)
- : btActivatingCollisionAlgorithm(ci, col0Wrap, col1Wrap),
- m_ownManifold(false),
- m_manifoldPtr(mf),
- m_isSwapped(isSwapped)
-{
- const btCollisionObjectWrapper* sphereObjWrap = m_isSwapped ? col1Wrap : col0Wrap;
- const btCollisionObjectWrapper* boxObjWrap = m_isSwapped ? col0Wrap : col1Wrap;
-
- if (!m_manifoldPtr && m_dispatcher->needsCollision(sphereObjWrap->getCollisionObject(), boxObjWrap->getCollisionObject()))
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(sphereObjWrap->getCollisionObject(), boxObjWrap->getCollisionObject());
- m_ownManifold = true;
- }
-}
-
-btSphereBoxCollisionAlgorithm::~btSphereBoxCollisionAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btSphereBoxCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)dispatchInfo;
- (void)resultOut;
- if (!m_manifoldPtr)
- return;
-
- const btCollisionObjectWrapper* sphereObjWrap = m_isSwapped ? body1Wrap : body0Wrap;
- const btCollisionObjectWrapper* boxObjWrap = m_isSwapped ? body0Wrap : body1Wrap;
-
- btVector3 pOnBox;
-
- btVector3 normalOnSurfaceB;
- btScalar penetrationDepth;
- btVector3 sphereCenter = sphereObjWrap->getWorldTransform().getOrigin();
- const btSphereShape* sphere0 = (const btSphereShape*)sphereObjWrap->getCollisionShape();
- btScalar radius = sphere0->getRadius();
- btScalar maxContactDistance = m_manifoldPtr->getContactBreakingThreshold();
-
- resultOut->setPersistentManifold(m_manifoldPtr);
-
- if (getSphereDistance(boxObjWrap, pOnBox, normalOnSurfaceB, penetrationDepth, sphereCenter, radius, maxContactDistance))
- {
- /// report a contact. internally this will be kept persistent, and contact reduction is done
- resultOut->addContactPoint(normalOnSurfaceB, pOnBox, penetrationDepth);
- }
-
- if (m_ownManifold)
- {
- if (m_manifoldPtr->getNumContacts())
- {
- resultOut->refreshContactPoints();
- }
- }
-}
-
-btScalar btSphereBoxCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- (void)col0;
- (void)col1;
-
- //not yet
- return btScalar(1.);
-}
-
-bool btSphereBoxCollisionAlgorithm::getSphereDistance(const btCollisionObjectWrapper* boxObjWrap, btVector3& pointOnBox, btVector3& normal, btScalar& penetrationDepth, const btVector3& sphereCenter, btScalar fRadius, btScalar maxContactDistance)
-{
- const btBoxShape* boxShape = (const btBoxShape*)boxObjWrap->getCollisionShape();
- btVector3 const& boxHalfExtent = boxShape->getHalfExtentsWithoutMargin();
- btScalar boxMargin = boxShape->getMargin();
- penetrationDepth = 1.0f;
-
- // convert the sphere position to the box's local space
- btTransform const& m44T = boxObjWrap->getWorldTransform();
- btVector3 sphereRelPos = m44T.invXform(sphereCenter);
-
- // Determine the closest point to the sphere center in the box
- btVector3 closestPoint = sphereRelPos;
- closestPoint.setX(btMin(boxHalfExtent.getX(), closestPoint.getX()));
- closestPoint.setX(btMax(-boxHalfExtent.getX(), closestPoint.getX()));
- closestPoint.setY(btMin(boxHalfExtent.getY(), closestPoint.getY()));
- closestPoint.setY(btMax(-boxHalfExtent.getY(), closestPoint.getY()));
- closestPoint.setZ(btMin(boxHalfExtent.getZ(), closestPoint.getZ()));
- closestPoint.setZ(btMax(-boxHalfExtent.getZ(), closestPoint.getZ()));
-
- btScalar intersectionDist = fRadius + boxMargin;
- btScalar contactDist = intersectionDist + maxContactDistance;
- normal = sphereRelPos - closestPoint;
-
- //if there is no penetration, we are done
- btScalar dist2 = normal.length2();
- if (dist2 > contactDist * contactDist)
- {
- return false;
- }
-
- btScalar distance;
-
- //special case if the sphere center is inside the box
- if (dist2 <= SIMD_EPSILON)
- {
- distance = -getSpherePenetration(boxHalfExtent, sphereRelPos, closestPoint, normal);
- }
- else //compute the penetration details
- {
- distance = normal.length();
- normal /= distance;
- }
-
- pointOnBox = closestPoint + normal * boxMargin;
- // v3PointOnSphere = sphereRelPos - (normal * fRadius);
- penetrationDepth = distance - intersectionDist;
-
- // transform back in world space
- btVector3 tmp = m44T(pointOnBox);
- pointOnBox = tmp;
- // tmp = m44T(v3PointOnSphere);
- // v3PointOnSphere = tmp;
- tmp = m44T.getBasis() * normal;
- normal = tmp;
-
- return true;
-}
-
-btScalar btSphereBoxCollisionAlgorithm::getSpherePenetration(btVector3 const& boxHalfExtent, btVector3 const& sphereRelPos, btVector3& closestPoint, btVector3& normal)
-{
- //project the center of the sphere on the closest face of the box
- btScalar faceDist = boxHalfExtent.getX() - sphereRelPos.getX();
- btScalar minDist = faceDist;
- closestPoint.setX(boxHalfExtent.getX());
- normal.setValue(btScalar(1.0f), btScalar(0.0f), btScalar(0.0f));
-
- faceDist = boxHalfExtent.getX() + sphereRelPos.getX();
- if (faceDist < minDist)
- {
- minDist = faceDist;
- closestPoint = sphereRelPos;
- closestPoint.setX(-boxHalfExtent.getX());
- normal.setValue(btScalar(-1.0f), btScalar(0.0f), btScalar(0.0f));
- }
-
- faceDist = boxHalfExtent.getY() - sphereRelPos.getY();
- if (faceDist < minDist)
- {
- minDist = faceDist;
- closestPoint = sphereRelPos;
- closestPoint.setY(boxHalfExtent.getY());
- normal.setValue(btScalar(0.0f), btScalar(1.0f), btScalar(0.0f));
- }
-
- faceDist = boxHalfExtent.getY() + sphereRelPos.getY();
- if (faceDist < minDist)
- {
- minDist = faceDist;
- closestPoint = sphereRelPos;
- closestPoint.setY(-boxHalfExtent.getY());
- normal.setValue(btScalar(0.0f), btScalar(-1.0f), btScalar(0.0f));
- }
-
- faceDist = boxHalfExtent.getZ() - sphereRelPos.getZ();
- if (faceDist < minDist)
- {
- minDist = faceDist;
- closestPoint = sphereRelPos;
- closestPoint.setZ(boxHalfExtent.getZ());
- normal.setValue(btScalar(0.0f), btScalar(0.0f), btScalar(1.0f));
- }
-
- faceDist = boxHalfExtent.getZ() + sphereRelPos.getZ();
- if (faceDist < minDist)
- {
- minDist = faceDist;
- closestPoint = sphereRelPos;
- closestPoint.setZ(-boxHalfExtent.getZ());
- normal.setValue(btScalar(0.0f), btScalar(0.0f), btScalar(-1.0f));
- }
-
- return minDist;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h
deleted file mode 100644
index 3348bc89af..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SPHERE_BOX_COLLISION_ALGORITHM_H
-#define BT_SPHERE_BOX_COLLISION_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-class btPersistentManifold;
-#include "btCollisionDispatcher.h"
-
-#include "LinearMath/btVector3.h"
-
-/// btSphereBoxCollisionAlgorithm provides sphere-box collision detection.
-/// Other features are frame-coherency (persistent data) and collision response.
-class btSphereBoxCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
- bool m_isSwapped;
-
-public:
- btSphereBoxCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- virtual ~btSphereBoxCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- {
- manifoldArray.push_back(m_manifoldPtr);
- }
- }
-
- bool getSphereDistance(const btCollisionObjectWrapper* boxObjWrap, btVector3& v3PointOnBox, btVector3& normal, btScalar& penetrationDepth, const btVector3& v3SphereCenter, btScalar fRadius, btScalar maxContactDistance);
-
- btScalar getSpherePenetration(btVector3 const& boxHalfExtent, btVector3 const& sphereRelPos, btVector3& closestPoint, btVector3& normal);
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereBoxCollisionAlgorithm));
- if (!m_swapped)
- {
- return new (mem) btSphereBoxCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, false);
- }
- else
- {
- return new (mem) btSphereBoxCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, true);
- }
- }
- };
-};
-
-#endif //BT_SPHERE_BOX_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp
deleted file mode 100644
index 7fa0559f97..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#define CLEAR_MANIFOLD 1
-
-#include "btSphereSphereCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-btSphereSphereCollisionAlgorithm::btSphereSphereCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap)
- : btActivatingCollisionAlgorithm(ci, col0Wrap, col1Wrap),
- m_ownManifold(false),
- m_manifoldPtr(mf)
-{
- if (!m_manifoldPtr)
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(col0Wrap->getCollisionObject(), col1Wrap->getCollisionObject());
- m_ownManifold = true;
- }
-}
-
-btSphereSphereCollisionAlgorithm::~btSphereSphereCollisionAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btSphereSphereCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)dispatchInfo;
-
- if (!m_manifoldPtr)
- return;
-
- resultOut->setPersistentManifold(m_manifoldPtr);
-
- btSphereShape* sphere0 = (btSphereShape*)col0Wrap->getCollisionShape();
- btSphereShape* sphere1 = (btSphereShape*)col1Wrap->getCollisionShape();
-
- btVector3 diff = col0Wrap->getWorldTransform().getOrigin() - col1Wrap->getWorldTransform().getOrigin();
- btScalar len = diff.length();
- btScalar radius0 = sphere0->getRadius();
- btScalar radius1 = sphere1->getRadius();
-
-#ifdef CLEAR_MANIFOLD
- m_manifoldPtr->clearManifold(); //don't do this, it disables warmstarting
-#endif
-
- ///iff distance positive, don't generate a new contact
- if (len > (radius0 + radius1 + resultOut->m_closestPointDistanceThreshold))
- {
-#ifndef CLEAR_MANIFOLD
- resultOut->refreshContactPoints();
-#endif //CLEAR_MANIFOLD
- return;
- }
- ///distance (negative means penetration)
- btScalar dist = len - (radius0 + radius1);
-
- btVector3 normalOnSurfaceB(1, 0, 0);
- if (len > SIMD_EPSILON)
- {
- normalOnSurfaceB = diff / len;
- }
-
- ///point on A (worldspace)
- ///btVector3 pos0 = col0->getWorldTransform().getOrigin() - radius0 * normalOnSurfaceB;
- ///point on B (worldspace)
- btVector3 pos1 = col1Wrap->getWorldTransform().getOrigin() + radius1 * normalOnSurfaceB;
-
- /// report a contact. internally this will be kept persistent, and contact reduction is done
-
- resultOut->addContactPoint(normalOnSurfaceB, pos1, dist);
-
-#ifndef CLEAR_MANIFOLD
- resultOut->refreshContactPoints();
-#endif //CLEAR_MANIFOLD
-}
-
-btScalar btSphereSphereCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)col0;
- (void)col1;
- (void)dispatchInfo;
- (void)resultOut;
-
- //not yet
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h
deleted file mode 100644
index b08d0df76d..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SPHERE_SPHERE_COLLISION_ALGORITHM_H
-#define BT_SPHERE_SPHERE_COLLISION_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-#include "btCollisionDispatcher.h"
-
-class btPersistentManifold;
-
-/// btSphereSphereCollisionAlgorithm provides sphere-sphere collision detection.
-/// Other features are frame-coherency (persistent data) and collision response.
-/// Also provides the most basic sample for custom/user btCollisionAlgorithm
-class btSphereSphereCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
-
-public:
- btSphereSphereCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap);
-
- btSphereSphereCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btActivatingCollisionAlgorithm(ci) {}
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- {
- manifoldArray.push_back(m_manifoldPtr);
- }
- }
-
- virtual ~btSphereSphereCollisionAlgorithm();
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereSphereCollisionAlgorithm));
- return new (mem) btSphereSphereCollisionAlgorithm(0, ci, col0Wrap, col1Wrap);
- }
- };
-};
-
-#endif //BT_SPHERE_SPHERE_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp
deleted file mode 100644
index 1bc3056c01..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSphereTriangleCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "SphereTriangleDetector.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-btSphereTriangleCollisionAlgorithm::btSphereTriangleCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool swapped)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap),
- m_ownManifold(false),
- m_manifoldPtr(mf),
- m_swapped(swapped)
-{
- if (!m_manifoldPtr)
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject());
- m_ownManifold = true;
- }
-}
-
-btSphereTriangleCollisionAlgorithm::~btSphereTriangleCollisionAlgorithm()
-{
- if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
-}
-
-void btSphereTriangleCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* col0Wrap, const btCollisionObjectWrapper* col1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- if (!m_manifoldPtr)
- return;
-
- const btCollisionObjectWrapper* sphereObjWrap = m_swapped ? col1Wrap : col0Wrap;
- const btCollisionObjectWrapper* triObjWrap = m_swapped ? col0Wrap : col1Wrap;
-
- btSphereShape* sphere = (btSphereShape*)sphereObjWrap->getCollisionShape();
- btTriangleShape* triangle = (btTriangleShape*)triObjWrap->getCollisionShape();
-
- /// report a contact. internally this will be kept persistent, and contact reduction is done
- resultOut->setPersistentManifold(m_manifoldPtr);
- SphereTriangleDetector detector(sphere, triangle, m_manifoldPtr->getContactBreakingThreshold() + resultOut->m_closestPointDistanceThreshold);
-
- btDiscreteCollisionDetectorInterface::ClosestPointInput input;
- input.m_maximumDistanceSquared = btScalar(BT_LARGE_FLOAT); ///@todo: tighter bounds
- input.m_transformA = sphereObjWrap->getWorldTransform();
- input.m_transformB = triObjWrap->getWorldTransform();
-
- bool swapResults = m_swapped;
-
- detector.getClosestPoints(input, *resultOut, dispatchInfo.m_debugDraw, swapResults);
-
- if (m_ownManifold)
- resultOut->refreshContactPoints();
-}
-
-btScalar btSphereTriangleCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- (void)col0;
- (void)col1;
-
- //not yet
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h
deleted file mode 100644
index d660222f16..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SPHERE_TRIANGLE_COLLISION_ALGORITHM_H
-#define BT_SPHERE_TRIANGLE_COLLISION_ALGORITHM_H
-
-#include "btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-class btPersistentManifold;
-#include "btCollisionDispatcher.h"
-
-/// btSphereSphereCollisionAlgorithm provides sphere-sphere collision detection.
-/// Other features are frame-coherency (persistent data) and collision response.
-/// Also provides the most basic sample for custom/user btCollisionAlgorithm
-class btSphereTriangleCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
- bool m_swapped;
-
-public:
- btSphereTriangleCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool swapped);
-
- btSphereTriangleCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btActivatingCollisionAlgorithm(ci) {}
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- {
- manifoldArray.push_back(m_manifoldPtr);
- }
- }
-
- virtual ~btSphereTriangleCollisionAlgorithm();
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSphereTriangleCollisionAlgorithm));
-
- return new (mem) btSphereTriangleCollisionAlgorithm(ci.m_manifold, ci, body0Wrap, body1Wrap, m_swapped);
- }
- };
-};
-
-#endif //BT_SPHERE_TRIANGLE_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.cpp b/thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.cpp
deleted file mode 100644
index 816bf1e6ad..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.cpp
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btUnionFind.h"
-
-btUnionFind::~btUnionFind()
-{
- Free();
-}
-
-btUnionFind::btUnionFind()
-{
-}
-
-void btUnionFind::allocate(int N)
-{
- m_elements.resize(N);
-}
-void btUnionFind::Free()
-{
- m_elements.clear();
-}
-
-void btUnionFind::reset(int N)
-{
- allocate(N);
-
- for (int i = 0; i < N; i++)
- {
- m_elements[i].m_id = i;
- m_elements[i].m_sz = 1;
- }
-}
-
-class btUnionFindElementSortPredicate
-{
-public:
- bool operator()(const btElement& lhs, const btElement& rhs) const
- {
- return lhs.m_id < rhs.m_id;
- }
-};
-
-///this is a special operation, destroying the content of btUnionFind.
-///it sorts the elements, based on island id, in order to make it easy to iterate over islands
-void btUnionFind::sortIslands()
-{
- //first store the original body index, and islandId
- int numElements = m_elements.size();
-
- for (int i = 0; i < numElements; i++)
- {
- m_elements[i].m_id = find(i);
-#ifndef STATIC_SIMULATION_ISLAND_OPTIMIZATION
- m_elements[i].m_sz = i;
-#endif //STATIC_SIMULATION_ISLAND_OPTIMIZATION
- }
-
- // Sort the vector using predicate and std::sort
- //std::sort(m_elements.begin(), m_elements.end(), btUnionFindElementSortPredicate);
- m_elements.quickSort(btUnionFindElementSortPredicate());
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.h b/thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.h
deleted file mode 100644
index d422ef55eb..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionDispatch/btUnionFind.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_UNION_FIND_H
-#define BT_UNION_FIND_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-
-#define USE_PATH_COMPRESSION 1
-
-///see for discussion of static island optimizations by Vroonsh here: http://code.google.com/p/bullet/issues/detail?id=406
-#define STATIC_SIMULATION_ISLAND_OPTIMIZATION 1
-
-struct btElement
-{
- int m_id;
- int m_sz;
-};
-
-///UnionFind calculates connected subsets
-// Implements weighted Quick Union with path compression
-// optimization: could use short ints instead of ints (halving memory, would limit the number of rigid bodies to 64k, sounds reasonable)
-class btUnionFind
-{
-private:
- btAlignedObjectArray<btElement> m_elements;
-
-public:
- btUnionFind();
- ~btUnionFind();
-
- //this is a special operation, destroying the content of btUnionFind.
- //it sorts the elements, based on island id, in order to make it easy to iterate over islands
- void sortIslands();
-
- void reset(int N);
-
- SIMD_FORCE_INLINE int getNumElements() const
- {
- return int(m_elements.size());
- }
- SIMD_FORCE_INLINE bool isRoot(int x) const
- {
- return (x == m_elements[x].m_id);
- }
-
- btElement& getElement(int index)
- {
- return m_elements[index];
- }
- const btElement& getElement(int index) const
- {
- return m_elements[index];
- }
-
- void allocate(int N);
- void Free();
-
- int find(int p, int q)
- {
- return (find(p) == find(q));
- }
-
- void unite(int p, int q)
- {
- int i = find(p), j = find(q);
- if (i == j)
- return;
-
-#ifndef USE_PATH_COMPRESSION
- //weighted quick union, this keeps the 'trees' balanced, and keeps performance of unite O( log(n) )
- if (m_elements[i].m_sz < m_elements[j].m_sz)
- {
- m_elements[i].m_id = j;
- m_elements[j].m_sz += m_elements[i].m_sz;
- }
- else
- {
- m_elements[j].m_id = i;
- m_elements[i].m_sz += m_elements[j].m_sz;
- }
-#else
- m_elements[i].m_id = j;
- m_elements[j].m_sz += m_elements[i].m_sz;
-#endif //USE_PATH_COMPRESSION
- }
-
- int find(int x)
- {
- //btAssert(x < m_N);
- //btAssert(x >= 0);
-
- while (x != m_elements[x].m_id)
- {
- //not really a reason not to use path compression, and it flattens the trees/improves find performance dramatically
-
-#ifdef USE_PATH_COMPRESSION
- const btElement* elementPtr = &m_elements[m_elements[x].m_id];
- m_elements[x].m_id = elementPtr->m_id;
- x = elementPtr->m_id;
-#else //
- x = m_elements[x].m_id;
-#endif
- //btAssert(x < m_N);
- //btAssert(x >= 0);
- }
- return x;
- }
-};
-
-#endif //BT_UNION_FIND_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.cpp
deleted file mode 100644
index a3d8075daf..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btBox2dShape.h"
-
-//{
-
-void btBox2dShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btTransformAabb(getHalfExtentsWithoutMargin(), getMargin(), t, aabbMin, aabbMax);
-}
-
-void btBox2dShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- //btScalar margin = btScalar(0.);
- btVector3 halfExtents = getHalfExtentsWithMargin();
-
- btScalar lx = btScalar(2.) * (halfExtents.x());
- btScalar ly = btScalar(2.) * (halfExtents.y());
- btScalar lz = btScalar(2.) * (halfExtents.z());
-
- inertia.setValue(mass / (btScalar(12.0)) * (ly * ly + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + ly * ly));
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.h
deleted file mode 100644
index 7e085f9e2e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btBox2dShape.h
+++ /dev/null
@@ -1,339 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_OBB_BOX_2D_SHAPE_H
-#define BT_OBB_BOX_2D_SHAPE_H
-
-#include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btMinMax.h"
-
-///The btBox2dShape is a box primitive around the origin, its sides axis aligned with length specified by half extents, in local shape coordinates. When used as part of a btCollisionObject or btRigidBody it will be an oriented box in world space.
-ATTRIBUTE_ALIGNED16(class)
-btBox2dShape : public btPolyhedralConvexShape
-{
- //btVector3 m_boxHalfExtents1; //use m_implicitShapeDimensions instead
-
- btVector3 m_centroid;
- btVector3 m_vertices[4];
- btVector3 m_normals[4];
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btVector3 getHalfExtentsWithMargin() const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
- btVector3 margin(getMargin(), getMargin(), getMargin());
- halfExtents += margin;
- return halfExtents;
- }
-
- const btVector3& getHalfExtentsWithoutMargin() const
- {
- return m_implicitShapeDimensions; //changed in Bullet 2.63: assume the scaling and margin are included
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
- btVector3 margin(getMargin(), getMargin(), getMargin());
- halfExtents += margin;
-
- return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(vec.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(vec.z(), halfExtents.z(), -halfExtents.z()));
- }
-
- SIMD_FORCE_INLINE btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const
- {
- const btVector3& halfExtents = getHalfExtentsWithoutMargin();
-
- return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(vec.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(vec.z(), halfExtents.z(), -halfExtents.z()));
- }
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
- {
- const btVector3& halfExtents = getHalfExtentsWithoutMargin();
-
- for (int i = 0; i < numVectors; i++)
- {
- const btVector3& vec = vectors[i];
- supportVerticesOut[i].setValue(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(vec.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(vec.z(), halfExtents.z(), -halfExtents.z()));
- }
- }
-
- ///a btBox2dShape is a flat 2D box in the X-Y plane (Z extents are zero)
- btBox2dShape(const btVector3& boxHalfExtents)
- : btPolyhedralConvexShape(),
- m_centroid(0, 0, 0)
- {
- m_vertices[0].setValue(-boxHalfExtents.getX(), -boxHalfExtents.getY(), 0);
- m_vertices[1].setValue(boxHalfExtents.getX(), -boxHalfExtents.getY(), 0);
- m_vertices[2].setValue(boxHalfExtents.getX(), boxHalfExtents.getY(), 0);
- m_vertices[3].setValue(-boxHalfExtents.getX(), boxHalfExtents.getY(), 0);
-
- m_normals[0].setValue(0, -1, 0);
- m_normals[1].setValue(1, 0, 0);
- m_normals[2].setValue(0, 1, 0);
- m_normals[3].setValue(-1, 0, 0);
-
- btScalar minDimension = boxHalfExtents.getX();
- if (minDimension > boxHalfExtents.getY())
- minDimension = boxHalfExtents.getY();
-
- m_shapeType = BOX_2D_SHAPE_PROXYTYPE;
- btVector3 margin(getMargin(), getMargin(), getMargin());
- m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin;
-
- setSafeMargin(minDimension);
- };
-
- virtual void setMargin(btScalar collisionMargin)
- {
- //correct the m_implicitShapeDimensions for the margin
- btVector3 oldMargin(getMargin(), getMargin(), getMargin());
- btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin;
-
- btConvexInternalShape::setMargin(collisionMargin);
- btVector3 newMargin(getMargin(), getMargin(), getMargin());
- m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin;
- }
- virtual void setLocalScaling(const btVector3& scaling)
- {
- btVector3 oldMargin(getMargin(), getMargin(), getMargin());
- btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin;
- btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling;
-
- btConvexInternalShape::setLocalScaling(scaling);
-
- m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin;
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- int getVertexCount() const
- {
- return 4;
- }
-
- virtual int getNumVertices() const
- {
- return 4;
- }
-
- const btVector3* getVertices() const
- {
- return &m_vertices[0];
- }
-
- const btVector3* getNormals() const
- {
- return &m_normals[0];
- }
-
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const
- {
- //this plane might not be aligned...
- btVector4 plane;
- getPlaneEquation(plane, i);
- planeNormal = btVector3(plane.getX(), plane.getY(), plane.getZ());
- planeSupport = localGetSupportingVertex(-planeNormal);
- }
-
- const btVector3& getCentroid() const
- {
- return m_centroid;
- }
-
- virtual int getNumPlanes() const
- {
- return 6;
- }
-
- virtual int getNumEdges() const
- {
- return 12;
- }
-
- virtual void getVertex(int i, btVector3& vtx) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
-
- vtx = btVector3(
- halfExtents.x() * (1 - (i & 1)) - halfExtents.x() * (i & 1),
- halfExtents.y() * (1 - ((i & 2) >> 1)) - halfExtents.y() * ((i & 2) >> 1),
- halfExtents.z() * (1 - ((i & 4) >> 2)) - halfExtents.z() * ((i & 4) >> 2));
- }
-
- virtual void getPlaneEquation(btVector4 & plane, int i) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
-
- switch (i)
- {
- case 0:
- plane.setValue(btScalar(1.), btScalar(0.), btScalar(0.), -halfExtents.x());
- break;
- case 1:
- plane.setValue(btScalar(-1.), btScalar(0.), btScalar(0.), -halfExtents.x());
- break;
- case 2:
- plane.setValue(btScalar(0.), btScalar(1.), btScalar(0.), -halfExtents.y());
- break;
- case 3:
- plane.setValue(btScalar(0.), btScalar(-1.), btScalar(0.), -halfExtents.y());
- break;
- case 4:
- plane.setValue(btScalar(0.), btScalar(0.), btScalar(1.), -halfExtents.z());
- break;
- case 5:
- plane.setValue(btScalar(0.), btScalar(0.), btScalar(-1.), -halfExtents.z());
- break;
- default:
- btAssert(0);
- }
- }
-
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const
- //virtual void getEdge(int i,Edge& edge) const
- {
- int edgeVert0 = 0;
- int edgeVert1 = 0;
-
- switch (i)
- {
- case 0:
- edgeVert0 = 0;
- edgeVert1 = 1;
- break;
- case 1:
- edgeVert0 = 0;
- edgeVert1 = 2;
- break;
- case 2:
- edgeVert0 = 1;
- edgeVert1 = 3;
-
- break;
- case 3:
- edgeVert0 = 2;
- edgeVert1 = 3;
- break;
- case 4:
- edgeVert0 = 0;
- edgeVert1 = 4;
- break;
- case 5:
- edgeVert0 = 1;
- edgeVert1 = 5;
-
- break;
- case 6:
- edgeVert0 = 2;
- edgeVert1 = 6;
- break;
- case 7:
- edgeVert0 = 3;
- edgeVert1 = 7;
- break;
- case 8:
- edgeVert0 = 4;
- edgeVert1 = 5;
- break;
- case 9:
- edgeVert0 = 4;
- edgeVert1 = 6;
- break;
- case 10:
- edgeVert0 = 5;
- edgeVert1 = 7;
- break;
- case 11:
- edgeVert0 = 6;
- edgeVert1 = 7;
- break;
- default:
- btAssert(0);
- }
-
- getVertex(edgeVert0, pa);
- getVertex(edgeVert1, pb);
- }
-
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
-
- //btScalar minDist = 2*tolerance;
-
- bool result = (pt.x() <= (halfExtents.x() + tolerance)) &&
- (pt.x() >= (-halfExtents.x() - tolerance)) &&
- (pt.y() <= (halfExtents.y() + tolerance)) &&
- (pt.y() >= (-halfExtents.y() - tolerance)) &&
- (pt.z() <= (halfExtents.z() + tolerance)) &&
- (pt.z() >= (-halfExtents.z() - tolerance));
-
- return result;
- }
-
- //debugging
- virtual const char* getName() const
- {
- return "Box2d";
- }
-
- virtual int getNumPreferredPenetrationDirections() const
- {
- return 6;
- }
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const
- {
- switch (index)
- {
- case 0:
- penetrationVector.setValue(btScalar(1.), btScalar(0.), btScalar(0.));
- break;
- case 1:
- penetrationVector.setValue(btScalar(-1.), btScalar(0.), btScalar(0.));
- break;
- case 2:
- penetrationVector.setValue(btScalar(0.), btScalar(1.), btScalar(0.));
- break;
- case 3:
- penetrationVector.setValue(btScalar(0.), btScalar(-1.), btScalar(0.));
- break;
- case 4:
- penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(1.));
- break;
- case 5:
- penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(-1.));
- break;
- default:
- btAssert(0);
- }
- }
-};
-
-#endif //BT_OBB_BOX_2D_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.cpp
deleted file mode 100644
index cb91d023e4..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.cpp
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#include "btBoxShape.h"
-
-btBoxShape::btBoxShape(const btVector3& boxHalfExtents)
- : btPolyhedralConvexShape()
-{
- m_shapeType = BOX_SHAPE_PROXYTYPE;
-
- btVector3 margin(getMargin(), getMargin(), getMargin());
- m_implicitShapeDimensions = (boxHalfExtents * m_localScaling) - margin;
-
- setSafeMargin(boxHalfExtents);
-};
-
-void btBoxShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btTransformAabb(getHalfExtentsWithoutMargin(), getMargin(), t, aabbMin, aabbMax);
-}
-
-void btBoxShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- //btScalar margin = btScalar(0.);
- btVector3 halfExtents = getHalfExtentsWithMargin();
-
- btScalar lx = btScalar(2.) * (halfExtents.x());
- btScalar ly = btScalar(2.) * (halfExtents.y());
- btScalar lz = btScalar(2.) * (halfExtents.z());
-
- inertia.setValue(mass / (btScalar(12.0)) * (ly * ly + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + ly * ly));
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.h
deleted file mode 100644
index 3c65505d5b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btBoxShape.h
+++ /dev/null
@@ -1,291 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_OBB_BOX_MINKOWSKI_H
-#define BT_OBB_BOX_MINKOWSKI_H
-
-#include "btPolyhedralConvexShape.h"
-#include "btCollisionMargin.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btMinMax.h"
-
-///The btBoxShape is a box primitive around the origin, its sides axis aligned with length specified by half extents, in local shape coordinates. When used as part of a btCollisionObject or btRigidBody it will be an oriented box in world space.
-ATTRIBUTE_ALIGNED16(class)
-btBoxShape : public btPolyhedralConvexShape
-{
- //btVector3 m_boxHalfExtents1; //use m_implicitShapeDimensions instead
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btVector3 getHalfExtentsWithMargin() const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
- btVector3 margin(getMargin(), getMargin(), getMargin());
- halfExtents += margin;
- return halfExtents;
- }
-
- const btVector3& getHalfExtentsWithoutMargin() const
- {
- return m_implicitShapeDimensions; //scaling is included, margin is not
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
- btVector3 margin(getMargin(), getMargin(), getMargin());
- halfExtents += margin;
-
- return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(vec.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(vec.z(), halfExtents.z(), -halfExtents.z()));
- }
-
- SIMD_FORCE_INLINE btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const
- {
- const btVector3& halfExtents = getHalfExtentsWithoutMargin();
-
- return btVector3(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(vec.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(vec.z(), halfExtents.z(), -halfExtents.z()));
- }
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
- {
- const btVector3& halfExtents = getHalfExtentsWithoutMargin();
-
- for (int i = 0; i < numVectors; i++)
- {
- const btVector3& vec = vectors[i];
- supportVerticesOut[i].setValue(btFsels(vec.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(vec.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(vec.z(), halfExtents.z(), -halfExtents.z()));
- }
- }
-
- btBoxShape(const btVector3& boxHalfExtents);
-
- virtual void setMargin(btScalar collisionMargin)
- {
- //correct the m_implicitShapeDimensions for the margin
- btVector3 oldMargin(getMargin(), getMargin(), getMargin());
- btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin;
-
- btConvexInternalShape::setMargin(collisionMargin);
- btVector3 newMargin(getMargin(), getMargin(), getMargin());
- m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin;
- }
- virtual void setLocalScaling(const btVector3& scaling)
- {
- btVector3 oldMargin(getMargin(), getMargin(), getMargin());
- btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin;
- btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling;
-
- btConvexInternalShape::setLocalScaling(scaling);
-
- m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin;
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const
- {
- //this plane might not be aligned...
- btVector4 plane;
- getPlaneEquation(plane, i);
- planeNormal = btVector3(plane.getX(), plane.getY(), plane.getZ());
- planeSupport = localGetSupportingVertex(-planeNormal);
- }
-
- virtual int getNumPlanes() const
- {
- return 6;
- }
-
- virtual int getNumVertices() const
- {
- return 8;
- }
-
- virtual int getNumEdges() const
- {
- return 12;
- }
-
- virtual void getVertex(int i, btVector3& vtx) const
- {
- btVector3 halfExtents = getHalfExtentsWithMargin();
-
- vtx = btVector3(
- halfExtents.x() * (1 - (i & 1)) - halfExtents.x() * (i & 1),
- halfExtents.y() * (1 - ((i & 2) >> 1)) - halfExtents.y() * ((i & 2) >> 1),
- halfExtents.z() * (1 - ((i & 4) >> 2)) - halfExtents.z() * ((i & 4) >> 2));
- }
-
- virtual void getPlaneEquation(btVector4 & plane, int i) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
-
- switch (i)
- {
- case 0:
- plane.setValue(btScalar(1.), btScalar(0.), btScalar(0.), -halfExtents.x());
- break;
- case 1:
- plane.setValue(btScalar(-1.), btScalar(0.), btScalar(0.), -halfExtents.x());
- break;
- case 2:
- plane.setValue(btScalar(0.), btScalar(1.), btScalar(0.), -halfExtents.y());
- break;
- case 3:
- plane.setValue(btScalar(0.), btScalar(-1.), btScalar(0.), -halfExtents.y());
- break;
- case 4:
- plane.setValue(btScalar(0.), btScalar(0.), btScalar(1.), -halfExtents.z());
- break;
- case 5:
- plane.setValue(btScalar(0.), btScalar(0.), btScalar(-1.), -halfExtents.z());
- break;
- default:
- btAssert(0);
- }
- }
-
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const
- //virtual void getEdge(int i,Edge& edge) const
- {
- int edgeVert0 = 0;
- int edgeVert1 = 0;
-
- switch (i)
- {
- case 0:
- edgeVert0 = 0;
- edgeVert1 = 1;
- break;
- case 1:
- edgeVert0 = 0;
- edgeVert1 = 2;
- break;
- case 2:
- edgeVert0 = 1;
- edgeVert1 = 3;
-
- break;
- case 3:
- edgeVert0 = 2;
- edgeVert1 = 3;
- break;
- case 4:
- edgeVert0 = 0;
- edgeVert1 = 4;
- break;
- case 5:
- edgeVert0 = 1;
- edgeVert1 = 5;
-
- break;
- case 6:
- edgeVert0 = 2;
- edgeVert1 = 6;
- break;
- case 7:
- edgeVert0 = 3;
- edgeVert1 = 7;
- break;
- case 8:
- edgeVert0 = 4;
- edgeVert1 = 5;
- break;
- case 9:
- edgeVert0 = 4;
- edgeVert1 = 6;
- break;
- case 10:
- edgeVert0 = 5;
- edgeVert1 = 7;
- break;
- case 11:
- edgeVert0 = 6;
- edgeVert1 = 7;
- break;
- default:
- btAssert(0);
- }
-
- getVertex(edgeVert0, pa);
- getVertex(edgeVert1, pb);
- }
-
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
-
- //btScalar minDist = 2*tolerance;
-
- bool result = (pt.x() <= (halfExtents.x() + tolerance)) &&
- (pt.x() >= (-halfExtents.x() - tolerance)) &&
- (pt.y() <= (halfExtents.y() + tolerance)) &&
- (pt.y() >= (-halfExtents.y() - tolerance)) &&
- (pt.z() <= (halfExtents.z() + tolerance)) &&
- (pt.z() >= (-halfExtents.z() - tolerance));
-
- return result;
- }
-
- //debugging
- virtual const char* getName() const
- {
- return "Box";
- }
-
- virtual int getNumPreferredPenetrationDirections() const
- {
- return 6;
- }
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const
- {
- switch (index)
- {
- case 0:
- penetrationVector.setValue(btScalar(1.), btScalar(0.), btScalar(0.));
- break;
- case 1:
- penetrationVector.setValue(btScalar(-1.), btScalar(0.), btScalar(0.));
- break;
- case 2:
- penetrationVector.setValue(btScalar(0.), btScalar(1.), btScalar(0.));
- break;
- case 3:
- penetrationVector.setValue(btScalar(0.), btScalar(-1.), btScalar(0.));
- break;
- case 4:
- penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(1.));
- break;
- case 5:
- penetrationVector.setValue(btScalar(0.), btScalar(0.), btScalar(-1.));
- break;
- default:
- btAssert(0);
- }
- }
-};
-
-#endif //BT_OBB_BOX_MINKOWSKI_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp
deleted file mode 100644
index c66ce58e3e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//#define DISABLE_BVH
-
-#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btOptimizedBvh.h"
-#include "LinearMath/btSerializer.h"
-
-///Bvh Concave triangle mesh is a static-triangle mesh shape with Bounding Volume Hierarchy optimization.
-///Uses an interface to access the triangles to allow for sharing graphics/physics triangles.
-btBvhTriangleMeshShape::btBvhTriangleMeshShape(btStridingMeshInterface* meshInterface, bool useQuantizedAabbCompression, bool buildBvh)
- : btTriangleMeshShape(meshInterface),
- m_bvh(0),
- m_triangleInfoMap(0),
- m_useQuantizedAabbCompression(useQuantizedAabbCompression),
- m_ownsBvh(false)
-{
- m_shapeType = TRIANGLE_MESH_SHAPE_PROXYTYPE;
- //construct bvh from meshInterface
-#ifndef DISABLE_BVH
-
- if (buildBvh)
- {
- buildOptimizedBvh();
- }
-
-#endif //DISABLE_BVH
-}
-
-btBvhTriangleMeshShape::btBvhTriangleMeshShape(btStridingMeshInterface* meshInterface, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax, bool buildBvh)
- : btTriangleMeshShape(meshInterface),
- m_bvh(0),
- m_triangleInfoMap(0),
- m_useQuantizedAabbCompression(useQuantizedAabbCompression),
- m_ownsBvh(false)
-{
- m_shapeType = TRIANGLE_MESH_SHAPE_PROXYTYPE;
- //construct bvh from meshInterface
-#ifndef DISABLE_BVH
-
- if (buildBvh)
- {
- void* mem = btAlignedAlloc(sizeof(btOptimizedBvh), 16);
- m_bvh = new (mem) btOptimizedBvh();
-
- m_bvh->build(meshInterface, m_useQuantizedAabbCompression, bvhAabbMin, bvhAabbMax);
- m_ownsBvh = true;
- }
-
-#endif //DISABLE_BVH
-}
-
-void btBvhTriangleMeshShape::partialRefitTree(const btVector3& aabbMin, const btVector3& aabbMax)
-{
- m_bvh->refitPartial(m_meshInterface, aabbMin, aabbMax);
-
- m_localAabbMin.setMin(aabbMin);
- m_localAabbMax.setMax(aabbMax);
-}
-
-void btBvhTriangleMeshShape::refitTree(const btVector3& aabbMin, const btVector3& aabbMax)
-{
- m_bvh->refit(m_meshInterface, aabbMin, aabbMax);
-
- recalcLocalAabb();
-}
-
-btBvhTriangleMeshShape::~btBvhTriangleMeshShape()
-{
- if (m_ownsBvh)
- {
- m_bvh->~btOptimizedBvh();
- btAlignedFree(m_bvh);
- }
-}
-
-void btBvhTriangleMeshShape::performRaycast(btTriangleCallback* callback, const btVector3& raySource, const btVector3& rayTarget)
-{
- struct MyNodeOverlapCallback : public btNodeOverlapCallback
- {
- btStridingMeshInterface* m_meshInterface;
- btTriangleCallback* m_callback;
-
- MyNodeOverlapCallback(btTriangleCallback* callback, btStridingMeshInterface* meshInterface)
- : m_meshInterface(meshInterface),
- m_callback(callback)
- {
- }
-
- virtual void processNode(int nodeSubPart, int nodeTriangleIndex)
- {
- btVector3 m_triangle[3];
- const unsigned char* vertexbase;
- int numverts;
- PHY_ScalarType type;
- int stride;
- const unsigned char* indexbase;
- int indexstride;
- int numfaces;
- PHY_ScalarType indicestype;
-
- m_meshInterface->getLockedReadOnlyVertexIndexBase(
- &vertexbase,
- numverts,
- type,
- stride,
- &indexbase,
- indexstride,
- numfaces,
- indicestype,
- nodeSubPart);
-
- unsigned int* gfxbase = (unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
-
- const btVector3& meshScaling = m_meshInterface->getScaling();
- for (int j = 2; j >= 0; j--)
- {
- int graphicsindex;
- switch (indicestype) {
- case PHY_INTEGER: graphicsindex = gfxbase[j]; break;
- case PHY_SHORT: graphicsindex = ((unsigned short*)gfxbase)[j]; break;
- case PHY_UCHAR: graphicsindex = ((unsigned char*)gfxbase)[j]; break;
- default: btAssert(0);
- }
-
- if (type == PHY_FLOAT)
- {
- float* graphicsbase = (float*)(vertexbase + graphicsindex * stride);
-
- m_triangle[j] = btVector3(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- }
- else
- {
- double* graphicsbase = (double*)(vertexbase + graphicsindex * stride);
-
- m_triangle[j] = btVector3(btScalar(graphicsbase[0]) * meshScaling.getX(), btScalar(graphicsbase[1]) * meshScaling.getY(), btScalar(graphicsbase[2]) * meshScaling.getZ());
- }
- }
-
- /* Perform ray vs. triangle collision here */
- m_callback->processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
- m_meshInterface->unLockReadOnlyVertexBase(nodeSubPart);
- }
- };
-
- MyNodeOverlapCallback myNodeCallback(callback, m_meshInterface);
-
- m_bvh->reportRayOverlappingNodex(&myNodeCallback, raySource, rayTarget);
-}
-
-void btBvhTriangleMeshShape::performConvexcast(btTriangleCallback* callback, const btVector3& raySource, const btVector3& rayTarget, const btVector3& aabbMin, const btVector3& aabbMax)
-{
- struct MyNodeOverlapCallback : public btNodeOverlapCallback
- {
- btStridingMeshInterface* m_meshInterface;
- btTriangleCallback* m_callback;
-
- MyNodeOverlapCallback(btTriangleCallback* callback, btStridingMeshInterface* meshInterface)
- : m_meshInterface(meshInterface),
- m_callback(callback)
- {
- }
-
- virtual void processNode(int nodeSubPart, int nodeTriangleIndex)
- {
- btVector3 m_triangle[3];
- const unsigned char* vertexbase;
- int numverts;
- PHY_ScalarType type;
- int stride;
- const unsigned char* indexbase;
- int indexstride;
- int numfaces;
- PHY_ScalarType indicestype;
-
- m_meshInterface->getLockedReadOnlyVertexIndexBase(
- &vertexbase,
- numverts,
- type,
- stride,
- &indexbase,
- indexstride,
- numfaces,
- indicestype,
- nodeSubPart);
-
- unsigned int* gfxbase = (unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
-
- const btVector3& meshScaling = m_meshInterface->getScaling();
- for (int j = 2; j >= 0; j--)
- {
- int graphicsindex;
- switch (indicestype) {
- case PHY_INTEGER: graphicsindex = gfxbase[j]; break;
- case PHY_SHORT: graphicsindex = ((unsigned short*)gfxbase)[j]; break;
- case PHY_UCHAR: graphicsindex = ((unsigned char*)gfxbase)[j]; break;
- default: btAssert(0);
- }
-
- if (type == PHY_FLOAT)
- {
- float* graphicsbase = (float*)(vertexbase + graphicsindex * stride);
-
- m_triangle[j] = btVector3(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- }
- else
- {
- double* graphicsbase = (double*)(vertexbase + graphicsindex * stride);
-
- m_triangle[j] = btVector3(btScalar(graphicsbase[0]) * meshScaling.getX(), btScalar(graphicsbase[1]) * meshScaling.getY(), btScalar(graphicsbase[2]) * meshScaling.getZ());
- }
- }
-
- /* Perform ray vs. triangle collision here */
- m_callback->processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
- m_meshInterface->unLockReadOnlyVertexBase(nodeSubPart);
- }
- };
-
- MyNodeOverlapCallback myNodeCallback(callback, m_meshInterface);
-
- m_bvh->reportBoxCastOverlappingNodex(&myNodeCallback, raySource, rayTarget, aabbMin, aabbMax);
-}
-
-//perform bvh tree traversal and report overlapping triangles to 'callback'
-void btBvhTriangleMeshShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
-#ifdef DISABLE_BVH
- //brute force traverse all triangles
- btTriangleMeshShape::processAllTriangles(callback, aabbMin, aabbMax);
-#else
-
- //first get all the nodes
-
- struct MyNodeOverlapCallback : public btNodeOverlapCallback
- {
- btStridingMeshInterface* m_meshInterface;
- btTriangleCallback* m_callback;
- btVector3 m_triangle[3];
- int m_numOverlap;
-
- MyNodeOverlapCallback(btTriangleCallback* callback, btStridingMeshInterface* meshInterface)
- : m_meshInterface(meshInterface),
- m_callback(callback),
- m_numOverlap(0)
- {
- }
-
- virtual void processNode(int nodeSubPart, int nodeTriangleIndex)
- {
- m_numOverlap++;
- const unsigned char* vertexbase;
- int numverts;
- PHY_ScalarType type;
- int stride;
- const unsigned char* indexbase;
- int indexstride;
- int numfaces;
- PHY_ScalarType indicestype;
-
- m_meshInterface->getLockedReadOnlyVertexIndexBase(
- &vertexbase,
- numverts,
- type,
- stride,
- &indexbase,
- indexstride,
- numfaces,
- indicestype,
- nodeSubPart);
-
- unsigned int* gfxbase = (unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
- btAssert(indicestype == PHY_INTEGER || indicestype == PHY_SHORT || indicestype == PHY_UCHAR);
-
- const btVector3& meshScaling = m_meshInterface->getScaling();
- for (int j = 2; j >= 0; j--)
- {
- int graphicsindex = indicestype == PHY_SHORT ? ((unsigned short*)gfxbase)[j] : indicestype == PHY_INTEGER ? gfxbase[j] : ((unsigned char*)gfxbase)[j];
-
-#ifdef DEBUG_TRIANGLE_MESH
- printf("%d ,", graphicsindex);
-#endif //DEBUG_TRIANGLE_MESH
- if (type == PHY_FLOAT)
- {
- float* graphicsbase = (float*)(vertexbase + graphicsindex * stride);
-
- m_triangle[j] = btVector3(
- graphicsbase[0] * meshScaling.getX(),
- graphicsbase[1] * meshScaling.getY(),
- graphicsbase[2] * meshScaling.getZ());
- }
- else
- {
- double* graphicsbase = (double*)(vertexbase + graphicsindex * stride);
-
- m_triangle[j] = btVector3(
- btScalar(graphicsbase[0]) * meshScaling.getX(),
- btScalar(graphicsbase[1]) * meshScaling.getY(),
- btScalar(graphicsbase[2]) * meshScaling.getZ());
- }
-#ifdef DEBUG_TRIANGLE_MESH
- printf("triangle vertices:%f,%f,%f\n", triangle[j].x(), triangle[j].y(), triangle[j].z());
-#endif //DEBUG_TRIANGLE_MESH
- }
-
- m_callback->processTriangle(m_triangle, nodeSubPart, nodeTriangleIndex);
- m_meshInterface->unLockReadOnlyVertexBase(nodeSubPart);
- }
- };
-
- MyNodeOverlapCallback myNodeCallback(callback, m_meshInterface);
-
- m_bvh->reportAabbOverlappingNodex(&myNodeCallback, aabbMin, aabbMax);
-
-#endif //DISABLE_BVH
-}
-
-void btBvhTriangleMeshShape::setLocalScaling(const btVector3& scaling)
-{
- if ((getLocalScaling() - scaling).length2() > SIMD_EPSILON)
- {
- btTriangleMeshShape::setLocalScaling(scaling);
- buildOptimizedBvh();
- }
-}
-
-void btBvhTriangleMeshShape::buildOptimizedBvh()
-{
- if (m_ownsBvh)
- {
- m_bvh->~btOptimizedBvh();
- btAlignedFree(m_bvh);
- }
- ///m_localAabbMin/m_localAabbMax is already re-calculated in btTriangleMeshShape. We could just scale aabb, but this needs some more work
- void* mem = btAlignedAlloc(sizeof(btOptimizedBvh), 16);
- m_bvh = new (mem) btOptimizedBvh();
- //rebuild the bvh...
- m_bvh->build(m_meshInterface, m_useQuantizedAabbCompression, m_localAabbMin, m_localAabbMax);
- m_ownsBvh = true;
-}
-
-void btBvhTriangleMeshShape::setOptimizedBvh(btOptimizedBvh* bvh, const btVector3& scaling)
-{
- btAssert(!m_bvh);
- btAssert(!m_ownsBvh);
-
- m_bvh = bvh;
- m_ownsBvh = false;
- // update the scaling without rebuilding the bvh
- if ((getLocalScaling() - scaling).length2() > SIMD_EPSILON)
- {
- btTriangleMeshShape::setLocalScaling(scaling);
- }
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btBvhTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btTriangleMeshShapeData* trimeshData = (btTriangleMeshShapeData*)dataBuffer;
-
- btCollisionShape::serialize(&trimeshData->m_collisionShapeData, serializer);
-
- m_meshInterface->serialize(&trimeshData->m_meshInterface, serializer);
-
- trimeshData->m_collisionMargin = float(m_collisionMargin);
-
- if (m_bvh && !(serializer->getSerializationFlags() & BT_SERIALIZE_NO_BVH))
- {
- void* chunk = serializer->findPointer(m_bvh);
- if (chunk)
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- trimeshData->m_quantizedDoubleBvh = (btQuantizedBvhData*)chunk;
- trimeshData->m_quantizedFloatBvh = 0;
-#else
- trimeshData->m_quantizedFloatBvh = (btQuantizedBvhData*)chunk;
- trimeshData->m_quantizedDoubleBvh = 0;
-#endif //BT_USE_DOUBLE_PRECISION
- }
- else
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- trimeshData->m_quantizedDoubleBvh = (btQuantizedBvhData*)serializer->getUniquePointer(m_bvh);
- trimeshData->m_quantizedFloatBvh = 0;
-#else
- trimeshData->m_quantizedFloatBvh = (btQuantizedBvhData*)serializer->getUniquePointer(m_bvh);
- trimeshData->m_quantizedDoubleBvh = 0;
-#endif //BT_USE_DOUBLE_PRECISION
-
- int sz = m_bvh->calculateSerializeBufferSizeNew();
- btChunk* chunk = serializer->allocate(sz, 1);
- const char* structType = m_bvh->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_QUANTIZED_BVH_CODE, m_bvh);
- }
- }
- else
- {
- trimeshData->m_quantizedFloatBvh = 0;
- trimeshData->m_quantizedDoubleBvh = 0;
- }
-
- if (m_triangleInfoMap && !(serializer->getSerializationFlags() & BT_SERIALIZE_NO_TRIANGLEINFOMAP))
- {
- void* chunk = serializer->findPointer(m_triangleInfoMap);
- if (chunk)
- {
- trimeshData->m_triangleInfoMap = (btTriangleInfoMapData*)chunk;
- }
- else
- {
- trimeshData->m_triangleInfoMap = (btTriangleInfoMapData*)serializer->getUniquePointer(m_triangleInfoMap);
- int sz = m_triangleInfoMap->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(sz, 1);
- const char* structType = m_triangleInfoMap->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_TRIANLGE_INFO_MAP, m_triangleInfoMap);
- }
- }
- else
- {
- trimeshData->m_triangleInfoMap = 0;
- }
-
- // Fill padding with zeros to appease msan.
- memset(trimeshData->m_pad3, 0, sizeof(trimeshData->m_pad3));
-
- return "btTriangleMeshShapeData";
-}
-
-void btBvhTriangleMeshShape::serializeSingleBvh(btSerializer* serializer) const
-{
- if (m_bvh)
- {
- int len = m_bvh->calculateSerializeBufferSizeNew(); //make sure not to use calculateSerializeBufferSize because it is used for in-place
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = m_bvh->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_QUANTIZED_BVH_CODE, (void*)m_bvh);
- }
-}
-
-void btBvhTriangleMeshShape::serializeSingleTriangleInfoMap(btSerializer* serializer) const
-{
- if (m_triangleInfoMap)
- {
- int len = m_triangleInfoMap->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = m_triangleInfoMap->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_TRIANLGE_INFO_MAP, (void*)m_triangleInfoMap);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h
deleted file mode 100644
index 8b2f2ee85e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_BVH_TRIANGLE_MESH_SHAPE_H
-#define BT_BVH_TRIANGLE_MESH_SHAPE_H
-
-#include "btTriangleMeshShape.h"
-#include "btOptimizedBvh.h"
-#include "LinearMath/btAlignedAllocator.h"
-#include "btTriangleInfoMap.h"
-
-///The btBvhTriangleMeshShape is a static-triangle mesh shape, it can only be used for fixed/non-moving objects.
-///If you required moving concave triangle meshes, it is recommended to perform convex decomposition
-///using HACD, see Bullet/Demos/ConvexDecompositionDemo.
-///Alternatively, you can use btGimpactMeshShape for moving concave triangle meshes.
-///btBvhTriangleMeshShape has several optimizations, such as bounding volume hierarchy and
-///cache friendly traversal for PlayStation 3 Cell SPU.
-///It is recommended to enable useQuantizedAabbCompression for better memory usage.
-///It takes a triangle mesh as input, for example a btTriangleMesh or btTriangleIndexVertexArray. The btBvhTriangleMeshShape class allows for triangle mesh deformations by a refit or partialRefit method.
-///Instead of building the bounding volume hierarchy acceleration structure, it is also possible to serialize (save) and deserialize (load) the structure from disk.
-///See Demos\ConcaveDemo\ConcavePhysicsDemo.cpp for an example.
-ATTRIBUTE_ALIGNED16(class)
-btBvhTriangleMeshShape : public btTriangleMeshShape
-{
- btOptimizedBvh* m_bvh;
- btTriangleInfoMap* m_triangleInfoMap;
-
- bool m_useQuantizedAabbCompression;
- bool m_ownsBvh;
-#ifdef __clang__
- bool m_pad[11] __attribute__((unused)); ////need padding due to alignment
-#else
- bool m_pad[11]; ////need padding due to alignment
-#endif
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btBvhTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, bool buildBvh = true);
-
- ///optionally pass in a larger bvh aabb, used for quantization. This allows for deformations within this aabb
- btBvhTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax, bool buildBvh = true);
-
- virtual ~btBvhTriangleMeshShape();
-
- bool getOwnsBvh() const
- {
- return m_ownsBvh;
- }
-
- void performRaycast(btTriangleCallback * callback, const btVector3& raySource, const btVector3& rayTarget);
- void performConvexcast(btTriangleCallback * callback, const btVector3& boxSource, const btVector3& boxTarget, const btVector3& boxMin, const btVector3& boxMax);
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- void refitTree(const btVector3& aabbMin, const btVector3& aabbMax);
-
- ///for a fast incremental refit of parts of the tree. Note: the entire AABB of the tree will become more conservative, it never shrinks
- void partialRefitTree(const btVector3& aabbMin, const btVector3& aabbMax);
-
- //debugging
- virtual const char* getName() const { return "BVHTRIANGLEMESH"; }
-
- virtual void setLocalScaling(const btVector3& scaling);
-
- btOptimizedBvh* getOptimizedBvh()
- {
- return m_bvh;
- }
-
- void setOptimizedBvh(btOptimizedBvh * bvh, const btVector3& localScaling = btVector3(1, 1, 1));
-
- void buildOptimizedBvh();
-
- bool usesQuantizedAabbCompression() const
- {
- return m_useQuantizedAabbCompression;
- }
-
- void setTriangleInfoMap(btTriangleInfoMap * triangleInfoMap)
- {
- m_triangleInfoMap = triangleInfoMap;
- }
-
- const btTriangleInfoMap* getTriangleInfoMap() const
- {
- return m_triangleInfoMap;
- }
-
- btTriangleInfoMap* getTriangleInfoMap()
- {
- return m_triangleInfoMap;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-
- virtual void serializeSingleBvh(btSerializer * serializer) const;
-
- virtual void serializeSingleTriangleInfoMap(btSerializer * serializer) const;
-};
-
-// clang-format off
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btTriangleMeshShapeData
-{
- btCollisionShapeData m_collisionShapeData;
-
- btStridingMeshInterfaceData m_meshInterface;
-
- btQuantizedBvhFloatData *m_quantizedFloatBvh;
- btQuantizedBvhDoubleData *m_quantizedDoubleBvh;
-
- btTriangleInfoMapData *m_triangleInfoMap;
-
- float m_collisionMargin;
-
- char m_pad3[4];
-
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btBvhTriangleMeshShape::calculateSerializeBufferSize() const
-{
- return sizeof(btTriangleMeshShapeData);
-}
-
-#endif //BT_BVH_TRIANGLE_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.cpp
deleted file mode 100644
index 7c33774284..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.cpp
+++ /dev/null
@@ -1,148 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCapsuleShape.h"
-
-#include "LinearMath/btQuaternion.h"
-
-btCapsuleShape::btCapsuleShape(btScalar radius, btScalar height) : btConvexInternalShape()
-{
- m_collisionMargin = radius;
- m_shapeType = CAPSULE_SHAPE_PROXYTYPE;
- m_upAxis = 1;
- m_implicitShapeDimensions.setValue(radius, 0.5f * height, radius);
-}
-
-btVector3 btCapsuleShape::localGetSupportingVertexWithoutMargin(const btVector3& vec0) const
-{
- btVector3 supVec(0, 0, 0);
-
- btScalar maxDot(btScalar(-BT_LARGE_FLOAT));
-
- btVector3 vec = vec0;
- btScalar lenSqr = vec.length2();
- if (lenSqr < btScalar(0.0001))
- {
- vec.setValue(1, 0, 0);
- }
- else
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- vec *= rlen;
- }
-
- btVector3 vtx;
- btScalar newDot;
-
- {
- btVector3 pos(0, 0, 0);
- pos[getUpAxis()] = getHalfHeight();
-
- vtx = pos;
- newDot = vec.dot(vtx);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supVec = vtx;
- }
- }
- {
- btVector3 pos(0, 0, 0);
- pos[getUpAxis()] = -getHalfHeight();
-
- vtx = pos;
- newDot = vec.dot(vtx);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supVec = vtx;
- }
- }
-
- return supVec;
-}
-
-void btCapsuleShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int j = 0; j < numVectors; j++)
- {
- btScalar maxDot(btScalar(-BT_LARGE_FLOAT));
- const btVector3& vec = vectors[j];
-
- btVector3 vtx;
- btScalar newDot;
- {
- btVector3 pos(0, 0, 0);
- pos[getUpAxis()] = getHalfHeight();
- vtx = pos;
- newDot = vec.dot(vtx);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supportVerticesOut[j] = vtx;
- }
- }
- {
- btVector3 pos(0, 0, 0);
- pos[getUpAxis()] = -getHalfHeight();
- vtx = pos;
- newDot = vec.dot(vtx);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supportVerticesOut[j] = vtx;
- }
- }
- }
-}
-
-void btCapsuleShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- //as an approximation, take the inertia of the box that bounds the spheres
-
- btTransform ident;
- ident.setIdentity();
-
- btScalar radius = getRadius();
-
- btVector3 halfExtents(radius, radius, radius);
- halfExtents[getUpAxis()] += getHalfHeight();
-
- btScalar lx = btScalar(2.) * (halfExtents[0]);
- btScalar ly = btScalar(2.) * (halfExtents[1]);
- btScalar lz = btScalar(2.) * (halfExtents[2]);
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(.08333333);
-
- inertia[0] = scaledmass * (y2 + z2);
- inertia[1] = scaledmass * (x2 + z2);
- inertia[2] = scaledmass * (x2 + y2);
-}
-
-btCapsuleShapeX::btCapsuleShapeX(btScalar radius, btScalar height)
-{
- m_collisionMargin = radius;
- m_upAxis = 0;
- m_implicitShapeDimensions.setValue(0.5f * height, radius, radius);
-}
-
-btCapsuleShapeZ::btCapsuleShapeZ(btScalar radius, btScalar height)
-{
- m_collisionMargin = radius;
- m_upAxis = 2;
- m_implicitShapeDimensions.setValue(radius, radius, 0.5f * height);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h
deleted file mode 100644
index 138d0c0f7c..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCapsuleShape.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CAPSULE_SHAPE_H
-#define BT_CAPSULE_SHAPE_H
-
-#include "btConvexInternalShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-///The btCapsuleShape represents a capsule around the Y axis, there is also the btCapsuleShapeX aligned around the X axis and btCapsuleShapeZ around the Z axis.
-///The total height is height+2*radius, so the height is just the height between the center of each 'sphere' of the capsule caps.
-///The btCapsuleShape is a convex hull of two spheres. The btMultiSphereShape is a more general collision shape that takes the convex hull of multiple sphere, so it can also represent a capsule when just using two spheres.
-ATTRIBUTE_ALIGNED16(class)
-btCapsuleShape : public btConvexInternalShape
-{
-protected:
- int m_upAxis;
-
-protected:
- ///only used for btCapsuleShapeZ and btCapsuleShapeX subclasses.
- btCapsuleShape() : btConvexInternalShape() { m_shapeType = CAPSULE_SHAPE_PROXYTYPE; };
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btCapsuleShape(btScalar radius, btScalar height);
-
- ///CollisionShape Interface
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- /// btConvexShape Interface
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void setMargin(btScalar collisionMargin)
- {
- //don't override the margin for capsules, their entire radius == margin
- (void)collisionMargin;
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- btVector3 halfExtents(getRadius(), getRadius(), getRadius());
- halfExtents[m_upAxis] = getRadius() + getHalfHeight();
- btMatrix3x3 abs_b = t.getBasis().absolute();
- btVector3 center = t.getOrigin();
- btVector3 extent = halfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
-
- aabbMin = center - extent;
- aabbMax = center + extent;
- }
-
- virtual const char* getName() const
- {
- return "CapsuleShape";
- }
-
- int getUpAxis() const
- {
- return m_upAxis;
- }
-
- btScalar getRadius() const
- {
- int radiusAxis = (m_upAxis + 2) % 3;
- return m_implicitShapeDimensions[radiusAxis];
- }
-
- btScalar getHalfHeight() const
- {
- return m_implicitShapeDimensions[m_upAxis];
- }
-
- virtual void setLocalScaling(const btVector3& scaling)
- {
- btVector3 unScaledImplicitShapeDimensions = m_implicitShapeDimensions / m_localScaling;
- btConvexInternalShape::setLocalScaling(scaling);
- m_implicitShapeDimensions = (unScaledImplicitShapeDimensions * scaling);
- //update m_collisionMargin, since entire radius==margin
- int radiusAxis = (m_upAxis + 2) % 3;
- m_collisionMargin = m_implicitShapeDimensions[radiusAxis];
- }
-
- virtual btVector3 getAnisotropicRollingFrictionDirection() const
- {
- btVector3 aniDir(0, 0, 0);
- aniDir[getUpAxis()] = 1;
- return aniDir;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-
- SIMD_FORCE_INLINE void deSerializeFloat(struct btCapsuleShapeData * dataBuffer);
-};
-
-///btCapsuleShapeX represents a capsule around the Z axis
-///the total height is height+2*radius, so the height is just the height between the center of each 'sphere' of the capsule caps.
-class btCapsuleShapeX : public btCapsuleShape
-{
-public:
- btCapsuleShapeX(btScalar radius, btScalar height);
-
- //debugging
- virtual const char* getName() const
- {
- return "CapsuleX";
- }
-};
-
-///btCapsuleShapeZ represents a capsule around the Z axis
-///the total height is height+2*radius, so the height is just the height between the center of each 'sphere' of the capsule caps.
-class btCapsuleShapeZ : public btCapsuleShape
-{
-public:
- btCapsuleShapeZ(btScalar radius, btScalar height);
-
- //debugging
- virtual const char* getName() const
- {
- return "CapsuleZ";
- }
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCapsuleShapeData
-{
- btConvexInternalShapeData m_convexInternalShapeData;
-
- int m_upAxis;
-
- char m_padding[4];
-};
-
-SIMD_FORCE_INLINE int btCapsuleShape::calculateSerializeBufferSize() const
-{
- return sizeof(btCapsuleShapeData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btCapsuleShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btCapsuleShapeData* shapeData = (btCapsuleShapeData*)dataBuffer;
-
- btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
-
- shapeData->m_upAxis = m_upAxis;
-
- // Fill padding with zeros to appease msan.
- shapeData->m_padding[0] = 0;
- shapeData->m_padding[1] = 0;
- shapeData->m_padding[2] = 0;
- shapeData->m_padding[3] = 0;
-
- return "btCapsuleShapeData";
-}
-
-SIMD_FORCE_INLINE void btCapsuleShape::deSerializeFloat(btCapsuleShapeData* dataBuffer)
-{
- m_implicitShapeDimensions.deSerializeFloat(dataBuffer->m_convexInternalShapeData.m_implicitShapeDimensions);
- m_collisionMargin = dataBuffer->m_convexInternalShapeData.m_collisionMargin;
- m_localScaling.deSerializeFloat(dataBuffer->m_convexInternalShapeData.m_localScaling);
- //it is best to already pre-allocate the matching btCapsuleShape*(X/Z) version to match m_upAxis
- m_upAxis = dataBuffer->m_upAxis;
-}
-
-#endif //BT_CAPSULE_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h
deleted file mode 100644
index abd8ab3eb5..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionMargin.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_MARGIN_H
-#define BT_COLLISION_MARGIN_H
-
-///The CONVEX_DISTANCE_MARGIN is a default collision margin for convex collision shapes derived from btConvexInternalShape.
-///This collision margin is used by Gjk and some other algorithms
-///Note that when creating small objects, you need to make sure to set a smaller collision margin, using the 'setMargin' API
-#define CONVEX_DISTANCE_MARGIN btScalar(0.04) // btScalar(0.1)//;//btScalar(0.01)
-
-#endif //BT_COLLISION_MARGIN_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.cpp
deleted file mode 100644
index 0b3640a65b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.cpp
+++ /dev/null
@@ -1,119 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "LinearMath/btSerializer.h"
-
-/*
- Make sure this dummy function never changes so that it
- can be used by probes that are checking whether the
- library is actually installed.
-*/
-extern "C"
-{
- void btBulletCollisionProbe();
-
- void btBulletCollisionProbe() {}
-}
-
-void btCollisionShape::getBoundingSphere(btVector3& center, btScalar& radius) const
-{
- btTransform tr;
- tr.setIdentity();
- btVector3 aabbMin, aabbMax;
-
- getAabb(tr, aabbMin, aabbMax);
-
- radius = (aabbMax - aabbMin).length() * btScalar(0.5);
- center = (aabbMin + aabbMax) * btScalar(0.5);
-}
-
-btScalar btCollisionShape::getContactBreakingThreshold(btScalar defaultContactThreshold) const
-{
- return getAngularMotionDisc() * defaultContactThreshold;
-}
-
-btScalar btCollisionShape::getAngularMotionDisc() const
-{
- ///@todo cache this value, to improve performance
- btVector3 center;
- btScalar disc;
- getBoundingSphere(center, disc);
- disc += (center).length();
- return disc;
-}
-
-void btCollisionShape::calculateTemporalAabb(const btTransform& curTrans, const btVector3& linvel, const btVector3& angvel, btScalar timeStep, btVector3& temporalAabbMin, btVector3& temporalAabbMax) const
-{
- //start with static aabb
- getAabb(curTrans, temporalAabbMin, temporalAabbMax);
-
- btScalar temporalAabbMaxx = temporalAabbMax.getX();
- btScalar temporalAabbMaxy = temporalAabbMax.getY();
- btScalar temporalAabbMaxz = temporalAabbMax.getZ();
- btScalar temporalAabbMinx = temporalAabbMin.getX();
- btScalar temporalAabbMiny = temporalAabbMin.getY();
- btScalar temporalAabbMinz = temporalAabbMin.getZ();
-
- // add linear motion
- btVector3 linMotion = linvel * timeStep;
- ///@todo: simd would have a vector max/min operation, instead of per-element access
- if (linMotion.x() > btScalar(0.))
- temporalAabbMaxx += linMotion.x();
- else
- temporalAabbMinx += linMotion.x();
- if (linMotion.y() > btScalar(0.))
- temporalAabbMaxy += linMotion.y();
- else
- temporalAabbMiny += linMotion.y();
- if (linMotion.z() > btScalar(0.))
- temporalAabbMaxz += linMotion.z();
- else
- temporalAabbMinz += linMotion.z();
-
- //add conservative angular motion
- btScalar angularMotion = angvel.length() * getAngularMotionDisc() * timeStep;
- btVector3 angularMotion3d(angularMotion, angularMotion, angularMotion);
- temporalAabbMin = btVector3(temporalAabbMinx, temporalAabbMiny, temporalAabbMinz);
- temporalAabbMax = btVector3(temporalAabbMaxx, temporalAabbMaxy, temporalAabbMaxz);
-
- temporalAabbMin -= angularMotion3d;
- temporalAabbMax += angularMotion3d;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btCollisionShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btCollisionShapeData* shapeData = (btCollisionShapeData*)dataBuffer;
- char* name = (char*)serializer->findNameForPointer(this);
- shapeData->m_name = (char*)serializer->getUniquePointer(name);
- if (shapeData->m_name)
- {
- serializer->serializeName(name);
- }
- shapeData->m_shapeType = m_shapeType;
-
- // Fill padding with zeros to appease msan.
- memset(shapeData->m_padding, 0, sizeof(shapeData->m_padding));
-
- return "btCollisionShapeData";
-}
-
-void btCollisionShape::serializeSingleShape(btSerializer* serializer) const
-{
- int len = calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_SHAPE_CODE, (void*)this);
-} \ No newline at end of file
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.h
deleted file mode 100644
index 16f9e0c77a..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCollisionShape.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COLLISION_SHAPE_H
-#define BT_COLLISION_SHAPE_H
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" //for the shape types
-class btSerializer;
-
-///The btCollisionShape class provides an interface for collision shapes that can be shared among btCollisionObjects.
-ATTRIBUTE_ALIGNED16(class)
-btCollisionShape
-{
-protected:
- int m_shapeType;
- void* m_userPointer;
- int m_userIndex;
- int m_userIndex2;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btCollisionShape() : m_shapeType(INVALID_SHAPE_PROXYTYPE), m_userPointer(0), m_userIndex(-1), m_userIndex2(-1)
- {
- }
-
- virtual ~btCollisionShape()
- {
- }
-
- ///getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t.
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const = 0;
-
- virtual void getBoundingSphere(btVector3 & center, btScalar & radius) const;
-
- ///getAngularMotionDisc returns the maximum radius needed for Conservative Advancement to handle time-of-impact with rotations.
- virtual btScalar getAngularMotionDisc() const;
-
- virtual btScalar getContactBreakingThreshold(btScalar defaultContactThresholdFactor) const;
-
- ///calculateTemporalAabb calculates the enclosing aabb for the moving object over interval [0..timeStep)
- ///result is conservative
- void calculateTemporalAabb(const btTransform& curTrans, const btVector3& linvel, const btVector3& angvel, btScalar timeStep, btVector3& temporalAabbMin, btVector3& temporalAabbMax) const;
-
- SIMD_FORCE_INLINE bool isPolyhedral() const
- {
- return btBroadphaseProxy::isPolyhedral(getShapeType());
- }
-
- SIMD_FORCE_INLINE bool isConvex2d() const
- {
- return btBroadphaseProxy::isConvex2d(getShapeType());
- }
-
- SIMD_FORCE_INLINE bool isConvex() const
- {
- return btBroadphaseProxy::isConvex(getShapeType());
- }
- SIMD_FORCE_INLINE bool isNonMoving() const
- {
- return btBroadphaseProxy::isNonMoving(getShapeType());
- }
- SIMD_FORCE_INLINE bool isConcave() const
- {
- return btBroadphaseProxy::isConcave(getShapeType());
- }
- SIMD_FORCE_INLINE bool isCompound() const
- {
- return btBroadphaseProxy::isCompound(getShapeType());
- }
-
- SIMD_FORCE_INLINE bool isSoftBody() const
- {
- return btBroadphaseProxy::isSoftBody(getShapeType());
- }
-
- ///isInfinite is used to catch simulation error (aabb check)
- SIMD_FORCE_INLINE bool isInfinite() const
- {
- return btBroadphaseProxy::isInfinite(getShapeType());
- }
-
-#ifndef __SPU__
- virtual void setLocalScaling(const btVector3& scaling) = 0;
- virtual const btVector3& getLocalScaling() const = 0;
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const = 0;
-
- //debugging support
- virtual const char* getName() const = 0;
-#endif //__SPU__
-
- int getShapeType() const
- {
- return m_shapeType;
- }
-
- ///the getAnisotropicRollingFrictionDirection can be used in combination with setAnisotropicFriction
- ///See Bullet/Demos/RollingFrictionDemo for an example
- virtual btVector3 getAnisotropicRollingFrictionDirection() const
- {
- return btVector3(1, 1, 1);
- }
- virtual void setMargin(btScalar margin) = 0;
- virtual btScalar getMargin() const = 0;
-
- ///optional user data pointer
- void setUserPointer(void* userPtr)
- {
- m_userPointer = userPtr;
- }
-
- void* getUserPointer() const
- {
- return m_userPointer;
- }
- void setUserIndex(int index)
- {
- m_userIndex = index;
- }
-
- int getUserIndex() const
- {
- return m_userIndex;
- }
-
- void setUserIndex2(int index)
- {
- m_userIndex2 = index;
- }
-
- int getUserIndex2() const
- {
- return m_userIndex2;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-
- virtual void serializeSingleShape(btSerializer * serializer) const;
-};
-
-// clang-format off
-// parser needs * with the name
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCollisionShapeData
-{
- char *m_name;
- int m_shapeType;
- char m_padding[4];
-};
-// clang-format on
-SIMD_FORCE_INLINE int btCollisionShape::calculateSerializeBufferSize() const
-{
- return sizeof(btCollisionShapeData);
-}
-
-#endif //BT_COLLISION_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.cpp
deleted file mode 100644
index fd7828b104..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.cpp
+++ /dev/null
@@ -1,335 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCompoundShape.h"
-#include "btCollisionShape.h"
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-#include "LinearMath/btSerializer.h"
-
-btCompoundShape::btCompoundShape(bool enableDynamicAabbTree, const int initialChildCapacity)
- : m_localAabbMin(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT)),
- m_localAabbMax(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT)),
- m_dynamicAabbTree(0),
- m_updateRevision(1),
- m_collisionMargin(btScalar(0.)),
- m_localScaling(btScalar(1.), btScalar(1.), btScalar(1.))
-{
- m_shapeType = COMPOUND_SHAPE_PROXYTYPE;
-
- if (enableDynamicAabbTree)
- {
- void* mem = btAlignedAlloc(sizeof(btDbvt), 16);
- m_dynamicAabbTree = new (mem) btDbvt();
- btAssert(mem == m_dynamicAabbTree);
- }
-
- m_children.reserve(initialChildCapacity);
-}
-
-btCompoundShape::~btCompoundShape()
-{
- if (m_dynamicAabbTree)
- {
- m_dynamicAabbTree->~btDbvt();
- btAlignedFree(m_dynamicAabbTree);
- }
-}
-
-void btCompoundShape::addChildShape(const btTransform& localTransform, btCollisionShape* shape)
-{
- m_updateRevision++;
- //m_childTransforms.push_back(localTransform);
- //m_childShapes.push_back(shape);
- btCompoundShapeChild child;
- child.m_node = 0;
- child.m_transform = localTransform;
- child.m_childShape = shape;
- child.m_childShapeType = shape->getShapeType();
- child.m_childMargin = shape->getMargin();
-
- //extend the local aabbMin/aabbMax
- btVector3 localAabbMin, localAabbMax;
- shape->getAabb(localTransform, localAabbMin, localAabbMax);
- for (int i = 0; i < 3; i++)
- {
- if (m_localAabbMin[i] > localAabbMin[i])
- {
- m_localAabbMin[i] = localAabbMin[i];
- }
- if (m_localAabbMax[i] < localAabbMax[i])
- {
- m_localAabbMax[i] = localAabbMax[i];
- }
- }
- if (m_dynamicAabbTree)
- {
- const btDbvtVolume bounds = btDbvtVolume::FromMM(localAabbMin, localAabbMax);
- size_t index = m_children.size();
- child.m_node = m_dynamicAabbTree->insert(bounds, reinterpret_cast<void*>(index));
- }
-
- m_children.push_back(child);
-}
-
-void btCompoundShape::updateChildTransform(int childIndex, const btTransform& newChildTransform, bool shouldRecalculateLocalAabb)
-{
- m_children[childIndex].m_transform = newChildTransform;
-
- if (m_dynamicAabbTree)
- {
- ///update the dynamic aabb tree
- btVector3 localAabbMin, localAabbMax;
- m_children[childIndex].m_childShape->getAabb(newChildTransform, localAabbMin, localAabbMax);
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- bounds = btDbvtVolume::FromMM(localAabbMin, localAabbMax);
- //int index = m_children.size()-1;
- m_dynamicAabbTree->update(m_children[childIndex].m_node, bounds);
- }
-
- if (shouldRecalculateLocalAabb)
- {
- recalculateLocalAabb();
- }
-}
-
-void btCompoundShape::removeChildShapeByIndex(int childShapeIndex)
-{
- m_updateRevision++;
- btAssert(childShapeIndex >= 0 && childShapeIndex < m_children.size());
- if (m_dynamicAabbTree)
- {
- m_dynamicAabbTree->remove(m_children[childShapeIndex].m_node);
- }
- m_children.swap(childShapeIndex, m_children.size() - 1);
- if (m_dynamicAabbTree)
- m_children[childShapeIndex].m_node->dataAsInt = childShapeIndex;
- m_children.pop_back();
-}
-
-void btCompoundShape::removeChildShape(btCollisionShape* shape)
-{
- m_updateRevision++;
- // Find the children containing the shape specified, and remove those children.
- //note: there might be multiple children using the same shape!
- for (int i = m_children.size() - 1; i >= 0; i--)
- {
- if (m_children[i].m_childShape == shape)
- {
- removeChildShapeByIndex(i);
- }
- }
-
- recalculateLocalAabb();
-}
-
-void btCompoundShape::recalculateLocalAabb()
-{
- // Recalculate the local aabb
- // Brute force, it iterates over all the shapes left.
-
- m_localAabbMin = btVector3(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_localAabbMax = btVector3(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
-
- //extend the local aabbMin/aabbMax
- for (int j = 0; j < m_children.size(); j++)
- {
- btVector3 localAabbMin, localAabbMax;
- m_children[j].m_childShape->getAabb(m_children[j].m_transform, localAabbMin, localAabbMax);
- for (int i = 0; i < 3; i++)
- {
- if (m_localAabbMin[i] > localAabbMin[i])
- m_localAabbMin[i] = localAabbMin[i];
- if (m_localAabbMax[i] < localAabbMax[i])
- m_localAabbMax[i] = localAabbMax[i];
- }
- }
-}
-
-///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
-void btCompoundShape::getAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btVector3 localHalfExtents = btScalar(0.5) * (m_localAabbMax - m_localAabbMin);
- btVector3 localCenter = btScalar(0.5) * (m_localAabbMax + m_localAabbMin);
-
- //avoid an illegal AABB when there are no children
- if (!m_children.size())
- {
- localHalfExtents.setValue(0, 0, 0);
- localCenter.setValue(0, 0, 0);
- }
- localHalfExtents += btVector3(getMargin(), getMargin(), getMargin());
-
- btMatrix3x3 abs_b = trans.getBasis().absolute();
-
- btVector3 center = trans(localCenter);
-
- btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMin = center - extent;
- aabbMax = center + extent;
-}
-
-void btCompoundShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- //approximation: take the inertia from the aabb for now
- btTransform ident;
- ident.setIdentity();
- btVector3 aabbMin, aabbMax;
- getAabb(ident, aabbMin, aabbMax);
-
- btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5);
-
- btScalar lx = btScalar(2.) * (halfExtents.x());
- btScalar ly = btScalar(2.) * (halfExtents.y());
- btScalar lz = btScalar(2.) * (halfExtents.z());
-
- inertia[0] = mass / (btScalar(12.0)) * (ly * ly + lz * lz);
- inertia[1] = mass / (btScalar(12.0)) * (lx * lx + lz * lz);
- inertia[2] = mass / (btScalar(12.0)) * (lx * lx + ly * ly);
-}
-
-void btCompoundShape::calculatePrincipalAxisTransform(const btScalar* masses, btTransform& principal, btVector3& inertia) const
-{
- int n = m_children.size();
-
- btScalar totalMass = 0;
- btVector3 center(0, 0, 0);
- int k;
-
- for (k = 0; k < n; k++)
- {
- btAssert(masses[k] > 0);
- center += m_children[k].m_transform.getOrigin() * masses[k];
- totalMass += masses[k];
- }
-
- btAssert(totalMass > 0);
-
- center /= totalMass;
- principal.setOrigin(center);
-
- btMatrix3x3 tensor(0, 0, 0, 0, 0, 0, 0, 0, 0);
- for (k = 0; k < n; k++)
- {
- btVector3 i;
- m_children[k].m_childShape->calculateLocalInertia(masses[k], i);
-
- const btTransform& t = m_children[k].m_transform;
- btVector3 o = t.getOrigin() - center;
-
- //compute inertia tensor in coordinate system of compound shape
- btMatrix3x3 j = t.getBasis().transpose();
- j[0] *= i[0];
- j[1] *= i[1];
- j[2] *= i[2];
- j = t.getBasis() * j;
-
- //add inertia tensor
- tensor[0] += j[0];
- tensor[1] += j[1];
- tensor[2] += j[2];
-
- //compute inertia tensor of pointmass at o
- btScalar o2 = o.length2();
- j[0].setValue(o2, 0, 0);
- j[1].setValue(0, o2, 0);
- j[2].setValue(0, 0, o2);
- j[0] += o * -o.x();
- j[1] += o * -o.y();
- j[2] += o * -o.z();
-
- //add inertia tensor of pointmass
- tensor[0] += masses[k] * j[0];
- tensor[1] += masses[k] * j[1];
- tensor[2] += masses[k] * j[2];
- }
-
- tensor.diagonalize(principal.getBasis(), btScalar(0.00001), 20);
- inertia.setValue(tensor[0][0], tensor[1][1], tensor[2][2]);
-}
-
-void btCompoundShape::setLocalScaling(const btVector3& scaling)
-{
- for (int i = 0; i < m_children.size(); i++)
- {
- btTransform childTrans = getChildTransform(i);
- btVector3 childScale = m_children[i].m_childShape->getLocalScaling();
- // childScale = childScale * (childTrans.getBasis() * scaling);
- childScale = childScale * scaling / m_localScaling;
- m_children[i].m_childShape->setLocalScaling(childScale);
- childTrans.setOrigin((childTrans.getOrigin()) * scaling / m_localScaling);
- updateChildTransform(i, childTrans, false);
- }
-
- m_localScaling = scaling;
- recalculateLocalAabb();
-}
-
-void btCompoundShape::createAabbTreeFromChildren()
-{
- if (!m_dynamicAabbTree)
- {
- void* mem = btAlignedAlloc(sizeof(btDbvt), 16);
- m_dynamicAabbTree = new (mem) btDbvt();
- btAssert(mem == m_dynamicAabbTree);
-
- for (int index = 0; index < m_children.size(); index++)
- {
- btCompoundShapeChild& child = m_children[index];
-
- //extend the local aabbMin/aabbMax
- btVector3 localAabbMin, localAabbMax;
- child.m_childShape->getAabb(child.m_transform, localAabbMin, localAabbMax);
-
- const btDbvtVolume bounds = btDbvtVolume::FromMM(localAabbMin, localAabbMax);
- size_t index2 = index;
- child.m_node = m_dynamicAabbTree->insert(bounds, reinterpret_cast<void*>(index2));
- }
- }
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btCompoundShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btCompoundShapeData* shapeData = (btCompoundShapeData*)dataBuffer;
- btCollisionShape::serialize(&shapeData->m_collisionShapeData, serializer);
-
- shapeData->m_collisionMargin = float(m_collisionMargin);
- shapeData->m_numChildShapes = m_children.size();
- shapeData->m_childShapePtr = 0;
- if (shapeData->m_numChildShapes)
- {
- btChunk* chunk = serializer->allocate(sizeof(btCompoundShapeChildData), shapeData->m_numChildShapes);
- btCompoundShapeChildData* memPtr = (btCompoundShapeChildData*)chunk->m_oldPtr;
- shapeData->m_childShapePtr = (btCompoundShapeChildData*)serializer->getUniquePointer(memPtr);
-
- for (int i = 0; i < shapeData->m_numChildShapes; i++, memPtr++)
- {
- memPtr->m_childMargin = float(m_children[i].m_childMargin);
- memPtr->m_childShape = (btCollisionShapeData*)serializer->getUniquePointer(m_children[i].m_childShape);
- //don't serialize shapes that already have been serialized
- if (!serializer->findPointer(m_children[i].m_childShape))
- {
- btChunk* chunk = serializer->allocate(m_children[i].m_childShape->calculateSerializeBufferSize(), 1);
- const char* structType = m_children[i].m_childShape->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_SHAPE_CODE, m_children[i].m_childShape);
- }
-
- memPtr->m_childShapeType = m_children[i].m_childShapeType;
- m_children[i].m_transform.serializeFloat(memPtr->m_transform);
- }
- serializer->finalizeChunk(chunk, "btCompoundShapeChildData", BT_ARRAY_CODE, chunk->m_oldPtr);
- }
- return "btCompoundShapeData";
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.h
deleted file mode 100644
index 7e2d0eb817..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCompoundShape.h
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_COMPOUND_SHAPE_H
-#define BT_COMPOUND_SHAPE_H
-
-#include "btCollisionShape.h"
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "btCollisionMargin.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-//class btOptimizedBvh;
-struct btDbvt;
-
-ATTRIBUTE_ALIGNED16(struct)
-btCompoundShapeChild
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btTransform m_transform;
- btCollisionShape* m_childShape;
- int m_childShapeType;
- btScalar m_childMargin;
- struct btDbvtNode* m_node;
-};
-
-SIMD_FORCE_INLINE bool operator==(const btCompoundShapeChild& c1, const btCompoundShapeChild& c2)
-{
- return (c1.m_transform == c2.m_transform &&
- c1.m_childShape == c2.m_childShape &&
- c1.m_childShapeType == c2.m_childShapeType &&
- c1.m_childMargin == c2.m_childMargin);
-}
-
-/// The btCompoundShape allows to store multiple other btCollisionShapes
-/// This allows for moving concave collision objects. This is more general then the static concave btBvhTriangleMeshShape.
-/// It has an (optional) dynamic aabb tree to accelerate early rejection tests.
-/// @todo: This aabb tree can also be use to speed up ray tests on btCompoundShape, see http://code.google.com/p/bullet/issues/detail?id=25
-/// Currently, removal of child shapes is only supported when disabling the aabb tree (pass 'false' in the constructor of btCompoundShape)
-ATTRIBUTE_ALIGNED16(class)
-btCompoundShape : public btCollisionShape
-{
-protected:
- btAlignedObjectArray<btCompoundShapeChild> m_children;
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
-
- btDbvt* m_dynamicAabbTree;
-
- ///increment m_updateRevision when adding/removing/replacing child shapes, so that some caches can be updated
- int m_updateRevision;
-
- btScalar m_collisionMargin;
-
- btVector3 m_localScaling;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- explicit btCompoundShape(bool enableDynamicAabbTree = true, const int initialChildCapacity = 0);
-
- virtual ~btCompoundShape();
-
- void addChildShape(const btTransform& localTransform, btCollisionShape* shape);
-
- /// Remove all children shapes that contain the specified shape
- virtual void removeChildShape(btCollisionShape * shape);
-
- void removeChildShapeByIndex(int childShapeindex);
-
- int getNumChildShapes() const
- {
- return int(m_children.size());
- }
-
- btCollisionShape* getChildShape(int index)
- {
- return m_children[index].m_childShape;
- }
- const btCollisionShape* getChildShape(int index) const
- {
- return m_children[index].m_childShape;
- }
-
- btTransform& getChildTransform(int index)
- {
- return m_children[index].m_transform;
- }
- const btTransform& getChildTransform(int index) const
- {
- return m_children[index].m_transform;
- }
-
- ///set a new transform for a child, and update internal data structures (local aabb and dynamic tree)
- void updateChildTransform(int childIndex, const btTransform& newChildTransform, bool shouldRecalculateLocalAabb = true);
-
- btCompoundShapeChild* getChildList()
- {
- return &m_children[0];
- }
-
- ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- /** Re-calculate the local Aabb. Is called at the end of removeChildShapes.
- Use this yourself if you modify the children or their transforms. */
- virtual void recalculateLocalAabb();
-
- virtual void setLocalScaling(const btVector3& scaling);
-
- virtual const btVector3& getLocalScaling() const
- {
- return m_localScaling;
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void setMargin(btScalar margin)
- {
- m_collisionMargin = margin;
- }
- virtual btScalar getMargin() const
- {
- return m_collisionMargin;
- }
- virtual const char* getName() const
- {
- return "Compound";
- }
-
- const btDbvt* getDynamicAabbTree() const
- {
- return m_dynamicAabbTree;
- }
-
- btDbvt* getDynamicAabbTree()
- {
- return m_dynamicAabbTree;
- }
-
- void createAabbTreeFromChildren();
-
- ///computes the exact moment of inertia and the transform from the coordinate system defined by the principal axes of the moment of inertia
- ///and the center of mass to the current coordinate system. "masses" points to an array of masses of the children. The resulting transform
- ///"principal" has to be applied inversely to all children transforms in order for the local coordinate system of the compound
- ///shape to be centered at the center of mass and to coincide with the principal axes. This also necessitates a correction of the world transform
- ///of the collision object by the principal transform.
- void calculatePrincipalAxisTransform(const btScalar* masses, btTransform& principal, btVector3& inertia) const;
-
- int getUpdateRevision() const
- {
- return m_updateRevision;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-// clang-format off
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCompoundShapeChildData
-{
- btTransformFloatData m_transform;
- btCollisionShapeData *m_childShape;
- int m_childShapeType;
- float m_childMargin;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCompoundShapeData
-{
- btCollisionShapeData m_collisionShapeData;
-
- btCompoundShapeChildData *m_childShapePtr;
-
- int m_numChildShapes;
-
- float m_collisionMargin;
-
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btCompoundShape::calculateSerializeBufferSize() const
-{
- return sizeof(btCompoundShapeData);
-}
-
-#endif //BT_COMPOUND_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.cpp
deleted file mode 100644
index 5d396844dd..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConcaveShape.h"
-
-btConcaveShape::btConcaveShape() : m_collisionMargin(btScalar(0.))
-{
-}
-
-btConcaveShape::~btConcaveShape()
-{
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.h
deleted file mode 100644
index 716624e182..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConcaveShape.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONCAVE_SHAPE_H
-#define BT_CONCAVE_SHAPE_H
-
-#include "btCollisionShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-#include "btTriangleCallback.h"
-
-/// PHY_ScalarType enumerates possible scalar types.
-/// See the btStridingMeshInterface or btHeightfieldTerrainShape for its use
-typedef enum PHY_ScalarType
-{
- PHY_FLOAT,
- PHY_DOUBLE,
- PHY_INTEGER,
- PHY_SHORT,
- PHY_FIXEDPOINT88,
- PHY_UCHAR
-} PHY_ScalarType;
-
-///The btConcaveShape class provides an interface for non-moving (static) concave shapes.
-///It has been implemented by the btStaticPlaneShape, btBvhTriangleMeshShape and btHeightfieldTerrainShape.
-ATTRIBUTE_ALIGNED16(class)
-btConcaveShape : public btCollisionShape
-{
-protected:
- btScalar m_collisionMargin;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConcaveShape();
-
- virtual ~btConcaveShape();
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const = 0;
-
- virtual btScalar getMargin() const
- {
- return m_collisionMargin;
- }
- virtual void setMargin(btScalar collisionMargin)
- {
- m_collisionMargin = collisionMargin;
- }
-};
-
-#endif //BT_CONCAVE_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.cpp
deleted file mode 100644
index 64a6f272ca..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConeShape.h"
-
-btConeShape::btConeShape(btScalar radius, btScalar height) : btConvexInternalShape(),
- m_radius(radius),
- m_height(height)
-{
- m_shapeType = CONE_SHAPE_PROXYTYPE;
- setConeUpIndex(1);
- btVector3 halfExtents;
- m_sinAngle = (m_radius / btSqrt(m_radius * m_radius + m_height * m_height));
-}
-
-btConeShapeZ::btConeShapeZ(btScalar radius, btScalar height) : btConeShape(radius, height)
-{
- setConeUpIndex(2);
-}
-
-btConeShapeX::btConeShapeX(btScalar radius, btScalar height) : btConeShape(radius, height)
-{
- setConeUpIndex(0);
-}
-
-///choose upAxis index
-void btConeShape::setConeUpIndex(int upIndex)
-{
- switch (upIndex)
- {
- case 0:
- m_coneIndices[0] = 1;
- m_coneIndices[1] = 0;
- m_coneIndices[2] = 2;
- break;
- case 1:
- m_coneIndices[0] = 0;
- m_coneIndices[1] = 1;
- m_coneIndices[2] = 2;
- break;
- case 2:
- m_coneIndices[0] = 0;
- m_coneIndices[1] = 2;
- m_coneIndices[2] = 1;
- break;
- default:
- btAssert(0);
- };
-
- m_implicitShapeDimensions[m_coneIndices[0]] = m_radius;
- m_implicitShapeDimensions[m_coneIndices[1]] = m_height;
- m_implicitShapeDimensions[m_coneIndices[2]] = m_radius;
-}
-
-btVector3 btConeShape::coneLocalSupport(const btVector3& v) const
-{
- btScalar halfHeight = m_height * btScalar(0.5);
-
- if (v[m_coneIndices[1]] > v.length() * m_sinAngle)
- {
- btVector3 tmp;
-
- tmp[m_coneIndices[0]] = btScalar(0.);
- tmp[m_coneIndices[1]] = halfHeight;
- tmp[m_coneIndices[2]] = btScalar(0.);
- return tmp;
- }
- else
- {
- btScalar s = btSqrt(v[m_coneIndices[0]] * v[m_coneIndices[0]] + v[m_coneIndices[2]] * v[m_coneIndices[2]]);
- if (s > SIMD_EPSILON)
- {
- btScalar d = m_radius / s;
- btVector3 tmp;
- tmp[m_coneIndices[0]] = v[m_coneIndices[0]] * d;
- tmp[m_coneIndices[1]] = -halfHeight;
- tmp[m_coneIndices[2]] = v[m_coneIndices[2]] * d;
- return tmp;
- }
- else
- {
- btVector3 tmp;
- tmp[m_coneIndices[0]] = btScalar(0.);
- tmp[m_coneIndices[1]] = -halfHeight;
- tmp[m_coneIndices[2]] = btScalar(0.);
- return tmp;
- }
- }
-}
-
-btVector3 btConeShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- return coneLocalSupport(vec);
-}
-
-void btConeShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int i = 0; i < numVectors; i++)
- {
- const btVector3& vec = vectors[i];
- supportVerticesOut[i] = coneLocalSupport(vec);
- }
-}
-
-btVector3 btConeShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 supVertex = coneLocalSupport(vec);
- if (getMargin() != btScalar(0.))
- {
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- }
- return supVertex;
-}
-
-void btConeShape::setLocalScaling(const btVector3& scaling)
-{
- int axis = m_coneIndices[1];
- int r1 = m_coneIndices[0];
- int r2 = m_coneIndices[2];
- m_height *= scaling[axis] / m_localScaling[axis];
- m_radius *= (scaling[r1] / m_localScaling[r1] + scaling[r2] / m_localScaling[r2]) / 2;
- m_sinAngle = (m_radius / btSqrt(m_radius * m_radius + m_height * m_height));
- btConvexInternalShape::setLocalScaling(scaling);
-} \ No newline at end of file
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.h
deleted file mode 100644
index 49f26bc4e5..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConeShape.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONE_MINKOWSKI_H
-#define BT_CONE_MINKOWSKI_H
-
-#include "btConvexInternalShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-///The btConeShape implements a cone shape primitive, centered around the origin and aligned with the Y axis. The btConeShapeX is aligned around the X axis and btConeShapeZ around the Z axis.
-ATTRIBUTE_ALIGNED16(class)
-btConeShape : public btConvexInternalShape
-
-{
- btScalar m_sinAngle;
- btScalar m_radius;
- btScalar m_height;
- int m_coneIndices[3];
- btVector3 coneLocalSupport(const btVector3& v) const;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConeShape(btScalar radius, btScalar height);
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- btScalar getRadius() const { return m_radius; }
- btScalar getHeight() const { return m_height; }
-
- void setRadius(const btScalar radius)
- {
- m_radius = radius;
- }
- void setHeight(const btScalar height)
- {
- m_height = height;
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const
- {
- btTransform identity;
- identity.setIdentity();
- btVector3 aabbMin, aabbMax;
- getAabb(identity, aabbMin, aabbMax);
-
- btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5);
-
- btScalar margin = getMargin();
-
- btScalar lx = btScalar(2.) * (halfExtents.x() + margin);
- btScalar ly = btScalar(2.) * (halfExtents.y() + margin);
- btScalar lz = btScalar(2.) * (halfExtents.z() + margin);
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(0.08333333);
-
- inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2));
-
- // inertia.x() = scaledmass * (y2+z2);
- // inertia.y() = scaledmass * (x2+z2);
- // inertia.z() = scaledmass * (x2+y2);
- }
-
- virtual const char* getName() const
- {
- return "Cone";
- }
-
- ///choose upAxis index
- void setConeUpIndex(int upIndex);
-
- int getConeUpIndex() const
- {
- return m_coneIndices[1];
- }
-
- virtual btVector3 getAnisotropicRollingFrictionDirection() const
- {
- return btVector3(0, 1, 0);
- }
-
- virtual void setLocalScaling(const btVector3& scaling);
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///btConeShape implements a Cone shape, around the X axis
-class btConeShapeX : public btConeShape
-{
-public:
- btConeShapeX(btScalar radius, btScalar height);
-
- virtual btVector3 getAnisotropicRollingFrictionDirection() const
- {
- return btVector3(1, 0, 0);
- }
-
- //debugging
- virtual const char* getName() const
- {
- return "ConeX";
- }
-};
-
-///btConeShapeZ implements a Cone shape, around the Z axis
-class btConeShapeZ : public btConeShape
-{
-public:
- btConeShapeZ(btScalar radius, btScalar height);
-
- virtual btVector3 getAnisotropicRollingFrictionDirection() const
- {
- return btVector3(0, 0, 1);
- }
-
- //debugging
- virtual const char* getName() const
- {
- return "ConeZ";
- }
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btConeShapeData
-{
- btConvexInternalShapeData m_convexInternalShapeData;
-
- int m_upIndex;
-
- char m_padding[4];
-};
-
-SIMD_FORCE_INLINE int btConeShape::calculateSerializeBufferSize() const
-{
- return sizeof(btConeShapeData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btConeShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btConeShapeData* shapeData = (btConeShapeData*)dataBuffer;
-
- btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
-
- shapeData->m_upIndex = m_coneIndices[1];
-
- // Fill padding with zeros to appease msan.
- shapeData->m_padding[0] = 0;
- shapeData->m_padding[1] = 0;
- shapeData->m_padding[2] = 0;
- shapeData->m_padding[3] = 0;
-
- return "btConeShapeData";
-}
-
-#endif //BT_CONE_MINKOWSKI_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.cpp
deleted file mode 100644
index 7d3d1d362f..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.cpp
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvex2dShape.h"
-
-btConvex2dShape::btConvex2dShape(btConvexShape* convexChildShape) : btConvexShape(), m_childConvexShape(convexChildShape)
-{
- m_shapeType = CONVEX_2D_SHAPE_PROXYTYPE;
-}
-
-btConvex2dShape::~btConvex2dShape()
-{
-}
-
-btVector3 btConvex2dShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- return m_childConvexShape->localGetSupportingVertexWithoutMargin(vec);
-}
-
-void btConvex2dShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- m_childConvexShape->batchedUnitVectorGetSupportingVertexWithoutMargin(vectors, supportVerticesOut, numVectors);
-}
-
-btVector3 btConvex2dShape::localGetSupportingVertex(const btVector3& vec) const
-{
- return m_childConvexShape->localGetSupportingVertex(vec);
-}
-
-void btConvex2dShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- ///this linear upscaling is not realistic, but we don't deal with large mass ratios...
- m_childConvexShape->calculateLocalInertia(mass, inertia);
-}
-
-///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
-void btConvex2dShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- m_childConvexShape->getAabb(t, aabbMin, aabbMax);
-}
-
-void btConvex2dShape::getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- m_childConvexShape->getAabbSlow(t, aabbMin, aabbMax);
-}
-
-void btConvex2dShape::setLocalScaling(const btVector3& scaling)
-{
- m_childConvexShape->setLocalScaling(scaling);
-}
-
-const btVector3& btConvex2dShape::getLocalScaling() const
-{
- return m_childConvexShape->getLocalScaling();
-}
-
-void btConvex2dShape::setMargin(btScalar margin)
-{
- m_childConvexShape->setMargin(margin);
-}
-btScalar btConvex2dShape::getMargin() const
-{
- return m_childConvexShape->getMargin();
-}
-
-int btConvex2dShape::getNumPreferredPenetrationDirections() const
-{
- return m_childConvexShape->getNumPreferredPenetrationDirections();
-}
-
-void btConvex2dShape::getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const
-{
- m_childConvexShape->getPreferredPenetrationDirection(index, penetrationVector);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h
deleted file mode 100644
index cd4f1ef7b8..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvex2dShape.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_2D_SHAPE_H
-#define BT_CONVEX_2D_SHAPE_H
-
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-///The btConvex2dShape allows to use arbitrary convex shapes as 2d convex shapes, with the Z component assumed to be 0.
-///For 2d boxes, the btBox2dShape is recommended.
-ATTRIBUTE_ALIGNED16(class)
-btConvex2dShape : public btConvexShape
-{
- btConvexShape* m_childConvexShape;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConvex2dShape(btConvexShape * convexChildShape);
-
- virtual ~btConvex2dShape();
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- btConvexShape* getChildShape()
- {
- return m_childConvexShape;
- }
-
- const btConvexShape* getChildShape() const
- {
- return m_childConvexShape;
- }
-
- virtual const char* getName() const
- {
- return "Convex2dShape";
- }
-
- ///////////////////////////
-
- ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
-
- virtual void setMargin(btScalar margin);
- virtual btScalar getMargin() const;
-
- virtual int getNumPreferredPenetrationDirections() const;
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const;
-};
-
-#endif //BT_CONVEX_2D_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp
deleted file mode 100644
index 703de45922..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.cpp
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#if defined(_WIN32) || defined(__i386__)
-#define BT_USE_SSE_IN_API
-#endif
-
-#include "btConvexHullShape.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-#include "LinearMath/btQuaternion.h"
-#include "LinearMath/btSerializer.h"
-#include "btConvexPolyhedron.h"
-#include "LinearMath/btConvexHullComputer.h"
-
-btConvexHullShape ::btConvexHullShape(const btScalar* points, int numPoints, int stride) : btPolyhedralConvexAabbCachingShape()
-{
- m_shapeType = CONVEX_HULL_SHAPE_PROXYTYPE;
- m_unscaledPoints.resize(numPoints);
-
- unsigned char* pointsAddress = (unsigned char*)points;
-
- for (int i = 0; i < numPoints; i++)
- {
- btScalar* point = (btScalar*)pointsAddress;
- m_unscaledPoints[i] = btVector3(point[0], point[1], point[2]);
- pointsAddress += stride;
- }
-
- recalcLocalAabb();
-}
-
-void btConvexHullShape::setLocalScaling(const btVector3& scaling)
-{
- m_localScaling = scaling;
- recalcLocalAabb();
-}
-
-void btConvexHullShape::addPoint(const btVector3& point, bool recalculateLocalAabb)
-{
- m_unscaledPoints.push_back(point);
- if (recalculateLocalAabb)
- recalcLocalAabb();
-}
-
-btVector3 btConvexHullShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- btVector3 supVec(btScalar(0.), btScalar(0.), btScalar(0.));
- btScalar maxDot = btScalar(-BT_LARGE_FLOAT);
-
- // Here we take advantage of dot(a, b*c) = dot(a*b, c). Note: This is true mathematically, but not numerically.
- if (0 < m_unscaledPoints.size())
- {
- btVector3 scaled = vec * m_localScaling;
- int index = (int)scaled.maxDot(&m_unscaledPoints[0], m_unscaledPoints.size(), maxDot); // FIXME: may violate encapsulation of m_unscaledPoints
- return m_unscaledPoints[index] * m_localScaling;
- }
-
- return supVec;
-}
-
-void btConvexHullShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- btScalar newDot;
- //use 'w' component of supportVerticesOut?
- {
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i][3] = btScalar(-BT_LARGE_FLOAT);
- }
- }
-
- for (int j = 0; j < numVectors; j++)
- {
- btVector3 vec = vectors[j] * m_localScaling; // dot(a*b,c) = dot(a,b*c)
- if (0 < m_unscaledPoints.size())
- {
- int i = (int)vec.maxDot(&m_unscaledPoints[0], m_unscaledPoints.size(), newDot);
- supportVerticesOut[j] = getScaledPoint(i);
- supportVerticesOut[j][3] = newDot;
- }
- else
- supportVerticesOut[j][3] = -BT_LARGE_FLOAT;
- }
-}
-
-btVector3 btConvexHullShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 supVertex = localGetSupportingVertexWithoutMargin(vec);
-
- if (getMargin() != btScalar(0.))
- {
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- }
- return supVertex;
-}
-
-void btConvexHullShape::optimizeConvexHull()
-{
- btConvexHullComputer conv;
- conv.compute(&m_unscaledPoints[0].getX(), sizeof(btVector3), m_unscaledPoints.size(), 0.f, 0.f);
- int numVerts = conv.vertices.size();
- m_unscaledPoints.resize(0);
- for (int i = 0; i < numVerts; i++)
- {
- m_unscaledPoints.push_back(conv.vertices[i]);
- }
-}
-
-//currently just for debugging (drawing), perhaps future support for algebraic continuous collision detection
-//Please note that you can debug-draw btConvexHullShape with the Raytracer Demo
-int btConvexHullShape::getNumVertices() const
-{
- return m_unscaledPoints.size();
-}
-
-int btConvexHullShape::getNumEdges() const
-{
- return m_unscaledPoints.size();
-}
-
-void btConvexHullShape::getEdge(int i, btVector3& pa, btVector3& pb) const
-{
- int index0 = i % m_unscaledPoints.size();
- int index1 = (i + 1) % m_unscaledPoints.size();
- pa = getScaledPoint(index0);
- pb = getScaledPoint(index1);
-}
-
-void btConvexHullShape::getVertex(int i, btVector3& vtx) const
-{
- vtx = getScaledPoint(i);
-}
-
-int btConvexHullShape::getNumPlanes() const
-{
- return 0;
-}
-
-void btConvexHullShape::getPlane(btVector3&, btVector3&, int) const
-{
- btAssert(0);
-}
-
-//not yet
-bool btConvexHullShape::isInside(const btVector3&, btScalar) const
-{
- btAssert(0);
- return false;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btConvexHullShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- //int szc = sizeof(btConvexHullShapeData);
- btConvexHullShapeData* shapeData = (btConvexHullShapeData*)dataBuffer;
- btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
-
- int numElem = m_unscaledPoints.size();
- shapeData->m_numUnscaledPoints = numElem;
-#ifdef BT_USE_DOUBLE_PRECISION
- shapeData->m_unscaledPointsFloatPtr = 0;
- shapeData->m_unscaledPointsDoublePtr = numElem ? (btVector3Data*)serializer->getUniquePointer((void*)&m_unscaledPoints[0]) : 0;
-#else
- shapeData->m_unscaledPointsFloatPtr = numElem ? (btVector3Data*)serializer->getUniquePointer((void*)&m_unscaledPoints[0]) : 0;
- shapeData->m_unscaledPointsDoublePtr = 0;
-#endif
-
- if (numElem)
- {
- int sz = sizeof(btVector3Data);
- // int sz2 = sizeof(btVector3DoubleData);
- // int sz3 = sizeof(btVector3FloatData);
- btChunk* chunk = serializer->allocate(sz, numElem);
- btVector3Data* memPtr = (btVector3Data*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_unscaledPoints[i].serialize(*memPtr);
- }
- serializer->finalizeChunk(chunk, btVector3DataName, BT_ARRAY_CODE, (void*)&m_unscaledPoints[0]);
- }
-
- // Fill padding with zeros to appease msan.
- memset(shapeData->m_padding3, 0, sizeof(shapeData->m_padding3));
-
- return "btConvexHullShapeData";
-}
-
-void btConvexHullShape::project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const
-{
-#if 1
- minProj = FLT_MAX;
- maxProj = -FLT_MAX;
-
- int numVerts = m_unscaledPoints.size();
- for (int i = 0; i < numVerts; i++)
- {
- btVector3 vtx = m_unscaledPoints[i] * m_localScaling;
- btVector3 pt = trans * vtx;
- btScalar dp = pt.dot(dir);
- if (dp < minProj)
- {
- minProj = dp;
- witnesPtMin = pt;
- }
- if (dp > maxProj)
- {
- maxProj = dp;
- witnesPtMax = pt;
- }
- }
-#else
- btVector3 localAxis = dir * trans.getBasis();
- witnesPtMin = trans(localGetSupportingVertex(localAxis));
- witnesPtMax = trans(localGetSupportingVertex(-localAxis));
-
- minProj = witnesPtMin.dot(dir);
- maxProj = witnesPtMax.dot(dir);
-#endif
-
- if (minProj > maxProj)
- {
- btSwap(minProj, maxProj);
- btSwap(witnesPtMin, witnesPtMax);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h
deleted file mode 100644
index 96136d7dd7..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexHullShape.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_HULL_SHAPE_H
-#define BT_CONVEX_HULL_SHAPE_H
-
-#include "btPolyhedralConvexShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-#include "LinearMath/btAlignedObjectArray.h"
-
-///The btConvexHullShape implements an implicit convex hull of an array of vertices.
-///Bullet provides a general and fast collision detector for convex shapes based on GJK and EPA using localGetSupportingVertex.
-ATTRIBUTE_ALIGNED16(class)
-btConvexHullShape : public btPolyhedralConvexAabbCachingShape
-{
- btAlignedObjectArray<btVector3> m_unscaledPoints;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- ///this constructor optionally takes in a pointer to points. Each point is assumed to be 3 consecutive btScalar (x,y,z), the striding defines the number of bytes between each point, in memory.
- ///It is easier to not pass any points in the constructor, and just add one point at a time, using addPoint.
- ///btConvexHullShape make an internal copy of the points.
- btConvexHullShape(const btScalar* points = 0, int numPoints = 0, int stride = sizeof(btVector3));
-
- void addPoint(const btVector3& point, bool recalculateLocalAabb = true);
-
- btVector3* getUnscaledPoints()
- {
- return &m_unscaledPoints[0];
- }
-
- const btVector3* getUnscaledPoints() const
- {
- return &m_unscaledPoints[0];
- }
-
- ///getPoints is obsolete, please use getUnscaledPoints
- const btVector3* getPoints() const
- {
- return getUnscaledPoints();
- }
-
- void optimizeConvexHull();
-
- SIMD_FORCE_INLINE btVector3 getScaledPoint(int i) const
- {
- return m_unscaledPoints[i] * m_localScaling;
- }
-
- SIMD_FORCE_INLINE int getNumPoints() const
- {
- return m_unscaledPoints.size();
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const;
-
- //debugging
- virtual const char* getName() const { return "Convex"; }
-
- virtual int getNumVertices() const;
- virtual int getNumEdges() const;
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const;
- virtual void getVertex(int i, btVector3& vtx) const;
- virtual int getNumPlanes() const;
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const;
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const;
-
- ///in case we receive negative scaling
- virtual void setLocalScaling(const btVector3& scaling);
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-// clang-format off
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btConvexHullShapeData
-{
- btConvexInternalShapeData m_convexInternalShapeData;
-
- btVector3FloatData *m_unscaledPointsFloatPtr;
- btVector3DoubleData *m_unscaledPointsDoublePtr;
-
- int m_numUnscaledPoints;
- char m_padding3[4];
-
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btConvexHullShape::calculateSerializeBufferSize() const
-{
- return sizeof(btConvexHullShapeData);
-}
-
-#endif //BT_CONVEX_HULL_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.cpp
deleted file mode 100644
index 4d598b1aa2..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.cpp
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvexInternalShape.h"
-
-btConvexInternalShape::btConvexInternalShape()
- : m_localScaling(btScalar(1.), btScalar(1.), btScalar(1.)),
- m_collisionMargin(CONVEX_DISTANCE_MARGIN)
-{
-}
-
-void btConvexInternalShape::setLocalScaling(const btVector3& scaling)
-{
- m_localScaling = scaling.absolute();
-}
-
-void btConvexInternalShape::getAabbSlow(const btTransform& trans, btVector3& minAabb, btVector3& maxAabb) const
-{
-#ifndef __SPU__
- //use localGetSupportingVertexWithoutMargin?
- btScalar margin = getMargin();
- for (int i = 0; i < 3; i++)
- {
- btVector3 vec(btScalar(0.), btScalar(0.), btScalar(0.));
- vec[i] = btScalar(1.);
-
- btVector3 sv = localGetSupportingVertex(vec * trans.getBasis());
-
- btVector3 tmp = trans(sv);
- maxAabb[i] = tmp[i] + margin;
- vec[i] = btScalar(-1.);
- tmp = trans(localGetSupportingVertex(vec * trans.getBasis()));
- minAabb[i] = tmp[i] - margin;
- }
-#endif
-}
-
-btVector3 btConvexInternalShape::localGetSupportingVertex(const btVector3& vec) const
-{
-#ifndef __SPU__
-
- btVector3 supVertex = localGetSupportingVertexWithoutMargin(vec);
-
- if (getMargin() != btScalar(0.))
- {
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- }
- return supVertex;
-
-#else
- btAssert(0);
- return btVector3(0, 0, 0);
-#endif //__SPU__
-}
-
-btConvexInternalAabbCachingShape::btConvexInternalAabbCachingShape()
- : btConvexInternalShape(),
- m_localAabbMin(1, 1, 1),
- m_localAabbMax(-1, -1, -1),
- m_isLocalAabbValid(false)
-{
-}
-
-void btConvexInternalAabbCachingShape::getAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax) const
-{
- getNonvirtualAabb(trans, aabbMin, aabbMax, getMargin());
-}
-
-void btConvexInternalAabbCachingShape::setLocalScaling(const btVector3& scaling)
-{
- btConvexInternalShape::setLocalScaling(scaling);
- recalcLocalAabb();
-}
-
-void btConvexInternalAabbCachingShape::recalcLocalAabb()
-{
- m_isLocalAabbValid = true;
-
-#if 1
- static const btVector3 _directions[] =
- {
- btVector3(1., 0., 0.),
- btVector3(0., 1., 0.),
- btVector3(0., 0., 1.),
- btVector3(-1., 0., 0.),
- btVector3(0., -1., 0.),
- btVector3(0., 0., -1.)};
-
- btVector3 _supporting[] =
- {
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.)};
-
- batchedUnitVectorGetSupportingVertexWithoutMargin(_directions, _supporting, 6);
-
- for (int i = 0; i < 3; ++i)
- {
- m_localAabbMax[i] = _supporting[i][i] + m_collisionMargin;
- m_localAabbMin[i] = _supporting[i + 3][i] - m_collisionMargin;
- }
-
-#else
-
- for (int i = 0; i < 3; i++)
- {
- btVector3 vec(btScalar(0.), btScalar(0.), btScalar(0.));
- vec[i] = btScalar(1.);
- btVector3 tmp = localGetSupportingVertex(vec);
- m_localAabbMax[i] = tmp[i] + m_collisionMargin;
- vec[i] = btScalar(-1.);
- tmp = localGetSupportingVertex(vec);
- m_localAabbMin[i] = tmp[i] - m_collisionMargin;
- }
-#endif
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h
deleted file mode 100644
index a28c57de4b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexInternalShape.h
+++ /dev/null
@@ -1,208 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_INTERNAL_SHAPE_H
-#define BT_CONVEX_INTERNAL_SHAPE_H
-
-#include "btConvexShape.h"
-#include "LinearMath/btAabbUtil2.h"
-
-///The btConvexInternalShape is an internal base class, shared by most convex shape implementations.
-///The btConvexInternalShape uses a default collision margin set to CONVEX_DISTANCE_MARGIN.
-///This collision margin used by Gjk and some other algorithms, see also btCollisionMargin.h
-///Note that when creating small shapes (derived from btConvexInternalShape),
-///you need to make sure to set a smaller collision margin, using the 'setMargin' API
-///There is a automatic mechanism 'setSafeMargin' used by btBoxShape and btCylinderShape
-ATTRIBUTE_ALIGNED16(class)
-btConvexInternalShape : public btConvexShape
-{
-protected:
- //local scaling. collisionMargin is not scaled !
- btVector3 m_localScaling;
-
- btVector3 m_implicitShapeDimensions;
-
- btScalar m_collisionMargin;
-
- btScalar m_padding;
-
- btConvexInternalShape();
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- virtual ~btConvexInternalShape()
- {
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
-
- const btVector3& getImplicitShapeDimensions() const
- {
- return m_implicitShapeDimensions;
- }
-
- ///warning: use setImplicitShapeDimensions with care
- ///changing a collision shape while the body is in the world is not recommended,
- ///it is best to remove the body from the world, then make the change, and re-add it
- ///alternatively flush the contact points, see documentation for 'cleanProxyFromPairs'
- void setImplicitShapeDimensions(const btVector3& dimensions)
- {
- m_implicitShapeDimensions = dimensions;
- }
-
- void setSafeMargin(btScalar minDimension, btScalar defaultMarginMultiplier = 0.1f)
- {
- btScalar safeMargin = defaultMarginMultiplier * minDimension;
- if (safeMargin < getMargin())
- {
- setMargin(safeMargin);
- }
- }
- void setSafeMargin(const btVector3& halfExtents, btScalar defaultMarginMultiplier = 0.1f)
- {
- //see http://code.google.com/p/bullet/issues/detail?id=349
- //this margin check could could be added to other collision shapes too,
- //or add some assert/warning somewhere
- btScalar minDimension = halfExtents[halfExtents.minAxis()];
- setSafeMargin(minDimension, defaultMarginMultiplier);
- }
-
- ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- getAabbSlow(t, aabbMin, aabbMax);
- }
-
- virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const
- {
- return m_localScaling;
- }
-
- const btVector3& getLocalScalingNV() const
- {
- return m_localScaling;
- }
-
- virtual void setMargin(btScalar margin)
- {
- m_collisionMargin = margin;
- }
- virtual btScalar getMargin() const
- {
- return m_collisionMargin;
- }
-
- btScalar getMarginNV() const
- {
- return m_collisionMargin;
- }
-
- virtual int getNumPreferredPenetrationDirections() const
- {
- return 0;
- }
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const
- {
- (void)penetrationVector;
- (void)index;
- btAssert(0);
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btConvexInternalShapeData
-{
- btCollisionShapeData m_collisionShapeData;
-
- btVector3FloatData m_localScaling;
-
- btVector3FloatData m_implicitShapeDimensions;
-
- float m_collisionMargin;
-
- int m_padding;
-};
-
-SIMD_FORCE_INLINE int btConvexInternalShape::calculateSerializeBufferSize() const
-{
- return sizeof(btConvexInternalShapeData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btConvexInternalShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btConvexInternalShapeData* shapeData = (btConvexInternalShapeData*)dataBuffer;
- btCollisionShape::serialize(&shapeData->m_collisionShapeData, serializer);
-
- m_implicitShapeDimensions.serializeFloat(shapeData->m_implicitShapeDimensions);
- m_localScaling.serializeFloat(shapeData->m_localScaling);
- shapeData->m_collisionMargin = float(m_collisionMargin);
-
- // Fill padding with zeros to appease msan.
- shapeData->m_padding = 0;
-
- return "btConvexInternalShapeData";
-}
-
-///btConvexInternalAabbCachingShape adds local aabb caching for convex shapes, to avoid expensive bounding box calculations
-class btConvexInternalAabbCachingShape : public btConvexInternalShape
-{
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
- bool m_isLocalAabbValid;
-
-protected:
- btConvexInternalAabbCachingShape();
-
- void setCachedLocalAabb(const btVector3& aabbMin, const btVector3& aabbMax)
- {
- m_isLocalAabbValid = true;
- m_localAabbMin = aabbMin;
- m_localAabbMax = aabbMax;
- }
-
- inline void getCachedLocalAabb(btVector3& aabbMin, btVector3& aabbMax) const
- {
- btAssert(m_isLocalAabbValid);
- aabbMin = m_localAabbMin;
- aabbMax = m_localAabbMax;
- }
-
- inline void getNonvirtualAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax, btScalar margin) const
- {
- //lazy evaluation of local aabb
- btAssert(m_isLocalAabbValid);
- btTransformAabb(m_localAabbMin, m_localAabbMax, margin, trans, aabbMin, aabbMax);
- }
-
-public:
- virtual void setLocalScaling(const btVector3& scaling);
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- void recalcLocalAabb();
-};
-
-#endif //BT_CONVEX_INTERNAL_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp
deleted file mode 100644
index f00a440fa3..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvexPointCloudShape.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-#include "LinearMath/btQuaternion.h"
-
-void btConvexPointCloudShape::setLocalScaling(const btVector3& scaling)
-{
- m_localScaling = scaling;
- recalcLocalAabb();
-}
-
-#ifndef __SPU__
-btVector3 btConvexPointCloudShape::localGetSupportingVertexWithoutMargin(const btVector3& vec0) const
-{
- btVector3 supVec(btScalar(0.), btScalar(0.), btScalar(0.));
- btScalar maxDot = btScalar(-BT_LARGE_FLOAT);
-
- btVector3 vec = vec0;
- btScalar lenSqr = vec.length2();
- if (lenSqr < btScalar(0.0001))
- {
- vec.setValue(1, 0, 0);
- }
- else
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- vec *= rlen;
- }
-
- if (m_numPoints > 0)
- {
- // Here we take advantage of dot(a*b, c) = dot( a, b*c) to do less work. Note this transformation is true mathematically, not numerically.
- // btVector3 scaled = vec * m_localScaling;
- int index = (int)vec.maxDot(&m_unscaledPoints[0], m_numPoints, maxDot); //FIXME: may violate encapsulation of m_unscaledPoints
- return getScaledPoint(index);
- }
-
- return supVec;
-}
-
-void btConvexPointCloudShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int j = 0; j < numVectors; j++)
- {
- const btVector3& vec = vectors[j] * m_localScaling; // dot( a*c, b) = dot(a, b*c)
- btScalar maxDot;
- int index = (int)vec.maxDot(&m_unscaledPoints[0], m_numPoints, maxDot);
- supportVerticesOut[j][3] = btScalar(-BT_LARGE_FLOAT);
- if (0 <= index)
- {
- //WARNING: don't swap next lines, the w component would get overwritten!
- supportVerticesOut[j] = getScaledPoint(index);
- supportVerticesOut[j][3] = maxDot;
- }
- }
-}
-
-btVector3 btConvexPointCloudShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 supVertex = localGetSupportingVertexWithoutMargin(vec);
-
- if (getMargin() != btScalar(0.))
- {
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- }
- return supVertex;
-}
-
-#endif
-
-//currently just for debugging (drawing), perhaps future support for algebraic continuous collision detection
-//Please note that you can debug-draw btConvexHullShape with the Raytracer Demo
-int btConvexPointCloudShape::getNumVertices() const
-{
- return m_numPoints;
-}
-
-int btConvexPointCloudShape::getNumEdges() const
-{
- return 0;
-}
-
-void btConvexPointCloudShape::getEdge(int i, btVector3& pa, btVector3& pb) const
-{
- btAssert(0);
-}
-
-void btConvexPointCloudShape::getVertex(int i, btVector3& vtx) const
-{
- vtx = m_unscaledPoints[i] * m_localScaling;
-}
-
-int btConvexPointCloudShape::getNumPlanes() const
-{
- return 0;
-}
-
-void btConvexPointCloudShape::getPlane(btVector3&, btVector3&, int) const
-{
- btAssert(0);
-}
-
-//not yet
-bool btConvexPointCloudShape::isInside(const btVector3&, btScalar) const
-{
- btAssert(0);
- return false;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h
deleted file mode 100644
index c7d554a4d3..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPointCloudShape.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_POINT_CLOUD_SHAPE_H
-#define BT_CONVEX_POINT_CLOUD_SHAPE_H
-
-#include "btPolyhedralConvexShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-#include "LinearMath/btAlignedObjectArray.h"
-
-///The btConvexPointCloudShape implements an implicit convex hull of an array of vertices.
-ATTRIBUTE_ALIGNED16(class)
-btConvexPointCloudShape : public btPolyhedralConvexAabbCachingShape
-{
- btVector3* m_unscaledPoints;
- int m_numPoints;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConvexPointCloudShape()
- {
- m_localScaling.setValue(1.f, 1.f, 1.f);
- m_shapeType = CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE;
- m_unscaledPoints = 0;
- m_numPoints = 0;
- }
-
- btConvexPointCloudShape(btVector3 * points, int numPoints, const btVector3& localScaling, bool computeAabb = true)
- {
- m_localScaling = localScaling;
- m_shapeType = CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE;
- m_unscaledPoints = points;
- m_numPoints = numPoints;
-
- if (computeAabb)
- recalcLocalAabb();
- }
-
- void setPoints(btVector3 * points, int numPoints, bool computeAabb = true, const btVector3& localScaling = btVector3(1.f, 1.f, 1.f))
- {
- m_unscaledPoints = points;
- m_numPoints = numPoints;
- m_localScaling = localScaling;
-
- if (computeAabb)
- recalcLocalAabb();
- }
-
- SIMD_FORCE_INLINE btVector3* getUnscaledPoints()
- {
- return m_unscaledPoints;
- }
-
- SIMD_FORCE_INLINE const btVector3* getUnscaledPoints() const
- {
- return m_unscaledPoints;
- }
-
- SIMD_FORCE_INLINE int getNumPoints() const
- {
- return m_numPoints;
- }
-
- SIMD_FORCE_INLINE btVector3 getScaledPoint(int index) const
- {
- return m_unscaledPoints[index] * m_localScaling;
- }
-
-#ifndef __SPU__
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-#endif
-
- //debugging
- virtual const char* getName() const { return "ConvexPointCloud"; }
-
- virtual int getNumVertices() const;
- virtual int getNumEdges() const;
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const;
- virtual void getVertex(int i, btVector3& vtx) const;
- virtual int getNumPlanes() const;
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const;
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const;
-
- ///in case we receive negative scaling
- virtual void setLocalScaling(const btVector3& scaling);
-};
-
-#endif //BT_CONVEX_POINT_CLOUD_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp
deleted file mode 100644
index 9694f4ddb3..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.cpp
+++ /dev/null
@@ -1,302 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-///Separating axis rest based on work from Pierre Terdiman, see
-///And contact clipping based on work from Simon Hobbs
-
-#include "btConvexPolyhedron.h"
-#include "LinearMath/btHashMap.h"
-
-btConvexPolyhedron::btConvexPolyhedron()
-{
-}
-btConvexPolyhedron::~btConvexPolyhedron()
-{
-}
-
-inline bool IsAlmostZero1(const btVector3& v)
-{
- if (btFabs(v.x()) > 1e-6 || btFabs(v.y()) > 1e-6 || btFabs(v.z()) > 1e-6) return false;
- return true;
-}
-
-struct btInternalVertexPair
-{
- btInternalVertexPair(short int v0, short int v1)
- : m_v0(v0),
- m_v1(v1)
- {
- if (m_v1 > m_v0)
- btSwap(m_v0, m_v1);
- }
- short int m_v0;
- short int m_v1;
- int getHash() const
- {
- return m_v0 + (m_v1 << 16);
- }
- bool equals(const btInternalVertexPair& other) const
- {
- return m_v0 == other.m_v0 && m_v1 == other.m_v1;
- }
-};
-
-struct btInternalEdge
-{
- btInternalEdge()
- : m_face0(-1),
- m_face1(-1)
- {
- }
- short int m_face0;
- short int m_face1;
-};
-
-//
-
-#ifdef TEST_INTERNAL_OBJECTS
-bool btConvexPolyhedron::testContainment() const
-{
- for (int p = 0; p < 8; p++)
- {
- btVector3 LocalPt;
- if (p == 0)
- LocalPt = m_localCenter + btVector3(m_extents[0], m_extents[1], m_extents[2]);
- else if (p == 1)
- LocalPt = m_localCenter + btVector3(m_extents[0], m_extents[1], -m_extents[2]);
- else if (p == 2)
- LocalPt = m_localCenter + btVector3(m_extents[0], -m_extents[1], m_extents[2]);
- else if (p == 3)
- LocalPt = m_localCenter + btVector3(m_extents[0], -m_extents[1], -m_extents[2]);
- else if (p == 4)
- LocalPt = m_localCenter + btVector3(-m_extents[0], m_extents[1], m_extents[2]);
- else if (p == 5)
- LocalPt = m_localCenter + btVector3(-m_extents[0], m_extents[1], -m_extents[2]);
- else if (p == 6)
- LocalPt = m_localCenter + btVector3(-m_extents[0], -m_extents[1], m_extents[2]);
- else if (p == 7)
- LocalPt = m_localCenter + btVector3(-m_extents[0], -m_extents[1], -m_extents[2]);
-
- for (int i = 0; i < m_faces.size(); i++)
- {
- const btVector3 Normal(m_faces[i].m_plane[0], m_faces[i].m_plane[1], m_faces[i].m_plane[2]);
- const btScalar d = LocalPt.dot(Normal) + m_faces[i].m_plane[3];
- if (d > 0.0f)
- return false;
- }
- }
- return true;
-}
-#endif
-
-void btConvexPolyhedron::initialize()
-{
- btHashMap<btInternalVertexPair, btInternalEdge> edges;
-
- for (int i = 0; i < m_faces.size(); i++)
- {
- int numVertices = m_faces[i].m_indices.size();
- int NbTris = numVertices;
- for (int j = 0; j < NbTris; j++)
- {
- int k = (j + 1) % numVertices;
- btInternalVertexPair vp(m_faces[i].m_indices[j], m_faces[i].m_indices[k]);
- btInternalEdge* edptr = edges.find(vp);
- btVector3 edge = m_vertices[vp.m_v1] - m_vertices[vp.m_v0];
- edge.normalize();
-
- bool found = false;
-
- for (int p = 0; p < m_uniqueEdges.size(); p++)
- {
- if (IsAlmostZero1(m_uniqueEdges[p] - edge) ||
- IsAlmostZero1(m_uniqueEdges[p] + edge))
- {
- found = true;
- break;
- }
- }
-
- if (!found)
- {
- m_uniqueEdges.push_back(edge);
- }
-
- if (edptr)
- {
- btAssert(edptr->m_face0 >= 0);
- btAssert(edptr->m_face1 < 0);
- edptr->m_face1 = i;
- }
- else
- {
- btInternalEdge ed;
- ed.m_face0 = i;
- edges.insert(vp, ed);
- }
- }
- }
-
-#ifdef USE_CONNECTED_FACES
- for (int i = 0; i < m_faces.size(); i++)
- {
- int numVertices = m_faces[i].m_indices.size();
- m_faces[i].m_connectedFaces.resize(numVertices);
-
- for (int j = 0; j < numVertices; j++)
- {
- int k = (j + 1) % numVertices;
- btInternalVertexPair vp(m_faces[i].m_indices[j], m_faces[i].m_indices[k]);
- btInternalEdge* edptr = edges.find(vp);
- btAssert(edptr);
- btAssert(edptr->m_face0 >= 0);
- btAssert(edptr->m_face1 >= 0);
-
- int connectedFace = (edptr->m_face0 == i) ? edptr->m_face1 : edptr->m_face0;
- m_faces[i].m_connectedFaces[j] = connectedFace;
- }
- }
-#endif //USE_CONNECTED_FACES
-
- initialize2();
-}
-
-void btConvexPolyhedron::initialize2()
-{
- m_localCenter.setValue(0, 0, 0);
- btScalar TotalArea = 0.0f;
- for (int i = 0; i < m_faces.size(); i++)
- {
- int numVertices = m_faces[i].m_indices.size();
- int NbTris = numVertices - 2;
-
- const btVector3& p0 = m_vertices[m_faces[i].m_indices[0]];
- for (int j = 1; j <= NbTris; j++)
- {
- int k = (j + 1) % numVertices;
- const btVector3& p1 = m_vertices[m_faces[i].m_indices[j]];
- const btVector3& p2 = m_vertices[m_faces[i].m_indices[k]];
- btScalar Area = ((p0 - p1).cross(p0 - p2)).length() * 0.5f;
- btVector3 Center = (p0 + p1 + p2) / 3.0f;
- m_localCenter += Area * Center;
- TotalArea += Area;
- }
- }
- m_localCenter /= TotalArea;
-
-#ifdef TEST_INTERNAL_OBJECTS
- if (1)
- {
- m_radius = FLT_MAX;
- for (int i = 0; i < m_faces.size(); i++)
- {
- const btVector3 Normal(m_faces[i].m_plane[0], m_faces[i].m_plane[1], m_faces[i].m_plane[2]);
- const btScalar dist = btFabs(m_localCenter.dot(Normal) + m_faces[i].m_plane[3]);
- if (dist < m_radius)
- m_radius = dist;
- }
-
- btScalar MinX = FLT_MAX;
- btScalar MinY = FLT_MAX;
- btScalar MinZ = FLT_MAX;
- btScalar MaxX = -FLT_MAX;
- btScalar MaxY = -FLT_MAX;
- btScalar MaxZ = -FLT_MAX;
- for (int i = 0; i < m_vertices.size(); i++)
- {
- const btVector3& pt = m_vertices[i];
- if (pt.x() < MinX) MinX = pt.x();
- if (pt.x() > MaxX) MaxX = pt.x();
- if (pt.y() < MinY) MinY = pt.y();
- if (pt.y() > MaxY) MaxY = pt.y();
- if (pt.z() < MinZ) MinZ = pt.z();
- if (pt.z() > MaxZ) MaxZ = pt.z();
- }
- mC.setValue(MaxX + MinX, MaxY + MinY, MaxZ + MinZ);
- mE.setValue(MaxX - MinX, MaxY - MinY, MaxZ - MinZ);
-
- // const btScalar r = m_radius / sqrtf(2.0f);
- const btScalar r = m_radius / sqrtf(3.0f);
- const int LargestExtent = mE.maxAxis();
- const btScalar Step = (mE[LargestExtent] * 0.5f - r) / 1024.0f;
- m_extents[0] = m_extents[1] = m_extents[2] = r;
- m_extents[LargestExtent] = mE[LargestExtent] * 0.5f;
- bool FoundBox = false;
- for (int j = 0; j < 1024; j++)
- {
- if (testContainment())
- {
- FoundBox = true;
- break;
- }
-
- m_extents[LargestExtent] -= Step;
- }
- if (!FoundBox)
- {
- m_extents[0] = m_extents[1] = m_extents[2] = r;
- }
- else
- {
- // Refine the box
- const btScalar Step = (m_radius - r) / 1024.0f;
- const int e0 = (1 << LargestExtent) & 3;
- const int e1 = (1 << e0) & 3;
-
- for (int j = 0; j < 1024; j++)
- {
- const btScalar Saved0 = m_extents[e0];
- const btScalar Saved1 = m_extents[e1];
- m_extents[e0] += Step;
- m_extents[e1] += Step;
-
- if (!testContainment())
- {
- m_extents[e0] = Saved0;
- m_extents[e1] = Saved1;
- break;
- }
- }
- }
- }
-#endif
-}
-void btConvexPolyhedron::project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const
-{
- minProj = FLT_MAX;
- maxProj = -FLT_MAX;
- int numVerts = m_vertices.size();
- for (int i = 0; i < numVerts; i++)
- {
- btVector3 pt = trans * m_vertices[i];
- btScalar dp = pt.dot(dir);
- if (dp < minProj)
- {
- minProj = dp;
- witnesPtMin = pt;
- }
- if (dp > maxProj)
- {
- maxProj = dp;
- witnesPtMax = pt;
- }
- }
- if (minProj > maxProj)
- {
- btSwap(minProj, maxProj);
- btSwap(witnesPtMin, witnesPtMax);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h
deleted file mode 100644
index 638aa9b3df..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexPolyhedron.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef _BT_POLYHEDRAL_FEATURES_H
-#define _BT_POLYHEDRAL_FEATURES_H
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-#define TEST_INTERNAL_OBJECTS 1
-
-struct btFace
-{
- btAlignedObjectArray<int> m_indices;
- // btAlignedObjectArray<int> m_connectedFaces;
- btScalar m_plane[4];
-};
-
-ATTRIBUTE_ALIGNED16(class)
-btConvexPolyhedron
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConvexPolyhedron();
- virtual ~btConvexPolyhedron();
-
- btAlignedObjectArray<btVector3> m_vertices;
- btAlignedObjectArray<btFace> m_faces;
- btAlignedObjectArray<btVector3> m_uniqueEdges;
-
- btVector3 m_localCenter;
- btVector3 m_extents;
- btScalar m_radius;
- btVector3 mC;
- btVector3 mE;
-
- void initialize();
- void initialize2();
- bool testContainment() const;
-
- void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const;
-};
-
-#endif //_BT_POLYHEDRAL_FEATURES_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.cpp
deleted file mode 100644
index f8fb0aa9fd..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.cpp
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#if defined(_WIN32) || defined(__i386__)
-#define BT_USE_SSE_IN_API
-#endif
-
-#include "btConvexShape.h"
-#include "btTriangleShape.h"
-#include "btSphereShape.h"
-#include "btCylinderShape.h"
-#include "btConeShape.h"
-#include "btCapsuleShape.h"
-#include "btConvexHullShape.h"
-#include "btConvexPointCloudShape.h"
-
-///not supported on IBM SDK, until we fix the alignment of btVector3
-#if defined(__CELLOS_LV2__) && defined(__SPU__)
-#include <spu_intrinsics.h>
-static inline vec_float4 vec_dot3(vec_float4 vec0, vec_float4 vec1)
-{
- vec_float4 result;
- result = spu_mul(vec0, vec1);
- result = spu_madd(spu_rlqwbyte(vec0, 4), spu_rlqwbyte(vec1, 4), result);
- return spu_madd(spu_rlqwbyte(vec0, 8), spu_rlqwbyte(vec1, 8), result);
-}
-#endif //__SPU__
-
-btConvexShape::btConvexShape()
-{
-}
-
-btConvexShape::~btConvexShape()
-{
-}
-
-void btConvexShape::project(const btTransform& trans, const btVector3& dir, btScalar& min, btScalar& max, btVector3& witnesPtMin, btVector3& witnesPtMax) const
-{
- btVector3 localAxis = dir * trans.getBasis();
- btVector3 vtx1 = trans(localGetSupportingVertex(localAxis));
- btVector3 vtx2 = trans(localGetSupportingVertex(-localAxis));
-
- min = vtx1.dot(dir);
- max = vtx2.dot(dir);
- witnesPtMax = vtx2;
- witnesPtMin = vtx1;
-
- if (min > max)
- {
- btScalar tmp = min;
- min = max;
- max = tmp;
- witnesPtMax = vtx1;
- witnesPtMin = vtx2;
- }
-}
-
-static btVector3 convexHullSupport(const btVector3& localDirOrg, const btVector3* points, int numPoints, const btVector3& localScaling)
-{
- btVector3 vec = localDirOrg * localScaling;
-
-#if defined(__CELLOS_LV2__) && defined(__SPU__)
-
- btVector3 localDir = vec;
-
- vec_float4 v_distMax = {-FLT_MAX, 0, 0, 0};
- vec_int4 v_idxMax = {-999, 0, 0, 0};
- int v = 0;
- int numverts = numPoints;
-
- for (; v < (int)numverts - 4; v += 4)
- {
- vec_float4 p0 = vec_dot3(points[v].get128(), localDir.get128());
- vec_float4 p1 = vec_dot3(points[v + 1].get128(), localDir.get128());
- vec_float4 p2 = vec_dot3(points[v + 2].get128(), localDir.get128());
- vec_float4 p3 = vec_dot3(points[v + 3].get128(), localDir.get128());
- const vec_int4 i0 = {v, 0, 0, 0};
- const vec_int4 i1 = {v + 1, 0, 0, 0};
- const vec_int4 i2 = {v + 2, 0, 0, 0};
- const vec_int4 i3 = {v + 3, 0, 0, 0};
- vec_uint4 retGt01 = spu_cmpgt(p0, p1);
- vec_float4 pmax01 = spu_sel(p1, p0, retGt01);
- vec_int4 imax01 = spu_sel(i1, i0, retGt01);
- vec_uint4 retGt23 = spu_cmpgt(p2, p3);
- vec_float4 pmax23 = spu_sel(p3, p2, retGt23);
- vec_int4 imax23 = spu_sel(i3, i2, retGt23);
- vec_uint4 retGt0123 = spu_cmpgt(pmax01, pmax23);
- vec_float4 pmax0123 = spu_sel(pmax23, pmax01, retGt0123);
- vec_int4 imax0123 = spu_sel(imax23, imax01, retGt0123);
- vec_uint4 retGtMax = spu_cmpgt(v_distMax, pmax0123);
- v_distMax = spu_sel(pmax0123, v_distMax, retGtMax);
- v_idxMax = spu_sel(imax0123, v_idxMax, retGtMax);
- }
- for (; v < (int)numverts; v++)
- {
- vec_float4 p = vec_dot3(points[v].get128(), localDir.get128());
- const vec_int4 i = {v, 0, 0, 0};
- vec_uint4 retGtMax = spu_cmpgt(v_distMax, p);
- v_distMax = spu_sel(p, v_distMax, retGtMax);
- v_idxMax = spu_sel(i, v_idxMax, retGtMax);
- }
- int ptIndex = spu_extract(v_idxMax, 0);
- const btVector3& supVec = points[ptIndex] * localScaling;
- return supVec;
-#else
-
- btScalar maxDot;
- long ptIndex = vec.maxDot(points, numPoints, maxDot);
- btAssert(ptIndex >= 0);
- if (ptIndex < 0)
- {
- ptIndex = 0;
- }
- btVector3 supVec = points[ptIndex] * localScaling;
- return supVec;
-#endif //__SPU__
-}
-
-btVector3 btConvexShape::localGetSupportVertexWithoutMarginNonVirtual(const btVector3& localDir) const
-{
- switch (m_shapeType)
- {
- case SPHERE_SHAPE_PROXYTYPE:
- {
- return btVector3(0, 0, 0);
- }
- case BOX_SHAPE_PROXYTYPE:
- {
- btBoxShape* convexShape = (btBoxShape*)this;
- const btVector3& halfExtents = convexShape->getImplicitShapeDimensions();
-
-#if defined(__APPLE__) && (defined(BT_USE_SSE) || defined(BT_USE_NEON))
-#if defined(BT_USE_SSE)
- return btVector3(_mm_xor_ps(_mm_and_ps(localDir.mVec128, (__m128){-0.0f, -0.0f, -0.0f, -0.0f}), halfExtents.mVec128));
-#elif defined(BT_USE_NEON)
- return btVector3((float32x4_t)(((uint32x4_t)localDir.mVec128 & (uint32x4_t){0x80000000, 0x80000000, 0x80000000, 0x80000000}) ^ (uint32x4_t)halfExtents.mVec128));
-#else
-#error unknown vector arch
-#endif
-#else
- return btVector3(btFsels(localDir.x(), halfExtents.x(), -halfExtents.x()),
- btFsels(localDir.y(), halfExtents.y(), -halfExtents.y()),
- btFsels(localDir.z(), halfExtents.z(), -halfExtents.z()));
-#endif
- }
- case TRIANGLE_SHAPE_PROXYTYPE:
- {
- btTriangleShape* triangleShape = (btTriangleShape*)this;
- btVector3 dir(localDir.getX(), localDir.getY(), localDir.getZ());
- btVector3* vertices = &triangleShape->m_vertices1[0];
- btVector3 dots = dir.dot3(vertices[0], vertices[1], vertices[2]);
- btVector3 sup = vertices[dots.maxAxis()];
- return btVector3(sup.getX(), sup.getY(), sup.getZ());
- }
- case CYLINDER_SHAPE_PROXYTYPE:
- {
- btCylinderShape* cylShape = (btCylinderShape*)this;
- //mapping of halfextents/dimension onto radius/height depends on how cylinder local orientation is (upAxis)
-
- btVector3 halfExtents = cylShape->getImplicitShapeDimensions();
- btVector3 v(localDir.getX(), localDir.getY(), localDir.getZ());
- int cylinderUpAxis = cylShape->getUpAxis();
- int XX(1), YY(0), ZZ(2);
-
- switch (cylinderUpAxis)
- {
- case 0:
- {
- XX = 1;
- YY = 0;
- ZZ = 2;
- }
- break;
- case 1:
- {
- XX = 0;
- YY = 1;
- ZZ = 2;
- }
- break;
- case 2:
- {
- XX = 0;
- YY = 2;
- ZZ = 1;
- }
- break;
- default:
- btAssert(0);
- break;
- };
-
- btScalar radius = halfExtents[XX];
- btScalar halfHeight = halfExtents[cylinderUpAxis];
-
- btVector3 tmp;
- btScalar d;
-
- btScalar s = btSqrt(v[XX] * v[XX] + v[ZZ] * v[ZZ]);
- if (s != btScalar(0.0))
- {
- d = radius / s;
- tmp[XX] = v[XX] * d;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = v[ZZ] * d;
- return btVector3(tmp.getX(), tmp.getY(), tmp.getZ());
- }
- else
- {
- tmp[XX] = radius;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = btScalar(0.0);
- return btVector3(tmp.getX(), tmp.getY(), tmp.getZ());
- }
- }
- case CAPSULE_SHAPE_PROXYTYPE:
- {
- btVector3 vec0(localDir.getX(), localDir.getY(), localDir.getZ());
-
- btCapsuleShape* capsuleShape = (btCapsuleShape*)this;
- btScalar halfHeight = capsuleShape->getHalfHeight();
- int capsuleUpAxis = capsuleShape->getUpAxis();
-
- btVector3 supVec(0, 0, 0);
-
- btScalar maxDot(btScalar(-BT_LARGE_FLOAT));
-
- btVector3 vec = vec0;
- btScalar lenSqr = vec.length2();
- if (lenSqr < SIMD_EPSILON * SIMD_EPSILON)
- {
- vec.setValue(1, 0, 0);
- }
- else
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- vec *= rlen;
- }
- btVector3 vtx;
- btScalar newDot;
- {
- btVector3 pos(0, 0, 0);
- pos[capsuleUpAxis] = halfHeight;
-
- vtx = pos;
- newDot = vec.dot(vtx);
-
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supVec = vtx;
- }
- }
- {
- btVector3 pos(0, 0, 0);
- pos[capsuleUpAxis] = -halfHeight;
-
- vtx = pos;
- newDot = vec.dot(vtx);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supVec = vtx;
- }
- }
- return btVector3(supVec.getX(), supVec.getY(), supVec.getZ());
- }
- case CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE:
- {
- btConvexPointCloudShape* convexPointCloudShape = (btConvexPointCloudShape*)this;
- btVector3* points = convexPointCloudShape->getUnscaledPoints();
- int numPoints = convexPointCloudShape->getNumPoints();
- return convexHullSupport(localDir, points, numPoints, convexPointCloudShape->getLocalScalingNV());
- }
- case CONVEX_HULL_SHAPE_PROXYTYPE:
- {
- btConvexHullShape* convexHullShape = (btConvexHullShape*)this;
- btVector3* points = convexHullShape->getUnscaledPoints();
- int numPoints = convexHullShape->getNumPoints();
- return convexHullSupport(localDir, points, numPoints, convexHullShape->getLocalScalingNV());
- }
- default:
-#ifndef __SPU__
- return this->localGetSupportingVertexWithoutMargin(localDir);
-#else
- btAssert(0);
-#endif
- }
-
- // should never reach here
- btAssert(0);
- return btVector3(btScalar(0.0f), btScalar(0.0f), btScalar(0.0f));
-}
-
-btVector3 btConvexShape::localGetSupportVertexNonVirtual(const btVector3& localDir) const
-{
- btVector3 localDirNorm = localDir;
- if (localDirNorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- localDirNorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- localDirNorm.normalize();
-
- return localGetSupportVertexWithoutMarginNonVirtual(localDirNorm) + getMarginNonVirtual() * localDirNorm;
-}
-
-/* TODO: This should be bumped up to btCollisionShape () */
-btScalar btConvexShape::getMarginNonVirtual() const
-{
- switch (m_shapeType)
- {
- case SPHERE_SHAPE_PROXYTYPE:
- {
- btSphereShape* sphereShape = (btSphereShape*)this;
- return sphereShape->getRadius();
- }
- case BOX_SHAPE_PROXYTYPE:
- {
- btBoxShape* convexShape = (btBoxShape*)this;
- return convexShape->getMarginNV();
- }
- case TRIANGLE_SHAPE_PROXYTYPE:
- {
- btTriangleShape* triangleShape = (btTriangleShape*)this;
- return triangleShape->getMarginNV();
- }
- case CYLINDER_SHAPE_PROXYTYPE:
- {
- btCylinderShape* cylShape = (btCylinderShape*)this;
- return cylShape->getMarginNV();
- }
- case CONE_SHAPE_PROXYTYPE:
- {
- btConeShape* conShape = (btConeShape*)this;
- return conShape->getMarginNV();
- }
- case CAPSULE_SHAPE_PROXYTYPE:
- {
- btCapsuleShape* capsuleShape = (btCapsuleShape*)this;
- return capsuleShape->getMarginNV();
- }
- case CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE:
- /* fall through */
- case CONVEX_HULL_SHAPE_PROXYTYPE:
- {
- btPolyhedralConvexShape* convexHullShape = (btPolyhedralConvexShape*)this;
- return convexHullShape->getMarginNV();
- }
- default:
-#ifndef __SPU__
- return this->getMargin();
-#else
- btAssert(0);
-#endif
- }
-
- // should never reach here
- btAssert(0);
- return btScalar(0.0f);
-}
-#ifndef __SPU__
-void btConvexShape::getAabbNonVirtual(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- switch (m_shapeType)
- {
- case SPHERE_SHAPE_PROXYTYPE:
- {
- btSphereShape* sphereShape = (btSphereShape*)this;
- btScalar radius = sphereShape->getImplicitShapeDimensions().getX(); // * convexShape->getLocalScaling().getX();
- btScalar margin = radius + sphereShape->getMarginNonVirtual();
- const btVector3& center = t.getOrigin();
- btVector3 extent(margin, margin, margin);
- aabbMin = center - extent;
- aabbMax = center + extent;
- }
- break;
- case CYLINDER_SHAPE_PROXYTYPE:
- /* fall through */
- case BOX_SHAPE_PROXYTYPE:
- {
- btBoxShape* convexShape = (btBoxShape*)this;
- btScalar margin = convexShape->getMarginNonVirtual();
- btVector3 halfExtents = convexShape->getImplicitShapeDimensions();
- halfExtents += btVector3(margin, margin, margin);
- btMatrix3x3 abs_b = t.getBasis().absolute();
- btVector3 center = t.getOrigin();
- btVector3 extent = halfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
-
- aabbMin = center - extent;
- aabbMax = center + extent;
- break;
- }
- case TRIANGLE_SHAPE_PROXYTYPE:
- {
- btTriangleShape* triangleShape = (btTriangleShape*)this;
- btScalar margin = triangleShape->getMarginNonVirtual();
- for (int i = 0; i < 3; i++)
- {
- btVector3 vec(btScalar(0.), btScalar(0.), btScalar(0.));
- vec[i] = btScalar(1.);
-
- btVector3 sv = localGetSupportVertexWithoutMarginNonVirtual(vec * t.getBasis());
-
- btVector3 tmp = t(sv);
- aabbMax[i] = tmp[i] + margin;
- vec[i] = btScalar(-1.);
- tmp = t(localGetSupportVertexWithoutMarginNonVirtual(vec * t.getBasis()));
- aabbMin[i] = tmp[i] - margin;
- }
- }
- break;
- case CAPSULE_SHAPE_PROXYTYPE:
- {
- btCapsuleShape* capsuleShape = (btCapsuleShape*)this;
- btVector3 halfExtents(capsuleShape->getRadius(), capsuleShape->getRadius(), capsuleShape->getRadius());
- int m_upAxis = capsuleShape->getUpAxis();
- halfExtents[m_upAxis] = capsuleShape->getRadius() + capsuleShape->getHalfHeight();
- btMatrix3x3 abs_b = t.getBasis().absolute();
- btVector3 center = t.getOrigin();
- btVector3 extent = halfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMin = center - extent;
- aabbMax = center + extent;
- }
- break;
- case CONVEX_POINT_CLOUD_SHAPE_PROXYTYPE:
- case CONVEX_HULL_SHAPE_PROXYTYPE:
- {
- btPolyhedralConvexAabbCachingShape* convexHullShape = (btPolyhedralConvexAabbCachingShape*)this;
- btScalar margin = convexHullShape->getMarginNonVirtual();
- convexHullShape->getNonvirtualAabb(t, aabbMin, aabbMax, margin);
- }
- break;
- default:
-#ifndef __SPU__
- this->getAabb(t, aabbMin, aabbMax);
-#else
- btAssert(0);
-#endif
- break;
- }
-
- // should never reach here
- btAssert(0);
-}
-
-#endif //__SPU__
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.h
deleted file mode 100644
index d3b3ed816e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexShape.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_SHAPE_INTERFACE1
-#define BT_CONVEX_SHAPE_INTERFACE1
-
-#include "btCollisionShape.h"
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "btCollisionMargin.h"
-#include "LinearMath/btAlignedAllocator.h"
-
-#define MAX_PREFERRED_PENETRATION_DIRECTIONS 10
-
-/// The btConvexShape is an abstract shape interface, implemented by all convex shapes such as btBoxShape, btConvexHullShape etc.
-/// It describes general convex shapes using the localGetSupportingVertex interface, used by collision detectors such as btGjkPairDetector.
-ATTRIBUTE_ALIGNED16(class)
-btConvexShape : public btCollisionShape
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConvexShape();
-
- virtual ~btConvexShape();
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const = 0;
-
-////////
-#ifndef __SPU__
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const = 0;
-#endif //#ifndef __SPU__
-
- btVector3 localGetSupportVertexWithoutMarginNonVirtual(const btVector3& vec) const;
- btVector3 localGetSupportVertexNonVirtual(const btVector3& vec) const;
- btScalar getMarginNonVirtual() const;
- void getAabbNonVirtual(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void project(const btTransform& trans, const btVector3& dir, btScalar& minProj, btScalar& maxProj, btVector3& witnesPtMin, btVector3& witnesPtMax) const;
-
- //notice that the vectors should be unit length
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const = 0;
-
- ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const = 0;
-
- virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const = 0;
-
- virtual void setLocalScaling(const btVector3& scaling) = 0;
- virtual const btVector3& getLocalScaling() const = 0;
-
- virtual void setMargin(btScalar margin) = 0;
-
- virtual btScalar getMargin() const = 0;
-
- virtual int getNumPreferredPenetrationDirections() const = 0;
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const = 0;
-};
-
-#endif //BT_CONVEX_SHAPE_INTERFACE1
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp
deleted file mode 100644
index f6987cc760..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp
+++ /dev/null
@@ -1,283 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvexTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-#include "LinearMath/btQuaternion.h"
-#include "BulletCollision/CollisionShapes/btStridingMeshInterface.h"
-
-btConvexTriangleMeshShape ::btConvexTriangleMeshShape(btStridingMeshInterface* meshInterface, bool calcAabb)
- : btPolyhedralConvexAabbCachingShape(), m_stridingMesh(meshInterface)
-{
- m_shapeType = CONVEX_TRIANGLEMESH_SHAPE_PROXYTYPE;
- if (calcAabb)
- recalcLocalAabb();
-}
-
-///It's not nice to have all this virtual function overhead, so perhaps we can also gather the points once
-///but then we are duplicating
-class LocalSupportVertexCallback : public btInternalTriangleIndexCallback
-{
- btVector3 m_supportVertexLocal;
-
-public:
- btScalar m_maxDot;
- btVector3 m_supportVecLocal;
-
- LocalSupportVertexCallback(const btVector3& supportVecLocal)
- : m_supportVertexLocal(btScalar(0.), btScalar(0.), btScalar(0.)),
- m_maxDot(btScalar(-BT_LARGE_FLOAT)),
- m_supportVecLocal(supportVecLocal)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)triangleIndex;
- (void)partId;
-
- for (int i = 0; i < 3; i++)
- {
- btScalar dot = m_supportVecLocal.dot(triangle[i]);
- if (dot > m_maxDot)
- {
- m_maxDot = dot;
- m_supportVertexLocal = triangle[i];
- }
- }
- }
-
- btVector3 GetSupportVertexLocal()
- {
- return m_supportVertexLocal;
- }
-};
-
-btVector3 btConvexTriangleMeshShape::localGetSupportingVertexWithoutMargin(const btVector3& vec0) const
-{
- btVector3 supVec(btScalar(0.), btScalar(0.), btScalar(0.));
-
- btVector3 vec = vec0;
- btScalar lenSqr = vec.length2();
- if (lenSqr < btScalar(0.0001))
- {
- vec.setValue(1, 0, 0);
- }
- else
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- vec *= rlen;
- }
-
- LocalSupportVertexCallback supportCallback(vec);
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_stridingMesh->InternalProcessAllTriangles(&supportCallback, -aabbMax, aabbMax);
- supVec = supportCallback.GetSupportVertexLocal();
-
- return supVec;
-}
-
-void btConvexTriangleMeshShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- //use 'w' component of supportVerticesOut?
- {
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i][3] = btScalar(-BT_LARGE_FLOAT);
- }
- }
-
- ///@todo: could do the batch inside the callback!
-
- for (int j = 0; j < numVectors; j++)
- {
- const btVector3& vec = vectors[j];
- LocalSupportVertexCallback supportCallback(vec);
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_stridingMesh->InternalProcessAllTriangles(&supportCallback, -aabbMax, aabbMax);
- supportVerticesOut[j] = supportCallback.GetSupportVertexLocal();
- }
-}
-
-btVector3 btConvexTriangleMeshShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 supVertex = localGetSupportingVertexWithoutMargin(vec);
-
- if (getMargin() != btScalar(0.))
- {
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- }
- return supVertex;
-}
-
-//currently just for debugging (drawing), perhaps future support for algebraic continuous collision detection
-//Please note that you can debug-draw btConvexTriangleMeshShape with the Raytracer Demo
-int btConvexTriangleMeshShape::getNumVertices() const
-{
- //cache this?
- return 0;
-}
-
-int btConvexTriangleMeshShape::getNumEdges() const
-{
- return 0;
-}
-
-void btConvexTriangleMeshShape::getEdge(int, btVector3&, btVector3&) const
-{
- btAssert(0);
-}
-
-void btConvexTriangleMeshShape::getVertex(int, btVector3&) const
-{
- btAssert(0);
-}
-
-int btConvexTriangleMeshShape::getNumPlanes() const
-{
- return 0;
-}
-
-void btConvexTriangleMeshShape::getPlane(btVector3&, btVector3&, int) const
-{
- btAssert(0);
-}
-
-//not yet
-bool btConvexTriangleMeshShape::isInside(const btVector3&, btScalar) const
-{
- btAssert(0);
- return false;
-}
-
-void btConvexTriangleMeshShape::setLocalScaling(const btVector3& scaling)
-{
- m_stridingMesh->setScaling(scaling);
-
- recalcLocalAabb();
-}
-
-const btVector3& btConvexTriangleMeshShape::getLocalScaling() const
-{
- return m_stridingMesh->getScaling();
-}
-
-void btConvexTriangleMeshShape::calculatePrincipalAxisTransform(btTransform& principal, btVector3& inertia, btScalar& volume) const
-{
- class CenterCallback : public btInternalTriangleIndexCallback
- {
- bool first;
- btVector3 ref;
- btVector3 sum;
- btScalar volume;
-
- public:
- CenterCallback() : first(true), ref(0, 0, 0), sum(0, 0, 0), volume(0)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)triangleIndex;
- (void)partId;
- if (first)
- {
- ref = triangle[0];
- first = false;
- }
- else
- {
- btScalar vol = btFabs((triangle[0] - ref).triple(triangle[1] - ref, triangle[2] - ref));
- sum += (btScalar(0.25) * vol) * ((triangle[0] + triangle[1] + triangle[2] + ref));
- volume += vol;
- }
- }
-
- btVector3 getCenter()
- {
- return (volume > 0) ? sum / volume : ref;
- }
-
- btScalar getVolume()
- {
- return volume * btScalar(1. / 6);
- }
- };
-
- class InertiaCallback : public btInternalTriangleIndexCallback
- {
- btMatrix3x3 sum;
- btVector3 center;
-
- public:
- InertiaCallback(btVector3& center) : sum(0, 0, 0, 0, 0, 0, 0, 0, 0), center(center)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)triangleIndex;
- (void)partId;
- btMatrix3x3 i;
- btVector3 a = triangle[0] - center;
- btVector3 b = triangle[1] - center;
- btVector3 c = triangle[2] - center;
- btScalar volNeg = -btFabs(a.triple(b, c)) * btScalar(1. / 6);
- for (int j = 0; j < 3; j++)
- {
- for (int k = 0; k <= j; k++)
- {
- i[j][k] = i[k][j] = volNeg * (btScalar(0.1) * (a[j] * a[k] + b[j] * b[k] + c[j] * c[k]) + btScalar(0.05) * (a[j] * b[k] + a[k] * b[j] + a[j] * c[k] + a[k] * c[j] + b[j] * c[k] + b[k] * c[j]));
- }
- }
- btScalar i00 = -i[0][0];
- btScalar i11 = -i[1][1];
- btScalar i22 = -i[2][2];
- i[0][0] = i11 + i22;
- i[1][1] = i22 + i00;
- i[2][2] = i00 + i11;
- sum[0] += i[0];
- sum[1] += i[1];
- sum[2] += i[2];
- }
-
- btMatrix3x3& getInertia()
- {
- return sum;
- }
- };
-
- CenterCallback centerCallback;
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_stridingMesh->InternalProcessAllTriangles(&centerCallback, -aabbMax, aabbMax);
- btVector3 center = centerCallback.getCenter();
- principal.setOrigin(center);
- volume = centerCallback.getVolume();
-
- InertiaCallback inertiaCallback(center);
- m_stridingMesh->InternalProcessAllTriangles(&inertiaCallback, -aabbMax, aabbMax);
-
- btMatrix3x3& i = inertiaCallback.getInertia();
- i.diagonalize(principal.getBasis(), btScalar(0.00001), 20);
- inertia.setValue(i[0][0], i[1][1], i[2][2]);
- inertia /= volume;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h
deleted file mode 100644
index 6dac9fff04..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#ifndef BT_CONVEX_TRIANGLEMESH_SHAPE_H
-#define BT_CONVEX_TRIANGLEMESH_SHAPE_H
-
-#include "btPolyhedralConvexShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-/// The btConvexTriangleMeshShape is a convex hull of a triangle mesh, but the performance is not as good as btConvexHullShape.
-/// A small benefit of this class is that it uses the btStridingMeshInterface, so you can avoid the duplication of the triangle mesh data. Nevertheless, most users should use the much better performing btConvexHullShape instead.
-ATTRIBUTE_ALIGNED16(class)
-btConvexTriangleMeshShape : public btPolyhedralConvexAabbCachingShape
-{
- class btStridingMeshInterface* m_stridingMesh;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConvexTriangleMeshShape(btStridingMeshInterface * meshInterface, bool calcAabb = true);
-
- class btStridingMeshInterface* getMeshInterface()
- {
- return m_stridingMesh;
- }
- const class btStridingMeshInterface* getMeshInterface() const
- {
- return m_stridingMesh;
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- //debugging
- virtual const char* getName() const { return "ConvexTrimesh"; }
-
- virtual int getNumVertices() const;
- virtual int getNumEdges() const;
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const;
- virtual void getVertex(int i, btVector3& vtx) const;
- virtual int getNumPlanes() const;
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const;
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
-
- ///computes the exact moment of inertia and the transform from the coordinate system defined by the principal axes of the moment of inertia
- ///and the center of mass to the current coordinate system. A mass of 1 is assumed, for other masses just multiply the computed "inertia"
- ///by the mass. The resulting transform "principal" has to be applied inversely to the mesh in order for the local coordinate system of the
- ///shape to be centered at the center of mass and to coincide with the principal axes. This also necessitates a correction of the world transform
- ///of the collision object by the principal transform. This method also computes the volume of the convex mesh.
- void calculatePrincipalAxisTransform(btTransform & principal, btVector3 & inertia, btScalar & volume) const;
-};
-
-#endif //BT_CONVEX_TRIANGLEMESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.cpp
deleted file mode 100644
index 66dbb8e53d..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.cpp
+++ /dev/null
@@ -1,253 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btCylinderShape.h"
-
-btCylinderShape::btCylinderShape(const btVector3& halfExtents)
- : btConvexInternalShape(),
- m_upAxis(1)
-{
- btVector3 margin(getMargin(), getMargin(), getMargin());
- m_implicitShapeDimensions = (halfExtents * m_localScaling) - margin;
-
- setSafeMargin(halfExtents);
-
- m_shapeType = CYLINDER_SHAPE_PROXYTYPE;
-}
-
-btCylinderShapeX::btCylinderShapeX(const btVector3& halfExtents)
- : btCylinderShape(halfExtents)
-{
- m_upAxis = 0;
-}
-
-btCylinderShapeZ::btCylinderShapeZ(const btVector3& halfExtents)
- : btCylinderShape(halfExtents)
-{
- m_upAxis = 2;
-}
-
-void btCylinderShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btTransformAabb(getHalfExtentsWithoutMargin(), getMargin(), t, aabbMin, aabbMax);
-}
-
-void btCylinderShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
-//Until Bullet 2.77 a box approximation was used, so uncomment this if you need backwards compatibility
-//#define USE_BOX_INERTIA_APPROXIMATION 1
-#ifndef USE_BOX_INERTIA_APPROXIMATION
-
- /*
- cylinder is defined as following:
- *
- * - principle axis aligned along y by default, radius in x, z-value not used
- * - for btCylinderShapeX: principle axis aligned along x, radius in y direction, z-value not used
- * - for btCylinderShapeZ: principle axis aligned along z, radius in x direction, y-value not used
- *
- */
-
- btScalar radius2; // square of cylinder radius
- btScalar height2; // square of cylinder height
- btVector3 halfExtents = getHalfExtentsWithMargin(); // get cylinder dimension
- btScalar div12 = mass / 12.f;
- btScalar div4 = mass / 4.f;
- btScalar div2 = mass / 2.f;
- int idxRadius, idxHeight;
-
- switch (m_upAxis) // get indices of radius and height of cylinder
- {
- case 0: // cylinder is aligned along x
- idxRadius = 1;
- idxHeight = 0;
- break;
- case 2: // cylinder is aligned along z
- idxRadius = 0;
- idxHeight = 2;
- break;
- default: // cylinder is aligned along y
- idxRadius = 0;
- idxHeight = 1;
- }
-
- // calculate squares
- radius2 = halfExtents[idxRadius] * halfExtents[idxRadius];
- height2 = btScalar(4.) * halfExtents[idxHeight] * halfExtents[idxHeight];
-
- // calculate tensor terms
- btScalar t1 = div12 * height2 + div4 * radius2;
- btScalar t2 = div2 * radius2;
-
- switch (m_upAxis) // set diagonal elements of inertia tensor
- {
- case 0: // cylinder is aligned along x
- inertia.setValue(t2, t1, t1);
- break;
- case 2: // cylinder is aligned along z
- inertia.setValue(t1, t1, t2);
- break;
- default: // cylinder is aligned along y
- inertia.setValue(t1, t2, t1);
- }
-#else //USE_BOX_INERTIA_APPROXIMATION
- //approximation of box shape
- btVector3 halfExtents = getHalfExtentsWithMargin();
-
- btScalar lx = btScalar(2.) * (halfExtents.x());
- btScalar ly = btScalar(2.) * (halfExtents.y());
- btScalar lz = btScalar(2.) * (halfExtents.z());
-
- inertia.setValue(mass / (btScalar(12.0)) * (ly * ly + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + ly * ly));
-#endif //USE_BOX_INERTIA_APPROXIMATION
-}
-
-SIMD_FORCE_INLINE btVector3 CylinderLocalSupportX(const btVector3& halfExtents, const btVector3& v)
-{
- const int cylinderUpAxis = 0;
- const int XX = 1;
- const int YY = 0;
- const int ZZ = 2;
-
- //mapping depends on how cylinder local orientation is
- // extents of the cylinder is: X,Y is for radius, and Z for height
-
- btScalar radius = halfExtents[XX];
- btScalar halfHeight = halfExtents[cylinderUpAxis];
-
- btVector3 tmp;
- btScalar d;
-
- btScalar s = btSqrt(v[XX] * v[XX] + v[ZZ] * v[ZZ]);
- if (s != btScalar(0.0))
- {
- d = radius / s;
- tmp[XX] = v[XX] * d;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = v[ZZ] * d;
- return tmp;
- }
- else
- {
- tmp[XX] = radius;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = btScalar(0.0);
- return tmp;
- }
-}
-
-inline btVector3 CylinderLocalSupportY(const btVector3& halfExtents, const btVector3& v)
-{
- const int cylinderUpAxis = 1;
- const int XX = 0;
- const int YY = 1;
- const int ZZ = 2;
-
- btScalar radius = halfExtents[XX];
- btScalar halfHeight = halfExtents[cylinderUpAxis];
-
- btVector3 tmp;
- btScalar d;
-
- btScalar s = btSqrt(v[XX] * v[XX] + v[ZZ] * v[ZZ]);
- if (s != btScalar(0.0))
- {
- d = radius / s;
- tmp[XX] = v[XX] * d;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = v[ZZ] * d;
- return tmp;
- }
- else
- {
- tmp[XX] = radius;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = btScalar(0.0);
- return tmp;
- }
-}
-
-inline btVector3 CylinderLocalSupportZ(const btVector3& halfExtents, const btVector3& v)
-{
- const int cylinderUpAxis = 2;
- const int XX = 0;
- const int YY = 2;
- const int ZZ = 1;
-
- //mapping depends on how cylinder local orientation is
- // extents of the cylinder is: X,Y is for radius, and Z for height
-
- btScalar radius = halfExtents[XX];
- btScalar halfHeight = halfExtents[cylinderUpAxis];
-
- btVector3 tmp;
- btScalar d;
-
- btScalar s = btSqrt(v[XX] * v[XX] + v[ZZ] * v[ZZ]);
- if (s != btScalar(0.0))
- {
- d = radius / s;
- tmp[XX] = v[XX] * d;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = v[ZZ] * d;
- return tmp;
- }
- else
- {
- tmp[XX] = radius;
- tmp[YY] = v[YY] < 0.0 ? -halfHeight : halfHeight;
- tmp[ZZ] = btScalar(0.0);
- return tmp;
- }
-}
-
-btVector3 btCylinderShapeX::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- return CylinderLocalSupportX(getHalfExtentsWithoutMargin(), vec);
-}
-
-btVector3 btCylinderShapeZ::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- return CylinderLocalSupportZ(getHalfExtentsWithoutMargin(), vec);
-}
-btVector3 btCylinderShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- return CylinderLocalSupportY(getHalfExtentsWithoutMargin(), vec);
-}
-
-void btCylinderShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i] = CylinderLocalSupportY(getHalfExtentsWithoutMargin(), vectors[i]);
- }
-}
-
-void btCylinderShapeZ::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i] = CylinderLocalSupportZ(getHalfExtentsWithoutMargin(), vectors[i]);
- }
-}
-
-void btCylinderShapeX::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i] = CylinderLocalSupportX(getHalfExtentsWithoutMargin(), vectors[i]);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.h
deleted file mode 100644
index d3f64508ba..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btCylinderShape.h
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CYLINDER_MINKOWSKI_H
-#define BT_CYLINDER_MINKOWSKI_H
-
-#include "btBoxShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-#include "LinearMath/btVector3.h"
-
-/// The btCylinderShape class implements a cylinder shape primitive, centered around the origin. Its central axis aligned with the Y axis. btCylinderShapeX is aligned with the X axis and btCylinderShapeZ around the Z axis.
-ATTRIBUTE_ALIGNED16(class)
-btCylinderShape : public btConvexInternalShape
-
-{
-protected:
- int m_upAxis;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btVector3 getHalfExtentsWithMargin() const
- {
- btVector3 halfExtents = getHalfExtentsWithoutMargin();
- btVector3 margin(getMargin(), getMargin(), getMargin());
- halfExtents += margin;
- return halfExtents;
- }
-
- const btVector3& getHalfExtentsWithoutMargin() const
- {
- return m_implicitShapeDimensions; //changed in Bullet 2.63: assume the scaling and margin are included
- }
-
- btCylinderShape(const btVector3& halfExtents);
-
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void setMargin(btScalar collisionMargin)
- {
- //correct the m_implicitShapeDimensions for the margin
- btVector3 oldMargin(getMargin(), getMargin(), getMargin());
- btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin;
-
- btConvexInternalShape::setMargin(collisionMargin);
- btVector3 newMargin(getMargin(), getMargin(), getMargin());
- m_implicitShapeDimensions = implicitShapeDimensionsWithMargin - newMargin;
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const
- {
- btVector3 supVertex;
- supVertex = localGetSupportingVertexWithoutMargin(vec);
-
- if (getMargin() != btScalar(0.))
- {
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- }
- return supVertex;
- }
-
- //use box inertia
- // virtual void calculateLocalInertia(btScalar mass,btVector3& inertia) const;
-
- int getUpAxis() const
- {
- return m_upAxis;
- }
-
- virtual btVector3 getAnisotropicRollingFrictionDirection() const
- {
- btVector3 aniDir(0, 0, 0);
- aniDir[getUpAxis()] = 1;
- return aniDir;
- }
-
- virtual btScalar getRadius() const
- {
- return getHalfExtentsWithMargin().getX();
- }
-
- virtual void setLocalScaling(const btVector3& scaling)
- {
- btVector3 oldMargin(getMargin(), getMargin(), getMargin());
- btVector3 implicitShapeDimensionsWithMargin = m_implicitShapeDimensions + oldMargin;
- btVector3 unScaledImplicitShapeDimensionsWithMargin = implicitShapeDimensionsWithMargin / m_localScaling;
-
- btConvexInternalShape::setLocalScaling(scaling);
-
- m_implicitShapeDimensions = (unScaledImplicitShapeDimensionsWithMargin * m_localScaling) - oldMargin;
- }
-
- //debugging
- virtual const char* getName() const
- {
- return "CylinderY";
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-class btCylinderShapeX : public btCylinderShape
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btCylinderShapeX(const btVector3& halfExtents);
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- //debugging
- virtual const char* getName() const
- {
- return "CylinderX";
- }
-
- virtual btScalar getRadius() const
- {
- return getHalfExtentsWithMargin().getY();
- }
-};
-
-class btCylinderShapeZ : public btCylinderShape
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btCylinderShapeZ(const btVector3& halfExtents);
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- //debugging
- virtual const char* getName() const
- {
- return "CylinderZ";
- }
-
- virtual btScalar getRadius() const
- {
- return getHalfExtentsWithMargin().getX();
- }
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btCylinderShapeData
-{
- btConvexInternalShapeData m_convexInternalShapeData;
-
- int m_upAxis;
-
- char m_padding[4];
-};
-
-SIMD_FORCE_INLINE int btCylinderShape::calculateSerializeBufferSize() const
-{
- return sizeof(btCylinderShapeData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btCylinderShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btCylinderShapeData* shapeData = (btCylinderShapeData*)dataBuffer;
-
- btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
-
- shapeData->m_upAxis = m_upAxis;
-
- // Fill padding with zeros to appease msan.
- shapeData->m_padding[0] = 0;
- shapeData->m_padding[1] = 0;
- shapeData->m_padding[2] = 0;
- shapeData->m_padding[3] = 0;
-
- return "btCylinderShapeData";
-}
-
-#endif //BT_CYLINDER_MINKOWSKI_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.cpp
deleted file mode 100644
index 4699555bd8..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btEmptyShape.h"
-
-#include "btCollisionShape.h"
-
-btEmptyShape::btEmptyShape() : btConcaveShape()
-{
- m_shapeType = EMPTY_SHAPE_PROXYTYPE;
-}
-
-btEmptyShape::~btEmptyShape()
-{
-}
-
-///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
-void btEmptyShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btVector3 margin(getMargin(), getMargin(), getMargin());
-
- aabbMin = t.getOrigin() - margin;
-
- aabbMax = t.getOrigin() + margin;
-}
-
-void btEmptyShape::calculateLocalInertia(btScalar, btVector3&) const
-{
- btAssert(0);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.h
deleted file mode 100644
index d2e21173b2..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btEmptyShape.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_EMPTY_SHAPE_H
-#define BT_EMPTY_SHAPE_H
-
-#include "btConcaveShape.h"
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "btCollisionMargin.h"
-
-/// The btEmptyShape is a collision shape without actual collision detection shape, so most users should ignore this class.
-/// It can be replaced by another shape during runtime, but the inertia tensor should be recomputed.
-ATTRIBUTE_ALIGNED16(class)
-btEmptyShape : public btConcaveShape
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btEmptyShape();
-
- virtual ~btEmptyShape();
-
- ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void setLocalScaling(const btVector3& scaling)
- {
- m_localScaling = scaling;
- }
- virtual const btVector3& getLocalScaling() const
- {
- return m_localScaling;
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual const char* getName() const
- {
- return "Empty";
- }
-
- virtual void processAllTriangles(btTriangleCallback*, const btVector3&, const btVector3&) const
- {
- }
-
-protected:
- btVector3 m_localScaling;
-};
-
-#endif //BT_EMPTY_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp
deleted file mode 100644
index 01bf7f67f5..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp
+++ /dev/null
@@ -1,950 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btHeightfieldTerrainShape.h"
-
-#include "LinearMath/btTransformUtil.h"
-
-btHeightfieldTerrainShape::btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const float* heightfieldData, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges)
- : m_userValue3(0), m_triangleInfoMap(0)
-{
- initialize(heightStickWidth, heightStickLength, heightfieldData,
- /*heightScale=*/1, minHeight, maxHeight, upAxis, PHY_FLOAT,
- flipQuadEdges);
-}
-
-btHeightfieldTerrainShape::btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength, const double* heightfieldData,
- btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges)
- : m_userValue3(0), m_triangleInfoMap(0)
-{
- initialize(heightStickWidth, heightStickLength, heightfieldData,
- /*heightScale=*/1, minHeight, maxHeight, upAxis, PHY_DOUBLE,
- flipQuadEdges);
-}
-
-btHeightfieldTerrainShape::btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength, const short* heightfieldData, btScalar heightScale,
- btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges)
- : m_userValue3(0), m_triangleInfoMap(0)
-{
- initialize(heightStickWidth, heightStickLength, heightfieldData,
- heightScale, minHeight, maxHeight, upAxis, PHY_SHORT,
- flipQuadEdges);
-}
-
-btHeightfieldTerrainShape::btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength, const unsigned char* heightfieldData, btScalar heightScale,
- btScalar minHeight, btScalar maxHeight, int upAxis, bool flipQuadEdges)
- : m_userValue3(0), m_triangleInfoMap(0)
-{
- initialize(heightStickWidth, heightStickLength, heightfieldData,
- heightScale, minHeight, maxHeight, upAxis, PHY_UCHAR,
- flipQuadEdges);
-}
-
-btHeightfieldTerrainShape::btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength, const void* heightfieldData,
- btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis,
- PHY_ScalarType hdt, bool flipQuadEdges)
- :m_userValue3(0),
- m_triangleInfoMap(0)
-{
- // legacy constructor: Assumes PHY_FLOAT means btScalar.
-#ifdef BT_USE_DOUBLE_PRECISION
- if (hdt == PHY_FLOAT) hdt = PHY_DOUBLE;
-#endif
- initialize(heightStickWidth, heightStickLength, heightfieldData,
- heightScale, minHeight, maxHeight, upAxis, hdt,
- flipQuadEdges);
-}
-
-btHeightfieldTerrainShape::btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar maxHeight, int upAxis, bool useFloatData, bool flipQuadEdges)
- : m_userValue3(0),
- m_triangleInfoMap(0)
-{
- // legacy constructor: support only btScalar or unsigned char data,
- // and min height is zero.
- PHY_ScalarType hdt = (useFloatData) ? PHY_FLOAT : PHY_UCHAR;
-#ifdef BT_USE_DOUBLE_PRECISION
- if (hdt == PHY_FLOAT) hdt = PHY_DOUBLE;
-#endif
- btScalar minHeight = 0.0f;
-
- // previously, height = uchar * maxHeight / 65535.
- // So to preserve legacy behavior, heightScale = maxHeight / 65535
- btScalar heightScale = maxHeight / 65535;
-
- initialize(heightStickWidth, heightStickLength, heightfieldData,
- heightScale, minHeight, maxHeight, upAxis, hdt,
- flipQuadEdges);
-}
-
-void btHeightfieldTerrainShape::initialize(
- int heightStickWidth, int heightStickLength, const void* heightfieldData,
- btScalar heightScale, btScalar minHeight, btScalar maxHeight, int upAxis,
- PHY_ScalarType hdt, bool flipQuadEdges)
-{
- // validation
- btAssert(heightStickWidth > 1); // && "bad width");
- btAssert(heightStickLength > 1); // && "bad length");
- btAssert(heightfieldData); // && "null heightfield data");
- // btAssert(heightScale) -- do we care? Trust caller here
- btAssert(minHeight <= maxHeight); // && "bad min/max height");
- btAssert(upAxis >= 0 && upAxis < 3); // && "bad upAxis--should be in range [0,2]");
- btAssert(hdt != PHY_UCHAR || hdt != PHY_FLOAT || hdt != PHY_DOUBLE || hdt != PHY_SHORT); // && "Bad height data type enum");
-
- // initialize member variables
- m_shapeType = TERRAIN_SHAPE_PROXYTYPE;
- m_heightStickWidth = heightStickWidth;
- m_heightStickLength = heightStickLength;
- m_minHeight = minHeight;
- m_maxHeight = maxHeight;
- m_width = (btScalar)(heightStickWidth - 1);
- m_length = (btScalar)(heightStickLength - 1);
- m_heightScale = heightScale;
- m_heightfieldDataUnknown = heightfieldData;
- m_heightDataType = hdt;
- m_flipQuadEdges = flipQuadEdges;
- m_useDiamondSubdivision = false;
- m_useZigzagSubdivision = false;
- m_flipTriangleWinding = false;
- m_upAxis = upAxis;
- m_localScaling.setValue(btScalar(1.), btScalar(1.), btScalar(1.));
-
- m_vboundsChunkSize = 0;
- m_vboundsGridWidth = 0;
- m_vboundsGridLength = 0;
-
- // determine min/max axis-aligned bounding box (aabb) values
- switch (m_upAxis)
- {
- case 0:
- {
- m_localAabbMin.setValue(m_minHeight, 0, 0);
- m_localAabbMax.setValue(m_maxHeight, m_width, m_length);
- break;
- }
- case 1:
- {
- m_localAabbMin.setValue(0, m_minHeight, 0);
- m_localAabbMax.setValue(m_width, m_maxHeight, m_length);
- break;
- };
- case 2:
- {
- m_localAabbMin.setValue(0, 0, m_minHeight);
- m_localAabbMax.setValue(m_width, m_length, m_maxHeight);
- break;
- }
- default:
- {
- //need to get valid m_upAxis
- btAssert(0); // && "Bad m_upAxis");
- }
- }
-
- // remember origin (defined as exact middle of aabb)
- m_localOrigin = btScalar(0.5) * (m_localAabbMin + m_localAabbMax);
-}
-
-btHeightfieldTerrainShape::~btHeightfieldTerrainShape()
-{
- clearAccelerator();
-}
-
-void btHeightfieldTerrainShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btVector3 halfExtents = (m_localAabbMax - m_localAabbMin) * m_localScaling * btScalar(0.5);
-
- btVector3 localOrigin(0, 0, 0);
- localOrigin[m_upAxis] = (m_minHeight + m_maxHeight) * btScalar(0.5);
- localOrigin *= m_localScaling;
-
- btMatrix3x3 abs_b = t.getBasis().absolute();
- btVector3 center = t.getOrigin();
- btVector3 extent = halfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- extent += btVector3(getMargin(), getMargin(), getMargin());
-
- aabbMin = center - extent;
- aabbMax = center + extent;
-}
-
-/// This returns the "raw" (user's initial) height, not the actual height.
-/// The actual height needs to be adjusted to be relative to the center
-/// of the heightfield's AABB.
-btScalar
-btHeightfieldTerrainShape::getRawHeightFieldValue(int x, int y) const
-{
- btScalar val = 0.f;
- switch (m_heightDataType)
- {
- case PHY_FLOAT:
- {
- val = m_heightfieldDataFloat[(y * m_heightStickWidth) + x];
- break;
- }
-
- case PHY_DOUBLE:
- {
- val = m_heightfieldDataDouble[(y * m_heightStickWidth) + x];
- break;
- }
-
- case PHY_UCHAR:
- {
- unsigned char heightFieldValue = m_heightfieldDataUnsignedChar[(y * m_heightStickWidth) + x];
- val = heightFieldValue * m_heightScale;
- break;
- }
-
- case PHY_SHORT:
- {
- short hfValue = m_heightfieldDataShort[(y * m_heightStickWidth) + x];
- val = hfValue * m_heightScale;
- break;
- }
-
- default:
- {
- btAssert(!"Bad m_heightDataType");
- }
- }
-
- return val;
-}
-
-/// this returns the vertex in bullet-local coordinates
-void btHeightfieldTerrainShape::getVertex(int x, int y, btVector3& vertex) const
-{
- btAssert(x >= 0);
- btAssert(y >= 0);
- btAssert(x < m_heightStickWidth);
- btAssert(y < m_heightStickLength);
-
- btScalar height = getRawHeightFieldValue(x, y);
-
- switch (m_upAxis)
- {
- case 0:
- {
- vertex.setValue(
- height - m_localOrigin.getX(),
- (-m_width / btScalar(2.0)) + x,
- (-m_length / btScalar(2.0)) + y);
- break;
- }
- case 1:
- {
- vertex.setValue(
- (-m_width / btScalar(2.0)) + x,
- height - m_localOrigin.getY(),
- (-m_length / btScalar(2.0)) + y);
- break;
- };
- case 2:
- {
- vertex.setValue(
- (-m_width / btScalar(2.0)) + x,
- (-m_length / btScalar(2.0)) + y,
- height - m_localOrigin.getZ());
- break;
- }
- default:
- {
- //need to get valid m_upAxis
- btAssert(0);
- }
- }
-
- vertex *= m_localScaling;
-}
-
-static inline int
-getQuantized(
- btScalar x)
-{
- if (x < 0.0)
- {
- return (int)(x - 0.5);
- }
- return (int)(x + 0.5);
-}
-
-// Equivalent to std::minmax({a, b, c}).
-// Performs at most 3 comparisons.
-static btHeightfieldTerrainShape::Range minmaxRange(btScalar a, btScalar b, btScalar c)
-{
- if (a > b)
- {
- if (b > c)
- return btHeightfieldTerrainShape::Range(c, a);
- else if (a > c)
- return btHeightfieldTerrainShape::Range(b, a);
- else
- return btHeightfieldTerrainShape::Range(b, c);
- }
- else
- {
- if (a > c)
- return btHeightfieldTerrainShape::Range(c, b);
- else if (b > c)
- return btHeightfieldTerrainShape::Range(a, b);
- else
- return btHeightfieldTerrainShape::Range(a, c);
- }
-}
-
-/// given input vector, return quantized version
-/**
- This routine is basically determining the gridpoint indices for a given
- input vector, answering the question: "which gridpoint is closest to the
- provided point?".
-
- "with clamp" means that we restrict the point to be in the heightfield's
- axis-aligned bounding box.
- */
-void btHeightfieldTerrainShape::quantizeWithClamp(int* out, const btVector3& point, int /*isMax*/) const
-{
- btVector3 clampedPoint(point);
- clampedPoint.setMax(m_localAabbMin);
- clampedPoint.setMin(m_localAabbMax);
-
- out[0] = getQuantized(clampedPoint.getX());
- out[1] = getQuantized(clampedPoint.getY());
- out[2] = getQuantized(clampedPoint.getZ());
-}
-
-/// process all triangles within the provided axis-aligned bounding box
-/**
- basic algorithm:
- - convert input aabb to local coordinates (scale down and shift for local origin)
- - convert input aabb to a range of heightfield grid points (quantize)
- - iterate over all triangles in that subset of the grid
- */
-void btHeightfieldTerrainShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- // scale down the input aabb's so they are in local (non-scaled) coordinates
- btVector3 localAabbMin = aabbMin * btVector3(1.f / m_localScaling[0], 1.f / m_localScaling[1], 1.f / m_localScaling[2]);
- btVector3 localAabbMax = aabbMax * btVector3(1.f / m_localScaling[0], 1.f / m_localScaling[1], 1.f / m_localScaling[2]);
-
- // account for local origin
- localAabbMin += m_localOrigin;
- localAabbMax += m_localOrigin;
-
- //quantize the aabbMin and aabbMax, and adjust the start/end ranges
- int quantizedAabbMin[3];
- int quantizedAabbMax[3];
- quantizeWithClamp(quantizedAabbMin, localAabbMin, 0);
- quantizeWithClamp(quantizedAabbMax, localAabbMax, 1);
-
- // expand the min/max quantized values
- // this is to catch the case where the input aabb falls between grid points!
- for (int i = 0; i < 3; ++i)
- {
- quantizedAabbMin[i]--;
- quantizedAabbMax[i]++;
- }
-
- int startX = 0;
- int endX = m_heightStickWidth - 1;
- int startJ = 0;
- int endJ = m_heightStickLength - 1;
-
- switch (m_upAxis)
- {
- case 0:
- {
- if (quantizedAabbMin[1] > startX)
- startX = quantizedAabbMin[1];
- if (quantizedAabbMax[1] < endX)
- endX = quantizedAabbMax[1];
- if (quantizedAabbMin[2] > startJ)
- startJ = quantizedAabbMin[2];
- if (quantizedAabbMax[2] < endJ)
- endJ = quantizedAabbMax[2];
- break;
- }
- case 1:
- {
- if (quantizedAabbMin[0] > startX)
- startX = quantizedAabbMin[0];
- if (quantizedAabbMax[0] < endX)
- endX = quantizedAabbMax[0];
- if (quantizedAabbMin[2] > startJ)
- startJ = quantizedAabbMin[2];
- if (quantizedAabbMax[2] < endJ)
- endJ = quantizedAabbMax[2];
- break;
- };
- case 2:
- {
- if (quantizedAabbMin[0] > startX)
- startX = quantizedAabbMin[0];
- if (quantizedAabbMax[0] < endX)
- endX = quantizedAabbMax[0];
- if (quantizedAabbMin[1] > startJ)
- startJ = quantizedAabbMin[1];
- if (quantizedAabbMax[1] < endJ)
- endJ = quantizedAabbMax[1];
- break;
- }
- default:
- {
- //need to get valid m_upAxis
- btAssert(0);
- }
- }
-
- // TODO If m_vboundsGrid is available, use it to determine if we really need to process this area
-
- const Range aabbUpRange(aabbMin[m_upAxis], aabbMax[m_upAxis]);
- for (int j = startJ; j < endJ; j++)
- {
- for (int x = startX; x < endX; x++)
- {
- btVector3 vertices[3];
- int indices[3] = { 0, 1, 2 };
- if (m_flipTriangleWinding)
- {
- indices[0] = 2;
- indices[2] = 0;
- }
-
- if (m_flipQuadEdges || (m_useDiamondSubdivision && !((j + x) & 1)) || (m_useZigzagSubdivision && !(j & 1)))
- {
- getVertex(x, j, vertices[indices[0]]);
- getVertex(x, j + 1, vertices[indices[1]]);
- getVertex(x + 1, j + 1, vertices[indices[2]]);
-
- // Skip triangle processing if the triangle is out-of-AABB.
- Range upRange = minmaxRange(vertices[0][m_upAxis], vertices[1][m_upAxis], vertices[2][m_upAxis]);
-
- if (upRange.overlaps(aabbUpRange))
- callback->processTriangle(vertices, 2 * x, j);
-
- // already set: getVertex(x, j, vertices[indices[0]])
-
- // equivalent to: getVertex(x + 1, j + 1, vertices[indices[1]]);
- vertices[indices[1]] = vertices[indices[2]];
-
- getVertex(x + 1, j, vertices[indices[2]]);
- upRange.min = btMin(upRange.min, vertices[indices[2]][m_upAxis]);
- upRange.max = btMax(upRange.max, vertices[indices[2]][m_upAxis]);
-
- if (upRange.overlaps(aabbUpRange))
- callback->processTriangle(vertices, 2 * x + 1, j);
- }
- else
- {
- getVertex(x, j, vertices[indices[0]]);
- getVertex(x, j + 1, vertices[indices[1]]);
- getVertex(x + 1, j, vertices[indices[2]]);
-
- // Skip triangle processing if the triangle is out-of-AABB.
- Range upRange = minmaxRange(vertices[0][m_upAxis], vertices[1][m_upAxis], vertices[2][m_upAxis]);
-
- if (upRange.overlaps(aabbUpRange))
- callback->processTriangle(vertices, 2 * x, j);
-
- // already set: getVertex(x, j + 1, vertices[indices[1]]);
-
- // equivalent to: getVertex(x + 1, j, vertices[indices[0]]);
- vertices[indices[0]] = vertices[indices[2]];
-
- getVertex(x + 1, j + 1, vertices[indices[2]]);
- upRange.min = btMin(upRange.min, vertices[indices[2]][m_upAxis]);
- upRange.max = btMax(upRange.max, vertices[indices[2]][m_upAxis]);
-
- if (upRange.overlaps(aabbUpRange))
- callback->processTriangle(vertices, 2 * x + 1, j);
- }
- }
- }
-}
-
-void btHeightfieldTerrainShape::calculateLocalInertia(btScalar, btVector3& inertia) const
-{
- //moving concave objects not supported
-
- inertia.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
-}
-
-void btHeightfieldTerrainShape::setLocalScaling(const btVector3& scaling)
-{
- m_localScaling = scaling;
-}
-const btVector3& btHeightfieldTerrainShape::getLocalScaling() const
-{
- return m_localScaling;
-}
-
-namespace
-{
- struct GridRaycastState
- {
- int x; // Next quad coords
- int z;
- int prev_x; // Previous quad coords
- int prev_z;
- btScalar param; // Exit param for previous quad
- btScalar prevParam; // Enter param for previous quad
- btScalar maxDistanceFlat;
- btScalar maxDistance3d;
- };
-}
-
-// TODO Does it really need to take 3D vectors?
-/// Iterates through a virtual 2D grid of unit-sized square cells,
-/// and executes an action on each cell intersecting the given segment, ordered from begin to end.
-/// Initially inspired by http://www.cse.yorku.ca/~amana/research/grid.pdf
-template <typename Action_T>
-void gridRaycast(Action_T& quadAction, const btVector3& beginPos, const btVector3& endPos, int indices[3])
-{
- GridRaycastState rs;
- rs.maxDistance3d = beginPos.distance(endPos);
- if (rs.maxDistance3d < 0.0001)
- {
- // Consider the ray is too small to hit anything
- return;
- }
-
-
- btScalar rayDirectionFlatX = endPos[indices[0]] - beginPos[indices[0]];
- btScalar rayDirectionFlatZ = endPos[indices[2]] - beginPos[indices[2]];
- rs.maxDistanceFlat = btSqrt(rayDirectionFlatX * rayDirectionFlatX + rayDirectionFlatZ * rayDirectionFlatZ);
-
- if (rs.maxDistanceFlat < 0.0001)
- {
- // Consider the ray vertical
- rayDirectionFlatX = 0;
- rayDirectionFlatZ = 0;
- }
- else
- {
- rayDirectionFlatX /= rs.maxDistanceFlat;
- rayDirectionFlatZ /= rs.maxDistanceFlat;
- }
-
- const int xiStep = rayDirectionFlatX > 0 ? 1 : rayDirectionFlatX < 0 ? -1 : 0;
- const int ziStep = rayDirectionFlatZ > 0 ? 1 : rayDirectionFlatZ < 0 ? -1 : 0;
-
- const float infinite = 9999999;
- const btScalar paramDeltaX = xiStep != 0 ? 1.f / btFabs(rayDirectionFlatX) : infinite;
- const btScalar paramDeltaZ = ziStep != 0 ? 1.f / btFabs(rayDirectionFlatZ) : infinite;
-
- // pos = param * dir
- btScalar paramCrossX; // At which value of `param` we will cross a x-axis lane?
- btScalar paramCrossZ; // At which value of `param` we will cross a z-axis lane?
-
- // paramCrossX and paramCrossZ are initialized as being the first cross
- // X initialization
- if (xiStep != 0)
- {
- if (xiStep == 1)
- {
- paramCrossX = (ceil(beginPos[indices[0]]) - beginPos[indices[0]]) * paramDeltaX;
- }
- else
- {
- paramCrossX = (beginPos[indices[0]] - floor(beginPos[indices[0]])) * paramDeltaX;
- }
- }
- else
- {
- paramCrossX = infinite; // Will never cross on X
- }
-
- // Z initialization
- if (ziStep != 0)
- {
- if (ziStep == 1)
- {
- paramCrossZ = (ceil(beginPos[indices[2]]) - beginPos[indices[2]]) * paramDeltaZ;
- }
- else
- {
- paramCrossZ = (beginPos[indices[2]] - floor(beginPos[indices[2]])) * paramDeltaZ;
- }
- }
- else
- {
- paramCrossZ = infinite; // Will never cross on Z
- }
-
- rs.x = static_cast<int>(floor(beginPos[indices[0]]));
- rs.z = static_cast<int>(floor(beginPos[indices[2]]));
-
- // Workaround cases where the ray starts at an integer position
- if (paramCrossX == 0.0)
- {
- paramCrossX += paramDeltaX;
- // If going backwards, we should ignore the position we would get by the above flooring,
- // because the ray is not heading in that direction
- if (xiStep == -1)
- {
- rs.x -= 1;
- }
- }
-
- if (paramCrossZ == 0.0)
- {
- paramCrossZ += paramDeltaZ;
- if (ziStep == -1)
- rs.z -= 1;
- }
-
- rs.prev_x = rs.x;
- rs.prev_z = rs.z;
- rs.param = 0;
-
- while (true)
- {
- rs.prev_x = rs.x;
- rs.prev_z = rs.z;
- rs.prevParam = rs.param;
-
- if (paramCrossX < paramCrossZ)
- {
- // X lane
- rs.x += xiStep;
- // Assign before advancing the param,
- // to be in sync with the initialization step
- rs.param = paramCrossX;
- paramCrossX += paramDeltaX;
- }
- else
- {
- // Z lane
- rs.z += ziStep;
- rs.param = paramCrossZ;
- paramCrossZ += paramDeltaZ;
- }
-
- if (rs.param > rs.maxDistanceFlat)
- {
- rs.param = rs.maxDistanceFlat;
- quadAction(rs);
- break;
- }
- else
- {
- quadAction(rs);
- }
- }
-}
-
-struct ProcessTrianglesAction
-{
- const btHeightfieldTerrainShape* shape;
- bool flipQuadEdges;
- bool useDiamondSubdivision;
- int width;
- int length;
- btTriangleCallback* callback;
-
- void exec(int x, int z) const
- {
- if (x < 0 || z < 0 || x >= width || z >= length)
- {
- return;
- }
-
- btVector3 vertices[3];
-
- // TODO Since this is for raycasts, we could greatly benefit from an early exit on the first hit
-
- // Check quad
- if (flipQuadEdges || (useDiamondSubdivision && (((z + x) & 1) > 0)))
- {
- // First triangle
- shape->getVertex(x, z, vertices[0]);
- shape->getVertex(x + 1, z, vertices[1]);
- shape->getVertex(x + 1, z + 1, vertices[2]);
- callback->processTriangle(vertices, x, z);
-
- // Second triangle
- shape->getVertex(x, z, vertices[0]);
- shape->getVertex(x + 1, z + 1, vertices[1]);
- shape->getVertex(x, z + 1, vertices[2]);
- callback->processTriangle(vertices, x, z);
- }
- else
- {
- // First triangle
- shape->getVertex(x, z, vertices[0]);
- shape->getVertex(x, z + 1, vertices[1]);
- shape->getVertex(x + 1, z, vertices[2]);
- callback->processTriangle(vertices, x, z);
-
- // Second triangle
- shape->getVertex(x + 1, z, vertices[0]);
- shape->getVertex(x, z + 1, vertices[1]);
- shape->getVertex(x + 1, z + 1, vertices[2]);
- callback->processTriangle(vertices, x, z);
- }
- }
-
- void operator()(const GridRaycastState& bs) const
- {
- exec(bs.prev_x, bs.prev_z);
- }
-};
-
-struct ProcessVBoundsAction
-{
- const btAlignedObjectArray<btHeightfieldTerrainShape::Range>& vbounds;
- int width;
- int length;
- int chunkSize;
-
- btVector3 rayBegin;
- btVector3 rayEnd;
- btVector3 rayDir;
-
- int* m_indices;
- ProcessTrianglesAction processTriangles;
-
- ProcessVBoundsAction(const btAlignedObjectArray<btHeightfieldTerrainShape::Range>& bnd, int* indices)
- : vbounds(bnd),
- m_indices(indices)
- {
- }
- void operator()(const GridRaycastState& rs) const
- {
- int x = rs.prev_x;
- int z = rs.prev_z;
-
- if (x < 0 || z < 0 || x >= width || z >= length)
- {
- return;
- }
-
- const btHeightfieldTerrainShape::Range chunk = vbounds[x + z * width];
-
- btVector3 enterPos;
- btVector3 exitPos;
-
- if (rs.maxDistanceFlat > 0.0001)
- {
- btScalar flatTo3d = chunkSize * rs.maxDistance3d / rs.maxDistanceFlat;
- btScalar enterParam3d = rs.prevParam * flatTo3d;
- btScalar exitParam3d = rs.param * flatTo3d;
- enterPos = rayBegin + rayDir * enterParam3d;
- exitPos = rayBegin + rayDir * exitParam3d;
-
- // We did enter the flat projection of the AABB,
- // but we have to check if we intersect it on the vertical axis
- if (enterPos[1] > chunk.max && exitPos[m_indices[1]] > chunk.max)
- {
- return;
- }
- if (enterPos[1] < chunk.min && exitPos[m_indices[1]] < chunk.min)
- {
- return;
- }
- }
- else
- {
- // Consider the ray vertical
- // (though we shouldn't reach this often because there is an early check up-front)
- enterPos = rayBegin;
- exitPos = rayEnd;
- }
-
- gridRaycast(processTriangles, enterPos, exitPos, m_indices);
- // Note: it could be possible to have more than one grid at different levels,
- // to do this there would be a branch using a pointer to another ProcessVBoundsAction
- }
-};
-
-// TODO How do I interrupt the ray when there is a hit? `callback` does not return any result
-/// Performs a raycast using a hierarchical Bresenham algorithm.
-/// Does not allocate any memory by itself.
-void btHeightfieldTerrainShape::performRaycast(btTriangleCallback* callback, const btVector3& raySource, const btVector3& rayTarget) const
-{
- // Transform to cell-local
- btVector3 beginPos = raySource / m_localScaling;
- btVector3 endPos = rayTarget / m_localScaling;
- beginPos += m_localOrigin;
- endPos += m_localOrigin;
-
- ProcessTrianglesAction processTriangles;
- processTriangles.shape = this;
- processTriangles.flipQuadEdges = m_flipQuadEdges;
- processTriangles.useDiamondSubdivision = m_useDiamondSubdivision;
- processTriangles.callback = callback;
- processTriangles.width = m_heightStickWidth - 1;
- processTriangles.length = m_heightStickLength - 1;
-
- // TODO Transform vectors to account for m_upAxis
- int indices[3] = { 0, 1, 2 };
- if (m_upAxis == 2)
- {
- indices[1] = 2;
- indices[2] = 1;
- }
- int iBeginX = static_cast<int>(floor(beginPos[indices[0]]));
- int iBeginZ = static_cast<int>(floor(beginPos[indices[2]]));
- int iEndX = static_cast<int>(floor(endPos[indices[0]]));
- int iEndZ = static_cast<int>(floor(endPos[indices[2]]));
-
- if (iBeginX == iEndX && iBeginZ == iEndZ)
- {
- // The ray will never cross quads within the plane,
- // so directly process triangles within one quad
- // (typically, vertical rays should end up here)
- processTriangles.exec(iBeginX, iEndZ);
- return;
- }
-
-
-
- if (m_vboundsGrid.size()==0)
- {
- // Process all quads intersecting the flat projection of the ray
- gridRaycast(processTriangles, beginPos, endPos, &indices[0]);
- }
- else
- {
- btVector3 rayDiff = endPos - beginPos;
- btScalar flatDistance2 = rayDiff[indices[0]] * rayDiff[indices[0]] + rayDiff[indices[2]] * rayDiff[indices[2]];
- if (flatDistance2 < m_vboundsChunkSize * m_vboundsChunkSize)
- {
- // Don't use chunks, the ray is too short in the plane
- gridRaycast(processTriangles, beginPos, endPos, &indices[0]);
- }
-
- ProcessVBoundsAction processVBounds(m_vboundsGrid, &indices[0]);
- processVBounds.width = m_vboundsGridWidth;
- processVBounds.length = m_vboundsGridLength;
- processVBounds.rayBegin = beginPos;
- processVBounds.rayEnd = endPos;
- processVBounds.rayDir = rayDiff.normalized();
- processVBounds.processTriangles = processTriangles;
- processVBounds.chunkSize = m_vboundsChunkSize;
- // The ray is long, run raycast on a higher-level grid
- gridRaycast(processVBounds, beginPos / m_vboundsChunkSize, endPos / m_vboundsChunkSize, indices);
- }
-}
-
-/// Builds a grid data structure storing the min and max heights of the terrain in chunks.
-/// if chunkSize is zero, that accelerator is removed.
-/// If you modify the heights, you need to rebuild this accelerator.
-void btHeightfieldTerrainShape::buildAccelerator(int chunkSize)
-{
- if (chunkSize <= 0)
- {
- clearAccelerator();
- return;
- }
-
- m_vboundsChunkSize = chunkSize;
- int nChunksX = m_heightStickWidth / chunkSize;
- int nChunksZ = m_heightStickLength / chunkSize;
-
- if (m_heightStickWidth % chunkSize > 0)
- {
- ++nChunksX; // In case terrain size isn't dividable by chunk size
- }
- if (m_heightStickLength % chunkSize > 0)
- {
- ++nChunksZ;
- }
-
- if (m_vboundsGridWidth != nChunksX || m_vboundsGridLength != nChunksZ)
- {
- clearAccelerator();
- m_vboundsGridWidth = nChunksX;
- m_vboundsGridLength = nChunksZ;
- }
-
- if (nChunksX == 0 || nChunksZ == 0)
- {
- return;
- }
-
- // This data structure is only reallocated if the required size changed
- m_vboundsGrid.resize(nChunksX * nChunksZ);
-
- // Compute min and max height for all chunks
- for (int cz = 0; cz < nChunksZ; ++cz)
- {
- int z0 = cz * chunkSize;
-
- for (int cx = 0; cx < nChunksX; ++cx)
- {
- int x0 = cx * chunkSize;
-
- Range r;
-
- r.min = getRawHeightFieldValue(x0, z0);
- r.max = r.min;
-
- // Compute min and max height for this chunk.
- // We have to include one extra cell to account for neighbors.
- // Here is why:
- // Say we have a flat terrain, and a plateau that fits a chunk perfectly.
- //
- // Left Right
- // 0---0---0---1---1---1
- // | | | | | |
- // 0---0---0---1---1---1
- // | | | | | |
- // 0---0---0---1---1---1
- // x
- //
- // If the AABB for the Left chunk did not share vertices with the Right,
- // then we would fail collision tests at x due to a gap.
- //
- for (int z = z0; z < z0 + chunkSize + 1; ++z)
- {
- if (z >= m_heightStickLength)
- {
- continue;
- }
-
- for (int x = x0; x < x0 + chunkSize + 1; ++x)
- {
- if (x >= m_heightStickWidth)
- {
- continue;
- }
-
- btScalar height = getRawHeightFieldValue(x, z);
-
- if (height < r.min)
- {
- r.min = height;
- }
- else if (height > r.max)
- {
- r.max = height;
- }
- }
- }
-
- m_vboundsGrid[cx + cz * nChunksX] = r;
- }
- }
-}
-
-void btHeightfieldTerrainShape::clearAccelerator()
-{
- m_vboundsGrid.clear();
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
deleted file mode 100644
index 7e251fa71e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btHeightfieldTerrainShape.h
+++ /dev/null
@@ -1,250 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_HEIGHTFIELD_TERRAIN_SHAPE_H
-#define BT_HEIGHTFIELD_TERRAIN_SHAPE_H
-
-#include "btConcaveShape.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-///btHeightfieldTerrainShape simulates a 2D heightfield terrain
-/**
- The caller is responsible for maintaining the heightfield array; this
- class does not make a copy.
-
- The heightfield can be dynamic so long as the min/max height values
- capture the extremes (heights must always be in that range).
-
- The local origin of the heightfield is assumed to be the exact
- center (as determined by width and length and height, with each
- axis multiplied by the localScaling).
-
- \b NOTE: be careful with coordinates. If you have a heightfield with a local
- min height of -100m, and a max height of +500m, you may be tempted to place it
- at the origin (0,0) and expect the heights in world coordinates to be
- -100 to +500 meters.
- Actually, the heights will be -300 to +300m, because bullet will re-center
- the heightfield based on its AABB (which is determined by the min/max
- heights). So keep in mind that once you create a btHeightfieldTerrainShape
- object, the heights will be adjusted relative to the center of the AABB. This
- is different to the behavior of many rendering engines, but is useful for
- physics engines.
-
- Most (but not all) rendering and heightfield libraries assume upAxis = 1
- (that is, the y-axis is "up"). This class allows any of the 3 coordinates
- to be "up". Make sure your choice of axis is consistent with your rendering
- system.
-
- The heightfield heights are determined from the data type used for the
- heightfieldData array.
-
- - unsigned char: height at a point is the uchar value at the
- grid point, multipled by heightScale. uchar isn't recommended
- because of its inability to deal with negative values, and
- low resolution (8-bit).
-
- - short: height at a point is the short int value at that grid
- point, multipled by heightScale.
-
- - float or dobule: height at a point is the value at that grid point.
-
- Whatever the caller specifies as minHeight and maxHeight will be honored.
- The class will not inspect the heightfield to discover the actual minimum
- or maximum heights. These values are used to determine the heightfield's
- axis-aligned bounding box, multiplied by localScaling.
-
- For usage and testing see the TerrainDemo.
- */
-ATTRIBUTE_ALIGNED16(class)
-btHeightfieldTerrainShape : public btConcaveShape
-{
-public:
- struct Range
- {
- Range() {}
- Range(btScalar min, btScalar max) : min(min), max(max) {}
-
- bool overlaps(const Range& other) const
- {
- return !(min > other.max || max < other.min);
- }
-
- btScalar min;
- btScalar max;
- };
-
-protected:
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
- btVector3 m_localOrigin;
-
- ///terrain data
- int m_heightStickWidth;
- int m_heightStickLength;
- btScalar m_minHeight;
- btScalar m_maxHeight;
- btScalar m_width;
- btScalar m_length;
- btScalar m_heightScale;
- union {
- const unsigned char* m_heightfieldDataUnsignedChar;
- const short* m_heightfieldDataShort;
- const float* m_heightfieldDataFloat;
- const double* m_heightfieldDataDouble;
- const void* m_heightfieldDataUnknown;
- };
-
- PHY_ScalarType m_heightDataType;
- bool m_flipQuadEdges;
- bool m_useDiamondSubdivision;
- bool m_useZigzagSubdivision;
- bool m_flipTriangleWinding;
- int m_upAxis;
-
- btVector3 m_localScaling;
-
- // Accelerator
- btAlignedObjectArray<Range> m_vboundsGrid;
- int m_vboundsGridWidth;
- int m_vboundsGridLength;
- int m_vboundsChunkSize;
-
-
- btScalar m_userValue3;
-
- struct btTriangleInfoMap* m_triangleInfoMap;
-
- virtual btScalar getRawHeightFieldValue(int x, int y) const;
- void quantizeWithClamp(int* out, const btVector3& point, int isMax) const;
-
- /// protected initialization
- /**
- Handles the work of constructors so that public constructors can be
- backwards-compatible without a lot of copy/paste.
- */
- void initialize(int heightStickWidth, int heightStickLength,
- const void* heightfieldData, btScalar heightScale,
- btScalar minHeight, btScalar maxHeight, int upAxis,
- PHY_ScalarType heightDataType, bool flipQuadEdges);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- /// preferred constructors
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const float* heightfieldData, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const double* heightfieldData, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const short* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
- btHeightfieldTerrainShape(
- int heightStickWidth, int heightStickLength,
- const unsigned char* heightfieldData, btScalar heightScale, btScalar minHeight, btScalar maxHeight,
- int upAxis, bool flipQuadEdges);
-
- /// legacy constructor
- /**
- This constructor supports a range of heightfield
- data types, and allows for a non-zero minimum height value.
- heightScale is needed for any integer-based heightfield data types.
-
- This legacy constructor considers `PHY_FLOAT` to mean `btScalar`.
- With `BT_USE_DOUBLE_PRECISION`, it will expect `heightfieldData`
- to be double-precision.
- */
- btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength,
- const void* heightfieldData, btScalar heightScale,
- btScalar minHeight, btScalar maxHeight,
- int upAxis, PHY_ScalarType heightDataType,
- bool flipQuadEdges);
-
- /// legacy constructor
- /**
- The legacy constructor assumes the heightfield has a minimum height
- of zero. Only unsigned char or btScalar data are supported. For legacy
- compatibility reasons, heightScale is calculated as maxHeight / 65535
- (and is only used when useFloatData = false).
- */
- btHeightfieldTerrainShape(int heightStickWidth, int heightStickLength, const void* heightfieldData, btScalar maxHeight, int upAxis, bool useFloatData, bool flipQuadEdges);
-
- virtual ~btHeightfieldTerrainShape();
-
- void setUseDiamondSubdivision(bool useDiamondSubdivision = true) { m_useDiamondSubdivision = useDiamondSubdivision; }
-
- ///could help compatibility with Ogre heightfields. See https://code.google.com/p/bullet/issues/detail?id=625
- void setUseZigzagSubdivision(bool useZigzagSubdivision = true) { m_useZigzagSubdivision = useZigzagSubdivision; }
-
- void setFlipTriangleWinding(bool flipTriangleWinding)
- {
- m_flipTriangleWinding = flipTriangleWinding;
- }
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
-
- virtual const btVector3& getLocalScaling() const;
-
- void getVertex(int x, int y, btVector3& vertex) const;
-
- void performRaycast(btTriangleCallback * callback, const btVector3& raySource, const btVector3& rayTarget) const;
-
- void buildAccelerator(int chunkSize = 16);
- void clearAccelerator();
-
- int getUpAxis() const
- {
- return m_upAxis;
- }
- //debugging
- virtual const char* getName() const { return "HEIGHTFIELD"; }
-
-
- void setUserValue3(btScalar value)
- {
- m_userValue3 = value;
- }
- btScalar getUserValue3() const
- {
- return m_userValue3;
- }
- const struct btTriangleInfoMap* getTriangleInfoMap() const
- {
- return m_triangleInfoMap;
- }
- struct btTriangleInfoMap* getTriangleInfoMap()
- {
- return m_triangleInfoMap;
- }
- void setTriangleInfoMap(btTriangleInfoMap* map)
- {
- m_triangleInfoMap = map;
- }
- const unsigned char* getHeightfieldRawData() const
- {
- return m_heightfieldDataUnsignedChar;
- }
-};
-
-#endif //BT_HEIGHTFIELD_TERRAIN_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMaterial.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btMaterial.h
deleted file mode 100644
index c9a436bf26..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMaterial.h
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/// This file was created by Alex Silverman
-
-#ifndef BT_MATERIAL_H
-#define BT_MATERIAL_H
-
-// Material class to be used by btMultimaterialTriangleMeshShape to store triangle properties
-class btMaterial
-{
- // public members so that materials can change due to world events
-public:
- btScalar m_friction;
- btScalar m_restitution;
- int pad[2];
-
- btMaterial() {}
- btMaterial(btScalar fric, btScalar rest)
- {
- m_friction = fric;
- m_restitution = rest;
- }
-};
-
-#endif // BT_MATERIAL_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp
deleted file mode 100644
index 13c0a343f1..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.cpp
+++ /dev/null
@@ -1,522 +0,0 @@
-#include "btMiniSDF.h"
-
-//
-//Based on code from DiscreGrid, https://github.com/InteractiveComputerGraphics/Discregrid
-//example:
-//GenerateSDF.exe -r "32 32 32" -d "-1.6 -1.6 -.6 1.6 1.6 .6" concave_box.obj
-//The MIT License (MIT)
-//
-//Copyright (c) 2017 Dan Koschier
-//
-
-#include <limits.h>
-#include <string.h> //memcpy
-
-struct btSdfDataStream
-{
- const char* m_data;
- int m_size;
-
- int m_currentOffset;
-
- btSdfDataStream(const char* data, int size)
- : m_data(data),
- m_size(size),
- m_currentOffset(0)
- {
- }
-
- template <class T>
- bool read(T& val)
- {
- int bytes = sizeof(T);
- if (m_currentOffset + bytes <= m_size)
- {
- char* dest = (char*)&val;
- memcpy(dest, &m_data[m_currentOffset], bytes);
- m_currentOffset += bytes;
- return true;
- }
- btAssert(0);
- return false;
- }
-};
-
-bool btMiniSDF::load(const char* data, int size)
-{
- int fileSize = -1;
-
- btSdfDataStream ds(data, size);
- {
- double buf[6];
- ds.read(buf);
- m_domain.m_min[0] = buf[0];
- m_domain.m_min[1] = buf[1];
- m_domain.m_min[2] = buf[2];
- m_domain.m_min[3] = 0;
- m_domain.m_max[0] = buf[3];
- m_domain.m_max[1] = buf[4];
- m_domain.m_max[2] = buf[5];
- m_domain.m_max[3] = 0;
- }
- {
- unsigned int buf2[3];
- ds.read(buf2);
- m_resolution[0] = buf2[0];
- m_resolution[1] = buf2[1];
- m_resolution[2] = buf2[2];
- }
- {
- double buf[3];
- ds.read(buf);
- m_cell_size[0] = buf[0];
- m_cell_size[1] = buf[1];
- m_cell_size[2] = buf[2];
- }
- {
- double buf[3];
- ds.read(buf);
- m_inv_cell_size[0] = buf[0];
- m_inv_cell_size[1] = buf[1];
- m_inv_cell_size[2] = buf[2];
- }
- {
- unsigned long long int cells;
- ds.read(cells);
- m_n_cells = cells;
- }
- {
- unsigned long long int fields;
- ds.read(fields);
- m_n_fields = fields;
- }
-
- unsigned long long int nodes0;
- std::size_t n_nodes0;
- ds.read(nodes0);
- n_nodes0 = nodes0;
- if (n_nodes0 > 1024 * 1024 * 1024)
- {
- return m_isValid;
- }
- m_nodes.resize(n_nodes0);
- for (unsigned int i = 0; i < n_nodes0; i++)
- {
- unsigned long long int n_nodes1;
- ds.read(n_nodes1);
- btAlignedObjectArray<double>& nodes = m_nodes[i];
- nodes.resize(n_nodes1);
- for (int j = 0; j < nodes.size(); j++)
- {
- double& node = nodes[j];
- ds.read(node);
- }
- }
-
- unsigned long long int n_cells0;
- ds.read(n_cells0);
- m_cells.resize(n_cells0);
- for (int i = 0; i < n_cells0; i++)
- {
- unsigned long long int n_cells1;
- btAlignedObjectArray<btCell32>& cells = m_cells[i];
- ds.read(n_cells1);
- cells.resize(n_cells1);
- for (int j = 0; j < n_cells1; j++)
- {
- btCell32& cell = cells[j];
- ds.read(cell);
- }
- }
-
- {
- unsigned long long int n_cell_maps0;
- ds.read(n_cell_maps0);
-
- m_cell_map.resize(n_cell_maps0);
- for (int i = 0; i < n_cell_maps0; i++)
- {
- unsigned long long int n_cell_maps1;
- btAlignedObjectArray<unsigned int>& cell_maps = m_cell_map[i];
- ds.read(n_cell_maps1);
- cell_maps.resize(n_cell_maps1);
- for (int j = 0; j < n_cell_maps1; j++)
- {
- unsigned int& cell_map = cell_maps[j];
- ds.read(cell_map);
- }
- }
- }
-
- m_isValid = (ds.m_currentOffset == ds.m_size);
- return m_isValid;
-}
-
-unsigned int btMiniSDF::multiToSingleIndex(btMultiIndex const& ijk) const
-{
- return m_resolution[1] * m_resolution[0] * ijk.ijk[2] + m_resolution[0] * ijk.ijk[1] + ijk.ijk[0];
-}
-
-btAlignedBox3d
-btMiniSDF::subdomain(btMultiIndex const& ijk) const
-{
- btAssert(m_isValid);
- btVector3 tmp;
- tmp.m_floats[0] = m_cell_size[0] * (double)ijk.ijk[0];
- tmp.m_floats[1] = m_cell_size[1] * (double)ijk.ijk[1];
- tmp.m_floats[2] = m_cell_size[2] * (double)ijk.ijk[2];
-
- btVector3 origin = m_domain.min() + tmp;
-
- btAlignedBox3d box = btAlignedBox3d(origin, origin + m_cell_size);
- return box;
-}
-
-btMultiIndex
-btMiniSDF::singleToMultiIndex(unsigned int l) const
-{
- btAssert(m_isValid);
- unsigned int n01 = m_resolution[0] * m_resolution[1];
- unsigned int k = l / n01;
- unsigned int temp = l % n01;
- unsigned int j = temp / m_resolution[0];
- unsigned int i = temp % m_resolution[0];
- btMultiIndex mi;
- mi.ijk[0] = i;
- mi.ijk[1] = j;
- mi.ijk[2] = k;
- return mi;
-}
-
-btAlignedBox3d
-btMiniSDF::subdomain(unsigned int l) const
-{
- btAssert(m_isValid);
- return subdomain(singleToMultiIndex(l));
-}
-
-btShapeMatrix
-btMiniSDF::shape_function_(btVector3 const& xi, btShapeGradients* gradient) const
-{
- btAssert(m_isValid);
- btShapeMatrix res;
-
- btScalar x = xi[0];
- btScalar y = xi[1];
- btScalar z = xi[2];
-
- btScalar x2 = x * x;
- btScalar y2 = y * y;
- btScalar z2 = z * z;
-
- btScalar _1mx = 1.0 - x;
- btScalar _1my = 1.0 - y;
- btScalar _1mz = 1.0 - z;
-
- btScalar _1px = 1.0 + x;
- btScalar _1py = 1.0 + y;
- btScalar _1pz = 1.0 + z;
-
- btScalar _1m3x = 1.0 - 3.0 * x;
- btScalar _1m3y = 1.0 - 3.0 * y;
- btScalar _1m3z = 1.0 - 3.0 * z;
-
- btScalar _1p3x = 1.0 + 3.0 * x;
- btScalar _1p3y = 1.0 + 3.0 * y;
- btScalar _1p3z = 1.0 + 3.0 * z;
-
- btScalar _1mxt1my = _1mx * _1my;
- btScalar _1mxt1py = _1mx * _1py;
- btScalar _1pxt1my = _1px * _1my;
- btScalar _1pxt1py = _1px * _1py;
-
- btScalar _1mxt1mz = _1mx * _1mz;
- btScalar _1mxt1pz = _1mx * _1pz;
- btScalar _1pxt1mz = _1px * _1mz;
- btScalar _1pxt1pz = _1px * _1pz;
-
- btScalar _1myt1mz = _1my * _1mz;
- btScalar _1myt1pz = _1my * _1pz;
- btScalar _1pyt1mz = _1py * _1mz;
- btScalar _1pyt1pz = _1py * _1pz;
-
- btScalar _1mx2 = 1.0 - x2;
- btScalar _1my2 = 1.0 - y2;
- btScalar _1mz2 = 1.0 - z2;
-
- // Corner nodes.
- btScalar fac = 1.0 / 64.0 * (9.0 * (x2 + y2 + z2) - 19.0);
- res[0] = fac * _1mxt1my * _1mz;
- res[1] = fac * _1pxt1my * _1mz;
- res[2] = fac * _1mxt1py * _1mz;
- res[3] = fac * _1pxt1py * _1mz;
- res[4] = fac * _1mxt1my * _1pz;
- res[5] = fac * _1pxt1my * _1pz;
- res[6] = fac * _1mxt1py * _1pz;
- res[7] = fac * _1pxt1py * _1pz;
-
- // Edge nodes.
-
- fac = 9.0 / 64.0 * _1mx2;
- btScalar fact1m3x = fac * _1m3x;
- btScalar fact1p3x = fac * _1p3x;
- res[8] = fact1m3x * _1myt1mz;
- res[9] = fact1p3x * _1myt1mz;
- res[10] = fact1m3x * _1myt1pz;
- res[11] = fact1p3x * _1myt1pz;
- res[12] = fact1m3x * _1pyt1mz;
- res[13] = fact1p3x * _1pyt1mz;
- res[14] = fact1m3x * _1pyt1pz;
- res[15] = fact1p3x * _1pyt1pz;
-
- fac = 9.0 / 64.0 * _1my2;
- btScalar fact1m3y = fac * _1m3y;
- btScalar fact1p3y = fac * _1p3y;
- res[16] = fact1m3y * _1mxt1mz;
- res[17] = fact1p3y * _1mxt1mz;
- res[18] = fact1m3y * _1pxt1mz;
- res[19] = fact1p3y * _1pxt1mz;
- res[20] = fact1m3y * _1mxt1pz;
- res[21] = fact1p3y * _1mxt1pz;
- res[22] = fact1m3y * _1pxt1pz;
- res[23] = fact1p3y * _1pxt1pz;
-
- fac = 9.0 / 64.0 * _1mz2;
- btScalar fact1m3z = fac * _1m3z;
- btScalar fact1p3z = fac * _1p3z;
- res[24] = fact1m3z * _1mxt1my;
- res[25] = fact1p3z * _1mxt1my;
- res[26] = fact1m3z * _1mxt1py;
- res[27] = fact1p3z * _1mxt1py;
- res[28] = fact1m3z * _1pxt1my;
- res[29] = fact1p3z * _1pxt1my;
- res[30] = fact1m3z * _1pxt1py;
- res[31] = fact1p3z * _1pxt1py;
-
- if (gradient)
- {
- btShapeGradients& dN = *gradient;
-
- btScalar _9t3x2py2pz2m19 = 9.0 * (3.0 * x2 + y2 + z2) - 19.0;
- btScalar _9tx2p3y2pz2m19 = 9.0 * (x2 + 3.0 * y2 + z2) - 19.0;
- btScalar _9tx2py2p3z2m19 = 9.0 * (x2 + y2 + 3.0 * z2) - 19.0;
- btScalar _18x = 18.0 * x;
- btScalar _18y = 18.0 * y;
- btScalar _18z = 18.0 * z;
-
- btScalar _3m9x2 = 3.0 - 9.0 * x2;
- btScalar _3m9y2 = 3.0 - 9.0 * y2;
- btScalar _3m9z2 = 3.0 - 9.0 * z2;
-
- btScalar _2x = 2.0 * x;
- btScalar _2y = 2.0 * y;
- btScalar _2z = 2.0 * z;
-
- btScalar _18xm9t3x2py2pz2m19 = _18x - _9t3x2py2pz2m19;
- btScalar _18xp9t3x2py2pz2m19 = _18x + _9t3x2py2pz2m19;
- btScalar _18ym9tx2p3y2pz2m19 = _18y - _9tx2p3y2pz2m19;
- btScalar _18yp9tx2p3y2pz2m19 = _18y + _9tx2p3y2pz2m19;
- btScalar _18zm9tx2py2p3z2m19 = _18z - _9tx2py2p3z2m19;
- btScalar _18zp9tx2py2p3z2m19 = _18z + _9tx2py2p3z2m19;
-
- dN(0, 0) = _18xm9t3x2py2pz2m19 * _1myt1mz;
- dN(0, 1) = _1mxt1mz * _18ym9tx2p3y2pz2m19;
- dN(0, 2) = _1mxt1my * _18zm9tx2py2p3z2m19;
- dN(1, 0) = _18xp9t3x2py2pz2m19 * _1myt1mz;
- dN(1, 1) = _1pxt1mz * _18ym9tx2p3y2pz2m19;
- dN(1, 2) = _1pxt1my * _18zm9tx2py2p3z2m19;
- dN(2, 0) = _18xm9t3x2py2pz2m19 * _1pyt1mz;
- dN(2, 1) = _1mxt1mz * _18yp9tx2p3y2pz2m19;
- dN(2, 2) = _1mxt1py * _18zm9tx2py2p3z2m19;
- dN(3, 0) = _18xp9t3x2py2pz2m19 * _1pyt1mz;
- dN(3, 1) = _1pxt1mz * _18yp9tx2p3y2pz2m19;
- dN(3, 2) = _1pxt1py * _18zm9tx2py2p3z2m19;
- dN(4, 0) = _18xm9t3x2py2pz2m19 * _1myt1pz;
- dN(4, 1) = _1mxt1pz * _18ym9tx2p3y2pz2m19;
- dN(4, 2) = _1mxt1my * _18zp9tx2py2p3z2m19;
- dN(5, 0) = _18xp9t3x2py2pz2m19 * _1myt1pz;
- dN(5, 1) = _1pxt1pz * _18ym9tx2p3y2pz2m19;
- dN(5, 2) = _1pxt1my * _18zp9tx2py2p3z2m19;
- dN(6, 0) = _18xm9t3x2py2pz2m19 * _1pyt1pz;
- dN(6, 1) = _1mxt1pz * _18yp9tx2p3y2pz2m19;
- dN(6, 2) = _1mxt1py * _18zp9tx2py2p3z2m19;
- dN(7, 0) = _18xp9t3x2py2pz2m19 * _1pyt1pz;
- dN(7, 1) = _1pxt1pz * _18yp9tx2p3y2pz2m19;
- dN(7, 2) = _1pxt1py * _18zp9tx2py2p3z2m19;
-
- dN.topRowsDivide(8, 64.0);
-
- btScalar _m3m9x2m2x = -_3m9x2 - _2x;
- btScalar _p3m9x2m2x = _3m9x2 - _2x;
- btScalar _1mx2t1m3x = _1mx2 * _1m3x;
- btScalar _1mx2t1p3x = _1mx2 * _1p3x;
- dN(8, 0) = _m3m9x2m2x * _1myt1mz,
- dN(8, 1) = -_1mx2t1m3x * _1mz,
- dN(8, 2) = -_1mx2t1m3x * _1my;
- dN(9, 0) = _p3m9x2m2x * _1myt1mz,
- dN(9, 1) = -_1mx2t1p3x * _1mz,
- dN(9, 2) = -_1mx2t1p3x * _1my;
- dN(10, 0) = _m3m9x2m2x * _1myt1pz,
- dN(10, 1) = -_1mx2t1m3x * _1pz,
- dN(10, 2) = _1mx2t1m3x * _1my;
- dN(11, 0) = _p3m9x2m2x * _1myt1pz,
- dN(11, 1) = -_1mx2t1p3x * _1pz,
- dN(11, 2) = _1mx2t1p3x * _1my;
- dN(12, 0) = _m3m9x2m2x * _1pyt1mz,
- dN(12, 1) = _1mx2t1m3x * _1mz,
- dN(12, 2) = -_1mx2t1m3x * _1py;
- dN(13, 0) = _p3m9x2m2x * _1pyt1mz,
- dN(13, 1) = _1mx2t1p3x * _1mz,
- dN(13, 2) = -_1mx2t1p3x * _1py;
- dN(14, 0) = _m3m9x2m2x * _1pyt1pz,
- dN(14, 1) = _1mx2t1m3x * _1pz,
- dN(14, 2) = _1mx2t1m3x * _1py;
- dN(15, 0) = _p3m9x2m2x * _1pyt1pz,
- dN(15, 1) = _1mx2t1p3x * _1pz,
- dN(15, 2) = _1mx2t1p3x * _1py;
-
- btScalar _m3m9y2m2y = -_3m9y2 - _2y;
- btScalar _p3m9y2m2y = _3m9y2 - _2y;
- btScalar _1my2t1m3y = _1my2 * _1m3y;
- btScalar _1my2t1p3y = _1my2 * _1p3y;
- dN(16, 0) = -_1my2t1m3y * _1mz,
- dN(16, 1) = _m3m9y2m2y * _1mxt1mz,
- dN(16, 2) = -_1my2t1m3y * _1mx;
- dN(17, 0) = -_1my2t1p3y * _1mz,
- dN(17, 1) = _p3m9y2m2y * _1mxt1mz,
- dN(17, 2) = -_1my2t1p3y * _1mx;
- dN(18, 0) = _1my2t1m3y * _1mz,
- dN(18, 1) = _m3m9y2m2y * _1pxt1mz,
- dN(18, 2) = -_1my2t1m3y * _1px;
- dN(19, 0) = _1my2t1p3y * _1mz,
- dN(19, 1) = _p3m9y2m2y * _1pxt1mz,
- dN(19, 2) = -_1my2t1p3y * _1px;
- dN(20, 0) = -_1my2t1m3y * _1pz,
- dN(20, 1) = _m3m9y2m2y * _1mxt1pz,
- dN(20, 2) = _1my2t1m3y * _1mx;
- dN(21, 0) = -_1my2t1p3y * _1pz,
- dN(21, 1) = _p3m9y2m2y * _1mxt1pz,
- dN(21, 2) = _1my2t1p3y * _1mx;
- dN(22, 0) = _1my2t1m3y * _1pz,
- dN(22, 1) = _m3m9y2m2y * _1pxt1pz,
- dN(22, 2) = _1my2t1m3y * _1px;
- dN(23, 0) = _1my2t1p3y * _1pz,
- dN(23, 1) = _p3m9y2m2y * _1pxt1pz,
- dN(23, 2) = _1my2t1p3y * _1px;
-
- btScalar _m3m9z2m2z = -_3m9z2 - _2z;
- btScalar _p3m9z2m2z = _3m9z2 - _2z;
- btScalar _1mz2t1m3z = _1mz2 * _1m3z;
- btScalar _1mz2t1p3z = _1mz2 * _1p3z;
- dN(24, 0) = -_1mz2t1m3z * _1my,
- dN(24, 1) = -_1mz2t1m3z * _1mx,
- dN(24, 2) = _m3m9z2m2z * _1mxt1my;
- dN(25, 0) = -_1mz2t1p3z * _1my,
- dN(25, 1) = -_1mz2t1p3z * _1mx,
- dN(25, 2) = _p3m9z2m2z * _1mxt1my;
- dN(26, 0) = -_1mz2t1m3z * _1py,
- dN(26, 1) = _1mz2t1m3z * _1mx,
- dN(26, 2) = _m3m9z2m2z * _1mxt1py;
- dN(27, 0) = -_1mz2t1p3z * _1py,
- dN(27, 1) = _1mz2t1p3z * _1mx,
- dN(27, 2) = _p3m9z2m2z * _1mxt1py;
- dN(28, 0) = _1mz2t1m3z * _1my,
- dN(28, 1) = -_1mz2t1m3z * _1px,
- dN(28, 2) = _m3m9z2m2z * _1pxt1my;
- dN(29, 0) = _1mz2t1p3z * _1my,
- dN(29, 1) = -_1mz2t1p3z * _1px,
- dN(29, 2) = _p3m9z2m2z * _1pxt1my;
- dN(30, 0) = _1mz2t1m3z * _1py,
- dN(30, 1) = _1mz2t1m3z * _1px,
- dN(30, 2) = _m3m9z2m2z * _1pxt1py;
- dN(31, 0) = _1mz2t1p3z * _1py,
- dN(31, 1) = _1mz2t1p3z * _1px,
- dN(31, 2) = _p3m9z2m2z * _1pxt1py;
-
- dN.bottomRowsMul(32u - 8u, 9.0 / 64.0);
- }
-
- return res;
-}
-
-bool btMiniSDF::interpolate(unsigned int field_id, double& dist, btVector3 const& x,
- btVector3* gradient) const
-{
- btAssert(m_isValid);
- if (!m_isValid)
- return false;
-
- if (!m_domain.contains(x))
- return false;
-
- btVector3 tmpmi = ((x - m_domain.min()) * (m_inv_cell_size)); //.cast<unsigned int>().eval();
- unsigned int mi[3] = {(unsigned int)tmpmi[0], (unsigned int)tmpmi[1], (unsigned int)tmpmi[2]};
- if (mi[0] >= m_resolution[0])
- mi[0] = m_resolution[0] - 1;
- if (mi[1] >= m_resolution[1])
- mi[1] = m_resolution[1] - 1;
- if (mi[2] >= m_resolution[2])
- mi[2] = m_resolution[2] - 1;
- btMultiIndex mui;
- mui.ijk[0] = mi[0];
- mui.ijk[1] = mi[1];
- mui.ijk[2] = mi[2];
- int i = multiToSingleIndex(mui);
- unsigned int i_ = m_cell_map[field_id][i];
- if (i_ == UINT_MAX)
- return false;
-
- btAlignedBox3d sd = subdomain(i);
- i = i_;
- btVector3 d = sd.m_max - sd.m_min; //.diagonal().eval();
-
- btVector3 denom = (sd.max() - sd.min());
- btVector3 c0 = btVector3(2.0, 2.0, 2.0) / denom;
- btVector3 c1 = (sd.max() + sd.min()) / denom;
- btVector3 xi = (c0 * x - c1);
-
- btCell32 const& cell = m_cells[field_id][i];
- if (!gradient)
- {
- //auto phi = m_coefficients[field_id][i].dot(shape_function_(xi, 0));
- double phi = 0.0;
- btShapeMatrix N = shape_function_(xi, 0);
- for (unsigned int j = 0u; j < 32u; ++j)
- {
- unsigned int v = cell.m_cells[j];
- double c = m_nodes[field_id][v];
- if (c == DBL_MAX)
- {
- return false;
- ;
- }
- phi += c * N[j];
- }
-
- dist = phi;
- return true;
- }
-
- btShapeGradients dN;
- btShapeMatrix N = shape_function_(xi, &dN);
-
- double phi = 0.0;
- gradient->setZero();
- for (unsigned int j = 0u; j < 32u; ++j)
- {
- unsigned int v = cell.m_cells[j];
- double c = m_nodes[field_id][v];
- if (c == DBL_MAX)
- {
- gradient->setZero();
- return false;
- }
- phi += c * N[j];
- (*gradient)[0] += c * dN(j, 0);
- (*gradient)[1] += c * dN(j, 1);
- (*gradient)[2] += c * dN(j, 2);
- }
- (*gradient) *= c0;
- dist = phi;
- return true;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.h
deleted file mode 100644
index b60fd102fd..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMiniSDF.h
+++ /dev/null
@@ -1,127 +0,0 @@
-#ifndef MINISDF_H
-#define MINISDF_H
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btAabbUtil2.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-struct btMultiIndex
-{
- unsigned int ijk[3];
-};
-
-struct btAlignedBox3d
-{
- btVector3 m_min;
- btVector3 m_max;
-
- const btVector3& min() const
- {
- return m_min;
- }
-
- const btVector3& max() const
- {
- return m_max;
- }
-
- bool contains(const btVector3& x) const
- {
- return TestPointAgainstAabb2(m_min, m_max, x);
- }
-
- btAlignedBox3d(const btVector3& mn, const btVector3& mx)
- : m_min(mn),
- m_max(mx)
- {
- }
-
- btAlignedBox3d()
- {
- }
-};
-
-struct btShapeMatrix
-{
- double m_vec[32];
-
- inline double& operator[](int i)
- {
- return m_vec[i];
- }
-
- inline const double& operator[](int i) const
- {
- return m_vec[i];
- }
-};
-
-struct btShapeGradients
-{
- btVector3 m_vec[32];
-
- void topRowsDivide(int row, double denom)
- {
- for (int i = 0; i < row; i++)
- {
- m_vec[i] /= denom;
- }
- }
-
- void bottomRowsMul(int row, double val)
- {
- for (int i = 32 - row; i < 32; i++)
- {
- m_vec[i] *= val;
- }
- }
-
- inline btScalar& operator()(int i, int j)
- {
- return m_vec[i][j];
- }
-};
-
-struct btCell32
-{
- unsigned int m_cells[32];
-};
-
-struct btMiniSDF
-{
- btAlignedBox3d m_domain;
- unsigned int m_resolution[3];
- btVector3 m_cell_size;
- btVector3 m_inv_cell_size;
- std::size_t m_n_cells;
- std::size_t m_n_fields;
- bool m_isValid;
-
- btAlignedObjectArray<btAlignedObjectArray<double> > m_nodes;
- btAlignedObjectArray<btAlignedObjectArray<btCell32> > m_cells;
- btAlignedObjectArray<btAlignedObjectArray<unsigned int> > m_cell_map;
-
- btMiniSDF()
- : m_isValid(false)
- {
- }
- bool load(const char* data, int size);
- bool isValid() const
- {
- return m_isValid;
- }
- unsigned int multiToSingleIndex(btMultiIndex const& ijk) const;
-
- btAlignedBox3d subdomain(btMultiIndex const& ijk) const;
-
- btMultiIndex singleToMultiIndex(unsigned int l) const;
-
- btAlignedBox3d subdomain(unsigned int l) const;
-
- btShapeMatrix
- shape_function_(btVector3 const& xi, btShapeGradients* gradient = 0) const;
-
- bool interpolate(unsigned int field_id, double& dist, btVector3 const& x, btVector3* gradient) const;
-};
-
-#endif //MINISDF_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp
deleted file mode 100644
index d4b6a651de..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btMinkowskiSumShape.h"
-
-btMinkowskiSumShape::btMinkowskiSumShape(const btConvexShape* shapeA, const btConvexShape* shapeB)
- : btConvexInternalShape(),
- m_shapeA(shapeA),
- m_shapeB(shapeB)
-{
- m_shapeType = MINKOWSKI_DIFFERENCE_SHAPE_PROXYTYPE;
- m_transA.setIdentity();
- m_transB.setIdentity();
-}
-
-btVector3 btMinkowskiSumShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- btVector3 supVertexA = m_transA(m_shapeA->localGetSupportingVertexWithoutMargin(vec * m_transA.getBasis()));
- btVector3 supVertexB = m_transB(m_shapeB->localGetSupportingVertexWithoutMargin(-vec * m_transB.getBasis()));
- return supVertexA - supVertexB;
-}
-
-void btMinkowskiSumShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- ///@todo: could make recursive use of batching. probably this shape is not used frequently.
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i] = localGetSupportingVertexWithoutMargin(vectors[i]);
- }
-}
-
-btScalar btMinkowskiSumShape::getMargin() const
-{
- return m_shapeA->getMargin() + m_shapeB->getMargin();
-}
-
-void btMinkowskiSumShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- (void)mass;
- //inertia of the AABB of the Minkowski sum
- btTransform identity;
- identity.setIdentity();
- btVector3 aabbMin, aabbMax;
- getAabb(identity, aabbMin, aabbMax);
-
- btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5);
-
- btScalar margin = getMargin();
-
- btScalar lx = btScalar(2.) * (halfExtents.x() + margin);
- btScalar ly = btScalar(2.) * (halfExtents.y() + margin);
- btScalar lz = btScalar(2.) * (halfExtents.z() + margin);
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(0.08333333);
-
- inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2));
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h
deleted file mode 100644
index 3b5150f6d5..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMinkowskiSumShape.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MINKOWSKI_SUM_SHAPE_H
-#define BT_MINKOWSKI_SUM_SHAPE_H
-
-#include "btConvexInternalShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-/// The btMinkowskiSumShape is only for advanced users. This shape represents implicit based minkowski sum of two convex implicit shapes.
-ATTRIBUTE_ALIGNED16(class)
-btMinkowskiSumShape : public btConvexInternalShape
-{
- btTransform m_transA;
- btTransform m_transB;
- const btConvexShape* m_shapeA;
- const btConvexShape* m_shapeB;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btMinkowskiSumShape(const btConvexShape* shapeA, const btConvexShape* shapeB);
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- void setTransformA(const btTransform& transA) { m_transA = transA; }
- void setTransformB(const btTransform& transB) { m_transB = transB; }
-
- const btTransform& getTransformA() const { return m_transA; }
- const btTransform& GetTransformB() const { return m_transB; }
-
- virtual btScalar getMargin() const;
-
- const btConvexShape* getShapeA() const { return m_shapeA; }
- const btConvexShape* getShapeB() const { return m_shapeB; }
-
- virtual const char* getName() const
- {
- return "MinkowskiSum";
- }
-};
-
-#endif //BT_MINKOWSKI_SUM_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.cpp
deleted file mode 100644
index c0cc55dfb0..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#if defined(_WIN32) || defined(__i386__)
-#define BT_USE_SSE_IN_API
-#endif
-
-#include "btMultiSphereShape.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-#include "LinearMath/btQuaternion.h"
-#include "LinearMath/btSerializer.h"
-
-btMultiSphereShape::btMultiSphereShape(const btVector3* positions, const btScalar* radi, int numSpheres)
- : btConvexInternalAabbCachingShape()
-{
- m_shapeType = MULTI_SPHERE_SHAPE_PROXYTYPE;
- //btScalar startMargin = btScalar(BT_LARGE_FLOAT);
-
- m_localPositionArray.resize(numSpheres);
- m_radiArray.resize(numSpheres);
- for (int i = 0; i < numSpheres; i++)
- {
- m_localPositionArray[i] = positions[i];
- m_radiArray[i] = radi[i];
- }
-
- recalcLocalAabb();
-}
-
-#ifndef MIN
-#define MIN(_a, _b) ((_a) < (_b) ? (_a) : (_b))
-#endif
-btVector3 btMultiSphereShape::localGetSupportingVertexWithoutMargin(const btVector3& vec0) const
-{
- btVector3 supVec(0, 0, 0);
-
- btScalar maxDot(btScalar(-BT_LARGE_FLOAT));
-
- btVector3 vec = vec0;
- btScalar lenSqr = vec.length2();
- if (lenSqr < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vec.setValue(1, 0, 0);
- }
- else
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- vec *= rlen;
- }
-
- btVector3 vtx;
- btScalar newDot;
-
- const btVector3* pos = &m_localPositionArray[0];
- const btScalar* rad = &m_radiArray[0];
- int numSpheres = m_localPositionArray.size();
-
- for (int k = 0; k < numSpheres; k += 128)
- {
- btVector3 temp[128];
- int inner_count = MIN(numSpheres - k, 128);
- for (long i = 0; i < inner_count; i++)
- {
- temp[i] = (*pos) * m_localScaling + vec * m_localScaling * (*rad) - vec * getMargin();
- pos++;
- rad++;
- }
- long i = vec.maxDot(temp, inner_count, newDot);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supVec = temp[i];
- }
- }
-
- return supVec;
-}
-
-void btMultiSphereShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- for (int j = 0; j < numVectors; j++)
- {
- btScalar maxDot(btScalar(-BT_LARGE_FLOAT));
-
- const btVector3& vec = vectors[j];
-
- btVector3 vtx;
- btScalar newDot;
-
- const btVector3* pos = &m_localPositionArray[0];
- const btScalar* rad = &m_radiArray[0];
- int numSpheres = m_localPositionArray.size();
-
- for (int k = 0; k < numSpheres; k += 128)
- {
- btVector3 temp[128];
- int inner_count = MIN(numSpheres - k, 128);
- for (long i = 0; i < inner_count; i++)
- {
- temp[i] = (*pos) * m_localScaling + vec * m_localScaling * (*rad) - vec * getMargin();
- pos++;
- rad++;
- }
- long i = vec.maxDot(temp, inner_count, newDot);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supportVerticesOut[j] = temp[i];
- }
- }
- }
-}
-
-void btMultiSphereShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- //as an approximation, take the inertia of the box that bounds the spheres
-
- btVector3 localAabbMin, localAabbMax;
- getCachedLocalAabb(localAabbMin, localAabbMax);
- btVector3 halfExtents = (localAabbMax - localAabbMin) * btScalar(0.5);
-
- btScalar lx = btScalar(2.) * (halfExtents.x());
- btScalar ly = btScalar(2.) * (halfExtents.y());
- btScalar lz = btScalar(2.) * (halfExtents.z());
-
- inertia.setValue(mass / (btScalar(12.0)) * (ly * ly + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + lz * lz),
- mass / (btScalar(12.0)) * (lx * lx + ly * ly));
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btMultiSphereShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btMultiSphereShapeData* shapeData = (btMultiSphereShapeData*)dataBuffer;
- btConvexInternalShape::serialize(&shapeData->m_convexInternalShapeData, serializer);
-
- int numElem = m_localPositionArray.size();
- shapeData->m_localPositionArrayPtr = numElem ? (btPositionAndRadius*)serializer->getUniquePointer((void*)&m_localPositionArray[0]) : 0;
-
- shapeData->m_localPositionArraySize = numElem;
- if (numElem)
- {
- btChunk* chunk = serializer->allocate(sizeof(btPositionAndRadius), numElem);
- btPositionAndRadius* memPtr = (btPositionAndRadius*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_localPositionArray[i].serializeFloat(memPtr->m_pos);
- memPtr->m_radius = float(m_radiArray[i]);
- }
- serializer->finalizeChunk(chunk, "btPositionAndRadius", BT_ARRAY_CODE, (void*)&m_localPositionArray[0]);
- }
-
- // Fill padding with zeros to appease msan.
- memset(shapeData->m_padding, 0, sizeof(shapeData->m_padding));
-
- return "btMultiSphereShapeData";
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h
deleted file mode 100644
index 2d79c07ca4..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultiSphereShape.h
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTI_SPHERE_MINKOWSKI_H
-#define BT_MULTI_SPHERE_MINKOWSKI_H
-
-#include "btConvexInternalShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btAabbUtil2.h"
-
-///The btMultiSphereShape represents the convex hull of a collection of spheres. You can create special capsules or other smooth volumes.
-///It is possible to animate the spheres for deformation, but call 'recalcLocalAabb' after changing any sphere position/radius
-ATTRIBUTE_ALIGNED16(class)
-btMultiSphereShape : public btConvexInternalAabbCachingShape
-{
- btAlignedObjectArray<btVector3> m_localPositionArray;
- btAlignedObjectArray<btScalar> m_radiArray;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btMultiSphereShape(const btVector3* positions, const btScalar* radi, int numSpheres);
-
- ///CollisionShape Interface
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- /// btConvexShape Interface
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- int getSphereCount() const
- {
- return m_localPositionArray.size();
- }
-
- const btVector3& getSpherePosition(int index) const
- {
- return m_localPositionArray[index];
- }
-
- btScalar getSphereRadius(int index) const
- {
- return m_radiArray[index];
- }
-
- virtual const char* getName() const
- {
- return "MultiSphere";
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-struct btPositionAndRadius
-{
- btVector3FloatData m_pos;
- float m_radius;
-};
-
-// clang-format off
-
-struct btMultiSphereShapeData
-{
- btConvexInternalShapeData m_convexInternalShapeData;
-
- btPositionAndRadius *m_localPositionArrayPtr;
- int m_localPositionArraySize;
- char m_padding[4];
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btMultiSphereShape::calculateSerializeBufferSize() const
-{
- return sizeof(btMultiSphereShapeData);
-}
-
-#endif //BT_MULTI_SPHERE_MINKOWSKI_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp
deleted file mode 100644
index 30108c9e7b..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/// This file was created by Alex Silverman
-
-#include "BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h"
-//#include "BulletCollision/CollisionShapes/btOptimizedBvh.h"
-
-///Obtains the material for a specific triangle
-const btMaterial *btMultimaterialTriangleMeshShape::getMaterialProperties(int partID, int triIndex)
-{
- const unsigned char *materialBase = 0;
- int numMaterials;
- PHY_ScalarType materialType;
- int materialStride;
- const unsigned char *triangleMaterialBase = 0;
- int numTriangles;
- int triangleMaterialStride;
- PHY_ScalarType triangleType;
-
- ((btTriangleIndexVertexMaterialArray *)m_meshInterface)->getLockedReadOnlyMaterialBase(&materialBase, numMaterials, materialType, materialStride, &triangleMaterialBase, numTriangles, triangleMaterialStride, triangleType, partID);
-
- // return the pointer to the place with the friction for the triangle
- // TODO: This depends on whether it's a moving mesh or not
- // BUG IN GIMPACT
- //return (btScalar*)(&materialBase[triangleMaterialBase[(triIndex-1) * triangleMaterialStride] * materialStride]);
- int *matInd = (int *)(&(triangleMaterialBase[(triIndex * triangleMaterialStride)]));
- btMaterial *matVal = (btMaterial *)(&(materialBase[*matInd * materialStride]));
- return (matVal);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h
deleted file mode 100644
index d1d42f8e04..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/// This file was created by Alex Silverman
-
-#ifndef BT_BVH_TRIANGLE_MATERIAL_MESH_SHAPE_H
-#define BT_BVH_TRIANGLE_MATERIAL_MESH_SHAPE_H
-
-#include "btBvhTriangleMeshShape.h"
-#include "btMaterial.h"
-
-///The BvhTriangleMaterialMeshShape extends the btBvhTriangleMeshShape. Its main contribution is the interface into a material array, which allows per-triangle friction and restitution.
-ATTRIBUTE_ALIGNED16(class)
-btMultimaterialTriangleMeshShape : public btBvhTriangleMeshShape
-{
- btAlignedObjectArray<btMaterial *> m_materialList;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btMultimaterialTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, bool buildBvh = true) : btBvhTriangleMeshShape(meshInterface, useQuantizedAabbCompression, buildBvh)
- {
- m_shapeType = MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE;
-
- const unsigned char *vertexbase;
- int numverts;
- PHY_ScalarType type;
- int stride;
- const unsigned char *indexbase;
- int indexstride;
- int numfaces;
- PHY_ScalarType indicestype;
-
- //m_materialLookup = (int**)(btAlignedAlloc(sizeof(int*) * meshInterface->getNumSubParts(), 16));
-
- for (int i = 0; i < meshInterface->getNumSubParts(); i++)
- {
- m_meshInterface->getLockedReadOnlyVertexIndexBase(
- &vertexbase,
- numverts,
- type,
- stride,
- &indexbase,
- indexstride,
- numfaces,
- indicestype,
- i);
- //m_materialLookup[i] = (int*)(btAlignedAlloc(sizeof(int) * numfaces, 16));
- }
- }
-
- ///optionally pass in a larger bvh aabb, used for quantization. This allows for deformations within this aabb
- btMultimaterialTriangleMeshShape(btStridingMeshInterface * meshInterface, bool useQuantizedAabbCompression, const btVector3 &bvhAabbMin, const btVector3 &bvhAabbMax, bool buildBvh = true) : btBvhTriangleMeshShape(meshInterface, useQuantizedAabbCompression, bvhAabbMin, bvhAabbMax, buildBvh)
- {
- m_shapeType = MULTIMATERIAL_TRIANGLE_MESH_PROXYTYPE;
-
- const unsigned char *vertexbase;
- int numverts;
- PHY_ScalarType type;
- int stride;
- const unsigned char *indexbase;
- int indexstride;
- int numfaces;
- PHY_ScalarType indicestype;
-
- //m_materialLookup = (int**)(btAlignedAlloc(sizeof(int*) * meshInterface->getNumSubParts(), 16));
-
- for (int i = 0; i < meshInterface->getNumSubParts(); i++)
- {
- m_meshInterface->getLockedReadOnlyVertexIndexBase(
- &vertexbase,
- numverts,
- type,
- stride,
- &indexbase,
- indexstride,
- numfaces,
- indicestype,
- i);
- //m_materialLookup[i] = (int*)(btAlignedAlloc(sizeof(int) * numfaces * 2, 16));
- }
- }
-
- virtual ~btMultimaterialTriangleMeshShape()
- {
- /*
- for(int i = 0; i < m_meshInterface->getNumSubParts(); i++)
- {
- btAlignedFree(m_materialValues[i]);
- m_materialLookup[i] = NULL;
- }
- btAlignedFree(m_materialValues);
- m_materialLookup = NULL;
-*/
- }
- //debugging
- virtual const char *getName() const { return "MULTIMATERIALTRIANGLEMESH"; }
-
- ///Obtains the material for a specific triangle
- const btMaterial *getMaterialProperties(int partID, int triIndex);
-};
-
-#endif //BT_BVH_TRIANGLE_MATERIAL_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.cpp
deleted file mode 100644
index 863ea6d6ac..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.cpp
+++ /dev/null
@@ -1,364 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btOptimizedBvh.h"
-#include "btStridingMeshInterface.h"
-#include "LinearMath/btAabbUtil2.h"
-#include "LinearMath/btIDebugDraw.h"
-
-btOptimizedBvh::btOptimizedBvh()
-{
-}
-
-btOptimizedBvh::~btOptimizedBvh()
-{
-}
-
-void btOptimizedBvh::build(btStridingMeshInterface* triangles, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax)
-{
- m_useQuantization = useQuantizedAabbCompression;
-
- // NodeArray triangleNodes;
-
- struct NodeTriangleCallback : public btInternalTriangleIndexCallback
- {
- NodeArray& m_triangleNodes;
-
- NodeTriangleCallback& operator=(NodeTriangleCallback& other)
- {
- m_triangleNodes.copyFromArray(other.m_triangleNodes);
- return *this;
- }
-
- NodeTriangleCallback(NodeArray& triangleNodes)
- : m_triangleNodes(triangleNodes)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- btOptimizedBvhNode node;
- btVector3 aabbMin, aabbMax;
- aabbMin.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMin.setMin(triangle[0]);
- aabbMax.setMax(triangle[0]);
- aabbMin.setMin(triangle[1]);
- aabbMax.setMax(triangle[1]);
- aabbMin.setMin(triangle[2]);
- aabbMax.setMax(triangle[2]);
-
- //with quantization?
- node.m_aabbMinOrg = aabbMin;
- node.m_aabbMaxOrg = aabbMax;
-
- node.m_escapeIndex = -1;
-
- //for child nodes
- node.m_subPart = partId;
- node.m_triangleIndex = triangleIndex;
- m_triangleNodes.push_back(node);
- }
- };
- struct QuantizedNodeTriangleCallback : public btInternalTriangleIndexCallback
- {
- QuantizedNodeArray& m_triangleNodes;
- const btQuantizedBvh* m_optimizedTree; // for quantization
-
- QuantizedNodeTriangleCallback& operator=(QuantizedNodeTriangleCallback& other)
- {
- m_triangleNodes.copyFromArray(other.m_triangleNodes);
- m_optimizedTree = other.m_optimizedTree;
- return *this;
- }
-
- QuantizedNodeTriangleCallback(QuantizedNodeArray& triangleNodes, const btQuantizedBvh* tree)
- : m_triangleNodes(triangleNodes), m_optimizedTree(tree)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- // The partId and triangle index must fit in the same (positive) integer
- btAssert(partId < (1 << MAX_NUM_PARTS_IN_BITS));
- btAssert(triangleIndex < (1 << (31 - MAX_NUM_PARTS_IN_BITS)));
- //negative indices are reserved for escapeIndex
- btAssert(triangleIndex >= 0);
-
- btQuantizedBvhNode node;
- btVector3 aabbMin, aabbMax;
- aabbMin.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMin.setMin(triangle[0]);
- aabbMax.setMax(triangle[0]);
- aabbMin.setMin(triangle[1]);
- aabbMax.setMax(triangle[1]);
- aabbMin.setMin(triangle[2]);
- aabbMax.setMax(triangle[2]);
-
- //PCK: add these checks for zero dimensions of aabb
- const btScalar MIN_AABB_DIMENSION = btScalar(0.002);
- const btScalar MIN_AABB_HALF_DIMENSION = btScalar(0.001);
- if (aabbMax.x() - aabbMin.x() < MIN_AABB_DIMENSION)
- {
- aabbMax.setX(aabbMax.x() + MIN_AABB_HALF_DIMENSION);
- aabbMin.setX(aabbMin.x() - MIN_AABB_HALF_DIMENSION);
- }
- if (aabbMax.y() - aabbMin.y() < MIN_AABB_DIMENSION)
- {
- aabbMax.setY(aabbMax.y() + MIN_AABB_HALF_DIMENSION);
- aabbMin.setY(aabbMin.y() - MIN_AABB_HALF_DIMENSION);
- }
- if (aabbMax.z() - aabbMin.z() < MIN_AABB_DIMENSION)
- {
- aabbMax.setZ(aabbMax.z() + MIN_AABB_HALF_DIMENSION);
- aabbMin.setZ(aabbMin.z() - MIN_AABB_HALF_DIMENSION);
- }
-
- m_optimizedTree->quantize(&node.m_quantizedAabbMin[0], aabbMin, 0);
- m_optimizedTree->quantize(&node.m_quantizedAabbMax[0], aabbMax, 1);
-
- node.m_escapeIndexOrTriangleIndex = (partId << (31 - MAX_NUM_PARTS_IN_BITS)) | triangleIndex;
-
- m_triangleNodes.push_back(node);
- }
- };
-
- int numLeafNodes = 0;
-
- if (m_useQuantization)
- {
- //initialize quantization values
- setQuantizationValues(bvhAabbMin, bvhAabbMax);
-
- QuantizedNodeTriangleCallback callback(m_quantizedLeafNodes, this);
-
- triangles->InternalProcessAllTriangles(&callback, m_bvhAabbMin, m_bvhAabbMax);
-
- //now we have an array of leafnodes in m_leafNodes
- numLeafNodes = m_quantizedLeafNodes.size();
-
- m_quantizedContiguousNodes.resize(2 * numLeafNodes);
- }
- else
- {
- NodeTriangleCallback callback(m_leafNodes);
-
- btVector3 aabbMin(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
-
- triangles->InternalProcessAllTriangles(&callback, aabbMin, aabbMax);
-
- //now we have an array of leafnodes in m_leafNodes
- numLeafNodes = m_leafNodes.size();
-
- m_contiguousNodes.resize(2 * numLeafNodes);
- }
-
- m_curNodeIndex = 0;
-
- buildTree(0, numLeafNodes);
-
- ///if the entire tree is small then subtree size, we need to create a header info for the tree
- if (m_useQuantization && !m_SubtreeHeaders.size())
- {
- btBvhSubtreeInfo& subtree = m_SubtreeHeaders.expand();
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[0]);
- subtree.m_rootNodeIndex = 0;
- subtree.m_subtreeSize = m_quantizedContiguousNodes[0].isLeafNode() ? 1 : m_quantizedContiguousNodes[0].getEscapeIndex();
- }
-
- //PCK: update the copy of the size
- m_subtreeHeaderCount = m_SubtreeHeaders.size();
-
- //PCK: clear m_quantizedLeafNodes and m_leafNodes, they are temporary
- m_quantizedLeafNodes.clear();
- m_leafNodes.clear();
-}
-
-void btOptimizedBvh::refit(btStridingMeshInterface* meshInterface, const btVector3& aabbMin, const btVector3& aabbMax)
-{
- if (m_useQuantization)
- {
- setQuantizationValues(aabbMin, aabbMax);
-
- updateBvhNodes(meshInterface, 0, m_curNodeIndex, 0);
-
- ///now update all subtree headers
-
- int i;
- for (i = 0; i < m_SubtreeHeaders.size(); i++)
- {
- btBvhSubtreeInfo& subtree = m_SubtreeHeaders[i];
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[subtree.m_rootNodeIndex]);
- }
- }
- else
- {
- }
-}
-
-void btOptimizedBvh::refitPartial(btStridingMeshInterface* meshInterface, const btVector3& aabbMin, const btVector3& aabbMax)
-{
- //incrementally initialize quantization values
- btAssert(m_useQuantization);
-
- btAssert(aabbMin.getX() > m_bvhAabbMin.getX());
- btAssert(aabbMin.getY() > m_bvhAabbMin.getY());
- btAssert(aabbMin.getZ() > m_bvhAabbMin.getZ());
-
- btAssert(aabbMax.getX() < m_bvhAabbMax.getX());
- btAssert(aabbMax.getY() < m_bvhAabbMax.getY());
- btAssert(aabbMax.getZ() < m_bvhAabbMax.getZ());
-
- ///we should update all quantization values, using updateBvhNodes(meshInterface);
- ///but we only update chunks that overlap the given aabb
-
- unsigned short quantizedQueryAabbMin[3];
- unsigned short quantizedQueryAabbMax[3];
-
- quantize(&quantizedQueryAabbMin[0], aabbMin, 0);
- quantize(&quantizedQueryAabbMax[0], aabbMax, 1);
-
- int i;
- for (i = 0; i < this->m_SubtreeHeaders.size(); i++)
- {
- btBvhSubtreeInfo& subtree = m_SubtreeHeaders[i];
-
- //PCK: unsigned instead of bool
- unsigned overlap = testQuantizedAabbAgainstQuantizedAabb(quantizedQueryAabbMin, quantizedQueryAabbMax, subtree.m_quantizedAabbMin, subtree.m_quantizedAabbMax);
- if (overlap != 0)
- {
- updateBvhNodes(meshInterface, subtree.m_rootNodeIndex, subtree.m_rootNodeIndex + subtree.m_subtreeSize, i);
-
- subtree.setAabbFromQuantizeNode(m_quantizedContiguousNodes[subtree.m_rootNodeIndex]);
- }
- }
-}
-
-void btOptimizedBvh::updateBvhNodes(btStridingMeshInterface* meshInterface, int firstNode, int endNode, int index)
-{
- (void)index;
-
- btAssert(m_useQuantization);
-
- int curNodeSubPart = -1;
-
- //get access info to trianglemesh data
- const unsigned char* vertexbase = 0;
- int numverts = 0;
- PHY_ScalarType type = PHY_INTEGER;
- int stride = 0;
- const unsigned char* indexbase = 0;
- int indexstride = 0;
- int numfaces = 0;
- PHY_ScalarType indicestype = PHY_INTEGER;
-
- btVector3 triangleVerts[3];
- btVector3 aabbMin, aabbMax;
- const btVector3& meshScaling = meshInterface->getScaling();
-
- int i;
- for (i = endNode - 1; i >= firstNode; i--)
- {
- btQuantizedBvhNode& curNode = m_quantizedContiguousNodes[i];
- if (curNode.isLeafNode())
- {
- //recalc aabb from triangle data
- int nodeSubPart = curNode.getPartId();
- int nodeTriangleIndex = curNode.getTriangleIndex();
- if (nodeSubPart != curNodeSubPart)
- {
- if (curNodeSubPart >= 0)
- meshInterface->unLockReadOnlyVertexBase(curNodeSubPart);
- meshInterface->getLockedReadOnlyVertexIndexBase(&vertexbase, numverts, type, stride, &indexbase, indexstride, numfaces, indicestype, nodeSubPart);
-
- curNodeSubPart = nodeSubPart;
- }
- //triangles->getLockedReadOnlyVertexIndexBase(vertexBase,numVerts,
-
- unsigned int* gfxbase = (unsigned int*)(indexbase + nodeTriangleIndex * indexstride);
-
- for (int j = 2; j >= 0; j--)
- {
- int graphicsindex;
- switch (indicestype) {
- case PHY_INTEGER: graphicsindex = gfxbase[j]; break;
- case PHY_SHORT: graphicsindex = ((unsigned short*)gfxbase)[j]; break;
- case PHY_UCHAR: graphicsindex = ((unsigned char*)gfxbase)[j]; break;
- default: btAssert(0);
- }
- if (type == PHY_FLOAT)
- {
- float* graphicsbase = (float*)(vertexbase + graphicsindex * stride);
- triangleVerts[j] = btVector3(
- graphicsbase[0] * meshScaling.getX(),
- graphicsbase[1] * meshScaling.getY(),
- graphicsbase[2] * meshScaling.getZ());
- }
- else
- {
- double* graphicsbase = (double*)(vertexbase + graphicsindex * stride);
- triangleVerts[j] = btVector3(btScalar(graphicsbase[0] * meshScaling.getX()), btScalar(graphicsbase[1] * meshScaling.getY()), btScalar(graphicsbase[2] * meshScaling.getZ()));
- }
- }
-
- aabbMin.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMin.setMin(triangleVerts[0]);
- aabbMax.setMax(triangleVerts[0]);
- aabbMin.setMin(triangleVerts[1]);
- aabbMax.setMax(triangleVerts[1]);
- aabbMin.setMin(triangleVerts[2]);
- aabbMax.setMax(triangleVerts[2]);
-
- quantize(&curNode.m_quantizedAabbMin[0], aabbMin, 0);
- quantize(&curNode.m_quantizedAabbMax[0], aabbMax, 1);
- }
- else
- {
- //combine aabb from both children
-
- btQuantizedBvhNode* leftChildNode = &m_quantizedContiguousNodes[i + 1];
-
- btQuantizedBvhNode* rightChildNode = leftChildNode->isLeafNode() ? &m_quantizedContiguousNodes[i + 2] : &m_quantizedContiguousNodes[i + 1 + leftChildNode->getEscapeIndex()];
-
- {
- for (int i = 0; i < 3; i++)
- {
- curNode.m_quantizedAabbMin[i] = leftChildNode->m_quantizedAabbMin[i];
- if (curNode.m_quantizedAabbMin[i] > rightChildNode->m_quantizedAabbMin[i])
- curNode.m_quantizedAabbMin[i] = rightChildNode->m_quantizedAabbMin[i];
-
- curNode.m_quantizedAabbMax[i] = leftChildNode->m_quantizedAabbMax[i];
- if (curNode.m_quantizedAabbMax[i] < rightChildNode->m_quantizedAabbMax[i])
- curNode.m_quantizedAabbMax[i] = rightChildNode->m_quantizedAabbMax[i];
- }
- }
- }
- }
-
- if (curNodeSubPart >= 0)
- meshInterface->unLockReadOnlyVertexBase(curNodeSubPart);
-}
-
-///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place'
-btOptimizedBvh* btOptimizedBvh::deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian)
-{
- btQuantizedBvh* bvh = btQuantizedBvh::deSerializeInPlace(i_alignedDataBuffer, i_dataBufferSize, i_swapEndian);
-
- //we don't add additional data so just do a static upcast
- return static_cast<btOptimizedBvh*>(bvh);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h
deleted file mode 100644
index 22f131c8b2..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btOptimizedBvh.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///Contains contributions from Disney Studio's
-
-#ifndef BT_OPTIMIZED_BVH_H
-#define BT_OPTIMIZED_BVH_H
-
-#include "BulletCollision/BroadphaseCollision/btQuantizedBvh.h"
-
-class btStridingMeshInterface;
-
-///The btOptimizedBvh extends the btQuantizedBvh to create AABB tree for triangle meshes, through the btStridingMeshInterface.
-ATTRIBUTE_ALIGNED16(class)
-btOptimizedBvh : public btQuantizedBvh
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
-protected:
-public:
- btOptimizedBvh();
-
- virtual ~btOptimizedBvh();
-
- void build(btStridingMeshInterface * triangles, bool useQuantizedAabbCompression, const btVector3& bvhAabbMin, const btVector3& bvhAabbMax);
-
- void refit(btStridingMeshInterface * triangles, const btVector3& aabbMin, const btVector3& aabbMax);
-
- void refitPartial(btStridingMeshInterface * triangles, const btVector3& aabbMin, const btVector3& aabbMax);
-
- void updateBvhNodes(btStridingMeshInterface * meshInterface, int firstNode, int endNode, int index);
-
- /// Data buffer MUST be 16 byte aligned
- virtual bool serializeInPlace(void* o_alignedDataBuffer, unsigned i_dataBufferSize, bool i_swapEndian) const
- {
- return btQuantizedBvh::serialize(o_alignedDataBuffer, i_dataBufferSize, i_swapEndian);
- }
-
- ///deSerializeInPlace loads and initializes a BVH from a buffer in memory 'in place'
- static btOptimizedBvh* deSerializeInPlace(void* i_alignedDataBuffer, unsigned int i_dataBufferSize, bool i_swapEndian);
-};
-
-#endif //BT_OPTIMIZED_BVH_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp
deleted file mode 100644
index 521ecfc760..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp
+++ /dev/null
@@ -1,549 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#if defined(_WIN32) || defined(__i386__)
-#define BT_USE_SSE_IN_API
-#endif
-
-#include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.h"
-#include "btConvexPolyhedron.h"
-#include "LinearMath/btConvexHullComputer.h"
-#include <new>
-#include "LinearMath/btGeometryUtil.h"
-#include "LinearMath/btGrahamScan2dConvexHull.h"
-
-btPolyhedralConvexShape::btPolyhedralConvexShape() : btConvexInternalShape(),
- m_polyhedron(0)
-{
-}
-
-btPolyhedralConvexShape::~btPolyhedralConvexShape()
-{
- if (m_polyhedron)
- {
- m_polyhedron->~btConvexPolyhedron();
- btAlignedFree(m_polyhedron);
- }
-}
-
-void btPolyhedralConvexShape::setPolyhedralFeatures(btConvexPolyhedron& polyhedron)
-{
- if (m_polyhedron)
- {
- *m_polyhedron = polyhedron;
- }
- else
- {
- void* mem = btAlignedAlloc(sizeof(btConvexPolyhedron), 16);
- m_polyhedron = new (mem) btConvexPolyhedron(polyhedron);
- }
-}
-
-bool btPolyhedralConvexShape::initializePolyhedralFeatures(int shiftVerticesByMargin)
-{
- if (m_polyhedron)
- {
- m_polyhedron->~btConvexPolyhedron();
- btAlignedFree(m_polyhedron);
- }
-
- void* mem = btAlignedAlloc(sizeof(btConvexPolyhedron), 16);
- m_polyhedron = new (mem) btConvexPolyhedron;
-
- btAlignedObjectArray<btVector3> orgVertices;
-
- for (int i = 0; i < getNumVertices(); i++)
- {
- btVector3& newVertex = orgVertices.expand();
- getVertex(i, newVertex);
- }
-
- btConvexHullComputer conv;
-
- if (shiftVerticesByMargin)
- {
- btAlignedObjectArray<btVector3> planeEquations;
- btGeometryUtil::getPlaneEquationsFromVertices(orgVertices, planeEquations);
-
- btAlignedObjectArray<btVector3> shiftedPlaneEquations;
- for (int p = 0; p < planeEquations.size(); p++)
- {
- btVector3 plane = planeEquations[p];
- // btScalar margin = getMargin();
- plane[3] -= getMargin();
- shiftedPlaneEquations.push_back(plane);
- }
-
- btAlignedObjectArray<btVector3> tmpVertices;
-
- btGeometryUtil::getVerticesFromPlaneEquations(shiftedPlaneEquations, tmpVertices);
-
- conv.compute(&tmpVertices[0].getX(), sizeof(btVector3), tmpVertices.size(), 0.f, 0.f);
- }
- else
- {
- conv.compute(&orgVertices[0].getX(), sizeof(btVector3), orgVertices.size(), 0.f, 0.f);
- }
-
-#ifndef BT_RECONSTRUCT_FACES
-
- int numVertices = conv.vertices.size();
- m_polyhedron->m_vertices.resize(numVertices);
- for (int p = 0; p < numVertices; p++)
- {
- m_polyhedron->m_vertices[p] = conv.vertices[p];
- }
-
- int v0, v1;
- for (int j = 0; j < conv.faces.size(); j++)
- {
- btVector3 edges[3];
- int numEdges = 0;
- btFace combinedFace;
- const btConvexHullComputer::Edge* edge = &conv.edges[conv.faces[j]];
- v0 = edge->getSourceVertex();
- int prevVertex = v0;
- combinedFace.m_indices.push_back(v0);
- v1 = edge->getTargetVertex();
- while (v1 != v0)
- {
- btVector3 wa = conv.vertices[prevVertex];
- btVector3 wb = conv.vertices[v1];
- btVector3 newEdge = wb - wa;
- newEdge.normalize();
- if (numEdges < 2)
- edges[numEdges++] = newEdge;
-
- //face->addIndex(v1);
- combinedFace.m_indices.push_back(v1);
- edge = edge->getNextEdgeOfFace();
- prevVertex = v1;
- int v01 = edge->getSourceVertex();
- v1 = edge->getTargetVertex();
- }
-
- btAssert(combinedFace.m_indices.size() > 2);
-
- btVector3 faceNormal = edges[0].cross(edges[1]);
- faceNormal.normalize();
-
- btScalar planeEq = 1e30f;
-
- for (int v = 0; v < combinedFace.m_indices.size(); v++)
- {
- btScalar eq = m_polyhedron->m_vertices[combinedFace.m_indices[v]].dot(faceNormal);
- if (planeEq > eq)
- {
- planeEq = eq;
- }
- }
- combinedFace.m_plane[0] = faceNormal.getX();
- combinedFace.m_plane[1] = faceNormal.getY();
- combinedFace.m_plane[2] = faceNormal.getZ();
- combinedFace.m_plane[3] = -planeEq;
-
- m_polyhedron->m_faces.push_back(combinedFace);
- }
-
-#else //BT_RECONSTRUCT_FACES
-
- btAlignedObjectArray<btVector3> faceNormals;
- int numFaces = conv.faces.size();
- faceNormals.resize(numFaces);
- btConvexHullComputer* convexUtil = &conv;
-
- btAlignedObjectArray<btFace> tmpFaces;
- tmpFaces.resize(numFaces);
-
- int numVertices = convexUtil->vertices.size();
- m_polyhedron->m_vertices.resize(numVertices);
- for (int p = 0; p < numVertices; p++)
- {
- m_polyhedron->m_vertices[p] = convexUtil->vertices[p];
- }
-
- for (int i = 0; i < numFaces; i++)
- {
- int face = convexUtil->faces[i];
- //printf("face=%d\n",face);
- const btConvexHullComputer::Edge* firstEdge = &convexUtil->edges[face];
- const btConvexHullComputer::Edge* edge = firstEdge;
-
- btVector3 edges[3];
- int numEdges = 0;
- //compute face normals
-
- do
- {
- int src = edge->getSourceVertex();
- tmpFaces[i].m_indices.push_back(src);
- int targ = edge->getTargetVertex();
- btVector3 wa = convexUtil->vertices[src];
-
- btVector3 wb = convexUtil->vertices[targ];
- btVector3 newEdge = wb - wa;
- newEdge.normalize();
- if (numEdges < 2)
- edges[numEdges++] = newEdge;
-
- edge = edge->getNextEdgeOfFace();
- } while (edge != firstEdge);
-
- btScalar planeEq = 1e30f;
-
- if (numEdges == 2)
- {
- faceNormals[i] = edges[0].cross(edges[1]);
- faceNormals[i].normalize();
- tmpFaces[i].m_plane[0] = faceNormals[i].getX();
- tmpFaces[i].m_plane[1] = faceNormals[i].getY();
- tmpFaces[i].m_plane[2] = faceNormals[i].getZ();
- tmpFaces[i].m_plane[3] = planeEq;
- }
- else
- {
- btAssert(0); //degenerate?
- faceNormals[i].setZero();
- }
-
- for (int v = 0; v < tmpFaces[i].m_indices.size(); v++)
- {
- btScalar eq = m_polyhedron->m_vertices[tmpFaces[i].m_indices[v]].dot(faceNormals[i]);
- if (planeEq > eq)
- {
- planeEq = eq;
- }
- }
- tmpFaces[i].m_plane[3] = -planeEq;
- }
-
- //merge coplanar faces and copy them to m_polyhedron
-
- btScalar faceWeldThreshold = 0.999f;
- btAlignedObjectArray<int> todoFaces;
- for (int i = 0; i < tmpFaces.size(); i++)
- todoFaces.push_back(i);
-
- while (todoFaces.size())
- {
- btAlignedObjectArray<int> coplanarFaceGroup;
- int refFace = todoFaces[todoFaces.size() - 1];
-
- coplanarFaceGroup.push_back(refFace);
- btFace& faceA = tmpFaces[refFace];
- todoFaces.pop_back();
-
- btVector3 faceNormalA(faceA.m_plane[0], faceA.m_plane[1], faceA.m_plane[2]);
- for (int j = todoFaces.size() - 1; j >= 0; j--)
- {
- int i = todoFaces[j];
- btFace& faceB = tmpFaces[i];
- btVector3 faceNormalB(faceB.m_plane[0], faceB.m_plane[1], faceB.m_plane[2]);
- if (faceNormalA.dot(faceNormalB) > faceWeldThreshold)
- {
- coplanarFaceGroup.push_back(i);
- todoFaces.remove(i);
- }
- }
-
- bool did_merge = false;
- if (coplanarFaceGroup.size() > 1)
- {
- //do the merge: use Graham Scan 2d convex hull
-
- btAlignedObjectArray<GrahamVector3> orgpoints;
- btVector3 averageFaceNormal(0, 0, 0);
-
- for (int i = 0; i < coplanarFaceGroup.size(); i++)
- {
- // m_polyhedron->m_faces.push_back(tmpFaces[coplanarFaceGroup[i]]);
-
- btFace& face = tmpFaces[coplanarFaceGroup[i]];
- btVector3 faceNormal(face.m_plane[0], face.m_plane[1], face.m_plane[2]);
- averageFaceNormal += faceNormal;
- for (int f = 0; f < face.m_indices.size(); f++)
- {
- int orgIndex = face.m_indices[f];
- btVector3 pt = m_polyhedron->m_vertices[orgIndex];
-
- bool found = false;
-
- for (int i = 0; i < orgpoints.size(); i++)
- {
- //if ((orgpoints[i].m_orgIndex == orgIndex) || ((rotatedPt-orgpoints[i]).length2()<0.0001))
- if (orgpoints[i].m_orgIndex == orgIndex)
- {
- found = true;
- break;
- }
- }
- if (!found)
- orgpoints.push_back(GrahamVector3(pt, orgIndex));
- }
- }
-
- btFace combinedFace;
- for (int i = 0; i < 4; i++)
- combinedFace.m_plane[i] = tmpFaces[coplanarFaceGroup[0]].m_plane[i];
-
- btAlignedObjectArray<GrahamVector3> hull;
-
- averageFaceNormal.normalize();
- GrahamScanConvexHull2D(orgpoints, hull, averageFaceNormal);
-
- for (int i = 0; i < hull.size(); i++)
- {
- combinedFace.m_indices.push_back(hull[i].m_orgIndex);
- for (int k = 0; k < orgpoints.size(); k++)
- {
- if (orgpoints[k].m_orgIndex == hull[i].m_orgIndex)
- {
- orgpoints[k].m_orgIndex = -1; // invalidate...
- break;
- }
- }
- }
-
- // are there rejected vertices?
- bool reject_merge = false;
-
- for (int i = 0; i < orgpoints.size(); i++)
- {
- if (orgpoints[i].m_orgIndex == -1)
- continue; // this is in the hull...
- // this vertex is rejected -- is anybody else using this vertex?
- for (int j = 0; j < tmpFaces.size(); j++)
- {
- btFace& face = tmpFaces[j];
- // is this a face of the current coplanar group?
- bool is_in_current_group = false;
- for (int k = 0; k < coplanarFaceGroup.size(); k++)
- {
- if (coplanarFaceGroup[k] == j)
- {
- is_in_current_group = true;
- break;
- }
- }
- if (is_in_current_group) // ignore this face...
- continue;
- // does this face use this rejected vertex?
- for (int v = 0; v < face.m_indices.size(); v++)
- {
- if (face.m_indices[v] == orgpoints[i].m_orgIndex)
- {
- // this rejected vertex is used in another face -- reject merge
- reject_merge = true;
- break;
- }
- }
- if (reject_merge)
- break;
- }
- if (reject_merge)
- break;
- }
-
- if (!reject_merge)
- {
- // do this merge!
- did_merge = true;
- m_polyhedron->m_faces.push_back(combinedFace);
- }
- }
- if (!did_merge)
- {
- for (int i = 0; i < coplanarFaceGroup.size(); i++)
- {
- btFace face = tmpFaces[coplanarFaceGroup[i]];
- m_polyhedron->m_faces.push_back(face);
- }
- }
- }
-
-#endif //BT_RECONSTRUCT_FACES
-
- m_polyhedron->initialize();
-
- return true;
-}
-
-#ifndef MIN
-#define MIN(_a, _b) ((_a) < (_b) ? (_a) : (_b))
-#endif
-
-btVector3 btPolyhedralConvexShape::localGetSupportingVertexWithoutMargin(const btVector3& vec0) const
-{
- btVector3 supVec(0, 0, 0);
-#ifndef __SPU__
- int i;
- btScalar maxDot(btScalar(-BT_LARGE_FLOAT));
-
- btVector3 vec = vec0;
- btScalar lenSqr = vec.length2();
- if (lenSqr < btScalar(0.0001))
- {
- vec.setValue(1, 0, 0);
- }
- else
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- vec *= rlen;
- }
-
- btVector3 vtx;
- btScalar newDot;
-
- for (int k = 0; k < getNumVertices(); k += 128)
- {
- btVector3 temp[128];
- int inner_count = MIN(getNumVertices() - k, 128);
- for (i = 0; i < inner_count; i++)
- getVertex(i, temp[i]);
- i = (int)vec.maxDot(temp, inner_count, newDot);
- if (newDot > maxDot)
- {
- maxDot = newDot;
- supVec = temp[i];
- }
- }
-
-#endif //__SPU__
- return supVec;
-}
-
-void btPolyhedralConvexShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
-#ifndef __SPU__
- int i;
-
- btVector3 vtx;
- btScalar newDot;
-
- for (i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i][3] = btScalar(-BT_LARGE_FLOAT);
- }
-
- for (int j = 0; j < numVectors; j++)
- {
- const btVector3& vec = vectors[j];
-
- for (int k = 0; k < getNumVertices(); k += 128)
- {
- btVector3 temp[128];
- int inner_count = MIN(getNumVertices() - k, 128);
- for (i = 0; i < inner_count; i++)
- getVertex(i, temp[i]);
- i = (int)vec.maxDot(temp, inner_count, newDot);
- if (newDot > supportVerticesOut[j][3])
- {
- supportVerticesOut[j] = temp[i];
- supportVerticesOut[j][3] = newDot;
- }
- }
- }
-
-#endif //__SPU__
-}
-
-void btPolyhedralConvexShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
-#ifndef __SPU__
- //not yet, return box inertia
-
- btScalar margin = getMargin();
-
- btTransform ident;
- ident.setIdentity();
- btVector3 aabbMin, aabbMax;
- getAabb(ident, aabbMin, aabbMax);
- btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5);
-
- btScalar lx = btScalar(2.) * (halfExtents.x() + margin);
- btScalar ly = btScalar(2.) * (halfExtents.y() + margin);
- btScalar lz = btScalar(2.) * (halfExtents.z() + margin);
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(0.08333333);
-
- inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2));
-#endif //__SPU__
-}
-
-void btPolyhedralConvexAabbCachingShape::setLocalScaling(const btVector3& scaling)
-{
- btConvexInternalShape::setLocalScaling(scaling);
- recalcLocalAabb();
-}
-
-btPolyhedralConvexAabbCachingShape::btPolyhedralConvexAabbCachingShape()
- : btPolyhedralConvexShape(),
- m_localAabbMin(1, 1, 1),
- m_localAabbMax(-1, -1, -1),
- m_isLocalAabbValid(false)
-{
-}
-
-void btPolyhedralConvexAabbCachingShape::getAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax) const
-{
- getNonvirtualAabb(trans, aabbMin, aabbMax, getMargin());
-}
-
-void btPolyhedralConvexAabbCachingShape::recalcLocalAabb()
-{
- m_isLocalAabbValid = true;
-
-#if 1
- static const btVector3 _directions[] =
- {
- btVector3(1., 0., 0.),
- btVector3(0., 1., 0.),
- btVector3(0., 0., 1.),
- btVector3(-1., 0., 0.),
- btVector3(0., -1., 0.),
- btVector3(0., 0., -1.)};
-
- btVector3 _supporting[] =
- {
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.)};
-
- batchedUnitVectorGetSupportingVertexWithoutMargin(_directions, _supporting, 6);
-
- for (int i = 0; i < 3; ++i)
- {
- m_localAabbMax[i] = _supporting[i][i] + m_collisionMargin;
- m_localAabbMin[i] = _supporting[i + 3][i] - m_collisionMargin;
- }
-
-#else
-
- for (int i = 0; i < 3; i++)
- {
- btVector3 vec(btScalar(0.), btScalar(0.), btScalar(0.));
- vec[i] = btScalar(1.);
- btVector3 tmp = localGetSupportingVertex(vec);
- m_localAabbMax[i] = tmp[i];
- vec[i] = btScalar(-1.);
- tmp = localGetSupportingVertex(vec);
- m_localAabbMin[i] = tmp[i];
- }
-#endif
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h
deleted file mode 100644
index b3ffab7a23..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btPolyhedralConvexShape.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_POLYHEDRAL_CONVEX_SHAPE_H
-#define BT_POLYHEDRAL_CONVEX_SHAPE_H
-
-#include "LinearMath/btMatrix3x3.h"
-#include "btConvexInternalShape.h"
-class btConvexPolyhedron;
-
-///The btPolyhedralConvexShape is an internal interface class for polyhedral convex shapes.
-ATTRIBUTE_ALIGNED16(class)
-btPolyhedralConvexShape : public btConvexInternalShape
-{
-protected:
- btConvexPolyhedron* m_polyhedron;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btPolyhedralConvexShape();
-
- virtual ~btPolyhedralConvexShape();
-
- ///optional method mainly used to generate multiple contact points by clipping polyhedral features (faces/edges)
- ///experimental/work-in-progress
- virtual bool initializePolyhedralFeatures(int shiftVerticesByMargin = 0);
-
- virtual void setPolyhedralFeatures(btConvexPolyhedron & polyhedron);
-
- const btConvexPolyhedron* getConvexPolyhedron() const
- {
- return m_polyhedron;
- }
-
- //brute force implementations
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual int getNumVertices() const = 0;
- virtual int getNumEdges() const = 0;
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const = 0;
- virtual void getVertex(int i, btVector3& vtx) const = 0;
- virtual int getNumPlanes() const = 0;
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const = 0;
- // virtual int getIndex(int i) const = 0 ;
-
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const = 0;
-};
-
-///The btPolyhedralConvexAabbCachingShape adds aabb caching to the btPolyhedralConvexShape
-class btPolyhedralConvexAabbCachingShape : public btPolyhedralConvexShape
-{
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
- bool m_isLocalAabbValid;
-
-protected:
- void setCachedLocalAabb(const btVector3& aabbMin, const btVector3& aabbMax)
- {
- m_isLocalAabbValid = true;
- m_localAabbMin = aabbMin;
- m_localAabbMax = aabbMax;
- }
-
- inline void getCachedLocalAabb(btVector3& aabbMin, btVector3& aabbMax) const
- {
- btAssert(m_isLocalAabbValid);
- aabbMin = m_localAabbMin;
- aabbMax = m_localAabbMax;
- }
-
-protected:
- btPolyhedralConvexAabbCachingShape();
-
-public:
- inline void getNonvirtualAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax, btScalar margin) const
- {
- //lazy evaluation of local aabb
- btAssert(m_isLocalAabbValid);
- btTransformAabb(m_localAabbMin, m_localAabbMax, margin, trans, aabbMin, aabbMax);
- }
-
- virtual void setLocalScaling(const btVector3& scaling);
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- void recalcLocalAabb();
-};
-
-#endif //BT_POLYHEDRAL_CONVEX_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp
deleted file mode 100644
index f427319974..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btScaledBvhTriangleMeshShape.h"
-
-btScaledBvhTriangleMeshShape::btScaledBvhTriangleMeshShape(btBvhTriangleMeshShape* childShape, const btVector3& localScaling)
- : m_localScaling(localScaling), m_bvhTriMeshShape(childShape)
-{
- m_shapeType = SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE;
-}
-
-btScaledBvhTriangleMeshShape::~btScaledBvhTriangleMeshShape()
-{
-}
-
-class btScaledTriangleCallback : public btTriangleCallback
-{
- btTriangleCallback* m_originalCallback;
-
- btVector3 m_localScaling;
-
-public:
- btScaledTriangleCallback(btTriangleCallback* originalCallback, const btVector3& localScaling)
- : m_originalCallback(originalCallback),
- m_localScaling(localScaling)
- {
- }
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- btVector3 newTriangle[3];
- newTriangle[0] = triangle[0] * m_localScaling;
- newTriangle[1] = triangle[1] * m_localScaling;
- newTriangle[2] = triangle[2] * m_localScaling;
- m_originalCallback->processTriangle(&newTriangle[0], partId, triangleIndex);
- }
-};
-
-void btScaledBvhTriangleMeshShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- btScaledTriangleCallback scaledCallback(callback, m_localScaling);
-
- btVector3 invLocalScaling(1.f / m_localScaling.getX(), 1.f / m_localScaling.getY(), 1.f / m_localScaling.getZ());
- btVector3 scaledAabbMin, scaledAabbMax;
-
- ///support negative scaling
- scaledAabbMin[0] = m_localScaling.getX() >= 0. ? aabbMin[0] * invLocalScaling[0] : aabbMax[0] * invLocalScaling[0];
- scaledAabbMin[1] = m_localScaling.getY() >= 0. ? aabbMin[1] * invLocalScaling[1] : aabbMax[1] * invLocalScaling[1];
- scaledAabbMin[2] = m_localScaling.getZ() >= 0. ? aabbMin[2] * invLocalScaling[2] : aabbMax[2] * invLocalScaling[2];
- scaledAabbMin[3] = 0.f;
-
- scaledAabbMax[0] = m_localScaling.getX() <= 0. ? aabbMin[0] * invLocalScaling[0] : aabbMax[0] * invLocalScaling[0];
- scaledAabbMax[1] = m_localScaling.getY() <= 0. ? aabbMin[1] * invLocalScaling[1] : aabbMax[1] * invLocalScaling[1];
- scaledAabbMax[2] = m_localScaling.getZ() <= 0. ? aabbMin[2] * invLocalScaling[2] : aabbMax[2] * invLocalScaling[2];
- scaledAabbMax[3] = 0.f;
-
- m_bvhTriMeshShape->processAllTriangles(&scaledCallback, scaledAabbMin, scaledAabbMax);
-}
-
-void btScaledBvhTriangleMeshShape::getAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btVector3 localAabbMin = m_bvhTriMeshShape->getLocalAabbMin();
- btVector3 localAabbMax = m_bvhTriMeshShape->getLocalAabbMax();
-
- btVector3 tmpLocalAabbMin = localAabbMin * m_localScaling;
- btVector3 tmpLocalAabbMax = localAabbMax * m_localScaling;
-
- localAabbMin[0] = (m_localScaling.getX() >= 0.) ? tmpLocalAabbMin[0] : tmpLocalAabbMax[0];
- localAabbMin[1] = (m_localScaling.getY() >= 0.) ? tmpLocalAabbMin[1] : tmpLocalAabbMax[1];
- localAabbMin[2] = (m_localScaling.getZ() >= 0.) ? tmpLocalAabbMin[2] : tmpLocalAabbMax[2];
- localAabbMax[0] = (m_localScaling.getX() <= 0.) ? tmpLocalAabbMin[0] : tmpLocalAabbMax[0];
- localAabbMax[1] = (m_localScaling.getY() <= 0.) ? tmpLocalAabbMin[1] : tmpLocalAabbMax[1];
- localAabbMax[2] = (m_localScaling.getZ() <= 0.) ? tmpLocalAabbMin[2] : tmpLocalAabbMax[2];
-
- btVector3 localHalfExtents = btScalar(0.5) * (localAabbMax - localAabbMin);
- btScalar margin = m_bvhTriMeshShape->getMargin();
- localHalfExtents += btVector3(margin, margin, margin);
- btVector3 localCenter = btScalar(0.5) * (localAabbMax + localAabbMin);
-
- btMatrix3x3 abs_b = trans.getBasis().absolute();
-
- btVector3 center = trans(localCenter);
-
- btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMin = center - extent;
- aabbMax = center + extent;
-}
-
-void btScaledBvhTriangleMeshShape::setLocalScaling(const btVector3& scaling)
-{
- m_localScaling = scaling;
-}
-
-const btVector3& btScaledBvhTriangleMeshShape::getLocalScaling() const
-{
- return m_localScaling;
-}
-
-void btScaledBvhTriangleMeshShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- ///don't make this a movable object!
- // btAssert(0);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h
deleted file mode 100644
index 4d6feb61af..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h
+++ /dev/null
@@ -1,86 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SCALED_BVH_TRIANGLE_MESH_SHAPE_H
-#define BT_SCALED_BVH_TRIANGLE_MESH_SHAPE_H
-
-#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
-
-///The btScaledBvhTriangleMeshShape allows to instance a scaled version of an existing btBvhTriangleMeshShape.
-///Note that each btBvhTriangleMeshShape still can have its own local scaling, independent from this btScaledBvhTriangleMeshShape 'localScaling'
-ATTRIBUTE_ALIGNED16(class)
-btScaledBvhTriangleMeshShape : public btConcaveShape
-{
- btVector3 m_localScaling;
-
- btBvhTriangleMeshShape* m_bvhTriMeshShape;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btScaledBvhTriangleMeshShape(btBvhTriangleMeshShape * childShape, const btVector3& localScaling);
-
- virtual ~btScaledBvhTriangleMeshShape();
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- btBvhTriangleMeshShape* getChildShape()
- {
- return m_bvhTriMeshShape;
- }
-
- const btBvhTriangleMeshShape* getChildShape() const
- {
- return m_bvhTriMeshShape;
- }
-
- //debugging
- virtual const char* getName() const { return "SCALEDBVHTRIANGLEMESH"; }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btScaledTriangleMeshShapeData
-{
- btTriangleMeshShapeData m_trimeshShapeData;
-
- btVector3FloatData m_localScaling;
-};
-
-SIMD_FORCE_INLINE int btScaledBvhTriangleMeshShape::calculateSerializeBufferSize() const
-{
- return sizeof(btScaledTriangleMeshShapeData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btScaledBvhTriangleMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btScaledTriangleMeshShapeData* scaledMeshData = (btScaledTriangleMeshShapeData*)dataBuffer;
- m_bvhTriMeshShape->serialize(&scaledMeshData->m_trimeshShapeData, serializer);
- scaledMeshData->m_trimeshShapeData.m_collisionShapeData.m_shapeType = SCALED_TRIANGLE_MESH_SHAPE_PROXYTYPE;
- m_localScaling.serializeFloat(scaledMeshData->m_localScaling);
- return "btScaledTriangleMeshShapeData";
-}
-
-#endif //BT_SCALED_BVH_TRIANGLE_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.cpp
deleted file mode 100644
index 23c95ad3ff..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.cpp
+++ /dev/null
@@ -1,95 +0,0 @@
-#include "btSdfCollisionShape.h"
-#include "btMiniSDF.h"
-#include "LinearMath/btAabbUtil2.h"
-
-ATTRIBUTE_ALIGNED16(struct)
-btSdfCollisionShapeInternalData
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btVector3 m_localScaling;
- btScalar m_margin;
- btMiniSDF m_sdf;
-
- btSdfCollisionShapeInternalData()
- : m_localScaling(1, 1, 1),
- m_margin(0)
- {
- }
-};
-
-bool btSdfCollisionShape::initializeSDF(const char* sdfData, int sizeInBytes)
-{
- bool valid = m_data->m_sdf.load(sdfData, sizeInBytes);
- return valid;
-}
-btSdfCollisionShape::btSdfCollisionShape()
-{
- m_shapeType = SDF_SHAPE_PROXYTYPE;
- m_data = new btSdfCollisionShapeInternalData();
-
- //"E:/develop/bullet3/data/toys/ground_hole64_64_8.cdf");//ground_cube.cdf");
- /*unsigned int field_id=0;
- Eigen::Vector3d x (1,10,1);
- Eigen::Vector3d gradient;
- double dist = m_data->m_sdf.interpolate(field_id, x, &gradient);
- printf("dist=%g\n", dist);
- */
-}
-btSdfCollisionShape::~btSdfCollisionShape()
-{
- delete m_data;
-}
-
-void btSdfCollisionShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btAssert(m_data->m_sdf.isValid());
- btVector3 localAabbMin = m_data->m_sdf.m_domain.m_min;
- btVector3 localAabbMax = m_data->m_sdf.m_domain.m_max;
- btScalar margin(0);
- btTransformAabb(localAabbMin, localAabbMax, margin, t, aabbMin, aabbMax);
-}
-
-void btSdfCollisionShape::setLocalScaling(const btVector3& scaling)
-{
- m_data->m_localScaling = scaling;
-}
-const btVector3& btSdfCollisionShape::getLocalScaling() const
-{
- return m_data->m_localScaling;
-}
-void btSdfCollisionShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- inertia.setValue(0, 0, 0);
-}
-const char* btSdfCollisionShape::getName() const
-{
- return "btSdfCollisionShape";
-}
-void btSdfCollisionShape::setMargin(btScalar margin)
-{
- m_data->m_margin = margin;
-}
-btScalar btSdfCollisionShape::getMargin() const
-{
- return m_data->m_margin;
-}
-
-void btSdfCollisionShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- //not yet
-}
-
-bool btSdfCollisionShape::queryPoint(const btVector3& ptInSDF, btScalar& distOut, btVector3& normal)
-{
- int field = 0;
- btVector3 grad;
- double dist;
- bool hasResult = m_data->m_sdf.interpolate(field, dist, ptInSDF, &grad);
- if (hasResult)
- {
- normal.setValue(grad[0], grad[1], grad[2]);
- distOut = dist;
- }
- return hasResult;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.h
deleted file mode 100644
index 3989d6245e..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btSdfCollisionShape.h
+++ /dev/null
@@ -1,29 +0,0 @@
-#ifndef BT_SDF_COLLISION_SHAPE_H
-#define BT_SDF_COLLISION_SHAPE_H
-
-#include "btConcaveShape.h"
-
-class btSdfCollisionShape : public btConcaveShape
-{
- struct btSdfCollisionShapeInternalData* m_data;
-
-public:
- btSdfCollisionShape();
- virtual ~btSdfCollisionShape();
-
- bool initializeSDF(const char* sdfData, int sizeInBytes);
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
- virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
- virtual const char* getName() const;
- virtual void setMargin(btScalar margin);
- virtual btScalar getMargin() const;
-
- virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- bool queryPoint(const btVector3& ptInSDF, btScalar& distOut, btVector3& normal);
-};
-
-#endif //BT_SDF_COLLISION_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.cpp
deleted file mode 100644
index a2c490faf9..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.cpp
+++ /dev/null
@@ -1,421 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//btShapeHull was implemented by John McCutchan.
-
-#include "btShapeHull.h"
-#include "LinearMath/btConvexHull.h"
-
-#define NUM_UNITSPHERE_POINTS 42
-#define NUM_UNITSPHERE_POINTS_HIGHRES 256
-
-btShapeHull::btShapeHull(const btConvexShape* shape)
-{
- m_shape = shape;
- m_vertices.clear();
- m_indices.clear();
- m_numIndices = 0;
-}
-
-btShapeHull::~btShapeHull()
-{
- m_indices.clear();
- m_vertices.clear();
-}
-
-bool btShapeHull::buildHull(btScalar /*margin*/, int highres)
-{
-
- int numSampleDirections = highres ? NUM_UNITSPHERE_POINTS_HIGHRES : NUM_UNITSPHERE_POINTS;
- btVector3 supportPoints[NUM_UNITSPHERE_POINTS_HIGHRES + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2];
- int i;
- for (i = 0; i < numSampleDirections; i++)
- {
- supportPoints[i] = m_shape->localGetSupportingVertex(getUnitSpherePoints(highres)[i]);
- }
-
- int numPDA = m_shape->getNumPreferredPenetrationDirections();
- if (numPDA)
- {
- for (int s = 0; s < numPDA; s++)
- {
- btVector3 norm;
- m_shape->getPreferredPenetrationDirection(s, norm);
- supportPoints[i++] = m_shape->localGetSupportingVertex(norm);
- numSampleDirections++;
- }
- }
- HullDesc hd;
- hd.mFlags = QF_TRIANGLES;
- hd.mVcount = static_cast<unsigned int>(numSampleDirections);
-
-#ifdef BT_USE_DOUBLE_PRECISION
- hd.mVertices = &supportPoints[0];
- hd.mVertexStride = sizeof(btVector3);
-#else
- hd.mVertices = &supportPoints[0];
- hd.mVertexStride = sizeof(btVector3);
-#endif
-
- HullLibrary hl;
- HullResult hr;
- if (hl.CreateConvexHull(hd, hr) == QE_FAIL)
- {
- return false;
- }
-
- m_vertices.resize(static_cast<int>(hr.mNumOutputVertices));
-
- for (i = 0; i < static_cast<int>(hr.mNumOutputVertices); i++)
- {
- m_vertices[i] = hr.m_OutputVertices[i];
- }
- m_numIndices = hr.mNumIndices;
- m_indices.resize(static_cast<int>(m_numIndices));
- for (i = 0; i < static_cast<int>(m_numIndices); i++)
- {
- m_indices[i] = hr.m_Indices[i];
- }
-
- // free temporary hull result that we just copied
- hl.ReleaseResult(hr);
-
- return true;
-}
-
-int btShapeHull::numTriangles() const
-{
- return static_cast<int>(m_numIndices / 3);
-}
-
-int btShapeHull::numVertices() const
-{
- return m_vertices.size();
-}
-
-int btShapeHull::numIndices() const
-{
- return static_cast<int>(m_numIndices);
-}
-
-btVector3* btShapeHull::getUnitSpherePoints(int highres)
-{
- static btVector3 sUnitSpherePointsHighres[NUM_UNITSPHERE_POINTS_HIGHRES + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2] =
- {
- btVector3(btScalar(0.997604), btScalar(0.067004), btScalar(0.017144)),
- btVector3(btScalar(0.984139), btScalar(-0.086784), btScalar(-0.154427)),
- btVector3(btScalar(0.971065), btScalar(0.124164), btScalar(-0.203224)),
- btVector3(btScalar(0.955844), btScalar(0.291173), btScalar(-0.037704)),
- btVector3(btScalar(0.957405), btScalar(0.212238), btScalar(0.195157)),
- btVector3(btScalar(0.971650), btScalar(-0.012709), btScalar(0.235561)),
- btVector3(btScalar(0.984920), btScalar(-0.161831), btScalar(0.059695)),
- btVector3(btScalar(0.946673), btScalar(-0.299288), btScalar(-0.117536)),
- btVector3(btScalar(0.922670), btScalar(-0.219186), btScalar(-0.317019)),
- btVector3(btScalar(0.928134), btScalar(-0.007265), btScalar(-0.371867)),
- btVector3(btScalar(0.875642), btScalar(0.198434), btScalar(-0.439988)),
- btVector3(btScalar(0.908035), btScalar(0.325975), btScalar(-0.262562)),
- btVector3(btScalar(0.864519), btScalar(0.488706), btScalar(-0.116755)),
- btVector3(btScalar(0.893009), btScalar(0.428046), btScalar(0.137185)),
- btVector3(btScalar(0.857494), btScalar(0.362137), btScalar(0.364776)),
- btVector3(btScalar(0.900815), btScalar(0.132524), btScalar(0.412987)),
- btVector3(btScalar(0.934964), btScalar(-0.241739), btScalar(0.259179)),
- btVector3(btScalar(0.894570), btScalar(-0.103504), btScalar(0.434263)),
- btVector3(btScalar(0.922085), btScalar(-0.376668), btScalar(0.086241)),
- btVector3(btScalar(0.862177), btScalar(-0.499154), btScalar(-0.085330)),
- btVector3(btScalar(0.861982), btScalar(-0.420218), btScalar(-0.282861)),
- btVector3(btScalar(0.818076), btScalar(-0.328256), btScalar(-0.471804)),
- btVector3(btScalar(0.762657), btScalar(-0.179329), btScalar(-0.621124)),
- btVector3(btScalar(0.826857), btScalar(0.019760), btScalar(-0.561786)),
- btVector3(btScalar(0.731434), btScalar(0.206599), btScalar(-0.649817)),
- btVector3(btScalar(0.769486), btScalar(0.379052), btScalar(-0.513770)),
- btVector3(btScalar(0.796806), btScalar(0.507176), btScalar(-0.328145)),
- btVector3(btScalar(0.679722), btScalar(0.684101), btScalar(-0.264123)),
- btVector3(btScalar(0.786854), btScalar(0.614886), btScalar(0.050912)),
- btVector3(btScalar(0.769486), btScalar(0.571141), btScalar(0.285139)),
- btVector3(btScalar(0.707432), btScalar(0.492789), btScalar(0.506288)),
- btVector3(btScalar(0.774560), btScalar(0.268037), btScalar(0.572652)),
- btVector3(btScalar(0.796220), btScalar(0.031230), btScalar(0.604077)),
- btVector3(btScalar(0.837395), btScalar(-0.320285), btScalar(0.442461)),
- btVector3(btScalar(0.848127), btScalar(-0.450548), btScalar(0.278307)),
- btVector3(btScalar(0.775536), btScalar(-0.206354), btScalar(0.596465)),
- btVector3(btScalar(0.816320), btScalar(-0.567007), btScalar(0.109469)),
- btVector3(btScalar(0.741191), btScalar(-0.668690), btScalar(-0.056832)),
- btVector3(btScalar(0.755632), btScalar(-0.602975), btScalar(-0.254949)),
- btVector3(btScalar(0.720311), btScalar(-0.521318), btScalar(-0.457165)),
- btVector3(btScalar(0.670746), btScalar(-0.386583), btScalar(-0.632835)),
- btVector3(btScalar(0.587031), btScalar(-0.219769), btScalar(-0.778836)),
- btVector3(btScalar(0.676015), btScalar(-0.003182), btScalar(-0.736676)),
- btVector3(btScalar(0.566932), btScalar(0.186963), btScalar(-0.802064)),
- btVector3(btScalar(0.618254), btScalar(0.398105), btScalar(-0.677533)),
- btVector3(btScalar(0.653964), btScalar(0.575224), btScalar(-0.490933)),
- btVector3(btScalar(0.525367), btScalar(0.743205), btScalar(-0.414028)),
- btVector3(btScalar(0.506439), btScalar(0.836528), btScalar(-0.208885)),
- btVector3(btScalar(0.651427), btScalar(0.756426), btScalar(-0.056247)),
- btVector3(btScalar(0.641670), btScalar(0.745149), btScalar(0.180908)),
- btVector3(btScalar(0.602643), btScalar(0.687211), btScalar(0.405180)),
- btVector3(btScalar(0.516586), btScalar(0.596999), btScalar(0.613447)),
- btVector3(btScalar(0.602252), btScalar(0.387801), btScalar(0.697573)),
- btVector3(btScalar(0.646549), btScalar(0.153911), btScalar(0.746956)),
- btVector3(btScalar(0.650842), btScalar(-0.087756), btScalar(0.753983)),
- btVector3(btScalar(0.740411), btScalar(-0.497404), btScalar(0.451830)),
- btVector3(btScalar(0.726946), btScalar(-0.619890), btScalar(0.295093)),
- btVector3(btScalar(0.637768), btScalar(-0.313092), btScalar(0.703624)),
- btVector3(btScalar(0.678942), btScalar(-0.722934), btScalar(0.126645)),
- btVector3(btScalar(0.489072), btScalar(-0.867195), btScalar(-0.092942)),
- btVector3(btScalar(0.622742), btScalar(-0.757541), btScalar(-0.194636)),
- btVector3(btScalar(0.596788), btScalar(-0.693576), btScalar(-0.403098)),
- btVector3(btScalar(0.550150), btScalar(-0.582172), btScalar(-0.598287)),
- btVector3(btScalar(0.474436), btScalar(-0.429745), btScalar(-0.768101)),
- btVector3(btScalar(0.372574), btScalar(-0.246016), btScalar(-0.894583)),
- btVector3(btScalar(0.480095), btScalar(-0.026513), btScalar(-0.876626)),
- btVector3(btScalar(0.352474), btScalar(0.177242), btScalar(-0.918787)),
- btVector3(btScalar(0.441848), btScalar(0.374386), btScalar(-0.814946)),
- btVector3(btScalar(0.492389), btScalar(0.582223), btScalar(-0.646693)),
- btVector3(btScalar(0.343498), btScalar(0.866080), btScalar(-0.362693)),
- btVector3(btScalar(0.362036), btScalar(0.745149), btScalar(-0.559639)),
- btVector3(btScalar(0.334131), btScalar(0.937044), btScalar(-0.099774)),
- btVector3(btScalar(0.486925), btScalar(0.871718), btScalar(0.052473)),
- btVector3(btScalar(0.452776), btScalar(0.845665), btScalar(0.281820)),
- btVector3(btScalar(0.399503), btScalar(0.771785), btScalar(0.494576)),
- btVector3(btScalar(0.296469), btScalar(0.673018), btScalar(0.677469)),
- btVector3(btScalar(0.392088), btScalar(0.479179), btScalar(0.785213)),
- btVector3(btScalar(0.452190), btScalar(0.252094), btScalar(0.855286)),
- btVector3(btScalar(0.478339), btScalar(0.013149), btScalar(0.877928)),
- btVector3(btScalar(0.481656), btScalar(-0.219380), btScalar(0.848259)),
- btVector3(btScalar(0.615327), btScalar(-0.494293), btScalar(0.613837)),
- btVector3(btScalar(0.594642), btScalar(-0.650414), btScalar(0.472325)),
- btVector3(btScalar(0.562249), btScalar(-0.771345), btScalar(0.297631)),
- btVector3(btScalar(0.467411), btScalar(-0.437133), btScalar(0.768231)),
- btVector3(btScalar(0.519513), btScalar(-0.847947), btScalar(0.103808)),
- btVector3(btScalar(0.297640), btScalar(-0.938159), btScalar(-0.176288)),
- btVector3(btScalar(0.446727), btScalar(-0.838615), btScalar(-0.311359)),
- btVector3(btScalar(0.331790), btScalar(-0.942437), btScalar(0.040762)),
- btVector3(btScalar(0.413358), btScalar(-0.748403), btScalar(-0.518259)),
- btVector3(btScalar(0.347596), btScalar(-0.621640), btScalar(-0.701737)),
- btVector3(btScalar(0.249831), btScalar(-0.456186), btScalar(-0.853984)),
- btVector3(btScalar(0.131772), btScalar(-0.262931), btScalar(-0.955678)),
- btVector3(btScalar(0.247099), btScalar(-0.042261), btScalar(-0.967975)),
- btVector3(btScalar(0.113624), btScalar(0.165965), btScalar(-0.979491)),
- btVector3(btScalar(0.217438), btScalar(0.374580), btScalar(-0.901220)),
- btVector3(btScalar(0.307983), btScalar(0.554615), btScalar(-0.772786)),
- btVector3(btScalar(0.166702), btScalar(0.953181), btScalar(-0.252021)),
- btVector3(btScalar(0.172751), btScalar(0.844499), btScalar(-0.506743)),
- btVector3(btScalar(0.177630), btScalar(0.711125), btScalar(-0.679876)),
- btVector3(btScalar(0.120064), btScalar(0.992260), btScalar(-0.030482)),
- btVector3(btScalar(0.289640), btScalar(0.949098), btScalar(0.122546)),
- btVector3(btScalar(0.239879), btScalar(0.909047), btScalar(0.340377)),
- btVector3(btScalar(0.181142), btScalar(0.821363), btScalar(0.540641)),
- btVector3(btScalar(0.066986), btScalar(0.719097), btScalar(0.691327)),
- btVector3(btScalar(0.156750), btScalar(0.545478), btScalar(0.823079)),
- btVector3(btScalar(0.236172), btScalar(0.342306), btScalar(0.909353)),
- btVector3(btScalar(0.277541), btScalar(0.112693), btScalar(0.953856)),
- btVector3(btScalar(0.295299), btScalar(-0.121974), btScalar(0.947415)),
- btVector3(btScalar(0.287883), btScalar(-0.349254), btScalar(0.891591)),
- btVector3(btScalar(0.437165), btScalar(-0.634666), btScalar(0.636869)),
- btVector3(btScalar(0.407113), btScalar(-0.784954), btScalar(0.466664)),
- btVector3(btScalar(0.375111), btScalar(-0.888193), btScalar(0.264839)),
- btVector3(btScalar(0.275394), btScalar(-0.560591), btScalar(0.780723)),
- btVector3(btScalar(0.122015), btScalar(-0.992209), btScalar(-0.024821)),
- btVector3(btScalar(0.087866), btScalar(-0.966156), btScalar(-0.241676)),
- btVector3(btScalar(0.239489), btScalar(-0.885665), btScalar(-0.397437)),
- btVector3(btScalar(0.167287), btScalar(-0.965184), btScalar(0.200817)),
- btVector3(btScalar(0.201632), btScalar(-0.776789), btScalar(-0.596335)),
- btVector3(btScalar(0.122015), btScalar(-0.637971), btScalar(-0.760098)),
- btVector3(btScalar(0.008054), btScalar(-0.464741), btScalar(-0.885214)),
- btVector3(btScalar(-0.116054), btScalar(-0.271096), btScalar(-0.955482)),
- btVector3(btScalar(-0.000727), btScalar(-0.056065), btScalar(-0.998424)),
- btVector3(btScalar(-0.134007), btScalar(0.152939), btScalar(-0.978905)),
- btVector3(btScalar(-0.025900), btScalar(0.366026), btScalar(-0.930108)),
- btVector3(btScalar(0.081231), btScalar(0.557337), btScalar(-0.826072)),
- btVector3(btScalar(-0.002874), btScalar(0.917213), btScalar(-0.398023)),
- btVector3(btScalar(-0.050683), btScalar(0.981761), btScalar(-0.182534)),
- btVector3(btScalar(-0.040536), btScalar(0.710153), btScalar(-0.702713)),
- btVector3(btScalar(-0.139081), btScalar(0.827973), btScalar(-0.543048)),
- btVector3(btScalar(-0.101029), btScalar(0.994010), btScalar(0.041152)),
- btVector3(btScalar(0.069328), btScalar(0.978067), btScalar(0.196133)),
- btVector3(btScalar(0.023860), btScalar(0.911380), btScalar(0.410645)),
- btVector3(btScalar(-0.153521), btScalar(0.736789), btScalar(0.658145)),
- btVector3(btScalar(-0.070002), btScalar(0.591750), btScalar(0.802780)),
- btVector3(btScalar(0.002590), btScalar(0.312948), btScalar(0.949562)),
- btVector3(btScalar(0.090988), btScalar(-0.020680), btScalar(0.995627)),
- btVector3(btScalar(0.088842), btScalar(-0.250099), btScalar(0.964006)),
- btVector3(btScalar(0.083378), btScalar(-0.470185), btScalar(0.878318)),
- btVector3(btScalar(0.240074), btScalar(-0.749764), btScalar(0.616374)),
- btVector3(btScalar(0.210803), btScalar(-0.885860), btScalar(0.412987)),
- btVector3(btScalar(0.077524), btScalar(-0.660524), btScalar(0.746565)),
- btVector3(btScalar(-0.096736), btScalar(-0.990070), btScalar(-0.100945)),
- btVector3(btScalar(-0.052634), btScalar(-0.990264), btScalar(0.127426)),
- btVector3(btScalar(-0.106102), btScalar(-0.938354), btScalar(-0.328340)),
- btVector3(btScalar(0.013323), btScalar(-0.863112), btScalar(-0.504596)),
- btVector3(btScalar(-0.002093), btScalar(-0.936993), btScalar(0.349161)),
- btVector3(btScalar(-0.106297), btScalar(-0.636610), btScalar(-0.763612)),
- btVector3(btScalar(-0.229430), btScalar(-0.463769), btScalar(-0.855546)),
- btVector3(btScalar(-0.245236), btScalar(-0.066175), btScalar(-0.966999)),
- btVector3(btScalar(-0.351587), btScalar(-0.270513), btScalar(-0.896145)),
- btVector3(btScalar(-0.370906), btScalar(0.133108), btScalar(-0.918982)),
- btVector3(btScalar(-0.264360), btScalar(0.346000), btScalar(-0.900049)),
- btVector3(btScalar(-0.151375), btScalar(0.543728), btScalar(-0.825291)),
- btVector3(btScalar(-0.218697), btScalar(0.912741), btScalar(-0.344346)),
- btVector3(btScalar(-0.274507), btScalar(0.953764), btScalar(-0.121635)),
- btVector3(btScalar(-0.259677), btScalar(0.692266), btScalar(-0.673044)),
- btVector3(btScalar(-0.350416), btScalar(0.798810), btScalar(-0.488786)),
- btVector3(btScalar(-0.320170), btScalar(0.941127), btScalar(0.108297)),
- btVector3(btScalar(-0.147667), btScalar(0.952792), btScalar(0.265034)),
- btVector3(btScalar(-0.188061), btScalar(0.860636), btScalar(0.472910)),
- btVector3(btScalar(-0.370906), btScalar(0.739900), btScalar(0.560941)),
- btVector3(btScalar(-0.297143), btScalar(0.585334), btScalar(0.754178)),
- btVector3(btScalar(-0.189622), btScalar(0.428241), btScalar(0.883393)),
- btVector3(btScalar(-0.091272), btScalar(0.098695), btScalar(0.990747)),
- btVector3(btScalar(-0.256945), btScalar(0.228375), btScalar(0.938827)),
- btVector3(btScalar(-0.111761), btScalar(-0.133251), btScalar(0.984696)),
- btVector3(btScalar(-0.118006), btScalar(-0.356253), btScalar(0.926725)),
- btVector3(btScalar(-0.119372), btScalar(-0.563896), btScalar(0.817029)),
- btVector3(btScalar(0.041228), btScalar(-0.833949), btScalar(0.550010)),
- btVector3(btScalar(-0.121909), btScalar(-0.736543), btScalar(0.665172)),
- btVector3(btScalar(-0.307681), btScalar(-0.931160), btScalar(-0.195026)),
- btVector3(btScalar(-0.283679), btScalar(-0.957990), btScalar(0.041348)),
- btVector3(btScalar(-0.227284), btScalar(-0.935243), btScalar(0.270890)),
- btVector3(btScalar(-0.293436), btScalar(-0.858252), btScalar(-0.420860)),
- btVector3(btScalar(-0.175767), btScalar(-0.780677), btScalar(-0.599262)),
- btVector3(btScalar(-0.170108), btScalar(-0.858835), btScalar(0.482865)),
- btVector3(btScalar(-0.332854), btScalar(-0.635055), btScalar(-0.696857)),
- btVector3(btScalar(-0.447791), btScalar(-0.445299), btScalar(-0.775128)),
- btVector3(btScalar(-0.470622), btScalar(-0.074146), btScalar(-0.879164)),
- btVector3(btScalar(-0.639417), btScalar(-0.340505), btScalar(-0.689049)),
- btVector3(btScalar(-0.598438), btScalar(0.104722), btScalar(-0.794256)),
- btVector3(btScalar(-0.488575), btScalar(0.307699), btScalar(-0.816313)),
- btVector3(btScalar(-0.379882), btScalar(0.513592), btScalar(-0.769077)),
- btVector3(btScalar(-0.425740), btScalar(0.862775), btScalar(-0.272516)),
- btVector3(btScalar(-0.480769), btScalar(0.875412), btScalar(-0.048439)),
- btVector3(btScalar(-0.467890), btScalar(0.648716), btScalar(-0.600043)),
- btVector3(btScalar(-0.543799), btScalar(0.730956), btScalar(-0.411881)),
- btVector3(btScalar(-0.516284), btScalar(0.838277), btScalar(0.174076)),
- btVector3(btScalar(-0.353343), btScalar(0.876384), btScalar(0.326519)),
- btVector3(btScalar(-0.572875), btScalar(0.614497), btScalar(0.542007)),
- btVector3(btScalar(-0.503600), btScalar(0.497261), btScalar(0.706161)),
- btVector3(btScalar(-0.530920), btScalar(0.754870), btScalar(0.384685)),
- btVector3(btScalar(-0.395884), btScalar(0.366414), btScalar(0.841818)),
- btVector3(btScalar(-0.300656), btScalar(0.001678), btScalar(0.953661)),
- btVector3(btScalar(-0.461060), btScalar(0.146912), btScalar(0.875000)),
- btVector3(btScalar(-0.315486), btScalar(-0.232212), btScalar(0.919893)),
- btVector3(btScalar(-0.323682), btScalar(-0.449187), btScalar(0.832644)),
- btVector3(btScalar(-0.318999), btScalar(-0.639527), btScalar(0.699134)),
- btVector3(btScalar(-0.496771), btScalar(-0.866029), btScalar(-0.055271)),
- btVector3(btScalar(-0.496771), btScalar(-0.816257), btScalar(-0.294377)),
- btVector3(btScalar(-0.456377), btScalar(-0.869528), btScalar(0.188130)),
- btVector3(btScalar(-0.380858), btScalar(-0.827144), btScalar(0.412792)),
- btVector3(btScalar(-0.449352), btScalar(-0.727405), btScalar(-0.518259)),
- btVector3(btScalar(-0.570533), btScalar(-0.551064), btScalar(-0.608632)),
- btVector3(btScalar(-0.656394), btScalar(-0.118280), btScalar(-0.744874)),
- btVector3(btScalar(-0.756696), btScalar(-0.438105), btScalar(-0.484882)),
- btVector3(btScalar(-0.801773), btScalar(-0.204798), btScalar(-0.561005)),
- btVector3(btScalar(-0.785186), btScalar(0.038618), btScalar(-0.617805)),
- btVector3(btScalar(-0.709082), btScalar(0.262399), btScalar(-0.654306)),
- btVector3(btScalar(-0.583412), btScalar(0.462265), btScalar(-0.667383)),
- btVector3(btScalar(-0.616001), btScalar(0.761286), btScalar(-0.201272)),
- btVector3(btScalar(-0.660687), btScalar(0.750204), btScalar(0.020072)),
- btVector3(btScalar(-0.744987), btScalar(0.435823), btScalar(-0.504791)),
- btVector3(btScalar(-0.713765), btScalar(0.605554), btScalar(-0.351373)),
- btVector3(btScalar(-0.686251), btScalar(0.687600), btScalar(0.236927)),
- btVector3(btScalar(-0.680201), btScalar(0.429407), btScalar(0.593732)),
- btVector3(btScalar(-0.733474), btScalar(0.546450), btScalar(0.403814)),
- btVector3(btScalar(-0.591023), btScalar(0.292923), btScalar(0.751445)),
- btVector3(btScalar(-0.500283), btScalar(-0.080757), btScalar(0.861922)),
- btVector3(btScalar(-0.643710), btScalar(0.070115), btScalar(0.761985)),
- btVector3(btScalar(-0.506332), btScalar(-0.308425), btScalar(0.805122)),
- btVector3(btScalar(-0.503015), btScalar(-0.509847), btScalar(0.697573)),
- btVector3(btScalar(-0.482525), btScalar(-0.682105), btScalar(0.549229)),
- btVector3(btScalar(-0.680396), btScalar(-0.716323), btScalar(-0.153451)),
- btVector3(btScalar(-0.658346), btScalar(-0.746264), btScalar(0.097562)),
- btVector3(btScalar(-0.653272), btScalar(-0.646915), btScalar(-0.392948)),
- btVector3(btScalar(-0.590828), btScalar(-0.732655), btScalar(0.337645)),
- btVector3(btScalar(-0.819140), btScalar(-0.518013), btScalar(-0.246166)),
- btVector3(btScalar(-0.900513), btScalar(-0.282178), btScalar(-0.330487)),
- btVector3(btScalar(-0.914953), btScalar(-0.028652), btScalar(-0.402122)),
- btVector3(btScalar(-0.859924), btScalar(0.220209), btScalar(-0.459898)),
- btVector3(btScalar(-0.777185), btScalar(0.613720), btScalar(-0.137836)),
- btVector3(btScalar(-0.805285), btScalar(0.586889), btScalar(0.082728)),
- btVector3(btScalar(-0.872413), btScalar(0.406077), btScalar(-0.271735)),
- btVector3(btScalar(-0.859339), btScalar(0.448072), btScalar(0.246101)),
- btVector3(btScalar(-0.757671), btScalar(0.216320), btScalar(0.615594)),
- btVector3(btScalar(-0.826165), btScalar(0.348139), btScalar(0.442851)),
- btVector3(btScalar(-0.671810), btScalar(-0.162803), btScalar(0.722557)),
- btVector3(btScalar(-0.796504), btScalar(-0.004543), btScalar(0.604468)),
- btVector3(btScalar(-0.676298), btScalar(-0.378223), btScalar(0.631794)),
- btVector3(btScalar(-0.668883), btScalar(-0.558258), btScalar(0.490673)),
- btVector3(btScalar(-0.821287), btScalar(-0.570118), btScalar(0.006994)),
- btVector3(btScalar(-0.767428), btScalar(-0.587810), btScalar(0.255470)),
- btVector3(btScalar(-0.933296), btScalar(-0.349837), btScalar(-0.079865)),
- btVector3(btScalar(-0.982667), btScalar(-0.100393), btScalar(-0.155208)),
- btVector3(btScalar(-0.961396), btScalar(0.160910), btScalar(-0.222938)),
- btVector3(btScalar(-0.934858), btScalar(0.354555), btScalar(-0.006864)),
- btVector3(btScalar(-0.941687), btScalar(0.229736), btScalar(0.245711)),
- btVector3(btScalar(-0.884317), btScalar(0.131552), btScalar(0.447536)),
- btVector3(btScalar(-0.810359), btScalar(-0.219769), btScalar(0.542788)),
- btVector3(btScalar(-0.915929), btScalar(-0.210048), btScalar(0.341743)),
- btVector3(btScalar(-0.816799), btScalar(-0.407192), btScalar(0.408303)),
- btVector3(btScalar(-0.903050), btScalar(-0.392416), btScalar(0.174076)),
- btVector3(btScalar(-0.980325), btScalar(-0.170969), btScalar(0.096586)),
- btVector3(btScalar(-0.995936), btScalar(0.084891), btScalar(0.029441)),
- btVector3(btScalar(-0.960031), btScalar(0.002650), btScalar(0.279283)),
- };
- static btVector3 sUnitSpherePoints[NUM_UNITSPHERE_POINTS + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2] =
- {
- btVector3(btScalar(0.000000), btScalar(-0.000000), btScalar(-1.000000)),
- btVector3(btScalar(0.723608), btScalar(-0.525725), btScalar(-0.447219)),
- btVector3(btScalar(-0.276388), btScalar(-0.850649), btScalar(-0.447219)),
- btVector3(btScalar(-0.894426), btScalar(-0.000000), btScalar(-0.447216)),
- btVector3(btScalar(-0.276388), btScalar(0.850649), btScalar(-0.447220)),
- btVector3(btScalar(0.723608), btScalar(0.525725), btScalar(-0.447219)),
- btVector3(btScalar(0.276388), btScalar(-0.850649), btScalar(0.447220)),
- btVector3(btScalar(-0.723608), btScalar(-0.525725), btScalar(0.447219)),
- btVector3(btScalar(-0.723608), btScalar(0.525725), btScalar(0.447219)),
- btVector3(btScalar(0.276388), btScalar(0.850649), btScalar(0.447219)),
- btVector3(btScalar(0.894426), btScalar(0.000000), btScalar(0.447216)),
- btVector3(btScalar(-0.000000), btScalar(0.000000), btScalar(1.000000)),
- btVector3(btScalar(0.425323), btScalar(-0.309011), btScalar(-0.850654)),
- btVector3(btScalar(-0.162456), btScalar(-0.499995), btScalar(-0.850654)),
- btVector3(btScalar(0.262869), btScalar(-0.809012), btScalar(-0.525738)),
- btVector3(btScalar(0.425323), btScalar(0.309011), btScalar(-0.850654)),
- btVector3(btScalar(0.850648), btScalar(-0.000000), btScalar(-0.525736)),
- btVector3(btScalar(-0.525730), btScalar(-0.000000), btScalar(-0.850652)),
- btVector3(btScalar(-0.688190), btScalar(-0.499997), btScalar(-0.525736)),
- btVector3(btScalar(-0.162456), btScalar(0.499995), btScalar(-0.850654)),
- btVector3(btScalar(-0.688190), btScalar(0.499997), btScalar(-0.525736)),
- btVector3(btScalar(0.262869), btScalar(0.809012), btScalar(-0.525738)),
- btVector3(btScalar(0.951058), btScalar(0.309013), btScalar(0.000000)),
- btVector3(btScalar(0.951058), btScalar(-0.309013), btScalar(0.000000)),
- btVector3(btScalar(0.587786), btScalar(-0.809017), btScalar(0.000000)),
- btVector3(btScalar(0.000000), btScalar(-1.000000), btScalar(0.000000)),
- btVector3(btScalar(-0.587786), btScalar(-0.809017), btScalar(0.000000)),
- btVector3(btScalar(-0.951058), btScalar(-0.309013), btScalar(-0.000000)),
- btVector3(btScalar(-0.951058), btScalar(0.309013), btScalar(-0.000000)),
- btVector3(btScalar(-0.587786), btScalar(0.809017), btScalar(-0.000000)),
- btVector3(btScalar(-0.000000), btScalar(1.000000), btScalar(-0.000000)),
- btVector3(btScalar(0.587786), btScalar(0.809017), btScalar(-0.000000)),
- btVector3(btScalar(0.688190), btScalar(-0.499997), btScalar(0.525736)),
- btVector3(btScalar(-0.262869), btScalar(-0.809012), btScalar(0.525738)),
- btVector3(btScalar(-0.850648), btScalar(0.000000), btScalar(0.525736)),
- btVector3(btScalar(-0.262869), btScalar(0.809012), btScalar(0.525738)),
- btVector3(btScalar(0.688190), btScalar(0.499997), btScalar(0.525736)),
- btVector3(btScalar(0.525730), btScalar(0.000000), btScalar(0.850652)),
- btVector3(btScalar(0.162456), btScalar(-0.499995), btScalar(0.850654)),
- btVector3(btScalar(-0.425323), btScalar(-0.309011), btScalar(0.850654)),
- btVector3(btScalar(-0.425323), btScalar(0.309011), btScalar(0.850654)),
- btVector3(btScalar(0.162456), btScalar(0.499995), btScalar(0.850654))};
- if (highres)
- return sUnitSpherePointsHighres;
- return sUnitSpherePoints;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.h
deleted file mode 100644
index 54439f9ca2..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btShapeHull.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///btShapeHull implemented by John McCutchan.
-
-#ifndef BT_SHAPE_HULL_H
-#define BT_SHAPE_HULL_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-
-///The btShapeHull class takes a btConvexShape, builds a simplified convex hull using btConvexHull and provides triangle indices and vertices.
-///It can be useful for to simplify a complex convex object and for visualization of a non-polyhedral convex object.
-///It approximates the convex hull using the supporting vertex of 42 directions.
-ATTRIBUTE_ALIGNED16(class)
-btShapeHull
-{
-protected:
- btAlignedObjectArray<btVector3> m_vertices;
- btAlignedObjectArray<unsigned int> m_indices;
- unsigned int m_numIndices;
- const btConvexShape* m_shape;
-
- static btVector3* getUnitSpherePoints(int highres = 0);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btShapeHull(const btConvexShape* shape);
- ~btShapeHull();
-
- bool buildHull(btScalar margin, int highres = 0);
-
- int numTriangles() const;
- int numVertices() const;
- int numIndices() const;
-
- const btVector3* getVertexPointer() const
- {
- return &m_vertices[0];
- }
- const unsigned int* getIndexPointer() const
- {
- return &m_indices[0];
- }
-};
-
-#endif //BT_SHAPE_HULL_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.cpp
deleted file mode 100644
index 027db2e104..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.cpp
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSphereShape.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-#include "LinearMath/btQuaternion.h"
-
-btVector3 btSphereShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- (void)vec;
- return btVector3(btScalar(0.), btScalar(0.), btScalar(0.));
-}
-
-void btSphereShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- (void)vectors;
-
- for (int i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i].setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- }
-}
-
-btVector3 btSphereShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 supVertex;
- supVertex = localGetSupportingVertexWithoutMargin(vec);
-
- btVector3 vecnorm = vec;
- if (vecnorm.length2() < (SIMD_EPSILON * SIMD_EPSILON))
- {
- vecnorm.setValue(btScalar(-1.), btScalar(-1.), btScalar(-1.));
- }
- vecnorm.normalize();
- supVertex += getMargin() * vecnorm;
- return supVertex;
-}
-
-//broken due to scaling
-void btSphereShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- const btVector3& center = t.getOrigin();
- btVector3 extent(getMargin(), getMargin(), getMargin());
- aabbMin = center - extent;
- aabbMax = center + extent;
-}
-
-void btSphereShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- btScalar elem = btScalar(0.4) * mass * getMargin() * getMargin();
- inertia.setValue(elem, elem, elem);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.h
deleted file mode 100644
index 75e4fd8e18..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btSphereShape.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#ifndef BT_SPHERE_MINKOWSKI_H
-#define BT_SPHERE_MINKOWSKI_H
-
-#include "btConvexInternalShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-///The btSphereShape implements an implicit sphere, centered around a local origin with radius.
-ATTRIBUTE_ALIGNED16(class)
-btSphereShape : public btConvexInternalShape
-
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btSphereShape(btScalar radius) : btConvexInternalShape()
- {
- m_shapeType = SPHERE_SHAPE_PROXYTYPE;
- m_localScaling.setValue(1.0, 1.0, 1.0);
- m_implicitShapeDimensions.setZero();
- m_implicitShapeDimensions.setX(radius);
- m_collisionMargin = radius;
- m_padding = 0;
- }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
- //notice that the vectors should be unit length
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- btScalar getRadius() const { return m_implicitShapeDimensions.getX() * m_localScaling.getX(); }
-
- void setUnscaledRadius(btScalar radius)
- {
- m_implicitShapeDimensions.setX(radius);
- btConvexInternalShape::setMargin(radius);
- }
-
- //debugging
- virtual const char* getName() const { return "SPHERE"; }
-
- virtual void setMargin(btScalar margin)
- {
- btConvexInternalShape::setMargin(margin);
- }
- virtual btScalar getMargin() const
- {
- //to improve gjk behaviour, use radius+margin as the full margin, so never get into the penetration case
- //this means, non-uniform scaling is not supported anymore
- return getRadius();
- }
-};
-
-#endif //BT_SPHERE_MINKOWSKI_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp
deleted file mode 100644
index 9238c919d5..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.cpp
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btStaticPlaneShape.h"
-
-#include "LinearMath/btTransformUtil.h"
-
-btStaticPlaneShape::btStaticPlaneShape(const btVector3& planeNormal, btScalar planeConstant)
- : btConcaveShape(), m_planeNormal(planeNormal.normalized()), m_planeConstant(planeConstant), m_localScaling(btScalar(1.), btScalar(1.), btScalar(1.))
-{
- m_shapeType = STATIC_PLANE_PROXYTYPE;
- // btAssert( btFuzzyZero(m_planeNormal.length() - btScalar(1.)) );
-}
-
-btStaticPlaneShape::~btStaticPlaneShape()
-{
-}
-
-void btStaticPlaneShape::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
- (void)t;
- /*
- btVector3 infvec (btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT),btScalar(BT_LARGE_FLOAT));
-
- btVector3 center = m_planeNormal*m_planeConstant;
- aabbMin = center + infvec*m_planeNormal;
- aabbMax = aabbMin;
- aabbMin.setMin(center - infvec*m_planeNormal);
- aabbMax.setMax(center - infvec*m_planeNormal);
- */
-
- aabbMin.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
-}
-
-void btStaticPlaneShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- btVector3 halfExtents = (aabbMax - aabbMin) * btScalar(0.5);
- btScalar radius = halfExtents.length();
- btVector3 center = (aabbMax + aabbMin) * btScalar(0.5);
-
- //this is where the triangles are generated, given AABB and plane equation (normal/constant)
-
- btVector3 tangentDir0, tangentDir1;
-
- //tangentDir0/tangentDir1 can be precalculated
- btPlaneSpace1(m_planeNormal, tangentDir0, tangentDir1);
-
- btVector3 projectedCenter = center - (m_planeNormal.dot(center) - m_planeConstant) * m_planeNormal;
-
- btVector3 triangle[3];
- triangle[0] = projectedCenter + tangentDir0 * radius + tangentDir1 * radius;
- triangle[1] = projectedCenter + tangentDir0 * radius - tangentDir1 * radius;
- triangle[2] = projectedCenter - tangentDir0 * radius - tangentDir1 * radius;
-
- callback->processTriangle(triangle, 0, 0);
-
- triangle[0] = projectedCenter - tangentDir0 * radius - tangentDir1 * radius;
- triangle[1] = projectedCenter - tangentDir0 * radius + tangentDir1 * radius;
- triangle[2] = projectedCenter + tangentDir0 * radius + tangentDir1 * radius;
-
- callback->processTriangle(triangle, 0, 1);
-}
-
-void btStaticPlaneShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- (void)mass;
-
- //moving concave objects not supported
-
- inertia.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
-}
-
-void btStaticPlaneShape::setLocalScaling(const btVector3& scaling)
-{
- m_localScaling = scaling;
-}
-const btVector3& btStaticPlaneShape::getLocalScaling() const
-{
- return m_localScaling;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h
deleted file mode 100644
index 1cda8bbc75..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btStaticPlaneShape.h
+++ /dev/null
@@ -1,103 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_STATIC_PLANE_SHAPE_H
-#define BT_STATIC_PLANE_SHAPE_H
-
-#include "btConcaveShape.h"
-
-///The btStaticPlaneShape simulates an infinite non-moving (static) collision plane.
-ATTRIBUTE_ALIGNED16(class)
-btStaticPlaneShape : public btConcaveShape
-{
-protected:
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
-
- btVector3 m_planeNormal;
- btScalar m_planeConstant;
- btVector3 m_localScaling;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btStaticPlaneShape(const btVector3& planeNormal, btScalar planeConstant);
-
- virtual ~btStaticPlaneShape();
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
-
- const btVector3& getPlaneNormal() const
- {
- return m_planeNormal;
- }
-
- const btScalar& getPlaneConstant() const
- {
- return m_planeConstant;
- }
-
- //debugging
- virtual const char* getName() const { return "STATICPLANE"; }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btStaticPlaneShapeData
-{
- btCollisionShapeData m_collisionShapeData;
-
- btVector3FloatData m_localScaling;
- btVector3FloatData m_planeNormal;
- float m_planeConstant;
- char m_pad[4];
-};
-
-SIMD_FORCE_INLINE int btStaticPlaneShape::calculateSerializeBufferSize() const
-{
- return sizeof(btStaticPlaneShapeData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btStaticPlaneShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btStaticPlaneShapeData* planeData = (btStaticPlaneShapeData*)dataBuffer;
- btCollisionShape::serialize(&planeData->m_collisionShapeData, serializer);
-
- m_localScaling.serializeFloat(planeData->m_localScaling);
- m_planeNormal.serializeFloat(planeData->m_planeNormal);
- planeData->m_planeConstant = float(m_planeConstant);
-
- // Fill padding with zeros to appease msan.
- planeData->m_pad[0] = 0;
- planeData->m_pad[1] = 0;
- planeData->m_pad[2] = 0;
- planeData->m_pad[3] = 0;
-
- return "btStaticPlaneShapeData";
-}
-
-#endif //BT_STATIC_PLANE_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp
deleted file mode 100644
index eb288e99c9..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.cpp
+++ /dev/null
@@ -1,380 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btStridingMeshInterface.h"
-#include "LinearMath/btSerializer.h"
-
-btStridingMeshInterface::~btStridingMeshInterface()
-{
-}
-
-void btStridingMeshInterface::InternalProcessAllTriangles(btInternalTriangleIndexCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- (void)aabbMin;
- (void)aabbMax;
- int numtotalphysicsverts = 0;
- int part, graphicssubparts = getNumSubParts();
- const unsigned char* vertexbase;
- const unsigned char* indexbase;
- int indexstride;
- PHY_ScalarType type;
- PHY_ScalarType gfxindextype;
- int stride, numverts, numtriangles;
- int gfxindex;
- btVector3 triangle[3];
-
- btVector3 meshScaling = getScaling();
-
- ///if the number of parts is big, the performance might drop due to the innerloop switch on indextype
- for (part = 0; part < graphicssubparts; part++)
- {
- getLockedReadOnlyVertexIndexBase(&vertexbase, numverts, type, stride, &indexbase, indexstride, numtriangles, gfxindextype, part);
- numtotalphysicsverts += numtriangles * 3; //upper bound
-
- ///unlike that developers want to pass in double-precision meshes in single-precision Bullet build
- ///so disable this feature by default
- ///see patch http://code.google.com/p/bullet/issues/detail?id=213
-
- switch (type)
- {
- case PHY_FLOAT:
- {
- float* graphicsbase;
-
- switch (gfxindextype)
- {
- case PHY_INTEGER:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned int* tri_indices = (unsigned int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (float*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_SHORT:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned short int* tri_indices = (unsigned short int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (float*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_UCHAR:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned char* tri_indices = (unsigned char*)(indexbase + gfxindex * indexstride);
- graphicsbase = (float*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (float*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue(graphicsbase[0] * meshScaling.getX(), graphicsbase[1] * meshScaling.getY(), graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- default:
- btAssert((gfxindextype == PHY_INTEGER) || (gfxindextype == PHY_SHORT));
- }
- break;
- }
-
- case PHY_DOUBLE:
- {
- double* graphicsbase;
-
- switch (gfxindextype)
- {
- case PHY_INTEGER:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned int* tri_indices = (unsigned int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (double*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_SHORT:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned short int* tri_indices = (unsigned short int*)(indexbase + gfxindex * indexstride);
- graphicsbase = (double*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- case PHY_UCHAR:
- {
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned char* tri_indices = (unsigned char*)(indexbase + gfxindex * indexstride);
- graphicsbase = (double*)(vertexbase + tri_indices[0] * stride);
- triangle[0].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[1] * stride);
- triangle[1].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- graphicsbase = (double*)(vertexbase + tri_indices[2] * stride);
- triangle[2].setValue((btScalar)graphicsbase[0] * meshScaling.getX(), (btScalar)graphicsbase[1] * meshScaling.getY(), (btScalar)graphicsbase[2] * meshScaling.getZ());
- callback->internalProcessTriangleIndex(triangle, part, gfxindex);
- }
- break;
- }
- default:
- btAssert((gfxindextype == PHY_INTEGER) || (gfxindextype == PHY_SHORT));
- }
- break;
- }
- default:
- btAssert((type == PHY_FLOAT) || (type == PHY_DOUBLE));
- }
-
- unLockReadOnlyVertexBase(part);
- }
-}
-
-void btStridingMeshInterface::calculateAabbBruteForce(btVector3& aabbMin, btVector3& aabbMax)
-{
- struct AabbCalculationCallback : public btInternalTriangleIndexCallback
- {
- btVector3 m_aabbMin;
- btVector3 m_aabbMax;
-
- AabbCalculationCallback()
- {
- m_aabbMin.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_aabbMax.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)partId;
- (void)triangleIndex;
-
- m_aabbMin.setMin(triangle[0]);
- m_aabbMax.setMax(triangle[0]);
- m_aabbMin.setMin(triangle[1]);
- m_aabbMax.setMax(triangle[1]);
- m_aabbMin.setMin(triangle[2]);
- m_aabbMax.setMax(triangle[2]);
- }
- };
-
- //first calculate the total aabb for all triangles
- AabbCalculationCallback aabbCallback;
- aabbMin.setValue(btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT), btScalar(-BT_LARGE_FLOAT));
- aabbMax.setValue(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- InternalProcessAllTriangles(&aabbCallback, aabbMin, aabbMax);
-
- aabbMin = aabbCallback.m_aabbMin;
- aabbMax = aabbCallback.m_aabbMax;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btStridingMeshInterface::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btStridingMeshInterfaceData* trimeshData = (btStridingMeshInterfaceData*)dataBuffer;
-
- trimeshData->m_numMeshParts = getNumSubParts();
-
- //void* uniquePtr = 0;
-
- trimeshData->m_meshPartsPtr = 0;
-
- if (trimeshData->m_numMeshParts)
- {
- btChunk* chunk = serializer->allocate(sizeof(btMeshPartData), trimeshData->m_numMeshParts);
- btMeshPartData* memPtr = (btMeshPartData*)chunk->m_oldPtr;
- trimeshData->m_meshPartsPtr = (btMeshPartData*)serializer->getUniquePointer(memPtr);
-
- // int numtotalphysicsverts = 0;
- int part, graphicssubparts = getNumSubParts();
- const unsigned char* vertexbase;
- const unsigned char* indexbase;
- int indexstride;
- PHY_ScalarType type;
- PHY_ScalarType gfxindextype;
- int stride, numverts, numtriangles;
- int gfxindex;
- // btVector3 triangle[3];
-
- // btVector3 meshScaling = getScaling();
-
- ///if the number of parts is big, the performance might drop due to the innerloop switch on indextype
- for (part = 0; part < graphicssubparts; part++, memPtr++)
- {
- getLockedReadOnlyVertexIndexBase(&vertexbase, numverts, type, stride, &indexbase, indexstride, numtriangles, gfxindextype, part);
- memPtr->m_numTriangles = numtriangles; //indices = 3*numtriangles
- memPtr->m_numVertices = numverts;
- memPtr->m_indices16 = 0;
- memPtr->m_indices32 = 0;
- memPtr->m_3indices16 = 0;
- memPtr->m_3indices8 = 0;
- memPtr->m_vertices3f = 0;
- memPtr->m_vertices3d = 0;
-
- switch (gfxindextype)
- {
- case PHY_INTEGER:
- {
- int numindices = numtriangles * 3;
-
- if (numindices)
- {
- btChunk* chunk = serializer->allocate(sizeof(btIntIndexData), numindices);
- btIntIndexData* tmpIndices = (btIntIndexData*)chunk->m_oldPtr;
- memPtr->m_indices32 = (btIntIndexData*)serializer->getUniquePointer(tmpIndices);
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned int* tri_indices = (unsigned int*)(indexbase + gfxindex * indexstride);
- tmpIndices[gfxindex * 3].m_value = tri_indices[0];
- tmpIndices[gfxindex * 3 + 1].m_value = tri_indices[1];
- tmpIndices[gfxindex * 3 + 2].m_value = tri_indices[2];
- }
- serializer->finalizeChunk(chunk, "btIntIndexData", BT_ARRAY_CODE, (void*)chunk->m_oldPtr);
- }
- break;
- }
- case PHY_SHORT:
- {
- if (numtriangles)
- {
- btChunk* chunk = serializer->allocate(sizeof(btShortIntIndexTripletData), numtriangles);
- btShortIntIndexTripletData* tmpIndices = (btShortIntIndexTripletData*)chunk->m_oldPtr;
- memPtr->m_3indices16 = (btShortIntIndexTripletData*)serializer->getUniquePointer(tmpIndices);
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned short int* tri_indices = (unsigned short int*)(indexbase + gfxindex * indexstride);
- tmpIndices[gfxindex].m_values[0] = tri_indices[0];
- tmpIndices[gfxindex].m_values[1] = tri_indices[1];
- tmpIndices[gfxindex].m_values[2] = tri_indices[2];
- // Fill padding with zeros to appease msan.
- tmpIndices[gfxindex].m_pad[0] = 0;
- tmpIndices[gfxindex].m_pad[1] = 0;
- }
- serializer->finalizeChunk(chunk, "btShortIntIndexTripletData", BT_ARRAY_CODE, (void*)chunk->m_oldPtr);
- }
- break;
- }
- case PHY_UCHAR:
- {
- if (numtriangles)
- {
- btChunk* chunk = serializer->allocate(sizeof(btCharIndexTripletData), numtriangles);
- btCharIndexTripletData* tmpIndices = (btCharIndexTripletData*)chunk->m_oldPtr;
- memPtr->m_3indices8 = (btCharIndexTripletData*)serializer->getUniquePointer(tmpIndices);
- for (gfxindex = 0; gfxindex < numtriangles; gfxindex++)
- {
- unsigned char* tri_indices = (unsigned char*)(indexbase + gfxindex * indexstride);
- tmpIndices[gfxindex].m_values[0] = tri_indices[0];
- tmpIndices[gfxindex].m_values[1] = tri_indices[1];
- tmpIndices[gfxindex].m_values[2] = tri_indices[2];
- // Fill padding with zeros to appease msan.
- tmpIndices[gfxindex].m_pad = 0;
- }
- serializer->finalizeChunk(chunk, "btCharIndexTripletData", BT_ARRAY_CODE, (void*)chunk->m_oldPtr);
- }
- break;
- }
- default:
- {
- btAssert(0);
- //unknown index type
- }
- }
-
- switch (type)
- {
- case PHY_FLOAT:
- {
- float* graphicsbase;
-
- if (numverts)
- {
- btChunk* chunk = serializer->allocate(sizeof(btVector3FloatData), numverts);
- btVector3FloatData* tmpVertices = (btVector3FloatData*)chunk->m_oldPtr;
- memPtr->m_vertices3f = (btVector3FloatData*)serializer->getUniquePointer(tmpVertices);
- for (int i = 0; i < numverts; i++)
- {
- graphicsbase = (float*)(vertexbase + i * stride);
- tmpVertices[i].m_floats[0] = graphicsbase[0];
- tmpVertices[i].m_floats[1] = graphicsbase[1];
- tmpVertices[i].m_floats[2] = graphicsbase[2];
- }
- serializer->finalizeChunk(chunk, "btVector3FloatData", BT_ARRAY_CODE, (void*)chunk->m_oldPtr);
- }
- break;
- }
-
- case PHY_DOUBLE:
- {
- if (numverts)
- {
- btChunk* chunk = serializer->allocate(sizeof(btVector3DoubleData), numverts);
- btVector3DoubleData* tmpVertices = (btVector3DoubleData*)chunk->m_oldPtr;
- memPtr->m_vertices3d = (btVector3DoubleData*)serializer->getUniquePointer(tmpVertices);
- for (int i = 0; i < numverts; i++)
- {
- double* graphicsbase = (double*)(vertexbase + i * stride); //for now convert to float, might leave it at double
- tmpVertices[i].m_floats[0] = graphicsbase[0];
- tmpVertices[i].m_floats[1] = graphicsbase[1];
- tmpVertices[i].m_floats[2] = graphicsbase[2];
- }
- serializer->finalizeChunk(chunk, "btVector3DoubleData", BT_ARRAY_CODE, (void*)chunk->m_oldPtr);
- }
- break;
- }
-
- default:
- btAssert((type == PHY_FLOAT) || (type == PHY_DOUBLE));
- }
-
- unLockReadOnlyVertexBase(part);
- }
-
- serializer->finalizeChunk(chunk, "btMeshPartData", BT_ARRAY_CODE, chunk->m_oldPtr);
- }
-
- // Fill padding with zeros to appease msan.
- memset(trimeshData->m_padding, 0, sizeof(trimeshData->m_padding));
-
- m_scaling.serializeFloat(trimeshData->m_scaling);
- return "btStridingMeshInterfaceData";
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h
deleted file mode 100644
index 68a41dfb45..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btStridingMeshInterface.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_STRIDING_MESHINTERFACE_H
-#define BT_STRIDING_MESHINTERFACE_H
-
-#include "LinearMath/btVector3.h"
-#include "btTriangleCallback.h"
-#include "btConcaveShape.h"
-
-/// The btStridingMeshInterface is the interface class for high performance generic access to triangle meshes, used in combination with btBvhTriangleMeshShape and some other collision shapes.
-/// Using index striding of 3*sizeof(integer) it can use triangle arrays, using index striding of 1*sizeof(integer) it can handle triangle strips.
-/// It allows for sharing graphics and collision meshes. Also it provides locking/unlocking of graphics meshes that are in gpu memory.
-ATTRIBUTE_ALIGNED16(class)
-btStridingMeshInterface
-{
-protected:
- btVector3 m_scaling;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btStridingMeshInterface() : m_scaling(btScalar(1.), btScalar(1.), btScalar(1.))
- {
- }
-
- virtual ~btStridingMeshInterface();
-
- virtual void InternalProcessAllTriangles(btInternalTriangleIndexCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- ///brute force method to calculate aabb
- void calculateAabbBruteForce(btVector3 & aabbMin, btVector3 & aabbMax);
-
- /// get read and write access to a subpart of a triangle mesh
- /// this subpart has a continuous array of vertices and indices
- /// in this way the mesh can be handled as chunks of memory with striding
- /// very similar to OpenGL vertexarray support
- /// make a call to unLockVertexBase when the read and write access is finished
- virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) = 0;
-
- virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& stride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const = 0;
-
- /// unLockVertexBase finishes the access to a subpart of the triangle mesh
- /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished
- virtual void unLockVertexBase(int subpart) = 0;
-
- virtual void unLockReadOnlyVertexBase(int subpart) const = 0;
-
- /// getNumSubParts returns the number of separate subparts
- /// each subpart has a continuous array of vertices and indices
- virtual int getNumSubParts() const = 0;
-
- virtual void preallocateVertices(int numverts) = 0;
- virtual void preallocateIndices(int numindices) = 0;
-
- virtual bool hasPremadeAabb() const { return false; }
- virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax) const
- {
- (void)aabbMin;
- (void)aabbMax;
- }
- virtual void getPremadeAabb(btVector3 * aabbMin, btVector3 * aabbMax) const
- {
- (void)aabbMin;
- (void)aabbMax;
- }
-
- const btVector3& getScaling() const
- {
- return m_scaling;
- }
- void setScaling(const btVector3& scaling)
- {
- m_scaling = scaling;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-struct btIntIndexData
-{
- int m_value;
-};
-
-struct btShortIntIndexData
-{
- short m_value;
- char m_pad[2];
-};
-
-struct btShortIntIndexTripletData
-{
- short m_values[3];
- char m_pad[2];
-};
-
-struct btCharIndexTripletData
-{
- unsigned char m_values[3];
- char m_pad;
-};
-
-// clang-format off
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btMeshPartData
-{
- btVector3FloatData *m_vertices3f;
- btVector3DoubleData *m_vertices3d;
-
- btIntIndexData *m_indices32;
- btShortIntIndexTripletData *m_3indices16;
- btCharIndexTripletData *m_3indices8;
-
- btShortIntIndexData *m_indices16;//backwards compatibility
-
- int m_numTriangles;//length of m_indices = m_numTriangles
- int m_numVertices;
-};
-
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btStridingMeshInterfaceData
-{
- btMeshPartData *m_meshPartsPtr;
- btVector3FloatData m_scaling;
- int m_numMeshParts;
- char m_padding[4];
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btStridingMeshInterface::calculateSerializeBufferSize() const
-{
- return sizeof(btStridingMeshInterfaceData);
-}
-
-#endif //BT_STRIDING_MESHINTERFACE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.cpp
deleted file mode 100644
index c4d33c429f..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTetrahedronShape.h"
-#include "LinearMath/btMatrix3x3.h"
-
-btBU_Simplex1to4::btBU_Simplex1to4() : btPolyhedralConvexAabbCachingShape(),
- m_numVertices(0)
-{
- m_shapeType = TETRAHEDRAL_SHAPE_PROXYTYPE;
-}
-
-btBU_Simplex1to4::btBU_Simplex1to4(const btVector3& pt0) : btPolyhedralConvexAabbCachingShape(),
- m_numVertices(0)
-{
- m_shapeType = TETRAHEDRAL_SHAPE_PROXYTYPE;
- addVertex(pt0);
-}
-
-btBU_Simplex1to4::btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1) : btPolyhedralConvexAabbCachingShape(),
- m_numVertices(0)
-{
- m_shapeType = TETRAHEDRAL_SHAPE_PROXYTYPE;
- addVertex(pt0);
- addVertex(pt1);
-}
-
-btBU_Simplex1to4::btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1, const btVector3& pt2) : btPolyhedralConvexAabbCachingShape(),
- m_numVertices(0)
-{
- m_shapeType = TETRAHEDRAL_SHAPE_PROXYTYPE;
- addVertex(pt0);
- addVertex(pt1);
- addVertex(pt2);
-}
-
-btBU_Simplex1to4::btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1, const btVector3& pt2, const btVector3& pt3) : btPolyhedralConvexAabbCachingShape(),
- m_numVertices(0)
-{
- m_shapeType = TETRAHEDRAL_SHAPE_PROXYTYPE;
- addVertex(pt0);
- addVertex(pt1);
- addVertex(pt2);
- addVertex(pt3);
-}
-
-void btBU_Simplex1to4::getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
-#if 1
- btPolyhedralConvexAabbCachingShape::getAabb(t, aabbMin, aabbMax);
-#else
- aabbMin.setValue(BT_LARGE_FLOAT, BT_LARGE_FLOAT, BT_LARGE_FLOAT);
- aabbMax.setValue(-BT_LARGE_FLOAT, -BT_LARGE_FLOAT, -BT_LARGE_FLOAT);
-
- //just transform the vertices in worldspace, and take their AABB
- for (int i = 0; i < m_numVertices; i++)
- {
- btVector3 worldVertex = t(m_vertices[i]);
- aabbMin.setMin(worldVertex);
- aabbMax.setMax(worldVertex);
- }
-#endif
-}
-
-void btBU_Simplex1to4::addVertex(const btVector3& pt)
-{
- m_vertices[m_numVertices++] = pt;
- recalcLocalAabb();
-}
-
-int btBU_Simplex1to4::getNumVertices() const
-{
- return m_numVertices;
-}
-
-int btBU_Simplex1to4::getNumEdges() const
-{
- //euler formula, F-E+V = 2, so E = F+V-2
-
- switch (m_numVertices)
- {
- case 0:
- return 0;
- case 1:
- return 0;
- case 2:
- return 1;
- case 3:
- return 3;
- case 4:
- return 6;
- }
-
- return 0;
-}
-
-void btBU_Simplex1to4::getEdge(int i, btVector3& pa, btVector3& pb) const
-{
- switch (m_numVertices)
- {
- case 2:
- pa = m_vertices[0];
- pb = m_vertices[1];
- break;
- case 3:
- switch (i)
- {
- case 0:
- pa = m_vertices[0];
- pb = m_vertices[1];
- break;
- case 1:
- pa = m_vertices[1];
- pb = m_vertices[2];
- break;
- case 2:
- pa = m_vertices[2];
- pb = m_vertices[0];
- break;
- }
- break;
- case 4:
- switch (i)
- {
- case 0:
- pa = m_vertices[0];
- pb = m_vertices[1];
- break;
- case 1:
- pa = m_vertices[1];
- pb = m_vertices[2];
- break;
- case 2:
- pa = m_vertices[2];
- pb = m_vertices[0];
- break;
- case 3:
- pa = m_vertices[0];
- pb = m_vertices[3];
- break;
- case 4:
- pa = m_vertices[1];
- pb = m_vertices[3];
- break;
- case 5:
- pa = m_vertices[2];
- pb = m_vertices[3];
- break;
- }
- }
-}
-
-void btBU_Simplex1to4::getVertex(int i, btVector3& vtx) const
-{
- vtx = m_vertices[i];
-}
-
-int btBU_Simplex1to4::getNumPlanes() const
-{
- switch (m_numVertices)
- {
- case 0:
- return 0;
- case 1:
- return 0;
- case 2:
- return 0;
- case 3:
- return 2;
- case 4:
- return 4;
- default:
- {
- }
- }
- return 0;
-}
-
-void btBU_Simplex1to4::getPlane(btVector3&, btVector3&, int) const
-{
-}
-
-int btBU_Simplex1to4::getIndex(int) const
-{
- return 0;
-}
-
-bool btBU_Simplex1to4::isInside(const btVector3&, btScalar) const
-{
- return false;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h
deleted file mode 100644
index f5e2209ed0..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTetrahedronShape.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMPLEX_1TO4_SHAPE
-#define BT_SIMPLEX_1TO4_SHAPE
-
-#include "btPolyhedralConvexShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-
-///The btBU_Simplex1to4 implements tetrahedron, triangle, line, vertex collision shapes. In most cases it is better to use btConvexHullShape instead.
-ATTRIBUTE_ALIGNED16(class)
-btBU_Simplex1to4 : public btPolyhedralConvexAabbCachingShape
-{
-protected:
- int m_numVertices;
- btVector3 m_vertices[4];
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btBU_Simplex1to4();
-
- btBU_Simplex1to4(const btVector3& pt0);
- btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1);
- btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1, const btVector3& pt2);
- btBU_Simplex1to4(const btVector3& pt0, const btVector3& pt1, const btVector3& pt2, const btVector3& pt3);
-
- void reset()
- {
- m_numVertices = 0;
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- void addVertex(const btVector3& pt);
-
- //PolyhedralConvexShape interface
-
- virtual int getNumVertices() const;
-
- virtual int getNumEdges() const;
-
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const;
-
- virtual void getVertex(int i, btVector3& vtx) const;
-
- virtual int getNumPlanes() const;
-
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const;
-
- virtual int getIndex(int i) const;
-
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const;
-
- ///getName is for debugging
- virtual const char* getName() const { return "btBU_Simplex1to4"; }
-};
-
-#endif //BT_SIMPLEX_1TO4_SHAPE
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.cpp
deleted file mode 100644
index 3b6db2b39f..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.cpp
+++ /dev/null
@@ -1,28 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTriangleBuffer.h"
-
-void btTriangleBuffer::processTriangle(btVector3* triangle, int partId, int triangleIndex)
-{
- btTriangle tri;
- tri.m_vertex0 = triangle[0];
- tri.m_vertex1 = triangle[1];
- tri.m_vertex2 = triangle[2];
- tri.m_partId = partId;
- tri.m_triangleIndex = triangleIndex;
-
- m_triangleBuffer.push_back(tri);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h
deleted file mode 100644
index a89b9cd8a4..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleBuffer.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRIANGLE_BUFFER_H
-#define BT_TRIANGLE_BUFFER_H
-
-#include "btTriangleCallback.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-struct btTriangle
-{
- btVector3 m_vertex0;
- btVector3 m_vertex1;
- btVector3 m_vertex2;
- int m_partId;
- int m_triangleIndex;
-};
-
-///The btTriangleBuffer callback can be useful to collect and store overlapping triangles between AABB and concave objects that support 'processAllTriangles'
-///Example usage of this class:
-/// btTriangleBuffer triBuf;
-/// concaveShape->processAllTriangles(&triBuf,aabbMin, aabbMax);
-/// for (int i=0;i<triBuf.getNumTriangles();i++)
-/// {
-/// const btTriangle& tri = triBuf.getTriangle(i);
-/// //do something useful here with the triangle
-/// }
-class btTriangleBuffer : public btTriangleCallback
-{
- btAlignedObjectArray<btTriangle> m_triangleBuffer;
-
-public:
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex);
-
- int getNumTriangles() const
- {
- return int(m_triangleBuffer.size());
- }
-
- const btTriangle& getTriangle(int index) const
- {
- return m_triangleBuffer[index];
- }
-
- void clearBuffer()
- {
- m_triangleBuffer.clear();
- }
-};
-
-#endif //BT_TRIANGLE_BUFFER_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.cpp
deleted file mode 100644
index 5bd2c595fe..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.cpp
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTriangleCallback.h"
-
-btTriangleCallback::~btTriangleCallback()
-{
-}
-
-btInternalTriangleIndexCallback::~btInternalTriangleIndexCallback()
-{
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h
deleted file mode 100644
index d3644891ee..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleCallback.h
+++ /dev/null
@@ -1,37 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRIANGLE_CALLBACK_H
-#define BT_TRIANGLE_CALLBACK_H
-
-#include "LinearMath/btVector3.h"
-
-///The btTriangleCallback provides a callback for each overlapping triangle when calling processAllTriangles.
-///This callback is called by processAllTriangles for all btConcaveShape derived class, such as btBvhTriangleMeshShape, btStaticPlaneShape and btHeightfieldTerrainShape.
-class btTriangleCallback
-{
-public:
- virtual ~btTriangleCallback();
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex) = 0;
-};
-
-class btInternalTriangleIndexCallback
-{
-public:
- virtual ~btInternalTriangleIndexCallback();
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex) = 0;
-};
-
-#endif //BT_TRIANGLE_CALLBACK_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp
deleted file mode 100644
index dae4255194..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTriangleIndexVertexArray.h"
-
-btTriangleIndexVertexArray::btTriangleIndexVertexArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride, int numVertices, btScalar* vertexBase, int vertexStride)
- : m_hasAabb(0)
-{
- btIndexedMesh mesh;
-
- mesh.m_numTriangles = numTriangles;
- mesh.m_triangleIndexBase = (const unsigned char*)triangleIndexBase;
- mesh.m_triangleIndexStride = triangleIndexStride;
- mesh.m_numVertices = numVertices;
- mesh.m_vertexBase = (const unsigned char*)vertexBase;
- mesh.m_vertexStride = vertexStride;
-
- addIndexedMesh(mesh);
-}
-
-btTriangleIndexVertexArray::~btTriangleIndexVertexArray()
-{
-}
-
-void btTriangleIndexVertexArray::getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart)
-{
- btAssert(subpart < getNumSubParts());
-
- btIndexedMesh& mesh = m_indexedMeshes[subpart];
-
- numverts = mesh.m_numVertices;
- (*vertexbase) = (unsigned char*)mesh.m_vertexBase;
-
- type = mesh.m_vertexType;
-
- vertexStride = mesh.m_vertexStride;
-
- numfaces = mesh.m_numTriangles;
-
- (*indexbase) = (unsigned char*)mesh.m_triangleIndexBase;
- indexstride = mesh.m_triangleIndexStride;
- indicestype = mesh.m_indexType;
-}
-
-void btTriangleIndexVertexArray::getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart) const
-{
- const btIndexedMesh& mesh = m_indexedMeshes[subpart];
-
- numverts = mesh.m_numVertices;
- (*vertexbase) = (const unsigned char*)mesh.m_vertexBase;
-
- type = mesh.m_vertexType;
-
- vertexStride = mesh.m_vertexStride;
-
- numfaces = mesh.m_numTriangles;
- (*indexbase) = (const unsigned char*)mesh.m_triangleIndexBase;
- indexstride = mesh.m_triangleIndexStride;
- indicestype = mesh.m_indexType;
-}
-
-bool btTriangleIndexVertexArray::hasPremadeAabb() const
-{
- return (m_hasAabb == 1);
-}
-
-void btTriangleIndexVertexArray::setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- m_aabbMin = aabbMin;
- m_aabbMax = aabbMax;
- m_hasAabb = 1; // this is intentionally an int see notes in header
-}
-
-void btTriangleIndexVertexArray::getPremadeAabb(btVector3* aabbMin, btVector3* aabbMax) const
-{
- *aabbMin = m_aabbMin;
- *aabbMax = m_aabbMax;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h
deleted file mode 100644
index 556aa3fef4..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h
+++ /dev/null
@@ -1,128 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRIANGLE_INDEX_VERTEX_ARRAY_H
-#define BT_TRIANGLE_INDEX_VERTEX_ARRAY_H
-
-#include "btStridingMeshInterface.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btScalar.h"
-
-///The btIndexedMesh indexes a single vertex and index array. Multiple btIndexedMesh objects can be passed into a btTriangleIndexVertexArray using addIndexedMesh.
-///Instead of the number of indices, we pass the number of triangles.
-ATTRIBUTE_ALIGNED16(struct)
-btIndexedMesh
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_numTriangles;
- const unsigned char* m_triangleIndexBase;
- // Size in byte of the indices for one triangle (3*sizeof(index_type) if the indices are tightly packed)
- int m_triangleIndexStride;
- int m_numVertices;
- const unsigned char* m_vertexBase;
- // Size of a vertex, in bytes
- int m_vertexStride;
-
- // The index type is set when adding an indexed mesh to the
- // btTriangleIndexVertexArray, do not set it manually
- PHY_ScalarType m_indexType;
-
- // The vertex type has a default type similar to Bullet's precision mode (float or double)
- // but can be set manually if you for example run Bullet with double precision but have
- // mesh data in single precision..
- PHY_ScalarType m_vertexType;
-
- btIndexedMesh()
- : m_indexType(PHY_INTEGER),
-#ifdef BT_USE_DOUBLE_PRECISION
- m_vertexType(PHY_DOUBLE)
-#else // BT_USE_DOUBLE_PRECISION
- m_vertexType(PHY_FLOAT)
-#endif // BT_USE_DOUBLE_PRECISION
- {
- }
-};
-
-typedef btAlignedObjectArray<btIndexedMesh> IndexedMeshArray;
-
-///The btTriangleIndexVertexArray allows to access multiple triangle meshes, by indexing into existing triangle/index arrays.
-///Additional meshes can be added using addIndexedMesh
-///No duplicate is made of the vertex/index data, it only indexes into external vertex/index arrays.
-///So keep those arrays around during the lifetime of this btTriangleIndexVertexArray.
-ATTRIBUTE_ALIGNED16(class)
-btTriangleIndexVertexArray : public btStridingMeshInterface
-{
-protected:
- IndexedMeshArray m_indexedMeshes;
- int m_pad[2];
- mutable int m_hasAabb; // using int instead of bool to maintain alignment
- mutable btVector3 m_aabbMin;
- mutable btVector3 m_aabbMax;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btTriangleIndexVertexArray() : m_hasAabb(0)
- {
- }
-
- virtual ~btTriangleIndexVertexArray();
-
- //just to be backwards compatible
- btTriangleIndexVertexArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride, int numVertices, btScalar* vertexBase, int vertexStride);
-
- void addIndexedMesh(const btIndexedMesh& mesh, PHY_ScalarType indexType = PHY_INTEGER)
- {
- m_indexedMeshes.push_back(mesh);
- m_indexedMeshes[m_indexedMeshes.size() - 1].m_indexType = indexType;
- }
-
- virtual void getLockedVertexIndexBase(unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0);
-
- virtual void getLockedReadOnlyVertexIndexBase(const unsigned char** vertexbase, int& numverts, PHY_ScalarType& type, int& vertexStride, const unsigned char** indexbase, int& indexstride, int& numfaces, PHY_ScalarType& indicestype, int subpart = 0) const;
-
- /// unLockVertexBase finishes the access to a subpart of the triangle mesh
- /// make a call to unLockVertexBase when the read and write access (using getLockedVertexIndexBase) is finished
- virtual void unLockVertexBase(int subpart) { (void)subpart; }
-
- virtual void unLockReadOnlyVertexBase(int subpart) const { (void)subpart; }
-
- /// getNumSubParts returns the number of separate subparts
- /// each subpart has a continuous array of vertices and indices
- virtual int getNumSubParts() const
- {
- return (int)m_indexedMeshes.size();
- }
-
- IndexedMeshArray& getIndexedMeshArray()
- {
- return m_indexedMeshes;
- }
-
- const IndexedMeshArray& getIndexedMeshArray() const
- {
- return m_indexedMeshes;
- }
-
- virtual void preallocateVertices(int numverts) { (void)numverts; }
- virtual void preallocateIndices(int numindices) { (void)numindices; }
-
- virtual bool hasPremadeAabb() const;
- virtual void setPremadeAabb(const btVector3& aabbMin, const btVector3& aabbMax) const;
- virtual void getPremadeAabb(btVector3 * aabbMin, btVector3 * aabbMax) const;
-};
-
-#endif //BT_TRIANGLE_INDEX_VERTEX_ARRAY_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp
deleted file mode 100644
index 4bf133d7ac..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was created by Alex Silverman
-
-#include "btTriangleIndexVertexMaterialArray.h"
-
-btTriangleIndexVertexMaterialArray::btTriangleIndexVertexMaterialArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride,
- int numVertices, btScalar* vertexBase, int vertexStride,
- int numMaterials, unsigned char* materialBase, int materialStride,
- int* triangleMaterialsBase, int materialIndexStride) : btTriangleIndexVertexArray(numTriangles, triangleIndexBase, triangleIndexStride, numVertices, vertexBase, vertexStride)
-{
- btMaterialProperties mat;
-
- mat.m_numMaterials = numMaterials;
- mat.m_materialBase = materialBase;
- mat.m_materialStride = materialStride;
-#ifdef BT_USE_DOUBLE_PRECISION
- mat.m_materialType = PHY_DOUBLE;
-#else
- mat.m_materialType = PHY_FLOAT;
-#endif
-
- mat.m_numTriangles = numTriangles;
- mat.m_triangleMaterialsBase = (unsigned char*)triangleMaterialsBase;
- mat.m_triangleMaterialStride = materialIndexStride;
- mat.m_triangleType = PHY_INTEGER;
-
- addMaterialProperties(mat);
-}
-
-void btTriangleIndexVertexMaterialArray::getLockedMaterialBase(unsigned char** materialBase, int& numMaterials, PHY_ScalarType& materialType, int& materialStride,
- unsigned char** triangleMaterialBase, int& numTriangles, int& triangleMaterialStride, PHY_ScalarType& triangleType, int subpart)
-{
- btAssert(subpart < getNumSubParts());
-
- btMaterialProperties& mats = m_materials[subpart];
-
- numMaterials = mats.m_numMaterials;
- (*materialBase) = (unsigned char*)mats.m_materialBase;
-#ifdef BT_USE_DOUBLE_PRECISION
- materialType = PHY_DOUBLE;
-#else
- materialType = PHY_FLOAT;
-#endif
- materialStride = mats.m_materialStride;
-
- numTriangles = mats.m_numTriangles;
- (*triangleMaterialBase) = (unsigned char*)mats.m_triangleMaterialsBase;
- triangleMaterialStride = mats.m_triangleMaterialStride;
- triangleType = mats.m_triangleType;
-}
-
-void btTriangleIndexVertexMaterialArray::getLockedReadOnlyMaterialBase(const unsigned char** materialBase, int& numMaterials, PHY_ScalarType& materialType, int& materialStride,
- const unsigned char** triangleMaterialBase, int& numTriangles, int& triangleMaterialStride, PHY_ScalarType& triangleType, int subpart)
-{
- btMaterialProperties& mats = m_materials[subpart];
-
- numMaterials = mats.m_numMaterials;
- (*materialBase) = (const unsigned char*)mats.m_materialBase;
-#ifdef BT_USE_DOUBLE_PRECISION
- materialType = PHY_DOUBLE;
-#else
- materialType = PHY_FLOAT;
-#endif
- materialStride = mats.m_materialStride;
-
- numTriangles = mats.m_numTriangles;
- (*triangleMaterialBase) = (const unsigned char*)mats.m_triangleMaterialsBase;
- triangleMaterialStride = mats.m_triangleMaterialStride;
- triangleType = mats.m_triangleType;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h
deleted file mode 100644
index 315b1e21f3..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.h
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was created by Alex Silverman
-
-#ifndef BT_MULTIMATERIAL_TRIANGLE_INDEX_VERTEX_ARRAY_H
-#define BT_MULTIMATERIAL_TRIANGLE_INDEX_VERTEX_ARRAY_H
-
-#include "btTriangleIndexVertexArray.h"
-
-ATTRIBUTE_ALIGNED16(struct)
-btMaterialProperties
-{
- ///m_materialBase ==========> 2 btScalar values make up one material, friction then restitution
- int m_numMaterials;
- const unsigned char* m_materialBase;
- int m_materialStride;
- PHY_ScalarType m_materialType;
- ///m_numTriangles <=========== This exists in the btIndexedMesh object for the same subpart, but since we're
- /// padding the structure, it can be reproduced at no real cost
- ///m_triangleMaterials =====> 1 integer value makes up one entry
- /// eg: m_triangleMaterials[1] = 5; // This will set triangle 2 to use material 5
- int m_numTriangles;
- const unsigned char* m_triangleMaterialsBase;
- int m_triangleMaterialStride;
- ///m_triangleType <========== Automatically set in addMaterialProperties
- PHY_ScalarType m_triangleType;
-};
-
-typedef btAlignedObjectArray<btMaterialProperties> MaterialArray;
-
-///Teh btTriangleIndexVertexMaterialArray is built on TriangleIndexVertexArray
-///The addition of a material array allows for the utilization of the partID and
-///triangleIndex that are returned in the ContactAddedCallback. As with
-///TriangleIndexVertexArray, no duplicate is made of the material data, so it
-///is the users responsibility to maintain the array during the lifetime of the
-///TriangleIndexVertexMaterialArray.
-ATTRIBUTE_ALIGNED16(class)
-btTriangleIndexVertexMaterialArray : public btTriangleIndexVertexArray
-{
-protected:
- MaterialArray m_materials;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btTriangleIndexVertexMaterialArray()
- {
- }
-
- btTriangleIndexVertexMaterialArray(int numTriangles, int* triangleIndexBase, int triangleIndexStride,
- int numVertices, btScalar* vertexBase, int vertexStride,
- int numMaterials, unsigned char* materialBase, int materialStride,
- int* triangleMaterialsBase, int materialIndexStride);
-
- virtual ~btTriangleIndexVertexMaterialArray() {}
-
- void addMaterialProperties(const btMaterialProperties& mat, PHY_ScalarType triangleType = PHY_INTEGER)
- {
- m_materials.push_back(mat);
- m_materials[m_materials.size() - 1].m_triangleType = triangleType;
- }
-
- virtual void getLockedMaterialBase(unsigned char** materialBase, int& numMaterials, PHY_ScalarType& materialType, int& materialStride,
- unsigned char** triangleMaterialBase, int& numTriangles, int& triangleMaterialStride, PHY_ScalarType& triangleType, int subpart = 0);
-
- virtual void getLockedReadOnlyMaterialBase(const unsigned char** materialBase, int& numMaterials, PHY_ScalarType& materialType, int& materialStride,
- const unsigned char** triangleMaterialBase, int& numTriangles, int& triangleMaterialStride, PHY_ScalarType& triangleType, int subpart = 0);
-};
-
-#endif //BT_MULTIMATERIAL_TRIANGLE_INDEX_VERTEX_ARRAY_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h
deleted file mode 100644
index 8ee35ef5fa..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleInfoMap.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2010 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef _BT_TRIANGLE_INFO_MAP_H
-#define _BT_TRIANGLE_INFO_MAP_H
-
-#include "LinearMath/btHashMap.h"
-#include "LinearMath/btSerializer.h"
-
-///for btTriangleInfo m_flags
-#define TRI_INFO_V0V1_CONVEX 1
-#define TRI_INFO_V1V2_CONVEX 2
-#define TRI_INFO_V2V0_CONVEX 4
-
-#define TRI_INFO_V0V1_SWAP_NORMALB 8
-#define TRI_INFO_V1V2_SWAP_NORMALB 16
-#define TRI_INFO_V2V0_SWAP_NORMALB 32
-
-///The btTriangleInfo structure stores information to adjust collision normals to avoid collisions against internal edges
-///it can be generated using
-struct btTriangleInfo
-{
- btTriangleInfo()
- {
- m_edgeV0V1Angle = SIMD_2_PI;
- m_edgeV1V2Angle = SIMD_2_PI;
- m_edgeV2V0Angle = SIMD_2_PI;
- m_flags = 0;
- }
-
- int m_flags;
-
- btScalar m_edgeV0V1Angle;
- btScalar m_edgeV1V2Angle;
- btScalar m_edgeV2V0Angle;
-};
-
-typedef btHashMap<btHashInt, btTriangleInfo> btInternalTriangleInfoMap;
-
-///The btTriangleInfoMap stores edge angle information for some triangles. You can compute this information yourself or using btGenerateInternalEdgeInfo.
-struct btTriangleInfoMap : public btInternalTriangleInfoMap
-{
- btScalar m_convexEpsilon; ///used to determine if an edge or contact normal is convex, using the dot product
- btScalar m_planarEpsilon; ///used to determine if a triangle edge is planar with zero angle
- btScalar m_equalVertexThreshold; ///used to compute connectivity: if the distance between two vertices is smaller than m_equalVertexThreshold, they are considered to be 'shared'
- btScalar m_edgeDistanceThreshold; ///used to determine edge contacts: if the closest distance between a contact point and an edge is smaller than this distance threshold it is considered to "hit the edge"
- btScalar m_maxEdgeAngleThreshold; //ignore edges that connect triangles at an angle larger than this m_maxEdgeAngleThreshold
- btScalar m_zeroAreaThreshold; ///used to determine if a triangle is degenerate (length squared of cross product of 2 triangle edges < threshold)
-
- btTriangleInfoMap()
- {
- m_convexEpsilon = 0.00f;
- m_planarEpsilon = 0.0001f;
- m_equalVertexThreshold = btScalar(0.0001) * btScalar(0.0001);
- m_edgeDistanceThreshold = btScalar(0.1);
- m_zeroAreaThreshold = btScalar(0.0001) * btScalar(0.0001);
- m_maxEdgeAngleThreshold = SIMD_2_PI;
- }
- virtual ~btTriangleInfoMap() {}
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-
- void deSerialize(struct btTriangleInfoMapData& data);
-};
-
-// clang-format off
-
-///those fields have to be float and not btScalar for the serialization to work properly
-struct btTriangleInfoData
-{
- int m_flags;
- float m_edgeV0V1Angle;
- float m_edgeV1V2Angle;
- float m_edgeV2V0Angle;
-};
-
-struct btTriangleInfoMapData
-{
- int *m_hashTablePtr;
- int *m_nextPtr;
- btTriangleInfoData *m_valueArrayPtr;
- int *m_keyArrayPtr;
-
- float m_convexEpsilon;
- float m_planarEpsilon;
- float m_equalVertexThreshold;
- float m_edgeDistanceThreshold;
- float m_zeroAreaThreshold;
-
- int m_nextSize;
- int m_hashTableSize;
- int m_numValues;
- int m_numKeys;
- char m_padding[4];
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btTriangleInfoMap::calculateSerializeBufferSize() const
-{
- return sizeof(btTriangleInfoMapData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btTriangleInfoMap::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btTriangleInfoMapData* tmapData = (btTriangleInfoMapData*)dataBuffer;
- tmapData->m_convexEpsilon = (float)m_convexEpsilon;
- tmapData->m_planarEpsilon = (float)m_planarEpsilon;
- tmapData->m_equalVertexThreshold = (float)m_equalVertexThreshold;
- tmapData->m_edgeDistanceThreshold = (float)m_edgeDistanceThreshold;
- tmapData->m_zeroAreaThreshold = (float)m_zeroAreaThreshold;
-
- tmapData->m_hashTableSize = m_hashTable.size();
-
- tmapData->m_hashTablePtr = tmapData->m_hashTableSize ? (int*)serializer->getUniquePointer((void*)&m_hashTable[0]) : 0;
- if (tmapData->m_hashTablePtr)
- {
- //serialize an int buffer
- int sz = sizeof(int);
- int numElem = tmapData->m_hashTableSize;
- btChunk* chunk = serializer->allocate(sz, numElem);
- int* memPtr = (int*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- *memPtr = m_hashTable[i];
- }
- serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_hashTable[0]);
- }
-
- tmapData->m_nextSize = m_next.size();
- tmapData->m_nextPtr = tmapData->m_nextSize ? (int*)serializer->getUniquePointer((void*)&m_next[0]) : 0;
- if (tmapData->m_nextPtr)
- {
- int sz = sizeof(int);
- int numElem = tmapData->m_nextSize;
- btChunk* chunk = serializer->allocate(sz, numElem);
- int* memPtr = (int*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- *memPtr = m_next[i];
- }
- serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_next[0]);
- }
-
- tmapData->m_numValues = m_valueArray.size();
- tmapData->m_valueArrayPtr = tmapData->m_numValues ? (btTriangleInfoData*)serializer->getUniquePointer((void*)&m_valueArray[0]) : 0;
- if (tmapData->m_valueArrayPtr)
- {
- int sz = sizeof(btTriangleInfoData);
- int numElem = tmapData->m_numValues;
- btChunk* chunk = serializer->allocate(sz, numElem);
- btTriangleInfoData* memPtr = (btTriangleInfoData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_edgeV0V1Angle = (float)m_valueArray[i].m_edgeV0V1Angle;
- memPtr->m_edgeV1V2Angle = (float)m_valueArray[i].m_edgeV1V2Angle;
- memPtr->m_edgeV2V0Angle = (float)m_valueArray[i].m_edgeV2V0Angle;
- memPtr->m_flags = m_valueArray[i].m_flags;
- }
- serializer->finalizeChunk(chunk, "btTriangleInfoData", BT_ARRAY_CODE, (void*)&m_valueArray[0]);
- }
-
- tmapData->m_numKeys = m_keyArray.size();
- tmapData->m_keyArrayPtr = tmapData->m_numKeys ? (int*)serializer->getUniquePointer((void*)&m_keyArray[0]) : 0;
- if (tmapData->m_keyArrayPtr)
- {
- int sz = sizeof(int);
- int numElem = tmapData->m_numValues;
- btChunk* chunk = serializer->allocate(sz, numElem);
- int* memPtr = (int*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- *memPtr = m_keyArray[i].getUid1();
- }
- serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_keyArray[0]);
- }
-
- // Fill padding with zeros to appease msan.
- tmapData->m_padding[0] = 0;
- tmapData->m_padding[1] = 0;
- tmapData->m_padding[2] = 0;
- tmapData->m_padding[3] = 0;
-
- return "btTriangleInfoMapData";
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE void btTriangleInfoMap::deSerialize(btTriangleInfoMapData& tmapData)
-{
- m_convexEpsilon = tmapData.m_convexEpsilon;
- m_planarEpsilon = tmapData.m_planarEpsilon;
- m_equalVertexThreshold = tmapData.m_equalVertexThreshold;
- m_edgeDistanceThreshold = tmapData.m_edgeDistanceThreshold;
- m_zeroAreaThreshold = tmapData.m_zeroAreaThreshold;
- m_hashTable.resize(tmapData.m_hashTableSize);
- int i = 0;
- for (i = 0; i < tmapData.m_hashTableSize; i++)
- {
- m_hashTable[i] = tmapData.m_hashTablePtr[i];
- }
- m_next.resize(tmapData.m_nextSize);
- for (i = 0; i < tmapData.m_nextSize; i++)
- {
- m_next[i] = tmapData.m_nextPtr[i];
- }
- m_valueArray.resize(tmapData.m_numValues);
- for (i = 0; i < tmapData.m_numValues; i++)
- {
- m_valueArray[i].m_edgeV0V1Angle = tmapData.m_valueArrayPtr[i].m_edgeV0V1Angle;
- m_valueArray[i].m_edgeV1V2Angle = tmapData.m_valueArrayPtr[i].m_edgeV1V2Angle;
- m_valueArray[i].m_edgeV2V0Angle = tmapData.m_valueArrayPtr[i].m_edgeV2V0Angle;
- m_valueArray[i].m_flags = tmapData.m_valueArrayPtr[i].m_flags;
- }
-
- m_keyArray.resize(tmapData.m_numKeys, btHashInt(0));
- for (i = 0; i < tmapData.m_numKeys; i++)
- {
- m_keyArray[i].setUid1(tmapData.m_keyArrayPtr[i]);
- }
-}
-
-#endif //_BT_TRIANGLE_INFO_MAP_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.cpp
deleted file mode 100644
index abd8c22786..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.cpp
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTriangleMesh.h"
-
-btTriangleMesh::btTriangleMesh(bool use32bitIndices, bool use4componentVertices)
- : m_use32bitIndices(use32bitIndices),
- m_use4componentVertices(use4componentVertices),
- m_weldingThreshold(0.0)
-{
- btIndexedMesh meshIndex;
- meshIndex.m_numTriangles = 0;
- meshIndex.m_numVertices = 0;
- meshIndex.m_indexType = PHY_INTEGER;
- meshIndex.m_triangleIndexBase = 0;
- meshIndex.m_triangleIndexStride = 3 * sizeof(int);
- meshIndex.m_vertexBase = 0;
- meshIndex.m_vertexStride = sizeof(btVector3);
- m_indexedMeshes.push_back(meshIndex);
-
- if (m_use32bitIndices)
- {
- m_indexedMeshes[0].m_numTriangles = m_32bitIndices.size() / 3;
- m_indexedMeshes[0].m_triangleIndexBase = 0;
- m_indexedMeshes[0].m_indexType = PHY_INTEGER;
- m_indexedMeshes[0].m_triangleIndexStride = 3 * sizeof(int);
- }
- else
- {
- m_indexedMeshes[0].m_numTriangles = m_16bitIndices.size() / 3;
- m_indexedMeshes[0].m_triangleIndexBase = 0;
- m_indexedMeshes[0].m_indexType = PHY_SHORT;
- m_indexedMeshes[0].m_triangleIndexStride = 3 * sizeof(short int);
- }
-
- if (m_use4componentVertices)
- {
- m_indexedMeshes[0].m_numVertices = m_4componentVertices.size();
- m_indexedMeshes[0].m_vertexBase = 0;
- m_indexedMeshes[0].m_vertexStride = sizeof(btVector3);
- }
- else
- {
- m_indexedMeshes[0].m_numVertices = m_3componentVertices.size() / 3;
- m_indexedMeshes[0].m_vertexBase = 0;
- m_indexedMeshes[0].m_vertexStride = 3 * sizeof(btScalar);
- }
-}
-
-void btTriangleMesh::addIndex(int index)
-{
- if (m_use32bitIndices)
- {
- m_32bitIndices.push_back(index);
- m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*)&m_32bitIndices[0];
- }
- else
- {
- m_16bitIndices.push_back(index);
- m_indexedMeshes[0].m_triangleIndexBase = (unsigned char*)&m_16bitIndices[0];
- }
-}
-
-void btTriangleMesh::addTriangleIndices(int index1, int index2, int index3)
-{
- m_indexedMeshes[0].m_numTriangles++;
- addIndex(index1);
- addIndex(index2);
- addIndex(index3);
-}
-
-int btTriangleMesh::findOrAddVertex(const btVector3& vertex, bool removeDuplicateVertices)
-{
- //return index of new/existing vertex
- ///@todo: could use acceleration structure for this
- if (m_use4componentVertices)
- {
- if (removeDuplicateVertices)
- {
- for (int i = 0; i < m_4componentVertices.size(); i++)
- {
- if ((m_4componentVertices[i] - vertex).length2() <= m_weldingThreshold)
- {
- return i;
- }
- }
- }
- m_indexedMeshes[0].m_numVertices++;
- m_4componentVertices.push_back(vertex);
- m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_4componentVertices[0];
-
- return m_4componentVertices.size() - 1;
- }
- else
- {
- if (removeDuplicateVertices)
- {
- for (int i = 0; i < m_3componentVertices.size(); i += 3)
- {
- btVector3 vtx(m_3componentVertices[i], m_3componentVertices[i + 1], m_3componentVertices[i + 2]);
- if ((vtx - vertex).length2() <= m_weldingThreshold)
- {
- return i / 3;
- }
- }
- }
- m_3componentVertices.push_back(vertex.getX());
- m_3componentVertices.push_back(vertex.getY());
- m_3componentVertices.push_back(vertex.getZ());
- m_indexedMeshes[0].m_numVertices++;
- m_indexedMeshes[0].m_vertexBase = (unsigned char*)&m_3componentVertices[0];
- return (m_3componentVertices.size() / 3) - 1;
- }
-}
-
-void btTriangleMesh::addTriangle(const btVector3& vertex0, const btVector3& vertex1, const btVector3& vertex2, bool removeDuplicateVertices)
-{
- m_indexedMeshes[0].m_numTriangles++;
- addIndex(findOrAddVertex(vertex0, removeDuplicateVertices));
- addIndex(findOrAddVertex(vertex1, removeDuplicateVertices));
- addIndex(findOrAddVertex(vertex2, removeDuplicateVertices));
-}
-
-int btTriangleMesh::getNumTriangles() const
-{
- if (m_use32bitIndices)
- {
- return m_32bitIndices.size() / 3;
- }
- return m_16bitIndices.size() / 3;
-}
-
-void btTriangleMesh::preallocateVertices(int numverts)
-{
- if (m_use4componentVertices)
- {
- m_4componentVertices.reserve(numverts);
- }
- else
- {
- m_3componentVertices.reserve(numverts);
- }
-}
-
-void btTriangleMesh::preallocateIndices(int numindices)
-{
- if (m_use32bitIndices)
- {
- m_32bitIndices.reserve(numindices);
- }
- else
- {
- m_16bitIndices.reserve(numindices);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h
deleted file mode 100644
index a8a362355c..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMesh.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRIANGLE_MESH_H
-#define BT_TRIANGLE_MESH_H
-
-#include "btTriangleIndexVertexArray.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-///The btTriangleMesh class is a convenience class derived from btTriangleIndexVertexArray, that provides storage for a concave triangle mesh. It can be used as data for the btBvhTriangleMeshShape.
-///It allows either 32bit or 16bit indices, and 4 (x-y-z-w) or 3 (x-y-z) component vertices.
-///If you want to share triangle/index data between graphics mesh and collision mesh (btBvhTriangleMeshShape), you can directly use btTriangleIndexVertexArray or derive your own class from btStridingMeshInterface.
-///Performance of btTriangleMesh and btTriangleIndexVertexArray used in a btBvhTriangleMeshShape is the same.
-class btTriangleMesh : public btTriangleIndexVertexArray
-{
- btAlignedObjectArray<btVector3> m_4componentVertices;
- btAlignedObjectArray<btScalar> m_3componentVertices;
-
- btAlignedObjectArray<unsigned int> m_32bitIndices;
- btAlignedObjectArray<unsigned short int> m_16bitIndices;
- bool m_use32bitIndices;
- bool m_use4componentVertices;
-
-public:
- btScalar m_weldingThreshold;
-
- btTriangleMesh(bool use32bitIndices = true, bool use4componentVertices = true);
-
- bool getUse32bitIndices() const
- {
- return m_use32bitIndices;
- }
-
- bool getUse4componentVertices() const
- {
- return m_use4componentVertices;
- }
- ///By default addTriangle won't search for duplicate vertices, because the search is very slow for large triangle meshes.
- ///In general it is better to directly use btTriangleIndexVertexArray instead.
- void addTriangle(const btVector3& vertex0, const btVector3& vertex1, const btVector3& vertex2, bool removeDuplicateVertices = false);
-
- ///Add a triangle using its indices. Make sure the indices are pointing within the vertices array, so add the vertices first (and to be sure, avoid removal of duplicate vertices)
- void addTriangleIndices(int index1, int index2, int index3);
-
- int getNumTriangles() const;
-
- virtual void preallocateVertices(int numverts);
- virtual void preallocateIndices(int numindices);
-
- ///findOrAddVertex is an internal method, use addTriangle instead
- int findOrAddVertex(const btVector3& vertex, bool removeDuplicateVertices);
- ///addIndex is an internal method, use addTriangle instead
- void addIndex(int index);
-};
-
-#endif //BT_TRIANGLE_MESH_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp
deleted file mode 100644
index aec239063c..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.cpp
+++ /dev/null
@@ -1,179 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTriangleMeshShape.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btQuaternion.h"
-#include "btStridingMeshInterface.h"
-#include "LinearMath/btAabbUtil2.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-btTriangleMeshShape::btTriangleMeshShape(btStridingMeshInterface* meshInterface)
- : btConcaveShape(), m_meshInterface(meshInterface)
-{
- m_shapeType = TRIANGLE_MESH_SHAPE_PROXYTYPE;
- if (meshInterface->hasPremadeAabb())
- {
- meshInterface->getPremadeAabb(&m_localAabbMin, &m_localAabbMax);
- }
- else
- {
- recalcLocalAabb();
- }
-}
-
-btTriangleMeshShape::~btTriangleMeshShape()
-{
-}
-
-void btTriangleMeshShape::getAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax) const
-{
- btVector3 localHalfExtents = btScalar(0.5) * (m_localAabbMax - m_localAabbMin);
- localHalfExtents += btVector3(getMargin(), getMargin(), getMargin());
- btVector3 localCenter = btScalar(0.5) * (m_localAabbMax + m_localAabbMin);
-
- btMatrix3x3 abs_b = trans.getBasis().absolute();
-
- btVector3 center = trans(localCenter);
-
- btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMin = center - extent;
- aabbMax = center + extent;
-}
-
-void btTriangleMeshShape::recalcLocalAabb()
-{
- for (int i = 0; i < 3; i++)
- {
- btVector3 vec(btScalar(0.), btScalar(0.), btScalar(0.));
- vec[i] = btScalar(1.);
- btVector3 tmp = localGetSupportingVertex(vec);
- m_localAabbMax[i] = tmp[i] + m_collisionMargin;
- vec[i] = btScalar(-1.);
- tmp = localGetSupportingVertex(vec);
- m_localAabbMin[i] = tmp[i] - m_collisionMargin;
- }
-}
-
-class SupportVertexCallback : public btTriangleCallback
-{
- btVector3 m_supportVertexLocal;
-
-public:
- btTransform m_worldTrans;
- btScalar m_maxDot;
- btVector3 m_supportVecLocal;
-
- SupportVertexCallback(const btVector3& supportVecWorld, const btTransform& trans)
- : m_supportVertexLocal(btScalar(0.), btScalar(0.), btScalar(0.)), m_worldTrans(trans), m_maxDot(btScalar(-BT_LARGE_FLOAT))
-
- {
- m_supportVecLocal = supportVecWorld * m_worldTrans.getBasis();
- }
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)partId;
- (void)triangleIndex;
- for (int i = 0; i < 3; i++)
- {
- btScalar dot = m_supportVecLocal.dot(triangle[i]);
- if (dot > m_maxDot)
- {
- m_maxDot = dot;
- m_supportVertexLocal = triangle[i];
- }
- }
- }
-
- btVector3 GetSupportVertexWorldSpace()
- {
- return m_worldTrans(m_supportVertexLocal);
- }
-
- btVector3 GetSupportVertexLocal()
- {
- return m_supportVertexLocal;
- }
-};
-
-void btTriangleMeshShape::setLocalScaling(const btVector3& scaling)
-{
- m_meshInterface->setScaling(scaling);
- recalcLocalAabb();
-}
-
-const btVector3& btTriangleMeshShape::getLocalScaling() const
-{
- return m_meshInterface->getScaling();
-}
-
-//#define DEBUG_TRIANGLE_MESH
-
-void btTriangleMeshShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- struct FilteredCallback : public btInternalTriangleIndexCallback
- {
- btTriangleCallback* m_callback;
- btVector3 m_aabbMin;
- btVector3 m_aabbMax;
-
- FilteredCallback(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax)
- : m_callback(callback),
- m_aabbMin(aabbMin),
- m_aabbMax(aabbMax)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- if (TestTriangleAgainstAabb2(&triangle[0], m_aabbMin, m_aabbMax))
- {
- //check aabb in triangle-space, before doing this
- m_callback->processTriangle(triangle, partId, triangleIndex);
- }
- }
- };
-
- FilteredCallback filterCallback(callback, aabbMin, aabbMax);
-
- m_meshInterface->InternalProcessAllTriangles(&filterCallback, aabbMin, aabbMax);
-}
-
-void btTriangleMeshShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- (void)mass;
- //moving concave objects not supported
- btAssert(0);
- inertia.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
-}
-
-btVector3 btTriangleMeshShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 supportVertex;
-
- btTransform ident;
- ident.setIdentity();
-
- SupportVertexCallback supportCallback(vec, ident);
-
- btVector3 aabbMax(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
-
- processAllTriangles(&supportCallback, -aabbMax, aabbMax);
-
- supportVertex = supportCallback.GetSupportVertexLocal();
-
- return supportVertex;
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h
deleted file mode 100644
index 4a70e283fa..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleMeshShape.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRIANGLE_MESH_SHAPE_H
-#define BT_TRIANGLE_MESH_SHAPE_H
-
-#include "btConcaveShape.h"
-#include "btStridingMeshInterface.h"
-
-///The btTriangleMeshShape is an internal concave triangle mesh interface. Don't use this class directly, use btBvhTriangleMeshShape instead.
-ATTRIBUTE_ALIGNED16(class)
-btTriangleMeshShape : public btConcaveShape
-{
-protected:
- btVector3 m_localAabbMin;
- btVector3 m_localAabbMax;
- btStridingMeshInterface* m_meshInterface;
-
- ///btTriangleMeshShape constructor has been disabled/protected, so that users will not mistakenly use this class.
- ///Don't use btTriangleMeshShape but use btBvhTriangleMeshShape instead!
- btTriangleMeshShape(btStridingMeshInterface * meshInterface);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- virtual ~btTriangleMeshShape();
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const
- {
- btAssert(0);
- return localGetSupportingVertex(vec);
- }
-
- void recalcLocalAabb();
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void processAllTriangles(btTriangleCallback * callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
-
- btStridingMeshInterface* getMeshInterface()
- {
- return m_meshInterface;
- }
-
- const btStridingMeshInterface* getMeshInterface() const
- {
- return m_meshInterface;
- }
-
- const btVector3& getLocalAabbMin() const
- {
- return m_localAabbMin;
- }
- const btVector3& getLocalAabbMax() const
- {
- return m_localAabbMax;
- }
-
- //debugging
- virtual const char* getName() const { return "TRIANGLEMESH"; }
-};
-
-#endif //BT_TRIANGLE_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleShape.h
deleted file mode 100644
index 190cbdae69..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btTriangleShape.h
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_OBB_TRIANGLE_MINKOWSKI_H
-#define BT_OBB_TRIANGLE_MINKOWSKI_H
-
-#include "btConvexShape.h"
-#include "btBoxShape.h"
-
-ATTRIBUTE_ALIGNED16(class)
-btTriangleShape : public btPolyhedralConvexShape
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btVector3 m_vertices1[3];
-
- virtual int getNumVertices() const
- {
- return 3;
- }
-
- btVector3& getVertexPtr(int index)
- {
- return m_vertices1[index];
- }
-
- const btVector3& getVertexPtr(int index) const
- {
- return m_vertices1[index];
- }
- virtual void getVertex(int index, btVector3& vert) const
- {
- vert = m_vertices1[index];
- }
-
- virtual int getNumEdges() const
- {
- return 3;
- }
-
- virtual void getEdge(int i, btVector3& pa, btVector3& pb) const
- {
- getVertex(i, pa);
- getVertex((i + 1) % 3, pb);
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- // btAssert(0);
- getAabbSlow(t, aabbMin, aabbMax);
- }
-
- btVector3 localGetSupportingVertexWithoutMargin(const btVector3& dir) const
- {
- btVector3 dots = dir.dot3(m_vertices1[0], m_vertices1[1], m_vertices1[2]);
- return m_vertices1[dots.maxAxis()];
- }
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
- {
- for (int i = 0; i < numVectors; i++)
- {
- const btVector3& dir = vectors[i];
- btVector3 dots = dir.dot3(m_vertices1[0], m_vertices1[1], m_vertices1[2]);
- supportVerticesOut[i] = m_vertices1[dots.maxAxis()];
- }
- }
-
- btTriangleShape() : btPolyhedralConvexShape()
- {
- m_shapeType = TRIANGLE_SHAPE_PROXYTYPE;
- }
-
- btTriangleShape(const btVector3& p0, const btVector3& p1, const btVector3& p2) : btPolyhedralConvexShape()
- {
- m_shapeType = TRIANGLE_SHAPE_PROXYTYPE;
- m_vertices1[0] = p0;
- m_vertices1[1] = p1;
- m_vertices1[2] = p2;
- }
-
- virtual void getPlane(btVector3 & planeNormal, btVector3 & planeSupport, int i) const
- {
- getPlaneEquation(i, planeNormal, planeSupport);
- }
-
- virtual int getNumPlanes() const
- {
- return 1;
- }
-
- void calcNormal(btVector3 & normal) const
- {
- normal = (m_vertices1[1] - m_vertices1[0]).cross(m_vertices1[2] - m_vertices1[0]);
- normal.normalize();
- }
-
- virtual void getPlaneEquation(int i, btVector3& planeNormal, btVector3& planeSupport) const
- {
- (void)i;
- calcNormal(planeNormal);
- planeSupport = m_vertices1[0];
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const
- {
- (void)mass;
- btAssert(0);
- inertia.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- }
-
- virtual bool isInside(const btVector3& pt, btScalar tolerance) const
- {
- btVector3 normal;
- calcNormal(normal);
- //distance to plane
- btScalar dist = pt.dot(normal);
- btScalar planeconst = m_vertices1[0].dot(normal);
- dist -= planeconst;
- if (dist >= -tolerance && dist <= tolerance)
- {
- //inside check on edge-planes
- int i;
- for (i = 0; i < 3; i++)
- {
- btVector3 pa, pb;
- getEdge(i, pa, pb);
- btVector3 edge = pb - pa;
- btVector3 edgeNormal = edge.cross(normal);
- edgeNormal.normalize();
- btScalar dist = pt.dot(edgeNormal);
- btScalar edgeConst = pa.dot(edgeNormal);
- dist -= edgeConst;
- if (dist < -tolerance)
- return false;
- }
-
- return true;
- }
-
- return false;
- }
- //debugging
- virtual const char* getName() const
- {
- return "Triangle";
- }
-
- virtual int getNumPreferredPenetrationDirections() const
- {
- return 2;
- }
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const
- {
- calcNormal(penetrationVector);
- if (index)
- penetrationVector *= btScalar(-1.);
- }
-};
-
-#endif //BT_OBB_TRIANGLE_MINKOWSKI_H
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.cpp b/thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.cpp
deleted file mode 100644
index ed3cd2d259..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.cpp
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btUniformScalingShape.h"
-
-btUniformScalingShape::btUniformScalingShape(btConvexShape* convexChildShape, btScalar uniformScalingFactor) : btConvexShape(), m_childConvexShape(convexChildShape), m_uniformScalingFactor(uniformScalingFactor)
-{
- m_shapeType = UNIFORM_SCALING_SHAPE_PROXYTYPE;
-}
-
-btUniformScalingShape::~btUniformScalingShape()
-{
-}
-
-btVector3 btUniformScalingShape::localGetSupportingVertexWithoutMargin(const btVector3& vec) const
-{
- btVector3 tmpVertex;
- tmpVertex = m_childConvexShape->localGetSupportingVertexWithoutMargin(vec);
- return tmpVertex * m_uniformScalingFactor;
-}
-
-void btUniformScalingShape::batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
-{
- m_childConvexShape->batchedUnitVectorGetSupportingVertexWithoutMargin(vectors, supportVerticesOut, numVectors);
- int i;
- for (i = 0; i < numVectors; i++)
- {
- supportVerticesOut[i] = supportVerticesOut[i] * m_uniformScalingFactor;
- }
-}
-
-btVector3 btUniformScalingShape::localGetSupportingVertex(const btVector3& vec) const
-{
- btVector3 tmpVertex;
- tmpVertex = m_childConvexShape->localGetSupportingVertex(vec);
- return tmpVertex * m_uniformScalingFactor;
-}
-
-void btUniformScalingShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- ///this linear upscaling is not realistic, but we don't deal with large mass ratios...
- btVector3 tmpInertia;
- m_childConvexShape->calculateLocalInertia(mass, tmpInertia);
- inertia = tmpInertia * m_uniformScalingFactor;
-}
-
-///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
-void btUniformScalingShape::getAabb(const btTransform& trans, btVector3& aabbMin, btVector3& aabbMax) const
-{
- getAabbSlow(trans, aabbMin, aabbMax);
-}
-
-void btUniformScalingShape::getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
-{
-#if 1
- btVector3 _directions[] =
- {
- btVector3(1., 0., 0.),
- btVector3(0., 1., 0.),
- btVector3(0., 0., 1.),
- btVector3(-1., 0., 0.),
- btVector3(0., -1., 0.),
- btVector3(0., 0., -1.)};
-
- btVector3 _supporting[] =
- {
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.),
- btVector3(0., 0., 0.)};
-
- for (int i = 0; i < 6; i++)
- {
- _directions[i] = _directions[i] * t.getBasis();
- }
-
- batchedUnitVectorGetSupportingVertexWithoutMargin(_directions, _supporting, 6);
-
- btVector3 aabbMin1(0, 0, 0), aabbMax1(0, 0, 0);
-
- for (int i = 0; i < 3; ++i)
- {
- aabbMax1[i] = t(_supporting[i])[i];
- aabbMin1[i] = t(_supporting[i + 3])[i];
- }
- btVector3 marginVec(getMargin(), getMargin(), getMargin());
- aabbMin = aabbMin1 - marginVec;
- aabbMax = aabbMax1 + marginVec;
-
-#else
-
- btScalar margin = getMargin();
- for (int i = 0; i < 3; i++)
- {
- btVector3 vec(btScalar(0.), btScalar(0.), btScalar(0.));
- vec[i] = btScalar(1.);
- btVector3 sv = localGetSupportingVertex(vec * t.getBasis());
- btVector3 tmp = t(sv);
- aabbMax[i] = tmp[i] + margin;
- vec[i] = btScalar(-1.);
- sv = localGetSupportingVertex(vec * t.getBasis());
- tmp = t(sv);
- aabbMin[i] = tmp[i] - margin;
- }
-
-#endif
-}
-
-void btUniformScalingShape::setLocalScaling(const btVector3& scaling)
-{
- m_childConvexShape->setLocalScaling(scaling);
-}
-
-const btVector3& btUniformScalingShape::getLocalScaling() const
-{
- return m_childConvexShape->getLocalScaling();
-}
-
-void btUniformScalingShape::setMargin(btScalar margin)
-{
- m_childConvexShape->setMargin(margin);
-}
-btScalar btUniformScalingShape::getMargin() const
-{
- return m_childConvexShape->getMargin() * m_uniformScalingFactor;
-}
-
-int btUniformScalingShape::getNumPreferredPenetrationDirections() const
-{
- return m_childConvexShape->getNumPreferredPenetrationDirections();
-}
-
-void btUniformScalingShape::getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const
-{
- m_childConvexShape->getPreferredPenetrationDirection(index, penetrationVector);
-}
diff --git a/thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h b/thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h
deleted file mode 100644
index 4dfe34efbd..0000000000
--- a/thirdparty/bullet/BulletCollision/CollisionShapes/btUniformScalingShape.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_UNIFORM_SCALING_SHAPE_H
-#define BT_UNIFORM_SCALING_SHAPE_H
-
-#include "btConvexShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h" // for the types
-
-///The btUniformScalingShape allows to re-use uniform scaled instances of btConvexShape in a memory efficient way.
-///Istead of using btUniformScalingShape, it is better to use the non-uniform setLocalScaling method on convex shapes that implement it.
-ATTRIBUTE_ALIGNED16(class)
-btUniformScalingShape : public btConvexShape
-{
- btConvexShape* m_childConvexShape;
-
- btScalar m_uniformScalingFactor;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btUniformScalingShape(btConvexShape * convexChildShape, btScalar uniformScalingFactor);
-
- virtual ~btUniformScalingShape();
-
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const;
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const;
-
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const;
-
- virtual void calculateLocalInertia(btScalar mass, btVector3 & inertia) const;
-
- btScalar getUniformScalingFactor() const
- {
- return m_uniformScalingFactor;
- }
-
- btConvexShape* getChildShape()
- {
- return m_childConvexShape;
- }
-
- const btConvexShape* getChildShape() const
- {
- return m_childConvexShape;
- }
-
- virtual const char* getName() const
- {
- return "UniformScalingShape";
- }
-
- ///////////////////////////
-
- ///getAabb's default implementation is brute force, expected derived classes to implement a fast dedicated version
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void getAabbSlow(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const;
-
- virtual void setLocalScaling(const btVector3& scaling);
- virtual const btVector3& getLocalScaling() const;
-
- virtual void setMargin(btScalar margin);
- virtual btScalar getMargin() const;
-
- virtual int getNumPreferredPenetrationDirections() const;
-
- virtual void getPreferredPenetrationDirection(int index, btVector3& penetrationVector) const;
-};
-
-#endif //BT_UNIFORM_SCALING_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btBoxCollision.h b/thirdparty/bullet/BulletCollision/Gimpact/btBoxCollision.h
deleted file mode 100644
index 182835c3b4..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btBoxCollision.h
+++ /dev/null
@@ -1,620 +0,0 @@
-#ifndef BT_BOX_COLLISION_H_INCLUDED
-#define BT_BOX_COLLISION_H_INCLUDED
-
-/*! \file gim_box_collision.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btTransform.h"
-
-///Swap numbers
-#define BT_SWAP_NUMBERS(a, b) \
- { \
- a = a + b; \
- b = a - b; \
- a = a - b; \
- }
-
-#define BT_MAX(a, b) (a < b ? b : a)
-#define BT_MIN(a, b) (a > b ? b : a)
-
-#define BT_GREATER(x, y) btFabs(x) > (y)
-
-#define BT_MAX3(a, b, c) BT_MAX(a, BT_MAX(b, c))
-#define BT_MIN3(a, b, c) BT_MIN(a, BT_MIN(b, c))
-
-enum eBT_PLANE_INTERSECTION_TYPE
-{
- BT_CONST_BACK_PLANE = 0,
- BT_CONST_COLLIDE_PLANE,
- BT_CONST_FRONT_PLANE
-};
-
-//SIMD_FORCE_INLINE bool test_cross_edge_box(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, const btVector3 & extend,
-// int dir_index0,
-// int dir_index1
-// int component_index0,
-// int component_index1)
-//{
-// // dir coords are -z and y
-//
-// const btScalar dir0 = -edge[dir_index0];
-// const btScalar dir1 = edge[dir_index1];
-// btScalar pmin = pointa[component_index0]*dir0 + pointa[component_index1]*dir1;
-// btScalar pmax = pointb[component_index0]*dir0 + pointb[component_index1]*dir1;
-// //find minmax
-// if(pmin>pmax)
-// {
-// BT_SWAP_NUMBERS(pmin,pmax);
-// }
-// //find extends
-// const btScalar rad = extend[component_index0] * absolute_edge[dir_index0] +
-// extend[component_index1] * absolute_edge[dir_index1];
-//
-// if(pmin>rad || -rad>pmax) return false;
-// return true;
-//}
-//
-//SIMD_FORCE_INLINE bool test_cross_edge_box_X_axis(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, btVector3 & extend)
-//{
-//
-// return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,2,1,1,2);
-//}
-//
-//
-//SIMD_FORCE_INLINE bool test_cross_edge_box_Y_axis(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, btVector3 & extend)
-//{
-//
-// return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,0,2,2,0);
-//}
-//
-//SIMD_FORCE_INLINE bool test_cross_edge_box_Z_axis(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, btVector3 & extend)
-//{
-//
-// return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,1,0,0,1);
-//}
-
-#define TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, i_dir_0, i_dir_1, i_comp_0, i_comp_1) \
- { \
- const btScalar dir0 = -edge[i_dir_0]; \
- const btScalar dir1 = edge[i_dir_1]; \
- btScalar pmin = pointa[i_comp_0] * dir0 + pointa[i_comp_1] * dir1; \
- btScalar pmax = pointb[i_comp_0] * dir0 + pointb[i_comp_1] * dir1; \
- if (pmin > pmax) \
- { \
- BT_SWAP_NUMBERS(pmin, pmax); \
- } \
- const btScalar abs_dir0 = absolute_edge[i_dir_0]; \
- const btScalar abs_dir1 = absolute_edge[i_dir_1]; \
- const btScalar rad = _extend[i_comp_0] * abs_dir0 + _extend[i_comp_1] * abs_dir1; \
- if (pmin > rad || -rad > pmax) return false; \
- }
-
-#define TEST_CROSS_EDGE_BOX_X_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \
- { \
- TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 2, 1, 1, 2); \
- }
-
-#define TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \
- { \
- TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 0, 2, 2, 0); \
- }
-
-#define TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \
- { \
- TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 1, 0, 0, 1); \
- }
-
-//! Returns the dot product between a vec3f and the col of a matrix
-SIMD_FORCE_INLINE btScalar bt_mat3_dot_col(
- const btMatrix3x3 &mat, const btVector3 &vec3, int colindex)
-{
- return vec3[0] * mat[0][colindex] + vec3[1] * mat[1][colindex] + vec3[2] * mat[2][colindex];
-}
-
-//! Class for transforming a model1 to the space of model0
-ATTRIBUTE_ALIGNED16(class)
-BT_BOX_BOX_TRANSFORM_CACHE
-{
-public:
- btVector3 m_T1to0; //!< Transforms translation of model1 to model 0
- btMatrix3x3 m_R1to0; //!< Transforms Rotation of model1 to model 0, equal to R0' * R1
- btMatrix3x3 m_AR; //!< Absolute value of m_R1to0
-
- SIMD_FORCE_INLINE void calc_absolute_matrix()
- {
- // static const btVector3 vepsi(1e-6f,1e-6f,1e-6f);
- // m_AR[0] = vepsi + m_R1to0[0].absolute();
- // m_AR[1] = vepsi + m_R1to0[1].absolute();
- // m_AR[2] = vepsi + m_R1to0[2].absolute();
-
- int i, j;
-
- for (i = 0; i < 3; i++)
- {
- for (j = 0; j < 3; j++)
- {
- m_AR[i][j] = 1e-6f + btFabs(m_R1to0[i][j]);
- }
- }
- }
-
- BT_BOX_BOX_TRANSFORM_CACHE()
- {
- }
-
- //! Calc the transformation relative 1 to 0. Inverts matrics by transposing
- SIMD_FORCE_INLINE void calc_from_homogenic(const btTransform &trans0, const btTransform &trans1)
- {
- btTransform temp_trans = trans0.inverse();
- temp_trans = temp_trans * trans1;
-
- m_T1to0 = temp_trans.getOrigin();
- m_R1to0 = temp_trans.getBasis();
-
- calc_absolute_matrix();
- }
-
- //! Calcs the full invertion of the matrices. Useful for scaling matrices
- SIMD_FORCE_INLINE void calc_from_full_invert(const btTransform &trans0, const btTransform &trans1)
- {
- m_R1to0 = trans0.getBasis().inverse();
- m_T1to0 = m_R1to0 * (-trans0.getOrigin());
-
- m_T1to0 += m_R1to0 * trans1.getOrigin();
- m_R1to0 *= trans1.getBasis();
-
- calc_absolute_matrix();
- }
-
- SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point) const
- {
- return point.dot3(m_R1to0[0], m_R1to0[1], m_R1to0[2]) + m_T1to0;
- }
-};
-
-#define BOX_PLANE_EPSILON 0.000001f
-
-//! Axis aligned box
-ATTRIBUTE_ALIGNED16(class)
-btAABB
-{
-public:
- btVector3 m_min;
- btVector3 m_max;
-
- btAABB()
- {
- }
-
- btAABB(const btVector3 &V1,
- const btVector3 &V2,
- const btVector3 &V3)
- {
- m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]);
- }
-
- btAABB(const btVector3 &V1,
- const btVector3 &V2,
- const btVector3 &V3,
- btScalar margin)
- {
- m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]);
-
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- btAABB(const btAABB &other) : m_min(other.m_min), m_max(other.m_max)
- {
- }
-
- btAABB(const btAABB &other, btScalar margin) : m_min(other.m_min), m_max(other.m_max)
- {
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- SIMD_FORCE_INLINE void invalidate()
- {
- m_min[0] = SIMD_INFINITY;
- m_min[1] = SIMD_INFINITY;
- m_min[2] = SIMD_INFINITY;
- m_max[0] = -SIMD_INFINITY;
- m_max[1] = -SIMD_INFINITY;
- m_max[2] = -SIMD_INFINITY;
- }
-
- SIMD_FORCE_INLINE void increment_margin(btScalar margin)
- {
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- SIMD_FORCE_INLINE void copy_with_margin(const btAABB &other, btScalar margin)
- {
- m_min[0] = other.m_min[0] - margin;
- m_min[1] = other.m_min[1] - margin;
- m_min[2] = other.m_min[2] - margin;
-
- m_max[0] = other.m_max[0] + margin;
- m_max[1] = other.m_max[1] + margin;
- m_max[2] = other.m_max[2] + margin;
- }
-
- template <typename CLASS_POINT>
- SIMD_FORCE_INLINE void calc_from_triangle(
- const CLASS_POINT &V1,
- const CLASS_POINT &V2,
- const CLASS_POINT &V3)
- {
- m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]);
- }
-
- template <typename CLASS_POINT>
- SIMD_FORCE_INLINE void calc_from_triangle_margin(
- const CLASS_POINT &V1,
- const CLASS_POINT &V2,
- const CLASS_POINT &V3, btScalar margin)
- {
- m_min[0] = BT_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = BT_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = BT_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = BT_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = BT_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = BT_MAX3(V1[2], V2[2], V3[2]);
-
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- //! Apply a transform to an AABB
- SIMD_FORCE_INLINE void appy_transform(const btTransform &trans)
- {
- btVector3 center = (m_max + m_min) * 0.5f;
- btVector3 extends = m_max - center;
- // Compute new center
- center = trans(center);
-
- btVector3 textends = extends.dot3(trans.getBasis().getRow(0).absolute(),
- trans.getBasis().getRow(1).absolute(),
- trans.getBasis().getRow(2).absolute());
-
- m_min = center - textends;
- m_max = center + textends;
- }
-
- //! Apply a transform to an AABB
- SIMD_FORCE_INLINE void appy_transform_trans_cache(const BT_BOX_BOX_TRANSFORM_CACHE &trans)
- {
- btVector3 center = (m_max + m_min) * 0.5f;
- btVector3 extends = m_max - center;
- // Compute new center
- center = trans.transform(center);
-
- btVector3 textends = extends.dot3(trans.m_R1to0.getRow(0).absolute(),
- trans.m_R1to0.getRow(1).absolute(),
- trans.m_R1to0.getRow(2).absolute());
-
- m_min = center - textends;
- m_max = center + textends;
- }
-
- //! Merges a Box
- SIMD_FORCE_INLINE void merge(const btAABB &box)
- {
- m_min[0] = BT_MIN(m_min[0], box.m_min[0]);
- m_min[1] = BT_MIN(m_min[1], box.m_min[1]);
- m_min[2] = BT_MIN(m_min[2], box.m_min[2]);
-
- m_max[0] = BT_MAX(m_max[0], box.m_max[0]);
- m_max[1] = BT_MAX(m_max[1], box.m_max[1]);
- m_max[2] = BT_MAX(m_max[2], box.m_max[2]);
- }
-
- //! Merges a point
- template <typename CLASS_POINT>
- SIMD_FORCE_INLINE void merge_point(const CLASS_POINT &point)
- {
- m_min[0] = BT_MIN(m_min[0], point[0]);
- m_min[1] = BT_MIN(m_min[1], point[1]);
- m_min[2] = BT_MIN(m_min[2], point[2]);
-
- m_max[0] = BT_MAX(m_max[0], point[0]);
- m_max[1] = BT_MAX(m_max[1], point[1]);
- m_max[2] = BT_MAX(m_max[2], point[2]);
- }
-
- //! Gets the extend and center
- SIMD_FORCE_INLINE void get_center_extend(btVector3 & center, btVector3 & extend) const
- {
- center = (m_max + m_min) * 0.5f;
- extend = m_max - center;
- }
-
- //! Finds the intersecting box between this box and the other.
- SIMD_FORCE_INLINE void find_intersection(const btAABB &other, btAABB &intersection) const
- {
- intersection.m_min[0] = BT_MAX(other.m_min[0], m_min[0]);
- intersection.m_min[1] = BT_MAX(other.m_min[1], m_min[1]);
- intersection.m_min[2] = BT_MAX(other.m_min[2], m_min[2]);
-
- intersection.m_max[0] = BT_MIN(other.m_max[0], m_max[0]);
- intersection.m_max[1] = BT_MIN(other.m_max[1], m_max[1]);
- intersection.m_max[2] = BT_MIN(other.m_max[2], m_max[2]);
- }
-
- SIMD_FORCE_INLINE bool has_collision(const btAABB &other) const
- {
- if (m_min[0] > other.m_max[0] ||
- m_max[0] < other.m_min[0] ||
- m_min[1] > other.m_max[1] ||
- m_max[1] < other.m_min[1] ||
- m_min[2] > other.m_max[2] ||
- m_max[2] < other.m_min[2])
- {
- return false;
- }
- return true;
- }
-
- /*! \brief Finds the Ray intersection parameter.
- \param aabb Aligned box
- \param vorigin A vec3f with the origin of the ray
- \param vdir A vec3f with the direction of the ray
- */
- SIMD_FORCE_INLINE bool collide_ray(const btVector3 &vorigin, const btVector3 &vdir) const
- {
- btVector3 extents, center;
- this->get_center_extend(center, extents);
- ;
-
- btScalar Dx = vorigin[0] - center[0];
- if (BT_GREATER(Dx, extents[0]) && Dx * vdir[0] >= 0.0f) return false;
- btScalar Dy = vorigin[1] - center[1];
- if (BT_GREATER(Dy, extents[1]) && Dy * vdir[1] >= 0.0f) return false;
- btScalar Dz = vorigin[2] - center[2];
- if (BT_GREATER(Dz, extents[2]) && Dz * vdir[2] >= 0.0f) return false;
-
- btScalar f = vdir[1] * Dz - vdir[2] * Dy;
- if (btFabs(f) > extents[1] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[1])) return false;
- f = vdir[2] * Dx - vdir[0] * Dz;
- if (btFabs(f) > extents[0] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[0])) return false;
- f = vdir[0] * Dy - vdir[1] * Dx;
- if (btFabs(f) > extents[0] * btFabs(vdir[1]) + extents[1] * btFabs(vdir[0])) return false;
- return true;
- }
-
- SIMD_FORCE_INLINE void projection_interval(const btVector3 &direction, btScalar &vmin, btScalar &vmax) const
- {
- btVector3 center = (m_max + m_min) * 0.5f;
- btVector3 extend = m_max - center;
-
- btScalar _fOrigin = direction.dot(center);
- btScalar _fMaximumExtent = extend.dot(direction.absolute());
- vmin = _fOrigin - _fMaximumExtent;
- vmax = _fOrigin + _fMaximumExtent;
- }
-
- SIMD_FORCE_INLINE eBT_PLANE_INTERSECTION_TYPE plane_classify(const btVector4 &plane) const
- {
- btScalar _fmin, _fmax;
- this->projection_interval(plane, _fmin, _fmax);
-
- if (plane[3] > _fmax + BOX_PLANE_EPSILON)
- {
- return BT_CONST_BACK_PLANE; // 0
- }
-
- if (plane[3] + BOX_PLANE_EPSILON >= _fmin)
- {
- return BT_CONST_COLLIDE_PLANE; //1
- }
- return BT_CONST_FRONT_PLANE; //2
- }
-
- SIMD_FORCE_INLINE bool overlapping_trans_conservative(const btAABB &box, btTransform &trans1_to_0) const
- {
- btAABB tbox = box;
- tbox.appy_transform(trans1_to_0);
- return has_collision(tbox);
- }
-
- SIMD_FORCE_INLINE bool overlapping_trans_conservative2(const btAABB &box,
- const BT_BOX_BOX_TRANSFORM_CACHE &trans1_to_0) const
- {
- btAABB tbox = box;
- tbox.appy_transform_trans_cache(trans1_to_0);
- return has_collision(tbox);
- }
-
- //! transcache is the transformation cache from box to this AABB
- SIMD_FORCE_INLINE bool overlapping_trans_cache(
- const btAABB &box, const BT_BOX_BOX_TRANSFORM_CACHE &transcache, bool fulltest) const
- {
- //Taken from OPCODE
- btVector3 ea, eb; //extends
- btVector3 ca, cb; //extends
- get_center_extend(ca, ea);
- box.get_center_extend(cb, eb);
-
- btVector3 T;
- btScalar t, t2;
- int i;
-
- // Class I : A's basis vectors
- for (i = 0; i < 3; i++)
- {
- T[i] = transcache.m_R1to0[i].dot(cb) + transcache.m_T1to0[i] - ca[i];
- t = transcache.m_AR[i].dot(eb) + ea[i];
- if (BT_GREATER(T[i], t)) return false;
- }
- // Class II : B's basis vectors
- for (i = 0; i < 3; i++)
- {
- t = bt_mat3_dot_col(transcache.m_R1to0, T, i);
- t2 = bt_mat3_dot_col(transcache.m_AR, ea, i) + eb[i];
- if (BT_GREATER(t, t2)) return false;
- }
- // Class III : 9 cross products
- if (fulltest)
- {
- int j, m, n, o, p, q, r;
- for (i = 0; i < 3; i++)
- {
- m = (i + 1) % 3;
- n = (i + 2) % 3;
- o = i == 0 ? 1 : 0;
- p = i == 2 ? 1 : 2;
- for (j = 0; j < 3; j++)
- {
- q = j == 2 ? 1 : 2;
- r = j == 0 ? 1 : 0;
- t = T[n] * transcache.m_R1to0[m][j] - T[m] * transcache.m_R1to0[n][j];
- t2 = ea[o] * transcache.m_AR[p][j] + ea[p] * transcache.m_AR[o][j] +
- eb[r] * transcache.m_AR[i][q] + eb[q] * transcache.m_AR[i][r];
- if (BT_GREATER(t, t2)) return false;
- }
- }
- }
- return true;
- }
-
- //! Simple test for planes.
- SIMD_FORCE_INLINE bool collide_plane(
- const btVector4 &plane) const
- {
- eBT_PLANE_INTERSECTION_TYPE classify = plane_classify(plane);
- return (classify == BT_CONST_COLLIDE_PLANE);
- }
-
- //! test for a triangle, with edges
- SIMD_FORCE_INLINE bool collide_triangle_exact(
- const btVector3 &p1,
- const btVector3 &p2,
- const btVector3 &p3,
- const btVector4 &triangle_plane) const
- {
- if (!collide_plane(triangle_plane)) return false;
-
- btVector3 center, extends;
- this->get_center_extend(center, extends);
-
- const btVector3 v1(p1 - center);
- const btVector3 v2(p2 - center);
- const btVector3 v3(p3 - center);
-
- //First axis
- btVector3 diff(v2 - v1);
- btVector3 abs_diff = diff.absolute();
- //Test With X axis
- TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v1, v3, extends);
- //Test With Y axis
- TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v1, v3, extends);
- //Test With Z axis
- TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v1, v3, extends);
-
- diff = v3 - v2;
- abs_diff = diff.absolute();
- //Test With X axis
- TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v2, v1, extends);
- //Test With Y axis
- TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v2, v1, extends);
- //Test With Z axis
- TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v2, v1, extends);
-
- diff = v1 - v3;
- abs_diff = diff.absolute();
- //Test With X axis
- TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v3, v2, extends);
- //Test With Y axis
- TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v3, v2, extends);
- //Test With Z axis
- TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v3, v2, extends);
-
- return true;
- }
-};
-
-//! Compairison of transformation objects
-SIMD_FORCE_INLINE bool btCompareTransformsEqual(const btTransform &t1, const btTransform &t2)
-{
- if (!(t1.getOrigin() == t2.getOrigin())) return false;
-
- if (!(t1.getBasis().getRow(0) == t2.getBasis().getRow(0))) return false;
- if (!(t1.getBasis().getRow(1) == t2.getBasis().getRow(1))) return false;
- if (!(t1.getBasis().getRow(2) == t2.getBasis().getRow(2))) return false;
- return true;
-}
-
-#endif // GIM_BOX_COLLISION_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btClipPolygon.h b/thirdparty/bullet/BulletCollision/Gimpact/btClipPolygon.h
deleted file mode 100644
index 38c23e222d..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btClipPolygon.h
+++ /dev/null
@@ -1,173 +0,0 @@
-#ifndef BT_CLIP_POLYGON_H_INCLUDED
-#define BT_CLIP_POLYGON_H_INCLUDED
-
-/*! \file btClipPolygon.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btGeometryUtil.h"
-
-SIMD_FORCE_INLINE btScalar bt_distance_point_plane(const btVector4 &plane, const btVector3 &point)
-{
- return point.dot(plane) - plane[3];
-}
-
-/*! Vector blending
-Takes two vectors a, b, blends them together*/
-SIMD_FORCE_INLINE void bt_vec_blend(btVector3 &vr, const btVector3 &va, const btVector3 &vb, btScalar blend_factor)
-{
- vr = (1 - blend_factor) * va + blend_factor * vb;
-}
-
-//! This function calcs the distance from a 3D plane
-SIMD_FORCE_INLINE void bt_plane_clip_polygon_collect(
- const btVector3 &point0,
- const btVector3 &point1,
- btScalar dist0,
- btScalar dist1,
- btVector3 *clipped,
- int &clipped_count)
-{
- bool _prevclassif = (dist0 > SIMD_EPSILON);
- bool _classif = (dist1 > SIMD_EPSILON);
- if (_classif != _prevclassif)
- {
- btScalar blendfactor = -dist0 / (dist1 - dist0);
- bt_vec_blend(clipped[clipped_count], point0, point1, blendfactor);
- clipped_count++;
- }
- if (!_classif)
- {
- clipped[clipped_count] = point1;
- clipped_count++;
- }
-}
-
-//! Clips a polygon by a plane
-/*!
-*\return The count of the clipped counts
-*/
-SIMD_FORCE_INLINE int bt_plane_clip_polygon(
- const btVector4 &plane,
- const btVector3 *polygon_points,
- int polygon_point_count,
- btVector3 *clipped)
-{
- int clipped_count = 0;
-
- //clip first point
- btScalar firstdist = bt_distance_point_plane(plane, polygon_points[0]);
- ;
- if (!(firstdist > SIMD_EPSILON))
- {
- clipped[clipped_count] = polygon_points[0];
- clipped_count++;
- }
-
- btScalar olddist = firstdist;
- for (int i = 1; i < polygon_point_count; i++)
- {
- btScalar dist = bt_distance_point_plane(plane, polygon_points[i]);
-
- bt_plane_clip_polygon_collect(
- polygon_points[i - 1], polygon_points[i],
- olddist,
- dist,
- clipped,
- clipped_count);
-
- olddist = dist;
- }
-
- //RETURN TO FIRST point
-
- bt_plane_clip_polygon_collect(
- polygon_points[polygon_point_count - 1], polygon_points[0],
- olddist,
- firstdist,
- clipped,
- clipped_count);
-
- return clipped_count;
-}
-
-//! Clips a polygon by a plane
-/*!
-*\param clipped must be an array of 16 points.
-*\return The count of the clipped counts
-*/
-SIMD_FORCE_INLINE int bt_plane_clip_triangle(
- const btVector4 &plane,
- const btVector3 &point0,
- const btVector3 &point1,
- const btVector3 &point2,
- btVector3 *clipped // an allocated array of 16 points at least
-)
-{
- int clipped_count = 0;
-
- //clip first point0
- btScalar firstdist = bt_distance_point_plane(plane, point0);
- ;
- if (!(firstdist > SIMD_EPSILON))
- {
- clipped[clipped_count] = point0;
- clipped_count++;
- }
-
- // point 1
- btScalar olddist = firstdist;
- btScalar dist = bt_distance_point_plane(plane, point1);
-
- bt_plane_clip_polygon_collect(
- point0, point1,
- olddist,
- dist,
- clipped,
- clipped_count);
-
- olddist = dist;
-
- // point 2
- dist = bt_distance_point_plane(plane, point2);
-
- bt_plane_clip_polygon_collect(
- point1, point2,
- olddist,
- dist,
- clipped,
- clipped_count);
- olddist = dist;
-
- //RETURN TO FIRST point0
- bt_plane_clip_polygon_collect(
- point2, point0,
- olddist,
- firstdist,
- clipped,
- clipped_count);
-
- return clipped_count;
-}
-
-#endif // GIM_TRI_COLLISION_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btCompoundFromGimpact.h b/thirdparty/bullet/BulletCollision/Gimpact/btCompoundFromGimpact.h
deleted file mode 100644
index ede59e8a57..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btCompoundFromGimpact.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef BT_COMPOUND_FROM_GIMPACT
-#define BT_COMPOUND_FROM_GIMPACT
-
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "btGImpactShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
-
-ATTRIBUTE_ALIGNED16(class)
-btCompoundFromGimpactShape : public btCompoundShape
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- virtual ~btCompoundFromGimpactShape()
- {
- /*delete all the btBU_Simplex1to4 ChildShapes*/
- for (int i = 0; i < m_children.size(); i++)
- {
- delete m_children[i].m_childShape;
- }
- }
-};
-
-struct MyCallback : public btTriangleRaycastCallback
-{
- int m_ignorePart;
- int m_ignoreTriangleIndex;
-
- MyCallback(const btVector3& from, const btVector3& to, int ignorePart, int ignoreTriangleIndex)
- : btTriangleRaycastCallback(from, to),
- m_ignorePart(ignorePart),
- m_ignoreTriangleIndex(ignoreTriangleIndex)
- {
- }
- virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex)
- {
- if (partId != m_ignorePart || triangleIndex != m_ignoreTriangleIndex)
- {
- if (hitFraction < m_hitFraction)
- return hitFraction;
- }
-
- return m_hitFraction;
- }
-};
-struct MyInternalTriangleIndexCallback : public btInternalTriangleIndexCallback
-{
- const btGImpactMeshShape* m_gimpactShape;
- btCompoundShape* m_colShape;
- btScalar m_depth;
-
- MyInternalTriangleIndexCallback(btCompoundShape* colShape, const btGImpactMeshShape* meshShape, btScalar depth)
- : m_colShape(colShape),
- m_gimpactShape(meshShape),
- m_depth(depth)
- {
- }
-
- virtual void internalProcessTriangleIndex(btVector3* triangle, int partId, int triangleIndex)
- {
- btVector3 scale = m_gimpactShape->getLocalScaling();
- btVector3 v0 = triangle[0] * scale;
- btVector3 v1 = triangle[1] * scale;
- btVector3 v2 = triangle[2] * scale;
-
- btVector3 centroid = (v0 + v1 + v2) / 3;
- btVector3 normal = (v1 - v0).cross(v2 - v0);
- normal.normalize();
- btVector3 rayFrom = centroid;
- btVector3 rayTo = centroid - normal * m_depth;
-
- MyCallback cb(rayFrom, rayTo, partId, triangleIndex);
-
- m_gimpactShape->processAllTrianglesRay(&cb, rayFrom, rayTo);
- if (cb.m_hitFraction < 1)
- {
- rayTo.setInterpolate3(cb.m_from, cb.m_to, cb.m_hitFraction);
- //rayTo = cb.m_from;
- //rayTo = rayTo.lerp(cb.m_to,cb.m_hitFraction);
- //gDebugDraw.drawLine(tr(centroid),tr(centroid+normal),btVector3(1,0,0));
- }
-
- btBU_Simplex1to4* tet = new btBU_Simplex1to4(v0, v1, v2, rayTo);
- btTransform ident;
- ident.setIdentity();
- m_colShape->addChildShape(ident, tet);
- }
-};
-
-btCompoundShape* btCreateCompoundFromGimpactShape(const btGImpactMeshShape* gimpactMesh, btScalar depth)
-{
- btCompoundShape* colShape = new btCompoundFromGimpactShape();
-
- btTransform tr;
- tr.setIdentity();
-
- MyInternalTriangleIndexCallback cb(colShape, gimpactMesh, depth);
- btVector3 aabbMin, aabbMax;
- gimpactMesh->getAabb(tr, aabbMin, aabbMax);
- gimpactMesh->getMeshInterface()->InternalProcessAllTriangles(&cb, aabbMin, aabbMax);
-
- return colShape;
-}
-
-#endif //BT_COMPOUND_FROM_GIMPACT
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.cpp
deleted file mode 100644
index f2e3e18d61..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#include "btContactProcessing.h"
-
-#define MAX_COINCIDENT 8
-
-struct CONTACT_KEY_TOKEN
-{
- unsigned int m_key;
- int m_value;
- CONTACT_KEY_TOKEN()
- {
- }
-
- CONTACT_KEY_TOKEN(unsigned int key, int token)
- {
- m_key = key;
- m_value = token;
- }
-
- CONTACT_KEY_TOKEN(const CONTACT_KEY_TOKEN& rtoken)
- {
- m_key = rtoken.m_key;
- m_value = rtoken.m_value;
- }
-
- inline bool operator<(const CONTACT_KEY_TOKEN& other) const
- {
- return (m_key < other.m_key);
- }
-
- inline bool operator>(const CONTACT_KEY_TOKEN& other) const
- {
- return (m_key > other.m_key);
- }
-};
-
-class CONTACT_KEY_TOKEN_COMP
-{
-public:
- bool operator()(const CONTACT_KEY_TOKEN& a, const CONTACT_KEY_TOKEN& b) const
- {
- return (a < b);
- }
-};
-
-void btContactArray::merge_contacts(
- const btContactArray& contacts, bool normal_contact_average)
-{
- clear();
-
- int i;
- if (contacts.size() == 0) return;
-
- if (contacts.size() == 1)
- {
- push_back(contacts[0]);
- return;
- }
-
- btAlignedObjectArray<CONTACT_KEY_TOKEN> keycontacts;
-
- keycontacts.reserve(contacts.size());
-
- //fill key contacts
-
- for (i = 0; i < contacts.size(); i++)
- {
- keycontacts.push_back(CONTACT_KEY_TOKEN(contacts[i].calc_key_contact(), i));
- }
-
- //sort keys
- keycontacts.quickSort(CONTACT_KEY_TOKEN_COMP());
-
- // Merge contacts
- int coincident_count = 0;
- btVector3 coincident_normals[MAX_COINCIDENT];
-
- unsigned int last_key = keycontacts[0].m_key;
- unsigned int key = 0;
-
- push_back(contacts[keycontacts[0].m_value]);
-
- GIM_CONTACT* pcontact = &(*this)[0];
-
- for (i = 1; i < keycontacts.size(); i++)
- {
- key = keycontacts[i].m_key;
- const GIM_CONTACT* scontact = &contacts[keycontacts[i].m_value];
-
- if (last_key == key) //same points
- {
- //merge contact
- if (pcontact->m_depth - CONTACT_DIFF_EPSILON > scontact->m_depth) //)
- {
- *pcontact = *scontact;
- coincident_count = 0;
- }
- else if (normal_contact_average)
- {
- if (btFabs(pcontact->m_depth - scontact->m_depth) < CONTACT_DIFF_EPSILON)
- {
- if (coincident_count < MAX_COINCIDENT)
- {
- coincident_normals[coincident_count] = scontact->m_normal;
- coincident_count++;
- }
- }
- }
- }
- else
- { //add new contact
-
- if (normal_contact_average && coincident_count > 0)
- {
- pcontact->interpolate_normals(coincident_normals, coincident_count);
- coincident_count = 0;
- }
-
- push_back(*scontact);
- pcontact = &(*this)[this->size() - 1];
- }
- last_key = key;
- }
-}
-
-void btContactArray::merge_contacts_unique(const btContactArray& contacts)
-{
- clear();
-
- if (contacts.size() == 0) return;
-
- if (contacts.size() == 1)
- {
- push_back(contacts[0]);
- return;
- }
-
- GIM_CONTACT average_contact = contacts[0];
-
- for (int i = 1; i < contacts.size(); i++)
- {
- average_contact.m_point += contacts[i].m_point;
- average_contact.m_normal += contacts[i].m_normal * contacts[i].m_depth;
- }
-
- //divide
- btScalar divide_average = 1.0f / ((btScalar)contacts.size());
-
- average_contact.m_point *= divide_average;
-
- average_contact.m_normal *= divide_average;
-
- average_contact.m_depth = average_contact.m_normal.length();
-
- average_contact.m_normal /= average_contact.m_depth;
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.h b/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.h
deleted file mode 100644
index 4ff09d7cdd..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessing.h
+++ /dev/null
@@ -1,65 +0,0 @@
-#ifndef BT_CONTACT_H_INCLUDED
-#define BT_CONTACT_H_INCLUDED
-
-/*! \file gim_contact.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "btTriangleShapeEx.h"
-#include "btContactProcessingStructs.h"
-
-class btContactArray : public btAlignedObjectArray<GIM_CONTACT>
-{
-public:
- btContactArray()
- {
- reserve(64);
- }
-
- SIMD_FORCE_INLINE void push_contact(
- const btVector3 &point, const btVector3 &normal,
- btScalar depth, int feature1, int feature2)
- {
- push_back(GIM_CONTACT(point, normal, depth, feature1, feature2));
- }
-
- SIMD_FORCE_INLINE void push_triangle_contacts(
- const GIM_TRIANGLE_CONTACT &tricontact,
- int feature1, int feature2)
- {
- for (int i = 0; i < tricontact.m_point_count; i++)
- {
- push_contact(
- tricontact.m_points[i],
- tricontact.m_separating_normal,
- tricontact.m_penetration_depth, feature1, feature2);
- }
- }
-
- void merge_contacts(const btContactArray &contacts, bool normal_contact_average = true);
-
- void merge_contacts_unique(const btContactArray &contacts);
-};
-
-#endif // GIM_CONTACT_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessingStructs.h b/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessingStructs.h
deleted file mode 100644
index bc8a709246..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btContactProcessingStructs.h
+++ /dev/null
@@ -1,105 +0,0 @@
-#ifndef BT_CONTACT_H_STRUCTS_INCLUDED
-#define BT_CONTACT_H_STRUCTS_INCLUDED
-
-/*! \file gim_contact.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "btTriangleShapeEx.h"
-
-/**
-Configuration var for applying interpolation of contact normals
-*/
-#define NORMAL_CONTACT_AVERAGE 1
-
-#define CONTACT_DIFF_EPSILON 0.00001f
-
-///The GIM_CONTACT is an internal GIMPACT structure, similar to btManifoldPoint.
-///@todo: remove and replace GIM_CONTACT by btManifoldPoint.
-class GIM_CONTACT
-{
-public:
- btVector3 m_point;
- btVector3 m_normal;
- btScalar m_depth; //Positive value indicates interpenetration
- btScalar m_distance; //Padding not for use
- int m_feature1; //Face number
- int m_feature2; //Face number
-public:
- GIM_CONTACT()
- {
- }
-
- GIM_CONTACT(const GIM_CONTACT &contact) : m_point(contact.m_point),
- m_normal(contact.m_normal),
- m_depth(contact.m_depth),
- m_feature1(contact.m_feature1),
- m_feature2(contact.m_feature2)
- {
- }
-
- GIM_CONTACT(const btVector3 &point, const btVector3 &normal,
- btScalar depth, int feature1, int feature2) : m_point(point),
- m_normal(normal),
- m_depth(depth),
- m_feature1(feature1),
- m_feature2(feature2)
- {
- }
-
- //! Calcs key for coord classification
- SIMD_FORCE_INLINE unsigned int calc_key_contact() const
- {
- int _coords[] = {
- (int)(m_point[0] * 1000.0f + 1.0f),
- (int)(m_point[1] * 1333.0f),
- (int)(m_point[2] * 2133.0f + 3.0f)};
- unsigned int _hash = 0;
- unsigned int *_uitmp = (unsigned int *)(&_coords[0]);
- _hash = *_uitmp;
- _uitmp++;
- _hash += (*_uitmp) << 4;
- _uitmp++;
- _hash += (*_uitmp) << 8;
- return _hash;
- }
-
- SIMD_FORCE_INLINE void interpolate_normals(btVector3 *normals, int normal_count)
- {
- btVector3 vec_sum(m_normal);
- for (int i = 0; i < normal_count; i++)
- {
- vec_sum += normals[i];
- }
-
- btScalar vec_sum_len = vec_sum.length2();
- if (vec_sum_len < CONTACT_DIFF_EPSILON) return;
-
- //GIM_INV_SQRT(vec_sum_len,vec_sum_len); // 1/sqrt(vec_sum_len)
-
- m_normal = vec_sum / btSqrt(vec_sum_len);
- }
-};
-
-#endif // BT_CONTACT_H_STRUCTS_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.cpp
deleted file mode 100644
index bb520e061d..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.cpp
+++ /dev/null
@@ -1,464 +0,0 @@
-/*! \file gim_box_set.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#include "btGImpactBvh.h"
-#include "LinearMath/btQuickprof.h"
-
-#ifdef TRI_COLLISION_PROFILING
-
-btClock g_tree_clock;
-
-float g_accum_tree_collision_time = 0;
-int g_count_traversing = 0;
-
-void bt_begin_gim02_tree_time()
-{
- g_tree_clock.reset();
-}
-
-void bt_end_gim02_tree_time()
-{
- g_accum_tree_collision_time += g_tree_clock.getTimeMicroseconds();
- g_count_traversing++;
-}
-
-//! Gets the average time in miliseconds of tree collisions
-float btGImpactBvh::getAverageTreeCollisionTime()
-{
- if (g_count_traversing == 0) return 0;
-
- float avgtime = g_accum_tree_collision_time;
- avgtime /= (float)g_count_traversing;
-
- g_accum_tree_collision_time = 0;
- g_count_traversing = 0;
- return avgtime;
-
- // float avgtime = g_count_traversing;
- // g_count_traversing = 0;
- // return avgtime;
-}
-
-#endif //TRI_COLLISION_PROFILING
-
-/////////////////////// btBvhTree /////////////////////////////////
-
-int btBvhTree::_calc_splitting_axis(
- GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex)
-{
- int i;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- btVector3 variance(btScalar(0.), btScalar(0.), btScalar(0.));
- int numIndices = endIndex - startIndex;
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- btVector3 diff2 = center - means;
- diff2 = diff2 * diff2;
- variance += diff2;
- }
- variance *= (btScalar(1.) / ((btScalar)numIndices - 1));
-
- return variance.maxAxis();
-}
-
-int btBvhTree::_sort_and_calc_splitting_index(
- GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex,
- int endIndex, int splitAxis)
-{
- int i;
- int splitIndex = startIndex;
- int numIndices = endIndex - startIndex;
-
- // average of centers
- btScalar splitValue = 0.0f;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- splitValue = means[splitAxis];
-
- //sort leafNodes so all values larger then splitValue comes first, and smaller values start from 'splitIndex'.
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- if (center[splitAxis] > splitValue)
- {
- //swap
- primitive_boxes.swap(i, splitIndex);
- //swapLeafNodes(i,splitIndex);
- splitIndex++;
- }
- }
-
- //if the splitIndex causes unbalanced trees, fix this by using the center in between startIndex and endIndex
- //otherwise the tree-building might fail due to stack-overflows in certain cases.
- //unbalanced1 is unsafe: it can cause stack overflows
- //bool unbalanced1 = ((splitIndex==startIndex) || (splitIndex == (endIndex-1)));
-
- //unbalanced2 should work too: always use center (perfect balanced trees)
- //bool unbalanced2 = true;
-
- //this should be safe too:
- int rangeBalancedIndices = numIndices / 3;
- bool unbalanced = ((splitIndex <= (startIndex + rangeBalancedIndices)) || (splitIndex >= (endIndex - 1 - rangeBalancedIndices)));
-
- if (unbalanced)
- {
- splitIndex = startIndex + (numIndices >> 1);
- }
-
- btAssert(!((splitIndex == startIndex) || (splitIndex == (endIndex))));
-
- return splitIndex;
-}
-
-void btBvhTree::_build_sub_tree(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex)
-{
- int curIndex = m_num_nodes;
- m_num_nodes++;
-
- btAssert((endIndex - startIndex) > 0);
-
- if ((endIndex - startIndex) == 1)
- {
- //We have a leaf node
- setNodeBound(curIndex, primitive_boxes[startIndex].m_bound);
- m_node_array[curIndex].setDataIndex(primitive_boxes[startIndex].m_data);
-
- return;
- }
- //calculate Best Splitting Axis and where to split it. Sort the incoming 'leafNodes' array within range 'startIndex/endIndex'.
-
- //split axis
- int splitIndex = _calc_splitting_axis(primitive_boxes, startIndex, endIndex);
-
- splitIndex = _sort_and_calc_splitting_index(
- primitive_boxes, startIndex, endIndex,
- splitIndex //split axis
- );
-
- //calc this node bounding box
-
- btAABB node_bound;
- node_bound.invalidate();
-
- for (int i = startIndex; i < endIndex; i++)
- {
- node_bound.merge(primitive_boxes[i].m_bound);
- }
-
- setNodeBound(curIndex, node_bound);
-
- //build left branch
- _build_sub_tree(primitive_boxes, startIndex, splitIndex);
-
- //build right branch
- _build_sub_tree(primitive_boxes, splitIndex, endIndex);
-
- m_node_array[curIndex].setEscapeIndex(m_num_nodes - curIndex);
-}
-
-//! stackless build tree
-void btBvhTree::build_tree(
- GIM_BVH_DATA_ARRAY& primitive_boxes)
-{
- // initialize node count to 0
- m_num_nodes = 0;
- // allocate nodes
- m_node_array.resize(primitive_boxes.size() * 2);
-
- _build_sub_tree(primitive_boxes, 0, primitive_boxes.size());
-}
-
-////////////////////////////////////class btGImpactBvh
-
-void btGImpactBvh::refit()
-{
- int nodecount = getNodeCount();
- while (nodecount--)
- {
- if (isLeafNode(nodecount))
- {
- btAABB leafbox;
- m_primitive_manager->get_primitive_box(getNodeData(nodecount), leafbox);
- setNodeBound(nodecount, leafbox);
- }
- else
- {
- //const GIM_BVH_TREE_NODE * nodepointer = get_node_pointer(nodecount);
- //get left bound
- btAABB bound;
- bound.invalidate();
-
- btAABB temp_box;
-
- int child_node = getLeftNode(nodecount);
- if (child_node)
- {
- getNodeBound(child_node, temp_box);
- bound.merge(temp_box);
- }
-
- child_node = getRightNode(nodecount);
- if (child_node)
- {
- getNodeBound(child_node, temp_box);
- bound.merge(temp_box);
- }
-
- setNodeBound(nodecount, bound);
- }
- }
-}
-
-//! this rebuild the entire set
-void btGImpactBvh::buildSet()
-{
- //obtain primitive boxes
- GIM_BVH_DATA_ARRAY primitive_boxes;
- primitive_boxes.resize(m_primitive_manager->get_primitive_count());
-
- for (int i = 0; i < primitive_boxes.size(); i++)
- {
- m_primitive_manager->get_primitive_box(i, primitive_boxes[i].m_bound);
- primitive_boxes[i].m_data = i;
- }
-
- m_box_tree.build_tree(primitive_boxes);
-}
-
-//! returns the indices of the primitives in the m_primitive_manager
-bool btGImpactBvh::boxQuery(const btAABB& box, btAlignedObjectArray<int>& collided_results) const
-{
- int curIndex = 0;
- int numNodes = getNodeCount();
-
- while (curIndex < numNodes)
- {
- btAABB bound;
- getNodeBound(curIndex, bound);
-
- //catch bugs in tree data
-
- bool aabbOverlap = bound.has_collision(box);
- bool isleafnode = isLeafNode(curIndex);
-
- if (isleafnode && aabbOverlap)
- {
- collided_results.push_back(getNodeData(curIndex));
- }
-
- if (aabbOverlap || isleafnode)
- {
- //next subnode
- curIndex++;
- }
- else
- {
- //skip node
- curIndex += getEscapeNodeIndex(curIndex);
- }
- }
- if (collided_results.size() > 0) return true;
- return false;
-}
-
-//! returns the indices of the primitives in the m_primitive_manager
-bool btGImpactBvh::rayQuery(
- const btVector3& ray_dir, const btVector3& ray_origin,
- btAlignedObjectArray<int>& collided_results) const
-{
- int curIndex = 0;
- int numNodes = getNodeCount();
-
- while (curIndex < numNodes)
- {
- btAABB bound;
- getNodeBound(curIndex, bound);
-
- //catch bugs in tree data
-
- bool aabbOverlap = bound.collide_ray(ray_origin, ray_dir);
- bool isleafnode = isLeafNode(curIndex);
-
- if (isleafnode && aabbOverlap)
- {
- collided_results.push_back(getNodeData(curIndex));
- }
-
- if (aabbOverlap || isleafnode)
- {
- //next subnode
- curIndex++;
- }
- else
- {
- //skip node
- curIndex += getEscapeNodeIndex(curIndex);
- }
- }
- if (collided_results.size() > 0) return true;
- return false;
-}
-
-SIMD_FORCE_INLINE bool _node_collision(
- btGImpactBvh* boxset0, btGImpactBvh* boxset1,
- const BT_BOX_BOX_TRANSFORM_CACHE& trans_cache_1to0,
- int node0, int node1, bool complete_primitive_tests)
-{
- btAABB box0;
- boxset0->getNodeBound(node0, box0);
- btAABB box1;
- boxset1->getNodeBound(node1, box1);
-
- return box0.overlapping_trans_cache(box1, trans_cache_1to0, complete_primitive_tests);
- // box1.appy_transform_trans_cache(trans_cache_1to0);
- // return box0.has_collision(box1);
-}
-
-//stackless recursive collision routine
-static void _find_collision_pairs_recursive(
- btGImpactBvh* boxset0, btGImpactBvh* boxset1,
- btPairSet* collision_pairs,
- const BT_BOX_BOX_TRANSFORM_CACHE& trans_cache_1to0,
- int node0, int node1, bool complete_primitive_tests)
-{
- if (_node_collision(
- boxset0, boxset1, trans_cache_1to0,
- node0, node1, complete_primitive_tests) == false) return; //avoid colliding internal nodes
-
- if (boxset0->isLeafNode(node0))
- {
- if (boxset1->isLeafNode(node1))
- {
- // collision result
- collision_pairs->push_pair(
- boxset0->getNodeData(node0), boxset1->getNodeData(node1));
- return;
- }
- else
- {
- //collide left recursive
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- node0, boxset1->getLeftNode(node1), false);
-
- //collide right recursive
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- node0, boxset1->getRightNode(node1), false);
- }
- }
- else
- {
- if (boxset1->isLeafNode(node1))
- {
- //collide left recursive
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getLeftNode(node0), node1, false);
-
- //collide right recursive
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getRightNode(node0), node1, false);
- }
- else
- {
- //collide left0 left1
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getLeftNode(node0), boxset1->getLeftNode(node1), false);
-
- //collide left0 right1
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getLeftNode(node0), boxset1->getRightNode(node1), false);
-
- //collide right0 left1
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getRightNode(node0), boxset1->getLeftNode(node1), false);
-
- //collide right0 right1
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getRightNode(node0), boxset1->getRightNode(node1), false);
-
- } // else if node1 is not a leaf
- } // else if node0 is not a leaf
-}
-
-void btGImpactBvh::find_collision(btGImpactBvh* boxset0, const btTransform& trans0,
- btGImpactBvh* boxset1, const btTransform& trans1,
- btPairSet& collision_pairs)
-{
- if (boxset0->getNodeCount() == 0 || boxset1->getNodeCount() == 0) return;
-
- BT_BOX_BOX_TRANSFORM_CACHE trans_cache_1to0;
-
- trans_cache_1to0.calc_from_homogenic(trans0, trans1);
-
-#ifdef TRI_COLLISION_PROFILING
- bt_begin_gim02_tree_time();
-#endif //TRI_COLLISION_PROFILING
-
- _find_collision_pairs_recursive(
- boxset0, boxset1,
- &collision_pairs, trans_cache_1to0, 0, 0, true);
-#ifdef TRI_COLLISION_PROFILING
- bt_end_gim02_tree_time();
-#endif //TRI_COLLISION_PROFILING
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.h
deleted file mode 100644
index 3cd8fa24e7..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvh.h
+++ /dev/null
@@ -1,309 +0,0 @@
-#ifndef BT_GIMPACT_BVH_H_INCLUDED
-#define BT_GIMPACT_BVH_H_INCLUDED
-
-/*! \file gim_box_set.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btAlignedObjectArray.h"
-
-#include "btBoxCollision.h"
-#include "btTriangleShapeEx.h"
-#include "btGImpactBvhStructs.h"
-
-//! A pairset array
-class btPairSet : public btAlignedObjectArray<GIM_PAIR>
-{
-public:
- btPairSet()
- {
- reserve(32);
- }
- inline void push_pair(int index1, int index2)
- {
- push_back(GIM_PAIR(index1, index2));
- }
-
- inline void push_pair_inv(int index1, int index2)
- {
- push_back(GIM_PAIR(index2, index1));
- }
-};
-
-class GIM_BVH_DATA_ARRAY : public btAlignedObjectArray<GIM_BVH_DATA>
-{
-};
-
-class GIM_BVH_TREE_NODE_ARRAY : public btAlignedObjectArray<GIM_BVH_TREE_NODE>
-{
-};
-
-//! Basic Box tree structure
-class btBvhTree
-{
-protected:
- int m_num_nodes;
- GIM_BVH_TREE_NODE_ARRAY m_node_array;
-
-protected:
- int _sort_and_calc_splitting_index(
- GIM_BVH_DATA_ARRAY& primitive_boxes,
- int startIndex, int endIndex, int splitAxis);
-
- int _calc_splitting_axis(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex);
-
- void _build_sub_tree(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex);
-
-public:
- btBvhTree()
- {
- m_num_nodes = 0;
- }
-
- //! prototype functions for box tree management
- //!@{
- void build_tree(GIM_BVH_DATA_ARRAY& primitive_boxes);
-
- SIMD_FORCE_INLINE void clearNodes()
- {
- m_node_array.clear();
- m_num_nodes = 0;
- }
-
- //! node count
- SIMD_FORCE_INLINE int getNodeCount() const
- {
- return m_num_nodes;
- }
-
- //! tells if the node is a leaf
- SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const
- {
- return m_node_array[nodeindex].isLeafNode();
- }
-
- SIMD_FORCE_INLINE int getNodeData(int nodeindex) const
- {
- return m_node_array[nodeindex].getDataIndex();
- }
-
- SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const
- {
- bound = m_node_array[nodeindex].m_bound;
- }
-
- SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound)
- {
- m_node_array[nodeindex].m_bound = bound;
- }
-
- SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const
- {
- return nodeindex + 1;
- }
-
- SIMD_FORCE_INLINE int getRightNode(int nodeindex) const
- {
- if (m_node_array[nodeindex + 1].isLeafNode()) return nodeindex + 2;
- return nodeindex + 1 + m_node_array[nodeindex + 1].getEscapeIndex();
- }
-
- SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const
- {
- return m_node_array[nodeindex].getEscapeIndex();
- }
-
- SIMD_FORCE_INLINE const GIM_BVH_TREE_NODE* get_node_pointer(int index = 0) const
- {
- return &m_node_array[index];
- }
-
- //!@}
-};
-
-//! Prototype Base class for primitive classification
-/*!
-This class is a wrapper for primitive collections.
-This tells relevant info for the Bounding Box set classes, which take care of space classification.
-This class can manage Compound shapes and trimeshes, and if it is managing trimesh then the Hierarchy Bounding Box classes will take advantage of primitive Vs Box overlapping tests for getting optimal results and less Per Box compairisons.
-*/
-class btPrimitiveManagerBase
-{
-public:
- virtual ~btPrimitiveManagerBase() {}
-
- //! determines if this manager consist on only triangles, which special case will be optimized
- virtual bool is_trimesh() const = 0;
- virtual int get_primitive_count() const = 0;
- virtual void get_primitive_box(int prim_index, btAABB& primbox) const = 0;
- //! retrieves only the points of the triangle, and the collision margin
- virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const = 0;
-};
-
-//! Structure for containing Boxes
-/*!
-This class offers an structure for managing a box tree of primitives.
-Requires a Primitive prototype (like btPrimitiveManagerBase )
-*/
-class btGImpactBvh
-{
-protected:
- btBvhTree m_box_tree;
- btPrimitiveManagerBase* m_primitive_manager;
-
-protected:
- //stackless refit
- void refit();
-
-public:
- //! this constructor doesn't build the tree. you must call buildSet
- btGImpactBvh()
- {
- m_primitive_manager = NULL;
- }
-
- //! this constructor doesn't build the tree. you must call buildSet
- btGImpactBvh(btPrimitiveManagerBase* primitive_manager)
- {
- m_primitive_manager = primitive_manager;
- }
-
- SIMD_FORCE_INLINE btAABB getGlobalBox() const
- {
- btAABB totalbox;
- getNodeBound(0, totalbox);
- return totalbox;
- }
-
- SIMD_FORCE_INLINE void setPrimitiveManager(btPrimitiveManagerBase* primitive_manager)
- {
- m_primitive_manager = primitive_manager;
- }
-
- SIMD_FORCE_INLINE btPrimitiveManagerBase* getPrimitiveManager() const
- {
- return m_primitive_manager;
- }
-
- //! node manager prototype functions
- ///@{
-
- //! this attemps to refit the box set.
- SIMD_FORCE_INLINE void update()
- {
- refit();
- }
-
- //! this rebuild the entire set
- void buildSet();
-
- //! returns the indices of the primitives in the m_primitive_manager
- bool boxQuery(const btAABB& box, btAlignedObjectArray<int>& collided_results) const;
-
- //! returns the indices of the primitives in the m_primitive_manager
- SIMD_FORCE_INLINE bool boxQueryTrans(const btAABB& box,
- const btTransform& transform, btAlignedObjectArray<int>& collided_results) const
- {
- btAABB transbox = box;
- transbox.appy_transform(transform);
- return boxQuery(transbox, collided_results);
- }
-
- //! returns the indices of the primitives in the m_primitive_manager
- bool rayQuery(
- const btVector3& ray_dir, const btVector3& ray_origin,
- btAlignedObjectArray<int>& collided_results) const;
-
- //! tells if this set has hierarcht
- SIMD_FORCE_INLINE bool hasHierarchy() const
- {
- return true;
- }
-
- //! tells if this set is a trimesh
- SIMD_FORCE_INLINE bool isTrimesh() const
- {
- return m_primitive_manager->is_trimesh();
- }
-
- //! node count
- SIMD_FORCE_INLINE int getNodeCount() const
- {
- return m_box_tree.getNodeCount();
- }
-
- //! tells if the node is a leaf
- SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const
- {
- return m_box_tree.isLeafNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE int getNodeData(int nodeindex) const
- {
- return m_box_tree.getNodeData(nodeindex);
- }
-
- SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const
- {
- m_box_tree.getNodeBound(nodeindex, bound);
- }
-
- SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound)
- {
- m_box_tree.setNodeBound(nodeindex, bound);
- }
-
- SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const
- {
- return m_box_tree.getLeftNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE int getRightNode(int nodeindex) const
- {
- return m_box_tree.getRightNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const
- {
- return m_box_tree.getEscapeNodeIndex(nodeindex);
- }
-
- SIMD_FORCE_INLINE void getNodeTriangle(int nodeindex, btPrimitiveTriangle& triangle) const
- {
- m_primitive_manager->get_primitive_triangle(getNodeData(nodeindex), triangle);
- }
-
- SIMD_FORCE_INLINE const GIM_BVH_TREE_NODE* get_node_pointer(int index = 0) const
- {
- return m_box_tree.get_node_pointer(index);
- }
-
-#ifdef TRI_COLLISION_PROFILING
- static float getAverageTreeCollisionTime();
-#endif //TRI_COLLISION_PROFILING
-
- static void find_collision(btGImpactBvh* boxset1, const btTransform& trans1,
- btGImpactBvh* boxset2, const btTransform& trans2,
- btPairSet& collision_pairs);
-};
-
-#endif // BT_GIMPACT_BVH_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvhStructs.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvhStructs.h
deleted file mode 100644
index 8f78c234b4..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactBvhStructs.h
+++ /dev/null
@@ -1,85 +0,0 @@
-#ifndef GIM_BOX_SET_STRUCT_H_INCLUDED
-#define GIM_BOX_SET_STRUCT_H_INCLUDED
-
-/*! \file gim_box_set.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btAlignedObjectArray.h"
-
-#include "btBoxCollision.h"
-#include "btTriangleShapeEx.h"
-#include "gim_pair.h" //for GIM_PAIR
-
-///GIM_BVH_DATA is an internal GIMPACT collision structure to contain axis aligned bounding box
-struct GIM_BVH_DATA
-{
- btAABB m_bound;
- int m_data;
-};
-
-//! Node Structure for trees
-class GIM_BVH_TREE_NODE
-{
-public:
- btAABB m_bound;
-
-protected:
- int m_escapeIndexOrDataIndex;
-
-public:
- GIM_BVH_TREE_NODE()
- {
- m_escapeIndexOrDataIndex = 0;
- }
-
- SIMD_FORCE_INLINE bool isLeafNode() const
- {
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (m_escapeIndexOrDataIndex >= 0);
- }
-
- SIMD_FORCE_INLINE int getEscapeIndex() const
- {
- //btAssert(m_escapeIndexOrDataIndex < 0);
- return -m_escapeIndexOrDataIndex;
- }
-
- SIMD_FORCE_INLINE void setEscapeIndex(int index)
- {
- m_escapeIndexOrDataIndex = -index;
- }
-
- SIMD_FORCE_INLINE int getDataIndex() const
- {
- //btAssert(m_escapeIndexOrDataIndex >= 0);
-
- return m_escapeIndexOrDataIndex;
- }
-
- SIMD_FORCE_INLINE void setDataIndex(int index)
- {
- m_escapeIndexOrDataIndex = index;
- }
-};
-
-#endif // GIM_BOXPRUNING_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp
deleted file mode 100644
index 73e3db1010..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,866 +0,0 @@
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-/*
-Author: Francisco Leon Najera
-Concave-Concave Collision
-
-*/
-
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "btGImpactCollisionAlgorithm.h"
-#include "btContactProcessing.h"
-#include "LinearMath/btQuickprof.h"
-
-//! Class for accessing the plane equation
-class btPlaneShape : public btStaticPlaneShape
-{
-public:
- btPlaneShape(const btVector3& v, float f)
- : btStaticPlaneShape(v, f)
- {
- }
-
- void get_plane_equation(btVector4& equation)
- {
- equation[0] = m_planeNormal[0];
- equation[1] = m_planeNormal[1];
- equation[2] = m_planeNormal[2];
- equation[3] = m_planeConstant;
- }
-
- void get_plane_equation_transformed(const btTransform& trans, btVector4& equation) const
- {
- const btVector3 normal = trans.getBasis() * m_planeNormal;
- equation[0] = normal[0];
- equation[1] = normal[1];
- equation[2] = normal[2];
- equation[3] = normal.dot(trans * (m_planeConstant * m_planeNormal));
- }
-};
-
-//////////////////////////////////////////////////////////////////////////////////////////////
-#ifdef TRI_COLLISION_PROFILING
-
-btClock g_triangle_clock;
-
-float g_accum_triangle_collision_time = 0;
-int g_count_triangle_collision = 0;
-
-void bt_begin_gim02_tri_time()
-{
- g_triangle_clock.reset();
-}
-
-void bt_end_gim02_tri_time()
-{
- g_accum_triangle_collision_time += g_triangle_clock.getTimeMicroseconds();
- g_count_triangle_collision++;
-}
-#endif //TRI_COLLISION_PROFILING
-//! Retrieving shapes shapes
-/*!
-Declared here due of insuficent space on Pool allocators
-*/
-//!@{
-class GIM_ShapeRetriever
-{
-public:
- const btGImpactShapeInterface* m_gim_shape;
- btTriangleShapeEx m_trishape;
- btTetrahedronShapeEx m_tetrashape;
-
-public:
- class ChildShapeRetriever
- {
- public:
- GIM_ShapeRetriever* m_parent;
- virtual const btCollisionShape* getChildShape(int index)
- {
- return m_parent->m_gim_shape->getChildShape(index);
- }
- virtual ~ChildShapeRetriever() {}
- };
-
- class TriangleShapeRetriever : public ChildShapeRetriever
- {
- public:
- virtual btCollisionShape* getChildShape(int index)
- {
- m_parent->m_gim_shape->getBulletTriangle(index, m_parent->m_trishape);
- return &m_parent->m_trishape;
- }
- virtual ~TriangleShapeRetriever() {}
- };
-
- class TetraShapeRetriever : public ChildShapeRetriever
- {
- public:
- virtual btCollisionShape* getChildShape(int index)
- {
- m_parent->m_gim_shape->getBulletTetrahedron(index, m_parent->m_tetrashape);
- return &m_parent->m_tetrashape;
- }
- };
-
-public:
- ChildShapeRetriever m_child_retriever;
- TriangleShapeRetriever m_tri_retriever;
- TetraShapeRetriever m_tetra_retriever;
- ChildShapeRetriever* m_current_retriever;
-
- GIM_ShapeRetriever(const btGImpactShapeInterface* gim_shape)
- {
- m_gim_shape = gim_shape;
- //select retriever
- if (m_gim_shape->needsRetrieveTriangles())
- {
- m_current_retriever = &m_tri_retriever;
- }
- else if (m_gim_shape->needsRetrieveTetrahedrons())
- {
- m_current_retriever = &m_tetra_retriever;
- }
- else
- {
- m_current_retriever = &m_child_retriever;
- }
-
- m_current_retriever->m_parent = this;
- }
-
- const btCollisionShape* getChildShape(int index)
- {
- return m_current_retriever->getChildShape(index);
- }
-};
-
-//!@}
-
-#ifdef TRI_COLLISION_PROFILING
-
-//! Gets the average time in miliseconds of tree collisions
-float btGImpactCollisionAlgorithm::getAverageTreeCollisionTime()
-{
- return btGImpactBoxSet::getAverageTreeCollisionTime();
-}
-
-//! Gets the average time in miliseconds of triangle collisions
-float btGImpactCollisionAlgorithm::getAverageTriangleCollisionTime()
-{
- if (g_count_triangle_collision == 0) return 0;
-
- float avgtime = g_accum_triangle_collision_time;
- avgtime /= (float)g_count_triangle_collision;
-
- g_accum_triangle_collision_time = 0;
- g_count_triangle_collision = 0;
-
- return avgtime;
-}
-
-#endif //TRI_COLLISION_PROFILING
-
-btGImpactCollisionAlgorithm::btGImpactCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- : btActivatingCollisionAlgorithm(ci, body0Wrap, body1Wrap)
-{
- m_manifoldPtr = NULL;
- m_convex_algorithm = NULL;
-}
-
-btGImpactCollisionAlgorithm::~btGImpactCollisionAlgorithm()
-{
- clearCache();
-}
-
-void btGImpactCollisionAlgorithm::addContactPoint(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btVector3& point,
- const btVector3& normal,
- btScalar distance)
-{
- m_resultOut->setShapeIdentifiersA(m_part0, m_triface0);
- m_resultOut->setShapeIdentifiersB(m_part1, m_triface1);
- checkManifold(body0Wrap, body1Wrap);
- m_resultOut->addContactPoint(normal, point, distance);
-}
-
-void btGImpactCollisionAlgorithm::shape_vs_shape_collision(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btCollisionShape* shape0,
- const btCollisionShape* shape1)
-{
- {
- btCollisionAlgorithm* algor = newAlgorithm(body0Wrap, body1Wrap);
- // post : checkManifold is called
-
- m_resultOut->setShapeIdentifiersA(m_part0, m_triface0);
- m_resultOut->setShapeIdentifiersB(m_part1, m_triface1);
-
- algor->processCollision(body0Wrap, body1Wrap, *m_dispatchInfo, m_resultOut);
-
- algor->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(algor);
- }
-}
-
-void btGImpactCollisionAlgorithm::convex_vs_convex_collision(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btCollisionShape* shape0,
- const btCollisionShape* shape1)
-{
- m_resultOut->setShapeIdentifiersA(m_part0, m_triface0);
- m_resultOut->setShapeIdentifiersB(m_part1, m_triface1);
-
- btCollisionObjectWrapper ob0(body0Wrap, shape0, body0Wrap->getCollisionObject(), body0Wrap->getWorldTransform(), m_part0, m_triface0);
- btCollisionObjectWrapper ob1(body1Wrap, shape1, body1Wrap->getCollisionObject(), body1Wrap->getWorldTransform(), m_part1, m_triface1);
- checkConvexAlgorithm(&ob0, &ob1);
- m_convex_algorithm->processCollision(&ob0, &ob1, *m_dispatchInfo, m_resultOut);
-}
-
-void btGImpactCollisionAlgorithm::gimpact_vs_gimpact_find_pairs(
- const btTransform& trans0,
- const btTransform& trans1,
- const btGImpactShapeInterface* shape0,
- const btGImpactShapeInterface* shape1, btPairSet& pairset)
-{
- if (shape0->hasBoxSet() && shape1->hasBoxSet())
- {
- btGImpactBoxSet::find_collision(shape0->getBoxSet(), trans0, shape1->getBoxSet(), trans1, pairset);
- }
- else
- {
- btAABB boxshape0;
- btAABB boxshape1;
- int i = shape0->getNumChildShapes();
-
- while (i--)
- {
- shape0->getChildAabb(i, trans0, boxshape0.m_min, boxshape0.m_max);
-
- int j = shape1->getNumChildShapes();
- while (j--)
- {
- shape1->getChildAabb(i, trans1, boxshape1.m_min, boxshape1.m_max);
-
- if (boxshape1.has_collision(boxshape0))
- {
- pairset.push_pair(i, j);
- }
- }
- }
- }
-}
-
-void btGImpactCollisionAlgorithm::gimpact_vs_shape_find_pairs(
- const btTransform& trans0,
- const btTransform& trans1,
- const btGImpactShapeInterface* shape0,
- const btCollisionShape* shape1,
- btAlignedObjectArray<int>& collided_primitives)
-{
- btAABB boxshape;
-
- if (shape0->hasBoxSet())
- {
- btTransform trans1to0 = trans0.inverse();
- trans1to0 *= trans1;
-
- shape1->getAabb(trans1to0, boxshape.m_min, boxshape.m_max);
-
- shape0->getBoxSet()->boxQuery(boxshape, collided_primitives);
- }
- else
- {
- shape1->getAabb(trans1, boxshape.m_min, boxshape.m_max);
-
- btAABB boxshape0;
- int i = shape0->getNumChildShapes();
-
- while (i--)
- {
- shape0->getChildAabb(i, trans0, boxshape0.m_min, boxshape0.m_max);
-
- if (boxshape.has_collision(boxshape0))
- {
- collided_primitives.push_back(i);
- }
- }
- }
-}
-
-void btGImpactCollisionAlgorithm::collide_gjk_triangles(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactMeshShapePart* shape0,
- const btGImpactMeshShapePart* shape1,
- const int* pairs, int pair_count)
-{
- btTriangleShapeEx tri0;
- btTriangleShapeEx tri1;
-
- shape0->lockChildShapes();
- shape1->lockChildShapes();
-
- const int* pair_pointer = pairs;
-
- while (pair_count--)
- {
- m_triface0 = *(pair_pointer);
- m_triface1 = *(pair_pointer + 1);
- pair_pointer += 2;
-
- shape0->getBulletTriangle(m_triface0, tri0);
- shape1->getBulletTriangle(m_triface1, tri1);
-
- //collide two convex shapes
- if (tri0.overlap_test_conservative(tri1))
- {
- convex_vs_convex_collision(body0Wrap, body1Wrap, &tri0, &tri1);
- }
- }
-
- shape0->unlockChildShapes();
- shape1->unlockChildShapes();
-}
-
-void btGImpactCollisionAlgorithm::collide_sat_triangles(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactMeshShapePart* shape0,
- const btGImpactMeshShapePart* shape1,
- const int* pairs, int pair_count)
-{
- btTransform orgtrans0 = body0Wrap->getWorldTransform();
- btTransform orgtrans1 = body1Wrap->getWorldTransform();
-
- btPrimitiveTriangle ptri0;
- btPrimitiveTriangle ptri1;
- GIM_TRIANGLE_CONTACT contact_data;
-
- shape0->lockChildShapes();
- shape1->lockChildShapes();
-
- const int* pair_pointer = pairs;
-
- while (pair_count--)
- {
- m_triface0 = *(pair_pointer);
- m_triface1 = *(pair_pointer + 1);
- pair_pointer += 2;
-
- shape0->getPrimitiveTriangle(m_triface0, ptri0);
- shape1->getPrimitiveTriangle(m_triface1, ptri1);
-
-#ifdef TRI_COLLISION_PROFILING
- bt_begin_gim02_tri_time();
-#endif
-
- ptri0.applyTransform(orgtrans0);
- ptri1.applyTransform(orgtrans1);
-
- //build planes
- ptri0.buildTriPlane();
- ptri1.buildTriPlane();
- // test conservative
-
- if (ptri0.overlap_test_conservative(ptri1))
- {
- if (ptri0.find_triangle_collision_clip_method(ptri1, contact_data))
- {
- int j = contact_data.m_point_count;
- while (j--)
- {
- addContactPoint(body0Wrap, body1Wrap,
- contact_data.m_points[j],
- contact_data.m_separating_normal,
- -contact_data.m_penetration_depth);
- }
- }
- }
-
-#ifdef TRI_COLLISION_PROFILING
- bt_end_gim02_tri_time();
-#endif
- }
-
- shape0->unlockChildShapes();
- shape1->unlockChildShapes();
-}
-
-void btGImpactCollisionAlgorithm::gimpact_vs_gimpact(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btGImpactShapeInterface* shape1)
-{
- if (shape0->getGImpactShapeType() == CONST_GIMPACT_TRIMESH_SHAPE)
- {
- const btGImpactMeshShape* meshshape0 = static_cast<const btGImpactMeshShape*>(shape0);
- m_part0 = meshshape0->getMeshPartCount();
-
- while (m_part0--)
- {
- gimpact_vs_gimpact(body0Wrap, body1Wrap, meshshape0->getMeshPart(m_part0), shape1);
- }
-
- return;
- }
-
- if (shape1->getGImpactShapeType() == CONST_GIMPACT_TRIMESH_SHAPE)
- {
- const btGImpactMeshShape* meshshape1 = static_cast<const btGImpactMeshShape*>(shape1);
- m_part1 = meshshape1->getMeshPartCount();
-
- while (m_part1--)
- {
- gimpact_vs_gimpact(body0Wrap, body1Wrap, shape0, meshshape1->getMeshPart(m_part1));
- }
-
- return;
- }
-
- btTransform orgtrans0 = body0Wrap->getWorldTransform();
- btTransform orgtrans1 = body1Wrap->getWorldTransform();
-
- btPairSet pairset;
-
- gimpact_vs_gimpact_find_pairs(orgtrans0, orgtrans1, shape0, shape1, pairset);
-
- if (pairset.size() == 0) return;
-
- if (shape0->getGImpactShapeType() == CONST_GIMPACT_TRIMESH_SHAPE_PART &&
- shape1->getGImpactShapeType() == CONST_GIMPACT_TRIMESH_SHAPE_PART)
- {
- const btGImpactMeshShapePart* shapepart0 = static_cast<const btGImpactMeshShapePart*>(shape0);
- const btGImpactMeshShapePart* shapepart1 = static_cast<const btGImpactMeshShapePart*>(shape1);
-//specialized function
-#ifdef BULLET_TRIANGLE_COLLISION
- collide_gjk_triangles(body0Wrap, body1Wrap, shapepart0, shapepart1, &pairset[0].m_index1, pairset.size());
-#else
- collide_sat_triangles(body0Wrap, body1Wrap, shapepart0, shapepart1, &pairset[0].m_index1, pairset.size());
-#endif
-
- return;
- }
-
- //general function
-
- shape0->lockChildShapes();
- shape1->lockChildShapes();
-
- GIM_ShapeRetriever retriever0(shape0);
- GIM_ShapeRetriever retriever1(shape1);
-
- bool child_has_transform0 = shape0->childrenHasTransform();
- bool child_has_transform1 = shape1->childrenHasTransform();
-
- int i = pairset.size();
- while (i--)
- {
- GIM_PAIR* pair = &pairset[i];
- m_triface0 = pair->m_index1;
- m_triface1 = pair->m_index2;
- const btCollisionShape* colshape0 = retriever0.getChildShape(m_triface0);
- const btCollisionShape* colshape1 = retriever1.getChildShape(m_triface1);
-
- btTransform tr0 = body0Wrap->getWorldTransform();
- btTransform tr1 = body1Wrap->getWorldTransform();
-
- if (child_has_transform0)
- {
- tr0 = orgtrans0 * shape0->getChildTransform(m_triface0);
- }
-
- if (child_has_transform1)
- {
- tr1 = orgtrans1 * shape1->getChildTransform(m_triface1);
- }
-
- btCollisionObjectWrapper ob0(body0Wrap, colshape0, body0Wrap->getCollisionObject(), tr0, m_part0, m_triface0);
- btCollisionObjectWrapper ob1(body1Wrap, colshape1, body1Wrap->getCollisionObject(), tr1, m_part1, m_triface1);
-
- //collide two convex shapes
- convex_vs_convex_collision(&ob0, &ob1, colshape0, colshape1);
- }
-
- shape0->unlockChildShapes();
- shape1->unlockChildShapes();
-}
-
-void btGImpactCollisionAlgorithm::gimpact_vs_shape(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btCollisionShape* shape1, bool swapped)
-{
- if (shape0->getGImpactShapeType() == CONST_GIMPACT_TRIMESH_SHAPE)
- {
- const btGImpactMeshShape* meshshape0 = static_cast<const btGImpactMeshShape*>(shape0);
- int& part = swapped ? m_part1 : m_part0;
- part = meshshape0->getMeshPartCount();
-
- while (part--)
- {
- gimpact_vs_shape(body0Wrap,
- body1Wrap,
- meshshape0->getMeshPart(part),
- shape1, swapped);
- }
-
- return;
- }
-
-#ifdef GIMPACT_VS_PLANE_COLLISION
- if (shape0->getGImpactShapeType() == CONST_GIMPACT_TRIMESH_SHAPE_PART &&
- shape1->getShapeType() == STATIC_PLANE_PROXYTYPE)
- {
- const btGImpactMeshShapePart* shapepart = static_cast<const btGImpactMeshShapePart*>(shape0);
- const btStaticPlaneShape* planeshape = static_cast<const btStaticPlaneShape*>(shape1);
- gimpacttrimeshpart_vs_plane_collision(body0Wrap, body1Wrap, shapepart, planeshape, swapped);
- return;
- }
-
-#endif
-
- if (shape1->isCompound())
- {
- const btCompoundShape* compoundshape = static_cast<const btCompoundShape*>(shape1);
- gimpact_vs_compoundshape(body0Wrap, body1Wrap, shape0, compoundshape, swapped);
- return;
- }
- else if (shape1->isConcave())
- {
- const btConcaveShape* concaveshape = static_cast<const btConcaveShape*>(shape1);
- gimpact_vs_concave(body0Wrap, body1Wrap, shape0, concaveshape, swapped);
- return;
- }
-
- btTransform orgtrans0 = body0Wrap->getWorldTransform();
-
- btTransform orgtrans1 = body1Wrap->getWorldTransform();
-
- btAlignedObjectArray<int> collided_results;
-
- gimpact_vs_shape_find_pairs(orgtrans0, orgtrans1, shape0, shape1, collided_results);
-
- if (collided_results.size() == 0) return;
-
- shape0->lockChildShapes();
-
- GIM_ShapeRetriever retriever0(shape0);
-
- bool child_has_transform0 = shape0->childrenHasTransform();
-
- int i = collided_results.size();
-
- while (i--)
- {
- int child_index = collided_results[i];
- if (swapped)
- m_triface1 = child_index;
- else
- m_triface0 = child_index;
-
- const btCollisionShape* colshape0 = retriever0.getChildShape(child_index);
-
- btTransform tr0 = body0Wrap->getWorldTransform();
-
- if (child_has_transform0)
- {
- tr0 = orgtrans0 * shape0->getChildTransform(child_index);
- }
-
- btCollisionObjectWrapper ob0(body0Wrap, colshape0, body0Wrap->getCollisionObject(), body0Wrap->getWorldTransform(), m_part0, m_triface0);
- const btCollisionObjectWrapper* prevObj;
-
- if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob0.getCollisionObject())
- {
- prevObj = m_resultOut->getBody0Wrap();
- m_resultOut->setBody0Wrap(&ob0);
- }
- else
- {
- prevObj = m_resultOut->getBody1Wrap();
- m_resultOut->setBody1Wrap(&ob0);
- }
-
- //collide two shapes
- if (swapped)
- {
- shape_vs_shape_collision(body1Wrap, &ob0, shape1, colshape0);
- }
- else
- {
- shape_vs_shape_collision(&ob0, body1Wrap, colshape0, shape1);
- }
-
- if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob0.getCollisionObject())
- {
- m_resultOut->setBody0Wrap(prevObj);
- }
- else
- {
- m_resultOut->setBody1Wrap(prevObj);
- }
- }
-
- shape0->unlockChildShapes();
-}
-
-void btGImpactCollisionAlgorithm::gimpact_vs_compoundshape(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btCompoundShape* shape1, bool swapped)
-{
- btTransform orgtrans1 = body1Wrap->getWorldTransform();
-
- int i = shape1->getNumChildShapes();
- while (i--)
- {
- const btCollisionShape* colshape1 = shape1->getChildShape(i);
- btTransform childtrans1 = orgtrans1 * shape1->getChildTransform(i);
-
- btCollisionObjectWrapper ob1(body1Wrap, colshape1, body1Wrap->getCollisionObject(), childtrans1, -1, i);
-
- const btCollisionObjectWrapper* tmp = 0;
- if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob1.getCollisionObject())
- {
- tmp = m_resultOut->getBody0Wrap();
- m_resultOut->setBody0Wrap(&ob1);
- }
- else
- {
- tmp = m_resultOut->getBody1Wrap();
- m_resultOut->setBody1Wrap(&ob1);
- }
- //collide child shape
- gimpact_vs_shape(body0Wrap, &ob1,
- shape0, colshape1, swapped);
-
- if (m_resultOut->getBody0Wrap()->getCollisionObject() == ob1.getCollisionObject())
- {
- m_resultOut->setBody0Wrap(tmp);
- }
- else
- {
- m_resultOut->setBody1Wrap(tmp);
- }
- }
-}
-
-void btGImpactCollisionAlgorithm::gimpacttrimeshpart_vs_plane_collision(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactMeshShapePart* shape0,
- const btStaticPlaneShape* shape1, bool swapped)
-{
- btTransform orgtrans0 = body0Wrap->getWorldTransform();
- btTransform orgtrans1 = body1Wrap->getWorldTransform();
-
- const btPlaneShape* planeshape = static_cast<const btPlaneShape*>(shape1);
- btVector4 plane;
- planeshape->get_plane_equation_transformed(orgtrans1, plane);
-
- //test box against plane
-
- btAABB tribox;
- shape0->getAabb(orgtrans0, tribox.m_min, tribox.m_max);
- tribox.increment_margin(planeshape->getMargin());
-
- if (tribox.plane_classify(plane) != BT_CONST_COLLIDE_PLANE) return;
-
- shape0->lockChildShapes();
-
- btScalar margin = shape0->getMargin() + planeshape->getMargin();
-
- btVector3 vertex;
- int vi = shape0->getVertexCount();
- while (vi--)
- {
- shape0->getVertex(vi, vertex);
- vertex = orgtrans0(vertex);
-
- btScalar distance = vertex.dot(plane) - plane[3] - margin;
-
- if (distance < 0.0) //add contact
- {
- if (swapped)
- {
- addContactPoint(body1Wrap, body0Wrap,
- vertex,
- -plane,
- distance);
- }
- else
- {
- addContactPoint(body0Wrap, body1Wrap,
- vertex,
- plane,
- distance);
- }
- }
- }
-
- shape0->unlockChildShapes();
-}
-
-class btGImpactTriangleCallback : public btTriangleCallback
-{
-public:
- btGImpactCollisionAlgorithm* algorithm;
- const btCollisionObjectWrapper* body0Wrap;
- const btCollisionObjectWrapper* body1Wrap;
- const btGImpactShapeInterface* gimpactshape0;
- bool swapped;
- btScalar margin;
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- btTriangleShapeEx tri1(triangle[0], triangle[1], triangle[2]);
- tri1.setMargin(margin);
- if (swapped)
- {
- algorithm->setPart0(partId);
- algorithm->setFace0(triangleIndex);
- }
- else
- {
- algorithm->setPart1(partId);
- algorithm->setFace1(triangleIndex);
- }
-
- btCollisionObjectWrapper ob1Wrap(body1Wrap, &tri1, body1Wrap->getCollisionObject(), body1Wrap->getWorldTransform(), partId, triangleIndex);
- const btCollisionObjectWrapper* tmp = 0;
-
- if (algorithm->internalGetResultOut()->getBody0Wrap()->getCollisionObject() == ob1Wrap.getCollisionObject())
- {
- tmp = algorithm->internalGetResultOut()->getBody0Wrap();
- algorithm->internalGetResultOut()->setBody0Wrap(&ob1Wrap);
- }
- else
- {
- tmp = algorithm->internalGetResultOut()->getBody1Wrap();
- algorithm->internalGetResultOut()->setBody1Wrap(&ob1Wrap);
- }
-
- algorithm->gimpact_vs_shape(
- body0Wrap, &ob1Wrap, gimpactshape0, &tri1, swapped);
-
- if (algorithm->internalGetResultOut()->getBody0Wrap()->getCollisionObject() == ob1Wrap.getCollisionObject())
- {
- algorithm->internalGetResultOut()->setBody0Wrap(tmp);
- }
- else
- {
- algorithm->internalGetResultOut()->setBody1Wrap(tmp);
- }
- }
-};
-
-void btGImpactCollisionAlgorithm::gimpact_vs_concave(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btConcaveShape* shape1, bool swapped)
-{
- //create the callback
- btGImpactTriangleCallback tricallback;
- tricallback.algorithm = this;
- tricallback.body0Wrap = body0Wrap;
- tricallback.body1Wrap = body1Wrap;
- tricallback.gimpactshape0 = shape0;
- tricallback.swapped = swapped;
- tricallback.margin = shape1->getMargin();
-
- //getting the trimesh AABB
- btTransform gimpactInConcaveSpace;
-
- gimpactInConcaveSpace = body1Wrap->getWorldTransform().inverse() * body0Wrap->getWorldTransform();
-
- btVector3 minAABB, maxAABB;
- shape0->getAabb(gimpactInConcaveSpace, minAABB, maxAABB);
-
- shape1->processAllTriangles(&tricallback, minAABB, maxAABB);
-}
-
-void btGImpactCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- clearCache();
-
- m_resultOut = resultOut;
- m_dispatchInfo = &dispatchInfo;
- const btGImpactShapeInterface* gimpactshape0;
- const btGImpactShapeInterface* gimpactshape1;
-
- if (body0Wrap->getCollisionShape()->getShapeType() == GIMPACT_SHAPE_PROXYTYPE)
- {
- gimpactshape0 = static_cast<const btGImpactShapeInterface*>(body0Wrap->getCollisionShape());
-
- if (body1Wrap->getCollisionShape()->getShapeType() == GIMPACT_SHAPE_PROXYTYPE)
- {
- gimpactshape1 = static_cast<const btGImpactShapeInterface*>(body1Wrap->getCollisionShape());
-
- gimpact_vs_gimpact(body0Wrap, body1Wrap, gimpactshape0, gimpactshape1);
- }
- else
- {
- gimpact_vs_shape(body0Wrap, body1Wrap, gimpactshape0, body1Wrap->getCollisionShape(), false);
- }
- }
- else if (body1Wrap->getCollisionShape()->getShapeType() == GIMPACT_SHAPE_PROXYTYPE)
- {
- gimpactshape1 = static_cast<const btGImpactShapeInterface*>(body1Wrap->getCollisionShape());
-
- gimpact_vs_shape(body1Wrap, body0Wrap, gimpactshape1, body0Wrap->getCollisionShape(), true);
- }
-
- // Ensure that gContactProcessedCallback is called for concave shapes.
- if (getLastManifold())
- {
- m_resultOut->refreshContactPoints();
- }
-}
-
-btScalar btGImpactCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- return 1.f;
-}
-
-///////////////////////////////////// REGISTERING ALGORITHM //////////////////////////////////////////////
-
-//! Use this function for register the algorithm externally
-void btGImpactCollisionAlgorithm::registerAlgorithm(btCollisionDispatcher* dispatcher)
-{
- static btGImpactCollisionAlgorithm::CreateFunc s_gimpact_cf;
-
- int i;
-
- for (i = 0; i < MAX_BROADPHASE_COLLISION_TYPES; i++)
- {
- dispatcher->registerCollisionCreateFunc(GIMPACT_SHAPE_PROXYTYPE, i, &s_gimpact_cf);
- }
-
- for (i = 0; i < MAX_BROADPHASE_COLLISION_TYPES; i++)
- {
- dispatcher->registerCollisionCreateFunc(i, GIMPACT_SHAPE_PROXYTYPE, &s_gimpact_cf);
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h
deleted file mode 100644
index a368c8a0c0..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactCollisionAlgorithm.h
+++ /dev/null
@@ -1,288 +0,0 @@
-/*! \file btGImpactShape.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GIMPACT_BVH_CONCAVE_COLLISION_ALGORITHM_H
-#define BT_GIMPACT_BVH_CONCAVE_COLLISION_ALGORITHM_H
-
-#include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-class btDispatcher;
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-
-#include "LinearMath/btAlignedObjectArray.h"
-
-#include "btGImpactShape.h"
-#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-//! Collision Algorithm for GImpact Shapes
-/*!
-For register this algorithm in Bullet, proceed as following:
- \code
-btCollisionDispatcher * dispatcher = static_cast<btCollisionDispatcher *>(m_dynamicsWorld ->getDispatcher());
-btGImpactCollisionAlgorithm::registerAlgorithm(dispatcher);
- \endcode
-*/
-class btGImpactCollisionAlgorithm : public btActivatingCollisionAlgorithm
-{
-protected:
- btCollisionAlgorithm* m_convex_algorithm;
- btPersistentManifold* m_manifoldPtr;
- btManifoldResult* m_resultOut;
- const btDispatcherInfo* m_dispatchInfo;
- int m_triface0;
- int m_part0;
- int m_triface1;
- int m_part1;
-
- //! Creates a new contact point
- SIMD_FORCE_INLINE btPersistentManifold* newContactManifold(const btCollisionObject* body0, const btCollisionObject* body1)
- {
- m_manifoldPtr = m_dispatcher->getNewManifold(body0, body1);
- return m_manifoldPtr;
- }
-
- SIMD_FORCE_INLINE void destroyConvexAlgorithm()
- {
- if (m_convex_algorithm)
- {
- m_convex_algorithm->~btCollisionAlgorithm();
- m_dispatcher->freeCollisionAlgorithm(m_convex_algorithm);
- m_convex_algorithm = NULL;
- }
- }
-
- SIMD_FORCE_INLINE void destroyContactManifolds()
- {
- if (m_manifoldPtr == NULL) return;
- m_dispatcher->releaseManifold(m_manifoldPtr);
- m_manifoldPtr = NULL;
- }
-
- SIMD_FORCE_INLINE void clearCache()
- {
- destroyContactManifolds();
- destroyConvexAlgorithm();
-
- m_triface0 = -1;
- m_part0 = -1;
- m_triface1 = -1;
- m_part1 = -1;
- }
-
- SIMD_FORCE_INLINE btPersistentManifold* getLastManifold()
- {
- return m_manifoldPtr;
- }
-
- // Call before process collision
- SIMD_FORCE_INLINE void checkManifold(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- if (getLastManifold() == 0)
- {
- newContactManifold(body0Wrap->getCollisionObject(), body1Wrap->getCollisionObject());
- }
-
- m_resultOut->setPersistentManifold(getLastManifold());
- }
-
- // Call before process collision
- SIMD_FORCE_INLINE btCollisionAlgorithm* newAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- checkManifold(body0Wrap, body1Wrap);
-
- btCollisionAlgorithm* convex_algorithm = m_dispatcher->findAlgorithm(
- body0Wrap, body1Wrap, getLastManifold(), BT_CONTACT_POINT_ALGORITHMS);
- return convex_algorithm;
- }
-
- // Call before process collision
- SIMD_FORCE_INLINE void checkConvexAlgorithm(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- if (m_convex_algorithm) return;
- m_convex_algorithm = newAlgorithm(body0Wrap, body1Wrap);
- }
-
- void addContactPoint(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btVector3& point,
- const btVector3& normal,
- btScalar distance);
-
- //! Collision routines
- //!@{
-
- void collide_gjk_triangles(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactMeshShapePart* shape0,
- const btGImpactMeshShapePart* shape1,
- const int* pairs, int pair_count);
-
- void collide_sat_triangles(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactMeshShapePart* shape0,
- const btGImpactMeshShapePart* shape1,
- const int* pairs, int pair_count);
-
- void shape_vs_shape_collision(
- const btCollisionObjectWrapper* body0,
- const btCollisionObjectWrapper* body1,
- const btCollisionShape* shape0,
- const btCollisionShape* shape1);
-
- void convex_vs_convex_collision(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btCollisionShape* shape0,
- const btCollisionShape* shape1);
-
- void gimpact_vs_gimpact_find_pairs(
- const btTransform& trans0,
- const btTransform& trans1,
- const btGImpactShapeInterface* shape0,
- const btGImpactShapeInterface* shape1, btPairSet& pairset);
-
- void gimpact_vs_shape_find_pairs(
- const btTransform& trans0,
- const btTransform& trans1,
- const btGImpactShapeInterface* shape0,
- const btCollisionShape* shape1,
- btAlignedObjectArray<int>& collided_primitives);
-
- void gimpacttrimeshpart_vs_plane_collision(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactMeshShapePart* shape0,
- const btStaticPlaneShape* shape1, bool swapped);
-
-public:
- btGImpactCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
- virtual ~btGImpactCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr)
- manifoldArray.push_back(m_manifoldPtr);
- }
-
- btManifoldResult* internalGetResultOut()
- {
- return m_resultOut;
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btGImpactCollisionAlgorithm));
- return new (mem) btGImpactCollisionAlgorithm(ci, body0Wrap, body1Wrap);
- }
- };
-
- //! Use this function for register the algorithm externally
- static void registerAlgorithm(btCollisionDispatcher* dispatcher);
-#ifdef TRI_COLLISION_PROFILING
- //! Gets the average time in miliseconds of tree collisions
- static float getAverageTreeCollisionTime();
-
- //! Gets the average time in miliseconds of triangle collisions
- static float getAverageTriangleCollisionTime();
-#endif //TRI_COLLISION_PROFILING
-
- //! Collides two gimpact shapes
- /*!
- \pre shape0 and shape1 couldn't be btGImpactMeshShape objects
- */
-
- void gimpact_vs_gimpact(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btGImpactShapeInterface* shape1);
-
- void gimpact_vs_shape(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btCollisionShape* shape1, bool swapped);
-
- void gimpact_vs_compoundshape(const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btCompoundShape* shape1, bool swapped);
-
- void gimpact_vs_concave(
- const btCollisionObjectWrapper* body0Wrap,
- const btCollisionObjectWrapper* body1Wrap,
- const btGImpactShapeInterface* shape0,
- const btConcaveShape* shape1, bool swapped);
-
- /// Accessor/Mutator pairs for Part and triangleID
- void setFace0(int value)
- {
- m_triface0 = value;
- }
- int getFace0()
- {
- return m_triface0;
- }
- void setFace1(int value)
- {
- m_triface1 = value;
- }
- int getFace1()
- {
- return m_triface1;
- }
- void setPart0(int value)
- {
- m_part0 = value;
- }
- int getPart0()
- {
- return m_part0;
- }
- void setPart1(int value)
- {
- m_part1 = value;
- }
- int getPart1()
- {
- return m_part1;
- }
-};
-
-//algorithm details
-//#define BULLET_TRIANGLE_COLLISION 1
-#define GIMPACT_VS_PLANE_COLLISION 1
-
-#endif //BT_GIMPACT_BVH_CONCAVE_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h
deleted file mode 100644
index 1cde46ed8b..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactMassUtil.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*! \file btGImpactMassUtil.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef GIMPACT_MASS_UTIL_H
-#define GIMPACT_MASS_UTIL_H
-
-#include "LinearMath/btTransform.h"
-
-SIMD_FORCE_INLINE btVector3 gim_inertia_add_transformed(
- const btVector3& source_inertia, const btVector3& added_inertia, const btTransform& transform)
-{
- btMatrix3x3 rotatedTensor = transform.getBasis().scaled(added_inertia) * transform.getBasis().transpose();
-
- btScalar x2 = transform.getOrigin()[0];
- x2 *= x2;
- btScalar y2 = transform.getOrigin()[1];
- y2 *= y2;
- btScalar z2 = transform.getOrigin()[2];
- z2 *= z2;
-
- btScalar ix = rotatedTensor[0][0] * (y2 + z2);
- btScalar iy = rotatedTensor[1][1] * (x2 + z2);
- btScalar iz = rotatedTensor[2][2] * (x2 + y2);
-
- return btVector3(source_inertia[0] + ix, source_inertia[1] + iy, source_inertia[2] + iz);
-}
-
-SIMD_FORCE_INLINE btVector3 gim_get_point_inertia(const btVector3& point, btScalar mass)
-{
- btScalar x2 = point[0] * point[0];
- btScalar y2 = point[1] * point[1];
- btScalar z2 = point[2] * point[2];
- return btVector3(mass * (y2 + z2), mass * (x2 + z2), mass * (x2 + y2));
-}
-
-#endif //GIMPACT_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp
deleted file mode 100644
index b81fc97044..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp
+++ /dev/null
@@ -1,486 +0,0 @@
-/*! \file gim_box_set.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGImpactQuantizedBvh.h"
-#include "LinearMath/btQuickprof.h"
-
-#ifdef TRI_COLLISION_PROFILING
-btClock g_q_tree_clock;
-
-float g_q_accum_tree_collision_time = 0;
-int g_q_count_traversing = 0;
-
-void bt_begin_gim02_q_tree_time()
-{
- g_q_tree_clock.reset();
-}
-
-void bt_end_gim02_q_tree_time()
-{
- g_q_accum_tree_collision_time += g_q_tree_clock.getTimeMicroseconds();
- g_q_count_traversing++;
-}
-
-//! Gets the average time in miliseconds of tree collisions
-float btGImpactQuantizedBvh::getAverageTreeCollisionTime()
-{
- if (g_q_count_traversing == 0) return 0;
-
- float avgtime = g_q_accum_tree_collision_time;
- avgtime /= (float)g_q_count_traversing;
-
- g_q_accum_tree_collision_time = 0;
- g_q_count_traversing = 0;
- return avgtime;
-
- // float avgtime = g_q_count_traversing;
- // g_q_count_traversing = 0;
- // return avgtime;
-}
-
-#endif //TRI_COLLISION_PROFILING
-
-/////////////////////// btQuantizedBvhTree /////////////////////////////////
-
-void btQuantizedBvhTree::calc_quantization(
- GIM_BVH_DATA_ARRAY& primitive_boxes, btScalar boundMargin)
-{
- //calc globa box
- btAABB global_bound;
- global_bound.invalidate();
-
- for (int i = 0; i < primitive_boxes.size(); i++)
- {
- global_bound.merge(primitive_boxes[i].m_bound);
- }
-
- bt_calc_quantization_parameters(
- m_global_bound.m_min, m_global_bound.m_max, m_bvhQuantization, global_bound.m_min, global_bound.m_max, boundMargin);
-}
-
-int btQuantizedBvhTree::_calc_splitting_axis(
- GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex)
-{
- int i;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- btVector3 variance(btScalar(0.), btScalar(0.), btScalar(0.));
- int numIndices = endIndex - startIndex;
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- btVector3 diff2 = center - means;
- diff2 = diff2 * diff2;
- variance += diff2;
- }
- variance *= (btScalar(1.) / ((btScalar)numIndices - 1));
-
- return variance.maxAxis();
-}
-
-int btQuantizedBvhTree::_sort_and_calc_splitting_index(
- GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex,
- int endIndex, int splitAxis)
-{
- int i;
- int splitIndex = startIndex;
- int numIndices = endIndex - startIndex;
-
- // average of centers
- btScalar splitValue = 0.0f;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- splitValue = means[splitAxis];
-
- //sort leafNodes so all values larger then splitValue comes first, and smaller values start from 'splitIndex'.
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- if (center[splitAxis] > splitValue)
- {
- //swap
- primitive_boxes.swap(i, splitIndex);
- //swapLeafNodes(i,splitIndex);
- splitIndex++;
- }
- }
-
- //if the splitIndex causes unbalanced trees, fix this by using the center in between startIndex and endIndex
- //otherwise the tree-building might fail due to stack-overflows in certain cases.
- //unbalanced1 is unsafe: it can cause stack overflows
- //bool unbalanced1 = ((splitIndex==startIndex) || (splitIndex == (endIndex-1)));
-
- //unbalanced2 should work too: always use center (perfect balanced trees)
- //bool unbalanced2 = true;
-
- //this should be safe too:
- int rangeBalancedIndices = numIndices / 3;
- bool unbalanced = ((splitIndex <= (startIndex + rangeBalancedIndices)) || (splitIndex >= (endIndex - 1 - rangeBalancedIndices)));
-
- if (unbalanced)
- {
- splitIndex = startIndex + (numIndices >> 1);
- }
-
- btAssert(!((splitIndex == startIndex) || (splitIndex == (endIndex))));
-
- return splitIndex;
-}
-
-void btQuantizedBvhTree::_build_sub_tree(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex)
-{
- int curIndex = m_num_nodes;
- m_num_nodes++;
-
- btAssert((endIndex - startIndex) > 0);
-
- if ((endIndex - startIndex) == 1)
- {
- //We have a leaf node
- setNodeBound(curIndex, primitive_boxes[startIndex].m_bound);
- m_node_array[curIndex].setDataIndex(primitive_boxes[startIndex].m_data);
-
- return;
- }
- //calculate Best Splitting Axis and where to split it. Sort the incoming 'leafNodes' array within range 'startIndex/endIndex'.
-
- //split axis
- int splitIndex = _calc_splitting_axis(primitive_boxes, startIndex, endIndex);
-
- splitIndex = _sort_and_calc_splitting_index(
- primitive_boxes, startIndex, endIndex,
- splitIndex //split axis
- );
-
- //calc this node bounding box
-
- btAABB node_bound;
- node_bound.invalidate();
-
- for (int i = startIndex; i < endIndex; i++)
- {
- node_bound.merge(primitive_boxes[i].m_bound);
- }
-
- setNodeBound(curIndex, node_bound);
-
- //build left branch
- _build_sub_tree(primitive_boxes, startIndex, splitIndex);
-
- //build right branch
- _build_sub_tree(primitive_boxes, splitIndex, endIndex);
-
- m_node_array[curIndex].setEscapeIndex(m_num_nodes - curIndex);
-}
-
-//! stackless build tree
-void btQuantizedBvhTree::build_tree(
- GIM_BVH_DATA_ARRAY& primitive_boxes)
-{
- calc_quantization(primitive_boxes);
- // initialize node count to 0
- m_num_nodes = 0;
- // allocate nodes
- m_node_array.resize(primitive_boxes.size() * 2);
-
- _build_sub_tree(primitive_boxes, 0, primitive_boxes.size());
-}
-
-////////////////////////////////////class btGImpactQuantizedBvh
-
-void btGImpactQuantizedBvh::refit()
-{
- int nodecount = getNodeCount();
- while (nodecount--)
- {
- if (isLeafNode(nodecount))
- {
- btAABB leafbox;
- m_primitive_manager->get_primitive_box(getNodeData(nodecount), leafbox);
- setNodeBound(nodecount, leafbox);
- }
- else
- {
- //const GIM_BVH_TREE_NODE * nodepointer = get_node_pointer(nodecount);
- //get left bound
- btAABB bound;
- bound.invalidate();
-
- btAABB temp_box;
-
- int child_node = getLeftNode(nodecount);
- if (child_node)
- {
- getNodeBound(child_node, temp_box);
- bound.merge(temp_box);
- }
-
- child_node = getRightNode(nodecount);
- if (child_node)
- {
- getNodeBound(child_node, temp_box);
- bound.merge(temp_box);
- }
-
- setNodeBound(nodecount, bound);
- }
- }
-}
-
-//! this rebuild the entire set
-void btGImpactQuantizedBvh::buildSet()
-{
- //obtain primitive boxes
- GIM_BVH_DATA_ARRAY primitive_boxes;
- primitive_boxes.resize(m_primitive_manager->get_primitive_count());
-
- for (int i = 0; i < primitive_boxes.size(); i++)
- {
- m_primitive_manager->get_primitive_box(i, primitive_boxes[i].m_bound);
- primitive_boxes[i].m_data = i;
- }
-
- m_box_tree.build_tree(primitive_boxes);
-}
-
-//! returns the indices of the primitives in the m_primitive_manager
-bool btGImpactQuantizedBvh::boxQuery(const btAABB& box, btAlignedObjectArray<int>& collided_results) const
-{
- int curIndex = 0;
- int numNodes = getNodeCount();
-
- //quantize box
-
- unsigned short quantizedMin[3];
- unsigned short quantizedMax[3];
-
- m_box_tree.quantizePoint(quantizedMin, box.m_min);
- m_box_tree.quantizePoint(quantizedMax, box.m_max);
-
- while (curIndex < numNodes)
- {
- //catch bugs in tree data
-
- bool aabbOverlap = m_box_tree.testQuantizedBoxOverlapp(curIndex, quantizedMin, quantizedMax);
- bool isleafnode = isLeafNode(curIndex);
-
- if (isleafnode && aabbOverlap)
- {
- collided_results.push_back(getNodeData(curIndex));
- }
-
- if (aabbOverlap || isleafnode)
- {
- //next subnode
- curIndex++;
- }
- else
- {
- //skip node
- curIndex += getEscapeNodeIndex(curIndex);
- }
- }
- if (collided_results.size() > 0) return true;
- return false;
-}
-
-//! returns the indices of the primitives in the m_primitive_manager
-bool btGImpactQuantizedBvh::rayQuery(
- const btVector3& ray_dir, const btVector3& ray_origin,
- btAlignedObjectArray<int>& collided_results) const
-{
- int curIndex = 0;
- int numNodes = getNodeCount();
-
- while (curIndex < numNodes)
- {
- btAABB bound;
- getNodeBound(curIndex, bound);
-
- //catch bugs in tree data
-
- bool aabbOverlap = bound.collide_ray(ray_origin, ray_dir);
- bool isleafnode = isLeafNode(curIndex);
-
- if (isleafnode && aabbOverlap)
- {
- collided_results.push_back(getNodeData(curIndex));
- }
-
- if (aabbOverlap || isleafnode)
- {
- //next subnode
- curIndex++;
- }
- else
- {
- //skip node
- curIndex += getEscapeNodeIndex(curIndex);
- }
- }
- if (collided_results.size() > 0) return true;
- return false;
-}
-
-SIMD_FORCE_INLINE bool _quantized_node_collision(
- const btGImpactQuantizedBvh* boxset0, const btGImpactQuantizedBvh* boxset1,
- const BT_BOX_BOX_TRANSFORM_CACHE& trans_cache_1to0,
- int node0, int node1, bool complete_primitive_tests)
-{
- btAABB box0;
- boxset0->getNodeBound(node0, box0);
- btAABB box1;
- boxset1->getNodeBound(node1, box1);
-
- return box0.overlapping_trans_cache(box1, trans_cache_1to0, complete_primitive_tests);
- // box1.appy_transform_trans_cache(trans_cache_1to0);
- // return box0.has_collision(box1);
-}
-
-//stackless recursive collision routine
-static void _find_quantized_collision_pairs_recursive(
- const btGImpactQuantizedBvh* boxset0, const btGImpactQuantizedBvh* boxset1,
- btPairSet* collision_pairs,
- const BT_BOX_BOX_TRANSFORM_CACHE& trans_cache_1to0,
- int node0, int node1, bool complete_primitive_tests)
-{
- if (_quantized_node_collision(
- boxset0, boxset1, trans_cache_1to0,
- node0, node1, complete_primitive_tests) == false) return; //avoid colliding internal nodes
-
- if (boxset0->isLeafNode(node0))
- {
- if (boxset1->isLeafNode(node1))
- {
- // collision result
- collision_pairs->push_pair(
- boxset0->getNodeData(node0), boxset1->getNodeData(node1));
- return;
- }
- else
- {
- //collide left recursive
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- node0, boxset1->getLeftNode(node1), false);
-
- //collide right recursive
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- node0, boxset1->getRightNode(node1), false);
- }
- }
- else
- {
- if (boxset1->isLeafNode(node1))
- {
- //collide left recursive
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getLeftNode(node0), node1, false);
-
- //collide right recursive
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getRightNode(node0), node1, false);
- }
- else
- {
- //collide left0 left1
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getLeftNode(node0), boxset1->getLeftNode(node1), false);
-
- //collide left0 right1
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getLeftNode(node0), boxset1->getRightNode(node1), false);
-
- //collide right0 left1
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getRightNode(node0), boxset1->getLeftNode(node1), false);
-
- //collide right0 right1
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- collision_pairs, trans_cache_1to0,
- boxset0->getRightNode(node0), boxset1->getRightNode(node1), false);
-
- } // else if node1 is not a leaf
- } // else if node0 is not a leaf
-}
-
-void btGImpactQuantizedBvh::find_collision(const btGImpactQuantizedBvh* boxset0, const btTransform& trans0,
- const btGImpactQuantizedBvh* boxset1, const btTransform& trans1,
- btPairSet& collision_pairs)
-{
- if (boxset0->getNodeCount() == 0 || boxset1->getNodeCount() == 0) return;
-
- BT_BOX_BOX_TRANSFORM_CACHE trans_cache_1to0;
-
- trans_cache_1to0.calc_from_homogenic(trans0, trans1);
-
-#ifdef TRI_COLLISION_PROFILING
- bt_begin_gim02_q_tree_time();
-#endif //TRI_COLLISION_PROFILING
-
- _find_quantized_collision_pairs_recursive(
- boxset0, boxset1,
- &collision_pairs, trans_cache_1to0, 0, 0, true);
-#ifdef TRI_COLLISION_PROFILING
- bt_end_gim02_q_tree_time();
-#endif //TRI_COLLISION_PROFILING
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h
deleted file mode 100644
index b231c1e832..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvh.h
+++ /dev/null
@@ -1,298 +0,0 @@
-#ifndef GIM_QUANTIZED_SET_H_INCLUDED
-#define GIM_QUANTIZED_SET_H_INCLUDED
-
-/*! \file btGImpactQuantizedBvh.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGImpactBvh.h"
-#include "btQuantization.h"
-#include "btGImpactQuantizedBvhStructs.h"
-
-class GIM_QUANTIZED_BVH_NODE_ARRAY : public btAlignedObjectArray<BT_QUANTIZED_BVH_NODE>
-{
-};
-
-//! Basic Box tree structure
-class btQuantizedBvhTree
-{
-protected:
- int m_num_nodes;
- GIM_QUANTIZED_BVH_NODE_ARRAY m_node_array;
- btAABB m_global_bound;
- btVector3 m_bvhQuantization;
-
-protected:
- void calc_quantization(GIM_BVH_DATA_ARRAY& primitive_boxes, btScalar boundMargin = btScalar(1.0));
-
- int _sort_and_calc_splitting_index(
- GIM_BVH_DATA_ARRAY& primitive_boxes,
- int startIndex, int endIndex, int splitAxis);
-
- int _calc_splitting_axis(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex);
-
- void _build_sub_tree(GIM_BVH_DATA_ARRAY& primitive_boxes, int startIndex, int endIndex);
-
-public:
- btQuantizedBvhTree()
- {
- m_num_nodes = 0;
- }
-
- //! prototype functions for box tree management
- //!@{
- void build_tree(GIM_BVH_DATA_ARRAY& primitive_boxes);
-
- SIMD_FORCE_INLINE void quantizePoint(
- unsigned short* quantizedpoint, const btVector3& point) const
- {
- bt_quantize_clamp(quantizedpoint, point, m_global_bound.m_min, m_global_bound.m_max, m_bvhQuantization);
- }
-
- SIMD_FORCE_INLINE bool testQuantizedBoxOverlapp(
- int node_index,
- unsigned short* quantizedMin, unsigned short* quantizedMax) const
- {
- return m_node_array[node_index].testQuantizedBoxOverlapp(quantizedMin, quantizedMax);
- }
-
- SIMD_FORCE_INLINE void clearNodes()
- {
- m_node_array.clear();
- m_num_nodes = 0;
- }
-
- //! node count
- SIMD_FORCE_INLINE int getNodeCount() const
- {
- return m_num_nodes;
- }
-
- //! tells if the node is a leaf
- SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const
- {
- return m_node_array[nodeindex].isLeafNode();
- }
-
- SIMD_FORCE_INLINE int getNodeData(int nodeindex) const
- {
- return m_node_array[nodeindex].getDataIndex();
- }
-
- SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const
- {
- bound.m_min = bt_unquantize(
- m_node_array[nodeindex].m_quantizedAabbMin,
- m_global_bound.m_min, m_bvhQuantization);
-
- bound.m_max = bt_unquantize(
- m_node_array[nodeindex].m_quantizedAabbMax,
- m_global_bound.m_min, m_bvhQuantization);
- }
-
- SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound)
- {
- bt_quantize_clamp(m_node_array[nodeindex].m_quantizedAabbMin,
- bound.m_min,
- m_global_bound.m_min,
- m_global_bound.m_max,
- m_bvhQuantization);
-
- bt_quantize_clamp(m_node_array[nodeindex].m_quantizedAabbMax,
- bound.m_max,
- m_global_bound.m_min,
- m_global_bound.m_max,
- m_bvhQuantization);
- }
-
- SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const
- {
- return nodeindex + 1;
- }
-
- SIMD_FORCE_INLINE int getRightNode(int nodeindex) const
- {
- if (m_node_array[nodeindex + 1].isLeafNode()) return nodeindex + 2;
- return nodeindex + 1 + m_node_array[nodeindex + 1].getEscapeIndex();
- }
-
- SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const
- {
- return m_node_array[nodeindex].getEscapeIndex();
- }
-
- SIMD_FORCE_INLINE const BT_QUANTIZED_BVH_NODE* get_node_pointer(int index = 0) const
- {
- return &m_node_array[index];
- }
-
- //!@}
-};
-
-//! Structure for containing Boxes
-/*!
-This class offers an structure for managing a box tree of primitives.
-Requires a Primitive prototype (like btPrimitiveManagerBase )
-*/
-class btGImpactQuantizedBvh
-{
-protected:
- btQuantizedBvhTree m_box_tree;
- btPrimitiveManagerBase* m_primitive_manager;
-
-protected:
- //stackless refit
- void refit();
-
-public:
- //! this constructor doesn't build the tree. you must call buildSet
- btGImpactQuantizedBvh()
- {
- m_primitive_manager = NULL;
- }
-
- //! this constructor doesn't build the tree. you must call buildSet
- btGImpactQuantizedBvh(btPrimitiveManagerBase* primitive_manager)
- {
- m_primitive_manager = primitive_manager;
- }
-
- SIMD_FORCE_INLINE btAABB getGlobalBox() const
- {
- btAABB totalbox;
- getNodeBound(0, totalbox);
- return totalbox;
- }
-
- SIMD_FORCE_INLINE void setPrimitiveManager(btPrimitiveManagerBase* primitive_manager)
- {
- m_primitive_manager = primitive_manager;
- }
-
- SIMD_FORCE_INLINE btPrimitiveManagerBase* getPrimitiveManager() const
- {
- return m_primitive_manager;
- }
-
- //! node manager prototype functions
- ///@{
-
- //! this attemps to refit the box set.
- SIMD_FORCE_INLINE void update()
- {
- refit();
- }
-
- //! this rebuild the entire set
- void buildSet();
-
- //! returns the indices of the primitives in the m_primitive_manager
- bool boxQuery(const btAABB& box, btAlignedObjectArray<int>& collided_results) const;
-
- //! returns the indices of the primitives in the m_primitive_manager
- SIMD_FORCE_INLINE bool boxQueryTrans(const btAABB& box,
- const btTransform& transform, btAlignedObjectArray<int>& collided_results) const
- {
- btAABB transbox = box;
- transbox.appy_transform(transform);
- return boxQuery(transbox, collided_results);
- }
-
- //! returns the indices of the primitives in the m_primitive_manager
- bool rayQuery(
- const btVector3& ray_dir, const btVector3& ray_origin,
- btAlignedObjectArray<int>& collided_results) const;
-
- //! tells if this set has hierarcht
- SIMD_FORCE_INLINE bool hasHierarchy() const
- {
- return true;
- }
-
- //! tells if this set is a trimesh
- SIMD_FORCE_INLINE bool isTrimesh() const
- {
- return m_primitive_manager->is_trimesh();
- }
-
- //! node count
- SIMD_FORCE_INLINE int getNodeCount() const
- {
- return m_box_tree.getNodeCount();
- }
-
- //! tells if the node is a leaf
- SIMD_FORCE_INLINE bool isLeafNode(int nodeindex) const
- {
- return m_box_tree.isLeafNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE int getNodeData(int nodeindex) const
- {
- return m_box_tree.getNodeData(nodeindex);
- }
-
- SIMD_FORCE_INLINE void getNodeBound(int nodeindex, btAABB& bound) const
- {
- m_box_tree.getNodeBound(nodeindex, bound);
- }
-
- SIMD_FORCE_INLINE void setNodeBound(int nodeindex, const btAABB& bound)
- {
- m_box_tree.setNodeBound(nodeindex, bound);
- }
-
- SIMD_FORCE_INLINE int getLeftNode(int nodeindex) const
- {
- return m_box_tree.getLeftNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE int getRightNode(int nodeindex) const
- {
- return m_box_tree.getRightNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE int getEscapeNodeIndex(int nodeindex) const
- {
- return m_box_tree.getEscapeNodeIndex(nodeindex);
- }
-
- SIMD_FORCE_INLINE void getNodeTriangle(int nodeindex, btPrimitiveTriangle& triangle) const
- {
- m_primitive_manager->get_primitive_triangle(getNodeData(nodeindex), triangle);
- }
-
- SIMD_FORCE_INLINE const BT_QUANTIZED_BVH_NODE* get_node_pointer(int index = 0) const
- {
- return m_box_tree.get_node_pointer(index);
- }
-
-#ifdef TRI_COLLISION_PROFILING
- static float getAverageTreeCollisionTime();
-#endif //TRI_COLLISION_PROFILING
-
- static void find_collision(const btGImpactQuantizedBvh* boxset1, const btTransform& trans1,
- const btGImpactQuantizedBvh* boxset2, const btTransform& trans2,
- btPairSet& collision_pairs);
-};
-
-#endif // GIM_BOXPRUNING_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvhStructs.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvhStructs.h
deleted file mode 100644
index bd50cb5b87..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactQuantizedBvhStructs.h
+++ /dev/null
@@ -1,91 +0,0 @@
-#ifndef GIM_QUANTIZED_SET_STRUCTS_H_INCLUDED
-#define GIM_QUANTIZED_SET_STRUCTS_H_INCLUDED
-
-/*! \file btGImpactQuantizedBvh.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGImpactBvh.h"
-#include "btQuantization.h"
-
-///btQuantizedBvhNode is a compressed aabb node, 16 bytes.
-///Node can be used for leafnode or internal node. Leafnodes can point to 32-bit triangle index (non-negative range).
-ATTRIBUTE_ALIGNED16(struct)
-BT_QUANTIZED_BVH_NODE
-{
- //12 bytes
- unsigned short int m_quantizedAabbMin[3];
- unsigned short int m_quantizedAabbMax[3];
- //4 bytes
- int m_escapeIndexOrDataIndex;
-
- BT_QUANTIZED_BVH_NODE()
- {
- m_escapeIndexOrDataIndex = 0;
- }
-
- SIMD_FORCE_INLINE bool isLeafNode() const
- {
- //skipindex is negative (internal node), triangleindex >=0 (leafnode)
- return (m_escapeIndexOrDataIndex >= 0);
- }
-
- SIMD_FORCE_INLINE int getEscapeIndex() const
- {
- //btAssert(m_escapeIndexOrDataIndex < 0);
- return -m_escapeIndexOrDataIndex;
- }
-
- SIMD_FORCE_INLINE void setEscapeIndex(int index)
- {
- m_escapeIndexOrDataIndex = -index;
- }
-
- SIMD_FORCE_INLINE int getDataIndex() const
- {
- //btAssert(m_escapeIndexOrDataIndex >= 0);
-
- return m_escapeIndexOrDataIndex;
- }
-
- SIMD_FORCE_INLINE void setDataIndex(int index)
- {
- m_escapeIndexOrDataIndex = index;
- }
-
- SIMD_FORCE_INLINE bool testQuantizedBoxOverlapp(
- unsigned short* quantizedMin, unsigned short* quantizedMax) const
- {
- if (m_quantizedAabbMin[0] > quantizedMax[0] ||
- m_quantizedAabbMax[0] < quantizedMin[0] ||
- m_quantizedAabbMin[1] > quantizedMax[1] ||
- m_quantizedAabbMax[1] < quantizedMin[1] ||
- m_quantizedAabbMin[2] > quantizedMax[2] ||
- m_quantizedAabbMax[2] < quantizedMin[2])
- {
- return false;
- }
- return true;
- }
-};
-
-#endif // GIM_QUANTIZED_SET_STRUCTS_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.cpp
deleted file mode 100644
index 34c229a3ab..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.cpp
+++ /dev/null
@@ -1,279 +0,0 @@
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGImpactShape.h"
-#include "btGImpactMassUtil.h"
-
-btGImpactMeshShapePart::btGImpactMeshShapePart(btStridingMeshInterface* meshInterface, int part)
-{
- // moved from .h to .cpp because of conditional compilation
- // (The setting of BT_THREADSAFE may differ between various cpp files, so it is best to
- // avoid using it in h files)
- m_primitive_manager.m_meshInterface = meshInterface;
- m_primitive_manager.m_part = part;
- m_box_set.setPrimitiveManager(&m_primitive_manager);
-#if BT_THREADSAFE
- // If threadsafe is requested, this object uses a different lock/unlock
- // model with the btStridingMeshInterface -- lock once when the object is constructed
- // and unlock once in the destructor.
- // The other way of locking and unlocking for each collision check in the narrowphase
- // is not threadsafe. Note these are not thread-locks, they are calls to the meshInterface's
- // getLockedReadOnlyVertexIndexBase virtual function, which by default just returns a couple of
- // pointers. In theory a client could override the lock function to do all sorts of
- // things like reading data from GPU memory, or decompressing data on the fly, but such things
- // do not seem all that likely or useful, given the performance cost.
- m_primitive_manager.lock();
-#endif
-}
-
-btGImpactMeshShapePart::~btGImpactMeshShapePart()
-{
- // moved from .h to .cpp because of conditional compilation
-#if BT_THREADSAFE
- m_primitive_manager.unlock();
-#endif
-}
-
-void btGImpactMeshShapePart::lockChildShapes() const
-{
- // moved from .h to .cpp because of conditional compilation
-#if !BT_THREADSAFE
- // called in the narrowphase -- not threadsafe!
- void* dummy = (void*)(m_box_set.getPrimitiveManager());
- TrimeshPrimitiveManager* dummymanager = static_cast<TrimeshPrimitiveManager*>(dummy);
- dummymanager->lock();
-#endif
-}
-
-void btGImpactMeshShapePart::unlockChildShapes() const
-{
- // moved from .h to .cpp because of conditional compilation
-#if !BT_THREADSAFE
- // called in the narrowphase -- not threadsafe!
- void* dummy = (void*)(m_box_set.getPrimitiveManager());
- TrimeshPrimitiveManager* dummymanager = static_cast<TrimeshPrimitiveManager*>(dummy);
- dummymanager->unlock();
-#endif
-}
-
-#define CALC_EXACT_INERTIA 1
-
-void btGImpactCompoundShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- lockChildShapes();
-#ifdef CALC_EXACT_INERTIA
- inertia.setValue(0.f, 0.f, 0.f);
-
- int i = this->getNumChildShapes();
- btScalar shapemass = mass / btScalar(i);
-
- while (i--)
- {
- btVector3 temp_inertia;
- m_childShapes[i]->calculateLocalInertia(shapemass, temp_inertia);
- if (childrenHasTransform())
- {
- inertia = gim_inertia_add_transformed(inertia, temp_inertia, m_childTransforms[i]);
- }
- else
- {
- inertia = gim_inertia_add_transformed(inertia, temp_inertia, btTransform::getIdentity());
- }
- }
-
-#else
-
- // Calc box inertia
-
- btScalar lx = m_localAABB.m_max[0] - m_localAABB.m_min[0];
- btScalar ly = m_localAABB.m_max[1] - m_localAABB.m_min[1];
- btScalar lz = m_localAABB.m_max[2] - m_localAABB.m_min[2];
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(0.08333333);
-
- inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2));
-
-#endif
- unlockChildShapes();
-}
-
-void btGImpactMeshShapePart::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
- lockChildShapes();
-
-#ifdef CALC_EXACT_INERTIA
- inertia.setValue(0.f, 0.f, 0.f);
-
- int i = this->getVertexCount();
- btScalar pointmass = mass / btScalar(i);
-
- while (i--)
- {
- btVector3 pointintertia;
- this->getVertex(i, pointintertia);
- pointintertia = gim_get_point_inertia(pointintertia, pointmass);
- inertia += pointintertia;
- }
-
-#else
-
- // Calc box inertia
-
- btScalar lx = m_localAABB.m_max[0] - m_localAABB.m_min[0];
- btScalar ly = m_localAABB.m_max[1] - m_localAABB.m_min[1];
- btScalar lz = m_localAABB.m_max[2] - m_localAABB.m_min[2];
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(0.08333333);
-
- inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2));
-
-#endif
-
- unlockChildShapes();
-}
-
-void btGImpactMeshShape::calculateLocalInertia(btScalar mass, btVector3& inertia) const
-{
-#ifdef CALC_EXACT_INERTIA
- inertia.setValue(0.f, 0.f, 0.f);
-
- int i = this->getMeshPartCount();
- btScalar partmass = mass / btScalar(i);
-
- while (i--)
- {
- btVector3 partinertia;
- getMeshPart(i)->calculateLocalInertia(partmass, partinertia);
- inertia += partinertia;
- }
-
-#else
-
- // Calc box inertia
-
- btScalar lx = m_localAABB.m_max[0] - m_localAABB.m_min[0];
- btScalar ly = m_localAABB.m_max[1] - m_localAABB.m_min[1];
- btScalar lz = m_localAABB.m_max[2] - m_localAABB.m_min[2];
- const btScalar x2 = lx * lx;
- const btScalar y2 = ly * ly;
- const btScalar z2 = lz * lz;
- const btScalar scaledmass = mass * btScalar(0.08333333);
-
- inertia = scaledmass * (btVector3(y2 + z2, x2 + z2, x2 + y2));
-
-#endif
-}
-
-void btGImpactMeshShape::rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const
-{
-}
-
-void btGImpactMeshShapePart::processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const
-{
- lockChildShapes();
-
- btAlignedObjectArray<int> collided;
- btVector3 rayDir(rayTo - rayFrom);
- rayDir.normalize();
- m_box_set.rayQuery(rayDir, rayFrom, collided);
-
- if (collided.size() == 0)
- {
- unlockChildShapes();
- return;
- }
-
- int part = (int)getPart();
- btPrimitiveTriangle triangle;
- int i = collided.size();
- while (i--)
- {
- getPrimitiveTriangle(collided[i], triangle);
- callback->processTriangle(triangle.m_vertices, part, collided[i]);
- }
- unlockChildShapes();
-}
-
-void btGImpactMeshShapePart::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- lockChildShapes();
- btAABB box;
- box.m_min = aabbMin;
- box.m_max = aabbMax;
-
- btAlignedObjectArray<int> collided;
- m_box_set.boxQuery(box, collided);
-
- if (collided.size() == 0)
- {
- unlockChildShapes();
- return;
- }
-
- int part = (int)getPart();
- btPrimitiveTriangle triangle;
- int i = collided.size();
- while (i--)
- {
- this->getPrimitiveTriangle(collided[i], triangle);
- callback->processTriangle(triangle.m_vertices, part, collided[i]);
- }
- unlockChildShapes();
-}
-
-void btGImpactMeshShape::processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
-{
- int i = m_mesh_parts.size();
- while (i--)
- {
- m_mesh_parts[i]->processAllTriangles(callback, aabbMin, aabbMax);
- }
-}
-
-void btGImpactMeshShape::processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const
-{
- int i = m_mesh_parts.size();
- while (i--)
- {
- m_mesh_parts[i]->processAllTrianglesRay(callback, rayFrom, rayTo);
- }
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btGImpactMeshShape::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btGImpactMeshShapeData* trimeshData = (btGImpactMeshShapeData*)dataBuffer;
-
- btCollisionShape::serialize(&trimeshData->m_collisionShapeData, serializer);
-
- m_meshInterface->serialize(&trimeshData->m_meshInterface, serializer);
-
- trimeshData->m_collisionMargin = float(m_collisionMargin);
-
- localScaling.serializeFloat(trimeshData->m_localScaling);
-
- trimeshData->m_gimpactSubType = int(getGImpactShapeType());
-
- return "btGImpactMeshShapeData";
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.h b/thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.h
deleted file mode 100644
index cc91079579..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGImpactShape.h
+++ /dev/null
@@ -1,1115 +0,0 @@
-/*! \file btGImpactShape.h
-\author Francisco Len Nßjera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef GIMPACT_SHAPE_H
-#define GIMPACT_SHAPE_H
-
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/CollisionShapes/btStridingMeshInterface.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
-#include "BulletCollision/CollisionShapes/btConcaveShape.h"
-#include "BulletCollision/CollisionShapes/btTetrahedronShape.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-#include "btGImpactQuantizedBvh.h" // box tree class
-
-//! declare Quantized trees, (you can change to float based trees)
-typedef btGImpactQuantizedBvh btGImpactBoxSet;
-
-enum eGIMPACT_SHAPE_TYPE
-{
- CONST_GIMPACT_COMPOUND_SHAPE = 0,
- CONST_GIMPACT_TRIMESH_SHAPE_PART,
- CONST_GIMPACT_TRIMESH_SHAPE
-};
-
-//! Helper class for tetrahedrons
-class btTetrahedronShapeEx : public btBU_Simplex1to4
-{
-public:
- btTetrahedronShapeEx()
- {
- m_numVertices = 4;
- }
-
- SIMD_FORCE_INLINE void setVertices(
- const btVector3& v0, const btVector3& v1,
- const btVector3& v2, const btVector3& v3)
- {
- m_vertices[0] = v0;
- m_vertices[1] = v1;
- m_vertices[2] = v2;
- m_vertices[3] = v3;
- recalcLocalAabb();
- }
-};
-
-//! Base class for gimpact shapes
-class btGImpactShapeInterface : public btConcaveShape
-{
-protected:
- btAABB m_localAABB;
- bool m_needs_update;
- btVector3 localScaling;
- btGImpactBoxSet m_box_set; // optionally boxset
-
- //! use this function for perfofm refit in bounding boxes
- //! use this function for perfofm refit in bounding boxes
- virtual void calcLocalAABB()
- {
- lockChildShapes();
- if (m_box_set.getNodeCount() == 0)
- {
- m_box_set.buildSet();
- }
- else
- {
- m_box_set.update();
- }
- unlockChildShapes();
-
- m_localAABB = m_box_set.getGlobalBox();
- }
-
-public:
- btGImpactShapeInterface()
- {
- m_shapeType = GIMPACT_SHAPE_PROXYTYPE;
- m_localAABB.invalidate();
- m_needs_update = true;
- localScaling.setValue(1.f, 1.f, 1.f);
- }
-
- //! performs refit operation
- /*!
- Updates the entire Box set of this shape.
- \pre postUpdate() must be called for attemps to calculating the box set, else this function
- will does nothing.
- \post if m_needs_update == true, then it calls calcLocalAABB();
- */
- SIMD_FORCE_INLINE void updateBound()
- {
- if (!m_needs_update) return;
- calcLocalAABB();
- m_needs_update = false;
- }
-
- //! If the Bounding box is not updated, then this class attemps to calculate it.
- /*!
- \post Calls updateBound() for update the box set.
- */
- void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- btAABB transformedbox = m_localAABB;
- transformedbox.appy_transform(t);
- aabbMin = transformedbox.m_min;
- aabbMax = transformedbox.m_max;
- }
-
- //! Tells to this object that is needed to refit the box set
- virtual void postUpdate()
- {
- m_needs_update = true;
- }
-
- //! Obtains the local box, which is the global calculated box of the total of subshapes
- SIMD_FORCE_INLINE const btAABB& getLocalBox()
- {
- return m_localAABB;
- }
-
- virtual int getShapeType() const
- {
- return GIMPACT_SHAPE_PROXYTYPE;
- }
-
- /*!
- \post You must call updateBound() for update the box set.
- */
- virtual void setLocalScaling(const btVector3& scaling)
- {
- localScaling = scaling;
- postUpdate();
- }
-
- virtual const btVector3& getLocalScaling() const
- {
- return localScaling;
- }
-
- virtual void setMargin(btScalar margin)
- {
- m_collisionMargin = margin;
- int i = getNumChildShapes();
- while (i--)
- {
- btCollisionShape* child = getChildShape(i);
- child->setMargin(margin);
- }
-
- m_needs_update = true;
- }
-
- //! Subshape member functions
- //!@{
-
- //! Base method for determinig which kind of GIMPACT shape we get
- virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const = 0;
-
- //! gets boxset
- SIMD_FORCE_INLINE const btGImpactBoxSet* getBoxSet() const
- {
- return &m_box_set;
- }
-
- //! Determines if this class has a hierarchy structure for sorting its primitives
- SIMD_FORCE_INLINE bool hasBoxSet() const
- {
- if (m_box_set.getNodeCount() == 0) return false;
- return true;
- }
-
- //! Obtains the primitive manager
- virtual const btPrimitiveManagerBase* getPrimitiveManager() const = 0;
-
- //! Gets the number of children
- virtual int getNumChildShapes() const = 0;
-
- //! if true, then its children must get transforms.
- virtual bool childrenHasTransform() const = 0;
-
- //! Determines if this shape has triangles
- virtual bool needsRetrieveTriangles() const = 0;
-
- //! Determines if this shape has tetrahedrons
- virtual bool needsRetrieveTetrahedrons() const = 0;
-
- virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const = 0;
-
- virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const = 0;
-
- //! call when reading child shapes
- virtual void lockChildShapes() const
- {
- }
-
- virtual void unlockChildShapes() const
- {
- }
-
- //! if this trimesh
- SIMD_FORCE_INLINE void getPrimitiveTriangle(int index, btPrimitiveTriangle& triangle) const
- {
- getPrimitiveManager()->get_primitive_triangle(index, triangle);
- }
-
- //! Retrieves the bound from a child
- /*!
- */
- virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- btAABB child_aabb;
- getPrimitiveManager()->get_primitive_box(child_index, child_aabb);
- child_aabb.appy_transform(t);
- aabbMin = child_aabb.m_min;
- aabbMax = child_aabb.m_max;
- }
-
- //! Gets the children
- virtual btCollisionShape* getChildShape(int index) = 0;
-
- //! Gets the child
- virtual const btCollisionShape* getChildShape(int index) const = 0;
-
- //! Gets the children transform
- virtual btTransform getChildTransform(int index) const = 0;
-
- //! Sets the children transform
- /*!
- \post You must call updateBound() for update the box set.
- */
- virtual void setChildTransform(int index, const btTransform& transform) = 0;
-
- //!@}
-
- //! virtual method for ray collision
- virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const
- {
- (void)rayFrom;
- (void)rayTo;
- (void)resultCallback;
- }
-
- //! Function for retrieve triangles.
- /*!
- It gives the triangles in local space
- */
- virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const
- {
- (void)callback;
- (void)aabbMin;
- (void)aabbMax;
- }
-
- //! Function for retrieve triangles.
- /*!
- It gives the triangles in local space
- */
- virtual void processAllTrianglesRay(btTriangleCallback* /*callback*/, const btVector3& /*rayFrom*/, const btVector3& /*rayTo*/) const
- {
- }
-
- //!@}
-};
-
-//! btGImpactCompoundShape allows to handle multiple btCollisionShape objects at once
-/*!
-This class only can manage Convex subshapes
-*/
-class btGImpactCompoundShape : public btGImpactShapeInterface
-{
-public:
- //! compound primitive manager
- class CompoundPrimitiveManager : public btPrimitiveManagerBase
- {
- public:
- virtual ~CompoundPrimitiveManager() {}
- btGImpactCompoundShape* m_compoundShape;
-
- CompoundPrimitiveManager(const CompoundPrimitiveManager& compound)
- : btPrimitiveManagerBase()
- {
- m_compoundShape = compound.m_compoundShape;
- }
-
- CompoundPrimitiveManager(btGImpactCompoundShape* compoundShape)
- {
- m_compoundShape = compoundShape;
- }
-
- CompoundPrimitiveManager()
- {
- m_compoundShape = NULL;
- }
-
- virtual bool is_trimesh() const
- {
- return false;
- }
-
- virtual int get_primitive_count() const
- {
- return (int)m_compoundShape->getNumChildShapes();
- }
-
- virtual void get_primitive_box(int prim_index, btAABB& primbox) const
- {
- btTransform prim_trans;
- if (m_compoundShape->childrenHasTransform())
- {
- prim_trans = m_compoundShape->getChildTransform(prim_index);
- }
- else
- {
- prim_trans.setIdentity();
- }
- const btCollisionShape* shape = m_compoundShape->getChildShape(prim_index);
- shape->getAabb(prim_trans, primbox.m_min, primbox.m_max);
- }
-
- virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const
- {
- btAssert(0);
- (void)prim_index;
- (void)triangle;
- }
- };
-
-protected:
- CompoundPrimitiveManager m_primitive_manager;
- btAlignedObjectArray<btTransform> m_childTransforms;
- btAlignedObjectArray<btCollisionShape*> m_childShapes;
-
-public:
- btGImpactCompoundShape(bool children_has_transform = true)
- {
- (void)children_has_transform;
- m_primitive_manager.m_compoundShape = this;
- m_box_set.setPrimitiveManager(&m_primitive_manager);
- }
-
- virtual ~btGImpactCompoundShape()
- {
- }
-
- //! if true, then its children must get transforms.
- virtual bool childrenHasTransform() const
- {
- if (m_childTransforms.size() == 0) return false;
- return true;
- }
-
- //! Obtains the primitive manager
- virtual const btPrimitiveManagerBase* getPrimitiveManager() const
- {
- return &m_primitive_manager;
- }
-
- //! Obtains the compopund primitive manager
- SIMD_FORCE_INLINE CompoundPrimitiveManager* getCompoundPrimitiveManager()
- {
- return &m_primitive_manager;
- }
-
- //! Gets the number of children
- virtual int getNumChildShapes() const
- {
- return m_childShapes.size();
- }
-
- //! Use this method for adding children. Only Convex shapes are allowed.
- void addChildShape(const btTransform& localTransform, btCollisionShape* shape)
- {
- btAssert(shape->isConvex());
- m_childTransforms.push_back(localTransform);
- m_childShapes.push_back(shape);
- }
-
- //! Use this method for adding children. Only Convex shapes are allowed.
- void addChildShape(btCollisionShape* shape)
- {
- btAssert(shape->isConvex());
- m_childShapes.push_back(shape);
- }
-
- //! Gets the children
- virtual btCollisionShape* getChildShape(int index)
- {
- return m_childShapes[index];
- }
-
- //! Gets the children
- virtual const btCollisionShape* getChildShape(int index) const
- {
- return m_childShapes[index];
- }
-
- //! Retrieves the bound from a child
- /*!
- */
- virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- if (childrenHasTransform())
- {
- m_childShapes[child_index]->getAabb(t * m_childTransforms[child_index], aabbMin, aabbMax);
- }
- else
- {
- m_childShapes[child_index]->getAabb(t, aabbMin, aabbMax);
- }
- }
-
- //! Gets the children transform
- virtual btTransform getChildTransform(int index) const
- {
- btAssert(m_childTransforms.size() == m_childShapes.size());
- return m_childTransforms[index];
- }
-
- //! Sets the children transform
- /*!
- \post You must call updateBound() for update the box set.
- */
- virtual void setChildTransform(int index, const btTransform& transform)
- {
- btAssert(m_childTransforms.size() == m_childShapes.size());
- m_childTransforms[index] = transform;
- postUpdate();
- }
-
- //! Determines if this shape has triangles
- virtual bool needsRetrieveTriangles() const
- {
- return false;
- }
-
- //! Determines if this shape has tetrahedrons
- virtual bool needsRetrieveTetrahedrons() const
- {
- return false;
- }
-
- virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const
- {
- (void)prim_index;
- (void)triangle;
- btAssert(0);
- }
-
- virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const
- {
- (void)prim_index;
- (void)tetrahedron;
- btAssert(0);
- }
-
- //! Calculates the exact inertia tensor for this shape
- virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
-
- virtual const char* getName() const
- {
- return "GImpactCompound";
- }
-
- virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
- {
- return CONST_GIMPACT_COMPOUND_SHAPE;
- }
-};
-
-//! This class manages a sub part of a mesh supplied by the btStridingMeshInterface interface.
-/*!
-- Simply create this shape by passing the btStridingMeshInterface to the constructor btGImpactMeshShapePart, then you must call updateBound() after creating the mesh
-- When making operations with this shape, you must call <b>lock</b> before accessing to the trimesh primitives, and then call <b>unlock</b>
-- You can handle deformable meshes with this shape, by calling postUpdate() every time when changing the mesh vertices.
-
-*/
-class btGImpactMeshShapePart : public btGImpactShapeInterface
-{
-public:
- //! Trimesh primitive manager
- /*!
- Manages the info from btStridingMeshInterface object and controls the Lock/Unlock mechanism
- */
- class TrimeshPrimitiveManager : public btPrimitiveManagerBase
- {
- public:
- btScalar m_margin;
- btStridingMeshInterface* m_meshInterface;
- btVector3 m_scale;
- int m_part;
- int m_lock_count;
- const unsigned char* vertexbase;
- int numverts;
- PHY_ScalarType type;
- int stride;
- const unsigned char* indexbase;
- int indexstride;
- int numfaces;
- PHY_ScalarType indicestype;
-
- TrimeshPrimitiveManager()
- {
- m_meshInterface = NULL;
- m_part = 0;
- m_margin = 0.01f;
- m_scale = btVector3(1.f, 1.f, 1.f);
- m_lock_count = 0;
- vertexbase = 0;
- numverts = 0;
- stride = 0;
- indexbase = 0;
- indexstride = 0;
- numfaces = 0;
- }
-
- TrimeshPrimitiveManager(const TrimeshPrimitiveManager& manager)
- : btPrimitiveManagerBase()
- {
- m_meshInterface = manager.m_meshInterface;
- m_part = manager.m_part;
- m_margin = manager.m_margin;
- m_scale = manager.m_scale;
- m_lock_count = 0;
- vertexbase = 0;
- numverts = 0;
- stride = 0;
- indexbase = 0;
- indexstride = 0;
- numfaces = 0;
- }
-
- TrimeshPrimitiveManager(
- btStridingMeshInterface* meshInterface, int part)
- {
- m_meshInterface = meshInterface;
- m_part = part;
- m_scale = m_meshInterface->getScaling();
- m_margin = 0.1f;
- m_lock_count = 0;
- vertexbase = 0;
- numverts = 0;
- stride = 0;
- indexbase = 0;
- indexstride = 0;
- numfaces = 0;
- }
-
- virtual ~TrimeshPrimitiveManager() {}
-
- void lock()
- {
- if (m_lock_count > 0)
- {
- m_lock_count++;
- return;
- }
- m_meshInterface->getLockedReadOnlyVertexIndexBase(
- &vertexbase, numverts,
- type, stride, &indexbase, indexstride, numfaces, indicestype, m_part);
-
- m_lock_count = 1;
- }
-
- void unlock()
- {
- if (m_lock_count == 0) return;
- if (m_lock_count > 1)
- {
- --m_lock_count;
- return;
- }
- m_meshInterface->unLockReadOnlyVertexBase(m_part);
- vertexbase = NULL;
- m_lock_count = 0;
- }
-
- virtual bool is_trimesh() const
- {
- return true;
- }
-
- virtual int get_primitive_count() const
- {
- return (int)numfaces;
- }
-
- SIMD_FORCE_INLINE int get_vertex_count() const
- {
- return (int)numverts;
- }
-
- SIMD_FORCE_INLINE void get_indices(int face_index, unsigned int& i0, unsigned int& i1, unsigned int& i2) const
- {
- if (indicestype == PHY_SHORT)
- {
- unsigned short* s_indices = (unsigned short*)(indexbase + face_index * indexstride);
- i0 = s_indices[0];
- i1 = s_indices[1];
- i2 = s_indices[2];
- }
- else if (indicestype == PHY_INTEGER)
- {
- unsigned int* i_indices = (unsigned int*)(indexbase + face_index * indexstride);
- i0 = i_indices[0];
- i1 = i_indices[1];
- i2 = i_indices[2];
- }
- else
- {
- btAssert(indicestype == PHY_UCHAR);
- unsigned char* i_indices = (unsigned char*)(indexbase + face_index * indexstride);
- i0 = i_indices[0];
- i1 = i_indices[1];
- i2 = i_indices[2];
- }
- }
-
- SIMD_FORCE_INLINE void get_vertex(unsigned int vertex_index, btVector3& vertex) const
- {
- if (type == PHY_DOUBLE)
- {
- double* dvertices = (double*)(vertexbase + vertex_index * stride);
- vertex[0] = btScalar(dvertices[0] * m_scale[0]);
- vertex[1] = btScalar(dvertices[1] * m_scale[1]);
- vertex[2] = btScalar(dvertices[2] * m_scale[2]);
- }
- else
- {
- float* svertices = (float*)(vertexbase + vertex_index * stride);
- vertex[0] = svertices[0] * m_scale[0];
- vertex[1] = svertices[1] * m_scale[1];
- vertex[2] = svertices[2] * m_scale[2];
- }
- }
-
- virtual void get_primitive_box(int prim_index, btAABB& primbox) const
- {
- btPrimitiveTriangle triangle;
- get_primitive_triangle(prim_index, triangle);
- primbox.calc_from_triangle_margin(
- triangle.m_vertices[0],
- triangle.m_vertices[1], triangle.m_vertices[2], triangle.m_margin);
- }
-
- virtual void get_primitive_triangle(int prim_index, btPrimitiveTriangle& triangle) const
- {
- unsigned int indices[3];
- get_indices(prim_index, indices[0], indices[1], indices[2]);
- get_vertex(indices[0], triangle.m_vertices[0]);
- get_vertex(indices[1], triangle.m_vertices[1]);
- get_vertex(indices[2], triangle.m_vertices[2]);
- triangle.m_margin = m_margin;
- }
-
- SIMD_FORCE_INLINE void get_bullet_triangle(int prim_index, btTriangleShapeEx& triangle) const
- {
- unsigned int indices[3];
- get_indices(prim_index, indices[0], indices[1], indices[2]);
- get_vertex(indices[0], triangle.m_vertices1[0]);
- get_vertex(indices[1], triangle.m_vertices1[1]);
- get_vertex(indices[2], triangle.m_vertices1[2]);
- triangle.setMargin(m_margin);
- }
- };
-
-protected:
- TrimeshPrimitiveManager m_primitive_manager;
-
-public:
- btGImpactMeshShapePart()
- {
- m_box_set.setPrimitiveManager(&m_primitive_manager);
- }
-
- btGImpactMeshShapePart(btStridingMeshInterface* meshInterface, int part);
- virtual ~btGImpactMeshShapePart();
-
- //! if true, then its children must get transforms.
- virtual bool childrenHasTransform() const
- {
- return false;
- }
-
- //! call when reading child shapes
- virtual void lockChildShapes() const;
- virtual void unlockChildShapes() const;
-
- //! Gets the number of children
- virtual int getNumChildShapes() const
- {
- return m_primitive_manager.get_primitive_count();
- }
-
- //! Gets the children
- virtual btCollisionShape* getChildShape(int index)
- {
- (void)index;
- btAssert(0);
- return NULL;
- }
-
- //! Gets the child
- virtual const btCollisionShape* getChildShape(int index) const
- {
- (void)index;
- btAssert(0);
- return NULL;
- }
-
- //! Gets the children transform
- virtual btTransform getChildTransform(int index) const
- {
- (void)index;
- btAssert(0);
- return btTransform();
- }
-
- //! Sets the children transform
- /*!
- \post You must call updateBound() for update the box set.
- */
- virtual void setChildTransform(int index, const btTransform& transform)
- {
- (void)index;
- (void)transform;
- btAssert(0);
- }
-
- //! Obtains the primitive manager
- virtual const btPrimitiveManagerBase* getPrimitiveManager() const
- {
- return &m_primitive_manager;
- }
-
- SIMD_FORCE_INLINE TrimeshPrimitiveManager* getTrimeshPrimitiveManager()
- {
- return &m_primitive_manager;
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
-
- virtual const char* getName() const
- {
- return "GImpactMeshShapePart";
- }
-
- virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
- {
- return CONST_GIMPACT_TRIMESH_SHAPE_PART;
- }
-
- //! Determines if this shape has triangles
- virtual bool needsRetrieveTriangles() const
- {
- return true;
- }
-
- //! Determines if this shape has tetrahedrons
- virtual bool needsRetrieveTetrahedrons() const
- {
- return false;
- }
-
- virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const
- {
- m_primitive_manager.get_bullet_triangle(prim_index, triangle);
- }
-
- virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const
- {
- (void)prim_index;
- (void)tetrahedron;
- btAssert(0);
- }
-
- SIMD_FORCE_INLINE int getVertexCount() const
- {
- return m_primitive_manager.get_vertex_count();
- }
-
- SIMD_FORCE_INLINE void getVertex(int vertex_index, btVector3& vertex) const
- {
- m_primitive_manager.get_vertex(vertex_index, vertex);
- }
-
- SIMD_FORCE_INLINE void setMargin(btScalar margin)
- {
- m_primitive_manager.m_margin = margin;
- postUpdate();
- }
-
- SIMD_FORCE_INLINE btScalar getMargin() const
- {
- return m_primitive_manager.m_margin;
- }
-
- virtual void setLocalScaling(const btVector3& scaling)
- {
- m_primitive_manager.m_scale = scaling;
- postUpdate();
- }
-
- virtual const btVector3& getLocalScaling() const
- {
- return m_primitive_manager.m_scale;
- }
-
- SIMD_FORCE_INLINE int getPart() const
- {
- return (int)m_primitive_manager.m_part;
- }
-
- virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
- virtual void processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const;
-};
-
-//! This class manages a mesh supplied by the btStridingMeshInterface interface.
-/*!
-Set of btGImpactMeshShapePart parts
-- Simply create this shape by passing the btStridingMeshInterface to the constructor btGImpactMeshShape, then you must call updateBound() after creating the mesh
-
-- You can handle deformable meshes with this shape, by calling postUpdate() every time when changing the mesh vertices.
-
-*/
-class btGImpactMeshShape : public btGImpactShapeInterface
-{
- btStridingMeshInterface* m_meshInterface;
-
-protected:
- btAlignedObjectArray<btGImpactMeshShapePart*> m_mesh_parts;
- void buildMeshParts(btStridingMeshInterface* meshInterface)
- {
- for (int i = 0; i < meshInterface->getNumSubParts(); ++i)
- {
- btGImpactMeshShapePart* newpart = new btGImpactMeshShapePart(meshInterface, i);
- m_mesh_parts.push_back(newpart);
- }
- }
-
- //! use this function for perfofm refit in bounding boxes
- virtual void calcLocalAABB()
- {
- m_localAABB.invalidate();
- int i = m_mesh_parts.size();
- while (i--)
- {
- m_mesh_parts[i]->updateBound();
- m_localAABB.merge(m_mesh_parts[i]->getLocalBox());
- }
- }
-
-public:
- btGImpactMeshShape(btStridingMeshInterface* meshInterface)
- {
- m_meshInterface = meshInterface;
- buildMeshParts(meshInterface);
- }
-
- virtual ~btGImpactMeshShape()
- {
- int i = m_mesh_parts.size();
- while (i--)
- {
- btGImpactMeshShapePart* part = m_mesh_parts[i];
- delete part;
- }
- m_mesh_parts.clear();
- }
-
- btStridingMeshInterface* getMeshInterface()
- {
- return m_meshInterface;
- }
-
- const btStridingMeshInterface* getMeshInterface() const
- {
- return m_meshInterface;
- }
-
- int getMeshPartCount() const
- {
- return m_mesh_parts.size();
- }
-
- btGImpactMeshShapePart* getMeshPart(int index)
- {
- return m_mesh_parts[index];
- }
-
- const btGImpactMeshShapePart* getMeshPart(int index) const
- {
- return m_mesh_parts[index];
- }
-
- virtual void setLocalScaling(const btVector3& scaling)
- {
- localScaling = scaling;
-
- int i = m_mesh_parts.size();
- while (i--)
- {
- btGImpactMeshShapePart* part = m_mesh_parts[i];
- part->setLocalScaling(scaling);
- }
-
- m_needs_update = true;
- }
-
- virtual void setMargin(btScalar margin)
- {
- m_collisionMargin = margin;
-
- int i = m_mesh_parts.size();
- while (i--)
- {
- btGImpactMeshShapePart* part = m_mesh_parts[i];
- part->setMargin(margin);
- }
-
- m_needs_update = true;
- }
-
- //! Tells to this object that is needed to refit all the meshes
- virtual void postUpdate()
- {
- int i = m_mesh_parts.size();
- while (i--)
- {
- btGImpactMeshShapePart* part = m_mesh_parts[i];
- part->postUpdate();
- }
-
- m_needs_update = true;
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const;
-
- //! Obtains the primitive manager
- virtual const btPrimitiveManagerBase* getPrimitiveManager() const
- {
- btAssert(0);
- return NULL;
- }
-
- //! Gets the number of children
- virtual int getNumChildShapes() const
- {
- btAssert(0);
- return 0;
- }
-
- //! if true, then its children must get transforms.
- virtual bool childrenHasTransform() const
- {
- btAssert(0);
- return false;
- }
-
- //! Determines if this shape has triangles
- virtual bool needsRetrieveTriangles() const
- {
- btAssert(0);
- return false;
- }
-
- //! Determines if this shape has tetrahedrons
- virtual bool needsRetrieveTetrahedrons() const
- {
- btAssert(0);
- return false;
- }
-
- virtual void getBulletTriangle(int prim_index, btTriangleShapeEx& triangle) const
- {
- (void)prim_index;
- (void)triangle;
- btAssert(0);
- }
-
- virtual void getBulletTetrahedron(int prim_index, btTetrahedronShapeEx& tetrahedron) const
- {
- (void)prim_index;
- (void)tetrahedron;
- btAssert(0);
- }
-
- //! call when reading child shapes
- virtual void lockChildShapes() const
- {
- btAssert(0);
- }
-
- virtual void unlockChildShapes() const
- {
- btAssert(0);
- }
-
- //! Retrieves the bound from a child
- /*!
- */
- virtual void getChildAabb(int child_index, const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- (void)child_index;
- (void)t;
- (void)aabbMin;
- (void)aabbMax;
- btAssert(0);
- }
-
- //! Gets the children
- virtual btCollisionShape* getChildShape(int index)
- {
- (void)index;
- btAssert(0);
- return NULL;
- }
-
- //! Gets the child
- virtual const btCollisionShape* getChildShape(int index) const
- {
- (void)index;
- btAssert(0);
- return NULL;
- }
-
- //! Gets the children transform
- virtual btTransform getChildTransform(int index) const
- {
- (void)index;
- btAssert(0);
- return btTransform();
- }
-
- //! Sets the children transform
- /*!
- \post You must call updateBound() for update the box set.
- */
- virtual void setChildTransform(int index, const btTransform& transform)
- {
- (void)index;
- (void)transform;
- btAssert(0);
- }
-
- virtual eGIMPACT_SHAPE_TYPE getGImpactShapeType() const
- {
- return CONST_GIMPACT_TRIMESH_SHAPE;
- }
-
- virtual const char* getName() const
- {
- return "GImpactMesh";
- }
-
- virtual void rayTest(const btVector3& rayFrom, const btVector3& rayTo, btCollisionWorld::RayResultCallback& resultCallback) const;
-
- //! Function for retrieve triangles.
- /*!
- It gives the triangles in local space
- */
- virtual void processAllTriangles(btTriangleCallback* callback, const btVector3& aabbMin, const btVector3& aabbMax) const;
-
- virtual void processAllTrianglesRay(btTriangleCallback* callback, const btVector3& rayFrom, const btVector3& rayTo) const;
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btGImpactMeshShapeData
-{
- btCollisionShapeData m_collisionShapeData;
-
- btStridingMeshInterfaceData m_meshInterface;
-
- btVector3FloatData m_localScaling;
-
- float m_collisionMargin;
-
- int m_gimpactSubType;
-};
-
-SIMD_FORCE_INLINE int btGImpactMeshShape::calculateSerializeBufferSize() const
-{
- return sizeof(btGImpactMeshShapeData);
-}
-
-#endif //GIMPACT_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.cpp
deleted file mode 100644
index bfdb3db5d0..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.cpp
+++ /dev/null
@@ -1,266 +0,0 @@
-/*! \file btGenericPoolAllocator.cpp
-\author Francisco Leon Najera. email projectileman@yahoo.com
-
-General purpose allocator class
-*/
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGenericPoolAllocator.h"
-
-/// *************** btGenericMemoryPool ******************///////////
-
-size_t btGenericMemoryPool::allocate_from_free_nodes(size_t num_elements)
-{
- size_t ptr = BT_UINT_MAX;
-
- if (m_free_nodes_count == 0) return BT_UINT_MAX;
- // find an avaliable free node with the correct size
- size_t revindex = m_free_nodes_count;
-
- while (revindex-- && ptr == BT_UINT_MAX)
- {
- if (m_allocated_sizes[m_free_nodes[revindex]] >= num_elements)
- {
- ptr = revindex;
- }
- }
- if (ptr == BT_UINT_MAX) return BT_UINT_MAX; // not found
-
- revindex = ptr;
- ptr = m_free_nodes[revindex];
- // post: ptr contains the node index, and revindex the index in m_free_nodes
-
- size_t finalsize = m_allocated_sizes[ptr];
- finalsize -= num_elements;
-
- m_allocated_sizes[ptr] = num_elements;
-
- // post: finalsize>=0, m_allocated_sizes[ptr] has the requested size
-
- if (finalsize > 0) // preserve free node, there are some free memory
- {
- m_free_nodes[revindex] = ptr + num_elements;
- m_allocated_sizes[ptr + num_elements] = finalsize;
- }
- else // delete free node
- {
- // swap with end
- m_free_nodes[revindex] = m_free_nodes[m_free_nodes_count - 1];
- m_free_nodes_count--;
- }
-
- return ptr;
-}
-
-size_t btGenericMemoryPool::allocate_from_pool(size_t num_elements)
-{
- if (m_allocated_count + num_elements > m_max_element_count) return BT_UINT_MAX;
-
- size_t ptr = m_allocated_count;
-
- m_allocated_sizes[m_allocated_count] = num_elements;
- m_allocated_count += num_elements;
-
- return ptr;
-}
-
-void btGenericMemoryPool::init_pool(size_t element_size, size_t element_count)
-{
- m_allocated_count = 0;
- m_free_nodes_count = 0;
-
- m_element_size = element_size;
- m_max_element_count = element_count;
-
- m_pool = (unsigned char *)btAlignedAlloc(m_element_size * m_max_element_count, 16);
- m_free_nodes = (size_t *)btAlignedAlloc(sizeof(size_t) * m_max_element_count, 16);
- m_allocated_sizes = (size_t *)btAlignedAlloc(sizeof(size_t) * m_max_element_count, 16);
-
- for (size_t i = 0; i < m_max_element_count; i++)
- {
- m_allocated_sizes[i] = 0;
- }
-}
-
-void btGenericMemoryPool::end_pool()
-{
- btAlignedFree(m_pool);
- btAlignedFree(m_free_nodes);
- btAlignedFree(m_allocated_sizes);
- m_allocated_count = 0;
- m_free_nodes_count = 0;
-}
-
-//! Allocates memory in pool
-/*!
-\param size_bytes size in bytes of the buffer
-*/
-void *btGenericMemoryPool::allocate(size_t size_bytes)
-{
- size_t module = size_bytes % m_element_size;
- size_t element_count = size_bytes / m_element_size;
- if (module > 0) element_count++;
-
- size_t alloc_pos = allocate_from_free_nodes(element_count);
- // a free node is found
- if (alloc_pos != BT_UINT_MAX)
- {
- return get_element_data(alloc_pos);
- }
- // allocate directly on pool
- alloc_pos = allocate_from_pool(element_count);
-
- if (alloc_pos == BT_UINT_MAX) return NULL; // not space
- return get_element_data(alloc_pos);
-}
-
-bool btGenericMemoryPool::freeMemory(void *pointer)
-{
- unsigned char *pointer_pos = (unsigned char *)pointer;
- unsigned char *pool_pos = (unsigned char *)m_pool;
- // calc offset
- if (pointer_pos < pool_pos) return false; //other pool
- size_t offset = size_t(pointer_pos - pool_pos);
- if (offset >= get_pool_capacity()) return false; // far away
-
- // find free position
- m_free_nodes[m_free_nodes_count] = offset / m_element_size;
- m_free_nodes_count++;
- return true;
-}
-
-/// *******************! btGenericPoolAllocator *******************!///
-
-btGenericPoolAllocator::~btGenericPoolAllocator()
-{
- // destroy pools
- size_t i;
- for (i = 0; i < m_pool_count; i++)
- {
- m_pools[i]->end_pool();
- btAlignedFree(m_pools[i]);
- }
-}
-
-// creates a pool
-btGenericMemoryPool *btGenericPoolAllocator::push_new_pool()
-{
- if (m_pool_count >= BT_DEFAULT_MAX_POOLS) return NULL;
-
- btGenericMemoryPool *newptr = (btGenericMemoryPool *)btAlignedAlloc(sizeof(btGenericMemoryPool), 16);
-
- m_pools[m_pool_count] = newptr;
-
- m_pools[m_pool_count]->init_pool(m_pool_element_size, m_pool_element_count);
-
- m_pool_count++;
- return newptr;
-}
-
-void *btGenericPoolAllocator::failback_alloc(size_t size_bytes)
-{
- btGenericMemoryPool *pool = NULL;
-
- if (size_bytes <= get_pool_capacity())
- {
- pool = push_new_pool();
- }
-
- if (pool == NULL) // failback
- {
- return btAlignedAlloc(size_bytes, 16);
- }
-
- return pool->allocate(size_bytes);
-}
-
-bool btGenericPoolAllocator::failback_free(void *pointer)
-{
- btAlignedFree(pointer);
- return true;
-}
-
-//! Allocates memory in pool
-/*!
-\param size_bytes size in bytes of the buffer
-*/
-void *btGenericPoolAllocator::allocate(size_t size_bytes)
-{
- void *ptr = NULL;
-
- size_t i = 0;
- while (i < m_pool_count && ptr == NULL)
- {
- ptr = m_pools[i]->allocate(size_bytes);
- ++i;
- }
-
- if (ptr) return ptr;
-
- return failback_alloc(size_bytes);
-}
-
-bool btGenericPoolAllocator::freeMemory(void *pointer)
-{
- bool result = false;
-
- size_t i = 0;
- while (i < m_pool_count && result == false)
- {
- result = m_pools[i]->freeMemory(pointer);
- ++i;
- }
-
- if (result) return true;
-
- return failback_free(pointer);
-}
-
-/// ************** STANDARD ALLOCATOR ***************************///
-
-#define BT_DEFAULT_POOL_SIZE 32768
-#define BT_DEFAULT_POOL_ELEMENT_SIZE 8
-
-// main allocator
-class GIM_STANDARD_ALLOCATOR : public btGenericPoolAllocator
-{
-public:
- GIM_STANDARD_ALLOCATOR() : btGenericPoolAllocator(BT_DEFAULT_POOL_ELEMENT_SIZE, BT_DEFAULT_POOL_SIZE)
- {
- }
-};
-
-// global allocator
-GIM_STANDARD_ALLOCATOR g_main_allocator;
-
-void *btPoolAlloc(size_t size)
-{
- return g_main_allocator.allocate(size);
-}
-
-void *btPoolRealloc(void *ptr, size_t oldsize, size_t newsize)
-{
- void *newptr = btPoolAlloc(newsize);
- size_t copysize = oldsize < newsize ? oldsize : newsize;
- memcpy(newptr, ptr, copysize);
- btPoolFree(ptr);
- return newptr;
-}
-
-void btPoolFree(void *ptr)
-{
- g_main_allocator.freeMemory(ptr);
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h b/thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h
deleted file mode 100644
index a535088e48..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGenericPoolAllocator.h
+++ /dev/null
@@ -1,153 +0,0 @@
-/*! \file btGenericPoolAllocator.h
-\author Francisco Leon Najera. email projectileman@yahoo.com
-
-General purpose allocator class
-*/
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GENERIC_POOL_ALLOCATOR_H
-#define BT_GENERIC_POOL_ALLOCATOR_H
-
-#include <limits.h>
-#include <stdio.h>
-#include <string.h>
-#include "LinearMath/btAlignedAllocator.h"
-
-#define BT_UINT_MAX UINT_MAX
-#define BT_DEFAULT_MAX_POOLS 16
-
-//! Generic Pool class
-class btGenericMemoryPool
-{
-public:
- unsigned char *m_pool; //[m_element_size*m_max_element_count];
- size_t *m_free_nodes; //[m_max_element_count];//! free nodes
- size_t *m_allocated_sizes; //[m_max_element_count];//! Number of elements allocated per node
- size_t m_allocated_count;
- size_t m_free_nodes_count;
-
-protected:
- size_t m_element_size;
- size_t m_max_element_count;
-
- size_t allocate_from_free_nodes(size_t num_elements);
- size_t allocate_from_pool(size_t num_elements);
-
-public:
- void init_pool(size_t element_size, size_t element_count);
-
- void end_pool();
-
- btGenericMemoryPool(size_t element_size, size_t element_count)
- {
- init_pool(element_size, element_count);
- }
-
- ~btGenericMemoryPool()
- {
- end_pool();
- }
-
- inline size_t get_pool_capacity()
- {
- return m_element_size * m_max_element_count;
- }
-
- inline size_t gem_element_size()
- {
- return m_element_size;
- }
-
- inline size_t get_max_element_count()
- {
- return m_max_element_count;
- }
-
- inline size_t get_allocated_count()
- {
- return m_allocated_count;
- }
-
- inline size_t get_free_positions_count()
- {
- return m_free_nodes_count;
- }
-
- inline void *get_element_data(size_t element_index)
- {
- return &m_pool[element_index * m_element_size];
- }
-
- //! Allocates memory in pool
- /*!
- \param size_bytes size in bytes of the buffer
- */
- void *allocate(size_t size_bytes);
-
- bool freeMemory(void *pointer);
-};
-
-//! Generic Allocator with pools
-/*!
-General purpose Allocator which can create Memory Pools dynamiacally as needed.
-*/
-class btGenericPoolAllocator
-{
-protected:
- size_t m_pool_element_size;
- size_t m_pool_element_count;
-
-public:
- btGenericMemoryPool *m_pools[BT_DEFAULT_MAX_POOLS];
- size_t m_pool_count;
-
- inline size_t get_pool_capacity()
- {
- return m_pool_element_size * m_pool_element_count;
- }
-
-protected:
- // creates a pool
- btGenericMemoryPool *push_new_pool();
-
- void *failback_alloc(size_t size_bytes);
-
- bool failback_free(void *pointer);
-
-public:
- btGenericPoolAllocator(size_t pool_element_size, size_t pool_element_count)
- {
- m_pool_count = 0;
- m_pool_element_size = pool_element_size;
- m_pool_element_count = pool_element_count;
- }
-
- virtual ~btGenericPoolAllocator();
-
- //! Allocates memory in pool
- /*!
- \param size_bytes size in bytes of the buffer
- */
- void *allocate(size_t size_bytes);
-
- bool freeMemory(void *pointer);
-};
-
-void *btPoolAlloc(size_t size);
-void *btPoolRealloc(void *ptr, size_t oldsize, size_t newsize);
-void btPoolFree(void *ptr);
-
-#endif
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btGeometryOperations.h b/thirdparty/bullet/BulletCollision/Gimpact/btGeometryOperations.h
deleted file mode 100644
index 6a1ee6dcf9..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btGeometryOperations.h
+++ /dev/null
@@ -1,198 +0,0 @@
-#ifndef BT_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED
-#define BT_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED
-
-/*! \file btGeometryOperations.h
-*\author Francisco Leon Najera
-
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btBoxCollision.h"
-
-#define PLANEDIREPSILON 0.0000001f
-#define PARALELENORMALS 0.000001f
-
-#define BT_CLAMP(number, minval, maxval) (number < minval ? minval : (number > maxval ? maxval : number))
-
-/// Calc a plane from a triangle edge an a normal. plane is a vec4f
-SIMD_FORCE_INLINE void bt_edge_plane(const btVector3 &e1, const btVector3 &e2, const btVector3 &normal, btVector4 &plane)
-{
- btVector3 planenormal = (e2 - e1).cross(normal);
- planenormal.normalize();
- plane.setValue(planenormal[0], planenormal[1], planenormal[2], e2.dot(planenormal));
-}
-
-//***************** SEGMENT and LINE FUNCTIONS **********************************///
-
-/*! Finds the closest point(cp) to (v) on a segment (e1,e2)
- */
-SIMD_FORCE_INLINE void bt_closest_point_on_segment(
- btVector3 &cp, const btVector3 &v,
- const btVector3 &e1, const btVector3 &e2)
-{
- btVector3 n = e2 - e1;
- cp = v - e1;
- btScalar _scalar = cp.dot(n) / n.dot(n);
- if (_scalar < 0.0f)
- {
- cp = e1;
- }
- else if (_scalar > 1.0f)
- {
- cp = e2;
- }
- else
- {
- cp = _scalar * n + e1;
- }
-}
-
-//! line plane collision
-/*!
-*\return
- -0 if the ray never intersects
- -1 if the ray collides in front
- -2 if the ray collides in back
-*/
-
-SIMD_FORCE_INLINE int bt_line_plane_collision(
- const btVector4 &plane,
- const btVector3 &vDir,
- const btVector3 &vPoint,
- btVector3 &pout,
- btScalar &tparam,
- btScalar tmin, btScalar tmax)
-{
- btScalar _dotdir = vDir.dot(plane);
-
- if (btFabs(_dotdir) < PLANEDIREPSILON)
- {
- tparam = tmax;
- return 0;
- }
-
- btScalar _dis = bt_distance_point_plane(plane, vPoint);
- char returnvalue = _dis < 0.0f ? 2 : 1;
- tparam = -_dis / _dotdir;
-
- if (tparam < tmin)
- {
- returnvalue = 0;
- tparam = tmin;
- }
- else if (tparam > tmax)
- {
- returnvalue = 0;
- tparam = tmax;
- }
- pout = tparam * vDir + vPoint;
- return returnvalue;
-}
-
-//! Find closest points on segments
-SIMD_FORCE_INLINE void bt_segment_collision(
- const btVector3 &vA1,
- const btVector3 &vA2,
- const btVector3 &vB1,
- const btVector3 &vB2,
- btVector3 &vPointA,
- btVector3 &vPointB)
-{
- btVector3 AD = vA2 - vA1;
- btVector3 BD = vB2 - vB1;
- btVector3 N = AD.cross(BD);
- btScalar tp = N.length2();
-
- btVector4 _M; //plane
-
- if (tp < SIMD_EPSILON) //ARE PARALELE
- {
- //project B over A
- bool invert_b_order = false;
- _M[0] = vB1.dot(AD);
- _M[1] = vB2.dot(AD);
-
- if (_M[0] > _M[1])
- {
- invert_b_order = true;
- BT_SWAP_NUMBERS(_M[0], _M[1]);
- }
- _M[2] = vA1.dot(AD);
- _M[3] = vA2.dot(AD);
- //mid points
- N[0] = (_M[0] + _M[1]) * 0.5f;
- N[1] = (_M[2] + _M[3]) * 0.5f;
-
- if (N[0] < N[1])
- {
- if (_M[1] < _M[2])
- {
- vPointB = invert_b_order ? vB1 : vB2;
- vPointA = vA1;
- }
- else if (_M[1] < _M[3])
- {
- vPointB = invert_b_order ? vB1 : vB2;
- bt_closest_point_on_segment(vPointA, vPointB, vA1, vA2);
- }
- else
- {
- vPointA = vA2;
- bt_closest_point_on_segment(vPointB, vPointA, vB1, vB2);
- }
- }
- else
- {
- if (_M[3] < _M[0])
- {
- vPointB = invert_b_order ? vB2 : vB1;
- vPointA = vA2;
- }
- else if (_M[3] < _M[1])
- {
- vPointA = vA2;
- bt_closest_point_on_segment(vPointB, vPointA, vB1, vB2);
- }
- else
- {
- vPointB = invert_b_order ? vB1 : vB2;
- bt_closest_point_on_segment(vPointA, vPointB, vA1, vA2);
- }
- }
- return;
- }
-
- N = N.cross(BD);
- _M.setValue(N[0], N[1], N[2], vB1.dot(N));
-
- // get point A as the plane collision point
- bt_line_plane_collision(_M, AD, vA1, vPointA, tp, btScalar(0), btScalar(1));
-
- /*Closest point on segment*/
- vPointB = vPointA - vB1;
- tp = vPointB.dot(BD);
- tp /= BD.dot(BD);
- tp = BT_CLAMP(tp, 0.0f, 1.0f);
-
- vPointB = tp * BD + vB1;
-}
-
-#endif // GIM_VECTOR_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btQuantization.h b/thirdparty/bullet/BulletCollision/Gimpact/btQuantization.h
deleted file mode 100644
index 19a02a2177..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btQuantization.h
+++ /dev/null
@@ -1,79 +0,0 @@
-#ifndef BT_GIMPACT_QUANTIZATION_H_INCLUDED
-#define BT_GIMPACT_QUANTIZATION_H_INCLUDED
-
-/*! \file btQuantization.h
-*\author Francisco Leon Najera
-
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btTransform.h"
-
-SIMD_FORCE_INLINE void bt_calc_quantization_parameters(
- btVector3& outMinBound,
- btVector3& outMaxBound,
- btVector3& bvhQuantization,
- const btVector3& srcMinBound, const btVector3& srcMaxBound,
- btScalar quantizationMargin)
-{
- //enlarge the AABB to avoid division by zero when initializing the quantization values
- btVector3 clampValue(quantizationMargin, quantizationMargin, quantizationMargin);
- outMinBound = srcMinBound - clampValue;
- outMaxBound = srcMaxBound + clampValue;
- btVector3 aabbSize = outMaxBound - outMinBound;
- bvhQuantization = btVector3(btScalar(65535.0),
- btScalar(65535.0),
- btScalar(65535.0)) /
- aabbSize;
-}
-
-SIMD_FORCE_INLINE void bt_quantize_clamp(
- unsigned short* out,
- const btVector3& point,
- const btVector3& min_bound,
- const btVector3& max_bound,
- const btVector3& bvhQuantization)
-{
- btVector3 clampedPoint(point);
- clampedPoint.setMax(min_bound);
- clampedPoint.setMin(max_bound);
-
- btVector3 v = (clampedPoint - min_bound) * bvhQuantization;
- out[0] = (unsigned short)(v.getX() + 0.5f);
- out[1] = (unsigned short)(v.getY() + 0.5f);
- out[2] = (unsigned short)(v.getZ() + 0.5f);
-}
-
-SIMD_FORCE_INLINE btVector3 bt_unquantize(
- const unsigned short* vecIn,
- const btVector3& offset,
- const btVector3& bvhQuantization)
-{
- btVector3 vecOut;
- vecOut.setValue(
- (btScalar)(vecIn[0]) / (bvhQuantization.getX()),
- (btScalar)(vecIn[1]) / (bvhQuantization.getY()),
- (btScalar)(vecIn[2]) / (bvhQuantization.getZ()));
- vecOut += offset;
- return vecOut;
-}
-
-#endif // BT_GIMPACT_QUANTIZATION_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.cpp b/thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.cpp
deleted file mode 100644
index 292ef8c1ff..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.cpp
+++ /dev/null
@@ -1,203 +0,0 @@
-/*! \file btGImpactTriangleShape.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTriangleShapeEx.h"
-
-void GIM_TRIANGLE_CONTACT::merge_points(const btVector4& plane,
- btScalar margin, const btVector3* points, int point_count)
-{
- m_point_count = 0;
- m_penetration_depth = -1000.0f;
-
- int point_indices[MAX_TRI_CLIPPING];
-
- int _k;
-
- for (_k = 0; _k < point_count; _k++)
- {
- btScalar _dist = -bt_distance_point_plane(plane, points[_k]) + margin;
-
- if (_dist >= 0.0f)
- {
- if (_dist > m_penetration_depth)
- {
- m_penetration_depth = _dist;
- point_indices[0] = _k;
- m_point_count = 1;
- }
- else if ((_dist + SIMD_EPSILON) >= m_penetration_depth)
- {
- point_indices[m_point_count] = _k;
- m_point_count++;
- }
- }
- }
-
- for (_k = 0; _k < m_point_count; _k++)
- {
- m_points[_k] = points[point_indices[_k]];
- }
-}
-
-///class btPrimitiveTriangle
-bool btPrimitiveTriangle::overlap_test_conservative(const btPrimitiveTriangle& other)
-{
- btScalar total_margin = m_margin + other.m_margin;
- // classify points on other triangle
- btScalar dis0 = bt_distance_point_plane(m_plane, other.m_vertices[0]) - total_margin;
-
- btScalar dis1 = bt_distance_point_plane(m_plane, other.m_vertices[1]) - total_margin;
-
- btScalar dis2 = bt_distance_point_plane(m_plane, other.m_vertices[2]) - total_margin;
-
- if (dis0 > 0.0f && dis1 > 0.0f && dis2 > 0.0f) return false;
-
- // classify points on this triangle
- dis0 = bt_distance_point_plane(other.m_plane, m_vertices[0]) - total_margin;
-
- dis1 = bt_distance_point_plane(other.m_plane, m_vertices[1]) - total_margin;
-
- dis2 = bt_distance_point_plane(other.m_plane, m_vertices[2]) - total_margin;
-
- if (dis0 > 0.0f && dis1 > 0.0f && dis2 > 0.0f) return false;
-
- return true;
-}
-
-int btPrimitiveTriangle::clip_triangle(btPrimitiveTriangle& other, btVector3* clipped_points)
-{
- // edge 0
-
- btVector3 temp_points[MAX_TRI_CLIPPING];
-
- btVector4 edgeplane;
-
- get_edge_plane(0, edgeplane);
-
- int clipped_count = bt_plane_clip_triangle(
- edgeplane, other.m_vertices[0], other.m_vertices[1], other.m_vertices[2], temp_points);
-
- if (clipped_count == 0) return 0;
-
- btVector3 temp_points1[MAX_TRI_CLIPPING];
-
- // edge 1
- get_edge_plane(1, edgeplane);
-
- clipped_count = bt_plane_clip_polygon(edgeplane, temp_points, clipped_count, temp_points1);
-
- if (clipped_count == 0) return 0;
-
- // edge 2
- get_edge_plane(2, edgeplane);
-
- clipped_count = bt_plane_clip_polygon(
- edgeplane, temp_points1, clipped_count, clipped_points);
-
- return clipped_count;
-}
-
-bool btPrimitiveTriangle::find_triangle_collision_clip_method(btPrimitiveTriangle& other, GIM_TRIANGLE_CONTACT& contacts)
-{
- btScalar margin = m_margin + other.m_margin;
-
- btVector3 clipped_points[MAX_TRI_CLIPPING];
- int clipped_count;
- //create planes
- // plane v vs U points
-
- GIM_TRIANGLE_CONTACT contacts1;
-
- contacts1.m_separating_normal = m_plane;
-
- clipped_count = clip_triangle(other, clipped_points);
-
- if (clipped_count == 0)
- {
- return false; //Reject
- }
-
- //find most deep interval face1
- contacts1.merge_points(contacts1.m_separating_normal, margin, clipped_points, clipped_count);
- if (contacts1.m_point_count == 0) return false; // too far
- //Normal pointing to this triangle
- contacts1.m_separating_normal *= -1.f;
-
- //Clip tri1 by tri2 edges
- GIM_TRIANGLE_CONTACT contacts2;
- contacts2.m_separating_normal = other.m_plane;
-
- clipped_count = other.clip_triangle(*this, clipped_points);
-
- if (clipped_count == 0)
- {
- return false; //Reject
- }
-
- //find most deep interval face1
- contacts2.merge_points(contacts2.m_separating_normal, margin, clipped_points, clipped_count);
- if (contacts2.m_point_count == 0) return false; // too far
-
- ////check most dir for contacts
- if (contacts2.m_penetration_depth < contacts1.m_penetration_depth)
- {
- contacts.copy_from(contacts2);
- }
- else
- {
- contacts.copy_from(contacts1);
- }
- return true;
-}
-
-///class btTriangleShapeEx: public btTriangleShape
-
-bool btTriangleShapeEx::overlap_test_conservative(const btTriangleShapeEx& other)
-{
- btScalar total_margin = getMargin() + other.getMargin();
-
- btVector4 plane0;
- buildTriPlane(plane0);
- btVector4 plane1;
- other.buildTriPlane(plane1);
-
- // classify points on other triangle
- btScalar dis0 = bt_distance_point_plane(plane0, other.m_vertices1[0]) - total_margin;
-
- btScalar dis1 = bt_distance_point_plane(plane0, other.m_vertices1[1]) - total_margin;
-
- btScalar dis2 = bt_distance_point_plane(plane0, other.m_vertices1[2]) - total_margin;
-
- if (dis0 > 0.0f && dis1 > 0.0f && dis2 > 0.0f) return false;
-
- // classify points on this triangle
- dis0 = bt_distance_point_plane(plane1, m_vertices1[0]) - total_margin;
-
- dis1 = bt_distance_point_plane(plane1, m_vertices1[1]) - total_margin;
-
- dis2 = bt_distance_point_plane(plane1, m_vertices1[2]) - total_margin;
-
- if (dis0 > 0.0f && dis1 > 0.0f && dis2 > 0.0f) return false;
-
- return true;
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h b/thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h
deleted file mode 100644
index 568a1ce811..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/btTriangleShapeEx.h
+++ /dev/null
@@ -1,169 +0,0 @@
-/*! \file btGImpactShape.h
-\author Francisco Leon Najera
-*/
-/*
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2007 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef GIMPACT_TRIANGLE_SHAPE_EX_H
-#define GIMPACT_TRIANGLE_SHAPE_EX_H
-
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "btBoxCollision.h"
-#include "btClipPolygon.h"
-#include "btGeometryOperations.h"
-
-#define MAX_TRI_CLIPPING 16
-
-//! Structure for collision
-struct GIM_TRIANGLE_CONTACT
-{
- btScalar m_penetration_depth;
- int m_point_count;
- btVector4 m_separating_normal;
- btVector3 m_points[MAX_TRI_CLIPPING];
-
- SIMD_FORCE_INLINE void copy_from(const GIM_TRIANGLE_CONTACT& other)
- {
- m_penetration_depth = other.m_penetration_depth;
- m_separating_normal = other.m_separating_normal;
- m_point_count = other.m_point_count;
- int i = m_point_count;
- while (i--)
- {
- m_points[i] = other.m_points[i];
- }
- }
-
- GIM_TRIANGLE_CONTACT()
- {
- }
-
- GIM_TRIANGLE_CONTACT(const GIM_TRIANGLE_CONTACT& other)
- {
- copy_from(other);
- }
-
- //! classify points that are closer
- void merge_points(const btVector4& plane,
- btScalar margin, const btVector3* points, int point_count);
-};
-
-class btPrimitiveTriangle
-{
-public:
- btVector3 m_vertices[3];
- btVector4 m_plane;
- btScalar m_margin;
- btScalar m_dummy;
- btPrimitiveTriangle() : m_margin(0.01f)
- {
- }
-
- SIMD_FORCE_INLINE void buildTriPlane()
- {
- btVector3 normal = (m_vertices[1] - m_vertices[0]).cross(m_vertices[2] - m_vertices[0]);
- normal.normalize();
- m_plane.setValue(normal[0], normal[1], normal[2], m_vertices[0].dot(normal));
- }
-
- //! Test if triangles could collide
- bool overlap_test_conservative(const btPrimitiveTriangle& other);
-
- //! Calcs the plane which is paralele to the edge and perpendicular to the triangle plane
- /*!
- \pre this triangle must have its plane calculated.
- */
- SIMD_FORCE_INLINE void get_edge_plane(int edge_index, btVector4& plane) const
- {
- const btVector3& e0 = m_vertices[edge_index];
- const btVector3& e1 = m_vertices[(edge_index + 1) % 3];
- bt_edge_plane(e0, e1, m_plane, plane);
- }
-
- void applyTransform(const btTransform& t)
- {
- m_vertices[0] = t(m_vertices[0]);
- m_vertices[1] = t(m_vertices[1]);
- m_vertices[2] = t(m_vertices[2]);
- }
-
- //! Clips the triangle against this
- /*!
- \pre clipped_points must have MAX_TRI_CLIPPING size, and this triangle must have its plane calculated.
- \return the number of clipped points
- */
- int clip_triangle(btPrimitiveTriangle& other, btVector3* clipped_points);
-
- //! Find collision using the clipping method
- /*!
- \pre this triangle and other must have their triangles calculated
- */
- bool find_triangle_collision_clip_method(btPrimitiveTriangle& other, GIM_TRIANGLE_CONTACT& contacts);
-};
-
-//! Helper class for colliding Bullet Triangle Shapes
-/*!
-This class implements a better getAabb method than the previous btTriangleShape class
-*/
-class btTriangleShapeEx : public btTriangleShape
-{
-public:
- btTriangleShapeEx() : btTriangleShape(btVector3(0, 0, 0), btVector3(0, 0, 0), btVector3(0, 0, 0))
- {
- }
-
- btTriangleShapeEx(const btVector3& p0, const btVector3& p1, const btVector3& p2) : btTriangleShape(p0, p1, p2)
- {
- }
-
- btTriangleShapeEx(const btTriangleShapeEx& other) : btTriangleShape(other.m_vertices1[0], other.m_vertices1[1], other.m_vertices1[2])
- {
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- btVector3 tv0 = t(m_vertices1[0]);
- btVector3 tv1 = t(m_vertices1[1]);
- btVector3 tv2 = t(m_vertices1[2]);
-
- btAABB trianglebox(tv0, tv1, tv2, m_collisionMargin);
- aabbMin = trianglebox.m_min;
- aabbMax = trianglebox.m_max;
- }
-
- void applyTransform(const btTransform& t)
- {
- m_vertices1[0] = t(m_vertices1[0]);
- m_vertices1[1] = t(m_vertices1[1]);
- m_vertices1[2] = t(m_vertices1[2]);
- }
-
- SIMD_FORCE_INLINE void buildTriPlane(btVector4& plane) const
- {
- btVector3 normal = (m_vertices1[1] - m_vertices1[0]).cross(m_vertices1[2] - m_vertices1[0]);
- normal.normalize();
- plane.setValue(normal[0], normal[1], normal[2], m_vertices1[0].dot(normal));
- }
-
- bool overlap_test_conservative(const btTriangleShapeEx& other);
-};
-
-#endif //GIMPACT_TRIANGLE_MESH_SHAPE_H
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_array.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_array.h
deleted file mode 100644
index fc2dc38a33..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_array.h
+++ /dev/null
@@ -1,318 +0,0 @@
-#ifndef GIM_ARRAY_H_INCLUDED
-#define GIM_ARRAY_H_INCLUDED
-/*! \file gim_array.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_memory.h"
-
-#define GIM_ARRAY_GROW_INCREMENT 2
-#define GIM_ARRAY_GROW_FACTOR 2
-
-//! Very simple array container with fast access and simd memory
-template <typename T>
-class gim_array
-{
-public:
- //! properties
- //!@{
- T* m_data;
- GUINT m_size;
- GUINT m_allocated_size;
- //!@}
- //! protected operations
- //!@{
-
- inline void destroyData()
- {
- m_allocated_size = 0;
- if (m_data == NULL) return;
- gim_free(m_data);
- m_data = NULL;
- }
-
- inline bool resizeData(GUINT newsize)
- {
- if (newsize == 0)
- {
- destroyData();
- return true;
- }
-
- if (m_size > 0)
- {
- m_data = (T*)gim_realloc(m_data, m_size * sizeof(T), newsize * sizeof(T));
- }
- else
- {
- m_data = (T*)gim_alloc(newsize * sizeof(T));
- }
- m_allocated_size = newsize;
- return true;
- }
-
- inline bool growingCheck()
- {
- if (m_allocated_size <= m_size)
- {
- GUINT requestsize = m_size;
- m_size = m_allocated_size;
- if (resizeData((requestsize + GIM_ARRAY_GROW_INCREMENT) * GIM_ARRAY_GROW_FACTOR) == false) return false;
- }
- return true;
- }
-
- //!@}
- //! public operations
- //!@{
- inline bool reserve(GUINT size)
- {
- if (m_allocated_size >= size) return false;
- return resizeData(size);
- }
-
- inline void clear_range(GUINT start_range)
- {
- while (m_size > start_range)
- {
- m_data[--m_size].~T();
- }
- }
-
- inline void clear()
- {
- if (m_size == 0) return;
- clear_range(0);
- }
-
- inline void clear_memory()
- {
- clear();
- destroyData();
- }
-
- gim_array()
- {
- m_data = 0;
- m_size = 0;
- m_allocated_size = 0;
- }
-
- gim_array(GUINT reservesize)
- {
- m_data = 0;
- m_size = 0;
-
- m_allocated_size = 0;
- reserve(reservesize);
- }
-
- ~gim_array()
- {
- clear_memory();
- }
-
- inline GUINT size() const
- {
- return m_size;
- }
-
- inline GUINT max_size() const
- {
- return m_allocated_size;
- }
-
- inline T& operator[](size_t i)
- {
- return m_data[i];
- }
- inline const T& operator[](size_t i) const
- {
- return m_data[i];
- }
-
- inline T* pointer() { return m_data; }
- inline const T* pointer() const
- {
- return m_data;
- }
-
- inline T* get_pointer_at(GUINT i)
- {
- return m_data + i;
- }
-
- inline const T* get_pointer_at(GUINT i) const
- {
- return m_data + i;
- }
-
- inline T& at(GUINT i)
- {
- return m_data[i];
- }
-
- inline const T& at(GUINT i) const
- {
- return m_data[i];
- }
-
- inline T& front()
- {
- return *m_data;
- }
-
- inline const T& front() const
- {
- return *m_data;
- }
-
- inline T& back()
- {
- return m_data[m_size - 1];
- }
-
- inline const T& back() const
- {
- return m_data[m_size - 1];
- }
-
- inline void swap(GUINT i, GUINT j)
- {
- gim_swap_elements(m_data, i, j);
- }
-
- inline void push_back(const T& obj)
- {
- this->growingCheck();
- m_data[m_size] = obj;
- m_size++;
- }
-
- //!Simply increase the m_size, doesn't call the new element constructor
- inline void push_back_mem()
- {
- this->growingCheck();
- m_size++;
- }
-
- inline void push_back_memcpy(const T& obj)
- {
- this->growingCheck();
- gim_simd_memcpy(&m_data[m_size], &obj, sizeof(T));
- m_size++;
- }
-
- inline void pop_back()
- {
- m_size--;
- m_data[m_size].~T();
- }
-
- //!Simply decrease the m_size, doesn't call the deleted element destructor
- inline void pop_back_mem()
- {
- m_size--;
- }
-
- //! fast erase
- inline void erase(GUINT index)
- {
- if (index < m_size - 1)
- {
- swap(index, m_size - 1);
- }
- pop_back();
- }
-
- inline void erase_sorted_mem(GUINT index)
- {
- m_size--;
- for (GUINT i = index; i < m_size; i++)
- {
- gim_simd_memcpy(m_data + i, m_data + i + 1, sizeof(T));
- }
- }
-
- inline void erase_sorted(GUINT index)
- {
- m_data[index].~T();
- erase_sorted_mem(index);
- }
-
- inline void insert_mem(GUINT index)
- {
- this->growingCheck();
- for (GUINT i = m_size; i > index; i--)
- {
- gim_simd_memcpy(m_data + i, m_data + i - 1, sizeof(T));
- }
- m_size++;
- }
-
- inline void insert(const T& obj, GUINT index)
- {
- insert_mem(index);
- m_data[index] = obj;
- }
-
- inline void resize(GUINT size, bool call_constructor = true, const T& fillData = T())
- {
- if (size > m_size)
- {
- reserve(size);
- if (call_constructor)
- {
- while (m_size < size)
- {
- m_data[m_size] = fillData;
- m_size++;
- }
- }
- else
- {
- m_size = size;
- }
- }
- else if (size < m_size)
- {
- if (call_constructor) clear_range(size);
- m_size = size;
- }
- }
-
- inline void refit()
- {
- resizeData(m_size);
- }
-};
-
-#endif // GIM_CONTAINERS_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h
deleted file mode 100644
index 7ab783672d..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_basic_geometry_operations.h
+++ /dev/null
@@ -1,536 +0,0 @@
-#ifndef GIM_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED
-#define GIM_BASIC_GEOMETRY_OPERATIONS_H_INCLUDED
-
-/*! \file gim_basic_geometry_operations.h
-*\author Francisco Leon Najera
-type independant geometry routines
-
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_linear_math.h"
-
-#ifndef PLANEDIREPSILON
-#define PLANEDIREPSILON 0.0000001f
-#endif
-
-#ifndef PARALELENORMALS
-#define PARALELENORMALS 0.000001f
-#endif
-
-#define TRIANGLE_NORMAL(v1, v2, v3, n) \
- { \
- vec3f _dif1, _dif2; \
- VEC_DIFF(_dif1, v2, v1); \
- VEC_DIFF(_dif2, v3, v1); \
- VEC_CROSS(n, _dif1, _dif2); \
- VEC_NORMALIZE(n); \
- }
-
-#define TRIANGLE_NORMAL_FAST(v1, v2, v3, n) \
- { \
- vec3f _dif1, _dif2; \
- VEC_DIFF(_dif1, v2, v1); \
- VEC_DIFF(_dif2, v3, v1); \
- VEC_CROSS(n, _dif1, _dif2); \
- }
-
-/// plane is a vec4f
-#define TRIANGLE_PLANE(v1, v2, v3, plane) \
- { \
- TRIANGLE_NORMAL(v1, v2, v3, plane); \
- plane[3] = VEC_DOT(v1, plane); \
- }
-
-/// plane is a vec4f
-#define TRIANGLE_PLANE_FAST(v1, v2, v3, plane) \
- { \
- TRIANGLE_NORMAL_FAST(v1, v2, v3, plane); \
- plane[3] = VEC_DOT(v1, plane); \
- }
-
-/// Calc a plane from an edge an a normal. plane is a vec4f
-#define EDGE_PLANE(e1, e2, n, plane) \
- { \
- vec3f _dif; \
- VEC_DIFF(_dif, e2, e1); \
- VEC_CROSS(plane, _dif, n); \
- VEC_NORMALIZE(plane); \
- plane[3] = VEC_DOT(e1, plane); \
- }
-
-#define DISTANCE_PLANE_POINT(plane, point) (VEC_DOT(plane, point) - plane[3])
-
-#define PROJECT_POINT_PLANE(point, plane, projected) \
- { \
- GREAL _dis; \
- _dis = DISTANCE_PLANE_POINT(plane, point); \
- VEC_SCALE(projected, -_dis, plane); \
- VEC_SUM(projected, projected, point); \
- }
-
-//! Verifies if a point is in the plane hull
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE bool POINT_IN_HULL(
- const CLASS_POINT &point, const CLASS_PLANE *planes, GUINT plane_count)
-{
- GREAL _dis;
- for (GUINT _i = 0; _i < plane_count; ++_i)
- {
- _dis = DISTANCE_PLANE_POINT(planes[_i], point);
- if (_dis > 0.0f) return false;
- }
- return true;
-}
-
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE void PLANE_CLIP_SEGMENT(
- const CLASS_POINT &s1,
- const CLASS_POINT &s2, const CLASS_PLANE &plane, CLASS_POINT &clipped)
-{
- GREAL _dis1, _dis2;
- _dis1 = DISTANCE_PLANE_POINT(plane, s1);
- VEC_DIFF(clipped, s2, s1);
- _dis2 = VEC_DOT(clipped, plane);
- VEC_SCALE(clipped, -_dis1 / _dis2, clipped);
- VEC_SUM(clipped, clipped, s1);
-}
-
-enum ePLANE_INTERSECTION_TYPE
-{
- G_BACK_PLANE = 0,
- G_COLLIDE_PLANE,
- G_FRONT_PLANE
-};
-
-enum eLINE_PLANE_INTERSECTION_TYPE
-{
- G_FRONT_PLANE_S1 = 0,
- G_FRONT_PLANE_S2,
- G_BACK_PLANE_S1,
- G_BACK_PLANE_S2,
- G_COLLIDE_PLANE_S1,
- G_COLLIDE_PLANE_S2
-};
-
-//! Confirms if the plane intersect the edge or nor
-/*!
-intersection type must have the following values
-<ul>
-<li> 0 : Segment in front of plane, s1 closest
-<li> 1 : Segment in front of plane, s2 closest
-<li> 2 : Segment in back of plane, s1 closest
-<li> 3 : Segment in back of plane, s2 closest
-<li> 4 : Segment collides plane, s1 in back
-<li> 5 : Segment collides plane, s2 in back
-</ul>
-*/
-
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT2(
- const CLASS_POINT &s1,
- const CLASS_POINT &s2,
- const CLASS_PLANE &plane, CLASS_POINT &clipped)
-{
- GREAL _dis1 = DISTANCE_PLANE_POINT(plane, s1);
- GREAL _dis2 = DISTANCE_PLANE_POINT(plane, s2);
- if (_dis1 > -G_EPSILON && _dis2 > -G_EPSILON)
- {
- if (_dis1 < _dis2) return G_FRONT_PLANE_S1;
- return G_FRONT_PLANE_S2;
- }
- else if (_dis1 < G_EPSILON && _dis2 < G_EPSILON)
- {
- if (_dis1 > _dis2) return G_BACK_PLANE_S1;
- return G_BACK_PLANE_S2;
- }
-
- VEC_DIFF(clipped, s2, s1);
- _dis2 = VEC_DOT(clipped, plane);
- VEC_SCALE(clipped, -_dis1 / _dis2, clipped);
- VEC_SUM(clipped, clipped, s1);
- if (_dis1 < _dis2) return G_COLLIDE_PLANE_S1;
- return G_COLLIDE_PLANE_S2;
-}
-
-//! Confirms if the plane intersect the edge or not
-/*!
-clipped1 and clipped2 are the vertices behind the plane.
-clipped1 is the closest
-
-intersection_type must have the following values
-<ul>
-<li> 0 : Segment in front of plane, s1 closest
-<li> 1 : Segment in front of plane, s2 closest
-<li> 2 : Segment in back of plane, s1 closest
-<li> 3 : Segment in back of plane, s2 closest
-<li> 4 : Segment collides plane, s1 in back
-<li> 5 : Segment collides plane, s2 in back
-</ul>
-*/
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE eLINE_PLANE_INTERSECTION_TYPE PLANE_CLIP_SEGMENT_CLOSEST(
- const CLASS_POINT &s1,
- const CLASS_POINT &s2,
- const CLASS_PLANE &plane,
- CLASS_POINT &clipped1, CLASS_POINT &clipped2)
-{
- eLINE_PLANE_INTERSECTION_TYPE intersection_type = PLANE_CLIP_SEGMENT2(s1, s2, plane, clipped1);
- switch (intersection_type)
- {
- case G_FRONT_PLANE_S1:
- VEC_COPY(clipped1, s1);
- VEC_COPY(clipped2, s2);
- break;
- case G_FRONT_PLANE_S2:
- VEC_COPY(clipped1, s2);
- VEC_COPY(clipped2, s1);
- break;
- case G_BACK_PLANE_S1:
- VEC_COPY(clipped1, s1);
- VEC_COPY(clipped2, s2);
- break;
- case G_BACK_PLANE_S2:
- VEC_COPY(clipped1, s2);
- VEC_COPY(clipped2, s1);
- break;
- case G_COLLIDE_PLANE_S1:
- VEC_COPY(clipped2, s1);
- break;
- case G_COLLIDE_PLANE_S2:
- VEC_COPY(clipped2, s2);
- break;
- }
- return intersection_type;
-}
-
-//! Finds the 2 smallest cartesian coordinates of a plane normal
-#define PLANE_MINOR_AXES(plane, i0, i1) VEC_MINOR_AXES(plane, i0, i1)
-
-//! Ray plane collision in one way
-/*!
-Intersects plane in one way only. The ray must face the plane (normals must be in opossite directions).<br/>
-It uses the PLANEDIREPSILON constant.
-*/
-template <typename T, typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE bool RAY_PLANE_COLLISION(
- const CLASS_PLANE &plane,
- const CLASS_POINT &vDir,
- const CLASS_POINT &vPoint,
- CLASS_POINT &pout, T &tparam)
-{
- GREAL _dis, _dotdir;
- _dotdir = VEC_DOT(plane, vDir);
- if (_dotdir < PLANEDIREPSILON)
- {
- return false;
- }
- _dis = DISTANCE_PLANE_POINT(plane, vPoint);
- tparam = -_dis / _dotdir;
- VEC_SCALE(pout, tparam, vDir);
- VEC_SUM(pout, vPoint, pout);
- return true;
-}
-
-//! line collision
-/*!
-*\return
- -0 if the ray never intersects
- -1 if the ray collides in front
- -2 if the ray collides in back
-*/
-template <typename T, typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE GUINT LINE_PLANE_COLLISION(
- const CLASS_PLANE &plane,
- const CLASS_POINT &vDir,
- const CLASS_POINT &vPoint,
- CLASS_POINT &pout,
- T &tparam,
- T tmin, T tmax)
-{
- GREAL _dis, _dotdir;
- _dotdir = VEC_DOT(plane, vDir);
- if (btFabs(_dotdir) < PLANEDIREPSILON)
- {
- tparam = tmax;
- return 0;
- }
- _dis = DISTANCE_PLANE_POINT(plane, vPoint);
- char returnvalue = _dis < 0.0f ? 2 : 1;
- tparam = -_dis / _dotdir;
-
- if (tparam < tmin)
- {
- returnvalue = 0;
- tparam = tmin;
- }
- else if (tparam > tmax)
- {
- returnvalue = 0;
- tparam = tmax;
- }
-
- VEC_SCALE(pout, tparam, vDir);
- VEC_SUM(pout, vPoint, pout);
- return returnvalue;
-}
-
-/*! \brief Returns the Ray on which 2 planes intersect if they do.
- Written by Rodrigo Hernandez on ODE convex collision
-
- \param p1 Plane 1
- \param p2 Plane 2
- \param p Contains the origin of the ray upon returning if planes intersect
- \param d Contains the direction of the ray upon returning if planes intersect
- \return true if the planes intersect, 0 if paralell.
-
-*/
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE bool INTERSECT_PLANES(
- const CLASS_PLANE &p1,
- const CLASS_PLANE &p2,
- CLASS_POINT &p,
- CLASS_POINT &d)
-{
- VEC_CROSS(d, p1, p2);
- GREAL denom = VEC_DOT(d, d);
- if (GIM_IS_ZERO(denom)) return false;
- vec3f _n;
- _n[0] = p1[3] * p2[0] - p2[3] * p1[0];
- _n[1] = p1[3] * p2[1] - p2[3] * p1[1];
- _n[2] = p1[3] * p2[2] - p2[3] * p1[2];
- VEC_CROSS(p, _n, d);
- p[0] /= denom;
- p[1] /= denom;
- p[2] /= denom;
- return true;
-}
-
-//***************** SEGMENT and LINE FUNCTIONS **********************************///
-
-/*! Finds the closest point(cp) to (v) on a segment (e1,e2)
- */
-template <typename CLASS_POINT>
-SIMD_FORCE_INLINE void CLOSEST_POINT_ON_SEGMENT(
- CLASS_POINT &cp, const CLASS_POINT &v,
- const CLASS_POINT &e1, const CLASS_POINT &e2)
-{
- vec3f _n;
- VEC_DIFF(_n, e2, e1);
- VEC_DIFF(cp, v, e1);
- GREAL _scalar = VEC_DOT(cp, _n);
- _scalar /= VEC_DOT(_n, _n);
- if (_scalar < 0.0f)
- {
- VEC_COPY(cp, e1);
- }
- else if (_scalar > 1.0f)
- {
- VEC_COPY(cp, e2);
- }
- else
- {
- VEC_SCALE(cp, _scalar, _n);
- VEC_SUM(cp, cp, e1);
- }
-}
-
-/*! \brief Finds the line params where these lines intersect.
-
-\param dir1 Direction of line 1
-\param point1 Point of line 1
-\param dir2 Direction of line 2
-\param point2 Point of line 2
-\param t1 Result Parameter for line 1
-\param t2 Result Parameter for line 2
-\param dointersect 0 if the lines won't intersect, else 1
-
-*/
-template <typename T, typename CLASS_POINT>
-SIMD_FORCE_INLINE bool LINE_INTERSECTION_PARAMS(
- const CLASS_POINT &dir1,
- CLASS_POINT &point1,
- const CLASS_POINT &dir2,
- CLASS_POINT &point2,
- T &t1, T &t2)
-{
- GREAL det;
- GREAL e1e1 = VEC_DOT(dir1, dir1);
- GREAL e1e2 = VEC_DOT(dir1, dir2);
- GREAL e2e2 = VEC_DOT(dir2, dir2);
- vec3f p1p2;
- VEC_DIFF(p1p2, point1, point2);
- GREAL p1p2e1 = VEC_DOT(p1p2, dir1);
- GREAL p1p2e2 = VEC_DOT(p1p2, dir2);
- det = e1e2 * e1e2 - e1e1 * e2e2;
- if (GIM_IS_ZERO(det)) return false;
- t1 = (e1e2 * p1p2e2 - e2e2 * p1p2e1) / det;
- t2 = (e1e1 * p1p2e2 - e1e2 * p1p2e1) / det;
- return true;
-}
-
-//! Find closest points on segments
-template <typename CLASS_POINT>
-SIMD_FORCE_INLINE void SEGMENT_COLLISION(
- const CLASS_POINT &vA1,
- const CLASS_POINT &vA2,
- const CLASS_POINT &vB1,
- const CLASS_POINT &vB2,
- CLASS_POINT &vPointA,
- CLASS_POINT &vPointB)
-{
- CLASS_POINT _AD, _BD, n;
- vec4f _M; //plane
- VEC_DIFF(_AD, vA2, vA1);
- VEC_DIFF(_BD, vB2, vB1);
- VEC_CROSS(n, _AD, _BD);
- GREAL _tp = VEC_DOT(n, n);
- if (_tp < G_EPSILON) //ARE PARALELE
- {
- //project B over A
- bool invert_b_order = false;
- _M[0] = VEC_DOT(vB1, _AD);
- _M[1] = VEC_DOT(vB2, _AD);
- if (_M[0] > _M[1])
- {
- invert_b_order = true;
- GIM_SWAP_NUMBERS(_M[0], _M[1]);
- }
- _M[2] = VEC_DOT(vA1, _AD);
- _M[3] = VEC_DOT(vA2, _AD);
- //mid points
- n[0] = (_M[0] + _M[1]) * 0.5f;
- n[1] = (_M[2] + _M[3]) * 0.5f;
-
- if (n[0] < n[1])
- {
- if (_M[1] < _M[2])
- {
- vPointB = invert_b_order ? vB1 : vB2;
- vPointA = vA1;
- }
- else if (_M[1] < _M[3])
- {
- vPointB = invert_b_order ? vB1 : vB2;
- CLOSEST_POINT_ON_SEGMENT(vPointA, vPointB, vA1, vA2);
- }
- else
- {
- vPointA = vA2;
- CLOSEST_POINT_ON_SEGMENT(vPointB, vPointA, vB1, vB2);
- }
- }
- else
- {
- if (_M[3] < _M[0])
- {
- vPointB = invert_b_order ? vB2 : vB1;
- vPointA = vA2;
- }
- else if (_M[3] < _M[1])
- {
- vPointA = vA2;
- CLOSEST_POINT_ON_SEGMENT(vPointB, vPointA, vB1, vB2);
- }
- else
- {
- vPointB = invert_b_order ? vB1 : vB2;
- CLOSEST_POINT_ON_SEGMENT(vPointA, vPointB, vA1, vA2);
- }
- }
- return;
- }
-
- VEC_CROSS(_M, n, _BD);
- _M[3] = VEC_DOT(_M, vB1);
-
- LINE_PLANE_COLLISION(_M, _AD, vA1, vPointA, _tp, btScalar(0), btScalar(1));
- /*Closest point on segment*/
- VEC_DIFF(vPointB, vPointA, vB1);
- _tp = VEC_DOT(vPointB, _BD);
- _tp /= VEC_DOT(_BD, _BD);
- _tp = GIM_CLAMP(_tp, 0.0f, 1.0f);
- VEC_SCALE(vPointB, _tp, _BD);
- VEC_SUM(vPointB, vPointB, vB1);
-}
-
-//! Line box intersection in one dimension
-/*!
-
-*\param pos Position of the ray
-*\param dir Projection of the Direction of the ray
-*\param bmin Minimum bound of the box
-*\param bmax Maximum bound of the box
-*\param tfirst the minimum projection. Assign to 0 at first.
-*\param tlast the maximum projection. Assign to INFINITY at first.
-*\return true if there is an intersection.
-*/
-template <typename T>
-SIMD_FORCE_INLINE bool BOX_AXIS_INTERSECT(T pos, T dir, T bmin, T bmax, T &tfirst, T &tlast)
-{
- if (GIM_IS_ZERO(dir))
- {
- return !(pos < bmin || pos > bmax);
- }
- GREAL a0 = (bmin - pos) / dir;
- GREAL a1 = (bmax - pos) / dir;
- if (a0 > a1) GIM_SWAP_NUMBERS(a0, a1);
- tfirst = GIM_MAX(a0, tfirst);
- tlast = GIM_MIN(a1, tlast);
- if (tlast < tfirst) return false;
- return true;
-}
-
-//! Sorts 3 componets
-template <typename T>
-SIMD_FORCE_INLINE void SORT_3_INDICES(
- const T *values,
- GUINT *order_indices)
-{
- //get minimum
- order_indices[0] = values[0] < values[1] ? (values[0] < values[2] ? 0 : 2) : (values[1] < values[2] ? 1 : 2);
-
- //get second and third
- GUINT i0 = (order_indices[0] + 1) % 3;
- GUINT i1 = (i0 + 1) % 3;
-
- if (values[i0] < values[i1])
- {
- order_indices[1] = i0;
- order_indices[2] = i1;
- }
- else
- {
- order_indices[1] = i1;
- order_indices[2] = i0;
- }
-}
-
-#endif // GIM_VECTOR_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_bitset.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_bitset.h
deleted file mode 100644
index c1fb41a5c0..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_bitset.h
+++ /dev/null
@@ -1,117 +0,0 @@
-#ifndef GIM_BITSET_H_INCLUDED
-#define GIM_BITSET_H_INCLUDED
-/*! \file gim_bitset.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_array.h"
-
-#define GUINT_BIT_COUNT 32
-#define GUINT_EXPONENT 5
-
-class gim_bitset
-{
-public:
- gim_array<GUINT> m_container;
-
- gim_bitset()
- {
- }
-
- gim_bitset(GUINT bits_count)
- {
- resize(bits_count);
- }
-
- ~gim_bitset()
- {
- }
-
- inline bool resize(GUINT newsize)
- {
- GUINT oldsize = m_container.size();
- m_container.resize(newsize / GUINT_BIT_COUNT + 1, false);
- while (oldsize < m_container.size())
- {
- m_container[oldsize] = 0;
- }
- return true;
- }
-
- inline GUINT size()
- {
- return m_container.size() * GUINT_BIT_COUNT;
- }
-
- inline void set_all()
- {
- for (GUINT i = 0; i < m_container.size(); ++i)
- {
- m_container[i] = 0xffffffff;
- }
- }
-
- inline void clear_all()
- {
- for (GUINT i = 0; i < m_container.size(); ++i)
- {
- m_container[i] = 0;
- }
- }
-
- inline void set(GUINT bit_index)
- {
- if (bit_index >= size())
- {
- resize(bit_index);
- }
- m_container[bit_index >> GUINT_EXPONENT] |= (1 << (bit_index & (GUINT_BIT_COUNT - 1)));
- }
-
- ///Return 0 or 1
- inline char get(GUINT bit_index)
- {
- if (bit_index >= size())
- {
- return 0;
- }
- char value = m_container[bit_index >> GUINT_EXPONENT] &
- (1 << (bit_index & (GUINT_BIT_COUNT - 1)));
- return value;
- }
-
- inline void clear(GUINT bit_index)
- {
- m_container[bit_index >> GUINT_EXPONENT] &= ~(1 << (bit_index & (GUINT_BIT_COUNT - 1)));
- }
-};
-
-#endif // GIM_CONTAINERS_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_box_collision.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_box_collision.h
deleted file mode 100644
index 9f7cbe732f..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_box_collision.h
+++ /dev/null
@@ -1,578 +0,0 @@
-#ifndef GIM_BOX_COLLISION_H_INCLUDED
-#define GIM_BOX_COLLISION_H_INCLUDED
-
-/*! \file gim_box_collision.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-#include "gim_basic_geometry_operations.h"
-#include "LinearMath/btTransform.h"
-
-//SIMD_FORCE_INLINE bool test_cross_edge_box(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, const btVector3 & extend,
-// int dir_index0,
-// int dir_index1
-// int component_index0,
-// int component_index1)
-//{
-// // dir coords are -z and y
-//
-// const btScalar dir0 = -edge[dir_index0];
-// const btScalar dir1 = edge[dir_index1];
-// btScalar pmin = pointa[component_index0]*dir0 + pointa[component_index1]*dir1;
-// btScalar pmax = pointb[component_index0]*dir0 + pointb[component_index1]*dir1;
-// //find minmax
-// if(pmin>pmax)
-// {
-// GIM_SWAP_NUMBERS(pmin,pmax);
-// }
-// //find extends
-// const btScalar rad = extend[component_index0] * absolute_edge[dir_index0] +
-// extend[component_index1] * absolute_edge[dir_index1];
-//
-// if(pmin>rad || -rad>pmax) return false;
-// return true;
-//}
-//
-//SIMD_FORCE_INLINE bool test_cross_edge_box_X_axis(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, btVector3 & extend)
-//{
-//
-// return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,2,1,1,2);
-//}
-//
-//
-//SIMD_FORCE_INLINE bool test_cross_edge_box_Y_axis(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, btVector3 & extend)
-//{
-//
-// return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,0,2,2,0);
-//}
-//
-//SIMD_FORCE_INLINE bool test_cross_edge_box_Z_axis(
-// const btVector3 & edge,
-// const btVector3 & absolute_edge,
-// const btVector3 & pointa,
-// const btVector3 & pointb, btVector3 & extend)
-//{
-//
-// return test_cross_edge_box(edge,absolute_edge,pointa,pointb,extend,1,0,0,1);
-//}
-
-#ifndef TEST_CROSS_EDGE_BOX_MCR
-
-#define TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, i_dir_0, i_dir_1, i_comp_0, i_comp_1) \
- { \
- const btScalar dir0 = -edge[i_dir_0]; \
- const btScalar dir1 = edge[i_dir_1]; \
- btScalar pmin = pointa[i_comp_0] * dir0 + pointa[i_comp_1] * dir1; \
- btScalar pmax = pointb[i_comp_0] * dir0 + pointb[i_comp_1] * dir1; \
- if (pmin > pmax) \
- { \
- GIM_SWAP_NUMBERS(pmin, pmax); \
- } \
- const btScalar abs_dir0 = absolute_edge[i_dir_0]; \
- const btScalar abs_dir1 = absolute_edge[i_dir_1]; \
- const btScalar rad = _extend[i_comp_0] * abs_dir0 + _extend[i_comp_1] * abs_dir1; \
- if (pmin > rad || -rad > pmax) return false; \
- }
-
-#endif
-
-#define TEST_CROSS_EDGE_BOX_X_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \
- { \
- TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 2, 1, 1, 2); \
- }
-
-#define TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \
- { \
- TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 0, 2, 2, 0); \
- }
-
-#define TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(edge, absolute_edge, pointa, pointb, _extend) \
- { \
- TEST_CROSS_EDGE_BOX_MCR(edge, absolute_edge, pointa, pointb, _extend, 1, 0, 0, 1); \
- }
-
-//! Class for transforming a model1 to the space of model0
-class GIM_BOX_BOX_TRANSFORM_CACHE
-{
-public:
- btVector3 m_T1to0; //!< Transforms translation of model1 to model 0
- btMatrix3x3 m_R1to0; //!< Transforms Rotation of model1 to model 0, equal to R0' * R1
- btMatrix3x3 m_AR; //!< Absolute value of m_R1to0
-
- SIMD_FORCE_INLINE void calc_absolute_matrix()
- {
- static const btVector3 vepsi(1e-6f, 1e-6f, 1e-6f);
- m_AR[0] = vepsi + m_R1to0[0].absolute();
- m_AR[1] = vepsi + m_R1to0[1].absolute();
- m_AR[2] = vepsi + m_R1to0[2].absolute();
- }
-
- GIM_BOX_BOX_TRANSFORM_CACHE()
- {
- }
-
- GIM_BOX_BOX_TRANSFORM_CACHE(mat4f trans1_to_0)
- {
- COPY_MATRIX_3X3(m_R1to0, trans1_to_0)
- MAT_GET_TRANSLATION(trans1_to_0, m_T1to0)
- calc_absolute_matrix();
- }
-
- //! Calc the transformation relative 1 to 0. Inverts matrics by transposing
- SIMD_FORCE_INLINE void calc_from_homogenic(const btTransform &trans0, const btTransform &trans1)
- {
- m_R1to0 = trans0.getBasis().transpose();
- m_T1to0 = m_R1to0 * (-trans0.getOrigin());
-
- m_T1to0 += m_R1to0 * trans1.getOrigin();
- m_R1to0 *= trans1.getBasis();
-
- calc_absolute_matrix();
- }
-
- //! Calcs the full invertion of the matrices. Useful for scaling matrices
- SIMD_FORCE_INLINE void calc_from_full_invert(const btTransform &trans0, const btTransform &trans1)
- {
- m_R1to0 = trans0.getBasis().inverse();
- m_T1to0 = m_R1to0 * (-trans0.getOrigin());
-
- m_T1to0 += m_R1to0 * trans1.getOrigin();
- m_R1to0 *= trans1.getBasis();
-
- calc_absolute_matrix();
- }
-
- SIMD_FORCE_INLINE btVector3 transform(const btVector3 &point)
- {
- return point.dot3(m_R1to0[0], m_R1to0[1], m_R1to0[2]) + m_T1to0;
- }
-};
-
-#ifndef BOX_PLANE_EPSILON
-#define BOX_PLANE_EPSILON 0.000001f
-#endif
-
-//! Axis aligned box
-class GIM_AABB
-{
-public:
- btVector3 m_min;
- btVector3 m_max;
-
- GIM_AABB()
- {
- }
-
- GIM_AABB(const btVector3 &V1,
- const btVector3 &V2,
- const btVector3 &V3)
- {
- m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]);
- }
-
- GIM_AABB(const btVector3 &V1,
- const btVector3 &V2,
- const btVector3 &V3,
- GREAL margin)
- {
- m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]);
-
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- GIM_AABB(const GIM_AABB &other) : m_min(other.m_min), m_max(other.m_max)
- {
- }
-
- GIM_AABB(const GIM_AABB &other, btScalar margin) : m_min(other.m_min), m_max(other.m_max)
- {
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- SIMD_FORCE_INLINE void invalidate()
- {
- m_min[0] = G_REAL_INFINITY;
- m_min[1] = G_REAL_INFINITY;
- m_min[2] = G_REAL_INFINITY;
- m_max[0] = -G_REAL_INFINITY;
- m_max[1] = -G_REAL_INFINITY;
- m_max[2] = -G_REAL_INFINITY;
- }
-
- SIMD_FORCE_INLINE void increment_margin(btScalar margin)
- {
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- SIMD_FORCE_INLINE void copy_with_margin(const GIM_AABB &other, btScalar margin)
- {
- m_min[0] = other.m_min[0] - margin;
- m_min[1] = other.m_min[1] - margin;
- m_min[2] = other.m_min[2] - margin;
-
- m_max[0] = other.m_max[0] + margin;
- m_max[1] = other.m_max[1] + margin;
- m_max[2] = other.m_max[2] + margin;
- }
-
- template <typename CLASS_POINT>
- SIMD_FORCE_INLINE void calc_from_triangle(
- const CLASS_POINT &V1,
- const CLASS_POINT &V2,
- const CLASS_POINT &V3)
- {
- m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]);
- }
-
- template <typename CLASS_POINT>
- SIMD_FORCE_INLINE void calc_from_triangle_margin(
- const CLASS_POINT &V1,
- const CLASS_POINT &V2,
- const CLASS_POINT &V3, btScalar margin)
- {
- m_min[0] = GIM_MIN3(V1[0], V2[0], V3[0]);
- m_min[1] = GIM_MIN3(V1[1], V2[1], V3[1]);
- m_min[2] = GIM_MIN3(V1[2], V2[2], V3[2]);
-
- m_max[0] = GIM_MAX3(V1[0], V2[0], V3[0]);
- m_max[1] = GIM_MAX3(V1[1], V2[1], V3[1]);
- m_max[2] = GIM_MAX3(V1[2], V2[2], V3[2]);
-
- m_min[0] -= margin;
- m_min[1] -= margin;
- m_min[2] -= margin;
- m_max[0] += margin;
- m_max[1] += margin;
- m_max[2] += margin;
- }
-
- //! Apply a transform to an AABB
- SIMD_FORCE_INLINE void appy_transform(const btTransform &trans)
- {
- btVector3 center = (m_max + m_min) * 0.5f;
- btVector3 extends = m_max - center;
- // Compute new center
- center = trans(center);
-
- btVector3 textends = extends.dot3(trans.getBasis().getRow(0).absolute(),
- trans.getBasis().getRow(1).absolute(),
- trans.getBasis().getRow(2).absolute());
-
- m_min = center - textends;
- m_max = center + textends;
- }
-
- //! Merges a Box
- SIMD_FORCE_INLINE void merge(const GIM_AABB &box)
- {
- m_min[0] = GIM_MIN(m_min[0], box.m_min[0]);
- m_min[1] = GIM_MIN(m_min[1], box.m_min[1]);
- m_min[2] = GIM_MIN(m_min[2], box.m_min[2]);
-
- m_max[0] = GIM_MAX(m_max[0], box.m_max[0]);
- m_max[1] = GIM_MAX(m_max[1], box.m_max[1]);
- m_max[2] = GIM_MAX(m_max[2], box.m_max[2]);
- }
-
- //! Merges a point
- template <typename CLASS_POINT>
- SIMD_FORCE_INLINE void merge_point(const CLASS_POINT &point)
- {
- m_min[0] = GIM_MIN(m_min[0], point[0]);
- m_min[1] = GIM_MIN(m_min[1], point[1]);
- m_min[2] = GIM_MIN(m_min[2], point[2]);
-
- m_max[0] = GIM_MAX(m_max[0], point[0]);
- m_max[1] = GIM_MAX(m_max[1], point[1]);
- m_max[2] = GIM_MAX(m_max[2], point[2]);
- }
-
- //! Gets the extend and center
- SIMD_FORCE_INLINE void get_center_extend(btVector3 &center, btVector3 &extend) const
- {
- center = (m_max + m_min) * 0.5f;
- extend = m_max - center;
- }
-
- //! Finds the intersecting box between this box and the other.
- SIMD_FORCE_INLINE void find_intersection(const GIM_AABB &other, GIM_AABB &intersection) const
- {
- intersection.m_min[0] = GIM_MAX(other.m_min[0], m_min[0]);
- intersection.m_min[1] = GIM_MAX(other.m_min[1], m_min[1]);
- intersection.m_min[2] = GIM_MAX(other.m_min[2], m_min[2]);
-
- intersection.m_max[0] = GIM_MIN(other.m_max[0], m_max[0]);
- intersection.m_max[1] = GIM_MIN(other.m_max[1], m_max[1]);
- intersection.m_max[2] = GIM_MIN(other.m_max[2], m_max[2]);
- }
-
- SIMD_FORCE_INLINE bool has_collision(const GIM_AABB &other) const
- {
- if (m_min[0] > other.m_max[0] ||
- m_max[0] < other.m_min[0] ||
- m_min[1] > other.m_max[1] ||
- m_max[1] < other.m_min[1] ||
- m_min[2] > other.m_max[2] ||
- m_max[2] < other.m_min[2])
- {
- return false;
- }
- return true;
- }
-
- /*! \brief Finds the Ray intersection parameter.
- \param aabb Aligned box
- \param vorigin A vec3f with the origin of the ray
- \param vdir A vec3f with the direction of the ray
- */
- SIMD_FORCE_INLINE bool collide_ray(const btVector3 &vorigin, const btVector3 &vdir)
- {
- btVector3 extents, center;
- this->get_center_extend(center, extents);
- ;
-
- btScalar Dx = vorigin[0] - center[0];
- if (GIM_GREATER(Dx, extents[0]) && Dx * vdir[0] >= 0.0f) return false;
- btScalar Dy = vorigin[1] - center[1];
- if (GIM_GREATER(Dy, extents[1]) && Dy * vdir[1] >= 0.0f) return false;
- btScalar Dz = vorigin[2] - center[2];
- if (GIM_GREATER(Dz, extents[2]) && Dz * vdir[2] >= 0.0f) return false;
-
- btScalar f = vdir[1] * Dz - vdir[2] * Dy;
- if (btFabs(f) > extents[1] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[1])) return false;
- f = vdir[2] * Dx - vdir[0] * Dz;
- if (btFabs(f) > extents[0] * btFabs(vdir[2]) + extents[2] * btFabs(vdir[0])) return false;
- f = vdir[0] * Dy - vdir[1] * Dx;
- if (btFabs(f) > extents[0] * btFabs(vdir[1]) + extents[1] * btFabs(vdir[0])) return false;
- return true;
- }
-
- SIMD_FORCE_INLINE void projection_interval(const btVector3 &direction, btScalar &vmin, btScalar &vmax) const
- {
- btVector3 center = (m_max + m_min) * 0.5f;
- btVector3 extend = m_max - center;
-
- btScalar _fOrigin = direction.dot(center);
- btScalar _fMaximumExtent = extend.dot(direction.absolute());
- vmin = _fOrigin - _fMaximumExtent;
- vmax = _fOrigin + _fMaximumExtent;
- }
-
- SIMD_FORCE_INLINE ePLANE_INTERSECTION_TYPE plane_classify(const btVector4 &plane) const
- {
- btScalar _fmin, _fmax;
- this->projection_interval(plane, _fmin, _fmax);
-
- if (plane[3] > _fmax + BOX_PLANE_EPSILON)
- {
- return G_BACK_PLANE; // 0
- }
-
- if (plane[3] + BOX_PLANE_EPSILON >= _fmin)
- {
- return G_COLLIDE_PLANE; //1
- }
- return G_FRONT_PLANE; //2
- }
-
- SIMD_FORCE_INLINE bool overlapping_trans_conservative(const GIM_AABB &box, btTransform &trans1_to_0)
- {
- GIM_AABB tbox = box;
- tbox.appy_transform(trans1_to_0);
- return has_collision(tbox);
- }
-
- //! transcache is the transformation cache from box to this AABB
- SIMD_FORCE_INLINE bool overlapping_trans_cache(
- const GIM_AABB &box, const GIM_BOX_BOX_TRANSFORM_CACHE &transcache, bool fulltest)
- {
- //Taken from OPCODE
- btVector3 ea, eb; //extends
- btVector3 ca, cb; //extends
- get_center_extend(ca, ea);
- box.get_center_extend(cb, eb);
-
- btVector3 T;
- btScalar t, t2;
- int i;
-
- // Class I : A's basis vectors
- for (i = 0; i < 3; i++)
- {
- T[i] = transcache.m_R1to0[i].dot(cb) + transcache.m_T1to0[i] - ca[i];
- t = transcache.m_AR[i].dot(eb) + ea[i];
- if (GIM_GREATER(T[i], t)) return false;
- }
- // Class II : B's basis vectors
- for (i = 0; i < 3; i++)
- {
- t = MAT_DOT_COL(transcache.m_R1to0, T, i);
- t2 = MAT_DOT_COL(transcache.m_AR, ea, i) + eb[i];
- if (GIM_GREATER(t, t2)) return false;
- }
- // Class III : 9 cross products
- if (fulltest)
- {
- int j, m, n, o, p, q, r;
- for (i = 0; i < 3; i++)
- {
- m = (i + 1) % 3;
- n = (i + 2) % 3;
- o = i == 0 ? 1 : 0;
- p = i == 2 ? 1 : 2;
- for (j = 0; j < 3; j++)
- {
- q = j == 2 ? 1 : 2;
- r = j == 0 ? 1 : 0;
- t = T[n] * transcache.m_R1to0[m][j] - T[m] * transcache.m_R1to0[n][j];
- t2 = ea[o] * transcache.m_AR[p][j] + ea[p] * transcache.m_AR[o][j] +
- eb[r] * transcache.m_AR[i][q] + eb[q] * transcache.m_AR[i][r];
- if (GIM_GREATER(t, t2)) return false;
- }
- }
- }
- return true;
- }
-
- //! Simple test for planes.
- SIMD_FORCE_INLINE bool collide_plane(
- const btVector4 &plane)
- {
- ePLANE_INTERSECTION_TYPE classify = plane_classify(plane);
- return (classify == G_COLLIDE_PLANE);
- }
-
- //! test for a triangle, with edges
- SIMD_FORCE_INLINE bool collide_triangle_exact(
- const btVector3 &p1,
- const btVector3 &p2,
- const btVector3 &p3,
- const btVector4 &triangle_plane)
- {
- if (!collide_plane(triangle_plane)) return false;
-
- btVector3 center, extends;
- this->get_center_extend(center, extends);
-
- const btVector3 v1(p1 - center);
- const btVector3 v2(p2 - center);
- const btVector3 v3(p3 - center);
-
- //First axis
- btVector3 diff(v2 - v1);
- btVector3 abs_diff = diff.absolute();
- //Test With X axis
- TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v1, v3, extends);
- //Test With Y axis
- TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v1, v3, extends);
- //Test With Z axis
- TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v1, v3, extends);
-
- diff = v3 - v2;
- abs_diff = diff.absolute();
- //Test With X axis
- TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v2, v1, extends);
- //Test With Y axis
- TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v2, v1, extends);
- //Test With Z axis
- TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v2, v1, extends);
-
- diff = v1 - v3;
- abs_diff = diff.absolute();
- //Test With X axis
- TEST_CROSS_EDGE_BOX_X_AXIS_MCR(diff, abs_diff, v3, v2, extends);
- //Test With Y axis
- TEST_CROSS_EDGE_BOX_Y_AXIS_MCR(diff, abs_diff, v3, v2, extends);
- //Test With Z axis
- TEST_CROSS_EDGE_BOX_Z_AXIS_MCR(diff, abs_diff, v3, v2, extends);
-
- return true;
- }
-};
-
-#ifndef BT_BOX_COLLISION_H_INCLUDED
-//! Compairison of transformation objects
-SIMD_FORCE_INLINE bool btCompareTransformsEqual(const btTransform &t1, const btTransform &t2)
-{
- if (!(t1.getOrigin() == t2.getOrigin())) return false;
-
- if (!(t1.getBasis().getRow(0) == t2.getBasis().getRow(0))) return false;
- if (!(t1.getBasis().getRow(1) == t2.getBasis().getRow(1))) return false;
- if (!(t1.getBasis().getRow(2) == t2.getBasis().getRow(2))) return false;
- return true;
-}
-#endif
-
-#endif // GIM_BOX_COLLISION_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.cpp b/thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.cpp
deleted file mode 100644
index 0c7a6b7fc1..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.cpp
+++ /dev/null
@@ -1,176 +0,0 @@
-
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_box_set.h"
-
-GUINT GIM_BOX_TREE::_calc_splitting_axis(
- gim_array<GIM_AABB_DATA>& primitive_boxes, GUINT startIndex, GUINT endIndex)
-{
- GUINT i;
-
- btVector3 means(btScalar(0.), btScalar(0.), btScalar(0.));
- btVector3 variance(btScalar(0.), btScalar(0.), btScalar(0.));
- GUINT numIndices = endIndex - startIndex;
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- means += center;
- }
- means *= (btScalar(1.) / (btScalar)numIndices);
-
- for (i = startIndex; i < endIndex; i++)
- {
- btVector3 center = btScalar(0.5) * (primitive_boxes[i].m_bound.m_max +
- primitive_boxes[i].m_bound.m_min);
- btVector3 diff2 = center - means;
- diff2 = diff2 * diff2;
- variance += diff2;
- }
- variance *= (btScalar(1.) / ((btScalar)numIndices - 1));
-
- return variance.maxAxis();
-}
-
-GUINT GIM_BOX_TREE::_sort_and_calc_splitting_index(
- gim_array<GIM_AABB_DATA>& primitive_boxes, GUINT startIndex,
- GUINT endIndex, GUINT splitAxis)
-{
- GUINT i;
- GUINT splitIndex = startIndex;
- GUINT numIndices = endIndex - startIndex;
-
- // average of centers
- btScalar splitValue = 0.0f;
- for (i = startIndex; i < endIndex; i++)
- {
- splitValue += 0.5f * (primitive_boxes[i].m_bound.m_max[splitAxis] +
- primitive_boxes[i].m_bound.m_min[splitAxis]);
- }
- splitValue /= (btScalar)numIndices;
-
- //sort leafNodes so all values larger then splitValue comes first, and smaller values start from 'splitIndex'.
- for (i = startIndex; i < endIndex; i++)
- {
- btScalar center = 0.5f * (primitive_boxes[i].m_bound.m_max[splitAxis] +
- primitive_boxes[i].m_bound.m_min[splitAxis]);
- if (center > splitValue)
- {
- //swap
- primitive_boxes.swap(i, splitIndex);
- splitIndex++;
- }
- }
-
- //if the splitIndex causes unbalanced trees, fix this by using the center in between startIndex and endIndex
- //otherwise the tree-building might fail due to stack-overflows in certain cases.
- //unbalanced1 is unsafe: it can cause stack overflows
- //bool unbalanced1 = ((splitIndex==startIndex) || (splitIndex == (endIndex-1)));
-
- //unbalanced2 should work too: always use center (perfect balanced trees)
- //bool unbalanced2 = true;
-
- //this should be safe too:
- GUINT rangeBalancedIndices = numIndices / 3;
- bool unbalanced = ((splitIndex <= (startIndex + rangeBalancedIndices)) || (splitIndex >= (endIndex - 1 - rangeBalancedIndices)));
-
- if (unbalanced)
- {
- splitIndex = startIndex + (numIndices >> 1);
- }
-
- btAssert(!((splitIndex == startIndex) || (splitIndex == (endIndex))));
-
- return splitIndex;
-}
-
-void GIM_BOX_TREE::_build_sub_tree(gim_array<GIM_AABB_DATA>& primitive_boxes, GUINT startIndex, GUINT endIndex)
-{
- GUINT current_index = m_num_nodes++;
-
- btAssert((endIndex - startIndex) > 0);
-
- if ((endIndex - startIndex) == 1) //we got a leaf
- {
- m_node_array[current_index].m_left = 0;
- m_node_array[current_index].m_right = 0;
- m_node_array[current_index].m_escapeIndex = 0;
-
- m_node_array[current_index].m_bound = primitive_boxes[startIndex].m_bound;
- m_node_array[current_index].m_data = primitive_boxes[startIndex].m_data;
- return;
- }
-
- //configure inner node
-
- GUINT splitIndex;
-
- //calc this node bounding box
- m_node_array[current_index].m_bound.invalidate();
- for (splitIndex = startIndex; splitIndex < endIndex; splitIndex++)
- {
- m_node_array[current_index].m_bound.merge(primitive_boxes[splitIndex].m_bound);
- }
-
- //calculate Best Splitting Axis and where to split it. Sort the incoming 'leafNodes' array within range 'startIndex/endIndex'.
-
- //split axis
- splitIndex = _calc_splitting_axis(primitive_boxes, startIndex, endIndex);
-
- splitIndex = _sort_and_calc_splitting_index(
- primitive_boxes, startIndex, endIndex, splitIndex);
-
- //configure this inner node : the left node index
- m_node_array[current_index].m_left = m_num_nodes;
- //build left child tree
- _build_sub_tree(primitive_boxes, startIndex, splitIndex);
-
- //configure this inner node : the right node index
- m_node_array[current_index].m_right = m_num_nodes;
-
- //build right child tree
- _build_sub_tree(primitive_boxes, splitIndex, endIndex);
-
- //configure this inner node : the escape index
- m_node_array[current_index].m_escapeIndex = m_num_nodes - current_index;
-}
-
-//! stackless build tree
-void GIM_BOX_TREE::build_tree(
- gim_array<GIM_AABB_DATA>& primitive_boxes)
-{
- // initialize node count to 0
- m_num_nodes = 0;
- // allocate nodes
- m_node_array.resize(primitive_boxes.size() * 2);
-
- _build_sub_tree(primitive_boxes, 0, primitive_boxes.size());
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.h
deleted file mode 100644
index afc591dac0..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_box_set.h
+++ /dev/null
@@ -1,640 +0,0 @@
-#ifndef GIM_BOX_SET_H_INCLUDED
-#define GIM_BOX_SET_H_INCLUDED
-
-/*! \file gim_box_set.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_array.h"
-#include "gim_radixsort.h"
-#include "gim_box_collision.h"
-#include "gim_tri_collision.h"
-#include "gim_pair.h"
-
-//! A pairset array
-class gim_pair_set : public gim_array<GIM_PAIR>
-{
-public:
- gim_pair_set() : gim_array<GIM_PAIR>(32)
- {
- }
- inline void push_pair(GUINT index1, GUINT index2)
- {
- push_back(GIM_PAIR(index1, index2));
- }
-
- inline void push_pair_inv(GUINT index1, GUINT index2)
- {
- push_back(GIM_PAIR(index2, index1));
- }
-};
-
-//! Prototype Base class for primitive classification
-/*!
-This class is a wrapper for primitive collections.
-This tells relevant info for the Bounding Box set classes, which take care of space classification.
-This class can manage Compound shapes and trimeshes, and if it is managing trimesh then the Hierarchy Bounding Box classes will take advantage of primitive Vs Box overlapping tests for getting optimal results and less Per Box compairisons.
-*/
-class GIM_PRIMITIVE_MANAGER_PROTOTYPE
-{
-public:
- virtual ~GIM_PRIMITIVE_MANAGER_PROTOTYPE() {}
- //! determines if this manager consist on only triangles, which special case will be optimized
- virtual bool is_trimesh() = 0;
- virtual GUINT get_primitive_count() = 0;
- virtual void get_primitive_box(GUINT prim_index, GIM_AABB& primbox) = 0;
- virtual void get_primitive_triangle(GUINT prim_index, GIM_TRIANGLE& triangle) = 0;
-};
-
-struct GIM_AABB_DATA
-{
- GIM_AABB m_bound;
- GUINT m_data;
-};
-
-//! Node Structure for trees
-struct GIM_BOX_TREE_NODE
-{
- GIM_AABB m_bound;
- GUINT m_left; //!< Left subtree
- GUINT m_right; //!< Right subtree
- GUINT m_escapeIndex; //!< Scape index for traversing
- GUINT m_data; //!< primitive index if apply
-
- GIM_BOX_TREE_NODE()
- {
- m_left = 0;
- m_right = 0;
- m_escapeIndex = 0;
- m_data = 0;
- }
-
- SIMD_FORCE_INLINE bool is_leaf_node() const
- {
- return (!m_left && !m_right);
- }
-};
-
-//! Basic Box tree structure
-class GIM_BOX_TREE
-{
-protected:
- GUINT m_num_nodes;
- gim_array<GIM_BOX_TREE_NODE> m_node_array;
-
-protected:
- GUINT _sort_and_calc_splitting_index(
- gim_array<GIM_AABB_DATA>& primitive_boxes,
- GUINT startIndex, GUINT endIndex, GUINT splitAxis);
-
- GUINT _calc_splitting_axis(gim_array<GIM_AABB_DATA>& primitive_boxes, GUINT startIndex, GUINT endIndex);
-
- void _build_sub_tree(gim_array<GIM_AABB_DATA>& primitive_boxes, GUINT startIndex, GUINT endIndex);
-
-public:
- GIM_BOX_TREE()
- {
- m_num_nodes = 0;
- }
-
- //! prototype functions for box tree management
- //!@{
- void build_tree(gim_array<GIM_AABB_DATA>& primitive_boxes);
-
- SIMD_FORCE_INLINE void clearNodes()
- {
- m_node_array.clear();
- m_num_nodes = 0;
- }
-
- //! node count
- SIMD_FORCE_INLINE GUINT getNodeCount() const
- {
- return m_num_nodes;
- }
-
- //! tells if the node is a leaf
- SIMD_FORCE_INLINE bool isLeafNode(GUINT nodeindex) const
- {
- return m_node_array[nodeindex].is_leaf_node();
- }
-
- SIMD_FORCE_INLINE GUINT getNodeData(GUINT nodeindex) const
- {
- return m_node_array[nodeindex].m_data;
- }
-
- SIMD_FORCE_INLINE void getNodeBound(GUINT nodeindex, GIM_AABB& bound) const
- {
- bound = m_node_array[nodeindex].m_bound;
- }
-
- SIMD_FORCE_INLINE void setNodeBound(GUINT nodeindex, const GIM_AABB& bound)
- {
- m_node_array[nodeindex].m_bound = bound;
- }
-
- SIMD_FORCE_INLINE GUINT getLeftNodeIndex(GUINT nodeindex) const
- {
- return m_node_array[nodeindex].m_left;
- }
-
- SIMD_FORCE_INLINE GUINT getRightNodeIndex(GUINT nodeindex) const
- {
- return m_node_array[nodeindex].m_right;
- }
-
- SIMD_FORCE_INLINE GUINT getScapeNodeIndex(GUINT nodeindex) const
- {
- return m_node_array[nodeindex].m_escapeIndex;
- }
-
- //!@}
-};
-
-//! Generic Box Tree Template
-/*!
-This class offers an structure for managing a box tree of primitives.
-Requires a Primitive prototype (like GIM_PRIMITIVE_MANAGER_PROTOTYPE ) and
-a Box tree structure ( like GIM_BOX_TREE).
-*/
-template <typename _GIM_PRIMITIVE_MANAGER_PROTOTYPE, typename _GIM_BOX_TREE_PROTOTYPE>
-class GIM_BOX_TREE_TEMPLATE_SET
-{
-protected:
- _GIM_PRIMITIVE_MANAGER_PROTOTYPE m_primitive_manager;
- _GIM_BOX_TREE_PROTOTYPE m_box_tree;
-
-protected:
- //stackless refit
- SIMD_FORCE_INLINE void refit()
- {
- GUINT nodecount = getNodeCount();
- while (nodecount--)
- {
- if (isLeafNode(nodecount))
- {
- GIM_AABB leafbox;
- m_primitive_manager.get_primitive_box(getNodeData(nodecount), leafbox);
- setNodeBound(nodecount, leafbox);
- }
- else
- {
- //get left bound
- GUINT childindex = getLeftNodeIndex(nodecount);
- GIM_AABB bound;
- getNodeBound(childindex, bound);
- //get right bound
- childindex = getRightNodeIndex(nodecount);
- GIM_AABB bound2;
- getNodeBound(childindex, bound2);
- bound.merge(bound2);
-
- setNodeBound(nodecount, bound);
- }
- }
- }
-
-public:
- GIM_BOX_TREE_TEMPLATE_SET()
- {
- }
-
- SIMD_FORCE_INLINE GIM_AABB getGlobalBox() const
- {
- GIM_AABB totalbox;
- getNodeBound(0, totalbox);
- return totalbox;
- }
-
- SIMD_FORCE_INLINE void setPrimitiveManager(const _GIM_PRIMITIVE_MANAGER_PROTOTYPE& primitive_manager)
- {
- m_primitive_manager = primitive_manager;
- }
-
- const _GIM_PRIMITIVE_MANAGER_PROTOTYPE& getPrimitiveManager() const
- {
- return m_primitive_manager;
- }
-
- _GIM_PRIMITIVE_MANAGER_PROTOTYPE& getPrimitiveManager()
- {
- return m_primitive_manager;
- }
-
- //! node manager prototype functions
- ///@{
-
- //! this attemps to refit the box set.
- SIMD_FORCE_INLINE void update()
- {
- refit();
- }
-
- //! this rebuild the entire set
- SIMD_FORCE_INLINE void buildSet()
- {
- //obtain primitive boxes
- gim_array<GIM_AABB_DATA> primitive_boxes;
- primitive_boxes.resize(m_primitive_manager.get_primitive_count(), false);
-
- for (GUINT i = 0; i < primitive_boxes.size(); i++)
- {
- m_primitive_manager.get_primitive_box(i, primitive_boxes[i].m_bound);
- primitive_boxes[i].m_data = i;
- }
-
- m_box_tree.build_tree(primitive_boxes);
- }
-
- //! returns the indices of the primitives in the m_primitive_manager
- SIMD_FORCE_INLINE bool boxQuery(const GIM_AABB& box, gim_array<GUINT>& collided_results) const
- {
- GUINT curIndex = 0;
- GUINT numNodes = getNodeCount();
-
- while (curIndex < numNodes)
- {
- GIM_AABB bound;
- getNodeBound(curIndex, bound);
-
- //catch bugs in tree data
-
- bool aabbOverlap = bound.has_collision(box);
- bool isleafnode = isLeafNode(curIndex);
-
- if (isleafnode && aabbOverlap)
- {
- collided_results.push_back(getNodeData(curIndex));
- }
-
- if (aabbOverlap || isleafnode)
- {
- //next subnode
- curIndex++;
- }
- else
- {
- //skip node
- curIndex += getScapeNodeIndex(curIndex);
- }
- }
- if (collided_results.size() > 0) return true;
- return false;
- }
-
- //! returns the indices of the primitives in the m_primitive_manager
- SIMD_FORCE_INLINE bool boxQueryTrans(const GIM_AABB& box,
- const btTransform& transform, gim_array<GUINT>& collided_results) const
- {
- GIM_AABB transbox = box;
- transbox.appy_transform(transform);
- return boxQuery(transbox, collided_results);
- }
-
- //! returns the indices of the primitives in the m_primitive_manager
- SIMD_FORCE_INLINE bool rayQuery(
- const btVector3& ray_dir, const btVector3& ray_origin,
- gim_array<GUINT>& collided_results) const
- {
- GUINT curIndex = 0;
- GUINT numNodes = getNodeCount();
-
- while (curIndex < numNodes)
- {
- GIM_AABB bound;
- getNodeBound(curIndex, bound);
-
- //catch bugs in tree data
-
- bool aabbOverlap = bound.collide_ray(ray_origin, ray_dir);
- bool isleafnode = isLeafNode(curIndex);
-
- if (isleafnode && aabbOverlap)
- {
- collided_results.push_back(getNodeData(curIndex));
- }
-
- if (aabbOverlap || isleafnode)
- {
- //next subnode
- curIndex++;
- }
- else
- {
- //skip node
- curIndex += getScapeNodeIndex(curIndex);
- }
- }
- if (collided_results.size() > 0) return true;
- return false;
- }
-
- //! tells if this set has hierarcht
- SIMD_FORCE_INLINE bool hasHierarchy() const
- {
- return true;
- }
-
- //! tells if this set is a trimesh
- SIMD_FORCE_INLINE bool isTrimesh() const
- {
- return m_primitive_manager.is_trimesh();
- }
-
- //! node count
- SIMD_FORCE_INLINE GUINT getNodeCount() const
- {
- return m_box_tree.getNodeCount();
- }
-
- //! tells if the node is a leaf
- SIMD_FORCE_INLINE bool isLeafNode(GUINT nodeindex) const
- {
- return m_box_tree.isLeafNode(nodeindex);
- }
-
- SIMD_FORCE_INLINE GUINT getNodeData(GUINT nodeindex) const
- {
- return m_box_tree.getNodeData(nodeindex);
- }
-
- SIMD_FORCE_INLINE void getNodeBound(GUINT nodeindex, GIM_AABB& bound) const
- {
- m_box_tree.getNodeBound(nodeindex, bound);
- }
-
- SIMD_FORCE_INLINE void setNodeBound(GUINT nodeindex, const GIM_AABB& bound)
- {
- m_box_tree.setNodeBound(nodeindex, bound);
- }
-
- SIMD_FORCE_INLINE GUINT getLeftNodeIndex(GUINT nodeindex) const
- {
- return m_box_tree.getLeftNodeIndex(nodeindex);
- }
-
- SIMD_FORCE_INLINE GUINT getRightNodeIndex(GUINT nodeindex) const
- {
- return m_box_tree.getRightNodeIndex(nodeindex);
- }
-
- SIMD_FORCE_INLINE GUINT getScapeNodeIndex(GUINT nodeindex) const
- {
- return m_box_tree.getScapeNodeIndex(nodeindex);
- }
-
- SIMD_FORCE_INLINE void getNodeTriangle(GUINT nodeindex, GIM_TRIANGLE& triangle) const
- {
- m_primitive_manager.get_primitive_triangle(getNodeData(nodeindex), triangle);
- }
-};
-
-//! Class for Box Tree Sets
-/*!
-this has the GIM_BOX_TREE implementation for bounding boxes.
-*/
-template <typename _GIM_PRIMITIVE_MANAGER_PROTOTYPE>
-class GIM_BOX_TREE_SET : public GIM_BOX_TREE_TEMPLATE_SET<_GIM_PRIMITIVE_MANAGER_PROTOTYPE, GIM_BOX_TREE>
-{
-public:
-};
-
-/// GIM_BOX_SET collision methods
-template <typename BOX_SET_CLASS0, typename BOX_SET_CLASS1>
-class GIM_TREE_TREE_COLLIDER
-{
-public:
- gim_pair_set* m_collision_pairs;
- BOX_SET_CLASS0* m_boxset0;
- BOX_SET_CLASS1* m_boxset1;
- GUINT current_node0;
- GUINT current_node1;
- bool node0_is_leaf;
- bool node1_is_leaf;
- bool t0_is_trimesh;
- bool t1_is_trimesh;
- bool node0_has_triangle;
- bool node1_has_triangle;
- GIM_AABB m_box0;
- GIM_AABB m_box1;
- GIM_BOX_BOX_TRANSFORM_CACHE trans_cache_1to0;
- btTransform trans_cache_0to1;
- GIM_TRIANGLE m_tri0;
- btVector4 m_tri0_plane;
- GIM_TRIANGLE m_tri1;
- btVector4 m_tri1_plane;
-
-public:
- GIM_TREE_TREE_COLLIDER()
- {
- current_node0 = G_UINT_INFINITY;
- current_node1 = G_UINT_INFINITY;
- }
-
-protected:
- SIMD_FORCE_INLINE void retrieve_node0_triangle(GUINT node0)
- {
- if (node0_has_triangle) return;
- m_boxset0->getNodeTriangle(node0, m_tri0);
- //transform triangle
- m_tri0.m_vertices[0] = trans_cache_0to1(m_tri0.m_vertices[0]);
- m_tri0.m_vertices[1] = trans_cache_0to1(m_tri0.m_vertices[1]);
- m_tri0.m_vertices[2] = trans_cache_0to1(m_tri0.m_vertices[2]);
- m_tri0.get_plane(m_tri0_plane);
-
- node0_has_triangle = true;
- }
-
- SIMD_FORCE_INLINE void retrieve_node1_triangle(GUINT node1)
- {
- if (node1_has_triangle) return;
- m_boxset1->getNodeTriangle(node1, m_tri1);
- //transform triangle
- m_tri1.m_vertices[0] = trans_cache_1to0.transform(m_tri1.m_vertices[0]);
- m_tri1.m_vertices[1] = trans_cache_1to0.transform(m_tri1.m_vertices[1]);
- m_tri1.m_vertices[2] = trans_cache_1to0.transform(m_tri1.m_vertices[2]);
- m_tri1.get_plane(m_tri1_plane);
-
- node1_has_triangle = true;
- }
-
- SIMD_FORCE_INLINE void retrieve_node0_info(GUINT node0)
- {
- if (node0 == current_node0) return;
- m_boxset0->getNodeBound(node0, m_box0);
- node0_is_leaf = m_boxset0->isLeafNode(node0);
- node0_has_triangle = false;
- current_node0 = node0;
- }
-
- SIMD_FORCE_INLINE void retrieve_node1_info(GUINT node1)
- {
- if (node1 == current_node1) return;
- m_boxset1->getNodeBound(node1, m_box1);
- node1_is_leaf = m_boxset1->isLeafNode(node1);
- node1_has_triangle = false;
- current_node1 = node1;
- }
-
- SIMD_FORCE_INLINE bool node_collision(GUINT node0, GUINT node1)
- {
- retrieve_node0_info(node0);
- retrieve_node1_info(node1);
- bool result = m_box0.overlapping_trans_cache(m_box1, trans_cache_1to0, true);
- if (!result) return false;
-
- if (t0_is_trimesh && node0_is_leaf)
- {
- //perform primitive vs box collision
- retrieve_node0_triangle(node0);
- //do triangle vs box collision
- m_box1.increment_margin(m_tri0.m_margin);
-
- result = m_box1.collide_triangle_exact(
- m_tri0.m_vertices[0], m_tri0.m_vertices[1], m_tri0.m_vertices[2], m_tri0_plane);
-
- m_box1.increment_margin(-m_tri0.m_margin);
-
- if (!result) return false;
- return true;
- }
- else if (t1_is_trimesh && node1_is_leaf)
- {
- //perform primitive vs box collision
- retrieve_node1_triangle(node1);
- //do triangle vs box collision
- m_box0.increment_margin(m_tri1.m_margin);
-
- result = m_box0.collide_triangle_exact(
- m_tri1.m_vertices[0], m_tri1.m_vertices[1], m_tri1.m_vertices[2], m_tri1_plane);
-
- m_box0.increment_margin(-m_tri1.m_margin);
-
- if (!result) return false;
- return true;
- }
- return true;
- }
-
- //stackless collision routine
- void find_collision_pairs()
- {
- gim_pair_set stack_collisions;
- stack_collisions.reserve(32);
-
- //add the first pair
- stack_collisions.push_pair(0, 0);
-
- while (stack_collisions.size())
- {
- //retrieve the last pair and pop
- GUINT node0 = stack_collisions.back().m_index1;
- GUINT node1 = stack_collisions.back().m_index2;
- stack_collisions.pop_back();
- if (node_collision(node0, node1)) // a collision is found
- {
- if (node0_is_leaf)
- {
- if (node1_is_leaf)
- {
- m_collision_pairs->push_pair(m_boxset0->getNodeData(node0), m_boxset1->getNodeData(node1));
- }
- else
- {
- //collide left
- stack_collisions.push_pair(node0, m_boxset1->getLeftNodeIndex(node1));
-
- //collide right
- stack_collisions.push_pair(node0, m_boxset1->getRightNodeIndex(node1));
- }
- }
- else
- {
- if (node1_is_leaf)
- {
- //collide left
- stack_collisions.push_pair(m_boxset0->getLeftNodeIndex(node0), node1);
- //collide right
- stack_collisions.push_pair(m_boxset0->getRightNodeIndex(node0), node1);
- }
- else
- {
- GUINT left0 = m_boxset0->getLeftNodeIndex(node0);
- GUINT right0 = m_boxset0->getRightNodeIndex(node0);
- GUINT left1 = m_boxset1->getLeftNodeIndex(node1);
- GUINT right1 = m_boxset1->getRightNodeIndex(node1);
- //collide left
- stack_collisions.push_pair(left0, left1);
- //collide right
- stack_collisions.push_pair(left0, right1);
- //collide left
- stack_collisions.push_pair(right0, left1);
- //collide right
- stack_collisions.push_pair(right0, right1);
-
- } // else if node1 is not a leaf
- } // else if node0 is not a leaf
-
- } // if(node_collision(node0,node1))
- } //while(stack_collisions.size())
- }
-
-public:
- void find_collision(BOX_SET_CLASS0* boxset1, const btTransform& trans1,
- BOX_SET_CLASS1* boxset2, const btTransform& trans2,
- gim_pair_set& collision_pairs, bool complete_primitive_tests = true)
- {
- m_collision_pairs = &collision_pairs;
- m_boxset0 = boxset1;
- m_boxset1 = boxset2;
-
- trans_cache_1to0.calc_from_homogenic(trans1, trans2);
-
- trans_cache_0to1 = trans2.inverse();
- trans_cache_0to1 *= trans1;
-
- if (complete_primitive_tests)
- {
- t0_is_trimesh = boxset1->getPrimitiveManager().is_trimesh();
- t1_is_trimesh = boxset2->getPrimitiveManager().is_trimesh();
- }
- else
- {
- t0_is_trimesh = false;
- t1_is_trimesh = false;
- }
-
- find_collision_pairs();
- }
-};
-
-#endif // GIM_BOXPRUNING_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_clip_polygon.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_clip_polygon.h
deleted file mode 100644
index 57b9c5c91a..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_clip_polygon.h
+++ /dev/null
@@ -1,199 +0,0 @@
-#ifndef GIM_CLIP_POLYGON_H_INCLUDED
-#define GIM_CLIP_POLYGON_H_INCLUDED
-
-/*! \file gim_tri_collision.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-//! This function calcs the distance from a 3D plane
-class DISTANCE_PLANE_3D_FUNC
-{
-public:
- template <typename CLASS_POINT, typename CLASS_PLANE>
- inline GREAL operator()(const CLASS_PLANE& plane, const CLASS_POINT& point)
- {
- return DISTANCE_PLANE_POINT(plane, point);
- }
-};
-
-template <typename CLASS_POINT>
-SIMD_FORCE_INLINE void PLANE_CLIP_POLYGON_COLLECT(
- const CLASS_POINT& point0,
- const CLASS_POINT& point1,
- GREAL dist0,
- GREAL dist1,
- CLASS_POINT* clipped,
- GUINT& clipped_count)
-{
- GUINT _prevclassif = (dist0 > G_EPSILON);
- GUINT _classif = (dist1 > G_EPSILON);
- if (_classif != _prevclassif)
- {
- GREAL blendfactor = -dist0 / (dist1 - dist0);
- VEC_BLEND(clipped[clipped_count], point0, point1, blendfactor);
- clipped_count++;
- }
- if (!_classif)
- {
- VEC_COPY(clipped[clipped_count], point1);
- clipped_count++;
- }
-}
-
-//! Clips a polygon by a plane
-/*!
-*\return The count of the clipped counts
-*/
-template <typename CLASS_POINT, typename CLASS_PLANE, typename DISTANCE_PLANE_FUNC>
-SIMD_FORCE_INLINE GUINT PLANE_CLIP_POLYGON_GENERIC(
- const CLASS_PLANE& plane,
- const CLASS_POINT* polygon_points,
- GUINT polygon_point_count,
- CLASS_POINT* clipped, DISTANCE_PLANE_FUNC distance_func)
-{
- GUINT clipped_count = 0;
-
- //clip first point
- GREAL firstdist = distance_func(plane, polygon_points[0]);
- ;
- if (!(firstdist > G_EPSILON))
- {
- VEC_COPY(clipped[clipped_count], polygon_points[0]);
- clipped_count++;
- }
-
- GREAL olddist = firstdist;
- for (GUINT _i = 1; _i < polygon_point_count; _i++)
- {
- GREAL dist = distance_func(plane, polygon_points[_i]);
-
- PLANE_CLIP_POLYGON_COLLECT(
- polygon_points[_i - 1], polygon_points[_i],
- olddist,
- dist,
- clipped,
- clipped_count);
-
- olddist = dist;
- }
-
- //RETURN TO FIRST point
-
- PLANE_CLIP_POLYGON_COLLECT(
- polygon_points[polygon_point_count - 1], polygon_points[0],
- olddist,
- firstdist,
- clipped,
- clipped_count);
-
- return clipped_count;
-}
-
-//! Clips a polygon by a plane
-/*!
-*\return The count of the clipped counts
-*/
-template <typename CLASS_POINT, typename CLASS_PLANE, typename DISTANCE_PLANE_FUNC>
-SIMD_FORCE_INLINE GUINT PLANE_CLIP_TRIANGLE_GENERIC(
- const CLASS_PLANE& plane,
- const CLASS_POINT& point0,
- const CLASS_POINT& point1,
- const CLASS_POINT& point2,
- CLASS_POINT* clipped, DISTANCE_PLANE_FUNC distance_func)
-{
- GUINT clipped_count = 0;
-
- //clip first point
- GREAL firstdist = distance_func(plane, point0);
- ;
- if (!(firstdist > G_EPSILON))
- {
- VEC_COPY(clipped[clipped_count], point0);
- clipped_count++;
- }
-
- // point 1
- GREAL olddist = firstdist;
- GREAL dist = distance_func(plane, point1);
-
- PLANE_CLIP_POLYGON_COLLECT(
- point0, point1,
- olddist,
- dist,
- clipped,
- clipped_count);
-
- olddist = dist;
-
- // point 2
- dist = distance_func(plane, point2);
-
- PLANE_CLIP_POLYGON_COLLECT(
- point1, point2,
- olddist,
- dist,
- clipped,
- clipped_count);
- olddist = dist;
-
- //RETURN TO FIRST point
- PLANE_CLIP_POLYGON_COLLECT(
- point2, point0,
- olddist,
- firstdist,
- clipped,
- clipped_count);
-
- return clipped_count;
-}
-
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE GUINT PLANE_CLIP_POLYGON3D(
- const CLASS_PLANE& plane,
- const CLASS_POINT* polygon_points,
- GUINT polygon_point_count,
- CLASS_POINT* clipped)
-{
- return PLANE_CLIP_POLYGON_GENERIC<CLASS_POINT, CLASS_PLANE>(plane, polygon_points, polygon_point_count, clipped, DISTANCE_PLANE_3D_FUNC());
-}
-
-template <typename CLASS_POINT, typename CLASS_PLANE>
-SIMD_FORCE_INLINE GUINT PLANE_CLIP_TRIANGLE3D(
- const CLASS_PLANE& plane,
- const CLASS_POINT& point0,
- const CLASS_POINT& point1,
- const CLASS_POINT& point2,
- CLASS_POINT* clipped)
-{
- return PLANE_CLIP_TRIANGLE_GENERIC<CLASS_POINT, CLASS_PLANE>(plane, point0, point1, point2, clipped, DISTANCE_PLANE_3D_FUNC());
-}
-
-#endif // GIM_TRI_COLLISION_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_contact.cpp b/thirdparty/bullet/BulletCollision/Gimpact/gim_contact.cpp
deleted file mode 100644
index 390225709e..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_contact.cpp
+++ /dev/null
@@ -1,142 +0,0 @@
-
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_contact.h"
-
-#define MAX_COINCIDENT 8
-
-void gim_contact_array::merge_contacts(
- const gim_contact_array& contacts, bool normal_contact_average)
-{
- clear();
-
- if (contacts.size() == 1)
- {
- push_back(contacts.back());
- return;
- }
-
- gim_array<GIM_RSORT_TOKEN> keycontacts(contacts.size());
- keycontacts.resize(contacts.size(), false);
-
- //fill key contacts
-
- GUINT i;
-
- for (i = 0; i < contacts.size(); i++)
- {
- keycontacts[i].m_key = contacts[i].calc_key_contact();
- keycontacts[i].m_value = i;
- }
-
- //sort keys
- gim_heap_sort(keycontacts.pointer(), keycontacts.size(), GIM_RSORT_TOKEN_COMPARATOR());
-
- // Merge contacts
-
- GUINT coincident_count = 0;
- btVector3 coincident_normals[MAX_COINCIDENT];
-
- GUINT last_key = keycontacts[0].m_key;
- GUINT key = 0;
-
- push_back(contacts[keycontacts[0].m_value]);
- GIM_CONTACT* pcontact = &back();
-
- for (i = 1; i < keycontacts.size(); i++)
- {
- key = keycontacts[i].m_key;
- const GIM_CONTACT* scontact = &contacts[keycontacts[i].m_value];
-
- if (last_key == key) //same points
- {
- //merge contact
- if (pcontact->m_depth - CONTACT_DIFF_EPSILON > scontact->m_depth) //)
- {
- *pcontact = *scontact;
- coincident_count = 0;
- }
- else if (normal_contact_average)
- {
- if (btFabs(pcontact->m_depth - scontact->m_depth) < CONTACT_DIFF_EPSILON)
- {
- if (coincident_count < MAX_COINCIDENT)
- {
- coincident_normals[coincident_count] = scontact->m_normal;
- coincident_count++;
- }
- }
- }
- }
- else
- { //add new contact
-
- if (normal_contact_average && coincident_count > 0)
- {
- pcontact->interpolate_normals(coincident_normals, coincident_count);
- coincident_count = 0;
- }
-
- push_back(*scontact);
- pcontact = &back();
- }
- last_key = key;
- }
-}
-
-void gim_contact_array::merge_contacts_unique(const gim_contact_array& contacts)
-{
- clear();
-
- if (contacts.size() == 1)
- {
- push_back(contacts.back());
- return;
- }
-
- GIM_CONTACT average_contact = contacts.back();
-
- for (GUINT i = 1; i < contacts.size(); i++)
- {
- average_contact.m_point += contacts[i].m_point;
- average_contact.m_normal += contacts[i].m_normal * contacts[i].m_depth;
- }
-
- //divide
- GREAL divide_average = 1.0f / ((GREAL)contacts.size());
-
- average_contact.m_point *= divide_average;
-
- average_contact.m_normal *= divide_average;
-
- average_contact.m_depth = average_contact.m_normal.length();
-
- average_contact.m_normal /= average_contact.m_depth;
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_contact.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_contact.h
deleted file mode 100644
index 9deb28a26e..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_contact.h
+++ /dev/null
@@ -1,168 +0,0 @@
-#ifndef GIM_CONTACT_H_INCLUDED
-#define GIM_CONTACT_H_INCLUDED
-
-/*! \file gim_contact.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-#include "gim_geometry.h"
-#include "gim_radixsort.h"
-#include "gim_array.h"
-
-/**
-Configuration var for applying interpolation of contact normals
-*/
-#ifndef NORMAL_CONTACT_AVERAGE
-#define NORMAL_CONTACT_AVERAGE 1
-#endif
-
-#ifndef CONTACT_DIFF_EPSILON
-#define CONTACT_DIFF_EPSILON 0.00001f
-#endif
-
-#ifndef BT_CONTACT_H_STRUCTS_INCLUDED
-
-/// Structure for collision results
-///Functions for managing and sorting contacts resulting from a collision query.
-///Contact lists must be create by calling \ref GIM_CREATE_CONTACT_LIST
-///After querys, contact lists must be destroy by calling \ref GIM_DYNARRAY_DESTROY
-///Contacts can be merge for avoid duplicate results by calling \ref gim_merge_contacts
-class GIM_CONTACT
-{
-public:
- btVector3 m_point;
- btVector3 m_normal;
- GREAL m_depth; //Positive value indicates interpenetration
- GREAL m_distance; //Padding not for use
- GUINT m_feature1; //Face number
- GUINT m_feature2; //Face number
-public:
- GIM_CONTACT()
- {
- }
-
- GIM_CONTACT(const GIM_CONTACT &contact) : m_point(contact.m_point),
- m_normal(contact.m_normal),
- m_depth(contact.m_depth),
- m_feature1(contact.m_feature1),
- m_feature2(contact.m_feature2)
- {
- m_point = contact.m_point;
- m_normal = contact.m_normal;
- m_depth = contact.m_depth;
- m_feature1 = contact.m_feature1;
- m_feature2 = contact.m_feature2;
- }
-
- GIM_CONTACT(const btVector3 &point, const btVector3 &normal,
- GREAL depth, GUINT feature1, GUINT feature2) : m_point(point),
- m_normal(normal),
- m_depth(depth),
- m_feature1(feature1),
- m_feature2(feature2)
- {
- }
-
- //! Calcs key for coord classification
- SIMD_FORCE_INLINE GUINT calc_key_contact() const
- {
- GINT _coords[] = {
- (GINT)(m_point[0] * 1000.0f + 1.0f),
- (GINT)(m_point[1] * 1333.0f),
- (GINT)(m_point[2] * 2133.0f + 3.0f)};
- GUINT _hash = 0;
- GUINT *_uitmp = (GUINT *)(&_coords[0]);
- _hash = *_uitmp;
- _uitmp++;
- _hash += (*_uitmp) << 4;
- _uitmp++;
- _hash += (*_uitmp) << 8;
- return _hash;
- }
-
- SIMD_FORCE_INLINE void interpolate_normals(btVector3 *normals, GUINT normal_count)
- {
- btVector3 vec_sum(m_normal);
- for (GUINT i = 0; i < normal_count; i++)
- {
- vec_sum += normals[i];
- }
-
- GREAL vec_sum_len = vec_sum.length2();
- if (vec_sum_len < CONTACT_DIFF_EPSILON) return;
-
- GIM_INV_SQRT(vec_sum_len, vec_sum_len); // 1/sqrt(vec_sum_len)
-
- m_normal = vec_sum * vec_sum_len;
- }
-};
-
-#endif
-
-class gim_contact_array : public gim_array<GIM_CONTACT>
-{
-public:
- gim_contact_array() : gim_array<GIM_CONTACT>(64)
- {
- }
-
- SIMD_FORCE_INLINE void push_contact(const btVector3 &point, const btVector3 &normal,
- GREAL depth, GUINT feature1, GUINT feature2)
- {
- push_back_mem();
- GIM_CONTACT &newele = back();
- newele.m_point = point;
- newele.m_normal = normal;
- newele.m_depth = depth;
- newele.m_feature1 = feature1;
- newele.m_feature2 = feature2;
- }
-
- SIMD_FORCE_INLINE void push_triangle_contacts(
- const GIM_TRIANGLE_CONTACT_DATA &tricontact,
- GUINT feature1, GUINT feature2)
- {
- for (GUINT i = 0; i < tricontact.m_point_count; i++)
- {
- push_back_mem();
- GIM_CONTACT &newele = back();
- newele.m_point = tricontact.m_points[i];
- newele.m_normal = tricontact.m_separating_normal;
- newele.m_depth = tricontact.m_penetration_depth;
- newele.m_feature1 = feature1;
- newele.m_feature2 = feature2;
- }
- }
-
- void merge_contacts(const gim_contact_array &contacts, bool normal_contact_average = true);
- void merge_contacts_unique(const gim_contact_array &contacts);
-};
-
-#endif // GIM_CONTACT_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_geom_types.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_geom_types.h
deleted file mode 100644
index 9dc48f354b..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_geom_types.h
+++ /dev/null
@@ -1,92 +0,0 @@
-#ifndef GIM_GEOM_TYPES_H_INCLUDED
-#define GIM_GEOM_TYPES_H_INCLUDED
-
-/*! \file gim_geom_types.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_math.h"
-
-//! Short Integer vector 2D
-typedef GSHORT vec2s[2];
-//! Integer vector 3D
-typedef GSHORT vec3s[3];
-//! Integer vector 4D
-typedef GSHORT vec4s[4];
-
-//! Short Integer vector 2D
-typedef GUSHORT vec2us[2];
-//! Integer vector 3D
-typedef GUSHORT vec3us[3];
-//! Integer vector 4D
-typedef GUSHORT vec4us[4];
-
-//! Integer vector 2D
-typedef GINT vec2i[2];
-//! Integer vector 3D
-typedef GINT vec3i[3];
-//! Integer vector 4D
-typedef GINT vec4i[4];
-
-//! Unsigned Integer vector 2D
-typedef GUINT vec2ui[2];
-//! Unsigned Integer vector 3D
-typedef GUINT vec3ui[3];
-//! Unsigned Integer vector 4D
-typedef GUINT vec4ui[4];
-
-//! Float vector 2D
-typedef GREAL vec2f[2];
-//! Float vector 3D
-typedef GREAL vec3f[3];
-//! Float vector 4D
-typedef GREAL vec4f[4];
-
-//! Double vector 2D
-typedef GREAL2 vec2d[2];
-//! Float vector 3D
-typedef GREAL2 vec3d[3];
-//! Float vector 4D
-typedef GREAL2 vec4d[4];
-
-//! Matrix 2D, row ordered
-typedef GREAL mat2f[2][2];
-//! Matrix 3D, row ordered
-typedef GREAL mat3f[3][3];
-//! Matrix 4D, row ordered
-typedef GREAL mat4f[4][4];
-
-//! Quaternion
-typedef GREAL quatf[4];
-
-//typedef struct _aabb3f aabb3f;
-
-#endif // GIM_GEOM_TYPES_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_geometry.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_geometry.h
deleted file mode 100644
index 4a7ac3c4d8..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_geometry.h
+++ /dev/null
@@ -1,42 +0,0 @@
-#ifndef GIM_GEOMETRY_H_INCLUDED
-#define GIM_GEOMETRY_H_INCLUDED
-
-/*! \file gim_geometry.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-///Additional Headers for Collision
-#include "gim_basic_geometry_operations.h"
-#include "gim_clip_polygon.h"
-#include "gim_box_collision.h"
-#include "gim_tri_collision.h"
-
-#endif // GIM_VECTOR_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_hash_table.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_hash_table.h
deleted file mode 100644
index abf88d3108..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_hash_table.h
+++ /dev/null
@@ -1,857 +0,0 @@
-#ifndef GIM_HASH_TABLE_H_INCLUDED
-#define GIM_HASH_TABLE_H_INCLUDED
-/*! \file gim_trimesh_data.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_radixsort.h"
-
-#define GIM_INVALID_HASH 0xffffffff //!< A very very high value
-#define GIM_DEFAULT_HASH_TABLE_SIZE 380
-#define GIM_DEFAULT_HASH_TABLE_NODE_SIZE 4
-#define GIM_HASH_TABLE_GROW_FACTOR 2
-
-#define GIM_MIN_RADIX_SORT_SIZE 860 //!< calibrated on a PIII
-
-template <typename T>
-struct GIM_HASH_TABLE_NODE
-{
- GUINT m_key;
- T m_data;
- GIM_HASH_TABLE_NODE()
- {
- }
-
- GIM_HASH_TABLE_NODE(const GIM_HASH_TABLE_NODE& value)
- {
- m_key = value.m_key;
- m_data = value.m_data;
- }
-
- GIM_HASH_TABLE_NODE(GUINT key, const T& data)
- {
- m_key = key;
- m_data = data;
- }
-
- bool operator<(const GIM_HASH_TABLE_NODE<T>& other) const
- {
- ///inverse order, further objects are first
- if (m_key < other.m_key) return true;
- return false;
- }
-
- bool operator>(const GIM_HASH_TABLE_NODE<T>& other) const
- {
- ///inverse order, further objects are first
- if (m_key > other.m_key) return true;
- return false;
- }
-
- bool operator==(const GIM_HASH_TABLE_NODE<T>& other) const
- {
- ///inverse order, further objects are first
- if (m_key == other.m_key) return true;
- return false;
- }
-};
-
-///Macro for getting the key
-class GIM_HASH_NODE_GET_KEY
-{
-public:
- template <class T>
- inline GUINT operator()(const T& a)
- {
- return a.m_key;
- }
-};
-
-///Macro for comparing the key and the element
-class GIM_HASH_NODE_CMP_KEY_MACRO
-{
-public:
- template <class T>
- inline int operator()(const T& a, GUINT key)
- {
- return ((int)(a.m_key - key));
- }
-};
-
-///Macro for comparing Hash nodes
-class GIM_HASH_NODE_CMP_MACRO
-{
-public:
- template <class T>
- inline int operator()(const T& a, const T& b)
- {
- return ((int)(a.m_key - b.m_key));
- }
-};
-
-//! Sorting for hash table
-/*!
-switch automatically between quicksort and radixsort
-*/
-template <typename T>
-void gim_sort_hash_node_array(T* array, GUINT array_count)
-{
- if (array_count < GIM_MIN_RADIX_SORT_SIZE)
- {
- gim_heap_sort(array, array_count, GIM_HASH_NODE_CMP_MACRO());
- }
- else
- {
- memcopy_elements_func cmpfunc;
- gim_radix_sort(array, array_count, GIM_HASH_NODE_GET_KEY(), cmpfunc);
- }
-}
-
-// Note: assumes long is at least 32 bits.
-#define GIM_NUM_PRIME 28
-
-static const GUINT gim_prime_list[GIM_NUM_PRIME] =
- {
- 53ul, 97ul, 193ul, 389ul, 769ul,
- 1543ul, 3079ul, 6151ul, 12289ul, 24593ul,
- 49157ul, 98317ul, 196613ul, 393241ul, 786433ul,
- 1572869ul, 3145739ul, 6291469ul, 12582917ul, 25165843ul,
- 50331653ul, 100663319ul, 201326611ul, 402653189ul, 805306457ul,
- 1610612741ul, 3221225473ul, 4294967291ul};
-
-inline GUINT gim_next_prime(GUINT number)
-{
- //Find nearest upper prime
- GUINT result_ind = 0;
- gim_binary_search(gim_prime_list, 0, (GIM_NUM_PRIME - 2), number, result_ind);
-
- // inv: result_ind < 28
- return gim_prime_list[result_ind];
-}
-
-//! A compact hash table implementation
-/*!
-A memory aligned compact hash table that coud be treated as an array.
-It could be a simple sorted array without the overhead of the hash key bucked, or could
-be a formely hash table with an array of keys.
-You can use switch_to_hashtable() and switch_to_sorted_array for saving space or increase speed.
-</br>
-
-<ul>
-<li> if node_size = 0, then this container becomes a simple sorted array allocator. reserve_size is used for reserve memory in m_nodes.
-When the array size reaches the size equivalent to 'min_hash_table_size', then it becomes a hash table by calling check_for_switching_to_hashtable.
-<li> If node_size != 0, then this container becomes a hash table for ever
-</ul>
-
-*/
-template <class T>
-class gim_hash_table
-{
-protected:
- typedef GIM_HASH_TABLE_NODE<T> _node_type;
-
- //!The nodes
- //array< _node_type, SuperAllocator<_node_type> > m_nodes;
- gim_array<_node_type> m_nodes;
- //SuperBufferedArray< _node_type > m_nodes;
- bool m_sorted;
-
- ///Hash table data management. The hash table has the indices to the corresponding m_nodes array
- GUINT* m_hash_table; //!<
- GUINT m_table_size; //!<
- GUINT m_node_size; //!<
- GUINT m_min_hash_table_size;
-
- //! Returns the cell index
- inline GUINT _find_cell(GUINT hashkey)
- {
- _node_type* nodesptr = m_nodes.pointer();
- GUINT start_index = (hashkey % m_table_size) * m_node_size;
- GUINT end_index = start_index + m_node_size;
-
- while (start_index < end_index)
- {
- GUINT value = m_hash_table[start_index];
- if (value != GIM_INVALID_HASH)
- {
- if (nodesptr[value].m_key == hashkey) return start_index;
- }
- start_index++;
- }
- return GIM_INVALID_HASH;
- }
-
- //! Find the avaliable cell for the hashkey, and return an existing cell if it has the same hash key
- inline GUINT _find_avaliable_cell(GUINT hashkey)
- {
- _node_type* nodesptr = m_nodes.pointer();
- GUINT avaliable_index = GIM_INVALID_HASH;
- GUINT start_index = (hashkey % m_table_size) * m_node_size;
- GUINT end_index = start_index + m_node_size;
-
- while (start_index < end_index)
- {
- GUINT value = m_hash_table[start_index];
- if (value == GIM_INVALID_HASH)
- {
- if (avaliable_index == GIM_INVALID_HASH)
- {
- avaliable_index = start_index;
- }
- }
- else if (nodesptr[value].m_key == hashkey)
- {
- return start_index;
- }
- start_index++;
- }
- return avaliable_index;
- }
-
- //! reserves the memory for the hash table.
- /*!
- \pre hash table must be empty
- \post reserves the memory for the hash table, an initializes all elements to GIM_INVALID_HASH.
- */
- inline void _reserve_table_memory(GUINT newtablesize)
- {
- if (newtablesize == 0) return;
- if (m_node_size == 0) return;
-
- //Get a Prime size
-
- m_table_size = gim_next_prime(newtablesize);
-
- GUINT datasize = m_table_size * m_node_size;
- //Alloc the data buffer
- m_hash_table = (GUINT*)gim_alloc(datasize * sizeof(GUINT));
- }
-
- inline void _invalidate_keys()
- {
- GUINT datasize = m_table_size * m_node_size;
- for (GUINT i = 0; i < datasize; i++)
- {
- m_hash_table[i] = GIM_INVALID_HASH; // invalidate keys
- }
- }
-
- //! Clear all memory for the hash table
- inline void _clear_table_memory()
- {
- if (m_hash_table == NULL) return;
- gim_free(m_hash_table);
- m_hash_table = NULL;
- m_table_size = 0;
- }
-
- //! Invalidates the keys (Assigning GIM_INVALID_HASH to all) Reorders the hash keys
- inline void _rehash()
- {
- _invalidate_keys();
-
- _node_type* nodesptr = m_nodes.pointer();
- for (GUINT i = 0; i < (GUINT)m_nodes.size(); i++)
- {
- GUINT nodekey = nodesptr[i].m_key;
- if (nodekey != GIM_INVALID_HASH)
- {
- //Search for the avaliable cell in buffer
- GUINT index = _find_avaliable_cell(nodekey);
-
- if (m_hash_table[index] != GIM_INVALID_HASH)
- { //The new index is alreade used... discard this new incomming object, repeated key
- btAssert(m_hash_table[index] == nodekey);
- nodesptr[i].m_key = GIM_INVALID_HASH;
- }
- else
- {
- //;
- //Assign the value for alloc
- m_hash_table[index] = i;
- }
- }
- }
- }
-
- //! Resize hash table indices
- inline void _resize_table(GUINT newsize)
- {
- //Clear memory
- _clear_table_memory();
- //Alloc the data
- _reserve_table_memory(newsize);
- //Invalidate keys and rehash
- _rehash();
- }
-
- //! Destroy hash table memory
- inline void _destroy()
- {
- if (m_hash_table == NULL) return;
- _clear_table_memory();
- }
-
- //! Finds an avaliable hash table cell, and resizes the table if there isn't space
- inline GUINT _assign_hash_table_cell(GUINT hashkey)
- {
- GUINT cell_index = _find_avaliable_cell(hashkey);
-
- if (cell_index == GIM_INVALID_HASH)
- {
- //rehashing
- _resize_table(m_table_size + 1);
- GUINT cell_index = _find_avaliable_cell(hashkey);
- btAssert(cell_index != GIM_INVALID_HASH);
- }
- return cell_index;
- }
-
- //! erase by index in hash table
- inline bool _erase_by_index_hash_table(GUINT index)
- {
- if (index >= m_nodes.size()) return false;
- if (m_nodes[index].m_key != GIM_INVALID_HASH)
- {
- //Search for the avaliable cell in buffer
- GUINT cell_index = _find_cell(m_nodes[index].m_key);
-
- btAssert(cell_index != GIM_INVALID_HASH);
- btAssert(m_hash_table[cell_index] == index);
-
- m_hash_table[cell_index] = GIM_INVALID_HASH;
- }
-
- return this->_erase_unsorted(index);
- }
-
- //! erase by key in hash table
- inline bool _erase_hash_table(GUINT hashkey)
- {
- if (hashkey == GIM_INVALID_HASH) return false;
-
- //Search for the avaliable cell in buffer
- GUINT cell_index = _find_cell(hashkey);
- if (cell_index == GIM_INVALID_HASH) return false;
-
- GUINT index = m_hash_table[cell_index];
- m_hash_table[cell_index] = GIM_INVALID_HASH;
-
- return this->_erase_unsorted(index);
- }
-
- //! insert an element in hash table
- /*!
- If the element exists, this won't insert the element
- \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted
- If so, the element has been inserted at the last position of the array.
- */
- inline GUINT _insert_hash_table(GUINT hashkey, const T& value)
- {
- if (hashkey == GIM_INVALID_HASH)
- {
- //Insert anyway
- _insert_unsorted(hashkey, value);
- return GIM_INVALID_HASH;
- }
-
- GUINT cell_index = _assign_hash_table_cell(hashkey);
-
- GUINT value_key = m_hash_table[cell_index];
-
- if (value_key != GIM_INVALID_HASH) return value_key; // Not overrited
-
- m_hash_table[cell_index] = m_nodes.size();
-
- _insert_unsorted(hashkey, value);
- return GIM_INVALID_HASH;
- }
-
- //! insert an element in hash table.
- /*!
- If the element exists, this replaces the element.
- \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted
- If so, the element has been inserted at the last position of the array.
- */
- inline GUINT _insert_hash_table_replace(GUINT hashkey, const T& value)
- {
- if (hashkey == GIM_INVALID_HASH)
- {
- //Insert anyway
- _insert_unsorted(hashkey, value);
- return GIM_INVALID_HASH;
- }
-
- GUINT cell_index = _assign_hash_table_cell(hashkey);
-
- GUINT value_key = m_hash_table[cell_index];
-
- if (value_key != GIM_INVALID_HASH)
- { //replaces the existing
- m_nodes[value_key] = _node_type(hashkey, value);
- return value_key; // index of the replaced element
- }
-
- m_hash_table[cell_index] = m_nodes.size();
-
- _insert_unsorted(hashkey, value);
- return GIM_INVALID_HASH;
- }
-
- ///Sorted array data management. The hash table has the indices to the corresponding m_nodes array
- inline bool _erase_sorted(GUINT index)
- {
- if (index >= (GUINT)m_nodes.size()) return false;
- m_nodes.erase_sorted(index);
- if (m_nodes.size() < 2) m_sorted = false;
- return true;
- }
-
- //! faster, but unsorted
- inline bool _erase_unsorted(GUINT index)
- {
- if (index >= m_nodes.size()) return false;
-
- GUINT lastindex = m_nodes.size() - 1;
- if (index < lastindex && m_hash_table != 0)
- {
- GUINT hashkey = m_nodes[lastindex].m_key;
- if (hashkey != GIM_INVALID_HASH)
- {
- //update the new position of the last element
- GUINT cell_index = _find_cell(hashkey);
- btAssert(cell_index != GIM_INVALID_HASH);
- //new position of the last element which will be swaped
- m_hash_table[cell_index] = index;
- }
- }
- m_nodes.erase(index);
- m_sorted = false;
- return true;
- }
-
- //! Insert in position ordered
- /*!
- Also checks if it is needed to transform this container to a hash table, by calling check_for_switching_to_hashtable
- */
- inline void _insert_in_pos(GUINT hashkey, const T& value, GUINT pos)
- {
- m_nodes.insert(_node_type(hashkey, value), pos);
- this->check_for_switching_to_hashtable();
- }
-
- //! Insert an element in an ordered array
- inline GUINT _insert_sorted(GUINT hashkey, const T& value)
- {
- if (hashkey == GIM_INVALID_HASH || size() == 0)
- {
- m_nodes.push_back(_node_type(hashkey, value));
- return GIM_INVALID_HASH;
- }
- //Insert at last position
- //Sort element
-
- GUINT result_ind = 0;
- GUINT last_index = m_nodes.size() - 1;
- _node_type* ptr = m_nodes.pointer();
-
- bool found = gim_binary_search_ex(
- ptr, 0, last_index, result_ind, hashkey, GIM_HASH_NODE_CMP_KEY_MACRO());
-
- //Insert before found index
- if (found)
- {
- return result_ind;
- }
- else
- {
- _insert_in_pos(hashkey, value, result_ind);
- }
- return GIM_INVALID_HASH;
- }
-
- inline GUINT _insert_sorted_replace(GUINT hashkey, const T& value)
- {
- if (hashkey == GIM_INVALID_HASH || size() == 0)
- {
- m_nodes.push_back(_node_type(hashkey, value));
- return GIM_INVALID_HASH;
- }
- //Insert at last position
- //Sort element
- GUINT result_ind;
- GUINT last_index = m_nodes.size() - 1;
- _node_type* ptr = m_nodes.pointer();
-
- bool found = gim_binary_search_ex(
- ptr, 0, last_index, result_ind, hashkey, GIM_HASH_NODE_CMP_KEY_MACRO());
-
- //Insert before found index
- if (found)
- {
- m_nodes[result_ind] = _node_type(hashkey, value);
- }
- else
- {
- _insert_in_pos(hashkey, value, result_ind);
- }
- return result_ind;
- }
-
- //! Fast insertion in m_nodes array
- inline GUINT _insert_unsorted(GUINT hashkey, const T& value)
- {
- m_nodes.push_back(_node_type(hashkey, value));
- m_sorted = false;
- return GIM_INVALID_HASH;
- }
-
-public:
- /*!
- <li> if node_size = 0, then this container becomes a simple sorted array allocator. reserve_size is used for reserve memory in m_nodes.
- When the array size reaches the size equivalent to 'min_hash_table_size', then it becomes a hash table by calling check_for_switching_to_hashtable.
- <li> If node_size != 0, then this container becomes a hash table for ever
- </ul>
- */
- gim_hash_table(GUINT reserve_size = GIM_DEFAULT_HASH_TABLE_SIZE,
- GUINT node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE,
- GUINT min_hash_table_size = GIM_INVALID_HASH)
- {
- m_hash_table = NULL;
- m_table_size = 0;
- m_sorted = false;
- m_node_size = node_size;
- m_min_hash_table_size = min_hash_table_size;
-
- if (m_node_size != 0)
- {
- if (reserve_size != 0)
- {
- m_nodes.reserve(reserve_size);
- _reserve_table_memory(reserve_size);
- _invalidate_keys();
- }
- else
- {
- m_nodes.reserve(GIM_DEFAULT_HASH_TABLE_SIZE);
- _reserve_table_memory(GIM_DEFAULT_HASH_TABLE_SIZE);
- _invalidate_keys();
- }
- }
- else if (reserve_size != 0)
- {
- m_nodes.reserve(reserve_size);
- }
- }
-
- ~gim_hash_table()
- {
- _destroy();
- }
-
- inline bool is_hash_table()
- {
- if (m_hash_table) return true;
- return false;
- }
-
- inline bool is_sorted()
- {
- if (size() < 2) return true;
- return m_sorted;
- }
-
- bool sort()
- {
- if (is_sorted()) return true;
- if (m_nodes.size() < 2) return false;
-
- _node_type* ptr = m_nodes.pointer();
- GUINT siz = m_nodes.size();
- gim_sort_hash_node_array(ptr, siz);
- m_sorted = true;
-
- if (m_hash_table)
- {
- _rehash();
- }
- return true;
- }
-
- bool switch_to_hashtable()
- {
- if (m_hash_table) return false;
- if (m_node_size == 0) m_node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE;
- if (m_nodes.size() < GIM_DEFAULT_HASH_TABLE_SIZE)
- {
- _resize_table(GIM_DEFAULT_HASH_TABLE_SIZE);
- }
- else
- {
- _resize_table(m_nodes.size() + 1);
- }
-
- return true;
- }
-
- bool switch_to_sorted_array()
- {
- if (m_hash_table == NULL) return true;
- _clear_table_memory();
- return sort();
- }
-
- //!If the container reaches the
- bool check_for_switching_to_hashtable()
- {
- if (this->m_hash_table) return true;
-
- if (!(m_nodes.size() < m_min_hash_table_size))
- {
- if (m_node_size == 0)
- {
- m_node_size = GIM_DEFAULT_HASH_TABLE_NODE_SIZE;
- }
-
- _resize_table(m_nodes.size() + 1);
- return true;
- }
- return false;
- }
-
- inline void set_sorted(bool value)
- {
- m_sorted = value;
- }
-
- //! Retrieves the amount of keys.
- inline GUINT size() const
- {
- return m_nodes.size();
- }
-
- //! Retrieves the hash key.
- inline GUINT get_key(GUINT index) const
- {
- return m_nodes[index].m_key;
- }
-
- //! Retrieves the value by index
- /*!
- */
- inline T* get_value_by_index(GUINT index)
- {
- return &m_nodes[index].m_data;
- }
-
- inline const T& operator[](GUINT index) const
- {
- return m_nodes[index].m_data;
- }
-
- inline T& operator[](GUINT index)
- {
- return m_nodes[index].m_data;
- }
-
- //! Finds the index of the element with the key
- /*!
- \return the index in the array of the existing element,or GIM_INVALID_HASH if the element has been inserted
- If so, the element has been inserted at the last position of the array.
- */
- inline GUINT find(GUINT hashkey)
- {
- if (m_hash_table)
- {
- GUINT cell_index = _find_cell(hashkey);
- if (cell_index == GIM_INVALID_HASH) return GIM_INVALID_HASH;
- return m_hash_table[cell_index];
- }
- GUINT last_index = m_nodes.size();
- if (last_index < 2)
- {
- if (last_index == 0) return GIM_INVALID_HASH;
- if (m_nodes[0].m_key == hashkey) return 0;
- return GIM_INVALID_HASH;
- }
- else if (m_sorted)
- {
- //Binary search
- GUINT result_ind = 0;
- last_index--;
- _node_type* ptr = m_nodes.pointer();
-
- bool found = gim_binary_search_ex(ptr, 0, last_index, result_ind, hashkey, GIM_HASH_NODE_CMP_KEY_MACRO());
-
- if (found) return result_ind;
- }
- return GIM_INVALID_HASH;
- }
-
- //! Retrieves the value associated with the index
- /*!
- \return the found element, or null
- */
- inline T* get_value(GUINT hashkey)
- {
- GUINT index = find(hashkey);
- if (index == GIM_INVALID_HASH) return NULL;
- return &m_nodes[index].m_data;
- }
-
- /*!
- */
- inline bool erase_by_index(GUINT index)
- {
- if (index > m_nodes.size()) return false;
-
- if (m_hash_table == NULL)
- {
- if (is_sorted())
- {
- return this->_erase_sorted(index);
- }
- else
- {
- return this->_erase_unsorted(index);
- }
- }
- else
- {
- return this->_erase_by_index_hash_table(index);
- }
- return false;
- }
-
- inline bool erase_by_index_unsorted(GUINT index)
- {
- if (index > m_nodes.size()) return false;
-
- if (m_hash_table == NULL)
- {
- return this->_erase_unsorted(index);
- }
- else
- {
- return this->_erase_by_index_hash_table(index);
- }
- return false;
- }
-
- /*!
-
- */
- inline bool erase_by_key(GUINT hashkey)
- {
- if (size() == 0) return false;
-
- if (m_hash_table)
- {
- return this->_erase_hash_table(hashkey);
- }
- //Binary search
-
- if (is_sorted() == false) return false;
-
- GUINT result_ind = find(hashkey);
- if (result_ind != GIM_INVALID_HASH)
- {
- return this->_erase_sorted(result_ind);
- }
- return false;
- }
-
- void clear()
- {
- m_nodes.clear();
-
- if (m_hash_table == NULL) return;
- GUINT datasize = m_table_size * m_node_size;
- //Initialize the hashkeys.
- GUINT i;
- for (i = 0; i < datasize; i++)
- {
- m_hash_table[i] = GIM_INVALID_HASH; // invalidate keys
- }
- m_sorted = false;
- }
-
- //! Insert an element into the hash
- /*!
- \return If GIM_INVALID_HASH, the object has been inserted succesfully. Else it returns the position
- of the existing element.
- */
- inline GUINT insert(GUINT hashkey, const T& element)
- {
- if (m_hash_table)
- {
- return this->_insert_hash_table(hashkey, element);
- }
- if (this->is_sorted())
- {
- return this->_insert_sorted(hashkey, element);
- }
- return this->_insert_unsorted(hashkey, element);
- }
-
- //! Insert an element into the hash, and could overrite an existing object with the same hash.
- /*!
- \return If GIM_INVALID_HASH, the object has been inserted succesfully. Else it returns the position
- of the replaced element.
- */
- inline GUINT insert_override(GUINT hashkey, const T& element)
- {
- if (m_hash_table)
- {
- return this->_insert_hash_table_replace(hashkey, element);
- }
- if (this->is_sorted())
- {
- return this->_insert_sorted_replace(hashkey, element);
- }
- this->_insert_unsorted(hashkey, element);
- return m_nodes.size();
- }
-
- //! Insert an element into the hash,But if this container is a sorted array, this inserts it unsorted
- /*!
- */
- inline GUINT insert_unsorted(GUINT hashkey, const T& element)
- {
- if (m_hash_table)
- {
- return this->_insert_hash_table(hashkey, element);
- }
- return this->_insert_unsorted(hashkey, element);
- }
-};
-
-#endif // GIM_CONTAINERS_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_linear_math.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_linear_math.h
deleted file mode 100644
index 98401a404a..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_linear_math.h
+++ /dev/null
@@ -1,1488 +0,0 @@
-#ifndef GIM_LINEAR_H_INCLUDED
-#define GIM_LINEAR_H_INCLUDED
-
-/*! \file gim_linear_math.h
-*\author Francisco Leon Najera
-Type Independant Vector and matrix operations.
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_math.h"
-#include "gim_geom_types.h"
-
-//! Zero out a 2D vector
-#define VEC_ZERO_2(a) \
- { \
- (a)[0] = (a)[1] = 0.0f; \
- }
-
-//! Zero out a 3D vector
-#define VEC_ZERO(a) \
- { \
- (a)[0] = (a)[1] = (a)[2] = 0.0f; \
- }
-
-/// Zero out a 4D vector
-#define VEC_ZERO_4(a) \
- { \
- (a)[0] = (a)[1] = (a)[2] = (a)[3] = 0.0f; \
- }
-
-/// Vector copy
-#define VEC_COPY_2(b, a) \
- { \
- (b)[0] = (a)[0]; \
- (b)[1] = (a)[1]; \
- }
-
-/// Copy 3D vector
-#define VEC_COPY(b, a) \
- { \
- (b)[0] = (a)[0]; \
- (b)[1] = (a)[1]; \
- (b)[2] = (a)[2]; \
- }
-
-/// Copy 4D vector
-#define VEC_COPY_4(b, a) \
- { \
- (b)[0] = (a)[0]; \
- (b)[1] = (a)[1]; \
- (b)[2] = (a)[2]; \
- (b)[3] = (a)[3]; \
- }
-
-/// VECTOR SWAP
-#define VEC_SWAP(b, a) \
- { \
- GIM_SWAP_NUMBERS((b)[0], (a)[0]); \
- GIM_SWAP_NUMBERS((b)[1], (a)[1]); \
- GIM_SWAP_NUMBERS((b)[2], (a)[2]); \
- }
-
-/// Vector difference
-#define VEC_DIFF_2(v21, v2, v1) \
- { \
- (v21)[0] = (v2)[0] - (v1)[0]; \
- (v21)[1] = (v2)[1] - (v1)[1]; \
- }
-
-/// Vector difference
-#define VEC_DIFF(v21, v2, v1) \
- { \
- (v21)[0] = (v2)[0] - (v1)[0]; \
- (v21)[1] = (v2)[1] - (v1)[1]; \
- (v21)[2] = (v2)[2] - (v1)[2]; \
- }
-
-/// Vector difference
-#define VEC_DIFF_4(v21, v2, v1) \
- { \
- (v21)[0] = (v2)[0] - (v1)[0]; \
- (v21)[1] = (v2)[1] - (v1)[1]; \
- (v21)[2] = (v2)[2] - (v1)[2]; \
- (v21)[3] = (v2)[3] - (v1)[3]; \
- }
-
-/// Vector sum
-#define VEC_SUM_2(v21, v2, v1) \
- { \
- (v21)[0] = (v2)[0] + (v1)[0]; \
- (v21)[1] = (v2)[1] + (v1)[1]; \
- }
-
-/// Vector sum
-#define VEC_SUM(v21, v2, v1) \
- { \
- (v21)[0] = (v2)[0] + (v1)[0]; \
- (v21)[1] = (v2)[1] + (v1)[1]; \
- (v21)[2] = (v2)[2] + (v1)[2]; \
- }
-
-/// Vector sum
-#define VEC_SUM_4(v21, v2, v1) \
- { \
- (v21)[0] = (v2)[0] + (v1)[0]; \
- (v21)[1] = (v2)[1] + (v1)[1]; \
- (v21)[2] = (v2)[2] + (v1)[2]; \
- (v21)[3] = (v2)[3] + (v1)[3]; \
- }
-
-/// scalar times vector
-#define VEC_SCALE_2(c, a, b) \
- { \
- (c)[0] = (a) * (b)[0]; \
- (c)[1] = (a) * (b)[1]; \
- }
-
-/// scalar times vector
-#define VEC_SCALE(c, a, b) \
- { \
- (c)[0] = (a) * (b)[0]; \
- (c)[1] = (a) * (b)[1]; \
- (c)[2] = (a) * (b)[2]; \
- }
-
-/// scalar times vector
-#define VEC_SCALE_4(c, a, b) \
- { \
- (c)[0] = (a) * (b)[0]; \
- (c)[1] = (a) * (b)[1]; \
- (c)[2] = (a) * (b)[2]; \
- (c)[3] = (a) * (b)[3]; \
- }
-
-/// accumulate scaled vector
-#define VEC_ACCUM_2(c, a, b) \
- { \
- (c)[0] += (a) * (b)[0]; \
- (c)[1] += (a) * (b)[1]; \
- }
-
-/// accumulate scaled vector
-#define VEC_ACCUM(c, a, b) \
- { \
- (c)[0] += (a) * (b)[0]; \
- (c)[1] += (a) * (b)[1]; \
- (c)[2] += (a) * (b)[2]; \
- }
-
-/// accumulate scaled vector
-#define VEC_ACCUM_4(c, a, b) \
- { \
- (c)[0] += (a) * (b)[0]; \
- (c)[1] += (a) * (b)[1]; \
- (c)[2] += (a) * (b)[2]; \
- (c)[3] += (a) * (b)[3]; \
- }
-
-/// Vector dot product
-#define VEC_DOT_2(a, b) ((a)[0] * (b)[0] + (a)[1] * (b)[1])
-
-/// Vector dot product
-#define VEC_DOT(a, b) ((a)[0] * (b)[0] + (a)[1] * (b)[1] + (a)[2] * (b)[2])
-
-/// Vector dot product
-#define VEC_DOT_4(a, b) ((a)[0] * (b)[0] + (a)[1] * (b)[1] + (a)[2] * (b)[2] + (a)[3] * (b)[3])
-
-/// vector impact parameter (squared)
-#define VEC_IMPACT_SQ(bsq, direction, position) \
- { \
- GREAL _llel_ = VEC_DOT(direction, position); \
- bsq = VEC_DOT(position, position) - _llel_ * _llel_; \
- }
-
-/// vector impact parameter
-#define VEC_IMPACT(bsq, direction, position) \
- { \
- VEC_IMPACT_SQ(bsq, direction, position); \
- GIM_SQRT(bsq, bsq); \
- }
-
-/// Vector length
-#define VEC_LENGTH_2(a, l) \
- { \
- GREAL _pp = VEC_DOT_2(a, a); \
- GIM_SQRT(_pp, l); \
- }
-
-/// Vector length
-#define VEC_LENGTH(a, l) \
- { \
- GREAL _pp = VEC_DOT(a, a); \
- GIM_SQRT(_pp, l); \
- }
-
-/// Vector length
-#define VEC_LENGTH_4(a, l) \
- { \
- GREAL _pp = VEC_DOT_4(a, a); \
- GIM_SQRT(_pp, l); \
- }
-
-/// Vector inv length
-#define VEC_INV_LENGTH_2(a, l) \
- { \
- GREAL _pp = VEC_DOT_2(a, a); \
- GIM_INV_SQRT(_pp, l); \
- }
-
-/// Vector inv length
-#define VEC_INV_LENGTH(a, l) \
- { \
- GREAL _pp = VEC_DOT(a, a); \
- GIM_INV_SQRT(_pp, l); \
- }
-
-/// Vector inv length
-#define VEC_INV_LENGTH_4(a, l) \
- { \
- GREAL _pp = VEC_DOT_4(a, a); \
- GIM_INV_SQRT(_pp, l); \
- }
-
-/// distance between two points
-#define VEC_DISTANCE(_len, _va, _vb) \
- { \
- vec3f _tmp_; \
- VEC_DIFF(_tmp_, _vb, _va); \
- VEC_LENGTH(_tmp_, _len); \
- }
-
-/// Vector length
-#define VEC_CONJUGATE_LENGTH(a, l) \
- { \
- GREAL _pp = 1.0 - a[0] * a[0] - a[1] * a[1] - a[2] * a[2]; \
- GIM_SQRT(_pp, l); \
- }
-
-/// Vector length
-#define VEC_NORMALIZE(a) \
- { \
- GREAL len; \
- VEC_INV_LENGTH(a, len); \
- if (len < G_REAL_INFINITY) \
- { \
- a[0] *= len; \
- a[1] *= len; \
- a[2] *= len; \
- } \
- }
-
-/// Set Vector size
-#define VEC_RENORMALIZE(a, newlen) \
- { \
- GREAL len; \
- VEC_INV_LENGTH(a, len); \
- if (len < G_REAL_INFINITY) \
- { \
- len *= newlen; \
- a[0] *= len; \
- a[1] *= len; \
- a[2] *= len; \
- } \
- }
-
-/// Vector cross
-#define VEC_CROSS(c, a, b) \
- { \
- c[0] = (a)[1] * (b)[2] - (a)[2] * (b)[1]; \
- c[1] = (a)[2] * (b)[0] - (a)[0] * (b)[2]; \
- c[2] = (a)[0] * (b)[1] - (a)[1] * (b)[0]; \
- }
-
-/*! Vector perp -- assumes that n is of unit length
- * accepts vector v, subtracts out any component parallel to n */
-#define VEC_PERPENDICULAR(vp, v, n) \
- { \
- GREAL dot = VEC_DOT(v, n); \
- vp[0] = (v)[0] - dot * (n)[0]; \
- vp[1] = (v)[1] - dot * (n)[1]; \
- vp[2] = (v)[2] - dot * (n)[2]; \
- }
-
-/*! Vector parallel -- assumes that n is of unit length */
-#define VEC_PARALLEL(vp, v, n) \
- { \
- GREAL dot = VEC_DOT(v, n); \
- vp[0] = (dot) * (n)[0]; \
- vp[1] = (dot) * (n)[1]; \
- vp[2] = (dot) * (n)[2]; \
- }
-
-/*! Same as Vector parallel -- n can have any length
- * accepts vector v, subtracts out any component perpendicular to n */
-#define VEC_PROJECT(vp, v, n) \
- { \
- GREAL scalar = VEC_DOT(v, n); \
- scalar /= VEC_DOT(n, n); \
- vp[0] = (scalar) * (n)[0]; \
- vp[1] = (scalar) * (n)[1]; \
- vp[2] = (scalar) * (n)[2]; \
- }
-
-/*! accepts vector v*/
-#define VEC_UNPROJECT(vp, v, n) \
- { \
- GREAL scalar = VEC_DOT(v, n); \
- scalar = VEC_DOT(n, n) / scalar; \
- vp[0] = (scalar) * (n)[0]; \
- vp[1] = (scalar) * (n)[1]; \
- vp[2] = (scalar) * (n)[2]; \
- }
-
-/*! Vector reflection -- assumes n is of unit length
- Takes vector v, reflects it against reflector n, and returns vr */
-#define VEC_REFLECT(vr, v, n) \
- { \
- GREAL dot = VEC_DOT(v, n); \
- vr[0] = (v)[0] - 2.0 * (dot) * (n)[0]; \
- vr[1] = (v)[1] - 2.0 * (dot) * (n)[1]; \
- vr[2] = (v)[2] - 2.0 * (dot) * (n)[2]; \
- }
-
-/*! Vector blending
-Takes two vectors a, b, blends them together with two scalars */
-#define VEC_BLEND_AB(vr, sa, a, sb, b) \
- { \
- vr[0] = (sa) * (a)[0] + (sb) * (b)[0]; \
- vr[1] = (sa) * (a)[1] + (sb) * (b)[1]; \
- vr[2] = (sa) * (a)[2] + (sb) * (b)[2]; \
- }
-
-/*! Vector blending
-Takes two vectors a, b, blends them together with s <=1 */
-#define VEC_BLEND(vr, a, b, s) VEC_BLEND_AB(vr, (1 - s), a, s, b)
-
-#define VEC_SET3(a, b, op, c) \
- a[0] = b[0] op c[0]; \
- a[1] = b[1] op c[1]; \
- a[2] = b[2] op c[2];
-
-//! Finds the bigger cartesian coordinate from a vector
-#define VEC_MAYOR_COORD(vec, maxc) \
- { \
- GREAL A[] = {fabs(vec[0]), fabs(vec[1]), fabs(vec[2])}; \
- maxc = A[0] > A[1] ? (A[0] > A[2] ? 0 : 2) : (A[1] > A[2] ? 1 : 2); \
- }
-
-//! Finds the 2 smallest cartesian coordinates from a vector
-#define VEC_MINOR_AXES(vec, i0, i1) \
- { \
- VEC_MAYOR_COORD(vec, i0); \
- i0 = (i0 + 1) % 3; \
- i1 = (i0 + 1) % 3; \
- }
-
-#define VEC_EQUAL(v1, v2) (v1[0] == v2[0] && v1[1] == v2[1] && v1[2] == v2[2])
-
-#define VEC_NEAR_EQUAL(v1, v2) (GIM_NEAR_EQUAL(v1[0], v2[0]) && GIM_NEAR_EQUAL(v1[1], v2[1]) && GIM_NEAR_EQUAL(v1[2], v2[2]))
-
-/// Vector cross
-#define X_AXIS_CROSS_VEC(dst, src) \
- { \
- dst[0] = 0.0f; \
- dst[1] = -src[2]; \
- dst[2] = src[1]; \
- }
-
-#define Y_AXIS_CROSS_VEC(dst, src) \
- { \
- dst[0] = src[2]; \
- dst[1] = 0.0f; \
- dst[2] = -src[0]; \
- }
-
-#define Z_AXIS_CROSS_VEC(dst, src) \
- { \
- dst[0] = -src[1]; \
- dst[1] = src[0]; \
- dst[2] = 0.0f; \
- }
-
-/// initialize matrix
-#define IDENTIFY_MATRIX_3X3(m) \
- { \
- m[0][0] = 1.0; \
- m[0][1] = 0.0; \
- m[0][2] = 0.0; \
- \
- m[1][0] = 0.0; \
- m[1][1] = 1.0; \
- m[1][2] = 0.0; \
- \
- m[2][0] = 0.0; \
- m[2][1] = 0.0; \
- m[2][2] = 1.0; \
- }
-
-/*! initialize matrix */
-#define IDENTIFY_MATRIX_4X4(m) \
- { \
- m[0][0] = 1.0; \
- m[0][1] = 0.0; \
- m[0][2] = 0.0; \
- m[0][3] = 0.0; \
- \
- m[1][0] = 0.0; \
- m[1][1] = 1.0; \
- m[1][2] = 0.0; \
- m[1][3] = 0.0; \
- \
- m[2][0] = 0.0; \
- m[2][1] = 0.0; \
- m[2][2] = 1.0; \
- m[2][3] = 0.0; \
- \
- m[3][0] = 0.0; \
- m[3][1] = 0.0; \
- m[3][2] = 0.0; \
- m[3][3] = 1.0; \
- }
-
-/*! initialize matrix */
-#define ZERO_MATRIX_4X4(m) \
- { \
- m[0][0] = 0.0; \
- m[0][1] = 0.0; \
- m[0][2] = 0.0; \
- m[0][3] = 0.0; \
- \
- m[1][0] = 0.0; \
- m[1][1] = 0.0; \
- m[1][2] = 0.0; \
- m[1][3] = 0.0; \
- \
- m[2][0] = 0.0; \
- m[2][1] = 0.0; \
- m[2][2] = 0.0; \
- m[2][3] = 0.0; \
- \
- m[3][0] = 0.0; \
- m[3][1] = 0.0; \
- m[3][2] = 0.0; \
- m[3][3] = 0.0; \
- }
-
-/*! matrix rotation X */
-#define ROTX_CS(m, cosine, sine) \
- { \
- /* rotation about the x-axis */ \
- \
- m[0][0] = 1.0; \
- m[0][1] = 0.0; \
- m[0][2] = 0.0; \
- m[0][3] = 0.0; \
- \
- m[1][0] = 0.0; \
- m[1][1] = (cosine); \
- m[1][2] = (sine); \
- m[1][3] = 0.0; \
- \
- m[2][0] = 0.0; \
- m[2][1] = -(sine); \
- m[2][2] = (cosine); \
- m[2][3] = 0.0; \
- \
- m[3][0] = 0.0; \
- m[3][1] = 0.0; \
- m[3][2] = 0.0; \
- m[3][3] = 1.0; \
- }
-
-/*! matrix rotation Y */
-#define ROTY_CS(m, cosine, sine) \
- { \
- /* rotation about the y-axis */ \
- \
- m[0][0] = (cosine); \
- m[0][1] = 0.0; \
- m[0][2] = -(sine); \
- m[0][3] = 0.0; \
- \
- m[1][0] = 0.0; \
- m[1][1] = 1.0; \
- m[1][2] = 0.0; \
- m[1][3] = 0.0; \
- \
- m[2][0] = (sine); \
- m[2][1] = 0.0; \
- m[2][2] = (cosine); \
- m[2][3] = 0.0; \
- \
- m[3][0] = 0.0; \
- m[3][1] = 0.0; \
- m[3][2] = 0.0; \
- m[3][3] = 1.0; \
- }
-
-/*! matrix rotation Z */
-#define ROTZ_CS(m, cosine, sine) \
- { \
- /* rotation about the z-axis */ \
- \
- m[0][0] = (cosine); \
- m[0][1] = (sine); \
- m[0][2] = 0.0; \
- m[0][3] = 0.0; \
- \
- m[1][0] = -(sine); \
- m[1][1] = (cosine); \
- m[1][2] = 0.0; \
- m[1][3] = 0.0; \
- \
- m[2][0] = 0.0; \
- m[2][1] = 0.0; \
- m[2][2] = 1.0; \
- m[2][3] = 0.0; \
- \
- m[3][0] = 0.0; \
- m[3][1] = 0.0; \
- m[3][2] = 0.0; \
- m[3][3] = 1.0; \
- }
-
-/*! matrix copy */
-#define COPY_MATRIX_2X2(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[0][1]; \
- \
- b[1][0] = a[1][0]; \
- b[1][1] = a[1][1]; \
- }
-
-/*! matrix copy */
-#define COPY_MATRIX_2X3(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[0][1]; \
- b[0][2] = a[0][2]; \
- \
- b[1][0] = a[1][0]; \
- b[1][1] = a[1][1]; \
- b[1][2] = a[1][2]; \
- }
-
-/*! matrix copy */
-#define COPY_MATRIX_3X3(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[0][1]; \
- b[0][2] = a[0][2]; \
- \
- b[1][0] = a[1][0]; \
- b[1][1] = a[1][1]; \
- b[1][2] = a[1][2]; \
- \
- b[2][0] = a[2][0]; \
- b[2][1] = a[2][1]; \
- b[2][2] = a[2][2]; \
- }
-
-/*! matrix copy */
-#define COPY_MATRIX_4X4(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[0][1]; \
- b[0][2] = a[0][2]; \
- b[0][3] = a[0][3]; \
- \
- b[1][0] = a[1][0]; \
- b[1][1] = a[1][1]; \
- b[1][2] = a[1][2]; \
- b[1][3] = a[1][3]; \
- \
- b[2][0] = a[2][0]; \
- b[2][1] = a[2][1]; \
- b[2][2] = a[2][2]; \
- b[2][3] = a[2][3]; \
- \
- b[3][0] = a[3][0]; \
- b[3][1] = a[3][1]; \
- b[3][2] = a[3][2]; \
- b[3][3] = a[3][3]; \
- }
-
-/*! matrix transpose */
-#define TRANSPOSE_MATRIX_2X2(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[1][0]; \
- \
- b[1][0] = a[0][1]; \
- b[1][1] = a[1][1]; \
- }
-
-/*! matrix transpose */
-#define TRANSPOSE_MATRIX_3X3(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[1][0]; \
- b[0][2] = a[2][0]; \
- \
- b[1][0] = a[0][1]; \
- b[1][1] = a[1][1]; \
- b[1][2] = a[2][1]; \
- \
- b[2][0] = a[0][2]; \
- b[2][1] = a[1][2]; \
- b[2][2] = a[2][2]; \
- }
-
-/*! matrix transpose */
-#define TRANSPOSE_MATRIX_4X4(b, a) \
- { \
- b[0][0] = a[0][0]; \
- b[0][1] = a[1][0]; \
- b[0][2] = a[2][0]; \
- b[0][3] = a[3][0]; \
- \
- b[1][0] = a[0][1]; \
- b[1][1] = a[1][1]; \
- b[1][2] = a[2][1]; \
- b[1][3] = a[3][1]; \
- \
- b[2][0] = a[0][2]; \
- b[2][1] = a[1][2]; \
- b[2][2] = a[2][2]; \
- b[2][3] = a[3][2]; \
- \
- b[3][0] = a[0][3]; \
- b[3][1] = a[1][3]; \
- b[3][2] = a[2][3]; \
- b[3][3] = a[3][3]; \
- }
-
-/*! multiply matrix by scalar */
-#define SCALE_MATRIX_2X2(b, s, a) \
- { \
- b[0][0] = (s)*a[0][0]; \
- b[0][1] = (s)*a[0][1]; \
- \
- b[1][0] = (s)*a[1][0]; \
- b[1][1] = (s)*a[1][1]; \
- }
-
-/*! multiply matrix by scalar */
-#define SCALE_MATRIX_3X3(b, s, a) \
- { \
- b[0][0] = (s)*a[0][0]; \
- b[0][1] = (s)*a[0][1]; \
- b[0][2] = (s)*a[0][2]; \
- \
- b[1][0] = (s)*a[1][0]; \
- b[1][1] = (s)*a[1][1]; \
- b[1][2] = (s)*a[1][2]; \
- \
- b[2][0] = (s)*a[2][0]; \
- b[2][1] = (s)*a[2][1]; \
- b[2][2] = (s)*a[2][2]; \
- }
-
-/*! multiply matrix by scalar */
-#define SCALE_MATRIX_4X4(b, s, a) \
- { \
- b[0][0] = (s)*a[0][0]; \
- b[0][1] = (s)*a[0][1]; \
- b[0][2] = (s)*a[0][2]; \
- b[0][3] = (s)*a[0][3]; \
- \
- b[1][0] = (s)*a[1][0]; \
- b[1][1] = (s)*a[1][1]; \
- b[1][2] = (s)*a[1][2]; \
- b[1][3] = (s)*a[1][3]; \
- \
- b[2][0] = (s)*a[2][0]; \
- b[2][1] = (s)*a[2][1]; \
- b[2][2] = (s)*a[2][2]; \
- b[2][3] = (s)*a[2][3]; \
- \
- b[3][0] = s * a[3][0]; \
- b[3][1] = s * a[3][1]; \
- b[3][2] = s * a[3][2]; \
- b[3][3] = s * a[3][3]; \
- }
-
-/*! multiply matrix by scalar */
-#define SCALE_VEC_MATRIX_2X2(b, svec, a) \
- { \
- b[0][0] = svec[0] * a[0][0]; \
- b[1][0] = svec[0] * a[1][0]; \
- \
- b[0][1] = svec[1] * a[0][1]; \
- b[1][1] = svec[1] * a[1][1]; \
- }
-
-/*! multiply matrix by scalar. Each columns is scaled by each scalar vector component */
-#define SCALE_VEC_MATRIX_3X3(b, svec, a) \
- { \
- b[0][0] = svec[0] * a[0][0]; \
- b[1][0] = svec[0] * a[1][0]; \
- b[2][0] = svec[0] * a[2][0]; \
- \
- b[0][1] = svec[1] * a[0][1]; \
- b[1][1] = svec[1] * a[1][1]; \
- b[2][1] = svec[1] * a[2][1]; \
- \
- b[0][2] = svec[2] * a[0][2]; \
- b[1][2] = svec[2] * a[1][2]; \
- b[2][2] = svec[2] * a[2][2]; \
- }
-
-/*! multiply matrix by scalar */
-#define SCALE_VEC_MATRIX_4X4(b, svec, a) \
- { \
- b[0][0] = svec[0] * a[0][0]; \
- b[1][0] = svec[0] * a[1][0]; \
- b[2][0] = svec[0] * a[2][0]; \
- b[3][0] = svec[0] * a[3][0]; \
- \
- b[0][1] = svec[1] * a[0][1]; \
- b[1][1] = svec[1] * a[1][1]; \
- b[2][1] = svec[1] * a[2][1]; \
- b[3][1] = svec[1] * a[3][1]; \
- \
- b[0][2] = svec[2] * a[0][2]; \
- b[1][2] = svec[2] * a[1][2]; \
- b[2][2] = svec[2] * a[2][2]; \
- b[3][2] = svec[2] * a[3][2]; \
- \
- b[0][3] = svec[3] * a[0][3]; \
- b[1][3] = svec[3] * a[1][3]; \
- b[2][3] = svec[3] * a[2][3]; \
- b[3][3] = svec[3] * a[3][3]; \
- }
-
-/*! multiply matrix by scalar */
-#define ACCUM_SCALE_MATRIX_2X2(b, s, a) \
- { \
- b[0][0] += (s)*a[0][0]; \
- b[0][1] += (s)*a[0][1]; \
- \
- b[1][0] += (s)*a[1][0]; \
- b[1][1] += (s)*a[1][1]; \
- }
-
-/*! multiply matrix by scalar */
-#define ACCUM_SCALE_MATRIX_3X3(b, s, a) \
- { \
- b[0][0] += (s)*a[0][0]; \
- b[0][1] += (s)*a[0][1]; \
- b[0][2] += (s)*a[0][2]; \
- \
- b[1][0] += (s)*a[1][0]; \
- b[1][1] += (s)*a[1][1]; \
- b[1][2] += (s)*a[1][2]; \
- \
- b[2][0] += (s)*a[2][0]; \
- b[2][1] += (s)*a[2][1]; \
- b[2][2] += (s)*a[2][2]; \
- }
-
-/*! multiply matrix by scalar */
-#define ACCUM_SCALE_MATRIX_4X4(b, s, a) \
- { \
- b[0][0] += (s)*a[0][0]; \
- b[0][1] += (s)*a[0][1]; \
- b[0][2] += (s)*a[0][2]; \
- b[0][3] += (s)*a[0][3]; \
- \
- b[1][0] += (s)*a[1][0]; \
- b[1][1] += (s)*a[1][1]; \
- b[1][2] += (s)*a[1][2]; \
- b[1][3] += (s)*a[1][3]; \
- \
- b[2][0] += (s)*a[2][0]; \
- b[2][1] += (s)*a[2][1]; \
- b[2][2] += (s)*a[2][2]; \
- b[2][3] += (s)*a[2][3]; \
- \
- b[3][0] += (s)*a[3][0]; \
- b[3][1] += (s)*a[3][1]; \
- b[3][2] += (s)*a[3][2]; \
- b[3][3] += (s)*a[3][3]; \
- }
-
-/*! matrix product */
-/*! c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/
-#define MATRIX_PRODUCT_2X2(c, a, b) \
- { \
- c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0]; \
- c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1]; \
- \
- c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0]; \
- c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1]; \
- }
-
-/*! matrix product */
-/*! c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/
-#define MATRIX_PRODUCT_3X3(c, a, b) \
- { \
- c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0]; \
- c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1]; \
- c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2]; \
- \
- c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0]; \
- c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1]; \
- c[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2]; \
- \
- c[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0]; \
- c[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1]; \
- c[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2]; \
- }
-
-/*! matrix product */
-/*! c[x][y] = a[x][0]*b[0][y]+a[x][1]*b[1][y]+a[x][2]*b[2][y]+a[x][3]*b[3][y];*/
-#define MATRIX_PRODUCT_4X4(c, a, b) \
- { \
- c[0][0] = a[0][0] * b[0][0] + a[0][1] * b[1][0] + a[0][2] * b[2][0] + a[0][3] * b[3][0]; \
- c[0][1] = a[0][0] * b[0][1] + a[0][1] * b[1][1] + a[0][2] * b[2][1] + a[0][3] * b[3][1]; \
- c[0][2] = a[0][0] * b[0][2] + a[0][1] * b[1][2] + a[0][2] * b[2][2] + a[0][3] * b[3][2]; \
- c[0][3] = a[0][0] * b[0][3] + a[0][1] * b[1][3] + a[0][2] * b[2][3] + a[0][3] * b[3][3]; \
- \
- c[1][0] = a[1][0] * b[0][0] + a[1][1] * b[1][0] + a[1][2] * b[2][0] + a[1][3] * b[3][0]; \
- c[1][1] = a[1][0] * b[0][1] + a[1][1] * b[1][1] + a[1][2] * b[2][1] + a[1][3] * b[3][1]; \
- c[1][2] = a[1][0] * b[0][2] + a[1][1] * b[1][2] + a[1][2] * b[2][2] + a[1][3] * b[3][2]; \
- c[1][3] = a[1][0] * b[0][3] + a[1][1] * b[1][3] + a[1][2] * b[2][3] + a[1][3] * b[3][3]; \
- \
- c[2][0] = a[2][0] * b[0][0] + a[2][1] * b[1][0] + a[2][2] * b[2][0] + a[2][3] * b[3][0]; \
- c[2][1] = a[2][0] * b[0][1] + a[2][1] * b[1][1] + a[2][2] * b[2][1] + a[2][3] * b[3][1]; \
- c[2][2] = a[2][0] * b[0][2] + a[2][1] * b[1][2] + a[2][2] * b[2][2] + a[2][3] * b[3][2]; \
- c[2][3] = a[2][0] * b[0][3] + a[2][1] * b[1][3] + a[2][2] * b[2][3] + a[2][3] * b[3][3]; \
- \
- c[3][0] = a[3][0] * b[0][0] + a[3][1] * b[1][0] + a[3][2] * b[2][0] + a[3][3] * b[3][0]; \
- c[3][1] = a[3][0] * b[0][1] + a[3][1] * b[1][1] + a[3][2] * b[2][1] + a[3][3] * b[3][1]; \
- c[3][2] = a[3][0] * b[0][2] + a[3][1] * b[1][2] + a[3][2] * b[2][2] + a[3][3] * b[3][2]; \
- c[3][3] = a[3][0] * b[0][3] + a[3][1] * b[1][3] + a[3][2] * b[2][3] + a[3][3] * b[3][3]; \
- }
-
-/*! matrix times vector */
-#define MAT_DOT_VEC_2X2(p, m, v) \
- { \
- p[0] = m[0][0] * v[0] + m[0][1] * v[1]; \
- p[1] = m[1][0] * v[0] + m[1][1] * v[1]; \
- }
-
-/*! matrix times vector */
-#define MAT_DOT_VEC_3X3(p, m, v) \
- { \
- p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2]; \
- p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2]; \
- p[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2]; \
- }
-
-/*! matrix times vector
-v is a vec4f
-*/
-#define MAT_DOT_VEC_4X4(p, m, v) \
- { \
- p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3] * v[3]; \
- p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3] * v[3]; \
- p[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3] * v[3]; \
- p[3] = m[3][0] * v[0] + m[3][1] * v[1] + m[3][2] * v[2] + m[3][3] * v[3]; \
- }
-
-/*! matrix times vector
-v is a vec3f
-and m is a mat4f<br>
-Last column is added as the position
-*/
-#define MAT_DOT_VEC_3X4(p, m, v) \
- { \
- p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2] * v[2] + m[0][3]; \
- p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2] * v[2] + m[1][3]; \
- p[2] = m[2][0] * v[0] + m[2][1] * v[1] + m[2][2] * v[2] + m[2][3]; \
- }
-
-/*! vector transpose times matrix */
-/*! p[j] = v[0]*m[0][j] + v[1]*m[1][j] + v[2]*m[2][j]; */
-#define VEC_DOT_MAT_3X3(p, v, m) \
- { \
- p[0] = v[0] * m[0][0] + v[1] * m[1][0] + v[2] * m[2][0]; \
- p[1] = v[0] * m[0][1] + v[1] * m[1][1] + v[2] * m[2][1]; \
- p[2] = v[0] * m[0][2] + v[1] * m[1][2] + v[2] * m[2][2]; \
- }
-
-/*! affine matrix times vector */
-/** The matrix is assumed to be an affine matrix, with last two
- * entries representing a translation */
-#define MAT_DOT_VEC_2X3(p, m, v) \
- { \
- p[0] = m[0][0] * v[0] + m[0][1] * v[1] + m[0][2]; \
- p[1] = m[1][0] * v[0] + m[1][1] * v[1] + m[1][2]; \
- }
-
-//! Transform a plane
-#define MAT_TRANSFORM_PLANE_4X4(pout, m, plane) \
- { \
- pout[0] = m[0][0] * plane[0] + m[0][1] * plane[1] + m[0][2] * plane[2]; \
- pout[1] = m[1][0] * plane[0] + m[1][1] * plane[1] + m[1][2] * plane[2]; \
- pout[2] = m[2][0] * plane[0] + m[2][1] * plane[1] + m[2][2] * plane[2]; \
- pout[3] = m[0][3] * pout[0] + m[1][3] * pout[1] + m[2][3] * pout[2] + plane[3]; \
- }
-
-/** inverse transpose of matrix times vector
- *
- * This macro computes inverse transpose of matrix m,
- * and multiplies vector v into it, to yeild vector p
- *
- * DANGER !!! Do Not use this on normal vectors!!!
- * It will leave normals the wrong length !!!
- * See macro below for use on normals.
- */
-#define INV_TRANSP_MAT_DOT_VEC_2X2(p, m, v) \
- { \
- GREAL det; \
- \
- det = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \
- p[0] = m[1][1] * v[0] - m[1][0] * v[1]; \
- p[1] = -m[0][1] * v[0] + m[0][0] * v[1]; \
- \
- /* if matrix not singular, and not orthonormal, then renormalize */ \
- if ((det != 1.0f) && (det != 0.0f)) \
- { \
- det = 1.0f / det; \
- p[0] *= det; \
- p[1] *= det; \
- } \
- }
-
-/** transform normal vector by inverse transpose of matrix
- * and then renormalize the vector
- *
- * This macro computes inverse transpose of matrix m,
- * and multiplies vector v into it, to yeild vector p
- * Vector p is then normalized.
- */
-#define NORM_XFORM_2X2(p, m, v) \
- { \
- GREAL len; \
- \
- /* do nothing if off-diagonals are zero and diagonals are \
- * equal */ \
- if ((m[0][1] != 0.0) || (m[1][0] != 0.0) || (m[0][0] != m[1][1])) \
- { \
- p[0] = m[1][1] * v[0] - m[1][0] * v[1]; \
- p[1] = -m[0][1] * v[0] + m[0][0] * v[1]; \
- \
- len = p[0] * p[0] + p[1] * p[1]; \
- GIM_INV_SQRT(len, len); \
- p[0] *= len; \
- p[1] *= len; \
- } \
- else \
- { \
- VEC_COPY_2(p, v); \
- } \
- }
-
-/** outer product of vector times vector transpose
- *
- * The outer product of vector v and vector transpose t yeilds
- * dyadic matrix m.
- */
-#define OUTER_PRODUCT_2X2(m, v, t) \
- { \
- m[0][0] = v[0] * t[0]; \
- m[0][1] = v[0] * t[1]; \
- \
- m[1][0] = v[1] * t[0]; \
- m[1][1] = v[1] * t[1]; \
- }
-
-/** outer product of vector times vector transpose
- *
- * The outer product of vector v and vector transpose t yeilds
- * dyadic matrix m.
- */
-#define OUTER_PRODUCT_3X3(m, v, t) \
- { \
- m[0][0] = v[0] * t[0]; \
- m[0][1] = v[0] * t[1]; \
- m[0][2] = v[0] * t[2]; \
- \
- m[1][0] = v[1] * t[0]; \
- m[1][1] = v[1] * t[1]; \
- m[1][2] = v[1] * t[2]; \
- \
- m[2][0] = v[2] * t[0]; \
- m[2][1] = v[2] * t[1]; \
- m[2][2] = v[2] * t[2]; \
- }
-
-/** outer product of vector times vector transpose
- *
- * The outer product of vector v and vector transpose t yeilds
- * dyadic matrix m.
- */
-#define OUTER_PRODUCT_4X4(m, v, t) \
- { \
- m[0][0] = v[0] * t[0]; \
- m[0][1] = v[0] * t[1]; \
- m[0][2] = v[0] * t[2]; \
- m[0][3] = v[0] * t[3]; \
- \
- m[1][0] = v[1] * t[0]; \
- m[1][1] = v[1] * t[1]; \
- m[1][2] = v[1] * t[2]; \
- m[1][3] = v[1] * t[3]; \
- \
- m[2][0] = v[2] * t[0]; \
- m[2][1] = v[2] * t[1]; \
- m[2][2] = v[2] * t[2]; \
- m[2][3] = v[2] * t[3]; \
- \
- m[3][0] = v[3] * t[0]; \
- m[3][1] = v[3] * t[1]; \
- m[3][2] = v[3] * t[2]; \
- m[3][3] = v[3] * t[3]; \
- }
-
-/** outer product of vector times vector transpose
- *
- * The outer product of vector v and vector transpose t yeilds
- * dyadic matrix m.
- */
-#define ACCUM_OUTER_PRODUCT_2X2(m, v, t) \
- { \
- m[0][0] += v[0] * t[0]; \
- m[0][1] += v[0] * t[1]; \
- \
- m[1][0] += v[1] * t[0]; \
- m[1][1] += v[1] * t[1]; \
- }
-
-/** outer product of vector times vector transpose
- *
- * The outer product of vector v and vector transpose t yeilds
- * dyadic matrix m.
- */
-#define ACCUM_OUTER_PRODUCT_3X3(m, v, t) \
- { \
- m[0][0] += v[0] * t[0]; \
- m[0][1] += v[0] * t[1]; \
- m[0][2] += v[0] * t[2]; \
- \
- m[1][0] += v[1] * t[0]; \
- m[1][1] += v[1] * t[1]; \
- m[1][2] += v[1] * t[2]; \
- \
- m[2][0] += v[2] * t[0]; \
- m[2][1] += v[2] * t[1]; \
- m[2][2] += v[2] * t[2]; \
- }
-
-/** outer product of vector times vector transpose
- *
- * The outer product of vector v and vector transpose t yeilds
- * dyadic matrix m.
- */
-#define ACCUM_OUTER_PRODUCT_4X4(m, v, t) \
- { \
- m[0][0] += v[0] * t[0]; \
- m[0][1] += v[0] * t[1]; \
- m[0][2] += v[0] * t[2]; \
- m[0][3] += v[0] * t[3]; \
- \
- m[1][0] += v[1] * t[0]; \
- m[1][1] += v[1] * t[1]; \
- m[1][2] += v[1] * t[2]; \
- m[1][3] += v[1] * t[3]; \
- \
- m[2][0] += v[2] * t[0]; \
- m[2][1] += v[2] * t[1]; \
- m[2][2] += v[2] * t[2]; \
- m[2][3] += v[2] * t[3]; \
- \
- m[3][0] += v[3] * t[0]; \
- m[3][1] += v[3] * t[1]; \
- m[3][2] += v[3] * t[2]; \
- m[3][3] += v[3] * t[3]; \
- }
-
-/** determinant of matrix
- *
- * Computes determinant of matrix m, returning d
- */
-#define DETERMINANT_2X2(d, m) \
- { \
- d = m[0][0] * m[1][1] - m[0][1] * m[1][0]; \
- }
-
-/** determinant of matrix
- *
- * Computes determinant of matrix m, returning d
- */
-#define DETERMINANT_3X3(d, m) \
- { \
- d = m[0][0] * (m[1][1] * m[2][2] - m[1][2] * m[2][1]); \
- d -= m[0][1] * (m[1][0] * m[2][2] - m[1][2] * m[2][0]); \
- d += m[0][2] * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); \
- }
-
-/** i,j,th cofactor of a 4x4 matrix
- *
- */
-#define COFACTOR_4X4_IJ(fac, m, i, j) \
- { \
- GUINT __ii[4], __jj[4], __k; \
- \
- for (__k = 0; __k < i; __k++) __ii[__k] = __k; \
- for (__k = i; __k < 3; __k++) __ii[__k] = __k + 1; \
- for (__k = 0; __k < j; __k++) __jj[__k] = __k; \
- for (__k = j; __k < 3; __k++) __jj[__k] = __k + 1; \
- \
- (fac) = m[__ii[0]][__jj[0]] * (m[__ii[1]][__jj[1]] * m[__ii[2]][__jj[2]] - m[__ii[1]][__jj[2]] * m[__ii[2]][__jj[1]]); \
- (fac) -= m[__ii[0]][__jj[1]] * (m[__ii[1]][__jj[0]] * m[__ii[2]][__jj[2]] - m[__ii[1]][__jj[2]] * m[__ii[2]][__jj[0]]); \
- (fac) += m[__ii[0]][__jj[2]] * (m[__ii[1]][__jj[0]] * m[__ii[2]][__jj[1]] - m[__ii[1]][__jj[1]] * m[__ii[2]][__jj[0]]); \
- \
- __k = i + j; \
- if (__k != (__k / 2) * 2) \
- { \
- (fac) = -(fac); \
- } \
- }
-
-/** determinant of matrix
- *
- * Computes determinant of matrix m, returning d
- */
-#define DETERMINANT_4X4(d, m) \
- { \
- GREAL cofac; \
- COFACTOR_4X4_IJ(cofac, m, 0, 0); \
- d = m[0][0] * cofac; \
- COFACTOR_4X4_IJ(cofac, m, 0, 1); \
- d += m[0][1] * cofac; \
- COFACTOR_4X4_IJ(cofac, m, 0, 2); \
- d += m[0][2] * cofac; \
- COFACTOR_4X4_IJ(cofac, m, 0, 3); \
- d += m[0][3] * cofac; \
- }
-
-/** cofactor of matrix
- *
- * Computes cofactor of matrix m, returning a
- */
-#define COFACTOR_2X2(a, m) \
- { \
- a[0][0] = (m)[1][1]; \
- a[0][1] = -(m)[1][0]; \
- a[1][0] = -(m)[0][1]; \
- a[1][1] = (m)[0][0]; \
- }
-
-/** cofactor of matrix
- *
- * Computes cofactor of matrix m, returning a
- */
-#define COFACTOR_3X3(a, m) \
- { \
- a[0][0] = m[1][1] * m[2][2] - m[1][2] * m[2][1]; \
- a[0][1] = -(m[1][0] * m[2][2] - m[2][0] * m[1][2]); \
- a[0][2] = m[1][0] * m[2][1] - m[1][1] * m[2][0]; \
- a[1][0] = -(m[0][1] * m[2][2] - m[0][2] * m[2][1]); \
- a[1][1] = m[0][0] * m[2][2] - m[0][2] * m[2][0]; \
- a[1][2] = -(m[0][0] * m[2][1] - m[0][1] * m[2][0]); \
- a[2][0] = m[0][1] * m[1][2] - m[0][2] * m[1][1]; \
- a[2][1] = -(m[0][0] * m[1][2] - m[0][2] * m[1][0]); \
- a[2][2] = m[0][0]*m[1][1] - m[0][1]*m[1][0]); \
- }
-
-/** cofactor of matrix
- *
- * Computes cofactor of matrix m, returning a
- */
-#define COFACTOR_4X4(a, m) \
- { \
- int i, j; \
- \
- for (i = 0; i < 4; i++) \
- { \
- for (j = 0; j < 4; j++) \
- { \
- COFACTOR_4X4_IJ(a[i][j], m, i, j); \
- } \
- } \
- }
-
-/** adjoint of matrix
- *
- * Computes adjoint of matrix m, returning a
- * (Note that adjoint is just the transpose of the cofactor matrix)
- */
-#define ADJOINT_2X2(a, m) \
- { \
- a[0][0] = (m)[1][1]; \
- a[1][0] = -(m)[1][0]; \
- a[0][1] = -(m)[0][1]; \
- a[1][1] = (m)[0][0]; \
- }
-
-/** adjoint of matrix
- *
- * Computes adjoint of matrix m, returning a
- * (Note that adjoint is just the transpose of the cofactor matrix)
- */
-#define ADJOINT_3X3(a, m) \
- { \
- a[0][0] = m[1][1] * m[2][2] - m[1][2] * m[2][1]; \
- a[1][0] = -(m[1][0] * m[2][2] - m[2][0] * m[1][2]); \
- a[2][0] = m[1][0] * m[2][1] - m[1][1] * m[2][0]; \
- a[0][1] = -(m[0][1] * m[2][2] - m[0][2] * m[2][1]); \
- a[1][1] = m[0][0] * m[2][2] - m[0][2] * m[2][0]; \
- a[2][1] = -(m[0][0] * m[2][1] - m[0][1] * m[2][0]); \
- a[0][2] = m[0][1] * m[1][2] - m[0][2] * m[1][1]; \
- a[1][2] = -(m[0][0] * m[1][2] - m[0][2] * m[1][0]); \
- a[2][2] = m[0][0]*m[1][1] - m[0][1]*m[1][0]); \
- }
-
-/** adjoint of matrix
- *
- * Computes adjoint of matrix m, returning a
- * (Note that adjoint is just the transpose of the cofactor matrix)
- */
-#define ADJOINT_4X4(a, m) \
- { \
- char _i_, _j_; \
- \
- for (_i_ = 0; _i_ < 4; _i_++) \
- { \
- for (_j_ = 0; _j_ < 4; _j_++) \
- { \
- COFACTOR_4X4_IJ(a[_j_][_i_], m, _i_, _j_); \
- } \
- } \
- }
-
-/** compute adjoint of matrix and scale
- *
- * Computes adjoint of matrix m, scales it by s, returning a
- */
-#define SCALE_ADJOINT_2X2(a, s, m) \
- { \
- a[0][0] = (s)*m[1][1]; \
- a[1][0] = -(s)*m[1][0]; \
- a[0][1] = -(s)*m[0][1]; \
- a[1][1] = (s)*m[0][0]; \
- }
-
-/** compute adjoint of matrix and scale
- *
- * Computes adjoint of matrix m, scales it by s, returning a
- */
-#define SCALE_ADJOINT_3X3(a, s, m) \
- { \
- a[0][0] = (s) * (m[1][1] * m[2][2] - m[1][2] * m[2][1]); \
- a[1][0] = (s) * (m[1][2] * m[2][0] - m[1][0] * m[2][2]); \
- a[2][0] = (s) * (m[1][0] * m[2][1] - m[1][1] * m[2][0]); \
- \
- a[0][1] = (s) * (m[0][2] * m[2][1] - m[0][1] * m[2][2]); \
- a[1][1] = (s) * (m[0][0] * m[2][2] - m[0][2] * m[2][0]); \
- a[2][1] = (s) * (m[0][1] * m[2][0] - m[0][0] * m[2][1]); \
- \
- a[0][2] = (s) * (m[0][1] * m[1][2] - m[0][2] * m[1][1]); \
- a[1][2] = (s) * (m[0][2] * m[1][0] - m[0][0] * m[1][2]); \
- a[2][2] = (s) * (m[0][0] * m[1][1] - m[0][1] * m[1][0]); \
- }
-
-/** compute adjoint of matrix and scale
- *
- * Computes adjoint of matrix m, scales it by s, returning a
- */
-#define SCALE_ADJOINT_4X4(a, s, m) \
- { \
- char _i_, _j_; \
- for (_i_ = 0; _i_ < 4; _i_++) \
- { \
- for (_j_ = 0; _j_ < 4; _j_++) \
- { \
- COFACTOR_4X4_IJ(a[_j_][_i_], m, _i_, _j_); \
- a[_j_][_i_] *= s; \
- } \
- } \
- }
-
-/** inverse of matrix
- *
- * Compute inverse of matrix a, returning determinant m and
- * inverse b
- */
-#define INVERT_2X2(b, det, a) \
- { \
- GREAL _tmp_; \
- DETERMINANT_2X2(det, a); \
- _tmp_ = 1.0 / (det); \
- SCALE_ADJOINT_2X2(b, _tmp_, a); \
- }
-
-/** inverse of matrix
- *
- * Compute inverse of matrix a, returning determinant m and
- * inverse b
- */
-#define INVERT_3X3(b, det, a) \
- { \
- GREAL _tmp_; \
- DETERMINANT_3X3(det, a); \
- _tmp_ = 1.0 / (det); \
- SCALE_ADJOINT_3X3(b, _tmp_, a); \
- }
-
-/** inverse of matrix
- *
- * Compute inverse of matrix a, returning determinant m and
- * inverse b
- */
-#define INVERT_4X4(b, det, a) \
- { \
- GREAL _tmp_; \
- DETERMINANT_4X4(det, a); \
- _tmp_ = 1.0 / (det); \
- SCALE_ADJOINT_4X4(b, _tmp_, a); \
- }
-
-//! Get the triple(3) row of a transform matrix
-#define MAT_GET_ROW(mat, vec3, rowindex) \
- { \
- vec3[0] = mat[rowindex][0]; \
- vec3[1] = mat[rowindex][1]; \
- vec3[2] = mat[rowindex][2]; \
- }
-
-//! Get the tuple(2) row of a transform matrix
-#define MAT_GET_ROW2(mat, vec2, rowindex) \
- { \
- vec2[0] = mat[rowindex][0]; \
- vec2[1] = mat[rowindex][1]; \
- }
-
-//! Get the quad (4) row of a transform matrix
-#define MAT_GET_ROW4(mat, vec4, rowindex) \
- { \
- vec4[0] = mat[rowindex][0]; \
- vec4[1] = mat[rowindex][1]; \
- vec4[2] = mat[rowindex][2]; \
- vec4[3] = mat[rowindex][3]; \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_GET_COL(mat, vec3, colindex) \
- { \
- vec3[0] = mat[0][colindex]; \
- vec3[1] = mat[1][colindex]; \
- vec3[2] = mat[2][colindex]; \
- }
-
-//! Get the tuple(2) col of a transform matrix
-#define MAT_GET_COL2(mat, vec2, colindex) \
- { \
- vec2[0] = mat[0][colindex]; \
- vec2[1] = mat[1][colindex]; \
- }
-
-//! Get the quad (4) col of a transform matrix
-#define MAT_GET_COL4(mat, vec4, colindex) \
- { \
- vec4[0] = mat[0][colindex]; \
- vec4[1] = mat[1][colindex]; \
- vec4[2] = mat[2][colindex]; \
- vec4[3] = mat[3][colindex]; \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_GET_X(mat, vec3) \
- { \
- MAT_GET_COL(mat, vec3, 0); \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_GET_Y(mat, vec3) \
- { \
- MAT_GET_COL(mat, vec3, 1); \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_GET_Z(mat, vec3) \
- { \
- MAT_GET_COL(mat, vec3, 2); \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_SET_X(mat, vec3) \
- { \
- mat[0][0] = vec3[0]; \
- mat[1][0] = vec3[1]; \
- mat[2][0] = vec3[2]; \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_SET_Y(mat, vec3) \
- { \
- mat[0][1] = vec3[0]; \
- mat[1][1] = vec3[1]; \
- mat[2][1] = vec3[2]; \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_SET_Z(mat, vec3) \
- { \
- mat[0][2] = vec3[0]; \
- mat[1][2] = vec3[1]; \
- mat[2][2] = vec3[2]; \
- }
-
-//! Get the triple(3) col of a transform matrix
-#define MAT_GET_TRANSLATION(mat, vec3) \
- { \
- vec3[0] = mat[0][3]; \
- vec3[1] = mat[1][3]; \
- vec3[2] = mat[2][3]; \
- }
-
-//! Set the triple(3) col of a transform matrix
-#define MAT_SET_TRANSLATION(mat, vec3) \
- { \
- mat[0][3] = vec3[0]; \
- mat[1][3] = vec3[1]; \
- mat[2][3] = vec3[2]; \
- }
-
-//! Returns the dot product between a vec3f and the row of a matrix
-#define MAT_DOT_ROW(mat, vec3, rowindex) (vec3[0] * mat[rowindex][0] + vec3[1] * mat[rowindex][1] + vec3[2] * mat[rowindex][2])
-
-//! Returns the dot product between a vec2f and the row of a matrix
-#define MAT_DOT_ROW2(mat, vec2, rowindex) (vec2[0] * mat[rowindex][0] + vec2[1] * mat[rowindex][1])
-
-//! Returns the dot product between a vec4f and the row of a matrix
-#define MAT_DOT_ROW4(mat, vec4, rowindex) (vec4[0] * mat[rowindex][0] + vec4[1] * mat[rowindex][1] + vec4[2] * mat[rowindex][2] + vec4[3] * mat[rowindex][3])
-
-//! Returns the dot product between a vec3f and the col of a matrix
-#define MAT_DOT_COL(mat, vec3, colindex) (vec3[0] * mat[0][colindex] + vec3[1] * mat[1][colindex] + vec3[2] * mat[2][colindex])
-
-//! Returns the dot product between a vec2f and the col of a matrix
-#define MAT_DOT_COL2(mat, vec2, colindex) (vec2[0] * mat[0][colindex] + vec2[1] * mat[1][colindex])
-
-//! Returns the dot product between a vec4f and the col of a matrix
-#define MAT_DOT_COL4(mat, vec4, colindex) (vec4[0] * mat[0][colindex] + vec4[1] * mat[1][colindex] + vec4[2] * mat[2][colindex] + vec4[3] * mat[3][colindex])
-
-/*!Transpose matrix times vector
-v is a vec3f
-and m is a mat4f<br>
-*/
-#define INV_MAT_DOT_VEC_3X3(p, m, v) \
- { \
- p[0] = MAT_DOT_COL(m, v, 0); \
- p[1] = MAT_DOT_COL(m, v, 1); \
- p[2] = MAT_DOT_COL(m, v, 2); \
- }
-
-#endif // GIM_VECTOR_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_math.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_math.h
deleted file mode 100644
index 3c4f821a72..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_math.h
+++ /dev/null
@@ -1,148 +0,0 @@
-#ifndef GIM_MATH_H_INCLUDED
-#define GIM_MATH_H_INCLUDED
-/*! \file gim_math.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "LinearMath/btScalar.h"
-
-#define GREAL btScalar
-#define GREAL2 double
-#define GINT int
-#define GUINT unsigned int
-#define GSHORT short
-#define GUSHORT unsigned short
-#define GINT64 long long
-#define GUINT64 unsigned long long
-
-#define G_PI 3.14159265358979f
-#define G_HALF_PI 1.5707963f
-//267948966
-#define G_TWO_PI 6.28318530f
-//71795864
-#define G_ROOT3 1.73205f
-#define G_ROOT2 1.41421f
-#define G_UINT_INFINITY 0xffffffff //!< A very very high value
-#define G_REAL_INFINITY FLT_MAX
-#define G_SIGN_BITMASK 0x80000000
-#define G_EPSILON SIMD_EPSILON
-
-enum GIM_SCALAR_TYPES
-{
- G_STYPE_REAL = 0,
- G_STYPE_REAL2,
- G_STYPE_SHORT,
- G_STYPE_USHORT,
- G_STYPE_INT,
- G_STYPE_UINT,
- G_STYPE_INT64,
- G_STYPE_UINT64
-};
-
-#define G_DEGTORAD(X) ((X)*3.1415926f / 180.0f)
-#define G_RADTODEG(X) ((X)*180.0f / 3.1415926f)
-
-//! Integer representation of a floating-point value.
-#define GIM_IR(x) ((GUINT&)(x))
-
-//! Signed integer representation of a floating-point value.
-#define GIM_SIR(x) ((GINT&)(x))
-
-//! Absolute integer representation of a floating-point value
-#define GIM_AIR(x) (GIM_IR(x) & 0x7fffffff)
-
-//! Floating-point representation of an integer value.
-#define GIM_FR(x) ((GREAL&)(x))
-
-#define GIM_MAX(a, b) (a < b ? b : a)
-#define GIM_MIN(a, b) (a > b ? b : a)
-
-#define GIM_MAX3(a, b, c) GIM_MAX(a, GIM_MAX(b, c))
-#define GIM_MIN3(a, b, c) GIM_MIN(a, GIM_MIN(b, c))
-
-#define GIM_IS_ZERO(value) (value < G_EPSILON && value > -G_EPSILON)
-
-#define GIM_IS_NEGATIVE(value) (value <= -G_EPSILON)
-
-#define GIM_IS_POSISITVE(value) (value >= G_EPSILON)
-
-#define GIM_NEAR_EQUAL(v1, v2) GIM_IS_ZERO((v1 - v2))
-
-///returns a clamped number
-#define GIM_CLAMP(number, minval, maxval) (number < minval ? minval : (number > maxval ? maxval : number))
-
-#define GIM_GREATER(x, y) btFabs(x) > (y)
-
-///Swap numbers
-#define GIM_SWAP_NUMBERS(a, b) \
- { \
- a = a + b; \
- b = a - b; \
- a = a - b; \
- }
-
-#define GIM_INV_SQRT(va, isva) \
- { \
- if (va <= 0.0000001f) \
- { \
- isva = G_REAL_INFINITY; \
- } \
- else \
- { \
- GREAL _x = va * 0.5f; \
- GUINT _y = 0x5f3759df - (GIM_IR(va) >> 1); \
- isva = GIM_FR(_y); \
- isva = isva * (1.5f - (_x * isva * isva)); \
- } \
- }
-
-#define GIM_SQRT(va, sva) \
- { \
- GIM_INV_SQRT(va, sva); \
- sva = 1.0f / sva; \
- }
-
-//! Computes 1.0f / sqrtf(x). Comes from Quake3. See http://www.magic-software.com/3DGEDInvSqrt.html
-inline GREAL gim_inv_sqrt(GREAL f)
-{
- GREAL r;
- GIM_INV_SQRT(f, r);
- return r;
-}
-
-inline GREAL gim_sqrt(GREAL f)
-{
- GREAL r;
- GIM_SQRT(f, r);
- return r;
-}
-
-#endif // GIM_MATH_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_memory.cpp b/thirdparty/bullet/BulletCollision/Gimpact/gim_memory.cpp
deleted file mode 100644
index 9e29ab91d6..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_memory.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_memory.h"
-#include "stdlib.h"
-
-#ifdef GIM_SIMD_MEMORY
-#include "LinearMath/btAlignedAllocator.h"
-#endif
-
-static gim_alloc_function *g_allocfn = 0;
-static gim_alloca_function *g_allocafn = 0;
-static gim_realloc_function *g_reallocfn = 0;
-static gim_free_function *g_freefn = 0;
-
-void gim_set_alloc_handler(gim_alloc_function *fn)
-{
- g_allocfn = fn;
-}
-
-void gim_set_alloca_handler(gim_alloca_function *fn)
-{
- g_allocafn = fn;
-}
-
-void gim_set_realloc_handler(gim_realloc_function *fn)
-{
- g_reallocfn = fn;
-}
-
-void gim_set_free_handler(gim_free_function *fn)
-{
- g_freefn = fn;
-}
-
-gim_alloc_function *gim_get_alloc_handler()
-{
- return g_allocfn;
-}
-
-gim_alloca_function *gim_get_alloca_handler()
-{
- return g_allocafn;
-}
-
-gim_realloc_function *gim_get_realloc_handler()
-{
- return g_reallocfn;
-}
-
-gim_free_function *gim_get_free_handler()
-{
- return g_freefn;
-}
-
-void *gim_alloc(size_t size)
-{
- void *ptr;
- if (g_allocfn)
- {
- ptr = g_allocfn(size);
- }
- else
- {
-#ifdef GIM_SIMD_MEMORY
- ptr = btAlignedAlloc(size, 16);
-#else
- ptr = malloc(size);
-#endif
- }
- return ptr;
-}
-
-void *gim_alloca(size_t size)
-{
- if (g_allocafn)
- return g_allocafn(size);
- else
- return gim_alloc(size);
-}
-
-void *gim_realloc(void *ptr, size_t oldsize, size_t newsize)
-{
- void *newptr = gim_alloc(newsize);
- size_t copysize = oldsize < newsize ? oldsize : newsize;
- gim_simd_memcpy(newptr, ptr, copysize);
- gim_free(ptr);
- return newptr;
-}
-
-void gim_free(void *ptr)
-{
- if (!ptr) return;
- if (g_freefn)
- {
- g_freefn(ptr);
- }
- else
- {
-#ifdef GIM_SIMD_MEMORY
- btAlignedFree(ptr);
-#else
- free(ptr);
-#endif
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_memory.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_memory.h
deleted file mode 100644
index fffbfa23d8..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_memory.h
+++ /dev/null
@@ -1,177 +0,0 @@
-#ifndef GIM_MEMORY_H_INCLUDED
-#define GIM_MEMORY_H_INCLUDED
-/*! \file gim_memory.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_math.h"
-#include <string.h>
-
-#ifdef PREFETCH
-#include <xmmintrin.h> // for prefetch
-#define pfval 64
-#define pfval2 128
-//! Prefetch 64
-#define pf(_x, _i) _mm_prefetch((void *)(_x + _i + pfval), 0)
-//! Prefetch 128
-#define pf2(_x, _i) _mm_prefetch((void *)(_x + _i + pfval2), 0)
-#else
-//! Prefetch 64
-#define pf(_x, _i)
-//! Prefetch 128
-#define pf2(_x, _i)
-#endif
-
-///Functions for manip packed arrays of numbers
-#define GIM_COPY_ARRAYS(dest_array, source_array, element_count) \
- { \
- for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \
- { \
- dest_array[_i_] = source_array[_i_]; \
- } \
- }
-
-#define GIM_COPY_ARRAYS_1(dest_array, source_array, element_count, copy_macro) \
- { \
- for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \
- { \
- copy_macro(dest_array[_i_], source_array[_i_]); \
- } \
- }
-
-#define GIM_ZERO_ARRAY(array, element_count) \
- { \
- for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \
- { \
- array[_i_] = 0; \
- } \
- }
-
-#define GIM_CONSTANT_ARRAY(array, element_count, constant) \
- { \
- for (GUINT _i_ = 0; _i_ < element_count; ++_i_) \
- { \
- array[_i_] = constant; \
- } \
- }
-
-///Function prototypes to allocate and free memory.
-typedef void *gim_alloc_function(size_t size);
-typedef void *gim_alloca_function(size_t size); //Allocs on the heap
-typedef void *gim_realloc_function(void *ptr, size_t oldsize, size_t newsize);
-typedef void gim_free_function(void *ptr);
-
-///Memory Function Handlers
-///set new memory management functions. if fn is 0, the default handlers are used.
-void gim_set_alloc_handler(gim_alloc_function *fn);
-void gim_set_alloca_handler(gim_alloca_function *fn);
-void gim_set_realloc_handler(gim_realloc_function *fn);
-void gim_set_free_handler(gim_free_function *fn);
-
-///get current memory management functions.
-gim_alloc_function *gim_get_alloc_handler(void);
-gim_alloca_function *gim_get_alloca_handler(void);
-gim_realloc_function *gim_get_realloc_handler(void);
-gim_free_function *gim_get_free_handler(void);
-
-///Standar Memory functions
-void *gim_alloc(size_t size);
-void *gim_alloca(size_t size);
-void *gim_realloc(void *ptr, size_t oldsize, size_t newsize);
-void gim_free(void *ptr);
-
-#if defined(_WIN32) && !defined(__MINGW32__) && !defined(__CYGWIN__)
-#define GIM_SIMD_MEMORY 1
-#endif
-
-//! SIMD POINTER INTEGER
-#define SIMD_T GUINT64
-//! SIMD INTEGER SIZE
-#define SIMD_T_SIZE sizeof(SIMD_T)
-
-inline void gim_simd_memcpy(void *dst, const void *src, size_t copysize)
-{
-#ifdef GIM_SIMD_MEMORY
- /*
-//'long long int' is incompatible with visual studio 6...
- //copy words
- SIMD_T * ui_src_ptr = (SIMD_T *)src;
- SIMD_T * ui_dst_ptr = (SIMD_T *)dst;
- while(copysize>=SIMD_T_SIZE)
- {
- *(ui_dst_ptr++) = *(ui_src_ptr++);
- copysize-=SIMD_T_SIZE;
- }
- if(copysize==0) return;
-*/
-
- char *c_src_ptr = (char *)src;
- char *c_dst_ptr = (char *)dst;
- while (copysize > 0)
- {
- *(c_dst_ptr++) = *(c_src_ptr++);
- copysize--;
- }
- return;
-#else
- memcpy(dst, src, copysize);
-#endif
-}
-
-template <class T>
-inline void gim_swap_elements(T *_array, size_t _i, size_t _j)
-{
- T _e_tmp_ = _array[_i];
- _array[_i] = _array[_j];
- _array[_j] = _e_tmp_;
-}
-
-template <class T>
-inline void gim_swap_elements_memcpy(T *_array, size_t _i, size_t _j)
-{
- char _e_tmp_[sizeof(T)];
- gim_simd_memcpy(_e_tmp_, &_array[_i], sizeof(T));
- gim_simd_memcpy(&_array[_i], &_array[_j], sizeof(T));
- gim_simd_memcpy(&_array[_j], _e_tmp_, sizeof(T));
-}
-
-template <int SIZE>
-inline void gim_swap_elements_ptr(char *_array, size_t _i, size_t _j)
-{
- char _e_tmp_[SIZE];
- _i *= SIZE;
- _j *= SIZE;
- gim_simd_memcpy(_e_tmp_, _array + _i, SIZE);
- gim_simd_memcpy(_array + _i, _array + _j, SIZE);
- gim_simd_memcpy(_array + _j, _e_tmp_, SIZE);
-}
-
-#endif // GIM_MEMORY_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_pair.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_pair.h
deleted file mode 100644
index 56c185a5dc..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_pair.h
+++ /dev/null
@@ -1,28 +0,0 @@
-#ifndef GIM_PAIR_H
-#define GIM_PAIR_H
-
-
-//! Overlapping pair
-struct GIM_PAIR
-{
- int m_index1;
- int m_index2;
- GIM_PAIR()
- {
- }
-
- GIM_PAIR(const GIM_PAIR& p)
- {
- m_index1 = p.m_index1;
- m_index2 = p.m_index2;
- }
-
- GIM_PAIR(int index1, int index2)
- {
- m_index1 = index1;
- m_index2 = index2;
- }
-};
-
-#endif //GIM_PAIR_H
-
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_radixsort.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_radixsort.h
deleted file mode 100644
index ff7907adca..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_radixsort.h
+++ /dev/null
@@ -1,386 +0,0 @@
-#ifndef GIM_RADIXSORT_H_INCLUDED
-#define GIM_RADIXSORT_H_INCLUDED
-/*! \file gim_radixsort.h
-\author Francisco Leon Najera.
-Based on the work of Michael Herf : "fast floating-point radix sort"
-Avaliable on http://www.stereopsis.com/radix.html
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_memory.h"
-
-///Macros for sorting.
-//! Prototype for comparators
-class less_comparator
-{
-public:
- template <class T, class Z>
- inline int operator()(const T& a, const Z& b)
- {
- return (a < b ? -1 : (a > b ? 1 : 0));
- }
-};
-
-//! Prototype for comparators
-class integer_comparator
-{
-public:
- template <class T>
- inline int operator()(const T& a, const T& b)
- {
- return (int)(a - b);
- }
-};
-
-//!Prototype for getting the integer representation of an object
-class uint_key_func
-{
-public:
- template <class T>
- inline GUINT operator()(const T& a)
- {
- return (GUINT)a;
- }
-};
-
-//!Prototype for copying elements
-class copy_elements_func
-{
-public:
- template <class T>
- inline void operator()(T& a, T& b)
- {
- a = b;
- }
-};
-
-//!Prototype for copying elements
-class memcopy_elements_func
-{
-public:
- template <class T>
- inline void operator()(T& a, T& b)
- {
- gim_simd_memcpy(&a, &b, sizeof(T));
- }
-};
-
-//! @{
-struct GIM_RSORT_TOKEN
-{
- GUINT m_key;
- GUINT m_value;
- GIM_RSORT_TOKEN()
- {
- }
- GIM_RSORT_TOKEN(const GIM_RSORT_TOKEN& rtoken)
- {
- m_key = rtoken.m_key;
- m_value = rtoken.m_value;
- }
-
- inline bool operator<(const GIM_RSORT_TOKEN& other) const
- {
- return (m_key < other.m_key);
- }
-
- inline bool operator>(const GIM_RSORT_TOKEN& other) const
- {
- return (m_key > other.m_key);
- }
-};
-
-//! Prototype for comparators
-class GIM_RSORT_TOKEN_COMPARATOR
-{
-public:
- inline int operator()(const GIM_RSORT_TOKEN& a, const GIM_RSORT_TOKEN& b)
- {
- return (int)((a.m_key) - (b.m_key));
- }
-};
-
-#define kHist 2048
-// ---- utils for accessing 11-bit quantities
-#define D11_0(x) (x & 0x7FF)
-#define D11_1(x) (x >> 11 & 0x7FF)
-#define D11_2(x) (x >> 22)
-
-///Radix sort for unsigned integer keys
-inline void gim_radix_sort_rtokens(
- GIM_RSORT_TOKEN* array,
- GIM_RSORT_TOKEN* sorted, GUINT element_count)
-{
- GUINT i;
- GUINT b0[kHist * 3];
- GUINT* b1 = b0 + kHist;
- GUINT* b2 = b1 + kHist;
- for (i = 0; i < kHist * 3; ++i)
- {
- b0[i] = 0;
- }
- GUINT fi;
- GUINT pos;
- for (i = 0; i < element_count; ++i)
- {
- fi = array[i].m_key;
- b0[D11_0(fi)]++;
- b1[D11_1(fi)]++;
- b2[D11_2(fi)]++;
- }
- {
- GUINT sum0 = 0, sum1 = 0, sum2 = 0;
- GUINT tsum;
- for (i = 0; i < kHist; ++i)
- {
- tsum = b0[i] + sum0;
- b0[i] = sum0 - 1;
- sum0 = tsum;
- tsum = b1[i] + sum1;
- b1[i] = sum1 - 1;
- sum1 = tsum;
- tsum = b2[i] + sum2;
- b2[i] = sum2 - 1;
- sum2 = tsum;
- }
- }
- for (i = 0; i < element_count; ++i)
- {
- fi = array[i].m_key;
- pos = D11_0(fi);
- pos = ++b0[pos];
- sorted[pos].m_key = array[i].m_key;
- sorted[pos].m_value = array[i].m_value;
- }
- for (i = 0; i < element_count; ++i)
- {
- fi = sorted[i].m_key;
- pos = D11_1(fi);
- pos = ++b1[pos];
- array[pos].m_key = sorted[i].m_key;
- array[pos].m_value = sorted[i].m_value;
- }
- for (i = 0; i < element_count; ++i)
- {
- fi = array[i].m_key;
- pos = D11_2(fi);
- pos = ++b2[pos];
- sorted[pos].m_key = array[i].m_key;
- sorted[pos].m_value = array[i].m_value;
- }
-}
-
-/// Get the sorted tokens from an array. For generic use. Tokens are IRR_RSORT_TOKEN
-/*!
-*\param array Array of elements to sort
-*\param sorted_tokens Tokens of sorted elements
-*\param element_count element count
-*\param uintkey_macro Functor which retrieves the integer representation of an array element
-*/
-template <typename T, class GETKEY_CLASS>
-void gim_radix_sort_array_tokens(
- T* array,
- GIM_RSORT_TOKEN* sorted_tokens,
- GUINT element_count, GETKEY_CLASS uintkey_macro)
-{
- GIM_RSORT_TOKEN* _unsorted = (GIM_RSORT_TOKEN*)gim_alloc(sizeof(GIM_RSORT_TOKEN) * element_count);
- for (GUINT _i = 0; _i < element_count; ++_i)
- {
- _unsorted[_i].m_key = uintkey_macro(array[_i]);
- _unsorted[_i].m_value = _i;
- }
- gim_radix_sort_rtokens(_unsorted, sorted_tokens, element_count);
- gim_free(_unsorted);
- gim_free(_unsorted);
-}
-
-/// Sorts array in place. For generic use
-/*!
-\param type Type of the array
-\param array
-\param element_count
-\param get_uintkey_macro Macro for extract the Integer value of the element. Similar to SIMPLE_GET_UINTKEY
-\param copy_elements_macro Macro for copy elements, similar to SIMPLE_COPY_ELEMENTS
-*/
-template <typename T, class GETKEY_CLASS, class COPY_CLASS>
-void gim_radix_sort(
- T* array, GUINT element_count,
- GETKEY_CLASS get_uintkey_macro, COPY_CLASS copy_elements_macro)
-{
- GIM_RSORT_TOKEN* _sorted = (GIM_RSORT_TOKEN*)gim_alloc(sizeof(GIM_RSORT_TOKEN) * element_count);
- gim_radix_sort_array_tokens(array, _sorted, element_count, get_uintkey_macro);
- T* _original_array = (T*)gim_alloc(sizeof(T) * element_count);
- gim_simd_memcpy(_original_array, array, sizeof(T) * element_count);
- for (GUINT _i = 0; _i < element_count; ++_i)
- {
- copy_elements_macro(array[_i], _original_array[_sorted[_i].m_value]);
- }
- gim_free(_original_array);
- gim_free(_sorted);
-}
-
-//! Failsafe Iterative binary search,
-/*!
-If the element is not found, it returns the nearest upper element position, may be the further position after the last element.
-\param _array
-\param _start_i the beginning of the array
-\param _end_i the ending index of the array
-\param _search_key Value to find
-\param _comp_macro macro for comparing elements
-\param _found If true the value has found. Boolean
-\param _result_index the index of the found element, or if not found then it will get the index of the closest bigger value
-*/
-template <class T, typename KEYCLASS, typename COMP_CLASS>
-bool gim_binary_search_ex(
- const T* _array, GUINT _start_i,
- GUINT _end_i, GUINT& _result_index,
- const KEYCLASS& _search_key,
- COMP_CLASS _comp_macro)
-{
- GUINT _k;
- int _comp_result;
- GUINT _i = _start_i;
- GUINT _j = _end_i + 1;
- while (_i < _j)
- {
- _k = (_j + _i - 1) / 2;
- _comp_result = _comp_macro(_array[_k], _search_key);
- if (_comp_result == 0)
- {
- _result_index = _k;
- return true;
- }
- else if (_comp_result < 0)
- {
- _i = _k + 1;
- }
- else
- {
- _j = _k;
- }
- }
- _result_index = _i;
- return false;
-}
-
-//! Failsafe Iterative binary search,Template version
-/*!
-If the element is not found, it returns the nearest upper element position, may be the further position after the last element.
-\param _array
-\param _start_i the beginning of the array
-\param _end_i the ending index of the array
-\param _search_key Value to find
-\param _result_index the index of the found element, or if not found then it will get the index of the closest bigger value
-\return true if found, else false
-*/
-template <class T>
-bool gim_binary_search(
- const T* _array, GUINT _start_i,
- GUINT _end_i, const T& _search_key,
- GUINT& _result_index)
-{
- GUINT _i = _start_i;
- GUINT _j = _end_i + 1;
- GUINT _k;
- while (_i < _j)
- {
- _k = (_j + _i - 1) / 2;
- if (_array[_k] == _search_key)
- {
- _result_index = _k;
- return true;
- }
- else if (_array[_k] < _search_key)
- {
- _i = _k + 1;
- }
- else
- {
- _j = _k;
- }
- }
- _result_index = _i;
- return false;
-}
-
-///heap sort from http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Heap/
-template <typename T, typename COMP_CLASS>
-void gim_down_heap(T* pArr, GUINT k, GUINT n, COMP_CLASS CompareFunc)
-{
- /* PRE: a[k+1..N] is a heap */
- /* POST: a[k..N] is a heap */
-
- T temp = pArr[k - 1];
- /* k has child(s) */
- while (k <= n / 2)
- {
- int child = 2 * k;
-
- if ((child < (int)n) && CompareFunc(pArr[child - 1], pArr[child]) < 0)
- {
- child++;
- }
- /* pick larger child */
- if (CompareFunc(temp, pArr[child - 1]) < 0)
- {
- /* move child up */
- pArr[k - 1] = pArr[child - 1];
- k = child;
- }
- else
- {
- break;
- }
- }
- pArr[k - 1] = temp;
-} /*downHeap*/
-
-template <typename T, typename COMP_CLASS>
-void gim_heap_sort(T* pArr, GUINT element_count, COMP_CLASS CompareFunc)
-{
- /* sort a[0..N-1], N.B. 0 to N-1 */
- GUINT k;
- GUINT n = element_count;
- for (k = n / 2; k > 0; k--)
- {
- gim_down_heap(pArr, k, n, CompareFunc);
- }
-
- /* a[1..N] is now a heap */
- while (n >= 2)
- {
- gim_swap_elements(pArr, 0, n - 1); /* largest of a[0..n-1] */
- --n;
- /* restore a[1..i-1] heap */
- gim_down_heap(pArr, 1, n, CompareFunc);
- }
-}
-
-#endif // GIM_RADIXSORT_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.cpp b/thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.cpp
deleted file mode 100644
index 8d83e95da4..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.cpp
+++ /dev/null
@@ -1,619 +0,0 @@
-
-/*! \file gim_tri_collision.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_tri_collision.h"
-
-#define TRI_LOCAL_EPSILON 0.000001f
-#define MIN_EDGE_EDGE_DIS 0.00001f
-
-class GIM_TRIANGLE_CALCULATION_CACHE
-{
-public:
- GREAL margin;
- btVector3 tu_vertices[3];
- btVector3 tv_vertices[3];
- btVector4 tu_plane;
- btVector4 tv_plane;
- btVector3 closest_point_u;
- btVector3 closest_point_v;
- btVector3 edge_edge_dir;
- btVector3 distances;
- GREAL du[4];
- GREAL du0du1;
- GREAL du0du2;
- GREAL dv[4];
- GREAL dv0dv1;
- GREAL dv0dv2;
- btVector3 temp_points[MAX_TRI_CLIPPING];
- btVector3 temp_points1[MAX_TRI_CLIPPING];
- btVector3 contact_points[MAX_TRI_CLIPPING];
-
- //! if returns false, the faces are paralele
- SIMD_FORCE_INLINE bool compute_intervals(
- const GREAL &D0,
- const GREAL &D1,
- const GREAL &D2,
- const GREAL &D0D1,
- const GREAL &D0D2,
- GREAL &scale_edge0,
- GREAL &scale_edge1,
- GUINT &edge_index0,
- GUINT &edge_index1)
- {
- if (D0D1 > 0.0f)
- {
- /* here we know that D0D2<=0.0 */
- /* that is D0, D1 are on the same side, D2 on the other or on the plane */
- scale_edge0 = -D2 / (D0 - D2);
- scale_edge1 = -D1 / (D2 - D1);
- edge_index0 = 2;
- edge_index1 = 1;
- }
- else if (D0D2 > 0.0f)
- {
- /* here we know that d0d1<=0.0 */
- scale_edge0 = -D0 / (D1 - D0);
- scale_edge1 = -D1 / (D2 - D1);
- edge_index0 = 0;
- edge_index1 = 1;
- }
- else if (D1 * D2 > 0.0f || D0 != 0.0f)
- {
- /* here we know that d0d1<=0.0 or that D0!=0.0 */
- scale_edge0 = -D0 / (D1 - D0);
- scale_edge1 = -D2 / (D0 - D2);
- edge_index0 = 0;
- edge_index1 = 2;
- }
- else
- {
- return false;
- }
- return true;
- }
-
- //! clip triangle
- /*!
- */
- SIMD_FORCE_INLINE GUINT clip_triangle(
- const btVector4 &tri_plane,
- const btVector3 *tripoints,
- const btVector3 *srcpoints,
- btVector3 *clip_points)
- {
- // edge 0
-
- btVector4 edgeplane;
-
- EDGE_PLANE(tripoints[0], tripoints[1], tri_plane, edgeplane);
-
- GUINT clipped_count = PLANE_CLIP_TRIANGLE3D(
- edgeplane, srcpoints[0], srcpoints[1], srcpoints[2], temp_points);
-
- if (clipped_count == 0) return 0;
-
- // edge 1
-
- EDGE_PLANE(tripoints[1], tripoints[2], tri_plane, edgeplane);
-
- clipped_count = PLANE_CLIP_POLYGON3D(
- edgeplane, temp_points, clipped_count, temp_points1);
-
- if (clipped_count == 0) return 0;
-
- // edge 2
-
- EDGE_PLANE(tripoints[2], tripoints[0], tri_plane, edgeplane);
-
- clipped_count = PLANE_CLIP_POLYGON3D(
- edgeplane, temp_points1, clipped_count, clip_points);
-
- return clipped_count;
-
- /*GUINT i0 = (tri_plane.closestAxis()+1)%3;
- GUINT i1 = (i0+1)%3;
- // edge 0
- btVector3 temp_points[MAX_TRI_CLIPPING];
- btVector3 temp_points1[MAX_TRI_CLIPPING];
-
- GUINT clipped_count= PLANE_CLIP_TRIANGLE_GENERIC(
- 0,srcpoints[0],srcpoints[1],srcpoints[2],temp_points,
- DISTANCE_EDGE(tripoints[0],tripoints[1],i0,i1));
-
-
- if(clipped_count == 0) return 0;
-
- // edge 1
- clipped_count = PLANE_CLIP_POLYGON_GENERIC(
- 0,temp_points,clipped_count,temp_points1,
- DISTANCE_EDGE(tripoints[1],tripoints[2],i0,i1));
-
- if(clipped_count == 0) return 0;
-
- // edge 2
- clipped_count = PLANE_CLIP_POLYGON_GENERIC(
- 0,temp_points1,clipped_count,clipped_points,
- DISTANCE_EDGE(tripoints[2],tripoints[0],i0,i1));
-
- return clipped_count;*/
- }
-
- SIMD_FORCE_INLINE void sort_isect(
- GREAL &isect0, GREAL &isect1, GUINT &e0, GUINT &e1, btVector3 &vec0, btVector3 &vec1)
- {
- if (isect1 < isect0)
- {
- //swap
- GIM_SWAP_NUMBERS(isect0, isect1);
- GIM_SWAP_NUMBERS(e0, e1);
- btVector3 tmp = vec0;
- vec0 = vec1;
- vec1 = tmp;
- }
- }
-
- //! Test verifying interval intersection with the direction between planes
- /*!
- \pre tv_plane and tu_plane must be set
- \post
- distances[2] is set with the distance
- closest_point_u, closest_point_v, edge_edge_dir are set too
- \return
- - 0: faces are paralele
- - 1: face U casts face V
- - 2: face V casts face U
- - 3: nearest edges
- */
- SIMD_FORCE_INLINE GUINT cross_line_intersection_test()
- {
- // Compute direction of intersection line
- edge_edge_dir = tu_plane.cross(tv_plane);
- GREAL Dlen;
- VEC_LENGTH(edge_edge_dir, Dlen);
-
- if (Dlen < 0.0001)
- {
- return 0; //faces near paralele
- }
-
- edge_edge_dir *= 1 / Dlen; //normalize
-
- // Compute interval for triangle 1
- GUINT tu_e0, tu_e1; //edge indices
- GREAL tu_scale_e0, tu_scale_e1; //edge scale
- if (!compute_intervals(du[0], du[1], du[2],
- du0du1, du0du2, tu_scale_e0, tu_scale_e1, tu_e0, tu_e1)) return 0;
-
- // Compute interval for triangle 2
- GUINT tv_e0, tv_e1; //edge indices
- GREAL tv_scale_e0, tv_scale_e1; //edge scale
-
- if (!compute_intervals(dv[0], dv[1], dv[2],
- dv0dv1, dv0dv2, tv_scale_e0, tv_scale_e1, tv_e0, tv_e1)) return 0;
-
- //proyected vertices
- btVector3 up_e0 = tu_vertices[tu_e0].lerp(tu_vertices[(tu_e0 + 1) % 3], tu_scale_e0);
- btVector3 up_e1 = tu_vertices[tu_e1].lerp(tu_vertices[(tu_e1 + 1) % 3], tu_scale_e1);
-
- btVector3 vp_e0 = tv_vertices[tv_e0].lerp(tv_vertices[(tv_e0 + 1) % 3], tv_scale_e0);
- btVector3 vp_e1 = tv_vertices[tv_e1].lerp(tv_vertices[(tv_e1 + 1) % 3], tv_scale_e1);
-
- //proyected intervals
- GREAL isect_u[] = {up_e0.dot(edge_edge_dir), up_e1.dot(edge_edge_dir)};
- GREAL isect_v[] = {vp_e0.dot(edge_edge_dir), vp_e1.dot(edge_edge_dir)};
-
- sort_isect(isect_u[0], isect_u[1], tu_e0, tu_e1, up_e0, up_e1);
- sort_isect(isect_v[0], isect_v[1], tv_e0, tv_e1, vp_e0, vp_e1);
-
- const GREAL midpoint_u = 0.5f * (isect_u[0] + isect_u[1]); // midpoint
- const GREAL midpoint_v = 0.5f * (isect_v[0] + isect_v[1]); // midpoint
-
- if (midpoint_u < midpoint_v)
- {
- if (isect_u[1] >= isect_v[1]) // face U casts face V
- {
- return 1;
- }
- else if (isect_v[0] <= isect_u[0]) // face V casts face U
- {
- return 2;
- }
- // closest points
- closest_point_u = up_e1;
- closest_point_v = vp_e0;
- // calc edges and separation
-
- if (isect_u[1] + MIN_EDGE_EDGE_DIS < isect_v[0]) //calc distance between two lines instead
- {
- SEGMENT_COLLISION(
- tu_vertices[tu_e1], tu_vertices[(tu_e1 + 1) % 3],
- tv_vertices[tv_e0], tv_vertices[(tv_e0 + 1) % 3],
- closest_point_u,
- closest_point_v);
-
- edge_edge_dir = closest_point_u - closest_point_v;
- VEC_LENGTH(edge_edge_dir, distances[2]);
- edge_edge_dir *= 1.0f / distances[2]; // normalize
- }
- else
- {
- distances[2] = isect_v[0] - isect_u[1]; //distance negative
- //edge_edge_dir *= -1.0f; //normal pointing from V to U
- }
- }
- else
- {
- if (isect_v[1] >= isect_u[1]) // face V casts face U
- {
- return 2;
- }
- else if (isect_u[0] <= isect_v[0]) // face U casts face V
- {
- return 1;
- }
- // closest points
- closest_point_u = up_e0;
- closest_point_v = vp_e1;
- // calc edges and separation
-
- if (isect_v[1] + MIN_EDGE_EDGE_DIS < isect_u[0]) //calc distance between two lines instead
- {
- SEGMENT_COLLISION(
- tu_vertices[tu_e0], tu_vertices[(tu_e0 + 1) % 3],
- tv_vertices[tv_e1], tv_vertices[(tv_e1 + 1) % 3],
- closest_point_u,
- closest_point_v);
-
- edge_edge_dir = closest_point_u - closest_point_v;
- VEC_LENGTH(edge_edge_dir, distances[2]);
- edge_edge_dir *= 1.0f / distances[2]; // normalize
- }
- else
- {
- distances[2] = isect_u[0] - isect_v[1]; //distance negative
- //edge_edge_dir *= -1.0f; //normal pointing from V to U
- }
- }
- return 3;
- }
-
- //! collides by two sides
- SIMD_FORCE_INLINE bool triangle_collision(
- const btVector3 &u0,
- const btVector3 &u1,
- const btVector3 &u2,
- GREAL margin_u,
- const btVector3 &v0,
- const btVector3 &v1,
- const btVector3 &v2,
- GREAL margin_v,
- GIM_TRIANGLE_CONTACT_DATA &contacts)
- {
- margin = margin_u + margin_v;
-
- tu_vertices[0] = u0;
- tu_vertices[1] = u1;
- tu_vertices[2] = u2;
-
- tv_vertices[0] = v0;
- tv_vertices[1] = v1;
- tv_vertices[2] = v2;
-
- //create planes
- // plane v vs U points
-
- TRIANGLE_PLANE(tv_vertices[0], tv_vertices[1], tv_vertices[2], tv_plane);
-
- du[0] = DISTANCE_PLANE_POINT(tv_plane, tu_vertices[0]);
- du[1] = DISTANCE_PLANE_POINT(tv_plane, tu_vertices[1]);
- du[2] = DISTANCE_PLANE_POINT(tv_plane, tu_vertices[2]);
-
- du0du1 = du[0] * du[1];
- du0du2 = du[0] * du[2];
-
- if (du0du1 > 0.0f && du0du2 > 0.0f) // same sign on all of them + not equal 0 ?
- {
- if (du[0] < 0) //we need test behind the triangle plane
- {
- distances[0] = GIM_MAX3(du[0], du[1], du[2]);
- distances[0] = -distances[0];
- if (distances[0] > margin) return false; //never intersect
-
- //reorder triangle v
- VEC_SWAP(tv_vertices[0], tv_vertices[1]);
- VEC_SCALE_4(tv_plane, -1.0f, tv_plane);
- }
- else
- {
- distances[0] = GIM_MIN3(du[0], du[1], du[2]);
- if (distances[0] > margin) return false; //never intersect
- }
- }
- else
- {
- //Look if we need to invert the triangle
- distances[0] = (du[0] + du[1] + du[2]) / 3.0f; //centroid
-
- if (distances[0] < 0.0f)
- {
- //reorder triangle v
- VEC_SWAP(tv_vertices[0], tv_vertices[1]);
- VEC_SCALE_4(tv_plane, -1.0f, tv_plane);
-
- distances[0] = GIM_MAX3(du[0], du[1], du[2]);
- distances[0] = -distances[0];
- }
- else
- {
- distances[0] = GIM_MIN3(du[0], du[1], du[2]);
- }
- }
-
- // plane U vs V points
-
- TRIANGLE_PLANE(tu_vertices[0], tu_vertices[1], tu_vertices[2], tu_plane);
-
- dv[0] = DISTANCE_PLANE_POINT(tu_plane, tv_vertices[0]);
- dv[1] = DISTANCE_PLANE_POINT(tu_plane, tv_vertices[1]);
- dv[2] = DISTANCE_PLANE_POINT(tu_plane, tv_vertices[2]);
-
- dv0dv1 = dv[0] * dv[1];
- dv0dv2 = dv[0] * dv[2];
-
- if (dv0dv1 > 0.0f && dv0dv2 > 0.0f) // same sign on all of them + not equal 0 ?
- {
- if (dv[0] < 0) //we need test behind the triangle plane
- {
- distances[1] = GIM_MAX3(dv[0], dv[1], dv[2]);
- distances[1] = -distances[1];
- if (distances[1] > margin) return false; //never intersect
-
- //reorder triangle u
- VEC_SWAP(tu_vertices[0], tu_vertices[1]);
- VEC_SCALE_4(tu_plane, -1.0f, tu_plane);
- }
- else
- {
- distances[1] = GIM_MIN3(dv[0], dv[1], dv[2]);
- if (distances[1] > margin) return false; //never intersect
- }
- }
- else
- {
- //Look if we need to invert the triangle
- distances[1] = (dv[0] + dv[1] + dv[2]) / 3.0f; //centroid
-
- if (distances[1] < 0.0f)
- {
- //reorder triangle v
- VEC_SWAP(tu_vertices[0], tu_vertices[1]);
- VEC_SCALE_4(tu_plane, -1.0f, tu_plane);
-
- distances[1] = GIM_MAX3(dv[0], dv[1], dv[2]);
- distances[1] = -distances[1];
- }
- else
- {
- distances[1] = GIM_MIN3(dv[0], dv[1], dv[2]);
- }
- }
-
- GUINT bl;
- /* bl = cross_line_intersection_test();
- if(bl==3)
- {
- //take edge direction too
- bl = distances.maxAxis();
- }
- else
- {*/
- bl = 0;
- if (distances[0] < distances[1]) bl = 1;
- //}
-
- if (bl == 2) //edge edge separation
- {
- if (distances[2] > margin) return false;
-
- contacts.m_penetration_depth = -distances[2] + margin;
- contacts.m_points[0] = closest_point_v;
- contacts.m_point_count = 1;
- VEC_COPY(contacts.m_separating_normal, edge_edge_dir);
-
- return true;
- }
-
- //clip face against other
-
- GUINT point_count;
- //TODO
- if (bl == 0) //clip U points against V
- {
- point_count = clip_triangle(tv_plane, tv_vertices, tu_vertices, contact_points);
- if (point_count == 0) return false;
- contacts.merge_points(tv_plane, margin, contact_points, point_count);
- }
- else //clip V points against U
- {
- point_count = clip_triangle(tu_plane, tu_vertices, tv_vertices, contact_points);
- if (point_count == 0) return false;
- contacts.merge_points(tu_plane, margin, contact_points, point_count);
- contacts.m_separating_normal *= -1.f;
- }
- if (contacts.m_point_count == 0) return false;
- return true;
- }
-};
-
-/*class GIM_TRIANGLE_CALCULATION_CACHE
-{
-public:
- GREAL margin;
- GUINT clipped_count;
- btVector3 tu_vertices[3];
- btVector3 tv_vertices[3];
- btVector3 temp_points[MAX_TRI_CLIPPING];
- btVector3 temp_points1[MAX_TRI_CLIPPING];
- btVector3 clipped_points[MAX_TRI_CLIPPING];
- GIM_TRIANGLE_CONTACT_DATA contacts1;
- GIM_TRIANGLE_CONTACT_DATA contacts2;
-
-
- //! clip triangle
- GUINT clip_triangle(
- const btVector4 & tri_plane,
- const btVector3 * tripoints,
- const btVector3 * srcpoints,
- btVector3 * clipped_points)
- {
- // edge 0
-
- btVector4 edgeplane;
-
- EDGE_PLANE(tripoints[0],tripoints[1],tri_plane,edgeplane);
-
- GUINT clipped_count = PLANE_CLIP_TRIANGLE3D(
- edgeplane,srcpoints[0],srcpoints[1],srcpoints[2],temp_points);
-
- if(clipped_count == 0) return 0;
-
- // edge 1
-
- EDGE_PLANE(tripoints[1],tripoints[2],tri_plane,edgeplane);
-
- clipped_count = PLANE_CLIP_POLYGON3D(
- edgeplane,temp_points,clipped_count,temp_points1);
-
- if(clipped_count == 0) return 0;
-
- // edge 2
-
- EDGE_PLANE(tripoints[2],tripoints[0],tri_plane,edgeplane);
-
- clipped_count = PLANE_CLIP_POLYGON3D(
- edgeplane,temp_points1,clipped_count,clipped_points);
-
- return clipped_count;
- }
-
-
-
-
- //! collides only on one side
- bool triangle_collision(
- const btVector3 & u0,
- const btVector3 & u1,
- const btVector3 & u2,
- GREAL margin_u,
- const btVector3 & v0,
- const btVector3 & v1,
- const btVector3 & v2,
- GREAL margin_v,
- GIM_TRIANGLE_CONTACT_DATA & contacts)
- {
-
- margin = margin_u + margin_v;
-
-
- tu_vertices[0] = u0;
- tu_vertices[1] = u1;
- tu_vertices[2] = u2;
-
- tv_vertices[0] = v0;
- tv_vertices[1] = v1;
- tv_vertices[2] = v2;
-
- //create planes
- // plane v vs U points
-
-
- TRIANGLE_PLANE(tv_vertices[0],tv_vertices[1],tv_vertices[2],contacts1.m_separating_normal);
-
- clipped_count = clip_triangle(
- contacts1.m_separating_normal,tv_vertices,tu_vertices,clipped_points);
-
- if(clipped_count == 0 )
- {
- return false;//Reject
- }
-
- //find most deep interval face1
- contacts1.merge_points(contacts1.m_separating_normal,margin,clipped_points,clipped_count);
- if(contacts1.m_point_count == 0) return false; // too far
-
- //Normal pointing to triangle1
- //contacts1.m_separating_normal *= -1.f;
-
- //Clip tri1 by tri2 edges
-
- TRIANGLE_PLANE(tu_vertices[0],tu_vertices[1],tu_vertices[2],contacts2.m_separating_normal);
-
- clipped_count = clip_triangle(
- contacts2.m_separating_normal,tu_vertices,tv_vertices,clipped_points);
-
- if(clipped_count == 0 )
- {
- return false;//Reject
- }
-
- //find most deep interval face1
- contacts2.merge_points(contacts2.m_separating_normal,margin,clipped_points,clipped_count);
- if(contacts2.m_point_count == 0) return false; // too far
-
- contacts2.m_separating_normal *= -1.f;
-
- ////check most dir for contacts
- if(contacts2.m_penetration_depth<contacts1.m_penetration_depth)
- {
- contacts.copy_from(contacts2);
- }
- else
- {
- contacts.copy_from(contacts1);
- }
- return true;
- }
-
-
-};*/
-
-bool GIM_TRIANGLE::collide_triangle_hard_test(
- const GIM_TRIANGLE &other,
- GIM_TRIANGLE_CONTACT_DATA &contact_data) const
-{
- GIM_TRIANGLE_CALCULATION_CACHE calc_cache;
- return calc_cache.triangle_collision(
- m_vertices[0], m_vertices[1], m_vertices[2], m_margin,
- other.m_vertices[0], other.m_vertices[1], other.m_vertices[2], other.m_margin,
- contact_data);
-}
diff --git a/thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.h b/thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.h
deleted file mode 100644
index e6d4bf5470..0000000000
--- a/thirdparty/bullet/BulletCollision/Gimpact/gim_tri_collision.h
+++ /dev/null
@@ -1,368 +0,0 @@
-#ifndef GIM_TRI_COLLISION_H_INCLUDED
-#define GIM_TRI_COLLISION_H_INCLUDED
-
-/*! \file gim_tri_collision.h
-\author Francisco Leon Najera
-*/
-/*
------------------------------------------------------------------------------
-This source file is part of GIMPACT Library.
-
-For the latest info, see http://gimpact.sourceforge.net/
-
-Copyright (c) 2006 Francisco Leon Najera. C.C. 80087371.
-email: projectileman@yahoo.com
-
- This library is free software; you can redistribute it and/or
- modify it under the terms of EITHER:
- (1) The GNU Lesser General Public License as published by the Free
- Software Foundation; either version 2.1 of the License, or (at
- your option) any later version. The text of the GNU Lesser
- General Public License is included with this library in the
- file GIMPACT-LICENSE-LGPL.TXT.
- (2) The BSD-style license that is included with this library in
- the file GIMPACT-LICENSE-BSD.TXT.
- (3) The zlib/libpng license that is included with this library in
- the file GIMPACT-LICENSE-ZLIB.TXT.
-
- This library is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files
- GIMPACT-LICENSE-LGPL.TXT, GIMPACT-LICENSE-ZLIB.TXT and GIMPACT-LICENSE-BSD.TXT for more details.
-
------------------------------------------------------------------------------
-*/
-
-#include "gim_box_collision.h"
-#include "gim_clip_polygon.h"
-
-#ifndef MAX_TRI_CLIPPING
-#define MAX_TRI_CLIPPING 16
-#endif
-
-//! Structure for collision
-struct GIM_TRIANGLE_CONTACT_DATA
-{
- GREAL m_penetration_depth;
- GUINT m_point_count;
- btVector4 m_separating_normal;
- btVector3 m_points[MAX_TRI_CLIPPING];
-
- SIMD_FORCE_INLINE void copy_from(const GIM_TRIANGLE_CONTACT_DATA &other)
- {
- m_penetration_depth = other.m_penetration_depth;
- m_separating_normal = other.m_separating_normal;
- m_point_count = other.m_point_count;
- GUINT i = m_point_count;
- while (i--)
- {
- m_points[i] = other.m_points[i];
- }
- }
-
- GIM_TRIANGLE_CONTACT_DATA()
- {
- }
-
- GIM_TRIANGLE_CONTACT_DATA(const GIM_TRIANGLE_CONTACT_DATA &other)
- {
- copy_from(other);
- }
-
- //! classify points that are closer
- template <typename DISTANCE_FUNC, typename CLASS_PLANE>
- SIMD_FORCE_INLINE void mergepoints_generic(const CLASS_PLANE &plane,
- GREAL margin, const btVector3 *points, GUINT point_count, DISTANCE_FUNC distance_func)
- {
- m_point_count = 0;
- m_penetration_depth = -1000.0f;
-
- GUINT point_indices[MAX_TRI_CLIPPING];
-
- GUINT _k;
-
- for (_k = 0; _k < point_count; _k++)
- {
- GREAL _dist = -distance_func(plane, points[_k]) + margin;
-
- if (_dist >= 0.0f)
- {
- if (_dist > m_penetration_depth)
- {
- m_penetration_depth = _dist;
- point_indices[0] = _k;
- m_point_count = 1;
- }
- else if ((_dist + G_EPSILON) >= m_penetration_depth)
- {
- point_indices[m_point_count] = _k;
- m_point_count++;
- }
- }
- }
-
- for (_k = 0; _k < m_point_count; _k++)
- {
- m_points[_k] = points[point_indices[_k]];
- }
- }
-
- //! classify points that are closer
- SIMD_FORCE_INLINE void merge_points(const btVector4 &plane, GREAL margin,
- const btVector3 *points, GUINT point_count)
- {
- m_separating_normal = plane;
- mergepoints_generic(plane, margin, points, point_count, DISTANCE_PLANE_3D_FUNC());
- }
-};
-
-//! Class for colliding triangles
-class GIM_TRIANGLE
-{
-public:
- btScalar m_margin;
- btVector3 m_vertices[3];
-
- GIM_TRIANGLE() : m_margin(0.1f)
- {
- }
-
- SIMD_FORCE_INLINE GIM_AABB get_box() const
- {
- return GIM_AABB(m_vertices[0], m_vertices[1], m_vertices[2], m_margin);
- }
-
- SIMD_FORCE_INLINE void get_normal(btVector3 &normal) const
- {
- TRIANGLE_NORMAL(m_vertices[0], m_vertices[1], m_vertices[2], normal);
- }
-
- SIMD_FORCE_INLINE void get_plane(btVector4 &plane) const
- {
- TRIANGLE_PLANE(m_vertices[0], m_vertices[1], m_vertices[2], plane);
- ;
- }
-
- SIMD_FORCE_INLINE void apply_transform(const btTransform &trans)
- {
- m_vertices[0] = trans(m_vertices[0]);
- m_vertices[1] = trans(m_vertices[1]);
- m_vertices[2] = trans(m_vertices[2]);
- }
-
- SIMD_FORCE_INLINE void get_edge_plane(GUINT edge_index, const btVector3 &triangle_normal, btVector4 &plane) const
- {
- const btVector3 &e0 = m_vertices[edge_index];
- const btVector3 &e1 = m_vertices[(edge_index + 1) % 3];
- EDGE_PLANE(e0, e1, triangle_normal, plane);
- }
-
- //! Gets the relative transformation of this triangle
- /*!
- The transformation is oriented to the triangle normal , and aligned to the 1st edge of this triangle. The position corresponds to vertice 0:
- - triangle normal corresponds to Z axis.
- - 1st normalized edge corresponds to X axis,
-
- */
- SIMD_FORCE_INLINE void get_triangle_transform(btTransform &triangle_transform) const
- {
- btMatrix3x3 &matrix = triangle_transform.getBasis();
-
- btVector3 zaxis;
- get_normal(zaxis);
- MAT_SET_Z(matrix, zaxis);
-
- btVector3 xaxis = m_vertices[1] - m_vertices[0];
- VEC_NORMALIZE(xaxis);
- MAT_SET_X(matrix, xaxis);
-
- //y axis
- xaxis = zaxis.cross(xaxis);
- MAT_SET_Y(matrix, xaxis);
-
- triangle_transform.setOrigin(m_vertices[0]);
- }
-
- //! Test triangles by finding separating axis
- /*!
- \param other Triangle for collide
- \param contact_data Structure for holding contact points, normal and penetration depth; The normal is pointing toward this triangle from the other triangle
- */
- bool collide_triangle_hard_test(
- const GIM_TRIANGLE &other,
- GIM_TRIANGLE_CONTACT_DATA &contact_data) const;
-
- //! Test boxes before doing hard test
- /*!
- \param other Triangle for collide
- \param contact_data Structure for holding contact points, normal and penetration depth; The normal is pointing toward this triangle from the other triangle
- \
- */
- SIMD_FORCE_INLINE bool collide_triangle(
- const GIM_TRIANGLE &other,
- GIM_TRIANGLE_CONTACT_DATA &contact_data) const
- {
- //test box collisioin
- GIM_AABB boxu(m_vertices[0], m_vertices[1], m_vertices[2], m_margin);
- GIM_AABB boxv(other.m_vertices[0], other.m_vertices[1], other.m_vertices[2], other.m_margin);
- if (!boxu.has_collision(boxv)) return false;
-
- //do hard test
- return collide_triangle_hard_test(other, contact_data);
- }
-
- /*!
-
- Solve the System for u,v parameters:
-
- u*axe1[i1] + v*axe2[i1] = vecproj[i1]
- u*axe1[i2] + v*axe2[i2] = vecproj[i2]
-
- sustitute:
- v = (vecproj[i2] - u*axe1[i2])/axe2[i2]
-
- then the first equation in terms of 'u':
-
- --> u*axe1[i1] + ((vecproj[i2] - u*axe1[i2])/axe2[i2])*axe2[i1] = vecproj[i1]
-
- --> u*axe1[i1] + vecproj[i2]*axe2[i1]/axe2[i2] - u*axe1[i2]*axe2[i1]/axe2[i2] = vecproj[i1]
-
- --> u*(axe1[i1] - axe1[i2]*axe2[i1]/axe2[i2]) = vecproj[i1] - vecproj[i2]*axe2[i1]/axe2[i2]
-
- --> u*((axe1[i1]*axe2[i2] - axe1[i2]*axe2[i1])/axe2[i2]) = (vecproj[i1]*axe2[i2] - vecproj[i2]*axe2[i1])/axe2[i2]
-
- --> u*(axe1[i1]*axe2[i2] - axe1[i2]*axe2[i1]) = vecproj[i1]*axe2[i2] - vecproj[i2]*axe2[i1]
-
- --> u = (vecproj[i1]*axe2[i2] - vecproj[i2]*axe2[i1]) /(axe1[i1]*axe2[i2] - axe1[i2]*axe2[i1])
-
-if 0.0<= u+v <=1.0 then they are inside of triangle
-
- \return false if the point is outside of triangle.This function doesn't take the margin
- */
- SIMD_FORCE_INLINE bool get_uv_parameters(
- const btVector3 &point,
- const btVector3 &tri_plane,
- GREAL &u, GREAL &v) const
- {
- btVector3 _axe1 = m_vertices[1] - m_vertices[0];
- btVector3 _axe2 = m_vertices[2] - m_vertices[0];
- btVector3 _vecproj = point - m_vertices[0];
- GUINT _i1 = (tri_plane.closestAxis() + 1) % 3;
- GUINT _i2 = (_i1 + 1) % 3;
- if (btFabs(_axe2[_i2]) < G_EPSILON)
- {
- u = (_vecproj[_i2] * _axe2[_i1] - _vecproj[_i1] * _axe2[_i2]) / (_axe1[_i2] * _axe2[_i1] - _axe1[_i1] * _axe2[_i2]);
- v = (_vecproj[_i1] - u * _axe1[_i1]) / _axe2[_i1];
- }
- else
- {
- u = (_vecproj[_i1] * _axe2[_i2] - _vecproj[_i2] * _axe2[_i1]) / (_axe1[_i1] * _axe2[_i2] - _axe1[_i2] * _axe2[_i1]);
- v = (_vecproj[_i2] - u * _axe1[_i2]) / _axe2[_i2];
- }
-
- if (u < -G_EPSILON)
- {
- return false;
- }
- else if (v < -G_EPSILON)
- {
- return false;
- }
- else
- {
- btScalar sumuv;
- sumuv = u + v;
- if (sumuv < -G_EPSILON)
- {
- return false;
- }
- else if (sumuv - 1.0f > G_EPSILON)
- {
- return false;
- }
- }
- return true;
- }
-
- //! is point in triangle beam?
- /*!
- Test if point is in triangle, with m_margin tolerance
- */
- SIMD_FORCE_INLINE bool is_point_inside(const btVector3 &point, const btVector3 &tri_normal) const
- {
- //Test with edge 0
- btVector4 edge_plane;
- this->get_edge_plane(0, tri_normal, edge_plane);
- GREAL dist = DISTANCE_PLANE_POINT(edge_plane, point);
- if (dist - m_margin > 0.0f) return false; // outside plane
-
- this->get_edge_plane(1, tri_normal, edge_plane);
- dist = DISTANCE_PLANE_POINT(edge_plane, point);
- if (dist - m_margin > 0.0f) return false; // outside plane
-
- this->get_edge_plane(2, tri_normal, edge_plane);
- dist = DISTANCE_PLANE_POINT(edge_plane, point);
- if (dist - m_margin > 0.0f) return false; // outside plane
- return true;
- }
-
- //! Bidireccional ray collision
- SIMD_FORCE_INLINE bool ray_collision(
- const btVector3 &vPoint,
- const btVector3 &vDir, btVector3 &pout, btVector3 &triangle_normal,
- GREAL &tparam, GREAL tmax = G_REAL_INFINITY)
- {
- btVector4 faceplane;
- {
- btVector3 dif1 = m_vertices[1] - m_vertices[0];
- btVector3 dif2 = m_vertices[2] - m_vertices[0];
- VEC_CROSS(faceplane, dif1, dif2);
- faceplane[3] = m_vertices[0].dot(faceplane);
- }
-
- GUINT res = LINE_PLANE_COLLISION(faceplane, vDir, vPoint, pout, tparam, btScalar(0), tmax);
- if (res == 0) return false;
- if (!is_point_inside(pout, faceplane)) return false;
-
- if (res == 2) //invert normal
- {
- triangle_normal.setValue(-faceplane[0], -faceplane[1], -faceplane[2]);
- }
- else
- {
- triangle_normal.setValue(faceplane[0], faceplane[1], faceplane[2]);
- }
-
- VEC_NORMALIZE(triangle_normal);
-
- return true;
- }
-
- //! one direccion ray collision
- SIMD_FORCE_INLINE bool ray_collision_front_side(
- const btVector3 &vPoint,
- const btVector3 &vDir, btVector3 &pout, btVector3 &triangle_normal,
- GREAL &tparam, GREAL tmax = G_REAL_INFINITY)
- {
- btVector4 faceplane;
- {
- btVector3 dif1 = m_vertices[1] - m_vertices[0];
- btVector3 dif2 = m_vertices[2] - m_vertices[0];
- VEC_CROSS(faceplane, dif1, dif2);
- faceplane[3] = m_vertices[0].dot(faceplane);
- }
-
- GUINT res = LINE_PLANE_COLLISION(faceplane, vDir, vPoint, pout, tparam, btScalar(0), tmax);
- if (res != 1) return false;
-
- if (!is_point_inside(pout, faceplane)) return false;
-
- triangle_normal.setValue(faceplane[0], faceplane[1], faceplane[2]);
-
- VEC_NORMALIZE(triangle_normal);
-
- return true;
- }
-};
-
-#endif // GIM_TRI_COLLISION_H_INCLUDED
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btComputeGjkEpaPenetration.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btComputeGjkEpaPenetration.h
deleted file mode 100644
index 3c82133037..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btComputeGjkEpaPenetration.h
+++ /dev/null
@@ -1,354 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GJK_EPA_PENETATION_CONVEX_COLLISION_H
-#define BT_GJK_EPA_PENETATION_CONVEX_COLLISION_H
-
-#include "LinearMath/btTransform.h" // Note that btVector3 might be double precision...
-#include "btGjkEpa3.h"
-#include "btGjkCollisionDescription.h"
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-
-template <typename btConvexTemplate>
-bool btGjkEpaCalcPenDepth(const btConvexTemplate& a, const btConvexTemplate& b,
- const btGjkCollisionDescription& colDesc,
- btVector3& v, btVector3& wWitnessOnA, btVector3& wWitnessOnB)
-{
- (void)v;
-
- // const btScalar radialmargin(btScalar(0.));
-
- btVector3 guessVector(b.getWorldTransform().getOrigin() - a.getWorldTransform().getOrigin()); //?? why not use the GJK input?
-
- btGjkEpaSolver3::sResults results;
-
- if (btGjkEpaSolver3_Penetration(a, b, guessVector, results))
-
- {
- // debugDraw->drawLine(results.witnesses[1],results.witnesses[1]+results.normal,btVector3(255,0,0));
- //resultOut->addContactPoint(results.normal,results.witnesses[1],-results.depth);
- wWitnessOnA = results.witnesses[0];
- wWitnessOnB = results.witnesses[1];
- v = results.normal;
- return true;
- }
- else
- {
- if (btGjkEpaSolver3_Distance(a, b, guessVector, results))
- {
- wWitnessOnA = results.witnesses[0];
- wWitnessOnB = results.witnesses[1];
- v = results.normal;
- return false;
- }
- }
- return false;
-}
-
-template <typename btConvexTemplate, typename btGjkDistanceTemplate>
-int btComputeGjkEpaPenetration(const btConvexTemplate& a, const btConvexTemplate& b, const btGjkCollisionDescription& colDesc, btVoronoiSimplexSolver& simplexSolver, btGjkDistanceTemplate* distInfo)
-{
- bool m_catchDegeneracies = true;
- btScalar m_cachedSeparatingDistance = 0.f;
-
- btScalar distance = btScalar(0.);
- btVector3 normalInB(btScalar(0.), btScalar(0.), btScalar(0.));
-
- btVector3 pointOnA, pointOnB;
- btTransform localTransA = a.getWorldTransform();
- btTransform localTransB = b.getWorldTransform();
-
- btScalar marginA = a.getMargin();
- btScalar marginB = b.getMargin();
-
- int m_curIter = 0;
- int gGjkMaxIter = colDesc.m_maxGjkIterations; //this is to catch invalid input, perhaps check for #NaN?
- btVector3 m_cachedSeparatingAxis = colDesc.m_firstDir;
-
- bool isValid = false;
- bool checkSimplex = false;
- bool checkPenetration = true;
- int m_degenerateSimplex = 0;
-
- int m_lastUsedMethod = -1;
-
- {
- btScalar squaredDistance = BT_LARGE_FLOAT;
- btScalar delta = btScalar(0.);
-
- btScalar margin = marginA + marginB;
-
- simplexSolver.reset();
-
- for (;;)
- //while (true)
- {
- btVector3 separatingAxisInA = (-m_cachedSeparatingAxis) * localTransA.getBasis();
- btVector3 separatingAxisInB = m_cachedSeparatingAxis * localTransB.getBasis();
-
- btVector3 pInA = a.getLocalSupportWithoutMargin(separatingAxisInA);
- btVector3 qInB = b.getLocalSupportWithoutMargin(separatingAxisInB);
-
- btVector3 pWorld = localTransA(pInA);
- btVector3 qWorld = localTransB(qInB);
-
- btVector3 w = pWorld - qWorld;
- delta = m_cachedSeparatingAxis.dot(w);
-
- // potential exit, they don't overlap
- if ((delta > btScalar(0.0)) && (delta * delta > squaredDistance * colDesc.m_maximumDistanceSquared))
- {
- m_degenerateSimplex = 10;
- checkSimplex = true;
- //checkPenetration = false;
- break;
- }
-
- //exit 0: the new point is already in the simplex, or we didn't come any closer
- if (simplexSolver.inSimplex(w))
- {
- m_degenerateSimplex = 1;
- checkSimplex = true;
- break;
- }
- // are we getting any closer ?
- btScalar f0 = squaredDistance - delta;
- btScalar f1 = squaredDistance * colDesc.m_gjkRelError2;
-
- if (f0 <= f1)
- {
- if (f0 <= btScalar(0.))
- {
- m_degenerateSimplex = 2;
- }
- else
- {
- m_degenerateSimplex = 11;
- }
- checkSimplex = true;
- break;
- }
-
- //add current vertex to simplex
- simplexSolver.addVertex(w, pWorld, qWorld);
- btVector3 newCachedSeparatingAxis;
-
- //calculate the closest point to the origin (update vector v)
- if (!simplexSolver.closest(newCachedSeparatingAxis))
- {
- m_degenerateSimplex = 3;
- checkSimplex = true;
- break;
- }
-
- if (newCachedSeparatingAxis.length2() < colDesc.m_gjkRelError2)
- {
- m_cachedSeparatingAxis = newCachedSeparatingAxis;
- m_degenerateSimplex = 6;
- checkSimplex = true;
- break;
- }
-
- btScalar previousSquaredDistance = squaredDistance;
- squaredDistance = newCachedSeparatingAxis.length2();
-#if 0
- ///warning: this termination condition leads to some problems in 2d test case see Bullet/Demos/Box2dDemo
- if (squaredDistance>previousSquaredDistance)
- {
- m_degenerateSimplex = 7;
- squaredDistance = previousSquaredDistance;
- checkSimplex = false;
- break;
- }
-#endif //
-
- //redundant m_simplexSolver->compute_points(pointOnA, pointOnB);
-
- //are we getting any closer ?
- if (previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance)
- {
- // m_simplexSolver->backup_closest(m_cachedSeparatingAxis);
- checkSimplex = true;
- m_degenerateSimplex = 12;
-
- break;
- }
-
- m_cachedSeparatingAxis = newCachedSeparatingAxis;
-
- //degeneracy, this is typically due to invalid/uninitialized worldtransforms for a btCollisionObject
- if (m_curIter++ > gGjkMaxIter)
- {
-#if defined(DEBUG) || defined(_DEBUG)
-
- printf("btGjkPairDetector maxIter exceeded:%i\n", m_curIter);
- printf("sepAxis=(%f,%f,%f), squaredDistance = %f\n",
- m_cachedSeparatingAxis.getX(),
- m_cachedSeparatingAxis.getY(),
- m_cachedSeparatingAxis.getZ(),
- squaredDistance);
-#endif
-
- break;
- }
-
- bool check = (!simplexSolver.fullSimplex());
- //bool check = (!m_simplexSolver->fullSimplex() && squaredDistance > SIMD_EPSILON * m_simplexSolver->maxVertex());
-
- if (!check)
- {
- //do we need this backup_closest here ?
- // m_simplexSolver->backup_closest(m_cachedSeparatingAxis);
- m_degenerateSimplex = 13;
- break;
- }
- }
-
- if (checkSimplex)
- {
- simplexSolver.compute_points(pointOnA, pointOnB);
- normalInB = m_cachedSeparatingAxis;
-
- btScalar lenSqr = m_cachedSeparatingAxis.length2();
-
- //valid normal
- if (lenSqr < 0.0001)
- {
- m_degenerateSimplex = 5;
- }
- if (lenSqr > SIMD_EPSILON * SIMD_EPSILON)
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- normalInB *= rlen; //normalize
-
- btScalar s = btSqrt(squaredDistance);
-
- btAssert(s > btScalar(0.0));
- pointOnA -= m_cachedSeparatingAxis * (marginA / s);
- pointOnB += m_cachedSeparatingAxis * (marginB / s);
- distance = ((btScalar(1.) / rlen) - margin);
- isValid = true;
-
- m_lastUsedMethod = 1;
- }
- else
- {
- m_lastUsedMethod = 2;
- }
- }
-
- bool catchDegeneratePenetrationCase =
- (m_catchDegeneracies && m_degenerateSimplex && ((distance + margin) < 0.01));
-
- //if (checkPenetration && !isValid)
- if (checkPenetration && (!isValid || catchDegeneratePenetrationCase))
- {
- //penetration case
-
- //if there is no way to handle penetrations, bail out
-
- // Penetration depth case.
- btVector3 tmpPointOnA, tmpPointOnB;
-
- m_cachedSeparatingAxis.setZero();
-
- bool isValid2 = btGjkEpaCalcPenDepth(a, b,
- colDesc,
- m_cachedSeparatingAxis, tmpPointOnA, tmpPointOnB);
-
- if (isValid2)
- {
- btVector3 tmpNormalInB = tmpPointOnB - tmpPointOnA;
- btScalar lenSqr = tmpNormalInB.length2();
- if (lenSqr <= (SIMD_EPSILON * SIMD_EPSILON))
- {
- tmpNormalInB = m_cachedSeparatingAxis;
- lenSqr = m_cachedSeparatingAxis.length2();
- }
-
- if (lenSqr > (SIMD_EPSILON * SIMD_EPSILON))
- {
- tmpNormalInB /= btSqrt(lenSqr);
- btScalar distance2 = -(tmpPointOnA - tmpPointOnB).length();
- //only replace valid penetrations when the result is deeper (check)
- if (!isValid || (distance2 < distance))
- {
- distance = distance2;
- pointOnA = tmpPointOnA;
- pointOnB = tmpPointOnB;
- normalInB = tmpNormalInB;
-
- isValid = true;
- m_lastUsedMethod = 3;
- }
- else
- {
- m_lastUsedMethod = 8;
- }
- }
- else
- {
- m_lastUsedMethod = 9;
- }
- }
- else
-
- {
- ///this is another degenerate case, where the initial GJK calculation reports a degenerate case
- ///EPA reports no penetration, and the second GJK (using the supporting vector without margin)
- ///reports a valid positive distance. Use the results of the second GJK instead of failing.
- ///thanks to Jacob.Langford for the reproduction case
- ///http://code.google.com/p/bullet/issues/detail?id=250
-
- if (m_cachedSeparatingAxis.length2() > btScalar(0.))
- {
- btScalar distance2 = (tmpPointOnA - tmpPointOnB).length() - margin;
- //only replace valid distances when the distance is less
- if (!isValid || (distance2 < distance))
- {
- distance = distance2;
- pointOnA = tmpPointOnA;
- pointOnB = tmpPointOnB;
- pointOnA -= m_cachedSeparatingAxis * marginA;
- pointOnB += m_cachedSeparatingAxis * marginB;
- normalInB = m_cachedSeparatingAxis;
- normalInB.normalize();
-
- isValid = true;
- m_lastUsedMethod = 6;
- }
- else
- {
- m_lastUsedMethod = 5;
- }
- }
- }
- }
- }
-
- if (isValid && ((distance < 0) || (distance * distance < colDesc.m_maximumDistanceSquared)))
- {
- m_cachedSeparatingAxis = normalInB;
- m_cachedSeparatingDistance = distance;
- distInfo->m_distance = distance;
- distInfo->m_normalBtoA = normalInB;
- distInfo->m_pointOnB = pointOnB;
- distInfo->m_pointOnA = pointOnB + normalInB * distance;
- return 0;
- }
- return -m_lastUsedMethod;
-}
-
-#endif //BT_GJK_EPA_PENETATION_CONVEX_COLLISION_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp
deleted file mode 100644
index 38df8d4808..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp
+++ /dev/null
@@ -1,222 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btContinuousConvexCollision.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h"
-#include "LinearMath/btTransformUtil.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-
-#include "btGjkPairDetector.h"
-#include "btPointCollector.h"
-#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
-
-btContinuousConvexCollision::btContinuousConvexCollision(const btConvexShape* convexA, const btConvexShape* convexB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver)
- : m_simplexSolver(simplexSolver),
- m_penetrationDepthSolver(penetrationDepthSolver),
- m_convexA(convexA),
- m_convexB1(convexB),
- m_planeShape(0)
-{
-}
-
-btContinuousConvexCollision::btContinuousConvexCollision(const btConvexShape* convexA, const btStaticPlaneShape* plane)
- : m_simplexSolver(0),
- m_penetrationDepthSolver(0),
- m_convexA(convexA),
- m_convexB1(0),
- m_planeShape(plane)
-{
-}
-
-/// This maximum should not be necessary. It allows for untested/degenerate cases in production code.
-/// You don't want your game ever to lock-up.
-#define MAX_ITERATIONS 64
-
-void btContinuousConvexCollision::computeClosestPoints(const btTransform& transA, const btTransform& transB, btPointCollector& pointCollector)
-{
- if (m_convexB1)
- {
- m_simplexSolver->reset();
- btGjkPairDetector gjk(m_convexA, m_convexB1, m_convexA->getShapeType(), m_convexB1->getShapeType(), m_convexA->getMargin(), m_convexB1->getMargin(), m_simplexSolver, m_penetrationDepthSolver);
- btGjkPairDetector::ClosestPointInput input;
- input.m_transformA = transA;
- input.m_transformB = transB;
- gjk.getClosestPoints(input, pointCollector, 0);
- }
- else
- {
- //convex versus plane
- const btConvexShape* convexShape = m_convexA;
- const btStaticPlaneShape* planeShape = m_planeShape;
-
- const btVector3& planeNormal = planeShape->getPlaneNormal();
- const btScalar& planeConstant = planeShape->getPlaneConstant();
-
- btTransform convexWorldTransform = transA;
- btTransform convexInPlaneTrans;
- convexInPlaneTrans = transB.inverse() * convexWorldTransform;
- btTransform planeInConvex;
- planeInConvex = convexWorldTransform.inverse() * transB;
-
- btVector3 vtx = convexShape->localGetSupportingVertex(planeInConvex.getBasis() * -planeNormal);
-
- btVector3 vtxInPlane = convexInPlaneTrans(vtx);
- btScalar distance = (planeNormal.dot(vtxInPlane) - planeConstant);
-
- btVector3 vtxInPlaneProjected = vtxInPlane - distance * planeNormal;
- btVector3 vtxInPlaneWorld = transB * vtxInPlaneProjected;
- btVector3 normalOnSurfaceB = transB.getBasis() * planeNormal;
-
- pointCollector.addContactPoint(
- normalOnSurfaceB,
- vtxInPlaneWorld,
- distance);
- }
-}
-
-bool btContinuousConvexCollision::calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result)
-{
- /// compute linear and angular velocity for this interval, to interpolate
- btVector3 linVelA, angVelA, linVelB, angVelB;
- btTransformUtil::calculateVelocity(fromA, toA, btScalar(1.), linVelA, angVelA);
- btTransformUtil::calculateVelocity(fromB, toB, btScalar(1.), linVelB, angVelB);
-
- btScalar boundingRadiusA = m_convexA->getAngularMotionDisc();
- btScalar boundingRadiusB = m_convexB1 ? m_convexB1->getAngularMotionDisc() : 0.f;
-
- btScalar maxAngularProjectedVelocity = angVelA.length() * boundingRadiusA + angVelB.length() * boundingRadiusB;
- btVector3 relLinVel = (linVelB - linVelA);
-
- btScalar relLinVelocLength = (linVelB - linVelA).length();
-
- if ((relLinVelocLength + maxAngularProjectedVelocity) == 0.f)
- return false;
-
- btScalar lambda = btScalar(0.);
-
- btVector3 n;
- n.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- bool hasResult = false;
- btVector3 c;
-
- btScalar lastLambda = lambda;
- //btScalar epsilon = btScalar(0.001);
-
- int numIter = 0;
- //first solution, using GJK
-
- btScalar radius = 0.001f;
- // result.drawCoordSystem(sphereTr);
-
- btPointCollector pointCollector1;
-
- {
- computeClosestPoints(fromA, fromB, pointCollector1);
-
- hasResult = pointCollector1.m_hasResult;
- c = pointCollector1.m_pointInWorld;
- }
-
- if (hasResult)
- {
- btScalar dist;
- dist = pointCollector1.m_distance + result.m_allowedPenetration;
- n = pointCollector1.m_normalOnBInWorld;
- btScalar projectedLinearVelocity = relLinVel.dot(n);
- if ((projectedLinearVelocity + maxAngularProjectedVelocity) <= SIMD_EPSILON)
- return false;
-
- //not close enough
- while (dist > radius)
- {
- if (result.m_debugDrawer)
- {
- result.m_debugDrawer->drawSphere(c, 0.2f, btVector3(1, 1, 1));
- }
- btScalar dLambda = btScalar(0.);
-
- projectedLinearVelocity = relLinVel.dot(n);
-
- //don't report time of impact for motion away from the contact normal (or causes minor penetration)
- if ((projectedLinearVelocity + maxAngularProjectedVelocity) <= SIMD_EPSILON)
- return false;
-
- dLambda = dist / (projectedLinearVelocity + maxAngularProjectedVelocity);
-
- lambda += dLambda;
-
- if (lambda > btScalar(1.) || lambda < btScalar(0.))
- return false;
-
- //todo: next check with relative epsilon
- if (lambda <= lastLambda)
- {
- return false;
- //n.setValue(0,0,0);
- //break;
- }
- lastLambda = lambda;
-
- //interpolate to next lambda
- btTransform interpolatedTransA, interpolatedTransB, relativeTrans;
-
- btTransformUtil::integrateTransform(fromA, linVelA, angVelA, lambda, interpolatedTransA);
- btTransformUtil::integrateTransform(fromB, linVelB, angVelB, lambda, interpolatedTransB);
- relativeTrans = interpolatedTransB.inverseTimes(interpolatedTransA);
-
- if (result.m_debugDrawer)
- {
- result.m_debugDrawer->drawSphere(interpolatedTransA.getOrigin(), 0.2f, btVector3(1, 0, 0));
- }
-
- result.DebugDraw(lambda);
-
- btPointCollector pointCollector;
- computeClosestPoints(interpolatedTransA, interpolatedTransB, pointCollector);
-
- if (pointCollector.m_hasResult)
- {
- dist = pointCollector.m_distance + result.m_allowedPenetration;
- c = pointCollector.m_pointInWorld;
- n = pointCollector.m_normalOnBInWorld;
- }
- else
- {
- result.reportFailure(-1, numIter);
- return false;
- }
-
- numIter++;
- if (numIter > MAX_ITERATIONS)
- {
- result.reportFailure(-2, numIter);
- return false;
- }
- }
-
- result.m_fraction = lambda;
- result.m_normal = n;
- result.m_hitPoint = c;
- return true;
- }
-
- return false;
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h
deleted file mode 100644
index 67b2205c36..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONTINUOUS_COLLISION_CONVEX_CAST_H
-#define BT_CONTINUOUS_COLLISION_CONVEX_CAST_H
-
-#include "btConvexCast.h"
-#include "btSimplexSolverInterface.h"
-class btConvexPenetrationDepthSolver;
-class btConvexShape;
-class btStaticPlaneShape;
-
-/// btContinuousConvexCollision implements angular and linear time of impact for convex objects.
-/// Based on Brian Mirtich's Conservative Advancement idea (PhD thesis).
-/// Algorithm operates in worldspace, in order to keep in between motion globally consistent.
-/// It uses GJK at the moment. Future improvement would use minkowski sum / supporting vertex, merging innerloops
-class btContinuousConvexCollision : public btConvexCast
-{
- btSimplexSolverInterface* m_simplexSolver;
- btConvexPenetrationDepthSolver* m_penetrationDepthSolver;
- const btConvexShape* m_convexA;
- //second object is either a convex or a plane (code sharing)
- const btConvexShape* m_convexB1;
- const btStaticPlaneShape* m_planeShape;
-
- void computeClosestPoints(const btTransform& transA, const btTransform& transB, struct btPointCollector& pointCollector);
-
-public:
- btContinuousConvexCollision(const btConvexShape* shapeA, const btConvexShape* shapeB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver);
-
- btContinuousConvexCollision(const btConvexShape* shapeA, const btStaticPlaneShape* plane);
-
- virtual bool calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result);
-};
-
-#endif //BT_CONTINUOUS_COLLISION_CONVEX_CAST_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp
deleted file mode 100644
index d2a1310b23..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.cpp
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btConvexCast.h"
-
-btConvexCast::~btConvexCast()
-{
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h
deleted file mode 100644
index 77b19be599..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexCast.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_CAST_H
-#define BT_CONVEX_CAST_H
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btScalar.h"
-class btMinkowskiSumShape;
-#include "LinearMath/btIDebugDraw.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define MAX_CONVEX_CAST_ITERATIONS 64
-#define MAX_CONVEX_CAST_EPSILON (SIMD_EPSILON * 10)
-#else
-#define MAX_CONVEX_CAST_ITERATIONS 32
-#define MAX_CONVEX_CAST_EPSILON btScalar(0.0001)
-#endif
-///Typically the conservative advancement reaches solution in a few iterations, clip it to 32 for degenerate cases.
-///See discussion about this here http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=565
-//will need to digg deeper to make the algorithm more robust
-//since, a large epsilon can cause an early termination with false
-//positive results (ray intersections that shouldn't be there)
-
-/// btConvexCast is an interface for Casting
-class btConvexCast
-{
-public:
- virtual ~btConvexCast();
-
- ///RayResult stores the closest result
- /// alternatively, add a callback method to decide about closest/all results
- struct CastResult
- {
- //virtual bool addRayResult(const btVector3& normal,btScalar fraction) = 0;
-
- virtual void DebugDraw(btScalar fraction) { (void)fraction; }
- virtual void drawCoordSystem(const btTransform& trans) { (void)trans; }
- virtual void reportFailure(int errNo, int numIterations)
- {
- (void)errNo;
- (void)numIterations;
- }
- CastResult()
- : m_fraction(btScalar(BT_LARGE_FLOAT)),
- m_debugDrawer(0),
- m_allowedPenetration(btScalar(0)),
- m_subSimplexCastMaxIterations(MAX_CONVEX_CAST_ITERATIONS),
- m_subSimplexCastEpsilon(MAX_CONVEX_CAST_EPSILON)
- {
- }
-
- virtual ~CastResult(){};
-
- btTransform m_hitTransformA;
- btTransform m_hitTransformB;
- btVector3 m_normal;
- btVector3 m_hitPoint;
- btScalar m_fraction; //input and output
- btIDebugDraw* m_debugDrawer;
- btScalar m_allowedPenetration;
-
- int m_subSimplexCastMaxIterations;
- btScalar m_subSimplexCastEpsilon;
-
- };
-
- /// cast a convex against another convex object
- virtual bool calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result) = 0;
-};
-
-#endif //BT_CONVEX_CAST_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h
deleted file mode 100644
index 65c9df9340..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_PENETRATION_DEPTH_H
-#define BT_CONVEX_PENETRATION_DEPTH_H
-
-class btVector3;
-#include "btSimplexSolverInterface.h"
-class btConvexShape;
-class btTransform;
-
-///ConvexPenetrationDepthSolver provides an interface for penetration depth calculation.
-class btConvexPenetrationDepthSolver
-{
-public:
- virtual ~btConvexPenetrationDepthSolver(){};
- virtual bool calcPenDepth(btSimplexSolverInterface& simplexSolver,
- const btConvexShape* convexA, const btConvexShape* convexB,
- const btTransform& transA, const btTransform& transB,
- btVector3& v, btVector3& pa, btVector3& pb,
- class btIDebugDraw* debugDraw) = 0;
-};
-#endif //BT_CONVEX_PENETRATION_DEPTH_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h
deleted file mode 100644
index d1bbb1a46e..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btDiscreteCollisionDetectorInterface.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_DISCRETE_COLLISION_DETECTOR1_INTERFACE_H
-#define BT_DISCRETE_COLLISION_DETECTOR1_INTERFACE_H
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btVector3.h"
-
-/// This interface is made to be used by an iterative approach to do TimeOfImpact calculations
-/// This interface allows to query for closest points and penetration depth between two (convex) objects
-/// the closest point is on the second object (B), and the normal points from the surface on B towards A.
-/// distance is between closest points on B and closest point on A. So you can calculate closest point on A
-/// by taking closestPointInA = closestPointInB + m_distance * m_normalOnSurfaceB
-struct btDiscreteCollisionDetectorInterface
-{
- struct Result
- {
- virtual ~Result() {}
-
- ///setShapeIdentifiersA/B provides experimental support for per-triangle material / custom material combiner
- virtual void setShapeIdentifiersA(int partId0, int index0) = 0;
- virtual void setShapeIdentifiersB(int partId1, int index1) = 0;
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth) = 0;
- };
-
- struct ClosestPointInput
- {
- ClosestPointInput()
- : m_maximumDistanceSquared(btScalar(BT_LARGE_FLOAT))
- {
- }
-
- btTransform m_transformA;
- btTransform m_transformB;
- btScalar m_maximumDistanceSquared;
- };
-
- virtual ~btDiscreteCollisionDetectorInterface(){};
-
- //
- // give either closest points (distance > 0) or penetration (distance)
- // the normal always points from B towards A
- //
- virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false) = 0;
-};
-
-struct btStorageResult : public btDiscreteCollisionDetectorInterface::Result
-{
- btVector3 m_normalOnSurfaceB;
- btVector3 m_closestPointInB;
- btScalar m_distance; //negative means penetration !
-
-protected:
- btStorageResult() : m_distance(btScalar(BT_LARGE_FLOAT))
- {
- }
-
-public:
- virtual ~btStorageResult(){};
-
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth)
- {
- if (depth < m_distance)
- {
- m_normalOnSurfaceB = normalOnBInWorld;
- m_closestPointInB = pointInWorld;
- m_distance = depth;
- }
- }
-};
-
-#endif //BT_DISCRETE_COLLISION_DETECTOR1_INTERFACE_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkCollisionDescription.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkCollisionDescription.h
deleted file mode 100644
index c9fd84bebf..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkCollisionDescription.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2014 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef GJK_COLLISION_DESCRIPTION_H
-#define GJK_COLLISION_DESCRIPTION_H
-
-#include "LinearMath/btVector3.h"
-
-struct btGjkCollisionDescription
-{
- btVector3 m_firstDir;
- int m_maxGjkIterations;
- btScalar m_maximumDistanceSquared;
- btScalar m_gjkRelError2;
- btGjkCollisionDescription()
- : m_firstDir(0, 1, 0),
- m_maxGjkIterations(1000),
- m_maximumDistanceSquared(1e30f),
- m_gjkRelError2(1.0e-6)
- {
- }
- virtual ~btGjkCollisionDescription()
- {
- }
-};
-
-#endif //GJK_COLLISION_DESCRIPTION_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp
deleted file mode 100644
index 9d61e75dac..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGjkConvexCast.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "btGjkPairDetector.h"
-#include "btPointCollector.h"
-#include "LinearMath/btTransformUtil.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define MAX_ITERATIONS 64
-#else
-#define MAX_ITERATIONS 32
-#endif
-
-btGjkConvexCast::btGjkConvexCast(const btConvexShape* convexA, const btConvexShape* convexB, btSimplexSolverInterface* simplexSolver)
- : m_simplexSolver(simplexSolver),
- m_convexA(convexA),
- m_convexB(convexB)
-{
-}
-
-bool btGjkConvexCast::calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result)
-{
- m_simplexSolver->reset();
-
- /// compute linear velocity for this interval, to interpolate
- //assume no rotation/angular velocity, assert here?
- btVector3 linVelA, linVelB;
- linVelA = toA.getOrigin() - fromA.getOrigin();
- linVelB = toB.getOrigin() - fromB.getOrigin();
-
- btScalar radius = btScalar(0.001);
- btScalar lambda = btScalar(0.);
- btVector3 v(1, 0, 0);
-
- int maxIter = MAX_ITERATIONS;
-
- btVector3 n;
- n.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- bool hasResult = false;
- btVector3 c;
- btVector3 r = (linVelA - linVelB);
-
- btScalar lastLambda = lambda;
- //btScalar epsilon = btScalar(0.001);
-
- int numIter = 0;
- //first solution, using GJK
-
- btTransform identityTrans;
- identityTrans.setIdentity();
-
- // result.drawCoordSystem(sphereTr);
-
- btPointCollector pointCollector;
-
- btGjkPairDetector gjk(m_convexA, m_convexB, m_simplexSolver, 0); //m_penetrationDepthSolver);
- btGjkPairDetector::ClosestPointInput input;
-
- //we don't use margins during CCD
- // gjk.setIgnoreMargin(true);
-
- input.m_transformA = fromA;
- input.m_transformB = fromB;
- gjk.getClosestPoints(input, pointCollector, 0);
-
- hasResult = pointCollector.m_hasResult;
- c = pointCollector.m_pointInWorld;
-
- if (hasResult)
- {
- btScalar dist;
- dist = pointCollector.m_distance;
- n = pointCollector.m_normalOnBInWorld;
-
- //not close enough
- while (dist > radius)
- {
- numIter++;
- if (numIter > maxIter)
- {
- return false; //todo: report a failure
- }
- btScalar dLambda = btScalar(0.);
-
- btScalar projectedLinearVelocity = r.dot(n);
-
- dLambda = dist / (projectedLinearVelocity);
-
- lambda = lambda - dLambda;
-
- if (lambda > btScalar(1.))
- return false;
-
- if (lambda < btScalar(0.))
- return false;
-
- //todo: next check with relative epsilon
- if (lambda <= lastLambda)
- {
- return false;
- //n.setValue(0,0,0);
- break;
- }
- lastLambda = lambda;
-
- //interpolate to next lambda
- result.DebugDraw(lambda);
- input.m_transformA.getOrigin().setInterpolate3(fromA.getOrigin(), toA.getOrigin(), lambda);
- input.m_transformB.getOrigin().setInterpolate3(fromB.getOrigin(), toB.getOrigin(), lambda);
-
- gjk.getClosestPoints(input, pointCollector, 0);
- if (pointCollector.m_hasResult)
- {
- if (pointCollector.m_distance < btScalar(0.))
- {
- result.m_fraction = lastLambda;
- n = pointCollector.m_normalOnBInWorld;
- result.m_normal = n;
- result.m_hitPoint = pointCollector.m_pointInWorld;
- return true;
- }
- c = pointCollector.m_pointInWorld;
- n = pointCollector.m_normalOnBInWorld;
- dist = pointCollector.m_distance;
- }
- else
- {
- //??
- return false;
- }
- }
-
- //is n normalized?
- //don't report time of impact for motion away from the contact normal (or causes minor penetration)
- if (n.dot(r) >= -result.m_allowedPenetration)
- return false;
-
- result.m_fraction = lambda;
- result.m_normal = n;
- result.m_hitPoint = c;
- return true;
- }
-
- return false;
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h
deleted file mode 100644
index ef5979173e..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GJK_CONVEX_CAST_H
-#define BT_GJK_CONVEX_CAST_H
-
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-#include "LinearMath/btVector3.h"
-#include "btConvexCast.h"
-class btConvexShape;
-class btMinkowskiSumShape;
-#include "btSimplexSolverInterface.h"
-
-///GjkConvexCast performs a raycast on a convex object using support mapping.
-class btGjkConvexCast : public btConvexCast
-{
- btSimplexSolverInterface* m_simplexSolver;
- const btConvexShape* m_convexA;
- const btConvexShape* m_convexB;
-
-public:
- btGjkConvexCast(const btConvexShape* convexA, const btConvexShape* convexB, btSimplexSolverInterface* simplexSolver);
-
- /// cast a convex against another convex object
- virtual bool calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result);
-};
-
-#endif //BT_GJK_CONVEX_CAST_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp
deleted file mode 100644
index 7d53f8624a..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp
+++ /dev/null
@@ -1,1104 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the
-use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software in a
-product, an acknowledgment in the product documentation would be appreciated
-but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-GJK-EPA collision solver by Nathanael Presson, 2008
-*/
-#include "BulletCollision/CollisionShapes/btConvexInternalShape.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "btGjkEpa2.h"
-
-#if defined(DEBUG) || defined(_DEBUG)
-#include <stdio.h> //for debug printf
-#ifdef __SPU__
-#include <spu_printf.h>
-#define printf spu_printf
-#endif //__SPU__
-#endif
-
-namespace gjkepa2_impl
-{
-// Config
-
-/* GJK */
-#define GJK_MAX_ITERATIONS 128
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define GJK_ACCURACY ((btScalar)1e-12)
-#define GJK_MIN_DISTANCE ((btScalar)1e-12)
-#define GJK_DUPLICATED_EPS ((btScalar)1e-12)
-#else
-#define GJK_ACCURACY ((btScalar)0.0001)
-#define GJK_MIN_DISTANCE ((btScalar)0.0001)
-#define GJK_DUPLICATED_EPS ((btScalar)0.0001)
-#endif //BT_USE_DOUBLE_PRECISION
-
-#define GJK_SIMPLEX2_EPS ((btScalar)0.0)
-#define GJK_SIMPLEX3_EPS ((btScalar)0.0)
-#define GJK_SIMPLEX4_EPS ((btScalar)0.0)
-
-/* EPA */
-#define EPA_MAX_VERTICES 128
-#define EPA_MAX_ITERATIONS 255
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define EPA_ACCURACY ((btScalar)1e-12)
-#define EPA_PLANE_EPS ((btScalar)1e-14)
-#define EPA_INSIDE_EPS ((btScalar)1e-9)
-#else
-#define EPA_ACCURACY ((btScalar)0.0001)
-#define EPA_PLANE_EPS ((btScalar)0.00001)
-#define EPA_INSIDE_EPS ((btScalar)0.01)
-#endif
-
-#define EPA_FALLBACK (10 * EPA_ACCURACY)
-#define EPA_MAX_FACES (EPA_MAX_VERTICES * 2)
-
-// Shorthands
-typedef unsigned int U;
-typedef unsigned char U1;
-
-// MinkowskiDiff
-struct MinkowskiDiff
-{
- const btConvexShape* m_shapes[2];
- btMatrix3x3 m_toshape1;
- btTransform m_toshape0;
-#ifdef __SPU__
- bool m_enableMargin;
-#else
- btVector3 (btConvexShape::*Ls)(const btVector3&) const;
-#endif //__SPU__
-
- MinkowskiDiff()
- {
- }
-#ifdef __SPU__
- void EnableMargin(bool enable)
- {
- m_enableMargin = enable;
- }
- inline btVector3 Support0(const btVector3& d) const
- {
- if (m_enableMargin)
- {
- return m_shapes[0]->localGetSupportVertexNonVirtual(d);
- }
- else
- {
- return m_shapes[0]->localGetSupportVertexWithoutMarginNonVirtual(d);
- }
- }
- inline btVector3 Support1(const btVector3& d) const
- {
- if (m_enableMargin)
- {
- return m_toshape0 * (m_shapes[1]->localGetSupportVertexNonVirtual(m_toshape1 * d));
- }
- else
- {
- return m_toshape0 * (m_shapes[1]->localGetSupportVertexWithoutMarginNonVirtual(m_toshape1 * d));
- }
- }
-#else
- void EnableMargin(bool enable)
- {
- if (enable)
- Ls = &btConvexShape::localGetSupportVertexNonVirtual;
- else
- Ls = &btConvexShape::localGetSupportVertexWithoutMarginNonVirtual;
- }
- inline btVector3 Support0(const btVector3& d) const
- {
- return (((m_shapes[0])->*(Ls))(d));
- }
- inline btVector3 Support1(const btVector3& d) const
- {
- return (m_toshape0 * ((m_shapes[1])->*(Ls))(m_toshape1 * d));
- }
-#endif //__SPU__
-
- inline btVector3 Support(const btVector3& d) const
- {
- return (Support0(d) - Support1(-d));
- }
- btVector3 Support(const btVector3& d, U index) const
- {
- if (index)
- return (Support1(d));
- else
- return (Support0(d));
- }
-};
-
-typedef MinkowskiDiff tShape;
-
-// GJK
-struct GJK
-{
- /* Types */
- struct sSV
- {
- btVector3 d, w;
- };
- struct sSimplex
- {
- sSV* c[4];
- btScalar p[4];
- U rank;
- };
- struct eStatus
- {
- enum _
- {
- Valid,
- Inside,
- Failed
- };
- };
- /* Fields */
- tShape m_shape;
- btVector3 m_ray;
- btScalar m_distance;
- sSimplex m_simplices[2];
- sSV m_store[4];
- sSV* m_free[4];
- U m_nfree;
- U m_current;
- sSimplex* m_simplex;
- eStatus::_ m_status;
- /* Methods */
- GJK()
- {
- Initialize();
- }
- void Initialize()
- {
- m_ray = btVector3(0, 0, 0);
- m_nfree = 0;
- m_status = eStatus::Failed;
- m_current = 0;
- m_distance = 0;
- }
- eStatus::_ Evaluate(const tShape& shapearg, const btVector3& guess)
- {
- U iterations = 0;
- btScalar sqdist = 0;
- btScalar alpha = 0;
- btVector3 lastw[4];
- U clastw = 0;
- /* Initialize solver */
- m_free[0] = &m_store[0];
- m_free[1] = &m_store[1];
- m_free[2] = &m_store[2];
- m_free[3] = &m_store[3];
- m_nfree = 4;
- m_current = 0;
- m_status = eStatus::Valid;
- m_shape = shapearg;
- m_distance = 0;
- /* Initialize simplex */
- m_simplices[0].rank = 0;
- m_ray = guess;
- const btScalar sqrl = m_ray.length2();
- appendvertice(m_simplices[0], sqrl > 0 ? -m_ray : btVector3(1, 0, 0));
- m_simplices[0].p[0] = 1;
- m_ray = m_simplices[0].c[0]->w;
- sqdist = sqrl;
- lastw[0] =
- lastw[1] =
- lastw[2] =
- lastw[3] = m_ray;
- /* Loop */
- do
- {
- const U next = 1 - m_current;
- sSimplex& cs = m_simplices[m_current];
- sSimplex& ns = m_simplices[next];
- /* Check zero */
- const btScalar rl = m_ray.length();
- if (rl < GJK_MIN_DISTANCE)
- { /* Touching or inside */
- m_status = eStatus::Inside;
- break;
- }
- /* Append new vertice in -'v' direction */
- appendvertice(cs, -m_ray);
- const btVector3& w = cs.c[cs.rank - 1]->w;
- bool found = false;
- for (U i = 0; i < 4; ++i)
- {
- if ((w - lastw[i]).length2() < GJK_DUPLICATED_EPS)
- {
- found = true;
- break;
- }
- }
- if (found)
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- else
- { /* Update lastw */
- lastw[clastw = (clastw + 1) & 3] = w;
- }
- /* Check for termination */
- const btScalar omega = btDot(m_ray, w) / rl;
- alpha = btMax(omega, alpha);
- if (((rl - alpha) - (GJK_ACCURACY * rl)) <= 0)
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- /* Reduce simplex */
- btScalar weights[4];
- U mask = 0;
- switch (cs.rank)
- {
- case 2:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- weights, mask);
- break;
- case 3:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- cs.c[2]->w,
- weights, mask);
- break;
- case 4:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- cs.c[2]->w,
- cs.c[3]->w,
- weights, mask);
- break;
- }
- if (sqdist >= 0)
- { /* Valid */
- ns.rank = 0;
- m_ray = btVector3(0, 0, 0);
- m_current = next;
- for (U i = 0, ni = cs.rank; i < ni; ++i)
- {
- if (mask & (1 << i))
- {
- ns.c[ns.rank] = cs.c[i];
- ns.p[ns.rank++] = weights[i];
- m_ray += cs.c[i]->w * weights[i];
- }
- else
- {
- m_free[m_nfree++] = cs.c[i];
- }
- }
- if (mask == 15) m_status = eStatus::Inside;
- }
- else
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- m_status = ((++iterations) < GJK_MAX_ITERATIONS) ? m_status : eStatus::Failed;
- } while (m_status == eStatus::Valid);
- m_simplex = &m_simplices[m_current];
- switch (m_status)
- {
- case eStatus::Valid:
- m_distance = m_ray.length();
- break;
- case eStatus::Inside:
- m_distance = 0;
- break;
- default:
- {
- }
- }
- return (m_status);
- }
- bool EncloseOrigin()
- {
- switch (m_simplex->rank)
- {
- case 1:
- {
- for (U i = 0; i < 3; ++i)
- {
- btVector3 axis = btVector3(0, 0, 0);
- axis[i] = 1;
- appendvertice(*m_simplex, axis);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -axis);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- break;
- case 2:
- {
- const btVector3 d = m_simplex->c[1]->w - m_simplex->c[0]->w;
- for (U i = 0; i < 3; ++i)
- {
- btVector3 axis = btVector3(0, 0, 0);
- axis[i] = 1;
- const btVector3 p = btCross(d, axis);
- if (p.length2() > 0)
- {
- appendvertice(*m_simplex, p);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -p);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- }
- break;
- case 3:
- {
- const btVector3 n = btCross(m_simplex->c[1]->w - m_simplex->c[0]->w,
- m_simplex->c[2]->w - m_simplex->c[0]->w);
- if (n.length2() > 0)
- {
- appendvertice(*m_simplex, n);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -n);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- break;
- case 4:
- {
- if (btFabs(det(m_simplex->c[0]->w - m_simplex->c[3]->w,
- m_simplex->c[1]->w - m_simplex->c[3]->w,
- m_simplex->c[2]->w - m_simplex->c[3]->w)) > 0)
- return (true);
- }
- break;
- }
- return (false);
- }
- /* Internals */
- void getsupport(const btVector3& d, sSV& sv) const
- {
- sv.d = d / d.length();
- sv.w = m_shape.Support(sv.d);
- }
- void removevertice(sSimplex& simplex)
- {
- m_free[m_nfree++] = simplex.c[--simplex.rank];
- }
- void appendvertice(sSimplex& simplex, const btVector3& v)
- {
- simplex.p[simplex.rank] = 0;
- simplex.c[simplex.rank] = m_free[--m_nfree];
- getsupport(v, *simplex.c[simplex.rank++]);
- }
- static btScalar det(const btVector3& a, const btVector3& b, const btVector3& c)
- {
- return (a.y() * b.z() * c.x() + a.z() * b.x() * c.y() -
- a.x() * b.z() * c.y() - a.y() * b.x() * c.z() +
- a.x() * b.y() * c.z() - a.z() * b.y() * c.x());
- }
- static btScalar projectorigin(const btVector3& a,
- const btVector3& b,
- btScalar* w, U& m)
- {
- const btVector3 d = b - a;
- const btScalar l = d.length2();
- if (l > GJK_SIMPLEX2_EPS)
- {
- const btScalar t(l > 0 ? -btDot(a, d) / l : 0);
- if (t >= 1)
- {
- w[0] = 0;
- w[1] = 1;
- m = 2;
- return (b.length2());
- }
- else if (t <= 0)
- {
- w[0] = 1;
- w[1] = 0;
- m = 1;
- return (a.length2());
- }
- else
- {
- w[0] = 1 - (w[1] = t);
- m = 3;
- return ((a + d * t).length2());
- }
- }
- return (-1);
- }
- static btScalar projectorigin(const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- btScalar* w, U& m)
- {
- static const U imd3[] = {1, 2, 0};
- const btVector3* vt[] = {&a, &b, &c};
- const btVector3 dl[] = {a - b, b - c, c - a};
- const btVector3 n = btCross(dl[0], dl[1]);
- const btScalar l = n.length2();
- if (l > GJK_SIMPLEX3_EPS)
- {
- btScalar mindist = -1;
- btScalar subw[2] = {0.f, 0.f};
- U subm(0);
- for (U i = 0; i < 3; ++i)
- {
- if (btDot(*vt[i], btCross(dl[i], n)) > 0)
- {
- const U j = imd3[i];
- const btScalar subd(projectorigin(*vt[i], *vt[j], subw, subm));
- if ((mindist < 0) || (subd < mindist))
- {
- mindist = subd;
- m = static_cast<U>(((subm & 1) ? 1 << i : 0) + ((subm & 2) ? 1 << j : 0));
- w[i] = subw[0];
- w[j] = subw[1];
- w[imd3[j]] = 0;
- }
- }
- }
- if (mindist < 0)
- {
- const btScalar d = btDot(a, n);
- const btScalar s = btSqrt(l);
- const btVector3 p = n * (d / l);
- mindist = p.length2();
- m = 7;
- w[0] = (btCross(dl[1], b - p)).length() / s;
- w[1] = (btCross(dl[2], c - p)).length() / s;
- w[2] = 1 - (w[0] + w[1]);
- }
- return (mindist);
- }
- return (-1);
- }
- static btScalar projectorigin(const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- const btVector3& d,
- btScalar* w, U& m)
- {
- static const U imd3[] = {1, 2, 0};
- const btVector3* vt[] = {&a, &b, &c, &d};
- const btVector3 dl[] = {a - d, b - d, c - d};
- const btScalar vl = det(dl[0], dl[1], dl[2]);
- const bool ng = (vl * btDot(a, btCross(b - c, a - b))) <= 0;
- if (ng && (btFabs(vl) > GJK_SIMPLEX4_EPS))
- {
- btScalar mindist = -1;
- btScalar subw[3] = {0.f, 0.f, 0.f};
- U subm(0);
- for (U i = 0; i < 3; ++i)
- {
- const U j = imd3[i];
- const btScalar s = vl * btDot(d, btCross(dl[i], dl[j]));
- if (s > 0)
- {
- const btScalar subd = projectorigin(*vt[i], *vt[j], d, subw, subm);
- if ((mindist < 0) || (subd < mindist))
- {
- mindist = subd;
- m = static_cast<U>((subm & 1 ? 1 << i : 0) +
- (subm & 2 ? 1 << j : 0) +
- (subm & 4 ? 8 : 0));
- w[i] = subw[0];
- w[j] = subw[1];
- w[imd3[j]] = 0;
- w[3] = subw[2];
- }
- }
- }
- if (mindist < 0)
- {
- mindist = 0;
- m = 15;
- w[0] = det(c, b, d) / vl;
- w[1] = det(a, c, d) / vl;
- w[2] = det(b, a, d) / vl;
- w[3] = 1 - (w[0] + w[1] + w[2]);
- }
- return (mindist);
- }
- return (-1);
- }
-};
-
-// EPA
-struct EPA
-{
- /* Types */
- typedef GJK::sSV sSV;
- struct sFace
- {
- btVector3 n;
- btScalar d;
- sSV* c[3];
- sFace* f[3];
- sFace* l[2];
- U1 e[3];
- U1 pass;
- };
- struct sList
- {
- sFace* root;
- U count;
- sList() : root(0), count(0) {}
- };
- struct sHorizon
- {
- sFace* cf;
- sFace* ff;
- U nf;
- sHorizon() : cf(0), ff(0), nf(0) {}
- };
- struct eStatus
- {
- enum _
- {
- Valid,
- Touching,
- Degenerated,
- NonConvex,
- InvalidHull,
- OutOfFaces,
- OutOfVertices,
- AccuraryReached,
- FallBack,
- Failed
- };
- };
- /* Fields */
- eStatus::_ m_status;
- GJK::sSimplex m_result;
- btVector3 m_normal;
- btScalar m_depth;
- sSV m_sv_store[EPA_MAX_VERTICES];
- sFace m_fc_store[EPA_MAX_FACES];
- U m_nextsv;
- sList m_hull;
- sList m_stock;
- /* Methods */
- EPA()
- {
- Initialize();
- }
-
- static inline void bind(sFace* fa, U ea, sFace* fb, U eb)
- {
- fa->e[ea] = (U1)eb;
- fa->f[ea] = fb;
- fb->e[eb] = (U1)ea;
- fb->f[eb] = fa;
- }
- static inline void append(sList& list, sFace* face)
- {
- face->l[0] = 0;
- face->l[1] = list.root;
- if (list.root) list.root->l[0] = face;
- list.root = face;
- ++list.count;
- }
- static inline void remove(sList& list, sFace* face)
- {
- if (face->l[1]) face->l[1]->l[0] = face->l[0];
- if (face->l[0]) face->l[0]->l[1] = face->l[1];
- if (face == list.root) list.root = face->l[1];
- --list.count;
- }
-
- void Initialize()
- {
- m_status = eStatus::Failed;
- m_normal = btVector3(0, 0, 0);
- m_depth = 0;
- m_nextsv = 0;
- for (U i = 0; i < EPA_MAX_FACES; ++i)
- {
- append(m_stock, &m_fc_store[EPA_MAX_FACES - i - 1]);
- }
- }
- eStatus::_ Evaluate(GJK& gjk, const btVector3& guess)
- {
- GJK::sSimplex& simplex = *gjk.m_simplex;
- if ((simplex.rank > 1) && gjk.EncloseOrigin())
- {
- /* Clean up */
- while (m_hull.root)
- {
- sFace* f = m_hull.root;
- remove(m_hull, f);
- append(m_stock, f);
- }
- m_status = eStatus::Valid;
- m_nextsv = 0;
- /* Orient simplex */
- if (gjk.det(simplex.c[0]->w - simplex.c[3]->w,
- simplex.c[1]->w - simplex.c[3]->w,
- simplex.c[2]->w - simplex.c[3]->w) < 0)
- {
- btSwap(simplex.c[0], simplex.c[1]);
- btSwap(simplex.p[0], simplex.p[1]);
- }
- /* Build initial hull */
- sFace* tetra[] = {newface(simplex.c[0], simplex.c[1], simplex.c[2], true),
- newface(simplex.c[1], simplex.c[0], simplex.c[3], true),
- newface(simplex.c[2], simplex.c[1], simplex.c[3], true),
- newface(simplex.c[0], simplex.c[2], simplex.c[3], true)};
- if (m_hull.count == 4)
- {
- sFace* best = findbest();
- sFace outer = *best;
- U pass = 0;
- U iterations = 0;
- bind(tetra[0], 0, tetra[1], 0);
- bind(tetra[0], 1, tetra[2], 0);
- bind(tetra[0], 2, tetra[3], 0);
- bind(tetra[1], 1, tetra[3], 2);
- bind(tetra[1], 2, tetra[2], 1);
- bind(tetra[2], 2, tetra[3], 1);
- m_status = eStatus::Valid;
- for (; iterations < EPA_MAX_ITERATIONS; ++iterations)
- {
- if (m_nextsv < EPA_MAX_VERTICES)
- {
- sHorizon horizon;
- sSV* w = &m_sv_store[m_nextsv++];
- bool valid = true;
- best->pass = (U1)(++pass);
- gjk.getsupport(best->n, *w);
- const btScalar wdist = btDot(best->n, w->w) - best->d;
- if (wdist > EPA_ACCURACY)
- {
- for (U j = 0; (j < 3) && valid; ++j)
- {
- valid &= expand(pass, w,
- best->f[j], best->e[j],
- horizon);
- }
- if (valid && (horizon.nf >= 3))
- {
- bind(horizon.cf, 1, horizon.ff, 2);
- remove(m_hull, best);
- append(m_stock, best);
- best = findbest();
- outer = *best;
- }
- else
- {
- m_status = eStatus::InvalidHull;
- break;
- }
- }
- else
- {
- m_status = eStatus::AccuraryReached;
- break;
- }
- }
- else
- {
- m_status = eStatus::OutOfVertices;
- break;
- }
- }
- const btVector3 projection = outer.n * outer.d;
- m_normal = outer.n;
- m_depth = outer.d;
- m_result.rank = 3;
- m_result.c[0] = outer.c[0];
- m_result.c[1] = outer.c[1];
- m_result.c[2] = outer.c[2];
- m_result.p[0] = btCross(outer.c[1]->w - projection,
- outer.c[2]->w - projection)
- .length();
- m_result.p[1] = btCross(outer.c[2]->w - projection,
- outer.c[0]->w - projection)
- .length();
- m_result.p[2] = btCross(outer.c[0]->w - projection,
- outer.c[1]->w - projection)
- .length();
- const btScalar sum = m_result.p[0] + m_result.p[1] + m_result.p[2];
- m_result.p[0] /= sum;
- m_result.p[1] /= sum;
- m_result.p[2] /= sum;
- return (m_status);
- }
- }
- /* Fallback */
- m_status = eStatus::FallBack;
- m_normal = -guess;
- const btScalar nl = m_normal.length();
- if (nl > 0)
- m_normal = m_normal / nl;
- else
- m_normal = btVector3(1, 0, 0);
- m_depth = 0;
- m_result.rank = 1;
- m_result.c[0] = simplex.c[0];
- m_result.p[0] = 1;
- return (m_status);
- }
- bool getedgedist(sFace* face, sSV* a, sSV* b, btScalar& dist)
- {
- const btVector3 ba = b->w - a->w;
- const btVector3 n_ab = btCross(ba, face->n); // Outward facing edge normal direction, on triangle plane
- const btScalar a_dot_nab = btDot(a->w, n_ab); // Only care about the sign to determine inside/outside, so not normalization required
-
- if (a_dot_nab < 0)
- {
- // Outside of edge a->b
-
- const btScalar ba_l2 = ba.length2();
- const btScalar a_dot_ba = btDot(a->w, ba);
- const btScalar b_dot_ba = btDot(b->w, ba);
-
- if (a_dot_ba > 0)
- {
- // Pick distance vertex a
- dist = a->w.length();
- }
- else if (b_dot_ba < 0)
- {
- // Pick distance vertex b
- dist = b->w.length();
- }
- else
- {
- // Pick distance to edge a->b
- const btScalar a_dot_b = btDot(a->w, b->w);
- dist = btSqrt(btMax((a->w.length2() * b->w.length2() - a_dot_b * a_dot_b) / ba_l2, (btScalar)0));
- }
-
- return true;
- }
-
- return false;
- }
- sFace* newface(sSV* a, sSV* b, sSV* c, bool forced)
- {
- if (m_stock.root)
- {
- sFace* face = m_stock.root;
- remove(m_stock, face);
- append(m_hull, face);
- face->pass = 0;
- face->c[0] = a;
- face->c[1] = b;
- face->c[2] = c;
- face->n = btCross(b->w - a->w, c->w - a->w);
- const btScalar l = face->n.length();
- const bool v = l > EPA_ACCURACY;
-
- if (v)
- {
- if (!(getedgedist(face, a, b, face->d) ||
- getedgedist(face, b, c, face->d) ||
- getedgedist(face, c, a, face->d)))
- {
- // Origin projects to the interior of the triangle
- // Use distance to triangle plane
- face->d = btDot(a->w, face->n) / l;
- }
-
- face->n /= l;
- if (forced || (face->d >= -EPA_PLANE_EPS))
- {
- return face;
- }
- else
- m_status = eStatus::NonConvex;
- }
- else
- m_status = eStatus::Degenerated;
-
- remove(m_hull, face);
- append(m_stock, face);
- return 0;
- }
- m_status = m_stock.root ? eStatus::OutOfVertices : eStatus::OutOfFaces;
- return 0;
- }
- sFace* findbest()
- {
- sFace* minf = m_hull.root;
- btScalar mind = minf->d * minf->d;
- for (sFace* f = minf->l[1]; f; f = f->l[1])
- {
- const btScalar sqd = f->d * f->d;
- if (sqd < mind)
- {
- minf = f;
- mind = sqd;
- }
- }
- return (minf);
- }
- bool expand(U pass, sSV* w, sFace* f, U e, sHorizon& horizon)
- {
- static const U i1m3[] = {1, 2, 0};
- static const U i2m3[] = {2, 0, 1};
- if (f->pass != pass)
- {
- const U e1 = i1m3[e];
- if ((btDot(f->n, w->w) - f->d) < -EPA_PLANE_EPS)
- {
- sFace* nf = newface(f->c[e1], f->c[e], w, false);
- if (nf)
- {
- bind(nf, 0, f, e);
- if (horizon.cf)
- bind(horizon.cf, 1, nf, 2);
- else
- horizon.ff = nf;
- horizon.cf = nf;
- ++horizon.nf;
- return (true);
- }
- }
- else
- {
- const U e2 = i2m3[e];
- f->pass = (U1)pass;
- if (expand(pass, w, f->f[e1], f->e[e1], horizon) &&
- expand(pass, w, f->f[e2], f->e[e2], horizon))
- {
- remove(m_hull, f);
- append(m_stock, f);
- return (true);
- }
- }
- }
- return (false);
- }
-};
-
-//
-static void Initialize(const btConvexShape* shape0, const btTransform& wtrs0,
- const btConvexShape* shape1, const btTransform& wtrs1,
- btGjkEpaSolver2::sResults& results,
- tShape& shape,
- bool withmargins)
-{
- /* Results */
- results.witnesses[0] =
- results.witnesses[1] = btVector3(0, 0, 0);
- results.status = btGjkEpaSolver2::sResults::Separated;
- /* Shape */
- shape.m_shapes[0] = shape0;
- shape.m_shapes[1] = shape1;
- shape.m_toshape1 = wtrs1.getBasis().transposeTimes(wtrs0.getBasis());
- shape.m_toshape0 = wtrs0.inverseTimes(wtrs1);
- shape.EnableMargin(withmargins);
-}
-
-} // namespace gjkepa2_impl
-
-//
-// Api
-//
-
-using namespace gjkepa2_impl;
-
-//
-int btGjkEpaSolver2::StackSizeRequirement()
-{
- return (sizeof(GJK) + sizeof(EPA));
-}
-
-//
-bool btGjkEpaSolver2::Distance(const btConvexShape* shape0,
- const btTransform& wtrs0,
- const btConvexShape* shape1,
- const btTransform& wtrs1,
- const btVector3& guess,
- sResults& results)
-{
- tShape shape;
- Initialize(shape0, wtrs0, shape1, wtrs1, results, shape, false);
- GJK gjk;
- GJK::eStatus::_ gjk_status = gjk.Evaluate(shape, guess);
- if (gjk_status == GJK::eStatus::Valid)
- {
- btVector3 w0 = btVector3(0, 0, 0);
- btVector3 w1 = btVector3(0, 0, 0);
- for (U i = 0; i < gjk.m_simplex->rank; ++i)
- {
- const btScalar p = gjk.m_simplex->p[i];
- w0 += shape.Support(gjk.m_simplex->c[i]->d, 0) * p;
- w1 += shape.Support(-gjk.m_simplex->c[i]->d, 1) * p;
- }
- results.witnesses[0] = wtrs0 * w0;
- results.witnesses[1] = wtrs0 * w1;
- results.normal = w0 - w1;
- results.distance = results.normal.length();
- results.normal /= results.distance > GJK_MIN_DISTANCE ? results.distance : 1;
- return (true);
- }
- else
- {
- results.status = gjk_status == GJK::eStatus::Inside ? sResults::Penetrating : sResults::GJK_Failed;
- return (false);
- }
-}
-
-//
-bool btGjkEpaSolver2::Penetration(const btConvexShape* shape0,
- const btTransform& wtrs0,
- const btConvexShape* shape1,
- const btTransform& wtrs1,
- const btVector3& guess,
- sResults& results,
- bool usemargins)
-{
- tShape shape;
- Initialize(shape0, wtrs0, shape1, wtrs1, results, shape, usemargins);
- GJK gjk;
- GJK::eStatus::_ gjk_status = gjk.Evaluate(shape, -guess);
- switch (gjk_status)
- {
- case GJK::eStatus::Inside:
- {
- EPA epa;
- EPA::eStatus::_ epa_status = epa.Evaluate(gjk, -guess);
- if (epa_status != EPA::eStatus::Failed)
- {
- btVector3 w0 = btVector3(0, 0, 0);
- for (U i = 0; i < epa.m_result.rank; ++i)
- {
- w0 += shape.Support(epa.m_result.c[i]->d, 0) * epa.m_result.p[i];
- }
- results.status = sResults::Penetrating;
- results.witnesses[0] = wtrs0 * w0;
- results.witnesses[1] = wtrs0 * (w0 - epa.m_normal * epa.m_depth);
- results.normal = -epa.m_normal;
- results.distance = -epa.m_depth;
- return (true);
- }
- else
- results.status = sResults::EPA_Failed;
- }
- break;
- case GJK::eStatus::Failed:
- results.status = sResults::GJK_Failed;
- break;
- default:
- {
- }
- }
- return (false);
-}
-
-#ifndef __SPU__
-//
-btScalar btGjkEpaSolver2::SignedDistance(const btVector3& position,
- btScalar margin,
- const btConvexShape* shape0,
- const btTransform& wtrs0,
- sResults& results)
-{
- tShape shape;
- btSphereShape shape1(margin);
- btTransform wtrs1(btQuaternion(0, 0, 0, 1), position);
- Initialize(shape0, wtrs0, &shape1, wtrs1, results, shape, false);
- GJK gjk;
- GJK::eStatus::_ gjk_status = gjk.Evaluate(shape, btVector3(1, 1, 1));
- if (gjk_status == GJK::eStatus::Valid)
- {
- btVector3 w0 = btVector3(0, 0, 0);
- btVector3 w1 = btVector3(0, 0, 0);
- for (U i = 0; i < gjk.m_simplex->rank; ++i)
- {
- const btScalar p = gjk.m_simplex->p[i];
- w0 += shape.Support(gjk.m_simplex->c[i]->d, 0) * p;
- w1 += shape.Support(-gjk.m_simplex->c[i]->d, 1) * p;
- }
- results.witnesses[0] = wtrs0 * w0;
- results.witnesses[1] = wtrs0 * w1;
- const btVector3 delta = results.witnesses[1] -
- results.witnesses[0];
- const btScalar margin = shape0->getMarginNonVirtual() +
- shape1.getMarginNonVirtual();
- const btScalar length = delta.length();
- results.normal = delta / length;
- results.witnesses[0] += results.normal * margin;
- results.distance = length - margin;
- return results.distance;
- }
- else
- {
- if (gjk_status == GJK::eStatus::Inside)
- {
- if (Penetration(shape0, wtrs0, &shape1, wtrs1, gjk.m_ray, results))
- {
- const btVector3 delta = results.witnesses[0] -
- results.witnesses[1];
- const btScalar length = delta.length();
- if (length >= SIMD_EPSILON)
- results.normal = delta / length;
- return (-length);
- }
- }
- }
- return (SIMD_INFINITY);
-}
-
-//
-bool btGjkEpaSolver2::SignedDistance(const btConvexShape* shape0,
- const btTransform& wtrs0,
- const btConvexShape* shape1,
- const btTransform& wtrs1,
- const btVector3& guess,
- sResults& results)
-{
- if (!Distance(shape0, wtrs0, shape1, wtrs1, guess, results))
- return (Penetration(shape0, wtrs0, shape1, wtrs1, guess, results, false));
- else
- return (true);
-}
-#endif //__SPU__
-
-/* Symbols cleanup */
-
-#undef GJK_MAX_ITERATIONS
-#undef GJK_ACCURACY
-#undef GJK_MIN_DISTANCE
-#undef GJK_DUPLICATED_EPS
-#undef GJK_SIMPLEX2_EPS
-#undef GJK_SIMPLEX3_EPS
-#undef GJK_SIMPLEX4_EPS
-
-#undef EPA_MAX_VERTICES
-#undef EPA_MAX_FACES
-#undef EPA_MAX_ITERATIONS
-#undef EPA_ACCURACY
-#undef EPA_FALLBACK
-#undef EPA_PLANE_EPS
-#undef EPA_INSIDE_EPS
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h
deleted file mode 100644
index 893daea3f5..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa2.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the
-use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software in a
-product, an acknowledgment in the product documentation would be appreciated
-but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-GJK-EPA collision solver by Nathanael Presson, 2008
-*/
-#ifndef BT_GJK_EPA2_H
-#define BT_GJK_EPA2_H
-
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-
-///btGjkEpaSolver contributed under zlib by Nathanael Presson
-struct btGjkEpaSolver2
-{
- struct sResults
- {
- enum eStatus
- {
- Separated, /* Shapes doesnt penetrate */
- Penetrating, /* Shapes are penetrating */
- GJK_Failed, /* GJK phase fail, no big issue, shapes are probably just 'touching' */
- EPA_Failed /* EPA phase fail, bigger problem, need to save parameters, and debug */
- } status;
- btVector3 witnesses[2];
- btVector3 normal;
- btScalar distance;
- };
-
- static int StackSizeRequirement();
-
- static bool Distance(const btConvexShape* shape0, const btTransform& wtrs0,
- const btConvexShape* shape1, const btTransform& wtrs1,
- const btVector3& guess,
- sResults& results);
-
- static bool Penetration(const btConvexShape* shape0, const btTransform& wtrs0,
- const btConvexShape* shape1, const btTransform& wtrs1,
- const btVector3& guess,
- sResults& results,
- bool usemargins = true);
-#ifndef __SPU__
- static btScalar SignedDistance(const btVector3& position,
- btScalar margin,
- const btConvexShape* shape,
- const btTransform& wtrs,
- sResults& results);
-
- static bool SignedDistance(const btConvexShape* shape0, const btTransform& wtrs0,
- const btConvexShape* shape1, const btTransform& wtrs1,
- const btVector3& guess,
- sResults& results);
-#endif //__SPU__
-};
-
-#endif //BT_GJK_EPA2_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa3.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa3.h
deleted file mode 100644
index 6fedbbb3e5..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpa3.h
+++ /dev/null
@@ -1,1063 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2014 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the
-use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
-claim that you wrote the original software. If you use this software in a
-product, an acknowledgment in the product documentation would be appreciated
-but is not required.
-2. Altered source versions must be plainly marked as such, and must not be
-misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-Initial GJK-EPA collision solver by Nathanael Presson, 2008
-Improvements and refactoring by Erwin Coumans, 2008-2014
-*/
-#ifndef BT_GJK_EPA3_H
-#define BT_GJK_EPA3_H
-
-#include "LinearMath/btTransform.h"
-#include "btGjkCollisionDescription.h"
-
-struct btGjkEpaSolver3
-{
- struct sResults
- {
- enum eStatus
- {
- Separated, /* Shapes doesnt penetrate */
- Penetrating, /* Shapes are penetrating */
- GJK_Failed, /* GJK phase fail, no big issue, shapes are probably just 'touching' */
- EPA_Failed /* EPA phase fail, bigger problem, need to save parameters, and debug */
- } status;
- btVector3 witnesses[2];
- btVector3 normal;
- btScalar distance;
- };
-};
-
-#if defined(DEBUG) || defined(_DEBUG)
-#include <stdio.h> //for debug printf
-#ifdef __SPU__
-#include <spu_printf.h>
-#define printf spu_printf
-#endif //__SPU__
-#endif
-
-// Config
-
-/* GJK */
-#define GJK_MAX_ITERATIONS 128
-#define GJK_ACCURARY ((btScalar)0.0001)
-#define GJK_MIN_DISTANCE ((btScalar)0.0001)
-#define GJK_DUPLICATED_EPS ((btScalar)0.0001)
-#define GJK_SIMPLEX2_EPS ((btScalar)0.0)
-#define GJK_SIMPLEX3_EPS ((btScalar)0.0)
-#define GJK_SIMPLEX4_EPS ((btScalar)0.0)
-
-/* EPA */
-#define EPA_MAX_VERTICES 64
-#define EPA_MAX_FACES (EPA_MAX_VERTICES * 2)
-#define EPA_MAX_ITERATIONS 255
-#define EPA_ACCURACY ((btScalar)0.0001)
-#define EPA_FALLBACK (10 * EPA_ACCURACY)
-#define EPA_PLANE_EPS ((btScalar)0.00001)
-#define EPA_INSIDE_EPS ((btScalar)0.01)
-
-// Shorthands
-typedef unsigned int U;
-typedef unsigned char U1;
-
-// MinkowskiDiff
-template <typename btConvexTemplate>
-struct MinkowskiDiff
-{
- const btConvexTemplate* m_convexAPtr;
- const btConvexTemplate* m_convexBPtr;
-
- btMatrix3x3 m_toshape1;
- btTransform m_toshape0;
-
- bool m_enableMargin;
-
- MinkowskiDiff(const btConvexTemplate& a, const btConvexTemplate& b)
- : m_convexAPtr(&a),
- m_convexBPtr(&b)
- {
- }
-
- void EnableMargin(bool enable)
- {
- m_enableMargin = enable;
- }
- inline btVector3 Support0(const btVector3& d) const
- {
- return m_convexAPtr->getLocalSupportWithMargin(d);
- }
- inline btVector3 Support1(const btVector3& d) const
- {
- return m_toshape0 * m_convexBPtr->getLocalSupportWithMargin(m_toshape1 * d);
- }
-
- inline btVector3 Support(const btVector3& d) const
- {
- return (Support0(d) - Support1(-d));
- }
- btVector3 Support(const btVector3& d, U index) const
- {
- if (index)
- return (Support1(d));
- else
- return (Support0(d));
- }
-};
-
-enum eGjkStatus
-{
- eGjkValid,
- eGjkInside,
- eGjkFailed
-};
-
-// GJK
-template <typename btConvexTemplate>
-struct GJK
-{
- /* Types */
- struct sSV
- {
- btVector3 d, w;
- };
- struct sSimplex
- {
- sSV* c[4];
- btScalar p[4];
- U rank;
- };
-
- /* Fields */
-
- MinkowskiDiff<btConvexTemplate> m_shape;
- btVector3 m_ray;
- btScalar m_distance;
- sSimplex m_simplices[2];
- sSV m_store[4];
- sSV* m_free[4];
- U m_nfree;
- U m_current;
- sSimplex* m_simplex;
- eGjkStatus m_status;
- /* Methods */
-
- GJK(const btConvexTemplate& a, const btConvexTemplate& b)
- : m_shape(a, b)
- {
- Initialize();
- }
- void Initialize()
- {
- m_ray = btVector3(0, 0, 0);
- m_nfree = 0;
- m_status = eGjkFailed;
- m_current = 0;
- m_distance = 0;
- }
- eGjkStatus Evaluate(const MinkowskiDiff<btConvexTemplate>& shapearg, const btVector3& guess)
- {
- U iterations = 0;
- btScalar sqdist = 0;
- btScalar alpha = 0;
- btVector3 lastw[4];
- U clastw = 0;
- /* Initialize solver */
- m_free[0] = &m_store[0];
- m_free[1] = &m_store[1];
- m_free[2] = &m_store[2];
- m_free[3] = &m_store[3];
- m_nfree = 4;
- m_current = 0;
- m_status = eGjkValid;
- m_shape = shapearg;
- m_distance = 0;
- /* Initialize simplex */
- m_simplices[0].rank = 0;
- m_ray = guess;
- const btScalar sqrl = m_ray.length2();
- appendvertice(m_simplices[0], sqrl > 0 ? -m_ray : btVector3(1, 0, 0));
- m_simplices[0].p[0] = 1;
- m_ray = m_simplices[0].c[0]->w;
- sqdist = sqrl;
- lastw[0] =
- lastw[1] =
- lastw[2] =
- lastw[3] = m_ray;
- /* Loop */
- do
- {
- const U next = 1 - m_current;
- sSimplex& cs = m_simplices[m_current];
- sSimplex& ns = m_simplices[next];
- /* Check zero */
- const btScalar rl = m_ray.length();
- if (rl < GJK_MIN_DISTANCE)
- { /* Touching or inside */
- m_status = eGjkInside;
- break;
- }
- /* Append new vertice in -'v' direction */
- appendvertice(cs, -m_ray);
- const btVector3& w = cs.c[cs.rank - 1]->w;
- bool found = false;
- for (U i = 0; i < 4; ++i)
- {
- if ((w - lastw[i]).length2() < GJK_DUPLICATED_EPS)
- {
- found = true;
- break;
- }
- }
- if (found)
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- else
- { /* Update lastw */
- lastw[clastw = (clastw + 1) & 3] = w;
- }
- /* Check for termination */
- const btScalar omega = btDot(m_ray, w) / rl;
- alpha = btMax(omega, alpha);
- if (((rl - alpha) - (GJK_ACCURARY * rl)) <= 0)
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- /* Reduce simplex */
- btScalar weights[4];
- U mask = 0;
- switch (cs.rank)
- {
- case 2:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- weights, mask);
- break;
- case 3:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- cs.c[2]->w,
- weights, mask);
- break;
- case 4:
- sqdist = projectorigin(cs.c[0]->w,
- cs.c[1]->w,
- cs.c[2]->w,
- cs.c[3]->w,
- weights, mask);
- break;
- }
- if (sqdist >= 0)
- { /* Valid */
- ns.rank = 0;
- m_ray = btVector3(0, 0, 0);
- m_current = next;
- for (U i = 0, ni = cs.rank; i < ni; ++i)
- {
- if (mask & (1 << i))
- {
- ns.c[ns.rank] = cs.c[i];
- ns.p[ns.rank++] = weights[i];
- m_ray += cs.c[i]->w * weights[i];
- }
- else
- {
- m_free[m_nfree++] = cs.c[i];
- }
- }
- if (mask == 15) m_status = eGjkInside;
- }
- else
- { /* Return old simplex */
- removevertice(m_simplices[m_current]);
- break;
- }
- m_status = ((++iterations) < GJK_MAX_ITERATIONS) ? m_status : eGjkFailed;
- } while (m_status == eGjkValid);
- m_simplex = &m_simplices[m_current];
- switch (m_status)
- {
- case eGjkValid:
- m_distance = m_ray.length();
- break;
- case eGjkInside:
- m_distance = 0;
- break;
- default:
- {
- }
- }
- return (m_status);
- }
- bool EncloseOrigin()
- {
- switch (m_simplex->rank)
- {
- case 1:
- {
- for (U i = 0; i < 3; ++i)
- {
- btVector3 axis = btVector3(0, 0, 0);
- axis[i] = 1;
- appendvertice(*m_simplex, axis);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -axis);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- break;
- case 2:
- {
- const btVector3 d = m_simplex->c[1]->w - m_simplex->c[0]->w;
- for (U i = 0; i < 3; ++i)
- {
- btVector3 axis = btVector3(0, 0, 0);
- axis[i] = 1;
- const btVector3 p = btCross(d, axis);
- if (p.length2() > 0)
- {
- appendvertice(*m_simplex, p);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -p);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- }
- break;
- case 3:
- {
- const btVector3 n = btCross(m_simplex->c[1]->w - m_simplex->c[0]->w,
- m_simplex->c[2]->w - m_simplex->c[0]->w);
- if (n.length2() > 0)
- {
- appendvertice(*m_simplex, n);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- appendvertice(*m_simplex, -n);
- if (EncloseOrigin()) return (true);
- removevertice(*m_simplex);
- }
- }
- break;
- case 4:
- {
- if (btFabs(det(m_simplex->c[0]->w - m_simplex->c[3]->w,
- m_simplex->c[1]->w - m_simplex->c[3]->w,
- m_simplex->c[2]->w - m_simplex->c[3]->w)) > 0)
- return (true);
- }
- break;
- }
- return (false);
- }
- /* Internals */
- void getsupport(const btVector3& d, sSV& sv) const
- {
- sv.d = d / d.length();
- sv.w = m_shape.Support(sv.d);
- }
- void removevertice(sSimplex& simplex)
- {
- m_free[m_nfree++] = simplex.c[--simplex.rank];
- }
- void appendvertice(sSimplex& simplex, const btVector3& v)
- {
- simplex.p[simplex.rank] = 0;
- simplex.c[simplex.rank] = m_free[--m_nfree];
- getsupport(v, *simplex.c[simplex.rank++]);
- }
- static btScalar det(const btVector3& a, const btVector3& b, const btVector3& c)
- {
- return (a.y() * b.z() * c.x() + a.z() * b.x() * c.y() -
- a.x() * b.z() * c.y() - a.y() * b.x() * c.z() +
- a.x() * b.y() * c.z() - a.z() * b.y() * c.x());
- }
- static btScalar projectorigin(const btVector3& a,
- const btVector3& b,
- btScalar* w, U& m)
- {
- const btVector3 d = b - a;
- const btScalar l = d.length2();
- if (l > GJK_SIMPLEX2_EPS)
- {
- const btScalar t(l > 0 ? -btDot(a, d) / l : 0);
- if (t >= 1)
- {
- w[0] = 0;
- w[1] = 1;
- m = 2;
- return (b.length2());
- }
- else if (t <= 0)
- {
- w[0] = 1;
- w[1] = 0;
- m = 1;
- return (a.length2());
- }
- else
- {
- w[0] = 1 - (w[1] = t);
- m = 3;
- return ((a + d * t).length2());
- }
- }
- return (-1);
- }
- static btScalar projectorigin(const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- btScalar* w, U& m)
- {
- static const U imd3[] = {1, 2, 0};
- const btVector3* vt[] = {&a, &b, &c};
- const btVector3 dl[] = {a - b, b - c, c - a};
- const btVector3 n = btCross(dl[0], dl[1]);
- const btScalar l = n.length2();
- if (l > GJK_SIMPLEX3_EPS)
- {
- btScalar mindist = -1;
- btScalar subw[2] = {0.f, 0.f};
- U subm(0);
- for (U i = 0; i < 3; ++i)
- {
- if (btDot(*vt[i], btCross(dl[i], n)) > 0)
- {
- const U j = imd3[i];
- const btScalar subd(projectorigin(*vt[i], *vt[j], subw, subm));
- if ((mindist < 0) || (subd < mindist))
- {
- mindist = subd;
- m = static_cast<U>(((subm & 1) ? 1 << i : 0) + ((subm & 2) ? 1 << j : 0));
- w[i] = subw[0];
- w[j] = subw[1];
- w[imd3[j]] = 0;
- }
- }
- }
- if (mindist < 0)
- {
- const btScalar d = btDot(a, n);
- const btScalar s = btSqrt(l);
- const btVector3 p = n * (d / l);
- mindist = p.length2();
- m = 7;
- w[0] = (btCross(dl[1], b - p)).length() / s;
- w[1] = (btCross(dl[2], c - p)).length() / s;
- w[2] = 1 - (w[0] + w[1]);
- }
- return (mindist);
- }
- return (-1);
- }
- static btScalar projectorigin(const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- const btVector3& d,
- btScalar* w, U& m)
- {
- static const U imd3[] = {1, 2, 0};
- const btVector3* vt[] = {&a, &b, &c, &d};
- const btVector3 dl[] = {a - d, b - d, c - d};
- const btScalar vl = det(dl[0], dl[1], dl[2]);
- const bool ng = (vl * btDot(a, btCross(b - c, a - b))) <= 0;
- if (ng && (btFabs(vl) > GJK_SIMPLEX4_EPS))
- {
- btScalar mindist = -1;
- btScalar subw[3] = {0.f, 0.f, 0.f};
- U subm(0);
- for (U i = 0; i < 3; ++i)
- {
- const U j = imd3[i];
- const btScalar s = vl * btDot(d, btCross(dl[i], dl[j]));
- if (s > 0)
- {
- const btScalar subd = projectorigin(*vt[i], *vt[j], d, subw, subm);
- if ((mindist < 0) || (subd < mindist))
- {
- mindist = subd;
- m = static_cast<U>((subm & 1 ? 1 << i : 0) +
- (subm & 2 ? 1 << j : 0) +
- (subm & 4 ? 8 : 0));
- w[i] = subw[0];
- w[j] = subw[1];
- w[imd3[j]] = 0;
- w[3] = subw[2];
- }
- }
- }
- if (mindist < 0)
- {
- mindist = 0;
- m = 15;
- w[0] = det(c, b, d) / vl;
- w[1] = det(a, c, d) / vl;
- w[2] = det(b, a, d) / vl;
- w[3] = 1 - (w[0] + w[1] + w[2]);
- }
- return (mindist);
- }
- return (-1);
- }
-};
-
-enum eEpaStatus
-{
- eEpaValid,
- eEpaTouching,
- eEpaDegenerated,
- eEpaNonConvex,
- eEpaInvalidHull,
- eEpaOutOfFaces,
- eEpaOutOfVertices,
- eEpaAccuraryReached,
- eEpaFallBack,
- eEpaFailed
-};
-
-// EPA
-template <typename btConvexTemplate>
-struct EPA
-{
- /* Types */
-
- struct sFace
- {
- btVector3 n;
- btScalar d;
- typename GJK<btConvexTemplate>::sSV* c[3];
- sFace* f[3];
- sFace* l[2];
- U1 e[3];
- U1 pass;
- };
- struct sList
- {
- sFace* root;
- U count;
- sList() : root(0), count(0) {}
- };
- struct sHorizon
- {
- sFace* cf;
- sFace* ff;
- U nf;
- sHorizon() : cf(0), ff(0), nf(0) {}
- };
-
- /* Fields */
- eEpaStatus m_status;
- typename GJK<btConvexTemplate>::sSimplex m_result;
- btVector3 m_normal;
- btScalar m_depth;
- typename GJK<btConvexTemplate>::sSV m_sv_store[EPA_MAX_VERTICES];
- sFace m_fc_store[EPA_MAX_FACES];
- U m_nextsv;
- sList m_hull;
- sList m_stock;
- /* Methods */
- EPA()
- {
- Initialize();
- }
-
- static inline void bind(sFace* fa, U ea, sFace* fb, U eb)
- {
- fa->e[ea] = (U1)eb;
- fa->f[ea] = fb;
- fb->e[eb] = (U1)ea;
- fb->f[eb] = fa;
- }
- static inline void append(sList& list, sFace* face)
- {
- face->l[0] = 0;
- face->l[1] = list.root;
- if (list.root) list.root->l[0] = face;
- list.root = face;
- ++list.count;
- }
- static inline void remove(sList& list, sFace* face)
- {
- if (face->l[1]) face->l[1]->l[0] = face->l[0];
- if (face->l[0]) face->l[0]->l[1] = face->l[1];
- if (face == list.root) list.root = face->l[1];
- --list.count;
- }
-
- void Initialize()
- {
- m_status = eEpaFailed;
- m_normal = btVector3(0, 0, 0);
- m_depth = 0;
- m_nextsv = 0;
- for (U i = 0; i < EPA_MAX_FACES; ++i)
- {
- append(m_stock, &m_fc_store[EPA_MAX_FACES - i - 1]);
- }
- }
- eEpaStatus Evaluate(GJK<btConvexTemplate>& gjk, const btVector3& guess)
- {
- typename GJK<btConvexTemplate>::sSimplex& simplex = *gjk.m_simplex;
- if ((simplex.rank > 1) && gjk.EncloseOrigin())
- {
- /* Clean up */
- while (m_hull.root)
- {
- sFace* f = m_hull.root;
- remove(m_hull, f);
- append(m_stock, f);
- }
- m_status = eEpaValid;
- m_nextsv = 0;
- /* Orient simplex */
- if (gjk.det(simplex.c[0]->w - simplex.c[3]->w,
- simplex.c[1]->w - simplex.c[3]->w,
- simplex.c[2]->w - simplex.c[3]->w) < 0)
- {
- btSwap(simplex.c[0], simplex.c[1]);
- btSwap(simplex.p[0], simplex.p[1]);
- }
- /* Build initial hull */
- sFace* tetra[] = {newface(simplex.c[0], simplex.c[1], simplex.c[2], true),
- newface(simplex.c[1], simplex.c[0], simplex.c[3], true),
- newface(simplex.c[2], simplex.c[1], simplex.c[3], true),
- newface(simplex.c[0], simplex.c[2], simplex.c[3], true)};
- if (m_hull.count == 4)
- {
- sFace* best = findbest();
- sFace outer = *best;
- U pass = 0;
- U iterations = 0;
- bind(tetra[0], 0, tetra[1], 0);
- bind(tetra[0], 1, tetra[2], 0);
- bind(tetra[0], 2, tetra[3], 0);
- bind(tetra[1], 1, tetra[3], 2);
- bind(tetra[1], 2, tetra[2], 1);
- bind(tetra[2], 2, tetra[3], 1);
- m_status = eEpaValid;
- for (; iterations < EPA_MAX_ITERATIONS; ++iterations)
- {
- if (m_nextsv < EPA_MAX_VERTICES)
- {
- sHorizon horizon;
- typename GJK<btConvexTemplate>::sSV* w = &m_sv_store[m_nextsv++];
- bool valid = true;
- best->pass = (U1)(++pass);
- gjk.getsupport(best->n, *w);
- const btScalar wdist = btDot(best->n, w->w) - best->d;
- if (wdist > EPA_ACCURACY)
- {
- for (U j = 0; (j < 3) && valid; ++j)
- {
- valid &= expand(pass, w,
- best->f[j], best->e[j],
- horizon);
- }
- if (valid && (horizon.nf >= 3))
- {
- bind(horizon.cf, 1, horizon.ff, 2);
- remove(m_hull, best);
- append(m_stock, best);
- best = findbest();
- outer = *best;
- }
- else
- {
- m_status = eEpaInvalidHull;
- break;
- }
- }
- else
- {
- m_status = eEpaAccuraryReached;
- break;
- }
- }
- else
- {
- m_status = eEpaOutOfVertices;
- break;
- }
- }
- const btVector3 projection = outer.n * outer.d;
- m_normal = outer.n;
- m_depth = outer.d;
- m_result.rank = 3;
- m_result.c[0] = outer.c[0];
- m_result.c[1] = outer.c[1];
- m_result.c[2] = outer.c[2];
- m_result.p[0] = btCross(outer.c[1]->w - projection,
- outer.c[2]->w - projection)
- .length();
- m_result.p[1] = btCross(outer.c[2]->w - projection,
- outer.c[0]->w - projection)
- .length();
- m_result.p[2] = btCross(outer.c[0]->w - projection,
- outer.c[1]->w - projection)
- .length();
- const btScalar sum = m_result.p[0] + m_result.p[1] + m_result.p[2];
- m_result.p[0] /= sum;
- m_result.p[1] /= sum;
- m_result.p[2] /= sum;
- return (m_status);
- }
- }
- /* Fallback */
- m_status = eEpaFallBack;
- m_normal = -guess;
- const btScalar nl = m_normal.length();
- if (nl > 0)
- m_normal = m_normal / nl;
- else
- m_normal = btVector3(1, 0, 0);
- m_depth = 0;
- m_result.rank = 1;
- m_result.c[0] = simplex.c[0];
- m_result.p[0] = 1;
- return (m_status);
- }
- bool getedgedist(sFace* face, typename GJK<btConvexTemplate>::sSV* a, typename GJK<btConvexTemplate>::sSV* b, btScalar& dist)
- {
- const btVector3 ba = b->w - a->w;
- const btVector3 n_ab = btCross(ba, face->n); // Outward facing edge normal direction, on triangle plane
- const btScalar a_dot_nab = btDot(a->w, n_ab); // Only care about the sign to determine inside/outside, so not normalization required
-
- if (a_dot_nab < 0)
- {
- // Outside of edge a->b
-
- const btScalar ba_l2 = ba.length2();
- const btScalar a_dot_ba = btDot(a->w, ba);
- const btScalar b_dot_ba = btDot(b->w, ba);
-
- if (a_dot_ba > 0)
- {
- // Pick distance vertex a
- dist = a->w.length();
- }
- else if (b_dot_ba < 0)
- {
- // Pick distance vertex b
- dist = b->w.length();
- }
- else
- {
- // Pick distance to edge a->b
- const btScalar a_dot_b = btDot(a->w, b->w);
- dist = btSqrt(btMax((a->w.length2() * b->w.length2() - a_dot_b * a_dot_b) / ba_l2, (btScalar)0));
- }
-
- return true;
- }
-
- return false;
- }
- sFace* newface(typename GJK<btConvexTemplate>::sSV* a, typename GJK<btConvexTemplate>::sSV* b, typename GJK<btConvexTemplate>::sSV* c, bool forced)
- {
- if (m_stock.root)
- {
- sFace* face = m_stock.root;
- remove(m_stock, face);
- append(m_hull, face);
- face->pass = 0;
- face->c[0] = a;
- face->c[1] = b;
- face->c[2] = c;
- face->n = btCross(b->w - a->w, c->w - a->w);
- const btScalar l = face->n.length();
- const bool v = l > EPA_ACCURACY;
-
- if (v)
- {
- if (!(getedgedist(face, a, b, face->d) ||
- getedgedist(face, b, c, face->d) ||
- getedgedist(face, c, a, face->d)))
- {
- // Origin projects to the interior of the triangle
- // Use distance to triangle plane
- face->d = btDot(a->w, face->n) / l;
- }
-
- face->n /= l;
- if (forced || (face->d >= -EPA_PLANE_EPS))
- {
- return face;
- }
- else
- m_status = eEpaNonConvex;
- }
- else
- m_status = eEpaDegenerated;
-
- remove(m_hull, face);
- append(m_stock, face);
- return 0;
- }
- m_status = m_stock.root ? eEpaOutOfVertices : eEpaOutOfFaces;
- return 0;
- }
- sFace* findbest()
- {
- sFace* minf = m_hull.root;
- btScalar mind = minf->d * minf->d;
- for (sFace* f = minf->l[1]; f; f = f->l[1])
- {
- const btScalar sqd = f->d * f->d;
- if (sqd < mind)
- {
- minf = f;
- mind = sqd;
- }
- }
- return (minf);
- }
- bool expand(U pass, typename GJK<btConvexTemplate>::sSV* w, sFace* f, U e, sHorizon& horizon)
- {
- static const U i1m3[] = {1, 2, 0};
- static const U i2m3[] = {2, 0, 1};
- if (f->pass != pass)
- {
- const U e1 = i1m3[e];
- if ((btDot(f->n, w->w) - f->d) < -EPA_PLANE_EPS)
- {
- sFace* nf = newface(f->c[e1], f->c[e], w, false);
- if (nf)
- {
- bind(nf, 0, f, e);
- if (horizon.cf)
- bind(horizon.cf, 1, nf, 2);
- else
- horizon.ff = nf;
- horizon.cf = nf;
- ++horizon.nf;
- return (true);
- }
- }
- else
- {
- const U e2 = i2m3[e];
- f->pass = (U1)pass;
- if (expand(pass, w, f->f[e1], f->e[e1], horizon) &&
- expand(pass, w, f->f[e2], f->e[e2], horizon))
- {
- remove(m_hull, f);
- append(m_stock, f);
- return (true);
- }
- }
- }
- return (false);
- }
-};
-
-template <typename btConvexTemplate>
-static void Initialize(const btConvexTemplate& a, const btConvexTemplate& b,
- btGjkEpaSolver3::sResults& results,
- MinkowskiDiff<btConvexTemplate>& shape)
-{
- /* Results */
- results.witnesses[0] =
- results.witnesses[1] = btVector3(0, 0, 0);
- results.status = btGjkEpaSolver3::sResults::Separated;
- /* Shape */
-
- shape.m_toshape1 = b.getWorldTransform().getBasis().transposeTimes(a.getWorldTransform().getBasis());
- shape.m_toshape0 = a.getWorldTransform().inverseTimes(b.getWorldTransform());
-}
-
-//
-// Api
-//
-
-//
-template <typename btConvexTemplate>
-bool btGjkEpaSolver3_Distance(const btConvexTemplate& a, const btConvexTemplate& b,
- const btVector3& guess,
- btGjkEpaSolver3::sResults& results)
-{
- MinkowskiDiff<btConvexTemplate> shape(a, b);
- Initialize(a, b, results, shape);
- GJK<btConvexTemplate> gjk(a, b);
- eGjkStatus gjk_status = gjk.Evaluate(shape, guess);
- if (gjk_status == eGjkValid)
- {
- btVector3 w0 = btVector3(0, 0, 0);
- btVector3 w1 = btVector3(0, 0, 0);
- for (U i = 0; i < gjk.m_simplex->rank; ++i)
- {
- const btScalar p = gjk.m_simplex->p[i];
- w0 += shape.Support(gjk.m_simplex->c[i]->d, 0) * p;
- w1 += shape.Support(-gjk.m_simplex->c[i]->d, 1) * p;
- }
- results.witnesses[0] = a.getWorldTransform() * w0;
- results.witnesses[1] = a.getWorldTransform() * w1;
- results.normal = w0 - w1;
- results.distance = results.normal.length();
- results.normal /= results.distance > GJK_MIN_DISTANCE ? results.distance : 1;
- return (true);
- }
- else
- {
- results.status = gjk_status == eGjkInside ? btGjkEpaSolver3::sResults::Penetrating : btGjkEpaSolver3::sResults::GJK_Failed;
- return (false);
- }
-}
-
-template <typename btConvexTemplate>
-bool btGjkEpaSolver3_Penetration(const btConvexTemplate& a,
- const btConvexTemplate& b,
- const btVector3& guess,
- btGjkEpaSolver3::sResults& results)
-{
- MinkowskiDiff<btConvexTemplate> shape(a, b);
- Initialize(a, b, results, shape);
- GJK<btConvexTemplate> gjk(a, b);
- eGjkStatus gjk_status = gjk.Evaluate(shape, -guess);
- switch (gjk_status)
- {
- case eGjkInside:
- {
- EPA<btConvexTemplate> epa;
- eEpaStatus epa_status = epa.Evaluate(gjk, -guess);
- if (epa_status != eEpaFailed)
- {
- btVector3 w0 = btVector3(0, 0, 0);
- for (U i = 0; i < epa.m_result.rank; ++i)
- {
- w0 += shape.Support(epa.m_result.c[i]->d, 0) * epa.m_result.p[i];
- }
- results.status = btGjkEpaSolver3::sResults::Penetrating;
- results.witnesses[0] = a.getWorldTransform() * w0;
- results.witnesses[1] = a.getWorldTransform() * (w0 - epa.m_normal * epa.m_depth);
- results.normal = -epa.m_normal;
- results.distance = -epa.m_depth;
- return (true);
- }
- else
- results.status = btGjkEpaSolver3::sResults::EPA_Failed;
- }
- break;
- case eGjkFailed:
- results.status = btGjkEpaSolver3::sResults::GJK_Failed;
- break;
- default:
- {
- }
- }
- return (false);
-}
-
-#if 0
-int btComputeGjkEpaPenetration2(const btCollisionDescription& colDesc, btDistanceInfo* distInfo)
-{
- btGjkEpaSolver3::sResults results;
- btVector3 guess = colDesc.m_firstDir;
-
- bool res = btGjkEpaSolver3::Penetration(colDesc.m_objA,colDesc.m_objB,
- colDesc.m_transformA,colDesc.m_transformB,
- colDesc.m_localSupportFuncA,colDesc.m_localSupportFuncB,
- guess,
- results);
- if (res)
- {
- if ((results.status==btGjkEpaSolver3::sResults::Penetrating) || results.status==GJK::eStatus::Inside)
- {
- //normal could be 'swapped'
-
- distInfo->m_distance = results.distance;
- distInfo->m_normalBtoA = results.normal;
- btVector3 tmpNormalInB = results.witnesses[1]-results.witnesses[0];
- btScalar lenSqr = tmpNormalInB.length2();
- if (lenSqr <= (SIMD_EPSILON*SIMD_EPSILON))
- {
- tmpNormalInB = results.normal;
- lenSqr = results.normal.length2();
- }
-
- if (lenSqr > (SIMD_EPSILON*SIMD_EPSILON))
- {
- tmpNormalInB /= btSqrt(lenSqr);
- btScalar distance2 = -(results.witnesses[0]-results.witnesses[1]).length();
- //only replace valid penetrations when the result is deeper (check)
- //if ((distance2 < results.distance))
- {
- distInfo->m_distance = distance2;
- distInfo->m_pointOnA= results.witnesses[0];
- distInfo->m_pointOnB= results.witnesses[1];
- distInfo->m_normalBtoA= tmpNormalInB;
- return 0;
- }
- }
- }
-
- }
-
- return -1;
-}
-#endif
-
-template <typename btConvexTemplate, typename btDistanceInfoTemplate>
-int btComputeGjkDistance(const btConvexTemplate& a, const btConvexTemplate& b,
- const btGjkCollisionDescription& colDesc, btDistanceInfoTemplate* distInfo)
-{
- btGjkEpaSolver3::sResults results;
- btVector3 guess = colDesc.m_firstDir;
-
- bool isSeparated = btGjkEpaSolver3_Distance(a, b,
- guess,
- results);
- if (isSeparated)
- {
- distInfo->m_distance = results.distance;
- distInfo->m_pointOnA = results.witnesses[0];
- distInfo->m_pointOnB = results.witnesses[1];
- distInfo->m_normalBtoA = results.normal;
- return 0;
- }
-
- return -1;
-}
-
-/* Symbols cleanup */
-
-#undef GJK_MAX_ITERATIONS
-#undef GJK_ACCURARY
-#undef GJK_MIN_DISTANCE
-#undef GJK_DUPLICATED_EPS
-#undef GJK_SIMPLEX2_EPS
-#undef GJK_SIMPLEX3_EPS
-#undef GJK_SIMPLEX4_EPS
-
-#undef EPA_MAX_VERTICES
-#undef EPA_MAX_FACES
-#undef EPA_MAX_ITERATIONS
-#undef EPA_ACCURACY
-#undef EPA_FALLBACK
-#undef EPA_PLANE_EPS
-#undef EPA_INSIDE_EPS
-
-#endif //BT_GJK_EPA3_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp
deleted file mode 100644
index 07629229ab..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp
+++ /dev/null
@@ -1,81 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-EPA Copyright (c) Ricardo Padrela 2006
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "btGjkEpaPenetrationDepthSolver.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h"
-
-bool btGjkEpaPenetrationDepthSolver::calcPenDepth(btSimplexSolverInterface& simplexSolver,
- const btConvexShape* pConvexA, const btConvexShape* pConvexB,
- const btTransform& transformA, const btTransform& transformB,
- btVector3& v, btVector3& wWitnessOnA, btVector3& wWitnessOnB,
- class btIDebugDraw* debugDraw)
-{
- (void)debugDraw;
- (void)v;
- (void)simplexSolver;
-
- btVector3 guessVectors[] = {
- btVector3(transformB.getOrigin() - transformA.getOrigin()).safeNormalize(),
- btVector3(transformA.getOrigin() - transformB.getOrigin()).safeNormalize(),
- btVector3(0, 0, 1),
- btVector3(0, 1, 0),
- btVector3(1, 0, 0),
- btVector3(1, 1, 0),
- btVector3(1, 1, 1),
- btVector3(0, 1, 1),
- btVector3(1, 0, 1),
- };
-
- int numVectors = sizeof(guessVectors) / sizeof(btVector3);
-
- for (int i = 0; i < numVectors; i++)
- {
- simplexSolver.reset();
- btVector3 guessVector = guessVectors[i];
-
- btGjkEpaSolver2::sResults results;
-
- if (btGjkEpaSolver2::Penetration(pConvexA, transformA,
- pConvexB, transformB,
- guessVector, results))
-
- {
- wWitnessOnA = results.witnesses[0];
- wWitnessOnB = results.witnesses[1];
- v = results.normal;
- return true;
- }
- else
- {
- if (btGjkEpaSolver2::Distance(pConvexA, transformA, pConvexB, transformB, guessVector, results))
- {
- wWitnessOnA = results.witnesses[0];
- wWitnessOnB = results.witnesses[1];
- v = results.normal;
- return false;
- }
- }
- }
-
- //failed to find a distance/penetration
- wWitnessOnA.setValue(0, 0, 0);
- wWitnessOnB.setValue(0, 0, 0);
- v.setValue(0, 0, 0);
- return false;
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h
deleted file mode 100644
index 92d6df1729..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-EPA Copyright (c) Ricardo Padrela 2006
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-#ifndef BT_GJP_EPA_PENETRATION_DEPTH_H
-#define BT_GJP_EPA_PENETRATION_DEPTH_H
-
-#include "btConvexPenetrationDepthSolver.h"
-
-///EpaPenetrationDepthSolver uses the Expanding Polytope Algorithm to
-///calculate the penetration depth between two convex shapes.
-class btGjkEpaPenetrationDepthSolver : public btConvexPenetrationDepthSolver
-{
-public:
- btGjkEpaPenetrationDepthSolver()
- {
- }
-
- bool calcPenDepth(btSimplexSolverInterface& simplexSolver,
- const btConvexShape* pConvexA, const btConvexShape* pConvexB,
- const btTransform& transformA, const btTransform& transformB,
- btVector3& v, btVector3& wWitnessOnA, btVector3& wWitnessOnB,
- class btIDebugDraw* debugDraw);
-
-private:
-};
-
-#endif // BT_GJP_EPA_PENETRATION_DEPTH_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp
deleted file mode 100644
index 5af93cb2fb..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp
+++ /dev/null
@@ -1,1183 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGjkPairDetector.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h"
-#include "BulletCollision/NarrowPhaseCollision/btConvexPenetrationDepthSolver.h"
-
-#if defined(DEBUG) || defined(_DEBUG)
-//#define TEST_NON_VIRTUAL 1
-#include <stdio.h> //for debug printf
-#ifdef __SPU__
-#include <spu_printf.h>
-#define printf spu_printf
-#endif //__SPU__
-#endif
-
-//must be above the machine epsilon
-#ifdef BT_USE_DOUBLE_PRECISION
-#define REL_ERROR2 btScalar(1.0e-12)
-btScalar gGjkEpaPenetrationTolerance = 1.0e-12;
-#else
-#define REL_ERROR2 btScalar(1.0e-6)
-btScalar gGjkEpaPenetrationTolerance = 0.001;
-#endif
-
-
-btGjkPairDetector::btGjkPairDetector(const btConvexShape *objectA, const btConvexShape *objectB, btSimplexSolverInterface *simplexSolver, btConvexPenetrationDepthSolver *penetrationDepthSolver)
- : m_cachedSeparatingAxis(btScalar(0.), btScalar(1.), btScalar(0.)),
- m_penetrationDepthSolver(penetrationDepthSolver),
- m_simplexSolver(simplexSolver),
- m_minkowskiA(objectA),
- m_minkowskiB(objectB),
- m_shapeTypeA(objectA->getShapeType()),
- m_shapeTypeB(objectB->getShapeType()),
- m_marginA(objectA->getMargin()),
- m_marginB(objectB->getMargin()),
- m_ignoreMargin(false),
- m_lastUsedMethod(-1),
- m_catchDegeneracies(1),
- m_fixContactNormalDirection(1)
-{
-}
-btGjkPairDetector::btGjkPairDetector(const btConvexShape *objectA, const btConvexShape *objectB, int shapeTypeA, int shapeTypeB, btScalar marginA, btScalar marginB, btSimplexSolverInterface *simplexSolver, btConvexPenetrationDepthSolver *penetrationDepthSolver)
- : m_cachedSeparatingAxis(btScalar(0.), btScalar(1.), btScalar(0.)),
- m_penetrationDepthSolver(penetrationDepthSolver),
- m_simplexSolver(simplexSolver),
- m_minkowskiA(objectA),
- m_minkowskiB(objectB),
- m_shapeTypeA(shapeTypeA),
- m_shapeTypeB(shapeTypeB),
- m_marginA(marginA),
- m_marginB(marginB),
- m_ignoreMargin(false),
- m_lastUsedMethod(-1),
- m_catchDegeneracies(1),
- m_fixContactNormalDirection(1)
-{
-}
-
-void btGjkPairDetector::getClosestPoints(const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw, bool swapResults)
-{
- (void)swapResults;
-
- getClosestPointsNonVirtual(input, output, debugDraw);
-}
-
-static void btComputeSupport(const btConvexShape *convexA, const btTransform &localTransA, const btConvexShape *convexB, const btTransform &localTransB, const btVector3 &dir, bool check2d, btVector3 &supAworld, btVector3 &supBworld, btVector3 &aMinb)
-{
- btVector3 separatingAxisInA = (dir)*localTransA.getBasis();
- btVector3 separatingAxisInB = (-dir) * localTransB.getBasis();
-
- btVector3 pInANoMargin = convexA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
- btVector3 qInBNoMargin = convexB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
-
- btVector3 pInA = pInANoMargin;
- btVector3 qInB = qInBNoMargin;
-
- supAworld = localTransA(pInA);
- supBworld = localTransB(qInB);
-
- if (check2d)
- {
- supAworld[2] = 0.f;
- supBworld[2] = 0.f;
- }
-
- aMinb = supAworld - supBworld;
-}
-
-struct btSupportVector
-{
- btVector3 v; //!< Support point in minkowski sum
- btVector3 v1; //!< Support point in obj1
- btVector3 v2; //!< Support point in obj2
-};
-
-struct btSimplex
-{
- btSupportVector ps[4];
- int last; //!< index of last added point
-};
-
-static btVector3 ccd_vec3_origin(0, 0, 0);
-
-inline void btSimplexInit(btSimplex *s)
-{
- s->last = -1;
-}
-
-inline int btSimplexSize(const btSimplex *s)
-{
- return s->last + 1;
-}
-
-inline const btSupportVector *btSimplexPoint(const btSimplex *s, int idx)
-{
- // here is no check on boundaries
- return &s->ps[idx];
-}
-inline void btSupportCopy(btSupportVector *d, const btSupportVector *s)
-{
- *d = *s;
-}
-
-inline void btVec3Copy(btVector3 *v, const btVector3 *w)
-{
- *v = *w;
-}
-
-inline void ccdVec3Add(btVector3 *v, const btVector3 *w)
-{
- v->m_floats[0] += w->m_floats[0];
- v->m_floats[1] += w->m_floats[1];
- v->m_floats[2] += w->m_floats[2];
-}
-
-inline void ccdVec3Sub(btVector3 *v, const btVector3 *w)
-{
- *v -= *w;
-}
-inline void btVec3Sub2(btVector3 *d, const btVector3 *v, const btVector3 *w)
-{
- *d = (*v) - (*w);
-}
-inline btScalar btVec3Dot(const btVector3 *a, const btVector3 *b)
-{
- btScalar dot;
- dot = a->dot(*b);
-
- return dot;
-}
-
-inline btScalar ccdVec3Dist2(const btVector3 *a, const btVector3 *b)
-{
- btVector3 ab;
- btVec3Sub2(&ab, a, b);
- return btVec3Dot(&ab, &ab);
-}
-
-inline void btVec3Scale(btVector3 *d, btScalar k)
-{
- d->m_floats[0] *= k;
- d->m_floats[1] *= k;
- d->m_floats[2] *= k;
-}
-
-inline void btVec3Cross(btVector3 *d, const btVector3 *a, const btVector3 *b)
-{
- d->m_floats[0] = (a->m_floats[1] * b->m_floats[2]) - (a->m_floats[2] * b->m_floats[1]);
- d->m_floats[1] = (a->m_floats[2] * b->m_floats[0]) - (a->m_floats[0] * b->m_floats[2]);
- d->m_floats[2] = (a->m_floats[0] * b->m_floats[1]) - (a->m_floats[1] * b->m_floats[0]);
-}
-
-inline void btTripleCross(const btVector3 *a, const btVector3 *b,
- const btVector3 *c, btVector3 *d)
-{
- btVector3 e;
- btVec3Cross(&e, a, b);
- btVec3Cross(d, &e, c);
-}
-
-inline int ccdEq(btScalar _a, btScalar _b)
-{
- btScalar ab;
- btScalar a, b;
-
- ab = btFabs(_a - _b);
- if (btFabs(ab) < SIMD_EPSILON)
- return 1;
-
- a = btFabs(_a);
- b = btFabs(_b);
- if (b > a)
- {
- return ab < SIMD_EPSILON * b;
- }
- else
- {
- return ab < SIMD_EPSILON * a;
- }
-}
-
-btScalar ccdVec3X(const btVector3 *v)
-{
- return v->x();
-}
-
-btScalar ccdVec3Y(const btVector3 *v)
-{
- return v->y();
-}
-
-btScalar ccdVec3Z(const btVector3 *v)
-{
- return v->z();
-}
-inline int btVec3Eq(const btVector3 *a, const btVector3 *b)
-{
- return ccdEq(ccdVec3X(a), ccdVec3X(b)) && ccdEq(ccdVec3Y(a), ccdVec3Y(b)) && ccdEq(ccdVec3Z(a), ccdVec3Z(b));
-}
-
-inline void btSimplexAdd(btSimplex *s, const btSupportVector *v)
-{
- // here is no check on boundaries in sake of speed
- ++s->last;
- btSupportCopy(s->ps + s->last, v);
-}
-
-inline void btSimplexSet(btSimplex *s, size_t pos, const btSupportVector *a)
-{
- btSupportCopy(s->ps + pos, a);
-}
-
-inline void btSimplexSetSize(btSimplex *s, int size)
-{
- s->last = size - 1;
-}
-
-inline const btSupportVector *ccdSimplexLast(const btSimplex *s)
-{
- return btSimplexPoint(s, s->last);
-}
-
-inline int ccdSign(btScalar val)
-{
- if (btFuzzyZero(val))
- {
- return 0;
- }
- else if (val < btScalar(0))
- {
- return -1;
- }
- return 1;
-}
-
-inline btScalar btVec3PointSegmentDist2(const btVector3 *P,
- const btVector3 *x0,
- const btVector3 *b,
- btVector3 *witness)
-{
- // The computation comes from solving equation of segment:
- // S(t) = x0 + t.d
- // where - x0 is initial point of segment
- // - d is direction of segment from x0 (|d| > 0)
- // - t belongs to <0, 1> interval
- //
- // Than, distance from a segment to some point P can be expressed:
- // D(t) = |x0 + t.d - P|^2
- // which is distance from any point on segment. Minimization
- // of this function brings distance from P to segment.
- // Minimization of D(t) leads to simple quadratic equation that's
- // solving is straightforward.
- //
- // Bonus of this method is witness point for free.
-
- btScalar dist, t;
- btVector3 d, a;
-
- // direction of segment
- btVec3Sub2(&d, b, x0);
-
- // precompute vector from P to x0
- btVec3Sub2(&a, x0, P);
-
- t = -btScalar(1.) * btVec3Dot(&a, &d);
- t /= btVec3Dot(&d, &d);
-
- if (t < btScalar(0) || btFuzzyZero(t))
- {
- dist = ccdVec3Dist2(x0, P);
- if (witness)
- btVec3Copy(witness, x0);
- }
- else if (t > btScalar(1) || ccdEq(t, btScalar(1)))
- {
- dist = ccdVec3Dist2(b, P);
- if (witness)
- btVec3Copy(witness, b);
- }
- else
- {
- if (witness)
- {
- btVec3Copy(witness, &d);
- btVec3Scale(witness, t);
- ccdVec3Add(witness, x0);
- dist = ccdVec3Dist2(witness, P);
- }
- else
- {
- // recycling variables
- btVec3Scale(&d, t);
- ccdVec3Add(&d, &a);
- dist = btVec3Dot(&d, &d);
- }
- }
-
- return dist;
-}
-
-btScalar btVec3PointTriDist2(const btVector3 *P,
- const btVector3 *x0, const btVector3 *B,
- const btVector3 *C,
- btVector3 *witness)
-{
- // Computation comes from analytic expression for triangle (x0, B, C)
- // T(s, t) = x0 + s.d1 + t.d2, where d1 = B - x0 and d2 = C - x0 and
- // Then equation for distance is:
- // D(s, t) = | T(s, t) - P |^2
- // This leads to minimization of quadratic function of two variables.
- // The solution from is taken only if s is between 0 and 1, t is
- // between 0 and 1 and t + s < 1, otherwise distance from segment is
- // computed.
-
- btVector3 d1, d2, a;
- double u, v, w, p, q, r;
- double s, t, dist, dist2;
- btVector3 witness2;
-
- btVec3Sub2(&d1, B, x0);
- btVec3Sub2(&d2, C, x0);
- btVec3Sub2(&a, x0, P);
-
- u = btVec3Dot(&a, &a);
- v = btVec3Dot(&d1, &d1);
- w = btVec3Dot(&d2, &d2);
- p = btVec3Dot(&a, &d1);
- q = btVec3Dot(&a, &d2);
- r = btVec3Dot(&d1, &d2);
-
- s = (q * r - w * p) / (w * v - r * r);
- t = (-s * r - q) / w;
-
- if ((btFuzzyZero(s) || s > btScalar(0)) && (ccdEq(s, btScalar(1)) || s < btScalar(1)) && (btFuzzyZero(t) || t > btScalar(0)) && (ccdEq(t, btScalar(1)) || t < btScalar(1)) && (ccdEq(t + s, btScalar(1)) || t + s < btScalar(1)))
- {
- if (witness)
- {
- btVec3Scale(&d1, s);
- btVec3Scale(&d2, t);
- btVec3Copy(witness, x0);
- ccdVec3Add(witness, &d1);
- ccdVec3Add(witness, &d2);
-
- dist = ccdVec3Dist2(witness, P);
- }
- else
- {
- dist = s * s * v;
- dist += t * t * w;
- dist += btScalar(2.) * s * t * r;
- dist += btScalar(2.) * s * p;
- dist += btScalar(2.) * t * q;
- dist += u;
- }
- }
- else
- {
- dist = btVec3PointSegmentDist2(P, x0, B, witness);
-
- dist2 = btVec3PointSegmentDist2(P, x0, C, &witness2);
- if (dist2 < dist)
- {
- dist = dist2;
- if (witness)
- btVec3Copy(witness, &witness2);
- }
-
- dist2 = btVec3PointSegmentDist2(P, B, C, &witness2);
- if (dist2 < dist)
- {
- dist = dist2;
- if (witness)
- btVec3Copy(witness, &witness2);
- }
- }
-
- return dist;
-}
-
-static int btDoSimplex2(btSimplex *simplex, btVector3 *dir)
-{
- const btSupportVector *A, *B;
- btVector3 AB, AO, tmp;
- btScalar dot;
-
- // get last added as A
- A = ccdSimplexLast(simplex);
- // get the other point
- B = btSimplexPoint(simplex, 0);
- // compute AB oriented segment
- btVec3Sub2(&AB, &B->v, &A->v);
- // compute AO vector
- btVec3Copy(&AO, &A->v);
- btVec3Scale(&AO, -btScalar(1));
-
- // dot product AB . AO
- dot = btVec3Dot(&AB, &AO);
-
- // check if origin doesn't lie on AB segment
- btVec3Cross(&tmp, &AB, &AO);
- if (btFuzzyZero(btVec3Dot(&tmp, &tmp)) && dot > btScalar(0))
- {
- return 1;
- }
-
- // check if origin is in area where AB segment is
- if (btFuzzyZero(dot) || dot < btScalar(0))
- {
- // origin is in outside are of A
- btSimplexSet(simplex, 0, A);
- btSimplexSetSize(simplex, 1);
- btVec3Copy(dir, &AO);
- }
- else
- {
- // origin is in area where AB segment is
-
- // keep simplex untouched and set direction to
- // AB x AO x AB
- btTripleCross(&AB, &AO, &AB, dir);
- }
-
- return 0;
-}
-
-static int btDoSimplex3(btSimplex *simplex, btVector3 *dir)
-{
- const btSupportVector *A, *B, *C;
- btVector3 AO, AB, AC, ABC, tmp;
- btScalar dot, dist;
-
- // get last added as A
- A = ccdSimplexLast(simplex);
- // get the other points
- B = btSimplexPoint(simplex, 1);
- C = btSimplexPoint(simplex, 0);
-
- // check touching contact
- dist = btVec3PointTriDist2(&ccd_vec3_origin, &A->v, &B->v, &C->v, 0);
- if (btFuzzyZero(dist))
- {
- return 1;
- }
-
- // check if triangle is really triangle (has area > 0)
- // if not simplex can't be expanded and thus no itersection is found
- if (btVec3Eq(&A->v, &B->v) || btVec3Eq(&A->v, &C->v))
- {
- return -1;
- }
-
- // compute AO vector
- btVec3Copy(&AO, &A->v);
- btVec3Scale(&AO, -btScalar(1));
-
- // compute AB and AC segments and ABC vector (perpendircular to triangle)
- btVec3Sub2(&AB, &B->v, &A->v);
- btVec3Sub2(&AC, &C->v, &A->v);
- btVec3Cross(&ABC, &AB, &AC);
-
- btVec3Cross(&tmp, &ABC, &AC);
- dot = btVec3Dot(&tmp, &AO);
- if (btFuzzyZero(dot) || dot > btScalar(0))
- {
- dot = btVec3Dot(&AC, &AO);
- if (btFuzzyZero(dot) || dot > btScalar(0))
- {
- // C is already in place
- btSimplexSet(simplex, 1, A);
- btSimplexSetSize(simplex, 2);
- btTripleCross(&AC, &AO, &AC, dir);
- }
- else
- {
- dot = btVec3Dot(&AB, &AO);
- if (btFuzzyZero(dot) || dot > btScalar(0))
- {
- btSimplexSet(simplex, 0, B);
- btSimplexSet(simplex, 1, A);
- btSimplexSetSize(simplex, 2);
- btTripleCross(&AB, &AO, &AB, dir);
- }
- else
- {
- btSimplexSet(simplex, 0, A);
- btSimplexSetSize(simplex, 1);
- btVec3Copy(dir, &AO);
- }
- }
- }
- else
- {
- btVec3Cross(&tmp, &AB, &ABC);
- dot = btVec3Dot(&tmp, &AO);
- if (btFuzzyZero(dot) || dot > btScalar(0))
- {
- dot = btVec3Dot(&AB, &AO);
- if (btFuzzyZero(dot) || dot > btScalar(0))
- {
- btSimplexSet(simplex, 0, B);
- btSimplexSet(simplex, 1, A);
- btSimplexSetSize(simplex, 2);
- btTripleCross(&AB, &AO, &AB, dir);
- }
- else
- {
- btSimplexSet(simplex, 0, A);
- btSimplexSetSize(simplex, 1);
- btVec3Copy(dir, &AO);
- }
- }
- else
- {
- dot = btVec3Dot(&ABC, &AO);
- if (btFuzzyZero(dot) || dot > btScalar(0))
- {
- btVec3Copy(dir, &ABC);
- }
- else
- {
- btSupportVector tmp;
- btSupportCopy(&tmp, C);
- btSimplexSet(simplex, 0, B);
- btSimplexSet(simplex, 1, &tmp);
-
- btVec3Copy(dir, &ABC);
- btVec3Scale(dir, -btScalar(1));
- }
- }
- }
-
- return 0;
-}
-
-static int btDoSimplex4(btSimplex *simplex, btVector3 *dir)
-{
- const btSupportVector *A, *B, *C, *D;
- btVector3 AO, AB, AC, AD, ABC, ACD, ADB;
- int B_on_ACD, C_on_ADB, D_on_ABC;
- int AB_O, AC_O, AD_O;
- btScalar dist;
-
- // get last added as A
- A = ccdSimplexLast(simplex);
- // get the other points
- B = btSimplexPoint(simplex, 2);
- C = btSimplexPoint(simplex, 1);
- D = btSimplexPoint(simplex, 0);
-
- // check if tetrahedron is really tetrahedron (has volume > 0)
- // if it is not simplex can't be expanded and thus no intersection is
- // found
- dist = btVec3PointTriDist2(&A->v, &B->v, &C->v, &D->v, 0);
- if (btFuzzyZero(dist))
- {
- return -1;
- }
-
- // check if origin lies on some of tetrahedron's face - if so objects
- // intersect
- dist = btVec3PointTriDist2(&ccd_vec3_origin, &A->v, &B->v, &C->v, 0);
- if (btFuzzyZero(dist))
- return 1;
- dist = btVec3PointTriDist2(&ccd_vec3_origin, &A->v, &C->v, &D->v, 0);
- if (btFuzzyZero(dist))
- return 1;
- dist = btVec3PointTriDist2(&ccd_vec3_origin, &A->v, &B->v, &D->v, 0);
- if (btFuzzyZero(dist))
- return 1;
- dist = btVec3PointTriDist2(&ccd_vec3_origin, &B->v, &C->v, &D->v, 0);
- if (btFuzzyZero(dist))
- return 1;
-
- // compute AO, AB, AC, AD segments and ABC, ACD, ADB normal vectors
- btVec3Copy(&AO, &A->v);
- btVec3Scale(&AO, -btScalar(1));
- btVec3Sub2(&AB, &B->v, &A->v);
- btVec3Sub2(&AC, &C->v, &A->v);
- btVec3Sub2(&AD, &D->v, &A->v);
- btVec3Cross(&ABC, &AB, &AC);
- btVec3Cross(&ACD, &AC, &AD);
- btVec3Cross(&ADB, &AD, &AB);
-
- // side (positive or negative) of B, C, D relative to planes ACD, ADB
- // and ABC respectively
- B_on_ACD = ccdSign(btVec3Dot(&ACD, &AB));
- C_on_ADB = ccdSign(btVec3Dot(&ADB, &AC));
- D_on_ABC = ccdSign(btVec3Dot(&ABC, &AD));
-
- // whether origin is on same side of ACD, ADB, ABC as B, C, D
- // respectively
- AB_O = ccdSign(btVec3Dot(&ACD, &AO)) == B_on_ACD;
- AC_O = ccdSign(btVec3Dot(&ADB, &AO)) == C_on_ADB;
- AD_O = ccdSign(btVec3Dot(&ABC, &AO)) == D_on_ABC;
-
- if (AB_O && AC_O && AD_O)
- {
- // origin is in tetrahedron
- return 1;
- // rearrange simplex to triangle and call btDoSimplex3()
- }
- else if (!AB_O)
- {
- // B is farthest from the origin among all of the tetrahedron's
- // points, so remove it from the list and go on with the triangle
- // case
-
- // D and C are in place
- btSimplexSet(simplex, 2, A);
- btSimplexSetSize(simplex, 3);
- }
- else if (!AC_O)
- {
- // C is farthest
- btSimplexSet(simplex, 1, D);
- btSimplexSet(simplex, 0, B);
- btSimplexSet(simplex, 2, A);
- btSimplexSetSize(simplex, 3);
- }
- else
- { // (!AD_O)
- btSimplexSet(simplex, 0, C);
- btSimplexSet(simplex, 1, B);
- btSimplexSet(simplex, 2, A);
- btSimplexSetSize(simplex, 3);
- }
-
- return btDoSimplex3(simplex, dir);
-}
-
-static int btDoSimplex(btSimplex *simplex, btVector3 *dir)
-{
- if (btSimplexSize(simplex) == 2)
- {
- // simplex contains segment only one segment
- return btDoSimplex2(simplex, dir);
- }
- else if (btSimplexSize(simplex) == 3)
- {
- // simplex contains triangle
- return btDoSimplex3(simplex, dir);
- }
- else
- { // btSimplexSize(simplex) == 4
- // tetrahedron - this is the only shape which can encapsule origin
- // so btDoSimplex4() also contains test on it
- return btDoSimplex4(simplex, dir);
- }
-}
-
-#ifdef __SPU__
-void btGjkPairDetector::getClosestPointsNonVirtual(const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw)
-#else
-void btGjkPairDetector::getClosestPointsNonVirtual(const ClosestPointInput &input, Result &output, class btIDebugDraw *debugDraw)
-#endif
-{
- m_cachedSeparatingDistance = 0.f;
-
- btScalar distance = btScalar(0.);
- btVector3 normalInB(btScalar(0.), btScalar(0.), btScalar(0.));
-
- btVector3 pointOnA, pointOnB;
- btTransform localTransA = input.m_transformA;
- btTransform localTransB = input.m_transformB;
- btVector3 positionOffset = (localTransA.getOrigin() + localTransB.getOrigin()) * btScalar(0.5);
- localTransA.getOrigin() -= positionOffset;
- localTransB.getOrigin() -= positionOffset;
-
- bool check2d = m_minkowskiA->isConvex2d() && m_minkowskiB->isConvex2d();
-
- btScalar marginA = m_marginA;
- btScalar marginB = m_marginB;
-
-
- //for CCD we don't use margins
- if (m_ignoreMargin)
- {
- marginA = btScalar(0.);
- marginB = btScalar(0.);
- }
-
- m_curIter = 0;
- int gGjkMaxIter = 1000; //this is to catch invalid input, perhaps check for #NaN?
- m_cachedSeparatingAxis.setValue(0, 1, 0);
-
- bool isValid = false;
- bool checkSimplex = false;
- bool checkPenetration = true;
- m_degenerateSimplex = 0;
-
- m_lastUsedMethod = -1;
- int status = -2;
- btVector3 orgNormalInB(0, 0, 0);
- btScalar margin = marginA + marginB;
-
- //we add a separate implementation to check if the convex shapes intersect
- //See also "Real-time Collision Detection with Implicit Objects" by Leif Olvang
- //Todo: integrate the simplex penetration check directly inside the Bullet btVoronoiSimplexSolver
- //and remove this temporary code from libCCD
- //this fixes issue https://github.com/bulletphysics/bullet3/issues/1703
- //note, for large differences in shapes, use double precision build!
- {
- btScalar squaredDistance = BT_LARGE_FLOAT;
- btScalar delta = btScalar(0.);
-
- btSimplex simplex1;
- btSimplex *simplex = &simplex1;
- btSimplexInit(simplex);
-
- btVector3 dir(1, 0, 0);
-
- {
- btVector3 lastSupV;
- btVector3 supAworld;
- btVector3 supBworld;
- btComputeSupport(m_minkowskiA, localTransA, m_minkowskiB, localTransB, dir, check2d, supAworld, supBworld, lastSupV);
-
- btSupportVector last;
- last.v = lastSupV;
- last.v1 = supAworld;
- last.v2 = supBworld;
-
- btSimplexAdd(simplex, &last);
-
- dir = -lastSupV;
-
- // start iterations
- for (int iterations = 0; iterations < gGjkMaxIter; iterations++)
- {
- // obtain support point
- btComputeSupport(m_minkowskiA, localTransA, m_minkowskiB, localTransB, dir, check2d, supAworld, supBworld, lastSupV);
-
- // check if farthest point in Minkowski difference in direction dir
- // isn't somewhere before origin (the test on negative dot product)
- // - because if it is, objects are not intersecting at all.
- btScalar delta = lastSupV.dot(dir);
- if (delta < 0)
- {
- //no intersection, besides margin
- status = -1;
- break;
- }
-
- // add last support vector to simplex
- last.v = lastSupV;
- last.v1 = supAworld;
- last.v2 = supBworld;
-
- btSimplexAdd(simplex, &last);
-
- // if btDoSimplex returns 1 if objects intersect, -1 if objects don't
- // intersect and 0 if algorithm should continue
-
- btVector3 newDir;
- int do_simplex_res = btDoSimplex(simplex, &dir);
-
- if (do_simplex_res == 1)
- {
- status = 0; // intersection found
- break;
- }
- else if (do_simplex_res == -1)
- {
- // intersection not found
- status = -1;
- break;
- }
-
- if (btFuzzyZero(btVec3Dot(&dir, &dir)))
- {
- // intersection not found
- status = -1;
- }
-
- if (dir.length2() < SIMD_EPSILON)
- {
- //no intersection, besides margin
- status = -1;
- break;
- }
-
- if (dir.fuzzyZero())
- {
- // intersection not found
- status = -1;
- break;
- }
- }
- }
-
- m_simplexSolver->reset();
- if (status == 0)
- {
- //status = 0;
- //printf("Intersect!\n");
- }
-
- if (status == -1)
- {
- //printf("not intersect\n");
- }
- //printf("dir=%f,%f,%f\n",dir[0],dir[1],dir[2]);
- if (1)
- {
- for (;;)
- //while (true)
- {
- btVector3 separatingAxisInA = (-m_cachedSeparatingAxis) * localTransA.getBasis();
- btVector3 separatingAxisInB = m_cachedSeparatingAxis * localTransB.getBasis();
-
- btVector3 pInA = m_minkowskiA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
- btVector3 qInB = m_minkowskiB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
-
- btVector3 pWorld = localTransA(pInA);
- btVector3 qWorld = localTransB(qInB);
-
- if (check2d)
- {
- pWorld[2] = 0.f;
- qWorld[2] = 0.f;
- }
-
- btVector3 w = pWorld - qWorld;
- delta = m_cachedSeparatingAxis.dot(w);
-
- // potential exit, they don't overlap
- if ((delta > btScalar(0.0)) && (delta * delta > squaredDistance * input.m_maximumDistanceSquared))
- {
- m_degenerateSimplex = 10;
- checkSimplex = true;
- //checkPenetration = false;
- break;
- }
-
- //exit 0: the new point is already in the simplex, or we didn't come any closer
- if (m_simplexSolver->inSimplex(w))
- {
- m_degenerateSimplex = 1;
- checkSimplex = true;
- break;
- }
- // are we getting any closer ?
- btScalar f0 = squaredDistance - delta;
- btScalar f1 = squaredDistance * REL_ERROR2;
-
- if (f0 <= f1)
- {
- if (f0 <= btScalar(0.))
- {
- m_degenerateSimplex = 2;
- }
- else
- {
- m_degenerateSimplex = 11;
- }
- checkSimplex = true;
- break;
- }
-
- //add current vertex to simplex
- m_simplexSolver->addVertex(w, pWorld, qWorld);
- btVector3 newCachedSeparatingAxis;
-
- //calculate the closest point to the origin (update vector v)
- if (!m_simplexSolver->closest(newCachedSeparatingAxis))
- {
- m_degenerateSimplex = 3;
- checkSimplex = true;
- break;
- }
-
- if (newCachedSeparatingAxis.length2() < REL_ERROR2)
- {
- m_cachedSeparatingAxis = newCachedSeparatingAxis;
- m_degenerateSimplex = 6;
- checkSimplex = true;
- break;
- }
-
- btScalar previousSquaredDistance = squaredDistance;
- squaredDistance = newCachedSeparatingAxis.length2();
-#if 0
- ///warning: this termination condition leads to some problems in 2d test case see Bullet/Demos/Box2dDemo
- if (squaredDistance > previousSquaredDistance)
- {
- m_degenerateSimplex = 7;
- squaredDistance = previousSquaredDistance;
- checkSimplex = false;
- break;
- }
-#endif //
-
- //redundant m_simplexSolver->compute_points(pointOnA, pointOnB);
-
- //are we getting any closer ?
- if (previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance)
- {
- // m_simplexSolver->backup_closest(m_cachedSeparatingAxis);
- checkSimplex = true;
- m_degenerateSimplex = 12;
-
- break;
- }
-
- m_cachedSeparatingAxis = newCachedSeparatingAxis;
-
- //degeneracy, this is typically due to invalid/uninitialized worldtransforms for a btCollisionObject
- if (m_curIter++ > gGjkMaxIter)
- {
-#if defined(DEBUG) || defined(_DEBUG)
-
- printf("btGjkPairDetector maxIter exceeded:%i\n", m_curIter);
- printf("sepAxis=(%f,%f,%f), squaredDistance = %f, shapeTypeA=%i,shapeTypeB=%i\n",
- m_cachedSeparatingAxis.getX(),
- m_cachedSeparatingAxis.getY(),
- m_cachedSeparatingAxis.getZ(),
- squaredDistance,
- m_minkowskiA->getShapeType(),
- m_minkowskiB->getShapeType());
-
-#endif
- break;
- }
-
- bool check = (!m_simplexSolver->fullSimplex());
- //bool check = (!m_simplexSolver->fullSimplex() && squaredDistance > SIMD_EPSILON * m_simplexSolver->maxVertex());
-
- if (!check)
- {
- //do we need this backup_closest here ?
- // m_simplexSolver->backup_closest(m_cachedSeparatingAxis);
- m_degenerateSimplex = 13;
- break;
- }
- }
-
- if (checkSimplex)
- {
- m_simplexSolver->compute_points(pointOnA, pointOnB);
- normalInB = m_cachedSeparatingAxis;
-
- btScalar lenSqr = m_cachedSeparatingAxis.length2();
-
- //valid normal
- if (lenSqr < REL_ERROR2)
- {
- m_degenerateSimplex = 5;
- }
- if (lenSqr > SIMD_EPSILON * SIMD_EPSILON)
- {
- btScalar rlen = btScalar(1.) / btSqrt(lenSqr);
- normalInB *= rlen; //normalize
-
- btScalar s = btSqrt(squaredDistance);
-
- btAssert(s > btScalar(0.0));
- pointOnA -= m_cachedSeparatingAxis * (marginA / s);
- pointOnB += m_cachedSeparatingAxis * (marginB / s);
- distance = ((btScalar(1.) / rlen) - margin);
- isValid = true;
- orgNormalInB = normalInB;
-
- m_lastUsedMethod = 1;
- }
- else
- {
- m_lastUsedMethod = 2;
- }
- }
- }
-
- bool catchDegeneratePenetrationCase =
- (m_catchDegeneracies && m_penetrationDepthSolver && m_degenerateSimplex && ((distance + margin) < gGjkEpaPenetrationTolerance));
-
- //if (checkPenetration && !isValid)
- if ((checkPenetration && (!isValid || catchDegeneratePenetrationCase)) || (status == 0))
- {
- //penetration case
-
- //if there is no way to handle penetrations, bail out
- if (m_penetrationDepthSolver)
- {
- // Penetration depth case.
- btVector3 tmpPointOnA, tmpPointOnB;
-
- m_cachedSeparatingAxis.setZero();
-
- bool isValid2 = m_penetrationDepthSolver->calcPenDepth(
- *m_simplexSolver,
- m_minkowskiA, m_minkowskiB,
- localTransA, localTransB,
- m_cachedSeparatingAxis, tmpPointOnA, tmpPointOnB,
- debugDraw);
-
- if (m_cachedSeparatingAxis.length2())
- {
- if (isValid2)
- {
- btVector3 tmpNormalInB = tmpPointOnB - tmpPointOnA;
- btScalar lenSqr = tmpNormalInB.length2();
- if (lenSqr <= (SIMD_EPSILON * SIMD_EPSILON))
- {
- tmpNormalInB = m_cachedSeparatingAxis;
- lenSqr = m_cachedSeparatingAxis.length2();
- }
-
- if (lenSqr > (SIMD_EPSILON * SIMD_EPSILON))
- {
- tmpNormalInB /= btSqrt(lenSqr);
- btScalar distance2 = -(tmpPointOnA - tmpPointOnB).length();
- m_lastUsedMethod = 3;
- //only replace valid penetrations when the result is deeper (check)
- if (!isValid || (distance2 < distance))
- {
- distance = distance2;
- pointOnA = tmpPointOnA;
- pointOnB = tmpPointOnB;
- normalInB = tmpNormalInB;
- isValid = true;
- }
- else
- {
- m_lastUsedMethod = 8;
- }
- }
- else
- {
- m_lastUsedMethod = 9;
- }
- }
- else
-
- {
- ///this is another degenerate case, where the initial GJK calculation reports a degenerate case
- ///EPA reports no penetration, and the second GJK (using the supporting vector without margin)
- ///reports a valid positive distance. Use the results of the second GJK instead of failing.
- ///thanks to Jacob.Langford for the reproduction case
- ///http://code.google.com/p/bullet/issues/detail?id=250
-
- if (m_cachedSeparatingAxis.length2() > btScalar(0.))
- {
- btScalar distance2 = (tmpPointOnA - tmpPointOnB).length() - margin;
- //only replace valid distances when the distance is less
- if (!isValid || (distance2 < distance))
- {
- distance = distance2;
- pointOnA = tmpPointOnA;
- pointOnB = tmpPointOnB;
- pointOnA -= m_cachedSeparatingAxis * marginA;
- pointOnB += m_cachedSeparatingAxis * marginB;
- normalInB = m_cachedSeparatingAxis;
- normalInB.normalize();
-
- isValid = true;
- m_lastUsedMethod = 6;
- }
- else
- {
- m_lastUsedMethod = 5;
- }
- }
- }
- }
- else
- {
- //printf("EPA didn't return a valid value\n");
- }
- }
- }
- }
-
- if (isValid && ((distance < 0) || (distance * distance < input.m_maximumDistanceSquared)))
- {
- m_cachedSeparatingAxis = normalInB;
- m_cachedSeparatingDistance = distance;
- if (1)
- {
- ///todo: need to track down this EPA penetration solver degeneracy
- ///the penetration solver reports penetration but the contact normal
- ///connecting the contact points is pointing in the opposite direction
- ///until then, detect the issue and revert the normal
-
- btScalar d2 = 0.f;
- {
- btVector3 separatingAxisInA = (-orgNormalInB) * localTransA.getBasis();
- btVector3 separatingAxisInB = orgNormalInB * localTransB.getBasis();
-
- btVector3 pInA = m_minkowskiA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
- btVector3 qInB = m_minkowskiB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
-
- btVector3 pWorld = localTransA(pInA);
- btVector3 qWorld = localTransB(qInB);
- btVector3 w = pWorld - qWorld;
- d2 = orgNormalInB.dot(w) - margin;
- }
-
- btScalar d1 = 0;
- {
- btVector3 separatingAxisInA = (normalInB)*localTransA.getBasis();
- btVector3 separatingAxisInB = -normalInB * localTransB.getBasis();
-
- btVector3 pInA = m_minkowskiA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
- btVector3 qInB = m_minkowskiB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
-
- btVector3 pWorld = localTransA(pInA);
- btVector3 qWorld = localTransB(qInB);
- btVector3 w = pWorld - qWorld;
- d1 = (-normalInB).dot(w) - margin;
- }
- btScalar d0 = 0.f;
- {
- btVector3 separatingAxisInA = (-normalInB) * input.m_transformA.getBasis();
- btVector3 separatingAxisInB = normalInB * input.m_transformB.getBasis();
-
- btVector3 pInA = m_minkowskiA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
- btVector3 qInB = m_minkowskiB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
-
- btVector3 pWorld = localTransA(pInA);
- btVector3 qWorld = localTransB(qInB);
- btVector3 w = pWorld - qWorld;
- d0 = normalInB.dot(w) - margin;
- }
-
- if (d1 > d0)
- {
- m_lastUsedMethod = 10;
- normalInB *= -1;
- }
-
- if (orgNormalInB.length2())
- {
- if (d2 > d0 && d2 > d1 && d2 > distance)
- {
- normalInB = orgNormalInB;
- distance = d2;
- }
- }
- }
-
- output.addContactPoint(
- normalInB,
- pointOnB + positionOffset,
- distance);
- }
- else
- {
- //printf("invalid gjk query\n");
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h
deleted file mode 100644
index faa02287ca..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GJK_PAIR_DETECTOR_H
-#define BT_GJK_PAIR_DETECTOR_H
-
-#include "btDiscreteCollisionDetectorInterface.h"
-#include "BulletCollision/CollisionShapes/btCollisionMargin.h"
-
-class btConvexShape;
-#include "btSimplexSolverInterface.h"
-class btConvexPenetrationDepthSolver;
-
-/// btGjkPairDetector uses GJK to implement the btDiscreteCollisionDetectorInterface
-class btGjkPairDetector : public btDiscreteCollisionDetectorInterface
-{
- btVector3 m_cachedSeparatingAxis;
- btConvexPenetrationDepthSolver* m_penetrationDepthSolver;
- btSimplexSolverInterface* m_simplexSolver;
- const btConvexShape* m_minkowskiA;
- const btConvexShape* m_minkowskiB;
- int m_shapeTypeA;
- int m_shapeTypeB;
- btScalar m_marginA;
- btScalar m_marginB;
-
- bool m_ignoreMargin;
- btScalar m_cachedSeparatingDistance;
-
-public:
- //some debugging to fix degeneracy problems
- int m_lastUsedMethod;
- int m_curIter;
- int m_degenerateSimplex;
- int m_catchDegeneracies;
- int m_fixContactNormalDirection;
-
- btGjkPairDetector(const btConvexShape* objectA, const btConvexShape* objectB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver);
- btGjkPairDetector(const btConvexShape* objectA, const btConvexShape* objectB, int shapeTypeA, int shapeTypeB, btScalar marginA, btScalar marginB, btSimplexSolverInterface* simplexSolver, btConvexPenetrationDepthSolver* penetrationDepthSolver);
- virtual ~btGjkPairDetector(){};
-
- virtual void getClosestPoints(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw, bool swapResults = false);
-
- void getClosestPointsNonVirtual(const ClosestPointInput& input, Result& output, class btIDebugDraw* debugDraw);
-
- void setMinkowskiA(const btConvexShape* minkA)
- {
- m_minkowskiA = minkA;
- }
-
- void setMinkowskiB(const btConvexShape* minkB)
- {
- m_minkowskiB = minkB;
- }
- void setCachedSeparatingAxis(const btVector3& separatingAxis)
- {
- m_cachedSeparatingAxis = separatingAxis;
- }
-
- const btVector3& getCachedSeparatingAxis() const
- {
- return m_cachedSeparatingAxis;
- }
- btScalar getCachedSeparatingDistance() const
- {
- return m_cachedSeparatingDistance;
- }
-
- void setPenetrationDepthSolver(btConvexPenetrationDepthSolver* penetrationDepthSolver)
- {
- m_penetrationDepthSolver = penetrationDepthSolver;
- }
-
- ///don't use setIgnoreMargin, it's for Bullet's internal use
- void setIgnoreMargin(bool ignoreMargin)
- {
- m_ignoreMargin = ignoreMargin;
- }
-};
-
-#endif //BT_GJK_PAIR_DETECTOR_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h
deleted file mode 100644
index 573fc86bf9..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MANIFOLD_CONTACT_POINT_H
-#define BT_MANIFOLD_CONTACT_POINT_H
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransformUtil.h"
-
-#ifdef PFX_USE_FREE_VECTORMATH
-#include "physics_effects/base_level/solver/pfx_constraint_row.h"
-typedef sce::PhysicsEffects::PfxConstraintRow btConstraintRow;
-#else
-// Don't change following order of parameters
-ATTRIBUTE_ALIGNED16(struct)
-btConstraintRow
-{
- btScalar m_normal[3];
- btScalar m_rhs;
- btScalar m_jacDiagInv;
- btScalar m_lowerLimit;
- btScalar m_upperLimit;
- btScalar m_accumImpulse;
-};
-typedef btConstraintRow PfxConstraintRow;
-#endif //PFX_USE_FREE_VECTORMATH
-
-enum btContactPointFlags
-{
- BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED = 1,
- BT_CONTACT_FLAG_HAS_CONTACT_CFM = 2,
- BT_CONTACT_FLAG_HAS_CONTACT_ERP = 4,
- BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING = 8,
- BT_CONTACT_FLAG_FRICTION_ANCHOR = 16,
-};
-
-/// ManifoldContactPoint collects and maintains persistent contactpoints.
-/// used to improve stability and performance of rigidbody dynamics response.
-class btManifoldPoint
-{
-public:
- btManifoldPoint()
- : m_userPersistentData(0),
- m_contactPointFlags(0),
- m_appliedImpulse(0.f),
- m_prevRHS(0.f),
- m_appliedImpulseLateral1(0.f),
- m_appliedImpulseLateral2(0.f),
- m_contactMotion1(0.f),
- m_contactMotion2(0.f),
- m_contactCFM(0.f),
- m_contactERP(0.f),
- m_frictionCFM(0.f),
- m_lifeTime(0)
- {
- }
-
- btManifoldPoint(const btVector3& pointA, const btVector3& pointB,
- const btVector3& normal,
- btScalar distance) : m_localPointA(pointA),
- m_localPointB(pointB),
- m_normalWorldOnB(normal),
- m_distance1(distance),
- m_combinedFriction(btScalar(0.)),
- m_combinedRollingFriction(btScalar(0.)),
- m_combinedSpinningFriction(btScalar(0.)),
- m_combinedRestitution(btScalar(0.)),
- m_userPersistentData(0),
- m_contactPointFlags(0),
- m_appliedImpulse(0.f),
- m_prevRHS(0.f),
- m_appliedImpulseLateral1(0.f),
- m_appliedImpulseLateral2(0.f),
- m_contactMotion1(0.f),
- m_contactMotion2(0.f),
- m_contactCFM(0.f),
- m_contactERP(0.f),
- m_frictionCFM(0.f),
- m_lifeTime(0)
- {
- }
-
- btVector3 m_localPointA;
- btVector3 m_localPointB;
- btVector3 m_positionWorldOnB;
- ///m_positionWorldOnA is redundant information, see getPositionWorldOnA(), but for clarity
- btVector3 m_positionWorldOnA;
- btVector3 m_normalWorldOnB;
-
- btScalar m_distance1;
- btScalar m_combinedFriction;
- btScalar m_combinedRollingFriction; //torsional friction orthogonal to contact normal, useful to make spheres stop rolling forever
- btScalar m_combinedSpinningFriction; //torsional friction around contact normal, useful for grasping objects
- btScalar m_combinedRestitution;
-
- //BP mod, store contact triangles.
- int m_partId0;
- int m_partId1;
- int m_index0;
- int m_index1;
-
- mutable void* m_userPersistentData;
- //bool m_lateralFrictionInitialized;
- int m_contactPointFlags;
-
- btScalar m_appliedImpulse;
- btScalar m_prevRHS;
- btScalar m_appliedImpulseLateral1;
- btScalar m_appliedImpulseLateral2;
- btScalar m_contactMotion1;
- btScalar m_contactMotion2;
-
- union {
- btScalar m_contactCFM;
- btScalar m_combinedContactStiffness1;
- };
-
- union {
- btScalar m_contactERP;
- btScalar m_combinedContactDamping1;
- };
-
- btScalar m_frictionCFM;
-
- int m_lifeTime; //lifetime of the contactpoint in frames
-
- btVector3 m_lateralFrictionDir1;
- btVector3 m_lateralFrictionDir2;
-
- btScalar getDistance() const
- {
- return m_distance1;
- }
- int getLifeTime() const
- {
- return m_lifeTime;
- }
-
- const btVector3& getPositionWorldOnA() const
- {
- return m_positionWorldOnA;
- // return m_positionWorldOnB + m_normalWorldOnB * m_distance1;
- }
-
- const btVector3& getPositionWorldOnB() const
- {
- return m_positionWorldOnB;
- }
-
- void setDistance(btScalar dist)
- {
- m_distance1 = dist;
- }
-
- ///this returns the most recent applied impulse, to satisfy contact constraints by the constraint solver
- btScalar getAppliedImpulse() const
- {
- return m_appliedImpulse;
- }
-};
-
-#endif //BT_MANIFOLD_CONTACT_POINT_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp
deleted file mode 100644
index c042c24208..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp
+++ /dev/null
@@ -1,336 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btMinkowskiPenetrationDepthSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-
-#define NUM_UNITSPHERE_POINTS 42
-
-bool btMinkowskiPenetrationDepthSolver::calcPenDepth(btSimplexSolverInterface& simplexSolver,
- const btConvexShape* convexA, const btConvexShape* convexB,
- const btTransform& transA, const btTransform& transB,
- btVector3& v, btVector3& pa, btVector3& pb,
- class btIDebugDraw* debugDraw)
-{
- (void)v;
-
- bool check2d = convexA->isConvex2d() && convexB->isConvex2d();
-
- struct btIntermediateResult : public btDiscreteCollisionDetectorInterface::Result
- {
- btIntermediateResult() : m_hasResult(false)
- {
- }
-
- btVector3 m_normalOnBInWorld;
- btVector3 m_pointInWorld;
- btScalar m_depth;
- bool m_hasResult;
-
- virtual void setShapeIdentifiersA(int partId0, int index0)
- {
- (void)partId0;
- (void)index0;
- }
- virtual void setShapeIdentifiersB(int partId1, int index1)
- {
- (void)partId1;
- (void)index1;
- }
- void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth)
- {
- m_normalOnBInWorld = normalOnBInWorld;
- m_pointInWorld = pointInWorld;
- m_depth = depth;
- m_hasResult = true;
- }
- };
-
- //just take fixed number of orientation, and sample the penetration depth in that direction
- btScalar minProj = btScalar(BT_LARGE_FLOAT);
- btVector3 minNorm(btScalar(0.), btScalar(0.), btScalar(0.));
- btVector3 minA, minB;
- btVector3 separatingAxisInA, separatingAxisInB;
- btVector3 pInA, qInB, pWorld, qWorld, w;
-
-#ifndef __SPU__
-#define USE_BATCHED_SUPPORT 1
-#endif
-#ifdef USE_BATCHED_SUPPORT
-
- btVector3 supportVerticesABatch[NUM_UNITSPHERE_POINTS + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2];
- btVector3 supportVerticesBBatch[NUM_UNITSPHERE_POINTS + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2];
- btVector3 separatingAxisInABatch[NUM_UNITSPHERE_POINTS + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2];
- btVector3 separatingAxisInBBatch[NUM_UNITSPHERE_POINTS + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2];
- int i;
-
- int numSampleDirections = NUM_UNITSPHERE_POINTS;
-
- for (i = 0; i < numSampleDirections; i++)
- {
- btVector3 norm = getPenetrationDirections()[i];
- separatingAxisInABatch[i] = (-norm) * transA.getBasis();
- separatingAxisInBBatch[i] = norm * transB.getBasis();
- }
-
- {
- int numPDA = convexA->getNumPreferredPenetrationDirections();
- if (numPDA)
- {
- for (int i = 0; i < numPDA; i++)
- {
- btVector3 norm;
- convexA->getPreferredPenetrationDirection(i, norm);
- norm = transA.getBasis() * norm;
- getPenetrationDirections()[numSampleDirections] = norm;
- separatingAxisInABatch[numSampleDirections] = (-norm) * transA.getBasis();
- separatingAxisInBBatch[numSampleDirections] = norm * transB.getBasis();
- numSampleDirections++;
- }
- }
- }
-
- {
- int numPDB = convexB->getNumPreferredPenetrationDirections();
- if (numPDB)
- {
- for (int i = 0; i < numPDB; i++)
- {
- btVector3 norm;
- convexB->getPreferredPenetrationDirection(i, norm);
- norm = transB.getBasis() * norm;
- getPenetrationDirections()[numSampleDirections] = norm;
- separatingAxisInABatch[numSampleDirections] = (-norm) * transA.getBasis();
- separatingAxisInBBatch[numSampleDirections] = norm * transB.getBasis();
- numSampleDirections++;
- }
- }
- }
-
- convexA->batchedUnitVectorGetSupportingVertexWithoutMargin(separatingAxisInABatch, supportVerticesABatch, numSampleDirections);
- convexB->batchedUnitVectorGetSupportingVertexWithoutMargin(separatingAxisInBBatch, supportVerticesBBatch, numSampleDirections);
-
- for (i = 0; i < numSampleDirections; i++)
- {
- btVector3 norm = getPenetrationDirections()[i];
- if (check2d)
- {
- norm[2] = 0.f;
- }
- if (norm.length2() > 0.01)
- {
- separatingAxisInA = separatingAxisInABatch[i];
- separatingAxisInB = separatingAxisInBBatch[i];
-
- pInA = supportVerticesABatch[i];
- qInB = supportVerticesBBatch[i];
-
- pWorld = transA(pInA);
- qWorld = transB(qInB);
- if (check2d)
- {
- pWorld[2] = 0.f;
- qWorld[2] = 0.f;
- }
-
- w = qWorld - pWorld;
- btScalar delta = norm.dot(w);
- //find smallest delta
- if (delta < minProj)
- {
- minProj = delta;
- minNorm = norm;
- minA = pWorld;
- minB = qWorld;
- }
- }
- }
-#else
-
- int numSampleDirections = NUM_UNITSPHERE_POINTS;
-
-#ifndef __SPU__
- {
- int numPDA = convexA->getNumPreferredPenetrationDirections();
- if (numPDA)
- {
- for (int i = 0; i < numPDA; i++)
- {
- btVector3 norm;
- convexA->getPreferredPenetrationDirection(i, norm);
- norm = transA.getBasis() * norm;
- getPenetrationDirections()[numSampleDirections] = norm;
- numSampleDirections++;
- }
- }
- }
-
- {
- int numPDB = convexB->getNumPreferredPenetrationDirections();
- if (numPDB)
- {
- for (int i = 0; i < numPDB; i++)
- {
- btVector3 norm;
- convexB->getPreferredPenetrationDirection(i, norm);
- norm = transB.getBasis() * norm;
- getPenetrationDirections()[numSampleDirections] = norm;
- numSampleDirections++;
- }
- }
- }
-#endif // __SPU__
-
- for (int i = 0; i < numSampleDirections; i++)
- {
- const btVector3& norm = getPenetrationDirections()[i];
- separatingAxisInA = (-norm) * transA.getBasis();
- separatingAxisInB = norm * transB.getBasis();
- pInA = convexA->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInA);
- qInB = convexB->localGetSupportVertexWithoutMarginNonVirtual(separatingAxisInB);
- pWorld = transA(pInA);
- qWorld = transB(qInB);
- w = qWorld - pWorld;
- btScalar delta = norm.dot(w);
- //find smallest delta
- if (delta < minProj)
- {
- minProj = delta;
- minNorm = norm;
- minA = pWorld;
- minB = qWorld;
- }
- }
-#endif //USE_BATCHED_SUPPORT
-
- //add the margins
-
- minA += minNorm * convexA->getMarginNonVirtual();
- minB -= minNorm * convexB->getMarginNonVirtual();
- //no penetration
- if (minProj < btScalar(0.))
- return false;
-
- btScalar extraSeparation = 0.5f; ///scale dependent
- minProj += extraSeparation + (convexA->getMarginNonVirtual() + convexB->getMarginNonVirtual());
-
-//#define DEBUG_DRAW 1
-#ifdef DEBUG_DRAW
- if (debugDraw)
- {
- btVector3 color(0, 1, 0);
- debugDraw->drawLine(minA, minB, color);
- color = btVector3(1, 1, 1);
- btVector3 vec = minB - minA;
- btScalar prj2 = minNorm.dot(vec);
- debugDraw->drawLine(minA, minA + (minNorm * minProj), color);
- }
-#endif //DEBUG_DRAW
-
- btGjkPairDetector gjkdet(convexA, convexB, &simplexSolver, 0);
-
- btScalar offsetDist = minProj;
- btVector3 offset = minNorm * offsetDist;
-
- btGjkPairDetector::ClosestPointInput input;
-
- btVector3 newOrg = transA.getOrigin() + offset;
-
- btTransform displacedTrans = transA;
- displacedTrans.setOrigin(newOrg);
-
- input.m_transformA = displacedTrans;
- input.m_transformB = transB;
- input.m_maximumDistanceSquared = btScalar(BT_LARGE_FLOAT); //minProj;
-
- btIntermediateResult res;
- gjkdet.setCachedSeparatingAxis(-minNorm);
- gjkdet.getClosestPoints(input, res, debugDraw);
-
- btScalar correctedMinNorm = minProj - res.m_depth;
-
- //the penetration depth is over-estimated, relax it
- btScalar penetration_relaxation = btScalar(1.);
- minNorm *= penetration_relaxation;
-
- if (res.m_hasResult)
- {
- pa = res.m_pointInWorld - minNorm * correctedMinNorm;
- pb = res.m_pointInWorld;
- v = minNorm;
-
-#ifdef DEBUG_DRAW
- if (debugDraw)
- {
- btVector3 color(1, 0, 0);
- debugDraw->drawLine(pa, pb, color);
- }
-#endif //DEBUG_DRAW
- }
- return res.m_hasResult;
-}
-
-btVector3* btMinkowskiPenetrationDepthSolver::getPenetrationDirections()
-{
- static btVector3 sPenetrationDirections[NUM_UNITSPHERE_POINTS + MAX_PREFERRED_PENETRATION_DIRECTIONS * 2] =
- {
- btVector3(btScalar(0.000000), btScalar(-0.000000), btScalar(-1.000000)),
- btVector3(btScalar(0.723608), btScalar(-0.525725), btScalar(-0.447219)),
- btVector3(btScalar(-0.276388), btScalar(-0.850649), btScalar(-0.447219)),
- btVector3(btScalar(-0.894426), btScalar(-0.000000), btScalar(-0.447216)),
- btVector3(btScalar(-0.276388), btScalar(0.850649), btScalar(-0.447220)),
- btVector3(btScalar(0.723608), btScalar(0.525725), btScalar(-0.447219)),
- btVector3(btScalar(0.276388), btScalar(-0.850649), btScalar(0.447220)),
- btVector3(btScalar(-0.723608), btScalar(-0.525725), btScalar(0.447219)),
- btVector3(btScalar(-0.723608), btScalar(0.525725), btScalar(0.447219)),
- btVector3(btScalar(0.276388), btScalar(0.850649), btScalar(0.447219)),
- btVector3(btScalar(0.894426), btScalar(0.000000), btScalar(0.447216)),
- btVector3(btScalar(-0.000000), btScalar(0.000000), btScalar(1.000000)),
- btVector3(btScalar(0.425323), btScalar(-0.309011), btScalar(-0.850654)),
- btVector3(btScalar(-0.162456), btScalar(-0.499995), btScalar(-0.850654)),
- btVector3(btScalar(0.262869), btScalar(-0.809012), btScalar(-0.525738)),
- btVector3(btScalar(0.425323), btScalar(0.309011), btScalar(-0.850654)),
- btVector3(btScalar(0.850648), btScalar(-0.000000), btScalar(-0.525736)),
- btVector3(btScalar(-0.525730), btScalar(-0.000000), btScalar(-0.850652)),
- btVector3(btScalar(-0.688190), btScalar(-0.499997), btScalar(-0.525736)),
- btVector3(btScalar(-0.162456), btScalar(0.499995), btScalar(-0.850654)),
- btVector3(btScalar(-0.688190), btScalar(0.499997), btScalar(-0.525736)),
- btVector3(btScalar(0.262869), btScalar(0.809012), btScalar(-0.525738)),
- btVector3(btScalar(0.951058), btScalar(0.309013), btScalar(0.000000)),
- btVector3(btScalar(0.951058), btScalar(-0.309013), btScalar(0.000000)),
- btVector3(btScalar(0.587786), btScalar(-0.809017), btScalar(0.000000)),
- btVector3(btScalar(0.000000), btScalar(-1.000000), btScalar(0.000000)),
- btVector3(btScalar(-0.587786), btScalar(-0.809017), btScalar(0.000000)),
- btVector3(btScalar(-0.951058), btScalar(-0.309013), btScalar(-0.000000)),
- btVector3(btScalar(-0.951058), btScalar(0.309013), btScalar(-0.000000)),
- btVector3(btScalar(-0.587786), btScalar(0.809017), btScalar(-0.000000)),
- btVector3(btScalar(-0.000000), btScalar(1.000000), btScalar(-0.000000)),
- btVector3(btScalar(0.587786), btScalar(0.809017), btScalar(-0.000000)),
- btVector3(btScalar(0.688190), btScalar(-0.499997), btScalar(0.525736)),
- btVector3(btScalar(-0.262869), btScalar(-0.809012), btScalar(0.525738)),
- btVector3(btScalar(-0.850648), btScalar(0.000000), btScalar(0.525736)),
- btVector3(btScalar(-0.262869), btScalar(0.809012), btScalar(0.525738)),
- btVector3(btScalar(0.688190), btScalar(0.499997), btScalar(0.525736)),
- btVector3(btScalar(0.525730), btScalar(0.000000), btScalar(0.850652)),
- btVector3(btScalar(0.162456), btScalar(-0.499995), btScalar(0.850654)),
- btVector3(btScalar(-0.425323), btScalar(-0.309011), btScalar(0.850654)),
- btVector3(btScalar(-0.425323), btScalar(0.309011), btScalar(0.850654)),
- btVector3(btScalar(0.162456), btScalar(0.499995), btScalar(0.850654))};
-
- return sPenetrationDirections;
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h
deleted file mode 100644
index 8e3e393259..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MINKOWSKI_PENETRATION_DEPTH_SOLVER_H
-#define BT_MINKOWSKI_PENETRATION_DEPTH_SOLVER_H
-
-#include "btConvexPenetrationDepthSolver.h"
-
-///MinkowskiPenetrationDepthSolver implements bruteforce penetration depth estimation.
-///Implementation is based on sampling the depth using support mapping, and using GJK step to get the witness points.
-class btMinkowskiPenetrationDepthSolver : public btConvexPenetrationDepthSolver
-{
-protected:
- static btVector3* getPenetrationDirections();
-
-public:
- virtual bool calcPenDepth(btSimplexSolverInterface& simplexSolver,
- const btConvexShape* convexA, const btConvexShape* convexB,
- const btTransform& transA, const btTransform& transB,
- btVector3& v, btVector3& pa, btVector3& pb,
- class btIDebugDraw* debugDraw);
-};
-
-#endif //BT_MINKOWSKI_PENETRATION_DEPTH_SOLVER_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMprPenetration.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMprPenetration.h
deleted file mode 100644
index 534a66d3fa..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btMprPenetration.h
+++ /dev/null
@@ -1,884 +0,0 @@
-
-/***
- * ---------------------------------
- * Copyright (c)2012 Daniel Fiser <danfis@danfis.cz>
- *
- * This file was ported from mpr.c file, part of libccd.
- * The Minkoski Portal Refinement implementation was ported
- * to OpenCL by Erwin Coumans for the Bullet 3 Physics library.
- * The original MPR idea and implementation is by Gary Snethen
- * in XenoCollide, see http://github.com/erwincoumans/xenocollide
- *
- * Distributed under the OSI-approved BSD License (the "License");
- * see <http://www.opensource.org/licenses/bsd-license.php>.
- * This software is distributed WITHOUT ANY WARRANTY; without even the
- * implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- * See the License for more information.
- */
-
-///2014 Oct, Erwin Coumans, Use templates to avoid void* casts
-
-#ifndef BT_MPR_PENETRATION_H
-#define BT_MPR_PENETRATION_H
-
-#define BT_DEBUG_MPR1
-
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-//#define MPR_AVERAGE_CONTACT_POSITIONS
-
-struct btMprCollisionDescription
-{
- btVector3 m_firstDir;
- int m_maxGjkIterations;
- btScalar m_maximumDistanceSquared;
- btScalar m_gjkRelError2;
-
- btMprCollisionDescription()
- : m_firstDir(0, 1, 0),
- m_maxGjkIterations(1000),
- m_maximumDistanceSquared(1e30f),
- m_gjkRelError2(1.0e-6)
- {
- }
- virtual ~btMprCollisionDescription()
- {
- }
-};
-
-struct btMprDistanceInfo
-{
- btVector3 m_pointOnA;
- btVector3 m_pointOnB;
- btVector3 m_normalBtoA;
- btScalar m_distance;
-};
-
-#ifdef __cplusplus
-#define BT_MPR_SQRT sqrtf
-#else
-#define BT_MPR_SQRT sqrt
-#endif
-#define BT_MPR_FMIN(x, y) ((x) < (y) ? (x) : (y))
-#define BT_MPR_FABS fabs
-
-#define BT_MPR_TOLERANCE 1E-6f
-#define BT_MPR_MAX_ITERATIONS 1000
-
-struct _btMprSupport_t
-{
- btVector3 v; //!< Support point in minkowski sum
- btVector3 v1; //!< Support point in obj1
- btVector3 v2; //!< Support point in obj2
-};
-typedef struct _btMprSupport_t btMprSupport_t;
-
-struct _btMprSimplex_t
-{
- btMprSupport_t ps[4];
- int last; //!< index of last added point
-};
-typedef struct _btMprSimplex_t btMprSimplex_t;
-
-inline btMprSupport_t *btMprSimplexPointW(btMprSimplex_t *s, int idx)
-{
- return &s->ps[idx];
-}
-
-inline void btMprSimplexSetSize(btMprSimplex_t *s, int size)
-{
- s->last = size - 1;
-}
-
-#ifdef DEBUG_MPR
-inline void btPrintPortalVertex(_btMprSimplex_t *portal, int index)
-{
- printf("portal[%d].v = %f,%f,%f, v1=%f,%f,%f, v2=%f,%f,%f\n", index, portal->ps[index].v.x(), portal->ps[index].v.y(), portal->ps[index].v.z(),
- portal->ps[index].v1.x(), portal->ps[index].v1.y(), portal->ps[index].v1.z(),
- portal->ps[index].v2.x(), portal->ps[index].v2.y(), portal->ps[index].v2.z());
-}
-#endif //DEBUG_MPR
-
-inline int btMprSimplexSize(const btMprSimplex_t *s)
-{
- return s->last + 1;
-}
-
-inline const btMprSupport_t *btMprSimplexPoint(const btMprSimplex_t *s, int idx)
-{
- // here is no check on boundaries
- return &s->ps[idx];
-}
-
-inline void btMprSupportCopy(btMprSupport_t *d, const btMprSupport_t *s)
-{
- *d = *s;
-}
-
-inline void btMprSimplexSet(btMprSimplex_t *s, size_t pos, const btMprSupport_t *a)
-{
- btMprSupportCopy(s->ps + pos, a);
-}
-
-inline void btMprSimplexSwap(btMprSimplex_t *s, size_t pos1, size_t pos2)
-{
- btMprSupport_t supp;
-
- btMprSupportCopy(&supp, &s->ps[pos1]);
- btMprSupportCopy(&s->ps[pos1], &s->ps[pos2]);
- btMprSupportCopy(&s->ps[pos2], &supp);
-}
-
-inline int btMprIsZero(float val)
-{
- return BT_MPR_FABS(val) < FLT_EPSILON;
-}
-
-inline int btMprEq(float _a, float _b)
-{
- float ab;
- float a, b;
-
- ab = BT_MPR_FABS(_a - _b);
- if (BT_MPR_FABS(ab) < FLT_EPSILON)
- return 1;
-
- a = BT_MPR_FABS(_a);
- b = BT_MPR_FABS(_b);
- if (b > a)
- {
- return ab < FLT_EPSILON * b;
- }
- else
- {
- return ab < FLT_EPSILON * a;
- }
-}
-
-inline int btMprVec3Eq(const btVector3 *a, const btVector3 *b)
-{
- return btMprEq((*a).x(), (*b).x()) && btMprEq((*a).y(), (*b).y()) && btMprEq((*a).z(), (*b).z());
-}
-
-template <typename btConvexTemplate>
-inline void btFindOrigin(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprSupport_t *center)
-{
- center->v1 = a.getObjectCenterInWorld();
- center->v2 = b.getObjectCenterInWorld();
- center->v = center->v1 - center->v2;
-}
-
-inline void btMprVec3Set(btVector3 *v, float x, float y, float z)
-{
- v->setValue(x, y, z);
-}
-
-inline void btMprVec3Add(btVector3 *v, const btVector3 *w)
-{
- *v += *w;
-}
-
-inline void btMprVec3Copy(btVector3 *v, const btVector3 *w)
-{
- *v = *w;
-}
-
-inline void btMprVec3Scale(btVector3 *d, float k)
-{
- *d *= k;
-}
-
-inline float btMprVec3Dot(const btVector3 *a, const btVector3 *b)
-{
- float dot;
-
- dot = btDot(*a, *b);
- return dot;
-}
-
-inline float btMprVec3Len2(const btVector3 *v)
-{
- return btMprVec3Dot(v, v);
-}
-
-inline void btMprVec3Normalize(btVector3 *d)
-{
- float k = 1.f / BT_MPR_SQRT(btMprVec3Len2(d));
- btMprVec3Scale(d, k);
-}
-
-inline void btMprVec3Cross(btVector3 *d, const btVector3 *a, const btVector3 *b)
-{
- *d = btCross(*a, *b);
-}
-
-inline void btMprVec3Sub2(btVector3 *d, const btVector3 *v, const btVector3 *w)
-{
- *d = *v - *w;
-}
-
-inline void btPortalDir(const btMprSimplex_t *portal, btVector3 *dir)
-{
- btVector3 v2v1, v3v1;
-
- btMprVec3Sub2(&v2v1, &btMprSimplexPoint(portal, 2)->v,
- &btMprSimplexPoint(portal, 1)->v);
- btMprVec3Sub2(&v3v1, &btMprSimplexPoint(portal, 3)->v,
- &btMprSimplexPoint(portal, 1)->v);
- btMprVec3Cross(dir, &v2v1, &v3v1);
- btMprVec3Normalize(dir);
-}
-
-inline int portalEncapsulesOrigin(const btMprSimplex_t *portal,
- const btVector3 *dir)
-{
- float dot;
- dot = btMprVec3Dot(dir, &btMprSimplexPoint(portal, 1)->v);
- return btMprIsZero(dot) || dot > 0.f;
-}
-
-inline int portalReachTolerance(const btMprSimplex_t *portal,
- const btMprSupport_t *v4,
- const btVector3 *dir)
-{
- float dv1, dv2, dv3, dv4;
- float dot1, dot2, dot3;
-
- // find the smallest dot product of dir and {v1-v4, v2-v4, v3-v4}
-
- dv1 = btMprVec3Dot(&btMprSimplexPoint(portal, 1)->v, dir);
- dv2 = btMprVec3Dot(&btMprSimplexPoint(portal, 2)->v, dir);
- dv3 = btMprVec3Dot(&btMprSimplexPoint(portal, 3)->v, dir);
- dv4 = btMprVec3Dot(&v4->v, dir);
-
- dot1 = dv4 - dv1;
- dot2 = dv4 - dv2;
- dot3 = dv4 - dv3;
-
- dot1 = BT_MPR_FMIN(dot1, dot2);
- dot1 = BT_MPR_FMIN(dot1, dot3);
-
- return btMprEq(dot1, BT_MPR_TOLERANCE) || dot1 < BT_MPR_TOLERANCE;
-}
-
-inline int portalCanEncapsuleOrigin(const btMprSimplex_t *portal,
- const btMprSupport_t *v4,
- const btVector3 *dir)
-{
- float dot;
- dot = btMprVec3Dot(&v4->v, dir);
- return btMprIsZero(dot) || dot > 0.f;
-}
-
-inline void btExpandPortal(btMprSimplex_t *portal,
- const btMprSupport_t *v4)
-{
- float dot;
- btVector3 v4v0;
-
- btMprVec3Cross(&v4v0, &v4->v, &btMprSimplexPoint(portal, 0)->v);
- dot = btMprVec3Dot(&btMprSimplexPoint(portal, 1)->v, &v4v0);
- if (dot > 0.f)
- {
- dot = btMprVec3Dot(&btMprSimplexPoint(portal, 2)->v, &v4v0);
- if (dot > 0.f)
- {
- btMprSimplexSet(portal, 1, v4);
- }
- else
- {
- btMprSimplexSet(portal, 3, v4);
- }
- }
- else
- {
- dot = btMprVec3Dot(&btMprSimplexPoint(portal, 3)->v, &v4v0);
- if (dot > 0.f)
- {
- btMprSimplexSet(portal, 2, v4);
- }
- else
- {
- btMprSimplexSet(portal, 1, v4);
- }
- }
-}
-template <typename btConvexTemplate>
-inline void btMprSupport(const btConvexTemplate &a, const btConvexTemplate &b,
- const btMprCollisionDescription &colDesc,
- const btVector3 &dir, btMprSupport_t *supp)
-{
- btVector3 separatingAxisInA = dir * a.getWorldTransform().getBasis();
- btVector3 separatingAxisInB = -dir * b.getWorldTransform().getBasis();
-
- btVector3 pInA = a.getLocalSupportWithMargin(separatingAxisInA);
- btVector3 qInB = b.getLocalSupportWithMargin(separatingAxisInB);
-
- supp->v1 = a.getWorldTransform()(pInA);
- supp->v2 = b.getWorldTransform()(qInB);
- supp->v = supp->v1 - supp->v2;
-}
-
-template <typename btConvexTemplate>
-static int btDiscoverPortal(const btConvexTemplate &a, const btConvexTemplate &b,
- const btMprCollisionDescription &colDesc,
- btMprSimplex_t *portal)
-{
- btVector3 dir, va, vb;
- float dot;
- int cont;
-
- // vertex 0 is center of portal
- btFindOrigin(a, b, colDesc, btMprSimplexPointW(portal, 0));
-
- // vertex 0 is center of portal
- btMprSimplexSetSize(portal, 1);
-
- btVector3 zero = btVector3(0, 0, 0);
- btVector3 *org = &zero;
-
- if (btMprVec3Eq(&btMprSimplexPoint(portal, 0)->v, org))
- {
- // Portal's center lies on origin (0,0,0) => we know that objects
- // intersect but we would need to know penetration info.
- // So move center little bit...
- btMprVec3Set(&va, FLT_EPSILON * 10.f, 0.f, 0.f);
- btMprVec3Add(&btMprSimplexPointW(portal, 0)->v, &va);
- }
-
- // vertex 1 = support in direction of origin
- btMprVec3Copy(&dir, &btMprSimplexPoint(portal, 0)->v);
- btMprVec3Scale(&dir, -1.f);
- btMprVec3Normalize(&dir);
-
- btMprSupport(a, b, colDesc, dir, btMprSimplexPointW(portal, 1));
-
- btMprSimplexSetSize(portal, 2);
-
- // test if origin isn't outside of v1
- dot = btMprVec3Dot(&btMprSimplexPoint(portal, 1)->v, &dir);
-
- if (btMprIsZero(dot) || dot < 0.f)
- return -1;
-
- // vertex 2
- btMprVec3Cross(&dir, &btMprSimplexPoint(portal, 0)->v,
- &btMprSimplexPoint(portal, 1)->v);
- if (btMprIsZero(btMprVec3Len2(&dir)))
- {
- if (btMprVec3Eq(&btMprSimplexPoint(portal, 1)->v, org))
- {
- // origin lies on v1
- return 1;
- }
- else
- {
- // origin lies on v0-v1 segment
- return 2;
- }
- }
-
- btMprVec3Normalize(&dir);
- btMprSupport(a, b, colDesc, dir, btMprSimplexPointW(portal, 2));
-
- dot = btMprVec3Dot(&btMprSimplexPoint(portal, 2)->v, &dir);
- if (btMprIsZero(dot) || dot < 0.f)
- return -1;
-
- btMprSimplexSetSize(portal, 3);
-
- // vertex 3 direction
- btMprVec3Sub2(&va, &btMprSimplexPoint(portal, 1)->v,
- &btMprSimplexPoint(portal, 0)->v);
- btMprVec3Sub2(&vb, &btMprSimplexPoint(portal, 2)->v,
- &btMprSimplexPoint(portal, 0)->v);
- btMprVec3Cross(&dir, &va, &vb);
- btMprVec3Normalize(&dir);
-
- // it is better to form portal faces to be oriented "outside" origin
- dot = btMprVec3Dot(&dir, &btMprSimplexPoint(portal, 0)->v);
- if (dot > 0.f)
- {
- btMprSimplexSwap(portal, 1, 2);
- btMprVec3Scale(&dir, -1.f);
- }
-
- while (btMprSimplexSize(portal) < 4)
- {
- btMprSupport(a, b, colDesc, dir, btMprSimplexPointW(portal, 3));
-
- dot = btMprVec3Dot(&btMprSimplexPoint(portal, 3)->v, &dir);
- if (btMprIsZero(dot) || dot < 0.f)
- return -1;
-
- cont = 0;
-
- // test if origin is outside (v1, v0, v3) - set v2 as v3 and
- // continue
- btMprVec3Cross(&va, &btMprSimplexPoint(portal, 1)->v,
- &btMprSimplexPoint(portal, 3)->v);
- dot = btMprVec3Dot(&va, &btMprSimplexPoint(portal, 0)->v);
- if (dot < 0.f && !btMprIsZero(dot))
- {
- btMprSimplexSet(portal, 2, btMprSimplexPoint(portal, 3));
- cont = 1;
- }
-
- if (!cont)
- {
- // test if origin is outside (v3, v0, v2) - set v1 as v3 and
- // continue
- btMprVec3Cross(&va, &btMprSimplexPoint(portal, 3)->v,
- &btMprSimplexPoint(portal, 2)->v);
- dot = btMprVec3Dot(&va, &btMprSimplexPoint(portal, 0)->v);
- if (dot < 0.f && !btMprIsZero(dot))
- {
- btMprSimplexSet(portal, 1, btMprSimplexPoint(portal, 3));
- cont = 1;
- }
- }
-
- if (cont)
- {
- btMprVec3Sub2(&va, &btMprSimplexPoint(portal, 1)->v,
- &btMprSimplexPoint(portal, 0)->v);
- btMprVec3Sub2(&vb, &btMprSimplexPoint(portal, 2)->v,
- &btMprSimplexPoint(portal, 0)->v);
- btMprVec3Cross(&dir, &va, &vb);
- btMprVec3Normalize(&dir);
- }
- else
- {
- btMprSimplexSetSize(portal, 4);
- }
- }
-
- return 0;
-}
-
-template <typename btConvexTemplate>
-static int btRefinePortal(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc,
- btMprSimplex_t *portal)
-{
- btVector3 dir;
- btMprSupport_t v4;
-
- for (int i = 0; i < BT_MPR_MAX_ITERATIONS; i++)
- //while (1)
- {
- // compute direction outside the portal (from v0 through v1,v2,v3
- // face)
- btPortalDir(portal, &dir);
-
- // test if origin is inside the portal
- if (portalEncapsulesOrigin(portal, &dir))
- return 0;
-
- // get next support point
-
- btMprSupport(a, b, colDesc, dir, &v4);
-
- // test if v4 can expand portal to contain origin and if portal
- // expanding doesn't reach given tolerance
- if (!portalCanEncapsuleOrigin(portal, &v4, &dir) || portalReachTolerance(portal, &v4, &dir))
- {
- return -1;
- }
-
- // v1-v2-v3 triangle must be rearranged to face outside Minkowski
- // difference (direction from v0).
- btExpandPortal(portal, &v4);
- }
-
- return -1;
-}
-
-static void btFindPos(const btMprSimplex_t *portal, btVector3 *pos)
-{
- btVector3 zero = btVector3(0, 0, 0);
- btVector3 *origin = &zero;
-
- btVector3 dir;
- size_t i;
- float b[4], sum, inv;
- btVector3 vec, p1, p2;
-
- btPortalDir(portal, &dir);
-
- // use barycentric coordinates of tetrahedron to find origin
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 1)->v,
- &btMprSimplexPoint(portal, 2)->v);
- b[0] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 3)->v);
-
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 3)->v,
- &btMprSimplexPoint(portal, 2)->v);
- b[1] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 0)->v);
-
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 0)->v,
- &btMprSimplexPoint(portal, 1)->v);
- b[2] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 3)->v);
-
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 2)->v,
- &btMprSimplexPoint(portal, 1)->v);
- b[3] = btMprVec3Dot(&vec, &btMprSimplexPoint(portal, 0)->v);
-
- sum = b[0] + b[1] + b[2] + b[3];
-
- if (btMprIsZero(sum) || sum < 0.f)
- {
- b[0] = 0.f;
-
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 2)->v,
- &btMprSimplexPoint(portal, 3)->v);
- b[1] = btMprVec3Dot(&vec, &dir);
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 3)->v,
- &btMprSimplexPoint(portal, 1)->v);
- b[2] = btMprVec3Dot(&vec, &dir);
- btMprVec3Cross(&vec, &btMprSimplexPoint(portal, 1)->v,
- &btMprSimplexPoint(portal, 2)->v);
- b[3] = btMprVec3Dot(&vec, &dir);
-
- sum = b[1] + b[2] + b[3];
- }
-
- inv = 1.f / sum;
-
- btMprVec3Copy(&p1, origin);
- btMprVec3Copy(&p2, origin);
- for (i = 0; i < 4; i++)
- {
- btMprVec3Copy(&vec, &btMprSimplexPoint(portal, i)->v1);
- btMprVec3Scale(&vec, b[i]);
- btMprVec3Add(&p1, &vec);
-
- btMprVec3Copy(&vec, &btMprSimplexPoint(portal, i)->v2);
- btMprVec3Scale(&vec, b[i]);
- btMprVec3Add(&p2, &vec);
- }
- btMprVec3Scale(&p1, inv);
- btMprVec3Scale(&p2, inv);
-#ifdef MPR_AVERAGE_CONTACT_POSITIONS
- btMprVec3Copy(pos, &p1);
- btMprVec3Add(pos, &p2);
- btMprVec3Scale(pos, 0.5);
-#else
- btMprVec3Copy(pos, &p2);
-#endif //MPR_AVERAGE_CONTACT_POSITIONS
-}
-
-inline float btMprVec3Dist2(const btVector3 *a, const btVector3 *b)
-{
- btVector3 ab;
- btMprVec3Sub2(&ab, a, b);
- return btMprVec3Len2(&ab);
-}
-
-inline float _btMprVec3PointSegmentDist2(const btVector3 *P,
- const btVector3 *x0,
- const btVector3 *b,
- btVector3 *witness)
-{
- // The computation comes from solving equation of segment:
- // S(t) = x0 + t.d
- // where - x0 is initial point of segment
- // - d is direction of segment from x0 (|d| > 0)
- // - t belongs to <0, 1> interval
- //
- // Than, distance from a segment to some point P can be expressed:
- // D(t) = |x0 + t.d - P|^2
- // which is distance from any point on segment. Minimization
- // of this function brings distance from P to segment.
- // Minimization of D(t) leads to simple quadratic equation that's
- // solving is straightforward.
- //
- // Bonus of this method is witness point for free.
-
- float dist, t;
- btVector3 d, a;
-
- // direction of segment
- btMprVec3Sub2(&d, b, x0);
-
- // precompute vector from P to x0
- btMprVec3Sub2(&a, x0, P);
-
- t = -1.f * btMprVec3Dot(&a, &d);
- t /= btMprVec3Len2(&d);
-
- if (t < 0.f || btMprIsZero(t))
- {
- dist = btMprVec3Dist2(x0, P);
- if (witness)
- btMprVec3Copy(witness, x0);
- }
- else if (t > 1.f || btMprEq(t, 1.f))
- {
- dist = btMprVec3Dist2(b, P);
- if (witness)
- btMprVec3Copy(witness, b);
- }
- else
- {
- if (witness)
- {
- btMprVec3Copy(witness, &d);
- btMprVec3Scale(witness, t);
- btMprVec3Add(witness, x0);
- dist = btMprVec3Dist2(witness, P);
- }
- else
- {
- // recycling variables
- btMprVec3Scale(&d, t);
- btMprVec3Add(&d, &a);
- dist = btMprVec3Len2(&d);
- }
- }
-
- return dist;
-}
-
-inline float btMprVec3PointTriDist2(const btVector3 *P,
- const btVector3 *x0, const btVector3 *B,
- const btVector3 *C,
- btVector3 *witness)
-{
- // Computation comes from analytic expression for triangle (x0, B, C)
- // T(s, t) = x0 + s.d1 + t.d2, where d1 = B - x0 and d2 = C - x0 and
- // Then equation for distance is:
- // D(s, t) = | T(s, t) - P |^2
- // This leads to minimization of quadratic function of two variables.
- // The solution from is taken only if s is between 0 and 1, t is
- // between 0 and 1 and t + s < 1, otherwise distance from segment is
- // computed.
-
- btVector3 d1, d2, a;
- float u, v, w, p, q, r;
- float s, t, dist, dist2;
- btVector3 witness2;
-
- btMprVec3Sub2(&d1, B, x0);
- btMprVec3Sub2(&d2, C, x0);
- btMprVec3Sub2(&a, x0, P);
-
- u = btMprVec3Dot(&a, &a);
- v = btMprVec3Dot(&d1, &d1);
- w = btMprVec3Dot(&d2, &d2);
- p = btMprVec3Dot(&a, &d1);
- q = btMprVec3Dot(&a, &d2);
- r = btMprVec3Dot(&d1, &d2);
-
- btScalar div = (w * v - r * r);
- if (btMprIsZero(div))
- {
- s = -1;
- }
- else
- {
- s = (q * r - w * p) / div;
- t = (-s * r - q) / w;
- }
-
- if ((btMprIsZero(s) || s > 0.f) && (btMprEq(s, 1.f) || s < 1.f) && (btMprIsZero(t) || t > 0.f) && (btMprEq(t, 1.f) || t < 1.f) && (btMprEq(t + s, 1.f) || t + s < 1.f))
- {
- if (witness)
- {
- btMprVec3Scale(&d1, s);
- btMprVec3Scale(&d2, t);
- btMprVec3Copy(witness, x0);
- btMprVec3Add(witness, &d1);
- btMprVec3Add(witness, &d2);
-
- dist = btMprVec3Dist2(witness, P);
- }
- else
- {
- dist = s * s * v;
- dist += t * t * w;
- dist += 2.f * s * t * r;
- dist += 2.f * s * p;
- dist += 2.f * t * q;
- dist += u;
- }
- }
- else
- {
- dist = _btMprVec3PointSegmentDist2(P, x0, B, witness);
-
- dist2 = _btMprVec3PointSegmentDist2(P, x0, C, &witness2);
- if (dist2 < dist)
- {
- dist = dist2;
- if (witness)
- btMprVec3Copy(witness, &witness2);
- }
-
- dist2 = _btMprVec3PointSegmentDist2(P, B, C, &witness2);
- if (dist2 < dist)
- {
- dist = dist2;
- if (witness)
- btMprVec3Copy(witness, &witness2);
- }
- }
-
- return dist;
-}
-
-template <typename btConvexTemplate>
-static void btFindPenetr(const btConvexTemplate &a, const btConvexTemplate &b,
- const btMprCollisionDescription &colDesc,
- btMprSimplex_t *portal,
- float *depth, btVector3 *pdir, btVector3 *pos)
-{
- btVector3 dir;
- btMprSupport_t v4;
- unsigned long iterations;
-
- btVector3 zero = btVector3(0, 0, 0);
- btVector3 *origin = &zero;
-
- iterations = 1UL;
- for (int i = 0; i < BT_MPR_MAX_ITERATIONS; i++)
- //while (1)
- {
- // compute portal direction and obtain next support point
- btPortalDir(portal, &dir);
-
- btMprSupport(a, b, colDesc, dir, &v4);
-
- // reached tolerance -> find penetration info
- if (portalReachTolerance(portal, &v4, &dir) || iterations == BT_MPR_MAX_ITERATIONS)
- {
- *depth = btMprVec3PointTriDist2(origin, &btMprSimplexPoint(portal, 1)->v, &btMprSimplexPoint(portal, 2)->v, &btMprSimplexPoint(portal, 3)->v, pdir);
- *depth = BT_MPR_SQRT(*depth);
-
- if (btMprIsZero((*pdir).x()) && btMprIsZero((*pdir).y()) && btMprIsZero((*pdir).z()))
- {
- *pdir = dir;
- }
- btMprVec3Normalize(pdir);
-
- // barycentric coordinates:
- btFindPos(portal, pos);
-
- return;
- }
-
- btExpandPortal(portal, &v4);
-
- iterations++;
- }
-}
-
-static void btFindPenetrTouch(btMprSimplex_t *portal, float *depth, btVector3 *dir, btVector3 *pos)
-{
- // Touching contact on portal's v1 - so depth is zero and direction
- // is unimportant and pos can be guessed
- *depth = 0.f;
- btVector3 zero = btVector3(0, 0, 0);
- btVector3 *origin = &zero;
-
- btMprVec3Copy(dir, origin);
-#ifdef MPR_AVERAGE_CONTACT_POSITIONS
- btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v1);
- btMprVec3Add(pos, &btMprSimplexPoint(portal, 1)->v2);
- btMprVec3Scale(pos, 0.5);
-#else
- btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v2);
-#endif
-}
-
-static void btFindPenetrSegment(btMprSimplex_t *portal,
- float *depth, btVector3 *dir, btVector3 *pos)
-{
- // Origin lies on v0-v1 segment.
- // Depth is distance to v1, direction also and position must be
- // computed
-#ifdef MPR_AVERAGE_CONTACT_POSITIONS
- btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v1);
- btMprVec3Add(pos, &btMprSimplexPoint(portal, 1)->v2);
- btMprVec3Scale(pos, 0.5f);
-#else
- btMprVec3Copy(pos, &btMprSimplexPoint(portal, 1)->v2);
-#endif //MPR_AVERAGE_CONTACT_POSITIONS
-
- btMprVec3Copy(dir, &btMprSimplexPoint(portal, 1)->v);
- *depth = BT_MPR_SQRT(btMprVec3Len2(dir));
- btMprVec3Normalize(dir);
-}
-
-template <typename btConvexTemplate>
-inline int btMprPenetration(const btConvexTemplate &a, const btConvexTemplate &b,
- const btMprCollisionDescription &colDesc,
- float *depthOut, btVector3 *dirOut, btVector3 *posOut)
-{
- btMprSimplex_t portal;
-
- // Phase 1: Portal discovery
- int result = btDiscoverPortal(a, b, colDesc, &portal);
-
- //sepAxis[pairIndex] = *pdir;//or -dir?
-
- switch (result)
- {
- case 0:
- {
- // Phase 2: Portal refinement
-
- result = btRefinePortal(a, b, colDesc, &portal);
- if (result < 0)
- return -1;
-
- // Phase 3. Penetration info
- btFindPenetr(a, b, colDesc, &portal, depthOut, dirOut, posOut);
-
- break;
- }
- case 1:
- {
- // Touching contact on portal's v1.
- btFindPenetrTouch(&portal, depthOut, dirOut, posOut);
- result = 0;
- break;
- }
- case 2:
- {
- btFindPenetrSegment(&portal, depthOut, dirOut, posOut);
- result = 0;
- break;
- }
- default:
- {
- //if (res < 0)
- //{
- // Origin isn't inside portal - no collision.
- result = -1;
- //}
- }
- };
-
- return result;
-};
-
-template <typename btConvexTemplate, typename btMprDistanceTemplate>
-inline int btComputeMprPenetration(const btConvexTemplate &a, const btConvexTemplate &b, const btMprCollisionDescription &colDesc, btMprDistanceTemplate *distInfo)
-{
- btVector3 dir, pos;
- float depth;
-
- int res = btMprPenetration(a, b, colDesc, &depth, &dir, &pos);
- if (res == 0)
- {
- distInfo->m_distance = -depth;
- distInfo->m_pointOnB = pos;
- distInfo->m_normalBtoA = -dir;
- distInfo->m_pointOnA = pos - distInfo->m_distance * dir;
- return 0;
- }
-
- return -1;
-}
-
-#endif //BT_MPR_PENETRATION_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp
deleted file mode 100644
index dca3e09267..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp
+++ /dev/null
@@ -1,450 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btPersistentManifold.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btSerializer.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btCollisionObjectData btCollisionObjectDoubleData
-#else
-#define btCollisionObjectData btCollisionObjectFloatData
-#endif
-
-btScalar gContactBreakingThreshold = btScalar(0.02);
-ContactDestroyedCallback gContactDestroyedCallback = 0;
-ContactProcessedCallback gContactProcessedCallback = 0;
-ContactStartedCallback gContactStartedCallback = 0;
-ContactEndedCallback gContactEndedCallback = 0;
-///gContactCalcArea3Points will approximate the convex hull area using 3 points
-///when setting it to false, it will use 4 points to compute the area: it is more accurate but slower
-bool gContactCalcArea3Points = true;
-
-btPersistentManifold::btPersistentManifold()
- : btTypedObject(BT_PERSISTENT_MANIFOLD_TYPE),
- m_body0(0),
- m_body1(0),
- m_cachedPoints(0),
- m_companionIdA(0),
- m_companionIdB(0),
- m_index1a(0)
-{
-}
-
-#ifdef DEBUG_PERSISTENCY
-#include <stdio.h>
-void btPersistentManifold::DebugPersistency()
-{
- int i;
- printf("DebugPersistency : numPoints %d\n", m_cachedPoints);
- for (i = 0; i < m_cachedPoints; i++)
- {
- printf("m_pointCache[%d].m_userPersistentData = %x\n", i, m_pointCache[i].m_userPersistentData);
- }
-}
-#endif //DEBUG_PERSISTENCY
-
-void btPersistentManifold::clearUserCache(btManifoldPoint& pt)
-{
- void* oldPtr = pt.m_userPersistentData;
- if (oldPtr)
- {
-#ifdef DEBUG_PERSISTENCY
- int i;
- int occurance = 0;
- for (i = 0; i < m_cachedPoints; i++)
- {
- if (m_pointCache[i].m_userPersistentData == oldPtr)
- {
- occurance++;
- if (occurance > 1)
- printf("error in clearUserCache\n");
- }
- }
- btAssert(occurance <= 0);
-#endif //DEBUG_PERSISTENCY
-
- if (pt.m_userPersistentData && gContactDestroyedCallback)
- {
- (*gContactDestroyedCallback)(pt.m_userPersistentData);
- pt.m_userPersistentData = 0;
- }
-
-#ifdef DEBUG_PERSISTENCY
- DebugPersistency();
-#endif
- }
-}
-
-static inline btScalar calcArea4Points(const btVector3& p0, const btVector3& p1, const btVector3& p2, const btVector3& p3)
-{
- // It calculates possible 3 area constructed from random 4 points and returns the biggest one.
-
- btVector3 a[3], b[3];
- a[0] = p0 - p1;
- a[1] = p0 - p2;
- a[2] = p0 - p3;
- b[0] = p2 - p3;
- b[1] = p1 - p3;
- b[2] = p1 - p2;
-
- //todo: Following 3 cross production can be easily optimized by SIMD.
- btVector3 tmp0 = a[0].cross(b[0]);
- btVector3 tmp1 = a[1].cross(b[1]);
- btVector3 tmp2 = a[2].cross(b[2]);
-
- return btMax(btMax(tmp0.length2(), tmp1.length2()), tmp2.length2());
-}
-
-int btPersistentManifold::sortCachedPoints(const btManifoldPoint& pt)
-{
- //calculate 4 possible cases areas, and take biggest area
- //also need to keep 'deepest'
-
- int maxPenetrationIndex = -1;
-#define KEEP_DEEPEST_POINT 1
-#ifdef KEEP_DEEPEST_POINT
- btScalar maxPenetration = pt.getDistance();
- for (int i = 0; i < 4; i++)
- {
- if (m_pointCache[i].getDistance() < maxPenetration)
- {
- maxPenetrationIndex = i;
- maxPenetration = m_pointCache[i].getDistance();
- }
- }
-#endif //KEEP_DEEPEST_POINT
-
- btScalar res0(btScalar(0.)), res1(btScalar(0.)), res2(btScalar(0.)), res3(btScalar(0.));
-
- if (gContactCalcArea3Points)
- {
- if (maxPenetrationIndex != 0)
- {
- btVector3 a0 = pt.m_localPointA - m_pointCache[1].m_localPointA;
- btVector3 b0 = m_pointCache[3].m_localPointA - m_pointCache[2].m_localPointA;
- btVector3 cross = a0.cross(b0);
- res0 = cross.length2();
- }
- if (maxPenetrationIndex != 1)
- {
- btVector3 a1 = pt.m_localPointA - m_pointCache[0].m_localPointA;
- btVector3 b1 = m_pointCache[3].m_localPointA - m_pointCache[2].m_localPointA;
- btVector3 cross = a1.cross(b1);
- res1 = cross.length2();
- }
-
- if (maxPenetrationIndex != 2)
- {
- btVector3 a2 = pt.m_localPointA - m_pointCache[0].m_localPointA;
- btVector3 b2 = m_pointCache[3].m_localPointA - m_pointCache[1].m_localPointA;
- btVector3 cross = a2.cross(b2);
- res2 = cross.length2();
- }
-
- if (maxPenetrationIndex != 3)
- {
- btVector3 a3 = pt.m_localPointA - m_pointCache[0].m_localPointA;
- btVector3 b3 = m_pointCache[2].m_localPointA - m_pointCache[1].m_localPointA;
- btVector3 cross = a3.cross(b3);
- res3 = cross.length2();
- }
- }
- else
- {
- if (maxPenetrationIndex != 0)
- {
- res0 = calcArea4Points(pt.m_localPointA, m_pointCache[1].m_localPointA, m_pointCache[2].m_localPointA, m_pointCache[3].m_localPointA);
- }
-
- if (maxPenetrationIndex != 1)
- {
- res1 = calcArea4Points(pt.m_localPointA, m_pointCache[0].m_localPointA, m_pointCache[2].m_localPointA, m_pointCache[3].m_localPointA);
- }
-
- if (maxPenetrationIndex != 2)
- {
- res2 = calcArea4Points(pt.m_localPointA, m_pointCache[0].m_localPointA, m_pointCache[1].m_localPointA, m_pointCache[3].m_localPointA);
- }
-
- if (maxPenetrationIndex != 3)
- {
- res3 = calcArea4Points(pt.m_localPointA, m_pointCache[0].m_localPointA, m_pointCache[1].m_localPointA, m_pointCache[2].m_localPointA);
- }
- }
- btVector4 maxvec(res0, res1, res2, res3);
- int biggestarea = maxvec.closestAxis4();
- return biggestarea;
-}
-
-int btPersistentManifold::getCacheEntry(const btManifoldPoint& newPoint) const
-{
- btScalar shortestDist = getContactBreakingThreshold() * getContactBreakingThreshold();
- int size = getNumContacts();
- int nearestPoint = -1;
- for (int i = 0; i < size; i++)
- {
- const btManifoldPoint& mp = m_pointCache[i];
-
- btVector3 diffA = mp.m_localPointA - newPoint.m_localPointA;
- const btScalar distToManiPoint = diffA.dot(diffA);
- if (distToManiPoint < shortestDist)
- {
- shortestDist = distToManiPoint;
- nearestPoint = i;
- }
- }
- return nearestPoint;
-}
-
-int btPersistentManifold::addManifoldPoint(const btManifoldPoint& newPoint, bool isPredictive)
-{
- if (!isPredictive)
- {
- btAssert(validContactDistance(newPoint));
- }
-
- int insertIndex = getNumContacts();
- if (insertIndex == MANIFOLD_CACHE_SIZE)
- {
-#if MANIFOLD_CACHE_SIZE >= 4
- //sort cache so best points come first, based on area
- insertIndex = sortCachedPoints(newPoint);
-#else
- insertIndex = 0;
-#endif
- clearUserCache(m_pointCache[insertIndex]);
- }
- else
- {
- m_cachedPoints++;
- }
- if (insertIndex < 0)
- insertIndex = 0;
-
- btAssert(m_pointCache[insertIndex].m_userPersistentData == 0);
- m_pointCache[insertIndex] = newPoint;
- return insertIndex;
-}
-
-btScalar btPersistentManifold::getContactBreakingThreshold() const
-{
- return m_contactBreakingThreshold;
-}
-
-void btPersistentManifold::refreshContactPoints(const btTransform& trA, const btTransform& trB)
-{
- int i;
-#ifdef DEBUG_PERSISTENCY
- printf("refreshContactPoints posA = (%f,%f,%f) posB = (%f,%f,%f)\n",
- trA.getOrigin().getX(),
- trA.getOrigin().getY(),
- trA.getOrigin().getZ(),
- trB.getOrigin().getX(),
- trB.getOrigin().getY(),
- trB.getOrigin().getZ());
-#endif //DEBUG_PERSISTENCY
- /// first refresh worldspace positions and distance
- for (i = getNumContacts() - 1; i >= 0; i--)
- {
- btManifoldPoint& manifoldPoint = m_pointCache[i];
- manifoldPoint.m_positionWorldOnA = trA(manifoldPoint.m_localPointA);
- manifoldPoint.m_positionWorldOnB = trB(manifoldPoint.m_localPointB);
- manifoldPoint.m_distance1 = (manifoldPoint.m_positionWorldOnA - manifoldPoint.m_positionWorldOnB).dot(manifoldPoint.m_normalWorldOnB);
- manifoldPoint.m_lifeTime++;
- }
-
- /// then
- btScalar distance2d;
- btVector3 projectedDifference, projectedPoint;
- for (i = getNumContacts() - 1; i >= 0; i--)
- {
- btManifoldPoint& manifoldPoint = m_pointCache[i];
- //contact becomes invalid when signed distance exceeds margin (projected on contactnormal direction)
- if (!validContactDistance(manifoldPoint))
- {
- removeContactPoint(i);
- }
- else
- {
- //todo: friction anchor may require the contact to be around a bit longer
- //contact also becomes invalid when relative movement orthogonal to normal exceeds margin
- projectedPoint = manifoldPoint.m_positionWorldOnA - manifoldPoint.m_normalWorldOnB * manifoldPoint.m_distance1;
- projectedDifference = manifoldPoint.m_positionWorldOnB - projectedPoint;
- distance2d = projectedDifference.dot(projectedDifference);
- if (distance2d > getContactBreakingThreshold() * getContactBreakingThreshold())
- {
- removeContactPoint(i);
- }
- else
- {
- //contact point processed callback
- if (gContactProcessedCallback)
- (*gContactProcessedCallback)(manifoldPoint, (void*)m_body0, (void*)m_body1);
- }
- }
- }
-#ifdef DEBUG_PERSISTENCY
- DebugPersistency();
-#endif //
-}
-
-int btPersistentManifold::calculateSerializeBufferSize() const
-{
- return sizeof(btPersistentManifoldData);
-}
-
-const char* btPersistentManifold::serialize(const class btPersistentManifold* manifold, void* dataBuffer, class btSerializer* serializer) const
-{
- btPersistentManifoldData* dataOut = (btPersistentManifoldData*)dataBuffer;
- memset(dataOut, 0, sizeof(btPersistentManifoldData));
-
- dataOut->m_body0 = (btCollisionObjectData*)serializer->getUniquePointer((void*)manifold->getBody0());
- dataOut->m_body1 = (btCollisionObjectData*)serializer->getUniquePointer((void*)manifold->getBody1());
- dataOut->m_contactBreakingThreshold = manifold->getContactBreakingThreshold();
- dataOut->m_contactProcessingThreshold = manifold->getContactProcessingThreshold();
- dataOut->m_numCachedPoints = manifold->getNumContacts();
- dataOut->m_companionIdA = manifold->m_companionIdA;
- dataOut->m_companionIdB = manifold->m_companionIdB;
- dataOut->m_index1a = manifold->m_index1a;
- dataOut->m_objectType = manifold->m_objectType;
-
- for (int i = 0; i < this->getNumContacts(); i++)
- {
- const btManifoldPoint& pt = manifold->getContactPoint(i);
- dataOut->m_pointCacheAppliedImpulse[i] = pt.m_appliedImpulse;
- dataOut->m_pointCachePrevRHS[i] = pt.m_prevRHS;
- dataOut->m_pointCacheAppliedImpulseLateral1[i] = pt.m_appliedImpulseLateral1;
- dataOut->m_pointCacheAppliedImpulseLateral2[i] = pt.m_appliedImpulseLateral2;
- pt.m_localPointA.serialize(dataOut->m_pointCacheLocalPointA[i]);
- pt.m_localPointB.serialize(dataOut->m_pointCacheLocalPointB[i]);
- pt.m_normalWorldOnB.serialize(dataOut->m_pointCacheNormalWorldOnB[i]);
- dataOut->m_pointCacheDistance[i] = pt.m_distance1;
- dataOut->m_pointCacheCombinedContactDamping1[i] = pt.m_combinedContactDamping1;
- dataOut->m_pointCacheCombinedContactStiffness1[i] = pt.m_combinedContactStiffness1;
- dataOut->m_pointCacheLifeTime[i] = pt.m_lifeTime;
- dataOut->m_pointCacheFrictionCFM[i] = pt.m_frictionCFM;
- dataOut->m_pointCacheContactERP[i] = pt.m_contactERP;
- dataOut->m_pointCacheContactCFM[i] = pt.m_contactCFM;
- dataOut->m_pointCacheContactPointFlags[i] = pt.m_contactPointFlags;
- dataOut->m_pointCacheIndex0[i] = pt.m_index0;
- dataOut->m_pointCacheIndex1[i] = pt.m_index1;
- dataOut->m_pointCachePartId0[i] = pt.m_partId0;
- dataOut->m_pointCachePartId1[i] = pt.m_partId1;
- pt.m_positionWorldOnA.serialize(dataOut->m_pointCachePositionWorldOnA[i]);
- pt.m_positionWorldOnB.serialize(dataOut->m_pointCachePositionWorldOnB[i]);
- dataOut->m_pointCacheCombinedFriction[i] = pt.m_combinedFriction;
- pt.m_lateralFrictionDir1.serialize(dataOut->m_pointCacheLateralFrictionDir1[i]);
- pt.m_lateralFrictionDir2.serialize(dataOut->m_pointCacheLateralFrictionDir2[i]);
- dataOut->m_pointCacheCombinedRollingFriction[i] = pt.m_combinedRollingFriction;
- dataOut->m_pointCacheCombinedSpinningFriction[i] = pt.m_combinedSpinningFriction;
- dataOut->m_pointCacheCombinedRestitution[i] = pt.m_combinedRestitution;
- dataOut->m_pointCacheContactMotion1[i] = pt.m_contactMotion1;
- dataOut->m_pointCacheContactMotion2[i] = pt.m_contactMotion2;
- }
- return btPersistentManifoldDataName;
-}
-
-void btPersistentManifold::deSerialize(const struct btPersistentManifoldDoubleData* manifoldDataPtr)
-{
- m_contactBreakingThreshold = manifoldDataPtr->m_contactBreakingThreshold;
- m_contactProcessingThreshold = manifoldDataPtr->m_contactProcessingThreshold;
- m_cachedPoints = manifoldDataPtr->m_numCachedPoints;
- m_companionIdA = manifoldDataPtr->m_companionIdA;
- m_companionIdB = manifoldDataPtr->m_companionIdB;
- //m_index1a = manifoldDataPtr->m_index1a;
- m_objectType = manifoldDataPtr->m_objectType;
-
- for (int i = 0; i < this->getNumContacts(); i++)
- {
- btManifoldPoint& pt = m_pointCache[i];
-
- pt.m_appliedImpulse = manifoldDataPtr->m_pointCacheAppliedImpulse[i];
- pt.m_prevRHS = manifoldDataPtr->m_pointCachePrevRHS[i];
- pt.m_appliedImpulseLateral1 = manifoldDataPtr->m_pointCacheAppliedImpulseLateral1[i];
- pt.m_appliedImpulseLateral2 = manifoldDataPtr->m_pointCacheAppliedImpulseLateral2[i];
- pt.m_localPointA.deSerializeDouble(manifoldDataPtr->m_pointCacheLocalPointA[i]);
- pt.m_localPointB.deSerializeDouble(manifoldDataPtr->m_pointCacheLocalPointB[i]);
- pt.m_normalWorldOnB.deSerializeDouble(manifoldDataPtr->m_pointCacheNormalWorldOnB[i]);
- pt.m_distance1 = manifoldDataPtr->m_pointCacheDistance[i];
- pt.m_combinedContactDamping1 = manifoldDataPtr->m_pointCacheCombinedContactDamping1[i];
- pt.m_combinedContactStiffness1 = manifoldDataPtr->m_pointCacheCombinedContactStiffness1[i];
- pt.m_lifeTime = manifoldDataPtr->m_pointCacheLifeTime[i];
- pt.m_frictionCFM = manifoldDataPtr->m_pointCacheFrictionCFM[i];
- pt.m_contactERP = manifoldDataPtr->m_pointCacheContactERP[i];
- pt.m_contactCFM = manifoldDataPtr->m_pointCacheContactCFM[i];
- pt.m_contactPointFlags = manifoldDataPtr->m_pointCacheContactPointFlags[i];
- pt.m_index0 = manifoldDataPtr->m_pointCacheIndex0[i];
- pt.m_index1 = manifoldDataPtr->m_pointCacheIndex1[i];
- pt.m_partId0 = manifoldDataPtr->m_pointCachePartId0[i];
- pt.m_partId1 = manifoldDataPtr->m_pointCachePartId1[i];
- pt.m_positionWorldOnA.deSerializeDouble(manifoldDataPtr->m_pointCachePositionWorldOnA[i]);
- pt.m_positionWorldOnB.deSerializeDouble(manifoldDataPtr->m_pointCachePositionWorldOnB[i]);
- pt.m_combinedFriction = manifoldDataPtr->m_pointCacheCombinedFriction[i];
- pt.m_lateralFrictionDir1.deSerializeDouble(manifoldDataPtr->m_pointCacheLateralFrictionDir1[i]);
- pt.m_lateralFrictionDir2.deSerializeDouble(manifoldDataPtr->m_pointCacheLateralFrictionDir2[i]);
- pt.m_combinedRollingFriction = manifoldDataPtr->m_pointCacheCombinedRollingFriction[i];
- pt.m_combinedSpinningFriction = manifoldDataPtr->m_pointCacheCombinedSpinningFriction[i];
- pt.m_combinedRestitution = manifoldDataPtr->m_pointCacheCombinedRestitution[i];
- pt.m_contactMotion1 = manifoldDataPtr->m_pointCacheContactMotion1[i];
- pt.m_contactMotion2 = manifoldDataPtr->m_pointCacheContactMotion2[i];
- }
-}
-
-void btPersistentManifold::deSerialize(const struct btPersistentManifoldFloatData* manifoldDataPtr)
-{
- m_contactBreakingThreshold = manifoldDataPtr->m_contactBreakingThreshold;
- m_contactProcessingThreshold = manifoldDataPtr->m_contactProcessingThreshold;
- m_cachedPoints = manifoldDataPtr->m_numCachedPoints;
- m_companionIdA = manifoldDataPtr->m_companionIdA;
- m_companionIdB = manifoldDataPtr->m_companionIdB;
- //m_index1a = manifoldDataPtr->m_index1a;
- m_objectType = manifoldDataPtr->m_objectType;
-
- for (int i = 0; i < this->getNumContacts(); i++)
- {
- btManifoldPoint& pt = m_pointCache[i];
-
- pt.m_appliedImpulse = manifoldDataPtr->m_pointCacheAppliedImpulse[i];
- pt.m_prevRHS = manifoldDataPtr->m_pointCachePrevRHS[i];
- pt.m_appliedImpulseLateral1 = manifoldDataPtr->m_pointCacheAppliedImpulseLateral1[i];
- pt.m_appliedImpulseLateral2 = manifoldDataPtr->m_pointCacheAppliedImpulseLateral2[i];
- pt.m_localPointA.deSerialize(manifoldDataPtr->m_pointCacheLocalPointA[i]);
- pt.m_localPointB.deSerialize(manifoldDataPtr->m_pointCacheLocalPointB[i]);
- pt.m_normalWorldOnB.deSerialize(manifoldDataPtr->m_pointCacheNormalWorldOnB[i]);
- pt.m_distance1 = manifoldDataPtr->m_pointCacheDistance[i];
- pt.m_combinedContactDamping1 = manifoldDataPtr->m_pointCacheCombinedContactDamping1[i];
- pt.m_combinedContactStiffness1 = manifoldDataPtr->m_pointCacheCombinedContactStiffness1[i];
- pt.m_lifeTime = manifoldDataPtr->m_pointCacheLifeTime[i];
- pt.m_frictionCFM = manifoldDataPtr->m_pointCacheFrictionCFM[i];
- pt.m_contactERP = manifoldDataPtr->m_pointCacheContactERP[i];
- pt.m_contactCFM = manifoldDataPtr->m_pointCacheContactCFM[i];
- pt.m_contactPointFlags = manifoldDataPtr->m_pointCacheContactPointFlags[i];
- pt.m_index0 = manifoldDataPtr->m_pointCacheIndex0[i];
- pt.m_index1 = manifoldDataPtr->m_pointCacheIndex1[i];
- pt.m_partId0 = manifoldDataPtr->m_pointCachePartId0[i];
- pt.m_partId1 = manifoldDataPtr->m_pointCachePartId1[i];
- pt.m_positionWorldOnA.deSerialize(manifoldDataPtr->m_pointCachePositionWorldOnA[i]);
- pt.m_positionWorldOnB.deSerialize(manifoldDataPtr->m_pointCachePositionWorldOnB[i]);
- pt.m_combinedFriction = manifoldDataPtr->m_pointCacheCombinedFriction[i];
- pt.m_lateralFrictionDir1.deSerialize(manifoldDataPtr->m_pointCacheLateralFrictionDir1[i]);
- pt.m_lateralFrictionDir2.deSerialize(manifoldDataPtr->m_pointCacheLateralFrictionDir2[i]);
- pt.m_combinedRollingFriction = manifoldDataPtr->m_pointCacheCombinedRollingFriction[i];
- pt.m_combinedSpinningFriction = manifoldDataPtr->m_pointCacheCombinedSpinningFriction[i];
- pt.m_combinedRestitution = manifoldDataPtr->m_pointCacheCombinedRestitution[i];
- pt.m_contactMotion1 = manifoldDataPtr->m_pointCacheContactMotion1[i];
- pt.m_contactMotion2 = manifoldDataPtr->m_pointCacheContactMotion2[i];
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h
deleted file mode 100644
index 0e26da0ebe..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPersistentManifold.h
+++ /dev/null
@@ -1,374 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_PERSISTENT_MANIFOLD_H
-#define BT_PERSISTENT_MANIFOLD_H
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-#include "btManifoldPoint.h"
-class btCollisionObject;
-#include "LinearMath/btAlignedAllocator.h"
-
-struct btCollisionResult;
-struct btCollisionObjectDoubleData;
-struct btCollisionObjectFloatData;
-
-///maximum contact breaking and merging threshold
-extern btScalar gContactBreakingThreshold;
-
-#ifndef SWIG
-class btPersistentManifold;
-
-typedef bool (*ContactDestroyedCallback)(void* userPersistentData);
-typedef bool (*ContactProcessedCallback)(btManifoldPoint& cp, void* body0, void* body1);
-typedef void (*ContactStartedCallback)(btPersistentManifold* const& manifold);
-typedef void (*ContactEndedCallback)(btPersistentManifold* const& manifold);
-extern ContactDestroyedCallback gContactDestroyedCallback;
-extern ContactProcessedCallback gContactProcessedCallback;
-extern ContactStartedCallback gContactStartedCallback;
-extern ContactEndedCallback gContactEndedCallback;
-#endif //SWIG
-
-//the enum starts at 1024 to avoid type conflicts with btTypedConstraint
-enum btContactManifoldTypes
-{
- MIN_CONTACT_MANIFOLD_TYPE = 1024,
- BT_PERSISTENT_MANIFOLD_TYPE
-};
-
-#define MANIFOLD_CACHE_SIZE 4
-
-///btPersistentManifold is a contact point cache, it stays persistent as long as objects are overlapping in the broadphase.
-///Those contact points are created by the collision narrow phase.
-///The cache can be empty, or hold 1,2,3 or 4 points. Some collision algorithms (GJK) might only add one point at a time.
-///updates/refreshes old contact points, and throw them away if necessary (distance becomes too large)
-///reduces the cache to 4 points, when more then 4 points are added, using following rules:
-///the contact point with deepest penetration is always kept, and it tries to maximuze the area covered by the points
-///note that some pairs of objects might have more then one contact manifold.
-
-//ATTRIBUTE_ALIGNED128( class) btPersistentManifold : public btTypedObject
-ATTRIBUTE_ALIGNED16(class)
-btPersistentManifold : public btTypedObject
-{
- btManifoldPoint m_pointCache[MANIFOLD_CACHE_SIZE];
-
- /// this two body pointers can point to the physics rigidbody class.
- const btCollisionObject* m_body0;
- const btCollisionObject* m_body1;
-
- int m_cachedPoints;
-
- btScalar m_contactBreakingThreshold;
- btScalar m_contactProcessingThreshold;
-
- /// sort cached points so most isolated points come first
- int sortCachedPoints(const btManifoldPoint& pt);
-
- int findContactPoint(const btManifoldPoint* unUsed, int numUnused, const btManifoldPoint& pt);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_companionIdA;
- int m_companionIdB;
-
- int m_index1a;
-
- btPersistentManifold();
-
- btPersistentManifold(const btCollisionObject* body0, const btCollisionObject* body1, int, btScalar contactBreakingThreshold, btScalar contactProcessingThreshold)
- : btTypedObject(BT_PERSISTENT_MANIFOLD_TYPE),
- m_body0(body0),
- m_body1(body1),
- m_cachedPoints(0),
- m_contactBreakingThreshold(contactBreakingThreshold),
- m_contactProcessingThreshold(contactProcessingThreshold),
- m_companionIdA(0),
- m_companionIdB(0),
- m_index1a(0)
- {
- }
-
- SIMD_FORCE_INLINE const btCollisionObject* getBody0() const { return m_body0; }
- SIMD_FORCE_INLINE const btCollisionObject* getBody1() const { return m_body1; }
-
- void setBodies(const btCollisionObject* body0, const btCollisionObject* body1)
- {
- m_body0 = body0;
- m_body1 = body1;
- }
-
- void clearUserCache(btManifoldPoint & pt);
-
-#ifdef DEBUG_PERSISTENCY
- void DebugPersistency();
-#endif //
-
- SIMD_FORCE_INLINE int getNumContacts() const
- {
- return m_cachedPoints;
- }
- /// the setNumContacts API is usually not used, except when you gather/fill all contacts manually
- void setNumContacts(int cachedPoints)
- {
- m_cachedPoints = cachedPoints;
- }
-
- SIMD_FORCE_INLINE const btManifoldPoint& getContactPoint(int index) const
- {
- btAssert(index < m_cachedPoints);
- return m_pointCache[index];
- }
-
- SIMD_FORCE_INLINE btManifoldPoint& getContactPoint(int index)
- {
- btAssert(index < m_cachedPoints);
- return m_pointCache[index];
- }
-
- ///@todo: get this margin from the current physics / collision environment
- btScalar getContactBreakingThreshold() const;
-
- btScalar getContactProcessingThreshold() const
- {
- return m_contactProcessingThreshold;
- }
-
- void setContactBreakingThreshold(btScalar contactBreakingThreshold)
- {
- m_contactBreakingThreshold = contactBreakingThreshold;
- }
-
- void setContactProcessingThreshold(btScalar contactProcessingThreshold)
- {
- m_contactProcessingThreshold = contactProcessingThreshold;
- }
-
- int getCacheEntry(const btManifoldPoint& newPoint) const;
-
- int addManifoldPoint(const btManifoldPoint& newPoint, bool isPredictive = false);
-
- void removeContactPoint(int index)
- {
- clearUserCache(m_pointCache[index]);
-
- int lastUsedIndex = getNumContacts() - 1;
- // m_pointCache[index] = m_pointCache[lastUsedIndex];
- if (index != lastUsedIndex)
- {
- m_pointCache[index] = m_pointCache[lastUsedIndex];
- //get rid of duplicated userPersistentData pointer
- m_pointCache[lastUsedIndex].m_userPersistentData = 0;
- m_pointCache[lastUsedIndex].m_appliedImpulse = 0.f;
- m_pointCache[lastUsedIndex].m_prevRHS = 0.f;
- m_pointCache[lastUsedIndex].m_contactPointFlags = 0;
- m_pointCache[lastUsedIndex].m_appliedImpulseLateral1 = 0.f;
- m_pointCache[lastUsedIndex].m_appliedImpulseLateral2 = 0.f;
- m_pointCache[lastUsedIndex].m_lifeTime = 0;
- }
-
- btAssert(m_pointCache[lastUsedIndex].m_userPersistentData == 0);
- m_cachedPoints--;
-
- if (gContactEndedCallback && m_cachedPoints == 0)
- {
- gContactEndedCallback(this);
- }
- }
- void replaceContactPoint(const btManifoldPoint& newPoint, int insertIndex)
- {
- btAssert(validContactDistance(newPoint));
-
-#define MAINTAIN_PERSISTENCY 1
-#ifdef MAINTAIN_PERSISTENCY
- int lifeTime = m_pointCache[insertIndex].getLifeTime();
- btScalar appliedImpulse = m_pointCache[insertIndex].m_appliedImpulse;
- btScalar prevRHS = m_pointCache[insertIndex].m_prevRHS;
- btScalar appliedLateralImpulse1 = m_pointCache[insertIndex].m_appliedImpulseLateral1;
- btScalar appliedLateralImpulse2 = m_pointCache[insertIndex].m_appliedImpulseLateral2;
-
- bool replacePoint = true;
- ///we keep existing contact points for friction anchors
- ///if the friction force is within the Coulomb friction cone
- if (newPoint.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR)
- {
- // printf("appliedImpulse=%f\n", appliedImpulse);
- // printf("appliedLateralImpulse1=%f\n", appliedLateralImpulse1);
- // printf("appliedLateralImpulse2=%f\n", appliedLateralImpulse2);
- // printf("mu = %f\n", m_pointCache[insertIndex].m_combinedFriction);
- btScalar mu = m_pointCache[insertIndex].m_combinedFriction;
- btScalar eps = 0; //we could allow to enlarge or shrink the tolerance to check against the friction cone a bit, say 1e-7
- btScalar a = appliedLateralImpulse1 * appliedLateralImpulse1 + appliedLateralImpulse2 * appliedLateralImpulse2;
- btScalar b = eps + mu * appliedImpulse;
- b = b * b;
- replacePoint = (a) > (b);
- }
-
- if (replacePoint)
- {
- btAssert(lifeTime >= 0);
- void* cache = m_pointCache[insertIndex].m_userPersistentData;
-
- m_pointCache[insertIndex] = newPoint;
- m_pointCache[insertIndex].m_userPersistentData = cache;
- m_pointCache[insertIndex].m_appliedImpulse = appliedImpulse;
- m_pointCache[insertIndex].m_prevRHS = prevRHS;
- m_pointCache[insertIndex].m_appliedImpulseLateral1 = appliedLateralImpulse1;
- m_pointCache[insertIndex].m_appliedImpulseLateral2 = appliedLateralImpulse2;
- }
-
- m_pointCache[insertIndex].m_lifeTime = lifeTime;
-#else
- clearUserCache(m_pointCache[insertIndex]);
- m_pointCache[insertIndex] = newPoint;
-
-#endif
- }
-
- bool validContactDistance(const btManifoldPoint& pt) const
- {
- return pt.m_distance1 <= getContactBreakingThreshold();
- }
- /// calculated new worldspace coordinates and depth, and reject points that exceed the collision margin
- void refreshContactPoints(const btTransform& trA, const btTransform& trB);
-
- SIMD_FORCE_INLINE void clearManifold()
- {
- int i;
- for (i = 0; i < m_cachedPoints; i++)
- {
- clearUserCache(m_pointCache[i]);
- }
-
- if (gContactEndedCallback && m_cachedPoints)
- {
- gContactEndedCallback(this);
- }
- m_cachedPoints = 0;
- }
-
- int calculateSerializeBufferSize() const;
- const char* serialize(const class btPersistentManifold* manifold, void* dataBuffer, class btSerializer* serializer) const;
- void deSerialize(const struct btPersistentManifoldDoubleData* manifoldDataPtr);
- void deSerialize(const struct btPersistentManifoldFloatData* manifoldDataPtr);
-};
-
-// clang-format off
-
-struct btPersistentManifoldDoubleData
-{
- btVector3DoubleData m_pointCacheLocalPointA[4];
- btVector3DoubleData m_pointCacheLocalPointB[4];
- btVector3DoubleData m_pointCachePositionWorldOnA[4];
- btVector3DoubleData m_pointCachePositionWorldOnB[4];
- btVector3DoubleData m_pointCacheNormalWorldOnB[4];
- btVector3DoubleData m_pointCacheLateralFrictionDir1[4];
- btVector3DoubleData m_pointCacheLateralFrictionDir2[4];
- double m_pointCacheDistance[4];
- double m_pointCacheAppliedImpulse[4];
- double m_pointCachePrevRHS[4];
- double m_pointCacheCombinedFriction[4];
- double m_pointCacheCombinedRollingFriction[4];
- double m_pointCacheCombinedSpinningFriction[4];
- double m_pointCacheCombinedRestitution[4];
- int m_pointCachePartId0[4];
- int m_pointCachePartId1[4];
- int m_pointCacheIndex0[4];
- int m_pointCacheIndex1[4];
- int m_pointCacheContactPointFlags[4];
- double m_pointCacheAppliedImpulseLateral1[4];
- double m_pointCacheAppliedImpulseLateral2[4];
- double m_pointCacheContactMotion1[4];
- double m_pointCacheContactMotion2[4];
- double m_pointCacheContactCFM[4];
- double m_pointCacheCombinedContactStiffness1[4];
- double m_pointCacheContactERP[4];
- double m_pointCacheCombinedContactDamping1[4];
- double m_pointCacheFrictionCFM[4];
- int m_pointCacheLifeTime[4];
-
- int m_numCachedPoints;
- int m_companionIdA;
- int m_companionIdB;
- int m_index1a;
-
- int m_objectType;
- double m_contactBreakingThreshold;
- double m_contactProcessingThreshold;
- int m_padding;
-
- btCollisionObjectDoubleData *m_body0;
- btCollisionObjectDoubleData *m_body1;
-};
-
-
-struct btPersistentManifoldFloatData
-{
- btVector3FloatData m_pointCacheLocalPointA[4];
- btVector3FloatData m_pointCacheLocalPointB[4];
- btVector3FloatData m_pointCachePositionWorldOnA[4];
- btVector3FloatData m_pointCachePositionWorldOnB[4];
- btVector3FloatData m_pointCacheNormalWorldOnB[4];
- btVector3FloatData m_pointCacheLateralFrictionDir1[4];
- btVector3FloatData m_pointCacheLateralFrictionDir2[4];
- float m_pointCacheDistance[4];
- float m_pointCacheAppliedImpulse[4];
- float m_pointCachePrevRHS[4];
- float m_pointCacheCombinedFriction[4];
- float m_pointCacheCombinedRollingFriction[4];
- float m_pointCacheCombinedSpinningFriction[4];
- float m_pointCacheCombinedRestitution[4];
- int m_pointCachePartId0[4];
- int m_pointCachePartId1[4];
- int m_pointCacheIndex0[4];
- int m_pointCacheIndex1[4];
- int m_pointCacheContactPointFlags[4];
- float m_pointCacheAppliedImpulseLateral1[4];
- float m_pointCacheAppliedImpulseLateral2[4];
- float m_pointCacheContactMotion1[4];
- float m_pointCacheContactMotion2[4];
- float m_pointCacheContactCFM[4];
- float m_pointCacheCombinedContactStiffness1[4];
- float m_pointCacheContactERP[4];
- float m_pointCacheCombinedContactDamping1[4];
- float m_pointCacheFrictionCFM[4];
- int m_pointCacheLifeTime[4];
-
- int m_numCachedPoints;
- int m_companionIdA;
- int m_companionIdB;
- int m_index1a;
-
- int m_objectType;
- float m_contactBreakingThreshold;
- float m_contactProcessingThreshold;
- int m_padding;
-
- btCollisionObjectFloatData *m_body0;
- btCollisionObjectFloatData *m_body1;
-};
-
-// clang-format on
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btPersistentManifoldData btPersistentManifoldDoubleData
-#define btPersistentManifoldDataName "btPersistentManifoldDoubleData"
-#else
-#define btPersistentManifoldData btPersistentManifoldFloatData
-#define btPersistentManifoldDataName "btPersistentManifoldFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-#endif //BT_PERSISTENT_MANIFOLD_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h
deleted file mode 100644
index 0900eb6e85..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPointCollector.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_POINT_COLLECTOR_H
-#define BT_POINT_COLLECTOR_H
-
-#include "btDiscreteCollisionDetectorInterface.h"
-
-struct btPointCollector : public btDiscreteCollisionDetectorInterface::Result
-{
- btVector3 m_normalOnBInWorld;
- btVector3 m_pointInWorld;
- btScalar m_distance; //negative means penetration
-
- bool m_hasResult;
-
- btPointCollector()
- : m_distance(btScalar(BT_LARGE_FLOAT)), m_hasResult(false)
- {
- }
-
- virtual void setShapeIdentifiersA(int partId0, int index0)
- {
- (void)partId0;
- (void)index0;
- }
- virtual void setShapeIdentifiersB(int partId1, int index1)
- {
- (void)partId1;
- (void)index1;
- }
-
- virtual void addContactPoint(const btVector3& normalOnBInWorld, const btVector3& pointInWorld, btScalar depth)
- {
- if (depth < m_distance)
- {
- m_hasResult = true;
- m_normalOnBInWorld = normalOnBInWorld;
- m_pointInWorld = pointInWorld;
- //negative means penetration
- m_distance = depth;
- }
- }
-};
-
-#endif //BT_POINT_COLLECTOR_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp
deleted file mode 100644
index 9d1836037d..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp
+++ /dev/null
@@ -1,548 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-///Separating axis rest based on work from Pierre Terdiman, see
-///And contact clipping based on work from Simon Hobbs
-
-#include "btPolyhedralContactClipping.h"
-#include "BulletCollision/CollisionShapes/btConvexPolyhedron.h"
-
-#include <float.h> //for FLT_MAX
-
-int gExpectedNbTests = 0;
-int gActualNbTests = 0;
-bool gUseInternalObject = true;
-
-// Clips a face to the back of a plane
-void btPolyhedralContactClipping::clipFace(const btVertexArray& pVtxIn, btVertexArray& ppVtxOut, const btVector3& planeNormalWS, btScalar planeEqWS)
-{
- int ve;
- btScalar ds, de;
- int numVerts = pVtxIn.size();
- if (numVerts < 2)
- return;
-
- btVector3 firstVertex = pVtxIn[pVtxIn.size() - 1];
- btVector3 endVertex = pVtxIn[0];
-
- ds = planeNormalWS.dot(firstVertex) + planeEqWS;
-
- for (ve = 0; ve < numVerts; ve++)
- {
- endVertex = pVtxIn[ve];
-
- de = planeNormalWS.dot(endVertex) + planeEqWS;
-
- if (ds < 0)
- {
- if (de < 0)
- {
- // Start < 0, end < 0, so output endVertex
- ppVtxOut.push_back(endVertex);
- }
- else
- {
- // Start < 0, end >= 0, so output intersection
- ppVtxOut.push_back(firstVertex.lerp(endVertex, btScalar(ds * 1.f / (ds - de))));
- }
- }
- else
- {
- if (de < 0)
- {
- // Start >= 0, end < 0 so output intersection and end
- ppVtxOut.push_back(firstVertex.lerp(endVertex, btScalar(ds * 1.f / (ds - de))));
- ppVtxOut.push_back(endVertex);
- }
- }
- firstVertex = endVertex;
- ds = de;
- }
-}
-
-static bool TestSepAxis(const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, const btVector3& sep_axis, btScalar& depth, btVector3& witnessPointA, btVector3& witnessPointB)
-{
- btScalar Min0, Max0;
- btScalar Min1, Max1;
- btVector3 witnesPtMinA, witnesPtMaxA;
- btVector3 witnesPtMinB, witnesPtMaxB;
-
- hullA.project(transA, sep_axis, Min0, Max0, witnesPtMinA, witnesPtMaxA);
- hullB.project(transB, sep_axis, Min1, Max1, witnesPtMinB, witnesPtMaxB);
-
- if (Max0 < Min1 || Max1 < Min0)
- return false;
-
- btScalar d0 = Max0 - Min1;
- btAssert(d0 >= 0.0f);
- btScalar d1 = Max1 - Min0;
- btAssert(d1 >= 0.0f);
- if (d0 < d1)
- {
- depth = d0;
- witnessPointA = witnesPtMaxA;
- witnessPointB = witnesPtMinB;
- }
- else
- {
- depth = d1;
- witnessPointA = witnesPtMinA;
- witnessPointB = witnesPtMaxB;
- }
-
- return true;
-}
-
-static int gActualSATPairTests = 0;
-
-inline bool IsAlmostZero(const btVector3& v)
-{
- if (btFabs(v.x()) > 1e-6 || btFabs(v.y()) > 1e-6 || btFabs(v.z()) > 1e-6) return false;
- return true;
-}
-
-#ifdef TEST_INTERNAL_OBJECTS
-
-inline void BoxSupport(const btScalar extents[3], const btScalar sv[3], btScalar p[3])
-{
- // This version is ~11.000 cycles (4%) faster overall in one of the tests.
- // IR(p[0]) = IR(extents[0])|(IR(sv[0])&SIGN_BITMASK);
- // IR(p[1]) = IR(extents[1])|(IR(sv[1])&SIGN_BITMASK);
- // IR(p[2]) = IR(extents[2])|(IR(sv[2])&SIGN_BITMASK);
- p[0] = sv[0] < 0.0f ? -extents[0] : extents[0];
- p[1] = sv[1] < 0.0f ? -extents[1] : extents[1];
- p[2] = sv[2] < 0.0f ? -extents[2] : extents[2];
-}
-
-void InverseTransformPoint3x3(btVector3& out, const btVector3& in, const btTransform& tr)
-{
- const btMatrix3x3& rot = tr.getBasis();
- const btVector3& r0 = rot[0];
- const btVector3& r1 = rot[1];
- const btVector3& r2 = rot[2];
-
- const btScalar x = r0.x() * in.x() + r1.x() * in.y() + r2.x() * in.z();
- const btScalar y = r0.y() * in.x() + r1.y() * in.y() + r2.y() * in.z();
- const btScalar z = r0.z() * in.x() + r1.z() * in.y() + r2.z() * in.z();
-
- out.setValue(x, y, z);
-}
-
-bool TestInternalObjects(const btTransform& trans0, const btTransform& trans1, const btVector3& delta_c, const btVector3& axis, const btConvexPolyhedron& convex0, const btConvexPolyhedron& convex1, btScalar dmin)
-{
- const btScalar dp = delta_c.dot(axis);
-
- btVector3 localAxis0;
- InverseTransformPoint3x3(localAxis0, axis, trans0);
- btVector3 localAxis1;
- InverseTransformPoint3x3(localAxis1, axis, trans1);
-
- btScalar p0[3];
- BoxSupport(convex0.m_extents, localAxis0, p0);
- btScalar p1[3];
- BoxSupport(convex1.m_extents, localAxis1, p1);
-
- const btScalar Radius0 = p0[0] * localAxis0.x() + p0[1] * localAxis0.y() + p0[2] * localAxis0.z();
- const btScalar Radius1 = p1[0] * localAxis1.x() + p1[1] * localAxis1.y() + p1[2] * localAxis1.z();
-
- const btScalar MinRadius = Radius0 > convex0.m_radius ? Radius0 : convex0.m_radius;
- const btScalar MaxRadius = Radius1 > convex1.m_radius ? Radius1 : convex1.m_radius;
-
- const btScalar MinMaxRadius = MaxRadius + MinRadius;
- const btScalar d0 = MinMaxRadius + dp;
- const btScalar d1 = MinMaxRadius - dp;
-
- const btScalar depth = d0 < d1 ? d0 : d1;
- if (depth > dmin)
- return false;
- return true;
-}
-#endif //TEST_INTERNAL_OBJECTS
-
-SIMD_FORCE_INLINE void btSegmentsClosestPoints(
- btVector3& ptsVector,
- btVector3& offsetA,
- btVector3& offsetB,
- btScalar& tA, btScalar& tB,
- const btVector3& translation,
- const btVector3& dirA, btScalar hlenA,
- const btVector3& dirB, btScalar hlenB)
-{
- // compute the parameters of the closest points on each line segment
-
- btScalar dirA_dot_dirB = btDot(dirA, dirB);
- btScalar dirA_dot_trans = btDot(dirA, translation);
- btScalar dirB_dot_trans = btDot(dirB, translation);
-
- btScalar denom = 1.0f - dirA_dot_dirB * dirA_dot_dirB;
-
- if (denom == 0.0f)
- {
- tA = 0.0f;
- }
- else
- {
- tA = (dirA_dot_trans - dirB_dot_trans * dirA_dot_dirB) / denom;
- if (tA < -hlenA)
- tA = -hlenA;
- else if (tA > hlenA)
- tA = hlenA;
- }
-
- tB = tA * dirA_dot_dirB - dirB_dot_trans;
-
- if (tB < -hlenB)
- {
- tB = -hlenB;
- tA = tB * dirA_dot_dirB + dirA_dot_trans;
-
- if (tA < -hlenA)
- tA = -hlenA;
- else if (tA > hlenA)
- tA = hlenA;
- }
- else if (tB > hlenB)
- {
- tB = hlenB;
- tA = tB * dirA_dot_dirB + dirA_dot_trans;
-
- if (tA < -hlenA)
- tA = -hlenA;
- else if (tA > hlenA)
- tA = hlenA;
- }
-
- // compute the closest points relative to segment centers.
-
- offsetA = dirA * tA;
- offsetB = dirB * tB;
-
- ptsVector = translation - offsetA + offsetB;
-}
-
-bool btPolyhedralContactClipping::findSeparatingAxis(const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, btVector3& sep, btDiscreteCollisionDetectorInterface::Result& resultOut)
-{
- gActualSATPairTests++;
-
- //#ifdef TEST_INTERNAL_OBJECTS
- const btVector3 c0 = transA * hullA.m_localCenter;
- const btVector3 c1 = transB * hullB.m_localCenter;
- const btVector3 DeltaC2 = c0 - c1;
- //#endif
-
- btScalar dmin = FLT_MAX;
- int curPlaneTests = 0;
-
- int numFacesA = hullA.m_faces.size();
- // Test normals from hullA
- for (int i = 0; i < numFacesA; i++)
- {
- const btVector3 Normal(hullA.m_faces[i].m_plane[0], hullA.m_faces[i].m_plane[1], hullA.m_faces[i].m_plane[2]);
- btVector3 faceANormalWS = transA.getBasis() * Normal;
- if (DeltaC2.dot(faceANormalWS) < 0)
- faceANormalWS *= -1.f;
-
- curPlaneTests++;
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, faceANormalWS, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- btScalar d;
- btVector3 wA, wB;
- if (!TestSepAxis(hullA, hullB, transA, transB, faceANormalWS, d, wA, wB))
- return false;
-
- if (d < dmin)
- {
- dmin = d;
- sep = faceANormalWS;
- }
- }
-
- int numFacesB = hullB.m_faces.size();
- // Test normals from hullB
- for (int i = 0; i < numFacesB; i++)
- {
- const btVector3 Normal(hullB.m_faces[i].m_plane[0], hullB.m_faces[i].m_plane[1], hullB.m_faces[i].m_plane[2]);
- btVector3 WorldNormal = transB.getBasis() * Normal;
- if (DeltaC2.dot(WorldNormal) < 0)
- WorldNormal *= -1.f;
-
- curPlaneTests++;
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, WorldNormal, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- btScalar d;
- btVector3 wA, wB;
- if (!TestSepAxis(hullA, hullB, transA, transB, WorldNormal, d, wA, wB))
- return false;
-
- if (d < dmin)
- {
- dmin = d;
- sep = WorldNormal;
- }
- }
-
- btVector3 edgeAstart, edgeAend, edgeBstart, edgeBend;
- int edgeA = -1;
- int edgeB = -1;
- btVector3 worldEdgeA;
- btVector3 worldEdgeB;
- btVector3 witnessPointA(0, 0, 0), witnessPointB(0, 0, 0);
-
- int curEdgeEdge = 0;
- // Test edges
- for (int e0 = 0; e0 < hullA.m_uniqueEdges.size(); e0++)
- {
- const btVector3 edge0 = hullA.m_uniqueEdges[e0];
- const btVector3 WorldEdge0 = transA.getBasis() * edge0;
- for (int e1 = 0; e1 < hullB.m_uniqueEdges.size(); e1++)
- {
- const btVector3 edge1 = hullB.m_uniqueEdges[e1];
- const btVector3 WorldEdge1 = transB.getBasis() * edge1;
-
- btVector3 Cross = WorldEdge0.cross(WorldEdge1);
- curEdgeEdge++;
- if (!IsAlmostZero(Cross))
- {
- Cross = Cross.normalize();
- if (DeltaC2.dot(Cross) < 0)
- Cross *= -1.f;
-
-#ifdef TEST_INTERNAL_OBJECTS
- gExpectedNbTests++;
- if (gUseInternalObject && !TestInternalObjects(transA, transB, DeltaC2, Cross, hullA, hullB, dmin))
- continue;
- gActualNbTests++;
-#endif
-
- btScalar dist;
- btVector3 wA, wB;
- if (!TestSepAxis(hullA, hullB, transA, transB, Cross, dist, wA, wB))
- return false;
-
- if (dist < dmin)
- {
- dmin = dist;
- sep = Cross;
- edgeA = e0;
- edgeB = e1;
- worldEdgeA = WorldEdge0;
- worldEdgeB = WorldEdge1;
- witnessPointA = wA;
- witnessPointB = wB;
- }
- }
- }
- }
-
- if (edgeA >= 0 && edgeB >= 0)
- {
- // printf("edge-edge\n");
- //add an edge-edge contact
-
- btVector3 ptsVector;
- btVector3 offsetA;
- btVector3 offsetB;
- btScalar tA;
- btScalar tB;
-
- btVector3 translation = witnessPointB - witnessPointA;
-
- btVector3 dirA = worldEdgeA;
- btVector3 dirB = worldEdgeB;
-
- btScalar hlenB = 1e30f;
- btScalar hlenA = 1e30f;
-
- btSegmentsClosestPoints(ptsVector, offsetA, offsetB, tA, tB,
- translation,
- dirA, hlenA,
- dirB, hlenB);
-
- btScalar nlSqrt = ptsVector.length2();
- if (nlSqrt > SIMD_EPSILON)
- {
- btScalar nl = btSqrt(nlSqrt);
- ptsVector *= 1.f / nl;
- if (ptsVector.dot(DeltaC2) < 0.f)
- {
- ptsVector *= -1.f;
- }
- btVector3 ptOnB = witnessPointB + offsetB;
- btScalar distance = nl;
- resultOut.addContactPoint(ptsVector, ptOnB, -distance);
- }
- }
-
- if ((DeltaC2.dot(sep)) < 0.0f)
- sep = -sep;
-
- return true;
-}
-
-void btPolyhedralContactClipping::clipFaceAgainstHull(const btVector3& separatingNormal, const btConvexPolyhedron& hullA, const btTransform& transA, btVertexArray& worldVertsB1, btVertexArray& worldVertsB2, const btScalar minDist, btScalar maxDist, btDiscreteCollisionDetectorInterface::Result& resultOut)
-{
- worldVertsB2.resize(0);
- btVertexArray* pVtxIn = &worldVertsB1;
- btVertexArray* pVtxOut = &worldVertsB2;
- pVtxOut->reserve(pVtxIn->size());
-
- int closestFaceA = -1;
- {
- btScalar dmin = FLT_MAX;
- for (int face = 0; face < hullA.m_faces.size(); face++)
- {
- const btVector3 Normal(hullA.m_faces[face].m_plane[0], hullA.m_faces[face].m_plane[1], hullA.m_faces[face].m_plane[2]);
- const btVector3 faceANormalWS = transA.getBasis() * Normal;
-
- btScalar d = faceANormalWS.dot(separatingNormal);
- if (d < dmin)
- {
- dmin = d;
- closestFaceA = face;
- }
- }
- }
- if (closestFaceA < 0)
- return;
-
- const btFace& polyA = hullA.m_faces[closestFaceA];
-
- // clip polygon to back of planes of all faces of hull A that are adjacent to witness face
- int numVerticesA = polyA.m_indices.size();
- for (int e0 = 0; e0 < numVerticesA; e0++)
- {
- const btVector3& a = hullA.m_vertices[polyA.m_indices[e0]];
- const btVector3& b = hullA.m_vertices[polyA.m_indices[(e0 + 1) % numVerticesA]];
- const btVector3 edge0 = a - b;
- const btVector3 WorldEdge0 = transA.getBasis() * edge0;
- btVector3 worldPlaneAnormal1 = transA.getBasis() * btVector3(polyA.m_plane[0], polyA.m_plane[1], polyA.m_plane[2]);
-
- btVector3 planeNormalWS1 = -WorldEdge0.cross(worldPlaneAnormal1); //.cross(WorldEdge0);
- btVector3 worldA1 = transA * a;
- btScalar planeEqWS1 = -worldA1.dot(planeNormalWS1);
-
-//int otherFace=0;
-#ifdef BLA1
- int otherFace = polyA.m_connectedFaces[e0];
- btVector3 localPlaneNormal(hullA.m_faces[otherFace].m_plane[0], hullA.m_faces[otherFace].m_plane[1], hullA.m_faces[otherFace].m_plane[2]);
- btScalar localPlaneEq = hullA.m_faces[otherFace].m_plane[3];
-
- btVector3 planeNormalWS = transA.getBasis() * localPlaneNormal;
- btScalar planeEqWS = localPlaneEq - planeNormalWS.dot(transA.getOrigin());
-#else
- btVector3 planeNormalWS = planeNormalWS1;
- btScalar planeEqWS = planeEqWS1;
-
-#endif
- //clip face
-
- clipFace(*pVtxIn, *pVtxOut, planeNormalWS, planeEqWS);
- btSwap(pVtxIn, pVtxOut);
- pVtxOut->resize(0);
- }
-
- //#define ONLY_REPORT_DEEPEST_POINT
-
- btVector3 point;
-
- // only keep points that are behind the witness face
- {
- btVector3 localPlaneNormal(polyA.m_plane[0], polyA.m_plane[1], polyA.m_plane[2]);
- btScalar localPlaneEq = polyA.m_plane[3];
- btVector3 planeNormalWS = transA.getBasis() * localPlaneNormal;
- btScalar planeEqWS = localPlaneEq - planeNormalWS.dot(transA.getOrigin());
- for (int i = 0; i < pVtxIn->size(); i++)
- {
- btVector3 vtx = pVtxIn->at(i);
- btScalar depth = planeNormalWS.dot(vtx) + planeEqWS;
- if (depth <= minDist)
- {
- // printf("clamped: depth=%f to minDist=%f\n",depth,minDist);
- depth = minDist;
- }
-
- if (depth <= maxDist)
- {
- btVector3 point = pVtxIn->at(i);
-#ifdef ONLY_REPORT_DEEPEST_POINT
- curMaxDist = depth;
-#else
-#if 0
- if (depth<-3)
- {
- printf("error in btPolyhedralContactClipping depth = %f\n", depth);
- printf("likely wrong separatingNormal passed in\n");
- }
-#endif
- resultOut.addContactPoint(separatingNormal, point, depth);
-#endif
- }
- }
- }
-#ifdef ONLY_REPORT_DEEPEST_POINT
- if (curMaxDist < maxDist)
- {
- resultOut.addContactPoint(separatingNormal, point, curMaxDist);
- }
-#endif //ONLY_REPORT_DEEPEST_POINT
-}
-
-void btPolyhedralContactClipping::clipHullAgainstHull(const btVector3& separatingNormal1, const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, const btScalar minDist, btScalar maxDist, btVertexArray& worldVertsB1, btVertexArray& worldVertsB2, btDiscreteCollisionDetectorInterface::Result& resultOut)
-{
- btVector3 separatingNormal = separatingNormal1.normalized();
- // const btVector3 c0 = transA * hullA.m_localCenter;
- // const btVector3 c1 = transB * hullB.m_localCenter;
- //const btVector3 DeltaC2 = c0 - c1;
-
- int closestFaceB = -1;
- btScalar dmax = -FLT_MAX;
- {
- for (int face = 0; face < hullB.m_faces.size(); face++)
- {
- const btVector3 Normal(hullB.m_faces[face].m_plane[0], hullB.m_faces[face].m_plane[1], hullB.m_faces[face].m_plane[2]);
- const btVector3 WorldNormal = transB.getBasis() * Normal;
- btScalar d = WorldNormal.dot(separatingNormal);
- if (d > dmax)
- {
- dmax = d;
- closestFaceB = face;
- }
- }
- }
- worldVertsB1.resize(0);
- {
- const btFace& polyB = hullB.m_faces[closestFaceB];
- const int numVertices = polyB.m_indices.size();
- for (int e0 = 0; e0 < numVertices; e0++)
- {
- const btVector3& b = hullB.m_vertices[polyB.m_indices[e0]];
- worldVertsB1.push_back(transB * b);
- }
- }
-
- if (closestFaceB >= 0)
- clipFaceAgainstHull(separatingNormal, hullA, transA, worldVertsB1, worldVertsB2, minDist, maxDist, resultOut);
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h
deleted file mode 100644
index 328f6424bc..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_POLYHEDRAL_CONTACT_CLIPPING_H
-#define BT_POLYHEDRAL_CONTACT_CLIPPING_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btTransform.h"
-#include "btDiscreteCollisionDetectorInterface.h"
-
-class btConvexPolyhedron;
-
-typedef btAlignedObjectArray<btVector3> btVertexArray;
-
-// Clips a face to the back of a plane
-struct btPolyhedralContactClipping
-{
- static void clipHullAgainstHull(const btVector3& separatingNormal1, const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, const btScalar minDist, btScalar maxDist, btVertexArray& worldVertsB1, btVertexArray& worldVertsB2, btDiscreteCollisionDetectorInterface::Result& resultOut);
-
- static void clipFaceAgainstHull(const btVector3& separatingNormal, const btConvexPolyhedron& hullA, const btTransform& transA, btVertexArray& worldVertsB1, btVertexArray& worldVertsB2, const btScalar minDist, btScalar maxDist, btDiscreteCollisionDetectorInterface::Result& resultOut);
-
- static bool findSeparatingAxis(const btConvexPolyhedron& hullA, const btConvexPolyhedron& hullB, const btTransform& transA, const btTransform& transB, btVector3& sep, btDiscreteCollisionDetectorInterface::Result& resultOut);
-
- ///the clipFace method is used internally
- static void clipFace(const btVertexArray& pVtxIn, btVertexArray& ppVtxOut, const btVector3& planeNormalWS, btScalar planeEqWS);
-};
-
-#endif // BT_POLYHEDRAL_CONTACT_CLIPPING_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp
deleted file mode 100644
index 3d11e5bce5..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp
+++ /dev/null
@@ -1,175 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//#include <stdio.h>
-
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.h"
-#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.h"
-#include "btRaycastCallback.h"
-
-btTriangleRaycastCallback::btTriangleRaycastCallback(const btVector3& from, const btVector3& to, unsigned int flags)
- : m_from(from),
- m_to(to),
- //@BP Mod
- m_flags(flags),
- m_hitFraction(btScalar(1.))
-{
-}
-
-void btTriangleRaycastCallback::processTriangle(btVector3* triangle, int partId, int triangleIndex)
-{
- const btVector3& vert0 = triangle[0];
- const btVector3& vert1 = triangle[1];
- const btVector3& vert2 = triangle[2];
-
- btVector3 v10;
- v10 = vert1 - vert0;
- btVector3 v20;
- v20 = vert2 - vert0;
-
- btVector3 triangleNormal;
- triangleNormal = v10.cross(v20);
-
- const btScalar dist = vert0.dot(triangleNormal);
- btScalar dist_a = triangleNormal.dot(m_from);
- dist_a -= dist;
- btScalar dist_b = triangleNormal.dot(m_to);
- dist_b -= dist;
-
- if (dist_a * dist_b >= btScalar(0.0))
- {
- return; // same sign
- }
-
- if (((m_flags & kF_FilterBackfaces) != 0) && (dist_a <= btScalar(0.0)))
- {
- // Backface, skip check
- return;
- }
-
- const btScalar proj_length = dist_a - dist_b;
- const btScalar distance = (dist_a) / (proj_length);
- // Now we have the intersection point on the plane, we'll see if it's inside the triangle
- // Add an epsilon as a tolerance for the raycast,
- // in case the ray hits exacly on the edge of the triangle.
- // It must be scaled for the triangle size.
-
- if (distance < m_hitFraction)
- {
- btScalar edge_tolerance = triangleNormal.length2();
- edge_tolerance *= btScalar(-0.0001);
- btVector3 point;
- point.setInterpolate3(m_from, m_to, distance);
- {
- btVector3 v0p;
- v0p = vert0 - point;
- btVector3 v1p;
- v1p = vert1 - point;
- btVector3 cp0;
- cp0 = v0p.cross(v1p);
-
- if ((btScalar)(cp0.dot(triangleNormal)) >= edge_tolerance)
- {
- btVector3 v2p;
- v2p = vert2 - point;
- btVector3 cp1;
- cp1 = v1p.cross(v2p);
- if ((btScalar)(cp1.dot(triangleNormal)) >= edge_tolerance)
- {
- btVector3 cp2;
- cp2 = v2p.cross(v0p);
-
- if ((btScalar)(cp2.dot(triangleNormal)) >= edge_tolerance)
- {
- //@BP Mod
- // Triangle normal isn't normalized
- triangleNormal.normalize();
-
- //@BP Mod - Allow for unflipped normal when raycasting against backfaces
- if (((m_flags & kF_KeepUnflippedNormal) == 0) && (dist_a <= btScalar(0.0)))
- {
- m_hitFraction = reportHit(-triangleNormal, distance, partId, triangleIndex);
- }
- else
- {
- m_hitFraction = reportHit(triangleNormal, distance, partId, triangleIndex);
- }
- }
- }
- }
- }
- }
-}
-
-btTriangleConvexcastCallback::btTriangleConvexcastCallback(const btConvexShape* convexShape, const btTransform& convexShapeFrom, const btTransform& convexShapeTo, const btTransform& triangleToWorld, const btScalar triangleCollisionMargin)
-{
- m_convexShape = convexShape;
- m_convexShapeFrom = convexShapeFrom;
- m_convexShapeTo = convexShapeTo;
- m_triangleToWorld = triangleToWorld;
- m_hitFraction = 1.0f;
- m_triangleCollisionMargin = triangleCollisionMargin;
- m_allowedPenetration = 0.f;
-}
-
-void btTriangleConvexcastCallback::processTriangle(btVector3* triangle, int partId, int triangleIndex)
-{
- btTriangleShape triangleShape(triangle[0], triangle[1], triangle[2]);
- triangleShape.setMargin(m_triangleCollisionMargin);
-
- btVoronoiSimplexSolver simplexSolver;
- btGjkEpaPenetrationDepthSolver gjkEpaPenetrationSolver;
-
-//#define USE_SUBSIMPLEX_CONVEX_CAST 1
-//if you reenable USE_SUBSIMPLEX_CONVEX_CAST see commented out code below
-#ifdef USE_SUBSIMPLEX_CONVEX_CAST
- btSubsimplexConvexCast convexCaster(m_convexShape, &triangleShape, &simplexSolver);
-#else
- //btGjkConvexCast convexCaster(m_convexShape,&triangleShape,&simplexSolver);
- btContinuousConvexCollision convexCaster(m_convexShape, &triangleShape, &simplexSolver, &gjkEpaPenetrationSolver);
-#endif //#USE_SUBSIMPLEX_CONVEX_CAST
-
- btConvexCast::CastResult castResult;
- castResult.m_fraction = btScalar(1.);
- castResult.m_allowedPenetration = m_allowedPenetration;
- if (convexCaster.calcTimeOfImpact(m_convexShapeFrom, m_convexShapeTo, m_triangleToWorld, m_triangleToWorld, castResult))
- {
- //add hit
- if (castResult.m_normal.length2() > btScalar(0.0001))
- {
- if (castResult.m_fraction < m_hitFraction)
- {
- /* btContinuousConvexCast's normal is already in world space */
- /*
-#ifdef USE_SUBSIMPLEX_CONVEX_CAST
- //rotate normal into worldspace
- castResult.m_normal = m_convexShapeFrom.getBasis() * castResult.m_normal;
-#endif //USE_SUBSIMPLEX_CONVEX_CAST
-*/
- castResult.m_normal.normalize();
-
- reportHit(castResult.m_normal,
- castResult.m_hitPoint,
- castResult.m_fraction,
- partId,
- triangleIndex);
- }
- }
- }
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h
deleted file mode 100644
index 2d0df718a2..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btRaycastCallback.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_RAYCAST_TRI_CALLBACK_H
-#define BT_RAYCAST_TRI_CALLBACK_H
-
-#include "BulletCollision/CollisionShapes/btTriangleCallback.h"
-#include "LinearMath/btTransform.h"
-struct btBroadphaseProxy;
-class btConvexShape;
-
-class btTriangleRaycastCallback : public btTriangleCallback
-{
-public:
- //input
- btVector3 m_from;
- btVector3 m_to;
-
- //@BP Mod - allow backface filtering and unflipped normals
- enum EFlags
- {
- kF_None = 0,
- kF_FilterBackfaces = 1 << 0,
- kF_KeepUnflippedNormal = 1 << 1, // Prevents returned face normal getting flipped when a ray hits a back-facing triangle
- ///SubSimplexConvexCastRaytest is the default, even if kF_None is set.
- kF_UseSubSimplexConvexCastRaytest = 1 << 2, // Uses an approximate but faster ray versus convex intersection algorithm
- kF_UseGjkConvexCastRaytest = 1 << 3,
- kF_DisableHeightfieldAccelerator = 1 << 4, //don't use the heightfield raycast accelerator. See https://github.com/bulletphysics/bullet3/pull/2062
- kF_Terminator = 0xFFFFFFFF
- };
- unsigned int m_flags;
-
- btScalar m_hitFraction;
-
- btTriangleRaycastCallback(const btVector3& from, const btVector3& to, unsigned int flags = 0);
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex);
-
- virtual btScalar reportHit(const btVector3& hitNormalLocal, btScalar hitFraction, int partId, int triangleIndex) = 0;
-};
-
-class btTriangleConvexcastCallback : public btTriangleCallback
-{
-public:
- const btConvexShape* m_convexShape;
- btTransform m_convexShapeFrom;
- btTransform m_convexShapeTo;
- btTransform m_triangleToWorld;
- btScalar m_hitFraction;
- btScalar m_triangleCollisionMargin;
- btScalar m_allowedPenetration;
-
- btTriangleConvexcastCallback(const btConvexShape* convexShape, const btTransform& convexShapeFrom, const btTransform& convexShapeTo, const btTransform& triangleToWorld, const btScalar triangleCollisionMargin);
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex);
-
- virtual btScalar reportHit(const btVector3& hitNormalLocal, const btVector3& hitPointLocal, btScalar hitFraction, int partId, int triangleIndex) = 0;
-};
-
-#endif //BT_RAYCAST_TRI_CALLBACK_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h
deleted file mode 100644
index ccd227109d..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMPLEX_SOLVER_INTERFACE_H
-#define BT_SIMPLEX_SOLVER_INTERFACE_H
-
-#include "LinearMath/btVector3.h"
-
-#define NO_VIRTUAL_INTERFACE 1
-#ifdef NO_VIRTUAL_INTERFACE
-#include "btVoronoiSimplexSolver.h"
-#define btSimplexSolverInterface btVoronoiSimplexSolver
-#else
-
-/// btSimplexSolverInterface can incrementally calculate distance between origin and up to 4 vertices
-/// Used by GJK or Linear Casting. Can be implemented by the Johnson-algorithm or alternative approaches based on
-/// voronoi regions or barycentric coordinates
-class btSimplexSolverInterface
-{
-public:
- virtual ~btSimplexSolverInterface(){};
-
- virtual void reset() = 0;
-
- virtual void addVertex(const btVector3& w, const btVector3& p, const btVector3& q) = 0;
-
- virtual bool closest(btVector3& v) = 0;
-
- virtual btScalar maxVertex() = 0;
-
- virtual bool fullSimplex() const = 0;
-
- virtual int getSimplex(btVector3* pBuf, btVector3* qBuf, btVector3* yBuf) const = 0;
-
- virtual bool inSimplex(const btVector3& w) = 0;
-
- virtual void backup_closest(btVector3& v) = 0;
-
- virtual bool emptySimplex() const = 0;
-
- virtual void compute_points(btVector3& p1, btVector3& p2) = 0;
-
- virtual int numVertices() const = 0;
-};
-#endif
-#endif //BT_SIMPLEX_SOLVER_INTERFACE_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp
deleted file mode 100644
index 37458339e7..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp
+++ /dev/null
@@ -1,143 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSubSimplexConvexCast.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-
-#include "BulletCollision/CollisionShapes/btMinkowskiSumShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btSimplexSolverInterface.h"
-#include "btPointCollector.h"
-#include "LinearMath/btTransformUtil.h"
-
-btSubsimplexConvexCast::btSubsimplexConvexCast(const btConvexShape* convexA, const btConvexShape* convexB, btSimplexSolverInterface* simplexSolver)
- : m_simplexSolver(simplexSolver),
- m_convexA(convexA),
- m_convexB(convexB)
-{
-}
-
-
-bool btSubsimplexConvexCast::calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result)
-{
- m_simplexSolver->reset();
-
- btVector3 linVelA, linVelB;
- linVelA = toA.getOrigin() - fromA.getOrigin();
- linVelB = toB.getOrigin() - fromB.getOrigin();
-
- btScalar lambda = btScalar(0.);
-
- btTransform interpolatedTransA = fromA;
- btTransform interpolatedTransB = fromB;
-
- ///take relative motion
- btVector3 r = (linVelA - linVelB);
- btVector3 v;
-
- btVector3 supVertexA = fromA(m_convexA->localGetSupportingVertex(-r * fromA.getBasis()));
- btVector3 supVertexB = fromB(m_convexB->localGetSupportingVertex(r * fromB.getBasis()));
- v = supVertexA - supVertexB;
- int maxIter = result.m_subSimplexCastMaxIterations;
-
- btVector3 n;
- n.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
-
- btVector3 c;
-
- btScalar dist2 = v.length2();
-
-
-
- btVector3 w, p;
- btScalar VdotR;
-
- while ((dist2 > result.m_subSimplexCastEpsilon) && maxIter--)
- {
- supVertexA = interpolatedTransA(m_convexA->localGetSupportingVertex(-v * interpolatedTransA.getBasis()));
- supVertexB = interpolatedTransB(m_convexB->localGetSupportingVertex(v * interpolatedTransB.getBasis()));
- w = supVertexA - supVertexB;
-
- btScalar VdotW = v.dot(w);
-
- if (lambda > btScalar(1.0))
- {
- return false;
- }
-
- if (VdotW > btScalar(0.))
- {
- VdotR = v.dot(r);
-
- if (VdotR >= -(SIMD_EPSILON * SIMD_EPSILON))
- return false;
- else
- {
- lambda = lambda - VdotW / VdotR;
- //interpolate to next lambda
- // x = s + lambda * r;
- interpolatedTransA.getOrigin().setInterpolate3(fromA.getOrigin(), toA.getOrigin(), lambda);
- interpolatedTransB.getOrigin().setInterpolate3(fromB.getOrigin(), toB.getOrigin(), lambda);
- //m_simplexSolver->reset();
- //check next line
- w = supVertexA - supVertexB;
-
- n = v;
- }
- }
- ///Just like regular GJK only add the vertex if it isn't already (close) to current vertex, it would lead to divisions by zero and NaN etc.
- if (!m_simplexSolver->inSimplex(w))
- m_simplexSolver->addVertex(w, supVertexA, supVertexB);
-
- if (m_simplexSolver->closest(v))
- {
- dist2 = v.length2();
-
- //todo: check this normal for validity
- //n=v;
- //printf("V=%f , %f, %f\n",v[0],v[1],v[2]);
- //printf("DIST2=%f\n",dist2);
- //printf("numverts = %i\n",m_simplexSolver->numVertices());
- }
- else
- {
- dist2 = btScalar(0.);
- }
- }
-
- //int numiter = MAX_ITERATIONS - maxIter;
- // printf("number of iterations: %d", numiter);
-
- //don't report a time of impact when moving 'away' from the hitnormal
-
- result.m_fraction = lambda;
- if (n.length2() >= (SIMD_EPSILON * SIMD_EPSILON))
- result.m_normal = n.normalized();
- else
- result.m_normal = btVector3(btScalar(0.0), btScalar(0.0), btScalar(0.0));
-
- //don't report time of impact for motion away from the contact normal (or causes minor penetration)
- if (result.m_normal.dot(r) >= -result.m_allowedPenetration)
- return false;
-
- btVector3 hitA, hitB;
- m_simplexSolver->compute_points(hitA, hitB);
- result.m_hitPoint = hitB;
- return true;
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h
deleted file mode 100644
index 0638a30eb1..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SUBSIMPLEX_CONVEX_CAST_H
-#define BT_SUBSIMPLEX_CONVEX_CAST_H
-
-#include "btConvexCast.h"
-#include "btSimplexSolverInterface.h"
-class btConvexShape;
-
-/// btSubsimplexConvexCast implements Gino van den Bergens' paper
-///"Ray Casting against bteral Convex Objects with Application to Continuous Collision Detection"
-/// GJK based Ray Cast, optimized version
-/// Objects should not start in overlap, otherwise results are not defined.
-class btSubsimplexConvexCast : public btConvexCast
-{
- btSimplexSolverInterface* m_simplexSolver;
- const btConvexShape* m_convexA;
- const btConvexShape* m_convexB;
-
-public:
- btSubsimplexConvexCast(const btConvexShape* shapeA, const btConvexShape* shapeB, btSimplexSolverInterface* simplexSolver);
-
- //virtual ~btSubsimplexConvexCast();
- ///SimsimplexConvexCast calculateTimeOfImpact calculates the time of impact+normal for the linear cast (sweep) between two moving objects.
- ///Precondition is that objects should not penetration/overlap at the start from the interval. Overlap can be tested using btGjkPairDetector.
- virtual bool calcTimeOfImpact(
- const btTransform& fromA,
- const btTransform& toA,
- const btTransform& fromB,
- const btTransform& toB,
- CastResult& result);
-};
-
-#endif //BT_SUBSIMPLEX_CONVEX_CAST_H
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp
deleted file mode 100644
index 8fda94d2ad..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp
+++ /dev/null
@@ -1,577 +0,0 @@
-
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
- Elsevier CDROM license agreements grants nonexclusive license to use the software
- for any purpose, commercial or non-commercial as long as the following credit is included
- identifying the original source of the software:
-
- Parts of the source are "from the book Real-Time Collision Detection by
- Christer Ericson, published by Morgan Kaufmann Publishers,
- (c) 2005 Elsevier Inc."
-
-*/
-
-#include "btVoronoiSimplexSolver.h"
-
-#define VERTA 0
-#define VERTB 1
-#define VERTC 2
-#define VERTD 3
-
-#define CATCH_DEGENERATE_TETRAHEDRON 1
-void btVoronoiSimplexSolver::removeVertex(int index)
-{
- btAssert(m_numVertices > 0);
- m_numVertices--;
- m_simplexVectorW[index] = m_simplexVectorW[m_numVertices];
- m_simplexPointsP[index] = m_simplexPointsP[m_numVertices];
- m_simplexPointsQ[index] = m_simplexPointsQ[m_numVertices];
-}
-
-void btVoronoiSimplexSolver::reduceVertices(const btUsageBitfield& usedVerts)
-{
- if ((numVertices() >= 4) && (!usedVerts.usedVertexD))
- removeVertex(3);
-
- if ((numVertices() >= 3) && (!usedVerts.usedVertexC))
- removeVertex(2);
-
- if ((numVertices() >= 2) && (!usedVerts.usedVertexB))
- removeVertex(1);
-
- if ((numVertices() >= 1) && (!usedVerts.usedVertexA))
- removeVertex(0);
-}
-
-//clear the simplex, remove all the vertices
-void btVoronoiSimplexSolver::reset()
-{
- m_cachedValidClosest = false;
- m_numVertices = 0;
- m_needsUpdate = true;
- m_lastW = btVector3(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_cachedBC.reset();
-}
-
-//add a vertex
-void btVoronoiSimplexSolver::addVertex(const btVector3& w, const btVector3& p, const btVector3& q)
-{
- m_lastW = w;
- m_needsUpdate = true;
-
- m_simplexVectorW[m_numVertices] = w;
- m_simplexPointsP[m_numVertices] = p;
- m_simplexPointsQ[m_numVertices] = q;
-
- m_numVertices++;
-}
-
-bool btVoronoiSimplexSolver::updateClosestVectorAndPoints()
-{
- if (m_needsUpdate)
- {
- m_cachedBC.reset();
-
- m_needsUpdate = false;
-
- switch (numVertices())
- {
- case 0:
- m_cachedValidClosest = false;
- break;
- case 1:
- {
- m_cachedP1 = m_simplexPointsP[0];
- m_cachedP2 = m_simplexPointsQ[0];
- m_cachedV = m_cachedP1 - m_cachedP2; //== m_simplexVectorW[0]
- m_cachedBC.reset();
- m_cachedBC.setBarycentricCoordinates(btScalar(1.), btScalar(0.), btScalar(0.), btScalar(0.));
- m_cachedValidClosest = m_cachedBC.isValid();
- break;
- };
- case 2:
- {
- //closest point origin from line segment
- const btVector3& from = m_simplexVectorW[0];
- const btVector3& to = m_simplexVectorW[1];
- btVector3 nearest;
-
- btVector3 p(btScalar(0.), btScalar(0.), btScalar(0.));
- btVector3 diff = p - from;
- btVector3 v = to - from;
- btScalar t = v.dot(diff);
-
- if (t > 0)
- {
- btScalar dotVV = v.dot(v);
- if (t < dotVV)
- {
- t /= dotVV;
- diff -= t * v;
- m_cachedBC.m_usedVertices.usedVertexA = true;
- m_cachedBC.m_usedVertices.usedVertexB = true;
- }
- else
- {
- t = 1;
- diff -= v;
- //reduce to 1 point
- m_cachedBC.m_usedVertices.usedVertexB = true;
- }
- }
- else
- {
- t = 0;
- //reduce to 1 point
- m_cachedBC.m_usedVertices.usedVertexA = true;
- }
- m_cachedBC.setBarycentricCoordinates(1 - t, t);
- nearest = from + t * v;
-
- m_cachedP1 = m_simplexPointsP[0] + t * (m_simplexPointsP[1] - m_simplexPointsP[0]);
- m_cachedP2 = m_simplexPointsQ[0] + t * (m_simplexPointsQ[1] - m_simplexPointsQ[0]);
- m_cachedV = m_cachedP1 - m_cachedP2;
-
- reduceVertices(m_cachedBC.m_usedVertices);
-
- m_cachedValidClosest = m_cachedBC.isValid();
- break;
- }
- case 3:
- {
- //closest point origin from triangle
- btVector3 p(btScalar(0.), btScalar(0.), btScalar(0.));
-
- const btVector3& a = m_simplexVectorW[0];
- const btVector3& b = m_simplexVectorW[1];
- const btVector3& c = m_simplexVectorW[2];
-
- closestPtPointTriangle(p, a, b, c, m_cachedBC);
- m_cachedP1 = m_simplexPointsP[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsP[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsP[2] * m_cachedBC.m_barycentricCoords[2];
-
- m_cachedP2 = m_simplexPointsQ[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsQ[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsQ[2] * m_cachedBC.m_barycentricCoords[2];
-
- m_cachedV = m_cachedP1 - m_cachedP2;
-
- reduceVertices(m_cachedBC.m_usedVertices);
- m_cachedValidClosest = m_cachedBC.isValid();
-
- break;
- }
- case 4:
- {
- btVector3 p(btScalar(0.), btScalar(0.), btScalar(0.));
-
- const btVector3& a = m_simplexVectorW[0];
- const btVector3& b = m_simplexVectorW[1];
- const btVector3& c = m_simplexVectorW[2];
- const btVector3& d = m_simplexVectorW[3];
-
- bool hasSeparation = closestPtPointTetrahedron(p, a, b, c, d, m_cachedBC);
-
- if (hasSeparation)
- {
- m_cachedP1 = m_simplexPointsP[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsP[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsP[2] * m_cachedBC.m_barycentricCoords[2] +
- m_simplexPointsP[3] * m_cachedBC.m_barycentricCoords[3];
-
- m_cachedP2 = m_simplexPointsQ[0] * m_cachedBC.m_barycentricCoords[0] +
- m_simplexPointsQ[1] * m_cachedBC.m_barycentricCoords[1] +
- m_simplexPointsQ[2] * m_cachedBC.m_barycentricCoords[2] +
- m_simplexPointsQ[3] * m_cachedBC.m_barycentricCoords[3];
-
- m_cachedV = m_cachedP1 - m_cachedP2;
- reduceVertices(m_cachedBC.m_usedVertices);
- }
- else
- {
- // printf("sub distance got penetration\n");
-
- if (m_cachedBC.m_degenerate)
- {
- m_cachedValidClosest = false;
- }
- else
- {
- m_cachedValidClosest = true;
- //degenerate case == false, penetration = true + zero
- m_cachedV.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- }
- break;
- }
-
- m_cachedValidClosest = m_cachedBC.isValid();
-
- //closest point origin from tetrahedron
- break;
- }
- default:
- {
- m_cachedValidClosest = false;
- }
- };
- }
-
- return m_cachedValidClosest;
-}
-
-//return/calculate the closest vertex
-bool btVoronoiSimplexSolver::closest(btVector3& v)
-{
- bool succes = updateClosestVectorAndPoints();
- v = m_cachedV;
- return succes;
-}
-
-btScalar btVoronoiSimplexSolver::maxVertex()
-{
- int i, numverts = numVertices();
- btScalar maxV = btScalar(0.);
- for (i = 0; i < numverts; i++)
- {
- btScalar curLen2 = m_simplexVectorW[i].length2();
- if (maxV < curLen2)
- maxV = curLen2;
- }
- return maxV;
-}
-
-//return the current simplex
-int btVoronoiSimplexSolver::getSimplex(btVector3* pBuf, btVector3* qBuf, btVector3* yBuf) const
-{
- int i;
- for (i = 0; i < numVertices(); i++)
- {
- yBuf[i] = m_simplexVectorW[i];
- pBuf[i] = m_simplexPointsP[i];
- qBuf[i] = m_simplexPointsQ[i];
- }
- return numVertices();
-}
-
-bool btVoronoiSimplexSolver::inSimplex(const btVector3& w)
-{
- bool found = false;
- int i, numverts = numVertices();
- //btScalar maxV = btScalar(0.);
-
- //w is in the current (reduced) simplex
- for (i = 0; i < numverts; i++)
- {
-#ifdef BT_USE_EQUAL_VERTEX_THRESHOLD
- if (m_simplexVectorW[i].distance2(w) <= m_equalVertexThreshold)
-#else
- if (m_simplexVectorW[i] == w)
-#endif
- {
- found = true;
- break;
- }
- }
-
- //check in case lastW is already removed
- if (w == m_lastW)
- return true;
-
- return found;
-}
-
-void btVoronoiSimplexSolver::backup_closest(btVector3& v)
-{
- v = m_cachedV;
-}
-
-bool btVoronoiSimplexSolver::emptySimplex() const
-{
- return (numVertices() == 0);
-}
-
-void btVoronoiSimplexSolver::compute_points(btVector3& p1, btVector3& p2)
-{
- updateClosestVectorAndPoints();
- p1 = m_cachedP1;
- p2 = m_cachedP2;
-}
-
-bool btVoronoiSimplexSolver::closestPtPointTriangle(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, btSubSimplexClosestResult& result)
-{
- result.m_usedVertices.reset();
-
- // Check if P in vertex region outside A
- btVector3 ab = b - a;
- btVector3 ac = c - a;
- btVector3 ap = p - a;
- btScalar d1 = ab.dot(ap);
- btScalar d2 = ac.dot(ap);
- if (d1 <= btScalar(0.0) && d2 <= btScalar(0.0))
- {
- result.m_closestPointOnSimplex = a;
- result.m_usedVertices.usedVertexA = true;
- result.setBarycentricCoordinates(1, 0, 0);
- return true; // a; // barycentric coordinates (1,0,0)
- }
-
- // Check if P in vertex region outside B
- btVector3 bp = p - b;
- btScalar d3 = ab.dot(bp);
- btScalar d4 = ac.dot(bp);
- if (d3 >= btScalar(0.0) && d4 <= d3)
- {
- result.m_closestPointOnSimplex = b;
- result.m_usedVertices.usedVertexB = true;
- result.setBarycentricCoordinates(0, 1, 0);
-
- return true; // b; // barycentric coordinates (0,1,0)
- }
- // Check if P in edge region of AB, if so return projection of P onto AB
- btScalar vc = d1 * d4 - d3 * d2;
- if (vc <= btScalar(0.0) && d1 >= btScalar(0.0) && d3 <= btScalar(0.0))
- {
- btScalar v = d1 / (d1 - d3);
- result.m_closestPointOnSimplex = a + v * ab;
- result.m_usedVertices.usedVertexA = true;
- result.m_usedVertices.usedVertexB = true;
- result.setBarycentricCoordinates(1 - v, v, 0);
- return true;
- //return a + v * ab; // barycentric coordinates (1-v,v,0)
- }
-
- // Check if P in vertex region outside C
- btVector3 cp = p - c;
- btScalar d5 = ab.dot(cp);
- btScalar d6 = ac.dot(cp);
- if (d6 >= btScalar(0.0) && d5 <= d6)
- {
- result.m_closestPointOnSimplex = c;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(0, 0, 1);
- return true; //c; // barycentric coordinates (0,0,1)
- }
-
- // Check if P in edge region of AC, if so return projection of P onto AC
- btScalar vb = d5 * d2 - d1 * d6;
- if (vb <= btScalar(0.0) && d2 >= btScalar(0.0) && d6 <= btScalar(0.0))
- {
- btScalar w = d2 / (d2 - d6);
- result.m_closestPointOnSimplex = a + w * ac;
- result.m_usedVertices.usedVertexA = true;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(1 - w, 0, w);
- return true;
- //return a + w * ac; // barycentric coordinates (1-w,0,w)
- }
-
- // Check if P in edge region of BC, if so return projection of P onto BC
- btScalar va = d3 * d6 - d5 * d4;
- if (va <= btScalar(0.0) && (d4 - d3) >= btScalar(0.0) && (d5 - d6) >= btScalar(0.0))
- {
- btScalar w = (d4 - d3) / ((d4 - d3) + (d5 - d6));
-
- result.m_closestPointOnSimplex = b + w * (c - b);
- result.m_usedVertices.usedVertexB = true;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(0, 1 - w, w);
- return true;
- // return b + w * (c - b); // barycentric coordinates (0,1-w,w)
- }
-
- // P inside face region. Compute Q through its barycentric coordinates (u,v,w)
- btScalar denom = btScalar(1.0) / (va + vb + vc);
- btScalar v = vb * denom;
- btScalar w = vc * denom;
-
- result.m_closestPointOnSimplex = a + ab * v + ac * w;
- result.m_usedVertices.usedVertexA = true;
- result.m_usedVertices.usedVertexB = true;
- result.m_usedVertices.usedVertexC = true;
- result.setBarycentricCoordinates(1 - v - w, v, w);
-
- return true;
- // return a + ab * v + ac * w; // = u*a + v*b + w*c, u = va * denom = btScalar(1.0) - v - w
-}
-
-/// Test if point p and d lie on opposite sides of plane through abc
-int btVoronoiSimplexSolver::pointOutsideOfPlane(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d)
-{
- btVector3 normal = (b - a).cross(c - a);
-
- btScalar signp = (p - a).dot(normal); // [AP AB AC]
- btScalar signd = (d - a).dot(normal); // [AD AB AC]
-
-#ifdef CATCH_DEGENERATE_TETRAHEDRON
-#ifdef BT_USE_DOUBLE_PRECISION
- if (signd * signd < (btScalar(1e-8) * btScalar(1e-8)))
- {
- return -1;
- }
-#else
- if (signd * signd < (btScalar(1e-4) * btScalar(1e-4)))
- {
- // printf("affine dependent/degenerate\n");//
- return -1;
- }
-#endif
-
-#endif
- // Points on opposite sides if expression signs are opposite
- return signp * signd < btScalar(0.);
-}
-
-bool btVoronoiSimplexSolver::closestPtPointTetrahedron(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d, btSubSimplexClosestResult& finalResult)
-{
- btSubSimplexClosestResult tempResult;
-
- // Start out assuming point inside all halfspaces, so closest to itself
- finalResult.m_closestPointOnSimplex = p;
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = true;
- finalResult.m_usedVertices.usedVertexB = true;
- finalResult.m_usedVertices.usedVertexC = true;
- finalResult.m_usedVertices.usedVertexD = true;
-
- int pointOutsideABC = pointOutsideOfPlane(p, a, b, c, d);
- int pointOutsideACD = pointOutsideOfPlane(p, a, c, d, b);
- int pointOutsideADB = pointOutsideOfPlane(p, a, d, b, c);
- int pointOutsideBDC = pointOutsideOfPlane(p, b, d, c, a);
-
- if (pointOutsideABC < 0 || pointOutsideACD < 0 || pointOutsideADB < 0 || pointOutsideBDC < 0)
- {
- finalResult.m_degenerate = true;
- return false;
- }
-
- if (!pointOutsideABC && !pointOutsideACD && !pointOutsideADB && !pointOutsideBDC)
- {
- return false;
- }
-
- btScalar bestSqDist = FLT_MAX;
- // If point outside face abc then compute closest point on abc
- if (pointOutsideABC)
- {
- closestPtPointTriangle(p, a, b, c, tempResult);
- btVector3 q = tempResult.m_closestPointOnSimplex;
-
- btScalar sqDist = (q - p).dot(q - p);
- // Update best closest point if (squared) distance is less than current best
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- //convert result bitmask!
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
- finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexB;
- finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexC;
- finalResult.setBarycentricCoordinates(
- tempResult.m_barycentricCoords[VERTA],
- tempResult.m_barycentricCoords[VERTB],
- tempResult.m_barycentricCoords[VERTC],
- 0);
- }
- }
-
- // Repeat test for face acd
- if (pointOutsideACD)
- {
- closestPtPointTriangle(p, a, c, d, tempResult);
- btVector3 q = tempResult.m_closestPointOnSimplex;
- //convert result bitmask!
-
- btScalar sqDist = (q - p).dot(q - p);
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
-
- finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexB;
- finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexC;
- finalResult.setBarycentricCoordinates(
- tempResult.m_barycentricCoords[VERTA],
- 0,
- tempResult.m_barycentricCoords[VERTB],
- tempResult.m_barycentricCoords[VERTC]);
- }
- }
- // Repeat test for face adb
-
- if (pointOutsideADB)
- {
- closestPtPointTriangle(p, a, d, b, tempResult);
- btVector3 q = tempResult.m_closestPointOnSimplex;
- //convert result bitmask!
-
- btScalar sqDist = (q - p).dot(q - p);
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- finalResult.m_usedVertices.reset();
- finalResult.m_usedVertices.usedVertexA = tempResult.m_usedVertices.usedVertexA;
- finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexC;
-
- finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
- finalResult.setBarycentricCoordinates(
- tempResult.m_barycentricCoords[VERTA],
- tempResult.m_barycentricCoords[VERTC],
- 0,
- tempResult.m_barycentricCoords[VERTB]);
- }
- }
- // Repeat test for face bdc
-
- if (pointOutsideBDC)
- {
- closestPtPointTriangle(p, b, d, c, tempResult);
- btVector3 q = tempResult.m_closestPointOnSimplex;
- //convert result bitmask!
- btScalar sqDist = (q - p).dot(q - p);
- if (sqDist < bestSqDist)
- {
- bestSqDist = sqDist;
- finalResult.m_closestPointOnSimplex = q;
- finalResult.m_usedVertices.reset();
- //
- finalResult.m_usedVertices.usedVertexB = tempResult.m_usedVertices.usedVertexA;
- finalResult.m_usedVertices.usedVertexC = tempResult.m_usedVertices.usedVertexC;
- finalResult.m_usedVertices.usedVertexD = tempResult.m_usedVertices.usedVertexB;
-
- finalResult.setBarycentricCoordinates(
- 0,
- tempResult.m_barycentricCoords[VERTA],
- tempResult.m_barycentricCoords[VERTC],
- tempResult.m_barycentricCoords[VERTB]);
- }
- }
-
- //help! we ended up full !
-
- if (finalResult.m_usedVertices.usedVertexA &&
- finalResult.m_usedVertices.usedVertexB &&
- finalResult.m_usedVertices.usedVertexC &&
- finalResult.m_usedVertices.usedVertexD)
- {
- return true;
- }
-
- return true;
-}
diff --git a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h b/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h
deleted file mode 100644
index 24a0a8f2df..0000000000
--- a/thirdparty/bullet/BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_VORONOI_SIMPLEX_SOLVER_H
-#define BT_VORONOI_SIMPLEX_SOLVER_H
-
-#include "btSimplexSolverInterface.h"
-
-#define VORONOI_SIMPLEX_MAX_VERTS 5
-
-///disable next define, or use defaultCollisionConfiguration->getSimplexSolver()->setEqualVertexThreshold(0.f) to disable/configure
-#define BT_USE_EQUAL_VERTEX_THRESHOLD
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD 1e-12f
-#else
-#define VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD 0.0001f
-#endif //BT_USE_DOUBLE_PRECISION
-
-struct btUsageBitfield
-{
- btUsageBitfield()
- {
- reset();
- }
-
- void reset()
- {
- usedVertexA = false;
- usedVertexB = false;
- usedVertexC = false;
- usedVertexD = false;
- }
- unsigned short usedVertexA : 1;
- unsigned short usedVertexB : 1;
- unsigned short usedVertexC : 1;
- unsigned short usedVertexD : 1;
- unsigned short unused1 : 1;
- unsigned short unused2 : 1;
- unsigned short unused3 : 1;
- unsigned short unused4 : 1;
-};
-
-struct btSubSimplexClosestResult
-{
- btVector3 m_closestPointOnSimplex;
- //MASK for m_usedVertices
- //stores the simplex vertex-usage, using the MASK,
- // if m_usedVertices & MASK then the related vertex is used
- btUsageBitfield m_usedVertices;
- btScalar m_barycentricCoords[4];
- bool m_degenerate;
-
- void reset()
- {
- m_degenerate = false;
- setBarycentricCoordinates();
- m_usedVertices.reset();
- }
- bool isValid()
- {
- bool valid = (m_barycentricCoords[0] >= btScalar(0.)) &&
- (m_barycentricCoords[1] >= btScalar(0.)) &&
- (m_barycentricCoords[2] >= btScalar(0.)) &&
- (m_barycentricCoords[3] >= btScalar(0.));
-
- return valid;
- }
- void setBarycentricCoordinates(btScalar a = btScalar(0.), btScalar b = btScalar(0.), btScalar c = btScalar(0.), btScalar d = btScalar(0.))
- {
- m_barycentricCoords[0] = a;
- m_barycentricCoords[1] = b;
- m_barycentricCoords[2] = c;
- m_barycentricCoords[3] = d;
- }
-};
-
-/// btVoronoiSimplexSolver is an implementation of the closest point distance algorithm from a 1-4 points simplex to the origin.
-/// Can be used with GJK, as an alternative to Johnson distance algorithm.
-#ifdef NO_VIRTUAL_INTERFACE
-ATTRIBUTE_ALIGNED16(class)
-btVoronoiSimplexSolver
-#else
-ATTRIBUTE_ALIGNED16(class)
-btVoronoiSimplexSolver : public btSimplexSolverInterface
-#endif
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- int m_numVertices;
-
- btVector3 m_simplexVectorW[VORONOI_SIMPLEX_MAX_VERTS];
- btVector3 m_simplexPointsP[VORONOI_SIMPLEX_MAX_VERTS];
- btVector3 m_simplexPointsQ[VORONOI_SIMPLEX_MAX_VERTS];
-
- btVector3 m_cachedP1;
- btVector3 m_cachedP2;
- btVector3 m_cachedV;
- btVector3 m_lastW;
-
- btScalar m_equalVertexThreshold;
- bool m_cachedValidClosest;
-
- btSubSimplexClosestResult m_cachedBC;
-
- bool m_needsUpdate;
-
- void removeVertex(int index);
- void reduceVertices(const btUsageBitfield& usedVerts);
- bool updateClosestVectorAndPoints();
-
- bool closestPtPointTetrahedron(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d, btSubSimplexClosestResult& finalResult);
- int pointOutsideOfPlane(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d);
- bool closestPtPointTriangle(const btVector3& p, const btVector3& a, const btVector3& b, const btVector3& c, btSubSimplexClosestResult& result);
-
-public:
- btVoronoiSimplexSolver()
- : m_equalVertexThreshold(VORONOI_DEFAULT_EQUAL_VERTEX_THRESHOLD)
- {
- }
- void reset();
-
- void addVertex(const btVector3& w, const btVector3& p, const btVector3& q);
-
- void setEqualVertexThreshold(btScalar threshold)
- {
- m_equalVertexThreshold = threshold;
- }
-
- btScalar getEqualVertexThreshold() const
- {
- return m_equalVertexThreshold;
- }
-
- bool closest(btVector3 & v);
-
- btScalar maxVertex();
-
- bool fullSimplex() const
- {
- return (m_numVertices == 4);
- }
-
- int getSimplex(btVector3 * pBuf, btVector3 * qBuf, btVector3 * yBuf) const;
-
- bool inSimplex(const btVector3& w);
-
- void backup_closest(btVector3 & v);
-
- bool emptySimplex() const;
-
- void compute_points(btVector3 & p1, btVector3 & p2);
-
- int numVertices() const
- {
- return m_numVertices;
- }
-};
-
-#endif //BT_VORONOI_SIMPLEX_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/Character/btCharacterControllerInterface.h b/thirdparty/bullet/BulletDynamics/Character/btCharacterControllerInterface.h
deleted file mode 100644
index 2ccf317b92..0000000000
--- a/thirdparty/bullet/BulletDynamics/Character/btCharacterControllerInterface.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CHARACTER_CONTROLLER_INTERFACE_H
-#define BT_CHARACTER_CONTROLLER_INTERFACE_H
-
-#include "LinearMath/btVector3.h"
-#include "BulletDynamics/Dynamics/btActionInterface.h"
-
-class btCollisionShape;
-class btRigidBody;
-class btCollisionWorld;
-
-class btCharacterControllerInterface : public btActionInterface
-{
-public:
- btCharacterControllerInterface(){};
- virtual ~btCharacterControllerInterface(){};
-
- virtual void setWalkDirection(const btVector3& walkDirection) = 0;
- virtual void setVelocityForTimeInterval(const btVector3& velocity, btScalar timeInterval) = 0;
- virtual void reset(btCollisionWorld* collisionWorld) = 0;
- virtual void warp(const btVector3& origin) = 0;
-
- virtual void preStep(btCollisionWorld* collisionWorld) = 0;
- virtual void playerStep(btCollisionWorld* collisionWorld, btScalar dt) = 0;
- virtual bool canJump() const = 0;
- virtual void jump(const btVector3& dir = btVector3(0, 0, 0)) = 0;
-
- virtual bool onGround() const = 0;
- virtual void setUpInterpolate(bool value) = 0;
-};
-
-#endif //BT_CHARACTER_CONTROLLER_INTERFACE_H
diff --git a/thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.cpp b/thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.cpp
deleted file mode 100644
index 2bbccb291c..0000000000
--- a/thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.cpp
+++ /dev/null
@@ -1,996 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include <stdio.h>
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/CollisionDispatch/btGhostObject.h"
-#include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.h"
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
-#include "LinearMath/btDefaultMotionState.h"
-#include "btKinematicCharacterController.h"
-
-// static helper method
-static btVector3
-getNormalizedVector(const btVector3& v)
-{
- btVector3 n(0, 0, 0);
-
- if (v.length() > SIMD_EPSILON)
- {
- n = v.normalized();
- }
- return n;
-}
-
-///@todo Interact with dynamic objects,
-///Ride kinematicly animated platforms properly
-///More realistic (or maybe just a config option) falling
-/// -> Should integrate falling velocity manually and use that in stepDown()
-///Support jumping
-///Support ducking
-class btKinematicClosestNotMeRayResultCallback : public btCollisionWorld::ClosestRayResultCallback
-{
-public:
- btKinematicClosestNotMeRayResultCallback(btCollisionObject* me) : btCollisionWorld::ClosestRayResultCallback(btVector3(0.0, 0.0, 0.0), btVector3(0.0, 0.0, 0.0))
- {
- m_me = me;
- }
-
- virtual btScalar addSingleResult(btCollisionWorld::LocalRayResult& rayResult, bool normalInWorldSpace)
- {
- if (rayResult.m_collisionObject == m_me)
- return 1.0;
-
- return ClosestRayResultCallback::addSingleResult(rayResult, normalInWorldSpace);
- }
-
-protected:
- btCollisionObject* m_me;
-};
-
-class btKinematicClosestNotMeConvexResultCallback : public btCollisionWorld::ClosestConvexResultCallback
-{
-public:
- btKinematicClosestNotMeConvexResultCallback(btCollisionObject* me, const btVector3& up, btScalar minSlopeDot)
- : btCollisionWorld::ClosestConvexResultCallback(btVector3(0.0, 0.0, 0.0), btVector3(0.0, 0.0, 0.0)), m_me(me), m_up(up), m_minSlopeDot(minSlopeDot)
- {
- }
-
- virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace)
- {
- if (convexResult.m_hitCollisionObject == m_me)
- return btScalar(1.0);
-
- if (!convexResult.m_hitCollisionObject->hasContactResponse())
- return btScalar(1.0);
-
- btVector3 hitNormalWorld;
- if (normalInWorldSpace)
- {
- hitNormalWorld = convexResult.m_hitNormalLocal;
- }
- else
- {
- ///need to transform normal into worldspace
- hitNormalWorld = convexResult.m_hitCollisionObject->getWorldTransform().getBasis() * convexResult.m_hitNormalLocal;
- }
-
- btScalar dotUp = m_up.dot(hitNormalWorld);
- if (dotUp < m_minSlopeDot)
- {
- return btScalar(1.0);
- }
-
- return ClosestConvexResultCallback::addSingleResult(convexResult, normalInWorldSpace);
- }
-
-protected:
- btCollisionObject* m_me;
- const btVector3 m_up;
- btScalar m_minSlopeDot;
-};
-
-/*
- * Returns the reflection direction of a ray going 'direction' hitting a surface with normal 'normal'
- *
- * from: http://www-cs-students.stanford.edu/~adityagp/final/node3.html
- */
-btVector3 btKinematicCharacterController::computeReflectionDirection(const btVector3& direction, const btVector3& normal)
-{
- return direction - (btScalar(2.0) * direction.dot(normal)) * normal;
-}
-
-/*
- * Returns the portion of 'direction' that is parallel to 'normal'
- */
-btVector3 btKinematicCharacterController::parallelComponent(const btVector3& direction, const btVector3& normal)
-{
- btScalar magnitude = direction.dot(normal);
- return normal * magnitude;
-}
-
-/*
- * Returns the portion of 'direction' that is perpindicular to 'normal'
- */
-btVector3 btKinematicCharacterController::perpindicularComponent(const btVector3& direction, const btVector3& normal)
-{
- return direction - parallelComponent(direction, normal);
-}
-
-btKinematicCharacterController::btKinematicCharacterController(btPairCachingGhostObject* ghostObject, btConvexShape* convexShape, btScalar stepHeight, const btVector3& up)
-{
- m_ghostObject = ghostObject;
- m_up.setValue(0.0f, 0.0f, 1.0f);
- m_jumpAxis.setValue(0.0f, 0.0f, 1.0f);
- m_addedMargin = 0.02;
- m_walkDirection.setValue(0.0, 0.0, 0.0);
- m_AngVel.setValue(0.0, 0.0, 0.0);
- m_useGhostObjectSweepTest = true;
- m_turnAngle = btScalar(0.0);
- m_convexShape = convexShape;
- m_useWalkDirection = true; // use walk direction by default, legacy behavior
- m_velocityTimeInterval = 0.0;
- m_verticalVelocity = 0.0;
- m_verticalOffset = 0.0;
- m_gravity = 9.8 * 3.0; // 3G acceleration.
- m_fallSpeed = 55.0; // Terminal velocity of a sky diver in m/s.
- m_jumpSpeed = 10.0; // ?
- m_SetjumpSpeed = m_jumpSpeed;
- m_wasOnGround = false;
- m_wasJumping = false;
- m_interpolateUp = true;
- m_currentStepOffset = 0.0;
- m_maxPenetrationDepth = 0.2;
- full_drop = false;
- bounce_fix = false;
- m_linearDamping = btScalar(0.0);
- m_angularDamping = btScalar(0.0);
-
- setUp(up);
- setStepHeight(stepHeight);
- setMaxSlope(btRadians(45.0));
-}
-
-btKinematicCharacterController::~btKinematicCharacterController()
-{
-}
-
-btPairCachingGhostObject* btKinematicCharacterController::getGhostObject()
-{
- return m_ghostObject;
-}
-
-bool btKinematicCharacterController::recoverFromPenetration(btCollisionWorld* collisionWorld)
-{
- // Here we must refresh the overlapping paircache as the penetrating movement itself or the
- // previous recovery iteration might have used setWorldTransform and pushed us into an object
- // that is not in the previous cache contents from the last timestep, as will happen if we
- // are pushed into a new AABB overlap. Unhandled this means the next convex sweep gets stuck.
- //
- // Do this by calling the broadphase's setAabb with the moved AABB, this will update the broadphase
- // paircache and the ghostobject's internal paircache at the same time. /BW
-
- btVector3 minAabb, maxAabb;
- m_convexShape->getAabb(m_ghostObject->getWorldTransform(), minAabb, maxAabb);
- collisionWorld->getBroadphase()->setAabb(m_ghostObject->getBroadphaseHandle(),
- minAabb,
- maxAabb,
- collisionWorld->getDispatcher());
-
- bool penetration = false;
-
- collisionWorld->getDispatcher()->dispatchAllCollisionPairs(m_ghostObject->getOverlappingPairCache(), collisionWorld->getDispatchInfo(), collisionWorld->getDispatcher());
-
- m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
-
- // btScalar maxPen = btScalar(0.0);
- for (int i = 0; i < m_ghostObject->getOverlappingPairCache()->getNumOverlappingPairs(); i++)
- {
- m_manifoldArray.resize(0);
-
- btBroadphasePair* collisionPair = &m_ghostObject->getOverlappingPairCache()->getOverlappingPairArray()[i];
-
- btCollisionObject* obj0 = static_cast<btCollisionObject*>(collisionPair->m_pProxy0->m_clientObject);
- btCollisionObject* obj1 = static_cast<btCollisionObject*>(collisionPair->m_pProxy1->m_clientObject);
-
- if ((obj0 && !obj0->hasContactResponse()) || (obj1 && !obj1->hasContactResponse()))
- continue;
-
- if (!needsCollision(obj0, obj1))
- continue;
-
- if (collisionPair->m_algorithm)
- collisionPair->m_algorithm->getAllContactManifolds(m_manifoldArray);
-
- for (int j = 0; j < m_manifoldArray.size(); j++)
- {
- btPersistentManifold* manifold = m_manifoldArray[j];
- btScalar directionSign = manifold->getBody0() == m_ghostObject ? btScalar(-1.0) : btScalar(1.0);
- for (int p = 0; p < manifold->getNumContacts(); p++)
- {
- const btManifoldPoint& pt = manifold->getContactPoint(p);
-
- btScalar dist = pt.getDistance();
-
- if (dist < -m_maxPenetrationDepth)
- {
- // TODO: cause problems on slopes, not sure if it is needed
- //if (dist < maxPen)
- //{
- // maxPen = dist;
- // m_touchingNormal = pt.m_normalWorldOnB * directionSign;//??
-
- //}
- m_currentPosition += pt.m_normalWorldOnB * directionSign * dist * btScalar(0.2);
- penetration = true;
- }
- else
- {
- //printf("touching %f\n", dist);
- }
- }
-
- //manifold->clearManifold();
- }
- }
- btTransform newTrans = m_ghostObject->getWorldTransform();
- newTrans.setOrigin(m_currentPosition);
- m_ghostObject->setWorldTransform(newTrans);
- // printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
- return penetration;
-}
-
-void btKinematicCharacterController::stepUp(btCollisionWorld* world)
-{
- btScalar stepHeight = 0.0f;
- if (m_verticalVelocity < 0.0)
- stepHeight = m_stepHeight;
-
- // phase 1: up
- btTransform start, end;
-
- start.setIdentity();
- end.setIdentity();
-
- /* FIXME: Handle penetration properly */
- start.setOrigin(m_currentPosition);
-
- m_targetPosition = m_currentPosition + m_up * (stepHeight) + m_jumpAxis * ((m_verticalOffset > 0.f ? m_verticalOffset : 0.f));
- m_currentPosition = m_targetPosition;
-
- end.setOrigin(m_targetPosition);
-
- start.setRotation(m_currentOrientation);
- end.setRotation(m_targetOrientation);
-
- btKinematicClosestNotMeConvexResultCallback callback(m_ghostObject, -m_up, m_maxSlopeCosine);
- callback.m_collisionFilterGroup = getGhostObject()->getBroadphaseHandle()->m_collisionFilterGroup;
- callback.m_collisionFilterMask = getGhostObject()->getBroadphaseHandle()->m_collisionFilterMask;
-
- if (m_useGhostObjectSweepTest)
- {
- m_ghostObject->convexSweepTest(m_convexShape, start, end, callback, world->getDispatchInfo().m_allowedCcdPenetration);
- }
- else
- {
- world->convexSweepTest(m_convexShape, start, end, callback, world->getDispatchInfo().m_allowedCcdPenetration);
- }
-
- if (callback.hasHit() && m_ghostObject->hasContactResponse() && needsCollision(m_ghostObject, callback.m_hitCollisionObject))
- {
- // Only modify the position if the hit was a slope and not a wall or ceiling.
- if (callback.m_hitNormalWorld.dot(m_up) > 0.0)
- {
- // we moved up only a fraction of the step height
- m_currentStepOffset = stepHeight * callback.m_closestHitFraction;
- if (m_interpolateUp == true)
- m_currentPosition.setInterpolate3(m_currentPosition, m_targetPosition, callback.m_closestHitFraction);
- else
- m_currentPosition = m_targetPosition;
- }
-
- btTransform& xform = m_ghostObject->getWorldTransform();
- xform.setOrigin(m_currentPosition);
- m_ghostObject->setWorldTransform(xform);
-
- // fix penetration if we hit a ceiling for example
- int numPenetrationLoops = 0;
- m_touchingContact = false;
- while (recoverFromPenetration(world))
- {
- numPenetrationLoops++;
- m_touchingContact = true;
- if (numPenetrationLoops > 4)
- {
- //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
- break;
- }
- }
- m_targetPosition = m_ghostObject->getWorldTransform().getOrigin();
- m_currentPosition = m_targetPosition;
-
- if (m_verticalOffset > 0)
- {
- m_verticalOffset = 0.0;
- m_verticalVelocity = 0.0;
- m_currentStepOffset = m_stepHeight;
- }
- }
- else
- {
- m_currentStepOffset = stepHeight;
- m_currentPosition = m_targetPosition;
- }
-}
-
-bool btKinematicCharacterController::needsCollision(const btCollisionObject* body0, const btCollisionObject* body1)
-{
- bool collides = (body0->getBroadphaseHandle()->m_collisionFilterGroup & body1->getBroadphaseHandle()->m_collisionFilterMask) != 0;
- collides = collides && (body1->getBroadphaseHandle()->m_collisionFilterGroup & body0->getBroadphaseHandle()->m_collisionFilterMask);
- return collides;
-}
-
-void btKinematicCharacterController::updateTargetPositionBasedOnCollision(const btVector3& hitNormal, btScalar tangentMag, btScalar normalMag)
-{
- btVector3 movementDirection = m_targetPosition - m_currentPosition;
- btScalar movementLength = movementDirection.length();
- if (movementLength > SIMD_EPSILON)
- {
- movementDirection.normalize();
-
- btVector3 reflectDir = computeReflectionDirection(movementDirection, hitNormal);
- reflectDir.normalize();
-
- btVector3 parallelDir, perpindicularDir;
-
- parallelDir = parallelComponent(reflectDir, hitNormal);
- perpindicularDir = perpindicularComponent(reflectDir, hitNormal);
-
- m_targetPosition = m_currentPosition;
- if (0) //tangentMag != 0.0)
- {
- btVector3 parComponent = parallelDir * btScalar(tangentMag * movementLength);
- // printf("parComponent=%f,%f,%f\n",parComponent[0],parComponent[1],parComponent[2]);
- m_targetPosition += parComponent;
- }
-
- if (normalMag != 0.0)
- {
- btVector3 perpComponent = perpindicularDir * btScalar(normalMag * movementLength);
- // printf("perpComponent=%f,%f,%f\n",perpComponent[0],perpComponent[1],perpComponent[2]);
- m_targetPosition += perpComponent;
- }
- }
- else
- {
- // printf("movementLength don't normalize a zero vector\n");
- }
-}
-
-void btKinematicCharacterController::stepForwardAndStrafe(btCollisionWorld* collisionWorld, const btVector3& walkMove)
-{
- // printf("m_normalizedDirection=%f,%f,%f\n",
- // m_normalizedDirection[0],m_normalizedDirection[1],m_normalizedDirection[2]);
- // phase 2: forward and strafe
- btTransform start, end;
-
- m_targetPosition = m_currentPosition + walkMove;
-
- start.setIdentity();
- end.setIdentity();
-
- btScalar fraction = 1.0;
- btScalar distance2 = (m_currentPosition - m_targetPosition).length2();
- // printf("distance2=%f\n",distance2);
-
- int maxIter = 10;
-
- while (fraction > btScalar(0.01) && maxIter-- > 0)
- {
- start.setOrigin(m_currentPosition);
- end.setOrigin(m_targetPosition);
- btVector3 sweepDirNegative(m_currentPosition - m_targetPosition);
-
- start.setRotation(m_currentOrientation);
- end.setRotation(m_targetOrientation);
-
- btKinematicClosestNotMeConvexResultCallback callback(m_ghostObject, sweepDirNegative, btScalar(0.0));
- callback.m_collisionFilterGroup = getGhostObject()->getBroadphaseHandle()->m_collisionFilterGroup;
- callback.m_collisionFilterMask = getGhostObject()->getBroadphaseHandle()->m_collisionFilterMask;
-
- btScalar margin = m_convexShape->getMargin();
- m_convexShape->setMargin(margin + m_addedMargin);
-
- if (!(start == end))
- {
- if (m_useGhostObjectSweepTest)
- {
- m_ghostObject->convexSweepTest(m_convexShape, start, end, callback, collisionWorld->getDispatchInfo().m_allowedCcdPenetration);
- }
- else
- {
- collisionWorld->convexSweepTest(m_convexShape, start, end, callback, collisionWorld->getDispatchInfo().m_allowedCcdPenetration);
- }
- }
- m_convexShape->setMargin(margin);
-
- fraction -= callback.m_closestHitFraction;
-
- if (callback.hasHit() && m_ghostObject->hasContactResponse() && needsCollision(m_ghostObject, callback.m_hitCollisionObject))
- {
- // we moved only a fraction
- //btScalar hitDistance;
- //hitDistance = (callback.m_hitPointWorld - m_currentPosition).length();
-
- // m_currentPosition.setInterpolate3 (m_currentPosition, m_targetPosition, callback.m_closestHitFraction);
-
- updateTargetPositionBasedOnCollision(callback.m_hitNormalWorld);
- btVector3 currentDir = m_targetPosition - m_currentPosition;
- distance2 = currentDir.length2();
- if (distance2 > SIMD_EPSILON)
- {
- currentDir.normalize();
- /* See Quake2: "If velocity is against original velocity, stop ead to avoid tiny oscilations in sloping corners." */
- if (currentDir.dot(m_normalizedDirection) <= btScalar(0.0))
- {
- break;
- }
- }
- else
- {
- // printf("currentDir: don't normalize a zero vector\n");
- break;
- }
- }
- else
- {
- m_currentPosition = m_targetPosition;
- }
- }
-}
-
-void btKinematicCharacterController::stepDown(btCollisionWorld* collisionWorld, btScalar dt)
-{
- btTransform start, end, end_double;
- bool runonce = false;
-
- // phase 3: down
- /*btScalar additionalDownStep = (m_wasOnGround && !onGround()) ? m_stepHeight : 0.0;
- btVector3 step_drop = m_up * (m_currentStepOffset + additionalDownStep);
- btScalar downVelocity = (additionalDownStep == 0.0 && m_verticalVelocity<0.0?-m_verticalVelocity:0.0) * dt;
- btVector3 gravity_drop = m_up * downVelocity;
- m_targetPosition -= (step_drop + gravity_drop);*/
-
- btVector3 orig_position = m_targetPosition;
-
- btScalar downVelocity = (m_verticalVelocity < 0.f ? -m_verticalVelocity : 0.f) * dt;
-
- if (m_verticalVelocity > 0.0)
- return;
-
- if (downVelocity > 0.0 && downVelocity > m_fallSpeed && (m_wasOnGround || !m_wasJumping))
- downVelocity = m_fallSpeed;
-
- btVector3 step_drop = m_up * (m_currentStepOffset + downVelocity);
- m_targetPosition -= step_drop;
-
- btKinematicClosestNotMeConvexResultCallback callback(m_ghostObject, m_up, m_maxSlopeCosine);
- callback.m_collisionFilterGroup = getGhostObject()->getBroadphaseHandle()->m_collisionFilterGroup;
- callback.m_collisionFilterMask = getGhostObject()->getBroadphaseHandle()->m_collisionFilterMask;
-
- btKinematicClosestNotMeConvexResultCallback callback2(m_ghostObject, m_up, m_maxSlopeCosine);
- callback2.m_collisionFilterGroup = getGhostObject()->getBroadphaseHandle()->m_collisionFilterGroup;
- callback2.m_collisionFilterMask = getGhostObject()->getBroadphaseHandle()->m_collisionFilterMask;
-
- while (1)
- {
- start.setIdentity();
- end.setIdentity();
-
- end_double.setIdentity();
-
- start.setOrigin(m_currentPosition);
- end.setOrigin(m_targetPosition);
-
- start.setRotation(m_currentOrientation);
- end.setRotation(m_targetOrientation);
-
- //set double test for 2x the step drop, to check for a large drop vs small drop
- end_double.setOrigin(m_targetPosition - step_drop);
-
- if (m_useGhostObjectSweepTest)
- {
- m_ghostObject->convexSweepTest(m_convexShape, start, end, callback, collisionWorld->getDispatchInfo().m_allowedCcdPenetration);
-
- if (!callback.hasHit() && m_ghostObject->hasContactResponse())
- {
- //test a double fall height, to see if the character should interpolate it's fall (full) or not (partial)
- m_ghostObject->convexSweepTest(m_convexShape, start, end_double, callback2, collisionWorld->getDispatchInfo().m_allowedCcdPenetration);
- }
- }
- else
- {
- collisionWorld->convexSweepTest(m_convexShape, start, end, callback, collisionWorld->getDispatchInfo().m_allowedCcdPenetration);
-
- if (!callback.hasHit() && m_ghostObject->hasContactResponse())
- {
- //test a double fall height, to see if the character should interpolate it's fall (large) or not (small)
- collisionWorld->convexSweepTest(m_convexShape, start, end_double, callback2, collisionWorld->getDispatchInfo().m_allowedCcdPenetration);
- }
- }
-
- btScalar downVelocity2 = (m_verticalVelocity < 0.f ? -m_verticalVelocity : 0.f) * dt;
- bool has_hit;
- if (bounce_fix == true)
- has_hit = (callback.hasHit() || callback2.hasHit()) && m_ghostObject->hasContactResponse() && needsCollision(m_ghostObject, callback.m_hitCollisionObject);
- else
- has_hit = callback2.hasHit() && m_ghostObject->hasContactResponse() && needsCollision(m_ghostObject, callback2.m_hitCollisionObject);
-
- btScalar stepHeight = 0.0f;
- if (m_verticalVelocity < 0.0)
- stepHeight = m_stepHeight;
-
- if (downVelocity2 > 0.0 && downVelocity2 < stepHeight && has_hit == true && runonce == false && (m_wasOnGround || !m_wasJumping))
- {
- //redo the velocity calculation when falling a small amount, for fast stairs motion
- //for larger falls, use the smoother/slower interpolated movement by not touching the target position
-
- m_targetPosition = orig_position;
- downVelocity = stepHeight;
-
- step_drop = m_up * (m_currentStepOffset + downVelocity);
- m_targetPosition -= step_drop;
- runonce = true;
- continue; //re-run previous tests
- }
- break;
- }
-
- if ((m_ghostObject->hasContactResponse() && (callback.hasHit() && needsCollision(m_ghostObject, callback.m_hitCollisionObject))) || runonce == true)
- {
- // we dropped a fraction of the height -> hit floor
- btScalar fraction = (m_currentPosition.getY() - callback.m_hitPointWorld.getY()) / 2;
-
- //printf("hitpoint: %g - pos %g\n", callback.m_hitPointWorld.getY(), m_currentPosition.getY());
-
- if (bounce_fix == true)
- {
- if (full_drop == true)
- m_currentPosition.setInterpolate3(m_currentPosition, m_targetPosition, callback.m_closestHitFraction);
- else
- //due to errors in the closestHitFraction variable when used with large polygons, calculate the hit fraction manually
- m_currentPosition.setInterpolate3(m_currentPosition, m_targetPosition, fraction);
- }
- else
- m_currentPosition.setInterpolate3(m_currentPosition, m_targetPosition, callback.m_closestHitFraction);
-
- full_drop = false;
-
- m_verticalVelocity = 0.0;
- m_verticalOffset = 0.0;
- m_wasJumping = false;
- }
- else
- {
- // we dropped the full height
-
- full_drop = true;
-
- if (bounce_fix == true)
- {
- downVelocity = (m_verticalVelocity < 0.f ? -m_verticalVelocity : 0.f) * dt;
- if (downVelocity > m_fallSpeed && (m_wasOnGround || !m_wasJumping))
- {
- m_targetPosition += step_drop; //undo previous target change
- downVelocity = m_fallSpeed;
- step_drop = m_up * (m_currentStepOffset + downVelocity);
- m_targetPosition -= step_drop;
- }
- }
- //printf("full drop - %g, %g\n", m_currentPosition.getY(), m_targetPosition.getY());
-
- m_currentPosition = m_targetPosition;
- }
-}
-
-void btKinematicCharacterController::setWalkDirection(
- const btVector3& walkDirection)
-{
- m_useWalkDirection = true;
- m_walkDirection = walkDirection;
- m_normalizedDirection = getNormalizedVector(m_walkDirection);
-}
-
-void btKinematicCharacterController::setVelocityForTimeInterval(
- const btVector3& velocity,
- btScalar timeInterval)
-{
- // printf("setVelocity!\n");
- // printf(" interval: %f\n", timeInterval);
- // printf(" velocity: (%f, %f, %f)\n",
- // velocity.x(), velocity.y(), velocity.z());
-
- m_useWalkDirection = false;
- m_walkDirection = velocity;
- m_normalizedDirection = getNormalizedVector(m_walkDirection);
- m_velocityTimeInterval += timeInterval;
-}
-
-void btKinematicCharacterController::setAngularVelocity(const btVector3& velocity)
-{
- m_AngVel = velocity;
-}
-
-const btVector3& btKinematicCharacterController::getAngularVelocity() const
-{
- return m_AngVel;
-}
-
-void btKinematicCharacterController::setLinearVelocity(const btVector3& velocity)
-{
- m_walkDirection = velocity;
-
- // HACK: if we are moving in the direction of the up, treat it as a jump :(
- if (m_walkDirection.length2() > 0)
- {
- btVector3 w = velocity.normalized();
- btScalar c = w.dot(m_up);
- if (c != 0)
- {
- //there is a component in walkdirection for vertical velocity
- btVector3 upComponent = m_up * (btSin(SIMD_HALF_PI - btAcos(c)) * m_walkDirection.length());
- m_walkDirection -= upComponent;
- m_verticalVelocity = (c < 0.0f ? -1 : 1) * upComponent.length();
-
- if (c > 0.0f)
- {
- m_wasJumping = true;
- m_jumpPosition = m_ghostObject->getWorldTransform().getOrigin();
- }
- }
- }
- else
- m_verticalVelocity = 0.0f;
-}
-
-btVector3 btKinematicCharacterController::getLinearVelocity() const
-{
- return m_walkDirection + (m_verticalVelocity * m_up);
-}
-
-void btKinematicCharacterController::reset(btCollisionWorld* collisionWorld)
-{
- m_verticalVelocity = 0.0;
- m_verticalOffset = 0.0;
- m_wasOnGround = false;
- m_wasJumping = false;
- m_walkDirection.setValue(0, 0, 0);
- m_velocityTimeInterval = 0.0;
-
- //clear pair cache
- btHashedOverlappingPairCache* cache = m_ghostObject->getOverlappingPairCache();
- while (cache->getOverlappingPairArray().size() > 0)
- {
- cache->removeOverlappingPair(cache->getOverlappingPairArray()[0].m_pProxy0, cache->getOverlappingPairArray()[0].m_pProxy1, collisionWorld->getDispatcher());
- }
-}
-
-void btKinematicCharacterController::warp(const btVector3& origin)
-{
- btTransform xform;
- xform.setIdentity();
- xform.setOrigin(origin);
- m_ghostObject->setWorldTransform(xform);
-}
-
-void btKinematicCharacterController::preStep(btCollisionWorld* collisionWorld)
-{
- m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
- m_targetPosition = m_currentPosition;
-
- m_currentOrientation = m_ghostObject->getWorldTransform().getRotation();
- m_targetOrientation = m_currentOrientation;
- // printf("m_targetPosition=%f,%f,%f\n",m_targetPosition[0],m_targetPosition[1],m_targetPosition[2]);
-}
-
-void btKinematicCharacterController::playerStep(btCollisionWorld* collisionWorld, btScalar dt)
-{
- // printf("playerStep(): ");
- // printf(" dt = %f", dt);
-
- if (m_AngVel.length2() > 0.0f)
- {
- m_AngVel *= btPow(btScalar(1) - m_angularDamping, dt);
- }
-
- // integrate for angular velocity
- if (m_AngVel.length2() > 0.0f)
- {
- btTransform xform;
- xform = m_ghostObject->getWorldTransform();
-
- btQuaternion rot(m_AngVel.normalized(), m_AngVel.length() * dt);
-
- btQuaternion orn = rot * xform.getRotation();
-
- xform.setRotation(orn);
- m_ghostObject->setWorldTransform(xform);
-
- m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
- m_targetPosition = m_currentPosition;
- m_currentOrientation = m_ghostObject->getWorldTransform().getRotation();
- m_targetOrientation = m_currentOrientation;
- }
-
- // quick check...
- if (!m_useWalkDirection && (m_velocityTimeInterval <= 0.0 || m_walkDirection.fuzzyZero()))
- {
- // printf("\n");
- return; // no motion
- }
-
- m_wasOnGround = onGround();
-
- //btVector3 lvel = m_walkDirection;
- //btScalar c = 0.0f;
-
- if (m_walkDirection.length2() > 0)
- {
- // apply damping
- m_walkDirection *= btPow(btScalar(1) - m_linearDamping, dt);
- }
-
- m_verticalVelocity *= btPow(btScalar(1) - m_linearDamping, dt);
-
- // Update fall velocity.
- m_verticalVelocity -= m_gravity * dt;
- if (m_verticalVelocity > 0.0 && m_verticalVelocity > m_jumpSpeed)
- {
- m_verticalVelocity = m_jumpSpeed;
- }
- if (m_verticalVelocity < 0.0 && btFabs(m_verticalVelocity) > btFabs(m_fallSpeed))
- {
- m_verticalVelocity = -btFabs(m_fallSpeed);
- }
- m_verticalOffset = m_verticalVelocity * dt;
-
- btTransform xform;
- xform = m_ghostObject->getWorldTransform();
-
- // printf("walkDirection(%f,%f,%f)\n",walkDirection[0],walkDirection[1],walkDirection[2]);
- // printf("walkSpeed=%f\n",walkSpeed);
-
- stepUp(collisionWorld);
- //todo: Experimenting with behavior of controller when it hits a ceiling..
- //bool hitUp = stepUp (collisionWorld);
- //if (hitUp)
- //{
- // m_verticalVelocity -= m_gravity * dt;
- // if (m_verticalVelocity > 0.0 && m_verticalVelocity > m_jumpSpeed)
- // {
- // m_verticalVelocity = m_jumpSpeed;
- // }
- // if (m_verticalVelocity < 0.0 && btFabs(m_verticalVelocity) > btFabs(m_fallSpeed))
- // {
- // m_verticalVelocity = -btFabs(m_fallSpeed);
- // }
- // m_verticalOffset = m_verticalVelocity * dt;
-
- // xform = m_ghostObject->getWorldTransform();
- //}
-
- if (m_useWalkDirection)
- {
- stepForwardAndStrafe(collisionWorld, m_walkDirection);
- }
- else
- {
- //printf(" time: %f", m_velocityTimeInterval);
- // still have some time left for moving!
- btScalar dtMoving =
- (dt < m_velocityTimeInterval) ? dt : m_velocityTimeInterval;
- m_velocityTimeInterval -= dt;
-
- // how far will we move while we are moving?
- btVector3 move = m_walkDirection * dtMoving;
-
- //printf(" dtMoving: %f", dtMoving);
-
- // okay, step
- stepForwardAndStrafe(collisionWorld, move);
- }
- stepDown(collisionWorld, dt);
-
- //todo: Experimenting with max jump height
- //if (m_wasJumping)
- //{
- // btScalar ds = m_currentPosition[m_upAxis] - m_jumpPosition[m_upAxis];
- // if (ds > m_maxJumpHeight)
- // {
- // // substract the overshoot
- // m_currentPosition[m_upAxis] -= ds - m_maxJumpHeight;
-
- // // max height was reached, so potential energy is at max
- // // and kinematic energy is 0, thus velocity is 0.
- // if (m_verticalVelocity > 0.0)
- // m_verticalVelocity = 0.0;
- // }
- //}
- // printf("\n");
-
- xform.setOrigin(m_currentPosition);
- m_ghostObject->setWorldTransform(xform);
-
- int numPenetrationLoops = 0;
- m_touchingContact = false;
- while (recoverFromPenetration(collisionWorld))
- {
- numPenetrationLoops++;
- m_touchingContact = true;
- if (numPenetrationLoops > 4)
- {
- //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
- break;
- }
- }
-}
-
-void btKinematicCharacterController::setFallSpeed(btScalar fallSpeed)
-{
- m_fallSpeed = fallSpeed;
-}
-
-void btKinematicCharacterController::setJumpSpeed(btScalar jumpSpeed)
-{
- m_jumpSpeed = jumpSpeed;
- m_SetjumpSpeed = m_jumpSpeed;
-}
-
-void btKinematicCharacterController::setMaxJumpHeight(btScalar maxJumpHeight)
-{
- m_maxJumpHeight = maxJumpHeight;
-}
-
-bool btKinematicCharacterController::canJump() const
-{
- return onGround();
-}
-
-void btKinematicCharacterController::jump(const btVector3& v)
-{
- m_jumpSpeed = v.length2() == 0 ? m_SetjumpSpeed : v.length();
- m_verticalVelocity = m_jumpSpeed;
- m_wasJumping = true;
-
- m_jumpAxis = v.length2() == 0 ? m_up : v.normalized();
-
- m_jumpPosition = m_ghostObject->getWorldTransform().getOrigin();
-
-#if 0
- currently no jumping.
- btTransform xform;
- m_rigidBody->getMotionState()->getWorldTransform (xform);
- btVector3 up = xform.getBasis()[1];
- up.normalize ();
- btScalar magnitude = (btScalar(1.0)/m_rigidBody->getInvMass()) * btScalar(8.0);
- m_rigidBody->applyCentralImpulse (up * magnitude);
-#endif
-}
-
-void btKinematicCharacterController::setGravity(const btVector3& gravity)
-{
- if (gravity.length2() > 0) setUpVector(-gravity);
-
- m_gravity = gravity.length();
-}
-
-btVector3 btKinematicCharacterController::getGravity() const
-{
- return -m_gravity * m_up;
-}
-
-void btKinematicCharacterController::setMaxSlope(btScalar slopeRadians)
-{
- m_maxSlopeRadians = slopeRadians;
- m_maxSlopeCosine = btCos(slopeRadians);
-}
-
-btScalar btKinematicCharacterController::getMaxSlope() const
-{
- return m_maxSlopeRadians;
-}
-
-void btKinematicCharacterController::setMaxPenetrationDepth(btScalar d)
-{
- m_maxPenetrationDepth = d;
-}
-
-btScalar btKinematicCharacterController::getMaxPenetrationDepth() const
-{
- return m_maxPenetrationDepth;
-}
-
-bool btKinematicCharacterController::onGround() const
-{
- return (fabs(m_verticalVelocity) < SIMD_EPSILON) && (fabs(m_verticalOffset) < SIMD_EPSILON);
-}
-
-void btKinematicCharacterController::setStepHeight(btScalar h)
-{
- m_stepHeight = h;
-}
-
-btVector3* btKinematicCharacterController::getUpAxisDirections()
-{
- static btVector3 sUpAxisDirection[3] = {btVector3(1.0f, 0.0f, 0.0f), btVector3(0.0f, 1.0f, 0.0f), btVector3(0.0f, 0.0f, 1.0f)};
-
- return sUpAxisDirection;
-}
-
-void btKinematicCharacterController::debugDraw(btIDebugDraw* debugDrawer)
-{
-}
-
-void btKinematicCharacterController::setUpInterpolate(bool value)
-{
- m_interpolateUp = value;
-}
-
-void btKinematicCharacterController::setUp(const btVector3& up)
-{
- if (up.length2() > 0 && m_gravity > 0.0f)
- {
- setGravity(-m_gravity * up.normalized());
- return;
- }
-
- setUpVector(up);
-}
-
-void btKinematicCharacterController::setUpVector(const btVector3& up)
-{
- if (m_up == up)
- return;
-
- btVector3 u = m_up;
-
- if (up.length2() > 0)
- m_up = up.normalized();
- else
- m_up = btVector3(0.0, 0.0, 0.0);
-
- if (!m_ghostObject) return;
- btQuaternion rot = getRotation(m_up, u);
-
- //set orientation with new up
- btTransform xform;
- xform = m_ghostObject->getWorldTransform();
- btQuaternion orn = rot.inverse() * xform.getRotation();
- xform.setRotation(orn);
- m_ghostObject->setWorldTransform(xform);
-}
-
-btQuaternion btKinematicCharacterController::getRotation(btVector3& v0, btVector3& v1) const
-{
- if (v0.length2() == 0.0f || v1.length2() == 0.0f)
- {
- btQuaternion q;
- return q;
- }
-
- return shortestArcQuatNormalize2(v0, v1);
-}
diff --git a/thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.h b/thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.h
deleted file mode 100644
index ff34fc871a..0000000000
--- a/thirdparty/bullet/BulletDynamics/Character/btKinematicCharacterController.h
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_KINEMATIC_CHARACTER_CONTROLLER_H
-#define BT_KINEMATIC_CHARACTER_CONTROLLER_H
-
-#include "LinearMath/btVector3.h"
-
-#include "btCharacterControllerInterface.h"
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-
-class btCollisionShape;
-class btConvexShape;
-class btRigidBody;
-class btCollisionWorld;
-class btCollisionDispatcher;
-class btPairCachingGhostObject;
-
-///btKinematicCharacterController is an object that supports a sliding motion in a world.
-///It uses a ghost object and convex sweep test to test for upcoming collisions. This is combined with discrete collision detection to recover from penetrations.
-///Interaction between btKinematicCharacterController and dynamic rigid bodies needs to be explicity implemented by the user.
-ATTRIBUTE_ALIGNED16(class)
-btKinematicCharacterController : public btCharacterControllerInterface
-{
-protected:
- btScalar m_halfHeight;
-
- btPairCachingGhostObject* m_ghostObject;
- btConvexShape* m_convexShape; //is also in m_ghostObject, but it needs to be convex, so we store it here to avoid upcast
-
- btScalar m_maxPenetrationDepth;
- btScalar m_verticalVelocity;
- btScalar m_verticalOffset;
- btScalar m_fallSpeed;
- btScalar m_jumpSpeed;
- btScalar m_SetjumpSpeed;
- btScalar m_maxJumpHeight;
- btScalar m_maxSlopeRadians; // Slope angle that is set (used for returning the exact value)
- btScalar m_maxSlopeCosine; // Cosine equivalent of m_maxSlopeRadians (calculated once when set, for optimization)
- btScalar m_gravity;
-
- btScalar m_turnAngle;
-
- btScalar m_stepHeight;
-
- btScalar m_addedMargin; //@todo: remove this and fix the code
-
- ///this is the desired walk direction, set by the user
- btVector3 m_walkDirection;
- btVector3 m_normalizedDirection;
- btVector3 m_AngVel;
-
- btVector3 m_jumpPosition;
-
- //some internal variables
- btVector3 m_currentPosition;
- btScalar m_currentStepOffset;
- btVector3 m_targetPosition;
-
- btQuaternion m_currentOrientation;
- btQuaternion m_targetOrientation;
-
- ///keep track of the contact manifolds
- btManifoldArray m_manifoldArray;
-
- bool m_touchingContact;
- btVector3 m_touchingNormal;
-
- btScalar m_linearDamping;
- btScalar m_angularDamping;
-
- bool m_wasOnGround;
- bool m_wasJumping;
- bool m_useGhostObjectSweepTest;
- bool m_useWalkDirection;
- btScalar m_velocityTimeInterval;
- btVector3 m_up;
- btVector3 m_jumpAxis;
-
- static btVector3* getUpAxisDirections();
- bool m_interpolateUp;
- bool full_drop;
- bool bounce_fix;
-
- btVector3 computeReflectionDirection(const btVector3& direction, const btVector3& normal);
- btVector3 parallelComponent(const btVector3& direction, const btVector3& normal);
- btVector3 perpindicularComponent(const btVector3& direction, const btVector3& normal);
-
- bool recoverFromPenetration(btCollisionWorld * collisionWorld);
- void stepUp(btCollisionWorld * collisionWorld);
- void updateTargetPositionBasedOnCollision(const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0));
- void stepForwardAndStrafe(btCollisionWorld * collisionWorld, const btVector3& walkMove);
- void stepDown(btCollisionWorld * collisionWorld, btScalar dt);
-
- virtual bool needsCollision(const btCollisionObject* body0, const btCollisionObject* body1);
-
- void setUpVector(const btVector3& up);
-
- btQuaternion getRotation(btVector3 & v0, btVector3 & v1) const;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btKinematicCharacterController(btPairCachingGhostObject * ghostObject, btConvexShape * convexShape, btScalar stepHeight, const btVector3& up = btVector3(1.0, 0.0, 0.0));
- ~btKinematicCharacterController();
-
- ///btActionInterface interface
- virtual void updateAction(btCollisionWorld * collisionWorld, btScalar deltaTime)
- {
- preStep(collisionWorld);
- playerStep(collisionWorld, deltaTime);
- }
-
- ///btActionInterface interface
- void debugDraw(btIDebugDraw * debugDrawer);
-
- void setUp(const btVector3& up);
-
- const btVector3& getUp() { return m_up; }
-
- /// This should probably be called setPositionIncrementPerSimulatorStep.
- /// This is neither a direction nor a velocity, but the amount to
- /// increment the position each simulation iteration, regardless
- /// of dt.
- /// This call will reset any velocity set by setVelocityForTimeInterval().
- virtual void setWalkDirection(const btVector3& walkDirection);
-
- /// Caller provides a velocity with which the character should move for
- /// the given time period. After the time period, velocity is reset
- /// to zero.
- /// This call will reset any walk direction set by setWalkDirection().
- /// Negative time intervals will result in no motion.
- virtual void setVelocityForTimeInterval(const btVector3& velocity,
- btScalar timeInterval);
-
- virtual void setAngularVelocity(const btVector3& velocity);
- virtual const btVector3& getAngularVelocity() const;
-
- virtual void setLinearVelocity(const btVector3& velocity);
- virtual btVector3 getLinearVelocity() const;
-
- void setLinearDamping(btScalar d) { m_linearDamping = btClamped(d, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); }
- btScalar getLinearDamping() const { return m_linearDamping; }
- void setAngularDamping(btScalar d) { m_angularDamping = btClamped(d, (btScalar)btScalar(0.0), (btScalar)btScalar(1.0)); }
- btScalar getAngularDamping() const { return m_angularDamping; }
-
- void reset(btCollisionWorld * collisionWorld);
- void warp(const btVector3& origin);
-
- void preStep(btCollisionWorld * collisionWorld);
- void playerStep(btCollisionWorld * collisionWorld, btScalar dt);
-
- void setStepHeight(btScalar h);
- btScalar getStepHeight() const { return m_stepHeight; }
- void setFallSpeed(btScalar fallSpeed);
- btScalar getFallSpeed() const { return m_fallSpeed; }
- void setJumpSpeed(btScalar jumpSpeed);
- btScalar getJumpSpeed() const { return m_jumpSpeed; }
- void setMaxJumpHeight(btScalar maxJumpHeight);
- bool canJump() const;
-
- void jump(const btVector3& v = btVector3(0, 0, 0));
-
- void applyImpulse(const btVector3& v) { jump(v); }
-
- void setGravity(const btVector3& gravity);
- btVector3 getGravity() const;
-
- /// The max slope determines the maximum angle that the controller can walk up.
- /// The slope angle is measured in radians.
- void setMaxSlope(btScalar slopeRadians);
- btScalar getMaxSlope() const;
-
- void setMaxPenetrationDepth(btScalar d);
- btScalar getMaxPenetrationDepth() const;
-
- btPairCachingGhostObject* getGhostObject();
- void setUseGhostSweepTest(bool useGhostObjectSweepTest)
- {
- m_useGhostObjectSweepTest = useGhostObjectSweepTest;
- }
-
- bool onGround() const;
- void setUpInterpolate(bool value);
-};
-
-#endif // BT_KINEMATIC_CHARACTER_CONTROLLER_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.cpp
deleted file mode 100644
index 0f5ed1c2ce..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.cpp
+++ /dev/null
@@ -1,1084 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btBatchedConstraints.h"
-
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btMinMax.h"
-#include "LinearMath/btStackAlloc.h"
-#include "LinearMath/btQuickprof.h"
-
-#include <string.h> //for memset
-
-#include <cmath>
-
-const int kNoMerge = -1;
-
-bool btBatchedConstraints::s_debugDrawBatches = false;
-
-struct btBatchedConstraintInfo
-{
- int constraintIndex;
- int numConstraintRows;
- int bodyIds[2];
-};
-
-struct btBatchInfo
-{
- int numConstraints;
- int mergeIndex;
-
- btBatchInfo() : numConstraints(0), mergeIndex(kNoMerge) {}
-};
-
-bool btBatchedConstraints::validate(btConstraintArray* constraints, const btAlignedObjectArray<btSolverBody>& bodies) const
-{
- //
- // validate: for debugging only. Verify coloring of bodies, that no body is touched by more than one batch in any given phase
- //
- int errors = 0;
- const int kUnassignedBatch = -1;
-
- btAlignedObjectArray<int> bodyBatchId;
- for (int iPhase = 0; iPhase < m_phases.size(); ++iPhase)
- {
- bodyBatchId.resizeNoInitialize(0);
- bodyBatchId.resize(bodies.size(), kUnassignedBatch);
- const Range& phase = m_phases[iPhase];
- for (int iBatch = phase.begin; iBatch < phase.end; ++iBatch)
- {
- const Range& batch = m_batches[iBatch];
- for (int iiCons = batch.begin; iiCons < batch.end; ++iiCons)
- {
- int iCons = m_constraintIndices[iiCons];
- const btSolverConstraint& cons = constraints->at(iCons);
- const btSolverBody& bodyA = bodies[cons.m_solverBodyIdA];
- const btSolverBody& bodyB = bodies[cons.m_solverBodyIdB];
- if (!bodyA.internalGetInvMass().isZero())
- {
- int thisBodyBatchId = bodyBatchId[cons.m_solverBodyIdA];
- if (thisBodyBatchId == kUnassignedBatch)
- {
- bodyBatchId[cons.m_solverBodyIdA] = iBatch;
- }
- else if (thisBodyBatchId != iBatch)
- {
- btAssert(!"dynamic body is used in 2 different batches in the same phase");
- errors++;
- }
- }
- if (!bodyB.internalGetInvMass().isZero())
- {
- int thisBodyBatchId = bodyBatchId[cons.m_solverBodyIdB];
- if (thisBodyBatchId == kUnassignedBatch)
- {
- bodyBatchId[cons.m_solverBodyIdB] = iBatch;
- }
- else if (thisBodyBatchId != iBatch)
- {
- btAssert(!"dynamic body is used in 2 different batches in the same phase");
- errors++;
- }
- }
- }
- }
- }
- return errors == 0;
-}
-
-static void debugDrawSingleBatch(const btBatchedConstraints* bc,
- btConstraintArray* constraints,
- const btAlignedObjectArray<btSolverBody>& bodies,
- int iBatch,
- const btVector3& color,
- const btVector3& offset)
-{
- if (bc && bc->m_debugDrawer && iBatch < bc->m_batches.size())
- {
- const btBatchedConstraints::Range& b = bc->m_batches[iBatch];
- for (int iiCon = b.begin; iiCon < b.end; ++iiCon)
- {
- int iCon = bc->m_constraintIndices[iiCon];
- const btSolverConstraint& con = constraints->at(iCon);
- int iBody0 = con.m_solverBodyIdA;
- int iBody1 = con.m_solverBodyIdB;
- btVector3 pos0 = bodies[iBody0].getWorldTransform().getOrigin() + offset;
- btVector3 pos1 = bodies[iBody1].getWorldTransform().getOrigin() + offset;
- bc->m_debugDrawer->drawLine(pos0, pos1, color);
- }
- }
-}
-
-static void debugDrawPhase(const btBatchedConstraints* bc,
- btConstraintArray* constraints,
- const btAlignedObjectArray<btSolverBody>& bodies,
- int iPhase,
- const btVector3& color0,
- const btVector3& color1,
- const btVector3& offset)
-{
- BT_PROFILE("debugDrawPhase");
- if (bc && bc->m_debugDrawer && iPhase < bc->m_phases.size())
- {
- const btBatchedConstraints::Range& phase = bc->m_phases[iPhase];
- for (int iBatch = phase.begin; iBatch < phase.end; ++iBatch)
- {
- float tt = float(iBatch - phase.begin) / float(btMax(1, phase.end - phase.begin - 1));
- btVector3 col = lerp(color0, color1, tt);
- debugDrawSingleBatch(bc, constraints, bodies, iBatch, col, offset);
- }
- }
-}
-
-static void debugDrawAllBatches(const btBatchedConstraints* bc,
- btConstraintArray* constraints,
- const btAlignedObjectArray<btSolverBody>& bodies)
-{
- BT_PROFILE("debugDrawAllBatches");
- if (bc && bc->m_debugDrawer && bc->m_phases.size() > 0)
- {
- btVector3 bboxMin(BT_LARGE_FLOAT, BT_LARGE_FLOAT, BT_LARGE_FLOAT);
- btVector3 bboxMax = -bboxMin;
- for (int iBody = 0; iBody < bodies.size(); ++iBody)
- {
- const btVector3& pos = bodies[iBody].getWorldTransform().getOrigin();
- bboxMin.setMin(pos);
- bboxMax.setMax(pos);
- }
- btVector3 bboxExtent = bboxMax - bboxMin;
- btVector3 offsetBase = btVector3(0, bboxExtent.y() * 1.1f, 0);
- btVector3 offsetStep = btVector3(0, 0, bboxExtent.z() * 1.1f);
- int numPhases = bc->m_phases.size();
- for (int iPhase = 0; iPhase < numPhases; ++iPhase)
- {
- float b = float(iPhase) / float(numPhases - 1);
- btVector3 color0 = btVector3(1, 0, b);
- btVector3 color1 = btVector3(0, 1, b);
- btVector3 offset = offsetBase + offsetStep * (float(iPhase) - float(numPhases - 1) * 0.5);
- debugDrawPhase(bc, constraints, bodies, iPhase, color0, color1, offset);
- }
- }
-}
-
-static void initBatchedBodyDynamicFlags(btAlignedObjectArray<bool>* outBodyDynamicFlags, const btAlignedObjectArray<btSolverBody>& bodies)
-{
- BT_PROFILE("initBatchedBodyDynamicFlags");
- btAlignedObjectArray<bool>& bodyDynamicFlags = *outBodyDynamicFlags;
- bodyDynamicFlags.resizeNoInitialize(bodies.size());
- for (int i = 0; i < bodies.size(); ++i)
- {
- const btSolverBody& body = bodies[i];
- bodyDynamicFlags[i] = (body.internalGetInvMass().x() > btScalar(0));
- }
-}
-
-static int runLengthEncodeConstraintInfo(btBatchedConstraintInfo* outConInfos, int numConstraints)
-{
- BT_PROFILE("runLengthEncodeConstraintInfo");
- // detect and run-length encode constraint rows that repeat the same bodies
- int iDest = 0;
- int iSrc = 0;
- while (iSrc < numConstraints)
- {
- const btBatchedConstraintInfo& srcConInfo = outConInfos[iSrc];
- btBatchedConstraintInfo& conInfo = outConInfos[iDest];
- conInfo.constraintIndex = iSrc;
- conInfo.bodyIds[0] = srcConInfo.bodyIds[0];
- conInfo.bodyIds[1] = srcConInfo.bodyIds[1];
- while (iSrc < numConstraints && outConInfos[iSrc].bodyIds[0] == srcConInfo.bodyIds[0] && outConInfos[iSrc].bodyIds[1] == srcConInfo.bodyIds[1])
- {
- ++iSrc;
- }
- conInfo.numConstraintRows = iSrc - conInfo.constraintIndex;
- ++iDest;
- }
- return iDest;
-}
-
-struct ReadSolverConstraintsLoop : public btIParallelForBody
-{
- btBatchedConstraintInfo* m_outConInfos;
- btConstraintArray* m_constraints;
-
- ReadSolverConstraintsLoop(btBatchedConstraintInfo* outConInfos, btConstraintArray* constraints)
- {
- m_outConInfos = outConInfos;
- m_constraints = constraints;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- for (int i = iBegin; i < iEnd; ++i)
- {
- btBatchedConstraintInfo& conInfo = m_outConInfos[i];
- const btSolverConstraint& con = m_constraints->at(i);
- conInfo.bodyIds[0] = con.m_solverBodyIdA;
- conInfo.bodyIds[1] = con.m_solverBodyIdB;
- conInfo.constraintIndex = i;
- conInfo.numConstraintRows = 1;
- }
- }
-};
-
-static int initBatchedConstraintInfo(btBatchedConstraintInfo* outConInfos, btConstraintArray* constraints)
-{
- BT_PROFILE("initBatchedConstraintInfo");
- int numConstraints = constraints->size();
- bool inParallel = true;
- if (inParallel)
- {
- ReadSolverConstraintsLoop loop(outConInfos, constraints);
- int grainSize = 1200;
- btParallelFor(0, numConstraints, grainSize, loop);
- }
- else
- {
- for (int i = 0; i < numConstraints; ++i)
- {
- btBatchedConstraintInfo& conInfo = outConInfos[i];
- const btSolverConstraint& con = constraints->at(i);
- conInfo.bodyIds[0] = con.m_solverBodyIdA;
- conInfo.bodyIds[1] = con.m_solverBodyIdB;
- conInfo.constraintIndex = i;
- conInfo.numConstraintRows = 1;
- }
- }
- bool useRunLengthEncoding = true;
- if (useRunLengthEncoding)
- {
- numConstraints = runLengthEncodeConstraintInfo(outConInfos, numConstraints);
- }
- return numConstraints;
-}
-
-static void expandConstraintRowsInPlace(int* constraintBatchIds, const btBatchedConstraintInfo* conInfos, int numConstraints, int numConstraintRows)
-{
- BT_PROFILE("expandConstraintRowsInPlace");
- if (numConstraintRows > numConstraints)
- {
- // we walk the array in reverse to avoid overwriteing
- for (int iCon = numConstraints - 1; iCon >= 0; --iCon)
- {
- const btBatchedConstraintInfo& conInfo = conInfos[iCon];
- int iBatch = constraintBatchIds[iCon];
- for (int i = conInfo.numConstraintRows - 1; i >= 0; --i)
- {
- int iDest = conInfo.constraintIndex + i;
- btAssert(iDest >= iCon);
- btAssert(iDest >= 0 && iDest < numConstraintRows);
- constraintBatchIds[iDest] = iBatch;
- }
- }
- }
-}
-
-static void expandConstraintRows(int* destConstraintBatchIds, const int* srcConstraintBatchIds, const btBatchedConstraintInfo* conInfos, int numConstraints, int numConstraintRows)
-{
- BT_PROFILE("expandConstraintRows");
- for (int iCon = 0; iCon < numConstraints; ++iCon)
- {
- const btBatchedConstraintInfo& conInfo = conInfos[iCon];
- int iBatch = srcConstraintBatchIds[iCon];
- for (int i = 0; i < conInfo.numConstraintRows; ++i)
- {
- int iDest = conInfo.constraintIndex + i;
- btAssert(iDest >= iCon);
- btAssert(iDest >= 0 && iDest < numConstraintRows);
- destConstraintBatchIds[iDest] = iBatch;
- }
- }
-}
-
-struct ExpandConstraintRowsLoop : public btIParallelForBody
-{
- int* m_destConstraintBatchIds;
- const int* m_srcConstraintBatchIds;
- const btBatchedConstraintInfo* m_conInfos;
- int m_numConstraintRows;
-
- ExpandConstraintRowsLoop(int* destConstraintBatchIds, const int* srcConstraintBatchIds, const btBatchedConstraintInfo* conInfos, int numConstraintRows)
- {
- m_destConstraintBatchIds = destConstraintBatchIds;
- m_srcConstraintBatchIds = srcConstraintBatchIds;
- m_conInfos = conInfos;
- m_numConstraintRows = numConstraintRows;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- expandConstraintRows(m_destConstraintBatchIds, m_srcConstraintBatchIds + iBegin, m_conInfos + iBegin, iEnd - iBegin, m_numConstraintRows);
- }
-};
-
-static void expandConstraintRowsMt(int* destConstraintBatchIds, const int* srcConstraintBatchIds, const btBatchedConstraintInfo* conInfos, int numConstraints, int numConstraintRows)
-{
- BT_PROFILE("expandConstraintRowsMt");
- ExpandConstraintRowsLoop loop(destConstraintBatchIds, srcConstraintBatchIds, conInfos, numConstraintRows);
- int grainSize = 600;
- btParallelFor(0, numConstraints, grainSize, loop);
-}
-
-static void initBatchedConstraintInfoArray(btAlignedObjectArray<btBatchedConstraintInfo>* outConInfos, btConstraintArray* constraints)
-{
- BT_PROFILE("initBatchedConstraintInfoArray");
- btAlignedObjectArray<btBatchedConstraintInfo>& conInfos = *outConInfos;
- int numConstraints = constraints->size();
- conInfos.resizeNoInitialize(numConstraints);
-
- int newSize = initBatchedConstraintInfo(&outConInfos->at(0), constraints);
- conInfos.resizeNoInitialize(newSize);
-}
-
-static void mergeSmallBatches(btBatchInfo* batches, int iBeginBatch, int iEndBatch, int minBatchSize, int maxBatchSize)
-{
- BT_PROFILE("mergeSmallBatches");
- for (int iBatch = iEndBatch - 1; iBatch >= iBeginBatch; --iBatch)
- {
- btBatchInfo& batch = batches[iBatch];
- if (batch.mergeIndex == kNoMerge && batch.numConstraints > 0 && batch.numConstraints < minBatchSize)
- {
- for (int iDestBatch = iBatch - 1; iDestBatch >= iBeginBatch; --iDestBatch)
- {
- btBatchInfo& destBatch = batches[iDestBatch];
- if (destBatch.mergeIndex == kNoMerge && (destBatch.numConstraints + batch.numConstraints) < maxBatchSize)
- {
- destBatch.numConstraints += batch.numConstraints;
- batch.numConstraints = 0;
- batch.mergeIndex = iDestBatch;
- break;
- }
- }
- }
- }
- // flatten mergeIndexes
- // e.g. in case where A was merged into B and then B was merged into C, we need A to point to C instead of B
- // Note: loop goes forward through batches because batches always merge from higher indexes to lower,
- // so by going from low to high it reduces the amount of trail-following
- for (int iBatch = iBeginBatch; iBatch < iEndBatch; ++iBatch)
- {
- btBatchInfo& batch = batches[iBatch];
- if (batch.mergeIndex != kNoMerge)
- {
- int iMergeDest = batches[batch.mergeIndex].mergeIndex;
- // follow trail of merges to the end
- while (iMergeDest != kNoMerge)
- {
- int iNext = batches[iMergeDest].mergeIndex;
- if (iNext == kNoMerge)
- {
- batch.mergeIndex = iMergeDest;
- break;
- }
- iMergeDest = iNext;
- }
- }
- }
-}
-
-static void updateConstraintBatchIdsForMerges(int* constraintBatchIds, int numConstraints, const btBatchInfo* batches, int numBatches)
-{
- BT_PROFILE("updateConstraintBatchIdsForMerges");
- // update batchIds to account for merges
- for (int i = 0; i < numConstraints; ++i)
- {
- int iBatch = constraintBatchIds[i];
- btAssert(iBatch < numBatches);
- // if this constraint references a batch that was merged into another batch
- if (batches[iBatch].mergeIndex != kNoMerge)
- {
- // update batchId
- constraintBatchIds[i] = batches[iBatch].mergeIndex;
- }
- }
-}
-
-struct UpdateConstraintBatchIdsForMergesLoop : public btIParallelForBody
-{
- int* m_constraintBatchIds;
- const btBatchInfo* m_batches;
- int m_numBatches;
-
- UpdateConstraintBatchIdsForMergesLoop(int* constraintBatchIds, const btBatchInfo* batches, int numBatches)
- {
- m_constraintBatchIds = constraintBatchIds;
- m_batches = batches;
- m_numBatches = numBatches;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("UpdateConstraintBatchIdsForMergesLoop");
- updateConstraintBatchIdsForMerges(m_constraintBatchIds + iBegin, iEnd - iBegin, m_batches, m_numBatches);
- }
-};
-
-static void updateConstraintBatchIdsForMergesMt(int* constraintBatchIds, int numConstraints, const btBatchInfo* batches, int numBatches)
-{
- BT_PROFILE("updateConstraintBatchIdsForMergesMt");
- UpdateConstraintBatchIdsForMergesLoop loop(constraintBatchIds, batches, numBatches);
- int grainSize = 800;
- btParallelFor(0, numConstraints, grainSize, loop);
-}
-
-inline bool BatchCompare(const btBatchedConstraints::Range& a, const btBatchedConstraints::Range& b)
-{
- int lenA = a.end - a.begin;
- int lenB = b.end - b.begin;
- return lenA > lenB;
-}
-
-static void writeOutConstraintIndicesForRangeOfBatches(btBatchedConstraints* bc,
- const int* constraintBatchIds,
- int numConstraints,
- int* constraintIdPerBatch,
- int batchBegin,
- int batchEnd)
-{
- BT_PROFILE("writeOutConstraintIndicesForRangeOfBatches");
- for (int iCon = 0; iCon < numConstraints; ++iCon)
- {
- int iBatch = constraintBatchIds[iCon];
- if (iBatch >= batchBegin && iBatch < batchEnd)
- {
- int iDestCon = constraintIdPerBatch[iBatch];
- constraintIdPerBatch[iBatch] = iDestCon + 1;
- bc->m_constraintIndices[iDestCon] = iCon;
- }
- }
-}
-
-struct WriteOutConstraintIndicesLoop : public btIParallelForBody
-{
- btBatchedConstraints* m_batchedConstraints;
- const int* m_constraintBatchIds;
- int m_numConstraints;
- int* m_constraintIdPerBatch;
- int m_maxNumBatchesPerPhase;
-
- WriteOutConstraintIndicesLoop(btBatchedConstraints* bc, const int* constraintBatchIds, int numConstraints, int* constraintIdPerBatch, int maxNumBatchesPerPhase)
- {
- m_batchedConstraints = bc;
- m_constraintBatchIds = constraintBatchIds;
- m_numConstraints = numConstraints;
- m_constraintIdPerBatch = constraintIdPerBatch;
- m_maxNumBatchesPerPhase = maxNumBatchesPerPhase;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("WriteOutConstraintIndicesLoop");
- int batchBegin = iBegin * m_maxNumBatchesPerPhase;
- int batchEnd = iEnd * m_maxNumBatchesPerPhase;
- writeOutConstraintIndicesForRangeOfBatches(m_batchedConstraints,
- m_constraintBatchIds,
- m_numConstraints,
- m_constraintIdPerBatch,
- batchBegin,
- batchEnd);
- }
-};
-
-static void writeOutConstraintIndicesMt(btBatchedConstraints* bc,
- const int* constraintBatchIds,
- int numConstraints,
- int* constraintIdPerBatch,
- int maxNumBatchesPerPhase,
- int numPhases)
-{
- BT_PROFILE("writeOutConstraintIndicesMt");
- bool inParallel = true;
- if (inParallel)
- {
- WriteOutConstraintIndicesLoop loop(bc, constraintBatchIds, numConstraints, constraintIdPerBatch, maxNumBatchesPerPhase);
- btParallelFor(0, numPhases, 1, loop);
- }
- else
- {
- for (int iCon = 0; iCon < numConstraints; ++iCon)
- {
- int iBatch = constraintBatchIds[iCon];
- int iDestCon = constraintIdPerBatch[iBatch];
- constraintIdPerBatch[iBatch] = iDestCon + 1;
- bc->m_constraintIndices[iDestCon] = iCon;
- }
- }
-}
-
-static void writeGrainSizes(btBatchedConstraints* bc)
-{
- typedef btBatchedConstraints::Range Range;
- int numPhases = bc->m_phases.size();
- bc->m_phaseGrainSize.resizeNoInitialize(numPhases);
- int numThreads = btGetTaskScheduler()->getNumThreads();
- for (int iPhase = 0; iPhase < numPhases; ++iPhase)
- {
- const Range& phase = bc->m_phases[iPhase];
- int numBatches = phase.end - phase.begin;
- float grainSize = std::floor((0.25f * numBatches / float(numThreads)) + 0.0f);
- bc->m_phaseGrainSize[iPhase] = btMax(1, int(grainSize));
- }
-}
-
-static void writeOutBatches(btBatchedConstraints* bc,
- const int* constraintBatchIds,
- int numConstraints,
- const btBatchInfo* batches,
- int* batchWork,
- int maxNumBatchesPerPhase,
- int numPhases)
-{
- BT_PROFILE("writeOutBatches");
- typedef btBatchedConstraints::Range Range;
- bc->m_constraintIndices.reserve(numConstraints);
- bc->m_batches.resizeNoInitialize(0);
- bc->m_phases.resizeNoInitialize(0);
-
- //int maxNumBatches = numPhases * maxNumBatchesPerPhase;
- {
- int* constraintIdPerBatch = batchWork; // for each batch, keep an index into the next available slot in the m_constraintIndices array
- int iConstraint = 0;
- for (int iPhase = 0; iPhase < numPhases; ++iPhase)
- {
- int curPhaseBegin = bc->m_batches.size();
- int iBegin = iPhase * maxNumBatchesPerPhase;
- int iEnd = iBegin + maxNumBatchesPerPhase;
- for (int i = iBegin; i < iEnd; ++i)
- {
- const btBatchInfo& batch = batches[i];
- int curBatchBegin = iConstraint;
- constraintIdPerBatch[i] = curBatchBegin; // record the start of each batch in m_constraintIndices array
- int numConstraints = batch.numConstraints;
- iConstraint += numConstraints;
- if (numConstraints > 0)
- {
- bc->m_batches.push_back(Range(curBatchBegin, iConstraint));
- }
- }
- // if any batches were emitted this phase,
- if (bc->m_batches.size() > curPhaseBegin)
- {
- // output phase
- bc->m_phases.push_back(Range(curPhaseBegin, bc->m_batches.size()));
- }
- }
-
- btAssert(iConstraint == numConstraints);
- bc->m_constraintIndices.resizeNoInitialize(numConstraints);
- writeOutConstraintIndicesMt(bc, constraintBatchIds, numConstraints, constraintIdPerBatch, maxNumBatchesPerPhase, numPhases);
- }
- // for each phase
- for (int iPhase = 0; iPhase < bc->m_phases.size(); ++iPhase)
- {
- // sort the batches from largest to smallest (can be helpful to some task schedulers)
- const Range& curBatches = bc->m_phases[iPhase];
- bc->m_batches.quickSortInternal(BatchCompare, curBatches.begin, curBatches.end - 1);
- }
- bc->m_phaseOrder.resize(bc->m_phases.size());
- for (int i = 0; i < bc->m_phases.size(); ++i)
- {
- bc->m_phaseOrder[i] = i;
- }
- writeGrainSizes(bc);
-}
-
-//
-// PreallocatedMemoryHelper -- helper object for allocating a number of chunks of memory in a single contiguous block.
-// It is generally more efficient to do a single larger allocation than many smaller allocations.
-//
-// Example Usage:
-//
-// btVector3* bodyPositions = NULL;
-// btBatchedConstraintInfo* conInfos = NULL;
-// {
-// PreallocatedMemoryHelper<8> memHelper;
-// memHelper.addChunk( (void**) &bodyPositions, sizeof( btVector3 ) * bodies.size() );
-// memHelper.addChunk( (void**) &conInfos, sizeof( btBatchedConstraintInfo ) * numConstraints );
-// void* memPtr = malloc( memHelper.getSizeToAllocate() ); // allocate the memory
-// memHelper.setChunkPointers( memPtr ); // update pointers to chunks
-// }
-template <int N>
-class PreallocatedMemoryHelper
-{
- struct Chunk
- {
- void** ptr;
- size_t size;
- };
- Chunk m_chunks[N];
- int m_numChunks;
-
-public:
- PreallocatedMemoryHelper() { m_numChunks = 0; }
- void addChunk(void** ptr, size_t sz)
- {
- btAssert(m_numChunks < N);
- if (m_numChunks < N)
- {
- Chunk& chunk = m_chunks[m_numChunks];
- chunk.ptr = ptr;
- chunk.size = sz;
- m_numChunks++;
- }
- }
- size_t getSizeToAllocate() const
- {
- size_t totalSize = 0;
- for (int i = 0; i < m_numChunks; ++i)
- {
- totalSize += m_chunks[i].size;
- }
- return totalSize;
- }
- void setChunkPointers(void* mem) const
- {
- size_t totalSize = 0;
- for (int i = 0; i < m_numChunks; ++i)
- {
- const Chunk& chunk = m_chunks[i];
- char* chunkPtr = static_cast<char*>(mem) + totalSize;
- *chunk.ptr = chunkPtr;
- totalSize += chunk.size;
- }
- }
-};
-
-static btVector3 findMaxDynamicConstraintExtent(
- btVector3* bodyPositions,
- bool* bodyDynamicFlags,
- btBatchedConstraintInfo* conInfos,
- int numConstraints,
- int numBodies)
-{
- BT_PROFILE("findMaxDynamicConstraintExtent");
- btVector3 consExtent = btVector3(1, 1, 1) * 0.001;
- for (int iCon = 0; iCon < numConstraints; ++iCon)
- {
- const btBatchedConstraintInfo& con = conInfos[iCon];
- int iBody0 = con.bodyIds[0];
- int iBody1 = con.bodyIds[1];
- btAssert(iBody0 >= 0 && iBody0 < numBodies);
- btAssert(iBody1 >= 0 && iBody1 < numBodies);
- // is it a dynamic constraint?
- if (bodyDynamicFlags[iBody0] && bodyDynamicFlags[iBody1])
- {
- btVector3 delta = bodyPositions[iBody1] - bodyPositions[iBody0];
- consExtent.setMax(delta.absolute());
- }
- }
- return consExtent;
-}
-
-struct btIntVec3
-{
- int m_ints[3];
-
- SIMD_FORCE_INLINE const int& operator[](int i) const { return m_ints[i]; }
- SIMD_FORCE_INLINE int& operator[](int i) { return m_ints[i]; }
-};
-
-struct AssignConstraintsToGridBatchesParams
-{
- bool* bodyDynamicFlags;
- btIntVec3* bodyGridCoords;
- int numBodies;
- btBatchedConstraintInfo* conInfos;
- int* constraintBatchIds;
- btIntVec3 gridChunkDim;
- int maxNumBatchesPerPhase;
- int numPhases;
- int phaseMask;
-
- AssignConstraintsToGridBatchesParams()
- {
- memset(this, 0, sizeof(*this));
- }
-};
-
-static void assignConstraintsToGridBatches(const AssignConstraintsToGridBatchesParams& params, int iConBegin, int iConEnd)
-{
- BT_PROFILE("assignConstraintsToGridBatches");
- // (can be done in parallel)
- for (int iCon = iConBegin; iCon < iConEnd; ++iCon)
- {
- const btBatchedConstraintInfo& con = params.conInfos[iCon];
- int iBody0 = con.bodyIds[0];
- int iBody1 = con.bodyIds[1];
- int iPhase = iCon; //iBody0; // pseudorandom choice to distribute evenly amongst phases
- iPhase &= params.phaseMask;
- int gridCoord[3];
- // is it a dynamic constraint?
- if (params.bodyDynamicFlags[iBody0] && params.bodyDynamicFlags[iBody1])
- {
- const btIntVec3& body0Coords = params.bodyGridCoords[iBody0];
- const btIntVec3& body1Coords = params.bodyGridCoords[iBody1];
- // for each dimension x,y,z,
- for (int i = 0; i < 3; ++i)
- {
- int coordMin = btMin(body0Coords.m_ints[i], body1Coords.m_ints[i]);
- int coordMax = btMax(body0Coords.m_ints[i], body1Coords.m_ints[i]);
- if (coordMin != coordMax)
- {
- btAssert(coordMax == coordMin + 1);
- if ((coordMin & 1) == 0)
- {
- iPhase &= ~(1 << i); // force bit off
- }
- else
- {
- iPhase |= (1 << i); // force bit on
- iPhase &= params.phaseMask;
- }
- }
- gridCoord[i] = coordMin;
- }
- }
- else
- {
- if (!params.bodyDynamicFlags[iBody0])
- {
- iBody0 = con.bodyIds[1];
- }
- btAssert(params.bodyDynamicFlags[iBody0]);
- const btIntVec3& body0Coords = params.bodyGridCoords[iBody0];
- // for each dimension x,y,z,
- for (int i = 0; i < 3; ++i)
- {
- gridCoord[i] = body0Coords.m_ints[i];
- }
- }
- // calculate chunk coordinates
- int chunkCoord[3];
- btIntVec3 gridChunkDim = params.gridChunkDim;
- // for each dimension x,y,z,
- for (int i = 0; i < 3; ++i)
- {
- int coordOffset = (iPhase >> i) & 1;
- chunkCoord[i] = (gridCoord[i] - coordOffset) / 2;
- btClamp(chunkCoord[i], 0, gridChunkDim[i] - 1);
- btAssert(chunkCoord[i] < gridChunkDim[i]);
- }
- int iBatch = iPhase * params.maxNumBatchesPerPhase + chunkCoord[0] + chunkCoord[1] * gridChunkDim[0] + chunkCoord[2] * gridChunkDim[0] * gridChunkDim[1];
- btAssert(iBatch >= 0 && iBatch < params.maxNumBatchesPerPhase * params.numPhases);
- params.constraintBatchIds[iCon] = iBatch;
- }
-}
-
-struct AssignConstraintsToGridBatchesLoop : public btIParallelForBody
-{
- const AssignConstraintsToGridBatchesParams* m_params;
-
- AssignConstraintsToGridBatchesLoop(const AssignConstraintsToGridBatchesParams& params)
- {
- m_params = &params;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- assignConstraintsToGridBatches(*m_params, iBegin, iEnd);
- }
-};
-
-//
-// setupSpatialGridBatchesMt -- generate batches using a uniform 3D grid
-//
-/*
-
-Bodies are treated as 3D points at their center of mass. We only consider dynamic bodies at this stage,
-because only dynamic bodies are mutated when a constraint is solved, thus subject to race conditions.
-
-1. Compute a bounding box around all dynamic bodies
-2. Compute the maximum extent of all dynamic constraints. Each dynamic constraint is treated as a line segment, and we need the size of
- box that will fully enclose any single dynamic constraint
-
-3. Establish the cell size of our grid, the cell size in each dimension must be at least as large as the dynamic constraints max-extent,
- so that no dynamic constraint can span more than 2 cells of our grid on any axis of the grid. The cell size should be adjusted
- larger in order to keep the total number of cells from being excessively high
-
-Key idea: Given that each constraint spans 1 or 2 grid cells in each dimension, we can handle all constraints by processing
- in chunks of 2x2x2 cells with 8 different 1-cell offsets ((0,0,0),(0,0,1),(0,1,0),(0,1,1),(1,0,0)...).
- For each of the 8 offsets, we create a phase, and for each 2x2x2 chunk with dynamic constraints becomes a batch in that phase.
-
-4. Once the grid is established, we can calculate for each constraint which phase and batch it belongs in.
-
-5. Do a merge small batches on the batches of each phase separately, to try to even out the sizes of batches
-
-Optionally, we can "collapse" one dimension of our 3D grid to turn it into a 2D grid, which reduces the number of phases
-to 4. With fewer phases, there are more constraints per phase and this makes it easier to create batches of a useful size.
-*/
-//
-static void setupSpatialGridBatchesMt(
- btBatchedConstraints* batchedConstraints,
- btAlignedObjectArray<char>* scratchMemory,
- btConstraintArray* constraints,
- const btAlignedObjectArray<btSolverBody>& bodies,
- int minBatchSize,
- int maxBatchSize,
- bool use2DGrid)
-{
- BT_PROFILE("setupSpatialGridBatchesMt");
- const int numPhases = 8;
- int numConstraints = constraints->size();
- int numConstraintRows = constraints->size();
-
- const int maxGridChunkCount = 128;
- int allocNumBatchesPerPhase = maxGridChunkCount;
- int minNumBatchesPerPhase = 16;
- int allocNumBatches = allocNumBatchesPerPhase * numPhases;
-
- btVector3* bodyPositions = NULL;
- bool* bodyDynamicFlags = NULL;
- btIntVec3* bodyGridCoords = NULL;
- btBatchInfo* batches = NULL;
- int* batchWork = NULL;
- btBatchedConstraintInfo* conInfos = NULL;
- int* constraintBatchIds = NULL;
- int* constraintRowBatchIds = NULL;
- {
- PreallocatedMemoryHelper<10> memHelper;
- memHelper.addChunk((void**)&bodyPositions, sizeof(btVector3) * bodies.size());
- memHelper.addChunk((void**)&bodyDynamicFlags, sizeof(bool) * bodies.size());
- memHelper.addChunk((void**)&bodyGridCoords, sizeof(btIntVec3) * bodies.size());
- memHelper.addChunk((void**)&batches, sizeof(btBatchInfo) * allocNumBatches);
- memHelper.addChunk((void**)&batchWork, sizeof(int) * allocNumBatches);
- memHelper.addChunk((void**)&conInfos, sizeof(btBatchedConstraintInfo) * numConstraints);
- memHelper.addChunk((void**)&constraintBatchIds, sizeof(int) * numConstraints);
- memHelper.addChunk((void**)&constraintRowBatchIds, sizeof(int) * numConstraintRows);
- size_t scratchSize = memHelper.getSizeToAllocate();
- // if we need to reallocate
- if (static_cast<size_t>(scratchMemory->capacity()) < scratchSize)
- {
- // allocate 6.25% extra to avoid repeated reallocs
- scratchMemory->reserve(scratchSize + scratchSize / 16);
- }
- scratchMemory->resizeNoInitialize(scratchSize);
- char* memPtr = &scratchMemory->at(0);
- memHelper.setChunkPointers(memPtr);
- }
-
- numConstraints = initBatchedConstraintInfo(conInfos, constraints);
-
- // compute bounding box around all dynamic bodies
- // (could be done in parallel)
- btVector3 bboxMin(BT_LARGE_FLOAT, BT_LARGE_FLOAT, BT_LARGE_FLOAT);
- btVector3 bboxMax = -bboxMin;
- //int dynamicBodyCount = 0;
- for (int i = 0; i < bodies.size(); ++i)
- {
- const btSolverBody& body = bodies[i];
- btVector3 bodyPos = body.getWorldTransform().getOrigin();
- bool isDynamic = (body.internalGetInvMass().x() > btScalar(0));
- bodyPositions[i] = bodyPos;
- bodyDynamicFlags[i] = isDynamic;
- if (isDynamic)
- {
- //dynamicBodyCount++;
- bboxMin.setMin(bodyPos);
- bboxMax.setMax(bodyPos);
- }
- }
-
- // find max extent of all dynamic constraints
- // (could be done in parallel)
- btVector3 consExtent = findMaxDynamicConstraintExtent(bodyPositions, bodyDynamicFlags, conInfos, numConstraints, bodies.size());
-
- btVector3 gridExtent = bboxMax - bboxMin;
-
- gridExtent.setMax(btVector3(btScalar(1), btScalar(1), btScalar(1)));
-
- btVector3 gridCellSize = consExtent;
- int gridDim[3];
- gridDim[0] = int(1.0 + gridExtent.x() / gridCellSize.x());
- gridDim[1] = int(1.0 + gridExtent.y() / gridCellSize.y());
- gridDim[2] = int(1.0 + gridExtent.z() / gridCellSize.z());
-
- // if we can collapse an axis, it will cut our number of phases in half which could be more efficient
- int phaseMask = 7;
- bool collapseAxis = use2DGrid;
- if (collapseAxis)
- {
- // pick the smallest axis to collapse, leaving us with the greatest number of cells in our grid
- int iAxisToCollapse = 0;
- int axisDim = gridDim[iAxisToCollapse];
- //for each dimension
- for (int i = 0; i < 3; ++i)
- {
- if (gridDim[i] < axisDim)
- {
- iAxisToCollapse = i;
- axisDim = gridDim[i];
- }
- }
- // collapse it
- gridCellSize[iAxisToCollapse] = gridExtent[iAxisToCollapse] * 2.0f;
- phaseMask &= ~(1 << iAxisToCollapse);
- }
-
- int numGridChunks = 0;
- btIntVec3 gridChunkDim; // each chunk is 2x2x2 group of cells
- while (true)
- {
- gridDim[0] = int(1.0 + gridExtent.x() / gridCellSize.x());
- gridDim[1] = int(1.0 + gridExtent.y() / gridCellSize.y());
- gridDim[2] = int(1.0 + gridExtent.z() / gridCellSize.z());
- gridChunkDim[0] = btMax(1, (gridDim[0] + 0) / 2);
- gridChunkDim[1] = btMax(1, (gridDim[1] + 0) / 2);
- gridChunkDim[2] = btMax(1, (gridDim[2] + 0) / 2);
- numGridChunks = gridChunkDim[0] * gridChunkDim[1] * gridChunkDim[2];
- float nChunks = float(gridChunkDim[0]) * float(gridChunkDim[1]) * float(gridChunkDim[2]); // suceptible to integer overflow
- if (numGridChunks <= maxGridChunkCount && nChunks <= maxGridChunkCount)
- {
- break;
- }
- gridCellSize *= 1.25; // should roughly cut numCells in half
- }
- btAssert(numGridChunks <= maxGridChunkCount);
- int maxNumBatchesPerPhase = numGridChunks;
-
- // for each dynamic body, compute grid coords
- btVector3 invGridCellSize = btVector3(1, 1, 1) / gridCellSize;
- // (can be done in parallel)
- for (int iBody = 0; iBody < bodies.size(); ++iBody)
- {
- btIntVec3& coords = bodyGridCoords[iBody];
- if (bodyDynamicFlags[iBody])
- {
- btVector3 v = (bodyPositions[iBody] - bboxMin) * invGridCellSize;
- coords.m_ints[0] = int(v.x());
- coords.m_ints[1] = int(v.y());
- coords.m_ints[2] = int(v.z());
- btAssert(coords.m_ints[0] >= 0 && coords.m_ints[0] < gridDim[0]);
- btAssert(coords.m_ints[1] >= 0 && coords.m_ints[1] < gridDim[1]);
- btAssert(coords.m_ints[2] >= 0 && coords.m_ints[2] < gridDim[2]);
- }
- else
- {
- coords.m_ints[0] = -1;
- coords.m_ints[1] = -1;
- coords.m_ints[2] = -1;
- }
- }
-
- for (int iPhase = 0; iPhase < numPhases; ++iPhase)
- {
- int batchBegin = iPhase * maxNumBatchesPerPhase;
- int batchEnd = batchBegin + maxNumBatchesPerPhase;
- for (int iBatch = batchBegin; iBatch < batchEnd; ++iBatch)
- {
- btBatchInfo& batch = batches[iBatch];
- batch = btBatchInfo();
- }
- }
-
- {
- AssignConstraintsToGridBatchesParams params;
- params.bodyDynamicFlags = bodyDynamicFlags;
- params.bodyGridCoords = bodyGridCoords;
- params.numBodies = bodies.size();
- params.conInfos = conInfos;
- params.constraintBatchIds = constraintBatchIds;
- params.gridChunkDim = gridChunkDim;
- params.maxNumBatchesPerPhase = maxNumBatchesPerPhase;
- params.numPhases = numPhases;
- params.phaseMask = phaseMask;
- bool inParallel = true;
- if (inParallel)
- {
- AssignConstraintsToGridBatchesLoop loop(params);
- int grainSize = 250;
- btParallelFor(0, numConstraints, grainSize, loop);
- }
- else
- {
- assignConstraintsToGridBatches(params, 0, numConstraints);
- }
- }
- for (int iCon = 0; iCon < numConstraints; ++iCon)
- {
- const btBatchedConstraintInfo& con = conInfos[iCon];
- int iBatch = constraintBatchIds[iCon];
- btBatchInfo& batch = batches[iBatch];
- batch.numConstraints += con.numConstraintRows;
- }
-
- for (int iPhase = 0; iPhase < numPhases; ++iPhase)
- {
- // if phase is legit,
- if (iPhase == (iPhase & phaseMask))
- {
- int iBeginBatch = iPhase * maxNumBatchesPerPhase;
- int iEndBatch = iBeginBatch + maxNumBatchesPerPhase;
- mergeSmallBatches(batches, iBeginBatch, iEndBatch, minBatchSize, maxBatchSize);
- }
- }
- // all constraints have been assigned a batchId
- updateConstraintBatchIdsForMergesMt(constraintBatchIds, numConstraints, batches, maxNumBatchesPerPhase * numPhases);
-
- if (numConstraintRows > numConstraints)
- {
- expandConstraintRowsMt(&constraintRowBatchIds[0], &constraintBatchIds[0], &conInfos[0], numConstraints, numConstraintRows);
- }
- else
- {
- constraintRowBatchIds = constraintBatchIds;
- }
-
- writeOutBatches(batchedConstraints, constraintRowBatchIds, numConstraintRows, batches, batchWork, maxNumBatchesPerPhase, numPhases);
- btAssert(batchedConstraints->validate(constraints, bodies));
-}
-
-static void setupSingleBatch(
- btBatchedConstraints* bc,
- int numConstraints)
-{
- BT_PROFILE("setupSingleBatch");
- typedef btBatchedConstraints::Range Range;
-
- bc->m_constraintIndices.resize(numConstraints);
- for (int i = 0; i < numConstraints; ++i)
- {
- bc->m_constraintIndices[i] = i;
- }
-
- bc->m_batches.resizeNoInitialize(0);
- bc->m_phases.resizeNoInitialize(0);
- bc->m_phaseOrder.resizeNoInitialize(0);
- bc->m_phaseGrainSize.resizeNoInitialize(0);
-
- if (numConstraints > 0)
- {
- bc->m_batches.push_back(Range(0, numConstraints));
- bc->m_phases.push_back(Range(0, 1));
- bc->m_phaseOrder.push_back(0);
- bc->m_phaseGrainSize.push_back(1);
- }
-}
-
-void btBatchedConstraints::setup(
- btConstraintArray* constraints,
- const btAlignedObjectArray<btSolverBody>& bodies,
- BatchingMethod batchingMethod,
- int minBatchSize,
- int maxBatchSize,
- btAlignedObjectArray<char>* scratchMemory)
-{
- if (constraints->size() >= minBatchSize * 4)
- {
- bool use2DGrid = batchingMethod == BATCHING_METHOD_SPATIAL_GRID_2D;
- setupSpatialGridBatchesMt(this, scratchMemory, constraints, bodies, minBatchSize, maxBatchSize, use2DGrid);
- if (s_debugDrawBatches)
- {
- debugDrawAllBatches(this, constraints, bodies);
- }
- }
- else
- {
- setupSingleBatch(this, constraints->size());
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.h
deleted file mode 100644
index 5d982ca370..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btBatchedConstraints.h
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_BATCHED_CONSTRAINTS_H
-#define BT_BATCHED_CONSTRAINTS_H
-
-#include "LinearMath/btThreads.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "BulletDynamics/ConstraintSolver/btSolverBody.h"
-#include "BulletDynamics/ConstraintSolver/btSolverConstraint.h"
-
-class btIDebugDraw;
-
-struct btBatchedConstraints
-{
- enum BatchingMethod
- {
- BATCHING_METHOD_SPATIAL_GRID_2D,
- BATCHING_METHOD_SPATIAL_GRID_3D,
- BATCHING_METHOD_COUNT
- };
- struct Range
- {
- int begin;
- int end;
-
- Range() : begin(0), end(0) {}
- Range(int _beg, int _end) : begin(_beg), end(_end) {}
- };
-
- btAlignedObjectArray<int> m_constraintIndices;
- btAlignedObjectArray<Range> m_batches; // each batch is a range of indices in the m_constraintIndices array
- btAlignedObjectArray<Range> m_phases; // each phase is range of indices in the m_batches array
- btAlignedObjectArray<char> m_phaseGrainSize; // max grain size for each phase
- btAlignedObjectArray<int> m_phaseOrder; // phases can be done in any order, so we can randomize the order here
- btIDebugDraw* m_debugDrawer;
-
- static bool s_debugDrawBatches;
-
- btBatchedConstraints() { m_debugDrawer = NULL; }
- void setup(btConstraintArray* constraints,
- const btAlignedObjectArray<btSolverBody>& bodies,
- BatchingMethod batchingMethod,
- int minBatchSize,
- int maxBatchSize,
- btAlignedObjectArray<char>* scratchMemory);
- bool validate(btConstraintArray* constraints, const btAlignedObjectArray<btSolverBody>& bodies) const;
-};
-
-#endif // BT_BATCHED_CONSTRAINTS_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
deleted file mode 100644
index ac046aa6ea..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp
+++ /dev/null
@@ -1,1116 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-btConeTwistConstraint is Copyright (c) 2007 Starbreeze Studios
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-Written by: Marcus Hennix
-*/
-
-#include "btConeTwistConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btMinMax.h"
-#include <cmath>
-#include <new>
-
-//#define CONETWIST_USE_OBSOLETE_SOLVER true
-#define CONETWIST_USE_OBSOLETE_SOLVER false
-#define CONETWIST_DEF_FIX_THRESH btScalar(.05f)
-
-SIMD_FORCE_INLINE btScalar computeAngularImpulseDenominator(const btVector3& axis, const btMatrix3x3& invInertiaWorld)
-{
- btVector3 vec = axis * invInertiaWorld;
- return axis.dot(vec);
-}
-
-btConeTwistConstraint::btConeTwistConstraint(btRigidBody& rbA, btRigidBody& rbB,
- const btTransform& rbAFrame, const btTransform& rbBFrame)
- : btTypedConstraint(CONETWIST_CONSTRAINT_TYPE, rbA, rbB), m_rbAFrame(rbAFrame), m_rbBFrame(rbBFrame), m_angularOnly(false), m_useSolveConstraintObsolete(CONETWIST_USE_OBSOLETE_SOLVER)
-{
- init();
-}
-
-btConeTwistConstraint::btConeTwistConstraint(btRigidBody& rbA, const btTransform& rbAFrame)
- : btTypedConstraint(CONETWIST_CONSTRAINT_TYPE, rbA), m_rbAFrame(rbAFrame), m_angularOnly(false), m_useSolveConstraintObsolete(CONETWIST_USE_OBSOLETE_SOLVER)
-{
- m_rbBFrame = m_rbAFrame;
- m_rbBFrame.setOrigin(btVector3(0., 0., 0.));
- init();
-}
-
-void btConeTwistConstraint::init()
-{
- m_angularOnly = false;
- m_solveTwistLimit = false;
- m_solveSwingLimit = false;
- m_bMotorEnabled = false;
- m_maxMotorImpulse = btScalar(-1);
-
- setLimit(btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT), btScalar(BT_LARGE_FLOAT));
- m_damping = btScalar(0.01);
- m_fixThresh = CONETWIST_DEF_FIX_THRESH;
- m_flags = 0;
- m_linCFM = btScalar(0.f);
- m_linERP = btScalar(0.7f);
- m_angCFM = btScalar(0.f);
-}
-
-void btConeTwistConstraint::getInfo1(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- info->m_numConstraintRows = 3;
- info->nub = 3;
- calcAngleInfo2(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform(), m_rbA.getInvInertiaTensorWorld(), m_rbB.getInvInertiaTensorWorld());
- if (m_solveSwingLimit)
- {
- info->m_numConstraintRows++;
- info->nub--;
- if ((m_swingSpan1 < m_fixThresh) && (m_swingSpan2 < m_fixThresh))
- {
- info->m_numConstraintRows++;
- info->nub--;
- }
- }
- if (m_solveTwistLimit)
- {
- info->m_numConstraintRows++;
- info->nub--;
- }
- }
-}
-
-void btConeTwistConstraint::getInfo1NonVirtual(btConstraintInfo1* info)
-{
- //always reserve 6 rows: object transform is not available on SPU
- info->m_numConstraintRows = 6;
- info->nub = 0;
-}
-
-void btConeTwistConstraint::getInfo2(btConstraintInfo2* info)
-{
- getInfo2NonVirtual(info, m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform(), m_rbA.getInvInertiaTensorWorld(), m_rbB.getInvInertiaTensorWorld());
-}
-
-void btConeTwistConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB, const btMatrix3x3& invInertiaWorldA, const btMatrix3x3& invInertiaWorldB)
-{
- calcAngleInfo2(transA, transB, invInertiaWorldA, invInertiaWorldB);
-
- btAssert(!m_useSolveConstraintObsolete);
- // set jacobian
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[info->rowskip + 1] = 1;
- info->m_J1linearAxis[2 * info->rowskip + 2] = 1;
- btVector3 a1 = transA.getBasis() * m_rbAFrame.getOrigin();
- {
- btVector3* angular0 = (btVector3*)(info->m_J1angularAxis);
- btVector3* angular1 = (btVector3*)(info->m_J1angularAxis + info->rowskip);
- btVector3* angular2 = (btVector3*)(info->m_J1angularAxis + 2 * info->rowskip);
- btVector3 a1neg = -a1;
- a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[info->rowskip + 1] = -1;
- info->m_J2linearAxis[2 * info->rowskip + 2] = -1;
- btVector3 a2 = transB.getBasis() * m_rbBFrame.getOrigin();
- {
- btVector3* angular0 = (btVector3*)(info->m_J2angularAxis);
- btVector3* angular1 = (btVector3*)(info->m_J2angularAxis + info->rowskip);
- btVector3* angular2 = (btVector3*)(info->m_J2angularAxis + 2 * info->rowskip);
- a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
- // set right hand side
- btScalar linERP = (m_flags & BT_CONETWIST_FLAGS_LIN_ERP) ? m_linERP : info->erp;
- btScalar k = info->fps * linERP;
- int j;
- for (j = 0; j < 3; j++)
- {
- info->m_constraintError[j * info->rowskip] = k * (a2[j] + transB.getOrigin()[j] - a1[j] - transA.getOrigin()[j]);
- info->m_lowerLimit[j * info->rowskip] = -SIMD_INFINITY;
- info->m_upperLimit[j * info->rowskip] = SIMD_INFINITY;
- if (m_flags & BT_CONETWIST_FLAGS_LIN_CFM)
- {
- info->cfm[j * info->rowskip] = m_linCFM;
- }
- }
- int row = 3;
- int srow = row * info->rowskip;
- btVector3 ax1;
- // angular limits
- if (m_solveSwingLimit)
- {
- btScalar* J1 = info->m_J1angularAxis;
- btScalar* J2 = info->m_J2angularAxis;
- if ((m_swingSpan1 < m_fixThresh) && (m_swingSpan2 < m_fixThresh))
- {
- btTransform trA = transA * m_rbAFrame;
- btVector3 p = trA.getBasis().getColumn(1);
- btVector3 q = trA.getBasis().getColumn(2);
- int srow1 = srow + info->rowskip;
- J1[srow + 0] = p[0];
- J1[srow + 1] = p[1];
- J1[srow + 2] = p[2];
- J1[srow1 + 0] = q[0];
- J1[srow1 + 1] = q[1];
- J1[srow1 + 2] = q[2];
- J2[srow + 0] = -p[0];
- J2[srow + 1] = -p[1];
- J2[srow + 2] = -p[2];
- J2[srow1 + 0] = -q[0];
- J2[srow1 + 1] = -q[1];
- J2[srow1 + 2] = -q[2];
- btScalar fact = info->fps * m_relaxationFactor;
- info->m_constraintError[srow] = fact * m_swingAxis.dot(p);
- info->m_constraintError[srow1] = fact * m_swingAxis.dot(q);
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- info->m_lowerLimit[srow1] = -SIMD_INFINITY;
- info->m_upperLimit[srow1] = SIMD_INFINITY;
- srow = srow1 + info->rowskip;
- }
- else
- {
- ax1 = m_swingAxis * m_relaxationFactor * m_relaxationFactor;
- J1[srow + 0] = ax1[0];
- J1[srow + 1] = ax1[1];
- J1[srow + 2] = ax1[2];
- J2[srow + 0] = -ax1[0];
- J2[srow + 1] = -ax1[1];
- J2[srow + 2] = -ax1[2];
- btScalar k = info->fps * m_biasFactor;
-
- info->m_constraintError[srow] = k * m_swingCorrection;
- if (m_flags & BT_CONETWIST_FLAGS_ANG_CFM)
- {
- info->cfm[srow] = m_angCFM;
- }
- // m_swingCorrection is always positive or 0
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = (m_bMotorEnabled && m_maxMotorImpulse >= 0.0f) ? m_maxMotorImpulse : SIMD_INFINITY;
- srow += info->rowskip;
- }
- }
- if (m_solveTwistLimit)
- {
- ax1 = m_twistAxis * m_relaxationFactor * m_relaxationFactor;
- btScalar* J1 = info->m_J1angularAxis;
- btScalar* J2 = info->m_J2angularAxis;
- J1[srow + 0] = ax1[0];
- J1[srow + 1] = ax1[1];
- J1[srow + 2] = ax1[2];
- J2[srow + 0] = -ax1[0];
- J2[srow + 1] = -ax1[1];
- J2[srow + 2] = -ax1[2];
- btScalar k = info->fps * m_biasFactor;
- info->m_constraintError[srow] = k * m_twistCorrection;
- if (m_flags & BT_CONETWIST_FLAGS_ANG_CFM)
- {
- info->cfm[srow] = m_angCFM;
- }
- if (m_twistSpan > 0.0f)
- {
- if (m_twistCorrection > 0.0f)
- {
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else
- {
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- }
- else
- {
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- srow += info->rowskip;
- }
-}
-
-void btConeTwistConstraint::buildJacobian()
-{
- if (m_useSolveConstraintObsolete)
- {
- m_appliedImpulse = btScalar(0.);
- m_accTwistLimitImpulse = btScalar(0.);
- m_accSwingLimitImpulse = btScalar(0.);
- m_accMotorImpulse = btVector3(0., 0., 0.);
-
- if (!m_angularOnly)
- {
- btVector3 pivotAInW = m_rbA.getCenterOfMassTransform() * m_rbAFrame.getOrigin();
- btVector3 pivotBInW = m_rbB.getCenterOfMassTransform() * m_rbBFrame.getOrigin();
- btVector3 relPos = pivotBInW - pivotAInW;
-
- btVector3 normal[3];
- if (relPos.length2() > SIMD_EPSILON)
- {
- normal[0] = relPos.normalized();
- }
- else
- {
- normal[0].setValue(btScalar(1.0), 0, 0);
- }
-
- btPlaneSpace1(normal[0], normal[1], normal[2]);
-
- for (int i = 0; i < 3; i++)
- {
- new (&m_jac[i]) btJacobianEntry(
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- pivotAInW - m_rbA.getCenterOfMassPosition(),
- pivotBInW - m_rbB.getCenterOfMassPosition(),
- normal[i],
- m_rbA.getInvInertiaDiagLocal(),
- m_rbA.getInvMass(),
- m_rbB.getInvInertiaDiagLocal(),
- m_rbB.getInvMass());
- }
- }
-
- calcAngleInfo2(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform(), m_rbA.getInvInertiaTensorWorld(), m_rbB.getInvInertiaTensorWorld());
- }
-}
-
-void btConeTwistConstraint::solveConstraintObsolete(btSolverBody& bodyA, btSolverBody& bodyB, btScalar timeStep)
-{
-#ifndef __SPU__
- if (m_useSolveConstraintObsolete)
- {
- btVector3 pivotAInW = m_rbA.getCenterOfMassTransform() * m_rbAFrame.getOrigin();
- btVector3 pivotBInW = m_rbB.getCenterOfMassTransform() * m_rbBFrame.getOrigin();
-
- btScalar tau = btScalar(0.3);
-
- //linear part
- if (!m_angularOnly)
- {
- btVector3 rel_pos1 = pivotAInW - m_rbA.getCenterOfMassPosition();
- btVector3 rel_pos2 = pivotBInW - m_rbB.getCenterOfMassPosition();
-
- btVector3 vel1;
- bodyA.internalGetVelocityInLocalPointObsolete(rel_pos1, vel1);
- btVector3 vel2;
- bodyB.internalGetVelocityInLocalPointObsolete(rel_pos2, vel2);
- btVector3 vel = vel1 - vel2;
-
- for (int i = 0; i < 3; i++)
- {
- const btVector3& normal = m_jac[i].m_linearJointAxis;
- btScalar jacDiagABInv = btScalar(1.) / m_jac[i].getDiagonal();
-
- btScalar rel_vel;
- rel_vel = normal.dot(vel);
- //positional error (zeroth order error)
- btScalar depth = -(pivotAInW - pivotBInW).dot(normal); //this is the error projected on the normal
- btScalar impulse = depth * tau / timeStep * jacDiagABInv - rel_vel * jacDiagABInv;
- m_appliedImpulse += impulse;
-
- btVector3 ftorqueAxis1 = rel_pos1.cross(normal);
- btVector3 ftorqueAxis2 = rel_pos2.cross(normal);
- bodyA.internalApplyImpulse(normal * m_rbA.getInvMass(), m_rbA.getInvInertiaTensorWorld() * ftorqueAxis1, impulse);
- bodyB.internalApplyImpulse(normal * m_rbB.getInvMass(), m_rbB.getInvInertiaTensorWorld() * ftorqueAxis2, -impulse);
- }
- }
-
- // apply motor
- if (m_bMotorEnabled)
- {
- // compute current and predicted transforms
- btTransform trACur = m_rbA.getCenterOfMassTransform();
- btTransform trBCur = m_rbB.getCenterOfMassTransform();
- btVector3 omegaA;
- bodyA.internalGetAngularVelocity(omegaA);
- btVector3 omegaB;
- bodyB.internalGetAngularVelocity(omegaB);
- btTransform trAPred;
- trAPred.setIdentity();
- btVector3 zerovec(0, 0, 0);
- btTransformUtil::integrateTransform(
- trACur, zerovec, omegaA, timeStep, trAPred);
- btTransform trBPred;
- trBPred.setIdentity();
- btTransformUtil::integrateTransform(
- trBCur, zerovec, omegaB, timeStep, trBPred);
-
- // compute desired transforms in world
- btTransform trPose(m_qTarget);
- btTransform trABDes = m_rbBFrame * trPose * m_rbAFrame.inverse();
- btTransform trADes = trBPred * trABDes;
- btTransform trBDes = trAPred * trABDes.inverse();
-
- // compute desired omegas in world
- btVector3 omegaADes, omegaBDes;
-
- btTransformUtil::calculateVelocity(trACur, trADes, timeStep, zerovec, omegaADes);
- btTransformUtil::calculateVelocity(trBCur, trBDes, timeStep, zerovec, omegaBDes);
-
- // compute delta omegas
- btVector3 dOmegaA = omegaADes - omegaA;
- btVector3 dOmegaB = omegaBDes - omegaB;
-
- // compute weighted avg axis of dOmega (weighting based on inertias)
- btVector3 axisA, axisB;
- btScalar kAxisAInv = 0, kAxisBInv = 0;
-
- if (dOmegaA.length2() > SIMD_EPSILON)
- {
- axisA = dOmegaA.normalized();
- kAxisAInv = getRigidBodyA().computeAngularImpulseDenominator(axisA);
- }
-
- if (dOmegaB.length2() > SIMD_EPSILON)
- {
- axisB = dOmegaB.normalized();
- kAxisBInv = getRigidBodyB().computeAngularImpulseDenominator(axisB);
- }
-
- btVector3 avgAxis = kAxisAInv * axisA + kAxisBInv * axisB;
-
- static bool bDoTorque = true;
- if (bDoTorque && avgAxis.length2() > SIMD_EPSILON)
- {
- avgAxis.normalize();
- kAxisAInv = getRigidBodyA().computeAngularImpulseDenominator(avgAxis);
- kAxisBInv = getRigidBodyB().computeAngularImpulseDenominator(avgAxis);
- btScalar kInvCombined = kAxisAInv + kAxisBInv;
-
- btVector3 impulse = (kAxisAInv * dOmegaA - kAxisBInv * dOmegaB) /
- (kInvCombined * kInvCombined);
-
- if (m_maxMotorImpulse >= 0)
- {
- btScalar fMaxImpulse = m_maxMotorImpulse;
- if (m_bNormalizedMotorStrength)
- fMaxImpulse = fMaxImpulse / kAxisAInv;
-
- btVector3 newUnclampedAccImpulse = m_accMotorImpulse + impulse;
- btScalar newUnclampedMag = newUnclampedAccImpulse.length();
- if (newUnclampedMag > fMaxImpulse)
- {
- newUnclampedAccImpulse.normalize();
- newUnclampedAccImpulse *= fMaxImpulse;
- impulse = newUnclampedAccImpulse - m_accMotorImpulse;
- }
- m_accMotorImpulse += impulse;
- }
-
- btScalar impulseMag = impulse.length();
- btVector3 impulseAxis = impulse / impulseMag;
-
- bodyA.internalApplyImpulse(btVector3(0, 0, 0), m_rbA.getInvInertiaTensorWorld() * impulseAxis, impulseMag);
- bodyB.internalApplyImpulse(btVector3(0, 0, 0), m_rbB.getInvInertiaTensorWorld() * impulseAxis, -impulseMag);
- }
- }
- else if (m_damping > SIMD_EPSILON) // no motor: do a little damping
- {
- btVector3 angVelA;
- bodyA.internalGetAngularVelocity(angVelA);
- btVector3 angVelB;
- bodyB.internalGetAngularVelocity(angVelB);
- btVector3 relVel = angVelB - angVelA;
- if (relVel.length2() > SIMD_EPSILON)
- {
- btVector3 relVelAxis = relVel.normalized();
- btScalar m_kDamping = btScalar(1.) /
- (getRigidBodyA().computeAngularImpulseDenominator(relVelAxis) +
- getRigidBodyB().computeAngularImpulseDenominator(relVelAxis));
- btVector3 impulse = m_damping * m_kDamping * relVel;
-
- btScalar impulseMag = impulse.length();
- btVector3 impulseAxis = impulse / impulseMag;
- bodyA.internalApplyImpulse(btVector3(0, 0, 0), m_rbA.getInvInertiaTensorWorld() * impulseAxis, impulseMag);
- bodyB.internalApplyImpulse(btVector3(0, 0, 0), m_rbB.getInvInertiaTensorWorld() * impulseAxis, -impulseMag);
- }
- }
-
- // joint limits
- {
- ///solve angular part
- btVector3 angVelA;
- bodyA.internalGetAngularVelocity(angVelA);
- btVector3 angVelB;
- bodyB.internalGetAngularVelocity(angVelB);
-
- // solve swing limit
- if (m_solveSwingLimit)
- {
- btScalar amplitude = m_swingLimitRatio * m_swingCorrection * m_biasFactor / timeStep;
- btScalar relSwingVel = (angVelB - angVelA).dot(m_swingAxis);
- if (relSwingVel > 0)
- amplitude += m_swingLimitRatio * relSwingVel * m_relaxationFactor;
- btScalar impulseMag = amplitude * m_kSwing;
-
- // Clamp the accumulated impulse
- btScalar temp = m_accSwingLimitImpulse;
- m_accSwingLimitImpulse = btMax(m_accSwingLimitImpulse + impulseMag, btScalar(0.0));
- impulseMag = m_accSwingLimitImpulse - temp;
-
- btVector3 impulse = m_swingAxis * impulseMag;
-
- // don't let cone response affect twist
- // (this can happen since body A's twist doesn't match body B's AND we use an elliptical cone limit)
- {
- btVector3 impulseTwistCouple = impulse.dot(m_twistAxisA) * m_twistAxisA;
- btVector3 impulseNoTwistCouple = impulse - impulseTwistCouple;
- impulse = impulseNoTwistCouple;
- }
-
- impulseMag = impulse.length();
- btVector3 noTwistSwingAxis = impulse / impulseMag;
-
- bodyA.internalApplyImpulse(btVector3(0, 0, 0), m_rbA.getInvInertiaTensorWorld() * noTwistSwingAxis, impulseMag);
- bodyB.internalApplyImpulse(btVector3(0, 0, 0), m_rbB.getInvInertiaTensorWorld() * noTwistSwingAxis, -impulseMag);
- }
-
- // solve twist limit
- if (m_solveTwistLimit)
- {
- btScalar amplitude = m_twistLimitRatio * m_twistCorrection * m_biasFactor / timeStep;
- btScalar relTwistVel = (angVelB - angVelA).dot(m_twistAxis);
- if (relTwistVel > 0) // only damp when moving towards limit (m_twistAxis flipping is important)
- amplitude += m_twistLimitRatio * relTwistVel * m_relaxationFactor;
- btScalar impulseMag = amplitude * m_kTwist;
-
- // Clamp the accumulated impulse
- btScalar temp = m_accTwistLimitImpulse;
- m_accTwistLimitImpulse = btMax(m_accTwistLimitImpulse + impulseMag, btScalar(0.0));
- impulseMag = m_accTwistLimitImpulse - temp;
-
- // btVector3 impulse = m_twistAxis * impulseMag;
-
- bodyA.internalApplyImpulse(btVector3(0, 0, 0), m_rbA.getInvInertiaTensorWorld() * m_twistAxis, impulseMag);
- bodyB.internalApplyImpulse(btVector3(0, 0, 0), m_rbB.getInvInertiaTensorWorld() * m_twistAxis, -impulseMag);
- }
- }
- }
-#else
- btAssert(0);
-#endif //__SPU__
-}
-
-void btConeTwistConstraint::updateRHS(btScalar timeStep)
-{
- (void)timeStep;
-}
-
-#ifndef __SPU__
-void btConeTwistConstraint::calcAngleInfo()
-{
- m_swingCorrection = btScalar(0.);
- m_twistLimitSign = btScalar(0.);
- m_solveTwistLimit = false;
- m_solveSwingLimit = false;
-
- btVector3 b1Axis1(0, 0, 0), b1Axis2(0, 0, 0), b1Axis3(0, 0, 0);
- btVector3 b2Axis1(0, 0, 0), b2Axis2(0, 0, 0);
-
- b1Axis1 = getRigidBodyA().getCenterOfMassTransform().getBasis() * this->m_rbAFrame.getBasis().getColumn(0);
- b2Axis1 = getRigidBodyB().getCenterOfMassTransform().getBasis() * this->m_rbBFrame.getBasis().getColumn(0);
-
- btScalar swing1 = btScalar(0.), swing2 = btScalar(0.);
-
- btScalar swx = btScalar(0.), swy = btScalar(0.);
- btScalar thresh = btScalar(10.);
- btScalar fact;
-
- // Get Frame into world space
- if (m_swingSpan1 >= btScalar(0.05f))
- {
- b1Axis2 = getRigidBodyA().getCenterOfMassTransform().getBasis() * this->m_rbAFrame.getBasis().getColumn(1);
- swx = b2Axis1.dot(b1Axis1);
- swy = b2Axis1.dot(b1Axis2);
- swing1 = btAtan2Fast(swy, swx);
- fact = (swy * swy + swx * swx) * thresh * thresh;
- fact = fact / (fact + btScalar(1.0));
- swing1 *= fact;
- }
-
- if (m_swingSpan2 >= btScalar(0.05f))
- {
- b1Axis3 = getRigidBodyA().getCenterOfMassTransform().getBasis() * this->m_rbAFrame.getBasis().getColumn(2);
- swx = b2Axis1.dot(b1Axis1);
- swy = b2Axis1.dot(b1Axis3);
- swing2 = btAtan2Fast(swy, swx);
- fact = (swy * swy + swx * swx) * thresh * thresh;
- fact = fact / (fact + btScalar(1.0));
- swing2 *= fact;
- }
-
- btScalar RMaxAngle1Sq = 1.0f / (m_swingSpan1 * m_swingSpan1);
- btScalar RMaxAngle2Sq = 1.0f / (m_swingSpan2 * m_swingSpan2);
- btScalar EllipseAngle = btFabs(swing1 * swing1) * RMaxAngle1Sq + btFabs(swing2 * swing2) * RMaxAngle2Sq;
-
- if (EllipseAngle > 1.0f)
- {
- m_swingCorrection = EllipseAngle - 1.0f;
- m_solveSwingLimit = true;
- // Calculate necessary axis & factors
- m_swingAxis = b2Axis1.cross(b1Axis2 * b2Axis1.dot(b1Axis2) + b1Axis3 * b2Axis1.dot(b1Axis3));
- m_swingAxis.normalize();
- btScalar swingAxisSign = (b2Axis1.dot(b1Axis1) >= 0.0f) ? 1.0f : -1.0f;
- m_swingAxis *= swingAxisSign;
- }
-
- // Twist limits
- if (m_twistSpan >= btScalar(0.))
- {
- btVector3 b2Axis2 = getRigidBodyB().getCenterOfMassTransform().getBasis() * this->m_rbBFrame.getBasis().getColumn(1);
- btQuaternion rotationArc = shortestArcQuat(b2Axis1, b1Axis1);
- btVector3 TwistRef = quatRotate(rotationArc, b2Axis2);
- btScalar twist = btAtan2Fast(TwistRef.dot(b1Axis3), TwistRef.dot(b1Axis2));
- m_twistAngle = twist;
-
- // btScalar lockedFreeFactor = (m_twistSpan > btScalar(0.05f)) ? m_limitSoftness : btScalar(0.);
- btScalar lockedFreeFactor = (m_twistSpan > btScalar(0.05f)) ? btScalar(1.0f) : btScalar(0.);
- if (twist <= -m_twistSpan * lockedFreeFactor)
- {
- m_twistCorrection = -(twist + m_twistSpan);
- m_solveTwistLimit = true;
- m_twistAxis = (b2Axis1 + b1Axis1) * 0.5f;
- m_twistAxis.normalize();
- m_twistAxis *= -1.0f;
- }
- else if (twist > m_twistSpan * lockedFreeFactor)
- {
- m_twistCorrection = (twist - m_twistSpan);
- m_solveTwistLimit = true;
- m_twistAxis = (b2Axis1 + b1Axis1) * 0.5f;
- m_twistAxis.normalize();
- }
- }
-}
-#endif //__SPU__
-
-static btVector3 vTwist(1, 0, 0); // twist axis in constraint's space
-
-void btConeTwistConstraint::calcAngleInfo2(const btTransform& transA, const btTransform& transB, const btMatrix3x3& invInertiaWorldA, const btMatrix3x3& invInertiaWorldB)
-{
- m_swingCorrection = btScalar(0.);
- m_twistLimitSign = btScalar(0.);
- m_solveTwistLimit = false;
- m_solveSwingLimit = false;
- // compute rotation of A wrt B (in constraint space)
- if (m_bMotorEnabled && (!m_useSolveConstraintObsolete))
- { // it is assumed that setMotorTarget() was alredy called
- // and motor target m_qTarget is within constraint limits
- // TODO : split rotation to pure swing and pure twist
- // compute desired transforms in world
- btTransform trPose(m_qTarget);
- btTransform trA = transA * m_rbAFrame;
- btTransform trB = transB * m_rbBFrame;
- btTransform trDeltaAB = trB * trPose * trA.inverse();
- btQuaternion qDeltaAB = trDeltaAB.getRotation();
- btVector3 swingAxis = btVector3(qDeltaAB.x(), qDeltaAB.y(), qDeltaAB.z());
- btScalar swingAxisLen2 = swingAxis.length2();
- if (btFuzzyZero(swingAxisLen2))
- {
- return;
- }
- m_swingAxis = swingAxis;
- m_swingAxis.normalize();
- m_swingCorrection = qDeltaAB.getAngle();
- if (!btFuzzyZero(m_swingCorrection))
- {
- m_solveSwingLimit = true;
- }
- return;
- }
-
- {
- // compute rotation of A wrt B (in constraint space)
- btQuaternion qA = transA.getRotation() * m_rbAFrame.getRotation();
- btQuaternion qB = transB.getRotation() * m_rbBFrame.getRotation();
- btQuaternion qAB = qB.inverse() * qA;
- // split rotation into cone and twist
- // (all this is done from B's perspective. Maybe I should be averaging axes...)
- btVector3 vConeNoTwist = quatRotate(qAB, vTwist);
- vConeNoTwist.normalize();
- btQuaternion qABCone = shortestArcQuat(vTwist, vConeNoTwist);
- qABCone.normalize();
- btQuaternion qABTwist = qABCone.inverse() * qAB;
- qABTwist.normalize();
-
- if (m_swingSpan1 >= m_fixThresh && m_swingSpan2 >= m_fixThresh)
- {
- btScalar swingAngle, swingLimit = 0;
- btVector3 swingAxis;
- computeConeLimitInfo(qABCone, swingAngle, swingAxis, swingLimit);
-
- if (swingAngle > swingLimit * m_limitSoftness)
- {
- m_solveSwingLimit = true;
-
- // compute limit ratio: 0->1, where
- // 0 == beginning of soft limit
- // 1 == hard/real limit
- m_swingLimitRatio = 1.f;
- if (swingAngle < swingLimit && m_limitSoftness < 1.f - SIMD_EPSILON)
- {
- m_swingLimitRatio = (swingAngle - swingLimit * m_limitSoftness) /
- (swingLimit - swingLimit * m_limitSoftness);
- }
-
- // swing correction tries to get back to soft limit
- m_swingCorrection = swingAngle - (swingLimit * m_limitSoftness);
-
- // adjustment of swing axis (based on ellipse normal)
- adjustSwingAxisToUseEllipseNormal(swingAxis);
-
- // Calculate necessary axis & factors
- m_swingAxis = quatRotate(qB, -swingAxis);
-
- m_twistAxisA.setValue(0, 0, 0);
-
- m_kSwing = btScalar(1.) /
- (computeAngularImpulseDenominator(m_swingAxis, invInertiaWorldA) +
- computeAngularImpulseDenominator(m_swingAxis, invInertiaWorldB));
- }
- }
- else
- {
- // you haven't set any limits;
- // or you're trying to set at least one of the swing limits too small. (if so, do you really want a conetwist constraint?)
- // anyway, we have either hinge or fixed joint
- btVector3 ivA = transA.getBasis() * m_rbAFrame.getBasis().getColumn(0);
- btVector3 jvA = transA.getBasis() * m_rbAFrame.getBasis().getColumn(1);
- btVector3 kvA = transA.getBasis() * m_rbAFrame.getBasis().getColumn(2);
- btVector3 ivB = transB.getBasis() * m_rbBFrame.getBasis().getColumn(0);
- btVector3 target;
- btScalar x = ivB.dot(ivA);
- btScalar y = ivB.dot(jvA);
- btScalar z = ivB.dot(kvA);
- if ((m_swingSpan1 < m_fixThresh) && (m_swingSpan2 < m_fixThresh))
- { // fixed. We'll need to add one more row to constraint
- if ((!btFuzzyZero(y)) || (!(btFuzzyZero(z))))
- {
- m_solveSwingLimit = true;
- m_swingAxis = -ivB.cross(ivA);
- }
- }
- else
- {
- if (m_swingSpan1 < m_fixThresh)
- { // hinge around Y axis
- // if(!(btFuzzyZero(y)))
- if ((!(btFuzzyZero(x))) || (!(btFuzzyZero(z))))
- {
- m_solveSwingLimit = true;
- if (m_swingSpan2 >= m_fixThresh)
- {
- y = btScalar(0.f);
- btScalar span2 = btAtan2(z, x);
- if (span2 > m_swingSpan2)
- {
- x = btCos(m_swingSpan2);
- z = btSin(m_swingSpan2);
- }
- else if (span2 < -m_swingSpan2)
- {
- x = btCos(m_swingSpan2);
- z = -btSin(m_swingSpan2);
- }
- }
- }
- }
- else
- { // hinge around Z axis
- // if(!btFuzzyZero(z))
- if ((!(btFuzzyZero(x))) || (!(btFuzzyZero(y))))
- {
- m_solveSwingLimit = true;
- if (m_swingSpan1 >= m_fixThresh)
- {
- z = btScalar(0.f);
- btScalar span1 = btAtan2(y, x);
- if (span1 > m_swingSpan1)
- {
- x = btCos(m_swingSpan1);
- y = btSin(m_swingSpan1);
- }
- else if (span1 < -m_swingSpan1)
- {
- x = btCos(m_swingSpan1);
- y = -btSin(m_swingSpan1);
- }
- }
- }
- }
- target[0] = x * ivA[0] + y * jvA[0] + z * kvA[0];
- target[1] = x * ivA[1] + y * jvA[1] + z * kvA[1];
- target[2] = x * ivA[2] + y * jvA[2] + z * kvA[2];
- target.normalize();
- m_swingAxis = -ivB.cross(target);
- m_swingCorrection = m_swingAxis.length();
-
- if (!btFuzzyZero(m_swingCorrection))
- m_swingAxis.normalize();
- }
- }
-
- if (m_twistSpan >= btScalar(0.f))
- {
- btVector3 twistAxis;
- computeTwistLimitInfo(qABTwist, m_twistAngle, twistAxis);
-
- if (m_twistAngle > m_twistSpan * m_limitSoftness)
- {
- m_solveTwistLimit = true;
-
- m_twistLimitRatio = 1.f;
- if (m_twistAngle < m_twistSpan && m_limitSoftness < 1.f - SIMD_EPSILON)
- {
- m_twistLimitRatio = (m_twistAngle - m_twistSpan * m_limitSoftness) /
- (m_twistSpan - m_twistSpan * m_limitSoftness);
- }
-
- // twist correction tries to get back to soft limit
- m_twistCorrection = m_twistAngle - (m_twistSpan * m_limitSoftness);
-
- m_twistAxis = quatRotate(qB, -twistAxis);
-
- m_kTwist = btScalar(1.) /
- (computeAngularImpulseDenominator(m_twistAxis, invInertiaWorldA) +
- computeAngularImpulseDenominator(m_twistAxis, invInertiaWorldB));
- }
-
- if (m_solveSwingLimit)
- m_twistAxisA = quatRotate(qA, -twistAxis);
- }
- else
- {
- m_twistAngle = btScalar(0.f);
- }
- }
-}
-
-// given a cone rotation in constraint space, (pre: twist must already be removed)
-// this method computes its corresponding swing angle and axis.
-// more interestingly, it computes the cone/swing limit (angle) for this cone "pose".
-void btConeTwistConstraint::computeConeLimitInfo(const btQuaternion& qCone,
- btScalar& swingAngle, // out
- btVector3& vSwingAxis, // out
- btScalar& swingLimit) // out
-{
- swingAngle = qCone.getAngle();
- if (swingAngle > SIMD_EPSILON)
- {
- vSwingAxis = btVector3(qCone.x(), qCone.y(), qCone.z());
- vSwingAxis.normalize();
-#if 0
- // non-zero twist?! this should never happen.
- btAssert(fabs(vSwingAxis.x()) <= SIMD_EPSILON));
-#endif
-
- // Compute limit for given swing. tricky:
- // Given a swing axis, we're looking for the intersection with the bounding cone ellipse.
- // (Since we're dealing with angles, this ellipse is embedded on the surface of a sphere.)
-
- // For starters, compute the direction from center to surface of ellipse.
- // This is just the perpendicular (ie. rotate 2D vector by PI/2) of the swing axis.
- // (vSwingAxis is the cone rotation (in z,y); change vars and rotate to (x,y) coords.)
- btScalar xEllipse = vSwingAxis.y();
- btScalar yEllipse = -vSwingAxis.z();
-
- // Now, we use the slope of the vector (using x/yEllipse) and find the length
- // of the line that intersects the ellipse:
- // x^2 y^2
- // --- + --- = 1, where a and b are semi-major axes 2 and 1 respectively (ie. the limits)
- // a^2 b^2
- // Do the math and it should be clear.
-
- swingLimit = m_swingSpan1; // if xEllipse == 0, we have a pure vSwingAxis.z rotation: just use swingspan1
- if (fabs(xEllipse) > SIMD_EPSILON)
- {
- btScalar surfaceSlope2 = (yEllipse * yEllipse) / (xEllipse * xEllipse);
- btScalar norm = 1 / (m_swingSpan2 * m_swingSpan2);
- norm += surfaceSlope2 / (m_swingSpan1 * m_swingSpan1);
- btScalar swingLimit2 = (1 + surfaceSlope2) / norm;
- swingLimit = std::sqrt(swingLimit2);
- }
-
- // test!
- /*swingLimit = m_swingSpan2;
- if (fabs(vSwingAxis.z()) > SIMD_EPSILON)
- {
- btScalar mag_2 = m_swingSpan1*m_swingSpan1 + m_swingSpan2*m_swingSpan2;
- btScalar sinphi = m_swingSpan2 / sqrt(mag_2);
- btScalar phi = asin(sinphi);
- btScalar theta = atan2(fabs(vSwingAxis.y()),fabs(vSwingAxis.z()));
- btScalar alpha = 3.14159f - theta - phi;
- btScalar sinalpha = sin(alpha);
- swingLimit = m_swingSpan1 * sinphi/sinalpha;
- }*/
- }
- else if (swingAngle < 0)
- {
- // this should never happen!
-#if 0
- btAssert(0);
-#endif
- }
-}
-
-btVector3 btConeTwistConstraint::GetPointForAngle(btScalar fAngleInRadians, btScalar fLength) const
-{
- // compute x/y in ellipse using cone angle (0 -> 2*PI along surface of cone)
- btScalar xEllipse = btCos(fAngleInRadians);
- btScalar yEllipse = btSin(fAngleInRadians);
-
- // Use the slope of the vector (using x/yEllipse) and find the length
- // of the line that intersects the ellipse:
- // x^2 y^2
- // --- + --- = 1, where a and b are semi-major axes 2 and 1 respectively (ie. the limits)
- // a^2 b^2
- // Do the math and it should be clear.
-
- btScalar swingLimit = m_swingSpan1; // if xEllipse == 0, just use axis b (1)
- if (fabs(xEllipse) > SIMD_EPSILON)
- {
- btScalar surfaceSlope2 = (yEllipse * yEllipse) / (xEllipse * xEllipse);
- btScalar norm = 1 / (m_swingSpan2 * m_swingSpan2);
- norm += surfaceSlope2 / (m_swingSpan1 * m_swingSpan1);
- btScalar swingLimit2 = (1 + surfaceSlope2) / norm;
- swingLimit = std::sqrt(swingLimit2);
- }
-
- // convert into point in constraint space:
- // note: twist is x-axis, swing 1 and 2 are along the z and y axes respectively
- btVector3 vSwingAxis(0, xEllipse, -yEllipse);
- btQuaternion qSwing(vSwingAxis, swingLimit);
- btVector3 vPointInConstraintSpace(fLength, 0, 0);
- return quatRotate(qSwing, vPointInConstraintSpace);
-}
-
-// given a twist rotation in constraint space, (pre: cone must already be removed)
-// this method computes its corresponding angle and axis.
-void btConeTwistConstraint::computeTwistLimitInfo(const btQuaternion& qTwist,
- btScalar& twistAngle, // out
- btVector3& vTwistAxis) // out
-{
- btQuaternion qMinTwist = qTwist;
- twistAngle = qTwist.getAngle();
-
- if (twistAngle > SIMD_PI) // long way around. flip quat and recalculate.
- {
- qMinTwist = -(qTwist);
- twistAngle = qMinTwist.getAngle();
- }
- if (twistAngle < 0)
- {
- // this should never happen
-#if 0
- btAssert(0);
-#endif
- }
-
- vTwistAxis = btVector3(qMinTwist.x(), qMinTwist.y(), qMinTwist.z());
- if (twistAngle > SIMD_EPSILON)
- vTwistAxis.normalize();
-}
-
-void btConeTwistConstraint::adjustSwingAxisToUseEllipseNormal(btVector3& vSwingAxis) const
-{
- // the swing axis is computed as the "twist-free" cone rotation,
- // but the cone limit is not circular, but elliptical (if swingspan1 != swingspan2).
- // so, if we're outside the limits, the closest way back inside the cone isn't
- // along the vector back to the center. better (and more stable) to use the ellipse normal.
-
- // convert swing axis to direction from center to surface of ellipse
- // (ie. rotate 2D vector by PI/2)
- btScalar y = -vSwingAxis.z();
- btScalar z = vSwingAxis.y();
-
- // do the math...
- if (fabs(z) > SIMD_EPSILON) // avoid division by 0. and we don't need an update if z == 0.
- {
- // compute gradient/normal of ellipse surface at current "point"
- btScalar grad = y / z;
- grad *= m_swingSpan2 / m_swingSpan1;
-
- // adjust y/z to represent normal at point (instead of vector to point)
- if (y > 0)
- y = fabs(grad * z);
- else
- y = -fabs(grad * z);
-
- // convert ellipse direction back to swing axis
- vSwingAxis.setZ(-y);
- vSwingAxis.setY(z);
- vSwingAxis.normalize();
- }
-}
-
-void btConeTwistConstraint::setMotorTarget(const btQuaternion& q)
-{
- //btTransform trACur = m_rbA.getCenterOfMassTransform();
- //btTransform trBCur = m_rbB.getCenterOfMassTransform();
- // btTransform trABCur = trBCur.inverse() * trACur;
- // btQuaternion qABCur = trABCur.getRotation();
- // btTransform trConstraintCur = (trBCur * m_rbBFrame).inverse() * (trACur * m_rbAFrame);
- //btQuaternion qConstraintCur = trConstraintCur.getRotation();
-
- btQuaternion qConstraint = m_rbBFrame.getRotation().inverse() * q * m_rbAFrame.getRotation();
- setMotorTargetInConstraintSpace(qConstraint);
-}
-
-void btConeTwistConstraint::setMotorTargetInConstraintSpace(const btQuaternion& q)
-{
- m_qTarget = q;
-
- // clamp motor target to within limits
- {
- btScalar softness = 1.f; //m_limitSoftness;
-
- // split into twist and cone
- btVector3 vTwisted = quatRotate(m_qTarget, vTwist);
- btQuaternion qTargetCone = shortestArcQuat(vTwist, vTwisted);
- qTargetCone.normalize();
- btQuaternion qTargetTwist = qTargetCone.inverse() * m_qTarget;
- qTargetTwist.normalize();
-
- // clamp cone
- if (m_swingSpan1 >= btScalar(0.05f) && m_swingSpan2 >= btScalar(0.05f))
- {
- btScalar swingAngle, swingLimit;
- btVector3 swingAxis;
- computeConeLimitInfo(qTargetCone, swingAngle, swingAxis, swingLimit);
-
- if (fabs(swingAngle) > SIMD_EPSILON)
- {
- if (swingAngle > swingLimit * softness)
- swingAngle = swingLimit * softness;
- else if (swingAngle < -swingLimit * softness)
- swingAngle = -swingLimit * softness;
- qTargetCone = btQuaternion(swingAxis, swingAngle);
- }
- }
-
- // clamp twist
- if (m_twistSpan >= btScalar(0.05f))
- {
- btScalar twistAngle;
- btVector3 twistAxis;
- computeTwistLimitInfo(qTargetTwist, twistAngle, twistAxis);
-
- if (fabs(twistAngle) > SIMD_EPSILON)
- {
- // eddy todo: limitSoftness used here???
- if (twistAngle > m_twistSpan * softness)
- twistAngle = m_twistSpan * softness;
- else if (twistAngle < -m_twistSpan * softness)
- twistAngle = -m_twistSpan * softness;
- qTargetTwist = btQuaternion(twistAxis, twistAngle);
- }
- }
-
- m_qTarget = qTargetCone * qTargetTwist;
- }
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void btConeTwistConstraint::setParam(int num, btScalar value, int axis)
-{
- switch (num)
- {
- case BT_CONSTRAINT_ERP:
- case BT_CONSTRAINT_STOP_ERP:
- if ((axis >= 0) && (axis < 3))
- {
- m_linERP = value;
- m_flags |= BT_CONETWIST_FLAGS_LIN_ERP;
- }
- else
- {
- m_biasFactor = value;
- }
- break;
- case BT_CONSTRAINT_CFM:
- case BT_CONSTRAINT_STOP_CFM:
- if ((axis >= 0) && (axis < 3))
- {
- m_linCFM = value;
- m_flags |= BT_CONETWIST_FLAGS_LIN_CFM;
- }
- else
- {
- m_angCFM = value;
- m_flags |= BT_CONETWIST_FLAGS_ANG_CFM;
- }
- break;
- default:
- btAssertConstrParams(0);
- break;
- }
-}
-
-///return the local value of parameter
-btScalar btConeTwistConstraint::getParam(int num, int axis) const
-{
- btScalar retVal = 0;
- switch (num)
- {
- case BT_CONSTRAINT_ERP:
- case BT_CONSTRAINT_STOP_ERP:
- if ((axis >= 0) && (axis < 3))
- {
- btAssertConstrParams(m_flags & BT_CONETWIST_FLAGS_LIN_ERP);
- retVal = m_linERP;
- }
- else if ((axis >= 3) && (axis < 6))
- {
- retVal = m_biasFactor;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- case BT_CONSTRAINT_CFM:
- case BT_CONSTRAINT_STOP_CFM:
- if ((axis >= 0) && (axis < 3))
- {
- btAssertConstrParams(m_flags & BT_CONETWIST_FLAGS_LIN_CFM);
- retVal = m_linCFM;
- }
- else if ((axis >= 3) && (axis < 6))
- {
- btAssertConstrParams(m_flags & BT_CONETWIST_FLAGS_ANG_CFM);
- retVal = m_angCFM;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- default:
- btAssertConstrParams(0);
- }
- return retVal;
-}
-
-void btConeTwistConstraint::setFrames(const btTransform& frameA, const btTransform& frameB)
-{
- m_rbAFrame = frameA;
- m_rbBFrame = frameB;
- buildJacobian();
- //calculateTransforms();
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h
deleted file mode 100644
index 64f44df1cb..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConeTwistConstraint.h
+++ /dev/null
@@ -1,423 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-btConeTwistConstraint is Copyright (c) 2007 Starbreeze Studios
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-
-Written by: Marcus Hennix
-*/
-
-/*
-Overview:
-
-btConeTwistConstraint can be used to simulate ragdoll joints (upper arm, leg etc).
-It is a fixed translation, 3 degree-of-freedom (DOF) rotational "joint".
-It divides the 3 rotational DOFs into swing (movement within a cone) and twist.
-Swing is divided into swing1 and swing2 which can have different limits, giving an elliptical shape.
-(Note: the cone's base isn't flat, so this ellipse is "embedded" on the surface of a sphere.)
-
-In the contraint's frame of reference:
-twist is along the x-axis,
-and swing 1 and 2 are along the z and y axes respectively.
-*/
-
-#ifndef BT_CONETWISTCONSTRAINT_H
-#define BT_CONETWISTCONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btConeTwistConstraintData2 btConeTwistConstraintDoubleData
-#define btConeTwistConstraintDataName "btConeTwistConstraintDoubleData"
-#else
-#define btConeTwistConstraintData2 btConeTwistConstraintData
-#define btConeTwistConstraintDataName "btConeTwistConstraintData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-class btRigidBody;
-
-enum btConeTwistFlags
-{
- BT_CONETWIST_FLAGS_LIN_CFM = 1,
- BT_CONETWIST_FLAGS_LIN_ERP = 2,
- BT_CONETWIST_FLAGS_ANG_CFM = 4
-};
-
-///btConeTwistConstraint can be used to simulate ragdoll joints (upper arm, leg etc)
-ATTRIBUTE_ALIGNED16(class)
-btConeTwistConstraint : public btTypedConstraint
-{
-#ifdef IN_PARALLELL_SOLVER
-public:
-#endif
- btJacobianEntry m_jac[3]; //3 orthogonal linear constraints
-
- btTransform m_rbAFrame;
- btTransform m_rbBFrame;
-
- btScalar m_limitSoftness;
- btScalar m_biasFactor;
- btScalar m_relaxationFactor;
-
- btScalar m_damping;
-
- btScalar m_swingSpan1;
- btScalar m_swingSpan2;
- btScalar m_twistSpan;
-
- btScalar m_fixThresh;
-
- btVector3 m_swingAxis;
- btVector3 m_twistAxis;
-
- btScalar m_kSwing;
- btScalar m_kTwist;
-
- btScalar m_twistLimitSign;
- btScalar m_swingCorrection;
- btScalar m_twistCorrection;
-
- btScalar m_twistAngle;
-
- btScalar m_accSwingLimitImpulse;
- btScalar m_accTwistLimitImpulse;
-
- bool m_angularOnly;
- bool m_solveTwistLimit;
- bool m_solveSwingLimit;
-
- bool m_useSolveConstraintObsolete;
-
- // not yet used...
- btScalar m_swingLimitRatio;
- btScalar m_twistLimitRatio;
- btVector3 m_twistAxisA;
-
- // motor
- bool m_bMotorEnabled;
- bool m_bNormalizedMotorStrength;
- btQuaternion m_qTarget;
- btScalar m_maxMotorImpulse;
- btVector3 m_accMotorImpulse;
-
- // parameters
- int m_flags;
- btScalar m_linCFM;
- btScalar m_linERP;
- btScalar m_angCFM;
-
-protected:
- void init();
-
- void computeConeLimitInfo(const btQuaternion& qCone, // in
- btScalar& swingAngle, btVector3& vSwingAxis, btScalar& swingLimit); // all outs
-
- void computeTwistLimitInfo(const btQuaternion& qTwist, // in
- btScalar& twistAngle, btVector3& vTwistAxis); // all outs
-
- void adjustSwingAxisToUseEllipseNormal(btVector3 & vSwingAxis) const;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btConeTwistConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& rbAFrame, const btTransform& rbBFrame);
-
- btConeTwistConstraint(btRigidBody & rbA, const btTransform& rbAFrame);
-
- virtual void buildJacobian();
-
- virtual void getInfo1(btConstraintInfo1 * info);
-
- void getInfo1NonVirtual(btConstraintInfo1 * info);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btMatrix3x3& invInertiaWorldA, const btMatrix3x3& invInertiaWorldB);
-
- virtual void solveConstraintObsolete(btSolverBody & bodyA, btSolverBody & bodyB, btScalar timeStep);
-
- void updateRHS(btScalar timeStep);
-
- const btRigidBody& getRigidBodyA() const
- {
- return m_rbA;
- }
- const btRigidBody& getRigidBodyB() const
- {
- return m_rbB;
- }
-
- void setAngularOnly(bool angularOnly)
- {
- m_angularOnly = angularOnly;
- }
-
- bool getAngularOnly() const
- {
- return m_angularOnly;
- }
-
- void setLimit(int limitIndex, btScalar limitValue)
- {
- switch (limitIndex)
- {
- case 3:
- {
- m_twistSpan = limitValue;
- break;
- }
- case 4:
- {
- m_swingSpan2 = limitValue;
- break;
- }
- case 5:
- {
- m_swingSpan1 = limitValue;
- break;
- }
- default:
- {
- }
- };
- }
-
- btScalar getLimit(int limitIndex) const
- {
- switch (limitIndex)
- {
- case 3:
- {
- return m_twistSpan;
- break;
- }
- case 4:
- {
- return m_swingSpan2;
- break;
- }
- case 5:
- {
- return m_swingSpan1;
- break;
- }
- default:
- {
- btAssert(0 && "Invalid limitIndex specified for btConeTwistConstraint");
- return 0.0;
- }
- };
- }
-
- // setLimit(), a few notes:
- // _softness:
- // 0->1, recommend ~0.8->1.
- // describes % of limits where movement is free.
- // beyond this softness %, the limit is gradually enforced until the "hard" (1.0) limit is reached.
- // _biasFactor:
- // 0->1?, recommend 0.3 +/-0.3 or so.
- // strength with which constraint resists zeroth order (angular, not angular velocity) limit violation.
- // __relaxationFactor:
- // 0->1, recommend to stay near 1.
- // the lower the value, the less the constraint will fight velocities which violate the angular limits.
- void setLimit(btScalar _swingSpan1, btScalar _swingSpan2, btScalar _twistSpan, btScalar _softness = 1.f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f)
- {
- m_swingSpan1 = _swingSpan1;
- m_swingSpan2 = _swingSpan2;
- m_twistSpan = _twistSpan;
-
- m_limitSoftness = _softness;
- m_biasFactor = _biasFactor;
- m_relaxationFactor = _relaxationFactor;
- }
-
- const btTransform& getAFrame() const { return m_rbAFrame; };
- const btTransform& getBFrame() const { return m_rbBFrame; };
-
- inline int getSolveTwistLimit()
- {
- return m_solveTwistLimit;
- }
-
- inline int getSolveSwingLimit()
- {
- return m_solveSwingLimit;
- }
-
- inline btScalar getTwistLimitSign()
- {
- return m_twistLimitSign;
- }
-
- void calcAngleInfo();
- void calcAngleInfo2(const btTransform& transA, const btTransform& transB, const btMatrix3x3& invInertiaWorldA, const btMatrix3x3& invInertiaWorldB);
-
- inline btScalar getSwingSpan1() const
- {
- return m_swingSpan1;
- }
- inline btScalar getSwingSpan2() const
- {
- return m_swingSpan2;
- }
- inline btScalar getTwistSpan() const
- {
- return m_twistSpan;
- }
- inline btScalar getLimitSoftness() const
- {
- return m_limitSoftness;
- }
- inline btScalar getBiasFactor() const
- {
- return m_biasFactor;
- }
- inline btScalar getRelaxationFactor() const
- {
- return m_relaxationFactor;
- }
- inline btScalar getTwistAngle() const
- {
- return m_twistAngle;
- }
- bool isPastSwingLimit() { return m_solveSwingLimit; }
-
- btScalar getDamping() const { return m_damping; }
- void setDamping(btScalar damping) { m_damping = damping; }
-
- void enableMotor(bool b) { m_bMotorEnabled = b; }
- bool isMotorEnabled() const { return m_bMotorEnabled; }
- btScalar getMaxMotorImpulse() const { return m_maxMotorImpulse; }
- bool isMaxMotorImpulseNormalized() const { return m_bNormalizedMotorStrength; }
- void setMaxMotorImpulse(btScalar maxMotorImpulse)
- {
- m_maxMotorImpulse = maxMotorImpulse;
- m_bNormalizedMotorStrength = false;
- }
- void setMaxMotorImpulseNormalized(btScalar maxMotorImpulse)
- {
- m_maxMotorImpulse = maxMotorImpulse;
- m_bNormalizedMotorStrength = true;
- }
-
- btScalar getFixThresh() { return m_fixThresh; }
- void setFixThresh(btScalar fixThresh) { m_fixThresh = fixThresh; }
-
- // setMotorTarget:
- // q: the desired rotation of bodyA wrt bodyB.
- // note: if q violates the joint limits, the internal target is clamped to avoid conflicting impulses (very bad for stability)
- // note: don't forget to enableMotor()
- void setMotorTarget(const btQuaternion& q);
- const btQuaternion& getMotorTarget() const { return m_qTarget; }
-
- // same as above, but q is the desired rotation of frameA wrt frameB in constraint space
- void setMotorTargetInConstraintSpace(const btQuaternion& q);
-
- btVector3 GetPointForAngle(btScalar fAngleInRadians, btScalar fLength) const;
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1);
-
- virtual void setFrames(const btTransform& frameA, const btTransform& frameB);
-
- const btTransform& getFrameOffsetA() const
- {
- return m_rbAFrame;
- }
-
- const btTransform& getFrameOffsetB() const
- {
- return m_rbBFrame;
- }
-
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const;
-
- int getFlags() const
- {
- return m_flags;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-struct btConeTwistConstraintDoubleData
-{
- btTypedConstraintDoubleData m_typeConstraintData;
- btTransformDoubleData m_rbAFrame;
- btTransformDoubleData m_rbBFrame;
-
- //limits
- double m_swingSpan1;
- double m_swingSpan2;
- double m_twistSpan;
- double m_limitSoftness;
- double m_biasFactor;
- double m_relaxationFactor;
-
- double m_damping;
-};
-
-#ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-///this structure is not used, except for loading pre-2.82 .bullet files
-struct btConeTwistConstraintData
-{
- btTypedConstraintData m_typeConstraintData;
- btTransformFloatData m_rbAFrame;
- btTransformFloatData m_rbBFrame;
-
- //limits
- float m_swingSpan1;
- float m_swingSpan2;
- float m_twistSpan;
- float m_limitSoftness;
- float m_biasFactor;
- float m_relaxationFactor;
-
- float m_damping;
-
- char m_pad[4];
-};
-#endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-//
-
-SIMD_FORCE_INLINE int btConeTwistConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btConeTwistConstraintData2);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btConeTwistConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btConeTwistConstraintData2* cone = (btConeTwistConstraintData2*)dataBuffer;
- btTypedConstraint::serialize(&cone->m_typeConstraintData, serializer);
-
- m_rbAFrame.serialize(cone->m_rbAFrame);
- m_rbBFrame.serialize(cone->m_rbBFrame);
-
- cone->m_swingSpan1 = m_swingSpan1;
- cone->m_swingSpan2 = m_swingSpan2;
- cone->m_twistSpan = m_twistSpan;
- cone->m_limitSoftness = m_limitSoftness;
- cone->m_biasFactor = m_biasFactor;
- cone->m_relaxationFactor = m_relaxationFactor;
- cone->m_damping = m_damping;
-
- return btConeTwistConstraintDataName;
-}
-
-#endif //BT_CONETWISTCONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h
deleted file mode 100644
index 68a4a07a1d..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btConstraintSolver.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONSTRAINT_SOLVER_H
-#define BT_CONSTRAINT_SOLVER_H
-
-#include "LinearMath/btScalar.h"
-
-class btPersistentManifold;
-class btRigidBody;
-class btCollisionObject;
-class btTypedConstraint;
-struct btContactSolverInfo;
-struct btBroadphaseProxy;
-class btIDebugDraw;
-class btStackAlloc;
-class btDispatcher;
-/// btConstraintSolver provides solver interface
-
-enum btConstraintSolverType
-{
- BT_SEQUENTIAL_IMPULSE_SOLVER = 1,
- BT_MLCP_SOLVER = 2,
- BT_NNCG_SOLVER = 4,
- BT_MULTIBODY_SOLVER = 8,
- BT_BLOCK_SOLVER = 16,
-};
-
-class btConstraintSolver
-{
-public:
- virtual ~btConstraintSolver() {}
-
- virtual void prepareSolve(int /* numBodies */, int /* numManifolds */) { ; }
-
- ///solve a group of constraints
- virtual btScalar solveGroup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, class btIDebugDraw* debugDrawer, btDispatcher* dispatcher) = 0;
-
- virtual void allSolved(const btContactSolverInfo& /* info */, class btIDebugDraw* /* debugDrawer */) { ; }
-
- ///clear internal cached data and reset random seed
- virtual void reset() = 0;
-
- virtual btConstraintSolverType getSolverType() const = 0;
-};
-
-#endif //BT_CONSTRAINT_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.cpp
deleted file mode 100644
index 4b22b2fff5..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.cpp
+++ /dev/null
@@ -1,153 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btContactConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btContactSolverInfo.h"
-#include "LinearMath/btMinMax.h"
-#include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
-
-btContactConstraint::btContactConstraint(btPersistentManifold* contactManifold, btRigidBody& rbA, btRigidBody& rbB)
- : btTypedConstraint(CONTACT_CONSTRAINT_TYPE, rbA, rbB),
- m_contactManifold(*contactManifold)
-{
-}
-
-btContactConstraint::~btContactConstraint()
-{
-}
-
-void btContactConstraint::setContactManifold(btPersistentManifold* contactManifold)
-{
- m_contactManifold = *contactManifold;
-}
-
-void btContactConstraint::getInfo1(btConstraintInfo1* info)
-{
-}
-
-void btContactConstraint::getInfo2(btConstraintInfo2* info)
-{
-}
-
-void btContactConstraint::buildJacobian()
-{
-}
-
-#include "btContactConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btContactSolverInfo.h"
-#include "LinearMath/btMinMax.h"
-#include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
-
-//response between two dynamic objects without friction and no restitution, assuming 0 penetration depth
-btScalar resolveSingleCollision(
- btRigidBody* body1,
- btCollisionObject* colObj2,
- const btVector3& contactPositionWorld,
- const btVector3& contactNormalOnB,
- const btContactSolverInfo& solverInfo,
- btScalar distance)
-{
- btRigidBody* body2 = btRigidBody::upcast(colObj2);
-
- const btVector3& normal = contactNormalOnB;
-
- btVector3 rel_pos1 = contactPositionWorld - body1->getWorldTransform().getOrigin();
- btVector3 rel_pos2 = contactPositionWorld - colObj2->getWorldTransform().getOrigin();
-
- btVector3 vel1 = body1->getVelocityInLocalPoint(rel_pos1);
- btVector3 vel2 = body2 ? body2->getVelocityInLocalPoint(rel_pos2) : btVector3(0, 0, 0);
- btVector3 vel = vel1 - vel2;
- btScalar rel_vel;
- rel_vel = normal.dot(vel);
-
- btScalar combinedRestitution = 0.f;
- btScalar restitution = combinedRestitution * -rel_vel;
-
- btScalar positionalError = solverInfo.m_erp * -distance / solverInfo.m_timeStep;
- btScalar velocityError = -(1.0f + restitution) * rel_vel; // * damping;
- btScalar denom0 = body1->computeImpulseDenominator(contactPositionWorld, normal);
- btScalar denom1 = body2 ? body2->computeImpulseDenominator(contactPositionWorld, normal) : 0.f;
- btScalar relaxation = 1.f;
- btScalar jacDiagABInv = relaxation / (denom0 + denom1);
-
- btScalar penetrationImpulse = positionalError * jacDiagABInv;
- btScalar velocityImpulse = velocityError * jacDiagABInv;
-
- btScalar normalImpulse = penetrationImpulse + velocityImpulse;
- normalImpulse = 0.f > normalImpulse ? 0.f : normalImpulse;
-
- body1->applyImpulse(normal * (normalImpulse), rel_pos1);
- if (body2)
- body2->applyImpulse(-normal * (normalImpulse), rel_pos2);
-
- return normalImpulse;
-}
-
-//bilateral constraint between two dynamic objects
-void resolveSingleBilateral(btRigidBody& body1, const btVector3& pos1,
- btRigidBody& body2, const btVector3& pos2,
- btScalar distance, const btVector3& normal, btScalar& impulse, btScalar timeStep)
-{
- (void)timeStep;
- (void)distance;
-
- btScalar normalLenSqr = normal.length2();
- btAssert(btFabs(normalLenSqr) < btScalar(1.1));
- if (normalLenSqr > btScalar(1.1))
- {
- impulse = btScalar(0.);
- return;
- }
- btVector3 rel_pos1 = pos1 - body1.getCenterOfMassPosition();
- btVector3 rel_pos2 = pos2 - body2.getCenterOfMassPosition();
- //this jacobian entry could be re-used for all iterations
-
- btVector3 vel1 = body1.getVelocityInLocalPoint(rel_pos1);
- btVector3 vel2 = body2.getVelocityInLocalPoint(rel_pos2);
- btVector3 vel = vel1 - vel2;
-
- btJacobianEntry jac(body1.getCenterOfMassTransform().getBasis().transpose(),
- body2.getCenterOfMassTransform().getBasis().transpose(),
- rel_pos1, rel_pos2, normal, body1.getInvInertiaDiagLocal(), body1.getInvMass(),
- body2.getInvInertiaDiagLocal(), body2.getInvMass());
-
- btScalar jacDiagAB = jac.getDiagonal();
- btScalar jacDiagABInv = btScalar(1.) / jacDiagAB;
-
- btScalar rel_vel = jac.getRelativeVelocity(
- body1.getLinearVelocity(),
- body1.getCenterOfMassTransform().getBasis().transpose() * body1.getAngularVelocity(),
- body2.getLinearVelocity(),
- body2.getCenterOfMassTransform().getBasis().transpose() * body2.getAngularVelocity());
-
- rel_vel = normal.dot(vel);
-
- //todo: move this into proper structure
- btScalar contactDamping = btScalar(0.2);
-
-#ifdef ONLY_USE_LINEAR_MASS
- btScalar massTerm = btScalar(1.) / (body1.getInvMass() + body2.getInvMass());
- impulse = -contactDamping * rel_vel * massTerm;
-#else
- btScalar velocityImpulse = -contactDamping * rel_vel * jacDiagABInv;
- impulse = velocityImpulse;
-#endif
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h
deleted file mode 100644
index 255489be99..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactConstraint.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONTACT_CONSTRAINT_H
-#define BT_CONTACT_CONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-
-///btContactConstraint can be automatically created to solve contact constraints using the unified btTypedConstraint interface
-ATTRIBUTE_ALIGNED16(class)
-btContactConstraint : public btTypedConstraint
-{
-protected:
- btPersistentManifold m_contactManifold;
-
-protected:
- btContactConstraint(btPersistentManifold * contactManifold, btRigidBody & rbA, btRigidBody & rbB);
-
-public:
- void setContactManifold(btPersistentManifold * contactManifold);
-
- btPersistentManifold* getContactManifold()
- {
- return &m_contactManifold;
- }
-
- const btPersistentManifold* getContactManifold() const
- {
- return &m_contactManifold;
- }
-
- virtual ~btContactConstraint();
-
- virtual void getInfo1(btConstraintInfo1 * info);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- ///obsolete methods
- virtual void buildJacobian();
-};
-
-///very basic collision resolution without friction
-btScalar resolveSingleCollision(btRigidBody* body1, class btCollisionObject* colObj2, const btVector3& contactPositionWorld, const btVector3& contactNormalOnB, const struct btContactSolverInfo& solverInfo, btScalar distance);
-
-///resolveSingleBilateral is an obsolete methods used for vehicle friction between two dynamic objects
-void resolveSingleBilateral(btRigidBody& body1, const btVector3& pos1,
- btRigidBody& body2, const btVector3& pos2,
- btScalar distance, const btVector3& normal, btScalar& impulse, btScalar timeStep);
-
-#endif //BT_CONTACT_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h
deleted file mode 100644
index 3316403a87..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btContactSolverInfo.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONTACT_SOLVER_INFO
-#define BT_CONTACT_SOLVER_INFO
-
-#include "LinearMath/btScalar.h"
-
-enum btSolverMode
-{
- SOLVER_RANDMIZE_ORDER = 1,
- SOLVER_FRICTION_SEPARATE = 2,
- SOLVER_USE_WARMSTARTING = 4,
- SOLVER_USE_2_FRICTION_DIRECTIONS = 16,
- SOLVER_ENABLE_FRICTION_DIRECTION_CACHING = 32,
- SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION = 64,
- SOLVER_CACHE_FRIENDLY = 128,
- SOLVER_SIMD = 256,
- SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS = 512,
- SOLVER_ALLOW_ZERO_LENGTH_FRICTION_DIRECTIONS = 1024,
- SOLVER_DISABLE_IMPLICIT_CONE_FRICTION = 2048,
- SOLVER_USE_ARTICULATED_WARMSTARTING = 4096,
-};
-
-struct btContactSolverInfoData
-{
- btScalar m_tau;
- btScalar m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
- btScalar m_friction;
- btScalar m_timeStep;
- btScalar m_restitution;
- int m_numIterations;
- btScalar m_maxErrorReduction;
- btScalar m_sor; //successive over-relaxation term
- btScalar m_erp; //error reduction for non-contact constraints
- btScalar m_erp2; //error reduction for contact constraints
- btScalar m_deformable_erp; //error reduction for deformable constraints
- btScalar m_deformable_cfm; //constraint force mixing for deformable constraints
- btScalar m_deformable_maxErrorReduction; // maxErrorReduction for deformable contact
- btScalar m_globalCfm; //constraint force mixing for contacts and non-contacts
- btScalar m_frictionERP; //error reduction for friction constraints
- btScalar m_frictionCFM; //constraint force mixing for friction constraints
-
- int m_splitImpulse;
- btScalar m_splitImpulsePenetrationThreshold;
- btScalar m_splitImpulseTurnErp;
- btScalar m_linearSlop;
- btScalar m_warmstartingFactor;
- btScalar m_articulatedWarmstartingFactor;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
- btScalar m_maxGyroscopicForce;
- btScalar m_singleAxisRollingFrictionThreshold;
- btScalar m_leastSquaresResidualThreshold;
- btScalar m_restitutionVelocityThreshold;
- bool m_jointFeedbackInWorldSpace;
- bool m_jointFeedbackInJointFrame;
- int m_reportSolverAnalytics;
- int m_numNonContactInnerIterations;
-};
-
-struct btContactSolverInfo : public btContactSolverInfoData
-{
- inline btContactSolverInfo()
- {
- m_tau = btScalar(0.6);
- m_damping = btScalar(1.0);
- m_friction = btScalar(0.3);
- m_timeStep = btScalar(1.f / 60.f);
- m_restitution = btScalar(0.);
- m_maxErrorReduction = btScalar(20.);
- m_numIterations = 10;
- m_erp = btScalar(0.2);
- m_erp2 = btScalar(0.2);
- m_deformable_erp = btScalar(0.06);
- m_deformable_cfm = btScalar(0.01);
- m_deformable_maxErrorReduction = btScalar(0.1);
- m_globalCfm = btScalar(0.);
- m_frictionERP = btScalar(0.2); //positional friction 'anchors' are disabled by default
- m_frictionCFM = btScalar(0.);
- m_sor = btScalar(1.);
- m_splitImpulse = true;
- m_splitImpulsePenetrationThreshold = -.04f;
- m_splitImpulseTurnErp = 0.1f;
- m_linearSlop = btScalar(0.0);
- m_warmstartingFactor = btScalar(0.85);
- m_articulatedWarmstartingFactor = btScalar(0.85);
- //m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD | SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION|SOLVER_USE_2_FRICTION_DIRECTIONS|SOLVER_ENABLE_FRICTION_DIRECTION_CACHING;// | SOLVER_RANDMIZE_ORDER;
- m_solverMode = SOLVER_USE_WARMSTARTING | SOLVER_SIMD; // | SOLVER_RANDMIZE_ORDER;
- m_restingContactRestitutionThreshold = 2; //unused as of 2.81
- m_minimumSolverBatchSize = 128; //try to combine islands until the amount of constraints reaches this limit
- m_maxGyroscopicForce = 100.f; ///it is only used for 'explicit' version of gyroscopic force
- m_singleAxisRollingFrictionThreshold = 1e30f; ///if the velocity is above this threshold, it will use a single constraint row (axis), otherwise 3 rows.
- m_leastSquaresResidualThreshold = 0.f;
- m_restitutionVelocityThreshold = 0.2f; //if the relative velocity is below this threshold, there is zero restitution
- m_jointFeedbackInWorldSpace = false;
- m_jointFeedbackInJointFrame = false;
- m_reportSolverAnalytics = 0;
- m_numNonContactInnerIterations = 1; // the number of inner iterations for solving motor constraint in a single iteration of the constraint solve
- }
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btContactSolverInfoDoubleData
-{
- double m_tau;
- double m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
- double m_friction;
- double m_timeStep;
- double m_restitution;
- double m_maxErrorReduction;
- double m_sor;
- double m_erp; //used as Baumgarte factor
- double m_erp2; //used in Split Impulse
- double m_globalCfm; //constraint force mixing
- double m_splitImpulsePenetrationThreshold;
- double m_splitImpulseTurnErp;
- double m_linearSlop;
- double m_warmstartingFactor;
- double m_articulatedWarmstartingFactor;
- double m_maxGyroscopicForce; ///it is only used for 'explicit' version of gyroscopic force
- double m_singleAxisRollingFrictionThreshold;
-
- int m_numIterations;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
- int m_minimumSolverBatchSize;
- int m_splitImpulse;
- char m_padding[4];
-};
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btContactSolverInfoFloatData
-{
- float m_tau;
- float m_damping; //global non-contact constraint damping, can be locally overridden by constraints during 'getInfo2'.
- float m_friction;
- float m_timeStep;
-
- float m_restitution;
- float m_maxErrorReduction;
- float m_sor;
- float m_erp; //used as Baumgarte factor
-
- float m_erp2; //used in Split Impulse
- float m_globalCfm; //constraint force mixing
- float m_splitImpulsePenetrationThreshold;
- float m_splitImpulseTurnErp;
-
- float m_linearSlop;
- float m_warmstartingFactor;
- float m_articulatedWarmstartingFactor;
- float m_maxGyroscopicForce;
-
- float m_singleAxisRollingFrictionThreshold;
- int m_numIterations;
- int m_solverMode;
- int m_restingContactRestitutionThreshold;
-
- int m_minimumSolverBatchSize;
- int m_splitImpulse;
-
-};
-
-#endif //BT_CONTACT_SOLVER_INFO
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.cpp
deleted file mode 100644
index bba102d905..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.cpp
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btFixedConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-#include <new>
-
-btFixedConstraint::btFixedConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB)
- : btGeneric6DofSpring2Constraint(rbA, rbB, frameInA, frameInB)
-{
- setAngularLowerLimit(btVector3(0, 0, 0));
- setAngularUpperLimit(btVector3(0, 0, 0));
- setLinearLowerLimit(btVector3(0, 0, 0));
- setLinearUpperLimit(btVector3(0, 0, 0));
-}
-
-btFixedConstraint::~btFixedConstraint()
-{
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.h
deleted file mode 100644
index 6d474ea81d..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btFixedConstraint.h
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_FIXED_CONSTRAINT_H
-#define BT_FIXED_CONSTRAINT_H
-
-#include "btGeneric6DofSpring2Constraint.h"
-
-ATTRIBUTE_ALIGNED16(class)
-btFixedConstraint : public btGeneric6DofSpring2Constraint
-{
-public:
- btFixedConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB);
-
- virtual ~btFixedConstraint();
-};
-
-#endif //BT_FIXED_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.cpp
deleted file mode 100644
index 7535c52c05..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2012 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/// Implemented by Erwin Coumans. The idea for the constraint comes from Dimitris Papavasiliou.
-
-#include "btGearConstraint.h"
-
-btGearConstraint::btGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA, const btVector3& axisInB, btScalar ratio)
- : btTypedConstraint(GEAR_CONSTRAINT_TYPE, rbA, rbB),
- m_axisInA(axisInA),
- m_axisInB(axisInB),
- m_ratio(ratio)
-{
-}
-
-btGearConstraint::~btGearConstraint()
-{
-}
-
-void btGearConstraint::getInfo1(btConstraintInfo1* info)
-{
- info->m_numConstraintRows = 1;
- info->nub = 1;
-}
-
-void btGearConstraint::getInfo2(btConstraintInfo2* info)
-{
- btVector3 globalAxisA, globalAxisB;
-
- globalAxisA = m_rbA.getWorldTransform().getBasis() * this->m_axisInA;
- globalAxisB = m_rbB.getWorldTransform().getBasis() * this->m_axisInB;
-
- info->m_J1angularAxis[0] = globalAxisA[0];
- info->m_J1angularAxis[1] = globalAxisA[1];
- info->m_J1angularAxis[2] = globalAxisA[2];
-
- info->m_J2angularAxis[0] = m_ratio * globalAxisB[0];
- info->m_J2angularAxis[1] = m_ratio * globalAxisB[1];
- info->m_J2angularAxis[2] = m_ratio * globalAxisB[2];
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.h
deleted file mode 100644
index 64b15dfbce..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGearConstraint.h
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2012 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GEAR_CONSTRAINT_H
-#define BT_GEAR_CONSTRAINT_H
-
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btGearConstraintData btGearConstraintDoubleData
-#define btGearConstraintDataName "btGearConstraintDoubleData"
-#else
-#define btGearConstraintData btGearConstraintFloatData
-#define btGearConstraintDataName "btGearConstraintFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-///The btGeatConstraint will couple the angular velocity for two bodies around given local axis and ratio.
-///See Bullet/Demos/ConstraintDemo for an example use.
-class btGearConstraint : public btTypedConstraint
-{
-protected:
- btVector3 m_axisInA;
- btVector3 m_axisInB;
- bool m_useFrameA;
- btScalar m_ratio;
-
-public:
- btGearConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& axisInA, const btVector3& axisInB, btScalar ratio = 1.f);
- virtual ~btGearConstraint();
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void getInfo1(btConstraintInfo1* info);
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void getInfo2(btConstraintInfo2* info);
-
- void setAxisA(btVector3& axisA)
- {
- m_axisInA = axisA;
- }
- void setAxisB(btVector3& axisB)
- {
- m_axisInB = axisB;
- }
- void setRatio(btScalar ratio)
- {
- m_ratio = ratio;
- }
- const btVector3& getAxisA() const
- {
- return m_axisInA;
- }
- const btVector3& getAxisB() const
- {
- return m_axisInB;
- }
- btScalar getRatio() const
- {
- return m_ratio;
- }
-
- virtual void setParam(int num, btScalar value, int axis = -1)
- {
- (void)num;
- (void)value;
- (void)axis;
- btAssert(0);
- }
-
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const
- {
- (void)num;
- (void)axis;
- btAssert(0);
- return 0.f;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btGearConstraintFloatData
-{
- btTypedConstraintFloatData m_typeConstraintData;
-
- btVector3FloatData m_axisInA;
- btVector3FloatData m_axisInB;
-
- float m_ratio;
- char m_padding[4];
-};
-
-struct btGearConstraintDoubleData
-{
- btTypedConstraintDoubleData m_typeConstraintData;
-
- btVector3DoubleData m_axisInA;
- btVector3DoubleData m_axisInB;
-
- double m_ratio;
-};
-
-SIMD_FORCE_INLINE int btGearConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btGearConstraintData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btGearConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btGearConstraintData* gear = (btGearConstraintData*)dataBuffer;
- btTypedConstraint::serialize(&gear->m_typeConstraintData, serializer);
-
- m_axisInA.serialize(gear->m_axisInA);
- m_axisInB.serialize(gear->m_axisInB);
-
- gear->m_ratio = m_ratio;
-
- // Fill padding with zeros to appease msan.
-#ifndef BT_USE_DOUBLE_PRECISION
- gear->m_padding[0] = 0;
- gear->m_padding[1] = 0;
- gear->m_padding[2] = 0;
- gear->m_padding[3] = 0;
-#endif
-
- return btGearConstraintDataName;
-}
-
-#endif //BT_GEAR_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
deleted file mode 100644
index 1f54203532..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp
+++ /dev/null
@@ -1,975 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-/*
-2007-09-09
-Refactored by Francisco Le?n
-email: projectileman@yahoo.com
-http://gimpact.sf.net
-*/
-
-#include "btGeneric6DofConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btTransformUtil.h"
-#include <new>
-
-#define D6_USE_OBSOLETE_METHOD false
-#define D6_USE_FRAME_OFFSET true
-
-btGeneric6DofConstraint::btGeneric6DofConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA)
- : btTypedConstraint(D6_CONSTRAINT_TYPE, rbA, rbB), m_frameInA(frameInA), m_frameInB(frameInB), m_useLinearReferenceFrameA(useLinearReferenceFrameA), m_useOffsetForConstraintFrame(D6_USE_FRAME_OFFSET), m_flags(0), m_useSolveConstraintObsolete(D6_USE_OBSOLETE_METHOD)
-{
- calculateTransforms();
-}
-
-btGeneric6DofConstraint::btGeneric6DofConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB)
- : btTypedConstraint(D6_CONSTRAINT_TYPE, getFixedBody(), rbB),
- m_frameInB(frameInB),
- m_useLinearReferenceFrameA(useLinearReferenceFrameB),
- m_useOffsetForConstraintFrame(D6_USE_FRAME_OFFSET),
- m_flags(0),
- m_useSolveConstraintObsolete(false)
-{
- ///not providing rigidbody A means implicitly using worldspace for body A
- m_frameInA = rbB.getCenterOfMassTransform() * m_frameInB;
- calculateTransforms();
-}
-
-#define GENERIC_D6_DISABLE_WARMSTARTING 1
-
-btScalar btGetMatrixElem(const btMatrix3x3& mat, int index);
-btScalar btGetMatrixElem(const btMatrix3x3& mat, int index)
-{
- int i = index % 3;
- int j = index / 3;
- return mat[i][j];
-}
-
-///MatrixToEulerXYZ from http://www.geometrictools.com/LibFoundation/Mathematics/Wm4Matrix3.inl.html
-bool matrixToEulerXYZ(const btMatrix3x3& mat, btVector3& xyz);
-bool matrixToEulerXYZ(const btMatrix3x3& mat, btVector3& xyz)
-{
- // // rot = cy*cz -cy*sz sy
- // // cz*sx*sy+cx*sz cx*cz-sx*sy*sz -cy*sx
- // // -cx*cz*sy+sx*sz cz*sx+cx*sy*sz cx*cy
- //
-
- btScalar fi = btGetMatrixElem(mat, 2);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAtan2(-btGetMatrixElem(mat, 5), btGetMatrixElem(mat, 8));
- xyz[1] = btAsin(btGetMatrixElem(mat, 2));
- xyz[2] = btAtan2(-btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 0));
- return true;
- }
- else
- {
- // WARNING. Not unique. XA - ZA = -atan2(r10,r11)
- xyz[0] = -btAtan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- xyz[1] = -SIMD_HALF_PI;
- xyz[2] = btScalar(0.0);
- return false;
- }
- }
- else
- {
- // WARNING. Not unique. XAngle + ZAngle = atan2(r10,r11)
- xyz[0] = btAtan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- xyz[1] = SIMD_HALF_PI;
- xyz[2] = 0.0;
- }
- return false;
-}
-
-//////////////////////////// btRotationalLimitMotor ////////////////////////////////////
-
-int btRotationalLimitMotor::testLimitValue(btScalar test_value)
-{
- if (m_loLimit > m_hiLimit)
- {
- m_currentLimit = 0; //Free from violation
- return 0;
- }
- if (test_value < m_loLimit)
- {
- m_currentLimit = 1; //low limit violation
- m_currentLimitError = test_value - m_loLimit;
- if (m_currentLimitError > SIMD_PI)
- m_currentLimitError -= SIMD_2_PI;
- else if (m_currentLimitError < -SIMD_PI)
- m_currentLimitError += SIMD_2_PI;
- return 1;
- }
- else if (test_value > m_hiLimit)
- {
- m_currentLimit = 2; //High limit violation
- m_currentLimitError = test_value - m_hiLimit;
- if (m_currentLimitError > SIMD_PI)
- m_currentLimitError -= SIMD_2_PI;
- else if (m_currentLimitError < -SIMD_PI)
- m_currentLimitError += SIMD_2_PI;
- return 2;
- };
-
- m_currentLimit = 0; //Free from violation
- return 0;
-}
-
-btScalar btRotationalLimitMotor::solveAngularLimits(
- btScalar timeStep, btVector3& axis, btScalar jacDiagABInv,
- btRigidBody* body0, btRigidBody* body1)
-{
- if (needApplyTorques() == false) return 0.0f;
-
- btScalar target_velocity = m_targetVelocity;
- btScalar maxMotorForce = m_maxMotorForce;
-
- //current error correction
- if (m_currentLimit != 0)
- {
- target_velocity = -m_stopERP * m_currentLimitError / (timeStep);
- maxMotorForce = m_maxLimitForce;
- }
-
- maxMotorForce *= timeStep;
-
- // current velocity difference
-
- btVector3 angVelA = body0->getAngularVelocity();
- btVector3 angVelB = body1->getAngularVelocity();
-
- btVector3 vel_diff;
- vel_diff = angVelA - angVelB;
-
- btScalar rel_vel = axis.dot(vel_diff);
-
- // correction velocity
- btScalar motor_relvel = m_limitSoftness * (target_velocity - m_damping * rel_vel);
-
- if (motor_relvel < SIMD_EPSILON && motor_relvel > -SIMD_EPSILON)
- {
- return 0.0f; //no need for applying force
- }
-
- // correction impulse
- btScalar unclippedMotorImpulse = (1 + m_bounce) * motor_relvel * jacDiagABInv;
-
- // clip correction impulse
- btScalar clippedMotorImpulse;
-
- ///@todo: should clip against accumulated impulse
- if (unclippedMotorImpulse > 0.0f)
- {
- clippedMotorImpulse = unclippedMotorImpulse > maxMotorForce ? maxMotorForce : unclippedMotorImpulse;
- }
- else
- {
- clippedMotorImpulse = unclippedMotorImpulse < -maxMotorForce ? -maxMotorForce : unclippedMotorImpulse;
- }
-
- // sort with accumulated impulses
- btScalar lo = btScalar(-BT_LARGE_FLOAT);
- btScalar hi = btScalar(BT_LARGE_FLOAT);
-
- btScalar oldaccumImpulse = m_accumulatedImpulse;
- btScalar sum = oldaccumImpulse + clippedMotorImpulse;
- m_accumulatedImpulse = sum > hi ? btScalar(0.) : sum < lo ? btScalar(0.) : sum;
-
- clippedMotorImpulse = m_accumulatedImpulse - oldaccumImpulse;
-
- btVector3 motorImp = clippedMotorImpulse * axis;
-
- body0->applyTorqueImpulse(motorImp);
- body1->applyTorqueImpulse(-motorImp);
-
- return clippedMotorImpulse;
-}
-
-//////////////////////////// End btRotationalLimitMotor ////////////////////////////////////
-
-//////////////////////////// btTranslationalLimitMotor ////////////////////////////////////
-
-int btTranslationalLimitMotor::testLimitValue(int limitIndex, btScalar test_value)
-{
- btScalar loLimit = m_lowerLimit[limitIndex];
- btScalar hiLimit = m_upperLimit[limitIndex];
- if (loLimit > hiLimit)
- {
- m_currentLimit[limitIndex] = 0; //Free from violation
- m_currentLimitError[limitIndex] = btScalar(0.f);
- return 0;
- }
-
- if (test_value < loLimit)
- {
- m_currentLimit[limitIndex] = 2; //low limit violation
- m_currentLimitError[limitIndex] = test_value - loLimit;
- return 2;
- }
- else if (test_value > hiLimit)
- {
- m_currentLimit[limitIndex] = 1; //High limit violation
- m_currentLimitError[limitIndex] = test_value - hiLimit;
- return 1;
- };
-
- m_currentLimit[limitIndex] = 0; //Free from violation
- m_currentLimitError[limitIndex] = btScalar(0.f);
- return 0;
-}
-
-btScalar btTranslationalLimitMotor::solveLinearAxis(
- btScalar timeStep,
- btScalar jacDiagABInv,
- btRigidBody& body1, const btVector3& pointInA,
- btRigidBody& body2, const btVector3& pointInB,
- int limit_index,
- const btVector3& axis_normal_on_a,
- const btVector3& anchorPos)
-{
- ///find relative velocity
- // btVector3 rel_pos1 = pointInA - body1.getCenterOfMassPosition();
- // btVector3 rel_pos2 = pointInB - body2.getCenterOfMassPosition();
- btVector3 rel_pos1 = anchorPos - body1.getCenterOfMassPosition();
- btVector3 rel_pos2 = anchorPos - body2.getCenterOfMassPosition();
-
- btVector3 vel1 = body1.getVelocityInLocalPoint(rel_pos1);
- btVector3 vel2 = body2.getVelocityInLocalPoint(rel_pos2);
- btVector3 vel = vel1 - vel2;
-
- btScalar rel_vel = axis_normal_on_a.dot(vel);
-
- /// apply displacement correction
-
- //positional error (zeroth order error)
- btScalar depth = -(pointInA - pointInB).dot(axis_normal_on_a);
- btScalar lo = btScalar(-BT_LARGE_FLOAT);
- btScalar hi = btScalar(BT_LARGE_FLOAT);
-
- btScalar minLimit = m_lowerLimit[limit_index];
- btScalar maxLimit = m_upperLimit[limit_index];
-
- //handle the limits
- if (minLimit < maxLimit)
- {
- {
- if (depth > maxLimit)
- {
- depth -= maxLimit;
- lo = btScalar(0.);
- }
- else
- {
- if (depth < minLimit)
- {
- depth -= minLimit;
- hi = btScalar(0.);
- }
- else
- {
- return 0.0f;
- }
- }
- }
- }
-
- btScalar normalImpulse = m_limitSoftness * (m_restitution * depth / timeStep - m_damping * rel_vel) * jacDiagABInv;
-
- btScalar oldNormalImpulse = m_accumulatedImpulse[limit_index];
- btScalar sum = oldNormalImpulse + normalImpulse;
- m_accumulatedImpulse[limit_index] = sum > hi ? btScalar(0.) : sum < lo ? btScalar(0.) : sum;
- normalImpulse = m_accumulatedImpulse[limit_index] - oldNormalImpulse;
-
- btVector3 impulse_vector = axis_normal_on_a * normalImpulse;
- body1.applyImpulse(impulse_vector, rel_pos1);
- body2.applyImpulse(-impulse_vector, rel_pos2);
-
- return normalImpulse;
-}
-
-//////////////////////////// btTranslationalLimitMotor ////////////////////////////////////
-
-void btGeneric6DofConstraint::calculateAngleInfo()
-{
- btMatrix3x3 relative_frame = m_calculatedTransformA.getBasis().inverse() * m_calculatedTransformB.getBasis();
- matrixToEulerXYZ(relative_frame, m_calculatedAxisAngleDiff);
- // in euler angle mode we do not actually constrain the angular velocity
- // along the axes axis[0] and axis[2] (although we do use axis[1]) :
- //
- // to get constrain w2-w1 along ...not
- // ------ --------------------- ------
- // d(angle[0])/dt = 0 ax[1] x ax[2] ax[0]
- // d(angle[1])/dt = 0 ax[1]
- // d(angle[2])/dt = 0 ax[0] x ax[1] ax[2]
- //
- // constraining w2-w1 along an axis 'a' means that a'*(w2-w1)=0.
- // to prove the result for angle[0], write the expression for angle[0] from
- // GetInfo1 then take the derivative. to prove this for angle[2] it is
- // easier to take the euler rate expression for d(angle[2])/dt with respect
- // to the components of w and set that to 0.
- btVector3 axis0 = m_calculatedTransformB.getBasis().getColumn(0);
- btVector3 axis2 = m_calculatedTransformA.getBasis().getColumn(2);
-
- m_calculatedAxis[1] = axis2.cross(axis0);
- m_calculatedAxis[0] = m_calculatedAxis[1].cross(axis2);
- m_calculatedAxis[2] = axis0.cross(m_calculatedAxis[1]);
-
- m_calculatedAxis[0].normalize();
- m_calculatedAxis[1].normalize();
- m_calculatedAxis[2].normalize();
-}
-
-void btGeneric6DofConstraint::calculateTransforms()
-{
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-}
-
-void btGeneric6DofConstraint::calculateTransforms(const btTransform& transA, const btTransform& transB)
-{
- m_calculatedTransformA = transA * m_frameInA;
- m_calculatedTransformB = transB * m_frameInB;
- calculateLinearInfo();
- calculateAngleInfo();
- if (m_useOffsetForConstraintFrame)
- { // get weight factors depending on masses
- btScalar miA = getRigidBodyA().getInvMass();
- btScalar miB = getRigidBodyB().getInvMass();
- m_hasStaticBody = (miA < SIMD_EPSILON) || (miB < SIMD_EPSILON);
- btScalar miS = miA + miB;
- if (miS > btScalar(0.f))
- {
- m_factA = miB / miS;
- }
- else
- {
- m_factA = btScalar(0.5f);
- }
- m_factB = btScalar(1.0f) - m_factA;
- }
-}
-
-void btGeneric6DofConstraint::buildLinearJacobian(
- btJacobianEntry& jacLinear, const btVector3& normalWorld,
- const btVector3& pivotAInW, const btVector3& pivotBInW)
-{
- new (&jacLinear) btJacobianEntry(
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- pivotAInW - m_rbA.getCenterOfMassPosition(),
- pivotBInW - m_rbB.getCenterOfMassPosition(),
- normalWorld,
- m_rbA.getInvInertiaDiagLocal(),
- m_rbA.getInvMass(),
- m_rbB.getInvInertiaDiagLocal(),
- m_rbB.getInvMass());
-}
-
-void btGeneric6DofConstraint::buildAngularJacobian(
- btJacobianEntry& jacAngular, const btVector3& jointAxisW)
-{
- new (&jacAngular) btJacobianEntry(jointAxisW,
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- m_rbA.getInvInertiaDiagLocal(),
- m_rbB.getInvInertiaDiagLocal());
-}
-
-bool btGeneric6DofConstraint::testAngularLimitMotor(int axis_index)
-{
- btScalar angle = m_calculatedAxisAngleDiff[axis_index];
- angle = btAdjustAngleToLimits(angle, m_angularLimits[axis_index].m_loLimit, m_angularLimits[axis_index].m_hiLimit);
- m_angularLimits[axis_index].m_currentPosition = angle;
- //test limits
- m_angularLimits[axis_index].testLimitValue(angle);
- return m_angularLimits[axis_index].needApplyTorques();
-}
-
-void btGeneric6DofConstraint::buildJacobian()
-{
-#ifndef __SPU__
- if (m_useSolveConstraintObsolete)
- {
- // Clear accumulated impulses for the next simulation step
- m_linearLimits.m_accumulatedImpulse.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- int i;
- for (i = 0; i < 3; i++)
- {
- m_angularLimits[i].m_accumulatedImpulse = btScalar(0.);
- }
- //calculates transform
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-
- // const btVector3& pivotAInW = m_calculatedTransformA.getOrigin();
- // const btVector3& pivotBInW = m_calculatedTransformB.getOrigin();
- calcAnchorPos();
- btVector3 pivotAInW = m_AnchorPos;
- btVector3 pivotBInW = m_AnchorPos;
-
- // not used here
- // btVector3 rel_pos1 = pivotAInW - m_rbA.getCenterOfMassPosition();
- // btVector3 rel_pos2 = pivotBInW - m_rbB.getCenterOfMassPosition();
-
- btVector3 normalWorld;
- //linear part
- for (i = 0; i < 3; i++)
- {
- if (m_linearLimits.isLimited(i))
- {
- if (m_useLinearReferenceFrameA)
- normalWorld = m_calculatedTransformA.getBasis().getColumn(i);
- else
- normalWorld = m_calculatedTransformB.getBasis().getColumn(i);
-
- buildLinearJacobian(
- m_jacLinear[i], normalWorld,
- pivotAInW, pivotBInW);
- }
- }
-
- // angular part
- for (i = 0; i < 3; i++)
- {
- //calculates error angle
- if (testAngularLimitMotor(i))
- {
- normalWorld = this->getAxis(i);
- // Create angular atom
- buildAngularJacobian(m_jacAng[i], normalWorld);
- }
- }
- }
-#endif //__SPU__
-}
-
-void btGeneric6DofConstraint::getInfo1(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- //prepare constraint
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
- info->m_numConstraintRows = 0;
- info->nub = 6;
- int i;
- //test linear limits
- for (i = 0; i < 3; i++)
- {
- if (m_linearLimits.needApplyForce(i))
- {
- info->m_numConstraintRows++;
- info->nub--;
- }
- }
- //test angular limits
- for (i = 0; i < 3; i++)
- {
- if (testAngularLimitMotor(i))
- {
- info->m_numConstraintRows++;
- info->nub--;
- }
- }
- }
-}
-
-void btGeneric6DofConstraint::getInfo1NonVirtual(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- //pre-allocate all 6
- info->m_numConstraintRows = 6;
- info->nub = 0;
- }
-}
-
-void btGeneric6DofConstraint::getInfo2(btConstraintInfo2* info)
-{
- btAssert(!m_useSolveConstraintObsolete);
-
- const btTransform& transA = m_rbA.getCenterOfMassTransform();
- const btTransform& transB = m_rbB.getCenterOfMassTransform();
- const btVector3& linVelA = m_rbA.getLinearVelocity();
- const btVector3& linVelB = m_rbB.getLinearVelocity();
- const btVector3& angVelA = m_rbA.getAngularVelocity();
- const btVector3& angVelB = m_rbB.getAngularVelocity();
-
- if (m_useOffsetForConstraintFrame)
- { // for stability better to solve angular limits first
- int row = setAngularLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setLinearLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
- else
- { // leave old version for compatibility
- int row = setLinearLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setAngularLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
-}
-
-void btGeneric6DofConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB)
-{
- btAssert(!m_useSolveConstraintObsolete);
- //prepare constraint
- calculateTransforms(transA, transB);
-
- int i;
- for (i = 0; i < 3; i++)
- {
- testAngularLimitMotor(i);
- }
-
- if (m_useOffsetForConstraintFrame)
- { // for stability better to solve angular limits first
- int row = setAngularLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setLinearLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
- else
- { // leave old version for compatibility
- int row = setLinearLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setAngularLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
- }
-}
-
-int btGeneric6DofConstraint::setLinearLimits(btConstraintInfo2* info, int row, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB)
-{
- // int row = 0;
- //solve linear limits
- btRotationalLimitMotor limot;
- for (int i = 0; i < 3; i++)
- {
- if (m_linearLimits.needApplyForce(i))
- { // re-use rotational motor code
- limot.m_bounce = btScalar(0.f);
- limot.m_currentLimit = m_linearLimits.m_currentLimit[i];
- limot.m_currentPosition = m_linearLimits.m_currentLinearDiff[i];
- limot.m_currentLimitError = m_linearLimits.m_currentLimitError[i];
- limot.m_damping = m_linearLimits.m_damping;
- limot.m_enableMotor = m_linearLimits.m_enableMotor[i];
- limot.m_hiLimit = m_linearLimits.m_upperLimit[i];
- limot.m_limitSoftness = m_linearLimits.m_limitSoftness;
- limot.m_loLimit = m_linearLimits.m_lowerLimit[i];
- limot.m_maxLimitForce = btScalar(0.f);
- limot.m_maxMotorForce = m_linearLimits.m_maxMotorForce[i];
- limot.m_targetVelocity = m_linearLimits.m_targetVelocity[i];
- btVector3 axis = m_calculatedTransformA.getBasis().getColumn(i);
- int flags = m_flags >> (i * BT_6DOF_FLAGS_AXIS_SHIFT);
- limot.m_normalCFM = (flags & BT_6DOF_FLAGS_CFM_NORM) ? m_linearLimits.m_normalCFM[i] : info->cfm[0];
- limot.m_stopCFM = (flags & BT_6DOF_FLAGS_CFM_STOP) ? m_linearLimits.m_stopCFM[i] : info->cfm[0];
- limot.m_stopERP = (flags & BT_6DOF_FLAGS_ERP_STOP) ? m_linearLimits.m_stopERP[i] : info->erp;
- if (m_useOffsetForConstraintFrame)
- {
- int indx1 = (i + 1) % 3;
- int indx2 = (i + 2) % 3;
- int rotAllowed = 1; // rotations around orthos to current axis
- if (m_angularLimits[indx1].m_currentLimit && m_angularLimits[indx2].m_currentLimit)
- {
- rotAllowed = 0;
- }
- row += get_limit_motor_info2(&limot, transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 0, rotAllowed);
- }
- else
- {
- row += get_limit_motor_info2(&limot, transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 0);
- }
- }
- }
- return row;
-}
-
-int btGeneric6DofConstraint::setAngularLimits(btConstraintInfo2* info, int row_offset, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB)
-{
- btGeneric6DofConstraint* d6constraint = this;
- int row = row_offset;
- //solve angular limits
- for (int i = 0; i < 3; i++)
- {
- if (d6constraint->getRotationalLimitMotor(i)->needApplyTorques())
- {
- btVector3 axis = d6constraint->getAxis(i);
- int flags = m_flags >> ((i + 3) * BT_6DOF_FLAGS_AXIS_SHIFT);
- if (!(flags & BT_6DOF_FLAGS_CFM_NORM))
- {
- m_angularLimits[i].m_normalCFM = info->cfm[0];
- }
- if (!(flags & BT_6DOF_FLAGS_CFM_STOP))
- {
- m_angularLimits[i].m_stopCFM = info->cfm[0];
- }
- if (!(flags & BT_6DOF_FLAGS_ERP_STOP))
- {
- m_angularLimits[i].m_stopERP = info->erp;
- }
- row += get_limit_motor_info2(d6constraint->getRotationalLimitMotor(i),
- transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 1);
- }
- }
-
- return row;
-}
-
-void btGeneric6DofConstraint::updateRHS(btScalar timeStep)
-{
- (void)timeStep;
-}
-
-void btGeneric6DofConstraint::setFrames(const btTransform& frameA, const btTransform& frameB)
-{
- m_frameInA = frameA;
- m_frameInB = frameB;
- buildJacobian();
- calculateTransforms();
-}
-
-btVector3 btGeneric6DofConstraint::getAxis(int axis_index) const
-{
- return m_calculatedAxis[axis_index];
-}
-
-btScalar btGeneric6DofConstraint::getRelativePivotPosition(int axisIndex) const
-{
- return m_calculatedLinearDiff[axisIndex];
-}
-
-btScalar btGeneric6DofConstraint::getAngle(int axisIndex) const
-{
- return m_calculatedAxisAngleDiff[axisIndex];
-}
-
-void btGeneric6DofConstraint::calcAnchorPos(void)
-{
- btScalar imA = m_rbA.getInvMass();
- btScalar imB = m_rbB.getInvMass();
- btScalar weight;
- if (imB == btScalar(0.0))
- {
- weight = btScalar(1.0);
- }
- else
- {
- weight = imA / (imA + imB);
- }
- const btVector3& pA = m_calculatedTransformA.getOrigin();
- const btVector3& pB = m_calculatedTransformB.getOrigin();
- m_AnchorPos = pA * weight + pB * (btScalar(1.0) - weight);
- return;
-}
-
-void btGeneric6DofConstraint::calculateLinearInfo()
-{
- m_calculatedLinearDiff = m_calculatedTransformB.getOrigin() - m_calculatedTransformA.getOrigin();
- m_calculatedLinearDiff = m_calculatedTransformA.getBasis().inverse() * m_calculatedLinearDiff;
- for (int i = 0; i < 3; i++)
- {
- m_linearLimits.m_currentLinearDiff[i] = m_calculatedLinearDiff[i];
- m_linearLimits.testLimitValue(i, m_calculatedLinearDiff[i]);
- }
-}
-
-int btGeneric6DofConstraint::get_limit_motor_info2(
- btRotationalLimitMotor* limot,
- const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB,
- btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed)
-{
- int srow = row * info->rowskip;
- bool powered = limot->m_enableMotor;
- int limit = limot->m_currentLimit;
- if (powered || limit)
- { // if the joint is powered, or has joint limits, add in the extra row
- btScalar* J1 = rotational ? info->m_J1angularAxis : info->m_J1linearAxis;
- btScalar* J2 = rotational ? info->m_J2angularAxis : info->m_J2linearAxis;
- J1[srow + 0] = ax1[0];
- J1[srow + 1] = ax1[1];
- J1[srow + 2] = ax1[2];
-
- J2[srow + 0] = -ax1[0];
- J2[srow + 1] = -ax1[1];
- J2[srow + 2] = -ax1[2];
-
- if ((!rotational))
- {
- if (m_useOffsetForConstraintFrame)
- {
- btVector3 tmpA, tmpB, relA, relB;
- // get vector from bodyB to frameB in WCS
- relB = m_calculatedTransformB.getOrigin() - transB.getOrigin();
- // get its projection to constraint axis
- btVector3 projB = ax1 * relB.dot(ax1);
- // get vector directed from bodyB to constraint axis (and orthogonal to it)
- btVector3 orthoB = relB - projB;
- // same for bodyA
- relA = m_calculatedTransformA.getOrigin() - transA.getOrigin();
- btVector3 projA = ax1 * relA.dot(ax1);
- btVector3 orthoA = relA - projA;
- // get desired offset between frames A and B along constraint axis
- btScalar desiredOffs = limot->m_currentPosition - limot->m_currentLimitError;
- // desired vector from projection of center of bodyA to projection of center of bodyB to constraint axis
- btVector3 totalDist = projA + ax1 * desiredOffs - projB;
- // get offset vectors relA and relB
- relA = orthoA + totalDist * m_factA;
- relB = orthoB - totalDist * m_factB;
- tmpA = relA.cross(ax1);
- tmpB = relB.cross(ax1);
- if (m_hasStaticBody && (!rotAllowed))
- {
- tmpA *= m_factA;
- tmpB *= m_factB;
- }
- int i;
- for (i = 0; i < 3; i++) info->m_J1angularAxis[srow + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[srow + i] = -tmpB[i];
- }
- else
- {
- btVector3 ltd; // Linear Torque Decoupling vector
- btVector3 c = m_calculatedTransformB.getOrigin() - transA.getOrigin();
- ltd = c.cross(ax1);
- info->m_J1angularAxis[srow + 0] = ltd[0];
- info->m_J1angularAxis[srow + 1] = ltd[1];
- info->m_J1angularAxis[srow + 2] = ltd[2];
-
- c = m_calculatedTransformB.getOrigin() - transB.getOrigin();
- ltd = -c.cross(ax1);
- info->m_J2angularAxis[srow + 0] = ltd[0];
- info->m_J2angularAxis[srow + 1] = ltd[1];
- info->m_J2angularAxis[srow + 2] = ltd[2];
- }
- }
- // if we're limited low and high simultaneously, the joint motor is
- // ineffective
- if (limit && (limot->m_loLimit == limot->m_hiLimit)) powered = false;
- info->m_constraintError[srow] = btScalar(0.f);
- if (powered)
- {
- info->cfm[srow] = limot->m_normalCFM;
- if (!limit)
- {
- btScalar tag_vel = rotational ? limot->m_targetVelocity : -limot->m_targetVelocity;
-
- btScalar mot_fact = getMotorFactor(limot->m_currentPosition,
- limot->m_loLimit,
- limot->m_hiLimit,
- tag_vel,
- info->fps * limot->m_stopERP);
- info->m_constraintError[srow] += mot_fact * limot->m_targetVelocity;
- info->m_lowerLimit[srow] = -limot->m_maxMotorForce / info->fps;
- info->m_upperLimit[srow] = limot->m_maxMotorForce / info->fps;
- }
- }
- if (limit)
- {
- btScalar k = info->fps * limot->m_stopERP;
- if (!rotational)
- {
- info->m_constraintError[srow] += k * limot->m_currentLimitError;
- }
- else
- {
- info->m_constraintError[srow] += -k * limot->m_currentLimitError;
- }
- info->cfm[srow] = limot->m_stopCFM;
- if (limot->m_loLimit == limot->m_hiLimit)
- { // limited low and high simultaneously
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else
- {
- if (limit == 1)
- {
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else
- {
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- // deal with bounce
- if (limot->m_bounce > 0)
- {
- // calculate joint velocity
- btScalar vel;
- if (rotational)
- {
- vel = angVelA.dot(ax1);
- //make sure that if no body -> angVelB == zero vec
- // if (body1)
- vel -= angVelB.dot(ax1);
- }
- else
- {
- vel = linVelA.dot(ax1);
- //make sure that if no body -> angVelB == zero vec
- // if (body1)
- vel -= linVelB.dot(ax1);
- }
- // only apply bounce if the velocity is incoming, and if the
- // resulting c[] exceeds what we already have.
- if (limit == 1)
- {
- if (vel < 0)
- {
- btScalar newc = -limot->m_bounce * vel;
- if (newc > info->m_constraintError[srow])
- info->m_constraintError[srow] = newc;
- }
- }
- else
- {
- if (vel > 0)
- {
- btScalar newc = -limot->m_bounce * vel;
- if (newc < info->m_constraintError[srow])
- info->m_constraintError[srow] = newc;
- }
- }
- }
- }
- }
- return 1;
- }
- else
- return 0;
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void btGeneric6DofConstraint::setParam(int num, btScalar value, int axis)
-{
- if ((axis >= 0) && (axis < 3))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- m_linearLimits.m_stopERP[axis] = value;
- m_flags |= BT_6DOF_FLAGS_ERP_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case BT_CONSTRAINT_STOP_CFM:
- m_linearLimits.m_stopCFM[axis] = value;
- m_flags |= BT_6DOF_FLAGS_CFM_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case BT_CONSTRAINT_CFM:
- m_linearLimits.m_normalCFM[axis] = value;
- m_flags |= BT_6DOF_FLAGS_CFM_NORM << (axis * BT_6DOF_FLAGS_AXIS_SHIFT);
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else if ((axis >= 3) && (axis < 6))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- m_angularLimits[axis - 3].m_stopERP = value;
- m_flags |= BT_6DOF_FLAGS_ERP_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case BT_CONSTRAINT_STOP_CFM:
- m_angularLimits[axis - 3].m_stopCFM = value;
- m_flags |= BT_6DOF_FLAGS_CFM_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT);
- break;
- case BT_CONSTRAINT_CFM:
- m_angularLimits[axis - 3].m_normalCFM = value;
- m_flags |= BT_6DOF_FLAGS_CFM_NORM << (axis * BT_6DOF_FLAGS_AXIS_SHIFT);
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else
- {
- btAssertConstrParams(0);
- }
-}
-
-///return the local value of parameter
-btScalar btGeneric6DofConstraint::getParam(int num, int axis) const
-{
- btScalar retVal = 0;
- if ((axis >= 0) && (axis < 3))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_ERP_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_linearLimits.m_stopERP[axis];
- break;
- case BT_CONSTRAINT_STOP_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_linearLimits.m_stopCFM[axis];
- break;
- case BT_CONSTRAINT_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_NORM << (axis * BT_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_linearLimits.m_normalCFM[axis];
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else if ((axis >= 3) && (axis < 6))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_ERP_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_angularLimits[axis - 3].m_stopERP;
- break;
- case BT_CONSTRAINT_STOP_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_STOP << (axis * BT_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_angularLimits[axis - 3].m_stopCFM;
- break;
- case BT_CONSTRAINT_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_NORM << (axis * BT_6DOF_FLAGS_AXIS_SHIFT)));
- retVal = m_angularLimits[axis - 3].m_normalCFM;
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else
- {
- btAssertConstrParams(0);
- }
- return retVal;
-}
-
-void btGeneric6DofConstraint::setAxis(const btVector3& axis1, const btVector3& axis2)
-{
- btVector3 zAxis = axis1.normalized();
- btVector3 yAxis = axis2.normalized();
- btVector3 xAxis = yAxis.cross(zAxis); // we want right coordinate system
-
- btTransform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
-
- // now get constraint frame in local coordinate systems
- m_frameInA = m_rbA.getCenterOfMassTransform().inverse() * frameInW;
- m_frameInB = m_rbB.getCenterOfMassTransform().inverse() * frameInW;
-
- calculateTransforms();
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
deleted file mode 100644
index b9e762e175..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
+++ /dev/null
@@ -1,615 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/// 2009 March: btGeneric6DofConstraint refactored by Roman Ponomarev
-/// Added support for generic constraint solver through getInfo1/getInfo2 methods
-
-/*
-2007-09-09
-btGeneric6DofConstraint Refactored by Francisco Le?n
-email: projectileman@yahoo.com
-http://gimpact.sf.net
-*/
-
-#ifndef BT_GENERIC_6DOF_CONSTRAINT_H
-#define BT_GENERIC_6DOF_CONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-
-class btRigidBody;
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btGeneric6DofConstraintData2 btGeneric6DofConstraintDoubleData2
-#define btGeneric6DofConstraintDataName "btGeneric6DofConstraintDoubleData2"
-#else
-#define btGeneric6DofConstraintData2 btGeneric6DofConstraintData
-#define btGeneric6DofConstraintDataName "btGeneric6DofConstraintData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-//! Rotation Limit structure for generic joints
-class btRotationalLimitMotor
-{
-public:
- //! limit_parameters
- //!@{
- btScalar m_loLimit; //!< joint limit
- btScalar m_hiLimit; //!< joint limit
- btScalar m_targetVelocity; //!< target motor velocity
- btScalar m_maxMotorForce; //!< max force on motor
- btScalar m_maxLimitForce; //!< max force on limit
- btScalar m_damping; //!< Damping.
- btScalar m_limitSoftness; //! Relaxation factor
- btScalar m_normalCFM; //!< Constraint force mixing factor
- btScalar m_stopERP; //!< Error tolerance factor when joint is at limit
- btScalar m_stopCFM; //!< Constraint force mixing factor when joint is at limit
- btScalar m_bounce; //!< restitution factor
- bool m_enableMotor;
-
- //!@}
-
- //! temp_variables
- //!@{
- btScalar m_currentLimitError; //! How much is violated this limit
- btScalar m_currentPosition; //! current value of angle
- int m_currentLimit; //!< 0=free, 1=at lo limit, 2=at hi limit
- btScalar m_accumulatedImpulse;
- //!@}
-
- btRotationalLimitMotor()
- {
- m_accumulatedImpulse = 0.f;
- m_targetVelocity = 0;
- m_maxMotorForce = 6.0f;
- m_maxLimitForce = 300.0f;
- m_loLimit = 1.0f;
- m_hiLimit = -1.0f;
- m_normalCFM = 0.f;
- m_stopERP = 0.2f;
- m_stopCFM = 0.f;
- m_bounce = 0.0f;
- m_damping = 1.0f;
- m_limitSoftness = 0.5f;
- m_currentLimit = 0;
- m_currentLimitError = 0;
- m_enableMotor = false;
- }
-
- btRotationalLimitMotor(const btRotationalLimitMotor& limot)
- {
- m_targetVelocity = limot.m_targetVelocity;
- m_maxMotorForce = limot.m_maxMotorForce;
- m_limitSoftness = limot.m_limitSoftness;
- m_loLimit = limot.m_loLimit;
- m_hiLimit = limot.m_hiLimit;
- m_normalCFM = limot.m_normalCFM;
- m_stopERP = limot.m_stopERP;
- m_stopCFM = limot.m_stopCFM;
- m_bounce = limot.m_bounce;
- m_currentLimit = limot.m_currentLimit;
- m_currentLimitError = limot.m_currentLimitError;
- m_enableMotor = limot.m_enableMotor;
- }
-
- //! Is limited
- bool isLimited() const
- {
- if (m_loLimit > m_hiLimit) return false;
- return true;
- }
-
- //! Need apply correction
- bool needApplyTorques() const
- {
- if (m_currentLimit == 0 && m_enableMotor == false) return false;
- return true;
- }
-
- //! calculates error
- /*!
- calculates m_currentLimit and m_currentLimitError.
- */
- int testLimitValue(btScalar test_value);
-
- //! apply the correction impulses for two bodies
- btScalar solveAngularLimits(btScalar timeStep, btVector3& axis, btScalar jacDiagABInv, btRigidBody* body0, btRigidBody* body1);
-};
-
-class btTranslationalLimitMotor
-{
-public:
- btVector3 m_lowerLimit; //!< the constraint lower limits
- btVector3 m_upperLimit; //!< the constraint upper limits
- btVector3 m_accumulatedImpulse;
- //! Linear_Limit_parameters
- //!@{
- btScalar m_limitSoftness; //!< Softness for linear limit
- btScalar m_damping; //!< Damping for linear limit
- btScalar m_restitution; //! Bounce parameter for linear limit
- btVector3 m_normalCFM; //!< Constraint force mixing factor
- btVector3 m_stopERP; //!< Error tolerance factor when joint is at limit
- btVector3 m_stopCFM; //!< Constraint force mixing factor when joint is at limit
- //!@}
- bool m_enableMotor[3];
- btVector3 m_targetVelocity; //!< target motor velocity
- btVector3 m_maxMotorForce; //!< max force on motor
- btVector3 m_currentLimitError; //! How much is violated this limit
- btVector3 m_currentLinearDiff; //! Current relative offset of constraint frames
- int m_currentLimit[3]; //!< 0=free, 1=at lower limit, 2=at upper limit
-
- btTranslationalLimitMotor()
- {
- m_lowerLimit.setValue(0.f, 0.f, 0.f);
- m_upperLimit.setValue(0.f, 0.f, 0.f);
- m_accumulatedImpulse.setValue(0.f, 0.f, 0.f);
- m_normalCFM.setValue(0.f, 0.f, 0.f);
- m_stopERP.setValue(0.2f, 0.2f, 0.2f);
- m_stopCFM.setValue(0.f, 0.f, 0.f);
-
- m_limitSoftness = 0.7f;
- m_damping = btScalar(1.0f);
- m_restitution = btScalar(0.5f);
- for (int i = 0; i < 3; i++)
- {
- m_enableMotor[i] = false;
- m_targetVelocity[i] = btScalar(0.f);
- m_maxMotorForce[i] = btScalar(0.f);
- }
- }
-
- btTranslationalLimitMotor(const btTranslationalLimitMotor& other)
- {
- m_lowerLimit = other.m_lowerLimit;
- m_upperLimit = other.m_upperLimit;
- m_accumulatedImpulse = other.m_accumulatedImpulse;
-
- m_limitSoftness = other.m_limitSoftness;
- m_damping = other.m_damping;
- m_restitution = other.m_restitution;
- m_normalCFM = other.m_normalCFM;
- m_stopERP = other.m_stopERP;
- m_stopCFM = other.m_stopCFM;
-
- for (int i = 0; i < 3; i++)
- {
- m_enableMotor[i] = other.m_enableMotor[i];
- m_targetVelocity[i] = other.m_targetVelocity[i];
- m_maxMotorForce[i] = other.m_maxMotorForce[i];
- }
- }
-
- //! Test limit
- /*!
- - free means upper < lower,
- - locked means upper == lower
- - limited means upper > lower
- - limitIndex: first 3 are linear, next 3 are angular
- */
- inline bool isLimited(int limitIndex) const
- {
- return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]);
- }
- inline bool needApplyForce(int limitIndex) const
- {
- if (m_currentLimit[limitIndex] == 0 && m_enableMotor[limitIndex] == false) return false;
- return true;
- }
- int testLimitValue(int limitIndex, btScalar test_value);
-
- btScalar solveLinearAxis(
- btScalar timeStep,
- btScalar jacDiagABInv,
- btRigidBody& body1, const btVector3& pointInA,
- btRigidBody& body2, const btVector3& pointInB,
- int limit_index,
- const btVector3& axis_normal_on_a,
- const btVector3& anchorPos);
-};
-
-enum bt6DofFlags
-{
- BT_6DOF_FLAGS_CFM_NORM = 1,
- BT_6DOF_FLAGS_CFM_STOP = 2,
- BT_6DOF_FLAGS_ERP_STOP = 4
-};
-#define BT_6DOF_FLAGS_AXIS_SHIFT 3 // bits per axis
-
-/// btGeneric6DofConstraint between two rigidbodies each with a pivotpoint that descibes the axis location in local space
-/*!
-btGeneric6DofConstraint can leave any of the 6 degree of freedom 'free' or 'locked'.
-currently this limit supports rotational motors<br>
-<ul>
-<li> For Linear limits, use btGeneric6DofConstraint.setLinearUpperLimit, btGeneric6DofConstraint.setLinearLowerLimit. You can set the parameters with the btTranslationalLimitMotor structure accsesible through the btGeneric6DofConstraint.getTranslationalLimitMotor method.
-At this moment translational motors are not supported. May be in the future. </li>
-
-<li> For Angular limits, use the btRotationalLimitMotor structure for configuring the limit.
-This is accessible through btGeneric6DofConstraint.getLimitMotor method,
-This brings support for limit parameters and motors. </li>
-
-<li> Angulars limits have these possible ranges:
-<table border=1 >
-<tr>
- <td><b>AXIS</b></td>
- <td><b>MIN ANGLE</b></td>
- <td><b>MAX ANGLE</b></td>
-</tr><tr>
- <td>X</td>
- <td>-PI</td>
- <td>PI</td>
-</tr><tr>
- <td>Y</td>
- <td>-PI/2</td>
- <td>PI/2</td>
-</tr><tr>
- <td>Z</td>
- <td>-PI</td>
- <td>PI</td>
-</tr>
-</table>
-</li>
-</ul>
-
-*/
-ATTRIBUTE_ALIGNED16(class)
-btGeneric6DofConstraint : public btTypedConstraint
-{
-protected:
- //! relative_frames
- //!@{
- btTransform m_frameInA; //!< the constraint space w.r.t body A
- btTransform m_frameInB; //!< the constraint space w.r.t body B
- //!@}
-
- //! Jacobians
- //!@{
- btJacobianEntry m_jacLinear[3]; //!< 3 orthogonal linear constraints
- btJacobianEntry m_jacAng[3]; //!< 3 orthogonal angular constraints
- //!@}
-
- //! Linear_Limit_parameters
- //!@{
- btTranslationalLimitMotor m_linearLimits;
- //!@}
-
- //! hinge_parameters
- //!@{
- btRotationalLimitMotor m_angularLimits[3];
- //!@}
-
-protected:
- //! temporal variables
- //!@{
- btScalar m_timeStep;
- btTransform m_calculatedTransformA;
- btTransform m_calculatedTransformB;
- btVector3 m_calculatedAxisAngleDiff;
- btVector3 m_calculatedAxis[3];
- btVector3 m_calculatedLinearDiff;
- btScalar m_factA;
- btScalar m_factB;
- bool m_hasStaticBody;
-
- btVector3 m_AnchorPos; // point betwen pivots of bodies A and B to solve linear axes
-
- bool m_useLinearReferenceFrameA;
- bool m_useOffsetForConstraintFrame;
-
- int m_flags;
-
- //!@}
-
- btGeneric6DofConstraint& operator=(btGeneric6DofConstraint& other)
- {
- btAssert(0);
- (void)other;
- return *this;
- }
-
- int setAngularLimits(btConstraintInfo2 * info, int row_offset, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB);
-
- int setLinearLimits(btConstraintInfo2 * info, int row, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB);
-
- void buildLinearJacobian(
- btJacobianEntry & jacLinear, const btVector3& normalWorld,
- const btVector3& pivotAInW, const btVector3& pivotBInW);
-
- void buildAngularJacobian(btJacobianEntry & jacAngular, const btVector3& jointAxisW);
-
- // tests linear limits
- void calculateLinearInfo();
-
- //! calcs the euler angles between the two bodies.
- void calculateAngleInfo();
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- ///for backwards compatibility during the transition to 'getInfo/getInfo2'
- bool m_useSolveConstraintObsolete;
-
- btGeneric6DofConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA);
- btGeneric6DofConstraint(btRigidBody & rbB, const btTransform& frameInB, bool useLinearReferenceFrameB);
-
- //! Calcs global transform of the offsets
- /*!
- Calcs the global transform for the joint offset for body A an B, and also calcs the agle differences between the bodies.
- \sa btGeneric6DofConstraint.getCalculatedTransformA , btGeneric6DofConstraint.getCalculatedTransformB, btGeneric6DofConstraint.calculateAngleInfo
- */
- void calculateTransforms(const btTransform& transA, const btTransform& transB);
-
- void calculateTransforms();
-
- //! Gets the global transform of the offset for body A
- /*!
- \sa btGeneric6DofConstraint.getFrameOffsetA, btGeneric6DofConstraint.getFrameOffsetB, btGeneric6DofConstraint.calculateAngleInfo.
- */
- const btTransform& getCalculatedTransformA() const
- {
- return m_calculatedTransformA;
- }
-
- //! Gets the global transform of the offset for body B
- /*!
- \sa btGeneric6DofConstraint.getFrameOffsetA, btGeneric6DofConstraint.getFrameOffsetB, btGeneric6DofConstraint.calculateAngleInfo.
- */
- const btTransform& getCalculatedTransformB() const
- {
- return m_calculatedTransformB;
- }
-
- const btTransform& getFrameOffsetA() const
- {
- return m_frameInA;
- }
-
- const btTransform& getFrameOffsetB() const
- {
- return m_frameInB;
- }
-
- btTransform& getFrameOffsetA()
- {
- return m_frameInA;
- }
-
- btTransform& getFrameOffsetB()
- {
- return m_frameInB;
- }
-
- //! performs Jacobian calculation, and also calculates angle differences and axis
- virtual void buildJacobian();
-
- virtual void getInfo1(btConstraintInfo1 * info);
-
- void getInfo1NonVirtual(btConstraintInfo1 * info);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB);
-
- void updateRHS(btScalar timeStep);
-
- //! Get the rotation axis in global coordinates
- /*!
- \pre btGeneric6DofConstraint.buildJacobian must be called previously.
- */
- btVector3 getAxis(int axis_index) const;
-
- //! Get the relative Euler angle
- /*!
- \pre btGeneric6DofConstraint::calculateTransforms() must be called previously.
- */
- btScalar getAngle(int axis_index) const;
-
- //! Get the relative position of the constraint pivot
- /*!
- \pre btGeneric6DofConstraint::calculateTransforms() must be called previously.
- */
- btScalar getRelativePivotPosition(int axis_index) const;
-
- void setFrames(const btTransform& frameA, const btTransform& frameB);
-
- //! Test angular limit.
- /*!
- Calculates angular correction and returns true if limit needs to be corrected.
- \pre btGeneric6DofConstraint::calculateTransforms() must be called previously.
- */
- bool testAngularLimitMotor(int axis_index);
-
- void setLinearLowerLimit(const btVector3& linearLower)
- {
- m_linearLimits.m_lowerLimit = linearLower;
- }
-
- void getLinearLowerLimit(btVector3 & linearLower) const
- {
- linearLower = m_linearLimits.m_lowerLimit;
- }
-
- void setLinearUpperLimit(const btVector3& linearUpper)
- {
- m_linearLimits.m_upperLimit = linearUpper;
- }
-
- void getLinearUpperLimit(btVector3 & linearUpper) const
- {
- linearUpper = m_linearLimits.m_upperLimit;
- }
-
- void setAngularLowerLimit(const btVector3& angularLower)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_loLimit = btNormalizeAngle(angularLower[i]);
- }
-
- void getAngularLowerLimit(btVector3 & angularLower) const
- {
- for (int i = 0; i < 3; i++)
- angularLower[i] = m_angularLimits[i].m_loLimit;
- }
-
- void setAngularUpperLimit(const btVector3& angularUpper)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_hiLimit = btNormalizeAngle(angularUpper[i]);
- }
-
- void getAngularUpperLimit(btVector3 & angularUpper) const
- {
- for (int i = 0; i < 3; i++)
- angularUpper[i] = m_angularLimits[i].m_hiLimit;
- }
-
- //! Retrieves the angular limit informacion
- btRotationalLimitMotor* getRotationalLimitMotor(int index)
- {
- return &m_angularLimits[index];
- }
-
- //! Retrieves the limit informacion
- btTranslationalLimitMotor* getTranslationalLimitMotor()
- {
- return &m_linearLimits;
- }
-
- //first 3 are linear, next 3 are angular
- void setLimit(int axis, btScalar lo, btScalar hi)
- {
- if (axis < 3)
- {
- m_linearLimits.m_lowerLimit[axis] = lo;
- m_linearLimits.m_upperLimit[axis] = hi;
- }
- else
- {
- lo = btNormalizeAngle(lo);
- hi = btNormalizeAngle(hi);
- m_angularLimits[axis - 3].m_loLimit = lo;
- m_angularLimits[axis - 3].m_hiLimit = hi;
- }
- }
-
- //! Test limit
- /*!
- - free means upper < lower,
- - locked means upper == lower
- - limited means upper > lower
- - limitIndex: first 3 are linear, next 3 are angular
- */
- bool isLimited(int limitIndex) const
- {
- if (limitIndex < 3)
- {
- return m_linearLimits.isLimited(limitIndex);
- }
- return m_angularLimits[limitIndex - 3].isLimited();
- }
-
- virtual void calcAnchorPos(void); // overridable
-
- int get_limit_motor_info2(btRotationalLimitMotor * limot,
- const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB,
- btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed = false);
-
- // access for UseFrameOffset
- bool getUseFrameOffset() const { return m_useOffsetForConstraintFrame; }
- void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; }
-
- bool getUseLinearReferenceFrameA() const { return m_useLinearReferenceFrameA; }
- void setUseLinearReferenceFrameA(bool linearReferenceFrameA) { m_useLinearReferenceFrameA = linearReferenceFrameA; }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1);
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const;
-
- void setAxis(const btVector3& axis1, const btVector3& axis2);
-
- virtual int getFlags() const
- {
- return m_flags;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-struct btGeneric6DofConstraintData
-{
- btTypedConstraintData m_typeConstraintData;
- btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformFloatData m_rbBFrame;
-
- btVector3FloatData m_linearUpperLimit;
- btVector3FloatData m_linearLowerLimit;
-
- btVector3FloatData m_angularUpperLimit;
- btVector3FloatData m_angularLowerLimit;
-
- int m_useLinearReferenceFrameA;
- int m_useOffsetForConstraintFrame;
-};
-
-struct btGeneric6DofConstraintDoubleData2
-{
- btTypedConstraintDoubleData m_typeConstraintData;
- btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformDoubleData m_rbBFrame;
-
- btVector3DoubleData m_linearUpperLimit;
- btVector3DoubleData m_linearLowerLimit;
-
- btVector3DoubleData m_angularUpperLimit;
- btVector3DoubleData m_angularLowerLimit;
-
- int m_useLinearReferenceFrameA;
- int m_useOffsetForConstraintFrame;
-};
-
-SIMD_FORCE_INLINE int btGeneric6DofConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btGeneric6DofConstraintData2);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btGeneric6DofConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btGeneric6DofConstraintData2* dof = (btGeneric6DofConstraintData2*)dataBuffer;
- btTypedConstraint::serialize(&dof->m_typeConstraintData, serializer);
-
- m_frameInA.serialize(dof->m_rbAFrame);
- m_frameInB.serialize(dof->m_rbBFrame);
-
- int i;
- for (i = 0; i < 3; i++)
- {
- dof->m_angularLowerLimit.m_floats[i] = m_angularLimits[i].m_loLimit;
- dof->m_angularUpperLimit.m_floats[i] = m_angularLimits[i].m_hiLimit;
- dof->m_linearLowerLimit.m_floats[i] = m_linearLimits.m_lowerLimit[i];
- dof->m_linearUpperLimit.m_floats[i] = m_linearLimits.m_upperLimit[i];
- }
-
- dof->m_useLinearReferenceFrameA = m_useLinearReferenceFrameA ? 1 : 0;
- dof->m_useOffsetForConstraintFrame = m_useOffsetForConstraintFrame ? 1 : 0;
-
- return btGeneric6DofConstraintDataName;
-}
-
-#endif //BT_GENERIC_6DOF_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp
deleted file mode 100644
index 74a13c6249..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp
+++ /dev/null
@@ -1,1243 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-2014 May: btGeneric6DofSpring2Constraint is created from the original (2.82.2712) btGeneric6DofConstraint by Gabor Puhr and Tamas Umenhoffer
-Pros:
-- Much more accurate and stable in a lot of situation. (Especially when a sleeping chain of RBs connected with 6dof2 is pulled)
-- Stable and accurate spring with minimal energy loss that works with all of the solvers. (latter is not true for the original 6dof spring)
-- Servo motor functionality
-- Much more accurate bouncing. 0 really means zero bouncing (not true for the original 6odf) and there is only a minimal energy loss when the value is 1 (because of the solvers' precision)
-- Rotation order for the Euler system can be set. (One axis' freedom is still limited to pi/2)
-
-Cons:
-- It is slower than the original 6dof. There is no exact ratio, but half speed is a good estimation. (with PGS)
-- At bouncing the correct velocity is calculated, but not the correct position. (it is because of the solver can correct position or velocity, but not both.)
-*/
-
-/// 2009 March: btGeneric6DofConstraint refactored by Roman Ponomarev
-/// Added support for generic constraint solver through getInfo1/getInfo2 methods
-
-/*
-2007-09-09
-btGeneric6DofConstraint Refactored by Francisco Le?n
-email: projectileman@yahoo.com
-http://gimpact.sf.net
-*/
-
-#include "btGeneric6DofSpring2Constraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-#include <cmath>
-#include <new>
-
-btGeneric6DofSpring2Constraint::btGeneric6DofSpring2Constraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, RotateOrder rotOrder)
- : btTypedConstraint(D6_SPRING_2_CONSTRAINT_TYPE, rbA, rbB), m_frameInA(frameInA), m_frameInB(frameInB), m_rotateOrder(rotOrder), m_flags(0)
-{
- calculateTransforms();
-}
-
-btGeneric6DofSpring2Constraint::btGeneric6DofSpring2Constraint(btRigidBody& rbB, const btTransform& frameInB, RotateOrder rotOrder)
- : btTypedConstraint(D6_SPRING_2_CONSTRAINT_TYPE, getFixedBody(), rbB), m_frameInB(frameInB), m_rotateOrder(rotOrder), m_flags(0)
-{
- ///not providing rigidbody A means implicitly using worldspace for body A
- m_frameInA = rbB.getCenterOfMassTransform() * m_frameInB;
- calculateTransforms();
-}
-
-btScalar btGeneric6DofSpring2Constraint::btGetMatrixElem(const btMatrix3x3& mat, int index)
-{
- int i = index % 3;
- int j = index / 3;
- return mat[i][j];
-}
-
-// MatrixToEulerXYZ from http://www.geometrictools.com/LibFoundation/Mathematics/Wm4Matrix3.inl.html
-
-bool btGeneric6DofSpring2Constraint::matrixToEulerXYZ(const btMatrix3x3& mat, btVector3& xyz)
-{
- // rot = cy*cz -cy*sz sy
- // cz*sx*sy+cx*sz cx*cz-sx*sy*sz -cy*sx
- // -cx*cz*sy+sx*sz cz*sx+cx*sy*sz cx*cy
-
- btScalar fi = btGetMatrixElem(mat, 2);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAtan2(-btGetMatrixElem(mat, 5), btGetMatrixElem(mat, 8));
- xyz[1] = btAsin(btGetMatrixElem(mat, 2));
- xyz[2] = btAtan2(-btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 0));
- return true;
- }
- else
- {
- // WARNING. Not unique. XA - ZA = -atan2(r10,r11)
- xyz[0] = -btAtan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- xyz[1] = -SIMD_HALF_PI;
- xyz[2] = btScalar(0.0);
- return false;
- }
- }
- else
- {
- // WARNING. Not unique. XAngle + ZAngle = atan2(r10,r11)
- xyz[0] = btAtan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- xyz[1] = SIMD_HALF_PI;
- xyz[2] = 0.0;
- }
- return false;
-}
-
-bool btGeneric6DofSpring2Constraint::matrixToEulerXZY(const btMatrix3x3& mat, btVector3& xyz)
-{
- // rot = cy*cz -sz sy*cz
- // cy*cx*sz+sx*sy cx*cz sy*cx*sz-cy*sx
- // cy*sx*sz-cx*sy sx*cz sy*sx*sz+cx*cy
-
- btScalar fi = btGetMatrixElem(mat, 1);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAtan2(btGetMatrixElem(mat, 7), btGetMatrixElem(mat, 4));
- xyz[1] = btAtan2(btGetMatrixElem(mat, 2), btGetMatrixElem(mat, 0));
- xyz[2] = btAsin(-btGetMatrixElem(mat, 1));
- return true;
- }
- else
- {
- xyz[0] = -btAtan2(-btGetMatrixElem(mat, 6), btGetMatrixElem(mat, 8));
- xyz[1] = btScalar(0.0);
- xyz[2] = SIMD_HALF_PI;
- return false;
- }
- }
- else
- {
- xyz[0] = btAtan2(-btGetMatrixElem(mat, 6), btGetMatrixElem(mat, 8));
- xyz[1] = 0.0;
- xyz[2] = -SIMD_HALF_PI;
- }
- return false;
-}
-
-bool btGeneric6DofSpring2Constraint::matrixToEulerYXZ(const btMatrix3x3& mat, btVector3& xyz)
-{
- // rot = cy*cz+sy*sx*sz cz*sy*sx-cy*sz cx*sy
- // cx*sz cx*cz -sx
- // cy*sx*sz-cz*sy sy*sz+cy*cz*sx cy*cx
-
- btScalar fi = btGetMatrixElem(mat, 5);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAsin(-btGetMatrixElem(mat, 5));
- xyz[1] = btAtan2(btGetMatrixElem(mat, 2), btGetMatrixElem(mat, 8));
- xyz[2] = btAtan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 4));
- return true;
- }
- else
- {
- xyz[0] = SIMD_HALF_PI;
- xyz[1] = -btAtan2(-btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 0));
- xyz[2] = btScalar(0.0);
- return false;
- }
- }
- else
- {
- xyz[0] = -SIMD_HALF_PI;
- xyz[1] = btAtan2(-btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 0));
- xyz[2] = 0.0;
- }
- return false;
-}
-
-bool btGeneric6DofSpring2Constraint::matrixToEulerYZX(const btMatrix3x3& mat, btVector3& xyz)
-{
- // rot = cy*cz sy*sx-cy*cx*sz cx*sy+cy*sz*sx
- // sz cz*cx -cz*sx
- // -cz*sy cy*sx+cx*sy*sz cy*cx-sy*sz*sx
-
- btScalar fi = btGetMatrixElem(mat, 3);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAtan2(-btGetMatrixElem(mat, 5), btGetMatrixElem(mat, 4));
- xyz[1] = btAtan2(-btGetMatrixElem(mat, 6), btGetMatrixElem(mat, 0));
- xyz[2] = btAsin(btGetMatrixElem(mat, 3));
- return true;
- }
- else
- {
- xyz[0] = btScalar(0.0);
- xyz[1] = -btAtan2(btGetMatrixElem(mat, 7), btGetMatrixElem(mat, 8));
- xyz[2] = -SIMD_HALF_PI;
- return false;
- }
- }
- else
- {
- xyz[0] = btScalar(0.0);
- xyz[1] = btAtan2(btGetMatrixElem(mat, 7), btGetMatrixElem(mat, 8));
- xyz[2] = SIMD_HALF_PI;
- }
- return false;
-}
-
-bool btGeneric6DofSpring2Constraint::matrixToEulerZXY(const btMatrix3x3& mat, btVector3& xyz)
-{
- // rot = cz*cy-sz*sx*sy -cx*sz cz*sy+cy*sz*sx
- // cy*sz+cz*sx*sy cz*cx sz*sy-cz*xy*sx
- // -cx*sy sx cx*cy
-
- btScalar fi = btGetMatrixElem(mat, 7);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAsin(btGetMatrixElem(mat, 7));
- xyz[1] = btAtan2(-btGetMatrixElem(mat, 6), btGetMatrixElem(mat, 8));
- xyz[2] = btAtan2(-btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 4));
- return true;
- }
- else
- {
- xyz[0] = -SIMD_HALF_PI;
- xyz[1] = btScalar(0.0);
- xyz[2] = -btAtan2(btGetMatrixElem(mat, 2), btGetMatrixElem(mat, 0));
- return false;
- }
- }
- else
- {
- xyz[0] = SIMD_HALF_PI;
- xyz[1] = btScalar(0.0);
- xyz[2] = btAtan2(btGetMatrixElem(mat, 2), btGetMatrixElem(mat, 0));
- }
- return false;
-}
-
-bool btGeneric6DofSpring2Constraint::matrixToEulerZYX(const btMatrix3x3& mat, btVector3& xyz)
-{
- // rot = cz*cy cz*sy*sx-cx*sz sz*sx+cz*cx*sy
- // cy*sz cz*cx+sz*sy*sx cx*sz*sy-cz*sx
- // -sy cy*sx cy*cx
-
- btScalar fi = btGetMatrixElem(mat, 6);
- if (fi < btScalar(1.0f))
- {
- if (fi > btScalar(-1.0f))
- {
- xyz[0] = btAtan2(btGetMatrixElem(mat, 7), btGetMatrixElem(mat, 8));
- xyz[1] = btAsin(-btGetMatrixElem(mat, 6));
- xyz[2] = btAtan2(btGetMatrixElem(mat, 3), btGetMatrixElem(mat, 0));
- return true;
- }
- else
- {
- xyz[0] = btScalar(0.0);
- xyz[1] = SIMD_HALF_PI;
- xyz[2] = -btAtan2(btGetMatrixElem(mat, 1), btGetMatrixElem(mat, 2));
- return false;
- }
- }
- else
- {
- xyz[0] = btScalar(0.0);
- xyz[1] = -SIMD_HALF_PI;
- xyz[2] = btAtan2(-btGetMatrixElem(mat, 1), -btGetMatrixElem(mat, 2));
- }
- return false;
-}
-
-void btGeneric6DofSpring2Constraint::calculateAngleInfo()
-{
- btMatrix3x3 relative_frame = m_calculatedTransformA.getBasis().inverse() * m_calculatedTransformB.getBasis();
- switch (m_rotateOrder)
- {
- case RO_XYZ:
- matrixToEulerXYZ(relative_frame, m_calculatedAxisAngleDiff);
- break;
- case RO_XZY:
- matrixToEulerXZY(relative_frame, m_calculatedAxisAngleDiff);
- break;
- case RO_YXZ:
- matrixToEulerYXZ(relative_frame, m_calculatedAxisAngleDiff);
- break;
- case RO_YZX:
- matrixToEulerYZX(relative_frame, m_calculatedAxisAngleDiff);
- break;
- case RO_ZXY:
- matrixToEulerZXY(relative_frame, m_calculatedAxisAngleDiff);
- break;
- case RO_ZYX:
- matrixToEulerZYX(relative_frame, m_calculatedAxisAngleDiff);
- break;
- default:
- btAssert(false);
- }
- // in euler angle mode we do not actually constrain the angular velocity
- // along the axes axis[0] and axis[2] (although we do use axis[1]) :
- //
- // to get constrain w2-w1 along ...not
- // ------ --------------------- ------
- // d(angle[0])/dt = 0 ax[1] x ax[2] ax[0]
- // d(angle[1])/dt = 0 ax[1]
- // d(angle[2])/dt = 0 ax[0] x ax[1] ax[2]
- //
- // constraining w2-w1 along an axis 'a' means that a'*(w2-w1)=0.
- // to prove the result for angle[0], write the expression for angle[0] from
- // GetInfo1 then take the derivative. to prove this for angle[2] it is
- // easier to take the euler rate expression for d(angle[2])/dt with respect
- // to the components of w and set that to 0.
- switch (m_rotateOrder)
- {
- case RO_XYZ:
- {
- //Is this the "line of nodes" calculation choosing planes YZ (B coordinate system) and xy (A coordinate system)? (http://en.wikipedia.org/wiki/Euler_angles)
- //The two planes are non-homologous, so this is a Tait Bryan angle formalism and not a proper Euler
- //Extrinsic rotations are equal to the reversed order intrinsic rotations so the above xyz extrinsic rotations (axes are fixed) are the same as the zy'x" intrinsic rotations (axes are refreshed after each rotation)
- //that is why xy and YZ planes are chosen (this will describe a zy'x" intrinsic rotation) (see the figure on the left at http://en.wikipedia.org/wiki/Euler_angles under Tait Bryan angles)
- // x' = Nperp = N.cross(axis2)
- // y' = N = axis2.cross(axis0)
- // z' = z
- //
- // x" = X
- // y" = y'
- // z" = ??
- //in other words:
- //first rotate around z
- //second rotate around y'= z.cross(X)
- //third rotate around x" = X
- //Original XYZ extrinsic rotation order.
- //Planes: xy and YZ normals: z, X. Plane intersection (N) is z.cross(X)
- btVector3 axis0 = m_calculatedTransformB.getBasis().getColumn(0);
- btVector3 axis2 = m_calculatedTransformA.getBasis().getColumn(2);
- m_calculatedAxis[1] = axis2.cross(axis0);
- m_calculatedAxis[0] = m_calculatedAxis[1].cross(axis2);
- m_calculatedAxis[2] = axis0.cross(m_calculatedAxis[1]);
- break;
- }
- case RO_XZY:
- {
- //planes: xz,ZY normals: y, X
- //first rotate around y
- //second rotate around z'= y.cross(X)
- //third rotate around x" = X
- btVector3 axis0 = m_calculatedTransformB.getBasis().getColumn(0);
- btVector3 axis1 = m_calculatedTransformA.getBasis().getColumn(1);
- m_calculatedAxis[2] = axis0.cross(axis1);
- m_calculatedAxis[0] = axis1.cross(m_calculatedAxis[2]);
- m_calculatedAxis[1] = m_calculatedAxis[2].cross(axis0);
- break;
- }
- case RO_YXZ:
- {
- //planes: yx,XZ normals: z, Y
- //first rotate around z
- //second rotate around x'= z.cross(Y)
- //third rotate around y" = Y
- btVector3 axis1 = m_calculatedTransformB.getBasis().getColumn(1);
- btVector3 axis2 = m_calculatedTransformA.getBasis().getColumn(2);
- m_calculatedAxis[0] = axis1.cross(axis2);
- m_calculatedAxis[1] = axis2.cross(m_calculatedAxis[0]);
- m_calculatedAxis[2] = m_calculatedAxis[0].cross(axis1);
- break;
- }
- case RO_YZX:
- {
- //planes: yz,ZX normals: x, Y
- //first rotate around x
- //second rotate around z'= x.cross(Y)
- //third rotate around y" = Y
- btVector3 axis0 = m_calculatedTransformA.getBasis().getColumn(0);
- btVector3 axis1 = m_calculatedTransformB.getBasis().getColumn(1);
- m_calculatedAxis[2] = axis0.cross(axis1);
- m_calculatedAxis[0] = axis1.cross(m_calculatedAxis[2]);
- m_calculatedAxis[1] = m_calculatedAxis[2].cross(axis0);
- break;
- }
- case RO_ZXY:
- {
- //planes: zx,XY normals: y, Z
- //first rotate around y
- //second rotate around x'= y.cross(Z)
- //third rotate around z" = Z
- btVector3 axis1 = m_calculatedTransformA.getBasis().getColumn(1);
- btVector3 axis2 = m_calculatedTransformB.getBasis().getColumn(2);
- m_calculatedAxis[0] = axis1.cross(axis2);
- m_calculatedAxis[1] = axis2.cross(m_calculatedAxis[0]);
- m_calculatedAxis[2] = m_calculatedAxis[0].cross(axis1);
- break;
- }
- case RO_ZYX:
- {
- //planes: zy,YX normals: x, Z
- //first rotate around x
- //second rotate around y' = x.cross(Z)
- //third rotate around z" = Z
- btVector3 axis0 = m_calculatedTransformA.getBasis().getColumn(0);
- btVector3 axis2 = m_calculatedTransformB.getBasis().getColumn(2);
- m_calculatedAxis[1] = axis2.cross(axis0);
- m_calculatedAxis[0] = m_calculatedAxis[1].cross(axis2);
- m_calculatedAxis[2] = axis0.cross(m_calculatedAxis[1]);
- break;
- }
- default:
- btAssert(false);
- }
-
- m_calculatedAxis[0].normalize();
- m_calculatedAxis[1].normalize();
- m_calculatedAxis[2].normalize();
-}
-
-void btGeneric6DofSpring2Constraint::calculateTransforms()
-{
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-}
-
-void btGeneric6DofSpring2Constraint::calculateTransforms(const btTransform& transA, const btTransform& transB)
-{
- m_calculatedTransformA = transA * m_frameInA;
- m_calculatedTransformB = transB * m_frameInB;
- calculateLinearInfo();
- calculateAngleInfo();
-
- btScalar miA = getRigidBodyA().getInvMass();
- btScalar miB = getRigidBodyB().getInvMass();
- m_hasStaticBody = (miA < SIMD_EPSILON) || (miB < SIMD_EPSILON);
- btScalar miS = miA + miB;
- if (miS > btScalar(0.f))
- {
- m_factA = miB / miS;
- }
- else
- {
- m_factA = btScalar(0.5f);
- }
- m_factB = btScalar(1.0f) - m_factA;
-}
-
-void btGeneric6DofSpring2Constraint::testAngularLimitMotor(int axis_index)
-{
- btScalar angle = m_calculatedAxisAngleDiff[axis_index];
- angle = btAdjustAngleToLimits(angle, m_angularLimits[axis_index].m_loLimit, m_angularLimits[axis_index].m_hiLimit);
- m_angularLimits[axis_index].m_currentPosition = angle;
- m_angularLimits[axis_index].testLimitValue(angle);
-}
-
-void btGeneric6DofSpring2Constraint::getInfo1(btConstraintInfo1* info)
-{
- //prepare constraint
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
- info->m_numConstraintRows = 0;
- info->nub = 0;
- int i;
- //test linear limits
- for (i = 0; i < 3; i++)
- {
- if (m_linearLimits.m_currentLimit[i] == 4)
- info->m_numConstraintRows += 2;
- else if (m_linearLimits.m_currentLimit[i] != 0)
- info->m_numConstraintRows += 1;
- if (m_linearLimits.m_enableMotor[i]) info->m_numConstraintRows += 1;
- if (m_linearLimits.m_enableSpring[i]) info->m_numConstraintRows += 1;
- }
- //test angular limits
- for (i = 0; i < 3; i++)
- {
- testAngularLimitMotor(i);
- if (m_angularLimits[i].m_currentLimit == 4)
- info->m_numConstraintRows += 2;
- else if (m_angularLimits[i].m_currentLimit != 0)
- info->m_numConstraintRows += 1;
- if (m_angularLimits[i].m_enableMotor) info->m_numConstraintRows += 1;
- if (m_angularLimits[i].m_enableSpring) info->m_numConstraintRows += 1;
- }
-}
-
-void btGeneric6DofSpring2Constraint::getInfo2(btConstraintInfo2* info)
-{
- const btTransform& transA = m_rbA.getCenterOfMassTransform();
- const btTransform& transB = m_rbB.getCenterOfMassTransform();
- const btVector3& linVelA = m_rbA.getLinearVelocity();
- const btVector3& linVelB = m_rbB.getLinearVelocity();
- const btVector3& angVelA = m_rbA.getAngularVelocity();
- const btVector3& angVelB = m_rbB.getAngularVelocity();
-
- // for stability better to solve angular limits first
- int row = setAngularLimits(info, 0, transA, transB, linVelA, linVelB, angVelA, angVelB);
- setLinearLimits(info, row, transA, transB, linVelA, linVelB, angVelA, angVelB);
-}
-
-int btGeneric6DofSpring2Constraint::setLinearLimits(btConstraintInfo2* info, int row, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB)
-{
- //solve linear limits
- btRotationalLimitMotor2 limot;
- for (int i = 0; i < 3; i++)
- {
- if (m_linearLimits.m_currentLimit[i] || m_linearLimits.m_enableMotor[i] || m_linearLimits.m_enableSpring[i])
- { // re-use rotational motor code
- limot.m_bounce = m_linearLimits.m_bounce[i];
- limot.m_currentLimit = m_linearLimits.m_currentLimit[i];
- limot.m_currentPosition = m_linearLimits.m_currentLinearDiff[i];
- limot.m_currentLimitError = m_linearLimits.m_currentLimitError[i];
- limot.m_currentLimitErrorHi = m_linearLimits.m_currentLimitErrorHi[i];
- limot.m_enableMotor = m_linearLimits.m_enableMotor[i];
- limot.m_servoMotor = m_linearLimits.m_servoMotor[i];
- limot.m_servoTarget = m_linearLimits.m_servoTarget[i];
- limot.m_enableSpring = m_linearLimits.m_enableSpring[i];
- limot.m_springStiffness = m_linearLimits.m_springStiffness[i];
- limot.m_springStiffnessLimited = m_linearLimits.m_springStiffnessLimited[i];
- limot.m_springDamping = m_linearLimits.m_springDamping[i];
- limot.m_springDampingLimited = m_linearLimits.m_springDampingLimited[i];
- limot.m_equilibriumPoint = m_linearLimits.m_equilibriumPoint[i];
- limot.m_hiLimit = m_linearLimits.m_upperLimit[i];
- limot.m_loLimit = m_linearLimits.m_lowerLimit[i];
- limot.m_maxMotorForce = m_linearLimits.m_maxMotorForce[i];
- limot.m_targetVelocity = m_linearLimits.m_targetVelocity[i];
- btVector3 axis = m_calculatedTransformA.getBasis().getColumn(i);
- int flags = m_flags >> (i * BT_6DOF_FLAGS_AXIS_SHIFT2);
- limot.m_stopCFM = (flags & BT_6DOF_FLAGS_CFM_STOP2) ? m_linearLimits.m_stopCFM[i] : info->cfm[0];
- limot.m_stopERP = (flags & BT_6DOF_FLAGS_ERP_STOP2) ? m_linearLimits.m_stopERP[i] : info->erp;
- limot.m_motorCFM = (flags & BT_6DOF_FLAGS_CFM_MOTO2) ? m_linearLimits.m_motorCFM[i] : info->cfm[0];
- limot.m_motorERP = (flags & BT_6DOF_FLAGS_ERP_MOTO2) ? m_linearLimits.m_motorERP[i] : info->erp;
-
- //rotAllowed is a bit of a magic from the original 6dof. The calculation of it here is something that imitates the original behavior as much as possible.
- int indx1 = (i + 1) % 3;
- int indx2 = (i + 2) % 3;
- int rotAllowed = 1; // rotations around orthos to current axis (it is used only when one of the body is static)
-#define D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION 1.0e-3
- bool indx1Violated = m_angularLimits[indx1].m_currentLimit == 1 ||
- m_angularLimits[indx1].m_currentLimit == 2 ||
- (m_angularLimits[indx1].m_currentLimit == 3 && (m_angularLimits[indx1].m_currentLimitError < -D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION || m_angularLimits[indx1].m_currentLimitError > D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION)) ||
- (m_angularLimits[indx1].m_currentLimit == 4 && (m_angularLimits[indx1].m_currentLimitError < -D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION || m_angularLimits[indx1].m_currentLimitErrorHi > D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION));
- bool indx2Violated = m_angularLimits[indx2].m_currentLimit == 1 ||
- m_angularLimits[indx2].m_currentLimit == 2 ||
- (m_angularLimits[indx2].m_currentLimit == 3 && (m_angularLimits[indx2].m_currentLimitError < -D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION || m_angularLimits[indx2].m_currentLimitError > D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION)) ||
- (m_angularLimits[indx2].m_currentLimit == 4 && (m_angularLimits[indx2].m_currentLimitError < -D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION || m_angularLimits[indx2].m_currentLimitErrorHi > D6_LIMIT_ERROR_THRESHOLD_FOR_ROTATION));
- if (indx1Violated && indx2Violated)
- {
- rotAllowed = 0;
- }
- row += get_limit_motor_info2(&limot, transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 0, rotAllowed);
- }
- }
- return row;
-}
-
-int btGeneric6DofSpring2Constraint::setAngularLimits(btConstraintInfo2* info, int row_offset, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB)
-{
- int row = row_offset;
-
- //order of rotational constraint rows
- int cIdx[] = {0, 1, 2};
- switch (m_rotateOrder)
- {
- case RO_XYZ:
- cIdx[0] = 0;
- cIdx[1] = 1;
- cIdx[2] = 2;
- break;
- case RO_XZY:
- cIdx[0] = 0;
- cIdx[1] = 2;
- cIdx[2] = 1;
- break;
- case RO_YXZ:
- cIdx[0] = 1;
- cIdx[1] = 0;
- cIdx[2] = 2;
- break;
- case RO_YZX:
- cIdx[0] = 1;
- cIdx[1] = 2;
- cIdx[2] = 0;
- break;
- case RO_ZXY:
- cIdx[0] = 2;
- cIdx[1] = 0;
- cIdx[2] = 1;
- break;
- case RO_ZYX:
- cIdx[0] = 2;
- cIdx[1] = 1;
- cIdx[2] = 0;
- break;
- default:
- btAssert(false);
- }
-
- for (int ii = 0; ii < 3; ii++)
- {
- int i = cIdx[ii];
- if (m_angularLimits[i].m_currentLimit || m_angularLimits[i].m_enableMotor || m_angularLimits[i].m_enableSpring)
- {
- btVector3 axis = getAxis(i);
- int flags = m_flags >> ((i + 3) * BT_6DOF_FLAGS_AXIS_SHIFT2);
- if (!(flags & BT_6DOF_FLAGS_CFM_STOP2))
- {
- m_angularLimits[i].m_stopCFM = info->cfm[0];
- }
- if (!(flags & BT_6DOF_FLAGS_ERP_STOP2))
- {
- m_angularLimits[i].m_stopERP = info->erp;
- }
- if (!(flags & BT_6DOF_FLAGS_CFM_MOTO2))
- {
- m_angularLimits[i].m_motorCFM = info->cfm[0];
- }
- if (!(flags & BT_6DOF_FLAGS_ERP_MOTO2))
- {
- m_angularLimits[i].m_motorERP = info->erp;
- }
- row += get_limit_motor_info2(&m_angularLimits[i], transA, transB, linVelA, linVelB, angVelA, angVelB, info, row, axis, 1);
- }
- }
-
- return row;
-}
-
-void btGeneric6DofSpring2Constraint::setFrames(const btTransform& frameA, const btTransform& frameB)
-{
- m_frameInA = frameA;
- m_frameInB = frameB;
- buildJacobian();
- calculateTransforms();
-}
-
-void btGeneric6DofSpring2Constraint::calculateLinearInfo()
-{
- m_calculatedLinearDiff = m_calculatedTransformB.getOrigin() - m_calculatedTransformA.getOrigin();
- m_calculatedLinearDiff = m_calculatedTransformA.getBasis().inverse() * m_calculatedLinearDiff;
- for (int i = 0; i < 3; i++)
- {
- m_linearLimits.m_currentLinearDiff[i] = m_calculatedLinearDiff[i];
- m_linearLimits.testLimitValue(i, m_calculatedLinearDiff[i]);
- }
-}
-
-void btGeneric6DofSpring2Constraint::calculateJacobi(btRotationalLimitMotor2* limot, const btTransform& transA, const btTransform& transB, btConstraintInfo2* info, int srow, btVector3& ax1, int rotational, int rotAllowed)
-{
- btScalar* J1 = rotational ? info->m_J1angularAxis : info->m_J1linearAxis;
- btScalar* J2 = rotational ? info->m_J2angularAxis : info->m_J2linearAxis;
-
- J1[srow + 0] = ax1[0];
- J1[srow + 1] = ax1[1];
- J1[srow + 2] = ax1[2];
-
- J2[srow + 0] = -ax1[0];
- J2[srow + 1] = -ax1[1];
- J2[srow + 2] = -ax1[2];
-
- if (!rotational)
- {
- btVector3 tmpA, tmpB, relA, relB;
- // get vector from bodyB to frameB in WCS
- relB = m_calculatedTransformB.getOrigin() - transB.getOrigin();
- // same for bodyA
- relA = m_calculatedTransformA.getOrigin() - transA.getOrigin();
- tmpA = relA.cross(ax1);
- tmpB = relB.cross(ax1);
- if (m_hasStaticBody && (!rotAllowed))
- {
- tmpA *= m_factA;
- tmpB *= m_factB;
- }
- int i;
- for (i = 0; i < 3; i++) info->m_J1angularAxis[srow + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[srow + i] = -tmpB[i];
- }
-}
-
-int btGeneric6DofSpring2Constraint::get_limit_motor_info2(
- btRotationalLimitMotor2* limot,
- const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB,
- btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed)
-{
- int count = 0;
- int srow = row * info->rowskip;
-
- if (limot->m_currentLimit == 4)
- {
- btScalar vel = rotational ? angVelA.dot(ax1) - angVelB.dot(ax1) : linVelA.dot(ax1) - linVelB.dot(ax1);
-
- calculateJacobi(limot, transA, transB, info, srow, ax1, rotational, rotAllowed);
- info->m_constraintError[srow] = info->fps * limot->m_stopERP * limot->m_currentLimitError * (rotational ? -1 : 1);
- if (rotational)
- {
- if (info->m_constraintError[srow] - vel * limot->m_stopERP > 0)
- {
- btScalar bounceerror = -limot->m_bounce * vel;
- if (bounceerror > info->m_constraintError[srow]) info->m_constraintError[srow] = bounceerror;
- }
- }
- else
- {
- if (info->m_constraintError[srow] - vel * limot->m_stopERP < 0)
- {
- btScalar bounceerror = -limot->m_bounce * vel;
- if (bounceerror < info->m_constraintError[srow]) info->m_constraintError[srow] = bounceerror;
- }
- }
- info->m_lowerLimit[srow] = rotational ? 0 : -SIMD_INFINITY;
- info->m_upperLimit[srow] = rotational ? SIMD_INFINITY : 0;
- info->cfm[srow] = limot->m_stopCFM;
- srow += info->rowskip;
- ++count;
-
- calculateJacobi(limot, transA, transB, info, srow, ax1, rotational, rotAllowed);
- info->m_constraintError[srow] = info->fps * limot->m_stopERP * limot->m_currentLimitErrorHi * (rotational ? -1 : 1);
- if (rotational)
- {
- if (info->m_constraintError[srow] - vel * limot->m_stopERP < 0)
- {
- btScalar bounceerror = -limot->m_bounce * vel;
- if (bounceerror < info->m_constraintError[srow]) info->m_constraintError[srow] = bounceerror;
- }
- }
- else
- {
- if (info->m_constraintError[srow] - vel * limot->m_stopERP > 0)
- {
- btScalar bounceerror = -limot->m_bounce * vel;
- if (bounceerror > info->m_constraintError[srow]) info->m_constraintError[srow] = bounceerror;
- }
- }
- info->m_lowerLimit[srow] = rotational ? -SIMD_INFINITY : 0;
- info->m_upperLimit[srow] = rotational ? 0 : SIMD_INFINITY;
- info->cfm[srow] = limot->m_stopCFM;
- srow += info->rowskip;
- ++count;
- }
- else if (limot->m_currentLimit == 3)
- {
- calculateJacobi(limot, transA, transB, info, srow, ax1, rotational, rotAllowed);
- info->m_constraintError[srow] = info->fps * limot->m_stopERP * limot->m_currentLimitError * (rotational ? -1 : 1);
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- info->cfm[srow] = limot->m_stopCFM;
- srow += info->rowskip;
- ++count;
- }
-
- if (limot->m_enableMotor && !limot->m_servoMotor)
- {
- calculateJacobi(limot, transA, transB, info, srow, ax1, rotational, rotAllowed);
- btScalar tag_vel = rotational ? limot->m_targetVelocity : -limot->m_targetVelocity;
- btScalar mot_fact = getMotorFactor(limot->m_currentPosition,
- limot->m_loLimit,
- limot->m_hiLimit,
- tag_vel,
- info->fps * limot->m_motorERP);
- info->m_constraintError[srow] = mot_fact * limot->m_targetVelocity;
- info->m_lowerLimit[srow] = -limot->m_maxMotorForce / info->fps;
- info->m_upperLimit[srow] = limot->m_maxMotorForce / info->fps;
- info->cfm[srow] = limot->m_motorCFM;
- srow += info->rowskip;
- ++count;
- }
-
- if (limot->m_enableMotor && limot->m_servoMotor)
- {
- btScalar error = limot->m_currentPosition - limot->m_servoTarget;
- btScalar curServoTarget = limot->m_servoTarget;
- if (rotational)
- {
- if (error > SIMD_PI)
- {
- error -= SIMD_2_PI;
- curServoTarget += SIMD_2_PI;
- }
- if (error < -SIMD_PI)
- {
- error += SIMD_2_PI;
- curServoTarget -= SIMD_2_PI;
- }
- }
-
- calculateJacobi(limot, transA, transB, info, srow, ax1, rotational, rotAllowed);
- btScalar targetvelocity = error < 0 ? -limot->m_targetVelocity : limot->m_targetVelocity;
- btScalar tag_vel = -targetvelocity;
- btScalar mot_fact;
- if (error != 0)
- {
- btScalar lowLimit;
- btScalar hiLimit;
- if (limot->m_loLimit > limot->m_hiLimit)
- {
- lowLimit = error > 0 ? curServoTarget : -SIMD_INFINITY;
- hiLimit = error < 0 ? curServoTarget : SIMD_INFINITY;
- }
- else
- {
- lowLimit = error > 0 && curServoTarget > limot->m_loLimit ? curServoTarget : limot->m_loLimit;
- hiLimit = error < 0 && curServoTarget < limot->m_hiLimit ? curServoTarget : limot->m_hiLimit;
- }
- mot_fact = getMotorFactor(limot->m_currentPosition, lowLimit, hiLimit, tag_vel, info->fps * limot->m_motorERP);
- }
- else
- {
- mot_fact = 0;
- }
- info->m_constraintError[srow] = mot_fact * targetvelocity * (rotational ? -1 : 1);
- info->m_lowerLimit[srow] = -limot->m_maxMotorForce / info->fps;
- info->m_upperLimit[srow] = limot->m_maxMotorForce / info->fps;
- info->cfm[srow] = limot->m_motorCFM;
- srow += info->rowskip;
- ++count;
- }
-
- if (limot->m_enableSpring)
- {
- btScalar error = limot->m_currentPosition - limot->m_equilibriumPoint;
- calculateJacobi(limot, transA, transB, info, srow, ax1, rotational, rotAllowed);
-
- //btScalar cfm = 1.0 / ((1.0/info->fps)*limot->m_springStiffness+ limot->m_springDamping);
- //if(cfm > 0.99999)
- // cfm = 0.99999;
- //btScalar erp = (1.0/info->fps)*limot->m_springStiffness / ((1.0/info->fps)*limot->m_springStiffness + limot->m_springDamping);
- //info->m_constraintError[srow] = info->fps * erp * error * (rotational ? -1.0 : 1.0);
- //info->m_lowerLimit[srow] = -SIMD_INFINITY;
- //info->m_upperLimit[srow] = SIMD_INFINITY;
-
- btScalar dt = BT_ONE / info->fps;
- btScalar kd = limot->m_springDamping;
- btScalar ks = limot->m_springStiffness;
- btScalar vel;
- if (rotational)
- {
- vel = angVelA.dot(ax1) - angVelB.dot(ax1);
- }
- else
- {
- btVector3 tanVelA = angVelA.cross(m_calculatedTransformA.getOrigin() - transA.getOrigin());
- btVector3 tanVelB = angVelB.cross(m_calculatedTransformB.getOrigin() - transB.getOrigin());
- vel = (linVelA + tanVelA).dot(ax1) - (linVelB + tanVelB).dot(ax1);
- }
- btScalar cfm = BT_ZERO;
- btScalar mA = BT_ONE / m_rbA.getInvMass();
- btScalar mB = BT_ONE / m_rbB.getInvMass();
- if (rotational)
- {
- btScalar rrA = (m_calculatedTransformA.getOrigin() - transA.getOrigin()).length2();
- btScalar rrB = (m_calculatedTransformB.getOrigin() - transB.getOrigin()).length2();
- if (m_rbA.getInvMass()) mA = mA * rrA + 1 / (m_rbA.getInvInertiaTensorWorld() * ax1).length();
- if (m_rbB.getInvMass()) mB = mB * rrB + 1 / (m_rbB.getInvInertiaTensorWorld() * ax1).length();
- }
- btScalar m;
- if (m_rbA.getInvMass() == 0) m = mB; else
- if (m_rbB.getInvMass() == 0) m = mA; else
- m = mA*mB / (mA + mB);
- btScalar angularfreq = btSqrt(ks / m);
-
- //limit stiffness (the spring should not be sampled faster that the quarter of its angular frequency)
- if (limot->m_springStiffnessLimited && 0.25 < angularfreq * dt)
- {
- ks = BT_ONE / dt / dt / btScalar(16.0) * m;
- }
- //avoid damping that would blow up the spring
- if (limot->m_springDampingLimited && kd * dt > m)
- {
- kd = m / dt;
- }
- btScalar fs = ks * error * dt;
- btScalar fd = -kd * (vel) * (rotational ? -1 : 1) * dt;
- btScalar f = (fs + fd);
-
- // after the spring force affecting the body(es) the new velocity will be
- // vel + f / m * (rotational ? -1 : 1)
- // so in theory this should be set here for m_constraintError
- // (with m_constraintError we set a desired velocity for the affected body(es))
- // however in practice any value is fine as long as it is greater than the "proper" velocity,
- // because the m_lowerLimit and the m_upperLimit will determinate the strength of the final pulling force
- // so it is much simpler (and more robust) just to simply use inf (with the proper sign)
- // (Even with our best intent the "new" velocity is only an estimation. If we underestimate
- // the "proper" velocity that will weaken the spring, however if we overestimate it, it doesn't
- // matter, because the solver will limit it according the force limit)
- // you may also wonder what if the current velocity (vel) so high that the pulling force will not change its direction (in this iteration)
- // will we not request a velocity with the wrong direction ?
- // and the answer is not, because in practice during the solving the current velocity is subtracted from the m_constraintError
- // so the sign of the force that is really matters
- if (m_flags & BT_6DOF_FLAGS_USE_INFINITE_ERROR)
- info->m_constraintError[srow] = (rotational ? -1 : 1) * (f < 0 ? -SIMD_INFINITY : SIMD_INFINITY);
- else
- info->m_constraintError[srow] = vel + f / m * (rotational ? -1 : 1);
-
- btScalar minf = f < fd ? f : fd;
- btScalar maxf = f < fd ? fd : f;
- if (!rotational)
- {
- info->m_lowerLimit[srow] = minf > 0 ? 0 : minf;
- info->m_upperLimit[srow] = maxf < 0 ? 0 : maxf;
- }
- else
- {
- info->m_lowerLimit[srow] = -maxf > 0 ? 0 : -maxf;
- info->m_upperLimit[srow] = -minf < 0 ? 0 : -minf;
- }
-
- info->cfm[srow] = cfm;
- srow += info->rowskip;
- ++count;
- }
-
- return count;
-}
-
-//override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-//If no axis is provided, it uses the default axis for this constraint.
-void btGeneric6DofSpring2Constraint::setParam(int num, btScalar value, int axis)
-{
- if ((axis >= 0) && (axis < 3))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- m_linearLimits.m_stopERP[axis] = value;
- m_flags |= BT_6DOF_FLAGS_ERP_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- case BT_CONSTRAINT_STOP_CFM:
- m_linearLimits.m_stopCFM[axis] = value;
- m_flags |= BT_6DOF_FLAGS_CFM_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- case BT_CONSTRAINT_ERP:
- m_linearLimits.m_motorERP[axis] = value;
- m_flags |= BT_6DOF_FLAGS_ERP_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- case BT_CONSTRAINT_CFM:
- m_linearLimits.m_motorCFM[axis] = value;
- m_flags |= BT_6DOF_FLAGS_CFM_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else if ((axis >= 3) && (axis < 6))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- m_angularLimits[axis - 3].m_stopERP = value;
- m_flags |= BT_6DOF_FLAGS_ERP_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- case BT_CONSTRAINT_STOP_CFM:
- m_angularLimits[axis - 3].m_stopCFM = value;
- m_flags |= BT_6DOF_FLAGS_CFM_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- case BT_CONSTRAINT_ERP:
- m_angularLimits[axis - 3].m_motorERP = value;
- m_flags |= BT_6DOF_FLAGS_ERP_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- case BT_CONSTRAINT_CFM:
- m_angularLimits[axis - 3].m_motorCFM = value;
- m_flags |= BT_6DOF_FLAGS_CFM_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2);
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else
- {
- btAssertConstrParams(0);
- }
-}
-
-//return the local value of parameter
-btScalar btGeneric6DofSpring2Constraint::getParam(int num, int axis) const
-{
- btScalar retVal = 0;
- if ((axis >= 0) && (axis < 3))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_ERP_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_linearLimits.m_stopERP[axis];
- break;
- case BT_CONSTRAINT_STOP_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_linearLimits.m_stopCFM[axis];
- break;
- case BT_CONSTRAINT_ERP:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_ERP_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_linearLimits.m_motorERP[axis];
- break;
- case BT_CONSTRAINT_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_linearLimits.m_motorCFM[axis];
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else if ((axis >= 3) && (axis < 6))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_ERP_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_angularLimits[axis - 3].m_stopERP;
- break;
- case BT_CONSTRAINT_STOP_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_STOP2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_angularLimits[axis - 3].m_stopCFM;
- break;
- case BT_CONSTRAINT_ERP:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_ERP_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_angularLimits[axis - 3].m_motorERP;
- break;
- case BT_CONSTRAINT_CFM:
- btAssertConstrParams(m_flags & (BT_6DOF_FLAGS_CFM_MOTO2 << (axis * BT_6DOF_FLAGS_AXIS_SHIFT2)));
- retVal = m_angularLimits[axis - 3].m_motorCFM;
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else
- {
- btAssertConstrParams(0);
- }
- return retVal;
-}
-
-void btGeneric6DofSpring2Constraint::setAxis(const btVector3& axis1, const btVector3& axis2)
-{
- btVector3 zAxis = axis1.normalized();
- btVector3 yAxis = axis2.normalized();
- btVector3 xAxis = yAxis.cross(zAxis); // we want right coordinate system
-
- btTransform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
-
- // now get constraint frame in local coordinate systems
- m_frameInA = m_rbA.getCenterOfMassTransform().inverse() * frameInW;
- m_frameInB = m_rbB.getCenterOfMassTransform().inverse() * frameInW;
-
- calculateTransforms();
-}
-
-void btGeneric6DofSpring2Constraint::setBounce(int index, btScalar bounce)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_bounce[index] = bounce;
- else
- m_angularLimits[index - 3].m_bounce = bounce;
-}
-
-void btGeneric6DofSpring2Constraint::enableMotor(int index, bool onOff)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_enableMotor[index] = onOff;
- else
- m_angularLimits[index - 3].m_enableMotor = onOff;
-}
-
-void btGeneric6DofSpring2Constraint::setServo(int index, bool onOff)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_servoMotor[index] = onOff;
- else
- m_angularLimits[index - 3].m_servoMotor = onOff;
-}
-
-void btGeneric6DofSpring2Constraint::setTargetVelocity(int index, btScalar velocity)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_targetVelocity[index] = velocity;
- else
- m_angularLimits[index - 3].m_targetVelocity = velocity;
-}
-
-void btGeneric6DofSpring2Constraint::setServoTarget(int index, btScalar targetOrg)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- {
- m_linearLimits.m_servoTarget[index] = targetOrg;
- }
- else
- {
- //wrap between -PI and PI, see also
- //https://stackoverflow.com/questions/4633177/c-how-to-wrap-a-float-to-the-interval-pi-pi
-
- btScalar target = targetOrg + SIMD_PI;
- if (1)
- {
- btScalar m = target - SIMD_2_PI * std::floor(target / SIMD_2_PI);
- // handle boundary cases resulted from floating-point cut off:
- {
- if (m >= SIMD_2_PI)
- {
- target = 0;
- }
- else
- {
- if (m < 0)
- {
- if (SIMD_2_PI + m == SIMD_2_PI)
- target = 0;
- else
- target = SIMD_2_PI + m;
- }
- else
- {
- target = m;
- }
- }
- }
- target -= SIMD_PI;
- }
-
- m_angularLimits[index - 3].m_servoTarget = target;
- }
-}
-
-void btGeneric6DofSpring2Constraint::setMaxMotorForce(int index, btScalar force)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_maxMotorForce[index] = force;
- else
- m_angularLimits[index - 3].m_maxMotorForce = force;
-}
-
-void btGeneric6DofSpring2Constraint::enableSpring(int index, bool onOff)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_enableSpring[index] = onOff;
- else
- m_angularLimits[index - 3].m_enableSpring = onOff;
-}
-
-void btGeneric6DofSpring2Constraint::setStiffness(int index, btScalar stiffness, bool limitIfNeeded)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- {
- m_linearLimits.m_springStiffness[index] = stiffness;
- m_linearLimits.m_springStiffnessLimited[index] = limitIfNeeded;
- }
- else
- {
- m_angularLimits[index - 3].m_springStiffness = stiffness;
- m_angularLimits[index - 3].m_springStiffnessLimited = limitIfNeeded;
- }
-}
-
-void btGeneric6DofSpring2Constraint::setDamping(int index, btScalar damping, bool limitIfNeeded)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- {
- m_linearLimits.m_springDamping[index] = damping;
- m_linearLimits.m_springDampingLimited[index] = limitIfNeeded;
- }
- else
- {
- m_angularLimits[index - 3].m_springDamping = damping;
- m_angularLimits[index - 3].m_springDampingLimited = limitIfNeeded;
- }
-}
-
-void btGeneric6DofSpring2Constraint::setEquilibriumPoint()
-{
- calculateTransforms();
- int i;
- for (i = 0; i < 3; i++)
- m_linearLimits.m_equilibriumPoint[i] = m_calculatedLinearDiff[i];
- for (i = 0; i < 3; i++)
- m_angularLimits[i].m_equilibriumPoint = m_calculatedAxisAngleDiff[i];
-}
-
-void btGeneric6DofSpring2Constraint::setEquilibriumPoint(int index)
-{
- btAssert((index >= 0) && (index < 6));
- calculateTransforms();
- if (index < 3)
- m_linearLimits.m_equilibriumPoint[index] = m_calculatedLinearDiff[index];
- else
- m_angularLimits[index - 3].m_equilibriumPoint = m_calculatedAxisAngleDiff[index - 3];
-}
-
-void btGeneric6DofSpring2Constraint::setEquilibriumPoint(int index, btScalar val)
-{
- btAssert((index >= 0) && (index < 6));
- if (index < 3)
- m_linearLimits.m_equilibriumPoint[index] = val;
- else
- m_angularLimits[index - 3].m_equilibriumPoint = val;
-}
-
-//////////////////////////// btRotationalLimitMotor2 ////////////////////////////////////
-
-void btRotationalLimitMotor2::testLimitValue(btScalar test_value)
-{
- //we can't normalize the angles here because we would lost the sign that we use later, but it doesn't seem to be a problem
- if (m_loLimit > m_hiLimit)
- {
- m_currentLimit = 0;
- m_currentLimitError = btScalar(0.f);
- }
- else if (m_loLimit == m_hiLimit)
- {
- m_currentLimitError = test_value - m_loLimit;
- m_currentLimit = 3;
- }
- else
- {
- m_currentLimitError = test_value - m_loLimit;
- m_currentLimitErrorHi = test_value - m_hiLimit;
- m_currentLimit = 4;
- }
-}
-
-//////////////////////////// btTranslationalLimitMotor2 ////////////////////////////////////
-
-void btTranslationalLimitMotor2::testLimitValue(int limitIndex, btScalar test_value)
-{
- btScalar loLimit = m_lowerLimit[limitIndex];
- btScalar hiLimit = m_upperLimit[limitIndex];
- if (loLimit > hiLimit)
- {
- m_currentLimitError[limitIndex] = 0;
- m_currentLimit[limitIndex] = 0;
- }
- else if (loLimit == hiLimit)
- {
- m_currentLimitError[limitIndex] = test_value - loLimit;
- m_currentLimit[limitIndex] = 3;
- }
- else
- {
- m_currentLimitError[limitIndex] = test_value - loLimit;
- m_currentLimitErrorHi[limitIndex] = test_value - hiLimit;
- m_currentLimit[limitIndex] = 4;
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h
deleted file mode 100644
index c86dc373da..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h
+++ /dev/null
@@ -1,667 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-2014 May: btGeneric6DofSpring2Constraint is created from the original (2.82.2712) btGeneric6DofConstraint by Gabor Puhr and Tamas Umenhoffer
-Pros:
-- Much more accurate and stable in a lot of situation. (Especially when a sleeping chain of RBs connected with 6dof2 is pulled)
-- Stable and accurate spring with minimal energy loss that works with all of the solvers. (latter is not true for the original 6dof spring)
-- Servo motor functionality
-- Much more accurate bouncing. 0 really means zero bouncing (not true for the original 6odf) and there is only a minimal energy loss when the value is 1 (because of the solvers' precision)
-- Rotation order for the Euler system can be set. (One axis' freedom is still limited to pi/2)
-
-Cons:
-- It is slower than the original 6dof. There is no exact ratio, but half speed is a good estimation.
-- At bouncing the correct velocity is calculated, but not the correct position. (it is because of the solver can correct position or velocity, but not both.)
-*/
-
-/// 2009 March: btGeneric6DofConstraint refactored by Roman Ponomarev
-/// Added support for generic constraint solver through getInfo1/getInfo2 methods
-
-/*
-2007-09-09
-btGeneric6DofConstraint Refactored by Francisco Le?n
-email: projectileman@yahoo.com
-http://gimpact.sf.net
-*/
-
-#ifndef BT_GENERIC_6DOF_CONSTRAINT2_H
-#define BT_GENERIC_6DOF_CONSTRAINT2_H
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-
-class btRigidBody;
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btGeneric6DofSpring2ConstraintData2 btGeneric6DofSpring2ConstraintDoubleData2
-#define btGeneric6DofSpring2ConstraintDataName "btGeneric6DofSpring2ConstraintDoubleData2"
-#else
-#define btGeneric6DofSpring2ConstraintData2 btGeneric6DofSpring2ConstraintData
-#define btGeneric6DofSpring2ConstraintDataName "btGeneric6DofSpring2ConstraintData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-enum RotateOrder
-{
- RO_XYZ = 0,
- RO_XZY,
- RO_YXZ,
- RO_YZX,
- RO_ZXY,
- RO_ZYX
-};
-
-class btRotationalLimitMotor2
-{
-public:
- // upper < lower means free
- // upper == lower means locked
- // upper > lower means limited
- btScalar m_loLimit;
- btScalar m_hiLimit;
- btScalar m_bounce;
- btScalar m_stopERP;
- btScalar m_stopCFM;
- btScalar m_motorERP;
- btScalar m_motorCFM;
- bool m_enableMotor;
- btScalar m_targetVelocity;
- btScalar m_maxMotorForce;
- bool m_servoMotor;
- btScalar m_servoTarget;
- bool m_enableSpring;
- btScalar m_springStiffness;
- bool m_springStiffnessLimited;
- btScalar m_springDamping;
- bool m_springDampingLimited;
- btScalar m_equilibriumPoint;
-
- btScalar m_currentLimitError;
- btScalar m_currentLimitErrorHi;
- btScalar m_currentPosition;
- int m_currentLimit;
-
- btRotationalLimitMotor2()
- {
- m_loLimit = 1.0f;
- m_hiLimit = -1.0f;
- m_bounce = 0.0f;
- m_stopERP = 0.2f;
- m_stopCFM = 0.f;
- m_motorERP = 0.9f;
- m_motorCFM = 0.f;
- m_enableMotor = false;
- m_targetVelocity = 0;
- m_maxMotorForce = 6.0f;
- m_servoMotor = false;
- m_servoTarget = 0;
- m_enableSpring = false;
- m_springStiffness = 0;
- m_springStiffnessLimited = false;
- m_springDamping = 0;
- m_springDampingLimited = false;
- m_equilibriumPoint = 0;
-
- m_currentLimitError = 0;
- m_currentLimitErrorHi = 0;
- m_currentPosition = 0;
- m_currentLimit = 0;
- }
-
- btRotationalLimitMotor2(const btRotationalLimitMotor2& limot)
- {
- m_loLimit = limot.m_loLimit;
- m_hiLimit = limot.m_hiLimit;
- m_bounce = limot.m_bounce;
- m_stopERP = limot.m_stopERP;
- m_stopCFM = limot.m_stopCFM;
- m_motorERP = limot.m_motorERP;
- m_motorCFM = limot.m_motorCFM;
- m_enableMotor = limot.m_enableMotor;
- m_targetVelocity = limot.m_targetVelocity;
- m_maxMotorForce = limot.m_maxMotorForce;
- m_servoMotor = limot.m_servoMotor;
- m_servoTarget = limot.m_servoTarget;
- m_enableSpring = limot.m_enableSpring;
- m_springStiffness = limot.m_springStiffness;
- m_springStiffnessLimited = limot.m_springStiffnessLimited;
- m_springDamping = limot.m_springDamping;
- m_springDampingLimited = limot.m_springDampingLimited;
- m_equilibriumPoint = limot.m_equilibriumPoint;
-
- m_currentLimitError = limot.m_currentLimitError;
- m_currentLimitErrorHi = limot.m_currentLimitErrorHi;
- m_currentPosition = limot.m_currentPosition;
- m_currentLimit = limot.m_currentLimit;
- }
-
- bool isLimited()
- {
- if (m_loLimit > m_hiLimit) return false;
- return true;
- }
-
- void testLimitValue(btScalar test_value);
-};
-
-class btTranslationalLimitMotor2
-{
-public:
- // upper < lower means free
- // upper == lower means locked
- // upper > lower means limited
- btVector3 m_lowerLimit;
- btVector3 m_upperLimit;
- btVector3 m_bounce;
- btVector3 m_stopERP;
- btVector3 m_stopCFM;
- btVector3 m_motorERP;
- btVector3 m_motorCFM;
- bool m_enableMotor[3];
- bool m_servoMotor[3];
- bool m_enableSpring[3];
- btVector3 m_servoTarget;
- btVector3 m_springStiffness;
- bool m_springStiffnessLimited[3];
- btVector3 m_springDamping;
- bool m_springDampingLimited[3];
- btVector3 m_equilibriumPoint;
- btVector3 m_targetVelocity;
- btVector3 m_maxMotorForce;
-
- btVector3 m_currentLimitError;
- btVector3 m_currentLimitErrorHi;
- btVector3 m_currentLinearDiff;
- int m_currentLimit[3];
-
- btTranslationalLimitMotor2()
- {
- m_lowerLimit.setValue(0.f, 0.f, 0.f);
- m_upperLimit.setValue(0.f, 0.f, 0.f);
- m_bounce.setValue(0.f, 0.f, 0.f);
- m_stopERP.setValue(0.2f, 0.2f, 0.2f);
- m_stopCFM.setValue(0.f, 0.f, 0.f);
- m_motorERP.setValue(0.9f, 0.9f, 0.9f);
- m_motorCFM.setValue(0.f, 0.f, 0.f);
-
- m_currentLimitError.setValue(0.f, 0.f, 0.f);
- m_currentLimitErrorHi.setValue(0.f, 0.f, 0.f);
- m_currentLinearDiff.setValue(0.f, 0.f, 0.f);
-
- for (int i = 0; i < 3; i++)
- {
- m_enableMotor[i] = false;
- m_servoMotor[i] = false;
- m_enableSpring[i] = false;
- m_servoTarget[i] = btScalar(0.f);
- m_springStiffness[i] = btScalar(0.f);
- m_springStiffnessLimited[i] = false;
- m_springDamping[i] = btScalar(0.f);
- m_springDampingLimited[i] = false;
- m_equilibriumPoint[i] = btScalar(0.f);
- m_targetVelocity[i] = btScalar(0.f);
- m_maxMotorForce[i] = btScalar(0.f);
-
- m_currentLimit[i] = 0;
- }
- }
-
- btTranslationalLimitMotor2(const btTranslationalLimitMotor2& other)
- {
- m_lowerLimit = other.m_lowerLimit;
- m_upperLimit = other.m_upperLimit;
- m_bounce = other.m_bounce;
- m_stopERP = other.m_stopERP;
- m_stopCFM = other.m_stopCFM;
- m_motorERP = other.m_motorERP;
- m_motorCFM = other.m_motorCFM;
-
- m_currentLimitError = other.m_currentLimitError;
- m_currentLimitErrorHi = other.m_currentLimitErrorHi;
- m_currentLinearDiff = other.m_currentLinearDiff;
-
- for (int i = 0; i < 3; i++)
- {
- m_enableMotor[i] = other.m_enableMotor[i];
- m_servoMotor[i] = other.m_servoMotor[i];
- m_enableSpring[i] = other.m_enableSpring[i];
- m_servoTarget[i] = other.m_servoTarget[i];
- m_springStiffness[i] = other.m_springStiffness[i];
- m_springStiffnessLimited[i] = other.m_springStiffnessLimited[i];
- m_springDamping[i] = other.m_springDamping[i];
- m_springDampingLimited[i] = other.m_springDampingLimited[i];
- m_equilibriumPoint[i] = other.m_equilibriumPoint[i];
- m_targetVelocity[i] = other.m_targetVelocity[i];
- m_maxMotorForce[i] = other.m_maxMotorForce[i];
-
- m_currentLimit[i] = other.m_currentLimit[i];
- }
- }
-
- inline bool isLimited(int limitIndex)
- {
- return (m_upperLimit[limitIndex] >= m_lowerLimit[limitIndex]);
- }
-
- void testLimitValue(int limitIndex, btScalar test_value);
-};
-
-enum bt6DofFlags2
-{
- BT_6DOF_FLAGS_CFM_STOP2 = 1,
- BT_6DOF_FLAGS_ERP_STOP2 = 2,
- BT_6DOF_FLAGS_CFM_MOTO2 = 4,
- BT_6DOF_FLAGS_ERP_MOTO2 = 8,
- BT_6DOF_FLAGS_USE_INFINITE_ERROR = (1<<16)
-};
-#define BT_6DOF_FLAGS_AXIS_SHIFT2 4 // bits per axis
-
-ATTRIBUTE_ALIGNED16(class)
-btGeneric6DofSpring2Constraint : public btTypedConstraint
-{
-protected:
- btTransform m_frameInA;
- btTransform m_frameInB;
-
- btJacobianEntry m_jacLinear[3];
- btJacobianEntry m_jacAng[3];
-
- btTranslationalLimitMotor2 m_linearLimits;
- btRotationalLimitMotor2 m_angularLimits[3];
-
- RotateOrder m_rotateOrder;
-
-protected:
- btTransform m_calculatedTransformA;
- btTransform m_calculatedTransformB;
- btVector3 m_calculatedAxisAngleDiff;
- btVector3 m_calculatedAxis[3];
- btVector3 m_calculatedLinearDiff;
- btScalar m_factA;
- btScalar m_factB;
- bool m_hasStaticBody;
- int m_flags;
-
- btGeneric6DofSpring2Constraint& operator=(const btGeneric6DofSpring2Constraint&)
- {
- btAssert(0);
- return *this;
- }
-
- int setAngularLimits(btConstraintInfo2 * info, int row_offset, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB);
- int setLinearLimits(btConstraintInfo2 * info, int row, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB);
-
- void calculateLinearInfo();
- void calculateAngleInfo();
- void testAngularLimitMotor(int axis_index);
-
- void calculateJacobi(btRotationalLimitMotor2 * limot, const btTransform& transA, const btTransform& transB, btConstraintInfo2* info, int srow, btVector3& ax1, int rotational, int rotAllowed);
- int get_limit_motor_info2(btRotationalLimitMotor2 * limot,
- const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, const btVector3& angVelA, const btVector3& angVelB,
- btConstraintInfo2* info, int row, btVector3& ax1, int rotational, int rotAllowed = false);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btGeneric6DofSpring2Constraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ);
- btGeneric6DofSpring2Constraint(btRigidBody & rbB, const btTransform& frameInB, RotateOrder rotOrder = RO_XYZ);
-
- virtual void buildJacobian() {}
- virtual void getInfo1(btConstraintInfo1 * info);
- virtual void getInfo2(btConstraintInfo2 * info);
- virtual int calculateSerializeBufferSize() const;
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-
- btRotationalLimitMotor2* getRotationalLimitMotor(int index) { return &m_angularLimits[index]; }
- btTranslationalLimitMotor2* getTranslationalLimitMotor() { return &m_linearLimits; }
-
- // Calculates the global transform for the joint offset for body A an B, and also calculates the angle differences between the bodies.
- void calculateTransforms(const btTransform& transA, const btTransform& transB);
- void calculateTransforms();
-
- // Gets the global transform of the offset for body A
- const btTransform& getCalculatedTransformA() const { return m_calculatedTransformA; }
- // Gets the global transform of the offset for body B
- const btTransform& getCalculatedTransformB() const { return m_calculatedTransformB; }
-
- const btTransform& getFrameOffsetA() const { return m_frameInA; }
- const btTransform& getFrameOffsetB() const { return m_frameInB; }
-
- btTransform& getFrameOffsetA() { return m_frameInA; }
- btTransform& getFrameOffsetB() { return m_frameInB; }
-
- // Get the rotation axis in global coordinates ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously )
- btVector3 getAxis(int axis_index) const { return m_calculatedAxis[axis_index]; }
-
- // Get the relative Euler angle ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously )
- btScalar getAngle(int axis_index) const { return m_calculatedAxisAngleDiff[axis_index]; }
-
- // Get the relative position of the constraint pivot ( btGeneric6DofSpring2Constraint::calculateTransforms() must be called previously )
- btScalar getRelativePivotPosition(int axis_index) const { return m_calculatedLinearDiff[axis_index]; }
-
- void setFrames(const btTransform& frameA, const btTransform& frameB);
-
- void setLinearLowerLimit(const btVector3& linearLower) { m_linearLimits.m_lowerLimit = linearLower; }
- void getLinearLowerLimit(btVector3 & linearLower) { linearLower = m_linearLimits.m_lowerLimit; }
- void setLinearUpperLimit(const btVector3& linearUpper) { m_linearLimits.m_upperLimit = linearUpper; }
- void getLinearUpperLimit(btVector3 & linearUpper) { linearUpper = m_linearLimits.m_upperLimit; }
-
- void setAngularLowerLimit(const btVector3& angularLower)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_loLimit = btNormalizeAngle(angularLower[i]);
- }
-
- void setAngularLowerLimitReversed(const btVector3& angularLower)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_hiLimit = btNormalizeAngle(-angularLower[i]);
- }
-
- void getAngularLowerLimit(btVector3 & angularLower)
- {
- for (int i = 0; i < 3; i++)
- angularLower[i] = m_angularLimits[i].m_loLimit;
- }
-
- void getAngularLowerLimitReversed(btVector3 & angularLower)
- {
- for (int i = 0; i < 3; i++)
- angularLower[i] = -m_angularLimits[i].m_hiLimit;
- }
-
- void setAngularUpperLimit(const btVector3& angularUpper)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_hiLimit = btNormalizeAngle(angularUpper[i]);
- }
-
- void setAngularUpperLimitReversed(const btVector3& angularUpper)
- {
- for (int i = 0; i < 3; i++)
- m_angularLimits[i].m_loLimit = btNormalizeAngle(-angularUpper[i]);
- }
-
- void getAngularUpperLimit(btVector3 & angularUpper)
- {
- for (int i = 0; i < 3; i++)
- angularUpper[i] = m_angularLimits[i].m_hiLimit;
- }
-
- void getAngularUpperLimitReversed(btVector3 & angularUpper)
- {
- for (int i = 0; i < 3; i++)
- angularUpper[i] = -m_angularLimits[i].m_loLimit;
- }
-
- //first 3 are linear, next 3 are angular
-
- void setLimit(int axis, btScalar lo, btScalar hi)
- {
- if (axis < 3)
- {
- m_linearLimits.m_lowerLimit[axis] = lo;
- m_linearLimits.m_upperLimit[axis] = hi;
- }
- else
- {
- lo = btNormalizeAngle(lo);
- hi = btNormalizeAngle(hi);
- m_angularLimits[axis - 3].m_loLimit = lo;
- m_angularLimits[axis - 3].m_hiLimit = hi;
- }
- }
-
- void setLimitReversed(int axis, btScalar lo, btScalar hi)
- {
- if (axis < 3)
- {
- m_linearLimits.m_lowerLimit[axis] = lo;
- m_linearLimits.m_upperLimit[axis] = hi;
- }
- else
- {
- lo = btNormalizeAngle(lo);
- hi = btNormalizeAngle(hi);
- m_angularLimits[axis - 3].m_hiLimit = -lo;
- m_angularLimits[axis - 3].m_loLimit = -hi;
- }
- }
-
- bool isLimited(int limitIndex)
- {
- if (limitIndex < 3)
- {
- return m_linearLimits.isLimited(limitIndex);
- }
- return m_angularLimits[limitIndex - 3].isLimited();
- }
-
- void setRotationOrder(RotateOrder order) { m_rotateOrder = order; }
- RotateOrder getRotationOrder() { return m_rotateOrder; }
-
- void setAxis(const btVector3& axis1, const btVector3& axis2);
-
- void setBounce(int index, btScalar bounce);
-
- void enableMotor(int index, bool onOff);
- void setServo(int index, bool onOff); // set the type of the motor (servo or not) (the motor has to be turned on for servo also)
- void setTargetVelocity(int index, btScalar velocity);
- void setServoTarget(int index, btScalar target);
- void setMaxMotorForce(int index, btScalar force);
-
- void enableSpring(int index, bool onOff);
- void setStiffness(int index, btScalar stiffness, bool limitIfNeeded = true); // if limitIfNeeded is true the system will automatically limit the stiffness in necessary situations where otherwise the spring would move unrealistically too widely
- void setDamping(int index, btScalar damping, bool limitIfNeeded = true); // if limitIfNeeded is true the system will automatically limit the damping in necessary situations where otherwise the spring would blow up
- void setEquilibriumPoint(); // set the current constraint position/orientation as an equilibrium point for all DOF
- void setEquilibriumPoint(int index); // set the current constraint position/orientation as an equilibrium point for given DOF
- void setEquilibriumPoint(int index, btScalar val);
-
- //override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- //If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1);
- virtual btScalar getParam(int num, int axis = -1) const;
-
- static btScalar btGetMatrixElem(const btMatrix3x3& mat, int index);
- static bool matrixToEulerXYZ(const btMatrix3x3& mat, btVector3& xyz);
- static bool matrixToEulerXZY(const btMatrix3x3& mat, btVector3& xyz);
- static bool matrixToEulerYXZ(const btMatrix3x3& mat, btVector3& xyz);
- static bool matrixToEulerYZX(const btMatrix3x3& mat, btVector3& xyz);
- static bool matrixToEulerZXY(const btMatrix3x3& mat, btVector3& xyz);
- static bool matrixToEulerZYX(const btMatrix3x3& mat, btVector3& xyz);
-};
-
-struct btGeneric6DofSpring2ConstraintData
-{
- btTypedConstraintData m_typeConstraintData;
- btTransformFloatData m_rbAFrame;
- btTransformFloatData m_rbBFrame;
-
- btVector3FloatData m_linearUpperLimit;
- btVector3FloatData m_linearLowerLimit;
- btVector3FloatData m_linearBounce;
- btVector3FloatData m_linearStopERP;
- btVector3FloatData m_linearStopCFM;
- btVector3FloatData m_linearMotorERP;
- btVector3FloatData m_linearMotorCFM;
- btVector3FloatData m_linearTargetVelocity;
- btVector3FloatData m_linearMaxMotorForce;
- btVector3FloatData m_linearServoTarget;
- btVector3FloatData m_linearSpringStiffness;
- btVector3FloatData m_linearSpringDamping;
- btVector3FloatData m_linearEquilibriumPoint;
- char m_linearEnableMotor[4];
- char m_linearServoMotor[4];
- char m_linearEnableSpring[4];
- char m_linearSpringStiffnessLimited[4];
- char m_linearSpringDampingLimited[4];
- char m_padding1[4];
-
- btVector3FloatData m_angularUpperLimit;
- btVector3FloatData m_angularLowerLimit;
- btVector3FloatData m_angularBounce;
- btVector3FloatData m_angularStopERP;
- btVector3FloatData m_angularStopCFM;
- btVector3FloatData m_angularMotorERP;
- btVector3FloatData m_angularMotorCFM;
- btVector3FloatData m_angularTargetVelocity;
- btVector3FloatData m_angularMaxMotorForce;
- btVector3FloatData m_angularServoTarget;
- btVector3FloatData m_angularSpringStiffness;
- btVector3FloatData m_angularSpringDamping;
- btVector3FloatData m_angularEquilibriumPoint;
- char m_angularEnableMotor[4];
- char m_angularServoMotor[4];
- char m_angularEnableSpring[4];
- char m_angularSpringStiffnessLimited[4];
- char m_angularSpringDampingLimited[4];
-
- int m_rotateOrder;
-};
-
-struct btGeneric6DofSpring2ConstraintDoubleData2
-{
- btTypedConstraintDoubleData m_typeConstraintData;
- btTransformDoubleData m_rbAFrame;
- btTransformDoubleData m_rbBFrame;
-
- btVector3DoubleData m_linearUpperLimit;
- btVector3DoubleData m_linearLowerLimit;
- btVector3DoubleData m_linearBounce;
- btVector3DoubleData m_linearStopERP;
- btVector3DoubleData m_linearStopCFM;
- btVector3DoubleData m_linearMotorERP;
- btVector3DoubleData m_linearMotorCFM;
- btVector3DoubleData m_linearTargetVelocity;
- btVector3DoubleData m_linearMaxMotorForce;
- btVector3DoubleData m_linearServoTarget;
- btVector3DoubleData m_linearSpringStiffness;
- btVector3DoubleData m_linearSpringDamping;
- btVector3DoubleData m_linearEquilibriumPoint;
- char m_linearEnableMotor[4];
- char m_linearServoMotor[4];
- char m_linearEnableSpring[4];
- char m_linearSpringStiffnessLimited[4];
- char m_linearSpringDampingLimited[4];
- char m_padding1[4];
-
- btVector3DoubleData m_angularUpperLimit;
- btVector3DoubleData m_angularLowerLimit;
- btVector3DoubleData m_angularBounce;
- btVector3DoubleData m_angularStopERP;
- btVector3DoubleData m_angularStopCFM;
- btVector3DoubleData m_angularMotorERP;
- btVector3DoubleData m_angularMotorCFM;
- btVector3DoubleData m_angularTargetVelocity;
- btVector3DoubleData m_angularMaxMotorForce;
- btVector3DoubleData m_angularServoTarget;
- btVector3DoubleData m_angularSpringStiffness;
- btVector3DoubleData m_angularSpringDamping;
- btVector3DoubleData m_angularEquilibriumPoint;
- char m_angularEnableMotor[4];
- char m_angularServoMotor[4];
- char m_angularEnableSpring[4];
- char m_angularSpringStiffnessLimited[4];
- char m_angularSpringDampingLimited[4];
-
- int m_rotateOrder;
-};
-
-SIMD_FORCE_INLINE int btGeneric6DofSpring2Constraint::calculateSerializeBufferSize() const
-{
- return sizeof(btGeneric6DofSpring2ConstraintData2);
-}
-
-SIMD_FORCE_INLINE const char* btGeneric6DofSpring2Constraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btGeneric6DofSpring2ConstraintData2* dof = (btGeneric6DofSpring2ConstraintData2*)dataBuffer;
- btTypedConstraint::serialize(&dof->m_typeConstraintData, serializer);
-
- m_frameInA.serialize(dof->m_rbAFrame);
- m_frameInB.serialize(dof->m_rbBFrame);
-
- int i;
- for (i = 0; i < 3; i++)
- {
- dof->m_angularLowerLimit.m_floats[i] = m_angularLimits[i].m_loLimit;
- dof->m_angularUpperLimit.m_floats[i] = m_angularLimits[i].m_hiLimit;
- dof->m_angularBounce.m_floats[i] = m_angularLimits[i].m_bounce;
- dof->m_angularStopERP.m_floats[i] = m_angularLimits[i].m_stopERP;
- dof->m_angularStopCFM.m_floats[i] = m_angularLimits[i].m_stopCFM;
- dof->m_angularMotorERP.m_floats[i] = m_angularLimits[i].m_motorERP;
- dof->m_angularMotorCFM.m_floats[i] = m_angularLimits[i].m_motorCFM;
- dof->m_angularTargetVelocity.m_floats[i] = m_angularLimits[i].m_targetVelocity;
- dof->m_angularMaxMotorForce.m_floats[i] = m_angularLimits[i].m_maxMotorForce;
- dof->m_angularServoTarget.m_floats[i] = m_angularLimits[i].m_servoTarget;
- dof->m_angularSpringStiffness.m_floats[i] = m_angularLimits[i].m_springStiffness;
- dof->m_angularSpringDamping.m_floats[i] = m_angularLimits[i].m_springDamping;
- dof->m_angularEquilibriumPoint.m_floats[i] = m_angularLimits[i].m_equilibriumPoint;
- }
- dof->m_angularLowerLimit.m_floats[3] = 0;
- dof->m_angularUpperLimit.m_floats[3] = 0;
- dof->m_angularBounce.m_floats[3] = 0;
- dof->m_angularStopERP.m_floats[3] = 0;
- dof->m_angularStopCFM.m_floats[3] = 0;
- dof->m_angularMotorERP.m_floats[3] = 0;
- dof->m_angularMotorCFM.m_floats[3] = 0;
- dof->m_angularTargetVelocity.m_floats[3] = 0;
- dof->m_angularMaxMotorForce.m_floats[3] = 0;
- dof->m_angularServoTarget.m_floats[3] = 0;
- dof->m_angularSpringStiffness.m_floats[3] = 0;
- dof->m_angularSpringDamping.m_floats[3] = 0;
- dof->m_angularEquilibriumPoint.m_floats[3] = 0;
- for (i = 0; i < 4; i++)
- {
- dof->m_angularEnableMotor[i] = i < 3 ? (m_angularLimits[i].m_enableMotor ? 1 : 0) : 0;
- dof->m_angularServoMotor[i] = i < 3 ? (m_angularLimits[i].m_servoMotor ? 1 : 0) : 0;
- dof->m_angularEnableSpring[i] = i < 3 ? (m_angularLimits[i].m_enableSpring ? 1 : 0) : 0;
- dof->m_angularSpringStiffnessLimited[i] = i < 3 ? (m_angularLimits[i].m_springStiffnessLimited ? 1 : 0) : 0;
- dof->m_angularSpringDampingLimited[i] = i < 3 ? (m_angularLimits[i].m_springDampingLimited ? 1 : 0) : 0;
- }
-
- m_linearLimits.m_lowerLimit.serialize(dof->m_linearLowerLimit);
- m_linearLimits.m_upperLimit.serialize(dof->m_linearUpperLimit);
- m_linearLimits.m_bounce.serialize(dof->m_linearBounce);
- m_linearLimits.m_stopERP.serialize(dof->m_linearStopERP);
- m_linearLimits.m_stopCFM.serialize(dof->m_linearStopCFM);
- m_linearLimits.m_motorERP.serialize(dof->m_linearMotorERP);
- m_linearLimits.m_motorCFM.serialize(dof->m_linearMotorCFM);
- m_linearLimits.m_targetVelocity.serialize(dof->m_linearTargetVelocity);
- m_linearLimits.m_maxMotorForce.serialize(dof->m_linearMaxMotorForce);
- m_linearLimits.m_servoTarget.serialize(dof->m_linearServoTarget);
- m_linearLimits.m_springStiffness.serialize(dof->m_linearSpringStiffness);
- m_linearLimits.m_springDamping.serialize(dof->m_linearSpringDamping);
- m_linearLimits.m_equilibriumPoint.serialize(dof->m_linearEquilibriumPoint);
- for (i = 0; i < 4; i++)
- {
- dof->m_linearEnableMotor[i] = i < 3 ? (m_linearLimits.m_enableMotor[i] ? 1 : 0) : 0;
- dof->m_linearServoMotor[i] = i < 3 ? (m_linearLimits.m_servoMotor[i] ? 1 : 0) : 0;
- dof->m_linearEnableSpring[i] = i < 3 ? (m_linearLimits.m_enableSpring[i] ? 1 : 0) : 0;
- dof->m_linearSpringStiffnessLimited[i] = i < 3 ? (m_linearLimits.m_springStiffnessLimited[i] ? 1 : 0) : 0;
- dof->m_linearSpringDampingLimited[i] = i < 3 ? (m_linearLimits.m_springDampingLimited[i] ? 1 : 0) : 0;
- }
-
- dof->m_rotateOrder = m_rotateOrder;
-
- dof->m_padding1[0] = 0;
- dof->m_padding1[1] = 0;
- dof->m_padding1[2] = 0;
- dof->m_padding1[3] = 0;
-
- return btGeneric6DofSpring2ConstraintDataName;
-}
-
-#endif //BT_GENERIC_6DOF_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp
deleted file mode 100644
index 8baf52bcd1..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp
+++ /dev/null
@@ -1,169 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGeneric6DofSpringConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-
-btGeneric6DofSpringConstraint::btGeneric6DofSpringConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA)
- : btGeneric6DofConstraint(rbA, rbB, frameInA, frameInB, useLinearReferenceFrameA)
-{
- init();
-}
-
-btGeneric6DofSpringConstraint::btGeneric6DofSpringConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameB)
- : btGeneric6DofConstraint(rbB, frameInB, useLinearReferenceFrameB)
-{
- init();
-}
-
-void btGeneric6DofSpringConstraint::init()
-{
- m_objectType = D6_SPRING_CONSTRAINT_TYPE;
-
- for (int i = 0; i < 6; i++)
- {
- m_springEnabled[i] = false;
- m_equilibriumPoint[i] = btScalar(0.f);
- m_springStiffness[i] = btScalar(0.f);
- m_springDamping[i] = btScalar(1.f);
- }
-}
-
-void btGeneric6DofSpringConstraint::enableSpring(int index, bool onOff)
-{
- btAssert((index >= 0) && (index < 6));
- m_springEnabled[index] = onOff;
- if (index < 3)
- {
- m_linearLimits.m_enableMotor[index] = onOff;
- }
- else
- {
- m_angularLimits[index - 3].m_enableMotor = onOff;
- }
-}
-
-void btGeneric6DofSpringConstraint::setStiffness(int index, btScalar stiffness)
-{
- btAssert((index >= 0) && (index < 6));
- m_springStiffness[index] = stiffness;
-}
-
-void btGeneric6DofSpringConstraint::setDamping(int index, btScalar damping)
-{
- btAssert((index >= 0) && (index < 6));
- m_springDamping[index] = damping;
-}
-
-void btGeneric6DofSpringConstraint::setEquilibriumPoint()
-{
- calculateTransforms();
- int i;
-
- for (i = 0; i < 3; i++)
- {
- m_equilibriumPoint[i] = m_calculatedLinearDiff[i];
- }
- for (i = 0; i < 3; i++)
- {
- m_equilibriumPoint[i + 3] = m_calculatedAxisAngleDiff[i];
- }
-}
-
-void btGeneric6DofSpringConstraint::setEquilibriumPoint(int index)
-{
- btAssert((index >= 0) && (index < 6));
- calculateTransforms();
- if (index < 3)
- {
- m_equilibriumPoint[index] = m_calculatedLinearDiff[index];
- }
- else
- {
- m_equilibriumPoint[index] = m_calculatedAxisAngleDiff[index - 3];
- }
-}
-
-void btGeneric6DofSpringConstraint::setEquilibriumPoint(int index, btScalar val)
-{
- btAssert((index >= 0) && (index < 6));
- m_equilibriumPoint[index] = val;
-}
-
-void btGeneric6DofSpringConstraint::internalUpdateSprings(btConstraintInfo2* info)
-{
- // it is assumed that calculateTransforms() have been called before this call
- int i;
- //btVector3 relVel = m_rbB.getLinearVelocity() - m_rbA.getLinearVelocity();
- for (i = 0; i < 3; i++)
- {
- if (m_springEnabled[i])
- {
- // get current position of constraint
- btScalar currPos = m_calculatedLinearDiff[i];
- // calculate difference
- btScalar delta = currPos - m_equilibriumPoint[i];
- // spring force is (delta * m_stiffness) according to Hooke's Law
- btScalar force = delta * m_springStiffness[i];
- btScalar velFactor = info->fps * m_springDamping[i] / btScalar(info->m_numIterations);
- m_linearLimits.m_targetVelocity[i] = velFactor * force;
- m_linearLimits.m_maxMotorForce[i] = btFabs(force);
- }
- }
- for (i = 0; i < 3; i++)
- {
- if (m_springEnabled[i + 3])
- {
- // get current position of constraint
- btScalar currPos = m_calculatedAxisAngleDiff[i];
- // calculate difference
- btScalar delta = currPos - m_equilibriumPoint[i + 3];
- // spring force is (-delta * m_stiffness) according to Hooke's Law
- btScalar force = -delta * m_springStiffness[i + 3];
- btScalar velFactor = info->fps * m_springDamping[i + 3] / btScalar(info->m_numIterations);
- m_angularLimits[i].m_targetVelocity = velFactor * force;
- m_angularLimits[i].m_maxMotorForce = btFabs(force);
- }
- }
-}
-
-void btGeneric6DofSpringConstraint::getInfo2(btConstraintInfo2* info)
-{
- // this will be called by constraint solver at the constraint setup stage
- // set current motor parameters
- internalUpdateSprings(info);
- // do the rest of job for constraint setup
- btGeneric6DofConstraint::getInfo2(info);
-}
-
-void btGeneric6DofSpringConstraint::setAxis(const btVector3& axis1, const btVector3& axis2)
-{
- btVector3 zAxis = axis1.normalized();
- btVector3 yAxis = axis2.normalized();
- btVector3 xAxis = yAxis.cross(zAxis); // we want right coordinate system
-
- btTransform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
-
- // now get constraint frame in local coordinate systems
- m_frameInA = m_rbA.getCenterOfMassTransform().inverse() * frameInW;
- m_frameInB = m_rbB.getCenterOfMassTransform().inverse() * frameInW;
-
- calculateTransforms();
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h
deleted file mode 100644
index 02b9d4d05d..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GENERIC_6DOF_SPRING_CONSTRAINT_H
-#define BT_GENERIC_6DOF_SPRING_CONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btTypedConstraint.h"
-#include "btGeneric6DofConstraint.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btGeneric6DofSpringConstraintData2 btGeneric6DofSpringConstraintDoubleData2
-#define btGeneric6DofSpringConstraintDataName "btGeneric6DofSpringConstraintDoubleData2"
-#else
-#define btGeneric6DofSpringConstraintData2 btGeneric6DofSpringConstraintData
-#define btGeneric6DofSpringConstraintDataName "btGeneric6DofSpringConstraintData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-/// Generic 6 DOF constraint that allows to set spring motors to any translational and rotational DOF
-
-/// DOF index used in enableSpring() and setStiffness() means:
-/// 0 : translation X
-/// 1 : translation Y
-/// 2 : translation Z
-/// 3 : rotation X (3rd Euler rotational around new position of X axis, range [-PI+epsilon, PI-epsilon] )
-/// 4 : rotation Y (2nd Euler rotational around new position of Y axis, range [-PI/2+epsilon, PI/2-epsilon] )
-/// 5 : rotation Z (1st Euler rotational around Z axis, range [-PI+epsilon, PI-epsilon] )
-
-ATTRIBUTE_ALIGNED16(class)
-btGeneric6DofSpringConstraint : public btGeneric6DofConstraint
-{
-protected:
- bool m_springEnabled[6];
- btScalar m_equilibriumPoint[6];
- btScalar m_springStiffness[6];
- btScalar m_springDamping[6]; // between 0 and 1 (1 == no damping)
- void init();
- void internalUpdateSprings(btConstraintInfo2 * info);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btGeneric6DofSpringConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA);
- btGeneric6DofSpringConstraint(btRigidBody & rbB, const btTransform& frameInB, bool useLinearReferenceFrameB);
- void enableSpring(int index, bool onOff);
- void setStiffness(int index, btScalar stiffness);
- void setDamping(int index, btScalar damping);
- void setEquilibriumPoint(); // set the current constraint position/orientation as an equilibrium point for all DOF
- void setEquilibriumPoint(int index); // set the current constraint position/orientation as an equilibrium point for given DOF
- void setEquilibriumPoint(int index, btScalar val);
-
- bool isSpringEnabled(int index) const
- {
- return m_springEnabled[index];
- }
-
- btScalar getStiffness(int index) const
- {
- return m_springStiffness[index];
- }
-
- btScalar getDamping(int index) const
- {
- return m_springDamping[index];
- }
-
- btScalar getEquilibriumPoint(int index) const
- {
- return m_equilibriumPoint[index];
- }
-
- virtual void setAxis(const btVector3& axis1, const btVector3& axis2);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- virtual int calculateSerializeBufferSize() const;
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-struct btGeneric6DofSpringConstraintData
-{
- btGeneric6DofConstraintData m_6dofData;
-
- int m_springEnabled[6];
- float m_equilibriumPoint[6];
- float m_springStiffness[6];
- float m_springDamping[6];
-};
-
-struct btGeneric6DofSpringConstraintDoubleData2
-{
- btGeneric6DofConstraintDoubleData2 m_6dofData;
-
- int m_springEnabled[6];
- double m_equilibriumPoint[6];
- double m_springStiffness[6];
- double m_springDamping[6];
-};
-
-SIMD_FORCE_INLINE int btGeneric6DofSpringConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btGeneric6DofSpringConstraintData2);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btGeneric6DofSpringConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btGeneric6DofSpringConstraintData2* dof = (btGeneric6DofSpringConstraintData2*)dataBuffer;
- btGeneric6DofConstraint::serialize(&dof->m_6dofData, serializer);
-
- int i;
- for (i = 0; i < 6; i++)
- {
- dof->m_equilibriumPoint[i] = m_equilibriumPoint[i];
- dof->m_springDamping[i] = m_springDamping[i];
- dof->m_springEnabled[i] = m_springEnabled[i] ? 1 : 0;
- dof->m_springStiffness[i] = m_springStiffness[i];
- }
- return btGeneric6DofSpringConstraintDataName;
-}
-
-#endif // BT_GENERIC_6DOF_SPRING_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp
deleted file mode 100644
index 6507e1a0a7..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btHinge2Constraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-
-// constructor
-// anchor, axis1 and axis2 are in world coordinate system
-// axis1 must be orthogonal to axis2
-btHinge2Constraint::btHinge2Constraint(btRigidBody& rbA, btRigidBody& rbB, btVector3& anchor, btVector3& axis1, btVector3& axis2)
- : btGeneric6DofSpring2Constraint(rbA, rbB, btTransform::getIdentity(), btTransform::getIdentity(), RO_XYZ),
- m_anchor(anchor),
- m_axis1(axis1),
- m_axis2(axis2)
-{
- // build frame basis
- // 6DOF constraint uses Euler angles and to define limits
- // it is assumed that rotational order is :
- // Z - first, allowed limits are (-PI,PI);
- // new position of Y - second (allowed limits are (-PI/2 + epsilon, PI/2 - epsilon), where epsilon is a small positive number
- // used to prevent constraint from instability on poles;
- // new position of X, allowed limits are (-PI,PI);
- // So to simulate ODE Universal joint we should use parent axis as Z, child axis as Y and limit all other DOFs
- // Build the frame in world coordinate system first
- btVector3 zAxis = axis1.normalize();
- btVector3 xAxis = axis2.normalize();
- btVector3 yAxis = zAxis.cross(xAxis); // we want right coordinate system
- btTransform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
- frameInW.setOrigin(anchor);
- // now get constraint frame in local coordinate systems
- m_frameInA = rbA.getCenterOfMassTransform().inverse() * frameInW;
- m_frameInB = rbB.getCenterOfMassTransform().inverse() * frameInW;
- // sei limits
- setLinearLowerLimit(btVector3(0.f, 0.f, -1.f));
- setLinearUpperLimit(btVector3(0.f, 0.f, 1.f));
- // like front wheels of a car
- setAngularLowerLimit(btVector3(1.f, 0.f, -SIMD_HALF_PI * 0.5f));
- setAngularUpperLimit(btVector3(-1.f, 0.f, SIMD_HALF_PI * 0.5f));
- // enable suspension
- enableSpring(2, true);
- setStiffness(2, SIMD_PI * SIMD_PI * 4.f);
- setDamping(2, 0.01f);
- setEquilibriumPoint();
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h
deleted file mode 100644
index 95f604a890..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHinge2Constraint.h
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_HINGE2_CONSTRAINT_H
-#define BT_HINGE2_CONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btTypedConstraint.h"
-#include "btGeneric6DofSpring2Constraint.h"
-
-// Constraint similar to ODE Hinge2 Joint
-// has 3 degrees of frredom:
-// 2 rotational degrees of freedom, similar to Euler rotations around Z (axis 1) and X (axis 2)
-// 1 translational (along axis Z) with suspension spring
-
-ATTRIBUTE_ALIGNED16(class)
-btHinge2Constraint : public btGeneric6DofSpring2Constraint
-{
-protected:
- btVector3 m_anchor;
- btVector3 m_axis1;
- btVector3 m_axis2;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- // constructor
- // anchor, axis1 and axis2 are in world coordinate system
- // axis1 must be orthogonal to axis2
- btHinge2Constraint(btRigidBody & rbA, btRigidBody & rbB, btVector3 & anchor, btVector3 & axis1, btVector3 & axis2);
- // access
- const btVector3& getAnchor() { return m_calculatedTransformA.getOrigin(); }
- const btVector3& getAnchor2() { return m_calculatedTransformB.getOrigin(); }
- const btVector3& getAxis1() { return m_axis1; }
- const btVector3& getAxis2() { return m_axis2; }
- btScalar getAngle1() { return getAngle(2); }
- btScalar getAngle2() { return getAngle(0); }
- // limits
- void setUpperLimit(btScalar ang1max) { setAngularUpperLimit(btVector3(-1.f, 0.f, ang1max)); }
- void setLowerLimit(btScalar ang1min) { setAngularLowerLimit(btVector3(1.f, 0.f, ang1min)); }
-};
-
-#endif // BT_HINGE2_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
deleted file mode 100644
index aa6f69000d..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.cpp
+++ /dev/null
@@ -1,1083 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btHingeConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btMinMax.h"
-#include <new>
-#include "btSolverBody.h"
-
-//#define HINGE_USE_OBSOLETE_SOLVER false
-#define HINGE_USE_OBSOLETE_SOLVER false
-
-#define HINGE_USE_FRAME_OFFSET true
-
-#ifndef __SPU__
-
-btHingeConstraint::btHingeConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& pivotInA, const btVector3& pivotInB,
- const btVector3& axisInA, const btVector3& axisInB, bool useReferenceFrameA)
- : btTypedConstraint(HINGE_CONSTRAINT_TYPE, rbA, rbB),
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit(),
-#endif
- m_angularOnly(false),
- m_enableAngularMotor(false),
- m_useSolveConstraintObsolete(HINGE_USE_OBSOLETE_SOLVER),
- m_useOffsetForConstraintFrame(HINGE_USE_FRAME_OFFSET),
- m_useReferenceFrameA(useReferenceFrameA),
- m_flags(0),
- m_normalCFM(0),
- m_normalERP(0),
- m_stopCFM(0),
- m_stopERP(0)
-{
- m_rbAFrame.getOrigin() = pivotInA;
-
- // since no frame is given, assume this to be zero angle and just pick rb transform axis
- btVector3 rbAxisA1 = rbA.getCenterOfMassTransform().getBasis().getColumn(0);
-
- btVector3 rbAxisA2;
- btScalar projection = axisInA.dot(rbAxisA1);
- if (projection >= 1.0f - SIMD_EPSILON)
- {
- rbAxisA1 = -rbA.getCenterOfMassTransform().getBasis().getColumn(2);
- rbAxisA2 = rbA.getCenterOfMassTransform().getBasis().getColumn(1);
- }
- else if (projection <= -1.0f + SIMD_EPSILON)
- {
- rbAxisA1 = rbA.getCenterOfMassTransform().getBasis().getColumn(2);
- rbAxisA2 = rbA.getCenterOfMassTransform().getBasis().getColumn(1);
- }
- else
- {
- rbAxisA2 = axisInA.cross(rbAxisA1);
- rbAxisA1 = rbAxisA2.cross(axisInA);
- }
-
- m_rbAFrame.getBasis().setValue(rbAxisA1.getX(), rbAxisA2.getX(), axisInA.getX(),
- rbAxisA1.getY(), rbAxisA2.getY(), axisInA.getY(),
- rbAxisA1.getZ(), rbAxisA2.getZ(), axisInA.getZ());
-
- btQuaternion rotationArc = shortestArcQuat(axisInA, axisInB);
- btVector3 rbAxisB1 = quatRotate(rotationArc, rbAxisA1);
- btVector3 rbAxisB2 = axisInB.cross(rbAxisB1);
-
- m_rbBFrame.getOrigin() = pivotInB;
- m_rbBFrame.getBasis().setValue(rbAxisB1.getX(), rbAxisB2.getX(), axisInB.getX(),
- rbAxisB1.getY(), rbAxisB2.getY(), axisInB.getY(),
- rbAxisB1.getZ(), rbAxisB2.getZ(), axisInB.getZ());
-
-#ifndef _BT_USE_CENTER_LIMIT_
- //start with free
- m_lowerLimit = btScalar(1.0f);
- m_upperLimit = btScalar(-1.0f);
- m_biasFactor = 0.3f;
- m_relaxationFactor = 1.0f;
- m_limitSoftness = 0.9f;
- m_solveLimit = false;
-#endif
- m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f);
-}
-
-btHingeConstraint::btHingeConstraint(btRigidBody& rbA, const btVector3& pivotInA, const btVector3& axisInA, bool useReferenceFrameA)
- : btTypedConstraint(HINGE_CONSTRAINT_TYPE, rbA),
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit(),
-#endif
- m_angularOnly(false),
- m_enableAngularMotor(false),
- m_useSolveConstraintObsolete(HINGE_USE_OBSOLETE_SOLVER),
- m_useOffsetForConstraintFrame(HINGE_USE_FRAME_OFFSET),
- m_useReferenceFrameA(useReferenceFrameA),
- m_flags(0),
- m_normalCFM(0),
- m_normalERP(0),
- m_stopCFM(0),
- m_stopERP(0)
-{
- // since no frame is given, assume this to be zero angle and just pick rb transform axis
- // fixed axis in worldspace
- btVector3 rbAxisA1, rbAxisA2;
- btPlaneSpace1(axisInA, rbAxisA1, rbAxisA2);
-
- m_rbAFrame.getOrigin() = pivotInA;
- m_rbAFrame.getBasis().setValue(rbAxisA1.getX(), rbAxisA2.getX(), axisInA.getX(),
- rbAxisA1.getY(), rbAxisA2.getY(), axisInA.getY(),
- rbAxisA1.getZ(), rbAxisA2.getZ(), axisInA.getZ());
-
- btVector3 axisInB = rbA.getCenterOfMassTransform().getBasis() * axisInA;
-
- btQuaternion rotationArc = shortestArcQuat(axisInA, axisInB);
- btVector3 rbAxisB1 = quatRotate(rotationArc, rbAxisA1);
- btVector3 rbAxisB2 = axisInB.cross(rbAxisB1);
-
- m_rbBFrame.getOrigin() = rbA.getCenterOfMassTransform()(pivotInA);
- m_rbBFrame.getBasis().setValue(rbAxisB1.getX(), rbAxisB2.getX(), axisInB.getX(),
- rbAxisB1.getY(), rbAxisB2.getY(), axisInB.getY(),
- rbAxisB1.getZ(), rbAxisB2.getZ(), axisInB.getZ());
-
-#ifndef _BT_USE_CENTER_LIMIT_
- //start with free
- m_lowerLimit = btScalar(1.0f);
- m_upperLimit = btScalar(-1.0f);
- m_biasFactor = 0.3f;
- m_relaxationFactor = 1.0f;
- m_limitSoftness = 0.9f;
- m_solveLimit = false;
-#endif
- m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f);
-}
-
-btHingeConstraint::btHingeConstraint(btRigidBody& rbA, btRigidBody& rbB,
- const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA)
- : btTypedConstraint(HINGE_CONSTRAINT_TYPE, rbA, rbB), m_rbAFrame(rbAFrame), m_rbBFrame(rbBFrame),
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit(),
-#endif
- m_angularOnly(false),
- m_enableAngularMotor(false),
- m_useSolveConstraintObsolete(HINGE_USE_OBSOLETE_SOLVER),
- m_useOffsetForConstraintFrame(HINGE_USE_FRAME_OFFSET),
- m_useReferenceFrameA(useReferenceFrameA),
- m_flags(0),
- m_normalCFM(0),
- m_normalERP(0),
- m_stopCFM(0),
- m_stopERP(0)
-{
-#ifndef _BT_USE_CENTER_LIMIT_
- //start with free
- m_lowerLimit = btScalar(1.0f);
- m_upperLimit = btScalar(-1.0f);
- m_biasFactor = 0.3f;
- m_relaxationFactor = 1.0f;
- m_limitSoftness = 0.9f;
- m_solveLimit = false;
-#endif
- m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f);
-}
-
-btHingeConstraint::btHingeConstraint(btRigidBody& rbA, const btTransform& rbAFrame, bool useReferenceFrameA)
- : btTypedConstraint(HINGE_CONSTRAINT_TYPE, rbA), m_rbAFrame(rbAFrame), m_rbBFrame(rbAFrame),
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit(),
-#endif
- m_angularOnly(false),
- m_enableAngularMotor(false),
- m_useSolveConstraintObsolete(HINGE_USE_OBSOLETE_SOLVER),
- m_useOffsetForConstraintFrame(HINGE_USE_FRAME_OFFSET),
- m_useReferenceFrameA(useReferenceFrameA),
- m_flags(0),
- m_normalCFM(0),
- m_normalERP(0),
- m_stopCFM(0),
- m_stopERP(0)
-{
- ///not providing rigidbody B means implicitly using worldspace for body B
-
- m_rbBFrame.getOrigin() = m_rbA.getCenterOfMassTransform()(m_rbAFrame.getOrigin());
-#ifndef _BT_USE_CENTER_LIMIT_
- //start with free
- m_lowerLimit = btScalar(1.0f);
- m_upperLimit = btScalar(-1.0f);
- m_biasFactor = 0.3f;
- m_relaxationFactor = 1.0f;
- m_limitSoftness = 0.9f;
- m_solveLimit = false;
-#endif
- m_referenceSign = m_useReferenceFrameA ? btScalar(-1.f) : btScalar(1.f);
-}
-
-void btHingeConstraint::buildJacobian()
-{
- if (m_useSolveConstraintObsolete)
- {
- m_appliedImpulse = btScalar(0.);
- m_accMotorImpulse = btScalar(0.);
-
- if (!m_angularOnly)
- {
- btVector3 pivotAInW = m_rbA.getCenterOfMassTransform() * m_rbAFrame.getOrigin();
- btVector3 pivotBInW = m_rbB.getCenterOfMassTransform() * m_rbBFrame.getOrigin();
- btVector3 relPos = pivotBInW - pivotAInW;
-
- btVector3 normal[3];
- if (relPos.length2() > SIMD_EPSILON)
- {
- normal[0] = relPos.normalized();
- }
- else
- {
- normal[0].setValue(btScalar(1.0), 0, 0);
- }
-
- btPlaneSpace1(normal[0], normal[1], normal[2]);
-
- for (int i = 0; i < 3; i++)
- {
- new (&m_jac[i]) btJacobianEntry(
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- pivotAInW - m_rbA.getCenterOfMassPosition(),
- pivotBInW - m_rbB.getCenterOfMassPosition(),
- normal[i],
- m_rbA.getInvInertiaDiagLocal(),
- m_rbA.getInvMass(),
- m_rbB.getInvInertiaDiagLocal(),
- m_rbB.getInvMass());
- }
- }
-
- //calculate two perpendicular jointAxis, orthogonal to hingeAxis
- //these two jointAxis require equal angular velocities for both bodies
-
- //this is unused for now, it's a todo
- btVector3 jointAxis0local;
- btVector3 jointAxis1local;
-
- btPlaneSpace1(m_rbAFrame.getBasis().getColumn(2), jointAxis0local, jointAxis1local);
-
- btVector3 jointAxis0 = getRigidBodyA().getCenterOfMassTransform().getBasis() * jointAxis0local;
- btVector3 jointAxis1 = getRigidBodyA().getCenterOfMassTransform().getBasis() * jointAxis1local;
- btVector3 hingeAxisWorld = getRigidBodyA().getCenterOfMassTransform().getBasis() * m_rbAFrame.getBasis().getColumn(2);
-
- new (&m_jacAng[0]) btJacobianEntry(jointAxis0,
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- m_rbA.getInvInertiaDiagLocal(),
- m_rbB.getInvInertiaDiagLocal());
-
- new (&m_jacAng[1]) btJacobianEntry(jointAxis1,
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- m_rbA.getInvInertiaDiagLocal(),
- m_rbB.getInvInertiaDiagLocal());
-
- new (&m_jacAng[2]) btJacobianEntry(hingeAxisWorld,
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- m_rbA.getInvInertiaDiagLocal(),
- m_rbB.getInvInertiaDiagLocal());
-
- // clear accumulator
- m_accLimitImpulse = btScalar(0.);
-
- // test angular limit
- testLimit(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-
- //Compute K = J*W*J' for hinge axis
- btVector3 axisA = getRigidBodyA().getCenterOfMassTransform().getBasis() * m_rbAFrame.getBasis().getColumn(2);
- m_kHinge = 1.0f / (getRigidBodyA().computeAngularImpulseDenominator(axisA) +
- getRigidBodyB().computeAngularImpulseDenominator(axisA));
- }
-}
-
-#endif //__SPU__
-
-static inline btScalar btNormalizeAnglePositive(btScalar angle)
-{
- return btFmod(btFmod(angle, btScalar(2.0 * SIMD_PI)) + btScalar(2.0 * SIMD_PI), btScalar(2.0 * SIMD_PI));
-}
-
-static btScalar btShortestAngularDistance(btScalar accAngle, btScalar curAngle)
-{
- btScalar result = btNormalizeAngle(btNormalizeAnglePositive(btNormalizeAnglePositive(curAngle) -
- btNormalizeAnglePositive(accAngle)));
- return result;
-}
-
-static btScalar btShortestAngleUpdate(btScalar accAngle, btScalar curAngle)
-{
- btScalar tol(0.3);
- btScalar result = btShortestAngularDistance(accAngle, curAngle);
-
- if (btFabs(result) > tol)
- return curAngle;
- else
- return accAngle + result;
-
- return curAngle;
-}
-
-btScalar btHingeAccumulatedAngleConstraint::getAccumulatedHingeAngle()
-{
- btScalar hingeAngle = getHingeAngle();
- m_accumulatedAngle = btShortestAngleUpdate(m_accumulatedAngle, hingeAngle);
- return m_accumulatedAngle;
-}
-void btHingeAccumulatedAngleConstraint::setAccumulatedHingeAngle(btScalar accAngle)
-{
- m_accumulatedAngle = accAngle;
-}
-
-void btHingeAccumulatedAngleConstraint::getInfo1(btConstraintInfo1* info)
-{
- //update m_accumulatedAngle
- btScalar curHingeAngle = getHingeAngle();
- m_accumulatedAngle = btShortestAngleUpdate(m_accumulatedAngle, curHingeAngle);
-
- btHingeConstraint::getInfo1(info);
-}
-
-void btHingeConstraint::getInfo1(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- info->m_numConstraintRows = 5; // Fixed 3 linear + 2 angular
- info->nub = 1;
- //always add the row, to avoid computation (data is not available yet)
- //prepare constraint
- testLimit(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
- if (getSolveLimit() || getEnableAngularMotor())
- {
- info->m_numConstraintRows++; // limit 3rd anguar as well
- info->nub--;
- }
- }
-}
-
-void btHingeConstraint::getInfo1NonVirtual(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- //always add the 'limit' row, to avoid computation (data is not available yet)
- info->m_numConstraintRows = 6; // Fixed 3 linear + 2 angular
- info->nub = 0;
- }
-}
-
-void btHingeConstraint::getInfo2(btConstraintInfo2* info)
-{
- if (m_useOffsetForConstraintFrame)
- {
- getInfo2InternalUsingFrameOffset(info, m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform(), m_rbA.getAngularVelocity(), m_rbB.getAngularVelocity());
- }
- else
- {
- getInfo2Internal(info, m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform(), m_rbA.getAngularVelocity(), m_rbB.getAngularVelocity());
- }
-}
-
-void btHingeConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB)
-{
- ///the regular (virtual) implementation getInfo2 already performs 'testLimit' during getInfo1, so we need to do it now
- testLimit(transA, transB);
-
- getInfo2Internal(info, transA, transB, angVelA, angVelB);
-}
-
-void btHingeConstraint::getInfo2Internal(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB)
-{
- btAssert(!m_useSolveConstraintObsolete);
- int i, skip = info->rowskip;
- // transforms in world space
- btTransform trA = transA * m_rbAFrame;
- btTransform trB = transB * m_rbBFrame;
- // pivot point
- btVector3 pivotAInW = trA.getOrigin();
- btVector3 pivotBInW = trB.getOrigin();
-#if 0
- if (0)
- {
- for (i=0;i<6;i++)
- {
- info->m_J1linearAxis[i*skip]=0;
- info->m_J1linearAxis[i*skip+1]=0;
- info->m_J1linearAxis[i*skip+2]=0;
-
- info->m_J1angularAxis[i*skip]=0;
- info->m_J1angularAxis[i*skip+1]=0;
- info->m_J1angularAxis[i*skip+2]=0;
-
- info->m_J2linearAxis[i*skip]=0;
- info->m_J2linearAxis[i*skip+1]=0;
- info->m_J2linearAxis[i*skip+2]=0;
-
- info->m_J2angularAxis[i*skip]=0;
- info->m_J2angularAxis[i*skip+1]=0;
- info->m_J2angularAxis[i*skip+2]=0;
-
- info->m_constraintError[i*skip]=0.f;
- }
- }
-#endif //#if 0
- // linear (all fixed)
-
- if (!m_angularOnly)
- {
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[skip + 1] = 1;
- info->m_J1linearAxis[2 * skip + 2] = 1;
-
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[skip + 1] = -1;
- info->m_J2linearAxis[2 * skip + 2] = -1;
- }
-
- btVector3 a1 = pivotAInW - transA.getOrigin();
- {
- btVector3* angular0 = (btVector3*)(info->m_J1angularAxis);
- btVector3* angular1 = (btVector3*)(info->m_J1angularAxis + skip);
- btVector3* angular2 = (btVector3*)(info->m_J1angularAxis + 2 * skip);
- btVector3 a1neg = -a1;
- a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
- btVector3 a2 = pivotBInW - transB.getOrigin();
- {
- btVector3* angular0 = (btVector3*)(info->m_J2angularAxis);
- btVector3* angular1 = (btVector3*)(info->m_J2angularAxis + skip);
- btVector3* angular2 = (btVector3*)(info->m_J2angularAxis + 2 * skip);
- a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
- // linear RHS
- btScalar normalErp = (m_flags & BT_HINGE_FLAGS_ERP_NORM) ? m_normalERP : info->erp;
-
- btScalar k = info->fps * normalErp;
- if (!m_angularOnly)
- {
- for (i = 0; i < 3; i++)
- {
- info->m_constraintError[i * skip] = k * (pivotBInW[i] - pivotAInW[i]);
- }
- }
- // make rotations around X and Y equal
- // the hinge axis should be the only unconstrained
- // rotational axis, the angular velocity of the two bodies perpendicular to
- // the hinge axis should be equal. thus the constraint equations are
- // p*w1 - p*w2 = 0
- // q*w1 - q*w2 = 0
- // where p and q are unit vectors normal to the hinge axis, and w1 and w2
- // are the angular velocity vectors of the two bodies.
- // get hinge axis (Z)
- btVector3 ax1 = trA.getBasis().getColumn(2);
- // get 2 orthos to hinge axis (X, Y)
- btVector3 p = trA.getBasis().getColumn(0);
- btVector3 q = trA.getBasis().getColumn(1);
- // set the two hinge angular rows
- int s3 = 3 * info->rowskip;
- int s4 = 4 * info->rowskip;
-
- info->m_J1angularAxis[s3 + 0] = p[0];
- info->m_J1angularAxis[s3 + 1] = p[1];
- info->m_J1angularAxis[s3 + 2] = p[2];
- info->m_J1angularAxis[s4 + 0] = q[0];
- info->m_J1angularAxis[s4 + 1] = q[1];
- info->m_J1angularAxis[s4 + 2] = q[2];
-
- info->m_J2angularAxis[s3 + 0] = -p[0];
- info->m_J2angularAxis[s3 + 1] = -p[1];
- info->m_J2angularAxis[s3 + 2] = -p[2];
- info->m_J2angularAxis[s4 + 0] = -q[0];
- info->m_J2angularAxis[s4 + 1] = -q[1];
- info->m_J2angularAxis[s4 + 2] = -q[2];
- // compute the right hand side of the constraint equation. set relative
- // body velocities along p and q to bring the hinge back into alignment.
- // if ax1,ax2 are the unit length hinge axes as computed from body1 and
- // body2, we need to rotate both bodies along the axis u = (ax1 x ax2).
- // if `theta' is the angle between ax1 and ax2, we need an angular velocity
- // along u to cover angle erp*theta in one step :
- // |angular_velocity| = angle/time = erp*theta / stepsize
- // = (erp*fps) * theta
- // angular_velocity = |angular_velocity| * (ax1 x ax2) / |ax1 x ax2|
- // = (erp*fps) * theta * (ax1 x ax2) / sin(theta)
- // ...as ax1 and ax2 are unit length. if theta is smallish,
- // theta ~= sin(theta), so
- // angular_velocity = (erp*fps) * (ax1 x ax2)
- // ax1 x ax2 is in the plane space of ax1, so we project the angular
- // velocity to p and q to find the right hand side.
- btVector3 ax2 = trB.getBasis().getColumn(2);
- btVector3 u = ax1.cross(ax2);
- info->m_constraintError[s3] = k * u.dot(p);
- info->m_constraintError[s4] = k * u.dot(q);
- // check angular limits
- int nrow = 4; // last filled row
- int srow;
- btScalar limit_err = btScalar(0.0);
- int limit = 0;
- if (getSolveLimit())
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- limit_err = m_limit.getCorrection() * m_referenceSign;
-#else
- limit_err = m_correction * m_referenceSign;
-#endif
- limit = (limit_err > btScalar(0.0)) ? 1 : 2;
- }
- // if the hinge has joint limits or motor, add in the extra row
- bool powered = getEnableAngularMotor();
- if (limit || powered)
- {
- nrow++;
- srow = nrow * info->rowskip;
- info->m_J1angularAxis[srow + 0] = ax1[0];
- info->m_J1angularAxis[srow + 1] = ax1[1];
- info->m_J1angularAxis[srow + 2] = ax1[2];
-
- info->m_J2angularAxis[srow + 0] = -ax1[0];
- info->m_J2angularAxis[srow + 1] = -ax1[1];
- info->m_J2angularAxis[srow + 2] = -ax1[2];
-
- btScalar lostop = getLowerLimit();
- btScalar histop = getUpperLimit();
- if (limit && (lostop == histop))
- { // the joint motor is ineffective
- powered = false;
- }
- info->m_constraintError[srow] = btScalar(0.0f);
- btScalar currERP = (m_flags & BT_HINGE_FLAGS_ERP_STOP) ? m_stopERP : normalErp;
- if (powered)
- {
- if (m_flags & BT_HINGE_FLAGS_CFM_NORM)
- {
- info->cfm[srow] = m_normalCFM;
- }
- btScalar mot_fact = getMotorFactor(m_hingeAngle, lostop, histop, m_motorTargetVelocity, info->fps * currERP);
- info->m_constraintError[srow] += mot_fact * m_motorTargetVelocity * m_referenceSign;
- info->m_lowerLimit[srow] = -m_maxMotorImpulse;
- info->m_upperLimit[srow] = m_maxMotorImpulse;
- }
- if (limit)
- {
- k = info->fps * currERP;
- info->m_constraintError[srow] += k * limit_err;
- if (m_flags & BT_HINGE_FLAGS_CFM_STOP)
- {
- info->cfm[srow] = m_stopCFM;
- }
- if (lostop == histop)
- {
- // limited low and high simultaneously
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else if (limit == 1)
- { // low limit
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else
- { // high limit
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- // bounce (we'll use slider parameter abs(1.0 - m_dampingLimAng) for that)
-#ifdef _BT_USE_CENTER_LIMIT_
- btScalar bounce = m_limit.getRelaxationFactor();
-#else
- btScalar bounce = m_relaxationFactor;
-#endif
- if (bounce > btScalar(0.0))
- {
- btScalar vel = angVelA.dot(ax1);
- vel -= angVelB.dot(ax1);
- // only apply bounce if the velocity is incoming, and if the
- // resulting c[] exceeds what we already have.
- if (limit == 1)
- { // low limit
- if (vel < 0)
- {
- btScalar newc = -bounce * vel;
- if (newc > info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- else
- { // high limit - all those computations are reversed
- if (vel > 0)
- {
- btScalar newc = -bounce * vel;
- if (newc < info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- }
-#ifdef _BT_USE_CENTER_LIMIT_
- info->m_constraintError[srow] *= m_limit.getBiasFactor();
-#else
- info->m_constraintError[srow] *= m_biasFactor;
-#endif
- } // if(limit)
- } // if angular limit or powered
-}
-
-void btHingeConstraint::setFrames(const btTransform& frameA, const btTransform& frameB)
-{
- m_rbAFrame = frameA;
- m_rbBFrame = frameB;
- buildJacobian();
-}
-
-void btHingeConstraint::updateRHS(btScalar timeStep)
-{
- (void)timeStep;
-}
-
-btScalar btHingeConstraint::getHingeAngle()
-{
- return getHingeAngle(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-}
-
-btScalar btHingeConstraint::getHingeAngle(const btTransform& transA, const btTransform& transB)
-{
- const btVector3 refAxis0 = transA.getBasis() * m_rbAFrame.getBasis().getColumn(0);
- const btVector3 refAxis1 = transA.getBasis() * m_rbAFrame.getBasis().getColumn(1);
- const btVector3 swingAxis = transB.getBasis() * m_rbBFrame.getBasis().getColumn(1);
- // btScalar angle = btAtan2Fast(swingAxis.dot(refAxis0), swingAxis.dot(refAxis1));
- btScalar angle = btAtan2(swingAxis.dot(refAxis0), swingAxis.dot(refAxis1));
- return m_referenceSign * angle;
-}
-
-void btHingeConstraint::testLimit(const btTransform& transA, const btTransform& transB)
-{
- // Compute limit information
- m_hingeAngle = getHingeAngle(transA, transB);
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit.test(m_hingeAngle);
-#else
- m_correction = btScalar(0.);
- m_limitSign = btScalar(0.);
- m_solveLimit = false;
- if (m_lowerLimit <= m_upperLimit)
- {
- m_hingeAngle = btAdjustAngleToLimits(m_hingeAngle, m_lowerLimit, m_upperLimit);
- if (m_hingeAngle <= m_lowerLimit)
- {
- m_correction = (m_lowerLimit - m_hingeAngle);
- m_limitSign = 1.0f;
- m_solveLimit = true;
- }
- else if (m_hingeAngle >= m_upperLimit)
- {
- m_correction = m_upperLimit - m_hingeAngle;
- m_limitSign = -1.0f;
- m_solveLimit = true;
- }
- }
-#endif
- return;
-}
-
-static btVector3 vHinge(0, 0, btScalar(1));
-
-void btHingeConstraint::setMotorTarget(const btQuaternion& qAinB, btScalar dt)
-{
- // convert target from body to constraint space
- btQuaternion qConstraint = m_rbBFrame.getRotation().inverse() * qAinB * m_rbAFrame.getRotation();
- qConstraint.normalize();
-
- // extract "pure" hinge component
- btVector3 vNoHinge = quatRotate(qConstraint, vHinge);
- vNoHinge.normalize();
- btQuaternion qNoHinge = shortestArcQuat(vHinge, vNoHinge);
- btQuaternion qHinge = qNoHinge.inverse() * qConstraint;
- qHinge.normalize();
-
- // compute angular target, clamped to limits
- btScalar targetAngle = qHinge.getAngle();
- if (targetAngle > SIMD_PI) // long way around. flip quat and recalculate.
- {
- qHinge = -(qHinge);
- targetAngle = qHinge.getAngle();
- }
- if (qHinge.getZ() < 0)
- targetAngle = -targetAngle;
-
- setMotorTarget(targetAngle, dt);
-}
-
-void btHingeConstraint::setMotorTarget(btScalar targetAngle, btScalar dt)
-{
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit.fit(targetAngle);
-#else
- if (m_lowerLimit < m_upperLimit)
- {
- if (targetAngle < m_lowerLimit)
- targetAngle = m_lowerLimit;
- else if (targetAngle > m_upperLimit)
- targetAngle = m_upperLimit;
- }
-#endif
- // compute angular velocity
- btScalar curAngle = getHingeAngle(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
- btScalar dAngle = targetAngle - curAngle;
- m_motorTargetVelocity = dAngle / dt;
-}
-
-void btHingeConstraint::getInfo2InternalUsingFrameOffset(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB)
-{
- btAssert(!m_useSolveConstraintObsolete);
- int i, s = info->rowskip;
- // transforms in world space
- btTransform trA = transA * m_rbAFrame;
- btTransform trB = transB * m_rbBFrame;
- // pivot point
-// btVector3 pivotAInW = trA.getOrigin();
-// btVector3 pivotBInW = trB.getOrigin();
-#if 1
- // difference between frames in WCS
- btVector3 ofs = trB.getOrigin() - trA.getOrigin();
- // now get weight factors depending on masses
- btScalar miA = getRigidBodyA().getInvMass();
- btScalar miB = getRigidBodyB().getInvMass();
- bool hasStaticBody = (miA < SIMD_EPSILON) || (miB < SIMD_EPSILON);
- btScalar miS = miA + miB;
- btScalar factA, factB;
- if (miS > btScalar(0.f))
- {
- factA = miB / miS;
- }
- else
- {
- factA = btScalar(0.5f);
- }
- factB = btScalar(1.0f) - factA;
- // get the desired direction of hinge axis
- // as weighted sum of Z-orthos of frameA and frameB in WCS
- btVector3 ax1A = trA.getBasis().getColumn(2);
- btVector3 ax1B = trB.getBasis().getColumn(2);
- btVector3 ax1 = ax1A * factA + ax1B * factB;
- if (ax1.length2()<SIMD_EPSILON)
- {
- factA=0.f;
- factB=1.f;
- ax1 = ax1A * factA + ax1B * factB;
- }
- ax1.normalize();
- // fill first 3 rows
- // we want: velA + wA x relA == velB + wB x relB
- btTransform bodyA_trans = transA;
- btTransform bodyB_trans = transB;
- int s0 = 0;
- int s1 = s;
- int s2 = s * 2;
- int nrow = 2; // last filled row
- btVector3 tmpA, tmpB, relA, relB, p, q;
- // get vector from bodyB to frameB in WCS
- relB = trB.getOrigin() - bodyB_trans.getOrigin();
- // get its projection to hinge axis
- btVector3 projB = ax1 * relB.dot(ax1);
- // get vector directed from bodyB to hinge axis (and orthogonal to it)
- btVector3 orthoB = relB - projB;
- // same for bodyA
- relA = trA.getOrigin() - bodyA_trans.getOrigin();
- btVector3 projA = ax1 * relA.dot(ax1);
- btVector3 orthoA = relA - projA;
- btVector3 totalDist = projA - projB;
- // get offset vectors relA and relB
- relA = orthoA + totalDist * factA;
- relB = orthoB - totalDist * factB;
- // now choose average ortho to hinge axis
- p = orthoB * factA + orthoA * factB;
- btScalar len2 = p.length2();
- if (len2 > SIMD_EPSILON)
- {
- p /= btSqrt(len2);
- }
- else
- {
- p = trA.getBasis().getColumn(1);
- }
- // make one more ortho
- q = ax1.cross(p);
- // fill three rows
- tmpA = relA.cross(p);
- tmpB = relB.cross(p);
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s0 + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s0 + i] = -tmpB[i];
- tmpA = relA.cross(q);
- tmpB = relB.cross(q);
- if (hasStaticBody && getSolveLimit())
- { // to make constraint between static and dynamic objects more rigid
- // remove wA (or wB) from equation if angular limit is hit
- tmpB *= factB;
- tmpA *= factA;
- }
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s1 + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s1 + i] = -tmpB[i];
- tmpA = relA.cross(ax1);
- tmpB = relB.cross(ax1);
- if (hasStaticBody)
- { // to make constraint between static and dynamic objects more rigid
- // remove wA (or wB) from equation
- tmpB *= factB;
- tmpA *= factA;
- }
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s2 + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s2 + i] = -tmpB[i];
-
- btScalar normalErp = (m_flags & BT_HINGE_FLAGS_ERP_NORM) ? m_normalERP : info->erp;
- btScalar k = info->fps * normalErp;
-
- if (!m_angularOnly)
- {
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s0 + i] = p[i];
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s1 + i] = q[i];
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s2 + i] = ax1[i];
-
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s0 + i] = -p[i];
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s1 + i] = -q[i];
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s2 + i] = -ax1[i];
-
- // compute three elements of right hand side
-
- btScalar rhs = k * p.dot(ofs);
- info->m_constraintError[s0] = rhs;
- rhs = k * q.dot(ofs);
- info->m_constraintError[s1] = rhs;
- rhs = k * ax1.dot(ofs);
- info->m_constraintError[s2] = rhs;
- }
- // the hinge axis should be the only unconstrained
- // rotational axis, the angular velocity of the two bodies perpendicular to
- // the hinge axis should be equal. thus the constraint equations are
- // p*w1 - p*w2 = 0
- // q*w1 - q*w2 = 0
- // where p and q are unit vectors normal to the hinge axis, and w1 and w2
- // are the angular velocity vectors of the two bodies.
- int s3 = 3 * s;
- int s4 = 4 * s;
- info->m_J1angularAxis[s3 + 0] = p[0];
- info->m_J1angularAxis[s3 + 1] = p[1];
- info->m_J1angularAxis[s3 + 2] = p[2];
- info->m_J1angularAxis[s4 + 0] = q[0];
- info->m_J1angularAxis[s4 + 1] = q[1];
- info->m_J1angularAxis[s4 + 2] = q[2];
-
- info->m_J2angularAxis[s3 + 0] = -p[0];
- info->m_J2angularAxis[s3 + 1] = -p[1];
- info->m_J2angularAxis[s3 + 2] = -p[2];
- info->m_J2angularAxis[s4 + 0] = -q[0];
- info->m_J2angularAxis[s4 + 1] = -q[1];
- info->m_J2angularAxis[s4 + 2] = -q[2];
- // compute the right hand side of the constraint equation. set relative
- // body velocities along p and q to bring the hinge back into alignment.
- // if ax1A,ax1B are the unit length hinge axes as computed from bodyA and
- // bodyB, we need to rotate both bodies along the axis u = (ax1 x ax2).
- // if "theta" is the angle between ax1 and ax2, we need an angular velocity
- // along u to cover angle erp*theta in one step :
- // |angular_velocity| = angle/time = erp*theta / stepsize
- // = (erp*fps) * theta
- // angular_velocity = |angular_velocity| * (ax1 x ax2) / |ax1 x ax2|
- // = (erp*fps) * theta * (ax1 x ax2) / sin(theta)
- // ...as ax1 and ax2 are unit length. if theta is smallish,
- // theta ~= sin(theta), so
- // angular_velocity = (erp*fps) * (ax1 x ax2)
- // ax1 x ax2 is in the plane space of ax1, so we project the angular
- // velocity to p and q to find the right hand side.
- k = info->fps * normalErp; //??
-
- btVector3 u = ax1A.cross(ax1B);
- info->m_constraintError[s3] = k * u.dot(p);
- info->m_constraintError[s4] = k * u.dot(q);
-#endif
- // check angular limits
- nrow = 4; // last filled row
- int srow;
- btScalar limit_err = btScalar(0.0);
- int limit = 0;
- if (getSolveLimit())
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- limit_err = m_limit.getCorrection() * m_referenceSign;
-#else
- limit_err = m_correction * m_referenceSign;
-#endif
- limit = (limit_err > btScalar(0.0)) ? 1 : 2;
- }
- // if the hinge has joint limits or motor, add in the extra row
- bool powered = getEnableAngularMotor();
- if (limit || powered)
- {
- nrow++;
- srow = nrow * info->rowskip;
- info->m_J1angularAxis[srow + 0] = ax1[0];
- info->m_J1angularAxis[srow + 1] = ax1[1];
- info->m_J1angularAxis[srow + 2] = ax1[2];
-
- info->m_J2angularAxis[srow + 0] = -ax1[0];
- info->m_J2angularAxis[srow + 1] = -ax1[1];
- info->m_J2angularAxis[srow + 2] = -ax1[2];
-
- btScalar lostop = getLowerLimit();
- btScalar histop = getUpperLimit();
- if (limit && (lostop == histop))
- { // the joint motor is ineffective
- powered = false;
- }
- info->m_constraintError[srow] = btScalar(0.0f);
- btScalar currERP = (m_flags & BT_HINGE_FLAGS_ERP_STOP) ? m_stopERP : normalErp;
- if (powered)
- {
- if (m_flags & BT_HINGE_FLAGS_CFM_NORM)
- {
- info->cfm[srow] = m_normalCFM;
- }
- btScalar mot_fact = getMotorFactor(m_hingeAngle, lostop, histop, m_motorTargetVelocity, info->fps * currERP);
- info->m_constraintError[srow] += mot_fact * m_motorTargetVelocity * m_referenceSign;
- info->m_lowerLimit[srow] = -m_maxMotorImpulse;
- info->m_upperLimit[srow] = m_maxMotorImpulse;
- }
- if (limit)
- {
- k = info->fps * currERP;
- info->m_constraintError[srow] += k * limit_err;
- if (m_flags & BT_HINGE_FLAGS_CFM_STOP)
- {
- info->cfm[srow] = m_stopCFM;
- }
- if (lostop == histop)
- {
- // limited low and high simultaneously
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else if (limit == 1)
- { // low limit
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else
- { // high limit
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- // bounce (we'll use slider parameter abs(1.0 - m_dampingLimAng) for that)
-#ifdef _BT_USE_CENTER_LIMIT_
- btScalar bounce = m_limit.getRelaxationFactor();
-#else
- btScalar bounce = m_relaxationFactor;
-#endif
- if (bounce > btScalar(0.0))
- {
- btScalar vel = angVelA.dot(ax1);
- vel -= angVelB.dot(ax1);
- // only apply bounce if the velocity is incoming, and if the
- // resulting c[] exceeds what we already have.
- if (limit == 1)
- { // low limit
- if (vel < 0)
- {
- btScalar newc = -bounce * vel;
- if (newc > info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- else
- { // high limit - all those computations are reversed
- if (vel > 0)
- {
- btScalar newc = -bounce * vel;
- if (newc < info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- }
-#ifdef _BT_USE_CENTER_LIMIT_
- info->m_constraintError[srow] *= m_limit.getBiasFactor();
-#else
- info->m_constraintError[srow] *= m_biasFactor;
-#endif
- } // if(limit)
- } // if angular limit or powered
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void btHingeConstraint::setParam(int num, btScalar value, int axis)
-{
- if ((axis == -1) || (axis == 5))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- m_stopERP = value;
- m_flags |= BT_HINGE_FLAGS_ERP_STOP;
- break;
- case BT_CONSTRAINT_STOP_CFM:
- m_stopCFM = value;
- m_flags |= BT_HINGE_FLAGS_CFM_STOP;
- break;
- case BT_CONSTRAINT_CFM:
- m_normalCFM = value;
- m_flags |= BT_HINGE_FLAGS_CFM_NORM;
- break;
- case BT_CONSTRAINT_ERP:
- m_normalERP = value;
- m_flags |= BT_HINGE_FLAGS_ERP_NORM;
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else
- {
- btAssertConstrParams(0);
- }
-}
-
-///return the local value of parameter
-btScalar btHingeConstraint::getParam(int num, int axis) const
-{
- btScalar retVal = 0;
- if ((axis == -1) || (axis == 5))
- {
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- btAssertConstrParams(m_flags & BT_HINGE_FLAGS_ERP_STOP);
- retVal = m_stopERP;
- break;
- case BT_CONSTRAINT_STOP_CFM:
- btAssertConstrParams(m_flags & BT_HINGE_FLAGS_CFM_STOP);
- retVal = m_stopCFM;
- break;
- case BT_CONSTRAINT_CFM:
- btAssertConstrParams(m_flags & BT_HINGE_FLAGS_CFM_NORM);
- retVal = m_normalCFM;
- break;
- case BT_CONSTRAINT_ERP:
- btAssertConstrParams(m_flags & BT_HINGE_FLAGS_ERP_NORM);
- retVal = m_normalERP;
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- else
- {
- btAssertConstrParams(0);
- }
- return retVal;
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h
deleted file mode 100644
index c7509e30af..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btHingeConstraint.h
+++ /dev/null
@@ -1,480 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/* Hinge Constraint by Dirk Gregorius. Limits added by Marcus Hennix at Starbreeze Studios */
-
-#ifndef BT_HINGECONSTRAINT_H
-#define BT_HINGECONSTRAINT_H
-
-#define _BT_USE_CENTER_LIMIT_ 1
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-
-class btRigidBody;
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btHingeConstraintData btHingeConstraintDoubleData2 //rename to 2 for backwards compatibility, so we can still load the 'btHingeConstraintDoubleData' version
-#define btHingeConstraintDataName "btHingeConstraintDoubleData2"
-#else
-#define btHingeConstraintData btHingeConstraintFloatData
-#define btHingeConstraintDataName "btHingeConstraintFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-enum btHingeFlags
-{
- BT_HINGE_FLAGS_CFM_STOP = 1,
- BT_HINGE_FLAGS_ERP_STOP = 2,
- BT_HINGE_FLAGS_CFM_NORM = 4,
- BT_HINGE_FLAGS_ERP_NORM = 8
-};
-
-/// hinge constraint between two rigidbodies each with a pivotpoint that descibes the axis location in local space
-/// axis defines the orientation of the hinge axis
-ATTRIBUTE_ALIGNED16(class)
-btHingeConstraint : public btTypedConstraint
-{
-#ifdef IN_PARALLELL_SOLVER
-public:
-#endif
- btJacobianEntry m_jac[3]; //3 orthogonal linear constraints
- btJacobianEntry m_jacAng[3]; //2 orthogonal angular constraints+ 1 for limit/motor
-
- btTransform m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransform m_rbBFrame;
-
- btScalar m_motorTargetVelocity;
- btScalar m_maxMotorImpulse;
-
-#ifdef _BT_USE_CENTER_LIMIT_
- btAngularLimit m_limit;
-#else
- btScalar m_lowerLimit;
- btScalar m_upperLimit;
- btScalar m_limitSign;
- btScalar m_correction;
-
- btScalar m_limitSoftness;
- btScalar m_biasFactor;
- btScalar m_relaxationFactor;
-
- bool m_solveLimit;
-#endif
-
- btScalar m_kHinge;
-
- btScalar m_accLimitImpulse;
- btScalar m_hingeAngle;
- btScalar m_referenceSign;
-
- bool m_angularOnly;
- bool m_enableAngularMotor;
- bool m_useSolveConstraintObsolete;
- bool m_useOffsetForConstraintFrame;
- bool m_useReferenceFrameA;
-
- btScalar m_accMotorImpulse;
-
- int m_flags;
- btScalar m_normalCFM;
- btScalar m_normalERP;
- btScalar m_stopCFM;
- btScalar m_stopERP;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btHingeConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& pivotInA, const btVector3& pivotInB, const btVector3& axisInA, const btVector3& axisInB, bool useReferenceFrameA = false);
-
- btHingeConstraint(btRigidBody & rbA, const btVector3& pivotInA, const btVector3& axisInA, bool useReferenceFrameA = false);
-
- btHingeConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA = false);
-
- btHingeConstraint(btRigidBody & rbA, const btTransform& rbAFrame, bool useReferenceFrameA = false);
-
- virtual void buildJacobian();
-
- virtual void getInfo1(btConstraintInfo1 * info);
-
- void getInfo1NonVirtual(btConstraintInfo1 * info);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB);
-
- void getInfo2Internal(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB);
- void getInfo2InternalUsingFrameOffset(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& angVelA, const btVector3& angVelB);
-
- void updateRHS(btScalar timeStep);
-
- const btRigidBody& getRigidBodyA() const
- {
- return m_rbA;
- }
- const btRigidBody& getRigidBodyB() const
- {
- return m_rbB;
- }
-
- btRigidBody& getRigidBodyA()
- {
- return m_rbA;
- }
-
- btRigidBody& getRigidBodyB()
- {
- return m_rbB;
- }
-
- btTransform& getFrameOffsetA()
- {
- return m_rbAFrame;
- }
-
- btTransform& getFrameOffsetB()
- {
- return m_rbBFrame;
- }
-
- void setFrames(const btTransform& frameA, const btTransform& frameB);
-
- void setAngularOnly(bool angularOnly)
- {
- m_angularOnly = angularOnly;
- }
-
- void enableAngularMotor(bool enableMotor, btScalar targetVelocity, btScalar maxMotorImpulse)
- {
- m_enableAngularMotor = enableMotor;
- m_motorTargetVelocity = targetVelocity;
- m_maxMotorImpulse = maxMotorImpulse;
- }
-
- // extra motor API, including ability to set a target rotation (as opposed to angular velocity)
- // note: setMotorTarget sets angular velocity under the hood, so you must call it every tick to
- // maintain a given angular target.
- void enableMotor(bool enableMotor) { m_enableAngularMotor = enableMotor; }
- void setMaxMotorImpulse(btScalar maxMotorImpulse) { m_maxMotorImpulse = maxMotorImpulse; }
- void setMotorTargetVelocity(btScalar motorTargetVelocity) { m_motorTargetVelocity = motorTargetVelocity; }
- void setMotorTarget(const btQuaternion& qAinB, btScalar dt); // qAinB is rotation of body A wrt body B.
- void setMotorTarget(btScalar targetAngle, btScalar dt);
-
- void setLimit(btScalar low, btScalar high, btScalar _softness = 0.9f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f)
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- m_limit.set(low, high, _softness, _biasFactor, _relaxationFactor);
-#else
- m_lowerLimit = btNormalizeAngle(low);
- m_upperLimit = btNormalizeAngle(high);
- m_limitSoftness = _softness;
- m_biasFactor = _biasFactor;
- m_relaxationFactor = _relaxationFactor;
-#endif
- }
-
- btScalar getLimitSoftness() const
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getSoftness();
-#else
- return m_limitSoftness;
-#endif
- }
-
- btScalar getLimitBiasFactor() const
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getBiasFactor();
-#else
- return m_biasFactor;
-#endif
- }
-
- btScalar getLimitRelaxationFactor() const
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getRelaxationFactor();
-#else
- return m_relaxationFactor;
-#endif
- }
-
- void setAxis(btVector3 & axisInA)
- {
- btVector3 rbAxisA1, rbAxisA2;
- btPlaneSpace1(axisInA, rbAxisA1, rbAxisA2);
- btVector3 pivotInA = m_rbAFrame.getOrigin();
- // m_rbAFrame.getOrigin() = pivotInA;
- m_rbAFrame.getBasis().setValue(rbAxisA1.getX(), rbAxisA2.getX(), axisInA.getX(),
- rbAxisA1.getY(), rbAxisA2.getY(), axisInA.getY(),
- rbAxisA1.getZ(), rbAxisA2.getZ(), axisInA.getZ());
-
- btVector3 axisInB = m_rbA.getCenterOfMassTransform().getBasis() * axisInA;
-
- btQuaternion rotationArc = shortestArcQuat(axisInA, axisInB);
- btVector3 rbAxisB1 = quatRotate(rotationArc, rbAxisA1);
- btVector3 rbAxisB2 = axisInB.cross(rbAxisB1);
-
- m_rbBFrame.getOrigin() = m_rbB.getCenterOfMassTransform().inverse()(m_rbA.getCenterOfMassTransform()(pivotInA));
-
- m_rbBFrame.getBasis().setValue(rbAxisB1.getX(), rbAxisB2.getX(), axisInB.getX(),
- rbAxisB1.getY(), rbAxisB2.getY(), axisInB.getY(),
- rbAxisB1.getZ(), rbAxisB2.getZ(), axisInB.getZ());
- m_rbBFrame.getBasis() = m_rbB.getCenterOfMassTransform().getBasis().inverse() * m_rbBFrame.getBasis();
- }
-
- bool hasLimit() const
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getHalfRange() > 0;
-#else
- return m_lowerLimit <= m_upperLimit;
-#endif
- }
-
- btScalar getLowerLimit() const
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getLow();
-#else
- return m_lowerLimit;
-#endif
- }
-
- btScalar getUpperLimit() const
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getHigh();
-#else
- return m_upperLimit;
-#endif
- }
-
- ///The getHingeAngle gives the hinge angle in range [-PI,PI]
- btScalar getHingeAngle();
-
- btScalar getHingeAngle(const btTransform& transA, const btTransform& transB);
-
- void testLimit(const btTransform& transA, const btTransform& transB);
-
- const btTransform& getAFrame() const { return m_rbAFrame; };
- const btTransform& getBFrame() const { return m_rbBFrame; };
-
- btTransform& getAFrame() { return m_rbAFrame; };
- btTransform& getBFrame() { return m_rbBFrame; };
-
- inline int getSolveLimit()
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.isLimit();
-#else
- return m_solveLimit;
-#endif
- }
-
- inline btScalar getLimitSign()
- {
-#ifdef _BT_USE_CENTER_LIMIT_
- return m_limit.getSign();
-#else
- return m_limitSign;
-#endif
- }
-
- inline bool getAngularOnly()
- {
- return m_angularOnly;
- }
- inline bool getEnableAngularMotor()
- {
- return m_enableAngularMotor;
- }
- inline btScalar getMotorTargetVelocity()
- {
- return m_motorTargetVelocity;
- }
- inline btScalar getMaxMotorImpulse()
- {
- return m_maxMotorImpulse;
- }
- // access for UseFrameOffset
- bool getUseFrameOffset() { return m_useOffsetForConstraintFrame; }
- void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; }
- // access for UseReferenceFrameA
- bool getUseReferenceFrameA() const { return m_useReferenceFrameA; }
- void setUseReferenceFrameA(bool useReferenceFrameA) { m_useReferenceFrameA = useReferenceFrameA; }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1);
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const;
-
- virtual int getFlags() const
- {
- return m_flags;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-//only for backward compatibility
-#ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-///this structure is not used, except for loading pre-2.82 .bullet files
-struct btHingeConstraintDoubleData
-{
- btTypedConstraintData m_typeConstraintData;
- btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformDoubleData m_rbBFrame;
- int m_useReferenceFrameA;
- int m_angularOnly;
- int m_enableAngularMotor;
- float m_motorTargetVelocity;
- float m_maxMotorImpulse;
-
- float m_lowerLimit;
- float m_upperLimit;
- float m_limitSoftness;
- float m_biasFactor;
- float m_relaxationFactor;
-};
-#endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-
-///The getAccumulatedHingeAngle returns the accumulated hinge angle, taking rotation across the -PI/PI boundary into account
-ATTRIBUTE_ALIGNED16(class)
-btHingeAccumulatedAngleConstraint : public btHingeConstraint
-{
-protected:
- btScalar m_accumulatedAngle;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btHingeAccumulatedAngleConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& pivotInA, const btVector3& pivotInB, const btVector3& axisInA, const btVector3& axisInB, bool useReferenceFrameA = false)
- : btHingeConstraint(rbA, rbB, pivotInA, pivotInB, axisInA, axisInB, useReferenceFrameA)
- {
- m_accumulatedAngle = getHingeAngle();
- }
-
- btHingeAccumulatedAngleConstraint(btRigidBody & rbA, const btVector3& pivotInA, const btVector3& axisInA, bool useReferenceFrameA = false)
- : btHingeConstraint(rbA, pivotInA, axisInA, useReferenceFrameA)
- {
- m_accumulatedAngle = getHingeAngle();
- }
-
- btHingeAccumulatedAngleConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& rbAFrame, const btTransform& rbBFrame, bool useReferenceFrameA = false)
- : btHingeConstraint(rbA, rbB, rbAFrame, rbBFrame, useReferenceFrameA)
- {
- m_accumulatedAngle = getHingeAngle();
- }
-
- btHingeAccumulatedAngleConstraint(btRigidBody & rbA, const btTransform& rbAFrame, bool useReferenceFrameA = false)
- : btHingeConstraint(rbA, rbAFrame, useReferenceFrameA)
- {
- m_accumulatedAngle = getHingeAngle();
- }
- btScalar getAccumulatedHingeAngle();
- void setAccumulatedHingeAngle(btScalar accAngle);
- virtual void getInfo1(btConstraintInfo1 * info);
-};
-
-struct btHingeConstraintFloatData
-{
- btTypedConstraintData m_typeConstraintData;
- btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformFloatData m_rbBFrame;
- int m_useReferenceFrameA;
- int m_angularOnly;
-
- int m_enableAngularMotor;
- float m_motorTargetVelocity;
- float m_maxMotorImpulse;
-
- float m_lowerLimit;
- float m_upperLimit;
- float m_limitSoftness;
- float m_biasFactor;
- float m_relaxationFactor;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btHingeConstraintDoubleData2
-{
- btTypedConstraintDoubleData m_typeConstraintData;
- btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformDoubleData m_rbBFrame;
- int m_useReferenceFrameA;
- int m_angularOnly;
- int m_enableAngularMotor;
- double m_motorTargetVelocity;
- double m_maxMotorImpulse;
-
- double m_lowerLimit;
- double m_upperLimit;
- double m_limitSoftness;
- double m_biasFactor;
- double m_relaxationFactor;
- char m_padding1[4];
-};
-
-SIMD_FORCE_INLINE int btHingeConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btHingeConstraintData);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btHingeConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btHingeConstraintData* hingeData = (btHingeConstraintData*)dataBuffer;
- btTypedConstraint::serialize(&hingeData->m_typeConstraintData, serializer);
-
- m_rbAFrame.serialize(hingeData->m_rbAFrame);
- m_rbBFrame.serialize(hingeData->m_rbBFrame);
-
- hingeData->m_angularOnly = m_angularOnly;
- hingeData->m_enableAngularMotor = m_enableAngularMotor;
- hingeData->m_maxMotorImpulse = float(m_maxMotorImpulse);
- hingeData->m_motorTargetVelocity = float(m_motorTargetVelocity);
- hingeData->m_useReferenceFrameA = m_useReferenceFrameA;
-#ifdef _BT_USE_CENTER_LIMIT_
- hingeData->m_lowerLimit = float(m_limit.getLow());
- hingeData->m_upperLimit = float(m_limit.getHigh());
- hingeData->m_limitSoftness = float(m_limit.getSoftness());
- hingeData->m_biasFactor = float(m_limit.getBiasFactor());
- hingeData->m_relaxationFactor = float(m_limit.getRelaxationFactor());
-#else
- hingeData->m_lowerLimit = float(m_lowerLimit);
- hingeData->m_upperLimit = float(m_upperLimit);
- hingeData->m_limitSoftness = float(m_limitSoftness);
- hingeData->m_biasFactor = float(m_biasFactor);
- hingeData->m_relaxationFactor = float(m_relaxationFactor);
-#endif
-
- // Fill padding with zeros to appease msan.
-#ifdef BT_USE_DOUBLE_PRECISION
- hingeData->m_padding1[0] = 0;
- hingeData->m_padding1[1] = 0;
- hingeData->m_padding1[2] = 0;
- hingeData->m_padding1[3] = 0;
-#endif
-
- return btHingeConstraintDataName;
-}
-
-#endif //BT_HINGECONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h
deleted file mode 100644
index 438456fe51..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btJacobianEntry.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_JACOBIAN_ENTRY_H
-#define BT_JACOBIAN_ENTRY_H
-
-#include "LinearMath/btMatrix3x3.h"
-
-//notes:
-// Another memory optimization would be to store m_1MinvJt in the remaining 3 w components
-// which makes the btJacobianEntry memory layout 16 bytes
-// if you only are interested in angular part, just feed massInvA and massInvB zero
-
-/// Jacobian entry is an abstraction that allows to describe constraints
-/// it can be used in combination with a constraint solver
-/// Can be used to relate the effect of an impulse to the constraint error
-ATTRIBUTE_ALIGNED16(class)
-btJacobianEntry
-{
-public:
- btJacobianEntry(){};
- //constraint between two different rigidbodies
- btJacobianEntry(
- const btMatrix3x3& world2A,
- const btMatrix3x3& world2B,
- const btVector3& rel_pos1, const btVector3& rel_pos2,
- const btVector3& jointAxis,
- const btVector3& inertiaInvA,
- const btScalar massInvA,
- const btVector3& inertiaInvB,
- const btScalar massInvB)
- : m_linearJointAxis(jointAxis)
- {
- m_aJ = world2A * (rel_pos1.cross(m_linearJointAxis));
- m_bJ = world2B * (rel_pos2.cross(-m_linearJointAxis));
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = inertiaInvB * m_bJ;
- m_Adiag = massInvA + m_0MinvJt.dot(m_aJ) + massInvB + m_1MinvJt.dot(m_bJ);
-
- btAssert(m_Adiag > btScalar(0.0));
- }
-
- //angular constraint between two different rigidbodies
- btJacobianEntry(const btVector3& jointAxis,
- const btMatrix3x3& world2A,
- const btMatrix3x3& world2B,
- const btVector3& inertiaInvA,
- const btVector3& inertiaInvB)
- : m_linearJointAxis(btVector3(btScalar(0.), btScalar(0.), btScalar(0.)))
- {
- m_aJ = world2A * jointAxis;
- m_bJ = world2B * -jointAxis;
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = inertiaInvB * m_bJ;
- m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ);
-
- btAssert(m_Adiag > btScalar(0.0));
- }
-
- //angular constraint between two different rigidbodies
- btJacobianEntry(const btVector3& axisInA,
- const btVector3& axisInB,
- const btVector3& inertiaInvA,
- const btVector3& inertiaInvB)
- : m_linearJointAxis(btVector3(btScalar(0.), btScalar(0.), btScalar(0.))), m_aJ(axisInA), m_bJ(-axisInB)
- {
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = inertiaInvB * m_bJ;
- m_Adiag = m_0MinvJt.dot(m_aJ) + m_1MinvJt.dot(m_bJ);
-
- btAssert(m_Adiag > btScalar(0.0));
- }
-
- //constraint on one rigidbody
- btJacobianEntry(
- const btMatrix3x3& world2A,
- const btVector3& rel_pos1, const btVector3& rel_pos2,
- const btVector3& jointAxis,
- const btVector3& inertiaInvA,
- const btScalar massInvA)
- : m_linearJointAxis(jointAxis)
- {
- m_aJ = world2A * (rel_pos1.cross(jointAxis));
- m_bJ = world2A * (rel_pos2.cross(-jointAxis));
- m_0MinvJt = inertiaInvA * m_aJ;
- m_1MinvJt = btVector3(btScalar(0.), btScalar(0.), btScalar(0.));
- m_Adiag = massInvA + m_0MinvJt.dot(m_aJ);
-
- btAssert(m_Adiag > btScalar(0.0));
- }
-
- btScalar getDiagonal() const { return m_Adiag; }
-
- // for two constraints on the same rigidbody (for example vehicle friction)
- btScalar getNonDiagonal(const btJacobianEntry& jacB, const btScalar massInvA) const
- {
- const btJacobianEntry& jacA = *this;
- btScalar lin = massInvA * jacA.m_linearJointAxis.dot(jacB.m_linearJointAxis);
- btScalar ang = jacA.m_0MinvJt.dot(jacB.m_aJ);
- return lin + ang;
- }
-
- // for two constraints on sharing two same rigidbodies (for example two contact points between two rigidbodies)
- btScalar getNonDiagonal(const btJacobianEntry& jacB, const btScalar massInvA, const btScalar massInvB) const
- {
- const btJacobianEntry& jacA = *this;
- btVector3 lin = jacA.m_linearJointAxis * jacB.m_linearJointAxis;
- btVector3 ang0 = jacA.m_0MinvJt * jacB.m_aJ;
- btVector3 ang1 = jacA.m_1MinvJt * jacB.m_bJ;
- btVector3 lin0 = massInvA * lin;
- btVector3 lin1 = massInvB * lin;
- btVector3 sum = ang0 + ang1 + lin0 + lin1;
- return sum[0] + sum[1] + sum[2];
- }
-
- btScalar getRelativeVelocity(const btVector3& linvelA, const btVector3& angvelA, const btVector3& linvelB, const btVector3& angvelB)
- {
- btVector3 linrel = linvelA - linvelB;
- btVector3 angvela = angvelA * m_aJ;
- btVector3 angvelb = angvelB * m_bJ;
- linrel *= m_linearJointAxis;
- angvela += angvelb;
- angvela += linrel;
- btScalar rel_vel2 = angvela[0] + angvela[1] + angvela[2];
- return rel_vel2 + SIMD_EPSILON;
- }
- //private:
-
- btVector3 m_linearJointAxis;
- btVector3 m_aJ;
- btVector3 m_bJ;
- btVector3 m_0MinvJt;
- btVector3 m_1MinvJt;
- //Optimization: can be stored in the w/last component of one of the vectors
- btScalar m_Adiag;
-};
-
-#endif //BT_JACOBIAN_ENTRY_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.cpp
deleted file mode 100644
index ccf8916049..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.cpp
+++ /dev/null
@@ -1,368 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btNNCGConstraintSolver.h"
-
-btScalar btNNCGConstraintSolver::solveGroupCacheFriendlySetup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- btScalar val = btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- m_pNC.resizeNoInitialize(m_tmpSolverNonContactConstraintPool.size());
- m_pC.resizeNoInitialize(m_tmpSolverContactConstraintPool.size());
- m_pCF.resizeNoInitialize(m_tmpSolverContactFrictionConstraintPool.size());
- m_pCRF.resizeNoInitialize(m_tmpSolverContactRollingFrictionConstraintPool.size());
-
- m_deltafNC.resizeNoInitialize(m_tmpSolverNonContactConstraintPool.size());
- m_deltafC.resizeNoInitialize(m_tmpSolverContactConstraintPool.size());
- m_deltafCF.resizeNoInitialize(m_tmpSolverContactFrictionConstraintPool.size());
- m_deltafCRF.resizeNoInitialize(m_tmpSolverContactRollingFrictionConstraintPool.size());
-
- return val;
-}
-
-btScalar btNNCGConstraintSolver::solveSingleIteration(int iteration, btCollisionObject** /*bodies */, int /*numBodies*/, btPersistentManifold** /*manifoldPtr*/, int /*numManifolds*/, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* /*debugDrawer*/)
-{
- int numNonContactPool = m_tmpSolverNonContactConstraintPool.size();
- int numConstraintPool = m_tmpSolverContactConstraintPool.size();
- int numFrictionPool = m_tmpSolverContactFrictionConstraintPool.size();
-
- if (infoGlobal.m_solverMode & SOLVER_RANDMIZE_ORDER)
- {
- if (1) // uncomment this for a bit less random ((iteration & 7) == 0)
- {
- for (int j = 0; j < numNonContactPool; ++j)
- {
- int tmp = m_orderNonContactConstraintPool[j];
- int swapi = btRandInt2(j + 1);
- m_orderNonContactConstraintPool[j] = m_orderNonContactConstraintPool[swapi];
- m_orderNonContactConstraintPool[swapi] = tmp;
- }
-
- //contact/friction constraints are not solved more than
- if (iteration < infoGlobal.m_numIterations)
- {
- for (int j = 0; j < numConstraintPool; ++j)
- {
- int tmp = m_orderTmpConstraintPool[j];
- int swapi = btRandInt2(j + 1);
- m_orderTmpConstraintPool[j] = m_orderTmpConstraintPool[swapi];
- m_orderTmpConstraintPool[swapi] = tmp;
- }
-
- for (int j = 0; j < numFrictionPool; ++j)
- {
- int tmp = m_orderFrictionConstraintPool[j];
- int swapi = btRandInt2(j + 1);
- m_orderFrictionConstraintPool[j] = m_orderFrictionConstraintPool[swapi];
- m_orderFrictionConstraintPool[swapi] = tmp;
- }
- }
- }
- }
-
- btScalar deltaflengthsqr = 0;
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[m_orderNonContactConstraintPool[j]];
- if (iteration < constraint.m_overrideNumSolverIterations)
- {
- btScalar deltaf = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[constraint.m_solverBodyIdA], m_tmpSolverBodyPool[constraint.m_solverBodyIdB], constraint);
- m_deltafNC[j] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- }
- }
- }
-
- if (m_onlyForNoneContact)
- {
- if (iteration == 0)
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++) m_pNC[j] = m_deltafNC[j];
- }
- else
- {
- // deltaflengthsqrprev can be 0 only if the solver solved the problem exactly in the previous iteration. In this case we should have quit, but mainly for debug reason with this 'hack' it is now allowed to continue the calculation
- btScalar beta = m_deltafLengthSqrPrev > 0 ? deltaflengthsqr / m_deltafLengthSqrPrev : 2;
- if (beta > 1)
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++) m_pNC[j] = 0;
- }
- else
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[m_orderNonContactConstraintPool[j]];
- if (iteration < constraint.m_overrideNumSolverIterations)
- {
- btScalar additionaldeltaimpulse = beta * m_pNC[j];
- constraint.m_appliedImpulse = btScalar(constraint.m_appliedImpulse) + additionaldeltaimpulse;
- m_pNC[j] = beta * m_pNC[j] + m_deltafNC[j];
- btSolverBody& body1 = m_tmpSolverBodyPool[constraint.m_solverBodyIdA];
- btSolverBody& body2 = m_tmpSolverBodyPool[constraint.m_solverBodyIdB];
- const btSolverConstraint& c = constraint;
- body1.internalApplyImpulse(c.m_contactNormal1 * body1.internalGetInvMass(), c.m_angularComponentA, additionaldeltaimpulse);
- body2.internalApplyImpulse(c.m_contactNormal2 * body2.internalGetInvMass(), c.m_angularComponentB, additionaldeltaimpulse);
- }
- }
- }
- }
- m_deltafLengthSqrPrev = deltaflengthsqr;
- }
-
- {
- if (iteration < infoGlobal.m_numIterations)
- {
- for (int j = 0; j < numConstraints; j++)
- {
- if (constraints[j]->isEnabled())
- {
- int bodyAid = getOrInitSolverBody(constraints[j]->getRigidBodyA(), infoGlobal.m_timeStep);
- int bodyBid = getOrInitSolverBody(constraints[j]->getRigidBodyB(), infoGlobal.m_timeStep);
- btSolverBody& bodyA = m_tmpSolverBodyPool[bodyAid];
- btSolverBody& bodyB = m_tmpSolverBodyPool[bodyBid];
- constraints[j]->solveConstraintObsolete(bodyA, bodyB, infoGlobal.m_timeStep);
- }
- }
-
- ///solve all contact constraints
- if (infoGlobal.m_solverMode & SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS)
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int multiplier = (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS) ? 2 : 1;
-
- for (int c = 0; c < numPoolConstraints; c++)
- {
- btScalar totalImpulse = 0;
-
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[c]];
- btScalar deltaf = resolveSingleConstraintRowLowerLimit(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- m_deltafC[c] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- totalImpulse = solveManifold.m_appliedImpulse;
- }
- bool applyFriction = true;
- if (applyFriction)
- {
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[c * multiplier]];
-
- if (totalImpulse > btScalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
- btScalar deltaf = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- m_deltafCF[c * multiplier] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- }
- else
- {
- m_deltafCF[c * multiplier] = 0;
- }
- }
-
- if (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS)
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[c * multiplier + 1]];
-
- if (totalImpulse > btScalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
- btScalar deltaf = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- m_deltafCF[c * multiplier + 1] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- }
- else
- {
- m_deltafCF[c * multiplier + 1] = 0;
- }
- }
- }
- }
- }
- else //SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS
- {
- //solve the friction constraints after all contact constraints, don't interleave them
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
-
- for (j = 0; j < numPoolConstraints; j++)
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
- btScalar deltaf = resolveSingleConstraintRowLowerLimit(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- m_deltafC[j] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- }
-
- ///solve all friction constraints
-
- int numFrictionPoolConstraints = m_tmpSolverContactFrictionConstraintPool.size();
- for (j = 0; j < numFrictionPoolConstraints; j++)
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[j]];
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
-
- if (totalImpulse > btScalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- btScalar deltaf = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- m_deltafCF[j] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- }
- else
- {
- m_deltafCF[j] = 0;
- }
- }
- }
-
- {
- int numRollingFrictionPoolConstraints = m_tmpSolverContactRollingFrictionConstraintPool.size();
- for (int j = 0; j < numRollingFrictionPoolConstraints; j++)
- {
- btSolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[j];
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[rollingFrictionConstraint.m_frictionIndex].m_appliedImpulse;
- if (totalImpulse > btScalar(0))
- {
- btScalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- btScalar deltaf = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- m_deltafCRF[j] = deltaf;
- deltaflengthsqr += deltaf * deltaf;
- }
- else
- {
- m_deltafCRF[j] = 0;
- }
- }
- }
- }
- }
-
- if (!m_onlyForNoneContact)
- {
- if (iteration == 0)
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++) m_pNC[j] = m_deltafNC[j];
- for (int j = 0; j < m_tmpSolverContactConstraintPool.size(); j++) m_pC[j] = m_deltafC[j];
- for (int j = 0; j < m_tmpSolverContactFrictionConstraintPool.size(); j++) m_pCF[j] = m_deltafCF[j];
- for (int j = 0; j < m_tmpSolverContactRollingFrictionConstraintPool.size(); j++) m_pCRF[j] = m_deltafCRF[j];
- }
- else
- {
- // deltaflengthsqrprev can be 0 only if the solver solved the problem exactly in the previous iteration. In this case we should have quit, but mainly for debug reason with this 'hack' it is now allowed to continue the calculation
- btScalar beta = m_deltafLengthSqrPrev > 0 ? deltaflengthsqr / m_deltafLengthSqrPrev : 2;
- if (beta > 1)
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++) m_pNC[j] = 0;
- for (int j = 0; j < m_tmpSolverContactConstraintPool.size(); j++) m_pC[j] = 0;
- for (int j = 0; j < m_tmpSolverContactFrictionConstraintPool.size(); j++) m_pCF[j] = 0;
- for (int j = 0; j < m_tmpSolverContactRollingFrictionConstraintPool.size(); j++) m_pCRF[j] = 0;
- }
- else
- {
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[m_orderNonContactConstraintPool[j]];
- if (iteration < constraint.m_overrideNumSolverIterations)
- {
- btScalar additionaldeltaimpulse = beta * m_pNC[j];
- constraint.m_appliedImpulse = btScalar(constraint.m_appliedImpulse) + additionaldeltaimpulse;
- m_pNC[j] = beta * m_pNC[j] + m_deltafNC[j];
- btSolverBody& body1 = m_tmpSolverBodyPool[constraint.m_solverBodyIdA];
- btSolverBody& body2 = m_tmpSolverBodyPool[constraint.m_solverBodyIdB];
- const btSolverConstraint& c = constraint;
- body1.internalApplyImpulse(c.m_contactNormal1 * body1.internalGetInvMass(), c.m_angularComponentA, additionaldeltaimpulse);
- body2.internalApplyImpulse(c.m_contactNormal2 * body2.internalGetInvMass(), c.m_angularComponentB, additionaldeltaimpulse);
- }
- }
- for (int j = 0; j < m_tmpSolverContactConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
- if (iteration < infoGlobal.m_numIterations)
- {
- btScalar additionaldeltaimpulse = beta * m_pC[j];
- constraint.m_appliedImpulse = btScalar(constraint.m_appliedImpulse) + additionaldeltaimpulse;
- m_pC[j] = beta * m_pC[j] + m_deltafC[j];
- btSolverBody& body1 = m_tmpSolverBodyPool[constraint.m_solverBodyIdA];
- btSolverBody& body2 = m_tmpSolverBodyPool[constraint.m_solverBodyIdB];
- const btSolverConstraint& c = constraint;
- body1.internalApplyImpulse(c.m_contactNormal1 * body1.internalGetInvMass(), c.m_angularComponentA, additionaldeltaimpulse);
- body2.internalApplyImpulse(c.m_contactNormal2 * body2.internalGetInvMass(), c.m_angularComponentB, additionaldeltaimpulse);
- }
- }
- for (int j = 0; j < m_tmpSolverContactFrictionConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[j]];
- if (iteration < infoGlobal.m_numIterations)
- {
- btScalar additionaldeltaimpulse = beta * m_pCF[j];
- constraint.m_appliedImpulse = btScalar(constraint.m_appliedImpulse) + additionaldeltaimpulse;
- m_pCF[j] = beta * m_pCF[j] + m_deltafCF[j];
- btSolverBody& body1 = m_tmpSolverBodyPool[constraint.m_solverBodyIdA];
- btSolverBody& body2 = m_tmpSolverBodyPool[constraint.m_solverBodyIdB];
- const btSolverConstraint& c = constraint;
- body1.internalApplyImpulse(c.m_contactNormal1 * body1.internalGetInvMass(), c.m_angularComponentA, additionaldeltaimpulse);
- body2.internalApplyImpulse(c.m_contactNormal2 * body2.internalGetInvMass(), c.m_angularComponentB, additionaldeltaimpulse);
- }
- }
- {
- for (int j = 0; j < m_tmpSolverContactRollingFrictionConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverContactRollingFrictionConstraintPool[j];
- if (iteration < infoGlobal.m_numIterations)
- {
- btScalar additionaldeltaimpulse = beta * m_pCRF[j];
- constraint.m_appliedImpulse = btScalar(constraint.m_appliedImpulse) + additionaldeltaimpulse;
- m_pCRF[j] = beta * m_pCRF[j] + m_deltafCRF[j];
- btSolverBody& body1 = m_tmpSolverBodyPool[constraint.m_solverBodyIdA];
- btSolverBody& body2 = m_tmpSolverBodyPool[constraint.m_solverBodyIdB];
- const btSolverConstraint& c = constraint;
- body1.internalApplyImpulse(c.m_contactNormal1 * body1.internalGetInvMass(), c.m_angularComponentA, additionaldeltaimpulse);
- body2.internalApplyImpulse(c.m_contactNormal2 * body2.internalGetInvMass(), c.m_angularComponentB, additionaldeltaimpulse);
- }
- }
- }
- }
- }
- m_deltafLengthSqrPrev = deltaflengthsqr;
- }
-
- return deltaflengthsqr;
-}
-
-btScalar btNNCGConstraintSolver::solveGroupCacheFriendlyFinish(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- m_pNC.resizeNoInitialize(0);
- m_pC.resizeNoInitialize(0);
- m_pCF.resizeNoInitialize(0);
- m_pCRF.resizeNoInitialize(0);
-
- m_deltafNC.resizeNoInitialize(0);
- m_deltafC.resizeNoInitialize(0);
- m_deltafCF.resizeNoInitialize(0);
- m_deltafCRF.resizeNoInitialize(0);
-
- return btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyFinish(bodies, numBodies, infoGlobal);
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.h
deleted file mode 100644
index c84f274a99..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.h
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_NNCG_CONSTRAINT_SOLVER_H
-#define BT_NNCG_CONSTRAINT_SOLVER_H
-
-#include "btSequentialImpulseConstraintSolver.h"
-
-ATTRIBUTE_ALIGNED16(class)
-btNNCGConstraintSolver : public btSequentialImpulseConstraintSolver
-{
-protected:
- btScalar m_deltafLengthSqrPrev;
-
- btAlignedObjectArray<btScalar> m_pNC; // p for None Contact constraints
- btAlignedObjectArray<btScalar> m_pC; // p for Contact constraints
- btAlignedObjectArray<btScalar> m_pCF; // p for ContactFriction constraints
- btAlignedObjectArray<btScalar> m_pCRF; // p for ContactRollingFriction constraints
-
- //These are recalculated in every iterations. We just keep these to prevent reallocation in each iteration.
- btAlignedObjectArray<btScalar> m_deltafNC; // deltaf for NoneContact constraints
- btAlignedObjectArray<btScalar> m_deltafC; // deltaf for Contact constraints
- btAlignedObjectArray<btScalar> m_deltafCF; // deltaf for ContactFriction constraints
- btAlignedObjectArray<btScalar> m_deltafCRF; // deltaf for ContactRollingFriction constraints
-
-protected:
- virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal);
- virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
- virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btNNCGConstraintSolver() : btSequentialImpulseConstraintSolver(), m_onlyForNoneContact(false) {}
-
- virtual btConstraintSolverType getSolverType() const
- {
- return BT_NNCG_SOLVER;
- }
-
- bool m_onlyForNoneContact;
-};
-
-#endif //BT_NNCG_CONSTRAINT_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp
deleted file mode 100644
index ad399dc57f..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp
+++ /dev/null
@@ -1,205 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btPoint2PointConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include <new>
-
-btPoint2PointConstraint::btPoint2PointConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& pivotInA, const btVector3& pivotInB)
- : btTypedConstraint(POINT2POINT_CONSTRAINT_TYPE, rbA, rbB), m_pivotInA(pivotInA), m_pivotInB(pivotInB), m_flags(0), m_useSolveConstraintObsolete(false)
-{
-}
-
-btPoint2PointConstraint::btPoint2PointConstraint(btRigidBody& rbA, const btVector3& pivotInA)
- : btTypedConstraint(POINT2POINT_CONSTRAINT_TYPE, rbA), m_pivotInA(pivotInA), m_pivotInB(rbA.getCenterOfMassTransform()(pivotInA)), m_flags(0), m_useSolveConstraintObsolete(false)
-{
-}
-
-void btPoint2PointConstraint::buildJacobian()
-{
- ///we need it for both methods
- {
- m_appliedImpulse = btScalar(0.);
-
- btVector3 normal(0, 0, 0);
-
- for (int i = 0; i < 3; i++)
- {
- normal[i] = 1;
- new (&m_jac[i]) btJacobianEntry(
- m_rbA.getCenterOfMassTransform().getBasis().transpose(),
- m_rbB.getCenterOfMassTransform().getBasis().transpose(),
- m_rbA.getCenterOfMassTransform() * m_pivotInA - m_rbA.getCenterOfMassPosition(),
- m_rbB.getCenterOfMassTransform() * m_pivotInB - m_rbB.getCenterOfMassPosition(),
- normal,
- m_rbA.getInvInertiaDiagLocal(),
- m_rbA.getInvMass(),
- m_rbB.getInvInertiaDiagLocal(),
- m_rbB.getInvMass());
- normal[i] = 0;
- }
- }
-}
-
-void btPoint2PointConstraint::getInfo1(btConstraintInfo1* info)
-{
- getInfo1NonVirtual(info);
-}
-
-void btPoint2PointConstraint::getInfo1NonVirtual(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- info->m_numConstraintRows = 3;
- info->nub = 3;
- }
-}
-
-void btPoint2PointConstraint::getInfo2(btConstraintInfo2* info)
-{
- getInfo2NonVirtual(info, m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-}
-
-void btPoint2PointConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTransform& body0_trans, const btTransform& body1_trans)
-{
- btAssert(!m_useSolveConstraintObsolete);
-
- //retrieve matrices
-
- // anchor points in global coordinates with respect to body PORs.
-
- // set jacobian
- info->m_J1linearAxis[0] = 1;
- info->m_J1linearAxis[info->rowskip + 1] = 1;
- info->m_J1linearAxis[2 * info->rowskip + 2] = 1;
-
- btVector3 a1 = body0_trans.getBasis() * getPivotInA();
- {
- btVector3* angular0 = (btVector3*)(info->m_J1angularAxis);
- btVector3* angular1 = (btVector3*)(info->m_J1angularAxis + info->rowskip);
- btVector3* angular2 = (btVector3*)(info->m_J1angularAxis + 2 * info->rowskip);
- btVector3 a1neg = -a1;
- a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- info->m_J2linearAxis[0] = -1;
- info->m_J2linearAxis[info->rowskip + 1] = -1;
- info->m_J2linearAxis[2 * info->rowskip + 2] = -1;
-
- btVector3 a2 = body1_trans.getBasis() * getPivotInB();
-
- {
- // btVector3 a2n = -a2;
- btVector3* angular0 = (btVector3*)(info->m_J2angularAxis);
- btVector3* angular1 = (btVector3*)(info->m_J2angularAxis + info->rowskip);
- btVector3* angular2 = (btVector3*)(info->m_J2angularAxis + 2 * info->rowskip);
- a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
- }
-
- // set right hand side
- btScalar currERP = (m_flags & BT_P2P_FLAGS_ERP) ? m_erp : info->erp;
- btScalar k = info->fps * currERP;
- int j;
- for (j = 0; j < 3; j++)
- {
- info->m_constraintError[j * info->rowskip] = k * (a2[j] + body1_trans.getOrigin()[j] - a1[j] - body0_trans.getOrigin()[j]);
- //printf("info->m_constraintError[%d]=%f\n",j,info->m_constraintError[j]);
- }
- if (m_flags & BT_P2P_FLAGS_CFM)
- {
- for (j = 0; j < 3; j++)
- {
- info->cfm[j * info->rowskip] = m_cfm;
- }
- }
-
- btScalar impulseClamp = m_setting.m_impulseClamp; //
- for (j = 0; j < 3; j++)
- {
- if (m_setting.m_impulseClamp > 0)
- {
- info->m_lowerLimit[j * info->rowskip] = -impulseClamp;
- info->m_upperLimit[j * info->rowskip] = impulseClamp;
- }
- }
- info->m_damping = m_setting.m_damping;
-}
-
-void btPoint2PointConstraint::updateRHS(btScalar timeStep)
-{
- (void)timeStep;
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void btPoint2PointConstraint::setParam(int num, btScalar value, int axis)
-{
- if (axis != -1)
- {
- btAssertConstrParams(0);
- }
- else
- {
- switch (num)
- {
- case BT_CONSTRAINT_ERP:
- case BT_CONSTRAINT_STOP_ERP:
- m_erp = value;
- m_flags |= BT_P2P_FLAGS_ERP;
- break;
- case BT_CONSTRAINT_CFM:
- case BT_CONSTRAINT_STOP_CFM:
- m_cfm = value;
- m_flags |= BT_P2P_FLAGS_CFM;
- break;
- default:
- btAssertConstrParams(0);
- }
- }
-}
-
-///return the local value of parameter
-btScalar btPoint2PointConstraint::getParam(int num, int axis) const
-{
- btScalar retVal(SIMD_INFINITY);
- if (axis != -1)
- {
- btAssertConstrParams(0);
- }
- else
- {
- switch (num)
- {
- case BT_CONSTRAINT_ERP:
- case BT_CONSTRAINT_STOP_ERP:
- btAssertConstrParams(m_flags & BT_P2P_FLAGS_ERP);
- retVal = m_erp;
- break;
- case BT_CONSTRAINT_CFM:
- case BT_CONSTRAINT_STOP_CFM:
- btAssertConstrParams(m_flags & BT_P2P_FLAGS_CFM);
- retVal = m_cfm;
- break;
- default:
- btAssertConstrParams(0);
- }
- }
- return retVal;
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h
deleted file mode 100644
index 4717e19800..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_POINT2POINTCONSTRAINT_H
-#define BT_POINT2POINTCONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-
-class btRigidBody;
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btPoint2PointConstraintData2 btPoint2PointConstraintDoubleData2
-#define btPoint2PointConstraintDataName "btPoint2PointConstraintDoubleData2"
-#else
-#define btPoint2PointConstraintData2 btPoint2PointConstraintFloatData
-#define btPoint2PointConstraintDataName "btPoint2PointConstraintFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-struct btConstraintSetting
-{
- btConstraintSetting() : m_tau(btScalar(0.3)),
- m_damping(btScalar(1.)),
- m_impulseClamp(btScalar(0.))
- {
- }
- btScalar m_tau;
- btScalar m_damping;
- btScalar m_impulseClamp;
-};
-
-enum btPoint2PointFlags
-{
- BT_P2P_FLAGS_ERP = 1,
- BT_P2P_FLAGS_CFM = 2
-};
-
-/// point to point constraint between two rigidbodies each with a pivotpoint that descibes the 'ballsocket' location in local space
-ATTRIBUTE_ALIGNED16(class)
-btPoint2PointConstraint : public btTypedConstraint
-{
-#ifdef IN_PARALLELL_SOLVER
-public:
-#endif
- btJacobianEntry m_jac[3]; //3 orthogonal linear constraints
-
- btVector3 m_pivotInA;
- btVector3 m_pivotInB;
-
- int m_flags;
- btScalar m_erp;
- btScalar m_cfm;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- ///for backwards compatibility during the transition to 'getInfo/getInfo2'
- bool m_useSolveConstraintObsolete;
-
- btConstraintSetting m_setting;
-
- btPoint2PointConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& pivotInA, const btVector3& pivotInB);
-
- btPoint2PointConstraint(btRigidBody & rbA, const btVector3& pivotInA);
-
- virtual void buildJacobian();
-
- virtual void getInfo1(btConstraintInfo1 * info);
-
- void getInfo1NonVirtual(btConstraintInfo1 * info);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& body0_trans, const btTransform& body1_trans);
-
- void updateRHS(btScalar timeStep);
-
- void setPivotA(const btVector3& pivotA)
- {
- m_pivotInA = pivotA;
- }
-
- void setPivotB(const btVector3& pivotB)
- {
- m_pivotInB = pivotB;
- }
-
- const btVector3& getPivotInA() const
- {
- return m_pivotInA;
- }
-
- const btVector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1);
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const;
-
- virtual int getFlags() const
- {
- return m_flags;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btPoint2PointConstraintFloatData
-{
- btTypedConstraintData m_typeConstraintData;
- btVector3FloatData m_pivotInA;
- btVector3FloatData m_pivotInB;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btPoint2PointConstraintDoubleData2
-{
- btTypedConstraintDoubleData m_typeConstraintData;
- btVector3DoubleData m_pivotInA;
- btVector3DoubleData m_pivotInB;
-};
-
-#ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-///this structure is not used, except for loading pre-2.82 .bullet files
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btPoint2PointConstraintDoubleData
-{
- btTypedConstraintData m_typeConstraintData;
- btVector3DoubleData m_pivotInA;
- btVector3DoubleData m_pivotInB;
-};
-#endif //BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-
-SIMD_FORCE_INLINE int btPoint2PointConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btPoint2PointConstraintData2);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btPoint2PointConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btPoint2PointConstraintData2* p2pData = (btPoint2PointConstraintData2*)dataBuffer;
-
- btTypedConstraint::serialize(&p2pData->m_typeConstraintData, serializer);
- m_pivotInA.serialize(p2pData->m_pivotInA);
- m_pivotInB.serialize(p2pData->m_pivotInB);
-
- return btPoint2PointConstraintDataName;
-}
-
-#endif //BT_POINT2POINTCONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp
deleted file mode 100644
index d2641c582f..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp
+++ /dev/null
@@ -1,1875 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//#define COMPUTE_IMPULSE_DENOM 1
-#ifdef BT_DEBUG
-# define BT_ADDITIONAL_DEBUG
-#endif
-
-//It is not necessary (redundant) to refresh contact manifolds, this refresh has been moved to the collision algorithms.
-
-#include "btSequentialImpulseConstraintSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btCpuFeatureUtility.h"
-
-//#include "btJacobianEntry.h"
-#include "LinearMath/btMinMax.h"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include <new>
-#include "LinearMath/btStackAlloc.h"
-#include "LinearMath/btQuickprof.h"
-//#include "btSolverBody.h"
-//#include "btSolverConstraint.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include <string.h> //for memset
-
-int gNumSplitImpulseRecoveries = 0;
-
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-
-//#define VERBOSE_RESIDUAL_PRINTF 1
-///This is the scalar reference implementation of solving a single constraint row, the innerloop of the Projected Gauss Seidel/Sequential Impulse constraint solver
-///Below are optional SSE2 and SSE4/FMA3 versions. We assume most hardware has SSE2. For SSE4/FMA3 we perform a CPU feature check.
-static btScalar gResolveSingleConstraintRowGeneric_scalar_reference(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- btScalar deltaImpulse = c.m_rhs - btScalar(c.m_appliedImpulse) * c.m_cfm;
- const btScalar deltaVel1Dotn = c.m_contactNormal1.dot(bodyA.internalGetDeltaLinearVelocity()) + c.m_relpos1CrossNormal.dot(bodyA.internalGetDeltaAngularVelocity());
- const btScalar deltaVel2Dotn = c.m_contactNormal2.dot(bodyB.internalGetDeltaLinearVelocity()) + c.m_relpos2CrossNormal.dot(bodyB.internalGetDeltaAngularVelocity());
-
- // const btScalar delta_rel_vel = deltaVel1Dotn-deltaVel2Dotn;
- deltaImpulse -= deltaVel1Dotn * c.m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c.m_jacDiagABInv;
-
- const btScalar sum = btScalar(c.m_appliedImpulse) + deltaImpulse;
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_lowerLimit;
- }
- else if (sum > c.m_upperLimit)
- {
- deltaImpulse = c.m_upperLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_upperLimit;
- }
- else
- {
- c.m_appliedImpulse = sum;
- }
-
- bodyA.internalApplyImpulse(c.m_contactNormal1 * bodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- bodyB.internalApplyImpulse(c.m_contactNormal2 * bodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
-
- return deltaImpulse * (1. / c.m_jacDiagABInv);
-}
-
-static btScalar gResolveSingleConstraintRowLowerLimit_scalar_reference(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- btScalar deltaImpulse = c.m_rhs - btScalar(c.m_appliedImpulse) * c.m_cfm;
- const btScalar deltaVel1Dotn = c.m_contactNormal1.dot(bodyA.internalGetDeltaLinearVelocity()) + c.m_relpos1CrossNormal.dot(bodyA.internalGetDeltaAngularVelocity());
- const btScalar deltaVel2Dotn = c.m_contactNormal2.dot(bodyB.internalGetDeltaLinearVelocity()) + c.m_relpos2CrossNormal.dot(bodyB.internalGetDeltaAngularVelocity());
-
- deltaImpulse -= deltaVel1Dotn * c.m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c.m_jacDiagABInv;
- const btScalar sum = btScalar(c.m_appliedImpulse) + deltaImpulse;
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_lowerLimit;
- }
- else
- {
- c.m_appliedImpulse = sum;
- }
- bodyA.internalApplyImpulse(c.m_contactNormal1 * bodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- bodyB.internalApplyImpulse(c.m_contactNormal2 * bodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
-
- return deltaImpulse * (1. / c.m_jacDiagABInv);
-}
-
-#ifdef USE_SIMD
-#include <emmintrin.h>
-
-#define btVecSplat(x, e) _mm_shuffle_ps(x, x, _MM_SHUFFLE(e, e, e, e))
-static inline __m128 btSimdDot3(__m128 vec0, __m128 vec1)
-{
- __m128 result = _mm_mul_ps(vec0, vec1);
- return _mm_add_ps(btVecSplat(result, 0), _mm_add_ps(btVecSplat(result, 1), btVecSplat(result, 2)));
-}
-
-#if defined(BT_ALLOW_SSE4)
-#include <intrin.h>
-
-#define USE_FMA 1
-#define USE_FMA3_INSTEAD_FMA4 1
-#define USE_SSE4_DOT 1
-
-#define SSE4_DP(a, b) _mm_dp_ps(a, b, 0x7f)
-#define SSE4_DP_FP(a, b) _mm_cvtss_f32(_mm_dp_ps(a, b, 0x7f))
-
-#if USE_SSE4_DOT
-#define DOT_PRODUCT(a, b) SSE4_DP(a, b)
-#else
-#define DOT_PRODUCT(a, b) btSimdDot3(a, b)
-#endif
-
-#if USE_FMA
-#if USE_FMA3_INSTEAD_FMA4
-// a*b + c
-#define FMADD(a, b, c) _mm_fmadd_ps(a, b, c)
-// -(a*b) + c
-#define FMNADD(a, b, c) _mm_fnmadd_ps(a, b, c)
-#else // USE_FMA3
-// a*b + c
-#define FMADD(a, b, c) _mm_macc_ps(a, b, c)
-// -(a*b) + c
-#define FMNADD(a, b, c) _mm_nmacc_ps(a, b, c)
-#endif
-#else // USE_FMA
-// c + a*b
-#define FMADD(a, b, c) _mm_add_ps(c, _mm_mul_ps(a, b))
-// c - a*b
-#define FMNADD(a, b, c) _mm_sub_ps(c, _mm_mul_ps(a, b))
-#endif
-#endif
-
-// Project Gauss Seidel or the equivalent Sequential Impulse
-static btScalar gResolveSingleConstraintRowGeneric_sse2(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- __m128 cpAppliedImp = _mm_set1_ps(c.m_appliedImpulse);
- __m128 lowerLimit1 = _mm_set1_ps(c.m_lowerLimit);
- __m128 upperLimit1 = _mm_set1_ps(c.m_upperLimit);
- btSimdScalar deltaImpulse = _mm_sub_ps(_mm_set1_ps(c.m_rhs), _mm_mul_ps(_mm_set1_ps(c.m_appliedImpulse), _mm_set1_ps(c.m_cfm)));
- __m128 deltaVel1Dotn = _mm_add_ps(btSimdDot3(c.m_contactNormal1.mVec128, bodyA.internalGetDeltaLinearVelocity().mVec128), btSimdDot3(c.m_relpos1CrossNormal.mVec128, bodyA.internalGetDeltaAngularVelocity().mVec128));
- __m128 deltaVel2Dotn = _mm_add_ps(btSimdDot3(c.m_contactNormal2.mVec128, bodyB.internalGetDeltaLinearVelocity().mVec128), btSimdDot3(c.m_relpos2CrossNormal.mVec128, bodyB.internalGetDeltaAngularVelocity().mVec128));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel1Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel2Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- btSimdScalar sum = _mm_add_ps(cpAppliedImp, deltaImpulse);
- btSimdScalar resultLowerLess, resultUpperLess;
- resultLowerLess = _mm_cmplt_ps(sum, lowerLimit1);
- resultUpperLess = _mm_cmplt_ps(sum, upperLimit1);
- __m128 lowMinApplied = _mm_sub_ps(lowerLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse));
- c.m_appliedImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum));
- __m128 upperMinApplied = _mm_sub_ps(upperLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultUpperLess, deltaImpulse), _mm_andnot_ps(resultUpperLess, upperMinApplied));
- c.m_appliedImpulse = _mm_or_ps(_mm_and_ps(resultUpperLess, c.m_appliedImpulse), _mm_andnot_ps(resultUpperLess, upperLimit1));
- __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal1.mVec128, bodyA.internalGetInvMass().mVec128);
- __m128 linearComponentB = _mm_mul_ps((c.m_contactNormal2).mVec128, bodyB.internalGetInvMass().mVec128);
- __m128 impulseMagnitude = deltaImpulse;
- bodyA.internalGetDeltaLinearVelocity().mVec128 = _mm_add_ps(bodyA.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentA, impulseMagnitude));
- bodyA.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(bodyA.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentA.mVec128, impulseMagnitude));
- bodyB.internalGetDeltaLinearVelocity().mVec128 = _mm_add_ps(bodyB.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentB, impulseMagnitude));
- bodyB.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(bodyB.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentB.mVec128, impulseMagnitude));
- return deltaImpulse.m_floats[0] / c.m_jacDiagABInv;
-}
-
-// Enhanced version of gResolveSingleConstraintRowGeneric_sse2 with SSE4.1 and FMA3
-static btScalar gResolveSingleConstraintRowGeneric_sse4_1_fma3(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
-#if defined(BT_ALLOW_SSE4)
- __m128 tmp = _mm_set_ps1(c.m_jacDiagABInv);
- __m128 deltaImpulse = _mm_set_ps1(c.m_rhs - btScalar(c.m_appliedImpulse) * c.m_cfm);
- const __m128 lowerLimit = _mm_set_ps1(c.m_lowerLimit);
- const __m128 upperLimit = _mm_set_ps1(c.m_upperLimit);
- const __m128 deltaVel1Dotn = _mm_add_ps(DOT_PRODUCT(c.m_contactNormal1.mVec128, bodyA.internalGetDeltaLinearVelocity().mVec128), DOT_PRODUCT(c.m_relpos1CrossNormal.mVec128, bodyA.internalGetDeltaAngularVelocity().mVec128));
- const __m128 deltaVel2Dotn = _mm_add_ps(DOT_PRODUCT(c.m_contactNormal2.mVec128, bodyB.internalGetDeltaLinearVelocity().mVec128), DOT_PRODUCT(c.m_relpos2CrossNormal.mVec128, bodyB.internalGetDeltaAngularVelocity().mVec128));
- deltaImpulse = FMNADD(deltaVel1Dotn, tmp, deltaImpulse);
- deltaImpulse = FMNADD(deltaVel2Dotn, tmp, deltaImpulse);
- tmp = _mm_add_ps(c.m_appliedImpulse, deltaImpulse); // sum
- const __m128 maskLower = _mm_cmpgt_ps(tmp, lowerLimit);
- const __m128 maskUpper = _mm_cmpgt_ps(upperLimit, tmp);
- deltaImpulse = _mm_blendv_ps(_mm_sub_ps(lowerLimit, c.m_appliedImpulse), _mm_blendv_ps(_mm_sub_ps(upperLimit, c.m_appliedImpulse), deltaImpulse, maskUpper), maskLower);
- c.m_appliedImpulse = _mm_blendv_ps(lowerLimit, _mm_blendv_ps(upperLimit, tmp, maskUpper), maskLower);
- bodyA.internalGetDeltaLinearVelocity().mVec128 = FMADD(_mm_mul_ps(c.m_contactNormal1.mVec128, bodyA.internalGetInvMass().mVec128), deltaImpulse, bodyA.internalGetDeltaLinearVelocity().mVec128);
- bodyA.internalGetDeltaAngularVelocity().mVec128 = FMADD(c.m_angularComponentA.mVec128, deltaImpulse, bodyA.internalGetDeltaAngularVelocity().mVec128);
- bodyB.internalGetDeltaLinearVelocity().mVec128 = FMADD(_mm_mul_ps(c.m_contactNormal2.mVec128, bodyB.internalGetInvMass().mVec128), deltaImpulse, bodyB.internalGetDeltaLinearVelocity().mVec128);
- bodyB.internalGetDeltaAngularVelocity().mVec128 = FMADD(c.m_angularComponentB.mVec128, deltaImpulse, bodyB.internalGetDeltaAngularVelocity().mVec128);
- btSimdScalar deltaImp = deltaImpulse;
- return deltaImp.m_floats[0] * (1. / c.m_jacDiagABInv);
-#else
- return gResolveSingleConstraintRowGeneric_sse2(bodyA, bodyB, c);
-#endif
-}
-
-static btScalar gResolveSingleConstraintRowLowerLimit_sse2(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- __m128 cpAppliedImp = _mm_set1_ps(c.m_appliedImpulse);
- __m128 lowerLimit1 = _mm_set1_ps(c.m_lowerLimit);
- __m128 upperLimit1 = _mm_set1_ps(c.m_upperLimit);
- btSimdScalar deltaImpulse = _mm_sub_ps(_mm_set1_ps(c.m_rhs), _mm_mul_ps(_mm_set1_ps(c.m_appliedImpulse), _mm_set1_ps(c.m_cfm)));
- __m128 deltaVel1Dotn = _mm_add_ps(btSimdDot3(c.m_contactNormal1.mVec128, bodyA.internalGetDeltaLinearVelocity().mVec128), btSimdDot3(c.m_relpos1CrossNormal.mVec128, bodyA.internalGetDeltaAngularVelocity().mVec128));
- __m128 deltaVel2Dotn = _mm_add_ps(btSimdDot3(c.m_contactNormal2.mVec128, bodyB.internalGetDeltaLinearVelocity().mVec128), btSimdDot3(c.m_relpos2CrossNormal.mVec128, bodyB.internalGetDeltaAngularVelocity().mVec128));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel1Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel2Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- btSimdScalar sum = _mm_add_ps(cpAppliedImp, deltaImpulse);
- btSimdScalar resultLowerLess, resultUpperLess;
- resultLowerLess = _mm_cmplt_ps(sum, lowerLimit1);
- resultUpperLess = _mm_cmplt_ps(sum, upperLimit1);
- __m128 lowMinApplied = _mm_sub_ps(lowerLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse));
- c.m_appliedImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum));
- __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal1.mVec128, bodyA.internalGetInvMass().mVec128);
- __m128 linearComponentB = _mm_mul_ps(c.m_contactNormal2.mVec128, bodyB.internalGetInvMass().mVec128);
- __m128 impulseMagnitude = deltaImpulse;
- bodyA.internalGetDeltaLinearVelocity().mVec128 = _mm_add_ps(bodyA.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentA, impulseMagnitude));
- bodyA.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(bodyA.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentA.mVec128, impulseMagnitude));
- bodyB.internalGetDeltaLinearVelocity().mVec128 = _mm_add_ps(bodyB.internalGetDeltaLinearVelocity().mVec128, _mm_mul_ps(linearComponentB, impulseMagnitude));
- bodyB.internalGetDeltaAngularVelocity().mVec128 = _mm_add_ps(bodyB.internalGetDeltaAngularVelocity().mVec128, _mm_mul_ps(c.m_angularComponentB.mVec128, impulseMagnitude));
- return deltaImpulse.m_floats[0] / c.m_jacDiagABInv;
-}
-
-// Enhanced version of gResolveSingleConstraintRowGeneric_sse2 with SSE4.1 and FMA3
-static btScalar gResolveSingleConstraintRowLowerLimit_sse4_1_fma3(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
-#ifdef BT_ALLOW_SSE4
- __m128 tmp = _mm_set_ps1(c.m_jacDiagABInv);
- __m128 deltaImpulse = _mm_set_ps1(c.m_rhs - btScalar(c.m_appliedImpulse) * c.m_cfm);
- const __m128 lowerLimit = _mm_set_ps1(c.m_lowerLimit);
- const __m128 deltaVel1Dotn = _mm_add_ps(DOT_PRODUCT(c.m_contactNormal1.mVec128, bodyA.internalGetDeltaLinearVelocity().mVec128), DOT_PRODUCT(c.m_relpos1CrossNormal.mVec128, bodyA.internalGetDeltaAngularVelocity().mVec128));
- const __m128 deltaVel2Dotn = _mm_add_ps(DOT_PRODUCT(c.m_contactNormal2.mVec128, bodyB.internalGetDeltaLinearVelocity().mVec128), DOT_PRODUCT(c.m_relpos2CrossNormal.mVec128, bodyB.internalGetDeltaAngularVelocity().mVec128));
- deltaImpulse = FMNADD(deltaVel1Dotn, tmp, deltaImpulse);
- deltaImpulse = FMNADD(deltaVel2Dotn, tmp, deltaImpulse);
- tmp = _mm_add_ps(c.m_appliedImpulse, deltaImpulse);
- const __m128 mask = _mm_cmpgt_ps(tmp, lowerLimit);
- deltaImpulse = _mm_blendv_ps(_mm_sub_ps(lowerLimit, c.m_appliedImpulse), deltaImpulse, mask);
- c.m_appliedImpulse = _mm_blendv_ps(lowerLimit, tmp, mask);
- bodyA.internalGetDeltaLinearVelocity().mVec128 = FMADD(_mm_mul_ps(c.m_contactNormal1.mVec128, bodyA.internalGetInvMass().mVec128), deltaImpulse, bodyA.internalGetDeltaLinearVelocity().mVec128);
- bodyA.internalGetDeltaAngularVelocity().mVec128 = FMADD(c.m_angularComponentA.mVec128, deltaImpulse, bodyA.internalGetDeltaAngularVelocity().mVec128);
- bodyB.internalGetDeltaLinearVelocity().mVec128 = FMADD(_mm_mul_ps(c.m_contactNormal2.mVec128, bodyB.internalGetInvMass().mVec128), deltaImpulse, bodyB.internalGetDeltaLinearVelocity().mVec128);
- bodyB.internalGetDeltaAngularVelocity().mVec128 = FMADD(c.m_angularComponentB.mVec128, deltaImpulse, bodyB.internalGetDeltaAngularVelocity().mVec128);
- btSimdScalar deltaImp = deltaImpulse;
- return deltaImp.m_floats[0] * (1. / c.m_jacDiagABInv);
-#else
- return gResolveSingleConstraintRowLowerLimit_sse2(bodyA, bodyB, c);
-#endif //BT_ALLOW_SSE4
-}
-
-#endif //USE_SIMD
-
-btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowGenericSIMD(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- return m_resolveSingleConstraintRowGeneric(bodyA, bodyB, c);
-}
-
-// Project Gauss Seidel or the equivalent Sequential Impulse
-btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowGeneric(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- return m_resolveSingleConstraintRowGeneric(bodyA, bodyB, c);
-}
-
-btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowLowerLimitSIMD(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- return m_resolveSingleConstraintRowLowerLimit(bodyA, bodyB, c);
-}
-
-btScalar btSequentialImpulseConstraintSolver::resolveSingleConstraintRowLowerLimit(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
- return m_resolveSingleConstraintRowLowerLimit(bodyA, bodyB, c);
-}
-
-static btScalar gResolveSplitPenetrationImpulse_scalar_reference(
- btSolverBody& bodyA,
- btSolverBody& bodyB,
- const btSolverConstraint& c)
-{
- btScalar deltaImpulse = 0.f;
-
- if (c.m_rhsPenetration)
- {
- gNumSplitImpulseRecoveries++;
- deltaImpulse = c.m_rhsPenetration - btScalar(c.m_appliedPushImpulse) * c.m_cfm;
- const btScalar deltaVel1Dotn = c.m_contactNormal1.dot(bodyA.internalGetPushVelocity()) + c.m_relpos1CrossNormal.dot(bodyA.internalGetTurnVelocity());
- const btScalar deltaVel2Dotn = c.m_contactNormal2.dot(bodyB.internalGetPushVelocity()) + c.m_relpos2CrossNormal.dot(bodyB.internalGetTurnVelocity());
-
- deltaImpulse -= deltaVel1Dotn * c.m_jacDiagABInv;
- deltaImpulse -= deltaVel2Dotn * c.m_jacDiagABInv;
- const btScalar sum = btScalar(c.m_appliedPushImpulse) + deltaImpulse;
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedPushImpulse;
- c.m_appliedPushImpulse = c.m_lowerLimit;
- }
- else
- {
- c.m_appliedPushImpulse = sum;
- }
- bodyA.internalApplyPushImpulse(c.m_contactNormal1 * bodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- bodyB.internalApplyPushImpulse(c.m_contactNormal2 * bodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
- }
- return deltaImpulse * (1. / c.m_jacDiagABInv);
-}
-
-static btScalar gResolveSplitPenetrationImpulse_sse2(btSolverBody& bodyA, btSolverBody& bodyB, const btSolverConstraint& c)
-{
-#ifdef USE_SIMD
- if (!c.m_rhsPenetration)
- return 0.f;
-
- gNumSplitImpulseRecoveries++;
-
- __m128 cpAppliedImp = _mm_set1_ps(c.m_appliedPushImpulse);
- __m128 lowerLimit1 = _mm_set1_ps(c.m_lowerLimit);
- __m128 upperLimit1 = _mm_set1_ps(c.m_upperLimit);
- __m128 deltaImpulse = _mm_sub_ps(_mm_set1_ps(c.m_rhsPenetration), _mm_mul_ps(_mm_set1_ps(c.m_appliedPushImpulse), _mm_set1_ps(c.m_cfm)));
- __m128 deltaVel1Dotn = _mm_add_ps(btSimdDot3(c.m_contactNormal1.mVec128, bodyA.internalGetPushVelocity().mVec128), btSimdDot3(c.m_relpos1CrossNormal.mVec128, bodyA.internalGetTurnVelocity().mVec128));
- __m128 deltaVel2Dotn = _mm_add_ps(btSimdDot3(c.m_contactNormal2.mVec128, bodyB.internalGetPushVelocity().mVec128), btSimdDot3(c.m_relpos2CrossNormal.mVec128, bodyB.internalGetTurnVelocity().mVec128));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel1Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- deltaImpulse = _mm_sub_ps(deltaImpulse, _mm_mul_ps(deltaVel2Dotn, _mm_set1_ps(c.m_jacDiagABInv)));
- btSimdScalar sum = _mm_add_ps(cpAppliedImp, deltaImpulse);
- btSimdScalar resultLowerLess, resultUpperLess;
- resultLowerLess = _mm_cmplt_ps(sum, lowerLimit1);
- resultUpperLess = _mm_cmplt_ps(sum, upperLimit1);
- __m128 lowMinApplied = _mm_sub_ps(lowerLimit1, cpAppliedImp);
- deltaImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowMinApplied), _mm_andnot_ps(resultLowerLess, deltaImpulse));
- c.m_appliedPushImpulse = _mm_or_ps(_mm_and_ps(resultLowerLess, lowerLimit1), _mm_andnot_ps(resultLowerLess, sum));
- __m128 linearComponentA = _mm_mul_ps(c.m_contactNormal1.mVec128, bodyA.internalGetInvMass().mVec128);
- __m128 linearComponentB = _mm_mul_ps(c.m_contactNormal2.mVec128, bodyB.internalGetInvMass().mVec128);
- __m128 impulseMagnitude = deltaImpulse;
- bodyA.internalGetPushVelocity().mVec128 = _mm_add_ps(bodyA.internalGetPushVelocity().mVec128, _mm_mul_ps(linearComponentA, impulseMagnitude));
- bodyA.internalGetTurnVelocity().mVec128 = _mm_add_ps(bodyA.internalGetTurnVelocity().mVec128, _mm_mul_ps(c.m_angularComponentA.mVec128, impulseMagnitude));
- bodyB.internalGetPushVelocity().mVec128 = _mm_add_ps(bodyB.internalGetPushVelocity().mVec128, _mm_mul_ps(linearComponentB, impulseMagnitude));
- bodyB.internalGetTurnVelocity().mVec128 = _mm_add_ps(bodyB.internalGetTurnVelocity().mVec128, _mm_mul_ps(c.m_angularComponentB.mVec128, impulseMagnitude));
- btSimdScalar deltaImp = deltaImpulse;
- return deltaImp.m_floats[0] * (1. / c.m_jacDiagABInv);
-#else
- return gResolveSplitPenetrationImpulse_scalar_reference(bodyA, bodyB, c);
-#endif
-}
-
-btSequentialImpulseConstraintSolver::btSequentialImpulseConstraintSolver()
-{
- m_btSeed2 = 0;
- m_cachedSolverMode = 0;
- setupSolverFunctions(false);
-}
-
-void btSequentialImpulseConstraintSolver::setupSolverFunctions(bool useSimd)
-{
- m_resolveSingleConstraintRowGeneric = gResolveSingleConstraintRowGeneric_scalar_reference;
- m_resolveSingleConstraintRowLowerLimit = gResolveSingleConstraintRowLowerLimit_scalar_reference;
- m_resolveSplitPenetrationImpulse = gResolveSplitPenetrationImpulse_scalar_reference;
-
- if (useSimd)
- {
-#ifdef USE_SIMD
- m_resolveSingleConstraintRowGeneric = gResolveSingleConstraintRowGeneric_sse2;
- m_resolveSingleConstraintRowLowerLimit = gResolveSingleConstraintRowLowerLimit_sse2;
- m_resolveSplitPenetrationImpulse = gResolveSplitPenetrationImpulse_sse2;
-
-#ifdef BT_ALLOW_SSE4
- int cpuFeatures = btCpuFeatureUtility::getCpuFeatures();
- if ((cpuFeatures & btCpuFeatureUtility::CPU_FEATURE_FMA3) && (cpuFeatures & btCpuFeatureUtility::CPU_FEATURE_SSE4_1))
- {
- m_resolveSingleConstraintRowGeneric = gResolveSingleConstraintRowGeneric_sse4_1_fma3;
- m_resolveSingleConstraintRowLowerLimit = gResolveSingleConstraintRowLowerLimit_sse4_1_fma3;
- }
-#endif //BT_ALLOW_SSE4
-#endif //USE_SIMD
- }
-}
-
-btSequentialImpulseConstraintSolver::~btSequentialImpulseConstraintSolver()
-{
-}
-
-btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getScalarConstraintRowSolverGeneric()
-{
- return gResolveSingleConstraintRowGeneric_scalar_reference;
-}
-
-btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getScalarConstraintRowSolverLowerLimit()
-{
- return gResolveSingleConstraintRowLowerLimit_scalar_reference;
-}
-
-#ifdef USE_SIMD
-btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE2ConstraintRowSolverGeneric()
-{
- return gResolveSingleConstraintRowGeneric_sse2;
-}
-btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE2ConstraintRowSolverLowerLimit()
-{
- return gResolveSingleConstraintRowLowerLimit_sse2;
-}
-#ifdef BT_ALLOW_SSE4
-btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE4_1ConstraintRowSolverGeneric()
-{
- return gResolveSingleConstraintRowGeneric_sse4_1_fma3;
-}
-btSingleConstraintRowSolver btSequentialImpulseConstraintSolver::getSSE4_1ConstraintRowSolverLowerLimit()
-{
- return gResolveSingleConstraintRowLowerLimit_sse4_1_fma3;
-}
-#endif //BT_ALLOW_SSE4
-#endif //USE_SIMD
-
-unsigned long btSequentialImpulseConstraintSolver::btRand2()
-{
- m_btSeed2 = (1664525L * m_btSeed2 + 1013904223L) & 0xffffffff;
- return m_btSeed2;
-}
-
-//See ODE: adam's all-int straightforward(?) dRandInt (0..n-1)
-int btSequentialImpulseConstraintSolver::btRandInt2(int n)
-{
- // seems good; xor-fold and modulus
- const unsigned long un = static_cast<unsigned long>(n);
- unsigned long r = btRand2();
-
- // note: probably more aggressive than it needs to be -- might be
- // able to get away without one or two of the innermost branches.
- if (un <= 0x00010000UL)
- {
- r ^= (r >> 16);
- if (un <= 0x00000100UL)
- {
- r ^= (r >> 8);
- if (un <= 0x00000010UL)
- {
- r ^= (r >> 4);
- if (un <= 0x00000004UL)
- {
- r ^= (r >> 2);
- if (un <= 0x00000002UL)
- {
- r ^= (r >> 1);
- }
- }
- }
- }
- }
-
- return (int)(r % un);
-}
-
-void btSequentialImpulseConstraintSolver::initSolverBody(btSolverBody* solverBody, btCollisionObject* collisionObject, btScalar timeStep)
-{
- btRigidBody* rb = collisionObject ? btRigidBody::upcast(collisionObject) : 0;
-
- solverBody->internalGetDeltaLinearVelocity().setValue(0.f, 0.f, 0.f);
- solverBody->internalGetDeltaAngularVelocity().setValue(0.f, 0.f, 0.f);
- solverBody->internalGetPushVelocity().setValue(0.f, 0.f, 0.f);
- solverBody->internalGetTurnVelocity().setValue(0.f, 0.f, 0.f);
-
- if (rb)
- {
- solverBody->m_worldTransform = rb->getWorldTransform();
- solverBody->internalSetInvMass(btVector3(rb->getInvMass(), rb->getInvMass(), rb->getInvMass()) * rb->getLinearFactor());
- solverBody->m_originalBody = rb;
- solverBody->m_angularFactor = rb->getAngularFactor();
- solverBody->m_linearFactor = rb->getLinearFactor();
- solverBody->m_linearVelocity = rb->getLinearVelocity();
- solverBody->m_angularVelocity = rb->getAngularVelocity();
- solverBody->m_externalForceImpulse = rb->getTotalForce() * rb->getInvMass() * timeStep;
- solverBody->m_externalTorqueImpulse = rb->getTotalTorque() * rb->getInvInertiaTensorWorld() * timeStep;
- }
- else
- {
- solverBody->m_worldTransform.setIdentity();
- solverBody->internalSetInvMass(btVector3(0, 0, 0));
- solverBody->m_originalBody = 0;
- solverBody->m_angularFactor.setValue(1, 1, 1);
- solverBody->m_linearFactor.setValue(1, 1, 1);
- solverBody->m_linearVelocity.setValue(0, 0, 0);
- solverBody->m_angularVelocity.setValue(0, 0, 0);
- solverBody->m_externalForceImpulse.setValue(0, 0, 0);
- solverBody->m_externalTorqueImpulse.setValue(0, 0, 0);
- }
- }
-
-btScalar btSequentialImpulseConstraintSolver::restitutionCurve(btScalar rel_vel, btScalar restitution, btScalar velocityThreshold)
-{
- //printf("rel_vel =%f\n", rel_vel);
- if (btFabs(rel_vel) < velocityThreshold)
- return 0.;
-
- btScalar rest = restitution * -rel_vel;
- return rest;
-}
-
-void btSequentialImpulseConstraintSolver::applyAnisotropicFriction(btCollisionObject* colObj, btVector3& frictionDirection, int frictionMode)
-{
- if (colObj && colObj->hasAnisotropicFriction(frictionMode))
- {
- // transform to local coordinates
- btVector3 loc_lateral = frictionDirection * colObj->getWorldTransform().getBasis();
- const btVector3& friction_scaling = colObj->getAnisotropicFriction();
- //apply anisotropic friction
- loc_lateral *= friction_scaling;
- // ... and transform it back to global coordinates
- frictionDirection = colObj->getWorldTransform().getBasis() * loc_lateral;
- }
-}
-
-void btSequentialImpulseConstraintSolver::setupFrictionConstraint(btSolverConstraint& solverConstraint, const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, btManifoldPoint& cp, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity, btScalar cfmSlip)
-{
- btSolverBody& solverBodyA = m_tmpSolverBodyPool[solverBodyIdA];
- btSolverBody& solverBodyB = m_tmpSolverBodyPool[solverBodyIdB];
-
- btRigidBody* body0 = m_tmpSolverBodyPool[solverBodyIdA].m_originalBody;
- btRigidBody* bodyA = m_tmpSolverBodyPool[solverBodyIdB].m_originalBody;
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
-
- solverConstraint.m_friction = cp.m_combinedFriction;
- solverConstraint.m_originalContactPoint = 0;
-
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- if (body0)
- {
- solverConstraint.m_contactNormal1 = normalAxis;
- btVector3 ftorqueAxis1 = rel_pos1.cross(solverConstraint.m_contactNormal1);
- solverConstraint.m_relpos1CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentA = body0->getInvInertiaTensorWorld() * ftorqueAxis1 * body0->getAngularFactor();
- }
- else
- {
- solverConstraint.m_contactNormal1.setZero();
- solverConstraint.m_relpos1CrossNormal.setZero();
- solverConstraint.m_angularComponentA.setZero();
- }
-
- if (bodyA)
- {
- solverConstraint.m_contactNormal2 = -normalAxis;
- btVector3 ftorqueAxis1 = rel_pos2.cross(solverConstraint.m_contactNormal2);
- solverConstraint.m_relpos2CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentB = bodyA->getInvInertiaTensorWorld() * ftorqueAxis1 * bodyA->getAngularFactor();
- }
- else
- {
- solverConstraint.m_contactNormal2.setZero();
- solverConstraint.m_relpos2CrossNormal.setZero();
- solverConstraint.m_angularComponentB.setZero();
- }
-
- {
- btVector3 vec;
- btScalar denom0 = 0.f;
- btScalar denom1 = 0.f;
- if (body0)
- {
- vec = (solverConstraint.m_angularComponentA).cross(rel_pos1);
- denom0 = body0->getInvMass() + normalAxis.dot(vec);
- }
- if (bodyA)
- {
- vec = (-solverConstraint.m_angularComponentB).cross(rel_pos2);
- denom1 = bodyA->getInvMass() + normalAxis.dot(vec);
- }
- btScalar denom = relaxation / (denom0 + denom1);
- solverConstraint.m_jacDiagABInv = denom;
- }
-
- {
- btScalar rel_vel;
- btScalar vel1Dotn = solverConstraint.m_contactNormal1.dot(body0 ? solverBodyA.m_linearVelocity + solverBodyA.m_externalForceImpulse : btVector3(0, 0, 0)) + solverConstraint.m_relpos1CrossNormal.dot(body0 ? solverBodyA.m_angularVelocity : btVector3(0, 0, 0));
- btScalar vel2Dotn = solverConstraint.m_contactNormal2.dot(bodyA ? solverBodyB.m_linearVelocity + solverBodyB.m_externalForceImpulse : btVector3(0, 0, 0)) + solverConstraint.m_relpos2CrossNormal.dot(bodyA ? solverBodyB.m_angularVelocity : btVector3(0, 0, 0));
-
- rel_vel = vel1Dotn + vel2Dotn;
-
- // btScalar positionalError = 0.f;
-
- btScalar velocityError = desiredVelocity - rel_vel;
- btScalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
-
- btScalar penetrationImpulse = btScalar(0);
-
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR)
- {
- btScalar distance = (cp.getPositionWorldOnA() - cp.getPositionWorldOnB()).dot(normalAxis);
- btScalar positionalError = -distance * infoGlobal.m_frictionERP / infoGlobal.m_timeStep;
- penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- }
-
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_rhsPenetration = 0.f;
- solverConstraint.m_cfm = cfmSlip;
- solverConstraint.m_lowerLimit = -solverConstraint.m_friction;
- solverConstraint.m_upperLimit = solverConstraint.m_friction;
- }
-}
-
-btSolverConstraint& btSequentialImpulseConstraintSolver::addFrictionConstraint(const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint& cp, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity, btScalar cfmSlip)
-{
- btSolverConstraint& solverConstraint = m_tmpSolverContactFrictionConstraintPool.expandNonInitializing();
- solverConstraint.m_frictionIndex = frictionIndex;
- setupFrictionConstraint(solverConstraint, normalAxis, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2,
- colObj0, colObj1, relaxation, infoGlobal, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-
-void btSequentialImpulseConstraintSolver::setupTorsionalFrictionConstraint(btSolverConstraint& solverConstraint, const btVector3& normalAxis1, int solverBodyIdA, int solverBodyIdB,
- btManifoldPoint& cp, btScalar combinedTorsionalFriction, const btVector3& rel_pos1, const btVector3& rel_pos2,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation,
- btScalar desiredVelocity, btScalar cfmSlip)
-
-{
- btVector3 normalAxis(0, 0, 0);
-
- solverConstraint.m_contactNormal1 = normalAxis;
- solverConstraint.m_contactNormal2 = -normalAxis;
- btSolverBody& solverBodyA = m_tmpSolverBodyPool[solverBodyIdA];
- btSolverBody& solverBodyB = m_tmpSolverBodyPool[solverBodyIdB];
-
- btRigidBody* body0 = m_tmpSolverBodyPool[solverBodyIdA].m_originalBody;
- btRigidBody* bodyA = m_tmpSolverBodyPool[solverBodyIdB].m_originalBody;
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
-
- solverConstraint.m_friction = combinedTorsionalFriction;
- solverConstraint.m_originalContactPoint = 0;
-
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- btVector3 ftorqueAxis1 = -normalAxis1;
- solverConstraint.m_relpos1CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentA = body0 ? body0->getInvInertiaTensorWorld() * ftorqueAxis1 * body0->getAngularFactor() : btVector3(0, 0, 0);
- }
- {
- btVector3 ftorqueAxis1 = normalAxis1;
- solverConstraint.m_relpos2CrossNormal = ftorqueAxis1;
- solverConstraint.m_angularComponentB = bodyA ? bodyA->getInvInertiaTensorWorld() * ftorqueAxis1 * bodyA->getAngularFactor() : btVector3(0, 0, 0);
- }
-
- {
- btVector3 iMJaA = body0 ? body0->getInvInertiaTensorWorld() * solverConstraint.m_relpos1CrossNormal : btVector3(0, 0, 0);
- btVector3 iMJaB = bodyA ? bodyA->getInvInertiaTensorWorld() * solverConstraint.m_relpos2CrossNormal : btVector3(0, 0, 0);
- btScalar sum = 0;
- sum += iMJaA.dot(solverConstraint.m_relpos1CrossNormal);
- sum += iMJaB.dot(solverConstraint.m_relpos2CrossNormal);
- solverConstraint.m_jacDiagABInv = btScalar(1.) / sum;
- }
-
- {
- btScalar rel_vel;
- btScalar vel1Dotn = solverConstraint.m_contactNormal1.dot(body0 ? solverBodyA.m_linearVelocity + solverBodyA.m_externalForceImpulse : btVector3(0, 0, 0)) + solverConstraint.m_relpos1CrossNormal.dot(body0 ? solverBodyA.m_angularVelocity : btVector3(0, 0, 0));
- btScalar vel2Dotn = solverConstraint.m_contactNormal2.dot(bodyA ? solverBodyB.m_linearVelocity + solverBodyB.m_externalForceImpulse : btVector3(0, 0, 0)) + solverConstraint.m_relpos2CrossNormal.dot(bodyA ? solverBodyB.m_angularVelocity : btVector3(0, 0, 0));
-
- rel_vel = vel1Dotn + vel2Dotn;
-
- // btScalar positionalError = 0.f;
-
- btSimdScalar velocityError = desiredVelocity - rel_vel;
- btSimdScalar velocityImpulse = velocityError * btSimdScalar(solverConstraint.m_jacDiagABInv);
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_cfm = cfmSlip;
- solverConstraint.m_lowerLimit = -solverConstraint.m_friction;
- solverConstraint.m_upperLimit = solverConstraint.m_friction;
- }
-}
-
-btSolverConstraint& btSequentialImpulseConstraintSolver::addTorsionalFrictionConstraint(const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint& cp, btScalar combinedTorsionalFriction, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, btScalar desiredVelocity, btScalar cfmSlip)
-{
- btSolverConstraint& solverConstraint = m_tmpSolverContactRollingFrictionConstraintPool.expandNonInitializing();
- solverConstraint.m_frictionIndex = frictionIndex;
- setupTorsionalFrictionConstraint(solverConstraint, normalAxis, solverBodyIdA, solverBodyIdB, cp, combinedTorsionalFriction, rel_pos1, rel_pos2,
- colObj0, colObj1, relaxation, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-
-int btSequentialImpulseConstraintSolver::getOrInitSolverBody(btCollisionObject& body, btScalar timeStep)
-{
-#if BT_THREADSAFE
- int solverBodyId = -1;
- const bool isRigidBodyType = btRigidBody::upcast(&body) != NULL;
- const bool isStaticOrKinematic = body.isStaticOrKinematicObject();
- const bool isKinematic = body.isKinematicObject();
- if (isRigidBodyType && !isStaticOrKinematic)
- {
- // dynamic body
- // Dynamic bodies can only be in one island, so it's safe to write to the companionId
- solverBodyId = body.getCompanionId();
- if (solverBodyId < 0)
- {
- solverBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&solverBody, &body, timeStep);
- body.setCompanionId(solverBodyId);
- }
- }
- else if (isRigidBodyType && isKinematic)
- {
- //
- // NOTE: must test for kinematic before static because some kinematic objects also
- // identify as "static"
- //
- // Kinematic bodies can be in multiple islands at once, so it is a
- // race condition to write to them, so we use an alternate method
- // to record the solverBodyId
- int uniqueId = body.getWorldArrayIndex();
- const int INVALID_SOLVER_BODY_ID = -1;
- if (uniqueId >= m_kinematicBodyUniqueIdToSolverBodyTable.size())
- {
- m_kinematicBodyUniqueIdToSolverBodyTable.resize(uniqueId + 1, INVALID_SOLVER_BODY_ID);
- }
- solverBodyId = m_kinematicBodyUniqueIdToSolverBodyTable[uniqueId];
- // if no table entry yet,
- if (solverBodyId == INVALID_SOLVER_BODY_ID)
- {
- // create a table entry for this body
- solverBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&solverBody, &body, timeStep);
- m_kinematicBodyUniqueIdToSolverBodyTable[uniqueId] = solverBodyId;
- }
- }
- else
- {
- bool isMultiBodyType = (body.getInternalType() & btCollisionObject::CO_FEATHERSTONE_LINK);
- // Incorrectly set collision object flags can degrade performance in various ways.
- if (!isMultiBodyType)
- {
- btAssert(body.isStaticOrKinematicObject());
- }
- //it could be a multibody link collider
- // all fixed bodies (inf mass) get mapped to a single solver id
- if (m_fixedBodyId < 0)
- {
- m_fixedBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& fixedBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&fixedBody, 0, timeStep);
- }
- solverBodyId = m_fixedBodyId;
- }
- btAssert(solverBodyId >= 0 && solverBodyId < m_tmpSolverBodyPool.size());
- return solverBodyId;
-#else // BT_THREADSAFE
-
- int solverBodyIdA = -1;
-
- if (body.getCompanionId() >= 0)
- {
- //body has already been converted
- solverBodyIdA = body.getCompanionId();
- btAssert(solverBodyIdA < m_tmpSolverBodyPool.size());
- }
- else
- {
- btRigidBody* rb = btRigidBody::upcast(&body);
- //convert both active and kinematic objects (for their velocity)
- if (rb && (rb->getInvMass() || rb->isKinematicObject()))
- {
- solverBodyIdA = m_tmpSolverBodyPool.size();
- btSolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&solverBody, &body, timeStep);
- body.setCompanionId(solverBodyIdA);
- }
- else
- {
- if (m_fixedBodyId < 0)
- {
- m_fixedBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& fixedBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&fixedBody, 0, timeStep);
- }
- return m_fixedBodyId;
- // return 0;//assume first one is a fixed solver body
- }
- }
-
- return solverBodyIdA;
-#endif // BT_THREADSAFE
-}
-#include <stdio.h>
-
-void btSequentialImpulseConstraintSolver::setupContactConstraint(btSolverConstraint& solverConstraint,
- int solverBodyIdA, int solverBodyIdB,
- btManifoldPoint& cp, const btContactSolverInfo& infoGlobal,
- btScalar& relaxation,
- const btVector3& rel_pos1, const btVector3& rel_pos2)
-{
- // const btVector3& pos1 = cp.getPositionWorldOnA();
- // const btVector3& pos2 = cp.getPositionWorldOnB();
-
- btSolverBody* bodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- btSolverBody* bodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- btRigidBody* rb0 = bodyA->m_originalBody;
- btRigidBody* rb1 = bodyB->m_originalBody;
-
- // btVector3 rel_pos1 = pos1 - colObj0->getWorldTransform().getOrigin();
- // btVector3 rel_pos2 = pos2 - colObj1->getWorldTransform().getOrigin();
- //rel_pos1 = pos1 - bodyA->getWorldTransform().getOrigin();
- //rel_pos2 = pos2 - bodyB->getWorldTransform().getOrigin();
-
- relaxation = infoGlobal.m_sor;
- btScalar invTimeStep = btScalar(1) / infoGlobal.m_timeStep;
-
- //cfm = 1 / ( dt * kp + kd )
- //erp = dt * kp / ( dt * kp + kd )
-
- btScalar cfm = infoGlobal.m_globalCfm;
- btScalar erp = infoGlobal.m_erp2;
-
- if ((cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_CFM) || (cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_ERP))
- {
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_CFM)
- cfm = cp.m_contactCFM;
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_ERP)
- erp = cp.m_contactERP;
- }
- else
- {
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING)
- {
- btScalar denom = (infoGlobal.m_timeStep * cp.m_combinedContactStiffness1 + cp.m_combinedContactDamping1);
- if (denom < SIMD_EPSILON)
- {
- denom = SIMD_EPSILON;
- }
- cfm = btScalar(1) / denom;
- erp = (infoGlobal.m_timeStep * cp.m_combinedContactStiffness1) / denom;
- }
- }
-
- cfm *= invTimeStep;
-
- btVector3 torqueAxis0 = rel_pos1.cross(cp.m_normalWorldOnB);
- solverConstraint.m_angularComponentA = rb0 ? rb0->getInvInertiaTensorWorld() * torqueAxis0 * rb0->getAngularFactor() : btVector3(0, 0, 0);
- btVector3 torqueAxis1 = rel_pos2.cross(cp.m_normalWorldOnB);
- solverConstraint.m_angularComponentB = rb1 ? rb1->getInvInertiaTensorWorld() * -torqueAxis1 * rb1->getAngularFactor() : btVector3(0, 0, 0);
-
- {
-#ifdef COMPUTE_IMPULSE_DENOM
- btScalar denom0 = rb0->computeImpulseDenominator(pos1, cp.m_normalWorldOnB);
- btScalar denom1 = rb1->computeImpulseDenominator(pos2, cp.m_normalWorldOnB);
-#else
- btVector3 vec;
- btScalar denom0 = 0.f;
- btScalar denom1 = 0.f;
- if (rb0)
- {
- vec = (solverConstraint.m_angularComponentA).cross(rel_pos1);
- denom0 = rb0->getInvMass() + cp.m_normalWorldOnB.dot(vec);
- }
- if (rb1)
- {
- vec = (-solverConstraint.m_angularComponentB).cross(rel_pos2);
- denom1 = rb1->getInvMass() + cp.m_normalWorldOnB.dot(vec);
- }
-#endif //COMPUTE_IMPULSE_DENOM
-
- btScalar denom = relaxation / (denom0 + denom1 + cfm);
- solverConstraint.m_jacDiagABInv = denom;
- }
-
- if (rb0)
- {
- solverConstraint.m_contactNormal1 = cp.m_normalWorldOnB;
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- }
- else
- {
- solverConstraint.m_contactNormal1.setZero();
- solverConstraint.m_relpos1CrossNormal.setZero();
- }
- if (rb1)
- {
- solverConstraint.m_contactNormal2 = -cp.m_normalWorldOnB;
- solverConstraint.m_relpos2CrossNormal = -torqueAxis1;
- }
- else
- {
- solverConstraint.m_contactNormal2.setZero();
- solverConstraint.m_relpos2CrossNormal.setZero();
- }
-
- btScalar restitution = 0.f;
- btScalar penetration = cp.getDistance() + infoGlobal.m_linearSlop;
-
- {
- btVector3 vel1, vel2;
-
- vel1 = rb0 ? rb0->getVelocityInLocalPoint(rel_pos1) : btVector3(0, 0, 0);
- vel2 = rb1 ? rb1->getVelocityInLocalPoint(rel_pos2) : btVector3(0, 0, 0);
-
- // btVector3 vel2 = rb1 ? rb1->getVelocityInLocalPoint(rel_pos2) : btVector3(0,0,0);
- btVector3 vel = vel1 - vel2;
- btScalar rel_vel = cp.m_normalWorldOnB.dot(vel);
-
- solverConstraint.m_friction = cp.m_combinedFriction;
-
- restitution = restitutionCurve(rel_vel, cp.m_combinedRestitution, infoGlobal.m_restitutionVelocityThreshold);
- if (restitution <= btScalar(0.))
- {
- restitution = 0.f;
- };
- }
-
- ///warm starting (or zero if disabled)
- if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)
- {
- solverConstraint.m_appliedImpulse = cp.m_appliedImpulse * infoGlobal.m_warmstartingFactor;
- if (rb0)
- bodyA->internalApplyImpulse(solverConstraint.m_contactNormal1 * bodyA->internalGetInvMass(), solverConstraint.m_angularComponentA, solverConstraint.m_appliedImpulse);
- if (rb1)
- bodyB->internalApplyImpulse(-solverConstraint.m_contactNormal2 * bodyB->internalGetInvMass(), -solverConstraint.m_angularComponentB, -(btScalar)solverConstraint.m_appliedImpulse);
- }
- else
- {
- solverConstraint.m_appliedImpulse = 0.f;
- }
-
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- btVector3 externalForceImpulseA = bodyA->m_originalBody ? bodyA->m_externalForceImpulse : btVector3(0, 0, 0);
- btVector3 externalTorqueImpulseA = bodyA->m_originalBody ? bodyA->m_externalTorqueImpulse : btVector3(0, 0, 0);
- btVector3 externalForceImpulseB = bodyB->m_originalBody ? bodyB->m_externalForceImpulse : btVector3(0, 0, 0);
- btVector3 externalTorqueImpulseB = bodyB->m_originalBody ? bodyB->m_externalTorqueImpulse : btVector3(0, 0, 0);
-
- btScalar vel1Dotn = solverConstraint.m_contactNormal1.dot(bodyA->m_linearVelocity + externalForceImpulseA) + solverConstraint.m_relpos1CrossNormal.dot(bodyA->m_angularVelocity + externalTorqueImpulseA);
- btScalar vel2Dotn = solverConstraint.m_contactNormal2.dot(bodyB->m_linearVelocity + externalForceImpulseB) + solverConstraint.m_relpos2CrossNormal.dot(bodyB->m_angularVelocity + externalTorqueImpulseB);
- btScalar rel_vel = vel1Dotn + vel2Dotn;
-
- btScalar positionalError = 0.f;
- btScalar velocityError = restitution - rel_vel; // * damping;
-
- if (penetration > 0)
- {
- positionalError = 0;
-
- velocityError -= penetration * invTimeStep;
- }
- else
- {
- positionalError = -penetration * erp * invTimeStep;
- }
-
- btScalar penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- btScalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
-
- if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- //combine position and velocity into rhs
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse; //-solverConstraint.m_contactNormal1.dot(bodyA->m_externalForce*bodyA->m_invMass-bodyB->m_externalForce/bodyB->m_invMass)*solverConstraint.m_jacDiagABInv;
- solverConstraint.m_rhsPenetration = 0.f;
- }
- else
- {
- //split position and velocity into rhs and m_rhsPenetration
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_rhsPenetration = penetrationImpulse;
- }
- solverConstraint.m_cfm = cfm * solverConstraint.m_jacDiagABInv;
- solverConstraint.m_lowerLimit = 0;
- solverConstraint.m_upperLimit = 1e10f;
- }
-}
-
-void btSequentialImpulseConstraintSolver::setFrictionConstraintImpulse(btSolverConstraint& solverConstraint,
- int solverBodyIdA, int solverBodyIdB,
- btManifoldPoint& cp, const btContactSolverInfo& infoGlobal)
-{
- {
- btSolverConstraint& frictionConstraint1 = m_tmpSolverContactFrictionConstraintPool[solverConstraint.m_frictionIndex];
-
- frictionConstraint1.m_appliedImpulse = 0.f;
- }
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- btSolverConstraint& frictionConstraint2 = m_tmpSolverContactFrictionConstraintPool[solverConstraint.m_frictionIndex + 1];
-
- frictionConstraint2.m_appliedImpulse = 0.f;
- }
-}
-
-void btSequentialImpulseConstraintSolver::convertContact(btPersistentManifold* manifold, const btContactSolverInfo& infoGlobal)
-{
- btCollisionObject *colObj0 = 0, *colObj1 = 0;
-
- colObj0 = (btCollisionObject*)manifold->getBody0();
- colObj1 = (btCollisionObject*)manifold->getBody1();
-
- int solverBodyIdA = getOrInitSolverBody(*colObj0, infoGlobal.m_timeStep);
- int solverBodyIdB = getOrInitSolverBody(*colObj1, infoGlobal.m_timeStep);
-
- // btRigidBody* bodyA = btRigidBody::upcast(colObj0);
- // btRigidBody* bodyB = btRigidBody::upcast(colObj1);
-
- btSolverBody* solverBodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- btSolverBody* solverBodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- ///avoid collision response between two static objects
- if (!solverBodyA || (solverBodyA->m_invMass.fuzzyZero() && (!solverBodyB || solverBodyB->m_invMass.fuzzyZero())))
- return;
-
- int rollingFriction = 1;
- for (int j = 0; j < manifold->getNumContacts(); j++)
- {
- btManifoldPoint& cp = manifold->getContactPoint(j);
-
- if (cp.getDistance() <= manifold->getContactProcessingThreshold())
- {
- btVector3 rel_pos1;
- btVector3 rel_pos2;
- btScalar relaxation;
-
- int frictionIndex = m_tmpSolverContactConstraintPool.size();
- btSolverConstraint& solverConstraint = m_tmpSolverContactConstraintPool.expandNonInitializing();
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
-
- solverConstraint.m_originalContactPoint = &cp;
-
- const btVector3& pos1 = cp.getPositionWorldOnA();
- const btVector3& pos2 = cp.getPositionWorldOnB();
-
- rel_pos1 = pos1 - colObj0->getWorldTransform().getOrigin();
- rel_pos2 = pos2 - colObj1->getWorldTransform().getOrigin();
-
- btVector3 vel1;
- btVector3 vel2;
-
- solverBodyA->getVelocityInLocalPointNoDelta(rel_pos1, vel1);
- solverBodyB->getVelocityInLocalPointNoDelta(rel_pos2, vel2);
-
- btVector3 vel = vel1 - vel2;
- btScalar rel_vel = cp.m_normalWorldOnB.dot(vel);
-
- setupContactConstraint(solverConstraint, solverBodyIdA, solverBodyIdB, cp, infoGlobal, relaxation, rel_pos1, rel_pos2);
-
- /////setup the friction constraints
-
- solverConstraint.m_frictionIndex = m_tmpSolverContactFrictionConstraintPool.size();
-
- if ((cp.m_combinedRollingFriction > 0.f) && (rollingFriction > 0))
- {
- {
- addTorsionalFrictionConstraint(cp.m_normalWorldOnB, solverBodyIdA, solverBodyIdB, frictionIndex, cp, cp.m_combinedSpinningFriction, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- btVector3 axis0, axis1;
- btPlaneSpace1(cp.m_normalWorldOnB, axis0, axis1);
- axis0.normalize();
- axis1.normalize();
-
- applyAnisotropicFriction(colObj0, axis0, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj1, axis0, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj0, axis1, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj1, axis1, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- if (axis0.length() > 0.001)
- addTorsionalFrictionConstraint(axis0, solverBodyIdA, solverBodyIdB, frictionIndex, cp,
- cp.m_combinedRollingFriction, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- if (axis1.length() > 0.001)
- addTorsionalFrictionConstraint(axis1, solverBodyIdA, solverBodyIdB, frictionIndex, cp,
- cp.m_combinedRollingFriction, rel_pos1, rel_pos2, colObj0, colObj1, relaxation);
- }
- }
-
- ///Bullet has several options to set the friction directions
- ///By default, each contact has only a single friction direction that is recomputed automatically very frame
- ///based on the relative linear velocity.
- ///If the relative velocity it zero, it will automatically compute a friction direction.
-
- ///You can also enable two friction directions, using the SOLVER_USE_2_FRICTION_DIRECTIONS.
- ///In that case, the second friction direction will be orthogonal to both contact normal and first friction direction.
- ///
- ///If you choose SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, then the friction will be independent from the relative projected velocity.
- ///
- ///The user can manually override the friction directions for certain contacts using a contact callback,
- ///and use contactPoint.m_contactPointFlags |= BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED
- ///In that case, you can set the target relative motion in each friction direction (cp.m_contactMotion1 and cp.m_contactMotion2)
- ///this will give a conveyor belt effect
- ///
-
- if (!(infoGlobal.m_solverMode & SOLVER_ENABLE_FRICTION_DIRECTION_CACHING) || !(cp.m_contactPointFlags & BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED))
- {
- cp.m_lateralFrictionDir1 = vel - cp.m_normalWorldOnB * rel_vel;
- btScalar lat_rel_vel = cp.m_lateralFrictionDir1.length2();
- if (!(infoGlobal.m_solverMode & SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION) && lat_rel_vel > SIMD_EPSILON)
- {
- cp.m_lateralFrictionDir1 *= 1.f / btSqrt(lat_rel_vel);
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addFrictionConstraint(cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- cp.m_lateralFrictionDir2 = cp.m_lateralFrictionDir1.cross(cp.m_normalWorldOnB);
- cp.m_lateralFrictionDir2.normalize(); //??
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addFrictionConstraint(cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
- }
- }
- else
- {
- btPlaneSpace1(cp.m_normalWorldOnB, cp.m_lateralFrictionDir1, cp.m_lateralFrictionDir2);
-
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addFrictionConstraint(cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addFrictionConstraint(cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
- }
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS) && (infoGlobal.m_solverMode & SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION))
- {
- cp.m_contactPointFlags |= BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED;
- }
- }
- }
- else
- {
- addFrictionConstraint(cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal, cp.m_contactMotion1, cp.m_frictionCFM);
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- addFrictionConstraint(cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, frictionIndex, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal, cp.m_contactMotion2, cp.m_frictionCFM);
- }
- setFrictionConstraintImpulse(solverConstraint, solverBodyIdA, solverBodyIdB, cp, infoGlobal);
- }
- }
- }
-
-void btSequentialImpulseConstraintSolver::convertContacts(btPersistentManifold** manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal)
-{
- int i;
- btPersistentManifold* manifold = 0;
- // btCollisionObject* colObj0=0,*colObj1=0;
-
- for (i = 0; i < numManifolds; i++)
- {
- manifold = manifoldPtr[i];
- convertContact(manifold, infoGlobal);
- }
-}
-
-void btSequentialImpulseConstraintSolver::convertJoint(btSolverConstraint* currentConstraintRow,
- btTypedConstraint* constraint,
- const btTypedConstraint::btConstraintInfo1& info1,
- int solverBodyIdA,
- int solverBodyIdB,
- const btContactSolverInfo& infoGlobal)
-{
- const btRigidBody& rbA = constraint->getRigidBodyA();
- const btRigidBody& rbB = constraint->getRigidBodyB();
-
- const btSolverBody* bodyAPtr = &m_tmpSolverBodyPool[solverBodyIdA];
- const btSolverBody* bodyBPtr = &m_tmpSolverBodyPool[solverBodyIdB];
-
- int overrideNumSolverIterations = constraint->getOverrideNumSolverIterations() > 0 ? constraint->getOverrideNumSolverIterations() : infoGlobal.m_numIterations;
- if (overrideNumSolverIterations > m_maxOverrideNumSolverIterations)
- m_maxOverrideNumSolverIterations = overrideNumSolverIterations;
-
- for (int j = 0; j < info1.m_numConstraintRows; j++)
- {
- memset(&currentConstraintRow[j], 0, sizeof(btSolverConstraint));
- currentConstraintRow[j].m_lowerLimit = -SIMD_INFINITY;
- currentConstraintRow[j].m_upperLimit = SIMD_INFINITY;
- currentConstraintRow[j].m_appliedImpulse = 0.f;
- currentConstraintRow[j].m_appliedPushImpulse = 0.f;
- currentConstraintRow[j].m_solverBodyIdA = solverBodyIdA;
- currentConstraintRow[j].m_solverBodyIdB = solverBodyIdB;
- currentConstraintRow[j].m_overrideNumSolverIterations = overrideNumSolverIterations;
- }
-
- // these vectors are already cleared in initSolverBody, no need to redundantly clear again
- btAssert(bodyAPtr->getDeltaLinearVelocity().isZero());
- btAssert(bodyAPtr->getDeltaAngularVelocity().isZero());
- btAssert(bodyAPtr->getPushVelocity().isZero());
- btAssert(bodyAPtr->getTurnVelocity().isZero());
- btAssert(bodyBPtr->getDeltaLinearVelocity().isZero());
- btAssert(bodyBPtr->getDeltaAngularVelocity().isZero());
- btAssert(bodyBPtr->getPushVelocity().isZero());
- btAssert(bodyBPtr->getTurnVelocity().isZero());
- //bodyAPtr->internalGetDeltaLinearVelocity().setValue(0.f,0.f,0.f);
- //bodyAPtr->internalGetDeltaAngularVelocity().setValue(0.f,0.f,0.f);
- //bodyAPtr->internalGetPushVelocity().setValue(0.f,0.f,0.f);
- //bodyAPtr->internalGetTurnVelocity().setValue(0.f,0.f,0.f);
- //bodyBPtr->internalGetDeltaLinearVelocity().setValue(0.f,0.f,0.f);
- //bodyBPtr->internalGetDeltaAngularVelocity().setValue(0.f,0.f,0.f);
- //bodyBPtr->internalGetPushVelocity().setValue(0.f,0.f,0.f);
- //bodyBPtr->internalGetTurnVelocity().setValue(0.f,0.f,0.f);
-
- btTypedConstraint::btConstraintInfo2 info2;
- info2.fps = 1.f / infoGlobal.m_timeStep;
- info2.erp = infoGlobal.m_erp;
- info2.m_J1linearAxis = currentConstraintRow->m_contactNormal1;
- info2.m_J1angularAxis = currentConstraintRow->m_relpos1CrossNormal;
- info2.m_J2linearAxis = currentConstraintRow->m_contactNormal2;
- info2.m_J2angularAxis = currentConstraintRow->m_relpos2CrossNormal;
- info2.rowskip = sizeof(btSolverConstraint) / sizeof(btScalar); //check this
- ///the size of btSolverConstraint needs be a multiple of btScalar
- btAssert(info2.rowskip * sizeof(btScalar) == sizeof(btSolverConstraint));
- info2.m_constraintError = &currentConstraintRow->m_rhs;
- currentConstraintRow->m_cfm = infoGlobal.m_globalCfm;
- info2.m_damping = infoGlobal.m_damping;
- info2.cfm = &currentConstraintRow->m_cfm;
- info2.m_lowerLimit = &currentConstraintRow->m_lowerLimit;
- info2.m_upperLimit = &currentConstraintRow->m_upperLimit;
- info2.m_numIterations = infoGlobal.m_numIterations;
- constraint->getInfo2(&info2);
-
- ///finalize the constraint setup
- for (int j = 0; j < info1.m_numConstraintRows; j++)
- {
- btSolverConstraint& solverConstraint = currentConstraintRow[j];
-
- if (solverConstraint.m_upperLimit >= constraint->getBreakingImpulseThreshold())
- {
- solverConstraint.m_upperLimit = constraint->getBreakingImpulseThreshold();
- }
-
- if (solverConstraint.m_lowerLimit <= -constraint->getBreakingImpulseThreshold())
- {
- solverConstraint.m_lowerLimit = -constraint->getBreakingImpulseThreshold();
- }
-
- solverConstraint.m_originalContactPoint = constraint;
-
- {
- const btVector3& ftorqueAxis1 = solverConstraint.m_relpos1CrossNormal;
- solverConstraint.m_angularComponentA = constraint->getRigidBodyA().getInvInertiaTensorWorld() * ftorqueAxis1 * constraint->getRigidBodyA().getAngularFactor();
- }
- {
- const btVector3& ftorqueAxis2 = solverConstraint.m_relpos2CrossNormal;
- solverConstraint.m_angularComponentB = constraint->getRigidBodyB().getInvInertiaTensorWorld() * ftorqueAxis2 * constraint->getRigidBodyB().getAngularFactor();
- }
-
- {
- btVector3 iMJlA = solverConstraint.m_contactNormal1 * rbA.getInvMass();
- btVector3 iMJaA = rbA.getInvInertiaTensorWorld() * solverConstraint.m_relpos1CrossNormal;
- btVector3 iMJlB = solverConstraint.m_contactNormal2 * rbB.getInvMass(); //sign of normal?
- btVector3 iMJaB = rbB.getInvInertiaTensorWorld() * solverConstraint.m_relpos2CrossNormal;
-
- btScalar sum = iMJlA.dot(solverConstraint.m_contactNormal1);
- sum += iMJaA.dot(solverConstraint.m_relpos1CrossNormal);
- sum += iMJlB.dot(solverConstraint.m_contactNormal2);
- sum += iMJaB.dot(solverConstraint.m_relpos2CrossNormal);
- btScalar fsum = btFabs(sum);
- btAssert(fsum > SIMD_EPSILON);
- btScalar sorRelaxation = 1.f; //todo: get from globalInfo?
- solverConstraint.m_jacDiagABInv = fsum > SIMD_EPSILON ? sorRelaxation / sum : 0.f;
- }
-
- {
- btScalar rel_vel;
- btVector3 externalForceImpulseA = bodyAPtr->m_originalBody ? bodyAPtr->m_externalForceImpulse : btVector3(0, 0, 0);
- btVector3 externalTorqueImpulseA = bodyAPtr->m_originalBody ? bodyAPtr->m_externalTorqueImpulse : btVector3(0, 0, 0);
-
- btVector3 externalForceImpulseB = bodyBPtr->m_originalBody ? bodyBPtr->m_externalForceImpulse : btVector3(0, 0, 0);
- btVector3 externalTorqueImpulseB = bodyBPtr->m_originalBody ? bodyBPtr->m_externalTorqueImpulse : btVector3(0, 0, 0);
-
- btScalar vel1Dotn = solverConstraint.m_contactNormal1.dot(rbA.getLinearVelocity() + externalForceImpulseA) + solverConstraint.m_relpos1CrossNormal.dot(rbA.getAngularVelocity() + externalTorqueImpulseA);
-
- btScalar vel2Dotn = solverConstraint.m_contactNormal2.dot(rbB.getLinearVelocity() + externalForceImpulseB) + solverConstraint.m_relpos2CrossNormal.dot(rbB.getAngularVelocity() + externalTorqueImpulseB);
-
- rel_vel = vel1Dotn + vel2Dotn;
- btScalar restitution = 0.f;
- btScalar positionalError = solverConstraint.m_rhs; //already filled in by getConstraintInfo2
- btScalar velocityError = restitution - rel_vel * info2.m_damping;
- btScalar penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- btScalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_appliedImpulse = 0.f;
- }
- }
-}
-
-void btSequentialImpulseConstraintSolver::convertJoints(btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("convertJoints");
- for (int j = 0; j < numConstraints; j++)
- {
- btTypedConstraint* constraint = constraints[j];
- constraint->buildJacobian();
- constraint->internalSetAppliedImpulse(0.0f);
- }
-
- int totalNumRows = 0;
-
- m_tmpConstraintSizesPool.resizeNoInitialize(numConstraints);
- //calculate the total number of contraint rows
- for (int i = 0; i < numConstraints; i++)
- {
- btTypedConstraint::btConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
- btJointFeedback* fb = constraints[i]->getJointFeedback();
- if (fb)
- {
- fb->m_appliedForceBodyA.setZero();
- fb->m_appliedTorqueBodyA.setZero();
- fb->m_appliedForceBodyB.setZero();
- fb->m_appliedTorqueBodyB.setZero();
- }
-
- if (constraints[i]->isEnabled())
- {
- constraints[i]->getInfo1(&info1);
- }
- else
- {
- info1.m_numConstraintRows = 0;
- info1.nub = 0;
- }
- totalNumRows += info1.m_numConstraintRows;
- }
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(totalNumRows);
-
- ///setup the btSolverConstraints
- int currentRow = 0;
-
- for (int i = 0; i < numConstraints; i++)
- {
- const btTypedConstraint::btConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
-
- if (info1.m_numConstraintRows)
- {
- btAssert(currentRow < totalNumRows);
-
- btSolverConstraint* currentConstraintRow = &m_tmpSolverNonContactConstraintPool[currentRow];
- btTypedConstraint* constraint = constraints[i];
- btRigidBody& rbA = constraint->getRigidBodyA();
- btRigidBody& rbB = constraint->getRigidBodyB();
-
- int solverBodyIdA = getOrInitSolverBody(rbA, infoGlobal.m_timeStep);
- int solverBodyIdB = getOrInitSolverBody(rbB, infoGlobal.m_timeStep);
-
- convertJoint(currentConstraintRow, constraint, info1, solverBodyIdA, solverBodyIdB, infoGlobal);
- }
- currentRow += info1.m_numConstraintRows;
- }
-}
-
-void btSequentialImpulseConstraintSolver::convertBodies(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("convertBodies");
- for (int i = 0; i < numBodies; i++)
- {
- bodies[i]->setCompanionId(-1);
- }
-#if BT_THREADSAFE
- m_kinematicBodyUniqueIdToSolverBodyTable.resize(0);
-#endif // BT_THREADSAFE
-
- m_tmpSolverBodyPool.reserve(numBodies + 1);
- m_tmpSolverBodyPool.resize(0);
-
- //btSolverBody& fixedBody = m_tmpSolverBodyPool.expand();
- //initSolverBody(&fixedBody,0);
-
- for (int i = 0; i < numBodies; i++)
- {
- int bodyId = getOrInitSolverBody(*bodies[i], infoGlobal.m_timeStep);
-
- btRigidBody* body = btRigidBody::upcast(bodies[i]);
- if (body && body->getInvMass())
- {
- btSolverBody& solverBody = m_tmpSolverBodyPool[bodyId];
- btVector3 gyroForce(0, 0, 0);
- if (body->getFlags() & BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT)
- {
- gyroForce = body->computeGyroscopicForceExplicit(infoGlobal.m_maxGyroscopicForce);
- solverBody.m_externalTorqueImpulse -= gyroForce * body->getInvInertiaTensorWorld() * infoGlobal.m_timeStep;
- }
- if (body->getFlags() & BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD)
- {
- gyroForce = body->computeGyroscopicImpulseImplicit_World(infoGlobal.m_timeStep);
- solverBody.m_externalTorqueImpulse += gyroForce;
- }
- if (body->getFlags() & BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY)
- {
- gyroForce = body->computeGyroscopicImpulseImplicit_Body(infoGlobal.m_timeStep);
- solverBody.m_externalTorqueImpulse += gyroForce;
- }
- }
- }
-}
-
-btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- m_fixedBodyId = -1;
- BT_PROFILE("solveGroupCacheFriendlySetup");
- (void)debugDrawer;
-
- // if solver mode has changed,
- if (infoGlobal.m_solverMode != m_cachedSolverMode)
- {
- // update solver functions to use SIMD or non-SIMD
- bool useSimd = !!(infoGlobal.m_solverMode & SOLVER_SIMD);
- setupSolverFunctions(useSimd);
- m_cachedSolverMode = infoGlobal.m_solverMode;
- }
- m_maxOverrideNumSolverIterations = 0;
-
-#ifdef BT_ADDITIONAL_DEBUG
- //make sure that dynamic bodies exist for all (enabled) constraints
- for (int i = 0; i < numConstraints; i++)
- {
- btTypedConstraint* constraint = constraints[i];
- if (constraint->isEnabled())
- {
- if (!constraint->getRigidBodyA().isStaticOrKinematicObject())
- {
- bool found = false;
- for (int b = 0; b < numBodies; b++)
- {
- if (&constraint->getRigidBodyA() == bodies[b])
- {
- found = true;
- break;
- }
- }
- btAssert(found);
- }
- if (!constraint->getRigidBodyB().isStaticOrKinematicObject())
- {
- bool found = false;
- for (int b = 0; b < numBodies; b++)
- {
- if (&constraint->getRigidBodyB() == bodies[b])
- {
- found = true;
- break;
- }
- }
- btAssert(found);
- }
- }
- }
- //make sure that dynamic bodies exist for all contact manifolds
- for (int i = 0; i < numManifolds; i++)
- {
- if (!manifoldPtr[i]->getBody0()->isStaticOrKinematicObject())
- {
- bool found = false;
- for (int b = 0; b < numBodies; b++)
- {
- if (manifoldPtr[i]->getBody0() == bodies[b])
- {
- found = true;
- break;
- }
- }
- btAssert(found);
- }
- if (!manifoldPtr[i]->getBody1()->isStaticOrKinematicObject())
- {
- bool found = false;
- for (int b = 0; b < numBodies; b++)
- {
- if (manifoldPtr[i]->getBody1() == bodies[b])
- {
- found = true;
- break;
- }
- }
- btAssert(found);
- }
- }
-#endif //BT_ADDITIONAL_DEBUG
-
- //convert all bodies
- convertBodies(bodies, numBodies, infoGlobal);
-
- convertJoints(constraints, numConstraints, infoGlobal);
-
- convertContacts(manifoldPtr, numManifolds, infoGlobal);
-
- // btContactSolverInfo info = infoGlobal;
-
- int numNonContactPool = m_tmpSolverNonContactConstraintPool.size();
- int numConstraintPool = m_tmpSolverContactConstraintPool.size();
- int numFrictionPool = m_tmpSolverContactFrictionConstraintPool.size();
-
- ///@todo: use stack allocator for such temporarily memory, same for solver bodies/constraints
- m_orderNonContactConstraintPool.resizeNoInitialize(numNonContactPool);
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- m_orderTmpConstraintPool.resizeNoInitialize(numConstraintPool * 2);
- else
- m_orderTmpConstraintPool.resizeNoInitialize(numConstraintPool);
-
- m_orderFrictionConstraintPool.resizeNoInitialize(numFrictionPool);
- {
- int i;
- for (i = 0; i < numNonContactPool; i++)
- {
- m_orderNonContactConstraintPool[i] = i;
- }
- for (i = 0; i < numConstraintPool; i++)
- {
- m_orderTmpConstraintPool[i] = i;
- }
- for (i = 0; i < numFrictionPool; i++)
- {
- m_orderFrictionConstraintPool[i] = i;
- }
- }
-
- return 0.f;
-}
-
-btScalar btSequentialImpulseConstraintSolver::solveSingleIteration(int iteration, btCollisionObject** /*bodies */, int /*numBodies*/, btPersistentManifold** /*manifoldPtr*/, int /*numManifolds*/, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* /*debugDrawer*/)
-{
- BT_PROFILE("solveSingleIteration");
- btScalar leastSquaresResidual = 0.f;
-
- int numNonContactPool = m_tmpSolverNonContactConstraintPool.size();
- int numConstraintPool = m_tmpSolverContactConstraintPool.size();
- int numFrictionPool = m_tmpSolverContactFrictionConstraintPool.size();
-
- if (infoGlobal.m_solverMode & SOLVER_RANDMIZE_ORDER)
- {
- if (1) // uncomment this for a bit less random ((iteration & 7) == 0)
- {
- for (int j = 0; j < numNonContactPool; ++j)
- {
- int tmp = m_orderNonContactConstraintPool[j];
- int swapi = btRandInt2(j + 1);
- m_orderNonContactConstraintPool[j] = m_orderNonContactConstraintPool[swapi];
- m_orderNonContactConstraintPool[swapi] = tmp;
- }
-
- //contact/friction constraints are not solved more than
- if (iteration < infoGlobal.m_numIterations)
- {
- for (int j = 0; j < numConstraintPool; ++j)
- {
- int tmp = m_orderTmpConstraintPool[j];
- int swapi = btRandInt2(j + 1);
- m_orderTmpConstraintPool[j] = m_orderTmpConstraintPool[swapi];
- m_orderTmpConstraintPool[swapi] = tmp;
- }
-
- for (int j = 0; j < numFrictionPool; ++j)
- {
- int tmp = m_orderFrictionConstraintPool[j];
- int swapi = btRandInt2(j + 1);
- m_orderFrictionConstraintPool[j] = m_orderFrictionConstraintPool[swapi];
- m_orderFrictionConstraintPool[swapi] = tmp;
- }
- }
- }
- }
-
- ///solve all joint constraints
- for (int j = 0; j < m_tmpSolverNonContactConstraintPool.size(); j++)
- {
- btSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[m_orderNonContactConstraintPool[j]];
- if (iteration < constraint.m_overrideNumSolverIterations)
- {
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[constraint.m_solverBodyIdA], m_tmpSolverBodyPool[constraint.m_solverBodyIdB], constraint);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- }
-
- if (iteration < infoGlobal.m_numIterations)
- {
- for (int j = 0; j < numConstraints; j++)
- {
- if (constraints[j]->isEnabled())
- {
- int bodyAid = getOrInitSolverBody(constraints[j]->getRigidBodyA(), infoGlobal.m_timeStep);
- int bodyBid = getOrInitSolverBody(constraints[j]->getRigidBodyB(), infoGlobal.m_timeStep);
- btSolverBody& bodyA = m_tmpSolverBodyPool[bodyAid];
- btSolverBody& bodyB = m_tmpSolverBodyPool[bodyBid];
- constraints[j]->solveConstraintObsolete(bodyA, bodyB, infoGlobal.m_timeStep);
- }
- }
-
- ///solve all contact constraints
- if (infoGlobal.m_solverMode & SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS)
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int multiplier = (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS) ? 2 : 1;
-
- for (int c = 0; c < numPoolConstraints; c++)
- {
- btScalar totalImpulse = 0;
-
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[c]];
- btScalar residual = resolveSingleConstraintRowLowerLimit(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
-
- totalImpulse = solveManifold.m_appliedImpulse;
- }
- bool applyFriction = true;
- if (applyFriction)
- {
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[c * multiplier]];
-
- if (totalImpulse > btScalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- }
-
- if (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS)
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[c * multiplier + 1]];
-
- if (totalImpulse > btScalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- }
- }
- }
- }
- else //SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS
- {
- //solve the friction constraints after all contact constraints, don't interleave them
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
-
- for (j = 0; j < numPoolConstraints; j++)
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
- btScalar residual = resolveSingleConstraintRowLowerLimit(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
-
- ///solve all friction constraints
-
- int numFrictionPoolConstraints = m_tmpSolverContactFrictionConstraintPool.size();
- for (j = 0; j < numFrictionPoolConstraints; j++)
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[m_orderFrictionConstraintPool[j]];
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
-
- if (totalImpulse > btScalar(0))
- {
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- }
- }
-
- int numRollingFrictionPoolConstraints = m_tmpSolverContactRollingFrictionConstraintPool.size();
- for (int j = 0; j < numRollingFrictionPoolConstraints; j++)
- {
- btSolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[j];
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[rollingFrictionConstraint.m_frictionIndex].m_appliedImpulse;
- if (totalImpulse > btScalar(0))
- {
- btScalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- }
- }
- return leastSquaresResidual;
-}
-
-void btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- BT_PROFILE("solveGroupCacheFriendlySplitImpulseIterations");
- int iteration;
- if (infoGlobal.m_splitImpulse)
- {
- {
- for (iteration = 0; iteration < infoGlobal.m_numIterations; iteration++)
- {
- btScalar leastSquaresResidual = 0.f;
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
- for (j = 0; j < numPoolConstraints; j++)
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
-
- btScalar residual = resolveSplitPenetrationImpulse(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- }
- if (leastSquaresResidual <= infoGlobal.m_leastSquaresResidualThreshold || iteration >= (infoGlobal.m_numIterations - 1))
- {
-#ifdef VERBOSE_RESIDUAL_PRINTF
- printf("residual = %f at iteration #%d\n", leastSquaresResidual, iteration);
-#endif
- break;
- }
- }
- }
- }
-}
-
-btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- BT_PROFILE("solveGroupCacheFriendlyIterations");
-
- {
- ///this is a special step to resolve penetrations (just for contacts)
- solveGroupCacheFriendlySplitImpulseIterations(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- int maxIterations = m_maxOverrideNumSolverIterations > infoGlobal.m_numIterations ? m_maxOverrideNumSolverIterations : infoGlobal.m_numIterations;
-
- for (int iteration = 0; iteration < maxIterations; iteration++)
- //for ( int iteration = maxIterations-1 ; iteration >= 0;iteration--)
- {
- m_leastSquaresResidual = solveSingleIteration(iteration, bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- if (m_leastSquaresResidual <= infoGlobal.m_leastSquaresResidualThreshold || (iteration >= (maxIterations - 1)))
- {
-#ifdef VERBOSE_RESIDUAL_PRINTF
- printf("residual = %f at iteration #%d\n", m_leastSquaresResidual, iteration);
-#endif
- m_analyticsData.m_numSolverCalls++;
- m_analyticsData.m_numIterationsUsed = iteration+1;
- m_analyticsData.m_islandId = -2;
- if (numBodies>0)
- m_analyticsData.m_islandId = bodies[0]->getCompanionId();
- m_analyticsData.m_numBodies = numBodies;
- m_analyticsData.m_numContactManifolds = numManifolds;
- m_analyticsData.m_remainingLeastSquaresResidual = m_leastSquaresResidual;
- break;
- }
- }
- }
- return 0.f;
-}
-
-void btSequentialImpulseConstraintSolver::writeBackContacts(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- for (int j = iBegin; j < iEnd; j++)
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[j];
- btManifoldPoint* pt = (btManifoldPoint*)solveManifold.m_originalContactPoint;
- btAssert(pt);
- pt->m_appliedImpulse = solveManifold.m_appliedImpulse;
- // float f = m_tmpSolverContactFrictionConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
- // printf("pt->m_appliedImpulseLateral1 = %f\n", f);
- pt->m_appliedImpulseLateral1 = m_tmpSolverContactFrictionConstraintPool[solveManifold.m_frictionIndex].m_appliedImpulse;
- //printf("pt->m_appliedImpulseLateral1 = %f\n", pt->m_appliedImpulseLateral1);
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- pt->m_appliedImpulseLateral2 = m_tmpSolverContactFrictionConstraintPool[solveManifold.m_frictionIndex + 1].m_appliedImpulse;
- }
- //do a callback here?
- }
-}
-
-void btSequentialImpulseConstraintSolver::writeBackJoints(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- for (int j = iBegin; j < iEnd; j++)
- {
- const btSolverConstraint& solverConstr = m_tmpSolverNonContactConstraintPool[j];
- btTypedConstraint* constr = (btTypedConstraint*)solverConstr.m_originalContactPoint;
- btJointFeedback* fb = constr->getJointFeedback();
- if (fb)
- {
- fb->m_appliedForceBodyA += solverConstr.m_contactNormal1 * solverConstr.m_appliedImpulse * constr->getRigidBodyA().getLinearFactor() / infoGlobal.m_timeStep;
- fb->m_appliedForceBodyB += solverConstr.m_contactNormal2 * solverConstr.m_appliedImpulse * constr->getRigidBodyB().getLinearFactor() / infoGlobal.m_timeStep;
- fb->m_appliedTorqueBodyA += solverConstr.m_relpos1CrossNormal * constr->getRigidBodyA().getAngularFactor() * solverConstr.m_appliedImpulse / infoGlobal.m_timeStep;
- fb->m_appliedTorqueBodyB += solverConstr.m_relpos2CrossNormal * constr->getRigidBodyB().getAngularFactor() * solverConstr.m_appliedImpulse / infoGlobal.m_timeStep; /*RGM ???? */
- }
-
- constr->internalSetAppliedImpulse(solverConstr.m_appliedImpulse);
- if (btFabs(solverConstr.m_appliedImpulse) >= constr->getBreakingImpulseThreshold())
- {
- constr->setEnabled(false);
- }
- }
-}
-
-void btSequentialImpulseConstraintSolver::writeBackBodies(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- for (int i = iBegin; i < iEnd; i++)
- {
- btRigidBody* body = m_tmpSolverBodyPool[i].m_originalBody;
- if (body)
- {
- if (infoGlobal.m_splitImpulse)
- m_tmpSolverBodyPool[i].writebackVelocityAndTransform(infoGlobal.m_timeStep, infoGlobal.m_splitImpulseTurnErp);
- else
- m_tmpSolverBodyPool[i].writebackVelocity();
-
- m_tmpSolverBodyPool[i].m_originalBody->setLinearVelocity(
- m_tmpSolverBodyPool[i].m_linearVelocity +
- m_tmpSolverBodyPool[i].m_externalForceImpulse);
-
- m_tmpSolverBodyPool[i].m_originalBody->setAngularVelocity(
- m_tmpSolverBodyPool[i].m_angularVelocity +
- m_tmpSolverBodyPool[i].m_externalTorqueImpulse);
-
- if (infoGlobal.m_splitImpulse)
- m_tmpSolverBodyPool[i].m_originalBody->setWorldTransform(m_tmpSolverBodyPool[i].m_worldTransform);
-
- m_tmpSolverBodyPool[i].m_originalBody->setCompanionId(-1);
- }
- }
-}
-
-btScalar btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyFinish(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("solveGroupCacheFriendlyFinish");
-
- if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)
- {
- writeBackContacts(0, m_tmpSolverContactConstraintPool.size(), infoGlobal);
- }
-
- writeBackJoints(0, m_tmpSolverNonContactConstraintPool.size(), infoGlobal);
- writeBackBodies(0, m_tmpSolverBodyPool.size(), infoGlobal);
-
- m_tmpSolverContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactFrictionConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactRollingFrictionConstraintPool.resizeNoInitialize(0);
-
- m_tmpSolverBodyPool.resizeNoInitialize(0);
- return 0.f;
-}
-
-/// btSequentialImpulseConstraintSolver Sequentially applies impulses
-btScalar btSequentialImpulseConstraintSolver::solveGroup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer, btDispatcher* /*dispatcher*/)
-{
- BT_PROFILE("solveGroup");
- //you need to provide at least some bodies
-
- solveGroupCacheFriendlySetup(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- solveGroupCacheFriendlyIterations(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- solveGroupCacheFriendlyFinish(bodies, numBodies, infoGlobal);
-
- return 0.f;
-}
-
-void btSequentialImpulseConstraintSolver::reset()
-{
- m_btSeed2 = 0;
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h
deleted file mode 100644
index f3ef02fccc..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
-#define BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
-
-class btIDebugDraw;
-class btPersistentManifold;
-class btDispatcher;
-class btCollisionObject;
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-#include "BulletDynamics/ConstraintSolver/btSolverBody.h"
-#include "BulletDynamics/ConstraintSolver/btSolverConstraint.h"
-#include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h"
-#include "BulletDynamics/ConstraintSolver/btConstraintSolver.h"
-
-typedef btScalar (*btSingleConstraintRowSolver)(btSolverBody&, btSolverBody&, const btSolverConstraint&);
-
-struct btSolverAnalyticsData
-{
- btSolverAnalyticsData()
- {
- m_numSolverCalls = 0;
- m_numIterationsUsed = -1;
- m_remainingLeastSquaresResidual = -1;
- m_islandId = -2;
- }
- int m_islandId;
- int m_numBodies;
- int m_numContactManifolds;
- int m_numSolverCalls;
- int m_numIterationsUsed;
- double m_remainingLeastSquaresResidual;
-};
-
-///The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method.
-ATTRIBUTE_ALIGNED16(class)
-btSequentialImpulseConstraintSolver : public btConstraintSolver
-{
-
-
-protected:
- btAlignedObjectArray<btSolverBody> m_tmpSolverBodyPool;
- btConstraintArray m_tmpSolverContactConstraintPool;
- btConstraintArray m_tmpSolverNonContactConstraintPool;
- btConstraintArray m_tmpSolverContactFrictionConstraintPool;
- btConstraintArray m_tmpSolverContactRollingFrictionConstraintPool;
-
- btAlignedObjectArray<int> m_orderTmpConstraintPool;
- btAlignedObjectArray<int> m_orderNonContactConstraintPool;
- btAlignedObjectArray<int> m_orderFrictionConstraintPool;
- btAlignedObjectArray<btTypedConstraint::btConstraintInfo1> m_tmpConstraintSizesPool;
- int m_maxOverrideNumSolverIterations;
- int m_fixedBodyId;
- // When running solvers on multiple threads, a race condition exists for Kinematic objects that
- // participate in more than one solver.
- // The getOrInitSolverBody() function writes the companionId of each body (storing the index of the solver body
- // for the current solver). For normal dynamic bodies it isn't an issue because they can only be in one island
- // (and therefore one thread) at a time. But kinematic bodies can be in multiple islands at once.
- // To avoid this race condition, this solver does not write the companionId, instead it stores the solver body
- // index in this solver-local table, indexed by the uniqueId of the body.
- btAlignedObjectArray<int> m_kinematicBodyUniqueIdToSolverBodyTable; // only used for multithreading
-
- btSingleConstraintRowSolver m_resolveSingleConstraintRowGeneric;
- btSingleConstraintRowSolver m_resolveSingleConstraintRowLowerLimit;
- btSingleConstraintRowSolver m_resolveSplitPenetrationImpulse;
- int m_cachedSolverMode; // used to check if SOLVER_SIMD flag has been changed
- void setupSolverFunctions(bool useSimd);
-
- btScalar m_leastSquaresResidual;
-
- void setupFrictionConstraint(btSolverConstraint & solverConstraint, const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB,
- btManifoldPoint& cp, const btVector3& rel_pos1, const btVector3& rel_pos2,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation,
- const btContactSolverInfo& infoGlobal,
- btScalar desiredVelocity = 0., btScalar cfmSlip = 0.);
-
- void setupTorsionalFrictionConstraint(btSolverConstraint & solverConstraint, const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB,
- btManifoldPoint& cp, btScalar combinedTorsionalFriction, const btVector3& rel_pos1, const btVector3& rel_pos2,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation,
- btScalar desiredVelocity = 0., btScalar cfmSlip = 0.);
-
- btSolverConstraint& addFrictionConstraint(const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint& cp, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity = 0., btScalar cfmSlip = 0.);
- btSolverConstraint& addTorsionalFrictionConstraint(const btVector3& normalAxis, int solverBodyIdA, int solverBodyIdB, int frictionIndex, btManifoldPoint& cp, btScalar torsionalFriction, const btVector3& rel_pos1, const btVector3& rel_pos2, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, btScalar desiredVelocity = 0, btScalar cfmSlip = 0.f);
-
- void setupContactConstraint(btSolverConstraint & solverConstraint, int solverBodyIdA, int solverBodyIdB, btManifoldPoint& cp,
- const btContactSolverInfo& infoGlobal, btScalar& relaxation, const btVector3& rel_pos1, const btVector3& rel_pos2);
-
- static void applyAnisotropicFriction(btCollisionObject * colObj, btVector3 & frictionDirection, int frictionMode);
-
- void setFrictionConstraintImpulse(btSolverConstraint & solverConstraint, int solverBodyIdA, int solverBodyIdB,
- btManifoldPoint& cp, const btContactSolverInfo& infoGlobal);
-
- ///m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction
- unsigned long m_btSeed2;
-
- btScalar restitutionCurve(btScalar rel_vel, btScalar restitution, btScalar velocityThreshold);
-
- virtual void convertContacts(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal);
-
- void convertContact(btPersistentManifold * manifold, const btContactSolverInfo& infoGlobal);
-
- virtual void convertJoints(btTypedConstraint * *constraints, int numConstraints, const btContactSolverInfo& infoGlobal);
- void convertJoint(btSolverConstraint * currentConstraintRow, btTypedConstraint * constraint, const btTypedConstraint::btConstraintInfo1& info1, int solverBodyIdA, int solverBodyIdB, const btContactSolverInfo& infoGlobal);
-
- virtual void convertBodies(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal);
-
- btScalar resolveSplitPenetrationSIMD(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint)
- {
- return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint);
- }
-
- btScalar resolveSplitPenetrationImpulseCacheFriendly(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint)
- {
- return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint);
- }
-
- //internal method
- int getOrInitSolverBody(btCollisionObject & body, btScalar timeStep);
- void initSolverBody(btSolverBody * solverBody, btCollisionObject * collisionObject, btScalar timeStep);
-
- btScalar resolveSingleConstraintRowGeneric(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint);
- btScalar resolveSingleConstraintRowGenericSIMD(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint);
- btScalar resolveSingleConstraintRowLowerLimit(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint);
- btScalar resolveSingleConstraintRowLowerLimitSIMD(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint);
- btScalar resolveSplitPenetrationImpulse(btSolverBody & bodyA, btSolverBody & bodyB, const btSolverConstraint& contactConstraint)
- {
- return m_resolveSplitPenetrationImpulse(bodyA, bodyB, contactConstraint);
- }
-
-protected:
- void writeBackContacts(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
- void writeBackJoints(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
- void writeBackBodies(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
- virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
- virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal);
- virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
- virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
- virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btSequentialImpulseConstraintSolver();
- virtual ~btSequentialImpulseConstraintSolver();
-
- virtual btScalar solveGroup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher);
-
- ///clear internal cached data and reset random seed
- virtual void reset();
-
- unsigned long btRand2();
-
- int btRandInt2(int n);
-
- void setRandSeed(unsigned long seed)
- {
- m_btSeed2 = seed;
- }
- unsigned long getRandSeed() const
- {
- return m_btSeed2;
- }
-
- virtual btConstraintSolverType getSolverType() const
- {
- return BT_SEQUENTIAL_IMPULSE_SOLVER;
- }
-
- btSingleConstraintRowSolver getActiveConstraintRowSolverGeneric()
- {
- return m_resolveSingleConstraintRowGeneric;
- }
- void setConstraintRowSolverGeneric(btSingleConstraintRowSolver rowSolver)
- {
- m_resolveSingleConstraintRowGeneric = rowSolver;
- }
- btSingleConstraintRowSolver getActiveConstraintRowSolverLowerLimit()
- {
- return m_resolveSingleConstraintRowLowerLimit;
- }
- void setConstraintRowSolverLowerLimit(btSingleConstraintRowSolver rowSolver)
- {
- m_resolveSingleConstraintRowLowerLimit = rowSolver;
- }
-
-
-
- ///Various implementations of solving a single constraint row using a generic equality constraint, using scalar reference, SSE2 or SSE4
- btSingleConstraintRowSolver getScalarConstraintRowSolverGeneric();
- btSingleConstraintRowSolver getSSE2ConstraintRowSolverGeneric();
- btSingleConstraintRowSolver getSSE4_1ConstraintRowSolverGeneric();
-
- ///Various implementations of solving a single constraint row using an inequality (lower limit) constraint, using scalar reference, SSE2 or SSE4
- btSingleConstraintRowSolver getScalarConstraintRowSolverLowerLimit();
- btSingleConstraintRowSolver getSSE2ConstraintRowSolverLowerLimit();
- btSingleConstraintRowSolver getSSE4_1ConstraintRowSolverLowerLimit();
- btSolverAnalyticsData m_analyticsData;
-};
-
-#endif //BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.cpp
deleted file mode 100644
index 2718da4a50..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.cpp
+++ /dev/null
@@ -1,1554 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSequentialImpulseConstraintSolverMt.h"
-
-#include "LinearMath/btQuickprof.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-
-bool btSequentialImpulseConstraintSolverMt::s_allowNestedParallelForLoops = false; // some task schedulers don't like nested loops
-int btSequentialImpulseConstraintSolverMt::s_minimumContactManifoldsForBatching = 250;
-int btSequentialImpulseConstraintSolverMt::s_minBatchSize = 50;
-int btSequentialImpulseConstraintSolverMt::s_maxBatchSize = 100;
-btBatchedConstraints::BatchingMethod btSequentialImpulseConstraintSolverMt::s_contactBatchingMethod = btBatchedConstraints::BATCHING_METHOD_SPATIAL_GRID_2D;
-btBatchedConstraints::BatchingMethod btSequentialImpulseConstraintSolverMt::s_jointBatchingMethod = btBatchedConstraints::BATCHING_METHOD_SPATIAL_GRID_2D;
-
-btSequentialImpulseConstraintSolverMt::btSequentialImpulseConstraintSolverMt()
-{
- m_numFrictionDirections = 1;
- m_useBatching = false;
- m_useObsoleteJointConstraints = false;
-}
-
-btSequentialImpulseConstraintSolverMt::~btSequentialImpulseConstraintSolverMt()
-{
-}
-
-void btSequentialImpulseConstraintSolverMt::setupBatchedContactConstraints()
-{
- BT_PROFILE("setupBatchedContactConstraints");
- m_batchedContactConstraints.setup(&m_tmpSolverContactConstraintPool,
- m_tmpSolverBodyPool,
- s_contactBatchingMethod,
- s_minBatchSize,
- s_maxBatchSize,
- &m_scratchMemory);
-}
-
-void btSequentialImpulseConstraintSolverMt::setupBatchedJointConstraints()
-{
- BT_PROFILE("setupBatchedJointConstraints");
- m_batchedJointConstraints.setup(&m_tmpSolverNonContactConstraintPool,
- m_tmpSolverBodyPool,
- s_jointBatchingMethod,
- s_minBatchSize,
- s_maxBatchSize,
- &m_scratchMemory);
-}
-
-void btSequentialImpulseConstraintSolverMt::internalSetupContactConstraints(int iContactConstraint, const btContactSolverInfo& infoGlobal)
-{
- btSolverConstraint& contactConstraint = m_tmpSolverContactConstraintPool[iContactConstraint];
-
- btVector3 rel_pos1;
- btVector3 rel_pos2;
- btScalar relaxation;
-
- int solverBodyIdA = contactConstraint.m_solverBodyIdA;
- int solverBodyIdB = contactConstraint.m_solverBodyIdB;
-
- btSolverBody* solverBodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- btSolverBody* solverBodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- btRigidBody* colObj0 = solverBodyA->m_originalBody;
- btRigidBody* colObj1 = solverBodyB->m_originalBody;
-
- btManifoldPoint& cp = *static_cast<btManifoldPoint*>(contactConstraint.m_originalContactPoint);
-
- const btVector3& pos1 = cp.getPositionWorldOnA();
- const btVector3& pos2 = cp.getPositionWorldOnB();
-
- rel_pos1 = pos1 - solverBodyA->getWorldTransform().getOrigin();
- rel_pos2 = pos2 - solverBodyB->getWorldTransform().getOrigin();
-
- btVector3 vel1;
- btVector3 vel2;
-
- solverBodyA->getVelocityInLocalPointNoDelta(rel_pos1, vel1);
- solverBodyB->getVelocityInLocalPointNoDelta(rel_pos2, vel2);
-
- btVector3 vel = vel1 - vel2;
- btScalar rel_vel = cp.m_normalWorldOnB.dot(vel);
-
- setupContactConstraint(contactConstraint, solverBodyIdA, solverBodyIdB, cp, infoGlobal, relaxation, rel_pos1, rel_pos2);
-
- // setup rolling friction constraints
- int rollingFrictionIndex = m_rollingFrictionIndexTable[iContactConstraint];
- if (rollingFrictionIndex >= 0)
- {
- btSolverConstraint& spinningFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[rollingFrictionIndex];
- btAssert(spinningFrictionConstraint.m_frictionIndex == iContactConstraint);
- setupTorsionalFrictionConstraint(spinningFrictionConstraint,
- cp.m_normalWorldOnB,
- solverBodyIdA,
- solverBodyIdB,
- cp,
- cp.m_combinedSpinningFriction,
- rel_pos1,
- rel_pos2,
- colObj0,
- colObj1,
- relaxation,
- 0.0f,
- 0.0f);
- btVector3 axis[2];
- btPlaneSpace1(cp.m_normalWorldOnB, axis[0], axis[1]);
- axis[0].normalize();
- axis[1].normalize();
-
- applyAnisotropicFriction(colObj0, axis[0], btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj1, axis[0], btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj0, axis[1], btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj1, axis[1], btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- // put the largest axis first
- if (axis[1].length2() > axis[0].length2())
- {
- btSwap(axis[0], axis[1]);
- }
- const btScalar kRollingFrictionThreshold = 0.001f;
- for (int i = 0; i < 2; ++i)
- {
- int iRollingFric = rollingFrictionIndex + 1 + i;
- btSolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[iRollingFric];
- btAssert(rollingFrictionConstraint.m_frictionIndex == iContactConstraint);
- btVector3 dir = axis[i];
- if (dir.length() > kRollingFrictionThreshold)
- {
- setupTorsionalFrictionConstraint(rollingFrictionConstraint,
- dir,
- solverBodyIdA,
- solverBodyIdB,
- cp,
- cp.m_combinedRollingFriction,
- rel_pos1,
- rel_pos2,
- colObj0,
- colObj1,
- relaxation,
- 0.0f,
- 0.0f);
- }
- else
- {
- rollingFrictionConstraint.m_frictionIndex = -1; // disable constraint
- }
- }
- }
-
- // setup friction constraints
- // setupFrictionConstraint(solverConstraint, normalAxis, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal, desiredVelocity, cfmSlip);
- {
- ///Bullet has several options to set the friction directions
- ///By default, each contact has only a single friction direction that is recomputed automatically very frame
- ///based on the relative linear velocity.
- ///If the relative velocity it zero, it will automatically compute a friction direction.
-
- ///You can also enable two friction directions, using the SOLVER_USE_2_FRICTION_DIRECTIONS.
- ///In that case, the second friction direction will be orthogonal to both contact normal and first friction direction.
- ///
- ///If you choose SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, then the friction will be independent from the relative projected velocity.
- ///
- ///The user can manually override the friction directions for certain contacts using a contact callback,
- ///and set the cp.m_lateralFrictionInitialized to true
- ///In that case, you can set the target relative motion in each friction direction (cp.m_contactMotion1 and cp.m_contactMotion2)
- ///this will give a conveyor belt effect
- ///
- btSolverConstraint* frictionConstraint1 = &m_tmpSolverContactFrictionConstraintPool[contactConstraint.m_frictionIndex];
- btAssert(frictionConstraint1->m_frictionIndex == iContactConstraint);
-
- btSolverConstraint* frictionConstraint2 = NULL;
- if (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS)
- {
- frictionConstraint2 = &m_tmpSolverContactFrictionConstraintPool[contactConstraint.m_frictionIndex + 1];
- btAssert(frictionConstraint2->m_frictionIndex == iContactConstraint);
- }
-
- if (!(infoGlobal.m_solverMode & SOLVER_ENABLE_FRICTION_DIRECTION_CACHING) || !(cp.m_contactPointFlags & BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED))
- {
- cp.m_lateralFrictionDir1 = vel - cp.m_normalWorldOnB * rel_vel;
- btScalar lat_rel_vel = cp.m_lateralFrictionDir1.length2();
- if (!(infoGlobal.m_solverMode & SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION) && lat_rel_vel > SIMD_EPSILON)
- {
- cp.m_lateralFrictionDir1 *= 1.f / btSqrt(lat_rel_vel);
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- setupFrictionConstraint(*frictionConstraint1, cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
-
- if (frictionConstraint2)
- {
- cp.m_lateralFrictionDir2 = cp.m_lateralFrictionDir1.cross(cp.m_normalWorldOnB);
- cp.m_lateralFrictionDir2.normalize(); //??
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- setupFrictionConstraint(*frictionConstraint2, cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
- }
- }
- else
- {
- btPlaneSpace1(cp.m_normalWorldOnB, cp.m_lateralFrictionDir1, cp.m_lateralFrictionDir2);
-
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- setupFrictionConstraint(*frictionConstraint1, cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
-
- if (frictionConstraint2)
- {
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- setupFrictionConstraint(*frictionConstraint2, cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal);
- }
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS) && (infoGlobal.m_solverMode & SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION))
- {
- cp.m_contactPointFlags |= BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED;
- }
- }
- }
- else
- {
- setupFrictionConstraint(*frictionConstraint1, cp.m_lateralFrictionDir1, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal, cp.m_contactMotion1, cp.m_frictionCFM);
- if (frictionConstraint2)
- {
- setupFrictionConstraint(*frictionConstraint2, cp.m_lateralFrictionDir2, solverBodyIdA, solverBodyIdB, cp, rel_pos1, rel_pos2, colObj0, colObj1, relaxation, infoGlobal, cp.m_contactMotion2, cp.m_frictionCFM);
- }
- }
- }
-
- setFrictionConstraintImpulse(contactConstraint, solverBodyIdA, solverBodyIdB, cp, infoGlobal);
-}
-
-struct SetupContactConstraintsLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
- const btContactSolverInfo* m_infoGlobal;
-
- SetupContactConstraintsLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc, const btContactSolverInfo& infoGlobal)
- {
- m_solver = solver;
- m_bc = bc;
- m_infoGlobal = &infoGlobal;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("SetupContactConstraintsLoop");
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- for (int i = batch.begin; i < batch.end; ++i)
- {
- int iContact = m_bc->m_constraintIndices[i];
- m_solver->internalSetupContactConstraints(iContact, *m_infoGlobal);
- }
- }
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::setupAllContactConstraints(const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("setupAllContactConstraints");
- if (m_useBatching)
- {
- const btBatchedConstraints& batchedCons = m_batchedContactConstraints;
- SetupContactConstraintsLoop loop(this, &batchedCons, infoGlobal);
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = 1;
- btParallelFor(phase.begin, phase.end, grainSize, loop);
- }
- }
- else
- {
- for (int i = 0; i < m_tmpSolverContactConstraintPool.size(); ++i)
- {
- internalSetupContactConstraints(i, infoGlobal);
- }
- }
-}
-
-int btSequentialImpulseConstraintSolverMt::getOrInitSolverBodyThreadsafe(btCollisionObject& body, btScalar timeStep)
-{
- //
- // getOrInitSolverBody is threadsafe only for a single thread per solver (with potentially multiple solvers)
- //
- // getOrInitSolverBodyThreadsafe -- attempts to be fully threadsafe (however may affect determinism)
- //
- int solverBodyId = -1;
- bool isRigidBodyType = btRigidBody::upcast(&body) != NULL;
- if (isRigidBodyType && !body.isStaticOrKinematicObject())
- {
- // dynamic body
- // Dynamic bodies can only be in one island, so it's safe to write to the companionId
- solverBodyId = body.getCompanionId();
- if (solverBodyId < 0)
- {
- m_bodySolverArrayMutex.lock();
- // now that we have the lock, check again
- solverBodyId = body.getCompanionId();
- if (solverBodyId < 0)
- {
- solverBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&solverBody, &body, timeStep);
- body.setCompanionId(solverBodyId);
- }
- m_bodySolverArrayMutex.unlock();
- }
- }
- else if (isRigidBodyType && body.isKinematicObject())
- {
- //
- // NOTE: must test for kinematic before static because some kinematic objects also
- // identify as "static"
- //
- // Kinematic bodies can be in multiple islands at once, so it is a
- // race condition to write to them, so we use an alternate method
- // to record the solverBodyId
- int uniqueId = body.getWorldArrayIndex();
- const int INVALID_SOLVER_BODY_ID = -1;
- if (m_kinematicBodyUniqueIdToSolverBodyTable.size() <= uniqueId)
- {
- m_kinematicBodyUniqueIdToSolverBodyTableMutex.lock();
- // now that we have the lock, check again
- if (m_kinematicBodyUniqueIdToSolverBodyTable.size() <= uniqueId)
- {
- m_kinematicBodyUniqueIdToSolverBodyTable.resize(uniqueId + 1, INVALID_SOLVER_BODY_ID);
- }
- m_kinematicBodyUniqueIdToSolverBodyTableMutex.unlock();
- }
- solverBodyId = m_kinematicBodyUniqueIdToSolverBodyTable[uniqueId];
- // if no table entry yet,
- if (INVALID_SOLVER_BODY_ID == solverBodyId)
- {
- // need to acquire both locks
- m_kinematicBodyUniqueIdToSolverBodyTableMutex.lock();
- m_bodySolverArrayMutex.lock();
- // now that we have the lock, check again
- solverBodyId = m_kinematicBodyUniqueIdToSolverBodyTable[uniqueId];
- if (INVALID_SOLVER_BODY_ID == solverBodyId)
- {
- // create a table entry for this body
- solverBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& solverBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&solverBody, &body, timeStep);
- m_kinematicBodyUniqueIdToSolverBodyTable[uniqueId] = solverBodyId;
- }
- m_bodySolverArrayMutex.unlock();
- m_kinematicBodyUniqueIdToSolverBodyTableMutex.unlock();
- }
- }
- else
- {
- // all fixed bodies (inf mass) get mapped to a single solver id
- if (m_fixedBodyId < 0)
- {
- m_bodySolverArrayMutex.lock();
- // now that we have the lock, check again
- if (m_fixedBodyId < 0)
- {
- m_fixedBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& fixedBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&fixedBody, 0, timeStep);
- }
- m_bodySolverArrayMutex.unlock();
- }
- solverBodyId = m_fixedBodyId;
- }
- btAssert(solverBodyId >= 0 && solverBodyId < m_tmpSolverBodyPool.size());
- return solverBodyId;
-}
-
-void btSequentialImpulseConstraintSolverMt::internalCollectContactManifoldCachedInfo(btContactManifoldCachedInfo* cachedInfoArray, btPersistentManifold** manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("internalCollectContactManifoldCachedInfo");
- for (int i = 0; i < numManifolds; ++i)
- {
- btContactManifoldCachedInfo* cachedInfo = &cachedInfoArray[i];
- btPersistentManifold* manifold = manifoldPtr[i];
- btCollisionObject* colObj0 = (btCollisionObject*)manifold->getBody0();
- btCollisionObject* colObj1 = (btCollisionObject*)manifold->getBody1();
-
- int solverBodyIdA = getOrInitSolverBodyThreadsafe(*colObj0, infoGlobal.m_timeStep);
- int solverBodyIdB = getOrInitSolverBodyThreadsafe(*colObj1, infoGlobal.m_timeStep);
-
- cachedInfo->solverBodyIds[0] = solverBodyIdA;
- cachedInfo->solverBodyIds[1] = solverBodyIdB;
- cachedInfo->numTouchingContacts = 0;
-
- btSolverBody* solverBodyA = &m_tmpSolverBodyPool[solverBodyIdA];
- btSolverBody* solverBodyB = &m_tmpSolverBodyPool[solverBodyIdB];
-
- // A contact manifold between 2 static object should not exist!
- // check the collision flags of your objects if this assert fires.
- // Incorrectly set collision object flags can degrade performance in various ways.
- btAssert(!m_tmpSolverBodyPool[solverBodyIdA].m_invMass.isZero() || !m_tmpSolverBodyPool[solverBodyIdB].m_invMass.isZero());
-
- int iContact = 0;
- for (int j = 0; j < manifold->getNumContacts(); j++)
- {
- btManifoldPoint& cp = manifold->getContactPoint(j);
-
- if (cp.getDistance() <= manifold->getContactProcessingThreshold())
- {
- cachedInfo->contactPoints[iContact] = &cp;
- cachedInfo->contactHasRollingFriction[iContact] = (cp.m_combinedRollingFriction > 0.f);
- iContact++;
- }
- }
- cachedInfo->numTouchingContacts = iContact;
- }
-}
-
-struct CollectContactManifoldCachedInfoLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- btSequentialImpulseConstraintSolverMt::btContactManifoldCachedInfo* m_cachedInfoArray;
- btPersistentManifold** m_manifoldPtr;
- const btContactSolverInfo* m_infoGlobal;
-
- CollectContactManifoldCachedInfoLoop(btSequentialImpulseConstraintSolverMt* solver, btSequentialImpulseConstraintSolverMt::btContactManifoldCachedInfo* cachedInfoArray, btPersistentManifold** manifoldPtr, const btContactSolverInfo& infoGlobal)
- {
- m_solver = solver;
- m_cachedInfoArray = cachedInfoArray;
- m_manifoldPtr = manifoldPtr;
- m_infoGlobal = &infoGlobal;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalCollectContactManifoldCachedInfo(m_cachedInfoArray + iBegin, m_manifoldPtr + iBegin, iEnd - iBegin, *m_infoGlobal);
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::internalAllocContactConstraints(const btContactManifoldCachedInfo* cachedInfoArray, int numManifolds)
-{
- BT_PROFILE("internalAllocContactConstraints");
- // possibly parallel part
- for (int iManifold = 0; iManifold < numManifolds; ++iManifold)
- {
- const btContactManifoldCachedInfo& cachedInfo = cachedInfoArray[iManifold];
- int contactIndex = cachedInfo.contactIndex;
- int frictionIndex = contactIndex * m_numFrictionDirections;
- int rollingFrictionIndex = cachedInfo.rollingFrictionIndex;
- for (int i = 0; i < cachedInfo.numTouchingContacts; i++)
- {
- btSolverConstraint& contactConstraint = m_tmpSolverContactConstraintPool[contactIndex];
- contactConstraint.m_solverBodyIdA = cachedInfo.solverBodyIds[0];
- contactConstraint.m_solverBodyIdB = cachedInfo.solverBodyIds[1];
- contactConstraint.m_originalContactPoint = cachedInfo.contactPoints[i];
-
- // allocate the friction constraints
- contactConstraint.m_frictionIndex = frictionIndex;
- for (int iDir = 0; iDir < m_numFrictionDirections; ++iDir)
- {
- btSolverConstraint& frictionConstraint = m_tmpSolverContactFrictionConstraintPool[frictionIndex];
- frictionConstraint.m_frictionIndex = contactIndex;
- frictionIndex++;
- }
-
- // allocate rolling friction constraints
- if (cachedInfo.contactHasRollingFriction[i])
- {
- m_rollingFrictionIndexTable[contactIndex] = rollingFrictionIndex;
- // allocate 3 (although we may use only 2 sometimes)
- for (int i = 0; i < 3; i++)
- {
- m_tmpSolverContactRollingFrictionConstraintPool[rollingFrictionIndex].m_frictionIndex = contactIndex;
- rollingFrictionIndex++;
- }
- }
- else
- {
- // indicate there is no rolling friction for this contact point
- m_rollingFrictionIndexTable[contactIndex] = -1;
- }
- contactIndex++;
- }
- }
-}
-
-struct AllocContactConstraintsLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btSequentialImpulseConstraintSolverMt::btContactManifoldCachedInfo* m_cachedInfoArray;
-
- AllocContactConstraintsLoop(btSequentialImpulseConstraintSolverMt* solver, btSequentialImpulseConstraintSolverMt::btContactManifoldCachedInfo* cachedInfoArray)
- {
- m_solver = solver;
- m_cachedInfoArray = cachedInfoArray;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalAllocContactConstraints(m_cachedInfoArray + iBegin, iEnd - iBegin);
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::allocAllContactConstraints(btPersistentManifold** manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("allocAllContactConstraints");
- btAlignedObjectArray<btContactManifoldCachedInfo> cachedInfoArray; // = m_manifoldCachedInfoArray;
- cachedInfoArray.resizeNoInitialize(numManifolds);
- if (/* DISABLES CODE */ (false))
- {
- // sequential
- internalCollectContactManifoldCachedInfo(&cachedInfoArray[0], manifoldPtr, numManifolds, infoGlobal);
- }
- else
- {
- // may alter ordering of bodies which affects determinism
- CollectContactManifoldCachedInfoLoop loop(this, &cachedInfoArray[0], manifoldPtr, infoGlobal);
- int grainSize = 200;
- btParallelFor(0, numManifolds, grainSize, loop);
- }
-
- {
- // serial part
- int numContacts = 0;
- int numRollingFrictionConstraints = 0;
- for (int iManifold = 0; iManifold < numManifolds; ++iManifold)
- {
- btContactManifoldCachedInfo& cachedInfo = cachedInfoArray[iManifold];
- cachedInfo.contactIndex = numContacts;
- cachedInfo.rollingFrictionIndex = numRollingFrictionConstraints;
- numContacts += cachedInfo.numTouchingContacts;
- for (int i = 0; i < cachedInfo.numTouchingContacts; ++i)
- {
- if (cachedInfo.contactHasRollingFriction[i])
- {
- numRollingFrictionConstraints += 3;
- }
- }
- }
- {
- BT_PROFILE("allocPools");
- if (m_tmpSolverContactConstraintPool.capacity() < numContacts)
- {
- // if we need to reallocate, reserve some extra so we don't have to reallocate again next frame
- int extraReserve = numContacts / 16;
- m_tmpSolverContactConstraintPool.reserve(numContacts + extraReserve);
- m_rollingFrictionIndexTable.reserve(numContacts + extraReserve);
- m_tmpSolverContactFrictionConstraintPool.reserve((numContacts + extraReserve) * m_numFrictionDirections);
- m_tmpSolverContactRollingFrictionConstraintPool.reserve(numRollingFrictionConstraints + extraReserve);
- }
- m_tmpSolverContactConstraintPool.resizeNoInitialize(numContacts);
- m_rollingFrictionIndexTable.resizeNoInitialize(numContacts);
- m_tmpSolverContactFrictionConstraintPool.resizeNoInitialize(numContacts * m_numFrictionDirections);
- m_tmpSolverContactRollingFrictionConstraintPool.resizeNoInitialize(numRollingFrictionConstraints);
- }
- }
- {
- AllocContactConstraintsLoop loop(this, &cachedInfoArray[0]);
- int grainSize = 200;
- btParallelFor(0, numManifolds, grainSize, loop);
- }
-}
-
-void btSequentialImpulseConstraintSolverMt::convertContacts(btPersistentManifold** manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal)
-{
- if (!m_useBatching)
- {
- btSequentialImpulseConstraintSolver::convertContacts(manifoldPtr, numManifolds, infoGlobal);
- return;
- }
- BT_PROFILE("convertContacts");
- if (numManifolds > 0)
- {
- if (m_fixedBodyId < 0)
- {
- m_fixedBodyId = m_tmpSolverBodyPool.size();
- btSolverBody& fixedBody = m_tmpSolverBodyPool.expand();
- initSolverBody(&fixedBody, 0, infoGlobal.m_timeStep);
- }
- allocAllContactConstraints(manifoldPtr, numManifolds, infoGlobal);
- if (m_useBatching)
- {
- setupBatchedContactConstraints();
- }
- setupAllContactConstraints(infoGlobal);
- }
-}
-
-void btSequentialImpulseConstraintSolverMt::internalInitMultipleJoints(btTypedConstraint** constraints, int iBegin, int iEnd)
-{
- BT_PROFILE("internalInitMultipleJoints");
- for (int i = iBegin; i < iEnd; i++)
- {
- btTypedConstraint* constraint = constraints[i];
- btTypedConstraint::btConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
- if (constraint->isEnabled())
- {
- constraint->buildJacobian();
- constraint->internalSetAppliedImpulse(0.0f);
- btJointFeedback* fb = constraint->getJointFeedback();
- if (fb)
- {
- fb->m_appliedForceBodyA.setZero();
- fb->m_appliedTorqueBodyA.setZero();
- fb->m_appliedForceBodyB.setZero();
- fb->m_appliedTorqueBodyB.setZero();
- }
- constraint->getInfo1(&info1);
- }
- else
- {
- info1.m_numConstraintRows = 0;
- info1.nub = 0;
- }
- }
-}
-
-struct InitJointsLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- btTypedConstraint** m_constraints;
-
- InitJointsLoop(btSequentialImpulseConstraintSolverMt* solver, btTypedConstraint** constraints)
- {
- m_solver = solver;
- m_constraints = constraints;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalInitMultipleJoints(m_constraints, iBegin, iEnd);
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::internalConvertMultipleJoints(const btAlignedObjectArray<JointParams>& jointParamsArray, btTypedConstraint** constraints, int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("internalConvertMultipleJoints");
- for (int i = iBegin; i < iEnd; ++i)
- {
- const JointParams& jointParams = jointParamsArray[i];
- int currentRow = jointParams.m_solverConstraint;
- if (currentRow != -1)
- {
- const btTypedConstraint::btConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
- btAssert(currentRow < m_tmpSolverNonContactConstraintPool.size());
- btAssert(info1.m_numConstraintRows > 0);
-
- btSolverConstraint* currentConstraintRow = &m_tmpSolverNonContactConstraintPool[currentRow];
- btTypedConstraint* constraint = constraints[i];
-
- convertJoint(currentConstraintRow, constraint, info1, jointParams.m_solverBodyA, jointParams.m_solverBodyB, infoGlobal);
- }
- }
-}
-
-struct ConvertJointsLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btAlignedObjectArray<btSequentialImpulseConstraintSolverMt::JointParams>& m_jointParamsArray;
- btTypedConstraint** m_srcConstraints;
- const btContactSolverInfo& m_infoGlobal;
-
- ConvertJointsLoop(btSequentialImpulseConstraintSolverMt* solver,
- const btAlignedObjectArray<btSequentialImpulseConstraintSolverMt::JointParams>& jointParamsArray,
- btTypedConstraint** srcConstraints,
- const btContactSolverInfo& infoGlobal) : m_jointParamsArray(jointParamsArray),
- m_infoGlobal(infoGlobal)
- {
- m_solver = solver;
- m_srcConstraints = srcConstraints;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalConvertMultipleJoints(m_jointParamsArray, m_srcConstraints, iBegin, iEnd, m_infoGlobal);
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::convertJoints(btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal)
-{
- if (!m_useBatching)
- {
- btSequentialImpulseConstraintSolver::convertJoints(constraints, numConstraints, infoGlobal);
- return;
- }
- BT_PROFILE("convertJoints");
- bool parallelJointSetup = true;
- m_tmpConstraintSizesPool.resizeNoInitialize(numConstraints);
- if (parallelJointSetup)
- {
- InitJointsLoop loop(this, constraints);
- int grainSize = 40;
- btParallelFor(0, numConstraints, grainSize, loop);
- }
- else
- {
- internalInitMultipleJoints(constraints, 0, numConstraints);
- }
-
- int totalNumRows = 0;
- btAlignedObjectArray<JointParams> jointParamsArray;
- jointParamsArray.resizeNoInitialize(numConstraints);
-
- //calculate the total number of contraint rows
- for (int i = 0; i < numConstraints; i++)
- {
- btTypedConstraint* constraint = constraints[i];
-
- JointParams& params = jointParamsArray[i];
- const btTypedConstraint::btConstraintInfo1& info1 = m_tmpConstraintSizesPool[i];
-
- if (info1.m_numConstraintRows)
- {
- params.m_solverConstraint = totalNumRows;
- params.m_solverBodyA = getOrInitSolverBody(constraint->getRigidBodyA(), infoGlobal.m_timeStep);
- params.m_solverBodyB = getOrInitSolverBody(constraint->getRigidBodyB(), infoGlobal.m_timeStep);
- }
- else
- {
- params.m_solverConstraint = -1;
- }
- totalNumRows += info1.m_numConstraintRows;
- }
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(totalNumRows);
-
- ///setup the btSolverConstraints
- if (parallelJointSetup)
- {
- ConvertJointsLoop loop(this, jointParamsArray, constraints, infoGlobal);
- int grainSize = 20;
- btParallelFor(0, numConstraints, grainSize, loop);
- }
- else
- {
- internalConvertMultipleJoints(jointParamsArray, constraints, 0, numConstraints, infoGlobal);
- }
- setupBatchedJointConstraints();
-}
-
-void btSequentialImpulseConstraintSolverMt::internalConvertBodies(btCollisionObject** bodies, int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("internalConvertBodies");
- for (int i = iBegin; i < iEnd; i++)
- {
- btCollisionObject* obj = bodies[i];
- obj->setCompanionId(i);
- btSolverBody& solverBody = m_tmpSolverBodyPool[i];
- initSolverBody(&solverBody, obj, infoGlobal.m_timeStep);
-
- btRigidBody* body = btRigidBody::upcast(obj);
- if (body && body->getInvMass())
- {
- btVector3 gyroForce(0, 0, 0);
- if (body->getFlags() & BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT)
- {
- gyroForce = body->computeGyroscopicForceExplicit(infoGlobal.m_maxGyroscopicForce);
- solverBody.m_externalTorqueImpulse -= gyroForce * body->getInvInertiaTensorWorld() * infoGlobal.m_timeStep;
- }
- if (body->getFlags() & BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD)
- {
- gyroForce = body->computeGyroscopicImpulseImplicit_World(infoGlobal.m_timeStep);
- solverBody.m_externalTorqueImpulse += gyroForce;
- }
- if (body->getFlags() & BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY)
- {
- gyroForce = body->computeGyroscopicImpulseImplicit_Body(infoGlobal.m_timeStep);
- solverBody.m_externalTorqueImpulse += gyroForce;
- }
- }
- }
-}
-
-struct ConvertBodiesLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- btCollisionObject** m_bodies;
- int m_numBodies;
- const btContactSolverInfo& m_infoGlobal;
-
- ConvertBodiesLoop(btSequentialImpulseConstraintSolverMt* solver,
- btCollisionObject** bodies,
- int numBodies,
- const btContactSolverInfo& infoGlobal) : m_infoGlobal(infoGlobal)
- {
- m_solver = solver;
- m_bodies = bodies;
- m_numBodies = numBodies;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalConvertBodies(m_bodies, iBegin, iEnd, m_infoGlobal);
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::convertBodies(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("convertBodies");
- m_kinematicBodyUniqueIdToSolverBodyTable.resize(0);
-
- m_tmpSolverBodyPool.resizeNoInitialize(numBodies + 1);
-
- m_fixedBodyId = numBodies;
- {
- btSolverBody& fixedBody = m_tmpSolverBodyPool[m_fixedBodyId];
- initSolverBody(&fixedBody, NULL, infoGlobal.m_timeStep);
- }
-
- bool parallelBodySetup = true;
- if (parallelBodySetup)
- {
- ConvertBodiesLoop loop(this, bodies, numBodies, infoGlobal);
- int grainSize = 40;
- btParallelFor(0, numBodies, grainSize, loop);
- }
- else
- {
- internalConvertBodies(bodies, 0, numBodies, infoGlobal);
- }
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::solveGroupCacheFriendlySetup(
- btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifoldPtr,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& infoGlobal,
- btIDebugDraw* debugDrawer)
-{
- m_numFrictionDirections = (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS) ? 2 : 1;
- m_useBatching = false;
- if (numManifolds >= s_minimumContactManifoldsForBatching &&
- (s_allowNestedParallelForLoops || !btThreadsAreRunning()))
- {
- m_useBatching = true;
- m_batchedContactConstraints.m_debugDrawer = debugDrawer;
- m_batchedJointConstraints.m_debugDrawer = debugDrawer;
- }
- btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(bodies,
- numBodies,
- manifoldPtr,
- numManifolds,
- constraints,
- numConstraints,
- infoGlobal,
- debugDrawer);
- return 0.0f;
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactSplitPenetrationImpulseConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd)
-{
- btScalar leastSquaresResidual = 0.f;
- for (int iiCons = batchBegin; iiCons < batchEnd; ++iiCons)
- {
- int iCons = consIndices[iiCons];
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[iCons];
- btSolverBody& bodyA = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA];
- btSolverBody& bodyB = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB];
- btScalar residual = resolveSplitPenetrationImpulse(bodyA, bodyB, solveManifold);
- leastSquaresResidual += residual * residual;
- }
- return leastSquaresResidual;
-}
-
-struct ContactSplitPenetrationImpulseSolverLoop : public btIParallelSumBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
-
- ContactSplitPenetrationImpulseSolverLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc)
- {
- m_solver = solver;
- m_bc = bc;
- }
- btScalar sumLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("ContactSplitPenetrationImpulseSolverLoop");
- btScalar sum = 0;
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- sum += m_solver->resolveMultipleContactSplitPenetrationImpulseConstraints(m_bc->m_constraintIndices, batch.begin, batch.end);
- }
- return sum;
- }
-};
-
-void btSequentialImpulseConstraintSolverMt::solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- BT_PROFILE("solveGroupCacheFriendlySplitImpulseIterations");
- if (infoGlobal.m_splitImpulse)
- {
- for (int iteration = 0; iteration < infoGlobal.m_numIterations; iteration++)
- {
- btScalar leastSquaresResidual = 0.f;
- if (m_useBatching)
- {
- const btBatchedConstraints& batchedCons = m_batchedContactConstraints;
- ContactSplitPenetrationImpulseSolverLoop loop(this, &batchedCons);
- btScalar leastSquaresResidual = 0.f;
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = batchedCons.m_phaseGrainSize[iPhase];
- leastSquaresResidual += btParallelSum(phase.begin, phase.end, grainSize, loop);
- }
- }
- else
- {
- // non-batched
- leastSquaresResidual = resolveMultipleContactSplitPenetrationImpulseConstraints(m_orderTmpConstraintPool, 0, m_tmpSolverContactConstraintPool.size());
- }
- if (leastSquaresResidual <= infoGlobal.m_leastSquaresResidualThreshold || iteration >= (infoGlobal.m_numIterations - 1))
- {
-#ifdef VERBOSE_RESIDUAL_PRINTF
- printf("residual = %f at iteration #%d\n", leastSquaresResidual, iteration);
-#endif
- break;
- }
- }
- }
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- if (!m_useBatching)
- {
- return btSequentialImpulseConstraintSolver::solveSingleIteration(iteration, bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
- }
- BT_PROFILE("solveSingleIterationMt");
- btScalar leastSquaresResidual = 0.f;
-
- if (infoGlobal.m_solverMode & SOLVER_RANDMIZE_ORDER)
- {
- if (1) // uncomment this for a bit less random ((iteration & 7) == 0)
- {
- randomizeConstraintOrdering(iteration, infoGlobal.m_numIterations);
- }
- }
-
- {
- ///solve all joint constraints
- leastSquaresResidual += resolveAllJointConstraints(iteration);
-
- if (iteration < infoGlobal.m_numIterations)
- {
- // this loop is only used for cone-twist constraints,
- // it would be nice to skip this loop if none of the constraints need it
- if (m_useObsoleteJointConstraints)
- {
- for (int j = 0; j < numConstraints; j++)
- {
- if (constraints[j]->isEnabled())
- {
- int bodyAid = getOrInitSolverBody(constraints[j]->getRigidBodyA(), infoGlobal.m_timeStep);
- int bodyBid = getOrInitSolverBody(constraints[j]->getRigidBodyB(), infoGlobal.m_timeStep);
- btSolverBody& bodyA = m_tmpSolverBodyPool[bodyAid];
- btSolverBody& bodyB = m_tmpSolverBodyPool[bodyBid];
- constraints[j]->solveConstraintObsolete(bodyA, bodyB, infoGlobal.m_timeStep);
- }
- }
- }
-
- if (infoGlobal.m_solverMode & SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS)
- {
- // solve all contact, contact-friction, and rolling friction constraints interleaved
- leastSquaresResidual += resolveAllContactConstraintsInterleaved();
- }
- else //SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS
- {
- // don't interleave them
- // solve all contact constraints
- leastSquaresResidual += resolveAllContactConstraints();
-
- // solve all contact friction constraints
- leastSquaresResidual += resolveAllContactFrictionConstraints();
-
- // solve all rolling friction constraints
- leastSquaresResidual += resolveAllRollingFrictionConstraints();
- }
- }
- }
- return leastSquaresResidual;
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleJointConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd, int iteration)
-{
- btScalar leastSquaresResidual = 0.f;
- for (int iiCons = batchBegin; iiCons < batchEnd; ++iiCons)
- {
- int iCons = consIndices[iiCons];
- const btSolverConstraint& constraint = m_tmpSolverNonContactConstraintPool[iCons];
- if (iteration < constraint.m_overrideNumSolverIterations)
- {
- btSolverBody& bodyA = m_tmpSolverBodyPool[constraint.m_solverBodyIdA];
- btSolverBody& bodyB = m_tmpSolverBodyPool[constraint.m_solverBodyIdB];
- btScalar residual = resolveSingleConstraintRowGeneric(bodyA, bodyB, constraint);
- leastSquaresResidual += residual * residual;
- }
- }
- return leastSquaresResidual;
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd)
-{
- btScalar leastSquaresResidual = 0.f;
- for (int iiCons = batchBegin; iiCons < batchEnd; ++iiCons)
- {
- int iCons = consIndices[iiCons];
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[iCons];
- btSolverBody& bodyA = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA];
- btSolverBody& bodyB = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB];
- btScalar residual = resolveSingleConstraintRowLowerLimit(bodyA, bodyB, solveManifold);
- leastSquaresResidual += residual * residual;
- }
- return leastSquaresResidual;
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactFrictionConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd)
-{
- btScalar leastSquaresResidual = 0.f;
- for (int iiCons = batchBegin; iiCons < batchEnd; ++iiCons)
- {
- int iContact = consIndices[iiCons];
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[iContact].m_appliedImpulse;
-
- // apply sliding friction
- if (totalImpulse > 0.0f)
- {
- int iBegin = iContact * m_numFrictionDirections;
- int iEnd = iBegin + m_numFrictionDirections;
- for (int iFriction = iBegin; iFriction < iEnd; ++iFriction)
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[iFriction++];
- btAssert(solveManifold.m_frictionIndex == iContact);
-
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- btSolverBody& bodyA = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA];
- btSolverBody& bodyB = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB];
- btScalar residual = resolveSingleConstraintRowGeneric(bodyA, bodyB, solveManifold);
- leastSquaresResidual += residual * residual;
- }
- }
- }
- return leastSquaresResidual;
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactRollingFrictionConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd)
-{
- btScalar leastSquaresResidual = 0.f;
- for (int iiCons = batchBegin; iiCons < batchEnd; ++iiCons)
- {
- int iContact = consIndices[iiCons];
- int iFirstRollingFriction = m_rollingFrictionIndexTable[iContact];
- if (iFirstRollingFriction >= 0)
- {
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[iContact].m_appliedImpulse;
- // apply rolling friction
- if (totalImpulse > 0.0f)
- {
- int iBegin = iFirstRollingFriction;
- int iEnd = iBegin + 3;
- for (int iRollingFric = iBegin; iRollingFric < iEnd; ++iRollingFric)
- {
- btSolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[iRollingFric];
- if (rollingFrictionConstraint.m_frictionIndex != iContact)
- {
- break;
- }
- btScalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- {
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
- }
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- leastSquaresResidual += residual * residual;
- }
- }
- }
- }
- return leastSquaresResidual;
-}
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveMultipleContactConstraintsInterleaved(const btAlignedObjectArray<int>& contactIndices,
- int batchBegin,
- int batchEnd)
-{
- btScalar leastSquaresResidual = 0.f;
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
-
- for (int iiCons = batchBegin; iiCons < batchEnd; iiCons++)
- {
- btScalar totalImpulse = 0;
- int iContact = contactIndices[iiCons];
- // apply penetration constraint
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[iContact];
- btScalar residual = resolveSingleConstraintRowLowerLimit(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual += residual * residual;
- totalImpulse = solveManifold.m_appliedImpulse;
- }
-
- // apply sliding friction
- if (totalImpulse > 0.0f)
- {
- int iBegin = iContact * m_numFrictionDirections;
- int iEnd = iBegin + m_numFrictionDirections;
- for (int iFriction = iBegin; iFriction < iEnd; ++iFriction)
- {
- btSolverConstraint& solveManifold = m_tmpSolverContactFrictionConstraintPool[iFriction];
- btAssert(solveManifold.m_frictionIndex == iContact);
-
- solveManifold.m_lowerLimit = -(solveManifold.m_friction * totalImpulse);
- solveManifold.m_upperLimit = solveManifold.m_friction * totalImpulse;
-
- btSolverBody& bodyA = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA];
- btSolverBody& bodyB = m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB];
- btScalar residual = resolveSingleConstraintRowGeneric(bodyA, bodyB, solveManifold);
- leastSquaresResidual += residual * residual;
- }
- }
-
- // apply rolling friction
- int iFirstRollingFriction = m_rollingFrictionIndexTable[iContact];
- if (totalImpulse > 0.0f && iFirstRollingFriction >= 0)
- {
- int iBegin = iFirstRollingFriction;
- int iEnd = iBegin + 3;
- for (int iRollingFric = iBegin; iRollingFric < iEnd; ++iRollingFric)
- {
- btSolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[iRollingFric];
- if (rollingFrictionConstraint.m_frictionIndex != iContact)
- {
- break;
- }
- btScalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- {
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
- }
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- leastSquaresResidual += residual * residual;
- }
- }
- }
- return leastSquaresResidual;
-}
-
-void btSequentialImpulseConstraintSolverMt::randomizeBatchedConstraintOrdering(btBatchedConstraints* batchedConstraints)
-{
- btBatchedConstraints& bc = *batchedConstraints;
- // randomize ordering of phases
- for (int ii = 1; ii < bc.m_phaseOrder.size(); ++ii)
- {
- int iSwap = btRandInt2(ii + 1);
- bc.m_phaseOrder.swap(ii, iSwap);
- }
-
- // for each batch,
- for (int iBatch = 0; iBatch < bc.m_batches.size(); ++iBatch)
- {
- // randomize ordering of constraints within the batch
- const btBatchedConstraints::Range& batch = bc.m_batches[iBatch];
- for (int iiCons = batch.begin; iiCons < batch.end; ++iiCons)
- {
- int iSwap = batch.begin + btRandInt2(iiCons - batch.begin + 1);
- btAssert(iSwap >= batch.begin && iSwap < batch.end);
- bc.m_constraintIndices.swap(iiCons, iSwap);
- }
- }
-}
-
-void btSequentialImpulseConstraintSolverMt::randomizeConstraintOrdering(int iteration, int numIterations)
-{
- // randomize ordering of joint constraints
- randomizeBatchedConstraintOrdering(&m_batchedJointConstraints);
-
- //contact/friction constraints are not solved more than numIterations
- if (iteration < numIterations)
- {
- randomizeBatchedConstraintOrdering(&m_batchedContactConstraints);
- }
-}
-
-struct JointSolverLoop : public btIParallelSumBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
- int m_iteration;
-
- JointSolverLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc, int iteration)
- {
- m_solver = solver;
- m_bc = bc;
- m_iteration = iteration;
- }
- btScalar sumLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("JointSolverLoop");
- btScalar sum = 0;
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- sum += m_solver->resolveMultipleJointConstraints(m_bc->m_constraintIndices, batch.begin, batch.end, m_iteration);
- }
- return sum;
- }
-};
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveAllJointConstraints(int iteration)
-{
- BT_PROFILE("resolveAllJointConstraints");
- const btBatchedConstraints& batchedCons = m_batchedJointConstraints;
- JointSolverLoop loop(this, &batchedCons, iteration);
- btScalar leastSquaresResidual = 0.f;
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = 1;
- leastSquaresResidual += btParallelSum(phase.begin, phase.end, grainSize, loop);
- }
- return leastSquaresResidual;
-}
-
-struct ContactSolverLoop : public btIParallelSumBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
-
- ContactSolverLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc)
- {
- m_solver = solver;
- m_bc = bc;
- }
- btScalar sumLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("ContactSolverLoop");
- btScalar sum = 0;
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- sum += m_solver->resolveMultipleContactConstraints(m_bc->m_constraintIndices, batch.begin, batch.end);
- }
- return sum;
- }
-};
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveAllContactConstraints()
-{
- BT_PROFILE("resolveAllContactConstraints");
- const btBatchedConstraints& batchedCons = m_batchedContactConstraints;
- ContactSolverLoop loop(this, &batchedCons);
- btScalar leastSquaresResidual = 0.f;
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = batchedCons.m_phaseGrainSize[iPhase];
- leastSquaresResidual += btParallelSum(phase.begin, phase.end, grainSize, loop);
- }
- return leastSquaresResidual;
-}
-
-struct ContactFrictionSolverLoop : public btIParallelSumBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
-
- ContactFrictionSolverLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc)
- {
- m_solver = solver;
- m_bc = bc;
- }
- btScalar sumLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("ContactFrictionSolverLoop");
- btScalar sum = 0;
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- sum += m_solver->resolveMultipleContactFrictionConstraints(m_bc->m_constraintIndices, batch.begin, batch.end);
- }
- return sum;
- }
-};
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveAllContactFrictionConstraints()
-{
- BT_PROFILE("resolveAllContactFrictionConstraints");
- const btBatchedConstraints& batchedCons = m_batchedContactConstraints;
- ContactFrictionSolverLoop loop(this, &batchedCons);
- btScalar leastSquaresResidual = 0.f;
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = batchedCons.m_phaseGrainSize[iPhase];
- leastSquaresResidual += btParallelSum(phase.begin, phase.end, grainSize, loop);
- }
- return leastSquaresResidual;
-}
-
-struct InterleavedContactSolverLoop : public btIParallelSumBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
-
- InterleavedContactSolverLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc)
- {
- m_solver = solver;
- m_bc = bc;
- }
- btScalar sumLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("InterleavedContactSolverLoop");
- btScalar sum = 0;
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- sum += m_solver->resolveMultipleContactConstraintsInterleaved(m_bc->m_constraintIndices, batch.begin, batch.end);
- }
- return sum;
- }
-};
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveAllContactConstraintsInterleaved()
-{
- BT_PROFILE("resolveAllContactConstraintsInterleaved");
- const btBatchedConstraints& batchedCons = m_batchedContactConstraints;
- InterleavedContactSolverLoop loop(this, &batchedCons);
- btScalar leastSquaresResidual = 0.f;
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = 1;
- leastSquaresResidual += btParallelSum(phase.begin, phase.end, grainSize, loop);
- }
- return leastSquaresResidual;
-}
-
-struct ContactRollingFrictionSolverLoop : public btIParallelSumBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btBatchedConstraints* m_bc;
-
- ContactRollingFrictionSolverLoop(btSequentialImpulseConstraintSolverMt* solver, const btBatchedConstraints* bc)
- {
- m_solver = solver;
- m_bc = bc;
- }
- btScalar sumLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- BT_PROFILE("ContactFrictionSolverLoop");
- btScalar sum = 0;
- for (int iBatch = iBegin; iBatch < iEnd; ++iBatch)
- {
- const btBatchedConstraints::Range& batch = m_bc->m_batches[iBatch];
- sum += m_solver->resolveMultipleContactRollingFrictionConstraints(m_bc->m_constraintIndices, batch.begin, batch.end);
- }
- return sum;
- }
-};
-
-btScalar btSequentialImpulseConstraintSolverMt::resolveAllRollingFrictionConstraints()
-{
- BT_PROFILE("resolveAllRollingFrictionConstraints");
- btScalar leastSquaresResidual = 0.f;
- //
- // We do not generate batches for rolling friction constraints. We assume that
- // one of two cases is true:
- //
- // 1. either most bodies in the simulation have rolling friction, in which case we can use the
- // batches for contacts and use a lookup table to translate contact indices to rolling friction
- // (ignoring any contact indices that don't map to a rolling friction constraint). As long as
- // most contacts have a corresponding rolling friction constraint, this should parallelize well.
- //
- // -OR-
- //
- // 2. few bodies in the simulation have rolling friction, so it is not worth trying to use the
- // batches from contacts as most of the contacts won't have corresponding rolling friction
- // constraints and most threads would end up doing very little work. Most of the time would
- // go to threading overhead, so we don't bother with threading.
- //
- int numRollingFrictionPoolConstraints = m_tmpSolverContactRollingFrictionConstraintPool.size();
- if (numRollingFrictionPoolConstraints >= m_tmpSolverContactConstraintPool.size())
- {
- // use batching if there are many rolling friction constraints
- const btBatchedConstraints& batchedCons = m_batchedContactConstraints;
- ContactRollingFrictionSolverLoop loop(this, &batchedCons);
- btScalar leastSquaresResidual = 0.f;
- for (int iiPhase = 0; iiPhase < batchedCons.m_phases.size(); ++iiPhase)
- {
- int iPhase = batchedCons.m_phaseOrder[iiPhase];
- const btBatchedConstraints::Range& phase = batchedCons.m_phases[iPhase];
- int grainSize = 1;
- leastSquaresResidual += btParallelSum(phase.begin, phase.end, grainSize, loop);
- }
- }
- else
- {
- // no batching, also ignores SOLVER_RANDMIZE_ORDER
- for (int j = 0; j < numRollingFrictionPoolConstraints; j++)
- {
- btSolverConstraint& rollingFrictionConstraint = m_tmpSolverContactRollingFrictionConstraintPool[j];
- if (rollingFrictionConstraint.m_frictionIndex >= 0)
- {
- btScalar totalImpulse = m_tmpSolverContactConstraintPool[rollingFrictionConstraint.m_frictionIndex].m_appliedImpulse;
- if (totalImpulse > 0.0f)
- {
- btScalar rollingFrictionMagnitude = rollingFrictionConstraint.m_friction * totalImpulse;
- if (rollingFrictionMagnitude > rollingFrictionConstraint.m_friction)
- rollingFrictionMagnitude = rollingFrictionConstraint.m_friction;
-
- rollingFrictionConstraint.m_lowerLimit = -rollingFrictionMagnitude;
- rollingFrictionConstraint.m_upperLimit = rollingFrictionMagnitude;
-
- btScalar residual = resolveSingleConstraintRowGeneric(m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdA], m_tmpSolverBodyPool[rollingFrictionConstraint.m_solverBodyIdB], rollingFrictionConstraint);
- leastSquaresResidual += residual * residual;
- }
- }
- }
- }
- return leastSquaresResidual;
-}
-
-void btSequentialImpulseConstraintSolverMt::internalWriteBackContacts(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("internalWriteBackContacts");
- writeBackContacts(iBegin, iEnd, infoGlobal);
- //for ( int iContact = iBegin; iContact < iEnd; ++iContact)
- //{
- // const btSolverConstraint& contactConstraint = m_tmpSolverContactConstraintPool[ iContact ];
- // btManifoldPoint* pt = (btManifoldPoint*) contactConstraint.m_originalContactPoint;
- // btAssert( pt );
- // pt->m_appliedImpulse = contactConstraint.m_appliedImpulse;
- // pt->m_appliedImpulseLateral1 = m_tmpSolverContactFrictionConstraintPool[ contactConstraint.m_frictionIndex ].m_appliedImpulse;
- // if ( m_numFrictionDirections == 2 )
- // {
- // pt->m_appliedImpulseLateral2 = m_tmpSolverContactFrictionConstraintPool[ contactConstraint.m_frictionIndex + 1 ].m_appliedImpulse;
- // }
- //}
-}
-
-void btSequentialImpulseConstraintSolverMt::internalWriteBackJoints(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("internalWriteBackJoints");
- writeBackJoints(iBegin, iEnd, infoGlobal);
-}
-
-void btSequentialImpulseConstraintSolverMt::internalWriteBackBodies(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("internalWriteBackBodies");
- writeBackBodies(iBegin, iEnd, infoGlobal);
-}
-
-struct WriteContactPointsLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btContactSolverInfo* m_infoGlobal;
-
- WriteContactPointsLoop(btSequentialImpulseConstraintSolverMt* solver, const btContactSolverInfo& infoGlobal)
- {
- m_solver = solver;
- m_infoGlobal = &infoGlobal;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalWriteBackContacts(iBegin, iEnd, *m_infoGlobal);
- }
-};
-
-struct WriteJointsLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btContactSolverInfo* m_infoGlobal;
-
- WriteJointsLoop(btSequentialImpulseConstraintSolverMt* solver, const btContactSolverInfo& infoGlobal)
- {
- m_solver = solver;
- m_infoGlobal = &infoGlobal;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalWriteBackJoints(iBegin, iEnd, *m_infoGlobal);
- }
-};
-
-struct WriteBodiesLoop : public btIParallelForBody
-{
- btSequentialImpulseConstraintSolverMt* m_solver;
- const btContactSolverInfo* m_infoGlobal;
-
- WriteBodiesLoop(btSequentialImpulseConstraintSolverMt* solver, const btContactSolverInfo& infoGlobal)
- {
- m_solver = solver;
- m_infoGlobal = &infoGlobal;
- }
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- m_solver->internalWriteBackBodies(iBegin, iEnd, *m_infoGlobal);
- }
-};
-
-btScalar btSequentialImpulseConstraintSolverMt::solveGroupCacheFriendlyFinish(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("solveGroupCacheFriendlyFinish");
-
- if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)
- {
- WriteContactPointsLoop loop(this, infoGlobal);
- int grainSize = 500;
- btParallelFor(0, m_tmpSolverContactConstraintPool.size(), grainSize, loop);
- }
-
- {
- WriteJointsLoop loop(this, infoGlobal);
- int grainSize = 400;
- btParallelFor(0, m_tmpSolverNonContactConstraintPool.size(), grainSize, loop);
- }
- {
- WriteBodiesLoop loop(this, infoGlobal);
- int grainSize = 100;
- btParallelFor(0, m_tmpSolverBodyPool.size(), grainSize, loop);
- }
-
- m_tmpSolverContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverNonContactConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactFrictionConstraintPool.resizeNoInitialize(0);
- m_tmpSolverContactRollingFrictionConstraintPool.resizeNoInitialize(0);
-
- m_tmpSolverBodyPool.resizeNoInitialize(0);
- return 0.f;
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h
deleted file mode 100644
index 1861ddd7d7..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_MT_H
-#define BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_MT_H
-
-#include "btSequentialImpulseConstraintSolver.h"
-#include "btBatchedConstraints.h"
-#include "LinearMath/btThreads.h"
-
-///
-/// btSequentialImpulseConstraintSolverMt
-///
-/// A multithreaded variant of the sequential impulse constraint solver. The constraints to be solved are grouped into
-/// batches and phases where each batch of constraints within a given phase can be solved in parallel with the rest.
-/// Ideally we want as few phases as possible, and each phase should have many batches, and all of the batches should
-/// have about the same number of constraints.
-/// This method works best on a large island of many constraints.
-///
-/// Supports all of the features of the normal sequential impulse solver such as:
-/// - split penetration impulse
-/// - rolling friction
-/// - interleaving constraints
-/// - warmstarting
-/// - 2 friction directions
-/// - randomized constraint ordering
-/// - early termination when leastSquaresResidualThreshold is satisfied
-///
-/// When the SOLVER_INTERLEAVE_CONTACT_AND_FRICTION_CONSTRAINTS flag is enabled, unlike the normal SequentialImpulse solver,
-/// the rolling friction is interleaved as well.
-/// Interleaving the contact penetration constraints with friction reduces the number of parallel loops that need to be done,
-/// which reduces threading overhead so it can be a performance win, however, it does seem to produce a less stable simulation,
-/// at least on stacks of blocks.
-///
-/// When the SOLVER_RANDMIZE_ORDER flag is enabled, the ordering of phases, and the ordering of constraints within each batch
-/// is randomized, however it does not swap constraints between batches.
-/// This is to avoid regenerating the batches for each solver iteration which would be quite costly in performance.
-///
-/// Note that a non-zero leastSquaresResidualThreshold could possibly affect the determinism of the simulation
-/// if the task scheduler's parallelSum operation is non-deterministic. The parallelSum operation can be non-deterministic
-/// because floating point addition is not associative due to rounding errors.
-/// The task scheduler can and should ensure that the result of any parallelSum operation is deterministic.
-///
-ATTRIBUTE_ALIGNED16(class)
-btSequentialImpulseConstraintSolverMt : public btSequentialImpulseConstraintSolver
-{
-public:
- virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer) BT_OVERRIDE;
- virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer) BT_OVERRIDE;
- virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer) BT_OVERRIDE;
- virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal) BT_OVERRIDE;
-
- // temp struct used to collect info from persistent manifolds into a cache-friendly struct using multiple threads
- struct btContactManifoldCachedInfo
- {
- static const int MAX_NUM_CONTACT_POINTS = 4;
-
- int numTouchingContacts;
- int solverBodyIds[2];
- int contactIndex;
- int rollingFrictionIndex;
- bool contactHasRollingFriction[MAX_NUM_CONTACT_POINTS];
- btManifoldPoint* contactPoints[MAX_NUM_CONTACT_POINTS];
- };
- // temp struct used for setting up joint constraints in parallel
- struct JointParams
- {
- int m_solverConstraint;
- int m_solverBodyA;
- int m_solverBodyB;
- };
- void internalInitMultipleJoints(btTypedConstraint * *constraints, int iBegin, int iEnd);
- void internalConvertMultipleJoints(const btAlignedObjectArray<JointParams>& jointParamsArray, btTypedConstraint** constraints, int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
-
- // parameters to control batching
- static bool s_allowNestedParallelForLoops; // whether to allow nested parallel operations
- static int s_minimumContactManifoldsForBatching; // don't even try to batch if fewer manifolds than this
- static btBatchedConstraints::BatchingMethod s_contactBatchingMethod;
- static btBatchedConstraints::BatchingMethod s_jointBatchingMethod;
- static int s_minBatchSize; // desired number of constraints per batch
- static int s_maxBatchSize;
-
-protected:
- static const int CACHE_LINE_SIZE = 64;
-
- btBatchedConstraints m_batchedContactConstraints;
- btBatchedConstraints m_batchedJointConstraints;
- int m_numFrictionDirections;
- bool m_useBatching;
- bool m_useObsoleteJointConstraints;
- btAlignedObjectArray<btContactManifoldCachedInfo> m_manifoldCachedInfoArray;
- btAlignedObjectArray<int> m_rollingFrictionIndexTable; // lookup table mapping contact index to rolling friction index
- btSpinMutex m_bodySolverArrayMutex;
- char m_antiFalseSharingPadding[CACHE_LINE_SIZE]; // padding to keep mutexes in separate cachelines
- btSpinMutex m_kinematicBodyUniqueIdToSolverBodyTableMutex;
- btAlignedObjectArray<char> m_scratchMemory;
-
- virtual void randomizeConstraintOrdering(int iteration, int numIterations);
- virtual btScalar resolveAllJointConstraints(int iteration);
- virtual btScalar resolveAllContactConstraints();
- virtual btScalar resolveAllContactFrictionConstraints();
- virtual btScalar resolveAllContactConstraintsInterleaved();
- virtual btScalar resolveAllRollingFrictionConstraints();
-
- virtual void setupBatchedContactConstraints();
- virtual void setupBatchedJointConstraints();
- virtual void convertJoints(btTypedConstraint * *constraints, int numConstraints, const btContactSolverInfo& infoGlobal) BT_OVERRIDE;
- virtual void convertContacts(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal) BT_OVERRIDE;
- virtual void convertBodies(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal) BT_OVERRIDE;
-
- int getOrInitSolverBodyThreadsafe(btCollisionObject & body, btScalar timeStep);
- void allocAllContactConstraints(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal);
- void setupAllContactConstraints(const btContactSolverInfo& infoGlobal);
- void randomizeBatchedConstraintOrdering(btBatchedConstraints * batchedConstraints);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btSequentialImpulseConstraintSolverMt();
- virtual ~btSequentialImpulseConstraintSolverMt();
-
- btScalar resolveMultipleJointConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd, int iteration);
- btScalar resolveMultipleContactConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd);
- btScalar resolveMultipleContactSplitPenetrationImpulseConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd);
- btScalar resolveMultipleContactFrictionConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd);
- btScalar resolveMultipleContactRollingFrictionConstraints(const btAlignedObjectArray<int>& consIndices, int batchBegin, int batchEnd);
- btScalar resolveMultipleContactConstraintsInterleaved(const btAlignedObjectArray<int>& contactIndices, int batchBegin, int batchEnd);
-
- void internalCollectContactManifoldCachedInfo(btContactManifoldCachedInfo * cachedInfoArray, btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal);
- void internalAllocContactConstraints(const btContactManifoldCachedInfo* cachedInfoArray, int numManifolds);
- void internalSetupContactConstraints(int iContactConstraint, const btContactSolverInfo& infoGlobal);
- void internalConvertBodies(btCollisionObject * *bodies, int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
- void internalWriteBackContacts(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
- void internalWriteBackJoints(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
- void internalWriteBackBodies(int iBegin, int iEnd, const btContactSolverInfo& infoGlobal);
-};
-
-#endif //BT_SEQUENTIAL_IMPULSE_CONSTRAINT_SOLVER_MT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp
deleted file mode 100644
index cac5302a73..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.cpp
+++ /dev/null
@@ -1,823 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-Added by Roman Ponomarev (rponom@gmail.com)
-April 04, 2008
-*/
-
-#include "btSliderConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-#include <new>
-
-#define USE_OFFSET_FOR_CONSTANT_FRAME true
-
-void btSliderConstraint::initParams()
-{
- m_lowerLinLimit = btScalar(1.0);
- m_upperLinLimit = btScalar(-1.0);
- m_lowerAngLimit = btScalar(0.);
- m_upperAngLimit = btScalar(0.);
- m_softnessDirLin = SLIDER_CONSTRAINT_DEF_SOFTNESS;
- m_restitutionDirLin = SLIDER_CONSTRAINT_DEF_RESTITUTION;
- m_dampingDirLin = btScalar(0.);
- m_cfmDirLin = SLIDER_CONSTRAINT_DEF_CFM;
- m_softnessDirAng = SLIDER_CONSTRAINT_DEF_SOFTNESS;
- m_restitutionDirAng = SLIDER_CONSTRAINT_DEF_RESTITUTION;
- m_dampingDirAng = btScalar(0.);
- m_cfmDirAng = SLIDER_CONSTRAINT_DEF_CFM;
- m_softnessOrthoLin = SLIDER_CONSTRAINT_DEF_SOFTNESS;
- m_restitutionOrthoLin = SLIDER_CONSTRAINT_DEF_RESTITUTION;
- m_dampingOrthoLin = SLIDER_CONSTRAINT_DEF_DAMPING;
- m_cfmOrthoLin = SLIDER_CONSTRAINT_DEF_CFM;
- m_softnessOrthoAng = SLIDER_CONSTRAINT_DEF_SOFTNESS;
- m_restitutionOrthoAng = SLIDER_CONSTRAINT_DEF_RESTITUTION;
- m_dampingOrthoAng = SLIDER_CONSTRAINT_DEF_DAMPING;
- m_cfmOrthoAng = SLIDER_CONSTRAINT_DEF_CFM;
- m_softnessLimLin = SLIDER_CONSTRAINT_DEF_SOFTNESS;
- m_restitutionLimLin = SLIDER_CONSTRAINT_DEF_RESTITUTION;
- m_dampingLimLin = SLIDER_CONSTRAINT_DEF_DAMPING;
- m_cfmLimLin = SLIDER_CONSTRAINT_DEF_CFM;
- m_softnessLimAng = SLIDER_CONSTRAINT_DEF_SOFTNESS;
- m_restitutionLimAng = SLIDER_CONSTRAINT_DEF_RESTITUTION;
- m_dampingLimAng = SLIDER_CONSTRAINT_DEF_DAMPING;
- m_cfmLimAng = SLIDER_CONSTRAINT_DEF_CFM;
-
- m_poweredLinMotor = false;
- m_targetLinMotorVelocity = btScalar(0.);
- m_maxLinMotorForce = btScalar(0.);
- m_accumulatedLinMotorImpulse = btScalar(0.0);
-
- m_poweredAngMotor = false;
- m_targetAngMotorVelocity = btScalar(0.);
- m_maxAngMotorForce = btScalar(0.);
- m_accumulatedAngMotorImpulse = btScalar(0.0);
-
- m_flags = 0;
- m_flags = 0;
-
- m_useOffsetForConstraintFrame = USE_OFFSET_FOR_CONSTANT_FRAME;
-
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
-}
-
-btSliderConstraint::btSliderConstraint(btRigidBody& rbA, btRigidBody& rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA)
- : btTypedConstraint(SLIDER_CONSTRAINT_TYPE, rbA, rbB),
- m_useSolveConstraintObsolete(false),
- m_frameInA(frameInA),
- m_frameInB(frameInB),
- m_useLinearReferenceFrameA(useLinearReferenceFrameA)
-{
- initParams();
-}
-
-btSliderConstraint::btSliderConstraint(btRigidBody& rbB, const btTransform& frameInB, bool useLinearReferenceFrameA)
- : btTypedConstraint(SLIDER_CONSTRAINT_TYPE, getFixedBody(), rbB),
- m_useSolveConstraintObsolete(false),
- m_frameInB(frameInB),
- m_useLinearReferenceFrameA(useLinearReferenceFrameA)
-{
- ///not providing rigidbody A means implicitly using worldspace for body A
- m_frameInA = rbB.getCenterOfMassTransform() * m_frameInB;
- // m_frameInA.getOrigin() = m_rbA.getCenterOfMassTransform()(m_frameInA.getOrigin());
-
- initParams();
-}
-
-void btSliderConstraint::getInfo1(btConstraintInfo1* info)
-{
- if (m_useSolveConstraintObsolete)
- {
- info->m_numConstraintRows = 0;
- info->nub = 0;
- }
- else
- {
- info->m_numConstraintRows = 4; // Fixed 2 linear + 2 angular
- info->nub = 2;
- //prepare constraint
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
- testAngLimits();
- testLinLimits();
- if (getSolveLinLimit() || getPoweredLinMotor())
- {
- info->m_numConstraintRows++; // limit 3rd linear as well
- info->nub--;
- }
- if (getSolveAngLimit() || getPoweredAngMotor())
- {
- info->m_numConstraintRows++; // limit 3rd angular as well
- info->nub--;
- }
- }
-}
-
-void btSliderConstraint::getInfo1NonVirtual(btConstraintInfo1* info)
-{
- info->m_numConstraintRows = 6; // Fixed 2 linear + 2 angular + 1 limit (even if not used)
- info->nub = 0;
-}
-
-void btSliderConstraint::getInfo2(btConstraintInfo2* info)
-{
- getInfo2NonVirtual(info, m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform(), m_rbA.getLinearVelocity(), m_rbB.getLinearVelocity(), m_rbA.getInvMass(), m_rbB.getInvMass());
-}
-
-void btSliderConstraint::calculateTransforms(const btTransform& transA, const btTransform& transB)
-{
- if (m_useLinearReferenceFrameA || (!m_useSolveConstraintObsolete))
- {
- m_calculatedTransformA = transA * m_frameInA;
- m_calculatedTransformB = transB * m_frameInB;
- }
- else
- {
- m_calculatedTransformA = transB * m_frameInB;
- m_calculatedTransformB = transA * m_frameInA;
- }
- m_realPivotAInW = m_calculatedTransformA.getOrigin();
- m_realPivotBInW = m_calculatedTransformB.getOrigin();
- m_sliderAxis = m_calculatedTransformA.getBasis().getColumn(0); // along X
- if (m_useLinearReferenceFrameA || m_useSolveConstraintObsolete)
- {
- m_delta = m_realPivotBInW - m_realPivotAInW;
- }
- else
- {
- m_delta = m_realPivotAInW - m_realPivotBInW;
- }
- m_projPivotInW = m_realPivotAInW + m_sliderAxis.dot(m_delta) * m_sliderAxis;
- btVector3 normalWorld;
- int i;
- //linear part
- for (i = 0; i < 3; i++)
- {
- normalWorld = m_calculatedTransformA.getBasis().getColumn(i);
- m_depth[i] = m_delta.dot(normalWorld);
- }
-}
-
-void btSliderConstraint::testLinLimits(void)
-{
- m_solveLinLim = false;
- m_linPos = m_depth[0];
- if (m_lowerLinLimit <= m_upperLinLimit)
- {
- if (m_depth[0] > m_upperLinLimit)
- {
- m_depth[0] -= m_upperLinLimit;
- m_solveLinLim = true;
- }
- else if (m_depth[0] < m_lowerLinLimit)
- {
- m_depth[0] -= m_lowerLinLimit;
- m_solveLinLim = true;
- }
- else
- {
- m_depth[0] = btScalar(0.);
- }
- }
- else
- {
- m_depth[0] = btScalar(0.);
- }
-}
-
-void btSliderConstraint::testAngLimits(void)
-{
- m_angDepth = btScalar(0.);
- m_solveAngLim = false;
- if (m_lowerAngLimit <= m_upperAngLimit)
- {
- const btVector3 axisA0 = m_calculatedTransformA.getBasis().getColumn(1);
- const btVector3 axisA1 = m_calculatedTransformA.getBasis().getColumn(2);
- const btVector3 axisB0 = m_calculatedTransformB.getBasis().getColumn(1);
- // btScalar rot = btAtan2Fast(axisB0.dot(axisA1), axisB0.dot(axisA0));
- btScalar rot = btAtan2(axisB0.dot(axisA1), axisB0.dot(axisA0));
- rot = btAdjustAngleToLimits(rot, m_lowerAngLimit, m_upperAngLimit);
- m_angPos = rot;
- if (rot < m_lowerAngLimit)
- {
- m_angDepth = rot - m_lowerAngLimit;
- m_solveAngLim = true;
- }
- else if (rot > m_upperAngLimit)
- {
- m_angDepth = rot - m_upperAngLimit;
- m_solveAngLim = true;
- }
- }
-}
-
-btVector3 btSliderConstraint::getAncorInA(void)
-{
- btVector3 ancorInA;
- ancorInA = m_realPivotAInW + (m_lowerLinLimit + m_upperLinLimit) * btScalar(0.5) * m_sliderAxis;
- ancorInA = m_rbA.getCenterOfMassTransform().inverse() * ancorInA;
- return ancorInA;
-}
-
-btVector3 btSliderConstraint::getAncorInB(void)
-{
- btVector3 ancorInB;
- ancorInB = m_frameInB.getOrigin();
- return ancorInB;
-}
-
-void btSliderConstraint::getInfo2NonVirtual(btConstraintInfo2* info, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, btScalar rbAinvMass, btScalar rbBinvMass)
-{
- const btTransform& trA = getCalculatedTransformA();
- const btTransform& trB = getCalculatedTransformB();
-
- btAssert(!m_useSolveConstraintObsolete);
- int i, s = info->rowskip;
-
- btScalar signFact = m_useLinearReferenceFrameA ? btScalar(1.0f) : btScalar(-1.0f);
-
- // difference between frames in WCS
- btVector3 ofs = trB.getOrigin() - trA.getOrigin();
- // now get weight factors depending on masses
- btScalar miA = rbAinvMass;
- btScalar miB = rbBinvMass;
- bool hasStaticBody = (miA < SIMD_EPSILON) || (miB < SIMD_EPSILON);
- btScalar miS = miA + miB;
- btScalar factA, factB;
- if (miS > btScalar(0.f))
- {
- factA = miB / miS;
- }
- else
- {
- factA = btScalar(0.5f);
- }
- factB = btScalar(1.0f) - factA;
- btVector3 ax1, p, q;
- btVector3 ax1A = trA.getBasis().getColumn(0);
- btVector3 ax1B = trB.getBasis().getColumn(0);
- if (m_useOffsetForConstraintFrame)
- {
- // get the desired direction of slider axis
- // as weighted sum of X-orthos of frameA and frameB in WCS
- ax1 = ax1A * factA + ax1B * factB;
- ax1.normalize();
- // construct two orthos to slider axis
- btPlaneSpace1(ax1, p, q);
- }
- else
- { // old way - use frameA
- ax1 = trA.getBasis().getColumn(0);
- // get 2 orthos to slider axis (Y, Z)
- p = trA.getBasis().getColumn(1);
- q = trA.getBasis().getColumn(2);
- }
- // make rotations around these orthos equal
- // the slider axis should be the only unconstrained
- // rotational axis, the angular velocity of the two bodies perpendicular to
- // the slider axis should be equal. thus the constraint equations are
- // p*w1 - p*w2 = 0
- // q*w1 - q*w2 = 0
- // where p and q are unit vectors normal to the slider axis, and w1 and w2
- // are the angular velocity vectors of the two bodies.
- info->m_J1angularAxis[0] = p[0];
- info->m_J1angularAxis[1] = p[1];
- info->m_J1angularAxis[2] = p[2];
- info->m_J1angularAxis[s + 0] = q[0];
- info->m_J1angularAxis[s + 1] = q[1];
- info->m_J1angularAxis[s + 2] = q[2];
-
- info->m_J2angularAxis[0] = -p[0];
- info->m_J2angularAxis[1] = -p[1];
- info->m_J2angularAxis[2] = -p[2];
- info->m_J2angularAxis[s + 0] = -q[0];
- info->m_J2angularAxis[s + 1] = -q[1];
- info->m_J2angularAxis[s + 2] = -q[2];
- // compute the right hand side of the constraint equation. set relative
- // body velocities along p and q to bring the slider back into alignment.
- // if ax1A,ax1B are the unit length slider axes as computed from bodyA and
- // bodyB, we need to rotate both bodies along the axis u = (ax1 x ax2).
- // if "theta" is the angle between ax1 and ax2, we need an angular velocity
- // along u to cover angle erp*theta in one step :
- // |angular_velocity| = angle/time = erp*theta / stepsize
- // = (erp*fps) * theta
- // angular_velocity = |angular_velocity| * (ax1 x ax2) / |ax1 x ax2|
- // = (erp*fps) * theta * (ax1 x ax2) / sin(theta)
- // ...as ax1 and ax2 are unit length. if theta is smallish,
- // theta ~= sin(theta), so
- // angular_velocity = (erp*fps) * (ax1 x ax2)
- // ax1 x ax2 is in the plane space of ax1, so we project the angular
- // velocity to p and q to find the right hand side.
- // btScalar k = info->fps * info->erp * getSoftnessOrthoAng();
- btScalar currERP = (m_flags & BT_SLIDER_FLAGS_ERP_ORTANG) ? m_softnessOrthoAng : m_softnessOrthoAng * info->erp;
- btScalar k = info->fps * currERP;
-
- btVector3 u = ax1A.cross(ax1B);
- info->m_constraintError[0] = k * u.dot(p);
- info->m_constraintError[s] = k * u.dot(q);
- if (m_flags & BT_SLIDER_FLAGS_CFM_ORTANG)
- {
- info->cfm[0] = m_cfmOrthoAng;
- info->cfm[s] = m_cfmOrthoAng;
- }
-
- int nrow = 1; // last filled row
- int srow;
- btScalar limit_err;
- int limit;
-
- // next two rows.
- // we want: velA + wA x relA == velB + wB x relB ... but this would
- // result in three equations, so we project along two orthos to the slider axis
-
- btTransform bodyA_trans = transA;
- btTransform bodyB_trans = transB;
- nrow++;
- int s2 = nrow * s;
- nrow++;
- int s3 = nrow * s;
- btVector3 tmpA(0, 0, 0), tmpB(0, 0, 0), relA(0, 0, 0), relB(0, 0, 0), c(0, 0, 0);
- if (m_useOffsetForConstraintFrame)
- {
- // get vector from bodyB to frameB in WCS
- relB = trB.getOrigin() - bodyB_trans.getOrigin();
- // get its projection to slider axis
- btVector3 projB = ax1 * relB.dot(ax1);
- // get vector directed from bodyB to slider axis (and orthogonal to it)
- btVector3 orthoB = relB - projB;
- // same for bodyA
- relA = trA.getOrigin() - bodyA_trans.getOrigin();
- btVector3 projA = ax1 * relA.dot(ax1);
- btVector3 orthoA = relA - projA;
- // get desired offset between frames A and B along slider axis
- btScalar sliderOffs = m_linPos - m_depth[0];
- // desired vector from projection of center of bodyA to projection of center of bodyB to slider axis
- btVector3 totalDist = projA + ax1 * sliderOffs - projB;
- // get offset vectors relA and relB
- relA = orthoA + totalDist * factA;
- relB = orthoB - totalDist * factB;
- // now choose average ortho to slider axis
- p = orthoB * factA + orthoA * factB;
- btScalar len2 = p.length2();
- if (len2 > SIMD_EPSILON)
- {
- p /= btSqrt(len2);
- }
- else
- {
- p = trA.getBasis().getColumn(1);
- }
- // make one more ortho
- q = ax1.cross(p);
- // fill two rows
- tmpA = relA.cross(p);
- tmpB = relB.cross(p);
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s2 + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s2 + i] = -tmpB[i];
- tmpA = relA.cross(q);
- tmpB = relB.cross(q);
- if (hasStaticBody && getSolveAngLimit())
- { // to make constraint between static and dynamic objects more rigid
- // remove wA (or wB) from equation if angular limit is hit
- tmpB *= factB;
- tmpA *= factA;
- }
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s3 + i] = tmpA[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s3 + i] = -tmpB[i];
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s2 + i] = p[i];
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s3 + i] = q[i];
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s2 + i] = -p[i];
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s3 + i] = -q[i];
- }
- else
- { // old way - maybe incorrect if bodies are not on the slider axis
- // see discussion "Bug in slider constraint" http://bulletphysics.org/Bullet/phpBB3/viewtopic.php?f=9&t=4024&start=0
- c = bodyB_trans.getOrigin() - bodyA_trans.getOrigin();
- btVector3 tmp = c.cross(p);
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s2 + i] = factA * tmp[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s2 + i] = factB * tmp[i];
- tmp = c.cross(q);
- for (i = 0; i < 3; i++) info->m_J1angularAxis[s3 + i] = factA * tmp[i];
- for (i = 0; i < 3; i++) info->m_J2angularAxis[s3 + i] = factB * tmp[i];
-
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s2 + i] = p[i];
- for (i = 0; i < 3; i++) info->m_J1linearAxis[s3 + i] = q[i];
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s2 + i] = -p[i];
- for (i = 0; i < 3; i++) info->m_J2linearAxis[s3 + i] = -q[i];
- }
- // compute two elements of right hand side
-
- // k = info->fps * info->erp * getSoftnessOrthoLin();
- currERP = (m_flags & BT_SLIDER_FLAGS_ERP_ORTLIN) ? m_softnessOrthoLin : m_softnessOrthoLin * info->erp;
- k = info->fps * currERP;
-
- btScalar rhs = k * p.dot(ofs);
- info->m_constraintError[s2] = rhs;
- rhs = k * q.dot(ofs);
- info->m_constraintError[s3] = rhs;
- if (m_flags & BT_SLIDER_FLAGS_CFM_ORTLIN)
- {
- info->cfm[s2] = m_cfmOrthoLin;
- info->cfm[s3] = m_cfmOrthoLin;
- }
-
- // check linear limits
- limit_err = btScalar(0.0);
- limit = 0;
- if (getSolveLinLimit())
- {
- limit_err = getLinDepth() * signFact;
- limit = (limit_err > btScalar(0.0)) ? 2 : 1;
- }
- bool powered = getPoweredLinMotor();
- // if the slider has joint limits or motor, add in the extra row
- if (limit || powered)
- {
- nrow++;
- srow = nrow * info->rowskip;
- info->m_J1linearAxis[srow + 0] = ax1[0];
- info->m_J1linearAxis[srow + 1] = ax1[1];
- info->m_J1linearAxis[srow + 2] = ax1[2];
- info->m_J2linearAxis[srow + 0] = -ax1[0];
- info->m_J2linearAxis[srow + 1] = -ax1[1];
- info->m_J2linearAxis[srow + 2] = -ax1[2];
- // linear torque decoupling step:
- //
- // we have to be careful that the linear constraint forces (+/- ax1) applied to the two bodies
- // do not create a torque couple. in other words, the points that the
- // constraint force is applied at must lie along the same ax1 axis.
- // a torque couple will result in limited slider-jointed free
- // bodies from gaining angular momentum.
- if (m_useOffsetForConstraintFrame)
- {
- // this is needed only when bodyA and bodyB are both dynamic.
- if (!hasStaticBody)
- {
- tmpA = relA.cross(ax1);
- tmpB = relB.cross(ax1);
- info->m_J1angularAxis[srow + 0] = tmpA[0];
- info->m_J1angularAxis[srow + 1] = tmpA[1];
- info->m_J1angularAxis[srow + 2] = tmpA[2];
- info->m_J2angularAxis[srow + 0] = -tmpB[0];
- info->m_J2angularAxis[srow + 1] = -tmpB[1];
- info->m_J2angularAxis[srow + 2] = -tmpB[2];
- }
- }
- else
- { // The old way. May be incorrect if bodies are not on the slider axis
- btVector3 ltd; // Linear Torque Decoupling vector (a torque)
- ltd = c.cross(ax1);
- info->m_J1angularAxis[srow + 0] = factA * ltd[0];
- info->m_J1angularAxis[srow + 1] = factA * ltd[1];
- info->m_J1angularAxis[srow + 2] = factA * ltd[2];
- info->m_J2angularAxis[srow + 0] = factB * ltd[0];
- info->m_J2angularAxis[srow + 1] = factB * ltd[1];
- info->m_J2angularAxis[srow + 2] = factB * ltd[2];
- }
- // right-hand part
- btScalar lostop = getLowerLinLimit();
- btScalar histop = getUpperLinLimit();
- if (limit && (lostop == histop))
- { // the joint motor is ineffective
- powered = false;
- }
- info->m_constraintError[srow] = 0.;
- info->m_lowerLimit[srow] = 0.;
- info->m_upperLimit[srow] = 0.;
- currERP = (m_flags & BT_SLIDER_FLAGS_ERP_LIMLIN) ? m_softnessLimLin : info->erp;
- if (powered)
- {
- if (m_flags & BT_SLIDER_FLAGS_CFM_DIRLIN)
- {
- info->cfm[srow] = m_cfmDirLin;
- }
- btScalar tag_vel = getTargetLinMotorVelocity();
- btScalar mot_fact = getMotorFactor(m_linPos, m_lowerLinLimit, m_upperLinLimit, tag_vel, info->fps * currERP);
- info->m_constraintError[srow] -= signFact * mot_fact * getTargetLinMotorVelocity();
- info->m_lowerLimit[srow] += -getMaxLinMotorForce() / info->fps;
- info->m_upperLimit[srow] += getMaxLinMotorForce() / info->fps;
- }
- if (limit)
- {
- k = info->fps * currERP;
- info->m_constraintError[srow] += k * limit_err;
- if (m_flags & BT_SLIDER_FLAGS_CFM_LIMLIN)
- {
- info->cfm[srow] = m_cfmLimLin;
- }
- if (lostop == histop)
- { // limited low and high simultaneously
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else if (limit == 1)
- { // low limit
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- else
- { // high limit
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- // bounce (we'll use slider parameter abs(1.0 - m_dampingLimLin) for that)
- btScalar bounce = btFabs(btScalar(1.0) - getDampingLimLin());
- if (bounce > btScalar(0.0))
- {
- btScalar vel = linVelA.dot(ax1);
- vel -= linVelB.dot(ax1);
- vel *= signFact;
- // only apply bounce if the velocity is incoming, and if the
- // resulting c[] exceeds what we already have.
- if (limit == 1)
- { // low limit
- if (vel < 0)
- {
- btScalar newc = -bounce * vel;
- if (newc > info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- else
- { // high limit - all those computations are reversed
- if (vel > 0)
- {
- btScalar newc = -bounce * vel;
- if (newc < info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- }
- info->m_constraintError[srow] *= getSoftnessLimLin();
- } // if(limit)
- } // if linear limit
- // check angular limits
- limit_err = btScalar(0.0);
- limit = 0;
- if (getSolveAngLimit())
- {
- limit_err = getAngDepth();
- limit = (limit_err > btScalar(0.0)) ? 1 : 2;
- }
- // if the slider has joint limits, add in the extra row
- powered = getPoweredAngMotor();
- if (limit || powered)
- {
- nrow++;
- srow = nrow * info->rowskip;
- info->m_J1angularAxis[srow + 0] = ax1[0];
- info->m_J1angularAxis[srow + 1] = ax1[1];
- info->m_J1angularAxis[srow + 2] = ax1[2];
-
- info->m_J2angularAxis[srow + 0] = -ax1[0];
- info->m_J2angularAxis[srow + 1] = -ax1[1];
- info->m_J2angularAxis[srow + 2] = -ax1[2];
-
- btScalar lostop = getLowerAngLimit();
- btScalar histop = getUpperAngLimit();
- if (limit && (lostop == histop))
- { // the joint motor is ineffective
- powered = false;
- }
- currERP = (m_flags & BT_SLIDER_FLAGS_ERP_LIMANG) ? m_softnessLimAng : info->erp;
- if (powered)
- {
- if (m_flags & BT_SLIDER_FLAGS_CFM_DIRANG)
- {
- info->cfm[srow] = m_cfmDirAng;
- }
- btScalar mot_fact = getMotorFactor(m_angPos, m_lowerAngLimit, m_upperAngLimit, getTargetAngMotorVelocity(), info->fps * currERP);
- info->m_constraintError[srow] = mot_fact * getTargetAngMotorVelocity();
- info->m_lowerLimit[srow] = -getMaxAngMotorForce() / info->fps;
- info->m_upperLimit[srow] = getMaxAngMotorForce() / info->fps;
- }
- if (limit)
- {
- k = info->fps * currERP;
- info->m_constraintError[srow] += k * limit_err;
- if (m_flags & BT_SLIDER_FLAGS_CFM_LIMANG)
- {
- info->cfm[srow] = m_cfmLimAng;
- }
- if (lostop == histop)
- {
- // limited low and high simultaneously
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else if (limit == 1)
- { // low limit
- info->m_lowerLimit[srow] = 0;
- info->m_upperLimit[srow] = SIMD_INFINITY;
- }
- else
- { // high limit
- info->m_lowerLimit[srow] = -SIMD_INFINITY;
- info->m_upperLimit[srow] = 0;
- }
- // bounce (we'll use slider parameter abs(1.0 - m_dampingLimAng) for that)
- btScalar bounce = btFabs(btScalar(1.0) - getDampingLimAng());
- if (bounce > btScalar(0.0))
- {
- btScalar vel = m_rbA.getAngularVelocity().dot(ax1);
- vel -= m_rbB.getAngularVelocity().dot(ax1);
- // only apply bounce if the velocity is incoming, and if the
- // resulting c[] exceeds what we already have.
- if (limit == 1)
- { // low limit
- if (vel < 0)
- {
- btScalar newc = -bounce * vel;
- if (newc > info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- else
- { // high limit - all those computations are reversed
- if (vel > 0)
- {
- btScalar newc = -bounce * vel;
- if (newc < info->m_constraintError[srow])
- {
- info->m_constraintError[srow] = newc;
- }
- }
- }
- }
- info->m_constraintError[srow] *= getSoftnessLimAng();
- } // if(limit)
- } // if angular limit or powered
-}
-
-///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
-///If no axis is provided, it uses the default axis for this constraint.
-void btSliderConstraint::setParam(int num, btScalar value, int axis)
-{
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- if (axis < 1)
- {
- m_softnessLimLin = value;
- m_flags |= BT_SLIDER_FLAGS_ERP_LIMLIN;
- }
- else if (axis < 3)
- {
- m_softnessOrthoLin = value;
- m_flags |= BT_SLIDER_FLAGS_ERP_ORTLIN;
- }
- else if (axis == 3)
- {
- m_softnessLimAng = value;
- m_flags |= BT_SLIDER_FLAGS_ERP_LIMANG;
- }
- else if (axis < 6)
- {
- m_softnessOrthoAng = value;
- m_flags |= BT_SLIDER_FLAGS_ERP_ORTANG;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- case BT_CONSTRAINT_CFM:
- if (axis < 1)
- {
- m_cfmDirLin = value;
- m_flags |= BT_SLIDER_FLAGS_CFM_DIRLIN;
- }
- else if (axis == 3)
- {
- m_cfmDirAng = value;
- m_flags |= BT_SLIDER_FLAGS_CFM_DIRANG;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- case BT_CONSTRAINT_STOP_CFM:
- if (axis < 1)
- {
- m_cfmLimLin = value;
- m_flags |= BT_SLIDER_FLAGS_CFM_LIMLIN;
- }
- else if (axis < 3)
- {
- m_cfmOrthoLin = value;
- m_flags |= BT_SLIDER_FLAGS_CFM_ORTLIN;
- }
- else if (axis == 3)
- {
- m_cfmLimAng = value;
- m_flags |= BT_SLIDER_FLAGS_CFM_LIMANG;
- }
- else if (axis < 6)
- {
- m_cfmOrthoAng = value;
- m_flags |= BT_SLIDER_FLAGS_CFM_ORTANG;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- }
-}
-
-///return the local value of parameter
-btScalar btSliderConstraint::getParam(int num, int axis) const
-{
- btScalar retVal(SIMD_INFINITY);
- switch (num)
- {
- case BT_CONSTRAINT_STOP_ERP:
- if (axis < 1)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_ERP_LIMLIN);
- retVal = m_softnessLimLin;
- }
- else if (axis < 3)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_ERP_ORTLIN);
- retVal = m_softnessOrthoLin;
- }
- else if (axis == 3)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_ERP_LIMANG);
- retVal = m_softnessLimAng;
- }
- else if (axis < 6)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_ERP_ORTANG);
- retVal = m_softnessOrthoAng;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- case BT_CONSTRAINT_CFM:
- if (axis < 1)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_CFM_DIRLIN);
- retVal = m_cfmDirLin;
- }
- else if (axis == 3)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_CFM_DIRANG);
- retVal = m_cfmDirAng;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- case BT_CONSTRAINT_STOP_CFM:
- if (axis < 1)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_CFM_LIMLIN);
- retVal = m_cfmLimLin;
- }
- else if (axis < 3)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_CFM_ORTLIN);
- retVal = m_cfmOrthoLin;
- }
- else if (axis == 3)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_CFM_LIMANG);
- retVal = m_cfmLimAng;
- }
- else if (axis < 6)
- {
- btAssertConstrParams(m_flags & BT_SLIDER_FLAGS_CFM_ORTANG);
- retVal = m_cfmOrthoAng;
- }
- else
- {
- btAssertConstrParams(0);
- }
- break;
- }
- return retVal;
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h
deleted file mode 100644
index 75ca34e978..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSliderConstraint.h
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-Added by Roman Ponomarev (rponom@gmail.com)
-April 04, 2008
-
-TODO:
- - add clamping od accumulated impulse to improve stability
- - add conversion for ODE constraint solver
-*/
-
-#ifndef BT_SLIDER_CONSTRAINT_H
-#define BT_SLIDER_CONSTRAINT_H
-
-#include "LinearMath/btScalar.h" //for BT_USE_DOUBLE_PRECISION
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btSliderConstraintData2 btSliderConstraintDoubleData
-#define btSliderConstraintDataName "btSliderConstraintDoubleData"
-#else
-#define btSliderConstraintData2 btSliderConstraintData
-#define btSliderConstraintDataName "btSliderConstraintData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-#include "btTypedConstraint.h"
-
-class btRigidBody;
-
-#define SLIDER_CONSTRAINT_DEF_SOFTNESS (btScalar(1.0))
-#define SLIDER_CONSTRAINT_DEF_DAMPING (btScalar(1.0))
-#define SLIDER_CONSTRAINT_DEF_RESTITUTION (btScalar(0.7))
-#define SLIDER_CONSTRAINT_DEF_CFM (btScalar(0.f))
-
-enum btSliderFlags
-{
- BT_SLIDER_FLAGS_CFM_DIRLIN = (1 << 0),
- BT_SLIDER_FLAGS_ERP_DIRLIN = (1 << 1),
- BT_SLIDER_FLAGS_CFM_DIRANG = (1 << 2),
- BT_SLIDER_FLAGS_ERP_DIRANG = (1 << 3),
- BT_SLIDER_FLAGS_CFM_ORTLIN = (1 << 4),
- BT_SLIDER_FLAGS_ERP_ORTLIN = (1 << 5),
- BT_SLIDER_FLAGS_CFM_ORTANG = (1 << 6),
- BT_SLIDER_FLAGS_ERP_ORTANG = (1 << 7),
- BT_SLIDER_FLAGS_CFM_LIMLIN = (1 << 8),
- BT_SLIDER_FLAGS_ERP_LIMLIN = (1 << 9),
- BT_SLIDER_FLAGS_CFM_LIMANG = (1 << 10),
- BT_SLIDER_FLAGS_ERP_LIMANG = (1 << 11)
-};
-
-ATTRIBUTE_ALIGNED16(class)
-btSliderConstraint : public btTypedConstraint
-{
-protected:
- ///for backwards compatibility during the transition to 'getInfo/getInfo2'
- bool m_useSolveConstraintObsolete;
- bool m_useOffsetForConstraintFrame;
- btTransform m_frameInA;
- btTransform m_frameInB;
- // use frameA fo define limits, if true
- bool m_useLinearReferenceFrameA;
- // linear limits
- btScalar m_lowerLinLimit;
- btScalar m_upperLinLimit;
- // angular limits
- btScalar m_lowerAngLimit;
- btScalar m_upperAngLimit;
- // softness, restitution and damping for different cases
- // DirLin - moving inside linear limits
- // LimLin - hitting linear limit
- // DirAng - moving inside angular limits
- // LimAng - hitting angular limit
- // OrthoLin, OrthoAng - against constraint axis
- btScalar m_softnessDirLin;
- btScalar m_restitutionDirLin;
- btScalar m_dampingDirLin;
- btScalar m_cfmDirLin;
-
- btScalar m_softnessDirAng;
- btScalar m_restitutionDirAng;
- btScalar m_dampingDirAng;
- btScalar m_cfmDirAng;
-
- btScalar m_softnessLimLin;
- btScalar m_restitutionLimLin;
- btScalar m_dampingLimLin;
- btScalar m_cfmLimLin;
-
- btScalar m_softnessLimAng;
- btScalar m_restitutionLimAng;
- btScalar m_dampingLimAng;
- btScalar m_cfmLimAng;
-
- btScalar m_softnessOrthoLin;
- btScalar m_restitutionOrthoLin;
- btScalar m_dampingOrthoLin;
- btScalar m_cfmOrthoLin;
-
- btScalar m_softnessOrthoAng;
- btScalar m_restitutionOrthoAng;
- btScalar m_dampingOrthoAng;
- btScalar m_cfmOrthoAng;
-
- // for interlal use
- bool m_solveLinLim;
- bool m_solveAngLim;
-
- int m_flags;
-
- btJacobianEntry m_jacLin[3];
- btScalar m_jacLinDiagABInv[3];
-
- btJacobianEntry m_jacAng[3];
-
- btScalar m_timeStep;
- btTransform m_calculatedTransformA;
- btTransform m_calculatedTransformB;
-
- btVector3 m_sliderAxis;
- btVector3 m_realPivotAInW;
- btVector3 m_realPivotBInW;
- btVector3 m_projPivotInW;
- btVector3 m_delta;
- btVector3 m_depth;
- btVector3 m_relPosA;
- btVector3 m_relPosB;
-
- btScalar m_linPos;
- btScalar m_angPos;
-
- btScalar m_angDepth;
- btScalar m_kAngle;
-
- bool m_poweredLinMotor;
- btScalar m_targetLinMotorVelocity;
- btScalar m_maxLinMotorForce;
- btScalar m_accumulatedLinMotorImpulse;
-
- bool m_poweredAngMotor;
- btScalar m_targetAngMotorVelocity;
- btScalar m_maxAngMotorForce;
- btScalar m_accumulatedAngMotorImpulse;
-
- //------------------------
- void initParams();
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- // constructors
- btSliderConstraint(btRigidBody & rbA, btRigidBody & rbB, const btTransform& frameInA, const btTransform& frameInB, bool useLinearReferenceFrameA);
- btSliderConstraint(btRigidBody & rbB, const btTransform& frameInB, bool useLinearReferenceFrameA);
-
- // overrides
-
- virtual void getInfo1(btConstraintInfo1 * info);
-
- void getInfo1NonVirtual(btConstraintInfo1 * info);
-
- virtual void getInfo2(btConstraintInfo2 * info);
-
- void getInfo2NonVirtual(btConstraintInfo2 * info, const btTransform& transA, const btTransform& transB, const btVector3& linVelA, const btVector3& linVelB, btScalar rbAinvMass, btScalar rbBinvMass);
-
- // access
- const btRigidBody& getRigidBodyA() const { return m_rbA; }
- const btRigidBody& getRigidBodyB() const { return m_rbB; }
- const btTransform& getCalculatedTransformA() const { return m_calculatedTransformA; }
- const btTransform& getCalculatedTransformB() const { return m_calculatedTransformB; }
- const btTransform& getFrameOffsetA() const { return m_frameInA; }
- const btTransform& getFrameOffsetB() const { return m_frameInB; }
- btTransform& getFrameOffsetA() { return m_frameInA; }
- btTransform& getFrameOffsetB() { return m_frameInB; }
- btScalar getLowerLinLimit() { return m_lowerLinLimit; }
- void setLowerLinLimit(btScalar lowerLimit) { m_lowerLinLimit = lowerLimit; }
- btScalar getUpperLinLimit() { return m_upperLinLimit; }
- void setUpperLinLimit(btScalar upperLimit) { m_upperLinLimit = upperLimit; }
- btScalar getLowerAngLimit() { return m_lowerAngLimit; }
- void setLowerAngLimit(btScalar lowerLimit) { m_lowerAngLimit = btNormalizeAngle(lowerLimit); }
- btScalar getUpperAngLimit() { return m_upperAngLimit; }
- void setUpperAngLimit(btScalar upperLimit) { m_upperAngLimit = btNormalizeAngle(upperLimit); }
- bool getUseLinearReferenceFrameA() { return m_useLinearReferenceFrameA; }
- btScalar getSoftnessDirLin() { return m_softnessDirLin; }
- btScalar getRestitutionDirLin() { return m_restitutionDirLin; }
- btScalar getDampingDirLin() { return m_dampingDirLin; }
- btScalar getSoftnessDirAng() { return m_softnessDirAng; }
- btScalar getRestitutionDirAng() { return m_restitutionDirAng; }
- btScalar getDampingDirAng() { return m_dampingDirAng; }
- btScalar getSoftnessLimLin() { return m_softnessLimLin; }
- btScalar getRestitutionLimLin() { return m_restitutionLimLin; }
- btScalar getDampingLimLin() { return m_dampingLimLin; }
- btScalar getSoftnessLimAng() { return m_softnessLimAng; }
- btScalar getRestitutionLimAng() { return m_restitutionLimAng; }
- btScalar getDampingLimAng() { return m_dampingLimAng; }
- btScalar getSoftnessOrthoLin() { return m_softnessOrthoLin; }
- btScalar getRestitutionOrthoLin() { return m_restitutionOrthoLin; }
- btScalar getDampingOrthoLin() { return m_dampingOrthoLin; }
- btScalar getSoftnessOrthoAng() { return m_softnessOrthoAng; }
- btScalar getRestitutionOrthoAng() { return m_restitutionOrthoAng; }
- btScalar getDampingOrthoAng() { return m_dampingOrthoAng; }
- void setSoftnessDirLin(btScalar softnessDirLin) { m_softnessDirLin = softnessDirLin; }
- void setRestitutionDirLin(btScalar restitutionDirLin) { m_restitutionDirLin = restitutionDirLin; }
- void setDampingDirLin(btScalar dampingDirLin) { m_dampingDirLin = dampingDirLin; }
- void setSoftnessDirAng(btScalar softnessDirAng) { m_softnessDirAng = softnessDirAng; }
- void setRestitutionDirAng(btScalar restitutionDirAng) { m_restitutionDirAng = restitutionDirAng; }
- void setDampingDirAng(btScalar dampingDirAng) { m_dampingDirAng = dampingDirAng; }
- void setSoftnessLimLin(btScalar softnessLimLin) { m_softnessLimLin = softnessLimLin; }
- void setRestitutionLimLin(btScalar restitutionLimLin) { m_restitutionLimLin = restitutionLimLin; }
- void setDampingLimLin(btScalar dampingLimLin) { m_dampingLimLin = dampingLimLin; }
- void setSoftnessLimAng(btScalar softnessLimAng) { m_softnessLimAng = softnessLimAng; }
- void setRestitutionLimAng(btScalar restitutionLimAng) { m_restitutionLimAng = restitutionLimAng; }
- void setDampingLimAng(btScalar dampingLimAng) { m_dampingLimAng = dampingLimAng; }
- void setSoftnessOrthoLin(btScalar softnessOrthoLin) { m_softnessOrthoLin = softnessOrthoLin; }
- void setRestitutionOrthoLin(btScalar restitutionOrthoLin) { m_restitutionOrthoLin = restitutionOrthoLin; }
- void setDampingOrthoLin(btScalar dampingOrthoLin) { m_dampingOrthoLin = dampingOrthoLin; }
- void setSoftnessOrthoAng(btScalar softnessOrthoAng) { m_softnessOrthoAng = softnessOrthoAng; }
- void setRestitutionOrthoAng(btScalar restitutionOrthoAng) { m_restitutionOrthoAng = restitutionOrthoAng; }
- void setDampingOrthoAng(btScalar dampingOrthoAng) { m_dampingOrthoAng = dampingOrthoAng; }
- void setPoweredLinMotor(bool onOff) { m_poweredLinMotor = onOff; }
- bool getPoweredLinMotor() { return m_poweredLinMotor; }
- void setTargetLinMotorVelocity(btScalar targetLinMotorVelocity) { m_targetLinMotorVelocity = targetLinMotorVelocity; }
- btScalar getTargetLinMotorVelocity() { return m_targetLinMotorVelocity; }
- void setMaxLinMotorForce(btScalar maxLinMotorForce) { m_maxLinMotorForce = maxLinMotorForce; }
- btScalar getMaxLinMotorForce() { return m_maxLinMotorForce; }
- void setPoweredAngMotor(bool onOff) { m_poweredAngMotor = onOff; }
- bool getPoweredAngMotor() { return m_poweredAngMotor; }
- void setTargetAngMotorVelocity(btScalar targetAngMotorVelocity) { m_targetAngMotorVelocity = targetAngMotorVelocity; }
- btScalar getTargetAngMotorVelocity() { return m_targetAngMotorVelocity; }
- void setMaxAngMotorForce(btScalar maxAngMotorForce) { m_maxAngMotorForce = maxAngMotorForce; }
- btScalar getMaxAngMotorForce() { return m_maxAngMotorForce; }
-
- btScalar getLinearPos() const { return m_linPos; }
- btScalar getAngularPos() const { return m_angPos; }
-
- // access for ODE solver
- bool getSolveLinLimit() { return m_solveLinLim; }
- btScalar getLinDepth() { return m_depth[0]; }
- bool getSolveAngLimit() { return m_solveAngLim; }
- btScalar getAngDepth() { return m_angDepth; }
- // shared code used by ODE solver
- void calculateTransforms(const btTransform& transA, const btTransform& transB);
- void testLinLimits();
- void testAngLimits();
- // access for PE Solver
- btVector3 getAncorInA();
- btVector3 getAncorInB();
- // access for UseFrameOffset
- bool getUseFrameOffset() { return m_useOffsetForConstraintFrame; }
- void setUseFrameOffset(bool frameOffsetOnOff) { m_useOffsetForConstraintFrame = frameOffsetOnOff; }
-
- void setFrames(const btTransform& frameA, const btTransform& frameB)
- {
- m_frameInA = frameA;
- m_frameInB = frameB;
- calculateTransforms(m_rbA.getCenterOfMassTransform(), m_rbB.getCenterOfMassTransform());
- buildJacobian();
- }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1);
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const;
-
- virtual int getFlags() const
- {
- return m_flags;
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-
-struct btSliderConstraintData
-{
- btTypedConstraintData m_typeConstraintData;
- btTransformFloatData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformFloatData m_rbBFrame;
-
- float m_linearUpperLimit;
- float m_linearLowerLimit;
-
- float m_angularUpperLimit;
- float m_angularLowerLimit;
-
- int m_useLinearReferenceFrameA;
- int m_useOffsetForConstraintFrame;
-};
-
-struct btSliderConstraintDoubleData
-{
- btTypedConstraintDoubleData m_typeConstraintData;
- btTransformDoubleData m_rbAFrame; // constraint axii. Assumes z is hinge axis.
- btTransformDoubleData m_rbBFrame;
-
- double m_linearUpperLimit;
- double m_linearLowerLimit;
-
- double m_angularUpperLimit;
- double m_angularLowerLimit;
-
- int m_useLinearReferenceFrameA;
- int m_useOffsetForConstraintFrame;
-};
-
-SIMD_FORCE_INLINE int btSliderConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btSliderConstraintData2);
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-SIMD_FORCE_INLINE const char* btSliderConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btSliderConstraintData2* sliderData = (btSliderConstraintData2*)dataBuffer;
- btTypedConstraint::serialize(&sliderData->m_typeConstraintData, serializer);
-
- m_frameInA.serialize(sliderData->m_rbAFrame);
- m_frameInB.serialize(sliderData->m_rbBFrame);
-
- sliderData->m_linearUpperLimit = m_upperLinLimit;
- sliderData->m_linearLowerLimit = m_lowerLinLimit;
-
- sliderData->m_angularUpperLimit = m_upperAngLimit;
- sliderData->m_angularLowerLimit = m_lowerAngLimit;
-
- sliderData->m_useLinearReferenceFrameA = m_useLinearReferenceFrameA;
- sliderData->m_useOffsetForConstraintFrame = m_useOffsetForConstraintFrame;
-
- return btSliderConstraintDataName;
-}
-
-#endif //BT_SLIDER_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp
deleted file mode 100644
index 1ea20edcb2..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp
+++ /dev/null
@@ -1,239 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSolve2LinearConstraint.h"
-
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btVector3.h"
-#include "btJacobianEntry.h"
-
-void btSolve2LinearConstraint::resolveUnilateralPairConstraint(
- btRigidBody* body1,
- btRigidBody* body2,
-
- const btMatrix3x3& world2A,
- const btMatrix3x3& world2B,
-
- const btVector3& invInertiaADiag,
- const btScalar invMassA,
- const btVector3& linvelA, const btVector3& angvelA,
- const btVector3& rel_posA1,
- const btVector3& invInertiaBDiag,
- const btScalar invMassB,
- const btVector3& linvelB, const btVector3& angvelB,
- const btVector3& rel_posA2,
-
- btScalar depthA, const btVector3& normalA,
- const btVector3& rel_posB1, const btVector3& rel_posB2,
- btScalar depthB, const btVector3& normalB,
- btScalar& imp0, btScalar& imp1)
-{
- (void)linvelA;
- (void)linvelB;
- (void)angvelB;
- (void)angvelA;
-
- imp0 = btScalar(0.);
- imp1 = btScalar(0.);
-
- btScalar len = btFabs(normalA.length()) - btScalar(1.);
- if (btFabs(len) >= SIMD_EPSILON)
- return;
-
- btAssert(len < SIMD_EPSILON);
-
- //this jacobian entry could be re-used for all iterations
- btJacobianEntry jacA(world2A, world2B, rel_posA1, rel_posA2, normalA, invInertiaADiag, invMassA,
- invInertiaBDiag, invMassB);
- btJacobianEntry jacB(world2A, world2B, rel_posB1, rel_posB2, normalB, invInertiaADiag, invMassA,
- invInertiaBDiag, invMassB);
-
- //const btScalar vel0 = jacA.getRelativeVelocity(linvelA,angvelA,linvelB,angvelB);
- //const btScalar vel1 = jacB.getRelativeVelocity(linvelA,angvelA,linvelB,angvelB);
-
- const btScalar vel0 = normalA.dot(body1->getVelocityInLocalPoint(rel_posA1) - body2->getVelocityInLocalPoint(rel_posA1));
- const btScalar vel1 = normalB.dot(body1->getVelocityInLocalPoint(rel_posB1) - body2->getVelocityInLocalPoint(rel_posB1));
-
- // btScalar penetrationImpulse = (depth*contactTau*timeCorrection) * massTerm;//jacDiagABInv
- btScalar massTerm = btScalar(1.) / (invMassA + invMassB);
-
- // calculate rhs (or error) terms
- const btScalar dv0 = depthA * m_tau * massTerm - vel0 * m_damping;
- const btScalar dv1 = depthB * m_tau * massTerm - vel1 * m_damping;
-
- // dC/dv * dv = -C
-
- // jacobian * impulse = -error
- //
-
- //impulse = jacobianInverse * -error
-
- // inverting 2x2 symmetric system (offdiagonal are equal!)
- //
-
- btScalar nonDiag = jacA.getNonDiagonal(jacB, invMassA, invMassB);
- btScalar invDet = btScalar(1.0) / (jacA.getDiagonal() * jacB.getDiagonal() - nonDiag * nonDiag);
-
- //imp0 = dv0 * jacA.getDiagonal() * invDet + dv1 * -nonDiag * invDet;
- //imp1 = dv1 * jacB.getDiagonal() * invDet + dv0 * - nonDiag * invDet;
-
- imp0 = dv0 * jacA.getDiagonal() * invDet + dv1 * -nonDiag * invDet;
- imp1 = dv1 * jacB.getDiagonal() * invDet + dv0 * -nonDiag * invDet;
-
- //[a b] [d -c]
- //[c d] inverse = (1 / determinant) * [-b a] where determinant is (ad - bc)
-
- //[jA nD] * [imp0] = [dv0]
- //[nD jB] [imp1] [dv1]
-}
-
-void btSolve2LinearConstraint::resolveBilateralPairConstraint(
- btRigidBody* body1,
- btRigidBody* body2,
- const btMatrix3x3& world2A,
- const btMatrix3x3& world2B,
-
- const btVector3& invInertiaADiag,
- const btScalar invMassA,
- const btVector3& linvelA, const btVector3& angvelA,
- const btVector3& rel_posA1,
- const btVector3& invInertiaBDiag,
- const btScalar invMassB,
- const btVector3& linvelB, const btVector3& angvelB,
- const btVector3& rel_posA2,
-
- btScalar depthA, const btVector3& normalA,
- const btVector3& rel_posB1, const btVector3& rel_posB2,
- btScalar depthB, const btVector3& normalB,
- btScalar& imp0, btScalar& imp1)
-{
- (void)linvelA;
- (void)linvelB;
- (void)angvelA;
- (void)angvelB;
-
- imp0 = btScalar(0.);
- imp1 = btScalar(0.);
-
- btScalar len = btFabs(normalA.length()) - btScalar(1.);
- if (btFabs(len) >= SIMD_EPSILON)
- return;
-
- btAssert(len < SIMD_EPSILON);
-
- //this jacobian entry could be re-used for all iterations
- btJacobianEntry jacA(world2A, world2B, rel_posA1, rel_posA2, normalA, invInertiaADiag, invMassA,
- invInertiaBDiag, invMassB);
- btJacobianEntry jacB(world2A, world2B, rel_posB1, rel_posB2, normalB, invInertiaADiag, invMassA,
- invInertiaBDiag, invMassB);
-
- //const btScalar vel0 = jacA.getRelativeVelocity(linvelA,angvelA,linvelB,angvelB);
- //const btScalar vel1 = jacB.getRelativeVelocity(linvelA,angvelA,linvelB,angvelB);
-
- const btScalar vel0 = normalA.dot(body1->getVelocityInLocalPoint(rel_posA1) - body2->getVelocityInLocalPoint(rel_posA1));
- const btScalar vel1 = normalB.dot(body1->getVelocityInLocalPoint(rel_posB1) - body2->getVelocityInLocalPoint(rel_posB1));
-
- // calculate rhs (or error) terms
- const btScalar dv0 = depthA * m_tau - vel0 * m_damping;
- const btScalar dv1 = depthB * m_tau - vel1 * m_damping;
-
- // dC/dv * dv = -C
-
- // jacobian * impulse = -error
- //
-
- //impulse = jacobianInverse * -error
-
- // inverting 2x2 symmetric system (offdiagonal are equal!)
- //
-
- btScalar nonDiag = jacA.getNonDiagonal(jacB, invMassA, invMassB);
- btScalar invDet = btScalar(1.0) / (jacA.getDiagonal() * jacB.getDiagonal() - nonDiag * nonDiag);
-
- //imp0 = dv0 * jacA.getDiagonal() * invDet + dv1 * -nonDiag * invDet;
- //imp1 = dv1 * jacB.getDiagonal() * invDet + dv0 * - nonDiag * invDet;
-
- imp0 = dv0 * jacA.getDiagonal() * invDet + dv1 * -nonDiag * invDet;
- imp1 = dv1 * jacB.getDiagonal() * invDet + dv0 * -nonDiag * invDet;
-
- //[a b] [d -c]
- //[c d] inverse = (1 / determinant) * [-b a] where determinant is (ad - bc)
-
- //[jA nD] * [imp0] = [dv0]
- //[nD jB] [imp1] [dv1]
-
- if (imp0 > btScalar(0.0))
- {
- if (imp1 > btScalar(0.0))
- {
- //both positive
- }
- else
- {
- imp1 = btScalar(0.);
-
- // now imp0>0 imp1<0
- imp0 = dv0 / jacA.getDiagonal();
- if (imp0 > btScalar(0.0))
- {
- }
- else
- {
- imp0 = btScalar(0.);
- }
- }
- }
- else
- {
- imp0 = btScalar(0.);
-
- imp1 = dv1 / jacB.getDiagonal();
- if (imp1 <= btScalar(0.0))
- {
- imp1 = btScalar(0.);
- // now imp0>0 imp1<0
- imp0 = dv0 / jacA.getDiagonal();
- if (imp0 > btScalar(0.0))
- {
- }
- else
- {
- imp0 = btScalar(0.);
- }
- }
- else
- {
- }
- }
-}
-
-/*
-void btSolve2LinearConstraint::resolveAngularConstraint( const btMatrix3x3& invInertiaAWS,
- const btScalar invMassA,
- const btVector3& linvelA,const btVector3& angvelA,
- const btVector3& rel_posA1,
- const btMatrix3x3& invInertiaBWS,
- const btScalar invMassB,
- const btVector3& linvelB,const btVector3& angvelB,
- const btVector3& rel_posA2,
-
- btScalar depthA, const btVector3& normalA,
- const btVector3& rel_posB1,const btVector3& rel_posB2,
- btScalar depthB, const btVector3& normalB,
- btScalar& imp0,btScalar& imp1)
-{
-
-}
-*/
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h
deleted file mode 100644
index fca8ecec81..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOLVE_2LINEAR_CONSTRAINT_H
-#define BT_SOLVE_2LINEAR_CONSTRAINT_H
-
-#include "LinearMath/btMatrix3x3.h"
-#include "LinearMath/btVector3.h"
-
-class btRigidBody;
-
-/// constraint class used for lateral tyre friction.
-class btSolve2LinearConstraint
-{
- btScalar m_tau;
- btScalar m_damping;
-
-public:
- btSolve2LinearConstraint(btScalar tau, btScalar damping)
- {
- m_tau = tau;
- m_damping = damping;
- }
- //
- // solve unilateral constraint (equality, direct method)
- //
- void resolveUnilateralPairConstraint(
- btRigidBody* body0,
- btRigidBody* body1,
-
- const btMatrix3x3& world2A,
- const btMatrix3x3& world2B,
-
- const btVector3& invInertiaADiag,
- const btScalar invMassA,
- const btVector3& linvelA, const btVector3& angvelA,
- const btVector3& rel_posA1,
- const btVector3& invInertiaBDiag,
- const btScalar invMassB,
- const btVector3& linvelB, const btVector3& angvelB,
- const btVector3& rel_posA2,
-
- btScalar depthA, const btVector3& normalA,
- const btVector3& rel_posB1, const btVector3& rel_posB2,
- btScalar depthB, const btVector3& normalB,
- btScalar& imp0, btScalar& imp1);
-
- //
- // solving 2x2 lcp problem (inequality, direct solution )
- //
- void resolveBilateralPairConstraint(
- btRigidBody* body0,
- btRigidBody* body1,
- const btMatrix3x3& world2A,
- const btMatrix3x3& world2B,
-
- const btVector3& invInertiaADiag,
- const btScalar invMassA,
- const btVector3& linvelA, const btVector3& angvelA,
- const btVector3& rel_posA1,
- const btVector3& invInertiaBDiag,
- const btScalar invMassB,
- const btVector3& linvelB, const btVector3& angvelB,
- const btVector3& rel_posA2,
-
- btScalar depthA, const btVector3& normalA,
- const btVector3& rel_posB1, const btVector3& rel_posB2,
- btScalar depthB, const btVector3& normalB,
- btScalar& imp0, btScalar& imp1);
-
- /*
- void resolveAngularConstraint( const btMatrix3x3& invInertiaAWS,
- const btScalar invMassA,
- const btVector3& linvelA,const btVector3& angvelA,
- const btVector3& rel_posA1,
- const btMatrix3x3& invInertiaBWS,
- const btScalar invMassB,
- const btVector3& linvelB,const btVector3& angvelB,
- const btVector3& rel_posA2,
-
- btScalar depthA, const btVector3& normalA,
- const btVector3& rel_posB1,const btVector3& rel_posB2,
- btScalar depthB, const btVector3& normalB,
- btScalar& imp0,btScalar& imp1);
-
-*/
-};
-
-#endif //BT_SOLVE_2LINEAR_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h
deleted file mode 100644
index 409aa8a08c..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverBody.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOLVER_BODY_H
-#define BT_SOLVER_BODY_H
-
-class btRigidBody;
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btMatrix3x3.h"
-
-#include "LinearMath/btAlignedAllocator.h"
-#include "LinearMath/btTransformUtil.h"
-
-///Until we get other contributions, only use SIMD on Windows, when using Visual Studio 2008 or later, and not double precision
-#ifdef BT_USE_SSE
-#define USE_SIMD 1
-#endif //
-
-#ifdef USE_SIMD
-
-struct btSimdScalar
-{
- SIMD_FORCE_INLINE btSimdScalar()
- {
- }
-
- SIMD_FORCE_INLINE btSimdScalar(float fl)
- : m_vec128(_mm_set1_ps(fl))
- {
- }
-
- SIMD_FORCE_INLINE btSimdScalar(__m128 v128)
- : m_vec128(v128)
- {
- }
- union {
- __m128 m_vec128;
- float m_floats[4];
- int m_ints[4];
- btScalar m_unusedPadding;
- };
- SIMD_FORCE_INLINE __m128 get128()
- {
- return m_vec128;
- }
-
- SIMD_FORCE_INLINE const __m128 get128() const
- {
- return m_vec128;
- }
-
- SIMD_FORCE_INLINE void set128(__m128 v128)
- {
- m_vec128 = v128;
- }
-
- SIMD_FORCE_INLINE operator __m128()
- {
- return m_vec128;
- }
- SIMD_FORCE_INLINE operator const __m128() const
- {
- return m_vec128;
- }
-
- SIMD_FORCE_INLINE operator float() const
- {
- return m_floats[0];
- }
-};
-
-///@brief Return the elementwise product of two btSimdScalar
-SIMD_FORCE_INLINE btSimdScalar
-operator*(const btSimdScalar& v1, const btSimdScalar& v2)
-{
- return btSimdScalar(_mm_mul_ps(v1.get128(), v2.get128()));
-}
-
-///@brief Return the elementwise product of two btSimdScalar
-SIMD_FORCE_INLINE btSimdScalar
-operator+(const btSimdScalar& v1, const btSimdScalar& v2)
-{
- return btSimdScalar(_mm_add_ps(v1.get128(), v2.get128()));
-}
-
-#else
-#define btSimdScalar btScalar
-#endif
-
-///The btSolverBody is an internal datastructure for the constraint solver. Only necessary data is packed to increase cache coherence/performance.
-ATTRIBUTE_ALIGNED16(struct)
-btSolverBody
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
- btTransform m_worldTransform;
- btVector3 m_deltaLinearVelocity;
- btVector3 m_deltaAngularVelocity;
- btVector3 m_angularFactor;
- btVector3 m_linearFactor;
- btVector3 m_invMass;
- btVector3 m_pushVelocity;
- btVector3 m_turnVelocity;
- btVector3 m_linearVelocity;
- btVector3 m_angularVelocity;
- btVector3 m_externalForceImpulse;
- btVector3 m_externalTorqueImpulse;
-
- btRigidBody* m_originalBody;
- void setWorldTransform(const btTransform& worldTransform)
- {
- m_worldTransform = worldTransform;
- }
-
- const btTransform& getWorldTransform() const
- {
- return m_worldTransform;
- }
-
- SIMD_FORCE_INLINE void getVelocityInLocalPointNoDelta(const btVector3& rel_pos, btVector3& velocity) const
- {
- if (m_originalBody)
- velocity = m_linearVelocity + m_externalForceImpulse + (m_angularVelocity + m_externalTorqueImpulse).cross(rel_pos);
- else
- velocity.setValue(0, 0, 0);
- }
-
- SIMD_FORCE_INLINE void getVelocityInLocalPointObsolete(const btVector3& rel_pos, btVector3& velocity) const
- {
- if (m_originalBody)
- velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos);
- else
- velocity.setValue(0, 0, 0);
- }
-
- SIMD_FORCE_INLINE void getAngularVelocity(btVector3 & angVel) const
- {
- if (m_originalBody)
- angVel = m_angularVelocity + m_deltaAngularVelocity;
- else
- angVel.setValue(0, 0, 0);
- }
-
- //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position
- SIMD_FORCE_INLINE void applyImpulse(const btVector3& linearComponent, const btVector3& angularComponent, const btScalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- SIMD_FORCE_INLINE void internalApplyPushImpulse(const btVector3& linearComponent, const btVector3& angularComponent, btScalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_pushVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_turnVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- const btVector3& getDeltaLinearVelocity() const
- {
- return m_deltaLinearVelocity;
- }
-
- const btVector3& getDeltaAngularVelocity() const
- {
- return m_deltaAngularVelocity;
- }
-
- const btVector3& getPushVelocity() const
- {
- return m_pushVelocity;
- }
-
- const btVector3& getTurnVelocity() const
- {
- return m_turnVelocity;
- }
-
- ////////////////////////////////////////////////
- ///some internal methods, don't use them
-
- btVector3& internalGetDeltaLinearVelocity()
- {
- return m_deltaLinearVelocity;
- }
-
- btVector3& internalGetDeltaAngularVelocity()
- {
- return m_deltaAngularVelocity;
- }
-
- const btVector3& internalGetAngularFactor() const
- {
- return m_angularFactor;
- }
-
- const btVector3& internalGetInvMass() const
- {
- return m_invMass;
- }
-
- void internalSetInvMass(const btVector3& invMass)
- {
- m_invMass = invMass;
- }
-
- btVector3& internalGetPushVelocity()
- {
- return m_pushVelocity;
- }
-
- btVector3& internalGetTurnVelocity()
- {
- return m_turnVelocity;
- }
-
- SIMD_FORCE_INLINE void internalGetVelocityInLocalPointObsolete(const btVector3& rel_pos, btVector3& velocity) const
- {
- velocity = m_linearVelocity + m_deltaLinearVelocity + (m_angularVelocity + m_deltaAngularVelocity).cross(rel_pos);
- }
-
- SIMD_FORCE_INLINE void internalGetAngularVelocity(btVector3 & angVel) const
- {
- angVel = m_angularVelocity + m_deltaAngularVelocity;
- }
-
- //Optimization for the iterative solver: avoid calculating constant terms involving inertia, normal, relative position
- SIMD_FORCE_INLINE void internalApplyImpulse(const btVector3& linearComponent, const btVector3& angularComponent, const btScalar impulseMagnitude)
- {
- if (m_originalBody)
- {
- m_deltaLinearVelocity += linearComponent * impulseMagnitude * m_linearFactor;
- m_deltaAngularVelocity += angularComponent * (impulseMagnitude * m_angularFactor);
- }
- }
-
- void writebackVelocity()
- {
- if (m_originalBody)
- {
- m_linearVelocity += m_deltaLinearVelocity;
- m_angularVelocity += m_deltaAngularVelocity;
-
- //m_originalBody->setCompanionId(-1);
- }
- }
-
- void writebackVelocityAndTransform(btScalar timeStep, btScalar splitImpulseTurnErp)
- {
- (void)timeStep;
- if (m_originalBody)
- {
- m_linearVelocity += m_deltaLinearVelocity;
- m_angularVelocity += m_deltaAngularVelocity;
-
- //correct the position/orientation based on push/turn recovery
- btTransform newTransform;
- if (m_pushVelocity[0] != 0.f || m_pushVelocity[1] != 0 || m_pushVelocity[2] != 0 || m_turnVelocity[0] != 0.f || m_turnVelocity[1] != 0 || m_turnVelocity[2] != 0)
- {
- // btQuaternion orn = m_worldTransform.getRotation();
- btTransformUtil::integrateTransform(m_worldTransform, m_pushVelocity, m_turnVelocity * splitImpulseTurnErp, timeStep, newTransform);
- m_worldTransform = newTransform;
- }
- //m_worldTransform.setRotation(orn);
- //m_originalBody->setCompanionId(-1);
- }
- }
-};
-
-#endif //BT_SOLVER_BODY_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h
deleted file mode 100644
index c7938df867..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btSolverConstraint.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOLVER_CONSTRAINT_H
-#define BT_SOLVER_CONSTRAINT_H
-
-class btRigidBody;
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "btJacobianEntry.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-//#define NO_FRICTION_TANGENTIALS 1
-#include "btSolverBody.h"
-
-///1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and friction constraints.
-ATTRIBUTE_ALIGNED16(struct)
-btSolverConstraint
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btVector3 m_relpos1CrossNormal;
- btVector3 m_contactNormal1;
-
- btVector3 m_relpos2CrossNormal;
- btVector3 m_contactNormal2; //usually m_contactNormal2 == -m_contactNormal1, but not always
-
- btVector3 m_angularComponentA;
- btVector3 m_angularComponentB;
-
- mutable btSimdScalar m_appliedPushImpulse;
- mutable btSimdScalar m_appliedImpulse;
-
- btScalar m_friction;
- btScalar m_jacDiagABInv;
- btScalar m_rhs;
- btScalar m_cfm;
-
- btScalar m_lowerLimit;
- btScalar m_upperLimit;
- btScalar m_rhsPenetration;
- union {
- void* m_originalContactPoint;
- btScalar m_unusedPadding4;
- int m_numRowsForNonContactConstraint;
- };
-
- int m_overrideNumSolverIterations;
- int m_frictionIndex;
- int m_solverBodyIdA;
- int m_solverBodyIdB;
-
- enum btSolverConstraintType
- {
- BT_SOLVER_CONTACT_1D = 0,
- BT_SOLVER_FRICTION_1D
- };
-};
-
-typedef btAlignedObjectArray<btSolverConstraint> btConstraintArray;
-
-#endif //BT_SOLVER_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp
deleted file mode 100644
index ebe679c449..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.cpp
+++ /dev/null
@@ -1,214 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btTypedConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btSerializer.h"
-
-#define DEFAULT_DEBUGDRAW_SIZE btScalar(0.05f)
-
-btTypedConstraint::btTypedConstraint(btTypedConstraintType type, btRigidBody& rbA)
- : btTypedObject(type),
- m_userConstraintType(-1),
- m_userConstraintPtr((void*)-1),
- m_breakingImpulseThreshold(SIMD_INFINITY),
- m_isEnabled(true),
- m_needsFeedback(false),
- m_overrideNumSolverIterations(-1),
- m_rbA(rbA),
- m_rbB(getFixedBody()),
- m_appliedImpulse(btScalar(0.)),
- m_dbgDrawSize(DEFAULT_DEBUGDRAW_SIZE),
- m_jointFeedback(0)
-{
-}
-
-btTypedConstraint::btTypedConstraint(btTypedConstraintType type, btRigidBody& rbA, btRigidBody& rbB)
- : btTypedObject(type),
- m_userConstraintType(-1),
- m_userConstraintPtr((void*)-1),
- m_breakingImpulseThreshold(SIMD_INFINITY),
- m_isEnabled(true),
- m_needsFeedback(false),
- m_overrideNumSolverIterations(-1),
- m_rbA(rbA),
- m_rbB(rbB),
- m_appliedImpulse(btScalar(0.)),
- m_dbgDrawSize(DEFAULT_DEBUGDRAW_SIZE),
- m_jointFeedback(0)
-{
-}
-
-btScalar btTypedConstraint::getMotorFactor(btScalar pos, btScalar lowLim, btScalar uppLim, btScalar vel, btScalar timeFact)
-{
- if (lowLim > uppLim)
- {
- return btScalar(1.0f);
- }
- else if (lowLim == uppLim)
- {
- return btScalar(0.0f);
- }
- btScalar lim_fact = btScalar(1.0f);
- btScalar delta_max = vel / timeFact;
- if (delta_max < btScalar(0.0f))
- {
- if ((pos >= lowLim) && (pos < (lowLim - delta_max)))
- {
- lim_fact = (lowLim - pos) / delta_max;
- }
- else if (pos < lowLim)
- {
- lim_fact = btScalar(0.0f);
- }
- else
- {
- lim_fact = btScalar(1.0f);
- }
- }
- else if (delta_max > btScalar(0.0f))
- {
- if ((pos <= uppLim) && (pos > (uppLim - delta_max)))
- {
- lim_fact = (uppLim - pos) / delta_max;
- }
- else if (pos > uppLim)
- {
- lim_fact = btScalar(0.0f);
- }
- else
- {
- lim_fact = btScalar(1.0f);
- }
- }
- else
- {
- lim_fact = btScalar(0.0f);
- }
- return lim_fact;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btTypedConstraint::serialize(void* dataBuffer, btSerializer* serializer) const
-{
- btTypedConstraintData2* tcd = (btTypedConstraintData2*)dataBuffer;
-
- tcd->m_rbA = (btRigidBodyData*)serializer->getUniquePointer(&m_rbA);
- tcd->m_rbB = (btRigidBodyData*)serializer->getUniquePointer(&m_rbB);
- char* name = (char*)serializer->findNameForPointer(this);
- tcd->m_name = (char*)serializer->getUniquePointer(name);
- if (tcd->m_name)
- {
- serializer->serializeName(name);
- }
-
- tcd->m_objectType = m_objectType;
- tcd->m_needsFeedback = m_needsFeedback;
- tcd->m_overrideNumSolverIterations = m_overrideNumSolverIterations;
- tcd->m_breakingImpulseThreshold = m_breakingImpulseThreshold;
- tcd->m_isEnabled = m_isEnabled ? 1 : 0;
-
- tcd->m_userConstraintId = m_userConstraintId;
- tcd->m_userConstraintType = m_userConstraintType;
-
- tcd->m_appliedImpulse = m_appliedImpulse;
- tcd->m_dbgDrawSize = m_dbgDrawSize;
-
- tcd->m_disableCollisionsBetweenLinkedBodies = false;
-
- int i;
- for (i = 0; i < m_rbA.getNumConstraintRefs(); i++)
- if (m_rbA.getConstraintRef(i) == this)
- tcd->m_disableCollisionsBetweenLinkedBodies = true;
- for (i = 0; i < m_rbB.getNumConstraintRefs(); i++)
- if (m_rbB.getConstraintRef(i) == this)
- tcd->m_disableCollisionsBetweenLinkedBodies = true;
-
- return btTypedConstraintDataName;
-}
-
-btRigidBody& btTypedConstraint::getFixedBody()
-{
- static btRigidBody s_fixed(0, 0, 0);
- s_fixed.setMassProps(btScalar(0.), btVector3(btScalar(0.), btScalar(0.), btScalar(0.)));
- return s_fixed;
-}
-
-void btAngularLimit::set(btScalar low, btScalar high, btScalar _softness, btScalar _biasFactor, btScalar _relaxationFactor)
-{
- m_halfRange = (high - low) / 2.0f;
- m_center = btNormalizeAngle(low + m_halfRange);
- m_softness = _softness;
- m_biasFactor = _biasFactor;
- m_relaxationFactor = _relaxationFactor;
-}
-
-void btAngularLimit::test(const btScalar angle)
-{
- m_correction = 0.0f;
- m_sign = 0.0f;
- m_solveLimit = false;
-
- if (m_halfRange >= 0.0f)
- {
- btScalar deviation = btNormalizeAngle(angle - m_center);
- if (deviation < -m_halfRange)
- {
- m_solveLimit = true;
- m_correction = -(deviation + m_halfRange);
- m_sign = +1.0f;
- }
- else if (deviation > m_halfRange)
- {
- m_solveLimit = true;
- m_correction = m_halfRange - deviation;
- m_sign = -1.0f;
- }
- }
-}
-
-btScalar btAngularLimit::getError() const
-{
- return m_correction * m_sign;
-}
-
-void btAngularLimit::fit(btScalar& angle) const
-{
- if (m_halfRange > 0.0f)
- {
- btScalar relativeAngle = btNormalizeAngle(angle - m_center);
- if (!btEqual(relativeAngle, m_halfRange))
- {
- if (relativeAngle > 0.0f)
- {
- angle = getHigh();
- }
- else
- {
- angle = getLow();
- }
- }
- }
-}
-
-btScalar btAngularLimit::getLow() const
-{
- return btNormalizeAngle(m_center - m_halfRange);
-}
-
-btScalar btAngularLimit::getHigh() const
-{
- return btNormalizeAngle(m_center + m_halfRange);
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h
deleted file mode 100644
index d30f3dee5c..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btTypedConstraint.h
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2010 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TYPED_CONSTRAINT_H
-#define BT_TYPED_CONSTRAINT_H
-
-#include "LinearMath/btScalar.h"
-#include "btSolverConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btTypedConstraintData2 btTypedConstraintDoubleData
-#define btTypedConstraintDataName "btTypedConstraintDoubleData"
-#else
-#define btTypedConstraintData2 btTypedConstraintFloatData
-#define btTypedConstraintDataName "btTypedConstraintFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-class btSerializer;
-
-//Don't change any of the existing enum values, so add enum types at the end for serialization compatibility
-enum btTypedConstraintType
-{
- POINT2POINT_CONSTRAINT_TYPE = 3,
- HINGE_CONSTRAINT_TYPE,
- CONETWIST_CONSTRAINT_TYPE,
- D6_CONSTRAINT_TYPE,
- SLIDER_CONSTRAINT_TYPE,
- CONTACT_CONSTRAINT_TYPE,
- D6_SPRING_CONSTRAINT_TYPE,
- GEAR_CONSTRAINT_TYPE,
- FIXED_CONSTRAINT_TYPE,
- D6_SPRING_2_CONSTRAINT_TYPE,
- MAX_CONSTRAINT_TYPE
-};
-
-enum btConstraintParams
-{
- BT_CONSTRAINT_ERP = 1,
- BT_CONSTRAINT_STOP_ERP,
- BT_CONSTRAINT_CFM,
- BT_CONSTRAINT_STOP_CFM
-};
-
-#if 1
-#define btAssertConstrParams(_par) btAssert(_par)
-#else
-#define btAssertConstrParams(_par)
-#endif
-
-ATTRIBUTE_ALIGNED16(struct)
-btJointFeedback
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
- btVector3 m_appliedForceBodyA;
- btVector3 m_appliedTorqueBodyA;
- btVector3 m_appliedForceBodyB;
- btVector3 m_appliedTorqueBodyB;
-};
-
-///TypedConstraint is the baseclass for Bullet constraints and vehicles
-ATTRIBUTE_ALIGNED16(class)
-btTypedConstraint : public btTypedObject
-{
- int m_userConstraintType;
-
- union {
- int m_userConstraintId;
- void* m_userConstraintPtr;
- };
-
- btScalar m_breakingImpulseThreshold;
- bool m_isEnabled;
- bool m_needsFeedback;
- int m_overrideNumSolverIterations;
-
- btTypedConstraint& operator=(btTypedConstraint& other)
- {
- btAssert(0);
- (void)other;
- return *this;
- }
-
-protected:
- btRigidBody& m_rbA;
- btRigidBody& m_rbB;
- btScalar m_appliedImpulse;
- btScalar m_dbgDrawSize;
- btJointFeedback* m_jointFeedback;
-
- ///internal method used by the constraint solver, don't use them directly
- btScalar getMotorFactor(btScalar pos, btScalar lowLim, btScalar uppLim, btScalar vel, btScalar timeFact);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- virtual ~btTypedConstraint(){};
- btTypedConstraint(btTypedConstraintType type, btRigidBody & rbA);
- btTypedConstraint(btTypedConstraintType type, btRigidBody & rbA, btRigidBody & rbB);
-
- struct btConstraintInfo1
- {
- int m_numConstraintRows, nub;
- };
-
- static btRigidBody& getFixedBody();
-
- struct btConstraintInfo2
- {
- // integrator parameters: frames per second (1/stepsize), default error
- // reduction parameter (0..1).
- btScalar fps, erp;
-
- // for the first and second body, pointers to two (linear and angular)
- // n*3 jacobian sub matrices, stored by rows. these matrices will have
- // been initialized to 0 on entry. if the second body is zero then the
- // J2xx pointers may be 0.
- btScalar *m_J1linearAxis, *m_J1angularAxis, *m_J2linearAxis, *m_J2angularAxis;
-
- // elements to jump from one row to the next in J's
- int rowskip;
-
- // right hand sides of the equation J*v = c + cfm * lambda. cfm is the
- // "constraint force mixing" vector. c is set to zero on entry, cfm is
- // set to a constant value (typically very small or zero) value on entry.
- btScalar *m_constraintError, *cfm;
-
- // lo and hi limits for variables (set to -/+ infinity on entry).
- btScalar *m_lowerLimit, *m_upperLimit;
-
- // number of solver iterations
- int m_numIterations;
-
- //damping of the velocity
- btScalar m_damping;
- };
-
- int getOverrideNumSolverIterations() const
- {
- return m_overrideNumSolverIterations;
- }
-
- ///override the number of constraint solver iterations used to solve this constraint
- ///-1 will use the default number of iterations, as specified in SolverInfo.m_numIterations
- void setOverrideNumSolverIterations(int overideNumIterations)
- {
- m_overrideNumSolverIterations = overideNumIterations;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void buildJacobian(){};
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void setupSolverConstraint(btConstraintArray & ca, int solverBodyA, int solverBodyB, btScalar timeStep)
- {
- (void)ca;
- (void)solverBodyA;
- (void)solverBodyB;
- (void)timeStep;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void getInfo1(btConstraintInfo1 * info) = 0;
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void getInfo2(btConstraintInfo2 * info) = 0;
-
- ///internal method used by the constraint solver, don't use them directly
- void internalSetAppliedImpulse(btScalar appliedImpulse)
- {
- m_appliedImpulse = appliedImpulse;
- }
- ///internal method used by the constraint solver, don't use them directly
- btScalar internalGetAppliedImpulse()
- {
- return m_appliedImpulse;
- }
-
- btScalar getBreakingImpulseThreshold() const
- {
- return m_breakingImpulseThreshold;
- }
-
- void setBreakingImpulseThreshold(btScalar threshold)
- {
- m_breakingImpulseThreshold = threshold;
- }
-
- bool isEnabled() const
- {
- return m_isEnabled;
- }
-
- void setEnabled(bool enabled)
- {
- m_isEnabled = enabled;
- }
-
- ///internal method used by the constraint solver, don't use them directly
- virtual void solveConstraintObsolete(btSolverBody& /*bodyA*/, btSolverBody& /*bodyB*/, btScalar /*timeStep*/){};
-
- const btRigidBody& getRigidBodyA() const
- {
- return m_rbA;
- }
- const btRigidBody& getRigidBodyB() const
- {
- return m_rbB;
- }
-
- btRigidBody& getRigidBodyA()
- {
- return m_rbA;
- }
- btRigidBody& getRigidBodyB()
- {
- return m_rbB;
- }
-
- int getUserConstraintType() const
- {
- return m_userConstraintType;
- }
-
- void setUserConstraintType(int userConstraintType)
- {
- m_userConstraintType = userConstraintType;
- };
-
- void setUserConstraintId(int uid)
- {
- m_userConstraintId = uid;
- }
-
- int getUserConstraintId() const
- {
- return m_userConstraintId;
- }
-
- void setUserConstraintPtr(void* ptr)
- {
- m_userConstraintPtr = ptr;
- }
-
- void* getUserConstraintPtr()
- {
- return m_userConstraintPtr;
- }
-
- void setJointFeedback(btJointFeedback * jointFeedback)
- {
- m_jointFeedback = jointFeedback;
- }
-
- const btJointFeedback* getJointFeedback() const
- {
- return m_jointFeedback;
- }
-
- btJointFeedback* getJointFeedback()
- {
- return m_jointFeedback;
- }
-
- int getUid() const
- {
- return m_userConstraintId;
- }
-
- bool needsFeedback() const
- {
- return m_needsFeedback;
- }
-
- ///enableFeedback will allow to read the applied linear and angular impulse
- ///use getAppliedImpulse, getAppliedLinearImpulse and getAppliedAngularImpulse to read feedback information
- void enableFeedback(bool needsFeedback)
- {
- m_needsFeedback = needsFeedback;
- }
-
- ///getAppliedImpulse is an estimated total applied impulse.
- ///This feedback could be used to determine breaking constraints or playing sounds.
- btScalar getAppliedImpulse() const
- {
- btAssert(m_needsFeedback);
- return m_appliedImpulse;
- }
-
- btTypedConstraintType getConstraintType() const
- {
- return btTypedConstraintType(m_objectType);
- }
-
- void setDbgDrawSize(btScalar dbgDrawSize)
- {
- m_dbgDrawSize = dbgDrawSize;
- }
- btScalar getDbgDrawSize()
- {
- return m_dbgDrawSize;
- }
-
- ///override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0..5).
- ///If no axis is provided, it uses the default axis for this constraint.
- virtual void setParam(int num, btScalar value, int axis = -1) = 0;
-
- ///return the local value of parameter
- virtual btScalar getParam(int num, int axis = -1) const = 0;
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, btSerializer* serializer) const;
-};
-
-// returns angle in range [-SIMD_2_PI, SIMD_2_PI], closest to one of the limits
-// all arguments should be normalized angles (i.e. in range [-SIMD_PI, SIMD_PI])
-SIMD_FORCE_INLINE btScalar btAdjustAngleToLimits(btScalar angleInRadians, btScalar angleLowerLimitInRadians, btScalar angleUpperLimitInRadians)
-{
- if (angleLowerLimitInRadians >= angleUpperLimitInRadians)
- {
- return angleInRadians;
- }
- else if (angleInRadians < angleLowerLimitInRadians)
- {
- btScalar diffLo = btFabs(btNormalizeAngle(angleLowerLimitInRadians - angleInRadians));
- btScalar diffHi = btFabs(btNormalizeAngle(angleUpperLimitInRadians - angleInRadians));
- return (diffLo < diffHi) ? angleInRadians : (angleInRadians + SIMD_2_PI);
- }
- else if (angleInRadians > angleUpperLimitInRadians)
- {
- btScalar diffHi = btFabs(btNormalizeAngle(angleInRadians - angleUpperLimitInRadians));
- btScalar diffLo = btFabs(btNormalizeAngle(angleInRadians - angleLowerLimitInRadians));
- return (diffLo < diffHi) ? (angleInRadians - SIMD_2_PI) : angleInRadians;
- }
- else
- {
- return angleInRadians;
- }
-}
-
-// clang-format off
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btTypedConstraintFloatData
-{
- btRigidBodyFloatData *m_rbA;
- btRigidBodyFloatData *m_rbB;
- char *m_name;
-
- int m_objectType;
- int m_userConstraintType;
- int m_userConstraintId;
- int m_needsFeedback;
-
- float m_appliedImpulse;
- float m_dbgDrawSize;
-
- int m_disableCollisionsBetweenLinkedBodies;
- int m_overrideNumSolverIterations;
-
- float m_breakingImpulseThreshold;
- int m_isEnabled;
-
-};
-
-
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-
-#define BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-#ifdef BT_BACKWARDS_COMPATIBLE_SERIALIZATION
-///this structure is not used, except for loading pre-2.82 .bullet files
-struct btTypedConstraintData
-{
- btRigidBodyData *m_rbA;
- btRigidBodyData *m_rbB;
- char *m_name;
-
- int m_objectType;
- int m_userConstraintType;
- int m_userConstraintId;
- int m_needsFeedback;
-
- float m_appliedImpulse;
- float m_dbgDrawSize;
-
- int m_disableCollisionsBetweenLinkedBodies;
- int m_overrideNumSolverIterations;
-
- float m_breakingImpulseThreshold;
- int m_isEnabled;
-
-};
-#endif //BACKWARDS_COMPATIBLE
-
-struct btTypedConstraintDoubleData
-{
- btRigidBodyDoubleData *m_rbA;
- btRigidBodyDoubleData *m_rbB;
- char *m_name;
-
- int m_objectType;
- int m_userConstraintType;
- int m_userConstraintId;
- int m_needsFeedback;
-
- double m_appliedImpulse;
- double m_dbgDrawSize;
-
- int m_disableCollisionsBetweenLinkedBodies;
- int m_overrideNumSolverIterations;
-
- double m_breakingImpulseThreshold;
- int m_isEnabled;
- char padding[4];
-
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btTypedConstraint::calculateSerializeBufferSize() const
-{
- return sizeof(btTypedConstraintData2);
-}
-
-class btAngularLimit
-{
-private:
- btScalar
- m_center,
- m_halfRange,
- m_softness,
- m_biasFactor,
- m_relaxationFactor,
- m_correction,
- m_sign;
-
- bool
- m_solveLimit;
-
-public:
- /// Default constructor initializes limit as inactive, allowing free constraint movement
- btAngularLimit()
- : m_center(0.0f),
- m_halfRange(-1.0f),
- m_softness(0.9f),
- m_biasFactor(0.3f),
- m_relaxationFactor(1.0f),
- m_correction(0.0f),
- m_sign(0.0f),
- m_solveLimit(false)
- {
- }
-
- /// Sets all limit's parameters.
- /// When low > high limit becomes inactive.
- /// When high - low > 2PI limit is ineffective too becouse no angle can exceed the limit
- void set(btScalar low, btScalar high, btScalar _softness = 0.9f, btScalar _biasFactor = 0.3f, btScalar _relaxationFactor = 1.0f);
-
- /// Checks conastaint angle against limit. If limit is active and the angle violates the limit
- /// correction is calculated.
- void test(const btScalar angle);
-
- /// Returns limit's softness
- inline btScalar getSoftness() const
- {
- return m_softness;
- }
-
- /// Returns limit's bias factor
- inline btScalar getBiasFactor() const
- {
- return m_biasFactor;
- }
-
- /// Returns limit's relaxation factor
- inline btScalar getRelaxationFactor() const
- {
- return m_relaxationFactor;
- }
-
- /// Returns correction value evaluated when test() was invoked
- inline btScalar getCorrection() const
- {
- return m_correction;
- }
-
- /// Returns sign value evaluated when test() was invoked
- inline btScalar getSign() const
- {
- return m_sign;
- }
-
- /// Gives half of the distance between min and max limit angle
- inline btScalar getHalfRange() const
- {
- return m_halfRange;
- }
-
- /// Returns true when the last test() invocation recognized limit violation
- inline bool isLimit() const
- {
- return m_solveLimit;
- }
-
- /// Checks given angle against limit. If limit is active and angle doesn't fit it, the angle
- /// returned is modified so it equals to the limit closest to given angle.
- void fit(btScalar& angle) const;
-
- /// Returns correction value multiplied by sign value
- btScalar getError() const;
-
- btScalar getLow() const;
-
- btScalar getHigh() const;
-};
-
-#endif //BT_TYPED_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp
deleted file mode 100644
index 42ed1fbb87..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btUniversalConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btTransformUtil.h"
-
-#define UNIV_EPS btScalar(0.01f)
-
-// constructor
-// anchor, axis1 and axis2 are in world coordinate system
-// axis1 must be orthogonal to axis2
-btUniversalConstraint::btUniversalConstraint(btRigidBody& rbA, btRigidBody& rbB, const btVector3& anchor, const btVector3& axis1, const btVector3& axis2)
- : btGeneric6DofConstraint(rbA, rbB, btTransform::getIdentity(), btTransform::getIdentity(), true),
- m_anchor(anchor),
- m_axis1(axis1),
- m_axis2(axis2)
-{
- // build frame basis
- // 6DOF constraint uses Euler angles and to define limits
- // it is assumed that rotational order is :
- // Z - first, allowed limits are (-PI,PI);
- // new position of Y - second (allowed limits are (-PI/2 + epsilon, PI/2 - epsilon), where epsilon is a small positive number
- // used to prevent constraint from instability on poles;
- // new position of X, allowed limits are (-PI,PI);
- // So to simulate ODE Universal joint we should use parent axis as Z, child axis as Y and limit all other DOFs
- // Build the frame in world coordinate system first
- btVector3 zAxis = m_axis1.normalize();
- btVector3 yAxis = m_axis2.normalize();
- btVector3 xAxis = yAxis.cross(zAxis); // we want right coordinate system
- btTransform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
- frameInW.setOrigin(anchor);
- // now get constraint frame in local coordinate systems
- m_frameInA = rbA.getCenterOfMassTransform().inverse() * frameInW;
- m_frameInB = rbB.getCenterOfMassTransform().inverse() * frameInW;
- // sei limits
- setLinearLowerLimit(btVector3(0., 0., 0.));
- setLinearUpperLimit(btVector3(0., 0., 0.));
- setAngularLowerLimit(btVector3(0.f, -SIMD_HALF_PI + UNIV_EPS, -SIMD_PI + UNIV_EPS));
- setAngularUpperLimit(btVector3(0.f, SIMD_HALF_PI - UNIV_EPS, SIMD_PI - UNIV_EPS));
-}
-
-void btUniversalConstraint::setAxis(const btVector3& axis1, const btVector3& axis2)
-{
- m_axis1 = axis1;
- m_axis2 = axis2;
-
- btVector3 zAxis = axis1.normalized();
- btVector3 yAxis = axis2.normalized();
- btVector3 xAxis = yAxis.cross(zAxis); // we want right coordinate system
-
- btTransform frameInW;
- frameInW.setIdentity();
- frameInW.getBasis().setValue(xAxis[0], yAxis[0], zAxis[0],
- xAxis[1], yAxis[1], zAxis[1],
- xAxis[2], yAxis[2], zAxis[2]);
- frameInW.setOrigin(m_anchor);
-
- // now get constraint frame in local coordinate systems
- m_frameInA = m_rbA.getCenterOfMassTransform().inverse() * frameInW;
- m_frameInB = m_rbB.getCenterOfMassTransform().inverse() * frameInW;
-
- calculateTransforms();
-}
diff --git a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h b/thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h
deleted file mode 100644
index 8c24d93a64..0000000000
--- a/thirdparty/bullet/BulletDynamics/ConstraintSolver/btUniversalConstraint.h
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library, http://bulletphysics.org
-Copyright (C) 2006, 2007 Sony Computer Entertainment Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_UNIVERSAL_CONSTRAINT_H
-#define BT_UNIVERSAL_CONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "btTypedConstraint.h"
-#include "btGeneric6DofConstraint.h"
-
-/// Constraint similar to ODE Universal Joint
-/// has 2 rotatioonal degrees of freedom, similar to Euler rotations around Z (axis 1)
-/// and Y (axis 2)
-/// Description from ODE manual :
-/// "Given axis 1 on body 1, and axis 2 on body 2 that is perpendicular to axis 1, it keeps them perpendicular.
-/// In other words, rotation of the two bodies about the direction perpendicular to the two axes will be equal."
-
-ATTRIBUTE_ALIGNED16(class)
-btUniversalConstraint : public btGeneric6DofConstraint
-{
-protected:
- btVector3 m_anchor;
- btVector3 m_axis1;
- btVector3 m_axis2;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- // constructor
- // anchor, axis1 and axis2 are in world coordinate system
- // axis1 must be orthogonal to axis2
- btUniversalConstraint(btRigidBody & rbA, btRigidBody & rbB, const btVector3& anchor, const btVector3& axis1, const btVector3& axis2);
- // access
- const btVector3& getAnchor() { return m_calculatedTransformA.getOrigin(); }
- const btVector3& getAnchor2() { return m_calculatedTransformB.getOrigin(); }
- const btVector3& getAxis1() { return m_axis1; }
- const btVector3& getAxis2() { return m_axis2; }
- btScalar getAngle1() { return getAngle(2); }
- btScalar getAngle2() { return getAngle(1); }
- // limits
- void setUpperLimit(btScalar ang1max, btScalar ang2max) { setAngularUpperLimit(btVector3(0.f, ang1max, ang2max)); }
- void setLowerLimit(btScalar ang1min, btScalar ang2min) { setAngularLowerLimit(btVector3(0.f, ang1min, ang2min)); }
-
- void setAxis(const btVector3& axis1, const btVector3& axis2);
-};
-
-#endif // BT_UNIVERSAL_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btActionInterface.h b/thirdparty/bullet/BulletDynamics/Dynamics/btActionInterface.h
deleted file mode 100644
index b5cac56cdc..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btActionInterface.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef _BT_ACTION_INTERFACE_H
-#define _BT_ACTION_INTERFACE_H
-
-class btIDebugDraw;
-class btCollisionWorld;
-
-#include "LinearMath/btScalar.h"
-#include "btRigidBody.h"
-
-///Basic interface to allow actions such as vehicles and characters to be updated inside a btDynamicsWorld
-class btActionInterface
-{
-protected:
- static btRigidBody& getFixedBody();
-
-public:
- virtual ~btActionInterface()
- {
- }
-
- virtual void updateAction(btCollisionWorld* collisionWorld, btScalar deltaTimeStep) = 0;
-
- virtual void debugDraw(btIDebugDraw* debugDrawer) = 0;
-};
-
-#endif //_BT_ACTION_INTERFACE_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp b/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
deleted file mode 100644
index fb15ae31eb..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp
+++ /dev/null
@@ -1,1469 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btDiscreteDynamicsWorld.h"
-
-//collision detection
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btQuickprof.h"
-
-//rigidbody & constraints
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btHingeConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btConeTwistConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h"
-#include "BulletDynamics/ConstraintSolver/btSliderConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btContactConstraint.h"
-
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-
-#include "BulletDynamics/Dynamics/btActionInterface.h"
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btMotionState.h"
-
-#include "LinearMath/btSerializer.h"
-
-#if 0
-btAlignedObjectArray<btVector3> debugContacts;
-btAlignedObjectArray<btVector3> debugNormals;
-int startHit=2;
-int firstHit=startHit;
-#endif
-
-SIMD_FORCE_INLINE int btGetConstraintIslandId(const btTypedConstraint* lhs)
-{
- int islandId;
-
- const btCollisionObject& rcolObj0 = lhs->getRigidBodyA();
- const btCollisionObject& rcolObj1 = lhs->getRigidBodyB();
- islandId = rcolObj0.getIslandTag() >= 0 ? rcolObj0.getIslandTag() : rcolObj1.getIslandTag();
- return islandId;
-}
-
-class btSortConstraintOnIslandPredicate
-{
-public:
- bool operator()(const btTypedConstraint* lhs, const btTypedConstraint* rhs) const
- {
- int rIslandId0, lIslandId0;
- rIslandId0 = btGetConstraintIslandId(rhs);
- lIslandId0 = btGetConstraintIslandId(lhs);
- return lIslandId0 < rIslandId0;
- }
-};
-
-struct InplaceSolverIslandCallback : public btSimulationIslandManager::IslandCallback
-{
- btContactSolverInfo* m_solverInfo;
- btConstraintSolver* m_solver;
- btTypedConstraint** m_sortedConstraints;
- int m_numConstraints;
- btIDebugDraw* m_debugDrawer;
- btDispatcher* m_dispatcher;
-
- btAlignedObjectArray<btCollisionObject*> m_bodies;
- btAlignedObjectArray<btPersistentManifold*> m_manifolds;
- btAlignedObjectArray<btTypedConstraint*> m_constraints;
-
- InplaceSolverIslandCallback(
- btConstraintSolver* solver,
- btStackAlloc* stackAlloc,
- btDispatcher* dispatcher)
- : m_solverInfo(NULL),
- m_solver(solver),
- m_sortedConstraints(NULL),
- m_numConstraints(0),
- m_debugDrawer(NULL),
- m_dispatcher(dispatcher)
- {
- }
-
- InplaceSolverIslandCallback& operator=(InplaceSolverIslandCallback& other)
- {
- btAssert(0);
- (void)other;
- return *this;
- }
-
- SIMD_FORCE_INLINE void setup(btContactSolverInfo* solverInfo, btTypedConstraint** sortedConstraints, int numConstraints, btIDebugDraw* debugDrawer)
- {
- btAssert(solverInfo);
- m_solverInfo = solverInfo;
- m_sortedConstraints = sortedConstraints;
- m_numConstraints = numConstraints;
- m_debugDrawer = debugDrawer;
- m_bodies.resize(0);
- m_manifolds.resize(0);
- m_constraints.resize(0);
- }
-
- virtual void processIsland(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifolds, int numManifolds, int islandId)
- {
- if (islandId < 0)
- {
- ///we don't split islands, so all constraints/contact manifolds/bodies are passed into the solver regardless the island id
- m_solver->solveGroup(bodies, numBodies, manifolds, numManifolds, &m_sortedConstraints[0], m_numConstraints, *m_solverInfo, m_debugDrawer, m_dispatcher);
- }
- else
- {
- //also add all non-contact constraints/joints for this island
- btTypedConstraint** startConstraint = 0;
- int numCurConstraints = 0;
- int i;
-
- //find the first constraint for this island
- for (i = 0; i < m_numConstraints; i++)
- {
- if (btGetConstraintIslandId(m_sortedConstraints[i]) == islandId)
- {
- startConstraint = &m_sortedConstraints[i];
- break;
- }
- }
- //count the number of constraints in this island
- for (; i < m_numConstraints; i++)
- {
- if (btGetConstraintIslandId(m_sortedConstraints[i]) == islandId)
- {
- numCurConstraints++;
- }
- }
-
- if (m_solverInfo->m_minimumSolverBatchSize <= 1)
- {
- m_solver->solveGroup(bodies, numBodies, manifolds, numManifolds, startConstraint, numCurConstraints, *m_solverInfo, m_debugDrawer, m_dispatcher);
- }
- else
- {
- for (i = 0; i < numBodies; i++)
- m_bodies.push_back(bodies[i]);
- for (i = 0; i < numManifolds; i++)
- m_manifolds.push_back(manifolds[i]);
- for (i = 0; i < numCurConstraints; i++)
- m_constraints.push_back(startConstraint[i]);
- if ((m_constraints.size() + m_manifolds.size()) > m_solverInfo->m_minimumSolverBatchSize)
- {
- processConstraints();
- }
- else
- {
- //printf("deferred\n");
- }
- }
- }
- }
- void processConstraints()
- {
- btCollisionObject** bodies = m_bodies.size() ? &m_bodies[0] : 0;
- btPersistentManifold** manifold = m_manifolds.size() ? &m_manifolds[0] : 0;
- btTypedConstraint** constraints = m_constraints.size() ? &m_constraints[0] : 0;
-
- m_solver->solveGroup(bodies, m_bodies.size(), manifold, m_manifolds.size(), constraints, m_constraints.size(), *m_solverInfo, m_debugDrawer, m_dispatcher);
- m_bodies.resize(0);
- m_manifolds.resize(0);
- m_constraints.resize(0);
- }
-};
-
-btDiscreteDynamicsWorld::btDiscreteDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration)
- : btDynamicsWorld(dispatcher, pairCache, collisionConfiguration),
- m_sortedConstraints(),
- m_solverIslandCallback(NULL),
- m_constraintSolver(constraintSolver),
- m_gravity(0, -10, 0),
- m_localTime(0),
- m_fixedTimeStep(0),
- m_synchronizeAllMotionStates(false),
- m_applySpeculativeContactRestitution(false),
- m_profileTimings(0),
- m_latencyMotionStateInterpolation(true)
-
-{
- if (!m_constraintSolver)
- {
- void* mem = btAlignedAlloc(sizeof(btSequentialImpulseConstraintSolver), 16);
- m_constraintSolver = new (mem) btSequentialImpulseConstraintSolver;
- m_ownsConstraintSolver = true;
- }
- else
- {
- m_ownsConstraintSolver = false;
- }
-
- {
- void* mem = btAlignedAlloc(sizeof(btSimulationIslandManager), 16);
- m_islandManager = new (mem) btSimulationIslandManager();
- }
-
- m_ownsIslandManager = true;
-
- {
- void* mem = btAlignedAlloc(sizeof(InplaceSolverIslandCallback), 16);
- m_solverIslandCallback = new (mem) InplaceSolverIslandCallback(m_constraintSolver, 0, dispatcher);
- }
-}
-
-btDiscreteDynamicsWorld::~btDiscreteDynamicsWorld()
-{
- //only delete it when we created it
- if (m_ownsIslandManager)
- {
- m_islandManager->~btSimulationIslandManager();
- btAlignedFree(m_islandManager);
- }
- if (m_solverIslandCallback)
- {
- m_solverIslandCallback->~InplaceSolverIslandCallback();
- btAlignedFree(m_solverIslandCallback);
- }
- if (m_ownsConstraintSolver)
- {
- m_constraintSolver->~btConstraintSolver();
- btAlignedFree(m_constraintSolver);
- }
-}
-
-void btDiscreteDynamicsWorld::saveKinematicState(btScalar timeStep)
-{
- ///would like to iterate over m_nonStaticRigidBodies, but unfortunately old API allows
- ///to switch status _after_ adding kinematic objects to the world
- ///fix it for Bullet 3.x release
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body && body->getActivationState() != ISLAND_SLEEPING)
- {
- if (body->isKinematicObject())
- {
- //to calculate velocities next frame
- body->saveKinematicState(timeStep);
- }
- }
- }
-}
-
-void btDiscreteDynamicsWorld::debugDrawWorld()
-{
- BT_PROFILE("debugDrawWorld");
-
- btCollisionWorld::debugDrawWorld();
-
- bool drawConstraints = false;
- if (getDebugDrawer())
- {
- int mode = getDebugDrawer()->getDebugMode();
- if (mode & (btIDebugDraw::DBG_DrawConstraints | btIDebugDraw::DBG_DrawConstraintLimits))
- {
- drawConstraints = true;
- }
- }
- if (drawConstraints)
- {
- for (int i = getNumConstraints() - 1; i >= 0; i--)
- {
- btTypedConstraint* constraint = getConstraint(i);
- debugDrawConstraint(constraint);
- }
- }
-
- if (getDebugDrawer() && (getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe | btIDebugDraw::DBG_DrawAabb | btIDebugDraw::DBG_DrawNormals)))
- {
- int i;
-
- if (getDebugDrawer() && getDebugDrawer()->getDebugMode())
- {
- for (i = 0; i < m_actions.size(); i++)
- {
- m_actions[i]->debugDraw(m_debugDrawer);
- }
- }
- }
- if (getDebugDrawer())
- getDebugDrawer()->flushLines();
-}
-
-void btDiscreteDynamicsWorld::clearForces()
-{
- ///@todo: iterate over awake simulation islands!
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- //need to check if next line is ok
- //it might break backward compatibility (people applying forces on sleeping objects get never cleared and accumulate on wake-up
- body->clearForces();
- }
-}
-
-///apply gravity, call this once per timestep
-void btDiscreteDynamicsWorld::applyGravity()
-{
- ///@todo: iterate over awake simulation islands!
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- if (body->isActive())
- {
- body->applyGravity();
- }
- }
-}
-
-void btDiscreteDynamicsWorld::synchronizeSingleMotionState(btRigidBody* body)
-{
- btAssert(body);
-
- if (body->getMotionState() && !body->isStaticOrKinematicObject())
- {
- //we need to call the update at least once, even for sleeping objects
- //otherwise the 'graphics' transform never updates properly
- ///@todo: add 'dirty' flag
- //if (body->getActivationState() != ISLAND_SLEEPING)
- {
- btTransform interpolatedTransform;
- btTransformUtil::integrateTransform(body->getInterpolationWorldTransform(),
- body->getInterpolationLinearVelocity(), body->getInterpolationAngularVelocity(),
- (m_latencyMotionStateInterpolation && m_fixedTimeStep) ? m_localTime - m_fixedTimeStep : m_localTime * body->getHitFraction(),
- interpolatedTransform);
- body->getMotionState()->setWorldTransform(interpolatedTransform);
- }
- }
-}
-
-void btDiscreteDynamicsWorld::synchronizeMotionStates()
-{
- // BT_PROFILE("synchronizeMotionStates");
- if (m_synchronizeAllMotionStates)
- {
- //iterate over all collision objects
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body)
- synchronizeSingleMotionState(body);
- }
- }
- else
- {
- //iterate over all active rigid bodies
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- if (body->isActive())
- synchronizeSingleMotionState(body);
- }
- }
-}
-
-int btDiscreteDynamicsWorld::stepSimulation(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep)
-{
- startProfiling(timeStep);
-
- int numSimulationSubSteps = 0;
-
- if (maxSubSteps)
- {
- //fixed timestep with interpolation
- m_fixedTimeStep = fixedTimeStep;
- m_localTime += timeStep;
- if (m_localTime >= fixedTimeStep)
- {
- numSimulationSubSteps = int(m_localTime / fixedTimeStep);
- m_localTime -= numSimulationSubSteps * fixedTimeStep;
- }
- }
- else
- {
- //variable timestep
- fixedTimeStep = timeStep;
- m_localTime = m_latencyMotionStateInterpolation ? 0 : timeStep;
- m_fixedTimeStep = 0;
- if (btFuzzyZero(timeStep))
- {
- numSimulationSubSteps = 0;
- maxSubSteps = 0;
- }
- else
- {
- numSimulationSubSteps = 1;
- maxSubSteps = 1;
- }
- }
-
- //process some debugging flags
- if (getDebugDrawer())
- {
- btIDebugDraw* debugDrawer = getDebugDrawer();
- gDisableDeactivation = (debugDrawer->getDebugMode() & btIDebugDraw::DBG_NoDeactivation) != 0;
- }
- if (numSimulationSubSteps)
- {
- //clamp the number of substeps, to prevent simulation grinding spiralling down to a halt
- int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps) ? maxSubSteps : numSimulationSubSteps;
-
- saveKinematicState(fixedTimeStep * clampedSimulationSteps);
-
- applyGravity();
-
- for (int i = 0; i < clampedSimulationSteps; i++)
- {
- internalSingleStepSimulation(fixedTimeStep);
- synchronizeMotionStates();
- }
- }
- else
- {
- synchronizeMotionStates();
- }
-
- clearForces();
-
-#ifndef BT_NO_PROFILE
- CProfileManager::Increment_Frame_Counter();
-#endif //BT_NO_PROFILE
-
- return numSimulationSubSteps;
-}
-
-void btDiscreteDynamicsWorld::internalSingleStepSimulation(btScalar timeStep)
-{
- BT_PROFILE("internalSingleStepSimulation");
-
- if (0 != m_internalPreTickCallback)
- {
- (*m_internalPreTickCallback)(this, timeStep);
- }
-
- ///apply gravity, predict motion
- predictUnconstraintMotion(timeStep);
-
- btDispatcherInfo& dispatchInfo = getDispatchInfo();
-
- dispatchInfo.m_timeStep = timeStep;
- dispatchInfo.m_stepCount = 0;
- dispatchInfo.m_debugDraw = getDebugDrawer();
-
- createPredictiveContacts(timeStep);
-
- ///perform collision detection
- performDiscreteCollisionDetection();
-
- calculateSimulationIslands();
-
- getSolverInfo().m_timeStep = timeStep;
-
- ///solve contact and other joint constraints
- solveConstraints(getSolverInfo());
-
- ///CallbackTriggers();
-
- ///integrate transforms
-
- integrateTransforms(timeStep);
-
- ///update vehicle simulation
- updateActions(timeStep);
-
- updateActivationState(timeStep);
-
- if (0 != m_internalTickCallback)
- {
- (*m_internalTickCallback)(this, timeStep);
- }
-}
-
-void btDiscreteDynamicsWorld::setGravity(const btVector3& gravity)
-{
- m_gravity = gravity;
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- if (body->isActive() && !(body->getFlags() & BT_DISABLE_WORLD_GRAVITY))
- {
- body->setGravity(gravity);
- }
- }
-}
-
-btVector3 btDiscreteDynamicsWorld::getGravity() const
-{
- return m_gravity;
-}
-
-void btDiscreteDynamicsWorld::addCollisionObject(btCollisionObject* collisionObject, int collisionFilterGroup, int collisionFilterMask)
-{
- btCollisionWorld::addCollisionObject(collisionObject, collisionFilterGroup, collisionFilterMask);
-}
-
-void btDiscreteDynamicsWorld::removeCollisionObject(btCollisionObject* collisionObject)
-{
- btRigidBody* body = btRigidBody::upcast(collisionObject);
- if (body)
- removeRigidBody(body);
- else
- btCollisionWorld::removeCollisionObject(collisionObject);
-}
-
-void btDiscreteDynamicsWorld::removeRigidBody(btRigidBody* body)
-{
- m_nonStaticRigidBodies.remove(body);
- btCollisionWorld::removeCollisionObject(body);
-}
-
-void btDiscreteDynamicsWorld::addRigidBody(btRigidBody* body)
-{
- if (!body->isStaticOrKinematicObject() && !(body->getFlags() & BT_DISABLE_WORLD_GRAVITY))
- {
- body->setGravity(m_gravity);
- }
-
- if (body->getCollisionShape())
- {
- if (!body->isStaticObject())
- {
- m_nonStaticRigidBodies.push_back(body);
- }
- else
- {
- body->setActivationState(ISLAND_SLEEPING);
- }
-
- bool isDynamic = !(body->isStaticObject() || body->isKinematicObject());
- int collisionFilterGroup = isDynamic ? int(btBroadphaseProxy::DefaultFilter) : int(btBroadphaseProxy::StaticFilter);
- int collisionFilterMask = isDynamic ? int(btBroadphaseProxy::AllFilter) : int(btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter);
-
- addCollisionObject(body, collisionFilterGroup, collisionFilterMask);
- }
-}
-
-void btDiscreteDynamicsWorld::addRigidBody(btRigidBody* body, int group, int mask)
-{
- if (!body->isStaticOrKinematicObject() && !(body->getFlags() & BT_DISABLE_WORLD_GRAVITY))
- {
- body->setGravity(m_gravity);
- }
-
- if (body->getCollisionShape())
- {
- if (!body->isStaticObject())
- {
- m_nonStaticRigidBodies.push_back(body);
- }
- else
- {
- body->setActivationState(ISLAND_SLEEPING);
- }
- addCollisionObject(body, group, mask);
- }
-}
-
-void btDiscreteDynamicsWorld::updateActions(btScalar timeStep)
-{
- BT_PROFILE("updateActions");
-
- for (int i = 0; i < m_actions.size(); i++)
- {
- m_actions[i]->updateAction(this, timeStep);
- }
-}
-
-void btDiscreteDynamicsWorld::updateActivationState(btScalar timeStep)
-{
- BT_PROFILE("updateActivationState");
-
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- if (body)
- {
- body->updateDeactivation(timeStep);
-
- if (body->wantsSleeping())
- {
- if (body->isStaticOrKinematicObject())
- {
- body->setActivationState(ISLAND_SLEEPING);
- }
- else
- {
- if (body->getActivationState() == ACTIVE_TAG)
- body->setActivationState(WANTS_DEACTIVATION);
- if (body->getActivationState() == ISLAND_SLEEPING)
- {
- body->setAngularVelocity(btVector3(0, 0, 0));
- body->setLinearVelocity(btVector3(0, 0, 0));
- }
- }
- }
- else
- {
- if (body->getActivationState() != DISABLE_DEACTIVATION)
- body->setActivationState(ACTIVE_TAG);
- }
- }
- }
-}
-
-void btDiscreteDynamicsWorld::addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies)
-{
- m_constraints.push_back(constraint);
- //Make sure the two bodies of a type constraint are different (possibly add this to the btTypedConstraint constructor?)
- btAssert(&constraint->getRigidBodyA() != &constraint->getRigidBodyB());
-
- if (disableCollisionsBetweenLinkedBodies)
- {
- constraint->getRigidBodyA().addConstraintRef(constraint);
- constraint->getRigidBodyB().addConstraintRef(constraint);
- }
-}
-
-void btDiscreteDynamicsWorld::removeConstraint(btTypedConstraint* constraint)
-{
- m_constraints.remove(constraint);
- constraint->getRigidBodyA().removeConstraintRef(constraint);
- constraint->getRigidBodyB().removeConstraintRef(constraint);
-}
-
-void btDiscreteDynamicsWorld::addAction(btActionInterface* action)
-{
- m_actions.push_back(action);
-}
-
-void btDiscreteDynamicsWorld::removeAction(btActionInterface* action)
-{
- m_actions.remove(action);
-}
-
-void btDiscreteDynamicsWorld::addVehicle(btActionInterface* vehicle)
-{
- addAction(vehicle);
-}
-
-void btDiscreteDynamicsWorld::removeVehicle(btActionInterface* vehicle)
-{
- removeAction(vehicle);
-}
-
-void btDiscreteDynamicsWorld::addCharacter(btActionInterface* character)
-{
- addAction(character);
-}
-
-void btDiscreteDynamicsWorld::removeCharacter(btActionInterface* character)
-{
- removeAction(character);
-}
-
-void btDiscreteDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo)
-{
- BT_PROFILE("solveConstraints");
-
- m_sortedConstraints.resize(m_constraints.size());
- int i;
- for (i = 0; i < getNumConstraints(); i++)
- {
- m_sortedConstraints[i] = m_constraints[i];
- }
-
- // btAssert(0);
-
- m_sortedConstraints.quickSort(btSortConstraintOnIslandPredicate());
-
- btTypedConstraint** constraintsPtr = getNumConstraints() ? &m_sortedConstraints[0] : 0;
-
- m_solverIslandCallback->setup(&solverInfo, constraintsPtr, m_sortedConstraints.size(), getDebugDrawer());
- m_constraintSolver->prepareSolve(getCollisionWorld()->getNumCollisionObjects(), getCollisionWorld()->getDispatcher()->getNumManifolds());
-
- /// solve all the constraints for this island
- m_islandManager->buildAndProcessIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_solverIslandCallback);
-
- m_solverIslandCallback->processConstraints();
-
- m_constraintSolver->allSolved(solverInfo, m_debugDrawer);
-}
-
-void btDiscreteDynamicsWorld::calculateSimulationIslands()
-{
- BT_PROFILE("calculateSimulationIslands");
-
- getSimulationIslandManager()->updateActivationState(getCollisionWorld(), getCollisionWorld()->getDispatcher());
-
- {
- //merge islands based on speculative contact manifolds too
- for (int i = 0; i < this->m_predictiveManifolds.size(); i++)
- {
- btPersistentManifold* manifold = m_predictiveManifolds[i];
-
- const btCollisionObject* colObj0 = manifold->getBody0();
- const btCollisionObject* colObj1 = manifold->getBody1();
-
- if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
- ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
- {
- getSimulationIslandManager()->getUnionFind().unite((colObj0)->getIslandTag(), (colObj1)->getIslandTag());
- }
- }
- }
-
- {
- int i;
- int numConstraints = int(m_constraints.size());
- for (i = 0; i < numConstraints; i++)
- {
- btTypedConstraint* constraint = m_constraints[i];
- if (constraint->isEnabled())
- {
- const btRigidBody* colObj0 = &constraint->getRigidBodyA();
- const btRigidBody* colObj1 = &constraint->getRigidBodyB();
-
- if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
- ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
- {
- getSimulationIslandManager()->getUnionFind().unite((colObj0)->getIslandTag(), (colObj1)->getIslandTag());
- }
- }
- }
- }
-
- //Store the island id in each body
- getSimulationIslandManager()->storeIslandActivationState(getCollisionWorld());
-}
-
-class btClosestNotMeConvexResultCallback : public btCollisionWorld::ClosestConvexResultCallback
-{
-public:
- btCollisionObject* m_me;
- btScalar m_allowedPenetration;
- btOverlappingPairCache* m_pairCache;
- btDispatcher* m_dispatcher;
-
-public:
- btClosestNotMeConvexResultCallback(btCollisionObject* me, const btVector3& fromA, const btVector3& toA, btOverlappingPairCache* pairCache, btDispatcher* dispatcher) : btCollisionWorld::ClosestConvexResultCallback(fromA, toA),
- m_me(me),
- m_allowedPenetration(0.0f),
- m_pairCache(pairCache),
- m_dispatcher(dispatcher)
- {
- }
-
- virtual btScalar addSingleResult(btCollisionWorld::LocalConvexResult& convexResult, bool normalInWorldSpace)
- {
- if (convexResult.m_hitCollisionObject == m_me)
- return 1.0f;
-
- //ignore result if there is no contact response
- if (!convexResult.m_hitCollisionObject->hasContactResponse())
- return 1.0f;
-
- btVector3 linVelA, linVelB;
- linVelA = m_convexToWorld - m_convexFromWorld;
- linVelB = btVector3(0, 0, 0); //toB.getOrigin()-fromB.getOrigin();
-
- btVector3 relativeVelocity = (linVelA - linVelB);
- //don't report time of impact for motion away from the contact normal (or causes minor penetration)
- if (convexResult.m_hitNormalLocal.dot(relativeVelocity) >= -m_allowedPenetration)
- return 1.f;
-
- return ClosestConvexResultCallback::addSingleResult(convexResult, normalInWorldSpace);
- }
-
- virtual bool needsCollision(btBroadphaseProxy* proxy0) const
- {
- //don't collide with itself
- if (proxy0->m_clientObject == m_me)
- return false;
-
- ///don't do CCD when the collision filters are not matching
- if (!ClosestConvexResultCallback::needsCollision(proxy0))
- return false;
- if (m_pairCache->getOverlapFilterCallback()) {
- btBroadphaseProxy* proxy1 = m_me->getBroadphaseHandle();
- bool collides = m_pairCache->needsBroadphaseCollision(proxy0, proxy1);
- if (!collides)
- {
- return false;
- }
- }
-
- btCollisionObject* otherObj = (btCollisionObject*)proxy0->m_clientObject;
-
- if (!m_dispatcher->needsCollision(m_me, otherObj))
- return false;
-
- //call needsResponse, see http://code.google.com/p/bullet/issues/detail?id=179
- if (m_dispatcher->needsResponse(m_me, otherObj))
- {
-#if 0
- ///don't do CCD when there are already contact points (touching contact/penetration)
- btAlignedObjectArray<btPersistentManifold*> manifoldArray;
- btBroadphasePair* collisionPair = m_pairCache->findPair(m_me->getBroadphaseHandle(),proxy0);
- if (collisionPair)
- {
- if (collisionPair->m_algorithm)
- {
- manifoldArray.resize(0);
- collisionPair->m_algorithm->getAllContactManifolds(manifoldArray);
- for (int j=0;j<manifoldArray.size();j++)
- {
- btPersistentManifold* manifold = manifoldArray[j];
- if (manifold->getNumContacts()>0)
- return false;
- }
- }
- }
-#endif
- return true;
- }
-
- return false;
- }
-};
-
-///internal debugging variable. this value shouldn't be too high
-int gNumClampedCcdMotions = 0;
-
-void btDiscreteDynamicsWorld::createPredictiveContactsInternal(btRigidBody** bodies, int numBodies, btScalar timeStep)
-{
- btTransform predictedTrans;
- for (int i = 0; i < numBodies; i++)
- {
- btRigidBody* body = bodies[i];
- body->setHitFraction(1.f);
-
- if (body->isActive() && (!body->isStaticOrKinematicObject()))
- {
- body->predictIntegratedTransform(timeStep, predictedTrans);
-
- btScalar squareMotion = (predictedTrans.getOrigin() - body->getWorldTransform().getOrigin()).length2();
-
- if (getDispatchInfo().m_useContinuous && body->getCcdSquareMotionThreshold() && body->getCcdSquareMotionThreshold() < squareMotion)
- {
- BT_PROFILE("predictive convexSweepTest");
- if (body->getCollisionShape()->isConvex())
- {
- gNumClampedCcdMotions++;
-#ifdef PREDICTIVE_CONTACT_USE_STATIC_ONLY
- class StaticOnlyCallback : public btClosestNotMeConvexResultCallback
- {
- public:
- StaticOnlyCallback(btCollisionObject* me, const btVector3& fromA, const btVector3& toA, btOverlappingPairCache* pairCache, btDispatcher* dispatcher) : btClosestNotMeConvexResultCallback(me, fromA, toA, pairCache, dispatcher)
- {
- }
-
- virtual bool needsCollision(btBroadphaseProxy* proxy0) const
- {
- btCollisionObject* otherObj = (btCollisionObject*)proxy0->m_clientObject;
- if (!otherObj->isStaticOrKinematicObject())
- return false;
- return btClosestNotMeConvexResultCallback::needsCollision(proxy0);
- }
- };
-
- StaticOnlyCallback sweepResults(body, body->getWorldTransform().getOrigin(), predictedTrans.getOrigin(), getBroadphase()->getOverlappingPairCache(), getDispatcher());
-#else
- btClosestNotMeConvexResultCallback sweepResults(body, body->getWorldTransform().getOrigin(), predictedTrans.getOrigin(), getBroadphase()->getOverlappingPairCache(), getDispatcher());
-#endif
- //btConvexShape* convexShape = static_cast<btConvexShape*>(body->getCollisionShape());
- btSphereShape tmpSphere(body->getCcdSweptSphereRadius()); //btConvexShape* convexShape = static_cast<btConvexShape*>(body->getCollisionShape());
- sweepResults.m_allowedPenetration = getDispatchInfo().m_allowedCcdPenetration;
-
- sweepResults.m_collisionFilterGroup = body->getBroadphaseProxy()->m_collisionFilterGroup;
- sweepResults.m_collisionFilterMask = body->getBroadphaseProxy()->m_collisionFilterMask;
- btTransform modifiedPredictedTrans = predictedTrans;
- modifiedPredictedTrans.setBasis(body->getWorldTransform().getBasis());
-
- convexSweepTest(&tmpSphere, body->getWorldTransform(), modifiedPredictedTrans, sweepResults);
- if (sweepResults.hasHit() && (sweepResults.m_closestHitFraction < 1.f))
- {
- btVector3 distVec = (predictedTrans.getOrigin() - body->getWorldTransform().getOrigin()) * sweepResults.m_closestHitFraction;
- btScalar distance = distVec.dot(-sweepResults.m_hitNormalWorld);
-
- btPersistentManifold* manifold = m_dispatcher1->getNewManifold(body, sweepResults.m_hitCollisionObject);
- btMutexLock(&m_predictiveManifoldsMutex);
- m_predictiveManifolds.push_back(manifold);
- btMutexUnlock(&m_predictiveManifoldsMutex);
-
- btVector3 worldPointB = body->getWorldTransform().getOrigin() + distVec;
- btVector3 localPointB = sweepResults.m_hitCollisionObject->getWorldTransform().inverse() * worldPointB;
-
- btManifoldPoint newPoint(btVector3(0, 0, 0), localPointB, sweepResults.m_hitNormalWorld, distance);
-
- bool isPredictive = true;
- int index = manifold->addManifoldPoint(newPoint, isPredictive);
- btManifoldPoint& pt = manifold->getContactPoint(index);
- pt.m_combinedRestitution = 0;
- pt.m_combinedFriction = gCalculateCombinedFrictionCallback(body, sweepResults.m_hitCollisionObject);
- pt.m_positionWorldOnA = body->getWorldTransform().getOrigin();
- pt.m_positionWorldOnB = worldPointB;
- }
- }
- }
- }
- }
-}
-
-void btDiscreteDynamicsWorld::releasePredictiveContacts()
-{
- BT_PROFILE("release predictive contact manifolds");
-
- for (int i = 0; i < m_predictiveManifolds.size(); i++)
- {
- btPersistentManifold* manifold = m_predictiveManifolds[i];
- this->m_dispatcher1->releaseManifold(manifold);
- }
- m_predictiveManifolds.clear();
-}
-
-void btDiscreteDynamicsWorld::createPredictiveContacts(btScalar timeStep)
-{
- BT_PROFILE("createPredictiveContacts");
- releasePredictiveContacts();
- if (m_nonStaticRigidBodies.size() > 0)
- {
- createPredictiveContactsInternal(&m_nonStaticRigidBodies[0], m_nonStaticRigidBodies.size(), timeStep);
- }
-}
-
-void btDiscreteDynamicsWorld::integrateTransformsInternal(btRigidBody** bodies, int numBodies, btScalar timeStep)
-{
- btTransform predictedTrans;
- for (int i = 0; i < numBodies; i++)
- {
- btRigidBody* body = bodies[i];
- body->setHitFraction(1.f);
-
- if (body->isActive() && (!body->isStaticOrKinematicObject()))
- {
- body->predictIntegratedTransform(timeStep, predictedTrans);
-
- btScalar squareMotion = (predictedTrans.getOrigin() - body->getWorldTransform().getOrigin()).length2();
-
- if (getDispatchInfo().m_useContinuous && body->getCcdSquareMotionThreshold() && body->getCcdSquareMotionThreshold() < squareMotion)
- {
- BT_PROFILE("CCD motion clamping");
- if (body->getCollisionShape()->isConvex())
- {
- gNumClampedCcdMotions++;
-#ifdef USE_STATIC_ONLY
- class StaticOnlyCallback : public btClosestNotMeConvexResultCallback
- {
- public:
- StaticOnlyCallback(btCollisionObject* me, const btVector3& fromA, const btVector3& toA, btOverlappingPairCache* pairCache, btDispatcher* dispatcher) : btClosestNotMeConvexResultCallback(me, fromA, toA, pairCache, dispatcher)
- {
- }
-
- virtual bool needsCollision(btBroadphaseProxy* proxy0) const
- {
- btCollisionObject* otherObj = (btCollisionObject*)proxy0->m_clientObject;
- if (!otherObj->isStaticOrKinematicObject())
- return false;
- return btClosestNotMeConvexResultCallback::needsCollision(proxy0);
- }
- };
-
- StaticOnlyCallback sweepResults(body, body->getWorldTransform().getOrigin(), predictedTrans.getOrigin(), getBroadphase()->getOverlappingPairCache(), getDispatcher());
-#else
- btClosestNotMeConvexResultCallback sweepResults(body, body->getWorldTransform().getOrigin(), predictedTrans.getOrigin(), getBroadphase()->getOverlappingPairCache(), getDispatcher());
-#endif
- //btConvexShape* convexShape = static_cast<btConvexShape*>(body->getCollisionShape());
- btSphereShape tmpSphere(body->getCcdSweptSphereRadius()); //btConvexShape* convexShape = static_cast<btConvexShape*>(body->getCollisionShape());
- sweepResults.m_allowedPenetration = getDispatchInfo().m_allowedCcdPenetration;
-
- sweepResults.m_collisionFilterGroup = body->getBroadphaseProxy()->m_collisionFilterGroup;
- sweepResults.m_collisionFilterMask = body->getBroadphaseProxy()->m_collisionFilterMask;
- btTransform modifiedPredictedTrans = predictedTrans;
- modifiedPredictedTrans.setBasis(body->getWorldTransform().getBasis());
-
- convexSweepTest(&tmpSphere, body->getWorldTransform(), modifiedPredictedTrans, sweepResults);
- if (sweepResults.hasHit() && (sweepResults.m_closestHitFraction < 1.f))
- {
- //printf("clamped integration to hit fraction = %f\n",fraction);
- body->setHitFraction(sweepResults.m_closestHitFraction);
- body->predictIntegratedTransform(timeStep * body->getHitFraction(), predictedTrans);
- body->setHitFraction(0.f);
- body->proceedToTransform(predictedTrans);
-
-#if 0
- btVector3 linVel = body->getLinearVelocity();
-
- btScalar maxSpeed = body->getCcdMotionThreshold()/getSolverInfo().m_timeStep;
- btScalar maxSpeedSqr = maxSpeed*maxSpeed;
- if (linVel.length2()>maxSpeedSqr)
- {
- linVel.normalize();
- linVel*= maxSpeed;
- body->setLinearVelocity(linVel);
- btScalar ms2 = body->getLinearVelocity().length2();
- body->predictIntegratedTransform(timeStep, predictedTrans);
-
- btScalar sm2 = (predictedTrans.getOrigin()-body->getWorldTransform().getOrigin()).length2();
- btScalar smt = body->getCcdSquareMotionThreshold();
- printf("sm2=%f\n",sm2);
- }
-#else
-
- //don't apply the collision response right now, it will happen next frame
- //if you really need to, you can uncomment next 3 lines. Note that is uses zero restitution.
- //btScalar appliedImpulse = 0.f;
- //btScalar depth = 0.f;
- //appliedImpulse = resolveSingleCollision(body,(btCollisionObject*)sweepResults.m_hitCollisionObject,sweepResults.m_hitPointWorld,sweepResults.m_hitNormalWorld,getSolverInfo(), depth);
-
-#endif
-
- continue;
- }
- }
- }
-
- body->proceedToTransform(predictedTrans);
- }
- }
-}
-
-void btDiscreteDynamicsWorld::integrateTransforms(btScalar timeStep)
-{
- BT_PROFILE("integrateTransforms");
- if (m_nonStaticRigidBodies.size() > 0)
- {
- integrateTransformsInternal(&m_nonStaticRigidBodies[0], m_nonStaticRigidBodies.size(), timeStep);
- }
-
- ///this should probably be switched on by default, but it is not well tested yet
- if (m_applySpeculativeContactRestitution)
- {
- BT_PROFILE("apply speculative contact restitution");
- for (int i = 0; i < m_predictiveManifolds.size(); i++)
- {
- btPersistentManifold* manifold = m_predictiveManifolds[i];
- btRigidBody* body0 = btRigidBody::upcast((btCollisionObject*)manifold->getBody0());
- btRigidBody* body1 = btRigidBody::upcast((btCollisionObject*)manifold->getBody1());
-
- for (int p = 0; p < manifold->getNumContacts(); p++)
- {
- const btManifoldPoint& pt = manifold->getContactPoint(p);
- btScalar combinedRestitution = gCalculateCombinedRestitutionCallback(body0, body1);
-
- if (combinedRestitution > 0 && pt.m_appliedImpulse != 0.f)
- //if (pt.getDistance()>0 && combinedRestitution>0 && pt.m_appliedImpulse != 0.f)
- {
- btVector3 imp = -pt.m_normalWorldOnB * pt.m_appliedImpulse * combinedRestitution;
-
- const btVector3& pos1 = pt.getPositionWorldOnA();
- const btVector3& pos2 = pt.getPositionWorldOnB();
-
- btVector3 rel_pos0 = pos1 - body0->getWorldTransform().getOrigin();
- btVector3 rel_pos1 = pos2 - body1->getWorldTransform().getOrigin();
-
- if (body0)
- body0->applyImpulse(imp, rel_pos0);
- if (body1)
- body1->applyImpulse(-imp, rel_pos1);
- }
- }
- }
- }
-}
-
-void btDiscreteDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
-{
- BT_PROFILE("predictUnconstraintMotion");
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- if (!body->isStaticOrKinematicObject())
- {
- //don't integrate/update velocities here, it happens in the constraint solver
-
- body->applyDamping(timeStep);
-
- body->predictIntegratedTransform(timeStep, body->getInterpolationWorldTransform());
- }
- }
-}
-
-void btDiscreteDynamicsWorld::startProfiling(btScalar timeStep)
-{
- (void)timeStep;
-
-#ifndef BT_NO_PROFILE
- CProfileManager::Reset();
-#endif //BT_NO_PROFILE
-}
-
-void btDiscreteDynamicsWorld::debugDrawConstraint(btTypedConstraint* constraint)
-{
- bool drawFrames = (getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawConstraints) != 0;
- bool drawLimits = (getDebugDrawer()->getDebugMode() & btIDebugDraw::DBG_DrawConstraintLimits) != 0;
- btScalar dbgDrawSize = constraint->getDbgDrawSize();
- if (dbgDrawSize <= btScalar(0.f))
- {
- return;
- }
-
- switch (constraint->getConstraintType())
- {
- case POINT2POINT_CONSTRAINT_TYPE:
- {
- btPoint2PointConstraint* p2pC = (btPoint2PointConstraint*)constraint;
- btTransform tr;
- tr.setIdentity();
- btVector3 pivot = p2pC->getPivotInA();
- pivot = p2pC->getRigidBodyA().getCenterOfMassTransform() * pivot;
- tr.setOrigin(pivot);
- getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- // that ideally should draw the same frame
- pivot = p2pC->getPivotInB();
- pivot = p2pC->getRigidBodyB().getCenterOfMassTransform() * pivot;
- tr.setOrigin(pivot);
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- }
- break;
- case HINGE_CONSTRAINT_TYPE:
- {
- btHingeConstraint* pHinge = (btHingeConstraint*)constraint;
- btTransform tr = pHinge->getRigidBodyA().getCenterOfMassTransform() * pHinge->getAFrame();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- tr = pHinge->getRigidBodyB().getCenterOfMassTransform() * pHinge->getBFrame();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- btScalar minAng = pHinge->getLowerLimit();
- btScalar maxAng = pHinge->getUpperLimit();
- if (minAng == maxAng)
- {
- break;
- }
- bool drawSect = true;
- if (!pHinge->hasLimit())
- {
- minAng = btScalar(0.f);
- maxAng = SIMD_2_PI;
- drawSect = false;
- }
- if (drawLimits)
- {
- btVector3& center = tr.getOrigin();
- btVector3 normal = tr.getBasis().getColumn(2);
- btVector3 axis = tr.getBasis().getColumn(0);
- getDebugDrawer()->drawArc(center, normal, axis, dbgDrawSize, dbgDrawSize, minAng, maxAng, btVector3(0, 0, 0), drawSect);
- }
- }
- break;
- case CONETWIST_CONSTRAINT_TYPE:
- {
- btConeTwistConstraint* pCT = (btConeTwistConstraint*)constraint;
- btTransform tr = pCT->getRigidBodyA().getCenterOfMassTransform() * pCT->getAFrame();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- tr = pCT->getRigidBodyB().getCenterOfMassTransform() * pCT->getBFrame();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- if (drawLimits)
- {
- //const btScalar length = btScalar(5);
- const btScalar length = dbgDrawSize;
- static int nSegments = 8 * 4;
- btScalar fAngleInRadians = btScalar(2. * 3.1415926) * (btScalar)(nSegments - 1) / btScalar(nSegments);
- btVector3 pPrev = pCT->GetPointForAngle(fAngleInRadians, length);
- pPrev = tr * pPrev;
- for (int i = 0; i < nSegments; i++)
- {
- fAngleInRadians = btScalar(2. * 3.1415926) * (btScalar)i / btScalar(nSegments);
- btVector3 pCur = pCT->GetPointForAngle(fAngleInRadians, length);
- pCur = tr * pCur;
- getDebugDrawer()->drawLine(pPrev, pCur, btVector3(0, 0, 0));
-
- if (i % (nSegments / 8) == 0)
- getDebugDrawer()->drawLine(tr.getOrigin(), pCur, btVector3(0, 0, 0));
-
- pPrev = pCur;
- }
- btScalar tws = pCT->getTwistSpan();
- btScalar twa = pCT->getTwistAngle();
- bool useFrameB = (pCT->getRigidBodyB().getInvMass() > btScalar(0.f));
- if (useFrameB)
- {
- tr = pCT->getRigidBodyB().getCenterOfMassTransform() * pCT->getBFrame();
- }
- else
- {
- tr = pCT->getRigidBodyA().getCenterOfMassTransform() * pCT->getAFrame();
- }
- btVector3 pivot = tr.getOrigin();
- btVector3 normal = tr.getBasis().getColumn(0);
- btVector3 axis1 = tr.getBasis().getColumn(1);
- getDebugDrawer()->drawArc(pivot, normal, axis1, dbgDrawSize, dbgDrawSize, -twa - tws, -twa + tws, btVector3(0, 0, 0), true);
- }
- }
- break;
- case D6_SPRING_CONSTRAINT_TYPE:
- case D6_CONSTRAINT_TYPE:
- {
- btGeneric6DofConstraint* p6DOF = (btGeneric6DofConstraint*)constraint;
- btTransform tr = p6DOF->getCalculatedTransformA();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- tr = p6DOF->getCalculatedTransformB();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- if (drawLimits)
- {
- tr = p6DOF->getCalculatedTransformA();
- const btVector3& center = p6DOF->getCalculatedTransformB().getOrigin();
- btVector3 up = tr.getBasis().getColumn(2);
- btVector3 axis = tr.getBasis().getColumn(0);
- btScalar minTh = p6DOF->getRotationalLimitMotor(1)->m_loLimit;
- btScalar maxTh = p6DOF->getRotationalLimitMotor(1)->m_hiLimit;
- btScalar minPs = p6DOF->getRotationalLimitMotor(2)->m_loLimit;
- btScalar maxPs = p6DOF->getRotationalLimitMotor(2)->m_hiLimit;
- getDebugDrawer()->drawSpherePatch(center, up, axis, dbgDrawSize * btScalar(.9f), minTh, maxTh, minPs, maxPs, btVector3(0, 0, 0));
- axis = tr.getBasis().getColumn(1);
- btScalar ay = p6DOF->getAngle(1);
- btScalar az = p6DOF->getAngle(2);
- btScalar cy = btCos(ay);
- btScalar sy = btSin(ay);
- btScalar cz = btCos(az);
- btScalar sz = btSin(az);
- btVector3 ref;
- ref[0] = cy * cz * axis[0] + cy * sz * axis[1] - sy * axis[2];
- ref[1] = -sz * axis[0] + cz * axis[1];
- ref[2] = cz * sy * axis[0] + sz * sy * axis[1] + cy * axis[2];
- tr = p6DOF->getCalculatedTransformB();
- btVector3 normal = -tr.getBasis().getColumn(0);
- btScalar minFi = p6DOF->getRotationalLimitMotor(0)->m_loLimit;
- btScalar maxFi = p6DOF->getRotationalLimitMotor(0)->m_hiLimit;
- if (minFi > maxFi)
- {
- getDebugDrawer()->drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, -SIMD_PI, SIMD_PI, btVector3(0, 0, 0), false);
- }
- else if (minFi < maxFi)
- {
- getDebugDrawer()->drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, minFi, maxFi, btVector3(0, 0, 0), true);
- }
- tr = p6DOF->getCalculatedTransformA();
- btVector3 bbMin = p6DOF->getTranslationalLimitMotor()->m_lowerLimit;
- btVector3 bbMax = p6DOF->getTranslationalLimitMotor()->m_upperLimit;
- getDebugDrawer()->drawBox(bbMin, bbMax, tr, btVector3(0, 0, 0));
- }
- }
- break;
- ///note: the code for D6_SPRING_2_CONSTRAINT_TYPE is identical to D6_CONSTRAINT_TYPE, the D6_CONSTRAINT_TYPE+D6_SPRING_CONSTRAINT_TYPE will likely become obsolete/deprecated at some stage
- case D6_SPRING_2_CONSTRAINT_TYPE:
- {
- {
- btGeneric6DofSpring2Constraint* p6DOF = (btGeneric6DofSpring2Constraint*)constraint;
- btTransform tr = p6DOF->getCalculatedTransformA();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- tr = p6DOF->getCalculatedTransformB();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- if (drawLimits)
- {
- tr = p6DOF->getCalculatedTransformA();
- const btVector3& center = p6DOF->getCalculatedTransformB().getOrigin();
- btVector3 up = tr.getBasis().getColumn(2);
- btVector3 axis = tr.getBasis().getColumn(0);
- btScalar minTh = p6DOF->getRotationalLimitMotor(1)->m_loLimit;
- btScalar maxTh = p6DOF->getRotationalLimitMotor(1)->m_hiLimit;
- if (minTh <= maxTh)
- {
- btScalar minPs = p6DOF->getRotationalLimitMotor(2)->m_loLimit;
- btScalar maxPs = p6DOF->getRotationalLimitMotor(2)->m_hiLimit;
- getDebugDrawer()->drawSpherePatch(center, up, axis, dbgDrawSize * btScalar(.9f), minTh, maxTh, minPs, maxPs, btVector3(0, 0, 0));
- }
- axis = tr.getBasis().getColumn(1);
- btScalar ay = p6DOF->getAngle(1);
- btScalar az = p6DOF->getAngle(2);
- btScalar cy = btCos(ay);
- btScalar sy = btSin(ay);
- btScalar cz = btCos(az);
- btScalar sz = btSin(az);
- btVector3 ref;
- ref[0] = cy * cz * axis[0] + cy * sz * axis[1] - sy * axis[2];
- ref[1] = -sz * axis[0] + cz * axis[1];
- ref[2] = cz * sy * axis[0] + sz * sy * axis[1] + cy * axis[2];
- tr = p6DOF->getCalculatedTransformB();
- btVector3 normal = -tr.getBasis().getColumn(0);
- btScalar minFi = p6DOF->getRotationalLimitMotor(0)->m_loLimit;
- btScalar maxFi = p6DOF->getRotationalLimitMotor(0)->m_hiLimit;
- if (minFi > maxFi)
- {
- getDebugDrawer()->drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, -SIMD_PI, SIMD_PI, btVector3(0, 0, 0), false);
- }
- else if (minFi < maxFi)
- {
- getDebugDrawer()->drawArc(center, normal, ref, dbgDrawSize, dbgDrawSize, minFi, maxFi, btVector3(0, 0, 0), true);
- }
- tr = p6DOF->getCalculatedTransformA();
- btVector3 bbMin = p6DOF->getTranslationalLimitMotor()->m_lowerLimit;
- btVector3 bbMax = p6DOF->getTranslationalLimitMotor()->m_upperLimit;
- getDebugDrawer()->drawBox(bbMin, bbMax, tr, btVector3(0, 0, 0));
- }
- }
- break;
- }
- case SLIDER_CONSTRAINT_TYPE:
- {
- btSliderConstraint* pSlider = (btSliderConstraint*)constraint;
- btTransform tr = pSlider->getCalculatedTransformA();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- tr = pSlider->getCalculatedTransformB();
- if (drawFrames) getDebugDrawer()->drawTransform(tr, dbgDrawSize);
- if (drawLimits)
- {
- btTransform tr = pSlider->getUseLinearReferenceFrameA() ? pSlider->getCalculatedTransformA() : pSlider->getCalculatedTransformB();
- btVector3 li_min = tr * btVector3(pSlider->getLowerLinLimit(), 0.f, 0.f);
- btVector3 li_max = tr * btVector3(pSlider->getUpperLinLimit(), 0.f, 0.f);
- getDebugDrawer()->drawLine(li_min, li_max, btVector3(0, 0, 0));
- btVector3 normal = tr.getBasis().getColumn(0);
- btVector3 axis = tr.getBasis().getColumn(1);
- btScalar a_min = pSlider->getLowerAngLimit();
- btScalar a_max = pSlider->getUpperAngLimit();
- const btVector3& center = pSlider->getCalculatedTransformB().getOrigin();
- getDebugDrawer()->drawArc(center, normal, axis, dbgDrawSize, dbgDrawSize, a_min, a_max, btVector3(0, 0, 0), true);
- }
- }
- break;
- default:
- break;
- }
- return;
-}
-
-void btDiscreteDynamicsWorld::setConstraintSolver(btConstraintSolver* solver)
-{
- if (m_ownsConstraintSolver)
- {
- btAlignedFree(m_constraintSolver);
- }
- m_ownsConstraintSolver = false;
- m_constraintSolver = solver;
- m_solverIslandCallback->m_solver = solver;
-}
-
-btConstraintSolver* btDiscreteDynamicsWorld::getConstraintSolver()
-{
- return m_constraintSolver;
-}
-
-int btDiscreteDynamicsWorld::getNumConstraints() const
-{
- return int(m_constraints.size());
-}
-btTypedConstraint* btDiscreteDynamicsWorld::getConstraint(int index)
-{
- return m_constraints[index];
-}
-const btTypedConstraint* btDiscreteDynamicsWorld::getConstraint(int index) const
-{
- return m_constraints[index];
-}
-
-void btDiscreteDynamicsWorld::serializeRigidBodies(btSerializer* serializer)
-{
- int i;
- //serialize all collision objects
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY)
- {
- int len = colObj->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = colObj->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_RIGIDBODY_CODE, colObj);
- }
- }
-
- for (i = 0; i < m_constraints.size(); i++)
- {
- btTypedConstraint* constraint = m_constraints[i];
- int size = constraint->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(size, 1);
- const char* structType = constraint->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_CONSTRAINT_CODE, constraint);
- }
-}
-
-void btDiscreteDynamicsWorld::serializeDynamicsWorldInfo(btSerializer* serializer)
-{
-#ifdef BT_USE_DOUBLE_PRECISION
- int len = sizeof(btDynamicsWorldDoubleData);
- btChunk* chunk = serializer->allocate(len, 1);
- btDynamicsWorldDoubleData* worldInfo = (btDynamicsWorldDoubleData*)chunk->m_oldPtr;
-#else //BT_USE_DOUBLE_PRECISION
- int len = sizeof(btDynamicsWorldFloatData);
- btChunk* chunk = serializer->allocate(len, 1);
- btDynamicsWorldFloatData* worldInfo = (btDynamicsWorldFloatData*)chunk->m_oldPtr;
-#endif //BT_USE_DOUBLE_PRECISION
-
- memset(worldInfo, 0x00, len);
-
- m_gravity.serialize(worldInfo->m_gravity);
- worldInfo->m_solverInfo.m_tau = getSolverInfo().m_tau;
- worldInfo->m_solverInfo.m_damping = getSolverInfo().m_damping;
- worldInfo->m_solverInfo.m_friction = getSolverInfo().m_friction;
- worldInfo->m_solverInfo.m_timeStep = getSolverInfo().m_timeStep;
-
- worldInfo->m_solverInfo.m_restitution = getSolverInfo().m_restitution;
- worldInfo->m_solverInfo.m_maxErrorReduction = getSolverInfo().m_maxErrorReduction;
- worldInfo->m_solverInfo.m_sor = getSolverInfo().m_sor;
- worldInfo->m_solverInfo.m_erp = getSolverInfo().m_erp;
-
- worldInfo->m_solverInfo.m_erp2 = getSolverInfo().m_erp2;
- worldInfo->m_solverInfo.m_globalCfm = getSolverInfo().m_globalCfm;
- worldInfo->m_solverInfo.m_splitImpulsePenetrationThreshold = getSolverInfo().m_splitImpulsePenetrationThreshold;
- worldInfo->m_solverInfo.m_splitImpulseTurnErp = getSolverInfo().m_splitImpulseTurnErp;
-
- worldInfo->m_solverInfo.m_linearSlop = getSolverInfo().m_linearSlop;
- worldInfo->m_solverInfo.m_warmstartingFactor = getSolverInfo().m_warmstartingFactor;
- worldInfo->m_solverInfo.m_maxGyroscopicForce = getSolverInfo().m_maxGyroscopicForce;
- worldInfo->m_solverInfo.m_singleAxisRollingFrictionThreshold = getSolverInfo().m_singleAxisRollingFrictionThreshold;
-
- worldInfo->m_solverInfo.m_numIterations = getSolverInfo().m_numIterations;
- worldInfo->m_solverInfo.m_solverMode = getSolverInfo().m_solverMode;
- worldInfo->m_solverInfo.m_restingContactRestitutionThreshold = getSolverInfo().m_restingContactRestitutionThreshold;
- worldInfo->m_solverInfo.m_minimumSolverBatchSize = getSolverInfo().m_minimumSolverBatchSize;
-
- worldInfo->m_solverInfo.m_splitImpulse = getSolverInfo().m_splitImpulse;
-
-
-#ifdef BT_USE_DOUBLE_PRECISION
- const char* structType = "btDynamicsWorldDoubleData";
-#else //BT_USE_DOUBLE_PRECISION
- const char* structType = "btDynamicsWorldFloatData";
-#endif //BT_USE_DOUBLE_PRECISION
- serializer->finalizeChunk(chunk, structType, BT_DYNAMICSWORLD_CODE, worldInfo);
-}
-
-void btDiscreteDynamicsWorld::serialize(btSerializer* serializer)
-{
- serializer->startSerialization();
-
- serializeDynamicsWorldInfo(serializer);
-
- serializeCollisionObjects(serializer);
-
- serializeRigidBodies(serializer);
-
- serializeContactManifolds(serializer);
-
- serializer->finishSerialization();
-}
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h b/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h
deleted file mode 100644
index 73607c61fd..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h
+++ /dev/null
@@ -1,244 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_DISCRETE_DYNAMICS_WORLD_H
-#define BT_DISCRETE_DYNAMICS_WORLD_H
-
-#include "btDynamicsWorld.h"
-class btDispatcher;
-class btOverlappingPairCache;
-class btConstraintSolver;
-class btSimulationIslandManager;
-class btTypedConstraint;
-class btActionInterface;
-class btPersistentManifold;
-class btIDebugDraw;
-
-struct InplaceSolverIslandCallback;
-
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btThreads.h"
-
-///btDiscreteDynamicsWorld provides discrete rigid body simulation
-///those classes replace the obsolete CcdPhysicsEnvironment/CcdPhysicsController
-ATTRIBUTE_ALIGNED16(class)
-btDiscreteDynamicsWorld : public btDynamicsWorld
-{
-protected:
- btAlignedObjectArray<btTypedConstraint*> m_sortedConstraints;
- InplaceSolverIslandCallback* m_solverIslandCallback;
-
- btConstraintSolver* m_constraintSolver;
-
- btSimulationIslandManager* m_islandManager;
-
- btAlignedObjectArray<btTypedConstraint*> m_constraints;
-
- btAlignedObjectArray<btRigidBody*> m_nonStaticRigidBodies;
-
- btVector3 m_gravity;
-
- //for variable timesteps
- btScalar m_localTime;
- btScalar m_fixedTimeStep;
- //for variable timesteps
-
- bool m_ownsIslandManager;
- bool m_ownsConstraintSolver;
- bool m_synchronizeAllMotionStates;
- bool m_applySpeculativeContactRestitution;
-
- btAlignedObjectArray<btActionInterface*> m_actions;
-
- int m_profileTimings;
-
- bool m_latencyMotionStateInterpolation;
-
- btAlignedObjectArray<btPersistentManifold*> m_predictiveManifolds;
- btSpinMutex m_predictiveManifoldsMutex; // used to synchronize threads creating predictive contacts
-
- virtual void predictUnconstraintMotion(btScalar timeStep);
-
- void integrateTransformsInternal(btRigidBody * *bodies, int numBodies, btScalar timeStep); // can be called in parallel
- virtual void integrateTransforms(btScalar timeStep);
-
- virtual void calculateSimulationIslands();
-
-
-
- virtual void updateActivationState(btScalar timeStep);
-
- void updateActions(btScalar timeStep);
-
- void startProfiling(btScalar timeStep);
-
- virtual void internalSingleStepSimulation(btScalar timeStep);
-
- void releasePredictiveContacts();
- void createPredictiveContactsInternal(btRigidBody * *bodies, int numBodies, btScalar timeStep); // can be called in parallel
- virtual void createPredictiveContacts(btScalar timeStep);
-
- virtual void saveKinematicState(btScalar timeStep);
-
- void serializeRigidBodies(btSerializer * serializer);
-
- void serializeDynamicsWorldInfo(btSerializer * serializer);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- ///this btDiscreteDynamicsWorld constructor gets created objects from the user, and will not delete those
- btDiscreteDynamicsWorld(btDispatcher * dispatcher, btBroadphaseInterface * pairCache, btConstraintSolver * constraintSolver, btCollisionConfiguration * collisionConfiguration);
-
- virtual ~btDiscreteDynamicsWorld();
-
- ///if maxSubSteps > 0, it will interpolate motion between fixedTimeStep's
- virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.));
-
- virtual void solveConstraints(btContactSolverInfo & solverInfo);
-
- virtual void synchronizeMotionStates();
-
- ///this can be useful to synchronize a single rigid body -> graphics object
- void synchronizeSingleMotionState(btRigidBody * body);
-
- virtual void addConstraint(btTypedConstraint * constraint, bool disableCollisionsBetweenLinkedBodies = false);
-
- virtual void removeConstraint(btTypedConstraint * constraint);
-
- virtual void addAction(btActionInterface*);
-
- virtual void removeAction(btActionInterface*);
-
- btSimulationIslandManager* getSimulationIslandManager()
- {
- return m_islandManager;
- }
-
- const btSimulationIslandManager* getSimulationIslandManager() const
- {
- return m_islandManager;
- }
-
- btCollisionWorld* getCollisionWorld()
- {
- return this;
- }
-
- virtual void setGravity(const btVector3& gravity);
-
- virtual btVector3 getGravity() const;
-
- virtual void addCollisionObject(btCollisionObject * collisionObject, int collisionFilterGroup = btBroadphaseProxy::StaticFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter ^ btBroadphaseProxy::StaticFilter);
-
- virtual void addRigidBody(btRigidBody * body);
-
- virtual void addRigidBody(btRigidBody * body, int group, int mask);
-
- virtual void removeRigidBody(btRigidBody * body);
-
- ///removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise call btCollisionWorld::removeCollisionObject
- virtual void removeCollisionObject(btCollisionObject * collisionObject);
-
- virtual void debugDrawConstraint(btTypedConstraint * constraint);
-
- virtual void debugDrawWorld();
-
- virtual void setConstraintSolver(btConstraintSolver * solver);
-
- virtual btConstraintSolver* getConstraintSolver();
-
- virtual int getNumConstraints() const;
-
- virtual btTypedConstraint* getConstraint(int index);
-
- virtual const btTypedConstraint* getConstraint(int index) const;
-
- virtual btDynamicsWorldType getWorldType() const
- {
- return BT_DISCRETE_DYNAMICS_WORLD;
- }
-
- ///the forces on each rigidbody is accumulating together with gravity. clear this after each timestep.
- virtual void clearForces();
-
- ///apply gravity, call this once per timestep
- virtual void applyGravity();
-
- virtual void setNumTasks(int numTasks)
- {
- (void)numTasks;
- }
-
- ///obsolete, use updateActions instead
- virtual void updateVehicles(btScalar timeStep)
- {
- updateActions(timeStep);
- }
-
- ///obsolete, use addAction instead
- virtual void addVehicle(btActionInterface * vehicle);
- ///obsolete, use removeAction instead
- virtual void removeVehicle(btActionInterface * vehicle);
- ///obsolete, use addAction instead
- virtual void addCharacter(btActionInterface * character);
- ///obsolete, use removeAction instead
- virtual void removeCharacter(btActionInterface * character);
-
- void setSynchronizeAllMotionStates(bool synchronizeAll)
- {
- m_synchronizeAllMotionStates = synchronizeAll;
- }
- bool getSynchronizeAllMotionStates() const
- {
- return m_synchronizeAllMotionStates;
- }
-
- void setApplySpeculativeContactRestitution(bool enable)
- {
- m_applySpeculativeContactRestitution = enable;
- }
-
- bool getApplySpeculativeContactRestitution() const
- {
- return m_applySpeculativeContactRestitution;
- }
-
- ///Preliminary serialization test for Bullet 2.76. Loading those files requires a separate parser (see Bullet/Demos/SerializeDemo)
- virtual void serialize(btSerializer * serializer);
-
- ///Interpolate motion state between previous and current transform, instead of current and next transform.
- ///This can relieve discontinuities in the rendering, due to penetrations
- void setLatencyMotionStateInterpolation(bool latencyInterpolation)
- {
- m_latencyMotionStateInterpolation = latencyInterpolation;
- }
- bool getLatencyMotionStateInterpolation() const
- {
- return m_latencyMotionStateInterpolation;
- }
-
- btAlignedObjectArray<btRigidBody*>& getNonStaticRigidBodies()
- {
- return m_nonStaticRigidBodies;
- }
-
- const btAlignedObjectArray<btRigidBody*>& getNonStaticRigidBodies() const
- {
- return m_nonStaticRigidBodies;
- }
-};
-
-#endif //BT_DISCRETE_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp b/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp
deleted file mode 100644
index 8207b47135..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btDiscreteDynamicsWorldMt.h"
-
-//collision detection
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "btSimulationIslandManagerMt.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btQuickprof.h"
-
-//rigidbody & constraints
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btHingeConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btConeTwistConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h"
-#include "BulletDynamics/ConstraintSolver/btSliderConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btContactConstraint.h"
-
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-
-#include "BulletDynamics/Dynamics/btActionInterface.h"
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btMotionState.h"
-
-#include "LinearMath/btSerializer.h"
-
-///
-/// btConstraintSolverPoolMt
-///
-
-btConstraintSolverPoolMt::ThreadSolver* btConstraintSolverPoolMt::getAndLockThreadSolver()
-{
- int i = 0;
-#if BT_THREADSAFE
- i = btGetCurrentThreadIndex() % m_solvers.size();
-#endif // #if BT_THREADSAFE
- while (true)
- {
- ThreadSolver& solver = m_solvers[i];
- if (solver.mutex.tryLock())
- {
- return &solver;
- }
- // failed, try the next one
- i = (i + 1) % m_solvers.size();
- }
- return NULL;
-}
-
-void btConstraintSolverPoolMt::init(btConstraintSolver** solvers, int numSolvers)
-{
- m_solverType = BT_SEQUENTIAL_IMPULSE_SOLVER;
- m_solvers.resize(numSolvers);
- for (int i = 0; i < numSolvers; ++i)
- {
- m_solvers[i].solver = solvers[i];
- }
- if (numSolvers > 0)
- {
- m_solverType = solvers[0]->getSolverType();
- }
-}
-
-// create the solvers for me
-btConstraintSolverPoolMt::btConstraintSolverPoolMt(int numSolvers)
-{
- btAlignedObjectArray<btConstraintSolver*> solvers;
- solvers.reserve(numSolvers);
- for (int i = 0; i < numSolvers; ++i)
- {
- btConstraintSolver* solver = new btSequentialImpulseConstraintSolver();
- solvers.push_back(solver);
- }
- init(&solvers[0], numSolvers);
-}
-
-// pass in fully constructed solvers (destructor will delete them)
-btConstraintSolverPoolMt::btConstraintSolverPoolMt(btConstraintSolver** solvers, int numSolvers)
-{
- init(solvers, numSolvers);
-}
-
-btConstraintSolverPoolMt::~btConstraintSolverPoolMt()
-{
- // delete all solvers
- for (int i = 0; i < m_solvers.size(); ++i)
- {
- ThreadSolver& solver = m_solvers[i];
- delete solver.solver;
- solver.solver = NULL;
- }
-}
-
-///solve a group of constraints
-btScalar btConstraintSolverPoolMt::solveGroup(btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifolds,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& info,
- btIDebugDraw* debugDrawer,
- btDispatcher* dispatcher)
-{
- ThreadSolver* ts = getAndLockThreadSolver();
- ts->solver->solveGroup(bodies, numBodies, manifolds, numManifolds, constraints, numConstraints, info, debugDrawer, dispatcher);
- ts->mutex.unlock();
- return 0.0f;
-}
-
-void btConstraintSolverPoolMt::reset()
-{
- for (int i = 0; i < m_solvers.size(); ++i)
- {
- ThreadSolver& solver = m_solvers[i];
- solver.mutex.lock();
- solver.solver->reset();
- solver.mutex.unlock();
- }
-}
-
-///
-/// btDiscreteDynamicsWorldMt
-///
-
-btDiscreteDynamicsWorldMt::btDiscreteDynamicsWorldMt(btDispatcher* dispatcher,
- btBroadphaseInterface* pairCache,
- btConstraintSolverPoolMt* solverPool,
- btConstraintSolver* constraintSolverMt,
- btCollisionConfiguration* collisionConfiguration)
- : btDiscreteDynamicsWorld(dispatcher, pairCache, solverPool, collisionConfiguration)
-{
- if (m_ownsIslandManager)
- {
- m_islandManager->~btSimulationIslandManager();
- btAlignedFree(m_islandManager);
- }
- {
- void* mem = btAlignedAlloc(sizeof(btSimulationIslandManagerMt), 16);
- btSimulationIslandManagerMt* im = new (mem) btSimulationIslandManagerMt();
- im->setMinimumSolverBatchSize(m_solverInfo.m_minimumSolverBatchSize);
- m_islandManager = im;
- }
- m_constraintSolverMt = constraintSolverMt;
-}
-
-btDiscreteDynamicsWorldMt::~btDiscreteDynamicsWorldMt()
-{
-}
-
-void btDiscreteDynamicsWorldMt::solveConstraints(btContactSolverInfo& solverInfo)
-{
- BT_PROFILE("solveConstraints");
-
- m_constraintSolver->prepareSolve(getCollisionWorld()->getNumCollisionObjects(), getCollisionWorld()->getDispatcher()->getNumManifolds());
-
- /// solve all the constraints for this island
- btSimulationIslandManagerMt* im = static_cast<btSimulationIslandManagerMt*>(m_islandManager);
- btSimulationIslandManagerMt::SolverParams solverParams;
- solverParams.m_solverPool = m_constraintSolver;
- solverParams.m_solverMt = m_constraintSolverMt;
- solverParams.m_solverInfo = &solverInfo;
- solverParams.m_debugDrawer = m_debugDrawer;
- solverParams.m_dispatcher = getCollisionWorld()->getDispatcher();
- im->buildAndProcessIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_constraints, solverParams);
-
- m_constraintSolver->allSolved(solverInfo, m_debugDrawer);
-}
-
-struct UpdaterUnconstrainedMotion : public btIParallelForBody
-{
- btScalar timeStep;
- btRigidBody** rigidBodies;
-
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- for (int i = iBegin; i < iEnd; ++i)
- {
- btRigidBody* body = rigidBodies[i];
- if (!body->isStaticOrKinematicObject())
- {
- //don't integrate/update velocities here, it happens in the constraint solver
- body->applyDamping(timeStep);
- body->predictIntegratedTransform(timeStep, body->getInterpolationWorldTransform());
- }
- }
- }
-};
-
-void btDiscreteDynamicsWorldMt::predictUnconstraintMotion(btScalar timeStep)
-{
- BT_PROFILE("predictUnconstraintMotion");
- if (m_nonStaticRigidBodies.size() > 0)
- {
- UpdaterUnconstrainedMotion update;
- update.timeStep = timeStep;
- update.rigidBodies = &m_nonStaticRigidBodies[0];
- int grainSize = 50; // num of iterations per task for task scheduler
- btParallelFor(0, m_nonStaticRigidBodies.size(), grainSize, update);
- }
-}
-
-void btDiscreteDynamicsWorldMt::createPredictiveContacts(btScalar timeStep)
-{
- BT_PROFILE("createPredictiveContacts");
- releasePredictiveContacts();
- if (m_nonStaticRigidBodies.size() > 0)
- {
- UpdaterCreatePredictiveContacts update;
- update.world = this;
- update.timeStep = timeStep;
- update.rigidBodies = &m_nonStaticRigidBodies[0];
- int grainSize = 50; // num of iterations per task for task scheduler
- btParallelFor(0, m_nonStaticRigidBodies.size(), grainSize, update);
- }
-}
-
-void btDiscreteDynamicsWorldMt::integrateTransforms(btScalar timeStep)
-{
- BT_PROFILE("integrateTransforms");
- if (m_nonStaticRigidBodies.size() > 0)
- {
- UpdaterIntegrateTransforms update;
- update.world = this;
- update.timeStep = timeStep;
- update.rigidBodies = &m_nonStaticRigidBodies[0];
- int grainSize = 50; // num of iterations per task for task scheduler
- btParallelFor(0, m_nonStaticRigidBodies.size(), grainSize, update);
- }
-}
-
-int btDiscreteDynamicsWorldMt::stepSimulation(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep)
-{
- int numSubSteps = btDiscreteDynamicsWorld::stepSimulation(timeStep, maxSubSteps, fixedTimeStep);
- if (btITaskScheduler* scheduler = btGetTaskScheduler())
- {
- // tell Bullet's threads to sleep, so other threads can run
- scheduler->sleepWorkerThreadsHint();
- }
- return numSubSteps;
-}
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.h b/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.h
deleted file mode 100644
index dccf35d7a7..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.h
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_DISCRETE_DYNAMICS_WORLD_MT_H
-#define BT_DISCRETE_DYNAMICS_WORLD_MT_H
-
-#include "btDiscreteDynamicsWorld.h"
-#include "btSimulationIslandManagerMt.h"
-#include "BulletDynamics/ConstraintSolver/btConstraintSolver.h"
-
-///
-/// btConstraintSolverPoolMt - masquerades as a constraint solver, but really it is a threadsafe pool of them.
-///
-/// Each solver in the pool is protected by a mutex. When solveGroup is called from a thread,
-/// the pool looks for a solver that isn't being used by another thread, locks it, and dispatches the
-/// call to the solver.
-/// So long as there are at least as many solvers as there are hardware threads, it should never need to
-/// spin wait.
-///
-class btConstraintSolverPoolMt : public btConstraintSolver
-{
-public:
- // create the solvers for me
- explicit btConstraintSolverPoolMt(int numSolvers);
-
- // pass in fully constructed solvers (destructor will delete them)
- btConstraintSolverPoolMt(btConstraintSolver** solvers, int numSolvers);
-
- virtual ~btConstraintSolverPoolMt();
-
- ///solve a group of constraints
- virtual btScalar solveGroup(btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifolds,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& info,
- btIDebugDraw* debugDrawer,
- btDispatcher* dispatcher) BT_OVERRIDE;
-
- virtual void reset() BT_OVERRIDE;
- virtual btConstraintSolverType getSolverType() const BT_OVERRIDE { return m_solverType; }
-
-private:
- const static size_t kCacheLineSize = 128;
- struct ThreadSolver
- {
- btConstraintSolver* solver;
- btSpinMutex mutex;
- char _cachelinePadding[kCacheLineSize - sizeof(btSpinMutex) - sizeof(void*)]; // keep mutexes from sharing a cache line
- };
- btAlignedObjectArray<ThreadSolver> m_solvers;
- btConstraintSolverType m_solverType;
-
- ThreadSolver* getAndLockThreadSolver();
- void init(btConstraintSolver** solvers, int numSolvers);
-};
-
-///
-/// btDiscreteDynamicsWorldMt -- a version of DiscreteDynamicsWorld with some minor changes to support
-/// solving simulation islands on multiple threads.
-///
-/// Should function exactly like btDiscreteDynamicsWorld.
-/// Also 3 methods that iterate over all of the rigidbodies can run in parallel:
-/// - predictUnconstraintMotion
-/// - integrateTransforms
-/// - createPredictiveContacts
-///
-ATTRIBUTE_ALIGNED16(class)
-btDiscreteDynamicsWorldMt : public btDiscreteDynamicsWorld
-{
-protected:
- btConstraintSolver* m_constraintSolverMt;
-
- virtual void solveConstraints(btContactSolverInfo & solverInfo) BT_OVERRIDE;
-
- virtual void predictUnconstraintMotion(btScalar timeStep) BT_OVERRIDE;
-
- struct UpdaterCreatePredictiveContacts : public btIParallelForBody
- {
- btScalar timeStep;
- btRigidBody** rigidBodies;
- btDiscreteDynamicsWorldMt* world;
-
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- world->createPredictiveContactsInternal(&rigidBodies[iBegin], iEnd - iBegin, timeStep);
- }
- };
- virtual void createPredictiveContacts(btScalar timeStep) BT_OVERRIDE;
-
- struct UpdaterIntegrateTransforms : public btIParallelForBody
- {
- btScalar timeStep;
- btRigidBody** rigidBodies;
- btDiscreteDynamicsWorldMt* world;
-
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- world->integrateTransformsInternal(&rigidBodies[iBegin], iEnd - iBegin, timeStep);
- }
- };
- virtual void integrateTransforms(btScalar timeStep) BT_OVERRIDE;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btDiscreteDynamicsWorldMt(btDispatcher * dispatcher,
- btBroadphaseInterface * pairCache,
- btConstraintSolverPoolMt * solverPool, // Note this should be a solver-pool for multi-threading
- btConstraintSolver * constraintSolverMt, // single multi-threaded solver for large islands (or NULL)
- btCollisionConfiguration * collisionConfiguration);
- virtual ~btDiscreteDynamicsWorldMt();
-
- virtual int stepSimulation(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep) BT_OVERRIDE;
-};
-
-#endif //BT_DISCRETE_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h b/thirdparty/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h
deleted file mode 100644
index 3c55234a8a..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btDynamicsWorld.h
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_DYNAMICS_WORLD_H
-#define BT_DYNAMICS_WORLD_H
-
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-
-class btTypedConstraint;
-class btActionInterface;
-class btConstraintSolver;
-class btDynamicsWorld;
-
-/// Type for the callback for each tick
-typedef void (*btInternalTickCallback)(btDynamicsWorld* world, btScalar timeStep);
-
-enum btDynamicsWorldType
-{
- BT_SIMPLE_DYNAMICS_WORLD = 1,
- BT_DISCRETE_DYNAMICS_WORLD = 2,
- BT_CONTINUOUS_DYNAMICS_WORLD = 3,
- BT_SOFT_RIGID_DYNAMICS_WORLD = 4,
- BT_GPU_DYNAMICS_WORLD = 5,
- BT_SOFT_MULTIBODY_DYNAMICS_WORLD = 6,
- BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD = 7
-};
-
-///The btDynamicsWorld is the interface class for several dynamics implementation, basic, discrete, parallel, and continuous etc.
-class btDynamicsWorld : public btCollisionWorld
-{
-protected:
- btInternalTickCallback m_internalTickCallback;
- btInternalTickCallback m_internalPreTickCallback;
- void* m_worldUserInfo;
-
- btContactSolverInfo m_solverInfo;
-
-public:
- btDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* broadphase, btCollisionConfiguration* collisionConfiguration)
- : btCollisionWorld(dispatcher, broadphase, collisionConfiguration), m_internalTickCallback(0), m_internalPreTickCallback(0), m_worldUserInfo(0)
- {
- }
-
- virtual ~btDynamicsWorld()
- {
- }
-
- ///stepSimulation proceeds the simulation over 'timeStep', units in preferably in seconds.
- ///By default, Bullet will subdivide the timestep in constant substeps of each 'fixedTimeStep'.
- ///in order to keep the simulation real-time, the maximum number of substeps can be clamped to 'maxSubSteps'.
- ///You can disable subdividing the timestep/substepping by passing maxSubSteps=0 as second argument to stepSimulation, but in that case you have to keep the timeStep constant.
- virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.)) = 0;
-
- virtual void debugDrawWorld() = 0;
-
- virtual void addConstraint(btTypedConstraint* constraint, bool disableCollisionsBetweenLinkedBodies = false)
- {
- (void)constraint;
- (void)disableCollisionsBetweenLinkedBodies;
- }
-
- virtual void removeConstraint(btTypedConstraint* constraint) { (void)constraint; }
-
- virtual void addAction(btActionInterface* action) = 0;
-
- virtual void removeAction(btActionInterface* action) = 0;
-
- //once a rigidbody is added to the dynamics world, it will get this gravity assigned
- //existing rigidbodies in the world get gravity assigned too, during this method
- virtual void setGravity(const btVector3& gravity) = 0;
- virtual btVector3 getGravity() const = 0;
-
- virtual void synchronizeMotionStates() = 0;
-
- virtual void addRigidBody(btRigidBody* body) = 0;
-
- virtual void addRigidBody(btRigidBody* body, int group, int mask) = 0;
-
- virtual void removeRigidBody(btRigidBody* body) = 0;
-
- virtual void setConstraintSolver(btConstraintSolver* solver) = 0;
-
- virtual btConstraintSolver* getConstraintSolver() = 0;
-
- virtual int getNumConstraints() const { return 0; }
-
- virtual btTypedConstraint* getConstraint(int index)
- {
- (void)index;
- return 0;
- }
-
- virtual const btTypedConstraint* getConstraint(int index) const
- {
- (void)index;
- return 0;
- }
-
- virtual btDynamicsWorldType getWorldType() const = 0;
-
- virtual void clearForces() = 0;
-
- /// Set the callback for when an internal tick (simulation substep) happens, optional user info
- void setInternalTickCallback(btInternalTickCallback cb, void* worldUserInfo = 0, bool isPreTick = false)
- {
- if (isPreTick)
- {
- m_internalPreTickCallback = cb;
- }
- else
- {
- m_internalTickCallback = cb;
- }
- m_worldUserInfo = worldUserInfo;
- }
-
- void setWorldUserInfo(void* worldUserInfo)
- {
- m_worldUserInfo = worldUserInfo;
- }
-
- void* getWorldUserInfo() const
- {
- return m_worldUserInfo;
- }
-
- btContactSolverInfo& getSolverInfo()
- {
- return m_solverInfo;
- }
-
- const btContactSolverInfo& getSolverInfo() const
- {
- return m_solverInfo;
- }
-
- ///obsolete, use addAction instead.
- virtual void addVehicle(btActionInterface* vehicle) { (void)vehicle; }
- ///obsolete, use removeAction instead
- virtual void removeVehicle(btActionInterface* vehicle) { (void)vehicle; }
- ///obsolete, use addAction instead.
- virtual void addCharacter(btActionInterface* character) { (void)character; }
- ///obsolete, use removeAction instead
- virtual void removeCharacter(btActionInterface* character) { (void)character; }
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btDynamicsWorldDoubleData
-{
- btContactSolverInfoDoubleData m_solverInfo;
- btVector3DoubleData m_gravity;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btDynamicsWorldFloatData
-{
- btContactSolverInfoFloatData m_solverInfo;
- btVector3FloatData m_gravity;
-};
-
-#endif //BT_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp b/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp
deleted file mode 100644
index 27fdead761..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.cpp
+++ /dev/null
@@ -1,505 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btRigidBody.h"
-#include "BulletCollision/CollisionShapes/btConvexShape.h"
-#include "LinearMath/btMinMax.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btMotionState.h"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "LinearMath/btSerializer.h"
-
-//'temporarily' global variables
-btScalar gDeactivationTime = btScalar(2.);
-bool gDisableDeactivation = false;
-static int uniqueId = 0;
-
-btRigidBody::btRigidBody(const btRigidBody::btRigidBodyConstructionInfo& constructionInfo)
-{
- setupRigidBody(constructionInfo);
-}
-
-btRigidBody::btRigidBody(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia)
-{
- btRigidBodyConstructionInfo cinfo(mass, motionState, collisionShape, localInertia);
- setupRigidBody(cinfo);
-}
-
-void btRigidBody::setupRigidBody(const btRigidBody::btRigidBodyConstructionInfo& constructionInfo)
-{
- m_internalType = CO_RIGID_BODY;
-
- m_linearVelocity.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- m_angularVelocity.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- m_angularFactor.setValue(1, 1, 1);
- m_linearFactor.setValue(1, 1, 1);
- m_gravity.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- m_gravity_acceleration.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0)),
- setDamping(constructionInfo.m_linearDamping, constructionInfo.m_angularDamping);
-
- m_linearSleepingThreshold = constructionInfo.m_linearSleepingThreshold;
- m_angularSleepingThreshold = constructionInfo.m_angularSleepingThreshold;
- m_optionalMotionState = constructionInfo.m_motionState;
- m_contactSolverType = 0;
- m_frictionSolverType = 0;
- m_additionalDamping = constructionInfo.m_additionalDamping;
- m_additionalDampingFactor = constructionInfo.m_additionalDampingFactor;
- m_additionalLinearDampingThresholdSqr = constructionInfo.m_additionalLinearDampingThresholdSqr;
- m_additionalAngularDampingThresholdSqr = constructionInfo.m_additionalAngularDampingThresholdSqr;
- m_additionalAngularDampingFactor = constructionInfo.m_additionalAngularDampingFactor;
-
- if (m_optionalMotionState)
- {
- m_optionalMotionState->getWorldTransform(m_worldTransform);
- }
- else
- {
- m_worldTransform = constructionInfo.m_startWorldTransform;
- }
-
- m_interpolationWorldTransform = m_worldTransform;
- m_interpolationLinearVelocity.setValue(0, 0, 0);
- m_interpolationAngularVelocity.setValue(0, 0, 0);
-
- //moved to btCollisionObject
- m_friction = constructionInfo.m_friction;
- m_rollingFriction = constructionInfo.m_rollingFriction;
- m_spinningFriction = constructionInfo.m_spinningFriction;
-
- m_restitution = constructionInfo.m_restitution;
-
- setCollisionShape(constructionInfo.m_collisionShape);
- m_debugBodyId = uniqueId++;
-
- setMassProps(constructionInfo.m_mass, constructionInfo.m_localInertia);
- updateInertiaTensor();
-
- m_rigidbodyFlags = BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY;
-
- m_deltaLinearVelocity.setZero();
- m_deltaAngularVelocity.setZero();
- m_invMass = m_inverseMass * m_linearFactor;
- m_pushVelocity.setZero();
- m_turnVelocity.setZero();
-}
-
-void btRigidBody::predictIntegratedTransform(btScalar timeStep, btTransform& predictedTransform)
-{
- btTransformUtil::integrateTransform(m_worldTransform, m_linearVelocity, m_angularVelocity, timeStep, predictedTransform);
-}
-
-void btRigidBody::saveKinematicState(btScalar timeStep)
-{
- //todo: clamp to some (user definable) safe minimum timestep, to limit maximum angular/linear velocities
- if (timeStep != btScalar(0.))
- {
- //if we use motionstate to synchronize world transforms, get the new kinematic/animated world transform
- if (getMotionState())
- getMotionState()->getWorldTransform(m_worldTransform);
- btVector3 linVel, angVel;
-
- btTransformUtil::calculateVelocity(m_interpolationWorldTransform, m_worldTransform, timeStep, m_linearVelocity, m_angularVelocity);
- m_interpolationLinearVelocity = m_linearVelocity;
- m_interpolationAngularVelocity = m_angularVelocity;
- m_interpolationWorldTransform = m_worldTransform;
- //printf("angular = %f %f %f\n",m_angularVelocity.getX(),m_angularVelocity.getY(),m_angularVelocity.getZ());
- }
-}
-
-void btRigidBody::getAabb(btVector3& aabbMin, btVector3& aabbMax) const
-{
- getCollisionShape()->getAabb(m_worldTransform, aabbMin, aabbMax);
-}
-
-void btRigidBody::setGravity(const btVector3& acceleration)
-{
- if (m_inverseMass != btScalar(0.0))
- {
- m_gravity = acceleration * (btScalar(1.0) / m_inverseMass);
- }
- m_gravity_acceleration = acceleration;
-}
-
-void btRigidBody::setDamping(btScalar lin_damping, btScalar ang_damping)
-{
-#ifdef BT_USE_OLD_DAMPING_METHOD
- m_linearDamping = btMax(lin_damping, btScalar(0.0));
- m_angularDamping = btMax(ang_damping, btScalar(0.0));
-#else
- m_linearDamping = btClamped(lin_damping, btScalar(0.0), btScalar(1.0));
- m_angularDamping = btClamped(ang_damping, btScalar(0.0), btScalar(1.0));
-#endif
-}
-
-///applyDamping damps the velocity, using the given m_linearDamping and m_angularDamping
-void btRigidBody::applyDamping(btScalar timeStep)
-{
- //On new damping: see discussion/issue report here: http://code.google.com/p/bullet/issues/detail?id=74
- //todo: do some performance comparisons (but other parts of the engine are probably bottleneck anyway
-
-#ifdef BT_USE_OLD_DAMPING_METHOD
- m_linearVelocity *= btMax((btScalar(1.0) - timeStep * m_linearDamping), btScalar(0.0));
- m_angularVelocity *= btMax((btScalar(1.0) - timeStep * m_angularDamping), btScalar(0.0));
-#else
- m_linearVelocity *= btPow(btScalar(1) - m_linearDamping, timeStep);
- m_angularVelocity *= btPow(btScalar(1) - m_angularDamping, timeStep);
-#endif
-
- if (m_additionalDamping)
- {
- //Additional damping can help avoiding lowpass jitter motion, help stability for ragdolls etc.
- //Such damping is undesirable, so once the overall simulation quality of the rigid body dynamics system has improved, this should become obsolete
- if ((m_angularVelocity.length2() < m_additionalAngularDampingThresholdSqr) &&
- (m_linearVelocity.length2() < m_additionalLinearDampingThresholdSqr))
- {
- m_angularVelocity *= m_additionalDampingFactor;
- m_linearVelocity *= m_additionalDampingFactor;
- }
-
- btScalar speed = m_linearVelocity.length();
- if (speed < m_linearDamping)
- {
- btScalar dampVel = btScalar(0.005);
- if (speed > dampVel)
- {
- btVector3 dir = m_linearVelocity.normalized();
- m_linearVelocity -= dir * dampVel;
- }
- else
- {
- m_linearVelocity.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- }
- }
-
- btScalar angSpeed = m_angularVelocity.length();
- if (angSpeed < m_angularDamping)
- {
- btScalar angDampVel = btScalar(0.005);
- if (angSpeed > angDampVel)
- {
- btVector3 dir = m_angularVelocity.normalized();
- m_angularVelocity -= dir * angDampVel;
- }
- else
- {
- m_angularVelocity.setValue(btScalar(0.), btScalar(0.), btScalar(0.));
- }
- }
- }
-}
-
-void btRigidBody::applyGravity()
-{
- if (isStaticOrKinematicObject())
- return;
-
- applyCentralForce(m_gravity);
-}
-
-void btRigidBody::clearGravity()
-{
- if (isStaticOrKinematicObject())
- return;
-
- applyCentralForce(-m_gravity);
-}
-
-void btRigidBody::proceedToTransform(const btTransform& newTrans)
-{
- setCenterOfMassTransform(newTrans);
-}
-
-void btRigidBody::setMassProps(btScalar mass, const btVector3& inertia)
-{
- if (mass == btScalar(0.))
- {
- m_collisionFlags |= btCollisionObject::CF_STATIC_OBJECT;
- m_inverseMass = btScalar(0.);
- }
- else
- {
- m_collisionFlags &= (~btCollisionObject::CF_STATIC_OBJECT);
- m_inverseMass = btScalar(1.0) / mass;
- }
-
- //Fg = m * a
- m_gravity = mass * m_gravity_acceleration;
-
- m_invInertiaLocal.setValue(inertia.x() != btScalar(0.0) ? btScalar(1.0) / inertia.x() : btScalar(0.0),
- inertia.y() != btScalar(0.0) ? btScalar(1.0) / inertia.y() : btScalar(0.0),
- inertia.z() != btScalar(0.0) ? btScalar(1.0) / inertia.z() : btScalar(0.0));
-
- m_invMass = m_linearFactor * m_inverseMass;
-}
-
-void btRigidBody::updateInertiaTensor()
-{
- m_invInertiaTensorWorld = m_worldTransform.getBasis().scaled(m_invInertiaLocal) * m_worldTransform.getBasis().transpose();
-}
-
-btVector3 btRigidBody::getLocalInertia() const
-{
- btVector3 inertiaLocal;
- const btVector3 inertia = m_invInertiaLocal;
- inertiaLocal.setValue(inertia.x() != btScalar(0.0) ? btScalar(1.0) / inertia.x() : btScalar(0.0),
- inertia.y() != btScalar(0.0) ? btScalar(1.0) / inertia.y() : btScalar(0.0),
- inertia.z() != btScalar(0.0) ? btScalar(1.0) / inertia.z() : btScalar(0.0));
- return inertiaLocal;
-}
-
-inline btVector3 evalEulerEqn(const btVector3& w1, const btVector3& w0, const btVector3& T, const btScalar dt,
- const btMatrix3x3& I)
-{
- const btVector3 w2 = I * w1 + w1.cross(I * w1) * dt - (T * dt + I * w0);
- return w2;
-}
-
-inline btMatrix3x3 evalEulerEqnDeriv(const btVector3& w1, const btVector3& w0, const btScalar dt,
- const btMatrix3x3& I)
-{
- btMatrix3x3 w1x, Iw1x;
- const btVector3 Iwi = (I * w1);
- w1.getSkewSymmetricMatrix(&w1x[0], &w1x[1], &w1x[2]);
- Iwi.getSkewSymmetricMatrix(&Iw1x[0], &Iw1x[1], &Iw1x[2]);
-
- const btMatrix3x3 dfw1 = I + (w1x * I - Iw1x) * dt;
- return dfw1;
-}
-
-btVector3 btRigidBody::computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const
-{
- btVector3 inertiaLocal = getLocalInertia();
- btMatrix3x3 inertiaTensorWorld = getWorldTransform().getBasis().scaled(inertiaLocal) * getWorldTransform().getBasis().transpose();
- btVector3 tmp = inertiaTensorWorld * getAngularVelocity();
- btVector3 gf = getAngularVelocity().cross(tmp);
- btScalar l2 = gf.length2();
- if (l2 > maxGyroscopicForce * maxGyroscopicForce)
- {
- gf *= btScalar(1.) / btSqrt(l2) * maxGyroscopicForce;
- }
- return gf;
-}
-
-btVector3 btRigidBody::computeGyroscopicImpulseImplicit_Body(btScalar step) const
-{
- btVector3 idl = getLocalInertia();
- btVector3 omega1 = getAngularVelocity();
- btQuaternion q = getWorldTransform().getRotation();
-
- // Convert to body coordinates
- btVector3 omegab = quatRotate(q.inverse(), omega1);
- btMatrix3x3 Ib;
- Ib.setValue(idl.x(), 0, 0,
- 0, idl.y(), 0,
- 0, 0, idl.z());
-
- btVector3 ibo = Ib * omegab;
-
- // Residual vector
- btVector3 f = step * omegab.cross(ibo);
-
- btMatrix3x3 skew0;
- omegab.getSkewSymmetricMatrix(&skew0[0], &skew0[1], &skew0[2]);
- btVector3 om = Ib * omegab;
- btMatrix3x3 skew1;
- om.getSkewSymmetricMatrix(&skew1[0], &skew1[1], &skew1[2]);
-
- // Jacobian
- btMatrix3x3 J = Ib + (skew0 * Ib - skew1) * step;
-
- // btMatrix3x3 Jinv = J.inverse();
- // btVector3 omega_div = Jinv*f;
- btVector3 omega_div = J.solve33(f);
-
- // Single Newton-Raphson update
- omegab = omegab - omega_div; //Solve33(J, f);
- // Back to world coordinates
- btVector3 omega2 = quatRotate(q, omegab);
- btVector3 gf = omega2 - omega1;
- return gf;
-}
-
-btVector3 btRigidBody::computeGyroscopicImpulseImplicit_World(btScalar step) const
-{
- // use full newton-euler equations. common practice to drop the wxIw term. want it for better tumbling behavior.
- // calculate using implicit euler step so it's stable.
-
- const btVector3 inertiaLocal = getLocalInertia();
- const btVector3 w0 = getAngularVelocity();
-
- btMatrix3x3 I;
-
- I = m_worldTransform.getBasis().scaled(inertiaLocal) *
- m_worldTransform.getBasis().transpose();
-
- // use newtons method to find implicit solution for new angular velocity (w')
- // f(w') = -(T*step + Iw) + Iw' + w' + w'xIw'*step = 0
- // df/dw' = I + 1xIw'*step + w'xI*step
-
- btVector3 w1 = w0;
-
- // one step of newton's method
- {
- const btVector3 fw = evalEulerEqn(w1, w0, btVector3(0, 0, 0), step, I);
- const btMatrix3x3 dfw = evalEulerEqnDeriv(w1, w0, step, I);
-
- btVector3 dw;
- dw = dfw.solve33(fw);
- //const btMatrix3x3 dfw_inv = dfw.inverse();
- //dw = dfw_inv*fw;
-
- w1 -= dw;
- }
-
- btVector3 gf = (w1 - w0);
- return gf;
-}
-
-void btRigidBody::integrateVelocities(btScalar step)
-{
- if (isStaticOrKinematicObject())
- return;
-
- m_linearVelocity += m_totalForce * (m_inverseMass * step);
- m_angularVelocity += m_invInertiaTensorWorld * m_totalTorque * step;
-
-#define MAX_ANGVEL SIMD_HALF_PI
- /// clamp angular velocity. collision calculations will fail on higher angular velocities
- btScalar angvel = m_angularVelocity.length();
- if (angvel * step > MAX_ANGVEL)
- {
- m_angularVelocity *= (MAX_ANGVEL / step) / angvel;
- }
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_angularVelocity);
- #endif
-}
-
-btQuaternion btRigidBody::getOrientation() const
-{
- btQuaternion orn;
- m_worldTransform.getBasis().getRotation(orn);
- return orn;
-}
-
-void btRigidBody::setCenterOfMassTransform(const btTransform& xform)
-{
- if (isKinematicObject())
- {
- m_interpolationWorldTransform = m_worldTransform;
- }
- else
- {
- m_interpolationWorldTransform = xform;
- }
- m_interpolationLinearVelocity = getLinearVelocity();
- m_interpolationAngularVelocity = getAngularVelocity();
- m_worldTransform = xform;
- updateInertiaTensor();
-}
-
-void btRigidBody::addConstraintRef(btTypedConstraint* c)
-{
- ///disable collision with the 'other' body
-
- int index = m_constraintRefs.findLinearSearch(c);
- //don't add constraints that are already referenced
- //btAssert(index == m_constraintRefs.size());
- if (index == m_constraintRefs.size())
- {
- m_constraintRefs.push_back(c);
- btCollisionObject* colObjA = &c->getRigidBodyA();
- btCollisionObject* colObjB = &c->getRigidBodyB();
- if (colObjA == this)
- {
- colObjA->setIgnoreCollisionCheck(colObjB, true);
- }
- else
- {
- colObjB->setIgnoreCollisionCheck(colObjA, true);
- }
- }
-}
-
-void btRigidBody::removeConstraintRef(btTypedConstraint* c)
-{
- int index = m_constraintRefs.findLinearSearch(c);
- //don't remove constraints that are not referenced
- if (index < m_constraintRefs.size())
- {
- m_constraintRefs.remove(c);
- btCollisionObject* colObjA = &c->getRigidBodyA();
- btCollisionObject* colObjB = &c->getRigidBodyB();
- if (colObjA == this)
- {
- colObjA->setIgnoreCollisionCheck(colObjB, false);
- }
- else
- {
- colObjB->setIgnoreCollisionCheck(colObjA, false);
- }
- }
-}
-
-int btRigidBody::calculateSerializeBufferSize() const
-{
- int sz = sizeof(btRigidBodyData);
- return sz;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btRigidBody::serialize(void* dataBuffer, class btSerializer* serializer) const
-{
- btRigidBodyData* rbd = (btRigidBodyData*)dataBuffer;
-
- btCollisionObject::serialize(&rbd->m_collisionObjectData, serializer);
-
- m_invInertiaTensorWorld.serialize(rbd->m_invInertiaTensorWorld);
- m_linearVelocity.serialize(rbd->m_linearVelocity);
- m_angularVelocity.serialize(rbd->m_angularVelocity);
- rbd->m_inverseMass = m_inverseMass;
- m_angularFactor.serialize(rbd->m_angularFactor);
- m_linearFactor.serialize(rbd->m_linearFactor);
- m_gravity.serialize(rbd->m_gravity);
- m_gravity_acceleration.serialize(rbd->m_gravity_acceleration);
- m_invInertiaLocal.serialize(rbd->m_invInertiaLocal);
- m_totalForce.serialize(rbd->m_totalForce);
- m_totalTorque.serialize(rbd->m_totalTorque);
- rbd->m_linearDamping = m_linearDamping;
- rbd->m_angularDamping = m_angularDamping;
- rbd->m_additionalDamping = m_additionalDamping;
- rbd->m_additionalDampingFactor = m_additionalDampingFactor;
- rbd->m_additionalLinearDampingThresholdSqr = m_additionalLinearDampingThresholdSqr;
- rbd->m_additionalAngularDampingThresholdSqr = m_additionalAngularDampingThresholdSqr;
- rbd->m_additionalAngularDampingFactor = m_additionalAngularDampingFactor;
- rbd->m_linearSleepingThreshold = m_linearSleepingThreshold;
- rbd->m_angularSleepingThreshold = m_angularSleepingThreshold;
-
- // Fill padding with zeros to appease msan.
-#ifdef BT_USE_DOUBLE_PRECISION
- memset(rbd->m_padding, 0, sizeof(rbd->m_padding));
-#endif
-
- return btRigidBodyDataName;
-}
-
-void btRigidBody::serializeSingleObject(class btSerializer* serializer) const
-{
- btChunk* chunk = serializer->allocate(calculateSerializeBufferSize(), 1);
- const char* structType = serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_RIGIDBODY_CODE, (void*)this);
-}
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.h b/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.h
deleted file mode 100644
index 7442dd1e6a..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btRigidBody.h
+++ /dev/null
@@ -1,687 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_RIGIDBODY_H
-#define BT_RIGIDBODY_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btTransform.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-class btCollisionShape;
-class btMotionState;
-class btTypedConstraint;
-
-extern btScalar gDeactivationTime;
-extern bool gDisableDeactivation;
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btRigidBodyData btRigidBodyDoubleData
-#define btRigidBodyDataName "btRigidBodyDoubleData"
-#else
-#define btRigidBodyData btRigidBodyFloatData
-#define btRigidBodyDataName "btRigidBodyFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-enum btRigidBodyFlags
-{
- BT_DISABLE_WORLD_GRAVITY = 1,
- ///BT_ENABLE_GYROPSCOPIC_FORCE flags is enabled by default in Bullet 2.83 and onwards.
- ///and it BT_ENABLE_GYROPSCOPIC_FORCE becomes equivalent to BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY
- ///See Demos/GyroscopicDemo and computeGyroscopicImpulseImplicit
- BT_ENABLE_GYROSCOPIC_FORCE_EXPLICIT = 2,
- BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_WORLD = 4,
- BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY = 8,
- BT_ENABLE_GYROPSCOPIC_FORCE = BT_ENABLE_GYROSCOPIC_FORCE_IMPLICIT_BODY,
-};
-
-///The btRigidBody is the main class for rigid body objects. It is derived from btCollisionObject, so it keeps a pointer to a btCollisionShape.
-///It is recommended for performance and memory use to share btCollisionShape objects whenever possible.
-///There are 3 types of rigid bodies:
-///- A) Dynamic rigid bodies, with positive mass. Motion is controlled by rigid body dynamics.
-///- B) Fixed objects with zero mass. They are not moving (basically collision objects)
-///- C) Kinematic objects, which are objects without mass, but the user can move them. There is one-way interaction, and Bullet calculates a velocity based on the timestep and previous and current world transform.
-///Bullet automatically deactivates dynamic rigid bodies, when the velocity is below a threshold for a given time.
-///Deactivated (sleeping) rigid bodies don't take any processing time, except a minor broadphase collision detection impact (to allow active objects to activate/wake up sleeping objects)
-class btRigidBody : public btCollisionObject
-{
- btMatrix3x3 m_invInertiaTensorWorld;
- btVector3 m_linearVelocity;
- btVector3 m_angularVelocity;
- btScalar m_inverseMass;
- btVector3 m_linearFactor;
-
- btVector3 m_gravity;
- btVector3 m_gravity_acceleration;
- btVector3 m_invInertiaLocal;
- btVector3 m_totalForce;
- btVector3 m_totalTorque;
-
- btScalar m_linearDamping;
- btScalar m_angularDamping;
-
- bool m_additionalDamping;
- btScalar m_additionalDampingFactor;
- btScalar m_additionalLinearDampingThresholdSqr;
- btScalar m_additionalAngularDampingThresholdSqr;
- btScalar m_additionalAngularDampingFactor;
-
- btScalar m_linearSleepingThreshold;
- btScalar m_angularSleepingThreshold;
-
- //m_optionalMotionState allows to automatic synchronize the world transform for active objects
- btMotionState* m_optionalMotionState;
-
- //keep track of typed constraints referencing this rigid body, to disable collision between linked bodies
- btAlignedObjectArray<btTypedConstraint*> m_constraintRefs;
-
- int m_rigidbodyFlags;
-
- int m_debugBodyId;
-
-protected:
- ATTRIBUTE_ALIGNED16(btVector3 m_deltaLinearVelocity);
- btVector3 m_deltaAngularVelocity;
- btVector3 m_angularFactor;
- btVector3 m_invMass;
- btVector3 m_pushVelocity;
- btVector3 m_turnVelocity;
-
-public:
- ///The btRigidBodyConstructionInfo structure provides information to create a rigid body. Setting mass to zero creates a fixed (non-dynamic) rigid body.
- ///For dynamic objects, you can use the collision shape to approximate the local inertia tensor, otherwise use the zero vector (default argument)
- ///You can use the motion state to synchronize the world transform between physics and graphics objects.
- ///And if the motion state is provided, the rigid body will initialize its initial world transform from the motion state,
- ///m_startWorldTransform is only used when you don't provide a motion state.
- struct btRigidBodyConstructionInfo
- {
- btScalar m_mass;
-
- ///When a motionState is provided, the rigid body will initialize its world transform from the motion state
- ///In this case, m_startWorldTransform is ignored.
- btMotionState* m_motionState;
- btTransform m_startWorldTransform;
-
- btCollisionShape* m_collisionShape;
- btVector3 m_localInertia;
- btScalar m_linearDamping;
- btScalar m_angularDamping;
-
- ///best simulation results when friction is non-zero
- btScalar m_friction;
- ///the m_rollingFriction prevents rounded shapes, such as spheres, cylinders and capsules from rolling forever.
- ///See Bullet/Demos/RollingFrictionDemo for usage
- btScalar m_rollingFriction;
- btScalar m_spinningFriction; //torsional friction around contact normal
-
- ///best simulation results using zero restitution.
- btScalar m_restitution;
-
- btScalar m_linearSleepingThreshold;
- btScalar m_angularSleepingThreshold;
-
- //Additional damping can help avoiding lowpass jitter motion, help stability for ragdolls etc.
- //Such damping is undesirable, so once the overall simulation quality of the rigid body dynamics system has improved, this should become obsolete
- bool m_additionalDamping;
- btScalar m_additionalDampingFactor;
- btScalar m_additionalLinearDampingThresholdSqr;
- btScalar m_additionalAngularDampingThresholdSqr;
- btScalar m_additionalAngularDampingFactor;
-
- btRigidBodyConstructionInfo(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia = btVector3(0, 0, 0)) : m_mass(mass),
- m_motionState(motionState),
- m_collisionShape(collisionShape),
- m_localInertia(localInertia),
- m_linearDamping(btScalar(0.)),
- m_angularDamping(btScalar(0.)),
- m_friction(btScalar(0.5)),
- m_rollingFriction(btScalar(0)),
- m_spinningFriction(btScalar(0)),
- m_restitution(btScalar(0.)),
- m_linearSleepingThreshold(btScalar(0.8)),
- m_angularSleepingThreshold(btScalar(1.f)),
- m_additionalDamping(false),
- m_additionalDampingFactor(btScalar(0.005)),
- m_additionalLinearDampingThresholdSqr(btScalar(0.01)),
- m_additionalAngularDampingThresholdSqr(btScalar(0.01)),
- m_additionalAngularDampingFactor(btScalar(0.01))
- {
- m_startWorldTransform.setIdentity();
- }
- };
-
- ///btRigidBody constructor using construction info
- btRigidBody(const btRigidBodyConstructionInfo& constructionInfo);
-
- ///btRigidBody constructor for backwards compatibility.
- ///To specify friction (etc) during rigid body construction, please use the other constructor (using btRigidBodyConstructionInfo)
- btRigidBody(btScalar mass, btMotionState* motionState, btCollisionShape* collisionShape, const btVector3& localInertia = btVector3(0, 0, 0));
-
- virtual ~btRigidBody()
- {
- //No constraints should point to this rigidbody
- //Remove constraints from the dynamics world before you delete the related rigidbodies.
- btAssert(m_constraintRefs.size() == 0);
- }
-
-protected:
- ///setupRigidBody is only used internally by the constructor
- void setupRigidBody(const btRigidBodyConstructionInfo& constructionInfo);
-
-public:
- void proceedToTransform(const btTransform& newTrans);
-
- ///to keep collision detection and dynamics separate we don't store a rigidbody pointer
- ///but a rigidbody is derived from btCollisionObject, so we can safely perform an upcast
- static const btRigidBody* upcast(const btCollisionObject* colObj)
- {
- if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY)
- return (const btRigidBody*)colObj;
- return 0;
- }
- static btRigidBody* upcast(btCollisionObject* colObj)
- {
- if (colObj->getInternalType() & btCollisionObject::CO_RIGID_BODY)
- return (btRigidBody*)colObj;
- return 0;
- }
-
- /// continuous collision detection needs prediction
- void predictIntegratedTransform(btScalar step, btTransform& predictedTransform);
-
- void saveKinematicState(btScalar step);
-
- void applyGravity();
-
- void clearGravity();
-
- void setGravity(const btVector3& acceleration);
-
- const btVector3& getGravity() const
- {
- return m_gravity_acceleration;
- }
-
- void setDamping(btScalar lin_damping, btScalar ang_damping);
-
- btScalar getLinearDamping() const
- {
- return m_linearDamping;
- }
-
- btScalar getAngularDamping() const
- {
- return m_angularDamping;
- }
-
- btScalar getLinearSleepingThreshold() const
- {
- return m_linearSleepingThreshold;
- }
-
- btScalar getAngularSleepingThreshold() const
- {
- return m_angularSleepingThreshold;
- }
-
- void applyDamping(btScalar timeStep);
-
- SIMD_FORCE_INLINE const btCollisionShape* getCollisionShape() const
- {
- return m_collisionShape;
- }
-
- SIMD_FORCE_INLINE btCollisionShape* getCollisionShape()
- {
- return m_collisionShape;
- }
-
- void setMassProps(btScalar mass, const btVector3& inertia);
-
- const btVector3& getLinearFactor() const
- {
- return m_linearFactor;
- }
- void setLinearFactor(const btVector3& linearFactor)
- {
- m_linearFactor = linearFactor;
- m_invMass = m_linearFactor * m_inverseMass;
- }
- btScalar getInvMass() const { return m_inverseMass; }
- btScalar getMass() const { return m_inverseMass == btScalar(0.) ? btScalar(0.) : btScalar(1.0) / m_inverseMass; }
- const btMatrix3x3& getInvInertiaTensorWorld() const
- {
- return m_invInertiaTensorWorld;
- }
-
- void integrateVelocities(btScalar step);
-
- void setCenterOfMassTransform(const btTransform& xform);
-
- void applyCentralForce(const btVector3& force)
- {
- m_totalForce += force * m_linearFactor;
- }
-
- const btVector3& getTotalForce() const
- {
- return m_totalForce;
- };
-
- const btVector3& getTotalTorque() const
- {
- return m_totalTorque;
- };
-
- const btVector3& getInvInertiaDiagLocal() const
- {
- return m_invInertiaLocal;
- };
-
- void setInvInertiaDiagLocal(const btVector3& diagInvInertia)
- {
- m_invInertiaLocal = diagInvInertia;
- }
-
- void setSleepingThresholds(btScalar linear, btScalar angular)
- {
- m_linearSleepingThreshold = linear;
- m_angularSleepingThreshold = angular;
- }
-
- void applyTorque(const btVector3& torque)
- {
- m_totalTorque += torque * m_angularFactor;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_totalTorque);
- #endif
- }
-
- void applyForce(const btVector3& force, const btVector3& rel_pos)
- {
- applyCentralForce(force);
- applyTorque(rel_pos.cross(force * m_linearFactor));
- }
-
- void applyCentralImpulse(const btVector3& impulse)
- {
- m_linearVelocity += impulse * m_linearFactor * m_inverseMass;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_linearVelocity);
- #endif
- }
-
- void applyTorqueImpulse(const btVector3& torque)
- {
- m_angularVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_angularVelocity);
- #endif
- }
-
- void applyImpulse(const btVector3& impulse, const btVector3& rel_pos)
- {
- if (m_inverseMass != btScalar(0.))
- {
- applyCentralImpulse(impulse);
- if (m_angularFactor)
- {
- applyTorqueImpulse(rel_pos.cross(impulse * m_linearFactor));
- }
- }
- }
-
- void applyPushImpulse(const btVector3& impulse, const btVector3& rel_pos)
- {
- if (m_inverseMass != btScalar(0.))
- {
- applyCentralPushImpulse(impulse);
- if (m_angularFactor)
- {
- applyTorqueTurnImpulse(rel_pos.cross(impulse * m_linearFactor));
- }
- }
- }
-
- btVector3 getPushVelocity() const
- {
- return m_pushVelocity;
- }
-
- btVector3 getTurnVelocity() const
- {
- return m_turnVelocity;
- }
-
- void setPushVelocity(const btVector3& v)
- {
- m_pushVelocity = v;
- }
-
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- void clampVelocity(btVector3& v) const {
- v.setX(
- fmax(-BT_CLAMP_VELOCITY_TO,
- fmin(BT_CLAMP_VELOCITY_TO, v.getX()))
- );
- v.setY(
- fmax(-BT_CLAMP_VELOCITY_TO,
- fmin(BT_CLAMP_VELOCITY_TO, v.getY()))
- );
- v.setZ(
- fmax(-BT_CLAMP_VELOCITY_TO,
- fmin(BT_CLAMP_VELOCITY_TO, v.getZ()))
- );
- }
- #endif
-
- void setTurnVelocity(const btVector3& v)
- {
- m_turnVelocity = v;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_turnVelocity);
- #endif
- }
-
- void applyCentralPushImpulse(const btVector3& impulse)
- {
- m_pushVelocity += impulse * m_linearFactor * m_inverseMass;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_pushVelocity);
- #endif
- }
-
- void applyTorqueTurnImpulse(const btVector3& torque)
- {
- m_turnVelocity += m_invInertiaTensorWorld * torque * m_angularFactor;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_turnVelocity);
- #endif
- }
-
- void clearForces()
- {
- m_totalForce.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- m_totalTorque.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- }
-
- void updateInertiaTensor();
-
- const btVector3& getCenterOfMassPosition() const
- {
- return m_worldTransform.getOrigin();
- }
- btQuaternion getOrientation() const;
-
- const btTransform& getCenterOfMassTransform() const
- {
- return m_worldTransform;
- }
- const btVector3& getLinearVelocity() const
- {
- return m_linearVelocity;
- }
- const btVector3& getAngularVelocity() const
- {
- return m_angularVelocity;
- }
-
- inline void setLinearVelocity(const btVector3& lin_vel)
- {
- m_updateRevision++;
- m_linearVelocity = lin_vel;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_linearVelocity);
- #endif
- }
-
- inline void setAngularVelocity(const btVector3& ang_vel)
- {
- m_updateRevision++;
- m_angularVelocity = ang_vel;
- #if defined(BT_CLAMP_VELOCITY_TO) && BT_CLAMP_VELOCITY_TO > 0
- clampVelocity(m_angularVelocity);
- #endif
- }
-
- btVector3 getVelocityInLocalPoint(const btVector3& rel_pos) const
- {
- //we also calculate lin/ang velocity for kinematic objects
- return m_linearVelocity + m_angularVelocity.cross(rel_pos);
-
- //for kinematic objects, we could also use use:
- // return (m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep;
- }
-
- btVector3 getPushVelocityInLocalPoint(const btVector3& rel_pos) const
- {
- //we also calculate lin/ang velocity for kinematic objects
- return m_pushVelocity + m_turnVelocity.cross(rel_pos);
- }
-
- void translate(const btVector3& v)
- {
- m_worldTransform.getOrigin() += v;
- }
-
- void getAabb(btVector3& aabbMin, btVector3& aabbMax) const;
-
- SIMD_FORCE_INLINE btScalar computeImpulseDenominator(const btVector3& pos, const btVector3& normal) const
- {
- btVector3 r0 = pos - getCenterOfMassPosition();
-
- btVector3 c0 = (r0).cross(normal);
-
- btVector3 vec = (c0 * getInvInertiaTensorWorld()).cross(r0);
-
- return m_inverseMass + normal.dot(vec);
- }
-
- SIMD_FORCE_INLINE btScalar computeAngularImpulseDenominator(const btVector3& axis) const
- {
- btVector3 vec = axis * getInvInertiaTensorWorld();
- return axis.dot(vec);
- }
-
- SIMD_FORCE_INLINE void updateDeactivation(btScalar timeStep)
- {
- if ((getActivationState() == ISLAND_SLEEPING) || (getActivationState() == DISABLE_DEACTIVATION))
- return;
-
- if ((getLinearVelocity().length2() < m_linearSleepingThreshold * m_linearSleepingThreshold) &&
- (getAngularVelocity().length2() < m_angularSleepingThreshold * m_angularSleepingThreshold))
- {
- m_deactivationTime += timeStep;
- }
- else
- {
- m_deactivationTime = btScalar(0.);
- setActivationState(0);
- }
- }
-
- SIMD_FORCE_INLINE bool wantsSleeping()
- {
- if (getActivationState() == DISABLE_DEACTIVATION)
- return false;
-
- //disable deactivation
- if (gDisableDeactivation || (gDeactivationTime == btScalar(0.)))
- return false;
-
- if ((getActivationState() == ISLAND_SLEEPING) || (getActivationState() == WANTS_DEACTIVATION))
- return true;
-
- if (m_deactivationTime > gDeactivationTime)
- {
- return true;
- }
- return false;
- }
-
- const btBroadphaseProxy* getBroadphaseProxy() const
- {
- return m_broadphaseHandle;
- }
- btBroadphaseProxy* getBroadphaseProxy()
- {
- return m_broadphaseHandle;
- }
- void setNewBroadphaseProxy(btBroadphaseProxy* broadphaseProxy)
- {
- m_broadphaseHandle = broadphaseProxy;
- }
-
- //btMotionState allows to automatic synchronize the world transform for active objects
- btMotionState* getMotionState()
- {
- return m_optionalMotionState;
- }
- const btMotionState* getMotionState() const
- {
- return m_optionalMotionState;
- }
- void setMotionState(btMotionState* motionState)
- {
- m_optionalMotionState = motionState;
- if (m_optionalMotionState)
- motionState->getWorldTransform(m_worldTransform);
- }
-
- //for experimental overriding of friction/contact solver func
- int m_contactSolverType;
- int m_frictionSolverType;
-
- void setAngularFactor(const btVector3& angFac)
- {
- m_updateRevision++;
- m_angularFactor = angFac;
- }
-
- void setAngularFactor(btScalar angFac)
- {
- m_updateRevision++;
- m_angularFactor.setValue(angFac, angFac, angFac);
- }
- const btVector3& getAngularFactor() const
- {
- return m_angularFactor;
- }
-
- //is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase?
- bool isInWorld() const
- {
- return (getBroadphaseProxy() != 0);
- }
-
- void addConstraintRef(btTypedConstraint* c);
- void removeConstraintRef(btTypedConstraint* c);
-
- btTypedConstraint* getConstraintRef(int index)
- {
- return m_constraintRefs[index];
- }
-
- int getNumConstraintRefs() const
- {
- return m_constraintRefs.size();
- }
-
- void setFlags(int flags)
- {
- m_rigidbodyFlags = flags;
- }
-
- int getFlags() const
- {
- return m_rigidbodyFlags;
- }
-
- ///perform implicit force computation in world space
- btVector3 computeGyroscopicImpulseImplicit_World(btScalar dt) const;
-
- ///perform implicit force computation in body space (inertial frame)
- btVector3 computeGyroscopicImpulseImplicit_Body(btScalar step) const;
-
- ///explicit version is best avoided, it gains energy
- btVector3 computeGyroscopicForceExplicit(btScalar maxGyroscopicForce) const;
- btVector3 getLocalInertia() const;
-
- ///////////////////////////////////////////////
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
-
- virtual void serializeSingleObject(class btSerializer* serializer) const;
-};
-
-//@todo add m_optionalMotionState and m_constraintRefs to btRigidBodyData
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btRigidBodyFloatData
-{
- btCollisionObjectFloatData m_collisionObjectData;
- btMatrix3x3FloatData m_invInertiaTensorWorld;
- btVector3FloatData m_linearVelocity;
- btVector3FloatData m_angularVelocity;
- btVector3FloatData m_angularFactor;
- btVector3FloatData m_linearFactor;
- btVector3FloatData m_gravity;
- btVector3FloatData m_gravity_acceleration;
- btVector3FloatData m_invInertiaLocal;
- btVector3FloatData m_totalForce;
- btVector3FloatData m_totalTorque;
- float m_inverseMass;
- float m_linearDamping;
- float m_angularDamping;
- float m_additionalDampingFactor;
- float m_additionalLinearDampingThresholdSqr;
- float m_additionalAngularDampingThresholdSqr;
- float m_additionalAngularDampingFactor;
- float m_linearSleepingThreshold;
- float m_angularSleepingThreshold;
- int m_additionalDamping;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btRigidBodyDoubleData
-{
- btCollisionObjectDoubleData m_collisionObjectData;
- btMatrix3x3DoubleData m_invInertiaTensorWorld;
- btVector3DoubleData m_linearVelocity;
- btVector3DoubleData m_angularVelocity;
- btVector3DoubleData m_angularFactor;
- btVector3DoubleData m_linearFactor;
- btVector3DoubleData m_gravity;
- btVector3DoubleData m_gravity_acceleration;
- btVector3DoubleData m_invInertiaLocal;
- btVector3DoubleData m_totalForce;
- btVector3DoubleData m_totalTorque;
- double m_inverseMass;
- double m_linearDamping;
- double m_angularDamping;
- double m_additionalDampingFactor;
- double m_additionalLinearDampingThresholdSqr;
- double m_additionalAngularDampingThresholdSqr;
- double m_additionalAngularDampingFactor;
- double m_linearSleepingThreshold;
- double m_angularSleepingThreshold;
- int m_additionalDamping;
- char m_padding[4];
-};
-
-#endif //BT_RIGIDBODY_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp b/thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp
deleted file mode 100644
index 8103390fb1..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSimpleDynamicsWorld.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-
-/*
- Make sure this dummy function never changes so that it
- can be used by probes that are checking whether the
- library is actually installed.
-*/
-extern "C"
-{
- void btBulletDynamicsProbe();
- void btBulletDynamicsProbe() {}
-}
-
-btSimpleDynamicsWorld::btSimpleDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration)
- : btDynamicsWorld(dispatcher, pairCache, collisionConfiguration),
- m_constraintSolver(constraintSolver),
- m_ownsConstraintSolver(false),
- m_gravity(0, 0, -10)
-{
-}
-
-btSimpleDynamicsWorld::~btSimpleDynamicsWorld()
-{
- if (m_ownsConstraintSolver)
- btAlignedFree(m_constraintSolver);
-}
-
-int btSimpleDynamicsWorld::stepSimulation(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep)
-{
- (void)fixedTimeStep;
- (void)maxSubSteps;
-
- ///apply gravity, predict motion
- predictUnconstraintMotion(timeStep);
-
- btDispatcherInfo& dispatchInfo = getDispatchInfo();
- dispatchInfo.m_timeStep = timeStep;
- dispatchInfo.m_stepCount = 0;
- dispatchInfo.m_debugDraw = getDebugDrawer();
-
- ///perform collision detection
- performDiscreteCollisionDetection();
-
- ///solve contact constraints
- int numManifolds = m_dispatcher1->getNumManifolds();
- if (numManifolds)
- {
- btPersistentManifold** manifoldPtr = ((btCollisionDispatcher*)m_dispatcher1)->getInternalManifoldPointer();
-
- btContactSolverInfo infoGlobal;
- infoGlobal.m_timeStep = timeStep;
- m_constraintSolver->prepareSolve(0, numManifolds);
- m_constraintSolver->solveGroup(&getCollisionObjectArray()[0], getNumCollisionObjects(), manifoldPtr, numManifolds, 0, 0, infoGlobal, m_debugDrawer, m_dispatcher1);
- m_constraintSolver->allSolved(infoGlobal, m_debugDrawer);
- }
-
- ///integrate transforms
- integrateTransforms(timeStep);
-
- updateAabbs();
-
- synchronizeMotionStates();
-
- clearForces();
-
- return 1;
-}
-
-void btSimpleDynamicsWorld::clearForces()
-{
- ///@todo: iterate over awake simulation islands!
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
-
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body)
- {
- body->clearForces();
- }
- }
-}
-
-void btSimpleDynamicsWorld::setGravity(const btVector3& gravity)
-{
- m_gravity = gravity;
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body)
- {
- body->setGravity(gravity);
- }
- }
-}
-
-btVector3 btSimpleDynamicsWorld::getGravity() const
-{
- return m_gravity;
-}
-
-void btSimpleDynamicsWorld::removeRigidBody(btRigidBody* body)
-{
- btCollisionWorld::removeCollisionObject(body);
-}
-
-void btSimpleDynamicsWorld::removeCollisionObject(btCollisionObject* collisionObject)
-{
- btRigidBody* body = btRigidBody::upcast(collisionObject);
- if (body)
- removeRigidBody(body);
- else
- btCollisionWorld::removeCollisionObject(collisionObject);
-}
-
-void btSimpleDynamicsWorld::addRigidBody(btRigidBody* body)
-{
- body->setGravity(m_gravity);
-
- if (body->getCollisionShape())
- {
- addCollisionObject(body);
- }
-}
-
-void btSimpleDynamicsWorld::addRigidBody(btRigidBody* body, int group, int mask)
-{
- body->setGravity(m_gravity);
-
- if (body->getCollisionShape())
- {
- addCollisionObject(body, group, mask);
- }
-}
-
-void btSimpleDynamicsWorld::debugDrawWorld()
-{
-}
-
-void btSimpleDynamicsWorld::addAction(btActionInterface* action)
-{
-}
-
-void btSimpleDynamicsWorld::removeAction(btActionInterface* action)
-{
-}
-
-void btSimpleDynamicsWorld::updateAabbs()
-{
- btTransform predictedTrans;
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body)
- {
- if (body->isActive() && (!body->isStaticObject()))
- {
- btVector3 minAabb, maxAabb;
- colObj->getCollisionShape()->getAabb(colObj->getWorldTransform(), minAabb, maxAabb);
- btBroadphaseInterface* bp = getBroadphase();
- bp->setAabb(body->getBroadphaseHandle(), minAabb, maxAabb, m_dispatcher1);
- }
- }
- }
-}
-
-void btSimpleDynamicsWorld::integrateTransforms(btScalar timeStep)
-{
- btTransform predictedTrans;
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body)
- {
- if (body->isActive() && (!body->isStaticObject()))
- {
- body->predictIntegratedTransform(timeStep, predictedTrans);
- body->proceedToTransform(predictedTrans);
- }
- }
- }
-}
-
-void btSimpleDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
-{
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body)
- {
- if (!body->isStaticObject())
- {
- if (body->isActive())
- {
- body->applyGravity();
- body->integrateVelocities(timeStep);
- body->applyDamping(timeStep);
- body->predictIntegratedTransform(timeStep, body->getInterpolationWorldTransform());
- }
- }
- }
- }
-}
-
-void btSimpleDynamicsWorld::synchronizeMotionStates()
-{
- ///@todo: iterate over awake simulation islands!
- for (int i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- btRigidBody* body = btRigidBody::upcast(colObj);
- if (body && body->getMotionState())
- {
- if (body->getActivationState() != ISLAND_SLEEPING)
- {
- body->getMotionState()->setWorldTransform(body->getWorldTransform());
- }
- }
- }
-}
-
-void btSimpleDynamicsWorld::setConstraintSolver(btConstraintSolver* solver)
-{
- if (m_ownsConstraintSolver)
- {
- btAlignedFree(m_constraintSolver);
- }
- m_ownsConstraintSolver = false;
- m_constraintSolver = solver;
-}
-
-btConstraintSolver* btSimpleDynamicsWorld::getConstraintSolver()
-{
- return m_constraintSolver;
-}
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h b/thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h
deleted file mode 100644
index 12be231c7f..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btSimpleDynamicsWorld.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMPLE_DYNAMICS_WORLD_H
-#define BT_SIMPLE_DYNAMICS_WORLD_H
-
-#include "btDynamicsWorld.h"
-
-class btDispatcher;
-class btOverlappingPairCache;
-class btConstraintSolver;
-
-///The btSimpleDynamicsWorld serves as unit-test and to verify more complicated and optimized dynamics worlds.
-///Please use btDiscreteDynamicsWorld instead
-class btSimpleDynamicsWorld : public btDynamicsWorld
-{
-protected:
- btConstraintSolver* m_constraintSolver;
-
- bool m_ownsConstraintSolver;
-
- void predictUnconstraintMotion(btScalar timeStep);
-
- void integrateTransforms(btScalar timeStep);
-
- btVector3 m_gravity;
-
-public:
- ///this btSimpleDynamicsWorld constructor creates dispatcher, broadphase pairCache and constraintSolver
- btSimpleDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration);
-
- virtual ~btSimpleDynamicsWorld();
-
- ///maxSubSteps/fixedTimeStep for interpolation is currently ignored for btSimpleDynamicsWorld, use btDiscreteDynamicsWorld instead
- virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.));
-
- virtual void setGravity(const btVector3& gravity);
-
- virtual btVector3 getGravity() const;
-
- virtual void addRigidBody(btRigidBody* body);
-
- virtual void addRigidBody(btRigidBody* body, int group, int mask);
-
- virtual void removeRigidBody(btRigidBody* body);
-
- virtual void debugDrawWorld();
-
- virtual void addAction(btActionInterface* action);
-
- virtual void removeAction(btActionInterface* action);
-
- ///removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise call btCollisionWorld::removeCollisionObject
- virtual void removeCollisionObject(btCollisionObject* collisionObject);
-
- virtual void updateAabbs();
-
- virtual void synchronizeMotionStates();
-
- virtual void setConstraintSolver(btConstraintSolver* solver);
-
- virtual btConstraintSolver* getConstraintSolver();
-
- virtual btDynamicsWorldType getWorldType() const
- {
- return BT_SIMPLE_DYNAMICS_WORLD;
- }
-
- virtual void clearForces();
-};
-
-#endif //BT_SIMPLE_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.cpp b/thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.cpp
deleted file mode 100644
index 772b774202..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.cpp
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btThreads.h"
-#include "btSimulationIslandManagerMt.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.h" // for s_minimumContactManifoldsForBatching
-
-//#include <stdio.h>
-#include "LinearMath/btQuickprof.h"
-
-SIMD_FORCE_INLINE int calcBatchCost(int bodies, int manifolds, int constraints)
-{
- // rough estimate of the cost of a batch, used for merging
- int batchCost = bodies + 8 * manifolds + 4 * constraints;
- return batchCost;
-}
-
-SIMD_FORCE_INLINE int calcBatchCost(const btSimulationIslandManagerMt::Island* island)
-{
- return calcBatchCost(island->bodyArray.size(), island->manifoldArray.size(), island->constraintArray.size());
-}
-
-btSimulationIslandManagerMt::btSimulationIslandManagerMt()
-{
- m_minimumSolverBatchSize = calcBatchCost(0, 128, 0);
- m_batchIslandMinBodyCount = 32;
- m_islandDispatch = parallelIslandDispatch;
- m_batchIsland = NULL;
-}
-
-btSimulationIslandManagerMt::~btSimulationIslandManagerMt()
-{
- for (int i = 0; i < m_allocatedIslands.size(); ++i)
- {
- delete m_allocatedIslands[i];
- }
- m_allocatedIslands.resize(0);
- m_activeIslands.resize(0);
- m_freeIslands.resize(0);
-}
-
-inline int getIslandId(const btPersistentManifold* lhs)
-{
- const btCollisionObject* rcolObj0 = static_cast<const btCollisionObject*>(lhs->getBody0());
- const btCollisionObject* rcolObj1 = static_cast<const btCollisionObject*>(lhs->getBody1());
- int islandId = rcolObj0->getIslandTag() >= 0 ? rcolObj0->getIslandTag() : rcolObj1->getIslandTag();
- return islandId;
-}
-
-SIMD_FORCE_INLINE int btGetConstraintIslandId1(const btTypedConstraint* lhs)
-{
- const btCollisionObject& rcolObj0 = lhs->getRigidBodyA();
- const btCollisionObject& rcolObj1 = lhs->getRigidBodyB();
- int islandId = rcolObj0.getIslandTag() >= 0 ? rcolObj0.getIslandTag() : rcolObj1.getIslandTag();
- return islandId;
-}
-
-/// function object that routes calls to operator<
-class IslandBatchSizeSortPredicate
-{
-public:
- bool operator()(const btSimulationIslandManagerMt::Island* lhs, const btSimulationIslandManagerMt::Island* rhs) const
- {
- int lCost = calcBatchCost(lhs);
- int rCost = calcBatchCost(rhs);
- return lCost > rCost;
- }
-};
-
-class IslandBodyCapacitySortPredicate
-{
-public:
- bool operator()(const btSimulationIslandManagerMt::Island* lhs, const btSimulationIslandManagerMt::Island* rhs) const
- {
- return lhs->bodyArray.capacity() > rhs->bodyArray.capacity();
- }
-};
-
-void btSimulationIslandManagerMt::Island::append(const Island& other)
-{
- // append bodies
- for (int i = 0; i < other.bodyArray.size(); ++i)
- {
- bodyArray.push_back(other.bodyArray[i]);
- }
- // append manifolds
- for (int i = 0; i < other.manifoldArray.size(); ++i)
- {
- manifoldArray.push_back(other.manifoldArray[i]);
- }
- // append constraints
- for (int i = 0; i < other.constraintArray.size(); ++i)
- {
- constraintArray.push_back(other.constraintArray[i]);
- }
-}
-
-bool btIsBodyInIsland(const btSimulationIslandManagerMt::Island& island, const btCollisionObject* obj)
-{
- for (int i = 0; i < island.bodyArray.size(); ++i)
- {
- if (island.bodyArray[i] == obj)
- {
- return true;
- }
- }
- return false;
-}
-
-void btSimulationIslandManagerMt::initIslandPools()
-{
- // reset island pools
- int numElem = getUnionFind().getNumElements();
- m_lookupIslandFromId.resize(numElem);
- for (int i = 0; i < m_lookupIslandFromId.size(); ++i)
- {
- m_lookupIslandFromId[i] = NULL;
- }
- m_activeIslands.resize(0);
- m_freeIslands.resize(0);
- // check whether allocated islands are sorted by body capacity (largest to smallest)
- int lastCapacity = 0;
- bool isSorted = true;
- for (int i = 0; i < m_allocatedIslands.size(); ++i)
- {
- Island* island = m_allocatedIslands[i];
- int cap = island->bodyArray.capacity();
- if (cap > lastCapacity)
- {
- isSorted = false;
- break;
- }
- lastCapacity = cap;
- }
- if (!isSorted)
- {
- m_allocatedIslands.quickSort(IslandBodyCapacitySortPredicate());
- }
-
- m_batchIsland = NULL;
- // mark all islands free (but avoid deallocation)
- for (int i = 0; i < m_allocatedIslands.size(); ++i)
- {
- Island* island = m_allocatedIslands[i];
- island->bodyArray.resize(0);
- island->manifoldArray.resize(0);
- island->constraintArray.resize(0);
- island->id = -1;
- island->isSleeping = true;
- m_freeIslands.push_back(island);
- }
-}
-
-btSimulationIslandManagerMt::Island* btSimulationIslandManagerMt::getIsland(int id)
-{
- btAssert(id >= 0);
- btAssert(id < m_lookupIslandFromId.size());
- Island* island = m_lookupIslandFromId[id];
- if (island == NULL)
- {
- // search for existing island
- for (int i = 0; i < m_activeIslands.size(); ++i)
- {
- if (m_activeIslands[i]->id == id)
- {
- island = m_activeIslands[i];
- break;
- }
- }
- m_lookupIslandFromId[id] = island;
- }
- return island;
-}
-
-btSimulationIslandManagerMt::Island* btSimulationIslandManagerMt::allocateIsland(int id, int numBodies)
-{
- Island* island = NULL;
- int allocSize = numBodies;
- if (numBodies < m_batchIslandMinBodyCount)
- {
- if (m_batchIsland)
- {
- island = m_batchIsland;
- m_lookupIslandFromId[id] = island;
- // if we've made a large enough batch,
- if (island->bodyArray.size() + numBodies >= m_batchIslandMinBodyCount)
- {
- // next time start a new batch
- m_batchIsland = NULL;
- }
- return island;
- }
- else
- {
- // need to allocate a batch island
- allocSize = m_batchIslandMinBodyCount * 2;
- }
- }
- btAlignedObjectArray<Island*>& freeIslands = m_freeIslands;
-
- // search for free island
- if (freeIslands.size() > 0)
- {
- // try to reuse a previously allocated island
- int iFound = freeIslands.size();
- // linear search for smallest island that can hold our bodies
- for (int i = freeIslands.size() - 1; i >= 0; --i)
- {
- if (freeIslands[i]->bodyArray.capacity() >= allocSize)
- {
- iFound = i;
- island = freeIslands[i];
- island->id = id;
- break;
- }
- }
- // if found, shrink array while maintaining ordering
- if (island)
- {
- int iDest = iFound;
- int iSrc = iDest + 1;
- while (iSrc < freeIslands.size())
- {
- freeIslands[iDest++] = freeIslands[iSrc++];
- }
- freeIslands.pop_back();
- }
- }
- if (island == NULL)
- {
- // no free island found, allocate
- island = new Island(); // TODO: change this to use the pool allocator
- island->id = id;
- island->bodyArray.reserve(allocSize);
- m_allocatedIslands.push_back(island);
- }
- m_lookupIslandFromId[id] = island;
- if (numBodies < m_batchIslandMinBodyCount)
- {
- m_batchIsland = island;
- }
- m_activeIslands.push_back(island);
- return island;
-}
-
-void btSimulationIslandManagerMt::buildIslands(btDispatcher* dispatcher, btCollisionWorld* collisionWorld)
-{
- BT_PROFILE("buildIslands");
-
- btCollisionObjectArray& collisionObjects = collisionWorld->getCollisionObjectArray();
-
- //we are going to sort the unionfind array, and store the element id in the size
- //afterwards, we clean unionfind, to make sure no-one uses it anymore
-
- getUnionFind().sortIslands();
- int numElem = getUnionFind().getNumElements();
-
- int endIslandIndex = 1;
- int startIslandIndex;
-
- //update the sleeping state for bodies, if all are sleeping
- for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex)
- {
- int islandId = getUnionFind().getElement(startIslandIndex).m_id;
- for (endIslandIndex = startIslandIndex + 1; (endIslandIndex < numElem) && (getUnionFind().getElement(endIslandIndex).m_id == islandId); endIslandIndex++)
- {
- }
-
- //int numSleeping = 0;
-
- bool allSleeping = true;
-
- int idx;
- for (idx = startIslandIndex; idx < endIslandIndex; idx++)
- {
- int i = getUnionFind().getElement(idx).m_sz;
-
- btCollisionObject* colObj0 = collisionObjects[i];
- if ((colObj0->getIslandTag() != islandId) && (colObj0->getIslandTag() != -1))
- {
- // printf("error in island management\n");
- }
-
- btAssert((colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1));
- if (colObj0->getIslandTag() == islandId)
- {
- if (colObj0->getActivationState() == ACTIVE_TAG ||
- colObj0->getActivationState() == DISABLE_DEACTIVATION)
- {
- allSleeping = false;
- break;
- }
- }
- }
-
- if (allSleeping)
- {
- int idx;
- for (idx = startIslandIndex; idx < endIslandIndex; idx++)
- {
- int i = getUnionFind().getElement(idx).m_sz;
- btCollisionObject* colObj0 = collisionObjects[i];
- if ((colObj0->getIslandTag() != islandId) && (colObj0->getIslandTag() != -1))
- {
- // printf("error in island management\n");
- }
-
- btAssert((colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1));
-
- if (colObj0->getIslandTag() == islandId)
- {
- colObj0->setActivationState(ISLAND_SLEEPING);
- }
- }
- }
- else
- {
- int idx;
- for (idx = startIslandIndex; idx < endIslandIndex; idx++)
- {
- int i = getUnionFind().getElement(idx).m_sz;
-
- btCollisionObject* colObj0 = collisionObjects[i];
- if ((colObj0->getIslandTag() != islandId) && (colObj0->getIslandTag() != -1))
- {
- // printf("error in island management\n");
- }
-
- btAssert((colObj0->getIslandTag() == islandId) || (colObj0->getIslandTag() == -1));
-
- if (colObj0->getIslandTag() == islandId)
- {
- if (colObj0->getActivationState() == ISLAND_SLEEPING)
- {
- colObj0->setActivationState(WANTS_DEACTIVATION);
- colObj0->setDeactivationTime(0.f);
- }
- }
- }
- }
- }
-}
-
-void btSimulationIslandManagerMt::addBodiesToIslands(btCollisionWorld* collisionWorld)
-{
- btCollisionObjectArray& collisionObjects = collisionWorld->getCollisionObjectArray();
- int endIslandIndex = 1;
- int startIslandIndex;
- int numElem = getUnionFind().getNumElements();
-
- // create explicit islands and add bodies to each
- for (startIslandIndex = 0; startIslandIndex < numElem; startIslandIndex = endIslandIndex)
- {
- int islandId = getUnionFind().getElement(startIslandIndex).m_id;
-
- // find end index
- for (endIslandIndex = startIslandIndex; (endIslandIndex < numElem) && (getUnionFind().getElement(endIslandIndex).m_id == islandId); endIslandIndex++)
- {
- }
- // check if island is sleeping
- bool islandSleeping = true;
- for (int iElem = startIslandIndex; iElem < endIslandIndex; iElem++)
- {
- int i = getUnionFind().getElement(iElem).m_sz;
- btCollisionObject* colObj = collisionObjects[i];
- if (colObj->isActive())
- {
- islandSleeping = false;
- }
- }
- if (!islandSleeping)
- {
- // want to count the number of bodies before allocating the island to optimize memory usage of the Island structures
- int numBodies = endIslandIndex - startIslandIndex;
- Island* island = allocateIsland(islandId, numBodies);
- island->isSleeping = false;
-
- // add bodies to island
- for (int iElem = startIslandIndex; iElem < endIslandIndex; iElem++)
- {
- int i = getUnionFind().getElement(iElem).m_sz;
- btCollisionObject* colObj = collisionObjects[i];
- island->bodyArray.push_back(colObj);
- }
- }
- }
-}
-
-void btSimulationIslandManagerMt::addManifoldsToIslands(btDispatcher* dispatcher)
-{
- // walk all the manifolds, activating bodies touched by kinematic objects, and add each manifold to its Island
- int maxNumManifolds = dispatcher->getNumManifolds();
- for (int i = 0; i < maxNumManifolds; i++)
- {
- btPersistentManifold* manifold = dispatcher->getManifoldByIndexInternal(i);
-
- const btCollisionObject* colObj0 = static_cast<const btCollisionObject*>(manifold->getBody0());
- const btCollisionObject* colObj1 = static_cast<const btCollisionObject*>(manifold->getBody1());
-
- ///@todo: check sleeping conditions!
- if (((colObj0) && colObj0->getActivationState() != ISLAND_SLEEPING) ||
- ((colObj1) && colObj1->getActivationState() != ISLAND_SLEEPING))
- {
- //kinematic objects don't merge islands, but wake up all connected objects
- if (colObj0->isKinematicObject() && colObj0->getActivationState() != ISLAND_SLEEPING)
- {
- if (colObj0->hasContactResponse())
- colObj1->activate();
- }
- if (colObj1->isKinematicObject() && colObj1->getActivationState() != ISLAND_SLEEPING)
- {
- if (colObj1->hasContactResponse())
- colObj0->activate();
- }
- //filtering for response
- if (dispatcher->needsResponse(colObj0, colObj1))
- {
- // scatter manifolds into various islands
- int islandId = getIslandId(manifold);
- // if island not sleeping,
- if (Island* island = getIsland(islandId))
- {
- island->manifoldArray.push_back(manifold);
- }
- }
- }
- }
-}
-
-void btSimulationIslandManagerMt::addConstraintsToIslands(btAlignedObjectArray<btTypedConstraint*>& constraints)
-{
- // walk constraints
- for (int i = 0; i < constraints.size(); i++)
- {
- // scatter constraints into various islands
- btTypedConstraint* constraint = constraints[i];
- if (constraint->isEnabled())
- {
- int islandId = btGetConstraintIslandId1(constraint);
- // if island is not sleeping,
- if (Island* island = getIsland(islandId))
- {
- island->constraintArray.push_back(constraint);
- }
- }
- }
-}
-
-void btSimulationIslandManagerMt::mergeIslands()
-{
- // sort islands in order of decreasing batch size
- m_activeIslands.quickSort(IslandBatchSizeSortPredicate());
-
- // merge small islands to satisfy minimum batch size
- // find first small batch island
- int destIslandIndex = m_activeIslands.size();
- for (int i = 0; i < m_activeIslands.size(); ++i)
- {
- Island* island = m_activeIslands[i];
- int batchSize = calcBatchCost(island);
- if (batchSize < m_minimumSolverBatchSize)
- {
- destIslandIndex = i;
- break;
- }
- }
- int lastIndex = m_activeIslands.size() - 1;
- while (destIslandIndex < lastIndex)
- {
- // merge islands from the back of the list
- Island* island = m_activeIslands[destIslandIndex];
- int numBodies = island->bodyArray.size();
- int numManifolds = island->manifoldArray.size();
- int numConstraints = island->constraintArray.size();
- int firstIndex = lastIndex;
- // figure out how many islands we want to merge and find out how many bodies, manifolds and constraints we will have
- while (true)
- {
- Island* src = m_activeIslands[firstIndex];
- numBodies += src->bodyArray.size();
- numManifolds += src->manifoldArray.size();
- numConstraints += src->constraintArray.size();
- int batchCost = calcBatchCost(numBodies, numManifolds, numConstraints);
- if (batchCost >= m_minimumSolverBatchSize)
- {
- break;
- }
- if (firstIndex - 1 == destIslandIndex)
- {
- break;
- }
- firstIndex--;
- }
- // reserve space for these pointers to minimize reallocation
- island->bodyArray.reserve(numBodies);
- island->manifoldArray.reserve(numManifolds);
- island->constraintArray.reserve(numConstraints);
- // merge islands
- for (int i = firstIndex; i <= lastIndex; ++i)
- {
- island->append(*m_activeIslands[i]);
- }
- // shrink array to exclude the islands that were merged from
- m_activeIslands.resize(firstIndex);
- lastIndex = firstIndex - 1;
- destIslandIndex++;
- }
-}
-
-void btSimulationIslandManagerMt::solveIsland(btConstraintSolver* solver, Island& island, const SolverParams& solverParams)
-{
- btPersistentManifold** manifolds = island.manifoldArray.size() ? &island.manifoldArray[0] : NULL;
- btTypedConstraint** constraintsPtr = island.constraintArray.size() ? &island.constraintArray[0] : NULL;
- solver->solveGroup(&island.bodyArray[0],
- island.bodyArray.size(),
- manifolds,
- island.manifoldArray.size(),
- constraintsPtr,
- island.constraintArray.size(),
- *solverParams.m_solverInfo,
- solverParams.m_debugDrawer,
- solverParams.m_dispatcher);
-}
-
-void btSimulationIslandManagerMt::serialIslandDispatch(btAlignedObjectArray<Island*>* islandsPtr, const SolverParams& solverParams)
-{
- BT_PROFILE("serialIslandDispatch");
- // serial dispatch
- btAlignedObjectArray<Island*>& islands = *islandsPtr;
- btConstraintSolver* solver = solverParams.m_solverMt ? solverParams.m_solverMt : solverParams.m_solverPool;
- for (int i = 0; i < islands.size(); ++i)
- {
- solveIsland(solver, *islands[i], solverParams);
- }
-}
-
-struct UpdateIslandDispatcher : public btIParallelForBody
-{
- btAlignedObjectArray<btSimulationIslandManagerMt::Island*>& m_islandsPtr;
- const btSimulationIslandManagerMt::SolverParams& m_solverParams;
-
- UpdateIslandDispatcher(btAlignedObjectArray<btSimulationIslandManagerMt::Island*>& islandsPtr, const btSimulationIslandManagerMt::SolverParams& solverParams)
- : m_islandsPtr(islandsPtr), m_solverParams(solverParams)
- {
- }
-
- void forLoop(int iBegin, int iEnd) const BT_OVERRIDE
- {
- btConstraintSolver* solver = m_solverParams.m_solverPool;
- for (int i = iBegin; i < iEnd; ++i)
- {
- btSimulationIslandManagerMt::Island* island = m_islandsPtr[i];
- btSimulationIslandManagerMt::solveIsland(solver, *island, m_solverParams);
- }
- }
-};
-
-void btSimulationIslandManagerMt::parallelIslandDispatch(btAlignedObjectArray<Island*>* islandsPtr, const SolverParams& solverParams)
-{
- BT_PROFILE("parallelIslandDispatch");
- //
- // if there are islands with many contacts, it may be faster to submit these
- // large islands *serially* to a single parallel constraint solver, and then later
- // submit the remaining smaller islands in parallel to multiple sequential solvers.
- //
- // Some task schedulers do not deal well with nested parallelFor loops. One implementation
- // of OpenMP was actually slower than doing everything single-threaded. Intel TBB
- // on the other hand, seems to do a pretty respectable job with it.
- //
- // When solving islands in parallel, the worst case performance happens when there
- // is one very large island and then perhaps a smattering of very small
- // islands -- one worker thread takes the large island and the remaining workers
- // tear through the smaller islands and then sit idle waiting for the first worker
- // to finish. Solving islands in parallel works best when there are numerous small
- // islands, roughly equal in size.
- //
- // By contrast, the other approach -- the parallel constraint solver -- is only
- // able to deliver a worthwhile speedup when the island is large. For smaller islands,
- // it is difficult to extract a useful amount of parallelism -- the overhead of grouping
- // the constraints into batches and sending the batches to worker threads can nullify
- // any gains from parallelism.
- //
-
- UpdateIslandDispatcher dispatcher(*islandsPtr, solverParams);
- // We take advantage of the fact the islands are sorted in order of decreasing size
- int iBegin = 0;
- if (solverParams.m_solverMt)
- {
- while (iBegin < islandsPtr->size())
- {
- btSimulationIslandManagerMt::Island* island = (*islandsPtr)[iBegin];
- if (island->manifoldArray.size() < btSequentialImpulseConstraintSolverMt::s_minimumContactManifoldsForBatching)
- {
- // OK to submit the rest of the array in parallel
- break;
- }
- // serial dispatch to parallel solver for large islands (if any)
- solveIsland(solverParams.m_solverMt, *island, solverParams);
- ++iBegin;
- }
- }
- // parallel dispatch to sequential solvers for rest
- btParallelFor(iBegin, islandsPtr->size(), 1, dispatcher);
-}
-
-///@todo: this is random access, it can be walked 'cache friendly'!
-void btSimulationIslandManagerMt::buildAndProcessIslands(btDispatcher* dispatcher,
- btCollisionWorld* collisionWorld,
- btAlignedObjectArray<btTypedConstraint*>& constraints,
- const SolverParams& solverParams)
-{
- BT_PROFILE("buildAndProcessIslands");
- btCollisionObjectArray& collisionObjects = collisionWorld->getCollisionObjectArray();
-
- buildIslands(dispatcher, collisionWorld);
-
- if (!getSplitIslands())
- {
- btPersistentManifold** manifolds = dispatcher->getInternalManifoldPointer();
- int maxNumManifolds = dispatcher->getNumManifolds();
-
- for (int i = 0; i < maxNumManifolds; i++)
- {
- btPersistentManifold* manifold = manifolds[i];
-
- const btCollisionObject* colObj0 = static_cast<const btCollisionObject*>(manifold->getBody0());
- const btCollisionObject* colObj1 = static_cast<const btCollisionObject*>(manifold->getBody1());
-
- ///@todo: check sleeping conditions!
- if (((colObj0) && colObj0->getActivationState() != ISLAND_SLEEPING) ||
- ((colObj1) && colObj1->getActivationState() != ISLAND_SLEEPING))
- {
- //kinematic objects don't merge islands, but wake up all connected objects
- if (colObj0->isKinematicObject() && colObj0->getActivationState() != ISLAND_SLEEPING)
- {
- if (colObj0->hasContactResponse())
- colObj1->activate();
- }
- if (colObj1->isKinematicObject() && colObj1->getActivationState() != ISLAND_SLEEPING)
- {
- if (colObj1->hasContactResponse())
- colObj0->activate();
- }
- }
- }
- btTypedConstraint** constraintsPtr = constraints.size() ? &constraints[0] : NULL;
- btConstraintSolver* solver = solverParams.m_solverMt ? solverParams.m_solverMt : solverParams.m_solverPool;
- solver->solveGroup(&collisionObjects[0],
- collisionObjects.size(),
- manifolds,
- maxNumManifolds,
- constraintsPtr,
- constraints.size(),
- *solverParams.m_solverInfo,
- solverParams.m_debugDrawer,
- solverParams.m_dispatcher);
- }
- else
- {
- initIslandPools();
-
- //traverse the simulation islands, and call the solver, unless all objects are sleeping/deactivated
- addBodiesToIslands(collisionWorld);
- addManifoldsToIslands(dispatcher);
- addConstraintsToIslands(constraints);
-
- // m_activeIslands array should now contain all non-sleeping Islands, and each Island should
- // have all the necessary bodies, manifolds and constraints.
-
- // if we want to merge islands with small batch counts,
- if (m_minimumSolverBatchSize > 1)
- {
- mergeIslands();
- }
- // dispatch islands to solver
- m_islandDispatch(&m_activeIslands, solverParams);
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.h b/thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.h
deleted file mode 100644
index ab73a899f1..0000000000
--- a/thirdparty/bullet/BulletDynamics/Dynamics/btSimulationIslandManagerMt.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMULATION_ISLAND_MANAGER_MT_H
-#define BT_SIMULATION_ISLAND_MANAGER_MT_H
-
-#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
-
-class btTypedConstraint;
-class btConstraintSolver;
-struct btContactSolverInfo;
-class btIDebugDraw;
-
-///
-/// SimulationIslandManagerMt -- Multithread capable version of SimulationIslandManager
-/// Splits the world up into islands which can be solved in parallel.
-/// In order to solve islands in parallel, an IslandDispatch function
-/// must be provided which will dispatch calls to multiple threads.
-/// The amount of parallelism that can be achieved depends on the number
-/// of islands. If only a single island exists, then no parallelism is
-/// possible.
-///
-class btSimulationIslandManagerMt : public btSimulationIslandManager
-{
-public:
- struct Island
- {
- // a simulation island consisting of bodies, manifolds and constraints,
- // to be passed into a constraint solver.
- btAlignedObjectArray<btCollisionObject*> bodyArray;
- btAlignedObjectArray<btPersistentManifold*> manifoldArray;
- btAlignedObjectArray<btTypedConstraint*> constraintArray;
- int id; // island id
- bool isSleeping;
-
- void append(const Island& other); // add bodies, manifolds, constraints to my own
- };
- struct SolverParams
- {
- btConstraintSolver* m_solverPool;
- btConstraintSolver* m_solverMt;
- btContactSolverInfo* m_solverInfo;
- btIDebugDraw* m_debugDrawer;
- btDispatcher* m_dispatcher;
- };
- static void solveIsland(btConstraintSolver* solver, Island& island, const SolverParams& solverParams);
-
- typedef void (*IslandDispatchFunc)(btAlignedObjectArray<Island*>* islands, const SolverParams& solverParams);
- static void serialIslandDispatch(btAlignedObjectArray<Island*>* islandsPtr, const SolverParams& solverParams);
- static void parallelIslandDispatch(btAlignedObjectArray<Island*>* islandsPtr, const SolverParams& solverParams);
-
-protected:
- btAlignedObjectArray<Island*> m_allocatedIslands; // owner of all Islands
- btAlignedObjectArray<Island*> m_activeIslands; // islands actively in use
- btAlignedObjectArray<Island*> m_freeIslands; // islands ready to be reused
- btAlignedObjectArray<Island*> m_lookupIslandFromId; // big lookup table to map islandId to Island pointer
- Island* m_batchIsland;
- int m_minimumSolverBatchSize;
- int m_batchIslandMinBodyCount;
- IslandDispatchFunc m_islandDispatch;
-
- Island* getIsland(int id);
- virtual Island* allocateIsland(int id, int numBodies);
- virtual void initIslandPools();
- virtual void addBodiesToIslands(btCollisionWorld* collisionWorld);
- virtual void addManifoldsToIslands(btDispatcher* dispatcher);
- virtual void addConstraintsToIslands(btAlignedObjectArray<btTypedConstraint*>& constraints);
- virtual void mergeIslands();
-
-public:
- btSimulationIslandManagerMt();
- virtual ~btSimulationIslandManagerMt();
-
- virtual void buildAndProcessIslands(btDispatcher* dispatcher,
- btCollisionWorld* collisionWorld,
- btAlignedObjectArray<btTypedConstraint*>& constraints,
- const SolverParams& solverParams);
-
- virtual void buildIslands(btDispatcher* dispatcher, btCollisionWorld* colWorld);
-
- int getMinimumSolverBatchSize() const
- {
- return m_minimumSolverBatchSize;
- }
- void setMinimumSolverBatchSize(int sz)
- {
- m_minimumSolverBatchSize = sz;
- }
- IslandDispatchFunc getIslandDispatchFunction() const
- {
- return m_islandDispatch;
- }
- // allow users to set their own dispatch function for multithreaded dispatch
- void setIslandDispatchFunction(IslandDispatchFunc func)
- {
- m_islandDispatch = func;
- }
-};
-
-#endif //BT_SIMULATION_ISLAND_MANAGER_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.cpp
deleted file mode 100644
index d7588aedc8..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.cpp
+++ /dev/null
@@ -1,2461 +0,0 @@
-/*
- * PURPOSE:
- * Class representing an articulated rigid body. Stores the body's
- * current state, allows forces and torques to be set, handles
- * timestepping and implements Featherstone's algorithm.
- *
- * COPYRIGHT:
- * Copyright (C) Stephen Thompson, <stephen@solarflare.org.uk>, 2011-2013
- * Portions written By Erwin Coumans: connection to LCP solver, various multibody constraints, replacing Eigen math library by Bullet LinearMath and a dedicated 6x6 matrix inverse (solveImatrix)
- * Portions written By Jakub Stepien: support for multi-DOF constraints, introduction of spatial algebra and several other improvements
-
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- */
-
-#include "btMultiBody.h"
-#include "btMultiBodyLink.h"
-#include "btMultiBodyLinkCollider.h"
-#include "btMultiBodyJointFeedback.h"
-#include "LinearMath/btTransformUtil.h"
-#include "LinearMath/btSerializer.h"
-//#include "Bullet3Common/b3Logging.h"
-// #define INCLUDE_GYRO_TERM
-
-
-namespace
-{
-const btScalar INITIAL_SLEEP_EPSILON = btScalar(0.05); // this is a squared velocity (m^2 s^-2)
-const btScalar INITIAL_SLEEP_TIMEOUT = btScalar(2); // in seconds
-} // namespace
-
-void btMultiBody::spatialTransform(const btMatrix3x3 &rotation_matrix, // rotates vectors in 'from' frame to vectors in 'to' frame
- const btVector3 &displacement, // vector from origin of 'from' frame to origin of 'to' frame, in 'to' coordinates
- const btVector3 &top_in, // top part of input vector
- const btVector3 &bottom_in, // bottom part of input vector
- btVector3 &top_out, // top part of output vector
- btVector3 &bottom_out) // bottom part of output vector
-{
- top_out = rotation_matrix * top_in;
- bottom_out = -displacement.cross(top_out) + rotation_matrix * bottom_in;
-}
-
-namespace
-{
-
-
-#if 0
- void InverseSpatialTransform(const btMatrix3x3 &rotation_matrix,
- const btVector3 &displacement,
- const btVector3 &top_in,
- const btVector3 &bottom_in,
- btVector3 &top_out,
- btVector3 &bottom_out)
- {
- top_out = rotation_matrix.transpose() * top_in;
- bottom_out = rotation_matrix.transpose() * (bottom_in + displacement.cross(top_in));
- }
-
- btScalar SpatialDotProduct(const btVector3 &a_top,
- const btVector3 &a_bottom,
- const btVector3 &b_top,
- const btVector3 &b_bottom)
- {
- return a_bottom.dot(b_top) + a_top.dot(b_bottom);
- }
-
- void SpatialCrossProduct(const btVector3 &a_top,
- const btVector3 &a_bottom,
- const btVector3 &b_top,
- const btVector3 &b_bottom,
- btVector3 &top_out,
- btVector3 &bottom_out)
- {
- top_out = a_top.cross(b_top);
- bottom_out = a_bottom.cross(b_top) + a_top.cross(b_bottom);
- }
-#endif
-
-} // namespace
-
-//
-// Implementation of class btMultiBody
-//
-
-btMultiBody::btMultiBody(int n_links,
- btScalar mass,
- const btVector3 &inertia,
- bool fixedBase,
- bool canSleep,
- bool /*deprecatedUseMultiDof*/)
- : m_baseCollider(0),
- m_baseName(0),
- m_basePos(0, 0, 0),
- m_baseQuat(0, 0, 0, 1),
- m_basePos_interpolate(0, 0, 0),
- m_baseQuat_interpolate(0, 0, 0, 1),
- m_baseMass(mass),
- m_baseInertia(inertia),
-
- m_fixedBase(fixedBase),
- m_awake(true),
- m_canSleep(canSleep),
- m_canWakeup(true),
- m_sleepTimer(0),
- m_sleepEpsilon(INITIAL_SLEEP_EPSILON),
- m_sleepTimeout(INITIAL_SLEEP_TIMEOUT),
-
- m_userObjectPointer(0),
- m_userIndex2(-1),
- m_userIndex(-1),
- m_companionId(-1),
- m_linearDamping(0.04f),
- m_angularDamping(0.04f),
- m_useGyroTerm(true),
- m_maxAppliedImpulse(1000.f),
- m_maxCoordinateVelocity(100.f),
- m_hasSelfCollision(true),
- __posUpdated(false),
- m_dofCount(0),
- m_posVarCnt(0),
- m_useRK4(false),
- m_useGlobalVelocities(false),
- m_internalNeedsJointFeedback(false),
- m_kinematic_calculate_velocity(false)
-{
- m_cachedInertiaTopLeft.setValue(0, 0, 0, 0, 0, 0, 0, 0, 0);
- m_cachedInertiaTopRight.setValue(0, 0, 0, 0, 0, 0, 0, 0, 0);
- m_cachedInertiaLowerLeft.setValue(0, 0, 0, 0, 0, 0, 0, 0, 0);
- m_cachedInertiaLowerRight.setValue(0, 0, 0, 0, 0, 0, 0, 0, 0);
- m_cachedInertiaValid = false;
-
- m_links.resize(n_links);
- m_matrixBuf.resize(n_links + 1);
-
- m_baseForce.setValue(0, 0, 0);
- m_baseTorque.setValue(0, 0, 0);
-
- clearConstraintForces();
- clearForcesAndTorques();
-}
-
-btMultiBody::~btMultiBody()
-{
-}
-
-void btMultiBody::setupFixed(int i,
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &parentComToThisPivotOffset,
- const btVector3 &thisPivotToThisComOffset, bool /*deprecatedDisableParentCollision*/)
-{
- m_links[i].m_mass = mass;
- m_links[i].m_inertiaLocal = inertia;
- m_links[i].m_parent = parent;
- m_links[i].setAxisTop(0, 0., 0., 0.);
- m_links[i].setAxisBottom(0, btVector3(0, 0, 0));
- m_links[i].m_zeroRotParentToThis = rotParentToThis;
- m_links[i].m_dVector = thisPivotToThisComOffset;
- m_links[i].m_eVector = parentComToThisPivotOffset;
-
- m_links[i].m_jointType = btMultibodyLink::eFixed;
- m_links[i].m_dofCount = 0;
- m_links[i].m_posVarCount = 0;
-
- m_links[i].m_flags |= BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION;
-
- m_links[i].updateCacheMultiDof();
-
- updateLinksDofOffsets();
-}
-
-void btMultiBody::setupPrismatic(int i,
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &jointAxis,
- const btVector3 &parentComToThisPivotOffset,
- const btVector3 &thisPivotToThisComOffset,
- bool disableParentCollision)
-{
- m_dofCount += 1;
- m_posVarCnt += 1;
-
- m_links[i].m_mass = mass;
- m_links[i].m_inertiaLocal = inertia;
- m_links[i].m_parent = parent;
- m_links[i].m_zeroRotParentToThis = rotParentToThis;
- m_links[i].setAxisTop(0, 0., 0., 0.);
- m_links[i].setAxisBottom(0, jointAxis);
- m_links[i].m_eVector = parentComToThisPivotOffset;
- m_links[i].m_dVector = thisPivotToThisComOffset;
- m_links[i].m_cachedRotParentToThis = rotParentToThis;
-
- m_links[i].m_jointType = btMultibodyLink::ePrismatic;
- m_links[i].m_dofCount = 1;
- m_links[i].m_posVarCount = 1;
- m_links[i].m_jointPos[0] = 0.f;
- m_links[i].m_jointTorque[0] = 0.f;
-
- if (disableParentCollision)
- m_links[i].m_flags |= BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION;
- //
-
- m_links[i].updateCacheMultiDof();
-
- updateLinksDofOffsets();
-}
-
-void btMultiBody::setupRevolute(int i,
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &jointAxis,
- const btVector3 &parentComToThisPivotOffset,
- const btVector3 &thisPivotToThisComOffset,
- bool disableParentCollision)
-{
- m_dofCount += 1;
- m_posVarCnt += 1;
-
- m_links[i].m_mass = mass;
- m_links[i].m_inertiaLocal = inertia;
- m_links[i].m_parent = parent;
- m_links[i].m_zeroRotParentToThis = rotParentToThis;
- m_links[i].setAxisTop(0, jointAxis);
- m_links[i].setAxisBottom(0, jointAxis.cross(thisPivotToThisComOffset));
- m_links[i].m_dVector = thisPivotToThisComOffset;
- m_links[i].m_eVector = parentComToThisPivotOffset;
-
- m_links[i].m_jointType = btMultibodyLink::eRevolute;
- m_links[i].m_dofCount = 1;
- m_links[i].m_posVarCount = 1;
- m_links[i].m_jointPos[0] = 0.f;
- m_links[i].m_jointTorque[0] = 0.f;
-
- if (disableParentCollision)
- m_links[i].m_flags |= BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION;
- //
- m_links[i].updateCacheMultiDof();
- //
- updateLinksDofOffsets();
-}
-
-void btMultiBody::setupSpherical(int i,
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &parentComToThisPivotOffset,
- const btVector3 &thisPivotToThisComOffset,
- bool disableParentCollision)
-{
- m_dofCount += 3;
- m_posVarCnt += 4;
-
- m_links[i].m_mass = mass;
- m_links[i].m_inertiaLocal = inertia;
- m_links[i].m_parent = parent;
- m_links[i].m_zeroRotParentToThis = rotParentToThis;
- m_links[i].m_dVector = thisPivotToThisComOffset;
- m_links[i].m_eVector = parentComToThisPivotOffset;
-
- m_links[i].m_jointType = btMultibodyLink::eSpherical;
- m_links[i].m_dofCount = 3;
- m_links[i].m_posVarCount = 4;
- m_links[i].setAxisTop(0, 1.f, 0.f, 0.f);
- m_links[i].setAxisTop(1, 0.f, 1.f, 0.f);
- m_links[i].setAxisTop(2, 0.f, 0.f, 1.f);
- m_links[i].setAxisBottom(0, m_links[i].getAxisTop(0).cross(thisPivotToThisComOffset));
- m_links[i].setAxisBottom(1, m_links[i].getAxisTop(1).cross(thisPivotToThisComOffset));
- m_links[i].setAxisBottom(2, m_links[i].getAxisTop(2).cross(thisPivotToThisComOffset));
- m_links[i].m_jointPos[0] = m_links[i].m_jointPos[1] = m_links[i].m_jointPos[2] = 0.f;
- m_links[i].m_jointPos[3] = 1.f;
- m_links[i].m_jointTorque[0] = m_links[i].m_jointTorque[1] = m_links[i].m_jointTorque[2] = 0.f;
-
- if (disableParentCollision)
- m_links[i].m_flags |= BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION;
- //
- m_links[i].updateCacheMultiDof();
- //
- updateLinksDofOffsets();
-}
-
-void btMultiBody::setupPlanar(int i,
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &rotationAxis,
- const btVector3 &parentComToThisComOffset,
- bool disableParentCollision)
-{
- m_dofCount += 3;
- m_posVarCnt += 3;
-
- m_links[i].m_mass = mass;
- m_links[i].m_inertiaLocal = inertia;
- m_links[i].m_parent = parent;
- m_links[i].m_zeroRotParentToThis = rotParentToThis;
- m_links[i].m_dVector.setZero();
- m_links[i].m_eVector = parentComToThisComOffset;
-
- //
- btVector3 vecNonParallelToRotAxis(1, 0, 0);
- if (rotationAxis.normalized().dot(vecNonParallelToRotAxis) > 0.999)
- vecNonParallelToRotAxis.setValue(0, 1, 0);
- //
-
- m_links[i].m_jointType = btMultibodyLink::ePlanar;
- m_links[i].m_dofCount = 3;
- m_links[i].m_posVarCount = 3;
- btVector3 n = rotationAxis.normalized();
- m_links[i].setAxisTop(0, n[0], n[1], n[2]);
- m_links[i].setAxisTop(1, 0, 0, 0);
- m_links[i].setAxisTop(2, 0, 0, 0);
- m_links[i].setAxisBottom(0, 0, 0, 0);
- btVector3 cr = m_links[i].getAxisTop(0).cross(vecNonParallelToRotAxis);
- m_links[i].setAxisBottom(1, cr[0], cr[1], cr[2]);
- cr = m_links[i].getAxisBottom(1).cross(m_links[i].getAxisTop(0));
- m_links[i].setAxisBottom(2, cr[0], cr[1], cr[2]);
- m_links[i].m_jointPos[0] = m_links[i].m_jointPos[1] = m_links[i].m_jointPos[2] = 0.f;
- m_links[i].m_jointTorque[0] = m_links[i].m_jointTorque[1] = m_links[i].m_jointTorque[2] = 0.f;
-
- if (disableParentCollision)
- m_links[i].m_flags |= BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION;
- //
- m_links[i].updateCacheMultiDof();
- //
- updateLinksDofOffsets();
-
- m_links[i].setAxisBottom(1, m_links[i].getAxisBottom(1).normalized());
- m_links[i].setAxisBottom(2, m_links[i].getAxisBottom(2).normalized());
-}
-
-void btMultiBody::finalizeMultiDof()
-{
- m_deltaV.resize(0);
- m_deltaV.resize(6 + m_dofCount);
- m_splitV.resize(0);
- m_splitV.resize(6 + m_dofCount);
- m_realBuf.resize(6 + m_dofCount + m_dofCount * m_dofCount + 6 + m_dofCount); //m_dofCount for joint-space vels + m_dofCount^2 for "D" matrices + delta-pos vector (6 base "vels" + joint "vels")
- m_vectorBuf.resize(2 * m_dofCount); //two 3-vectors (i.e. one six-vector) for each system dof ("h" matrices)
- m_matrixBuf.resize(m_links.size() + 1);
- for (int i = 0; i < m_vectorBuf.size(); i++)
- {
- m_vectorBuf[i].setValue(0, 0, 0);
- }
- updateLinksDofOffsets();
-}
-
-int btMultiBody::getParent(int link_num) const
-{
- return m_links[link_num].m_parent;
-}
-
-btScalar btMultiBody::getLinkMass(int i) const
-{
- return m_links[i].m_mass;
-}
-
-const btVector3 &btMultiBody::getLinkInertia(int i) const
-{
- return m_links[i].m_inertiaLocal;
-}
-
-btScalar btMultiBody::getJointPos(int i) const
-{
- return m_links[i].m_jointPos[0];
-}
-
-btScalar btMultiBody::getJointVel(int i) const
-{
- return m_realBuf[6 + m_links[i].m_dofOffset];
-}
-
-btScalar *btMultiBody::getJointPosMultiDof(int i)
-{
- return &m_links[i].m_jointPos[0];
-}
-
-btScalar *btMultiBody::getJointVelMultiDof(int i)
-{
- return &m_realBuf[6 + m_links[i].m_dofOffset];
-}
-
-const btScalar *btMultiBody::getJointPosMultiDof(int i) const
-{
- return &m_links[i].m_jointPos[0];
-}
-
-const btScalar *btMultiBody::getJointVelMultiDof(int i) const
-{
- return &m_realBuf[6 + m_links[i].m_dofOffset];
-}
-
-void btMultiBody::setJointPos(int i, btScalar q)
-{
- m_links[i].m_jointPos[0] = q;
- m_links[i].updateCacheMultiDof();
-}
-
-
-void btMultiBody::setJointPosMultiDof(int i, const double *q)
-{
- for (int pos = 0; pos < m_links[i].m_posVarCount; ++pos)
- m_links[i].m_jointPos[pos] = (btScalar)q[pos];
-
- m_links[i].updateCacheMultiDof();
-}
-
-void btMultiBody::setJointPosMultiDof(int i, const float *q)
-{
- for (int pos = 0; pos < m_links[i].m_posVarCount; ++pos)
- m_links[i].m_jointPos[pos] = (btScalar)q[pos];
-
- m_links[i].updateCacheMultiDof();
-}
-
-
-
-void btMultiBody::setJointVel(int i, btScalar qdot)
-{
- m_realBuf[6 + m_links[i].m_dofOffset] = qdot;
-}
-
-void btMultiBody::setJointVelMultiDof(int i, const double *qdot)
-{
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- m_realBuf[6 + m_links[i].m_dofOffset + dof] = (btScalar)qdot[dof];
-}
-
-void btMultiBody::setJointVelMultiDof(int i, const float* qdot)
-{
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- m_realBuf[6 + m_links[i].m_dofOffset + dof] = (btScalar)qdot[dof];
-}
-
-const btVector3 &btMultiBody::getRVector(int i) const
-{
- return m_links[i].m_cachedRVector;
-}
-
-const btQuaternion &btMultiBody::getParentToLocalRot(int i) const
-{
- return m_links[i].m_cachedRotParentToThis;
-}
-
-const btVector3 &btMultiBody::getInterpolateRVector(int i) const
-{
- return m_links[i].m_cachedRVector_interpolate;
-}
-
-const btQuaternion &btMultiBody::getInterpolateParentToLocalRot(int i) const
-{
- return m_links[i].m_cachedRotParentToThis_interpolate;
-}
-
-btVector3 btMultiBody::localPosToWorld(int i, const btVector3 &local_pos) const
-{
- btAssert(i >= -1);
- btAssert(i < m_links.size());
- if ((i < -1) || (i >= m_links.size()))
- {
- return btVector3(SIMD_INFINITY, SIMD_INFINITY, SIMD_INFINITY);
- }
-
- btVector3 result = local_pos;
- while (i != -1)
- {
- // 'result' is in frame i. transform it to frame parent(i)
- result += getRVector(i);
- result = quatRotate(getParentToLocalRot(i).inverse(), result);
- i = getParent(i);
- }
-
- // 'result' is now in the base frame. transform it to world frame
- result = quatRotate(getWorldToBaseRot().inverse(), result);
- result += getBasePos();
-
- return result;
-}
-
-btVector3 btMultiBody::worldPosToLocal(int i, const btVector3 &world_pos) const
-{
- btAssert(i >= -1);
- btAssert(i < m_links.size());
- if ((i < -1) || (i >= m_links.size()))
- {
- return btVector3(SIMD_INFINITY, SIMD_INFINITY, SIMD_INFINITY);
- }
-
- if (i == -1)
- {
- // world to base
- return quatRotate(getWorldToBaseRot(), (world_pos - getBasePos()));
- }
- else
- {
- // find position in parent frame, then transform to current frame
- return quatRotate(getParentToLocalRot(i), worldPosToLocal(getParent(i), world_pos)) - getRVector(i);
- }
-}
-
-btVector3 btMultiBody::localDirToWorld(int i, const btVector3 &local_dir) const
-{
- btAssert(i >= -1);
- btAssert(i < m_links.size());
- if ((i < -1) || (i >= m_links.size()))
- {
- return btVector3(SIMD_INFINITY, SIMD_INFINITY, SIMD_INFINITY);
- }
-
- btVector3 result = local_dir;
- while (i != -1)
- {
- result = quatRotate(getParentToLocalRot(i).inverse(), result);
- i = getParent(i);
- }
- result = quatRotate(getWorldToBaseRot().inverse(), result);
- return result;
-}
-
-btVector3 btMultiBody::worldDirToLocal(int i, const btVector3 &world_dir) const
-{
- btAssert(i >= -1);
- btAssert(i < m_links.size());
- if ((i < -1) || (i >= m_links.size()))
- {
- return btVector3(SIMD_INFINITY, SIMD_INFINITY, SIMD_INFINITY);
- }
-
- if (i == -1)
- {
- return quatRotate(getWorldToBaseRot(), world_dir);
- }
- else
- {
- return quatRotate(getParentToLocalRot(i), worldDirToLocal(getParent(i), world_dir));
- }
-}
-
-btMatrix3x3 btMultiBody::localFrameToWorld(int i, const btMatrix3x3 &local_frame) const
-{
- btMatrix3x3 result = local_frame;
- btVector3 frameInWorld0 = localDirToWorld(i, local_frame.getColumn(0));
- btVector3 frameInWorld1 = localDirToWorld(i, local_frame.getColumn(1));
- btVector3 frameInWorld2 = localDirToWorld(i, local_frame.getColumn(2));
- result.setValue(frameInWorld0[0], frameInWorld1[0], frameInWorld2[0], frameInWorld0[1], frameInWorld1[1], frameInWorld2[1], frameInWorld0[2], frameInWorld1[2], frameInWorld2[2]);
- return result;
-}
-
-void btMultiBody::compTreeLinkVelocities(btVector3 *omega, btVector3 *vel) const
-{
- int num_links = getNumLinks();
- // Calculates the velocities of each link (and the base) in its local frame
- const btQuaternion& base_rot = getWorldToBaseRot();
- omega[0] = quatRotate(base_rot, getBaseOmega());
- vel[0] = quatRotate(base_rot, getBaseVel());
-
- for (int i = 0; i < num_links; ++i)
- {
- const btMultibodyLink& link = getLink(i);
- const int parent = link.m_parent;
-
- // transform parent vel into this frame, store in omega[i+1], vel[i+1]
- spatialTransform(btMatrix3x3(link.m_cachedRotParentToThis), link.m_cachedRVector,
- omega[parent + 1], vel[parent + 1],
- omega[i + 1], vel[i + 1]);
-
- // now add qidot * shat_i
- const btScalar* jointVel = getJointVelMultiDof(i);
- for (int dof = 0; dof < link.m_dofCount; ++dof)
- {
- omega[i + 1] += jointVel[dof] * link.getAxisTop(dof);
- vel[i + 1] += jointVel[dof] * link.getAxisBottom(dof);
- }
- }
-}
-
-
-void btMultiBody::clearConstraintForces()
-{
- m_baseConstraintForce.setValue(0, 0, 0);
- m_baseConstraintTorque.setValue(0, 0, 0);
-
- for (int i = 0; i < getNumLinks(); ++i)
- {
- m_links[i].m_appliedConstraintForce.setValue(0, 0, 0);
- m_links[i].m_appliedConstraintTorque.setValue(0, 0, 0);
- }
-}
-void btMultiBody::clearForcesAndTorques()
-{
- m_baseForce.setValue(0, 0, 0);
- m_baseTorque.setValue(0, 0, 0);
-
- for (int i = 0; i < getNumLinks(); ++i)
- {
- m_links[i].m_appliedForce.setValue(0, 0, 0);
- m_links[i].m_appliedTorque.setValue(0, 0, 0);
- m_links[i].m_jointTorque[0] = m_links[i].m_jointTorque[1] = m_links[i].m_jointTorque[2] = m_links[i].m_jointTorque[3] = m_links[i].m_jointTorque[4] = m_links[i].m_jointTorque[5] = 0.f;
- }
-}
-
-void btMultiBody::clearVelocities()
-{
- for (int i = 0; i < 6 + getNumDofs(); ++i)
- {
- m_realBuf[i] = 0.f;
- }
-}
-void btMultiBody::addLinkForce(int i, const btVector3 &f)
-{
- m_links[i].m_appliedForce += f;
-}
-
-void btMultiBody::addLinkTorque(int i, const btVector3 &t)
-{
- m_links[i].m_appliedTorque += t;
-}
-
-void btMultiBody::addLinkConstraintForce(int i, const btVector3 &f)
-{
- m_links[i].m_appliedConstraintForce += f;
-}
-
-void btMultiBody::addLinkConstraintTorque(int i, const btVector3 &t)
-{
- m_links[i].m_appliedConstraintTorque += t;
-}
-
-void btMultiBody::addJointTorque(int i, btScalar Q)
-{
- m_links[i].m_jointTorque[0] += Q;
-}
-
-void btMultiBody::addJointTorqueMultiDof(int i, int dof, btScalar Q)
-{
- m_links[i].m_jointTorque[dof] += Q;
-}
-
-void btMultiBody::addJointTorqueMultiDof(int i, const btScalar *Q)
-{
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- m_links[i].m_jointTorque[dof] = Q[dof];
-}
-
-const btVector3 &btMultiBody::getLinkForce(int i) const
-{
- return m_links[i].m_appliedForce;
-}
-
-const btVector3 &btMultiBody::getLinkTorque(int i) const
-{
- return m_links[i].m_appliedTorque;
-}
-
-btScalar btMultiBody::getJointTorque(int i) const
-{
- return m_links[i].m_jointTorque[0];
-}
-
-btScalar *btMultiBody::getJointTorqueMultiDof(int i)
-{
- return &m_links[i].m_jointTorque[0];
-}
-
-bool btMultiBody::hasFixedBase() const
-{
- return m_fixedBase || (getBaseCollider() && getBaseCollider()->isStaticObject());
-}
-
-bool btMultiBody::isBaseStaticOrKinematic() const
-{
- return m_fixedBase || (getBaseCollider() && getBaseCollider()->isStaticOrKinematicObject());
-}
-
-bool btMultiBody::isBaseKinematic() const
-{
- return getBaseCollider() && getBaseCollider()->isKinematicObject();
-}
-
-void btMultiBody::setBaseDynamicType(int dynamicType)
-{
- if(getBaseCollider()) {
- int oldFlags = getBaseCollider()->getCollisionFlags();
- oldFlags &= ~(btCollisionObject::CF_STATIC_OBJECT | btCollisionObject::CF_KINEMATIC_OBJECT);
- getBaseCollider()->setCollisionFlags(oldFlags | dynamicType);
- }
-}
-
-inline btMatrix3x3 outerProduct(const btVector3 &v0, const btVector3 &v1) //renamed it from vecMulVecTranspose (http://en.wikipedia.org/wiki/Outer_product); maybe it should be moved to btVector3 like dot and cross?
-{
- btVector3 row0 = btVector3(
- v0.x() * v1.x(),
- v0.x() * v1.y(),
- v0.x() * v1.z());
- btVector3 row1 = btVector3(
- v0.y() * v1.x(),
- v0.y() * v1.y(),
- v0.y() * v1.z());
- btVector3 row2 = btVector3(
- v0.z() * v1.x(),
- v0.z() * v1.y(),
- v0.z() * v1.z());
-
- btMatrix3x3 m(row0[0], row0[1], row0[2],
- row1[0], row1[1], row1[2],
- row2[0], row2[1], row2[2]);
- return m;
-}
-
-#define vecMulVecTranspose(v0, v1Transposed) outerProduct(v0, v1Transposed)
-//
-
-void btMultiBody::computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt,
- btAlignedObjectArray<btScalar> &scratch_r,
- btAlignedObjectArray<btVector3> &scratch_v,
- btAlignedObjectArray<btMatrix3x3> &scratch_m,
- bool isConstraintPass,
- bool jointFeedbackInWorldSpace,
- bool jointFeedbackInJointFrame)
-{
- // Implement Featherstone's algorithm to calculate joint accelerations (q_double_dot)
- // and the base linear & angular accelerations.
-
- // We apply damping forces in this routine as well as any external forces specified by the
- // caller (via addBaseForce etc).
-
- // output should point to an array of 6 + num_links reals.
- // Format is: 3 angular accelerations (in world frame), 3 linear accelerations (in world frame),
- // num_links joint acceleration values.
-
- // We added support for multi degree of freedom (multi dof) joints.
- // In addition we also can compute the joint reaction forces. This is performed in a second pass,
- // so that we can include the effect of the constraint solver forces (computed in the PGS LCP solver)
-
- m_internalNeedsJointFeedback = false;
-
- int num_links = getNumLinks();
-
- const btScalar DAMPING_K1_LINEAR = m_linearDamping;
- const btScalar DAMPING_K2_LINEAR = m_linearDamping;
-
- const btScalar DAMPING_K1_ANGULAR = m_angularDamping;
- const btScalar DAMPING_K2_ANGULAR = m_angularDamping;
-
- const btVector3 base_vel = getBaseVel();
- const btVector3 base_omega = getBaseOmega();
-
- // Temporary matrices/vectors -- use scratch space from caller
- // so that we don't have to keep reallocating every frame
-
- scratch_r.resize(2 * m_dofCount + 7); //multidof? ("Y"s use it and it is used to store qdd) => 2 x m_dofCount
- scratch_v.resize(8 * num_links + 6);
- scratch_m.resize(4 * num_links + 4);
-
- //btScalar * r_ptr = &scratch_r[0];
- btScalar *output = &scratch_r[m_dofCount]; // "output" holds the q_double_dot results
- btVector3 *v_ptr = &scratch_v[0];
-
- // vhat_i (top = angular, bottom = linear part)
- btSpatialMotionVector *spatVel = (btSpatialMotionVector *)v_ptr;
- v_ptr += num_links * 2 + 2;
- //
- // zhat_i^A
- btSpatialForceVector *zeroAccSpatFrc = (btSpatialForceVector *)v_ptr;
- v_ptr += num_links * 2 + 2;
- //
- // chat_i (note NOT defined for the base)
- btSpatialMotionVector *spatCoriolisAcc = (btSpatialMotionVector *)v_ptr;
- v_ptr += num_links * 2;
- //
- // Ihat_i^A.
- btSymmetricSpatialDyad *spatInertia = (btSymmetricSpatialDyad *)&scratch_m[num_links + 1];
-
- // Cached 3x3 rotation matrices from parent frame to this frame.
- btMatrix3x3 *rot_from_parent = &m_matrixBuf[0];
- btMatrix3x3 *rot_from_world = &scratch_m[0];
-
- // hhat_i, ahat_i
- // hhat is NOT stored for the base (but ahat is)
- btSpatialForceVector *h = (btSpatialForceVector *)(m_dofCount > 0 ? &m_vectorBuf[0] : 0);
- btSpatialMotionVector *spatAcc = (btSpatialMotionVector *)v_ptr;
- v_ptr += num_links * 2 + 2;
- //
- // Y_i, invD_i
- btScalar *invD = m_dofCount > 0 ? &m_realBuf[6 + m_dofCount] : 0;
- btScalar *Y = &scratch_r[0];
- //
- //aux variables
- btSpatialMotionVector spatJointVel; //spatial velocity due to the joint motion (i.e. without predecessors' influence)
- btScalar D[36]; //"D" matrix; it's dofxdof for each body so asingle 6x6 D matrix will do
- btScalar invD_times_Y[6]; //D^{-1} * Y [dofxdof x dofx1 = dofx1] <=> D^{-1} * u; better moved to buffers since it is recalced in calcAccelerationDeltasMultiDof; num_dof of btScalar would cover all bodies
- btSpatialMotionVector result; //holds results of the SolveImatrix op; it is a spatial motion vector (accel)
- btScalar Y_minus_hT_a[6]; //Y - h^{T} * a; it's dofx1 for each body so a single 6x1 temp is enough
- btSpatialForceVector spatForceVecTemps[6]; //6 temporary spatial force vectors
- btSpatialTransformationMatrix fromParent; //spatial transform from parent to child
- btSymmetricSpatialDyad dyadTemp; //inertia matrix temp
- btSpatialTransformationMatrix fromWorld;
- fromWorld.m_trnVec.setZero();
- /////////////////
-
- // ptr to the joint accel part of the output
- btScalar *joint_accel = output + 6;
-
- // Start of the algorithm proper.
-
- // First 'upward' loop.
- // Combines CompTreeLinkVelocities and InitTreeLinks from Mirtich.
-
- rot_from_parent[0] = btMatrix3x3(m_baseQuat); //m_baseQuat assumed to be alias!?
-
- //create the vector of spatial velocity of the base by transforming global-coor linear and angular velocities into base-local coordinates
- spatVel[0].setVector(rot_from_parent[0] * base_omega, rot_from_parent[0] * base_vel);
-
- if (isBaseStaticOrKinematic())
- {
- zeroAccSpatFrc[0].setZero();
- }
- else
- {
- const btVector3 &baseForce = isConstraintPass ? m_baseConstraintForce : m_baseForce;
- const btVector3 &baseTorque = isConstraintPass ? m_baseConstraintTorque : m_baseTorque;
- //external forces
- zeroAccSpatFrc[0].setVector(-(rot_from_parent[0] * baseTorque), -(rot_from_parent[0] * baseForce));
-
- //adding damping terms (only)
- const btScalar linDampMult = 1., angDampMult = 1.;
- zeroAccSpatFrc[0].addVector(angDampMult * m_baseInertia * spatVel[0].getAngular() * (DAMPING_K1_ANGULAR + DAMPING_K2_ANGULAR * spatVel[0].getAngular().safeNorm()),
- linDampMult * m_baseMass * spatVel[0].getLinear() * (DAMPING_K1_LINEAR + DAMPING_K2_LINEAR * spatVel[0].getLinear().safeNorm()));
-
- //
- //p += vhat x Ihat vhat - done in a simpler way
- if (m_useGyroTerm)
- zeroAccSpatFrc[0].addAngular(spatVel[0].getAngular().cross(m_baseInertia * spatVel[0].getAngular()));
- //
- zeroAccSpatFrc[0].addLinear(m_baseMass * spatVel[0].getAngular().cross(spatVel[0].getLinear()));
- }
-
- //init the spatial AB inertia (it has the simple form thanks to choosing local body frames origins at their COMs)
- spatInertia[0].setMatrix(btMatrix3x3(0, 0, 0, 0, 0, 0, 0, 0, 0),
- //
- btMatrix3x3(m_baseMass, 0, 0,
- 0, m_baseMass, 0,
- 0, 0, m_baseMass),
- //
- btMatrix3x3(m_baseInertia[0], 0, 0,
- 0, m_baseInertia[1], 0,
- 0, 0, m_baseInertia[2]));
-
- rot_from_world[0] = rot_from_parent[0];
-
- //
- for (int i = 0; i < num_links; ++i)
- {
- const int parent = m_links[i].m_parent;
- rot_from_parent[i + 1] = btMatrix3x3(m_links[i].m_cachedRotParentToThis);
- rot_from_world[i + 1] = rot_from_parent[i + 1] * rot_from_world[parent + 1];
-
- fromParent.m_rotMat = rot_from_parent[i + 1];
- fromParent.m_trnVec = m_links[i].m_cachedRVector;
- fromWorld.m_rotMat = rot_from_world[i + 1];
- fromParent.transform(spatVel[parent + 1], spatVel[i + 1]);
-
- // now set vhat_i to its true value by doing
- // vhat_i += qidot * shat_i
- if (!m_useGlobalVelocities)
- {
- spatJointVel.setZero();
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- spatJointVel += m_links[i].m_axes[dof] * getJointVelMultiDof(i)[dof];
-
- // remember vhat_i is really vhat_p(i) (but in current frame) at this point => we need to add velocity across the inboard joint
- spatVel[i + 1] += spatJointVel;
-
- //
- // vhat_i is vhat_p(i) transformed to local coors + the velocity across the i-th inboard joint
- //spatVel[i+1] = fromParent * spatVel[parent+1] + spatJointVel;
- }
- else
- {
- fromWorld.transformRotationOnly(m_links[i].m_absFrameTotVelocity, spatVel[i + 1]);
- fromWorld.transformRotationOnly(m_links[i].m_absFrameLocVelocity, spatJointVel);
- }
-
- // we can now calculate chat_i
- spatVel[i + 1].cross(spatJointVel, spatCoriolisAcc[i]);
-
- // calculate zhat_i^A
- //
- if (isLinkAndAllAncestorsKinematic(i))
- {
- zeroAccSpatFrc[i].setZero();
- }
- else{
- //external forces
- btVector3 linkAppliedForce = isConstraintPass ? m_links[i].m_appliedConstraintForce : m_links[i].m_appliedForce;
- btVector3 linkAppliedTorque = isConstraintPass ? m_links[i].m_appliedConstraintTorque : m_links[i].m_appliedTorque;
-
- zeroAccSpatFrc[i + 1].setVector(-(rot_from_world[i + 1] * linkAppliedTorque), -(rot_from_world[i + 1] * linkAppliedForce));
-
-#if 0
- {
-
- b3Printf("stepVelocitiesMultiDof zeroAccSpatFrc[%d] linear:%f,%f,%f, angular:%f,%f,%f",
- i+1,
- zeroAccSpatFrc[i+1].m_topVec[0],
- zeroAccSpatFrc[i+1].m_topVec[1],
- zeroAccSpatFrc[i+1].m_topVec[2],
-
- zeroAccSpatFrc[i+1].m_bottomVec[0],
- zeroAccSpatFrc[i+1].m_bottomVec[1],
- zeroAccSpatFrc[i+1].m_bottomVec[2]);
- }
-#endif
- //
- //adding damping terms (only)
- btScalar linDampMult = 1., angDampMult = 1.;
- zeroAccSpatFrc[i + 1].addVector(angDampMult * m_links[i].m_inertiaLocal * spatVel[i + 1].getAngular() * (DAMPING_K1_ANGULAR + DAMPING_K2_ANGULAR * spatVel[i + 1].getAngular().safeNorm()),
- linDampMult * m_links[i].m_mass * spatVel[i + 1].getLinear() * (DAMPING_K1_LINEAR + DAMPING_K2_LINEAR * spatVel[i + 1].getLinear().safeNorm()));
- //p += vhat x Ihat vhat - done in a simpler way
- if (m_useGyroTerm)
- zeroAccSpatFrc[i + 1].addAngular(spatVel[i + 1].getAngular().cross(m_links[i].m_inertiaLocal * spatVel[i + 1].getAngular()));
- //
- zeroAccSpatFrc[i + 1].addLinear(m_links[i].m_mass * spatVel[i + 1].getAngular().cross(spatVel[i + 1].getLinear()));
- //
- //btVector3 temp = m_links[i].m_mass * spatVel[i+1].getAngular().cross(spatVel[i+1].getLinear());
- ////clamp parent's omega
- //btScalar parOmegaMod = temp.length();
- //btScalar parOmegaModMax = 1000;
- //if(parOmegaMod > parOmegaModMax)
- // temp *= parOmegaModMax / parOmegaMod;
- //zeroAccSpatFrc[i+1].addLinear(temp);
- //printf("|zeroAccSpatFrc[%d]| = %.4f\n", i+1, temp.length());
- //temp = spatCoriolisAcc[i].getLinear();
- //printf("|spatCoriolisAcc[%d]| = %.4f\n", i+1, temp.length());
- }
-
- // calculate Ihat_i^A
- //init the spatial AB inertia (it has the simple form thanks to choosing local body frames origins at their COMs)
- spatInertia[i + 1].setMatrix(btMatrix3x3(0, 0, 0, 0, 0, 0, 0, 0, 0),
- //
- btMatrix3x3(m_links[i].m_mass, 0, 0,
- 0, m_links[i].m_mass, 0,
- 0, 0, m_links[i].m_mass),
- //
- btMatrix3x3(m_links[i].m_inertiaLocal[0], 0, 0,
- 0, m_links[i].m_inertiaLocal[1], 0,
- 0, 0, m_links[i].m_inertiaLocal[2]));
-
- //printf("w[%d] = [%.4f %.4f %.4f]\n", i, vel_top_angular[i+1].x(), vel_top_angular[i+1].y(), vel_top_angular[i+1].z());
- //printf("v[%d] = [%.4f %.4f %.4f]\n", i, vel_bottom_linear[i+1].x(), vel_bottom_linear[i+1].y(), vel_bottom_linear[i+1].z());
- //printf("c[%d] = [%.4f %.4f %.4f]\n", i, coriolis_bottom_linear[i].x(), coriolis_bottom_linear[i].y(), coriolis_bottom_linear[i].z());
- }
-
- // 'Downward' loop.
- // (part of TreeForwardDynamics in Mirtich.)
- for (int i = num_links - 1; i >= 0; --i)
- {
- if(isLinkAndAllAncestorsKinematic(i))
- continue;
- const int parent = m_links[i].m_parent;
- fromParent.m_rotMat = rot_from_parent[i + 1];
- fromParent.m_trnVec = m_links[i].m_cachedRVector;
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- btSpatialForceVector &hDof = h[m_links[i].m_dofOffset + dof];
- //
- hDof = spatInertia[i + 1] * m_links[i].m_axes[dof];
- //
- Y[m_links[i].m_dofOffset + dof] = m_links[i].m_jointTorque[dof] - m_links[i].m_axes[dof].dot(zeroAccSpatFrc[i + 1]) - spatCoriolisAcc[i].dot(hDof);
- }
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- btScalar *D_row = &D[dof * m_links[i].m_dofCount];
- for (int dof2 = 0; dof2 < m_links[i].m_dofCount; ++dof2)
- {
- const btSpatialForceVector &hDof2 = h[m_links[i].m_dofOffset + dof2];
- D_row[dof2] = m_links[i].m_axes[dof].dot(hDof2);
- }
- }
-
- btScalar *invDi = &invD[m_links[i].m_dofOffset * m_links[i].m_dofOffset];
- switch (m_links[i].m_jointType)
- {
- case btMultibodyLink::ePrismatic:
- case btMultibodyLink::eRevolute:
- {
- if (D[0] >= SIMD_EPSILON)
- {
- invDi[0] = 1.0f / D[0];
- }
- else
- {
- invDi[0] = 0;
- }
- break;
- }
- case btMultibodyLink::eSpherical:
- case btMultibodyLink::ePlanar:
- {
- const btMatrix3x3 D3x3(D[0], D[1], D[2], D[3], D[4], D[5], D[6], D[7], D[8]);
- const btMatrix3x3 invD3x3(D3x3.inverse());
-
- //unroll the loop?
- for (int row = 0; row < 3; ++row)
- {
- for (int col = 0; col < 3; ++col)
- {
- invDi[row * 3 + col] = invD3x3[row][col];
- }
- }
-
- break;
- }
- default:
- {
- }
- }
-
- //determine h*D^{-1}
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- spatForceVecTemps[dof].setZero();
-
- for (int dof2 = 0; dof2 < m_links[i].m_dofCount; ++dof2)
- {
- const btSpatialForceVector &hDof2 = h[m_links[i].m_dofOffset + dof2];
- //
- spatForceVecTemps[dof] += hDof2 * invDi[dof2 * m_links[i].m_dofCount + dof];
- }
- }
-
- dyadTemp = spatInertia[i + 1];
-
- //determine (h*D^{-1}) * h^{T}
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- const btSpatialForceVector &hDof = h[m_links[i].m_dofOffset + dof];
- //
- dyadTemp -= symmetricSpatialOuterProduct(hDof, spatForceVecTemps[dof]);
- }
-
- fromParent.transformInverse(dyadTemp, spatInertia[parent + 1], btSpatialTransformationMatrix::Add);
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- invD_times_Y[dof] = 0.f;
-
- for (int dof2 = 0; dof2 < m_links[i].m_dofCount; ++dof2)
- {
- invD_times_Y[dof] += invDi[dof * m_links[i].m_dofCount + dof2] * Y[m_links[i].m_dofOffset + dof2];
- }
- }
-
- spatForceVecTemps[0] = zeroAccSpatFrc[i + 1] + spatInertia[i + 1] * spatCoriolisAcc[i];
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- const btSpatialForceVector &hDof = h[m_links[i].m_dofOffset + dof];
- //
- spatForceVecTemps[0] += hDof * invD_times_Y[dof];
- }
-
- fromParent.transformInverse(spatForceVecTemps[0], spatForceVecTemps[1]);
-
- zeroAccSpatFrc[parent + 1] += spatForceVecTemps[1];
- }
-
- // Second 'upward' loop
- // (part of TreeForwardDynamics in Mirtich)
-
- if (isBaseStaticOrKinematic())
- {
- spatAcc[0].setZero();
- }
- else
- {
- if (num_links > 0)
- {
- m_cachedInertiaValid = true;
- m_cachedInertiaTopLeft = spatInertia[0].m_topLeftMat;
- m_cachedInertiaTopRight = spatInertia[0].m_topRightMat;
- m_cachedInertiaLowerLeft = spatInertia[0].m_bottomLeftMat;
- m_cachedInertiaLowerRight = spatInertia[0].m_topLeftMat.transpose();
- }
-
- solveImatrix(zeroAccSpatFrc[0], result);
- spatAcc[0] = -result;
- }
-
- // now do the loop over the m_links
- for (int i = 0; i < num_links; ++i)
- {
- // qdd = D^{-1} * (Y - h^{T}*apar) = (S^{T}*I*S)^{-1} * (tau - S^{T}*I*cor - S^{T}*zeroAccFrc - S^{T}*I*apar)
- // a = apar + cor + Sqdd
- //or
- // qdd = D^{-1} * (Y - h^{T}*(apar+cor))
- // a = apar + Sqdd
-
- const int parent = m_links[i].m_parent;
- fromParent.m_rotMat = rot_from_parent[i + 1];
- fromParent.m_trnVec = m_links[i].m_cachedRVector;
-
- fromParent.transform(spatAcc[parent + 1], spatAcc[i + 1]);
-
- if(!isLinkAndAllAncestorsKinematic(i))
- {
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- const btSpatialForceVector &hDof = h[m_links[i].m_dofOffset + dof];
- //
- Y_minus_hT_a[dof] = Y[m_links[i].m_dofOffset + dof] - spatAcc[i + 1].dot(hDof);
- }
- btScalar *invDi = &invD[m_links[i].m_dofOffset * m_links[i].m_dofOffset];
- //D^{-1} * (Y - h^{T}*apar)
- mulMatrix(invDi, Y_minus_hT_a, m_links[i].m_dofCount, m_links[i].m_dofCount, m_links[i].m_dofCount, 1, &joint_accel[m_links[i].m_dofOffset]);
-
- spatAcc[i + 1] += spatCoriolisAcc[i];
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- spatAcc[i + 1] += m_links[i].m_axes[dof] * joint_accel[m_links[i].m_dofOffset + dof];
- }
-
- if (m_links[i].m_jointFeedback)
- {
- m_internalNeedsJointFeedback = true;
-
- btVector3 angularBotVec = (spatInertia[i + 1] * spatAcc[i + 1] + zeroAccSpatFrc[i + 1]).m_bottomVec;
- btVector3 linearTopVec = (spatInertia[i + 1] * spatAcc[i + 1] + zeroAccSpatFrc[i + 1]).m_topVec;
-
- if (jointFeedbackInJointFrame)
- {
- //shift the reaction forces to the joint frame
- //linear (force) component is the same
- //shift the angular (torque, moment) component using the relative position, m_links[i].m_dVector
- angularBotVec = angularBotVec - linearTopVec.cross(m_links[i].m_dVector);
- }
-
- if (jointFeedbackInWorldSpace)
- {
- if (isConstraintPass)
- {
- m_links[i].m_jointFeedback->m_reactionForces.m_bottomVec += m_links[i].m_cachedWorldTransform.getBasis() * angularBotVec;
- m_links[i].m_jointFeedback->m_reactionForces.m_topVec += m_links[i].m_cachedWorldTransform.getBasis() * linearTopVec;
- }
- else
- {
- m_links[i].m_jointFeedback->m_reactionForces.m_bottomVec = m_links[i].m_cachedWorldTransform.getBasis() * angularBotVec;
- m_links[i].m_jointFeedback->m_reactionForces.m_topVec = m_links[i].m_cachedWorldTransform.getBasis() * linearTopVec;
- }
- }
- else
- {
- if (isConstraintPass)
- {
- m_links[i].m_jointFeedback->m_reactionForces.m_bottomVec += angularBotVec;
- m_links[i].m_jointFeedback->m_reactionForces.m_topVec += linearTopVec;
- }
- else
- {
- m_links[i].m_jointFeedback->m_reactionForces.m_bottomVec = angularBotVec;
- m_links[i].m_jointFeedback->m_reactionForces.m_topVec = linearTopVec;
- }
- }
- }
- }
-
- // transform base accelerations back to the world frame.
- const btVector3 omegadot_out = rot_from_parent[0].transpose() * spatAcc[0].getAngular();
- output[0] = omegadot_out[0];
- output[1] = omegadot_out[1];
- output[2] = omegadot_out[2];
-
- const btVector3 vdot_out = rot_from_parent[0].transpose() * (spatAcc[0].getLinear() + spatVel[0].getAngular().cross(spatVel[0].getLinear()));
- output[3] = vdot_out[0];
- output[4] = vdot_out[1];
- output[5] = vdot_out[2];
-
- /////////////////
- //printf("q = [");
- //printf("%.6f, %.6f, %.6f, %.6f, %.6f, %.6f, %.6f ", m_baseQuat.x(), m_baseQuat.y(), m_baseQuat.z(), m_baseQuat.w(), m_basePos.x(), m_basePos.y(), m_basePos.z());
- //for(int link = 0; link < getNumLinks(); ++link)
- // for(int dof = 0; dof < m_links[link].m_dofCount; ++dof)
- // printf("%.6f ", m_links[link].m_jointPos[dof]);
- //printf("]\n");
- ////
- //printf("qd = [");
- //for(int dof = 0; dof < getNumDofs() + 6; ++dof)
- // printf("%.6f ", m_realBuf[dof]);
- //printf("]\n");
- //printf("qdd = [");
- //for(int dof = 0; dof < getNumDofs() + 6; ++dof)
- // printf("%.6f ", output[dof]);
- //printf("]\n");
- /////////////////
-
- // Final step: add the accelerations (times dt) to the velocities.
-
- if (!isConstraintPass)
- {
- if (dt > 0.)
- applyDeltaVeeMultiDof(output, dt);
- }
- /////
- //btScalar angularThres = 1;
- //btScalar maxAngVel = 0.;
- //bool scaleDown = 1.;
- //for(int link = 0; link < m_links.size(); ++link)
- //{
- // if(spatVel[link+1].getAngular().length() > maxAngVel)
- // {
- // maxAngVel = spatVel[link+1].getAngular().length();
- // scaleDown = angularThres / spatVel[link+1].getAngular().length();
- // break;
- // }
- //}
-
- //if(scaleDown != 1.)
- //{
- // for(int link = 0; link < m_links.size(); ++link)
- // {
- // if(m_links[link].m_jointType == btMultibodyLink::eRevolute || m_links[link].m_jointType == btMultibodyLink::eSpherical)
- // {
- // for(int dof = 0; dof < m_links[link].m_dofCount; ++dof)
- // getJointVelMultiDof(link)[dof] *= scaleDown;
- // }
- // }
- //}
- /////
-
- /////////////////////
- if (m_useGlobalVelocities)
- {
- for (int i = 0; i < num_links; ++i)
- {
- const int parent = m_links[i].m_parent;
- //rot_from_parent[i+1] = btMatrix3x3(m_links[i].m_cachedRotParentToThis); /// <- done
- //rot_from_world[i+1] = rot_from_parent[i+1] * rot_from_world[parent+1]; /// <- done
-
- fromParent.m_rotMat = rot_from_parent[i + 1];
- fromParent.m_trnVec = m_links[i].m_cachedRVector;
- fromWorld.m_rotMat = rot_from_world[i + 1];
-
- // vhat_i = i_xhat_p(i) * vhat_p(i)
- fromParent.transform(spatVel[parent + 1], spatVel[i + 1]);
- //nice alternative below (using operator *) but it generates temps
- /////////////////////////////////////////////////////////////
-
- // now set vhat_i to its true value by doing
- // vhat_i += qidot * shat_i
- spatJointVel.setZero();
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- spatJointVel += m_links[i].m_axes[dof] * getJointVelMultiDof(i)[dof];
-
- // remember vhat_i is really vhat_p(i) (but in current frame) at this point => we need to add velocity across the inboard joint
- spatVel[i + 1] += spatJointVel;
-
- fromWorld.transformInverseRotationOnly(spatVel[i + 1], m_links[i].m_absFrameTotVelocity);
- fromWorld.transformInverseRotationOnly(spatJointVel, m_links[i].m_absFrameLocVelocity);
- }
- }
-}
-
-void btMultiBody::solveImatrix(const btVector3 &rhs_top, const btVector3 &rhs_bot, btScalar result[6]) const
-{
- int num_links = getNumLinks();
- ///solve I * x = rhs, so the result = invI * rhs
- if (num_links == 0)
- {
- // in the case of 0 m_links (i.e. a plain rigid body, not a multibody) rhs * invI is easier
-
- if ((m_baseInertia[0] >= SIMD_EPSILON) && (m_baseInertia[1] >= SIMD_EPSILON) && (m_baseInertia[2] >= SIMD_EPSILON))
- {
- result[0] = rhs_bot[0] / m_baseInertia[0];
- result[1] = rhs_bot[1] / m_baseInertia[1];
- result[2] = rhs_bot[2] / m_baseInertia[2];
- }
- else
- {
- result[0] = 0;
- result[1] = 0;
- result[2] = 0;
- }
- if (m_baseMass >= SIMD_EPSILON)
- {
- result[3] = rhs_top[0] / m_baseMass;
- result[4] = rhs_top[1] / m_baseMass;
- result[5] = rhs_top[2] / m_baseMass;
- }
- else
- {
- result[3] = 0;
- result[4] = 0;
- result[5] = 0;
- }
- }
- else
- {
- if (!m_cachedInertiaValid)
- {
- for (int i = 0; i < 6; i++)
- {
- result[i] = 0.f;
- }
- return;
- }
- /// Special routine for calculating the inverse of a spatial inertia matrix
- ///the 6x6 matrix is stored as 4 blocks of 3x3 matrices
- btMatrix3x3 Binv = m_cachedInertiaTopRight.inverse() * -1.f;
- btMatrix3x3 tmp = m_cachedInertiaLowerRight * Binv;
- btMatrix3x3 invIupper_right = (tmp * m_cachedInertiaTopLeft + m_cachedInertiaLowerLeft).inverse();
- tmp = invIupper_right * m_cachedInertiaLowerRight;
- btMatrix3x3 invI_upper_left = (tmp * Binv);
- btMatrix3x3 invI_lower_right = (invI_upper_left).transpose();
- tmp = m_cachedInertiaTopLeft * invI_upper_left;
- tmp[0][0] -= 1.0;
- tmp[1][1] -= 1.0;
- tmp[2][2] -= 1.0;
- btMatrix3x3 invI_lower_left = (Binv * tmp);
-
- //multiply result = invI * rhs
- {
- btVector3 vtop = invI_upper_left * rhs_top;
- btVector3 tmp;
- tmp = invIupper_right * rhs_bot;
- vtop += tmp;
- btVector3 vbot = invI_lower_left * rhs_top;
- tmp = invI_lower_right * rhs_bot;
- vbot += tmp;
- result[0] = vtop[0];
- result[1] = vtop[1];
- result[2] = vtop[2];
- result[3] = vbot[0];
- result[4] = vbot[1];
- result[5] = vbot[2];
- }
- }
-}
-void btMultiBody::solveImatrix(const btSpatialForceVector &rhs, btSpatialMotionVector &result) const
-{
- int num_links = getNumLinks();
- ///solve I * x = rhs, so the result = invI * rhs
- if (num_links == 0)
- {
- // in the case of 0 m_links (i.e. a plain rigid body, not a multibody) rhs * invI is easier
- if ((m_baseInertia[0] >= SIMD_EPSILON) && (m_baseInertia[1] >= SIMD_EPSILON) && (m_baseInertia[2] >= SIMD_EPSILON))
- {
- result.setAngular(rhs.getAngular() / m_baseInertia);
- }
- else
- {
- result.setAngular(btVector3(0, 0, 0));
- }
- if (m_baseMass >= SIMD_EPSILON)
- {
- result.setLinear(rhs.getLinear() / m_baseMass);
- }
- else
- {
- result.setLinear(btVector3(0, 0, 0));
- }
- }
- else
- {
- /// Special routine for calculating the inverse of a spatial inertia matrix
- ///the 6x6 matrix is stored as 4 blocks of 3x3 matrices
- if (!m_cachedInertiaValid)
- {
- result.setLinear(btVector3(0, 0, 0));
- result.setAngular(btVector3(0, 0, 0));
- result.setVector(btVector3(0, 0, 0), btVector3(0, 0, 0));
- return;
- }
- btMatrix3x3 Binv = m_cachedInertiaTopRight.inverse() * -1.f;
- btMatrix3x3 tmp = m_cachedInertiaLowerRight * Binv;
- btMatrix3x3 invIupper_right = (tmp * m_cachedInertiaTopLeft + m_cachedInertiaLowerLeft).inverse();
- tmp = invIupper_right * m_cachedInertiaLowerRight;
- btMatrix3x3 invI_upper_left = (tmp * Binv);
- btMatrix3x3 invI_lower_right = (invI_upper_left).transpose();
- tmp = m_cachedInertiaTopLeft * invI_upper_left;
- tmp[0][0] -= 1.0;
- tmp[1][1] -= 1.0;
- tmp[2][2] -= 1.0;
- btMatrix3x3 invI_lower_left = (Binv * tmp);
-
- //multiply result = invI * rhs
- {
- btVector3 vtop = invI_upper_left * rhs.getLinear();
- btVector3 tmp;
- tmp = invIupper_right * rhs.getAngular();
- vtop += tmp;
- btVector3 vbot = invI_lower_left * rhs.getLinear();
- tmp = invI_lower_right * rhs.getAngular();
- vbot += tmp;
- result.setVector(vtop, vbot);
- }
- }
-}
-
-void btMultiBody::mulMatrix(const btScalar *pA, const btScalar *pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const
-{
- for (int row = 0; row < rowsA; row++)
- {
- for (int col = 0; col < colsB; col++)
- {
- pC[row * colsB + col] = 0.f;
- for (int inner = 0; inner < rowsB; inner++)
- {
- pC[row * colsB + col] += pA[row * colsA + inner] * pB[col + inner * colsB];
- }
- }
- }
-}
-
-void btMultiBody::calcAccelerationDeltasMultiDof(const btScalar *force, btScalar *output,
- btAlignedObjectArray<btScalar> &scratch_r, btAlignedObjectArray<btVector3> &scratch_v) const
-{
- // Temporary matrices/vectors -- use scratch space from caller
- // so that we don't have to keep reallocating every frame
-
- int num_links = getNumLinks();
- scratch_r.resize(m_dofCount);
- scratch_v.resize(4 * num_links + 4);
-
- btScalar *r_ptr = m_dofCount ? &scratch_r[0] : 0;
- btVector3 *v_ptr = &scratch_v[0];
-
- // zhat_i^A (scratch space)
- btSpatialForceVector *zeroAccSpatFrc = (btSpatialForceVector *)v_ptr;
- v_ptr += num_links * 2 + 2;
-
- // rot_from_parent (cached from calcAccelerations)
- const btMatrix3x3 *rot_from_parent = &m_matrixBuf[0];
-
- // hhat (cached), accel (scratch)
- // hhat is NOT stored for the base (but ahat is)
- const btSpatialForceVector *h = (btSpatialForceVector *)(m_dofCount > 0 ? &m_vectorBuf[0] : 0);
- btSpatialMotionVector *spatAcc = (btSpatialMotionVector *)v_ptr;
- v_ptr += num_links * 2 + 2;
-
- // Y_i (scratch), invD_i (cached)
- const btScalar *invD = m_dofCount > 0 ? &m_realBuf[6 + m_dofCount] : 0;
- btScalar *Y = r_ptr;
- ////////////////
- //aux variables
- btScalar invD_times_Y[6]; //D^{-1} * Y [dofxdof x dofx1 = dofx1] <=> D^{-1} * u; better moved to buffers since it is recalced in calcAccelerationDeltasMultiDof; num_dof of btScalar would cover all bodies
- btSpatialMotionVector result; //holds results of the SolveImatrix op; it is a spatial motion vector (accel)
- btScalar Y_minus_hT_a[6]; //Y - h^{T} * a; it's dofx1 for each body so a single 6x1 temp is enough
- btSpatialForceVector spatForceVecTemps[6]; //6 temporary spatial force vectors
- btSpatialTransformationMatrix fromParent;
- /////////////////
-
- // First 'upward' loop.
- // Combines CompTreeLinkVelocities and InitTreeLinks from Mirtich.
-
- // Fill in zero_acc
- // -- set to force/torque on the base, zero otherwise
- if (isBaseStaticOrKinematic())
- {
- zeroAccSpatFrc[0].setZero();
- }
- else
- {
- //test forces
- fromParent.m_rotMat = rot_from_parent[0];
- fromParent.transformRotationOnly(btSpatialForceVector(-force[0], -force[1], -force[2], -force[3], -force[4], -force[5]), zeroAccSpatFrc[0]);
- }
- for (int i = 0; i < num_links; ++i)
- {
- zeroAccSpatFrc[i + 1].setZero();
- }
-
- // 'Downward' loop.
- // (part of TreeForwardDynamics in Mirtich.)
- for (int i = num_links - 1; i >= 0; --i)
- {
- if(isLinkAndAllAncestorsKinematic(i))
- continue;
- const int parent = m_links[i].m_parent;
- fromParent.m_rotMat = rot_from_parent[i + 1];
- fromParent.m_trnVec = m_links[i].m_cachedRVector;
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- Y[m_links[i].m_dofOffset + dof] = force[6 + m_links[i].m_dofOffset + dof] - m_links[i].m_axes[dof].dot(zeroAccSpatFrc[i + 1]);
- }
-
- btVector3 in_top, in_bottom, out_top, out_bottom;
- const btScalar *invDi = &invD[m_links[i].m_dofOffset * m_links[i].m_dofOffset];
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- invD_times_Y[dof] = 0.f;
-
- for (int dof2 = 0; dof2 < m_links[i].m_dofCount; ++dof2)
- {
- invD_times_Y[dof] += invDi[dof * m_links[i].m_dofCount + dof2] * Y[m_links[i].m_dofOffset + dof2];
- }
- }
-
- // Zp += pXi * (Zi + hi*Yi/Di)
- spatForceVecTemps[0] = zeroAccSpatFrc[i + 1];
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- const btSpatialForceVector &hDof = h[m_links[i].m_dofOffset + dof];
- //
- spatForceVecTemps[0] += hDof * invD_times_Y[dof];
- }
-
- fromParent.transformInverse(spatForceVecTemps[0], spatForceVecTemps[1]);
-
- zeroAccSpatFrc[parent + 1] += spatForceVecTemps[1];
- }
-
- // ptr to the joint accel part of the output
- btScalar *joint_accel = output + 6;
-
- // Second 'upward' loop
- // (part of TreeForwardDynamics in Mirtich)
-
- if (isBaseStaticOrKinematic())
- {
- spatAcc[0].setZero();
- }
- else
- {
- solveImatrix(zeroAccSpatFrc[0], result);
- spatAcc[0] = -result;
- }
-
- // now do the loop over the m_links
- for (int i = 0; i < num_links; ++i)
- {
- if(isLinkAndAllAncestorsKinematic(i))
- continue;
- const int parent = m_links[i].m_parent;
- fromParent.m_rotMat = rot_from_parent[i + 1];
- fromParent.m_trnVec = m_links[i].m_cachedRVector;
-
- fromParent.transform(spatAcc[parent + 1], spatAcc[i + 1]);
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- {
- const btSpatialForceVector &hDof = h[m_links[i].m_dofOffset + dof];
- //
- Y_minus_hT_a[dof] = Y[m_links[i].m_dofOffset + dof] - spatAcc[i + 1].dot(hDof);
- }
-
- const btScalar *invDi = &invD[m_links[i].m_dofOffset * m_links[i].m_dofOffset];
- mulMatrix(const_cast<btScalar *>(invDi), Y_minus_hT_a, m_links[i].m_dofCount, m_links[i].m_dofCount, m_links[i].m_dofCount, 1, &joint_accel[m_links[i].m_dofOffset]);
-
- for (int dof = 0; dof < m_links[i].m_dofCount; ++dof)
- spatAcc[i + 1] += m_links[i].m_axes[dof] * joint_accel[m_links[i].m_dofOffset + dof];
- }
-
- // transform base accelerations back to the world frame.
- btVector3 omegadot_out;
- omegadot_out = rot_from_parent[0].transpose() * spatAcc[0].getAngular();
- output[0] = omegadot_out[0];
- output[1] = omegadot_out[1];
- output[2] = omegadot_out[2];
-
- btVector3 vdot_out;
- vdot_out = rot_from_parent[0].transpose() * spatAcc[0].getLinear();
- output[3] = vdot_out[0];
- output[4] = vdot_out[1];
- output[5] = vdot_out[2];
-
- /////////////////
- //printf("delta = [");
- //for(int dof = 0; dof < getNumDofs() + 6; ++dof)
- // printf("%.2f ", output[dof]);
- //printf("]\n");
- /////////////////
-}
-void btMultiBody::predictPositionsMultiDof(btScalar dt)
-{
- int num_links = getNumLinks();
- if(!isBaseKinematic())
- {
- // step position by adding dt * velocity
- //btVector3 v = getBaseVel();
- //m_basePos += dt * v;
- //
- btScalar *pBasePos;
- btScalar *pBaseVel = &m_realBuf[3]; //note: the !pqd case assumes m_realBuf holds with base velocity at 3,4,5 (should be wrapped for safety)
-
- // reset to current position
- for (int i = 0; i < 3; ++i)
- {
- m_basePos_interpolate[i] = m_basePos[i];
- }
- pBasePos = m_basePos_interpolate;
-
- pBasePos[0] += dt * pBaseVel[0];
- pBasePos[1] += dt * pBaseVel[1];
- pBasePos[2] += dt * pBaseVel[2];
- }
-
- ///////////////////////////////
- //local functor for quaternion integration (to avoid error prone redundancy)
- struct
- {
- //"exponential map" based on btTransformUtil::integrateTransform(..)
- void operator()(const btVector3 &omega, btQuaternion &quat, bool baseBody, btScalar dt)
- {
- //baseBody => quat is alias and omega is global coor
- //!baseBody => quat is alibi and omega is local coor
-
- btVector3 axis;
- btVector3 angvel;
-
- if (!baseBody)
- angvel = quatRotate(quat, omega); //if quat is not m_baseQuat, it is alibi => ok
- else
- angvel = omega;
-
- btScalar fAngle = angvel.length();
- //limit the angular motion
- if (fAngle * dt > ANGULAR_MOTION_THRESHOLD)
- {
- fAngle = btScalar(0.5) * SIMD_HALF_PI / dt;
- }
-
- if (fAngle < btScalar(0.001))
- {
- // use Taylor's expansions of sync function
- axis = angvel * (btScalar(0.5) * dt - (dt * dt * dt) * (btScalar(0.020833333333)) * fAngle * fAngle);
- }
- else
- {
- // sync(fAngle) = sin(c*fAngle)/t
- axis = angvel * (btSin(btScalar(0.5) * fAngle * dt) / fAngle);
- }
-
- if (!baseBody)
- quat = btQuaternion(axis.x(), axis.y(), axis.z(), btCos(fAngle * dt * btScalar(0.5))) * quat;
- else
- quat = quat * btQuaternion(-axis.x(), -axis.y(), -axis.z(), btCos(fAngle * dt * btScalar(0.5)));
- //equivalent to: quat = (btQuaternion(axis.x(),axis.y(),axis.z(),btCos( fAngle*dt*btScalar(0.5) )) * quat.inverse()).inverse();
-
- quat.normalize();
- }
- } pQuatUpdateFun;
- ///////////////////////////////
-
- //pQuatUpdateFun(getBaseOmega(), m_baseQuat, true, dt);
- //
- if(!isBaseKinematic())
- {
- btScalar *pBaseQuat;
-
- // reset to current orientation
- for (int i = 0; i < 4; ++i)
- {
- m_baseQuat_interpolate[i] = m_baseQuat[i];
- }
- pBaseQuat = m_baseQuat_interpolate;
-
- btScalar *pBaseOmega = &m_realBuf[0]; //note: the !pqd case assumes m_realBuf starts with base omega (should be wrapped for safety)
- //
- btQuaternion baseQuat;
- baseQuat.setValue(pBaseQuat[0], pBaseQuat[1], pBaseQuat[2], pBaseQuat[3]);
- btVector3 baseOmega;
- baseOmega.setValue(pBaseOmega[0], pBaseOmega[1], pBaseOmega[2]);
- pQuatUpdateFun(baseOmega, baseQuat, true, dt);
- pBaseQuat[0] = baseQuat.x();
- pBaseQuat[1] = baseQuat.y();
- pBaseQuat[2] = baseQuat.z();
- pBaseQuat[3] = baseQuat.w();
- }
-
- // Finally we can update m_jointPos for each of the m_links
- for (int i = 0; i < num_links; ++i)
- {
- btScalar *pJointPos;
- pJointPos = &m_links[i].m_jointPos_interpolate[0];
-
- if (m_links[i].m_collider && m_links[i].m_collider->isStaticOrKinematic())
- {
- switch (m_links[i].m_jointType)
- {
- case btMultibodyLink::ePrismatic:
- case btMultibodyLink::eRevolute:
- {
- pJointPos[0] = m_links[i].m_jointPos[0];
- break;
- }
- case btMultibodyLink::eSpherical:
- {
- for (int j = 0; j < 4; ++j)
- {
- pJointPos[j] = m_links[i].m_jointPos[j];
- }
- break;
- }
- case btMultibodyLink::ePlanar:
- {
- for (int j = 0; j < 3; ++j)
- {
- pJointPos[j] = m_links[i].m_jointPos[j];
- }
- break;
- }
- default:
- break;
- }
- }
- else
- {
- btScalar *pJointVel = getJointVelMultiDof(i);
-
- switch (m_links[i].m_jointType)
- {
- case btMultibodyLink::ePrismatic:
- case btMultibodyLink::eRevolute:
- {
- //reset to current pos
- pJointPos[0] = m_links[i].m_jointPos[0];
- btScalar jointVel = pJointVel[0];
- pJointPos[0] += dt * jointVel;
- break;
- }
- case btMultibodyLink::eSpherical:
- {
- //reset to current pos
-
- for (int j = 0; j < 4; ++j)
- {
- pJointPos[j] = m_links[i].m_jointPos[j];
- }
-
- btVector3 jointVel;
- jointVel.setValue(pJointVel[0], pJointVel[1], pJointVel[2]);
- btQuaternion jointOri;
- jointOri.setValue(pJointPos[0], pJointPos[1], pJointPos[2], pJointPos[3]);
- pQuatUpdateFun(jointVel, jointOri, false, dt);
- pJointPos[0] = jointOri.x();
- pJointPos[1] = jointOri.y();
- pJointPos[2] = jointOri.z();
- pJointPos[3] = jointOri.w();
- break;
- }
- case btMultibodyLink::ePlanar:
- {
- for (int j = 0; j < 3; ++j)
- {
- pJointPos[j] = m_links[i].m_jointPos[j];
- }
- pJointPos[0] += dt * getJointVelMultiDof(i)[0];
-
- btVector3 q0_coors_qd1qd2 = getJointVelMultiDof(i)[1] * m_links[i].getAxisBottom(1) + getJointVelMultiDof(i)[2] * m_links[i].getAxisBottom(2);
- btVector3 no_q0_coors_qd1qd2 = quatRotate(btQuaternion(m_links[i].getAxisTop(0), pJointPos[0]), q0_coors_qd1qd2);
- pJointPos[1] += m_links[i].getAxisBottom(1).dot(no_q0_coors_qd1qd2) * dt;
- pJointPos[2] += m_links[i].getAxisBottom(2).dot(no_q0_coors_qd1qd2) * dt;
- break;
- }
- default:
- {
- }
- }
- }
-
- m_links[i].updateInterpolationCacheMultiDof();
- }
-}
-
-void btMultiBody::stepPositionsMultiDof(btScalar dt, btScalar *pq, btScalar *pqd)
-{
- int num_links = getNumLinks();
- if(!isBaseKinematic())
- {
- // step position by adding dt * velocity
- //btVector3 v = getBaseVel();
- //m_basePos += dt * v;
- //
- btScalar *pBasePos = (pq ? &pq[4] : m_basePos);
- btScalar *pBaseVel = (pqd ? &pqd[3] : &m_realBuf[3]); //note: the !pqd case assumes m_realBuf holds with base velocity at 3,4,5 (should be wrapped for safety)
-
- pBasePos[0] += dt * pBaseVel[0];
- pBasePos[1] += dt * pBaseVel[1];
- pBasePos[2] += dt * pBaseVel[2];
- }
-
- ///////////////////////////////
- //local functor for quaternion integration (to avoid error prone redundancy)
- struct
- {
- //"exponential map" based on btTransformUtil::integrateTransform(..)
- void operator()(const btVector3 &omega, btQuaternion &quat, bool baseBody, btScalar dt)
- {
- //baseBody => quat is alias and omega is global coor
- //!baseBody => quat is alibi and omega is local coor
-
- btVector3 axis;
- btVector3 angvel;
-
- if (!baseBody)
- angvel = quatRotate(quat, omega); //if quat is not m_baseQuat, it is alibi => ok
- else
- angvel = omega;
-
- btScalar fAngle = angvel.length();
- //limit the angular motion
- if (fAngle * dt > ANGULAR_MOTION_THRESHOLD)
- {
- fAngle = btScalar(0.5) * SIMD_HALF_PI / dt;
- }
-
- if (fAngle < btScalar(0.001))
- {
- // use Taylor's expansions of sync function
- axis = angvel * (btScalar(0.5) * dt - (dt * dt * dt) * (btScalar(0.020833333333)) * fAngle * fAngle);
- }
- else
- {
- // sync(fAngle) = sin(c*fAngle)/t
- axis = angvel * (btSin(btScalar(0.5) * fAngle * dt) / fAngle);
- }
-
- if (!baseBody)
- quat = btQuaternion(axis.x(), axis.y(), axis.z(), btCos(fAngle * dt * btScalar(0.5))) * quat;
- else
- quat = quat * btQuaternion(-axis.x(), -axis.y(), -axis.z(), btCos(fAngle * dt * btScalar(0.5)));
- //equivalent to: quat = (btQuaternion(axis.x(),axis.y(),axis.z(),btCos( fAngle*dt*btScalar(0.5) )) * quat.inverse()).inverse();
-
- quat.normalize();
- }
- } pQuatUpdateFun;
- ///////////////////////////////
-
- //pQuatUpdateFun(getBaseOmega(), m_baseQuat, true, dt);
- //
- if(!isBaseKinematic())
- {
- btScalar *pBaseQuat = pq ? pq : m_baseQuat;
- btScalar *pBaseOmega = pqd ? pqd : &m_realBuf[0]; //note: the !pqd case assumes m_realBuf starts with base omega (should be wrapped for safety)
- //
- btQuaternion baseQuat;
- baseQuat.setValue(pBaseQuat[0], pBaseQuat[1], pBaseQuat[2], pBaseQuat[3]);
- btVector3 baseOmega;
- baseOmega.setValue(pBaseOmega[0], pBaseOmega[1], pBaseOmega[2]);
- pQuatUpdateFun(baseOmega, baseQuat, true, dt);
- pBaseQuat[0] = baseQuat.x();
- pBaseQuat[1] = baseQuat.y();
- pBaseQuat[2] = baseQuat.z();
- pBaseQuat[3] = baseQuat.w();
-
- //printf("pBaseOmega = %.4f %.4f %.4f\n", pBaseOmega->x(), pBaseOmega->y(), pBaseOmega->z());
- //printf("pBaseVel = %.4f %.4f %.4f\n", pBaseVel->x(), pBaseVel->y(), pBaseVel->z());
- //printf("baseQuat = %.4f %.4f %.4f %.4f\n", pBaseQuat->x(), pBaseQuat->y(), pBaseQuat->z(), pBaseQuat->w());
- }
-
- if (pq)
- pq += 7;
- if (pqd)
- pqd += 6;
-
- // Finally we can update m_jointPos for each of the m_links
- for (int i = 0; i < num_links; ++i)
- {
- if (!(m_links[i].m_collider && m_links[i].m_collider->isStaticOrKinematic()))
- {
- btScalar *pJointPos;
- pJointPos= (pq ? pq : &m_links[i].m_jointPos[0]);
-
- btScalar *pJointVel = (pqd ? pqd : getJointVelMultiDof(i));
-
- switch (m_links[i].m_jointType)
- {
- case btMultibodyLink::ePrismatic:
- case btMultibodyLink::eRevolute:
- {
- //reset to current pos
- btScalar jointVel = pJointVel[0];
- pJointPos[0] += dt * jointVel;
- break;
- }
- case btMultibodyLink::eSpherical:
- {
- //reset to current pos
- btVector3 jointVel;
- jointVel.setValue(pJointVel[0], pJointVel[1], pJointVel[2]);
- btQuaternion jointOri;
- jointOri.setValue(pJointPos[0], pJointPos[1], pJointPos[2], pJointPos[3]);
- pQuatUpdateFun(jointVel, jointOri, false, dt);
- pJointPos[0] = jointOri.x();
- pJointPos[1] = jointOri.y();
- pJointPos[2] = jointOri.z();
- pJointPos[3] = jointOri.w();
- break;
- }
- case btMultibodyLink::ePlanar:
- {
- pJointPos[0] += dt * getJointVelMultiDof(i)[0];
-
- btVector3 q0_coors_qd1qd2 = getJointVelMultiDof(i)[1] * m_links[i].getAxisBottom(1) + getJointVelMultiDof(i)[2] * m_links[i].getAxisBottom(2);
- btVector3 no_q0_coors_qd1qd2 = quatRotate(btQuaternion(m_links[i].getAxisTop(0), pJointPos[0]), q0_coors_qd1qd2);
- pJointPos[1] += m_links[i].getAxisBottom(1).dot(no_q0_coors_qd1qd2) * dt;
- pJointPos[2] += m_links[i].getAxisBottom(2).dot(no_q0_coors_qd1qd2) * dt;
-
- break;
- }
- default:
- {
- }
- }
- }
-
- m_links[i].updateCacheMultiDof(pq);
-
- if (pq)
- pq += m_links[i].m_posVarCount;
- if (pqd)
- pqd += m_links[i].m_dofCount;
- }
-}
-
-void btMultiBody::fillConstraintJacobianMultiDof(int link,
- const btVector3 &contact_point,
- const btVector3 &normal_ang,
- const btVector3 &normal_lin,
- btScalar *jac,
- btAlignedObjectArray<btScalar> &scratch_r1,
- btAlignedObjectArray<btVector3> &scratch_v,
- btAlignedObjectArray<btMatrix3x3> &scratch_m) const
-{
- // temporary space
- int num_links = getNumLinks();
- int m_dofCount = getNumDofs();
- scratch_v.resize(3 * num_links + 3); //(num_links + base) offsets + (num_links + base) normals_lin + (num_links + base) normals_ang
- scratch_m.resize(num_links + 1);
-
- btVector3 *v_ptr = &scratch_v[0];
- btVector3 *p_minus_com_local = v_ptr;
- v_ptr += num_links + 1;
- btVector3 *n_local_lin = v_ptr;
- v_ptr += num_links + 1;
- btVector3 *n_local_ang = v_ptr;
- v_ptr += num_links + 1;
- btAssert(v_ptr - &scratch_v[0] == scratch_v.size());
-
- //scratch_r.resize(m_dofCount);
- //btScalar *results = m_dofCount > 0 ? &scratch_r[0] : 0;
-
- scratch_r1.resize(m_dofCount+num_links);
- btScalar * results = m_dofCount > 0 ? &scratch_r1[0] : 0;
- btScalar* links = num_links? &scratch_r1[m_dofCount] : 0;
- int numLinksChildToRoot=0;
- int l = link;
- while (l != -1)
- {
- links[numLinksChildToRoot++]=l;
- l = m_links[l].m_parent;
- }
-
- btMatrix3x3 *rot_from_world = &scratch_m[0];
-
- const btVector3 p_minus_com_world = contact_point - m_basePos;
- const btVector3 &normal_lin_world = normal_lin; //convenience
- const btVector3 &normal_ang_world = normal_ang;
-
- rot_from_world[0] = btMatrix3x3(m_baseQuat);
-
- // omega coeffients first.
- btVector3 omega_coeffs_world;
- omega_coeffs_world = p_minus_com_world.cross(normal_lin_world);
- jac[0] = omega_coeffs_world[0] + normal_ang_world[0];
- jac[1] = omega_coeffs_world[1] + normal_ang_world[1];
- jac[2] = omega_coeffs_world[2] + normal_ang_world[2];
- // then v coefficients
- jac[3] = normal_lin_world[0];
- jac[4] = normal_lin_world[1];
- jac[5] = normal_lin_world[2];
-
- //create link-local versions of p_minus_com and normal
- p_minus_com_local[0] = rot_from_world[0] * p_minus_com_world;
- n_local_lin[0] = rot_from_world[0] * normal_lin_world;
- n_local_ang[0] = rot_from_world[0] * normal_ang_world;
-
- // Set remaining jac values to zero for now.
- for (int i = 6; i < 6 + m_dofCount; ++i)
- {
- jac[i] = 0;
- }
-
- // Qdot coefficients, if necessary.
- if (num_links > 0 && link > -1)
- {
- // TODO: (Also, we are making 3 separate calls to this function, for the normal & the 2 friction directions,
- // which is resulting in repeated work being done...)
-
- // calculate required normals & positions in the local frames.
- for (int a = 0; a < numLinksChildToRoot; a++)
- {
- int i = links[numLinksChildToRoot-1-a];
- // transform to local frame
- const int parent = m_links[i].m_parent;
- const btMatrix3x3 mtx(m_links[i].m_cachedRotParentToThis);
- rot_from_world[i + 1] = mtx * rot_from_world[parent + 1];
-
- n_local_lin[i + 1] = mtx * n_local_lin[parent + 1];
- n_local_ang[i + 1] = mtx * n_local_ang[parent + 1];
- p_minus_com_local[i + 1] = mtx * p_minus_com_local[parent + 1] - m_links[i].m_cachedRVector;
-
- // calculate the jacobian entry
- switch (m_links[i].m_jointType)
- {
- case btMultibodyLink::eRevolute:
- {
- results[m_links[i].m_dofOffset] = n_local_lin[i + 1].dot(m_links[i].getAxisTop(0).cross(p_minus_com_local[i + 1]) + m_links[i].getAxisBottom(0));
- results[m_links[i].m_dofOffset] += n_local_ang[i + 1].dot(m_links[i].getAxisTop(0));
- break;
- }
- case btMultibodyLink::ePrismatic:
- {
- results[m_links[i].m_dofOffset] = n_local_lin[i + 1].dot(m_links[i].getAxisBottom(0));
- break;
- }
- case btMultibodyLink::eSpherical:
- {
- results[m_links[i].m_dofOffset + 0] = n_local_lin[i + 1].dot(m_links[i].getAxisTop(0).cross(p_minus_com_local[i + 1]) + m_links[i].getAxisBottom(0));
- results[m_links[i].m_dofOffset + 1] = n_local_lin[i + 1].dot(m_links[i].getAxisTop(1).cross(p_minus_com_local[i + 1]) + m_links[i].getAxisBottom(1));
- results[m_links[i].m_dofOffset + 2] = n_local_lin[i + 1].dot(m_links[i].getAxisTop(2).cross(p_minus_com_local[i + 1]) + m_links[i].getAxisBottom(2));
-
- results[m_links[i].m_dofOffset + 0] += n_local_ang[i + 1].dot(m_links[i].getAxisTop(0));
- results[m_links[i].m_dofOffset + 1] += n_local_ang[i + 1].dot(m_links[i].getAxisTop(1));
- results[m_links[i].m_dofOffset + 2] += n_local_ang[i + 1].dot(m_links[i].getAxisTop(2));
-
- break;
- }
- case btMultibodyLink::ePlanar:
- {
- results[m_links[i].m_dofOffset + 0] = n_local_lin[i + 1].dot(m_links[i].getAxisTop(0).cross(p_minus_com_local[i + 1])); // + m_links[i].getAxisBottom(0));
- results[m_links[i].m_dofOffset + 1] = n_local_lin[i + 1].dot(m_links[i].getAxisBottom(1));
- results[m_links[i].m_dofOffset + 2] = n_local_lin[i + 1].dot(m_links[i].getAxisBottom(2));
-
- break;
- }
- default:
- {
- }
- }
- }
-
- // Now copy through to output.
- //printf("jac[%d] = ", link);
- while (link != -1)
- {
- for (int dof = 0; dof < m_links[link].m_dofCount; ++dof)
- {
- jac[6 + m_links[link].m_dofOffset + dof] = results[m_links[link].m_dofOffset + dof];
- //printf("%.2f\t", jac[6 + m_links[link].m_dofOffset + dof]);
- }
-
- link = m_links[link].m_parent;
- }
- //printf("]\n");
- }
-}
-
-void btMultiBody::wakeUp()
-{
- m_sleepTimer = 0;
- m_awake = true;
-}
-
-void btMultiBody::goToSleep()
-{
- m_awake = false;
-}
-
-void btMultiBody::checkMotionAndSleepIfRequired(btScalar timestep)
-{
- extern bool gDisableDeactivation;
- if (!m_canSleep || gDisableDeactivation)
- {
- m_awake = true;
- m_sleepTimer = 0;
- return;
- }
-
-
-
- // motion is computed as omega^2 + v^2 + (sum of squares of joint velocities)
- btScalar motion = 0;
- {
- for (int i = 0; i < 6 + m_dofCount; ++i)
- motion += m_realBuf[i] * m_realBuf[i];
- }
-
- if (motion < m_sleepEpsilon)
- {
- m_sleepTimer += timestep;
- if (m_sleepTimer > m_sleepTimeout)
- {
- goToSleep();
- }
- }
- else
- {
- m_sleepTimer = 0;
- if (m_canWakeup)
- {
- if (!m_awake)
- wakeUp();
- }
- }
-}
-
-void btMultiBody::forwardKinematics(btAlignedObjectArray<btQuaternion> &world_to_local, btAlignedObjectArray<btVector3> &local_origin)
-{
- int num_links = getNumLinks();
-
- // Cached 3x3 rotation matrices from parent frame to this frame.
- btMatrix3x3 *rot_from_parent = (btMatrix3x3 *)&m_matrixBuf[0];
-
- rot_from_parent[0] = btMatrix3x3(m_baseQuat); //m_baseQuat assumed to be alias!?
-
- for (int i = 0; i < num_links; ++i)
- {
- rot_from_parent[i + 1] = btMatrix3x3(m_links[i].m_cachedRotParentToThis);
- }
-
- int nLinks = getNumLinks();
- ///base + num m_links
- world_to_local.resize(nLinks + 1);
- local_origin.resize(nLinks + 1);
-
- world_to_local[0] = getWorldToBaseRot();
- local_origin[0] = getBasePos();
-
- for (int k = 0; k < getNumLinks(); k++)
- {
- const int parent = getParent(k);
- world_to_local[k + 1] = getParentToLocalRot(k) * world_to_local[parent + 1];
- local_origin[k + 1] = local_origin[parent + 1] + (quatRotate(world_to_local[k + 1].inverse(), getRVector(k)));
- }
-
- for (int link = 0; link < getNumLinks(); link++)
- {
- int index = link + 1;
-
- btVector3 posr = local_origin[index];
- btScalar quat[4] = {-world_to_local[index].x(), -world_to_local[index].y(), -world_to_local[index].z(), world_to_local[index].w()};
- btTransform tr;
- tr.setIdentity();
- tr.setOrigin(posr);
- tr.setRotation(btQuaternion(quat[0], quat[1], quat[2], quat[3]));
- getLink(link).m_cachedWorldTransform = tr;
- }
-}
-
-void btMultiBody::updateCollisionObjectWorldTransforms(btAlignedObjectArray<btQuaternion> &world_to_local, btAlignedObjectArray<btVector3> &local_origin)
-{
- world_to_local.resize(getNumLinks() + 1);
- local_origin.resize(getNumLinks() + 1);
-
- world_to_local[0] = getWorldToBaseRot();
- local_origin[0] = getBasePos();
-
- if (getBaseCollider())
- {
- btVector3 posr = local_origin[0];
- // float pos[4]={posr.x(),posr.y(),posr.z(),1};
- btScalar quat[4] = {-world_to_local[0].x(), -world_to_local[0].y(), -world_to_local[0].z(), world_to_local[0].w()};
- btTransform tr;
- tr.setIdentity();
- tr.setOrigin(posr);
- tr.setRotation(btQuaternion(quat[0], quat[1], quat[2], quat[3]));
-
- getBaseCollider()->setWorldTransform(tr);
- getBaseCollider()->setInterpolationWorldTransform(tr);
- }
-
- for (int k = 0; k < getNumLinks(); k++)
- {
- const int parent = getParent(k);
- world_to_local[k + 1] = getParentToLocalRot(k) * world_to_local[parent + 1];
- local_origin[k + 1] = local_origin[parent + 1] + (quatRotate(world_to_local[k + 1].inverse(), getRVector(k)));
- }
-
- for (int m = 0; m < getNumLinks(); m++)
- {
- btMultiBodyLinkCollider *col = getLink(m).m_collider;
- if (col)
- {
- int link = col->m_link;
- btAssert(link == m);
-
- int index = link + 1;
-
- btVector3 posr = local_origin[index];
- // float pos[4]={posr.x(),posr.y(),posr.z(),1};
- btScalar quat[4] = {-world_to_local[index].x(), -world_to_local[index].y(), -world_to_local[index].z(), world_to_local[index].w()};
- btTransform tr;
- tr.setIdentity();
- tr.setOrigin(posr);
- tr.setRotation(btQuaternion(quat[0], quat[1], quat[2], quat[3]));
-
- col->setWorldTransform(tr);
- col->setInterpolationWorldTransform(tr);
- }
- }
-}
-
-void btMultiBody::updateCollisionObjectInterpolationWorldTransforms(btAlignedObjectArray<btQuaternion> &world_to_local, btAlignedObjectArray<btVector3> &local_origin)
-{
- world_to_local.resize(getNumLinks() + 1);
- local_origin.resize(getNumLinks() + 1);
-
- if(isBaseKinematic()){
- world_to_local[0] = getWorldToBaseRot();
- local_origin[0] = getBasePos();
- }
- else
- {
- world_to_local[0] = getInterpolateWorldToBaseRot();
- local_origin[0] = getInterpolateBasePos();
- }
-
- if (getBaseCollider())
- {
- btVector3 posr = local_origin[0];
- // float pos[4]={posr.x(),posr.y(),posr.z(),1};
- btScalar quat[4] = {-world_to_local[0].x(), -world_to_local[0].y(), -world_to_local[0].z(), world_to_local[0].w()};
- btTransform tr;
- tr.setIdentity();
- tr.setOrigin(posr);
- tr.setRotation(btQuaternion(quat[0], quat[1], quat[2], quat[3]));
-
- getBaseCollider()->setInterpolationWorldTransform(tr);
- }
-
- for (int k = 0; k < getNumLinks(); k++)
- {
- const int parent = getParent(k);
- world_to_local[k + 1] = getInterpolateParentToLocalRot(k) * world_to_local[parent + 1];
- local_origin[k + 1] = local_origin[parent + 1] + (quatRotate(world_to_local[k + 1].inverse(), getInterpolateRVector(k)));
- }
-
- for (int m = 0; m < getNumLinks(); m++)
- {
- btMultiBodyLinkCollider *col = getLink(m).m_collider;
- if (col)
- {
- int link = col->m_link;
- btAssert(link == m);
-
- int index = link + 1;
-
- btVector3 posr = local_origin[index];
- // float pos[4]={posr.x(),posr.y(),posr.z(),1};
- btScalar quat[4] = {-world_to_local[index].x(), -world_to_local[index].y(), -world_to_local[index].z(), world_to_local[index].w()};
- btTransform tr;
- tr.setIdentity();
- tr.setOrigin(posr);
- tr.setRotation(btQuaternion(quat[0], quat[1], quat[2], quat[3]));
-
- col->setInterpolationWorldTransform(tr);
- }
- }
-}
-
-int btMultiBody::calculateSerializeBufferSize() const
-{
- int sz = sizeof(btMultiBodyData);
- return sz;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char *btMultiBody::serialize(void *dataBuffer, class btSerializer *serializer) const
-{
- btMultiBodyData *mbd = (btMultiBodyData *)dataBuffer;
- getBasePos().serialize(mbd->m_baseWorldPosition);
- getWorldToBaseRot().inverse().serialize(mbd->m_baseWorldOrientation);
- getBaseVel().serialize(mbd->m_baseLinearVelocity);
- getBaseOmega().serialize(mbd->m_baseAngularVelocity);
-
- mbd->m_baseMass = this->getBaseMass();
- getBaseInertia().serialize(mbd->m_baseInertia);
- {
- char *name = (char *)serializer->findNameForPointer(m_baseName);
- mbd->m_baseName = (char *)serializer->getUniquePointer(name);
- if (mbd->m_baseName)
- {
- serializer->serializeName(name);
- }
- }
- mbd->m_numLinks = this->getNumLinks();
- if (mbd->m_numLinks)
- {
- int sz = sizeof(btMultiBodyLinkData);
- int numElem = mbd->m_numLinks;
- btChunk *chunk = serializer->allocate(sz, numElem);
- btMultiBodyLinkData *memPtr = (btMultiBodyLinkData *)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_jointType = getLink(i).m_jointType;
- memPtr->m_dofCount = getLink(i).m_dofCount;
- memPtr->m_posVarCount = getLink(i).m_posVarCount;
-
- getLink(i).m_inertiaLocal.serialize(memPtr->m_linkInertia);
-
- getLink(i).m_absFrameTotVelocity.m_topVec.serialize(memPtr->m_absFrameTotVelocityTop);
- getLink(i).m_absFrameTotVelocity.m_bottomVec.serialize(memPtr->m_absFrameTotVelocityBottom);
- getLink(i).m_absFrameLocVelocity.m_topVec.serialize(memPtr->m_absFrameLocVelocityTop);
- getLink(i).m_absFrameLocVelocity.m_bottomVec.serialize(memPtr->m_absFrameLocVelocityBottom);
-
- memPtr->m_linkMass = getLink(i).m_mass;
- memPtr->m_parentIndex = getLink(i).m_parent;
- memPtr->m_jointDamping = getLink(i).m_jointDamping;
- memPtr->m_jointFriction = getLink(i).m_jointFriction;
- memPtr->m_jointLowerLimit = getLink(i).m_jointLowerLimit;
- memPtr->m_jointUpperLimit = getLink(i).m_jointUpperLimit;
- memPtr->m_jointMaxForce = getLink(i).m_jointMaxForce;
- memPtr->m_jointMaxVelocity = getLink(i).m_jointMaxVelocity;
-
- getLink(i).m_eVector.serialize(memPtr->m_parentComToThisPivotOffset);
- getLink(i).m_dVector.serialize(memPtr->m_thisPivotToThisComOffset);
- getLink(i).m_zeroRotParentToThis.serialize(memPtr->m_zeroRotParentToThis);
- btAssert(memPtr->m_dofCount <= 3);
- for (int dof = 0; dof < getLink(i).m_dofCount; dof++)
- {
- getLink(i).getAxisBottom(dof).serialize(memPtr->m_jointAxisBottom[dof]);
- getLink(i).getAxisTop(dof).serialize(memPtr->m_jointAxisTop[dof]);
-
- memPtr->m_jointTorque[dof] = getLink(i).m_jointTorque[dof];
- memPtr->m_jointVel[dof] = getJointVelMultiDof(i)[dof];
- }
- int numPosVar = getLink(i).m_posVarCount;
- for (int posvar = 0; posvar < numPosVar; posvar++)
- {
- memPtr->m_jointPos[posvar] = getLink(i).m_jointPos[posvar];
- }
-
- {
- char *name = (char *)serializer->findNameForPointer(m_links[i].m_linkName);
- memPtr->m_linkName = (char *)serializer->getUniquePointer(name);
- if (memPtr->m_linkName)
- {
- serializer->serializeName(name);
- }
- }
- {
- char *name = (char *)serializer->findNameForPointer(m_links[i].m_jointName);
- memPtr->m_jointName = (char *)serializer->getUniquePointer(name);
- if (memPtr->m_jointName)
- {
- serializer->serializeName(name);
- }
- }
- memPtr->m_linkCollider = (btCollisionObjectData *)serializer->getUniquePointer(getLink(i).m_collider);
- }
- serializer->finalizeChunk(chunk, btMultiBodyLinkDataName, BT_ARRAY_CODE, (void *)&m_links[0]);
- }
- mbd->m_links = mbd->m_numLinks ? (btMultiBodyLinkData *)serializer->getUniquePointer((void *)&m_links[0]) : 0;
-
- // Fill padding with zeros to appease msan.
-#ifdef BT_USE_DOUBLE_PRECISION
- memset(mbd->m_padding, 0, sizeof(mbd->m_padding));
-#endif
-
- return btMultiBodyDataName;
-}
-
-void btMultiBody::saveKinematicState(btScalar timeStep)
-{
- //todo: clamp to some (user definable) safe minimum timestep, to limit maximum angular/linear velocities
- if (m_kinematic_calculate_velocity && timeStep != btScalar(0.))
- {
- btVector3 linearVelocity, angularVelocity;
- btTransformUtil::calculateVelocity(getInterpolateBaseWorldTransform(), getBaseWorldTransform(), timeStep, linearVelocity, angularVelocity);
- setBaseVel(linearVelocity);
- setBaseOmega(angularVelocity);
- setInterpolateBaseWorldTransform(getBaseWorldTransform());
- }
-}
-
-void btMultiBody::setLinkDynamicType(const int i, int type)
-{
- if (i == -1)
- {
- setBaseDynamicType(type);
- }
- else if (i >= 0 && i < getNumLinks())
- {
- if (m_links[i].m_collider)
- {
- m_links[i].m_collider->setDynamicType(type);
- }
- }
-}
-
-bool btMultiBody::isLinkStaticOrKinematic(const int i) const
-{
- if (i == -1)
- {
- return isBaseStaticOrKinematic();
- }
- else
- {
- if (m_links[i].m_collider)
- return m_links[i].m_collider->isStaticOrKinematic();
- }
- return false;
-}
-
-bool btMultiBody::isLinkKinematic(const int i) const
-{
- if (i == -1)
- {
- return isBaseKinematic();
- }
- else
- {
- if (m_links[i].m_collider)
- return m_links[i].m_collider->isKinematic();
- }
- return false;
-}
-
-bool btMultiBody::isLinkAndAllAncestorsStaticOrKinematic(const int i) const
-{
- int link = i;
- while (link != -1) {
- if (!isLinkStaticOrKinematic(link))
- return false;
- link = m_links[link].m_parent;
- }
- return isBaseStaticOrKinematic();
-}
-
-bool btMultiBody::isLinkAndAllAncestorsKinematic(const int i) const
-{
- int link = i;
- while (link != -1) {
- if (!isLinkKinematic(link))
- return false;
- link = m_links[link].m_parent;
- }
- return isBaseKinematic();
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.h
deleted file mode 100644
index 345970d261..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBody.h
+++ /dev/null
@@ -1,953 +0,0 @@
-/*
- * PURPOSE:
- * Class representing an articulated rigid body. Stores the body's
- * current state, allows forces and torques to be set, handles
- * timestepping and implements Featherstone's algorithm.
- *
- * COPYRIGHT:
- * Copyright (C) Stephen Thompson, <stephen@solarflare.org.uk>, 2011-2013
- * Portions written By Erwin Coumans: connection to LCP solver, various multibody constraints, replacing Eigen math library by Bullet LinearMath and a dedicated 6x6 matrix inverse (solveImatrix)
- * Portions written By Jakub Stepien: support for multi-DOF constraints, introduction of spatial algebra and several other improvements
-
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- */
-
-#ifndef BT_MULTIBODY_H
-#define BT_MULTIBODY_H
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btQuaternion.h"
-#include "LinearMath/btMatrix3x3.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-///serialization data, don't change them if you are not familiar with the details of the serialization mechanisms
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btMultiBodyData btMultiBodyDoubleData
-#define btMultiBodyDataName "btMultiBodyDoubleData"
-#define btMultiBodyLinkData btMultiBodyLinkDoubleData
-#define btMultiBodyLinkDataName "btMultiBodyLinkDoubleData"
-#else
-#define btMultiBodyData btMultiBodyFloatData
-#define btMultiBodyDataName "btMultiBodyFloatData"
-#define btMultiBodyLinkData btMultiBodyLinkFloatData
-#define btMultiBodyLinkDataName "btMultiBodyLinkFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-#include "btMultiBodyLink.h"
-class btMultiBodyLinkCollider;
-
-ATTRIBUTE_ALIGNED16(class)
-btMultiBody
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- //
- // initialization
- //
-
- btMultiBody(int n_links, // NOT including the base
- btScalar mass, // mass of base
- const btVector3 &inertia, // inertia of base, in base frame; assumed diagonal
- bool fixedBase, // whether the base is fixed (true) or can move (false)
- bool canSleep, bool deprecatedMultiDof = true);
-
- virtual ~btMultiBody();
-
- //note: fixed link collision with parent is always disabled
- void setupFixed(int i, //linkIndex
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &parentComToThisPivotOffset,
- const btVector3 &thisPivotToThisComOffset, bool deprecatedDisableParentCollision = true);
-
- void setupPrismatic(int i,
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis,
- const btVector3 &jointAxis,
- const btVector3 &parentComToThisPivotOffset,
- const btVector3 &thisPivotToThisComOffset,
- bool disableParentCollision);
-
- void setupRevolute(int i, // 0 to num_links-1
- btScalar mass,
- const btVector3 &inertia,
- int parentIndex,
- const btQuaternion &rotParentToThis, // rotate points in parent frame to this frame, when q = 0
- const btVector3 &jointAxis, // in my frame
- const btVector3 &parentComToThisPivotOffset, // vector from parent COM to joint axis, in PARENT frame
- const btVector3 &thisPivotToThisComOffset, // vector from joint axis to my COM, in MY frame
- bool disableParentCollision = false);
-
- void setupSpherical(int i, // linkIndex, 0 to num_links-1
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis, // rotate points in parent frame to this frame, when q = 0
- const btVector3 &parentComToThisPivotOffset, // vector from parent COM to joint axis, in PARENT frame
- const btVector3 &thisPivotToThisComOffset, // vector from joint axis to my COM, in MY frame
- bool disableParentCollision = false);
-
- void setupPlanar(int i, // 0 to num_links-1
- btScalar mass,
- const btVector3 &inertia,
- int parent,
- const btQuaternion &rotParentToThis, // rotate points in parent frame to this frame, when q = 0
- const btVector3 &rotationAxis,
- const btVector3 &parentComToThisComOffset, // vector from parent COM to this COM, in PARENT frame
- bool disableParentCollision = false);
-
- const btMultibodyLink &getLink(int index) const
- {
- return m_links[index];
- }
-
- btMultibodyLink &getLink(int index)
- {
- return m_links[index];
- }
-
- void setBaseCollider(btMultiBodyLinkCollider * collider) //collider can be NULL to disable collision for the base
- {
- m_baseCollider = collider;
- }
- const btMultiBodyLinkCollider *getBaseCollider() const
- {
- return m_baseCollider;
- }
- btMultiBodyLinkCollider *getBaseCollider()
- {
- return m_baseCollider;
- }
-
- const btMultiBodyLinkCollider *getLinkCollider(int index) const
- {
- if (index >= 0 && index < getNumLinks())
- {
- return getLink(index).m_collider;
- }
- return 0;
- }
-
- btMultiBodyLinkCollider *getLinkCollider(int index)
- {
- if (index >= 0 && index < getNumLinks())
- {
- return getLink(index).m_collider;
- }
- return 0;
- }
-
- //
- // get parent
- // input: link num from 0 to num_links-1
- // output: link num from 0 to num_links-1, OR -1 to mean the base.
- //
- int getParent(int link_num) const;
-
- //
- // get number of m_links, masses, moments of inertia
- //
-
- int getNumLinks() const { return m_links.size(); }
- int getNumDofs() const { return m_dofCount; }
- int getNumPosVars() const { return m_posVarCnt; }
- btScalar getBaseMass() const { return m_baseMass; }
- const btVector3 &getBaseInertia() const { return m_baseInertia; }
- btScalar getLinkMass(int i) const;
- const btVector3 &getLinkInertia(int i) const;
-
- //
- // change mass (incomplete: can only change base mass and inertia at present)
- //
-
- void setBaseMass(btScalar mass) { m_baseMass = mass; }
- void setBaseInertia(const btVector3 &inertia) { m_baseInertia = inertia; }
-
- //
- // get/set pos/vel/rot/omega for the base link
- //
-
- const btVector3 &getBasePos() const
- {
- return m_basePos;
- } // in world frame
- const btVector3 getBaseVel() const
- {
- return btVector3(m_realBuf[3], m_realBuf[4], m_realBuf[5]);
- } // in world frame
- const btQuaternion &getWorldToBaseRot() const
- {
- return m_baseQuat;
- }
-
- const btVector3 &getInterpolateBasePos() const
- {
- return m_basePos_interpolate;
- } // in world frame
- const btQuaternion &getInterpolateWorldToBaseRot() const
- {
- return m_baseQuat_interpolate;
- }
-
- // rotates world vectors into base frame
- btVector3 getBaseOmega() const { return btVector3(m_realBuf[0], m_realBuf[1], m_realBuf[2]); } // in world frame
-
- void setBasePos(const btVector3 &pos)
- {
- m_basePos = pos;
- if(!isBaseKinematic())
- m_basePos_interpolate = pos;
- }
-
- void setInterpolateBasePos(const btVector3 &pos)
- {
- m_basePos_interpolate = pos;
- }
-
- void setBaseWorldTransform(const btTransform &tr)
- {
- setBasePos(tr.getOrigin());
- setWorldToBaseRot(tr.getRotation().inverse());
- }
-
- btTransform getBaseWorldTransform() const
- {
- btTransform tr;
- tr.setOrigin(getBasePos());
- tr.setRotation(getWorldToBaseRot().inverse());
- return tr;
- }
-
- void setInterpolateBaseWorldTransform(const btTransform &tr)
- {
- setInterpolateBasePos(tr.getOrigin());
- setInterpolateWorldToBaseRot(tr.getRotation().inverse());
- }
-
- btTransform getInterpolateBaseWorldTransform() const
- {
- btTransform tr;
- tr.setOrigin(getInterpolateBasePos());
- tr.setRotation(getInterpolateWorldToBaseRot().inverse());
- return tr;
- }
-
- void setBaseVel(const btVector3 &vel)
- {
- m_realBuf[3] = vel[0];
- m_realBuf[4] = vel[1];
- m_realBuf[5] = vel[2];
- }
-
- void setWorldToBaseRot(const btQuaternion &rot)
- {
- m_baseQuat = rot; //m_baseQuat asumed to ba alias!?
- if(!isBaseKinematic())
- m_baseQuat_interpolate = rot;
- }
-
- void setInterpolateWorldToBaseRot(const btQuaternion &rot)
- {
- m_baseQuat_interpolate = rot;
- }
-
- void setBaseOmega(const btVector3 &omega)
- {
- m_realBuf[0] = omega[0];
- m_realBuf[1] = omega[1];
- m_realBuf[2] = omega[2];
- }
-
- void saveKinematicState(btScalar timeStep);
-
- //
- // get/set pos/vel for child m_links (i = 0 to num_links-1)
- //
-
- btScalar getJointPos(int i) const;
- btScalar getJointVel(int i) const;
-
- btScalar *getJointVelMultiDof(int i);
- btScalar *getJointPosMultiDof(int i);
-
- const btScalar *getJointVelMultiDof(int i) const;
- const btScalar *getJointPosMultiDof(int i) const;
-
- void setJointPos(int i, btScalar q);
- void setJointVel(int i, btScalar qdot);
- void setJointPosMultiDof(int i, const double *q);
- void setJointVelMultiDof(int i, const double *qdot);
- void setJointPosMultiDof(int i, const float *q);
- void setJointVelMultiDof(int i, const float *qdot);
-
- //
- // direct access to velocities as a vector of 6 + num_links elements.
- // (omega first, then v, then joint velocities.)
- //
- const btScalar *getVelocityVector() const
- {
- return &m_realBuf[0];
- }
-
- const btScalar *getDeltaVelocityVector() const
- {
- return &m_deltaV[0];
- }
-
- const btScalar *getSplitVelocityVector() const
- {
- return &m_splitV[0];
- }
- /* btScalar * getVelocityVector()
- {
- return &real_buf[0];
- }
- */
-
- //
- // get the frames of reference (positions and orientations) of the child m_links
- // (i = 0 to num_links-1)
- //
-
- const btVector3 &getRVector(int i) const; // vector from COM(parent(i)) to COM(i), in frame i's coords
- const btQuaternion &getParentToLocalRot(int i) const; // rotates vectors in frame parent(i) to vectors in frame i.
- const btVector3 &getInterpolateRVector(int i) const; // vector from COM(parent(i)) to COM(i), in frame i's coords
- const btQuaternion &getInterpolateParentToLocalRot(int i) const; // rotates vectors in frame parent(i) to vectors in frame i.
-
- //
- // transform vectors in local frame of link i to world frame (or vice versa)
- //
- btVector3 localPosToWorld(int i, const btVector3 &local_pos) const;
- btVector3 localDirToWorld(int i, const btVector3 &local_dir) const;
- btVector3 worldPosToLocal(int i, const btVector3 &world_pos) const;
- btVector3 worldDirToLocal(int i, const btVector3 &world_dir) const;
-
- //
- // transform a frame in local coordinate to a frame in world coordinate
- //
- btMatrix3x3 localFrameToWorld(int i, const btMatrix3x3 &local_frame) const;
-
-
- //
- // set external forces and torques. Note all external forces/torques are given in the WORLD frame.
- //
-
- void clearForcesAndTorques();
- void clearConstraintForces();
-
- void clearVelocities();
-
- void addBaseForce(const btVector3 &f)
- {
- m_baseForce += f;
- }
- void addBaseTorque(const btVector3 &t) { m_baseTorque += t; }
- void addLinkForce(int i, const btVector3 &f);
- void addLinkTorque(int i, const btVector3 &t);
-
- void addBaseConstraintForce(const btVector3 &f)
- {
- m_baseConstraintForce += f;
- }
- void addBaseConstraintTorque(const btVector3 &t) { m_baseConstraintTorque += t; }
- void addLinkConstraintForce(int i, const btVector3 &f);
- void addLinkConstraintTorque(int i, const btVector3 &t);
-
- void addJointTorque(int i, btScalar Q);
- void addJointTorqueMultiDof(int i, int dof, btScalar Q);
- void addJointTorqueMultiDof(int i, const btScalar *Q);
-
- const btVector3 &getBaseForce() const { return m_baseForce; }
- const btVector3 &getBaseTorque() const { return m_baseTorque; }
- const btVector3 &getLinkForce(int i) const;
- const btVector3 &getLinkTorque(int i) const;
- btScalar getJointTorque(int i) const;
- btScalar *getJointTorqueMultiDof(int i);
-
- //
- // dynamics routines.
- //
-
- // timestep the velocities (given the external forces/torques set using addBaseForce etc).
- // also sets up caches for calcAccelerationDeltas.
- //
- // Note: the caller must provide three vectors which are used as
- // temporary scratch space. The idea here is to reduce dynamic
- // memory allocation: the same scratch vectors can be re-used
- // again and again for different Multibodies, instead of each
- // btMultiBody allocating (and then deallocating) their own
- // individual scratch buffers. This gives a considerable speed
- // improvement, at least on Windows (where dynamic memory
- // allocation appears to be fairly slow).
- //
-
- void computeAccelerationsArticulatedBodyAlgorithmMultiDof(btScalar dt,
- btAlignedObjectArray<btScalar> & scratch_r,
- btAlignedObjectArray<btVector3> & scratch_v,
- btAlignedObjectArray<btMatrix3x3> & scratch_m,
- bool isConstraintPass,
- bool jointFeedbackInWorldSpace,
- bool jointFeedbackInJointFrame
- );
-
- ///stepVelocitiesMultiDof is deprecated, use computeAccelerationsArticulatedBodyAlgorithmMultiDof instead
- //void stepVelocitiesMultiDof(btScalar dt,
- // btAlignedObjectArray<btScalar> & scratch_r,
- // btAlignedObjectArray<btVector3> & scratch_v,
- // btAlignedObjectArray<btMatrix3x3> & scratch_m,
- // bool isConstraintPass = false)
- //{
- // computeAccelerationsArticulatedBodyAlgorithmMultiDof(dt, scratch_r, scratch_v, scratch_m, isConstraintPass, false, false);
- //}
-
- // calcAccelerationDeltasMultiDof
- // input: force vector (in same format as jacobian, i.e.:
- // 3 torque values, 3 force values, num_links joint torque values)
- // output: 3 omegadot values, 3 vdot values, num_links q_double_dot values
- // (existing contents of output array are replaced)
- // calcAccelerationDeltasMultiDof must have been called first.
- void calcAccelerationDeltasMultiDof(const btScalar *force, btScalar *output,
- btAlignedObjectArray<btScalar> &scratch_r,
- btAlignedObjectArray<btVector3> &scratch_v) const;
-
- void applyDeltaVeeMultiDof2(const btScalar *delta_vee, btScalar multiplier)
- {
- for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- {
- m_deltaV[dof] += delta_vee[dof] * multiplier;
- }
- }
- void applyDeltaSplitVeeMultiDof(const btScalar *delta_vee, btScalar multiplier)
- {
- for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- {
- m_splitV[dof] += delta_vee[dof] * multiplier;
- }
- }
- void addSplitV()
- {
- applyDeltaVeeMultiDof(&m_splitV[0], 1);
- }
- void substractSplitV()
- {
- applyDeltaVeeMultiDof(&m_splitV[0], -1);
-
- for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- {
- m_splitV[dof] = 0.f;
- }
- }
- void processDeltaVeeMultiDof2()
- {
- applyDeltaVeeMultiDof(&m_deltaV[0], 1);
-
- for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- {
- m_deltaV[dof] = 0.f;
- }
- }
-
- void applyDeltaVeeMultiDof(const btScalar *delta_vee, btScalar multiplier)
- {
- //for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- // printf("%.4f ", delta_vee[dof]*multiplier);
- //printf("\n");
-
- //btScalar sum = 0;
- //for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- //{
- // sum += delta_vee[dof]*multiplier*delta_vee[dof]*multiplier;
- //}
- //btScalar l = btSqrt(sum);
-
- //if (l>m_maxAppliedImpulse)
- //{
- // multiplier *= m_maxAppliedImpulse/l;
- //}
-
- for (int dof = 0; dof < 6 + getNumDofs(); ++dof)
- {
- m_realBuf[dof] += delta_vee[dof] * multiplier;
- btClamp(m_realBuf[dof], -m_maxCoordinateVelocity, m_maxCoordinateVelocity);
- }
- }
-
- // timestep the positions (given current velocities).
- void stepPositionsMultiDof(btScalar dt, btScalar *pq = 0, btScalar *pqd = 0);
-
- // predict the positions
- void predictPositionsMultiDof(btScalar dt);
-
- //
- // contacts
- //
-
- // This routine fills out a contact constraint jacobian for this body.
- // the 'normal' supplied must be -n for body1 or +n for body2 of the contact.
- // 'normal' & 'contact_point' are both given in world coordinates.
-
- void fillContactJacobianMultiDof(int link,
- const btVector3 &contact_point,
- const btVector3 &normal,
- btScalar *jac,
- btAlignedObjectArray<btScalar> &scratch_r,
- btAlignedObjectArray<btVector3> &scratch_v,
- btAlignedObjectArray<btMatrix3x3> &scratch_m) const { fillConstraintJacobianMultiDof(link, contact_point, btVector3(0, 0, 0), normal, jac, scratch_r, scratch_v, scratch_m); }
-
- //a more general version of fillContactJacobianMultiDof which does not assume..
- //.. that the constraint in question is contact or, to be more precise, constrains linear velocity only
- void fillConstraintJacobianMultiDof(int link,
- const btVector3 &contact_point,
- const btVector3 &normal_ang,
- const btVector3 &normal_lin,
- btScalar *jac,
- btAlignedObjectArray<btScalar> &scratch_r,
- btAlignedObjectArray<btVector3> &scratch_v,
- btAlignedObjectArray<btMatrix3x3> &scratch_m) const;
-
- //
- // sleeping
- //
- void setCanSleep(bool canSleep)
- {
- if (m_canWakeup)
- {
- m_canSleep = canSleep;
- }
- }
-
- bool getCanSleep() const
- {
- return m_canSleep;
- }
-
- bool getCanWakeup() const
- {
- return m_canWakeup;
- }
-
- void setCanWakeup(bool canWakeup)
- {
- m_canWakeup = canWakeup;
- }
- bool isAwake() const
- {
- return m_awake;
- }
- void wakeUp();
- void goToSleep();
- void checkMotionAndSleepIfRequired(btScalar timestep);
-
- bool hasFixedBase() const;
-
- bool isBaseKinematic() const;
-
- bool isBaseStaticOrKinematic() const;
-
- // set the dynamic type in the base's collision flags.
- void setBaseDynamicType(int dynamicType);
-
- void setFixedBase(bool fixedBase)
- {
- m_fixedBase = fixedBase;
- if(m_fixedBase)
- setBaseDynamicType(btCollisionObject::CF_STATIC_OBJECT);
- else
- setBaseDynamicType(btCollisionObject::CF_DYNAMIC_OBJECT);
- }
-
- int getCompanionId() const
- {
- return m_companionId;
- }
- void setCompanionId(int id)
- {
- //printf("for %p setCompanionId(%d)\n",this, id);
- m_companionId = id;
- }
-
- void setNumLinks(int numLinks) //careful: when changing the number of m_links, make sure to re-initialize or update existing m_links
- {
- m_links.resize(numLinks);
- }
-
- btScalar getLinearDamping() const
- {
- return m_linearDamping;
- }
- void setLinearDamping(btScalar damp)
- {
- m_linearDamping = damp;
- }
- btScalar getAngularDamping() const
- {
- return m_angularDamping;
- }
- void setAngularDamping(btScalar damp)
- {
- m_angularDamping = damp;
- }
-
- bool getUseGyroTerm() const
- {
- return m_useGyroTerm;
- }
- void setUseGyroTerm(bool useGyro)
- {
- m_useGyroTerm = useGyro;
- }
- btScalar getMaxCoordinateVelocity() const
- {
- return m_maxCoordinateVelocity;
- }
- void setMaxCoordinateVelocity(btScalar maxVel)
- {
- m_maxCoordinateVelocity = maxVel;
- }
-
- btScalar getMaxAppliedImpulse() const
- {
- return m_maxAppliedImpulse;
- }
- void setMaxAppliedImpulse(btScalar maxImp)
- {
- m_maxAppliedImpulse = maxImp;
- }
- void setHasSelfCollision(bool hasSelfCollision)
- {
- m_hasSelfCollision = hasSelfCollision;
- }
- bool hasSelfCollision() const
- {
- return m_hasSelfCollision;
- }
-
- void finalizeMultiDof();
-
- void useRK4Integration(bool use) { m_useRK4 = use; }
- bool isUsingRK4Integration() const { return m_useRK4; }
- void useGlobalVelocities(bool use) { m_useGlobalVelocities = use; }
- bool isUsingGlobalVelocities() const { return m_useGlobalVelocities; }
-
- bool isPosUpdated() const
- {
- return __posUpdated;
- }
- void setPosUpdated(bool updated)
- {
- __posUpdated = updated;
- }
-
- //internalNeedsJointFeedback is for internal use only
- bool internalNeedsJointFeedback() const
- {
- return m_internalNeedsJointFeedback;
- }
- void forwardKinematics(btAlignedObjectArray<btQuaternion>& world_to_local, btAlignedObjectArray<btVector3> & local_origin);
-
- void compTreeLinkVelocities(btVector3 * omega, btVector3 * vel) const;
-
- void updateCollisionObjectWorldTransforms(btAlignedObjectArray<btQuaternion> & world_to_local, btAlignedObjectArray<btVector3> & local_origin);
- void updateCollisionObjectInterpolationWorldTransforms(btAlignedObjectArray<btQuaternion> & world_to_local, btAlignedObjectArray<btVector3> & local_origin);
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char *serialize(void *dataBuffer, class btSerializer *serializer) const;
-
- const char *getBaseName() const
- {
- return m_baseName;
- }
- ///memory of setBaseName needs to be manager by user
- void setBaseName(const char *name)
- {
- m_baseName = name;
- }
-
- ///users can point to their objects, userPointer is not used by Bullet
- void *getUserPointer() const
- {
- return m_userObjectPointer;
- }
-
- int getUserIndex() const
- {
- return m_userIndex;
- }
-
- int getUserIndex2() const
- {
- return m_userIndex2;
- }
- ///users can point to their objects, userPointer is not used by Bullet
- void setUserPointer(void *userPointer)
- {
- m_userObjectPointer = userPointer;
- }
-
- ///users can point to their objects, userPointer is not used by Bullet
- void setUserIndex(int index)
- {
- m_userIndex = index;
- }
-
- void setUserIndex2(int index)
- {
- m_userIndex2 = index;
- }
-
- static void spatialTransform(const btMatrix3x3 &rotation_matrix, // rotates vectors in 'from' frame to vectors in 'to' frame
- const btVector3 &displacement, // vector from origin of 'from' frame to origin of 'to' frame, in 'to' coordinates
- const btVector3 &top_in, // top part of input vector
- const btVector3 &bottom_in, // bottom part of input vector
- btVector3 &top_out, // top part of output vector
- btVector3 &bottom_out); // bottom part of output vector
-
- void setLinkDynamicType(const int i, int type);
-
- bool isLinkStaticOrKinematic(const int i) const;
-
- bool isLinkKinematic(const int i) const;
-
- bool isLinkAndAllAncestorsStaticOrKinematic(const int i) const;
-
- bool isLinkAndAllAncestorsKinematic(const int i) const;
-
- void setSleepThreshold(btScalar sleepThreshold)
- {
- m_sleepEpsilon = sleepThreshold;
- }
-
- void setSleepTimeout(btScalar sleepTimeout)
- {
- this->m_sleepTimeout = sleepTimeout;
- }
-
-
-private:
- btMultiBody(const btMultiBody &); // not implemented
- void operator=(const btMultiBody &); // not implemented
-
- void solveImatrix(const btVector3 &rhs_top, const btVector3 &rhs_bot, btScalar result[6]) const;
- void solveImatrix(const btSpatialForceVector &rhs, btSpatialMotionVector &result) const;
-
- void updateLinksDofOffsets()
- {
- int dofOffset = 0, cfgOffset = 0;
- for (int bidx = 0; bidx < m_links.size(); ++bidx)
- {
- m_links[bidx].m_dofOffset = dofOffset;
- m_links[bidx].m_cfgOffset = cfgOffset;
- dofOffset += m_links[bidx].m_dofCount;
- cfgOffset += m_links[bidx].m_posVarCount;
- }
- }
-
- void mulMatrix(const btScalar *pA, const btScalar *pB, int rowsA, int colsA, int rowsB, int colsB, btScalar *pC) const;
-
-private:
- btMultiBodyLinkCollider *m_baseCollider; //can be NULL
- const char *m_baseName; //memory needs to be manager by user!
-
- btVector3 m_basePos; // position of COM of base (world frame)
- btVector3 m_basePos_interpolate; // position of interpolated COM of base (world frame)
- btQuaternion m_baseQuat; // rotates world points into base frame
- btQuaternion m_baseQuat_interpolate;
-
- btScalar m_baseMass; // mass of the base
- btVector3 m_baseInertia; // inertia of the base (in local frame; diagonal)
-
- btVector3 m_baseForce; // external force applied to base. World frame.
- btVector3 m_baseTorque; // external torque applied to base. World frame.
-
- btVector3 m_baseConstraintForce; // external force applied to base. World frame.
- btVector3 m_baseConstraintTorque; // external torque applied to base. World frame.
-
- btAlignedObjectArray<btMultibodyLink> m_links; // array of m_links, excluding the base. index from 0 to num_links-1.
-
- //
- // realBuf:
- // offset size array
- // 0 6 + num_links v (base_omega; base_vel; joint_vels) MULTIDOF [sysdof x sysdof for D matrices (TOO MUCH!) + pos_delta which is sys-cfg sized]
- // 6+num_links num_links D
- //
- // vectorBuf:
- // offset size array
- // 0 num_links h_top
- // num_links num_links h_bottom
- //
- // matrixBuf:
- // offset size array
- // 0 num_links+1 rot_from_parent
- //
- btAlignedObjectArray<btScalar> m_splitV;
- btAlignedObjectArray<btScalar> m_deltaV;
- btAlignedObjectArray<btScalar> m_realBuf;
- btAlignedObjectArray<btVector3> m_vectorBuf;
- btAlignedObjectArray<btMatrix3x3> m_matrixBuf;
-
- btMatrix3x3 m_cachedInertiaTopLeft;
- btMatrix3x3 m_cachedInertiaTopRight;
- btMatrix3x3 m_cachedInertiaLowerLeft;
- btMatrix3x3 m_cachedInertiaLowerRight;
- bool m_cachedInertiaValid;
-
- bool m_fixedBase;
-
- // Sleep parameters.
- bool m_awake;
- bool m_canSleep;
- bool m_canWakeup;
- btScalar m_sleepTimer;
- btScalar m_sleepEpsilon;
- btScalar m_sleepTimeout;
-
- void *m_userObjectPointer;
- int m_userIndex2;
- int m_userIndex;
-
- int m_companionId;
- btScalar m_linearDamping;
- btScalar m_angularDamping;
- bool m_useGyroTerm;
- btScalar m_maxAppliedImpulse;
- btScalar m_maxCoordinateVelocity;
- bool m_hasSelfCollision;
-
- bool __posUpdated;
- int m_dofCount, m_posVarCnt;
-
- bool m_useRK4, m_useGlobalVelocities;
- //for global velocities, see 8.3.2B Proposed resolution in Jakub Stepien PhD Thesis
- //https://drive.google.com/file/d/0Bz3vEa19XOYGNWdZWGpMdUdqVmZ5ZVBOaEh4ZnpNaUxxZFNV/view?usp=sharing
-
- ///the m_needsJointFeedback gets updated/computed during the stepVelocitiesMultiDof and it for internal usage only
- bool m_internalNeedsJointFeedback;
-
- //If enabled, calculate the velocity based on kinematic transform changes. Currently only implemented for the base.
- bool m_kinematic_calculate_velocity;
-};
-
-struct btMultiBodyLinkDoubleData
-{
- btQuaternionDoubleData m_zeroRotParentToThis;
- btVector3DoubleData m_parentComToThisPivotOffset;
- btVector3DoubleData m_thisPivotToThisComOffset;
- btVector3DoubleData m_jointAxisTop[6];
- btVector3DoubleData m_jointAxisBottom[6];
-
- btVector3DoubleData m_linkInertia; // inertia of the base (in local frame; diagonal)
- btVector3DoubleData m_absFrameTotVelocityTop;
- btVector3DoubleData m_absFrameTotVelocityBottom;
- btVector3DoubleData m_absFrameLocVelocityTop;
- btVector3DoubleData m_absFrameLocVelocityBottom;
-
- double m_linkMass;
- int m_parentIndex;
- int m_jointType;
-
- int m_dofCount;
- int m_posVarCount;
- double m_jointPos[7];
- double m_jointVel[6];
- double m_jointTorque[6];
-
- double m_jointDamping;
- double m_jointFriction;
- double m_jointLowerLimit;
- double m_jointUpperLimit;
- double m_jointMaxForce;
- double m_jointMaxVelocity;
-
- char *m_linkName;
- char *m_jointName;
- btCollisionObjectDoubleData *m_linkCollider;
- char *m_paddingPtr;
-};
-
-struct btMultiBodyLinkFloatData
-{
- btQuaternionFloatData m_zeroRotParentToThis;
- btVector3FloatData m_parentComToThisPivotOffset;
- btVector3FloatData m_thisPivotToThisComOffset;
- btVector3FloatData m_jointAxisTop[6];
- btVector3FloatData m_jointAxisBottom[6];
- btVector3FloatData m_linkInertia; // inertia of the base (in local frame; diagonal)
- btVector3FloatData m_absFrameTotVelocityTop;
- btVector3FloatData m_absFrameTotVelocityBottom;
- btVector3FloatData m_absFrameLocVelocityTop;
- btVector3FloatData m_absFrameLocVelocityBottom;
-
- int m_dofCount;
- float m_linkMass;
- int m_parentIndex;
- int m_jointType;
-
- float m_jointPos[7];
- float m_jointVel[6];
- float m_jointTorque[6];
- int m_posVarCount;
- float m_jointDamping;
- float m_jointFriction;
- float m_jointLowerLimit;
- float m_jointUpperLimit;
- float m_jointMaxForce;
- float m_jointMaxVelocity;
-
- char *m_linkName;
- char *m_jointName;
- btCollisionObjectFloatData *m_linkCollider;
- char *m_paddingPtr;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btMultiBodyDoubleData
-{
- btVector3DoubleData m_baseWorldPosition;
- btQuaternionDoubleData m_baseWorldOrientation;
- btVector3DoubleData m_baseLinearVelocity;
- btVector3DoubleData m_baseAngularVelocity;
- btVector3DoubleData m_baseInertia; // inertia of the base (in local frame; diagonal)
- double m_baseMass;
- int m_numLinks;
- char m_padding[4];
-
- char *m_baseName;
- btMultiBodyLinkDoubleData *m_links;
- btCollisionObjectDoubleData *m_baseCollider;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btMultiBodyFloatData
-{
- btVector3FloatData m_baseWorldPosition;
- btQuaternionFloatData m_baseWorldOrientation;
- btVector3FloatData m_baseLinearVelocity;
- btVector3FloatData m_baseAngularVelocity;
-
- btVector3FloatData m_baseInertia; // inertia of the base (in local frame; diagonal)
- float m_baseMass;
- int m_numLinks;
-
- char *m_baseName;
- btMultiBodyLinkFloatData *m_links;
- btCollisionObjectFloatData *m_baseCollider;
-};
-
-#endif
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp
deleted file mode 100644
index 00d5fd5609..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.cpp
+++ /dev/null
@@ -1,389 +0,0 @@
-#include "btMultiBodyConstraint.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "btMultiBodyPoint2Point.h" //for testing (BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST macro)
-
-btMultiBodyConstraint::btMultiBodyConstraint(btMultiBody* bodyA, btMultiBody* bodyB, int linkA, int linkB, int numRows, bool isUnilateral, int type)
- : m_bodyA(bodyA),
- m_bodyB(bodyB),
- m_linkA(linkA),
- m_linkB(linkB),
- m_type(type),
- m_numRows(numRows),
- m_jacSizeA(0),
- m_jacSizeBoth(0),
- m_isUnilateral(isUnilateral),
- m_numDofsFinalized(-1),
- m_maxAppliedImpulse(100)
-{
-}
-
-void btMultiBodyConstraint::updateJacobianSizes()
-{
- if (m_bodyA)
- {
- m_jacSizeA = (6 + m_bodyA->getNumDofs());
- }
-
- if (m_bodyB)
- {
- m_jacSizeBoth = m_jacSizeA + 6 + m_bodyB->getNumDofs();
- }
- else
- m_jacSizeBoth = m_jacSizeA;
-}
-
-void btMultiBodyConstraint::allocateJacobiansMultiDof()
-{
- updateJacobianSizes();
-
- m_posOffset = ((1 + m_jacSizeBoth) * m_numRows);
- m_data.resize((2 + m_jacSizeBoth) * m_numRows);
-}
-
-btMultiBodyConstraint::~btMultiBodyConstraint()
-{
-}
-
-void btMultiBodyConstraint::applyDeltaVee(btMultiBodyJacobianData& data, btScalar* delta_vee, btScalar impulse, int velocityIndex, int ndof)
-{
- for (int i = 0; i < ndof; ++i)
- data.m_deltaVelocities[velocityIndex + i] += delta_vee[i] * impulse;
-}
-
-btScalar btMultiBodyConstraint::fillMultiBodyConstraint(btMultiBodySolverConstraint& solverConstraint,
- btMultiBodyJacobianData& data,
- btScalar* jacOrgA, btScalar* jacOrgB,
- const btVector3& constraintNormalAng,
- const btVector3& constraintNormalLin,
- const btVector3& posAworld, const btVector3& posBworld,
- btScalar posError,
- const btContactSolverInfo& infoGlobal,
- btScalar lowerLimit, btScalar upperLimit,
- bool angConstraint,
- btScalar relaxation,
- bool isFriction, btScalar desiredVelocity, btScalar cfmSlip,
- btScalar damping)
-{
- solverConstraint.m_multiBodyA = m_bodyA;
- solverConstraint.m_multiBodyB = m_bodyB;
- solverConstraint.m_linkA = m_linkA;
- solverConstraint.m_linkB = m_linkB;
-
- btMultiBody* multiBodyA = solverConstraint.m_multiBodyA;
- btMultiBody* multiBodyB = solverConstraint.m_multiBodyB;
-
- btSolverBody* bodyA = multiBodyA ? 0 : &data.m_solverBodyPool->at(solverConstraint.m_solverBodyIdA);
- btSolverBody* bodyB = multiBodyB ? 0 : &data.m_solverBodyPool->at(solverConstraint.m_solverBodyIdB);
-
- btRigidBody* rb0 = multiBodyA ? 0 : bodyA->m_originalBody;
- btRigidBody* rb1 = multiBodyB ? 0 : bodyB->m_originalBody;
-
- btVector3 rel_pos1, rel_pos2; //these two used to be inited to posAworld and posBworld (respectively) but it does not seem necessary
- if (bodyA)
- rel_pos1 = posAworld - bodyA->getWorldTransform().getOrigin();
- if (bodyB)
- rel_pos2 = posBworld - bodyB->getWorldTransform().getOrigin();
-
- if (multiBodyA)
- {
- if (solverConstraint.m_linkA < 0)
- {
- rel_pos1 = posAworld - multiBodyA->getBasePos();
- }
- else
- {
- rel_pos1 = posAworld - multiBodyA->getLink(solverConstraint.m_linkA).m_cachedWorldTransform.getOrigin();
- }
-
- const int ndofA = multiBodyA->getNumDofs() + 6;
-
- solverConstraint.m_deltaVelAindex = multiBodyA->getCompanionId();
-
- if (solverConstraint.m_deltaVelAindex < 0)
- {
- solverConstraint.m_deltaVelAindex = data.m_deltaVelocities.size();
- multiBodyA->setCompanionId(solverConstraint.m_deltaVelAindex);
- data.m_deltaVelocities.resize(data.m_deltaVelocities.size() + ndofA);
- }
- else
- {
- btAssert(data.m_deltaVelocities.size() >= solverConstraint.m_deltaVelAindex + ndofA);
- }
-
- //determine jacobian of this 1D constraint in terms of multibodyA's degrees of freedom
- //resize..
- solverConstraint.m_jacAindex = data.m_jacobians.size();
- data.m_jacobians.resize(data.m_jacobians.size() + ndofA);
- //copy/determine
- if (jacOrgA)
- {
- for (int i = 0; i < ndofA; i++)
- data.m_jacobians[solverConstraint.m_jacAindex + i] = jacOrgA[i];
- }
- else
- {
- btScalar* jac1 = &data.m_jacobians[solverConstraint.m_jacAindex];
- //multiBodyA->fillContactJacobianMultiDof(solverConstraint.m_linkA, posAworld, constraintNormalLin, jac1, data.scratch_r, data.scratch_v, data.scratch_m);
- multiBodyA->fillConstraintJacobianMultiDof(solverConstraint.m_linkA, posAworld, constraintNormalAng, constraintNormalLin, jac1, data.scratch_r, data.scratch_v, data.scratch_m);
- }
-
- //determine the velocity response of multibodyA to reaction impulses of this constraint (i.e. A[i,i] for i=1,...n_con: multibody's inverse inertia with respect to this 1D constraint)
- //resize..
- data.m_deltaVelocitiesUnitImpulse.resize(data.m_deltaVelocitiesUnitImpulse.size() + ndofA); //=> each constraint row has the constrained tree dofs allocated in m_deltaVelocitiesUnitImpulse
- btAssert(data.m_jacobians.size() == data.m_deltaVelocitiesUnitImpulse.size());
- btScalar* delta = &data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- //determine..
- multiBodyA->calcAccelerationDeltasMultiDof(&data.m_jacobians[solverConstraint.m_jacAindex], delta, data.scratch_r, data.scratch_v);
-
- btVector3 torqueAxis0;
- if (angConstraint)
- {
- torqueAxis0 = constraintNormalAng;
- }
- else
- {
- torqueAxis0 = rel_pos1.cross(constraintNormalLin);
- }
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_contactNormal1 = constraintNormalLin;
- }
- else //if(rb0)
- {
- btVector3 torqueAxis0;
- if (angConstraint)
- {
- torqueAxis0 = constraintNormalAng;
- }
- else
- {
- torqueAxis0 = rel_pos1.cross(constraintNormalLin);
- }
- solverConstraint.m_angularComponentA = rb0 ? rb0->getInvInertiaTensorWorld() * torqueAxis0 * rb0->getAngularFactor() : btVector3(0, 0, 0);
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_contactNormal1 = constraintNormalLin;
- }
-
- if (multiBodyB)
- {
- if (solverConstraint.m_linkB < 0)
- {
- rel_pos2 = posBworld - multiBodyB->getBasePos();
- }
- else
- {
- rel_pos2 = posBworld - multiBodyB->getLink(solverConstraint.m_linkB).m_cachedWorldTransform.getOrigin();
- }
-
- const int ndofB = multiBodyB->getNumDofs() + 6;
-
- solverConstraint.m_deltaVelBindex = multiBodyB->getCompanionId();
- if (solverConstraint.m_deltaVelBindex < 0)
- {
- solverConstraint.m_deltaVelBindex = data.m_deltaVelocities.size();
- multiBodyB->setCompanionId(solverConstraint.m_deltaVelBindex);
- data.m_deltaVelocities.resize(data.m_deltaVelocities.size() + ndofB);
- }
-
- //determine jacobian of this 1D constraint in terms of multibodyB's degrees of freedom
- //resize..
- solverConstraint.m_jacBindex = data.m_jacobians.size();
- data.m_jacobians.resize(data.m_jacobians.size() + ndofB);
- //copy/determine..
- if (jacOrgB)
- {
- for (int i = 0; i < ndofB; i++)
- data.m_jacobians[solverConstraint.m_jacBindex + i] = jacOrgB[i];
- }
- else
- {
- //multiBodyB->fillContactJacobianMultiDof(solverConstraint.m_linkB, posBworld, -constraintNormalLin, &data.m_jacobians[solverConstraint.m_jacBindex], data.scratch_r, data.scratch_v, data.scratch_m);
- multiBodyB->fillConstraintJacobianMultiDof(solverConstraint.m_linkB, posBworld, -constraintNormalAng, -constraintNormalLin, &data.m_jacobians[solverConstraint.m_jacBindex], data.scratch_r, data.scratch_v, data.scratch_m);
- }
-
- //determine velocity response of multibodyB to reaction impulses of this constraint (i.e. A[i,i] for i=1,...n_con: multibody's inverse inertia with respect to this 1D constraint)
- //resize..
- data.m_deltaVelocitiesUnitImpulse.resize(data.m_deltaVelocitiesUnitImpulse.size() + ndofB);
- btAssert(data.m_jacobians.size() == data.m_deltaVelocitiesUnitImpulse.size());
- btScalar* delta = &data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex];
- //determine..
- multiBodyB->calcAccelerationDeltasMultiDof(&data.m_jacobians[solverConstraint.m_jacBindex], delta, data.scratch_r, data.scratch_v);
-
- btVector3 torqueAxis1;
- if (angConstraint)
- {
- torqueAxis1 = constraintNormalAng;
- }
- else
- {
- torqueAxis1 = rel_pos2.cross(constraintNormalLin);
- }
- solverConstraint.m_relpos2CrossNormal = -torqueAxis1;
- solverConstraint.m_contactNormal2 = -constraintNormalLin;
- }
- else //if(rb1)
- {
- btVector3 torqueAxis1;
- if (angConstraint)
- {
- torqueAxis1 = constraintNormalAng;
- }
- else
- {
- torqueAxis1 = rel_pos2.cross(constraintNormalLin);
- }
- solverConstraint.m_angularComponentB = rb1 ? rb1->getInvInertiaTensorWorld() * -torqueAxis1 * rb1->getAngularFactor() : btVector3(0, 0, 0);
- solverConstraint.m_relpos2CrossNormal = -torqueAxis1;
- solverConstraint.m_contactNormal2 = -constraintNormalLin;
- }
- {
- btVector3 vec;
- btScalar denom0 = 0.f;
- btScalar denom1 = 0.f;
- btScalar* jacB = 0;
- btScalar* jacA = 0;
- btScalar* deltaVelA = 0;
- btScalar* deltaVelB = 0;
- int ndofA = 0;
- //determine the "effective mass" of the constrained multibodyA with respect to this 1D constraint (i.e. 1/A[i,i])
- if (multiBodyA)
- {
- ndofA = multiBodyA->getNumDofs() + 6;
- jacA = &data.m_jacobians[solverConstraint.m_jacAindex];
- deltaVelA = &data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- for (int i = 0; i < ndofA; ++i)
- {
- btScalar j = jacA[i];
- btScalar l = deltaVelA[i];
- denom0 += j * l;
- }
- }
- else if (rb0)
- {
- vec = (solverConstraint.m_angularComponentA).cross(rel_pos1);
- if (angConstraint)
- {
- denom0 = constraintNormalAng.dot(solverConstraint.m_angularComponentA);
- }
- else
- {
- denom0 = rb0->getInvMass() + constraintNormalLin.dot(vec);
- }
- }
- //
- if (multiBodyB)
- {
- const int ndofB = multiBodyB->getNumDofs() + 6;
- jacB = &data.m_jacobians[solverConstraint.m_jacBindex];
- deltaVelB = &data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex];
- for (int i = 0; i < ndofB; ++i)
- {
- btScalar j = jacB[i];
- btScalar l = deltaVelB[i];
- denom1 += j * l;
- }
- }
- else if (rb1)
- {
- vec = (-solverConstraint.m_angularComponentB).cross(rel_pos2);
- if (angConstraint)
- {
- denom1 = constraintNormalAng.dot(-solverConstraint.m_angularComponentB);
- }
- else
- {
- denom1 = rb1->getInvMass() + constraintNormalLin.dot(vec);
- }
- }
-
- //
- btScalar d = denom0 + denom1;
- if (d > SIMD_EPSILON)
- {
- solverConstraint.m_jacDiagABInv = relaxation / (d);
- }
- else
- {
- //disable the constraint row to handle singularity/redundant constraint
- solverConstraint.m_jacDiagABInv = 0.f;
- }
- }
-
- //compute rhs and remaining solverConstraint fields
- btScalar penetration = isFriction ? 0 : posError;
-
- btScalar rel_vel = 0.f;
- int ndofA = 0;
- int ndofB = 0;
- {
- btVector3 vel1, vel2;
- if (multiBodyA)
- {
- ndofA = multiBodyA->getNumDofs() + 6;
- btScalar* jacA = &data.m_jacobians[solverConstraint.m_jacAindex];
- for (int i = 0; i < ndofA; ++i)
- rel_vel += multiBodyA->getVelocityVector()[i] * jacA[i];
- }
- else if (rb0)
- {
- rel_vel += rb0->getLinearVelocity().dot(solverConstraint.m_contactNormal1);
- rel_vel += rb0->getAngularVelocity().dot(solverConstraint.m_relpos1CrossNormal);
- }
- if (multiBodyB)
- {
- ndofB = multiBodyB->getNumDofs() + 6;
- btScalar* jacB = &data.m_jacobians[solverConstraint.m_jacBindex];
- for (int i = 0; i < ndofB; ++i)
- rel_vel += multiBodyB->getVelocityVector()[i] * jacB[i];
- }
- else if (rb1)
- {
- rel_vel += rb1->getLinearVelocity().dot(solverConstraint.m_contactNormal2);
- rel_vel += rb1->getAngularVelocity().dot(solverConstraint.m_relpos2CrossNormal);
- }
-
- solverConstraint.m_friction = 0.f; //cp.m_combinedFriction;
- }
-
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- btScalar positionalError = 0.f;
- btScalar velocityError = (desiredVelocity - rel_vel) * damping;
-
- btScalar erp = infoGlobal.m_erp2;
-
- //split impulse is not implemented yet for btMultiBody*
- //if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- erp = infoGlobal.m_erp;
- }
-
- positionalError = -penetration * erp / infoGlobal.m_timeStep;
-
- btScalar penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- btScalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
-
- //split impulse is not implemented yet for btMultiBody*
-
- // if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- //combine position and velocity into rhs
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_rhsPenetration = 0.f;
- }
- /*else
- {
- //split position and velocity into rhs and m_rhsPenetration
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_rhsPenetration = penetrationImpulse;
- }
- */
-
- solverConstraint.m_cfm = 0.f;
- solverConstraint.m_lowerLimit = lowerLimit;
- solverConstraint.m_upperLimit = upperLimit;
- }
-
- return rel_vel;
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.h
deleted file mode 100644
index 1aaa07b69e..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraint.h
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_CONSTRAINT_H
-#define BT_MULTIBODY_CONSTRAINT_H
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "btMultiBody.h"
-
-
-//Don't change any of the existing enum values, so add enum types at the end for serialization compatibility
-enum btTypedMultiBodyConstraintType
-{
- MULTIBODY_CONSTRAINT_LIMIT=3,
- MULTIBODY_CONSTRAINT_1DOF_JOINT_MOTOR,
- MULTIBODY_CONSTRAINT_GEAR,
- MULTIBODY_CONSTRAINT_POINT_TO_POINT,
- MULTIBODY_CONSTRAINT_SLIDER,
- MULTIBODY_CONSTRAINT_SPHERICAL_MOTOR,
- MULTIBODY_CONSTRAINT_FIXED,
-
- MAX_MULTIBODY_CONSTRAINT_TYPE,
-};
-
-class btMultiBody;
-struct btSolverInfo;
-
-#include "btMultiBodySolverConstraint.h"
-
-struct btMultiBodyJacobianData
-{
- btAlignedObjectArray<btScalar> m_jacobians;
- btAlignedObjectArray<btScalar> m_deltaVelocitiesUnitImpulse; //holds the joint-space response of the corresp. tree to the test impulse in each constraint space dimension
- btAlignedObjectArray<btScalar> m_deltaVelocities; //holds joint-space vectors of all the constrained trees accumulating the effect of corrective impulses applied in SI
- btAlignedObjectArray<btScalar> scratch_r;
- btAlignedObjectArray<btVector3> scratch_v;
- btAlignedObjectArray<btMatrix3x3> scratch_m;
- btAlignedObjectArray<btSolverBody>* m_solverBodyPool;
- int m_fixedBodyId;
-};
-
-ATTRIBUTE_ALIGNED16(class)
-btMultiBodyConstraint
-{
-protected:
- btMultiBody* m_bodyA;
- btMultiBody* m_bodyB;
- int m_linkA;
- int m_linkB;
-
- int m_type; //btTypedMultiBodyConstraintType
-
- int m_numRows;
- int m_jacSizeA;
- int m_jacSizeBoth;
- int m_posOffset;
-
- bool m_isUnilateral;
- int m_numDofsFinalized;
- btScalar m_maxAppliedImpulse;
-
- // warning: the data block lay out is not consistent for all constraints
- // data block laid out as follows:
- // cached impulses. (one per row.)
- // jacobians. (interleaved, row1 body1 then row1 body2 then row2 body 1 etc)
- // positions. (one per row.)
- btAlignedObjectArray<btScalar> m_data;
-
- void applyDeltaVee(btMultiBodyJacobianData & data, btScalar * delta_vee, btScalar impulse, int velocityIndex, int ndof);
-
- btScalar fillMultiBodyConstraint(btMultiBodySolverConstraint & solverConstraint,
- btMultiBodyJacobianData & data,
- btScalar * jacOrgA, btScalar * jacOrgB,
- const btVector3& constraintNormalAng,
-
- const btVector3& constraintNormalLin,
- const btVector3& posAworld, const btVector3& posBworld,
- btScalar posError,
- const btContactSolverInfo& infoGlobal,
- btScalar lowerLimit, btScalar upperLimit,
- bool angConstraint = false,
-
- btScalar relaxation = 1.f,
- bool isFriction = false, btScalar desiredVelocity = 0, btScalar cfmSlip = 0, btScalar damping = 1.0);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btMultiBodyConstraint(btMultiBody * bodyA, btMultiBody * bodyB, int linkA, int linkB, int numRows, bool isUnilateral, int type);
- virtual ~btMultiBodyConstraint();
-
- void updateJacobianSizes();
- void allocateJacobiansMultiDof();
-
- int getConstraintType() const
- {
- return m_type;
- }
- //many constraints have setFrameInB/setPivotInB. Will use 'getConstraintType' later.
- virtual void setFrameInB(const btMatrix3x3& frameInB) {}
- virtual void setPivotInB(const btVector3& pivotInB) {}
-
- virtual void finalizeMultiDof() = 0;
-
- virtual int getIslandIdA() const = 0;
- virtual int getIslandIdB() const = 0;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray & constraintRows,
- btMultiBodyJacobianData & data,
- const btContactSolverInfo& infoGlobal) = 0;
-
- int getNumRows() const
- {
- return m_numRows;
- }
-
- btMultiBody* getMultiBodyA()
- {
- return m_bodyA;
- }
- btMultiBody* getMultiBodyB()
- {
- return m_bodyB;
- }
-
- int getLinkA() const
- {
- return m_linkA;
- }
- int getLinkB() const
- {
- return m_linkB;
- }
- void internalSetAppliedImpulse(int dof, btScalar appliedImpulse)
- {
- btAssert(dof >= 0);
- btAssert(dof < getNumRows());
- m_data[dof] = appliedImpulse;
- }
-
- btScalar getAppliedImpulse(int dof)
- {
- btAssert(dof >= 0);
- btAssert(dof < getNumRows());
- return m_data[dof];
- }
- // current constraint position
- // constraint is pos >= 0 for unilateral, or pos = 0 for bilateral
- // NOTE: ignored position for friction rows.
- btScalar getPosition(int row) const
- {
- return m_data[m_posOffset + row];
- }
-
- void setPosition(int row, btScalar pos)
- {
- m_data[m_posOffset + row] = pos;
- }
-
- bool isUnilateral() const
- {
- return m_isUnilateral;
- }
-
- // jacobian blocks.
- // each of size 6 + num_links. (jacobian2 is null if no body2.)
- // format: 3 'omega' coefficients, 3 'v' coefficients, then the 'qdot' coefficients.
- btScalar* jacobianA(int row)
- {
- return &m_data[m_numRows + row * m_jacSizeBoth];
- }
- const btScalar* jacobianA(int row) const
- {
- return &m_data[m_numRows + (row * m_jacSizeBoth)];
- }
- btScalar* jacobianB(int row)
- {
- return &m_data[m_numRows + (row * m_jacSizeBoth) + m_jacSizeA];
- }
- const btScalar* jacobianB(int row) const
- {
- return &m_data[m_numRows + (row * m_jacSizeBoth) + m_jacSizeA];
- }
-
- btScalar getMaxAppliedImpulse() const
- {
- return m_maxAppliedImpulse;
- }
- void setMaxAppliedImpulse(btScalar maxImp)
- {
- m_maxAppliedImpulse = maxImp;
- }
-
- virtual void debugDraw(class btIDebugDraw * drawer) = 0;
-
- virtual void setGearRatio(btScalar ratio) {}
- virtual void setGearAuxLink(int gearAuxLink) {}
- virtual void setRelativePositionTarget(btScalar relPosTarget) {}
- virtual void setErp(btScalar erp) {}
-};
-
-#endif //BT_MULTIBODY_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp
deleted file mode 100644
index 2788367431..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp
+++ /dev/null
@@ -1,1752 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btMultiBodyConstraintSolver.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "btMultiBodyLinkCollider.h"
-
-#include "BulletDynamics/ConstraintSolver/btSolverBody.h"
-#include "btMultiBodyConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-
-#include "LinearMath/btQuickprof.h"
-#include "BulletDynamics/Featherstone/btMultiBodySolverConstraint.h"
-#include "LinearMath/btScalar.h"
-
-btScalar btMultiBodyConstraintSolver::solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- btScalar leastSquaredResidual = btSequentialImpulseConstraintSolver::solveSingleIteration(iteration, bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- //solve featherstone non-contact constraints
- btScalar nonContactResidual = 0;
- //printf("m_multiBodyNonContactConstraints = %d\n",m_multiBodyNonContactConstraints.size());
- for (int i = 0; i < infoGlobal.m_numNonContactInnerIterations; ++i)
- {
- // reset the nonContactResdual to 0 at start of each inner iteration
- nonContactResidual = 0;
- for (int j = 0; j < m_multiBodyNonContactConstraints.size(); j++)
- {
- int index = iteration & 1 ? j : m_multiBodyNonContactConstraints.size() - 1 - j;
-
- btMultiBodySolverConstraint& constraint = m_multiBodyNonContactConstraints[index];
-
- btScalar residual = resolveSingleConstraintRowGeneric(constraint);
- nonContactResidual = btMax(nonContactResidual, residual * residual);
-
- if (constraint.m_multiBodyA)
- constraint.m_multiBodyA->setPosUpdated(false);
- if (constraint.m_multiBodyB)
- constraint.m_multiBodyB->setPosUpdated(false);
- }
- }
- leastSquaredResidual = btMax(leastSquaredResidual, nonContactResidual);
-
- //solve featherstone normal contact
- for (int j0 = 0; j0 < m_multiBodyNormalContactConstraints.size(); j0++)
- {
- int index = j0; //iteration&1? j0 : m_multiBodyNormalContactConstraints.size()-1-j0;
-
- btMultiBodySolverConstraint& constraint = m_multiBodyNormalContactConstraints[index];
- btScalar residual = 0.f;
-
- if (iteration < infoGlobal.m_numIterations)
- {
- residual = resolveSingleConstraintRowGeneric(constraint);
- }
-
- leastSquaredResidual = btMax(leastSquaredResidual, residual * residual);
-
- if (constraint.m_multiBodyA)
- constraint.m_multiBodyA->setPosUpdated(false);
- if (constraint.m_multiBodyB)
- constraint.m_multiBodyB->setPosUpdated(false);
- }
-
- //solve featherstone frictional contact
- if (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS && ((infoGlobal.m_solverMode & SOLVER_DISABLE_IMPLICIT_CONE_FRICTION) == 0))
- {
- for (int j1 = 0; j1 < this->m_multiBodySpinningFrictionContactConstraints.size(); j1++)
- {
- if (iteration < infoGlobal.m_numIterations)
- {
- int index = j1;
-
- btMultiBodySolverConstraint& frictionConstraint = m_multiBodySpinningFrictionContactConstraints[index];
- btScalar totalImpulse = m_multiBodyNormalContactConstraints[frictionConstraint.m_frictionIndex].m_appliedImpulse;
- //adjust friction limits here
- if (totalImpulse > btScalar(0))
- {
- frictionConstraint.m_lowerLimit = -(frictionConstraint.m_friction * totalImpulse);
- frictionConstraint.m_upperLimit = frictionConstraint.m_friction * totalImpulse;
- btScalar residual = resolveSingleConstraintRowGeneric(frictionConstraint);
- leastSquaredResidual = btMax(leastSquaredResidual, residual * residual);
-
- if (frictionConstraint.m_multiBodyA)
- frictionConstraint.m_multiBodyA->setPosUpdated(false);
- if (frictionConstraint.m_multiBodyB)
- frictionConstraint.m_multiBodyB->setPosUpdated(false);
- }
- }
- }
-
- for (int j1 = 0; j1 < this->m_multiBodyTorsionalFrictionContactConstraints.size(); j1++)
- {
- if (iteration < infoGlobal.m_numIterations)
- {
- int index = j1; //iteration&1? j1 : m_multiBodyTorsionalFrictionContactConstraints.size()-1-j1;
-
- btMultiBodySolverConstraint& frictionConstraint = m_multiBodyTorsionalFrictionContactConstraints[index];
- btScalar totalImpulse = m_multiBodyNormalContactConstraints[frictionConstraint.m_frictionIndex].m_appliedImpulse;
- j1++;
- int index2 = j1;
- btMultiBodySolverConstraint& frictionConstraintB = m_multiBodyTorsionalFrictionContactConstraints[index2];
- //adjust friction limits here
- if (totalImpulse > btScalar(0) && frictionConstraint.m_frictionIndex == frictionConstraintB.m_frictionIndex)
- {
- frictionConstraint.m_lowerLimit = -(frictionConstraint.m_friction * totalImpulse);
- frictionConstraint.m_upperLimit = frictionConstraint.m_friction * totalImpulse;
- frictionConstraintB.m_lowerLimit = -(frictionConstraintB.m_friction * totalImpulse);
- frictionConstraintB.m_upperLimit = frictionConstraintB.m_friction * totalImpulse;
-
- btScalar residual = resolveConeFrictionConstraintRows(frictionConstraint, frictionConstraintB);
- leastSquaredResidual = btMax(leastSquaredResidual, residual * residual);
-
- if (frictionConstraint.m_multiBodyA)
- frictionConstraint.m_multiBodyA->setPosUpdated(false);
- if (frictionConstraint.m_multiBodyB)
- frictionConstraint.m_multiBodyB->setPosUpdated(false);
-
- if (frictionConstraintB.m_multiBodyA)
- frictionConstraintB.m_multiBodyA->setPosUpdated(false);
- if (frictionConstraintB.m_multiBodyB)
- frictionConstraintB.m_multiBodyB->setPosUpdated(false);
- }
- }
- }
-
- for (int j1 = 0; j1 < this->m_multiBodyFrictionContactConstraints.size(); j1++)
- {
- if (iteration < infoGlobal.m_numIterations)
- {
- int index = j1; //iteration&1? j1 : m_multiBodyFrictionContactConstraints.size()-1-j1;
- btMultiBodySolverConstraint& frictionConstraint = m_multiBodyFrictionContactConstraints[index];
-
- btScalar totalImpulse = m_multiBodyNormalContactConstraints[frictionConstraint.m_frictionIndex].m_appliedImpulse;
- j1++;
- int index2 = j1; //iteration&1? j1 : m_multiBodyFrictionContactConstraints.size()-1-j1;
- btMultiBodySolverConstraint& frictionConstraintB = m_multiBodyFrictionContactConstraints[index2];
- btAssert(frictionConstraint.m_frictionIndex == frictionConstraintB.m_frictionIndex);
-
- if (frictionConstraint.m_frictionIndex == frictionConstraintB.m_frictionIndex)
- {
- frictionConstraint.m_lowerLimit = -(frictionConstraint.m_friction * totalImpulse);
- frictionConstraint.m_upperLimit = frictionConstraint.m_friction * totalImpulse;
- frictionConstraintB.m_lowerLimit = -(frictionConstraintB.m_friction * totalImpulse);
- frictionConstraintB.m_upperLimit = frictionConstraintB.m_friction * totalImpulse;
- btScalar residual = resolveConeFrictionConstraintRows(frictionConstraint, frictionConstraintB);
- leastSquaredResidual = btMax(leastSquaredResidual, residual * residual);
-
- if (frictionConstraintB.m_multiBodyA)
- frictionConstraintB.m_multiBodyA->setPosUpdated(false);
- if (frictionConstraintB.m_multiBodyB)
- frictionConstraintB.m_multiBodyB->setPosUpdated(false);
-
- if (frictionConstraint.m_multiBodyA)
- frictionConstraint.m_multiBodyA->setPosUpdated(false);
- if (frictionConstraint.m_multiBodyB)
- frictionConstraint.m_multiBodyB->setPosUpdated(false);
- }
- }
- }
- }
- else
- {
- for (int j1 = 0; j1 < this->m_multiBodyFrictionContactConstraints.size(); j1++)
- {
- if (iteration < infoGlobal.m_numIterations)
- {
- int index = j1; //iteration&1? j1 : m_multiBodyFrictionContactConstraints.size()-1-j1;
-
- btMultiBodySolverConstraint& frictionConstraint = m_multiBodyFrictionContactConstraints[index];
- btScalar totalImpulse = m_multiBodyNormalContactConstraints[frictionConstraint.m_frictionIndex].m_appliedImpulse;
- //adjust friction limits here
- if (totalImpulse > btScalar(0))
- {
- frictionConstraint.m_lowerLimit = -(frictionConstraint.m_friction * totalImpulse);
- frictionConstraint.m_upperLimit = frictionConstraint.m_friction * totalImpulse;
- btScalar residual = resolveSingleConstraintRowGeneric(frictionConstraint);
- leastSquaredResidual = btMax(leastSquaredResidual, residual * residual);
-
- if (frictionConstraint.m_multiBodyA)
- frictionConstraint.m_multiBodyA->setPosUpdated(false);
- if (frictionConstraint.m_multiBodyB)
- frictionConstraint.m_multiBodyB->setPosUpdated(false);
- }
- }
- }
- }
- return leastSquaredResidual;
-}
-
-btScalar btMultiBodyConstraintSolver::solveGroupCacheFriendlySetup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- m_multiBodyNonContactConstraints.resize(0);
- m_multiBodyNormalContactConstraints.resize(0);
- m_multiBodyFrictionContactConstraints.resize(0);
- m_multiBodyTorsionalFrictionContactConstraints.resize(0);
- m_multiBodySpinningFrictionContactConstraints.resize(0);
-
- m_data.m_jacobians.resize(0);
- m_data.m_deltaVelocitiesUnitImpulse.resize(0);
- m_data.m_deltaVelocities.resize(0);
-
- for (int i = 0; i < numBodies; i++)
- {
- const btMultiBodyLinkCollider* fcA = btMultiBodyLinkCollider::upcast(bodies[i]);
- if (fcA)
- {
- fcA->m_multiBody->setCompanionId(-1);
- }
- }
-
- btScalar val = btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- return val;
-}
-
-void btMultiBodyConstraintSolver::applyDeltaVee(btScalar* delta_vee, btScalar impulse, int velocityIndex, int ndof)
-{
- for (int i = 0; i < ndof; ++i)
- m_data.m_deltaVelocities[velocityIndex + i] += delta_vee[i] * impulse;
-}
-
-btScalar btMultiBodyConstraintSolver::resolveSingleConstraintRowGeneric(const btMultiBodySolverConstraint& c)
-{
- btScalar deltaImpulse = c.m_rhs - btScalar(c.m_appliedImpulse) * c.m_cfm;
- btScalar deltaVelADotn = 0;
- btScalar deltaVelBDotn = 0;
- btSolverBody* bodyA = 0;
- btSolverBody* bodyB = 0;
- int ndofA = 0;
- int ndofB = 0;
-
- if (c.m_multiBodyA)
- {
- ndofA = c.m_multiBodyA->getNumDofs() + 6;
- for (int i = 0; i < ndofA; ++i)
- deltaVelADotn += m_data.m_jacobians[c.m_jacAindex + i] * m_data.m_deltaVelocities[c.m_deltaVelAindex + i];
- }
- else if (c.m_solverBodyIdA >= 0)
- {
- bodyA = &m_tmpSolverBodyPool[c.m_solverBodyIdA];
- deltaVelADotn += c.m_contactNormal1.dot(bodyA->internalGetDeltaLinearVelocity()) + c.m_relpos1CrossNormal.dot(bodyA->internalGetDeltaAngularVelocity());
- }
-
- if (c.m_multiBodyB)
- {
- ndofB = c.m_multiBodyB->getNumDofs() + 6;
- for (int i = 0; i < ndofB; ++i)
- deltaVelBDotn += m_data.m_jacobians[c.m_jacBindex + i] * m_data.m_deltaVelocities[c.m_deltaVelBindex + i];
- }
- else if (c.m_solverBodyIdB >= 0)
- {
- bodyB = &m_tmpSolverBodyPool[c.m_solverBodyIdB];
- deltaVelBDotn += c.m_contactNormal2.dot(bodyB->internalGetDeltaLinearVelocity()) + c.m_relpos2CrossNormal.dot(bodyB->internalGetDeltaAngularVelocity());
- }
-
- deltaImpulse -= deltaVelADotn * c.m_jacDiagABInv; //m_jacDiagABInv = 1./denom
- deltaImpulse -= deltaVelBDotn * c.m_jacDiagABInv;
- const btScalar sum = btScalar(c.m_appliedImpulse) + deltaImpulse;
-
- if (sum < c.m_lowerLimit)
- {
- deltaImpulse = c.m_lowerLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_lowerLimit;
- }
- else if (sum > c.m_upperLimit)
- {
- deltaImpulse = c.m_upperLimit - c.m_appliedImpulse;
- c.m_appliedImpulse = c.m_upperLimit;
- }
- else
- {
- c.m_appliedImpulse = sum;
- }
-
- if (c.m_multiBodyA)
- {
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacAindex], deltaImpulse, c.m_deltaVelAindex, ndofA);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- c.m_multiBodyA->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacAindex], deltaImpulse);
-#endif //DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else if (c.m_solverBodyIdA >= 0)
- {
- bodyA->internalApplyImpulse(c.m_contactNormal1 * bodyA->internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- }
- if (c.m_multiBodyB)
- {
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacBindex], deltaImpulse, c.m_deltaVelBindex, ndofB);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- c.m_multiBodyB->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacBindex], deltaImpulse);
-#endif //DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else if (c.m_solverBodyIdB >= 0)
- {
- bodyB->internalApplyImpulse(c.m_contactNormal2 * bodyB->internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
- }
- btScalar deltaVel = deltaImpulse / c.m_jacDiagABInv;
- return deltaVel;
-}
-
-btScalar btMultiBodyConstraintSolver::resolveConeFrictionConstraintRows(const btMultiBodySolverConstraint& cA1, const btMultiBodySolverConstraint& cB)
-{
- int ndofA = 0;
- int ndofB = 0;
- btSolverBody* bodyA = 0;
- btSolverBody* bodyB = 0;
- btScalar deltaImpulseB = 0.f;
- btScalar sumB = 0.f;
- {
- deltaImpulseB = cB.m_rhs - btScalar(cB.m_appliedImpulse) * cB.m_cfm;
- btScalar deltaVelADotn = 0;
- btScalar deltaVelBDotn = 0;
- if (cB.m_multiBodyA)
- {
- ndofA = cB.m_multiBodyA->getNumDofs() + 6;
- for (int i = 0; i < ndofA; ++i)
- deltaVelADotn += m_data.m_jacobians[cB.m_jacAindex + i] * m_data.m_deltaVelocities[cB.m_deltaVelAindex + i];
- }
- else if (cB.m_solverBodyIdA >= 0)
- {
- bodyA = &m_tmpSolverBodyPool[cB.m_solverBodyIdA];
- deltaVelADotn += cB.m_contactNormal1.dot(bodyA->internalGetDeltaLinearVelocity()) + cB.m_relpos1CrossNormal.dot(bodyA->internalGetDeltaAngularVelocity());
- }
-
- if (cB.m_multiBodyB)
- {
- ndofB = cB.m_multiBodyB->getNumDofs() + 6;
- for (int i = 0; i < ndofB; ++i)
- deltaVelBDotn += m_data.m_jacobians[cB.m_jacBindex + i] * m_data.m_deltaVelocities[cB.m_deltaVelBindex + i];
- }
- else if (cB.m_solverBodyIdB >= 0)
- {
- bodyB = &m_tmpSolverBodyPool[cB.m_solverBodyIdB];
- deltaVelBDotn += cB.m_contactNormal2.dot(bodyB->internalGetDeltaLinearVelocity()) + cB.m_relpos2CrossNormal.dot(bodyB->internalGetDeltaAngularVelocity());
- }
-
- deltaImpulseB -= deltaVelADotn * cB.m_jacDiagABInv; //m_jacDiagABInv = 1./denom
- deltaImpulseB -= deltaVelBDotn * cB.m_jacDiagABInv;
- sumB = btScalar(cB.m_appliedImpulse) + deltaImpulseB;
- }
-
- btScalar deltaImpulseA = 0.f;
- btScalar sumA = 0.f;
- const btMultiBodySolverConstraint& cA = cA1;
- {
- {
- deltaImpulseA = cA.m_rhs - btScalar(cA.m_appliedImpulse) * cA.m_cfm;
- btScalar deltaVelADotn = 0;
- btScalar deltaVelBDotn = 0;
- if (cA.m_multiBodyA)
- {
- ndofA = cA.m_multiBodyA->getNumDofs() + 6;
- for (int i = 0; i < ndofA; ++i)
- deltaVelADotn += m_data.m_jacobians[cA.m_jacAindex + i] * m_data.m_deltaVelocities[cA.m_deltaVelAindex + i];
- }
- else if (cA.m_solverBodyIdA >= 0)
- {
- bodyA = &m_tmpSolverBodyPool[cA.m_solverBodyIdA];
- deltaVelADotn += cA.m_contactNormal1.dot(bodyA->internalGetDeltaLinearVelocity()) + cA.m_relpos1CrossNormal.dot(bodyA->internalGetDeltaAngularVelocity());
- }
-
- if (cA.m_multiBodyB)
- {
- ndofB = cA.m_multiBodyB->getNumDofs() + 6;
- for (int i = 0; i < ndofB; ++i)
- deltaVelBDotn += m_data.m_jacobians[cA.m_jacBindex + i] * m_data.m_deltaVelocities[cA.m_deltaVelBindex + i];
- }
- else if (cA.m_solverBodyIdB >= 0)
- {
- bodyB = &m_tmpSolverBodyPool[cA.m_solverBodyIdB];
- deltaVelBDotn += cA.m_contactNormal2.dot(bodyB->internalGetDeltaLinearVelocity()) + cA.m_relpos2CrossNormal.dot(bodyB->internalGetDeltaAngularVelocity());
- }
-
- deltaImpulseA -= deltaVelADotn * cA.m_jacDiagABInv; //m_jacDiagABInv = 1./denom
- deltaImpulseA -= deltaVelBDotn * cA.m_jacDiagABInv;
- sumA = btScalar(cA.m_appliedImpulse) + deltaImpulseA;
- }
- }
-
- if (sumA * sumA + sumB * sumB >= cA.m_lowerLimit * cB.m_lowerLimit)
- {
- btScalar angle = btAtan2(sumA, sumB);
- btScalar sumAclipped = btFabs(cA.m_lowerLimit * btSin(angle));
- btScalar sumBclipped = btFabs(cB.m_lowerLimit * btCos(angle));
-
- if (sumA < -sumAclipped)
- {
- deltaImpulseA = -sumAclipped - cA.m_appliedImpulse;
- cA.m_appliedImpulse = -sumAclipped;
- }
- else if (sumA > sumAclipped)
- {
- deltaImpulseA = sumAclipped - cA.m_appliedImpulse;
- cA.m_appliedImpulse = sumAclipped;
- }
- else
- {
- cA.m_appliedImpulse = sumA;
- }
-
- if (sumB < -sumBclipped)
- {
- deltaImpulseB = -sumBclipped - cB.m_appliedImpulse;
- cB.m_appliedImpulse = -sumBclipped;
- }
- else if (sumB > sumBclipped)
- {
- deltaImpulseB = sumBclipped - cB.m_appliedImpulse;
- cB.m_appliedImpulse = sumBclipped;
- }
- else
- {
- cB.m_appliedImpulse = sumB;
- }
- //deltaImpulseA = sumAclipped-cA.m_appliedImpulse;
- //cA.m_appliedImpulse = sumAclipped;
- //deltaImpulseB = sumBclipped-cB.m_appliedImpulse;
- //cB.m_appliedImpulse = sumBclipped;
- }
- else
- {
- cA.m_appliedImpulse = sumA;
- cB.m_appliedImpulse = sumB;
- }
-
- if (cA.m_multiBodyA)
- {
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[cA.m_jacAindex], deltaImpulseA, cA.m_deltaVelAindex, ndofA);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- cA.m_multiBodyA->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[cA.m_jacAindex], deltaImpulseA);
-#endif //DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else if (cA.m_solverBodyIdA >= 0)
- {
- bodyA->internalApplyImpulse(cA.m_contactNormal1 * bodyA->internalGetInvMass(), cA.m_angularComponentA, deltaImpulseA);
- }
- if (cA.m_multiBodyB)
- {
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[cA.m_jacBindex], deltaImpulseA, cA.m_deltaVelBindex, ndofB);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- cA.m_multiBodyB->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[cA.m_jacBindex], deltaImpulseA);
-#endif //DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else if (cA.m_solverBodyIdB >= 0)
- {
- bodyB->internalApplyImpulse(cA.m_contactNormal2 * bodyB->internalGetInvMass(), cA.m_angularComponentB, deltaImpulseA);
- }
-
- if (cB.m_multiBodyA)
- {
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[cB.m_jacAindex], deltaImpulseB, cB.m_deltaVelAindex, ndofA);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- cB.m_multiBodyA->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[cB.m_jacAindex], deltaImpulseB);
-#endif //DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else if (cB.m_solverBodyIdA >= 0)
- {
- bodyA->internalApplyImpulse(cB.m_contactNormal1 * bodyA->internalGetInvMass(), cB.m_angularComponentA, deltaImpulseB);
- }
- if (cB.m_multiBodyB)
- {
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[cB.m_jacBindex], deltaImpulseB, cB.m_deltaVelBindex, ndofB);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- cB.m_multiBodyB->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[cB.m_jacBindex], deltaImpulseB);
-#endif //DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else if (cB.m_solverBodyIdB >= 0)
- {
- bodyB->internalApplyImpulse(cB.m_contactNormal2 * bodyB->internalGetInvMass(), cB.m_angularComponentB, deltaImpulseB);
- }
-
- btScalar deltaVel = deltaImpulseA / cA.m_jacDiagABInv + deltaImpulseB / cB.m_jacDiagABInv;
- return deltaVel;
-}
-
-void btMultiBodyConstraintSolver::setupMultiBodyContactConstraint(btMultiBodySolverConstraint& solverConstraint, const btVector3& contactNormal, const btScalar& appliedImpulse, btManifoldPoint& cp, const btContactSolverInfo& infoGlobal, btScalar& relaxation, bool isFriction, btScalar desiredVelocity, btScalar cfmSlip)
-{
- BT_PROFILE("setupMultiBodyContactConstraint");
- btVector3 rel_pos1;
- btVector3 rel_pos2;
-
- btMultiBody* multiBodyA = solverConstraint.m_multiBodyA;
- btMultiBody* multiBodyB = solverConstraint.m_multiBodyB;
-
- const btVector3& pos1 = cp.getPositionWorldOnA();
- const btVector3& pos2 = cp.getPositionWorldOnB();
-
- btSolverBody* bodyA = multiBodyA ? 0 : &m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA];
- btSolverBody* bodyB = multiBodyB ? 0 : &m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB];
-
- btRigidBody* rb0 = multiBodyA ? 0 : bodyA->m_originalBody;
- btRigidBody* rb1 = multiBodyB ? 0 : bodyB->m_originalBody;
-
- if (bodyA)
- rel_pos1 = pos1 - bodyA->getWorldTransform().getOrigin();
- if (bodyB)
- rel_pos2 = pos2 - bodyB->getWorldTransform().getOrigin();
-
- relaxation = infoGlobal.m_sor;
-
- btScalar invTimeStep = btScalar(1) / infoGlobal.m_timeStep;
-
- //cfm = 1 / ( dt * kp + kd )
- //erp = dt * kp / ( dt * kp + kd )
-
- btScalar cfm;
- btScalar erp;
- if (isFriction)
- {
- cfm = infoGlobal.m_frictionCFM;
- erp = infoGlobal.m_frictionERP;
- }
- else
- {
- cfm = infoGlobal.m_globalCfm;
- erp = infoGlobal.m_erp2;
-
- if ((cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_CFM) || (cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_ERP))
- {
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_CFM)
- cfm = cp.m_contactCFM;
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_HAS_CONTACT_ERP)
- erp = cp.m_contactERP;
- }
- else
- {
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_CONTACT_STIFFNESS_DAMPING)
- {
- btScalar denom = (infoGlobal.m_timeStep * cp.m_combinedContactStiffness1 + cp.m_combinedContactDamping1);
- if (denom < SIMD_EPSILON)
- {
- denom = SIMD_EPSILON;
- }
- cfm = btScalar(1) / denom;
- erp = (infoGlobal.m_timeStep * cp.m_combinedContactStiffness1) / denom;
- }
- }
- }
-
- cfm *= invTimeStep;
-
- if (multiBodyA)
- {
- if (solverConstraint.m_linkA < 0)
- {
- rel_pos1 = pos1 - multiBodyA->getBasePos();
- }
- else
- {
- rel_pos1 = pos1 - multiBodyA->getLink(solverConstraint.m_linkA).m_cachedWorldTransform.getOrigin();
- }
- const int ndofA = multiBodyA->getNumDofs() + 6;
-
- solverConstraint.m_deltaVelAindex = multiBodyA->getCompanionId();
-
- if (solverConstraint.m_deltaVelAindex < 0)
- {
- solverConstraint.m_deltaVelAindex = m_data.m_deltaVelocities.size();
- multiBodyA->setCompanionId(solverConstraint.m_deltaVelAindex);
- m_data.m_deltaVelocities.resize(m_data.m_deltaVelocities.size() + ndofA);
- }
- else
- {
- btAssert(m_data.m_deltaVelocities.size() >= solverConstraint.m_deltaVelAindex + ndofA);
- }
-
- solverConstraint.m_jacAindex = m_data.m_jacobians.size();
- m_data.m_jacobians.resize(m_data.m_jacobians.size() + ndofA);
- m_data.m_deltaVelocitiesUnitImpulse.resize(m_data.m_deltaVelocitiesUnitImpulse.size() + ndofA);
- btAssert(m_data.m_jacobians.size() == m_data.m_deltaVelocitiesUnitImpulse.size());
-
- btScalar* jac1 = &m_data.m_jacobians[solverConstraint.m_jacAindex];
- multiBodyA->fillContactJacobianMultiDof(solverConstraint.m_linkA, cp.getPositionWorldOnA(), contactNormal, jac1, m_data.scratch_r, m_data.scratch_v, m_data.scratch_m);
- btScalar* delta = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- multiBodyA->calcAccelerationDeltasMultiDof(&m_data.m_jacobians[solverConstraint.m_jacAindex], delta, m_data.scratch_r, m_data.scratch_v);
-
- btVector3 torqueAxis0 = rel_pos1.cross(contactNormal);
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_contactNormal1 = contactNormal;
- }
- else
- {
- btVector3 torqueAxis0 = rel_pos1.cross(contactNormal);
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_contactNormal1 = contactNormal;
- solverConstraint.m_angularComponentA = rb0 ? rb0->getInvInertiaTensorWorld() * torqueAxis0 * rb0->getAngularFactor() : btVector3(0, 0, 0);
- }
-
- if (multiBodyB)
- {
- if (solverConstraint.m_linkB < 0)
- {
- rel_pos2 = pos2 - multiBodyB->getBasePos();
- }
- else
- {
- rel_pos2 = pos2 - multiBodyB->getLink(solverConstraint.m_linkB).m_cachedWorldTransform.getOrigin();
- }
-
- const int ndofB = multiBodyB->getNumDofs() + 6;
-
- solverConstraint.m_deltaVelBindex = multiBodyB->getCompanionId();
- if (solverConstraint.m_deltaVelBindex < 0)
- {
- solverConstraint.m_deltaVelBindex = m_data.m_deltaVelocities.size();
- multiBodyB->setCompanionId(solverConstraint.m_deltaVelBindex);
- m_data.m_deltaVelocities.resize(m_data.m_deltaVelocities.size() + ndofB);
- }
-
- solverConstraint.m_jacBindex = m_data.m_jacobians.size();
-
- m_data.m_jacobians.resize(m_data.m_jacobians.size() + ndofB);
- m_data.m_deltaVelocitiesUnitImpulse.resize(m_data.m_deltaVelocitiesUnitImpulse.size() + ndofB);
- btAssert(m_data.m_jacobians.size() == m_data.m_deltaVelocitiesUnitImpulse.size());
-
- multiBodyB->fillContactJacobianMultiDof(solverConstraint.m_linkB, cp.getPositionWorldOnB(), -contactNormal, &m_data.m_jacobians[solverConstraint.m_jacBindex], m_data.scratch_r, m_data.scratch_v, m_data.scratch_m);
- multiBodyB->calcAccelerationDeltasMultiDof(&m_data.m_jacobians[solverConstraint.m_jacBindex], &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex], m_data.scratch_r, m_data.scratch_v);
-
- btVector3 torqueAxis1 = rel_pos2.cross(contactNormal);
- solverConstraint.m_relpos2CrossNormal = -torqueAxis1;
- solverConstraint.m_contactNormal2 = -contactNormal;
- }
- else
- {
- btVector3 torqueAxis1 = rel_pos2.cross(contactNormal);
- solverConstraint.m_relpos2CrossNormal = -torqueAxis1;
- solverConstraint.m_contactNormal2 = -contactNormal;
-
- solverConstraint.m_angularComponentB = rb1 ? rb1->getInvInertiaTensorWorld() * -torqueAxis1 * rb1->getAngularFactor() : btVector3(0, 0, 0);
- }
-
- {
- btVector3 vec;
- btScalar denom0 = 0.f;
- btScalar denom1 = 0.f;
- btScalar* jacB = 0;
- btScalar* jacA = 0;
- btScalar* lambdaA = 0;
- btScalar* lambdaB = 0;
- int ndofA = 0;
- if (multiBodyA)
- {
- ndofA = multiBodyA->getNumDofs() + 6;
- jacA = &m_data.m_jacobians[solverConstraint.m_jacAindex];
- lambdaA = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- for (int i = 0; i < ndofA; ++i)
- {
- btScalar j = jacA[i];
- btScalar l = lambdaA[i];
- denom0 += j * l;
- }
- }
- else
- {
- if (rb0)
- {
- vec = (solverConstraint.m_angularComponentA).cross(rel_pos1);
- denom0 = rb0->getInvMass() + contactNormal.dot(vec);
- }
- }
- if (multiBodyB)
- {
- const int ndofB = multiBodyB->getNumDofs() + 6;
- jacB = &m_data.m_jacobians[solverConstraint.m_jacBindex];
- lambdaB = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex];
- for (int i = 0; i < ndofB; ++i)
- {
- btScalar j = jacB[i];
- btScalar l = lambdaB[i];
- denom1 += j * l;
- }
- }
- else
- {
- if (rb1)
- {
- vec = (-solverConstraint.m_angularComponentB).cross(rel_pos2);
- denom1 = rb1->getInvMass() + contactNormal.dot(vec);
- }
- }
-
- btScalar d = denom0 + denom1 + cfm;
- if (d > SIMD_EPSILON)
- {
- solverConstraint.m_jacDiagABInv = relaxation / (d);
- }
- else
- {
- //disable the constraint row to handle singularity/redundant constraint
- solverConstraint.m_jacDiagABInv = 0.f;
- }
- }
-
- //compute rhs and remaining solverConstraint fields
-
- btScalar restitution = 0.f;
- btScalar distance = 0;
- if (!isFriction)
- {
- distance = cp.getDistance() + infoGlobal.m_linearSlop;
- }
- else
- {
- if (cp.m_contactPointFlags & BT_CONTACT_FLAG_FRICTION_ANCHOR)
- {
- distance = (cp.getPositionWorldOnA() - cp.getPositionWorldOnB()).dot(contactNormal);
- }
- }
-
- btScalar rel_vel = 0.f;
- int ndofA = 0;
- int ndofB = 0;
- {
- btVector3 vel1, vel2;
- if (multiBodyA)
- {
- ndofA = multiBodyA->getNumDofs() + 6;
- btScalar* jacA = &m_data.m_jacobians[solverConstraint.m_jacAindex];
- for (int i = 0; i < ndofA; ++i)
- rel_vel += multiBodyA->getVelocityVector()[i] * jacA[i];
- }
- else
- {
- if (rb0)
- {
- rel_vel += (rb0->getVelocityInLocalPoint(rel_pos1) +
- (rb0->getTotalTorque() * rb0->getInvInertiaTensorWorld() * infoGlobal.m_timeStep).cross(rel_pos1) +
- rb0->getTotalForce() * rb0->getInvMass() * infoGlobal.m_timeStep)
- .dot(solverConstraint.m_contactNormal1);
- }
- }
- if (multiBodyB)
- {
- ndofB = multiBodyB->getNumDofs() + 6;
- btScalar* jacB = &m_data.m_jacobians[solverConstraint.m_jacBindex];
- for (int i = 0; i < ndofB; ++i)
- rel_vel += multiBodyB->getVelocityVector()[i] * jacB[i];
- }
- else
- {
- if (rb1)
- {
- rel_vel += (rb1->getVelocityInLocalPoint(rel_pos2) +
- (rb1->getTotalTorque() * rb1->getInvInertiaTensorWorld() * infoGlobal.m_timeStep).cross(rel_pos2) +
- rb1->getTotalForce() * rb1->getInvMass() * infoGlobal.m_timeStep)
- .dot(solverConstraint.m_contactNormal2);
- }
- }
-
- solverConstraint.m_friction = cp.m_combinedFriction;
-
- if (!isFriction)
- {
- restitution = restitutionCurve(rel_vel, cp.m_combinedRestitution, infoGlobal.m_restitutionVelocityThreshold);
- if (restitution <= btScalar(0.))
- {
- restitution = 0.f;
- }
- }
- }
-
- {
- btScalar positionalError = 0.f;
- btScalar velocityError = restitution - rel_vel; // * damping; //note for friction restitution is always set to 0 (check above) so it is acutally velocityError = -rel_vel for friction
- if (isFriction)
- {
- positionalError = -distance * erp / infoGlobal.m_timeStep;
- }
- else
- {
- if (distance > 0)
- {
- positionalError = 0;
- velocityError -= distance / infoGlobal.m_timeStep;
- }
- else
- {
- positionalError = -distance * erp / infoGlobal.m_timeStep;
- }
- }
-
- btScalar penetrationImpulse = positionalError * solverConstraint.m_jacDiagABInv;
- btScalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
-
- if (!isFriction)
- {
- // if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- //combine position and velocity into rhs
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_rhsPenetration = 0.f;
- }
- /*else
- {
- //split position and velocity into rhs and m_rhsPenetration
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_rhsPenetration = penetrationImpulse;
- }
- */
- solverConstraint.m_lowerLimit = 0;
- solverConstraint.m_upperLimit = 1e10f;
- }
- else
- {
- solverConstraint.m_rhs = penetrationImpulse + velocityImpulse;
- solverConstraint.m_rhsPenetration = 0.f;
- solverConstraint.m_lowerLimit = -solverConstraint.m_friction;
- solverConstraint.m_upperLimit = solverConstraint.m_friction;
- }
-
- solverConstraint.m_cfm = cfm * solverConstraint.m_jacDiagABInv;
- }
-
- if (infoGlobal.m_solverMode & SOLVER_USE_ARTICULATED_WARMSTARTING)
- {
- if (btFabs(cp.m_prevRHS) > 1e-5 && cp.m_prevRHS < 2* solverConstraint.m_rhs && solverConstraint.m_rhs < 2*cp.m_prevRHS)
- {
- solverConstraint.m_appliedImpulse = isFriction ? 0 : cp.m_appliedImpulse / cp.m_prevRHS * solverConstraint.m_rhs * infoGlobal.m_articulatedWarmstartingFactor;
- if (solverConstraint.m_appliedImpulse < 0)
- solverConstraint.m_appliedImpulse = 0;
- }
- else
- {
- solverConstraint.m_appliedImpulse = 0.f;
- }
-
- if (solverConstraint.m_appliedImpulse)
- {
- if (multiBodyA)
- {
- btScalar impulse = solverConstraint.m_appliedImpulse;
- btScalar* deltaV = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- multiBodyA->applyDeltaVeeMultiDof2(deltaV, impulse);
-
- applyDeltaVee(deltaV, impulse, solverConstraint.m_deltaVelAindex, ndofA);
- }
- else
- {
- if (rb0)
- bodyA->internalApplyImpulse(solverConstraint.m_contactNormal1 * bodyA->internalGetInvMass() * rb0->getLinearFactor(), solverConstraint.m_angularComponentA, solverConstraint.m_appliedImpulse);
- }
- if (multiBodyB)
- {
- btScalar impulse = solverConstraint.m_appliedImpulse;
- btScalar* deltaV = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex];
- multiBodyB->applyDeltaVeeMultiDof2(deltaV, impulse);
- applyDeltaVee(deltaV, impulse, solverConstraint.m_deltaVelBindex, ndofB);
- }
- else
- {
- if (rb1)
- bodyB->internalApplyImpulse(-solverConstraint.m_contactNormal2 * bodyB->internalGetInvMass() * rb1->getLinearFactor(), -solverConstraint.m_angularComponentB, -(btScalar)solverConstraint.m_appliedImpulse);
- }
- }
- }
- else
- {
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
- }
-}
-
-void btMultiBodyConstraintSolver::setupMultiBodyTorsionalFrictionConstraint(btMultiBodySolverConstraint& solverConstraint,
- const btVector3& constraintNormal,
- btManifoldPoint& cp,
- btScalar combinedTorsionalFriction,
- const btContactSolverInfo& infoGlobal,
- btScalar& relaxation,
- bool isFriction, btScalar desiredVelocity, btScalar cfmSlip)
-{
- BT_PROFILE("setupMultiBodyRollingFrictionConstraint");
- btVector3 rel_pos1;
- btVector3 rel_pos2;
-
- btMultiBody* multiBodyA = solverConstraint.m_multiBodyA;
- btMultiBody* multiBodyB = solverConstraint.m_multiBodyB;
-
- const btVector3& pos1 = cp.getPositionWorldOnA();
- const btVector3& pos2 = cp.getPositionWorldOnB();
-
- btSolverBody* bodyA = multiBodyA ? 0 : &m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA];
- btSolverBody* bodyB = multiBodyB ? 0 : &m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB];
-
- btRigidBody* rb0 = multiBodyA ? 0 : bodyA->m_originalBody;
- btRigidBody* rb1 = multiBodyB ? 0 : bodyB->m_originalBody;
-
- if (bodyA)
- rel_pos1 = pos1 - bodyA->getWorldTransform().getOrigin();
- if (bodyB)
- rel_pos2 = pos2 - bodyB->getWorldTransform().getOrigin();
-
- relaxation = infoGlobal.m_sor;
-
- // btScalar invTimeStep = btScalar(1)/infoGlobal.m_timeStep;
-
- if (multiBodyA)
- {
- if (solverConstraint.m_linkA < 0)
- {
- rel_pos1 = pos1 - multiBodyA->getBasePos();
- }
- else
- {
- rel_pos1 = pos1 - multiBodyA->getLink(solverConstraint.m_linkA).m_cachedWorldTransform.getOrigin();
- }
- const int ndofA = multiBodyA->getNumDofs() + 6;
-
- solverConstraint.m_deltaVelAindex = multiBodyA->getCompanionId();
-
- if (solverConstraint.m_deltaVelAindex < 0)
- {
- solverConstraint.m_deltaVelAindex = m_data.m_deltaVelocities.size();
- multiBodyA->setCompanionId(solverConstraint.m_deltaVelAindex);
- m_data.m_deltaVelocities.resize(m_data.m_deltaVelocities.size() + ndofA);
- }
- else
- {
- btAssert(m_data.m_deltaVelocities.size() >= solverConstraint.m_deltaVelAindex + ndofA);
- }
-
- solverConstraint.m_jacAindex = m_data.m_jacobians.size();
- m_data.m_jacobians.resize(m_data.m_jacobians.size() + ndofA);
- m_data.m_deltaVelocitiesUnitImpulse.resize(m_data.m_deltaVelocitiesUnitImpulse.size() + ndofA);
- btAssert(m_data.m_jacobians.size() == m_data.m_deltaVelocitiesUnitImpulse.size());
-
- btScalar* jac1 = &m_data.m_jacobians[solverConstraint.m_jacAindex];
- multiBodyA->fillConstraintJacobianMultiDof(solverConstraint.m_linkA, cp.getPositionWorldOnA(), constraintNormal, btVector3(0, 0, 0), jac1, m_data.scratch_r, m_data.scratch_v, m_data.scratch_m);
- btScalar* delta = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- multiBodyA->calcAccelerationDeltasMultiDof(&m_data.m_jacobians[solverConstraint.m_jacAindex], delta, m_data.scratch_r, m_data.scratch_v);
-
- btVector3 torqueAxis0 = constraintNormal;
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_contactNormal1 = btVector3(0, 0, 0);
- }
- else
- {
- btVector3 torqueAxis0 = constraintNormal;
- solverConstraint.m_relpos1CrossNormal = torqueAxis0;
- solverConstraint.m_contactNormal1 = btVector3(0, 0, 0);
- solverConstraint.m_angularComponentA = rb0 ? rb0->getInvInertiaTensorWorld() * torqueAxis0 * rb0->getAngularFactor() : btVector3(0, 0, 0);
- }
-
- if (multiBodyB)
- {
- if (solverConstraint.m_linkB < 0)
- {
- rel_pos2 = pos2 - multiBodyB->getBasePos();
- }
- else
- {
- rel_pos2 = pos2 - multiBodyB->getLink(solverConstraint.m_linkB).m_cachedWorldTransform.getOrigin();
- }
-
- const int ndofB = multiBodyB->getNumDofs() + 6;
-
- solverConstraint.m_deltaVelBindex = multiBodyB->getCompanionId();
- if (solverConstraint.m_deltaVelBindex < 0)
- {
- solverConstraint.m_deltaVelBindex = m_data.m_deltaVelocities.size();
- multiBodyB->setCompanionId(solverConstraint.m_deltaVelBindex);
- m_data.m_deltaVelocities.resize(m_data.m_deltaVelocities.size() + ndofB);
- }
-
- solverConstraint.m_jacBindex = m_data.m_jacobians.size();
-
- m_data.m_jacobians.resize(m_data.m_jacobians.size() + ndofB);
- m_data.m_deltaVelocitiesUnitImpulse.resize(m_data.m_deltaVelocitiesUnitImpulse.size() + ndofB);
- btAssert(m_data.m_jacobians.size() == m_data.m_deltaVelocitiesUnitImpulse.size());
-
- multiBodyB->fillConstraintJacobianMultiDof(solverConstraint.m_linkB, cp.getPositionWorldOnB(), -constraintNormal, btVector3(0, 0, 0), &m_data.m_jacobians[solverConstraint.m_jacBindex], m_data.scratch_r, m_data.scratch_v, m_data.scratch_m);
- multiBodyB->calcAccelerationDeltasMultiDof(&m_data.m_jacobians[solverConstraint.m_jacBindex], &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex], m_data.scratch_r, m_data.scratch_v);
-
- btVector3 torqueAxis1 = -constraintNormal;
- solverConstraint.m_relpos2CrossNormal = torqueAxis1;
- solverConstraint.m_contactNormal2 = -btVector3(0, 0, 0);
- }
- else
- {
- btVector3 torqueAxis1 = -constraintNormal;
- solverConstraint.m_relpos2CrossNormal = torqueAxis1;
- solverConstraint.m_contactNormal2 = -btVector3(0, 0, 0);
-
- solverConstraint.m_angularComponentB = rb1 ? rb1->getInvInertiaTensorWorld() * torqueAxis1 * rb1->getAngularFactor() : btVector3(0, 0, 0);
- }
-
- {
- btScalar denom0 = 0.f;
- btScalar denom1 = 0.f;
- btScalar* jacB = 0;
- btScalar* jacA = 0;
- btScalar* lambdaA = 0;
- btScalar* lambdaB = 0;
- int ndofA = 0;
- if (multiBodyA)
- {
- ndofA = multiBodyA->getNumDofs() + 6;
- jacA = &m_data.m_jacobians[solverConstraint.m_jacAindex];
- lambdaA = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- for (int i = 0; i < ndofA; ++i)
- {
- btScalar j = jacA[i];
- btScalar l = lambdaA[i];
- denom0 += j * l;
- }
- }
- else
- {
- if (rb0)
- {
- btVector3 iMJaA = rb0 ? rb0->getInvInertiaTensorWorld() * solverConstraint.m_relpos1CrossNormal : btVector3(0, 0, 0);
- denom0 = iMJaA.dot(solverConstraint.m_relpos1CrossNormal);
- }
- }
- if (multiBodyB)
- {
- const int ndofB = multiBodyB->getNumDofs() + 6;
- jacB = &m_data.m_jacobians[solverConstraint.m_jacBindex];
- lambdaB = &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex];
- for (int i = 0; i < ndofB; ++i)
- {
- btScalar j = jacB[i];
- btScalar l = lambdaB[i];
- denom1 += j * l;
- }
- }
- else
- {
- if (rb1)
- {
- btVector3 iMJaB = rb1 ? rb1->getInvInertiaTensorWorld() * solverConstraint.m_relpos2CrossNormal : btVector3(0, 0, 0);
- denom1 = iMJaB.dot(solverConstraint.m_relpos2CrossNormal);
- }
- }
-
- btScalar d = denom0 + denom1 + infoGlobal.m_globalCfm;
- if (d > SIMD_EPSILON)
- {
- solverConstraint.m_jacDiagABInv = relaxation / (d);
- }
- else
- {
- //disable the constraint row to handle singularity/redundant constraint
- solverConstraint.m_jacDiagABInv = 0.f;
- }
- }
-
- //compute rhs and remaining solverConstraint fields
-
- btScalar restitution = 0.f;
- btScalar penetration = isFriction ? 0 : cp.getDistance();
-
- btScalar rel_vel = 0.f;
- int ndofA = 0;
- int ndofB = 0;
- {
- btVector3 vel1, vel2;
- if (multiBodyA)
- {
- ndofA = multiBodyA->getNumDofs() + 6;
- btScalar* jacA = &m_data.m_jacobians[solverConstraint.m_jacAindex];
- for (int i = 0; i < ndofA; ++i)
- rel_vel += multiBodyA->getVelocityVector()[i] * jacA[i];
- }
- else
- {
- if (rb0)
- {
- btSolverBody* solverBodyA = &m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdA];
- rel_vel += solverConstraint.m_contactNormal1.dot(rb0 ? solverBodyA->m_linearVelocity + solverBodyA->m_externalForceImpulse : btVector3(0, 0, 0)) + solverConstraint.m_relpos1CrossNormal.dot(rb0 ? solverBodyA->m_angularVelocity : btVector3(0, 0, 0));
- }
- }
- if (multiBodyB)
- {
- ndofB = multiBodyB->getNumDofs() + 6;
- btScalar* jacB = &m_data.m_jacobians[solverConstraint.m_jacBindex];
- for (int i = 0; i < ndofB; ++i)
- rel_vel += multiBodyB->getVelocityVector()[i] * jacB[i];
- }
- else
- {
- if (rb1)
- {
- btSolverBody* solverBodyB = &m_tmpSolverBodyPool[solverConstraint.m_solverBodyIdB];
- rel_vel += solverConstraint.m_contactNormal2.dot(rb1 ? solverBodyB->m_linearVelocity + solverBodyB->m_externalForceImpulse : btVector3(0, 0, 0)) + solverConstraint.m_relpos2CrossNormal.dot(rb1 ? solverBodyB->m_angularVelocity : btVector3(0, 0, 0));
- }
- }
-
- solverConstraint.m_friction = combinedTorsionalFriction;
-
- if (!isFriction)
- {
- restitution = restitutionCurve(rel_vel, cp.m_combinedRestitution, infoGlobal.m_restitutionVelocityThreshold);
- if (restitution <= btScalar(0.))
- {
- restitution = 0.f;
- }
- }
- }
-
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
-
- {
- btScalar velocityError = 0 - rel_vel; // * damping; //note for friction restitution is always set to 0 (check above) so it is acutally velocityError = -rel_vel for friction
-
- btScalar velocityImpulse = velocityError * solverConstraint.m_jacDiagABInv;
-
- solverConstraint.m_rhs = velocityImpulse;
- solverConstraint.m_rhsPenetration = 0.f;
- solverConstraint.m_lowerLimit = -solverConstraint.m_friction;
- solverConstraint.m_upperLimit = solverConstraint.m_friction;
-
- solverConstraint.m_cfm = infoGlobal.m_globalCfm * solverConstraint.m_jacDiagABInv;
- }
-}
-
-btMultiBodySolverConstraint& btMultiBodyConstraintSolver::addMultiBodyFrictionConstraint(const btVector3& normalAxis, const btScalar& appliedImpulse, btPersistentManifold* manifold, int frictionIndex, btManifoldPoint& cp, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity, btScalar cfmSlip)
-{
- BT_PROFILE("addMultiBodyFrictionConstraint");
- btMultiBodySolverConstraint& solverConstraint = m_multiBodyFrictionContactConstraints.expandNonInitializing();
- solverConstraint.m_orgConstraint = 0;
- solverConstraint.m_orgDofIndex = -1;
-
- solverConstraint.m_frictionIndex = frictionIndex;
- bool isFriction = true;
-
- const btMultiBodyLinkCollider* fcA = btMultiBodyLinkCollider::upcast(manifold->getBody0());
- const btMultiBodyLinkCollider* fcB = btMultiBodyLinkCollider::upcast(manifold->getBody1());
-
- btMultiBody* mbA = fcA ? fcA->m_multiBody : 0;
- btMultiBody* mbB = fcB ? fcB->m_multiBody : 0;
-
- int solverBodyIdA = mbA ? -1 : getOrInitSolverBody(*colObj0, infoGlobal.m_timeStep);
- int solverBodyIdB = mbB ? -1 : getOrInitSolverBody(*colObj1, infoGlobal.m_timeStep);
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
- solverConstraint.m_multiBodyA = mbA;
- if (mbA)
- solverConstraint.m_linkA = fcA->m_link;
-
- solverConstraint.m_multiBodyB = mbB;
- if (mbB)
- solverConstraint.m_linkB = fcB->m_link;
-
- solverConstraint.m_originalContactPoint = &cp;
-
- setupMultiBodyContactConstraint(solverConstraint, normalAxis, 0, cp, infoGlobal, relaxation, isFriction, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-
-btMultiBodySolverConstraint& btMultiBodyConstraintSolver::addMultiBodyTorsionalFrictionConstraint(const btVector3& normalAxis, btPersistentManifold* manifold, int frictionIndex, btManifoldPoint& cp,
- btScalar combinedTorsionalFriction,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity, btScalar cfmSlip)
-{
- BT_PROFILE("addMultiBodyRollingFrictionConstraint");
-
- bool useTorsionalAndConeFriction = (infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS && ((infoGlobal.m_solverMode & SOLVER_DISABLE_IMPLICIT_CONE_FRICTION) == 0));
-
- btMultiBodySolverConstraint& solverConstraint = useTorsionalAndConeFriction ? m_multiBodyTorsionalFrictionContactConstraints.expandNonInitializing() : m_multiBodyFrictionContactConstraints.expandNonInitializing();
- solverConstraint.m_orgConstraint = 0;
- solverConstraint.m_orgDofIndex = -1;
-
- solverConstraint.m_frictionIndex = frictionIndex;
- bool isFriction = true;
-
- const btMultiBodyLinkCollider* fcA = btMultiBodyLinkCollider::upcast(manifold->getBody0());
- const btMultiBodyLinkCollider* fcB = btMultiBodyLinkCollider::upcast(manifold->getBody1());
-
- btMultiBody* mbA = fcA ? fcA->m_multiBody : 0;
- btMultiBody* mbB = fcB ? fcB->m_multiBody : 0;
-
- int solverBodyIdA = mbA ? -1 : getOrInitSolverBody(*colObj0, infoGlobal.m_timeStep);
- int solverBodyIdB = mbB ? -1 : getOrInitSolverBody(*colObj1, infoGlobal.m_timeStep);
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
- solverConstraint.m_multiBodyA = mbA;
- if (mbA)
- solverConstraint.m_linkA = fcA->m_link;
-
- solverConstraint.m_multiBodyB = mbB;
- if (mbB)
- solverConstraint.m_linkB = fcB->m_link;
-
- solverConstraint.m_originalContactPoint = &cp;
-
- setupMultiBodyTorsionalFrictionConstraint(solverConstraint, normalAxis, cp, combinedTorsionalFriction, infoGlobal, relaxation, isFriction, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-
-btMultiBodySolverConstraint& btMultiBodyConstraintSolver::addMultiBodySpinningFrictionConstraint(const btVector3& normalAxis, btPersistentManifold* manifold, int frictionIndex, btManifoldPoint& cp,
- btScalar combinedTorsionalFriction,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity, btScalar cfmSlip)
-{
- BT_PROFILE("addMultiBodyRollingFrictionConstraint");
-
- btMultiBodySolverConstraint& solverConstraint = m_multiBodySpinningFrictionContactConstraints.expandNonInitializing();
- solverConstraint.m_orgConstraint = 0;
- solverConstraint.m_orgDofIndex = -1;
-
- solverConstraint.m_frictionIndex = frictionIndex;
- bool isFriction = true;
-
- const btMultiBodyLinkCollider* fcA = btMultiBodyLinkCollider::upcast(manifold->getBody0());
- const btMultiBodyLinkCollider* fcB = btMultiBodyLinkCollider::upcast(manifold->getBody1());
-
- btMultiBody* mbA = fcA ? fcA->m_multiBody : 0;
- btMultiBody* mbB = fcB ? fcB->m_multiBody : 0;
-
- int solverBodyIdA = mbA ? -1 : getOrInitSolverBody(*colObj0, infoGlobal.m_timeStep);
- int solverBodyIdB = mbB ? -1 : getOrInitSolverBody(*colObj1, infoGlobal.m_timeStep);
-
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
- solverConstraint.m_multiBodyA = mbA;
- if (mbA)
- solverConstraint.m_linkA = fcA->m_link;
-
- solverConstraint.m_multiBodyB = mbB;
- if (mbB)
- solverConstraint.m_linkB = fcB->m_link;
-
- solverConstraint.m_originalContactPoint = &cp;
-
- setupMultiBodyTorsionalFrictionConstraint(solverConstraint, normalAxis, cp, combinedTorsionalFriction, infoGlobal, relaxation, isFriction, desiredVelocity, cfmSlip);
- return solverConstraint;
-}
-void btMultiBodyConstraintSolver::convertMultiBodyContact(btPersistentManifold* manifold, const btContactSolverInfo& infoGlobal)
-{
- const btMultiBodyLinkCollider* fcA = btMultiBodyLinkCollider::upcast(manifold->getBody0());
- const btMultiBodyLinkCollider* fcB = btMultiBodyLinkCollider::upcast(manifold->getBody1());
-
- btMultiBody* mbA = fcA ? fcA->m_multiBody : 0;
- btMultiBody* mbB = fcB ? fcB->m_multiBody : 0;
-
- btCollisionObject *colObj0 = 0, *colObj1 = 0;
-
- colObj0 = (btCollisionObject*)manifold->getBody0();
- colObj1 = (btCollisionObject*)manifold->getBody1();
-
- int solverBodyIdA = mbA ? -1 : getOrInitSolverBody(*colObj0, infoGlobal.m_timeStep);
- int solverBodyIdB = mbB ? -1 : getOrInitSolverBody(*colObj1, infoGlobal.m_timeStep);
-
- // btSolverBody* solverBodyA = mbA ? 0 : &m_tmpSolverBodyPool[solverBodyIdA];
- // btSolverBody* solverBodyB = mbB ? 0 : &m_tmpSolverBodyPool[solverBodyIdB];
-
- ///avoid collision response between two static objects
- // if (!solverBodyA || (solverBodyA->m_invMass.isZero() && (!solverBodyB || solverBodyB->m_invMass.isZero())))
- // return;
-
- //only a single rollingFriction per manifold
- int rollingFriction = 4;
-
- for (int j = 0; j < manifold->getNumContacts(); j++)
- {
- btManifoldPoint& cp = manifold->getContactPoint(j);
-
- if (cp.getDistance() <= manifold->getContactProcessingThreshold())
- {
- btScalar relaxation;
-
- int frictionIndex = m_multiBodyNormalContactConstraints.size();
-
- btMultiBodySolverConstraint& solverConstraint = m_multiBodyNormalContactConstraints.expandNonInitializing();
-
- // btRigidBody* rb0 = btRigidBody::upcast(colObj0);
- // btRigidBody* rb1 = btRigidBody::upcast(colObj1);
- solverConstraint.m_orgConstraint = 0;
- solverConstraint.m_orgDofIndex = -1;
- solverConstraint.m_solverBodyIdA = solverBodyIdA;
- solverConstraint.m_solverBodyIdB = solverBodyIdB;
- solverConstraint.m_multiBodyA = mbA;
- if (mbA)
- solverConstraint.m_linkA = fcA->m_link;
-
- solverConstraint.m_multiBodyB = mbB;
- if (mbB)
- solverConstraint.m_linkB = fcB->m_link;
-
- solverConstraint.m_originalContactPoint = &cp;
-
- bool isFriction = false;
- setupMultiBodyContactConstraint(solverConstraint, cp.m_normalWorldOnB, cp.m_appliedImpulse, cp, infoGlobal, relaxation, isFriction);
-
- // const btVector3& pos1 = cp.getPositionWorldOnA();
- // const btVector3& pos2 = cp.getPositionWorldOnB();
-
- /////setup the friction constraints
-#define ENABLE_FRICTION
-#ifdef ENABLE_FRICTION
- solverConstraint.m_frictionIndex = m_multiBodyFrictionContactConstraints.size();
-
- ///Bullet has several options to set the friction directions
- ///By default, each contact has only a single friction direction that is recomputed automatically every frame
- ///based on the relative linear velocity.
- ///If the relative velocity is zero, it will automatically compute a friction direction.
-
- ///You can also enable two friction directions, using the SOLVER_USE_2_FRICTION_DIRECTIONS.
- ///In that case, the second friction direction will be orthogonal to both contact normal and first friction direction.
- ///
- ///If you choose SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION, then the friction will be independent from the relative projected velocity.
- ///
- ///The user can manually override the friction directions for certain contacts using a contact callback,
- ///and set the cp.m_lateralFrictionInitialized to true
- ///In that case, you can set the target relative motion in each friction direction (cp.m_contactMotion1 and cp.m_contactMotion2)
- ///this will give a conveyor belt effect
- ///
-
- btPlaneSpace1(cp.m_normalWorldOnB, cp.m_lateralFrictionDir1, cp.m_lateralFrictionDir2);
- cp.m_lateralFrictionDir1.normalize();
- cp.m_lateralFrictionDir2.normalize();
-
- if (rollingFriction > 0)
- {
- if (cp.m_combinedSpinningFriction > 0)
- {
- addMultiBodySpinningFrictionConstraint(cp.m_normalWorldOnB, manifold, frictionIndex, cp, cp.m_combinedSpinningFriction, colObj0, colObj1, relaxation, infoGlobal);
- }
- if (cp.m_combinedRollingFriction > 0)
- {
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_ROLLING_FRICTION);
-
- addMultiBodyTorsionalFrictionConstraint(cp.m_lateralFrictionDir1, manifold, frictionIndex, cp, cp.m_combinedRollingFriction, colObj0, colObj1, relaxation, infoGlobal);
- addMultiBodyTorsionalFrictionConstraint(cp.m_lateralFrictionDir2, manifold, frictionIndex, cp, cp.m_combinedRollingFriction, colObj0, colObj1, relaxation, infoGlobal);
- }
- rollingFriction--;
- }
- if (!(infoGlobal.m_solverMode & SOLVER_ENABLE_FRICTION_DIRECTION_CACHING) || !(cp.m_contactPointFlags & BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED))
- { /*
- cp.m_lateralFrictionDir1 = vel - cp.m_normalWorldOnB * rel_vel;
- btScalar lat_rel_vel = cp.m_lateralFrictionDir1.length2();
- if (!(infoGlobal.m_solverMode & SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION) && lat_rel_vel > SIMD_EPSILON)
- {
- cp.m_lateralFrictionDir1 *= 1.f/btSqrt(lat_rel_vel);
- if((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- cp.m_lateralFrictionDir2 = cp.m_lateralFrictionDir1.cross(cp.m_normalWorldOnB);
- cp.m_lateralFrictionDir2.normalize();//??
- applyAnisotropicFriction(colObj0,cp.m_lateralFrictionDir2,btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1,cp.m_lateralFrictionDir2,btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addMultiBodyFrictionConstraint(cp.m_lateralFrictionDir2,solverBodyIdA,solverBodyIdB,frictionIndex,cp,rel_pos1,rel_pos2,colObj0,colObj1, relaxation);
-
- }
-
- applyAnisotropicFriction(colObj0,cp.m_lateralFrictionDir1,btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1,cp.m_lateralFrictionDir1,btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addMultiBodyFrictionConstraint(cp.m_lateralFrictionDir1,solverBodyIdA,solverBodyIdB,frictionIndex,cp,rel_pos1,rel_pos2,colObj0,colObj1, relaxation);
-
- } else
- */
- {
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir1, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addMultiBodyFrictionConstraint(cp.m_lateralFrictionDir1, cp.m_appliedImpulseLateral1, manifold, frictionIndex, cp, colObj0, colObj1, relaxation, infoGlobal);
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- applyAnisotropicFriction(colObj0, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- applyAnisotropicFriction(colObj1, cp.m_lateralFrictionDir2, btCollisionObject::CF_ANISOTROPIC_FRICTION);
- addMultiBodyFrictionConstraint(cp.m_lateralFrictionDir2, cp.m_appliedImpulseLateral2, manifold, frictionIndex, cp, colObj0, colObj1, relaxation, infoGlobal);
- }
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS) && (infoGlobal.m_solverMode & SOLVER_DISABLE_VELOCITY_DEPENDENT_FRICTION_DIRECTION))
- {
- cp.m_contactPointFlags |= BT_CONTACT_FLAG_LATERAL_FRICTION_INITIALIZED;
- }
- }
- }
- else
- {
- addMultiBodyFrictionConstraint(cp.m_lateralFrictionDir1, cp.m_appliedImpulseLateral1, manifold, frictionIndex, cp, colObj0, colObj1, relaxation, infoGlobal, cp.m_contactMotion1, cp.m_frictionCFM);
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- addMultiBodyFrictionConstraint(cp.m_lateralFrictionDir2, cp.m_appliedImpulseLateral2, manifold, frictionIndex, cp, colObj0, colObj1, relaxation, infoGlobal, cp.m_contactMotion2, cp.m_frictionCFM);
- solverConstraint.m_appliedImpulse = 0.f;
- solverConstraint.m_appliedPushImpulse = 0.f;
- }
-
-#endif //ENABLE_FRICTION
- }
- else
- {
- // Reset quantities related to warmstart as 0.
- cp.m_appliedImpulse = 0;
- cp.m_prevRHS = 0;
- }
- }
-}
-
-void btMultiBodyConstraintSolver::convertContacts(btPersistentManifold** manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal)
-{
- for (int i = 0; i < numManifolds; i++)
- {
- btPersistentManifold* manifold = manifoldPtr[i];
- const btMultiBodyLinkCollider* fcA = btMultiBodyLinkCollider::upcast(manifold->getBody0());
- const btMultiBodyLinkCollider* fcB = btMultiBodyLinkCollider::upcast(manifold->getBody1());
- if (!fcA && !fcB)
- {
- //the contact doesn't involve any Featherstone btMultiBody, so deal with the regular btRigidBody/btCollisionObject case
- convertContact(manifold, infoGlobal);
- }
- else
- {
- convertMultiBodyContact(manifold, infoGlobal);
- }
- }
-
- //also convert the multibody constraints, if any
-
- for (int i = 0; i < m_tmpNumMultiBodyConstraints; i++)
- {
- btMultiBodyConstraint* c = m_tmpMultiBodyConstraints[i];
- m_data.m_solverBodyPool = &m_tmpSolverBodyPool;
- m_data.m_fixedBodyId = m_fixedBodyId;
-
- c->createConstraintRows(m_multiBodyNonContactConstraints, m_data, infoGlobal);
- }
-
- // Warmstart for noncontact constraints
- if (infoGlobal.m_solverMode & SOLVER_USE_ARTICULATED_WARMSTARTING)
- {
- for (int i = 0; i < m_multiBodyNonContactConstraints.size(); i++)
- {
- btMultiBodySolverConstraint& solverConstraint =
- m_multiBodyNonContactConstraints[i];
- solverConstraint.m_appliedImpulse =
- solverConstraint.m_orgConstraint->getAppliedImpulse(solverConstraint.m_orgDofIndex) *
- infoGlobal.m_articulatedWarmstartingFactor;
-
- btMultiBody* multiBodyA = solverConstraint.m_multiBodyA;
- btMultiBody* multiBodyB = solverConstraint.m_multiBodyB;
- if (solverConstraint.m_appliedImpulse)
- {
- if (multiBodyA)
- {
- int ndofA = multiBodyA->getNumDofs() + 6;
- btScalar* deltaV =
- &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacAindex];
- btScalar impulse = solverConstraint.m_appliedImpulse;
- multiBodyA->applyDeltaVeeMultiDof2(deltaV, impulse);
- applyDeltaVee(deltaV, impulse, solverConstraint.m_deltaVelAindex, ndofA);
- }
- if (multiBodyB)
- {
- int ndofB = multiBodyB->getNumDofs() + 6;
- btScalar* deltaV =
- &m_data.m_deltaVelocitiesUnitImpulse[solverConstraint.m_jacBindex];
- btScalar impulse = solverConstraint.m_appliedImpulse;
- multiBodyB->applyDeltaVeeMultiDof2(deltaV, impulse);
- applyDeltaVee(deltaV, impulse, solverConstraint.m_deltaVelBindex, ndofB);
- }
- }
- }
- }
- else
- {
- for (int i = 0; i < m_multiBodyNonContactConstraints.size(); i++)
- {
- btMultiBodySolverConstraint& solverConstraint = m_multiBodyNonContactConstraints[i];
- solverConstraint.m_appliedImpulse = 0;
- }
- }
-}
-
-btScalar btMultiBodyConstraintSolver::solveGroup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher)
-{
- //printf("btMultiBodyConstraintSolver::solveGroup: numBodies=%d, numConstraints=%d\n", numBodies, numConstraints);
- return btSequentialImpulseConstraintSolver::solveGroup(bodies, numBodies, manifold, numManifolds, constraints, numConstraints, info, debugDrawer, dispatcher);
-}
-
-#if 0
-static void applyJointFeedback(btMultiBodyJacobianData& data, const btMultiBodySolverConstraint& solverConstraint, int jacIndex, btMultiBody* mb, btScalar appliedImpulse)
-{
- if (appliedImpulse!=0 && mb->internalNeedsJointFeedback())
- {
- //todo: get rid of those temporary memory allocations for the joint feedback
- btAlignedObjectArray<btScalar> forceVector;
- int numDofsPlusBase = 6+mb->getNumDofs();
- forceVector.resize(numDofsPlusBase);
- for (int i=0;i<numDofsPlusBase;i++)
- {
- forceVector[i] = data.m_jacobians[jacIndex+i]*appliedImpulse;
- }
- btAlignedObjectArray<btScalar> output;
- output.resize(numDofsPlusBase);
- bool applyJointFeedback = true;
- mb->calcAccelerationDeltasMultiDof(&forceVector[0],&output[0],data.scratch_r,data.scratch_v,applyJointFeedback);
- }
-}
-#endif
-
-void btMultiBodyConstraintSolver::writeBackSolverBodyToMultiBody(btMultiBodySolverConstraint& c, btScalar deltaTime)
-{
-#if 1
-
- //bod->addBaseForce(m_gravity * bod->getBaseMass());
- //bod->addLinkForce(j, m_gravity * bod->getLinkMass(j));
-
- if (c.m_orgConstraint)
- {
- c.m_orgConstraint->internalSetAppliedImpulse(c.m_orgDofIndex, c.m_appliedImpulse);
- }
-
- if (c.m_multiBodyA)
- {
- c.m_multiBodyA->setCompanionId(-1);
- btVector3 force = c.m_contactNormal1 * (c.m_appliedImpulse / deltaTime);
- btVector3 torque = c.m_relpos1CrossNormal * (c.m_appliedImpulse / deltaTime);
- if (c.m_linkA < 0)
- {
- c.m_multiBodyA->addBaseConstraintForce(force);
- c.m_multiBodyA->addBaseConstraintTorque(torque);
- }
- else
- {
- c.m_multiBodyA->addLinkConstraintForce(c.m_linkA, force);
- //b3Printf("force = %f,%f,%f\n",force[0],force[1],force[2]);//[0],torque[1],torque[2]);
- c.m_multiBodyA->addLinkConstraintTorque(c.m_linkA, torque);
- }
- }
-
- if (c.m_multiBodyB)
- {
- {
- c.m_multiBodyB->setCompanionId(-1);
- btVector3 force = c.m_contactNormal2 * (c.m_appliedImpulse / deltaTime);
- btVector3 torque = c.m_relpos2CrossNormal * (c.m_appliedImpulse / deltaTime);
- if (c.m_linkB < 0)
- {
- c.m_multiBodyB->addBaseConstraintForce(force);
- c.m_multiBodyB->addBaseConstraintTorque(torque);
- }
- else
- {
- {
- c.m_multiBodyB->addLinkConstraintForce(c.m_linkB, force);
- //b3Printf("t = %f,%f,%f\n",force[0],force[1],force[2]);//[0],torque[1],torque[2]);
- c.m_multiBodyB->addLinkConstraintTorque(c.m_linkB, torque);
- }
- }
- }
- }
-#endif
-
-#ifndef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
-
- if (c.m_multiBodyA)
- {
- c.m_multiBodyA->applyDeltaVeeMultiDof(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacAindex], c.m_appliedImpulse);
- }
-
- if (c.m_multiBodyB)
- {
- c.m_multiBodyB->applyDeltaVeeMultiDof(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacBindex], c.m_appliedImpulse);
- }
-#endif
-}
-
-btScalar btMultiBodyConstraintSolver::solveGroupCacheFriendlyFinish(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("btMultiBodyConstraintSolver::solveGroupCacheFriendlyFinish");
- int numPoolConstraints = m_multiBodyNormalContactConstraints.size();
-
- //write back the delta v to the multi bodies, either as applied impulse (direct velocity change)
- //or as applied force, so we can measure the joint reaction forces easier
- for (int i = 0; i < numPoolConstraints; i++)
- {
- btMultiBodySolverConstraint& solverConstraint = m_multiBodyNormalContactConstraints[i];
- writeBackSolverBodyToMultiBody(solverConstraint, infoGlobal.m_timeStep);
-
- writeBackSolverBodyToMultiBody(m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex], infoGlobal.m_timeStep);
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- writeBackSolverBodyToMultiBody(m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex + 1], infoGlobal.m_timeStep);
- }
- }
-
- for (int i = 0; i < m_multiBodyNonContactConstraints.size(); i++)
- {
- btMultiBodySolverConstraint& solverConstraint = m_multiBodyNonContactConstraints[i];
- writeBackSolverBodyToMultiBody(solverConstraint, infoGlobal.m_timeStep);
- }
-
-
- {
- BT_PROFILE("warm starting write back");
- for (int j = 0; j < numPoolConstraints; j++)
- {
- const btMultiBodySolverConstraint& solverConstraint = m_multiBodyNormalContactConstraints[j];
- btManifoldPoint* pt = (btManifoldPoint*)solverConstraint.m_originalContactPoint;
- btAssert(pt);
- pt->m_appliedImpulse = solverConstraint.m_appliedImpulse;
- pt->m_prevRHS = solverConstraint.m_rhs;
- pt->m_appliedImpulseLateral1 = m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_appliedImpulse;
-
- //printf("pt->m_appliedImpulseLateral1 = %f\n", pt->m_appliedImpulseLateral1);
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- pt->m_appliedImpulseLateral2 = m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex + 1].m_appliedImpulse;
- } else
- {
- pt->m_appliedImpulseLateral2 = 0;
- }
- }
- }
-
-#if 0
- //multibody joint feedback
- {
- BT_PROFILE("multi body joint feedback");
- for (int j=0;j<numPoolConstraints;j++)
- {
- const btMultiBodySolverConstraint& solverConstraint = m_multiBodyNormalContactConstraints[j];
-
- //apply the joint feedback into all links of the btMultiBody
- //todo: double-check the signs of the applied impulse
-
- if(solverConstraint.m_multiBodyA && solverConstraint.m_multiBodyA->isMultiDof())
- {
- applyJointFeedback(m_data,solverConstraint, solverConstraint.m_jacAindex,solverConstraint.m_multiBodyA, solverConstraint.m_appliedImpulse*btSimdScalar(1./infoGlobal.m_timeStep));
- }
- if(solverConstraint.m_multiBodyB && solverConstraint.m_multiBodyB->isMultiDof())
- {
- applyJointFeedback(m_data,solverConstraint, solverConstraint.m_jacBindex,solverConstraint.m_multiBodyB,solverConstraint.m_appliedImpulse*btSimdScalar(-1./infoGlobal.m_timeStep));
- }
-#if 0
- if (m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_multiBodyA && m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_multiBodyA->isMultiDof())
- {
- applyJointFeedback(m_data,m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex],
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_jacAindex,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_multiBodyA,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_appliedImpulse*btSimdScalar(1./infoGlobal.m_timeStep));
-
- }
- if (m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_multiBodyB && m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_multiBodyB->isMultiDof())
- {
- applyJointFeedback(m_data,m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex],
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_jacBindex,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_multiBodyB,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex].m_appliedImpulse*btSimdScalar(-1./infoGlobal.m_timeStep));
- }
-
- if ((infoGlobal.m_solverMode & SOLVER_USE_2_FRICTION_DIRECTIONS))
- {
- if (m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_multiBodyA && m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_multiBodyA->isMultiDof())
- {
- applyJointFeedback(m_data,m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1],
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_jacAindex,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_multiBodyA,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_appliedImpulse*btSimdScalar(1./infoGlobal.m_timeStep));
- }
-
- if (m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_multiBodyB && m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_multiBodyB->isMultiDof())
- {
- applyJointFeedback(m_data,m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1],
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_jacBindex,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_multiBodyB,
- m_multiBodyFrictionContactConstraints[solverConstraint.m_frictionIndex+1].m_appliedImpulse*btSimdScalar(-1./infoGlobal.m_timeStep));
- }
- }
-#endif
- }
-
- for (int i=0;i<m_multiBodyNonContactConstraints.size();i++)
- {
- const btMultiBodySolverConstraint& solverConstraint = m_multiBodyNonContactConstraints[i];
- if(solverConstraint.m_multiBodyA && solverConstraint.m_multiBodyA->isMultiDof())
- {
- applyJointFeedback(m_data,solverConstraint, solverConstraint.m_jacAindex,solverConstraint.m_multiBodyA, solverConstraint.m_appliedImpulse*btSimdScalar(1./infoGlobal.m_timeStep));
- }
- if(solverConstraint.m_multiBodyB && solverConstraint.m_multiBodyB->isMultiDof())
- {
- applyJointFeedback(m_data,solverConstraint, solverConstraint.m_jacBindex,solverConstraint.m_multiBodyB,solverConstraint.m_appliedImpulse*btSimdScalar(1./infoGlobal.m_timeStep));
- }
- }
- }
-
- numPoolConstraints = m_multiBodyNonContactConstraints.size();
-
-#if 0
- //@todo: m_originalContactPoint is not initialized for btMultiBodySolverConstraint
- for (int i=0;i<numPoolConstraints;i++)
- {
- const btMultiBodySolverConstraint& c = m_multiBodyNonContactConstraints[i];
-
- btTypedConstraint* constr = (btTypedConstraint*)c.m_originalContactPoint;
- btJointFeedback* fb = constr->getJointFeedback();
- if (fb)
- {
- fb->m_appliedForceBodyA += c.m_contactNormal1*c.m_appliedImpulse*constr->getRigidBodyA().getLinearFactor()/infoGlobal.m_timeStep;
- fb->m_appliedForceBodyB += c.m_contactNormal2*c.m_appliedImpulse*constr->getRigidBodyB().getLinearFactor()/infoGlobal.m_timeStep;
- fb->m_appliedTorqueBodyA += c.m_relpos1CrossNormal* constr->getRigidBodyA().getAngularFactor()*c.m_appliedImpulse/infoGlobal.m_timeStep;
- fb->m_appliedTorqueBodyB += c.m_relpos2CrossNormal* constr->getRigidBodyB().getAngularFactor()*c.m_appliedImpulse/infoGlobal.m_timeStep; /*RGM ???? */
-
- }
-
- constr->internalSetAppliedImpulse(c.m_appliedImpulse);
- if (btFabs(c.m_appliedImpulse)>=constr->getBreakingImpulseThreshold())
- {
- constr->setEnabled(false);
- }
-
- }
-#endif
-#endif
-
- return btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyFinish(bodies, numBodies, infoGlobal);
-}
-
-void btMultiBodyConstraintSolver::solveMultiBodyGroup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, btMultiBodyConstraint** multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher)
-{
- //printf("solveMultiBodyGroup: numBodies=%d, numConstraints=%d, numManifolds=%d, numMultiBodyConstraints=%d\n", numBodies, numConstraints, numManifolds, numMultiBodyConstraints);
-
- //printf("solveMultiBodyGroup start\n");
- m_tmpMultiBodyConstraints = multiBodyConstraints;
- m_tmpNumMultiBodyConstraints = numMultiBodyConstraints;
-
- btSequentialImpulseConstraintSolver::solveGroup(bodies, numBodies, manifold, numManifolds, constraints, numConstraints, info, debugDrawer, dispatcher);
-
- m_tmpMultiBodyConstraints = 0;
- m_tmpNumMultiBodyConstraints = 0;
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h
deleted file mode 100644
index f584360e2b..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_CONSTRAINT_SOLVER_H
-#define BT_MULTIBODY_CONSTRAINT_SOLVER_H
-
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
-#include "btMultiBodySolverConstraint.h"
-
-#define DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
-
-class btMultiBody;
-
-#include "btMultiBodyConstraint.h"
-
-ATTRIBUTE_ALIGNED16(class)
-btMultiBodyConstraintSolver : public btSequentialImpulseConstraintSolver
-{
-protected:
- btMultiBodyConstraintArray m_multiBodyNonContactConstraints;
-
- btMultiBodyConstraintArray m_multiBodyNormalContactConstraints;
- btMultiBodyConstraintArray m_multiBodyFrictionContactConstraints;
- btMultiBodyConstraintArray m_multiBodyTorsionalFrictionContactConstraints;
- btMultiBodyConstraintArray m_multiBodySpinningFrictionContactConstraints;
-
- btMultiBodyJacobianData m_data;
-
- //temp storage for multi body constraints for a specific island/group called by 'solveGroup'
- btMultiBodyConstraint** m_tmpMultiBodyConstraints;
- int m_tmpNumMultiBodyConstraints;
-
- btScalar resolveSingleConstraintRowGeneric(const btMultiBodySolverConstraint& c);
-
- //solve 2 friction directions and clamp against the implicit friction cone
- btScalar resolveConeFrictionConstraintRows(const btMultiBodySolverConstraint& cA1, const btMultiBodySolverConstraint& cB);
-
- void convertContacts(btPersistentManifold * *manifoldPtr, int numManifolds, const btContactSolverInfo& infoGlobal);
-
- btMultiBodySolverConstraint& addMultiBodyFrictionConstraint(const btVector3& normalAxis, const btScalar& appliedImpulse, btPersistentManifold* manifold, int frictionIndex, btManifoldPoint& cp, btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity = 0, btScalar cfmSlip = 0);
-
- btMultiBodySolverConstraint& addMultiBodyTorsionalFrictionConstraint(const btVector3& normalAxis, btPersistentManifold* manifold, int frictionIndex, btManifoldPoint& cp,
- btScalar combinedTorsionalFriction,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity = 0, btScalar cfmSlip = 0);
-
- btMultiBodySolverConstraint& addMultiBodySpinningFrictionConstraint(const btVector3& normalAxis, btPersistentManifold* manifold, int frictionIndex, btManifoldPoint& cp,
- btScalar combinedTorsionalFriction,
- btCollisionObject* colObj0, btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity = 0, btScalar cfmSlip = 0);
-
- void setupMultiBodyJointLimitConstraint(btMultiBodySolverConstraint & constraintRow,
- btScalar * jacA, btScalar * jacB,
- btScalar penetration, btScalar combinedFrictionCoeff, btScalar combinedRestitutionCoeff,
- const btContactSolverInfo& infoGlobal);
-
- void setupMultiBodyContactConstraint(btMultiBodySolverConstraint & solverConstraint,
- const btVector3& contactNormal,
- const btScalar& appliedImpulse,
- btManifoldPoint& cp,
- const btContactSolverInfo& infoGlobal,
- btScalar& relaxation,
- bool isFriction, btScalar desiredVelocity = 0, btScalar cfmSlip = 0);
-
- //either rolling or spinning friction
- void setupMultiBodyTorsionalFrictionConstraint(btMultiBodySolverConstraint & solverConstraint,
- const btVector3& contactNormal,
- btManifoldPoint& cp,
- btScalar combinedTorsionalFriction,
- const btContactSolverInfo& infoGlobal,
- btScalar& relaxation,
- bool isFriction, btScalar desiredVelocity = 0, btScalar cfmSlip = 0);
-
- void convertMultiBodyContact(btPersistentManifold * manifold, const btContactSolverInfo& infoGlobal);
- virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
- // virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer);
- virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
- void applyDeltaVee(btScalar * deltaV, btScalar impulse, int velocityIndex, int ndof);
- void writeBackSolverBodyToMultiBody(btMultiBodySolverConstraint & constraint, btScalar deltaTime);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- ///this method should not be called, it was just used during porting/integration of Featherstone btMultiBody, providing backwards compatibility but no support for btMultiBodyConstraint (only contact constraints)
- virtual btScalar solveGroup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher);
- virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal);
-
- virtual void solveMultiBodyGroup(btCollisionObject * *bodies, int numBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, btMultiBodyConstraint** multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher);
-};
-
-#endif //BT_MULTIBODY_CONSTRAINT_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp
deleted file mode 100644
index e7af332eb3..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp
+++ /dev/null
@@ -1,895 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btMultiBodyDynamicsWorld.h"
-#include "btMultiBodyConstraintSolver.h"
-#include "btMultiBody.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
-#include "LinearMath/btQuickprof.h"
-#include "btMultiBodyConstraint.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btSerializer.h"
-
-void btMultiBodyDynamicsWorld::addMultiBody(btMultiBody* body, int group, int mask)
-{
- m_multiBodies.push_back(body);
-}
-
-void btMultiBodyDynamicsWorld::removeMultiBody(btMultiBody* body)
-{
- m_multiBodies.remove(body);
-}
-
-void btMultiBodyDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
-{
- btDiscreteDynamicsWorld::predictUnconstraintMotion(timeStep);
- predictMultiBodyTransforms(timeStep);
-
-}
-void btMultiBodyDynamicsWorld::calculateSimulationIslands()
-{
- BT_PROFILE("calculateSimulationIslands");
-
- getSimulationIslandManager()->updateActivationState(getCollisionWorld(), getCollisionWorld()->getDispatcher());
-
- {
- //merge islands based on speculative contact manifolds too
- for (int i = 0; i < this->m_predictiveManifolds.size(); i++)
- {
- btPersistentManifold* manifold = m_predictiveManifolds[i];
-
- const btCollisionObject* colObj0 = manifold->getBody0();
- const btCollisionObject* colObj1 = manifold->getBody1();
-
- if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
- ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
- {
- getSimulationIslandManager()->getUnionFind().unite((colObj0)->getIslandTag(), (colObj1)->getIslandTag());
- }
- }
- }
-
- {
- int i;
- int numConstraints = int(m_constraints.size());
- for (i = 0; i < numConstraints; i++)
- {
- btTypedConstraint* constraint = m_constraints[i];
- if (constraint->isEnabled())
- {
- const btRigidBody* colObj0 = &constraint->getRigidBodyA();
- const btRigidBody* colObj1 = &constraint->getRigidBodyB();
-
- if (((colObj0) && (!(colObj0)->isStaticOrKinematicObject())) &&
- ((colObj1) && (!(colObj1)->isStaticOrKinematicObject())))
- {
- getSimulationIslandManager()->getUnionFind().unite((colObj0)->getIslandTag(), (colObj1)->getIslandTag());
- }
- }
- }
- }
-
- //merge islands linked by Featherstone link colliders
- for (int i = 0; i < m_multiBodies.size(); i++)
- {
- btMultiBody* body = m_multiBodies[i];
- {
- btMultiBodyLinkCollider* prev = body->getBaseCollider();
-
- for (int b = 0; b < body->getNumLinks(); b++)
- {
- btMultiBodyLinkCollider* cur = body->getLink(b).m_collider;
-
- if (((cur) && (!(cur)->isStaticOrKinematicObject())) &&
- ((prev) && (!(prev)->isStaticOrKinematicObject())))
- {
- int tagPrev = prev->getIslandTag();
- int tagCur = cur->getIslandTag();
- getSimulationIslandManager()->getUnionFind().unite(tagPrev, tagCur);
- }
- if (cur && !cur->isStaticOrKinematicObject())
- prev = cur;
- }
- }
- }
-
- //merge islands linked by multibody constraints
- {
- for (int i = 0; i < this->m_multiBodyConstraints.size(); i++)
- {
- btMultiBodyConstraint* c = m_multiBodyConstraints[i];
- int tagA = c->getIslandIdA();
- int tagB = c->getIslandIdB();
- if (tagA >= 0 && tagB >= 0)
- getSimulationIslandManager()->getUnionFind().unite(tagA, tagB);
- }
- }
-
- //Store the island id in each body
- getSimulationIslandManager()->storeIslandActivationState(getCollisionWorld());
-}
-
-void btMultiBodyDynamicsWorld::updateActivationState(btScalar timeStep)
-{
- BT_PROFILE("btMultiBodyDynamicsWorld::updateActivationState");
-
- for (int i = 0; i < m_multiBodies.size(); i++)
- {
- btMultiBody* body = m_multiBodies[i];
- if (body)
- {
- body->checkMotionAndSleepIfRequired(timeStep);
- if (!body->isAwake())
- {
- btMultiBodyLinkCollider* col = body->getBaseCollider();
- if (col && col->getActivationState() == ACTIVE_TAG)
- {
- if (body->hasFixedBase())
- {
- col->setActivationState(FIXED_BASE_MULTI_BODY);
- } else
- {
- col->setActivationState(WANTS_DEACTIVATION);
- }
-
- col->setDeactivationTime(0.f);
- }
- for (int b = 0; b < body->getNumLinks(); b++)
- {
- btMultiBodyLinkCollider* col = body->getLink(b).m_collider;
- if (col && col->getActivationState() == ACTIVE_TAG)
- {
- col->setActivationState(WANTS_DEACTIVATION);
- col->setDeactivationTime(0.f);
- }
- }
- }
- else
- {
- btMultiBodyLinkCollider* col = body->getBaseCollider();
- if (col && col->getActivationState() != DISABLE_DEACTIVATION)
- col->setActivationState(ACTIVE_TAG);
-
- for (int b = 0; b < body->getNumLinks(); b++)
- {
- btMultiBodyLinkCollider* col = body->getLink(b).m_collider;
- if (col && col->getActivationState() != DISABLE_DEACTIVATION)
- col->setActivationState(ACTIVE_TAG);
- }
- }
- }
- }
-
- btDiscreteDynamicsWorld::updateActivationState(timeStep);
-}
-
-void btMultiBodyDynamicsWorld::getAnalyticsData(btAlignedObjectArray<btSolverAnalyticsData>& islandAnalyticsData) const
-{
- islandAnalyticsData = m_solverMultiBodyIslandCallback->m_islandAnalyticsData;
-}
-
-btMultiBodyDynamicsWorld::btMultiBodyDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btMultiBodyConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration)
- : btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration),
- m_multiBodyConstraintSolver(constraintSolver)
-{
- //split impulse is not yet supported for Featherstone hierarchies
- // getSolverInfo().m_splitImpulse = false;
- getSolverInfo().m_solverMode |= SOLVER_USE_2_FRICTION_DIRECTIONS;
- m_solverMultiBodyIslandCallback = new MultiBodyInplaceSolverIslandCallback(constraintSolver, dispatcher);
-}
-
-btMultiBodyDynamicsWorld::~btMultiBodyDynamicsWorld()
-{
- delete m_solverMultiBodyIslandCallback;
-}
-
-void btMultiBodyDynamicsWorld::setMultiBodyConstraintSolver(btMultiBodyConstraintSolver* solver)
-{
- m_multiBodyConstraintSolver = solver;
- m_solverMultiBodyIslandCallback->setMultiBodyConstraintSolver(solver);
- btDiscreteDynamicsWorld::setConstraintSolver(solver);
-}
-
-void btMultiBodyDynamicsWorld::setConstraintSolver(btConstraintSolver* solver)
-{
- if (solver->getSolverType() == BT_MULTIBODY_SOLVER)
- {
- m_multiBodyConstraintSolver = (btMultiBodyConstraintSolver*)solver;
- }
- btDiscreteDynamicsWorld::setConstraintSolver(solver);
-}
-
-void btMultiBodyDynamicsWorld::forwardKinematics()
-{
- for (int b = 0; b < m_multiBodies.size(); b++)
- {
- btMultiBody* bod = m_multiBodies[b];
- bod->forwardKinematics(m_scratch_world_to_local, m_scratch_local_origin);
- }
-}
-void btMultiBodyDynamicsWorld::solveConstraints(btContactSolverInfo& solverInfo)
-{
- solveExternalForces(solverInfo);
- buildIslands();
- solveInternalConstraints(solverInfo);
-}
-
-void btMultiBodyDynamicsWorld::buildIslands()
-{
- m_islandManager->buildAndProcessIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_solverMultiBodyIslandCallback);
-}
-
-void btMultiBodyDynamicsWorld::solveInternalConstraints(btContactSolverInfo& solverInfo)
-{
- /// solve all the constraints for this island
- m_solverMultiBodyIslandCallback->processConstraints();
- m_constraintSolver->allSolved(solverInfo, m_debugDrawer);
- {
- BT_PROFILE("btMultiBody stepVelocities");
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- //useless? they get resized in stepVelocities once again (AND DIFFERENTLY)
- m_scratch_r.resize(bod->getNumLinks() + 1); //multidof? ("Y"s use it and it is used to store qdd)
- m_scratch_v.resize(bod->getNumLinks() + 1);
- m_scratch_m.resize(bod->getNumLinks() + 1);
-
- if (bod->internalNeedsJointFeedback())
- {
- if (!bod->isUsingRK4Integration())
- {
- if (bod->internalNeedsJointFeedback())
- {
- bool isConstraintPass = true;
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(solverInfo.m_timeStep, m_scratch_r, m_scratch_v, m_scratch_m, isConstraintPass,
- getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- }
- }
- }
- }
- }
- }
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
- bod->processDeltaVeeMultiDof2();
- }
-}
-
-void btMultiBodyDynamicsWorld::solveExternalForces(btContactSolverInfo& solverInfo)
-{
- forwardKinematics();
-
- BT_PROFILE("solveConstraints");
-
- clearMultiBodyConstraintForces();
-
- m_sortedConstraints.resize(m_constraints.size());
- int i;
- for (i = 0; i < getNumConstraints(); i++)
- {
- m_sortedConstraints[i] = m_constraints[i];
- }
- m_sortedConstraints.quickSort(btSortConstraintOnIslandPredicate2());
- btTypedConstraint** constraintsPtr = getNumConstraints() ? &m_sortedConstraints[0] : 0;
-
- m_sortedMultiBodyConstraints.resize(m_multiBodyConstraints.size());
- for (i = 0; i < m_multiBodyConstraints.size(); i++)
- {
- m_sortedMultiBodyConstraints[i] = m_multiBodyConstraints[i];
- }
- m_sortedMultiBodyConstraints.quickSort(btSortMultiBodyConstraintOnIslandPredicate());
-
- btMultiBodyConstraint** sortedMultiBodyConstraints = m_sortedMultiBodyConstraints.size() ? &m_sortedMultiBodyConstraints[0] : 0;
-
- m_solverMultiBodyIslandCallback->setup(&solverInfo, constraintsPtr, m_sortedConstraints.size(), sortedMultiBodyConstraints, m_sortedMultiBodyConstraints.size(), getDebugDrawer());
- m_constraintSolver->prepareSolve(getCollisionWorld()->getNumCollisionObjects(), getCollisionWorld()->getDispatcher()->getNumManifolds());
-
-#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
- {
- BT_PROFILE("btMultiBody addForce");
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- //useless? they get resized in stepVelocities once again (AND DIFFERENTLY)
- m_scratch_r.resize(bod->getNumLinks() + 1); //multidof? ("Y"s use it and it is used to store qdd)
- m_scratch_v.resize(bod->getNumLinks() + 1);
- m_scratch_m.resize(bod->getNumLinks() + 1);
-
- bod->addBaseForce(m_gravity * bod->getBaseMass());
-
- for (int j = 0; j < bod->getNumLinks(); ++j)
- {
- bod->addLinkForce(j, m_gravity * bod->getLinkMass(j));
- }
- } //if (!isSleeping)
- }
- }
-#endif //BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
-
- {
- BT_PROFILE("btMultiBody stepVelocities");
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- //useless? they get resized in stepVelocities once again (AND DIFFERENTLY)
- m_scratch_r.resize(bod->getNumLinks() + 1); //multidof? ("Y"s use it and it is used to store qdd)
- m_scratch_v.resize(bod->getNumLinks() + 1);
- m_scratch_m.resize(bod->getNumLinks() + 1);
- bool doNotUpdatePos = false;
- bool isConstraintPass = false;
- {
- if (!bod->isUsingRK4Integration())
- {
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(solverInfo.m_timeStep,
- m_scratch_r, m_scratch_v, m_scratch_m,isConstraintPass,
- getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- }
- else
- {
- //
- int numDofs = bod->getNumDofs() + 6;
- int numPosVars = bod->getNumPosVars() + 7;
- btAlignedObjectArray<btScalar> scratch_r2;
- scratch_r2.resize(2 * numPosVars + 8 * numDofs);
- //convenience
- btScalar* pMem = &scratch_r2[0];
- btScalar* scratch_q0 = pMem;
- pMem += numPosVars;
- btScalar* scratch_qx = pMem;
- pMem += numPosVars;
- btScalar* scratch_qd0 = pMem;
- pMem += numDofs;
- btScalar* scratch_qd1 = pMem;
- pMem += numDofs;
- btScalar* scratch_qd2 = pMem;
- pMem += numDofs;
- btScalar* scratch_qd3 = pMem;
- pMem += numDofs;
- btScalar* scratch_qdd0 = pMem;
- pMem += numDofs;
- btScalar* scratch_qdd1 = pMem;
- pMem += numDofs;
- btScalar* scratch_qdd2 = pMem;
- pMem += numDofs;
- btScalar* scratch_qdd3 = pMem;
- pMem += numDofs;
- btAssert((pMem - (2 * numPosVars + 8 * numDofs)) == &scratch_r2[0]);
-
- /////
- //copy q0 to scratch_q0 and qd0 to scratch_qd0
- scratch_q0[0] = bod->getWorldToBaseRot().x();
- scratch_q0[1] = bod->getWorldToBaseRot().y();
- scratch_q0[2] = bod->getWorldToBaseRot().z();
- scratch_q0[3] = bod->getWorldToBaseRot().w();
- scratch_q0[4] = bod->getBasePos().x();
- scratch_q0[5] = bod->getBasePos().y();
- scratch_q0[6] = bod->getBasePos().z();
- //
- for (int link = 0; link < bod->getNumLinks(); ++link)
- {
- for (int dof = 0; dof < bod->getLink(link).m_posVarCount; ++dof)
- scratch_q0[7 + bod->getLink(link).m_cfgOffset + dof] = bod->getLink(link).m_jointPos[dof];
- }
- //
- for (int dof = 0; dof < numDofs; ++dof)
- scratch_qd0[dof] = bod->getVelocityVector()[dof];
- ////
- struct
- {
- btMultiBody* bod;
- btScalar *scratch_qx, *scratch_q0;
-
- void operator()()
- {
- for (int dof = 0; dof < bod->getNumPosVars() + 7; ++dof)
- scratch_qx[dof] = scratch_q0[dof];
- }
- } pResetQx = {bod, scratch_qx, scratch_q0};
- //
- struct
- {
- void operator()(btScalar dt, const btScalar* pDer, const btScalar* pCurVal, btScalar* pVal, int size)
- {
- for (int i = 0; i < size; ++i)
- pVal[i] = pCurVal[i] + dt * pDer[i];
- }
-
- } pEulerIntegrate;
- //
- struct
- {
- void operator()(btMultiBody* pBody, const btScalar* pData)
- {
- btScalar* pVel = const_cast<btScalar*>(pBody->getVelocityVector());
-
- for (int i = 0; i < pBody->getNumDofs() + 6; ++i)
- pVel[i] = pData[i];
- }
- } pCopyToVelocityVector;
- //
- struct
- {
- void operator()(const btScalar* pSrc, btScalar* pDst, int start, int size)
- {
- for (int i = 0; i < size; ++i)
- pDst[i] = pSrc[start + i];
- }
- } pCopy;
- //
-
- btScalar h = solverInfo.m_timeStep;
-#define output &m_scratch_r[bod->getNumDofs()]
- //calc qdd0 from: q0 & qd0
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(0., m_scratch_r, m_scratch_v, m_scratch_m,
- isConstraintPass,getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- pCopy(output, scratch_qdd0, 0, numDofs);
- //calc q1 = q0 + h/2 * qd0
- pResetQx();
- bod->stepPositionsMultiDof(btScalar(.5) * h, scratch_qx, scratch_qd0);
- //calc qd1 = qd0 + h/2 * qdd0
- pEulerIntegrate(btScalar(.5) * h, scratch_qdd0, scratch_qd0, scratch_qd1, numDofs);
- //
- //calc qdd1 from: q1 & qd1
- pCopyToVelocityVector(bod, scratch_qd1);
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(0., m_scratch_r, m_scratch_v, m_scratch_m,
- isConstraintPass,getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- pCopy(output, scratch_qdd1, 0, numDofs);
- //calc q2 = q0 + h/2 * qd1
- pResetQx();
- bod->stepPositionsMultiDof(btScalar(.5) * h, scratch_qx, scratch_qd1);
- //calc qd2 = qd0 + h/2 * qdd1
- pEulerIntegrate(btScalar(.5) * h, scratch_qdd1, scratch_qd0, scratch_qd2, numDofs);
- //
- //calc qdd2 from: q2 & qd2
- pCopyToVelocityVector(bod, scratch_qd2);
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(0., m_scratch_r, m_scratch_v, m_scratch_m,
- isConstraintPass,getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- pCopy(output, scratch_qdd2, 0, numDofs);
- //calc q3 = q0 + h * qd2
- pResetQx();
- bod->stepPositionsMultiDof(h, scratch_qx, scratch_qd2);
- //calc qd3 = qd0 + h * qdd2
- pEulerIntegrate(h, scratch_qdd2, scratch_qd0, scratch_qd3, numDofs);
- //
- //calc qdd3 from: q3 & qd3
- pCopyToVelocityVector(bod, scratch_qd3);
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(0., m_scratch_r, m_scratch_v, m_scratch_m,
- isConstraintPass,getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- pCopy(output, scratch_qdd3, 0, numDofs);
-
- //
- //calc q = q0 + h/6(qd0 + 2*(qd1 + qd2) + qd3)
- //calc qd = qd0 + h/6(qdd0 + 2*(qdd1 + qdd2) + qdd3)
- btAlignedObjectArray<btScalar> delta_q;
- delta_q.resize(numDofs);
- btAlignedObjectArray<btScalar> delta_qd;
- delta_qd.resize(numDofs);
- for (int i = 0; i < numDofs; ++i)
- {
- delta_q[i] = h / btScalar(6.) * (scratch_qd0[i] + 2 * scratch_qd1[i] + 2 * scratch_qd2[i] + scratch_qd3[i]);
- delta_qd[i] = h / btScalar(6.) * (scratch_qdd0[i] + 2 * scratch_qdd1[i] + 2 * scratch_qdd2[i] + scratch_qdd3[i]);
- //delta_q[i] = h*scratch_qd0[i];
- //delta_qd[i] = h*scratch_qdd0[i];
- }
- //
- pCopyToVelocityVector(bod, scratch_qd0);
- bod->applyDeltaVeeMultiDof(&delta_qd[0], 1);
- //
- if (!doNotUpdatePos)
- {
- btScalar* pRealBuf = const_cast<btScalar*>(bod->getVelocityVector());
- pRealBuf += 6 + bod->getNumDofs() + bod->getNumDofs() * bod->getNumDofs();
-
- for (int i = 0; i < numDofs; ++i)
- pRealBuf[i] = delta_q[i];
-
- //bod->stepPositionsMultiDof(1, 0, &delta_q[0]);
- bod->setPosUpdated(true);
- }
-
- //ugly hack which resets the cached data to t0 (needed for constraint solver)
- {
- for (int link = 0; link < bod->getNumLinks(); ++link)
- bod->getLink(link).updateCacheMultiDof();
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(0, m_scratch_r, m_scratch_v, m_scratch_m,
- isConstraintPass,getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- }
- }
- }
-
-#ifndef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
- bod->clearForcesAndTorques();
-#endif //BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
- } //if (!isSleeping)
- }
- }
-}
-
-
-void btMultiBodyDynamicsWorld::integrateTransforms(btScalar timeStep)
-{
- btDiscreteDynamicsWorld::integrateTransforms(timeStep);
- integrateMultiBodyTransforms(timeStep);
-}
-
-void btMultiBodyDynamicsWorld::integrateMultiBodyTransforms(btScalar timeStep)
-{
- BT_PROFILE("btMultiBody stepPositions");
- //integrate and update the Featherstone hierarchies
-
- for (int b = 0; b < m_multiBodies.size(); b++)
- {
- btMultiBody* bod = m_multiBodies[b];
- bool isSleeping = false;
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- bod->addSplitV();
- int nLinks = bod->getNumLinks();
-
- ///base + num m_links
- if (!bod->isPosUpdated())
- bod->stepPositionsMultiDof(timeStep);
- else
- {
- btScalar* pRealBuf = const_cast<btScalar*>(bod->getVelocityVector());
- pRealBuf += 6 + bod->getNumDofs() + bod->getNumDofs() * bod->getNumDofs();
-
- bod->stepPositionsMultiDof(1, 0, pRealBuf);
- bod->setPosUpdated(false);
- }
-
-
- m_scratch_world_to_local.resize(nLinks + 1);
- m_scratch_local_origin.resize(nLinks + 1);
- bod->updateCollisionObjectWorldTransforms(m_scratch_world_to_local, m_scratch_local_origin);
- bod->substractSplitV();
- }
- else
- {
- bod->clearVelocities();
- }
- }
-}
-
-void btMultiBodyDynamicsWorld::predictMultiBodyTransforms(btScalar timeStep)
-{
- BT_PROFILE("btMultiBody stepPositions");
- //integrate and update the Featherstone hierarchies
-
- for (int b = 0; b < m_multiBodies.size(); b++)
- {
- btMultiBody* bod = m_multiBodies[b];
- bool isSleeping = false;
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- int nLinks = bod->getNumLinks();
- bod->predictPositionsMultiDof(timeStep);
- m_scratch_world_to_local.resize(nLinks + 1);
- m_scratch_local_origin.resize(nLinks + 1);
- bod->updateCollisionObjectInterpolationWorldTransforms(m_scratch_world_to_local, m_scratch_local_origin);
- }
- else
- {
- bod->clearVelocities();
- }
- }
-}
-
-void btMultiBodyDynamicsWorld::addMultiBodyConstraint(btMultiBodyConstraint* constraint)
-{
- m_multiBodyConstraints.push_back(constraint);
-}
-
-void btMultiBodyDynamicsWorld::removeMultiBodyConstraint(btMultiBodyConstraint* constraint)
-{
- m_multiBodyConstraints.remove(constraint);
-}
-
-void btMultiBodyDynamicsWorld::debugDrawMultiBodyConstraint(btMultiBodyConstraint* constraint)
-{
- constraint->debugDraw(getDebugDrawer());
-}
-
-void btMultiBodyDynamicsWorld::debugDrawWorld()
-{
- BT_PROFILE("btMultiBodyDynamicsWorld debugDrawWorld");
-
- btDiscreteDynamicsWorld::debugDrawWorld();
-
- bool drawConstraints = false;
- if (getDebugDrawer())
- {
- int mode = getDebugDrawer()->getDebugMode();
- if (mode & (btIDebugDraw::DBG_DrawConstraints | btIDebugDraw::DBG_DrawConstraintLimits))
- {
- drawConstraints = true;
- }
-
- if (drawConstraints)
- {
- BT_PROFILE("btMultiBody debugDrawWorld");
-
- for (int c = 0; c < m_multiBodyConstraints.size(); c++)
- {
- btMultiBodyConstraint* constraint = m_multiBodyConstraints[c];
- debugDrawMultiBodyConstraint(constraint);
- }
-
- for (int b = 0; b < m_multiBodies.size(); b++)
- {
- btMultiBody* bod = m_multiBodies[b];
- bod->forwardKinematics(m_scratch_world_to_local1, m_scratch_local_origin1);
-
- if (mode & btIDebugDraw::DBG_DrawFrames)
- {
- getDebugDrawer()->drawTransform(bod->getBaseWorldTransform(), 0.1);
- }
-
- for (int m = 0; m < bod->getNumLinks(); m++)
- {
- const btTransform& tr = bod->getLink(m).m_cachedWorldTransform;
- if (mode & btIDebugDraw::DBG_DrawFrames)
- {
- getDebugDrawer()->drawTransform(tr, 0.1);
- }
- //draw the joint axis
- if (bod->getLink(m).m_jointType == btMultibodyLink::eRevolute)
- {
- btVector3 vec = quatRotate(tr.getRotation(), bod->getLink(m).m_axes[0].m_topVec) * 0.1;
-
- btVector4 color(0, 0, 0, 1); //1,1,1);
- btVector3 from = vec + tr.getOrigin() - quatRotate(tr.getRotation(), bod->getLink(m).m_dVector);
- btVector3 to = tr.getOrigin() - quatRotate(tr.getRotation(), bod->getLink(m).m_dVector);
- getDebugDrawer()->drawLine(from, to, color);
- }
- if (bod->getLink(m).m_jointType == btMultibodyLink::eFixed)
- {
- btVector3 vec = quatRotate(tr.getRotation(), bod->getLink(m).m_axes[0].m_bottomVec) * 0.1;
-
- btVector4 color(0, 0, 0, 1); //1,1,1);
- btVector3 from = vec + tr.getOrigin() - quatRotate(tr.getRotation(), bod->getLink(m).m_dVector);
- btVector3 to = tr.getOrigin() - quatRotate(tr.getRotation(), bod->getLink(m).m_dVector);
- getDebugDrawer()->drawLine(from, to, color);
- }
- if (bod->getLink(m).m_jointType == btMultibodyLink::ePrismatic)
- {
- btVector3 vec = quatRotate(tr.getRotation(), bod->getLink(m).m_axes[0].m_bottomVec) * 0.1;
-
- btVector4 color(0, 0, 0, 1); //1,1,1);
- btVector3 from = vec + tr.getOrigin() - quatRotate(tr.getRotation(), bod->getLink(m).m_dVector);
- btVector3 to = tr.getOrigin() - quatRotate(tr.getRotation(), bod->getLink(m).m_dVector);
- getDebugDrawer()->drawLine(from, to, color);
- }
- }
- }
- }
- }
-}
-
-void btMultiBodyDynamicsWorld::applyGravity()
-{
- btDiscreteDynamicsWorld::applyGravity();
-#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
- BT_PROFILE("btMultiBody addGravity");
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- bod->addBaseForce(m_gravity * bod->getBaseMass());
-
- for (int j = 0; j < bod->getNumLinks(); ++j)
- {
- bod->addLinkForce(j, m_gravity * bod->getLinkMass(j));
- }
- } //if (!isSleeping)
- }
-#endif //BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
-}
-
-void btMultiBodyDynamicsWorld::clearMultiBodyConstraintForces()
-{
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
- bod->clearConstraintForces();
- }
-}
-void btMultiBodyDynamicsWorld::clearMultiBodyForces()
-{
- {
- // BT_PROFILE("clearMultiBodyForces");
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- btMultiBody* bod = m_multiBodies[i];
- bod->clearForcesAndTorques();
- }
- }
- }
-}
-void btMultiBodyDynamicsWorld::clearForces()
-{
- btDiscreteDynamicsWorld::clearForces();
-
-#ifdef BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
- clearMultiBodyForces();
-#endif
-}
-
-void btMultiBodyDynamicsWorld::serialize(btSerializer* serializer)
-{
- serializer->startSerialization();
-
- serializeDynamicsWorldInfo(serializer);
-
- serializeMultiBodies(serializer);
-
- serializeRigidBodies(serializer);
-
- serializeCollisionObjects(serializer);
-
- serializeContactManifolds(serializer);
-
- serializer->finishSerialization();
-}
-
-void btMultiBodyDynamicsWorld::serializeMultiBodies(btSerializer* serializer)
-{
- int i;
- //serialize all collision objects
- for (i = 0; i < m_multiBodies.size(); i++)
- {
- btMultiBody* mb = m_multiBodies[i];
- {
- int len = mb->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = mb->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_MULTIBODY_CODE, mb);
- }
- }
-
- //serialize all multibody links (collision objects)
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- if (colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- int len = colObj->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = colObj->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_MB_LINKCOLLIDER_CODE, colObj);
- }
- }
-}
-
-void btMultiBodyDynamicsWorld::saveKinematicState(btScalar timeStep)
-{
- btDiscreteDynamicsWorld::saveKinematicState(timeStep);
- for(int i = 0; i < m_multiBodies.size(); i++)
- {
- btMultiBody* body = m_multiBodies[i];
- if(body->isBaseKinematic())
- body->saveKinematicState(timeStep);
- }
-}
-
-//
-//void btMultiBodyDynamicsWorld::setSplitIslands(bool split)
-//{
-// m_islandManager->setSplitIslands(split);
-//}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h
deleted file mode 100644
index d2d76c8b92..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_DYNAMICS_WORLD_H
-#define BT_MULTIBODY_DYNAMICS_WORLD_H
-
-#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
-#include "BulletDynamics/Featherstone/btMultiBodyInplaceSolverIslandCallback.h"
-
-#define BT_USE_VIRTUAL_CLEARFORCES_AND_GRAVITY
-
-class btMultiBody;
-class btMultiBodyConstraint;
-class btMultiBodyConstraintSolver;
-struct MultiBodyInplaceSolverIslandCallback;
-
-///The btMultiBodyDynamicsWorld adds Featherstone multi body dynamics to Bullet
-///This implementation is still preliminary/experimental.
-class btMultiBodyDynamicsWorld : public btDiscreteDynamicsWorld
-{
-protected:
- btAlignedObjectArray<btMultiBody*> m_multiBodies;
- btAlignedObjectArray<btMultiBodyConstraint*> m_multiBodyConstraints;
- btAlignedObjectArray<btMultiBodyConstraint*> m_sortedMultiBodyConstraints;
- btMultiBodyConstraintSolver* m_multiBodyConstraintSolver;
- MultiBodyInplaceSolverIslandCallback* m_solverMultiBodyIslandCallback;
-
- //cached data to avoid memory allocations
- btAlignedObjectArray<btQuaternion> m_scratch_world_to_local;
- btAlignedObjectArray<btVector3> m_scratch_local_origin;
- btAlignedObjectArray<btQuaternion> m_scratch_world_to_local1;
- btAlignedObjectArray<btVector3> m_scratch_local_origin1;
- btAlignedObjectArray<btScalar> m_scratch_r;
- btAlignedObjectArray<btVector3> m_scratch_v;
- btAlignedObjectArray<btMatrix3x3> m_scratch_m;
-
- virtual void calculateSimulationIslands();
- virtual void updateActivationState(btScalar timeStep);
-
-
- virtual void serializeMultiBodies(btSerializer* serializer);
-
-public:
- btMultiBodyDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btMultiBodyConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration);
-
- virtual ~btMultiBodyDynamicsWorld();
-
- virtual void solveConstraints(btContactSolverInfo& solverInfo);
-
- virtual void addMultiBody(btMultiBody* body, int group = btBroadphaseProxy::DefaultFilter, int mask = btBroadphaseProxy::AllFilter);
-
- virtual void removeMultiBody(btMultiBody* body);
-
- virtual int getNumMultibodies() const
- {
- return m_multiBodies.size();
- }
-
- btMultiBody* getMultiBody(int mbIndex)
- {
- return m_multiBodies[mbIndex];
- }
-
- const btMultiBody* getMultiBody(int mbIndex) const
- {
- return m_multiBodies[mbIndex];
- }
-
- virtual void addMultiBodyConstraint(btMultiBodyConstraint* constraint);
-
- virtual int getNumMultiBodyConstraints() const
- {
- return m_multiBodyConstraints.size();
- }
-
- virtual btMultiBodyConstraint* getMultiBodyConstraint(int constraintIndex)
- {
- return m_multiBodyConstraints[constraintIndex];
- }
-
- virtual const btMultiBodyConstraint* getMultiBodyConstraint(int constraintIndex) const
- {
- return m_multiBodyConstraints[constraintIndex];
- }
-
- virtual void removeMultiBodyConstraint(btMultiBodyConstraint* constraint);
-
- virtual void integrateTransforms(btScalar timeStep);
- void integrateMultiBodyTransforms(btScalar timeStep);
- void predictMultiBodyTransforms(btScalar timeStep);
-
- virtual void predictUnconstraintMotion(btScalar timeStep);
- virtual void debugDrawWorld();
-
- virtual void debugDrawMultiBodyConstraint(btMultiBodyConstraint* constraint);
-
- void forwardKinematics();
- virtual void clearForces();
- virtual void clearMultiBodyConstraintForces();
- virtual void clearMultiBodyForces();
- virtual void applyGravity();
-
- virtual void serialize(btSerializer* serializer);
- virtual void setMultiBodyConstraintSolver(btMultiBodyConstraintSolver* solver);
- virtual void setConstraintSolver(btConstraintSolver* solver);
- virtual void getAnalyticsData(btAlignedObjectArray<struct btSolverAnalyticsData>& m_islandAnalyticsData) const;
-
- virtual void solveExternalForces(btContactSolverInfo& solverInfo);
- virtual void solveInternalConstraints(btContactSolverInfo& solverInfo);
- void buildIslands();
-
- virtual void saveKinematicState(btScalar timeStep);
-};
-#endif //BT_MULTIBODY_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.cpp
deleted file mode 100644
index df2abbe97a..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.cpp
+++ /dev/null
@@ -1,215 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodyFixedConstraint.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h"
-#include "LinearMath/btIDebugDraw.h"
-
-#define BTMBFIXEDCONSTRAINT_DIM 6
-
-btMultiBodyFixedConstraint::btMultiBodyFixedConstraint(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB)
- : btMultiBodyConstraint(body, 0, link, -1, BTMBFIXEDCONSTRAINT_DIM, false, MULTIBODY_CONSTRAINT_FIXED),
- m_rigidBodyA(0),
- m_rigidBodyB(bodyB),
- m_pivotInA(pivotInA),
- m_pivotInB(pivotInB),
- m_frameInA(frameInA),
- m_frameInB(frameInB)
-{
- m_data.resize(BTMBFIXEDCONSTRAINT_DIM); //at least store the applied impulses
-}
-
-btMultiBodyFixedConstraint::btMultiBodyFixedConstraint(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB)
- : btMultiBodyConstraint(bodyA, bodyB, linkA, linkB, BTMBFIXEDCONSTRAINT_DIM, false, MULTIBODY_CONSTRAINT_FIXED),
- m_rigidBodyA(0),
- m_rigidBodyB(0),
- m_pivotInA(pivotInA),
- m_pivotInB(pivotInB),
- m_frameInA(frameInA),
- m_frameInB(frameInB)
-{
- m_data.resize(BTMBFIXEDCONSTRAINT_DIM); //at least store the applied impulses
-}
-
-void btMultiBodyFixedConstraint::finalizeMultiDof()
-{
- //not implemented yet
- btAssert(0);
-}
-
-btMultiBodyFixedConstraint::~btMultiBodyFixedConstraint()
-{
-}
-
-int btMultiBodyFixedConstraint::getIslandIdA() const
-{
- if (m_rigidBodyA)
- return m_rigidBodyA->getIslandTag();
-
- if (m_bodyA)
- {
- if (m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodyFixedConstraint::getIslandIdB() const
-{
- if (m_rigidBodyB)
- return m_rigidBodyB->getIslandTag();
- if (m_bodyB)
- {
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-void btMultiBodyFixedConstraint::createConstraintRows(btMultiBodyConstraintArray& constraintRows, btMultiBodyJacobianData& data, const btContactSolverInfo& infoGlobal)
-{
- int numDim = BTMBFIXEDCONSTRAINT_DIM;
- for (int i = 0; i < numDim; i++)
- {
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = i;
- constraintRow.m_relpos1CrossNormal.setValue(0, 0, 0);
- constraintRow.m_contactNormal1.setValue(0, 0, 0);
- constraintRow.m_relpos2CrossNormal.setValue(0, 0, 0);
- constraintRow.m_contactNormal2.setValue(0, 0, 0);
- constraintRow.m_angularComponentA.setValue(0, 0, 0);
- constraintRow.m_angularComponentB.setValue(0, 0, 0);
-
- constraintRow.m_solverBodyIdA = data.m_fixedBodyId;
- constraintRow.m_solverBodyIdB = data.m_fixedBodyId;
-
- // Convert local points back to world
- btVector3 pivotAworld = m_pivotInA;
- btMatrix3x3 frameAworld = m_frameInA;
- if (m_rigidBodyA)
- {
- constraintRow.m_solverBodyIdA = m_rigidBodyA->getCompanionId();
- pivotAworld = m_rigidBodyA->getCenterOfMassTransform() * m_pivotInA;
- frameAworld = frameAworld.transpose() * btMatrix3x3(m_rigidBodyA->getOrientation());
- }
- else
- {
- if (m_bodyA)
- {
- pivotAworld = m_bodyA->localPosToWorld(m_linkA, m_pivotInA);
- frameAworld = m_bodyA->localFrameToWorld(m_linkA, frameAworld);
- }
- }
- btVector3 pivotBworld = m_pivotInB;
- btMatrix3x3 frameBworld = m_frameInB;
- if (m_rigidBodyB)
- {
- constraintRow.m_solverBodyIdB = m_rigidBodyB->getCompanionId();
- pivotBworld = m_rigidBodyB->getCenterOfMassTransform() * m_pivotInB;
- frameBworld = frameBworld.transpose() * btMatrix3x3(m_rigidBodyB->getOrientation());
- }
- else
- {
- if (m_bodyB)
- {
- pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
- frameBworld = m_bodyB->localFrameToWorld(m_linkB, frameBworld);
- }
- }
-
- btMatrix3x3 relRot = frameAworld.inverse() * frameBworld;
- btVector3 angleDiff;
- btGeneric6DofSpring2Constraint::matrixToEulerXYZ(relRot, angleDiff);
-
- btVector3 constraintNormalLin(0, 0, 0);
- btVector3 constraintNormalAng(0, 0, 0);
- btScalar posError = 0.0;
- if (i < 3)
- {
- constraintNormalLin[i] = 1;
- posError = (pivotAworld - pivotBworld).dot(constraintNormalLin);
- fillMultiBodyConstraint(constraintRow, data, 0, 0, constraintNormalAng,
- constraintNormalLin, pivotAworld, pivotBworld,
- posError,
- infoGlobal,
- -m_maxAppliedImpulse, m_maxAppliedImpulse);
- }
- else
- { //i>=3
- constraintNormalAng = frameAworld.getColumn(i % 3);
- posError = angleDiff[i % 3];
- fillMultiBodyConstraint(constraintRow, data, 0, 0, constraintNormalAng,
- constraintNormalLin, pivotAworld, pivotBworld,
- posError,
- infoGlobal,
- -m_maxAppliedImpulse, m_maxAppliedImpulse, true);
- }
- }
-}
-
-void btMultiBodyFixedConstraint::debugDraw(class btIDebugDraw* drawer)
-{
- btTransform tr;
- tr.setIdentity();
-
- if (m_rigidBodyA)
- {
- btVector3 pivot = m_rigidBodyA->getCenterOfMassTransform() * m_pivotInA;
- tr.setOrigin(pivot);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_bodyA)
- {
- btVector3 pivotAworld = m_bodyA->localPosToWorld(m_linkA, m_pivotInA);
- tr.setOrigin(pivotAworld);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_rigidBodyB)
- {
- // that ideally should draw the same frame
- btVector3 pivot = m_rigidBodyB->getCenterOfMassTransform() * m_pivotInB;
- tr.setOrigin(pivot);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_bodyB)
- {
- btVector3 pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
- tr.setOrigin(pivotBworld);
- drawer->drawTransform(tr, 0.1);
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.h
deleted file mode 100644
index adb1cb47da..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyFixedConstraint.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_MULTIBODY_FIXED_CONSTRAINT_H
-#define BT_MULTIBODY_FIXED_CONSTRAINT_H
-
-#include "btMultiBodyConstraint.h"
-
-class btMultiBodyFixedConstraint : public btMultiBodyConstraint
-{
-protected:
- btRigidBody* m_rigidBodyA;
- btRigidBody* m_rigidBodyB;
- btVector3 m_pivotInA;
- btVector3 m_pivotInB;
- btMatrix3x3 m_frameInA;
- btMatrix3x3 m_frameInB;
-
-public:
- btMultiBodyFixedConstraint(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB);
- btMultiBodyFixedConstraint(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB);
-
- virtual ~btMultiBodyFixedConstraint();
-
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal);
-
- const btVector3& getPivotInA() const
- {
- return m_pivotInA;
- }
-
- void setPivotInA(const btVector3& pivotInA)
- {
- m_pivotInA = pivotInA;
- }
-
- const btVector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- virtual void setPivotInB(const btVector3& pivotInB)
- {
- m_pivotInB = pivotInB;
- }
-
- const btMatrix3x3& getFrameInA() const
- {
- return m_frameInA;
- }
-
- void setFrameInA(const btMatrix3x3& frameInA)
- {
- m_frameInA = frameInA;
- }
-
- const btMatrix3x3& getFrameInB() const
- {
- return m_frameInB;
- }
-
- virtual void setFrameInB(const btMatrix3x3& frameInB)
- {
- m_frameInB = frameInB;
- }
-
- virtual void debugDraw(class btIDebugDraw* drawer);
-};
-
-#endif //BT_MULTIBODY_FIXED_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.cpp
deleted file mode 100644
index ee02cf9b07..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.cpp
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodyGearConstraint.h"
-#include "btMultiBody.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-btMultiBodyGearConstraint::btMultiBodyGearConstraint(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB)
- : btMultiBodyConstraint(bodyA, bodyB, linkA, linkB, 1, false, MULTIBODY_CONSTRAINT_GEAR),
- m_gearRatio(1),
- m_gearAuxLink(-1),
- m_erp(0),
- m_relativePositionTarget(0)
-{
-}
-
-void btMultiBodyGearConstraint::finalizeMultiDof()
-{
- allocateJacobiansMultiDof();
-
- m_numDofsFinalized = m_jacSizeBoth;
-}
-
-btMultiBodyGearConstraint::~btMultiBodyGearConstraint()
-{
-}
-
-int btMultiBodyGearConstraint::getIslandIdA() const
-{
- if (m_bodyA)
- {
- if (m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodyGearConstraint::getIslandIdB() const
-{
- if (m_bodyB)
- {
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-void btMultiBodyGearConstraint::createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal)
-{
- // only positions need to be updated -- data.m_jacobians and force
- // directions were set in the ctor and never change.
-
- if (m_numDofsFinalized != m_jacSizeBoth)
- {
- finalizeMultiDof();
- }
-
- //don't crash
- if (m_numDofsFinalized != m_jacSizeBoth)
- return;
-
- if (m_maxAppliedImpulse == 0.f)
- return;
-
- // note: we rely on the fact that data.m_jacobians are
- // always initialized to zero by the Constraint ctor
- int linkDoF = 0;
- unsigned int offsetA = 6 + (m_bodyA->getLink(m_linkA).m_dofOffset + linkDoF);
- unsigned int offsetB = 6 + (m_bodyB->getLink(m_linkB).m_dofOffset + linkDoF);
-
- // row 0: the lower bound
- jacobianA(0)[offsetA] = 1;
- jacobianB(0)[offsetB] = m_gearRatio;
-
- btScalar posError = 0;
- const btVector3 dummy(0, 0, 0);
-
- btScalar kp = 1;
- btScalar kd = 1;
- int numRows = getNumRows();
-
- for (int row = 0; row < numRows; row++)
- {
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
-
- int dof = 0;
- btScalar currentPosition = m_bodyA->getJointPosMultiDof(m_linkA)[dof];
- btScalar currentVelocity = m_bodyA->getJointVelMultiDof(m_linkA)[dof];
- btScalar auxVel = 0;
-
- if (m_gearAuxLink >= 0)
- {
- auxVel = m_bodyA->getJointVelMultiDof(m_gearAuxLink)[dof];
- }
- currentVelocity += auxVel;
- if (m_erp != 0)
- {
- btScalar currentPositionA = m_bodyA->getJointPosMultiDof(m_linkA)[dof];
- if (m_gearAuxLink >= 0)
- {
- currentPositionA -= m_bodyA->getJointPosMultiDof(m_gearAuxLink)[dof];
- }
- btScalar currentPositionB = m_gearRatio * m_bodyA->getJointPosMultiDof(m_linkB)[dof];
- btScalar diff = currentPositionB + currentPositionA;
- btScalar desiredPositionDiff = this->m_relativePositionTarget;
- posError = -m_erp * (desiredPositionDiff - diff);
- }
-
- btScalar desiredRelativeVelocity = auxVel;
-
- fillMultiBodyConstraint(constraintRow, data, jacobianA(row), jacobianB(row), dummy, dummy, dummy, dummy, posError, infoGlobal, -m_maxAppliedImpulse, m_maxAppliedImpulse, false, 1, false, desiredRelativeVelocity);
-
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = row;
- {
- //expect either prismatic or revolute joint type for now
- btAssert((m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::eRevolute) || (m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::ePrismatic));
- switch (m_bodyA->getLink(m_linkA).m_jointType)
- {
- case btMultibodyLink::eRevolute:
- {
- constraintRow.m_contactNormal1.setZero();
- constraintRow.m_contactNormal2.setZero();
- btVector3 revoluteAxisInWorld = quatRotate(m_bodyA->getLink(m_linkA).m_cachedWorldTransform.getRotation(), m_bodyA->getLink(m_linkA).m_axes[0].m_topVec);
- constraintRow.m_relpos1CrossNormal = revoluteAxisInWorld;
- constraintRow.m_relpos2CrossNormal = -revoluteAxisInWorld;
-
- break;
- }
- case btMultibodyLink::ePrismatic:
- {
- btVector3 prismaticAxisInWorld = quatRotate(m_bodyA->getLink(m_linkA).m_cachedWorldTransform.getRotation(), m_bodyA->getLink(m_linkA).m_axes[0].m_bottomVec);
- constraintRow.m_contactNormal1 = prismaticAxisInWorld;
- constraintRow.m_contactNormal2 = -prismaticAxisInWorld;
- constraintRow.m_relpos1CrossNormal.setZero();
- constraintRow.m_relpos2CrossNormal.setZero();
- break;
- }
- default:
- {
- btAssert(0);
- }
- };
- }
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.h
deleted file mode 100644
index 31888fbc68..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyGearConstraint.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_MULTIBODY_GEAR_CONSTRAINT_H
-#define BT_MULTIBODY_GEAR_CONSTRAINT_H
-
-#include "btMultiBodyConstraint.h"
-
-class btMultiBodyGearConstraint : public btMultiBodyConstraint
-{
-protected:
- btRigidBody* m_rigidBodyA;
- btRigidBody* m_rigidBodyB;
- btVector3 m_pivotInA;
- btVector3 m_pivotInB;
- btMatrix3x3 m_frameInA;
- btMatrix3x3 m_frameInB;
- btScalar m_gearRatio;
- int m_gearAuxLink;
- btScalar m_erp;
- btScalar m_relativePositionTarget;
-
-public:
- //btMultiBodyGearConstraint(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB);
- btMultiBodyGearConstraint(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB);
-
- virtual ~btMultiBodyGearConstraint();
-
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal);
-
- const btVector3& getPivotInA() const
- {
- return m_pivotInA;
- }
-
- void setPivotInA(const btVector3& pivotInA)
- {
- m_pivotInA = pivotInA;
- }
-
- const btVector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- virtual void setPivotInB(const btVector3& pivotInB)
- {
- m_pivotInB = pivotInB;
- }
-
- const btMatrix3x3& getFrameInA() const
- {
- return m_frameInA;
- }
-
- void setFrameInA(const btMatrix3x3& frameInA)
- {
- m_frameInA = frameInA;
- }
-
- const btMatrix3x3& getFrameInB() const
- {
- return m_frameInB;
- }
-
- virtual void setFrameInB(const btMatrix3x3& frameInB)
- {
- m_frameInB = frameInB;
- }
-
- virtual void debugDraw(class btIDebugDraw* drawer)
- {
- //todo(erwincoumans)
- }
-
- virtual void setGearRatio(btScalar gearRatio)
- {
- m_gearRatio = gearRatio;
- }
- virtual void setGearAuxLink(int gearAuxLink)
- {
- m_gearAuxLink = gearAuxLink;
- }
- virtual void setRelativePositionTarget(btScalar relPosTarget)
- {
- m_relativePositionTarget = relPosTarget;
- }
- virtual void setErp(btScalar erp)
- {
- m_erp = erp;
- }
-};
-
-#endif //BT_MULTIBODY_GEAR_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyInplaceSolverIslandCallback.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyInplaceSolverIslandCallback.h
deleted file mode 100644
index 3169b86e61..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyInplaceSolverIslandCallback.h
+++ /dev/null
@@ -1,247 +0,0 @@
-/*
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_MULTIBODY_INPLACE_SOLVER_ISLAND_CALLBACK_H
-#define BT_MULTIBODY_INPLACE_SOLVER_ISLAND_CALLBACK_H
-
-#include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h"
-#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
-#include "BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h"
-#include "btMultiBodyConstraintSolver.h"
-
-SIMD_FORCE_INLINE int btGetConstraintIslandId2(const btTypedConstraint* lhs)
-{
- int islandId;
-
- const btCollisionObject& rcolObj0 = lhs->getRigidBodyA();
- const btCollisionObject& rcolObj1 = lhs->getRigidBodyB();
- islandId = rcolObj0.getIslandTag() >= 0 ? rcolObj0.getIslandTag() : rcolObj1.getIslandTag();
- return islandId;
-}
-class btSortConstraintOnIslandPredicate2
-{
-public:
- bool operator()(const btTypedConstraint* lhs, const btTypedConstraint* rhs) const
- {
- int rIslandId0, lIslandId0;
- rIslandId0 = btGetConstraintIslandId2(rhs);
- lIslandId0 = btGetConstraintIslandId2(lhs);
- return lIslandId0 < rIslandId0;
- }
-};
-
-SIMD_FORCE_INLINE int btGetMultiBodyConstraintIslandId(const btMultiBodyConstraint* lhs)
-{
- int islandId;
-
- int islandTagA = lhs->getIslandIdA();
- int islandTagB = lhs->getIslandIdB();
- islandId = islandTagA >= 0 ? islandTagA : islandTagB;
- return islandId;
-}
-
-class btSortMultiBodyConstraintOnIslandPredicate
-{
-public:
- bool operator()(const btMultiBodyConstraint* lhs, const btMultiBodyConstraint* rhs) const
- {
- int rIslandId0, lIslandId0;
- rIslandId0 = btGetMultiBodyConstraintIslandId(rhs);
- lIslandId0 = btGetMultiBodyConstraintIslandId(lhs);
- return lIslandId0 < rIslandId0;
- }
-};
-
-struct MultiBodyInplaceSolverIslandCallback : public btSimulationIslandManager::IslandCallback
-{
-
- btContactSolverInfo* m_solverInfo;
- btMultiBodyConstraintSolver* m_solver;
- btMultiBodyConstraint** m_multiBodySortedConstraints;
- int m_numMultiBodyConstraints;
-
- btTypedConstraint** m_sortedConstraints;
- int m_numConstraints;
- btIDebugDraw* m_debugDrawer;
- btDispatcher* m_dispatcher;
-
- btAlignedObjectArray<btCollisionObject*> m_bodies;
- btAlignedObjectArray<btCollisionObject*> m_softBodies;
- btAlignedObjectArray<btPersistentManifold*> m_manifolds;
- btAlignedObjectArray<btTypedConstraint*> m_constraints;
- btAlignedObjectArray<btMultiBodyConstraint*> m_multiBodyConstraints;
-
- btAlignedObjectArray<btSolverAnalyticsData> m_islandAnalyticsData;
-
- MultiBodyInplaceSolverIslandCallback(btMultiBodyConstraintSolver* solver,
- btDispatcher* dispatcher)
- : m_solverInfo(NULL),
- m_solver(solver),
- m_multiBodySortedConstraints(NULL),
- m_numConstraints(0),
- m_debugDrawer(NULL),
- m_dispatcher(dispatcher)
- {
- }
-
- MultiBodyInplaceSolverIslandCallback& operator=(const MultiBodyInplaceSolverIslandCallback& other)
- {
- btAssert(0);
- (void)other;
- return *this;
- }
-
- SIMD_FORCE_INLINE virtual void setup(btContactSolverInfo* solverInfo, btTypedConstraint** sortedConstraints, int numConstraints, btMultiBodyConstraint** sortedMultiBodyConstraints, int numMultiBodyConstraints, btIDebugDraw* debugDrawer)
- {
- m_islandAnalyticsData.clear();
- btAssert(solverInfo);
- m_solverInfo = solverInfo;
-
- m_multiBodySortedConstraints = sortedMultiBodyConstraints;
- m_numMultiBodyConstraints = numMultiBodyConstraints;
- m_sortedConstraints = sortedConstraints;
- m_numConstraints = numConstraints;
-
- m_debugDrawer = debugDrawer;
- m_bodies.resize(0);
- m_manifolds.resize(0);
- m_constraints.resize(0);
- m_multiBodyConstraints.resize(0);
- }
-
- void setMultiBodyConstraintSolver(btMultiBodyConstraintSolver* solver)
- {
- m_solver = solver;
- }
-
- virtual void processIsland(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifolds, int numManifolds, int islandId)
- {
- if (islandId < 0)
- {
- ///we don't split islands, so all constraints/contact manifolds/bodies are passed into the solver regardless the island id
- m_solver->solveMultiBodyGroup(bodies, numBodies, manifolds, numManifolds, m_sortedConstraints, m_numConstraints, &m_multiBodySortedConstraints[0], m_numConstraints, *m_solverInfo, m_debugDrawer, m_dispatcher);
- if (m_solverInfo->m_reportSolverAnalytics&1)
- {
- m_solver->m_analyticsData.m_islandId = islandId;
- m_islandAnalyticsData.push_back(m_solver->m_analyticsData);
- }
- }
- else
- {
- //also add all non-contact constraints/joints for this island
- btTypedConstraint** startConstraint = 0;
- btMultiBodyConstraint** startMultiBodyConstraint = 0;
-
- int numCurConstraints = 0;
- int numCurMultiBodyConstraints = 0;
-
- int i;
-
- //find the first constraint for this island
-
- for (i = 0; i < m_numConstraints; i++)
- {
- if (btGetConstraintIslandId2(m_sortedConstraints[i]) == islandId)
- {
- startConstraint = &m_sortedConstraints[i];
- break;
- }
- }
- //count the number of constraints in this island
- for (; i < m_numConstraints; i++)
- {
- if (btGetConstraintIslandId2(m_sortedConstraints[i]) == islandId)
- {
- numCurConstraints++;
- }
- }
-
- for (i = 0; i < m_numMultiBodyConstraints; i++)
- {
- if (btGetMultiBodyConstraintIslandId(m_multiBodySortedConstraints[i]) == islandId)
- {
- startMultiBodyConstraint = &m_multiBodySortedConstraints[i];
- break;
- }
- }
- //count the number of multi body constraints in this island
- for (; i < m_numMultiBodyConstraints; i++)
- {
- if (btGetMultiBodyConstraintIslandId(m_multiBodySortedConstraints[i]) == islandId)
- {
- numCurMultiBodyConstraints++;
- }
- }
-
- //if (m_solverInfo->m_minimumSolverBatchSize<=1)
- //{
- // m_solver->solveGroup( bodies,numBodies,manifolds, numManifolds,startConstraint,numCurConstraints,*m_solverInfo,m_debugDrawer,m_dispatcher);
- //} else
- {
- for (i = 0; i < numBodies; i++)
- {
- bool isSoftBodyType = (bodies[i]->getInternalType() & btCollisionObject::CO_SOFT_BODY);
- if (!isSoftBodyType)
- {
- m_bodies.push_back(bodies[i]);
- }
- else
- {
- m_softBodies.push_back(bodies[i]);
- }
- }
- for (i = 0; i < numManifolds; i++)
- m_manifolds.push_back(manifolds[i]);
- for (i = 0; i < numCurConstraints; i++)
- m_constraints.push_back(startConstraint[i]);
-
- for (i = 0; i < numCurMultiBodyConstraints; i++)
- m_multiBodyConstraints.push_back(startMultiBodyConstraint[i]);
-
- if ((m_multiBodyConstraints.size() + m_constraints.size() + m_manifolds.size()) > m_solverInfo->m_minimumSolverBatchSize)
- {
- processConstraints(islandId);
- }
- else
- {
- //printf("deferred\n");
- }
- }
- }
- }
-
- virtual void processConstraints(int islandId=-1)
- {
- btCollisionObject** bodies = m_bodies.size() ? &m_bodies[0] : 0;
- btPersistentManifold** manifold = m_manifolds.size() ? &m_manifolds[0] : 0;
- btTypedConstraint** constraints = m_constraints.size() ? &m_constraints[0] : 0;
- btMultiBodyConstraint** multiBodyConstraints = m_multiBodyConstraints.size() ? &m_multiBodyConstraints[0] : 0;
-
- //printf("mb contacts = %d, mb constraints = %d\n", mbContacts, m_multiBodyConstraints.size());
-
- m_solver->solveMultiBodyGroup(bodies, m_bodies.size(), manifold, m_manifolds.size(), constraints, m_constraints.size(), multiBodyConstraints, m_multiBodyConstraints.size(), *m_solverInfo, m_debugDrawer, m_dispatcher);
- if (m_bodies.size() && (m_solverInfo->m_reportSolverAnalytics&1))
- {
- m_solver->m_analyticsData.m_islandId = islandId;
- m_islandAnalyticsData.push_back(m_solver->m_analyticsData);
- }
- m_bodies.resize(0);
- m_softBodies.resize(0);
- m_manifolds.resize(0);
- m_constraints.resize(0);
- m_multiBodyConstraints.resize(0);
- }
-};
-
-
-#endif /*BT_MULTIBODY_INPLACE_SOLVER_ISLAND_CALLBACK_H */
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointFeedback.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointFeedback.h
deleted file mode 100644
index d943019e71..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointFeedback.h
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
-Copyright (c) 2015 Google Inc.
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_JOINT_FEEDBACK_H
-#define BT_MULTIBODY_JOINT_FEEDBACK_H
-
-#include "LinearMath/btSpatialAlgebra.h"
-
-struct btMultiBodyJointFeedback
-{
- btSpatialForceVector m_reactionForces;
-};
-
-#endif //BT_MULTIBODY_JOINT_FEEDBACK_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp
deleted file mode 100644
index 94b36ac108..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodyJointLimitConstraint.h"
-#include "btMultiBody.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-btMultiBodyJointLimitConstraint::btMultiBodyJointLimitConstraint(btMultiBody* body, int link, btScalar lower, btScalar upper)
- //:btMultiBodyConstraint(body,0,link,-1,2,true),
- : btMultiBodyConstraint(body, body, link, body->getLink(link).m_parent, 2, true, MULTIBODY_CONSTRAINT_LIMIT),
- m_lowerBound(lower),
- m_upperBound(upper)
-{
-}
-
-void btMultiBodyJointLimitConstraint::finalizeMultiDof()
-{
- // the data.m_jacobians never change, so may as well
- // initialize them here
-
- allocateJacobiansMultiDof();
-
- unsigned int offset = 6 + m_bodyA->getLink(m_linkA).m_dofOffset;
-
- // row 0: the lower bound
- jacobianA(0)[offset] = 1;
- // row 1: the upper bound
- //jacobianA(1)[offset] = -1;
- jacobianB(1)[offset] = -1;
-
- m_numDofsFinalized = m_jacSizeBoth;
-}
-
-btMultiBodyJointLimitConstraint::~btMultiBodyJointLimitConstraint()
-{
-}
-
-int btMultiBodyJointLimitConstraint::getIslandIdA() const
-{
- if (m_bodyA)
- {
- if (m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodyJointLimitConstraint::getIslandIdB() const
-{
- if (m_bodyB)
- {
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-void btMultiBodyJointLimitConstraint::createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal)
-{
- // only positions need to be updated -- data.m_jacobians and force
- // directions were set in the ctor and never change.
-
- if (m_numDofsFinalized != m_jacSizeBoth)
- {
- finalizeMultiDof();
- }
-
- // row 0: the lower bound
- setPosition(0, m_bodyA->getJointPos(m_linkA) - m_lowerBound); //multidof: this is joint-type dependent
-
- // row 1: the upper bound
- setPosition(1, m_upperBound - m_bodyA->getJointPos(m_linkA));
-
- for (int row = 0; row < getNumRows(); row++)
- {
- btScalar penetration = getPosition(row);
-
- //todo: consider adding some safety threshold here
- if (penetration > 0)
- {
- continue;
- }
- btScalar direction = row ? -1 : 1;
-
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = row;
-
- constraintRow.m_multiBodyA = m_bodyA;
- constraintRow.m_multiBodyB = m_bodyB;
- const btScalar posError = 0; //why assume it's zero?
- const btVector3 dummy(0, 0, 0);
-
- btScalar rel_vel = fillMultiBodyConstraint(constraintRow, data, jacobianA(row), jacobianB(row), dummy, dummy, dummy, dummy, posError, infoGlobal, 0, m_maxAppliedImpulse);
-
- {
- //expect either prismatic or revolute joint type for now
- btAssert((m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::eRevolute) || (m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::ePrismatic));
- switch (m_bodyA->getLink(m_linkA).m_jointType)
- {
- case btMultibodyLink::eRevolute:
- {
- constraintRow.m_contactNormal1.setZero();
- constraintRow.m_contactNormal2.setZero();
- btVector3 revoluteAxisInWorld = direction * quatRotate(m_bodyA->getLink(m_linkA).m_cachedWorldTransform.getRotation(), m_bodyA->getLink(m_linkA).m_axes[0].m_topVec);
- constraintRow.m_relpos1CrossNormal = revoluteAxisInWorld;
- constraintRow.m_relpos2CrossNormal = -revoluteAxisInWorld;
-
- break;
- }
- case btMultibodyLink::ePrismatic:
- {
- btVector3 prismaticAxisInWorld = direction * quatRotate(m_bodyA->getLink(m_linkA).m_cachedWorldTransform.getRotation(), m_bodyA->getLink(m_linkA).m_axes[0].m_bottomVec);
- constraintRow.m_contactNormal1 = prismaticAxisInWorld;
- constraintRow.m_contactNormal2 = -prismaticAxisInWorld;
- constraintRow.m_relpos1CrossNormal.setZero();
- constraintRow.m_relpos2CrossNormal.setZero();
-
- break;
- }
- default:
- {
- btAssert(0);
- }
- };
- }
-
- {
- btScalar positionalError = 0.f;
- btScalar velocityError = -rel_vel; // * damping;
- btScalar erp = infoGlobal.m_erp2;
- if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- erp = infoGlobal.m_erp;
- }
- if (penetration > 0)
- {
- positionalError = 0;
- velocityError = -penetration / infoGlobal.m_timeStep;
- }
- else
- {
- positionalError = -penetration * erp / infoGlobal.m_timeStep;
- }
-
- btScalar penetrationImpulse = positionalError * constraintRow.m_jacDiagABInv;
- btScalar velocityImpulse = velocityError * constraintRow.m_jacDiagABInv;
- if (!infoGlobal.m_splitImpulse || (penetration > infoGlobal.m_splitImpulsePenetrationThreshold))
- {
- //combine position and velocity into rhs
- constraintRow.m_rhs = penetrationImpulse + velocityImpulse;
- constraintRow.m_rhsPenetration = 0.f;
- }
- else
- {
- //split position and velocity into rhs and m_rhsPenetration
- constraintRow.m_rhs = velocityImpulse;
- constraintRow.m_rhsPenetration = penetrationImpulse;
- }
- }
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h
deleted file mode 100644
index b810692b4c..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.h
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_JOINT_LIMIT_CONSTRAINT_H
-#define BT_MULTIBODY_JOINT_LIMIT_CONSTRAINT_H
-
-#include "btMultiBodyConstraint.h"
-struct btSolverInfo;
-
-class btMultiBodyJointLimitConstraint : public btMultiBodyConstraint
-{
-protected:
- btScalar m_lowerBound;
- btScalar m_upperBound;
-
-public:
- btMultiBodyJointLimitConstraint(btMultiBody* body, int link, btScalar lower, btScalar upper);
- virtual ~btMultiBodyJointLimitConstraint();
-
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal);
-
- virtual void debugDraw(class btIDebugDraw* drawer)
- {
- //todo(erwincoumans)
- }
- btScalar getLowerBound() const
- {
- return m_lowerBound;
- }
- btScalar getUpperBound() const
- {
- return m_upperBound;
- }
- void setLowerBound(btScalar lower)
- {
- m_lowerBound = lower;
- }
- void setUpperBound(btScalar upper)
- {
- m_upperBound = upper;
- }
-};
-
-#endif //BT_MULTIBODY_JOINT_LIMIT_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp
deleted file mode 100644
index fec9b03213..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodyJointMotor.h"
-#include "btMultiBody.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-btMultiBodyJointMotor::btMultiBodyJointMotor(btMultiBody* body, int link, btScalar desiredVelocity, btScalar maxMotorImpulse)
- : btMultiBodyConstraint(body, body, link, body->getLink(link).m_parent, 1, true, MULTIBODY_CONSTRAINT_1DOF_JOINT_MOTOR),
- m_desiredVelocity(desiredVelocity),
- m_desiredPosition(0),
- m_kd(1.),
- m_kp(0),
- m_erp(1),
- m_rhsClamp(SIMD_INFINITY)
-{
- m_maxAppliedImpulse = maxMotorImpulse;
- // the data.m_jacobians never change, so may as well
- // initialize them here
-}
-
-void btMultiBodyJointMotor::finalizeMultiDof()
-{
- allocateJacobiansMultiDof();
- // note: we rely on the fact that data.m_jacobians are
- // always initialized to zero by the Constraint ctor
- int linkDoF = 0;
- unsigned int offset = 6 + (m_bodyA->getLink(m_linkA).m_dofOffset + linkDoF);
-
- // row 0: the lower bound
- // row 0: the lower bound
- jacobianA(0)[offset] = 1;
-
- m_numDofsFinalized = m_jacSizeBoth;
-}
-
-btMultiBodyJointMotor::btMultiBodyJointMotor(btMultiBody* body, int link, int linkDoF, btScalar desiredVelocity, btScalar maxMotorImpulse)
- //:btMultiBodyConstraint(body,0,link,-1,1,true),
- : btMultiBodyConstraint(body, body, link, body->getLink(link).m_parent, 1, true, MULTIBODY_CONSTRAINT_1DOF_JOINT_MOTOR),
- m_desiredVelocity(desiredVelocity),
- m_desiredPosition(0),
- m_kd(1.),
- m_kp(0),
- m_erp(1),
- m_rhsClamp(SIMD_INFINITY)
-{
- btAssert(linkDoF < body->getLink(link).m_dofCount);
-
- m_maxAppliedImpulse = maxMotorImpulse;
-}
-btMultiBodyJointMotor::~btMultiBodyJointMotor()
-{
-}
-
-int btMultiBodyJointMotor::getIslandIdA() const
-{
- if (this->m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- {
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodyJointMotor::getIslandIdB() const
-{
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- {
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-void btMultiBodyJointMotor::createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal)
-{
- // only positions need to be updated -- data.m_jacobians and force
- // directions were set in the ctor and never change.
-
- if (m_numDofsFinalized != m_jacSizeBoth)
- {
- finalizeMultiDof();
- }
-
- //don't crash
- if (m_numDofsFinalized != m_jacSizeBoth)
- return;
-
- if (m_maxAppliedImpulse == 0.f)
- return;
-
- const btScalar posError = 0;
- const btVector3 dummy(0, 0, 0);
-
- for (int row = 0; row < getNumRows(); row++)
- {
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
-
- int dof = 0;
- btScalar currentPosition = m_bodyA->getJointPosMultiDof(m_linkA)[dof];
- btScalar currentVelocity = m_bodyA->getJointVelMultiDof(m_linkA)[dof];
- btScalar positionStabiliationTerm = m_erp * (m_desiredPosition - currentPosition) / infoGlobal.m_timeStep;
-
- btScalar velocityError = (m_desiredVelocity - currentVelocity);
- btScalar rhs = m_kp * positionStabiliationTerm + currentVelocity + m_kd * velocityError;
- if (rhs > m_rhsClamp)
- {
- rhs = m_rhsClamp;
- }
- if (rhs < -m_rhsClamp)
- {
- rhs = -m_rhsClamp;
- }
-
- fillMultiBodyConstraint(constraintRow, data, jacobianA(row), jacobianB(row), dummy, dummy, dummy, dummy, posError, infoGlobal, -m_maxAppliedImpulse, m_maxAppliedImpulse, false, 1, false, rhs);
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = row;
- {
- //expect either prismatic or revolute joint type for now
- btAssert((m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::eRevolute) || (m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::ePrismatic));
- switch (m_bodyA->getLink(m_linkA).m_jointType)
- {
- case btMultibodyLink::eRevolute:
- {
- constraintRow.m_contactNormal1.setZero();
- constraintRow.m_contactNormal2.setZero();
- btVector3 revoluteAxisInWorld = quatRotate(m_bodyA->getLink(m_linkA).m_cachedWorldTransform.getRotation(), m_bodyA->getLink(m_linkA).m_axes[0].m_topVec);
- constraintRow.m_relpos1CrossNormal = revoluteAxisInWorld;
- constraintRow.m_relpos2CrossNormal = -revoluteAxisInWorld;
-
- break;
- }
- case btMultibodyLink::ePrismatic:
- {
- btVector3 prismaticAxisInWorld = quatRotate(m_bodyA->getLink(m_linkA).m_cachedWorldTransform.getRotation(), m_bodyA->getLink(m_linkA).m_axes[0].m_bottomVec);
- constraintRow.m_contactNormal1 = prismaticAxisInWorld;
- constraintRow.m_contactNormal2 = -prismaticAxisInWorld;
- constraintRow.m_relpos1CrossNormal.setZero();
- constraintRow.m_relpos2CrossNormal.setZero();
-
- break;
- }
- default:
- {
- btAssert(0);
- }
- };
- }
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.h
deleted file mode 100644
index 1aca36352e..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyJointMotor.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_MULTIBODY_JOINT_MOTOR_H
-#define BT_MULTIBODY_JOINT_MOTOR_H
-
-#include "btMultiBodyConstraint.h"
-struct btSolverInfo;
-
-class btMultiBodyJointMotor : public btMultiBodyConstraint
-{
-protected:
- btScalar m_desiredVelocity;
- btScalar m_desiredPosition;
- btScalar m_kd;
- btScalar m_kp;
- btScalar m_erp;
- btScalar m_rhsClamp; //maximum error
-
-public:
- btMultiBodyJointMotor(btMultiBody* body, int link, btScalar desiredVelocity, btScalar maxMotorImpulse);
- btMultiBodyJointMotor(btMultiBody* body, int link, int linkDoF, btScalar desiredVelocity, btScalar maxMotorImpulse);
- virtual ~btMultiBodyJointMotor();
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal);
-
- virtual void setVelocityTarget(btScalar velTarget, btScalar kd = 1.f)
- {
- m_desiredVelocity = velTarget;
- m_kd = kd;
- }
-
- virtual void setPositionTarget(btScalar posTarget, btScalar kp = 1.f)
- {
- m_desiredPosition = posTarget;
- m_kp = kp;
- }
-
- virtual void setErp(btScalar erp)
- {
- m_erp = erp;
- }
- virtual btScalar getErp() const
- {
- return m_erp;
- }
- virtual void setRhsClamp(btScalar rhsClamp)
- {
- m_rhsClamp = rhsClamp;
- }
- virtual void debugDraw(class btIDebugDraw* drawer)
- {
- //todo(erwincoumans)
- }
-};
-
-#endif //BT_MULTIBODY_JOINT_MOTOR_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLink.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLink.h
deleted file mode 100644
index 5a1429340f..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLink.h
+++ /dev/null
@@ -1,303 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_LINK_H
-#define BT_MULTIBODY_LINK_H
-
-#include "LinearMath/btQuaternion.h"
-#include "LinearMath/btVector3.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-enum btMultiBodyLinkFlags
-{
- BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION = 1,
- BT_MULTIBODYLINKFLAGS_DISABLE_ALL_PARENT_COLLISION = 2,
-};
-
-//both defines are now permanently enabled
-#define BT_MULTIBODYLINK_INCLUDE_PLANAR_JOINTS
-#define TEST_SPATIAL_ALGEBRA_LAYER
-
-//
-// Various spatial helper functions
-//
-
-//namespace {
-
-#include "LinearMath/btSpatialAlgebra.h"
-
-//}
-
-//
-// Link struct
-//
-
-struct btMultibodyLink
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btScalar m_mass; // mass of link
- btVector3 m_inertiaLocal; // inertia of link (local frame; diagonal)
-
- int m_parent; // index of the parent link (assumed to be < index of this link), or -1 if parent is the base link.
-
- btQuaternion m_zeroRotParentToThis; // rotates vectors in parent-frame to vectors in local-frame (when q=0). constant.
-
- btVector3 m_dVector; // vector from the inboard joint pos to this link's COM. (local frame.) constant.
- //this is set to zero for planar joint (see also m_eVector comment)
-
- // m_eVector is constant, but depends on the joint type:
- // revolute, fixed, prismatic, spherical: vector from parent's COM to the pivot point, in PARENT's frame.
- // planar: vector from COM of parent to COM of this link, WHEN Q = 0. (local frame.)
- // todo: fix the planar so it is consistent with the other joints
-
- btVector3 m_eVector;
-
- btSpatialMotionVector m_absFrameTotVelocity, m_absFrameLocVelocity;
-
- enum eFeatherstoneJointType
- {
- eRevolute = 0,
- ePrismatic = 1,
- eSpherical = 2,
- ePlanar = 3,
- eFixed = 4,
- eInvalid
- };
-
- // "axis" = spatial joint axis (Mirtich Defn 9 p104). (expressed in local frame.) constant.
- // for prismatic: m_axesTop[0] = zero;
- // m_axesBottom[0] = unit vector along the joint axis.
- // for revolute: m_axesTop[0] = unit vector along the rotation axis (u);
- // m_axesBottom[0] = u cross m_dVector (i.e. COM linear motion due to the rotation at the joint)
- //
- // for spherical: m_axesTop[0][1][2] (u1,u2,u3) form a 3x3 identity matrix (3 rotation axes)
- // m_axesBottom[0][1][2] cross u1,u2,u3 (i.e. COM linear motion due to the rotation at the joint)
- //
- // for planar: m_axesTop[0] = unit vector along the rotation axis (u); defines the plane of motion
- // m_axesTop[1][2] = zero
- // m_axesBottom[0] = zero
- // m_axesBottom[1][2] = unit vectors along the translational axes on that plane
- btSpatialMotionVector m_axes[6];
- void setAxisTop(int dof, const btVector3 &axis) { m_axes[dof].m_topVec = axis; }
- void setAxisBottom(int dof, const btVector3 &axis)
- {
- m_axes[dof].m_bottomVec = axis;
- }
- void setAxisTop(int dof, const btScalar &x, const btScalar &y, const btScalar &z)
- {
- m_axes[dof].m_topVec.setValue(x, y, z);
- }
- void setAxisBottom(int dof, const btScalar &x, const btScalar &y, const btScalar &z)
- {
- m_axes[dof].m_bottomVec.setValue(x, y, z);
- }
- const btVector3 &getAxisTop(int dof) const { return m_axes[dof].m_topVec; }
- const btVector3 &getAxisBottom(int dof) const { return m_axes[dof].m_bottomVec; }
-
- int m_dofOffset, m_cfgOffset;
-
- btQuaternion m_cachedRotParentToThis; // rotates vectors in parent frame to vectors in local frame
- btVector3 m_cachedRVector; // vector from COM of parent to COM of this link, in local frame.
-
- // predicted verstion
- btQuaternion m_cachedRotParentToThis_interpolate; // rotates vectors in parent frame to vectors in local frame
- btVector3 m_cachedRVector_interpolate; // vector from COM of parent to COM of this link, in local frame.
-
- btVector3 m_appliedForce; // In WORLD frame
- btVector3 m_appliedTorque; // In WORLD frame
-
- btVector3 m_appliedConstraintForce; // In WORLD frame
- btVector3 m_appliedConstraintTorque; // In WORLD frame
-
- btScalar m_jointPos[7];
- btScalar m_jointPos_interpolate[7];
-
- //m_jointTorque is the joint torque applied by the user using 'addJointTorque'.
- //It gets set to zero after each internal stepSimulation call
- btScalar m_jointTorque[6];
-
- class btMultiBodyLinkCollider *m_collider;
- int m_flags;
-
- int m_dofCount, m_posVarCount; //redundant but handy
-
- eFeatherstoneJointType m_jointType;
-
- struct btMultiBodyJointFeedback *m_jointFeedback;
-
- btTransform m_cachedWorldTransform; //this cache is updated when calling btMultiBody::forwardKinematics
-
- const char *m_linkName; //m_linkName memory needs to be managed by the developer/user!
- const char *m_jointName; //m_jointName memory needs to be managed by the developer/user!
- const void *m_userPtr; //m_userPtr ptr needs to be managed by the developer/user!
-
- btScalar m_jointDamping; //todo: implement this internally. It is unused for now, it is set by a URDF loader. User can apply manual damping.
- btScalar m_jointFriction; //todo: implement this internally. It is unused for now, it is set by a URDF loader. User can apply manual friction using a velocity motor.
- btScalar m_jointLowerLimit; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
- btScalar m_jointUpperLimit; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
- btScalar m_jointMaxForce; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
- btScalar m_jointMaxVelocity; //todo: implement this internally. It is unused for now, it is set by a URDF loader.
-
- // ctor: set some sensible defaults
- btMultibodyLink()
- : m_mass(1),
- m_parent(-1),
- m_zeroRotParentToThis(0, 0, 0, 1),
- m_cachedRotParentToThis(0, 0, 0, 1),
- m_cachedRotParentToThis_interpolate(0, 0, 0, 1),
- m_collider(0),
- m_flags(0),
- m_dofCount(0),
- m_posVarCount(0),
- m_jointType(btMultibodyLink::eInvalid),
- m_jointFeedback(0),
- m_linkName(0),
- m_jointName(0),
- m_userPtr(0),
- m_jointDamping(0),
- m_jointFriction(0),
- m_jointLowerLimit(0),
- m_jointUpperLimit(0),
- m_jointMaxForce(0),
- m_jointMaxVelocity(0)
- {
- m_inertiaLocal.setValue(1, 1, 1);
- setAxisTop(0, 0., 0., 0.);
- setAxisBottom(0, 1., 0., 0.);
- m_dVector.setValue(0, 0, 0);
- m_eVector.setValue(0, 0, 0);
- m_cachedRVector.setValue(0, 0, 0);
- m_cachedRVector_interpolate.setValue(0, 0, 0);
- m_appliedForce.setValue(0, 0, 0);
- m_appliedTorque.setValue(0, 0, 0);
- m_appliedConstraintForce.setValue(0, 0, 0);
- m_appliedConstraintTorque.setValue(0, 0, 0);
- //
- m_jointPos[0] = m_jointPos[1] = m_jointPos[2] = m_jointPos[4] = m_jointPos[5] = m_jointPos[6] = 0.f;
- m_jointPos[3] = 1.f; //"quat.w"
- m_jointTorque[0] = m_jointTorque[1] = m_jointTorque[2] = m_jointTorque[3] = m_jointTorque[4] = m_jointTorque[5] = 0.f;
- m_cachedWorldTransform.setIdentity();
- }
-
- // routine to update m_cachedRotParentToThis and m_cachedRVector
- void updateCacheMultiDof(btScalar *pq = 0)
- {
- btScalar *pJointPos = (pq ? pq : &m_jointPos[0]);
- btQuaternion& cachedRot = m_cachedRotParentToThis;
- btVector3& cachedVector = m_cachedRVector;
- switch (m_jointType)
- {
- case eRevolute:
- {
- cachedRot = btQuaternion(getAxisTop(0), -pJointPos[0]) * m_zeroRotParentToThis;
- cachedVector = m_dVector + quatRotate(m_cachedRotParentToThis, m_eVector);
-
- break;
- }
- case ePrismatic:
- {
- // m_cachedRotParentToThis never changes, so no need to update
- cachedVector = m_dVector + quatRotate(m_cachedRotParentToThis, m_eVector) + pJointPos[0] * getAxisBottom(0);
-
- break;
- }
- case eSpherical:
- {
- cachedRot = btQuaternion(pJointPos[0], pJointPos[1], pJointPos[2], -pJointPos[3]) * m_zeroRotParentToThis;
- cachedVector = m_dVector + quatRotate(cachedRot, m_eVector);
-
- break;
- }
- case ePlanar:
- {
- cachedRot = btQuaternion(getAxisTop(0), -pJointPos[0]) * m_zeroRotParentToThis;
- cachedVector = quatRotate(btQuaternion(getAxisTop(0), -pJointPos[0]), pJointPos[1] * getAxisBottom(1) + pJointPos[2] * getAxisBottom(2)) + quatRotate(cachedRot, m_eVector);
-
- break;
- }
- case eFixed:
- {
- cachedRot = m_zeroRotParentToThis;
- cachedVector = m_dVector + quatRotate(cachedRot, m_eVector);
-
- break;
- }
- default:
- {
- //invalid type
- btAssert(0);
- }
- }
- m_cachedRotParentToThis_interpolate = m_cachedRotParentToThis;
- m_cachedRVector_interpolate = m_cachedRVector;
- }
-
- void updateInterpolationCacheMultiDof()
- {
- btScalar *pJointPos = &m_jointPos_interpolate[0];
-
- btQuaternion& cachedRot = m_cachedRotParentToThis_interpolate;
- btVector3& cachedVector = m_cachedRVector_interpolate;
- switch (m_jointType)
- {
- case eRevolute:
- {
- cachedRot = btQuaternion(getAxisTop(0), -pJointPos[0]) * m_zeroRotParentToThis;
- cachedVector = m_dVector + quatRotate(m_cachedRotParentToThis, m_eVector);
-
- break;
- }
- case ePrismatic:
- {
- // m_cachedRotParentToThis never changes, so no need to update
- cachedVector = m_dVector + quatRotate(m_cachedRotParentToThis, m_eVector) + pJointPos[0] * getAxisBottom(0);
-
- break;
- }
- case eSpherical:
- {
- cachedRot = btQuaternion(pJointPos[0], pJointPos[1], pJointPos[2], -pJointPos[3]) * m_zeroRotParentToThis;
- cachedVector = m_dVector + quatRotate(cachedRot, m_eVector);
-
- break;
- }
- case ePlanar:
- {
- cachedRot = btQuaternion(getAxisTop(0), -pJointPos[0]) * m_zeroRotParentToThis;
- cachedVector = quatRotate(btQuaternion(getAxisTop(0), -pJointPos[0]), pJointPos[1] * getAxisBottom(1) + pJointPos[2] * getAxisBottom(2)) + quatRotate(cachedRot, m_eVector);
-
- break;
- }
- case eFixed:
- {
- cachedRot = m_zeroRotParentToThis;
- cachedVector = m_dVector + quatRotate(cachedRot, m_eVector);
-
- break;
- }
- default:
- {
- //invalid type
- btAssert(0);
- }
- }
- }
-
-
-
-};
-
-#endif //BT_MULTIBODY_LINK_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLinkCollider.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLinkCollider.h
deleted file mode 100644
index 3dc35a5814..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyLinkCollider.h
+++ /dev/null
@@ -1,195 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_FEATHERSTONE_LINK_COLLIDER_H
-#define BT_FEATHERSTONE_LINK_COLLIDER_H
-
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-#include "btMultiBody.h"
-#include "LinearMath/btSerializer.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btMultiBodyLinkColliderData btMultiBodyLinkColliderDoubleData
-#define btMultiBodyLinkColliderDataName "btMultiBodyLinkColliderDoubleData"
-#else
-#define btMultiBodyLinkColliderData btMultiBodyLinkColliderFloatData
-#define btMultiBodyLinkColliderDataName "btMultiBodyLinkColliderFloatData"
-#endif
-
-class btMultiBodyLinkCollider : public btCollisionObject
-{
- //protected:
-public:
- btMultiBody* m_multiBody;
- int m_link;
-
- virtual ~btMultiBodyLinkCollider()
- {
-
- }
- btMultiBodyLinkCollider(btMultiBody* multiBody, int link)
- : m_multiBody(multiBody),
- m_link(link)
- {
- m_checkCollideWith = true;
- //we need to remove the 'CF_STATIC_OBJECT' flag, otherwise links/base doesn't merge islands
- //this means that some constraints might point to bodies that are not in the islands, causing crashes
- //if (link>=0 || (multiBody && !multiBody->hasFixedBase()))
- {
- m_collisionFlags &= (~btCollisionObject::CF_STATIC_OBJECT);
- }
- // else
- //{
- // m_collisionFlags |= (btCollisionObject::CF_STATIC_OBJECT);
- //}
-
- m_internalType = CO_FEATHERSTONE_LINK;
- }
- static btMultiBodyLinkCollider* upcast(btCollisionObject* colObj)
- {
- if (colObj->getInternalType() & btCollisionObject::CO_FEATHERSTONE_LINK)
- return (btMultiBodyLinkCollider*)colObj;
- return 0;
- }
- static const btMultiBodyLinkCollider* upcast(const btCollisionObject* colObj)
- {
- if (colObj->getInternalType() & btCollisionObject::CO_FEATHERSTONE_LINK)
- return (btMultiBodyLinkCollider*)colObj;
- return 0;
- }
-
- virtual bool checkCollideWithOverride(const btCollisionObject* co) const
- {
- const btMultiBodyLinkCollider* other = btMultiBodyLinkCollider::upcast(co);
- if (!other)
- return true;
- if (other->m_multiBody != this->m_multiBody)
- return true;
- if (!m_multiBody->hasSelfCollision())
- return false;
-
- //check if 'link' has collision disabled
- if (m_link >= 0)
- {
- const btMultibodyLink& link = m_multiBody->getLink(this->m_link);
- if (link.m_flags & BT_MULTIBODYLINKFLAGS_DISABLE_ALL_PARENT_COLLISION)
- {
- int parent_of_this = m_link;
- while (1)
- {
- if (parent_of_this == -1)
- break;
- parent_of_this = m_multiBody->getLink(parent_of_this).m_parent;
- if (parent_of_this == other->m_link)
- {
- return false;
- }
- }
- }
- else if (link.m_flags & BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION)
- {
- if (link.m_parent == other->m_link)
- return false;
- }
- }
-
- if (other->m_link >= 0)
- {
- const btMultibodyLink& otherLink = other->m_multiBody->getLink(other->m_link);
- if (otherLink.m_flags & BT_MULTIBODYLINKFLAGS_DISABLE_ALL_PARENT_COLLISION)
- {
- int parent_of_other = other->m_link;
- while (1)
- {
- if (parent_of_other == -1)
- break;
- parent_of_other = m_multiBody->getLink(parent_of_other).m_parent;
- if (parent_of_other == this->m_link)
- return false;
- }
- }
- else if (otherLink.m_flags & BT_MULTIBODYLINKFLAGS_DISABLE_PARENT_COLLISION)
- {
- if (otherLink.m_parent == this->m_link)
- return false;
- }
- }
- return true;
- }
-
- bool isStaticOrKinematic() const
- {
- return isStaticOrKinematicObject();
- }
-
- bool isKinematic() const
- {
- return isKinematicObject();
- }
-
- void setDynamicType(int dynamicType)
- {
- int oldFlags = getCollisionFlags();
- oldFlags &= ~(btCollisionObject::CF_STATIC_OBJECT | btCollisionObject::CF_KINEMATIC_OBJECT);
- setCollisionFlags(oldFlags | dynamicType);
- }
-
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
-};
-
-// clang-format off
-
-struct btMultiBodyLinkColliderFloatData
-{
- btCollisionObjectFloatData m_colObjData;
- btMultiBodyFloatData *m_multiBody;
- int m_link;
- char m_padding[4];
-};
-
-struct btMultiBodyLinkColliderDoubleData
-{
- btCollisionObjectDoubleData m_colObjData;
- btMultiBodyDoubleData *m_multiBody;
- int m_link;
- char m_padding[4];
-};
-
-// clang-format on
-
-SIMD_FORCE_INLINE int btMultiBodyLinkCollider::calculateSerializeBufferSize() const
-{
- return sizeof(btMultiBodyLinkColliderData);
-}
-
-SIMD_FORCE_INLINE const char* btMultiBodyLinkCollider::serialize(void* dataBuffer, class btSerializer* serializer) const
-{
- btMultiBodyLinkColliderData* dataOut = (btMultiBodyLinkColliderData*)dataBuffer;
- btCollisionObject::serialize(&dataOut->m_colObjData, serializer);
-
- dataOut->m_link = this->m_link;
- dataOut->m_multiBody = (btMultiBodyData*)serializer->getUniquePointer(m_multiBody);
-
- // Fill padding with zeros to appease msan.
- memset(dataOut->m_padding, 0, sizeof(dataOut->m_padding));
-
- return btMultiBodyLinkColliderDataName;
-}
-
-#endif //BT_FEATHERSTONE_LINK_COLLIDER_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.cpp
deleted file mode 100644
index f2186a93e9..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.cpp
+++ /dev/null
@@ -1,966 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2018 Google Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h"
-
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-#include "BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h"
-
-#define DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
-
-static bool interleaveContactAndFriction1 = false;
-
-struct btJointNode1
-{
- int jointIndex; // pointer to enclosing dxJoint object
- int otherBodyIndex; // *other* body this joint is connected to
- int nextJointNodeIndex; //-1 for null
- int constraintRowIndex;
-};
-
-// Helper function to compute a delta velocity in the constraint space.
-static btScalar computeDeltaVelocityInConstraintSpace(
- const btVector3& angularDeltaVelocity,
- const btVector3& contactNormal,
- btScalar invMass,
- const btVector3& angularJacobian,
- const btVector3& linearJacobian)
-{
- return angularDeltaVelocity.dot(angularJacobian) + contactNormal.dot(linearJacobian) * invMass;
-}
-
-// Faster version of computeDeltaVelocityInConstraintSpace that can be used when contactNormal and linearJacobian are
-// identical.
-static btScalar computeDeltaVelocityInConstraintSpace(
- const btVector3& angularDeltaVelocity,
- btScalar invMass,
- const btVector3& angularJacobian)
-{
- return angularDeltaVelocity.dot(angularJacobian) + invMass;
-}
-
-// Helper function to compute a delta velocity in the constraint space.
-static btScalar computeDeltaVelocityInConstraintSpace(const btScalar* deltaVelocity, const btScalar* jacobian, int size)
-{
- btScalar result = 0;
- for (int i = 0; i < size; ++i)
- result += deltaVelocity[i] * jacobian[i];
-
- return result;
-}
-
-static btScalar computeConstraintMatrixDiagElementMultiBody(
- const btAlignedObjectArray<btSolverBody>& solverBodyPool,
- const btMultiBodyJacobianData& data,
- const btMultiBodySolverConstraint& constraint)
-{
- btScalar ret = 0;
-
- const btMultiBody* multiBodyA = constraint.m_multiBodyA;
- const btMultiBody* multiBodyB = constraint.m_multiBodyB;
-
- if (multiBodyA)
- {
- const btScalar* jacA = &data.m_jacobians[constraint.m_jacAindex];
- const btScalar* deltaA = &data.m_deltaVelocitiesUnitImpulse[constraint.m_jacAindex];
- const int ndofA = multiBodyA->getNumDofs() + 6;
- ret += computeDeltaVelocityInConstraintSpace(deltaA, jacA, ndofA);
- }
- else
- {
- const int solverBodyIdA = constraint.m_solverBodyIdA;
- btAssert(solverBodyIdA != -1);
- const btSolverBody* solverBodyA = &solverBodyPool[solverBodyIdA];
- const btScalar invMassA = solverBodyA->m_originalBody ? solverBodyA->m_originalBody->getInvMass() : 0.0;
- ret += computeDeltaVelocityInConstraintSpace(
- constraint.m_relpos1CrossNormal,
- invMassA,
- constraint.m_angularComponentA);
- }
-
- if (multiBodyB)
- {
- const btScalar* jacB = &data.m_jacobians[constraint.m_jacBindex];
- const btScalar* deltaB = &data.m_deltaVelocitiesUnitImpulse[constraint.m_jacBindex];
- const int ndofB = multiBodyB->getNumDofs() + 6;
- ret += computeDeltaVelocityInConstraintSpace(deltaB, jacB, ndofB);
- }
- else
- {
- const int solverBodyIdB = constraint.m_solverBodyIdB;
- btAssert(solverBodyIdB != -1);
- const btSolverBody* solverBodyB = &solverBodyPool[solverBodyIdB];
- const btScalar invMassB = solverBodyB->m_originalBody ? solverBodyB->m_originalBody->getInvMass() : 0.0;
- ret += computeDeltaVelocityInConstraintSpace(
- constraint.m_relpos2CrossNormal,
- invMassB,
- constraint.m_angularComponentB);
- }
-
- return ret;
-}
-
-static btScalar computeConstraintMatrixOffDiagElementMultiBody(
- const btAlignedObjectArray<btSolverBody>& solverBodyPool,
- const btMultiBodyJacobianData& data,
- const btMultiBodySolverConstraint& constraint,
- const btMultiBodySolverConstraint& offDiagConstraint)
-{
- btScalar offDiagA = btScalar(0);
-
- const btMultiBody* multiBodyA = constraint.m_multiBodyA;
- const btMultiBody* multiBodyB = constraint.m_multiBodyB;
- const btMultiBody* offDiagMultiBodyA = offDiagConstraint.m_multiBodyA;
- const btMultiBody* offDiagMultiBodyB = offDiagConstraint.m_multiBodyB;
-
- // Assumed at least one system is multibody
- btAssert(multiBodyA || multiBodyB);
- btAssert(offDiagMultiBodyA || offDiagMultiBodyB);
-
- if (offDiagMultiBodyA)
- {
- const btScalar* offDiagJacA = &data.m_jacobians[offDiagConstraint.m_jacAindex];
-
- if (offDiagMultiBodyA == multiBodyA)
- {
- const int ndofA = multiBodyA->getNumDofs() + 6;
- const btScalar* deltaA = &data.m_deltaVelocitiesUnitImpulse[constraint.m_jacAindex];
- offDiagA += computeDeltaVelocityInConstraintSpace(deltaA, offDiagJacA, ndofA);
- }
- else if (offDiagMultiBodyA == multiBodyB)
- {
- const int ndofB = multiBodyB->getNumDofs() + 6;
- const btScalar* deltaB = &data.m_deltaVelocitiesUnitImpulse[constraint.m_jacBindex];
- offDiagA += computeDeltaVelocityInConstraintSpace(deltaB, offDiagJacA, ndofB);
- }
- }
- else
- {
- const int solverBodyIdA = constraint.m_solverBodyIdA;
- const int solverBodyIdB = constraint.m_solverBodyIdB;
-
- const int offDiagSolverBodyIdA = offDiagConstraint.m_solverBodyIdA;
- btAssert(offDiagSolverBodyIdA != -1);
-
- if (offDiagSolverBodyIdA == solverBodyIdA)
- {
- btAssert(solverBodyIdA != -1);
- const btSolverBody* solverBodyA = &solverBodyPool[solverBodyIdA];
- const btScalar invMassA = solverBodyA->m_originalBody ? solverBodyA->m_originalBody->getInvMass() : 0.0;
- offDiagA += computeDeltaVelocityInConstraintSpace(
- offDiagConstraint.m_relpos1CrossNormal,
- offDiagConstraint.m_contactNormal1,
- invMassA, constraint.m_angularComponentA,
- constraint.m_contactNormal1);
- }
- else if (offDiagSolverBodyIdA == solverBodyIdB)
- {
- btAssert(solverBodyIdB != -1);
- const btSolverBody* solverBodyB = &solverBodyPool[solverBodyIdB];
- const btScalar invMassB = solverBodyB->m_originalBody ? solverBodyB->m_originalBody->getInvMass() : 0.0;
- offDiagA += computeDeltaVelocityInConstraintSpace(
- offDiagConstraint.m_relpos1CrossNormal,
- offDiagConstraint.m_contactNormal1,
- invMassB,
- constraint.m_angularComponentB,
- constraint.m_contactNormal2);
- }
- }
-
- if (offDiagMultiBodyB)
- {
- const btScalar* offDiagJacB = &data.m_jacobians[offDiagConstraint.m_jacBindex];
-
- if (offDiagMultiBodyB == multiBodyA)
- {
- const int ndofA = multiBodyA->getNumDofs() + 6;
- const btScalar* deltaA = &data.m_deltaVelocitiesUnitImpulse[constraint.m_jacAindex];
- offDiagA += computeDeltaVelocityInConstraintSpace(deltaA, offDiagJacB, ndofA);
- }
- else if (offDiagMultiBodyB == multiBodyB)
- {
- const int ndofB = multiBodyB->getNumDofs() + 6;
- const btScalar* deltaB = &data.m_deltaVelocitiesUnitImpulse[constraint.m_jacBindex];
- offDiagA += computeDeltaVelocityInConstraintSpace(deltaB, offDiagJacB, ndofB);
- }
- }
- else
- {
- const int solverBodyIdA = constraint.m_solverBodyIdA;
- const int solverBodyIdB = constraint.m_solverBodyIdB;
-
- const int offDiagSolverBodyIdB = offDiagConstraint.m_solverBodyIdB;
- btAssert(offDiagSolverBodyIdB != -1);
-
- if (offDiagSolverBodyIdB == solverBodyIdA)
- {
- btAssert(solverBodyIdA != -1);
- const btSolverBody* solverBodyA = &solverBodyPool[solverBodyIdA];
- const btScalar invMassA = solverBodyA->m_originalBody ? solverBodyA->m_originalBody->getInvMass() : 0.0;
- offDiagA += computeDeltaVelocityInConstraintSpace(
- offDiagConstraint.m_relpos2CrossNormal,
- offDiagConstraint.m_contactNormal2,
- invMassA, constraint.m_angularComponentA,
- constraint.m_contactNormal1);
- }
- else if (offDiagSolverBodyIdB == solverBodyIdB)
- {
- btAssert(solverBodyIdB != -1);
- const btSolverBody* solverBodyB = &solverBodyPool[solverBodyIdB];
- const btScalar invMassB = solverBodyB->m_originalBody ? solverBodyB->m_originalBody->getInvMass() : 0.0;
- offDiagA += computeDeltaVelocityInConstraintSpace(
- offDiagConstraint.m_relpos2CrossNormal,
- offDiagConstraint.m_contactNormal2,
- invMassB, constraint.m_angularComponentB,
- constraint.m_contactNormal2);
- }
- }
-
- return offDiagA;
-}
-
-void btMultiBodyMLCPConstraintSolver::createMLCPFast(const btContactSolverInfo& infoGlobal)
-{
- createMLCPFastRigidBody(infoGlobal);
- createMLCPFastMultiBody(infoGlobal);
-}
-
-void btMultiBodyMLCPConstraintSolver::createMLCPFastRigidBody(const btContactSolverInfo& infoGlobal)
-{
- int numContactRows = interleaveContactAndFriction1 ? 3 : 1;
-
- int numConstraintRows = m_allConstraintPtrArray.size();
-
- if (numConstraintRows == 0)
- return;
-
- int n = numConstraintRows;
- {
- BT_PROFILE("init b (rhs)");
- m_b.resize(numConstraintRows);
- m_bSplit.resize(numConstraintRows);
- m_b.setZero();
- m_bSplit.setZero();
- for (int i = 0; i < numConstraintRows; i++)
- {
- btScalar jacDiag = m_allConstraintPtrArray[i]->m_jacDiagABInv;
- if (!btFuzzyZero(jacDiag))
- {
- btScalar rhs = m_allConstraintPtrArray[i]->m_rhs;
- btScalar rhsPenetration = m_allConstraintPtrArray[i]->m_rhsPenetration;
- m_b[i] = rhs / jacDiag;
- m_bSplit[i] = rhsPenetration / jacDiag;
- }
- }
- }
-
- // btScalar* w = 0;
- // int nub = 0;
-
- m_lo.resize(numConstraintRows);
- m_hi.resize(numConstraintRows);
-
- {
- BT_PROFILE("init lo/ho");
-
- for (int i = 0; i < numConstraintRows; i++)
- {
- if (0) //m_limitDependencies[i]>=0)
- {
- m_lo[i] = -BT_INFINITY;
- m_hi[i] = BT_INFINITY;
- }
- else
- {
- m_lo[i] = m_allConstraintPtrArray[i]->m_lowerLimit;
- m_hi[i] = m_allConstraintPtrArray[i]->m_upperLimit;
- }
- }
- }
-
- //
- int m = m_allConstraintPtrArray.size();
-
- int numBodies = m_tmpSolverBodyPool.size();
- btAlignedObjectArray<int> bodyJointNodeArray;
- {
- BT_PROFILE("bodyJointNodeArray.resize");
- bodyJointNodeArray.resize(numBodies, -1);
- }
- btAlignedObjectArray<btJointNode1> jointNodeArray;
- {
- BT_PROFILE("jointNodeArray.reserve");
- jointNodeArray.reserve(2 * m_allConstraintPtrArray.size());
- }
-
- btMatrixXu& J3 = m_scratchJ3;
- {
- BT_PROFILE("J3.resize");
- J3.resize(2 * m, 8);
- }
- btMatrixXu& JinvM3 = m_scratchJInvM3;
- {
- BT_PROFILE("JinvM3.resize/setZero");
-
- JinvM3.resize(2 * m, 8);
- JinvM3.setZero();
- J3.setZero();
- }
- int cur = 0;
- int rowOffset = 0;
- btAlignedObjectArray<int>& ofs = m_scratchOfs;
- {
- BT_PROFILE("ofs resize");
- ofs.resize(0);
- ofs.resizeNoInitialize(m_allConstraintPtrArray.size());
- }
- {
- BT_PROFILE("Compute J and JinvM");
- int c = 0;
-
- int numRows = 0;
-
- for (int i = 0; i < m_allConstraintPtrArray.size(); i += numRows, c++)
- {
- ofs[c] = rowOffset;
- int sbA = m_allConstraintPtrArray[i]->m_solverBodyIdA;
- int sbB = m_allConstraintPtrArray[i]->m_solverBodyIdB;
- btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- numRows = i < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[c].m_numConstraintRows : numContactRows;
- if (orgBodyA)
- {
- {
- int slotA = -1;
- //find free jointNode slot for sbA
- slotA = jointNodeArray.size();
- jointNodeArray.expand(); //NonInitializing();
- int prevSlot = bodyJointNodeArray[sbA];
- bodyJointNodeArray[sbA] = slotA;
- jointNodeArray[slotA].nextJointNodeIndex = prevSlot;
- jointNodeArray[slotA].jointIndex = c;
- jointNodeArray[slotA].constraintRowIndex = i;
- jointNodeArray[slotA].otherBodyIndex = orgBodyB ? sbB : -1;
- }
- for (int row = 0; row < numRows; row++, cur++)
- {
- btVector3 normalInvMass = m_allConstraintPtrArray[i + row]->m_contactNormal1 * orgBodyA->getInvMass();
- btVector3 relPosCrossNormalInvInertia = m_allConstraintPtrArray[i + row]->m_relpos1CrossNormal * orgBodyA->getInvInertiaTensorWorld();
-
- for (int r = 0; r < 3; r++)
- {
- J3.setElem(cur, r, m_allConstraintPtrArray[i + row]->m_contactNormal1[r]);
- J3.setElem(cur, r + 4, m_allConstraintPtrArray[i + row]->m_relpos1CrossNormal[r]);
- JinvM3.setElem(cur, r, normalInvMass[r]);
- JinvM3.setElem(cur, r + 4, relPosCrossNormalInvInertia[r]);
- }
- J3.setElem(cur, 3, 0);
- JinvM3.setElem(cur, 3, 0);
- J3.setElem(cur, 7, 0);
- JinvM3.setElem(cur, 7, 0);
- }
- }
- else
- {
- cur += numRows;
- }
- if (orgBodyB)
- {
- {
- int slotB = -1;
- //find free jointNode slot for sbA
- slotB = jointNodeArray.size();
- jointNodeArray.expand(); //NonInitializing();
- int prevSlot = bodyJointNodeArray[sbB];
- bodyJointNodeArray[sbB] = slotB;
- jointNodeArray[slotB].nextJointNodeIndex = prevSlot;
- jointNodeArray[slotB].jointIndex = c;
- jointNodeArray[slotB].otherBodyIndex = orgBodyA ? sbA : -1;
- jointNodeArray[slotB].constraintRowIndex = i;
- }
-
- for (int row = 0; row < numRows; row++, cur++)
- {
- btVector3 normalInvMassB = m_allConstraintPtrArray[i + row]->m_contactNormal2 * orgBodyB->getInvMass();
- btVector3 relPosInvInertiaB = m_allConstraintPtrArray[i + row]->m_relpos2CrossNormal * orgBodyB->getInvInertiaTensorWorld();
-
- for (int r = 0; r < 3; r++)
- {
- J3.setElem(cur, r, m_allConstraintPtrArray[i + row]->m_contactNormal2[r]);
- J3.setElem(cur, r + 4, m_allConstraintPtrArray[i + row]->m_relpos2CrossNormal[r]);
- JinvM3.setElem(cur, r, normalInvMassB[r]);
- JinvM3.setElem(cur, r + 4, relPosInvInertiaB[r]);
- }
- J3.setElem(cur, 3, 0);
- JinvM3.setElem(cur, 3, 0);
- J3.setElem(cur, 7, 0);
- JinvM3.setElem(cur, 7, 0);
- }
- }
- else
- {
- cur += numRows;
- }
- rowOffset += numRows;
- }
- }
-
- //compute JinvM = J*invM.
- const btScalar* JinvM = JinvM3.getBufferPointer();
-
- const btScalar* Jptr = J3.getBufferPointer();
- {
- BT_PROFILE("m_A.resize");
- m_A.resize(n, n);
- }
-
- {
- BT_PROFILE("m_A.setZero");
- m_A.setZero();
- }
- int c = 0;
- {
- int numRows = 0;
- BT_PROFILE("Compute A");
- for (int i = 0; i < m_allConstraintPtrArray.size(); i += numRows, c++)
- {
- int row__ = ofs[c];
- int sbA = m_allConstraintPtrArray[i]->m_solverBodyIdA;
- int sbB = m_allConstraintPtrArray[i]->m_solverBodyIdB;
- // btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- // btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- numRows = i < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[c].m_numConstraintRows : numContactRows;
-
- const btScalar* JinvMrow = JinvM + 2 * 8 * (size_t)row__;
-
- {
- int startJointNodeA = bodyJointNodeArray[sbA];
- while (startJointNodeA >= 0)
- {
- int j0 = jointNodeArray[startJointNodeA].jointIndex;
- int cr0 = jointNodeArray[startJointNodeA].constraintRowIndex;
- if (j0 < c)
- {
- int numRowsOther = cr0 < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[j0].m_numConstraintRows : numContactRows;
- size_t ofsother = (m_allConstraintPtrArray[cr0]->m_solverBodyIdB == sbA) ? 8 * numRowsOther : 0;
- //printf("%d joint i %d and j0: %d: ",count++,i,j0);
- m_A.multiplyAdd2_p8r(JinvMrow,
- Jptr + 2 * 8 * (size_t)ofs[j0] + ofsother, numRows, numRowsOther, row__, ofs[j0]);
- }
- startJointNodeA = jointNodeArray[startJointNodeA].nextJointNodeIndex;
- }
- }
-
- {
- int startJointNodeB = bodyJointNodeArray[sbB];
- while (startJointNodeB >= 0)
- {
- int j1 = jointNodeArray[startJointNodeB].jointIndex;
- int cj1 = jointNodeArray[startJointNodeB].constraintRowIndex;
-
- if (j1 < c)
- {
- int numRowsOther = cj1 < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[j1].m_numConstraintRows : numContactRows;
- size_t ofsother = (m_allConstraintPtrArray[cj1]->m_solverBodyIdB == sbB) ? 8 * numRowsOther : 0;
- m_A.multiplyAdd2_p8r(JinvMrow + 8 * (size_t)numRows,
- Jptr + 2 * 8 * (size_t)ofs[j1] + ofsother, numRows, numRowsOther, row__, ofs[j1]);
- }
- startJointNodeB = jointNodeArray[startJointNodeB].nextJointNodeIndex;
- }
- }
- }
-
- {
- BT_PROFILE("compute diagonal");
- // compute diagonal blocks of m_A
-
- int row__ = 0;
- int numJointRows = m_allConstraintPtrArray.size();
-
- int jj = 0;
- for (; row__ < numJointRows;)
- {
- //int sbA = m_allConstraintPtrArray[row__]->m_solverBodyIdA;
- int sbB = m_allConstraintPtrArray[row__]->m_solverBodyIdB;
- // btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- const unsigned int infom = row__ < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[jj].m_numConstraintRows : numContactRows;
-
- const btScalar* JinvMrow = JinvM + 2 * 8 * (size_t)row__;
- const btScalar* Jrow = Jptr + 2 * 8 * (size_t)row__;
- m_A.multiply2_p8r(JinvMrow, Jrow, infom, infom, row__, row__);
- if (orgBodyB)
- {
- m_A.multiplyAdd2_p8r(JinvMrow + 8 * (size_t)infom, Jrow + 8 * (size_t)infom, infom, infom, row__, row__);
- }
- row__ += infom;
- jj++;
- }
- }
- }
-
- if (1)
- {
- // add cfm to the diagonal of m_A
- for (int i = 0; i < m_A.rows(); ++i)
- {
- m_A.setElem(i, i, m_A(i, i) + infoGlobal.m_globalCfm / infoGlobal.m_timeStep);
- }
- }
-
- ///fill the upper triangle of the matrix, to make it symmetric
- {
- BT_PROFILE("fill the upper triangle ");
- m_A.copyLowerToUpperTriangle();
- }
-
- {
- BT_PROFILE("resize/init x");
- m_x.resize(numConstraintRows);
- m_xSplit.resize(numConstraintRows);
-
- if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)
- {
- for (int i = 0; i < m_allConstraintPtrArray.size(); i++)
- {
- const btSolverConstraint& c = *m_allConstraintPtrArray[i];
- m_x[i] = c.m_appliedImpulse;
- m_xSplit[i] = c.m_appliedPushImpulse;
- }
- }
- else
- {
- m_x.setZero();
- m_xSplit.setZero();
- }
- }
-}
-
-void btMultiBodyMLCPConstraintSolver::createMLCPFastMultiBody(const btContactSolverInfo& infoGlobal)
-{
- const int multiBodyNumConstraints = m_multiBodyAllConstraintPtrArray.size();
-
- if (multiBodyNumConstraints == 0)
- return;
-
- // 1. Compute b
- {
- BT_PROFILE("init b (rhs)");
-
- m_multiBodyB.resize(multiBodyNumConstraints);
- m_multiBodyB.setZero();
-
- for (int i = 0; i < multiBodyNumConstraints; ++i)
- {
- const btMultiBodySolverConstraint& constraint = *m_multiBodyAllConstraintPtrArray[i];
- const btScalar jacDiag = constraint.m_jacDiagABInv;
-
- if (!btFuzzyZero(jacDiag))
- {
- // Note that rhsPenetration is currently always zero because the split impulse hasn't been implemented for multibody yet.
- const btScalar rhs = constraint.m_rhs;
- m_multiBodyB[i] = rhs / jacDiag;
- }
- }
- }
-
- // 2. Compute lo and hi
- {
- BT_PROFILE("init lo/ho");
-
- m_multiBodyLo.resize(multiBodyNumConstraints);
- m_multiBodyHi.resize(multiBodyNumConstraints);
-
- for (int i = 0; i < multiBodyNumConstraints; ++i)
- {
- const btMultiBodySolverConstraint& constraint = *m_multiBodyAllConstraintPtrArray[i];
- m_multiBodyLo[i] = constraint.m_lowerLimit;
- m_multiBodyHi[i] = constraint.m_upperLimit;
- }
- }
-
- // 3. Construct A matrix by using the impulse testing
- {
- BT_PROFILE("Compute A");
-
- {
- BT_PROFILE("m_A.resize");
- m_multiBodyA.resize(multiBodyNumConstraints, multiBodyNumConstraints);
- }
-
- for (int i = 0; i < multiBodyNumConstraints; ++i)
- {
- // Compute the diagonal of A, which is A(i, i)
- const btMultiBodySolverConstraint& constraint = *m_multiBodyAllConstraintPtrArray[i];
- const btScalar diagA = computeConstraintMatrixDiagElementMultiBody(m_tmpSolverBodyPool, m_data, constraint);
- m_multiBodyA.setElem(i, i, diagA);
-
- // Computes the off-diagonals of A:
- // a. The rest of i-th row of A, from A(i, i+1) to A(i, n)
- // b. The rest of i-th column of A, from A(i+1, i) to A(n, i)
- for (int j = i + 1; j < multiBodyNumConstraints; ++j)
- {
- const btMultiBodySolverConstraint& offDiagConstraint = *m_multiBodyAllConstraintPtrArray[j];
- const btScalar offDiagA = computeConstraintMatrixOffDiagElementMultiBody(m_tmpSolverBodyPool, m_data, constraint, offDiagConstraint);
-
- // Set the off-diagonal values of A. Note that A is symmetric.
- m_multiBodyA.setElem(i, j, offDiagA);
- m_multiBodyA.setElem(j, i, offDiagA);
- }
- }
- }
-
- // Add CFM to the diagonal of m_A
- for (int i = 0; i < m_multiBodyA.rows(); ++i)
- {
- m_multiBodyA.setElem(i, i, m_multiBodyA(i, i) + infoGlobal.m_globalCfm / infoGlobal.m_timeStep);
- }
-
- // 4. Initialize x
- {
- BT_PROFILE("resize/init x");
-
- m_multiBodyX.resize(multiBodyNumConstraints);
-
- if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)
- {
- for (int i = 0; i < multiBodyNumConstraints; ++i)
- {
- const btMultiBodySolverConstraint& constraint = *m_multiBodyAllConstraintPtrArray[i];
- m_multiBodyX[i] = constraint.m_appliedImpulse;
- }
- }
- else
- {
- m_multiBodyX.setZero();
- }
- }
-}
-
-bool btMultiBodyMLCPConstraintSolver::solveMLCP(const btContactSolverInfo& infoGlobal)
-{
- bool result = true;
-
- if (m_A.rows() != 0)
- {
- // If using split impulse, we solve 2 separate (M)LCPs
- if (infoGlobal.m_splitImpulse)
- {
- const btMatrixXu Acopy = m_A;
- const btAlignedObjectArray<int> limitDependenciesCopy = m_limitDependencies;
- // TODO(JS): Do we really need these copies when solveMLCP takes them as const?
-
- result = m_solver->solveMLCP(m_A, m_b, m_x, m_lo, m_hi, m_limitDependencies, infoGlobal.m_numIterations);
- if (result)
- result = m_solver->solveMLCP(Acopy, m_bSplit, m_xSplit, m_lo, m_hi, limitDependenciesCopy, infoGlobal.m_numIterations);
- }
- else
- {
- result = m_solver->solveMLCP(m_A, m_b, m_x, m_lo, m_hi, m_limitDependencies, infoGlobal.m_numIterations);
- }
- }
-
- if (!result)
- return false;
-
- if (m_multiBodyA.rows() != 0)
- {
- result = m_solver->solveMLCP(m_multiBodyA, m_multiBodyB, m_multiBodyX, m_multiBodyLo, m_multiBodyHi, m_multiBodyLimitDependencies, infoGlobal.m_numIterations);
- }
-
- return result;
-}
-
-btScalar btMultiBodyMLCPConstraintSolver::solveGroupCacheFriendlySetup(
- btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifoldPtr,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& infoGlobal,
- btIDebugDraw* debugDrawer)
-{
- // 1. Setup for rigid-bodies
- btMultiBodyConstraintSolver::solveGroupCacheFriendlySetup(
- bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- // 2. Setup for multi-bodies
- // a. Collect all different kinds of constraint as pointers into one array, m_allConstraintPtrArray
- // b. Set the index array for frictional contact constraints, m_limitDependencies
- {
- BT_PROFILE("gather constraint data");
-
- int dindex = 0;
-
- const int numRigidBodyConstraints = m_tmpSolverNonContactConstraintPool.size() + m_tmpSolverContactConstraintPool.size() + m_tmpSolverContactFrictionConstraintPool.size();
- const int numMultiBodyConstraints = m_multiBodyNonContactConstraints.size() + m_multiBodyNormalContactConstraints.size() + m_multiBodyFrictionContactConstraints.size();
-
- m_allConstraintPtrArray.resize(0);
- m_multiBodyAllConstraintPtrArray.resize(0);
-
- // i. Setup for rigid bodies
-
- m_limitDependencies.resize(numRigidBodyConstraints);
-
- for (int i = 0; i < m_tmpSolverNonContactConstraintPool.size(); ++i)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverNonContactConstraintPool[i]);
- m_limitDependencies[dindex++] = -1;
- }
-
- int firstContactConstraintOffset = dindex;
-
- // The btSequentialImpulseConstraintSolver moves all friction constraints at the very end, we can also interleave them instead
- if (interleaveContactAndFriction1)
- {
- for (int i = 0; i < m_tmpSolverContactConstraintPool.size(); i++)
- {
- const int numFrictionPerContact = m_tmpSolverContactConstraintPool.size() == m_tmpSolverContactFrictionConstraintPool.size() ? 1 : 2;
-
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactConstraintPool[i]);
- m_limitDependencies[dindex++] = -1;
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactFrictionConstraintPool[i * numFrictionPerContact]);
- int findex = (m_tmpSolverContactFrictionConstraintPool[i * numFrictionPerContact].m_frictionIndex * (1 + numFrictionPerContact));
- m_limitDependencies[dindex++] = findex + firstContactConstraintOffset;
- if (numFrictionPerContact == 2)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactFrictionConstraintPool[i * numFrictionPerContact + 1]);
- m_limitDependencies[dindex++] = findex + firstContactConstraintOffset;
- }
- }
- }
- else
- {
- for (int i = 0; i < m_tmpSolverContactConstraintPool.size(); i++)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactConstraintPool[i]);
- m_limitDependencies[dindex++] = -1;
- }
- for (int i = 0; i < m_tmpSolverContactFrictionConstraintPool.size(); i++)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactFrictionConstraintPool[i]);
- m_limitDependencies[dindex++] = m_tmpSolverContactFrictionConstraintPool[i].m_frictionIndex + firstContactConstraintOffset;
- }
- }
-
- if (!m_allConstraintPtrArray.size())
- {
- m_A.resize(0, 0);
- m_b.resize(0);
- m_x.resize(0);
- m_lo.resize(0);
- m_hi.resize(0);
- }
-
- // ii. Setup for multibodies
-
- dindex = 0;
-
- m_multiBodyLimitDependencies.resize(numMultiBodyConstraints);
-
- for (int i = 0; i < m_multiBodyNonContactConstraints.size(); ++i)
- {
- m_multiBodyAllConstraintPtrArray.push_back(&m_multiBodyNonContactConstraints[i]);
- m_multiBodyLimitDependencies[dindex++] = -1;
- }
-
- firstContactConstraintOffset = dindex;
-
- // The btSequentialImpulseConstraintSolver moves all friction constraints at the very end, we can also interleave them instead
- if (interleaveContactAndFriction1)
- {
- for (int i = 0; i < m_multiBodyNormalContactConstraints.size(); ++i)
- {
- const int numtiBodyNumFrictionPerContact = m_multiBodyNormalContactConstraints.size() == m_multiBodyFrictionContactConstraints.size() ? 1 : 2;
-
- m_multiBodyAllConstraintPtrArray.push_back(&m_multiBodyNormalContactConstraints[i]);
- m_multiBodyLimitDependencies[dindex++] = -1;
-
- btMultiBodySolverConstraint& frictionContactConstraint1 = m_multiBodyFrictionContactConstraints[i * numtiBodyNumFrictionPerContact];
- m_multiBodyAllConstraintPtrArray.push_back(&frictionContactConstraint1);
-
- const int findex = (frictionContactConstraint1.m_frictionIndex * (1 + numtiBodyNumFrictionPerContact)) + firstContactConstraintOffset;
-
- m_multiBodyLimitDependencies[dindex++] = findex;
-
- if (numtiBodyNumFrictionPerContact == 2)
- {
- btMultiBodySolverConstraint& frictionContactConstraint2 = m_multiBodyFrictionContactConstraints[i * numtiBodyNumFrictionPerContact + 1];
- m_multiBodyAllConstraintPtrArray.push_back(&frictionContactConstraint2);
-
- m_multiBodyLimitDependencies[dindex++] = findex;
- }
- }
- }
- else
- {
- for (int i = 0; i < m_multiBodyNormalContactConstraints.size(); ++i)
- {
- m_multiBodyAllConstraintPtrArray.push_back(&m_multiBodyNormalContactConstraints[i]);
- m_multiBodyLimitDependencies[dindex++] = -1;
- }
- for (int i = 0; i < m_multiBodyFrictionContactConstraints.size(); ++i)
- {
- m_multiBodyAllConstraintPtrArray.push_back(&m_multiBodyFrictionContactConstraints[i]);
- m_multiBodyLimitDependencies[dindex++] = m_multiBodyFrictionContactConstraints[i].m_frictionIndex + firstContactConstraintOffset;
- }
- }
-
- if (!m_multiBodyAllConstraintPtrArray.size())
- {
- m_multiBodyA.resize(0, 0);
- m_multiBodyB.resize(0);
- m_multiBodyX.resize(0);
- m_multiBodyLo.resize(0);
- m_multiBodyHi.resize(0);
- }
- }
-
- // Construct MLCP terms
- {
- BT_PROFILE("createMLCPFast");
- createMLCPFast(infoGlobal);
- }
-
- return btScalar(0);
-}
-
-btScalar btMultiBodyMLCPConstraintSolver::solveGroupCacheFriendlyIterations(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- bool result = true;
- {
- BT_PROFILE("solveMLCP");
- result = solveMLCP(infoGlobal);
- }
-
- // Fallback to btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations if the solution isn't valid.
- if (!result)
- {
- m_fallback++;
- return btMultiBodyConstraintSolver::solveGroupCacheFriendlyIterations(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
- }
-
- {
- BT_PROFILE("process MLCP results");
-
- for (int i = 0; i < m_allConstraintPtrArray.size(); ++i)
- {
- const btSolverConstraint& c = *m_allConstraintPtrArray[i];
-
- const btScalar deltaImpulse = m_x[i] - c.m_appliedImpulse;
- c.m_appliedImpulse = m_x[i];
-
- int sbA = c.m_solverBodyIdA;
- int sbB = c.m_solverBodyIdB;
-
- btSolverBody& solverBodyA = m_tmpSolverBodyPool[sbA];
- btSolverBody& solverBodyB = m_tmpSolverBodyPool[sbB];
-
- solverBodyA.internalApplyImpulse(c.m_contactNormal1 * solverBodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- solverBodyB.internalApplyImpulse(c.m_contactNormal2 * solverBodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
-
- if (infoGlobal.m_splitImpulse)
- {
- const btScalar deltaPushImpulse = m_xSplit[i] - c.m_appliedPushImpulse;
- solverBodyA.internalApplyPushImpulse(c.m_contactNormal1 * solverBodyA.internalGetInvMass(), c.m_angularComponentA, deltaPushImpulse);
- solverBodyB.internalApplyPushImpulse(c.m_contactNormal2 * solverBodyB.internalGetInvMass(), c.m_angularComponentB, deltaPushImpulse);
- c.m_appliedPushImpulse = m_xSplit[i];
- }
- }
-
- for (int i = 0; i < m_multiBodyAllConstraintPtrArray.size(); ++i)
- {
- btMultiBodySolverConstraint& c = *m_multiBodyAllConstraintPtrArray[i];
-
- const btScalar deltaImpulse = m_multiBodyX[i] - c.m_appliedImpulse;
- c.m_appliedImpulse = m_multiBodyX[i];
-
- btMultiBody* multiBodyA = c.m_multiBodyA;
- if (multiBodyA)
- {
- const int ndofA = multiBodyA->getNumDofs() + 6;
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacAindex], deltaImpulse, c.m_deltaVelAindex, ndofA);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- multiBodyA->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacAindex], deltaImpulse);
-#endif // DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else
- {
- const int sbA = c.m_solverBodyIdA;
- btSolverBody& solverBodyA = m_tmpSolverBodyPool[sbA];
- solverBodyA.internalApplyImpulse(c.m_contactNormal1 * solverBodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- }
-
- btMultiBody* multiBodyB = c.m_multiBodyB;
- if (multiBodyB)
- {
- const int ndofB = multiBodyB->getNumDofs() + 6;
- applyDeltaVee(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacBindex], deltaImpulse, c.m_deltaVelBindex, ndofB);
-#ifdef DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- //note: update of the actual velocities (below) in the multibody does not have to happen now since m_deltaVelocities can be applied after all iterations
- //it would make the multibody solver more like the regular one with m_deltaVelocities being equivalent to btSolverBody::m_deltaLinearVelocity/m_deltaAngularVelocity
- multiBodyB->applyDeltaVeeMultiDof2(&m_data.m_deltaVelocitiesUnitImpulse[c.m_jacBindex], deltaImpulse);
-#endif // DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS
- }
- else
- {
- const int sbB = c.m_solverBodyIdB;
- btSolverBody& solverBodyB = m_tmpSolverBodyPool[sbB];
- solverBodyB.internalApplyImpulse(c.m_contactNormal2 * solverBodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
- }
- }
- }
-
- return btScalar(0);
-}
-
-btMultiBodyMLCPConstraintSolver::btMultiBodyMLCPConstraintSolver(btMLCPSolverInterface* solver)
- : m_solver(solver), m_fallback(0)
-{
- // Do nothing
-}
-
-btMultiBodyMLCPConstraintSolver::~btMultiBodyMLCPConstraintSolver()
-{
- // Do nothing
-}
-
-void btMultiBodyMLCPConstraintSolver::setMLCPSolver(btMLCPSolverInterface* solver)
-{
- m_solver = solver;
-}
-
-int btMultiBodyMLCPConstraintSolver::getNumFallbacks() const
-{
- return m_fallback;
-}
-
-void btMultiBodyMLCPConstraintSolver::setNumFallbacks(int num)
-{
- m_fallback = num;
-}
-
-btConstraintSolverType btMultiBodyMLCPConstraintSolver::getSolverType() const
-{
- return BT_MLCP_SOLVER;
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h
deleted file mode 100644
index 77fdb86bb9..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.h
+++ /dev/null
@@ -1,187 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2018 Google Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_MLCP_CONSTRAINT_SOLVER_H
-#define BT_MULTIBODY_MLCP_CONSTRAINT_SOLVER_H
-
-#include "LinearMath/btMatrixX.h"
-#include "LinearMath/btThreads.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h"
-
-class btMLCPSolverInterface;
-class btMultiBody;
-
-class btMultiBodyMLCPConstraintSolver : public btMultiBodyConstraintSolver
-{
-protected:
- /// \name MLCP Formulation for Rigid Bodies
- /// \{
-
- /// A matrix in the MLCP formulation
- btMatrixXu m_A;
-
- /// b vector in the MLCP formulation.
- btVectorXu m_b;
-
- /// Constraint impulse, which is an output of MLCP solving.
- btVectorXu m_x;
-
- /// Lower bound of constraint impulse, \c m_x.
- btVectorXu m_lo;
-
- /// Upper bound of constraint impulse, \c m_x.
- btVectorXu m_hi;
-
- /// \}
-
- /// \name Cache Variables for Split Impulse for Rigid Bodies
- /// When using 'split impulse' we solve two separate (M)LCPs
- /// \{
-
- /// Split impulse Cache vector corresponding to \c m_b.
- btVectorXu m_bSplit;
-
- /// Split impulse cache vector corresponding to \c m_x.
- btVectorXu m_xSplit;
-
- /// \}
-
- /// \name MLCP Formulation for Multibodies
- /// \{
-
- /// A matrix in the MLCP formulation
- btMatrixXu m_multiBodyA;
-
- /// b vector in the MLCP formulation.
- btVectorXu m_multiBodyB;
-
- /// Constraint impulse, which is an output of MLCP solving.
- btVectorXu m_multiBodyX;
-
- /// Lower bound of constraint impulse, \c m_x.
- btVectorXu m_multiBodyLo;
-
- /// Upper bound of constraint impulse, \c m_x.
- btVectorXu m_multiBodyHi;
-
- /// \}
-
- /// Indices of normal contact constraint associated with frictional contact constraint for rigid bodies.
- ///
- /// This is used by the MLCP solver to update the upper bounds of frictional contact impulse given intermediate
- /// normal contact impulse. For example, i-th element represents the index of a normal constraint that is
- /// accosiated with i-th frictional contact constraint if i-th constraint is a frictional contact constraint.
- /// Otherwise, -1.
- btAlignedObjectArray<int> m_limitDependencies;
-
- /// Indices of normal contact constraint associated with frictional contact constraint for multibodies.
- ///
- /// This is used by the MLCP solver to update the upper bounds of frictional contact impulse given intermediate
- /// normal contact impulse. For example, i-th element represents the index of a normal constraint that is
- /// accosiated with i-th frictional contact constraint if i-th constraint is a frictional contact constraint.
- /// Otherwise, -1.
- btAlignedObjectArray<int> m_multiBodyLimitDependencies;
-
- /// Array of all the rigid body constraints
- btAlignedObjectArray<btSolverConstraint*> m_allConstraintPtrArray;
-
- /// Array of all the multibody constraints
- btAlignedObjectArray<btMultiBodySolverConstraint*> m_multiBodyAllConstraintPtrArray;
-
- /// MLCP solver
- btMLCPSolverInterface* m_solver;
-
- /// Count of fallbacks of using btSequentialImpulseConstraintSolver, which happens when the MLCP solver fails.
- int m_fallback;
-
- /// \name MLCP Scratch Variables
- /// The following scratch variables are not stateful -- contents are cleared prior to each use.
- /// They are only cached here to avoid extra memory allocations and deallocations and to ensure
- /// that multiple instances of the solver can be run in parallel.
- ///
- /// \{
-
- /// Cache variable for constraint Jacobian matrix.
- btMatrixXu m_scratchJ3;
-
- /// Cache variable for constraint Jacobian times inverse mass matrix.
- btMatrixXu m_scratchJInvM3;
-
- /// Cache variable for offsets.
- btAlignedObjectArray<int> m_scratchOfs;
-
- /// \}
-
- /// Constructs MLCP terms, which are \c m_A, \c m_b, \c m_lo, and \c m_hi.
- virtual void createMLCPFast(const btContactSolverInfo& infoGlobal);
-
- /// Constructs MLCP terms for constraints of two rigid bodies
- void createMLCPFastRigidBody(const btContactSolverInfo& infoGlobal);
-
- /// Constructs MLCP terms for constraints of two multi-bodies or one rigid body and one multibody
- void createMLCPFastMultiBody(const btContactSolverInfo& infoGlobal);
-
- /// Solves MLCP and returns the success
- virtual bool solveMLCP(const btContactSolverInfo& infoGlobal);
-
- // Documentation inherited
- btScalar solveGroupCacheFriendlySetup(
- btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifoldPtr,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& infoGlobal,
- btIDebugDraw* debugDrawer) BT_OVERRIDE;
-
- // Documentation inherited
- btScalar solveGroupCacheFriendlyIterations(
- btCollisionObject** bodies,
- int numBodies,
- btPersistentManifold** manifoldPtr,
- int numManifolds,
- btTypedConstraint** constraints,
- int numConstraints,
- const btContactSolverInfo& infoGlobal,
- btIDebugDraw* debugDrawer) ;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR()
-
- /// Constructor
- ///
- /// \param[in] solver MLCP solver. Assumed it's not null.
- /// \param[in] maxLCPSize Maximum size of LCP to solve using MLCP solver. If the MLCP size exceeds this number, sequaltial impulse method will be used.
- explicit btMultiBodyMLCPConstraintSolver(btMLCPSolverInterface* solver);
-
- /// Destructor
- virtual ~btMultiBodyMLCPConstraintSolver();
-
- /// Sets MLCP solver. Assumed it's not null.
- void setMLCPSolver(btMLCPSolverInterface* solver);
-
- /// Returns the number of fallbacks of using btSequentialImpulseConstraintSolver, which happens when the MLCP
- /// solver fails.
- int getNumFallbacks() const;
-
- /// Sets the number of fallbacks. This function may be used to reset the number to zero.
- void setNumFallbacks(int num);
-
- /// Returns the constraint solver type.
- virtual btConstraintSolverType getSolverType() const;
-};
-
-#endif // BT_MULTIBODY_MLCP_CONSTRAINT_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp
deleted file mode 100644
index f51e69deb1..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp
+++ /dev/null
@@ -1,216 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodyPoint2Point.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "LinearMath/btIDebugDraw.h"
-
-#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
-#define BTMBP2PCONSTRAINT_DIM 3
-#else
-#define BTMBP2PCONSTRAINT_DIM 6
-#endif
-
-btMultiBodyPoint2Point::btMultiBodyPoint2Point(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB)
- : btMultiBodyConstraint(body, 0, link, -1, BTMBP2PCONSTRAINT_DIM, false, MULTIBODY_CONSTRAINT_POINT_TO_POINT),
- m_rigidBodyA(0),
- m_rigidBodyB(bodyB),
- m_pivotInA(pivotInA),
- m_pivotInB(pivotInB)
-{
- m_data.resize(BTMBP2PCONSTRAINT_DIM); //at least store the applied impulses
-}
-
-btMultiBodyPoint2Point::btMultiBodyPoint2Point(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB)
- : btMultiBodyConstraint(bodyA, bodyB, linkA, linkB, BTMBP2PCONSTRAINT_DIM, false, MULTIBODY_CONSTRAINT_POINT_TO_POINT),
- m_rigidBodyA(0),
- m_rigidBodyB(0),
- m_pivotInA(pivotInA),
- m_pivotInB(pivotInB)
-{
- m_data.resize(BTMBP2PCONSTRAINT_DIM); //at least store the applied impulses
-}
-
-void btMultiBodyPoint2Point::finalizeMultiDof()
-{
- //not implemented yet
- btAssert(0);
-}
-
-btMultiBodyPoint2Point::~btMultiBodyPoint2Point()
-{
-}
-
-int btMultiBodyPoint2Point::getIslandIdA() const
-{
- if (m_rigidBodyA)
- return m_rigidBodyA->getIslandTag();
-
- if (m_bodyA)
- {
- if (m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodyPoint2Point::getIslandIdB() const
-{
- if (m_rigidBodyB)
- return m_rigidBodyB->getIslandTag();
- if (m_bodyB)
- {
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-void btMultiBodyPoint2Point::createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal)
-{
- // int i=1;
- int numDim = BTMBP2PCONSTRAINT_DIM;
- for (int i = 0; i < numDim; i++)
- {
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
- //memset(&constraintRow,0xffffffff,sizeof(btMultiBodySolverConstraint));
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = i;
- constraintRow.m_relpos1CrossNormal.setValue(0, 0, 0);
- constraintRow.m_contactNormal1.setValue(0, 0, 0);
- constraintRow.m_relpos2CrossNormal.setValue(0, 0, 0);
- constraintRow.m_contactNormal2.setValue(0, 0, 0);
- constraintRow.m_angularComponentA.setValue(0, 0, 0);
- constraintRow.m_angularComponentB.setValue(0, 0, 0);
-
- constraintRow.m_solverBodyIdA = data.m_fixedBodyId;
- constraintRow.m_solverBodyIdB = data.m_fixedBodyId;
-
- btVector3 contactNormalOnB(0, 0, 0);
-#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
- contactNormalOnB[i] = -1;
-#else
- contactNormalOnB[i % 3] = -1;
-#endif
-
- // Convert local points back to world
- btVector3 pivotAworld = m_pivotInA;
- if (m_rigidBodyA)
- {
- constraintRow.m_solverBodyIdA = m_rigidBodyA->getCompanionId();
- pivotAworld = m_rigidBodyA->getCenterOfMassTransform() * m_pivotInA;
- }
- else
- {
- if (m_bodyA)
- pivotAworld = m_bodyA->localPosToWorld(m_linkA, m_pivotInA);
- }
- btVector3 pivotBworld = m_pivotInB;
- if (m_rigidBodyB)
- {
- constraintRow.m_solverBodyIdB = m_rigidBodyB->getCompanionId();
- pivotBworld = m_rigidBodyB->getCenterOfMassTransform() * m_pivotInB;
- }
- else
- {
- if (m_bodyB)
- pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
- }
-
- btScalar posError = i < 3 ? (pivotAworld - pivotBworld).dot(contactNormalOnB) : 0;
-
-#ifndef BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
-
- fillMultiBodyConstraint(constraintRow, data, 0, 0, btVector3(0, 0, 0),
- contactNormalOnB, pivotAworld, pivotBworld, //sucks but let it be this way "for the time being"
- posError,
- infoGlobal,
- -m_maxAppliedImpulse, m_maxAppliedImpulse);
- //@todo: support the case of btMultiBody versus btRigidBody,
- //see btPoint2PointConstraint::getInfo2NonVirtual
-#else
- const btVector3 dummy(0, 0, 0);
-
- btAssert(m_bodyA->isMultiDof());
-
- btScalar* jac1 = jacobianA(i);
- const btVector3& normalAng = i >= 3 ? contactNormalOnB : dummy;
- const btVector3& normalLin = i < 3 ? contactNormalOnB : dummy;
-
- m_bodyA->filConstraintJacobianMultiDof(m_linkA, pivotAworld, normalAng, normalLin, jac1, data.scratch_r, data.scratch_v, data.scratch_m);
-
- fillMultiBodyConstraint(constraintRow, data, jac1, 0,
- dummy, dummy, dummy, //sucks but let it be this way "for the time being"
- posError,
- infoGlobal,
- -m_maxAppliedImpulse, m_maxAppliedImpulse);
-#endif
- }
-}
-
-void btMultiBodyPoint2Point::debugDraw(class btIDebugDraw* drawer)
-{
- btTransform tr;
- tr.setIdentity();
-
- if (m_rigidBodyA)
- {
- btVector3 pivot = m_rigidBodyA->getCenterOfMassTransform() * m_pivotInA;
- tr.setOrigin(pivot);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_bodyA)
- {
- btVector3 pivotAworld = m_bodyA->localPosToWorld(m_linkA, m_pivotInA);
- tr.setOrigin(pivotAworld);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_rigidBodyB)
- {
- // that ideally should draw the same frame
- btVector3 pivot = m_rigidBodyB->getCenterOfMassTransform() * m_pivotInB;
- tr.setOrigin(pivot);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_bodyB)
- {
- btVector3 pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
- tr.setOrigin(pivotBworld);
- drawer->drawTransform(tr, 0.1);
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.h
deleted file mode 100644
index ef03a557ec..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodyPoint2Point.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_MULTIBODY_POINT2POINT_H
-#define BT_MULTIBODY_POINT2POINT_H
-
-#include "btMultiBodyConstraint.h"
-
-//#define BTMBP2PCONSTRAINT_BLOCK_ANGULAR_MOTION_TEST
-
-ATTRIBUTE_ALIGNED16(class)
-btMultiBodyPoint2Point : public btMultiBodyConstraint
-{
-protected:
- btRigidBody* m_rigidBodyA;
- btRigidBody* m_rigidBodyB;
- btVector3 m_pivotInA;
- btVector3 m_pivotInB;
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btMultiBodyPoint2Point(btMultiBody * body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB);
- btMultiBodyPoint2Point(btMultiBody * bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB);
-
- virtual ~btMultiBodyPoint2Point();
-
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray & constraintRows,
- btMultiBodyJacobianData & data,
- const btContactSolverInfo& infoGlobal);
-
- const btVector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- virtual void setPivotInB(const btVector3& pivotInB)
- {
- m_pivotInB = pivotInB;
- }
-
- virtual void debugDraw(class btIDebugDraw * drawer);
-};
-
-#endif //BT_MULTIBODY_POINT2POINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.cpp
deleted file mode 100644
index 48ec1d5af2..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.cpp
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodySliderConstraint.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h"
-#include "LinearMath/btIDebugDraw.h"
-
-#define BTMBSLIDERCONSTRAINT_DIM 5
-#define EPSILON 0.000001
-
-btMultiBodySliderConstraint::btMultiBodySliderConstraint(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB, const btVector3& jointAxis)
- : btMultiBodyConstraint(body, 0, link, -1, BTMBSLIDERCONSTRAINT_DIM, false, MULTIBODY_CONSTRAINT_SLIDER),
- m_rigidBodyA(0),
- m_rigidBodyB(bodyB),
- m_pivotInA(pivotInA),
- m_pivotInB(pivotInB),
- m_frameInA(frameInA),
- m_frameInB(frameInB),
- m_jointAxis(jointAxis)
-{
- m_data.resize(BTMBSLIDERCONSTRAINT_DIM); //at least store the applied impulses
-}
-
-btMultiBodySliderConstraint::btMultiBodySliderConstraint(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB, const btVector3& jointAxis)
- : btMultiBodyConstraint(bodyA, bodyB, linkA, linkB, BTMBSLIDERCONSTRAINT_DIM, false, MULTIBODY_CONSTRAINT_SLIDER),
- m_rigidBodyA(0),
- m_rigidBodyB(0),
- m_pivotInA(pivotInA),
- m_pivotInB(pivotInB),
- m_frameInA(frameInA),
- m_frameInB(frameInB),
- m_jointAxis(jointAxis)
-{
- m_data.resize(BTMBSLIDERCONSTRAINT_DIM); //at least store the applied impulses
-}
-
-void btMultiBodySliderConstraint::finalizeMultiDof()
-{
- //not implemented yet
- btAssert(0);
-}
-
-btMultiBodySliderConstraint::~btMultiBodySliderConstraint()
-{
-}
-
-int btMultiBodySliderConstraint::getIslandIdA() const
-{
- if (m_rigidBodyA)
- return m_rigidBodyA->getIslandTag();
-
- if (m_bodyA)
- {
- if (m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodySliderConstraint::getIslandIdB() const
-{
- if (m_rigidBodyB)
- return m_rigidBodyB->getIslandTag();
- if (m_bodyB)
- {
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-void btMultiBodySliderConstraint::createConstraintRows(btMultiBodyConstraintArray& constraintRows, btMultiBodyJacobianData& data, const btContactSolverInfo& infoGlobal)
-{
- // Convert local points back to world
- btVector3 pivotAworld = m_pivotInA;
- btMatrix3x3 frameAworld = m_frameInA;
- btVector3 jointAxis = m_jointAxis;
- if (m_rigidBodyA)
- {
- pivotAworld = m_rigidBodyA->getCenterOfMassTransform() * m_pivotInA;
- frameAworld = m_frameInA.transpose() * btMatrix3x3(m_rigidBodyA->getOrientation());
- jointAxis = quatRotate(m_rigidBodyA->getOrientation(), m_jointAxis);
- }
- else if (m_bodyA)
- {
- pivotAworld = m_bodyA->localPosToWorld(m_linkA, m_pivotInA);
- frameAworld = m_bodyA->localFrameToWorld(m_linkA, m_frameInA);
- jointAxis = m_bodyA->localDirToWorld(m_linkA, m_jointAxis);
- }
- btVector3 pivotBworld = m_pivotInB;
- btMatrix3x3 frameBworld = m_frameInB;
- if (m_rigidBodyB)
- {
- pivotBworld = m_rigidBodyB->getCenterOfMassTransform() * m_pivotInB;
- frameBworld = m_frameInB.transpose() * btMatrix3x3(m_rigidBodyB->getOrientation());
- }
- else if (m_bodyB)
- {
- pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
- frameBworld = m_bodyB->localFrameToWorld(m_linkB, m_frameInB);
- }
-
- btVector3 constraintAxis[2];
- for (int i = 0; i < 3; ++i)
- {
- constraintAxis[0] = frameAworld.getColumn(i).cross(jointAxis);
- if (constraintAxis[0].safeNorm() > EPSILON)
- {
- constraintAxis[0] = constraintAxis[0].normalized();
- constraintAxis[1] = jointAxis.cross(constraintAxis[0]);
- constraintAxis[1] = constraintAxis[1].normalized();
- break;
- }
- }
-
- btMatrix3x3 relRot = frameAworld.inverse() * frameBworld;
- btVector3 angleDiff;
- btGeneric6DofSpring2Constraint::matrixToEulerXYZ(relRot, angleDiff);
-
- int numDim = BTMBSLIDERCONSTRAINT_DIM;
- for (int i = 0; i < numDim; i++)
- {
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = i;
- constraintRow.m_relpos1CrossNormal.setValue(0, 0, 0);
- constraintRow.m_contactNormal1.setValue(0, 0, 0);
- constraintRow.m_relpos2CrossNormal.setValue(0, 0, 0);
- constraintRow.m_contactNormal2.setValue(0, 0, 0);
- constraintRow.m_angularComponentA.setValue(0, 0, 0);
- constraintRow.m_angularComponentB.setValue(0, 0, 0);
-
- constraintRow.m_solverBodyIdA = data.m_fixedBodyId;
- constraintRow.m_solverBodyIdB = data.m_fixedBodyId;
-
- if (m_rigidBodyA)
- {
- constraintRow.m_solverBodyIdA = m_rigidBodyA->getCompanionId();
- }
- if (m_rigidBodyB)
- {
- constraintRow.m_solverBodyIdB = m_rigidBodyB->getCompanionId();
- }
-
- btVector3 constraintNormalLin(0, 0, 0);
- btVector3 constraintNormalAng(0, 0, 0);
- btScalar posError = 0.0;
- if (i < 2)
- {
- constraintNormalLin = constraintAxis[i];
- posError = (pivotAworld - pivotBworld).dot(constraintNormalLin);
- fillMultiBodyConstraint(constraintRow, data, 0, 0, constraintNormalAng,
- constraintNormalLin, pivotAworld, pivotBworld,
- posError,
- infoGlobal,
- -m_maxAppliedImpulse, m_maxAppliedImpulse);
- }
- else
- { //i>=2
- constraintNormalAng = frameAworld.getColumn(i % 3);
- posError = angleDiff[i % 3];
- fillMultiBodyConstraint(constraintRow, data, 0, 0, constraintNormalAng,
- constraintNormalLin, pivotAworld, pivotBworld,
- posError,
- infoGlobal,
- -m_maxAppliedImpulse, m_maxAppliedImpulse, true);
- }
- }
-}
-
-void btMultiBodySliderConstraint::debugDraw(class btIDebugDraw* drawer)
-{
- btTransform tr;
- tr.setIdentity();
-
- if (m_rigidBodyA)
- {
- btVector3 pivot = m_rigidBodyA->getCenterOfMassTransform() * m_pivotInA;
- tr.setOrigin(pivot);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_bodyA)
- {
- btVector3 pivotAworld = m_bodyA->localPosToWorld(m_linkA, m_pivotInA);
- tr.setOrigin(pivotAworld);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_rigidBodyB)
- {
- // that ideally should draw the same frame
- btVector3 pivot = m_rigidBodyB->getCenterOfMassTransform() * m_pivotInB;
- tr.setOrigin(pivot);
- drawer->drawTransform(tr, 0.1);
- }
- if (m_bodyB)
- {
- btVector3 pivotBworld = m_bodyB->localPosToWorld(m_linkB, m_pivotInB);
- tr.setOrigin(pivotBworld);
- drawer->drawTransform(tr, 0.1);
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.h
deleted file mode 100644
index b192b6f8f3..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySliderConstraint.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_MULTIBODY_SLIDER_CONSTRAINT_H
-#define BT_MULTIBODY_SLIDER_CONSTRAINT_H
-
-#include "btMultiBodyConstraint.h"
-
-class btMultiBodySliderConstraint : public btMultiBodyConstraint
-{
-protected:
- btRigidBody* m_rigidBodyA;
- btRigidBody* m_rigidBodyB;
- btVector3 m_pivotInA;
- btVector3 m_pivotInB;
- btMatrix3x3 m_frameInA;
- btMatrix3x3 m_frameInB;
- btVector3 m_jointAxis;
-
-public:
- btMultiBodySliderConstraint(btMultiBody* body, int link, btRigidBody* bodyB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB, const btVector3& jointAxis);
- btMultiBodySliderConstraint(btMultiBody* bodyA, int linkA, btMultiBody* bodyB, int linkB, const btVector3& pivotInA, const btVector3& pivotInB, const btMatrix3x3& frameInA, const btMatrix3x3& frameInB, const btVector3& jointAxis);
-
- virtual ~btMultiBodySliderConstraint();
-
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal);
-
- const btVector3& getPivotInA() const
- {
- return m_pivotInA;
- }
-
- void setPivotInA(const btVector3& pivotInA)
- {
- m_pivotInA = pivotInA;
- }
-
- const btVector3& getPivotInB() const
- {
- return m_pivotInB;
- }
-
- virtual void setPivotInB(const btVector3& pivotInB)
- {
- m_pivotInB = pivotInB;
- }
-
- const btMatrix3x3& getFrameInA() const
- {
- return m_frameInA;
- }
-
- void setFrameInA(const btMatrix3x3& frameInA)
- {
- m_frameInA = frameInA;
- }
-
- const btMatrix3x3& getFrameInB() const
- {
- return m_frameInB;
- }
-
- virtual void setFrameInB(const btMatrix3x3& frameInB)
- {
- m_frameInB = frameInB;
- }
-
- const btVector3& getJointAxis() const
- {
- return m_jointAxis;
- }
-
- void setJointAxis(const btVector3& jointAxis)
- {
- m_jointAxis = jointAxis;
- }
-
- virtual void debugDraw(class btIDebugDraw* drawer);
-};
-
-#endif //BT_MULTIBODY_SLIDER_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySolverConstraint.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySolverConstraint.h
deleted file mode 100644
index deed3e2a12..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySolverConstraint.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MULTIBODY_SOLVER_CONSTRAINT_H
-#define BT_MULTIBODY_SOLVER_CONSTRAINT_H
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-class btMultiBody;
-class btMultiBodyConstraint;
-#include "BulletDynamics/ConstraintSolver/btSolverBody.h"
-#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
-
-///1D constraint along a normal axis between bodyA and bodyB. It can be combined to solve contact and friction constraints.
-ATTRIBUTE_ALIGNED16(struct)
-btMultiBodySolverConstraint
-{
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btMultiBodySolverConstraint() : m_solverBodyIdA(-1), m_multiBodyA(0), m_linkA(-1), m_solverBodyIdB(-1), m_multiBodyB(0), m_linkB(-1), m_orgConstraint(0), m_orgDofIndex(-1)
- {
- }
-
- int m_deltaVelAindex; //more generic version of m_relpos1CrossNormal/m_contactNormal1
- int m_jacAindex;
- int m_deltaVelBindex;
- int m_jacBindex;
-
- btVector3 m_relpos1CrossNormal;
- btVector3 m_contactNormal1;
- btVector3 m_relpos2CrossNormal;
- btVector3 m_contactNormal2; //usually m_contactNormal2 == -m_contactNormal1, but not always
-
- btVector3 m_angularComponentA;
- btVector3 m_angularComponentB;
-
- mutable btSimdScalar m_appliedPushImpulse;
- mutable btSimdScalar m_appliedImpulse;
-
- btScalar m_friction;
- btScalar m_jacDiagABInv;
- btScalar m_rhs;
- btScalar m_cfm;
-
- btScalar m_lowerLimit;
- btScalar m_upperLimit;
- btScalar m_rhsPenetration;
- union {
- void* m_originalContactPoint;
- btScalar m_unusedPadding4;
- };
-
- int m_overrideNumSolverIterations;
- int m_frictionIndex;
-
- int m_solverBodyIdA;
- btMultiBody* m_multiBodyA;
- int m_linkA;
-
- int m_solverBodyIdB;
- btMultiBody* m_multiBodyB;
- int m_linkB;
-
- //for writing back applied impulses
- btMultiBodyConstraint* m_orgConstraint;
- int m_orgDofIndex;
-
- enum btSolverConstraintType
- {
- BT_SOLVER_CONTACT_1D = 0,
- BT_SOLVER_FRICTION_1D
- };
-};
-
-typedef btAlignedObjectArray<btMultiBodySolverConstraint> btMultiBodyConstraintArray;
-
-#endif //BT_MULTIBODY_SOLVER_CONSTRAINT_H
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp
deleted file mode 100644
index 00a7ef3579..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp
+++ /dev/null
@@ -1,180 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2018 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#include "btMultiBodySphericalJointMotor.h"
-#include "btMultiBody.h"
-#include "btMultiBodyLinkCollider.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "LinearMath/btTransformUtil.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.h"
-
-btMultiBodySphericalJointMotor::btMultiBodySphericalJointMotor(btMultiBody* body, int link, btScalar maxMotorImpulse)
- : btMultiBodyConstraint(body, body, link, body->getLink(link).m_parent, 3, true, MULTIBODY_CONSTRAINT_SPHERICAL_MOTOR),
- m_desiredVelocity(0, 0, 0),
- m_desiredPosition(0,0,0,1),
- m_use_multi_dof_params(false),
- m_kd(1., 1., 1.),
- m_kp(0.2, 0.2, 0.2),
- m_erp(1),
- m_rhsClamp(SIMD_INFINITY),
- m_maxAppliedImpulseMultiDof(maxMotorImpulse, maxMotorImpulse, maxMotorImpulse),
- m_damping(1.0, 1.0, 1.0)
-{
-
- m_maxAppliedImpulse = maxMotorImpulse;
-}
-
-
-void btMultiBodySphericalJointMotor::finalizeMultiDof()
-{
- allocateJacobiansMultiDof();
- // note: we rely on the fact that data.m_jacobians are
- // always initialized to zero by the Constraint ctor
- int linkDoF = 0;
- unsigned int offset = 6 + (m_bodyA->getLink(m_linkA).m_dofOffset + linkDoF);
-
- // row 0: the lower bound
- // row 0: the lower bound
- jacobianA(0)[offset] = 1;
-
- m_numDofsFinalized = m_jacSizeBoth;
-}
-
-
-btMultiBodySphericalJointMotor::~btMultiBodySphericalJointMotor()
-{
-}
-
-int btMultiBodySphericalJointMotor::getIslandIdA() const
-{
- if (this->m_linkA < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyA->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyA->getLink(m_linkA).m_collider)
- {
- return m_bodyA->getLink(m_linkA).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-int btMultiBodySphericalJointMotor::getIslandIdB() const
-{
- if (m_linkB < 0)
- {
- btMultiBodyLinkCollider* col = m_bodyB->getBaseCollider();
- if (col)
- return col->getIslandTag();
- }
- else
- {
- if (m_bodyB->getLink(m_linkB).m_collider)
- {
- return m_bodyB->getLink(m_linkB).m_collider->getIslandTag();
- }
- }
- return -1;
-}
-
-void btMultiBodySphericalJointMotor::createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal)
-{
- // only positions need to be updated -- data.m_jacobians and force
- // directions were set in the ctor and never change.
-
- if (m_numDofsFinalized != m_jacSizeBoth)
- {
- finalizeMultiDof();
- }
-
- //don't crash
- if (m_numDofsFinalized != m_jacSizeBoth)
- return;
-
-
- if (m_maxAppliedImpulse == 0.f)
- return;
-
- const btScalar posError = 0;
- const btVector3 dummy(0, 0, 0);
-
-
- btVector3 axis[3] = { btVector3(1, 0, 0), btVector3(0, 1, 0), btVector3(0, 0, 1) };
-
- btQuaternion desiredQuat = m_desiredPosition;
- btQuaternion currentQuat(m_bodyA->getJointPosMultiDof(m_linkA)[0],
- m_bodyA->getJointPosMultiDof(m_linkA)[1],
- m_bodyA->getJointPosMultiDof(m_linkA)[2],
- m_bodyA->getJointPosMultiDof(m_linkA)[3]);
-
-btQuaternion relRot = currentQuat.inverse() * desiredQuat;
- btVector3 angleDiff;
- btGeneric6DofSpring2Constraint::matrixToEulerXYZ(btMatrix3x3(relRot), angleDiff);
-
-
-
- for (int row = 0; row < getNumRows(); row++)
- {
- btMultiBodySolverConstraint& constraintRow = constraintRows.expandNonInitializing();
-
- int dof = row;
-
- btScalar currentVelocity = m_bodyA->getJointVelMultiDof(m_linkA)[dof];
- btScalar desiredVelocity = this->m_desiredVelocity[row];
-
- double kd = m_use_multi_dof_params ? m_kd[row % 3] : m_kd[0];
- btScalar velocityError = (desiredVelocity - currentVelocity) * kd;
-
- btMatrix3x3 frameAworld;
- frameAworld.setIdentity();
- frameAworld = m_bodyA->localFrameToWorld(m_linkA, frameAworld);
- btScalar posError = 0;
- {
- btAssert(m_bodyA->getLink(m_linkA).m_jointType == btMultibodyLink::eSpherical);
- switch (m_bodyA->getLink(m_linkA).m_jointType)
- {
- case btMultibodyLink::eSpherical:
- {
- btVector3 constraintNormalAng = frameAworld.getColumn(row % 3);
- double kp = m_use_multi_dof_params ? m_kp[row % 3] : m_kp[0];
- posError = kp*angleDiff[row % 3];
- double max_applied_impulse = m_use_multi_dof_params ? m_maxAppliedImpulseMultiDof[row % 3] : m_maxAppliedImpulse;
- fillMultiBodyConstraint(constraintRow, data, 0, 0, constraintNormalAng,
- btVector3(0,0,0), dummy, dummy,
- posError,
- infoGlobal,
- -max_applied_impulse, max_applied_impulse, true,
- 1.0, false, 0, 0,
- m_damping[row % 3]);
- constraintRow.m_orgConstraint = this;
- constraintRow.m_orgDofIndex = row;
- break;
- }
- default:
- {
- btAssert(0);
- }
- };
- }
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h b/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h
deleted file mode 100644
index bdeccc2e24..0000000000
--- a/thirdparty/bullet/BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2018 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///This file was written by Erwin Coumans
-
-#ifndef BT_MULTIBODY_SPHERICAL_JOINT_MOTOR_H
-#define BT_MULTIBODY_SPHERICAL_JOINT_MOTOR_H
-
-#include "btMultiBodyConstraint.h"
-struct btSolverInfo;
-
-class btMultiBodySphericalJointMotor : public btMultiBodyConstraint
-{
-protected:
- btVector3 m_desiredVelocity;
- btQuaternion m_desiredPosition;
- bool m_use_multi_dof_params;
- btVector3 m_kd;
- btVector3 m_kp;
- btScalar m_erp;
- btScalar m_rhsClamp; //maximum error
- btVector3 m_maxAppliedImpulseMultiDof;
- btVector3 m_damping;
-
-public:
- btMultiBodySphericalJointMotor(btMultiBody* body, int link, btScalar maxMotorImpulse);
-
- virtual ~btMultiBodySphericalJointMotor();
- virtual void finalizeMultiDof();
-
- virtual int getIslandIdA() const;
- virtual int getIslandIdB() const;
-
- virtual void createConstraintRows(btMultiBodyConstraintArray& constraintRows,
- btMultiBodyJacobianData& data,
- const btContactSolverInfo& infoGlobal);
-
- virtual void setVelocityTarget(const btVector3& velTarget, btScalar kd = 1.0)
- {
- m_desiredVelocity = velTarget;
- m_kd = btVector3(kd, kd, kd);
- m_use_multi_dof_params = false;
- }
-
- virtual void setVelocityTargetMultiDof(const btVector3& velTarget, const btVector3& kd = btVector3(1.0, 1.0, 1.0))
- {
- m_desiredVelocity = velTarget;
- m_kd = kd;
- m_use_multi_dof_params = true;
- }
-
- virtual void setPositionTarget(const btQuaternion& posTarget, btScalar kp =1.f)
- {
- m_desiredPosition = posTarget;
- m_kp = btVector3(kp, kp, kp);
- m_use_multi_dof_params = false;
- }
-
- virtual void setPositionTargetMultiDof(const btQuaternion& posTarget, const btVector3& kp = btVector3(1.f, 1.f, 1.f))
- {
- m_desiredPosition = posTarget;
- m_kp = kp;
- m_use_multi_dof_params = true;
- }
-
- virtual void setErp(btScalar erp)
- {
- m_erp = erp;
- }
- virtual btScalar getErp() const
- {
- return m_erp;
- }
- virtual void setRhsClamp(btScalar rhsClamp)
- {
- m_rhsClamp = rhsClamp;
- }
-
- btScalar getMaxAppliedImpulseMultiDof(int i) const
- {
- return m_maxAppliedImpulseMultiDof[i];
- }
-
- void setMaxAppliedImpulseMultiDof(const btVector3& maxImp)
- {
- m_maxAppliedImpulseMultiDof = maxImp;
- m_use_multi_dof_params = true;
- }
-
- btScalar getDamping(int i) const
- {
- return m_damping[i];
- }
-
- void setDamping(const btVector3& damping)
- {
- m_damping = damping;
- }
-
- virtual void debugDraw(class btIDebugDraw* drawer)
- {
- //todo(erwincoumans)
- }
-};
-
-#endif //BT_MULTIBODY_SPHERICAL_JOINT_MOTOR_H
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.cpp b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.cpp
deleted file mode 100644
index 98ecdc0794..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.cpp
+++ /dev/null
@@ -1,2158 +0,0 @@
-/*************************************************************************
-* *
-* Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
-* All rights reserved. Email: russ@q12.org Web: www.q12.org *
-* *
-* This library is free software; you can redistribute it and/or *
-* modify it under the terms of EITHER: *
-* (1) The GNU Lesser General Public License as published by the Free *
-* Software Foundation; either version 2.1 of the License, or (at *
-* your option) any later version. The text of the GNU Lesser *
-* General Public License is included with this library in the *
-* file LICENSE.TXT. *
-* (2) The BSD-style license that is included with this library in *
-* the file LICENSE-BSD.TXT. *
-* *
-* This library is distributed in the hope that it will be useful, *
-* but WITHOUT ANY WARRANTY; without even the implied warranty of *
-* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
-* LICENSE.TXT and LICENSE-BSD.TXT for more details. *
-* *
-*************************************************************************/
-
-/*
-
-
-THE ALGORITHM
--------------
-
-solve A*x = b+w, with x and w subject to certain LCP conditions.
-each x(i),w(i) must lie on one of the three line segments in the following
-diagram. each line segment corresponds to one index set :
-
- w(i)
- /|\ | :
- | | :
- | |i in N :
- w>0 | |state[i]=0 :
- | | :
- | | : i in C
- w=0 + +-----------------------+
- | : |
- | : |
- w<0 | : |i in N
- | : |state[i]=1
- | : |
- | : |
- +-------|-----------|-----------|----------> x(i)
- lo 0 hi
-
-the Dantzig algorithm proceeds as follows:
- for i=1:n
- * if (x(i),w(i)) is not on the line, push x(i) and w(i) positive or
- negative towards the line. as this is done, the other (x(j),w(j))
- for j<i are constrained to be on the line. if any (x,w) reaches the
- end of a line segment then it is switched between index sets.
- * i is added to the appropriate index set depending on what line segment
- it hits.
-
-we restrict lo(i) <= 0 and hi(i) >= 0. this makes the algorithm a bit
-simpler, because the starting point for x(i),w(i) is always on the dotted
-line x=0 and x will only ever increase in one direction, so it can only hit
-two out of the three line segments.
-
-
-NOTES
------
-
-this is an implementation of "lcp_dantzig2_ldlt.m" and "lcp_dantzig_lohi.m".
-the implementation is split into an LCP problem object (btLCP) and an LCP
-driver function. most optimization occurs in the btLCP object.
-
-a naive implementation of the algorithm requires either a lot of data motion
-or a lot of permutation-array lookup, because we are constantly re-ordering
-rows and columns. to avoid this and make a more optimized algorithm, a
-non-trivial data structure is used to represent the matrix A (this is
-implemented in the fast version of the btLCP object).
-
-during execution of this algorithm, some indexes in A are clamped (set C),
-some are non-clamped (set N), and some are "don't care" (where x=0).
-A,x,b,w (and other problem vectors) are permuted such that the clamped
-indexes are first, the unclamped indexes are next, and the don't-care
-indexes are last. this permutation is recorded in the array `p'.
-initially p = 0..n-1, and as the rows and columns of A,x,b,w are swapped,
-the corresponding elements of p are swapped.
-
-because the C and N elements are grouped together in the rows of A, we can do
-lots of work with a fast dot product function. if A,x,etc were not permuted
-and we only had a permutation array, then those dot products would be much
-slower as we would have a permutation array lookup in some inner loops.
-
-A is accessed through an array of row pointers, so that element (i,j) of the
-permuted matrix is A[i][j]. this makes row swapping fast. for column swapping
-we still have to actually move the data.
-
-during execution of this algorithm we maintain an L*D*L' factorization of
-the clamped submatrix of A (call it `AC') which is the top left nC*nC
-submatrix of A. there are two ways we could arrange the rows/columns in AC.
-
-(1) AC is always permuted such that L*D*L' = AC. this causes a problem
-when a row/column is removed from C, because then all the rows/columns of A
-between the deleted index and the end of C need to be rotated downward.
-this results in a lot of data motion and slows things down.
-(2) L*D*L' is actually a factorization of a *permutation* of AC (which is
-itself a permutation of the underlying A). this is what we do - the
-permutation is recorded in the vector C. call this permutation A[C,C].
-when a row/column is removed from C, all we have to do is swap two
-rows/columns and manipulate C.
-
-*/
-
-#include "btDantzigLCP.h"
-
-#include <string.h> //memcpy
-
-bool s_error = false;
-
-//***************************************************************************
-// code generation parameters
-
-#define btLCP_FAST // use fast btLCP object
-
-// option 1 : matrix row pointers (less data copying)
-#define BTROWPTRS
-#define BTATYPE btScalar **
-#define BTAROW(i) (m_A[i])
-
-// option 2 : no matrix row pointers (slightly faster inner loops)
-//#define NOROWPTRS
-//#define BTATYPE btScalar *
-//#define BTAROW(i) (m_A+(i)*m_nskip)
-
-#define BTNUB_OPTIMIZATIONS
-
-/* solve L*X=B, with B containing 1 right hand sides.
- * L is an n*n lower triangular matrix with ones on the diagonal.
- * L is stored by rows and its leading dimension is lskip.
- * B is an n*1 matrix that contains the right hand sides.
- * B is stored by columns and its leading dimension is also lskip.
- * B is overwritten with X.
- * this processes blocks of 2*2.
- * if this is in the factorizer source file, n must be a multiple of 2.
- */
-
-static void btSolveL1_1(const btScalar *L, btScalar *B, int n, int lskip1)
-{
- /* declare variables - Z matrix, p and q vectors, etc */
- btScalar Z11, m11, Z21, m21, p1, q1, p2, *ex;
- const btScalar *ell;
- int i, j;
- /* compute all 2 x 1 blocks of X */
- for (i = 0; i < n; i += 2)
- {
- /* compute all 2 x 1 block of X, from rows i..i+2-1 */
- /* set the Z matrix to 0 */
- Z11 = 0;
- Z21 = 0;
- ell = L + i * lskip1;
- ex = B;
- /* the inner loop that computes outer products and adds them to Z */
- for (j = i - 2; j >= 0; j -= 2)
- {
- /* compute outer product and add it to the Z matrix */
- p1 = ell[0];
- q1 = ex[0];
- m11 = p1 * q1;
- p2 = ell[lskip1];
- m21 = p2 * q1;
- Z11 += m11;
- Z21 += m21;
- /* compute outer product and add it to the Z matrix */
- p1 = ell[1];
- q1 = ex[1];
- m11 = p1 * q1;
- p2 = ell[1 + lskip1];
- m21 = p2 * q1;
- /* advance pointers */
- ell += 2;
- ex += 2;
- Z11 += m11;
- Z21 += m21;
- /* end of inner loop */
- }
- /* compute left-over iterations */
- j += 2;
- for (; j > 0; j--)
- {
- /* compute outer product and add it to the Z matrix */
- p1 = ell[0];
- q1 = ex[0];
- m11 = p1 * q1;
- p2 = ell[lskip1];
- m21 = p2 * q1;
- /* advance pointers */
- ell += 1;
- ex += 1;
- Z11 += m11;
- Z21 += m21;
- }
- /* finish computing the X(i) block */
- Z11 = ex[0] - Z11;
- ex[0] = Z11;
- p1 = ell[lskip1];
- Z21 = ex[1] - Z21 - p1 * Z11;
- ex[1] = Z21;
- /* end of outer loop */
- }
-}
-
-/* solve L*X=B, with B containing 2 right hand sides.
- * L is an n*n lower triangular matrix with ones on the diagonal.
- * L is stored by rows and its leading dimension is lskip.
- * B is an n*2 matrix that contains the right hand sides.
- * B is stored by columns and its leading dimension is also lskip.
- * B is overwritten with X.
- * this processes blocks of 2*2.
- * if this is in the factorizer source file, n must be a multiple of 2.
- */
-
-static void btSolveL1_2(const btScalar *L, btScalar *B, int n, int lskip1)
-{
- /* declare variables - Z matrix, p and q vectors, etc */
- btScalar Z11, m11, Z12, m12, Z21, m21, Z22, m22, p1, q1, p2, q2, *ex;
- const btScalar *ell;
- int i, j;
- /* compute all 2 x 2 blocks of X */
- for (i = 0; i < n; i += 2)
- {
- /* compute all 2 x 2 block of X, from rows i..i+2-1 */
- /* set the Z matrix to 0 */
- Z11 = 0;
- Z12 = 0;
- Z21 = 0;
- Z22 = 0;
- ell = L + i * lskip1;
- ex = B;
- /* the inner loop that computes outer products and adds them to Z */
- for (j = i - 2; j >= 0; j -= 2)
- {
- /* compute outer product and add it to the Z matrix */
- p1 = ell[0];
- q1 = ex[0];
- m11 = p1 * q1;
- q2 = ex[lskip1];
- m12 = p1 * q2;
- p2 = ell[lskip1];
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z12 += m12;
- Z21 += m21;
- Z22 += m22;
- /* compute outer product and add it to the Z matrix */
- p1 = ell[1];
- q1 = ex[1];
- m11 = p1 * q1;
- q2 = ex[1 + lskip1];
- m12 = p1 * q2;
- p2 = ell[1 + lskip1];
- m21 = p2 * q1;
- m22 = p2 * q2;
- /* advance pointers */
- ell += 2;
- ex += 2;
- Z11 += m11;
- Z12 += m12;
- Z21 += m21;
- Z22 += m22;
- /* end of inner loop */
- }
- /* compute left-over iterations */
- j += 2;
- for (; j > 0; j--)
- {
- /* compute outer product and add it to the Z matrix */
- p1 = ell[0];
- q1 = ex[0];
- m11 = p1 * q1;
- q2 = ex[lskip1];
- m12 = p1 * q2;
- p2 = ell[lskip1];
- m21 = p2 * q1;
- m22 = p2 * q2;
- /* advance pointers */
- ell += 1;
- ex += 1;
- Z11 += m11;
- Z12 += m12;
- Z21 += m21;
- Z22 += m22;
- }
- /* finish computing the X(i) block */
- Z11 = ex[0] - Z11;
- ex[0] = Z11;
- Z12 = ex[lskip1] - Z12;
- ex[lskip1] = Z12;
- p1 = ell[lskip1];
- Z21 = ex[1] - Z21 - p1 * Z11;
- ex[1] = Z21;
- Z22 = ex[1 + lskip1] - Z22 - p1 * Z12;
- ex[1 + lskip1] = Z22;
- /* end of outer loop */
- }
-}
-
-void btFactorLDLT(btScalar *A, btScalar *d, int n, int nskip1)
-{
- int i, j;
- btScalar sum, *ell, *dee, dd, p1, p2, q1, q2, Z11, m11, Z21, m21, Z22, m22;
- if (n < 1) return;
-
- for (i = 0; i <= n - 2; i += 2)
- {
- /* solve L*(D*l)=a, l is scaled elements in 2 x i block at A(i,0) */
- btSolveL1_2(A, A + i * nskip1, i, nskip1);
- /* scale the elements in a 2 x i block at A(i,0), and also */
- /* compute Z = the outer product matrix that we'll need. */
- Z11 = 0;
- Z21 = 0;
- Z22 = 0;
- ell = A + i * nskip1;
- dee = d;
- for (j = i - 6; j >= 0; j -= 6)
- {
- p1 = ell[0];
- p2 = ell[nskip1];
- dd = dee[0];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[0] = q1;
- ell[nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- p1 = ell[1];
- p2 = ell[1 + nskip1];
- dd = dee[1];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[1] = q1;
- ell[1 + nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- p1 = ell[2];
- p2 = ell[2 + nskip1];
- dd = dee[2];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[2] = q1;
- ell[2 + nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- p1 = ell[3];
- p2 = ell[3 + nskip1];
- dd = dee[3];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[3] = q1;
- ell[3 + nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- p1 = ell[4];
- p2 = ell[4 + nskip1];
- dd = dee[4];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[4] = q1;
- ell[4 + nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- p1 = ell[5];
- p2 = ell[5 + nskip1];
- dd = dee[5];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[5] = q1;
- ell[5 + nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- ell += 6;
- dee += 6;
- }
- /* compute left-over iterations */
- j += 6;
- for (; j > 0; j--)
- {
- p1 = ell[0];
- p2 = ell[nskip1];
- dd = dee[0];
- q1 = p1 * dd;
- q2 = p2 * dd;
- ell[0] = q1;
- ell[nskip1] = q2;
- m11 = p1 * q1;
- m21 = p2 * q1;
- m22 = p2 * q2;
- Z11 += m11;
- Z21 += m21;
- Z22 += m22;
- ell++;
- dee++;
- }
- /* solve for diagonal 2 x 2 block at A(i,i) */
- Z11 = ell[0] - Z11;
- Z21 = ell[nskip1] - Z21;
- Z22 = ell[1 + nskip1] - Z22;
- dee = d + i;
- /* factorize 2 x 2 block Z,dee */
- /* factorize row 1 */
- dee[0] = btRecip(Z11);
- /* factorize row 2 */
- sum = 0;
- q1 = Z21;
- q2 = q1 * dee[0];
- Z21 = q2;
- sum += q1 * q2;
- dee[1] = btRecip(Z22 - sum);
- /* done factorizing 2 x 2 block */
- ell[nskip1] = Z21;
- }
- /* compute the (less than 2) rows at the bottom */
- switch (n - i)
- {
- case 0:
- break;
-
- case 1:
- btSolveL1_1(A, A + i * nskip1, i, nskip1);
- /* scale the elements in a 1 x i block at A(i,0), and also */
- /* compute Z = the outer product matrix that we'll need. */
- Z11 = 0;
- ell = A + i * nskip1;
- dee = d;
- for (j = i - 6; j >= 0; j -= 6)
- {
- p1 = ell[0];
- dd = dee[0];
- q1 = p1 * dd;
- ell[0] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- p1 = ell[1];
- dd = dee[1];
- q1 = p1 * dd;
- ell[1] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- p1 = ell[2];
- dd = dee[2];
- q1 = p1 * dd;
- ell[2] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- p1 = ell[3];
- dd = dee[3];
- q1 = p1 * dd;
- ell[3] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- p1 = ell[4];
- dd = dee[4];
- q1 = p1 * dd;
- ell[4] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- p1 = ell[5];
- dd = dee[5];
- q1 = p1 * dd;
- ell[5] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- ell += 6;
- dee += 6;
- }
- /* compute left-over iterations */
- j += 6;
- for (; j > 0; j--)
- {
- p1 = ell[0];
- dd = dee[0];
- q1 = p1 * dd;
- ell[0] = q1;
- m11 = p1 * q1;
- Z11 += m11;
- ell++;
- dee++;
- }
- /* solve for diagonal 1 x 1 block at A(i,i) */
- Z11 = ell[0] - Z11;
- dee = d + i;
- /* factorize 1 x 1 block Z,dee */
- /* factorize row 1 */
- dee[0] = btRecip(Z11);
- /* done factorizing 1 x 1 block */
- break;
-
- //default: *((char*)0)=0; /* this should never happen! */
- }
-}
-
-/* solve L*X=B, with B containing 1 right hand sides.
- * L is an n*n lower triangular matrix with ones on the diagonal.
- * L is stored by rows and its leading dimension is lskip.
- * B is an n*1 matrix that contains the right hand sides.
- * B is stored by columns and its leading dimension is also lskip.
- * B is overwritten with X.
- * this processes blocks of 4*4.
- * if this is in the factorizer source file, n must be a multiple of 4.
- */
-
-void btSolveL1(const btScalar *L, btScalar *B, int n, int lskip1)
-{
- /* declare variables - Z matrix, p and q vectors, etc */
- btScalar Z11, Z21, Z31, Z41, p1, q1, p2, p3, p4, *ex;
- const btScalar *ell;
- int lskip2, lskip3, i, j;
- /* compute lskip values */
- lskip2 = 2 * lskip1;
- lskip3 = 3 * lskip1;
- /* compute all 4 x 1 blocks of X */
- for (i = 0; i <= n - 4; i += 4)
- {
- /* compute all 4 x 1 block of X, from rows i..i+4-1 */
- /* set the Z matrix to 0 */
- Z11 = 0;
- Z21 = 0;
- Z31 = 0;
- Z41 = 0;
- ell = L + i * lskip1;
- ex = B;
- /* the inner loop that computes outer products and adds them to Z */
- for (j = i - 12; j >= 0; j -= 12)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- p2 = ell[lskip1];
- p3 = ell[lskip2];
- p4 = ell[lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[1];
- q1 = ex[1];
- p2 = ell[1 + lskip1];
- p3 = ell[1 + lskip2];
- p4 = ell[1 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[2];
- q1 = ex[2];
- p2 = ell[2 + lskip1];
- p3 = ell[2 + lskip2];
- p4 = ell[2 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[3];
- q1 = ex[3];
- p2 = ell[3 + lskip1];
- p3 = ell[3 + lskip2];
- p4 = ell[3 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[4];
- q1 = ex[4];
- p2 = ell[4 + lskip1];
- p3 = ell[4 + lskip2];
- p4 = ell[4 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[5];
- q1 = ex[5];
- p2 = ell[5 + lskip1];
- p3 = ell[5 + lskip2];
- p4 = ell[5 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[6];
- q1 = ex[6];
- p2 = ell[6 + lskip1];
- p3 = ell[6 + lskip2];
- p4 = ell[6 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[7];
- q1 = ex[7];
- p2 = ell[7 + lskip1];
- p3 = ell[7 + lskip2];
- p4 = ell[7 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[8];
- q1 = ex[8];
- p2 = ell[8 + lskip1];
- p3 = ell[8 + lskip2];
- p4 = ell[8 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[9];
- q1 = ex[9];
- p2 = ell[9 + lskip1];
- p3 = ell[9 + lskip2];
- p4 = ell[9 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[10];
- q1 = ex[10];
- p2 = ell[10 + lskip1];
- p3 = ell[10 + lskip2];
- p4 = ell[10 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* load p and q values */
- p1 = ell[11];
- q1 = ex[11];
- p2 = ell[11 + lskip1];
- p3 = ell[11 + lskip2];
- p4 = ell[11 + lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* advance pointers */
- ell += 12;
- ex += 12;
- /* end of inner loop */
- }
- /* compute left-over iterations */
- j += 12;
- for (; j > 0; j--)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- p2 = ell[lskip1];
- p3 = ell[lskip2];
- p4 = ell[lskip3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- Z21 += p2 * q1;
- Z31 += p3 * q1;
- Z41 += p4 * q1;
- /* advance pointers */
- ell += 1;
- ex += 1;
- }
- /* finish computing the X(i) block */
- Z11 = ex[0] - Z11;
- ex[0] = Z11;
- p1 = ell[lskip1];
- Z21 = ex[1] - Z21 - p1 * Z11;
- ex[1] = Z21;
- p1 = ell[lskip2];
- p2 = ell[1 + lskip2];
- Z31 = ex[2] - Z31 - p1 * Z11 - p2 * Z21;
- ex[2] = Z31;
- p1 = ell[lskip3];
- p2 = ell[1 + lskip3];
- p3 = ell[2 + lskip3];
- Z41 = ex[3] - Z41 - p1 * Z11 - p2 * Z21 - p3 * Z31;
- ex[3] = Z41;
- /* end of outer loop */
- }
- /* compute rows at end that are not a multiple of block size */
- for (; i < n; i++)
- {
- /* compute all 1 x 1 block of X, from rows i..i+1-1 */
- /* set the Z matrix to 0 */
- Z11 = 0;
- ell = L + i * lskip1;
- ex = B;
- /* the inner loop that computes outer products and adds them to Z */
- for (j = i - 12; j >= 0; j -= 12)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[1];
- q1 = ex[1];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[2];
- q1 = ex[2];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[3];
- q1 = ex[3];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[4];
- q1 = ex[4];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[5];
- q1 = ex[5];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[6];
- q1 = ex[6];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[7];
- q1 = ex[7];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[8];
- q1 = ex[8];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[9];
- q1 = ex[9];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[10];
- q1 = ex[10];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* load p and q values */
- p1 = ell[11];
- q1 = ex[11];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* advance pointers */
- ell += 12;
- ex += 12;
- /* end of inner loop */
- }
- /* compute left-over iterations */
- j += 12;
- for (; j > 0; j--)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- /* compute outer product and add it to the Z matrix */
- Z11 += p1 * q1;
- /* advance pointers */
- ell += 1;
- ex += 1;
- }
- /* finish computing the X(i) block */
- Z11 = ex[0] - Z11;
- ex[0] = Z11;
- }
-}
-
-/* solve L^T * x=b, with b containing 1 right hand side.
- * L is an n*n lower triangular matrix with ones on the diagonal.
- * L is stored by rows and its leading dimension is lskip.
- * b is an n*1 matrix that contains the right hand side.
- * b is overwritten with x.
- * this processes blocks of 4.
- */
-
-void btSolveL1T(const btScalar *L, btScalar *B, int n, int lskip1)
-{
- /* declare variables - Z matrix, p and q vectors, etc */
- btScalar Z11, m11, Z21, m21, Z31, m31, Z41, m41, p1, q1, p2, p3, p4, *ex;
- const btScalar *ell;
- int lskip2, i, j;
- // int lskip3;
- /* special handling for L and B because we're solving L1 *transpose* */
- L = L + (n - 1) * (lskip1 + 1);
- B = B + n - 1;
- lskip1 = -lskip1;
- /* compute lskip values */
- lskip2 = 2 * lskip1;
- //lskip3 = 3*lskip1;
- /* compute all 4 x 1 blocks of X */
- for (i = 0; i <= n - 4; i += 4)
- {
- /* compute all 4 x 1 block of X, from rows i..i+4-1 */
- /* set the Z matrix to 0 */
- Z11 = 0;
- Z21 = 0;
- Z31 = 0;
- Z41 = 0;
- ell = L - i;
- ex = B;
- /* the inner loop that computes outer products and adds them to Z */
- for (j = i - 4; j >= 0; j -= 4)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- p2 = ell[-1];
- p3 = ell[-2];
- p4 = ell[-3];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- m21 = p2 * q1;
- m31 = p3 * q1;
- m41 = p4 * q1;
- ell += lskip1;
- Z11 += m11;
- Z21 += m21;
- Z31 += m31;
- Z41 += m41;
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[-1];
- p2 = ell[-1];
- p3 = ell[-2];
- p4 = ell[-3];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- m21 = p2 * q1;
- m31 = p3 * q1;
- m41 = p4 * q1;
- ell += lskip1;
- Z11 += m11;
- Z21 += m21;
- Z31 += m31;
- Z41 += m41;
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[-2];
- p2 = ell[-1];
- p3 = ell[-2];
- p4 = ell[-3];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- m21 = p2 * q1;
- m31 = p3 * q1;
- m41 = p4 * q1;
- ell += lskip1;
- Z11 += m11;
- Z21 += m21;
- Z31 += m31;
- Z41 += m41;
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[-3];
- p2 = ell[-1];
- p3 = ell[-2];
- p4 = ell[-3];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- m21 = p2 * q1;
- m31 = p3 * q1;
- m41 = p4 * q1;
- ell += lskip1;
- ex -= 4;
- Z11 += m11;
- Z21 += m21;
- Z31 += m31;
- Z41 += m41;
- /* end of inner loop */
- }
- /* compute left-over iterations */
- j += 4;
- for (; j > 0; j--)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- p2 = ell[-1];
- p3 = ell[-2];
- p4 = ell[-3];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- m21 = p2 * q1;
- m31 = p3 * q1;
- m41 = p4 * q1;
- ell += lskip1;
- ex -= 1;
- Z11 += m11;
- Z21 += m21;
- Z31 += m31;
- Z41 += m41;
- }
- /* finish computing the X(i) block */
- Z11 = ex[0] - Z11;
- ex[0] = Z11;
- p1 = ell[-1];
- Z21 = ex[-1] - Z21 - p1 * Z11;
- ex[-1] = Z21;
- p1 = ell[-2];
- p2 = ell[-2 + lskip1];
- Z31 = ex[-2] - Z31 - p1 * Z11 - p2 * Z21;
- ex[-2] = Z31;
- p1 = ell[-3];
- p2 = ell[-3 + lskip1];
- p3 = ell[-3 + lskip2];
- Z41 = ex[-3] - Z41 - p1 * Z11 - p2 * Z21 - p3 * Z31;
- ex[-3] = Z41;
- /* end of outer loop */
- }
- /* compute rows at end that are not a multiple of block size */
- for (; i < n; i++)
- {
- /* compute all 1 x 1 block of X, from rows i..i+1-1 */
- /* set the Z matrix to 0 */
- Z11 = 0;
- ell = L - i;
- ex = B;
- /* the inner loop that computes outer products and adds them to Z */
- for (j = i - 4; j >= 0; j -= 4)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- ell += lskip1;
- Z11 += m11;
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[-1];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- ell += lskip1;
- Z11 += m11;
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[-2];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- ell += lskip1;
- Z11 += m11;
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[-3];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- ell += lskip1;
- ex -= 4;
- Z11 += m11;
- /* end of inner loop */
- }
- /* compute left-over iterations */
- j += 4;
- for (; j > 0; j--)
- {
- /* load p and q values */
- p1 = ell[0];
- q1 = ex[0];
- /* compute outer product and add it to the Z matrix */
- m11 = p1 * q1;
- ell += lskip1;
- ex -= 1;
- Z11 += m11;
- }
- /* finish computing the X(i) block */
- Z11 = ex[0] - Z11;
- ex[0] = Z11;
- }
-}
-
-void btVectorScale(btScalar *a, const btScalar *d, int n)
-{
- btAssert(a && d && n >= 0);
- for (int i = 0; i < n; i++)
- {
- a[i] *= d[i];
- }
-}
-
-void btSolveLDLT(const btScalar *L, const btScalar *d, btScalar *b, int n, int nskip)
-{
- btAssert(L && d && b && n > 0 && nskip >= n);
- btSolveL1(L, b, n, nskip);
- btVectorScale(b, d, n);
- btSolveL1T(L, b, n, nskip);
-}
-
-//***************************************************************************
-
-// swap row/column i1 with i2 in the n*n matrix A. the leading dimension of
-// A is nskip. this only references and swaps the lower triangle.
-// if `do_fast_row_swaps' is nonzero and row pointers are being used, then
-// rows will be swapped by exchanging row pointers. otherwise the data will
-// be copied.
-
-static void btSwapRowsAndCols(BTATYPE A, int n, int i1, int i2, int nskip,
- int do_fast_row_swaps)
-{
- btAssert(A && n > 0 && i1 >= 0 && i2 >= 0 && i1 < n && i2 < n &&
- nskip >= n && i1 < i2);
-
-#ifdef BTROWPTRS
- btScalar *A_i1 = A[i1];
- btScalar *A_i2 = A[i2];
- for (int i = i1 + 1; i < i2; ++i)
- {
- btScalar *A_i_i1 = A[i] + i1;
- A_i1[i] = *A_i_i1;
- *A_i_i1 = A_i2[i];
- }
- A_i1[i2] = A_i1[i1];
- A_i1[i1] = A_i2[i1];
- A_i2[i1] = A_i2[i2];
- // swap rows, by swapping row pointers
- if (do_fast_row_swaps)
- {
- A[i1] = A_i2;
- A[i2] = A_i1;
- }
- else
- {
- // Only swap till i2 column to match A plain storage variant.
- for (int k = 0; k <= i2; ++k)
- {
- btScalar tmp = A_i1[k];
- A_i1[k] = A_i2[k];
- A_i2[k] = tmp;
- }
- }
- // swap columns the hard way
- for (int j = i2 + 1; j < n; ++j)
- {
- btScalar *A_j = A[j];
- btScalar tmp = A_j[i1];
- A_j[i1] = A_j[i2];
- A_j[i2] = tmp;
- }
-#else
- btScalar *A_i1 = A + i1 * nskip;
- btScalar *A_i2 = A + i2 * nskip;
- for (int k = 0; k < i1; ++k)
- {
- btScalar tmp = A_i1[k];
- A_i1[k] = A_i2[k];
- A_i2[k] = tmp;
- }
- btScalar *A_i = A_i1 + nskip;
- for (int i = i1 + 1; i < i2; A_i += nskip, ++i)
- {
- btScalar tmp = A_i2[i];
- A_i2[i] = A_i[i1];
- A_i[i1] = tmp;
- }
- {
- btScalar tmp = A_i1[i1];
- A_i1[i1] = A_i2[i2];
- A_i2[i2] = tmp;
- }
- btScalar *A_j = A_i2 + nskip;
- for (int j = i2 + 1; j < n; A_j += nskip, ++j)
- {
- btScalar tmp = A_j[i1];
- A_j[i1] = A_j[i2];
- A_j[i2] = tmp;
- }
-#endif
-}
-
-// swap two indexes in the n*n LCP problem. i1 must be <= i2.
-
-static void btSwapProblem(BTATYPE A, btScalar *x, btScalar *b, btScalar *w, btScalar *lo,
- btScalar *hi, int *p, bool *state, int *findex,
- int n, int i1, int i2, int nskip,
- int do_fast_row_swaps)
-{
- btScalar tmpr;
- int tmpi;
- bool tmpb;
- btAssert(n > 0 && i1 >= 0 && i2 >= 0 && i1 < n && i2 < n && nskip >= n && i1 <= i2);
- if (i1 == i2) return;
-
- btSwapRowsAndCols(A, n, i1, i2, nskip, do_fast_row_swaps);
-
- tmpr = x[i1];
- x[i1] = x[i2];
- x[i2] = tmpr;
-
- tmpr = b[i1];
- b[i1] = b[i2];
- b[i2] = tmpr;
-
- tmpr = w[i1];
- w[i1] = w[i2];
- w[i2] = tmpr;
-
- tmpr = lo[i1];
- lo[i1] = lo[i2];
- lo[i2] = tmpr;
-
- tmpr = hi[i1];
- hi[i1] = hi[i2];
- hi[i2] = tmpr;
-
- tmpi = p[i1];
- p[i1] = p[i2];
- p[i2] = tmpi;
-
- tmpb = state[i1];
- state[i1] = state[i2];
- state[i2] = tmpb;
-
- if (findex)
- {
- tmpi = findex[i1];
- findex[i1] = findex[i2];
- findex[i2] = tmpi;
- }
-}
-
-//***************************************************************************
-// btLCP manipulator object. this represents an n*n LCP problem.
-//
-// two index sets C and N are kept. each set holds a subset of
-// the variable indexes 0..n-1. an index can only be in one set.
-// initially both sets are empty.
-//
-// the index set C is special: solutions to A(C,C)\A(C,i) can be generated.
-
-//***************************************************************************
-// fast implementation of btLCP. see the above definition of btLCP for
-// interface comments.
-//
-// `p' records the permutation of A,x,b,w,etc. p is initially 1:n and is
-// permuted as the other vectors/matrices are permuted.
-//
-// A,x,b,w,lo,hi,state,findex,p,c are permuted such that sets C,N have
-// contiguous indexes. the don't-care indexes follow N.
-//
-// an L*D*L' factorization is maintained of A(C,C), and whenever indexes are
-// added or removed from the set C the factorization is updated.
-// thus L*D*L'=A[C,C], i.e. a permuted top left nC*nC submatrix of A.
-// the leading dimension of the matrix L is always `nskip'.
-//
-// at the start there may be other indexes that are unbounded but are not
-// included in `nub'. btLCP will permute the matrix so that absolutely all
-// unbounded vectors are at the start. thus there may be some initial
-// permutation.
-//
-// the algorithms here assume certain patterns, particularly with respect to
-// index transfer.
-
-#ifdef btLCP_FAST
-
-struct btLCP
-{
- const int m_n;
- const int m_nskip;
- int m_nub;
- int m_nC, m_nN; // size of each index set
- BTATYPE const m_A; // A rows
- btScalar *const m_x, *const m_b, *const m_w, *const m_lo, *const m_hi; // permuted LCP problem data
- btScalar *const m_L, *const m_d; // L*D*L' factorization of set C
- btScalar *const m_Dell, *const m_ell, *const m_tmp;
- bool *const m_state;
- int *const m_findex, *const m_p, *const m_C;
-
- btLCP(int _n, int _nskip, int _nub, btScalar *_Adata, btScalar *_x, btScalar *_b, btScalar *_w,
- btScalar *_lo, btScalar *_hi, btScalar *l, btScalar *_d,
- btScalar *_Dell, btScalar *_ell, btScalar *_tmp,
- bool *_state, int *_findex, int *p, int *c, btScalar **Arows);
- int getNub() const { return m_nub; }
- void transfer_i_to_C(int i);
- void transfer_i_to_N(int i) { m_nN++; } // because we can assume C and N span 1:i-1
- void transfer_i_from_N_to_C(int i);
- void transfer_i_from_C_to_N(int i, btAlignedObjectArray<btScalar> &scratch);
- int numC() const { return m_nC; }
- int numN() const { return m_nN; }
- int indexC(int i) const { return i; }
- int indexN(int i) const { return i + m_nC; }
- btScalar Aii(int i) const { return BTAROW(i)[i]; }
- btScalar AiC_times_qC(int i, btScalar *q) const { return btLargeDot(BTAROW(i), q, m_nC); }
- btScalar AiN_times_qN(int i, btScalar *q) const { return btLargeDot(BTAROW(i) + m_nC, q + m_nC, m_nN); }
- void pN_equals_ANC_times_qC(btScalar *p, btScalar *q);
- void pN_plusequals_ANi(btScalar *p, int i, int sign = 1);
- void pC_plusequals_s_times_qC(btScalar *p, btScalar s, btScalar *q);
- void pN_plusequals_s_times_qN(btScalar *p, btScalar s, btScalar *q);
- void solve1(btScalar *a, int i, int dir = 1, int only_transfer = 0);
- void unpermute();
-};
-
-btLCP::btLCP(int _n, int _nskip, int _nub, btScalar *_Adata, btScalar *_x, btScalar *_b, btScalar *_w,
- btScalar *_lo, btScalar *_hi, btScalar *l, btScalar *_d,
- btScalar *_Dell, btScalar *_ell, btScalar *_tmp,
- bool *_state, int *_findex, int *p, int *c, btScalar **Arows) : m_n(_n), m_nskip(_nskip), m_nub(_nub), m_nC(0), m_nN(0),
-#ifdef BTROWPTRS
- m_A(Arows),
-#else
- m_A(_Adata),
-#endif
- m_x(_x),
- m_b(_b),
- m_w(_w),
- m_lo(_lo),
- m_hi(_hi),
- m_L(l),
- m_d(_d),
- m_Dell(_Dell),
- m_ell(_ell),
- m_tmp(_tmp),
- m_state(_state),
- m_findex(_findex),
- m_p(p),
- m_C(c)
-{
- {
- btSetZero(m_x, m_n);
- }
-
- {
-#ifdef BTROWPTRS
- // make matrix row pointers
- btScalar *aptr = _Adata;
- BTATYPE A = m_A;
- const int n = m_n, nskip = m_nskip;
- for (int k = 0; k < n; aptr += nskip, ++k) A[k] = aptr;
-#endif
- }
-
- {
- int *p = m_p;
- const int n = m_n;
- for (int k = 0; k < n; ++k) p[k] = k; // initially unpermuted
- }
-
- /*
- // for testing, we can do some random swaps in the area i > nub
- {
- const int n = m_n;
- const int nub = m_nub;
- if (nub < n) {
- for (int k=0; k<100; k++) {
- int i1,i2;
- do {
- i1 = dRandInt(n-nub)+nub;
- i2 = dRandInt(n-nub)+nub;
- }
- while (i1 > i2);
- //printf ("--> %d %d\n",i1,i2);
- btSwapProblem (m_A,m_x,m_b,m_w,m_lo,m_hi,m_p,m_state,m_findex,n,i1,i2,m_nskip,0);
- }
- }
- */
-
- // permute the problem so that *all* the unbounded variables are at the
- // start, i.e. look for unbounded variables not included in `nub'. we can
- // potentially push up `nub' this way and get a bigger initial factorization.
- // note that when we swap rows/cols here we must not just swap row pointers,
- // as the initial factorization relies on the data being all in one chunk.
- // variables that have findex >= 0 are *not* considered to be unbounded even
- // if lo=-inf and hi=inf - this is because these limits may change during the
- // solution process.
-
- {
- int *findex = m_findex;
- btScalar *lo = m_lo, *hi = m_hi;
- const int n = m_n;
- for (int k = m_nub; k < n; ++k)
- {
- if (findex && findex[k] >= 0) continue;
- if (lo[k] == -BT_INFINITY && hi[k] == BT_INFINITY)
- {
- btSwapProblem(m_A, m_x, m_b, m_w, lo, hi, m_p, m_state, findex, n, m_nub, k, m_nskip, 0);
- m_nub++;
- }
- }
- }
-
- // if there are unbounded variables at the start, factorize A up to that
- // point and solve for x. this puts all indexes 0..nub-1 into C.
- if (m_nub > 0)
- {
- const int nub = m_nub;
- {
- btScalar *Lrow = m_L;
- const int nskip = m_nskip;
- for (int j = 0; j < nub; Lrow += nskip, ++j) memcpy(Lrow, BTAROW(j), (j + 1) * sizeof(btScalar));
- }
- btFactorLDLT(m_L, m_d, nub, m_nskip);
- memcpy(m_x, m_b, nub * sizeof(btScalar));
- btSolveLDLT(m_L, m_d, m_x, nub, m_nskip);
- btSetZero(m_w, nub);
- {
- int *C = m_C;
- for (int k = 0; k < nub; ++k) C[k] = k;
- }
- m_nC = nub;
- }
-
- // permute the indexes > nub such that all findex variables are at the end
- if (m_findex)
- {
- const int nub = m_nub;
- int *findex = m_findex;
- int num_at_end = 0;
- for (int k = m_n - 1; k >= nub; k--)
- {
- if (findex[k] >= 0)
- {
- btSwapProblem(m_A, m_x, m_b, m_w, m_lo, m_hi, m_p, m_state, findex, m_n, k, m_n - 1 - num_at_end, m_nskip, 1);
- num_at_end++;
- }
- }
- }
-
- // print info about indexes
- /*
- {
- const int n = m_n;
- const int nub = m_nub;
- for (int k=0; k<n; k++) {
- if (k<nub) printf ("C");
- else if (m_lo[k]==-BT_INFINITY && m_hi[k]==BT_INFINITY) printf ("c");
- else printf (".");
- }
- printf ("\n");
- }
- */
-}
-
-void btLCP::transfer_i_to_C(int i)
-{
- {
- if (m_nC > 0)
- {
- // ell,Dell were computed by solve1(). note, ell = D \ L1solve (L,A(i,C))
- {
- const int nC = m_nC;
- btScalar *const Ltgt = m_L + nC * m_nskip, *ell = m_ell;
- for (int j = 0; j < nC; ++j) Ltgt[j] = ell[j];
- }
- const int nC = m_nC;
- m_d[nC] = btRecip(BTAROW(i)[i] - btLargeDot(m_ell, m_Dell, nC));
- }
- else
- {
- m_d[0] = btRecip(BTAROW(i)[i]);
- }
-
- btSwapProblem(m_A, m_x, m_b, m_w, m_lo, m_hi, m_p, m_state, m_findex, m_n, m_nC, i, m_nskip, 1);
-
- const int nC = m_nC;
- m_C[nC] = nC;
- m_nC = nC + 1; // nC value is outdated after this line
- }
-}
-
-void btLCP::transfer_i_from_N_to_C(int i)
-{
- {
- if (m_nC > 0)
- {
- {
- btScalar *const aptr = BTAROW(i);
- btScalar *Dell = m_Dell;
- const int *C = m_C;
-#ifdef BTNUB_OPTIMIZATIONS
- // if nub>0, initial part of aptr unpermuted
- const int nub = m_nub;
- int j = 0;
- for (; j < nub; ++j) Dell[j] = aptr[j];
- const int nC = m_nC;
- for (; j < nC; ++j) Dell[j] = aptr[C[j]];
-#else
- const int nC = m_nC;
- for (int j = 0; j < nC; ++j) Dell[j] = aptr[C[j]];
-#endif
- }
- btSolveL1(m_L, m_Dell, m_nC, m_nskip);
- {
- const int nC = m_nC;
- btScalar *const Ltgt = m_L + nC * m_nskip;
- btScalar *ell = m_ell, *Dell = m_Dell, *d = m_d;
- for (int j = 0; j < nC; ++j) Ltgt[j] = ell[j] = Dell[j] * d[j];
- }
- const int nC = m_nC;
- m_d[nC] = btRecip(BTAROW(i)[i] - btLargeDot(m_ell, m_Dell, nC));
- }
- else
- {
- m_d[0] = btRecip(BTAROW(i)[i]);
- }
-
- btSwapProblem(m_A, m_x, m_b, m_w, m_lo, m_hi, m_p, m_state, m_findex, m_n, m_nC, i, m_nskip, 1);
-
- const int nC = m_nC;
- m_C[nC] = nC;
- m_nN--;
- m_nC = nC + 1; // nC value is outdated after this line
- }
-
- // @@@ TO DO LATER
- // if we just finish here then we'll go back and re-solve for
- // delta_x. but actually we can be more efficient and incrementally
- // update delta_x here. but if we do this, we wont have ell and Dell
- // to use in updating the factorization later.
-}
-
-void btRemoveRowCol(btScalar *A, int n, int nskip, int r)
-{
- btAssert(A && n > 0 && nskip >= n && r >= 0 && r < n);
- if (r >= n - 1) return;
- if (r > 0)
- {
- {
- const size_t move_size = (n - r - 1) * sizeof(btScalar);
- btScalar *Adst = A + r;
- for (int i = 0; i < r; Adst += nskip, ++i)
- {
- btScalar *Asrc = Adst + 1;
- memmove(Adst, Asrc, move_size);
- }
- }
- {
- const size_t cpy_size = r * sizeof(btScalar);
- btScalar *Adst = A + r * nskip;
- for (int i = r; i < (n - 1); ++i)
- {
- btScalar *Asrc = Adst + nskip;
- memcpy(Adst, Asrc, cpy_size);
- Adst = Asrc;
- }
- }
- }
- {
- const size_t cpy_size = (n - r - 1) * sizeof(btScalar);
- btScalar *Adst = A + r * (nskip + 1);
- for (int i = r; i < (n - 1); ++i)
- {
- btScalar *Asrc = Adst + (nskip + 1);
- memcpy(Adst, Asrc, cpy_size);
- Adst = Asrc - 1;
- }
- }
-}
-
-void btLDLTAddTL(btScalar *L, btScalar *d, const btScalar *a, int n, int nskip, btAlignedObjectArray<btScalar> &scratch)
-{
- btAssert(L && d && a && n > 0 && nskip >= n);
-
- if (n < 2) return;
- scratch.resize(2 * nskip);
- btScalar *W1 = &scratch[0];
-
- btScalar *W2 = W1 + nskip;
-
- W1[0] = btScalar(0.0);
- W2[0] = btScalar(0.0);
- for (int j = 1; j < n; ++j)
- {
- W1[j] = W2[j] = (btScalar)(a[j] * SIMDSQRT12);
- }
- btScalar W11 = (btScalar)((btScalar(0.5) * a[0] + 1) * SIMDSQRT12);
- btScalar W21 = (btScalar)((btScalar(0.5) * a[0] - 1) * SIMDSQRT12);
-
- btScalar alpha1 = btScalar(1.0);
- btScalar alpha2 = btScalar(1.0);
-
- {
- btScalar dee = d[0];
- btScalar alphanew = alpha1 + (W11 * W11) * dee;
- btAssert(alphanew != btScalar(0.0));
- dee /= alphanew;
- btScalar gamma1 = W11 * dee;
- dee *= alpha1;
- alpha1 = alphanew;
- alphanew = alpha2 - (W21 * W21) * dee;
- dee /= alphanew;
- //btScalar gamma2 = W21 * dee;
- alpha2 = alphanew;
- btScalar k1 = btScalar(1.0) - W21 * gamma1;
- btScalar k2 = W21 * gamma1 * W11 - W21;
- btScalar *ll = L + nskip;
- for (int p = 1; p < n; ll += nskip, ++p)
- {
- btScalar Wp = W1[p];
- btScalar ell = *ll;
- W1[p] = Wp - W11 * ell;
- W2[p] = k1 * Wp + k2 * ell;
- }
- }
-
- btScalar *ll = L + (nskip + 1);
- for (int j = 1; j < n; ll += nskip + 1, ++j)
- {
- btScalar k1 = W1[j];
- btScalar k2 = W2[j];
-
- btScalar dee = d[j];
- btScalar alphanew = alpha1 + (k1 * k1) * dee;
- btAssert(alphanew != btScalar(0.0));
- dee /= alphanew;
- btScalar gamma1 = k1 * dee;
- dee *= alpha1;
- alpha1 = alphanew;
- alphanew = alpha2 - (k2 * k2) * dee;
- dee /= alphanew;
- btScalar gamma2 = k2 * dee;
- dee *= alpha2;
- d[j] = dee;
- alpha2 = alphanew;
-
- btScalar *l = ll + nskip;
- for (int p = j + 1; p < n; l += nskip, ++p)
- {
- btScalar ell = *l;
- btScalar Wp = W1[p] - k1 * ell;
- ell += gamma1 * Wp;
- W1[p] = Wp;
- Wp = W2[p] - k2 * ell;
- ell -= gamma2 * Wp;
- W2[p] = Wp;
- *l = ell;
- }
- }
-}
-
-#define _BTGETA(i, j) (A[i][j])
-//#define _GETA(i,j) (A[(i)*nskip+(j)])
-#define BTGETA(i, j) ((i > j) ? _BTGETA(i, j) : _BTGETA(j, i))
-
-inline size_t btEstimateLDLTAddTLTmpbufSize(int nskip)
-{
- return nskip * 2 * sizeof(btScalar);
-}
-
-void btLDLTRemove(btScalar **A, const int *p, btScalar *L, btScalar *d,
- int n1, int n2, int r, int nskip, btAlignedObjectArray<btScalar> &scratch)
-{
- btAssert(A && p && L && d && n1 > 0 && n2 > 0 && r >= 0 && r < n2 &&
- n1 >= n2 && nskip >= n1);
-#ifdef BT_DEBUG
- for (int i = 0; i < n2; ++i)
- btAssert(p[i] >= 0 && p[i] < n1);
-#endif
-
- if (r == n2 - 1)
- {
- return; // deleting last row/col is easy
- }
- else
- {
- size_t LDLTAddTL_size = btEstimateLDLTAddTLTmpbufSize(nskip);
- btAssert(LDLTAddTL_size % sizeof(btScalar) == 0);
- scratch.resize(nskip * 2 + n2);
- btScalar *tmp = &scratch[0];
- if (r == 0)
- {
- btScalar *a = (btScalar *)((char *)tmp + LDLTAddTL_size);
- const int p_0 = p[0];
- for (int i = 0; i < n2; ++i)
- {
- a[i] = -BTGETA(p[i], p_0);
- }
- a[0] += btScalar(1.0);
- btLDLTAddTL(L, d, a, n2, nskip, scratch);
- }
- else
- {
- btScalar *t = (btScalar *)((char *)tmp + LDLTAddTL_size);
- {
- btScalar *Lcurr = L + r * nskip;
- for (int i = 0; i < r; ++Lcurr, ++i)
- {
- btAssert(d[i] != btScalar(0.0));
- t[i] = *Lcurr / d[i];
- }
- }
- btScalar *a = t + r;
- {
- btScalar *Lcurr = L + r * nskip;
- const int *pp_r = p + r, p_r = *pp_r;
- const int n2_minus_r = n2 - r;
- for (int i = 0; i < n2_minus_r; Lcurr += nskip, ++i)
- {
- a[i] = btLargeDot(Lcurr, t, r) - BTGETA(pp_r[i], p_r);
- }
- }
- a[0] += btScalar(1.0);
- btLDLTAddTL(L + r * nskip + r, d + r, a, n2 - r, nskip, scratch);
- }
- }
-
- // snip out row/column r from L and d
- btRemoveRowCol(L, n2, nskip, r);
- if (r < (n2 - 1)) memmove(d + r, d + r + 1, (n2 - r - 1) * sizeof(btScalar));
-}
-
-void btLCP::transfer_i_from_C_to_N(int i, btAlignedObjectArray<btScalar> &scratch)
-{
- {
- int *C = m_C;
- // remove a row/column from the factorization, and adjust the
- // indexes (black magic!)
- int last_idx = -1;
- const int nC = m_nC;
- int j = 0;
- for (; j < nC; ++j)
- {
- if (C[j] == nC - 1)
- {
- last_idx = j;
- }
- if (C[j] == i)
- {
- btLDLTRemove(m_A, C, m_L, m_d, m_n, nC, j, m_nskip, scratch);
- int k;
- if (last_idx == -1)
- {
- for (k = j + 1; k < nC; ++k)
- {
- if (C[k] == nC - 1)
- {
- break;
- }
- }
- btAssert(k < nC);
- }
- else
- {
- k = last_idx;
- }
- C[k] = C[j];
- if (j < (nC - 1)) memmove(C + j, C + j + 1, (nC - j - 1) * sizeof(int));
- break;
- }
- }
- btAssert(j < nC);
-
- btSwapProblem(m_A, m_x, m_b, m_w, m_lo, m_hi, m_p, m_state, m_findex, m_n, i, nC - 1, m_nskip, 1);
-
- m_nN++;
- m_nC = nC - 1; // nC value is outdated after this line
- }
-}
-
-void btLCP::pN_equals_ANC_times_qC(btScalar *p, btScalar *q)
-{
- // we could try to make this matrix-vector multiplication faster using
- // outer product matrix tricks, e.g. with the dMultidotX() functions.
- // but i tried it and it actually made things slower on random 100x100
- // problems because of the overhead involved. so we'll stick with the
- // simple method for now.
- const int nC = m_nC;
- btScalar *ptgt = p + nC;
- const int nN = m_nN;
- for (int i = 0; i < nN; ++i)
- {
- ptgt[i] = btLargeDot(BTAROW(i + nC), q, nC);
- }
-}
-
-void btLCP::pN_plusequals_ANi(btScalar *p, int i, int sign)
-{
- const int nC = m_nC;
- btScalar *aptr = BTAROW(i) + nC;
- btScalar *ptgt = p + nC;
- if (sign > 0)
- {
- const int nN = m_nN;
- for (int j = 0; j < nN; ++j) ptgt[j] += aptr[j];
- }
- else
- {
- const int nN = m_nN;
- for (int j = 0; j < nN; ++j) ptgt[j] -= aptr[j];
- }
-}
-
-void btLCP::pC_plusequals_s_times_qC(btScalar *p, btScalar s, btScalar *q)
-{
- const int nC = m_nC;
- for (int i = 0; i < nC; ++i)
- {
- p[i] += s * q[i];
- }
-}
-
-void btLCP::pN_plusequals_s_times_qN(btScalar *p, btScalar s, btScalar *q)
-{
- const int nC = m_nC;
- btScalar *ptgt = p + nC, *qsrc = q + nC;
- const int nN = m_nN;
- for (int i = 0; i < nN; ++i)
- {
- ptgt[i] += s * qsrc[i];
- }
-}
-
-void btLCP::solve1(btScalar *a, int i, int dir, int only_transfer)
-{
- // the `Dell' and `ell' that are computed here are saved. if index i is
- // later added to the factorization then they can be reused.
- //
- // @@@ question: do we need to solve for entire delta_x??? yes, but
- // only if an x goes below 0 during the step.
-
- if (m_nC > 0)
- {
- {
- btScalar *Dell = m_Dell;
- int *C = m_C;
- btScalar *aptr = BTAROW(i);
-#ifdef BTNUB_OPTIMIZATIONS
- // if nub>0, initial part of aptr[] is guaranteed unpermuted
- const int nub = m_nub;
- int j = 0;
- for (; j < nub; ++j) Dell[j] = aptr[j];
- const int nC = m_nC;
- for (; j < nC; ++j) Dell[j] = aptr[C[j]];
-#else
- const int nC = m_nC;
- for (int j = 0; j < nC; ++j) Dell[j] = aptr[C[j]];
-#endif
- }
- btSolveL1(m_L, m_Dell, m_nC, m_nskip);
- {
- btScalar *ell = m_ell, *Dell = m_Dell, *d = m_d;
- const int nC = m_nC;
- for (int j = 0; j < nC; ++j) ell[j] = Dell[j] * d[j];
- }
-
- if (!only_transfer)
- {
- btScalar *tmp = m_tmp, *ell = m_ell;
- {
- const int nC = m_nC;
- for (int j = 0; j < nC; ++j) tmp[j] = ell[j];
- }
- btSolveL1T(m_L, tmp, m_nC, m_nskip);
- if (dir > 0)
- {
- int *C = m_C;
- btScalar *tmp = m_tmp;
- const int nC = m_nC;
- for (int j = 0; j < nC; ++j) a[C[j]] = -tmp[j];
- }
- else
- {
- int *C = m_C;
- btScalar *tmp = m_tmp;
- const int nC = m_nC;
- for (int j = 0; j < nC; ++j) a[C[j]] = tmp[j];
- }
- }
- }
-}
-
-void btLCP::unpermute()
-{
- // now we have to un-permute x and w
- {
- memcpy(m_tmp, m_x, m_n * sizeof(btScalar));
- btScalar *x = m_x, *tmp = m_tmp;
- const int *p = m_p;
- const int n = m_n;
- for (int j = 0; j < n; ++j) x[p[j]] = tmp[j];
- }
- {
- memcpy(m_tmp, m_w, m_n * sizeof(btScalar));
- btScalar *w = m_w, *tmp = m_tmp;
- const int *p = m_p;
- const int n = m_n;
- for (int j = 0; j < n; ++j) w[p[j]] = tmp[j];
- }
-}
-
-#endif // btLCP_FAST
-
-//***************************************************************************
-// an optimized Dantzig LCP driver routine for the lo-hi LCP problem.
-
-bool btSolveDantzigLCP(int n, btScalar *A, btScalar *x, btScalar *b,
- btScalar *outer_w, int nub, btScalar *lo, btScalar *hi, int *findex, btDantzigScratchMemory &scratchMem)
-{
- s_error = false;
-
- // printf("btSolveDantzigLCP n=%d\n",n);
- btAssert(n > 0 && A && x && b && lo && hi && nub >= 0 && nub <= n);
- btAssert(outer_w);
-
-#ifdef BT_DEBUG
- {
- // check restrictions on lo and hi
- for (int k = 0; k < n; ++k)
- btAssert(lo[k] <= 0 && hi[k] >= 0);
- }
-#endif
-
- // if all the variables are unbounded then we can just factor, solve,
- // and return
- if (nub >= n)
- {
- int nskip = (n);
- btFactorLDLT(A, outer_w, n, nskip);
- btSolveLDLT(A, outer_w, b, n, nskip);
- memcpy(x, b, n * sizeof(btScalar));
-
- return !s_error;
- }
-
- const int nskip = (n);
- scratchMem.L.resize(n * nskip);
-
- scratchMem.d.resize(n);
-
- btScalar *w = outer_w;
- scratchMem.delta_w.resize(n);
- scratchMem.delta_x.resize(n);
- scratchMem.Dell.resize(n);
- scratchMem.ell.resize(n);
- scratchMem.Arows.resize(n);
- scratchMem.p.resize(n);
- scratchMem.C.resize(n);
-
- // for i in N, state[i] is 0 if x(i)==lo(i) or 1 if x(i)==hi(i)
- scratchMem.state.resize(n);
-
- // create LCP object. note that tmp is set to delta_w to save space, this
- // optimization relies on knowledge of how tmp is used, so be careful!
- btLCP lcp(n, nskip, nub, A, x, b, w, lo, hi, &scratchMem.L[0], &scratchMem.d[0], &scratchMem.Dell[0], &scratchMem.ell[0], &scratchMem.delta_w[0], &scratchMem.state[0], findex, &scratchMem.p[0], &scratchMem.C[0], &scratchMem.Arows[0]);
- int adj_nub = lcp.getNub();
-
- // loop over all indexes adj_nub..n-1. for index i, if x(i),w(i) satisfy the
- // LCP conditions then i is added to the appropriate index set. otherwise
- // x(i),w(i) is driven either +ve or -ve to force it to the valid region.
- // as we drive x(i), x(C) is also adjusted to keep w(C) at zero.
- // while driving x(i) we maintain the LCP conditions on the other variables
- // 0..i-1. we do this by watching out for other x(i),w(i) values going
- // outside the valid region, and then switching them between index sets
- // when that happens.
-
- bool hit_first_friction_index = false;
- for (int i = adj_nub; i < n; ++i)
- {
- s_error = false;
- // the index i is the driving index and indexes i+1..n-1 are "dont care",
- // i.e. when we make changes to the system those x's will be zero and we
- // don't care what happens to those w's. in other words, we only consider
- // an (i+1)*(i+1) sub-problem of A*x=b+w.
-
- // if we've hit the first friction index, we have to compute the lo and
- // hi values based on the values of x already computed. we have been
- // permuting the indexes, so the values stored in the findex vector are
- // no longer valid. thus we have to temporarily unpermute the x vector.
- // for the purposes of this computation, 0*infinity = 0 ... so if the
- // contact constraint's normal force is 0, there should be no tangential
- // force applied.
-
- if (!hit_first_friction_index && findex && findex[i] >= 0)
- {
- // un-permute x into delta_w, which is not being used at the moment
- for (int j = 0; j < n; ++j) scratchMem.delta_w[scratchMem.p[j]] = x[j];
-
- // set lo and hi values
- for (int k = i; k < n; ++k)
- {
- btScalar wfk = scratchMem.delta_w[findex[k]];
- if (wfk == 0)
- {
- hi[k] = 0;
- lo[k] = 0;
- }
- else
- {
- hi[k] = btFabs(hi[k] * wfk);
- lo[k] = -hi[k];
- }
- }
- hit_first_friction_index = true;
- }
-
- // thus far we have not even been computing the w values for indexes
- // greater than i, so compute w[i] now.
- w[i] = lcp.AiC_times_qC(i, x) + lcp.AiN_times_qN(i, x) - b[i];
-
- // if lo=hi=0 (which can happen for tangential friction when normals are
- // 0) then the index will be assigned to set N with some state. however,
- // set C's line has zero size, so the index will always remain in set N.
- // with the "normal" switching logic, if w changed sign then the index
- // would have to switch to set C and then back to set N with an inverted
- // state. this is pointless, and also computationally expensive. to
- // prevent this from happening, we use the rule that indexes with lo=hi=0
- // will never be checked for set changes. this means that the state for
- // these indexes may be incorrect, but that doesn't matter.
-
- // see if x(i),w(i) is in a valid region
- if (lo[i] == 0 && w[i] >= 0)
- {
- lcp.transfer_i_to_N(i);
- scratchMem.state[i] = false;
- }
- else if (hi[i] == 0 && w[i] <= 0)
- {
- lcp.transfer_i_to_N(i);
- scratchMem.state[i] = true;
- }
- else if (w[i] == 0)
- {
- // this is a degenerate case. by the time we get to this test we know
- // that lo != 0, which means that lo < 0 as lo is not allowed to be +ve,
- // and similarly that hi > 0. this means that the line segment
- // corresponding to set C is at least finite in extent, and we are on it.
- // NOTE: we must call lcp.solve1() before lcp.transfer_i_to_C()
- lcp.solve1(&scratchMem.delta_x[0], i, 0, 1);
-
- lcp.transfer_i_to_C(i);
- }
- else
- {
- // we must push x(i) and w(i)
- for (;;)
- {
- int dir;
- btScalar dirf;
- // find direction to push on x(i)
- if (w[i] <= 0)
- {
- dir = 1;
- dirf = btScalar(1.0);
- }
- else
- {
- dir = -1;
- dirf = btScalar(-1.0);
- }
-
- // compute: delta_x(C) = -dir*A(C,C)\A(C,i)
- lcp.solve1(&scratchMem.delta_x[0], i, dir);
-
- // note that delta_x[i] = dirf, but we wont bother to set it
-
- // compute: delta_w = A*delta_x ... note we only care about
- // delta_w(N) and delta_w(i), the rest is ignored
- lcp.pN_equals_ANC_times_qC(&scratchMem.delta_w[0], &scratchMem.delta_x[0]);
- lcp.pN_plusequals_ANi(&scratchMem.delta_w[0], i, dir);
- scratchMem.delta_w[i] = lcp.AiC_times_qC(i, &scratchMem.delta_x[0]) + lcp.Aii(i) * dirf;
-
- // find largest step we can take (size=s), either to drive x(i),w(i)
- // to the valid LCP region or to drive an already-valid variable
- // outside the valid region.
-
- int cmd = 1; // index switching command
- int si = 0; // si = index to switch if cmd>3
- btScalar s = -w[i] / scratchMem.delta_w[i];
- if (dir > 0)
- {
- if (hi[i] < BT_INFINITY)
- {
- btScalar s2 = (hi[i] - x[i]) * dirf; // was (hi[i]-x[i])/dirf // step to x(i)=hi(i)
- if (s2 < s)
- {
- s = s2;
- cmd = 3;
- }
- }
- }
- else
- {
- if (lo[i] > -BT_INFINITY)
- {
- btScalar s2 = (lo[i] - x[i]) * dirf; // was (lo[i]-x[i])/dirf // step to x(i)=lo(i)
- if (s2 < s)
- {
- s = s2;
- cmd = 2;
- }
- }
- }
-
- {
- const int numN = lcp.numN();
- for (int k = 0; k < numN; ++k)
- {
- const int indexN_k = lcp.indexN(k);
- if (!scratchMem.state[indexN_k] ? scratchMem.delta_w[indexN_k] < 0 : scratchMem.delta_w[indexN_k] > 0)
- {
- // don't bother checking if lo=hi=0
- if (lo[indexN_k] == 0 && hi[indexN_k] == 0) continue;
- btScalar s2 = -w[indexN_k] / scratchMem.delta_w[indexN_k];
- if (s2 < s)
- {
- s = s2;
- cmd = 4;
- si = indexN_k;
- }
- }
- }
- }
-
- {
- const int numC = lcp.numC();
- for (int k = adj_nub; k < numC; ++k)
- {
- const int indexC_k = lcp.indexC(k);
- if (scratchMem.delta_x[indexC_k] < 0 && lo[indexC_k] > -BT_INFINITY)
- {
- btScalar s2 = (lo[indexC_k] - x[indexC_k]) / scratchMem.delta_x[indexC_k];
- if (s2 < s)
- {
- s = s2;
- cmd = 5;
- si = indexC_k;
- }
- }
- if (scratchMem.delta_x[indexC_k] > 0 && hi[indexC_k] < BT_INFINITY)
- {
- btScalar s2 = (hi[indexC_k] - x[indexC_k]) / scratchMem.delta_x[indexC_k];
- if (s2 < s)
- {
- s = s2;
- cmd = 6;
- si = indexC_k;
- }
- }
- }
- }
-
- //static char* cmdstring[8] = {0,"->C","->NL","->NH","N->C",
- // "C->NL","C->NH"};
- //printf ("cmd=%d (%s), si=%d\n",cmd,cmdstring[cmd],(cmd>3) ? si : i);
-
- // if s <= 0 then we've got a problem. if we just keep going then
- // we're going to get stuck in an infinite loop. instead, just cross
- // our fingers and exit with the current solution.
- if (s <= btScalar(0.0))
- {
- // printf("LCP internal error, s <= 0 (s=%.4e)",(double)s);
- if (i < n)
- {
- btSetZero(x + i, n - i);
- btSetZero(w + i, n - i);
- }
- s_error = true;
- break;
- }
-
- // apply x = x + s * delta_x
- lcp.pC_plusequals_s_times_qC(x, s, &scratchMem.delta_x[0]);
- x[i] += s * dirf;
-
- // apply w = w + s * delta_w
- lcp.pN_plusequals_s_times_qN(w, s, &scratchMem.delta_w[0]);
- w[i] += s * scratchMem.delta_w[i];
-
- // void *tmpbuf;
- // switch indexes between sets if necessary
- switch (cmd)
- {
- case 1: // done
- w[i] = 0;
- lcp.transfer_i_to_C(i);
- break;
- case 2: // done
- x[i] = lo[i];
- scratchMem.state[i] = false;
- lcp.transfer_i_to_N(i);
- break;
- case 3: // done
- x[i] = hi[i];
- scratchMem.state[i] = true;
- lcp.transfer_i_to_N(i);
- break;
- case 4: // keep going
- w[si] = 0;
- lcp.transfer_i_from_N_to_C(si);
- break;
- case 5: // keep going
- x[si] = lo[si];
- scratchMem.state[si] = false;
- lcp.transfer_i_from_C_to_N(si, scratchMem.m_scratch);
- break;
- case 6: // keep going
- x[si] = hi[si];
- scratchMem.state[si] = true;
- lcp.transfer_i_from_C_to_N(si, scratchMem.m_scratch);
- break;
- }
-
- if (cmd <= 3) break;
- } // for (;;)
- } // else
-
- if (s_error)
- {
- break;
- }
- } // for (int i=adj_nub; i<n; ++i)
-
- lcp.unpermute();
-
- return !s_error;
-}
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.h
deleted file mode 100644
index 8d9b2a13e9..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigLCP.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*************************************************************************
- * *
- * Open Dynamics Engine, Copyright (C) 2001,2002 Russell L. Smith. *
- * All rights reserved. Email: russ@q12.org Web: www.q12.org *
- * *
- * This library is free software; you can redistribute it and/or *
- * modify it under the terms of *
- * The BSD-style license that is included with this library in *
- * the file LICENSE-BSD.TXT. *
- * *
- * This library is distributed in the hope that it will be useful, *
- * but WITHOUT ANY WARRANTY; without even the implied warranty of *
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the files *
- * LICENSE.TXT and LICENSE-BSD.TXT for more details. *
- * *
- *************************************************************************/
-
-/*
-
-given (A,b,lo,hi), solve the LCP problem: A*x = b+w, where each x(i),w(i)
-satisfies one of
- (1) x = lo, w >= 0
- (2) x = hi, w <= 0
- (3) lo < x < hi, w = 0
-A is a matrix of dimension n*n, everything else is a vector of size n*1.
-lo and hi can be +/- dInfinity as needed. the first `nub' variables are
-unbounded, i.e. hi and lo are assumed to be +/- dInfinity.
-
-we restrict lo(i) <= 0 and hi(i) >= 0.
-
-the original data (A,b) may be modified by this function.
-
-if the `findex' (friction index) parameter is nonzero, it points to an array
-of index values. in this case constraints that have findex[i] >= 0 are
-special. all non-special constraints are solved for, then the lo and hi values
-for the special constraints are set:
- hi[i] = abs( hi[i] * x[findex[i]] )
- lo[i] = -hi[i]
-and the solution continues. this mechanism allows a friction approximation
-to be implemented. the first `nub' variables are assumed to have findex < 0.
-
-*/
-
-#ifndef _BT_LCP_H_
-#define _BT_LCP_H_
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <assert.h>
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btAlignedObjectArray.h"
-
-struct btDantzigScratchMemory
-{
- btAlignedObjectArray<btScalar> m_scratch;
- btAlignedObjectArray<btScalar> L;
- btAlignedObjectArray<btScalar> d;
- btAlignedObjectArray<btScalar> delta_w;
- btAlignedObjectArray<btScalar> delta_x;
- btAlignedObjectArray<btScalar> Dell;
- btAlignedObjectArray<btScalar> ell;
- btAlignedObjectArray<btScalar *> Arows;
- btAlignedObjectArray<int> p;
- btAlignedObjectArray<int> C;
- btAlignedObjectArray<bool> state;
-};
-
-//return false if solving failed
-bool btSolveDantzigLCP(int n, btScalar *A, btScalar *x, btScalar *b, btScalar *w,
- int nub, btScalar *lo, btScalar *hi, int *findex, btDantzigScratchMemory &scratch);
-
-#endif //_BT_LCP_H_
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigSolver.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigSolver.h
deleted file mode 100644
index 1f669751ce..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btDantzigSolver.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_DANTZIG_SOLVER_H
-#define BT_DANTZIG_SOLVER_H
-
-#include "btMLCPSolverInterface.h"
-#include "btDantzigLCP.h"
-
-class btDantzigSolver : public btMLCPSolverInterface
-{
-protected:
- btScalar m_acceptableUpperLimitSolution;
-
- btAlignedObjectArray<char> m_tempBuffer;
-
- btAlignedObjectArray<btScalar> m_A;
- btAlignedObjectArray<btScalar> m_b;
- btAlignedObjectArray<btScalar> m_x;
- btAlignedObjectArray<btScalar> m_lo;
- btAlignedObjectArray<btScalar> m_hi;
- btAlignedObjectArray<int> m_dependencies;
- btDantzigScratchMemory m_scratchMemory;
-
-public:
- btDantzigSolver()
- : m_acceptableUpperLimitSolution(btScalar(1000))
- {
- }
-
- virtual bool solveMLCP(const btMatrixXu& A, const btVectorXu& b, btVectorXu& x, const btVectorXu& lo, const btVectorXu& hi, const btAlignedObjectArray<int>& limitDependency, int numIterations, bool useSparsity = true)
- {
- bool result = true;
- int n = b.rows();
- if (n)
- {
- int nub = 0;
- btAlignedObjectArray<btScalar> ww;
- ww.resize(n);
-
- const btScalar* Aptr = A.getBufferPointer();
- m_A.resize(n * n);
- for (int i = 0; i < n * n; i++)
- {
- m_A[i] = Aptr[i];
- }
-
- m_b.resize(n);
- m_x.resize(n);
- m_lo.resize(n);
- m_hi.resize(n);
- m_dependencies.resize(n);
- for (int i = 0; i < n; i++)
- {
- m_lo[i] = lo[i];
- m_hi[i] = hi[i];
- m_b[i] = b[i];
- m_x[i] = x[i];
- m_dependencies[i] = limitDependency[i];
- }
-
- result = btSolveDantzigLCP(n, &m_A[0], &m_x[0], &m_b[0], &ww[0], nub, &m_lo[0], &m_hi[0], &m_dependencies[0], m_scratchMemory);
- if (!result)
- return result;
-
- // printf("numAllocas = %d\n",numAllocas);
- for (int i = 0; i < n; i++)
- {
- volatile btScalar xx = m_x[i];
- if (xx != m_x[i])
- return false;
- if (x[i] >= m_acceptableUpperLimitSolution)
- {
- return false;
- }
-
- if (x[i] <= -m_acceptableUpperLimitSolution)
- {
- return false;
- }
- }
-
- for (int i = 0; i < n; i++)
- {
- x[i] = m_x[i];
- }
- }
-
- return result;
- }
-};
-
-#endif //BT_DANTZIG_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.cpp b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.cpp
deleted file mode 100644
index 954ffaed75..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.cpp
+++ /dev/null
@@ -1,369 +0,0 @@
-/* Copyright (C) 2004-2013 MBSim Development Team
-
-Code was converted for the Bullet Continuous Collision Detection and Physics Library
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//The original version is here
-//https://code.google.com/p/mbsim-env/source/browse/trunk/kernel/mbsim/numerics/linear_complementarity_problem/lemke_algorithm.cc
-//This file is re-distributed under the ZLib license, with permission of the original author
-//Math library was replaced from fmatvec to a the file src/LinearMath/btMatrixX.h
-//STL/std::vector replaced by btAlignedObjectArray
-
-#include "btLemkeAlgorithm.h"
-
-#undef BT_DEBUG_OSTREAM
-#ifdef BT_DEBUG_OSTREAM
-using namespace std;
-#endif //BT_DEBUG_OSTREAM
-
-btScalar btMachEps()
-{
- static bool calculated = false;
- static btScalar machEps = btScalar(1.);
- if (!calculated)
- {
- do
- {
- machEps /= btScalar(2.0);
- // If next epsilon yields 1, then break, because current
- // epsilon is the machine epsilon.
- } while ((btScalar)(1.0 + (machEps / btScalar(2.0))) != btScalar(1.0));
- // printf( "\nCalculated Machine epsilon: %G\n", machEps );
- calculated = true;
- }
- return machEps;
-}
-
-btScalar btEpsRoot()
-{
- static btScalar epsroot = 0.;
- static bool alreadyCalculated = false;
-
- if (!alreadyCalculated)
- {
- epsroot = btSqrt(btMachEps());
- alreadyCalculated = true;
- }
- return epsroot;
-}
-
-btVectorXu btLemkeAlgorithm::solve(unsigned int maxloops /* = 0*/)
-{
- steps = 0;
-
- int dim = m_q.size();
-#ifdef BT_DEBUG_OSTREAM
- if (DEBUGLEVEL >= 1)
- {
- cout << "Dimension = " << dim << endl;
- }
-#endif //BT_DEBUG_OSTREAM
-
- btVectorXu solutionVector(2 * dim);
- solutionVector.setZero();
-
- //, INIT, 0.);
-
- btMatrixXu ident(dim, dim);
- ident.setIdentity();
-#ifdef BT_DEBUG_OSTREAM
- cout << m_M << std::endl;
-#endif
-
- btMatrixXu mNeg = m_M.negative();
-
- btMatrixXu A(dim, 2 * dim + 2);
- //
- A.setSubMatrix(0, 0, dim - 1, dim - 1, ident);
- A.setSubMatrix(0, dim, dim - 1, 2 * dim - 1, mNeg);
- A.setSubMatrix(0, 2 * dim, dim - 1, 2 * dim, -1.f);
- A.setSubMatrix(0, 2 * dim + 1, dim - 1, 2 * dim + 1, m_q);
-
-#ifdef BT_DEBUG_OSTREAM
- cout << A << std::endl;
-#endif //BT_DEBUG_OSTREAM
-
- // btVectorXu q_;
- // q_ >> A(0, 2 * dim + 1, dim - 1, 2 * dim + 1);
-
- btAlignedObjectArray<int> basis;
- //At first, all w-values are in the basis
- for (int i = 0; i < dim; i++)
- basis.push_back(i);
-
- int pivotRowIndex = -1;
- btScalar minValue = 1e30f;
- bool greaterZero = true;
- for (int i = 0; i < dim; i++)
- {
- btScalar v = A(i, 2 * dim + 1);
- if (v < minValue)
- {
- minValue = v;
- pivotRowIndex = i;
- }
- if (v < 0)
- greaterZero = false;
- }
-
- // int pivotRowIndex = q_.minIndex();//minIndex(q_); // first row is that with lowest q-value
- int z0Row = pivotRowIndex; // remember the col of z0 for ending algorithm afterwards
- int pivotColIndex = 2 * dim; // first col is that of z0
-
-#ifdef BT_DEBUG_OSTREAM
- if (DEBUGLEVEL >= 3)
- {
- // cout << "A: " << A << endl;
- cout << "pivotRowIndex " << pivotRowIndex << endl;
- cout << "pivotColIndex " << pivotColIndex << endl;
- cout << "Basis: ";
- for (int i = 0; i < basis.size(); i++)
- cout << basis[i] << " ";
- cout << endl;
- }
-#endif //BT_DEBUG_OSTREAM
-
- if (!greaterZero)
- {
- if (maxloops == 0)
- {
- maxloops = 100;
- // maxloops = UINT_MAX; //TODO: not a really nice way, problem is: maxloops should be 2^dim (=1<<dim), but this could exceed UINT_MAX and thus the result would be 0 and therefore the lemke algorithm wouldn't start but probably would find a solution within less then UINT_MAX steps. Therefore this constant is used as a upper border right now...
- }
-
- /*start looping*/
- for (steps = 0; steps < maxloops; steps++)
- {
- GaussJordanEliminationStep(A, pivotRowIndex, pivotColIndex, basis);
-#ifdef BT_DEBUG_OSTREAM
- if (DEBUGLEVEL >= 3)
- {
- // cout << "A: " << A << endl;
- cout << "pivotRowIndex " << pivotRowIndex << endl;
- cout << "pivotColIndex " << pivotColIndex << endl;
- cout << "Basis: ";
- for (int i = 0; i < basis.size(); i++)
- cout << basis[i] << " ";
- cout << endl;
- }
-#endif //BT_DEBUG_OSTREAM
-
- int pivotColIndexOld = pivotColIndex;
-
- /*find new column index */
- if (basis[pivotRowIndex] < dim) //if a w-value left the basis get in the correspondent z-value
- pivotColIndex = basis[pivotRowIndex] + dim;
- else
- //else do it the other way round and get in the corresponding w-value
- pivotColIndex = basis[pivotRowIndex] - dim;
-
- /*the column becomes part of the basis*/
- basis[pivotRowIndex] = pivotColIndexOld;
-
- pivotRowIndex = findLexicographicMinimum(A, pivotColIndex);
-
- if (z0Row == pivotRowIndex)
- { //if z0 leaves the basis the solution is found --> one last elimination step is necessary
- GaussJordanEliminationStep(A, pivotRowIndex, pivotColIndex, basis);
- basis[pivotRowIndex] = pivotColIndex; //update basis
- break;
- }
- }
-#ifdef BT_DEBUG_OSTREAM
- if (DEBUGLEVEL >= 1)
- {
- cout << "Number of loops: " << steps << endl;
- cout << "Number of maximal loops: " << maxloops << endl;
- }
-#endif //BT_DEBUG_OSTREAM
-
- if (!validBasis(basis))
- {
- info = -1;
-#ifdef BT_DEBUG_OSTREAM
- if (DEBUGLEVEL >= 1)
- cerr << "Lemke-Algorithm ended with Ray-Termination (no valid solution)." << endl;
-#endif //BT_DEBUG_OSTREAM
-
- return solutionVector;
- }
- }
-#ifdef BT_DEBUG_OSTREAM
- if (DEBUGLEVEL >= 2)
- {
- // cout << "A: " << A << endl;
- cout << "pivotRowIndex " << pivotRowIndex << endl;
- cout << "pivotColIndex " << pivotColIndex << endl;
- }
-#endif //BT_DEBUG_OSTREAM
-
- for (int i = 0; i < basis.size(); i++)
- {
- solutionVector[basis[i]] = A(i, 2 * dim + 1); //q_[i];
- }
-
- info = 0;
-
- return solutionVector;
-}
-
-int btLemkeAlgorithm::findLexicographicMinimum(const btMatrixXu& A, const int& pivotColIndex)
-{
- int RowIndex = 0;
- int dim = A.rows();
- btAlignedObjectArray<btVectorXu> Rows;
- for (int row = 0; row < dim; row++)
- {
- btVectorXu vec(dim + 1);
- vec.setZero(); //, INIT, 0.)
- Rows.push_back(vec);
- btScalar a = A(row, pivotColIndex);
- if (a > 0)
- {
- Rows[row][0] = A(row, 2 * dim + 1) / a;
- Rows[row][1] = A(row, 2 * dim) / a;
- for (int j = 2; j < dim + 1; j++)
- Rows[row][j] = A(row, j - 1) / a;
-
-#ifdef BT_DEBUG_OSTREAM
- // if (DEBUGLEVEL) {
- // cout << "Rows(" << row << ") = " << Rows[row] << endl;
- // }
-#endif
- }
- }
-
- for (int i = 0; i < Rows.size(); i++)
- {
- if (Rows[i].nrm2() > 0.)
- {
- int j = 0;
- for (; j < Rows.size(); j++)
- {
- if (i != j)
- {
- if (Rows[j].nrm2() > 0.)
- {
- btVectorXu test(dim + 1);
- for (int ii = 0; ii < dim + 1; ii++)
- {
- test[ii] = Rows[j][ii] - Rows[i][ii];
- }
-
- //=Rows[j] - Rows[i]
- if (!LexicographicPositive(test))
- break;
- }
- }
- }
-
- if (j == Rows.size())
- {
- RowIndex += i;
- break;
- }
- }
- }
-
- return RowIndex;
-}
-
-bool btLemkeAlgorithm::LexicographicPositive(const btVectorXu& v)
-{
- int i = 0;
- // if (DEBUGLEVEL)
- // cout << "v " << v << endl;
-
- while (i < v.size() - 1 && fabs(v[i]) < btMachEps())
- i++;
- if (v[i] > 0)
- return true;
-
- return false;
-}
-
-void btLemkeAlgorithm::GaussJordanEliminationStep(btMatrixXu& A, int pivotRowIndex, int pivotColumnIndex, const btAlignedObjectArray<int>& basis)
-{
- btScalar a = -1 / A(pivotRowIndex, pivotColumnIndex);
-#ifdef BT_DEBUG_OSTREAM
- cout << A << std::endl;
-#endif
-
- for (int i = 0; i < A.rows(); i++)
- {
- if (i != pivotRowIndex)
- {
- for (int j = 0; j < A.cols(); j++)
- {
- if (j != pivotColumnIndex)
- {
- btScalar v = A(i, j);
- v += A(pivotRowIndex, j) * A(i, pivotColumnIndex) * a;
- A.setElem(i, j, v);
- }
- }
- }
- }
-
-#ifdef BT_DEBUG_OSTREAM
- cout << A << std::endl;
-#endif //BT_DEBUG_OSTREAM
- for (int i = 0; i < A.cols(); i++)
- {
- A.mulElem(pivotRowIndex, i, -a);
- }
-#ifdef BT_DEBUG_OSTREAM
- cout << A << std::endl;
-#endif //#ifdef BT_DEBUG_OSTREAM
-
- for (int i = 0; i < A.rows(); i++)
- {
- if (i != pivotRowIndex)
- {
- A.setElem(i, pivotColumnIndex, 0);
- }
- }
-#ifdef BT_DEBUG_OSTREAM
- cout << A << std::endl;
-#endif //#ifdef BT_DEBUG_OSTREAM
-}
-
-bool btLemkeAlgorithm::greaterZero(const btVectorXu& vector)
-{
- bool isGreater = true;
- for (int i = 0; i < vector.size(); i++)
- {
- if (vector[i] < 0)
- {
- isGreater = false;
- break;
- }
- }
-
- return isGreater;
-}
-
-bool btLemkeAlgorithm::validBasis(const btAlignedObjectArray<int>& basis)
-{
- bool isValid = true;
- for (int i = 0; i < basis.size(); i++)
- {
- if (basis[i] >= basis.size() * 2)
- { //then z0 is in the base
- isValid = false;
- break;
- }
- }
-
- return isValid;
-}
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.h
deleted file mode 100644
index 3c6bf72a23..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeAlgorithm.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/* Copyright (C) 2004-2013 MBSim Development Team
-
-Code was converted for the Bullet Continuous Collision Detection and Physics Library
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-//The original version is here
-//https://code.google.com/p/mbsim-env/source/browse/trunk/kernel/mbsim/numerics/linear_complementarity_problem/lemke_algorithm.cc
-//This file is re-distributed under the ZLib license, with permission of the original author (Kilian Grundl)
-//Math library was replaced from fmatvec to a the file src/LinearMath/btMatrixX.h
-//STL/std::vector replaced by btAlignedObjectArray
-
-#ifndef BT_NUMERICS_LEMKE_ALGORITHM_H_
-#define BT_NUMERICS_LEMKE_ALGORITHM_H_
-
-#include "LinearMath/btMatrixX.h"
-
-#include <vector> //todo: replace by btAlignedObjectArray
-
-class btLemkeAlgorithm
-{
-public:
- btLemkeAlgorithm(const btMatrixXu& M_, const btVectorXu& q_, const int& DEBUGLEVEL_ = 0) : DEBUGLEVEL(DEBUGLEVEL_)
- {
- setSystem(M_, q_);
- }
-
- /* GETTER / SETTER */
- /**
- * \brief return info of solution process
- */
- int getInfo()
- {
- return info;
- }
-
- /**
- * \brief get the number of steps until the solution was found
- */
- int getSteps(void)
- {
- return steps;
- }
-
- /**
- * \brief set system with Matrix M and vector q
- */
- void setSystem(const btMatrixXu& M_, const btVectorXu& q_)
- {
- m_M = M_;
- m_q = q_;
- }
- /***************************************************/
-
- /**
- * \brief solve algorithm adapted from : Fast Implementation of Lemke’s Algorithm for Rigid Body Contact Simulation (John E. Lloyd)
- */
- btVectorXu solve(unsigned int maxloops = 0);
-
- virtual ~btLemkeAlgorithm()
- {
- }
-
-protected:
- int findLexicographicMinimum(const btMatrixXu& A, const int& pivotColIndex);
- bool LexicographicPositive(const btVectorXu& v);
- void GaussJordanEliminationStep(btMatrixXu& A, int pivotRowIndex, int pivotColumnIndex, const btAlignedObjectArray<int>& basis);
- bool greaterZero(const btVectorXu& vector);
- bool validBasis(const btAlignedObjectArray<int>& basis);
-
- btMatrixXu m_M;
- btVectorXu m_q;
-
- /**
- * \brief number of steps until the Lemke algorithm found a solution
- */
- unsigned int steps;
-
- /**
- * \brief define level of debug output
- */
- int DEBUGLEVEL;
-
- /**
- * \brief did the algorithm find a solution
- *
- * -1 : not successful
- * 0 : successful
- */
- int info;
-};
-
-#endif /* BT_NUMERICS_LEMKE_ALGORITHM_H_ */
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeSolver.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeSolver.h
deleted file mode 100644
index f18c4ea41b..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btLemkeSolver.h
+++ /dev/null
@@ -1,338 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_LEMKE_SOLVER_H
-#define BT_LEMKE_SOLVER_H
-
-#include "btMLCPSolverInterface.h"
-#include "btLemkeAlgorithm.h"
-
-///The btLemkeSolver is based on "Fast Implementation of Lemke’s Algorithm for Rigid Body Contact Simulation (John E. Lloyd) "
-///It is a slower but more accurate solver. Increase the m_maxLoops for better convergence, at the cost of more CPU time.
-///The original implementation of the btLemkeAlgorithm was done by Kilian Grundl from the MBSim team
-class btLemkeSolver : public btMLCPSolverInterface
-{
-protected:
-public:
- btScalar m_maxValue;
- int m_debugLevel;
- int m_maxLoops;
- bool m_useLoHighBounds;
-
- btLemkeSolver()
- : m_maxValue(100000),
- m_debugLevel(0),
- m_maxLoops(1000),
- m_useLoHighBounds(true)
- {
- }
- virtual bool solveMLCP(const btMatrixXu& A, const btVectorXu& b, btVectorXu& x, const btVectorXu& lo, const btVectorXu& hi, const btAlignedObjectArray<int>& limitDependency, int numIterations, bool useSparsity = true)
- {
- if (m_useLoHighBounds)
- {
- BT_PROFILE("btLemkeSolver::solveMLCP");
- int n = A.rows();
- if (0 == n)
- return true;
-
- bool fail = false;
-
- btVectorXu solution(n);
- btVectorXu q1;
- q1.resize(n);
- for (int row = 0; row < n; row++)
- {
- q1[row] = -b[row];
- }
-
- // cout << "A" << endl;
- // cout << A << endl;
-
- /////////////////////////////////////
-
- //slow matrix inversion, replace with LU decomposition
- btMatrixXu A1;
- btMatrixXu B(n, n);
- {
- //BT_PROFILE("inverse(slow)");
- A1.resize(A.rows(), A.cols());
- for (int row = 0; row < A.rows(); row++)
- {
- for (int col = 0; col < A.cols(); col++)
- {
- A1.setElem(row, col, A(row, col));
- }
- }
-
- btMatrixXu matrix;
- matrix.resize(n, 2 * n);
- for (int row = 0; row < n; row++)
- {
- for (int col = 0; col < n; col++)
- {
- matrix.setElem(row, col, A1(row, col));
- }
- }
-
- btScalar ratio, a;
- int i, j, k;
- for (i = 0; i < n; i++)
- {
- for (j = n; j < 2 * n; j++)
- {
- if (i == (j - n))
- matrix.setElem(i, j, 1.0);
- else
- matrix.setElem(i, j, 0.0);
- }
- }
- for (i = 0; i < n; i++)
- {
- for (j = 0; j < n; j++)
- {
- if (i != j)
- {
- btScalar v = matrix(i, i);
- if (btFuzzyZero(v))
- {
- a = 0.000001f;
- }
- ratio = matrix(j, i) / matrix(i, i);
- for (k = 0; k < 2 * n; k++)
- {
- matrix.addElem(j, k, -ratio * matrix(i, k));
- }
- }
- }
- }
- for (i = 0; i < n; i++)
- {
- a = matrix(i, i);
- if (btFuzzyZero(a))
- {
- a = 0.000001f;
- }
- btScalar invA = 1.f / a;
- for (j = 0; j < 2 * n; j++)
- {
- matrix.mulElem(i, j, invA);
- }
- }
-
- for (int row = 0; row < n; row++)
- {
- for (int col = 0; col < n; col++)
- {
- B.setElem(row, col, matrix(row, n + col));
- }
- }
- }
-
- btMatrixXu b1(n, 1);
-
- btMatrixXu M(n * 2, n * 2);
- for (int row = 0; row < n; row++)
- {
- b1.setElem(row, 0, -b[row]);
- for (int col = 0; col < n; col++)
- {
- btScalar v = B(row, col);
- M.setElem(row, col, v);
- M.setElem(n + row, n + col, v);
- M.setElem(n + row, col, -v);
- M.setElem(row, n + col, -v);
- }
- }
-
- btMatrixXu Bb1 = B * b1;
- // q = [ (-B*b1 - lo)' (hi + B*b1)' ]'
-
- btVectorXu qq;
- qq.resize(n * 2);
- for (int row = 0; row < n; row++)
- {
- qq[row] = -Bb1(row, 0) - lo[row];
- qq[n + row] = Bb1(row, 0) + hi[row];
- }
-
- btVectorXu z1;
-
- btMatrixXu y1;
- y1.resize(n, 1);
- btLemkeAlgorithm lemke(M, qq, m_debugLevel);
- {
- //BT_PROFILE("lemke.solve");
- lemke.setSystem(M, qq);
- z1 = lemke.solve(m_maxLoops);
- }
- for (int row = 0; row < n; row++)
- {
- y1.setElem(row, 0, z1[2 * n + row] - z1[3 * n + row]);
- }
- btMatrixXu y1_b1(n, 1);
- for (int i = 0; i < n; i++)
- {
- y1_b1.setElem(i, 0, y1(i, 0) - b1(i, 0));
- }
-
- btMatrixXu x1;
-
- x1 = B * (y1_b1);
-
- for (int row = 0; row < n; row++)
- {
- solution[row] = x1(row, 0); //n];
- }
-
- int errorIndexMax = -1;
- int errorIndexMin = -1;
- float errorValueMax = -1e30;
- float errorValueMin = 1e30;
-
- for (int i = 0; i < n; i++)
- {
- x[i] = solution[i];
- volatile btScalar check = x[i];
- if (x[i] != check)
- {
- //printf("Lemke result is #NAN\n");
- x.setZero();
- return false;
- }
-
- //this is some hack/safety mechanism, to discard invalid solutions from the Lemke solver
- //we need to figure out why it happens, and fix it, or detect it properly)
- if (x[i] > m_maxValue)
- {
- if (x[i] > errorValueMax)
- {
- fail = true;
- errorIndexMax = i;
- errorValueMax = x[i];
- }
- ////printf("x[i] = %f,",x[i]);
- }
- if (x[i] < -m_maxValue)
- {
- if (x[i] < errorValueMin)
- {
- errorIndexMin = i;
- errorValueMin = x[i];
- fail = true;
- //printf("x[i] = %f,",x[i]);
- }
- }
- }
- if (fail)
- {
- int m_errorCountTimes = 0;
- if (errorIndexMin < 0)
- errorValueMin = 0.f;
- if (errorIndexMax < 0)
- errorValueMax = 0.f;
- m_errorCountTimes++;
- // printf("Error (x[%d] = %f, x[%d] = %f), resetting %d times\n", errorIndexMin,errorValueMin, errorIndexMax, errorValueMax, errorCountTimes++);
- for (int i = 0; i < n; i++)
- {
- x[i] = 0.f;
- }
- }
- return !fail;
- }
- else
-
- {
- int dimension = A.rows();
- if (0 == dimension)
- return true;
-
- // printf("================ solving using Lemke/Newton/Fixpoint\n");
-
- btVectorXu q;
- q.resize(dimension);
- for (int row = 0; row < dimension; row++)
- {
- q[row] = -b[row];
- }
-
- btLemkeAlgorithm lemke(A, q, m_debugLevel);
-
- lemke.setSystem(A, q);
-
- btVectorXu solution = lemke.solve(m_maxLoops);
-
- //check solution
-
- bool fail = false;
- int errorIndexMax = -1;
- int errorIndexMin = -1;
- float errorValueMax = -1e30;
- float errorValueMin = 1e30;
-
- for (int i = 0; i < dimension; i++)
- {
- x[i] = solution[i + dimension];
- volatile btScalar check = x[i];
- if (x[i] != check)
- {
- x.setZero();
- return false;
- }
-
- //this is some hack/safety mechanism, to discard invalid solutions from the Lemke solver
- //we need to figure out why it happens, and fix it, or detect it properly)
- if (x[i] > m_maxValue)
- {
- if (x[i] > errorValueMax)
- {
- fail = true;
- errorIndexMax = i;
- errorValueMax = x[i];
- }
- ////printf("x[i] = %f,",x[i]);
- }
- if (x[i] < -m_maxValue)
- {
- if (x[i] < errorValueMin)
- {
- errorIndexMin = i;
- errorValueMin = x[i];
- fail = true;
- //printf("x[i] = %f,",x[i]);
- }
- }
- }
- if (fail)
- {
- static int errorCountTimes = 0;
- if (errorIndexMin < 0)
- errorValueMin = 0.f;
- if (errorIndexMax < 0)
- errorValueMax = 0.f;
- printf("Error (x[%d] = %f, x[%d] = %f), resetting %d times\n", errorIndexMin, errorValueMin, errorIndexMax, errorValueMax, errorCountTimes++);
- for (int i = 0; i < dimension; i++)
- {
- x[i] = 0.f;
- }
- }
-
- return !fail;
- }
- return true;
- }
-};
-
-#endif //BT_LEMKE_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp
deleted file mode 100644
index ed4e0b686d..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp
+++ /dev/null
@@ -1,620 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#include "btMLCPSolver.h"
-#include "LinearMath/btMatrixX.h"
-#include "LinearMath/btQuickprof.h"
-#include "btSolveProjectedGaussSeidel.h"
-
-btMLCPSolver::btMLCPSolver(btMLCPSolverInterface* solver)
- : m_solver(solver),
- m_fallback(0)
-{
-}
-
-btMLCPSolver::~btMLCPSolver()
-{
-}
-
-bool gUseMatrixMultiply = false;
-bool interleaveContactAndFriction = false;
-
-btScalar btMLCPSolver::solveGroupCacheFriendlySetup(btCollisionObject** bodies, int numBodiesUnUsed, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- btSequentialImpulseConstraintSolver::solveGroupCacheFriendlySetup(bodies, numBodiesUnUsed, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- {
- BT_PROFILE("gather constraint data");
-
- int numFrictionPerContact = m_tmpSolverContactConstraintPool.size() == m_tmpSolverContactFrictionConstraintPool.size() ? 1 : 2;
-
- // int numBodies = m_tmpSolverBodyPool.size();
- m_allConstraintPtrArray.resize(0);
- m_limitDependencies.resize(m_tmpSolverNonContactConstraintPool.size() + m_tmpSolverContactConstraintPool.size() + m_tmpSolverContactFrictionConstraintPool.size());
- btAssert(m_limitDependencies.size() == m_tmpSolverNonContactConstraintPool.size() + m_tmpSolverContactConstraintPool.size() + m_tmpSolverContactFrictionConstraintPool.size());
- // printf("m_limitDependencies.size() = %d\n",m_limitDependencies.size());
-
- int dindex = 0;
- for (int i = 0; i < m_tmpSolverNonContactConstraintPool.size(); i++)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverNonContactConstraintPool[i]);
- m_limitDependencies[dindex++] = -1;
- }
-
- ///The btSequentialImpulseConstraintSolver moves all friction constraints at the very end, we can also interleave them instead
-
- int firstContactConstraintOffset = dindex;
-
- if (interleaveContactAndFriction)
- {
- for (int i = 0; i < m_tmpSolverContactConstraintPool.size(); i++)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactConstraintPool[i]);
- m_limitDependencies[dindex++] = -1;
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactFrictionConstraintPool[i * numFrictionPerContact]);
- int findex = (m_tmpSolverContactFrictionConstraintPool[i * numFrictionPerContact].m_frictionIndex * (1 + numFrictionPerContact));
- m_limitDependencies[dindex++] = findex + firstContactConstraintOffset;
- if (numFrictionPerContact == 2)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactFrictionConstraintPool[i * numFrictionPerContact + 1]);
- m_limitDependencies[dindex++] = findex + firstContactConstraintOffset;
- }
- }
- }
- else
- {
- for (int i = 0; i < m_tmpSolverContactConstraintPool.size(); i++)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactConstraintPool[i]);
- m_limitDependencies[dindex++] = -1;
- }
- for (int i = 0; i < m_tmpSolverContactFrictionConstraintPool.size(); i++)
- {
- m_allConstraintPtrArray.push_back(&m_tmpSolverContactFrictionConstraintPool[i]);
- m_limitDependencies[dindex++] = m_tmpSolverContactFrictionConstraintPool[i].m_frictionIndex + firstContactConstraintOffset;
- }
- }
-
- if (!m_allConstraintPtrArray.size())
- {
- m_A.resize(0, 0);
- m_b.resize(0);
- m_x.resize(0);
- m_lo.resize(0);
- m_hi.resize(0);
- return 0.f;
- }
- }
-
- if (gUseMatrixMultiply)
- {
- BT_PROFILE("createMLCP");
- createMLCP(infoGlobal);
- }
- else
- {
- BT_PROFILE("createMLCPFast");
- createMLCPFast(infoGlobal);
- }
-
- return 0.f;
-}
-
-bool btMLCPSolver::solveMLCP(const btContactSolverInfo& infoGlobal)
-{
- bool result = true;
-
- if (m_A.rows() == 0)
- return true;
-
- //if using split impulse, we solve 2 separate (M)LCPs
- if (infoGlobal.m_splitImpulse)
- {
- btMatrixXu Acopy = m_A;
- btAlignedObjectArray<int> limitDependenciesCopy = m_limitDependencies;
- // printf("solve first LCP\n");
- result = m_solver->solveMLCP(m_A, m_b, m_x, m_lo, m_hi, m_limitDependencies, infoGlobal.m_numIterations);
- if (result)
- result = m_solver->solveMLCP(Acopy, m_bSplit, m_xSplit, m_lo, m_hi, limitDependenciesCopy, infoGlobal.m_numIterations);
- }
- else
- {
- result = m_solver->solveMLCP(m_A, m_b, m_x, m_lo, m_hi, m_limitDependencies, infoGlobal.m_numIterations);
- }
- return result;
-}
-
-struct btJointNode
-{
- int jointIndex; // pointer to enclosing dxJoint object
- int otherBodyIndex; // *other* body this joint is connected to
- int nextJointNodeIndex; //-1 for null
- int constraintRowIndex;
-};
-
-void btMLCPSolver::createMLCPFast(const btContactSolverInfo& infoGlobal)
-{
- int numContactRows = interleaveContactAndFriction ? 3 : 1;
-
- int numConstraintRows = m_allConstraintPtrArray.size();
- int n = numConstraintRows;
- {
- BT_PROFILE("init b (rhs)");
- m_b.resize(numConstraintRows);
- m_bSplit.resize(numConstraintRows);
- m_b.setZero();
- m_bSplit.setZero();
- for (int i = 0; i < numConstraintRows; i++)
- {
- btScalar jacDiag = m_allConstraintPtrArray[i]->m_jacDiagABInv;
- if (!btFuzzyZero(jacDiag))
- {
- btScalar rhs = m_allConstraintPtrArray[i]->m_rhs;
- btScalar rhsPenetration = m_allConstraintPtrArray[i]->m_rhsPenetration;
- m_b[i] = rhs / jacDiag;
- m_bSplit[i] = rhsPenetration / jacDiag;
- }
- }
- }
-
- // btScalar* w = 0;
- // int nub = 0;
-
- m_lo.resize(numConstraintRows);
- m_hi.resize(numConstraintRows);
-
- {
- BT_PROFILE("init lo/ho");
-
- for (int i = 0; i < numConstraintRows; i++)
- {
- if (0) //m_limitDependencies[i]>=0)
- {
- m_lo[i] = -BT_INFINITY;
- m_hi[i] = BT_INFINITY;
- }
- else
- {
- m_lo[i] = m_allConstraintPtrArray[i]->m_lowerLimit;
- m_hi[i] = m_allConstraintPtrArray[i]->m_upperLimit;
- }
- }
- }
-
- //
- int m = m_allConstraintPtrArray.size();
-
- int numBodies = m_tmpSolverBodyPool.size();
- btAlignedObjectArray<int> bodyJointNodeArray;
- {
- BT_PROFILE("bodyJointNodeArray.resize");
- bodyJointNodeArray.resize(numBodies, -1);
- }
- btAlignedObjectArray<btJointNode> jointNodeArray;
- {
- BT_PROFILE("jointNodeArray.reserve");
- jointNodeArray.reserve(2 * m_allConstraintPtrArray.size());
- }
-
- btMatrixXu& J3 = m_scratchJ3;
- {
- BT_PROFILE("J3.resize");
- J3.resize(2 * m, 8);
- }
- btMatrixXu& JinvM3 = m_scratchJInvM3;
- {
- BT_PROFILE("JinvM3.resize/setZero");
-
- JinvM3.resize(2 * m, 8);
- JinvM3.setZero();
- J3.setZero();
- }
- int cur = 0;
- int rowOffset = 0;
- btAlignedObjectArray<int>& ofs = m_scratchOfs;
- {
- BT_PROFILE("ofs resize");
- ofs.resize(0);
- ofs.resizeNoInitialize(m_allConstraintPtrArray.size());
- }
- {
- BT_PROFILE("Compute J and JinvM");
- int c = 0;
-
- int numRows = 0;
-
- for (int i = 0; i < m_allConstraintPtrArray.size(); i += numRows, c++)
- {
- ofs[c] = rowOffset;
- int sbA = m_allConstraintPtrArray[i]->m_solverBodyIdA;
- int sbB = m_allConstraintPtrArray[i]->m_solverBodyIdB;
- btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- numRows = i < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[c].m_numConstraintRows : numContactRows;
- if (orgBodyA)
- {
- {
- int slotA = -1;
- //find free jointNode slot for sbA
- slotA = jointNodeArray.size();
- jointNodeArray.expand(); //NonInitializing();
- int prevSlot = bodyJointNodeArray[sbA];
- bodyJointNodeArray[sbA] = slotA;
- jointNodeArray[slotA].nextJointNodeIndex = prevSlot;
- jointNodeArray[slotA].jointIndex = c;
- jointNodeArray[slotA].constraintRowIndex = i;
- jointNodeArray[slotA].otherBodyIndex = orgBodyB ? sbB : -1;
- }
- for (int row = 0; row < numRows; row++, cur++)
- {
- btVector3 normalInvMass = m_allConstraintPtrArray[i + row]->m_contactNormal1 * orgBodyA->getInvMass();
- btVector3 relPosCrossNormalInvInertia = m_allConstraintPtrArray[i + row]->m_relpos1CrossNormal * orgBodyA->getInvInertiaTensorWorld();
-
- for (int r = 0; r < 3; r++)
- {
- J3.setElem(cur, r, m_allConstraintPtrArray[i + row]->m_contactNormal1[r]);
- J3.setElem(cur, r + 4, m_allConstraintPtrArray[i + row]->m_relpos1CrossNormal[r]);
- JinvM3.setElem(cur, r, normalInvMass[r]);
- JinvM3.setElem(cur, r + 4, relPosCrossNormalInvInertia[r]);
- }
- J3.setElem(cur, 3, 0);
- JinvM3.setElem(cur, 3, 0);
- J3.setElem(cur, 7, 0);
- JinvM3.setElem(cur, 7, 0);
- }
- }
- else
- {
- cur += numRows;
- }
- if (orgBodyB)
- {
- {
- int slotB = -1;
- //find free jointNode slot for sbA
- slotB = jointNodeArray.size();
- jointNodeArray.expand(); //NonInitializing();
- int prevSlot = bodyJointNodeArray[sbB];
- bodyJointNodeArray[sbB] = slotB;
- jointNodeArray[slotB].nextJointNodeIndex = prevSlot;
- jointNodeArray[slotB].jointIndex = c;
- jointNodeArray[slotB].otherBodyIndex = orgBodyA ? sbA : -1;
- jointNodeArray[slotB].constraintRowIndex = i;
- }
-
- for (int row = 0; row < numRows; row++, cur++)
- {
- btVector3 normalInvMassB = m_allConstraintPtrArray[i + row]->m_contactNormal2 * orgBodyB->getInvMass();
- btVector3 relPosInvInertiaB = m_allConstraintPtrArray[i + row]->m_relpos2CrossNormal * orgBodyB->getInvInertiaTensorWorld();
-
- for (int r = 0; r < 3; r++)
- {
- J3.setElem(cur, r, m_allConstraintPtrArray[i + row]->m_contactNormal2[r]);
- J3.setElem(cur, r + 4, m_allConstraintPtrArray[i + row]->m_relpos2CrossNormal[r]);
- JinvM3.setElem(cur, r, normalInvMassB[r]);
- JinvM3.setElem(cur, r + 4, relPosInvInertiaB[r]);
- }
- J3.setElem(cur, 3, 0);
- JinvM3.setElem(cur, 3, 0);
- J3.setElem(cur, 7, 0);
- JinvM3.setElem(cur, 7, 0);
- }
- }
- else
- {
- cur += numRows;
- }
- rowOffset += numRows;
- }
- }
-
- //compute JinvM = J*invM.
- const btScalar* JinvM = JinvM3.getBufferPointer();
-
- const btScalar* Jptr = J3.getBufferPointer();
- {
- BT_PROFILE("m_A.resize");
- m_A.resize(n, n);
- }
-
- {
- BT_PROFILE("m_A.setZero");
- m_A.setZero();
- }
- int c = 0;
- {
- int numRows = 0;
- BT_PROFILE("Compute A");
- for (int i = 0; i < m_allConstraintPtrArray.size(); i += numRows, c++)
- {
- int row__ = ofs[c];
- int sbA = m_allConstraintPtrArray[i]->m_solverBodyIdA;
- int sbB = m_allConstraintPtrArray[i]->m_solverBodyIdB;
- // btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- // btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- numRows = i < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[c].m_numConstraintRows : numContactRows;
-
- const btScalar* JinvMrow = JinvM + 2 * 8 * (size_t)row__;
-
- {
- int startJointNodeA = bodyJointNodeArray[sbA];
- while (startJointNodeA >= 0)
- {
- int j0 = jointNodeArray[startJointNodeA].jointIndex;
- int cr0 = jointNodeArray[startJointNodeA].constraintRowIndex;
- if (j0 < c)
- {
- int numRowsOther = cr0 < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[j0].m_numConstraintRows : numContactRows;
- size_t ofsother = (m_allConstraintPtrArray[cr0]->m_solverBodyIdB == sbA) ? 8 * numRowsOther : 0;
- //printf("%d joint i %d and j0: %d: ",count++,i,j0);
- m_A.multiplyAdd2_p8r(JinvMrow,
- Jptr + 2 * 8 * (size_t)ofs[j0] + ofsother, numRows, numRowsOther, row__, ofs[j0]);
- }
- startJointNodeA = jointNodeArray[startJointNodeA].nextJointNodeIndex;
- }
- }
-
- {
- int startJointNodeB = bodyJointNodeArray[sbB];
- while (startJointNodeB >= 0)
- {
- int j1 = jointNodeArray[startJointNodeB].jointIndex;
- int cj1 = jointNodeArray[startJointNodeB].constraintRowIndex;
-
- if (j1 < c)
- {
- int numRowsOther = cj1 < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[j1].m_numConstraintRows : numContactRows;
- size_t ofsother = (m_allConstraintPtrArray[cj1]->m_solverBodyIdB == sbB) ? 8 * numRowsOther : 0;
- m_A.multiplyAdd2_p8r(JinvMrow + 8 * (size_t)numRows,
- Jptr + 2 * 8 * (size_t)ofs[j1] + ofsother, numRows, numRowsOther, row__, ofs[j1]);
- }
- startJointNodeB = jointNodeArray[startJointNodeB].nextJointNodeIndex;
- }
- }
- }
-
- {
- BT_PROFILE("compute diagonal");
- // compute diagonal blocks of m_A
-
- int row__ = 0;
- int numJointRows = m_allConstraintPtrArray.size();
-
- int jj = 0;
- for (; row__ < numJointRows;)
- {
- //int sbA = m_allConstraintPtrArray[row__]->m_solverBodyIdA;
- int sbB = m_allConstraintPtrArray[row__]->m_solverBodyIdB;
- // btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- const unsigned int infom = row__ < m_tmpSolverNonContactConstraintPool.size() ? m_tmpConstraintSizesPool[jj].m_numConstraintRows : numContactRows;
-
- const btScalar* JinvMrow = JinvM + 2 * 8 * (size_t)row__;
- const btScalar* Jrow = Jptr + 2 * 8 * (size_t)row__;
- m_A.multiply2_p8r(JinvMrow, Jrow, infom, infom, row__, row__);
- if (orgBodyB)
- {
- m_A.multiplyAdd2_p8r(JinvMrow + 8 * (size_t)infom, Jrow + 8 * (size_t)infom, infom, infom, row__, row__);
- }
- row__ += infom;
- jj++;
- }
- }
- }
-
- if (1)
- {
- // add cfm to the diagonal of m_A
- for (int i = 0; i < m_A.rows(); ++i)
- {
- m_A.setElem(i, i, m_A(i, i) + infoGlobal.m_globalCfm / infoGlobal.m_timeStep);
- }
- }
-
- ///fill the upper triangle of the matrix, to make it symmetric
- {
- BT_PROFILE("fill the upper triangle ");
- m_A.copyLowerToUpperTriangle();
- }
-
- {
- BT_PROFILE("resize/init x");
- m_x.resize(numConstraintRows);
- m_xSplit.resize(numConstraintRows);
-
- if (infoGlobal.m_solverMode & SOLVER_USE_WARMSTARTING)
- {
- for (int i = 0; i < m_allConstraintPtrArray.size(); i++)
- {
- const btSolverConstraint& c = *m_allConstraintPtrArray[i];
- m_x[i] = c.m_appliedImpulse;
- m_xSplit[i] = c.m_appliedPushImpulse;
- }
- }
- else
- {
- m_x.setZero();
- m_xSplit.setZero();
- }
- }
-}
-
-void btMLCPSolver::createMLCP(const btContactSolverInfo& infoGlobal)
-{
- int numBodies = this->m_tmpSolverBodyPool.size();
- int numConstraintRows = m_allConstraintPtrArray.size();
-
- m_b.resize(numConstraintRows);
- if (infoGlobal.m_splitImpulse)
- m_bSplit.resize(numConstraintRows);
-
- m_bSplit.setZero();
- m_b.setZero();
-
- for (int i = 0; i < numConstraintRows; i++)
- {
- if (m_allConstraintPtrArray[i]->m_jacDiagABInv)
- {
- m_b[i] = m_allConstraintPtrArray[i]->m_rhs / m_allConstraintPtrArray[i]->m_jacDiagABInv;
- if (infoGlobal.m_splitImpulse)
- m_bSplit[i] = m_allConstraintPtrArray[i]->m_rhsPenetration / m_allConstraintPtrArray[i]->m_jacDiagABInv;
- }
- }
-
- btMatrixXu& Minv = m_scratchMInv;
- Minv.resize(6 * numBodies, 6 * numBodies);
- Minv.setZero();
- for (int i = 0; i < numBodies; i++)
- {
- const btSolverBody& rb = m_tmpSolverBodyPool[i];
- const btVector3& invMass = rb.m_invMass;
- setElem(Minv, i * 6 + 0, i * 6 + 0, invMass[0]);
- setElem(Minv, i * 6 + 1, i * 6 + 1, invMass[1]);
- setElem(Minv, i * 6 + 2, i * 6 + 2, invMass[2]);
- btRigidBody* orgBody = m_tmpSolverBodyPool[i].m_originalBody;
-
- for (int r = 0; r < 3; r++)
- for (int c = 0; c < 3; c++)
- setElem(Minv, i * 6 + 3 + r, i * 6 + 3 + c, orgBody ? orgBody->getInvInertiaTensorWorld()[r][c] : 0);
- }
-
- btMatrixXu& J = m_scratchJ;
- J.resize(numConstraintRows, 6 * numBodies);
- J.setZero();
-
- m_lo.resize(numConstraintRows);
- m_hi.resize(numConstraintRows);
-
- for (int i = 0; i < numConstraintRows; i++)
- {
- m_lo[i] = m_allConstraintPtrArray[i]->m_lowerLimit;
- m_hi[i] = m_allConstraintPtrArray[i]->m_upperLimit;
-
- int bodyIndex0 = m_allConstraintPtrArray[i]->m_solverBodyIdA;
- int bodyIndex1 = m_allConstraintPtrArray[i]->m_solverBodyIdB;
- if (m_tmpSolverBodyPool[bodyIndex0].m_originalBody)
- {
- setElem(J, i, 6 * bodyIndex0 + 0, m_allConstraintPtrArray[i]->m_contactNormal1[0]);
- setElem(J, i, 6 * bodyIndex0 + 1, m_allConstraintPtrArray[i]->m_contactNormal1[1]);
- setElem(J, i, 6 * bodyIndex0 + 2, m_allConstraintPtrArray[i]->m_contactNormal1[2]);
- setElem(J, i, 6 * bodyIndex0 + 3, m_allConstraintPtrArray[i]->m_relpos1CrossNormal[0]);
- setElem(J, i, 6 * bodyIndex0 + 4, m_allConstraintPtrArray[i]->m_relpos1CrossNormal[1]);
- setElem(J, i, 6 * bodyIndex0 + 5, m_allConstraintPtrArray[i]->m_relpos1CrossNormal[2]);
- }
- if (m_tmpSolverBodyPool[bodyIndex1].m_originalBody)
- {
- setElem(J, i, 6 * bodyIndex1 + 0, m_allConstraintPtrArray[i]->m_contactNormal2[0]);
- setElem(J, i, 6 * bodyIndex1 + 1, m_allConstraintPtrArray[i]->m_contactNormal2[1]);
- setElem(J, i, 6 * bodyIndex1 + 2, m_allConstraintPtrArray[i]->m_contactNormal2[2]);
- setElem(J, i, 6 * bodyIndex1 + 3, m_allConstraintPtrArray[i]->m_relpos2CrossNormal[0]);
- setElem(J, i, 6 * bodyIndex1 + 4, m_allConstraintPtrArray[i]->m_relpos2CrossNormal[1]);
- setElem(J, i, 6 * bodyIndex1 + 5, m_allConstraintPtrArray[i]->m_relpos2CrossNormal[2]);
- }
- }
-
- btMatrixXu& J_transpose = m_scratchJTranspose;
- J_transpose = J.transpose();
-
- btMatrixXu& tmp = m_scratchTmp;
- //Minv.printMatrix("Minv=");
- {
- {
- BT_PROFILE("J*Minv");
- tmp = J * Minv;
- }
- {
- BT_PROFILE("J*tmp");
- m_A = tmp * J_transpose;
- }
- }
- //J.printMatrix("J");
- if (1)
- {
- // add cfm to the diagonal of m_A
- for (int i = 0; i < m_A.rows(); ++i)
- {
- m_A.setElem(i, i, m_A(i, i) + infoGlobal.m_globalCfm / infoGlobal.m_timeStep);
- }
- }
-
- m_x.resize(numConstraintRows);
- if (infoGlobal.m_splitImpulse)
- m_xSplit.resize(numConstraintRows);
- // m_x.setZero();
-
- for (int i = 0; i < m_allConstraintPtrArray.size(); i++)
- {
- const btSolverConstraint& c = *m_allConstraintPtrArray[i];
- m_x[i] = c.m_appliedImpulse;
- if (infoGlobal.m_splitImpulse)
- m_xSplit[i] = c.m_appliedPushImpulse;
- }
-}
-
-btScalar btMLCPSolver::solveGroupCacheFriendlyIterations(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- bool result = true;
- {
- BT_PROFILE("solveMLCP");
- // printf("m_A(%d,%d)\n", m_A.rows(),m_A.cols());
- result = solveMLCP(infoGlobal);
- }
-
- //check if solution is valid, and otherwise fallback to btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations
- if (result)
- {
- BT_PROFILE("process MLCP results");
- for (int i = 0; i < m_allConstraintPtrArray.size(); i++)
- {
- {
- btSolverConstraint& c = *m_allConstraintPtrArray[i];
- int sbA = c.m_solverBodyIdA;
- int sbB = c.m_solverBodyIdB;
- //btRigidBody* orgBodyA = m_tmpSolverBodyPool[sbA].m_originalBody;
- // btRigidBody* orgBodyB = m_tmpSolverBodyPool[sbB].m_originalBody;
-
- btSolverBody& solverBodyA = m_tmpSolverBodyPool[sbA];
- btSolverBody& solverBodyB = m_tmpSolverBodyPool[sbB];
-
- {
- btScalar deltaImpulse = m_x[i] - c.m_appliedImpulse;
- c.m_appliedImpulse = m_x[i];
- solverBodyA.internalApplyImpulse(c.m_contactNormal1 * solverBodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- solverBodyB.internalApplyImpulse(c.m_contactNormal2 * solverBodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
- }
-
- if (infoGlobal.m_splitImpulse)
- {
- btScalar deltaImpulse = m_xSplit[i] - c.m_appliedPushImpulse;
- solverBodyA.internalApplyPushImpulse(c.m_contactNormal1 * solverBodyA.internalGetInvMass(), c.m_angularComponentA, deltaImpulse);
- solverBodyB.internalApplyPushImpulse(c.m_contactNormal2 * solverBodyB.internalGetInvMass(), c.m_angularComponentB, deltaImpulse);
- c.m_appliedPushImpulse = m_xSplit[i];
- }
- }
- }
- }
- else
- {
- // printf("m_fallback = %d\n",m_fallback);
- m_fallback++;
- btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations(bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
- }
-
- return 0.f;
-}
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.h
deleted file mode 100644
index 510ae59e58..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolver.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_MLCP_SOLVER_H
-#define BT_MLCP_SOLVER_H
-
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
-#include "LinearMath/btMatrixX.h"
-#include "BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h"
-
-class btMLCPSolver : public btSequentialImpulseConstraintSolver
-{
-protected:
- btMatrixXu m_A;
- btVectorXu m_b;
- btVectorXu m_x;
- btVectorXu m_lo;
- btVectorXu m_hi;
-
- ///when using 'split impulse' we solve two separate (M)LCPs
- btVectorXu m_bSplit;
- btVectorXu m_xSplit;
- btVectorXu m_bSplit1;
- btVectorXu m_xSplit2;
-
- btAlignedObjectArray<int> m_limitDependencies;
- btAlignedObjectArray<btSolverConstraint*> m_allConstraintPtrArray;
- btMLCPSolverInterface* m_solver;
- int m_fallback;
-
- /// The following scratch variables are not stateful -- contents are cleared prior to each use.
- /// They are only cached here to avoid extra memory allocations and deallocations and to ensure
- /// that multiple instances of the solver can be run in parallel.
- btMatrixXu m_scratchJ3;
- btMatrixXu m_scratchJInvM3;
- btAlignedObjectArray<int> m_scratchOfs;
- btMatrixXu m_scratchMInv;
- btMatrixXu m_scratchJ;
- btMatrixXu m_scratchJTranspose;
- btMatrixXu m_scratchTmp;
-
- virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
- virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies, int numBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
- virtual void createMLCP(const btContactSolverInfo& infoGlobal);
- virtual void createMLCPFast(const btContactSolverInfo& infoGlobal);
-
- //return true is it solves the problem successfully
- virtual bool solveMLCP(const btContactSolverInfo& infoGlobal);
-
-public:
- btMLCPSolver(btMLCPSolverInterface* solver);
- virtual ~btMLCPSolver();
-
- void setMLCPSolver(btMLCPSolverInterface* solver)
- {
- m_solver = solver;
- }
-
- int getNumFallbacks() const
- {
- return m_fallback;
- }
- void setNumFallbacks(int num)
- {
- m_fallback = num;
- }
-
- virtual btConstraintSolverType getSolverType() const
- {
- return BT_MLCP_SOLVER;
- }
-};
-
-#endif //BT_MLCP_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h
deleted file mode 100644
index 6b0465b88d..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_MLCP_SOLVER_INTERFACE_H
-#define BT_MLCP_SOLVER_INTERFACE_H
-
-#include "LinearMath/btMatrixX.h"
-
-class btMLCPSolverInterface
-{
-public:
- virtual ~btMLCPSolverInterface()
- {
- }
-
- //return true is it solves the problem successfully
- virtual bool solveMLCP(const btMatrixXu& A, const btVectorXu& b, btVectorXu& x, const btVectorXu& lo, const btVectorXu& hi, const btAlignedObjectArray<int>& limitDependency, int numIterations, bool useSparsity = true) = 0;
-};
-
-#endif //BT_MLCP_SOLVER_INTERFACE_H
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btPATHSolver.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btPATHSolver.h
deleted file mode 100644
index 7f8eec3f6e..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btPATHSolver.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_PATH_SOLVER_H
-#define BT_PATH_SOLVER_H
-
-//#define BT_USE_PATH
-#ifdef BT_USE_PATH
-
-extern "C"
-{
-#include "PATH/SimpleLCP.h"
-#include "PATH/License.h"
-#include "PATH/Error_Interface.h"
-};
-void __stdcall MyError(Void *data, Char *msg)
-{
- printf("Path Error: %s\n", msg);
-}
-void __stdcall MyWarning(Void *data, Char *msg)
-{
- printf("Path Warning: %s\n", msg);
-}
-
-Error_Interface e;
-
-#include "btMLCPSolverInterface.h"
-#include "Dantzig/lcp.h"
-
-class btPathSolver : public btMLCPSolverInterface
-{
-public:
- btPathSolver()
- {
- License_SetString("2069810742&Courtesy_License&&&USR&2013&14_12_2011&1000&PATH&GEN&31_12_2013&0_0_0&0&0_0");
- e.error_data = 0;
- e.warning = MyWarning;
- e.error = MyError;
- Error_SetInterface(&e);
- }
-
- virtual bool solveMLCP(const btMatrixXu &A, const btVectorXu &b, btVectorXu &x, const btVectorXu &lo, const btVectorXu &hi, const btAlignedObjectArray<int> &limitDependency, int numIterations, bool useSparsity = true)
- {
- MCP_Termination status;
-
- int numVariables = b.rows();
- if (0 == numVariables)
- return true;
-
- /* - variables - the number of variables in the problem
- - m_nnz - the number of nonzeros in the M matrix
- - m_i - a vector of size m_nnz containing the row indices for M
- - m_j - a vector of size m_nnz containing the column indices for M
- - m_ij - a vector of size m_nnz containing the data for M
- - q - a vector of size variables
- - lb - a vector of size variables containing the lower bounds on x
- - ub - a vector of size variables containing the upper bounds on x
- */
- btAlignedObjectArray<double> values;
- btAlignedObjectArray<int> rowIndices;
- btAlignedObjectArray<int> colIndices;
-
- for (int i = 0; i < A.rows(); i++)
- {
- for (int j = 0; j < A.cols(); j++)
- {
- if (A(i, j) != 0.f)
- {
- //add 1, because Path starts at 1, instead of 0
- rowIndices.push_back(i + 1);
- colIndices.push_back(j + 1);
- values.push_back(A(i, j));
- }
- }
- }
- int numNonZero = rowIndices.size();
- btAlignedObjectArray<double> zResult;
- zResult.resize(numVariables);
- btAlignedObjectArray<double> rhs;
- btAlignedObjectArray<double> upperBounds;
- btAlignedObjectArray<double> lowerBounds;
- for (int i = 0; i < numVariables; i++)
- {
- upperBounds.push_back(hi[i]);
- lowerBounds.push_back(lo[i]);
- rhs.push_back(-b[i]);
- }
-
- SimpleLCP(numVariables, numNonZero, &rowIndices[0], &colIndices[0], &values[0], &rhs[0], &lowerBounds[0], &upperBounds[0], &status, &zResult[0]);
-
- if (status != MCP_Solved)
- {
- static const char *gReturnMsgs[] = {
- "Invalid return",
- "MCP_Solved: The problem was solved",
- "MCP_NoProgress: A stationary point was found",
- "MCP_MajorIterationLimit: Major iteration limit met",
- "MCP_MinorIterationLimit: Cumulative minor iteration limit met",
- "MCP_TimeLimit: Ran out of time",
- "MCP_UserInterrupt: Control-C, typically",
- "MCP_BoundError: Problem has a bound error",
- "MCP_DomainError: Could not find starting point",
- "MCP_Infeasible: Problem has no solution",
- "MCP_Error: An error occurred within the code",
- "MCP_LicenseError: License could not be found",
- "MCP_OK"};
-
- printf("ERROR: The PATH MCP solver failed: %s\n", gReturnMsgs[(unsigned int)status]); // << std::endl;
- printf("using Projected Gauss Seidel fallback\n");
-
- return false;
- }
- else
- {
- for (int i = 0; i < numVariables; i++)
- {
- x[i] = zResult[i];
- //check for #NAN
- if (x[i] != zResult[i])
- return false;
- }
- return true;
- }
- }
-};
-
-#endif //BT_USE_PATH
-
-#endif //BT_PATH_SOLVER_H
diff --git a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h b/thirdparty/bullet/BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h
deleted file mode 100644
index c3f4ec3997..0000000000
--- a/thirdparty/bullet/BulletDynamics/MLCPSolvers/btSolveProjectedGaussSeidel.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_SOLVE_PROJECTED_GAUSS_SEIDEL_H
-#define BT_SOLVE_PROJECTED_GAUSS_SEIDEL_H
-
-#include "btMLCPSolverInterface.h"
-
-///This solver is mainly for debug/learning purposes: it is functionally equivalent to the btSequentialImpulseConstraintSolver solver, but much slower (it builds the full LCP matrix)
-class btSolveProjectedGaussSeidel : public btMLCPSolverInterface
-{
-public:
- btScalar m_leastSquaresResidualThreshold;
- btScalar m_leastSquaresResidual;
-
- btSolveProjectedGaussSeidel()
- : m_leastSquaresResidualThreshold(0),
- m_leastSquaresResidual(0)
- {
- }
-
- virtual bool solveMLCP(const btMatrixXu& A, const btVectorXu& b, btVectorXu& x, const btVectorXu& lo, const btVectorXu& hi, const btAlignedObjectArray<int>& limitDependency, int numIterations, bool useSparsity = true)
- {
- if (!A.rows())
- return true;
- //the A matrix is sparse, so compute the non-zero elements
- A.rowComputeNonZeroElements();
-
- //A is a m-n matrix, m rows, n columns
- btAssert(A.rows() == b.rows());
-
- int i, j, numRows = A.rows();
-
- btScalar delta;
-
- for (int k = 0; k < numIterations; k++)
- {
- m_leastSquaresResidual = 0.f;
- for (i = 0; i < numRows; i++)
- {
- delta = 0.0f;
- if (useSparsity)
- {
- for (int h = 0; h < A.m_rowNonZeroElements1[i].size(); h++)
- {
- j = A.m_rowNonZeroElements1[i][h];
- if (j != i) //skip main diagonal
- {
- delta += A(i, j) * x[j];
- }
- }
- }
- else
- {
- for (j = 0; j < i; j++)
- delta += A(i, j) * x[j];
- for (j = i + 1; j < numRows; j++)
- delta += A(i, j) * x[j];
- }
-
- btScalar aDiag = A(i, i);
- btScalar xOld = x[i];
- x[i] = (b[i] - delta) / aDiag;
- btScalar s = 1.f;
-
- if (limitDependency[i] >= 0)
- {
- s = x[limitDependency[i]];
- if (s < 0)
- s = 1;
- }
-
- if (x[i] < lo[i] * s)
- x[i] = lo[i] * s;
- if (x[i] > hi[i] * s)
- x[i] = hi[i] * s;
- btScalar diff = x[i] - xOld;
- m_leastSquaresResidual += diff * diff;
- }
-
- btScalar eps = m_leastSquaresResidualThreshold;
- if ((m_leastSquaresResidual < eps) || (k >= (numIterations - 1)))
- {
-#ifdef VERBOSE_PRINTF_RESIDUAL
- printf("totalLenSqr = %f at iteration #%d\n", m_leastSquaresResidual, k);
-#endif
- break;
- }
- }
- return true;
- }
-};
-
-#endif //BT_SOLVE_PROJECTED_GAUSS_SEIDEL_H
diff --git a/thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.cpp b/thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.cpp
deleted file mode 100644
index fc70d8e637..0000000000
--- a/thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.cpp
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies.
- * Erwin Coumans makes no representations about the suitability
- * of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
-*/
-
-#include "LinearMath/btVector3.h"
-#include "btRaycastVehicle.h"
-
-#include "BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btJacobianEntry.h"
-#include "LinearMath/btQuaternion.h"
-#include "BulletDynamics/Dynamics/btDynamicsWorld.h"
-#include "btVehicleRaycaster.h"
-#include "btWheelInfo.h"
-#include "LinearMath/btMinMax.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletDynamics/ConstraintSolver/btContactConstraint.h"
-
-#define ROLLING_INFLUENCE_FIX
-
-btRigidBody& btActionInterface::getFixedBody()
-{
- static btRigidBody s_fixed(0, 0, 0);
- s_fixed.setMassProps(btScalar(0.), btVector3(btScalar(0.), btScalar(0.), btScalar(0.)));
- return s_fixed;
-}
-
-btRaycastVehicle::btRaycastVehicle(const btVehicleTuning& tuning, btRigidBody* chassis, btVehicleRaycaster* raycaster)
- : m_vehicleRaycaster(raycaster),
- m_pitchControl(btScalar(0.))
-{
- m_chassisBody = chassis;
- m_indexRightAxis = 0;
- m_indexUpAxis = 2;
- m_indexForwardAxis = 1;
- defaultInit(tuning);
-}
-
-void btRaycastVehicle::defaultInit(const btVehicleTuning& tuning)
-{
- (void)tuning;
- m_currentVehicleSpeedKmHour = btScalar(0.);
- m_steeringValue = btScalar(0.);
-}
-
-btRaycastVehicle::~btRaycastVehicle()
-{
-}
-
-//
-// basically most of the code is general for 2 or 4 wheel vehicles, but some of it needs to be reviewed
-//
-btWheelInfo& btRaycastVehicle::addWheel(const btVector3& connectionPointCS, const btVector3& wheelDirectionCS0, const btVector3& wheelAxleCS, btScalar suspensionRestLength, btScalar wheelRadius, const btVehicleTuning& tuning, bool isFrontWheel)
-{
- btWheelInfoConstructionInfo ci;
-
- ci.m_chassisConnectionCS = connectionPointCS;
- ci.m_wheelDirectionCS = wheelDirectionCS0;
- ci.m_wheelAxleCS = wheelAxleCS;
- ci.m_suspensionRestLength = suspensionRestLength;
- ci.m_wheelRadius = wheelRadius;
- ci.m_suspensionStiffness = tuning.m_suspensionStiffness;
- ci.m_wheelsDampingCompression = tuning.m_suspensionCompression;
- ci.m_wheelsDampingRelaxation = tuning.m_suspensionDamping;
- ci.m_frictionSlip = tuning.m_frictionSlip;
- ci.m_bIsFrontWheel = isFrontWheel;
- ci.m_maxSuspensionTravelCm = tuning.m_maxSuspensionTravelCm;
- ci.m_maxSuspensionForce = tuning.m_maxSuspensionForce;
-
- m_wheelInfo.push_back(btWheelInfo(ci));
-
- btWheelInfo& wheel = m_wheelInfo[getNumWheels() - 1];
-
- updateWheelTransformsWS(wheel, false);
- updateWheelTransform(getNumWheels() - 1, false);
- return wheel;
-}
-
-const btTransform& btRaycastVehicle::getWheelTransformWS(int wheelIndex) const
-{
- btAssert(wheelIndex < getNumWheels());
- const btWheelInfo& wheel = m_wheelInfo[wheelIndex];
- return wheel.m_worldTransform;
-}
-
-void btRaycastVehicle::updateWheelTransform(int wheelIndex, bool interpolatedTransform)
-{
- btWheelInfo& wheel = m_wheelInfo[wheelIndex];
- updateWheelTransformsWS(wheel, interpolatedTransform);
- btVector3 up = -wheel.m_raycastInfo.m_wheelDirectionWS;
- const btVector3& right = wheel.m_raycastInfo.m_wheelAxleWS;
- btVector3 fwd = up.cross(right);
- fwd = fwd.normalize();
- // up = right.cross(fwd);
- // up.normalize();
-
- //rotate around steering over de wheelAxleWS
- btScalar steering = wheel.m_steering;
-
- btQuaternion steeringOrn(up, steering); //wheel.m_steering);
- btMatrix3x3 steeringMat(steeringOrn);
-
- btQuaternion rotatingOrn(right, -wheel.m_rotation);
- btMatrix3x3 rotatingMat(rotatingOrn);
-
- btMatrix3x3 basis2;
- basis2[0][m_indexRightAxis] = -right[0];
- basis2[1][m_indexRightAxis] = -right[1];
- basis2[2][m_indexRightAxis] = -right[2];
-
- basis2[0][m_indexUpAxis] = up[0];
- basis2[1][m_indexUpAxis] = up[1];
- basis2[2][m_indexUpAxis] = up[2];
-
- basis2[0][m_indexForwardAxis] = fwd[0];
- basis2[1][m_indexForwardAxis] = fwd[1];
- basis2[2][m_indexForwardAxis] = fwd[2];
-
- wheel.m_worldTransform.setBasis(steeringMat * rotatingMat * basis2);
- wheel.m_worldTransform.setOrigin(
- wheel.m_raycastInfo.m_hardPointWS + wheel.m_raycastInfo.m_wheelDirectionWS * wheel.m_raycastInfo.m_suspensionLength);
-}
-
-void btRaycastVehicle::resetSuspension()
-{
- int i;
- for (i = 0; i < m_wheelInfo.size(); i++)
- {
- btWheelInfo& wheel = m_wheelInfo[i];
- wheel.m_raycastInfo.m_suspensionLength = wheel.getSuspensionRestLength();
- wheel.m_suspensionRelativeVelocity = btScalar(0.0);
-
- wheel.m_raycastInfo.m_contactNormalWS = -wheel.m_raycastInfo.m_wheelDirectionWS;
- //wheel_info.setContactFriction(btScalar(0.0));
- wheel.m_clippedInvContactDotSuspension = btScalar(1.0);
- }
-}
-
-void btRaycastVehicle::updateWheelTransformsWS(btWheelInfo& wheel, bool interpolatedTransform)
-{
- wheel.m_raycastInfo.m_isInContact = false;
-
- btTransform chassisTrans = getChassisWorldTransform();
- if (interpolatedTransform && (getRigidBody()->getMotionState()))
- {
- getRigidBody()->getMotionState()->getWorldTransform(chassisTrans);
- }
-
- wheel.m_raycastInfo.m_hardPointWS = chassisTrans(wheel.m_chassisConnectionPointCS);
- wheel.m_raycastInfo.m_wheelDirectionWS = chassisTrans.getBasis() * wheel.m_wheelDirectionCS;
- wheel.m_raycastInfo.m_wheelAxleWS = chassisTrans.getBasis() * wheel.m_wheelAxleCS;
-}
-
-btScalar btRaycastVehicle::rayCast(btWheelInfo& wheel)
-{
- updateWheelTransformsWS(wheel, false);
-
- btScalar depth = -1;
-
- btScalar raylen = wheel.getSuspensionRestLength() + wheel.m_wheelsRadius;
-
- btVector3 rayvector = wheel.m_raycastInfo.m_wheelDirectionWS * (raylen);
- const btVector3& source = wheel.m_raycastInfo.m_hardPointWS;
- wheel.m_raycastInfo.m_contactPointWS = source + rayvector;
- const btVector3& target = wheel.m_raycastInfo.m_contactPointWS;
-
- btScalar param = btScalar(0.);
-
- btVehicleRaycaster::btVehicleRaycasterResult rayResults;
-
- btAssert(m_vehicleRaycaster);
-
- void* object = m_vehicleRaycaster->castRay(source, target, rayResults);
-
- wheel.m_raycastInfo.m_groundObject = 0;
-
- if (object)
- {
- param = rayResults.m_distFraction;
- depth = raylen * rayResults.m_distFraction;
- wheel.m_raycastInfo.m_contactNormalWS = rayResults.m_hitNormalInWorld;
- wheel.m_raycastInfo.m_isInContact = true;
-
- wheel.m_raycastInfo.m_groundObject = &getFixedBody(); ///@todo for driving on dynamic/movable objects!;
- //wheel.m_raycastInfo.m_groundObject = object;
-
- btScalar hitDistance = param * raylen;
- wheel.m_raycastInfo.m_suspensionLength = hitDistance - wheel.m_wheelsRadius;
- //clamp on max suspension travel
-
- btScalar minSuspensionLength = wheel.getSuspensionRestLength() - wheel.m_maxSuspensionTravelCm * btScalar(0.01);
- btScalar maxSuspensionLength = wheel.getSuspensionRestLength() + wheel.m_maxSuspensionTravelCm * btScalar(0.01);
- if (wheel.m_raycastInfo.m_suspensionLength < minSuspensionLength)
- {
- wheel.m_raycastInfo.m_suspensionLength = minSuspensionLength;
- }
- if (wheel.m_raycastInfo.m_suspensionLength > maxSuspensionLength)
- {
- wheel.m_raycastInfo.m_suspensionLength = maxSuspensionLength;
- }
-
- wheel.m_raycastInfo.m_contactPointWS = rayResults.m_hitPointInWorld;
-
- btScalar denominator = wheel.m_raycastInfo.m_contactNormalWS.dot(wheel.m_raycastInfo.m_wheelDirectionWS);
-
- btVector3 chassis_velocity_at_contactPoint;
- btVector3 relpos = wheel.m_raycastInfo.m_contactPointWS - getRigidBody()->getCenterOfMassPosition();
-
- chassis_velocity_at_contactPoint = getRigidBody()->getVelocityInLocalPoint(relpos);
-
- btScalar projVel = wheel.m_raycastInfo.m_contactNormalWS.dot(chassis_velocity_at_contactPoint);
-
- if (denominator >= btScalar(-0.1))
- {
- wheel.m_suspensionRelativeVelocity = btScalar(0.0);
- wheel.m_clippedInvContactDotSuspension = btScalar(1.0) / btScalar(0.1);
- }
- else
- {
- btScalar inv = btScalar(-1.) / denominator;
- wheel.m_suspensionRelativeVelocity = projVel * inv;
- wheel.m_clippedInvContactDotSuspension = inv;
- }
- }
- else
- {
- //put wheel info as in rest position
- wheel.m_raycastInfo.m_suspensionLength = wheel.getSuspensionRestLength();
- wheel.m_suspensionRelativeVelocity = btScalar(0.0);
- wheel.m_raycastInfo.m_contactNormalWS = -wheel.m_raycastInfo.m_wheelDirectionWS;
- wheel.m_clippedInvContactDotSuspension = btScalar(1.0);
- }
-
- return depth;
-}
-
-const btTransform& btRaycastVehicle::getChassisWorldTransform() const
-{
- /*if (getRigidBody()->getMotionState())
- {
- btTransform chassisWorldTrans;
- getRigidBody()->getMotionState()->getWorldTransform(chassisWorldTrans);
- return chassisWorldTrans;
- }
- */
-
- return getRigidBody()->getCenterOfMassTransform();
-}
-
-void btRaycastVehicle::updateVehicle(btScalar step)
-{
- {
- for (int i = 0; i < getNumWheels(); i++)
- {
- updateWheelTransform(i, false);
- }
- }
-
- m_currentVehicleSpeedKmHour = btScalar(3.6) * getRigidBody()->getLinearVelocity().length();
-
- const btTransform& chassisTrans = getChassisWorldTransform();
-
- btVector3 forwardW(
- chassisTrans.getBasis()[0][m_indexForwardAxis],
- chassisTrans.getBasis()[1][m_indexForwardAxis],
- chassisTrans.getBasis()[2][m_indexForwardAxis]);
-
- if (forwardW.dot(getRigidBody()->getLinearVelocity()) < btScalar(0.))
- {
- m_currentVehicleSpeedKmHour *= btScalar(-1.);
- }
-
- //
- // simulate suspension
- //
-
- int i = 0;
- for (i = 0; i < m_wheelInfo.size(); i++)
- {
- //btScalar depth;
- //depth =
- rayCast(m_wheelInfo[i]);
- }
-
- updateSuspension(step);
-
- for (i = 0; i < m_wheelInfo.size(); i++)
- {
- //apply suspension force
- btWheelInfo& wheel = m_wheelInfo[i];
-
- btScalar suspensionForce = wheel.m_wheelsSuspensionForce;
-
- if (suspensionForce > wheel.m_maxSuspensionForce)
- {
- suspensionForce = wheel.m_maxSuspensionForce;
- }
- btVector3 impulse = wheel.m_raycastInfo.m_contactNormalWS * suspensionForce * step;
- btVector3 relpos = wheel.m_raycastInfo.m_contactPointWS - getRigidBody()->getCenterOfMassPosition();
-
- getRigidBody()->applyImpulse(impulse, relpos);
- }
-
- updateFriction(step);
-
- for (i = 0; i < m_wheelInfo.size(); i++)
- {
- btWheelInfo& wheel = m_wheelInfo[i];
- btVector3 relpos = wheel.m_raycastInfo.m_hardPointWS - getRigidBody()->getCenterOfMassPosition();
- btVector3 vel = getRigidBody()->getVelocityInLocalPoint(relpos);
-
- if (wheel.m_raycastInfo.m_isInContact)
- {
- const btTransform& chassisWorldTransform = getChassisWorldTransform();
-
- btVector3 fwd(
- chassisWorldTransform.getBasis()[0][m_indexForwardAxis],
- chassisWorldTransform.getBasis()[1][m_indexForwardAxis],
- chassisWorldTransform.getBasis()[2][m_indexForwardAxis]);
-
- btScalar proj = fwd.dot(wheel.m_raycastInfo.m_contactNormalWS);
- fwd -= wheel.m_raycastInfo.m_contactNormalWS * proj;
-
- btScalar proj2 = fwd.dot(vel);
-
- wheel.m_deltaRotation = (proj2 * step) / (wheel.m_wheelsRadius);
- wheel.m_rotation += wheel.m_deltaRotation;
- }
- else
- {
- wheel.m_rotation += wheel.m_deltaRotation;
- }
-
- wheel.m_deltaRotation *= btScalar(0.99); //damping of rotation when not in contact
- }
-}
-
-void btRaycastVehicle::setSteeringValue(btScalar steering, int wheel)
-{
- btAssert(wheel >= 0 && wheel < getNumWheels());
-
- btWheelInfo& wheelInfo = getWheelInfo(wheel);
- wheelInfo.m_steering = steering;
-}
-
-btScalar btRaycastVehicle::getSteeringValue(int wheel) const
-{
- return getWheelInfo(wheel).m_steering;
-}
-
-void btRaycastVehicle::applyEngineForce(btScalar force, int wheel)
-{
- btAssert(wheel >= 0 && wheel < getNumWheels());
- btWheelInfo& wheelInfo = getWheelInfo(wheel);
- wheelInfo.m_engineForce = force;
-}
-
-const btWheelInfo& btRaycastVehicle::getWheelInfo(int index) const
-{
- btAssert((index >= 0) && (index < getNumWheels()));
-
- return m_wheelInfo[index];
-}
-
-btWheelInfo& btRaycastVehicle::getWheelInfo(int index)
-{
- btAssert((index >= 0) && (index < getNumWheels()));
-
- return m_wheelInfo[index];
-}
-
-void btRaycastVehicle::setBrake(btScalar brake, int wheelIndex)
-{
- btAssert((wheelIndex >= 0) && (wheelIndex < getNumWheels()));
- getWheelInfo(wheelIndex).m_brake = brake;
-}
-
-void btRaycastVehicle::updateSuspension(btScalar deltaTime)
-{
- (void)deltaTime;
-
- btScalar chassisMass = btScalar(1.) / m_chassisBody->getInvMass();
-
- for (int w_it = 0; w_it < getNumWheels(); w_it++)
- {
- btWheelInfo& wheel_info = m_wheelInfo[w_it];
-
- if (wheel_info.m_raycastInfo.m_isInContact)
- {
- btScalar force;
- // Spring
- {
- btScalar susp_length = wheel_info.getSuspensionRestLength();
- btScalar current_length = wheel_info.m_raycastInfo.m_suspensionLength;
-
- btScalar length_diff = (susp_length - current_length);
-
- force = wheel_info.m_suspensionStiffness * length_diff * wheel_info.m_clippedInvContactDotSuspension;
- }
-
- // Damper
- {
- btScalar projected_rel_vel = wheel_info.m_suspensionRelativeVelocity;
- {
- btScalar susp_damping;
- if (projected_rel_vel < btScalar(0.0))
- {
- susp_damping = wheel_info.m_wheelsDampingCompression;
- }
- else
- {
- susp_damping = wheel_info.m_wheelsDampingRelaxation;
- }
- force -= susp_damping * projected_rel_vel;
- }
- }
-
- // RESULT
- wheel_info.m_wheelsSuspensionForce = force * chassisMass;
- if (wheel_info.m_wheelsSuspensionForce < btScalar(0.))
- {
- wheel_info.m_wheelsSuspensionForce = btScalar(0.);
- }
- }
- else
- {
- wheel_info.m_wheelsSuspensionForce = btScalar(0.0);
- }
- }
-}
-
-struct btWheelContactPoint
-{
- btRigidBody* m_body0;
- btRigidBody* m_body1;
- btVector3 m_frictionPositionWorld;
- btVector3 m_frictionDirectionWorld;
- btScalar m_jacDiagABInv;
- btScalar m_maxImpulse;
-
- btWheelContactPoint(btRigidBody* body0, btRigidBody* body1, const btVector3& frictionPosWorld, const btVector3& frictionDirectionWorld, btScalar maxImpulse)
- : m_body0(body0),
- m_body1(body1),
- m_frictionPositionWorld(frictionPosWorld),
- m_frictionDirectionWorld(frictionDirectionWorld),
- m_maxImpulse(maxImpulse)
- {
- btScalar denom0 = body0->computeImpulseDenominator(frictionPosWorld, frictionDirectionWorld);
- btScalar denom1 = body1->computeImpulseDenominator(frictionPosWorld, frictionDirectionWorld);
- btScalar relaxation = 1.f;
- m_jacDiagABInv = relaxation / (denom0 + denom1);
- }
-};
-
-btScalar calcRollingFriction(btWheelContactPoint& contactPoint, int numWheelsOnGround);
-btScalar calcRollingFriction(btWheelContactPoint& contactPoint, int numWheelsOnGround)
-{
- btScalar j1 = 0.f;
-
- const btVector3& contactPosWorld = contactPoint.m_frictionPositionWorld;
-
- btVector3 rel_pos1 = contactPosWorld - contactPoint.m_body0->getCenterOfMassPosition();
- btVector3 rel_pos2 = contactPosWorld - contactPoint.m_body1->getCenterOfMassPosition();
-
- btScalar maxImpulse = contactPoint.m_maxImpulse;
-
- btVector3 vel1 = contactPoint.m_body0->getVelocityInLocalPoint(rel_pos1);
- btVector3 vel2 = contactPoint.m_body1->getVelocityInLocalPoint(rel_pos2);
- btVector3 vel = vel1 - vel2;
-
- btScalar vrel = contactPoint.m_frictionDirectionWorld.dot(vel);
-
- // calculate j that moves us to zero relative velocity
- j1 = -vrel * contactPoint.m_jacDiagABInv / btScalar(numWheelsOnGround);
- btSetMin(j1, maxImpulse);
- btSetMax(j1, -maxImpulse);
-
- return j1;
-}
-
-btScalar sideFrictionStiffness2 = btScalar(1.0);
-void btRaycastVehicle::updateFriction(btScalar timeStep)
-{
- //calculate the impulse, so that the wheels don't move sidewards
- int numWheel = getNumWheels();
- if (!numWheel)
- return;
-
- m_forwardWS.resize(numWheel);
- m_axle.resize(numWheel);
- m_forwardImpulse.resize(numWheel);
- m_sideImpulse.resize(numWheel);
-
- int numWheelsOnGround = 0;
-
- //collapse all those loops into one!
- for (int i = 0; i < getNumWheels(); i++)
- {
- btWheelInfo& wheelInfo = m_wheelInfo[i];
- class btRigidBody* groundObject = (class btRigidBody*)wheelInfo.m_raycastInfo.m_groundObject;
- if (groundObject)
- numWheelsOnGround++;
- m_sideImpulse[i] = btScalar(0.);
- m_forwardImpulse[i] = btScalar(0.);
- }
-
- {
- for (int i = 0; i < getNumWheels(); i++)
- {
- btWheelInfo& wheelInfo = m_wheelInfo[i];
-
- class btRigidBody* groundObject = (class btRigidBody*)wheelInfo.m_raycastInfo.m_groundObject;
-
- if (groundObject)
- {
- const btTransform& wheelTrans = getWheelTransformWS(i);
-
- btMatrix3x3 wheelBasis0 = wheelTrans.getBasis();
- m_axle[i] = -btVector3(
- wheelBasis0[0][m_indexRightAxis],
- wheelBasis0[1][m_indexRightAxis],
- wheelBasis0[2][m_indexRightAxis]);
-
- const btVector3& surfNormalWS = wheelInfo.m_raycastInfo.m_contactNormalWS;
- btScalar proj = m_axle[i].dot(surfNormalWS);
- m_axle[i] -= surfNormalWS * proj;
- m_axle[i] = m_axle[i].normalize();
-
- m_forwardWS[i] = surfNormalWS.cross(m_axle[i]);
- m_forwardWS[i].normalize();
-
- resolveSingleBilateral(*m_chassisBody, wheelInfo.m_raycastInfo.m_contactPointWS,
- *groundObject, wheelInfo.m_raycastInfo.m_contactPointWS,
- btScalar(0.), m_axle[i], m_sideImpulse[i], timeStep);
-
- m_sideImpulse[i] *= sideFrictionStiffness2;
- }
- }
- }
-
- btScalar sideFactor = btScalar(1.);
- btScalar fwdFactor = 0.5;
-
- bool sliding = false;
- {
- for (int wheel = 0; wheel < getNumWheels(); wheel++)
- {
- btWheelInfo& wheelInfo = m_wheelInfo[wheel];
- class btRigidBody* groundObject = (class btRigidBody*)wheelInfo.m_raycastInfo.m_groundObject;
-
- btScalar rollingFriction = 0.f;
-
- if (groundObject)
- {
- if (wheelInfo.m_engineForce != 0.f)
- {
- rollingFriction = wheelInfo.m_engineForce * timeStep;
- }
- else
- {
- btScalar defaultRollingFrictionImpulse = 0.f;
- btScalar maxImpulse = wheelInfo.m_brake ? wheelInfo.m_brake : defaultRollingFrictionImpulse;
- btWheelContactPoint contactPt(m_chassisBody, groundObject, wheelInfo.m_raycastInfo.m_contactPointWS, m_forwardWS[wheel], maxImpulse);
- btAssert(numWheelsOnGround > 0);
- rollingFriction = calcRollingFriction(contactPt, numWheelsOnGround);
- }
- }
-
- //switch between active rolling (throttle), braking and non-active rolling friction (no throttle/break)
-
- m_forwardImpulse[wheel] = btScalar(0.);
- m_wheelInfo[wheel].m_skidInfo = btScalar(1.);
-
- if (groundObject)
- {
- m_wheelInfo[wheel].m_skidInfo = btScalar(1.);
-
- btScalar maximp = wheelInfo.m_wheelsSuspensionForce * timeStep * wheelInfo.m_frictionSlip;
- btScalar maximpSide = maximp;
-
- btScalar maximpSquared = maximp * maximpSide;
-
- m_forwardImpulse[wheel] = rollingFriction; //wheelInfo.m_engineForce* timeStep;
-
- btScalar x = (m_forwardImpulse[wheel]) * fwdFactor;
- btScalar y = (m_sideImpulse[wheel]) * sideFactor;
-
- btScalar impulseSquared = (x * x + y * y);
-
- if (impulseSquared > maximpSquared)
- {
- sliding = true;
-
- btScalar factor = maximp / btSqrt(impulseSquared);
-
- m_wheelInfo[wheel].m_skidInfo *= factor;
- }
- }
- }
- }
-
- if (sliding)
- {
- for (int wheel = 0; wheel < getNumWheels(); wheel++)
- {
- if (m_sideImpulse[wheel] != btScalar(0.))
- {
- if (m_wheelInfo[wheel].m_skidInfo < btScalar(1.))
- {
- m_forwardImpulse[wheel] *= m_wheelInfo[wheel].m_skidInfo;
- m_sideImpulse[wheel] *= m_wheelInfo[wheel].m_skidInfo;
- }
- }
- }
- }
-
- // apply the impulses
- {
- for (int wheel = 0; wheel < getNumWheels(); wheel++)
- {
- btWheelInfo& wheelInfo = m_wheelInfo[wheel];
-
- btVector3 rel_pos = wheelInfo.m_raycastInfo.m_contactPointWS -
- m_chassisBody->getCenterOfMassPosition();
-
- if (m_forwardImpulse[wheel] != btScalar(0.))
- {
- m_chassisBody->applyImpulse(m_forwardWS[wheel] * (m_forwardImpulse[wheel]), rel_pos);
- }
- if (m_sideImpulse[wheel] != btScalar(0.))
- {
- class btRigidBody* groundObject = (class btRigidBody*)m_wheelInfo[wheel].m_raycastInfo.m_groundObject;
-
- btVector3 rel_pos2 = wheelInfo.m_raycastInfo.m_contactPointWS -
- groundObject->getCenterOfMassPosition();
-
- btVector3 sideImp = m_axle[wheel] * m_sideImpulse[wheel];
-
-#if defined ROLLING_INFLUENCE_FIX // fix. It only worked if car's up was along Y - VT.
- btVector3 vChassisWorldUp = getRigidBody()->getCenterOfMassTransform().getBasis().getColumn(m_indexUpAxis);
- rel_pos -= vChassisWorldUp * (vChassisWorldUp.dot(rel_pos) * (1.f - wheelInfo.m_rollInfluence));
-#else
- rel_pos[m_indexUpAxis] *= wheelInfo.m_rollInfluence;
-#endif
- m_chassisBody->applyImpulse(sideImp, rel_pos);
-
- //apply friction impulse on the ground
- groundObject->applyImpulse(-sideImp, rel_pos2);
- }
- }
- }
-}
-
-void btRaycastVehicle::debugDraw(btIDebugDraw* debugDrawer)
-{
- for (int v = 0; v < this->getNumWheels(); v++)
- {
- btVector3 wheelColor(0, 1, 1);
- if (getWheelInfo(v).m_raycastInfo.m_isInContact)
- {
- wheelColor.setValue(0, 0, 1);
- }
- else
- {
- wheelColor.setValue(1, 0, 1);
- }
-
- btVector3 wheelPosWS = getWheelInfo(v).m_worldTransform.getOrigin();
-
- btVector3 axle = btVector3(
- getWheelInfo(v).m_worldTransform.getBasis()[0][getRightAxis()],
- getWheelInfo(v).m_worldTransform.getBasis()[1][getRightAxis()],
- getWheelInfo(v).m_worldTransform.getBasis()[2][getRightAxis()]);
-
- //debug wheels (cylinders)
- debugDrawer->drawLine(wheelPosWS, wheelPosWS + axle, wheelColor);
- debugDrawer->drawLine(wheelPosWS, getWheelInfo(v).m_raycastInfo.m_contactPointWS, wheelColor);
- }
-}
-
-void* btDefaultVehicleRaycaster::castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result)
-{
- // RayResultCallback& resultCallback;
-
- btCollisionWorld::ClosestRayResultCallback rayCallback(from, to);
-
- m_dynamicsWorld->rayTest(from, to, rayCallback);
-
- if (rayCallback.hasHit())
- {
- const btRigidBody* body = btRigidBody::upcast(rayCallback.m_collisionObject);
- if (body && body->hasContactResponse())
- {
- result.m_hitPointInWorld = rayCallback.m_hitPointWorld;
- result.m_hitNormalInWorld = rayCallback.m_hitNormalWorld;
- result.m_hitNormalInWorld.normalize();
- result.m_distFraction = rayCallback.m_closestHitFraction;
- return (void*)body;
- }
- }
- return 0;
-}
diff --git a/thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h b/thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h
deleted file mode 100644
index 99d6894e56..0000000000
--- a/thirdparty/bullet/BulletDynamics/Vehicle/btRaycastVehicle.h
+++ /dev/null
@@ -1,218 +0,0 @@
-/*
- * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies.
- * Erwin Coumans makes no representations about the suitability
- * of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
-*/
-#ifndef BT_RAYCASTVEHICLE_H
-#define BT_RAYCASTVEHICLE_H
-
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
-#include "btVehicleRaycaster.h"
-class btDynamicsWorld;
-#include "LinearMath/btAlignedObjectArray.h"
-#include "btWheelInfo.h"
-#include "BulletDynamics/Dynamics/btActionInterface.h"
-
-//class btVehicleTuning;
-
-///rayCast vehicle, very special constraint that turn a rigidbody into a vehicle.
-class btRaycastVehicle : public btActionInterface
-{
- btAlignedObjectArray<btVector3> m_forwardWS;
- btAlignedObjectArray<btVector3> m_axle;
- btAlignedObjectArray<btScalar> m_forwardImpulse;
- btAlignedObjectArray<btScalar> m_sideImpulse;
-
- ///backwards compatibility
- int m_userConstraintType;
- int m_userConstraintId;
-
-public:
- class btVehicleTuning
- {
- public:
- btVehicleTuning()
- : m_suspensionStiffness(btScalar(5.88)),
- m_suspensionCompression(btScalar(0.83)),
- m_suspensionDamping(btScalar(0.88)),
- m_maxSuspensionTravelCm(btScalar(500.)),
- m_frictionSlip(btScalar(10.5)),
- m_maxSuspensionForce(btScalar(6000.))
- {
- }
- btScalar m_suspensionStiffness;
- btScalar m_suspensionCompression;
- btScalar m_suspensionDamping;
- btScalar m_maxSuspensionTravelCm;
- btScalar m_frictionSlip;
- btScalar m_maxSuspensionForce;
- };
-
-private:
- btVehicleRaycaster* m_vehicleRaycaster;
- btScalar m_pitchControl;
- btScalar m_steeringValue;
- btScalar m_currentVehicleSpeedKmHour;
-
- btRigidBody* m_chassisBody;
-
- int m_indexRightAxis;
- int m_indexUpAxis;
- int m_indexForwardAxis;
-
- void defaultInit(const btVehicleTuning& tuning);
-
-public:
- //constructor to create a car from an existing rigidbody
- btRaycastVehicle(const btVehicleTuning& tuning, btRigidBody* chassis, btVehicleRaycaster* raycaster);
-
- virtual ~btRaycastVehicle();
-
- ///btActionInterface interface
- virtual void updateAction(btCollisionWorld* collisionWorld, btScalar step)
- {
- (void)collisionWorld;
- updateVehicle(step);
- }
-
- ///btActionInterface interface
- void debugDraw(btIDebugDraw* debugDrawer);
-
- const btTransform& getChassisWorldTransform() const;
-
- btScalar rayCast(btWheelInfo& wheel);
-
- virtual void updateVehicle(btScalar step);
-
- void resetSuspension();
-
- btScalar getSteeringValue(int wheel) const;
-
- void setSteeringValue(btScalar steering, int wheel);
-
- void applyEngineForce(btScalar force, int wheel);
-
- const btTransform& getWheelTransformWS(int wheelIndex) const;
-
- void updateWheelTransform(int wheelIndex, bool interpolatedTransform = true);
-
- // void setRaycastWheelInfo( int wheelIndex , bool isInContact, const btVector3& hitPoint, const btVector3& hitNormal,btScalar depth);
-
- btWheelInfo& addWheel(const btVector3& connectionPointCS0, const btVector3& wheelDirectionCS0, const btVector3& wheelAxleCS, btScalar suspensionRestLength, btScalar wheelRadius, const btVehicleTuning& tuning, bool isFrontWheel);
-
- inline int getNumWheels() const
- {
- return int(m_wheelInfo.size());
- }
-
- btAlignedObjectArray<btWheelInfo> m_wheelInfo;
-
- const btWheelInfo& getWheelInfo(int index) const;
-
- btWheelInfo& getWheelInfo(int index);
-
- void updateWheelTransformsWS(btWheelInfo& wheel, bool interpolatedTransform = true);
-
- void setBrake(btScalar brake, int wheelIndex);
-
- void setPitchControl(btScalar pitch)
- {
- m_pitchControl = pitch;
- }
-
- void updateSuspension(btScalar deltaTime);
-
- virtual void updateFriction(btScalar timeStep);
-
- inline btRigidBody* getRigidBody()
- {
- return m_chassisBody;
- }
-
- const btRigidBody* getRigidBody() const
- {
- return m_chassisBody;
- }
-
- inline int getRightAxis() const
- {
- return m_indexRightAxis;
- }
- inline int getUpAxis() const
- {
- return m_indexUpAxis;
- }
-
- inline int getForwardAxis() const
- {
- return m_indexForwardAxis;
- }
-
- ///Worldspace forward vector
- btVector3 getForwardVector() const
- {
- const btTransform& chassisTrans = getChassisWorldTransform();
-
- btVector3 forwardW(
- chassisTrans.getBasis()[0][m_indexForwardAxis],
- chassisTrans.getBasis()[1][m_indexForwardAxis],
- chassisTrans.getBasis()[2][m_indexForwardAxis]);
-
- return forwardW;
- }
-
- ///Velocity of vehicle (positive if velocity vector has same direction as foward vector)
- btScalar getCurrentSpeedKmHour() const
- {
- return m_currentVehicleSpeedKmHour;
- }
-
- virtual void setCoordinateSystem(int rightIndex, int upIndex, int forwardIndex)
- {
- m_indexRightAxis = rightIndex;
- m_indexUpAxis = upIndex;
- m_indexForwardAxis = forwardIndex;
- }
-
- ///backwards compatibility
- int getUserConstraintType() const
- {
- return m_userConstraintType;
- }
-
- void setUserConstraintType(int userConstraintType)
- {
- m_userConstraintType = userConstraintType;
- };
-
- void setUserConstraintId(int uid)
- {
- m_userConstraintId = uid;
- }
-
- int getUserConstraintId() const
- {
- return m_userConstraintId;
- }
-};
-
-class btDefaultVehicleRaycaster : public btVehicleRaycaster
-{
- btDynamicsWorld* m_dynamicsWorld;
-
-public:
- btDefaultVehicleRaycaster(btDynamicsWorld* world)
- : m_dynamicsWorld(world)
- {
- }
-
- virtual void* castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result);
-};
-
-#endif //BT_RAYCASTVEHICLE_H
diff --git a/thirdparty/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h b/thirdparty/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h
deleted file mode 100644
index 2c44ce546c..0000000000
--- a/thirdparty/bullet/BulletDynamics/Vehicle/btVehicleRaycaster.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/*
- * Copyright (c) 2005 Erwin Coumans http://bulletphysics.org
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies.
- * Erwin Coumans makes no representations about the suitability
- * of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
-*/
-#ifndef BT_VEHICLE_RAYCASTER_H
-#define BT_VEHICLE_RAYCASTER_H
-
-#include "LinearMath/btVector3.h"
-
-/// btVehicleRaycaster is provides interface for between vehicle simulation and raycasting
-struct btVehicleRaycaster
-{
- virtual ~btVehicleRaycaster()
- {
- }
- struct btVehicleRaycasterResult
- {
- btVehicleRaycasterResult() : m_distFraction(btScalar(-1.)){};
- btVector3 m_hitPointInWorld;
- btVector3 m_hitNormalInWorld;
- btScalar m_distFraction;
- };
-
- virtual void* castRay(const btVector3& from, const btVector3& to, btVehicleRaycasterResult& result) = 0;
-};
-
-#endif //BT_VEHICLE_RAYCASTER_H
diff --git a/thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.cpp b/thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.cpp
deleted file mode 100644
index d5c12f223b..0000000000
--- a/thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.cpp
+++ /dev/null
@@ -1,51 +0,0 @@
-/*
- * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies.
- * Erwin Coumans makes no representations about the suitability
- * of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
-*/
-#include "btWheelInfo.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h" // for pointvelocity
-
-btScalar btWheelInfo::getSuspensionRestLength() const
-{
- return m_suspensionRestLength1;
-}
-
-void btWheelInfo::updateWheel(const btRigidBody& chassis, RaycastInfo& raycastInfo)
-{
- (void)raycastInfo;
-
- if (m_raycastInfo.m_isInContact)
-
- {
- btScalar project = m_raycastInfo.m_contactNormalWS.dot(m_raycastInfo.m_wheelDirectionWS);
- btVector3 chassis_velocity_at_contactPoint;
- btVector3 relpos = m_raycastInfo.m_contactPointWS - chassis.getCenterOfMassPosition();
- chassis_velocity_at_contactPoint = chassis.getVelocityInLocalPoint(relpos);
- btScalar projVel = m_raycastInfo.m_contactNormalWS.dot(chassis_velocity_at_contactPoint);
- if (project >= btScalar(-0.1))
- {
- m_suspensionRelativeVelocity = btScalar(0.0);
- m_clippedInvContactDotSuspension = btScalar(1.0) / btScalar(0.1);
- }
- else
- {
- btScalar inv = btScalar(-1.) / project;
- m_suspensionRelativeVelocity = projVel * inv;
- m_clippedInvContactDotSuspension = inv;
- }
- }
-
- else // Not in contact : position wheel in a nice (rest length) position
- {
- m_raycastInfo.m_suspensionLength = this->getSuspensionRestLength();
- m_suspensionRelativeVelocity = btScalar(0.0);
- m_raycastInfo.m_contactNormalWS = -m_raycastInfo.m_wheelDirectionWS;
- m_clippedInvContactDotSuspension = btScalar(1.0);
- }
-}
diff --git a/thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.h b/thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.h
deleted file mode 100644
index af88b8ff83..0000000000
--- a/thirdparty/bullet/BulletDynamics/Vehicle/btWheelInfo.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (c) 2005 Erwin Coumans http://continuousphysics.com/Bullet/
- *
- * Permission to use, copy, modify, distribute and sell this software
- * and its documentation for any purpose is hereby granted without fee,
- * provided that the above copyright notice appear in all copies.
- * Erwin Coumans makes no representations about the suitability
- * of this software for any purpose.
- * It is provided "as is" without express or implied warranty.
-*/
-#ifndef BT_WHEEL_INFO_H
-#define BT_WHEEL_INFO_H
-
-#include "LinearMath/btVector3.h"
-#include "LinearMath/btTransform.h"
-
-class btRigidBody;
-
-struct btWheelInfoConstructionInfo
-{
- btVector3 m_chassisConnectionCS;
- btVector3 m_wheelDirectionCS;
- btVector3 m_wheelAxleCS;
- btScalar m_suspensionRestLength;
- btScalar m_maxSuspensionTravelCm;
- btScalar m_wheelRadius;
-
- btScalar m_suspensionStiffness;
- btScalar m_wheelsDampingCompression;
- btScalar m_wheelsDampingRelaxation;
- btScalar m_frictionSlip;
- btScalar m_maxSuspensionForce;
- bool m_bIsFrontWheel;
-};
-
-/// btWheelInfo contains information per wheel about friction and suspension.
-struct btWheelInfo
-{
- struct RaycastInfo
- {
- //set by raycaster
- btVector3 m_contactNormalWS; //contactnormal
- btVector3 m_contactPointWS; //raycast hitpoint
- btScalar m_suspensionLength;
- btVector3 m_hardPointWS; //raycast starting point
- btVector3 m_wheelDirectionWS; //direction in worldspace
- btVector3 m_wheelAxleWS; // axle in worldspace
- bool m_isInContact;
- void* m_groundObject; //could be general void* ptr
- };
-
- RaycastInfo m_raycastInfo;
-
- btTransform m_worldTransform;
-
- btVector3 m_chassisConnectionPointCS; //const
- btVector3 m_wheelDirectionCS; //const
- btVector3 m_wheelAxleCS; // const or modified by steering
- btScalar m_suspensionRestLength1; //const
- btScalar m_maxSuspensionTravelCm;
- btScalar getSuspensionRestLength() const;
- btScalar m_wheelsRadius; //const
- btScalar m_suspensionStiffness; //const
- btScalar m_wheelsDampingCompression; //const
- btScalar m_wheelsDampingRelaxation; //const
- btScalar m_frictionSlip;
- btScalar m_steering;
- btScalar m_rotation;
- btScalar m_deltaRotation;
- btScalar m_rollInfluence;
- btScalar m_maxSuspensionForce;
-
- btScalar m_engineForce;
-
- btScalar m_brake;
-
- bool m_bIsFrontWheel;
-
- void* m_clientInfo; //can be used to store pointer to sync transforms...
-
- btWheelInfo() {}
-
- btWheelInfo(btWheelInfoConstructionInfo& ci)
-
- {
- m_suspensionRestLength1 = ci.m_suspensionRestLength;
- m_maxSuspensionTravelCm = ci.m_maxSuspensionTravelCm;
-
- m_wheelsRadius = ci.m_wheelRadius;
- m_suspensionStiffness = ci.m_suspensionStiffness;
- m_wheelsDampingCompression = ci.m_wheelsDampingCompression;
- m_wheelsDampingRelaxation = ci.m_wheelsDampingRelaxation;
- m_chassisConnectionPointCS = ci.m_chassisConnectionCS;
- m_wheelDirectionCS = ci.m_wheelDirectionCS;
- m_wheelAxleCS = ci.m_wheelAxleCS;
- m_frictionSlip = ci.m_frictionSlip;
- m_steering = btScalar(0.);
- m_engineForce = btScalar(0.);
- m_rotation = btScalar(0.);
- m_deltaRotation = btScalar(0.);
- m_brake = btScalar(0.);
- m_rollInfluence = btScalar(0.1);
- m_bIsFrontWheel = ci.m_bIsFrontWheel;
- m_maxSuspensionForce = ci.m_maxSuspensionForce;
- }
-
- void updateWheel(const btRigidBody& chassis, RaycastInfo& raycastInfo);
-
- btScalar m_clippedInvContactDotSuspension;
- btScalar m_suspensionRelativeVelocity;
- //calculated by suspension
- btScalar m_wheelsSuspensionForce;
- btScalar m_skidInfo;
-};
-
-#endif //BT_WHEEL_INFO_H
diff --git a/thirdparty/bullet/BulletInverseDynamics/IDConfig.hpp b/thirdparty/bullet/BulletInverseDynamics/IDConfig.hpp
deleted file mode 100644
index b662b80152..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/IDConfig.hpp
+++ /dev/null
@@ -1,107 +0,0 @@
-///@file Configuration for Inverse Dynamics Library,
-/// such as choice of linear algebra library and underlying scalar type
-#ifndef IDCONFIG_HPP_
-#define IDCONFIG_HPP_
-
-// If true, enable jacobian calculations.
-// This adds a 3xN matrix to every body, + 2 3-Vectors.
-// so it is not advised for large systems if it is not absolutely necessary.
-// Also, this is not required for standard inverse dynamics calculations.
-// Will only work with vector math libraries that support 3xN matrices.
-#define BT_ID_WITH_JACOBIANS
-
-// If we have a custom configuration, compile without using other parts of bullet.
-#ifdef BT_CUSTOM_INVERSE_DYNAMICS_CONFIG_H
-#include <cmath>
-#define BT_ID_WO_BULLET
-#define BT_ID_SQRT(x) std::sqrt(x)
-#define BT_ID_FABS(x) std::fabs(x)
-#define BT_ID_COS(x) std::cos(x)
-#define BT_ID_SIN(x) std::sin(x)
-#define BT_ID_ATAN2(x, y) std::atan2(x, y)
-#define BT_ID_POW(x, y) std::pow(x, y)
-#define BT_ID_SNPRINTF snprintf
-#define BT_ID_PI M_PI
-#define BT_ID_USE_DOUBLE_PRECISION
-#else
-#define BT_ID_SQRT(x) btSqrt(x)
-#define BT_ID_FABS(x) btFabs(x)
-#define BT_ID_COS(x) btCos(x)
-#define BT_ID_SIN(x) btSin(x)
-#define BT_ID_ATAN2(x, y) btAtan2(x, y)
-#define BT_ID_POW(x, y) btPow(x, y)
-#define BT_ID_PI SIMD_PI
-#ifdef _WIN32
-#define BT_ID_SNPRINTF _snprintf
-#else
-#define BT_ID_SNPRINTF snprintf
-#endif //
-#endif
-// error messages
-#include "IDErrorMessages.hpp"
-
-#ifdef BT_CUSTOM_INVERSE_DYNAMICS_CONFIG_H
-/*
-#include "IDConfigEigen.hpp"
-#include "IDConfigBuiltin.hpp"
-*/
-#define INVDYN_INCLUDE_HELPER_2(x) #x
-#define INVDYN_INCLUDE_HELPER(x) INVDYN_INCLUDE_HELPER_2(x)
-#include INVDYN_INCLUDE_HELPER(BT_CUSTOM_INVERSE_DYNAMICS_CONFIG_H)
-#ifndef btInverseDynamics
-#error "custom inverse dynamics config, but no custom namespace defined"
-#endif
-
-#define BT_ID_MAX(a, b) std::max(a, b)
-#define BT_ID_MIN(a, b) std::min(a, b)
-
-#else
-#define btInverseDynamics btInverseDynamicsBullet3
-// Use default configuration with bullet's types
-// Use the same scalar type as rest of bullet library
-#include "LinearMath/btScalar.h"
-typedef btScalar idScalar;
-#include "LinearMath/btMinMax.h"
-#define BT_ID_MAX(a, b) btMax(a, b)
-#define BT_ID_MIN(a, b) btMin(a, b)
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define BT_ID_USE_DOUBLE_PRECISION
-#endif
-
-#ifndef BT_USE_INVERSE_DYNAMICS_WITH_BULLET2
-
-// use bullet types for arrays and array indices
-#include "Bullet3Common/b3AlignedObjectArray.h"
-// this is to make it work with C++2003, otherwise we could do this:
-// template <typename T>
-// using idArray = b3AlignedObjectArray<T>;
-template <typename T>
-struct idArray
-{
- typedef b3AlignedObjectArray<T> type;
-};
-typedef int idArrayIdx;
-#define ID_DECLARE_ALIGNED_ALLOCATOR() B3_DECLARE_ALIGNED_ALLOCATOR()
-
-#else // BT_USE_INVERSE_DYNAMICS_WITH_BULLET2
-
-#include "LinearMath/btAlignedObjectArray.h"
-template <typename T>
-struct idArray
-{
- typedef btAlignedObjectArray<T> type;
-};
-typedef int idArrayIdx;
-#define ID_DECLARE_ALIGNED_ALLOCATOR() BT_DECLARE_ALIGNED_ALLOCATOR()
-
-#endif // BT_USE_INVERSE_DYNAMICS_WITH_BULLET2
-
-// use bullet's allocator functions
-#define idMalloc btAllocFunc
-#define idFree btFreeFunc
-
-#define ID_LINEAR_MATH_USE_BULLET
-#include "details/IDLinearMathInterface.hpp"
-#endif
-#endif
diff --git a/thirdparty/bullet/BulletInverseDynamics/IDConfigBuiltin.hpp b/thirdparty/bullet/BulletInverseDynamics/IDConfigBuiltin.hpp
deleted file mode 100644
index 6392367924..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/IDConfigBuiltin.hpp
+++ /dev/null
@@ -1,38 +0,0 @@
-///@file Configuration for Inverse Dynamics Library without external dependencies
-#ifndef INVDYNCONFIG_BUILTIN_HPP_
-#define INVDYNCONFIG_BUILTIN_HPP_
-#define btInverseDynamics btInverseDynamicsBuiltin
-#ifdef BT_USE_DOUBLE_PRECISION
-// choose double/single precision version
-typedef double idScalar;
-#else
-typedef float idScalar;
-#endif
-// use std::vector for arrays
-#include <vector>
-// this is to make it work with C++2003, otherwise we could do this
-// template <typename T>
-// using idArray = std::vector<T>;
-template <typename T>
-struct idArray
-{
- typedef std::vector<T> type;
-};
-typedef std::vector<int>::size_type idArrayIdx;
-// default to standard malloc/free
-#include <cstdlib>
-#define idMalloc ::malloc
-#define idFree ::free
-// currently not aligned at all...
-#define ID_DECLARE_ALIGNED_ALLOCATOR() \
- inline void* operator new(std::size_t sizeInBytes) { return idMalloc(sizeInBytes); } \
- inline void operator delete(void* ptr) { idFree(ptr); } \
- inline void* operator new(std::size_t, void* ptr) { return ptr; } \
- inline void operator delete(void*, void*) {} \
- inline void* operator new[](std::size_t sizeInBytes) { return idMalloc(sizeInBytes); } \
- inline void operator delete[](void* ptr) { idFree(ptr); } \
- inline void* operator new[](std::size_t, void* ptr) { return ptr; } \
- inline void operator delete[](void*, void*) {}
-
-#include "details/IDMatVec.hpp"
-#endif
diff --git a/thirdparty/bullet/BulletInverseDynamics/IDConfigEigen.hpp b/thirdparty/bullet/BulletInverseDynamics/IDConfigEigen.hpp
deleted file mode 100644
index cfb308ee55..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/IDConfigEigen.hpp
+++ /dev/null
@@ -1,32 +0,0 @@
-///@file Configuration for Inverse Dynamics Library with Eigen
-#ifndef INVDYNCONFIG_EIGEN_HPP_
-#define INVDYNCONFIG_EIGEN_HPP_
-#define btInverseDynamics btInverseDynamicsEigen
-#ifdef BT_USE_DOUBLE_PRECISION
-// choose double/single precision version
-typedef double idScalar;
-#else
-typedef float idScalar;
-#endif
-
-// use std::vector for arrays
-#include <vector>
-// this is to make it work with C++2003, otherwise we could do this
-// template <typename T>
-// using idArray = std::vector<T>;
-template <typename T>
-struct idArray
-{
- typedef std::vector<T> type;
-};
-typedef std::vector<int>::size_type idArrayIdx;
-// default to standard malloc/free
-#include <cstdlib>
-#define ID_DECLARE_ALIGNED_ALLOCATOR() EIGEN_MAKE_ALIGNED_OPERATOR_NEW
-// Note on interfaces:
-// Eigen::Matrix has data(), to get c-array storage
-// HOWEVER: default storage is column-major!
-#define ID_LINEAR_MATH_USE_EIGEN
-#include "Eigen/Eigen"
-#include "details/IDEigenInterface.hpp"
-#endif
diff --git a/thirdparty/bullet/BulletInverseDynamics/IDErrorMessages.hpp b/thirdparty/bullet/BulletInverseDynamics/IDErrorMessages.hpp
deleted file mode 100644
index 5a98f01498..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/IDErrorMessages.hpp
+++ /dev/null
@@ -1,31 +0,0 @@
-///@file error message utility functions
-#ifndef IDUTILS_HPP_
-#define IDUTILS_HPP_
-#include <cstring>
-/// name of file being compiled, without leading path components
-#define __INVDYN_FILE_WO_DIR__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
-
-#if !defined(BT_ID_WO_BULLET) && !defined(BT_USE_INVERSE_DYNAMICS_WITH_BULLET2)
-#include "Bullet3Common/b3Logging.h"
-#define bt_id_error_message(...) b3Error(__VA_ARGS__)
-#define bt_id_warning_message(...) b3Warning(__VA_ARGS__)
-#define id_printf(...) b3Printf(__VA_ARGS__)
-#else // BT_ID_WO_BULLET
-#include <cstdio>
-/// print error message with file/line information
-#define bt_id_error_message(...) \
- do \
- { \
- fprintf(stderr, "[Error:%s:%d] ", __INVDYN_FILE_WO_DIR__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
- } while (0)
-/// print warning message with file/line information
-#define bt_id_warning_message(...) \
- do \
- { \
- fprintf(stderr, "[Warning:%s:%d] ", __INVDYN_FILE_WO_DIR__, __LINE__); \
- fprintf(stderr, __VA_ARGS__); \
- } while (0)
-#define id_printf(...) printf(__VA_ARGS__)
-#endif // BT_ID_WO_BULLET
-#endif
diff --git a/thirdparty/bullet/BulletInverseDynamics/IDMath.cpp b/thirdparty/bullet/BulletInverseDynamics/IDMath.cpp
deleted file mode 100644
index 2f120ed489..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/IDMath.cpp
+++ /dev/null
@@ -1,510 +0,0 @@
-#include "IDMath.hpp"
-
-#include <cmath>
-#include <limits>
-
-namespace btInverseDynamics
-{
-static const idScalar kIsZero = 5 * std::numeric_limits<idScalar>::epsilon();
-// requirements for axis length deviation from 1.0
-// experimentally set from random euler angle rotation matrices
-static const idScalar kAxisLengthEpsilon = 10 * kIsZero;
-
-void setZero(vec3 &v)
-{
- v(0) = 0;
- v(1) = 0;
- v(2) = 0;
-}
-
-void setZero(vecx &v)
-{
- for (int i = 0; i < v.size(); i++)
- {
- v(i) = 0;
- }
-}
-
-void setZero(mat33 &m)
-{
- m(0, 0) = 0;
- m(0, 1) = 0;
- m(0, 2) = 0;
- m(1, 0) = 0;
- m(1, 1) = 0;
- m(1, 2) = 0;
- m(2, 0) = 0;
- m(2, 1) = 0;
- m(2, 2) = 0;
-}
-
-void skew(vec3 &v, mat33 *result)
-{
- (*result)(0, 0) = 0.0;
- (*result)(0, 1) = -v(2);
- (*result)(0, 2) = v(1);
- (*result)(1, 0) = v(2);
- (*result)(1, 1) = 0.0;
- (*result)(1, 2) = -v(0);
- (*result)(2, 0) = -v(1);
- (*result)(2, 1) = v(0);
- (*result)(2, 2) = 0.0;
-}
-
-idScalar maxAbs(const vecx &v)
-{
- idScalar result = 0.0;
- for (int i = 0; i < v.size(); i++)
- {
- const idScalar tmp = BT_ID_FABS(v(i));
- if (tmp > result)
- {
- result = tmp;
- }
- }
- return result;
-}
-
-idScalar maxAbs(const vec3 &v)
-{
- idScalar result = 0.0;
- for (int i = 0; i < 3; i++)
- {
- const idScalar tmp = BT_ID_FABS(v(i));
- if (tmp > result)
- {
- result = tmp;
- }
- }
- return result;
-}
-
-#if (defined BT_ID_HAVE_MAT3X)
-idScalar maxAbsMat3x(const mat3x &m)
-{
- // only used for tests -- so just loop here for portability
- idScalar result = 0.0;
- for (idArrayIdx col = 0; col < m.cols(); col++)
- {
- for (idArrayIdx row = 0; row < 3; row++)
- {
- result = BT_ID_MAX(result, std::fabs(m(row, col)));
- }
- }
- return result;
-}
-
-void mul(const mat33 &a, const mat3x &b, mat3x *result)
-{
- if (b.cols() != result->cols())
- {
- bt_id_error_message("size missmatch. b.cols()= %d, result->cols()= %d\n",
- static_cast<int>(b.cols()), static_cast<int>(result->cols()));
- abort();
- }
-
- for (idArrayIdx col = 0; col < b.cols(); col++)
- {
- const idScalar x = a(0, 0) * b(0, col) + a(0, 1) * b(1, col) + a(0, 2) * b(2, col);
- const idScalar y = a(1, 0) * b(0, col) + a(1, 1) * b(1, col) + a(1, 2) * b(2, col);
- const idScalar z = a(2, 0) * b(0, col) + a(2, 1) * b(1, col) + a(2, 2) * b(2, col);
- setMat3xElem(0, col, x, result);
- setMat3xElem(1, col, y, result);
- setMat3xElem(2, col, z, result);
- }
-}
-void add(const mat3x &a, const mat3x &b, mat3x *result)
-{
- if (a.cols() != b.cols())
- {
- bt_id_error_message("size missmatch. a.cols()= %d, b.cols()= %d\n",
- static_cast<int>(a.cols()), static_cast<int>(b.cols()));
- abort();
- }
- for (idArrayIdx col = 0; col < b.cols(); col++)
- {
- for (idArrayIdx row = 0; row < 3; row++)
- {
- setMat3xElem(row, col, a(row, col) + b(row, col), result);
- }
- }
-}
-void sub(const mat3x &a, const mat3x &b, mat3x *result)
-{
- if (a.cols() != b.cols())
- {
- bt_id_error_message("size missmatch. a.cols()= %d, b.cols()= %d\n",
- static_cast<int>(a.cols()), static_cast<int>(b.cols()));
- abort();
- }
- for (idArrayIdx col = 0; col < b.cols(); col++)
- {
- for (idArrayIdx row = 0; row < 3; row++)
- {
- setMat3xElem(row, col, a(row, col) - b(row, col), result);
- }
- }
-}
-#endif
-
-mat33 transformX(const idScalar &alpha)
-{
- mat33 T;
- const idScalar cos_alpha = BT_ID_COS(alpha);
- const idScalar sin_alpha = BT_ID_SIN(alpha);
- // [1 0 0]
- // [0 c s]
- // [0 -s c]
- T(0, 0) = 1.0;
- T(0, 1) = 0.0;
- T(0, 2) = 0.0;
-
- T(1, 0) = 0.0;
- T(1, 1) = cos_alpha;
- T(1, 2) = sin_alpha;
-
- T(2, 0) = 0.0;
- T(2, 1) = -sin_alpha;
- T(2, 2) = cos_alpha;
-
- return T;
-}
-
-mat33 transformY(const idScalar &beta)
-{
- mat33 T;
- const idScalar cos_beta = BT_ID_COS(beta);
- const idScalar sin_beta = BT_ID_SIN(beta);
- // [c 0 -s]
- // [0 1 0]
- // [s 0 c]
- T(0, 0) = cos_beta;
- T(0, 1) = 0.0;
- T(0, 2) = -sin_beta;
-
- T(1, 0) = 0.0;
- T(1, 1) = 1.0;
- T(1, 2) = 0.0;
-
- T(2, 0) = sin_beta;
- T(2, 1) = 0.0;
- T(2, 2) = cos_beta;
-
- return T;
-}
-
-mat33 transformZ(const idScalar &gamma)
-{
- mat33 T;
- const idScalar cos_gamma = BT_ID_COS(gamma);
- const idScalar sin_gamma = BT_ID_SIN(gamma);
- // [ c s 0]
- // [-s c 0]
- // [ 0 0 1]
- T(0, 0) = cos_gamma;
- T(0, 1) = sin_gamma;
- T(0, 2) = 0.0;
-
- T(1, 0) = -sin_gamma;
- T(1, 1) = cos_gamma;
- T(1, 2) = 0.0;
-
- T(2, 0) = 0.0;
- T(2, 1) = 0.0;
- T(2, 2) = 1.0;
-
- return T;
-}
-
-mat33 tildeOperator(const vec3 &v)
-{
- mat33 m;
- m(0, 0) = 0.0;
- m(0, 1) = -v(2);
- m(0, 2) = v(1);
- m(1, 0) = v(2);
- m(1, 1) = 0.0;
- m(1, 2) = -v(0);
- m(2, 0) = -v(1);
- m(2, 1) = v(0);
- m(2, 2) = 0.0;
- return m;
-}
-
-void getVecMatFromDH(idScalar theta, idScalar d, idScalar a, idScalar alpha, vec3 *r, mat33 *T)
-{
- const idScalar sa = BT_ID_SIN(alpha);
- const idScalar ca = BT_ID_COS(alpha);
- const idScalar st = BT_ID_SIN(theta);
- const idScalar ct = BT_ID_COS(theta);
-
- (*r)(0) = a;
- (*r)(1) = -sa * d;
- (*r)(2) = ca * d;
-
- (*T)(0, 0) = ct;
- (*T)(0, 1) = -st;
- (*T)(0, 2) = 0.0;
-
- (*T)(1, 0) = st * ca;
- (*T)(1, 1) = ct * ca;
- (*T)(1, 2) = -sa;
-
- (*T)(2, 0) = st * sa;
- (*T)(2, 1) = ct * sa;
- (*T)(2, 2) = ca;
-}
-
-void bodyTParentFromAxisAngle(const vec3 &axis, const idScalar &angle, mat33 *T)
-{
- const idScalar c = BT_ID_COS(angle);
- const idScalar s = -BT_ID_SIN(angle);
- const idScalar one_m_c = 1.0 - c;
-
- const idScalar &x = axis(0);
- const idScalar &y = axis(1);
- const idScalar &z = axis(2);
-
- (*T)(0, 0) = x * x * one_m_c + c;
- (*T)(0, 1) = x * y * one_m_c - z * s;
- (*T)(0, 2) = x * z * one_m_c + y * s;
-
- (*T)(1, 0) = x * y * one_m_c + z * s;
- (*T)(1, 1) = y * y * one_m_c + c;
- (*T)(1, 2) = y * z * one_m_c - x * s;
-
- (*T)(2, 0) = x * z * one_m_c - y * s;
- (*T)(2, 1) = y * z * one_m_c + x * s;
- (*T)(2, 2) = z * z * one_m_c + c;
-}
-
-bool isPositiveDefinite(const mat33 &m)
-{
- // test if all upper left determinants are positive
- if (m(0, 0) <= 0)
- { // upper 1x1
- return false;
- }
- if (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0) <= 0)
- { // upper 2x2
- return false;
- }
- if ((m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) -
- m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) +
- m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0))) < 0)
- {
- return false;
- }
- return true;
-}
-
-bool isPositiveSemiDefinite(const mat33 &m)
-{
- // test if all upper left determinants are positive
- if (m(0, 0) < 0)
- { // upper 1x1
- return false;
- }
- if (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0) < 0)
- { // upper 2x2
- return false;
- }
- if ((m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) -
- m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) +
- m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0))) < 0)
- {
- return false;
- }
- return true;
-}
-
-bool isPositiveSemiDefiniteFuzzy(const mat33 &m)
-{
- // test if all upper left determinants are positive
- if (m(0, 0) < -kIsZero)
- { // upper 1x1
- return false;
- }
- if (m(0, 0) * m(1, 1) - m(0, 1) * m(1, 0) < -kIsZero)
- { // upper 2x2
- return false;
- }
- if ((m(0, 0) * (m(1, 1) * m(2, 2) - m(1, 2) * m(2, 1)) -
- m(0, 1) * (m(1, 0) * m(2, 2) - m(1, 2) * m(2, 0)) +
- m(0, 2) * (m(1, 0) * m(2, 1) - m(1, 1) * m(2, 0))) < -kIsZero)
- {
- return false;
- }
- return true;
-}
-
-idScalar determinant(const mat33 &m)
-{
- return m(0, 0) * m(1, 1) * m(2, 2) + m(0, 1) * m(1, 2) * m(2, 0) + m(0, 2) * m(1, 0) * m(2, 1) -
- m(0, 2) * m(1, 1) * m(2, 0) - m(0, 0) * m(1, 2) * m(2, 1) - m(0, 1) * m(1, 0) * m(2, 2);
-}
-
-bool isValidInertiaMatrix(const mat33 &I, const int index, bool has_fixed_joint)
-{
- // TODO(Thomas) do we really want this?
- // in cases where the inertia tensor about the center of mass is zero,
- // the determinant of the inertia tensor about the joint axis is almost
- // zero and can have a very small negative value.
- if (!isPositiveSemiDefiniteFuzzy(I))
- {
- bt_id_error_message(
- "invalid inertia matrix for body %d, not positive definite "
- "(fixed joint)\n",
- index);
- bt_id_error_message(
- "matrix is:\n"
- "[%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e]\n",
- I(0, 0), I(0, 1), I(0, 2), I(1, 0), I(1, 1), I(1, 2), I(2, 0), I(2, 1),
- I(2, 2));
-
- return false;
- }
-
- // check triangle inequality, must have I(i,i)+I(j,j)>=I(k,k)
- if (!has_fixed_joint)
- {
- if (I(0, 0) + I(1, 1) < I(2, 2))
- {
- bt_id_error_message("invalid inertia tensor for body %d, I(0,0) + I(1,1) < I(2,2)\n", index);
- bt_id_error_message(
- "matrix is:\n"
- "[%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e]\n",
- I(0, 0), I(0, 1), I(0, 2), I(1, 0), I(1, 1), I(1, 2), I(2, 0), I(2, 1),
- I(2, 2));
- return false;
- }
- if (I(0, 0) + I(1, 1) < I(2, 2))
- {
- bt_id_error_message("invalid inertia tensor for body %d, I(0,0) + I(1,1) < I(2,2)\n", index);
- bt_id_error_message(
- "matrix is:\n"
- "[%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e]\n",
- I(0, 0), I(0, 1), I(0, 2), I(1, 0), I(1, 1), I(1, 2), I(2, 0), I(2, 1),
- I(2, 2));
- return false;
- }
- if (I(1, 1) + I(2, 2) < I(0, 0))
- {
- bt_id_error_message("invalid inertia tensor for body %d, I(1,1) + I(2,2) < I(0,0)\n", index);
- bt_id_error_message(
- "matrix is:\n"
- "[%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e;\n"
- "%.20e %.20e %.20e]\n",
- I(0, 0), I(0, 1), I(0, 2), I(1, 0), I(1, 1), I(1, 2), I(2, 0), I(2, 1),
- I(2, 2));
- return false;
- }
- }
- // check positive/zero diagonal elements
- for (int i = 0; i < 3; i++)
- {
- if (I(i, i) < 0)
- { // accept zero
- bt_id_error_message("invalid inertia tensor, I(%d,%d)= %e <0\n", i, i, I(i, i));
- return false;
- }
- }
- // check symmetry
- if (BT_ID_FABS(I(1, 0) - I(0, 1)) > kIsZero)
- {
- bt_id_error_message(
- "invalid inertia tensor for body %d I(1,0)!=I(0,1). I(1,0)-I(0,1)= "
- "%e\n",
- index, I(1, 0) - I(0, 1));
- return false;
- }
- if (BT_ID_FABS(I(2, 0) - I(0, 2)) > kIsZero)
- {
- bt_id_error_message(
- "invalid inertia tensor for body %d I(2,0)!=I(0,2). I(2,0)-I(0,2)= "
- "%e\n",
- index, I(2, 0) - I(0, 2));
- return false;
- }
- if (BT_ID_FABS(I(1, 2) - I(2, 1)) > kIsZero)
- {
- bt_id_error_message("invalid inertia tensor body %d I(1,2)!=I(2,1). I(1,2)-I(2,1)= %e\n", index,
- I(1, 2) - I(2, 1));
- return false;
- }
- return true;
-}
-
-bool isValidTransformMatrix(const mat33 &m)
-{
-#define print_mat(x) \
- bt_id_error_message("matrix is [%e, %e, %e; %e, %e, %e; %e, %e, %e]\n", x(0, 0), x(0, 1), x(0, 2), \
- x(1, 0), x(1, 1), x(1, 2), x(2, 0), x(2, 1), x(2, 2))
-
- // check for unit length column vectors
- for (int i = 0; i < 3; i++)
- {
- const idScalar length_minus_1 =
- BT_ID_FABS(m(0, i) * m(0, i) + m(1, i) * m(1, i) + m(2, i) * m(2, i) - 1.0);
- if (length_minus_1 > kAxisLengthEpsilon)
- {
- bt_id_error_message(
- "Not a valid rotation matrix (column %d not unit length)\n"
- "column = [%.18e %.18e %.18e]\n"
- "length-1.0= %.18e\n",
- i, m(0, i), m(1, i), m(2, i), length_minus_1);
- print_mat(m);
- return false;
- }
- }
- // check for orthogonal column vectors
- if (BT_ID_FABS(m(0, 0) * m(0, 1) + m(1, 0) * m(1, 1) + m(2, 0) * m(2, 1)) > kAxisLengthEpsilon)
- {
- bt_id_error_message("Not a valid rotation matrix (columns 0 and 1 not orthogonal)\n");
- print_mat(m);
- return false;
- }
- if (BT_ID_FABS(m(0, 0) * m(0, 2) + m(1, 0) * m(1, 2) + m(2, 0) * m(2, 2)) > kAxisLengthEpsilon)
- {
- bt_id_error_message("Not a valid rotation matrix (columns 0 and 2 not orthogonal)\n");
- print_mat(m);
- return false;
- }
- if (BT_ID_FABS(m(0, 1) * m(0, 2) + m(1, 1) * m(1, 2) + m(2, 1) * m(2, 2)) > kAxisLengthEpsilon)
- {
- bt_id_error_message("Not a valid rotation matrix (columns 0 and 2 not orthogonal)\n");
- print_mat(m);
- return false;
- }
- // check determinant (rotation not reflection)
- if (determinant(m) <= 0)
- {
- bt_id_error_message("Not a valid rotation matrix (determinant <=0)\n");
- print_mat(m);
- return false;
- }
- return true;
-}
-
-bool isUnitVector(const vec3 &vector)
-{
- return BT_ID_FABS(vector(0) * vector(0) + vector(1) * vector(1) + vector(2) * vector(2) - 1.0) <
- kIsZero;
-}
-
-vec3 rpyFromMatrix(const mat33 &rot)
-{
- vec3 rpy;
- rpy(2) = BT_ID_ATAN2(-rot(1, 0), rot(0, 0));
- rpy(1) = BT_ID_ATAN2(rot(2, 0), BT_ID_COS(rpy(2)) * rot(0, 0) - BT_ID_SIN(rpy(0)) * rot(1, 0));
- rpy(0) = BT_ID_ATAN2(-rot(2, 0), rot(2, 2));
- return rpy;
-}
-} // namespace btInverseDynamics
diff --git a/thirdparty/bullet/BulletInverseDynamics/IDMath.hpp b/thirdparty/bullet/BulletInverseDynamics/IDMath.hpp
deleted file mode 100644
index 40bee5302b..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/IDMath.hpp
+++ /dev/null
@@ -1,100 +0,0 @@
-/// @file Math utility functions used in inverse dynamics library.
-/// Defined here as they may not be provided by the math library.
-
-#ifndef IDMATH_HPP_
-#define IDMATH_HPP_
-#include "IDConfig.hpp"
-
-namespace btInverseDynamics
-{
-/// set all elements to zero
-void setZero(vec3& v);
-/// set all elements to zero
-void setZero(vecx& v);
-/// set all elements to zero
-void setZero(mat33& m);
-/// create a skew symmetric matrix from a vector (useful for cross product abstraction, e.g. v x a = V * a)
-void skew(vec3& v, mat33* result);
-/// return maximum absolute value
-idScalar maxAbs(const vecx& v);
-#ifndef ID_LINEAR_MATH_USE_EIGEN
-/// return maximum absolute value
-idScalar maxAbs(const vec3& v);
-#endif //ID_LINEAR_MATH_USE_EIGEN
-
-#if (defined BT_ID_HAVE_MAT3X)
-idScalar maxAbsMat3x(const mat3x& m);
-void setZero(mat3x& m);
-// define math functions on mat3x here to avoid allocations in operators.
-void mul(const mat33& a, const mat3x& b, mat3x* result);
-void add(const mat3x& a, const mat3x& b, mat3x* result);
-void sub(const mat3x& a, const mat3x& b, mat3x* result);
-#endif
-
-/// get offset vector & transform matrix from DH parameters
-/// TODO: add documentation
-void getVecMatFromDH(idScalar theta, idScalar d, idScalar a, idScalar alpha, vec3* r, mat33* T);
-
-/// Check if a 3x3 matrix is positive definite
-/// @param m a 3x3 matrix
-/// @return true if m>0, false otherwise
-bool isPositiveDefinite(const mat33& m);
-
-/// Check if a 3x3 matrix is positive semi definite
-/// @param m a 3x3 matrix
-/// @return true if m>=0, false otherwise
-bool isPositiveSemiDefinite(const mat33& m);
-/// Check if a 3x3 matrix is positive semi definite within numeric limits
-/// @param m a 3x3 matrix
-/// @return true if m>=-eps, false otherwise
-bool isPositiveSemiDefiniteFuzzy(const mat33& m);
-
-/// Determinant of 3x3 matrix
-/// NOTE: implemented here for portability, as determinant operation
-/// will be implemented differently for various matrix/vector libraries
-/// @param m a 3x3 matrix
-/// @return det(m)
-idScalar determinant(const mat33& m);
-
-/// Test if a 3x3 matrix satisfies some properties of inertia matrices
-/// @param I a 3x3 matrix
-/// @param index body index (for error messages)
-/// @param has_fixed_joint: if true, positive semi-definite matrices are accepted
-/// @return true if I satisfies inertia matrix properties, false otherwise.
-bool isValidInertiaMatrix(const mat33& I, int index, bool has_fixed_joint);
-
-/// Check if a 3x3 matrix is a valid transform (rotation) matrix
-/// @param m a 3x3 matrix
-/// @return true if m is a rotation matrix, false otherwise
-bool isValidTransformMatrix(const mat33& m);
-/// Transform matrix from parent to child frame,
-/// when the child frame is rotated about @param axis by @angle
-/// (mathematically positive)
-/// @param axis the axis of rotation
-/// @param angle rotation angle
-/// @param T pointer to transform matrix
-void bodyTParentFromAxisAngle(const vec3& axis, const idScalar& angle, mat33* T);
-
-/// Check if this is a unit vector
-/// @param vector
-/// @return true if |vector|=1 within numeric limits
-bool isUnitVector(const vec3& vector);
-
-/// @input a vector in R^3
-/// @returns corresponding spin tensor
-mat33 tildeOperator(const vec3& v);
-/// @param alpha angle in radians
-/// @returns transform matrix for ratation with @param alpha about x-axis
-mat33 transformX(const idScalar& alpha);
-/// @param beta angle in radians
-/// @returns transform matrix for ratation with @param beta about y-axis
-mat33 transformY(const idScalar& beta);
-/// @param gamma angle in radians
-/// @returns transform matrix for ratation with @param gamma about z-axis
-mat33 transformZ(const idScalar& gamma);
-///calculate rpy angles (x-y-z Euler angles) from a given rotation matrix
-/// @param rot rotation matrix
-/// @returns x-y-z Euler angles
-vec3 rpyFromMatrix(const mat33& rot);
-} // namespace btInverseDynamics
-#endif // IDMATH_HPP_
diff --git a/thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.cpp b/thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.cpp
deleted file mode 100644
index 9326b0d098..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.cpp
+++ /dev/null
@@ -1,548 +0,0 @@
-#include "MultiBodyTree.hpp"
-
-#include <cmath>
-#include <limits>
-#include <vector>
-
-#include "IDMath.hpp"
-#include "details/MultiBodyTreeImpl.hpp"
-#include "details/MultiBodyTreeInitCache.hpp"
-
-namespace btInverseDynamics
-{
-MultiBodyTree::MultiBodyTree()
- : m_is_finalized(false),
- m_mass_parameters_are_valid(true),
- m_accept_invalid_mass_parameters(false),
- m_impl(0x0),
- m_init_cache(0x0)
-{
- m_init_cache = new InitCache();
-}
-
-MultiBodyTree::~MultiBodyTree()
-{
- delete m_impl;
- delete m_init_cache;
-}
-
-void MultiBodyTree::setAcceptInvalidMassParameters(bool flag)
-{
- m_accept_invalid_mass_parameters = flag;
-}
-
-bool MultiBodyTree::getAcceptInvalidMassProperties() const
-{
- return m_accept_invalid_mass_parameters;
-}
-
-int MultiBodyTree::getBodyOrigin(const int body_index, vec3 *world_origin) const
-{
- return m_impl->getBodyOrigin(body_index, world_origin);
-}
-
-int MultiBodyTree::getBodyCoM(const int body_index, vec3 *world_com) const
-{
- return m_impl->getBodyCoM(body_index, world_com);
-}
-
-int MultiBodyTree::getBodyTransform(const int body_index, mat33 *world_T_body) const
-{
- return m_impl->getBodyTransform(body_index, world_T_body);
-}
-int MultiBodyTree::getBodyAngularVelocity(const int body_index, vec3 *world_omega) const
-{
- return m_impl->getBodyAngularVelocity(body_index, world_omega);
-}
-int MultiBodyTree::getBodyLinearVelocity(const int body_index, vec3 *world_velocity) const
-{
- return m_impl->getBodyLinearVelocity(body_index, world_velocity);
-}
-
-int MultiBodyTree::getBodyLinearVelocityCoM(const int body_index, vec3 *world_velocity) const
-{
- return m_impl->getBodyLinearVelocityCoM(body_index, world_velocity);
-}
-
-int MultiBodyTree::getBodyAngularAcceleration(const int body_index, vec3 *world_dot_omega) const
-{
- return m_impl->getBodyAngularAcceleration(body_index, world_dot_omega);
-}
-int MultiBodyTree::getBodyLinearAcceleration(const int body_index, vec3 *world_acceleration) const
-{
- return m_impl->getBodyLinearAcceleration(body_index, world_acceleration);
-}
-
-int MultiBodyTree::getParentRParentBodyRef(const int body_index, vec3 *r) const
-{
- return m_impl->getParentRParentBodyRef(body_index, r);
-}
-
-int MultiBodyTree::getBodyTParentRef(const int body_index, mat33 *T) const
-{
- return m_impl->getBodyTParentRef(body_index, T);
-}
-
-int MultiBodyTree::getBodyAxisOfMotion(const int body_index, vec3 *axis) const
-{
- return m_impl->getBodyAxisOfMotion(body_index, axis);
-}
-
-void MultiBodyTree::printTree() { m_impl->printTree(); }
-void MultiBodyTree::printTreeData() { m_impl->printTreeData(); }
-
-int MultiBodyTree::numBodies() const { return m_impl->m_num_bodies; }
-
-int MultiBodyTree::numDoFs() const { return m_impl->m_num_dofs; }
-
-int MultiBodyTree::calculateInverseDynamics(const vecx &q, const vecx &u, const vecx &dot_u,
- vecx *joint_forces)
-{
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 == m_impl->calculateInverseDynamics(q, u, dot_u, joint_forces))
- {
- bt_id_error_message("error in inverse dynamics calculation\n");
- return -1;
- }
- return 0;
-}
-
-int MultiBodyTree::calculateMassMatrix(const vecx &q, const bool update_kinematics,
- const bool initialize_matrix,
- const bool set_lower_triangular_matrix, matxx *mass_matrix)
-{
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 ==
- m_impl->calculateMassMatrix(q, update_kinematics, initialize_matrix,
- set_lower_triangular_matrix, mass_matrix))
- {
- bt_id_error_message("error in mass matrix calculation\n");
- return -1;
- }
- return 0;
-}
-
-int MultiBodyTree::calculateMassMatrix(const vecx &q, matxx *mass_matrix)
-{
- return calculateMassMatrix(q, true, true, true, mass_matrix);
-}
-
-int MultiBodyTree::calculateKinematics(const vecx &q, const vecx &u, const vecx &dot_u)
-{
- vec3 world_gravity(m_impl->m_world_gravity);
- // temporarily set gravity to zero, to ensure we get the actual accelerations
- setZero(m_impl->m_world_gravity);
-
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 == m_impl->calculateKinematics(q, u, dot_u,
- MultiBodyTree::MultiBodyImpl::POSITION_VELOCITY_ACCELERATION))
- {
- bt_id_error_message("error in kinematics calculation\n");
- return -1;
- }
-
- m_impl->m_world_gravity = world_gravity;
- return 0;
-}
-
-int MultiBodyTree::calculatePositionKinematics(const vecx &q)
-{
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 == m_impl->calculateKinematics(q, q, q,
- MultiBodyTree::MultiBodyImpl::POSITION_VELOCITY))
- {
- bt_id_error_message("error in kinematics calculation\n");
- return -1;
- }
- return 0;
-}
-
-int MultiBodyTree::calculatePositionAndVelocityKinematics(const vecx &q, const vecx &u)
-{
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 == m_impl->calculateKinematics(q, u, u,
- MultiBodyTree::MultiBodyImpl::POSITION_VELOCITY))
- {
- bt_id_error_message("error in kinematics calculation\n");
- return -1;
- }
- return 0;
-}
-
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
-int MultiBodyTree::calculateJacobians(const vecx &q, const vecx &u)
-{
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 == m_impl->calculateJacobians(q, u,
- MultiBodyTree::MultiBodyImpl::POSITION_VELOCITY))
- {
- bt_id_error_message("error in jacobian calculation\n");
- return -1;
- }
- return 0;
-}
-
-int MultiBodyTree::calculateJacobians(const vecx &q)
-{
- if (false == m_is_finalized)
- {
- bt_id_error_message("system has not been initialized\n");
- return -1;
- }
- if (-1 == m_impl->calculateJacobians(q, q,
- MultiBodyTree::MultiBodyImpl::POSITION_ONLY))
- {
- bt_id_error_message("error in jacobian calculation\n");
- return -1;
- }
- return 0;
-}
-
-int MultiBodyTree::getBodyDotJacobianTransU(const int body_index, vec3 *world_dot_jac_trans_u) const
-{
- return m_impl->getBodyDotJacobianTransU(body_index, world_dot_jac_trans_u);
-}
-
-int MultiBodyTree::getBodyDotJacobianRotU(const int body_index, vec3 *world_dot_jac_rot_u) const
-{
- return m_impl->getBodyDotJacobianRotU(body_index, world_dot_jac_rot_u);
-}
-
-int MultiBodyTree::getBodyJacobianTrans(const int body_index, mat3x *world_jac_trans) const
-{
- return m_impl->getBodyJacobianTrans(body_index, world_jac_trans);
-}
-
-int MultiBodyTree::getBodyJacobianRot(const int body_index, mat3x *world_jac_rot) const
-{
- return m_impl->getBodyJacobianRot(body_index, world_jac_rot);
-}
-
-#endif
-
-int MultiBodyTree::addBody(int body_index, int parent_index, JointType joint_type,
- const vec3 &parent_r_parent_body_ref, const mat33 &body_T_parent_ref,
- const vec3 &body_axis_of_motion_, idScalar mass,
- const vec3 &body_r_body_com, const mat33 &body_I_body,
- const int user_int, void *user_ptr)
-{
- if (body_index < 0)
- {
- bt_id_error_message("body index must be positive (got %d)\n", body_index);
- return -1;
- }
- vec3 body_axis_of_motion(body_axis_of_motion_);
- switch (joint_type)
- {
- case REVOLUTE:
- case PRISMATIC:
- // check if axis is unit vector
- if (!isUnitVector(body_axis_of_motion))
- {
- bt_id_warning_message(
- "axis of motion not a unit axis ([%f %f %f]), will use normalized vector\n",
- body_axis_of_motion(0), body_axis_of_motion(1), body_axis_of_motion(2));
- idScalar length = BT_ID_SQRT(BT_ID_POW(body_axis_of_motion(0), 2) +
- BT_ID_POW(body_axis_of_motion(1), 2) +
- BT_ID_POW(body_axis_of_motion(2), 2));
- if (length < BT_ID_SQRT(std::numeric_limits<idScalar>::min()))
- {
- bt_id_error_message("axis of motion vector too short (%e)\n", length);
- return -1;
- }
- body_axis_of_motion = (1.0 / length) * body_axis_of_motion;
- }
- break;
- case FIXED:
- break;
- case FLOATING:
- break;
- case SPHERICAL:
- break;
- default:
- bt_id_error_message("unknown joint type %d\n", joint_type);
- return -1;
- }
-
- // sanity check for mass properties. Zero mass is OK.
- if (mass < 0)
- {
- m_mass_parameters_are_valid = false;
- bt_id_error_message("Body %d has invalid mass %e\n", body_index, mass);
- if (!m_accept_invalid_mass_parameters)
- {
- return -1;
- }
- }
-
- if (!isValidInertiaMatrix(body_I_body, body_index, FIXED == joint_type))
- {
- m_mass_parameters_are_valid = false;
- // error message printed in function call
- if (!m_accept_invalid_mass_parameters)
- {
- return -1;
- }
- }
-
- if (!isValidTransformMatrix(body_T_parent_ref))
- {
- return -1;
- }
-
- return m_init_cache->addBody(body_index, parent_index, joint_type, parent_r_parent_body_ref,
- body_T_parent_ref, body_axis_of_motion, mass, body_r_body_com,
- body_I_body, user_int, user_ptr);
-}
-
-int MultiBodyTree::getParentIndex(const int body_index, int *parent_index) const
-{
- return m_impl->getParentIndex(body_index, parent_index);
-}
-
-int MultiBodyTree::getUserInt(const int body_index, int *user_int) const
-{
- return m_impl->getUserInt(body_index, user_int);
-}
-
-int MultiBodyTree::getUserPtr(const int body_index, void **user_ptr) const
-{
- return m_impl->getUserPtr(body_index, user_ptr);
-}
-
-int MultiBodyTree::setUserInt(const int body_index, const int user_int)
-{
- return m_impl->setUserInt(body_index, user_int);
-}
-
-int MultiBodyTree::setUserPtr(const int body_index, void *const user_ptr)
-{
- return m_impl->setUserPtr(body_index, user_ptr);
-}
-
-int MultiBodyTree::finalize()
-{
- const int &num_bodies = m_init_cache->numBodies();
- const int &num_dofs = m_init_cache->numDoFs();
-
- if (num_dofs < 0)
- {
- bt_id_error_message("Need num_dofs>=1, but num_dofs= %d\n", num_dofs);
- //return -1;
- }
-
- // 1 allocate internal MultiBody structure
- m_impl = new MultiBodyImpl(num_bodies, num_dofs);
-
- // 2 build new index set assuring index(parent) < index(child)
- if (-1 == m_init_cache->buildIndexSets())
- {
- return -1;
- }
- m_init_cache->getParentIndexArray(&m_impl->m_parent_index);
-
- // 3 setup internal kinematic and dynamic data
- for (int index = 0; index < num_bodies; index++)
- {
- InertiaData inertia;
- JointData joint;
- if (-1 == m_init_cache->getInertiaData(index, &inertia))
- {
- return -1;
- }
- if (-1 == m_init_cache->getJointData(index, &joint))
- {
- return -1;
- }
-
- RigidBody &rigid_body = m_impl->m_body_list[index];
-
- rigid_body.m_mass = inertia.m_mass;
- rigid_body.m_body_mass_com = inertia.m_mass * inertia.m_body_pos_body_com;
- rigid_body.m_body_I_body = inertia.m_body_I_body;
- rigid_body.m_joint_type = joint.m_type;
- rigid_body.m_parent_pos_parent_body_ref = joint.m_parent_pos_parent_child_ref;
- rigid_body.m_body_T_parent_ref = joint.m_child_T_parent_ref;
- rigid_body.m_parent_pos_parent_body_ref = joint.m_parent_pos_parent_child_ref;
- rigid_body.m_joint_type = joint.m_type;
-
- int user_int;
- if (-1 == m_init_cache->getUserInt(index, &user_int))
- {
- return -1;
- }
- if (-1 == m_impl->setUserInt(index, user_int))
- {
- return -1;
- }
-
- void *user_ptr;
- if (-1 == m_init_cache->getUserPtr(index, &user_ptr))
- {
- return -1;
- }
- if (-1 == m_impl->setUserPtr(index, user_ptr))
- {
- return -1;
- }
-
- // Set joint Jacobians. Note that the dimension is always 3x1 here to avoid variable sized
- // matrices.
- switch (rigid_body.m_joint_type)
- {
- case REVOLUTE:
- rigid_body.m_Jac_JR(0) = joint.m_child_axis_of_motion(0);
- rigid_body.m_Jac_JR(1) = joint.m_child_axis_of_motion(1);
- rigid_body.m_Jac_JR(2) = joint.m_child_axis_of_motion(2);
- rigid_body.m_Jac_JT(0) = 0.0;
- rigid_body.m_Jac_JT(1) = 0.0;
- rigid_body.m_Jac_JT(2) = 0.0;
- break;
- case PRISMATIC:
- rigid_body.m_Jac_JR(0) = 0.0;
- rigid_body.m_Jac_JR(1) = 0.0;
- rigid_body.m_Jac_JR(2) = 0.0;
- rigid_body.m_Jac_JT(0) = joint.m_child_axis_of_motion(0);
- rigid_body.m_Jac_JT(1) = joint.m_child_axis_of_motion(1);
- rigid_body.m_Jac_JT(2) = joint.m_child_axis_of_motion(2);
- break;
- case FIXED:
- // NOTE/TODO: dimension really should be zero ..
- rigid_body.m_Jac_JR(0) = 0.0;
- rigid_body.m_Jac_JR(1) = 0.0;
- rigid_body.m_Jac_JR(2) = 0.0;
- rigid_body.m_Jac_JT(0) = 0.0;
- rigid_body.m_Jac_JT(1) = 0.0;
- rigid_body.m_Jac_JT(2) = 0.0;
- break;
- case SPHERICAL:
- // NOTE/TODO: this is not really correct.
- // the Jacobians should be 3x3 matrices here !
- rigid_body.m_Jac_JR(0) = 0.0;
- rigid_body.m_Jac_JR(1) = 0.0;
- rigid_body.m_Jac_JR(2) = 0.0;
- rigid_body.m_Jac_JT(0) = 0.0;
- rigid_body.m_Jac_JT(1) = 0.0;
- rigid_body.m_Jac_JT(2) = 0.0;
- break;
- case FLOATING:
- // NOTE/TODO: this is not really correct.
- // the Jacobians should be 3x3 matrices here !
- rigid_body.m_Jac_JR(0) = 0.0;
- rigid_body.m_Jac_JR(1) = 0.0;
- rigid_body.m_Jac_JR(2) = 0.0;
- rigid_body.m_Jac_JT(0) = 0.0;
- rigid_body.m_Jac_JT(1) = 0.0;
- rigid_body.m_Jac_JT(2) = 0.0;
- break;
- default:
- bt_id_error_message("unsupported joint type %d\n", rigid_body.m_joint_type);
- return -1;
- }
- }
-
- // 4 assign degree of freedom indices & build per-joint-type index arrays
- if (-1 == m_impl->generateIndexSets())
- {
- bt_id_error_message("generating index sets\n");
- return -1;
- }
-
- // 5 do some pre-computations ..
- m_impl->calculateStaticData();
-
- // 6. make sure all user forces are set to zero, as this might not happen
- // in the vector ctors.
- m_impl->clearAllUserForcesAndMoments();
-
- m_is_finalized = true;
- return 0;
-}
-
-int MultiBodyTree::setGravityInWorldFrame(const vec3 &gravity)
-{
- return m_impl->setGravityInWorldFrame(gravity);
-}
-
-int MultiBodyTree::getJointType(const int body_index, JointType *joint_type) const
-{
- return m_impl->getJointType(body_index, joint_type);
-}
-
-int MultiBodyTree::getJointTypeStr(const int body_index, const char **joint_type) const
-{
- return m_impl->getJointTypeStr(body_index, joint_type);
-}
-
-int MultiBodyTree::getDoFOffset(const int body_index, int *q_offset) const
-{
- return m_impl->getDoFOffset(body_index, q_offset);
-}
-
-int MultiBodyTree::setBodyMass(const int body_index, idScalar mass)
-{
- return m_impl->setBodyMass(body_index, mass);
-}
-
-int MultiBodyTree::setBodyFirstMassMoment(const int body_index, const vec3 &first_mass_moment)
-{
- return m_impl->setBodyFirstMassMoment(body_index, first_mass_moment);
-}
-
-int MultiBodyTree::setBodySecondMassMoment(const int body_index, const mat33 &second_mass_moment)
-{
- return m_impl->setBodySecondMassMoment(body_index, second_mass_moment);
-}
-
-int MultiBodyTree::getBodyMass(const int body_index, idScalar *mass) const
-{
- return m_impl->getBodyMass(body_index, mass);
-}
-
-int MultiBodyTree::getBodyFirstMassMoment(const int body_index, vec3 *first_mass_moment) const
-{
- return m_impl->getBodyFirstMassMoment(body_index, first_mass_moment);
-}
-
-int MultiBodyTree::getBodySecondMassMoment(const int body_index, mat33 *second_mass_moment) const
-{
- return m_impl->getBodySecondMassMoment(body_index, second_mass_moment);
-}
-
-void MultiBodyTree::clearAllUserForcesAndMoments() { m_impl->clearAllUserForcesAndMoments(); }
-
-int MultiBodyTree::addUserForce(const int body_index, const vec3 &body_force)
-{
- return m_impl->addUserForce(body_index, body_force);
-}
-
-int MultiBodyTree::addUserMoment(const int body_index, const vec3 &body_moment)
-{
- return m_impl->addUserMoment(body_index, body_moment);
-}
-
-} // namespace btInverseDynamics
diff --git a/thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.hpp b/thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.hpp
deleted file mode 100644
index 7b852f976c..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/MultiBodyTree.hpp
+++ /dev/null
@@ -1,367 +0,0 @@
-#ifndef MULTIBODYTREE_HPP_
-#define MULTIBODYTREE_HPP_
-
-#include "IDConfig.hpp"
-#include "IDMath.hpp"
-
-namespace btInverseDynamics
-{
-/// Enumeration of supported joint types
-enum JointType
-{
- /// no degree of freedom, moves with parent
- FIXED = 0,
- /// one rotational degree of freedom relative to parent
- REVOLUTE,
- /// one translational degree of freedom relative to parent
- PRISMATIC,
- /// six degrees of freedom relative to parent
- FLOATING,
- /// three degrees of freedom, relative to parent
- SPHERICAL
-};
-
-/// Interface class for calculating inverse dynamics for tree structured
-/// multibody systems
-///
-/// Note on degrees of freedom
-/// The q vector contains the generalized coordinate set defining the tree's configuration.
-/// Every joint adds elements that define the corresponding link's frame pose relative to
-/// its parent. For the joint types that is:
-/// - FIXED: none
-/// - REVOLUTE: angle of rotation [rad]
-/// - PRISMATIC: displacement [m]
-/// - FLOATING: Euler x-y-z angles [rad] and displacement in body-fixed frame of parent [m]
-/// (in that order)
-/// - SPHERICAL: Euler x-y-z angles [rad]
-/// The u vector contains the generalized speeds, which are
-/// - FIXED: none
-/// - REVOLUTE: time derivative of angle of rotation [rad/s]
-/// - PRISMATIC: time derivative of displacement [m/s]
-/// - FLOATING: angular velocity [rad/s] (*not* time derivative of rpy angles)
-/// and time derivative of displacement in parent frame [m/s]
-// - SPHERICAL: angular velocity [rad/s]
-///
-/// The q and u vectors are obtained by stacking contributions of all bodies in one
-/// vector in the order of body indices.
-///
-/// Note on generalized forces: analogous to u, i.e.,
-/// - FIXED: none
-/// - REVOLUTE: moment [Nm], about joint axis
-/// - PRISMATIC: force [N], along joint axis
-/// - FLOATING: moment vector [Nm] and force vector [N], both in body-fixed frame
-/// (in that order)
-/// - SPHERICAL: moment vector [Nm]
-/// TODO - force element interface (friction, springs, dampers, etc)
-/// - gears and motor inertia
-class MultiBodyTree
-{
-public:
- ID_DECLARE_ALIGNED_ALLOCATOR();
- /// The contructor.
- /// Initialization & allocation is via addBody and buildSystem calls.
- MultiBodyTree();
- /// the destructor. This also deallocates all memory
- ~MultiBodyTree();
-
- /// Add body to the system. this allocates memory and not real-time safe.
- /// This only adds the data to an initial cache. After all bodies have been
- /// added,
- /// the system is setup using the buildSystem call
- /// @param body_index index of the body to be added. Must >=0, <number of bodies,
- /// and index of parent must be < index of body
- /// @param parent_index index of the parent body
- /// The root of the tree has index 0 and its parent (the world frame)
- /// is assigned index -1
- /// the rotation and translation relative to the parent are taken as
- /// pose of the root body relative to the world frame. Other parameters
- /// are ignored
- /// @param JointType type of joint connecting the body to the parent
- /// @param mass the mass of the body
- /// @param body_r_body_com the center of mass of the body relative to and
- /// described in
- /// the body fixed frame, which is located in the joint axis connecting
- /// the body to its parent
- /// @param body_I_body the moment of inertia of the body w.r.t the body-fixed
- /// frame
- /// (ie, the reference point is the origin of the body-fixed frame and
- /// the matrix is written
- /// w.r.t. those unit vectors)
- /// @param parent_r_parent_body_ref position of joint relative to the parent
- /// body's reference frame
- /// for q=0, written in the parent bodies reference frame
- /// @param body_axis_of_motion translation/rotation axis in body-fixed frame.
- /// Ignored for joints that are not revolute or prismatic.
- /// must be a unit vector.
- /// @param body_T_parent_ref transform matrix from parent to body reference
- /// frame for q=0.
- /// This is the matrix transforming a vector represented in the
- /// parent's reference frame into one represented
- /// in this body's reference frame.
- /// ie, if parent_vec is a vector in R^3 whose components are w.r.t to
- /// the parent's reference frame,
- /// then the same vector written w.r.t. this body's frame (for q=0) is
- /// given by
- /// body_vec = parent_R_body_ref * parent_vec
- /// @param user_ptr pointer to user data
- /// @param user_int pointer to user integer
- /// @return 0 on success, -1 on error
- int addBody(int body_index, int parent_index, JointType joint_type,
- const vec3& parent_r_parent_body_ref, const mat33& body_T_parent_ref,
- const vec3& body_axis_of_motion, idScalar mass, const vec3& body_r_body_com,
- const mat33& body_I_body, const int user_int, void* user_ptr);
- /// set policy for invalid mass properties
- /// @param flag if true, invalid mass properties are accepted,
- /// the default is false
- void setAcceptInvalidMassParameters(bool flag);
- /// @return the mass properties policy flag
- bool getAcceptInvalidMassProperties() const;
- /// build internal data structures
- /// call this after all bodies have been added via addBody
- /// @return 0 on success, -1 on error
- int finalize();
- /// pretty print ascii description of tree to stdout
- void printTree();
- /// print tree data to stdout
- void printTreeData();
- /// Calculate joint forces for given generalized state & derivatives.
- /// This also updates kinematic terms computed in calculateKinematics.
- /// If gravity is not set to zero, acceleration terms will contain
- /// gravitational acceleration.
- /// @param q generalized coordinates
- /// @param u generalized velocities. In the general case, u=T(q)*dot(q) and dim(q)>=dim(u)
- /// @param dot_u time derivative of u
- /// @param joint_forces this is where the resulting joint forces will be
- /// stored. dim(joint_forces) = dim(u)
- /// @return 0 on success, -1 on error
- int calculateInverseDynamics(const vecx& q, const vecx& u, const vecx& dot_u,
- vecx* joint_forces);
- /// Calculate joint space mass matrix
- /// @param q generalized coordinates
- /// @param initialize_matrix if true, initialize mass matrix with zero.
- /// If mass_matrix is initialized to zero externally and only used
- /// for mass matrix computations for the same system, it is safe to
- /// set this to false.
- /// @param set_lower_triangular_matrix if true, the lower triangular section of mass_matrix
- /// is also populated, otherwise not.
- /// @param mass_matrix matrix for storing the output (should be dim(q)xdim(q))
- /// @return -1 on error, 0 on success
- int calculateMassMatrix(const vecx& q, const bool update_kinematics,
- const bool initialize_matrix, const bool set_lower_triangular_matrix,
- matxx* mass_matrix);
-
- /// Calculate joint space mass matrix.
- /// This version will update kinematics, initialize all mass_matrix elements to zero and
- /// populate all mass matrix entries.
- /// @param q generalized coordinates
- /// @param mass_matrix matrix for storing the output (should be dim(q)xdim(q))
- /// @return -1 on error, 0 on success
- int calculateMassMatrix(const vecx& q, matxx* mass_matrix);
-
- /// Calculates kinematics also calculated in calculateInverseDynamics,
- /// but not dynamics.
- /// This function ensures that correct accelerations are computed that do not
- /// contain gravitational acceleration terms.
- /// Does not calculate Jacobians, but only vector quantities (positions, velocities & accelerations)
- int calculateKinematics(const vecx& q, const vecx& u, const vecx& dot_u);
- /// Calculate position kinematics
- int calculatePositionKinematics(const vecx& q);
- /// Calculate position and velocity kinematics
- int calculatePositionAndVelocityKinematics(const vecx& q, const vecx& u);
-
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- /// Calculate Jacobians (dvel/du), as well as velocity-dependent accelearation components
- /// d(Jacobian)/dt*u
- /// This function assumes that calculateInverseDynamics was called, or calculateKinematics,
- /// or calculatePositionAndVelocityKinematics
- int calculateJacobians(const vecx& q, const vecx& u);
- /// Calculate Jacobians (dvel/du)
- /// This function assumes that calculateInverseDynamics was called, or
- /// one of the calculateKineamtics functions
- int calculateJacobians(const vecx& q);
-#endif // BT_ID_HAVE_MAT3X
-
- /// set gravitational acceleration
- /// the default is [0;0;-9.8] in the world frame
- /// @param gravity the gravitational acceleration in world frame
- /// @return 0 on success, -1 on error
- int setGravityInWorldFrame(const vec3& gravity);
- /// returns number of bodies in tree
- int numBodies() const;
- /// returns number of mechanical degrees of freedom (dimension of q-vector)
- int numDoFs() const;
- /// get origin of a body-fixed frame, represented in world frame
- /// @param body_index index for frame/body
- /// @param world_origin pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyOrigin(const int body_index, vec3* world_origin) const;
- /// get center of mass of a body, represented in world frame
- /// @param body_index index for frame/body
- /// @param world_com pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyCoM(const int body_index, vec3* world_com) const;
- /// get transform from of a body-fixed frame to the world frame
- /// @param body_index index for frame/body
- /// @param world_T_body pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyTransform(const int body_index, mat33* world_T_body) const;
- /// get absolute angular velocity for a body, represented in the world frame
- /// @param body_index index for frame/body
- /// @param world_omega pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyAngularVelocity(const int body_index, vec3* world_omega) const;
- /// get linear velocity of a body, represented in world frame
- /// @param body_index index for frame/body
- /// @param world_velocity pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyLinearVelocity(const int body_index, vec3* world_velocity) const;
- /// get linear velocity of a body's CoM, represented in world frame
- /// (not required for inverse dynamics, provided for convenience)
- /// @param body_index index for frame/body
- /// @param world_vel_com pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyLinearVelocityCoM(const int body_index, vec3* world_velocity) const;
- /// get origin of a body-fixed frame, represented in world frame
- /// @param body_index index for frame/body
- /// @param world_origin pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyAngularAcceleration(const int body_index, vec3* world_dot_omega) const;
- /// get origin of a body-fixed frame, represented in world frame
- /// NOTE: this will include the gravitational acceleration, so the actual acceleration is
- /// obtainened by setting gravitational acceleration to zero, or subtracting it.
- /// @param body_index index for frame/body
- /// @param world_origin pointer for return data
- /// @return 0 on success, -1 on error
- int getBodyLinearAcceleration(const int body_index, vec3* world_acceleration) const;
-
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- // get translational jacobian, in world frame (dworld_velocity/du)
- int getBodyJacobianTrans(const int body_index, mat3x* world_jac_trans) const;
- // get rotational jacobian, in world frame (dworld_omega/du)
- int getBodyJacobianRot(const int body_index, mat3x* world_jac_rot) const;
- // get product of translational jacobian derivative * generatlized velocities
- int getBodyDotJacobianTransU(const int body_index, vec3* world_dot_jac_trans_u) const;
- // get product of rotational jacobian derivative * generatlized velocities
- int getBodyDotJacobianRotU(const int body_index, vec3* world_dot_jac_rot_u) const;
-#endif // BT_ID_HAVE_MAT3X
-
- /// returns the (internal) index of body
- /// @param body_index is the index of a body
- /// @param parent_index pointer to where parent index will be stored
- /// @return 0 on success, -1 on error
- int getParentIndex(const int body_index, int* parent_index) const;
- /// get joint type
- /// @param body_index index of the body
- /// @param joint_type the corresponding joint type
- /// @return 0 on success, -1 on failure
- int getJointType(const int body_index, JointType* joint_type) const;
- /// get joint type as string
- /// @param body_index index of the body
- /// @param joint_type string naming the corresponding joint type
- /// @return 0 on success, -1 on failure
- int getJointTypeStr(const int body_index, const char** joint_type) const;
- /// get offset translation to parent body (see addBody)
- /// @param body_index index of the body
- /// @param r the offset translation (see above)
- /// @return 0 on success, -1 on failure
- int getParentRParentBodyRef(const int body_index, vec3* r) const;
- /// get offset rotation to parent body (see addBody)
- /// @param body_index index of the body
- /// @param T the transform (see above)
- /// @return 0 on success, -1 on failure
- int getBodyTParentRef(const int body_index, mat33* T) const;
- /// get axis of motion (see addBody)
- /// @param body_index index of the body
- /// @param axis the axis (see above)
- /// @return 0 on success, -1 on failure
- int getBodyAxisOfMotion(const int body_index, vec3* axis) const;
- /// get offset for degrees of freedom of this body into the q-vector
- /// @param body_index index of the body
- /// @param q_offset offset the q vector
- /// @return -1 on error, 0 on success
- int getDoFOffset(const int body_index, int* q_offset) const;
- /// get user integer. not used by the library.
- /// @param body_index index of the body
- /// @param user_int the user integer
- /// @return 0 on success, -1 on error
- int getUserInt(const int body_index, int* user_int) const;
- /// get user pointer. not used by the library.
- /// @param body_index index of the body
- /// @param user_ptr the user pointer
- /// @return 0 on success, -1 on error
- int getUserPtr(const int body_index, void** user_ptr) const;
- /// set user integer. not used by the library.
- /// @param body_index index of the body
- /// @param user_int the user integer
- /// @return 0 on success, -1 on error
- int setUserInt(const int body_index, const int user_int);
- /// set user pointer. not used by the library.
- /// @param body_index index of the body
- /// @param user_ptr the user pointer
- /// @return 0 on success, -1 on error
- int setUserPtr(const int body_index, void* const user_ptr);
- /// set mass for a body
- /// @param body_index index of the body
- /// @param mass the mass to set
- /// @return 0 on success, -1 on failure
- int setBodyMass(const int body_index, const idScalar mass);
- /// set first moment of mass for a body
- /// (mass * center of mass, in body fixed frame, relative to joint)
- /// @param body_index index of the body
- /// @param first_mass_moment the vector to set
- /// @return 0 on success, -1 on failure
- int setBodyFirstMassMoment(const int body_index, const vec3& first_mass_moment);
- /// set second moment of mass for a body
- /// (moment of inertia, in body fixed frame, relative to joint)
- /// @param body_index index of the body
- /// @param second_mass_moment the inertia matrix
- /// @return 0 on success, -1 on failure
- int setBodySecondMassMoment(const int body_index, const mat33& second_mass_moment);
- /// get mass for a body
- /// @param body_index index of the body
- /// @param mass the mass
- /// @return 0 on success, -1 on failure
- int getBodyMass(const int body_index, idScalar* mass) const;
- /// get first moment of mass for a body
- /// (mass * center of mass, in body fixed frame, relative to joint)
- /// @param body_index index of the body
- /// @param first_moment the vector
- /// @return 0 on success, -1 on failure
- int getBodyFirstMassMoment(const int body_index, vec3* first_mass_moment) const;
- /// get second moment of mass for a body
- /// (moment of inertia, in body fixed frame, relative to joint)
- /// @param body_index index of the body
- /// @param second_mass_moment the inertia matrix
- /// @return 0 on success, -1 on failure
- int getBodySecondMassMoment(const int body_index, mat33* second_mass_moment) const;
- /// set all user forces and moments to zero
- void clearAllUserForcesAndMoments();
- /// Add an external force to a body, acting at the origin of the body-fixed frame.
- /// Calls to addUserForce are cumulative. Set the user force and moment to zero
- /// via clearAllUserForcesAndMoments()
- /// @param body_force the force represented in the body-fixed frame of reference
- /// @return 0 on success, -1 on error
- int addUserForce(const int body_index, const vec3& body_force);
- /// Add an external moment to a body.
- /// Calls to addUserMoment are cumulative. Set the user force and moment to zero
- /// via clearAllUserForcesAndMoments()
- /// @param body_moment the moment represented in the body-fixed frame of reference
- /// @return 0 on success, -1 on error
- int addUserMoment(const int body_index, const vec3& body_moment);
-
-private:
- // flag indicating if system has been initialized
- bool m_is_finalized;
- // flag indicating if mass properties are physically valid
- bool m_mass_parameters_are_valid;
- // flag defining if unphysical mass parameters are accepted
- bool m_accept_invalid_mass_parameters;
- // This struct implements the inverse dynamics calculations
- class MultiBodyImpl;
- MultiBodyImpl* m_impl;
- // cache data structure for initialization
- class InitCache;
- InitCache* m_init_cache;
-};
-} // namespace btInverseDynamics
-#endif // MULTIBODYTREE_HPP_
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/IDEigenInterface.hpp b/thirdparty/bullet/BulletInverseDynamics/details/IDEigenInterface.hpp
deleted file mode 100644
index fe4f102513..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/IDEigenInterface.hpp
+++ /dev/null
@@ -1,39 +0,0 @@
-#ifndef INVDYNEIGENINTERFACE_HPP_
-#define INVDYNEIGENINTERFACE_HPP_
-#include "../IDConfig.hpp"
-namespace btInverseDynamics
-{
-#define BT_ID_HAVE_MAT3X
-
-#ifdef BT_USE_DOUBLE_PRECISION
-typedef Eigen::Matrix<double, Eigen::Dynamic, 1, Eigen::DontAlign> vecx;
-typedef Eigen::Matrix<double, 3, 1, Eigen::DontAlign> vec3;
-typedef Eigen::Matrix<double, 3, 3, Eigen::DontAlign> mat33;
-typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::DontAlign> matxx;
-typedef Eigen::Matrix<double, 3, Eigen::Dynamic, Eigen::DontAlign> mat3x;
-#else
-typedef Eigen::Matrix<float, Eigen::Dynamic, 1, Eigen::DontAlign> vecx;
-typedef Eigen::Matrix<float, 3, 1, Eigen::DontAlign> vec3;
-typedef Eigen::Matrix<float, 3, 3, Eigen::DontAlign> mat33;
-typedef Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::DontAlign> matxx;
-typedef Eigen::Matrix<float, 3, Eigen::Dynamic, Eigen::DontAlign> mat3x;
-#endif
-
-inline void resize(mat3x &m, Eigen::Index size)
-{
- m.resize(3, size);
- m.setZero();
-}
-
-inline void setMatxxElem(const idArrayIdx row, const idArrayIdx col, const idScalar val, matxx *m)
-{
- (*m)(row, col) = val;
-}
-
-inline void setMat3xElem(const idArrayIdx row, const idArrayIdx col, const idScalar val, mat3x *m)
-{
- (*m)(row, col) = val;
-}
-
-} // namespace btInverseDynamics
-#endif // INVDYNEIGENINTERFACE_HPP_
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/IDLinearMathInterface.hpp b/thirdparty/bullet/BulletInverseDynamics/details/IDLinearMathInterface.hpp
deleted file mode 100644
index 0c398a3727..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/IDLinearMathInterface.hpp
+++ /dev/null
@@ -1,202 +0,0 @@
-#ifndef IDLINEARMATHINTERFACE_HPP_
-#define IDLINEARMATHINTERFACE_HPP_
-
-#include <cstdlib>
-
-#include "../IDConfig.hpp"
-
-#include "../../LinearMath/btMatrix3x3.h"
-#include "../../LinearMath/btVector3.h"
-#include "../../LinearMath/btMatrixX.h"
-#define BT_ID_HAVE_MAT3X
-
-namespace btInverseDynamics
-{
-class vec3;
-class vecx;
-class mat33;
-typedef btMatrixX<idScalar> matxx;
-
-class vec3 : public btVector3
-{
-public:
- vec3() : btVector3() {}
- vec3(const btVector3& btv) { *this = btv; }
- idScalar& operator()(int i) { return (*this)[i]; }
- const idScalar& operator()(int i) const { return (*this)[i]; }
- int size() const { return 3; }
- const vec3& operator=(const btVector3& rhs)
- {
- *static_cast<btVector3*>(this) = rhs;
- return *this;
- }
-};
-
-class mat33 : public btMatrix3x3
-{
-public:
- mat33() : btMatrix3x3() {}
- mat33(const btMatrix3x3& btm) { *this = btm; }
- idScalar& operator()(int i, int j) { return (*this)[i][j]; }
- const idScalar& operator()(int i, int j) const { return (*this)[i][j]; }
- const mat33& operator=(const btMatrix3x3& rhs)
- {
- *static_cast<btMatrix3x3*>(this) = rhs;
- return *this;
- }
- friend mat33 operator*(const idScalar& s, const mat33& a);
- friend mat33 operator/(const mat33& a, const idScalar& s);
-};
-
-inline mat33 operator/(const mat33& a, const idScalar& s) { return a * (1.0 / s); }
-
-inline mat33 operator*(const idScalar& s, const mat33& a) { return a * s; }
-
-class vecx : public btVectorX<idScalar>
-{
-public:
- vecx(int size) : btVectorX<idScalar>(size) {}
- const vecx& operator=(const btVectorX<idScalar>& rhs)
- {
- *static_cast<btVectorX<idScalar>*>(this) = rhs;
- return *this;
- }
-
- idScalar& operator()(int i) { return (*this)[i]; }
- const idScalar& operator()(int i) const { return (*this)[i]; }
-
- friend vecx operator*(const vecx& a, const idScalar& s);
- friend vecx operator*(const idScalar& s, const vecx& a);
-
- friend vecx operator+(const vecx& a, const vecx& b);
- friend vecx operator-(const vecx& a, const vecx& b);
- friend vecx operator/(const vecx& a, const idScalar& s);
-};
-
-inline vecx operator*(const vecx& a, const idScalar& s)
-{
- vecx result(a.size());
- for (int i = 0; i < result.size(); i++)
- {
- result(i) = a(i) * s;
- }
- return result;
-}
-inline vecx operator*(const idScalar& s, const vecx& a) { return a * s; }
-inline vecx operator+(const vecx& a, const vecx& b)
-{
- vecx result(a.size());
- // TODO: error handling for a.size() != b.size()??
- if (a.size() != b.size())
- {
- bt_id_error_message("size missmatch. a.size()= %d, b.size()= %d\n", a.size(), b.size());
- abort();
- }
- for (int i = 0; i < a.size(); i++)
- {
- result(i) = a(i) + b(i);
- }
-
- return result;
-}
-
-inline vecx operator-(const vecx& a, const vecx& b)
-{
- vecx result(a.size());
- // TODO: error handling for a.size() != b.size()??
- if (a.size() != b.size())
- {
- bt_id_error_message("size missmatch. a.size()= %d, b.size()= %d\n", a.size(), b.size());
- abort();
- }
- for (int i = 0; i < a.size(); i++)
- {
- result(i) = a(i) - b(i);
- }
- return result;
-}
-inline vecx operator/(const vecx& a, const idScalar& s)
-{
- vecx result(a.size());
- for (int i = 0; i < result.size(); i++)
- {
- result(i) = a(i) / s;
- }
-
- return result;
-}
-
-// use btMatrixX to implement 3xX matrix
-class mat3x : public matxx
-{
-public:
- mat3x() {}
- mat3x(const mat3x& rhs)
- {
- matxx::resize(rhs.rows(), rhs.cols());
- *this = rhs;
- }
- mat3x(int rows, int cols) : matxx(3, cols)
- {
- }
- void operator=(const mat3x& rhs)
- {
- if (m_cols != rhs.m_cols)
- {
- bt_id_error_message("size missmatch, cols= %d but rhs.cols= %d\n", cols(), rhs.cols());
- abort();
- }
- for (int i = 0; i < rows(); i++)
- {
- for (int k = 0; k < cols(); k++)
- {
- setElem(i, k, rhs(i, k));
- }
- }
- }
- void setZero()
- {
- matxx::setZero();
- }
-};
-
-inline vec3 operator*(const mat3x& a, const vecx& b)
-{
- vec3 result;
- if (a.cols() != b.size())
- {
- bt_id_error_message("size missmatch. a.cols()= %d, b.size()= %d\n", a.cols(), b.size());
- abort();
- }
- result(0) = 0.0;
- result(1) = 0.0;
- result(2) = 0.0;
- for (int i = 0; i < b.size(); i++)
- {
- for (int k = 0; k < 3; k++)
- {
- result(k) += a(k, i) * b(i);
- }
- }
- return result;
-}
-
-inline void resize(mat3x& m, idArrayIdx size)
-{
- m.resize(3, size);
- m.setZero();
-}
-
-inline void setMatxxElem(const idArrayIdx row, const idArrayIdx col, const idScalar val, matxx* m)
-{
- m->setElem(row, col, val);
-}
-
-inline void setMat3xElem(const idArrayIdx row, const idArrayIdx col, const idScalar val, mat3x* m)
-{
- m->setElem(row, col, val);
-}
-
-} // namespace btInverseDynamics
-
-#endif // IDLINEARMATHINTERFACE_HPP_
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/IDMatVec.hpp b/thirdparty/bullet/BulletInverseDynamics/details/IDMatVec.hpp
deleted file mode 100644
index 1c786095e7..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/IDMatVec.hpp
+++ /dev/null
@@ -1,489 +0,0 @@
-/// @file Built-In Matrix-Vector functions
-#ifndef IDMATVEC_HPP_
-#define IDMATVEC_HPP_
-
-#include <cstdlib>
-
-#include "../IDConfig.hpp"
-#define BT_ID_HAVE_MAT3X
-
-namespace btInverseDynamics
-{
-class vec3;
-class vecx;
-class mat33;
-class matxx;
-class mat3x;
-
-/// This is a very basic implementation to enable stand-alone use of the library.
-/// The implementation is not really optimized and misses many features that you would
-/// want from a "fully featured" linear math library.
-class vec3
-{
-public:
- idScalar& operator()(int i) { return m_data[i]; }
- const idScalar& operator()(int i) const { return m_data[i]; }
- const int size() const { return 3; }
- const vec3& operator=(const vec3& rhs);
- const vec3& operator+=(const vec3& b);
- const vec3& operator-=(const vec3& b);
- vec3 cross(const vec3& b) const;
- idScalar dot(const vec3& b) const;
-
- friend vec3 operator*(const mat33& a, const vec3& b);
- friend vec3 operator*(const vec3& a, const idScalar& s);
- friend vec3 operator*(const idScalar& s, const vec3& a);
-
- friend vec3 operator+(const vec3& a, const vec3& b);
- friend vec3 operator-(const vec3& a, const vec3& b);
- friend vec3 operator/(const vec3& a, const idScalar& s);
-
-private:
- idScalar m_data[3];
-};
-
-class mat33
-{
-public:
- idScalar& operator()(int i, int j) { return m_data[3 * i + j]; }
- const idScalar& operator()(int i, int j) const { return m_data[3 * i + j]; }
- const mat33& operator=(const mat33& rhs);
- mat33 transpose() const;
- const mat33& operator+=(const mat33& b);
- const mat33& operator-=(const mat33& b);
-
- friend mat33 operator*(const mat33& a, const mat33& b);
- friend vec3 operator*(const mat33& a, const vec3& b);
- friend mat33 operator*(const mat33& a, const idScalar& s);
- friend mat33 operator*(const idScalar& s, const mat33& a);
- friend mat33 operator+(const mat33& a, const mat33& b);
- friend mat33 operator-(const mat33& a, const mat33& b);
- friend mat33 operator/(const mat33& a, const idScalar& s);
-
-private:
- // layout is [0,1,2;3,4,5;6,7,8]
- idScalar m_data[9];
-};
-
-class vecx
-{
-public:
- vecx(int size) : m_size(size)
- {
- m_data = static_cast<idScalar*>(idMalloc(sizeof(idScalar) * size));
- }
- ~vecx() { idFree(m_data); }
- const vecx& operator=(const vecx& rhs);
- idScalar& operator()(int i) { return m_data[i]; }
- const idScalar& operator()(int i) const { return m_data[i]; }
- const int& size() const { return m_size; }
-
- friend vecx operator*(const vecx& a, const idScalar& s);
- friend vecx operator*(const idScalar& s, const vecx& a);
-
- friend vecx operator+(const vecx& a, const vecx& b);
- friend vecx operator-(const vecx& a, const vecx& b);
- friend vecx operator/(const vecx& a, const idScalar& s);
-
-private:
- int m_size;
- idScalar* m_data;
-};
-
-class matxx
-{
-public:
- matxx()
- {
- m_data = 0x0;
- m_cols = 0;
- m_rows = 0;
- }
- matxx(int rows, int cols) : m_rows(rows), m_cols(cols)
- {
- m_data = static_cast<idScalar*>(idMalloc(sizeof(idScalar) * rows * cols));
- }
- ~matxx() { idFree(m_data); }
- idScalar& operator()(int row, int col) { return m_data[row * m_cols + col]; }
- const idScalar& operator()(int row, int col) const { return m_data[row * m_cols + col]; }
- const int& rows() const { return m_rows; }
- const int& cols() const { return m_cols; }
-
-private:
- int m_rows;
- int m_cols;
- idScalar* m_data;
-};
-
-class mat3x
-{
-public:
- mat3x()
- {
- m_data = 0x0;
- m_cols = 0;
- }
- mat3x(const mat3x& rhs)
- {
- m_cols = rhs.m_cols;
- allocate();
- *this = rhs;
- }
- mat3x(int rows, int cols) : m_cols(cols)
- {
- allocate();
- };
- void operator=(const mat3x& rhs)
- {
- if (m_cols != rhs.m_cols)
- {
- bt_id_error_message("size missmatch, cols= %d but rhs.cols= %d\n", cols(), rhs.cols());
- abort();
- }
- for (int i = 0; i < 3 * m_cols; i++)
- {
- m_data[i] = rhs.m_data[i];
- }
- }
-
- ~mat3x()
- {
- free();
- }
- idScalar& operator()(int row, int col) { return m_data[row * m_cols + col]; }
- const idScalar& operator()(int row, int col) const { return m_data[row * m_cols + col]; }
- int rows() const { return m_rows; }
- const int& cols() const { return m_cols; }
- void resize(int rows, int cols)
- {
- m_cols = cols;
- free();
- allocate();
- }
- void setZero()
- {
- memset(m_data, 0x0, sizeof(idScalar) * m_rows * m_cols);
- }
- // avoid operators that would allocate -- use functions sub/add/mul in IDMath.hpp instead
-private:
- void allocate() { m_data = static_cast<idScalar*>(idMalloc(sizeof(idScalar) * m_rows * m_cols)); }
- void free() { idFree(m_data); }
- enum
- {
- m_rows = 3
- };
- int m_cols;
- idScalar* m_data;
-};
-
-inline void resize(mat3x& m, idArrayIdx size)
-{
- m.resize(3, size);
- m.setZero();
-}
-
-//////////////////////////////////////////////////
-// Implementations
-inline const vec3& vec3::operator=(const vec3& rhs)
-{
- if (&rhs != this)
- {
- memcpy(m_data, rhs.m_data, 3 * sizeof(idScalar));
- }
- return *this;
-}
-
-inline vec3 vec3::cross(const vec3& b) const
-{
- vec3 result;
- result.m_data[0] = m_data[1] * b.m_data[2] - m_data[2] * b.m_data[1];
- result.m_data[1] = m_data[2] * b.m_data[0] - m_data[0] * b.m_data[2];
- result.m_data[2] = m_data[0] * b.m_data[1] - m_data[1] * b.m_data[0];
-
- return result;
-}
-
-inline idScalar vec3::dot(const vec3& b) const
-{
- return m_data[0] * b.m_data[0] + m_data[1] * b.m_data[1] + m_data[2] * b.m_data[2];
-}
-
-inline const mat33& mat33::operator=(const mat33& rhs)
-{
- if (&rhs != this)
- {
- memcpy(m_data, rhs.m_data, 9 * sizeof(idScalar));
- }
- return *this;
-}
-inline mat33 mat33::transpose() const
-{
- mat33 result;
- result.m_data[0] = m_data[0];
- result.m_data[1] = m_data[3];
- result.m_data[2] = m_data[6];
- result.m_data[3] = m_data[1];
- result.m_data[4] = m_data[4];
- result.m_data[5] = m_data[7];
- result.m_data[6] = m_data[2];
- result.m_data[7] = m_data[5];
- result.m_data[8] = m_data[8];
-
- return result;
-}
-
-inline mat33 operator*(const mat33& a, const mat33& b)
-{
- mat33 result;
- result.m_data[0] =
- a.m_data[0] * b.m_data[0] + a.m_data[1] * b.m_data[3] + a.m_data[2] * b.m_data[6];
- result.m_data[1] =
- a.m_data[0] * b.m_data[1] + a.m_data[1] * b.m_data[4] + a.m_data[2] * b.m_data[7];
- result.m_data[2] =
- a.m_data[0] * b.m_data[2] + a.m_data[1] * b.m_data[5] + a.m_data[2] * b.m_data[8];
- result.m_data[3] =
- a.m_data[3] * b.m_data[0] + a.m_data[4] * b.m_data[3] + a.m_data[5] * b.m_data[6];
- result.m_data[4] =
- a.m_data[3] * b.m_data[1] + a.m_data[4] * b.m_data[4] + a.m_data[5] * b.m_data[7];
- result.m_data[5] =
- a.m_data[3] * b.m_data[2] + a.m_data[4] * b.m_data[5] + a.m_data[5] * b.m_data[8];
- result.m_data[6] =
- a.m_data[6] * b.m_data[0] + a.m_data[7] * b.m_data[3] + a.m_data[8] * b.m_data[6];
- result.m_data[7] =
- a.m_data[6] * b.m_data[1] + a.m_data[7] * b.m_data[4] + a.m_data[8] * b.m_data[7];
- result.m_data[8] =
- a.m_data[6] * b.m_data[2] + a.m_data[7] * b.m_data[5] + a.m_data[8] * b.m_data[8];
-
- return result;
-}
-
-inline const mat33& mat33::operator+=(const mat33& b)
-{
- for (int i = 0; i < 9; i++)
- {
- m_data[i] += b.m_data[i];
- }
-
- return *this;
-}
-
-inline const mat33& mat33::operator-=(const mat33& b)
-{
- for (int i = 0; i < 9; i++)
- {
- m_data[i] -= b.m_data[i];
- }
- return *this;
-}
-
-inline vec3 operator*(const mat33& a, const vec3& b)
-{
- vec3 result;
-
- result.m_data[0] =
- a.m_data[0] * b.m_data[0] + a.m_data[1] * b.m_data[1] + a.m_data[2] * b.m_data[2];
- result.m_data[1] =
- a.m_data[3] * b.m_data[0] + a.m_data[4] * b.m_data[1] + a.m_data[5] * b.m_data[2];
- result.m_data[2] =
- a.m_data[6] * b.m_data[0] + a.m_data[7] * b.m_data[1] + a.m_data[8] * b.m_data[2];
-
- return result;
-}
-
-inline const vec3& vec3::operator+=(const vec3& b)
-{
- for (int i = 0; i < 3; i++)
- {
- m_data[i] += b.m_data[i];
- }
- return *this;
-}
-
-inline const vec3& vec3::operator-=(const vec3& b)
-{
- for (int i = 0; i < 3; i++)
- {
- m_data[i] -= b.m_data[i];
- }
- return *this;
-}
-
-inline mat33 operator*(const mat33& a, const idScalar& s)
-{
- mat33 result;
- for (int i = 0; i < 9; i++)
- {
- result.m_data[i] = a.m_data[i] * s;
- }
- return result;
-}
-
-inline mat33 operator*(const idScalar& s, const mat33& a) { return a * s; }
-
-inline vec3 operator*(const vec3& a, const idScalar& s)
-{
- vec3 result;
- for (int i = 0; i < 3; i++)
- {
- result.m_data[i] = a.m_data[i] * s;
- }
- return result;
-}
-inline vec3 operator*(const idScalar& s, const vec3& a) { return a * s; }
-
-inline mat33 operator+(const mat33& a, const mat33& b)
-{
- mat33 result;
- for (int i = 0; i < 9; i++)
- {
- result.m_data[i] = a.m_data[i] + b.m_data[i];
- }
- return result;
-}
-inline vec3 operator+(const vec3& a, const vec3& b)
-{
- vec3 result;
- for (int i = 0; i < 3; i++)
- {
- result.m_data[i] = a.m_data[i] + b.m_data[i];
- }
- return result;
-}
-
-inline mat33 operator-(const mat33& a, const mat33& b)
-{
- mat33 result;
- for (int i = 0; i < 9; i++)
- {
- result.m_data[i] = a.m_data[i] - b.m_data[i];
- }
- return result;
-}
-inline vec3 operator-(const vec3& a, const vec3& b)
-{
- vec3 result;
- for (int i = 0; i < 3; i++)
- {
- result.m_data[i] = a.m_data[i] - b.m_data[i];
- }
- return result;
-}
-
-inline mat33 operator/(const mat33& a, const idScalar& s)
-{
- mat33 result;
- for (int i = 0; i < 9; i++)
- {
- result.m_data[i] = a.m_data[i] / s;
- }
- return result;
-}
-
-inline vec3 operator/(const vec3& a, const idScalar& s)
-{
- vec3 result;
- for (int i = 0; i < 3; i++)
- {
- result.m_data[i] = a.m_data[i] / s;
- }
- return result;
-}
-
-inline const vecx& vecx::operator=(const vecx& rhs)
-{
- if (size() != rhs.size())
- {
- bt_id_error_message("size missmatch, size()= %d but rhs.size()= %d\n", size(), rhs.size());
- abort();
- }
- if (&rhs != this)
- {
- memcpy(m_data, rhs.m_data, rhs.size() * sizeof(idScalar));
- }
- return *this;
-}
-inline vecx operator*(const vecx& a, const idScalar& s)
-{
- vecx result(a.size());
- for (int i = 0; i < result.size(); i++)
- {
- result.m_data[i] = a.m_data[i] * s;
- }
- return result;
-}
-inline vecx operator*(const idScalar& s, const vecx& a) { return a * s; }
-inline vecx operator+(const vecx& a, const vecx& b)
-{
- vecx result(a.size());
- // TODO: error handling for a.size() != b.size()??
- if (a.size() != b.size())
- {
- bt_id_error_message("size missmatch. a.size()= %d, b.size()= %d\n", a.size(), b.size());
- abort();
- }
- for (int i = 0; i < a.size(); i++)
- {
- result.m_data[i] = a.m_data[i] + b.m_data[i];
- }
-
- return result;
-}
-inline vecx operator-(const vecx& a, const vecx& b)
-{
- vecx result(a.size());
- // TODO: error handling for a.size() != b.size()??
- if (a.size() != b.size())
- {
- bt_id_error_message("size missmatch. a.size()= %d, b.size()= %d\n", a.size(), b.size());
- abort();
- }
- for (int i = 0; i < a.size(); i++)
- {
- result.m_data[i] = a.m_data[i] - b.m_data[i];
- }
- return result;
-}
-inline vecx operator/(const vecx& a, const idScalar& s)
-{
- vecx result(a.size());
- for (int i = 0; i < result.size(); i++)
- {
- result.m_data[i] = a.m_data[i] / s;
- }
-
- return result;
-}
-
-inline vec3 operator*(const mat3x& a, const vecx& b)
-{
- vec3 result;
- if (a.cols() != b.size())
- {
- bt_id_error_message("size missmatch. a.cols()= %d, b.size()= %d\n", a.cols(), b.size());
- abort();
- }
- result(0) = 0.0;
- result(1) = 0.0;
- result(2) = 0.0;
- for (int i = 0; i < b.size(); i++)
- {
- for (int k = 0; k < 3; k++)
- {
- result(k) += a(k, i) * b(i);
- }
- }
- return result;
-}
-
-inline void setMatxxElem(const idArrayIdx row, const idArrayIdx col, const idScalar val, matxx* m)
-{
- (*m)(row, col) = val;
-}
-
-inline void setMat3xElem(const idArrayIdx row, const idArrayIdx col, const idScalar val, mat3x* m)
-{
- (*m)(row, col) = val;
-}
-
-} // namespace btInverseDynamics
-#endif
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.cpp b/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.cpp
deleted file mode 100644
index ec9a562295..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.cpp
+++ /dev/null
@@ -1,1286 +0,0 @@
-#include "MultiBodyTreeImpl.hpp"
-
-namespace btInverseDynamics
-{
-MultiBodyTree::MultiBodyImpl::MultiBodyImpl(int num_bodies_, int num_dofs_)
- : m_num_bodies(num_bodies_), m_num_dofs(num_dofs_)
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- ,
- m_m3x(3, m_num_dofs)
-#endif
-{
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- resize(m_m3x, m_num_dofs);
-#endif
- m_body_list.resize(num_bodies_);
- m_parent_index.resize(num_bodies_);
- m_child_indices.resize(num_bodies_);
- m_user_int.resize(num_bodies_);
- m_user_ptr.resize(num_bodies_);
-
- m_world_gravity(0) = 0.0;
- m_world_gravity(1) = 0.0;
- m_world_gravity(2) = -9.8;
-}
-
-const char *MultiBodyTree::MultiBodyImpl::jointTypeToString(const JointType &type) const
-{
- switch (type)
- {
- case FIXED:
- return "fixed";
- case REVOLUTE:
- return "revolute";
- case PRISMATIC:
- return "prismatic";
- case FLOATING:
- return "floating";
- case SPHERICAL:
- return "spherical";
- }
- return "error: invalid";
-}
-
-inline void indent(const int &level)
-{
- for (int j = 0; j < level; j++)
- id_printf(" "); // indent
-}
-
-void MultiBodyTree::MultiBodyImpl::printTree()
-{
- id_printf("body %.2d[%s]: root\n", 0, jointTypeToString(m_body_list[0].m_joint_type));
- printTree(0, 0);
-}
-
-void MultiBodyTree::MultiBodyImpl::printTreeData()
-{
- for (idArrayIdx i = 0; i < m_body_list.size(); i++)
- {
- RigidBody &body = m_body_list[i];
- id_printf("body: %d\n", static_cast<int>(i));
- id_printf("type: %s\n", jointTypeToString(body.m_joint_type));
- id_printf("q_index= %d\n", body.m_q_index);
- id_printf("Jac_JR= [%f;%f;%f]\n", body.m_Jac_JR(0), body.m_Jac_JR(1), body.m_Jac_JR(2));
- id_printf("Jac_JT= [%f;%f;%f]\n", body.m_Jac_JT(0), body.m_Jac_JT(1), body.m_Jac_JT(2));
-
- id_printf("mass = %f\n", body.m_mass);
- id_printf("mass * com = [%f %f %f]\n", body.m_body_mass_com(0), body.m_body_mass_com(1),
- body.m_body_mass_com(2));
- id_printf(
- "I_o= [%f %f %f;\n"
- " %f %f %f;\n"
- " %f %f %f]\n",
- body.m_body_I_body(0, 0), body.m_body_I_body(0, 1), body.m_body_I_body(0, 2),
- body.m_body_I_body(1, 0), body.m_body_I_body(1, 1), body.m_body_I_body(1, 2),
- body.m_body_I_body(2, 0), body.m_body_I_body(2, 1), body.m_body_I_body(2, 2));
-
- id_printf("parent_pos_parent_body_ref= [%f %f %f]\n", body.m_parent_pos_parent_body_ref(0),
- body.m_parent_pos_parent_body_ref(1), body.m_parent_pos_parent_body_ref(2));
- }
-}
-int MultiBodyTree::MultiBodyImpl::bodyNumDoFs(const JointType &type) const
-{
- switch (type)
- {
- case FIXED:
- return 0;
- case REVOLUTE:
- case PRISMATIC:
- return 1;
- case FLOATING:
- return 6;
- case SPHERICAL:
- return 3;
- }
- bt_id_error_message("unknown joint type %d\n", type);
- return 0;
-}
-
-void MultiBodyTree::MultiBodyImpl::printTree(int index, int indentation)
-{
- // this is adapted from URDF2Bullet.
- // TODO: fix this and print proper graph (similar to git --log --graph)
- int num_children = m_child_indices[index].size();
-
- indentation += 2;
- int count = 0;
-
- for (int i = 0; i < num_children; i++)
- {
- int child_index = m_child_indices[index][i];
- indent(indentation);
- id_printf("body %.2d[%s]: %.2d is child no. %d (qi= %d .. %d) \n", index,
- jointTypeToString(m_body_list[index].m_joint_type), child_index, (count++) + 1,
- m_body_list[index].m_q_index,
- m_body_list[index].m_q_index + bodyNumDoFs(m_body_list[index].m_joint_type));
- // first grandchild
- printTree(child_index, indentation);
- }
-}
-
-int MultiBodyTree::MultiBodyImpl::setGravityInWorldFrame(const vec3 &gravity)
-{
- m_world_gravity = gravity;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::generateIndexSets()
-{
- m_body_revolute_list.resize(0);
- m_body_prismatic_list.resize(0);
- int q_index = 0;
- for (idArrayIdx i = 0; i < m_body_list.size(); i++)
- {
- RigidBody &body = m_body_list[i];
- body.m_q_index = -1;
- switch (body.m_joint_type)
- {
- case REVOLUTE:
- m_body_revolute_list.push_back(i);
- body.m_q_index = q_index;
- q_index++;
- break;
- case PRISMATIC:
- m_body_prismatic_list.push_back(i);
- body.m_q_index = q_index;
- q_index++;
- break;
- case FIXED:
- // do nothing
- break;
- case FLOATING:
- m_body_floating_list.push_back(i);
- body.m_q_index = q_index;
- q_index += 6;
- break;
- case SPHERICAL:
- m_body_spherical_list.push_back(i);
- body.m_q_index = q_index;
- q_index += 3;
- break;
- default:
- bt_id_error_message("unsupported joint type %d\n", body.m_joint_type);
- return -1;
- }
- }
- // sanity check
- if (q_index != m_num_dofs)
- {
- bt_id_error_message("internal error, q_index= %d but num_dofs %d\n", q_index, m_num_dofs);
- return -1;
- }
-
- m_child_indices.resize(m_body_list.size());
-
- for (idArrayIdx child = 1; child < m_parent_index.size(); child++)
- {
- const int &parent = m_parent_index[child];
- if (parent >= 0 && parent < (static_cast<int>(m_parent_index.size()) - 1))
- {
- m_child_indices[parent].push_back(child);
- }
- else
- {
- if (-1 == parent)
- {
- // multiple bodies are directly linked to the environment, ie, not a single root
- bt_id_error_message("building index sets parent(%zu)= -1 (multiple roots)\n", child);
- }
- else
- {
- // should never happen
- bt_id_error_message(
- "building index sets. parent_index[%zu]= %d, but m_parent_index.size()= %d\n",
- child, parent, static_cast<int>(m_parent_index.size()));
- }
- return -1;
- }
- }
-
- return 0;
-}
-
-void MultiBodyTree::MultiBodyImpl::calculateStaticData()
-{
- // relative kinematics that are not a function of q, u, dot_u
- for (idArrayIdx i = 0; i < m_body_list.size(); i++)
- {
- RigidBody &body = m_body_list[i];
- switch (body.m_joint_type)
- {
- case REVOLUTE:
- body.m_parent_vel_rel(0) = 0;
- body.m_parent_vel_rel(1) = 0;
- body.m_parent_vel_rel(2) = 0;
- body.m_parent_acc_rel(0) = 0;
- body.m_parent_acc_rel(1) = 0;
- body.m_parent_acc_rel(2) = 0;
- body.m_parent_pos_parent_body = body.m_parent_pos_parent_body_ref;
- break;
- case PRISMATIC:
- body.m_body_T_parent = body.m_body_T_parent_ref;
- body.m_parent_Jac_JT = body.m_body_T_parent_ref.transpose() * body.m_Jac_JT;
- body.m_body_ang_vel_rel(0) = 0;
- body.m_body_ang_vel_rel(1) = 0;
- body.m_body_ang_vel_rel(2) = 0;
- body.m_body_ang_acc_rel(0) = 0;
- body.m_body_ang_acc_rel(1) = 0;
- body.m_body_ang_acc_rel(2) = 0;
- break;
- case FIXED:
- body.m_parent_pos_parent_body = body.m_parent_pos_parent_body_ref;
- body.m_body_T_parent = body.m_body_T_parent_ref;
- body.m_body_ang_vel_rel(0) = 0;
- body.m_body_ang_vel_rel(1) = 0;
- body.m_body_ang_vel_rel(2) = 0;
- body.m_parent_vel_rel(0) = 0;
- body.m_parent_vel_rel(1) = 0;
- body.m_parent_vel_rel(2) = 0;
- body.m_body_ang_acc_rel(0) = 0;
- body.m_body_ang_acc_rel(1) = 0;
- body.m_body_ang_acc_rel(2) = 0;
- body.m_parent_acc_rel(0) = 0;
- body.m_parent_acc_rel(1) = 0;
- body.m_parent_acc_rel(2) = 0;
- break;
- case FLOATING:
- // no static data
- break;
- case SPHERICAL:
- //todo: review
- body.m_parent_pos_parent_body = body.m_parent_pos_parent_body_ref;
- body.m_parent_vel_rel(0) = 0;
- body.m_parent_vel_rel(1) = 0;
- body.m_parent_vel_rel(2) = 0;
- body.m_parent_acc_rel(0) = 0;
- body.m_parent_acc_rel(1) = 0;
- body.m_parent_acc_rel(2) = 0;
- break;
- }
-
- // resize & initialize jacobians to zero.
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- body.m_body_dot_Jac_T_u(0) = 0.0;
- body.m_body_dot_Jac_T_u(1) = 0.0;
- body.m_body_dot_Jac_T_u(2) = 0.0;
- body.m_body_dot_Jac_R_u(0) = 0.0;
- body.m_body_dot_Jac_R_u(1) = 0.0;
- body.m_body_dot_Jac_R_u(2) = 0.0;
- resize(body.m_body_Jac_T, m_num_dofs);
- resize(body.m_body_Jac_R, m_num_dofs);
- body.m_body_Jac_T.setZero();
- body.m_body_Jac_R.setZero();
-#endif //
- }
-}
-
-int MultiBodyTree::MultiBodyImpl::calculateInverseDynamics(const vecx &q, const vecx &u,
- const vecx &dot_u, vecx *joint_forces)
-{
- if (q.size() != m_num_dofs || u.size() != m_num_dofs || dot_u.size() != m_num_dofs ||
- joint_forces->size() != m_num_dofs)
- {
- bt_id_error_message(
- "wrong vector dimension. system has %d DOFs,\n"
- "but dim(q)= %d, dim(u)= %d, dim(dot_u)= %d, dim(joint_forces)= %d\n",
- m_num_dofs, static_cast<int>(q.size()), static_cast<int>(u.size()),
- static_cast<int>(dot_u.size()), static_cast<int>(joint_forces->size()));
- return -1;
- }
- // 1. relative kinematics
- if (-1 == calculateKinematics(q, u, dot_u, POSITION_VELOCITY_ACCELERATION))
- {
- bt_id_error_message("error in calculateKinematics\n");
- return -1;
- }
- // 2. update contributions to equations of motion for every body.
- for (idArrayIdx i = 0; i < m_body_list.size(); i++)
- {
- RigidBody &body = m_body_list[i];
- // 3.4 update dynamic terms (rate of change of angular & linear momentum)
- body.m_eom_lhs_rotational =
- body.m_body_I_body * body.m_body_ang_acc + body.m_body_mass_com.cross(body.m_body_acc) +
- body.m_body_ang_vel.cross(body.m_body_I_body * body.m_body_ang_vel) -
- body.m_body_moment_user;
- body.m_eom_lhs_translational =
- body.m_body_ang_acc.cross(body.m_body_mass_com) + body.m_mass * body.m_body_acc +
- body.m_body_ang_vel.cross(body.m_body_ang_vel.cross(body.m_body_mass_com)) -
- body.m_body_force_user;
- }
-
- // 3. calculate full set of forces at parent joint
- // (not directly calculating the joint force along the free direction
- // simplifies inclusion of fixed joints.
- // An alternative would be to fuse bodies in a pre-processing step,
- // but that would make changing masses online harder (eg, payload masses
- // added with fixed joints to a gripper)
- // Also, this enables adding zero weight bodies as a way to calculate frame poses
- // for force elements, etc.
-
- for (int body_idx = m_body_list.size() - 1; body_idx >= 0; body_idx--)
- {
- // sum of forces and moments acting on this body from its children
- vec3 sum_f_children;
- vec3 sum_m_children;
- setZero(sum_f_children);
- setZero(sum_m_children);
- for (idArrayIdx child_list_idx = 0; child_list_idx < m_child_indices[body_idx].size();
- child_list_idx++)
- {
- const RigidBody &child = m_body_list[m_child_indices[body_idx][child_list_idx]];
- vec3 child_joint_force_in_this_frame =
- child.m_body_T_parent.transpose() * child.m_force_at_joint;
- sum_f_children -= child_joint_force_in_this_frame;
- sum_m_children -= child.m_body_T_parent.transpose() * child.m_moment_at_joint +
- child.m_parent_pos_parent_body.cross(child_joint_force_in_this_frame);
- }
- RigidBody &body = m_body_list[body_idx];
-
- body.m_force_at_joint = body.m_eom_lhs_translational - sum_f_children;
- body.m_moment_at_joint = body.m_eom_lhs_rotational - sum_m_children;
- }
-
- // 4. Calculate Joint forces.
- // These are the components of force_at_joint/moment_at_joint
- // in the free directions given by Jac_JT/Jac_JR
- // 4.1 revolute joints
- for (idArrayIdx i = 0; i < m_body_revolute_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_revolute_list[i]];
- // (*joint_forces)(body.m_q_index) = body.m_Jac_JR.transpose() * body.m_moment_at_joint;
- (*joint_forces)(body.m_q_index) = body.m_Jac_JR.dot(body.m_moment_at_joint);
- }
- // 4.2 for prismatic joints
- for (idArrayIdx i = 0; i < m_body_prismatic_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_prismatic_list[i]];
- // (*joint_forces)(body.m_q_index) = body.m_Jac_JT.transpose() * body.m_force_at_joint;
- (*joint_forces)(body.m_q_index) = body.m_Jac_JT.dot(body.m_force_at_joint);
- }
- // 4.3 floating bodies (6-DoF joints)
- for (idArrayIdx i = 0; i < m_body_floating_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_floating_list[i]];
- (*joint_forces)(body.m_q_index + 0) = body.m_moment_at_joint(0);
- (*joint_forces)(body.m_q_index + 1) = body.m_moment_at_joint(1);
- (*joint_forces)(body.m_q_index + 2) = body.m_moment_at_joint(2);
-
- (*joint_forces)(body.m_q_index + 3) = body.m_force_at_joint(0);
- (*joint_forces)(body.m_q_index + 4) = body.m_force_at_joint(1);
- (*joint_forces)(body.m_q_index + 5) = body.m_force_at_joint(2);
- }
-
- // 4.4 spherical bodies (3-DoF joints)
- for (idArrayIdx i = 0; i < m_body_spherical_list.size(); i++)
- {
- //todo: review
- RigidBody &body = m_body_list[m_body_spherical_list[i]];
- (*joint_forces)(body.m_q_index + 0) = body.m_moment_at_joint(0);
- (*joint_forces)(body.m_q_index + 1) = body.m_moment_at_joint(1);
- (*joint_forces)(body.m_q_index + 2) = body.m_moment_at_joint(2);
- }
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::calculateKinematics(const vecx &q, const vecx &u, const vecx &dot_u,
- const KinUpdateType type)
-{
- if (q.size() != m_num_dofs || u.size() != m_num_dofs || dot_u.size() != m_num_dofs)
- {
- bt_id_error_message(
- "wrong vector dimension. system has %d DOFs,\n"
- "but dim(q)= %d, dim(u)= %d, dim(dot_u)= %d\n",
- m_num_dofs, static_cast<int>(q.size()), static_cast<int>(u.size()),
- static_cast<int>(dot_u.size()));
- return -1;
- }
- if (type != POSITION_ONLY && type != POSITION_VELOCITY && type != POSITION_VELOCITY_ACCELERATION)
- {
- bt_id_error_message("invalid type %d\n", type);
- return -1;
- }
-
- // 1. update relative kinematics
- // 1.1 for revolute
- for (idArrayIdx i = 0; i < m_body_revolute_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_revolute_list[i]];
- mat33 T;
- bodyTParentFromAxisAngle(body.m_Jac_JR, q(body.m_q_index), &T);
- body.m_body_T_parent = T * body.m_body_T_parent_ref;
- if (type >= POSITION_VELOCITY)
- {
- body.m_body_ang_vel_rel = body.m_Jac_JR * u(body.m_q_index);
- }
- if (type >= POSITION_VELOCITY_ACCELERATION)
- {
- body.m_body_ang_acc_rel = body.m_Jac_JR * dot_u(body.m_q_index);
- }
- }
- // 1.2 for prismatic
- for (idArrayIdx i = 0; i < m_body_prismatic_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_prismatic_list[i]];
- body.m_parent_pos_parent_body =
- body.m_parent_pos_parent_body_ref + body.m_parent_Jac_JT * q(body.m_q_index);
- if (type >= POSITION_VELOCITY)
- {
- body.m_parent_vel_rel =
- body.m_body_T_parent_ref.transpose() * body.m_Jac_JT * u(body.m_q_index);
- }
- if (type >= POSITION_VELOCITY_ACCELERATION)
- {
- body.m_parent_acc_rel = body.m_parent_Jac_JT * dot_u(body.m_q_index);
- }
- }
- // 1.3 fixed joints: nothing to do
- // 1.4 6dof joints:
- for (idArrayIdx i = 0; i < m_body_floating_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_floating_list[i]];
-
- body.m_body_T_parent = transformZ(q(body.m_q_index + 2)) *
- transformY(q(body.m_q_index + 1)) *
- transformX(q(body.m_q_index));
- body.m_parent_pos_parent_body(0) = q(body.m_q_index + 3);
- body.m_parent_pos_parent_body(1) = q(body.m_q_index + 4);
- body.m_parent_pos_parent_body(2) = q(body.m_q_index + 5);
- body.m_parent_pos_parent_body = body.m_body_T_parent * body.m_parent_pos_parent_body;
-
- if (type >= POSITION_VELOCITY)
- {
- body.m_body_ang_vel_rel(0) = u(body.m_q_index + 0);
- body.m_body_ang_vel_rel(1) = u(body.m_q_index + 1);
- body.m_body_ang_vel_rel(2) = u(body.m_q_index + 2);
-
- body.m_parent_vel_rel(0) = u(body.m_q_index + 3);
- body.m_parent_vel_rel(1) = u(body.m_q_index + 4);
- body.m_parent_vel_rel(2) = u(body.m_q_index + 5);
-
- body.m_parent_vel_rel = body.m_body_T_parent.transpose() * body.m_parent_vel_rel;
- }
- if (type >= POSITION_VELOCITY_ACCELERATION)
- {
- body.m_body_ang_acc_rel(0) = dot_u(body.m_q_index + 0);
- body.m_body_ang_acc_rel(1) = dot_u(body.m_q_index + 1);
- body.m_body_ang_acc_rel(2) = dot_u(body.m_q_index + 2);
-
- body.m_parent_acc_rel(0) = dot_u(body.m_q_index + 3);
- body.m_parent_acc_rel(1) = dot_u(body.m_q_index + 4);
- body.m_parent_acc_rel(2) = dot_u(body.m_q_index + 5);
-
- body.m_parent_acc_rel = body.m_body_T_parent.transpose() * body.m_parent_acc_rel;
- }
- }
-
- for (idArrayIdx i = 0; i < m_body_spherical_list.size(); i++)
- {
- //todo: review
- RigidBody &body = m_body_list[m_body_spherical_list[i]];
-
- mat33 T;
-
- T = transformX(q(body.m_q_index)) *
- transformY(q(body.m_q_index + 1)) *
- transformZ(q(body.m_q_index + 2));
- body.m_body_T_parent = T * body.m_body_T_parent_ref;
-
- body.m_parent_pos_parent_body(0)=0;
- body.m_parent_pos_parent_body(1)=0;
- body.m_parent_pos_parent_body(2)=0;
-
- body.m_parent_pos_parent_body = body.m_body_T_parent * body.m_parent_pos_parent_body;
-
- if (type >= POSITION_VELOCITY)
- {
- body.m_body_ang_vel_rel(0) = u(body.m_q_index + 0);
- body.m_body_ang_vel_rel(1) = u(body.m_q_index + 1);
- body.m_body_ang_vel_rel(2) = u(body.m_q_index + 2);
- body.m_parent_vel_rel = body.m_body_T_parent.transpose() * body.m_parent_vel_rel;
- }
- if (type >= POSITION_VELOCITY_ACCELERATION)
- {
- body.m_body_ang_acc_rel(0) = dot_u(body.m_q_index + 0);
- body.m_body_ang_acc_rel(1) = dot_u(body.m_q_index + 1);
- body.m_body_ang_acc_rel(2) = dot_u(body.m_q_index + 2);
- body.m_parent_acc_rel = body.m_body_T_parent.transpose() * body.m_parent_acc_rel;
- }
- }
-
- // 2. absolute kinematic quantities (vector valued)
- // NOTE: this should be optimized by specializing for different body types
- // (e.g., relative rotation is always zero for prismatic joints, etc.)
-
- // calculations for root body
- {
- RigidBody &body = m_body_list[0];
- // 3.1 update absolute positions and orientations:
- // will be required if we add force elements (eg springs between bodies,
- // or contacts)
- // not required right now, added here for debugging purposes
- body.m_body_pos = body.m_body_T_parent * body.m_parent_pos_parent_body;
- body.m_body_T_world = body.m_body_T_parent;
-
- if (type >= POSITION_VELOCITY)
- {
- // 3.2 update absolute velocities
- body.m_body_ang_vel = body.m_body_ang_vel_rel;
- body.m_body_vel = body.m_parent_vel_rel;
- }
- if (type >= POSITION_VELOCITY_ACCELERATION)
- {
- // 3.3 update absolute accelerations
- // NOTE: assumption: dot(J_JR) = 0; true here, but not for general joints
- body.m_body_ang_acc = body.m_body_ang_acc_rel;
- body.m_body_acc = body.m_body_T_parent * body.m_parent_acc_rel;
- // add gravitational acceleration to root body
- // this is an efficient way to add gravitational terms,
- // but it does mean that the kinematics are no longer
- // correct at the acceleration level
- // NOTE: To get correct acceleration kinematics, just set world_gravity to zero
- body.m_body_acc = body.m_body_acc - body.m_body_T_parent * m_world_gravity;
- }
- }
-
- for (idArrayIdx i = 1; i < m_body_list.size(); i++)
- {
- RigidBody &body = m_body_list[i];
- RigidBody &parent = m_body_list[m_parent_index[i]];
- // 2.1 update absolute positions and orientations:
- // will be required if we add force elements (eg springs between bodies,
- // or contacts) not required right now added here for debugging purposes
- body.m_body_pos =
- body.m_body_T_parent * (parent.m_body_pos + body.m_parent_pos_parent_body);
- body.m_body_T_world = body.m_body_T_parent * parent.m_body_T_world;
-
- if (type >= POSITION_VELOCITY)
- {
- // 2.2 update absolute velocities
- body.m_body_ang_vel =
- body.m_body_T_parent * parent.m_body_ang_vel + body.m_body_ang_vel_rel;
-
- body.m_body_vel =
- body.m_body_T_parent *
- (parent.m_body_vel + parent.m_body_ang_vel.cross(body.m_parent_pos_parent_body) +
- body.m_parent_vel_rel);
- }
- if (type >= POSITION_VELOCITY_ACCELERATION)
- {
- // 2.3 update absolute accelerations
- // NOTE: assumption: dot(J_JR) = 0; true here, but not for general joints
- body.m_body_ang_acc =
- body.m_body_T_parent * parent.m_body_ang_acc -
- body.m_body_ang_vel_rel.cross(body.m_body_T_parent * parent.m_body_ang_vel) +
- body.m_body_ang_acc_rel;
- body.m_body_acc =
- body.m_body_T_parent *
- (parent.m_body_acc + parent.m_body_ang_acc.cross(body.m_parent_pos_parent_body) +
- parent.m_body_ang_vel.cross(parent.m_body_ang_vel.cross(body.m_parent_pos_parent_body)) +
- 2.0 * parent.m_body_ang_vel.cross(body.m_parent_vel_rel) + body.m_parent_acc_rel);
- }
- }
-
- return 0;
-}
-
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
-
-void MultiBodyTree::MultiBodyImpl::addRelativeJacobianComponent(RigidBody &body)
-{
- const int &idx = body.m_q_index;
- switch (body.m_joint_type)
- {
- case FIXED:
- break;
- case REVOLUTE:
- setMat3xElem(0, idx, body.m_Jac_JR(0), &body.m_body_Jac_R);
- setMat3xElem(1, idx, body.m_Jac_JR(1), &body.m_body_Jac_R);
- setMat3xElem(2, idx, body.m_Jac_JR(2), &body.m_body_Jac_R);
- break;
- case PRISMATIC:
- setMat3xElem(0, idx, body.m_body_T_parent_ref(0, 0) * body.m_Jac_JT(0) + body.m_body_T_parent_ref(1, 0) * body.m_Jac_JT(1) + body.m_body_T_parent_ref(2, 0) * body.m_Jac_JT(2),
- &body.m_body_Jac_T);
- setMat3xElem(1, idx, body.m_body_T_parent_ref(0, 1) * body.m_Jac_JT(0) + body.m_body_T_parent_ref(1, 1) * body.m_Jac_JT(1) + body.m_body_T_parent_ref(2, 1) * body.m_Jac_JT(2),
- &body.m_body_Jac_T);
- setMat3xElem(2, idx, body.m_body_T_parent_ref(0, 2) * body.m_Jac_JT(0) + body.m_body_T_parent_ref(1, 2) * body.m_Jac_JT(1) + body.m_body_T_parent_ref(2, 2) * body.m_Jac_JT(2),
- &body.m_body_Jac_T);
- break;
- case FLOATING:
- setMat3xElem(0, idx + 0, 1.0, &body.m_body_Jac_R);
- setMat3xElem(1, idx + 1, 1.0, &body.m_body_Jac_R);
- setMat3xElem(2, idx + 2, 1.0, &body.m_body_Jac_R);
- // body_Jac_T = body_T_parent.transpose();
- setMat3xElem(0, idx + 3, body.m_body_T_parent(0, 0), &body.m_body_Jac_T);
- setMat3xElem(0, idx + 4, body.m_body_T_parent(1, 0), &body.m_body_Jac_T);
- setMat3xElem(0, idx + 5, body.m_body_T_parent(2, 0), &body.m_body_Jac_T);
-
- setMat3xElem(1, idx + 3, body.m_body_T_parent(0, 1), &body.m_body_Jac_T);
- setMat3xElem(1, idx + 4, body.m_body_T_parent(1, 1), &body.m_body_Jac_T);
- setMat3xElem(1, idx + 5, body.m_body_T_parent(2, 1), &body.m_body_Jac_T);
-
- setMat3xElem(2, idx + 3, body.m_body_T_parent(0, 2), &body.m_body_Jac_T);
- setMat3xElem(2, idx + 4, body.m_body_T_parent(1, 2), &body.m_body_Jac_T);
- setMat3xElem(2, idx + 5, body.m_body_T_parent(2, 2), &body.m_body_Jac_T);
-
- break;
- case SPHERICAL:
- //todo: review
- setMat3xElem(0, idx + 0, 1.0, &body.m_body_Jac_R);
- setMat3xElem(1, idx + 1, 1.0, &body.m_body_Jac_R);
- setMat3xElem(2, idx + 2, 1.0, &body.m_body_Jac_R);
- break;
- }
-}
-
-int MultiBodyTree::MultiBodyImpl::calculateJacobians(const vecx &q, const vecx &u, const KinUpdateType type)
-{
- if (q.size() != m_num_dofs || u.size() != m_num_dofs)
- {
- bt_id_error_message(
- "wrong vector dimension. system has %d DOFs,\n"
- "but dim(q)= %d, dim(u)= %d\n",
- m_num_dofs, static_cast<int>(q.size()), static_cast<int>(u.size()));
- return -1;
- }
- if (type != POSITION_ONLY && type != POSITION_VELOCITY)
- {
- bt_id_error_message("invalid type %d\n", type);
- return -1;
- }
-
- addRelativeJacobianComponent(m_body_list[0]);
- for (idArrayIdx i = 1; i < m_body_list.size(); i++)
- {
- RigidBody &body = m_body_list[i];
- RigidBody &parent = m_body_list[m_parent_index[i]];
-
- mul(body.m_body_T_parent, parent.m_body_Jac_R, &body.m_body_Jac_R);
- body.m_body_Jac_T = parent.m_body_Jac_T;
- mul(tildeOperator(body.m_parent_pos_parent_body), parent.m_body_Jac_R, &m_m3x);
- sub(body.m_body_Jac_T, m_m3x, &body.m_body_Jac_T);
-
- addRelativeJacobianComponent(body);
- mul(body.m_body_T_parent, body.m_body_Jac_T, &body.m_body_Jac_T);
-
- if (type >= POSITION_VELOCITY)
- {
- body.m_body_dot_Jac_R_u = body.m_body_T_parent * parent.m_body_dot_Jac_R_u -
- body.m_body_ang_vel_rel.cross(body.m_body_T_parent * parent.m_body_ang_vel);
- body.m_body_dot_Jac_T_u = body.m_body_T_parent *
- (parent.m_body_dot_Jac_T_u + parent.m_body_dot_Jac_R_u.cross(body.m_parent_pos_parent_body) +
- parent.m_body_ang_vel.cross(parent.m_body_ang_vel.cross(body.m_parent_pos_parent_body)) +
- 2.0 * parent.m_body_ang_vel.cross(body.m_parent_vel_rel));
- }
- }
- return 0;
-}
-#endif
-
-static inline void setThreeDoFJacobians(const int dof, vec3 &Jac_JR, vec3 &Jac_JT)
-{
- switch (dof)
- {
- // rotational part
- case 0:
- Jac_JR(0) = 1;
- Jac_JR(1) = 0;
- Jac_JR(2) = 0;
- setZero(Jac_JT);
- break;
- case 1:
- Jac_JR(0) = 0;
- Jac_JR(1) = 1;
- Jac_JR(2) = 0;
- setZero(Jac_JT);
- break;
- case 2:
- Jac_JR(0) = 0;
- Jac_JR(1) = 0;
- Jac_JR(2) = 1;
- setZero(Jac_JT);
- break;
- }
-}
-
-static inline void setSixDoFJacobians(const int dof, vec3 &Jac_JR, vec3 &Jac_JT)
-{
- switch (dof)
- {
- // rotational part
- case 0:
- Jac_JR(0) = 1;
- Jac_JR(1) = 0;
- Jac_JR(2) = 0;
- setZero(Jac_JT);
- break;
- case 1:
- Jac_JR(0) = 0;
- Jac_JR(1) = 1;
- Jac_JR(2) = 0;
- setZero(Jac_JT);
- break;
- case 2:
- Jac_JR(0) = 0;
- Jac_JR(1) = 0;
- Jac_JR(2) = 1;
- setZero(Jac_JT);
- break;
- // translational part
- case 3:
- setZero(Jac_JR);
- Jac_JT(0) = 1;
- Jac_JT(1) = 0;
- Jac_JT(2) = 0;
- break;
- case 4:
- setZero(Jac_JR);
- Jac_JT(0) = 0;
- Jac_JT(1) = 1;
- Jac_JT(2) = 0;
- break;
- case 5:
- setZero(Jac_JR);
- Jac_JT(0) = 0;
- Jac_JT(1) = 0;
- Jac_JT(2) = 1;
- break;
- }
-}
-
-static inline int jointNumDoFs(const JointType &type)
-{
- switch (type)
- {
- case FIXED:
- return 0;
- case REVOLUTE:
- case PRISMATIC:
- return 1;
- case FLOATING:
- return 6;
- case SPHERICAL:
- return 3;
- }
- // this should never happen
- bt_id_error_message("invalid joint type\n");
- // TODO add configurable abort/crash function
- abort();
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::calculateMassMatrix(const vecx &q, const bool update_kinematics,
- const bool initialize_matrix,
- const bool set_lower_triangular_matrix,
- matxx *mass_matrix)
-{
- // This calculates the joint space mass matrix for the multibody system.
- // The algorithm is essentially an implementation of "method 3"
- // in "Efficient Dynamic Simulation of Robotic Mechanisms" (Walker and Orin, 1982)
- // (Later named "Composite Rigid Body Algorithm" by Featherstone).
- //
- // This implementation, however, handles branched systems and uses a formulation centered
- // on the origin of the body-fixed frame to avoid re-computing various quantities at the com.
-
- if (q.size() != m_num_dofs || mass_matrix->rows() != m_num_dofs ||
- mass_matrix->cols() != m_num_dofs)
- {
- bt_id_error_message(
- "Dimension error. System has %d DOFs,\n"
- "but dim(q)= %d, dim(mass_matrix)= %d x %d\n",
- m_num_dofs, static_cast<int>(q.size()), static_cast<int>(mass_matrix->rows()),
- static_cast<int>(mass_matrix->cols()));
- return -1;
- }
-
- // TODO add optimized zeroing function?
- if (initialize_matrix)
- {
- for (int i = 0; i < m_num_dofs; i++)
- {
- for (int j = 0; j < m_num_dofs; j++)
- {
- setMatxxElem(i, j, 0.0, mass_matrix);
- }
- }
- }
-
- if (update_kinematics)
- {
- // 1. update relative kinematics
- // 1.1 for revolute joints
- for (idArrayIdx i = 0; i < m_body_revolute_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_revolute_list[i]];
- // from reference orientation (q=0) of body-fixed frame to current orientation
- mat33 body_T_body_ref;
- bodyTParentFromAxisAngle(body.m_Jac_JR, q(body.m_q_index), &body_T_body_ref);
- body.m_body_T_parent = body_T_body_ref * body.m_body_T_parent_ref;
- }
- // 1.2 for prismatic joints
- for (idArrayIdx i = 0; i < m_body_prismatic_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_prismatic_list[i]];
- // body.m_body_T_parent= fixed
- body.m_parent_pos_parent_body =
- body.m_parent_pos_parent_body_ref + body.m_parent_Jac_JT * q(body.m_q_index);
- }
- // 1.3 fixed joints: nothing to do
- // 1.4 6dof joints:
- for (idArrayIdx i = 0; i < m_body_floating_list.size(); i++)
- {
- RigidBody &body = m_body_list[m_body_floating_list[i]];
-
- body.m_body_T_parent = transformZ(q(body.m_q_index + 2)) *
- transformY(q(body.m_q_index + 1)) *
- transformX(q(body.m_q_index));
- body.m_parent_pos_parent_body(0) = q(body.m_q_index + 3);
- body.m_parent_pos_parent_body(1) = q(body.m_q_index + 4);
- body.m_parent_pos_parent_body(2) = q(body.m_q_index + 5);
-
- body.m_parent_pos_parent_body = body.m_body_T_parent * body.m_parent_pos_parent_body;
- }
-
- for (idArrayIdx i = 0; i < m_body_spherical_list.size(); i++)
- {
- //todo: review
- RigidBody &body = m_body_list[m_body_spherical_list[i]];
-
- mat33 T;
-
- T = transformX(q(body.m_q_index)) *
- transformY(q(body.m_q_index + 1)) *
- transformZ(q(body.m_q_index + 2));
- body.m_body_T_parent = T * body.m_body_T_parent_ref;
-
- body.m_parent_pos_parent_body(0)=0;
- body.m_parent_pos_parent_body(1)=0;
- body.m_parent_pos_parent_body(2)=0;
-
- body.m_parent_pos_parent_body = body.m_body_T_parent * body.m_parent_pos_parent_body;
- }
- }
- for (int i = m_body_list.size() - 1; i >= 0; i--)
- {
- RigidBody &body = m_body_list[i];
- // calculate mass, center of mass and inertia of "composite rigid body",
- // ie, sub-tree starting at current body
- body.m_subtree_mass = body.m_mass;
- body.m_body_subtree_mass_com = body.m_body_mass_com;
- body.m_body_subtree_I_body = body.m_body_I_body;
-
- for (idArrayIdx c = 0; c < m_child_indices[i].size(); c++)
- {
- RigidBody &child = m_body_list[m_child_indices[i][c]];
- mat33 body_T_child = child.m_body_T_parent.transpose();
-
- body.m_subtree_mass += child.m_subtree_mass;
- body.m_body_subtree_mass_com += body_T_child * child.m_body_subtree_mass_com +
- child.m_parent_pos_parent_body * child.m_subtree_mass;
- body.m_body_subtree_I_body +=
- body_T_child * child.m_body_subtree_I_body * child.m_body_T_parent;
-
- if (child.m_subtree_mass > 0)
- {
- // Shift the reference point for the child subtree inertia using the
- // Huygens-Steiner ("parallel axis") theorem.
- // (First shift from child origin to child com, then from there to this body's
- // origin)
- vec3 r_com = body_T_child * child.m_body_subtree_mass_com / child.m_subtree_mass;
- mat33 tilde_r_child_com = tildeOperator(r_com);
- mat33 tilde_r_body_com = tildeOperator(child.m_parent_pos_parent_body + r_com);
- body.m_body_subtree_I_body +=
- child.m_subtree_mass *
- (tilde_r_child_com * tilde_r_child_com - tilde_r_body_com * tilde_r_body_com);
- }
- }
- }
-
- for (int i = m_body_list.size() - 1; i >= 0; i--)
- {
- const RigidBody &body = m_body_list[i];
-
- // determine DoF-range for body
- const int q_index_min = body.m_q_index;
- const int q_index_max = q_index_min + jointNumDoFs(body.m_joint_type) - 1;
- // loop over the DoFs used by this body
- // local joint jacobians (ok as is for 1-DoF joints)
- vec3 Jac_JR = body.m_Jac_JR;
- vec3 Jac_JT = body.m_Jac_JT;
- for (int col = q_index_max; col >= q_index_min; col--)
- {
- // set jacobians for 6-DoF joints
- if (FLOATING == body.m_joint_type)
- {
- setSixDoFJacobians(col - q_index_min, Jac_JR, Jac_JT);
- }
- if (SPHERICAL == body.m_joint_type)
- {
- //todo: review
- setThreeDoFJacobians(col - q_index_min, Jac_JR, Jac_JT);
- }
-
- vec3 body_eom_rot =
- body.m_body_subtree_I_body * Jac_JR + body.m_body_subtree_mass_com.cross(Jac_JT);
- vec3 body_eom_trans =
- body.m_subtree_mass * Jac_JT - body.m_body_subtree_mass_com.cross(Jac_JR);
- setMatxxElem(col, col, Jac_JR.dot(body_eom_rot) + Jac_JT.dot(body_eom_trans), mass_matrix);
-
- // rest of the mass matrix column upwards
- {
- // 1. for multi-dof joints, rest of the dofs of this body
- for (int row = col - 1; row >= q_index_min; row--)
- {
- if (SPHERICAL == body.m_joint_type)
- {
- //todo: review
- setThreeDoFJacobians(row - q_index_min, Jac_JR, Jac_JT);
- const double Mrc = Jac_JR.dot(body_eom_rot) + Jac_JT.dot(body_eom_trans);
- setMatxxElem(col, row, Mrc, mass_matrix);
- }
- if (FLOATING == body.m_joint_type)
- {
- setSixDoFJacobians(row - q_index_min, Jac_JR, Jac_JT);
- const double Mrc = Jac_JR.dot(body_eom_rot) + Jac_JT.dot(body_eom_trans);
- setMatxxElem(col, row, Mrc, mass_matrix);
- }
- }
- // 2. ancestor dofs
- int child_idx = i;
- int parent_idx = m_parent_index[i];
- while (parent_idx >= 0)
- {
- const RigidBody &child_body = m_body_list[child_idx];
- const RigidBody &parent_body = m_body_list[parent_idx];
-
- const mat33 parent_T_child = child_body.m_body_T_parent.transpose();
- body_eom_rot = parent_T_child * body_eom_rot;
- body_eom_trans = parent_T_child * body_eom_trans;
- body_eom_rot += child_body.m_parent_pos_parent_body.cross(body_eom_trans);
-
- const int parent_body_q_index_min = parent_body.m_q_index;
- const int parent_body_q_index_max =
- parent_body_q_index_min + jointNumDoFs(parent_body.m_joint_type) - 1;
- vec3 Jac_JR = parent_body.m_Jac_JR;
- vec3 Jac_JT = parent_body.m_Jac_JT;
- for (int row = parent_body_q_index_max; row >= parent_body_q_index_min; row--)
- {
- if (SPHERICAL == parent_body.m_joint_type)
- {
- //todo: review
- setThreeDoFJacobians(row - parent_body_q_index_min, Jac_JR, Jac_JT);
- }
- // set jacobians for 6-DoF joints
- if (FLOATING == parent_body.m_joint_type)
- {
- setSixDoFJacobians(row - parent_body_q_index_min, Jac_JR, Jac_JT);
- }
- const double Mrc = Jac_JR.dot(body_eom_rot) + Jac_JT.dot(body_eom_trans);
- setMatxxElem(col, row, Mrc, mass_matrix);
- }
-
- child_idx = parent_idx;
- parent_idx = m_parent_index[child_idx];
- }
- }
- }
- }
-
- if (set_lower_triangular_matrix)
- {
- for (int col = 0; col < m_num_dofs; col++)
- {
- for (int row = 0; row < col; row++)
- {
- setMatxxElem(row, col, (*mass_matrix)(col, row), mass_matrix);
- }
- }
- }
- return 0;
-}
-
-// utility macro
-#define CHECK_IF_BODY_INDEX_IS_VALID(index) \
- do \
- { \
- if (index < 0 || index >= m_num_bodies) \
- { \
- bt_id_error_message("invalid index %d (num_bodies= %d)\n", index, m_num_bodies); \
- return -1; \
- } \
- } while (0)
-
-int MultiBodyTree::MultiBodyImpl::getParentIndex(const int body_index, int *p)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *p = m_parent_index[body_index];
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getUserInt(const int body_index, int *user_int) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *user_int = m_user_int[body_index];
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getUserPtr(const int body_index, void **user_ptr) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *user_ptr = m_user_ptr[body_index];
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::setUserInt(const int body_index, const int user_int)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_user_int[body_index] = user_int;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::setUserPtr(const int body_index, void *const user_ptr)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_user_ptr[body_index] = user_ptr;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyOrigin(int body_index, vec3 *world_origin) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_origin = body.m_body_T_world.transpose() * body.m_body_pos;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyCoM(int body_index, vec3 *world_com) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- if (body.m_mass > 0)
- {
- *world_com = body.m_body_T_world.transpose() *
- (body.m_body_pos + body.m_body_mass_com / body.m_mass);
- }
- else
- {
- *world_com = body.m_body_T_world.transpose() * (body.m_body_pos);
- }
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyTransform(int body_index, mat33 *world_T_body) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_T_body = body.m_body_T_world.transpose();
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getBodyAngularVelocity(int body_index, vec3 *world_omega) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_omega = body.m_body_T_world.transpose() * body.m_body_ang_vel;
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getBodyLinearVelocity(int body_index,
- vec3 *world_velocity) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_velocity = body.m_body_T_world.transpose() * body.m_body_vel;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyLinearVelocityCoM(int body_index,
- vec3 *world_velocity) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- vec3 com;
- if (body.m_mass > 0)
- {
- com = body.m_body_mass_com / body.m_mass;
- }
- else
- {
- com(0) = 0;
- com(1) = 0;
- com(2) = 0;
- }
-
- *world_velocity =
- body.m_body_T_world.transpose() * (body.m_body_vel + body.m_body_ang_vel.cross(com));
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyAngularAcceleration(int body_index,
- vec3 *world_dot_omega) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_dot_omega = body.m_body_T_world.transpose() * body.m_body_ang_acc;
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getBodyLinearAcceleration(int body_index,
- vec3 *world_acceleration) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_acceleration = body.m_body_T_world.transpose() * body.m_body_acc;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getJointType(const int body_index, JointType *joint_type) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *joint_type = m_body_list[body_index].m_joint_type;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getJointTypeStr(const int body_index,
- const char **joint_type) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *joint_type = jointTypeToString(m_body_list[body_index].m_joint_type);
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getParentRParentBodyRef(const int body_index, vec3 *r) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *r = m_body_list[body_index].m_parent_pos_parent_body_ref;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyTParentRef(const int body_index, mat33 *T) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *T = m_body_list[body_index].m_body_T_parent_ref;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyAxisOfMotion(const int body_index, vec3 *axis) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- if (m_body_list[body_index].m_joint_type == REVOLUTE)
- {
- *axis = m_body_list[body_index].m_Jac_JR;
- return 0;
- }
- if (m_body_list[body_index].m_joint_type == PRISMATIC)
- {
- *axis = m_body_list[body_index].m_Jac_JT;
- return 0;
- }
- setZero(*axis);
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getDoFOffset(const int body_index, int *q_index) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *q_index = m_body_list[body_index].m_q_index;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::setBodyMass(const int body_index, const idScalar mass)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_body_list[body_index].m_mass = mass;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::setBodyFirstMassMoment(const int body_index,
- const vec3 &first_mass_moment)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_body_list[body_index].m_body_mass_com = first_mass_moment;
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::setBodySecondMassMoment(const int body_index,
- const mat33 &second_mass_moment)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_body_list[body_index].m_body_I_body = second_mass_moment;
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getBodyMass(const int body_index, idScalar *mass) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *mass = m_body_list[body_index].m_mass;
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getBodyFirstMassMoment(const int body_index,
- vec3 *first_mass_moment) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *first_mass_moment = m_body_list[body_index].m_body_mass_com;
- return 0;
-}
-int MultiBodyTree::MultiBodyImpl::getBodySecondMassMoment(const int body_index,
- mat33 *second_mass_moment) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- *second_mass_moment = m_body_list[body_index].m_body_I_body;
- return 0;
-}
-
-void MultiBodyTree::MultiBodyImpl::clearAllUserForcesAndMoments()
-{
- for (int index = 0; index < m_num_bodies; index++)
- {
- RigidBody &body = m_body_list[index];
- setZero(body.m_body_force_user);
- setZero(body.m_body_moment_user);
- }
-}
-
-int MultiBodyTree::MultiBodyImpl::addUserForce(const int body_index, const vec3 &body_force)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_body_list[body_index].m_body_force_user += body_force;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::addUserMoment(const int body_index, const vec3 &body_moment)
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- m_body_list[body_index].m_body_moment_user += body_moment;
- return 0;
-}
-
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
-int MultiBodyTree::MultiBodyImpl::getBodyDotJacobianTransU(const int body_index, vec3 *world_dot_jac_trans_u) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_dot_jac_trans_u = body.m_body_T_world.transpose() * body.m_body_dot_Jac_T_u;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyDotJacobianRotU(const int body_index, vec3 *world_dot_jac_rot_u) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- *world_dot_jac_rot_u = body.m_body_T_world.transpose() * body.m_body_dot_Jac_R_u;
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyJacobianTrans(const int body_index, mat3x *world_jac_trans) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- mul(body.m_body_T_world.transpose(), body.m_body_Jac_T, world_jac_trans);
- return 0;
-}
-
-int MultiBodyTree::MultiBodyImpl::getBodyJacobianRot(const int body_index, mat3x *world_jac_rot) const
-{
- CHECK_IF_BODY_INDEX_IS_VALID(body_index);
- const RigidBody &body = m_body_list[body_index];
- mul(body.m_body_T_world.transpose(), body.m_body_Jac_R, world_jac_rot);
- return 0;
-}
-
-#endif
-} // namespace btInverseDynamics
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.hpp b/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.hpp
deleted file mode 100644
index eabdbe161b..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeImpl.hpp
+++ /dev/null
@@ -1,288 +0,0 @@
-// The structs and classes defined here provide a basic inverse fynamics implementation used
-// by MultiBodyTree
-// User interaction should be through MultiBodyTree
-
-#ifndef MULTI_BODY_REFERENCE_IMPL_HPP_
-#define MULTI_BODY_REFERENCE_IMPL_HPP_
-
-#include "../IDConfig.hpp"
-#include "../MultiBodyTree.hpp"
-
-namespace btInverseDynamics
-{
-/// Structure for for rigid body mass properties, connectivity and kinematic state
-/// all vectors and matrices are in body-fixed frame, if not indicated otherwise.
-/// The body-fixed frame is located in the joint connecting the body to its parent.
-struct RigidBody
-{
- ID_DECLARE_ALIGNED_ALLOCATOR();
- // 1 Inertial properties
- /// Mass
- idScalar m_mass;
- /// Mass times center of gravity in body-fixed frame
- vec3 m_body_mass_com;
- /// Moment of inertia w.r.t. body-fixed frame
- mat33 m_body_I_body;
-
- // 2 dynamic properties
- /// Left-hand side of the body equation of motion, translational part
- vec3 m_eom_lhs_translational;
- /// Left-hand side of the body equation of motion, rotational part
- vec3 m_eom_lhs_rotational;
- /// Force acting at the joint when the body is cut from its parent;
- /// includes impressed joint force in J_JT direction,
- /// as well as constraint force,
- /// in body-fixed frame
- vec3 m_force_at_joint;
- /// Moment acting at the joint when the body is cut from its parent;
- /// includes impressed joint moment in J_JR direction, and constraint moment
- /// in body-fixed frame
- vec3 m_moment_at_joint;
- /// external (user provided) force acting at the body-fixed frame's origin, written in that
- /// frame
- vec3 m_body_force_user;
- /// external (user provided) moment acting at the body-fixed frame's origin, written in that
- /// frame
- vec3 m_body_moment_user;
- // 3 absolute kinematic properties
- /// Position of body-fixed frame relative to world frame
- /// this is currently only for debugging purposes
- vec3 m_body_pos;
- /// Absolute velocity of body-fixed frame
- vec3 m_body_vel;
- /// Absolute acceleration of body-fixed frame
- /// NOTE: if gravitational acceleration is not zero, this is the accelation PLUS gravitational
- /// acceleration!
- vec3 m_body_acc;
- /// Absolute angular velocity
- vec3 m_body_ang_vel;
- /// Absolute angular acceleration
- /// NOTE: if gravitational acceleration is not zero, this is the accelation PLUS gravitational
- /// acceleration!
- vec3 m_body_ang_acc;
-
- // 4 relative kinematic properties.
- // these are in the parent body frame
- /// Transform from world to body-fixed frame;
- /// this is currently only for debugging purposes
- mat33 m_body_T_world;
- /// Transform from parent to body-fixed frame
- mat33 m_body_T_parent;
- /// Vector from parent to child frame in parent frame
- vec3 m_parent_pos_parent_body;
- /// Relative angular velocity
- vec3 m_body_ang_vel_rel;
- /// Relative linear velocity
- vec3 m_parent_vel_rel;
- /// Relative angular acceleration
- vec3 m_body_ang_acc_rel;
- /// Relative linear acceleration
- vec3 m_parent_acc_rel;
-
- // 5 Data describing the joint type and geometry
- /// Type of joint
- JointType m_joint_type;
- /// Position of joint frame (body-fixed frame at q=0) relative to the parent frame
- /// Components are in body-fixed frame of the parent
- vec3 m_parent_pos_parent_body_ref;
- /// Orientation of joint frame (body-fixed frame at q=0) relative to the parent frame
- mat33 m_body_T_parent_ref;
- /// Joint rotational Jacobian, ie, the partial derivative of the body-fixed frames absolute
- /// angular velocity w.r.t. the generalized velocity of this body's relative degree of freedom.
- /// For revolute joints this is the joint axis, for prismatic joints it is a null matrix.
- /// (NOTE: dimensions will have to be dynamic for additional joint types!)
- vec3 m_Jac_JR;
- /// Joint translational Jacobian, ie, the partial derivative of the body-fixed frames absolute
- /// linear velocity w.r.t. the generalized velocity of this body's relative degree of freedom.
- /// For prismatic joints this is the joint axis, for revolute joints it is a null matrix.
- /// (NOTE: dimensions might have to be dynamic for additional joint types!)
- vec3 m_Jac_JT;
- /// m_Jac_JT in the parent frame, it, m_body_T_parent_ref.transpose()*m_Jac_JT
- vec3 m_parent_Jac_JT;
- /// Start of index range for the position degree(s) of freedom describing this body's motion
- /// relative to
- /// its parent. The indices are wrt the multibody system's q-vector of generalized coordinates.
- int m_q_index;
-
- // 6 Scratch data for mass matrix computation using "composite rigid body algorithm"
- /// mass of the subtree rooted in this body
- idScalar m_subtree_mass;
- /// center of mass * mass for subtree rooted in this body, in body-fixed frame
- vec3 m_body_subtree_mass_com;
- /// moment of inertia of subtree rooted in this body, w.r.t. body origin, in body-fixed frame
- mat33 m_body_subtree_I_body;
-
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- /// translational jacobian in body-fixed frame d(m_body_vel)/du
- mat3x m_body_Jac_T;
- /// rotationsl jacobian in body-fixed frame d(m_body_ang_vel)/du
- mat3x m_body_Jac_R;
- /// components of linear acceleration depending on u
- /// (same as is d(m_Jac_T)/dt*u)
- vec3 m_body_dot_Jac_T_u;
- /// components of angular acceleration depending on u
- /// (same as is d(m_Jac_T)/dt*u)
- vec3 m_body_dot_Jac_R_u;
-#endif
-};
-
-/// The MBS implements a tree structured multibody system
-class MultiBodyTree::MultiBodyImpl
-{
- friend class MultiBodyTree;
-
-public:
- ID_DECLARE_ALIGNED_ALLOCATOR();
-
- enum KinUpdateType
- {
- POSITION_ONLY,
- POSITION_VELOCITY,
- POSITION_VELOCITY_ACCELERATION
- };
-
- /// constructor
- /// @param num_bodies the number of bodies in the system
- /// @param num_dofs number of degrees of freedom in the system
- MultiBodyImpl(int num_bodies_, int num_dofs_);
-
- /// \copydoc MultiBodyTree::calculateInverseDynamics
- int calculateInverseDynamics(const vecx& q, const vecx& u, const vecx& dot_u,
- vecx* joint_forces);
- ///\copydoc MultiBodyTree::calculateMassMatrix
- int calculateMassMatrix(const vecx& q, const bool update_kinematics,
- const bool initialize_matrix, const bool set_lower_triangular_matrix,
- matxx* mass_matrix);
- /// calculate kinematics (vector quantities)
- /// Depending on type, update positions only, positions & velocities, or positions, velocities
- /// and accelerations.
- int calculateKinematics(const vecx& q, const vecx& u, const vecx& dot_u, const KinUpdateType type);
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- /// calculate jacobians and (if type == POSITION_VELOCITY), also velocity-dependent accelration terms.
- int calculateJacobians(const vecx& q, const vecx& u, const KinUpdateType type);
- /// \copydoc MultiBodyTree::getBodyDotJacobianTransU
- int getBodyDotJacobianTransU(const int body_index, vec3* world_dot_jac_trans_u) const;
- /// \copydoc MultiBodyTree::getBodyDotJacobianRotU
- int getBodyDotJacobianRotU(const int body_index, vec3* world_dot_jac_rot_u) const;
- /// \copydoc MultiBodyTree::getBodyJacobianTrans
- int getBodyJacobianTrans(const int body_index, mat3x* world_jac_trans) const;
- /// \copydoc MultiBodyTree::getBodyJacobianRot
- int getBodyJacobianRot(const int body_index, mat3x* world_jac_rot) const;
- /// Add relative Jacobian component from motion relative to parent body
- /// @param body the body to add the Jacobian component for
- void addRelativeJacobianComponent(RigidBody& body);
-#endif
- /// generate additional index sets from the parent_index array
- /// @return -1 on error, 0 on success
- int generateIndexSets();
- /// set gravity acceleration in world frame
- /// @param gravity gravity vector in the world frame
- /// @return 0 on success, -1 on error
- int setGravityInWorldFrame(const vec3& gravity);
- /// pretty print tree
- void printTree();
- /// print tree data
- void printTreeData();
- /// initialize fixed data
- void calculateStaticData();
- /// \copydoc MultiBodyTree::getBodyFrame
- int getBodyFrame(const int index, vec3* world_origin, mat33* body_T_world) const;
- /// \copydoc MultiBodyTree::getParentIndex
- int getParentIndex(const int body_index, int* m_parent_index);
- /// \copydoc MultiBodyTree::getJointType
- int getJointType(const int body_index, JointType* joint_type) const;
- /// \copydoc MultiBodyTree::getJointTypeStr
- int getJointTypeStr(const int body_index, const char** joint_type) const;
- /// \copydoc MultiBodyTree::getParentRParentBodyRef
- int getParentRParentBodyRef(const int body_index, vec3* r) const;
- /// \copydoc MultiBodyTree::getBodyTParentRef
- int getBodyTParentRef(const int body_index, mat33* T) const;
- /// \copydoc MultiBodyTree::getBodyAxisOfMotion
- int getBodyAxisOfMotion(const int body_index, vec3* axis) const;
- /// \copydoc MultiBodyTree:getDoFOffset
- int getDoFOffset(const int body_index, int* q_index) const;
- /// \copydoc MultiBodyTree::getBodyOrigin
- int getBodyOrigin(const int body_index, vec3* world_origin) const;
- /// \copydoc MultiBodyTree::getBodyCoM
- int getBodyCoM(const int body_index, vec3* world_com) const;
- /// \copydoc MultiBodyTree::getBodyTransform
- int getBodyTransform(const int body_index, mat33* world_T_body) const;
- /// \copydoc MultiBodyTree::getBodyAngularVelocity
- int getBodyAngularVelocity(const int body_index, vec3* world_omega) const;
- /// \copydoc MultiBodyTree::getBodyLinearVelocity
- int getBodyLinearVelocity(const int body_index, vec3* world_velocity) const;
- /// \copydoc MultiBodyTree::getBodyLinearVelocityCoM
- int getBodyLinearVelocityCoM(const int body_index, vec3* world_velocity) const;
- /// \copydoc MultiBodyTree::getBodyAngularAcceleration
- int getBodyAngularAcceleration(const int body_index, vec3* world_dot_omega) const;
- /// \copydoc MultiBodyTree::getBodyLinearAcceleration
- int getBodyLinearAcceleration(const int body_index, vec3* world_acceleration) const;
- /// \copydoc MultiBodyTree::getUserInt
- int getUserInt(const int body_index, int* user_int) const;
- /// \copydoc MultiBodyTree::getUserPtr
- int getUserPtr(const int body_index, void** user_ptr) const;
- /// \copydoc MultiBodyTree::setUserInt
- int setUserInt(const int body_index, const int user_int);
- /// \copydoc MultiBodyTree::setUserPtr
- int setUserPtr(const int body_index, void* const user_ptr);
- ///\copydoc MultiBodytTree::setBodyMass
- int setBodyMass(const int body_index, const idScalar mass);
- ///\copydoc MultiBodytTree::setBodyFirstMassMoment
- int setBodyFirstMassMoment(const int body_index, const vec3& first_mass_moment);
- ///\copydoc MultiBodytTree::setBodySecondMassMoment
- int setBodySecondMassMoment(const int body_index, const mat33& second_mass_moment);
- ///\copydoc MultiBodytTree::getBodyMass
- int getBodyMass(const int body_index, idScalar* mass) const;
- ///\copydoc MultiBodytTree::getBodyFirstMassMoment
- int getBodyFirstMassMoment(const int body_index, vec3* first_mass_moment) const;
- ///\copydoc MultiBodytTree::getBodySecondMassMoment
- int getBodySecondMassMoment(const int body_index, mat33* second_mass_moment) const;
- /// \copydoc MultiBodyTree::clearAllUserForcesAndMoments
- void clearAllUserForcesAndMoments();
- /// \copydoc MultiBodyTree::addUserForce
- int addUserForce(const int body_index, const vec3& body_force);
- /// \copydoc MultiBodyTree::addUserMoment
- int addUserMoment(const int body_index, const vec3& body_moment);
-
-private:
- // debug function. print tree structure to stdout
- void printTree(int index, int indentation);
- // get string representation of JointType (for debugging)
- const char* jointTypeToString(const JointType& type) const;
- // get number of degrees of freedom from joint type
- int bodyNumDoFs(const JointType& type) const;
- // number of bodies in the system
- int m_num_bodies;
- // number of degrees of freedom
- int m_num_dofs;
- // Gravitational acceleration (in world frame)
- vec3 m_world_gravity;
- // vector of bodies in the system
- // body 0 is used as an environment body and is allways fixed.
- // The bodies are ordered such that a parent body always has an index
- // smaller than its child.
- idArray<RigidBody>::type m_body_list;
- // Parent_index[i] is the index for i's parent body in body_list.
- // This fully describes the tree.
- idArray<int>::type m_parent_index;
- // child_indices[i] contains a vector of indices of
- // all children of the i-th body
- idArray<idArray<int>::type>::type m_child_indices;
- // Indices of rotary joints
- idArray<int>::type m_body_revolute_list;
- // Indices of prismatic joints
- idArray<int>::type m_body_prismatic_list;
- // Indices of floating joints
- idArray<int>::type m_body_floating_list;
- // Indices of spherical joints
- idArray<int>::type m_body_spherical_list;
- // a user-provided integer
- idArray<int>::type m_user_int;
- // a user-provided pointer
- idArray<void*>::type m_user_ptr;
-#if (defined BT_ID_HAVE_MAT3X) && (defined BT_ID_WITH_JACOBIANS)
- mat3x m_m3x;
-#endif
-};
-} // namespace btInverseDynamics
-#endif
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.cpp b/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.cpp
deleted file mode 100644
index a718db051e..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-#include "MultiBodyTreeInitCache.hpp"
-
-namespace btInverseDynamics
-{
-MultiBodyTree::InitCache::InitCache()
-{
- m_inertias.resize(0);
- m_joints.resize(0);
- m_num_dofs = 0;
- m_root_index = -1;
-}
-
-int MultiBodyTree::InitCache::addBody(const int body_index, const int parent_index,
- const JointType joint_type,
- const vec3& parent_r_parent_body_ref,
- const mat33& body_T_parent_ref,
- const vec3& body_axis_of_motion, const idScalar mass,
- const vec3& body_r_body_com, const mat33& body_I_body,
- const int user_int, void* user_ptr)
-{
- switch (joint_type)
- {
- case REVOLUTE:
- case PRISMATIC:
- m_num_dofs += 1;
- break;
- case FIXED:
- // does not add a degree of freedom
- // m_num_dofs+=0;
- break;
- case SPHERICAL:
- m_num_dofs += 3;
- break;
- case FLOATING:
- m_num_dofs += 6;
- break;
- default:
- bt_id_error_message("unknown joint type %d\n", joint_type);
- return -1;
- }
-
- if (-1 == parent_index)
- {
- if (m_root_index >= 0)
- {
- bt_id_error_message("trying to add body %d as root, but already added %d as root body\n",
- body_index, m_root_index);
- return -1;
- }
- m_root_index = body_index;
- }
-
- JointData joint;
- joint.m_child = body_index;
- joint.m_parent = parent_index;
- joint.m_type = joint_type;
- joint.m_parent_pos_parent_child_ref = parent_r_parent_body_ref;
- joint.m_child_T_parent_ref = body_T_parent_ref;
- joint.m_child_axis_of_motion = body_axis_of_motion;
-
- InertiaData body;
- body.m_mass = mass;
- body.m_body_pos_body_com = body_r_body_com;
- body.m_body_I_body = body_I_body;
-
- m_inertias.push_back(body);
- m_joints.push_back(joint);
- m_user_int.push_back(user_int);
- m_user_ptr.push_back(user_ptr);
- return 0;
-}
-int MultiBodyTree::InitCache::getInertiaData(const int index, InertiaData* inertia) const
-{
- if (index < 0 || index > static_cast<int>(m_inertias.size()))
- {
- bt_id_error_message("index out of range\n");
- return -1;
- }
-
- *inertia = m_inertias[index];
- return 0;
-}
-
-int MultiBodyTree::InitCache::getUserInt(const int index, int* user_int) const
-{
- if (index < 0 || index > static_cast<int>(m_user_int.size()))
- {
- bt_id_error_message("index out of range\n");
- return -1;
- }
- *user_int = m_user_int[index];
- return 0;
-}
-
-int MultiBodyTree::InitCache::getUserPtr(const int index, void** user_ptr) const
-{
- if (index < 0 || index > static_cast<int>(m_user_ptr.size()))
- {
- bt_id_error_message("index out of range\n");
- return -1;
- }
- *user_ptr = m_user_ptr[index];
- return 0;
-}
-
-int MultiBodyTree::InitCache::getJointData(const int index, JointData* joint) const
-{
- if (index < 0 || index > static_cast<int>(m_joints.size()))
- {
- bt_id_error_message("index out of range\n");
- return -1;
- }
- *joint = m_joints[index];
- return 0;
-}
-
-int MultiBodyTree::InitCache::buildIndexSets()
-{
- // NOTE: This function assumes that proper indices were provided
- // User2InternalIndex from utils can be used to facilitate this.
-
- m_parent_index.resize(numBodies());
- for (idArrayIdx j = 0; j < m_joints.size(); j++)
- {
- const JointData& joint = m_joints[j];
- m_parent_index[joint.m_child] = joint.m_parent;
- }
-
- return 0;
-}
-} // namespace btInverseDynamics
diff --git a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.hpp b/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.hpp
deleted file mode 100644
index dbdb3ff604..0000000000
--- a/thirdparty/bullet/BulletInverseDynamics/details/MultiBodyTreeInitCache.hpp
+++ /dev/null
@@ -1,113 +0,0 @@
-#ifndef MULTIBODYTREEINITCACHE_HPP_
-#define MULTIBODYTREEINITCACHE_HPP_
-
-#include "../IDConfig.hpp"
-#include "../IDMath.hpp"
-#include "../MultiBodyTree.hpp"
-
-namespace btInverseDynamics
-{
-/// Mass properties of a rigid body
-struct InertiaData
-{
- ID_DECLARE_ALIGNED_ALLOCATOR();
-
- /// mass
- idScalar m_mass;
- /// vector from body-fixed frame to center of mass,
- /// in body-fixed frame, multiplied by the mass
- vec3 m_body_pos_body_com;
- /// moment of inertia w.r.t. the origin of the body-fixed
- /// frame, represented in that frame
- mat33 m_body_I_body;
-};
-
-/// Joint properties
-struct JointData
-{
- ID_DECLARE_ALIGNED_ALLOCATOR();
-
- /// type of joint
- JointType m_type;
- /// index of parent body
- int m_parent;
- /// index of child body
- int m_child;
- /// vector from parent's body-fixed frame to child's body-fixed
- /// frame for q=0, written in the parent's body fixed frame
- vec3 m_parent_pos_parent_child_ref;
- /// Transform matrix converting vectors written in the parent's frame
- /// into vectors written in the child's frame for q=0
- /// ie, child_vector = child_T_parent_ref * parent_vector;
- mat33 m_child_T_parent_ref;
- /// Axis of motion for 1 degree-of-freedom joints,
- /// written in the child's frame
- /// For revolute joints, the q-value is positive for a positive
- /// rotation about this axis.
- /// For prismatic joints, the q-value is positive for a positive
- /// translation is this direction.
- vec3 m_child_axis_of_motion;
-};
-
-/// Data structure to store data passed by the user.
-/// This is used in MultiBodyTree::finalize to build internal data structures.
-class MultiBodyTree::InitCache
-{
-public:
- ID_DECLARE_ALIGNED_ALLOCATOR();
- /// constructor
- InitCache();
- ///\copydoc MultiBodyTree::addBody
- int addBody(const int body_index, const int parent_index, const JointType joint_type,
- const vec3 &parent_r_parent_body_ref, const mat33 &body_T_parent_ref,
- const vec3 &body_axis_of_motion, idScalar mass, const vec3 &body_r_body_com,
- const mat33 &body_I_body, const int user_int, void *user_ptr);
- /// build index arrays
- /// @return 0 on success, -1 on failure
- int buildIndexSets();
- /// @return number of degrees of freedom
- int numDoFs() const { return m_num_dofs; }
- /// @return number of bodies
- int numBodies() const { return m_inertias.size(); }
- /// get inertia data for index
- /// @param index of the body
- /// @param inertia pointer for return data
- /// @return 0 on success, -1 on failure
- int getInertiaData(const int index, InertiaData *inertia) const;
- /// get joint data for index
- /// @param index of the body
- /// @param joint pointer for return data
- /// @return 0 on success, -1 on failure
- int getJointData(const int index, JointData *joint) const;
- /// get parent index array (paren_index[i] is the index of the parent of i)
- /// @param parent_index pointer for return data
- void getParentIndexArray(idArray<int>::type *parent_index) { *parent_index = m_parent_index; }
- /// get user integer
- /// @param index body index
- /// @param user_int user integer
- /// @return 0 on success, -1 on failure
- int getUserInt(const int index, int *user_int) const;
- /// get user pointer
- /// @param index body index
- /// @param user_int user pointer
- /// @return 0 on success, -1 on failure
- int getUserPtr(const int index, void **user_ptr) const;
-
-private:
- // vector of bodies
- idArray<InertiaData>::type m_inertias;
- // vector of joints
- idArray<JointData>::type m_joints;
- // number of mechanical degrees of freedom
- int m_num_dofs;
- // parent index array
- idArray<int>::type m_parent_index;
- // user integers
- idArray<int>::type m_user_int;
- // user pointers
- idArray<void *>::type m_user_ptr;
- // index of root body (or -1 if not set)
- int m_root_index;
-};
-} // namespace btInverseDynamics
-#endif // MULTIBODYTREEINITCACHE_HPP_
diff --git a/thirdparty/bullet/BulletSoftBody/DeformableBodyInplaceSolverIslandCallback.h b/thirdparty/bullet/BulletSoftBody/DeformableBodyInplaceSolverIslandCallback.h
deleted file mode 100644
index 01c7e93a1b..0000000000
--- a/thirdparty/bullet/BulletSoftBody/DeformableBodyInplaceSolverIslandCallback.h
+++ /dev/null
@@ -1,45 +0,0 @@
-//
-// DeformableBodyInplaceSolverIslandCallback.h
-// BulletSoftBody
-//
-// Created by Xuchen Han on 12/16/19.
-//
-
-#ifndef DeformableBodyInplaceSolverIslandCallback_h
-#define DeformableBodyInplaceSolverIslandCallback_h
-
-struct DeformableBodyInplaceSolverIslandCallback : public MultiBodyInplaceSolverIslandCallback
-{
- btDeformableMultiBodyConstraintSolver* m_deformableSolver;
-
- DeformableBodyInplaceSolverIslandCallback(btDeformableMultiBodyConstraintSolver* solver,
- btDispatcher* dispatcher)
- : MultiBodyInplaceSolverIslandCallback(solver, dispatcher), m_deformableSolver(solver)
- {
- }
-
- virtual void processConstraints(int islandId = -1)
- {
- btCollisionObject** bodies = m_bodies.size() ? &m_bodies[0] : 0;
- btCollisionObject** softBodies = m_softBodies.size() ? &m_softBodies[0] : 0;
- btPersistentManifold** manifold = m_manifolds.size() ? &m_manifolds[0] : 0;
- btTypedConstraint** constraints = m_constraints.size() ? &m_constraints[0] : 0;
- btMultiBodyConstraint** multiBodyConstraints = m_multiBodyConstraints.size() ? &m_multiBodyConstraints[0] : 0;
-
- //printf("mb contacts = %d, mb constraints = %d\n", mbContacts, m_multiBodyConstraints.size());
-
- m_deformableSolver->solveDeformableBodyGroup(bodies, m_bodies.size(), softBodies, m_softBodies.size(), manifold, m_manifolds.size(), constraints, m_constraints.size(), multiBodyConstraints, m_multiBodyConstraints.size(), *m_solverInfo, m_debugDrawer, m_dispatcher);
- if (m_bodies.size() && (m_solverInfo->m_reportSolverAnalytics & 1))
- {
- m_deformableSolver->m_analyticsData.m_islandId = islandId;
- m_islandAnalyticsData.push_back(m_solver->m_analyticsData);
- }
- m_bodies.resize(0);
- m_softBodies.resize(0);
- m_manifolds.resize(0);
- m_constraints.resize(0);
- m_multiBodyConstraints.resize(0);
- }
-};
-
-#endif /* DeformableBodyInplaceSolverIslandCallback_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btCGProjection.h b/thirdparty/bullet/BulletSoftBody/btCGProjection.h
deleted file mode 100644
index e05970664c..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btCGProjection.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_CG_PROJECTION_H
-#define BT_CG_PROJECTION_H
-
-#include "btSoftBody.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-
-struct DeformableContactConstraint
-{
- const btSoftBody::Node* m_node;
- btAlignedObjectArray<const btSoftBody::RContact*> m_contact;
- btAlignedObjectArray<btVector3> m_total_normal_dv;
- btAlignedObjectArray<btVector3> m_total_tangent_dv;
- btAlignedObjectArray<bool> m_static;
- btAlignedObjectArray<bool> m_can_be_dynamic;
-
- DeformableContactConstraint(const btSoftBody::RContact& rcontact) : m_node(rcontact.m_node)
- {
- append(rcontact);
- }
-
- DeformableContactConstraint() : m_node(NULL)
- {
- m_contact.push_back(NULL);
- }
-
- void append(const btSoftBody::RContact& rcontact)
- {
- m_contact.push_back(&rcontact);
- m_total_normal_dv.push_back(btVector3(0, 0, 0));
- m_total_tangent_dv.push_back(btVector3(0, 0, 0));
- m_static.push_back(false);
- m_can_be_dynamic.push_back(true);
- }
-
- void replace(const btSoftBody::RContact& rcontact)
- {
- m_contact.clear();
- m_total_normal_dv.clear();
- m_total_tangent_dv.clear();
- m_static.clear();
- m_can_be_dynamic.clear();
- append(rcontact);
- }
-
- ~DeformableContactConstraint()
- {
- }
-};
-
-class btCGProjection
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- typedef btAlignedObjectArray<btAlignedObjectArray<btVector3> > TVArrayStack;
- typedef btAlignedObjectArray<btAlignedObjectArray<btScalar> > TArrayStack;
- btAlignedObjectArray<btSoftBody*>& m_softBodies;
- const btScalar& m_dt;
- // map from node indices to node pointers
- const btAlignedObjectArray<btSoftBody::Node*>* m_nodes;
-
- btCGProjection(btAlignedObjectArray<btSoftBody*>& softBodies, const btScalar& dt)
- : m_softBodies(softBodies), m_dt(dt)
- {
- }
-
- virtual ~btCGProjection()
- {
- }
-
- // apply the constraints
- virtual void project(TVStack& x) = 0;
-
- virtual void setConstraints() = 0;
-
- // update the constraints
- virtual btScalar update() = 0;
-
- virtual void reinitialize(bool nodeUpdated)
- {
- }
-
- virtual void setIndices(const btAlignedObjectArray<btSoftBody::Node*>* nodes)
- {
- m_nodes = nodes;
- }
-};
-
-#endif /* btCGProjection_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btConjugateGradient.h b/thirdparty/bullet/BulletSoftBody/btConjugateGradient.h
deleted file mode 100644
index bcd5e6b519..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btConjugateGradient.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_CONJUGATE_GRADIENT_H
-#define BT_CONJUGATE_GRADIENT_H
-#include "btKrylovSolver.h"
-template <class MatrixX>
-class btConjugateGradient : public btKrylovSolver<MatrixX>
-{
- typedef btAlignedObjectArray<btVector3> TVStack;
- typedef btKrylovSolver<MatrixX> Base;
- TVStack r, p, z, temp;
-
-public:
- btConjugateGradient(const int max_it_in)
- : btKrylovSolver<MatrixX>(max_it_in, SIMD_EPSILON)
- {
- }
-
- virtual ~btConjugateGradient() {}
-
- // return the number of iterations taken
- int solve(MatrixX& A, TVStack& x, const TVStack& b, bool verbose = false)
- {
- BT_PROFILE("CGSolve");
- btAssert(x.size() == b.size());
- reinitialize(b);
- temp = b;
- A.project(temp);
- p = temp;
- A.precondition(p, z);
- btScalar d0 = this->dot(z, temp);
- d0 = btMin(btScalar(1), d0);
- // r = b - A * x --with assigned dof zeroed out
- A.multiply(x, temp);
- r = this->sub(b, temp);
- A.project(r);
- // z = M^(-1) * r
- A.precondition(r, z);
- A.project(z);
- btScalar r_dot_z = this->dot(z, r);
- if (r_dot_z <= Base::m_tolerance * d0)
- {
- if (verbose)
- {
- std::cout << "Iteration = 0" << std::endl;
- std::cout << "Two norm of the residual = " << r_dot_z << std::endl;
- }
- return 0;
- }
- p = z;
- btScalar r_dot_z_new = r_dot_z;
- for (int k = 1; k <= Base::m_maxIterations; k++)
- {
- // temp = A*p
- A.multiply(p, temp);
- A.project(temp);
- if (this->dot(p, temp) < 0)
- {
- if (verbose)
- std::cout << "Encountered negative direction in CG!" << std::endl;
- if (k == 1)
- {
- x = b;
- }
- return k;
- }
- // alpha = r^T * z / (p^T * A * p)
- btScalar alpha = r_dot_z_new / this->dot(p, temp);
- // x += alpha * p;
- this->multAndAddTo(alpha, p, x);
- // r -= alpha * temp;
- this->multAndAddTo(-alpha, temp, r);
- // z = M^(-1) * r
- A.precondition(r, z);
- r_dot_z = r_dot_z_new;
- r_dot_z_new = this->dot(r, z);
- if (r_dot_z_new < Base::m_tolerance * d0)
- {
- if (verbose)
- {
- std::cout << "ConjugateGradient iterations " << k << " residual = " << r_dot_z_new << std::endl;
- }
- return k;
- }
-
- btScalar beta = r_dot_z_new / r_dot_z;
- p = this->multAndAdd(beta, p, z);
- }
- if (verbose)
- {
- std::cout << "ConjugateGradient max iterations reached " << Base::m_maxIterations << " error = " << r_dot_z_new << std::endl;
- }
- return Base::m_maxIterations;
- }
-
- void reinitialize(const TVStack& b)
- {
- r.resize(b.size());
- p.resize(b.size());
- z.resize(b.size());
- temp.resize(b.size());
- }
-};
-#endif /* btConjugateGradient_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btConjugateResidual.h b/thirdparty/bullet/BulletSoftBody/btConjugateResidual.h
deleted file mode 100644
index 6146120365..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btConjugateResidual.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_CONJUGATE_RESIDUAL_H
-#define BT_CONJUGATE_RESIDUAL_H
-#include "btKrylovSolver.h"
-
-template <class MatrixX>
-class btConjugateResidual : public btKrylovSolver<MatrixX>
-{
- typedef btAlignedObjectArray<btVector3> TVStack;
- typedef btKrylovSolver<MatrixX> Base;
- TVStack r, p, z, temp_p, temp_r, best_x;
- // temp_r = A*r
- // temp_p = A*p
- // z = M^(-1) * temp_p = M^(-1) * A * p
- btScalar best_r;
-
-public:
- btConjugateResidual(const int max_it_in)
- : Base(max_it_in, 1e-8)
- {
- }
-
- virtual ~btConjugateResidual() {}
-
- // return the number of iterations taken
- int solve(MatrixX& A, TVStack& x, const TVStack& b, bool verbose = false)
- {
- BT_PROFILE("CRSolve");
- btAssert(x.size() == b.size());
- reinitialize(b);
- // r = b - A * x --with assigned dof zeroed out
- A.multiply(x, temp_r); // borrow temp_r here to store A*x
- r = this->sub(b, temp_r);
- // z = M^(-1) * r
- A.precondition(r, z); // borrow z to store preconditioned r
- r = z;
- btScalar residual_norm = this->norm(r);
- if (residual_norm <= Base::m_tolerance)
- {
- return 0;
- }
- p = r;
- btScalar r_dot_Ar, r_dot_Ar_new;
- // temp_p = A*p
- A.multiply(p, temp_p);
- // temp_r = A*r
- temp_r = temp_p;
- r_dot_Ar = this->dot(r, temp_r);
- for (int k = 1; k <= Base::m_maxIterations; k++)
- {
- // z = M^(-1) * Ap
- A.precondition(temp_p, z);
- // alpha = r^T * A * r / (Ap)^T * M^-1 * Ap)
- btScalar alpha = r_dot_Ar / this->dot(temp_p, z);
- // x += alpha * p;
- this->multAndAddTo(alpha, p, x);
- // r -= alpha * z;
- this->multAndAddTo(-alpha, z, r);
- btScalar norm_r = this->norm(r);
- if (norm_r < best_r)
- {
- best_x = x;
- best_r = norm_r;
- if (norm_r < Base::m_tolerance)
- {
- return k;
- }
- }
- // temp_r = A * r;
- A.multiply(r, temp_r);
- r_dot_Ar_new = this->dot(r, temp_r);
- btScalar beta = r_dot_Ar_new / r_dot_Ar;
- r_dot_Ar = r_dot_Ar_new;
- // p = beta*p + r;
- p = this->multAndAdd(beta, p, r);
- // temp_p = beta*temp_p + temp_r;
- temp_p = this->multAndAdd(beta, temp_p, temp_r);
- }
- if (verbose)
- {
- std::cout << "ConjugateResidual max iterations reached, residual = " << best_r << std::endl;
- }
- x = best_x;
- return Base::m_maxIterations;
- }
-
- void reinitialize(const TVStack& b)
- {
- r.resize(b.size());
- p.resize(b.size());
- z.resize(b.size());
- temp_p.resize(b.size());
- temp_r.resize(b.size());
- best_x.resize(b.size());
- best_r = SIMD_INFINITY;
- }
-};
-#endif /* btConjugateResidual_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.cpp b/thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.cpp
deleted file mode 100644
index 5a79ef86e2..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.cpp
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btCollisionShape.h"
-
-#include "btDefaultSoftBodySolver.h"
-#include "BulletCollision/CollisionShapes/btCapsuleShape.h"
-#include "BulletSoftBody/btSoftBody.h"
-
-btDefaultSoftBodySolver::btDefaultSoftBodySolver()
-{
- // Initial we will clearly need to update solver constants
- // For now this is global for the cloths linked with this solver - we should probably make this body specific
- // for performance in future once we understand more clearly when constants need to be updated
- m_updateSolverConstants = true;
-}
-
-btDefaultSoftBodySolver::~btDefaultSoftBodySolver()
-{
-}
-
-// In this case the data is already in the soft bodies so there is no need for us to do anything
-void btDefaultSoftBodySolver::copyBackToSoftBodies(bool bMove)
-{
-}
-
-void btDefaultSoftBodySolver::optimize(btAlignedObjectArray<btSoftBody *> &softBodies, bool forceUpdate)
-{
- m_softBodySet.copyFromArray(softBodies);
-}
-
-void btDefaultSoftBodySolver::updateSoftBodies()
-{
- for (int i = 0; i < m_softBodySet.size(); i++)
- {
- btSoftBody *psb = (btSoftBody *)m_softBodySet[i];
- if (psb->isActive())
- {
- psb->integrateMotion();
- }
- }
-} // updateSoftBodies
-
-bool btDefaultSoftBodySolver::checkInitialized()
-{
- return true;
-}
-
-void btDefaultSoftBodySolver::solveConstraints(btScalar solverdt)
-{
- // Solve constraints for non-solver softbodies
- for (int i = 0; i < m_softBodySet.size(); ++i)
- {
- btSoftBody *psb = static_cast<btSoftBody *>(m_softBodySet[i]);
- if (psb->isActive())
- {
- psb->solveConstraints();
- }
- }
-} // btDefaultSoftBodySolver::solveConstraints
-
-void btDefaultSoftBodySolver::copySoftBodyToVertexBuffer(const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer)
-{
- // Currently only support CPU output buffers
- // TODO: check for DX11 buffers. Take all offsets into the same DX11 buffer
- // and use them together on a single kernel call if possible by setting up a
- // per-cloth target buffer array for the copy kernel.
-
- if (vertexBuffer->getBufferType() == btVertexBufferDescriptor::CPU_BUFFER)
- {
- const btAlignedObjectArray<btSoftBody::Node> &clothVertices(softBody->m_nodes);
- int numVertices = clothVertices.size();
-
- const btCPUVertexBufferDescriptor *cpuVertexBuffer = static_cast<btCPUVertexBufferDescriptor *>(vertexBuffer);
- float *basePointer = cpuVertexBuffer->getBasePointer();
-
- if (vertexBuffer->hasVertexPositions())
- {
- const int vertexOffset = cpuVertexBuffer->getVertexOffset();
- const int vertexStride = cpuVertexBuffer->getVertexStride();
- float *vertexPointer = basePointer + vertexOffset;
-
- for (int vertexIndex = 0; vertexIndex < numVertices; ++vertexIndex)
- {
- btVector3 position = clothVertices[vertexIndex].m_x;
- *(vertexPointer + 0) = (float)position.getX();
- *(vertexPointer + 1) = (float)position.getY();
- *(vertexPointer + 2) = (float)position.getZ();
- vertexPointer += vertexStride;
- }
- }
- if (vertexBuffer->hasNormals())
- {
- const int normalOffset = cpuVertexBuffer->getNormalOffset();
- const int normalStride = cpuVertexBuffer->getNormalStride();
- float *normalPointer = basePointer + normalOffset;
-
- for (int vertexIndex = 0; vertexIndex < numVertices; ++vertexIndex)
- {
- btVector3 normal = clothVertices[vertexIndex].m_n;
- *(normalPointer + 0) = (float)normal.getX();
- *(normalPointer + 1) = (float)normal.getY();
- *(normalPointer + 2) = (float)normal.getZ();
- normalPointer += normalStride;
- }
- }
- }
-} // btDefaultSoftBodySolver::copySoftBodyToVertexBuffer
-
-void btDefaultSoftBodySolver::processCollision(btSoftBody *softBody, btSoftBody *otherSoftBody)
-{
- softBody->defaultCollisionHandler(otherSoftBody);
-}
-
-// For the default solver just leave the soft body to do its collision processing
-void btDefaultSoftBodySolver::processCollision(btSoftBody *softBody, const btCollisionObjectWrapper *collisionObjectWrap)
-{
- softBody->defaultCollisionHandler(collisionObjectWrap);
-} // btDefaultSoftBodySolver::processCollision
-
-void btDefaultSoftBodySolver::predictMotion(btScalar timeStep)
-{
- for (int i = 0; i < m_softBodySet.size(); ++i)
- {
- btSoftBody *psb = m_softBodySet[i];
-
- if (psb->isActive())
- {
- psb->predictMotion(timeStep);
- }
- }
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.h b/thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.h
deleted file mode 100644
index 3965b07c58..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDefaultSoftBodySolver.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_BODY_DEFAULT_SOLVER_H
-#define BT_SOFT_BODY_DEFAULT_SOLVER_H
-
-#include "BulletSoftBody/btSoftBodySolvers.h"
-#include "btSoftBodySolverVertexBuffer.h"
-struct btCollisionObjectWrapper;
-
-class btDefaultSoftBodySolver : public btSoftBodySolver
-{
-protected:
- /** Variable to define whether we need to update solver constants on the next iteration */
- bool m_updateSolverConstants;
-
- btAlignedObjectArray<btSoftBody *> m_softBodySet;
-
-public:
- btDefaultSoftBodySolver();
-
- virtual ~btDefaultSoftBodySolver();
-
- virtual SolverTypes getSolverType() const
- {
- return DEFAULT_SOLVER;
- }
-
- virtual bool checkInitialized();
-
- virtual void updateSoftBodies();
-
- virtual void optimize(btAlignedObjectArray<btSoftBody *> &softBodies, bool forceUpdate = false);
-
- virtual void copyBackToSoftBodies(bool bMove = true);
-
- virtual void solveConstraints(btScalar solverdt);
-
- virtual void predictMotion(btScalar solverdt);
-
- virtual void copySoftBodyToVertexBuffer(const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer);
-
- virtual void processCollision(btSoftBody *, const btCollisionObjectWrapper *);
-
- virtual void processCollision(btSoftBody *, btSoftBody *);
-};
-
-#endif // #ifndef BT_ACCELERATED_SOFT_BODY_CPU_SOLVER_H
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.cpp b/thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.cpp
deleted file mode 100644
index 2455ed2138..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.cpp
+++ /dev/null
@@ -1,299 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#include "btDeformableBackwardEulerObjective.h"
-#include "btPreconditioner.h"
-#include "LinearMath/btQuickprof.h"
-
-btDeformableBackwardEulerObjective::btDeformableBackwardEulerObjective(btAlignedObjectArray<btSoftBody*>& softBodies, const TVStack& backup_v)
- : m_softBodies(softBodies), m_projection(softBodies), m_backupVelocity(backup_v), m_implicit(false)
-{
- m_massPreconditioner = new MassPreconditioner(m_softBodies);
- m_KKTPreconditioner = new KKTPreconditioner(m_softBodies, m_projection, m_lf, m_dt, m_implicit);
- m_preconditioner = m_KKTPreconditioner;
-}
-
-btDeformableBackwardEulerObjective::~btDeformableBackwardEulerObjective()
-{
- delete m_KKTPreconditioner;
- delete m_massPreconditioner;
-}
-
-void btDeformableBackwardEulerObjective::reinitialize(bool nodeUpdated, btScalar dt)
-{
- BT_PROFILE("reinitialize");
- if (dt > 0)
- {
- setDt(dt);
- }
- if (nodeUpdated)
- {
- updateId();
- }
- for (int i = 0; i < m_lf.size(); ++i)
- {
- m_lf[i]->reinitialize(nodeUpdated);
- }
- btMatrix3x3 I;
- I.setIdentity();
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- if (psb->m_nodes[j].m_im > 0)
- psb->m_nodes[j].m_effectiveMass = I * (1.0 / psb->m_nodes[j].m_im);
- }
- }
- m_projection.reinitialize(nodeUpdated);
- // m_preconditioner->reinitialize(nodeUpdated);
-}
-
-void btDeformableBackwardEulerObjective::setDt(btScalar dt)
-{
- m_dt = dt;
-}
-
-void btDeformableBackwardEulerObjective::multiply(const TVStack& x, TVStack& b) const
-{
- BT_PROFILE("multiply");
- // add in the mass term
- size_t counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- b[counter] = (node.m_im == 0) ? btVector3(0, 0, 0) : x[counter] / node.m_im;
- ++counter;
- }
- }
-
- for (int i = 0; i < m_lf.size(); ++i)
- {
- // add damping matrix
- m_lf[i]->addScaledDampingForceDifferential(-m_dt, x, b);
- // Always integrate picking force implicitly for stability.
- if (m_implicit || m_lf[i]->getForceType() == BT_MOUSE_PICKING_FORCE)
- {
- m_lf[i]->addScaledElasticForceDifferential(-m_dt * m_dt, x, b);
- }
- }
- int offset = m_nodes.size();
- for (int i = offset; i < b.size(); ++i)
- {
- b[i].setZero();
- }
- // add in the lagrange multiplier terms
-
- for (int c = 0; c < m_projection.m_lagrangeMultipliers.size(); ++c)
- {
- // C^T * lambda
- const LagrangeMultiplier& lm = m_projection.m_lagrangeMultipliers[c];
- for (int i = 0; i < lm.m_num_nodes; ++i)
- {
- for (int j = 0; j < lm.m_num_constraints; ++j)
- {
- b[lm.m_indices[i]] += x[offset + c][j] * lm.m_weights[i] * lm.m_dirs[j];
- }
- }
- // C * x
- for (int d = 0; d < lm.m_num_constraints; ++d)
- {
- for (int i = 0; i < lm.m_num_nodes; ++i)
- {
- b[offset + c][d] += lm.m_weights[i] * x[lm.m_indices[i]].dot(lm.m_dirs[d]);
- }
- }
- }
-}
-
-void btDeformableBackwardEulerObjective::updateVelocity(const TVStack& dv)
-{
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- btSoftBody::Node& node = psb->m_nodes[j];
- node.m_v = m_backupVelocity[node.index] + dv[node.index];
- }
- }
-}
-
-void btDeformableBackwardEulerObjective::applyForce(TVStack& force, bool setZero)
-{
- size_t counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- counter += psb->m_nodes.size();
- continue;
- }
- if (m_implicit)
- {
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- if (psb->m_nodes[j].m_im != 0)
- {
- psb->m_nodes[j].m_v += psb->m_nodes[j].m_effectiveMass_inv * force[counter++];
- }
- }
- }
- else
- {
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- btScalar one_over_mass = (psb->m_nodes[j].m_im == 0) ? 0 : psb->m_nodes[j].m_im;
- psb->m_nodes[j].m_v += one_over_mass * force[counter++];
- }
- }
- }
- if (setZero)
- {
- for (int i = 0; i < force.size(); ++i)
- force[i].setZero();
- }
-}
-
-void btDeformableBackwardEulerObjective::computeResidual(btScalar dt, TVStack& residual)
-{
- BT_PROFILE("computeResidual");
- // add implicit force
- for (int i = 0; i < m_lf.size(); ++i)
- {
- // Always integrate picking force implicitly for stability.
- if (m_implicit || m_lf[i]->getForceType() == BT_MOUSE_PICKING_FORCE)
- {
- m_lf[i]->addScaledForces(dt, residual);
- }
- else
- {
- m_lf[i]->addScaledDampingForce(dt, residual);
- }
- }
- // m_projection.project(residual);
-}
-
-btScalar btDeformableBackwardEulerObjective::computeNorm(const TVStack& residual) const
-{
- btScalar mag = 0;
- for (int i = 0; i < residual.size(); ++i)
- {
- mag += residual[i].length2();
- }
- return std::sqrt(mag);
-}
-
-btScalar btDeformableBackwardEulerObjective::totalEnergy(btScalar dt)
-{
- btScalar e = 0;
- for (int i = 0; i < m_lf.size(); ++i)
- {
- e += m_lf[i]->totalEnergy(dt);
- }
- return e;
-}
-
-void btDeformableBackwardEulerObjective::applyExplicitForce(TVStack& force)
-{
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- m_softBodies[i]->advanceDeformation();
- }
- if (m_implicit)
- {
- // apply forces except gravity force
- btVector3 gravity;
- for (int i = 0; i < m_lf.size(); ++i)
- {
- if (m_lf[i]->getForceType() == BT_GRAVITY_FORCE)
- {
- gravity = static_cast<btDeformableGravityForce*>(m_lf[i])->m_gravity;
- }
- else
- {
- m_lf[i]->addScaledForces(m_dt, force);
- }
- }
- for (int i = 0; i < m_lf.size(); ++i)
- {
- m_lf[i]->addScaledHessian(m_dt);
- }
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- // add gravity explicitly
- psb->m_nodes[j].m_v += m_dt * psb->m_gravityFactor * gravity;
- }
- }
- }
- }
- else
- {
- for (int i = 0; i < m_lf.size(); ++i)
- {
- m_lf[i]->addScaledExplicitForce(m_dt, force);
- }
- }
- // calculate inverse mass matrix for all nodes
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- if (psb->m_nodes[j].m_im > 0)
- {
- psb->m_nodes[j].m_effectiveMass_inv = psb->m_nodes[j].m_effectiveMass.inverse();
- }
- }
- }
- }
- applyForce(force, true);
-}
-
-void btDeformableBackwardEulerObjective::initialGuess(TVStack& dv, const TVStack& residual)
-{
- size_t counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- dv[counter] = psb->m_nodes[j].m_im * residual[counter];
- ++counter;
- }
- }
-}
-
-//set constraints as projections
-void btDeformableBackwardEulerObjective::setConstraints(const btContactSolverInfo& infoGlobal)
-{
- m_projection.setConstraints(infoGlobal);
-}
-
-void btDeformableBackwardEulerObjective::applyDynamicFriction(TVStack& r)
-{
- m_projection.applyDynamicFriction(r);
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.h b/thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.h
deleted file mode 100644
index eb05b9f010..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableBackwardEulerObjective.h
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_BACKWARD_EULER_OBJECTIVE_H
-#define BT_BACKWARD_EULER_OBJECTIVE_H
-//#include "btConjugateGradient.h"
-#include "btDeformableLagrangianForce.h"
-#include "btDeformableMassSpringForce.h"
-#include "btDeformableGravityForce.h"
-#include "btDeformableCorotatedForce.h"
-#include "btDeformableMousePickingForce.h"
-#include "btDeformableLinearElasticityForce.h"
-#include "btDeformableNeoHookeanForce.h"
-#include "btDeformableContactProjection.h"
-#include "btPreconditioner.h"
-#include "btDeformableMultiBodyDynamicsWorld.h"
-#include "LinearMath/btQuickprof.h"
-
-class btDeformableBackwardEulerObjective
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btScalar m_dt;
- btAlignedObjectArray<btDeformableLagrangianForce*> m_lf;
- btAlignedObjectArray<btSoftBody*>& m_softBodies;
- Preconditioner* m_preconditioner;
- btDeformableContactProjection m_projection;
- const TVStack& m_backupVelocity;
- btAlignedObjectArray<btSoftBody::Node*> m_nodes;
- bool m_implicit;
- MassPreconditioner* m_massPreconditioner;
- KKTPreconditioner* m_KKTPreconditioner;
-
- btDeformableBackwardEulerObjective(btAlignedObjectArray<btSoftBody*>& softBodies, const TVStack& backup_v);
-
- virtual ~btDeformableBackwardEulerObjective();
-
- void initialize() {}
-
- // compute the rhs for CG solve, i.e, add the dt scaled implicit force to residual
- void computeResidual(btScalar dt, TVStack& residual);
-
- // add explicit force to the velocity
- void applyExplicitForce(TVStack& force);
-
- // apply force to velocity and optionally reset the force to zero
- void applyForce(TVStack& force, bool setZero);
-
- // compute the norm of the residual
- btScalar computeNorm(const TVStack& residual) const;
-
- // compute one step of the solve (there is only one solve if the system is linear)
- void computeStep(TVStack& dv, const TVStack& residual, const btScalar& dt);
-
- // perform A*x = b
- void multiply(const TVStack& x, TVStack& b) const;
-
- // set initial guess for CG solve
- void initialGuess(TVStack& dv, const TVStack& residual);
-
- // reset data structure and reset dt
- void reinitialize(bool nodeUpdated, btScalar dt);
-
- void setDt(btScalar dt);
-
- // add friction force to residual
- void applyDynamicFriction(TVStack& r);
-
- // add dv to velocity
- void updateVelocity(const TVStack& dv);
-
- //set constraints as projections
- void setConstraints(const btContactSolverInfo& infoGlobal);
-
- // update the projections and project the residual
- void project(TVStack& r)
- {
- BT_PROFILE("project");
- m_projection.project(r);
- }
-
- // perform precondition M^(-1) x = b
- void precondition(const TVStack& x, TVStack& b)
- {
- m_preconditioner->operator()(x, b);
- }
-
- // reindex all the vertices
- virtual void updateId()
- {
- size_t node_id = 0;
- size_t face_id = 0;
- m_nodes.clear();
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].index = node_id;
- m_nodes.push_back(&psb->m_nodes[j]);
- ++node_id;
- }
- for (int j = 0; j < psb->m_faces.size(); ++j)
- {
- psb->m_faces[j].m_index = face_id;
- ++face_id;
- }
- }
- }
-
- const btAlignedObjectArray<btSoftBody::Node*>* getIndices() const
- {
- return &m_nodes;
- }
-
- void setImplicit(bool implicit)
- {
- m_implicit = implicit;
- }
-
- // Calculate the total potential energy in the system
- btScalar totalEnergy(btScalar dt);
-
- void addLagrangeMultiplier(const TVStack& vec, TVStack& extended_vec)
- {
- extended_vec.resize(vec.size() + m_projection.m_lagrangeMultipliers.size());
- for (int i = 0; i < vec.size(); ++i)
- {
- extended_vec[i] = vec[i];
- }
- int offset = vec.size();
- for (int i = 0; i < m_projection.m_lagrangeMultipliers.size(); ++i)
- {
- extended_vec[offset + i].setZero();
- }
- }
-
- void addLagrangeMultiplierRHS(const TVStack& residual, const TVStack& m_dv, TVStack& extended_residual)
- {
- extended_residual.resize(residual.size() + m_projection.m_lagrangeMultipliers.size());
- for (int i = 0; i < residual.size(); ++i)
- {
- extended_residual[i] = residual[i];
- }
- int offset = residual.size();
- for (int i = 0; i < m_projection.m_lagrangeMultipliers.size(); ++i)
- {
- const LagrangeMultiplier& lm = m_projection.m_lagrangeMultipliers[i];
- extended_residual[offset + i].setZero();
- for (int d = 0; d < lm.m_num_constraints; ++d)
- {
- for (int n = 0; n < lm.m_num_nodes; ++n)
- {
- extended_residual[offset + i][d] += lm.m_weights[n] * m_dv[lm.m_indices[n]].dot(lm.m_dirs[d]);
- }
- }
- }
- }
-
- void calculateContactForce(const TVStack& dv, const TVStack& rhs, TVStack& f)
- {
- size_t counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- f[counter] = (node.m_im == 0) ? btVector3(0, 0, 0) : dv[counter] / node.m_im;
- ++counter;
- }
- }
- for (int i = 0; i < m_lf.size(); ++i)
- {
- // add damping matrix
- m_lf[i]->addScaledDampingForceDifferential(-m_dt, dv, f);
- }
- counter = 0;
- for (; counter < f.size(); ++counter)
- {
- f[counter] = rhs[counter] - f[counter];
- }
- }
-};
-
-#endif /* btBackwardEulerObjective_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.cpp b/thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.cpp
deleted file mode 100644
index e81680f019..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.cpp
+++ /dev/null
@@ -1,506 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#include <stdio.h>
-#include <limits>
-#include "btDeformableBodySolver.h"
-#include "btSoftBodyInternals.h"
-#include "LinearMath/btQuickprof.h"
-static const int kMaxConjugateGradientIterations = 300;
-btDeformableBodySolver::btDeformableBodySolver()
- : m_numNodes(0), m_cg(kMaxConjugateGradientIterations), m_cr(kMaxConjugateGradientIterations), m_maxNewtonIterations(1), m_newtonTolerance(1e-4), m_lineSearch(false), m_useProjection(false)
-{
- m_objective = new btDeformableBackwardEulerObjective(m_softBodies, m_backupVelocity);
-}
-
-btDeformableBodySolver::~btDeformableBodySolver()
-{
- delete m_objective;
-}
-
-void btDeformableBodySolver::solveDeformableConstraints(btScalar solverdt)
-{
- BT_PROFILE("solveDeformableConstraints");
- if (!m_implicit)
- {
- m_objective->computeResidual(solverdt, m_residual);
- m_objective->applyDynamicFriction(m_residual);
- if (m_useProjection)
- {
- computeStep(m_dv, m_residual);
- }
- else
- {
- TVStack rhs, x;
- m_objective->addLagrangeMultiplierRHS(m_residual, m_dv, rhs);
- m_objective->addLagrangeMultiplier(m_dv, x);
- m_objective->m_preconditioner->reinitialize(true);
- computeStep(x, rhs);
- for (int i = 0; i < m_dv.size(); ++i)
- {
- m_dv[i] = x[i];
- }
- }
- updateVelocity();
- }
- else
- {
- for (int i = 0; i < m_maxNewtonIterations; ++i)
- {
- updateState();
- // add the inertia term in the residual
- int counter = 0;
- for (int k = 0; k < m_softBodies.size(); ++k)
- {
- btSoftBody* psb = m_softBodies[k];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- if (psb->m_nodes[j].m_im > 0)
- {
- m_residual[counter] = (-1. / psb->m_nodes[j].m_im) * m_dv[counter];
- }
- ++counter;
- }
- }
-
- m_objective->computeResidual(solverdt, m_residual);
- if (m_objective->computeNorm(m_residual) < m_newtonTolerance && i > 0)
- {
- break;
- }
- // todo xuchenhan@: this really only needs to be calculated once
- m_objective->applyDynamicFriction(m_residual);
- if (m_lineSearch)
- {
- btScalar inner_product = computeDescentStep(m_ddv, m_residual);
- btScalar alpha = 0.01, beta = 0.5; // Boyd & Vandenberghe suggested alpha between 0.01 and 0.3, beta between 0.1 to 0.8
- btScalar scale = 2;
- btScalar f0 = m_objective->totalEnergy(solverdt) + kineticEnergy(), f1, f2;
- backupDv();
- do
- {
- scale *= beta;
- if (scale < 1e-8)
- {
- return;
- }
- updateEnergy(scale);
- f1 = m_objective->totalEnergy(solverdt) + kineticEnergy();
- f2 = f0 - alpha * scale * inner_product;
- } while (!(f1 < f2 + SIMD_EPSILON)); // if anything here is nan then the search continues
- revertDv();
- updateDv(scale);
- }
- else
- {
- computeStep(m_ddv, m_residual);
- updateDv();
- }
- for (int j = 0; j < m_numNodes; ++j)
- {
- m_ddv[j].setZero();
- m_residual[j].setZero();
- }
- }
- updateVelocity();
- }
-}
-
-btScalar btDeformableBodySolver::kineticEnergy()
-{
- btScalar ke = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- btSoftBody::Node& node = psb->m_nodes[j];
- if (node.m_im > 0)
- {
- ke += m_dv[node.index].length2() * 0.5 / node.m_im;
- }
- }
- }
- return ke;
-}
-
-void btDeformableBodySolver::backupDv()
-{
- m_backup_dv.resize(m_dv.size());
- for (int i = 0; i < m_backup_dv.size(); ++i)
- {
- m_backup_dv[i] = m_dv[i];
- }
-}
-
-void btDeformableBodySolver::revertDv()
-{
- for (int i = 0; i < m_backup_dv.size(); ++i)
- {
- m_dv[i] = m_backup_dv[i];
- }
-}
-
-void btDeformableBodySolver::updateEnergy(btScalar scale)
-{
- for (int i = 0; i < m_dv.size(); ++i)
- {
- m_dv[i] = m_backup_dv[i] + scale * m_ddv[i];
- }
- updateState();
-}
-
-btScalar btDeformableBodySolver::computeDescentStep(TVStack& ddv, const TVStack& residual, bool verbose)
-{
- m_cg.solve(*m_objective, ddv, residual, false);
- btScalar inner_product = m_cg.dot(residual, m_ddv);
- btScalar res_norm = m_objective->computeNorm(residual);
- btScalar tol = 1e-5 * res_norm * m_objective->computeNorm(m_ddv);
- if (inner_product < -tol)
- {
- if (verbose)
- {
- std::cout << "Looking backwards!" << std::endl;
- }
- for (int i = 0; i < m_ddv.size(); ++i)
- {
- m_ddv[i] = -m_ddv[i];
- }
- inner_product = -inner_product;
- }
- else if (std::abs(inner_product) < tol)
- {
- if (verbose)
- {
- std::cout << "Gradient Descent!" << std::endl;
- }
- btScalar scale = m_objective->computeNorm(m_ddv) / res_norm;
- for (int i = 0; i < m_ddv.size(); ++i)
- {
- m_ddv[i] = scale * residual[i];
- }
- inner_product = scale * res_norm * res_norm;
- }
- return inner_product;
-}
-
-void btDeformableBodySolver::updateState()
-{
- updateVelocity();
- updateTempPosition();
-}
-
-void btDeformableBodySolver::updateDv(btScalar scale)
-{
- for (int i = 0; i < m_numNodes; ++i)
- {
- m_dv[i] += scale * m_ddv[i];
- }
-}
-
-void btDeformableBodySolver::computeStep(TVStack& ddv, const TVStack& residual)
-{
- if (m_useProjection)
- m_cg.solve(*m_objective, ddv, residual, false);
- else
- m_cr.solve(*m_objective, ddv, residual, false);
-}
-
-void btDeformableBodySolver::reinitialize(const btAlignedObjectArray<btSoftBody*>& softBodies, btScalar dt)
-{
- m_softBodies.copyFromArray(softBodies);
- bool nodeUpdated = updateNodes();
-
- if (nodeUpdated)
- {
- m_dv.resize(m_numNodes, btVector3(0, 0, 0));
- m_ddv.resize(m_numNodes, btVector3(0, 0, 0));
- m_residual.resize(m_numNodes, btVector3(0, 0, 0));
- m_backupVelocity.resize(m_numNodes, btVector3(0, 0, 0));
- }
-
- // need to setZero here as resize only set value for newly allocated items
- for (int i = 0; i < m_numNodes; ++i)
- {
- m_dv[i].setZero();
- m_ddv[i].setZero();
- m_residual[i].setZero();
- }
-
- if (dt > 0)
- {
- m_dt = dt;
- }
- m_objective->reinitialize(nodeUpdated, dt);
- updateSoftBodies();
-}
-
-void btDeformableBodySolver::setConstraints(const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("setConstraint");
- m_objective->setConstraints(infoGlobal);
-}
-
-btScalar btDeformableBodySolver::solveContactConstraints(btCollisionObject** deformableBodies, int numDeformableBodies, const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("solveContactConstraints");
- btScalar maxSquaredResidual = m_objective->m_projection.update(deformableBodies, numDeformableBodies, infoGlobal);
- return maxSquaredResidual;
-}
-
-void btDeformableBodySolver::updateVelocity()
-{
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- psb->m_maxSpeedSquared = 0;
- if (!psb->isActive())
- {
- counter += psb->m_nodes.size();
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- // set NaN to zero;
- if (m_dv[counter] != m_dv[counter])
- {
- m_dv[counter].setZero();
- }
- if (m_implicit)
- {
- psb->m_nodes[j].m_v = m_backupVelocity[counter] + m_dv[counter];
- }
- else
- {
- psb->m_nodes[j].m_v = m_backupVelocity[counter] + m_dv[counter] - psb->m_nodes[j].m_splitv;
- }
- psb->m_maxSpeedSquared = btMax(psb->m_maxSpeedSquared, psb->m_nodes[j].m_v.length2());
- ++counter;
- }
- }
-}
-
-void btDeformableBodySolver::updateTempPosition()
-{
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- counter += psb->m_nodes.size();
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = psb->m_nodes[j].m_x + m_dt * (psb->m_nodes[j].m_v + psb->m_nodes[j].m_splitv);
- ++counter;
- }
- psb->updateDeformation();
- }
-}
-
-void btDeformableBodySolver::backupVelocity()
-{
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- m_backupVelocity[counter++] = psb->m_nodes[j].m_v;
- }
- }
-}
-
-void btDeformableBodySolver::setupDeformableSolve(bool implicit)
-{
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- counter += psb->m_nodes.size();
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- if (implicit)
- {
- // setting the initial guess for newton, need m_dv = v_{n+1} - v_n for dofs that are in constraint.
- if (psb->m_nodes[j].m_v == m_backupVelocity[counter])
- m_dv[counter].setZero();
- else
- m_dv[counter] = psb->m_nodes[j].m_v - psb->m_nodes[j].m_vn;
- m_backupVelocity[counter] = psb->m_nodes[j].m_vn;
- }
- else
- {
- m_dv[counter] = psb->m_nodes[j].m_v + psb->m_nodes[j].m_splitv - m_backupVelocity[counter];
- }
- psb->m_nodes[j].m_v = m_backupVelocity[counter];
- ++counter;
- }
- }
-}
-
-void btDeformableBodySolver::revertVelocity()
-{
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_v = m_backupVelocity[counter++];
- }
- }
-}
-
-bool btDeformableBodySolver::updateNodes()
-{
- int numNodes = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- numNodes += m_softBodies[i]->m_nodes.size();
- if (numNodes != m_numNodes)
- {
- m_numNodes = numNodes;
- return true;
- }
- return false;
-}
-
-void btDeformableBodySolver::predictMotion(btScalar solverdt)
-{
- // apply explicit forces to velocity
- if (m_implicit)
- {
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = psb->m_nodes[j].m_x + psb->m_nodes[j].m_v * solverdt;
- }
- }
- }
- }
- m_objective->applyExplicitForce(m_residual);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- /* Clear contacts */
- psb->m_nodeRigidContacts.resize(0);
- psb->m_faceRigidContacts.resize(0);
- psb->m_faceNodeContacts.resize(0);
-
- if (psb->isActive())
- {
- // predict motion for collision detection
- predictDeformableMotion(psb, solverdt);
- }
- }
-}
-
-void btDeformableBodySolver::predictDeformableMotion(btSoftBody* psb, btScalar dt)
-{
- BT_PROFILE("btDeformableBodySolver::predictDeformableMotion");
- int i, ni;
-
- /* Update */
- if (psb->m_bUpdateRtCst)
- {
- psb->m_bUpdateRtCst = false;
- psb->updateConstants();
- psb->m_fdbvt.clear();
- if (psb->m_cfg.collisions & btSoftBody::fCollision::SDF_RD)
- {
- psb->initializeFaceTree();
- }
- }
-
- /* Prepare */
- psb->m_sst.sdt = dt * psb->m_cfg.timescale;
- psb->m_sst.isdt = 1 / psb->m_sst.sdt;
- psb->m_sst.velmrg = psb->m_sst.sdt * 3;
- psb->m_sst.radmrg = psb->getCollisionShape()->getMargin();
- psb->m_sst.updmrg = psb->m_sst.radmrg * (btScalar)0.25;
- /* Bounds */
- psb->updateBounds();
-
- /* Integrate */
- // do not allow particles to move more than the bounding box size
- btScalar max_v = (psb->m_bounds[1] - psb->m_bounds[0]).norm() / dt;
- for (i = 0, ni = psb->m_nodes.size(); i < ni; ++i)
- {
- btSoftBody::Node& n = psb->m_nodes[i];
- // apply drag
- n.m_v *= (1 - psb->m_cfg.drag);
- // scale velocity back
- if (m_implicit)
- {
- n.m_q = n.m_x;
- }
- else
- {
- if (n.m_v.norm() > max_v)
- {
- n.m_v.safeNormalize();
- n.m_v *= max_v;
- }
- n.m_q = n.m_x + n.m_v * dt;
- }
- n.m_splitv.setZero();
- n.m_constrained = false;
- }
-
- /* Nodes */
- psb->updateNodeTree(true, true);
- if (!psb->m_fdbvt.empty())
- {
- psb->updateFaceTree(true, true);
- }
- /* Optimize dbvt's */
- // psb->m_ndbvt.optimizeIncremental(1);
- // psb->m_fdbvt.optimizeIncremental(1);
-}
-
-void btDeformableBodySolver::updateSoftBodies()
-{
- BT_PROFILE("updateSoftBodies");
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)m_softBodies[i];
- if (psb->isActive())
- {
- psb->updateNormals();
- }
- }
-}
-
-void btDeformableBodySolver::setImplicit(bool implicit)
-{
- m_implicit = implicit;
- m_objective->setImplicit(implicit);
-}
-
-void btDeformableBodySolver::setLineSearch(bool lineSearch)
-{
- m_lineSearch = lineSearch;
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.h b/thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.h
deleted file mode 100644
index ae674d6e89..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableBodySolver.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_DEFORMABLE_BODY_SOLVERS_H
-#define BT_DEFORMABLE_BODY_SOLVERS_H
-
-#include "btSoftBodySolvers.h"
-#include "btDeformableBackwardEulerObjective.h"
-#include "btDeformableMultiBodyDynamicsWorld.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-#include "btConjugateResidual.h"
-#include "btConjugateGradient.h"
-struct btCollisionObjectWrapper;
-class btDeformableBackwardEulerObjective;
-class btDeformableMultiBodyDynamicsWorld;
-
-class btDeformableBodySolver : public btSoftBodySolver
-{
- typedef btAlignedObjectArray<btVector3> TVStack;
-
-protected:
- int m_numNodes; // total number of deformable body nodes
- TVStack m_dv; // v_{n+1} - v_n
- TVStack m_backup_dv; // backed up dv
- TVStack m_ddv; // incremental dv
- TVStack m_residual; // rhs of the linear solve
- btAlignedObjectArray<btSoftBody*> m_softBodies; // all deformable bodies
- TVStack m_backupVelocity; // backed up v, equals v_n for implicit, equals v_{n+1}^* for explicit
- btScalar m_dt; // dt
- btConjugateGradient<btDeformableBackwardEulerObjective> m_cg; // CG solver
- btConjugateResidual<btDeformableBackwardEulerObjective> m_cr; // CR solver
- bool m_implicit; // use implicit scheme if true, explicit scheme if false
- int m_maxNewtonIterations; // max number of newton iterations
- btScalar m_newtonTolerance; // stop newton iterations if f(x) < m_newtonTolerance
- bool m_lineSearch; // If true, use newton's method with line search under implicit scheme
-public:
- // handles data related to objective function
- btDeformableBackwardEulerObjective* m_objective;
- bool m_useProjection;
-
- btDeformableBodySolver();
-
- virtual ~btDeformableBodySolver();
-
- virtual SolverTypes getSolverType() const
- {
- return DEFORMABLE_SOLVER;
- }
-
- // update soft body normals
- virtual void updateSoftBodies();
-
- virtual btScalar solveContactConstraints(btCollisionObject** deformableBodies, int numDeformableBodies, const btContactSolverInfo& infoGlobal);
-
- // solve the momentum equation
- virtual void solveDeformableConstraints(btScalar solverdt);
-
- // resize/clear data structures
- void reinitialize(const btAlignedObjectArray<btSoftBody*>& softBodies, btScalar dt);
-
- // set up contact constraints
- void setConstraints(const btContactSolverInfo& infoGlobal);
-
- // add in elastic forces and gravity to obtain v_{n+1}^* and calls predictDeformableMotion
- virtual void predictMotion(btScalar solverdt);
-
- // move to temporary position x_{n+1}^* = x_n + dt * v_{n+1}^*
- // x_{n+1}^* is stored in m_q
- void predictDeformableMotion(btSoftBody* psb, btScalar dt);
-
- // save the current velocity to m_backupVelocity
- void backupVelocity();
-
- // set m_dv and m_backupVelocity to desired value to prepare for momentum solve
- void setupDeformableSolve(bool implicit);
-
- // set the current velocity to that backed up in m_backupVelocity
- void revertVelocity();
-
- // set velocity to m_dv + m_backupVelocity
- void updateVelocity();
-
- // update the node count
- bool updateNodes();
-
- // calculate the change in dv resulting from the momentum solve
- void computeStep(TVStack& ddv, const TVStack& residual);
-
- // calculate the change in dv resulting from the momentum solve when line search is turned on
- btScalar computeDescentStep(TVStack& ddv, const TVStack& residual, bool verbose = false);
-
- virtual void copySoftBodyToVertexBuffer(const btSoftBody* const softBody, btVertexBufferDescriptor* vertexBuffer) {}
-
- // process collision between deformable and rigid
- virtual void processCollision(btSoftBody* softBody, const btCollisionObjectWrapper* collisionObjectWrap)
- {
- softBody->defaultCollisionHandler(collisionObjectWrap);
- }
-
- // process collision between deformable and deformable
- virtual void processCollision(btSoftBody* softBody, btSoftBody* otherSoftBody)
- {
- softBody->defaultCollisionHandler(otherSoftBody);
- }
-
- // If true, implicit time stepping scheme is used.
- // Otherwise, explicit time stepping scheme is used
- void setImplicit(bool implicit);
-
- // If true, newton's method with line search is used when implicit time stepping scheme is turned on
- void setLineSearch(bool lineSearch);
-
- // set temporary position x^* = x_n + dt * v
- // update the deformation gradient at position x^*
- void updateState();
-
- // set dv = dv + scale * ddv
- void updateDv(btScalar scale = 1);
-
- // set temporary position x^* = x_n + dt * v^*
- void updateTempPosition();
-
- // save the current dv to m_backup_dv;
- void backupDv();
-
- // set dv to the backed-up value
- void revertDv();
-
- // set dv = dv + scale * ddv
- // set v^* = v_n + dv
- // set temporary position x^* = x_n + dt * v^*
- // update the deformation gradient at position x^*
- void updateEnergy(btScalar scale);
-
- // calculates the appropriately scaled kinetic energy in the system, which is
- // 1/2 * dv^T * M * dv
- // used in line search
- btScalar kineticEnergy();
-
- // unused functions
- virtual void optimize(btAlignedObjectArray<btSoftBody*>& softBodies, bool forceUpdate = false) {}
- virtual void solveConstraints(btScalar dt) {}
- virtual bool checkInitialized() { return true; }
- virtual void copyBackToSoftBodies(bool bMove = true) {}
-};
-
-#endif /* btDeformableBodySolver_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.cpp b/thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.cpp
deleted file mode 100644
index 09398d79a5..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.cpp
+++ /dev/null
@@ -1,720 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#include "btDeformableContactConstraint.h"
-/* ================ Deformable Node Anchor =================== */
-btDeformableNodeAnchorConstraint::btDeformableNodeAnchorConstraint(const btSoftBody::DeformableNodeRigidAnchor& a, const btContactSolverInfo& infoGlobal)
- : m_anchor(&a), btDeformableContactConstraint(a.m_cti.m_normal, infoGlobal)
-{
-}
-
-btDeformableNodeAnchorConstraint::btDeformableNodeAnchorConstraint(const btDeformableNodeAnchorConstraint& other)
- : m_anchor(other.m_anchor), btDeformableContactConstraint(other)
-{
-}
-
-btVector3 btDeformableNodeAnchorConstraint::getVa() const
-{
- const btSoftBody::sCti& cti = m_anchor->m_cti;
- btVector3 va(0, 0, 0);
- if (cti.m_colObj->hasContactResponse())
- {
- btRigidBody* rigidCol = 0;
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
-
- // grab the velocity of the rigid body
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- va = rigidCol ? (rigidCol->getVelocityInLocalPoint(m_anchor->m_c1)) : btVector3(0, 0, 0);
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- const btScalar* J_n = &m_anchor->jacobianData_normal.m_jacobians[0];
- const btScalar* J_t1 = &m_anchor->jacobianData_t1.m_jacobians[0];
- const btScalar* J_t2 = &m_anchor->jacobianData_t2.m_jacobians[0];
- const btScalar* local_v = multibodyLinkCol->m_multiBody->getVelocityVector();
- const btScalar* local_dv = multibodyLinkCol->m_multiBody->getDeltaVelocityVector();
- // add in the normal component of the va
- btScalar vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += (local_v[k] + local_dv[k]) * J_n[k];
- }
- va = cti.m_normal * vel;
- // add in the tangential components of the va
- vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += (local_v[k] + local_dv[k]) * J_t1[k];
- }
- va += m_anchor->t1 * vel;
- vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += (local_v[k] + local_dv[k]) * J_t2[k];
- }
- va += m_anchor->t2 * vel;
- }
- }
- }
- return va;
-}
-
-btScalar btDeformableNodeAnchorConstraint::solveConstraint(const btContactSolverInfo& infoGlobal)
-{
- const btSoftBody::sCti& cti = m_anchor->m_cti;
- btVector3 va = getVa();
- btVector3 vb = getVb();
- btVector3 vr = (vb - va);
- // + (m_anchor->m_node->m_x - cti.m_colObj->getWorldTransform() * m_anchor->m_local) * 10.0
- const btScalar dn = btDot(vr, vr);
- // dn is the normal component of velocity diffrerence. Approximates the residual. // todo xuchenhan@: this prob needs to be scaled by dt
- btScalar residualSquare = dn * dn;
- btVector3 impulse = m_anchor->m_c0 * vr;
- // apply impulse to deformable nodes involved and change their velocities
- applyImpulse(impulse);
-
- // apply impulse to the rigid/multibodies involved and change their velocities
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- btRigidBody* rigidCol = 0;
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- if (rigidCol)
- {
- rigidCol->applyImpulse(impulse, m_anchor->m_c1);
- }
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const btScalar* deltaV_normal = &m_anchor->jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- // apply normal component of the impulse
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof2(deltaV_normal, impulse.dot(cti.m_normal));
- // apply tangential component of the impulse
- const btScalar* deltaV_t1 = &m_anchor->jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof2(deltaV_t1, impulse.dot(m_anchor->t1));
- const btScalar* deltaV_t2 = &m_anchor->jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof2(deltaV_t2, impulse.dot(m_anchor->t2));
- }
- }
- return residualSquare;
-}
-
-btVector3 btDeformableNodeAnchorConstraint::getVb() const
-{
- return m_anchor->m_node->m_v;
-}
-
-void btDeformableNodeAnchorConstraint::applyImpulse(const btVector3& impulse)
-{
- btVector3 dv = impulse * m_anchor->m_c2;
- m_anchor->m_node->m_v -= dv;
-}
-
-/* ================ Deformable vs. Rigid =================== */
-btDeformableRigidContactConstraint::btDeformableRigidContactConstraint(const btSoftBody::DeformableRigidContact& c, const btContactSolverInfo& infoGlobal)
- : m_contact(&c), btDeformableContactConstraint(c.m_cti.m_normal, infoGlobal)
-{
- m_total_normal_dv.setZero();
- m_total_tangent_dv.setZero();
- // The magnitude of penetration is the depth of penetration.
- m_penetration = c.m_cti.m_offset;
- m_total_split_impulse = 0;
- m_binding = false;
-}
-
-btDeformableRigidContactConstraint::btDeformableRigidContactConstraint(const btDeformableRigidContactConstraint& other)
- : m_contact(other.m_contact), btDeformableContactConstraint(other), m_penetration(other.m_penetration), m_total_split_impulse(other.m_total_split_impulse), m_binding(other.m_binding)
-{
- m_total_normal_dv = other.m_total_normal_dv;
- m_total_tangent_dv = other.m_total_tangent_dv;
-}
-
-btVector3 btDeformableRigidContactConstraint::getVa() const
-{
- const btSoftBody::sCti& cti = m_contact->m_cti;
- btVector3 va(0, 0, 0);
- if (cti.m_colObj->hasContactResponse())
- {
- btRigidBody* rigidCol = 0;
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
-
- // grab the velocity of the rigid body
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- va = rigidCol ? (rigidCol->getVelocityInLocalPoint(m_contact->m_c1)) : btVector3(0, 0, 0);
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- const btScalar* J_n = &m_contact->jacobianData_normal.m_jacobians[0];
- const btScalar* J_t1 = &m_contact->jacobianData_t1.m_jacobians[0];
- const btScalar* J_t2 = &m_contact->jacobianData_t2.m_jacobians[0];
- const btScalar* local_v = multibodyLinkCol->m_multiBody->getVelocityVector();
- const btScalar* local_dv = multibodyLinkCol->m_multiBody->getDeltaVelocityVector();
- // add in the normal component of the va
- btScalar vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += (local_v[k] + local_dv[k]) * J_n[k];
- }
- va = cti.m_normal * vel;
- // add in the tangential components of the va
- vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += (local_v[k] + local_dv[k]) * J_t1[k];
- }
- va += m_contact->t1 * vel;
- vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += (local_v[k] + local_dv[k]) * J_t2[k];
- }
- va += m_contact->t2 * vel;
- }
- }
- }
- return va;
-}
-
-btVector3 btDeformableRigidContactConstraint::getSplitVa() const
-{
- const btSoftBody::sCti& cti = m_contact->m_cti;
- btVector3 va(0, 0, 0);
- if (cti.m_colObj->hasContactResponse())
- {
- btRigidBody* rigidCol = 0;
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
-
- // grab the velocity of the rigid body
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- va = rigidCol ? (rigidCol->getPushVelocityInLocalPoint(m_contact->m_c1)) : btVector3(0, 0, 0);
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- const btScalar* J_n = &m_contact->jacobianData_normal.m_jacobians[0];
- const btScalar* J_t1 = &m_contact->jacobianData_t1.m_jacobians[0];
- const btScalar* J_t2 = &m_contact->jacobianData_t2.m_jacobians[0];
- const btScalar* local_split_v = multibodyLinkCol->m_multiBody->getSplitVelocityVector();
- // add in the normal component of the va
- btScalar vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += local_split_v[k] * J_n[k];
- }
- va = cti.m_normal * vel;
- // add in the tangential components of the va
- vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += local_split_v[k] * J_t1[k];
- }
- va += m_contact->t1 * vel;
- vel = 0.0;
- for (int k = 0; k < ndof; ++k)
- {
- vel += local_split_v[k] * J_t2[k];
- }
- va += m_contact->t2 * vel;
- }
- }
- }
- return va;
-}
-
-btScalar btDeformableRigidContactConstraint::solveConstraint(const btContactSolverInfo& infoGlobal)
-{
- const btSoftBody::sCti& cti = m_contact->m_cti;
- btVector3 va = getVa();
- btVector3 vb = getVb();
- btVector3 vr = vb - va;
- btScalar dn = btDot(vr, cti.m_normal) + m_total_normal_dv.dot(cti.m_normal) * infoGlobal.m_deformable_cfm;
- if (m_penetration > 0)
- {
- dn += m_penetration / infoGlobal.m_timeStep;
- }
- if (!infoGlobal.m_splitImpulse)
- {
- dn += m_penetration * infoGlobal.m_deformable_erp / infoGlobal.m_timeStep;
- }
- // dn is the normal component of velocity diffrerence. Approximates the residual. // todo xuchenhan@: this prob needs to be scaled by dt
- btVector3 impulse = m_contact->m_c0 * (vr + m_total_normal_dv * infoGlobal.m_deformable_cfm + ((m_penetration > 0) ? m_penetration / infoGlobal.m_timeStep * cti.m_normal : btVector3(0, 0, 0)));
- if (!infoGlobal.m_splitImpulse)
- {
- impulse += m_contact->m_c0 * (m_penetration * infoGlobal.m_deformable_erp / infoGlobal.m_timeStep * cti.m_normal);
- }
- btVector3 impulse_normal = m_contact->m_c0 * (cti.m_normal * dn);
- btVector3 impulse_tangent = impulse - impulse_normal;
- if (dn > 0)
- {
- return 0;
- }
- m_binding = true;
- btScalar residualSquare = dn * dn;
- btVector3 old_total_tangent_dv = m_total_tangent_dv;
- // m_c5 is the inverse mass of the deformable node/face
- m_total_normal_dv -= m_contact->m_c5 * impulse_normal;
- m_total_tangent_dv -= m_contact->m_c5 * impulse_tangent;
-
- if (m_total_normal_dv.dot(cti.m_normal) < 0)
- {
- // separating in the normal direction
- m_binding = false;
- m_static = false;
- impulse_tangent.setZero();
- }
- else
- {
- if (m_total_normal_dv.norm() * m_contact->m_c3 < m_total_tangent_dv.norm())
- {
- // dynamic friction
- // with dynamic friction, the impulse are still applied to the two objects colliding, however, it does not pose a constraint in the cg solve, hence the change to dv merely serves to update velocity in the contact iterations.
- m_static = false;
- if (m_total_tangent_dv.safeNorm() < SIMD_EPSILON)
- {
- m_total_tangent_dv = btVector3(0, 0, 0);
- }
- else
- {
- m_total_tangent_dv = m_total_tangent_dv.normalized() * m_total_normal_dv.safeNorm() * m_contact->m_c3;
- }
- // impulse_tangent = -btScalar(1)/m_contact->m_c2 * (m_total_tangent_dv - old_total_tangent_dv);
- impulse_tangent = m_contact->m_c5.inverse() * (old_total_tangent_dv - m_total_tangent_dv);
- }
- else
- {
- // static friction
- m_static = true;
- }
- }
- impulse = impulse_normal + impulse_tangent;
- // apply impulse to deformable nodes involved and change their velocities
- applyImpulse(impulse);
- // apply impulse to the rigid/multibodies involved and change their velocities
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- btRigidBody* rigidCol = 0;
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- if (rigidCol)
- {
- rigidCol->applyImpulse(impulse, m_contact->m_c1);
- }
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const btScalar* deltaV_normal = &m_contact->jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- // apply normal component of the impulse
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof2(deltaV_normal, impulse.dot(cti.m_normal));
- if (impulse_tangent.norm() > SIMD_EPSILON)
- {
- // apply tangential component of the impulse
- const btScalar* deltaV_t1 = &m_contact->jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof2(deltaV_t1, impulse.dot(m_contact->t1));
- const btScalar* deltaV_t2 = &m_contact->jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof2(deltaV_t2, impulse.dot(m_contact->t2));
- }
- }
- }
- return residualSquare;
-}
-
-btScalar btDeformableRigidContactConstraint::solveSplitImpulse(const btContactSolverInfo& infoGlobal)
-{
- btScalar MAX_PENETRATION_CORRECTION = infoGlobal.m_deformable_maxErrorReduction;
- const btSoftBody::sCti& cti = m_contact->m_cti;
- btVector3 vb = getSplitVb();
- btVector3 va = getSplitVa();
- btScalar p = m_penetration;
- if (p > 0)
- {
- return 0;
- }
- btVector3 vr = vb - va;
- btScalar dn = btDot(vr, cti.m_normal) + p * infoGlobal.m_deformable_erp / infoGlobal.m_timeStep;
- if (dn > 0)
- {
- return 0;
- }
- if (m_total_split_impulse + dn > MAX_PENETRATION_CORRECTION)
- {
- dn = MAX_PENETRATION_CORRECTION - m_total_split_impulse;
- }
- if (m_total_split_impulse + dn < -MAX_PENETRATION_CORRECTION)
- {
- dn = -MAX_PENETRATION_CORRECTION - m_total_split_impulse;
- }
- m_total_split_impulse += dn;
-
- btScalar residualSquare = dn * dn;
- const btVector3 impulse = m_contact->m_c0 * (cti.m_normal * dn);
- applySplitImpulse(impulse);
-
- // apply split impulse to the rigid/multibodies involved and change their velocities
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- btRigidBody* rigidCol = 0;
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- if (rigidCol)
- {
- rigidCol->applyPushImpulse(impulse, m_contact->m_c1);
- }
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const btScalar* deltaV_normal = &m_contact->jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- // apply normal component of the impulse
- multibodyLinkCol->m_multiBody->applyDeltaSplitVeeMultiDof(deltaV_normal, impulse.dot(cti.m_normal));
- }
- }
- return residualSquare;
-}
-/* ================ Node vs. Rigid =================== */
-btDeformableNodeRigidContactConstraint::btDeformableNodeRigidContactConstraint(const btSoftBody::DeformableNodeRigidContact& contact, const btContactSolverInfo& infoGlobal)
- : m_node(contact.m_node), btDeformableRigidContactConstraint(contact, infoGlobal)
-{
-}
-
-btDeformableNodeRigidContactConstraint::btDeformableNodeRigidContactConstraint(const btDeformableNodeRigidContactConstraint& other)
- : m_node(other.m_node), btDeformableRigidContactConstraint(other)
-{
-}
-
-btVector3 btDeformableNodeRigidContactConstraint::getVb() const
-{
- return m_node->m_v;
-}
-
-btVector3 btDeformableNodeRigidContactConstraint::getSplitVb() const
-{
- return m_node->m_splitv;
-}
-
-btVector3 btDeformableNodeRigidContactConstraint::getDv(const btSoftBody::Node* node) const
-{
- return m_total_normal_dv + m_total_tangent_dv;
-}
-
-void btDeformableNodeRigidContactConstraint::applyImpulse(const btVector3& impulse)
-{
- const btSoftBody::DeformableNodeRigidContact* contact = getContact();
- btVector3 dv = contact->m_c5 * impulse;
- contact->m_node->m_v -= dv;
-}
-
-void btDeformableNodeRigidContactConstraint::applySplitImpulse(const btVector3& impulse)
-{
- const btSoftBody::DeformableNodeRigidContact* contact = getContact();
- btVector3 dv = contact->m_c5 * impulse;
- contact->m_node->m_splitv -= dv;
-}
-
-/* ================ Face vs. Rigid =================== */
-btDeformableFaceRigidContactConstraint::btDeformableFaceRigidContactConstraint(const btSoftBody::DeformableFaceRigidContact& contact, const btContactSolverInfo& infoGlobal, bool useStrainLimiting)
- : m_face(contact.m_face), m_useStrainLimiting(useStrainLimiting), btDeformableRigidContactConstraint(contact, infoGlobal)
-{
-}
-
-btDeformableFaceRigidContactConstraint::btDeformableFaceRigidContactConstraint(const btDeformableFaceRigidContactConstraint& other)
- : m_face(other.m_face), m_useStrainLimiting(other.m_useStrainLimiting), btDeformableRigidContactConstraint(other)
-{
-}
-
-btVector3 btDeformableFaceRigidContactConstraint::getVb() const
-{
- const btSoftBody::DeformableFaceRigidContact* contact = getContact();
- btVector3 vb = m_face->m_n[0]->m_v * contact->m_bary[0] + m_face->m_n[1]->m_v * contact->m_bary[1] + m_face->m_n[2]->m_v * contact->m_bary[2];
- return vb;
-}
-
-btVector3 btDeformableFaceRigidContactConstraint::getDv(const btSoftBody::Node* node) const
-{
- btVector3 face_dv = m_total_normal_dv + m_total_tangent_dv;
- const btSoftBody::DeformableFaceRigidContact* contact = getContact();
- if (m_face->m_n[0] == node)
- {
- return face_dv * contact->m_weights[0];
- }
- if (m_face->m_n[1] == node)
- {
- return face_dv * contact->m_weights[1];
- }
- btAssert(node == m_face->m_n[2]);
- return face_dv * contact->m_weights[2];
-}
-
-void btDeformableFaceRigidContactConstraint::applyImpulse(const btVector3& impulse)
-{
- const btSoftBody::DeformableFaceRigidContact* contact = getContact();
- btVector3 dv = impulse * contact->m_c2;
- btSoftBody::Face* face = contact->m_face;
-
- btVector3& v0 = face->m_n[0]->m_v;
- btVector3& v1 = face->m_n[1]->m_v;
- btVector3& v2 = face->m_n[2]->m_v;
- const btScalar& im0 = face->m_n[0]->m_im;
- const btScalar& im1 = face->m_n[1]->m_im;
- const btScalar& im2 = face->m_n[2]->m_im;
- if (im0 > 0)
- v0 -= dv * contact->m_weights[0];
- if (im1 > 0)
- v1 -= dv * contact->m_weights[1];
- if (im2 > 0)
- v2 -= dv * contact->m_weights[2];
- if (m_useStrainLimiting)
- {
- btScalar relaxation = 1. / btScalar(m_infoGlobal->m_numIterations);
- btScalar m01 = (relaxation / (im0 + im1));
- btScalar m02 = (relaxation / (im0 + im2));
- btScalar m12 = (relaxation / (im1 + im2));
-#ifdef USE_STRAIN_RATE_LIMITING
- // apply strain limiting to prevent the new velocity to change the current length of the edge by more than 1%.
- btScalar p = 0.01;
- btVector3& x0 = face->m_n[0]->m_x;
- btVector3& x1 = face->m_n[1]->m_x;
- btVector3& x2 = face->m_n[2]->m_x;
- const btVector3 x_diff[3] = {x1 - x0, x2 - x0, x2 - x1};
- const btVector3 v_diff[3] = {v1 - v0, v2 - v0, v2 - v1};
- btVector3 u[3];
- btScalar x_diff_dot_u, dn[3];
- btScalar dt = m_infoGlobal->m_timeStep;
- for (int i = 0; i < 3; ++i)
- {
- btScalar x_diff_norm = x_diff[i].safeNorm();
- btScalar x_diff_norm_new = (x_diff[i] + v_diff[i] * dt).safeNorm();
- btScalar strainRate = x_diff_norm_new / x_diff_norm;
- u[i] = v_diff[i];
- u[i].safeNormalize();
- if (x_diff_norm == 0 || (1 - p <= strainRate && strainRate <= 1 + p))
- {
- dn[i] = 0;
- continue;
- }
- x_diff_dot_u = btDot(x_diff[i], u[i]);
- btScalar s;
- if (1 - p > strainRate)
- {
- s = 1 / dt * (-x_diff_dot_u - btSqrt(x_diff_dot_u * x_diff_dot_u + (p * p - 2 * p) * x_diff_norm * x_diff_norm));
- }
- else
- {
- s = 1 / dt * (-x_diff_dot_u + btSqrt(x_diff_dot_u * x_diff_dot_u + (p * p + 2 * p) * x_diff_norm * x_diff_norm));
- }
- // x_diff_norm_new = (x_diff[i] + s * u[i] * dt).safeNorm();
- // strainRate = x_diff_norm_new/x_diff_norm;
- dn[i] = s - v_diff[i].safeNorm();
- }
- btVector3 dv0 = im0 * (m01 * u[0] * (-dn[0]) + m02 * u[1] * -(dn[1]));
- btVector3 dv1 = im1 * (m01 * u[0] * (dn[0]) + m12 * u[2] * (-dn[2]));
- btVector3 dv2 = im2 * (m12 * u[2] * (dn[2]) + m02 * u[1] * (dn[1]));
-#else
- // apply strain limiting to prevent undamped modes
- btVector3 dv0 = im0 * (m01 * (v1 - v0) + m02 * (v2 - v0));
- btVector3 dv1 = im1 * (m01 * (v0 - v1) + m12 * (v2 - v1));
- btVector3 dv2 = im2 * (m12 * (v1 - v2) + m02 * (v0 - v2));
-#endif
- v0 += dv0;
- v1 += dv1;
- v2 += dv2;
- }
-}
-
-btVector3 btDeformableFaceRigidContactConstraint::getSplitVb() const
-{
- const btSoftBody::DeformableFaceRigidContact* contact = getContact();
- btVector3 vb = (m_face->m_n[0]->m_splitv) * contact->m_bary[0] + (m_face->m_n[1]->m_splitv) * contact->m_bary[1] + (m_face->m_n[2]->m_splitv) * contact->m_bary[2];
- return vb;
-}
-
-void btDeformableFaceRigidContactConstraint::applySplitImpulse(const btVector3& impulse)
-{
- const btSoftBody::DeformableFaceRigidContact* contact = getContact();
- btVector3 dv = impulse * contact->m_c2;
- btSoftBody::Face* face = contact->m_face;
- btVector3& v0 = face->m_n[0]->m_splitv;
- btVector3& v1 = face->m_n[1]->m_splitv;
- btVector3& v2 = face->m_n[2]->m_splitv;
- const btScalar& im0 = face->m_n[0]->m_im;
- const btScalar& im1 = face->m_n[1]->m_im;
- const btScalar& im2 = face->m_n[2]->m_im;
- if (im0 > 0)
- {
- v0 -= dv * contact->m_weights[0];
- }
- if (im1 > 0)
- {
- v1 -= dv * contact->m_weights[1];
- }
- if (im2 > 0)
- {
- v2 -= dv * contact->m_weights[2];
- }
-}
-
-/* ================ Face vs. Node =================== */
-btDeformableFaceNodeContactConstraint::btDeformableFaceNodeContactConstraint(const btSoftBody::DeformableFaceNodeContact& contact, const btContactSolverInfo& infoGlobal)
- : m_node(contact.m_node), m_face(contact.m_face), m_contact(&contact), btDeformableContactConstraint(contact.m_normal, infoGlobal)
-{
- m_total_normal_dv.setZero();
- m_total_tangent_dv.setZero();
-}
-
-btVector3 btDeformableFaceNodeContactConstraint::getVa() const
-{
- return m_node->m_v;
-}
-
-btVector3 btDeformableFaceNodeContactConstraint::getVb() const
-{
- const btSoftBody::DeformableFaceNodeContact* contact = getContact();
- btVector3 vb = m_face->m_n[0]->m_v * contact->m_bary[0] + m_face->m_n[1]->m_v * contact->m_bary[1] + m_face->m_n[2]->m_v * contact->m_bary[2];
- return vb;
-}
-
-btVector3 btDeformableFaceNodeContactConstraint::getDv(const btSoftBody::Node* n) const
-{
- btVector3 dv = m_total_normal_dv + m_total_tangent_dv;
- if (n == m_node)
- return dv;
- const btSoftBody::DeformableFaceNodeContact* contact = getContact();
- if (m_face->m_n[0] == n)
- {
- return dv * contact->m_weights[0];
- }
- if (m_face->m_n[1] == n)
- {
- return dv * contact->m_weights[1];
- }
- btAssert(n == m_face->m_n[2]);
- return dv * contact->m_weights[2];
-}
-
-btScalar btDeformableFaceNodeContactConstraint::solveConstraint(const btContactSolverInfo& infoGlobal)
-{
- btVector3 va = getVa();
- btVector3 vb = getVb();
- btVector3 vr = vb - va;
- const btScalar dn = btDot(vr, m_contact->m_normal);
- // dn is the normal component of velocity diffrerence. Approximates the residual. // todo xuchenhan@: this prob needs to be scaled by dt
- btScalar residualSquare = dn * dn;
- btVector3 impulse = m_contact->m_c0 * vr;
- const btVector3 impulse_normal = m_contact->m_c0 * (m_contact->m_normal * dn);
- btVector3 impulse_tangent = impulse - impulse_normal;
-
- btVector3 old_total_tangent_dv = m_total_tangent_dv;
- // m_c2 is the inverse mass of the deformable node/face
- if (m_node->m_im > 0)
- {
- m_total_normal_dv -= impulse_normal * m_node->m_im;
- m_total_tangent_dv -= impulse_tangent * m_node->m_im;
- }
- else
- {
- m_total_normal_dv -= impulse_normal * m_contact->m_imf;
- m_total_tangent_dv -= impulse_tangent * m_contact->m_imf;
- }
-
- if (m_total_normal_dv.dot(m_contact->m_normal) > 0)
- {
- // separating in the normal direction
- m_static = false;
- m_total_tangent_dv = btVector3(0, 0, 0);
- impulse_tangent.setZero();
- }
- else
- {
- if (m_total_normal_dv.norm() * m_contact->m_friction < m_total_tangent_dv.norm())
- {
- // dynamic friction
- // with dynamic friction, the impulse are still applied to the two objects colliding, however, it does not pose a constraint in the cg solve, hence the change to dv merely serves to update velocity in the contact iterations.
- m_static = false;
- if (m_total_tangent_dv.safeNorm() < SIMD_EPSILON)
- {
- m_total_tangent_dv = btVector3(0, 0, 0);
- }
- else
- {
- m_total_tangent_dv = m_total_tangent_dv.normalized() * m_total_normal_dv.safeNorm() * m_contact->m_friction;
- }
- impulse_tangent = -btScalar(1) / m_node->m_im * (m_total_tangent_dv - old_total_tangent_dv);
- }
- else
- {
- // static friction
- m_static = true;
- }
- }
- impulse = impulse_normal + impulse_tangent;
- // apply impulse to deformable nodes involved and change their velocities
- applyImpulse(impulse);
- return residualSquare;
-}
-
-void btDeformableFaceNodeContactConstraint::applyImpulse(const btVector3& impulse)
-{
- const btSoftBody::DeformableFaceNodeContact* contact = getContact();
- btVector3 dva = impulse * contact->m_node->m_im;
- btVector3 dvb = impulse * contact->m_imf;
- if (contact->m_node->m_im > 0)
- {
- contact->m_node->m_v += dva;
- }
-
- btSoftBody::Face* face = contact->m_face;
- btVector3& v0 = face->m_n[0]->m_v;
- btVector3& v1 = face->m_n[1]->m_v;
- btVector3& v2 = face->m_n[2]->m_v;
- const btScalar& im0 = face->m_n[0]->m_im;
- const btScalar& im1 = face->m_n[1]->m_im;
- const btScalar& im2 = face->m_n[2]->m_im;
- if (im0 > 0)
- {
- v0 -= dvb * contact->m_weights[0];
- }
- if (im1 > 0)
- {
- v1 -= dvb * contact->m_weights[1];
- }
- if (im2 > 0)
- {
- v2 -= dvb * contact->m_weights[2];
- }
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.h b/thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.h
deleted file mode 100644
index 1e2c9f5bce..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableContactConstraint.h
+++ /dev/null
@@ -1,284 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_DEFORMABLE_CONTACT_CONSTRAINT_H
-#define BT_DEFORMABLE_CONTACT_CONSTRAINT_H
-#include "btSoftBody.h"
-
-// btDeformableContactConstraint is an abstract class specifying the method that each type of contact constraint needs to implement
-class btDeformableContactConstraint
-{
-public:
- // True if the friction is static
- // False if the friction is dynamic
- bool m_static;
- const btContactSolverInfo* m_infoGlobal;
-
- // normal of the contact
- btVector3 m_normal;
-
- btDeformableContactConstraint(const btVector3& normal, const btContactSolverInfo& infoGlobal) : m_static(false), m_normal(normal), m_infoGlobal(&infoGlobal)
- {
- }
-
- btDeformableContactConstraint(bool isStatic, const btVector3& normal, const btContactSolverInfo& infoGlobal) : m_static(isStatic), m_normal(normal), m_infoGlobal(&infoGlobal)
- {
- }
-
- btDeformableContactConstraint() {}
-
- btDeformableContactConstraint(const btDeformableContactConstraint& other)
- : m_static(other.m_static), m_normal(other.m_normal), m_infoGlobal(other.m_infoGlobal)
- {
- }
-
- virtual ~btDeformableContactConstraint() {}
-
- // solve the constraint with inelastic impulse and return the error, which is the square of normal component of velocity diffrerence
- // the constraint is solved by calculating the impulse between object A and B in the contact and apply the impulse to both objects involved in the contact
- virtual btScalar solveConstraint(const btContactSolverInfo& infoGlobal) = 0;
-
- // get the velocity of the object A in the contact
- virtual btVector3 getVa() const = 0;
-
- // get the velocity of the object B in the contact
- virtual btVector3 getVb() const = 0;
-
- // get the velocity change of the soft body node in the constraint
- virtual btVector3 getDv(const btSoftBody::Node*) const = 0;
-
- // apply impulse to the soft body node and/or face involved
- virtual void applyImpulse(const btVector3& impulse) = 0;
-
- // scale the penetration depth by erp
- virtual void setPenetrationScale(btScalar scale) = 0;
-};
-
-//
-// Constraint that a certain node in the deformable objects cannot move
-class btDeformableStaticConstraint : public btDeformableContactConstraint
-{
-public:
- btSoftBody::Node* m_node;
-
- btDeformableStaticConstraint(btSoftBody::Node* node, const btContactSolverInfo& infoGlobal) : m_node(node), btDeformableContactConstraint(false, btVector3(0, 0, 0), infoGlobal)
- {
- }
- btDeformableStaticConstraint() {}
- btDeformableStaticConstraint(const btDeformableStaticConstraint& other)
- : m_node(other.m_node), btDeformableContactConstraint(other)
- {
- }
-
- virtual ~btDeformableStaticConstraint() {}
-
- virtual btScalar solveConstraint(const btContactSolverInfo& infoGlobal)
- {
- return 0;
- }
-
- virtual btVector3 getVa() const
- {
- return btVector3(0, 0, 0);
- }
-
- virtual btVector3 getVb() const
- {
- return btVector3(0, 0, 0);
- }
-
- virtual btVector3 getDv(const btSoftBody::Node* n) const
- {
- return btVector3(0, 0, 0);
- }
-
- virtual void applyImpulse(const btVector3& impulse) {}
- virtual void setPenetrationScale(btScalar scale) {}
-};
-
-//
-// Anchor Constraint between rigid and deformable node
-class btDeformableNodeAnchorConstraint : public btDeformableContactConstraint
-{
-public:
- const btSoftBody::DeformableNodeRigidAnchor* m_anchor;
-
- btDeformableNodeAnchorConstraint(const btSoftBody::DeformableNodeRigidAnchor& c, const btContactSolverInfo& infoGlobal);
- btDeformableNodeAnchorConstraint(const btDeformableNodeAnchorConstraint& other);
- btDeformableNodeAnchorConstraint() {}
- virtual ~btDeformableNodeAnchorConstraint()
- {
- }
- virtual btScalar solveConstraint(const btContactSolverInfo& infoGlobal);
-
- // object A is the rigid/multi body, and object B is the deformable node/face
- virtual btVector3 getVa() const;
- // get the velocity of the deformable node in contact
- virtual btVector3 getVb() const;
- virtual btVector3 getDv(const btSoftBody::Node* n) const
- {
- return btVector3(0, 0, 0);
- }
- virtual void applyImpulse(const btVector3& impulse);
-
- virtual void setPenetrationScale(btScalar scale) {}
-};
-
-//
-// Constraint between rigid/multi body and deformable objects
-class btDeformableRigidContactConstraint : public btDeformableContactConstraint
-{
-public:
- btVector3 m_total_normal_dv;
- btVector3 m_total_tangent_dv;
- btScalar m_penetration;
- btScalar m_total_split_impulse;
- bool m_binding;
- const btSoftBody::DeformableRigidContact* m_contact;
-
- btDeformableRigidContactConstraint(const btSoftBody::DeformableRigidContact& c, const btContactSolverInfo& infoGlobal);
- btDeformableRigidContactConstraint(const btDeformableRigidContactConstraint& other);
- btDeformableRigidContactConstraint() {}
- virtual ~btDeformableRigidContactConstraint()
- {
- }
-
- // object A is the rigid/multi body, and object B is the deformable node/face
- virtual btVector3 getVa() const;
-
- // get the split impulse velocity of the deformable face at the contact point
- virtual btVector3 getSplitVb() const = 0;
-
- // get the split impulse velocity of the rigid/multibdoy at the contaft
- virtual btVector3 getSplitVa() const;
-
- virtual btScalar solveConstraint(const btContactSolverInfo& infoGlobal);
-
- virtual void setPenetrationScale(btScalar scale)
- {
- m_penetration *= scale;
- }
-
- btScalar solveSplitImpulse(const btContactSolverInfo& infoGlobal);
-
- virtual void applySplitImpulse(const btVector3& impulse) = 0;
-};
-
-//
-// Constraint between rigid/multi body and deformable objects nodes
-class btDeformableNodeRigidContactConstraint : public btDeformableRigidContactConstraint
-{
-public:
- // the deformable node in contact
- btSoftBody::Node* m_node;
-
- btDeformableNodeRigidContactConstraint(const btSoftBody::DeformableNodeRigidContact& contact, const btContactSolverInfo& infoGlobal);
- btDeformableNodeRigidContactConstraint(const btDeformableNodeRigidContactConstraint& other);
- btDeformableNodeRigidContactConstraint() {}
- virtual ~btDeformableNodeRigidContactConstraint()
- {
- }
-
- // get the velocity of the deformable node in contact
- virtual btVector3 getVb() const;
-
- // get the split impulse velocity of the deformable face at the contact point
- virtual btVector3 getSplitVb() const;
-
- // get the velocity change of the input soft body node in the constraint
- virtual btVector3 getDv(const btSoftBody::Node*) const;
-
- // cast the contact to the desired type
- const btSoftBody::DeformableNodeRigidContact* getContact() const
- {
- return static_cast<const btSoftBody::DeformableNodeRigidContact*>(m_contact);
- }
-
- virtual void applyImpulse(const btVector3& impulse);
-
- virtual void applySplitImpulse(const btVector3& impulse);
-};
-
-//
-// Constraint between rigid/multi body and deformable objects faces
-class btDeformableFaceRigidContactConstraint : public btDeformableRigidContactConstraint
-{
-public:
- btSoftBody::Face* m_face;
- bool m_useStrainLimiting;
- btDeformableFaceRigidContactConstraint(const btSoftBody::DeformableFaceRigidContact& contact, const btContactSolverInfo& infoGlobal, bool useStrainLimiting);
- btDeformableFaceRigidContactConstraint(const btDeformableFaceRigidContactConstraint& other);
- btDeformableFaceRigidContactConstraint() : m_useStrainLimiting(false) {}
- virtual ~btDeformableFaceRigidContactConstraint()
- {
- }
-
- // get the velocity of the deformable face at the contact point
- virtual btVector3 getVb() const;
-
- // get the split impulse velocity of the deformable face at the contact point
- virtual btVector3 getSplitVb() const;
-
- // get the velocity change of the input soft body node in the constraint
- virtual btVector3 getDv(const btSoftBody::Node*) const;
-
- // cast the contact to the desired type
- const btSoftBody::DeformableFaceRigidContact* getContact() const
- {
- return static_cast<const btSoftBody::DeformableFaceRigidContact*>(m_contact);
- }
-
- virtual void applyImpulse(const btVector3& impulse);
-
- virtual void applySplitImpulse(const btVector3& impulse);
-};
-
-//
-// Constraint between deformable objects faces and deformable objects nodes
-class btDeformableFaceNodeContactConstraint : public btDeformableContactConstraint
-{
-public:
- btSoftBody::Node* m_node;
- btSoftBody::Face* m_face;
- const btSoftBody::DeformableFaceNodeContact* m_contact;
- btVector3 m_total_normal_dv;
- btVector3 m_total_tangent_dv;
-
- btDeformableFaceNodeContactConstraint(const btSoftBody::DeformableFaceNodeContact& contact, const btContactSolverInfo& infoGlobal);
- btDeformableFaceNodeContactConstraint() {}
- virtual ~btDeformableFaceNodeContactConstraint() {}
-
- virtual btScalar solveConstraint(const btContactSolverInfo& infoGlobal);
-
- // get the velocity of the object A in the contact
- virtual btVector3 getVa() const;
-
- // get the velocity of the object B in the contact
- virtual btVector3 getVb() const;
-
- // get the velocity change of the input soft body node in the constraint
- virtual btVector3 getDv(const btSoftBody::Node*) const;
-
- // cast the contact to the desired type
- const btSoftBody::DeformableFaceNodeContact* getContact() const
- {
- return static_cast<const btSoftBody::DeformableFaceNodeContact*>(m_contact);
- }
-
- virtual void applyImpulse(const btVector3& impulse);
-
- virtual void setPenetrationScale(btScalar scale) {}
-};
-#endif /* BT_DEFORMABLE_CONTACT_CONSTRAINT_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.cpp b/thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.cpp
deleted file mode 100644
index 7f67260ce6..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.cpp
+++ /dev/null
@@ -1,639 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#include "btDeformableContactProjection.h"
-#include "btDeformableMultiBodyDynamicsWorld.h"
-#include <algorithm>
-#include <cmath>
-btScalar btDeformableContactProjection::update(btCollisionObject** deformableBodies, int numDeformableBodies, const btContactSolverInfo& infoGlobal)
-{
- btScalar residualSquare = 0;
- for (int i = 0; i < numDeformableBodies; ++i)
- {
- for (int j = 0; j < m_softBodies.size(); ++j)
- {
- btCollisionObject* psb = m_softBodies[j];
- if (psb != deformableBodies[i])
- {
- continue;
- }
- for (int k = 0; k < m_nodeRigidConstraints[j].size(); ++k)
- {
- btDeformableNodeRigidContactConstraint& constraint = m_nodeRigidConstraints[j][k];
- btScalar localResidualSquare = constraint.solveConstraint(infoGlobal);
- residualSquare = btMax(residualSquare, localResidualSquare);
- }
- for (int k = 0; k < m_nodeAnchorConstraints[j].size(); ++k)
- {
- btDeformableNodeAnchorConstraint& constraint = m_nodeAnchorConstraints[j][k];
- btScalar localResidualSquare = constraint.solveConstraint(infoGlobal);
- residualSquare = btMax(residualSquare, localResidualSquare);
- }
- for (int k = 0; k < m_faceRigidConstraints[j].size(); ++k)
- {
- btDeformableFaceRigidContactConstraint& constraint = m_faceRigidConstraints[j][k];
- btScalar localResidualSquare = constraint.solveConstraint(infoGlobal);
- residualSquare = btMax(residualSquare, localResidualSquare);
- }
- for (int k = 0; k < m_deformableConstraints[j].size(); ++k)
- {
- btDeformableFaceNodeContactConstraint& constraint = m_deformableConstraints[j][k];
- btScalar localResidualSquare = constraint.solveConstraint(infoGlobal);
- residualSquare = btMax(residualSquare, localResidualSquare);
- }
- }
- }
- return residualSquare;
-}
-
-btScalar btDeformableContactProjection::solveSplitImpulse(btCollisionObject** deformableBodies, int numDeformableBodies, const btContactSolverInfo& infoGlobal)
-{
- btScalar residualSquare = 0;
- for (int i = 0; i < numDeformableBodies; ++i)
- {
- for (int j = 0; j < m_softBodies.size(); ++j)
- {
- btCollisionObject* psb = m_softBodies[j];
- if (psb != deformableBodies[i])
- {
- continue;
- }
- for (int k = 0; k < m_nodeRigidConstraints[j].size(); ++k)
- {
- btDeformableNodeRigidContactConstraint& constraint = m_nodeRigidConstraints[j][k];
- btScalar localResidualSquare = constraint.solveSplitImpulse(infoGlobal);
- residualSquare = btMax(residualSquare, localResidualSquare);
- }
- for (int k = 0; k < m_faceRigidConstraints[j].size(); ++k)
- {
- btDeformableFaceRigidContactConstraint& constraint = m_faceRigidConstraints[j][k];
- btScalar localResidualSquare = constraint.solveSplitImpulse(infoGlobal);
- residualSquare = btMax(residualSquare, localResidualSquare);
- }
- }
- }
- return residualSquare;
-}
-
-void btDeformableContactProjection::setConstraints(const btContactSolverInfo& infoGlobal)
-{
- BT_PROFILE("setConstraints");
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
-
- // set Dirichlet constraint
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- if (psb->m_nodes[j].m_im == 0)
- {
- btDeformableStaticConstraint static_constraint(&psb->m_nodes[j], infoGlobal);
- m_staticConstraints[i].push_back(static_constraint);
- }
- }
-
- // set up deformable anchors
- for (int j = 0; j < psb->m_deformableAnchors.size(); ++j)
- {
- btSoftBody::DeformableNodeRigidAnchor& anchor = psb->m_deformableAnchors[j];
- // skip fixed points
- if (anchor.m_node->m_im == 0)
- {
- continue;
- }
- anchor.m_c1 = anchor.m_cti.m_colObj->getWorldTransform().getBasis() * anchor.m_local;
- btDeformableNodeAnchorConstraint constraint(anchor, infoGlobal);
- m_nodeAnchorConstraints[i].push_back(constraint);
- }
-
- // set Deformable Node vs. Rigid constraint
- for (int j = 0; j < psb->m_nodeRigidContacts.size(); ++j)
- {
- const btSoftBody::DeformableNodeRigidContact& contact = psb->m_nodeRigidContacts[j];
- // skip fixed points
- if (contact.m_node->m_im == 0)
- {
- continue;
- }
- btDeformableNodeRigidContactConstraint constraint(contact, infoGlobal);
- m_nodeRigidConstraints[i].push_back(constraint);
- }
-
- // set Deformable Face vs. Rigid constraint
- for (int j = 0; j < psb->m_faceRigidContacts.size(); ++j)
- {
- const btSoftBody::DeformableFaceRigidContact& contact = psb->m_faceRigidContacts[j];
- // skip fixed faces
- if (contact.m_c2 == 0)
- {
- continue;
- }
- btDeformableFaceRigidContactConstraint constraint(contact, infoGlobal, m_useStrainLimiting);
- m_faceRigidConstraints[i].push_back(constraint);
- }
- }
-}
-
-void btDeformableContactProjection::project(TVStack& x)
-{
-#ifndef USE_MGS
- const int dim = 3;
- for (int index = 0; index < m_projectionsDict.size(); ++index)
- {
- btAlignedObjectArray<btVector3>& projectionDirs = *m_projectionsDict.getAtIndex(index);
- size_t i = m_projectionsDict.getKeyAtIndex(index).getUid1();
- if (projectionDirs.size() >= dim)
- {
- // static node
- x[i].setZero();
- continue;
- }
- else if (projectionDirs.size() == 2)
- {
- btVector3 dir0 = projectionDirs[0];
- btVector3 dir1 = projectionDirs[1];
- btVector3 free_dir = btCross(dir0, dir1);
- if (free_dir.safeNorm() < SIMD_EPSILON)
- {
- x[i] -= x[i].dot(dir0) * dir0;
- }
- else
- {
- free_dir.normalize();
- x[i] = x[i].dot(free_dir) * free_dir;
- }
- }
- else
- {
- btAssert(projectionDirs.size() == 1);
- btVector3 dir0 = projectionDirs[0];
- x[i] -= x[i].dot(dir0) * dir0;
- }
- }
-#else
- btReducedVector p(x.size());
- for (int i = 0; i < m_projections.size(); ++i)
- {
- p += (m_projections[i].dot(x) * m_projections[i]);
- }
- for (int i = 0; i < p.m_indices.size(); ++i)
- {
- x[p.m_indices[i]] -= p.m_vecs[i];
- }
-#endif
-}
-
-void btDeformableContactProjection::setProjection()
-{
-#ifndef USE_MGS
- BT_PROFILE("btDeformableContactProjection::setProjection");
- btAlignedObjectArray<btVector3> units;
- units.push_back(btVector3(1, 0, 0));
- units.push_back(btVector3(0, 1, 0));
- units.push_back(btVector3(0, 0, 1));
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < m_staticConstraints[i].size(); ++j)
- {
- int index = m_staticConstraints[i][j].m_node->index;
- m_staticConstraints[i][j].m_node->m_constrained = true;
- if (m_projectionsDict.find(index) == NULL)
- {
- m_projectionsDict.insert(index, units);
- }
- else
- {
- btAlignedObjectArray<btVector3>& projections = *m_projectionsDict[index];
- for (int k = 0; k < 3; ++k)
- {
- projections.push_back(units[k]);
- }
- }
- }
- for (int j = 0; j < m_nodeAnchorConstraints[i].size(); ++j)
- {
- int index = m_nodeAnchorConstraints[i][j].m_anchor->m_node->index;
- m_nodeAnchorConstraints[i][j].m_anchor->m_node->m_constrained = true;
- if (m_projectionsDict.find(index) == NULL)
- {
- m_projectionsDict.insert(index, units);
- }
- else
- {
- btAlignedObjectArray<btVector3>& projections = *m_projectionsDict[index];
- for (int k = 0; k < 3; ++k)
- {
- projections.push_back(units[k]);
- }
- }
- }
- for (int j = 0; j < m_nodeRigidConstraints[i].size(); ++j)
- {
- int index = m_nodeRigidConstraints[i][j].m_node->index;
- m_nodeRigidConstraints[i][j].m_node->m_constrained = true;
- if (m_nodeRigidConstraints[i][j].m_binding)
- {
- if (m_nodeRigidConstraints[i][j].m_static)
- {
- if (m_projectionsDict.find(index) == NULL)
- {
- m_projectionsDict.insert(index, units);
- }
- else
- {
- btAlignedObjectArray<btVector3>& projections = *m_projectionsDict[index];
- for (int k = 0; k < 3; ++k)
- {
- projections.push_back(units[k]);
- }
- }
- }
- else
- {
- if (m_projectionsDict.find(index) == NULL)
- {
- btAlignedObjectArray<btVector3> projections;
- projections.push_back(m_nodeRigidConstraints[i][j].m_normal);
- m_projectionsDict.insert(index, projections);
- }
- else
- {
- btAlignedObjectArray<btVector3>& projections = *m_projectionsDict[index];
- projections.push_back(m_nodeRigidConstraints[i][j].m_normal);
- }
- }
- }
- }
- for (int j = 0; j < m_faceRigidConstraints[i].size(); ++j)
- {
- const btSoftBody::Face* face = m_faceRigidConstraints[i][j].m_face;
- if (m_faceRigidConstraints[i][j].m_binding)
- {
- for (int k = 0; k < 3; ++k)
- {
- face->m_n[k]->m_constrained = true;
- }
- }
- for (int k = 0; k < 3; ++k)
- {
- btSoftBody::Node* node = face->m_n[k];
- int index = node->index;
- if (m_faceRigidConstraints[i][j].m_static)
- {
- if (m_projectionsDict.find(index) == NULL)
- {
- m_projectionsDict.insert(index, units);
- }
- else
- {
- btAlignedObjectArray<btVector3>& projections = *m_projectionsDict[index];
- for (int l = 0; l < 3; ++l)
- {
- projections.push_back(units[l]);
- }
- }
- }
- else
- {
- if (m_projectionsDict.find(index) == NULL)
- {
- btAlignedObjectArray<btVector3> projections;
- projections.push_back(m_faceRigidConstraints[i][j].m_normal);
- m_projectionsDict.insert(index, projections);
- }
- else
- {
- btAlignedObjectArray<btVector3>& projections = *m_projectionsDict[index];
- projections.push_back(m_faceRigidConstraints[i][j].m_normal);
- }
- }
- }
- }
- }
-#else
- int dof = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- dof += m_softBodies[i]->m_nodes.size();
- }
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < m_staticConstraints[i].size(); ++j)
- {
- int index = m_staticConstraints[i][j].m_node->index;
- m_staticConstraints[i][j].m_node->m_penetration = SIMD_INFINITY;
- btAlignedObjectArray<int> indices;
- btAlignedObjectArray<btVector3> vecs1, vecs2, vecs3;
- indices.push_back(index);
- vecs1.push_back(btVector3(1, 0, 0));
- vecs2.push_back(btVector3(0, 1, 0));
- vecs3.push_back(btVector3(0, 0, 1));
- m_projections.push_back(btReducedVector(dof, indices, vecs1));
- m_projections.push_back(btReducedVector(dof, indices, vecs2));
- m_projections.push_back(btReducedVector(dof, indices, vecs3));
- }
-
- for (int j = 0; j < m_nodeAnchorConstraints[i].size(); ++j)
- {
- int index = m_nodeAnchorConstraints[i][j].m_anchor->m_node->index;
- m_nodeAnchorConstraints[i][j].m_anchor->m_node->m_penetration = SIMD_INFINITY;
- btAlignedObjectArray<int> indices;
- btAlignedObjectArray<btVector3> vecs1, vecs2, vecs3;
- indices.push_back(index);
- vecs1.push_back(btVector3(1, 0, 0));
- vecs2.push_back(btVector3(0, 1, 0));
- vecs3.push_back(btVector3(0, 0, 1));
- m_projections.push_back(btReducedVector(dof, indices, vecs1));
- m_projections.push_back(btReducedVector(dof, indices, vecs2));
- m_projections.push_back(btReducedVector(dof, indices, vecs3));
- }
- for (int j = 0; j < m_nodeRigidConstraints[i].size(); ++j)
- {
- int index = m_nodeRigidConstraints[i][j].m_node->index;
- m_nodeRigidConstraints[i][j].m_node->m_penetration = -m_nodeRigidConstraints[i][j].getContact()->m_cti.m_offset;
- btAlignedObjectArray<int> indices;
- indices.push_back(index);
- btAlignedObjectArray<btVector3> vecs1, vecs2, vecs3;
- if (m_nodeRigidConstraints[i][j].m_static)
- {
- vecs1.push_back(btVector3(1, 0, 0));
- vecs2.push_back(btVector3(0, 1, 0));
- vecs3.push_back(btVector3(0, 0, 1));
- m_projections.push_back(btReducedVector(dof, indices, vecs1));
- m_projections.push_back(btReducedVector(dof, indices, vecs2));
- m_projections.push_back(btReducedVector(dof, indices, vecs3));
- }
- else
- {
- vecs1.push_back(m_nodeRigidConstraints[i][j].m_normal);
- m_projections.push_back(btReducedVector(dof, indices, vecs1));
- }
- }
- for (int j = 0; j < m_faceRigidConstraints[i].size(); ++j)
- {
- const btSoftBody::Face* face = m_faceRigidConstraints[i][j].m_face;
- btVector3 bary = m_faceRigidConstraints[i][j].getContact()->m_bary;
- btScalar penetration = -m_faceRigidConstraints[i][j].getContact()->m_cti.m_offset;
- for (int k = 0; k < 3; ++k)
- {
- face->m_n[k]->m_penetration = btMax(face->m_n[k]->m_penetration, penetration);
- }
- if (m_faceRigidConstraints[i][j].m_static)
- {
- for (int l = 0; l < 3; ++l)
- {
- btReducedVector rv(dof);
- for (int k = 0; k < 3; ++k)
- {
- rv.m_indices.push_back(face->m_n[k]->index);
- btVector3 v(0, 0, 0);
- v[l] = bary[k];
- rv.m_vecs.push_back(v);
- rv.sort();
- }
- m_projections.push_back(rv);
- }
- }
- else
- {
- btReducedVector rv(dof);
- for (int k = 0; k < 3; ++k)
- {
- rv.m_indices.push_back(face->m_n[k]->index);
- rv.m_vecs.push_back(bary[k] * m_faceRigidConstraints[i][j].m_normal);
- rv.sort();
- }
- m_projections.push_back(rv);
- }
- }
- }
- btModifiedGramSchmidt<btReducedVector> mgs(m_projections);
- mgs.solve();
- m_projections = mgs.m_out;
-#endif
-}
-
-void btDeformableContactProjection::checkConstraints(const TVStack& x)
-{
- for (int i = 0; i < m_lagrangeMultipliers.size(); ++i)
- {
- btVector3 d(0, 0, 0);
- const LagrangeMultiplier& lm = m_lagrangeMultipliers[i];
- for (int j = 0; j < lm.m_num_constraints; ++j)
- {
- for (int k = 0; k < lm.m_num_nodes; ++k)
- {
- d[j] += lm.m_weights[k] * x[lm.m_indices[k]].dot(lm.m_dirs[j]);
- }
- }
- // printf("d = %f, %f, %f\n", d[0], d[1], d[2]);
- // printf("val = %f, %f, %f\n", lm.m_vals[0], lm.m_vals[1], lm.m_vals[2]);
- }
-}
-
-void btDeformableContactProjection::setLagrangeMultiplier()
-{
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < m_staticConstraints[i].size(); ++j)
- {
- int index = m_staticConstraints[i][j].m_node->index;
- m_staticConstraints[i][j].m_node->m_constrained = true;
- LagrangeMultiplier lm;
- lm.m_num_nodes = 1;
- lm.m_indices[0] = index;
- lm.m_weights[0] = 1.0;
- lm.m_num_constraints = 3;
- lm.m_dirs[0] = btVector3(1, 0, 0);
- lm.m_dirs[1] = btVector3(0, 1, 0);
- lm.m_dirs[2] = btVector3(0, 0, 1);
- m_lagrangeMultipliers.push_back(lm);
- }
- for (int j = 0; j < m_nodeAnchorConstraints[i].size(); ++j)
- {
- int index = m_nodeAnchorConstraints[i][j].m_anchor->m_node->index;
- m_nodeAnchorConstraints[i][j].m_anchor->m_node->m_constrained = true;
- LagrangeMultiplier lm;
- lm.m_num_nodes = 1;
- lm.m_indices[0] = index;
- lm.m_weights[0] = 1.0;
- lm.m_num_constraints = 3;
- lm.m_dirs[0] = btVector3(1, 0, 0);
- lm.m_dirs[1] = btVector3(0, 1, 0);
- lm.m_dirs[2] = btVector3(0, 0, 1);
- m_lagrangeMultipliers.push_back(lm);
- }
-
- for (int j = 0; j < m_nodeRigidConstraints[i].size(); ++j)
- {
- if (!m_nodeRigidConstraints[i][j].m_binding)
- {
- continue;
- }
- int index = m_nodeRigidConstraints[i][j].m_node->index;
- m_nodeRigidConstraints[i][j].m_node->m_constrained = true;
- LagrangeMultiplier lm;
- lm.m_num_nodes = 1;
- lm.m_indices[0] = index;
- lm.m_weights[0] = 1.0;
- if (m_nodeRigidConstraints[i][j].m_static)
- {
- lm.m_num_constraints = 3;
- lm.m_dirs[0] = btVector3(1, 0, 0);
- lm.m_dirs[1] = btVector3(0, 1, 0);
- lm.m_dirs[2] = btVector3(0, 0, 1);
- }
- else
- {
- lm.m_num_constraints = 1;
- lm.m_dirs[0] = m_nodeRigidConstraints[i][j].m_normal;
- }
- m_lagrangeMultipliers.push_back(lm);
- }
-
- for (int j = 0; j < m_faceRigidConstraints[i].size(); ++j)
- {
- if (!m_faceRigidConstraints[i][j].m_binding)
- {
- continue;
- }
- btSoftBody::Face* face = m_faceRigidConstraints[i][j].m_face;
-
- btVector3 bary = m_faceRigidConstraints[i][j].getContact()->m_bary;
- LagrangeMultiplier lm;
- lm.m_num_nodes = 3;
-
- for (int k = 0; k < 3; ++k)
- {
- face->m_n[k]->m_constrained = true;
- lm.m_indices[k] = face->m_n[k]->index;
- lm.m_weights[k] = bary[k];
- }
- if (m_faceRigidConstraints[i][j].m_static)
- {
- face->m_pcontact[3] = 1;
- lm.m_num_constraints = 3;
- lm.m_dirs[0] = btVector3(1, 0, 0);
- lm.m_dirs[1] = btVector3(0, 1, 0);
- lm.m_dirs[2] = btVector3(0, 0, 1);
- }
- else
- {
- face->m_pcontact[3] = 0;
- lm.m_num_constraints = 1;
- lm.m_dirs[0] = m_faceRigidConstraints[i][j].m_normal;
- }
- m_lagrangeMultipliers.push_back(lm);
- }
- }
-}
-
-//
-void btDeformableContactProjection::applyDynamicFriction(TVStack& f)
-{
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- for (int j = 0; j < m_nodeRigidConstraints[i].size(); ++j)
- {
- const btDeformableNodeRigidContactConstraint& constraint = m_nodeRigidConstraints[i][j];
- const btSoftBody::Node* node = constraint.m_node;
- if (node->m_im != 0)
- {
- int index = node->index;
- f[index] += constraint.getDv(node) * (1. / node->m_im);
- }
- }
- for (int j = 0; j < m_faceRigidConstraints[i].size(); ++j)
- {
- const btDeformableFaceRigidContactConstraint& constraint = m_faceRigidConstraints[i][j];
- const btSoftBody::Face* face = constraint.getContact()->m_face;
- for (int k = 0; k < 3; ++k)
- {
- const btSoftBody::Node* node = face->m_n[k];
- if (node->m_im != 0)
- {
- int index = node->index;
- f[index] += constraint.getDv(node) * (1. / node->m_im);
- }
- }
- }
- for (int j = 0; j < m_deformableConstraints[i].size(); ++j)
- {
- const btDeformableFaceNodeContactConstraint& constraint = m_deformableConstraints[i][j];
- const btSoftBody::Face* face = constraint.getContact()->m_face;
- const btSoftBody::Node* node = constraint.getContact()->m_node;
- if (node->m_im != 0)
- {
- int index = node->index;
- f[index] += constraint.getDv(node) * (1. / node->m_im);
- }
- for (int k = 0; k < 3; ++k)
- {
- const btSoftBody::Node* node = face->m_n[k];
- if (node->m_im != 0)
- {
- int index = node->index;
- f[index] += constraint.getDv(node) * (1. / node->m_im);
- }
- }
- }
- }
-}
-
-void btDeformableContactProjection::reinitialize(bool nodeUpdated)
-{
- int N = m_softBodies.size();
- if (nodeUpdated)
- {
- m_staticConstraints.resize(N);
- m_nodeAnchorConstraints.resize(N);
- m_nodeRigidConstraints.resize(N);
- m_faceRigidConstraints.resize(N);
- m_deformableConstraints.resize(N);
- }
- for (int i = 0; i < N; ++i)
- {
- m_staticConstraints[i].clear();
- m_nodeAnchorConstraints[i].clear();
- m_nodeRigidConstraints[i].clear();
- m_faceRigidConstraints[i].clear();
- m_deformableConstraints[i].clear();
- }
-#ifndef USE_MGS
- m_projectionsDict.clear();
-#else
- m_projections.clear();
-#endif
- m_lagrangeMultipliers.clear();
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.h b/thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.h
deleted file mode 100644
index 4964eaf990..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableContactProjection.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_CONTACT_PROJECTION_H
-#define BT_CONTACT_PROJECTION_H
-#include "btCGProjection.h"
-#include "btSoftBody.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-#include "btDeformableContactConstraint.h"
-#include "LinearMath/btHashMap.h"
-#include "LinearMath/btReducedVector.h"
-#include "LinearMath/btModifiedGramSchmidt.h"
-#include <vector>
-
-struct LagrangeMultiplier
-{
- int m_num_constraints; // Number of constraints
- int m_num_nodes; // Number of nodes in these constraints
- btScalar m_weights[3]; // weights of the nodes involved, same size as m_num_nodes
- btVector3 m_dirs[3]; // Constraint directions, same size of m_num_constraints;
- int m_indices[3]; // indices of the nodes involved, same size as m_num_nodes;
-};
-
-class btDeformableContactProjection
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btAlignedObjectArray<btSoftBody*>& m_softBodies;
-
- // all constraints involving face
- btAlignedObjectArray<btDeformableContactConstraint*> m_allFaceConstraints;
-#ifndef USE_MGS
- // map from node index to projection directions
- btHashMap<btHashInt, btAlignedObjectArray<btVector3> > m_projectionsDict;
-#else
- btAlignedObjectArray<btReducedVector> m_projections;
-#endif
-
- btAlignedObjectArray<LagrangeMultiplier> m_lagrangeMultipliers;
-
- // map from node index to static constraint
- btAlignedObjectArray<btAlignedObjectArray<btDeformableStaticConstraint> > m_staticConstraints;
- // map from node index to node rigid constraint
- btAlignedObjectArray<btAlignedObjectArray<btDeformableNodeRigidContactConstraint> > m_nodeRigidConstraints;
- // map from node index to face rigid constraint
- btAlignedObjectArray<btAlignedObjectArray<btDeformableFaceRigidContactConstraint> > m_faceRigidConstraints;
- // map from node index to deformable constraint
- btAlignedObjectArray<btAlignedObjectArray<btDeformableFaceNodeContactConstraint> > m_deformableConstraints;
- // map from node index to node anchor constraint
- btAlignedObjectArray<btAlignedObjectArray<btDeformableNodeAnchorConstraint> > m_nodeAnchorConstraints;
-
- bool m_useStrainLimiting;
-
- btDeformableContactProjection(btAlignedObjectArray<btSoftBody*>& softBodies)
- : m_softBodies(softBodies)
- {
- }
-
- virtual ~btDeformableContactProjection()
- {
- }
-
- // apply the constraints to the rhs of the linear solve
- virtual void project(TVStack& x);
-
- // add friction force to the rhs of the linear solve
- virtual void applyDynamicFriction(TVStack& f);
-
- // update and solve the constraints
- virtual btScalar update(btCollisionObject** deformableBodies, int numDeformableBodies, const btContactSolverInfo& infoGlobal);
-
- // Add constraints to m_constraints. In addition, the constraints that each vertex own are recorded in m_constraintsDict.
- virtual void setConstraints(const btContactSolverInfo& infoGlobal);
-
- // Set up projections for each vertex by adding the projection direction to
- virtual void setProjection();
-
- virtual void reinitialize(bool nodeUpdated);
-
- btScalar solveSplitImpulse(btCollisionObject** deformableBodies, int numDeformableBodies, const btContactSolverInfo& infoGlobal);
-
- virtual void setLagrangeMultiplier();
-
- void checkConstraints(const TVStack& x);
-};
-#endif /* btDeformableContactProjection_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableCorotatedForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableCorotatedForce.h
deleted file mode 100644
index dfd85523bc..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableCorotatedForce.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_COROTATED_H
-#define BT_COROTATED_H
-
-#include "btDeformableLagrangianForce.h"
-#include "LinearMath/btPolarDecomposition.h"
-
-static inline int PolarDecomposition(const btMatrix3x3& m, btMatrix3x3& q, btMatrix3x3& s)
-{
- static const btPolarDecomposition polar;
- return polar.decompose(m, q, s);
-}
-
-class btDeformableCorotatedForce : public btDeformableLagrangianForce
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btScalar m_mu, m_lambda;
- btDeformableCorotatedForce() : m_mu(1), m_lambda(1)
- {
- }
-
- btDeformableCorotatedForce(btScalar mu, btScalar lambda) : m_mu(mu), m_lambda(lambda)
- {
- }
-
- virtual void addScaledForces(btScalar scale, TVStack& force)
- {
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force)
- {
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledDampingForce(btScalar scale, TVStack& force)
- {
- }
-
- virtual void addScaledElasticForce(btScalar scale, TVStack& force)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btMatrix3x3 P;
- firstPiola(tetra.m_F, P);
- btVector3 force_on_node0 = P * (tetra.m_Dm_inverse.transpose() * grad_N_hat_1st_col);
- btMatrix3x3 force_on_node123 = P * tetra.m_Dm_inverse.transpose();
-
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
-
- // elastic force
- // explicit elastic force
- btScalar scale1 = scale * tetra.m_element_measure;
- force[id0] -= scale1 * force_on_node0;
- force[id1] -= scale1 * force_on_node123.getColumn(0);
- force[id2] -= scale1 * force_on_node123.getColumn(1);
- force[id3] -= scale1 * force_on_node123.getColumn(2);
- }
- }
- }
-
- void firstPiola(const btMatrix3x3& F, btMatrix3x3& P)
- {
- // btMatrix3x3 JFinvT = F.adjoint();
- btScalar J = F.determinant();
- P = F.adjoint().transpose() * (m_lambda * (J - 1));
- if (m_mu > SIMD_EPSILON)
- {
- btMatrix3x3 R, S;
- if (J < 1024 * SIMD_EPSILON)
- R.setIdentity();
- else
- PolarDecomposition(F, R, S); // this QR is not robust, consider using implicit shift svd
- /*https://fuchuyuan.github.io/research/svd/paper.pdf*/
- P += (F - R) * 2 * m_mu;
- }
- }
-
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df)
- {
- }
-
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
- {
- }
-
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA) {}
-
- virtual btDeformableLagrangianForceType getForceType()
- {
- return BT_COROTATED_FORCE;
- }
-};
-
-#endif /* btCorotated_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableGravityForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableGravityForce.h
deleted file mode 100644
index d91867f457..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableGravityForce.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_DEFORMABLE_GRAVITY_FORCE_H
-#define BT_DEFORMABLE_GRAVITY_FORCE_H
-
-#include "btDeformableLagrangianForce.h"
-
-class btDeformableGravityForce : public btDeformableLagrangianForce
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btVector3 m_gravity;
-
- btDeformableGravityForce(const btVector3& g) : m_gravity(g)
- {
- }
-
- virtual void addScaledForces(btScalar scale, TVStack& force)
- {
- addScaledGravityForce(scale, force);
- }
-
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force)
- {
- addScaledGravityForce(scale, force);
- }
-
- virtual void addScaledDampingForce(btScalar scale, TVStack& force)
- {
- }
-
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df)
- {
- }
-
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
- {
- }
-
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA) {}
-
- virtual void addScaledGravityForce(btScalar scale, TVStack& force)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- btSoftBody::Node& n = psb->m_nodes[j];
- size_t id = n.index;
- btScalar mass = (n.m_im == 0) ? 0 : 1. / n.m_im;
- btVector3 scaled_force = scale * m_gravity * mass * m_softBodies[i]->m_gravityFactor;
- force[id] += scaled_force;
- }
- }
- }
-
- virtual btDeformableLagrangianForceType getForceType()
- {
- return BT_GRAVITY_FORCE;
- }
-
- // the gravitational potential energy
- virtual double totalEnergy(btScalar dt)
- {
- double e = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- if (node.m_im > 0)
- {
- e -= m_gravity.dot(node.m_q) / node.m_im;
- }
- }
- }
- return e;
- }
-};
-#endif /* BT_DEFORMABLE_GRAVITY_FORCE_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableLagrangianForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableLagrangianForce.h
deleted file mode 100644
index d58d825d1c..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableLagrangianForce.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_DEFORMABLE_LAGRANGIAN_FORCE_H
-#define BT_DEFORMABLE_LAGRANGIAN_FORCE_H
-
-#include "btSoftBody.h"
-#include <LinearMath/btHashMap.h>
-#include <iostream>
-
-enum btDeformableLagrangianForceType
-{
- BT_GRAVITY_FORCE = 1,
- BT_MASSSPRING_FORCE = 2,
- BT_COROTATED_FORCE = 3,
- BT_NEOHOOKEAN_FORCE = 4,
- BT_LINEAR_ELASTICITY_FORCE = 5,
- BT_MOUSE_PICKING_FORCE = 6
-};
-
-static inline double randomDouble(double low, double high)
-{
- return low + static_cast<double>(rand()) / RAND_MAX * (high - low);
-}
-
-class btDeformableLagrangianForce
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btAlignedObjectArray<btSoftBody*> m_softBodies;
- const btAlignedObjectArray<btSoftBody::Node*>* m_nodes;
-
- btDeformableLagrangianForce()
- {
- }
-
- virtual ~btDeformableLagrangianForce() {}
-
- // add all forces
- virtual void addScaledForces(btScalar scale, TVStack& force) = 0;
-
- // add damping df
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df) = 0;
-
- // build diagonal of A matrix
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA) = 0;
-
- // add elastic df
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df) = 0;
-
- // add all forces that are explicit in explicit solve
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force) = 0;
-
- // add all damping forces
- virtual void addScaledDampingForce(btScalar scale, TVStack& force) = 0;
-
- virtual void addScaledHessian(btScalar scale) {}
-
- virtual btDeformableLagrangianForceType getForceType() = 0;
-
- virtual void reinitialize(bool nodeUpdated)
- {
- }
-
- // get number of nodes that have the force
- virtual int getNumNodes()
- {
- int numNodes = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- numNodes += m_softBodies[i]->m_nodes.size();
- }
- return numNodes;
- }
-
- // add a soft body to be affected by the particular lagrangian force
- virtual void addSoftBody(btSoftBody* psb)
- {
- m_softBodies.push_back(psb);
- }
-
- virtual void removeSoftBody(btSoftBody* psb)
- {
- m_softBodies.remove(psb);
- }
-
- virtual void setIndices(const btAlignedObjectArray<btSoftBody::Node*>* nodes)
- {
- m_nodes = nodes;
- }
-
- // Calculate the incremental deformable generated from the input dx
- virtual btMatrix3x3 Ds(int id0, int id1, int id2, int id3, const TVStack& dx)
- {
- btVector3 c1 = dx[id1] - dx[id0];
- btVector3 c2 = dx[id2] - dx[id0];
- btVector3 c3 = dx[id3] - dx[id0];
- return btMatrix3x3(c1, c2, c3).transpose();
- }
-
- // Calculate the incremental deformable generated from the current velocity
- virtual btMatrix3x3 DsFromVelocity(const btSoftBody::Node* n0, const btSoftBody::Node* n1, const btSoftBody::Node* n2, const btSoftBody::Node* n3)
- {
- btVector3 c1 = n1->m_v - n0->m_v;
- btVector3 c2 = n2->m_v - n0->m_v;
- btVector3 c3 = n3->m_v - n0->m_v;
- return btMatrix3x3(c1, c2, c3).transpose();
- }
-
- // test for addScaledElasticForce function
- virtual void testDerivative()
- {
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q += btVector3(randomDouble(-.1, .1), randomDouble(-.1, .1), randomDouble(-.1, .1));
- }
- psb->updateDeformation();
- }
-
- TVStack dx;
- dx.resize(getNumNodes());
- TVStack dphi_dx;
- dphi_dx.resize(dx.size());
- for (int i = 0; i < dphi_dx.size(); ++i)
- {
- dphi_dx[i].setZero();
- }
- addScaledForces(-1, dphi_dx);
-
- // write down the current position
- TVStack x;
- x.resize(dx.size());
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- x[counter] = psb->m_nodes[j].m_q;
- counter++;
- }
- }
- counter = 0;
-
- // populate dx with random vectors
- for (int i = 0; i < dx.size(); ++i)
- {
- dx[i].setX(randomDouble(-1, 1));
- dx[i].setY(randomDouble(-1, 1));
- dx[i].setZ(randomDouble(-1, 1));
- }
-
- btAlignedObjectArray<double> errors;
- for (int it = 0; it < 10; ++it)
- {
- for (int i = 0; i < dx.size(); ++i)
- {
- dx[i] *= 0.5;
- }
-
- // get dphi/dx * dx
- double dphi = 0;
- for (int i = 0; i < dx.size(); ++i)
- {
- dphi += dphi_dx[i].dot(dx[i]);
- }
-
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = x[counter] + dx[counter];
- counter++;
- }
- psb->updateDeformation();
- }
- counter = 0;
- double f1 = totalElasticEnergy(0);
-
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = x[counter] - dx[counter];
- counter++;
- }
- psb->updateDeformation();
- }
- counter = 0;
-
- double f2 = totalElasticEnergy(0);
-
- //restore m_q
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = x[counter];
- counter++;
- }
- psb->updateDeformation();
- }
- counter = 0;
- double error = f1 - f2 - 2 * dphi;
- errors.push_back(error);
- std::cout << "Iteration = " << it << ", f1 = " << f1 << ", f2 = " << f2 << ", error = " << error << std::endl;
- }
- for (int i = 1; i < errors.size(); ++i)
- {
- std::cout << "Iteration = " << i << ", ratio = " << errors[i - 1] / errors[i] << std::endl;
- }
- }
-
- // test for addScaledElasticForce function
- virtual void testHessian()
- {
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q += btVector3(randomDouble(-.1, .1), randomDouble(-.1, .1), randomDouble(-.1, .1));
- }
- psb->updateDeformation();
- }
-
- TVStack dx;
- dx.resize(getNumNodes());
- TVStack df;
- df.resize(dx.size());
- TVStack f1;
- f1.resize(dx.size());
- TVStack f2;
- f2.resize(dx.size());
-
- // write down the current position
- TVStack x;
- x.resize(dx.size());
- int counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- x[counter] = psb->m_nodes[j].m_q;
- counter++;
- }
- }
- counter = 0;
-
- // populate dx with random vectors
- for (int i = 0; i < dx.size(); ++i)
- {
- dx[i].setX(randomDouble(-1, 1));
- dx[i].setY(randomDouble(-1, 1));
- dx[i].setZ(randomDouble(-1, 1));
- }
-
- btAlignedObjectArray<double> errors;
- for (int it = 0; it < 10; ++it)
- {
- for (int i = 0; i < dx.size(); ++i)
- {
- dx[i] *= 0.5;
- }
-
- // get df
- for (int i = 0; i < df.size(); ++i)
- {
- df[i].setZero();
- f1[i].setZero();
- f2[i].setZero();
- }
-
- //set df
- addScaledElasticForceDifferential(-1, dx, df);
-
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = x[counter] + dx[counter];
- counter++;
- }
- psb->updateDeformation();
- }
- counter = 0;
-
- //set f1
- addScaledForces(-1, f1);
-
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = x[counter] - dx[counter];
- counter++;
- }
- psb->updateDeformation();
- }
- counter = 0;
-
- //set f2
- addScaledForces(-1, f2);
-
- //restore m_q
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = x[counter];
- counter++;
- }
- psb->updateDeformation();
- }
- counter = 0;
- double error = 0;
- for (int i = 0; i < df.size(); ++i)
- {
- btVector3 error_vector = f1[i] - f2[i] - 2 * df[i];
- error += error_vector.length2();
- }
- error = btSqrt(error);
- errors.push_back(error);
- std::cout << "Iteration = " << it << ", error = " << error << std::endl;
- }
- for (int i = 1; i < errors.size(); ++i)
- {
- std::cout << "Iteration = " << i << ", ratio = " << errors[i - 1] / errors[i] << std::endl;
- }
- }
-
- //
- virtual double totalElasticEnergy(btScalar dt)
- {
- return 0;
- }
-
- //
- virtual double totalDampingEnergy(btScalar dt)
- {
- return 0;
- }
-
- // total Energy takes dt as input because certain energies depend on dt
- virtual double totalEnergy(btScalar dt)
- {
- return totalElasticEnergy(dt) + totalDampingEnergy(dt);
- }
-};
-#endif /* BT_DEFORMABLE_LAGRANGIAN_FORCE */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableLinearElasticityForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableLinearElasticityForce.h
deleted file mode 100644
index 971192050b..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableLinearElasticityForce.h
+++ /dev/null
@@ -1,462 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_LINEAR_ELASTICITY_H
-#define BT_LINEAR_ELASTICITY_H
-
-#include "btDeformableLagrangianForce.h"
-#include "LinearMath/btQuickprof.h"
-#include "btSoftBodyInternals.h"
-#define TETRA_FLAT_THRESHOLD 0.01
-class btDeformableLinearElasticityForce : public btDeformableLagrangianForce
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btScalar m_mu, m_lambda;
- btScalar m_E, m_nu; // Young's modulus and Poisson ratio
- btScalar m_damping_alpha, m_damping_beta;
- btDeformableLinearElasticityForce() : m_mu(1), m_lambda(1), m_damping_alpha(0.01), m_damping_beta(0.01)
- {
- updateYoungsModulusAndPoissonRatio();
- }
-
- btDeformableLinearElasticityForce(btScalar mu, btScalar lambda, btScalar damping_alpha = 0.01, btScalar damping_beta = 0.01) : m_mu(mu), m_lambda(lambda), m_damping_alpha(damping_alpha), m_damping_beta(damping_beta)
- {
- updateYoungsModulusAndPoissonRatio();
- }
-
- void updateYoungsModulusAndPoissonRatio()
- {
- // conversion from Lame Parameters to Young's modulus and Poisson ratio
- // https://en.wikipedia.org/wiki/Lam%C3%A9_parameters
- m_E = m_mu * (3 * m_lambda + 2 * m_mu) / (m_lambda + m_mu);
- m_nu = m_lambda * 0.5 / (m_mu + m_lambda);
- }
-
- void updateLameParameters()
- {
- // conversion from Young's modulus and Poisson ratio to Lame Parameters
- // https://en.wikipedia.org/wiki/Lam%C3%A9_parameters
- m_mu = m_E * 0.5 / (1 + m_nu);
- m_lambda = m_E * m_nu / ((1 + m_nu) * (1 - 2 * m_nu));
- }
-
- void setYoungsModulus(btScalar E)
- {
- m_E = E;
- updateLameParameters();
- }
-
- void setPoissonRatio(btScalar nu)
- {
- m_nu = nu;
- updateLameParameters();
- }
-
- void setDamping(btScalar damping_alpha, btScalar damping_beta)
- {
- m_damping_alpha = damping_alpha;
- m_damping_beta = damping_beta;
- }
-
- void setLameParameters(btScalar mu, btScalar lambda)
- {
- m_mu = mu;
- m_lambda = lambda;
- updateYoungsModulusAndPoissonRatio();
- }
-
- virtual void addScaledForces(btScalar scale, TVStack& force)
- {
- addScaledDampingForce(scale, force);
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force)
- {
- addScaledElasticForce(scale, force);
- }
-
- // The damping matrix is calculated using the time n state as described in https://www.math.ucla.edu/~jteran/papers/GSSJT15.pdf to allow line search
- virtual void addScaledDampingForce(btScalar scale, TVStack& force)
- {
- if (m_damping_alpha == 0 && m_damping_beta == 0)
- return;
- btScalar mu_damp = m_damping_beta * m_mu;
- btScalar lambda_damp = m_damping_beta * m_lambda;
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- bool close_to_flat = (psb->m_tetraScratches[j].m_J < TETRA_FLAT_THRESHOLD);
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
- btMatrix3x3 dF = DsFromVelocity(node0, node1, node2, node3) * tetra.m_Dm_inverse;
- if (!close_to_flat)
- {
- dF = psb->m_tetraScratches[j].m_corotation.transpose() * dF;
- }
- btMatrix3x3 I;
- I.setIdentity();
- btMatrix3x3 dP = (dF + dF.transpose()) * mu_damp + I * ((dF[0][0] + dF[1][1] + dF[2][2]) * lambda_damp);
- btMatrix3x3 df_on_node123 = dP * tetra.m_Dm_inverse.transpose();
- if (!close_to_flat)
- {
- df_on_node123 = psb->m_tetraScratches[j].m_corotation * df_on_node123;
- }
- btVector3 df_on_node0 = df_on_node123 * grad_N_hat_1st_col;
- // damping force differential
- btScalar scale1 = scale * tetra.m_element_measure;
- force[id0] -= scale1 * df_on_node0;
- force[id1] -= scale1 * df_on_node123.getColumn(0);
- force[id2] -= scale1 * df_on_node123.getColumn(1);
- force[id3] -= scale1 * df_on_node123.getColumn(2);
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- size_t id = node.index;
- if (node.m_im > 0)
- {
- force[id] -= scale * node.m_v / node.m_im * m_damping_alpha;
- }
- }
- }
- }
-
- virtual double totalElasticEnergy(btScalar dt)
- {
- double energy = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetraScratches.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::TetraScratch& s = psb->m_tetraScratches[j];
- energy += tetra.m_element_measure * elasticEnergyDensity(s);
- }
- }
- return energy;
- }
-
- // The damping energy is formulated as in https://www.math.ucla.edu/~jteran/papers/GSSJT15.pdf to allow line search
- virtual double totalDampingEnergy(btScalar dt)
- {
- double energy = 0;
- int sz = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- sz = btMax(sz, psb->m_nodes[j].index);
- }
- }
- TVStack dampingForce;
- dampingForce.resize(sz + 1);
- for (int i = 0; i < dampingForce.size(); ++i)
- dampingForce[i].setZero();
- addScaledDampingForce(0.5, dampingForce);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- energy -= dampingForce[node.index].dot(node.m_v) / dt;
- }
- }
- return energy;
- }
-
- double elasticEnergyDensity(const btSoftBody::TetraScratch& s)
- {
- double density = 0;
- btMatrix3x3 epsilon = (s.m_F + s.m_F.transpose()) * 0.5 - btMatrix3x3::getIdentity();
- btScalar trace = epsilon[0][0] + epsilon[1][1] + epsilon[2][2];
- density += m_mu * (epsilon[0].length2() + epsilon[1].length2() + epsilon[2].length2());
- density += m_lambda * trace * trace * 0.5;
- return density;
- }
-
- virtual void addScaledElasticForce(btScalar scale, TVStack& force)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- btScalar max_p = psb->m_cfg.m_maxStress;
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btMatrix3x3 P;
- firstPiola(psb->m_tetraScratches[j], P);
-#if USE_SVD
- if (max_p > 0)
- {
- // since we want to clamp the principal stress to max_p, we only need to
- // calculate SVD when sigma_0^2 + sigma_1^2 + sigma_2^2 > max_p * max_p
- btScalar trPTP = (P[0].length2() + P[1].length2() + P[2].length2());
- if (trPTP > max_p * max_p)
- {
- btMatrix3x3 U, V;
- btVector3 sigma;
- singularValueDecomposition(P, U, sigma, V);
- sigma[0] = btMin(sigma[0], max_p);
- sigma[1] = btMin(sigma[1], max_p);
- sigma[2] = btMin(sigma[2], max_p);
- sigma[0] = btMax(sigma[0], -max_p);
- sigma[1] = btMax(sigma[1], -max_p);
- sigma[2] = btMax(sigma[2], -max_p);
- btMatrix3x3 Sigma;
- Sigma.setIdentity();
- Sigma[0][0] = sigma[0];
- Sigma[1][1] = sigma[1];
- Sigma[2][2] = sigma[2];
- P = U * Sigma * V.transpose();
- }
- }
-#endif
- // btVector3 force_on_node0 = P * (tetra.m_Dm_inverse.transpose()*grad_N_hat_1st_col);
- btMatrix3x3 force_on_node123 = psb->m_tetraScratches[j].m_corotation * P * tetra.m_Dm_inverse.transpose();
- btVector3 force_on_node0 = force_on_node123 * grad_N_hat_1st_col;
-
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
-
- // elastic force
- btScalar scale1 = scale * tetra.m_element_measure;
- force[id0] -= scale1 * force_on_node0;
- force[id1] -= scale1 * force_on_node123.getColumn(0);
- force[id2] -= scale1 * force_on_node123.getColumn(1);
- force[id3] -= scale1 * force_on_node123.getColumn(2);
- }
- }
- }
-
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA) {}
-
- // The damping matrix is calculated using the time n state as described in https://www.math.ucla.edu/~jteran/papers/GSSJT15.pdf to allow line search
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
- {
- if (m_damping_alpha == 0 && m_damping_beta == 0)
- return;
- btScalar mu_damp = m_damping_beta * m_mu;
- btScalar lambda_damp = m_damping_beta * m_lambda;
- int numNodes = getNumNodes();
- btAssert(numNodes <= df.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- bool close_to_flat = (psb->m_tetraScratches[j].m_J < TETRA_FLAT_THRESHOLD);
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
- btMatrix3x3 dF = Ds(id0, id1, id2, id3, dv) * tetra.m_Dm_inverse;
- if (!close_to_flat)
- {
- dF = psb->m_tetraScratches[j].m_corotation.transpose() * dF;
- }
- btMatrix3x3 I;
- I.setIdentity();
- btMatrix3x3 dP = (dF + dF.transpose()) * mu_damp + I * ((dF[0][0] + dF[1][1] + dF[2][2]) * lambda_damp);
- btMatrix3x3 df_on_node123 = dP * tetra.m_Dm_inverse.transpose();
- if (!close_to_flat)
- {
- df_on_node123 = psb->m_tetraScratches[j].m_corotation * df_on_node123;
- }
- btVector3 df_on_node0 = df_on_node123 * grad_N_hat_1st_col;
-
- // damping force differential
- btScalar scale1 = scale * tetra.m_element_measure;
- df[id0] -= scale1 * df_on_node0;
- df[id1] -= scale1 * df_on_node123.getColumn(0);
- df[id2] -= scale1 * df_on_node123.getColumn(1);
- df[id3] -= scale1 * df_on_node123.getColumn(2);
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- size_t id = node.index;
- if (node.m_im > 0)
- {
- df[id] -= scale * dv[id] / node.m_im * m_damping_alpha;
- }
- }
- }
- }
-
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= df.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
- btMatrix3x3 dF = psb->m_tetraScratches[j].m_corotation.transpose() * Ds(id0, id1, id2, id3, dx) * tetra.m_Dm_inverse;
- btMatrix3x3 dP;
- firstPiolaDifferential(psb->m_tetraScratches[j], dF, dP);
- // btVector3 df_on_node0 = dP * (tetra.m_Dm_inverse.transpose()*grad_N_hat_1st_col);
- btMatrix3x3 df_on_node123 = psb->m_tetraScratches[j].m_corotation * dP * tetra.m_Dm_inverse.transpose();
- btVector3 df_on_node0 = df_on_node123 * grad_N_hat_1st_col;
-
- // elastic force differential
- btScalar scale1 = scale * tetra.m_element_measure;
- df[id0] -= scale1 * df_on_node0;
- df[id1] -= scale1 * df_on_node123.getColumn(0);
- df[id2] -= scale1 * df_on_node123.getColumn(1);
- df[id3] -= scale1 * df_on_node123.getColumn(2);
- }
- }
- }
-
- void firstPiola(const btSoftBody::TetraScratch& s, btMatrix3x3& P)
- {
- btMatrix3x3 corotated_F = s.m_corotation.transpose() * s.m_F;
-
- btMatrix3x3 epsilon = (corotated_F + corotated_F.transpose()) * 0.5 - btMatrix3x3::getIdentity();
- btScalar trace = epsilon[0][0] + epsilon[1][1] + epsilon[2][2];
- P = epsilon * btScalar(2) * m_mu + btMatrix3x3::getIdentity() * m_lambda * trace;
- }
-
- // Let P be the first piola stress.
- // This function calculates the dP = dP/dF * dF
- void firstPiolaDifferential(const btSoftBody::TetraScratch& s, const btMatrix3x3& dF, btMatrix3x3& dP)
- {
- btScalar trace = (dF[0][0] + dF[1][1] + dF[2][2]);
- dP = (dF + dF.transpose()) * m_mu + btMatrix3x3::getIdentity() * m_lambda * trace;
- }
-
- // Let Q be the damping stress.
- // This function calculates the dP = dQ/dF * dF
- void firstPiolaDampingDifferential(const btSoftBody::TetraScratch& s, const btMatrix3x3& dF, btMatrix3x3& dP)
- {
- btScalar mu_damp = m_damping_beta * m_mu;
- btScalar lambda_damp = m_damping_beta * m_lambda;
- btScalar trace = (dF[0][0] + dF[1][1] + dF[2][2]);
- dP = (dF + dF.transpose()) * mu_damp + btMatrix3x3::getIdentity() * lambda_damp * trace;
- }
-
- virtual void addScaledHessian(btScalar scale)
- {
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btMatrix3x3 P;
- firstPiola(psb->m_tetraScratches[j], P); // make sure scratch is evaluated at x_n + dt * vn
- btMatrix3x3 force_on_node123 = psb->m_tetraScratches[j].m_corotation * P * tetra.m_Dm_inverse.transpose();
- btVector3 force_on_node0 = force_on_node123 * grad_N_hat_1st_col;
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- btScalar scale1 = scale * (scale + m_damping_beta) * tetra.m_element_measure; // stiff and stiffness-damping terms;
- node0->m_effectiveMass += OuterProduct(force_on_node0, force_on_node0) * scale1;
- node1->m_effectiveMass += OuterProduct(force_on_node123.getColumn(0), force_on_node123.getColumn(0)) * scale1;
- node2->m_effectiveMass += OuterProduct(force_on_node123.getColumn(1), force_on_node123.getColumn(1)) * scale1;
- node3->m_effectiveMass += OuterProduct(force_on_node123.getColumn(2), force_on_node123.getColumn(2)) * scale1;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- btSoftBody::Node& node = psb->m_nodes[j];
- if (node.m_im > 0)
- {
- btMatrix3x3 I;
- I.setIdentity();
- node.m_effectiveMass += I * (scale * (1.0 / node.m_im) * m_damping_alpha);
- }
- }
- }
- }
-
- virtual btDeformableLagrangianForceType getForceType()
- {
- return BT_LINEAR_ELASTICITY_FORCE;
- }
-};
-#endif /* BT_LINEAR_ELASTICITY_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableMassSpringForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableMassSpringForce.h
deleted file mode 100644
index 8c97bd1ba8..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableMassSpringForce.h
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_MASS_SPRING_H
-#define BT_MASS_SPRING_H
-
-#include "btDeformableLagrangianForce.h"
-
-class btDeformableMassSpringForce : public btDeformableLagrangianForce
-{
- // If true, the damping force will be in the direction of the spring
- // If false, the damping force will be in the direction of the velocity
- bool m_momentum_conserving;
- btScalar m_elasticStiffness, m_dampingStiffness, m_bendingStiffness;
-
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btDeformableMassSpringForce() : m_momentum_conserving(false), m_elasticStiffness(1), m_dampingStiffness(0.05)
- {
- }
- btDeformableMassSpringForce(btScalar k, btScalar d, bool conserve_angular = true, double bending_k = -1) : m_momentum_conserving(conserve_angular), m_elasticStiffness(k), m_dampingStiffness(d), m_bendingStiffness(bending_k)
- {
- if (m_bendingStiffness < btScalar(0))
- {
- m_bendingStiffness = m_elasticStiffness;
- }
- }
-
- virtual void addScaledForces(btScalar scale, TVStack& force)
- {
- addScaledDampingForce(scale, force);
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force)
- {
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledDampingForce(btScalar scale, TVStack& force)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- const btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_links.size(); ++j)
- {
- const btSoftBody::Link& link = psb->m_links[j];
- btSoftBody::Node* node1 = link.m_n[0];
- btSoftBody::Node* node2 = link.m_n[1];
- size_t id1 = node1->index;
- size_t id2 = node2->index;
-
- // damping force
- btVector3 v_diff = (node2->m_v - node1->m_v);
- btVector3 scaled_force = scale * m_dampingStiffness * v_diff;
- if (m_momentum_conserving)
- {
- if ((node2->m_x - node1->m_x).norm() > SIMD_EPSILON)
- {
- btVector3 dir = (node2->m_x - node1->m_x).normalized();
- scaled_force = scale * m_dampingStiffness * v_diff.dot(dir) * dir;
- }
- }
- force[id1] += scaled_force;
- force[id2] -= scaled_force;
- }
- }
- }
-
- virtual void addScaledElasticForce(btScalar scale, TVStack& force)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- const btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_links.size(); ++j)
- {
- const btSoftBody::Link& link = psb->m_links[j];
- btSoftBody::Node* node1 = link.m_n[0];
- btSoftBody::Node* node2 = link.m_n[1];
- btScalar r = link.m_rl;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
-
- // elastic force
- btVector3 dir = (node2->m_q - node1->m_q);
- btVector3 dir_normalized = (dir.norm() > SIMD_EPSILON) ? dir.normalized() : btVector3(0, 0, 0);
- btScalar scaled_stiffness = scale * (link.m_bbending ? m_bendingStiffness : m_elasticStiffness);
- btVector3 scaled_force = scaled_stiffness * (dir - dir_normalized * r);
- force[id1] += scaled_force;
- force[id2] -= scaled_force;
- }
- }
- }
-
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
- {
- // implicit damping force differential
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- btScalar scaled_k_damp = m_dampingStiffness * scale;
- for (int j = 0; j < psb->m_links.size(); ++j)
- {
- const btSoftBody::Link& link = psb->m_links[j];
- btSoftBody::Node* node1 = link.m_n[0];
- btSoftBody::Node* node2 = link.m_n[1];
- size_t id1 = node1->index;
- size_t id2 = node2->index;
-
- btVector3 local_scaled_df = scaled_k_damp * (dv[id2] - dv[id1]);
- if (m_momentum_conserving)
- {
- if ((node2->m_x - node1->m_x).norm() > SIMD_EPSILON)
- {
- btVector3 dir = (node2->m_x - node1->m_x).normalized();
- local_scaled_df = scaled_k_damp * (dv[id2] - dv[id1]).dot(dir) * dir;
- }
- }
- df[id1] += local_scaled_df;
- df[id2] -= local_scaled_df;
- }
- }
- }
-
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA)
- {
- // implicit damping force differential
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- btScalar scaled_k_damp = m_dampingStiffness * scale;
- for (int j = 0; j < psb->m_links.size(); ++j)
- {
- const btSoftBody::Link& link = psb->m_links[j];
- btSoftBody::Node* node1 = link.m_n[0];
- btSoftBody::Node* node2 = link.m_n[1];
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- if (m_momentum_conserving)
- {
- if ((node2->m_x - node1->m_x).norm() > SIMD_EPSILON)
- {
- btVector3 dir = (node2->m_x - node1->m_x).normalized();
- for (int d = 0; d < 3; ++d)
- {
- if (node1->m_im > 0)
- diagA[id1][d] -= scaled_k_damp * dir[d] * dir[d];
- if (node2->m_im > 0)
- diagA[id2][d] -= scaled_k_damp * dir[d] * dir[d];
- }
- }
- }
- else
- {
- for (int d = 0; d < 3; ++d)
- {
- if (node1->m_im > 0)
- diagA[id1][d] -= scaled_k_damp;
- if (node2->m_im > 0)
- diagA[id2][d] -= scaled_k_damp;
- }
- }
- }
- }
- }
-
- virtual double totalElasticEnergy(btScalar dt)
- {
- double energy = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- const btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_links.size(); ++j)
- {
- const btSoftBody::Link& link = psb->m_links[j];
- btSoftBody::Node* node1 = link.m_n[0];
- btSoftBody::Node* node2 = link.m_n[1];
- btScalar r = link.m_rl;
-
- // elastic force
- btVector3 dir = (node2->m_q - node1->m_q);
- energy += 0.5 * m_elasticStiffness * (dir.norm() - r) * (dir.norm() - r);
- }
- }
- return energy;
- }
-
- virtual double totalDampingEnergy(btScalar dt)
- {
- double energy = 0;
- int sz = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- sz = btMax(sz, psb->m_nodes[j].index);
- }
- }
- TVStack dampingForce;
- dampingForce.resize(sz + 1);
- for (int i = 0; i < dampingForce.size(); ++i)
- dampingForce[i].setZero();
- addScaledDampingForce(0.5, dampingForce);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- energy -= dampingForce[node.index].dot(node.m_v) / dt;
- }
- }
- return energy;
- }
-
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df)
- {
- // implicit damping force differential
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- const btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_links.size(); ++j)
- {
- const btSoftBody::Link& link = psb->m_links[j];
- btSoftBody::Node* node1 = link.m_n[0];
- btSoftBody::Node* node2 = link.m_n[1];
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- btScalar r = link.m_rl;
-
- btVector3 dir = (node1->m_q - node2->m_q);
- btScalar dir_norm = dir.norm();
- btVector3 dir_normalized = (dir_norm > SIMD_EPSILON) ? dir.normalized() : btVector3(0, 0, 0);
- btVector3 dx_diff = dx[id1] - dx[id2];
- btVector3 scaled_df = btVector3(0, 0, 0);
- btScalar scaled_k = scale * (link.m_bbending ? m_bendingStiffness : m_elasticStiffness);
- if (dir_norm > SIMD_EPSILON)
- {
- scaled_df -= scaled_k * dir_normalized.dot(dx_diff) * dir_normalized;
- scaled_df += scaled_k * dir_normalized.dot(dx_diff) * ((dir_norm - r) / dir_norm) * dir_normalized;
- scaled_df -= scaled_k * ((dir_norm - r) / dir_norm) * dx_diff;
- }
-
- df[id1] += scaled_df;
- df[id2] -= scaled_df;
- }
- }
- }
-
- virtual btDeformableLagrangianForceType getForceType()
- {
- return BT_MASSSPRING_FORCE;
- }
-};
-
-#endif /* btMassSpring_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableMousePickingForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableMousePickingForce.h
deleted file mode 100644
index 697408355c..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableMousePickingForce.h
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_MOUSE_PICKING_FORCE_H
-#define BT_MOUSE_PICKING_FORCE_H
-
-#include "btDeformableLagrangianForce.h"
-
-class btDeformableMousePickingForce : public btDeformableLagrangianForce
-{
- // If true, the damping force will be in the direction of the spring
- // If false, the damping force will be in the direction of the velocity
- btScalar m_elasticStiffness, m_dampingStiffness;
- const btSoftBody::Face& m_face;
- btVector3 m_mouse_pos;
- btScalar m_maxForce;
-
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btDeformableMousePickingForce(btScalar k, btScalar d, const btSoftBody::Face& face, const btVector3& mouse_pos, btScalar maxForce = 0.3) : m_elasticStiffness(k), m_dampingStiffness(d), m_face(face), m_mouse_pos(mouse_pos), m_maxForce(maxForce)
- {
- }
-
- virtual void addScaledForces(btScalar scale, TVStack& force)
- {
- addScaledDampingForce(scale, force);
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force)
- {
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledDampingForce(btScalar scale, TVStack& force)
- {
- for (int i = 0; i < 3; ++i)
- {
- btVector3 v_diff = m_face.m_n[i]->m_v;
- btVector3 scaled_force = scale * m_dampingStiffness * v_diff;
- if ((m_face.m_n[i]->m_x - m_mouse_pos).norm() > SIMD_EPSILON)
- {
- btVector3 dir = (m_face.m_n[i]->m_x - m_mouse_pos).normalized();
- scaled_force = scale * m_dampingStiffness * v_diff.dot(dir) * dir;
- }
- force[m_face.m_n[i]->index] -= scaled_force;
- }
- }
-
- virtual void addScaledElasticForce(btScalar scale, TVStack& force)
- {
- btScalar scaled_stiffness = scale * m_elasticStiffness;
- for (int i = 0; i < 3; ++i)
- {
- btVector3 dir = (m_face.m_n[i]->m_q - m_mouse_pos);
- btVector3 scaled_force = scaled_stiffness * dir;
- if (scaled_force.safeNorm() > m_maxForce)
- {
- scaled_force.safeNormalize();
- scaled_force *= m_maxForce;
- }
- force[m_face.m_n[i]->index] -= scaled_force;
- }
- }
-
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
- {
- btScalar scaled_k_damp = m_dampingStiffness * scale;
- for (int i = 0; i < 3; ++i)
- {
- btVector3 local_scaled_df = scaled_k_damp * dv[m_face.m_n[i]->index];
- if ((m_face.m_n[i]->m_x - m_mouse_pos).norm() > SIMD_EPSILON)
- {
- btVector3 dir = (m_face.m_n[i]->m_x - m_mouse_pos).normalized();
- local_scaled_df = scaled_k_damp * dv[m_face.m_n[i]->index].dot(dir) * dir;
- }
- df[m_face.m_n[i]->index] -= local_scaled_df;
- }
- }
-
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA) {}
-
- virtual double totalElasticEnergy(btScalar dt)
- {
- double energy = 0;
- for (int i = 0; i < 3; ++i)
- {
- btVector3 dir = (m_face.m_n[i]->m_q - m_mouse_pos);
- btVector3 scaled_force = m_elasticStiffness * dir;
- if (scaled_force.safeNorm() > m_maxForce)
- {
- scaled_force.safeNormalize();
- scaled_force *= m_maxForce;
- }
- energy += 0.5 * scaled_force.dot(dir);
- }
- return energy;
- }
-
- virtual double totalDampingEnergy(btScalar dt)
- {
- double energy = 0;
- for (int i = 0; i < 3; ++i)
- {
- btVector3 v_diff = m_face.m_n[i]->m_v;
- btVector3 scaled_force = m_dampingStiffness * v_diff;
- if ((m_face.m_n[i]->m_x - m_mouse_pos).norm() > SIMD_EPSILON)
- {
- btVector3 dir = (m_face.m_n[i]->m_x - m_mouse_pos).normalized();
- scaled_force = m_dampingStiffness * v_diff.dot(dir) * dir;
- }
- energy -= scaled_force.dot(m_face.m_n[i]->m_v) / dt;
- }
- return energy;
- }
-
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df)
- {
- btScalar scaled_stiffness = scale * m_elasticStiffness;
- for (int i = 0; i < 3; ++i)
- {
- btVector3 dir = (m_face.m_n[i]->m_q - m_mouse_pos);
- btScalar dir_norm = dir.norm();
- btVector3 dir_normalized = (dir_norm > SIMD_EPSILON) ? dir.normalized() : btVector3(0, 0, 0);
- int id = m_face.m_n[i]->index;
- btVector3 dx_diff = dx[id];
- btScalar r = 0; // rest length is 0 for picking spring
- btVector3 scaled_df = btVector3(0, 0, 0);
- if (dir_norm > SIMD_EPSILON)
- {
- scaled_df -= scaled_stiffness * dir_normalized.dot(dx_diff) * dir_normalized;
- scaled_df += scaled_stiffness * dir_normalized.dot(dx_diff) * ((dir_norm - r) / dir_norm) * dir_normalized;
- scaled_df -= scaled_stiffness * ((dir_norm - r) / dir_norm) * dx_diff;
- }
- df[id] += scaled_df;
- }
- }
-
- void setMousePos(const btVector3& p)
- {
- m_mouse_pos = p;
- }
-
- virtual btDeformableLagrangianForceType getForceType()
- {
- return BT_MOUSE_PICKING_FORCE;
- }
-};
-
-#endif /* btMassSpring_h */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.cpp b/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.cpp
deleted file mode 100644
index 631fd5fbed..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.cpp
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#include "btDeformableMultiBodyConstraintSolver.h"
-#include <iostream>
-// override the iterations method to include deformable/multibody contact
-btScalar btDeformableMultiBodyConstraintSolver::solveDeformableGroupIterations(btCollisionObject** bodies, int numBodies, btCollisionObject** deformableBodies, int numDeformableBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- {
- ///this is a special step to resolve penetrations (just for contacts)
- solveGroupCacheFriendlySplitImpulseIterations(bodies, numBodies, deformableBodies, numDeformableBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
-
- int maxIterations = m_maxOverrideNumSolverIterations > infoGlobal.m_numIterations ? m_maxOverrideNumSolverIterations : infoGlobal.m_numIterations;
- for (int iteration = 0; iteration < maxIterations; iteration++)
- {
- // rigid bodies are solved using solver body velocity, but rigid/deformable contact directly uses the velocity of the actual rigid body. So we have to do the following: Solve one iteration of the rigid/rigid contact, get the updated velocity in the solver body and update the velocity of the underlying rigid body. Then solve the rigid/deformable contact. Finally, grab the (once again) updated rigid velocity and update the velocity of the wrapping solver body
-
- // solve rigid/rigid in solver body
- m_leastSquaresResidual = solveSingleIteration(iteration, bodies, numBodies, manifoldPtr, numManifolds, constraints, numConstraints, infoGlobal, debugDrawer);
- // solver body velocity -> rigid body velocity
- solverBodyWriteBack(infoGlobal);
- btScalar deformableResidual = m_deformableSolver->solveContactConstraints(deformableBodies, numDeformableBodies, infoGlobal);
- // update rigid body velocity in rigid/deformable contact
- m_leastSquaresResidual = btMax(m_leastSquaresResidual, deformableResidual);
- // solver body velocity <- rigid body velocity
- writeToSolverBody(bodies, numBodies, infoGlobal);
-
- if (m_leastSquaresResidual <= infoGlobal.m_leastSquaresResidualThreshold || (iteration >= (maxIterations - 1)))
- {
-#ifdef VERBOSE_RESIDUAL_PRINTF
- if (iteration >= (maxIterations - 1))
- printf("residual = %f at iteration #%d\n", m_leastSquaresResidual, iteration);
-#endif
- m_analyticsData.m_numSolverCalls++;
- m_analyticsData.m_numIterationsUsed = iteration + 1;
- m_analyticsData.m_islandId = -2;
- if (numBodies > 0)
- m_analyticsData.m_islandId = bodies[0]->getCompanionId();
- m_analyticsData.m_numBodies = numBodies;
- m_analyticsData.m_numContactManifolds = numManifolds;
- m_analyticsData.m_remainingLeastSquaresResidual = m_leastSquaresResidual;
- break;
- }
- }
- }
- return 0.f;
-}
-
-void btDeformableMultiBodyConstraintSolver::solveDeformableBodyGroup(btCollisionObject** bodies, int numBodies, btCollisionObject** deformableBodies, int numDeformableBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, btMultiBodyConstraint** multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher)
-{
- m_tmpMultiBodyConstraints = multiBodyConstraints;
- m_tmpNumMultiBodyConstraints = numMultiBodyConstraints;
-
- // inherited from MultiBodyConstraintSolver
- solveGroupCacheFriendlySetup(bodies, numBodies, manifold, numManifolds, constraints, numConstraints, info, debugDrawer);
-
- // overriden
- solveDeformableGroupIterations(bodies, numBodies, deformableBodies, numDeformableBodies, manifold, numManifolds, constraints, numConstraints, info, debugDrawer);
-
- // inherited from MultiBodyConstraintSolver
- solveGroupCacheFriendlyFinish(bodies, numBodies, info);
-
- m_tmpMultiBodyConstraints = 0;
- m_tmpNumMultiBodyConstraints = 0;
-}
-
-void btDeformableMultiBodyConstraintSolver::writeToSolverBody(btCollisionObject** bodies, int numBodies, const btContactSolverInfo& infoGlobal)
-{
- for (int i = 0; i < numBodies; i++)
- {
- int bodyId = getOrInitSolverBody(*bodies[i], infoGlobal.m_timeStep);
-
- btRigidBody* body = btRigidBody::upcast(bodies[i]);
- if (body && body->getInvMass())
- {
- btSolverBody& solverBody = m_tmpSolverBodyPool[bodyId];
- solverBody.m_linearVelocity = body->getLinearVelocity() - solverBody.m_deltaLinearVelocity;
- solverBody.m_angularVelocity = body->getAngularVelocity() - solverBody.m_deltaAngularVelocity;
- }
- }
-}
-
-void btDeformableMultiBodyConstraintSolver::solverBodyWriteBack(const btContactSolverInfo& infoGlobal)
-{
- for (int i = 0; i < m_tmpSolverBodyPool.size(); i++)
- {
- btRigidBody* body = m_tmpSolverBodyPool[i].m_originalBody;
- if (body)
- {
- m_tmpSolverBodyPool[i].m_originalBody->setLinearVelocity(m_tmpSolverBodyPool[i].m_linearVelocity + m_tmpSolverBodyPool[i].m_deltaLinearVelocity);
- m_tmpSolverBodyPool[i].m_originalBody->setAngularVelocity(m_tmpSolverBodyPool[i].m_angularVelocity + m_tmpSolverBodyPool[i].m_deltaAngularVelocity);
- }
- }
-}
-
-void btDeformableMultiBodyConstraintSolver::solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject** bodies, int numBodies, btCollisionObject** deformableBodies, int numDeformableBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer)
-{
- BT_PROFILE("solveGroupCacheFriendlySplitImpulseIterations");
- int iteration;
- if (infoGlobal.m_splitImpulse)
- {
- {
- for (iteration = 0; iteration < infoGlobal.m_numIterations; iteration++)
- {
- btScalar leastSquaresResidual = 0.f;
- {
- int numPoolConstraints = m_tmpSolverContactConstraintPool.size();
- int j;
- for (j = 0; j < numPoolConstraints; j++)
- {
- const btSolverConstraint& solveManifold = m_tmpSolverContactConstraintPool[m_orderTmpConstraintPool[j]];
-
- btScalar residual = resolveSplitPenetrationImpulse(m_tmpSolverBodyPool[solveManifold.m_solverBodyIdA], m_tmpSolverBodyPool[solveManifold.m_solverBodyIdB], solveManifold);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- // solve the position correction between deformable and rigid/multibody
- // btScalar residual = m_deformableSolver->solveSplitImpulse(infoGlobal);
- btScalar residual = m_deformableSolver->m_objective->m_projection.solveSplitImpulse(deformableBodies, numDeformableBodies, infoGlobal);
- leastSquaresResidual = btMax(leastSquaresResidual, residual * residual);
- }
- if (leastSquaresResidual <= infoGlobal.m_leastSquaresResidualThreshold || iteration >= (infoGlobal.m_numIterations - 1))
- {
-#ifdef VERBOSE_RESIDUAL_PRINTF
- if (iteration >= (infoGlobal.m_numIterations - 1))
- printf("split impulse residual = %f at iteration #%d\n", leastSquaresResidual, iteration);
-#endif
- break;
- }
- }
- }
- }
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.h b/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.h
deleted file mode 100644
index 94aabce838..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyConstraintSolver.h
+++ /dev/null
@@ -1,61 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_DEFORMABLE_MULTIBODY_CONSTRAINT_SOLVER_H
-#define BT_DEFORMABLE_MULTIBODY_CONSTRAINT_SOLVER_H
-
-#include "btDeformableBodySolver.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h"
-
-class btDeformableBodySolver;
-
-// btDeformableMultiBodyConstraintSolver extendsn btMultiBodyConstraintSolver to solve for the contact among rigid/multibody and deformable bodies. Notice that the following constraints
-// 1. rigid/multibody against rigid/multibody
-// 2. rigid/multibody against deforamble
-// 3. deformable against deformable
-// 4. deformable self collision
-// 5. joint constraints
-// are all coupled in this solve.
-ATTRIBUTE_ALIGNED16(class)
-btDeformableMultiBodyConstraintSolver : public btMultiBodyConstraintSolver
-{
- btDeformableBodySolver* m_deformableSolver;
-
-protected:
- // override the iterations method to include deformable/multibody contact
- // virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer);
-
- // write the velocity of the the solver body to the underlying rigid body
- void solverBodyWriteBack(const btContactSolverInfo& infoGlobal);
-
- // write the velocity of the underlying rigid body to the the the solver body
- void writeToSolverBody(btCollisionObject * *bodies, int numBodies, const btContactSolverInfo& infoGlobal);
-
- virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject * *bodies, int numBodies, btCollisionObject** deformableBodies, int numDeformableBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
- virtual btScalar solveDeformableGroupIterations(btCollisionObject * *bodies, int numBodies, btCollisionObject** deformableBodies, int numDeformableBodies, btPersistentManifold** manifoldPtr, int numManifolds, btTypedConstraint** constraints, int numConstraints, const btContactSolverInfo& infoGlobal, btIDebugDraw* debugDrawer);
-
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- void setDeformableSolver(btDeformableBodySolver * deformableSolver)
- {
- m_deformableSolver = deformableSolver;
- }
-
- virtual void solveDeformableBodyGroup(btCollisionObject * *bodies, int numBodies, btCollisionObject** deformableBodies, int numDeformableBodies, btPersistentManifold** manifold, int numManifolds, btTypedConstraint** constraints, int numConstraints, btMultiBodyConstraint** multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btDispatcher* dispatcher);
-};
-
-#endif /* BT_DEFORMABLE_MULTIBODY_CONSTRAINT_SOLVER_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.cpp b/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.cpp
deleted file mode 100644
index 983e622b5f..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.cpp
+++ /dev/null
@@ -1,814 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-/* ====== Overview of the Deformable Algorithm ====== */
-
-/*
-A single step of the deformable body simulation contains the following main components:
-Call internalStepSimulation multiple times, to achieve 240Hz (4 steps of 60Hz).
-1. Deformable maintaintenance of rest lengths and volume preservation. Forces only depend on position: Update velocity to a temporary state v_{n+1}^* = v_n + explicit_force * dt / mass, where explicit forces include gravity and elastic forces.
-2. Detect discrete collisions between rigid and deformable bodies at position x_{n+1}^* = x_n + dt * v_{n+1}^*.
-
-3a. Solve all constraints, including LCP. Contact, position correction due to numerical drift, friction, and anchors for deformable.
-
-3b. 5 Newton steps (multiple step). Conjugent Gradient solves linear system. Deformable Damping: Then velocities of deformable bodies v_{n+1} are solved in
- M(v_{n+1} - v_{n+1}^*) = damping_force * dt / mass,
- by a conjugate gradient solver, where the damping force is implicit and depends on v_{n+1}.
- Make sure contact constraints are not violated in step b by performing velocity projections as in the paper by Baraff and Witkin https://www.cs.cmu.edu/~baraff/papers/sig98.pdf. Dynamic frictions are treated as a force and added to the rhs of the CG solve, whereas static frictions are treated as constraints similar to contact.
-4. Position is updated via x_{n+1} = x_n + dt * v_{n+1}.
-
-
-The algorithm also closely resembles the one in http://physbam.stanford.edu/~fedkiw/papers/stanford2008-03.pdf
- */
-
-#include <stdio.h>
-#include "btDeformableMultiBodyDynamicsWorld.h"
-#include "DeformableBodyInplaceSolverIslandCallback.h"
-#include "btDeformableBodySolver.h"
-#include "LinearMath/btQuickprof.h"
-#include "btSoftBodyInternals.h"
-btDeformableMultiBodyDynamicsWorld::btDeformableMultiBodyDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btDeformableMultiBodyConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration, btDeformableBodySolver* deformableBodySolver)
- : btMultiBodyDynamicsWorld(dispatcher, pairCache, (btMultiBodyConstraintSolver*)constraintSolver, collisionConfiguration),
- m_deformableBodySolver(deformableBodySolver),
- m_solverCallback(0)
-{
- m_drawFlags = fDrawFlags::Std;
- m_drawNodeTree = true;
- m_drawFaceTree = false;
- m_drawClusterTree = false;
- m_sbi.m_broadphase = pairCache;
- m_sbi.m_dispatcher = dispatcher;
- m_sbi.m_sparsesdf.Initialize();
- m_sbi.m_sparsesdf.setDefaultVoxelsz(0.005);
- m_sbi.m_sparsesdf.Reset();
-
- m_sbi.air_density = (btScalar)1.2;
- m_sbi.water_density = 0;
- m_sbi.water_offset = 0;
- m_sbi.water_normal = btVector3(0, 0, 0);
- m_sbi.m_gravity.setValue(0, -9.8, 0);
- m_internalTime = 0.0;
- m_implicit = false;
- m_lineSearch = false;
- m_useProjection = false;
- m_ccdIterations = 5;
- m_solverDeformableBodyIslandCallback = new DeformableBodyInplaceSolverIslandCallback(constraintSolver, dispatcher);
-}
-
-btDeformableMultiBodyDynamicsWorld::~btDeformableMultiBodyDynamicsWorld()
-{
- delete m_solverDeformableBodyIslandCallback;
-}
-
-void btDeformableMultiBodyDynamicsWorld::internalSingleStepSimulation(btScalar timeStep)
-{
- BT_PROFILE("internalSingleStepSimulation");
- if (0 != m_internalPreTickCallback)
- {
- (*m_internalPreTickCallback)(this, timeStep);
- }
- reinitialize(timeStep);
-
- // add gravity to velocity of rigid and multi bodys
- applyRigidBodyGravity(timeStep);
-
- ///apply gravity and explicit force to velocity, predict motion
- predictUnconstraintMotion(timeStep);
-
- ///perform collision detection that involves rigid/multi bodies
- btMultiBodyDynamicsWorld::performDiscreteCollisionDetection();
-
- btMultiBodyDynamicsWorld::calculateSimulationIslands();
-
- beforeSolverCallbacks(timeStep);
-
- ///solve contact constraints and then deformable bodies momemtum equation
- solveConstraints(timeStep);
-
- afterSolverCallbacks(timeStep);
-
- performDeformableCollisionDetection();
-
- applyRepulsionForce(timeStep);
-
- performGeometricCollisions(timeStep);
-
- integrateTransforms(timeStep);
-
- ///update vehicle simulation
- btMultiBodyDynamicsWorld::updateActions(timeStep);
-
- updateActivationState(timeStep);
- // End solver-wise simulation step
- // ///////////////////////////////
-}
-
-void btDeformableMultiBodyDynamicsWorld::performDeformableCollisionDetection()
-{
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- m_softBodies[i]->m_softSoftCollision = true;
- }
-
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- for (int j = i; j < m_softBodies.size(); ++j)
- {
- m_softBodies[i]->defaultCollisionHandler(m_softBodies[j]);
- }
- }
-
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- m_softBodies[i]->m_softSoftCollision = false;
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::updateActivationState(btScalar timeStep)
-{
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = m_softBodies[i];
- psb->updateDeactivation(timeStep);
- if (psb->wantsSleeping())
- {
- if (psb->getActivationState() == ACTIVE_TAG)
- psb->setActivationState(WANTS_DEACTIVATION);
- if (psb->getActivationState() == ISLAND_SLEEPING)
- {
- psb->setZeroVelocity();
- }
- }
- else
- {
- if (psb->getActivationState() != DISABLE_DEACTIVATION)
- psb->setActivationState(ACTIVE_TAG);
- }
- }
- btMultiBodyDynamicsWorld::updateActivationState(timeStep);
-}
-
-void btDeformableMultiBodyDynamicsWorld::applyRepulsionForce(btScalar timeStep)
-{
- BT_PROFILE("btDeformableMultiBodyDynamicsWorld::applyRepulsionForce");
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- psb->applyRepulsionForce(timeStep, true);
- }
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::performGeometricCollisions(btScalar timeStep)
-{
- BT_PROFILE("btDeformableMultiBodyDynamicsWorld::performGeometricCollisions");
- // refit the BVH tree for CCD
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- m_softBodies[i]->updateFaceTree(true, false);
- m_softBodies[i]->updateNodeTree(true, false);
- for (int j = 0; j < m_softBodies[i]->m_faces.size(); ++j)
- {
- btSoftBody::Face& f = m_softBodies[i]->m_faces[j];
- f.m_n0 = (f.m_n[1]->m_x - f.m_n[0]->m_x).cross(f.m_n[2]->m_x - f.m_n[0]->m_x);
- }
- }
- }
-
- // clear contact points & update DBVT
- for (int r = 0; r < m_ccdIterations; ++r)
- {
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- // clear contact points in the previous iteration
- psb->m_faceNodeContacts.clear();
-
- // update m_q and normals for CCD calculation
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- psb->m_nodes[j].m_q = psb->m_nodes[j].m_x + timeStep * psb->m_nodes[j].m_v;
- }
- for (int j = 0; j < psb->m_faces.size(); ++j)
- {
- btSoftBody::Face& f = psb->m_faces[j];
- f.m_n1 = (f.m_n[1]->m_q - f.m_n[0]->m_q).cross(f.m_n[2]->m_q - f.m_n[0]->m_q);
- f.m_vn = (f.m_n[1]->m_v - f.m_n[0]->m_v).cross(f.m_n[2]->m_v - f.m_n[0]->m_v) * timeStep * timeStep;
- }
- }
- }
-
- // apply CCD to register new contact points
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- for (int j = i; j < m_softBodies.size(); ++j)
- {
- btSoftBody* psb1 = m_softBodies[i];
- btSoftBody* psb2 = m_softBodies[j];
- if (psb1->isActive() && psb2->isActive())
- {
- m_softBodies[i]->geometricCollisionHandler(m_softBodies[j]);
- }
- }
- }
-
- int penetration_count = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- penetration_count += psb->m_faceNodeContacts.size();
- }
- }
- if (penetration_count == 0)
- {
- break;
- }
-
- // apply inelastic impulse
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- psb->applyRepulsionForce(timeStep, false);
- }
- }
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::softBodySelfCollision()
-{
- BT_PROFILE("btDeformableMultiBodyDynamicsWorld::softBodySelfCollision");
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = m_softBodies[i];
- if (psb->isActive())
- {
- psb->defaultCollisionHandler(psb);
- }
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::positionCorrection(btScalar timeStep)
-{
- // correct the position of rigid bodies with temporary velocity generated from split impulse
- btContactSolverInfo infoGlobal;
- btVector3 zero(0, 0, 0);
- for (int i = 0; i < m_nonStaticRigidBodies.size(); ++i)
- {
- btRigidBody* rb = m_nonStaticRigidBodies[i];
- //correct the position/orientation based on push/turn recovery
- btTransform newTransform;
- btVector3 pushVelocity = rb->getPushVelocity();
- btVector3 turnVelocity = rb->getTurnVelocity();
- if (pushVelocity[0] != 0.f || pushVelocity[1] != 0 || pushVelocity[2] != 0 || turnVelocity[0] != 0.f || turnVelocity[1] != 0 || turnVelocity[2] != 0)
- {
- btTransformUtil::integrateTransform(rb->getWorldTransform(), pushVelocity, turnVelocity * infoGlobal.m_splitImpulseTurnErp, timeStep, newTransform);
- rb->setWorldTransform(newTransform);
- rb->setPushVelocity(zero);
- rb->setTurnVelocity(zero);
- }
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::integrateTransforms(btScalar timeStep)
-{
- BT_PROFILE("integrateTransforms");
- positionCorrection(timeStep);
- btMultiBodyDynamicsWorld::integrateTransforms(timeStep);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- btSoftBody::Node& node = psb->m_nodes[j];
- btScalar maxDisplacement = psb->getWorldInfo()->m_maxDisplacement;
- btScalar clampDeltaV = maxDisplacement / timeStep;
- for (int c = 0; c < 3; c++)
- {
- if (node.m_v[c] > clampDeltaV)
- {
- node.m_v[c] = clampDeltaV;
- }
- if (node.m_v[c] < -clampDeltaV)
- {
- node.m_v[c] = -clampDeltaV;
- }
- }
- node.m_x = node.m_x + timeStep * (node.m_v + node.m_splitv);
- node.m_q = node.m_x;
- node.m_vn = node.m_v;
- }
- // enforce anchor constraints
- for (int j = 0; j < psb->m_deformableAnchors.size(); ++j)
- {
- btSoftBody::DeformableNodeRigidAnchor& a = psb->m_deformableAnchors[j];
- btSoftBody::Node* n = a.m_node;
- n->m_x = a.m_cti.m_colObj->getWorldTransform() * a.m_local;
-
- // update multibody anchor info
- if (a.m_cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- btMultiBodyLinkCollider* multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(a.m_cti.m_colObj);
- if (multibodyLinkCol)
- {
- btVector3 nrm;
- const btCollisionShape* shp = multibodyLinkCol->getCollisionShape();
- const btTransform& wtr = multibodyLinkCol->getWorldTransform();
- psb->m_worldInfo->m_sparsesdf.Evaluate(
- wtr.invXform(n->m_x),
- shp,
- nrm,
- 0);
- a.m_cti.m_normal = wtr.getBasis() * nrm;
- btVector3 normal = a.m_cti.m_normal;
- btVector3 t1 = generateUnitOrthogonalVector(normal);
- btVector3 t2 = btCross(normal, t1);
- btMultiBodyJacobianData jacobianData_normal, jacobianData_t1, jacobianData_t2;
- findJacobian(multibodyLinkCol, jacobianData_normal, a.m_node->m_x, normal);
- findJacobian(multibodyLinkCol, jacobianData_t1, a.m_node->m_x, t1);
- findJacobian(multibodyLinkCol, jacobianData_t2, a.m_node->m_x, t2);
-
- btScalar* J_n = &jacobianData_normal.m_jacobians[0];
- btScalar* J_t1 = &jacobianData_t1.m_jacobians[0];
- btScalar* J_t2 = &jacobianData_t2.m_jacobians[0];
-
- btScalar* u_n = &jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t1 = &jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t2 = &jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
-
- btMatrix3x3 rot(normal.getX(), normal.getY(), normal.getZ(),
- t1.getX(), t1.getY(), t1.getZ(),
- t2.getX(), t2.getY(), t2.getZ()); // world frame to local frame
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- btMatrix3x3 local_impulse_matrix = (Diagonal(n->m_im) + OuterProduct(J_n, J_t1, J_t2, u_n, u_t1, u_t2, ndof)).inverse();
- a.m_c0 = rot.transpose() * local_impulse_matrix * rot;
- a.jacobianData_normal = jacobianData_normal;
- a.jacobianData_t1 = jacobianData_t1;
- a.jacobianData_t2 = jacobianData_t2;
- a.t1 = t1;
- a.t2 = t2;
- }
- }
- }
- psb->interpolateRenderMesh();
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::solveConstraints(btScalar timeStep)
-{
- BT_PROFILE("btDeformableMultiBodyDynamicsWorld::solveConstraints");
- // save v_{n+1}^* velocity after explicit forces
- m_deformableBodySolver->backupVelocity();
-
- // set up constraints among multibodies and between multibodies and deformable bodies
- setupConstraints();
-
- // solve contact constraints
- solveContactConstraints();
-
- // set up the directions in which the velocity does not change in the momentum solve
- if (m_useProjection)
- m_deformableBodySolver->m_objective->m_projection.setProjection();
- else
- m_deformableBodySolver->m_objective->m_projection.setLagrangeMultiplier();
-
- // for explicit scheme, m_backupVelocity = v_{n+1}^*
- // for implicit scheme, m_backupVelocity = v_n
- // Here, set dv = v_{n+1} - v_n for nodes in contact
- m_deformableBodySolver->setupDeformableSolve(m_implicit);
-
- // At this point, dv should be golden for nodes in contact
- // proceed to solve deformable momentum equation
- m_deformableBodySolver->solveDeformableConstraints(timeStep);
-}
-
-void btDeformableMultiBodyDynamicsWorld::setupConstraints()
-{
- // set up constraints between multibody and deformable bodies
- m_deformableBodySolver->setConstraints(m_solverInfo);
-
- // set up constraints among multibodies
- {
- sortConstraints();
- // setup the solver callback
- btMultiBodyConstraint** sortedMultiBodyConstraints = m_sortedMultiBodyConstraints.size() ? &m_sortedMultiBodyConstraints[0] : 0;
- btTypedConstraint** constraintsPtr = getNumConstraints() ? &m_sortedConstraints[0] : 0;
- m_solverDeformableBodyIslandCallback->setup(&m_solverInfo, constraintsPtr, m_sortedConstraints.size(), sortedMultiBodyConstraints, m_sortedMultiBodyConstraints.size(), getDebugDrawer());
-
- // build islands
- m_islandManager->buildIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld());
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::sortConstraints()
-{
- m_sortedConstraints.resize(m_constraints.size());
- int i;
- for (i = 0; i < getNumConstraints(); i++)
- {
- m_sortedConstraints[i] = m_constraints[i];
- }
- m_sortedConstraints.quickSort(btSortConstraintOnIslandPredicate2());
-
- m_sortedMultiBodyConstraints.resize(m_multiBodyConstraints.size());
- for (i = 0; i < m_multiBodyConstraints.size(); i++)
- {
- m_sortedMultiBodyConstraints[i] = m_multiBodyConstraints[i];
- }
- m_sortedMultiBodyConstraints.quickSort(btSortMultiBodyConstraintOnIslandPredicate());
-}
-
-void btDeformableMultiBodyDynamicsWorld::solveContactConstraints()
-{
- // process constraints on each island
- m_islandManager->processIslands(getCollisionWorld()->getDispatcher(), getCollisionWorld(), m_solverDeformableBodyIslandCallback);
-
- // process deferred
- m_solverDeformableBodyIslandCallback->processConstraints();
- m_constraintSolver->allSolved(m_solverInfo, m_debugDrawer);
-
- // write joint feedback
- {
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- //useless? they get resized in stepVelocities once again (AND DIFFERENTLY)
- m_scratch_r.resize(bod->getNumLinks() + 1); //multidof? ("Y"s use it and it is used to store qdd)
- m_scratch_v.resize(bod->getNumLinks() + 1);
- m_scratch_m.resize(bod->getNumLinks() + 1);
-
- if (bod->internalNeedsJointFeedback())
- {
- if (!bod->isUsingRK4Integration())
- {
- if (bod->internalNeedsJointFeedback())
- {
- bool isConstraintPass = true;
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(m_solverInfo.m_timeStep, m_scratch_r, m_scratch_v, m_scratch_m, isConstraintPass,
- getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- }
- }
- }
- }
- }
- }
-
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
- bod->processDeltaVeeMultiDof2();
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::addSoftBody(btSoftBody* body, int collisionFilterGroup, int collisionFilterMask)
-{
- m_softBodies.push_back(body);
-
- // Set the soft body solver that will deal with this body
- // to be the world's solver
- body->setSoftBodySolver(m_deformableBodySolver);
-
- btCollisionWorld::addCollisionObject(body,
- collisionFilterGroup,
- collisionFilterMask);
-}
-
-void btDeformableMultiBodyDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
-{
- BT_PROFILE("predictUnconstraintMotion");
- btMultiBodyDynamicsWorld::predictUnconstraintMotion(timeStep);
- m_deformableBodySolver->predictMotion(timeStep);
-}
-
-void btDeformableMultiBodyDynamicsWorld::reinitialize(btScalar timeStep)
-{
- m_internalTime += timeStep;
- m_deformableBodySolver->setImplicit(m_implicit);
- m_deformableBodySolver->setLineSearch(m_lineSearch);
- m_deformableBodySolver->reinitialize(m_softBodies, timeStep);
- btDispatcherInfo& dispatchInfo = btMultiBodyDynamicsWorld::getDispatchInfo();
- dispatchInfo.m_timeStep = timeStep;
- dispatchInfo.m_stepCount = 0;
- dispatchInfo.m_debugDraw = btMultiBodyDynamicsWorld::getDebugDrawer();
- btMultiBodyDynamicsWorld::getSolverInfo().m_timeStep = timeStep;
- if (m_useProjection)
- {
- m_deformableBodySolver->m_useProjection = true;
- m_deformableBodySolver->m_objective->m_projection.m_useStrainLimiting = true;
- m_deformableBodySolver->m_objective->m_preconditioner = m_deformableBodySolver->m_objective->m_massPreconditioner;
- }
- else
- {
- m_deformableBodySolver->m_useProjection = false;
- m_deformableBodySolver->m_objective->m_projection.m_useStrainLimiting = false;
- m_deformableBodySolver->m_objective->m_preconditioner = m_deformableBodySolver->m_objective->m_KKTPreconditioner;
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::debugDrawWorld()
-{
- btMultiBodyDynamicsWorld::debugDrawWorld();
-
- for (int i = 0; i < getSoftBodyArray().size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)getSoftBodyArray()[i];
- {
- btSoftBodyHelpers::DrawFrame(psb, getDebugDrawer());
- btSoftBodyHelpers::Draw(psb, getDebugDrawer(), getDrawFlags());
- }
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::applyRigidBodyGravity(btScalar timeStep)
-{
- // Gravity is applied in stepSimulation and then cleared here and then applied here and then cleared here again
- // so that 1) gravity is applied to velocity before constraint solve and 2) gravity is applied in each substep
- // when there are multiple substeps
- btMultiBodyDynamicsWorld::applyGravity();
- // integrate rigid body gravity
- for (int i = 0; i < m_nonStaticRigidBodies.size(); ++i)
- {
- btRigidBody* rb = m_nonStaticRigidBodies[i];
- rb->integrateVelocities(timeStep);
- }
-
- // integrate multibody gravity
- {
- forwardKinematics();
- clearMultiBodyConstraintForces();
- {
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- m_scratch_r.resize(bod->getNumLinks() + 1);
- m_scratch_v.resize(bod->getNumLinks() + 1);
- m_scratch_m.resize(bod->getNumLinks() + 1);
- bool isConstraintPass = false;
- {
- if (!bod->isUsingRK4Integration())
- {
- bod->computeAccelerationsArticulatedBodyAlgorithmMultiDof(m_solverInfo.m_timeStep,
- m_scratch_r, m_scratch_v, m_scratch_m, isConstraintPass,
- getSolverInfo().m_jointFeedbackInWorldSpace,
- getSolverInfo().m_jointFeedbackInJointFrame);
- }
- else
- {
- btAssert(" RK4Integration is not supported");
- }
- }
- }
- }
- }
- }
- clearGravity();
-}
-
-void btDeformableMultiBodyDynamicsWorld::clearGravity()
-{
- BT_PROFILE("btMultiBody clearGravity");
- // clear rigid body gravity
- for (int i = 0; i < m_nonStaticRigidBodies.size(); i++)
- {
- btRigidBody* body = m_nonStaticRigidBodies[i];
- if (body->isActive())
- {
- body->clearGravity();
- }
- }
- // clear multibody gravity
- for (int i = 0; i < this->m_multiBodies.size(); i++)
- {
- btMultiBody* bod = m_multiBodies[i];
-
- bool isSleeping = false;
-
- if (bod->getBaseCollider() && bod->getBaseCollider()->getActivationState() == ISLAND_SLEEPING)
- {
- isSleeping = true;
- }
- for (int b = 0; b < bod->getNumLinks(); b++)
- {
- if (bod->getLink(b).m_collider && bod->getLink(b).m_collider->getActivationState() == ISLAND_SLEEPING)
- isSleeping = true;
- }
-
- if (!isSleeping)
- {
- bod->addBaseForce(-m_gravity * bod->getBaseMass());
-
- for (int j = 0; j < bod->getNumLinks(); ++j)
- {
- bod->addLinkForce(j, -m_gravity * bod->getLinkMass(j));
- }
- }
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::beforeSolverCallbacks(btScalar timeStep)
-{
- if (0 != m_internalTickCallback)
- {
- (*m_internalTickCallback)(this, timeStep);
- }
-
- if (0 != m_solverCallback)
- {
- (*m_solverCallback)(m_internalTime, this);
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::afterSolverCallbacks(btScalar timeStep)
-{
- if (0 != m_solverCallback)
- {
- (*m_solverCallback)(m_internalTime, this);
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::addForce(btSoftBody* psb, btDeformableLagrangianForce* force)
-{
- btAlignedObjectArray<btDeformableLagrangianForce*>& forces = m_deformableBodySolver->m_objective->m_lf;
- bool added = false;
- for (int i = 0; i < forces.size(); ++i)
- {
- if (forces[i]->getForceType() == force->getForceType())
- {
- forces[i]->addSoftBody(psb);
- added = true;
- break;
- }
- }
- if (!added)
- {
- force->addSoftBody(psb);
- force->setIndices(m_deformableBodySolver->m_objective->getIndices());
- forces.push_back(force);
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::removeForce(btSoftBody* psb, btDeformableLagrangianForce* force)
-{
- btAlignedObjectArray<btDeformableLagrangianForce*>& forces = m_deformableBodySolver->m_objective->m_lf;
- int removed_index = -1;
- for (int i = 0; i < forces.size(); ++i)
- {
- if (forces[i]->getForceType() == force->getForceType())
- {
- forces[i]->removeSoftBody(psb);
- if (forces[i]->m_softBodies.size() == 0)
- removed_index = i;
- break;
- }
- }
- if (removed_index >= 0)
- forces.removeAtIndex(removed_index);
-}
-
-void btDeformableMultiBodyDynamicsWorld::removeSoftBodyForce(btSoftBody* psb)
-{
- btAlignedObjectArray<btDeformableLagrangianForce*>& forces = m_deformableBodySolver->m_objective->m_lf;
- for (int i = 0; i < forces.size(); ++i)
- {
- forces[i]->removeSoftBody(psb);
- }
-}
-
-void btDeformableMultiBodyDynamicsWorld::removeSoftBody(btSoftBody* body)
-{
- removeSoftBodyForce(body);
- m_softBodies.remove(body);
- btCollisionWorld::removeCollisionObject(body);
- // force a reinitialize so that node indices get updated.
- m_deformableBodySolver->reinitialize(m_softBodies, btScalar(-1));
-}
-
-void btDeformableMultiBodyDynamicsWorld::removeCollisionObject(btCollisionObject* collisionObject)
-{
- btSoftBody* body = btSoftBody::upcast(collisionObject);
- if (body)
- removeSoftBody(body);
- else
- btDiscreteDynamicsWorld::removeCollisionObject(collisionObject);
-}
-
-int btDeformableMultiBodyDynamicsWorld::stepSimulation(btScalar timeStep, int maxSubSteps, btScalar fixedTimeStep)
-{
- startProfiling(timeStep);
-
- int numSimulationSubSteps = 0;
-
- if (maxSubSteps)
- {
- //fixed timestep with interpolation
- m_fixedTimeStep = fixedTimeStep;
- m_localTime += timeStep;
- if (m_localTime >= fixedTimeStep)
- {
- numSimulationSubSteps = int(m_localTime / fixedTimeStep);
- m_localTime -= numSimulationSubSteps * fixedTimeStep;
- }
- }
- else
- {
- //variable timestep
- fixedTimeStep = timeStep;
- m_localTime = m_latencyMotionStateInterpolation ? 0 : timeStep;
- m_fixedTimeStep = 0;
- if (btFuzzyZero(timeStep))
- {
- numSimulationSubSteps = 0;
- maxSubSteps = 0;
- }
- else
- {
- numSimulationSubSteps = 1;
- maxSubSteps = 1;
- }
- }
-
- //process some debugging flags
- if (getDebugDrawer())
- {
- btIDebugDraw* debugDrawer = getDebugDrawer();
- gDisableDeactivation = (debugDrawer->getDebugMode() & btIDebugDraw::DBG_NoDeactivation) != 0;
- }
- if (numSimulationSubSteps)
- {
- //clamp the number of substeps, to prevent simulation grinding spiralling down to a halt
- int clampedSimulationSteps = (numSimulationSubSteps > maxSubSteps) ? maxSubSteps : numSimulationSubSteps;
-
- saveKinematicState(fixedTimeStep * clampedSimulationSteps);
-
- for (int i = 0; i < clampedSimulationSteps; i++)
- {
- internalSingleStepSimulation(fixedTimeStep);
- synchronizeMotionStates();
- }
- }
- else
- {
- synchronizeMotionStates();
- }
-
- clearForces();
-
-#ifndef BT_NO_PROFILE
- CProfileManager::Increment_Frame_Counter();
-#endif //BT_NO_PROFILE
-
- return numSimulationSubSteps;
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.h b/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.h
deleted file mode 100644
index 4b7069aac7..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableMultiBodyDynamicsWorld.h
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
-#define BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
-
-#include "btSoftMultiBodyDynamicsWorld.h"
-#include "btDeformableLagrangianForce.h"
-#include "btDeformableMassSpringForce.h"
-#include "btDeformableBodySolver.h"
-#include "btDeformableMultiBodyConstraintSolver.h"
-#include "btSoftBodyHelpers.h"
-#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
-#include <functional>
-typedef btAlignedObjectArray<btSoftBody*> btSoftBodyArray;
-
-class btDeformableBodySolver;
-class btDeformableLagrangianForce;
-struct MultiBodyInplaceSolverIslandCallback;
-struct DeformableBodyInplaceSolverIslandCallback;
-class btDeformableMultiBodyConstraintSolver;
-
-typedef btAlignedObjectArray<btSoftBody*> btSoftBodyArray;
-
-class btDeformableMultiBodyDynamicsWorld : public btMultiBodyDynamicsWorld
-{
- typedef btAlignedObjectArray<btVector3> TVStack;
- ///Solver classes that encapsulate multiple deformable bodies for solving
- btDeformableBodySolver* m_deformableBodySolver;
- btSoftBodyArray m_softBodies;
- int m_drawFlags;
- bool m_drawNodeTree;
- bool m_drawFaceTree;
- bool m_drawClusterTree;
- btSoftBodyWorldInfo m_sbi;
- btScalar m_internalTime;
- int m_ccdIterations;
- bool m_implicit;
- bool m_lineSearch;
- bool m_useProjection;
- DeformableBodyInplaceSolverIslandCallback* m_solverDeformableBodyIslandCallback;
-
- typedef void (*btSolverCallback)(btScalar time, btDeformableMultiBodyDynamicsWorld* world);
- btSolverCallback m_solverCallback;
-
-protected:
- virtual void internalSingleStepSimulation(btScalar timeStep);
-
- virtual void integrateTransforms(btScalar timeStep);
-
- void positionCorrection(btScalar timeStep);
-
- void solveConstraints(btScalar timeStep);
-
- void updateActivationState(btScalar timeStep);
-
- void clearGravity();
-
-public:
- btDeformableMultiBodyDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btDeformableMultiBodyConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration, btDeformableBodySolver* deformableBodySolver = 0);
-
- virtual int stepSimulation(btScalar timeStep, int maxSubSteps = 1, btScalar fixedTimeStep = btScalar(1.) / btScalar(60.));
-
- virtual void debugDrawWorld();
-
- void setSolverCallback(btSolverCallback cb)
- {
- m_solverCallback = cb;
- }
-
- virtual ~btDeformableMultiBodyDynamicsWorld();
-
- virtual btMultiBodyDynamicsWorld* getMultiBodyDynamicsWorld()
- {
- return (btMultiBodyDynamicsWorld*)(this);
- }
-
- virtual const btMultiBodyDynamicsWorld* getMultiBodyDynamicsWorld() const
- {
- return (const btMultiBodyDynamicsWorld*)(this);
- }
-
- virtual btDynamicsWorldType getWorldType() const
- {
- return BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD;
- }
-
- virtual void predictUnconstraintMotion(btScalar timeStep);
-
- virtual void addSoftBody(btSoftBody* body, int collisionFilterGroup = btBroadphaseProxy::DefaultFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter);
-
- btSoftBodyArray& getSoftBodyArray()
- {
- return m_softBodies;
- }
-
- const btSoftBodyArray& getSoftBodyArray() const
- {
- return m_softBodies;
- }
-
- btSoftBodyWorldInfo& getWorldInfo()
- {
- return m_sbi;
- }
-
- const btSoftBodyWorldInfo& getWorldInfo() const
- {
- return m_sbi;
- }
-
- void reinitialize(btScalar timeStep);
-
- void applyRigidBodyGravity(btScalar timeStep);
-
- void beforeSolverCallbacks(btScalar timeStep);
-
- void afterSolverCallbacks(btScalar timeStep);
-
- void addForce(btSoftBody* psb, btDeformableLagrangianForce* force);
-
- void removeForce(btSoftBody* psb, btDeformableLagrangianForce* force);
-
- void removeSoftBodyForce(btSoftBody* psb);
-
- void removeSoftBody(btSoftBody* body);
-
- void removeCollisionObject(btCollisionObject* collisionObject);
-
- int getDrawFlags() const { return (m_drawFlags); }
- void setDrawFlags(int f) { m_drawFlags = f; }
-
- void setupConstraints();
-
- void performDeformableCollisionDetection();
-
- void solveMultiBodyConstraints();
-
- void solveContactConstraints();
-
- void sortConstraints();
-
- void softBodySelfCollision();
-
- void setImplicit(bool implicit)
- {
- m_implicit = implicit;
- }
-
- void setLineSearch(bool lineSearch)
- {
- m_lineSearch = lineSearch;
- }
-
- void setUseProjection(bool useProjection)
- {
- m_useProjection = useProjection;
- }
-
- void applyRepulsionForce(btScalar timeStep);
-
- void performGeometricCollisions(btScalar timeStep);
-
- struct btDeformableSingleRayCallback : public btBroadphaseRayCallback
- {
- btVector3 m_rayFromWorld;
- btVector3 m_rayToWorld;
- btTransform m_rayFromTrans;
- btTransform m_rayToTrans;
- btVector3 m_hitNormal;
-
- const btDeformableMultiBodyDynamicsWorld* m_world;
- btCollisionWorld::RayResultCallback& m_resultCallback;
-
- btDeformableSingleRayCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld, const btDeformableMultiBodyDynamicsWorld* world, btCollisionWorld::RayResultCallback& resultCallback)
- : m_rayFromWorld(rayFromWorld),
- m_rayToWorld(rayToWorld),
- m_world(world),
- m_resultCallback(resultCallback)
- {
- m_rayFromTrans.setIdentity();
- m_rayFromTrans.setOrigin(m_rayFromWorld);
- m_rayToTrans.setIdentity();
- m_rayToTrans.setOrigin(m_rayToWorld);
-
- btVector3 rayDir = (rayToWorld - rayFromWorld);
-
- rayDir.normalize();
- ///what about division by zero? --> just set rayDirection[i] to INF/1e30
- m_rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[0];
- m_rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[1];
- m_rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[2];
- m_signs[0] = m_rayDirectionInverse[0] < 0.0;
- m_signs[1] = m_rayDirectionInverse[1] < 0.0;
- m_signs[2] = m_rayDirectionInverse[2] < 0.0;
-
- m_lambda_max = rayDir.dot(m_rayToWorld - m_rayFromWorld);
- }
-
- virtual bool process(const btBroadphaseProxy* proxy)
- {
- ///terminate further ray tests, once the closestHitFraction reached zero
- if (m_resultCallback.m_closestHitFraction == btScalar(0.f))
- return false;
-
- btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
-
- //only perform raycast if filterMask matches
- if (m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- //btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
-#if 0
-#ifdef RECALCULATE_AABB
- btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
- collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(),collisionObjectAabbMin,collisionObjectAabbMax);
-#else
- //getBroadphase()->getAabb(collisionObject->getBroadphaseHandle(),collisionObjectAabbMin,collisionObjectAabbMax);
- const btVector3& collisionObjectAabbMin = collisionObject->getBroadphaseHandle()->m_aabbMin;
- const btVector3& collisionObjectAabbMax = collisionObject->getBroadphaseHandle()->m_aabbMax;
-#endif
-#endif
- //btScalar hitLambda = m_resultCallback.m_closestHitFraction;
- //culling already done by broadphase
- //if (btRayAabb(m_rayFromWorld,m_rayToWorld,collisionObjectAabbMin,collisionObjectAabbMax,hitLambda,m_hitNormal))
- {
- m_world->rayTestSingle(m_rayFromTrans, m_rayToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- m_resultCallback);
- }
- }
- return true;
- }
- };
-
- void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const
- {
- BT_PROFILE("rayTest");
- /// use the broadphase to accelerate the search for objects, based on their aabb
- /// and for each object with ray-aabb overlap, perform an exact ray test
- btDeformableSingleRayCallback rayCB(rayFromWorld, rayToWorld, this, resultCallback);
-
-#ifndef USE_BRUTEFORCE_RAYBROADPHASE
- m_broadphasePairCache->rayTest(rayFromWorld, rayToWorld, rayCB);
-#else
- for (int i = 0; i < this->getNumCollisionObjects(); i++)
- {
- rayCB.process(m_collisionObjects[i]->getBroadphaseHandle());
- }
-#endif //USE_BRUTEFORCE_RAYBROADPHASE
- }
-
- void rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback) const
- {
- if (collisionShape->isSoftBody())
- {
- btSoftBody* softBody = btSoftBody::upcast(collisionObject);
- if (softBody)
- {
- btSoftBody::sRayCast softResult;
- if (softBody->rayFaceTest(rayFromTrans.getOrigin(), rayToTrans.getOrigin(), softResult))
- {
- if (softResult.fraction <= resultCallback.m_closestHitFraction)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = 0;
- shapeInfo.m_triangleIndex = softResult.index;
- // get the normal
- btVector3 rayDir = rayToTrans.getOrigin() - rayFromTrans.getOrigin();
- btVector3 normal = -rayDir;
- normal.normalize();
- {
- normal = softBody->m_faces[softResult.index].m_normal;
- if (normal.dot(rayDir) > 0)
- {
- // normal always point toward origin of the ray
- normal = -normal;
- }
- }
-
- btCollisionWorld::LocalRayResult rayResult(collisionObject,
- &shapeInfo,
- normal,
- softResult.fraction);
- bool normalInWorldSpace = true;
- resultCallback.addSingleResult(rayResult, normalInWorldSpace);
- }
- }
- }
- }
- else
- {
- btCollisionWorld::rayTestSingle(rayFromTrans, rayToTrans, collisionObject, collisionShape, colObjWorldTransform, resultCallback);
- }
- }
-};
-
-#endif //BT_DEFORMABLE_MULTIBODY_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletSoftBody/btDeformableNeoHookeanForce.h b/thirdparty/bullet/BulletSoftBody/btDeformableNeoHookeanForce.h
deleted file mode 100644
index 60798c5bcd..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btDeformableNeoHookeanForce.h
+++ /dev/null
@@ -1,420 +0,0 @@
-/*
-Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2019 Google Inc. http://bulletphysics.org
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_NEOHOOKEAN_H
-#define BT_NEOHOOKEAN_H
-
-#include "btDeformableLagrangianForce.h"
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btImplicitQRSVD.h"
-// This energy is as described in https://graphics.pixar.com/library/StableElasticity/paper.pdf
-class btDeformableNeoHookeanForce : public btDeformableLagrangianForce
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- btScalar m_mu, m_lambda; // Lame Parameters
- btScalar m_E, m_nu; // Young's modulus and Poisson ratio
- btScalar m_mu_damp, m_lambda_damp;
- btDeformableNeoHookeanForce() : m_mu(1), m_lambda(1)
- {
- btScalar damping = 0.05;
- m_mu_damp = damping * m_mu;
- m_lambda_damp = damping * m_lambda;
- updateYoungsModulusAndPoissonRatio();
- }
-
- btDeformableNeoHookeanForce(btScalar mu, btScalar lambda, btScalar damping = 0.05) : m_mu(mu), m_lambda(lambda)
- {
- m_mu_damp = damping * m_mu;
- m_lambda_damp = damping * m_lambda;
- updateYoungsModulusAndPoissonRatio();
- }
-
- void updateYoungsModulusAndPoissonRatio()
- {
- // conversion from Lame Parameters to Young's modulus and Poisson ratio
- // https://en.wikipedia.org/wiki/Lam%C3%A9_parameters
- m_E = m_mu * (3 * m_lambda + 2 * m_mu) / (m_lambda + m_mu);
- m_nu = m_lambda * 0.5 / (m_mu + m_lambda);
- }
-
- void updateLameParameters()
- {
- // conversion from Young's modulus and Poisson ratio to Lame Parameters
- // https://en.wikipedia.org/wiki/Lam%C3%A9_parameters
- m_mu = m_E * 0.5 / (1 + m_nu);
- m_lambda = m_E * m_nu / ((1 + m_nu) * (1 - 2 * m_nu));
- }
-
- void setYoungsModulus(btScalar E)
- {
- m_E = E;
- updateLameParameters();
- }
-
- void setPoissonRatio(btScalar nu)
- {
- m_nu = nu;
- updateLameParameters();
- }
-
- void setDamping(btScalar damping)
- {
- m_mu_damp = damping * m_mu;
- m_lambda_damp = damping * m_lambda;
- }
-
- void setLameParameters(btScalar mu, btScalar lambda)
- {
- m_mu = mu;
- m_lambda = lambda;
- updateYoungsModulusAndPoissonRatio();
- }
-
- virtual void addScaledForces(btScalar scale, TVStack& force)
- {
- addScaledDampingForce(scale, force);
- addScaledElasticForce(scale, force);
- }
-
- virtual void addScaledExplicitForce(btScalar scale, TVStack& force)
- {
- addScaledElasticForce(scale, force);
- }
-
- // The damping matrix is calculated using the time n state as described in https://www.math.ucla.edu/~jteran/papers/GSSJT15.pdf to allow line search
- virtual void addScaledDampingForce(btScalar scale, TVStack& force)
- {
- if (m_mu_damp == 0 && m_lambda_damp == 0)
- return;
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
- btMatrix3x3 dF = DsFromVelocity(node0, node1, node2, node3) * tetra.m_Dm_inverse;
- btMatrix3x3 I;
- I.setIdentity();
- btMatrix3x3 dP = (dF + dF.transpose()) * m_mu_damp + I * (dF[0][0] + dF[1][1] + dF[2][2]) * m_lambda_damp;
- // firstPiolaDampingDifferential(psb->m_tetraScratchesTn[j], dF, dP);
- btVector3 df_on_node0 = dP * (tetra.m_Dm_inverse.transpose() * grad_N_hat_1st_col);
- btMatrix3x3 df_on_node123 = dP * tetra.m_Dm_inverse.transpose();
-
- // damping force differential
- btScalar scale1 = scale * tetra.m_element_measure;
- force[id0] -= scale1 * df_on_node0;
- force[id1] -= scale1 * df_on_node123.getColumn(0);
- force[id2] -= scale1 * df_on_node123.getColumn(1);
- force[id3] -= scale1 * df_on_node123.getColumn(2);
- }
- }
- }
-
- virtual double totalElasticEnergy(btScalar dt)
- {
- double energy = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetraScratches.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::TetraScratch& s = psb->m_tetraScratches[j];
- energy += tetra.m_element_measure * elasticEnergyDensity(s);
- }
- }
- return energy;
- }
-
- // The damping energy is formulated as in https://www.math.ucla.edu/~jteran/papers/GSSJT15.pdf to allow line search
- virtual double totalDampingEnergy(btScalar dt)
- {
- double energy = 0;
- int sz = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- sz = btMax(sz, psb->m_nodes[j].index);
- }
- }
- TVStack dampingForce;
- dampingForce.resize(sz + 1);
- for (int i = 0; i < dampingForce.size(); ++i)
- dampingForce[i].setZero();
- addScaledDampingForce(0.5, dampingForce);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- energy -= dampingForce[node.index].dot(node.m_v) / dt;
- }
- }
- return energy;
- }
-
- double elasticEnergyDensity(const btSoftBody::TetraScratch& s)
- {
- double density = 0;
- density += m_mu * 0.5 * (s.m_trace - 3.);
- density += m_lambda * 0.5 * (s.m_J - 1. - 0.75 * m_mu / m_lambda) * (s.m_J - 1. - 0.75 * m_mu / m_lambda);
- density -= m_mu * 0.5 * log(s.m_trace + 1);
- return density;
- }
-
- virtual void addScaledElasticForce(btScalar scale, TVStack& force)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= force.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- btScalar max_p = psb->m_cfg.m_maxStress;
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btMatrix3x3 P;
- firstPiola(psb->m_tetraScratches[j], P);
-#ifdef USE_SVD
- if (max_p > 0)
- {
- // since we want to clamp the principal stress to max_p, we only need to
- // calculate SVD when sigma_0^2 + sigma_1^2 + sigma_2^2 > max_p * max_p
- btScalar trPTP = (P[0].length2() + P[1].length2() + P[2].length2());
- if (trPTP > max_p * max_p)
- {
- btMatrix3x3 U, V;
- btVector3 sigma;
- singularValueDecomposition(P, U, sigma, V);
- sigma[0] = btMin(sigma[0], max_p);
- sigma[1] = btMin(sigma[1], max_p);
- sigma[2] = btMin(sigma[2], max_p);
- sigma[0] = btMax(sigma[0], -max_p);
- sigma[1] = btMax(sigma[1], -max_p);
- sigma[2] = btMax(sigma[2], -max_p);
- btMatrix3x3 Sigma;
- Sigma.setIdentity();
- Sigma[0][0] = sigma[0];
- Sigma[1][1] = sigma[1];
- Sigma[2][2] = sigma[2];
- P = U * Sigma * V.transpose();
- }
- }
-#endif
- // btVector3 force_on_node0 = P * (tetra.m_Dm_inverse.transpose()*grad_N_hat_1st_col);
- btMatrix3x3 force_on_node123 = P * tetra.m_Dm_inverse.transpose();
- btVector3 force_on_node0 = force_on_node123 * grad_N_hat_1st_col;
-
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
-
- // elastic force
- btScalar scale1 = scale * tetra.m_element_measure;
- force[id0] -= scale1 * force_on_node0;
- force[id1] -= scale1 * force_on_node123.getColumn(0);
- force[id2] -= scale1 * force_on_node123.getColumn(1);
- force[id3] -= scale1 * force_on_node123.getColumn(2);
- }
- }
- }
-
- // The damping matrix is calculated using the time n state as described in https://www.math.ucla.edu/~jteran/papers/GSSJT15.pdf to allow line search
- virtual void addScaledDampingForceDifferential(btScalar scale, const TVStack& dv, TVStack& df)
- {
- if (m_mu_damp == 0 && m_lambda_damp == 0)
- return;
- int numNodes = getNumNodes();
- btAssert(numNodes <= df.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
- btMatrix3x3 dF = Ds(id0, id1, id2, id3, dv) * tetra.m_Dm_inverse;
- btMatrix3x3 I;
- I.setIdentity();
- btMatrix3x3 dP = (dF + dF.transpose()) * m_mu_damp + I * (dF[0][0] + dF[1][1] + dF[2][2]) * m_lambda_damp;
- // firstPiolaDampingDifferential(psb->m_tetraScratchesTn[j], dF, dP);
- // btVector3 df_on_node0 = dP * (tetra.m_Dm_inverse.transpose()*grad_N_hat_1st_col);
- btMatrix3x3 df_on_node123 = dP * tetra.m_Dm_inverse.transpose();
- btVector3 df_on_node0 = df_on_node123 * grad_N_hat_1st_col;
-
- // damping force differential
- btScalar scale1 = scale * tetra.m_element_measure;
- df[id0] -= scale1 * df_on_node0;
- df[id1] -= scale1 * df_on_node123.getColumn(0);
- df[id2] -= scale1 * df_on_node123.getColumn(1);
- df[id3] -= scale1 * df_on_node123.getColumn(2);
- }
- }
- }
-
- virtual void buildDampingForceDifferentialDiagonal(btScalar scale, TVStack& diagA) {}
-
- virtual void addScaledElasticForceDifferential(btScalar scale, const TVStack& dx, TVStack& df)
- {
- int numNodes = getNumNodes();
- btAssert(numNodes <= df.size());
- btVector3 grad_N_hat_1st_col = btVector3(-1, -1, -1);
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- if (!psb->isActive())
- {
- continue;
- }
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- btSoftBody::Tetra& tetra = psb->m_tetras[j];
- btSoftBody::Node* node0 = tetra.m_n[0];
- btSoftBody::Node* node1 = tetra.m_n[1];
- btSoftBody::Node* node2 = tetra.m_n[2];
- btSoftBody::Node* node3 = tetra.m_n[3];
- size_t id0 = node0->index;
- size_t id1 = node1->index;
- size_t id2 = node2->index;
- size_t id3 = node3->index;
- btMatrix3x3 dF = Ds(id0, id1, id2, id3, dx) * tetra.m_Dm_inverse;
- btMatrix3x3 dP;
- firstPiolaDifferential(psb->m_tetraScratches[j], dF, dP);
- // btVector3 df_on_node0 = dP * (tetra.m_Dm_inverse.transpose()*grad_N_hat_1st_col);
- btMatrix3x3 df_on_node123 = dP * tetra.m_Dm_inverse.transpose();
- btVector3 df_on_node0 = df_on_node123 * grad_N_hat_1st_col;
-
- // elastic force differential
- btScalar scale1 = scale * tetra.m_element_measure;
- df[id0] -= scale1 * df_on_node0;
- df[id1] -= scale1 * df_on_node123.getColumn(0);
- df[id2] -= scale1 * df_on_node123.getColumn(1);
- df[id3] -= scale1 * df_on_node123.getColumn(2);
- }
- }
- }
-
- void firstPiola(const btSoftBody::TetraScratch& s, btMatrix3x3& P)
- {
- btScalar c1 = (m_mu * (1. - 1. / (s.m_trace + 1.)));
- btScalar c2 = (m_lambda * (s.m_J - 1.) - 0.75 * m_mu);
- P = s.m_F * c1 + s.m_cofF * c2;
- }
-
- // Let P be the first piola stress.
- // This function calculates the dP = dP/dF * dF
- void firstPiolaDifferential(const btSoftBody::TetraScratch& s, const btMatrix3x3& dF, btMatrix3x3& dP)
- {
- btScalar c1 = m_mu * (1. - 1. / (s.m_trace + 1.));
- btScalar c2 = (2. * m_mu) * DotProduct(s.m_F, dF) * (1. / ((1. + s.m_trace) * (1. + s.m_trace)));
- btScalar c3 = (m_lambda * DotProduct(s.m_cofF, dF));
- dP = dF * c1 + s.m_F * c2;
- addScaledCofactorMatrixDifferential(s.m_F, dF, m_lambda * (s.m_J - 1.) - 0.75 * m_mu, dP);
- dP += s.m_cofF * c3;
- }
-
- // Let Q be the damping stress.
- // This function calculates the dP = dQ/dF * dF
- void firstPiolaDampingDifferential(const btSoftBody::TetraScratch& s, const btMatrix3x3& dF, btMatrix3x3& dP)
- {
- btScalar c1 = (m_mu_damp * (1. - 1. / (s.m_trace + 1.)));
- btScalar c2 = ((2. * m_mu_damp) * DotProduct(s.m_F, dF) * (1. / ((1. + s.m_trace) * (1. + s.m_trace))));
- btScalar c3 = (m_lambda_damp * DotProduct(s.m_cofF, dF));
- dP = dF * c1 + s.m_F * c2;
- addScaledCofactorMatrixDifferential(s.m_F, dF, m_lambda_damp * (s.m_J - 1.) - 0.75 * m_mu_damp, dP);
- dP += s.m_cofF * c3;
- }
-
- btScalar DotProduct(const btMatrix3x3& A, const btMatrix3x3& B)
- {
- btScalar ans = 0;
- for (int i = 0; i < 3; ++i)
- {
- ans += A[i].dot(B[i]);
- }
- return ans;
- }
-
- // Let C(A) be the cofactor of the matrix A
- // Let H = the derivative of C(A) with respect to A evaluated at F = A
- // This function calculates H*dF
- void addScaledCofactorMatrixDifferential(const btMatrix3x3& F, const btMatrix3x3& dF, btScalar scale, btMatrix3x3& M)
- {
- M[0][0] += scale * (dF[1][1] * F[2][2] + F[1][1] * dF[2][2] - dF[2][1] * F[1][2] - F[2][1] * dF[1][2]);
- M[1][0] += scale * (dF[2][1] * F[0][2] + F[2][1] * dF[0][2] - dF[0][1] * F[2][2] - F[0][1] * dF[2][2]);
- M[2][0] += scale * (dF[0][1] * F[1][2] + F[0][1] * dF[1][2] - dF[1][1] * F[0][2] - F[1][1] * dF[0][2]);
- M[0][1] += scale * (dF[2][0] * F[1][2] + F[2][0] * dF[1][2] - dF[1][0] * F[2][2] - F[1][0] * dF[2][2]);
- M[1][1] += scale * (dF[0][0] * F[2][2] + F[0][0] * dF[2][2] - dF[2][0] * F[0][2] - F[2][0] * dF[0][2]);
- M[2][1] += scale * (dF[1][0] * F[0][2] + F[1][0] * dF[0][2] - dF[0][0] * F[1][2] - F[0][0] * dF[1][2]);
- M[0][2] += scale * (dF[1][0] * F[2][1] + F[1][0] * dF[2][1] - dF[2][0] * F[1][1] - F[2][0] * dF[1][1]);
- M[1][2] += scale * (dF[2][0] * F[0][1] + F[2][0] * dF[0][1] - dF[0][0] * F[2][1] - F[0][0] * dF[2][1]);
- M[2][2] += scale * (dF[0][0] * F[1][1] + F[0][0] * dF[1][1] - dF[1][0] * F[0][1] - F[1][0] * dF[0][1]);
- }
-
- virtual btDeformableLagrangianForceType getForceType()
- {
- return BT_NEOHOOKEAN_FORCE;
- }
-};
-#endif /* BT_NEOHOOKEAN_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btKrylovSolver.h b/thirdparty/bullet/BulletSoftBody/btKrylovSolver.h
deleted file mode 100644
index 59126b47ae..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btKrylovSolver.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_KRYLOV_SOLVER_H
-#define BT_KRYLOV_SOLVER_H
-#include <iostream>
-#include <cmath>
-#include <limits>
-#include <LinearMath/btAlignedObjectArray.h>
-#include <LinearMath/btVector3.h>
-#include <LinearMath/btScalar.h>
-#include "LinearMath/btQuickprof.h"
-
-template <class MatrixX>
-class btKrylovSolver
-{
- typedef btAlignedObjectArray<btVector3> TVStack;
-
-public:
- int m_maxIterations;
- btScalar m_tolerance;
- btKrylovSolver(int maxIterations, btScalar tolerance)
- : m_maxIterations(maxIterations), m_tolerance(tolerance)
- {
- }
-
- virtual ~btKrylovSolver() {}
-
- virtual int solve(MatrixX& A, TVStack& x, const TVStack& b, bool verbose = false) = 0;
-
- virtual void reinitialize(const TVStack& b) = 0;
-
- virtual SIMD_FORCE_INLINE TVStack sub(const TVStack& a, const TVStack& b)
- {
- // c = a-b
- btAssert(a.size() == b.size());
- TVStack c;
- c.resize(a.size());
- for (int i = 0; i < a.size(); ++i)
- {
- c[i] = a[i] - b[i];
- }
- return c;
- }
-
- virtual SIMD_FORCE_INLINE btScalar squaredNorm(const TVStack& a)
- {
- return dot(a, a);
- }
-
- virtual SIMD_FORCE_INLINE btScalar norm(const TVStack& a)
- {
- btScalar ret = 0;
- for (int i = 0; i < a.size(); ++i)
- {
- for (int d = 0; d < 3; ++d)
- {
- ret = btMax(ret, btFabs(a[i][d]));
- }
- }
- return ret;
- }
-
- virtual SIMD_FORCE_INLINE btScalar dot(const TVStack& a, const TVStack& b)
- {
- btScalar ans(0);
- for (int i = 0; i < a.size(); ++i)
- ans += a[i].dot(b[i]);
- return ans;
- }
-
- virtual SIMD_FORCE_INLINE void multAndAddTo(btScalar s, const TVStack& a, TVStack& result)
- {
- // result += s*a
- btAssert(a.size() == result.size());
- for (int i = 0; i < a.size(); ++i)
- result[i] += s * a[i];
- }
-
- virtual SIMD_FORCE_INLINE TVStack multAndAdd(btScalar s, const TVStack& a, const TVStack& b)
- {
- // result = a*s + b
- TVStack result;
- result.resize(a.size());
- for (int i = 0; i < a.size(); ++i)
- result[i] = s * a[i] + b[i];
- return result;
- }
-
- virtual SIMD_FORCE_INLINE void setTolerance(btScalar tolerance)
- {
- m_tolerance = tolerance;
- }
-};
-#endif /* BT_KRYLOV_SOLVER_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btPreconditioner.h b/thirdparty/bullet/BulletSoftBody/btPreconditioner.h
deleted file mode 100644
index 21c1106a42..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btPreconditioner.h
+++ /dev/null
@@ -1,285 +0,0 @@
-/*
- Written by Xuchen Han <xuchenhan2015@u.northwestern.edu>
-
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
-
-#ifndef BT_PRECONDITIONER_H
-#define BT_PRECONDITIONER_H
-
-class Preconditioner
-{
-public:
- typedef btAlignedObjectArray<btVector3> TVStack;
- virtual void operator()(const TVStack& x, TVStack& b) = 0;
- virtual void reinitialize(bool nodeUpdated) = 0;
- virtual ~Preconditioner() {}
-};
-
-class DefaultPreconditioner : public Preconditioner
-{
-public:
- virtual void operator()(const TVStack& x, TVStack& b)
- {
- btAssert(b.size() == x.size());
- for (int i = 0; i < b.size(); ++i)
- b[i] = x[i];
- }
- virtual void reinitialize(bool nodeUpdated)
- {
- }
-
- virtual ~DefaultPreconditioner() {}
-};
-
-class MassPreconditioner : public Preconditioner
-{
- btAlignedObjectArray<btScalar> m_inv_mass;
- const btAlignedObjectArray<btSoftBody*>& m_softBodies;
-
-public:
- MassPreconditioner(const btAlignedObjectArray<btSoftBody*>& softBodies)
- : m_softBodies(softBodies)
- {
- }
-
- virtual void reinitialize(bool nodeUpdated)
- {
- if (nodeUpdated)
- {
- m_inv_mass.clear();
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- m_inv_mass.push_back(psb->m_nodes[j].m_im);
- }
- }
- }
-
- virtual void operator()(const TVStack& x, TVStack& b)
- {
- btAssert(b.size() == x.size());
- btAssert(m_inv_mass.size() <= x.size());
- for (int i = 0; i < m_inv_mass.size(); ++i)
- {
- b[i] = x[i] * m_inv_mass[i];
- }
- for (int i = m_inv_mass.size(); i < b.size(); ++i)
- {
- b[i] = x[i];
- }
- }
-};
-
-class KKTPreconditioner : public Preconditioner
-{
- const btAlignedObjectArray<btSoftBody*>& m_softBodies;
- const btDeformableContactProjection& m_projections;
- const btAlignedObjectArray<btDeformableLagrangianForce*>& m_lf;
- TVStack m_inv_A, m_inv_S;
- const btScalar& m_dt;
- const bool& m_implicit;
-
-public:
- KKTPreconditioner(const btAlignedObjectArray<btSoftBody*>& softBodies, const btDeformableContactProjection& projections, const btAlignedObjectArray<btDeformableLagrangianForce*>& lf, const btScalar& dt, const bool& implicit)
- : m_softBodies(softBodies), m_projections(projections), m_lf(lf), m_dt(dt), m_implicit(implicit)
- {
- }
-
- virtual void reinitialize(bool nodeUpdated)
- {
- if (nodeUpdated)
- {
- int num_nodes = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- num_nodes += psb->m_nodes.size();
- }
- m_inv_A.resize(num_nodes);
- }
- buildDiagonalA(m_inv_A);
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- // printf("A[%d] = %f, %f, %f \n", i, m_inv_A[i][0], m_inv_A[i][1], m_inv_A[i][2]);
- for (int d = 0; d < 3; ++d)
- {
- m_inv_A[i][d] = (m_inv_A[i][d] == 0) ? 0.0 : 1.0 / m_inv_A[i][d];
- }
- }
- m_inv_S.resize(m_projections.m_lagrangeMultipliers.size());
- // printf("S.size() = %d \n", m_inv_S.size());
- buildDiagonalS(m_inv_A, m_inv_S);
- for (int i = 0; i < m_inv_S.size(); ++i)
- {
- // printf("S[%d] = %f, %f, %f \n", i, m_inv_S[i][0], m_inv_S[i][1], m_inv_S[i][2]);
- for (int d = 0; d < 3; ++d)
- {
- m_inv_S[i][d] = (m_inv_S[i][d] == 0) ? 0.0 : 1.0 / m_inv_S[i][d];
- }
- }
- }
-
- void buildDiagonalA(TVStack& diagA) const
- {
- size_t counter = 0;
- for (int i = 0; i < m_softBodies.size(); ++i)
- {
- btSoftBody* psb = m_softBodies[i];
- for (int j = 0; j < psb->m_nodes.size(); ++j)
- {
- const btSoftBody::Node& node = psb->m_nodes[j];
- diagA[counter] = (node.m_im == 0) ? btVector3(0, 0, 0) : btVector3(1.0 / node.m_im, 1.0 / node.m_im, 1.0 / node.m_im);
- ++counter;
- }
- }
- if (m_implicit)
- {
- printf("implicit not implemented\n");
- btAssert(false);
- }
- for (int i = 0; i < m_lf.size(); ++i)
- {
- // add damping matrix
- m_lf[i]->buildDampingForceDifferentialDiagonal(-m_dt, diagA);
- }
- }
-
- void buildDiagonalS(const TVStack& inv_A, TVStack& diagS)
- {
- for (int c = 0; c < m_projections.m_lagrangeMultipliers.size(); ++c)
- {
- // S[k,k] = e_k^T * C A_d^-1 C^T * e_k
- const LagrangeMultiplier& lm = m_projections.m_lagrangeMultipliers[c];
- btVector3& t = diagS[c];
- t.setZero();
- for (int j = 0; j < lm.m_num_constraints; ++j)
- {
- for (int i = 0; i < lm.m_num_nodes; ++i)
- {
- for (int d = 0; d < 3; ++d)
- {
- t[j] += inv_A[lm.m_indices[i]][d] * lm.m_dirs[j][d] * lm.m_dirs[j][d] * lm.m_weights[i] * lm.m_weights[i];
- }
- }
- }
- }
- }
-//#define USE_FULL_PRECONDITIONER
-#ifndef USE_FULL_PRECONDITIONER
- virtual void operator()(const TVStack& x, TVStack& b)
- {
- btAssert(b.size() == x.size());
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- b[i] = x[i] * m_inv_A[i];
- }
- int offset = m_inv_A.size();
- for (int i = 0; i < m_inv_S.size(); ++i)
- {
- b[i + offset] = x[i + offset] * m_inv_S[i];
- }
- }
-#else
- virtual void operator()(const TVStack& x, TVStack& b)
- {
- btAssert(b.size() == x.size());
- int offset = m_inv_A.size();
-
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- b[i] = x[i] * m_inv_A[i];
- }
-
- for (int i = 0; i < m_inv_S.size(); ++i)
- {
- b[i + offset].setZero();
- }
-
- for (int c = 0; c < m_projections.m_lagrangeMultipliers.size(); ++c)
- {
- const LagrangeMultiplier& lm = m_projections.m_lagrangeMultipliers[c];
- // C * x
- for (int d = 0; d < lm.m_num_constraints; ++d)
- {
- for (int i = 0; i < lm.m_num_nodes; ++i)
- {
- b[offset + c][d] += lm.m_weights[i] * b[lm.m_indices[i]].dot(lm.m_dirs[d]);
- }
- }
- }
-
- for (int i = 0; i < m_inv_S.size(); ++i)
- {
- b[i + offset] = b[i + offset] * m_inv_S[i];
- }
-
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- b[i].setZero();
- }
-
- for (int c = 0; c < m_projections.m_lagrangeMultipliers.size(); ++c)
- {
- // C^T * lambda
- const LagrangeMultiplier& lm = m_projections.m_lagrangeMultipliers[c];
- for (int i = 0; i < lm.m_num_nodes; ++i)
- {
- for (int j = 0; j < lm.m_num_constraints; ++j)
- {
- b[lm.m_indices[i]] += b[offset + c][j] * lm.m_weights[i] * lm.m_dirs[j];
- }
- }
- }
-
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- b[i] = (x[i] - b[i]) * m_inv_A[i];
- }
-
- TVStack t;
- t.resize(b.size());
- for (int i = 0; i < m_inv_S.size(); ++i)
- {
- t[i + offset] = x[i + offset] * m_inv_S[i];
- }
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- t[i].setZero();
- }
- for (int c = 0; c < m_projections.m_lagrangeMultipliers.size(); ++c)
- {
- // C^T * lambda
- const LagrangeMultiplier& lm = m_projections.m_lagrangeMultipliers[c];
- for (int i = 0; i < lm.m_num_nodes; ++i)
- {
- for (int j = 0; j < lm.m_num_constraints; ++j)
- {
- t[lm.m_indices[i]] += t[offset + c][j] * lm.m_weights[i] * lm.m_dirs[j];
- }
- }
- }
- for (int i = 0; i < m_inv_A.size(); ++i)
- {
- b[i] += t[i] * m_inv_A[i];
- }
-
- for (int i = 0; i < m_inv_S.size(); ++i)
- {
- b[i + offset] -= x[i + offset] * m_inv_S[i];
- }
- }
-#endif
-};
-
-#endif /* BT_PRECONDITIONER_H */
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBody.cpp b/thirdparty/bullet/BulletSoftBody/btSoftBody.cpp
deleted file mode 100644
index d1980ea6c5..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBody.cpp
+++ /dev/null
@@ -1,4730 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btSoftBody implementation by Nathanael Presson
-
-#include "btSoftBodyInternals.h"
-#include "BulletSoftBody/btSoftBodySolvers.h"
-#include "btSoftBodyData.h"
-#include "LinearMath/btSerializer.h"
-#include "LinearMath/btImplicitQRSVD.h"
-#include "LinearMath/btAlignedAllocator.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include <iostream>
-//
-static inline btDbvtNode* buildTreeBottomUp(btAlignedObjectArray<btDbvtNode*>& leafNodes, btAlignedObjectArray<btAlignedObjectArray<int> >& adj)
-{
- int N = leafNodes.size();
- if (N == 0)
- {
- return NULL;
- }
- while (N > 1)
- {
- btAlignedObjectArray<bool> marked;
- btAlignedObjectArray<btDbvtNode*> newLeafNodes;
- btAlignedObjectArray<std::pair<int, int> > childIds;
- btAlignedObjectArray<btAlignedObjectArray<int> > newAdj;
- marked.resize(N);
- for (int i = 0; i < N; ++i)
- marked[i] = false;
-
- // pair adjacent nodes into new(parent) node
- for (int i = 0; i < N; ++i)
- {
- if (marked[i])
- continue;
- bool merged = false;
- for (int j = 0; j < adj[i].size(); ++j)
- {
- int n = adj[i][j];
- if (!marked[adj[i][j]])
- {
- btDbvtNode* node = new (btAlignedAlloc(sizeof(btDbvtNode), 16)) btDbvtNode();
- node->parent = NULL;
- node->childs[0] = leafNodes[i];
- node->childs[1] = leafNodes[n];
- leafNodes[i]->parent = node;
- leafNodes[n]->parent = node;
- newLeafNodes.push_back(node);
- childIds.push_back(std::make_pair(i, n));
- merged = true;
- marked[n] = true;
- break;
- }
- }
- if (!merged)
- {
- newLeafNodes.push_back(leafNodes[i]);
- childIds.push_back(std::make_pair(i, -1));
- }
- marked[i] = true;
- }
- // update adjacency matrix
- newAdj.resize(newLeafNodes.size());
- for (int i = 0; i < newLeafNodes.size(); ++i)
- {
- for (int j = i + 1; j < newLeafNodes.size(); ++j)
- {
- bool neighbor = false;
- const btAlignedObjectArray<int>& leftChildNeighbors = adj[childIds[i].first];
- for (int k = 0; k < leftChildNeighbors.size(); ++k)
- {
- if (leftChildNeighbors[k] == childIds[j].first || leftChildNeighbors[k] == childIds[j].second)
- {
- neighbor = true;
- break;
- }
- }
- if (!neighbor && childIds[i].second != -1)
- {
- const btAlignedObjectArray<int>& rightChildNeighbors = adj[childIds[i].second];
- for (int k = 0; k < rightChildNeighbors.size(); ++k)
- {
- if (rightChildNeighbors[k] == childIds[j].first || rightChildNeighbors[k] == childIds[j].second)
- {
- neighbor = true;
- break;
- }
- }
- }
- if (neighbor)
- {
- newAdj[i].push_back(j);
- newAdj[j].push_back(i);
- }
- }
- }
- leafNodes = newLeafNodes;
- //this assignment leaks memory, the assignment doesn't do a deep copy, for now a manual copy
- //adj = newAdj;
- adj.clear();
- adj.resize(newAdj.size());
- for (int i = 0; i < newAdj.size(); i++)
- {
- for (int j = 0; j < newAdj[i].size(); j++)
- {
- adj[i].push_back(newAdj[i][j]);
- }
- }
- N = leafNodes.size();
- }
- return leafNodes[0];
-}
-
-//
-btSoftBody::btSoftBody(btSoftBodyWorldInfo* worldInfo, int node_count, const btVector3* x, const btScalar* m)
- : m_softBodySolver(0), m_worldInfo(worldInfo)
-{
- /* Init */
- initDefaults();
-
- /* Default material */
- Material* pm = appendMaterial();
- pm->m_kLST = 1;
- pm->m_kAST = 1;
- pm->m_kVST = 1;
- pm->m_flags = fMaterial::Default;
-
- /* Nodes */
- const btScalar margin = getCollisionShape()->getMargin();
- m_nodes.resize(node_count);
- m_X.resize(node_count);
- for (int i = 0, ni = node_count; i < ni; ++i)
- {
- Node& n = m_nodes[i];
- ZeroInitialize(n);
- n.m_x = x ? *x++ : btVector3(0, 0, 0);
- n.m_q = n.m_x;
- n.m_im = m ? *m++ : 1;
- n.m_im = n.m_im > 0 ? 1 / n.m_im : 0;
- n.m_leaf = m_ndbvt.insert(btDbvtVolume::FromCR(n.m_x, margin), &n);
- n.m_material = pm;
- m_X[i] = n.m_x;
- }
- updateBounds();
- setCollisionQuadrature(3);
- m_fdbvnt = 0;
-}
-
-btSoftBody::btSoftBody(btSoftBodyWorldInfo* worldInfo)
- : m_worldInfo(worldInfo)
-{
- initDefaults();
-}
-
-void btSoftBody::initDefaults()
-{
- m_internalType = CO_SOFT_BODY;
- m_cfg.aeromodel = eAeroModel::V_Point;
- m_cfg.kVCF = 1;
- m_cfg.kDG = 0;
- m_cfg.kLF = 0;
- m_cfg.kDP = 0;
- m_cfg.kPR = 0;
- m_cfg.kVC = 0;
- m_cfg.kDF = (btScalar)0.2;
- m_cfg.kMT = 0;
- m_cfg.kCHR = (btScalar)1.0;
- m_cfg.kKHR = (btScalar)0.1;
- m_cfg.kSHR = (btScalar)1.0;
- m_cfg.kAHR = (btScalar)0.7;
- m_cfg.kSRHR_CL = (btScalar)0.1;
- m_cfg.kSKHR_CL = (btScalar)1;
- m_cfg.kSSHR_CL = (btScalar)0.5;
- m_cfg.kSR_SPLT_CL = (btScalar)0.5;
- m_cfg.kSK_SPLT_CL = (btScalar)0.5;
- m_cfg.kSS_SPLT_CL = (btScalar)0.5;
- m_cfg.maxvolume = (btScalar)1;
- m_cfg.timescale = 1;
- m_cfg.viterations = 0;
- m_cfg.piterations = 1;
- m_cfg.diterations = 0;
- m_cfg.citerations = 4;
- m_cfg.drag = 0;
- m_cfg.m_maxStress = 0;
- m_cfg.collisions = fCollision::Default;
- m_pose.m_bvolume = false;
- m_pose.m_bframe = false;
- m_pose.m_volume = 0;
- m_pose.m_com = btVector3(0, 0, 0);
- m_pose.m_rot.setIdentity();
- m_pose.m_scl.setIdentity();
- m_tag = 0;
- m_timeacc = 0;
- m_bUpdateRtCst = true;
- m_bounds[0] = btVector3(0, 0, 0);
- m_bounds[1] = btVector3(0, 0, 0);
- m_worldTransform.setIdentity();
- setSolver(eSolverPresets::Positions);
-
- /* Collision shape */
- ///for now, create a collision shape internally
- m_collisionShape = new btSoftBodyCollisionShape(this);
- m_collisionShape->setMargin(0.25f);
-
- m_worldTransform.setIdentity();
-
- m_windVelocity = btVector3(0, 0, 0);
- m_restLengthScale = btScalar(1.0);
- m_dampingCoefficient = 1.0;
- m_sleepingThreshold = .04;
- m_useSelfCollision = false;
- m_collisionFlags = 0;
- m_softSoftCollision = false;
- m_maxSpeedSquared = 0;
- m_repulsionStiffness = 0.5;
- m_gravityFactor = 1;
- m_cacheBarycenter = false;
- m_fdbvnt = 0;
-}
-
-//
-btSoftBody::~btSoftBody()
-{
- //for now, delete the internal shape
- delete m_collisionShape;
- int i;
-
- releaseClusters();
- for (i = 0; i < m_materials.size(); ++i)
- btAlignedFree(m_materials[i]);
- for (i = 0; i < m_joints.size(); ++i)
- btAlignedFree(m_joints[i]);
- if (m_fdbvnt)
- delete m_fdbvnt;
-}
-
-//
-bool btSoftBody::checkLink(int node0, int node1) const
-{
- return (checkLink(&m_nodes[node0], &m_nodes[node1]));
-}
-
-//
-bool btSoftBody::checkLink(const Node* node0, const Node* node1) const
-{
- const Node* n[] = {node0, node1};
- for (int i = 0, ni = m_links.size(); i < ni; ++i)
- {
- const Link& l = m_links[i];
- if ((l.m_n[0] == n[0] && l.m_n[1] == n[1]) ||
- (l.m_n[0] == n[1] && l.m_n[1] == n[0]))
- {
- return (true);
- }
- }
- return (false);
-}
-
-//
-bool btSoftBody::checkFace(int node0, int node1, int node2) const
-{
- const Node* n[] = {&m_nodes[node0],
- &m_nodes[node1],
- &m_nodes[node2]};
- for (int i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- const Face& f = m_faces[i];
- int c = 0;
- for (int j = 0; j < 3; ++j)
- {
- if ((f.m_n[j] == n[0]) ||
- (f.m_n[j] == n[1]) ||
- (f.m_n[j] == n[2]))
- c |= 1 << j;
- else
- break;
- }
- if (c == 7) return (true);
- }
- return (false);
-}
-
-//
-btSoftBody::Material* btSoftBody::appendMaterial()
-{
- Material* pm = new (btAlignedAlloc(sizeof(Material), 16)) Material();
- if (m_materials.size() > 0)
- *pm = *m_materials[0];
- else
- ZeroInitialize(*pm);
- m_materials.push_back(pm);
- return (pm);
-}
-
-//
-void btSoftBody::appendNote(const char* text,
- const btVector3& o,
- const btVector4& c,
- Node* n0,
- Node* n1,
- Node* n2,
- Node* n3)
-{
- Note n;
- ZeroInitialize(n);
- n.m_rank = 0;
- n.m_text = text;
- n.m_offset = o;
- n.m_coords[0] = c.x();
- n.m_coords[1] = c.y();
- n.m_coords[2] = c.z();
- n.m_coords[3] = c.w();
- n.m_nodes[0] = n0;
- n.m_rank += n0 ? 1 : 0;
- n.m_nodes[1] = n1;
- n.m_rank += n1 ? 1 : 0;
- n.m_nodes[2] = n2;
- n.m_rank += n2 ? 1 : 0;
- n.m_nodes[3] = n3;
- n.m_rank += n3 ? 1 : 0;
- m_notes.push_back(n);
-}
-
-//
-void btSoftBody::appendNote(const char* text,
- const btVector3& o,
- Node* feature)
-{
- appendNote(text, o, btVector4(1, 0, 0, 0), feature);
-}
-
-//
-void btSoftBody::appendNote(const char* text,
- const btVector3& o,
- Link* feature)
-{
- static const btScalar w = 1 / (btScalar)2;
- appendNote(text, o, btVector4(w, w, 0, 0), feature->m_n[0],
- feature->m_n[1]);
-}
-
-//
-void btSoftBody::appendNote(const char* text,
- const btVector3& o,
- Face* feature)
-{
- static const btScalar w = 1 / (btScalar)3;
- appendNote(text, o, btVector4(w, w, w, 0), feature->m_n[0],
- feature->m_n[1],
- feature->m_n[2]);
-}
-
-//
-void btSoftBody::appendNode(const btVector3& x, btScalar m)
-{
- if (m_nodes.capacity() == m_nodes.size())
- {
- pointersToIndices();
- m_nodes.reserve(m_nodes.size() * 2 + 1);
- indicesToPointers();
- }
- const btScalar margin = getCollisionShape()->getMargin();
- m_nodes.push_back(Node());
- Node& n = m_nodes[m_nodes.size() - 1];
- ZeroInitialize(n);
- n.m_x = x;
- n.m_q = n.m_x;
- n.m_im = m > 0 ? 1 / m : 0;
- n.m_material = m_materials[0];
- n.m_leaf = m_ndbvt.insert(btDbvtVolume::FromCR(n.m_x, margin), &n);
-}
-
-//
-void btSoftBody::appendLink(int model, Material* mat)
-{
- Link l;
- if (model >= 0)
- l = m_links[model];
- else
- {
- ZeroInitialize(l);
- l.m_material = mat ? mat : m_materials[0];
- }
- m_links.push_back(l);
-}
-
-//
-void btSoftBody::appendLink(int node0,
- int node1,
- Material* mat,
- bool bcheckexist)
-{
- appendLink(&m_nodes[node0], &m_nodes[node1], mat, bcheckexist);
-}
-
-//
-void btSoftBody::appendLink(Node* node0,
- Node* node1,
- Material* mat,
- bool bcheckexist)
-{
- if ((!bcheckexist) || (!checkLink(node0, node1)))
- {
- appendLink(-1, mat);
- Link& l = m_links[m_links.size() - 1];
- l.m_n[0] = node0;
- l.m_n[1] = node1;
- l.m_rl = (l.m_n[0]->m_x - l.m_n[1]->m_x).length();
- m_bUpdateRtCst = true;
- }
-}
-
-//
-void btSoftBody::appendFace(int model, Material* mat)
-{
- Face f;
- if (model >= 0)
- {
- f = m_faces[model];
- }
- else
- {
- ZeroInitialize(f);
- f.m_material = mat ? mat : m_materials[0];
- }
- m_faces.push_back(f);
-}
-
-//
-void btSoftBody::appendFace(int node0, int node1, int node2, Material* mat)
-{
- if (node0 == node1)
- return;
- if (node1 == node2)
- return;
- if (node2 == node0)
- return;
-
- appendFace(-1, mat);
- Face& f = m_faces[m_faces.size() - 1];
- btAssert(node0 != node1);
- btAssert(node1 != node2);
- btAssert(node2 != node0);
- f.m_n[0] = &m_nodes[node0];
- f.m_n[1] = &m_nodes[node1];
- f.m_n[2] = &m_nodes[node2];
- f.m_ra = AreaOf(f.m_n[0]->m_x,
- f.m_n[1]->m_x,
- f.m_n[2]->m_x);
- m_bUpdateRtCst = true;
-}
-
-//
-void btSoftBody::appendTetra(int model, Material* mat)
-{
- Tetra t;
- if (model >= 0)
- t = m_tetras[model];
- else
- {
- ZeroInitialize(t);
- t.m_material = mat ? mat : m_materials[0];
- }
- m_tetras.push_back(t);
-}
-
-//
-void btSoftBody::appendTetra(int node0,
- int node1,
- int node2,
- int node3,
- Material* mat)
-{
- appendTetra(-1, mat);
- Tetra& t = m_tetras[m_tetras.size() - 1];
- t.m_n[0] = &m_nodes[node0];
- t.m_n[1] = &m_nodes[node1];
- t.m_n[2] = &m_nodes[node2];
- t.m_n[3] = &m_nodes[node3];
- t.m_rv = VolumeOf(t.m_n[0]->m_x, t.m_n[1]->m_x, t.m_n[2]->m_x, t.m_n[3]->m_x);
- m_bUpdateRtCst = true;
-}
-
-//
-
-void btSoftBody::appendAnchor(int node, btRigidBody* body, bool disableCollisionBetweenLinkedBodies, btScalar influence)
-{
- btVector3 local = body->getWorldTransform().inverse() * m_nodes[node].m_x;
- appendAnchor(node, body, local, disableCollisionBetweenLinkedBodies, influence);
-}
-
-//
-void btSoftBody::appendAnchor(int node, btRigidBody* body, const btVector3& localPivot, bool disableCollisionBetweenLinkedBodies, btScalar influence)
-{
- if (disableCollisionBetweenLinkedBodies)
- {
- if (m_collisionDisabledObjects.findLinearSearch(body) == m_collisionDisabledObjects.size())
- {
- m_collisionDisabledObjects.push_back(body);
- }
- }
-
- Anchor a;
- a.m_node = &m_nodes[node];
- a.m_body = body;
- a.m_local = localPivot;
- a.m_node->m_battach = 1;
- a.m_influence = influence;
- m_anchors.push_back(a);
-}
-
-//
-void btSoftBody::appendDeformableAnchor(int node, btRigidBody* body)
-{
- DeformableNodeRigidAnchor c;
- btSoftBody::Node& n = m_nodes[node];
- const btScalar ima = n.m_im;
- const btScalar imb = body->getInvMass();
- btVector3 nrm;
- const btCollisionShape* shp = body->getCollisionShape();
- const btTransform& wtr = body->getWorldTransform();
- btScalar dst =
- m_worldInfo->m_sparsesdf.Evaluate(
- wtr.invXform(m_nodes[node].m_x),
- shp,
- nrm,
- 0);
-
- c.m_cti.m_colObj = body;
- c.m_cti.m_normal = wtr.getBasis() * nrm;
- c.m_cti.m_offset = dst;
- c.m_node = &m_nodes[node];
- const btScalar fc = m_cfg.kDF * body->getFriction();
- c.m_c2 = ima;
- c.m_c3 = fc;
- c.m_c4 = body->isStaticOrKinematicObject() ? m_cfg.kKHR : m_cfg.kCHR;
- static const btMatrix3x3 iwiStatic(0, 0, 0, 0, 0, 0, 0, 0, 0);
- const btMatrix3x3& iwi = body->getInvInertiaTensorWorld();
- const btVector3 ra = n.m_x - wtr.getOrigin();
-
- c.m_c0 = ImpulseMatrix(1, ima, imb, iwi, ra);
- c.m_c1 = ra;
- c.m_local = body->getWorldTransform().inverse() * m_nodes[node].m_x;
- c.m_node->m_battach = 1;
- m_deformableAnchors.push_back(c);
-}
-
-void btSoftBody::removeAnchor(int node)
-{
- const btSoftBody::Node& n = m_nodes[node];
- for (int i = 0; i < m_deformableAnchors.size();)
- {
- const DeformableNodeRigidAnchor& c = m_deformableAnchors[i];
- if (c.m_node == &n)
- {
- m_deformableAnchors.removeAtIndex(i);
- }
- else
- {
- i++;
- }
- }
-}
-
-//
-void btSoftBody::appendDeformableAnchor(int node, btMultiBodyLinkCollider* link)
-{
- DeformableNodeRigidAnchor c;
- btSoftBody::Node& n = m_nodes[node];
- const btScalar ima = n.m_im;
- btVector3 nrm;
- const btCollisionShape* shp = link->getCollisionShape();
- const btTransform& wtr = link->getWorldTransform();
- btScalar dst =
- m_worldInfo->m_sparsesdf.Evaluate(
- wtr.invXform(m_nodes[node].m_x),
- shp,
- nrm,
- 0);
- c.m_cti.m_colObj = link;
- c.m_cti.m_normal = wtr.getBasis() * nrm;
- c.m_cti.m_offset = dst;
- c.m_node = &m_nodes[node];
- const btScalar fc = m_cfg.kDF * link->getFriction();
- c.m_c2 = ima;
- c.m_c3 = fc;
- c.m_c4 = link->isStaticOrKinematicObject() ? m_cfg.kKHR : m_cfg.kCHR;
- btVector3 normal = c.m_cti.m_normal;
- btVector3 t1 = generateUnitOrthogonalVector(normal);
- btVector3 t2 = btCross(normal, t1);
- btMultiBodyJacobianData jacobianData_normal, jacobianData_t1, jacobianData_t2;
- findJacobian(link, jacobianData_normal, c.m_node->m_x, normal);
- findJacobian(link, jacobianData_t1, c.m_node->m_x, t1);
- findJacobian(link, jacobianData_t2, c.m_node->m_x, t2);
-
- btScalar* J_n = &jacobianData_normal.m_jacobians[0];
- btScalar* J_t1 = &jacobianData_t1.m_jacobians[0];
- btScalar* J_t2 = &jacobianData_t2.m_jacobians[0];
-
- btScalar* u_n = &jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t1 = &jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t2 = &jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
-
- btMatrix3x3 rot(normal.getX(), normal.getY(), normal.getZ(),
- t1.getX(), t1.getY(), t1.getZ(),
- t2.getX(), t2.getY(), t2.getZ()); // world frame to local frame
- const int ndof = link->m_multiBody->getNumDofs() + 6;
- btMatrix3x3 local_impulse_matrix = (Diagonal(n.m_im) + OuterProduct(J_n, J_t1, J_t2, u_n, u_t1, u_t2, ndof)).inverse();
- c.m_c0 = rot.transpose() * local_impulse_matrix * rot;
- c.jacobianData_normal = jacobianData_normal;
- c.jacobianData_t1 = jacobianData_t1;
- c.jacobianData_t2 = jacobianData_t2;
- c.t1 = t1;
- c.t2 = t2;
- const btVector3 ra = n.m_x - wtr.getOrigin();
- c.m_c1 = ra;
- c.m_local = link->getWorldTransform().inverse() * m_nodes[node].m_x;
- c.m_node->m_battach = 1;
- m_deformableAnchors.push_back(c);
-}
-//
-void btSoftBody::appendLinearJoint(const LJoint::Specs& specs, Cluster* body0, Body body1)
-{
- LJoint* pj = new (btAlignedAlloc(sizeof(LJoint), 16)) LJoint();
- pj->m_bodies[0] = body0;
- pj->m_bodies[1] = body1;
- pj->m_refs[0] = pj->m_bodies[0].xform().inverse() * specs.position;
- pj->m_refs[1] = pj->m_bodies[1].xform().inverse() * specs.position;
- pj->m_cfm = specs.cfm;
- pj->m_erp = specs.erp;
- pj->m_split = specs.split;
- m_joints.push_back(pj);
-}
-
-//
-void btSoftBody::appendLinearJoint(const LJoint::Specs& specs, Body body)
-{
- appendLinearJoint(specs, m_clusters[0], body);
-}
-
-//
-void btSoftBody::appendLinearJoint(const LJoint::Specs& specs, btSoftBody* body)
-{
- appendLinearJoint(specs, m_clusters[0], body->m_clusters[0]);
-}
-
-//
-void btSoftBody::appendAngularJoint(const AJoint::Specs& specs, Cluster* body0, Body body1)
-{
- AJoint* pj = new (btAlignedAlloc(sizeof(AJoint), 16)) AJoint();
- pj->m_bodies[0] = body0;
- pj->m_bodies[1] = body1;
- pj->m_refs[0] = pj->m_bodies[0].xform().inverse().getBasis() * specs.axis;
- pj->m_refs[1] = pj->m_bodies[1].xform().inverse().getBasis() * specs.axis;
- pj->m_cfm = specs.cfm;
- pj->m_erp = specs.erp;
- pj->m_split = specs.split;
- pj->m_icontrol = specs.icontrol;
- m_joints.push_back(pj);
-}
-
-//
-void btSoftBody::appendAngularJoint(const AJoint::Specs& specs, Body body)
-{
- appendAngularJoint(specs, m_clusters[0], body);
-}
-
-//
-void btSoftBody::appendAngularJoint(const AJoint::Specs& specs, btSoftBody* body)
-{
- appendAngularJoint(specs, m_clusters[0], body->m_clusters[0]);
-}
-
-//
-void btSoftBody::addForce(const btVector3& force)
-{
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i) addForce(force, i);
-}
-
-//
-void btSoftBody::addForce(const btVector3& force, int node)
-{
- Node& n = m_nodes[node];
- if (n.m_im > 0)
- {
- n.m_f += force;
- }
-}
-
-void btSoftBody::addAeroForceToNode(const btVector3& windVelocity, int nodeIndex)
-{
- btAssert(nodeIndex >= 0 && nodeIndex < m_nodes.size());
-
- const btScalar dt = m_sst.sdt;
- const btScalar kLF = m_cfg.kLF;
- const btScalar kDG = m_cfg.kDG;
- //const btScalar kPR = m_cfg.kPR;
- //const btScalar kVC = m_cfg.kVC;
- const bool as_lift = kLF > 0;
- const bool as_drag = kDG > 0;
- const bool as_aero = as_lift || as_drag;
- const bool as_vaero = as_aero && (m_cfg.aeromodel < btSoftBody::eAeroModel::F_TwoSided);
-
- Node& n = m_nodes[nodeIndex];
-
- if (n.m_im > 0)
- {
- btSoftBody::sMedium medium;
-
- EvaluateMedium(m_worldInfo, n.m_x, medium);
- medium.m_velocity = windVelocity;
- medium.m_density = m_worldInfo->air_density;
-
- /* Aerodynamics */
- if (as_vaero)
- {
- const btVector3 rel_v = n.m_v - medium.m_velocity;
- const btScalar rel_v_len = rel_v.length();
- const btScalar rel_v2 = rel_v.length2();
-
- if (rel_v2 > SIMD_EPSILON)
- {
- const btVector3 rel_v_nrm = rel_v.normalized();
- btVector3 nrm = n.m_n;
-
- if (m_cfg.aeromodel == btSoftBody::eAeroModel::V_TwoSidedLiftDrag)
- {
- nrm *= (btScalar)((btDot(nrm, rel_v) < 0) ? -1 : +1);
- btVector3 fDrag(0, 0, 0);
- btVector3 fLift(0, 0, 0);
-
- btScalar n_dot_v = nrm.dot(rel_v_nrm);
- btScalar tri_area = 0.5f * n.m_area;
-
- fDrag = 0.5f * kDG * medium.m_density * rel_v2 * tri_area * n_dot_v * (-rel_v_nrm);
-
- // Check angle of attack
- // cos(10º) = 0.98480
- if (0 < n_dot_v && n_dot_v < 0.98480f)
- fLift = 0.5f * kLF * medium.m_density * rel_v_len * tri_area * btSqrt(1.0f - n_dot_v * n_dot_v) * (nrm.cross(rel_v_nrm).cross(rel_v_nrm));
-
- // Check if the velocity change resulted by aero drag force exceeds the current velocity of the node.
- btVector3 del_v_by_fDrag = fDrag * n.m_im * m_sst.sdt;
- btScalar del_v_by_fDrag_len2 = del_v_by_fDrag.length2();
- btScalar v_len2 = n.m_v.length2();
-
- if (del_v_by_fDrag_len2 >= v_len2 && del_v_by_fDrag_len2 > 0)
- {
- btScalar del_v_by_fDrag_len = del_v_by_fDrag.length();
- btScalar v_len = n.m_v.length();
- fDrag *= btScalar(0.8) * (v_len / del_v_by_fDrag_len);
- }
-
- n.m_f += fDrag;
- n.m_f += fLift;
- }
- else if (m_cfg.aeromodel == btSoftBody::eAeroModel::V_Point || m_cfg.aeromodel == btSoftBody::eAeroModel::V_OneSided || m_cfg.aeromodel == btSoftBody::eAeroModel::V_TwoSided)
- {
- if (m_cfg.aeromodel == btSoftBody::eAeroModel::V_TwoSided)
- nrm *= (btScalar)((btDot(nrm, rel_v) < 0) ? -1 : +1);
-
- const btScalar dvn = btDot(rel_v, nrm);
- /* Compute forces */
- if (dvn > 0)
- {
- btVector3 force(0, 0, 0);
- const btScalar c0 = n.m_area * dvn * rel_v2 / 2;
- const btScalar c1 = c0 * medium.m_density;
- force += nrm * (-c1 * kLF);
- force += rel_v.normalized() * (-c1 * kDG);
- ApplyClampedForce(n, force, dt);
- }
- }
- }
- }
- }
-}
-
-void btSoftBody::addAeroForceToFace(const btVector3& windVelocity, int faceIndex)
-{
- const btScalar dt = m_sst.sdt;
- const btScalar kLF = m_cfg.kLF;
- const btScalar kDG = m_cfg.kDG;
- // const btScalar kPR = m_cfg.kPR;
- // const btScalar kVC = m_cfg.kVC;
- const bool as_lift = kLF > 0;
- const bool as_drag = kDG > 0;
- const bool as_aero = as_lift || as_drag;
- const bool as_faero = as_aero && (m_cfg.aeromodel >= btSoftBody::eAeroModel::F_TwoSided);
-
- if (as_faero)
- {
- btSoftBody::Face& f = m_faces[faceIndex];
-
- btSoftBody::sMedium medium;
-
- const btVector3 v = (f.m_n[0]->m_v + f.m_n[1]->m_v + f.m_n[2]->m_v) / 3;
- const btVector3 x = (f.m_n[0]->m_x + f.m_n[1]->m_x + f.m_n[2]->m_x) / 3;
- EvaluateMedium(m_worldInfo, x, medium);
- medium.m_velocity = windVelocity;
- medium.m_density = m_worldInfo->air_density;
- const btVector3 rel_v = v - medium.m_velocity;
- const btScalar rel_v_len = rel_v.length();
- const btScalar rel_v2 = rel_v.length2();
-
- if (rel_v2 > SIMD_EPSILON)
- {
- const btVector3 rel_v_nrm = rel_v.normalized();
- btVector3 nrm = f.m_normal;
-
- if (m_cfg.aeromodel == btSoftBody::eAeroModel::F_TwoSidedLiftDrag)
- {
- nrm *= (btScalar)((btDot(nrm, rel_v) < 0) ? -1 : +1);
-
- btVector3 fDrag(0, 0, 0);
- btVector3 fLift(0, 0, 0);
-
- btScalar n_dot_v = nrm.dot(rel_v_nrm);
- btScalar tri_area = 0.5f * f.m_ra;
-
- fDrag = 0.5f * kDG * medium.m_density * rel_v2 * tri_area * n_dot_v * (-rel_v_nrm);
-
- // Check angle of attack
- // cos(10º) = 0.98480
- if (0 < n_dot_v && n_dot_v < 0.98480f)
- fLift = 0.5f * kLF * medium.m_density * rel_v_len * tri_area * btSqrt(1.0f - n_dot_v * n_dot_v) * (nrm.cross(rel_v_nrm).cross(rel_v_nrm));
-
- fDrag /= 3;
- fLift /= 3;
-
- for (int j = 0; j < 3; ++j)
- {
- if (f.m_n[j]->m_im > 0)
- {
- // Check if the velocity change resulted by aero drag force exceeds the current velocity of the node.
- btVector3 del_v_by_fDrag = fDrag * f.m_n[j]->m_im * m_sst.sdt;
- btScalar del_v_by_fDrag_len2 = del_v_by_fDrag.length2();
- btScalar v_len2 = f.m_n[j]->m_v.length2();
-
- if (del_v_by_fDrag_len2 >= v_len2 && del_v_by_fDrag_len2 > 0)
- {
- btScalar del_v_by_fDrag_len = del_v_by_fDrag.length();
- btScalar v_len = f.m_n[j]->m_v.length();
- fDrag *= btScalar(0.8) * (v_len / del_v_by_fDrag_len);
- }
-
- f.m_n[j]->m_f += fDrag;
- f.m_n[j]->m_f += fLift;
- }
- }
- }
- else if (m_cfg.aeromodel == btSoftBody::eAeroModel::F_OneSided || m_cfg.aeromodel == btSoftBody::eAeroModel::F_TwoSided)
- {
- if (m_cfg.aeromodel == btSoftBody::eAeroModel::F_TwoSided)
- nrm *= (btScalar)((btDot(nrm, rel_v) < 0) ? -1 : +1);
-
- const btScalar dvn = btDot(rel_v, nrm);
- /* Compute forces */
- if (dvn > 0)
- {
- btVector3 force(0, 0, 0);
- const btScalar c0 = f.m_ra * dvn * rel_v2;
- const btScalar c1 = c0 * medium.m_density;
- force += nrm * (-c1 * kLF);
- force += rel_v.normalized() * (-c1 * kDG);
- force /= 3;
- for (int j = 0; j < 3; ++j) ApplyClampedForce(*f.m_n[j], force, dt);
- }
- }
- }
- }
-}
-
-//
-void btSoftBody::addVelocity(const btVector3& velocity)
-{
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i) addVelocity(velocity, i);
-}
-
-/* Set velocity for the entire body */
-void btSoftBody::setVelocity(const btVector3& velocity)
-{
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- if (n.m_im > 0)
- {
- n.m_v = velocity;
- n.m_vn = velocity;
- }
- }
-}
-
-//
-void btSoftBody::addVelocity(const btVector3& velocity, int node)
-{
- Node& n = m_nodes[node];
- if (n.m_im > 0)
- {
- n.m_v += velocity;
- }
-}
-
-//
-void btSoftBody::setMass(int node, btScalar mass)
-{
- m_nodes[node].m_im = mass > 0 ? 1 / mass : 0;
- m_bUpdateRtCst = true;
-}
-
-//
-btScalar btSoftBody::getMass(int node) const
-{
- return (m_nodes[node].m_im > 0 ? 1 / m_nodes[node].m_im : 0);
-}
-
-//
-btScalar btSoftBody::getTotalMass() const
-{
- btScalar mass = 0;
- for (int i = 0; i < m_nodes.size(); ++i)
- {
- mass += getMass(i);
- }
- return (mass);
-}
-
-//
-void btSoftBody::setTotalMass(btScalar mass, bool fromfaces)
-{
- int i;
-
- if (fromfaces)
- {
- for (i = 0; i < m_nodes.size(); ++i)
- {
- m_nodes[i].m_im = 0;
- }
- for (i = 0; i < m_faces.size(); ++i)
- {
- const Face& f = m_faces[i];
- const btScalar twicearea = AreaOf(f.m_n[0]->m_x,
- f.m_n[1]->m_x,
- f.m_n[2]->m_x);
- for (int j = 0; j < 3; ++j)
- {
- f.m_n[j]->m_im += twicearea;
- }
- }
- for (i = 0; i < m_nodes.size(); ++i)
- {
- m_nodes[i].m_im = 1 / m_nodes[i].m_im;
- }
- }
- const btScalar tm = getTotalMass();
- const btScalar itm = 1 / tm;
- for (i = 0; i < m_nodes.size(); ++i)
- {
- m_nodes[i].m_im /= itm * mass;
- }
- m_bUpdateRtCst = true;
-}
-
-//
-void btSoftBody::setTotalDensity(btScalar density)
-{
- setTotalMass(getVolume() * density, true);
-}
-
-//
-void btSoftBody::setVolumeMass(btScalar mass)
-{
- btAlignedObjectArray<btScalar> ranks;
- ranks.resize(m_nodes.size(), 0);
- int i;
-
- for (i = 0; i < m_nodes.size(); ++i)
- {
- m_nodes[i].m_im = 0;
- }
- for (i = 0; i < m_tetras.size(); ++i)
- {
- const Tetra& t = m_tetras[i];
- for (int j = 0; j < 4; ++j)
- {
- t.m_n[j]->m_im += btFabs(t.m_rv);
- ranks[int(t.m_n[j] - &m_nodes[0])] += 1;
- }
- }
- for (i = 0; i < m_nodes.size(); ++i)
- {
- if (m_nodes[i].m_im > 0)
- {
- m_nodes[i].m_im = ranks[i] / m_nodes[i].m_im;
- }
- }
- setTotalMass(mass, false);
-}
-
-//
-void btSoftBody::setVolumeDensity(btScalar density)
-{
- btScalar volume = 0;
- for (int i = 0; i < m_tetras.size(); ++i)
- {
- const Tetra& t = m_tetras[i];
- for (int j = 0; j < 4; ++j)
- {
- volume += btFabs(t.m_rv);
- }
- }
- setVolumeMass(volume * density / 6);
-}
-
-//
-btVector3 btSoftBody::getLinearVelocity()
-{
- btVector3 total_momentum = btVector3(0, 0, 0);
- for (int i = 0; i < m_nodes.size(); ++i)
- {
- btScalar mass = m_nodes[i].m_im == 0 ? 0 : 1.0 / m_nodes[i].m_im;
- total_momentum += mass * m_nodes[i].m_v;
- }
- btScalar total_mass = getTotalMass();
- return total_mass == 0 ? total_momentum : total_momentum / total_mass;
-}
-
-//
-void btSoftBody::setLinearVelocity(const btVector3& linVel)
-{
- btVector3 old_vel = getLinearVelocity();
- btVector3 diff = linVel - old_vel;
- for (int i = 0; i < m_nodes.size(); ++i)
- m_nodes[i].m_v += diff;
-}
-
-//
-void btSoftBody::setAngularVelocity(const btVector3& angVel)
-{
- btVector3 old_vel = getLinearVelocity();
- btVector3 com = getCenterOfMass();
- for (int i = 0; i < m_nodes.size(); ++i)
- {
- m_nodes[i].m_v = angVel.cross(m_nodes[i].m_x - com) + old_vel;
- }
-}
-
-//
-btTransform btSoftBody::getRigidTransform()
-{
- btVector3 t = getCenterOfMass();
- btMatrix3x3 S;
- S.setZero();
- // Get rotation that minimizes L2 difference: \sum_i || RX_i + t - x_i ||
- // It's important to make sure that S has the correct signs.
- // SVD is only unique up to the ordering of singular values.
- // SVD will manipulate U and V to ensure the ordering of singular values. If all three singular
- // vaues are negative, SVD will permute colums of U to make two of them positive.
- for (int i = 0; i < m_nodes.size(); ++i)
- {
- S -= OuterProduct(m_X[i], t - m_nodes[i].m_x);
- }
- btVector3 sigma;
- btMatrix3x3 U, V;
- singularValueDecomposition(S, U, sigma, V);
- btMatrix3x3 R = V * U.transpose();
- btTransform trs;
- trs.setIdentity();
- trs.setOrigin(t);
- trs.setBasis(R);
- return trs;
-}
-
-//
-void btSoftBody::transformTo(const btTransform& trs)
-{
- // get the current best rigid fit
- btTransform current_transform = getRigidTransform();
- // apply transform in material space
- btTransform new_transform = trs * current_transform.inverse();
- transform(new_transform);
-}
-
-//
-void btSoftBody::transform(const btTransform& trs)
-{
- const btScalar margin = getCollisionShape()->getMargin();
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
-
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_x = trs * n.m_x;
- n.m_q = trs * n.m_q;
- n.m_n = trs.getBasis() * n.m_n;
- vol = btDbvtVolume::FromCR(n.m_x, margin);
-
- m_ndbvt.update(n.m_leaf, vol);
- }
- updateNormals();
- updateBounds();
- updateConstants();
-}
-
-//
-void btSoftBody::translate(const btVector3& trs)
-{
- btTransform t;
- t.setIdentity();
- t.setOrigin(trs);
- transform(t);
-}
-
-//
-void btSoftBody::rotate(const btQuaternion& rot)
-{
- btTransform t;
- t.setIdentity();
- t.setRotation(rot);
- transform(t);
-}
-
-//
-void btSoftBody::scale(const btVector3& scl)
-{
- const btScalar margin = getCollisionShape()->getMargin();
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
-
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_x *= scl;
- n.m_q *= scl;
- vol = btDbvtVolume::FromCR(n.m_x, margin);
- m_ndbvt.update(n.m_leaf, vol);
- }
- updateNormals();
- updateBounds();
- updateConstants();
- initializeDmInverse();
-}
-
-//
-btScalar btSoftBody::getRestLengthScale()
-{
- return m_restLengthScale;
-}
-
-//
-void btSoftBody::setRestLengthScale(btScalar restLengthScale)
-{
- for (int i = 0, ni = m_links.size(); i < ni; ++i)
- {
- Link& l = m_links[i];
- l.m_rl = l.m_rl / m_restLengthScale * restLengthScale;
- l.m_c1 = l.m_rl * l.m_rl;
- }
- m_restLengthScale = restLengthScale;
-
- if (getActivationState() == ISLAND_SLEEPING)
- activate();
-}
-
-//
-void btSoftBody::setPose(bool bvolume, bool bframe)
-{
- m_pose.m_bvolume = bvolume;
- m_pose.m_bframe = bframe;
- int i, ni;
-
- /* Weights */
- const btScalar omass = getTotalMass();
- const btScalar kmass = omass * m_nodes.size() * 1000;
- btScalar tmass = omass;
- m_pose.m_wgh.resize(m_nodes.size());
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- if (m_nodes[i].m_im <= 0) tmass += kmass;
- }
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- m_pose.m_wgh[i] = n.m_im > 0 ? 1 / (m_nodes[i].m_im * tmass) : kmass / tmass;
- }
- /* Pos */
- const btVector3 com = evaluateCom();
- m_pose.m_pos.resize(m_nodes.size());
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- m_pose.m_pos[i] = m_nodes[i].m_x - com;
- }
- m_pose.m_volume = bvolume ? getVolume() : 0;
- m_pose.m_com = com;
- m_pose.m_rot.setIdentity();
- m_pose.m_scl.setIdentity();
- /* Aqq */
- m_pose.m_aqq[0] =
- m_pose.m_aqq[1] =
- m_pose.m_aqq[2] = btVector3(0, 0, 0);
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- const btVector3& q = m_pose.m_pos[i];
- const btVector3 mq = m_pose.m_wgh[i] * q;
- m_pose.m_aqq[0] += mq.x() * q;
- m_pose.m_aqq[1] += mq.y() * q;
- m_pose.m_aqq[2] += mq.z() * q;
- }
- m_pose.m_aqq = m_pose.m_aqq.inverse();
-
- updateConstants();
-}
-
-void btSoftBody::resetLinkRestLengths()
-{
- for (int i = 0, ni = m_links.size(); i < ni; ++i)
- {
- Link& l = m_links[i];
- l.m_rl = (l.m_n[0]->m_x - l.m_n[1]->m_x).length();
- l.m_c1 = l.m_rl * l.m_rl;
- }
-}
-
-//
-btScalar btSoftBody::getVolume() const
-{
- btScalar vol = 0;
- if (m_nodes.size() > 0)
- {
- int i, ni;
-
- const btVector3 org = m_nodes[0].m_x;
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- const Face& f = m_faces[i];
- vol += btDot(f.m_n[0]->m_x - org, btCross(f.m_n[1]->m_x - org, f.m_n[2]->m_x - org));
- }
- vol /= (btScalar)6;
- }
- return (vol);
-}
-
-//
-int btSoftBody::clusterCount() const
-{
- return (m_clusters.size());
-}
-
-//
-btVector3 btSoftBody::clusterCom(const Cluster* cluster)
-{
- btVector3 com(0, 0, 0);
- for (int i = 0, ni = cluster->m_nodes.size(); i < ni; ++i)
- {
- com += cluster->m_nodes[i]->m_x * cluster->m_masses[i];
- }
- return (com * cluster->m_imass);
-}
-
-//
-btVector3 btSoftBody::clusterCom(int cluster) const
-{
- return (clusterCom(m_clusters[cluster]));
-}
-
-//
-btVector3 btSoftBody::clusterVelocity(const Cluster* cluster, const btVector3& rpos)
-{
- return (cluster->m_lv + btCross(cluster->m_av, rpos));
-}
-
-//
-void btSoftBody::clusterVImpulse(Cluster* cluster, const btVector3& rpos, const btVector3& impulse)
-{
- const btVector3 li = cluster->m_imass * impulse;
- const btVector3 ai = cluster->m_invwi * btCross(rpos, impulse);
- cluster->m_vimpulses[0] += li;
- cluster->m_lv += li;
- cluster->m_vimpulses[1] += ai;
- cluster->m_av += ai;
- cluster->m_nvimpulses++;
-}
-
-//
-void btSoftBody::clusterDImpulse(Cluster* cluster, const btVector3& rpos, const btVector3& impulse)
-{
- const btVector3 li = cluster->m_imass * impulse;
- const btVector3 ai = cluster->m_invwi * btCross(rpos, impulse);
- cluster->m_dimpulses[0] += li;
- cluster->m_dimpulses[1] += ai;
- cluster->m_ndimpulses++;
-}
-
-//
-void btSoftBody::clusterImpulse(Cluster* cluster, const btVector3& rpos, const Impulse& impulse)
-{
- if (impulse.m_asVelocity) clusterVImpulse(cluster, rpos, impulse.m_velocity);
- if (impulse.m_asDrift) clusterDImpulse(cluster, rpos, impulse.m_drift);
-}
-
-//
-void btSoftBody::clusterVAImpulse(Cluster* cluster, const btVector3& impulse)
-{
- const btVector3 ai = cluster->m_invwi * impulse;
- cluster->m_vimpulses[1] += ai;
- cluster->m_av += ai;
- cluster->m_nvimpulses++;
-}
-
-//
-void btSoftBody::clusterDAImpulse(Cluster* cluster, const btVector3& impulse)
-{
- const btVector3 ai = cluster->m_invwi * impulse;
- cluster->m_dimpulses[1] += ai;
- cluster->m_ndimpulses++;
-}
-
-//
-void btSoftBody::clusterAImpulse(Cluster* cluster, const Impulse& impulse)
-{
- if (impulse.m_asVelocity) clusterVAImpulse(cluster, impulse.m_velocity);
- if (impulse.m_asDrift) clusterDAImpulse(cluster, impulse.m_drift);
-}
-
-//
-void btSoftBody::clusterDCImpulse(Cluster* cluster, const btVector3& impulse)
-{
- cluster->m_dimpulses[0] += impulse * cluster->m_imass;
- cluster->m_ndimpulses++;
-}
-
-struct NodeLinks
-{
- btAlignedObjectArray<int> m_links;
-};
-
-//
-int btSoftBody::generateBendingConstraints(int distance, Material* mat)
-{
- int i, j;
-
- if (distance > 1)
- {
- /* Build graph */
- const int n = m_nodes.size();
- const unsigned inf = (~(unsigned)0) >> 1;
- unsigned* adj = new unsigned[n * n];
-
-#define IDX(_x_, _y_) ((_y_)*n + (_x_))
- for (j = 0; j < n; ++j)
- {
- for (i = 0; i < n; ++i)
- {
- if (i != j)
- {
- adj[IDX(i, j)] = adj[IDX(j, i)] = inf;
- }
- else
- {
- adj[IDX(i, j)] = adj[IDX(j, i)] = 0;
- }
- }
- }
- for (i = 0; i < m_links.size(); ++i)
- {
- const int ia = (int)(m_links[i].m_n[0] - &m_nodes[0]);
- const int ib = (int)(m_links[i].m_n[1] - &m_nodes[0]);
- adj[IDX(ia, ib)] = 1;
- adj[IDX(ib, ia)] = 1;
- }
-
- //special optimized case for distance == 2
- if (distance == 2)
- {
- btAlignedObjectArray<NodeLinks> nodeLinks;
-
- /* Build node links */
- nodeLinks.resize(m_nodes.size());
-
- for (i = 0; i < m_links.size(); ++i)
- {
- const int ia = (int)(m_links[i].m_n[0] - &m_nodes[0]);
- const int ib = (int)(m_links[i].m_n[1] - &m_nodes[0]);
- if (nodeLinks[ia].m_links.findLinearSearch(ib) == nodeLinks[ia].m_links.size())
- nodeLinks[ia].m_links.push_back(ib);
-
- if (nodeLinks[ib].m_links.findLinearSearch(ia) == nodeLinks[ib].m_links.size())
- nodeLinks[ib].m_links.push_back(ia);
- }
- for (int ii = 0; ii < nodeLinks.size(); ii++)
- {
- int i = ii;
-
- for (int jj = 0; jj < nodeLinks[ii].m_links.size(); jj++)
- {
- int k = nodeLinks[ii].m_links[jj];
- for (int kk = 0; kk < nodeLinks[k].m_links.size(); kk++)
- {
- int j = nodeLinks[k].m_links[kk];
- if (i != j)
- {
- const unsigned sum = adj[IDX(i, k)] + adj[IDX(k, j)];
- btAssert(sum == 2);
- if (adj[IDX(i, j)] > sum)
- {
- adj[IDX(i, j)] = adj[IDX(j, i)] = sum;
- }
- }
- }
- }
- }
- }
- else
- {
- ///generic Floyd's algorithm
- for (int k = 0; k < n; ++k)
- {
- for (j = 0; j < n; ++j)
- {
- for (i = j + 1; i < n; ++i)
- {
- const unsigned sum = adj[IDX(i, k)] + adj[IDX(k, j)];
- if (adj[IDX(i, j)] > sum)
- {
- adj[IDX(i, j)] = adj[IDX(j, i)] = sum;
- }
- }
- }
- }
- }
-
- /* Build links */
- int nlinks = 0;
- for (j = 0; j < n; ++j)
- {
- for (i = j + 1; i < n; ++i)
- {
- if (adj[IDX(i, j)] == (unsigned)distance)
- {
- appendLink(i, j, mat);
- m_links[m_links.size() - 1].m_bbending = 1;
- ++nlinks;
- }
- }
- }
- delete[] adj;
- return (nlinks);
- }
- return (0);
-}
-
-//
-void btSoftBody::randomizeConstraints()
-{
- unsigned long seed = 243703;
-#define NEXTRAND (seed = (1664525L * seed + 1013904223L) & 0xffffffff)
- int i, ni;
-
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- btSwap(m_links[i], m_links[NEXTRAND % ni]);
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- btSwap(m_faces[i], m_faces[NEXTRAND % ni]);
- }
-#undef NEXTRAND
-}
-
-//
-void btSoftBody::releaseCluster(int index)
-{
- Cluster* c = m_clusters[index];
- if (c->m_leaf) m_cdbvt.remove(c->m_leaf);
- c->~Cluster();
- btAlignedFree(c);
- m_clusters.remove(c);
-}
-
-//
-void btSoftBody::releaseClusters()
-{
- while (m_clusters.size() > 0) releaseCluster(0);
-}
-
-//
-int btSoftBody::generateClusters(int k, int maxiterations)
-{
- int i;
- releaseClusters();
- m_clusters.resize(btMin(k, m_nodes.size()));
- for (i = 0; i < m_clusters.size(); ++i)
- {
- m_clusters[i] = new (btAlignedAlloc(sizeof(Cluster), 16)) Cluster();
- m_clusters[i]->m_collide = true;
- }
- k = m_clusters.size();
- if (k > 0)
- {
- /* Initialize */
- btAlignedObjectArray<btVector3> centers;
- btVector3 cog(0, 0, 0);
- int i;
- for (i = 0; i < m_nodes.size(); ++i)
- {
- cog += m_nodes[i].m_x;
- m_clusters[(i * 29873) % m_clusters.size()]->m_nodes.push_back(&m_nodes[i]);
- }
- cog /= (btScalar)m_nodes.size();
- centers.resize(k, cog);
- /* Iterate */
- const btScalar slope = 16;
- bool changed;
- int iterations = 0;
- do
- {
- const btScalar w = 2 - btMin<btScalar>(1, iterations / slope);
- changed = false;
- iterations++;
- int i;
-
- for (i = 0; i < k; ++i)
- {
- btVector3 c(0, 0, 0);
- for (int j = 0; j < m_clusters[i]->m_nodes.size(); ++j)
- {
- c += m_clusters[i]->m_nodes[j]->m_x;
- }
- if (m_clusters[i]->m_nodes.size())
- {
- c /= (btScalar)m_clusters[i]->m_nodes.size();
- c = centers[i] + (c - centers[i]) * w;
- changed |= ((c - centers[i]).length2() > SIMD_EPSILON);
- centers[i] = c;
- m_clusters[i]->m_nodes.resize(0);
- }
- }
- for (i = 0; i < m_nodes.size(); ++i)
- {
- const btVector3 nx = m_nodes[i].m_x;
- int kbest = 0;
- btScalar kdist = ClusterMetric(centers[0], nx);
- for (int j = 1; j < k; ++j)
- {
- const btScalar d = ClusterMetric(centers[j], nx);
- if (d < kdist)
- {
- kbest = j;
- kdist = d;
- }
- }
- m_clusters[kbest]->m_nodes.push_back(&m_nodes[i]);
- }
- } while (changed && (iterations < maxiterations));
- /* Merge */
- btAlignedObjectArray<int> cids;
- cids.resize(m_nodes.size(), -1);
- for (i = 0; i < m_clusters.size(); ++i)
- {
- for (int j = 0; j < m_clusters[i]->m_nodes.size(); ++j)
- {
- cids[int(m_clusters[i]->m_nodes[j] - &m_nodes[0])] = i;
- }
- }
- for (i = 0; i < m_faces.size(); ++i)
- {
- const int idx[] = {int(m_faces[i].m_n[0] - &m_nodes[0]),
- int(m_faces[i].m_n[1] - &m_nodes[0]),
- int(m_faces[i].m_n[2] - &m_nodes[0])};
- for (int j = 0; j < 3; ++j)
- {
- const int cid = cids[idx[j]];
- for (int q = 1; q < 3; ++q)
- {
- const int kid = idx[(j + q) % 3];
- if (cids[kid] != cid)
- {
- if (m_clusters[cid]->m_nodes.findLinearSearch(&m_nodes[kid]) == m_clusters[cid]->m_nodes.size())
- {
- m_clusters[cid]->m_nodes.push_back(&m_nodes[kid]);
- }
- }
- }
- }
- }
- /* Master */
- if (m_clusters.size() > 1)
- {
- Cluster* pmaster = new (btAlignedAlloc(sizeof(Cluster), 16)) Cluster();
- pmaster->m_collide = false;
- pmaster->m_nodes.reserve(m_nodes.size());
- for (int i = 0; i < m_nodes.size(); ++i) pmaster->m_nodes.push_back(&m_nodes[i]);
- m_clusters.push_back(pmaster);
- btSwap(m_clusters[0], m_clusters[m_clusters.size() - 1]);
- }
- /* Terminate */
- for (i = 0; i < m_clusters.size(); ++i)
- {
- if (m_clusters[i]->m_nodes.size() == 0)
- {
- releaseCluster(i--);
- }
- }
- }
- else
- {
- //create a cluster for each tetrahedron (if tetrahedra exist) or each face
- if (m_tetras.size())
- {
- m_clusters.resize(m_tetras.size());
- for (i = 0; i < m_clusters.size(); ++i)
- {
- m_clusters[i] = new (btAlignedAlloc(sizeof(Cluster), 16)) Cluster();
- m_clusters[i]->m_collide = true;
- }
- for (i = 0; i < m_tetras.size(); i++)
- {
- for (int j = 0; j < 4; j++)
- {
- m_clusters[i]->m_nodes.push_back(m_tetras[i].m_n[j]);
- }
- }
- }
- else
- {
- m_clusters.resize(m_faces.size());
- for (i = 0; i < m_clusters.size(); ++i)
- {
- m_clusters[i] = new (btAlignedAlloc(sizeof(Cluster), 16)) Cluster();
- m_clusters[i]->m_collide = true;
- }
-
- for (i = 0; i < m_faces.size(); ++i)
- {
- for (int j = 0; j < 3; ++j)
- {
- m_clusters[i]->m_nodes.push_back(m_faces[i].m_n[j]);
- }
- }
- }
- }
-
- if (m_clusters.size())
- {
- initializeClusters();
- updateClusters();
-
- //for self-collision
- m_clusterConnectivity.resize(m_clusters.size() * m_clusters.size());
- {
- for (int c0 = 0; c0 < m_clusters.size(); c0++)
- {
- m_clusters[c0]->m_clusterIndex = c0;
- for (int c1 = 0; c1 < m_clusters.size(); c1++)
- {
- bool connected = false;
- Cluster* cla = m_clusters[c0];
- Cluster* clb = m_clusters[c1];
- for (int i = 0; !connected && i < cla->m_nodes.size(); i++)
- {
- for (int j = 0; j < clb->m_nodes.size(); j++)
- {
- if (cla->m_nodes[i] == clb->m_nodes[j])
- {
- connected = true;
- break;
- }
- }
- }
- m_clusterConnectivity[c0 + c1 * m_clusters.size()] = connected;
- }
- }
- }
- }
-
- return (m_clusters.size());
-}
-
-//
-void btSoftBody::refine(ImplicitFn* ifn, btScalar accurary, bool cut)
-{
- const Node* nbase = &m_nodes[0];
- int ncount = m_nodes.size();
- btSymMatrix<int> edges(ncount, -2);
- int newnodes = 0;
- int i, j, k, ni;
-
- /* Filter out */
- for (i = 0; i < m_links.size(); ++i)
- {
- Link& l = m_links[i];
- if (l.m_bbending)
- {
- if (!SameSign(ifn->Eval(l.m_n[0]->m_x), ifn->Eval(l.m_n[1]->m_x)))
- {
- btSwap(m_links[i], m_links[m_links.size() - 1]);
- m_links.pop_back();
- --i;
- }
- }
- }
- /* Fill edges */
- for (i = 0; i < m_links.size(); ++i)
- {
- Link& l = m_links[i];
- edges(int(l.m_n[0] - nbase), int(l.m_n[1] - nbase)) = -1;
- }
- for (i = 0; i < m_faces.size(); ++i)
- {
- Face& f = m_faces[i];
- edges(int(f.m_n[0] - nbase), int(f.m_n[1] - nbase)) = -1;
- edges(int(f.m_n[1] - nbase), int(f.m_n[2] - nbase)) = -1;
- edges(int(f.m_n[2] - nbase), int(f.m_n[0] - nbase)) = -1;
- }
- /* Intersect */
- for (i = 0; i < ncount; ++i)
- {
- for (j = i + 1; j < ncount; ++j)
- {
- if (edges(i, j) == -1)
- {
- Node& a = m_nodes[i];
- Node& b = m_nodes[j];
- const btScalar t = ImplicitSolve(ifn, a.m_x, b.m_x, accurary);
- if (t > 0)
- {
- const btVector3 x = Lerp(a.m_x, b.m_x, t);
- const btVector3 v = Lerp(a.m_v, b.m_v, t);
- btScalar m = 0;
- if (a.m_im > 0)
- {
- if (b.m_im > 0)
- {
- const btScalar ma = 1 / a.m_im;
- const btScalar mb = 1 / b.m_im;
- const btScalar mc = Lerp(ma, mb, t);
- const btScalar f = (ma + mb) / (ma + mb + mc);
- a.m_im = 1 / (ma * f);
- b.m_im = 1 / (mb * f);
- m = mc * f;
- }
- else
- {
- a.m_im /= 0.5f;
- m = 1 / a.m_im;
- }
- }
- else
- {
- if (b.m_im > 0)
- {
- b.m_im /= 0.5f;
- m = 1 / b.m_im;
- }
- else
- m = 0;
- }
- appendNode(x, m);
- edges(i, j) = m_nodes.size() - 1;
- m_nodes[edges(i, j)].m_v = v;
- ++newnodes;
- }
- }
- }
- }
- nbase = &m_nodes[0];
- /* Refine links */
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- Link& feat = m_links[i];
- const int idx[] = {int(feat.m_n[0] - nbase),
- int(feat.m_n[1] - nbase)};
- if ((idx[0] < ncount) && (idx[1] < ncount))
- {
- const int ni = edges(idx[0], idx[1]);
- if (ni > 0)
- {
- appendLink(i);
- Link* pft[] = {&m_links[i],
- &m_links[m_links.size() - 1]};
- pft[0]->m_n[0] = &m_nodes[idx[0]];
- pft[0]->m_n[1] = &m_nodes[ni];
- pft[1]->m_n[0] = &m_nodes[ni];
- pft[1]->m_n[1] = &m_nodes[idx[1]];
- }
- }
- }
- /* Refine faces */
- for (i = 0; i < m_faces.size(); ++i)
- {
- const Face& feat = m_faces[i];
- const int idx[] = {int(feat.m_n[0] - nbase),
- int(feat.m_n[1] - nbase),
- int(feat.m_n[2] - nbase)};
- for (j = 2, k = 0; k < 3; j = k++)
- {
- if ((idx[j] < ncount) && (idx[k] < ncount))
- {
- const int ni = edges(idx[j], idx[k]);
- if (ni > 0)
- {
- appendFace(i);
- const int l = (k + 1) % 3;
- Face* pft[] = {&m_faces[i],
- &m_faces[m_faces.size() - 1]};
- pft[0]->m_n[0] = &m_nodes[idx[l]];
- pft[0]->m_n[1] = &m_nodes[idx[j]];
- pft[0]->m_n[2] = &m_nodes[ni];
- pft[1]->m_n[0] = &m_nodes[ni];
- pft[1]->m_n[1] = &m_nodes[idx[k]];
- pft[1]->m_n[2] = &m_nodes[idx[l]];
- appendLink(ni, idx[l], pft[0]->m_material);
- --i;
- break;
- }
- }
- }
- }
- /* Cut */
- if (cut)
- {
- btAlignedObjectArray<int> cnodes;
- const int pcount = ncount;
- int i;
- ncount = m_nodes.size();
- cnodes.resize(ncount, 0);
- /* Nodes */
- for (i = 0; i < ncount; ++i)
- {
- const btVector3 x = m_nodes[i].m_x;
- if ((i >= pcount) || (btFabs(ifn->Eval(x)) < accurary))
- {
- const btVector3 v = m_nodes[i].m_v;
- btScalar m = getMass(i);
- if (m > 0)
- {
- m *= 0.5f;
- m_nodes[i].m_im /= 0.5f;
- }
- appendNode(x, m);
- cnodes[i] = m_nodes.size() - 1;
- m_nodes[cnodes[i]].m_v = v;
- }
- }
- nbase = &m_nodes[0];
- /* Links */
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- const int id[] = {int(m_links[i].m_n[0] - nbase),
- int(m_links[i].m_n[1] - nbase)};
- int todetach = 0;
- if (cnodes[id[0]] && cnodes[id[1]])
- {
- appendLink(i);
- todetach = m_links.size() - 1;
- }
- else
- {
- if (((ifn->Eval(m_nodes[id[0]].m_x) < accurary) &&
- (ifn->Eval(m_nodes[id[1]].m_x) < accurary)))
- todetach = i;
- }
- if (todetach)
- {
- Link& l = m_links[todetach];
- for (int j = 0; j < 2; ++j)
- {
- int cn = cnodes[int(l.m_n[j] - nbase)];
- if (cn) l.m_n[j] = &m_nodes[cn];
- }
- }
- }
- /* Faces */
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- Node** n = m_faces[i].m_n;
- if ((ifn->Eval(n[0]->m_x) < accurary) &&
- (ifn->Eval(n[1]->m_x) < accurary) &&
- (ifn->Eval(n[2]->m_x) < accurary))
- {
- for (int j = 0; j < 3; ++j)
- {
- int cn = cnodes[int(n[j] - nbase)];
- if (cn) n[j] = &m_nodes[cn];
- }
- }
- }
- /* Clean orphans */
- int nnodes = m_nodes.size();
- btAlignedObjectArray<int> ranks;
- btAlignedObjectArray<int> todelete;
- ranks.resize(nnodes, 0);
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- for (int j = 0; j < 2; ++j) ranks[int(m_links[i].m_n[j] - nbase)]++;
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- for (int j = 0; j < 3; ++j) ranks[int(m_faces[i].m_n[j] - nbase)]++;
- }
- for (i = 0; i < m_links.size(); ++i)
- {
- const int id[] = {int(m_links[i].m_n[0] - nbase),
- int(m_links[i].m_n[1] - nbase)};
- const bool sg[] = {ranks[id[0]] == 1,
- ranks[id[1]] == 1};
- if (sg[0] || sg[1])
- {
- --ranks[id[0]];
- --ranks[id[1]];
- btSwap(m_links[i], m_links[m_links.size() - 1]);
- m_links.pop_back();
- --i;
- }
- }
-#if 0
- for(i=nnodes-1;i>=0;--i)
- {
- if(!ranks[i]) todelete.push_back(i);
- }
- if(todelete.size())
- {
- btAlignedObjectArray<int>& map=ranks;
- for(int i=0;i<nnodes;++i) map[i]=i;
- PointersToIndices(this);
- for(int i=0,ni=todelete.size();i<ni;++i)
- {
- int j=todelete[i];
- int& a=map[j];
- int& b=map[--nnodes];
- m_ndbvt.remove(m_nodes[a].m_leaf);m_nodes[a].m_leaf=0;
- btSwap(m_nodes[a],m_nodes[b]);
- j=a;a=b;b=j;
- }
- IndicesToPointers(this,&map[0]);
- m_nodes.resize(nnodes);
- }
-#endif
- }
- m_bUpdateRtCst = true;
-}
-
-//
-bool btSoftBody::cutLink(const Node* node0, const Node* node1, btScalar position)
-{
- return (cutLink(int(node0 - &m_nodes[0]), int(node1 - &m_nodes[0]), position));
-}
-
-//
-bool btSoftBody::cutLink(int node0, int node1, btScalar position)
-{
- bool done = false;
- int i, ni;
- // const btVector3 d=m_nodes[node0].m_x-m_nodes[node1].m_x;
- const btVector3 x = Lerp(m_nodes[node0].m_x, m_nodes[node1].m_x, position);
- const btVector3 v = Lerp(m_nodes[node0].m_v, m_nodes[node1].m_v, position);
- const btScalar m = 1;
- appendNode(x, m);
- appendNode(x, m);
- Node* pa = &m_nodes[node0];
- Node* pb = &m_nodes[node1];
- Node* pn[2] = {&m_nodes[m_nodes.size() - 2],
- &m_nodes[m_nodes.size() - 1]};
- pn[0]->m_v = v;
- pn[1]->m_v = v;
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- const int mtch = MatchEdge(m_links[i].m_n[0], m_links[i].m_n[1], pa, pb);
- if (mtch != -1)
- {
- appendLink(i);
- Link* pft[] = {&m_links[i], &m_links[m_links.size() - 1]};
- pft[0]->m_n[1] = pn[mtch];
- pft[1]->m_n[0] = pn[1 - mtch];
- done = true;
- }
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- for (int k = 2, l = 0; l < 3; k = l++)
- {
- const int mtch = MatchEdge(m_faces[i].m_n[k], m_faces[i].m_n[l], pa, pb);
- if (mtch != -1)
- {
- appendFace(i);
- Face* pft[] = {&m_faces[i], &m_faces[m_faces.size() - 1]};
- pft[0]->m_n[l] = pn[mtch];
- pft[1]->m_n[k] = pn[1 - mtch];
- appendLink(pn[0], pft[0]->m_n[(l + 1) % 3], pft[0]->m_material, true);
- appendLink(pn[1], pft[0]->m_n[(l + 1) % 3], pft[0]->m_material, true);
- }
- }
- }
- if (!done)
- {
- m_ndbvt.remove(pn[0]->m_leaf);
- m_ndbvt.remove(pn[1]->m_leaf);
- m_nodes.pop_back();
- m_nodes.pop_back();
- }
- return (done);
-}
-
-//
-bool btSoftBody::rayTest(const btVector3& rayFrom,
- const btVector3& rayTo,
- sRayCast& results)
-{
- if (m_faces.size() && m_fdbvt.empty())
- initializeFaceTree();
-
- results.body = this;
- results.fraction = 1.f;
- results.feature = eFeature::None;
- results.index = -1;
-
- return (rayTest(rayFrom, rayTo, results.fraction, results.feature, results.index, false) != 0);
-}
-
-bool btSoftBody::rayFaceTest(const btVector3& rayFrom,
- const btVector3& rayTo,
- sRayCast& results)
-{
- if (m_faces.size() == 0)
- return false;
- else
- {
- if (m_fdbvt.empty())
- initializeFaceTree();
- }
-
- results.body = this;
- results.fraction = 1.f;
- results.index = -1;
-
- return (rayFaceTest(rayFrom, rayTo, results.fraction, results.index) != 0);
-}
-
-//
-void btSoftBody::setSolver(eSolverPresets::_ preset)
-{
- m_cfg.m_vsequence.clear();
- m_cfg.m_psequence.clear();
- m_cfg.m_dsequence.clear();
- switch (preset)
- {
- case eSolverPresets::Positions:
- m_cfg.m_psequence.push_back(ePSolver::Anchors);
- m_cfg.m_psequence.push_back(ePSolver::RContacts);
- m_cfg.m_psequence.push_back(ePSolver::SContacts);
- m_cfg.m_psequence.push_back(ePSolver::Linear);
- break;
- case eSolverPresets::Velocities:
- m_cfg.m_vsequence.push_back(eVSolver::Linear);
-
- m_cfg.m_psequence.push_back(ePSolver::Anchors);
- m_cfg.m_psequence.push_back(ePSolver::RContacts);
- m_cfg.m_psequence.push_back(ePSolver::SContacts);
-
- m_cfg.m_dsequence.push_back(ePSolver::Linear);
- break;
- }
-}
-
-void btSoftBody::predictMotion(btScalar dt)
-{
- int i, ni;
-
- /* Update */
- if (m_bUpdateRtCst)
- {
- m_bUpdateRtCst = false;
- updateConstants();
- m_fdbvt.clear();
- if (m_cfg.collisions & fCollision::VF_SS)
- {
- initializeFaceTree();
- }
- }
-
- /* Prepare */
- m_sst.sdt = dt * m_cfg.timescale;
- m_sst.isdt = 1 / m_sst.sdt;
- m_sst.velmrg = m_sst.sdt * 3;
- m_sst.radmrg = getCollisionShape()->getMargin();
- m_sst.updmrg = m_sst.radmrg * (btScalar)0.25;
- /* Forces */
- addVelocity(m_worldInfo->m_gravity * m_sst.sdt);
- applyForces();
- /* Integrate */
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_q = n.m_x;
- btVector3 deltaV = n.m_f * n.m_im * m_sst.sdt;
- {
- btScalar maxDisplacement = m_worldInfo->m_maxDisplacement;
- btScalar clampDeltaV = maxDisplacement / m_sst.sdt;
- for (int c = 0; c < 3; c++)
- {
- if (deltaV[c] > clampDeltaV)
- {
- deltaV[c] = clampDeltaV;
- }
- if (deltaV[c] < -clampDeltaV)
- {
- deltaV[c] = -clampDeltaV;
- }
- }
- }
- n.m_v += deltaV;
- n.m_x += n.m_v * m_sst.sdt;
- n.m_f = btVector3(0, 0, 0);
- }
- /* Clusters */
- updateClusters();
- /* Bounds */
- updateBounds();
- /* Nodes */
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- vol = btDbvtVolume::FromCR(n.m_x, m_sst.radmrg);
- m_ndbvt.update(n.m_leaf,
- vol,
- n.m_v * m_sst.velmrg,
- m_sst.updmrg);
- }
- /* Faces */
- if (!m_fdbvt.empty())
- {
- for (int i = 0; i < m_faces.size(); ++i)
- {
- Face& f = m_faces[i];
- const btVector3 v = (f.m_n[0]->m_v +
- f.m_n[1]->m_v +
- f.m_n[2]->m_v) /
- 3;
- vol = VolumeOf(f, m_sst.radmrg);
- m_fdbvt.update(f.m_leaf,
- vol,
- v * m_sst.velmrg,
- m_sst.updmrg);
- }
- }
- /* Pose */
- updatePose();
- /* Match */
- if (m_pose.m_bframe && (m_cfg.kMT > 0))
- {
- const btMatrix3x3 posetrs = m_pose.m_rot;
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- if (n.m_im > 0)
- {
- const btVector3 x = posetrs * m_pose.m_pos[i] + m_pose.m_com;
- n.m_x = Lerp(n.m_x, x, m_cfg.kMT);
- }
- }
- }
- /* Clear contacts */
- m_rcontacts.resize(0);
- m_scontacts.resize(0);
- /* Optimize dbvt's */
- m_ndbvt.optimizeIncremental(1);
- m_fdbvt.optimizeIncremental(1);
- m_cdbvt.optimizeIncremental(1);
-}
-
-//
-void btSoftBody::solveConstraints()
-{
- /* Apply clusters */
- applyClusters(false);
- /* Prepare links */
-
- int i, ni;
-
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- Link& l = m_links[i];
- l.m_c3 = l.m_n[1]->m_q - l.m_n[0]->m_q;
- l.m_c2 = 1 / (l.m_c3.length2() * l.m_c0);
- }
- /* Prepare anchors */
- for (i = 0, ni = m_anchors.size(); i < ni; ++i)
- {
- Anchor& a = m_anchors[i];
- const btVector3 ra = a.m_body->getWorldTransform().getBasis() * a.m_local;
- a.m_c0 = ImpulseMatrix(m_sst.sdt,
- a.m_node->m_im,
- a.m_body->getInvMass(),
- a.m_body->getInvInertiaTensorWorld(),
- ra);
- a.m_c1 = ra;
- a.m_c2 = m_sst.sdt * a.m_node->m_im;
- a.m_body->activate();
- }
- /* Solve velocities */
- if (m_cfg.viterations > 0)
- {
- /* Solve */
- for (int isolve = 0; isolve < m_cfg.viterations; ++isolve)
- {
- for (int iseq = 0; iseq < m_cfg.m_vsequence.size(); ++iseq)
- {
- getSolver(m_cfg.m_vsequence[iseq])(this, 1);
- }
- }
- /* Update */
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_x = n.m_q + n.m_v * m_sst.sdt;
- }
- }
- /* Solve positions */
- if (m_cfg.piterations > 0)
- {
- for (int isolve = 0; isolve < m_cfg.piterations; ++isolve)
- {
- const btScalar ti = isolve / (btScalar)m_cfg.piterations;
- for (int iseq = 0; iseq < m_cfg.m_psequence.size(); ++iseq)
- {
- getSolver(m_cfg.m_psequence[iseq])(this, 1, ti);
- }
- }
- const btScalar vc = m_sst.isdt * (1 - m_cfg.kDP);
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_v = (n.m_x - n.m_q) * vc;
- n.m_f = btVector3(0, 0, 0);
- }
- }
- /* Solve drift */
- if (m_cfg.diterations > 0)
- {
- const btScalar vcf = m_cfg.kVCF * m_sst.isdt;
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_q = n.m_x;
- }
- for (int idrift = 0; idrift < m_cfg.diterations; ++idrift)
- {
- for (int iseq = 0; iseq < m_cfg.m_dsequence.size(); ++iseq)
- {
- getSolver(m_cfg.m_dsequence[iseq])(this, 1, 0);
- }
- }
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- Node& n = m_nodes[i];
- n.m_v += (n.m_x - n.m_q) * vcf;
- }
- }
- /* Apply clusters */
- dampClusters();
- applyClusters(true);
-}
-
-//
-void btSoftBody::staticSolve(int iterations)
-{
- for (int isolve = 0; isolve < iterations; ++isolve)
- {
- for (int iseq = 0; iseq < m_cfg.m_psequence.size(); ++iseq)
- {
- getSolver(m_cfg.m_psequence[iseq])(this, 1, 0);
- }
- }
-}
-
-//
-void btSoftBody::solveCommonConstraints(btSoftBody** /*bodies*/, int /*count*/, int /*iterations*/)
-{
- /// placeholder
-}
-
-//
-void btSoftBody::solveClusters(const btAlignedObjectArray<btSoftBody*>& bodies)
-{
- const int nb = bodies.size();
- int iterations = 0;
- int i;
-
- for (i = 0; i < nb; ++i)
- {
- iterations = btMax(iterations, bodies[i]->m_cfg.citerations);
- }
- for (i = 0; i < nb; ++i)
- {
- bodies[i]->prepareClusters(iterations);
- }
- for (i = 0; i < iterations; ++i)
- {
- const btScalar sor = 1;
- for (int j = 0; j < nb; ++j)
- {
- bodies[j]->solveClusters(sor);
- }
- }
- for (i = 0; i < nb; ++i)
- {
- bodies[i]->cleanupClusters();
- }
-}
-
-//
-void btSoftBody::integrateMotion()
-{
- /* Update */
- updateNormals();
-}
-
-//
-btSoftBody::RayFromToCaster::RayFromToCaster(const btVector3& rayFrom, const btVector3& rayTo, btScalar mxt)
-{
- m_rayFrom = rayFrom;
- m_rayNormalizedDirection = (rayTo - rayFrom);
- m_rayTo = rayTo;
- m_mint = mxt;
- m_face = 0;
- m_tests = 0;
-}
-
-//
-void btSoftBody::RayFromToCaster::Process(const btDbvtNode* leaf)
-{
- btSoftBody::Face& f = *(btSoftBody::Face*)leaf->data;
- const btScalar t = rayFromToTriangle(m_rayFrom, m_rayTo, m_rayNormalizedDirection,
- f.m_n[0]->m_x,
- f.m_n[1]->m_x,
- f.m_n[2]->m_x,
- m_mint);
- if ((t > 0) && (t < m_mint))
- {
- m_mint = t;
- m_face = &f;
- }
- ++m_tests;
-}
-
-//
-btScalar btSoftBody::RayFromToCaster::rayFromToTriangle(const btVector3& rayFrom,
- const btVector3& rayTo,
- const btVector3& rayNormalizedDirection,
- const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- btScalar maxt)
-{
- static const btScalar ceps = -SIMD_EPSILON * 10;
- static const btScalar teps = SIMD_EPSILON * 10;
-
- const btVector3 n = btCross(b - a, c - a);
- const btScalar d = btDot(a, n);
- const btScalar den = btDot(rayNormalizedDirection, n);
- if (!btFuzzyZero(den))
- {
- const btScalar num = btDot(rayFrom, n) - d;
- const btScalar t = -num / den;
- if ((t > teps) && (t < maxt))
- {
- const btVector3 hit = rayFrom + rayNormalizedDirection * t;
- if ((btDot(n, btCross(a - hit, b - hit)) > ceps) &&
- (btDot(n, btCross(b - hit, c - hit)) > ceps) &&
- (btDot(n, btCross(c - hit, a - hit)) > ceps))
- {
- return (t);
- }
- }
- }
- return (-1);
-}
-
-//
-void btSoftBody::pointersToIndices()
-{
-#define PTR2IDX(_p_, _b_) reinterpret_cast<btSoftBody::Node*>((_p_) - (_b_))
- btSoftBody::Node* base = m_nodes.size() ? &m_nodes[0] : 0;
- int i, ni;
-
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- if (m_nodes[i].m_leaf)
- {
- m_nodes[i].m_leaf->data = *(void**)&i;
- }
- }
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- m_links[i].m_n[0] = PTR2IDX(m_links[i].m_n[0], base);
- m_links[i].m_n[1] = PTR2IDX(m_links[i].m_n[1], base);
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- m_faces[i].m_n[0] = PTR2IDX(m_faces[i].m_n[0], base);
- m_faces[i].m_n[1] = PTR2IDX(m_faces[i].m_n[1], base);
- m_faces[i].m_n[2] = PTR2IDX(m_faces[i].m_n[2], base);
- if (m_faces[i].m_leaf)
- {
- m_faces[i].m_leaf->data = *(void**)&i;
- }
- }
- for (i = 0, ni = m_anchors.size(); i < ni; ++i)
- {
- m_anchors[i].m_node = PTR2IDX(m_anchors[i].m_node, base);
- }
- for (i = 0, ni = m_notes.size(); i < ni; ++i)
- {
- for (int j = 0; j < m_notes[i].m_rank; ++j)
- {
- m_notes[i].m_nodes[j] = PTR2IDX(m_notes[i].m_nodes[j], base);
- }
- }
-#undef PTR2IDX
-}
-
-//
-void btSoftBody::indicesToPointers(const int* map)
-{
-#define IDX2PTR(_p_, _b_) map ? (&(_b_)[map[(((char*)_p_) - (char*)0)]]) : (&(_b_)[(((char*)_p_) - (char*)0)])
- btSoftBody::Node* base = m_nodes.size() ? &m_nodes[0] : 0;
- int i, ni;
-
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- if (m_nodes[i].m_leaf)
- {
- m_nodes[i].m_leaf->data = &m_nodes[i];
- }
- }
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- m_links[i].m_n[0] = IDX2PTR(m_links[i].m_n[0], base);
- m_links[i].m_n[1] = IDX2PTR(m_links[i].m_n[1], base);
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- m_faces[i].m_n[0] = IDX2PTR(m_faces[i].m_n[0], base);
- m_faces[i].m_n[1] = IDX2PTR(m_faces[i].m_n[1], base);
- m_faces[i].m_n[2] = IDX2PTR(m_faces[i].m_n[2], base);
- if (m_faces[i].m_leaf)
- {
- m_faces[i].m_leaf->data = &m_faces[i];
- }
- }
- for (i = 0, ni = m_anchors.size(); i < ni; ++i)
- {
- m_anchors[i].m_node = IDX2PTR(m_anchors[i].m_node, base);
- }
- for (i = 0, ni = m_notes.size(); i < ni; ++i)
- {
- for (int j = 0; j < m_notes[i].m_rank; ++j)
- {
- m_notes[i].m_nodes[j] = IDX2PTR(m_notes[i].m_nodes[j], base);
- }
- }
-#undef IDX2PTR
-}
-
-//
-int btSoftBody::rayTest(const btVector3& rayFrom, const btVector3& rayTo,
- btScalar& mint, eFeature::_& feature, int& index, bool bcountonly) const
-{
- int cnt = 0;
- btVector3 dir = rayTo - rayFrom;
-
- if (bcountonly || m_fdbvt.empty())
- { /* Full search */
-
- for (int i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- const btSoftBody::Face& f = m_faces[i];
-
- const btScalar t = RayFromToCaster::rayFromToTriangle(rayFrom, rayTo, dir,
- f.m_n[0]->m_x,
- f.m_n[1]->m_x,
- f.m_n[2]->m_x,
- mint);
- if (t > 0)
- {
- ++cnt;
- if (!bcountonly)
- {
- feature = btSoftBody::eFeature::Face;
- index = i;
- mint = t;
- }
- }
- }
- }
- else
- { /* Use dbvt */
- RayFromToCaster collider(rayFrom, rayTo, mint);
-
- btDbvt::rayTest(m_fdbvt.m_root, rayFrom, rayTo, collider);
- if (collider.m_face)
- {
- mint = collider.m_mint;
- feature = btSoftBody::eFeature::Face;
- index = (int)(collider.m_face - &m_faces[0]);
- cnt = 1;
- }
- }
-
- for (int i = 0; i < m_tetras.size(); i++)
- {
- const btSoftBody::Tetra& tet = m_tetras[i];
- int tetfaces[4][3] = {{0, 1, 2}, {0, 1, 3}, {1, 2, 3}, {0, 2, 3}};
- for (int f = 0; f < 4; f++)
- {
- int index0 = tetfaces[f][0];
- int index1 = tetfaces[f][1];
- int index2 = tetfaces[f][2];
- btVector3 v0 = tet.m_n[index0]->m_x;
- btVector3 v1 = tet.m_n[index1]->m_x;
- btVector3 v2 = tet.m_n[index2]->m_x;
-
- const btScalar t = RayFromToCaster::rayFromToTriangle(rayFrom, rayTo, dir,
- v0, v1, v2,
- mint);
- if (t > 0)
- {
- ++cnt;
- if (!bcountonly)
- {
- feature = btSoftBody::eFeature::Tetra;
- index = i;
- mint = t;
- }
- }
- }
- }
- return (cnt);
-}
-
-int btSoftBody::rayFaceTest(const btVector3& rayFrom, const btVector3& rayTo,
- btScalar& mint, int& index) const
-{
- int cnt = 0;
- { /* Use dbvt */
- RayFromToCaster collider(rayFrom, rayTo, mint);
-
- btDbvt::rayTest(m_fdbvt.m_root, rayFrom, rayTo, collider);
- if (collider.m_face)
- {
- mint = collider.m_mint;
- index = (int)(collider.m_face - &m_faces[0]);
- cnt = 1;
- }
- }
- return (cnt);
-}
-
-//
-static inline btDbvntNode* copyToDbvnt(const btDbvtNode* n)
-{
- if (n == 0)
- return 0;
- btDbvntNode* root = new btDbvntNode(n);
- if (n->isinternal())
- {
- btDbvntNode* c0 = copyToDbvnt(n->childs[0]);
- root->childs[0] = c0;
- btDbvntNode* c1 = copyToDbvnt(n->childs[1]);
- root->childs[1] = c1;
- }
- return root;
-}
-
-static inline void calculateNormalCone(btDbvntNode* root)
-{
- if (!root)
- return;
- if (root->isleaf())
- {
- const btSoftBody::Face* face = (btSoftBody::Face*)root->data;
- root->normal = face->m_normal;
- root->angle = 0;
- }
- else
- {
- btVector3 n0(0, 0, 0), n1(0, 0, 0);
- btScalar a0 = 0, a1 = 0;
- if (root->childs[0])
- {
- calculateNormalCone(root->childs[0]);
- n0 = root->childs[0]->normal;
- a0 = root->childs[0]->angle;
- }
- if (root->childs[1])
- {
- calculateNormalCone(root->childs[1]);
- n1 = root->childs[1]->normal;
- a1 = root->childs[1]->angle;
- }
- root->normal = (n0 + n1).safeNormalize();
- root->angle = btMax(a0, a1) + btAngle(n0, n1) * 0.5;
- }
-}
-
-void btSoftBody::initializeFaceTree()
-{
- BT_PROFILE("btSoftBody::initializeFaceTree");
- m_fdbvt.clear();
- // create leaf nodes;
- btAlignedObjectArray<btDbvtNode*> leafNodes;
- leafNodes.resize(m_faces.size());
- for (int i = 0; i < m_faces.size(); ++i)
- {
- Face& f = m_faces[i];
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol = VolumeOf(f, 0);
- btDbvtNode* node = new (btAlignedAlloc(sizeof(btDbvtNode), 16)) btDbvtNode();
- node->parent = NULL;
- node->data = &f;
- node->childs[1] = 0;
- node->volume = vol;
- leafNodes[i] = node;
- f.m_leaf = node;
- }
- btAlignedObjectArray<btAlignedObjectArray<int> > adj;
- adj.resize(m_faces.size());
- // construct the adjacency list for triangles
- for (int i = 0; i < adj.size(); ++i)
- {
- for (int j = i + 1; j < adj.size(); ++j)
- {
- int dup = 0;
- for (int k = 0; k < 3; ++k)
- {
- for (int l = 0; l < 3; ++l)
- {
- if (m_faces[i].m_n[k] == m_faces[j].m_n[l])
- {
- ++dup;
- break;
- }
- }
- if (dup == 2)
- {
- adj[i].push_back(j);
- adj[j].push_back(i);
- }
- }
- }
- }
- m_fdbvt.m_root = buildTreeBottomUp(leafNodes, adj);
- if (m_fdbvnt)
- delete m_fdbvnt;
- m_fdbvnt = copyToDbvnt(m_fdbvt.m_root);
- updateFaceTree(false, false);
- rebuildNodeTree();
-}
-
-//
-void btSoftBody::rebuildNodeTree()
-{
- m_ndbvt.clear();
- btAlignedObjectArray<btDbvtNode*> leafNodes;
- leafNodes.resize(m_nodes.size());
- for (int i = 0; i < m_nodes.size(); ++i)
- {
- Node& n = m_nodes[i];
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol = btDbvtVolume::FromCR(n.m_x, 0);
- btDbvtNode* node = new (btAlignedAlloc(sizeof(btDbvtNode), 16)) btDbvtNode();
- node->parent = NULL;
- node->data = &n;
- node->childs[1] = 0;
- node->volume = vol;
- leafNodes[i] = node;
- n.m_leaf = node;
- }
- btAlignedObjectArray<btAlignedObjectArray<int> > adj;
- adj.resize(m_nodes.size());
- btAlignedObjectArray<int> old_id;
- old_id.resize(m_nodes.size());
- for (int i = 0; i < m_nodes.size(); ++i)
- old_id[i] = m_nodes[i].index;
- for (int i = 0; i < m_nodes.size(); ++i)
- m_nodes[i].index = i;
- for (int i = 0; i < m_links.size(); ++i)
- {
- Link& l = m_links[i];
- adj[l.m_n[0]->index].push_back(l.m_n[1]->index);
- adj[l.m_n[1]->index].push_back(l.m_n[0]->index);
- }
- m_ndbvt.m_root = buildTreeBottomUp(leafNodes, adj);
- for (int i = 0; i < m_nodes.size(); ++i)
- m_nodes[i].index = old_id[i];
-}
-
-//
-btVector3 btSoftBody::evaluateCom() const
-{
- btVector3 com(0, 0, 0);
- if (m_pose.m_bframe)
- {
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- com += m_nodes[i].m_x * m_pose.m_wgh[i];
- }
- }
- return (com);
-}
-
-bool btSoftBody::checkContact(const btCollisionObjectWrapper* colObjWrap,
- const btVector3& x,
- btScalar margin,
- btSoftBody::sCti& cti) const
-{
- btVector3 nrm;
- const btCollisionShape* shp = colObjWrap->getCollisionShape();
- // const btRigidBody *tmpRigid = btRigidBody::upcast(colObjWrap->getCollisionObject());
- //const btTransform &wtr = tmpRigid ? tmpRigid->getWorldTransform() : colObjWrap->getWorldTransform();
- const btTransform& wtr = colObjWrap->getWorldTransform();
- //todo: check which transform is needed here
-
- btScalar dst =
- m_worldInfo->m_sparsesdf.Evaluate(
- wtr.invXform(x),
- shp,
- nrm,
- margin);
- if (dst < 0)
- {
- cti.m_colObj = colObjWrap->getCollisionObject();
- cti.m_normal = wtr.getBasis() * nrm;
- cti.m_offset = -btDot(cti.m_normal, x - cti.m_normal * dst);
- return (true);
- }
- return (false);
-}
-
-//
-bool btSoftBody::checkDeformableContact(const btCollisionObjectWrapper* colObjWrap,
- const btVector3& x,
- btScalar margin,
- btSoftBody::sCti& cti, bool predict) const
-{
- btVector3 nrm;
- const btCollisionShape* shp = colObjWrap->getCollisionShape();
- const btCollisionObject* tmpCollisionObj = colObjWrap->getCollisionObject();
- // use the position x_{n+1}^* = x_n + dt * v_{n+1}^* where v_{n+1}^* = v_n + dtg for collision detect
- // but resolve contact at x_n
- btTransform wtr = (predict) ? (colObjWrap->m_preTransform != NULL ? tmpCollisionObj->getInterpolationWorldTransform() * (*colObjWrap->m_preTransform) : tmpCollisionObj->getInterpolationWorldTransform())
- : colObjWrap->getWorldTransform();
- btScalar dst =
- m_worldInfo->m_sparsesdf.Evaluate(
- wtr.invXform(x),
- shp,
- nrm,
- margin);
-
- if (!predict)
- {
- cti.m_colObj = colObjWrap->getCollisionObject();
- cti.m_normal = wtr.getBasis() * nrm;
- cti.m_offset = dst;
- }
- if (dst < 0)
- return true;
- return (false);
-}
-
-//
-// Compute barycentric coordinates (u, v, w) for
-// point p with respect to triangle (a, b, c)
-static void getBarycentric(const btVector3& p, btVector3& a, btVector3& b, btVector3& c, btVector3& bary)
-{
- btVector3 v0 = b - a, v1 = c - a, v2 = p - a;
- btScalar d00 = v0.dot(v0);
- btScalar d01 = v0.dot(v1);
- btScalar d11 = v1.dot(v1);
- btScalar d20 = v2.dot(v0);
- btScalar d21 = v2.dot(v1);
- btScalar denom = d00 * d11 - d01 * d01;
- bary.setY((d11 * d20 - d01 * d21) / denom);
- bary.setZ((d00 * d21 - d01 * d20) / denom);
- bary.setX(btScalar(1) - bary.getY() - bary.getZ());
-}
-
-//
-bool btSoftBody::checkDeformableFaceContact(const btCollisionObjectWrapper* colObjWrap,
- Face& f,
- btVector3& contact_point,
- btVector3& bary,
- btScalar margin,
- btSoftBody::sCti& cti, bool predict) const
-{
- btVector3 nrm;
- const btCollisionShape* shp = colObjWrap->getCollisionShape();
- const btCollisionObject* tmpCollisionObj = colObjWrap->getCollisionObject();
- // use the position x_{n+1}^* = x_n + dt * v_{n+1}^* where v_{n+1}^* = v_n + dtg for collision detect
- // but resolve contact at x_n
- btTransform wtr = (predict) ? (colObjWrap->m_preTransform != NULL ? tmpCollisionObj->getInterpolationWorldTransform() * (*colObjWrap->m_preTransform) : tmpCollisionObj->getInterpolationWorldTransform())
- : colObjWrap->getWorldTransform();
- btScalar dst;
- btGjkEpaSolver2::sResults results;
-
-// #define USE_QUADRATURE 1
-
- // use collision quadrature point
-#ifdef USE_QUADRATURE
- {
- dst = SIMD_INFINITY;
- btVector3 local_nrm;
- for (int q = 0; q < m_quads.size(); ++q)
- {
- btVector3 p;
- if (predict)
- p = BaryEval(f.m_n[0]->m_q, f.m_n[1]->m_q, f.m_n[2]->m_q, m_quads[q]);
- else
- p = BaryEval(f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x, m_quads[q]);
- btScalar local_dst = m_worldInfo->m_sparsesdf.Evaluate(
- wtr.invXform(p),
- shp,
- local_nrm,
- margin);
- if (local_dst < dst)
- {
- if (local_dst < 0 && predict)
- return true;
- dst = local_dst;
- contact_point = p;
- bary = m_quads[q];
- nrm = local_nrm;
- }
- if (!predict)
- {
- cti.m_colObj = colObjWrap->getCollisionObject();
- cti.m_normal = wtr.getBasis() * nrm;
- cti.m_offset = dst;
- }
- }
- return (dst < 0);
- }
-#endif
-
- // collision detection using x*
- btTransform triangle_transform;
- triangle_transform.setIdentity();
- triangle_transform.setOrigin(f.m_n[0]->m_q);
- btTriangleShape triangle(btVector3(0, 0, 0), f.m_n[1]->m_q - f.m_n[0]->m_q, f.m_n[2]->m_q - f.m_n[0]->m_q);
- btVector3 guess(0, 0, 0);
- const btConvexShape* csh = static_cast<const btConvexShape*>(shp);
- btGjkEpaSolver2::SignedDistance(&triangle, triangle_transform, csh, wtr, guess, results);
- dst = results.distance - 2.0 * csh->getMargin() - margin; // margin padding so that the distance = the actual distance between face and rigid - margin of rigid - margin of deformable
- if (dst >= 0)
- return false;
-
- // Use consistent barycenter to recalculate distance.
- if (this->m_cacheBarycenter)
- {
- if (f.m_pcontact[3] != 0)
- {
- for (int i = 0; i < 3; ++i)
- bary[i] = f.m_pcontact[i];
- contact_point = BaryEval(f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x, bary);
- const btConvexShape* csh = static_cast<const btConvexShape*>(shp);
- btGjkEpaSolver2::SignedDistance(contact_point, margin, csh, wtr, results);
- cti.m_colObj = colObjWrap->getCollisionObject();
- dst = results.distance;
- cti.m_normal = results.normal;
- cti.m_offset = dst;
-
- //point-convex CD
- wtr = colObjWrap->getWorldTransform();
- btTriangleShape triangle2(btVector3(0, 0, 0), f.m_n[1]->m_x - f.m_n[0]->m_x, f.m_n[2]->m_x - f.m_n[0]->m_x);
- triangle_transform.setOrigin(f.m_n[0]->m_x);
- btGjkEpaSolver2::SignedDistance(&triangle2, triangle_transform, csh, wtr, guess, results);
-
- dst = results.distance - csh->getMargin() - margin;
- return true;
- }
- }
-
- // Use triangle-convex CD.
- wtr = colObjWrap->getWorldTransform();
- btTriangleShape triangle2(btVector3(0, 0, 0), f.m_n[1]->m_x - f.m_n[0]->m_x, f.m_n[2]->m_x - f.m_n[0]->m_x);
- triangle_transform.setOrigin(f.m_n[0]->m_x);
- btGjkEpaSolver2::SignedDistance(&triangle2, triangle_transform, csh, wtr, guess, results);
- contact_point = results.witnesses[0];
- getBarycentric(contact_point, f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x, bary);
-
- for (int i = 0; i < 3; ++i)
- f.m_pcontact[i] = bary[i];
-
- dst = results.distance - csh->getMargin() - margin;
- cti.m_colObj = colObjWrap->getCollisionObject();
- cti.m_normal = results.normal;
- cti.m_offset = dst;
- return true;
-}
-
-void btSoftBody::updateNormals()
-{
- const btVector3 zv(0, 0, 0);
- int i, ni;
-
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- m_nodes[i].m_n = zv;
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- btSoftBody::Face& f = m_faces[i];
- const btVector3 n = btCross(f.m_n[1]->m_x - f.m_n[0]->m_x,
- f.m_n[2]->m_x - f.m_n[0]->m_x);
- f.m_normal = n;
- f.m_normal.safeNormalize();
- f.m_n[0]->m_n += n;
- f.m_n[1]->m_n += n;
- f.m_n[2]->m_n += n;
- }
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- btScalar len = m_nodes[i].m_n.length();
- if (len > SIMD_EPSILON)
- m_nodes[i].m_n /= len;
- }
-}
-
-//
-void btSoftBody::updateBounds()
-{
- /*if( m_acceleratedSoftBody )
- {
- // If we have an accelerated softbody we need to obtain the bounds correctly
- // For now (slightly hackily) just have a very large AABB
- // TODO: Write get bounds kernel
- // If that is updating in place, atomic collisions might be low (when the cloth isn't perfectly aligned to an axis) and we could
- // probably do a test and exchange reasonably efficiently.
-
- m_bounds[0] = btVector3(-1000, -1000, -1000);
- m_bounds[1] = btVector3(1000, 1000, 1000);
-
- } else {*/
- // if (m_ndbvt.m_root)
- // {
- // const btVector3& mins = m_ndbvt.m_root->volume.Mins();
- // const btVector3& maxs = m_ndbvt.m_root->volume.Maxs();
- // const btScalar csm = getCollisionShape()->getMargin();
- // const btVector3 mrg = btVector3(csm,
- // csm,
- // csm) *
- // 1; // ??? to investigate...
- // m_bounds[0] = mins - mrg;
- // m_bounds[1] = maxs + mrg;
- // if (0 != getBroadphaseHandle())
- // {
- // m_worldInfo->m_broadphase->setAabb(getBroadphaseHandle(),
- // m_bounds[0],
- // m_bounds[1],
- // m_worldInfo->m_dispatcher);
- // }
- // }
- // else
- // {
- // m_bounds[0] =
- // m_bounds[1] = btVector3(0, 0, 0);
- // }
- if (m_nodes.size())
- {
- btVector3 mins = m_nodes[0].m_x;
- btVector3 maxs = m_nodes[0].m_x;
- for (int i = 1; i < m_nodes.size(); ++i)
- {
- for (int d = 0; d < 3; ++d)
- {
- if (m_nodes[i].m_x[d] > maxs[d])
- maxs[d] = m_nodes[i].m_x[d];
- if (m_nodes[i].m_x[d] < mins[d])
- mins[d] = m_nodes[i].m_x[d];
- }
- }
- const btScalar csm = getCollisionShape()->getMargin();
- const btVector3 mrg = btVector3(csm,
- csm,
- csm);
- m_bounds[0] = mins - mrg;
- m_bounds[1] = maxs + mrg;
- if (0 != getBroadphaseHandle())
- {
- m_worldInfo->m_broadphase->setAabb(getBroadphaseHandle(),
- m_bounds[0],
- m_bounds[1],
- m_worldInfo->m_dispatcher);
- }
- }
- else
- {
- m_bounds[0] =
- m_bounds[1] = btVector3(0, 0, 0);
- }
-}
-
-//
-void btSoftBody::updatePose()
-{
- if (m_pose.m_bframe)
- {
- btSoftBody::Pose& pose = m_pose;
- const btVector3 com = evaluateCom();
- /* Com */
- pose.m_com = com;
- /* Rotation */
- btMatrix3x3 Apq;
- const btScalar eps = SIMD_EPSILON;
- Apq[0] = Apq[1] = Apq[2] = btVector3(0, 0, 0);
- Apq[0].setX(eps);
- Apq[1].setY(eps * 2);
- Apq[2].setZ(eps * 3);
- for (int i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- const btVector3 a = pose.m_wgh[i] * (m_nodes[i].m_x - com);
- const btVector3& b = pose.m_pos[i];
- Apq[0] += a.x() * b;
- Apq[1] += a.y() * b;
- Apq[2] += a.z() * b;
- }
- btMatrix3x3 r, s;
- PolarDecompose(Apq, r, s);
- pose.m_rot = r;
- pose.m_scl = pose.m_aqq * r.transpose() * Apq;
- if (m_cfg.maxvolume > 1)
- {
- const btScalar idet = Clamp<btScalar>(1 / pose.m_scl.determinant(),
- 1, m_cfg.maxvolume);
- pose.m_scl = Mul(pose.m_scl, idet);
- }
- }
-}
-
-//
-void btSoftBody::updateArea(bool averageArea)
-{
- int i, ni;
-
- /* Face area */
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- Face& f = m_faces[i];
- f.m_ra = AreaOf(f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x);
- }
-
- /* Node area */
-
- if (averageArea)
- {
- btAlignedObjectArray<int> counts;
- counts.resize(m_nodes.size(), 0);
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- m_nodes[i].m_area = 0;
- }
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- btSoftBody::Face& f = m_faces[i];
- for (int j = 0; j < 3; ++j)
- {
- const int index = (int)(f.m_n[j] - &m_nodes[0]);
- counts[index]++;
- f.m_n[j]->m_area += btFabs(f.m_ra);
- }
- }
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- if (counts[i] > 0)
- m_nodes[i].m_area /= (btScalar)counts[i];
- else
- m_nodes[i].m_area = 0;
- }
- }
- else
- {
- // initialize node area as zero
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- m_nodes[i].m_area = 0;
- }
-
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- btSoftBody::Face& f = m_faces[i];
-
- for (int j = 0; j < 3; ++j)
- {
- f.m_n[j]->m_area += f.m_ra;
- }
- }
-
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- m_nodes[i].m_area *= 0.3333333f;
- }
- }
-}
-
-void btSoftBody::updateLinkConstants()
-{
- int i, ni;
-
- /* Links */
- for (i = 0, ni = m_links.size(); i < ni; ++i)
- {
- Link& l = m_links[i];
- Material& m = *l.m_material;
- l.m_c0 = (l.m_n[0]->m_im + l.m_n[1]->m_im) / m.m_kLST;
- }
-}
-
-void btSoftBody::updateConstants()
-{
- resetLinkRestLengths();
- updateLinkConstants();
- updateArea();
-}
-
-//
-void btSoftBody::initializeClusters()
-{
- int i;
-
- for (i = 0; i < m_clusters.size(); ++i)
- {
- Cluster& c = *m_clusters[i];
- c.m_imass = 0;
- c.m_masses.resize(c.m_nodes.size());
- for (int j = 0; j < c.m_nodes.size(); ++j)
- {
- if (c.m_nodes[j]->m_im == 0)
- {
- c.m_containsAnchor = true;
- c.m_masses[j] = BT_LARGE_FLOAT;
- }
- else
- {
- c.m_masses[j] = btScalar(1.) / c.m_nodes[j]->m_im;
- }
- c.m_imass += c.m_masses[j];
- }
- c.m_imass = btScalar(1.) / c.m_imass;
- c.m_com = btSoftBody::clusterCom(&c);
- c.m_lv = btVector3(0, 0, 0);
- c.m_av = btVector3(0, 0, 0);
- c.m_leaf = 0;
- /* Inertia */
- btMatrix3x3& ii = c.m_locii;
- ii[0] = ii[1] = ii[2] = btVector3(0, 0, 0);
- {
- int i, ni;
-
- for (i = 0, ni = c.m_nodes.size(); i < ni; ++i)
- {
- const btVector3 k = c.m_nodes[i]->m_x - c.m_com;
- const btVector3 q = k * k;
- const btScalar m = c.m_masses[i];
- ii[0][0] += m * (q[1] + q[2]);
- ii[1][1] += m * (q[0] + q[2]);
- ii[2][2] += m * (q[0] + q[1]);
- ii[0][1] -= m * k[0] * k[1];
- ii[0][2] -= m * k[0] * k[2];
- ii[1][2] -= m * k[1] * k[2];
- }
- }
- ii[1][0] = ii[0][1];
- ii[2][0] = ii[0][2];
- ii[2][1] = ii[1][2];
-
- ii = ii.inverse();
-
- /* Frame */
- c.m_framexform.setIdentity();
- c.m_framexform.setOrigin(c.m_com);
- c.m_framerefs.resize(c.m_nodes.size());
- {
- int i;
- for (i = 0; i < c.m_framerefs.size(); ++i)
- {
- c.m_framerefs[i] = c.m_nodes[i]->m_x - c.m_com;
- }
- }
- }
-}
-
-//
-void btSoftBody::updateClusters()
-{
- BT_PROFILE("UpdateClusters");
- int i;
-
- for (i = 0; i < m_clusters.size(); ++i)
- {
- btSoftBody::Cluster& c = *m_clusters[i];
- const int n = c.m_nodes.size();
- //const btScalar invn=1/(btScalar)n;
- if (n)
- {
- /* Frame */
- const btScalar eps = btScalar(0.0001);
- btMatrix3x3 m, r, s;
- m[0] = m[1] = m[2] = btVector3(0, 0, 0);
- m[0][0] = eps * 1;
- m[1][1] = eps * 2;
- m[2][2] = eps * 3;
- c.m_com = clusterCom(&c);
- for (int i = 0; i < c.m_nodes.size(); ++i)
- {
- const btVector3 a = c.m_nodes[i]->m_x - c.m_com;
- const btVector3& b = c.m_framerefs[i];
- m[0] += a[0] * b;
- m[1] += a[1] * b;
- m[2] += a[2] * b;
- }
- PolarDecompose(m, r, s);
- c.m_framexform.setOrigin(c.m_com);
- c.m_framexform.setBasis(r);
- /* Inertia */
-#if 1 /* Constant */
- c.m_invwi = c.m_framexform.getBasis() * c.m_locii * c.m_framexform.getBasis().transpose();
-#else
-#if 0 /* Sphere */
- const btScalar rk=(2*c.m_extents.length2())/(5*c.m_imass);
- const btVector3 inertia(rk,rk,rk);
- const btVector3 iin(btFabs(inertia[0])>SIMD_EPSILON?1/inertia[0]:0,
- btFabs(inertia[1])>SIMD_EPSILON?1/inertia[1]:0,
- btFabs(inertia[2])>SIMD_EPSILON?1/inertia[2]:0);
-
- c.m_invwi=c.m_xform.getBasis().scaled(iin)*c.m_xform.getBasis().transpose();
-#else /* Actual */
- c.m_invwi[0] = c.m_invwi[1] = c.m_invwi[2] = btVector3(0, 0, 0);
- for (int i = 0; i < n; ++i)
- {
- const btVector3 k = c.m_nodes[i]->m_x - c.m_com;
- const btVector3 q = k * k;
- const btScalar m = 1 / c.m_nodes[i]->m_im;
- c.m_invwi[0][0] += m * (q[1] + q[2]);
- c.m_invwi[1][1] += m * (q[0] + q[2]);
- c.m_invwi[2][2] += m * (q[0] + q[1]);
- c.m_invwi[0][1] -= m * k[0] * k[1];
- c.m_invwi[0][2] -= m * k[0] * k[2];
- c.m_invwi[1][2] -= m * k[1] * k[2];
- }
- c.m_invwi[1][0] = c.m_invwi[0][1];
- c.m_invwi[2][0] = c.m_invwi[0][2];
- c.m_invwi[2][1] = c.m_invwi[1][2];
- c.m_invwi = c.m_invwi.inverse();
-#endif
-#endif
- /* Velocities */
- c.m_lv = btVector3(0, 0, 0);
- c.m_av = btVector3(0, 0, 0);
- {
- int i;
-
- for (i = 0; i < n; ++i)
- {
- const btVector3 v = c.m_nodes[i]->m_v * c.m_masses[i];
- c.m_lv += v;
- c.m_av += btCross(c.m_nodes[i]->m_x - c.m_com, v);
- }
- }
- c.m_lv = c.m_imass * c.m_lv * (1 - c.m_ldamping);
- c.m_av = c.m_invwi * c.m_av * (1 - c.m_adamping);
- c.m_vimpulses[0] =
- c.m_vimpulses[1] = btVector3(0, 0, 0);
- c.m_dimpulses[0] =
- c.m_dimpulses[1] = btVector3(0, 0, 0);
- c.m_nvimpulses = 0;
- c.m_ndimpulses = 0;
- /* Matching */
- if (c.m_matching > 0)
- {
- for (int j = 0; j < c.m_nodes.size(); ++j)
- {
- Node& n = *c.m_nodes[j];
- const btVector3 x = c.m_framexform * c.m_framerefs[j];
- n.m_x = Lerp(n.m_x, x, c.m_matching);
- }
- }
- /* Dbvt */
- if (c.m_collide)
- {
- btVector3 mi = c.m_nodes[0]->m_x;
- btVector3 mx = mi;
- for (int j = 1; j < n; ++j)
- {
- mi.setMin(c.m_nodes[j]->m_x);
- mx.setMax(c.m_nodes[j]->m_x);
- }
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- bounds = btDbvtVolume::FromMM(mi, mx);
- if (c.m_leaf)
- m_cdbvt.update(c.m_leaf, bounds, c.m_lv * m_sst.sdt * 3, m_sst.radmrg);
- else
- c.m_leaf = m_cdbvt.insert(bounds, &c);
- }
- }
- }
-}
-
-//
-void btSoftBody::cleanupClusters()
-{
- for (int i = 0; i < m_joints.size(); ++i)
- {
- m_joints[i]->Terminate(m_sst.sdt);
- if (m_joints[i]->m_delete)
- {
- btAlignedFree(m_joints[i]);
- m_joints.remove(m_joints[i--]);
- }
- }
-}
-
-//
-void btSoftBody::prepareClusters(int iterations)
-{
- for (int i = 0; i < m_joints.size(); ++i)
- {
- m_joints[i]->Prepare(m_sst.sdt, iterations);
- }
-}
-
-//
-void btSoftBody::solveClusters(btScalar sor)
-{
- for (int i = 0, ni = m_joints.size(); i < ni; ++i)
- {
- m_joints[i]->Solve(m_sst.sdt, sor);
- }
-}
-
-//
-void btSoftBody::applyClusters(bool drift)
-{
- BT_PROFILE("ApplyClusters");
- // const btScalar f0=m_sst.sdt;
- //const btScalar f1=f0/2;
- btAlignedObjectArray<btVector3> deltas;
- btAlignedObjectArray<btScalar> weights;
- deltas.resize(m_nodes.size(), btVector3(0, 0, 0));
- weights.resize(m_nodes.size(), 0);
- int i;
-
- if (drift)
- {
- for (i = 0; i < m_clusters.size(); ++i)
- {
- Cluster& c = *m_clusters[i];
- if (c.m_ndimpulses)
- {
- c.m_dimpulses[0] /= (btScalar)c.m_ndimpulses;
- c.m_dimpulses[1] /= (btScalar)c.m_ndimpulses;
- }
- }
- }
-
- for (i = 0; i < m_clusters.size(); ++i)
- {
- Cluster& c = *m_clusters[i];
- if (0 < (drift ? c.m_ndimpulses : c.m_nvimpulses))
- {
- const btVector3 v = (drift ? c.m_dimpulses[0] : c.m_vimpulses[0]) * m_sst.sdt;
- const btVector3 w = (drift ? c.m_dimpulses[1] : c.m_vimpulses[1]) * m_sst.sdt;
- for (int j = 0; j < c.m_nodes.size(); ++j)
- {
- const int idx = int(c.m_nodes[j] - &m_nodes[0]);
- const btVector3& x = c.m_nodes[j]->m_x;
- const btScalar q = c.m_masses[j];
- deltas[idx] += (v + btCross(w, x - c.m_com)) * q;
- weights[idx] += q;
- }
- }
- }
- for (i = 0; i < deltas.size(); ++i)
- {
- if (weights[i] > 0)
- {
- m_nodes[i].m_x += deltas[i] / weights[i];
- }
- }
-}
-
-//
-void btSoftBody::dampClusters()
-{
- int i;
-
- for (i = 0; i < m_clusters.size(); ++i)
- {
- Cluster& c = *m_clusters[i];
- if (c.m_ndamping > 0)
- {
- for (int j = 0; j < c.m_nodes.size(); ++j)
- {
- Node& n = *c.m_nodes[j];
- if (n.m_im > 0)
- {
- const btVector3 vx = c.m_lv + btCross(c.m_av, c.m_nodes[j]->m_q - c.m_com);
- if (vx.length2() <= n.m_v.length2())
- {
- n.m_v += c.m_ndamping * (vx - n.m_v);
- }
- }
- }
- }
- }
-}
-
-void btSoftBody::setSpringStiffness(btScalar k)
-{
- for (int i = 0; i < m_links.size(); ++i)
- {
- m_links[i].Feature::m_material->m_kLST = k;
- }
- m_repulsionStiffness = k;
-}
-
-void btSoftBody::setGravityFactor(btScalar gravFactor)
-{
- m_gravityFactor = gravFactor;
-}
-
-void btSoftBody::setCacheBarycenter(bool cacheBarycenter)
-{
- m_cacheBarycenter = cacheBarycenter;
-}
-
-void btSoftBody::initializeDmInverse()
-{
- btScalar unit_simplex_measure = 1. / 6.;
-
- for (int i = 0; i < m_tetras.size(); ++i)
- {
- Tetra& t = m_tetras[i];
- btVector3 c1 = t.m_n[1]->m_x - t.m_n[0]->m_x;
- btVector3 c2 = t.m_n[2]->m_x - t.m_n[0]->m_x;
- btVector3 c3 = t.m_n[3]->m_x - t.m_n[0]->m_x;
- btMatrix3x3 Dm(c1.getX(), c2.getX(), c3.getX(),
- c1.getY(), c2.getY(), c3.getY(),
- c1.getZ(), c2.getZ(), c3.getZ());
- t.m_element_measure = Dm.determinant() * unit_simplex_measure;
- t.m_Dm_inverse = Dm.inverse();
-
- // calculate the first three columns of P^{-1}
- btVector3 a = t.m_n[0]->m_x;
- btVector3 b = t.m_n[1]->m_x;
- btVector3 c = t.m_n[2]->m_x;
- btVector3 d = t.m_n[3]->m_x;
-
- btScalar det = 1 / (a[0] * b[1] * c[2] - a[0] * b[1] * d[2] - a[0] * b[2] * c[1] + a[0] * b[2] * d[1] + a[0] * c[1] * d[2] - a[0] * c[2] * d[1] + a[1] * (-b[0] * c[2] + b[0] * d[2] + b[2] * c[0] - b[2] * d[0] - c[0] * d[2] + c[2] * d[0]) + a[2] * (b[0] * c[1] - b[0] * d[1] + b[1] * (d[0] - c[0]) + c[0] * d[1] - c[1] * d[0]) - b[0] * c[1] * d[2] + b[0] * c[2] * d[1] + b[1] * c[0] * d[2] - b[1] * c[2] * d[0] - b[2] * c[0] * d[1] + b[2] * c[1] * d[0]);
-
- btScalar P11 = -b[2] * c[1] + d[2] * c[1] + b[1] * c[2] + b[2] * d[1] - c[2] * d[1] - b[1] * d[2];
- btScalar P12 = b[2] * c[0] - d[2] * c[0] - b[0] * c[2] - b[2] * d[0] + c[2] * d[0] + b[0] * d[2];
- btScalar P13 = -b[1] * c[0] + d[1] * c[0] + b[0] * c[1] + b[1] * d[0] - c[1] * d[0] - b[0] * d[1];
- btScalar P21 = a[2] * c[1] - d[2] * c[1] - a[1] * c[2] - a[2] * d[1] + c[2] * d[1] + a[1] * d[2];
- btScalar P22 = -a[2] * c[0] + d[2] * c[0] + a[0] * c[2] + a[2] * d[0] - c[2] * d[0] - a[0] * d[2];
- btScalar P23 = a[1] * c[0] - d[1] * c[0] - a[0] * c[1] - a[1] * d[0] + c[1] * d[0] + a[0] * d[1];
- btScalar P31 = -a[2] * b[1] + d[2] * b[1] + a[1] * b[2] + a[2] * d[1] - b[2] * d[1] - a[1] * d[2];
- btScalar P32 = a[2] * b[0] - d[2] * b[0] - a[0] * b[2] - a[2] * d[0] + b[2] * d[0] + a[0] * d[2];
- btScalar P33 = -a[1] * b[0] + d[1] * b[0] + a[0] * b[1] + a[1] * d[0] - b[1] * d[0] - a[0] * d[1];
- btScalar P41 = a[2] * b[1] - c[2] * b[1] - a[1] * b[2] - a[2] * c[1] + b[2] * c[1] + a[1] * c[2];
- btScalar P42 = -a[2] * b[0] + c[2] * b[0] + a[0] * b[2] + a[2] * c[0] - b[2] * c[0] - a[0] * c[2];
- btScalar P43 = a[1] * b[0] - c[1] * b[0] - a[0] * b[1] - a[1] * c[0] + b[1] * c[0] + a[0] * c[1];
-
- btVector4 p1(P11 * det, P21 * det, P31 * det, P41 * det);
- btVector4 p2(P12 * det, P22 * det, P32 * det, P42 * det);
- btVector4 p3(P13 * det, P23 * det, P33 * det, P43 * det);
-
- t.m_P_inv[0] = p1;
- t.m_P_inv[1] = p2;
- t.m_P_inv[2] = p3;
- }
-}
-
-static btScalar Dot4(const btVector4& a, const btVector4& b)
-{
- return a[0] * b[0] + a[1] * b[1] + a[2] * b[2] + a[3] * b[3];
-}
-
-void btSoftBody::updateDeformation()
-{
- btQuaternion q;
- for (int i = 0; i < m_tetras.size(); ++i)
- {
- btSoftBody::Tetra& t = m_tetras[i];
- btVector3 c1 = t.m_n[1]->m_q - t.m_n[0]->m_q;
- btVector3 c2 = t.m_n[2]->m_q - t.m_n[0]->m_q;
- btVector3 c3 = t.m_n[3]->m_q - t.m_n[0]->m_q;
- btMatrix3x3 Ds(c1.getX(), c2.getX(), c3.getX(),
- c1.getY(), c2.getY(), c3.getY(),
- c1.getZ(), c2.getZ(), c3.getZ());
- t.m_F = Ds * t.m_Dm_inverse;
-
- btSoftBody::TetraScratch& s = m_tetraScratches[i];
- s.m_F = t.m_F;
- s.m_J = t.m_F.determinant();
- btMatrix3x3 C = t.m_F.transpose() * t.m_F;
- s.m_trace = C[0].getX() + C[1].getY() + C[2].getZ();
- s.m_cofF = t.m_F.adjoint().transpose();
-
- btVector3 a = t.m_n[0]->m_q;
- btVector3 b = t.m_n[1]->m_q;
- btVector3 c = t.m_n[2]->m_q;
- btVector3 d = t.m_n[3]->m_q;
- btVector4 q1(a[0], b[0], c[0], d[0]);
- btVector4 q2(a[1], b[1], c[1], d[1]);
- btVector4 q3(a[2], b[2], c[2], d[2]);
- btMatrix3x3 B(Dot4(q1, t.m_P_inv[0]), Dot4(q1, t.m_P_inv[1]), Dot4(q1, t.m_P_inv[2]),
- Dot4(q2, t.m_P_inv[0]), Dot4(q2, t.m_P_inv[1]), Dot4(q2, t.m_P_inv[2]),
- Dot4(q3, t.m_P_inv[0]), Dot4(q3, t.m_P_inv[1]), Dot4(q3, t.m_P_inv[2]));
- q.setRotation(btVector3(0, 0, 1), 0);
- B.extractRotation(q, 0.01); // precision of the rotation is not very important for visual correctness.
- btMatrix3x3 Q(q);
- s.m_corotation = Q;
- }
-}
-
-void btSoftBody::advanceDeformation()
-{
- updateDeformation();
- for (int i = 0; i < m_tetras.size(); ++i)
- {
- m_tetraScratchesTn[i] = m_tetraScratches[i];
- }
-}
-//
-void btSoftBody::Joint::Prepare(btScalar dt, int)
-{
- m_bodies[0].activate();
- m_bodies[1].activate();
-}
-
-//
-void btSoftBody::LJoint::Prepare(btScalar dt, int iterations)
-{
- static const btScalar maxdrift = 4;
- Joint::Prepare(dt, iterations);
- m_rpos[0] = m_bodies[0].xform() * m_refs[0];
- m_rpos[1] = m_bodies[1].xform() * m_refs[1];
- m_drift = Clamp(m_rpos[0] - m_rpos[1], maxdrift) * m_erp / dt;
- m_rpos[0] -= m_bodies[0].xform().getOrigin();
- m_rpos[1] -= m_bodies[1].xform().getOrigin();
- m_massmatrix = ImpulseMatrix(m_bodies[0].invMass(), m_bodies[0].invWorldInertia(), m_rpos[0],
- m_bodies[1].invMass(), m_bodies[1].invWorldInertia(), m_rpos[1]);
- if (m_split > 0)
- {
- m_sdrift = m_massmatrix * (m_drift * m_split);
- m_drift *= 1 - m_split;
- }
- m_drift /= (btScalar)iterations;
-}
-
-//
-void btSoftBody::LJoint::Solve(btScalar dt, btScalar sor)
-{
- const btVector3 va = m_bodies[0].velocity(m_rpos[0]);
- const btVector3 vb = m_bodies[1].velocity(m_rpos[1]);
- const btVector3 vr = va - vb;
- btSoftBody::Impulse impulse;
- impulse.m_asVelocity = 1;
- impulse.m_velocity = m_massmatrix * (m_drift + vr * m_cfm) * sor;
- m_bodies[0].applyImpulse(-impulse, m_rpos[0]);
- m_bodies[1].applyImpulse(impulse, m_rpos[1]);
-}
-
-//
-void btSoftBody::LJoint::Terminate(btScalar dt)
-{
- if (m_split > 0)
- {
- m_bodies[0].applyDImpulse(-m_sdrift, m_rpos[0]);
- m_bodies[1].applyDImpulse(m_sdrift, m_rpos[1]);
- }
-}
-
-//
-void btSoftBody::AJoint::Prepare(btScalar dt, int iterations)
-{
- static const btScalar maxdrift = SIMD_PI / 16;
- m_icontrol->Prepare(this);
- Joint::Prepare(dt, iterations);
- m_axis[0] = m_bodies[0].xform().getBasis() * m_refs[0];
- m_axis[1] = m_bodies[1].xform().getBasis() * m_refs[1];
- m_drift = NormalizeAny(btCross(m_axis[1], m_axis[0]));
- m_drift *= btMin(maxdrift, btAcos(Clamp<btScalar>(btDot(m_axis[0], m_axis[1]), -1, +1)));
- m_drift *= m_erp / dt;
- m_massmatrix = AngularImpulseMatrix(m_bodies[0].invWorldInertia(), m_bodies[1].invWorldInertia());
- if (m_split > 0)
- {
- m_sdrift = m_massmatrix * (m_drift * m_split);
- m_drift *= 1 - m_split;
- }
- m_drift /= (btScalar)iterations;
-}
-
-//
-void btSoftBody::AJoint::Solve(btScalar dt, btScalar sor)
-{
- const btVector3 va = m_bodies[0].angularVelocity();
- const btVector3 vb = m_bodies[1].angularVelocity();
- const btVector3 vr = va - vb;
- const btScalar sp = btDot(vr, m_axis[0]);
- const btVector3 vc = vr - m_axis[0] * m_icontrol->Speed(this, sp);
- btSoftBody::Impulse impulse;
- impulse.m_asVelocity = 1;
- impulse.m_velocity = m_massmatrix * (m_drift + vc * m_cfm) * sor;
- m_bodies[0].applyAImpulse(-impulse);
- m_bodies[1].applyAImpulse(impulse);
-}
-
-//
-void btSoftBody::AJoint::Terminate(btScalar dt)
-{
- if (m_split > 0)
- {
- m_bodies[0].applyDAImpulse(-m_sdrift);
- m_bodies[1].applyDAImpulse(m_sdrift);
- }
-}
-
-//
-void btSoftBody::CJoint::Prepare(btScalar dt, int iterations)
-{
- Joint::Prepare(dt, iterations);
- const bool dodrift = (m_life == 0);
- m_delete = (++m_life) > m_maxlife;
- if (dodrift)
- {
- m_drift = m_drift * m_erp / dt;
- if (m_split > 0)
- {
- m_sdrift = m_massmatrix * (m_drift * m_split);
- m_drift *= 1 - m_split;
- }
- m_drift /= (btScalar)iterations;
- }
- else
- {
- m_drift = m_sdrift = btVector3(0, 0, 0);
- }
-}
-
-//
-void btSoftBody::CJoint::Solve(btScalar dt, btScalar sor)
-{
- const btVector3 va = m_bodies[0].velocity(m_rpos[0]);
- const btVector3 vb = m_bodies[1].velocity(m_rpos[1]);
- const btVector3 vrel = va - vb;
- const btScalar rvac = btDot(vrel, m_normal);
- btSoftBody::Impulse impulse;
- impulse.m_asVelocity = 1;
- impulse.m_velocity = m_drift;
- if (rvac < 0)
- {
- const btVector3 iv = m_normal * rvac;
- const btVector3 fv = vrel - iv;
- impulse.m_velocity += iv + fv * m_friction;
- }
- impulse.m_velocity = m_massmatrix * impulse.m_velocity * sor;
-
- if (m_bodies[0].m_soft == m_bodies[1].m_soft)
- {
- if ((impulse.m_velocity.getX() == impulse.m_velocity.getX()) && (impulse.m_velocity.getY() == impulse.m_velocity.getY()) &&
- (impulse.m_velocity.getZ() == impulse.m_velocity.getZ()))
- {
- if (impulse.m_asVelocity)
- {
- if (impulse.m_velocity.length() < m_bodies[0].m_soft->m_maxSelfCollisionImpulse)
- {
- }
- else
- {
- m_bodies[0].applyImpulse(-impulse * m_bodies[0].m_soft->m_selfCollisionImpulseFactor, m_rpos[0]);
- m_bodies[1].applyImpulse(impulse * m_bodies[0].m_soft->m_selfCollisionImpulseFactor, m_rpos[1]);
- }
- }
- }
- }
- else
- {
- m_bodies[0].applyImpulse(-impulse, m_rpos[0]);
- m_bodies[1].applyImpulse(impulse, m_rpos[1]);
- }
-}
-
-//
-void btSoftBody::CJoint::Terminate(btScalar dt)
-{
- if (m_split > 0)
- {
- m_bodies[0].applyDImpulse(-m_sdrift, m_rpos[0]);
- m_bodies[1].applyDImpulse(m_sdrift, m_rpos[1]);
- }
-}
-
-//
-void btSoftBody::applyForces()
-{
- BT_PROFILE("SoftBody applyForces");
- // const btScalar dt = m_sst.sdt;
- const btScalar kLF = m_cfg.kLF;
- const btScalar kDG = m_cfg.kDG;
- const btScalar kPR = m_cfg.kPR;
- const btScalar kVC = m_cfg.kVC;
- const bool as_lift = kLF > 0;
- const bool as_drag = kDG > 0;
- const bool as_pressure = kPR != 0;
- const bool as_volume = kVC > 0;
- const bool as_aero = as_lift ||
- as_drag;
- //const bool as_vaero = as_aero &&
- // (m_cfg.aeromodel < btSoftBody::eAeroModel::F_TwoSided);
- //const bool as_faero = as_aero &&
- // (m_cfg.aeromodel >= btSoftBody::eAeroModel::F_TwoSided);
- const bool use_medium = as_aero;
- const bool use_volume = as_pressure ||
- as_volume;
- btScalar volume = 0;
- btScalar ivolumetp = 0;
- btScalar dvolumetv = 0;
- btSoftBody::sMedium medium;
- if (use_volume)
- {
- volume = getVolume();
- ivolumetp = 1 / btFabs(volume) * kPR;
- dvolumetv = (m_pose.m_volume - volume) * kVC;
- }
- /* Per vertex forces */
- int i, ni;
-
- for (i = 0, ni = m_nodes.size(); i < ni; ++i)
- {
- btSoftBody::Node& n = m_nodes[i];
- if (n.m_im > 0)
- {
- if (use_medium)
- {
- /* Aerodynamics */
- addAeroForceToNode(m_windVelocity, i);
- }
- /* Pressure */
- if (as_pressure)
- {
- n.m_f += n.m_n * (n.m_area * ivolumetp);
- }
- /* Volume */
- if (as_volume)
- {
- n.m_f += n.m_n * (n.m_area * dvolumetv);
- }
- }
- }
-
- /* Per face forces */
- for (i = 0, ni = m_faces.size(); i < ni; ++i)
- {
- // btSoftBody::Face& f=m_faces[i];
-
- /* Aerodynamics */
- addAeroForceToFace(m_windVelocity, i);
- }
-}
-
-//
-void btSoftBody::setMaxStress(btScalar maxStress)
-{
- m_cfg.m_maxStress = maxStress;
-}
-
-//
-void btSoftBody::interpolateRenderMesh()
-{
- if (m_z.size() > 0)
- {
- for (int i = 0; i < m_renderNodes.size(); ++i)
- {
- const Node* p0 = m_renderNodesParents[i][0];
- const Node* p1 = m_renderNodesParents[i][1];
- const Node* p2 = m_renderNodesParents[i][2];
- btVector3 normal = btCross(p1->m_x - p0->m_x, p2->m_x - p0->m_x);
- btVector3 unit_normal = normal.normalized();
- RenderNode& n = m_renderNodes[i];
- n.m_x.setZero();
- for (int j = 0; j < 3; ++j)
- {
- n.m_x += m_renderNodesParents[i][j]->m_x * m_renderNodesInterpolationWeights[i][j];
- }
- n.m_x += m_z[i] * unit_normal;
- }
- }
- else
- {
- for (int i = 0; i < m_renderNodes.size(); ++i)
- {
- RenderNode& n = m_renderNodes[i];
- n.m_x.setZero();
- for (int j = 0; j < 4; ++j)
- {
- if (m_renderNodesParents[i].size())
- {
- n.m_x += m_renderNodesParents[i][j]->m_x * m_renderNodesInterpolationWeights[i][j];
- }
- }
- }
- }
-}
-
-void btSoftBody::setCollisionQuadrature(int N)
-{
- for (int i = 0; i <= N; ++i)
- {
- for (int j = 0; i + j <= N; ++j)
- {
- m_quads.push_back(btVector3(btScalar(i) / btScalar(N), btScalar(j) / btScalar(N), btScalar(N - i - j) / btScalar(N)));
- }
- }
-}
-
-//
-void btSoftBody::PSolve_Anchors(btSoftBody* psb, btScalar kst, btScalar ti)
-{
- BT_PROFILE("PSolve_Anchors");
- const btScalar kAHR = psb->m_cfg.kAHR * kst;
- const btScalar dt = psb->m_sst.sdt;
- for (int i = 0, ni = psb->m_anchors.size(); i < ni; ++i)
- {
- const Anchor& a = psb->m_anchors[i];
- const btTransform& t = a.m_body->getWorldTransform();
- Node& n = *a.m_node;
- const btVector3 wa = t * a.m_local;
- const btVector3 va = a.m_body->getVelocityInLocalPoint(a.m_c1) * dt;
- const btVector3 vb = n.m_x - n.m_q;
- const btVector3 vr = (va - vb) + (wa - n.m_x) * kAHR;
- const btVector3 impulse = a.m_c0 * vr * a.m_influence;
- n.m_x += impulse * a.m_c2;
- a.m_body->applyImpulse(-impulse, a.m_c1);
- }
-}
-
-//
-void btSoftBody::PSolve_RContacts(btSoftBody* psb, btScalar kst, btScalar ti)
-{
- BT_PROFILE("PSolve_RContacts");
- const btScalar dt = psb->m_sst.sdt;
- const btScalar mrg = psb->getCollisionShape()->getMargin();
- btMultiBodyJacobianData jacobianData;
- for (int i = 0, ni = psb->m_rcontacts.size(); i < ni; ++i)
- {
- const RContact& c = psb->m_rcontacts[i];
- const sCti& cti = c.m_cti;
- if (cti.m_colObj->hasContactResponse())
- {
- btVector3 va(0, 0, 0);
- btRigidBody* rigidCol = 0;
- btMultiBodyLinkCollider* multibodyLinkCol = 0;
- btScalar* deltaV;
-
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- rigidCol = (btRigidBody*)btRigidBody::upcast(cti.m_colObj);
- va = rigidCol ? rigidCol->getVelocityInLocalPoint(c.m_c1) * dt : btVector3(0, 0, 0);
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- jacobianData.m_jacobians.resize(ndof);
- jacobianData.m_deltaVelocitiesUnitImpulse.resize(ndof);
- btScalar* jac = &jacobianData.m_jacobians[0];
-
- multibodyLinkCol->m_multiBody->fillContactJacobianMultiDof(multibodyLinkCol->m_link, c.m_node->m_x, cti.m_normal, jac, jacobianData.scratch_r, jacobianData.scratch_v, jacobianData.scratch_m);
- deltaV = &jacobianData.m_deltaVelocitiesUnitImpulse[0];
- multibodyLinkCol->m_multiBody->calcAccelerationDeltasMultiDof(&jacobianData.m_jacobians[0], deltaV, jacobianData.scratch_r, jacobianData.scratch_v);
-
- btScalar vel = 0.0;
- for (int j = 0; j < ndof; ++j)
- {
- vel += multibodyLinkCol->m_multiBody->getVelocityVector()[j] * jac[j];
- }
- va = cti.m_normal * vel * dt;
- }
- }
-
- const btVector3 vb = c.m_node->m_x - c.m_node->m_q;
- const btVector3 vr = vb - va;
- const btScalar dn = btDot(vr, cti.m_normal);
- if (dn <= SIMD_EPSILON)
- {
- const btScalar dp = btMin((btDot(c.m_node->m_x, cti.m_normal) + cti.m_offset), mrg);
- const btVector3 fv = vr - (cti.m_normal * dn);
- // c0 is the impulse matrix, c3 is 1 - the friction coefficient or 0, c4 is the contact hardness coefficient
- const btVector3 impulse = c.m_c0 * ((vr - (fv * c.m_c3) + (cti.m_normal * (dp * c.m_c4))) * kst);
- c.m_node->m_x -= impulse * c.m_c2;
-
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- if (rigidCol)
- rigidCol->applyImpulse(impulse, c.m_c1);
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- if (multibodyLinkCol)
- {
- double multiplier = 0.5;
- multibodyLinkCol->m_multiBody->applyDeltaVeeMultiDof(deltaV, -impulse.length() * multiplier);
- }
- }
- }
- }
- }
-}
-
-//
-void btSoftBody::PSolve_SContacts(btSoftBody* psb, btScalar, btScalar ti)
-{
- BT_PROFILE("PSolve_SContacts");
-
- for (int i = 0, ni = psb->m_scontacts.size(); i < ni; ++i)
- {
- const SContact& c = psb->m_scontacts[i];
- const btVector3& nr = c.m_normal;
- Node& n = *c.m_node;
- Face& f = *c.m_face;
- const btVector3 p = BaryEval(f.m_n[0]->m_x,
- f.m_n[1]->m_x,
- f.m_n[2]->m_x,
- c.m_weights);
- const btVector3 q = BaryEval(f.m_n[0]->m_q,
- f.m_n[1]->m_q,
- f.m_n[2]->m_q,
- c.m_weights);
- const btVector3 vr = (n.m_x - n.m_q) - (p - q);
- btVector3 corr(0, 0, 0);
- btScalar dot = btDot(vr, nr);
- if (dot < 0)
- {
- const btScalar j = c.m_margin - (btDot(nr, n.m_x) - btDot(nr, p));
- corr += c.m_normal * j;
- }
- corr -= ProjectOnPlane(vr, nr) * c.m_friction;
- n.m_x += corr * c.m_cfm[0];
- f.m_n[0]->m_x -= corr * (c.m_cfm[1] * c.m_weights.x());
- f.m_n[1]->m_x -= corr * (c.m_cfm[1] * c.m_weights.y());
- f.m_n[2]->m_x -= corr * (c.m_cfm[1] * c.m_weights.z());
- }
-}
-
-//
-void btSoftBody::PSolve_Links(btSoftBody* psb, btScalar kst, btScalar ti)
-{
- BT_PROFILE("PSolve_Links");
- for (int i = 0, ni = psb->m_links.size(); i < ni; ++i)
- {
- Link& l = psb->m_links[i];
- if (l.m_c0 > 0)
- {
- Node& a = *l.m_n[0];
- Node& b = *l.m_n[1];
- const btVector3 del = b.m_x - a.m_x;
- const btScalar len = del.length2();
- if (l.m_c1 + len > SIMD_EPSILON)
- {
- const btScalar k = ((l.m_c1 - len) / (l.m_c0 * (l.m_c1 + len))) * kst;
- a.m_x -= del * (k * a.m_im);
- b.m_x += del * (k * b.m_im);
- }
- }
- }
-}
-
-//
-void btSoftBody::VSolve_Links(btSoftBody* psb, btScalar kst)
-{
- BT_PROFILE("VSolve_Links");
- for (int i = 0, ni = psb->m_links.size(); i < ni; ++i)
- {
- Link& l = psb->m_links[i];
- Node** n = l.m_n;
- const btScalar j = -btDot(l.m_c3, n[0]->m_v - n[1]->m_v) * l.m_c2 * kst;
- n[0]->m_v += l.m_c3 * (j * n[0]->m_im);
- n[1]->m_v -= l.m_c3 * (j * n[1]->m_im);
- }
-}
-
-//
-btSoftBody::psolver_t btSoftBody::getSolver(ePSolver::_ solver)
-{
- switch (solver)
- {
- case ePSolver::Anchors:
- return (&btSoftBody::PSolve_Anchors);
- case ePSolver::Linear:
- return (&btSoftBody::PSolve_Links);
- case ePSolver::RContacts:
- return (&btSoftBody::PSolve_RContacts);
- case ePSolver::SContacts:
- return (&btSoftBody::PSolve_SContacts);
- default:
- {
- }
- }
- return (0);
-}
-
-//
-btSoftBody::vsolver_t btSoftBody::getSolver(eVSolver::_ solver)
-{
- switch (solver)
- {
- case eVSolver::Linear:
- return (&btSoftBody::VSolve_Links);
- default:
- {
- }
- }
- return (0);
-}
-
-void btSoftBody::setSelfCollision(bool useSelfCollision)
-{
- m_useSelfCollision = useSelfCollision;
-}
-
-bool btSoftBody::useSelfCollision()
-{
- return m_useSelfCollision;
-}
-
-//
-void btSoftBody::defaultCollisionHandler(const btCollisionObjectWrapper* pcoWrap)
-{
- switch (m_cfg.collisions & fCollision::RVSmask)
- {
- case fCollision::SDF_RS:
- {
- btSoftColliders::CollideSDF_RS docollide;
- btRigidBody* prb1 = (btRigidBody*)btRigidBody::upcast(pcoWrap->getCollisionObject());
- btTransform wtr = pcoWrap->getWorldTransform();
-
- const btTransform ctr = pcoWrap->getWorldTransform();
- const btScalar timemargin = (wtr.getOrigin() - ctr.getOrigin()).length();
- const btScalar basemargin = getCollisionShape()->getMargin();
- btVector3 mins;
- btVector3 maxs;
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- volume;
- pcoWrap->getCollisionShape()->getAabb(pcoWrap->getWorldTransform(),
- mins,
- maxs);
- volume = btDbvtVolume::FromMM(mins, maxs);
- volume.Expand(btVector3(basemargin, basemargin, basemargin));
- docollide.psb = this;
- docollide.m_colObj1Wrap = pcoWrap;
- docollide.m_rigidBody = prb1;
-
- docollide.dynmargin = basemargin + timemargin;
- docollide.stamargin = basemargin;
- m_ndbvt.collideTV(m_ndbvt.m_root, volume, docollide);
- }
- break;
- case fCollision::CL_RS:
- {
- btSoftColliders::CollideCL_RS collider;
- collider.ProcessColObj(this, pcoWrap);
- }
- break;
- case fCollision::SDF_RD:
- {
- btRigidBody* prb1 = (btRigidBody*)btRigidBody::upcast(pcoWrap->getCollisionObject());
- if (pcoWrap->getCollisionObject()->isActive() || this->isActive())
- {
- const btTransform wtr = pcoWrap->getWorldTransform();
- const btScalar timemargin = 0;
- const btScalar basemargin = getCollisionShape()->getMargin();
- btVector3 mins;
- btVector3 maxs;
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- volume;
- pcoWrap->getCollisionShape()->getAabb(wtr,
- mins,
- maxs);
- volume = btDbvtVolume::FromMM(mins, maxs);
- volume.Expand(btVector3(basemargin, basemargin, basemargin));
- if (m_cfg.collisions & fCollision::SDF_RDN)
- {
- btSoftColliders::CollideSDF_RD docollideNode;
- docollideNode.psb = this;
- docollideNode.m_colObj1Wrap = pcoWrap;
- docollideNode.m_rigidBody = prb1;
- docollideNode.dynmargin = basemargin + timemargin;
- docollideNode.stamargin = basemargin;
- m_ndbvt.collideTV(m_ndbvt.m_root, volume, docollideNode);
- }
-
- if (((pcoWrap->getCollisionObject()->getInternalType() == CO_RIGID_BODY) && (m_cfg.collisions & fCollision::SDF_RDF)) || ((pcoWrap->getCollisionObject()->getInternalType() == CO_FEATHERSTONE_LINK) && (m_cfg.collisions & fCollision::SDF_MDF)))
- {
- btSoftColliders::CollideSDF_RDF docollideFace;
- docollideFace.psb = this;
- docollideFace.m_colObj1Wrap = pcoWrap;
- docollideFace.m_rigidBody = prb1;
- docollideFace.dynmargin = basemargin + timemargin;
- docollideFace.stamargin = basemargin;
- m_fdbvt.collideTV(m_fdbvt.m_root, volume, docollideFace);
- }
- }
- }
- break;
- }
-}
-
-//
-void btSoftBody::defaultCollisionHandler(btSoftBody* psb)
-{
- BT_PROFILE("Deformable Collision");
- const int cf = m_cfg.collisions & psb->m_cfg.collisions;
- switch (cf & fCollision::SVSmask)
- {
- case fCollision::CL_SS:
- {
- //support self-collision if CL_SELF flag set
- if (this != psb || psb->m_cfg.collisions & fCollision::CL_SELF)
- {
- btSoftColliders::CollideCL_SS docollide;
- docollide.ProcessSoftSoft(this, psb);
- }
- }
- break;
- case fCollision::VF_SS:
- {
- //only self-collision for Cluster, not Vertex-Face yet
- if (this != psb)
- {
- btSoftColliders::CollideVF_SS docollide;
- /* common */
- docollide.mrg = getCollisionShape()->getMargin() +
- psb->getCollisionShape()->getMargin();
- /* psb0 nodes vs psb1 faces */
- docollide.psb[0] = this;
- docollide.psb[1] = psb;
- docollide.psb[0]->m_ndbvt.collideTT(docollide.psb[0]->m_ndbvt.m_root,
- docollide.psb[1]->m_fdbvt.m_root,
- docollide);
- /* psb1 nodes vs psb0 faces */
- docollide.psb[0] = psb;
- docollide.psb[1] = this;
- docollide.psb[0]->m_ndbvt.collideTT(docollide.psb[0]->m_ndbvt.m_root,
- docollide.psb[1]->m_fdbvt.m_root,
- docollide);
- }
- }
- break;
- case fCollision::VF_DD:
- {
- if (!psb->m_softSoftCollision)
- return;
- if (psb->isActive() || this->isActive())
- {
- if (this != psb)
- {
- btSoftColliders::CollideVF_DD docollide;
- /* common */
- docollide.mrg = getCollisionShape()->getMargin() +
- psb->getCollisionShape()->getMargin();
- /* psb0 nodes vs psb1 faces */
- if (psb->m_tetras.size() > 0)
- docollide.useFaceNormal = true;
- else
- docollide.useFaceNormal = false;
- docollide.psb[0] = this;
- docollide.psb[1] = psb;
- docollide.psb[0]->m_ndbvt.collideTT(docollide.psb[0]->m_ndbvt.m_root,
- docollide.psb[1]->m_fdbvt.m_root,
- docollide);
-
- /* psb1 nodes vs psb0 faces */
- if (this->m_tetras.size() > 0)
- docollide.useFaceNormal = true;
- else
- docollide.useFaceNormal = false;
- docollide.psb[0] = psb;
- docollide.psb[1] = this;
- docollide.psb[0]->m_ndbvt.collideTT(docollide.psb[0]->m_ndbvt.m_root,
- docollide.psb[1]->m_fdbvt.m_root,
- docollide);
- }
- else
- {
- if (psb->useSelfCollision())
- {
- btSoftColliders::CollideFF_DD docollide;
- docollide.mrg = 2 * getCollisionShape()->getMargin();
- docollide.psb[0] = this;
- docollide.psb[1] = psb;
- if (this->m_tetras.size() > 0)
- docollide.useFaceNormal = true;
- else
- docollide.useFaceNormal = false;
- /* psb0 faces vs psb0 faces */
- calculateNormalCone(this->m_fdbvnt);
- this->m_fdbvt.selfCollideT(m_fdbvnt, docollide);
- }
- }
- }
- }
- break;
- default:
- {
- }
- }
-}
-
-void btSoftBody::geometricCollisionHandler(btSoftBody* psb)
-{
- if (psb->isActive() || this->isActive())
- {
- if (this != psb)
- {
- btSoftColliders::CollideCCD docollide;
- /* common */
- docollide.mrg = SAFE_EPSILON; // for rounding error instead of actual margin
- docollide.dt = psb->m_sst.sdt;
- /* psb0 nodes vs psb1 faces */
- if (psb->m_tetras.size() > 0)
- docollide.useFaceNormal = true;
- else
- docollide.useFaceNormal = false;
- docollide.psb[0] = this;
- docollide.psb[1] = psb;
- docollide.psb[0]->m_ndbvt.collideTT(docollide.psb[0]->m_ndbvt.m_root,
- docollide.psb[1]->m_fdbvt.m_root,
- docollide);
- /* psb1 nodes vs psb0 faces */
- if (this->m_tetras.size() > 0)
- docollide.useFaceNormal = true;
- else
- docollide.useFaceNormal = false;
- docollide.psb[0] = psb;
- docollide.psb[1] = this;
- docollide.psb[0]->m_ndbvt.collideTT(docollide.psb[0]->m_ndbvt.m_root,
- docollide.psb[1]->m_fdbvt.m_root,
- docollide);
- }
- else
- {
- if (psb->useSelfCollision())
- {
- btSoftColliders::CollideCCD docollide;
- docollide.mrg = SAFE_EPSILON;
- docollide.psb[0] = this;
- docollide.psb[1] = psb;
- docollide.dt = psb->m_sst.sdt;
- if (this->m_tetras.size() > 0)
- docollide.useFaceNormal = true;
- else
- docollide.useFaceNormal = false;
- /* psb0 faces vs psb0 faces */
- calculateNormalCone(this->m_fdbvnt); // should compute this outside of this scope
- this->m_fdbvt.selfCollideT(m_fdbvnt, docollide);
- }
- }
- }
-}
-
-void btSoftBody::setWindVelocity(const btVector3& velocity)
-{
- m_windVelocity = velocity;
-}
-
-const btVector3& btSoftBody::getWindVelocity()
-{
- return m_windVelocity;
-}
-
-int btSoftBody::calculateSerializeBufferSize() const
-{
- int sz = sizeof(btSoftBodyData);
- return sz;
-}
-
-///fills the dataBuffer and returns the struct name (and 0 on failure)
-const char* btSoftBody::serialize(void* dataBuffer, class btSerializer* serializer) const
-{
- btSoftBodyData* sbd = (btSoftBodyData*)dataBuffer;
-
- btCollisionObject::serialize(&sbd->m_collisionObjectData, serializer);
-
- btHashMap<btHashPtr, int> m_nodeIndexMap;
-
- sbd->m_numMaterials = m_materials.size();
- sbd->m_materials = sbd->m_numMaterials ? (SoftBodyMaterialData**)serializer->getUniquePointer((void*)&m_materials) : 0;
-
- if (sbd->m_materials)
- {
- int sz = sizeof(SoftBodyMaterialData*);
- int numElem = sbd->m_numMaterials;
- btChunk* chunk = serializer->allocate(sz, numElem);
- //SoftBodyMaterialData** memPtr = chunk->m_oldPtr;
- SoftBodyMaterialData** memPtr = (SoftBodyMaterialData**)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- btSoftBody::Material* mat = m_materials[i];
- *memPtr = mat ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*)mat) : 0;
- if (!serializer->findPointer(mat))
- {
- //serialize it here
- btChunk* chunk = serializer->allocate(sizeof(SoftBodyMaterialData), 1);
- SoftBodyMaterialData* memPtr = (SoftBodyMaterialData*)chunk->m_oldPtr;
- memPtr->m_flags = mat->m_flags;
- memPtr->m_angularStiffness = mat->m_kAST;
- memPtr->m_linearStiffness = mat->m_kLST;
- memPtr->m_volumeStiffness = mat->m_kVST;
- serializer->finalizeChunk(chunk, "SoftBodyMaterialData", BT_SBMATERIAL_CODE, mat);
- }
- }
- serializer->finalizeChunk(chunk, "SoftBodyMaterialData", BT_ARRAY_CODE, (void*)&m_materials);
- }
-
- sbd->m_numNodes = m_nodes.size();
- sbd->m_nodes = sbd->m_numNodes ? (SoftBodyNodeData*)serializer->getUniquePointer((void*)&m_nodes) : 0;
- if (sbd->m_nodes)
- {
- int sz = sizeof(SoftBodyNodeData);
- int numElem = sbd->m_numNodes;
- btChunk* chunk = serializer->allocate(sz, numElem);
- SoftBodyNodeData* memPtr = (SoftBodyNodeData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_nodes[i].m_f.serializeFloat(memPtr->m_accumulatedForce);
- memPtr->m_area = m_nodes[i].m_area;
- memPtr->m_attach = m_nodes[i].m_battach;
- memPtr->m_inverseMass = m_nodes[i].m_im;
- memPtr->m_material = m_nodes[i].m_material ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*)m_nodes[i].m_material) : 0;
- m_nodes[i].m_n.serializeFloat(memPtr->m_normal);
- m_nodes[i].m_x.serializeFloat(memPtr->m_position);
- m_nodes[i].m_q.serializeFloat(memPtr->m_previousPosition);
- m_nodes[i].m_v.serializeFloat(memPtr->m_velocity);
- m_nodeIndexMap.insert(&m_nodes[i], i);
- }
- serializer->finalizeChunk(chunk, "SoftBodyNodeData", BT_SBNODE_CODE, (void*)&m_nodes);
- }
-
- sbd->m_numLinks = m_links.size();
- sbd->m_links = sbd->m_numLinks ? (SoftBodyLinkData*)serializer->getUniquePointer((void*)&m_links[0]) : 0;
- if (sbd->m_links)
- {
- int sz = sizeof(SoftBodyLinkData);
- int numElem = sbd->m_numLinks;
- btChunk* chunk = serializer->allocate(sz, numElem);
- SoftBodyLinkData* memPtr = (SoftBodyLinkData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_bbending = m_links[i].m_bbending;
- memPtr->m_material = m_links[i].m_material ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*)m_links[i].m_material) : 0;
- memPtr->m_nodeIndices[0] = m_links[i].m_n[0] ? m_links[i].m_n[0] - &m_nodes[0] : -1;
- memPtr->m_nodeIndices[1] = m_links[i].m_n[1] ? m_links[i].m_n[1] - &m_nodes[0] : -1;
- btAssert(memPtr->m_nodeIndices[0] < m_nodes.size());
- btAssert(memPtr->m_nodeIndices[1] < m_nodes.size());
- memPtr->m_restLength = m_links[i].m_rl;
- }
- serializer->finalizeChunk(chunk, "SoftBodyLinkData", BT_ARRAY_CODE, (void*)&m_links[0]);
- }
-
- sbd->m_numFaces = m_faces.size();
- sbd->m_faces = sbd->m_numFaces ? (SoftBodyFaceData*)serializer->getUniquePointer((void*)&m_faces[0]) : 0;
- if (sbd->m_faces)
- {
- int sz = sizeof(SoftBodyFaceData);
- int numElem = sbd->m_numFaces;
- btChunk* chunk = serializer->allocate(sz, numElem);
- SoftBodyFaceData* memPtr = (SoftBodyFaceData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_material = m_faces[i].m_material ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*)m_faces[i].m_material) : 0;
- m_faces[i].m_normal.serializeFloat(memPtr->m_normal);
- for (int j = 0; j < 3; j++)
- {
- memPtr->m_nodeIndices[j] = m_faces[i].m_n[j] ? m_faces[i].m_n[j] - &m_nodes[0] : -1;
- }
- memPtr->m_restArea = m_faces[i].m_ra;
- }
- serializer->finalizeChunk(chunk, "SoftBodyFaceData", BT_ARRAY_CODE, (void*)&m_faces[0]);
- }
-
- sbd->m_numTetrahedra = m_tetras.size();
- sbd->m_tetrahedra = sbd->m_numTetrahedra ? (SoftBodyTetraData*)serializer->getUniquePointer((void*)&m_tetras[0]) : 0;
- if (sbd->m_tetrahedra)
- {
- int sz = sizeof(SoftBodyTetraData);
- int numElem = sbd->m_numTetrahedra;
- btChunk* chunk = serializer->allocate(sz, numElem);
- SoftBodyTetraData* memPtr = (SoftBodyTetraData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- for (int j = 0; j < 4; j++)
- {
- m_tetras[i].m_c0[j].serializeFloat(memPtr->m_c0[j]);
- memPtr->m_nodeIndices[j] = m_tetras[i].m_n[j] ? m_tetras[i].m_n[j] - &m_nodes[0] : -1;
- }
- memPtr->m_c1 = m_tetras[i].m_c1;
- memPtr->m_c2 = m_tetras[i].m_c2;
- memPtr->m_material = m_tetras[i].m_material ? (SoftBodyMaterialData*)serializer->getUniquePointer((void*)m_tetras[i].m_material) : 0;
- memPtr->m_restVolume = m_tetras[i].m_rv;
- }
- serializer->finalizeChunk(chunk, "SoftBodyTetraData", BT_ARRAY_CODE, (void*)&m_tetras[0]);
- }
-
- sbd->m_numAnchors = m_anchors.size();
- sbd->m_anchors = sbd->m_numAnchors ? (SoftRigidAnchorData*)serializer->getUniquePointer((void*)&m_anchors[0]) : 0;
- if (sbd->m_anchors)
- {
- int sz = sizeof(SoftRigidAnchorData);
- int numElem = sbd->m_numAnchors;
- btChunk* chunk = serializer->allocate(sz, numElem);
- SoftRigidAnchorData* memPtr = (SoftRigidAnchorData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_anchors[i].m_c0.serializeFloat(memPtr->m_c0);
- m_anchors[i].m_c1.serializeFloat(memPtr->m_c1);
- memPtr->m_c2 = m_anchors[i].m_c2;
- m_anchors[i].m_local.serializeFloat(memPtr->m_localFrame);
- memPtr->m_nodeIndex = m_anchors[i].m_node ? m_anchors[i].m_node - &m_nodes[0] : -1;
-
- memPtr->m_rigidBody = m_anchors[i].m_body ? (btRigidBodyData*)serializer->getUniquePointer((void*)m_anchors[i].m_body) : 0;
- btAssert(memPtr->m_nodeIndex < m_nodes.size());
- }
- serializer->finalizeChunk(chunk, "SoftRigidAnchorData", BT_ARRAY_CODE, (void*)&m_anchors[0]);
- }
-
- sbd->m_config.m_dynamicFriction = m_cfg.kDF;
- sbd->m_config.m_baumgarte = m_cfg.kVCF;
- sbd->m_config.m_pressure = m_cfg.kPR;
- sbd->m_config.m_aeroModel = this->m_cfg.aeromodel;
- sbd->m_config.m_lift = m_cfg.kLF;
- sbd->m_config.m_drag = m_cfg.kDG;
- sbd->m_config.m_positionIterations = m_cfg.piterations;
- sbd->m_config.m_driftIterations = m_cfg.diterations;
- sbd->m_config.m_clusterIterations = m_cfg.citerations;
- sbd->m_config.m_velocityIterations = m_cfg.viterations;
- sbd->m_config.m_maxVolume = m_cfg.maxvolume;
- sbd->m_config.m_damping = m_cfg.kDP;
- sbd->m_config.m_poseMatch = m_cfg.kMT;
- sbd->m_config.m_collisionFlags = m_cfg.collisions;
- sbd->m_config.m_volume = m_cfg.kVC;
- sbd->m_config.m_rigidContactHardness = m_cfg.kCHR;
- sbd->m_config.m_kineticContactHardness = m_cfg.kKHR;
- sbd->m_config.m_softContactHardness = m_cfg.kSHR;
- sbd->m_config.m_anchorHardness = m_cfg.kAHR;
- sbd->m_config.m_timeScale = m_cfg.timescale;
- sbd->m_config.m_maxVolume = m_cfg.maxvolume;
- sbd->m_config.m_softRigidClusterHardness = m_cfg.kSRHR_CL;
- sbd->m_config.m_softKineticClusterHardness = m_cfg.kSKHR_CL;
- sbd->m_config.m_softSoftClusterHardness = m_cfg.kSSHR_CL;
- sbd->m_config.m_softRigidClusterImpulseSplit = m_cfg.kSR_SPLT_CL;
- sbd->m_config.m_softKineticClusterImpulseSplit = m_cfg.kSK_SPLT_CL;
- sbd->m_config.m_softSoftClusterImpulseSplit = m_cfg.kSS_SPLT_CL;
-
- //pose for shape matching
- {
- sbd->m_pose = (SoftBodyPoseData*)serializer->getUniquePointer((void*)&m_pose);
-
- int sz = sizeof(SoftBodyPoseData);
- btChunk* chunk = serializer->allocate(sz, 1);
- SoftBodyPoseData* memPtr = (SoftBodyPoseData*)chunk->m_oldPtr;
-
- m_pose.m_aqq.serializeFloat(memPtr->m_aqq);
- memPtr->m_bframe = m_pose.m_bframe;
- memPtr->m_bvolume = m_pose.m_bvolume;
- m_pose.m_com.serializeFloat(memPtr->m_com);
-
- memPtr->m_numPositions = m_pose.m_pos.size();
- memPtr->m_positions = memPtr->m_numPositions ? (btVector3FloatData*)serializer->getUniquePointer((void*)&m_pose.m_pos[0]) : 0;
- if (memPtr->m_numPositions)
- {
- int numElem = memPtr->m_numPositions;
- int sz = sizeof(btVector3Data);
- btChunk* chunk = serializer->allocate(sz, numElem);
- btVector3FloatData* memPtr = (btVector3FloatData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- m_pose.m_pos[i].serializeFloat(*memPtr);
- }
- serializer->finalizeChunk(chunk, "btVector3FloatData", BT_ARRAY_CODE, (void*)&m_pose.m_pos[0]);
- }
- memPtr->m_restVolume = m_pose.m_volume;
- m_pose.m_rot.serializeFloat(memPtr->m_rot);
- m_pose.m_scl.serializeFloat(memPtr->m_scale);
-
- memPtr->m_numWeigts = m_pose.m_wgh.size();
- memPtr->m_weights = memPtr->m_numWeigts ? (float*)serializer->getUniquePointer((void*)&m_pose.m_wgh[0]) : 0;
- if (memPtr->m_numWeigts)
- {
- int numElem = memPtr->m_numWeigts;
- int sz = sizeof(float);
- btChunk* chunk = serializer->allocate(sz, numElem);
- float* memPtr = (float*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- *memPtr = m_pose.m_wgh[i];
- }
- serializer->finalizeChunk(chunk, "float", BT_ARRAY_CODE, (void*)&m_pose.m_wgh[0]);
- }
-
- serializer->finalizeChunk(chunk, "SoftBodyPoseData", BT_ARRAY_CODE, (void*)&m_pose);
- }
-
- //clusters for convex-cluster collision detection
-
- sbd->m_numClusters = m_clusters.size();
- sbd->m_clusters = sbd->m_numClusters ? (SoftBodyClusterData*)serializer->getUniquePointer((void*)m_clusters[0]) : 0;
- if (sbd->m_numClusters)
- {
- int numElem = sbd->m_numClusters;
- int sz = sizeof(SoftBodyClusterData);
- btChunk* chunk = serializer->allocate(sz, numElem);
- SoftBodyClusterData* memPtr = (SoftBodyClusterData*)chunk->m_oldPtr;
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_adamping = m_clusters[i]->m_adamping;
- m_clusters[i]->m_av.serializeFloat(memPtr->m_av);
- memPtr->m_clusterIndex = m_clusters[i]->m_clusterIndex;
- memPtr->m_collide = m_clusters[i]->m_collide;
- m_clusters[i]->m_com.serializeFloat(memPtr->m_com);
- memPtr->m_containsAnchor = m_clusters[i]->m_containsAnchor;
- m_clusters[i]->m_dimpulses[0].serializeFloat(memPtr->m_dimpulses[0]);
- m_clusters[i]->m_dimpulses[1].serializeFloat(memPtr->m_dimpulses[1]);
- m_clusters[i]->m_framexform.serializeFloat(memPtr->m_framexform);
- memPtr->m_idmass = m_clusters[i]->m_idmass;
- memPtr->m_imass = m_clusters[i]->m_imass;
- m_clusters[i]->m_invwi.serializeFloat(memPtr->m_invwi);
- memPtr->m_ldamping = m_clusters[i]->m_ldamping;
- m_clusters[i]->m_locii.serializeFloat(memPtr->m_locii);
- m_clusters[i]->m_lv.serializeFloat(memPtr->m_lv);
- memPtr->m_matching = m_clusters[i]->m_matching;
- memPtr->m_maxSelfCollisionImpulse = m_clusters[i]->m_maxSelfCollisionImpulse;
- memPtr->m_ndamping = m_clusters[i]->m_ndamping;
- memPtr->m_ldamping = m_clusters[i]->m_ldamping;
- memPtr->m_adamping = m_clusters[i]->m_adamping;
- memPtr->m_selfCollisionImpulseFactor = m_clusters[i]->m_selfCollisionImpulseFactor;
-
- memPtr->m_numFrameRefs = m_clusters[i]->m_framerefs.size();
- memPtr->m_numMasses = m_clusters[i]->m_masses.size();
- memPtr->m_numNodes = m_clusters[i]->m_nodes.size();
-
- memPtr->m_nvimpulses = m_clusters[i]->m_nvimpulses;
- m_clusters[i]->m_vimpulses[0].serializeFloat(memPtr->m_vimpulses[0]);
- m_clusters[i]->m_vimpulses[1].serializeFloat(memPtr->m_vimpulses[1]);
- memPtr->m_ndimpulses = m_clusters[i]->m_ndimpulses;
-
- memPtr->m_framerefs = memPtr->m_numFrameRefs ? (btVector3FloatData*)serializer->getUniquePointer((void*)&m_clusters[i]->m_framerefs[0]) : 0;
- if (memPtr->m_framerefs)
- {
- int numElem = memPtr->m_numFrameRefs;
- int sz = sizeof(btVector3FloatData);
- btChunk* chunk = serializer->allocate(sz, numElem);
- btVector3FloatData* memPtr = (btVector3FloatData*)chunk->m_oldPtr;
- for (int j = 0; j < numElem; j++, memPtr++)
- {
- m_clusters[i]->m_framerefs[j].serializeFloat(*memPtr);
- }
- serializer->finalizeChunk(chunk, "btVector3FloatData", BT_ARRAY_CODE, (void*)&m_clusters[i]->m_framerefs[0]);
- }
-
- memPtr->m_masses = memPtr->m_numMasses ? (float*)serializer->getUniquePointer((void*)&m_clusters[i]->m_masses[0]) : 0;
- if (memPtr->m_masses)
- {
- int numElem = memPtr->m_numMasses;
- int sz = sizeof(float);
- btChunk* chunk = serializer->allocate(sz, numElem);
- float* memPtr = (float*)chunk->m_oldPtr;
- for (int j = 0; j < numElem; j++, memPtr++)
- {
- *memPtr = m_clusters[i]->m_masses[j];
- }
- serializer->finalizeChunk(chunk, "float", BT_ARRAY_CODE, (void*)&m_clusters[i]->m_masses[0]);
- }
-
- memPtr->m_nodeIndices = memPtr->m_numNodes ? (int*)serializer->getUniquePointer((void*)&m_clusters[i]->m_nodes) : 0;
- if (memPtr->m_nodeIndices)
- {
- int numElem = memPtr->m_numMasses;
- int sz = sizeof(int);
- btChunk* chunk = serializer->allocate(sz, numElem);
- int* memPtr = (int*)chunk->m_oldPtr;
- for (int j = 0; j < numElem; j++, memPtr++)
- {
- int* indexPtr = m_nodeIndexMap.find(m_clusters[i]->m_nodes[j]);
- btAssert(indexPtr);
- *memPtr = *indexPtr;
- }
- serializer->finalizeChunk(chunk, "int", BT_ARRAY_CODE, (void*)&m_clusters[i]->m_nodes);
- }
- }
- serializer->finalizeChunk(chunk, "SoftBodyClusterData", BT_ARRAY_CODE, (void*)m_clusters[0]);
- }
-
- sbd->m_numJoints = m_joints.size();
- sbd->m_joints = m_joints.size() ? (btSoftBodyJointData*)serializer->getUniquePointer((void*)&m_joints[0]) : 0;
-
- if (sbd->m_joints)
- {
- int sz = sizeof(btSoftBodyJointData);
- int numElem = m_joints.size();
- btChunk* chunk = serializer->allocate(sz, numElem);
- btSoftBodyJointData* memPtr = (btSoftBodyJointData*)chunk->m_oldPtr;
-
- for (int i = 0; i < numElem; i++, memPtr++)
- {
- memPtr->m_jointType = (int)m_joints[i]->Type();
- m_joints[i]->m_refs[0].serializeFloat(memPtr->m_refs[0]);
- m_joints[i]->m_refs[1].serializeFloat(memPtr->m_refs[1]);
- memPtr->m_cfm = m_joints[i]->m_cfm;
- memPtr->m_erp = float(m_joints[i]->m_erp);
- memPtr->m_split = float(m_joints[i]->m_split);
- memPtr->m_delete = m_joints[i]->m_delete;
-
- for (int j = 0; j < 4; j++)
- {
- memPtr->m_relPosition[0].m_floats[j] = 0.f;
- memPtr->m_relPosition[1].m_floats[j] = 0.f;
- }
- memPtr->m_bodyA = 0;
- memPtr->m_bodyB = 0;
- if (m_joints[i]->m_bodies[0].m_soft)
- {
- memPtr->m_bodyAtype = BT_JOINT_SOFT_BODY_CLUSTER;
- memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_soft);
- }
- if (m_joints[i]->m_bodies[0].m_collisionObject)
- {
- memPtr->m_bodyAtype = BT_JOINT_COLLISION_OBJECT;
- memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_collisionObject);
- }
- if (m_joints[i]->m_bodies[0].m_rigid)
- {
- memPtr->m_bodyAtype = BT_JOINT_RIGID_BODY;
- memPtr->m_bodyA = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[0].m_rigid);
- }
-
- if (m_joints[i]->m_bodies[1].m_soft)
- {
- memPtr->m_bodyBtype = BT_JOINT_SOFT_BODY_CLUSTER;
- memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_soft);
- }
- if (m_joints[i]->m_bodies[1].m_collisionObject)
- {
- memPtr->m_bodyBtype = BT_JOINT_COLLISION_OBJECT;
- memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_collisionObject);
- }
- if (m_joints[i]->m_bodies[1].m_rigid)
- {
- memPtr->m_bodyBtype = BT_JOINT_RIGID_BODY;
- memPtr->m_bodyB = serializer->getUniquePointer((void*)m_joints[i]->m_bodies[1].m_rigid);
- }
- }
- serializer->finalizeChunk(chunk, "btSoftBodyJointData", BT_ARRAY_CODE, (void*)&m_joints[0]);
- }
-
- return btSoftBodyDataName;
-}
-
-void btSoftBody::updateDeactivation(btScalar timeStep)
-{
- if ((getActivationState() == ISLAND_SLEEPING) || (getActivationState() == DISABLE_DEACTIVATION))
- return;
-
- if (m_maxSpeedSquared < m_sleepingThreshold * m_sleepingThreshold)
- {
- m_deactivationTime += timeStep;
- }
- else
- {
- m_deactivationTime = btScalar(0.);
- setActivationState(0);
- }
-}
-
-void btSoftBody::setZeroVelocity()
-{
- for (int i = 0; i < m_nodes.size(); ++i)
- {
- m_nodes[i].m_v.setZero();
- }
-}
-
-bool btSoftBody::wantsSleeping()
-{
- if (getActivationState() == DISABLE_DEACTIVATION)
- return false;
-
- //disable deactivation
- if (gDisableDeactivation || (gDeactivationTime == btScalar(0.)))
- return false;
-
- if ((getActivationState() == ISLAND_SLEEPING) || (getActivationState() == WANTS_DEACTIVATION))
- return true;
-
- if (m_deactivationTime > gDeactivationTime)
- {
- return true;
- }
- return false;
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBody.h b/thirdparty/bullet/BulletSoftBody/btSoftBody.h
deleted file mode 100644
index dfde8fd1e4..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBody.h
+++ /dev/null
@@ -1,1394 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btSoftBody implementation by Nathanael Presson
-
-#ifndef _BT_SOFT_BODY_H
-#define _BT_SOFT_BODY_H
-
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btVector3.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-
-#include "BulletCollision/CollisionShapes/btConcaveShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-#include "btSparseSDF.h"
-#include "BulletCollision/BroadphaseCollision/btDbvt.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-//#ifdef BT_USE_DOUBLE_PRECISION
-//#define btRigidBodyData btRigidBodyDoubleData
-//#define btRigidBodyDataName "btRigidBodyDoubleData"
-//#else
-#define btSoftBodyData btSoftBodyFloatData
-#define btSoftBodyDataName "btSoftBodyFloatData"
-static const btScalar OVERLAP_REDUCTION_FACTOR = 0.1;
-static unsigned long seed = 243703;
-//#endif //BT_USE_DOUBLE_PRECISION
-
-class btBroadphaseInterface;
-class btDispatcher;
-class btSoftBodySolver;
-
-/* btSoftBodyWorldInfo */
-struct btSoftBodyWorldInfo
-{
- btScalar air_density;
- btScalar water_density;
- btScalar water_offset;
- btScalar m_maxDisplacement;
- btVector3 water_normal;
- btBroadphaseInterface* m_broadphase;
- btDispatcher* m_dispatcher;
- btVector3 m_gravity;
- btSparseSdf<3> m_sparsesdf;
-
- btSoftBodyWorldInfo()
- : air_density((btScalar)1.2),
- water_density(0),
- water_offset(0),
- m_maxDisplacement(1000.f), //avoid soft body from 'exploding' so use some upper threshold of maximum motion that a node can travel per frame
- water_normal(0, 0, 0),
- m_broadphase(0),
- m_dispatcher(0),
- m_gravity(0, -10, 0)
- {
- }
-};
-
-///The btSoftBody is an class to simulate cloth and volumetric soft bodies.
-///There is two-way interaction between btSoftBody and btRigidBody/btCollisionObject.
-class btSoftBody : public btCollisionObject
-{
-public:
- btAlignedObjectArray<const class btCollisionObject*> m_collisionDisabledObjects;
-
- // The solver object that handles this soft body
- btSoftBodySolver* m_softBodySolver;
-
- //
- // Enumerations
- //
-
- ///eAeroModel
- struct eAeroModel
- {
- enum _
- {
- V_Point, ///Vertex normals are oriented toward velocity
- V_TwoSided, ///Vertex normals are flipped to match velocity
- V_TwoSidedLiftDrag, ///Vertex normals are flipped to match velocity and lift and drag forces are applied
- V_OneSided, ///Vertex normals are taken as it is
- F_TwoSided, ///Face normals are flipped to match velocity
- F_TwoSidedLiftDrag, ///Face normals are flipped to match velocity and lift and drag forces are applied
- F_OneSided, ///Face normals are taken as it is
- END
- };
- };
-
- ///eVSolver : velocities solvers
- struct eVSolver
- {
- enum _
- {
- Linear, ///Linear solver
- END
- };
- };
-
- ///ePSolver : positions solvers
- struct ePSolver
- {
- enum _
- {
- Linear, ///Linear solver
- Anchors, ///Anchor solver
- RContacts, ///Rigid contacts solver
- SContacts, ///Soft contacts solver
- END
- };
- };
-
- ///eSolverPresets
- struct eSolverPresets
- {
- enum _
- {
- Positions,
- Velocities,
- Default = Positions,
- END
- };
- };
-
- ///eFeature
- struct eFeature
- {
- enum _
- {
- None,
- Node,
- Link,
- Face,
- Tetra,
- END
- };
- };
-
- typedef btAlignedObjectArray<eVSolver::_> tVSolverArray;
- typedef btAlignedObjectArray<ePSolver::_> tPSolverArray;
-
- //
- // Flags
- //
-
- ///fCollision
- struct fCollision
- {
- enum _
- {
- RVSmask = 0x000f, ///Rigid versus soft mask
- SDF_RS = 0x0001, ///SDF based rigid vs soft
- CL_RS = 0x0002, ///Cluster vs convex rigid vs soft
- SDF_RD = 0x0004, ///rigid vs deformable
-
- SVSmask = 0x00f0, ///Rigid versus soft mask
- VF_SS = 0x0010, ///Vertex vs face soft vs soft handling
- CL_SS = 0x0020, ///Cluster vs cluster soft vs soft handling
- CL_SELF = 0x0040, ///Cluster soft body self collision
- VF_DD = 0x0080, ///Vertex vs face soft vs soft handling
-
- RVDFmask = 0x0f00, /// Rigid versus deformable face mask
- SDF_RDF = 0x0100, /// GJK based Rigid vs. deformable face
- SDF_MDF = 0x0200, /// GJK based Multibody vs. deformable face
- SDF_RDN = 0x0400, /// SDF based Rigid vs. deformable node
- /* presets */
- Default = SDF_RS,
- END
- };
- };
-
- ///fMaterial
- struct fMaterial
- {
- enum _
- {
- DebugDraw = 0x0001, /// Enable debug draw
- /* presets */
- Default = DebugDraw,
- END
- };
- };
-
- //
- // API Types
- //
-
- /* sRayCast */
- struct sRayCast
- {
- btSoftBody* body; /// soft body
- eFeature::_ feature; /// feature type
- int index; /// feature index
- btScalar fraction; /// time of impact fraction (rayorg+(rayto-rayfrom)*fraction)
- };
-
- /* ImplicitFn */
- struct ImplicitFn
- {
- virtual ~ImplicitFn() {}
- virtual btScalar Eval(const btVector3& x) = 0;
- };
-
- //
- // Internal types
- //
-
- typedef btAlignedObjectArray<btScalar> tScalarArray;
- typedef btAlignedObjectArray<btVector3> tVector3Array;
-
- /* sCti is Softbody contact info */
- struct sCti
- {
- const btCollisionObject* m_colObj; /* Rigid body */
- btVector3 m_normal; /* Outward normal */
- btScalar m_offset; /* Offset from origin */
- btVector3 m_bary; /* Barycentric weights for faces */
- };
-
- /* sMedium */
- struct sMedium
- {
- btVector3 m_velocity; /* Velocity */
- btScalar m_pressure; /* Pressure */
- btScalar m_density; /* Density */
- };
-
- /* Base type */
- struct Element
- {
- void* m_tag; // User data
- Element() : m_tag(0) {}
- };
- /* Material */
- struct Material : Element
- {
- btScalar m_kLST; // Linear stiffness coefficient [0,1]
- btScalar m_kAST; // Area/Angular stiffness coefficient [0,1]
- btScalar m_kVST; // Volume stiffness coefficient [0,1]
- int m_flags; // Flags
- };
-
- /* Feature */
- struct Feature : Element
- {
- Material* m_material; // Material
- };
- /* Node */
- struct RenderNode
- {
- btVector3 m_x;
- btVector3 m_uv1;
- btVector3 m_normal;
- };
- struct Node : Feature
- {
- btVector3 m_x; // Position
- btVector3 m_q; // Previous step position/Test position
- btVector3 m_v; // Velocity
- btVector3 m_vn; // Previous step velocity
- btVector3 m_f; // Force accumulator
- btVector3 m_n; // Normal
- btScalar m_im; // 1/mass
- btScalar m_area; // Area
- btDbvtNode* m_leaf; // Leaf data
- int m_constrained; // depth of penetration
- int m_battach : 1; // Attached
- int index;
- btVector3 m_splitv; // velocity associated with split impulse
- btMatrix3x3 m_effectiveMass; // effective mass in contact
- btMatrix3x3 m_effectiveMass_inv; // inverse of effective mass
- };
- /* Link */
- ATTRIBUTE_ALIGNED16(struct)
- Link : Feature
- {
- btVector3 m_c3; // gradient
- Node* m_n[2]; // Node pointers
- btScalar m_rl; // Rest length
- int m_bbending : 1; // Bending link
- btScalar m_c0; // (ima+imb)*kLST
- btScalar m_c1; // rl^2
- btScalar m_c2; // |gradient|^2/c0
-
- BT_DECLARE_ALIGNED_ALLOCATOR();
- };
- struct RenderFace
- {
- RenderNode* m_n[3]; // Node pointers
- };
-
- /* Face */
- struct Face : Feature
- {
- Node* m_n[3]; // Node pointers
- btVector3 m_normal; // Normal
- btScalar m_ra; // Rest area
- btDbvtNode* m_leaf; // Leaf data
- btVector4 m_pcontact; // barycentric weights of the persistent contact
- btVector3 m_n0, m_n1, m_vn;
- int m_index;
- };
- /* Tetra */
- struct Tetra : Feature
- {
- Node* m_n[4]; // Node pointers
- btScalar m_rv; // Rest volume
- btDbvtNode* m_leaf; // Leaf data
- btVector3 m_c0[4]; // gradients
- btScalar m_c1; // (4*kVST)/(im0+im1+im2+im3)
- btScalar m_c2; // m_c1/sum(|g0..3|^2)
- btMatrix3x3 m_Dm_inverse; // rest Dm^-1
- btMatrix3x3 m_F;
- btScalar m_element_measure;
- btVector4 m_P_inv[3]; // first three columns of P_inv matrix
- };
-
- /* TetraScratch */
- struct TetraScratch
- {
- btMatrix3x3 m_F; // deformation gradient F
- btScalar m_trace; // trace of F^T * F
- btScalar m_J; // det(F)
- btMatrix3x3 m_cofF; // cofactor of F
- btMatrix3x3 m_corotation; // corotatio of the tetra
- };
-
- /* RContact */
- struct RContact
- {
- sCti m_cti; // Contact infos
- Node* m_node; // Owner node
- btMatrix3x3 m_c0; // Impulse matrix
- btVector3 m_c1; // Relative anchor
- btScalar m_c2; // ima*dt
- btScalar m_c3; // Friction
- btScalar m_c4; // Hardness
-
- // jacobians and unit impulse responses for multibody
- btMultiBodyJacobianData jacobianData_normal;
- btMultiBodyJacobianData jacobianData_t1;
- btMultiBodyJacobianData jacobianData_t2;
- btVector3 t1;
- btVector3 t2;
- };
-
- class DeformableRigidContact
- {
- public:
- sCti m_cti; // Contact infos
- btMatrix3x3 m_c0; // Impulse matrix
- btVector3 m_c1; // Relative anchor
- btScalar m_c2; // inverse mass of node/face
- btScalar m_c3; // Friction
- btScalar m_c4; // Hardness
- btMatrix3x3 m_c5; // inverse effective mass
-
- // jacobians and unit impulse responses for multibody
- btMultiBodyJacobianData jacobianData_normal;
- btMultiBodyJacobianData jacobianData_t1;
- btMultiBodyJacobianData jacobianData_t2;
- btVector3 t1;
- btVector3 t2;
- };
-
- class DeformableNodeRigidContact : public DeformableRigidContact
- {
- public:
- Node* m_node; // Owner node
- };
-
- class DeformableNodeRigidAnchor : public DeformableNodeRigidContact
- {
- public:
- btVector3 m_local; // Anchor position in body space
- };
-
- class DeformableFaceRigidContact : public DeformableRigidContact
- {
- public:
- Face* m_face; // Owner face
- btVector3 m_contactPoint; // Contact point
- btVector3 m_bary; // Barycentric weights
- btVector3 m_weights; // v_contactPoint * m_weights[i] = m_face->m_node[i]->m_v;
- };
-
- struct DeformableFaceNodeContact
- {
- Node* m_node; // Node
- Face* m_face; // Face
- btVector3 m_bary; // Barycentric weights
- btVector3 m_weights; // v_contactPoint * m_weights[i] = m_face->m_node[i]->m_v;
- btVector3 m_normal; // Normal
- btScalar m_margin; // Margin
- btScalar m_friction; // Friction
- btScalar m_imf; // inverse mass of the face at contact point
- btScalar m_c0; // scale of the impulse matrix;
- };
-
- /* SContact */
- struct SContact
- {
- Node* m_node; // Node
- Face* m_face; // Face
- btVector3 m_weights; // Weigths
- btVector3 m_normal; // Normal
- btScalar m_margin; // Margin
- btScalar m_friction; // Friction
- btScalar m_cfm[2]; // Constraint force mixing
- };
- /* Anchor */
- struct Anchor
- {
- Node* m_node; // Node pointer
- btVector3 m_local; // Anchor position in body space
- btRigidBody* m_body; // Body
- btScalar m_influence;
- btMatrix3x3 m_c0; // Impulse matrix
- btVector3 m_c1; // Relative anchor
- btScalar m_c2; // ima*dt
- };
- /* Note */
- struct Note : Element
- {
- const char* m_text; // Text
- btVector3 m_offset; // Offset
- int m_rank; // Rank
- Node* m_nodes[4]; // Nodes
- btScalar m_coords[4]; // Coordinates
- };
- /* Pose */
- struct Pose
- {
- bool m_bvolume; // Is valid
- bool m_bframe; // Is frame
- btScalar m_volume; // Rest volume
- tVector3Array m_pos; // Reference positions
- tScalarArray m_wgh; // Weights
- btVector3 m_com; // COM
- btMatrix3x3 m_rot; // Rotation
- btMatrix3x3 m_scl; // Scale
- btMatrix3x3 m_aqq; // Base scaling
- };
- /* Cluster */
- struct Cluster
- {
- tScalarArray m_masses;
- btAlignedObjectArray<Node*> m_nodes;
- tVector3Array m_framerefs;
- btTransform m_framexform;
- btScalar m_idmass;
- btScalar m_imass;
- btMatrix3x3 m_locii;
- btMatrix3x3 m_invwi;
- btVector3 m_com;
- btVector3 m_vimpulses[2];
- btVector3 m_dimpulses[2];
- int m_nvimpulses;
- int m_ndimpulses;
- btVector3 m_lv;
- btVector3 m_av;
- btDbvtNode* m_leaf;
- btScalar m_ndamping; /* Node damping */
- btScalar m_ldamping; /* Linear damping */
- btScalar m_adamping; /* Angular damping */
- btScalar m_matching;
- btScalar m_maxSelfCollisionImpulse;
- btScalar m_selfCollisionImpulseFactor;
- bool m_containsAnchor;
- bool m_collide;
- int m_clusterIndex;
- Cluster() : m_leaf(0), m_ndamping(0), m_ldamping(0), m_adamping(0), m_matching(0), m_maxSelfCollisionImpulse(100.f), m_selfCollisionImpulseFactor(0.01f), m_containsAnchor(false)
- {
- }
- };
- /* Impulse */
- struct Impulse
- {
- btVector3 m_velocity;
- btVector3 m_drift;
- int m_asVelocity : 1;
- int m_asDrift : 1;
- Impulse() : m_velocity(0, 0, 0), m_drift(0, 0, 0), m_asVelocity(0), m_asDrift(0) {}
- Impulse operator-() const
- {
- Impulse i = *this;
- i.m_velocity = -i.m_velocity;
- i.m_drift = -i.m_drift;
- return (i);
- }
- Impulse operator*(btScalar x) const
- {
- Impulse i = *this;
- i.m_velocity *= x;
- i.m_drift *= x;
- return (i);
- }
- };
- /* Body */
- struct Body
- {
- Cluster* m_soft;
- btRigidBody* m_rigid;
- const btCollisionObject* m_collisionObject;
-
- Body() : m_soft(0), m_rigid(0), m_collisionObject(0) {}
- Body(Cluster* p) : m_soft(p), m_rigid(0), m_collisionObject(0) {}
- Body(const btCollisionObject* colObj) : m_soft(0), m_collisionObject(colObj)
- {
- m_rigid = (btRigidBody*)btRigidBody::upcast(m_collisionObject);
- }
-
- void activate() const
- {
- if (m_rigid)
- m_rigid->activate();
- if (m_collisionObject)
- m_collisionObject->activate();
- }
- const btMatrix3x3& invWorldInertia() const
- {
- static const btMatrix3x3 iwi(0, 0, 0, 0, 0, 0, 0, 0, 0);
- if (m_rigid) return (m_rigid->getInvInertiaTensorWorld());
- if (m_soft) return (m_soft->m_invwi);
- return (iwi);
- }
- btScalar invMass() const
- {
- if (m_rigid) return (m_rigid->getInvMass());
- if (m_soft) return (m_soft->m_imass);
- return (0);
- }
- const btTransform& xform() const
- {
- static const btTransform identity = btTransform::getIdentity();
- if (m_collisionObject) return (m_collisionObject->getWorldTransform());
- if (m_soft) return (m_soft->m_framexform);
- return (identity);
- }
- btVector3 linearVelocity() const
- {
- if (m_rigid) return (m_rigid->getLinearVelocity());
- if (m_soft) return (m_soft->m_lv);
- return (btVector3(0, 0, 0));
- }
- btVector3 angularVelocity(const btVector3& rpos) const
- {
- if (m_rigid) return (btCross(m_rigid->getAngularVelocity(), rpos));
- if (m_soft) return (btCross(m_soft->m_av, rpos));
- return (btVector3(0, 0, 0));
- }
- btVector3 angularVelocity() const
- {
- if (m_rigid) return (m_rigid->getAngularVelocity());
- if (m_soft) return (m_soft->m_av);
- return (btVector3(0, 0, 0));
- }
- btVector3 velocity(const btVector3& rpos) const
- {
- return (linearVelocity() + angularVelocity(rpos));
- }
- void applyVImpulse(const btVector3& impulse, const btVector3& rpos) const
- {
- if (m_rigid) m_rigid->applyImpulse(impulse, rpos);
- if (m_soft) btSoftBody::clusterVImpulse(m_soft, rpos, impulse);
- }
- void applyDImpulse(const btVector3& impulse, const btVector3& rpos) const
- {
- if (m_rigid) m_rigid->applyImpulse(impulse, rpos);
- if (m_soft) btSoftBody::clusterDImpulse(m_soft, rpos, impulse);
- }
- void applyImpulse(const Impulse& impulse, const btVector3& rpos) const
- {
- if (impulse.m_asVelocity)
- {
- // printf("impulse.m_velocity = %f,%f,%f\n",impulse.m_velocity.getX(),impulse.m_velocity.getY(),impulse.m_velocity.getZ());
- applyVImpulse(impulse.m_velocity, rpos);
- }
- if (impulse.m_asDrift)
- {
- // printf("impulse.m_drift = %f,%f,%f\n",impulse.m_drift.getX(),impulse.m_drift.getY(),impulse.m_drift.getZ());
- applyDImpulse(impulse.m_drift, rpos);
- }
- }
- void applyVAImpulse(const btVector3& impulse) const
- {
- if (m_rigid) m_rigid->applyTorqueImpulse(impulse);
- if (m_soft) btSoftBody::clusterVAImpulse(m_soft, impulse);
- }
- void applyDAImpulse(const btVector3& impulse) const
- {
- if (m_rigid) m_rigid->applyTorqueImpulse(impulse);
- if (m_soft) btSoftBody::clusterDAImpulse(m_soft, impulse);
- }
- void applyAImpulse(const Impulse& impulse) const
- {
- if (impulse.m_asVelocity) applyVAImpulse(impulse.m_velocity);
- if (impulse.m_asDrift) applyDAImpulse(impulse.m_drift);
- }
- void applyDCImpulse(const btVector3& impulse) const
- {
- if (m_rigid) m_rigid->applyCentralImpulse(impulse);
- if (m_soft) btSoftBody::clusterDCImpulse(m_soft, impulse);
- }
- };
- /* Joint */
- struct Joint
- {
- struct eType
- {
- enum _
- {
- Linear = 0,
- Angular,
- Contact
- };
- };
- struct Specs
- {
- Specs() : erp(1), cfm(1), split(1) {}
- btScalar erp;
- btScalar cfm;
- btScalar split;
- };
- Body m_bodies[2];
- btVector3 m_refs[2];
- btScalar m_cfm;
- btScalar m_erp;
- btScalar m_split;
- btVector3 m_drift;
- btVector3 m_sdrift;
- btMatrix3x3 m_massmatrix;
- bool m_delete;
- virtual ~Joint() {}
- Joint() : m_delete(false) {}
- virtual void Prepare(btScalar dt, int iterations);
- virtual void Solve(btScalar dt, btScalar sor) = 0;
- virtual void Terminate(btScalar dt) = 0;
- virtual eType::_ Type() const = 0;
- };
- /* LJoint */
- struct LJoint : Joint
- {
- struct Specs : Joint::Specs
- {
- btVector3 position;
- };
- btVector3 m_rpos[2];
- void Prepare(btScalar dt, int iterations);
- void Solve(btScalar dt, btScalar sor);
- void Terminate(btScalar dt);
- eType::_ Type() const { return (eType::Linear); }
- };
- /* AJoint */
- struct AJoint : Joint
- {
- struct IControl
- {
- virtual ~IControl() {}
- virtual void Prepare(AJoint*) {}
- virtual btScalar Speed(AJoint*, btScalar current) { return (current); }
- static IControl* Default()
- {
- static IControl def;
- return (&def);
- }
- };
- struct Specs : Joint::Specs
- {
- Specs() : icontrol(IControl::Default()) {}
- btVector3 axis;
- IControl* icontrol;
- };
- btVector3 m_axis[2];
- IControl* m_icontrol;
- void Prepare(btScalar dt, int iterations);
- void Solve(btScalar dt, btScalar sor);
- void Terminate(btScalar dt);
- eType::_ Type() const { return (eType::Angular); }
- };
- /* CJoint */
- struct CJoint : Joint
- {
- int m_life;
- int m_maxlife;
- btVector3 m_rpos[2];
- btVector3 m_normal;
- btScalar m_friction;
- void Prepare(btScalar dt, int iterations);
- void Solve(btScalar dt, btScalar sor);
- void Terminate(btScalar dt);
- eType::_ Type() const { return (eType::Contact); }
- };
- /* Config */
- struct Config
- {
- eAeroModel::_ aeromodel; // Aerodynamic model (default: V_Point)
- btScalar kVCF; // Velocities correction factor (Baumgarte)
- btScalar kDP; // Damping coefficient [0,1]
- btScalar kDG; // Drag coefficient [0,+inf]
- btScalar kLF; // Lift coefficient [0,+inf]
- btScalar kPR; // Pressure coefficient [-inf,+inf]
- btScalar kVC; // Volume conversation coefficient [0,+inf]
- btScalar kDF; // Dynamic friction coefficient [0,1]
- btScalar kMT; // Pose matching coefficient [0,1]
- btScalar kCHR; // Rigid contacts hardness [0,1]
- btScalar kKHR; // Kinetic contacts hardness [0,1]
- btScalar kSHR; // Soft contacts hardness [0,1]
- btScalar kAHR; // Anchors hardness [0,1]
- btScalar kSRHR_CL; // Soft vs rigid hardness [0,1] (cluster only)
- btScalar kSKHR_CL; // Soft vs kinetic hardness [0,1] (cluster only)
- btScalar kSSHR_CL; // Soft vs soft hardness [0,1] (cluster only)
- btScalar kSR_SPLT_CL; // Soft vs rigid impulse split [0,1] (cluster only)
- btScalar kSK_SPLT_CL; // Soft vs rigid impulse split [0,1] (cluster only)
- btScalar kSS_SPLT_CL; // Soft vs rigid impulse split [0,1] (cluster only)
- btScalar maxvolume; // Maximum volume ratio for pose
- btScalar timescale; // Time scale
- int viterations; // Velocities solver iterations
- int piterations; // Positions solver iterations
- int diterations; // Drift solver iterations
- int citerations; // Cluster solver iterations
- int collisions; // Collisions flags
- tVSolverArray m_vsequence; // Velocity solvers sequence
- tPSolverArray m_psequence; // Position solvers sequence
- tPSolverArray m_dsequence; // Drift solvers sequence
- btScalar drag; // deformable air drag
- btScalar m_maxStress; // Maximum principle first Piola stress
- };
- /* SolverState */
- struct SolverState
- {
- //if you add new variables, always initialize them!
- SolverState()
- : sdt(0),
- isdt(0),
- velmrg(0),
- radmrg(0),
- updmrg(0)
- {
- }
- btScalar sdt; // dt*timescale
- btScalar isdt; // 1/sdt
- btScalar velmrg; // velocity margin
- btScalar radmrg; // radial margin
- btScalar updmrg; // Update margin
- };
- /// RayFromToCaster takes a ray from, ray to (instead of direction!)
- struct RayFromToCaster : btDbvt::ICollide
- {
- btVector3 m_rayFrom;
- btVector3 m_rayTo;
- btVector3 m_rayNormalizedDirection;
- btScalar m_mint;
- Face* m_face;
- int m_tests;
- RayFromToCaster(const btVector3& rayFrom, const btVector3& rayTo, btScalar mxt);
- void Process(const btDbvtNode* leaf);
-
- static /*inline*/ btScalar rayFromToTriangle(const btVector3& rayFrom,
- const btVector3& rayTo,
- const btVector3& rayNormalizedDirection,
- const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- btScalar maxt = SIMD_INFINITY);
- };
-
- //
- // Typedefs
- //
-
- typedef void (*psolver_t)(btSoftBody*, btScalar, btScalar);
- typedef void (*vsolver_t)(btSoftBody*, btScalar);
- typedef btAlignedObjectArray<Cluster*> tClusterArray;
- typedef btAlignedObjectArray<Note> tNoteArray;
- typedef btAlignedObjectArray<Node> tNodeArray;
- typedef btAlignedObjectArray< RenderNode> tRenderNodeArray;
- typedef btAlignedObjectArray<btDbvtNode*> tLeafArray;
- typedef btAlignedObjectArray<Link> tLinkArray;
- typedef btAlignedObjectArray<Face> tFaceArray;
- typedef btAlignedObjectArray<RenderFace> tRenderFaceArray;
- typedef btAlignedObjectArray<Tetra> tTetraArray;
- typedef btAlignedObjectArray<Anchor> tAnchorArray;
- typedef btAlignedObjectArray<RContact> tRContactArray;
- typedef btAlignedObjectArray<SContact> tSContactArray;
- typedef btAlignedObjectArray<Material*> tMaterialArray;
- typedef btAlignedObjectArray<Joint*> tJointArray;
- typedef btAlignedObjectArray<btSoftBody*> tSoftBodyArray;
-
- //
- // Fields
- //
-
- Config m_cfg; // Configuration
- SolverState m_sst; // Solver state
- Pose m_pose; // Pose
- void* m_tag; // User data
- btSoftBodyWorldInfo* m_worldInfo; // World info
- tNoteArray m_notes; // Notes
- tNodeArray m_nodes; // Nodes
- tRenderNodeArray m_renderNodes; // Render Nodes
- tLinkArray m_links; // Links
- tFaceArray m_faces; // Faces
- tRenderFaceArray m_renderFaces; // Faces
- tTetraArray m_tetras; // Tetras
- btAlignedObjectArray<TetraScratch> m_tetraScratches;
- btAlignedObjectArray<TetraScratch> m_tetraScratchesTn;
- tAnchorArray m_anchors; // Anchors
- btAlignedObjectArray<DeformableNodeRigidAnchor> m_deformableAnchors;
- tRContactArray m_rcontacts; // Rigid contacts
- btAlignedObjectArray<DeformableNodeRigidContact> m_nodeRigidContacts;
- btAlignedObjectArray<DeformableFaceNodeContact> m_faceNodeContacts;
- btAlignedObjectArray<DeformableFaceRigidContact> m_faceRigidContacts;
- tSContactArray m_scontacts; // Soft contacts
- tJointArray m_joints; // Joints
- tMaterialArray m_materials; // Materials
- btScalar m_timeacc; // Time accumulator
- btVector3 m_bounds[2]; // Spatial bounds
- bool m_bUpdateRtCst; // Update runtime constants
- btDbvt m_ndbvt; // Nodes tree
- btDbvt m_fdbvt; // Faces tree
- btDbvntNode* m_fdbvnt; // Faces tree with normals
- btDbvt m_cdbvt; // Clusters tree
- tClusterArray m_clusters; // Clusters
- btScalar m_dampingCoefficient; // Damping Coefficient
- btScalar m_sleepingThreshold;
- btScalar m_maxSpeedSquared;
- btAlignedObjectArray<btVector3> m_quads; // quadrature points for collision detection
- btScalar m_repulsionStiffness;
- btScalar m_gravityFactor;
- bool m_cacheBarycenter;
- btAlignedObjectArray<btVector3> m_X; // initial positions
-
- btAlignedObjectArray<btVector4> m_renderNodesInterpolationWeights;
- btAlignedObjectArray<btAlignedObjectArray<const btSoftBody::Node*> > m_renderNodesParents;
- btAlignedObjectArray<btScalar> m_z; // vertical distance used in extrapolation
- bool m_useSelfCollision;
- bool m_softSoftCollision;
-
- btAlignedObjectArray<bool> m_clusterConnectivity; //cluster connectivity, for self-collision
-
- btVector3 m_windVelocity;
-
- btScalar m_restLengthScale;
-
- //
- // Api
- //
-
- /* ctor */
- btSoftBody(btSoftBodyWorldInfo* worldInfo, int node_count, const btVector3* x, const btScalar* m);
-
- /* ctor */
- btSoftBody(btSoftBodyWorldInfo* worldInfo);
-
- void initDefaults();
-
- /* dtor */
- virtual ~btSoftBody();
- /* Check for existing link */
-
- btAlignedObjectArray<int> m_userIndexMapping;
-
- btSoftBodyWorldInfo* getWorldInfo()
- {
- return m_worldInfo;
- }
-
- void setDampingCoefficient(btScalar damping_coeff)
- {
- m_dampingCoefficient = damping_coeff;
- }
-
- ///@todo: avoid internal softbody shape hack and move collision code to collision library
- virtual void setCollisionShape(btCollisionShape* collisionShape)
- {
- }
-
- bool checkLink(int node0,
- int node1) const;
- bool checkLink(const Node* node0,
- const Node* node1) const;
- /* Check for existring face */
- bool checkFace(int node0,
- int node1,
- int node2) const;
- /* Append material */
- Material* appendMaterial();
- /* Append note */
- void appendNote(const char* text,
- const btVector3& o,
- const btVector4& c = btVector4(1, 0, 0, 0),
- Node* n0 = 0,
- Node* n1 = 0,
- Node* n2 = 0,
- Node* n3 = 0);
- void appendNote(const char* text,
- const btVector3& o,
- Node* feature);
- void appendNote(const char* text,
- const btVector3& o,
- Link* feature);
- void appendNote(const char* text,
- const btVector3& o,
- Face* feature);
- /* Append node */
- void appendNode(const btVector3& x, btScalar m);
- /* Append link */
- void appendLink(int model = -1, Material* mat = 0);
- void appendLink(int node0,
- int node1,
- Material* mat = 0,
- bool bcheckexist = false);
- void appendLink(Node* node0,
- Node* node1,
- Material* mat = 0,
- bool bcheckexist = false);
- /* Append face */
- void appendFace(int model = -1, Material* mat = 0);
- void appendFace(int node0,
- int node1,
- int node2,
- Material* mat = 0);
- void appendTetra(int model, Material* mat);
- //
- void appendTetra(int node0,
- int node1,
- int node2,
- int node3,
- Material* mat = 0);
-
- /* Append anchor */
- void appendDeformableAnchor(int node, btRigidBody* body);
- void appendDeformableAnchor(int node, btMultiBodyLinkCollider* link);
- void appendAnchor(int node,
- btRigidBody* body, bool disableCollisionBetweenLinkedBodies = false, btScalar influence = 1);
- void appendAnchor(int node, btRigidBody* body, const btVector3& localPivot, bool disableCollisionBetweenLinkedBodies = false, btScalar influence = 1);
- void removeAnchor(int node);
- /* Append linear joint */
- void appendLinearJoint(const LJoint::Specs& specs, Cluster* body0, Body body1);
- void appendLinearJoint(const LJoint::Specs& specs, Body body = Body());
- void appendLinearJoint(const LJoint::Specs& specs, btSoftBody* body);
- /* Append linear joint */
- void appendAngularJoint(const AJoint::Specs& specs, Cluster* body0, Body body1);
- void appendAngularJoint(const AJoint::Specs& specs, Body body = Body());
- void appendAngularJoint(const AJoint::Specs& specs, btSoftBody* body);
- /* Add force (or gravity) to the entire body */
- void addForce(const btVector3& force);
- /* Add force (or gravity) to a node of the body */
- void addForce(const btVector3& force,
- int node);
- /* Add aero force to a node of the body */
- void addAeroForceToNode(const btVector3& windVelocity, int nodeIndex);
-
- /* Add aero force to a face of the body */
- void addAeroForceToFace(const btVector3& windVelocity, int faceIndex);
-
- /* Add velocity to the entire body */
- void addVelocity(const btVector3& velocity);
-
- /* Set velocity for the entire body */
- void setVelocity(const btVector3& velocity);
-
- /* Add velocity to a node of the body */
- void addVelocity(const btVector3& velocity,
- int node);
- /* Set mass */
- void setMass(int node,
- btScalar mass);
- /* Get mass */
- btScalar getMass(int node) const;
- /* Get total mass */
- btScalar getTotalMass() const;
- /* Set total mass (weighted by previous masses) */
- void setTotalMass(btScalar mass,
- bool fromfaces = false);
- /* Set total density */
- void setTotalDensity(btScalar density);
- /* Set volume mass (using tetrahedrons) */
- void setVolumeMass(btScalar mass);
- /* Set volume density (using tetrahedrons) */
- void setVolumeDensity(btScalar density);
- /* Get the linear velocity of the center of mass */
- btVector3 getLinearVelocity();
- /* Set the linear velocity of the center of mass */
- void setLinearVelocity(const btVector3& linVel);
- /* Set the angular velocity of the center of mass */
- void setAngularVelocity(const btVector3& angVel);
- /* Get best fit rigid transform */
- btTransform getRigidTransform();
- /* Transform to given pose */
- void transformTo(const btTransform& trs);
- /* Transform */
- void transform(const btTransform& trs);
- /* Translate */
- void translate(const btVector3& trs);
- /* Rotate */
- void rotate(const btQuaternion& rot);
- /* Scale */
- void scale(const btVector3& scl);
- /* Get link resting lengths scale */
- btScalar getRestLengthScale();
- /* Scale resting length of all springs */
- void setRestLengthScale(btScalar restLength);
- /* Set current state as pose */
- void setPose(bool bvolume,
- bool bframe);
- /* Set current link lengths as resting lengths */
- void resetLinkRestLengths();
- /* Return the volume */
- btScalar getVolume() const;
- /* Cluster count */
- btVector3 getCenterOfMass() const
- {
- btVector3 com(0, 0, 0);
- for (int i = 0; i < m_nodes.size(); i++)
- {
- com += (m_nodes[i].m_x * this->getMass(i));
- }
- com /= this->getTotalMass();
- return com;
- }
- int clusterCount() const;
- /* Cluster center of mass */
- static btVector3 clusterCom(const Cluster* cluster);
- btVector3 clusterCom(int cluster) const;
- /* Cluster velocity at rpos */
- static btVector3 clusterVelocity(const Cluster* cluster, const btVector3& rpos);
- /* Cluster impulse */
- static void clusterVImpulse(Cluster* cluster, const btVector3& rpos, const btVector3& impulse);
- static void clusterDImpulse(Cluster* cluster, const btVector3& rpos, const btVector3& impulse);
- static void clusterImpulse(Cluster* cluster, const btVector3& rpos, const Impulse& impulse);
- static void clusterVAImpulse(Cluster* cluster, const btVector3& impulse);
- static void clusterDAImpulse(Cluster* cluster, const btVector3& impulse);
- static void clusterAImpulse(Cluster* cluster, const Impulse& impulse);
- static void clusterDCImpulse(Cluster* cluster, const btVector3& impulse);
- /* Generate bending constraints based on distance in the adjency graph */
- int generateBendingConstraints(int distance,
- Material* mat = 0);
- /* Randomize constraints to reduce solver bias */
- void randomizeConstraints();
- /* Release clusters */
- void releaseCluster(int index);
- void releaseClusters();
- /* Generate clusters (K-mean) */
- ///generateClusters with k=0 will create a convex cluster for each tetrahedron or triangle
- ///otherwise an approximation will be used (better performance)
- int generateClusters(int k, int maxiterations = 8192);
- /* Refine */
- void refine(ImplicitFn* ifn, btScalar accurary, bool cut);
- /* CutLink */
- bool cutLink(int node0, int node1, btScalar position);
- bool cutLink(const Node* node0, const Node* node1, btScalar position);
-
- ///Ray casting using rayFrom and rayTo in worldspace, (not direction!)
- bool rayTest(const btVector3& rayFrom,
- const btVector3& rayTo,
- sRayCast& results);
- bool rayFaceTest(const btVector3& rayFrom,
- const btVector3& rayTo,
- sRayCast& results);
- int rayFaceTest(const btVector3& rayFrom, const btVector3& rayTo,
- btScalar& mint, int& index) const;
- /* Solver presets */
- void setSolver(eSolverPresets::_ preset);
- /* predictMotion */
- void predictMotion(btScalar dt);
- /* solveConstraints */
- void solveConstraints();
- /* staticSolve */
- void staticSolve(int iterations);
- /* solveCommonConstraints */
- static void solveCommonConstraints(btSoftBody** bodies, int count, int iterations);
- /* solveClusters */
- static void solveClusters(const btAlignedObjectArray<btSoftBody*>& bodies);
- /* integrateMotion */
- void integrateMotion();
- /* defaultCollisionHandlers */
- void defaultCollisionHandler(const btCollisionObjectWrapper* pcoWrap);
- void defaultCollisionHandler(btSoftBody* psb);
- void setSelfCollision(bool useSelfCollision);
- bool useSelfCollision();
- void updateDeactivation(btScalar timeStep);
- void setZeroVelocity();
- bool wantsSleeping();
-
- //
- // Functionality to deal with new accelerated solvers.
- //
-
- /**
- * Set a wind velocity for interaction with the air.
- */
- void setWindVelocity(const btVector3& velocity);
-
- /**
- * Return the wind velocity for interaction with the air.
- */
- const btVector3& getWindVelocity();
-
- //
- // Set the solver that handles this soft body
- // Should not be allowed to get out of sync with reality
- // Currently called internally on addition to the world
- void setSoftBodySolver(btSoftBodySolver* softBodySolver)
- {
- m_softBodySolver = softBodySolver;
- }
-
- //
- // Return the solver that handles this soft body
- //
- btSoftBodySolver* getSoftBodySolver()
- {
- return m_softBodySolver;
- }
-
- //
- // Return the solver that handles this soft body
- //
- btSoftBodySolver* getSoftBodySolver() const
- {
- return m_softBodySolver;
- }
-
- //
- // Cast
- //
-
- static const btSoftBody* upcast(const btCollisionObject* colObj)
- {
- if (colObj->getInternalType() == CO_SOFT_BODY)
- return (const btSoftBody*)colObj;
- return 0;
- }
- static btSoftBody* upcast(btCollisionObject* colObj)
- {
- if (colObj->getInternalType() == CO_SOFT_BODY)
- return (btSoftBody*)colObj;
- return 0;
- }
-
- //
- // ::btCollisionObject
- //
-
- virtual void getAabb(btVector3& aabbMin, btVector3& aabbMax) const
- {
- aabbMin = m_bounds[0];
- aabbMax = m_bounds[1];
- }
- //
- // Private
- //
- void pointersToIndices();
- void indicesToPointers(const int* map = 0);
-
- int rayTest(const btVector3& rayFrom, const btVector3& rayTo,
- btScalar& mint, eFeature::_& feature, int& index, bool bcountonly) const;
- void initializeFaceTree();
- void rebuildNodeTree();
- btVector3 evaluateCom() const;
- bool checkDeformableContact(const btCollisionObjectWrapper* colObjWrap, const btVector3& x, btScalar margin, btSoftBody::sCti& cti, bool predict = false) const;
- bool checkDeformableFaceContact(const btCollisionObjectWrapper* colObjWrap, Face& f, btVector3& contact_point, btVector3& bary, btScalar margin, btSoftBody::sCti& cti, bool predict = false) const;
- bool checkContact(const btCollisionObjectWrapper* colObjWrap, const btVector3& x, btScalar margin, btSoftBody::sCti& cti) const;
- void updateNormals();
- void updateBounds();
- void updatePose();
- void updateConstants();
- void updateLinkConstants();
- void updateArea(bool averageArea = true);
- void initializeClusters();
- void updateClusters();
- void cleanupClusters();
- void prepareClusters(int iterations);
- void solveClusters(btScalar sor);
- void applyClusters(bool drift);
- void dampClusters();
- void setSpringStiffness(btScalar k);
- void setGravityFactor(btScalar gravFactor);
- void setCacheBarycenter(bool cacheBarycenter);
- void initializeDmInverse();
- void updateDeformation();
- void advanceDeformation();
- void applyForces();
- void setMaxStress(btScalar maxStress);
- void interpolateRenderMesh();
- void setCollisionQuadrature(int N);
- static void PSolve_Anchors(btSoftBody* psb, btScalar kst, btScalar ti);
- static void PSolve_RContacts(btSoftBody* psb, btScalar kst, btScalar ti);
- static void PSolve_SContacts(btSoftBody* psb, btScalar, btScalar ti);
- static void PSolve_Links(btSoftBody* psb, btScalar kst, btScalar ti);
- static void VSolve_Links(btSoftBody* psb, btScalar kst);
- static psolver_t getSolver(ePSolver::_ solver);
- static vsolver_t getSolver(eVSolver::_ solver);
- void geometricCollisionHandler(btSoftBody* psb);
-#define SAFE_EPSILON SIMD_EPSILON * 100.0
- void updateNode(btDbvtNode* node, bool use_velocity, bool margin)
- {
- if (node->isleaf())
- {
- btSoftBody::Node* n = (btSoftBody::Node*)(node->data);
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
- btScalar pad = margin ? m_sst.radmrg : SAFE_EPSILON; // use user defined margin or margin for floating point precision
- if (use_velocity)
- {
- btVector3 points[2] = {n->m_x, n->m_x + m_sst.sdt * n->m_v};
- vol = btDbvtVolume::FromPoints(points, 2);
- vol.Expand(btVector3(pad, pad, pad));
- }
- else
- {
- vol = btDbvtVolume::FromCR(n->m_x, pad);
- }
- node->volume = vol;
- return;
- }
- else
- {
- updateNode(node->childs[0], use_velocity, margin);
- updateNode(node->childs[1], use_velocity, margin);
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
- Merge(node->childs[0]->volume, node->childs[1]->volume, vol);
- node->volume = vol;
- }
- }
-
- void updateNodeTree(bool use_velocity, bool margin)
- {
- if (m_ndbvt.m_root)
- updateNode(m_ndbvt.m_root, use_velocity, margin);
- }
-
- template <class DBVTNODE> // btDbvtNode or btDbvntNode
- void updateFace(DBVTNODE* node, bool use_velocity, bool margin)
- {
- if (node->isleaf())
- {
- btSoftBody::Face* f = (btSoftBody::Face*)(node->data);
- btScalar pad = margin ? m_sst.radmrg : SAFE_EPSILON; // use user defined margin or margin for floating point precision
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
- if (use_velocity)
- {
- btVector3 points[6] = {f->m_n[0]->m_x, f->m_n[0]->m_x + m_sst.sdt * f->m_n[0]->m_v,
- f->m_n[1]->m_x, f->m_n[1]->m_x + m_sst.sdt * f->m_n[1]->m_v,
- f->m_n[2]->m_x, f->m_n[2]->m_x + m_sst.sdt * f->m_n[2]->m_v};
- vol = btDbvtVolume::FromPoints(points, 6);
- }
- else
- {
- btVector3 points[3] = {f->m_n[0]->m_x,
- f->m_n[1]->m_x,
- f->m_n[2]->m_x};
- vol = btDbvtVolume::FromPoints(points, 3);
- }
- vol.Expand(btVector3(pad, pad, pad));
- node->volume = vol;
- return;
- }
- else
- {
- updateFace(node->childs[0], use_velocity, margin);
- updateFace(node->childs[1], use_velocity, margin);
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- vol;
- Merge(node->childs[0]->volume, node->childs[1]->volume, vol);
- node->volume = vol;
- }
- }
- void updateFaceTree(bool use_velocity, bool margin)
- {
- if (m_fdbvt.m_root)
- updateFace(m_fdbvt.m_root, use_velocity, margin);
- if (m_fdbvnt)
- updateFace(m_fdbvnt, use_velocity, margin);
- }
-
- template <typename T>
- static inline T BaryEval(const T& a,
- const T& b,
- const T& c,
- const btVector3& coord)
- {
- return (a * coord.x() + b * coord.y() + c * coord.z());
- }
-
- void applyRepulsionForce(btScalar timeStep, bool applySpringForce)
- {
- btAlignedObjectArray<int> indices;
- {
- // randomize the order of repulsive force
- indices.resize(m_faceNodeContacts.size());
- for (int i = 0; i < m_faceNodeContacts.size(); ++i)
- indices[i] = i;
-#define NEXTRAND (seed = (1664525L * seed + 1013904223L) & 0xffffffff)
- int i, ni;
-
- for (i = 0, ni = indices.size(); i < ni; ++i)
- {
- btSwap(indices[i], indices[NEXTRAND % ni]);
- }
- }
- for (int k = 0; k < m_faceNodeContacts.size(); ++k)
- {
- int idx = indices[k];
- btSoftBody::DeformableFaceNodeContact& c = m_faceNodeContacts[idx];
- btSoftBody::Node* node = c.m_node;
- btSoftBody::Face* face = c.m_face;
- const btVector3& w = c.m_bary;
- const btVector3& n = c.m_normal;
- btVector3 l = node->m_x - BaryEval(face->m_n[0]->m_x, face->m_n[1]->m_x, face->m_n[2]->m_x, w);
- btScalar d = c.m_margin - n.dot(l);
- d = btMax(btScalar(0), d);
-
- const btVector3& va = node->m_v;
- btVector3 vb = BaryEval(face->m_n[0]->m_v, face->m_n[1]->m_v, face->m_n[2]->m_v, w);
- btVector3 vr = va - vb;
- const btScalar vn = btDot(vr, n); // dn < 0 <==> opposing
- if (vn > OVERLAP_REDUCTION_FACTOR * d / timeStep)
- continue;
- btVector3 vt = vr - vn * n;
- btScalar I = 0;
- btScalar mass = node->m_im == 0 ? 0 : btScalar(1) / node->m_im;
- if (applySpringForce)
- I = -btMin(m_repulsionStiffness * timeStep * d, mass * (OVERLAP_REDUCTION_FACTOR * d / timeStep - vn));
- if (vn < 0)
- I += 0.5 * mass * vn;
- int face_penetration = 0, node_penetration = node->m_constrained;
- for (int i = 0; i < 3; ++i)
- face_penetration |= face->m_n[i]->m_constrained;
- btScalar I_tilde = 2.0 * I / (1.0 + w.length2());
-
- // double the impulse if node or face is constrained.
- if (face_penetration > 0 || node_penetration > 0)
- {
- I_tilde *= 2.0;
- }
- if (face_penetration <= 0)
- {
- for (int j = 0; j < 3; ++j)
- face->m_n[j]->m_v += w[j] * n * I_tilde * node->m_im;
- }
- if (node_penetration <= 0)
- {
- node->m_v -= I_tilde * node->m_im * n;
- }
-
- // apply frictional impulse
- btScalar vt_norm = vt.safeNorm();
- if (vt_norm > SIMD_EPSILON)
- {
- btScalar delta_vn = -2 * I * node->m_im;
- btScalar mu = c.m_friction;
- btScalar vt_new = btMax(btScalar(1) - mu * delta_vn / (vt_norm + SIMD_EPSILON), btScalar(0)) * vt_norm;
- I = 0.5 * mass * (vt_norm - vt_new);
- vt.safeNormalize();
- I_tilde = 2.0 * I / (1.0 + w.length2());
- // double the impulse if node or face is constrained.
- if (face_penetration > 0 || node_penetration > 0)
- I_tilde *= 2.0;
- if (face_penetration <= 0)
- {
- for (int j = 0; j < 3; ++j)
- face->m_n[j]->m_v += w[j] * vt * I_tilde * (face->m_n[j])->m_im;
- }
- if (node_penetration <= 0)
- {
- node->m_v -= I_tilde * node->m_im * vt;
- }
- }
- }
- }
- virtual int calculateSerializeBufferSize() const;
-
- ///fills the dataBuffer and returns the struct name (and 0 on failure)
- virtual const char* serialize(void* dataBuffer, class btSerializer* serializer) const;
-};
-
-#endif //_BT_SOFT_BODY_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp b/thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp
deleted file mode 100644
index 750718f57f..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,316 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSoftBodyConcaveCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionShapes/btConcaveShape.h"
-#include "BulletCollision/CollisionDispatch/btManifoldResult.h"
-#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.h"
-#include "BulletCollision/CollisionShapes/btTriangleShape.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionShapes/btTetrahedronShape.h"
-#include "BulletCollision/CollisionShapes/btConvexHullShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-#include "LinearMath/btIDebugDraw.h"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.h"
-#include "BulletSoftBody/btSoftBody.h"
-
-#define BT_SOFTBODY_TRIANGLE_EXTRUSION btScalar(0.06) //make this configurable
-
-btSoftBodyConcaveCollisionAlgorithm::btSoftBodyConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped)
- : btCollisionAlgorithm(ci),
- m_isSwapped(isSwapped),
- m_btSoftBodyTriangleCallback(ci.m_dispatcher1, body0Wrap, body1Wrap, isSwapped)
-{
-}
-
-btSoftBodyConcaveCollisionAlgorithm::~btSoftBodyConcaveCollisionAlgorithm()
-{
-}
-
-btSoftBodyTriangleCallback::btSoftBodyTriangleCallback(btDispatcher* dispatcher, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped) : m_dispatcher(dispatcher),
- m_dispatchInfoPtr(0)
-{
- m_softBody = (isSwapped ? (btSoftBody*)body1Wrap->getCollisionObject() : (btSoftBody*)body0Wrap->getCollisionObject());
- m_triBody = isSwapped ? body0Wrap->getCollisionObject() : body1Wrap->getCollisionObject();
-
- //
- // create the manifold from the dispatcher 'manifold pool'
- //
- // m_manifoldPtr = m_dispatcher->getNewManifold(m_convexBody,m_triBody);
-
- clearCache();
-}
-
-btSoftBodyTriangleCallback::~btSoftBodyTriangleCallback()
-{
- clearCache();
- // m_dispatcher->releaseManifold( m_manifoldPtr );
-}
-
-void btSoftBodyTriangleCallback::clearCache()
-{
- for (int i = 0; i < m_shapeCache.size(); i++)
- {
- btTriIndex* tmp = m_shapeCache.getAtIndex(i);
- btAssert(tmp);
- btAssert(tmp->m_childShape);
- m_softBody->getWorldInfo()->m_sparsesdf.RemoveReferences(tmp->m_childShape); //necessary?
- delete tmp->m_childShape;
- }
- m_shapeCache.clear();
-}
-
-void btSoftBodyTriangleCallback::processTriangle(btVector3* triangle, int partId, int triangleIndex)
-{
- //just for debugging purposes
- //printf("triangle %d",m_triangleCount++);
-
- btCollisionAlgorithmConstructionInfo ci;
- ci.m_dispatcher1 = m_dispatcher;
-
- ///debug drawing of the overlapping triangles
- if (m_dispatchInfoPtr && m_dispatchInfoPtr->m_debugDraw && (m_dispatchInfoPtr->m_debugDraw->getDebugMode() & btIDebugDraw::DBG_DrawWireframe))
- {
- btVector3 color(1, 1, 0);
- const btTransform& tr = m_triBody->getWorldTransform();
- m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[0]), tr(triangle[1]), color);
- m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[1]), tr(triangle[2]), color);
- m_dispatchInfoPtr->m_debugDraw->drawLine(tr(triangle[2]), tr(triangle[0]), color);
- }
-
- btTriIndex triIndex(partId, triangleIndex, 0);
- btHashKey<btTriIndex> triKey(triIndex.getUid());
-
- btTriIndex* shapeIndex = m_shapeCache[triKey];
- if (shapeIndex)
- {
- btCollisionShape* tm = shapeIndex->m_childShape;
- btAssert(tm);
-
- //copy over user pointers to temporary shape
- tm->setUserPointer(m_triBody->getCollisionShape()->getUserPointer());
-
- btCollisionObjectWrapper softBody(0, m_softBody->getCollisionShape(), m_softBody, m_softBody->getWorldTransform(), -1, -1);
- //btCollisionObjectWrapper triBody(0,tm, ob, btTransform::getIdentity());//ob->getWorldTransform());//??
- btCollisionObjectWrapper triBody(0, tm, m_triBody, m_triBody->getWorldTransform(), partId, triangleIndex);
- ebtDispatcherQueryType algoType = m_resultOut->m_closestPointDistanceThreshold > 0 ? BT_CLOSEST_POINT_ALGORITHMS : BT_CONTACT_POINT_ALGORITHMS;
- btCollisionAlgorithm* colAlgo = ci.m_dispatcher1->findAlgorithm(&softBody, &triBody, 0, algoType); //m_manifoldPtr);
-
- colAlgo->processCollision(&softBody, &triBody, *m_dispatchInfoPtr, m_resultOut);
- colAlgo->~btCollisionAlgorithm();
- ci.m_dispatcher1->freeCollisionAlgorithm(colAlgo);
-
- return;
- }
-
- //aabb filter is already applied!
-
- //btCollisionObject* colObj = static_cast<btCollisionObject*>(m_convexProxy->m_clientObject);
-
- // if (m_softBody->getCollisionShape()->getShapeType()==
- {
- // btVector3 other;
- btVector3 normal = (triangle[1] - triangle[0]).cross(triangle[2] - triangle[0]);
- normal.normalize();
- normal *= BT_SOFTBODY_TRIANGLE_EXTRUSION;
- // other=(triangle[0]+triangle[1]+triangle[2])*0.333333f;
- // other+=normal*22.f;
- btVector3 pts[6] = {triangle[0] + normal,
- triangle[1] + normal,
- triangle[2] + normal,
- triangle[0] - normal,
- triangle[1] - normal,
- triangle[2] - normal};
-
- btConvexHullShape* tm = new btConvexHullShape(&pts[0].getX(), 6);
-
- // btBU_Simplex1to4 tm(triangle[0],triangle[1],triangle[2],other);
-
- //btTriangleShape tm(triangle[0],triangle[1],triangle[2]);
- // tm.setMargin(m_collisionMarginTriangle);
-
- //copy over user pointers to temporary shape
- tm->setUserPointer(m_triBody->getCollisionShape()->getUserPointer());
-
- btCollisionObjectWrapper softBody(0, m_softBody->getCollisionShape(), m_softBody, m_softBody->getWorldTransform(), -1, -1);
- btCollisionObjectWrapper triBody(0, tm, m_triBody, m_triBody->getWorldTransform(), partId, triangleIndex); //btTransform::getIdentity());//??
-
- ebtDispatcherQueryType algoType = m_resultOut->m_closestPointDistanceThreshold > 0 ? BT_CLOSEST_POINT_ALGORITHMS : BT_CONTACT_POINT_ALGORITHMS;
- btCollisionAlgorithm* colAlgo = ci.m_dispatcher1->findAlgorithm(&softBody, &triBody, 0, algoType); //m_manifoldPtr);
-
- colAlgo->processCollision(&softBody, &triBody, *m_dispatchInfoPtr, m_resultOut);
- colAlgo->~btCollisionAlgorithm();
- ci.m_dispatcher1->freeCollisionAlgorithm(colAlgo);
-
- triIndex.m_childShape = tm;
- m_shapeCache.insert(triKey, triIndex);
- }
-}
-
-void btSoftBodyTriangleCallback::setTimeStepAndCounters(btScalar collisionMarginTriangle, const btCollisionObjectWrapper* triBodyWrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- m_dispatchInfoPtr = &dispatchInfo;
- m_collisionMarginTriangle = collisionMarginTriangle + btScalar(BT_SOFTBODY_TRIANGLE_EXTRUSION);
- m_resultOut = resultOut;
-
- btVector3 aabbWorldSpaceMin, aabbWorldSpaceMax;
- m_softBody->getAabb(aabbWorldSpaceMin, aabbWorldSpaceMax);
- btVector3 halfExtents = (aabbWorldSpaceMax - aabbWorldSpaceMin) * btScalar(0.5);
- btVector3 softBodyCenter = (aabbWorldSpaceMax + aabbWorldSpaceMin) * btScalar(0.5);
-
- btTransform softTransform;
- softTransform.setIdentity();
- softTransform.setOrigin(softBodyCenter);
-
- btTransform convexInTriangleSpace;
- convexInTriangleSpace = triBodyWrap->getWorldTransform().inverse() * softTransform;
- btTransformAabb(halfExtents, m_collisionMarginTriangle, convexInTriangleSpace, m_aabbMin, m_aabbMax);
-}
-
-void btSoftBodyConcaveCollisionAlgorithm::clearCache()
-{
- m_btSoftBodyTriangleCallback.clearCache();
-}
-
-void btSoftBodyConcaveCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- //btCollisionObject* convexBody = m_isSwapped ? body1 : body0;
- const btCollisionObjectWrapper* triBody = m_isSwapped ? body0Wrap : body1Wrap;
-
- if (triBody->getCollisionShape()->isConcave())
- {
- const btCollisionObject* triOb = triBody->getCollisionObject();
- const btConcaveShape* concaveShape = static_cast<const btConcaveShape*>(triOb->getCollisionShape());
-
- // if (convexBody->getCollisionShape()->isConvex())
- {
- btScalar collisionMarginTriangle = concaveShape->getMargin();
-
- // resultOut->setPersistentManifold(m_btSoftBodyTriangleCallback.m_manifoldPtr);
- m_btSoftBodyTriangleCallback.setTimeStepAndCounters(collisionMarginTriangle, triBody, dispatchInfo, resultOut);
-
- concaveShape->processAllTriangles(&m_btSoftBodyTriangleCallback, m_btSoftBodyTriangleCallback.getAabbMin(), m_btSoftBodyTriangleCallback.getAabbMax());
-
- // resultOut->refreshContactPoints();
- }
- }
-}
-
-btScalar btSoftBodyConcaveCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- btCollisionObject* convexbody = m_isSwapped ? body1 : body0;
- btCollisionObject* triBody = m_isSwapped ? body0 : body1;
-
- //quick approximation using raycast, todo: hook up to the continuous collision detection (one of the btConvexCast)
-
- //only perform CCD above a certain threshold, this prevents blocking on the long run
- //because object in a blocked ccd state (hitfraction<1) get their linear velocity halved each frame...
- btScalar squareMot0 = (convexbody->getInterpolationWorldTransform().getOrigin() - convexbody->getWorldTransform().getOrigin()).length2();
- if (squareMot0 < convexbody->getCcdSquareMotionThreshold())
- {
- return btScalar(1.);
- }
-
- //const btVector3& from = convexbody->m_worldTransform.getOrigin();
- //btVector3 to = convexbody->m_interpolationWorldTransform.getOrigin();
- //todo: only do if the motion exceeds the 'radius'
-
- btTransform triInv = triBody->getWorldTransform().inverse();
- btTransform convexFromLocal = triInv * convexbody->getWorldTransform();
- btTransform convexToLocal = triInv * convexbody->getInterpolationWorldTransform();
-
- struct LocalTriangleSphereCastCallback : public btTriangleCallback
- {
- btTransform m_ccdSphereFromTrans;
- btTransform m_ccdSphereToTrans;
- btTransform m_meshTransform;
-
- btScalar m_ccdSphereRadius;
- btScalar m_hitFraction;
-
- LocalTriangleSphereCastCallback(const btTransform& from, const btTransform& to, btScalar ccdSphereRadius, btScalar hitFraction)
- : m_ccdSphereFromTrans(from),
- m_ccdSphereToTrans(to),
- m_ccdSphereRadius(ccdSphereRadius),
- m_hitFraction(hitFraction)
- {
- }
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex)
- {
- (void)partId;
- (void)triangleIndex;
- //do a swept sphere for now
- btTransform ident;
- ident.setIdentity();
- btConvexCast::CastResult castResult;
- castResult.m_fraction = m_hitFraction;
- btSphereShape pointShape(m_ccdSphereRadius);
- btTriangleShape triShape(triangle[0], triangle[1], triangle[2]);
- btVoronoiSimplexSolver simplexSolver;
- btSubsimplexConvexCast convexCaster(&pointShape, &triShape, &simplexSolver);
- //GjkConvexCast convexCaster(&pointShape,convexShape,&simplexSolver);
- //ContinuousConvexCollision convexCaster(&pointShape,convexShape,&simplexSolver,0);
- //local space?
-
- if (convexCaster.calcTimeOfImpact(m_ccdSphereFromTrans, m_ccdSphereToTrans,
- ident, ident, castResult))
- {
- if (m_hitFraction > castResult.m_fraction)
- m_hitFraction = castResult.m_fraction;
- }
- }
- };
-
- if (triBody->getCollisionShape()->isConcave())
- {
- btVector3 rayAabbMin = convexFromLocal.getOrigin();
- rayAabbMin.setMin(convexToLocal.getOrigin());
- btVector3 rayAabbMax = convexFromLocal.getOrigin();
- rayAabbMax.setMax(convexToLocal.getOrigin());
- btScalar ccdRadius0 = convexbody->getCcdSweptSphereRadius();
- rayAabbMin -= btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
- rayAabbMax += btVector3(ccdRadius0, ccdRadius0, ccdRadius0);
-
- btScalar curHitFraction = btScalar(1.); //is this available?
- LocalTriangleSphereCastCallback raycastCallback(convexFromLocal, convexToLocal,
- convexbody->getCcdSweptSphereRadius(), curHitFraction);
-
- raycastCallback.m_hitFraction = convexbody->getHitFraction();
-
- btCollisionObject* concavebody = triBody;
-
- btConcaveShape* triangleMesh = (btConcaveShape*)concavebody->getCollisionShape();
-
- if (triangleMesh)
- {
- triangleMesh->processAllTriangles(&raycastCallback, rayAabbMin, rayAabbMax);
- }
-
- if (raycastCallback.m_hitFraction < convexbody->getHitFraction())
- {
- convexbody->setHitFraction(raycastCallback.m_hitFraction);
- return raycastCallback.m_hitFraction;
- }
- }
-
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h b/thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h
deleted file mode 100644
index 3adedbd805..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyConcaveCollisionAlgorithm.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_BODY_CONCAVE_COLLISION_ALGORITHM_H
-#define BT_SOFT_BODY_CONCAVE_COLLISION_ALGORITHM_H
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/CollisionShapes/btTriangleCallback.h"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.h"
-class btDispatcher;
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-class btSoftBody;
-class btCollisionShape;
-
-#include "LinearMath/btHashMap.h"
-
-#include "BulletCollision/BroadphaseCollision/btQuantizedBvh.h" //for definition of MAX_NUM_PARTS_IN_BITS
-
-struct btTriIndex
-{
- int m_PartIdTriangleIndex;
- class btCollisionShape* m_childShape;
-
- btTriIndex(int partId, int triangleIndex, btCollisionShape* shape)
- {
- m_PartIdTriangleIndex = (partId << (31 - MAX_NUM_PARTS_IN_BITS)) | triangleIndex;
- m_childShape = shape;
- }
-
- int getTriangleIndex() const
- {
- // Get only the lower bits where the triangle index is stored
- unsigned int x = 0;
- unsigned int y = (~(x & 0)) << (31 - MAX_NUM_PARTS_IN_BITS);
- return (m_PartIdTriangleIndex & ~(y));
- }
- int getPartId() const
- {
- // Get only the highest bits where the part index is stored
- return (m_PartIdTriangleIndex >> (31 - MAX_NUM_PARTS_IN_BITS));
- }
- int getUid() const
- {
- return m_PartIdTriangleIndex;
- }
-};
-
-///For each triangle in the concave mesh that overlaps with the AABB of a soft body (m_softBody), processTriangle is called.
-class btSoftBodyTriangleCallback : public btTriangleCallback
-{
- btSoftBody* m_softBody;
- const btCollisionObject* m_triBody;
-
- btVector3 m_aabbMin;
- btVector3 m_aabbMax;
-
- btManifoldResult* m_resultOut;
-
- btDispatcher* m_dispatcher;
- const btDispatcherInfo* m_dispatchInfoPtr;
- btScalar m_collisionMarginTriangle;
-
- btHashMap<btHashKey<btTriIndex>, btTriIndex> m_shapeCache;
-
-public:
- int m_triangleCount;
-
- // btPersistentManifold* m_manifoldPtr;
-
- btSoftBodyTriangleCallback(btDispatcher* dispatcher, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- void setTimeStepAndCounters(btScalar collisionMarginTriangle, const btCollisionObjectWrapper* triObjWrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual ~btSoftBodyTriangleCallback();
-
- virtual void processTriangle(btVector3* triangle, int partId, int triangleIndex);
-
- void clearCache();
-
- SIMD_FORCE_INLINE const btVector3& getAabbMin() const
- {
- return m_aabbMin;
- }
- SIMD_FORCE_INLINE const btVector3& getAabbMax() const
- {
- return m_aabbMax;
- }
-};
-
-/// btSoftBodyConcaveCollisionAlgorithm supports collision between soft body shapes and (concave) trianges meshes.
-class btSoftBodyConcaveCollisionAlgorithm : public btCollisionAlgorithm
-{
- bool m_isSwapped;
-
- btSoftBodyTriangleCallback m_btSoftBodyTriangleCallback;
-
-public:
- btSoftBodyConcaveCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, bool isSwapped);
-
- virtual ~btSoftBodyConcaveCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- //we don't add any manifolds
- }
-
- void clearCache();
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSoftBodyConcaveCollisionAlgorithm));
- return new (mem) btSoftBodyConcaveCollisionAlgorithm(ci, body0Wrap, body1Wrap, false);
- }
- };
-
- struct SwappedCreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSoftBodyConcaveCollisionAlgorithm));
- return new (mem) btSoftBodyConcaveCollisionAlgorithm(ci, body0Wrap, body1Wrap, true);
- }
- };
-};
-
-#endif //BT_SOFT_BODY_CONCAVE_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyData.h b/thirdparty/bullet/BulletSoftBody/btSoftBodyData.h
deleted file mode 100644
index cec6f401ec..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyData.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFTBODY_FLOAT_DATA
-#define BT_SOFTBODY_FLOAT_DATA
-
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-
-struct SoftBodyMaterialData
-{
- float m_linearStiffness;
- float m_angularStiffness;
- float m_volumeStiffness;
- int m_flags;
-};
-
-struct SoftBodyNodeData
-{
- SoftBodyMaterialData *m_material;
- btVector3FloatData m_position;
- btVector3FloatData m_previousPosition;
- btVector3FloatData m_velocity;
- btVector3FloatData m_accumulatedForce;
- btVector3FloatData m_normal;
- float m_inverseMass;
- float m_area;
- int m_attach;
- int m_pad;
-};
-
-struct SoftBodyLinkData
-{
- SoftBodyMaterialData *m_material;
- int m_nodeIndices[2]; // Node pointers
- float m_restLength; // Rest length
- int m_bbending; // Bending link
-};
-
-struct SoftBodyFaceData
-{
- btVector3FloatData m_normal; // Normal
- SoftBodyMaterialData *m_material;
- int m_nodeIndices[3]; // Node pointers
- float m_restArea; // Rest area
-};
-
-struct SoftBodyTetraData
-{
- btVector3FloatData m_c0[4]; // gradients
- SoftBodyMaterialData *m_material;
- int m_nodeIndices[4]; // Node pointers
- float m_restVolume; // Rest volume
- float m_c1; // (4*kVST)/(im0+im1+im2+im3)
- float m_c2; // m_c1/sum(|g0..3|^2)
- int m_pad;
-};
-
-struct SoftRigidAnchorData
-{
- btMatrix3x3FloatData m_c0; // Impulse matrix
- btVector3FloatData m_c1; // Relative anchor
- btVector3FloatData m_localFrame; // Anchor position in body space
- btRigidBodyData *m_rigidBody;
- int m_nodeIndex; // Node pointer
- float m_c2; // ima*dt
-};
-
-struct SoftBodyConfigData
-{
- int m_aeroModel; // Aerodynamic model (default: V_Point)
- float m_baumgarte; // Velocities correction factor (Baumgarte)
- float m_damping; // Damping coefficient [0,1]
- float m_drag; // Drag coefficient [0,+inf]
- float m_lift; // Lift coefficient [0,+inf]
- float m_pressure; // Pressure coefficient [-inf,+inf]
- float m_volume; // Volume conversation coefficient [0,+inf]
- float m_dynamicFriction; // Dynamic friction coefficient [0,1]
- float m_poseMatch; // Pose matching coefficient [0,1]
- float m_rigidContactHardness; // Rigid contacts hardness [0,1]
- float m_kineticContactHardness; // Kinetic contacts hardness [0,1]
- float m_softContactHardness; // Soft contacts hardness [0,1]
- float m_anchorHardness; // Anchors hardness [0,1]
- float m_softRigidClusterHardness; // Soft vs rigid hardness [0,1] (cluster only)
- float m_softKineticClusterHardness; // Soft vs kinetic hardness [0,1] (cluster only)
- float m_softSoftClusterHardness; // Soft vs soft hardness [0,1] (cluster only)
- float m_softRigidClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only)
- float m_softKineticClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only)
- float m_softSoftClusterImpulseSplit; // Soft vs rigid impulse split [0,1] (cluster only)
- float m_maxVolume; // Maximum volume ratio for pose
- float m_timeScale; // Time scale
- int m_velocityIterations; // Velocities solver iterations
- int m_positionIterations; // Positions solver iterations
- int m_driftIterations; // Drift solver iterations
- int m_clusterIterations; // Cluster solver iterations
- int m_collisionFlags; // Collisions flags
-};
-
-struct SoftBodyPoseData
-{
- btMatrix3x3FloatData m_rot; // Rotation
- btMatrix3x3FloatData m_scale; // Scale
- btMatrix3x3FloatData m_aqq; // Base scaling
- btVector3FloatData m_com; // COM
-
- btVector3FloatData *m_positions; // Reference positions
- float *m_weights; // Weights
- int m_numPositions;
- int m_numWeigts;
-
- int m_bvolume; // Is valid
- int m_bframe; // Is frame
- float m_restVolume; // Rest volume
- int m_pad;
-};
-
-struct SoftBodyClusterData
-{
- btTransformFloatData m_framexform;
- btMatrix3x3FloatData m_locii;
- btMatrix3x3FloatData m_invwi;
- btVector3FloatData m_com;
- btVector3FloatData m_vimpulses[2];
- btVector3FloatData m_dimpulses[2];
- btVector3FloatData m_lv;
- btVector3FloatData m_av;
-
- btVector3FloatData *m_framerefs;
- int *m_nodeIndices;
- float *m_masses;
-
- int m_numFrameRefs;
- int m_numNodes;
- int m_numMasses;
-
- float m_idmass;
- float m_imass;
- int m_nvimpulses;
- int m_ndimpulses;
- float m_ndamping;
- float m_ldamping;
- float m_adamping;
- float m_matching;
- float m_maxSelfCollisionImpulse;
- float m_selfCollisionImpulseFactor;
- int m_containsAnchor;
- int m_collide;
- int m_clusterIndex;
-};
-
-enum btSoftJointBodyType
-{
- BT_JOINT_SOFT_BODY_CLUSTER = 1,
- BT_JOINT_RIGID_BODY,
- BT_JOINT_COLLISION_OBJECT
-};
-
-struct btSoftBodyJointData
-{
- void *m_bodyA;
- void *m_bodyB;
- btVector3FloatData m_refs[2];
- float m_cfm;
- float m_erp;
- float m_split;
- int m_delete;
- btVector3FloatData m_relPosition[2]; //linear
- int m_bodyAtype;
- int m_bodyBtype;
- int m_jointType;
- int m_pad;
-};
-
-///do not change those serialization structures, it requires an updated sBulletDNAstr/sBulletDNAstr64
-struct btSoftBodyFloatData
-{
- btCollisionObjectFloatData m_collisionObjectData;
-
- SoftBodyPoseData *m_pose;
- SoftBodyMaterialData **m_materials;
- SoftBodyNodeData *m_nodes;
- SoftBodyLinkData *m_links;
- SoftBodyFaceData *m_faces;
- SoftBodyTetraData *m_tetrahedra;
- SoftRigidAnchorData *m_anchors;
- SoftBodyClusterData *m_clusters;
- btSoftBodyJointData *m_joints;
-
- int m_numMaterials;
- int m_numNodes;
- int m_numLinks;
- int m_numFaces;
- int m_numTetrahedra;
- int m_numAnchors;
- int m_numClusters;
- int m_numJoints;
- SoftBodyConfigData m_config;
-};
-
-#endif //BT_SOFTBODY_FLOAT_DATA
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.cpp b/thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.cpp
deleted file mode 100644
index f63e48f9a5..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.cpp
+++ /dev/null
@@ -1,1663 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btSoftBodyHelpers.cpp by Nathanael Presson
-
-#include "btSoftBodyInternals.h"
-#include <stdio.h>
-#include <string>
-#include <iostream>
-#include <sstream>
-#include <string.h>
-#include <algorithm>
-#include "btSoftBodyHelpers.h"
-#include "LinearMath/btConvexHull.h"
-#include "LinearMath/btConvexHullComputer.h"
-#include <map>
-#include <vector>
-
-static void drawVertex(btIDebugDraw* idraw,
- const btVector3& x, btScalar s, const btVector3& c)
-{
- idraw->drawLine(x - btVector3(s, 0, 0), x + btVector3(s, 0, 0), c);
- idraw->drawLine(x - btVector3(0, s, 0), x + btVector3(0, s, 0), c);
- idraw->drawLine(x - btVector3(0, 0, s), x + btVector3(0, 0, s), c);
-}
-
-//
-static void drawBox(btIDebugDraw* idraw,
- const btVector3& mins,
- const btVector3& maxs,
- const btVector3& color)
-{
- const btVector3 c[] = {btVector3(mins.x(), mins.y(), mins.z()),
- btVector3(maxs.x(), mins.y(), mins.z()),
- btVector3(maxs.x(), maxs.y(), mins.z()),
- btVector3(mins.x(), maxs.y(), mins.z()),
- btVector3(mins.x(), mins.y(), maxs.z()),
- btVector3(maxs.x(), mins.y(), maxs.z()),
- btVector3(maxs.x(), maxs.y(), maxs.z()),
- btVector3(mins.x(), maxs.y(), maxs.z())};
- idraw->drawLine(c[0], c[1], color);
- idraw->drawLine(c[1], c[2], color);
- idraw->drawLine(c[2], c[3], color);
- idraw->drawLine(c[3], c[0], color);
- idraw->drawLine(c[4], c[5], color);
- idraw->drawLine(c[5], c[6], color);
- idraw->drawLine(c[6], c[7], color);
- idraw->drawLine(c[7], c[4], color);
- idraw->drawLine(c[0], c[4], color);
- idraw->drawLine(c[1], c[5], color);
- idraw->drawLine(c[2], c[6], color);
- idraw->drawLine(c[3], c[7], color);
-}
-
-//
-static void drawTree(btIDebugDraw* idraw,
- const btDbvtNode* node,
- int depth,
- const btVector3& ncolor,
- const btVector3& lcolor,
- int mindepth,
- int maxdepth)
-{
- if (node)
- {
- if (node->isinternal() && ((depth < maxdepth) || (maxdepth < 0)))
- {
- drawTree(idraw, node->childs[0], depth + 1, ncolor, lcolor, mindepth, maxdepth);
- drawTree(idraw, node->childs[1], depth + 1, ncolor, lcolor, mindepth, maxdepth);
- }
- if (depth >= mindepth)
- {
- const btScalar scl = (btScalar)(node->isinternal() ? 1 : 1);
- const btVector3 mi = node->volume.Center() - node->volume.Extents() * scl;
- const btVector3 mx = node->volume.Center() + node->volume.Extents() * scl;
- drawBox(idraw, mi, mx, node->isleaf() ? lcolor : ncolor);
- }
- }
-}
-
-//
-template <typename T>
-static inline T sum(const btAlignedObjectArray<T>& items)
-{
- T v;
- if (items.size())
- {
- v = items[0];
- for (int i = 1, ni = items.size(); i < ni; ++i)
- {
- v += items[i];
- }
- }
- return (v);
-}
-
-//
-template <typename T, typename Q>
-static inline void add(btAlignedObjectArray<T>& items, const Q& value)
-{
- for (int i = 0, ni = items.size(); i < ni; ++i)
- {
- items[i] += value;
- }
-}
-
-//
-template <typename T, typename Q>
-static inline void mul(btAlignedObjectArray<T>& items, const Q& value)
-{
- for (int i = 0, ni = items.size(); i < ni; ++i)
- {
- items[i] *= value;
- }
-}
-
-//
-template <typename T>
-static inline T average(const btAlignedObjectArray<T>& items)
-{
- const btScalar n = (btScalar)(items.size() > 0 ? items.size() : 1);
- return (sum(items) / n);
-}
-
-#if 0
-//
- inline static btScalar tetravolume(const btVector3& x0,
- const btVector3& x1,
- const btVector3& x2,
- const btVector3& x3)
-{
- const btVector3 a=x1-x0;
- const btVector3 b=x2-x0;
- const btVector3 c=x3-x0;
- return(btDot(a,btCross(b,c)));
-}
-#endif
-
-//
-#if 0
-static btVector3 stresscolor(btScalar stress)
-{
- static const btVector3 spectrum[]= { btVector3(1,0,1),
- btVector3(0,0,1),
- btVector3(0,1,1),
- btVector3(0,1,0),
- btVector3(1,1,0),
- btVector3(1,0,0),
- btVector3(1,0,0)};
- static const int ncolors=sizeof(spectrum)/sizeof(spectrum[0])-1;
- static const btScalar one=1;
- stress=btMax<btScalar>(0,btMin<btScalar>(1,stress))*ncolors;
- const int sel=(int)stress;
- const btScalar frc=stress-sel;
- return(spectrum[sel]+(spectrum[sel+1]-spectrum[sel])*frc);
-}
-#endif
-
-//
-void btSoftBodyHelpers::Draw(btSoftBody* psb,
- btIDebugDraw* idraw,
- int drawflags)
-{
- const btScalar scl = (btScalar)0.1;
- const btScalar nscl = scl * 5;
- const btVector3 lcolor = btVector3(0, 0, 0);
- const btVector3 ncolor = btVector3(1, 1, 1);
- const btVector3 ccolor = btVector3(1, 0, 0);
- int i, j, nj;
-
- /* Clusters */
- if (0 != (drawflags & fDrawFlags::Clusters))
- {
- srand(1806);
- for (i = 0; i < psb->m_clusters.size(); ++i)
- {
- if (psb->m_clusters[i]->m_collide)
- {
- btVector3 color(rand() / (btScalar)RAND_MAX,
- rand() / (btScalar)RAND_MAX,
- rand() / (btScalar)RAND_MAX);
- color = color.normalized() * 0.75;
- btAlignedObjectArray<btVector3> vertices;
- vertices.resize(psb->m_clusters[i]->m_nodes.size());
- for (j = 0, nj = vertices.size(); j < nj; ++j)
- {
- vertices[j] = psb->m_clusters[i]->m_nodes[j]->m_x;
- }
-#define USE_NEW_CONVEX_HULL_COMPUTER
-#ifdef USE_NEW_CONVEX_HULL_COMPUTER
- btConvexHullComputer computer;
- int stride = sizeof(btVector3);
- int count = vertices.size();
- btScalar shrink = 0.f;
- btScalar shrinkClamp = 0.f;
- computer.compute(&vertices[0].getX(), stride, count, shrink, shrinkClamp);
- for (int i = 0; i < computer.faces.size(); i++)
- {
- int face = computer.faces[i];
- //printf("face=%d\n",face);
- const btConvexHullComputer::Edge* firstEdge = &computer.edges[face];
- const btConvexHullComputer::Edge* edge = firstEdge->getNextEdgeOfFace();
-
- int v0 = firstEdge->getSourceVertex();
- int v1 = firstEdge->getTargetVertex();
- while (edge != firstEdge)
- {
- int v2 = edge->getTargetVertex();
- idraw->drawTriangle(computer.vertices[v0], computer.vertices[v1], computer.vertices[v2], color, 1);
- edge = edge->getNextEdgeOfFace();
- v0 = v1;
- v1 = v2;
- };
- }
-#else
-
- HullDesc hdsc(QF_TRIANGLES, vertices.size(), &vertices[0]);
- HullResult hres;
- HullLibrary hlib;
- hdsc.mMaxVertices = vertices.size();
- hlib.CreateConvexHull(hdsc, hres);
- const btVector3 center = average(hres.m_OutputVertices);
- add(hres.m_OutputVertices, -center);
- mul(hres.m_OutputVertices, (btScalar)1);
- add(hres.m_OutputVertices, center);
- for (j = 0; j < (int)hres.mNumFaces; ++j)
- {
- const int idx[] = {hres.m_Indices[j * 3 + 0], hres.m_Indices[j * 3 + 1], hres.m_Indices[j * 3 + 2]};
- idraw->drawTriangle(hres.m_OutputVertices[idx[0]],
- hres.m_OutputVertices[idx[1]],
- hres.m_OutputVertices[idx[2]],
- color, 1);
- }
- hlib.ReleaseResult(hres);
-#endif
- }
- /* Velocities */
-#if 0
- for(int j=0;j<psb->m_clusters[i].m_nodes.size();++j)
- {
- const btSoftBody::Cluster& c=psb->m_clusters[i];
- const btVector3 r=c.m_nodes[j]->m_x-c.m_com;
- const btVector3 v=c.m_lv+btCross(c.m_av,r);
- idraw->drawLine(c.m_nodes[j]->m_x,c.m_nodes[j]->m_x+v,btVector3(1,0,0));
- }
-#endif
- /* Frame */
- // btSoftBody::Cluster& c=*psb->m_clusters[i];
- // idraw->drawLine(c.m_com,c.m_framexform*btVector3(10,0,0),btVector3(1,0,0));
- // idraw->drawLine(c.m_com,c.m_framexform*btVector3(0,10,0),btVector3(0,1,0));
- // idraw->drawLine(c.m_com,c.m_framexform*btVector3(0,0,10),btVector3(0,0,1));
- }
- }
- else
- {
- /* Nodes */
- if (0 != (drawflags & fDrawFlags::Nodes))
- {
- for (i = 0; i < psb->m_nodes.size(); ++i)
- {
- const btSoftBody::Node& n = psb->m_nodes[i];
- if (0 == (n.m_material->m_flags & btSoftBody::fMaterial::DebugDraw)) continue;
- idraw->drawLine(n.m_x - btVector3(scl, 0, 0), n.m_x + btVector3(scl, 0, 0), btVector3(1, 0, 0));
- idraw->drawLine(n.m_x - btVector3(0, scl, 0), n.m_x + btVector3(0, scl, 0), btVector3(0, 1, 0));
- idraw->drawLine(n.m_x - btVector3(0, 0, scl), n.m_x + btVector3(0, 0, scl), btVector3(0, 0, 1));
- }
- }
- /* Links */
- if (0 != (drawflags & fDrawFlags::Links))
- {
- for (i = 0; i < psb->m_links.size(); ++i)
- {
- const btSoftBody::Link& l = psb->m_links[i];
- if (0 == (l.m_material->m_flags & btSoftBody::fMaterial::DebugDraw)) continue;
- idraw->drawLine(l.m_n[0]->m_x, l.m_n[1]->m_x, lcolor);
- }
- }
- /* Normals */
- if (0 != (drawflags & fDrawFlags::Normals))
- {
- for (i = 0; i < psb->m_nodes.size(); ++i)
- {
- const btSoftBody::Node& n = psb->m_nodes[i];
- if (0 == (n.m_material->m_flags & btSoftBody::fMaterial::DebugDraw)) continue;
- const btVector3 d = n.m_n * nscl;
- idraw->drawLine(n.m_x, n.m_x + d, ncolor);
- idraw->drawLine(n.m_x, n.m_x - d, ncolor * 0.5);
- }
- }
- /* Contacts */
- if (0 != (drawflags & fDrawFlags::Contacts))
- {
- static const btVector3 axis[] = {btVector3(1, 0, 0),
- btVector3(0, 1, 0),
- btVector3(0, 0, 1)};
- for (i = 0; i < psb->m_rcontacts.size(); ++i)
- {
- const btSoftBody::RContact& c = psb->m_rcontacts[i];
- const btVector3 o = c.m_node->m_x - c.m_cti.m_normal *
- (btDot(c.m_node->m_x, c.m_cti.m_normal) + c.m_cti.m_offset);
- const btVector3 x = btCross(c.m_cti.m_normal, axis[c.m_cti.m_normal.minAxis()]).normalized();
- const btVector3 y = btCross(x, c.m_cti.m_normal).normalized();
- idraw->drawLine(o - x * nscl, o + x * nscl, ccolor);
- idraw->drawLine(o - y * nscl, o + y * nscl, ccolor);
- idraw->drawLine(o, o + c.m_cti.m_normal * nscl * 3, btVector3(1, 1, 0));
- }
- }
- /* Faces */
- if (0 != (drawflags & fDrawFlags::Faces))
- {
- const btScalar scl = (btScalar)0.8;
- const btScalar alp = (btScalar)1;
- const btVector3 col(0, (btScalar)0.7, 0);
- for (i = 0; i < psb->m_faces.size(); ++i)
- {
- const btSoftBody::Face& f = psb->m_faces[i];
- if (0 == (f.m_material->m_flags & btSoftBody::fMaterial::DebugDraw)) continue;
- const btVector3 x[] = {f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x};
- const btVector3 c = (x[0] + x[1] + x[2]) / 3;
- idraw->drawTriangle((x[0] - c) * scl + c,
- (x[1] - c) * scl + c,
- (x[2] - c) * scl + c,
- col, alp);
- }
- }
- /* Tetras */
- if (0 != (drawflags & fDrawFlags::Tetras))
- {
- const btScalar scl = (btScalar)0.8;
- const btScalar alp = (btScalar)1;
- const btVector3 col((btScalar)0.3, (btScalar)0.3, (btScalar)0.7);
- for (int i = 0; i < psb->m_tetras.size(); ++i)
- {
- const btSoftBody::Tetra& t = psb->m_tetras[i];
- if (0 == (t.m_material->m_flags & btSoftBody::fMaterial::DebugDraw)) continue;
- const btVector3 x[] = {t.m_n[0]->m_x, t.m_n[1]->m_x, t.m_n[2]->m_x, t.m_n[3]->m_x};
- const btVector3 c = (x[0] + x[1] + x[2] + x[3]) / 4;
- idraw->drawTriangle((x[0] - c) * scl + c, (x[1] - c) * scl + c, (x[2] - c) * scl + c, col, alp);
- idraw->drawTriangle((x[0] - c) * scl + c, (x[1] - c) * scl + c, (x[3] - c) * scl + c, col, alp);
- idraw->drawTriangle((x[1] - c) * scl + c, (x[2] - c) * scl + c, (x[3] - c) * scl + c, col, alp);
- idraw->drawTriangle((x[2] - c) * scl + c, (x[0] - c) * scl + c, (x[3] - c) * scl + c, col, alp);
- }
- }
- }
- /* Anchors */
- if (0 != (drawflags & fDrawFlags::Anchors))
- {
- for (i = 0; i < psb->m_anchors.size(); ++i)
- {
- const btSoftBody::Anchor& a = psb->m_anchors[i];
- const btVector3 q = a.m_body->getWorldTransform() * a.m_local;
- drawVertex(idraw, a.m_node->m_x, 0.25, btVector3(1, 0, 0));
- drawVertex(idraw, q, 0.25, btVector3(0, 1, 0));
- idraw->drawLine(a.m_node->m_x, q, btVector3(1, 1, 1));
- }
- for (i = 0; i < psb->m_nodes.size(); ++i)
- {
- const btSoftBody::Node& n = psb->m_nodes[i];
- if (0 == (n.m_material->m_flags & btSoftBody::fMaterial::DebugDraw)) continue;
- if (n.m_im <= 0)
- {
- drawVertex(idraw, n.m_x, 0.25, btVector3(1, 0, 0));
- }
- }
- }
-
- /* Notes */
- if (0 != (drawflags & fDrawFlags::Notes))
- {
- for (i = 0; i < psb->m_notes.size(); ++i)
- {
- const btSoftBody::Note& n = psb->m_notes[i];
- btVector3 p = n.m_offset;
- for (int j = 0; j < n.m_rank; ++j)
- {
- p += n.m_nodes[j]->m_x * n.m_coords[j];
- }
- idraw->draw3dText(p, n.m_text);
- }
- }
- /* Node tree */
- if (0 != (drawflags & fDrawFlags::NodeTree)) DrawNodeTree(psb, idraw);
- /* Face tree */
- if (0 != (drawflags & fDrawFlags::FaceTree)) DrawFaceTree(psb, idraw);
- /* Cluster tree */
- if (0 != (drawflags & fDrawFlags::ClusterTree)) DrawClusterTree(psb, idraw);
- /* Joints */
- if (0 != (drawflags & fDrawFlags::Joints))
- {
- for (i = 0; i < psb->m_joints.size(); ++i)
- {
- const btSoftBody::Joint* pj = psb->m_joints[i];
- switch (pj->Type())
- {
- case btSoftBody::Joint::eType::Linear:
- {
- const btSoftBody::LJoint* pjl = (const btSoftBody::LJoint*)pj;
- const btVector3 a0 = pj->m_bodies[0].xform() * pjl->m_refs[0];
- const btVector3 a1 = pj->m_bodies[1].xform() * pjl->m_refs[1];
- idraw->drawLine(pj->m_bodies[0].xform().getOrigin(), a0, btVector3(1, 1, 0));
- idraw->drawLine(pj->m_bodies[1].xform().getOrigin(), a1, btVector3(0, 1, 1));
- drawVertex(idraw, a0, 0.25, btVector3(1, 1, 0));
- drawVertex(idraw, a1, 0.25, btVector3(0, 1, 1));
- }
- break;
- case btSoftBody::Joint::eType::Angular:
- {
- //const btSoftBody::AJoint* pja=(const btSoftBody::AJoint*)pj;
- const btVector3 o0 = pj->m_bodies[0].xform().getOrigin();
- const btVector3 o1 = pj->m_bodies[1].xform().getOrigin();
- const btVector3 a0 = pj->m_bodies[0].xform().getBasis() * pj->m_refs[0];
- const btVector3 a1 = pj->m_bodies[1].xform().getBasis() * pj->m_refs[1];
- idraw->drawLine(o0, o0 + a0 * 10, btVector3(1, 1, 0));
- idraw->drawLine(o0, o0 + a1 * 10, btVector3(1, 1, 0));
- idraw->drawLine(o1, o1 + a0 * 10, btVector3(0, 1, 1));
- idraw->drawLine(o1, o1 + a1 * 10, btVector3(0, 1, 1));
- break;
- }
- default:
- {
- }
- }
- }
- }
-}
-
-//
-void btSoftBodyHelpers::DrawInfos(btSoftBody* psb,
- btIDebugDraw* idraw,
- bool masses,
- bool areas,
- bool /*stress*/)
-{
- for (int i = 0; i < psb->m_nodes.size(); ++i)
- {
- const btSoftBody::Node& n = psb->m_nodes[i];
- char text[2048] = {0};
- char buff[1024];
- if (masses)
- {
- sprintf(buff, " M(%.2f)", 1 / n.m_im);
- strcat(text, buff);
- }
- if (areas)
- {
- sprintf(buff, " A(%.2f)", n.m_area);
- strcat(text, buff);
- }
- if (text[0]) idraw->draw3dText(n.m_x, text);
- }
-}
-
-//
-void btSoftBodyHelpers::DrawNodeTree(btSoftBody* psb,
- btIDebugDraw* idraw,
- int mindepth,
- int maxdepth)
-{
- drawTree(idraw, psb->m_ndbvt.m_root, 0, btVector3(1, 0, 1), btVector3(1, 1, 1), mindepth, maxdepth);
-}
-
-//
-void btSoftBodyHelpers::DrawFaceTree(btSoftBody* psb,
- btIDebugDraw* idraw,
- int mindepth,
- int maxdepth)
-{
- drawTree(idraw, psb->m_fdbvt.m_root, 0, btVector3(0, 1, 0), btVector3(1, 0, 0), mindepth, maxdepth);
-}
-
-//
-void btSoftBodyHelpers::DrawClusterTree(btSoftBody* psb,
- btIDebugDraw* idraw,
- int mindepth,
- int maxdepth)
-{
- drawTree(idraw, psb->m_cdbvt.m_root, 0, btVector3(0, 1, 1), btVector3(1, 0, 0), mindepth, maxdepth);
-}
-
-//The btSoftBody object from the BulletSDK includes an array of Nodes and Links. These links appear
-// to be first set up to connect a node to between 5 and 6 of its neighbors [480 links],
-//and then to the rest of the nodes after the execution of the Floyd-Warshall graph algorithm
-//[another 930 links].
-//The way the links are stored by default, we have a number of cases where adjacent links share a node in common
-// - this leads to the creation of a data dependency through memory.
-//The PSolve_Links() function reads and writes nodes as it iterates over each link.
-//So, we now have the possibility of a data dependency between iteration X
-//that processes link L with iteration X+1 that processes link L+1
-//because L and L+1 have one node in common, and iteration X updates the positions of that node,
-//and iteration X+1 reads in the position of that shared node.
-//
-//Such a memory dependency limits the ability of a modern CPU to speculate beyond
-//a certain point because it has to respect a possible dependency
-//- this prevents the CPU from making full use of its out-of-order resources.
-//If we re-order the links such that we minimize the cases where a link L and L+1 share a common node,
-//we create a temporal gap between when the node position is written,
-//and when it is subsequently read. This in turn allows the CPU to continue execution without
-//risking a dependency violation. Such a reordering would result in significant speedups on
-//modern CPUs with lots of execution resources.
-//In our testing, we see it have a tremendous impact not only on the A7,
-//but also on all x86 cores that ship with modern Macs.
-//The attached source file includes a single function (ReoptimizeLinkOrder) which can be called on a
-//btSoftBody object in the solveConstraints() function before the actual solver is invoked,
-//or right after generateBendingConstraints() once we have all 1410 links.
-
-//===================================================================
-//
-//
-// This function takes in a list of interdependent Links and tries
-// to maximize the distance between calculation
-// of dependent links. This increases the amount of parallelism that can
-// be exploited by out-of-order instruction processors with large but
-// (inevitably) finite instruction windows.
-//
-//===================================================================
-
-// A small structure to track lists of dependent link calculations
-class LinkDeps_t
-{
-public:
- int value; // A link calculation that is dependent on this one
- // Positive values = "input A" while negative values = "input B"
- LinkDeps_t* next; // Next dependence in the list
-};
-typedef LinkDeps_t* LinkDepsPtr_t;
-
-// Dependency list constants
-#define REOP_NOT_DEPENDENT -1
-#define REOP_NODE_COMPLETE -2 // Must be less than REOP_NOT_DEPENDENT
-
-void btSoftBodyHelpers::ReoptimizeLinkOrder(btSoftBody* psb /* This can be replaced by a btSoftBody pointer */)
-{
- int i, nLinks = psb->m_links.size(), nNodes = psb->m_nodes.size();
- btSoftBody::Link* lr;
- int ar, br;
- btSoftBody::Node* node0 = &(psb->m_nodes[0]);
- btSoftBody::Node* node1 = &(psb->m_nodes[1]);
- LinkDepsPtr_t linkDep;
- int readyListHead, readyListTail, linkNum, linkDepFrees, depLink;
-
- // Allocate temporary buffers
- int* nodeWrittenAt = new int[nNodes + 1]; // What link calculation produced this node's current values?
- int* linkDepA = new int[nLinks]; // Link calculation input is dependent upon prior calculation #N
- int* linkDepB = new int[nLinks];
- int* readyList = new int[nLinks]; // List of ready-to-process link calculations (# of links, maximum)
- LinkDeps_t* linkDepFreeList = new LinkDeps_t[2 * nLinks]; // Dependent-on-me list elements (2x# of links, maximum)
- LinkDepsPtr_t* linkDepListStarts = new LinkDepsPtr_t[nLinks]; // Start nodes of dependent-on-me lists, one for each link
-
- // Copy the original, unsorted links to a side buffer
- btSoftBody::Link* linkBuffer = new btSoftBody::Link[nLinks];
- memcpy(linkBuffer, &(psb->m_links[0]), sizeof(btSoftBody::Link) * nLinks);
-
- // Clear out the node setup and ready list
- for (i = 0; i < nNodes + 1; i++)
- {
- nodeWrittenAt[i] = REOP_NOT_DEPENDENT;
- }
- for (i = 0; i < nLinks; i++)
- {
- linkDepListStarts[i] = NULL;
- }
- readyListHead = readyListTail = linkDepFrees = 0;
-
- // Initial link analysis to set up data structures
- for (i = 0; i < nLinks; i++)
- {
- // Note which prior link calculations we are dependent upon & build up dependence lists
- lr = &(psb->m_links[i]);
- ar = (lr->m_n[0] - node0) / (node1 - node0);
- br = (lr->m_n[1] - node0) / (node1 - node0);
- if (nodeWrittenAt[ar] > REOP_NOT_DEPENDENT)
- {
- linkDepA[i] = nodeWrittenAt[ar];
- linkDep = &linkDepFreeList[linkDepFrees++];
- linkDep->value = i;
- linkDep->next = linkDepListStarts[nodeWrittenAt[ar]];
- linkDepListStarts[nodeWrittenAt[ar]] = linkDep;
- }
- else
- {
- linkDepA[i] = REOP_NOT_DEPENDENT;
- }
- if (nodeWrittenAt[br] > REOP_NOT_DEPENDENT)
- {
- linkDepB[i] = nodeWrittenAt[br];
- linkDep = &linkDepFreeList[linkDepFrees++];
- linkDep->value = -(i + 1);
- linkDep->next = linkDepListStarts[nodeWrittenAt[br]];
- linkDepListStarts[nodeWrittenAt[br]] = linkDep;
- }
- else
- {
- linkDepB[i] = REOP_NOT_DEPENDENT;
- }
-
- // Add this link to the initial ready list, if it is not dependent on any other links
- if ((linkDepA[i] == REOP_NOT_DEPENDENT) && (linkDepB[i] == REOP_NOT_DEPENDENT))
- {
- readyList[readyListTail++] = i;
- linkDepA[i] = linkDepB[i] = REOP_NODE_COMPLETE; // Probably not needed now
- }
-
- // Update the nodes to mark which ones are calculated by this link
- nodeWrittenAt[ar] = nodeWrittenAt[br] = i;
- }
-
- // Process the ready list and create the sorted list of links
- // -- By treating the ready list as a queue, we maximize the distance between any
- // inter-dependent node calculations
- // -- All other (non-related) nodes in the ready list will automatically be inserted
- // in between each set of inter-dependent link calculations by this loop
- i = 0;
- while (readyListHead != readyListTail)
- {
- // Use ready list to select the next link to process
- linkNum = readyList[readyListHead++];
- // Copy the next-to-calculate link back into the original link array
- psb->m_links[i++] = linkBuffer[linkNum];
-
- // Free up any link inputs that are dependent on this one
- linkDep = linkDepListStarts[linkNum];
- while (linkDep)
- {
- depLink = linkDep->value;
- if (depLink >= 0)
- {
- linkDepA[depLink] = REOP_NOT_DEPENDENT;
- }
- else
- {
- depLink = -depLink - 1;
- linkDepB[depLink] = REOP_NOT_DEPENDENT;
- }
- // Add this dependent link calculation to the ready list if *both* inputs are clear
- if ((linkDepA[depLink] == REOP_NOT_DEPENDENT) && (linkDepB[depLink] == REOP_NOT_DEPENDENT))
- {
- readyList[readyListTail++] = depLink;
- linkDepA[depLink] = linkDepB[depLink] = REOP_NODE_COMPLETE; // Probably not needed now
- }
- linkDep = linkDep->next;
- }
- }
-
- // Delete the temporary buffers
- delete[] nodeWrittenAt;
- delete[] linkDepA;
- delete[] linkDepB;
- delete[] readyList;
- delete[] linkDepFreeList;
- delete[] linkDepListStarts;
- delete[] linkBuffer;
-}
-
-//
-void btSoftBodyHelpers::DrawFrame(btSoftBody* psb,
- btIDebugDraw* idraw)
-{
- if (psb->m_pose.m_bframe)
- {
- static const btScalar ascl = 10;
- static const btScalar nscl = (btScalar)0.1;
- const btVector3 com = psb->m_pose.m_com;
- const btMatrix3x3 trs = psb->m_pose.m_rot * psb->m_pose.m_scl;
- const btVector3 Xaxis = (trs * btVector3(1, 0, 0)).normalized();
- const btVector3 Yaxis = (trs * btVector3(0, 1, 0)).normalized();
- const btVector3 Zaxis = (trs * btVector3(0, 0, 1)).normalized();
- idraw->drawLine(com, com + Xaxis * ascl, btVector3(1, 0, 0));
- idraw->drawLine(com, com + Yaxis * ascl, btVector3(0, 1, 0));
- idraw->drawLine(com, com + Zaxis * ascl, btVector3(0, 0, 1));
- for (int i = 0; i < psb->m_pose.m_pos.size(); ++i)
- {
- const btVector3 x = com + trs * psb->m_pose.m_pos[i];
- drawVertex(idraw, x, nscl, btVector3(1, 0, 1));
- }
- }
-}
-
-//
-btSoftBody* btSoftBodyHelpers::CreateRope(btSoftBodyWorldInfo& worldInfo, const btVector3& from,
- const btVector3& to,
- int res,
- int fixeds)
-{
- /* Create nodes */
- const int r = res + 2;
- btVector3* x = new btVector3[r];
- btScalar* m = new btScalar[r];
- int i;
-
- for (i = 0; i < r; ++i)
- {
- const btScalar t = i / (btScalar)(r - 1);
- x[i] = lerp(from, to, t);
- m[i] = 1;
- }
- btSoftBody* psb = new btSoftBody(&worldInfo, r, x, m);
- if (fixeds & 1) psb->setMass(0, 0);
- if (fixeds & 2) psb->setMass(r - 1, 0);
- delete[] x;
- delete[] m;
- /* Create links */
- for (i = 1; i < r; ++i)
- {
- psb->appendLink(i - 1, i);
- }
- /* Finished */
- return (psb);
-}
-
-//
-btSoftBody* btSoftBodyHelpers::CreatePatch(btSoftBodyWorldInfo& worldInfo, const btVector3& corner00,
- const btVector3& corner10,
- const btVector3& corner01,
- const btVector3& corner11,
- int resx,
- int resy,
- int fixeds,
- bool gendiags,
- btScalar perturbation)
-{
-#define IDX(_x_, _y_) ((_y_)*rx + (_x_))
- /* Create nodes */
- if ((resx < 2) || (resy < 2)) return (0);
- const int rx = resx;
- const int ry = resy;
- const int tot = rx * ry;
- btVector3* x = new btVector3[tot];
- btScalar* m = new btScalar[tot];
- int iy;
-
- for (iy = 0; iy < ry; ++iy)
- {
- const btScalar ty = iy / (btScalar)(ry - 1);
- const btVector3 py0 = lerp(corner00, corner01, ty);
- const btVector3 py1 = lerp(corner10, corner11, ty);
- for (int ix = 0; ix < rx; ++ix)
- {
- const btScalar tx = ix / (btScalar)(rx - 1);
- btScalar pert = perturbation * btScalar(rand()) / RAND_MAX;
- btVector3 temp1 = py1;
- temp1.setY(py1.getY() + pert);
- btVector3 temp = py0;
- pert = perturbation * btScalar(rand()) / RAND_MAX;
- temp.setY(py0.getY() + pert);
- x[IDX(ix, iy)] = lerp(temp, temp1, tx);
- m[IDX(ix, iy)] = 1;
- }
- }
- btSoftBody* psb = new btSoftBody(&worldInfo, tot, x, m);
- if (fixeds & 1) psb->setMass(IDX(0, 0), 0);
- if (fixeds & 2) psb->setMass(IDX(rx - 1, 0), 0);
- if (fixeds & 4) psb->setMass(IDX(0, ry - 1), 0);
- if (fixeds & 8) psb->setMass(IDX(rx - 1, ry - 1), 0);
- delete[] x;
- delete[] m;
- /* Create links and faces */
- for (iy = 0; iy < ry; ++iy)
- {
- for (int ix = 0; ix < rx; ++ix)
- {
- const int idx = IDX(ix, iy);
- const bool mdx = (ix + 1) < rx;
- const bool mdy = (iy + 1) < ry;
- if (mdx) psb->appendLink(idx, IDX(ix + 1, iy));
- if (mdy) psb->appendLink(idx, IDX(ix, iy + 1));
- if (mdx && mdy)
- {
- if ((ix + iy) & 1)
- {
- psb->appendFace(IDX(ix, iy), IDX(ix + 1, iy), IDX(ix + 1, iy + 1));
- psb->appendFace(IDX(ix, iy), IDX(ix + 1, iy + 1), IDX(ix, iy + 1));
- if (gendiags)
- {
- psb->appendLink(IDX(ix, iy), IDX(ix + 1, iy + 1));
- }
- }
- else
- {
- psb->appendFace(IDX(ix, iy + 1), IDX(ix, iy), IDX(ix + 1, iy));
- psb->appendFace(IDX(ix, iy + 1), IDX(ix + 1, iy), IDX(ix + 1, iy + 1));
- if (gendiags)
- {
- psb->appendLink(IDX(ix + 1, iy), IDX(ix, iy + 1));
- }
- }
- }
- }
- }
- /* Finished */
-#undef IDX
- return (psb);
-}
-
-//
-btSoftBody* btSoftBodyHelpers::CreatePatchUV(btSoftBodyWorldInfo& worldInfo,
- const btVector3& corner00,
- const btVector3& corner10,
- const btVector3& corner01,
- const btVector3& corner11,
- int resx,
- int resy,
- int fixeds,
- bool gendiags,
- float* tex_coords)
-{
- /*
- *
- * corners:
- *
- * [0][0] corner00 ------- corner01 [resx][0]
- * | |
- * | |
- * [0][resy] corner10 -------- corner11 [resx][resy]
- *
- *
- *
- *
- *
- *
- * "fixedgs" map:
- *
- * corner00 --> +1
- * corner01 --> +2
- * corner10 --> +4
- * corner11 --> +8
- * upper middle --> +16
- * left middle --> +32
- * right middle --> +64
- * lower middle --> +128
- * center --> +256
- *
- *
- * tex_coords size (resx-1)*(resy-1)*12
- *
- *
- *
- * SINGLE QUAD INTERNALS
- *
- * 1) btSoftBody's nodes and links,
- * diagonal link is optional ("gendiags")
- *
- *
- * node00 ------ node01
- * | .
- * | .
- * | .
- * | .
- * | .
- * node10 node11
- *
- *
- *
- * 2) Faces:
- * two triangles,
- * UV Coordinates (hier example for single quad)
- *
- * (0,1) (0,1) (1,1)
- * 1 |\ 3 \-----| 2
- * | \ \ |
- * | \ \ |
- * | \ \ |
- * | \ \ |
- * 2 |-----\ 3 \| 1
- * (0,0) (1,0) (1,0)
- *
- *
- *
- *
- *
- *
- */
-
-#define IDX(_x_, _y_) ((_y_)*rx + (_x_))
- /* Create nodes */
- if ((resx < 2) || (resy < 2)) return (0);
- const int rx = resx;
- const int ry = resy;
- const int tot = rx * ry;
- btVector3* x = new btVector3[tot];
- btScalar* m = new btScalar[tot];
-
- int iy;
-
- for (iy = 0; iy < ry; ++iy)
- {
- const btScalar ty = iy / (btScalar)(ry - 1);
- const btVector3 py0 = lerp(corner00, corner01, ty);
- const btVector3 py1 = lerp(corner10, corner11, ty);
- for (int ix = 0; ix < rx; ++ix)
- {
- const btScalar tx = ix / (btScalar)(rx - 1);
- x[IDX(ix, iy)] = lerp(py0, py1, tx);
- m[IDX(ix, iy)] = 1;
- }
- }
- btSoftBody* psb = new btSoftBody(&worldInfo, tot, x, m);
- if (fixeds & 1) psb->setMass(IDX(0, 0), 0);
- if (fixeds & 2) psb->setMass(IDX(rx - 1, 0), 0);
- if (fixeds & 4) psb->setMass(IDX(0, ry - 1), 0);
- if (fixeds & 8) psb->setMass(IDX(rx - 1, ry - 1), 0);
- if (fixeds & 16) psb->setMass(IDX((rx - 1) / 2, 0), 0);
- if (fixeds & 32) psb->setMass(IDX(0, (ry - 1) / 2), 0);
- if (fixeds & 64) psb->setMass(IDX(rx - 1, (ry - 1) / 2), 0);
- if (fixeds & 128) psb->setMass(IDX((rx - 1) / 2, ry - 1), 0);
- if (fixeds & 256) psb->setMass(IDX((rx - 1) / 2, (ry - 1) / 2), 0);
- delete[] x;
- delete[] m;
-
- int z = 0;
- /* Create links and faces */
- for (iy = 0; iy < ry; ++iy)
- {
- for (int ix = 0; ix < rx; ++ix)
- {
- const bool mdx = (ix + 1) < rx;
- const bool mdy = (iy + 1) < ry;
-
- int node00 = IDX(ix, iy);
- int node01 = IDX(ix + 1, iy);
- int node10 = IDX(ix, iy + 1);
- int node11 = IDX(ix + 1, iy + 1);
-
- if (mdx) psb->appendLink(node00, node01);
- if (mdy) psb->appendLink(node00, node10);
- if (mdx && mdy)
- {
- psb->appendFace(node00, node10, node11);
- if (tex_coords)
- {
- tex_coords[z + 0] = CalculateUV(resx, resy, ix, iy, 0);
- tex_coords[z + 1] = CalculateUV(resx, resy, ix, iy, 1);
- tex_coords[z + 2] = CalculateUV(resx, resy, ix, iy, 0);
- tex_coords[z + 3] = CalculateUV(resx, resy, ix, iy, 2);
- tex_coords[z + 4] = CalculateUV(resx, resy, ix, iy, 3);
- tex_coords[z + 5] = CalculateUV(resx, resy, ix, iy, 2);
- }
- psb->appendFace(node11, node01, node00);
- if (tex_coords)
- {
- tex_coords[z + 6] = CalculateUV(resx, resy, ix, iy, 3);
- tex_coords[z + 7] = CalculateUV(resx, resy, ix, iy, 2);
- tex_coords[z + 8] = CalculateUV(resx, resy, ix, iy, 3);
- tex_coords[z + 9] = CalculateUV(resx, resy, ix, iy, 1);
- tex_coords[z + 10] = CalculateUV(resx, resy, ix, iy, 0);
- tex_coords[z + 11] = CalculateUV(resx, resy, ix, iy, 1);
- }
- if (gendiags) psb->appendLink(node00, node11);
- z += 12;
- }
- }
- }
- /* Finished */
-#undef IDX
- return (psb);
-}
-
-float btSoftBodyHelpers::CalculateUV(int resx, int resy, int ix, int iy, int id)
-{
- /*
- *
- *
- * node00 --- node01
- * | |
- * node10 --- node11
- *
- *
- * ID map:
- *
- * node00 s --> 0
- * node00 t --> 1
- *
- * node01 s --> 3
- * node01 t --> 1
- *
- * node10 s --> 0
- * node10 t --> 2
- *
- * node11 s --> 3
- * node11 t --> 2
- *
- *
- */
-
- float tc = 0.0f;
- if (id == 0)
- {
- tc = (1.0f / ((resx - 1)) * ix);
- }
- else if (id == 1)
- {
- tc = (1.0f / ((resy - 1)) * (resy - 1 - iy));
- }
- else if (id == 2)
- {
- tc = (1.0f / ((resy - 1)) * (resy - 1 - iy - 1));
- }
- else if (id == 3)
- {
- tc = (1.0f / ((resx - 1)) * (ix + 1));
- }
- return tc;
-}
-//
-btSoftBody* btSoftBodyHelpers::CreateEllipsoid(btSoftBodyWorldInfo& worldInfo, const btVector3& center,
- const btVector3& radius,
- int res)
-{
- struct Hammersley
- {
- static void Generate(btVector3* x, int n)
- {
- for (int i = 0; i < n; i++)
- {
- btScalar p = 0.5, t = 0;
- for (int j = i; j; p *= 0.5, j >>= 1)
- if (j & 1) t += p;
- btScalar w = 2 * t - 1;
- btScalar a = (SIMD_PI + 2 * i * SIMD_PI) / n;
- btScalar s = btSqrt(1 - w * w);
- *x++ = btVector3(s * btCos(a), s * btSin(a), w);
- }
- }
- };
- btAlignedObjectArray<btVector3> vtx;
- vtx.resize(3 + res);
- Hammersley::Generate(&vtx[0], vtx.size());
- for (int i = 0; i < vtx.size(); ++i)
- {
- vtx[i] = vtx[i] * radius + center;
- }
- return (CreateFromConvexHull(worldInfo, &vtx[0], vtx.size()));
-}
-
-//
-btSoftBody* btSoftBodyHelpers::CreateFromTriMesh(btSoftBodyWorldInfo& worldInfo, const btScalar* vertices,
- const int* triangles,
- int ntriangles, bool randomizeConstraints)
-{
- int maxidx = 0;
- int i, j, ni;
-
- for (i = 0, ni = ntriangles * 3; i < ni; ++i)
- {
- maxidx = btMax(triangles[i], maxidx);
- }
- ++maxidx;
- btAlignedObjectArray<bool> chks;
- btAlignedObjectArray<btVector3> vtx;
- chks.resize(maxidx * maxidx, false);
- vtx.resize(maxidx);
- for (i = 0, j = 0, ni = maxidx * 3; i < ni; ++j, i += 3)
- {
- vtx[j] = btVector3(vertices[i], vertices[i + 1], vertices[i + 2]);
- }
- btSoftBody* psb = new btSoftBody(&worldInfo, vtx.size(), &vtx[0], 0);
- for (i = 0, ni = ntriangles * 3; i < ni; i += 3)
- {
- const int idx[] = {triangles[i], triangles[i + 1], triangles[i + 2]};
-#define IDX(_x_, _y_) ((_y_)*maxidx + (_x_))
- for (int j = 2, k = 0; k < 3; j = k++)
- {
- if (!chks[IDX(idx[j], idx[k])])
- {
- chks[IDX(idx[j], idx[k])] = true;
- chks[IDX(idx[k], idx[j])] = true;
- psb->appendLink(idx[j], idx[k]);
- }
- }
-#undef IDX
- psb->appendFace(idx[0], idx[1], idx[2]);
- }
-
- if (randomizeConstraints)
- {
- psb->randomizeConstraints();
- }
-
- return (psb);
-}
-
-//
-btSoftBody* btSoftBodyHelpers::CreateFromConvexHull(btSoftBodyWorldInfo& worldInfo, const btVector3* vertices,
- int nvertices, bool randomizeConstraints)
-{
- HullDesc hdsc(QF_TRIANGLES, nvertices, vertices);
- HullResult hres;
- HullLibrary hlib; /*??*/
- hdsc.mMaxVertices = nvertices;
- hlib.CreateConvexHull(hdsc, hres);
- btSoftBody* psb = new btSoftBody(&worldInfo, (int)hres.mNumOutputVertices,
- &hres.m_OutputVertices[0], 0);
- for (int i = 0; i < (int)hres.mNumFaces; ++i)
- {
- const int idx[] = {static_cast<int>(hres.m_Indices[i * 3 + 0]),
- static_cast<int>(hres.m_Indices[i * 3 + 1]),
- static_cast<int>(hres.m_Indices[i * 3 + 2])};
- if (idx[0] < idx[1]) psb->appendLink(idx[0], idx[1]);
- if (idx[1] < idx[2]) psb->appendLink(idx[1], idx[2]);
- if (idx[2] < idx[0]) psb->appendLink(idx[2], idx[0]);
- psb->appendFace(idx[0], idx[1], idx[2]);
- }
- hlib.ReleaseResult(hres);
- if (randomizeConstraints)
- {
- psb->randomizeConstraints();
- }
- return (psb);
-}
-
-static int nextLine(const char* buffer)
-{
- int numBytesRead = 0;
-
- while (*buffer != '\n')
- {
- buffer++;
- numBytesRead++;
- }
-
- if (buffer[0] == 0x0a)
- {
- buffer++;
- numBytesRead++;
- }
- return numBytesRead;
-}
-
-/* Create from TetGen .ele, .face, .node data */
-btSoftBody* btSoftBodyHelpers::CreateFromTetGenData(btSoftBodyWorldInfo& worldInfo,
- const char* ele,
- const char* face,
- const char* node,
- bool bfacelinks,
- bool btetralinks,
- bool bfacesfromtetras)
-{
- btAlignedObjectArray<btVector3> pos;
- int nnode = 0;
- int ndims = 0;
- int nattrb = 0;
- int hasbounds = 0;
- int result = sscanf(node, "%d %d %d %d", &nnode, &ndims, &nattrb, &hasbounds);
- result = sscanf(node, "%d %d %d %d", &nnode, &ndims, &nattrb, &hasbounds);
- node += nextLine(node);
-
- pos.resize(nnode);
- for (int i = 0; i < pos.size(); ++i)
- {
- int index = 0;
- //int bound=0;
- float x, y, z;
- sscanf(node, "%d %f %f %f", &index, &x, &y, &z);
-
- // sn>>index;
- // sn>>x;sn>>y;sn>>z;
- node += nextLine(node);
-
- //for(int j=0;j<nattrb;++j)
- // sn>>a;
-
- //if(hasbounds)
- // sn>>bound;
-
- pos[index].setX(btScalar(x));
- pos[index].setY(btScalar(y));
- pos[index].setZ(btScalar(z));
- }
- btSoftBody* psb = new btSoftBody(&worldInfo, nnode, &pos[0], 0);
-#if 0
-if(face&&face[0])
- {
- int nface=0;
- sf>>nface;sf>>hasbounds;
- for(int i=0;i<nface;++i)
- {
- int index=0;
- int bound=0;
- int ni[3];
- sf>>index;
- sf>>ni[0];sf>>ni[1];sf>>ni[2];
- sf>>bound;
- psb->appendFace(ni[0],ni[1],ni[2]);
- if(btetralinks)
- {
- psb->appendLink(ni[0],ni[1],0,true);
- psb->appendLink(ni[1],ni[2],0,true);
- psb->appendLink(ni[2],ni[0],0,true);
- }
- }
- }
-#endif
-
- if (ele && ele[0])
- {
- int ntetra = 0;
- int ncorner = 0;
- int neattrb = 0;
- sscanf(ele, "%d %d %d", &ntetra, &ncorner, &neattrb);
- ele += nextLine(ele);
-
- //se>>ntetra;se>>ncorner;se>>neattrb;
- for (int i = 0; i < ntetra; ++i)
- {
- int index = 0;
- int ni[4];
-
- //se>>index;
- //se>>ni[0];se>>ni[1];se>>ni[2];se>>ni[3];
- sscanf(ele, "%d %d %d %d %d", &index, &ni[0], &ni[1], &ni[2], &ni[3]);
- ele += nextLine(ele);
- //for(int j=0;j<neattrb;++j)
- // se>>a;
- psb->appendTetra(ni[0], ni[1], ni[2], ni[3]);
- if (btetralinks)
- {
- psb->appendLink(ni[0], ni[1], 0, true);
- psb->appendLink(ni[1], ni[2], 0, true);
- psb->appendLink(ni[2], ni[0], 0, true);
- psb->appendLink(ni[0], ni[3], 0, true);
- psb->appendLink(ni[1], ni[3], 0, true);
- psb->appendLink(ni[2], ni[3], 0, true);
- }
- }
- }
- psb->initializeDmInverse();
- psb->m_tetraScratches.resize(psb->m_tetras.size());
- psb->m_tetraScratchesTn.resize(psb->m_tetras.size());
- printf("Nodes: %u\r\n", psb->m_nodes.size());
- printf("Links: %u\r\n", psb->m_links.size());
- printf("Faces: %u\r\n", psb->m_faces.size());
- printf("Tetras: %u\r\n", psb->m_tetras.size());
- return (psb);
-}
-
-btSoftBody* btSoftBodyHelpers::CreateFromVtkFile(btSoftBodyWorldInfo& worldInfo, const char* vtk_file)
-{
- std::ifstream fs;
- fs.open(vtk_file);
- btAssert(fs);
-
- typedef btAlignedObjectArray<int> Index;
- std::string line;
- btAlignedObjectArray<btVector3> X;
- btVector3 position;
- btAlignedObjectArray<Index> indices;
- bool reading_points = false;
- bool reading_tets = false;
- size_t n_points = 0;
- size_t n_tets = 0;
- size_t x_count = 0;
- size_t indices_count = 0;
- while (std::getline(fs, line))
- {
- std::stringstream ss(line);
- if (line.size() == (size_t)(0))
- {
- }
- else if (line.substr(0, 6) == "POINTS")
- {
- reading_points = true;
- reading_tets = false;
- ss.ignore(128, ' '); // ignore "POINTS"
- ss >> n_points;
- X.resize(n_points);
- }
- else if (line.substr(0, 5) == "CELLS")
- {
- reading_points = false;
- reading_tets = true;
- ss.ignore(128, ' '); // ignore "CELLS"
- ss >> n_tets;
- indices.resize(n_tets);
- }
- else if (line.substr(0, 10) == "CELL_TYPES")
- {
- reading_points = false;
- reading_tets = false;
- }
- else if (reading_points)
- {
- btScalar p;
- ss >> p;
- position.setX(p);
- ss >> p;
- position.setY(p);
- ss >> p;
- position.setZ(p);
- //printf("v %f %f %f\n", position.getX(), position.getY(), position.getZ());
- X[x_count++] = position;
- }
- else if (reading_tets)
- {
- int d;
- ss >> d;
- if (d != 4)
- {
- printf("Load deformable failed: Only Tetrahedra are supported in VTK file.\n");
- fs.close();
- return 0;
- }
- ss.ignore(128, ' '); // ignore "4"
- Index tet;
- tet.resize(4);
- for (size_t i = 0; i < 4; i++)
- {
- ss >> tet[i];
- //printf("%d ", tet[i]);
- }
- //printf("\n");
- indices[indices_count++] = tet;
- }
- }
- btSoftBody* psb = new btSoftBody(&worldInfo, n_points, &X[0], 0);
-
- for (int i = 0; i < n_tets; ++i)
- {
- const Index& ni = indices[i];
- psb->appendTetra(ni[0], ni[1], ni[2], ni[3]);
- {
- psb->appendLink(ni[0], ni[1], 0, true);
- psb->appendLink(ni[1], ni[2], 0, true);
- psb->appendLink(ni[2], ni[0], 0, true);
- psb->appendLink(ni[0], ni[3], 0, true);
- psb->appendLink(ni[1], ni[3], 0, true);
- psb->appendLink(ni[2], ni[3], 0, true);
- }
- }
-
- generateBoundaryFaces(psb);
- psb->initializeDmInverse();
- psb->m_tetraScratches.resize(psb->m_tetras.size());
- psb->m_tetraScratchesTn.resize(psb->m_tetras.size());
- printf("Nodes: %u\r\n", psb->m_nodes.size());
- printf("Links: %u\r\n", psb->m_links.size());
- printf("Faces: %u\r\n", psb->m_faces.size());
- printf("Tetras: %u\r\n", psb->m_tetras.size());
-
- fs.close();
- return psb;
-}
-
-void btSoftBodyHelpers::generateBoundaryFaces(btSoftBody* psb)
-{
- int counter = 0;
- for (int i = 0; i < psb->m_nodes.size(); ++i)
- {
- psb->m_nodes[i].index = counter++;
- }
- typedef btAlignedObjectArray<int> Index;
- btAlignedObjectArray<Index> indices;
- indices.resize(psb->m_tetras.size());
- for (int i = 0; i < indices.size(); ++i)
- {
- Index index;
- index.push_back(psb->m_tetras[i].m_n[0]->index);
- index.push_back(psb->m_tetras[i].m_n[1]->index);
- index.push_back(psb->m_tetras[i].m_n[2]->index);
- index.push_back(psb->m_tetras[i].m_n[3]->index);
- indices[i] = index;
- }
-
- std::map<std::vector<int>, std::vector<int> > dict;
- for (int i = 0; i < indices.size(); ++i)
- {
- for (int j = 0; j < 4; ++j)
- {
- std::vector<int> f;
- if (j == 0)
- {
- f.push_back(indices[i][1]);
- f.push_back(indices[i][0]);
- f.push_back(indices[i][2]);
- }
- if (j == 1)
- {
- f.push_back(indices[i][3]);
- f.push_back(indices[i][0]);
- f.push_back(indices[i][1]);
- }
- if (j == 2)
- {
- f.push_back(indices[i][3]);
- f.push_back(indices[i][1]);
- f.push_back(indices[i][2]);
- }
- if (j == 3)
- {
- f.push_back(indices[i][2]);
- f.push_back(indices[i][0]);
- f.push_back(indices[i][3]);
- }
- std::vector<int> f_sorted = f;
- std::sort(f_sorted.begin(), f_sorted.end());
- if (dict.find(f_sorted) != dict.end())
- {
- dict.erase(f_sorted);
- }
- else
- {
- dict.insert(std::make_pair(f_sorted, f));
- }
- }
- }
-
- for (std::map<std::vector<int>, std::vector<int> >::iterator it = dict.begin(); it != dict.end(); ++it)
- {
- std::vector<int> f = it->second;
- psb->appendFace(f[0], f[1], f[2]);
- //printf("f %d %d %d\n", f[0] + 1, f[1] + 1, f[2] + 1);
- }
-}
-
-//Write the surface mesh to an obj file.
-void btSoftBodyHelpers::writeObj(const char* filename, const btSoftBody* psb)
-{
- std::ofstream fs;
- fs.open(filename);
- btAssert(fs);
-
- if (psb->m_tetras.size() > 0)
- {
- // For tetrahedron mesh, we need to re-index the surface mesh for it to be in obj file/
- std::map<int, int> dict;
- for (int i = 0; i < psb->m_faces.size(); i++)
- {
- for (int d = 0; d < 3; d++)
- {
- int index = psb->m_faces[i].m_n[d]->index;
- if (dict.find(index) == dict.end())
- {
- int dict_size = dict.size();
- dict[index] = dict_size;
- fs << "v";
- for (int k = 0; k < 3; k++)
- {
- fs << " " << psb->m_nodes[index].m_x[k];
- }
- fs << "\n";
- }
- }
- }
- // Write surface mesh.
- for (int i = 0; i < psb->m_faces.size(); ++i)
- {
- fs << "f";
- for (int n = 0; n < 3; n++)
- {
- fs << " " << dict[psb->m_faces[i].m_n[n]->index] + 1;
- }
- fs << "\n";
- }
- }
- else
- {
- // For trimesh, directly write out all the nodes and faces.xs
- for (int i = 0; i < psb->m_nodes.size(); ++i)
- {
- fs << "v";
- for (int d = 0; d < 3; d++)
- {
- fs << " " << psb->m_nodes[i].m_x[d];
- }
- fs << "\n";
- }
-
- for (int i = 0; i < psb->m_faces.size(); ++i)
- {
- fs << "f";
- for (int n = 0; n < 3; n++)
- {
- fs << " " << psb->m_faces[i].m_n[n]->index + 1;
- }
- fs << "\n";
- }
- }
- fs.close();
-}
-
-void btSoftBodyHelpers::duplicateFaces(const char* filename, const btSoftBody* psb)
-{
- std::ifstream fs_read;
- fs_read.open(filename);
- std::string line;
- btVector3 pos;
- btAlignedObjectArray<btAlignedObjectArray<int> > additional_faces;
- while (std::getline(fs_read, line))
- {
- std::stringstream ss(line);
- if (line[0] == 'v')
- {
- }
- else if (line[0] == 'f')
- {
- ss.ignore();
- int id0, id1, id2;
- ss >> id0;
- ss >> id1;
- ss >> id2;
- btAlignedObjectArray<int> new_face;
- new_face.push_back(id1);
- new_face.push_back(id0);
- new_face.push_back(id2);
- additional_faces.push_back(new_face);
- }
- }
- fs_read.close();
-
- std::ofstream fs_write;
- fs_write.open(filename, std::ios_base::app);
- for (int i = 0; i < additional_faces.size(); ++i)
- {
- fs_write << "f";
- for (int n = 0; n < 3; n++)
- {
- fs_write << " " << additional_faces[i][n];
- }
- fs_write << "\n";
- }
- fs_write.close();
-}
-
-// Given a simplex with vertices a,b,c,d, find the barycentric weights of p in this simplex
-void btSoftBodyHelpers::getBarycentricWeights(const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d, const btVector3& p, btVector4& bary)
-{
- btVector3 vap = p - a;
- btVector3 vbp = p - b;
-
- btVector3 vab = b - a;
- btVector3 vac = c - a;
- btVector3 vad = d - a;
-
- btVector3 vbc = c - b;
- btVector3 vbd = d - b;
- btScalar va6 = (vbp.cross(vbd)).dot(vbc);
- btScalar vb6 = (vap.cross(vac)).dot(vad);
- btScalar vc6 = (vap.cross(vad)).dot(vab);
- btScalar vd6 = (vap.cross(vab)).dot(vac);
- btScalar v6 = btScalar(1) / (vab.cross(vac).dot(vad));
- bary = btVector4(va6 * v6, vb6 * v6, vc6 * v6, vd6 * v6);
-}
-
-// Given a simplex with vertices a,b,c, find the barycentric weights of p in this simplex. bary[3] = 0.
-void btSoftBodyHelpers::getBarycentricWeights(const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& p, btVector4& bary)
-{
- btVector3 v0 = b - a, v1 = c - a, v2 = p - a;
- btScalar d00 = btDot(v0, v0);
- btScalar d01 = btDot(v0, v1);
- btScalar d11 = btDot(v1, v1);
- btScalar d20 = btDot(v2, v0);
- btScalar d21 = btDot(v2, v1);
- btScalar invDenom = 1.0 / (d00 * d11 - d01 * d01);
- bary[1] = (d11 * d20 - d01 * d21) * invDenom;
- bary[2] = (d00 * d21 - d01 * d20) * invDenom;
- bary[0] = 1.0 - bary[1] - bary[2];
- bary[3] = 0;
-}
-
-// Iterate through all render nodes to find the simulation tetrahedron that contains the render node and record the barycentric weights
-// If the node is not inside any tetrahedron, assign it to the tetrahedron in which the node has the least negative barycentric weight
-void btSoftBodyHelpers::interpolateBarycentricWeights(btSoftBody* psb)
-{
- psb->m_z.resize(0);
- psb->m_renderNodesInterpolationWeights.resize(psb->m_renderNodes.size());
- psb->m_renderNodesParents.resize(psb->m_renderNodes.size());
- for (int i = 0; i < psb->m_renderNodes.size(); ++i)
- {
- const btVector3& p = psb->m_renderNodes[i].m_x;
- btVector4 bary;
- btVector4 optimal_bary;
- btScalar min_bary_weight = -1e3;
- btAlignedObjectArray<const btSoftBody::Node*> optimal_parents;
- for (int j = 0; j < psb->m_tetras.size(); ++j)
- {
- const btSoftBody::Tetra& t = psb->m_tetras[j];
- getBarycentricWeights(t.m_n[0]->m_x, t.m_n[1]->m_x, t.m_n[2]->m_x, t.m_n[3]->m_x, p, bary);
- btScalar new_min_bary_weight = bary[0];
- for (int k = 1; k < 4; ++k)
- {
- new_min_bary_weight = btMin(new_min_bary_weight, bary[k]);
- }
- if (new_min_bary_weight > min_bary_weight)
- {
- btAlignedObjectArray<const btSoftBody::Node*> parents;
- parents.push_back(t.m_n[0]);
- parents.push_back(t.m_n[1]);
- parents.push_back(t.m_n[2]);
- parents.push_back(t.m_n[3]);
- optimal_parents = parents;
- optimal_bary = bary;
- min_bary_weight = new_min_bary_weight;
- // stop searching if p is inside the tetrahedron at hand
- if (bary[0] >= 0. && bary[1] >= 0. && bary[2] >= 0. && bary[3] >= 0.)
- {
- break;
- }
- }
- }
- psb->m_renderNodesInterpolationWeights[i] = optimal_bary;
- psb->m_renderNodesParents[i] = optimal_parents;
- }
-}
-
-// Iterate through all render nodes to find the simulation triangle that's closest to the node in the barycentric sense.
-void btSoftBodyHelpers::extrapolateBarycentricWeights(btSoftBody* psb)
-{
- psb->m_renderNodesInterpolationWeights.resize(psb->m_renderNodes.size());
- psb->m_renderNodesParents.resize(psb->m_renderNodes.size());
- psb->m_z.resize(psb->m_renderNodes.size());
- for (int i = 0; i < psb->m_renderNodes.size(); ++i)
- {
- const btVector3& p = psb->m_renderNodes[i].m_x;
- btVector4 bary;
- btVector4 optimal_bary;
- btScalar min_bary_weight = -SIMD_INFINITY;
- btAlignedObjectArray<const btSoftBody::Node*> optimal_parents;
- btScalar dist = 0, optimal_dist = 0;
- for (int j = 0; j < psb->m_faces.size(); ++j)
- {
- const btSoftBody::Face& f = psb->m_faces[j];
- btVector3 n = btCross(f.m_n[1]->m_x - f.m_n[0]->m_x, f.m_n[2]->m_x - f.m_n[0]->m_x);
- btVector3 unit_n = n.normalized();
- dist = (p - f.m_n[0]->m_x).dot(unit_n);
- btVector3 proj_p = p - dist * unit_n;
- getBarycentricWeights(f.m_n[0]->m_x, f.m_n[1]->m_x, f.m_n[2]->m_x, proj_p, bary);
- btScalar new_min_bary_weight = bary[0];
- for (int k = 1; k < 3; ++k)
- {
- new_min_bary_weight = btMin(new_min_bary_weight, bary[k]);
- }
-
- // p is out of the current best triangle, we found a traingle that's better
- bool better_than_closest_outisde = (new_min_bary_weight > min_bary_weight && min_bary_weight < 0.);
- // p is inside of the current best triangle, we found a triangle that's better
- bool better_than_best_inside = (new_min_bary_weight >= 0 && min_bary_weight >= 0 && btFabs(dist) < btFabs(optimal_dist));
-
- if (better_than_closest_outisde || better_than_best_inside)
- {
- btAlignedObjectArray<const btSoftBody::Node*> parents;
- parents.push_back(f.m_n[0]);
- parents.push_back(f.m_n[1]);
- parents.push_back(f.m_n[2]);
- optimal_parents = parents;
- optimal_bary = bary;
- optimal_dist = dist;
- min_bary_weight = new_min_bary_weight;
- }
- }
- psb->m_renderNodesInterpolationWeights[i] = optimal_bary;
- psb->m_renderNodesParents[i] = optimal_parents;
- psb->m_z[i] = optimal_dist;
- }
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.h b/thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.h
deleted file mode 100644
index 237d29761d..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyHelpers.h
+++ /dev/null
@@ -1,167 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2008 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_BODY_HELPERS_H
-#define BT_SOFT_BODY_HELPERS_H
-
-#include "btSoftBody.h"
-#include <fstream>
-#include <string>
-//
-// Helpers
-//
-
-/* fDrawFlags */
-struct fDrawFlags
-{
- enum _
- {
- Nodes = 0x0001,
- Links = 0x0002,
- Faces = 0x0004,
- Tetras = 0x0008,
- Normals = 0x0010,
- Contacts = 0x0020,
- Anchors = 0x0040,
- Notes = 0x0080,
- Clusters = 0x0100,
- NodeTree = 0x0200,
- FaceTree = 0x0400,
- ClusterTree = 0x0800,
- Joints = 0x1000,
- /* presets */
- Std = Links + Faces + Tetras + Anchors + Notes + Joints,
- StdTetra = Std - Faces + Tetras
- };
-};
-
-struct btSoftBodyHelpers
-{
- /* Draw body */
- static void Draw(btSoftBody* psb,
- btIDebugDraw* idraw,
- int drawflags = fDrawFlags::Std);
- /* Draw body infos */
- static void DrawInfos(btSoftBody* psb,
- btIDebugDraw* idraw,
- bool masses,
- bool areas,
- bool stress);
- /* Draw node tree */
- static void DrawNodeTree(btSoftBody* psb,
- btIDebugDraw* idraw,
- int mindepth = 0,
- int maxdepth = -1);
- /* Draw face tree */
- static void DrawFaceTree(btSoftBody* psb,
- btIDebugDraw* idraw,
- int mindepth = 0,
- int maxdepth = -1);
- /* Draw cluster tree */
- static void DrawClusterTree(btSoftBody* psb,
- btIDebugDraw* idraw,
- int mindepth = 0,
- int maxdepth = -1);
- /* Draw rigid frame */
- static void DrawFrame(btSoftBody* psb,
- btIDebugDraw* idraw);
- /* Create a rope */
- static btSoftBody* CreateRope(btSoftBodyWorldInfo& worldInfo,
- const btVector3& from,
- const btVector3& to,
- int res,
- int fixeds);
- /* Create a patch */
- static btSoftBody* CreatePatch(btSoftBodyWorldInfo& worldInfo,
- const btVector3& corner00,
- const btVector3& corner10,
- const btVector3& corner01,
- const btVector3& corner11,
- int resx,
- int resy,
- int fixeds,
- bool gendiags,
- btScalar perturbation = 0.);
- /* Create a patch with UV Texture Coordinates */
- static btSoftBody* CreatePatchUV(btSoftBodyWorldInfo& worldInfo,
- const btVector3& corner00,
- const btVector3& corner10,
- const btVector3& corner01,
- const btVector3& corner11,
- int resx,
- int resy,
- int fixeds,
- bool gendiags,
- float* tex_coords = 0);
- static float CalculateUV(int resx, int resy, int ix, int iy, int id);
- /* Create an ellipsoid */
- static btSoftBody* CreateEllipsoid(btSoftBodyWorldInfo& worldInfo,
- const btVector3& center,
- const btVector3& radius,
- int res);
- /* Create from trimesh */
- static btSoftBody* CreateFromTriMesh(btSoftBodyWorldInfo& worldInfo,
- const btScalar* vertices,
- const int* triangles,
- int ntriangles,
- bool randomizeConstraints = true);
- /* Create from convex-hull */
- static btSoftBody* CreateFromConvexHull(btSoftBodyWorldInfo& worldInfo,
- const btVector3* vertices,
- int nvertices,
- bool randomizeConstraints = true);
-
- /* Export TetGen compatible .smesh file */
- // static void ExportAsSMeshFile( btSoftBody* psb,
- // const char* filename);
- /* Create from TetGen .ele, .face, .node files */
- // static btSoftBody* CreateFromTetGenFile( btSoftBodyWorldInfo& worldInfo,
- // const char* ele,
- // const char* face,
- // const char* node,
- // bool bfacelinks,
- // bool btetralinks,
- // bool bfacesfromtetras);
- /* Create from TetGen .ele, .face, .node data */
- static btSoftBody* CreateFromTetGenData(btSoftBodyWorldInfo& worldInfo,
- const char* ele,
- const char* face,
- const char* node,
- bool bfacelinks,
- bool btetralinks,
- bool bfacesfromtetras);
- static btSoftBody* CreateFromVtkFile(btSoftBodyWorldInfo& worldInfo, const char* vtk_file);
-
- static void writeObj(const char* file, const btSoftBody* psb);
-
- static void getBarycentricWeights(const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& d, const btVector3& p, btVector4& bary);
-
- static void getBarycentricWeights(const btVector3& a, const btVector3& b, const btVector3& c, const btVector3& p, btVector4& bary);
-
- static void interpolateBarycentricWeights(btSoftBody* psb);
-
- static void extrapolateBarycentricWeights(btSoftBody* psb);
-
- static void generateBoundaryFaces(btSoftBody* psb);
-
- static void duplicateFaces(const char* filename, const btSoftBody* psb);
- /// Sort the list of links to move link calculations that are dependent upon earlier
- /// ones as far as possible away from the calculation of those values
- /// This tends to make adjacent loop iterations not dependent upon one another,
- /// so out-of-order processors can execute instructions from multiple iterations at once
- static void ReoptimizeLinkOrder(btSoftBody* psb);
-};
-
-#endif //BT_SOFT_BODY_HELPERS_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyInternals.h b/thirdparty/bullet/BulletSoftBody/btSoftBodyInternals.h
deleted file mode 100644
index c17bbb5cd4..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyInternals.h
+++ /dev/null
@@ -1,2108 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btSoftBody implementation by Nathanael Presson
-
-#ifndef _BT_SOFT_BODY_INTERNALS_H
-#define _BT_SOFT_BODY_INTERNALS_H
-
-#include "btSoftBody.h"
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btPolarDecomposition.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btConvexInternalShape.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h"
-#include "BulletDynamics/Featherstone/btMultiBodyLinkCollider.h"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.h"
-#include <string.h> //for memset
-#include <cmath>
-#include "poly34.h"
-
-// Given a multibody link, a contact point and a contact direction, fill in the jacobian data needed to calculate the velocity change given an impulse in the contact direction
-static SIMD_FORCE_INLINE void findJacobian(const btMultiBodyLinkCollider* multibodyLinkCol,
- btMultiBodyJacobianData& jacobianData,
- const btVector3& contact_point,
- const btVector3& dir)
-{
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- jacobianData.m_jacobians.resize(ndof);
- jacobianData.m_deltaVelocitiesUnitImpulse.resize(ndof);
- btScalar* jac = &jacobianData.m_jacobians[0];
-
- multibodyLinkCol->m_multiBody->fillContactJacobianMultiDof(multibodyLinkCol->m_link, contact_point, dir, jac, jacobianData.scratch_r, jacobianData.scratch_v, jacobianData.scratch_m);
- multibodyLinkCol->m_multiBody->calcAccelerationDeltasMultiDof(&jacobianData.m_jacobians[0], &jacobianData.m_deltaVelocitiesUnitImpulse[0], jacobianData.scratch_r, jacobianData.scratch_v);
-}
-static SIMD_FORCE_INLINE btVector3 generateUnitOrthogonalVector(const btVector3& u)
-{
- btScalar ux = u.getX();
- btScalar uy = u.getY();
- btScalar uz = u.getZ();
- btScalar ax = std::abs(ux);
- btScalar ay = std::abs(uy);
- btScalar az = std::abs(uz);
- btVector3 v;
- if (ax <= ay && ax <= az)
- v = btVector3(0, -uz, uy);
- else if (ay <= ax && ay <= az)
- v = btVector3(-uz, 0, ux);
- else
- v = btVector3(-uy, ux, 0);
- v.normalize();
- return v;
-}
-
-static SIMD_FORCE_INLINE bool proximityTest(const btVector3& x1, const btVector3& x2, const btVector3& x3, const btVector3& x4, const btVector3& normal, const btScalar& mrg, btVector3& bary)
-{
- btVector3 x43 = x4 - x3;
- if (std::abs(x43.dot(normal)) > mrg)
- return false;
- btVector3 x13 = x1 - x3;
- btVector3 x23 = x2 - x3;
- btScalar a11 = x13.length2();
- btScalar a22 = x23.length2();
- btScalar a12 = x13.dot(x23);
- btScalar b1 = x13.dot(x43);
- btScalar b2 = x23.dot(x43);
- btScalar det = a11 * a22 - a12 * a12;
- if (det < SIMD_EPSILON)
- return false;
- btScalar w1 = (b1 * a22 - b2 * a12) / det;
- btScalar w2 = (b2 * a11 - b1 * a12) / det;
- btScalar w3 = 1 - w1 - w2;
- btScalar delta = mrg / std::sqrt(0.5 * std::abs(x13.cross(x23).safeNorm()));
- bary = btVector3(w1, w2, w3);
- for (int i = 0; i < 3; ++i)
- {
- if (bary[i] < -delta || bary[i] > 1 + delta)
- return false;
- }
- return true;
-}
-static const int KDOP_COUNT = 13;
-static btVector3 dop[KDOP_COUNT] = {btVector3(1, 0, 0),
- btVector3(0, 1, 0),
- btVector3(0, 0, 1),
- btVector3(1, 1, 0),
- btVector3(1, 0, 1),
- btVector3(0, 1, 1),
- btVector3(1, -1, 0),
- btVector3(1, 0, -1),
- btVector3(0, 1, -1),
- btVector3(1, 1, 1),
- btVector3(1, -1, 1),
- btVector3(1, 1, -1),
- btVector3(1, -1, -1)};
-
-static inline int getSign(const btVector3& n, const btVector3& x)
-{
- btScalar d = n.dot(x);
- if (d > SIMD_EPSILON)
- return 1;
- if (d < -SIMD_EPSILON)
- return -1;
- return 0;
-}
-
-static SIMD_FORCE_INLINE bool hasSeparatingPlane(const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt)
-{
- btVector3 hex[6] = {face->m_n[0]->m_x - node->m_x,
- face->m_n[1]->m_x - node->m_x,
- face->m_n[2]->m_x - node->m_x,
- face->m_n[0]->m_x + dt * face->m_n[0]->m_v - node->m_x,
- face->m_n[1]->m_x + dt * face->m_n[1]->m_v - node->m_x,
- face->m_n[2]->m_x + dt * face->m_n[2]->m_v - node->m_x};
- btVector3 segment = dt * node->m_v;
- for (int i = 0; i < KDOP_COUNT; ++i)
- {
- int s = getSign(dop[i], segment);
- int j = 0;
- for (; j < 6; ++j)
- {
- if (getSign(dop[i], hex[j]) == s)
- break;
- }
- if (j == 6)
- return true;
- }
- return false;
-}
-
-static SIMD_FORCE_INLINE bool nearZero(const btScalar& a)
-{
- return (a > -SAFE_EPSILON && a < SAFE_EPSILON);
-}
-static SIMD_FORCE_INLINE bool sameSign(const btScalar& a, const btScalar& b)
-{
- return (nearZero(a) || nearZero(b) || (a > SAFE_EPSILON && b > SAFE_EPSILON) || (a < -SAFE_EPSILON && b < -SAFE_EPSILON));
-}
-static SIMD_FORCE_INLINE bool diffSign(const btScalar& a, const btScalar& b)
-{
- return !sameSign(a, b);
-}
-inline btScalar evaluateBezier2(const btScalar& p0, const btScalar& p1, const btScalar& p2, const btScalar& t, const btScalar& s)
-{
- btScalar s2 = s * s;
- btScalar t2 = t * t;
-
- return p0 * s2 + p1 * btScalar(2.0) * s * t + p2 * t2;
-}
-inline btScalar evaluateBezier(const btScalar& p0, const btScalar& p1, const btScalar& p2, const btScalar& p3, const btScalar& t, const btScalar& s)
-{
- btScalar s2 = s * s;
- btScalar s3 = s2 * s;
- btScalar t2 = t * t;
- btScalar t3 = t2 * t;
-
- return p0 * s3 + p1 * btScalar(3.0) * s2 * t + p2 * btScalar(3.0) * s * t2 + p3 * t3;
-}
-static SIMD_FORCE_INLINE bool getSigns(bool type_c, const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& t0, const btScalar& t1, btScalar& lt0, btScalar& lt1)
-{
- if (sameSign(t0, t1))
- {
- lt0 = t0;
- lt1 = t0;
- return true;
- }
-
- if (type_c || diffSign(k0, k3))
- {
- btScalar ft = evaluateBezier(k0, k1, k2, k3, t0, -t1);
- if (t0 < -0)
- ft = -ft;
-
- if (sameSign(ft, k0))
- {
- lt0 = t1;
- lt1 = t1;
- }
- else
- {
- lt0 = t0;
- lt1 = t0;
- }
- return true;
- }
-
- if (!type_c)
- {
- btScalar ft = evaluateBezier(k0, k1, k2, k3, t0, -t1);
- if (t0 < -0)
- ft = -ft;
-
- if (diffSign(ft, k0))
- {
- lt0 = t0;
- lt1 = t1;
- return true;
- }
-
- btScalar fk = evaluateBezier2(k1 - k0, k2 - k1, k3 - k2, t0, -t1);
-
- if (sameSign(fk, k1 - k0))
- lt0 = lt1 = t1;
- else
- lt0 = lt1 = t0;
-
- return true;
- }
- return false;
-}
-
-static SIMD_FORCE_INLINE void getBernsteinCoeff(const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt, btScalar& k0, btScalar& k1, btScalar& k2, btScalar& k3)
-{
- const btVector3& n0 = face->m_n0;
- const btVector3& n1 = face->m_n1;
- btVector3 n_hat = n0 + n1 - face->m_vn;
- btVector3 p0ma0 = node->m_x - face->m_n[0]->m_x;
- btVector3 p1ma1 = node->m_q - face->m_n[0]->m_q;
- k0 = (p0ma0).dot(n0) * 3.0;
- k1 = (p0ma0).dot(n_hat) + (p1ma1).dot(n0);
- k2 = (p1ma1).dot(n_hat) + (p0ma0).dot(n1);
- k3 = (p1ma1).dot(n1) * 3.0;
-}
-
-static SIMD_FORCE_INLINE void polyDecomposition(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& j0, const btScalar& j1, const btScalar& j2, btScalar& u0, btScalar& u1, btScalar& v0, btScalar& v1)
-{
- btScalar denom = 4.0 * (j1 - j2) * (j1 - j0) + (j2 - j0) * (j2 - j0);
- u0 = (2.0 * (j1 - j2) * (3.0 * k1 - 2.0 * k0 - k3) - (j0 - j2) * (3.0 * k2 - 2.0 * k3 - k0)) / denom;
- u1 = (2.0 * (j1 - j0) * (3.0 * k2 - 2.0 * k3 - k0) - (j2 - j0) * (3.0 * k1 - 2.0 * k0 - k3)) / denom;
- v0 = k0 - u0 * j0;
- v1 = k3 - u1 * j2;
-}
-
-static SIMD_FORCE_INLINE bool rootFindingLemma(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3)
-{
- btScalar u0, u1, v0, v1;
- btScalar j0 = 3.0 * (k1 - k0);
- btScalar j1 = 3.0 * (k2 - k1);
- btScalar j2 = 3.0 * (k3 - k2);
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (sameSign(v0, v1))
- {
- btScalar Ypa = j0 * (1.0 - v0) * (1.0 - v0) + 2.0 * j1 * v0 * (1.0 - v0) + j2 * v0 * v0; // Y'(v0)
- if (sameSign(Ypa, j0))
- {
- return (diffSign(k0, v1));
- }
- }
- return diffSign(k0, v0);
-}
-
-static SIMD_FORCE_INLINE void getJs(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btSoftBody::Node* a, const btSoftBody::Node* b, const btSoftBody::Node* c, const btSoftBody::Node* p, const btScalar& dt, btScalar& j0, btScalar& j1, btScalar& j2)
-{
- const btVector3& a0 = a->m_x;
- const btVector3& b0 = b->m_x;
- const btVector3& c0 = c->m_x;
- const btVector3& va = a->m_v;
- const btVector3& vb = b->m_v;
- const btVector3& vc = c->m_v;
- const btVector3 a1 = a0 + dt * va;
- const btVector3 b1 = b0 + dt * vb;
- const btVector3 c1 = c0 + dt * vc;
- btVector3 n0 = (b0 - a0).cross(c0 - a0);
- btVector3 n1 = (b1 - a1).cross(c1 - a1);
- btVector3 n_hat = n0 + n1 - dt * dt * (vb - va).cross(vc - va);
- const btVector3& p0 = p->m_x;
- const btVector3& vp = p->m_v;
- btVector3 p1 = p0 + dt * vp;
- btVector3 m0 = (b0 - p0).cross(c0 - p0);
- btVector3 m1 = (b1 - p1).cross(c1 - p1);
- btVector3 m_hat = m0 + m1 - dt * dt * (vb - vp).cross(vc - vp);
- btScalar l0 = m0.dot(n0);
- btScalar l1 = 0.25 * (m0.dot(n_hat) + m_hat.dot(n0));
- btScalar l2 = btScalar(1) / btScalar(6) * (m0.dot(n1) + m_hat.dot(n_hat) + m1.dot(n0));
- btScalar l3 = 0.25 * (m_hat.dot(n1) + m1.dot(n_hat));
- btScalar l4 = m1.dot(n1);
-
- btScalar k1p = 0.25 * k0 + 0.75 * k1;
- btScalar k2p = 0.5 * k1 + 0.5 * k2;
- btScalar k3p = 0.75 * k2 + 0.25 * k3;
-
- btScalar s0 = (l1 * k0 - l0 * k1p) * 4.0;
- btScalar s1 = (l2 * k0 - l0 * k2p) * 2.0;
- btScalar s2 = (l3 * k0 - l0 * k3p) * btScalar(4) / btScalar(3);
- btScalar s3 = l4 * k0 - l0 * k3;
-
- j0 = (s1 * k0 - s0 * k1) * 3.0;
- j1 = (s2 * k0 - s0 * k2) * 1.5;
- j2 = (s3 * k0 - s0 * k3);
-}
-
-static SIMD_FORCE_INLINE bool signDetermination1Internal(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& u0, const btScalar& u1, const btScalar& v0, const btScalar& v1)
-{
- btScalar Yu0 = k0 * (1.0 - u0) * (1.0 - u0) * (1.0 - u0) + 3.0 * k1 * u0 * (1.0 - u0) * (1.0 - u0) + 3.0 * k2 * u0 * u0 * (1.0 - u0) + k3 * u0 * u0 * u0; // Y(u0)
- btScalar Yv0 = k0 * (1.0 - v0) * (1.0 - v0) * (1.0 - v0) + 3.0 * k1 * v0 * (1.0 - v0) * (1.0 - v0) + 3.0 * k2 * v0 * v0 * (1.0 - v0) + k3 * v0 * v0 * v0; // Y(v0)
-
- btScalar sign_Ytp = (u0 > u1) ? Yu0 : -Yu0;
- btScalar L = sameSign(sign_Ytp, k0) ? u1 : u0;
- sign_Ytp = (v0 > v1) ? Yv0 : -Yv0;
- btScalar K = (sameSign(sign_Ytp, k0)) ? v1 : v0;
- return diffSign(L, K);
-}
-
-static SIMD_FORCE_INLINE bool signDetermination2Internal(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& j0, const btScalar& j1, const btScalar& j2, const btScalar& u0, const btScalar& u1, const btScalar& v0, const btScalar& v1)
-{
- btScalar Yu0 = k0 * (1.0 - u0) * (1.0 - u0) * (1.0 - u0) + 3.0 * k1 * u0 * (1.0 - u0) * (1.0 - u0) + 3.0 * k2 * u0 * u0 * (1.0 - u0) + k3 * u0 * u0 * u0; // Y(u0)
- btScalar sign_Ytp = (u0 > u1) ? Yu0 : -Yu0, L1, L2;
- if (diffSign(sign_Ytp, k0))
- {
- L1 = u0;
- L2 = u1;
- }
- else
- {
- btScalar Yp_u0 = j0 * (1.0 - u0) * (1.0 - u0) + 2.0 * j1 * (1.0 - u0) * u0 + j2 * u0 * u0;
- if (sameSign(Yp_u0, j0))
- {
- L1 = u1;
- L2 = u1;
- }
- else
- {
- L1 = u0;
- L2 = u0;
- }
- }
- btScalar Yv0 = k0 * (1.0 - v0) * (1.0 - v0) * (1.0 - v0) + 3.0 * k1 * v0 * (1.0 - v0) * (1.0 - v0) + 3.0 * k2 * v0 * v0 * (1.0 - v0) + k3 * v0 * v0 * v0; // Y(uv0)
- sign_Ytp = (v0 > v1) ? Yv0 : -Yv0;
- btScalar K1, K2;
- if (diffSign(sign_Ytp, k0))
- {
- K1 = v0;
- K2 = v1;
- }
- else
- {
- btScalar Yp_v0 = j0 * (1.0 - v0) * (1.0 - v0) + 2.0 * j1 * (1.0 - v0) * v0 + j2 * v0 * v0;
- if (sameSign(Yp_v0, j0))
- {
- K1 = v1;
- K2 = v1;
- }
- else
- {
- K1 = v0;
- K2 = v0;
- }
- }
- return (diffSign(K1, L1) || diffSign(L2, K2));
-}
-
-static SIMD_FORCE_INLINE bool signDetermination1(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt)
-{
- btScalar j0, j1, j2, u0, u1, v0, v1;
- // p1
- getJs(k0, k1, k2, k3, face->m_n[0], face->m_n[1], face->m_n[2], node, dt, j0, j1, j2);
- if (nearZero(j0 + j2 - j1 * 2.0))
- {
- btScalar lt0, lt1;
- getSigns(true, k0, k1, k2, k3, j0, j2, lt0, lt1);
- if (lt0 < -SAFE_EPSILON)
- return false;
- }
- else
- {
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (!signDetermination1Internal(k0, k1, k2, k3, u0, u1, v0, v1))
- return false;
- }
- // p2
- getJs(k0, k1, k2, k3, face->m_n[1], face->m_n[2], face->m_n[0], node, dt, j0, j1, j2);
- if (nearZero(j0 + j2 - j1 * 2.0))
- {
- btScalar lt0, lt1;
- getSigns(true, k0, k1, k2, k3, j0, j2, lt0, lt1);
- if (lt0 < -SAFE_EPSILON)
- return false;
- }
- else
- {
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (!signDetermination1Internal(k0, k1, k2, k3, u0, u1, v0, v1))
- return false;
- }
- // p3
- getJs(k0, k1, k2, k3, face->m_n[2], face->m_n[0], face->m_n[1], node, dt, j0, j1, j2);
- if (nearZero(j0 + j2 - j1 * 2.0))
- {
- btScalar lt0, lt1;
- getSigns(true, k0, k1, k2, k3, j0, j2, lt0, lt1);
- if (lt0 < -SAFE_EPSILON)
- return false;
- }
- else
- {
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (!signDetermination1Internal(k0, k1, k2, k3, u0, u1, v0, v1))
- return false;
- }
- return true;
-}
-
-static SIMD_FORCE_INLINE bool signDetermination2(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt)
-{
- btScalar j0, j1, j2, u0, u1, v0, v1;
- // p1
- getJs(k0, k1, k2, k3, face->m_n[0], face->m_n[1], face->m_n[2], node, dt, j0, j1, j2);
- if (nearZero(j0 + j2 - j1 * 2.0))
- {
- btScalar lt0, lt1;
- bool bt0 = true, bt1 = true;
- getSigns(false, k0, k1, k2, k3, j0, j2, lt0, lt1);
- if (lt0 < -SAFE_EPSILON)
- bt0 = false;
- if (lt1 < -SAFE_EPSILON)
- bt1 = false;
- if (!bt0 && !bt1)
- return false;
- }
- else
- {
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (!signDetermination2Internal(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1))
- return false;
- }
- // p2
- getJs(k0, k1, k2, k3, face->m_n[1], face->m_n[2], face->m_n[0], node, dt, j0, j1, j2);
- if (nearZero(j0 + j2 - j1 * 2.0))
- {
- btScalar lt0, lt1;
- bool bt0 = true, bt1 = true;
- getSigns(false, k0, k1, k2, k3, j0, j2, lt0, lt1);
- if (lt0 < -SAFE_EPSILON)
- bt0 = false;
- if (lt1 < -SAFE_EPSILON)
- bt1 = false;
- if (!bt0 && !bt1)
- return false;
- }
- else
- {
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (!signDetermination2Internal(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1))
- return false;
- }
- // p3
- getJs(k0, k1, k2, k3, face->m_n[2], face->m_n[0], face->m_n[1], node, dt, j0, j1, j2);
- if (nearZero(j0 + j2 - j1 * 2.0))
- {
- btScalar lt0, lt1;
- bool bt0 = true, bt1 = true;
- getSigns(false, k0, k1, k2, k3, j0, j2, lt0, lt1);
- if (lt0 < -SAFE_EPSILON)
- bt0 = false;
- if (lt1 < -SAFE_EPSILON)
- bt1 = false;
- if (!bt0 && !bt1)
- return false;
- }
- else
- {
- polyDecomposition(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1);
- if (!signDetermination2Internal(k0, k1, k2, k3, j0, j1, j2, u0, u1, v0, v1))
- return false;
- }
- return true;
-}
-
-static SIMD_FORCE_INLINE bool coplanarAndInsideTest(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt)
-{
- // Coplanar test
- if (diffSign(k1 - k0, k3 - k2))
- {
- // Case b:
- if (sameSign(k0, k3) && !rootFindingLemma(k0, k1, k2, k3))
- return false;
- // inside test
- return signDetermination2(k0, k1, k2, k3, face, node, dt);
- }
- else
- {
- // Case c:
- if (sameSign(k0, k3))
- return false;
- // inside test
- return signDetermination1(k0, k1, k2, k3, face, node, dt);
- }
- return false;
-}
-static SIMD_FORCE_INLINE bool conservativeCulling(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& mrg)
-{
- if (k0 > mrg && k1 > mrg && k2 > mrg && k3 > mrg)
- return true;
- if (k0 < -mrg && k1 < -mrg && k2 < -mrg && k3 < -mrg)
- return true;
- return false;
-}
-
-static SIMD_FORCE_INLINE bool bernsteinVFTest(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& mrg, const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt)
-{
- if (conservativeCulling(k0, k1, k2, k3, mrg))
- return false;
- return coplanarAndInsideTest(k0, k1, k2, k3, face, node, dt);
-}
-
-static SIMD_FORCE_INLINE void deCasteljau(const btScalar& k0, const btScalar& k1, const btScalar& k2, const btScalar& k3, const btScalar& t0, btScalar& k10, btScalar& k20, btScalar& k30, btScalar& k21, btScalar& k12)
-{
- k10 = k0 * (1.0 - t0) + k1 * t0;
- btScalar k11 = k1 * (1.0 - t0) + k2 * t0;
- k12 = k2 * (1.0 - t0) + k3 * t0;
- k20 = k10 * (1.0 - t0) + k11 * t0;
- k21 = k11 * (1.0 - t0) + k12 * t0;
- k30 = k20 * (1.0 - t0) + k21 * t0;
-}
-static SIMD_FORCE_INLINE bool bernsteinVFTest(const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt, const btScalar& mrg)
-{
- btScalar k0, k1, k2, k3;
- getBernsteinCoeff(face, node, dt, k0, k1, k2, k3);
- if (conservativeCulling(k0, k1, k2, k3, mrg))
- return false;
- return true;
- if (diffSign(k2 - 2.0 * k1 + k0, k3 - 2.0 * k2 + k1))
- {
- btScalar k10, k20, k30, k21, k12;
- btScalar t0 = (k2 - 2.0 * k1 + k0) / (k0 - 3.0 * k1 + 3.0 * k2 - k3);
- deCasteljau(k0, k1, k2, k3, t0, k10, k20, k30, k21, k12);
- return bernsteinVFTest(k0, k10, k20, k30, mrg, face, node, dt) || bernsteinVFTest(k30, k21, k12, k3, mrg, face, node, dt);
- }
- return coplanarAndInsideTest(k0, k1, k2, k3, face, node, dt);
-}
-
-static SIMD_FORCE_INLINE bool continuousCollisionDetection(const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt, const btScalar& mrg, btVector3& bary)
-{
- if (hasSeparatingPlane(face, node, dt))
- return false;
- btVector3 x21 = face->m_n[1]->m_x - face->m_n[0]->m_x;
- btVector3 x31 = face->m_n[2]->m_x - face->m_n[0]->m_x;
- btVector3 x41 = node->m_x - face->m_n[0]->m_x;
- btVector3 v21 = face->m_n[1]->m_v - face->m_n[0]->m_v;
- btVector3 v31 = face->m_n[2]->m_v - face->m_n[0]->m_v;
- btVector3 v41 = node->m_v - face->m_n[0]->m_v;
- btVector3 a = x21.cross(x31);
- btVector3 b = x21.cross(v31) + v21.cross(x31);
- btVector3 c = v21.cross(v31);
- btVector3 d = x41;
- btVector3 e = v41;
- btScalar a0 = a.dot(d);
- btScalar a1 = a.dot(e) + b.dot(d);
- btScalar a2 = c.dot(d) + b.dot(e);
- btScalar a3 = c.dot(e);
- btScalar eps = SAFE_EPSILON;
- int num_roots = 0;
- btScalar roots[3];
- if (std::abs(a3) < eps)
- {
- // cubic term is zero
- if (std::abs(a2) < eps)
- {
- if (std::abs(a1) < eps)
- {
- if (std::abs(a0) < eps)
- {
- num_roots = 2;
- roots[0] = 0;
- roots[1] = dt;
- }
- }
- else
- {
- num_roots = 1;
- roots[0] = -a0 / a1;
- }
- }
- else
- {
- num_roots = SolveP2(roots, a1 / a2, a0 / a2);
- }
- }
- else
- {
- num_roots = SolveP3(roots, a2 / a3, a1 / a3, a0 / a3);
- }
- // std::sort(roots, roots+num_roots);
- if (num_roots > 1)
- {
- if (roots[0] > roots[1])
- btSwap(roots[0], roots[1]);
- }
- if (num_roots > 2)
- {
- if (roots[0] > roots[2])
- btSwap(roots[0], roots[2]);
- if (roots[1] > roots[2])
- btSwap(roots[1], roots[2]);
- }
- for (int r = 0; r < num_roots; ++r)
- {
- double root = roots[r];
- if (root <= 0)
- continue;
- if (root > dt + SIMD_EPSILON)
- return false;
- btVector3 x1 = face->m_n[0]->m_x + root * face->m_n[0]->m_v;
- btVector3 x2 = face->m_n[1]->m_x + root * face->m_n[1]->m_v;
- btVector3 x3 = face->m_n[2]->m_x + root * face->m_n[2]->m_v;
- btVector3 x4 = node->m_x + root * node->m_v;
- btVector3 normal = (x2 - x1).cross(x3 - x1);
- normal.safeNormalize();
- if (proximityTest(x1, x2, x3, x4, normal, mrg, bary))
- return true;
- }
- return false;
-}
-static SIMD_FORCE_INLINE bool bernsteinCCD(const btSoftBody::Face* face, const btSoftBody::Node* node, const btScalar& dt, const btScalar& mrg, btVector3& bary)
-{
- if (!bernsteinVFTest(face, node, dt, mrg))
- return false;
- if (!continuousCollisionDetection(face, node, dt, 1e-6, bary))
- return false;
- return true;
-}
-
-//
-// btSymMatrix
-//
-template <typename T>
-struct btSymMatrix
-{
- btSymMatrix() : dim(0) {}
- btSymMatrix(int n, const T& init = T()) { resize(n, init); }
- void resize(int n, const T& init = T())
- {
- dim = n;
- store.resize((n * (n + 1)) / 2, init);
- }
- int index(int c, int r) const
- {
- if (c > r) btSwap(c, r);
- btAssert(r < dim);
- return ((r * (r + 1)) / 2 + c);
- }
- T& operator()(int c, int r) { return (store[index(c, r)]); }
- const T& operator()(int c, int r) const { return (store[index(c, r)]); }
- btAlignedObjectArray<T> store;
- int dim;
-};
-
-//
-// btSoftBodyCollisionShape
-//
-class btSoftBodyCollisionShape : public btConcaveShape
-{
-public:
- btSoftBody* m_body;
-
- btSoftBodyCollisionShape(btSoftBody* backptr)
- {
- m_shapeType = SOFTBODY_SHAPE_PROXYTYPE;
- m_body = backptr;
- }
-
- virtual ~btSoftBodyCollisionShape()
- {
- }
-
- void processAllTriangles(btTriangleCallback* /*callback*/, const btVector3& /*aabbMin*/, const btVector3& /*aabbMax*/) const
- {
- //not yet
- btAssert(0);
- }
-
- ///getAabb returns the axis aligned bounding box in the coordinate frame of the given transform t.
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- /* t is usually identity, except when colliding against btCompoundShape. See Issue 512 */
- const btVector3 mins = m_body->m_bounds[0];
- const btVector3 maxs = m_body->m_bounds[1];
- const btVector3 crns[] = {t * btVector3(mins.x(), mins.y(), mins.z()),
- t * btVector3(maxs.x(), mins.y(), mins.z()),
- t * btVector3(maxs.x(), maxs.y(), mins.z()),
- t * btVector3(mins.x(), maxs.y(), mins.z()),
- t * btVector3(mins.x(), mins.y(), maxs.z()),
- t * btVector3(maxs.x(), mins.y(), maxs.z()),
- t * btVector3(maxs.x(), maxs.y(), maxs.z()),
- t * btVector3(mins.x(), maxs.y(), maxs.z())};
- aabbMin = aabbMax = crns[0];
- for (int i = 1; i < 8; ++i)
- {
- aabbMin.setMin(crns[i]);
- aabbMax.setMax(crns[i]);
- }
- }
-
- virtual void setLocalScaling(const btVector3& /*scaling*/)
- {
- ///na
- }
- virtual const btVector3& getLocalScaling() const
- {
- static const btVector3 dummy(1, 1, 1);
- return dummy;
- }
- virtual void calculateLocalInertia(btScalar /*mass*/, btVector3& /*inertia*/) const
- {
- ///not yet
- btAssert(0);
- }
- virtual const char* getName() const
- {
- return "SoftBody";
- }
-};
-
-//
-// btSoftClusterCollisionShape
-//
-class btSoftClusterCollisionShape : public btConvexInternalShape
-{
-public:
- const btSoftBody::Cluster* m_cluster;
-
- btSoftClusterCollisionShape(const btSoftBody::Cluster* cluster) : m_cluster(cluster) { setMargin(0); }
-
- virtual btVector3 localGetSupportingVertex(const btVector3& vec) const
- {
- btSoftBody::Node* const* n = &m_cluster->m_nodes[0];
- btScalar d = btDot(vec, n[0]->m_x);
- int j = 0;
- for (int i = 1, ni = m_cluster->m_nodes.size(); i < ni; ++i)
- {
- const btScalar k = btDot(vec, n[i]->m_x);
- if (k > d)
- {
- d = k;
- j = i;
- }
- }
- return (n[j]->m_x);
- }
- virtual btVector3 localGetSupportingVertexWithoutMargin(const btVector3& vec) const
- {
- return (localGetSupportingVertex(vec));
- }
- //notice that the vectors should be unit length
- virtual void batchedUnitVectorGetSupportingVertexWithoutMargin(const btVector3* vectors, btVector3* supportVerticesOut, int numVectors) const
- {
- }
-
- virtual void calculateLocalInertia(btScalar mass, btVector3& inertia) const
- {
- }
-
- virtual void getAabb(const btTransform& t, btVector3& aabbMin, btVector3& aabbMax) const
- {
- }
-
- virtual int getShapeType() const { return SOFTBODY_SHAPE_PROXYTYPE; }
-
- //debugging
- virtual const char* getName() const { return "SOFTCLUSTER"; }
-
- virtual void setMargin(btScalar margin)
- {
- btConvexInternalShape::setMargin(margin);
- }
- virtual btScalar getMargin() const
- {
- return btConvexInternalShape::getMargin();
- }
-};
-
-//
-// Inline's
-//
-
-//
-template <typename T>
-static inline void ZeroInitialize(T& value)
-{
- memset(&value, 0, sizeof(T));
-}
-//
-template <typename T>
-static inline bool CompLess(const T& a, const T& b)
-{
- return (a < b);
-}
-//
-template <typename T>
-static inline bool CompGreater(const T& a, const T& b)
-{
- return (a > b);
-}
-//
-template <typename T>
-static inline T Lerp(const T& a, const T& b, btScalar t)
-{
- return (a + (b - a) * t);
-}
-//
-template <typename T>
-static inline T InvLerp(const T& a, const T& b, btScalar t)
-{
- return ((b + a * t - b * t) / (a * b));
-}
-//
-static inline btMatrix3x3 Lerp(const btMatrix3x3& a,
- const btMatrix3x3& b,
- btScalar t)
-{
- btMatrix3x3 r;
- r[0] = Lerp(a[0], b[0], t);
- r[1] = Lerp(a[1], b[1], t);
- r[2] = Lerp(a[2], b[2], t);
- return (r);
-}
-//
-static inline btVector3 Clamp(const btVector3& v, btScalar maxlength)
-{
- const btScalar sql = v.length2();
- if (sql > (maxlength * maxlength))
- return ((v * maxlength) / btSqrt(sql));
- else
- return (v);
-}
-//
-template <typename T>
-static inline T Clamp(const T& x, const T& l, const T& h)
-{
- return (x < l ? l : x > h ? h : x);
-}
-//
-template <typename T>
-static inline T Sq(const T& x)
-{
- return (x * x);
-}
-//
-template <typename T>
-static inline T Cube(const T& x)
-{
- return (x * x * x);
-}
-//
-template <typename T>
-static inline T Sign(const T& x)
-{
- return ((T)(x < 0 ? -1 : +1));
-}
-//
-template <typename T>
-static inline bool SameSign(const T& x, const T& y)
-{
- return ((x * y) > 0);
-}
-//
-static inline btScalar ClusterMetric(const btVector3& x, const btVector3& y)
-{
- const btVector3 d = x - y;
- return (btFabs(d[0]) + btFabs(d[1]) + btFabs(d[2]));
-}
-//
-static inline btMatrix3x3 ScaleAlongAxis(const btVector3& a, btScalar s)
-{
- const btScalar xx = a.x() * a.x();
- const btScalar yy = a.y() * a.y();
- const btScalar zz = a.z() * a.z();
- const btScalar xy = a.x() * a.y();
- const btScalar yz = a.y() * a.z();
- const btScalar zx = a.z() * a.x();
- btMatrix3x3 m;
- m[0] = btVector3(1 - xx + xx * s, xy * s - xy, zx * s - zx);
- m[1] = btVector3(xy * s - xy, 1 - yy + yy * s, yz * s - yz);
- m[2] = btVector3(zx * s - zx, yz * s - yz, 1 - zz + zz * s);
- return (m);
-}
-//
-static inline btMatrix3x3 Cross(const btVector3& v)
-{
- btMatrix3x3 m;
- m[0] = btVector3(0, -v.z(), +v.y());
- m[1] = btVector3(+v.z(), 0, -v.x());
- m[2] = btVector3(-v.y(), +v.x(), 0);
- return (m);
-}
-//
-static inline btMatrix3x3 Diagonal(btScalar x)
-{
- btMatrix3x3 m;
- m[0] = btVector3(x, 0, 0);
- m[1] = btVector3(0, x, 0);
- m[2] = btVector3(0, 0, x);
- return (m);
-}
-
-static inline btMatrix3x3 Diagonal(const btVector3& v)
-{
- btMatrix3x3 m;
- m[0] = btVector3(v.getX(), 0, 0);
- m[1] = btVector3(0, v.getY(), 0);
- m[2] = btVector3(0, 0, v.getZ());
- return (m);
-}
-
-static inline btScalar Dot(const btScalar* a, const btScalar* b, int ndof)
-{
- btScalar result = 0;
- for (int i = 0; i < ndof; ++i)
- result += a[i] * b[i];
- return result;
-}
-
-static inline btMatrix3x3 OuterProduct(const btScalar* v1, const btScalar* v2, const btScalar* v3,
- const btScalar* u1, const btScalar* u2, const btScalar* u3, int ndof)
-{
- btMatrix3x3 m;
- btScalar a11 = Dot(v1, u1, ndof);
- btScalar a12 = Dot(v1, u2, ndof);
- btScalar a13 = Dot(v1, u3, ndof);
-
- btScalar a21 = Dot(v2, u1, ndof);
- btScalar a22 = Dot(v2, u2, ndof);
- btScalar a23 = Dot(v2, u3, ndof);
-
- btScalar a31 = Dot(v3, u1, ndof);
- btScalar a32 = Dot(v3, u2, ndof);
- btScalar a33 = Dot(v3, u3, ndof);
- m[0] = btVector3(a11, a12, a13);
- m[1] = btVector3(a21, a22, a23);
- m[2] = btVector3(a31, a32, a33);
- return (m);
-}
-
-static inline btMatrix3x3 OuterProduct(const btVector3& v1, const btVector3& v2)
-{
- btMatrix3x3 m;
- btScalar a11 = v1[0] * v2[0];
- btScalar a12 = v1[0] * v2[1];
- btScalar a13 = v1[0] * v2[2];
-
- btScalar a21 = v1[1] * v2[0];
- btScalar a22 = v1[1] * v2[1];
- btScalar a23 = v1[1] * v2[2];
-
- btScalar a31 = v1[2] * v2[0];
- btScalar a32 = v1[2] * v2[1];
- btScalar a33 = v1[2] * v2[2];
- m[0] = btVector3(a11, a12, a13);
- m[1] = btVector3(a21, a22, a23);
- m[2] = btVector3(a31, a32, a33);
- return (m);
-}
-
-//
-static inline btMatrix3x3 Add(const btMatrix3x3& a,
- const btMatrix3x3& b)
-{
- btMatrix3x3 r;
- for (int i = 0; i < 3; ++i) r[i] = a[i] + b[i];
- return (r);
-}
-//
-static inline btMatrix3x3 Sub(const btMatrix3x3& a,
- const btMatrix3x3& b)
-{
- btMatrix3x3 r;
- for (int i = 0; i < 3; ++i) r[i] = a[i] - b[i];
- return (r);
-}
-//
-static inline btMatrix3x3 Mul(const btMatrix3x3& a,
- btScalar b)
-{
- btMatrix3x3 r;
- for (int i = 0; i < 3; ++i) r[i] = a[i] * b;
- return (r);
-}
-//
-static inline void Orthogonalize(btMatrix3x3& m)
-{
- m[2] = btCross(m[0], m[1]).normalized();
- m[1] = btCross(m[2], m[0]).normalized();
- m[0] = btCross(m[1], m[2]).normalized();
-}
-//
-static inline btMatrix3x3 MassMatrix(btScalar im, const btMatrix3x3& iwi, const btVector3& r)
-{
- const btMatrix3x3 cr = Cross(r);
- return (Sub(Diagonal(im), cr * iwi * cr));
-}
-
-//
-static inline btMatrix3x3 ImpulseMatrix(btScalar dt,
- btScalar ima,
- btScalar imb,
- const btMatrix3x3& iwi,
- const btVector3& r)
-{
- return (Diagonal(1 / dt) * Add(Diagonal(ima), MassMatrix(imb, iwi, r)).inverse());
-}
-
-//
-static inline btMatrix3x3 ImpulseMatrix(btScalar dt,
- const btMatrix3x3& effective_mass_inv,
- btScalar imb,
- const btMatrix3x3& iwi,
- const btVector3& r)
-{
- return (Diagonal(1 / dt) * Add(effective_mass_inv, MassMatrix(imb, iwi, r)).inverse());
- // btMatrix3x3 iimb = MassMatrix(imb, iwi, r);
- // if (iimb.determinant() == 0)
- // return effective_mass_inv.inverse();
- // return effective_mass_inv.inverse() * Add(effective_mass_inv.inverse(), iimb.inverse()).inverse() * iimb.inverse();
-}
-
-//
-static inline btMatrix3x3 ImpulseMatrix(btScalar ima, const btMatrix3x3& iia, const btVector3& ra,
- btScalar imb, const btMatrix3x3& iib, const btVector3& rb)
-{
- return (Add(MassMatrix(ima, iia, ra), MassMatrix(imb, iib, rb)).inverse());
-}
-
-//
-static inline btMatrix3x3 AngularImpulseMatrix(const btMatrix3x3& iia,
- const btMatrix3x3& iib)
-{
- return (Add(iia, iib).inverse());
-}
-
-//
-static inline btVector3 ProjectOnAxis(const btVector3& v,
- const btVector3& a)
-{
- return (a * btDot(v, a));
-}
-//
-static inline btVector3 ProjectOnPlane(const btVector3& v,
- const btVector3& a)
-{
- return (v - ProjectOnAxis(v, a));
-}
-
-//
-static inline void ProjectOrigin(const btVector3& a,
- const btVector3& b,
- btVector3& prj,
- btScalar& sqd)
-{
- const btVector3 d = b - a;
- const btScalar m2 = d.length2();
- if (m2 > SIMD_EPSILON)
- {
- const btScalar t = Clamp<btScalar>(-btDot(a, d) / m2, 0, 1);
- const btVector3 p = a + d * t;
- const btScalar l2 = p.length2();
- if (l2 < sqd)
- {
- prj = p;
- sqd = l2;
- }
- }
-}
-//
-static inline void ProjectOrigin(const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- btVector3& prj,
- btScalar& sqd)
-{
- const btVector3& q = btCross(b - a, c - a);
- const btScalar m2 = q.length2();
- if (m2 > SIMD_EPSILON)
- {
- const btVector3 n = q / btSqrt(m2);
- const btScalar k = btDot(a, n);
- const btScalar k2 = k * k;
- if (k2 < sqd)
- {
- const btVector3 p = n * k;
- if ((btDot(btCross(a - p, b - p), q) > 0) &&
- (btDot(btCross(b - p, c - p), q) > 0) &&
- (btDot(btCross(c - p, a - p), q) > 0))
- {
- prj = p;
- sqd = k2;
- }
- else
- {
- ProjectOrigin(a, b, prj, sqd);
- ProjectOrigin(b, c, prj, sqd);
- ProjectOrigin(c, a, prj, sqd);
- }
- }
- }
-}
-
-//
-static inline bool rayIntersectsTriangle(const btVector3& origin, const btVector3& dir, const btVector3& v0, const btVector3& v1, const btVector3& v2, btScalar& t)
-{
- btScalar a, f, u, v;
-
- btVector3 e1 = v1 - v0;
- btVector3 e2 = v2 - v0;
- btVector3 h = dir.cross(e2);
- a = e1.dot(h);
-
- if (a > -0.00001 && a < 0.00001)
- return (false);
-
- f = btScalar(1) / a;
- btVector3 s = origin - v0;
- u = f * s.dot(h);
-
- if (u < 0.0 || u > 1.0)
- return (false);
-
- btVector3 q = s.cross(e1);
- v = f * dir.dot(q);
- if (v < 0.0 || u + v > 1.0)
- return (false);
- // at this stage we can compute t to find out where
- // the intersection point is on the line
- t = f * e2.dot(q);
- if (t > 0) // ray intersection
- return (true);
- else // this means that there is a line intersection
- // but not a ray intersection
- return (false);
-}
-
-static inline bool lineIntersectsTriangle(const btVector3& rayStart, const btVector3& rayEnd, const btVector3& p1, const btVector3& p2, const btVector3& p3, btVector3& sect, btVector3& normal)
-{
- btVector3 dir = rayEnd - rayStart;
- btScalar dir_norm = dir.norm();
- if (dir_norm < SIMD_EPSILON)
- return false;
- dir.normalize();
- btScalar t;
- bool ret = rayIntersectsTriangle(rayStart, dir, p1, p2, p3, t);
-
- if (ret)
- {
- if (t <= dir_norm)
- {
- sect = rayStart + dir * t;
- }
- else
- {
- ret = false;
- }
- }
-
- if (ret)
- {
- btVector3 n = (p3 - p1).cross(p2 - p1);
- n.safeNormalize();
- if (n.dot(dir) < 0)
- normal = n;
- else
- normal = -n;
- }
- return ret;
-}
-
-//
-template <typename T>
-static inline T BaryEval(const T& a,
- const T& b,
- const T& c,
- const btVector3& coord)
-{
- return (a * coord.x() + b * coord.y() + c * coord.z());
-}
-//
-static inline btVector3 BaryCoord(const btVector3& a,
- const btVector3& b,
- const btVector3& c,
- const btVector3& p)
-{
- const btScalar w[] = {btCross(a - p, b - p).length(),
- btCross(b - p, c - p).length(),
- btCross(c - p, a - p).length()};
- const btScalar isum = 1 / (w[0] + w[1] + w[2]);
- return (btVector3(w[1] * isum, w[2] * isum, w[0] * isum));
-}
-
-//
-inline static btScalar ImplicitSolve(btSoftBody::ImplicitFn* fn,
- const btVector3& a,
- const btVector3& b,
- const btScalar accuracy,
- const int maxiterations = 256)
-{
- btScalar span[2] = {0, 1};
- btScalar values[2] = {fn->Eval(a), fn->Eval(b)};
- if (values[0] > values[1])
- {
- btSwap(span[0], span[1]);
- btSwap(values[0], values[1]);
- }
- if (values[0] > -accuracy) return (-1);
- if (values[1] < +accuracy) return (-1);
- for (int i = 0; i < maxiterations; ++i)
- {
- const btScalar t = Lerp(span[0], span[1], values[0] / (values[0] - values[1]));
- const btScalar v = fn->Eval(Lerp(a, b, t));
- if ((t <= 0) || (t >= 1)) break;
- if (btFabs(v) < accuracy) return (t);
- if (v < 0)
- {
- span[0] = t;
- values[0] = v;
- }
- else
- {
- span[1] = t;
- values[1] = v;
- }
- }
- return (-1);
-}
-
-inline static void EvaluateMedium(const btSoftBodyWorldInfo* wfi,
- const btVector3& x,
- btSoftBody::sMedium& medium)
-{
- medium.m_velocity = btVector3(0, 0, 0);
- medium.m_pressure = 0;
- medium.m_density = wfi->air_density;
- if (wfi->water_density > 0)
- {
- const btScalar depth = -(btDot(x, wfi->water_normal) + wfi->water_offset);
- if (depth > 0)
- {
- medium.m_density = wfi->water_density;
- medium.m_pressure = depth * wfi->water_density * wfi->m_gravity.length();
- }
- }
-}
-
-//
-static inline btVector3 NormalizeAny(const btVector3& v)
-{
- const btScalar l = v.length();
- if (l > SIMD_EPSILON)
- return (v / l);
- else
- return (btVector3(0, 0, 0));
-}
-
-//
-static inline btDbvtVolume VolumeOf(const btSoftBody::Face& f,
- btScalar margin)
-{
- const btVector3* pts[] = {&f.m_n[0]->m_x,
- &f.m_n[1]->m_x,
- &f.m_n[2]->m_x};
- btDbvtVolume vol = btDbvtVolume::FromPoints(pts, 3);
- vol.Expand(btVector3(margin, margin, margin));
- return (vol);
-}
-
-//
-static inline btVector3 CenterOf(const btSoftBody::Face& f)
-{
- return ((f.m_n[0]->m_x + f.m_n[1]->m_x + f.m_n[2]->m_x) / 3);
-}
-
-//
-static inline btScalar AreaOf(const btVector3& x0,
- const btVector3& x1,
- const btVector3& x2)
-{
- const btVector3 a = x1 - x0;
- const btVector3 b = x2 - x0;
- const btVector3 cr = btCross(a, b);
- const btScalar area = cr.length();
- return (area);
-}
-
-//
-static inline btScalar VolumeOf(const btVector3& x0,
- const btVector3& x1,
- const btVector3& x2,
- const btVector3& x3)
-{
- const btVector3 a = x1 - x0;
- const btVector3 b = x2 - x0;
- const btVector3 c = x3 - x0;
- return (btDot(a, btCross(b, c)));
-}
-
-//
-
-//
-static inline void ApplyClampedForce(btSoftBody::Node& n,
- const btVector3& f,
- btScalar dt)
-{
- const btScalar dtim = dt * n.m_im;
- if ((f * dtim).length2() > n.m_v.length2())
- { /* Clamp */
- n.m_f -= ProjectOnAxis(n.m_v, f.normalized()) / dtim;
- }
- else
- { /* Apply */
- n.m_f += f;
- }
-}
-
-//
-static inline int MatchEdge(const btSoftBody::Node* a,
- const btSoftBody::Node* b,
- const btSoftBody::Node* ma,
- const btSoftBody::Node* mb)
-{
- if ((a == ma) && (b == mb)) return (0);
- if ((a == mb) && (b == ma)) return (1);
- return (-1);
-}
-
-//
-// btEigen : Extract eigen system,
-// straitforward implementation of http://math.fullerton.edu/mathews/n2003/JacobiMethodMod.html
-// outputs are NOT sorted.
-//
-struct btEigen
-{
- static int system(btMatrix3x3& a, btMatrix3x3* vectors, btVector3* values = 0)
- {
- static const int maxiterations = 16;
- static const btScalar accuracy = (btScalar)0.0001;
- btMatrix3x3& v = *vectors;
- int iterations = 0;
- vectors->setIdentity();
- do
- {
- int p = 0, q = 1;
- if (btFabs(a[p][q]) < btFabs(a[0][2]))
- {
- p = 0;
- q = 2;
- }
- if (btFabs(a[p][q]) < btFabs(a[1][2]))
- {
- p = 1;
- q = 2;
- }
- if (btFabs(a[p][q]) > accuracy)
- {
- const btScalar w = (a[q][q] - a[p][p]) / (2 * a[p][q]);
- const btScalar z = btFabs(w);
- const btScalar t = w / (z * (btSqrt(1 + w * w) + z));
- if (t == t) /* [WARNING] let hope that one does not get thrown aways by some compilers... */
- {
- const btScalar c = 1 / btSqrt(t * t + 1);
- const btScalar s = c * t;
- mulPQ(a, c, s, p, q);
- mulTPQ(a, c, s, p, q);
- mulPQ(v, c, s, p, q);
- }
- else
- break;
- }
- else
- break;
- } while ((++iterations) < maxiterations);
- if (values)
- {
- *values = btVector3(a[0][0], a[1][1], a[2][2]);
- }
- return (iterations);
- }
-
-private:
- static inline void mulTPQ(btMatrix3x3& a, btScalar c, btScalar s, int p, int q)
- {
- const btScalar m[2][3] = {{a[p][0], a[p][1], a[p][2]},
- {a[q][0], a[q][1], a[q][2]}};
- int i;
-
- for (i = 0; i < 3; ++i) a[p][i] = c * m[0][i] - s * m[1][i];
- for (i = 0; i < 3; ++i) a[q][i] = c * m[1][i] + s * m[0][i];
- }
- static inline void mulPQ(btMatrix3x3& a, btScalar c, btScalar s, int p, int q)
- {
- const btScalar m[2][3] = {{a[0][p], a[1][p], a[2][p]},
- {a[0][q], a[1][q], a[2][q]}};
- int i;
-
- for (i = 0; i < 3; ++i) a[i][p] = c * m[0][i] - s * m[1][i];
- for (i = 0; i < 3; ++i) a[i][q] = c * m[1][i] + s * m[0][i];
- }
-};
-
-//
-// Polar decomposition,
-// "Computing the Polar Decomposition with Applications", Nicholas J. Higham, 1986.
-//
-static inline int PolarDecompose(const btMatrix3x3& m, btMatrix3x3& q, btMatrix3x3& s)
-{
- static const btPolarDecomposition polar;
- return polar.decompose(m, q, s);
-}
-
-//
-// btSoftColliders
-//
-struct btSoftColliders
-{
- //
- // ClusterBase
- //
- struct ClusterBase : btDbvt::ICollide
- {
- btScalar erp;
- btScalar idt;
- btScalar m_margin;
- btScalar friction;
- btScalar threshold;
- ClusterBase()
- {
- erp = (btScalar)1;
- idt = 0;
- m_margin = 0;
- friction = 0;
- threshold = (btScalar)0;
- }
- bool SolveContact(const btGjkEpaSolver2::sResults& res,
- btSoftBody::Body ba, const btSoftBody::Body bb,
- btSoftBody::CJoint& joint)
- {
- if (res.distance < m_margin)
- {
- btVector3 norm = res.normal;
- norm.normalize(); //is it necessary?
-
- const btVector3 ra = res.witnesses[0] - ba.xform().getOrigin();
- const btVector3 rb = res.witnesses[1] - bb.xform().getOrigin();
- const btVector3 va = ba.velocity(ra);
- const btVector3 vb = bb.velocity(rb);
- const btVector3 vrel = va - vb;
- const btScalar rvac = btDot(vrel, norm);
- btScalar depth = res.distance - m_margin;
-
- // printf("depth=%f\n",depth);
- const btVector3 iv = norm * rvac;
- const btVector3 fv = vrel - iv;
- joint.m_bodies[0] = ba;
- joint.m_bodies[1] = bb;
- joint.m_refs[0] = ra * ba.xform().getBasis();
- joint.m_refs[1] = rb * bb.xform().getBasis();
- joint.m_rpos[0] = ra;
- joint.m_rpos[1] = rb;
- joint.m_cfm = 1;
- joint.m_erp = 1;
- joint.m_life = 0;
- joint.m_maxlife = 0;
- joint.m_split = 1;
-
- joint.m_drift = depth * norm;
-
- joint.m_normal = norm;
- // printf("normal=%f,%f,%f\n",res.normal.getX(),res.normal.getY(),res.normal.getZ());
- joint.m_delete = false;
- joint.m_friction = fv.length2() < (rvac * friction * rvac * friction) ? 1 : friction;
- joint.m_massmatrix = ImpulseMatrix(ba.invMass(), ba.invWorldInertia(), joint.m_rpos[0],
- bb.invMass(), bb.invWorldInertia(), joint.m_rpos[1]);
-
- return (true);
- }
- return (false);
- }
- };
- //
- // CollideCL_RS
- //
- struct CollideCL_RS : ClusterBase
- {
- btSoftBody* psb;
- const btCollisionObjectWrapper* m_colObjWrap;
-
- void Process(const btDbvtNode* leaf)
- {
- btSoftBody::Cluster* cluster = (btSoftBody::Cluster*)leaf->data;
- btSoftClusterCollisionShape cshape(cluster);
-
- const btConvexShape* rshape = (const btConvexShape*)m_colObjWrap->getCollisionShape();
-
- ///don't collide an anchored cluster with a static/kinematic object
- if (m_colObjWrap->getCollisionObject()->isStaticOrKinematicObject() && cluster->m_containsAnchor)
- return;
-
- btGjkEpaSolver2::sResults res;
- if (btGjkEpaSolver2::SignedDistance(&cshape, btTransform::getIdentity(),
- rshape, m_colObjWrap->getWorldTransform(),
- btVector3(1, 0, 0), res))
- {
- btSoftBody::CJoint joint;
- if (SolveContact(res, cluster, m_colObjWrap->getCollisionObject(), joint)) //prb,joint))
- {
- btSoftBody::CJoint* pj = new (btAlignedAlloc(sizeof(btSoftBody::CJoint), 16)) btSoftBody::CJoint();
- *pj = joint;
- psb->m_joints.push_back(pj);
- if (m_colObjWrap->getCollisionObject()->isStaticOrKinematicObject())
- {
- pj->m_erp *= psb->m_cfg.kSKHR_CL;
- pj->m_split *= psb->m_cfg.kSK_SPLT_CL;
- }
- else
- {
- pj->m_erp *= psb->m_cfg.kSRHR_CL;
- pj->m_split *= psb->m_cfg.kSR_SPLT_CL;
- }
- }
- }
- }
- void ProcessColObj(btSoftBody* ps, const btCollisionObjectWrapper* colObWrap)
- {
- psb = ps;
- m_colObjWrap = colObWrap;
- idt = ps->m_sst.isdt;
- m_margin = m_colObjWrap->getCollisionShape()->getMargin() + psb->getCollisionShape()->getMargin();
- ///Bullet rigid body uses multiply instead of minimum to determine combined friction. Some customization would be useful.
- friction = btMin(psb->m_cfg.kDF, m_colObjWrap->getCollisionObject()->getFriction());
- btVector3 mins;
- btVector3 maxs;
-
- ATTRIBUTE_ALIGNED16(btDbvtVolume)
- volume;
- colObWrap->getCollisionShape()->getAabb(colObWrap->getWorldTransform(), mins, maxs);
- volume = btDbvtVolume::FromMM(mins, maxs);
- volume.Expand(btVector3(1, 1, 1) * m_margin);
- ps->m_cdbvt.collideTV(ps->m_cdbvt.m_root, volume, *this);
- }
- };
- //
- // CollideCL_SS
- //
- struct CollideCL_SS : ClusterBase
- {
- btSoftBody* bodies[2];
- void Process(const btDbvtNode* la, const btDbvtNode* lb)
- {
- btSoftBody::Cluster* cla = (btSoftBody::Cluster*)la->data;
- btSoftBody::Cluster* clb = (btSoftBody::Cluster*)lb->data;
-
- bool connected = false;
- if ((bodies[0] == bodies[1]) && (bodies[0]->m_clusterConnectivity.size()))
- {
- connected = bodies[0]->m_clusterConnectivity[cla->m_clusterIndex + bodies[0]->m_clusters.size() * clb->m_clusterIndex];
- }
-
- if (!connected)
- {
- btSoftClusterCollisionShape csa(cla);
- btSoftClusterCollisionShape csb(clb);
- btGjkEpaSolver2::sResults res;
- if (btGjkEpaSolver2::SignedDistance(&csa, btTransform::getIdentity(),
- &csb, btTransform::getIdentity(),
- cla->m_com - clb->m_com, res))
- {
- btSoftBody::CJoint joint;
- if (SolveContact(res, cla, clb, joint))
- {
- btSoftBody::CJoint* pj = new (btAlignedAlloc(sizeof(btSoftBody::CJoint), 16)) btSoftBody::CJoint();
- *pj = joint;
- bodies[0]->m_joints.push_back(pj);
- pj->m_erp *= btMax(bodies[0]->m_cfg.kSSHR_CL, bodies[1]->m_cfg.kSSHR_CL);
- pj->m_split *= (bodies[0]->m_cfg.kSS_SPLT_CL + bodies[1]->m_cfg.kSS_SPLT_CL) / 2;
- }
- }
- }
- else
- {
- static int count = 0;
- count++;
- //printf("count=%d\n",count);
- }
- }
- void ProcessSoftSoft(btSoftBody* psa, btSoftBody* psb)
- {
- idt = psa->m_sst.isdt;
- //m_margin = (psa->getCollisionShape()->getMargin()+psb->getCollisionShape()->getMargin())/2;
- m_margin = (psa->getCollisionShape()->getMargin() + psb->getCollisionShape()->getMargin());
- friction = btMin(psa->m_cfg.kDF, psb->m_cfg.kDF);
- bodies[0] = psa;
- bodies[1] = psb;
- psa->m_cdbvt.collideTT(psa->m_cdbvt.m_root, psb->m_cdbvt.m_root, *this);
- }
- };
- //
- // CollideSDF_RS
- //
- struct CollideSDF_RS : btDbvt::ICollide
- {
- void Process(const btDbvtNode* leaf)
- {
- btSoftBody::Node* node = (btSoftBody::Node*)leaf->data;
- DoNode(*node);
- }
- void DoNode(btSoftBody::Node& n) const
- {
- const btScalar m = n.m_im > 0 ? dynmargin : stamargin;
- btSoftBody::RContact c;
-
- if ((!n.m_battach) &&
- psb->checkContact(m_colObj1Wrap, n.m_x, m, c.m_cti))
- {
- const btScalar ima = n.m_im;
- const btScalar imb = m_rigidBody ? m_rigidBody->getInvMass() : 0.f;
- const btScalar ms = ima + imb;
- if (ms > 0)
- {
- const btTransform& wtr = m_rigidBody ? m_rigidBody->getWorldTransform() : m_colObj1Wrap->getCollisionObject()->getWorldTransform();
- static const btMatrix3x3 iwiStatic(0, 0, 0, 0, 0, 0, 0, 0, 0);
- const btMatrix3x3& iwi = m_rigidBody ? m_rigidBody->getInvInertiaTensorWorld() : iwiStatic;
- const btVector3 ra = n.m_x - wtr.getOrigin();
- const btVector3 va = m_rigidBody ? m_rigidBody->getVelocityInLocalPoint(ra) * psb->m_sst.sdt : btVector3(0, 0, 0);
- const btVector3 vb = n.m_x - n.m_q;
- const btVector3 vr = vb - va;
- const btScalar dn = btDot(vr, c.m_cti.m_normal);
- const btVector3 fv = vr - c.m_cti.m_normal * dn;
- const btScalar fc = psb->m_cfg.kDF * m_colObj1Wrap->getCollisionObject()->getFriction();
- c.m_node = &n;
- c.m_c0 = ImpulseMatrix(psb->m_sst.sdt, ima, imb, iwi, ra);
- c.m_c1 = ra;
- c.m_c2 = ima * psb->m_sst.sdt;
- c.m_c3 = fv.length2() < (dn * fc * dn * fc) ? 0 : 1 - fc;
- c.m_c4 = m_colObj1Wrap->getCollisionObject()->isStaticOrKinematicObject() ? psb->m_cfg.kKHR : psb->m_cfg.kCHR;
- psb->m_rcontacts.push_back(c);
- if (m_rigidBody)
- m_rigidBody->activate();
- }
- }
- }
- btSoftBody* psb;
- const btCollisionObjectWrapper* m_colObj1Wrap;
- btRigidBody* m_rigidBody;
- btScalar dynmargin;
- btScalar stamargin;
- };
-
- //
- // CollideSDF_RD
- //
- struct CollideSDF_RD : btDbvt::ICollide
- {
- void Process(const btDbvtNode* leaf)
- {
- btSoftBody::Node* node = (btSoftBody::Node*)leaf->data;
- DoNode(*node);
- }
- void DoNode(btSoftBody::Node& n) const
- {
- const btScalar m = n.m_im > 0 ? dynmargin : stamargin;
- btSoftBody::DeformableNodeRigidContact c;
-
- if (!n.m_battach)
- {
- // check for collision at x_{n+1}^*
- if (psb->checkDeformableContact(m_colObj1Wrap, n.m_q, m, c.m_cti, /*predict = */ true))
- {
- const btScalar ima = n.m_im;
- // todo: collision between multibody and fixed deformable node will be missed.
- const btScalar imb = m_rigidBody ? m_rigidBody->getInvMass() : 0.f;
- const btScalar ms = ima + imb;
- if (ms > 0)
- {
- // resolve contact at x_n
- psb->checkDeformableContact(m_colObj1Wrap, n.m_x, m, c.m_cti, /*predict = */ false);
- btSoftBody::sCti& cti = c.m_cti;
- c.m_node = &n;
- const btScalar fc = psb->m_cfg.kDF * m_colObj1Wrap->getCollisionObject()->getFriction();
- c.m_c2 = ima;
- c.m_c3 = fc;
- c.m_c4 = m_colObj1Wrap->getCollisionObject()->isStaticOrKinematicObject() ? psb->m_cfg.kKHR : psb->m_cfg.kCHR;
- c.m_c5 = n.m_effectiveMass_inv;
-
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- const btTransform& wtr = m_rigidBody ? m_rigidBody->getWorldTransform() : m_colObj1Wrap->getCollisionObject()->getWorldTransform();
- static const btMatrix3x3 iwiStatic(0, 0, 0, 0, 0, 0, 0, 0, 0);
- const btMatrix3x3& iwi = m_rigidBody ? m_rigidBody->getInvInertiaTensorWorld() : iwiStatic;
- const btVector3 ra = n.m_x - wtr.getOrigin();
-
- c.m_c0 = ImpulseMatrix(1, n.m_effectiveMass_inv, imb, iwi, ra);
- // c.m_c0 = ImpulseMatrix(1, ima, imb, iwi, ra);
- c.m_c1 = ra;
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- btMultiBodyLinkCollider* multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- btVector3 normal = cti.m_normal;
- btVector3 t1 = generateUnitOrthogonalVector(normal);
- btVector3 t2 = btCross(normal, t1);
- btMultiBodyJacobianData jacobianData_normal, jacobianData_t1, jacobianData_t2;
- findJacobian(multibodyLinkCol, jacobianData_normal, c.m_node->m_x, normal);
- findJacobian(multibodyLinkCol, jacobianData_t1, c.m_node->m_x, t1);
- findJacobian(multibodyLinkCol, jacobianData_t2, c.m_node->m_x, t2);
-
- btScalar* J_n = &jacobianData_normal.m_jacobians[0];
- btScalar* J_t1 = &jacobianData_t1.m_jacobians[0];
- btScalar* J_t2 = &jacobianData_t2.m_jacobians[0];
-
- btScalar* u_n = &jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t1 = &jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t2 = &jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
-
- btMatrix3x3 rot(normal.getX(), normal.getY(), normal.getZ(),
- t1.getX(), t1.getY(), t1.getZ(),
- t2.getX(), t2.getY(), t2.getZ()); // world frame to local frame
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- btMatrix3x3 local_impulse_matrix = (n.m_effectiveMass_inv + OuterProduct(J_n, J_t1, J_t2, u_n, u_t1, u_t2, ndof)).inverse();
- c.m_c0 = rot.transpose() * local_impulse_matrix * rot;
- c.jacobianData_normal = jacobianData_normal;
- c.jacobianData_t1 = jacobianData_t1;
- c.jacobianData_t2 = jacobianData_t2;
- c.t1 = t1;
- c.t2 = t2;
- }
- }
- psb->m_nodeRigidContacts.push_back(c);
- }
- }
- }
- }
- btSoftBody* psb;
- const btCollisionObjectWrapper* m_colObj1Wrap;
- btRigidBody* m_rigidBody;
- btScalar dynmargin;
- btScalar stamargin;
- };
-
- //
- // CollideSDF_RDF
- //
- struct CollideSDF_RDF : btDbvt::ICollide
- {
- void Process(const btDbvtNode* leaf)
- {
- btSoftBody::Face* face = (btSoftBody::Face*)leaf->data;
- DoNode(*face);
- }
- void DoNode(btSoftBody::Face& f) const
- {
- btSoftBody::Node* n0 = f.m_n[0];
- btSoftBody::Node* n1 = f.m_n[1];
- btSoftBody::Node* n2 = f.m_n[2];
- const btScalar m = (n0->m_im > 0 && n1->m_im > 0 && n2->m_im > 0) ? dynmargin : stamargin;
- btSoftBody::DeformableFaceRigidContact c;
- btVector3 contact_point;
- btVector3 bary;
- if (psb->checkDeformableFaceContact(m_colObj1Wrap, f, contact_point, bary, m, c.m_cti, true))
- {
- btScalar ima = n0->m_im + n1->m_im + n2->m_im;
- const btScalar imb = m_rigidBody ? m_rigidBody->getInvMass() : 0.f;
- // todo: collision between multibody and fixed deformable face will be missed.
- const btScalar ms = ima + imb;
- if (ms > 0)
- {
- // resolve contact at x_n
- // psb->checkDeformableFaceContact(m_colObj1Wrap, f, contact_point, bary, m, c.m_cti, /*predict = */ false);
- btSoftBody::sCti& cti = c.m_cti;
- c.m_contactPoint = contact_point;
- c.m_bary = bary;
- // todo xuchenhan@: this is assuming mass of all vertices are the same. Need to modify if mass are different for distinct vertices
- c.m_weights = btScalar(2) / (btScalar(1) + bary.length2()) * bary;
- c.m_face = &f;
- // friction is handled by the nodes to prevent sticking
- // const btScalar fc = 0;
- const btScalar fc = psb->m_cfg.kDF * m_colObj1Wrap->getCollisionObject()->getFriction();
-
- // the effective inverse mass of the face as in https://graphics.stanford.edu/papers/cloth-sig02/cloth.pdf
- ima = bary.getX() * c.m_weights.getX() * n0->m_im + bary.getY() * c.m_weights.getY() * n1->m_im + bary.getZ() * c.m_weights.getZ() * n2->m_im;
- c.m_c2 = ima;
- c.m_c3 = fc;
- c.m_c4 = m_colObj1Wrap->getCollisionObject()->isStaticOrKinematicObject() ? psb->m_cfg.kKHR : psb->m_cfg.kCHR;
- c.m_c5 = Diagonal(ima);
- if (cti.m_colObj->getInternalType() == btCollisionObject::CO_RIGID_BODY)
- {
- const btTransform& wtr = m_rigidBody ? m_rigidBody->getWorldTransform() : m_colObj1Wrap->getCollisionObject()->getWorldTransform();
- static const btMatrix3x3 iwiStatic(0, 0, 0, 0, 0, 0, 0, 0, 0);
- const btMatrix3x3& iwi = m_rigidBody ? m_rigidBody->getInvInertiaTensorWorld() : iwiStatic;
- const btVector3 ra = contact_point - wtr.getOrigin();
-
- // we do not scale the impulse matrix by dt
- c.m_c0 = ImpulseMatrix(1, ima, imb, iwi, ra);
- c.m_c1 = ra;
- }
- else if (cti.m_colObj->getInternalType() == btCollisionObject::CO_FEATHERSTONE_LINK)
- {
- btMultiBodyLinkCollider* multibodyLinkCol = (btMultiBodyLinkCollider*)btMultiBodyLinkCollider::upcast(cti.m_colObj);
- if (multibodyLinkCol)
- {
- btVector3 normal = cti.m_normal;
- btVector3 t1 = generateUnitOrthogonalVector(normal);
- btVector3 t2 = btCross(normal, t1);
- btMultiBodyJacobianData jacobianData_normal, jacobianData_t1, jacobianData_t2;
- findJacobian(multibodyLinkCol, jacobianData_normal, contact_point, normal);
- findJacobian(multibodyLinkCol, jacobianData_t1, contact_point, t1);
- findJacobian(multibodyLinkCol, jacobianData_t2, contact_point, t2);
-
- btScalar* J_n = &jacobianData_normal.m_jacobians[0];
- btScalar* J_t1 = &jacobianData_t1.m_jacobians[0];
- btScalar* J_t2 = &jacobianData_t2.m_jacobians[0];
-
- btScalar* u_n = &jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t1 = &jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
- btScalar* u_t2 = &jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
-
- btMatrix3x3 rot(normal.getX(), normal.getY(), normal.getZ(),
- t1.getX(), t1.getY(), t1.getZ(),
- t2.getX(), t2.getY(), t2.getZ()); // world frame to local frame
- const int ndof = multibodyLinkCol->m_multiBody->getNumDofs() + 6;
- btMatrix3x3 local_impulse_matrix = (Diagonal(ima) + OuterProduct(J_n, J_t1, J_t2, u_n, u_t1, u_t2, ndof)).inverse();
- c.m_c0 = rot.transpose() * local_impulse_matrix * rot;
- c.jacobianData_normal = jacobianData_normal;
- c.jacobianData_t1 = jacobianData_t1;
- c.jacobianData_t2 = jacobianData_t2;
- c.t1 = t1;
- c.t2 = t2;
- }
- }
- psb->m_faceRigidContacts.push_back(c);
- }
- }
- // Set caching barycenters to be false after collision detection.
- // Only turn on when contact is static.
- f.m_pcontact[3] = 0;
- }
- btSoftBody* psb;
- const btCollisionObjectWrapper* m_colObj1Wrap;
- btRigidBody* m_rigidBody;
- btScalar dynmargin;
- btScalar stamargin;
- };
-
- //
- // CollideVF_SS
- //
- struct CollideVF_SS : btDbvt::ICollide
- {
- void Process(const btDbvtNode* lnode,
- const btDbvtNode* lface)
- {
- btSoftBody::Node* node = (btSoftBody::Node*)lnode->data;
- btSoftBody::Face* face = (btSoftBody::Face*)lface->data;
- for (int i = 0; i < 3; ++i)
- {
- if (face->m_n[i] == node)
- continue;
- }
-
- btVector3 o = node->m_x;
- btVector3 p;
- btScalar d = SIMD_INFINITY;
- ProjectOrigin(face->m_n[0]->m_x - o,
- face->m_n[1]->m_x - o,
- face->m_n[2]->m_x - o,
- p, d);
- const btScalar m = mrg + (o - node->m_q).length() * 2;
- if (d < (m * m))
- {
- const btSoftBody::Node* n[] = {face->m_n[0], face->m_n[1], face->m_n[2]};
- const btVector3 w = BaryCoord(n[0]->m_x, n[1]->m_x, n[2]->m_x, p + o);
- const btScalar ma = node->m_im;
- btScalar mb = BaryEval(n[0]->m_im, n[1]->m_im, n[2]->m_im, w);
- if ((n[0]->m_im <= 0) ||
- (n[1]->m_im <= 0) ||
- (n[2]->m_im <= 0))
- {
- mb = 0;
- }
- const btScalar ms = ma + mb;
- if (ms > 0)
- {
- btSoftBody::SContact c;
- c.m_normal = p / -btSqrt(d);
- c.m_margin = m;
- c.m_node = node;
- c.m_face = face;
- c.m_weights = w;
- c.m_friction = btMax(psb[0]->m_cfg.kDF, psb[1]->m_cfg.kDF);
- c.m_cfm[0] = ma / ms * psb[0]->m_cfg.kSHR;
- c.m_cfm[1] = mb / ms * psb[1]->m_cfg.kSHR;
- psb[0]->m_scontacts.push_back(c);
- }
- }
- }
- btSoftBody* psb[2];
- btScalar mrg;
- };
-
- //
- // CollideVF_DD
- //
- struct CollideVF_DD : btDbvt::ICollide
- {
- void Process(const btDbvtNode* lnode,
- const btDbvtNode* lface)
- {
- btSoftBody::Node* node = (btSoftBody::Node*)lnode->data;
- btSoftBody::Face* face = (btSoftBody::Face*)lface->data;
- btVector3 bary;
- if (proximityTest(face->m_n[0]->m_x, face->m_n[1]->m_x, face->m_n[2]->m_x, node->m_x, face->m_normal, mrg, bary))
- {
- const btSoftBody::Node* n[] = {face->m_n[0], face->m_n[1], face->m_n[2]};
- const btVector3 w = bary;
- const btScalar ma = node->m_im;
- btScalar mb = BaryEval(n[0]->m_im, n[1]->m_im, n[2]->m_im, w);
- if ((n[0]->m_im <= 0) ||
- (n[1]->m_im <= 0) ||
- (n[2]->m_im <= 0))
- {
- mb = 0;
- }
- const btScalar ms = ma + mb;
- if (ms > 0)
- {
- btSoftBody::DeformableFaceNodeContact c;
- c.m_normal = face->m_normal;
- if (!useFaceNormal && c.m_normal.dot(node->m_x - face->m_n[2]->m_x) < 0)
- c.m_normal = -face->m_normal;
- c.m_margin = mrg;
- c.m_node = node;
- c.m_face = face;
- c.m_bary = w;
- c.m_friction = psb[0]->m_cfg.kDF * psb[1]->m_cfg.kDF;
- psb[0]->m_faceNodeContacts.push_back(c);
- }
- }
- }
- btSoftBody* psb[2];
- btScalar mrg;
- bool useFaceNormal;
- };
-
- //
- // CollideFF_DD
- //
- struct CollideFF_DD : btDbvt::ICollide
- {
- void Process(const btDbvntNode* lface1,
- const btDbvntNode* lface2)
- {
- btSoftBody::Face* f1 = (btSoftBody::Face*)lface1->data;
- btSoftBody::Face* f2 = (btSoftBody::Face*)lface2->data;
- if (f1 != f2)
- {
- Repel(f1, f2);
- Repel(f2, f1);
- }
- }
- void Repel(btSoftBody::Face* f1, btSoftBody::Face* f2)
- {
- //#define REPEL_NEIGHBOR 1
-#ifndef REPEL_NEIGHBOR
- for (int node_id = 0; node_id < 3; ++node_id)
- {
- btSoftBody::Node* node = f1->m_n[node_id];
- for (int i = 0; i < 3; ++i)
- {
- if (f2->m_n[i] == node)
- return;
- }
- }
-#endif
- bool skip = false;
- for (int node_id = 0; node_id < 3; ++node_id)
- {
- btSoftBody::Node* node = f1->m_n[node_id];
-#ifdef REPEL_NEIGHBOR
- for (int i = 0; i < 3; ++i)
- {
- if (f2->m_n[i] == node)
- {
- skip = true;
- break;
- }
- }
- if (skip)
- {
- skip = false;
- continue;
- }
-#endif
- btSoftBody::Face* face = f2;
- btVector3 bary;
- if (!proximityTest(face->m_n[0]->m_x, face->m_n[1]->m_x, face->m_n[2]->m_x, node->m_x, face->m_normal, mrg, bary))
- continue;
- btSoftBody::DeformableFaceNodeContact c;
- c.m_normal = face->m_normal;
- if (!useFaceNormal && c.m_normal.dot(node->m_x - face->m_n[2]->m_x) < 0)
- c.m_normal = -face->m_normal;
- c.m_margin = mrg;
- c.m_node = node;
- c.m_face = face;
- c.m_bary = bary;
- c.m_friction = psb[0]->m_cfg.kDF * psb[1]->m_cfg.kDF;
- psb[0]->m_faceNodeContacts.push_back(c);
- }
- }
- btSoftBody* psb[2];
- btScalar mrg;
- bool useFaceNormal;
- };
-
- struct CollideCCD : btDbvt::ICollide
- {
- void Process(const btDbvtNode* lnode,
- const btDbvtNode* lface)
- {
- btSoftBody::Node* node = (btSoftBody::Node*)lnode->data;
- btSoftBody::Face* face = (btSoftBody::Face*)lface->data;
- btVector3 bary;
- if (bernsteinCCD(face, node, dt, SAFE_EPSILON, bary))
- {
- btSoftBody::DeformableFaceNodeContact c;
- c.m_normal = face->m_normal;
- if (!useFaceNormal && c.m_normal.dot(node->m_x - face->m_n[2]->m_x) < 0)
- c.m_normal = -face->m_normal;
- c.m_node = node;
- c.m_face = face;
- c.m_bary = bary;
- c.m_friction = psb[0]->m_cfg.kDF * psb[1]->m_cfg.kDF;
- psb[0]->m_faceNodeContacts.push_back(c);
- }
- }
- void Process(const btDbvntNode* lface1,
- const btDbvntNode* lface2)
- {
- btSoftBody::Face* f1 = (btSoftBody::Face*)lface1->data;
- btSoftBody::Face* f2 = (btSoftBody::Face*)lface2->data;
- if (f1 != f2)
- {
- Repel(f1, f2);
- Repel(f2, f1);
- }
- }
- void Repel(btSoftBody::Face* f1, btSoftBody::Face* f2)
- {
- //#define REPEL_NEIGHBOR 1
-#ifndef REPEL_NEIGHBOR
- for (int node_id = 0; node_id < 3; ++node_id)
- {
- btSoftBody::Node* node = f1->m_n[node_id];
- for (int i = 0; i < 3; ++i)
- {
- if (f2->m_n[i] == node)
- return;
- }
- }
-#endif
- bool skip = false;
- for (int node_id = 0; node_id < 3; ++node_id)
- {
- btSoftBody::Node* node = f1->m_n[node_id];
-#ifdef REPEL_NEIGHBOR
- for (int i = 0; i < 3; ++i)
- {
- if (f2->m_n[i] == node)
- {
- skip = true;
- break;
- }
- }
- if (skip)
- {
- skip = false;
- continue;
- }
-#endif
- btSoftBody::Face* face = f2;
- btVector3 bary;
- if (bernsteinCCD(face, node, dt, SAFE_EPSILON, bary))
- {
- btSoftBody::DeformableFaceNodeContact c;
- c.m_normal = face->m_normal;
- if (!useFaceNormal && c.m_normal.dot(node->m_x - face->m_n[2]->m_x) < 0)
- c.m_normal = -face->m_normal;
- c.m_node = node;
- c.m_face = face;
- c.m_bary = bary;
- c.m_friction = psb[0]->m_cfg.kDF * psb[1]->m_cfg.kDF;
- psb[0]->m_faceNodeContacts.push_back(c);
- }
- }
- }
- btSoftBody* psb[2];
- btScalar dt, mrg;
- bool useFaceNormal;
- };
-};
-#endif //_BT_SOFT_BODY_INTERNALS_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp b/thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp
deleted file mode 100644
index 3127369ccd..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.cpp
+++ /dev/null
@@ -1,131 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSoftBodyRigidBodyCollisionConfiguration.h"
-#include "btSoftRigidCollisionAlgorithm.h"
-#include "btSoftBodyConcaveCollisionAlgorithm.h"
-#include "btSoftSoftCollisionAlgorithm.h"
-
-#include "LinearMath/btPoolAllocator.h"
-
-#define ENABLE_SOFTBODY_CONCAVE_COLLISIONS 1
-
-btSoftBodyRigidBodyCollisionConfiguration::btSoftBodyRigidBodyCollisionConfiguration(const btDefaultCollisionConstructionInfo& constructionInfo)
- : btDefaultCollisionConfiguration(constructionInfo)
-{
- void* mem;
-
- mem = btAlignedAlloc(sizeof(btSoftSoftCollisionAlgorithm::CreateFunc), 16);
- m_softSoftCreateFunc = new (mem) btSoftSoftCollisionAlgorithm::CreateFunc;
-
- mem = btAlignedAlloc(sizeof(btSoftRigidCollisionAlgorithm::CreateFunc), 16);
- m_softRigidConvexCreateFunc = new (mem) btSoftRigidCollisionAlgorithm::CreateFunc;
-
- mem = btAlignedAlloc(sizeof(btSoftRigidCollisionAlgorithm::CreateFunc), 16);
- m_swappedSoftRigidConvexCreateFunc = new (mem) btSoftRigidCollisionAlgorithm::CreateFunc;
- m_swappedSoftRigidConvexCreateFunc->m_swapped = true;
-
-#ifdef ENABLE_SOFTBODY_CONCAVE_COLLISIONS
- mem = btAlignedAlloc(sizeof(btSoftBodyConcaveCollisionAlgorithm::CreateFunc), 16);
- m_softRigidConcaveCreateFunc = new (mem) btSoftBodyConcaveCollisionAlgorithm::CreateFunc;
-
- mem = btAlignedAlloc(sizeof(btSoftBodyConcaveCollisionAlgorithm::CreateFunc), 16);
- m_swappedSoftRigidConcaveCreateFunc = new (mem) btSoftBodyConcaveCollisionAlgorithm::SwappedCreateFunc;
- m_swappedSoftRigidConcaveCreateFunc->m_swapped = true;
-#endif
-
- //replace pool by a new one, with potential larger size
-
- if (m_ownsCollisionAlgorithmPool && m_collisionAlgorithmPool)
- {
- int curElemSize = m_collisionAlgorithmPool->getElementSize();
- ///calculate maximum element size, big enough to fit any collision algorithm in the memory pool
-
- int maxSize0 = sizeof(btSoftSoftCollisionAlgorithm);
- int maxSize1 = sizeof(btSoftRigidCollisionAlgorithm);
- int maxSize2 = sizeof(btSoftBodyConcaveCollisionAlgorithm);
-
- int collisionAlgorithmMaxElementSize = btMax(maxSize0, maxSize1);
- collisionAlgorithmMaxElementSize = btMax(collisionAlgorithmMaxElementSize, maxSize2);
-
- if (collisionAlgorithmMaxElementSize > curElemSize)
- {
- m_collisionAlgorithmPool->~btPoolAllocator();
- btAlignedFree(m_collisionAlgorithmPool);
- void* mem = btAlignedAlloc(sizeof(btPoolAllocator), 16);
- m_collisionAlgorithmPool = new (mem) btPoolAllocator(collisionAlgorithmMaxElementSize, constructionInfo.m_defaultMaxCollisionAlgorithmPoolSize);
- }
- }
-}
-
-btSoftBodyRigidBodyCollisionConfiguration::~btSoftBodyRigidBodyCollisionConfiguration()
-{
- m_softSoftCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_softSoftCreateFunc);
-
- m_softRigidConvexCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_softRigidConvexCreateFunc);
-
- m_swappedSoftRigidConvexCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_swappedSoftRigidConvexCreateFunc);
-
-#ifdef ENABLE_SOFTBODY_CONCAVE_COLLISIONS
- m_softRigidConcaveCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_softRigidConcaveCreateFunc);
-
- m_swappedSoftRigidConcaveCreateFunc->~btCollisionAlgorithmCreateFunc();
- btAlignedFree(m_swappedSoftRigidConcaveCreateFunc);
-#endif
-}
-
-///creation of soft-soft and soft-rigid, and otherwise fallback to base class implementation
-btCollisionAlgorithmCreateFunc* btSoftBodyRigidBodyCollisionConfiguration::getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1)
-{
- ///try to handle the softbody interactions first
-
- if ((proxyType0 == SOFTBODY_SHAPE_PROXYTYPE) && (proxyType1 == SOFTBODY_SHAPE_PROXYTYPE))
- {
- return m_softSoftCreateFunc;
- }
-
- ///softbody versus convex
- if (proxyType0 == SOFTBODY_SHAPE_PROXYTYPE && btBroadphaseProxy::isConvex(proxyType1))
- {
- return m_softRigidConvexCreateFunc;
- }
-
- ///convex versus soft body
- if (btBroadphaseProxy::isConvex(proxyType0) && proxyType1 == SOFTBODY_SHAPE_PROXYTYPE)
- {
- return m_swappedSoftRigidConvexCreateFunc;
- }
-
-#ifdef ENABLE_SOFTBODY_CONCAVE_COLLISIONS
- ///softbody versus convex
- if (proxyType0 == SOFTBODY_SHAPE_PROXYTYPE && btBroadphaseProxy::isConcave(proxyType1))
- {
- return m_softRigidConcaveCreateFunc;
- }
-
- ///convex versus soft body
- if (btBroadphaseProxy::isConcave(proxyType0) && proxyType1 == SOFTBODY_SHAPE_PROXYTYPE)
- {
- return m_swappedSoftRigidConcaveCreateFunc;
- }
-#endif
-
- ///fallback to the regular rigid collision shape
- return btDefaultCollisionConfiguration::getCollisionAlgorithmCreateFunc(proxyType0, proxyType1);
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h b/thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h
deleted file mode 100644
index 0396a52dac..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFTBODY_RIGIDBODY_COLLISION_CONFIGURATION
-#define BT_SOFTBODY_RIGIDBODY_COLLISION_CONFIGURATION
-
-#include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h"
-
-class btVoronoiSimplexSolver;
-class btGjkEpaPenetrationDepthSolver;
-
-///btSoftBodyRigidBodyCollisionConfiguration add softbody interaction on top of btDefaultCollisionConfiguration
-class btSoftBodyRigidBodyCollisionConfiguration : public btDefaultCollisionConfiguration
-{
- //default CreationFunctions, filling the m_doubleDispatch table
- btCollisionAlgorithmCreateFunc* m_softSoftCreateFunc;
- btCollisionAlgorithmCreateFunc* m_softRigidConvexCreateFunc;
- btCollisionAlgorithmCreateFunc* m_swappedSoftRigidConvexCreateFunc;
- btCollisionAlgorithmCreateFunc* m_softRigidConcaveCreateFunc;
- btCollisionAlgorithmCreateFunc* m_swappedSoftRigidConcaveCreateFunc;
-
-public:
- btSoftBodyRigidBodyCollisionConfiguration(const btDefaultCollisionConstructionInfo& constructionInfo = btDefaultCollisionConstructionInfo());
-
- virtual ~btSoftBodyRigidBodyCollisionConfiguration();
-
- ///creation of soft-soft and soft-rigid, and otherwise fallback to base class implementation
- virtual btCollisionAlgorithmCreateFunc* getCollisionAlgorithmCreateFunc(int proxyType0, int proxyType1);
-};
-
-#endif //BT_SOFTBODY_RIGIDBODY_COLLISION_CONFIGURATION
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h b/thirdparty/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h
deleted file mode 100644
index bc538db4a2..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodySolverVertexBuffer.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_BODY_SOLVER_VERTEX_BUFFER_H
-#define BT_SOFT_BODY_SOLVER_VERTEX_BUFFER_H
-
-class btVertexBufferDescriptor
-{
-public:
- enum BufferTypes
- {
- CPU_BUFFER,
- DX11_BUFFER,
- OPENGL_BUFFER
- };
-
-protected:
- bool m_hasVertexPositions;
- bool m_hasNormals;
-
- int m_vertexOffset;
- int m_vertexStride;
-
- int m_normalOffset;
- int m_normalStride;
-
-public:
- btVertexBufferDescriptor()
- {
- m_hasVertexPositions = false;
- m_hasNormals = false;
- m_vertexOffset = 0;
- m_vertexStride = 0;
- m_normalOffset = 0;
- m_normalStride = 0;
- }
-
- virtual ~btVertexBufferDescriptor()
- {
- }
-
- virtual bool hasVertexPositions() const
- {
- return m_hasVertexPositions;
- }
-
- virtual bool hasNormals() const
- {
- return m_hasNormals;
- }
-
- /**
- * Return the type of the vertex buffer descriptor.
- */
- virtual BufferTypes getBufferType() const = 0;
-
- /**
- * Return the vertex offset in floats from the base pointer.
- */
- virtual int getVertexOffset() const
- {
- return m_vertexOffset;
- }
-
- /**
- * Return the vertex stride in number of floats between vertices.
- */
- virtual int getVertexStride() const
- {
- return m_vertexStride;
- }
-
- /**
- * Return the vertex offset in floats from the base pointer.
- */
- virtual int getNormalOffset() const
- {
- return m_normalOffset;
- }
-
- /**
- * Return the vertex stride in number of floats between vertices.
- */
- virtual int getNormalStride() const
- {
- return m_normalStride;
- }
-};
-
-class btCPUVertexBufferDescriptor : public btVertexBufferDescriptor
-{
-protected:
- float *m_basePointer;
-
-public:
- /**
- * vertexBasePointer is pointer to beginning of the buffer.
- * vertexOffset is the offset in floats to the first vertex.
- * vertexStride is the stride in floats between vertices.
- */
- btCPUVertexBufferDescriptor(float *basePointer, int vertexOffset, int vertexStride)
- {
- m_basePointer = basePointer;
- m_vertexOffset = vertexOffset;
- m_vertexStride = vertexStride;
- m_hasVertexPositions = true;
- }
-
- /**
- * vertexBasePointer is pointer to beginning of the buffer.
- * vertexOffset is the offset in floats to the first vertex.
- * vertexStride is the stride in floats between vertices.
- */
- btCPUVertexBufferDescriptor(float *basePointer, int vertexOffset, int vertexStride, int normalOffset, int normalStride)
- {
- m_basePointer = basePointer;
-
- m_vertexOffset = vertexOffset;
- m_vertexStride = vertexStride;
- m_hasVertexPositions = true;
-
- m_normalOffset = normalOffset;
- m_normalStride = normalStride;
- m_hasNormals = true;
- }
-
- virtual ~btCPUVertexBufferDescriptor()
- {
- }
-
- /**
- * Return the type of the vertex buffer descriptor.
- */
- virtual BufferTypes getBufferType() const
- {
- return CPU_BUFFER;
- }
-
- /**
- * Return the base pointer in memory to the first vertex.
- */
- virtual float *getBasePointer() const
- {
- return m_basePointer;
- }
-};
-
-#endif // #ifndef BT_SOFT_BODY_SOLVER_VERTEX_BUFFER_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBodySolvers.h b/thirdparty/bullet/BulletSoftBody/btSoftBodySolvers.h
deleted file mode 100644
index dbb2624eee..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftBodySolvers.h
+++ /dev/null
@@ -1,147 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_BODY_SOLVERS_H
-#define BT_SOFT_BODY_SOLVERS_H
-
-#include "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h"
-
-class btSoftBodyTriangleData;
-class btSoftBodyLinkData;
-class btSoftBodyVertexData;
-class btVertexBufferDescriptor;
-class btCollisionObject;
-class btSoftBody;
-
-class btSoftBodySolver
-{
-public:
- enum SolverTypes
- {
- DEFAULT_SOLVER,
- CPU_SOLVER,
- CL_SOLVER,
- CL_SIMD_SOLVER,
- DX_SOLVER,
- DX_SIMD_SOLVER,
- DEFORMABLE_SOLVER
- };
-
-protected:
- int m_numberOfPositionIterations;
- int m_numberOfVelocityIterations;
- // Simulation timescale
- float m_timeScale;
-
-public:
- btSoftBodySolver() : m_numberOfPositionIterations(10),
- m_timeScale(1)
- {
- m_numberOfVelocityIterations = 0;
- m_numberOfPositionIterations = 5;
- }
-
- virtual ~btSoftBodySolver()
- {
- }
-
- /**
- * Return the type of the solver.
- */
- virtual SolverTypes getSolverType() const = 0;
-
- /** Ensure that this solver is initialized. */
- virtual bool checkInitialized() = 0;
-
- /** Optimize soft bodies in this solver. */
- virtual void optimize(btAlignedObjectArray<btSoftBody *> &softBodies, bool forceUpdate = false) = 0;
-
- /** Copy necessary data back to the original soft body source objects. */
- virtual void copyBackToSoftBodies(bool bMove = true) = 0;
-
- /** Predict motion of soft bodies into next timestep */
- virtual void predictMotion(btScalar solverdt) = 0;
-
- /** Solve constraints for a set of soft bodies */
- virtual void solveConstraints(btScalar solverdt) = 0;
-
- /** Perform necessary per-step updates of soft bodies such as recomputing normals and bounding boxes */
- virtual void updateSoftBodies() = 0;
-
- /** Process a collision between one of the world's soft bodies and another collision object */
- virtual void processCollision(btSoftBody *, const struct btCollisionObjectWrapper *) = 0;
-
- /** Process a collision between two soft bodies */
- virtual void processCollision(btSoftBody *, btSoftBody *) = 0;
-
- /** Set the number of velocity constraint solver iterations this solver uses. */
- virtual void setNumberOfPositionIterations(int iterations)
- {
- m_numberOfPositionIterations = iterations;
- }
-
- /** Get the number of velocity constraint solver iterations this solver uses. */
- virtual int getNumberOfPositionIterations()
- {
- return m_numberOfPositionIterations;
- }
-
- /** Set the number of velocity constraint solver iterations this solver uses. */
- virtual void setNumberOfVelocityIterations(int iterations)
- {
- m_numberOfVelocityIterations = iterations;
- }
-
- /** Get the number of velocity constraint solver iterations this solver uses. */
- virtual int getNumberOfVelocityIterations()
- {
- return m_numberOfVelocityIterations;
- }
-
- /** Return the timescale that the simulation is using */
- float getTimeScale()
- {
- return m_timeScale;
- }
-
-#if 0
- /**
- * Add a collision object to be used by the indicated softbody.
- */
- virtual void addCollisionObjectForSoftBody( int clothIdentifier, btCollisionObject *collisionObject ) = 0;
-#endif
-};
-
-/**
- * Class to manage movement of data from a solver to a given target.
- * This version is abstract. Subclasses will have custom pairings for different combinations.
- */
-class btSoftBodySolverOutput
-{
-protected:
-public:
- btSoftBodySolverOutput()
- {
- }
-
- virtual ~btSoftBodySolverOutput()
- {
- }
-
- /** Output current computed vertex data to the vertex buffers for all cloths in the solver. */
- virtual void copySoftBodyToVertexBuffer(const btSoftBody *const softBody, btVertexBufferDescriptor *vertexBuffer) = 0;
-};
-
-#endif // #ifndef BT_SOFT_BODY_SOLVERS_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.cpp b/thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.cpp
deleted file mode 100644
index 329bd19d71..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.cpp
+++ /dev/null
@@ -1,355 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSoftMultiBodyDynamicsWorld.h"
-#include "LinearMath/btQuickprof.h"
-
-//softbody & helpers
-#include "BulletSoftBody/btSoftBody.h"
-#include "BulletSoftBody/btSoftBodyHelpers.h"
-#include "BulletSoftBody/btSoftBodySolvers.h"
-#include "BulletSoftBody/btDefaultSoftBodySolver.h"
-#include "LinearMath/btSerializer.h"
-
-btSoftMultiBodyDynamicsWorld::btSoftMultiBodyDynamicsWorld(
- btDispatcher* dispatcher,
- btBroadphaseInterface* pairCache,
- btMultiBodyConstraintSolver* constraintSolver,
- btCollisionConfiguration* collisionConfiguration,
- btSoftBodySolver* softBodySolver) : btMultiBodyDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration),
- m_softBodySolver(softBodySolver),
- m_ownsSolver(false)
-{
- if (!m_softBodySolver)
- {
- void* ptr = btAlignedAlloc(sizeof(btDefaultSoftBodySolver), 16);
- m_softBodySolver = new (ptr) btDefaultSoftBodySolver();
- m_ownsSolver = true;
- }
-
- m_drawFlags = fDrawFlags::Std;
- m_drawNodeTree = true;
- m_drawFaceTree = false;
- m_drawClusterTree = false;
- m_sbi.m_broadphase = pairCache;
- m_sbi.m_dispatcher = dispatcher;
- m_sbi.m_sparsesdf.Initialize();
- m_sbi.m_sparsesdf.Reset();
-
- m_sbi.air_density = (btScalar)1.2;
- m_sbi.water_density = 0;
- m_sbi.water_offset = 0;
- m_sbi.water_normal = btVector3(0, 0, 0);
- m_sbi.m_gravity.setValue(0, -10, 0);
-
- m_sbi.m_sparsesdf.Initialize();
-}
-
-btSoftMultiBodyDynamicsWorld::~btSoftMultiBodyDynamicsWorld()
-{
- if (m_ownsSolver)
- {
- m_softBodySolver->~btSoftBodySolver();
- btAlignedFree(m_softBodySolver);
- }
-}
-
-void btSoftMultiBodyDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
-{
- btDiscreteDynamicsWorld::predictUnconstraintMotion(timeStep);
- {
- BT_PROFILE("predictUnconstraintMotionSoftBody");
- m_softBodySolver->predictMotion(float(timeStep));
- }
-}
-
-void btSoftMultiBodyDynamicsWorld::internalSingleStepSimulation(btScalar timeStep)
-{
- // Let the solver grab the soft bodies and if necessary optimize for it
- m_softBodySolver->optimize(getSoftBodyArray());
-
- if (!m_softBodySolver->checkInitialized())
- {
- btAssert("Solver initialization failed\n");
- }
-
- btDiscreteDynamicsWorld::internalSingleStepSimulation(timeStep);
-
- ///solve soft bodies constraints
- solveSoftBodiesConstraints(timeStep);
-
- //self collisions
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)m_softBodies[i];
- psb->defaultCollisionHandler(psb);
- }
-
- ///update soft bodies
- m_softBodySolver->updateSoftBodies();
-
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)m_softBodies[i];
- psb->interpolateRenderMesh();
- }
- // End solver-wise simulation step
- // ///////////////////////////////
-}
-
-void btSoftMultiBodyDynamicsWorld::solveSoftBodiesConstraints(btScalar timeStep)
-{
- BT_PROFILE("solveSoftConstraints");
-
- if (m_softBodies.size())
- {
- btSoftBody::solveClusters(m_softBodies);
- }
-
- // Solve constraints solver-wise
- m_softBodySolver->solveConstraints(timeStep * m_softBodySolver->getTimeScale());
-}
-
-void btSoftMultiBodyDynamicsWorld::addSoftBody(btSoftBody* body, int collisionFilterGroup, int collisionFilterMask)
-{
- m_softBodies.push_back(body);
-
- // Set the soft body solver that will deal with this body
- // to be the world's solver
- body->setSoftBodySolver(m_softBodySolver);
-
- btCollisionWorld::addCollisionObject(body,
- collisionFilterGroup,
- collisionFilterMask);
-}
-
-void btSoftMultiBodyDynamicsWorld::removeSoftBody(btSoftBody* body)
-{
- m_softBodies.remove(body);
-
- btCollisionWorld::removeCollisionObject(body);
-}
-
-void btSoftMultiBodyDynamicsWorld::removeCollisionObject(btCollisionObject* collisionObject)
-{
- btSoftBody* body = btSoftBody::upcast(collisionObject);
- if (body)
- removeSoftBody(body);
- else
- btDiscreteDynamicsWorld::removeCollisionObject(collisionObject);
-}
-
-void btSoftMultiBodyDynamicsWorld::debugDrawWorld()
-{
- btMultiBodyDynamicsWorld::debugDrawWorld();
-
- if (getDebugDrawer())
- {
- int i;
- for (i = 0; i < this->m_softBodies.size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)this->m_softBodies[i];
- if (getDebugDrawer() && (getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe)))
- {
- btSoftBodyHelpers::DrawFrame(psb, m_debugDrawer);
- btSoftBodyHelpers::Draw(psb, m_debugDrawer, m_drawFlags);
- }
-
- if (m_debugDrawer && (m_debugDrawer->getDebugMode() & btIDebugDraw::DBG_DrawAabb))
- {
- if (m_drawNodeTree) btSoftBodyHelpers::DrawNodeTree(psb, m_debugDrawer);
- if (m_drawFaceTree) btSoftBodyHelpers::DrawFaceTree(psb, m_debugDrawer);
- if (m_drawClusterTree) btSoftBodyHelpers::DrawClusterTree(psb, m_debugDrawer);
- }
- }
- }
-}
-
-struct btSoftSingleRayCallback : public btBroadphaseRayCallback
-{
- btVector3 m_rayFromWorld;
- btVector3 m_rayToWorld;
- btTransform m_rayFromTrans;
- btTransform m_rayToTrans;
- btVector3 m_hitNormal;
-
- const btSoftMultiBodyDynamicsWorld* m_world;
- btCollisionWorld::RayResultCallback& m_resultCallback;
-
- btSoftSingleRayCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld, const btSoftMultiBodyDynamicsWorld* world, btCollisionWorld::RayResultCallback& resultCallback)
- : m_rayFromWorld(rayFromWorld),
- m_rayToWorld(rayToWorld),
- m_world(world),
- m_resultCallback(resultCallback)
- {
- m_rayFromTrans.setIdentity();
- m_rayFromTrans.setOrigin(m_rayFromWorld);
- m_rayToTrans.setIdentity();
- m_rayToTrans.setOrigin(m_rayToWorld);
-
- btVector3 rayDir = (rayToWorld - rayFromWorld);
-
- rayDir.normalize();
- ///what about division by zero? --> just set rayDirection[i] to INF/1e30
- m_rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[0];
- m_rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[1];
- m_rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[2];
- m_signs[0] = m_rayDirectionInverse[0] < 0.0;
- m_signs[1] = m_rayDirectionInverse[1] < 0.0;
- m_signs[2] = m_rayDirectionInverse[2] < 0.0;
-
- m_lambda_max = rayDir.dot(m_rayToWorld - m_rayFromWorld);
- }
-
- virtual bool process(const btBroadphaseProxy* proxy)
- {
- ///terminate further ray tests, once the closestHitFraction reached zero
- if (m_resultCallback.m_closestHitFraction == btScalar(0.f))
- return false;
-
- btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
-
- //only perform raycast if filterMask matches
- if (m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- //btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
-#if 0
-#ifdef RECALCULATE_AABB
- btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
- collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(),collisionObjectAabbMin,collisionObjectAabbMax);
-#else
- //getBroadphase()->getAabb(collisionObject->getBroadphaseHandle(),collisionObjectAabbMin,collisionObjectAabbMax);
- const btVector3& collisionObjectAabbMin = collisionObject->getBroadphaseHandle()->m_aabbMin;
- const btVector3& collisionObjectAabbMax = collisionObject->getBroadphaseHandle()->m_aabbMax;
-#endif
-#endif
- //btScalar hitLambda = m_resultCallback.m_closestHitFraction;
- //culling already done by broadphase
- //if (btRayAabb(m_rayFromWorld,m_rayToWorld,collisionObjectAabbMin,collisionObjectAabbMax,hitLambda,m_hitNormal))
- {
- m_world->rayTestSingle(m_rayFromTrans, m_rayToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- m_resultCallback);
- }
- }
- return true;
- }
-};
-
-void btSoftMultiBodyDynamicsWorld::rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const
-{
- BT_PROFILE("rayTest");
- /// use the broadphase to accelerate the search for objects, based on their aabb
- /// and for each object with ray-aabb overlap, perform an exact ray test
- btSoftSingleRayCallback rayCB(rayFromWorld, rayToWorld, this, resultCallback);
-
-#ifndef USE_BRUTEFORCE_RAYBROADPHASE
- m_broadphasePairCache->rayTest(rayFromWorld, rayToWorld, rayCB);
-#else
- for (int i = 0; i < this->getNumCollisionObjects(); i++)
- {
- rayCB.process(m_collisionObjects[i]->getBroadphaseHandle());
- }
-#endif //USE_BRUTEFORCE_RAYBROADPHASE
-}
-
-void btSoftMultiBodyDynamicsWorld::rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback)
-{
- if (collisionShape->isSoftBody())
- {
- btSoftBody* softBody = btSoftBody::upcast(collisionObject);
- if (softBody)
- {
- btSoftBody::sRayCast softResult;
- if (softBody->rayTest(rayFromTrans.getOrigin(), rayToTrans.getOrigin(), softResult))
- {
- if (softResult.fraction <= resultCallback.m_closestHitFraction)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = 0;
- shapeInfo.m_triangleIndex = softResult.index;
- // get the normal
- btVector3 rayDir = rayToTrans.getOrigin() - rayFromTrans.getOrigin();
- btVector3 normal = -rayDir;
- normal.normalize();
-
- if (softResult.feature == btSoftBody::eFeature::Face)
- {
- normal = softBody->m_faces[softResult.index].m_normal;
- if (normal.dot(rayDir) > 0)
- {
- // normal always point toward origin of the ray
- normal = -normal;
- }
- }
-
- btCollisionWorld::LocalRayResult rayResult(collisionObject,
- &shapeInfo,
- normal,
- softResult.fraction);
- bool normalInWorldSpace = true;
- resultCallback.addSingleResult(rayResult, normalInWorldSpace);
- }
- }
- }
- }
- else
- {
- btCollisionWorld::rayTestSingle(rayFromTrans, rayToTrans, collisionObject, collisionShape, colObjWorldTransform, resultCallback);
- }
-}
-
-void btSoftMultiBodyDynamicsWorld::serializeSoftBodies(btSerializer* serializer)
-{
- int i;
- //serialize all collision objects
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- if (colObj->getInternalType() & btCollisionObject::CO_SOFT_BODY)
- {
- int len = colObj->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = colObj->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_SOFTBODY_CODE, colObj);
- }
- }
-}
-
-void btSoftMultiBodyDynamicsWorld::serialize(btSerializer* serializer)
-{
- serializer->startSerialization();
-
- serializeDynamicsWorldInfo(serializer);
-
- serializeSoftBodies(serializer);
-
- serializeMultiBodies(serializer);
-
- serializeRigidBodies(serializer);
-
- serializeCollisionObjects(serializer);
-
- serializeContactManifolds(serializer);
-
- serializer->finishSerialization();
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.h b/thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.h
deleted file mode 100644
index f295945a6d..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftMultiBodyDynamicsWorld.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_MULTIBODY_DYNAMICS_WORLD_H
-#define BT_SOFT_MULTIBODY_DYNAMICS_WORLD_H
-
-#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
-#include "BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.h"
-#include "BulletSoftBody/btSoftBody.h"
-
-#ifndef BT_SOFT_RIGID_DYNAMICS_WORLD_H
-typedef btAlignedObjectArray<btSoftBody*> btSoftBodyArray;
-#endif
-
-class btSoftBodySolver;
-
-class btSoftMultiBodyDynamicsWorld : public btMultiBodyDynamicsWorld
-{
- btSoftBodyArray m_softBodies;
- int m_drawFlags;
- bool m_drawNodeTree;
- bool m_drawFaceTree;
- bool m_drawClusterTree;
- btSoftBodyWorldInfo m_sbi;
- ///Solver classes that encapsulate multiple soft bodies for solving
- btSoftBodySolver* m_softBodySolver;
- bool m_ownsSolver;
-
-protected:
- virtual void predictUnconstraintMotion(btScalar timeStep);
-
- virtual void internalSingleStepSimulation(btScalar timeStep);
-
- void solveSoftBodiesConstraints(btScalar timeStep);
-
- void serializeSoftBodies(btSerializer* serializer);
-
-public:
- btSoftMultiBodyDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btMultiBodyConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration, btSoftBodySolver* softBodySolver = 0);
-
- virtual ~btSoftMultiBodyDynamicsWorld();
-
- virtual void debugDrawWorld();
-
- void addSoftBody(btSoftBody* body, int collisionFilterGroup = btBroadphaseProxy::DefaultFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter);
-
- void removeSoftBody(btSoftBody* body);
-
- ///removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise call btDiscreteDynamicsWorld::removeCollisionObject
- virtual void removeCollisionObject(btCollisionObject* collisionObject);
-
- int getDrawFlags() const { return (m_drawFlags); }
- void setDrawFlags(int f) { m_drawFlags = f; }
-
- btSoftBodyWorldInfo& getWorldInfo()
- {
- return m_sbi;
- }
- const btSoftBodyWorldInfo& getWorldInfo() const
- {
- return m_sbi;
- }
-
- virtual btDynamicsWorldType getWorldType() const
- {
- return BT_SOFT_MULTIBODY_DYNAMICS_WORLD;
- }
-
- btSoftBodyArray& getSoftBodyArray()
- {
- return m_softBodies;
- }
-
- const btSoftBodyArray& getSoftBodyArray() const
- {
- return m_softBodies;
- }
-
- virtual void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const;
-
- /// rayTestSingle performs a raycast call and calls the resultCallback. It is used internally by rayTest.
- /// In a future implementation, we consider moving the ray test as a virtual method in btCollisionShape.
- /// This allows more customization.
- static void rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback);
-
- virtual void serialize(btSerializer* serializer);
-};
-
-#endif //BT_SOFT_MULTIBODY_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp b/thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp
deleted file mode 100644
index 5b65216e4b..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSoftRigidCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "btSoftBody.h"
-#include "BulletSoftBody/btSoftBodySolvers.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-///TODO: include all the shapes that the softbody can collide with
-///alternatively, implement special case collision algorithms (just like for rigid collision shapes)
-
-//#include <stdio.h>
-
-btSoftRigidCollisionAlgorithm::btSoftRigidCollisionAlgorithm(btPersistentManifold* /*mf*/, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper*, const btCollisionObjectWrapper*, bool isSwapped)
- : btCollisionAlgorithm(ci),
- //m_ownManifold(false),
- //m_manifoldPtr(mf),
- m_isSwapped(isSwapped)
-{
-}
-
-btSoftRigidCollisionAlgorithm::~btSoftRigidCollisionAlgorithm()
-{
- //m_softBody->m_overlappingRigidBodies.remove(m_rigidCollisionObject);
-
- /*if (m_ownManifold)
- {
- if (m_manifoldPtr)
- m_dispatcher->releaseManifold(m_manifoldPtr);
- }
- */
-}
-
-#include <stdio.h>
-#include "LinearMath/btQuickprof.h"
-void btSoftRigidCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- BT_PROFILE("btSoftRigidCollisionAlgorithm::processCollision");
- (void)dispatchInfo;
- (void)resultOut;
- //printf("btSoftRigidCollisionAlgorithm\n");
- // const btCollisionObjectWrapper* softWrap = m_isSwapped?body1Wrap:body0Wrap;
- // const btCollisionObjectWrapper* rigidWrap = m_isSwapped?body0Wrap:body1Wrap;
- btSoftBody* softBody = m_isSwapped ? (btSoftBody*)body1Wrap->getCollisionObject() : (btSoftBody*)body0Wrap->getCollisionObject();
- const btCollisionObjectWrapper* rigidCollisionObjectWrap = m_isSwapped ? body0Wrap : body1Wrap;
-
- if (softBody->m_collisionDisabledObjects.findLinearSearch(rigidCollisionObjectWrap->getCollisionObject()) == softBody->m_collisionDisabledObjects.size())
- {
- softBody->getSoftBodySolver()->processCollision(softBody, rigidCollisionObjectWrap);
- }
-}
-
-btScalar btSoftRigidCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* col0, btCollisionObject* col1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut)
-{
- (void)resultOut;
- (void)dispatchInfo;
- (void)col0;
- (void)col1;
-
- //not yet
- return btScalar(1.);
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h b/thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h
deleted file mode 100644
index 9773af19a0..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftRigidCollisionAlgorithm.h
+++ /dev/null
@@ -1,71 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_RIGID_COLLISION_ALGORITHM_H
-#define BT_SOFT_RIGID_COLLISION_ALGORITHM_H
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-class btPersistentManifold;
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-
-#include "LinearMath/btVector3.h"
-class btSoftBody;
-
-/// btSoftRigidCollisionAlgorithm provides collision detection between btSoftBody and btRigidBody
-class btSoftRigidCollisionAlgorithm : public btCollisionAlgorithm
-{
- // bool m_ownManifold;
- // btPersistentManifold* m_manifoldPtr;
-
- //btSoftBody* m_softBody;
- //btCollisionObject* m_rigidCollisionObject;
-
- ///for rigid versus soft (instead of soft versus rigid), we use this swapped boolean
- bool m_isSwapped;
-
-public:
- btSoftRigidCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* col0, const btCollisionObjectWrapper* col1Wrap, bool isSwapped);
-
- virtual ~btSoftRigidCollisionAlgorithm();
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- //we don't add any manifolds
- }
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- void* mem = ci.m_dispatcher1->allocateCollisionAlgorithm(sizeof(btSoftRigidCollisionAlgorithm));
- if (!m_swapped)
- {
- return new (mem) btSoftRigidCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, false);
- }
- else
- {
- return new (mem) btSoftRigidCollisionAlgorithm(0, ci, body0Wrap, body1Wrap, true);
- }
- }
- };
-};
-
-#endif //BT_SOFT_RIGID_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.cpp b/thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.cpp
deleted file mode 100644
index 510b731fc1..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.cpp
+++ /dev/null
@@ -1,346 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSoftRigidDynamicsWorld.h"
-#include "LinearMath/btQuickprof.h"
-
-//softbody & helpers
-#include "btSoftBody.h"
-#include "btSoftBodyHelpers.h"
-#include "btSoftBodySolvers.h"
-#include "btDefaultSoftBodySolver.h"
-#include "LinearMath/btSerializer.h"
-
-btSoftRigidDynamicsWorld::btSoftRigidDynamicsWorld(
- btDispatcher* dispatcher,
- btBroadphaseInterface* pairCache,
- btConstraintSolver* constraintSolver,
- btCollisionConfiguration* collisionConfiguration,
- btSoftBodySolver* softBodySolver) : btDiscreteDynamicsWorld(dispatcher, pairCache, constraintSolver, collisionConfiguration),
- m_softBodySolver(softBodySolver),
- m_ownsSolver(false)
-{
- if (!m_softBodySolver)
- {
- void* ptr = btAlignedAlloc(sizeof(btDefaultSoftBodySolver), 16);
- m_softBodySolver = new (ptr) btDefaultSoftBodySolver();
- m_ownsSolver = true;
- }
-
- m_drawFlags = fDrawFlags::Std;
- m_drawNodeTree = true;
- m_drawFaceTree = false;
- m_drawClusterTree = false;
- m_sbi.m_broadphase = pairCache;
- m_sbi.m_dispatcher = dispatcher;
- m_sbi.m_sparsesdf.Initialize();
- m_sbi.m_sparsesdf.Reset();
-
- m_sbi.air_density = (btScalar)1.2;
- m_sbi.water_density = 0;
- m_sbi.water_offset = 0;
- m_sbi.water_normal = btVector3(0, 0, 0);
- m_sbi.m_gravity.setValue(0, -10, 0);
-
- m_sbi.m_sparsesdf.Initialize();
-}
-
-btSoftRigidDynamicsWorld::~btSoftRigidDynamicsWorld()
-{
- if (m_ownsSolver)
- {
- m_softBodySolver->~btSoftBodySolver();
- btAlignedFree(m_softBodySolver);
- }
-}
-
-void btSoftRigidDynamicsWorld::predictUnconstraintMotion(btScalar timeStep)
-{
- btDiscreteDynamicsWorld::predictUnconstraintMotion(timeStep);
- {
- BT_PROFILE("predictUnconstraintMotionSoftBody");
- m_softBodySolver->predictMotion(float(timeStep));
- }
-}
-
-void btSoftRigidDynamicsWorld::internalSingleStepSimulation(btScalar timeStep)
-{
- // Let the solver grab the soft bodies and if necessary optimize for it
- m_softBodySolver->optimize(getSoftBodyArray());
-
- if (!m_softBodySolver->checkInitialized())
- {
- btAssert("Solver initialization failed\n");
- }
-
- btDiscreteDynamicsWorld::internalSingleStepSimulation(timeStep);
-
- ///solve soft bodies constraints
- solveSoftBodiesConstraints(timeStep);
-
- //self collisions
- for (int i = 0; i < m_softBodies.size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)m_softBodies[i];
- psb->defaultCollisionHandler(psb);
- }
-
- ///update soft bodies
- m_softBodySolver->updateSoftBodies();
-
- // End solver-wise simulation step
- // ///////////////////////////////
-}
-
-void btSoftRigidDynamicsWorld::solveSoftBodiesConstraints(btScalar timeStep)
-{
- BT_PROFILE("solveSoftConstraints");
-
- if (m_softBodies.size())
- {
- btSoftBody::solveClusters(m_softBodies);
- }
-
- // Solve constraints solver-wise
- m_softBodySolver->solveConstraints(timeStep * m_softBodySolver->getTimeScale());
-}
-
-void btSoftRigidDynamicsWorld::addSoftBody(btSoftBody* body, int collisionFilterGroup, int collisionFilterMask)
-{
- m_softBodies.push_back(body);
-
- // Set the soft body solver that will deal with this body
- // to be the world's solver
- body->setSoftBodySolver(m_softBodySolver);
-
- btCollisionWorld::addCollisionObject(body,
- collisionFilterGroup,
- collisionFilterMask);
-}
-
-void btSoftRigidDynamicsWorld::removeSoftBody(btSoftBody* body)
-{
- m_softBodies.remove(body);
-
- btCollisionWorld::removeCollisionObject(body);
-}
-
-void btSoftRigidDynamicsWorld::removeCollisionObject(btCollisionObject* collisionObject)
-{
- btSoftBody* body = btSoftBody::upcast(collisionObject);
- if (body)
- removeSoftBody(body);
- else
- btDiscreteDynamicsWorld::removeCollisionObject(collisionObject);
-}
-
-void btSoftRigidDynamicsWorld::debugDrawWorld()
-{
- btDiscreteDynamicsWorld::debugDrawWorld();
-
- if (getDebugDrawer())
- {
- int i;
- for (i = 0; i < this->m_softBodies.size(); i++)
- {
- btSoftBody* psb = (btSoftBody*)this->m_softBodies[i];
- if (getDebugDrawer() && (getDebugDrawer()->getDebugMode() & (btIDebugDraw::DBG_DrawWireframe)))
- {
- btSoftBodyHelpers::DrawFrame(psb, m_debugDrawer);
- btSoftBodyHelpers::Draw(psb, m_debugDrawer, m_drawFlags);
- }
-
- if (m_debugDrawer && (m_debugDrawer->getDebugMode() & btIDebugDraw::DBG_DrawAabb))
- {
- if (m_drawNodeTree) btSoftBodyHelpers::DrawNodeTree(psb, m_debugDrawer);
- if (m_drawFaceTree) btSoftBodyHelpers::DrawFaceTree(psb, m_debugDrawer);
- if (m_drawClusterTree) btSoftBodyHelpers::DrawClusterTree(psb, m_debugDrawer);
- }
- }
- }
-}
-
-struct btSoftSingleRayCallback : public btBroadphaseRayCallback
-{
- btVector3 m_rayFromWorld;
- btVector3 m_rayToWorld;
- btTransform m_rayFromTrans;
- btTransform m_rayToTrans;
- btVector3 m_hitNormal;
-
- const btSoftRigidDynamicsWorld* m_world;
- btCollisionWorld::RayResultCallback& m_resultCallback;
-
- btSoftSingleRayCallback(const btVector3& rayFromWorld, const btVector3& rayToWorld, const btSoftRigidDynamicsWorld* world, btCollisionWorld::RayResultCallback& resultCallback)
- : m_rayFromWorld(rayFromWorld),
- m_rayToWorld(rayToWorld),
- m_world(world),
- m_resultCallback(resultCallback)
- {
- m_rayFromTrans.setIdentity();
- m_rayFromTrans.setOrigin(m_rayFromWorld);
- m_rayToTrans.setIdentity();
- m_rayToTrans.setOrigin(m_rayToWorld);
-
- btVector3 rayDir = (rayToWorld - rayFromWorld);
-
- rayDir.normalize();
- ///what about division by zero? --> just set rayDirection[i] to INF/1e30
- m_rayDirectionInverse[0] = rayDir[0] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[0];
- m_rayDirectionInverse[1] = rayDir[1] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[1];
- m_rayDirectionInverse[2] = rayDir[2] == btScalar(0.0) ? btScalar(1e30) : btScalar(1.0) / rayDir[2];
- m_signs[0] = m_rayDirectionInverse[0] < 0.0;
- m_signs[1] = m_rayDirectionInverse[1] < 0.0;
- m_signs[2] = m_rayDirectionInverse[2] < 0.0;
-
- m_lambda_max = rayDir.dot(m_rayToWorld - m_rayFromWorld);
- }
-
- virtual bool process(const btBroadphaseProxy* proxy)
- {
- ///terminate further ray tests, once the closestHitFraction reached zero
- if (m_resultCallback.m_closestHitFraction == btScalar(0.f))
- return false;
-
- btCollisionObject* collisionObject = (btCollisionObject*)proxy->m_clientObject;
-
- //only perform raycast if filterMask matches
- if (m_resultCallback.needsCollision(collisionObject->getBroadphaseHandle()))
- {
- //RigidcollisionObject* collisionObject = ctrl->GetRigidcollisionObject();
- //btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
-#if 0
-#ifdef RECALCULATE_AABB
- btVector3 collisionObjectAabbMin,collisionObjectAabbMax;
- collisionObject->getCollisionShape()->getAabb(collisionObject->getWorldTransform(),collisionObjectAabbMin,collisionObjectAabbMax);
-#else
- //getBroadphase()->getAabb(collisionObject->getBroadphaseHandle(),collisionObjectAabbMin,collisionObjectAabbMax);
- const btVector3& collisionObjectAabbMin = collisionObject->getBroadphaseHandle()->m_aabbMin;
- const btVector3& collisionObjectAabbMax = collisionObject->getBroadphaseHandle()->m_aabbMax;
-#endif
-#endif
- //btScalar hitLambda = m_resultCallback.m_closestHitFraction;
- //culling already done by broadphase
- //if (btRayAabb(m_rayFromWorld,m_rayToWorld,collisionObjectAabbMin,collisionObjectAabbMax,hitLambda,m_hitNormal))
- {
- m_world->rayTestSingle(m_rayFromTrans, m_rayToTrans,
- collisionObject,
- collisionObject->getCollisionShape(),
- collisionObject->getWorldTransform(),
- m_resultCallback);
- }
- }
- return true;
- }
-};
-
-void btSoftRigidDynamicsWorld::rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const
-{
- BT_PROFILE("rayTest");
- /// use the broadphase to accelerate the search for objects, based on their aabb
- /// and for each object with ray-aabb overlap, perform an exact ray test
- btSoftSingleRayCallback rayCB(rayFromWorld, rayToWorld, this, resultCallback);
-
-#ifndef USE_BRUTEFORCE_RAYBROADPHASE
- m_broadphasePairCache->rayTest(rayFromWorld, rayToWorld, rayCB);
-#else
- for (int i = 0; i < this->getNumCollisionObjects(); i++)
- {
- rayCB.process(m_collisionObjects[i]->getBroadphaseHandle());
- }
-#endif //USE_BRUTEFORCE_RAYBROADPHASE
-}
-
-void btSoftRigidDynamicsWorld::rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback)
-{
- if (collisionShape->isSoftBody())
- {
- btSoftBody* softBody = btSoftBody::upcast(collisionObject);
- if (softBody)
- {
- btSoftBody::sRayCast softResult;
- if (softBody->rayTest(rayFromTrans.getOrigin(), rayToTrans.getOrigin(), softResult))
- {
- if (softResult.fraction <= resultCallback.m_closestHitFraction)
- {
- btCollisionWorld::LocalShapeInfo shapeInfo;
- shapeInfo.m_shapePart = 0;
- shapeInfo.m_triangleIndex = softResult.index;
- // get the normal
- btVector3 rayDir = rayToTrans.getOrigin() - rayFromTrans.getOrigin();
- btVector3 normal = -rayDir;
- normal.normalize();
-
- if (softResult.feature == btSoftBody::eFeature::Face)
- {
- normal = softBody->m_faces[softResult.index].m_normal;
- if (normal.dot(rayDir) > 0)
- {
- // normal always point toward origin of the ray
- normal = -normal;
- }
- }
-
- btCollisionWorld::LocalRayResult rayResult(collisionObject,
- &shapeInfo,
- normal,
- softResult.fraction);
- bool normalInWorldSpace = true;
- resultCallback.addSingleResult(rayResult, normalInWorldSpace);
- }
- }
- }
- }
- else
- {
- btCollisionWorld::rayTestSingle(rayFromTrans, rayToTrans, collisionObject, collisionShape, colObjWorldTransform, resultCallback);
- }
-}
-
-void btSoftRigidDynamicsWorld::serializeSoftBodies(btSerializer* serializer)
-{
- int i;
- //serialize all collision objects
- for (i = 0; i < m_collisionObjects.size(); i++)
- {
- btCollisionObject* colObj = m_collisionObjects[i];
- if (colObj->getInternalType() & btCollisionObject::CO_SOFT_BODY)
- {
- int len = colObj->calculateSerializeBufferSize();
- btChunk* chunk = serializer->allocate(len, 1);
- const char* structType = colObj->serialize(chunk->m_oldPtr, serializer);
- serializer->finalizeChunk(chunk, structType, BT_SOFTBODY_CODE, colObj);
- }
- }
-}
-
-void btSoftRigidDynamicsWorld::serialize(btSerializer* serializer)
-{
- serializer->startSerialization();
-
- serializeDynamicsWorldInfo(serializer);
-
- serializeSoftBodies(serializer);
-
- serializeRigidBodies(serializer);
-
- serializeCollisionObjects(serializer);
-
- serializer->finishSerialization();
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h b/thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h
deleted file mode 100644
index be49c444d7..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftRigidDynamicsWorld.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_RIGID_DYNAMICS_WORLD_H
-#define BT_SOFT_RIGID_DYNAMICS_WORLD_H
-
-#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
-#include "btSoftBody.h"
-
-typedef btAlignedObjectArray<btSoftBody*> btSoftBodyArray;
-
-class btSoftBodySolver;
-
-class btSoftRigidDynamicsWorld : public btDiscreteDynamicsWorld
-{
- btSoftBodyArray m_softBodies;
- int m_drawFlags;
- bool m_drawNodeTree;
- bool m_drawFaceTree;
- bool m_drawClusterTree;
- btSoftBodyWorldInfo m_sbi;
- ///Solver classes that encapsulate multiple soft bodies for solving
- btSoftBodySolver* m_softBodySolver;
- bool m_ownsSolver;
-
-protected:
- virtual void predictUnconstraintMotion(btScalar timeStep);
-
- virtual void internalSingleStepSimulation(btScalar timeStep);
-
- void solveSoftBodiesConstraints(btScalar timeStep);
-
- void serializeSoftBodies(btSerializer* serializer);
-
-public:
- btSoftRigidDynamicsWorld(btDispatcher* dispatcher, btBroadphaseInterface* pairCache, btConstraintSolver* constraintSolver, btCollisionConfiguration* collisionConfiguration, btSoftBodySolver* softBodySolver = 0);
-
- virtual ~btSoftRigidDynamicsWorld();
-
- virtual void debugDrawWorld();
-
- void addSoftBody(btSoftBody* body, int collisionFilterGroup = btBroadphaseProxy::DefaultFilter, int collisionFilterMask = btBroadphaseProxy::AllFilter);
-
- void removeSoftBody(btSoftBody* body);
-
- ///removeCollisionObject will first check if it is a rigid body, if so call removeRigidBody otherwise call btDiscreteDynamicsWorld::removeCollisionObject
- virtual void removeCollisionObject(btCollisionObject* collisionObject);
-
- int getDrawFlags() const { return (m_drawFlags); }
- void setDrawFlags(int f) { m_drawFlags = f; }
-
- btSoftBodyWorldInfo& getWorldInfo()
- {
- return m_sbi;
- }
- const btSoftBodyWorldInfo& getWorldInfo() const
- {
- return m_sbi;
- }
-
- virtual btDynamicsWorldType getWorldType() const
- {
- return BT_SOFT_RIGID_DYNAMICS_WORLD;
- }
-
- btSoftBodyArray& getSoftBodyArray()
- {
- return m_softBodies;
- }
-
- const btSoftBodyArray& getSoftBodyArray() const
- {
- return m_softBodies;
- }
-
- virtual void rayTest(const btVector3& rayFromWorld, const btVector3& rayToWorld, RayResultCallback& resultCallback) const;
-
- /// rayTestSingle performs a raycast call and calls the resultCallback. It is used internally by rayTest.
- /// In a future implementation, we consider moving the ray test as a virtual method in btCollisionShape.
- /// This allows more customization.
- static void rayTestSingle(const btTransform& rayFromTrans, const btTransform& rayToTrans,
- btCollisionObject* collisionObject,
- const btCollisionShape* collisionShape,
- const btTransform& colObjWorldTransform,
- RayResultCallback& resultCallback);
-
- virtual void serialize(btSerializer* serializer);
-};
-
-#endif //BT_SOFT_RIGID_DYNAMICS_WORLD_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp b/thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp
deleted file mode 100644
index 9c3e904f64..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.cpp
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btSoftSoftCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletSoftBody/btSoftBodySolvers.h"
-#include "btSoftBody.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObjectWrapper.h"
-
-#define USE_PERSISTENT_CONTACTS 1
-
-btSoftSoftCollisionAlgorithm::btSoftSoftCollisionAlgorithm(btPersistentManifold* /*mf*/, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* /*obj0*/, const btCollisionObjectWrapper* /*obj1*/)
- : btCollisionAlgorithm(ci)
-//m_ownManifold(false),
-//m_manifoldPtr(mf)
-{
-}
-
-btSoftSoftCollisionAlgorithm::~btSoftSoftCollisionAlgorithm()
-{
-}
-
-void btSoftSoftCollisionAlgorithm::processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& /*dispatchInfo*/, btManifoldResult* /*resultOut*/)
-{
- btSoftBody* soft0 = (btSoftBody*)body0Wrap->getCollisionObject();
- btSoftBody* soft1 = (btSoftBody*)body1Wrap->getCollisionObject();
- soft0->getSoftBodySolver()->processCollision(soft0, soft1);
-}
-
-btScalar btSoftSoftCollisionAlgorithm::calculateTimeOfImpact(btCollisionObject* /*body0*/, btCollisionObject* /*body1*/, const btDispatcherInfo& /*dispatchInfo*/, btManifoldResult* /*resultOut*/)
-{
- //not yet
- return 1.f;
-}
diff --git a/thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h b/thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h
deleted file mode 100644
index 6f871f5b85..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSoftSoftCollisionAlgorithm.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SOFT_SOFT_COLLISION_ALGORITHM_H
-#define BT_SOFT_SOFT_COLLISION_ALGORITHM_H
-
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.h"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.h"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.h"
-#include "BulletCollision/CollisionDispatch/btCollisionCreateFunc.h"
-
-class btPersistentManifold;
-class btSoftBody;
-
-///collision detection between two btSoftBody shapes
-class btSoftSoftCollisionAlgorithm : public btCollisionAlgorithm
-{
- bool m_ownManifold;
- btPersistentManifold* m_manifoldPtr;
-
- // btSoftBody* m_softBody0;
- // btSoftBody* m_softBody1;
-
-public:
- btSoftSoftCollisionAlgorithm(const btCollisionAlgorithmConstructionInfo& ci)
- : btCollisionAlgorithm(ci) {}
-
- virtual void processCollision(const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual btScalar calculateTimeOfImpact(btCollisionObject* body0, btCollisionObject* body1, const btDispatcherInfo& dispatchInfo, btManifoldResult* resultOut);
-
- virtual void getAllContactManifolds(btManifoldArray& manifoldArray)
- {
- if (m_manifoldPtr && m_ownManifold)
- manifoldArray.push_back(m_manifoldPtr);
- }
-
- btSoftSoftCollisionAlgorithm(btPersistentManifold* mf, const btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap);
-
- virtual ~btSoftSoftCollisionAlgorithm();
-
- struct CreateFunc : public btCollisionAlgorithmCreateFunc
- {
- virtual btCollisionAlgorithm* CreateCollisionAlgorithm(btCollisionAlgorithmConstructionInfo& ci, const btCollisionObjectWrapper* body0Wrap, const btCollisionObjectWrapper* body1Wrap)
- {
- int bbsize = sizeof(btSoftSoftCollisionAlgorithm);
- void* ptr = ci.m_dispatcher1->allocateCollisionAlgorithm(bbsize);
- return new (ptr) btSoftSoftCollisionAlgorithm(0, ci, body0Wrap, body1Wrap);
- }
- };
-};
-
-#endif //BT_SOFT_SOFT_COLLISION_ALGORITHM_H
diff --git a/thirdparty/bullet/BulletSoftBody/btSparseSDF.h b/thirdparty/bullet/BulletSoftBody/btSparseSDF.h
deleted file mode 100644
index d611726bcd..0000000000
--- a/thirdparty/bullet/BulletSoftBody/btSparseSDF.h
+++ /dev/null
@@ -1,372 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///btSparseSdf implementation by Nathanael Presson
-
-#ifndef BT_SPARSE_SDF_H
-#define BT_SPARSE_SDF_H
-
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.h"
-
-// Fast Hash
-
-#if !defined(get16bits)
-#define get16bits(d) ((((unsigned int)(((const unsigned char*)(d))[1])) << 8) + (unsigned int)(((const unsigned char*)(d))[0]))
-#endif
-//
-// super hash function by Paul Hsieh
-//
-inline unsigned int HsiehHash(const char* data, int len)
-{
- unsigned int hash = len, tmp;
- len >>= 2;
-
- /* Main loop */
- for (; len > 0; len--)
- {
- hash += get16bits(data);
- tmp = (get16bits(data + 2) << 11) ^ hash;
- hash = (hash << 16) ^ tmp;
- data += 2 * sizeof(unsigned short);
- hash += hash >> 11;
- }
-
- /* Force "avalanching" of final 127 bits */
- hash ^= hash << 3;
- hash += hash >> 5;
- hash ^= hash << 4;
- hash += hash >> 17;
- hash ^= hash << 25;
- hash += hash >> 6;
-
- return hash;
-}
-
-template <const int CELLSIZE>
-struct btSparseSdf
-{
- //
- // Inner types
- //
- struct IntFrac
- {
- int b;
- int i;
- btScalar f;
- };
- struct Cell
- {
- btScalar d[CELLSIZE + 1][CELLSIZE + 1][CELLSIZE + 1];
- int c[3];
- int puid;
- unsigned hash;
- const btCollisionShape* pclient;
- Cell* next;
- };
- //
- // Fields
- //
-
- btAlignedObjectArray<Cell*> cells;
- btScalar voxelsz;
- btScalar m_defaultVoxelsz;
- int puid;
- int ncells;
- int m_clampCells;
- int nprobes;
- int nqueries;
-
- ~btSparseSdf()
- {
- Reset();
- }
- //
- // Methods
- //
-
- //
- void Initialize(int hashsize = 2383, int clampCells = 256 * 1024)
- {
- //avoid a crash due to running out of memory, so clamp the maximum number of cells allocated
- //if this limit is reached, the SDF is reset (at the cost of some performance during the reset)
- m_clampCells = clampCells;
- cells.resize(hashsize, 0);
- m_defaultVoxelsz = 0.25;
- Reset();
- }
- //
-
- void setDefaultVoxelsz(btScalar sz)
- {
- m_defaultVoxelsz = sz;
- }
-
- void Reset()
- {
- for (int i = 0, ni = cells.size(); i < ni; ++i)
- {
- Cell* pc = cells[i];
- cells[i] = 0;
- while (pc)
- {
- Cell* pn = pc->next;
- delete pc;
- pc = pn;
- }
- }
- voxelsz = m_defaultVoxelsz;
- puid = 0;
- ncells = 0;
- nprobes = 1;
- nqueries = 1;
- }
- //
- void GarbageCollect(int lifetime = 256)
- {
- const int life = puid - lifetime;
- for (int i = 0; i < cells.size(); ++i)
- {
- Cell*& root = cells[i];
- Cell* pp = 0;
- Cell* pc = root;
- while (pc)
- {
- Cell* pn = pc->next;
- if (pc->puid < life)
- {
- if (pp)
- pp->next = pn;
- else
- root = pn;
- delete pc;
- pc = pp;
- --ncells;
- }
- pp = pc;
- pc = pn;
- }
- }
- //printf("GC[%d]: %d cells, PpQ: %f\r\n",puid,ncells,nprobes/(btScalar)nqueries);
- nqueries = 1;
- nprobes = 1;
- ++puid; ///@todo: Reset puid's when int range limit is reached */
- /* else setup a priority list... */
- }
- //
- int RemoveReferences(btCollisionShape* pcs)
- {
- int refcount = 0;
- for (int i = 0; i < cells.size(); ++i)
- {
- Cell*& root = cells[i];
- Cell* pp = 0;
- Cell* pc = root;
- while (pc)
- {
- Cell* pn = pc->next;
- if (pc->pclient == pcs)
- {
- if (pp)
- pp->next = pn;
- else
- root = pn;
- delete pc;
- pc = pp;
- ++refcount;
- }
- pp = pc;
- pc = pn;
- }
- }
- return (refcount);
- }
- //
- btScalar Evaluate(const btVector3& x,
- const btCollisionShape* shape,
- btVector3& normal,
- btScalar margin)
- {
- /* Lookup cell */
- const btVector3 scx = x / voxelsz;
- const IntFrac ix = Decompose(scx.x());
- const IntFrac iy = Decompose(scx.y());
- const IntFrac iz = Decompose(scx.z());
- const unsigned h = Hash(ix.b, iy.b, iz.b, shape);
- Cell*& root = cells[static_cast<int>(h % cells.size())];
- Cell* c = root;
- ++nqueries;
- while (c)
- {
- ++nprobes;
- if ((c->hash == h) &&
- (c->c[0] == ix.b) &&
- (c->c[1] == iy.b) &&
- (c->c[2] == iz.b) &&
- (c->pclient == shape))
- {
- break;
- }
- else
- {
- // printf("c->hash/c[0][1][2]=%d,%d,%d,%d\n", c->hash, c->c[0], c->c[1],c->c[2]);
- //printf("h,ixb,iyb,izb=%d,%d,%d,%d\n", h,ix.b, iy.b, iz.b);
-
- c = c->next;
- }
- }
- if (!c)
- {
- ++nprobes;
- ++ncells;
- //int sz = sizeof(Cell);
- if (ncells > m_clampCells)
- {
- static int numResets = 0;
- numResets++;
- // printf("numResets=%d\n",numResets);
- Reset();
- }
-
- c = new Cell();
- c->next = root;
- root = c;
- c->pclient = shape;
- c->hash = h;
- c->c[0] = ix.b;
- c->c[1] = iy.b;
- c->c[2] = iz.b;
- BuildCell(*c);
- }
- c->puid = puid;
- /* Extract infos */
- const int o[] = {ix.i, iy.i, iz.i};
- const btScalar d[] = {c->d[o[0] + 0][o[1] + 0][o[2] + 0],
- c->d[o[0] + 1][o[1] + 0][o[2] + 0],
- c->d[o[0] + 1][o[1] + 1][o[2] + 0],
- c->d[o[0] + 0][o[1] + 1][o[2] + 0],
- c->d[o[0] + 0][o[1] + 0][o[2] + 1],
- c->d[o[0] + 1][o[1] + 0][o[2] + 1],
- c->d[o[0] + 1][o[1] + 1][o[2] + 1],
- c->d[o[0] + 0][o[1] + 1][o[2] + 1]};
- /* Normal */
-#if 1
- const btScalar gx[] = {d[1] - d[0], d[2] - d[3],
- d[5] - d[4], d[6] - d[7]};
- const btScalar gy[] = {d[3] - d[0], d[2] - d[1],
- d[7] - d[4], d[6] - d[5]};
- const btScalar gz[] = {d[4] - d[0], d[5] - d[1],
- d[7] - d[3], d[6] - d[2]};
- normal.setX(Lerp(Lerp(gx[0], gx[1], iy.f),
- Lerp(gx[2], gx[3], iy.f), iz.f));
- normal.setY(Lerp(Lerp(gy[0], gy[1], ix.f),
- Lerp(gy[2], gy[3], ix.f), iz.f));
- normal.setZ(Lerp(Lerp(gz[0], gz[1], ix.f),
- Lerp(gz[2], gz[3], ix.f), iy.f));
- normal.safeNormalize();
-#else
- normal = btVector3(d[1] - d[0], d[3] - d[0], d[4] - d[0]).normalized();
-#endif
- /* Distance */
- const btScalar d0 = Lerp(Lerp(d[0], d[1], ix.f),
- Lerp(d[3], d[2], ix.f), iy.f);
- const btScalar d1 = Lerp(Lerp(d[4], d[5], ix.f),
- Lerp(d[7], d[6], ix.f), iy.f);
- return (Lerp(d0, d1, iz.f) - margin);
- }
- //
- void BuildCell(Cell& c)
- {
- const btVector3 org = btVector3((btScalar)c.c[0],
- (btScalar)c.c[1],
- (btScalar)c.c[2]) *
- CELLSIZE * voxelsz;
- for (int k = 0; k <= CELLSIZE; ++k)
- {
- const btScalar z = voxelsz * k + org.z();
- for (int j = 0; j <= CELLSIZE; ++j)
- {
- const btScalar y = voxelsz * j + org.y();
- for (int i = 0; i <= CELLSIZE; ++i)
- {
- const btScalar x = voxelsz * i + org.x();
- c.d[i][j][k] = DistanceToShape(btVector3(x, y, z),
- c.pclient);
- }
- }
- }
- }
- //
- static inline btScalar DistanceToShape(const btVector3& x,
- const btCollisionShape* shape)
- {
- btTransform unit;
- unit.setIdentity();
- if (shape->isConvex())
- {
- btGjkEpaSolver2::sResults res;
- const btConvexShape* csh = static_cast<const btConvexShape*>(shape);
- return (btGjkEpaSolver2::SignedDistance(x, 0, csh, unit, res));
- }
- return (0);
- }
- //
- static inline IntFrac Decompose(btScalar x)
- {
- /* That one need a lot of improvements... */
- /* Remove test, faster floor... */
- IntFrac r;
- x /= CELLSIZE;
- const int o = x < 0 ? (int)(-x + 1) : 0;
- x += o;
- r.b = (int)x;
- const btScalar k = (x - r.b) * CELLSIZE;
- r.i = (int)k;
- r.f = k - r.i;
- r.b -= o;
- return (r);
- }
- //
- static inline btScalar Lerp(btScalar a, btScalar b, btScalar t)
- {
- return (a + (b - a) * t);
- }
-
- //
- static inline unsigned int Hash(int x, int y, int z, const btCollisionShape* shape)
- {
- struct btS
- {
- int x, y, z, w;
- void* p;
- };
-
- btS myset;
- //memset may be needed in case of additional (uninitialized) padding!
- //memset(&myset, 0, sizeof(btS));
-
- myset.x = x;
- myset.y = y;
- myset.z = z;
- myset.w = 0;
- myset.p = (void*)shape;
- const char* ptr = (const char*)&myset;
-
- unsigned int result = HsiehHash(ptr, sizeof(btS));
-
- return result;
- }
-};
-
-#endif //BT_SPARSE_SDF_H
diff --git a/thirdparty/bullet/BulletSoftBody/poly34.cpp b/thirdparty/bullet/BulletSoftBody/poly34.cpp
deleted file mode 100644
index ec7549c8e8..0000000000
--- a/thirdparty/bullet/BulletSoftBody/poly34.cpp
+++ /dev/null
@@ -1,447 +0,0 @@
-// poly34.cpp : solution of cubic and quartic equation
-// (c) Khashin S.I. http://math.ivanovo.ac.ru/dalgebra/Khashin/index.html
-// khash2 (at) gmail.com
-// Thanks to Alexandr Rakhmanin <rakhmanin (at) gmail.com>
-// public domain
-//
-#include <math.h>
-
-#include "poly34.h" // solution of cubic and quartic equation
-#define TwoPi 6.28318530717958648
-const btScalar eps = SIMD_EPSILON;
-
-//=============================================================================
-// _root3, root3 from http://prografix.narod.ru
-//=============================================================================
-static SIMD_FORCE_INLINE btScalar _root3(btScalar x)
-{
- btScalar s = 1.;
- while (x < 1.)
- {
- x *= 8.;
- s *= 0.5;
- }
- while (x > 8.)
- {
- x *= 0.125;
- s *= 2.;
- }
- btScalar r = 1.5;
- r -= 1. / 3. * (r - x / (r * r));
- r -= 1. / 3. * (r - x / (r * r));
- r -= 1. / 3. * (r - x / (r * r));
- r -= 1. / 3. * (r - x / (r * r));
- r -= 1. / 3. * (r - x / (r * r));
- r -= 1. / 3. * (r - x / (r * r));
- return r * s;
-}
-
-btScalar SIMD_FORCE_INLINE root3(btScalar x)
-{
- if (x > 0)
- return _root3(x);
- else if (x < 0)
- return -_root3(-x);
- else
- return 0.;
-}
-
-// x - array of size 2
-// return 2: 2 real roots x[0], x[1]
-// return 0: pair of complex roots: x[0]i*x[1]
-int SolveP2(btScalar* x, btScalar a, btScalar b)
-{ // solve equation x^2 + a*x + b = 0
- btScalar D = 0.25 * a * a - b;
- if (D >= 0)
- {
- D = sqrt(D);
- x[0] = -0.5 * a + D;
- x[1] = -0.5 * a - D;
- return 2;
- }
- x[0] = -0.5 * a;
- x[1] = sqrt(-D);
- return 0;
-}
-//---------------------------------------------------------------------------
-// x - array of size 3
-// In case 3 real roots: => x[0], x[1], x[2], return 3
-// 2 real roots: x[0], x[1], return 2
-// 1 real root : x[0], x[1] i*x[2], return 1
-int SolveP3(btScalar* x, btScalar a, btScalar b, btScalar c)
-{ // solve cubic equation x^3 + a*x^2 + b*x + c = 0
- btScalar a2 = a * a;
- btScalar q = (a2 - 3 * b) / 9;
- if (q < 0)
- q = eps;
- btScalar r = (a * (2 * a2 - 9 * b) + 27 * c) / 54;
- // equation x^3 + q*x + r = 0
- btScalar r2 = r * r;
- btScalar q3 = q * q * q;
- btScalar A, B;
- if (r2 <= (q3 + eps))
- { //<<-- FIXED!
- btScalar t = r / sqrt(q3);
- if (t < -1)
- t = -1;
- if (t > 1)
- t = 1;
- t = acos(t);
- a /= 3;
- q = -2 * sqrt(q);
- x[0] = q * cos(t / 3) - a;
- x[1] = q * cos((t + TwoPi) / 3) - a;
- x[2] = q * cos((t - TwoPi) / 3) - a;
- return (3);
- }
- else
- {
- //A =-pow(fabs(r)+sqrt(r2-q3),1./3);
- A = -root3(fabs(r) + sqrt(r2 - q3));
- if (r < 0)
- A = -A;
- B = (A == 0 ? 0 : q / A);
-
- a /= 3;
- x[0] = (A + B) - a;
- x[1] = -0.5 * (A + B) - a;
- x[2] = 0.5 * sqrt(3.) * (A - B);
- if (fabs(x[2]) < eps)
- {
- x[2] = x[1];
- return (2);
- }
- return (1);
- }
-} // SolveP3(btScalar *x,btScalar a,btScalar b,btScalar c) {
-//---------------------------------------------------------------------------
-// a>=0!
-void CSqrt(btScalar x, btScalar y, btScalar& a, btScalar& b) // returns: a+i*s = sqrt(x+i*y)
-{
- btScalar r = sqrt(x * x + y * y);
- if (y == 0)
- {
- r = sqrt(r);
- if (x >= 0)
- {
- a = r;
- b = 0;
- }
- else
- {
- a = 0;
- b = r;
- }
- }
- else
- { // y != 0
- a = sqrt(0.5 * (x + r));
- b = 0.5 * y / a;
- }
-}
-//---------------------------------------------------------------------------
-int SolveP4Bi(btScalar* x, btScalar b, btScalar d) // solve equation x^4 + b*x^2 + d = 0
-{
- btScalar D = b * b - 4 * d;
- if (D >= 0)
- {
- btScalar sD = sqrt(D);
- btScalar x1 = (-b + sD) / 2;
- btScalar x2 = (-b - sD) / 2; // x2 <= x1
- if (x2 >= 0) // 0 <= x2 <= x1, 4 real roots
- {
- btScalar sx1 = sqrt(x1);
- btScalar sx2 = sqrt(x2);
- x[0] = -sx1;
- x[1] = sx1;
- x[2] = -sx2;
- x[3] = sx2;
- return 4;
- }
- if (x1 < 0) // x2 <= x1 < 0, two pair of imaginary roots
- {
- btScalar sx1 = sqrt(-x1);
- btScalar sx2 = sqrt(-x2);
- x[0] = 0;
- x[1] = sx1;
- x[2] = 0;
- x[3] = sx2;
- return 0;
- }
- // now x2 < 0 <= x1 , two real roots and one pair of imginary root
- btScalar sx1 = sqrt(x1);
- btScalar sx2 = sqrt(-x2);
- x[0] = -sx1;
- x[1] = sx1;
- x[2] = 0;
- x[3] = sx2;
- return 2;
- }
- else
- { // if( D < 0 ), two pair of compex roots
- btScalar sD2 = 0.5 * sqrt(-D);
- CSqrt(-0.5 * b, sD2, x[0], x[1]);
- CSqrt(-0.5 * b, -sD2, x[2], x[3]);
- return 0;
- } // if( D>=0 )
-} // SolveP4Bi(btScalar *x, btScalar b, btScalar d) // solve equation x^4 + b*x^2 d
-//---------------------------------------------------------------------------
-#define SWAP(a, b) \
- { \
- t = b; \
- b = a; \
- a = t; \
- }
-static void dblSort3(btScalar& a, btScalar& b, btScalar& c) // make: a <= b <= c
-{
- btScalar t;
- if (a > b)
- SWAP(a, b); // now a<=b
- if (c < b)
- {
- SWAP(b, c); // now a<=b, b<=c
- if (a > b)
- SWAP(a, b); // now a<=b
- }
-}
-//---------------------------------------------------------------------------
-int SolveP4De(btScalar* x, btScalar b, btScalar c, btScalar d) // solve equation x^4 + b*x^2 + c*x + d
-{
- //if( c==0 ) return SolveP4Bi(x,b,d); // After that, c!=0
- if (fabs(c) < 1e-14 * (fabs(b) + fabs(d)))
- return SolveP4Bi(x, b, d); // After that, c!=0
-
- int res3 = SolveP3(x, 2 * b, b * b - 4 * d, -c * c); // solve resolvent
- // by Viet theorem: x1*x2*x3=-c*c not equals to 0, so x1!=0, x2!=0, x3!=0
- if (res3 > 1) // 3 real roots,
- {
- dblSort3(x[0], x[1], x[2]); // sort roots to x[0] <= x[1] <= x[2]
- // Note: x[0]*x[1]*x[2]= c*c > 0
- if (x[0] > 0) // all roots are positive
- {
- btScalar sz1 = sqrt(x[0]);
- btScalar sz2 = sqrt(x[1]);
- btScalar sz3 = sqrt(x[2]);
- // Note: sz1*sz2*sz3= -c (and not equal to 0)
- if (c > 0)
- {
- x[0] = (-sz1 - sz2 - sz3) / 2;
- x[1] = (-sz1 + sz2 + sz3) / 2;
- x[2] = (+sz1 - sz2 + sz3) / 2;
- x[3] = (+sz1 + sz2 - sz3) / 2;
- return 4;
- }
- // now: c<0
- x[0] = (-sz1 - sz2 + sz3) / 2;
- x[1] = (-sz1 + sz2 - sz3) / 2;
- x[2] = (+sz1 - sz2 - sz3) / 2;
- x[3] = (+sz1 + sz2 + sz3) / 2;
- return 4;
- } // if( x[0] > 0) // all roots are positive
- // now x[0] <= x[1] < 0, x[2] > 0
- // two pair of comlex roots
- btScalar sz1 = sqrt(-x[0]);
- btScalar sz2 = sqrt(-x[1]);
- btScalar sz3 = sqrt(x[2]);
-
- if (c > 0) // sign = -1
- {
- x[0] = -sz3 / 2;
- x[1] = (sz1 - sz2) / 2; // x[0]i*x[1]
- x[2] = sz3 / 2;
- x[3] = (-sz1 - sz2) / 2; // x[2]i*x[3]
- return 0;
- }
- // now: c<0 , sign = +1
- x[0] = sz3 / 2;
- x[1] = (-sz1 + sz2) / 2;
- x[2] = -sz3 / 2;
- x[3] = (sz1 + sz2) / 2;
- return 0;
- } // if( res3>1 ) // 3 real roots,
- // now resoventa have 1 real and pair of compex roots
- // x[0] - real root, and x[0]>0,
- // x[1]i*x[2] - complex roots,
- // x[0] must be >=0. But one times x[0]=~ 1e-17, so:
- if (x[0] < 0)
- x[0] = 0;
- btScalar sz1 = sqrt(x[0]);
- btScalar szr, szi;
- CSqrt(x[1], x[2], szr, szi); // (szr+i*szi)^2 = x[1]+i*x[2]
- if (c > 0) // sign = -1
- {
- x[0] = -sz1 / 2 - szr; // 1st real root
- x[1] = -sz1 / 2 + szr; // 2nd real root
- x[2] = sz1 / 2;
- x[3] = szi;
- return 2;
- }
- // now: c<0 , sign = +1
- x[0] = sz1 / 2 - szr; // 1st real root
- x[1] = sz1 / 2 + szr; // 2nd real root
- x[2] = -sz1 / 2;
- x[3] = szi;
- return 2;
-} // SolveP4De(btScalar *x, btScalar b, btScalar c, btScalar d) // solve equation x^4 + b*x^2 + c*x + d
-//-----------------------------------------------------------------------------
-btScalar N4Step(btScalar x, btScalar a, btScalar b, btScalar c, btScalar d) // one Newton step for x^4 + a*x^3 + b*x^2 + c*x + d
-{
- btScalar fxs = ((4 * x + 3 * a) * x + 2 * b) * x + c; // f'(x)
- if (fxs == 0)
- return x; //return 1e99; <<-- FIXED!
- btScalar fx = (((x + a) * x + b) * x + c) * x + d; // f(x)
- return x - fx / fxs;
-}
-//-----------------------------------------------------------------------------
-// x - array of size 4
-// return 4: 4 real roots x[0], x[1], x[2], x[3], possible multiple roots
-// return 2: 2 real roots x[0], x[1] and complex x[2]i*x[3],
-// return 0: two pair of complex roots: x[0]i*x[1], x[2]i*x[3],
-int SolveP4(btScalar* x, btScalar a, btScalar b, btScalar c, btScalar d)
-{ // solve equation x^4 + a*x^3 + b*x^2 + c*x + d by Dekart-Euler method
- // move to a=0:
- btScalar d1 = d + 0.25 * a * (0.25 * b * a - 3. / 64 * a * a * a - c);
- btScalar c1 = c + 0.5 * a * (0.25 * a * a - b);
- btScalar b1 = b - 0.375 * a * a;
- int res = SolveP4De(x, b1, c1, d1);
- if (res == 4)
- {
- x[0] -= a / 4;
- x[1] -= a / 4;
- x[2] -= a / 4;
- x[3] -= a / 4;
- }
- else if (res == 2)
- {
- x[0] -= a / 4;
- x[1] -= a / 4;
- x[2] -= a / 4;
- }
- else
- {
- x[0] -= a / 4;
- x[2] -= a / 4;
- }
- // one Newton step for each real root:
- if (res > 0)
- {
- x[0] = N4Step(x[0], a, b, c, d);
- x[1] = N4Step(x[1], a, b, c, d);
- }
- if (res > 2)
- {
- x[2] = N4Step(x[2], a, b, c, d);
- x[3] = N4Step(x[3], a, b, c, d);
- }
- return res;
-}
-//-----------------------------------------------------------------------------
-#define F5(t) (((((t + a) * t + b) * t + c) * t + d) * t + e)
-//-----------------------------------------------------------------------------
-btScalar SolveP5_1(btScalar a, btScalar b, btScalar c, btScalar d, btScalar e) // return real root of x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
-{
- int cnt;
- if (fabs(e) < eps)
- return 0;
-
- btScalar brd = fabs(a); // brd - border of real roots
- if (fabs(b) > brd)
- brd = fabs(b);
- if (fabs(c) > brd)
- brd = fabs(c);
- if (fabs(d) > brd)
- brd = fabs(d);
- if (fabs(e) > brd)
- brd = fabs(e);
- brd++; // brd - border of real roots
-
- btScalar x0, f0; // less than root
- btScalar x1, f1; // greater than root
- btScalar x2, f2, f2s; // next values, f(x2), f'(x2)
- btScalar dx = 0;
-
- if (e < 0)
- {
- x0 = 0;
- x1 = brd;
- f0 = e;
- f1 = F5(x1);
- x2 = 0.01 * brd;
- } // positive root
- else
- {
- x0 = -brd;
- x1 = 0;
- f0 = F5(x0);
- f1 = e;
- x2 = -0.01 * brd;
- } // negative root
-
- if (fabs(f0) < eps)
- return x0;
- if (fabs(f1) < eps)
- return x1;
-
- // now x0<x1, f(x0)<0, f(x1)>0
- // Firstly 10 bisections
- for (cnt = 0; cnt < 10; cnt++)
- {
- x2 = (x0 + x1) / 2; // next point
- //x2 = x0 - f0*(x1 - x0) / (f1 - f0); // next point
- f2 = F5(x2); // f(x2)
- if (fabs(f2) < eps)
- return x2;
- if (f2 > 0)
- {
- x1 = x2;
- f1 = f2;
- }
- else
- {
- x0 = x2;
- f0 = f2;
- }
- }
-
- // At each step:
- // x0<x1, f(x0)<0, f(x1)>0.
- // x2 - next value
- // we hope that x0 < x2 < x1, but not necessarily
- do
- {
- if (cnt++ > 50)
- break;
- if (x2 <= x0 || x2 >= x1)
- x2 = (x0 + x1) / 2; // now x0 < x2 < x1
- f2 = F5(x2); // f(x2)
- if (fabs(f2) < eps)
- return x2;
- if (f2 > 0)
- {
- x1 = x2;
- f1 = f2;
- }
- else
- {
- x0 = x2;
- f0 = f2;
- }
- f2s = (((5 * x2 + 4 * a) * x2 + 3 * b) * x2 + 2 * c) * x2 + d; // f'(x2)
- if (fabs(f2s) < eps)
- {
- x2 = 1e99;
- continue;
- }
- dx = f2 / f2s;
- x2 -= dx;
- } while (fabs(dx) > eps);
- return x2;
-} // SolveP5_1(btScalar a,btScalar b,btScalar c,btScalar d,btScalar e) // return real root of x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
-//-----------------------------------------------------------------------------
-int SolveP5(btScalar* x, btScalar a, btScalar b, btScalar c, btScalar d, btScalar e) // solve equation x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
-{
- btScalar r = x[0] = SolveP5_1(a, b, c, d, e);
- btScalar a1 = a + r, b1 = b + r * a1, c1 = c + r * b1, d1 = d + r * c1;
- return 1 + SolveP4(x + 1, a1, b1, c1, d1);
-} // SolveP5(btScalar *x,btScalar a,btScalar b,btScalar c,btScalar d,btScalar e) // solve equation x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
-//-----------------------------------------------------------------------------
diff --git a/thirdparty/bullet/BulletSoftBody/poly34.h b/thirdparty/bullet/BulletSoftBody/poly34.h
deleted file mode 100644
index 35a52c5fec..0000000000
--- a/thirdparty/bullet/BulletSoftBody/poly34.h
+++ /dev/null
@@ -1,38 +0,0 @@
-// poly34.h : solution of cubic and quartic equation
-// (c) Khashin S.I. http://math.ivanovo.ac.ru/dalgebra/Khashin/index.html
-// khash2 (at) gmail.com
-
-#ifndef POLY_34
-#define POLY_34
-#include "LinearMath/btScalar.h"
-// x - array of size 2
-// return 2: 2 real roots x[0], x[1]
-// return 0: pair of complex roots: x[0]i*x[1]
-int SolveP2(btScalar* x, btScalar a, btScalar b); // solve equation x^2 + a*x + b = 0
-
-// x - array of size 3
-// return 3: 3 real roots x[0], x[1], x[2]
-// return 1: 1 real root x[0] and pair of complex roots: x[1]i*x[2]
-int SolveP3(btScalar* x, btScalar a, btScalar b, btScalar c); // solve cubic equation x^3 + a*x^2 + b*x + c = 0
-
-// x - array of size 4
-// return 4: 4 real roots x[0], x[1], x[2], x[3], possible multiple roots
-// return 2: 2 real roots x[0], x[1] and complex x[2]i*x[3],
-// return 0: two pair of complex roots: x[0]i*x[1], x[2]i*x[3],
-int SolveP4(btScalar* x, btScalar a, btScalar b, btScalar c, btScalar d); // solve equation x^4 + a*x^3 + b*x^2 + c*x + d = 0 by Dekart-Euler method
-
-// x - array of size 5
-// return 5: 5 real roots x[0], x[1], x[2], x[3], x[4], possible multiple roots
-// return 3: 3 real roots x[0], x[1], x[2] and complex x[3]i*x[4],
-// return 1: 1 real root x[0] and two pair of complex roots: x[1]i*x[2], x[3]i*x[4],
-int SolveP5(btScalar* x, btScalar a, btScalar b, btScalar c, btScalar d, btScalar e); // solve equation x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
-
-//-----------------------------------------------------------------------------
-// And some additional functions for internal use.
-// Your may remove this definitions from here
-int SolveP4Bi(btScalar* x, btScalar b, btScalar d); // solve equation x^4 + b*x^2 + d = 0
-int SolveP4De(btScalar* x, btScalar b, btScalar c, btScalar d); // solve equation x^4 + b*x^2 + c*x + d = 0
-void CSqrt(btScalar x, btScalar y, btScalar& a, btScalar& b); // returns as a+i*s, sqrt(x+i*y)
-btScalar N4Step(btScalar x, btScalar a, btScalar b, btScalar c, btScalar d); // one Newton step for x^4 + a*x^3 + b*x^2 + c*x + d
-btScalar SolveP5_1(btScalar a, btScalar b, btScalar c, btScalar d, btScalar e); // return real root of x^5 + a*x^4 + b*x^3 + c*x^2 + d*x + e = 0
-#endif
diff --git a/thirdparty/bullet/LICENSE.txt b/thirdparty/bullet/LICENSE.txt
deleted file mode 100644
index 319c84e349..0000000000
--- a/thirdparty/bullet/LICENSE.txt
+++ /dev/null
@@ -1,15 +0,0 @@
-
-The files in this repository are licensed under the zlib license, except for the files under 'Extras' and examples/ThirdPartyLibs.
-
-Bullet Continuous Collision Detection and Physics Library
-http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
diff --git a/thirdparty/bullet/LinearMath/TaskScheduler/btTaskScheduler.cpp b/thirdparty/bullet/LinearMath/TaskScheduler/btTaskScheduler.cpp
deleted file mode 100644
index 5f1115c402..0000000000
--- a/thirdparty/bullet/LinearMath/TaskScheduler/btTaskScheduler.cpp
+++ /dev/null
@@ -1,792 +0,0 @@
-
-#include "LinearMath/btMinMax.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btThreads.h"
-#include "LinearMath/btQuickprof.h"
-#include <stdio.h>
-#include <algorithm>
-
-#if BT_THREADSAFE
-
-#include "btThreadSupportInterface.h"
-
-#if defined(_WIN32)
-
-#define WIN32_LEAN_AND_MEAN
-
-#include <windows.h>
-
-#endif
-
-typedef unsigned long long btU64;
-static const int kCacheLineSize = 64;
-
-void btSpinPause()
-{
-#if defined(_WIN32)
- YieldProcessor();
-#endif
-}
-
-struct WorkerThreadStatus
-{
- enum Type
- {
- kInvalid,
- kWaitingForWork,
- kWorking,
- kSleeping,
- };
-};
-
-ATTRIBUTE_ALIGNED64(class)
-WorkerThreadDirectives
-{
- static const int kMaxThreadCount = BT_MAX_THREAD_COUNT;
- // directives for all worker threads packed into a single cacheline
- char m_threadDirs[kMaxThreadCount];
-
-public:
- enum Type
- {
- kInvalid,
- kGoToSleep, // go to sleep
- kStayAwakeButIdle, // wait for not checking job queue
- kScanForJobs, // actively scan job queue for jobs
- };
- WorkerThreadDirectives()
- {
- for (int i = 0; i < kMaxThreadCount; ++i)
- {
- m_threadDirs[i] = 0;
- }
- }
-
- Type getDirective(int threadId)
- {
- btAssert(threadId < kMaxThreadCount);
- return static_cast<Type>(m_threadDirs[threadId]);
- }
-
- void setDirectiveByRange(int threadBegin, int threadEnd, Type dir)
- {
- btAssert(threadBegin < threadEnd);
- btAssert(threadEnd <= kMaxThreadCount);
- char dirChar = static_cast<char>(dir);
- for (int i = threadBegin; i < threadEnd; ++i)
- {
- m_threadDirs[i] = dirChar;
- }
- }
-};
-
-class JobQueue;
-
-ATTRIBUTE_ALIGNED64(struct)
-ThreadLocalStorage
-{
- int m_threadId;
- WorkerThreadStatus::Type m_status;
- int m_numJobsFinished;
- btSpinMutex m_mutex;
- btScalar m_sumResult;
- WorkerThreadDirectives* m_directive;
- JobQueue* m_queue;
- btClock* m_clock;
- unsigned int m_cooldownTime;
-};
-
-struct IJob
-{
- virtual void executeJob(int threadId) = 0;
-};
-
-class ParallelForJob : public IJob
-{
- const btIParallelForBody* m_body;
- int m_begin;
- int m_end;
-
-public:
- ParallelForJob(int iBegin, int iEnd, const btIParallelForBody& body)
- {
- m_body = &body;
- m_begin = iBegin;
- m_end = iEnd;
- }
- virtual void executeJob(int threadId) BT_OVERRIDE
- {
- BT_PROFILE("executeJob");
-
- // call the functor body to do the work
- m_body->forLoop(m_begin, m_end);
- }
-};
-
-class ParallelSumJob : public IJob
-{
- const btIParallelSumBody* m_body;
- ThreadLocalStorage* m_threadLocalStoreArray;
- int m_begin;
- int m_end;
-
-public:
- ParallelSumJob(int iBegin, int iEnd, const btIParallelSumBody& body, ThreadLocalStorage* tls)
- {
- m_body = &body;
- m_threadLocalStoreArray = tls;
- m_begin = iBegin;
- m_end = iEnd;
- }
- virtual void executeJob(int threadId) BT_OVERRIDE
- {
- BT_PROFILE("executeJob");
-
- // call the functor body to do the work
- btScalar val = m_body->sumLoop(m_begin, m_end);
-#if BT_PARALLEL_SUM_DETERMINISTISM
- // by truncating bits of the result, we can make the parallelSum deterministic (at the expense of precision)
- const float TRUNC_SCALE = float(1 << 19);
- val = floor(val * TRUNC_SCALE + 0.5f) / TRUNC_SCALE; // truncate some bits
-#endif
- m_threadLocalStoreArray[threadId].m_sumResult += val;
- }
-};
-
-ATTRIBUTE_ALIGNED64(class)
-JobQueue
-{
- btThreadSupportInterface* m_threadSupport;
- btCriticalSection* m_queueLock;
- btSpinMutex m_mutex;
-
- btAlignedObjectArray<IJob*> m_jobQueue;
- char* m_jobMem;
- int m_jobMemSize;
- bool m_queueIsEmpty;
- int m_tailIndex;
- int m_headIndex;
- int m_allocSize;
- bool m_useSpinMutex;
- btAlignedObjectArray<JobQueue*> m_neighborContexts;
- char m_cachePadding[kCacheLineSize]; // prevent false sharing
-
- void freeJobMem()
- {
- if (m_jobMem)
- {
- // free old
- btAlignedFree(m_jobMem);
- m_jobMem = NULL;
- }
- }
- void resizeJobMem(int newSize)
- {
- if (newSize > m_jobMemSize)
- {
- freeJobMem();
- m_jobMem = static_cast<char*>(btAlignedAlloc(newSize, kCacheLineSize));
- m_jobMemSize = newSize;
- }
- }
-
-public:
- JobQueue()
- {
- m_jobMem = NULL;
- m_jobMemSize = 0;
- m_threadSupport = NULL;
- m_queueLock = NULL;
- m_headIndex = 0;
- m_tailIndex = 0;
- m_useSpinMutex = false;
- }
- ~JobQueue()
- {
- exit();
- }
- void exit()
- {
- freeJobMem();
- if (m_queueLock && m_threadSupport)
- {
- m_threadSupport->deleteCriticalSection(m_queueLock);
- m_queueLock = NULL;
- m_threadSupport = 0;
- }
- }
-
- void init(btThreadSupportInterface * threadSup, btAlignedObjectArray<JobQueue> * contextArray)
- {
- m_threadSupport = threadSup;
- if (threadSup)
- {
- m_queueLock = m_threadSupport->createCriticalSection();
- }
- setupJobStealing(contextArray, contextArray->size());
- }
- void setupJobStealing(btAlignedObjectArray<JobQueue> * contextArray, int numActiveContexts)
- {
- btAlignedObjectArray<JobQueue>& contexts = *contextArray;
- int selfIndex = 0;
- for (int i = 0; i < contexts.size(); ++i)
- {
- if (this == &contexts[i])
- {
- selfIndex = i;
- break;
- }
- }
- int numNeighbors = btMin(2, contexts.size() - 1);
- int neighborOffsets[] = {-1, 1, -2, 2, -3, 3};
- int numOffsets = sizeof(neighborOffsets) / sizeof(neighborOffsets[0]);
- m_neighborContexts.reserve(numNeighbors);
- m_neighborContexts.resizeNoInitialize(0);
- for (int i = 0; i < numOffsets && m_neighborContexts.size() < numNeighbors; i++)
- {
- int neighborIndex = selfIndex + neighborOffsets[i];
- if (neighborIndex >= 0 && neighborIndex < numActiveContexts)
- {
- m_neighborContexts.push_back(&contexts[neighborIndex]);
- }
- }
- }
-
- bool isQueueEmpty() const { return m_queueIsEmpty; }
- void lockQueue()
- {
- if (m_useSpinMutex)
- {
- m_mutex.lock();
- }
- else
- {
- m_queueLock->lock();
- }
- }
- void unlockQueue()
- {
- if (m_useSpinMutex)
- {
- m_mutex.unlock();
- }
- else
- {
- m_queueLock->unlock();
- }
- }
- void clearQueue(int jobCount, int jobSize)
- {
- lockQueue();
- m_headIndex = 0;
- m_tailIndex = 0;
- m_allocSize = 0;
- m_queueIsEmpty = true;
- int jobBufSize = jobSize * jobCount;
- // make sure we have enough memory allocated to store jobs
- if (jobBufSize > m_jobMemSize)
- {
- resizeJobMem(jobBufSize);
- }
- // make sure job queue is big enough
- if (jobCount > m_jobQueue.capacity())
- {
- m_jobQueue.reserve(jobCount);
- }
- unlockQueue();
- m_jobQueue.resizeNoInitialize(0);
- }
- void* allocJobMem(int jobSize)
- {
- btAssert(m_jobMemSize >= (m_allocSize + jobSize));
- void* jobMem = &m_jobMem[m_allocSize];
- m_allocSize += jobSize;
- return jobMem;
- }
- void submitJob(IJob * job)
- {
- btAssert(reinterpret_cast<char*>(job) >= &m_jobMem[0] && reinterpret_cast<char*>(job) < &m_jobMem[0] + m_allocSize);
- m_jobQueue.push_back(job);
- lockQueue();
- m_tailIndex++;
- m_queueIsEmpty = false;
- unlockQueue();
- }
- IJob* consumeJobFromOwnQueue()
- {
- if (m_queueIsEmpty)
- {
- // lock free path. even if this is taken erroneously it isn't harmful
- return NULL;
- }
- IJob* job = NULL;
- lockQueue();
- if (!m_queueIsEmpty)
- {
- job = m_jobQueue[m_headIndex++];
- btAssert(reinterpret_cast<char*>(job) >= &m_jobMem[0] && reinterpret_cast<char*>(job) < &m_jobMem[0] + m_allocSize);
- if (m_headIndex == m_tailIndex)
- {
- m_queueIsEmpty = true;
- }
- }
- unlockQueue();
- return job;
- }
- IJob* consumeJob()
- {
- if (IJob* job = consumeJobFromOwnQueue())
- {
- return job;
- }
- // own queue is empty, try to steal from neighbor
- for (int i = 0; i < m_neighborContexts.size(); ++i)
- {
- JobQueue* otherContext = m_neighborContexts[i];
- if (IJob* job = otherContext->consumeJobFromOwnQueue())
- {
- return job;
- }
- }
- return NULL;
- }
-};
-
-static void WorkerThreadFunc(void* userPtr)
-{
- BT_PROFILE("WorkerThreadFunc");
- ThreadLocalStorage* localStorage = (ThreadLocalStorage*)userPtr;
- JobQueue* jobQueue = localStorage->m_queue;
-
- bool shouldSleep = false;
- int threadId = localStorage->m_threadId;
- while (!shouldSleep)
- {
- // do work
- localStorage->m_mutex.lock();
- while (IJob* job = jobQueue->consumeJob())
- {
- localStorage->m_status = WorkerThreadStatus::kWorking;
- job->executeJob(threadId);
- localStorage->m_numJobsFinished++;
- }
- localStorage->m_status = WorkerThreadStatus::kWaitingForWork;
- localStorage->m_mutex.unlock();
- btU64 clockStart = localStorage->m_clock->getTimeMicroseconds();
- // while queue is empty,
- while (jobQueue->isQueueEmpty())
- {
- // todo: spin wait a bit to avoid hammering the empty queue
- btSpinPause();
- if (localStorage->m_directive->getDirective(threadId) == WorkerThreadDirectives::kGoToSleep)
- {
- shouldSleep = true;
- break;
- }
- // if jobs are incoming,
- if (localStorage->m_directive->getDirective(threadId) == WorkerThreadDirectives::kScanForJobs)
- {
- clockStart = localStorage->m_clock->getTimeMicroseconds(); // reset clock
- }
- else
- {
- for (int i = 0; i < 50; ++i)
- {
- btSpinPause();
- btSpinPause();
- btSpinPause();
- btSpinPause();
- if (localStorage->m_directive->getDirective(threadId) == WorkerThreadDirectives::kScanForJobs || !jobQueue->isQueueEmpty())
- {
- break;
- }
- }
- // if no jobs incoming and queue has been empty for the cooldown time, sleep
- btU64 timeElapsed = localStorage->m_clock->getTimeMicroseconds() - clockStart;
- if (timeElapsed > localStorage->m_cooldownTime)
- {
- shouldSleep = true;
- break;
- }
- }
- }
- }
- {
- BT_PROFILE("sleep");
- // go sleep
- localStorage->m_mutex.lock();
- localStorage->m_status = WorkerThreadStatus::kSleeping;
- localStorage->m_mutex.unlock();
- }
-}
-
-class btTaskSchedulerDefault : public btITaskScheduler
-{
- btThreadSupportInterface* m_threadSupport;
- WorkerThreadDirectives* m_workerDirective;
- btAlignedObjectArray<JobQueue> m_jobQueues;
- btAlignedObjectArray<JobQueue*> m_perThreadJobQueues;
- btAlignedObjectArray<ThreadLocalStorage> m_threadLocalStorage;
- btSpinMutex m_antiNestingLock; // prevent nested parallel-for
- btClock m_clock;
- int m_numThreads;
- int m_numWorkerThreads;
- int m_numActiveJobQueues;
- int m_maxNumThreads;
- int m_numJobs;
- static const int kFirstWorkerThreadId = 1;
-
-public:
- btTaskSchedulerDefault() : btITaskScheduler("ThreadSupport")
- {
- m_threadSupport = NULL;
- m_workerDirective = NULL;
- }
-
- virtual ~btTaskSchedulerDefault()
- {
- waitForWorkersToSleep();
-
- for (int i = 0; i < m_jobQueues.size(); ++i)
- {
- m_jobQueues[i].exit();
- }
-
- if (m_threadSupport)
- {
- delete m_threadSupport;
- m_threadSupport = NULL;
- }
- if (m_workerDirective)
- {
- btAlignedFree(m_workerDirective);
- m_workerDirective = NULL;
- }
- }
-
- void init()
- {
- btThreadSupportInterface::ConstructionInfo constructionInfo("TaskScheduler", WorkerThreadFunc);
- m_threadSupport = btThreadSupportInterface::create(constructionInfo);
- m_workerDirective = static_cast<WorkerThreadDirectives*>(btAlignedAlloc(sizeof(*m_workerDirective), 64));
-
- m_numWorkerThreads = m_threadSupport->getNumWorkerThreads();
- m_maxNumThreads = m_threadSupport->getNumWorkerThreads() + 1;
- m_numThreads = m_maxNumThreads;
- // ideal to have one job queue for each physical processor (except for the main thread which needs no queue)
- int numThreadsPerQueue = m_threadSupport->getLogicalToPhysicalCoreRatio();
- int numJobQueues = (numThreadsPerQueue == 1) ? (m_maxNumThreads - 1) : (m_maxNumThreads / numThreadsPerQueue);
- m_jobQueues.resize(numJobQueues);
- m_numActiveJobQueues = numJobQueues;
- for (int i = 0; i < m_jobQueues.size(); ++i)
- {
- m_jobQueues[i].init(m_threadSupport, &m_jobQueues);
- }
- m_perThreadJobQueues.resize(m_numThreads);
- for (int i = 0; i < m_numThreads; i++)
- {
- JobQueue* jq = NULL;
- // only worker threads get a job queue
- if (i > 0)
- {
- if (numThreadsPerQueue == 1)
- {
- // one queue per worker thread
- jq = &m_jobQueues[i - kFirstWorkerThreadId];
- }
- else
- {
- // 2 threads share each queue
- jq = &m_jobQueues[i / numThreadsPerQueue];
- }
- }
- m_perThreadJobQueues[i] = jq;
- }
- m_threadLocalStorage.resize(m_numThreads);
- for (int i = 0; i < m_numThreads; i++)
- {
- ThreadLocalStorage& storage = m_threadLocalStorage[i];
- storage.m_threadId = i;
- storage.m_directive = m_workerDirective;
- storage.m_status = WorkerThreadStatus::kSleeping;
- storage.m_cooldownTime = 100; // 100 microseconds, threads go to sleep after this long if they have nothing to do
- storage.m_clock = &m_clock;
- storage.m_queue = m_perThreadJobQueues[i];
- }
- setWorkerDirectives(WorkerThreadDirectives::kGoToSleep); // no work for them yet
- setNumThreads(m_threadSupport->getCacheFriendlyNumThreads());
- }
-
- void setWorkerDirectives(WorkerThreadDirectives::Type dir)
- {
- m_workerDirective->setDirectiveByRange(kFirstWorkerThreadId, m_numThreads, dir);
- }
-
- virtual int getMaxNumThreads() const BT_OVERRIDE
- {
- return m_maxNumThreads;
- }
-
- virtual int getNumThreads() const BT_OVERRIDE
- {
- return m_numThreads;
- }
-
- virtual void setNumThreads(int numThreads) BT_OVERRIDE
- {
- m_numThreads = btMax(btMin(numThreads, int(m_maxNumThreads)), 1);
- m_numWorkerThreads = m_numThreads - 1;
- m_numActiveJobQueues = 0;
- // if there is at least 1 worker,
- if (m_numWorkerThreads > 0)
- {
- // re-setup job stealing between queues to avoid attempting to steal from an inactive job queue
- JobQueue* lastActiveContext = m_perThreadJobQueues[m_numThreads - 1];
- int iLastActiveContext = lastActiveContext - &m_jobQueues[0];
- m_numActiveJobQueues = iLastActiveContext + 1;
- for (int i = 0; i < m_jobQueues.size(); ++i)
- {
- m_jobQueues[i].setupJobStealing(&m_jobQueues, m_numActiveJobQueues);
- }
- }
- m_workerDirective->setDirectiveByRange(m_numThreads, BT_MAX_THREAD_COUNT, WorkerThreadDirectives::kGoToSleep);
- }
-
- void waitJobs()
- {
- BT_PROFILE("waitJobs");
- // have the main thread work until the job queues are empty
- int numMainThreadJobsFinished = 0;
- for (int i = 0; i < m_numActiveJobQueues; ++i)
- {
- while (IJob* job = m_jobQueues[i].consumeJob())
- {
- job->executeJob(0);
- numMainThreadJobsFinished++;
- }
- }
-
- // done with jobs for now, tell workers to rest (but not sleep)
- setWorkerDirectives(WorkerThreadDirectives::kStayAwakeButIdle);
-
- btU64 clockStart = m_clock.getTimeMicroseconds();
- // wait for workers to finish any jobs in progress
- while (true)
- {
- int numWorkerJobsFinished = 0;
- for (int iThread = kFirstWorkerThreadId; iThread < m_numThreads; ++iThread)
- {
- ThreadLocalStorage* storage = &m_threadLocalStorage[iThread];
- storage->m_mutex.lock();
- numWorkerJobsFinished += storage->m_numJobsFinished;
- storage->m_mutex.unlock();
- }
- if (numWorkerJobsFinished + numMainThreadJobsFinished == m_numJobs)
- {
- break;
- }
- btU64 timeElapsed = m_clock.getTimeMicroseconds() - clockStart;
- btAssert(timeElapsed < 1000);
- if (timeElapsed > 100000)
- {
- break;
- }
- btSpinPause();
- }
- }
-
- void wakeWorkers(int numWorkersToWake)
- {
- BT_PROFILE("wakeWorkers");
- btAssert(m_workerDirective->getDirective(1) == WorkerThreadDirectives::kScanForJobs);
- int numDesiredWorkers = btMin(numWorkersToWake, m_numWorkerThreads);
- int numActiveWorkers = 0;
- for (int iWorker = 0; iWorker < m_numWorkerThreads; ++iWorker)
- {
- // note this count of active workers is not necessarily totally reliable, because a worker thread could be
- // just about to put itself to sleep. So we may on occasion fail to wake up all the workers. It should be rare.
- ThreadLocalStorage& storage = m_threadLocalStorage[kFirstWorkerThreadId + iWorker];
- if (storage.m_status != WorkerThreadStatus::kSleeping)
- {
- numActiveWorkers++;
- }
- }
- for (int iWorker = 0; iWorker < m_numWorkerThreads && numActiveWorkers < numDesiredWorkers; ++iWorker)
- {
- ThreadLocalStorage& storage = m_threadLocalStorage[kFirstWorkerThreadId + iWorker];
- if (storage.m_status == WorkerThreadStatus::kSleeping)
- {
- m_threadSupport->runTask(iWorker, &storage);
- numActiveWorkers++;
- }
- }
- }
-
- void waitForWorkersToSleep()
- {
- BT_PROFILE("waitForWorkersToSleep");
- setWorkerDirectives(WorkerThreadDirectives::kGoToSleep);
- m_threadSupport->waitForAllTasks();
- for (int i = kFirstWorkerThreadId; i < m_numThreads; i++)
- {
- ThreadLocalStorage& storage = m_threadLocalStorage[i];
- btAssert(storage.m_status == WorkerThreadStatus::kSleeping);
- }
- }
-
- virtual void sleepWorkerThreadsHint() BT_OVERRIDE
- {
- BT_PROFILE("sleepWorkerThreadsHint");
- // hint the task scheduler that we may not be using these threads for a little while
- setWorkerDirectives(WorkerThreadDirectives::kGoToSleep);
- }
-
- void prepareWorkerThreads()
- {
- for (int i = kFirstWorkerThreadId; i < m_numThreads; ++i)
- {
- ThreadLocalStorage& storage = m_threadLocalStorage[i];
- storage.m_mutex.lock();
- storage.m_numJobsFinished = 0;
- storage.m_mutex.unlock();
- }
- setWorkerDirectives(WorkerThreadDirectives::kScanForJobs);
- }
-
- virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelFor_ThreadSupport");
- btAssert(iEnd >= iBegin);
- btAssert(grainSize >= 1);
- int iterationCount = iEnd - iBegin;
- if (iterationCount > grainSize && m_numWorkerThreads > 0 && m_antiNestingLock.tryLock())
- {
- typedef ParallelForJob JobType;
- int jobCount = (iterationCount + grainSize - 1) / grainSize;
- m_numJobs = jobCount;
- btAssert(jobCount >= 2); // need more than one job for multithreading
- int jobSize = sizeof(JobType);
-
- for (int i = 0; i < m_numActiveJobQueues; ++i)
- {
- m_jobQueues[i].clearQueue(jobCount, jobSize);
- }
- // prepare worker threads for incoming work
- prepareWorkerThreads();
- // submit all of the jobs
- int iJob = 0;
- int iThread = kFirstWorkerThreadId; // first worker thread
- for (int i = iBegin; i < iEnd; i += grainSize)
- {
- btAssert(iJob < jobCount);
- int iE = btMin(i + grainSize, iEnd);
- JobQueue* jq = m_perThreadJobQueues[iThread];
- btAssert(jq);
- btAssert((jq - &m_jobQueues[0]) < m_numActiveJobQueues);
- void* jobMem = jq->allocJobMem(jobSize);
- JobType* job = new (jobMem) ParallelForJob(i, iE, body); // placement new
- jq->submitJob(job);
- iJob++;
- iThread++;
- if (iThread >= m_numThreads)
- {
- iThread = kFirstWorkerThreadId; // first worker thread
- }
- }
- wakeWorkers(jobCount - 1);
-
- // put the main thread to work on emptying the job queue and then wait for all workers to finish
- waitJobs();
- m_antiNestingLock.unlock();
- }
- else
- {
- BT_PROFILE("parallelFor_mainThread");
- // just run on main thread
- body.forLoop(iBegin, iEnd);
- }
- }
- virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelSum_ThreadSupport");
- btAssert(iEnd >= iBegin);
- btAssert(grainSize >= 1);
- int iterationCount = iEnd - iBegin;
- if (iterationCount > grainSize && m_numWorkerThreads > 0 && m_antiNestingLock.tryLock())
- {
- typedef ParallelSumJob JobType;
- int jobCount = (iterationCount + grainSize - 1) / grainSize;
- m_numJobs = jobCount;
- btAssert(jobCount >= 2); // need more than one job for multithreading
- int jobSize = sizeof(JobType);
- for (int i = 0; i < m_numActiveJobQueues; ++i)
- {
- m_jobQueues[i].clearQueue(jobCount, jobSize);
- }
-
- // initialize summation
- for (int iThread = 0; iThread < m_numThreads; ++iThread)
- {
- m_threadLocalStorage[iThread].m_sumResult = btScalar(0);
- }
-
- // prepare worker threads for incoming work
- prepareWorkerThreads();
- // submit all of the jobs
- int iJob = 0;
- int iThread = kFirstWorkerThreadId; // first worker thread
- for (int i = iBegin; i < iEnd; i += grainSize)
- {
- btAssert(iJob < jobCount);
- int iE = btMin(i + grainSize, iEnd);
- JobQueue* jq = m_perThreadJobQueues[iThread];
- btAssert(jq);
- btAssert((jq - &m_jobQueues[0]) < m_numActiveJobQueues);
- void* jobMem = jq->allocJobMem(jobSize);
- JobType* job = new (jobMem) ParallelSumJob(i, iE, body, &m_threadLocalStorage[0]); // placement new
- jq->submitJob(job);
- iJob++;
- iThread++;
- if (iThread >= m_numThreads)
- {
- iThread = kFirstWorkerThreadId; // first worker thread
- }
- }
- wakeWorkers(jobCount - 1);
-
- // put the main thread to work on emptying the job queue and then wait for all workers to finish
- waitJobs();
-
- // add up all the thread sums
- btScalar sum = btScalar(0);
- for (int iThread = 0; iThread < m_numThreads; ++iThread)
- {
- sum += m_threadLocalStorage[iThread].m_sumResult;
- }
- m_antiNestingLock.unlock();
- return sum;
- }
- else
- {
- BT_PROFILE("parallelSum_mainThread");
- // just run on main thread
- return body.sumLoop(iBegin, iEnd);
- }
- }
-};
-
-btITaskScheduler* btCreateDefaultTaskScheduler()
-{
- btTaskSchedulerDefault* ts = new btTaskSchedulerDefault();
- ts->init();
- return ts;
-}
-
-#else // #if BT_THREADSAFE
-
-btITaskScheduler* btCreateDefaultTaskScheduler()
-{
- return NULL;
-}
-
-#endif // #else // #if BT_THREADSAFE
diff --git a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportInterface.h b/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportInterface.h
deleted file mode 100644
index 1fe49335a1..0000000000
--- a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportInterface.h
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2018 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_THREAD_SUPPORT_INTERFACE_H
-#define BT_THREAD_SUPPORT_INTERFACE_H
-
-class btCriticalSection
-{
-public:
- btCriticalSection() {}
- virtual ~btCriticalSection() {}
-
- virtual void lock() = 0;
- virtual void unlock() = 0;
-};
-
-class btThreadSupportInterface
-{
-public:
- virtual ~btThreadSupportInterface() {}
-
- virtual int getNumWorkerThreads() const = 0; // number of worker threads (total number of logical processors - 1)
- virtual int getCacheFriendlyNumThreads() const = 0; // the number of logical processors sharing a single L3 cache
- virtual int getLogicalToPhysicalCoreRatio() const = 0; // the number of logical processors per physical processor (usually 1 or 2)
- virtual void runTask(int threadIndex, void* userData) = 0;
- virtual void waitForAllTasks() = 0;
-
- virtual btCriticalSection* createCriticalSection() = 0;
- virtual void deleteCriticalSection(btCriticalSection* criticalSection) = 0;
-
- typedef void (*ThreadFunc)(void* userPtr);
-
- struct ConstructionInfo
- {
- ConstructionInfo(const char* uniqueName,
- ThreadFunc userThreadFunc,
- int threadStackSize = 65535)
- : m_uniqueName(uniqueName),
- m_userThreadFunc(userThreadFunc),
- m_threadStackSize(threadStackSize)
- {
- }
-
- const char* m_uniqueName;
- ThreadFunc m_userThreadFunc;
- int m_threadStackSize;
- };
-
- static btThreadSupportInterface* create(const ConstructionInfo& info);
-};
-
-#endif //BT_THREAD_SUPPORT_INTERFACE_H
diff --git a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportPosix.cpp b/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportPosix.cpp
deleted file mode 100644
index a03f6dc570..0000000000
--- a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportPosix.cpp
+++ /dev/null
@@ -1,353 +0,0 @@
-
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2018 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#if BT_THREADSAFE && !defined(_WIN32)
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btThreads.h"
-#include "LinearMath/btMinMax.h"
-#include "btThreadSupportInterface.h"
-
-#include <stdio.h>
-#include <errno.h>
-#include <unistd.h>
-
-#ifndef _XOPEN_SOURCE
-#define _XOPEN_SOURCE 600 //for definition of pthread_barrier_t, see http://pages.cs.wisc.edu/~travitch/pthreads_primer.html
-#endif //_XOPEN_SOURCE
-#include <pthread.h>
-#include <semaphore.h>
-#include <unistd.h> //for sysconf
-
-///
-/// getNumHardwareThreads()
-///
-///
-/// https://stackoverflow.com/questions/150355/programmatically-find-the-number-of-cores-on-a-machine
-///
-#if __cplusplus >= 201103L
-
-#include <thread>
-
-int btGetNumHardwareThreads()
-{
- return btMax(1u, btMin(BT_MAX_THREAD_COUNT, std::thread::hardware_concurrency()));
-}
-
-#else
-
-int btGetNumHardwareThreads()
-{
- return btMax(1, btMin<int>(BT_MAX_THREAD_COUNT, sysconf(_SC_NPROCESSORS_ONLN)));
-}
-
-#endif
-
-// btThreadSupportPosix helps to initialize/shutdown libspe2, start/stop SPU tasks and communication
-class btThreadSupportPosix : public btThreadSupportInterface
-{
-public:
- struct btThreadStatus
- {
- int m_taskId;
- int m_commandId;
- int m_status;
-
- ThreadFunc m_userThreadFunc;
- void* m_userPtr; //for taskDesc etc
-
- pthread_t thread;
- //each tread will wait until this signal to start its work
- sem_t* startSemaphore;
- btCriticalSection* m_cs;
- // this is a copy of m_mainSemaphore,
- //each tread will signal once it is finished with its work
- sem_t* m_mainSemaphore;
- unsigned long threadUsed;
- };
-
-private:
- typedef unsigned long long UINT64;
-
- btAlignedObjectArray<btThreadStatus> m_activeThreadStatus;
- // m_mainSemaphoresemaphore will signal, if and how many threads are finished with their work
- sem_t* m_mainSemaphore;
- int m_numThreads;
- UINT64 m_startedThreadsMask;
- void startThreads(const ConstructionInfo& threadInfo);
- void stopThreads();
- int waitForResponse();
- btCriticalSection* m_cs;
-public:
- btThreadSupportPosix(const ConstructionInfo& threadConstructionInfo);
- virtual ~btThreadSupportPosix();
-
- virtual int getNumWorkerThreads() const BT_OVERRIDE { return m_numThreads; }
- // TODO: return the number of logical processors sharing the first L3 cache
- virtual int getCacheFriendlyNumThreads() const BT_OVERRIDE { return m_numThreads + 1; }
- // TODO: detect if CPU has hyperthreading enabled
- virtual int getLogicalToPhysicalCoreRatio() const BT_OVERRIDE { return 1; }
-
- virtual void runTask(int threadIndex, void* userData) BT_OVERRIDE;
- virtual void waitForAllTasks() BT_OVERRIDE;
-
- virtual btCriticalSection* createCriticalSection() BT_OVERRIDE;
- virtual void deleteCriticalSection(btCriticalSection* criticalSection) BT_OVERRIDE;
-};
-
-#define checkPThreadFunction(returnValue) \
- if (0 != returnValue) \
- { \
- printf("PThread problem at line %i in file %s: %i %d\n", __LINE__, __FILE__, returnValue, errno); \
- }
-
-// The number of threads should be equal to the number of available cores
-// Todo: each worker should be linked to a single core, using SetThreadIdealProcessor.
-
-btThreadSupportPosix::btThreadSupportPosix(const ConstructionInfo& threadConstructionInfo)
-{
- m_cs = createCriticalSection();
- startThreads(threadConstructionInfo);
-}
-
-// cleanup/shutdown Libspe2
-btThreadSupportPosix::~btThreadSupportPosix()
-{
- stopThreads();
- deleteCriticalSection(m_cs);
- m_cs=0;
-}
-
-#if (defined(__APPLE__))
-#define NAMED_SEMAPHORES
-#endif
-
-static sem_t* createSem(const char* baseName)
-{
- static int semCount = 0;
-#ifdef NAMED_SEMAPHORES
- /// Named semaphore begin
- char name[32];
- snprintf(name, 32, "/%8.s-%4.d-%4.4d", baseName, getpid(), semCount++);
- sem_t* tempSem = sem_open(name, O_CREAT, 0600, 0);
-
- if (tempSem != reinterpret_cast<sem_t*>(SEM_FAILED))
- {
- // printf("Created \"%s\" Semaphore %p\n", name, tempSem);
- }
- else
- {
- //printf("Error creating Semaphore %d\n", errno);
- exit(-1);
- }
- /// Named semaphore end
-#else
- sem_t* tempSem = new sem_t;
- checkPThreadFunction(sem_init(tempSem, 0, 0));
-#endif
- return tempSem;
-}
-
-static void destroySem(sem_t* semaphore)
-{
-#ifdef NAMED_SEMAPHORES
- checkPThreadFunction(sem_close(semaphore));
-#else
- checkPThreadFunction(sem_destroy(semaphore));
- delete semaphore;
-#endif
-}
-
-static void* threadFunction(void* argument)
-{
- btThreadSupportPosix::btThreadStatus* status = (btThreadSupportPosix::btThreadStatus*)argument;
-
- while (1)
- {
- checkPThreadFunction(sem_wait(status->startSemaphore));
- void* userPtr = status->m_userPtr;
-
- if (userPtr)
- {
- btAssert(status->m_status);
- status->m_userThreadFunc(userPtr);
- status->m_cs->lock();
- status->m_status = 2;
- status->m_cs->unlock();
- checkPThreadFunction(sem_post(status->m_mainSemaphore));
- status->threadUsed++;
- }
- else
- {
- //exit Thread
- status->m_cs->lock();
- status->m_status = 3;
- status->m_cs->unlock();
- checkPThreadFunction(sem_post(status->m_mainSemaphore));
- break;
- }
- }
-
- return 0;
-}
-
-///send messages to SPUs
-void btThreadSupportPosix::runTask(int threadIndex, void* userData)
-{
- ///we should spawn an SPU task here, and in 'waitForResponse' it should wait for response of the (one of) the first tasks that finished
- btThreadStatus& threadStatus = m_activeThreadStatus[threadIndex];
- btAssert(threadIndex >= 0);
- btAssert(threadIndex < m_activeThreadStatus.size());
- threadStatus.m_cs = m_cs;
- threadStatus.m_commandId = 1;
- threadStatus.m_status = 1;
- threadStatus.m_userPtr = userData;
- m_startedThreadsMask |= UINT64(1) << threadIndex;
-
- // fire event to start new task
- checkPThreadFunction(sem_post(threadStatus.startSemaphore));
-}
-
-///check for messages from SPUs
-int btThreadSupportPosix::waitForResponse()
-{
- ///We should wait for (one of) the first tasks to finish (or other SPU messages), and report its response
- ///A possible response can be 'yes, SPU handled it', or 'no, please do a PPU fallback'
-
- btAssert(m_activeThreadStatus.size());
-
- // wait for any of the threads to finish
- checkPThreadFunction(sem_wait(m_mainSemaphore));
- // get at least one thread which has finished
- size_t last = -1;
-
- for (size_t t = 0; t < size_t(m_activeThreadStatus.size()); ++t)
- {
- m_cs->lock();
- bool hasFinished = (2 == m_activeThreadStatus[t].m_status);
- m_cs->unlock();
- if (hasFinished)
- {
- last = t;
- break;
- }
- }
-
- btThreadStatus& threadStatus = m_activeThreadStatus[last];
-
- btAssert(threadStatus.m_status > 1);
- threadStatus.m_status = 0;
-
- // need to find an active spu
- btAssert(last >= 0);
- m_startedThreadsMask &= ~(UINT64(1) << last);
-
- return last;
-}
-
-void btThreadSupportPosix::waitForAllTasks()
-{
- while (m_startedThreadsMask)
- {
- waitForResponse();
- }
-}
-
-void btThreadSupportPosix::startThreads(const ConstructionInfo& threadConstructionInfo)
-{
- m_numThreads = btGetNumHardwareThreads() - 1; // main thread exists already
- m_activeThreadStatus.resize(m_numThreads);
- m_startedThreadsMask = 0;
-
- m_mainSemaphore = createSem("main");
- //checkPThreadFunction(sem_wait(mainSemaphore));
-
- for (int i = 0; i < m_numThreads; i++)
- {
- btThreadStatus& threadStatus = m_activeThreadStatus[i];
- threadStatus.startSemaphore = createSem("threadLocal");
- threadStatus.m_userPtr = 0;
- threadStatus.m_cs = m_cs;
- threadStatus.m_taskId = i;
- threadStatus.m_commandId = 0;
- threadStatus.m_status = 0;
- threadStatus.m_mainSemaphore = m_mainSemaphore;
- threadStatus.m_userThreadFunc = threadConstructionInfo.m_userThreadFunc;
- threadStatus.threadUsed = 0;
- checkPThreadFunction(pthread_create(&threadStatus.thread, NULL, &threadFunction, (void*)&threadStatus));
-
- }
-}
-
-///tell the task scheduler we are done with the SPU tasks
-void btThreadSupportPosix::stopThreads()
-{
- for (size_t t = 0; t < size_t(m_activeThreadStatus.size()); ++t)
- {
- btThreadStatus& threadStatus = m_activeThreadStatus[t];
-
- threadStatus.m_userPtr = 0;
- checkPThreadFunction(sem_post(threadStatus.startSemaphore));
- checkPThreadFunction(sem_wait(m_mainSemaphore));
-
- checkPThreadFunction(pthread_join(threadStatus.thread, 0));
- destroySem(threadStatus.startSemaphore);
- }
- destroySem(m_mainSemaphore);
- m_activeThreadStatus.clear();
-}
-
-class btCriticalSectionPosix : public btCriticalSection
-{
- pthread_mutex_t m_mutex;
-
-public:
- btCriticalSectionPosix()
- {
- pthread_mutex_init(&m_mutex, NULL);
- }
- virtual ~btCriticalSectionPosix()
- {
- pthread_mutex_destroy(&m_mutex);
- }
-
- virtual void lock()
- {
- pthread_mutex_lock(&m_mutex);
- }
- virtual void unlock()
- {
- pthread_mutex_unlock(&m_mutex);
- }
-};
-
-btCriticalSection* btThreadSupportPosix::createCriticalSection()
-{
- return new btCriticalSectionPosix();
-}
-
-void btThreadSupportPosix::deleteCriticalSection(btCriticalSection* cs)
-{
- delete cs;
-}
-
-btThreadSupportInterface* btThreadSupportInterface::create(const ConstructionInfo& info)
-{
- return new btThreadSupportPosix(info);
-}
-
-#endif // BT_THREADSAFE && !defined( _WIN32 )
diff --git a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp b/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp
deleted file mode 100644
index 5862264a67..0000000000
--- a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2018 Erwin Coumans http://bulletphysics.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#if defined(_WIN32) && BT_THREADSAFE
-
-#include "LinearMath/btScalar.h"
-#include "LinearMath/btMinMax.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include "LinearMath/btThreads.h"
-#include "btThreadSupportInterface.h"
-#include <windows.h>
-#include <stdio.h>
-
-struct btProcessorInfo
-{
- int numLogicalProcessors;
- int numCores;
- int numNumaNodes;
- int numL1Cache;
- int numL2Cache;
- int numL3Cache;
- int numPhysicalPackages;
- static const int maxNumTeamMasks = 32;
- int numTeamMasks;
- UINT64 processorTeamMasks[maxNumTeamMasks];
-};
-
-UINT64 getProcessorTeamMask(const btProcessorInfo& procInfo, int procId)
-{
- UINT64 procMask = UINT64(1) << procId;
- for (int i = 0; i < procInfo.numTeamMasks; ++i)
- {
- if (procMask & procInfo.processorTeamMasks[i])
- {
- return procInfo.processorTeamMasks[i];
- }
- }
- return 0;
-}
-
-int getProcessorTeamIndex(const btProcessorInfo& procInfo, int procId)
-{
- UINT64 procMask = UINT64(1) << procId;
- for (int i = 0; i < procInfo.numTeamMasks; ++i)
- {
- if (procMask & procInfo.processorTeamMasks[i])
- {
- return i;
- }
- }
- return -1;
-}
-
-int countSetBits(ULONG64 bits)
-{
- int count = 0;
- while (bits)
- {
- if (bits & 1)
- {
- count++;
- }
- bits >>= 1;
- }
- return count;
-}
-
-typedef BOOL(WINAPI* Pfn_GetLogicalProcessorInformation)(PSYSTEM_LOGICAL_PROCESSOR_INFORMATION, PDWORD);
-
-void getProcessorInformation(btProcessorInfo* procInfo)
-{
- memset(procInfo, 0, sizeof(*procInfo));
-#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
- !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
- // Can't dlopen libraries on UWP.
- return;
-#else
- Pfn_GetLogicalProcessorInformation getLogicalProcInfo =
- (Pfn_GetLogicalProcessorInformation)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetLogicalProcessorInformation");
- if (getLogicalProcInfo == NULL)
- {
- // no info
- return;
- }
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION buf = NULL;
- DWORD bufSize = 0;
- while (true)
- {
- if (getLogicalProcInfo(buf, &bufSize))
- {
- break;
- }
- else
- {
- if (GetLastError() == ERROR_INSUFFICIENT_BUFFER)
- {
- if (buf)
- {
- free(buf);
- }
- buf = (PSYSTEM_LOGICAL_PROCESSOR_INFORMATION)malloc(bufSize);
- }
- }
- }
-
- int len = bufSize / sizeof(*buf);
- for (int i = 0; i < len; ++i)
- {
- PSYSTEM_LOGICAL_PROCESSOR_INFORMATION info = buf + i;
- switch (info->Relationship)
- {
- case RelationNumaNode:
- procInfo->numNumaNodes++;
- break;
-
- case RelationProcessorCore:
- procInfo->numCores++;
- procInfo->numLogicalProcessors += countSetBits(info->ProcessorMask);
- break;
-
- case RelationCache:
- if (info->Cache.Level == 1)
- {
- procInfo->numL1Cache++;
- }
- else if (info->Cache.Level == 2)
- {
- procInfo->numL2Cache++;
- }
- else if (info->Cache.Level == 3)
- {
- procInfo->numL3Cache++;
- // processors that share L3 cache are considered to be on the same team
- // because they can more easily work together on the same data.
- // Large performance penalties will occur if 2 or more threads from different
- // teams attempt to frequently read and modify the same cache lines.
- //
- // On the AMD Ryzen 7 CPU for example, the 8 cores on the CPU are split into
- // 2 CCX units of 4 cores each. Each CCX has a separate L3 cache, so if both
- // CCXs are operating on the same data, many cycles will be spent keeping the
- // two caches coherent.
- if (procInfo->numTeamMasks < btProcessorInfo::maxNumTeamMasks)
- {
- procInfo->processorTeamMasks[procInfo->numTeamMasks] = info->ProcessorMask;
- procInfo->numTeamMasks++;
- }
- }
- break;
-
- case RelationProcessorPackage:
- procInfo->numPhysicalPackages++;
- break;
- }
- }
- free(buf);
-#endif
-}
-
-///btThreadSupportWin32 helps to initialize/shutdown libspe2, start/stop SPU tasks and communication
-class btThreadSupportWin32 : public btThreadSupportInterface
-{
-public:
- struct btThreadStatus
- {
- int m_taskId;
- int m_commandId;
- int m_status;
-
- ThreadFunc m_userThreadFunc;
- void* m_userPtr; //for taskDesc etc
-
- void* m_threadHandle; //this one is calling 'Win32ThreadFunc'
-
- void* m_eventStartHandle;
- char m_eventStartHandleName[32];
-
- void* m_eventCompleteHandle;
- char m_eventCompleteHandleName[32];
- };
-
-private:
- btAlignedObjectArray<btThreadStatus> m_activeThreadStatus;
- btAlignedObjectArray<void*> m_completeHandles;
- int m_numThreads;
- DWORD_PTR m_startedThreadMask;
- btProcessorInfo m_processorInfo;
-
- void startThreads(const ConstructionInfo& threadInfo);
- void stopThreads();
- int waitForResponse();
-
-public:
- btThreadSupportWin32(const ConstructionInfo& threadConstructionInfo);
- virtual ~btThreadSupportWin32();
-
- virtual int getNumWorkerThreads() const BT_OVERRIDE { return m_numThreads; }
- virtual int getCacheFriendlyNumThreads() const BT_OVERRIDE { return countSetBits(m_processorInfo.processorTeamMasks[0]); }
- virtual int getLogicalToPhysicalCoreRatio() const BT_OVERRIDE { return m_processorInfo.numLogicalProcessors / m_processorInfo.numCores; }
-
- virtual void runTask(int threadIndex, void* userData) BT_OVERRIDE;
- virtual void waitForAllTasks() BT_OVERRIDE;
-
- virtual btCriticalSection* createCriticalSection() BT_OVERRIDE;
- virtual void deleteCriticalSection(btCriticalSection* criticalSection) BT_OVERRIDE;
-};
-
-btThreadSupportWin32::btThreadSupportWin32(const ConstructionInfo& threadConstructionInfo)
-{
- startThreads(threadConstructionInfo);
-}
-
-btThreadSupportWin32::~btThreadSupportWin32()
-{
- stopThreads();
-}
-
-DWORD WINAPI win32threadStartFunc(LPVOID lpParam)
-{
- btThreadSupportWin32::btThreadStatus* status = (btThreadSupportWin32::btThreadStatus*)lpParam;
-
- while (1)
- {
- WaitForSingleObject(status->m_eventStartHandle, INFINITE);
- void* userPtr = status->m_userPtr;
-
- if (userPtr)
- {
- btAssert(status->m_status);
- status->m_userThreadFunc(userPtr);
- status->m_status = 2;
- SetEvent(status->m_eventCompleteHandle);
- }
- else
- {
- //exit Thread
- status->m_status = 3;
- printf("Thread with taskId %i with handle %p exiting\n", status->m_taskId, status->m_threadHandle);
- SetEvent(status->m_eventCompleteHandle);
- break;
- }
- }
- printf("Thread TERMINATED\n");
- return 0;
-}
-
-void btThreadSupportWin32::runTask(int threadIndex, void* userData)
-{
- btThreadStatus& threadStatus = m_activeThreadStatus[threadIndex];
- btAssert(threadIndex >= 0);
- btAssert(int(threadIndex) < m_activeThreadStatus.size());
-
- threadStatus.m_commandId = 1;
- threadStatus.m_status = 1;
- threadStatus.m_userPtr = userData;
- m_startedThreadMask |= DWORD_PTR(1) << threadIndex;
-
- ///fire event to start new task
- SetEvent(threadStatus.m_eventStartHandle);
-}
-
-int btThreadSupportWin32::waitForResponse()
-{
- btAssert(m_activeThreadStatus.size());
-
- int last = -1;
- DWORD res = WaitForMultipleObjects(m_completeHandles.size(), &m_completeHandles[0], FALSE, INFINITE);
- btAssert(res != WAIT_FAILED);
- last = res - WAIT_OBJECT_0;
-
- btThreadStatus& threadStatus = m_activeThreadStatus[last];
- btAssert(threadStatus.m_threadHandle);
- btAssert(threadStatus.m_eventCompleteHandle);
-
- //WaitForSingleObject(threadStatus.m_eventCompleteHandle, INFINITE);
- btAssert(threadStatus.m_status > 1);
- threadStatus.m_status = 0;
-
- ///need to find an active spu
- btAssert(last >= 0);
- m_startedThreadMask &= ~(DWORD_PTR(1) << last);
-
- return last;
-}
-
-void btThreadSupportWin32::waitForAllTasks()
-{
- while (m_startedThreadMask)
- {
- waitForResponse();
- }
-}
-
-void btThreadSupportWin32::startThreads(const ConstructionInfo& threadConstructionInfo)
-{
- static int uniqueId = 0;
- uniqueId++;
- btProcessorInfo& procInfo = m_processorInfo;
- getProcessorInformation(&procInfo);
- DWORD_PTR dwProcessAffinityMask = 0;
- DWORD_PTR dwSystemAffinityMask = 0;
- if (!GetProcessAffinityMask(GetCurrentProcess(), &dwProcessAffinityMask, &dwSystemAffinityMask))
- {
- dwProcessAffinityMask = 0;
- }
- ///The number of threads should be equal to the number of available cores - 1
- m_numThreads = btMin(procInfo.numLogicalProcessors, int(BT_MAX_THREAD_COUNT)) - 1; // cap to max thread count (-1 because main thread already exists)
-
- m_activeThreadStatus.resize(m_numThreads);
- m_completeHandles.resize(m_numThreads);
- m_startedThreadMask = 0;
-
- // set main thread affinity
- if (DWORD_PTR mask = dwProcessAffinityMask & getProcessorTeamMask(procInfo, 0))
- {
- SetThreadAffinityMask(GetCurrentThread(), mask);
- SetThreadIdealProcessor(GetCurrentThread(), 0);
- }
-
- for (int i = 0; i < m_numThreads; i++)
- {
- printf("starting thread %d\n", i);
-
- btThreadStatus& threadStatus = m_activeThreadStatus[i];
-
- LPSECURITY_ATTRIBUTES lpThreadAttributes = NULL;
- SIZE_T dwStackSize = threadConstructionInfo.m_threadStackSize;
- LPTHREAD_START_ROUTINE lpStartAddress = &win32threadStartFunc;
- LPVOID lpParameter = &threadStatus;
- DWORD dwCreationFlags = 0;
- LPDWORD lpThreadId = 0;
-
- threadStatus.m_userPtr = 0;
-
- sprintf(threadStatus.m_eventStartHandleName, "es%.8s%d%d", threadConstructionInfo.m_uniqueName, uniqueId, i);
- threadStatus.m_eventStartHandle = CreateEventA(0, false, false, threadStatus.m_eventStartHandleName);
-
- sprintf(threadStatus.m_eventCompleteHandleName, "ec%.8s%d%d", threadConstructionInfo.m_uniqueName, uniqueId, i);
- threadStatus.m_eventCompleteHandle = CreateEventA(0, false, false, threadStatus.m_eventCompleteHandleName);
-
- m_completeHandles[i] = threadStatus.m_eventCompleteHandle;
-
- HANDLE handle = CreateThread(lpThreadAttributes, dwStackSize, lpStartAddress, lpParameter, dwCreationFlags, lpThreadId);
- //SetThreadPriority( handle, THREAD_PRIORITY_HIGHEST );
- // highest priority -- can cause erratic performance when numThreads > numCores
- // we don't want worker threads to be higher priority than the main thread or the main thread could get
- // totally shut out and unable to tell the workers to stop
- //SetThreadPriority( handle, THREAD_PRIORITY_BELOW_NORMAL );
-
- {
- int processorId = i + 1; // leave processor 0 for main thread
- DWORD_PTR teamMask = getProcessorTeamMask(procInfo, processorId);
- if (teamMask)
- {
- // bind each thread to only execute on processors of it's assigned team
- // - for single-socket Intel x86 CPUs this has no effect (only a single, shared L3 cache so there is only 1 team)
- // - for multi-socket Intel this will keep threads from migrating from one socket to another
- // - for AMD Ryzen this will keep threads from migrating from one CCX to another
- DWORD_PTR mask = teamMask & dwProcessAffinityMask;
- if (mask)
- {
- SetThreadAffinityMask(handle, mask);
- }
- }
- SetThreadIdealProcessor(handle, processorId);
- }
-
- threadStatus.m_taskId = i;
- threadStatus.m_commandId = 0;
- threadStatus.m_status = 0;
- threadStatus.m_threadHandle = handle;
- threadStatus.m_userThreadFunc = threadConstructionInfo.m_userThreadFunc;
-
- printf("started %s thread %d with threadHandle %p\n", threadConstructionInfo.m_uniqueName, i, handle);
- }
-}
-
-///tell the task scheduler we are done with the SPU tasks
-void btThreadSupportWin32::stopThreads()
-{
- for (int i = 0; i < m_activeThreadStatus.size(); i++)
- {
- btThreadStatus& threadStatus = m_activeThreadStatus[i];
- if (threadStatus.m_status > 0)
- {
- WaitForSingleObject(threadStatus.m_eventCompleteHandle, INFINITE);
- }
-
- threadStatus.m_userPtr = NULL;
- SetEvent(threadStatus.m_eventStartHandle);
- WaitForSingleObject(threadStatus.m_eventCompleteHandle, INFINITE);
-
- CloseHandle(threadStatus.m_eventCompleteHandle);
- CloseHandle(threadStatus.m_eventStartHandle);
- CloseHandle(threadStatus.m_threadHandle);
- }
-
- m_activeThreadStatus.clear();
- m_completeHandles.clear();
-}
-
-class btWin32CriticalSection : public btCriticalSection
-{
-private:
- CRITICAL_SECTION mCriticalSection;
-
-public:
- btWin32CriticalSection()
- {
- InitializeCriticalSection(&mCriticalSection);
- }
-
- ~btWin32CriticalSection()
- {
- DeleteCriticalSection(&mCriticalSection);
- }
-
- void lock()
- {
- EnterCriticalSection(&mCriticalSection);
- }
-
- void unlock()
- {
- LeaveCriticalSection(&mCriticalSection);
- }
-};
-
-btCriticalSection* btThreadSupportWin32::createCriticalSection()
-{
- unsigned char* mem = (unsigned char*)btAlignedAlloc(sizeof(btWin32CriticalSection), 16);
- btWin32CriticalSection* cs = new (mem) btWin32CriticalSection();
- return cs;
-}
-
-void btThreadSupportWin32::deleteCriticalSection(btCriticalSection* criticalSection)
-{
- criticalSection->~btCriticalSection();
- btAlignedFree(criticalSection);
-}
-
-btThreadSupportInterface* btThreadSupportInterface::create(const ConstructionInfo& info)
-{
- return new btThreadSupportWin32(info);
-}
-
-#endif //defined(_WIN32) && BT_THREADSAFE
diff --git a/thirdparty/bullet/LinearMath/btAabbUtil2.h b/thirdparty/bullet/LinearMath/btAabbUtil2.h
deleted file mode 100644
index eea49dd33f..0000000000
--- a/thirdparty/bullet/LinearMath/btAabbUtil2.h
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_AABB_UTIL2
-#define BT_AABB_UTIL2
-
-#include "btTransform.h"
-#include "btVector3.h"
-#include "btMinMax.h"
-
-SIMD_FORCE_INLINE void AabbExpand(btVector3& aabbMin,
- btVector3& aabbMax,
- const btVector3& expansionMin,
- const btVector3& expansionMax)
-{
- aabbMin = aabbMin + expansionMin;
- aabbMax = aabbMax + expansionMax;
-}
-
-/// conservative test for overlap between two aabbs
-SIMD_FORCE_INLINE bool TestPointAgainstAabb2(const btVector3& aabbMin1, const btVector3& aabbMax1,
- const btVector3& point)
-{
- bool overlap = true;
- overlap = (aabbMin1.getX() > point.getX() || aabbMax1.getX() < point.getX()) ? false : overlap;
- overlap = (aabbMin1.getZ() > point.getZ() || aabbMax1.getZ() < point.getZ()) ? false : overlap;
- overlap = (aabbMin1.getY() > point.getY() || aabbMax1.getY() < point.getY()) ? false : overlap;
- return overlap;
-}
-
-/// conservative test for overlap between two aabbs
-SIMD_FORCE_INLINE bool TestAabbAgainstAabb2(const btVector3& aabbMin1, const btVector3& aabbMax1,
- const btVector3& aabbMin2, const btVector3& aabbMax2)
-{
- bool overlap = true;
- overlap = (aabbMin1.getX() > aabbMax2.getX() || aabbMax1.getX() < aabbMin2.getX()) ? false : overlap;
- overlap = (aabbMin1.getZ() > aabbMax2.getZ() || aabbMax1.getZ() < aabbMin2.getZ()) ? false : overlap;
- overlap = (aabbMin1.getY() > aabbMax2.getY() || aabbMax1.getY() < aabbMin2.getY()) ? false : overlap;
- return overlap;
-}
-
-/// conservative test for overlap between triangle and aabb
-SIMD_FORCE_INLINE bool TestTriangleAgainstAabb2(const btVector3* vertices,
- const btVector3& aabbMin, const btVector3& aabbMax)
-{
- const btVector3& p1 = vertices[0];
- const btVector3& p2 = vertices[1];
- const btVector3& p3 = vertices[2];
-
- if (btMin(btMin(p1[0], p2[0]), p3[0]) > aabbMax[0]) return false;
- if (btMax(btMax(p1[0], p2[0]), p3[0]) < aabbMin[0]) return false;
-
- if (btMin(btMin(p1[2], p2[2]), p3[2]) > aabbMax[2]) return false;
- if (btMax(btMax(p1[2], p2[2]), p3[2]) < aabbMin[2]) return false;
-
- if (btMin(btMin(p1[1], p2[1]), p3[1]) > aabbMax[1]) return false;
- if (btMax(btMax(p1[1], p2[1]), p3[1]) < aabbMin[1]) return false;
- return true;
-}
-
-SIMD_FORCE_INLINE int btOutcode(const btVector3& p, const btVector3& halfExtent)
-{
- return (p.getX() < -halfExtent.getX() ? 0x01 : 0x0) |
- (p.getX() > halfExtent.getX() ? 0x08 : 0x0) |
- (p.getY() < -halfExtent.getY() ? 0x02 : 0x0) |
- (p.getY() > halfExtent.getY() ? 0x10 : 0x0) |
- (p.getZ() < -halfExtent.getZ() ? 0x4 : 0x0) |
- (p.getZ() > halfExtent.getZ() ? 0x20 : 0x0);
-}
-
-SIMD_FORCE_INLINE bool btRayAabb2(const btVector3& rayFrom,
- const btVector3& rayInvDirection,
- const unsigned int raySign[3],
- const btVector3 bounds[2],
- btScalar& tmin,
- btScalar lambda_min,
- btScalar lambda_max)
-{
- btScalar tmax, tymin, tymax, tzmin, tzmax;
- tmin = (bounds[raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX();
- tmax = (bounds[1 - raySign[0]].getX() - rayFrom.getX()) * rayInvDirection.getX();
- tymin = (bounds[raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY();
- tymax = (bounds[1 - raySign[1]].getY() - rayFrom.getY()) * rayInvDirection.getY();
-
- if ((tmin > tymax) || (tymin > tmax))
- return false;
-
- if (tymin > tmin)
- tmin = tymin;
-
- if (tymax < tmax)
- tmax = tymax;
-
- tzmin = (bounds[raySign[2]].getZ() - rayFrom.getZ()) * rayInvDirection.getZ();
- tzmax = (bounds[1 - raySign[2]].getZ() - rayFrom.getZ()) * rayInvDirection.getZ();
-
- if ((tmin > tzmax) || (tzmin > tmax))
- return false;
- if (tzmin > tmin)
- tmin = tzmin;
- if (tzmax < tmax)
- tmax = tzmax;
- return ((tmin < lambda_max) && (tmax > lambda_min));
-}
-
-SIMD_FORCE_INLINE bool btRayAabb(const btVector3& rayFrom,
- const btVector3& rayTo,
- const btVector3& aabbMin,
- const btVector3& aabbMax,
- btScalar& param, btVector3& normal)
-{
- btVector3 aabbHalfExtent = (aabbMax - aabbMin) * btScalar(0.5);
- btVector3 aabbCenter = (aabbMax + aabbMin) * btScalar(0.5);
- btVector3 source = rayFrom - aabbCenter;
- btVector3 target = rayTo - aabbCenter;
- int sourceOutcode = btOutcode(source, aabbHalfExtent);
- int targetOutcode = btOutcode(target, aabbHalfExtent);
- if ((sourceOutcode & targetOutcode) == 0x0)
- {
- btScalar lambda_enter = btScalar(0.0);
- btScalar lambda_exit = param;
- btVector3 r = target - source;
- int i;
- btScalar normSign = 1;
- btVector3 hitNormal(0, 0, 0);
- int bit = 1;
-
- for (int j = 0; j < 2; j++)
- {
- for (i = 0; i != 3; ++i)
- {
- if (sourceOutcode & bit)
- {
- btScalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i];
- if (lambda_enter <= lambda)
- {
- lambda_enter = lambda;
- hitNormal.setValue(0, 0, 0);
- hitNormal[i] = normSign;
- }
- }
- else if (targetOutcode & bit)
- {
- btScalar lambda = (-source[i] - aabbHalfExtent[i] * normSign) / r[i];
- btSetMin(lambda_exit, lambda);
- }
- bit <<= 1;
- }
- normSign = btScalar(-1.);
- }
- if (lambda_enter <= lambda_exit)
- {
- param = lambda_enter;
- normal = hitNormal;
- return true;
- }
- }
- return false;
-}
-
-SIMD_FORCE_INLINE void btTransformAabb(const btVector3& halfExtents, btScalar margin, const btTransform& t, btVector3& aabbMinOut, btVector3& aabbMaxOut)
-{
- btVector3 halfExtentsWithMargin = halfExtents + btVector3(margin, margin, margin);
- btMatrix3x3 abs_b = t.getBasis().absolute();
- btVector3 center = t.getOrigin();
- btVector3 extent = halfExtentsWithMargin.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMinOut = center - extent;
- aabbMaxOut = center + extent;
-}
-
-SIMD_FORCE_INLINE void btTransformAabb(const btVector3& localAabbMin, const btVector3& localAabbMax, btScalar margin, const btTransform& trans, btVector3& aabbMinOut, btVector3& aabbMaxOut)
-{
- btAssert(localAabbMin.getX() <= localAabbMax.getX());
- btAssert(localAabbMin.getY() <= localAabbMax.getY());
- btAssert(localAabbMin.getZ() <= localAabbMax.getZ());
- btVector3 localHalfExtents = btScalar(0.5) * (localAabbMax - localAabbMin);
- localHalfExtents += btVector3(margin, margin, margin);
-
- btVector3 localCenter = btScalar(0.5) * (localAabbMax + localAabbMin);
- btMatrix3x3 abs_b = trans.getBasis().absolute();
- btVector3 center = trans(localCenter);
- btVector3 extent = localHalfExtents.dot3(abs_b[0], abs_b[1], abs_b[2]);
- aabbMinOut = center - extent;
- aabbMaxOut = center + extent;
-}
-
-#define USE_BANCHLESS 1
-#ifdef USE_BANCHLESS
-//This block replaces the block below and uses no branches, and replaces the 8 bit return with a 32 bit return for improved performance (~3x on XBox 360)
-SIMD_FORCE_INLINE unsigned testQuantizedAabbAgainstQuantizedAabb(const unsigned short int* aabbMin1, const unsigned short int* aabbMax1, const unsigned short int* aabbMin2, const unsigned short int* aabbMax2)
-{
- return static_cast<unsigned int>(btSelect((unsigned)((aabbMin1[0] <= aabbMax2[0]) & (aabbMax1[0] >= aabbMin2[0]) & (aabbMin1[2] <= aabbMax2[2]) & (aabbMax1[2] >= aabbMin2[2]) & (aabbMin1[1] <= aabbMax2[1]) & (aabbMax1[1] >= aabbMin2[1])),
- 1, 0));
-}
-#else
-SIMD_FORCE_INLINE bool testQuantizedAabbAgainstQuantizedAabb(const unsigned short int* aabbMin1, const unsigned short int* aabbMax1, const unsigned short int* aabbMin2, const unsigned short int* aabbMax2)
-{
- bool overlap = true;
- overlap = (aabbMin1[0] > aabbMax2[0] || aabbMax1[0] < aabbMin2[0]) ? false : overlap;
- overlap = (aabbMin1[2] > aabbMax2[2] || aabbMax1[2] < aabbMin2[2]) ? false : overlap;
- overlap = (aabbMin1[1] > aabbMax2[1] || aabbMax1[1] < aabbMin2[1]) ? false : overlap;
- return overlap;
-}
-#endif //USE_BANCHLESS
-
-#endif //BT_AABB_UTIL2
diff --git a/thirdparty/bullet/LinearMath/btAlignedAllocator.cpp b/thirdparty/bullet/LinearMath/btAlignedAllocator.cpp
deleted file mode 100644
index be8f8aa6d0..0000000000
--- a/thirdparty/bullet/LinearMath/btAlignedAllocator.cpp
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btAlignedAllocator.h"
-
-#ifdef BT_DEBUG_MEMORY_ALLOCATIONS
-int gNumAlignedAllocs = 0;
-int gNumAlignedFree = 0;
-int gTotalBytesAlignedAllocs = 0; //detect memory leaks
-#endif //BT_DEBUG_MEMORY_ALLOCATIONST_DEBUG_ALLOCATIONS
-
-static void *btAllocDefault(size_t size)
-{
- return malloc(size);
-}
-
-static void btFreeDefault(void *ptr)
-{
- free(ptr);
-}
-
-static btAllocFunc *sAllocFunc = btAllocDefault;
-static btFreeFunc *sFreeFunc = btFreeDefault;
-
-#if defined(BT_HAS_ALIGNED_ALLOCATOR)
-#include <malloc.h>
-static void *btAlignedAllocDefault(size_t size, int alignment)
-{
- return _aligned_malloc(size, (size_t)alignment);
-}
-
-static void btAlignedFreeDefault(void *ptr)
-{
- _aligned_free(ptr);
-}
-#elif defined(__CELLOS_LV2__)
-#include <stdlib.h>
-
-static inline void *btAlignedAllocDefault(size_t size, int alignment)
-{
- return memalign(alignment, size);
-}
-
-static inline void btAlignedFreeDefault(void *ptr)
-{
- free(ptr);
-}
-#else
-
-static inline void *btAlignedAllocDefault(size_t size, int alignment)
-{
- void *ret;
- char *real;
- real = (char *)sAllocFunc(size + sizeof(void *) + (alignment - 1));
- if (real)
- {
- ret = btAlignPointer(real + sizeof(void *), alignment);
- *((void **)(ret)-1) = (void *)(real);
- }
- else
- {
- ret = (void *)(real);
- }
- return (ret);
-}
-
-static inline void btAlignedFreeDefault(void *ptr)
-{
- void *real;
-
- if (ptr)
- {
- real = *((void **)(ptr)-1);
- sFreeFunc(real);
- }
-}
-#endif
-
-static btAlignedAllocFunc *sAlignedAllocFunc = btAlignedAllocDefault;
-static btAlignedFreeFunc *sAlignedFreeFunc = btAlignedFreeDefault;
-
-void btAlignedAllocSetCustomAligned(btAlignedAllocFunc *allocFunc, btAlignedFreeFunc *freeFunc)
-{
- sAlignedAllocFunc = allocFunc ? allocFunc : btAlignedAllocDefault;
- sAlignedFreeFunc = freeFunc ? freeFunc : btAlignedFreeDefault;
-}
-
-void btAlignedAllocSetCustom(btAllocFunc *allocFunc, btFreeFunc *freeFunc)
-{
- sAllocFunc = allocFunc ? allocFunc : btAllocDefault;
- sFreeFunc = freeFunc ? freeFunc : btFreeDefault;
-}
-
-#ifdef BT_DEBUG_MEMORY_ALLOCATIONS
-
-static int allocations_id[10241024];
-static int allocations_bytes[10241024];
-static int mynumallocs = 0;
-#include <stdio.h>
-
-int btDumpMemoryLeaks()
-{
- int totalLeak = 0;
-
- for (int i = 0; i < mynumallocs; i++)
- {
- printf("Error: leaked memory of allocation #%d (%d bytes)\n", allocations_id[i], allocations_bytes[i]);
- totalLeak += allocations_bytes[i];
- }
- if (totalLeak)
- {
- printf("Error: memory leaks: %d allocations were not freed and leaked together %d bytes\n", mynumallocs, totalLeak);
- }
- return totalLeak;
-}
-//this generic allocator provides the total allocated number of bytes
-#include <stdio.h>
-
-struct btDebugPtrMagic
-{
- union {
- void **vptrptr;
- void *vptr;
- int *iptr;
- char *cptr;
- };
-};
-
-void *btAlignedAllocInternal(size_t size, int alignment, int line, const char *filename)
-{
- if (size == 0)
- {
- printf("Whaat? size==0");
- return 0;
- }
- static int allocId = 0;
-
- void *ret;
- char *real;
-
- // to find some particular memory leak, you could do something like this:
- // if (allocId==172)
- // {
- // printf("catch me!\n");
- // }
- // if (size>1024*1024)
- // {
- // printf("big alloc!%d\n", size);
- // }
-
- gTotalBytesAlignedAllocs += size;
- gNumAlignedAllocs++;
-
- int sz4prt = 4 * sizeof(void *);
-
- real = (char *)sAllocFunc(size + sz4prt + (alignment - 1));
- if (real)
- {
- ret = (void *)btAlignPointer(real + sz4prt, alignment);
- btDebugPtrMagic p;
- p.vptr = ret;
- p.cptr -= sizeof(void *);
- *p.vptrptr = (void *)real;
- p.cptr -= sizeof(void *);
- *p.iptr = size;
- p.cptr -= sizeof(void *);
- *p.iptr = allocId;
-
- allocations_id[mynumallocs] = allocId;
- allocations_bytes[mynumallocs] = size;
- mynumallocs++;
- }
- else
- {
- ret = (void *)(real); //??
- }
-
- printf("allocation %d at address %x, from %s,line %d, size %d (total allocated = %d)\n", allocId, real, filename, line, size, gTotalBytesAlignedAllocs);
- allocId++;
-
- int *ptr = (int *)ret;
- *ptr = 12;
- return (ret);
-}
-
-void btAlignedFreeInternal(void *ptr, int line, const char *filename)
-{
- void *real;
-
- if (ptr)
- {
- gNumAlignedFree++;
-
- btDebugPtrMagic p;
- p.vptr = ptr;
- p.cptr -= sizeof(void *);
- real = *p.vptrptr;
- p.cptr -= sizeof(void *);
- int size = *p.iptr;
- p.cptr -= sizeof(void *);
- int allocId = *p.iptr;
-
- bool found = false;
-
- for (int i = 0; i < mynumallocs; i++)
- {
- if (allocations_id[i] == allocId)
- {
- allocations_id[i] = allocations_id[mynumallocs - 1];
- allocations_bytes[i] = allocations_bytes[mynumallocs - 1];
- mynumallocs--;
- found = true;
- break;
- }
- }
-
- gTotalBytesAlignedAllocs -= size;
-
- int diff = gNumAlignedAllocs - gNumAlignedFree;
- printf("free %d at address %x, from %s,line %d, size %d (total remain = %d in %d non-freed allocations)\n", allocId, real, filename, line, size, gTotalBytesAlignedAllocs, diff);
-
- sFreeFunc(real);
- }
- else
- {
- //printf("deleting a NULL ptr, no effect\n");
- }
-}
-
-#else //BT_DEBUG_MEMORY_ALLOCATIONS
-
-void *btAlignedAllocInternal(size_t size, int alignment)
-{
- void *ptr;
- ptr = sAlignedAllocFunc(size, alignment);
- // printf("btAlignedAllocInternal %d, %x\n",size,ptr);
- return ptr;
-}
-
-void btAlignedFreeInternal(void *ptr)
-{
- if (!ptr)
- {
- return;
- }
-
- // printf("btAlignedFreeInternal %x\n",ptr);
- sAlignedFreeFunc(ptr);
-}
-
-#endif //BT_DEBUG_MEMORY_ALLOCATIONS
diff --git a/thirdparty/bullet/LinearMath/btAlignedAllocator.h b/thirdparty/bullet/LinearMath/btAlignedAllocator.h
deleted file mode 100644
index 971f62bfb0..0000000000
--- a/thirdparty/bullet/LinearMath/btAlignedAllocator.h
+++ /dev/null
@@ -1,115 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_ALIGNED_ALLOCATOR
-#define BT_ALIGNED_ALLOCATOR
-
-///we probably replace this with our own aligned memory allocator
-///so we replace _aligned_malloc and _aligned_free with our own
-///that is better portable and more predictable
-
-#include "btScalar.h"
-
-///BT_DEBUG_MEMORY_ALLOCATIONS preprocessor can be set in build system
-///for regression tests to detect memory leaks
-///#define BT_DEBUG_MEMORY_ALLOCATIONS 1
-#ifdef BT_DEBUG_MEMORY_ALLOCATIONS
-
-int btDumpMemoryLeaks();
-
-#define btAlignedAlloc(a, b) \
- btAlignedAllocInternal(a, b, __LINE__, __FILE__)
-
-#define btAlignedFree(ptr) \
- btAlignedFreeInternal(ptr, __LINE__, __FILE__)
-
-void* btAlignedAllocInternal(size_t size, int alignment, int line, const char* filename);
-
-void btAlignedFreeInternal(void* ptr, int line, const char* filename);
-
-#else
-void* btAlignedAllocInternal(size_t size, int alignment);
-void btAlignedFreeInternal(void* ptr);
-
-#define btAlignedAlloc(size, alignment) btAlignedAllocInternal(size, alignment)
-#define btAlignedFree(ptr) btAlignedFreeInternal(ptr)
-
-#endif
-typedef int size_type;
-
-typedef void*(btAlignedAllocFunc)(size_t size, int alignment);
-typedef void(btAlignedFreeFunc)(void* memblock);
-typedef void*(btAllocFunc)(size_t size);
-typedef void(btFreeFunc)(void* memblock);
-
-///The developer can let all Bullet memory allocations go through a custom memory allocator, using btAlignedAllocSetCustom
-void btAlignedAllocSetCustom(btAllocFunc* allocFunc, btFreeFunc* freeFunc);
-///If the developer has already an custom aligned allocator, then btAlignedAllocSetCustomAligned can be used. The default aligned allocator pre-allocates extra memory using the non-aligned allocator, and instruments it.
-void btAlignedAllocSetCustomAligned(btAlignedAllocFunc* allocFunc, btAlignedFreeFunc* freeFunc);
-
-///The btAlignedAllocator is a portable class for aligned memory allocations.
-///Default implementations for unaligned and aligned allocations can be overridden by a custom allocator using btAlignedAllocSetCustom and btAlignedAllocSetCustomAligned.
-template <typename T, unsigned Alignment>
-class btAlignedAllocator
-{
- typedef btAlignedAllocator<T, Alignment> self_type;
-
-public:
- //just going down a list:
- btAlignedAllocator() {}
- /*
- btAlignedAllocator( const self_type & ) {}
- */
-
- template <typename Other>
- btAlignedAllocator(const btAlignedAllocator<Other, Alignment>&)
- {
- }
-
- typedef const T* const_pointer;
- typedef const T& const_reference;
- typedef T* pointer;
- typedef T& reference;
- typedef T value_type;
-
- pointer address(reference ref) const { return &ref; }
- const_pointer address(const_reference ref) const { return &ref; }
- pointer allocate(size_type n, const_pointer* hint = 0)
- {
- (void)hint;
- return reinterpret_cast<pointer>(btAlignedAlloc(sizeof(value_type) * n, Alignment));
- }
- void construct(pointer ptr, const value_type& value) { new (ptr) value_type(value); }
- void deallocate(pointer ptr)
- {
- btAlignedFree(reinterpret_cast<void*>(ptr));
- }
- void destroy(pointer ptr) { ptr->~value_type(); }
-
- template <typename O>
- struct rebind
- {
- typedef btAlignedAllocator<O, Alignment> other;
- };
- template <typename O>
- self_type& operator=(const btAlignedAllocator<O, Alignment>&)
- {
- return *this;
- }
-
- friend bool operator==(const self_type&, const self_type&) { return true; }
-};
-
-#endif //BT_ALIGNED_ALLOCATOR
diff --git a/thirdparty/bullet/LinearMath/btAlignedObjectArray.h b/thirdparty/bullet/LinearMath/btAlignedObjectArray.h
deleted file mode 100644
index b3d5d64b58..0000000000
--- a/thirdparty/bullet/LinearMath/btAlignedObjectArray.h
+++ /dev/null
@@ -1,504 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_OBJECT_ARRAY__
-#define BT_OBJECT_ARRAY__
-
-#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE
-#include "btAlignedAllocator.h"
-
-///If the platform doesn't support placement new, you can disable BT_USE_PLACEMENT_NEW
-///then the btAlignedObjectArray doesn't support objects with virtual methods, and non-trivial constructors/destructors
-///You can enable BT_USE_MEMCPY, then swapping elements in the array will use memcpy instead of operator=
-///see discussion here: http://continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1231 and
-///http://www.continuousphysics.com/Bullet/phpBB2/viewtopic.php?t=1240
-
-#define BT_USE_PLACEMENT_NEW 1
-//#define BT_USE_MEMCPY 1 //disable, because it is cumbersome to find out for each platform where memcpy is defined. It can be in <memory.h> or <string.h> or otherwise...
-#define BT_ALLOW_ARRAY_COPY_OPERATOR // enabling this can accidently perform deep copies of data if you are not careful
-
-#ifdef BT_USE_MEMCPY
-#include <memory.h>
-#include <string.h>
-#endif //BT_USE_MEMCPY
-
-#ifdef BT_USE_PLACEMENT_NEW
-#include <new> //for placement new
-#endif //BT_USE_PLACEMENT_NEW
-
-///The btAlignedObjectArray template class uses a subset of the stl::vector interface for its methods
-///It is developed to replace stl::vector to avoid portability issues, including STL alignment issues to add SIMD/SSE data
-template <typename T>
-//template <class T>
-class btAlignedObjectArray
-{
- btAlignedAllocator<T, 16> m_allocator;
-
- int m_size;
- int m_capacity;
- T* m_data;
- //PCK: added this line
- bool m_ownsMemory;
-
-#ifdef BT_ALLOW_ARRAY_COPY_OPERATOR
-public:
- SIMD_FORCE_INLINE btAlignedObjectArray<T>& operator=(const btAlignedObjectArray<T>& other)
- {
- copyFromArray(other);
- return *this;
- }
-#else //BT_ALLOW_ARRAY_COPY_OPERATOR
-private:
- SIMD_FORCE_INLINE btAlignedObjectArray<T>& operator=(const btAlignedObjectArray<T>& other);
-#endif //BT_ALLOW_ARRAY_COPY_OPERATOR
-
-protected:
- SIMD_FORCE_INLINE int allocSize(int size)
- {
- return (size ? size * 2 : 1);
- }
- SIMD_FORCE_INLINE void copy(int start, int end, T* dest) const
- {
- int i;
- for (i = start; i < end; ++i)
-#ifdef BT_USE_PLACEMENT_NEW
- new (&dest[i]) T(m_data[i]);
-#else
- dest[i] = m_data[i];
-#endif //BT_USE_PLACEMENT_NEW
- }
-
- SIMD_FORCE_INLINE void init()
- {
- //PCK: added this line
- m_ownsMemory = true;
- m_data = 0;
- m_size = 0;
- m_capacity = 0;
- }
- SIMD_FORCE_INLINE void destroy(int first, int last)
- {
- int i;
- for (i = first; i < last; i++)
- {
- m_data[i].~T();
- }
- }
-
- SIMD_FORCE_INLINE void* allocate(int size)
- {
- if (size)
- return m_allocator.allocate(size);
- return 0;
- }
-
- SIMD_FORCE_INLINE void deallocate()
- {
- if (m_data)
- {
- //PCK: enclosed the deallocation in this block
- if (m_ownsMemory)
- {
- m_allocator.deallocate(m_data);
- }
- m_data = 0;
- }
- }
-
-public:
- btAlignedObjectArray()
- {
- init();
- }
-
- ~btAlignedObjectArray()
- {
- clear();
- }
-
- ///Generally it is best to avoid using the copy constructor of an btAlignedObjectArray, and use a (const) reference to the array instead.
- btAlignedObjectArray(const btAlignedObjectArray& otherArray)
- {
- init();
-
- int otherSize = otherArray.size();
- resize(otherSize);
- otherArray.copy(0, otherSize, m_data);
- }
-
- /// return the number of elements in the array
- SIMD_FORCE_INLINE int size() const
- {
- return m_size;
- }
-
- SIMD_FORCE_INLINE const T& at(int n) const
- {
- btAssert(n >= 0);
- btAssert(n < size());
- return m_data[n];
- }
-
- SIMD_FORCE_INLINE T& at(int n)
- {
- btAssert(n >= 0);
- btAssert(n < size());
- return m_data[n];
- }
-
- SIMD_FORCE_INLINE const T& operator[](int n) const
- {
- btAssert(n >= 0);
- btAssert(n < size());
- return m_data[n];
- }
-
- SIMD_FORCE_INLINE T& operator[](int n)
- {
- btAssert(n >= 0);
- btAssert(n < size());
- return m_data[n];
- }
-
- ///clear the array, deallocated memory. Generally it is better to use array.resize(0), to reduce performance overhead of run-time memory (de)allocations.
- SIMD_FORCE_INLINE void clear()
- {
- destroy(0, size());
-
- deallocate();
-
- init();
- }
-
- SIMD_FORCE_INLINE void pop_back()
- {
- btAssert(m_size > 0);
- m_size--;
- m_data[m_size].~T();
- }
-
- ///resize changes the number of elements in the array. If the new size is larger, the new elements will be constructed using the optional second argument.
- ///when the new number of elements is smaller, the destructor will be called, but memory will not be freed, to reduce performance overhead of run-time memory (de)allocations.
- SIMD_FORCE_INLINE void resizeNoInitialize(int newsize)
- {
- if (newsize > size())
- {
- reserve(newsize);
- }
- m_size = newsize;
- }
-
- SIMD_FORCE_INLINE void resize(int newsize, const T& fillData = T())
- {
- const int curSize = size();
-
- if (newsize < curSize)
- {
- for (int i = newsize; i < curSize; i++)
- {
- m_data[i].~T();
- }
- }
- else
- {
- if (newsize > curSize)
- {
- reserve(newsize);
- }
-#ifdef BT_USE_PLACEMENT_NEW
- for (int i = curSize; i < newsize; i++)
- {
- new (&m_data[i]) T(fillData);
- }
-#endif //BT_USE_PLACEMENT_NEW
- }
-
- m_size = newsize;
- }
- SIMD_FORCE_INLINE T& expandNonInitializing()
- {
- const int sz = size();
- if (sz == capacity())
- {
- reserve(allocSize(size()));
- }
- m_size++;
-
- return m_data[sz];
- }
-
- SIMD_FORCE_INLINE T& expand(const T& fillValue = T())
- {
- const int sz = size();
- if (sz == capacity())
- {
- reserve(allocSize(size()));
- }
- m_size++;
-#ifdef BT_USE_PLACEMENT_NEW
- new (&m_data[sz]) T(fillValue); //use the in-place new (not really allocating heap memory)
-#endif
-
- return m_data[sz];
- }
-
- SIMD_FORCE_INLINE void push_back(const T& _Val)
- {
- const int sz = size();
- if (sz == capacity())
- {
- reserve(allocSize(size()));
- }
-
-#ifdef BT_USE_PLACEMENT_NEW
- new (&m_data[m_size]) T(_Val);
-#else
- m_data[size()] = _Val;
-#endif //BT_USE_PLACEMENT_NEW
-
- m_size++;
- }
-
- /// return the pre-allocated (reserved) elements, this is at least as large as the total number of elements,see size() and reserve()
- SIMD_FORCE_INLINE int capacity() const
- {
- return m_capacity;
- }
-
- SIMD_FORCE_INLINE void reserve(int _Count)
- { // determine new minimum length of allocated storage
- if (capacity() < _Count)
- { // not enough room, reallocate
- T* s = (T*)allocate(_Count);
-
- copy(0, size(), s);
-
- destroy(0, size());
-
- deallocate();
-
- //PCK: added this line
- m_ownsMemory = true;
-
- m_data = s;
-
- m_capacity = _Count;
- }
- }
-
- class less
- {
- public:
- bool operator()(const T& a, const T& b) const
- {
- return (a < b);
- }
- };
-
- template <typename L>
- void quickSortInternal(const L& CompareFunc, int lo, int hi)
- {
- // lo is the lower index, hi is the upper index
- // of the region of array a that is to be sorted
- int i = lo, j = hi;
- T x = m_data[(lo + hi) / 2];
-
- // partition
- do
- {
- while (CompareFunc(m_data[i], x))
- i++;
- while (CompareFunc(x, m_data[j]))
- j--;
- if (i <= j)
- {
- swap(i, j);
- i++;
- j--;
- }
- } while (i <= j);
-
- // recursion
- if (lo < j)
- quickSortInternal(CompareFunc, lo, j);
- if (i < hi)
- quickSortInternal(CompareFunc, i, hi);
- }
-
- template <typename L>
- void quickSort(const L& CompareFunc)
- {
- //don't sort 0 or 1 elements
- if (size() > 1)
- {
- quickSortInternal(CompareFunc, 0, size() - 1);
- }
- }
-
- ///heap sort from http://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Heap/
- template <typename L>
- void downHeap(T* pArr, int k, int n, const L& CompareFunc)
- {
- /* PRE: a[k+1..N] is a heap */
- /* POST: a[k..N] is a heap */
-
- T temp = pArr[k - 1];
- /* k has child(s) */
- while (k <= n / 2)
- {
- int child = 2 * k;
-
- if ((child < n) && CompareFunc(pArr[child - 1], pArr[child]))
- {
- child++;
- }
- /* pick larger child */
- if (CompareFunc(temp, pArr[child - 1]))
- {
- /* move child up */
- pArr[k - 1] = pArr[child - 1];
- k = child;
- }
- else
- {
- break;
- }
- }
- pArr[k - 1] = temp;
- } /*downHeap*/
-
- void swap(int index0, int index1)
- {
-#ifdef BT_USE_MEMCPY
- char temp[sizeof(T)];
- memcpy(temp, &m_data[index0], sizeof(T));
- memcpy(&m_data[index0], &m_data[index1], sizeof(T));
- memcpy(&m_data[index1], temp, sizeof(T));
-#else
- T temp = m_data[index0];
- m_data[index0] = m_data[index1];
- m_data[index1] = temp;
-#endif //BT_USE_PLACEMENT_NEW
- }
-
- template <typename L>
- void heapSort(const L& CompareFunc)
- {
- /* sort a[0..N-1], N.B. 0 to N-1 */
- int k;
- int n = m_size;
- for (k = n / 2; k > 0; k--)
- {
- downHeap(m_data, k, n, CompareFunc);
- }
-
- /* a[1..N] is now a heap */
- while (n >= 1)
- {
- swap(0, n - 1); /* largest of a[0..n-1] */
-
- n = n - 1;
- /* restore a[1..i-1] heap */
- downHeap(m_data, 1, n, CompareFunc);
- }
- }
-
- ///non-recursive binary search, assumes sorted array
- int findBinarySearch(const T& key) const
- {
- int first = 0;
- int last = size() - 1;
-
- //assume sorted array
- while (first <= last)
- {
- int mid = (first + last) / 2; // compute mid point.
- if (key > m_data[mid])
- first = mid + 1; // repeat search in top half.
- else if (key < m_data[mid])
- last = mid - 1; // repeat search in bottom half.
- else
- return mid; // found it. return position /////
- }
- return size(); // failed to find key
- }
-
- int findLinearSearch(const T& key) const
- {
- int index = size();
- int i;
-
- for (i = 0; i < size(); i++)
- {
- if (m_data[i] == key)
- {
- index = i;
- break;
- }
- }
- return index;
- }
-
- // If the key is not in the array, return -1 instead of 0,
- // since 0 also means the first element in the array.
- int findLinearSearch2(const T& key) const
- {
- int index = -1;
- int i;
-
- for (i = 0; i < size(); i++)
- {
- if (m_data[i] == key)
- {
- index = i;
- break;
- }
- }
- return index;
- }
-
- void removeAtIndex(int index)
- {
- if (index < size())
- {
- swap(index, size() - 1);
- pop_back();
- }
- }
- void remove(const T& key)
- {
- int findIndex = findLinearSearch(key);
- removeAtIndex(findIndex);
- }
-
- //PCK: whole function
- void initializeFromBuffer(void* buffer, int size, int capacity)
- {
- clear();
- m_ownsMemory = false;
- m_data = (T*)buffer;
- m_size = size;
- m_capacity = capacity;
- }
-
- void copyFromArray(const btAlignedObjectArray& otherArray)
- {
- int otherSize = otherArray.size();
- resize(otherSize);
- otherArray.copy(0, otherSize, m_data);
- }
-};
-
-#endif //BT_OBJECT_ARRAY__
diff --git a/thirdparty/bullet/LinearMath/btConvexHull.cpp b/thirdparty/bullet/LinearMath/btConvexHull.cpp
deleted file mode 100644
index e7de2a3694..0000000000
--- a/thirdparty/bullet/LinearMath/btConvexHull.cpp
+++ /dev/null
@@ -1,1120 +0,0 @@
-/*
-Stan Melax Convex Hull Computation
-Copyright (c) 2003-2006 Stan Melax http://www.melax.com/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include <string.h>
-
-#include "btConvexHull.h"
-#include "btAlignedObjectArray.h"
-#include "btMinMax.h"
-#include "btVector3.h"
-
-//----------------------------------
-
-class int3
-{
-public:
- int x, y, z;
- int3(){};
- int3(int _x, int _y, int _z)
- {
- x = _x;
- y = _y;
- z = _z;
- }
- const int &operator[](int i) const { return (&x)[i]; }
- int &operator[](int i) { return (&x)[i]; }
-};
-
-//------- btPlane ----------
-
-inline btPlane PlaneFlip(const btPlane &plane) { return btPlane(-plane.normal, -plane.dist); }
-inline int operator==(const btPlane &a, const btPlane &b) { return (a.normal == b.normal && a.dist == b.dist); }
-inline int coplanar(const btPlane &a, const btPlane &b) { return (a == b || a == PlaneFlip(b)); }
-
-//--------- Utility Functions ------
-
-btVector3 PlaneLineIntersection(const btPlane &plane, const btVector3 &p0, const btVector3 &p1);
-btVector3 PlaneProject(const btPlane &plane, const btVector3 &point);
-
-btVector3 ThreePlaneIntersection(const btPlane &p0, const btPlane &p1, const btPlane &p2);
-btVector3 ThreePlaneIntersection(const btPlane &p0, const btPlane &p1, const btPlane &p2)
-{
- btVector3 N1 = p0.normal;
- btVector3 N2 = p1.normal;
- btVector3 N3 = p2.normal;
-
- btVector3 n2n3;
- n2n3 = N2.cross(N3);
- btVector3 n3n1;
- n3n1 = N3.cross(N1);
- btVector3 n1n2;
- n1n2 = N1.cross(N2);
-
- btScalar quotient = (N1.dot(n2n3));
-
- btAssert(btFabs(quotient) > btScalar(0.000001));
-
- quotient = btScalar(-1.) / quotient;
- n2n3 *= p0.dist;
- n3n1 *= p1.dist;
- n1n2 *= p2.dist;
- btVector3 potentialVertex = n2n3;
- potentialVertex += n3n1;
- potentialVertex += n1n2;
- potentialVertex *= quotient;
-
- btVector3 result(potentialVertex.getX(), potentialVertex.getY(), potentialVertex.getZ());
- return result;
-}
-
-btScalar DistanceBetweenLines(const btVector3 &ustart, const btVector3 &udir, const btVector3 &vstart, const btVector3 &vdir, btVector3 *upoint = NULL, btVector3 *vpoint = NULL);
-btVector3 TriNormal(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2);
-btVector3 NormalOf(const btVector3 *vert, const int n);
-
-btVector3 PlaneLineIntersection(const btPlane &plane, const btVector3 &p0, const btVector3 &p1)
-{
- // returns the point where the line p0-p1 intersects the plane n&d
- btVector3 dif;
- dif = p1 - p0;
- btScalar dn = btDot(plane.normal, dif);
- btScalar t = -(plane.dist + btDot(plane.normal, p0)) / dn;
- return p0 + (dif * t);
-}
-
-btVector3 PlaneProject(const btPlane &plane, const btVector3 &point)
-{
- return point - plane.normal * (btDot(point, plane.normal) + plane.dist);
-}
-
-btVector3 TriNormal(const btVector3 &v0, const btVector3 &v1, const btVector3 &v2)
-{
- // return the normal of the triangle
- // inscribed by v0, v1, and v2
- btVector3 cp = btCross(v1 - v0, v2 - v1);
- btScalar m = cp.length();
- if (m == 0) return btVector3(1, 0, 0);
- return cp * (btScalar(1.0) / m);
-}
-
-btScalar DistanceBetweenLines(const btVector3 &ustart, const btVector3 &udir, const btVector3 &vstart, const btVector3 &vdir, btVector3 *upoint, btVector3 *vpoint)
-{
- btVector3 cp;
- cp = btCross(udir, vdir).normalized();
-
- btScalar distu = -btDot(cp, ustart);
- btScalar distv = -btDot(cp, vstart);
- btScalar dist = (btScalar)fabs(distu - distv);
- if (upoint)
- {
- btPlane plane;
- plane.normal = btCross(vdir, cp).normalized();
- plane.dist = -btDot(plane.normal, vstart);
- *upoint = PlaneLineIntersection(plane, ustart, ustart + udir);
- }
- if (vpoint)
- {
- btPlane plane;
- plane.normal = btCross(udir, cp).normalized();
- plane.dist = -btDot(plane.normal, ustart);
- *vpoint = PlaneLineIntersection(plane, vstart, vstart + vdir);
- }
- return dist;
-}
-
-#define COPLANAR (0)
-#define UNDER (1)
-#define OVER (2)
-#define SPLIT (OVER | UNDER)
-#define PAPERWIDTH (btScalar(0.001))
-
-btScalar planetestepsilon = PAPERWIDTH;
-
-typedef ConvexH::HalfEdge HalfEdge;
-
-ConvexH::ConvexH(int vertices_size, int edges_size, int facets_size)
-{
- vertices.resize(vertices_size);
- edges.resize(edges_size);
- facets.resize(facets_size);
-}
-
-int PlaneTest(const btPlane &p, const btVector3 &v);
-int PlaneTest(const btPlane &p, const btVector3 &v)
-{
- btScalar a = btDot(v, p.normal) + p.dist;
- int flag = (a > planetestepsilon) ? OVER : ((a < -planetestepsilon) ? UNDER : COPLANAR);
- return flag;
-}
-
-int SplitTest(ConvexH &convex, const btPlane &plane);
-int SplitTest(ConvexH &convex, const btPlane &plane)
-{
- int flag = 0;
- for (int i = 0; i < convex.vertices.size(); i++)
- {
- flag |= PlaneTest(plane, convex.vertices[i]);
- }
- return flag;
-}
-
-class VertFlag
-{
-public:
- unsigned char planetest;
- unsigned char junk;
- unsigned char undermap;
- unsigned char overmap;
-};
-class EdgeFlag
-{
-public:
- unsigned char planetest;
- unsigned char fixes;
- short undermap;
- short overmap;
-};
-class PlaneFlag
-{
-public:
- unsigned char undermap;
- unsigned char overmap;
-};
-class Coplanar
-{
-public:
- unsigned short ea;
- unsigned char v0;
- unsigned char v1;
-};
-
-template <class T>
-int maxdirfiltered(const T *p, int count, const T &dir, btAlignedObjectArray<int> &allow)
-{
- btAssert(count);
- int m = -1;
- for (int i = 0; i < count; i++)
- if (allow[i])
- {
- if (m == -1 || btDot(p[i], dir) > btDot(p[m], dir))
- m = i;
- }
- btAssert(m != -1);
- return m;
-}
-
-btVector3 orth(const btVector3 &v);
-btVector3 orth(const btVector3 &v)
-{
- btVector3 a = btCross(v, btVector3(0, 0, 1));
- btVector3 b = btCross(v, btVector3(0, 1, 0));
- if (a.length() > b.length())
- {
- return a.normalized();
- }
- else
- {
- return b.normalized();
- }
-}
-
-template <class T>
-int maxdirsterid(const T *p, int count, const T &dir, btAlignedObjectArray<int> &allow)
-{
- int m = -1;
- while (m == -1)
- {
- m = maxdirfiltered(p, count, dir, allow);
- if (allow[m] == 3) return m;
- T u = orth(dir);
- T v = btCross(u, dir);
- int ma = -1;
- for (btScalar x = btScalar(0.0); x <= btScalar(360.0); x += btScalar(45.0))
- {
- btScalar s = btSin(SIMD_RADS_PER_DEG * (x));
- btScalar c = btCos(SIMD_RADS_PER_DEG * (x));
- int mb = maxdirfiltered(p, count, dir + (u * s + v * c) * btScalar(0.025), allow);
- if (ma == m && mb == m)
- {
- allow[m] = 3;
- return m;
- }
- if (ma != -1 && ma != mb) // Yuck - this is really ugly
- {
- int mc = ma;
- for (btScalar xx = x - btScalar(40.0); xx <= x; xx += btScalar(5.0))
- {
- btScalar s = btSin(SIMD_RADS_PER_DEG * (xx));
- btScalar c = btCos(SIMD_RADS_PER_DEG * (xx));
- int md = maxdirfiltered(p, count, dir + (u * s + v * c) * btScalar(0.025), allow);
- if (mc == m && md == m)
- {
- allow[m] = 3;
- return m;
- }
- mc = md;
- }
- }
- ma = mb;
- }
- allow[m] = 0;
- m = -1;
- }
- btAssert(0);
- return m;
-}
-
-int operator==(const int3 &a, const int3 &b);
-int operator==(const int3 &a, const int3 &b)
-{
- for (int i = 0; i < 3; i++)
- {
- if (a[i] != b[i]) return 0;
- }
- return 1;
-}
-
-int above(btVector3 *vertices, const int3 &t, const btVector3 &p, btScalar epsilon);
-int above(btVector3 *vertices, const int3 &t, const btVector3 &p, btScalar epsilon)
-{
- btVector3 n = TriNormal(vertices[t[0]], vertices[t[1]], vertices[t[2]]);
- return (btDot(n, p - vertices[t[0]]) > epsilon); // EPSILON???
-}
-int hasedge(const int3 &t, int a, int b);
-int hasedge(const int3 &t, int a, int b)
-{
- for (int i = 0; i < 3; i++)
- {
- int i1 = (i + 1) % 3;
- if (t[i] == a && t[i1] == b) return 1;
- }
- return 0;
-}
-int hasvert(const int3 &t, int v);
-int hasvert(const int3 &t, int v)
-{
- return (t[0] == v || t[1] == v || t[2] == v);
-}
-int shareedge(const int3 &a, const int3 &b);
-int shareedge(const int3 &a, const int3 &b)
-{
- int i;
- for (i = 0; i < 3; i++)
- {
- int i1 = (i + 1) % 3;
- if (hasedge(a, b[i1], b[i])) return 1;
- }
- return 0;
-}
-
-class btHullTriangle;
-
-class btHullTriangle : public int3
-{
-public:
- int3 n;
- int id;
- int vmax;
- btScalar rise;
- btHullTriangle(int a, int b, int c) : int3(a, b, c), n(-1, -1, -1)
- {
- vmax = -1;
- rise = btScalar(0.0);
- }
- ~btHullTriangle()
- {
- }
- int &neib(int a, int b);
-};
-
-int &btHullTriangle::neib(int a, int b)
-{
- static int er = -1;
- int i;
- for (i = 0; i < 3; i++)
- {
- int i1 = (i + 1) % 3;
- int i2 = (i + 2) % 3;
- if ((*this)[i] == a && (*this)[i1] == b) return n[i2];
- if ((*this)[i] == b && (*this)[i1] == a) return n[i2];
- }
- btAssert(0);
- return er;
-}
-void HullLibrary::b2bfix(btHullTriangle *s, btHullTriangle *t)
-{
- int i;
- for (i = 0; i < 3; i++)
- {
- int i1 = (i + 1) % 3;
- int i2 = (i + 2) % 3;
- int a = (*s)[i1];
- int b = (*s)[i2];
- btAssert(m_tris[s->neib(a, b)]->neib(b, a) == s->id);
- btAssert(m_tris[t->neib(a, b)]->neib(b, a) == t->id);
- m_tris[s->neib(a, b)]->neib(b, a) = t->neib(b, a);
- m_tris[t->neib(b, a)]->neib(a, b) = s->neib(a, b);
- }
-}
-
-void HullLibrary::removeb2b(btHullTriangle *s, btHullTriangle *t)
-{
- b2bfix(s, t);
- deAllocateTriangle(s);
-
- deAllocateTriangle(t);
-}
-
-void HullLibrary::checkit(btHullTriangle *t)
-{
- (void)t;
-
- int i;
- btAssert(m_tris[t->id] == t);
- for (i = 0; i < 3; i++)
- {
- int i1 = (i + 1) % 3;
- int i2 = (i + 2) % 3;
- int a = (*t)[i1];
- int b = (*t)[i2];
-
- // release compile fix
- (void)i1;
- (void)i2;
- (void)a;
- (void)b;
-
- btAssert(a != b);
- btAssert(m_tris[t->n[i]]->neib(b, a) == t->id);
- }
-}
-
-btHullTriangle *HullLibrary::allocateTriangle(int a, int b, int c)
-{
- void *mem = btAlignedAlloc(sizeof(btHullTriangle), 16);
- btHullTriangle *tr = new (mem) btHullTriangle(a, b, c);
- tr->id = m_tris.size();
- m_tris.push_back(tr);
-
- return tr;
-}
-
-void HullLibrary::deAllocateTriangle(btHullTriangle *tri)
-{
- btAssert(m_tris[tri->id] == tri);
- m_tris[tri->id] = NULL;
- tri->~btHullTriangle();
- btAlignedFree(tri);
-}
-
-void HullLibrary::extrude(btHullTriangle *t0, int v)
-{
- int3 t = *t0;
- int n = m_tris.size();
- btHullTriangle *ta = allocateTriangle(v, t[1], t[2]);
- ta->n = int3(t0->n[0], n + 1, n + 2);
- m_tris[t0->n[0]]->neib(t[1], t[2]) = n + 0;
- btHullTriangle *tb = allocateTriangle(v, t[2], t[0]);
- tb->n = int3(t0->n[1], n + 2, n + 0);
- m_tris[t0->n[1]]->neib(t[2], t[0]) = n + 1;
- btHullTriangle *tc = allocateTriangle(v, t[0], t[1]);
- tc->n = int3(t0->n[2], n + 0, n + 1);
- m_tris[t0->n[2]]->neib(t[0], t[1]) = n + 2;
- checkit(ta);
- checkit(tb);
- checkit(tc);
- if (hasvert(*m_tris[ta->n[0]], v)) removeb2b(ta, m_tris[ta->n[0]]);
- if (hasvert(*m_tris[tb->n[0]], v)) removeb2b(tb, m_tris[tb->n[0]]);
- if (hasvert(*m_tris[tc->n[0]], v)) removeb2b(tc, m_tris[tc->n[0]]);
- deAllocateTriangle(t0);
-}
-
-btHullTriangle *HullLibrary::extrudable(btScalar epsilon)
-{
- int i;
- btHullTriangle *t = NULL;
- for (i = 0; i < m_tris.size(); i++)
- {
- if (!t || (m_tris[i] && t->rise < m_tris[i]->rise))
- {
- t = m_tris[i];
- }
- }
- return (t->rise > epsilon) ? t : NULL;
-}
-
-int4 HullLibrary::FindSimplex(btVector3 *verts, int verts_count, btAlignedObjectArray<int> &allow)
-{
- btVector3 basis[3];
- basis[0] = btVector3(btScalar(0.01), btScalar(0.02), btScalar(1.0));
- int p0 = maxdirsterid(verts, verts_count, basis[0], allow);
- int p1 = maxdirsterid(verts, verts_count, -basis[0], allow);
- basis[0] = verts[p0] - verts[p1];
- if (p0 == p1 || basis[0] == btVector3(0, 0, 0))
- return int4(-1, -1, -1, -1);
- basis[1] = btCross(btVector3(btScalar(1), btScalar(0.02), btScalar(0)), basis[0]);
- basis[2] = btCross(btVector3(btScalar(-0.02), btScalar(1), btScalar(0)), basis[0]);
- if (basis[1].length() > basis[2].length())
- {
- basis[1].normalize();
- }
- else
- {
- basis[1] = basis[2];
- basis[1].normalize();
- }
- int p2 = maxdirsterid(verts, verts_count, basis[1], allow);
- if (p2 == p0 || p2 == p1)
- {
- p2 = maxdirsterid(verts, verts_count, -basis[1], allow);
- }
- if (p2 == p0 || p2 == p1)
- return int4(-1, -1, -1, -1);
- basis[1] = verts[p2] - verts[p0];
- basis[2] = btCross(basis[1], basis[0]).normalized();
- int p3 = maxdirsterid(verts, verts_count, basis[2], allow);
- if (p3 == p0 || p3 == p1 || p3 == p2) p3 = maxdirsterid(verts, verts_count, -basis[2], allow);
- if (p3 == p0 || p3 == p1 || p3 == p2)
- return int4(-1, -1, -1, -1);
- btAssert(!(p0 == p1 || p0 == p2 || p0 == p3 || p1 == p2 || p1 == p3 || p2 == p3));
- if (btDot(verts[p3] - verts[p0], btCross(verts[p1] - verts[p0], verts[p2] - verts[p0])) < 0)
- {
- btSwap(p2, p3);
- }
- return int4(p0, p1, p2, p3);
-}
-
-int HullLibrary::calchullgen(btVector3 *verts, int verts_count, int vlimit)
-{
- if (verts_count < 4) return 0;
- if (vlimit == 0) vlimit = 1000000000;
- int j;
- btVector3 bmin(*verts), bmax(*verts);
- btAlignedObjectArray<int> isextreme;
- isextreme.reserve(verts_count);
- btAlignedObjectArray<int> allow;
- allow.reserve(verts_count);
-
- for (j = 0; j < verts_count; j++)
- {
- allow.push_back(1);
- isextreme.push_back(0);
- bmin.setMin(verts[j]);
- bmax.setMax(verts[j]);
- }
- btScalar epsilon = (bmax - bmin).length() * btScalar(0.001);
- btAssert(epsilon != 0.0);
-
- int4 p = FindSimplex(verts, verts_count, allow);
- if (p.x == -1) return 0; // simplex failed
-
- btVector3 center = (verts[p[0]] + verts[p[1]] + verts[p[2]] + verts[p[3]]) / btScalar(4.0); // a valid interior point
- btHullTriangle *t0 = allocateTriangle(p[2], p[3], p[1]);
- t0->n = int3(2, 3, 1);
- btHullTriangle *t1 = allocateTriangle(p[3], p[2], p[0]);
- t1->n = int3(3, 2, 0);
- btHullTriangle *t2 = allocateTriangle(p[0], p[1], p[3]);
- t2->n = int3(0, 1, 3);
- btHullTriangle *t3 = allocateTriangle(p[1], p[0], p[2]);
- t3->n = int3(1, 0, 2);
- isextreme[p[0]] = isextreme[p[1]] = isextreme[p[2]] = isextreme[p[3]] = 1;
- checkit(t0);
- checkit(t1);
- checkit(t2);
- checkit(t3);
-
- for (j = 0; j < m_tris.size(); j++)
- {
- btHullTriangle *t = m_tris[j];
- btAssert(t);
- btAssert(t->vmax < 0);
- btVector3 n = TriNormal(verts[(*t)[0]], verts[(*t)[1]], verts[(*t)[2]]);
- t->vmax = maxdirsterid(verts, verts_count, n, allow);
- t->rise = btDot(n, verts[t->vmax] - verts[(*t)[0]]);
- }
- btHullTriangle *te;
- vlimit -= 4;
- while (vlimit > 0 && ((te = extrudable(epsilon)) != 0))
- {
- //int3 ti=*te;
- int v = te->vmax;
- btAssert(v != -1);
- btAssert(!isextreme[v]); // wtf we've already done this vertex
- isextreme[v] = 1;
- //if(v==p0 || v==p1 || v==p2 || v==p3) continue; // done these already
- j = m_tris.size();
- while (j--)
- {
- if (!m_tris[j]) continue;
- int3 t = *m_tris[j];
- if (above(verts, t, verts[v], btScalar(0.01) * epsilon))
- {
- extrude(m_tris[j], v);
- }
- }
- // now check for those degenerate cases where we have a flipped triangle or a really skinny triangle
- j = m_tris.size();
- while (j--)
- {
- if (!m_tris[j]) continue;
- if (!hasvert(*m_tris[j], v)) break;
- int3 nt = *m_tris[j];
- if (above(verts, nt, center, btScalar(0.01) * epsilon) || btCross(verts[nt[1]] - verts[nt[0]], verts[nt[2]] - verts[nt[1]]).length() < epsilon * epsilon * btScalar(0.1))
- {
- btHullTriangle *nb = m_tris[m_tris[j]->n[0]];
- btAssert(nb);
- btAssert(!hasvert(*nb, v));
- btAssert(nb->id < j);
- extrude(nb, v);
- j = m_tris.size();
- }
- }
- j = m_tris.size();
- while (j--)
- {
- btHullTriangle *t = m_tris[j];
- if (!t) continue;
- if (t->vmax >= 0) break;
- btVector3 n = TriNormal(verts[(*t)[0]], verts[(*t)[1]], verts[(*t)[2]]);
- t->vmax = maxdirsterid(verts, verts_count, n, allow);
- if (isextreme[t->vmax])
- {
- t->vmax = -1; // already done that vertex - algorithm needs to be able to terminate.
- }
- else
- {
- t->rise = btDot(n, verts[t->vmax] - verts[(*t)[0]]);
- }
- }
- vlimit--;
- }
- return 1;
-}
-
-int HullLibrary::calchull(btVector3 *verts, int verts_count, TUIntArray &tris_out, int &tris_count, int vlimit)
-{
- int rc = calchullgen(verts, verts_count, vlimit);
- if (!rc) return 0;
- btAlignedObjectArray<int> ts;
- int i;
-
- for (i = 0; i < m_tris.size(); i++)
- {
- if (m_tris[i])
- {
- for (int j = 0; j < 3; j++)
- ts.push_back((*m_tris[i])[j]);
- deAllocateTriangle(m_tris[i]);
- }
- }
- tris_count = ts.size() / 3;
- tris_out.resize(ts.size());
-
- for (i = 0; i < ts.size(); i++)
- {
- tris_out[i] = static_cast<unsigned int>(ts[i]);
- }
- m_tris.resize(0);
-
- return 1;
-}
-
-bool HullLibrary::ComputeHull(unsigned int vcount, const btVector3 *vertices, PHullResult &result, unsigned int vlimit)
-{
- int tris_count;
- int ret = calchull((btVector3 *)vertices, (int)vcount, result.m_Indices, tris_count, static_cast<int>(vlimit));
- if (!ret) return false;
- result.mIndexCount = (unsigned int)(tris_count * 3);
- result.mFaceCount = (unsigned int)tris_count;
- result.mVertices = (btVector3 *)vertices;
- result.mVcount = (unsigned int)vcount;
- return true;
-}
-
-void ReleaseHull(PHullResult &result);
-void ReleaseHull(PHullResult &result)
-{
- if (result.m_Indices.size())
- {
- result.m_Indices.clear();
- }
-
- result.mVcount = 0;
- result.mIndexCount = 0;
- result.mVertices = 0;
-}
-
-//*********************************************************************
-//*********************************************************************
-//******** HullLib header
-//*********************************************************************
-//*********************************************************************
-
-//*********************************************************************
-//*********************************************************************
-//******** HullLib implementation
-//*********************************************************************
-//*********************************************************************
-
-HullError HullLibrary::CreateConvexHull(const HullDesc &desc, // describes the input request
- HullResult &result) // contains the resulst
-{
- HullError ret = QE_FAIL;
-
- PHullResult hr;
-
- unsigned int vcount = desc.mVcount;
- if (vcount < 8) vcount = 8;
-
- btAlignedObjectArray<btVector3> vertexSource;
- vertexSource.resize(static_cast<int>(vcount));
-
- btVector3 scale;
-
- unsigned int ovcount;
-
- bool ok = CleanupVertices(desc.mVcount, desc.mVertices, desc.mVertexStride, ovcount, &vertexSource[0], desc.mNormalEpsilon, scale); // normalize point cloud, remove duplicates!
-
- if (ok)
- {
- // if ( 1 ) // scale vertices back to their original size.
- {
- for (unsigned int i = 0; i < ovcount; i++)
- {
- btVector3 &v = vertexSource[static_cast<int>(i)];
- v[0] *= scale[0];
- v[1] *= scale[1];
- v[2] *= scale[2];
- }
- }
-
- ok = ComputeHull(ovcount, &vertexSource[0], hr, desc.mMaxVertices);
-
- if (ok)
- {
- // re-index triangle mesh so it refers to only used vertices, rebuild a new vertex table.
- btAlignedObjectArray<btVector3> vertexScratch;
- vertexScratch.resize(static_cast<int>(hr.mVcount));
-
- BringOutYourDead(hr.mVertices, hr.mVcount, &vertexScratch[0], ovcount, &hr.m_Indices[0], hr.mIndexCount);
-
- ret = QE_OK;
-
- if (desc.HasHullFlag(QF_TRIANGLES)) // if he wants the results as triangle!
- {
- result.mPolygons = false;
- result.mNumOutputVertices = ovcount;
- result.m_OutputVertices.resize(static_cast<int>(ovcount));
- result.mNumFaces = hr.mFaceCount;
- result.mNumIndices = hr.mIndexCount;
-
- result.m_Indices.resize(static_cast<int>(hr.mIndexCount));
-
- memcpy(&result.m_OutputVertices[0], &vertexScratch[0], sizeof(btVector3) * ovcount);
-
- if (desc.HasHullFlag(QF_REVERSE_ORDER))
- {
- const unsigned int *source = &hr.m_Indices[0];
- unsigned int *dest = &result.m_Indices[0];
-
- for (unsigned int i = 0; i < hr.mFaceCount; i++)
- {
- dest[0] = source[2];
- dest[1] = source[1];
- dest[2] = source[0];
- dest += 3;
- source += 3;
- }
- }
- else
- {
- memcpy(&result.m_Indices[0], &hr.m_Indices[0], sizeof(unsigned int) * hr.mIndexCount);
- }
- }
- else
- {
- result.mPolygons = true;
- result.mNumOutputVertices = ovcount;
- result.m_OutputVertices.resize(static_cast<int>(ovcount));
- result.mNumFaces = hr.mFaceCount;
- result.mNumIndices = hr.mIndexCount + hr.mFaceCount;
- result.m_Indices.resize(static_cast<int>(result.mNumIndices));
- memcpy(&result.m_OutputVertices[0], &vertexScratch[0], sizeof(btVector3) * ovcount);
-
- // if ( 1 )
- {
- const unsigned int *source = &hr.m_Indices[0];
- unsigned int *dest = &result.m_Indices[0];
- for (unsigned int i = 0; i < hr.mFaceCount; i++)
- {
- dest[0] = 3;
- if (desc.HasHullFlag(QF_REVERSE_ORDER))
- {
- dest[1] = source[2];
- dest[2] = source[1];
- dest[3] = source[0];
- }
- else
- {
- dest[1] = source[0];
- dest[2] = source[1];
- dest[3] = source[2];
- }
-
- dest += 4;
- source += 3;
- }
- }
- }
- ReleaseHull(hr);
- }
- }
-
- return ret;
-}
-
-HullError HullLibrary::ReleaseResult(HullResult &result) // release memory allocated for this result, we are done with it.
-{
- if (result.m_OutputVertices.size())
- {
- result.mNumOutputVertices = 0;
- result.m_OutputVertices.clear();
- }
- if (result.m_Indices.size())
- {
- result.mNumIndices = 0;
- result.m_Indices.clear();
- }
- return QE_OK;
-}
-
-static void addPoint(unsigned int &vcount, btVector3 *p, btScalar x, btScalar y, btScalar z)
-{
- // XXX, might be broken
- btVector3 &dest = p[vcount];
- dest[0] = x;
- dest[1] = y;
- dest[2] = z;
- vcount++;
-}
-
-btScalar GetDist(btScalar px, btScalar py, btScalar pz, const btScalar *p2);
-btScalar GetDist(btScalar px, btScalar py, btScalar pz, const btScalar *p2)
-{
- btScalar dx = px - p2[0];
- btScalar dy = py - p2[1];
- btScalar dz = pz - p2[2];
-
- return dx * dx + dy * dy + dz * dz;
-}
-
-bool HullLibrary::CleanupVertices(unsigned int svcount,
- const btVector3 *svertices,
- unsigned int stride,
- unsigned int &vcount, // output number of vertices
- btVector3 *vertices, // location to store the results.
- btScalar normalepsilon,
- btVector3 &scale)
-{
- if (svcount == 0) return false;
-
- m_vertexIndexMapping.resize(0);
-
-#define EPSILON btScalar(0.000001) /* close enough to consider two btScalaring point numbers to be 'the same'. */
-
- vcount = 0;
-
- btScalar recip[3] = {0.f, 0.f, 0.f};
-
- if (scale)
- {
- scale[0] = 1;
- scale[1] = 1;
- scale[2] = 1;
- }
-
- btScalar bmin[3] = {FLT_MAX, FLT_MAX, FLT_MAX};
- btScalar bmax[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
-
- const char *vtx = (const char *)svertices;
-
- // if ( 1 )
- {
- for (unsigned int i = 0; i < svcount; i++)
- {
- const btScalar *p = (const btScalar *)vtx;
-
- vtx += stride;
-
- for (int j = 0; j < 3; j++)
- {
- if (p[j] < bmin[j]) bmin[j] = p[j];
- if (p[j] > bmax[j]) bmax[j] = p[j];
- }
- }
- }
-
- btScalar dx = bmax[0] - bmin[0];
- btScalar dy = bmax[1] - bmin[1];
- btScalar dz = bmax[2] - bmin[2];
-
- btVector3 center;
-
- center[0] = dx * btScalar(0.5) + bmin[0];
- center[1] = dy * btScalar(0.5) + bmin[1];
- center[2] = dz * btScalar(0.5) + bmin[2];
-
- if (dx < EPSILON || dy < EPSILON || dz < EPSILON || svcount < 3)
- {
- btScalar len = FLT_MAX;
-
- if (dx > EPSILON && dx < len) len = dx;
- if (dy > EPSILON && dy < len) len = dy;
- if (dz > EPSILON && dz < len) len = dz;
-
- if (len == FLT_MAX)
- {
- dx = dy = dz = btScalar(0.01); // one centimeter
- }
- else
- {
- if (dx < EPSILON) dx = len * btScalar(0.05); // 1/5th the shortest non-zero edge.
- if (dy < EPSILON) dy = len * btScalar(0.05);
- if (dz < EPSILON) dz = len * btScalar(0.05);
- }
-
- btScalar x1 = center[0] - dx;
- btScalar x2 = center[0] + dx;
-
- btScalar y1 = center[1] - dy;
- btScalar y2 = center[1] + dy;
-
- btScalar z1 = center[2] - dz;
- btScalar z2 = center[2] + dz;
-
- addPoint(vcount, vertices, x1, y1, z1);
- addPoint(vcount, vertices, x2, y1, z1);
- addPoint(vcount, vertices, x2, y2, z1);
- addPoint(vcount, vertices, x1, y2, z1);
- addPoint(vcount, vertices, x1, y1, z2);
- addPoint(vcount, vertices, x2, y1, z2);
- addPoint(vcount, vertices, x2, y2, z2);
- addPoint(vcount, vertices, x1, y2, z2);
-
- return true; // return cube
- }
- else
- {
- if (scale)
- {
- scale[0] = dx;
- scale[1] = dy;
- scale[2] = dz;
-
- recip[0] = 1 / dx;
- recip[1] = 1 / dy;
- recip[2] = 1 / dz;
-
- center[0] *= recip[0];
- center[1] *= recip[1];
- center[2] *= recip[2];
- }
- }
-
- vtx = (const char *)svertices;
-
- for (unsigned int i = 0; i < svcount; i++)
- {
- const btVector3 *p = (const btVector3 *)vtx;
- vtx += stride;
-
- btScalar px = p->getX();
- btScalar py = p->getY();
- btScalar pz = p->getZ();
-
- if (scale)
- {
- px = px * recip[0]; // normalize
- py = py * recip[1]; // normalize
- pz = pz * recip[2]; // normalize
- }
-
- // if ( 1 )
- {
- unsigned int j;
-
- for (j = 0; j < vcount; j++)
- {
- /// XXX might be broken
- btVector3 &v = vertices[j];
-
- btScalar x = v[0];
- btScalar y = v[1];
- btScalar z = v[2];
-
- btScalar dx = btFabs(x - px);
- btScalar dy = btFabs(y - py);
- btScalar dz = btFabs(z - pz);
-
- if (dx < normalepsilon && dy < normalepsilon && dz < normalepsilon)
- {
- // ok, it is close enough to the old one
- // now let us see if it is further from the center of the point cloud than the one we already recorded.
- // in which case we keep this one instead.
-
- btScalar dist1 = GetDist(px, py, pz, center);
- btScalar dist2 = GetDist(v[0], v[1], v[2], center);
-
- if (dist1 > dist2)
- {
- v[0] = px;
- v[1] = py;
- v[2] = pz;
- }
-
- break;
- }
- }
-
- if (j == vcount)
- {
- btVector3 &dest = vertices[vcount];
- dest[0] = px;
- dest[1] = py;
- dest[2] = pz;
- vcount++;
- }
- m_vertexIndexMapping.push_back(j);
- }
- }
-
- // ok..now make sure we didn't prune so many vertices it is now invalid.
- // if ( 1 )
- {
- btScalar bmin[3] = {FLT_MAX, FLT_MAX, FLT_MAX};
- btScalar bmax[3] = {-FLT_MAX, -FLT_MAX, -FLT_MAX};
-
- for (unsigned int i = 0; i < vcount; i++)
- {
- const btVector3 &p = vertices[i];
- for (int j = 0; j < 3; j++)
- {
- if (p[j] < bmin[j]) bmin[j] = p[j];
- if (p[j] > bmax[j]) bmax[j] = p[j];
- }
- }
-
- btScalar dx = bmax[0] - bmin[0];
- btScalar dy = bmax[1] - bmin[1];
- btScalar dz = bmax[2] - bmin[2];
-
- if (dx < EPSILON || dy < EPSILON || dz < EPSILON || vcount < 3)
- {
- btScalar cx = dx * btScalar(0.5) + bmin[0];
- btScalar cy = dy * btScalar(0.5) + bmin[1];
- btScalar cz = dz * btScalar(0.5) + bmin[2];
-
- btScalar len = FLT_MAX;
-
- if (dx >= EPSILON && dx < len) len = dx;
- if (dy >= EPSILON && dy < len) len = dy;
- if (dz >= EPSILON && dz < len) len = dz;
-
- if (len == FLT_MAX)
- {
- dx = dy = dz = btScalar(0.01); // one centimeter
- }
- else
- {
- if (dx < EPSILON) dx = len * btScalar(0.05); // 1/5th the shortest non-zero edge.
- if (dy < EPSILON) dy = len * btScalar(0.05);
- if (dz < EPSILON) dz = len * btScalar(0.05);
- }
-
- btScalar x1 = cx - dx;
- btScalar x2 = cx + dx;
-
- btScalar y1 = cy - dy;
- btScalar y2 = cy + dy;
-
- btScalar z1 = cz - dz;
- btScalar z2 = cz + dz;
-
- vcount = 0; // add box
-
- addPoint(vcount, vertices, x1, y1, z1);
- addPoint(vcount, vertices, x2, y1, z1);
- addPoint(vcount, vertices, x2, y2, z1);
- addPoint(vcount, vertices, x1, y2, z1);
- addPoint(vcount, vertices, x1, y1, z2);
- addPoint(vcount, vertices, x2, y1, z2);
- addPoint(vcount, vertices, x2, y2, z2);
- addPoint(vcount, vertices, x1, y2, z2);
-
- return true;
- }
- }
-
- return true;
-}
-
-void HullLibrary::BringOutYourDead(const btVector3 *verts, unsigned int vcount, btVector3 *overts, unsigned int &ocount, unsigned int *indices, unsigned indexcount)
-{
- btAlignedObjectArray<int> tmpIndices;
- tmpIndices.resize(m_vertexIndexMapping.size());
- int i;
-
- for (i = 0; i < m_vertexIndexMapping.size(); i++)
- {
- tmpIndices[i] = m_vertexIndexMapping[i];
- }
-
- TUIntArray usedIndices;
- usedIndices.resize(static_cast<int>(vcount));
- memset(&usedIndices[0], 0, sizeof(unsigned int) * vcount);
-
- ocount = 0;
-
- for (i = 0; i < int(indexcount); i++)
- {
- unsigned int v = indices[i]; // original array index
-
- btAssert(v >= 0 && v < vcount);
-
- if (usedIndices[static_cast<int>(v)]) // if already remapped
- {
- indices[i] = usedIndices[static_cast<int>(v)] - 1; // index to new array
- }
- else
- {
- indices[i] = ocount; // new index mapping
-
- overts[ocount][0] = verts[v][0]; // copy old vert to new vert array
- overts[ocount][1] = verts[v][1];
- overts[ocount][2] = verts[v][2];
-
- for (int k = 0; k < m_vertexIndexMapping.size(); k++)
- {
- if (tmpIndices[k] == int(v))
- m_vertexIndexMapping[k] = ocount;
- }
-
- ocount++; // increment output vert count
-
- btAssert(ocount >= 0 && ocount <= vcount);
-
- usedIndices[static_cast<int>(v)] = ocount; // assign new index remapping
- }
- }
-}
diff --git a/thirdparty/bullet/LinearMath/btConvexHull.h b/thirdparty/bullet/LinearMath/btConvexHull.h
deleted file mode 100644
index f890d75ea1..0000000000
--- a/thirdparty/bullet/LinearMath/btConvexHull.h
+++ /dev/null
@@ -1,233 +0,0 @@
-
-/*
-Stan Melax Convex Hull Computation
-Copyright (c) 2008 Stan Melax http://www.melax.com/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///includes modifications/improvements by John Ratcliff, see BringOutYourDead below.
-
-#ifndef BT_CD_HULL_H
-#define BT_CD_HULL_H
-
-#include "btVector3.h"
-#include "btAlignedObjectArray.h"
-
-typedef btAlignedObjectArray<unsigned int> TUIntArray;
-
-class HullResult
-{
-public:
- HullResult(void)
- {
- mPolygons = true;
- mNumOutputVertices = 0;
- mNumFaces = 0;
- mNumIndices = 0;
- }
- bool mPolygons; // true if indices represents polygons, false indices are triangles
- unsigned int mNumOutputVertices; // number of vertices in the output hull
- btAlignedObjectArray<btVector3> m_OutputVertices; // array of vertices
- unsigned int mNumFaces; // the number of faces produced
- unsigned int mNumIndices; // the total number of indices
- btAlignedObjectArray<unsigned int> m_Indices; // pointer to indices.
-
- // If triangles, then indices are array indexes into the vertex list.
- // If polygons, indices are in the form (number of points in face) (p1, p2, p3, ..) etc..
-};
-
-enum HullFlag
-{
- QF_TRIANGLES = (1 << 0), // report results as triangles, not polygons.
- QF_REVERSE_ORDER = (1 << 1), // reverse order of the triangle indices.
- QF_DEFAULT = QF_TRIANGLES
-};
-
-class HullDesc
-{
-public:
- HullDesc(void)
- {
- mFlags = QF_DEFAULT;
- mVcount = 0;
- mVertices = 0;
- mVertexStride = sizeof(btVector3);
- mNormalEpsilon = 0.001f;
- mMaxVertices = 4096; // maximum number of points to be considered for a convex hull.
- mMaxFaces = 4096;
- };
-
- HullDesc(HullFlag flag,
- unsigned int vcount,
- const btVector3* vertices,
- unsigned int stride = sizeof(btVector3))
- {
- mFlags = flag;
- mVcount = vcount;
- mVertices = vertices;
- mVertexStride = stride;
- mNormalEpsilon = btScalar(0.001);
- mMaxVertices = 4096;
- }
-
- bool HasHullFlag(HullFlag flag) const
- {
- if (mFlags & flag) return true;
- return false;
- }
-
- void SetHullFlag(HullFlag flag)
- {
- mFlags |= flag;
- }
-
- void ClearHullFlag(HullFlag flag)
- {
- mFlags &= ~flag;
- }
-
- unsigned int mFlags; // flags to use when generating the convex hull.
- unsigned int mVcount; // number of vertices in the input point cloud
- const btVector3* mVertices; // the array of vertices.
- unsigned int mVertexStride; // the stride of each vertex, in bytes.
- btScalar mNormalEpsilon; // the epsilon for removing duplicates. This is a normalized value, if normalized bit is on.
- unsigned int mMaxVertices; // maximum number of vertices to be considered for the hull!
- unsigned int mMaxFaces;
-};
-
-enum HullError
-{
- QE_OK, // success!
- QE_FAIL // failed.
-};
-
-class btPlane
-{
-public:
- btVector3 normal;
- btScalar dist; // distance below origin - the D from plane equasion Ax+By+Cz+D=0
- btPlane(const btVector3& n, btScalar d) : normal(n), dist(d) {}
- btPlane() : normal(), dist(0) {}
-};
-
-class ConvexH
-{
-public:
- class HalfEdge
- {
- public:
- short ea; // the other half of the edge (index into edges list)
- unsigned char v; // the vertex at the start of this edge (index into vertices list)
- unsigned char p; // the facet on which this edge lies (index into facets list)
- HalfEdge() {}
- HalfEdge(short _ea, unsigned char _v, unsigned char _p) : ea(_ea), v(_v), p(_p) {}
- };
- ConvexH()
- {
- }
- ~ConvexH()
- {
- }
- btAlignedObjectArray<btVector3> vertices;
- btAlignedObjectArray<HalfEdge> edges;
- btAlignedObjectArray<btPlane> facets;
- ConvexH(int vertices_size, int edges_size, int facets_size);
-};
-
-class int4
-{
-public:
- int x, y, z, w;
- int4(){};
- int4(int _x, int _y, int _z, int _w)
- {
- x = _x;
- y = _y;
- z = _z;
- w = _w;
- }
- const int& operator[](int i) const { return (&x)[i]; }
- int& operator[](int i) { return (&x)[i]; }
-};
-
-class PHullResult
-{
-public:
- PHullResult(void)
- {
- mVcount = 0;
- mIndexCount = 0;
- mFaceCount = 0;
- mVertices = 0;
- }
-
- unsigned int mVcount;
- unsigned int mIndexCount;
- unsigned int mFaceCount;
- btVector3* mVertices;
- TUIntArray m_Indices;
-};
-
-///The HullLibrary class can create a convex hull from a collection of vertices, using the ComputeHull method.
-///The btShapeHull class uses this HullLibrary to create a approximate convex mesh given a general (non-polyhedral) convex shape.
-class HullLibrary
-{
- btAlignedObjectArray<class btHullTriangle*> m_tris;
-
-public:
- btAlignedObjectArray<int> m_vertexIndexMapping;
-
- HullError CreateConvexHull(const HullDesc& desc, // describes the input request
- HullResult& result); // contains the resulst
- HullError ReleaseResult(HullResult& result); // release memory allocated for this result, we are done with it.
-
-private:
- bool ComputeHull(unsigned int vcount, const btVector3* vertices, PHullResult& result, unsigned int vlimit);
-
- class btHullTriangle* allocateTriangle(int a, int b, int c);
- void deAllocateTriangle(btHullTriangle*);
- void b2bfix(btHullTriangle* s, btHullTriangle* t);
-
- void removeb2b(btHullTriangle* s, btHullTriangle* t);
-
- void checkit(btHullTriangle* t);
-
- btHullTriangle* extrudable(btScalar epsilon);
-
- int calchull(btVector3* verts, int verts_count, TUIntArray& tris_out, int& tris_count, int vlimit);
-
- int calchullgen(btVector3* verts, int verts_count, int vlimit);
-
- int4 FindSimplex(btVector3* verts, int verts_count, btAlignedObjectArray<int>& allow);
-
- class ConvexH* ConvexHCrop(ConvexH& convex, const btPlane& slice);
-
- void extrude(class btHullTriangle* t0, int v);
-
- ConvexH* test_cube();
-
- //BringOutYourDead (John Ratcliff): When you create a convex hull you hand it a large input set of vertices forming a 'point cloud'.
- //After the hull is generated it give you back a set of polygon faces which index the *original* point cloud.
- //The thing is, often times, there are many 'dead vertices' in the point cloud that are on longer referenced by the hull.
- //The routine 'BringOutYourDead' find only the referenced vertices, copies them to an new buffer, and re-indexes the hull so that it is a minimal representation.
- void BringOutYourDead(const btVector3* verts, unsigned int vcount, btVector3* overts, unsigned int& ocount, unsigned int* indices, unsigned indexcount);
-
- bool CleanupVertices(unsigned int svcount,
- const btVector3* svertices,
- unsigned int stride,
- unsigned int& vcount, // output number of vertices
- btVector3* vertices, // location to store the results.
- btScalar normalepsilon,
- btVector3& scale);
-};
-
-#endif //BT_CD_HULL_H
diff --git a/thirdparty/bullet/LinearMath/btConvexHullComputer.cpp b/thirdparty/bullet/LinearMath/btConvexHullComputer.cpp
deleted file mode 100644
index 12125fd2de..0000000000
--- a/thirdparty/bullet/LinearMath/btConvexHullComputer.cpp
+++ /dev/null
@@ -1,2760 +0,0 @@
-/*
-Copyright (c) 2011 Ole Kniemeyer, MAXON, www.maxon.net
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include <string.h>
-
-#include "btConvexHullComputer.h"
-#include "btAlignedObjectArray.h"
-#include "btMinMax.h"
-#include "btVector3.h"
-
-#ifdef __GNUC__
-#include <stdint.h>
-#elif defined(_MSC_VER)
-typedef __int32 int32_t;
-typedef __int64 int64_t;
-typedef unsigned __int32 uint32_t;
-typedef unsigned __int64 uint64_t;
-#else
-typedef int int32_t;
-typedef long long int int64_t;
-typedef unsigned int uint32_t;
-typedef unsigned long long int uint64_t;
-#endif
-
-//The definition of USE_X86_64_ASM is moved into the build system. You can enable it manually by commenting out the following lines
-//#if (defined(__GNUC__) && defined(__x86_64__) && !defined(__ICL)) // || (defined(__ICL) && defined(_M_X64)) bug in Intel compiler, disable inline assembly
-// #define USE_X86_64_ASM
-//#endif
-
-//#define DEBUG_CONVEX_HULL
-//#define SHOW_ITERATIONS
-
-#if defined(DEBUG_CONVEX_HULL) || defined(SHOW_ITERATIONS)
-#include <stdio.h>
-#endif
-
-// Convex hull implementation based on Preparata and Hong
-// Ole Kniemeyer, MAXON Computer GmbH
-class btConvexHullInternal
-{
-public:
- class Point64
- {
- public:
- int64_t x;
- int64_t y;
- int64_t z;
-
- Point64(int64_t x, int64_t y, int64_t z) : x(x), y(y), z(z)
- {
- }
-
- bool isZero()
- {
- return (x == 0) && (y == 0) && (z == 0);
- }
-
- int64_t dot(const Point64& b) const
- {
- return x * b.x + y * b.y + z * b.z;
- }
- };
-
- class Point32
- {
- public:
- int32_t x;
- int32_t y;
- int32_t z;
- int index;
-
- Point32()
- {
- }
-
- Point32(int32_t x, int32_t y, int32_t z) : x(x), y(y), z(z), index(-1)
- {
- }
-
- bool operator==(const Point32& b) const
- {
- return (x == b.x) && (y == b.y) && (z == b.z);
- }
-
- bool operator!=(const Point32& b) const
- {
- return (x != b.x) || (y != b.y) || (z != b.z);
- }
-
- bool isZero()
- {
- return (x == 0) && (y == 0) && (z == 0);
- }
-
- Point64 cross(const Point32& b) const
- {
- return Point64(((int64_t)y) * b.z - ((int64_t)z) * b.y, ((int64_t)z) * b.x - ((int64_t)x) * b.z, ((int64_t)x) * b.y - ((int64_t)y) * b.x);
- }
-
- Point64 cross(const Point64& b) const
- {
- return Point64(y * b.z - z * b.y, z * b.x - x * b.z, x * b.y - y * b.x);
- }
-
- int64_t dot(const Point32& b) const
- {
- return ((int64_t)x) * b.x + ((int64_t)y) * b.y + ((int64_t)z) * b.z;
- }
-
- int64_t dot(const Point64& b) const
- {
- return x * b.x + y * b.y + z * b.z;
- }
-
- Point32 operator+(const Point32& b) const
- {
- return Point32(x + b.x, y + b.y, z + b.z);
- }
-
- Point32 operator-(const Point32& b) const
- {
- return Point32(x - b.x, y - b.y, z - b.z);
- }
- };
-
- class Int128
- {
- public:
- uint64_t low;
- uint64_t high;
-
- Int128()
- {
- }
-
- Int128(uint64_t low, uint64_t high) : low(low), high(high)
- {
- }
-
- Int128(uint64_t low) : low(low), high(0)
- {
- }
-
- Int128(int64_t value) : low(value), high((value >= 0) ? 0 : (uint64_t)-1LL)
- {
- }
-
- static Int128 mul(int64_t a, int64_t b);
-
- static Int128 mul(uint64_t a, uint64_t b);
-
- Int128 operator-() const
- {
- return Int128((uint64_t) - (int64_t)low, ~high + (low == 0));
- }
-
- Int128 operator+(const Int128& b) const
- {
-#ifdef USE_X86_64_ASM
- Int128 result;
- __asm__(
- "addq %[bl], %[rl]\n\t"
- "adcq %[bh], %[rh]\n\t"
- : [rl] "=r"(result.low), [rh] "=r"(result.high)
- : "0"(low), "1"(high), [bl] "g"(b.low), [bh] "g"(b.high)
- : "cc");
- return result;
-#else
- uint64_t lo = low + b.low;
- return Int128(lo, high + b.high + (lo < low));
-#endif
- }
-
- Int128 operator-(const Int128& b) const
- {
-#ifdef USE_X86_64_ASM
- Int128 result;
- __asm__(
- "subq %[bl], %[rl]\n\t"
- "sbbq %[bh], %[rh]\n\t"
- : [rl] "=r"(result.low), [rh] "=r"(result.high)
- : "0"(low), "1"(high), [bl] "g"(b.low), [bh] "g"(b.high)
- : "cc");
- return result;
-#else
- return *this + -b;
-#endif
- }
-
- Int128& operator+=(const Int128& b)
- {
-#ifdef USE_X86_64_ASM
- __asm__(
- "addq %[bl], %[rl]\n\t"
- "adcq %[bh], %[rh]\n\t"
- : [rl] "=r"(low), [rh] "=r"(high)
- : "0"(low), "1"(high), [bl] "g"(b.low), [bh] "g"(b.high)
- : "cc");
-#else
- uint64_t lo = low + b.low;
- if (lo < low)
- {
- ++high;
- }
- low = lo;
- high += b.high;
-#endif
- return *this;
- }
-
- Int128& operator++()
- {
- if (++low == 0)
- {
- ++high;
- }
- return *this;
- }
-
- Int128 operator*(int64_t b) const;
-
- btScalar toScalar() const
- {
- return ((int64_t)high >= 0) ? btScalar(high) * (btScalar(0x100000000LL) * btScalar(0x100000000LL)) + btScalar(low)
- : -(-*this).toScalar();
- }
-
- int getSign() const
- {
- return ((int64_t)high < 0) ? -1 : (high || low) ? 1 : 0;
- }
-
- bool operator<(const Int128& b) const
- {
- return (high < b.high) || ((high == b.high) && (low < b.low));
- }
-
- int ucmp(const Int128& b) const
- {
- if (high < b.high)
- {
- return -1;
- }
- if (high > b.high)
- {
- return 1;
- }
- if (low < b.low)
- {
- return -1;
- }
- if (low > b.low)
- {
- return 1;
- }
- return 0;
- }
- };
-
- class Rational64
- {
- private:
- uint64_t m_numerator;
- uint64_t m_denominator;
- int sign;
-
- public:
- Rational64(int64_t numerator, int64_t denominator)
- {
- if (numerator > 0)
- {
- sign = 1;
- m_numerator = (uint64_t)numerator;
- }
- else if (numerator < 0)
- {
- sign = -1;
- m_numerator = (uint64_t)-numerator;
- }
- else
- {
- sign = 0;
- m_numerator = 0;
- }
- if (denominator > 0)
- {
- m_denominator = (uint64_t)denominator;
- }
- else if (denominator < 0)
- {
- sign = -sign;
- m_denominator = (uint64_t)-denominator;
- }
- else
- {
- m_denominator = 0;
- }
- }
-
- bool isNegativeInfinity() const
- {
- return (sign < 0) && (m_denominator == 0);
- }
-
- bool isNaN() const
- {
- return (sign == 0) && (m_denominator == 0);
- }
-
- int compare(const Rational64& b) const;
-
- btScalar toScalar() const
- {
- return sign * ((m_denominator == 0) ? SIMD_INFINITY : (btScalar)m_numerator / m_denominator);
- }
- };
-
- class Rational128
- {
- private:
- Int128 numerator;
- Int128 denominator;
- int sign;
- bool isInt64;
-
- public:
- Rational128(int64_t value)
- {
- if (value > 0)
- {
- sign = 1;
- this->numerator = value;
- }
- else if (value < 0)
- {
- sign = -1;
- this->numerator = -value;
- }
- else
- {
- sign = 0;
- this->numerator = (uint64_t)0;
- }
- this->denominator = (uint64_t)1;
- isInt64 = true;
- }
-
- Rational128(const Int128& numerator, const Int128& denominator)
- {
- sign = numerator.getSign();
- if (sign >= 0)
- {
- this->numerator = numerator;
- }
- else
- {
- this->numerator = -numerator;
- }
- int dsign = denominator.getSign();
- if (dsign >= 0)
- {
- this->denominator = denominator;
- }
- else
- {
- sign = -sign;
- this->denominator = -denominator;
- }
- isInt64 = false;
- }
-
- int compare(const Rational128& b) const;
-
- int compare(int64_t b) const;
-
- btScalar toScalar() const
- {
- return sign * ((denominator.getSign() == 0) ? SIMD_INFINITY : numerator.toScalar() / denominator.toScalar());
- }
- };
-
- class PointR128
- {
- public:
- Int128 x;
- Int128 y;
- Int128 z;
- Int128 denominator;
-
- PointR128()
- {
- }
-
- PointR128(Int128 x, Int128 y, Int128 z, Int128 denominator) : x(x), y(y), z(z), denominator(denominator)
- {
- }
-
- btScalar xvalue() const
- {
- return x.toScalar() / denominator.toScalar();
- }
-
- btScalar yvalue() const
- {
- return y.toScalar() / denominator.toScalar();
- }
-
- btScalar zvalue() const
- {
- return z.toScalar() / denominator.toScalar();
- }
- };
-
- class Edge;
- class Face;
-
- class Vertex
- {
- public:
- Vertex* next;
- Vertex* prev;
- Edge* edges;
- Face* firstNearbyFace;
- Face* lastNearbyFace;
- PointR128 point128;
- Point32 point;
- int copy;
-
- Vertex() : next(NULL), prev(NULL), edges(NULL), firstNearbyFace(NULL), lastNearbyFace(NULL), copy(-1)
- {
- }
-
-#ifdef DEBUG_CONVEX_HULL
- void print()
- {
- printf("V%d (%d, %d, %d)", point.index, point.x, point.y, point.z);
- }
-
- void printGraph();
-#endif
-
- Point32 operator-(const Vertex& b) const
- {
- return point - b.point;
- }
-
- Rational128 dot(const Point64& b) const
- {
- return (point.index >= 0) ? Rational128(point.dot(b))
- : Rational128(point128.x * b.x + point128.y * b.y + point128.z * b.z, point128.denominator);
- }
-
- btScalar xvalue() const
- {
- return (point.index >= 0) ? btScalar(point.x) : point128.xvalue();
- }
-
- btScalar yvalue() const
- {
- return (point.index >= 0) ? btScalar(point.y) : point128.yvalue();
- }
-
- btScalar zvalue() const
- {
- return (point.index >= 0) ? btScalar(point.z) : point128.zvalue();
- }
-
- void receiveNearbyFaces(Vertex* src)
- {
- if (lastNearbyFace)
- {
- lastNearbyFace->nextWithSameNearbyVertex = src->firstNearbyFace;
- }
- else
- {
- firstNearbyFace = src->firstNearbyFace;
- }
- if (src->lastNearbyFace)
- {
- lastNearbyFace = src->lastNearbyFace;
- }
- for (Face* f = src->firstNearbyFace; f; f = f->nextWithSameNearbyVertex)
- {
- btAssert(f->nearbyVertex == src);
- f->nearbyVertex = this;
- }
- src->firstNearbyFace = NULL;
- src->lastNearbyFace = NULL;
- }
- };
-
- class Edge
- {
- public:
- Edge* next;
- Edge* prev;
- Edge* reverse;
- Vertex* target;
- Face* face;
- int copy;
-
- ~Edge()
- {
- next = NULL;
- prev = NULL;
- reverse = NULL;
- target = NULL;
- face = NULL;
- }
-
- void link(Edge* n)
- {
- btAssert(reverse->target == n->reverse->target);
- next = n;
- n->prev = this;
- }
-
-#ifdef DEBUG_CONVEX_HULL
- void print()
- {
- printf("E%p : %d -> %d, n=%p p=%p (0 %d\t%d\t%d) -> (%d %d %d)", this, reverse->target->point.index, target->point.index, next, prev,
- reverse->target->point.x, reverse->target->point.y, reverse->target->point.z, target->point.x, target->point.y, target->point.z);
- }
-#endif
- };
-
- class Face
- {
- public:
- Face* next;
- Vertex* nearbyVertex;
- Face* nextWithSameNearbyVertex;
- Point32 origin;
- Point32 dir0;
- Point32 dir1;
-
- Face() : next(NULL), nearbyVertex(NULL), nextWithSameNearbyVertex(NULL)
- {
- }
-
- void init(Vertex* a, Vertex* b, Vertex* c)
- {
- nearbyVertex = a;
- origin = a->point;
- dir0 = *b - *a;
- dir1 = *c - *a;
- if (a->lastNearbyFace)
- {
- a->lastNearbyFace->nextWithSameNearbyVertex = this;
- }
- else
- {
- a->firstNearbyFace = this;
- }
- a->lastNearbyFace = this;
- }
-
- Point64 getNormal()
- {
- return dir0.cross(dir1);
- }
- };
-
- template <typename UWord, typename UHWord>
- class DMul
- {
- private:
- static uint32_t high(uint64_t value)
- {
- return (uint32_t)(value >> 32);
- }
-
- static uint32_t low(uint64_t value)
- {
- return (uint32_t)value;
- }
-
- static uint64_t mul(uint32_t a, uint32_t b)
- {
- return (uint64_t)a * (uint64_t)b;
- }
-
- static void shlHalf(uint64_t& value)
- {
- value <<= 32;
- }
-
- static uint64_t high(Int128 value)
- {
- return value.high;
- }
-
- static uint64_t low(Int128 value)
- {
- return value.low;
- }
-
- static Int128 mul(uint64_t a, uint64_t b)
- {
- return Int128::mul(a, b);
- }
-
- static void shlHalf(Int128& value)
- {
- value.high = value.low;
- value.low = 0;
- }
-
- public:
- static void mul(UWord a, UWord b, UWord& resLow, UWord& resHigh)
- {
- UWord p00 = mul(low(a), low(b));
- UWord p01 = mul(low(a), high(b));
- UWord p10 = mul(high(a), low(b));
- UWord p11 = mul(high(a), high(b));
- UWord p0110 = UWord(low(p01)) + UWord(low(p10));
- p11 += high(p01);
- p11 += high(p10);
- p11 += high(p0110);
- shlHalf(p0110);
- p00 += p0110;
- if (p00 < p0110)
- {
- ++p11;
- }
- resLow = p00;
- resHigh = p11;
- }
- };
-
-private:
- class IntermediateHull
- {
- public:
- Vertex* minXy;
- Vertex* maxXy;
- Vertex* minYx;
- Vertex* maxYx;
-
- IntermediateHull() : minXy(NULL), maxXy(NULL), minYx(NULL), maxYx(NULL)
- {
- }
-
- void print();
- };
-
- enum Orientation
- {
- NONE,
- CLOCKWISE,
- COUNTER_CLOCKWISE
- };
-
- template <typename T>
- class PoolArray
- {
- private:
- T* array;
- int size;
-
- public:
- PoolArray<T>* next;
-
- PoolArray(int size) : size(size), next(NULL)
- {
- array = (T*)btAlignedAlloc(sizeof(T) * size, 16);
- }
-
- ~PoolArray()
- {
- btAlignedFree(array);
- }
-
- T* init()
- {
- T* o = array;
- for (int i = 0; i < size; i++, o++)
- {
- o->next = (i + 1 < size) ? o + 1 : NULL;
- }
- return array;
- }
- };
-
- template <typename T>
- class Pool
- {
- private:
- PoolArray<T>* arrays;
- PoolArray<T>* nextArray;
- T* freeObjects;
- int arraySize;
-
- public:
- Pool() : arrays(NULL), nextArray(NULL), freeObjects(NULL), arraySize(256)
- {
- }
-
- ~Pool()
- {
- while (arrays)
- {
- PoolArray<T>* p = arrays;
- arrays = p->next;
- p->~PoolArray<T>();
- btAlignedFree(p);
- }
- }
-
- void reset()
- {
- nextArray = arrays;
- freeObjects = NULL;
- }
-
- void setArraySize(int arraySize)
- {
- this->arraySize = arraySize;
- }
-
- T* newObject()
- {
- T* o = freeObjects;
- if (!o)
- {
- PoolArray<T>* p = nextArray;
- if (p)
- {
- nextArray = p->next;
- }
- else
- {
- p = new (btAlignedAlloc(sizeof(PoolArray<T>), 16)) PoolArray<T>(arraySize);
- p->next = arrays;
- arrays = p;
- }
- o = p->init();
- }
- freeObjects = o->next;
- return new (o) T();
- };
-
- void freeObject(T* object)
- {
- object->~T();
- object->next = freeObjects;
- freeObjects = object;
- }
- };
-
- btVector3 scaling;
- btVector3 center;
- Pool<Vertex> vertexPool;
- Pool<Edge> edgePool;
- Pool<Face> facePool;
- btAlignedObjectArray<Vertex*> originalVertices;
- int mergeStamp;
- int minAxis;
- int medAxis;
- int maxAxis;
- int usedEdgePairs;
- int maxUsedEdgePairs;
-
- static Orientation getOrientation(const Edge* prev, const Edge* next, const Point32& s, const Point32& t);
- Edge* findMaxAngle(bool ccw, const Vertex* start, const Point32& s, const Point64& rxs, const Point64& sxrxs, Rational64& minCot);
- void findEdgeForCoplanarFaces(Vertex* c0, Vertex* c1, Edge*& e0, Edge*& e1, Vertex* stop0, Vertex* stop1);
-
- Edge* newEdgePair(Vertex* from, Vertex* to);
-
- void removeEdgePair(Edge* edge)
- {
- Edge* n = edge->next;
- Edge* r = edge->reverse;
-
- btAssert(edge->target && r->target);
-
- if (n != edge)
- {
- n->prev = edge->prev;
- edge->prev->next = n;
- r->target->edges = n;
- }
- else
- {
- r->target->edges = NULL;
- }
-
- n = r->next;
-
- if (n != r)
- {
- n->prev = r->prev;
- r->prev->next = n;
- edge->target->edges = n;
- }
- else
- {
- edge->target->edges = NULL;
- }
-
- edgePool.freeObject(edge);
- edgePool.freeObject(r);
- usedEdgePairs--;
- }
-
- void computeInternal(int start, int end, IntermediateHull& result);
-
- bool mergeProjection(IntermediateHull& h0, IntermediateHull& h1, Vertex*& c0, Vertex*& c1);
-
- void merge(IntermediateHull& h0, IntermediateHull& h1);
-
- btVector3 toBtVector(const Point32& v);
-
- btVector3 getBtNormal(Face* face);
-
- bool shiftFace(Face* face, btScalar amount, btAlignedObjectArray<Vertex*> stack);
-
-public:
- Vertex* vertexList;
-
- void compute(const void* coords, bool doubleCoords, int stride, int count);
-
- btVector3 getCoordinates(const Vertex* v);
-
- btScalar shrink(btScalar amount, btScalar clampAmount);
-};
-
-btConvexHullInternal::Int128 btConvexHullInternal::Int128::operator*(int64_t b) const
-{
- bool negative = (int64_t)high < 0;
- Int128 a = negative ? -*this : *this;
- if (b < 0)
- {
- negative = !negative;
- b = -b;
- }
- Int128 result = mul(a.low, (uint64_t)b);
- result.high += a.high * (uint64_t)b;
- return negative ? -result : result;
-}
-
-btConvexHullInternal::Int128 btConvexHullInternal::Int128::mul(int64_t a, int64_t b)
-{
- Int128 result;
-
-#ifdef USE_X86_64_ASM
- __asm__("imulq %[b]"
- : "=a"(result.low), "=d"(result.high)
- : "0"(a), [b] "r"(b)
- : "cc");
- return result;
-
-#else
- bool negative = a < 0;
- if (negative)
- {
- a = -a;
- }
- if (b < 0)
- {
- negative = !negative;
- b = -b;
- }
- DMul<uint64_t, uint32_t>::mul((uint64_t)a, (uint64_t)b, result.low, result.high);
- return negative ? -result : result;
-#endif
-}
-
-btConvexHullInternal::Int128 btConvexHullInternal::Int128::mul(uint64_t a, uint64_t b)
-{
- Int128 result;
-
-#ifdef USE_X86_64_ASM
- __asm__("mulq %[b]"
- : "=a"(result.low), "=d"(result.high)
- : "0"(a), [b] "r"(b)
- : "cc");
-
-#else
- DMul<uint64_t, uint32_t>::mul(a, b, result.low, result.high);
-#endif
-
- return result;
-}
-
-int btConvexHullInternal::Rational64::compare(const Rational64& b) const
-{
- if (sign != b.sign)
- {
- return sign - b.sign;
- }
- else if (sign == 0)
- {
- return 0;
- }
-
- // return (numerator * b.denominator > b.numerator * denominator) ? sign : (numerator * b.denominator < b.numerator * denominator) ? -sign : 0;
-
-#ifdef USE_X86_64_ASM
-
- int result;
- int64_t tmp;
- int64_t dummy;
- __asm__(
- "mulq %[bn]\n\t"
- "movq %%rax, %[tmp]\n\t"
- "movq %%rdx, %%rbx\n\t"
- "movq %[tn], %%rax\n\t"
- "mulq %[bd]\n\t"
- "subq %[tmp], %%rax\n\t"
- "sbbq %%rbx, %%rdx\n\t" // rdx:rax contains 128-bit-difference "numerator*b.denominator - b.numerator*denominator"
- "setnsb %%bh\n\t" // bh=1 if difference is non-negative, bh=0 otherwise
- "orq %%rdx, %%rax\n\t"
- "setnzb %%bl\n\t" // bl=1 if difference if non-zero, bl=0 if it is zero
- "decb %%bh\n\t" // now bx=0x0000 if difference is zero, 0xff01 if it is negative, 0x0001 if it is positive (i.e., same sign as difference)
- "shll $16, %%ebx\n\t" // ebx has same sign as difference
- : "=&b"(result), [tmp] "=&r"(tmp), "=a"(dummy)
- : "a"(m_denominator), [bn] "g"(b.m_numerator), [tn] "g"(m_numerator), [bd] "g"(b.m_denominator)
- : "%rdx", "cc");
- return result ? result ^ sign // if sign is +1, only bit 0 of result is inverted, which does not change the sign of result (and cannot result in zero)
- // if sign is -1, all bits of result are inverted, which changes the sign of result (and again cannot result in zero)
- : 0;
-
-#else
-
- return sign * Int128::mul(m_numerator, b.m_denominator).ucmp(Int128::mul(m_denominator, b.m_numerator));
-
-#endif
-}
-
-int btConvexHullInternal::Rational128::compare(const Rational128& b) const
-{
- if (sign != b.sign)
- {
- return sign - b.sign;
- }
- else if (sign == 0)
- {
- return 0;
- }
- if (isInt64)
- {
- return -b.compare(sign * (int64_t)numerator.low);
- }
-
- Int128 nbdLow, nbdHigh, dbnLow, dbnHigh;
- DMul<Int128, uint64_t>::mul(numerator, b.denominator, nbdLow, nbdHigh);
- DMul<Int128, uint64_t>::mul(denominator, b.numerator, dbnLow, dbnHigh);
-
- int cmp = nbdHigh.ucmp(dbnHigh);
- if (cmp)
- {
- return cmp * sign;
- }
- return nbdLow.ucmp(dbnLow) * sign;
-}
-
-int btConvexHullInternal::Rational128::compare(int64_t b) const
-{
- if (isInt64)
- {
- int64_t a = sign * (int64_t)numerator.low;
- return (a > b) ? 1 : (a < b) ? -1 : 0;
- }
- if (b > 0)
- {
- if (sign <= 0)
- {
- return -1;
- }
- }
- else if (b < 0)
- {
- if (sign >= 0)
- {
- return 1;
- }
- b = -b;
- }
- else
- {
- return sign;
- }
-
- return numerator.ucmp(denominator * b) * sign;
-}
-
-btConvexHullInternal::Edge* btConvexHullInternal::newEdgePair(Vertex* from, Vertex* to)
-{
- btAssert(from && to);
- Edge* e = edgePool.newObject();
- Edge* r = edgePool.newObject();
- e->reverse = r;
- r->reverse = e;
- e->copy = mergeStamp;
- r->copy = mergeStamp;
- e->target = to;
- r->target = from;
- e->face = NULL;
- r->face = NULL;
- usedEdgePairs++;
- if (usedEdgePairs > maxUsedEdgePairs)
- {
- maxUsedEdgePairs = usedEdgePairs;
- }
- return e;
-}
-
-bool btConvexHullInternal::mergeProjection(IntermediateHull& h0, IntermediateHull& h1, Vertex*& c0, Vertex*& c1)
-{
- Vertex* v0 = h0.maxYx;
- Vertex* v1 = h1.minYx;
- if ((v0->point.x == v1->point.x) && (v0->point.y == v1->point.y))
- {
- btAssert(v0->point.z < v1->point.z);
- Vertex* v1p = v1->prev;
- if (v1p == v1)
- {
- c0 = v0;
- if (v1->edges)
- {
- btAssert(v1->edges->next == v1->edges);
- v1 = v1->edges->target;
- btAssert(v1->edges->next == v1->edges);
- }
- c1 = v1;
- return false;
- }
- Vertex* v1n = v1->next;
- v1p->next = v1n;
- v1n->prev = v1p;
- if (v1 == h1.minXy)
- {
- if ((v1n->point.x < v1p->point.x) || ((v1n->point.x == v1p->point.x) && (v1n->point.y < v1p->point.y)))
- {
- h1.minXy = v1n;
- }
- else
- {
- h1.minXy = v1p;
- }
- }
- if (v1 == h1.maxXy)
- {
- if ((v1n->point.x > v1p->point.x) || ((v1n->point.x == v1p->point.x) && (v1n->point.y > v1p->point.y)))
- {
- h1.maxXy = v1n;
- }
- else
- {
- h1.maxXy = v1p;
- }
- }
- }
-
- v0 = h0.maxXy;
- v1 = h1.maxXy;
- Vertex* v00 = NULL;
- Vertex* v10 = NULL;
- int32_t sign = 1;
-
- for (int side = 0; side <= 1; side++)
- {
- int32_t dx = (v1->point.x - v0->point.x) * sign;
- if (dx > 0)
- {
- while (true)
- {
- int32_t dy = v1->point.y - v0->point.y;
-
- Vertex* w0 = side ? v0->next : v0->prev;
- if (w0 != v0)
- {
- int32_t dx0 = (w0->point.x - v0->point.x) * sign;
- int32_t dy0 = w0->point.y - v0->point.y;
- if ((dy0 <= 0) && ((dx0 == 0) || ((dx0 < 0) && (dy0 * dx <= dy * dx0))))
- {
- v0 = w0;
- dx = (v1->point.x - v0->point.x) * sign;
- continue;
- }
- }
-
- Vertex* w1 = side ? v1->next : v1->prev;
- if (w1 != v1)
- {
- int32_t dx1 = (w1->point.x - v1->point.x) * sign;
- int32_t dy1 = w1->point.y - v1->point.y;
- int32_t dxn = (w1->point.x - v0->point.x) * sign;
- if ((dxn > 0) && (dy1 < 0) && ((dx1 == 0) || ((dx1 < 0) && (dy1 * dx < dy * dx1))))
- {
- v1 = w1;
- dx = dxn;
- continue;
- }
- }
-
- break;
- }
- }
- else if (dx < 0)
- {
- while (true)
- {
- int32_t dy = v1->point.y - v0->point.y;
-
- Vertex* w1 = side ? v1->prev : v1->next;
- if (w1 != v1)
- {
- int32_t dx1 = (w1->point.x - v1->point.x) * sign;
- int32_t dy1 = w1->point.y - v1->point.y;
- if ((dy1 >= 0) && ((dx1 == 0) || ((dx1 < 0) && (dy1 * dx <= dy * dx1))))
- {
- v1 = w1;
- dx = (v1->point.x - v0->point.x) * sign;
- continue;
- }
- }
-
- Vertex* w0 = side ? v0->prev : v0->next;
- if (w0 != v0)
- {
- int32_t dx0 = (w0->point.x - v0->point.x) * sign;
- int32_t dy0 = w0->point.y - v0->point.y;
- int32_t dxn = (v1->point.x - w0->point.x) * sign;
- if ((dxn < 0) && (dy0 > 0) && ((dx0 == 0) || ((dx0 < 0) && (dy0 * dx < dy * dx0))))
- {
- v0 = w0;
- dx = dxn;
- continue;
- }
- }
-
- break;
- }
- }
- else
- {
- int32_t x = v0->point.x;
- int32_t y0 = v0->point.y;
- Vertex* w0 = v0;
- Vertex* t;
- while (((t = side ? w0->next : w0->prev) != v0) && (t->point.x == x) && (t->point.y <= y0))
- {
- w0 = t;
- y0 = t->point.y;
- }
- v0 = w0;
-
- int32_t y1 = v1->point.y;
- Vertex* w1 = v1;
- while (((t = side ? w1->prev : w1->next) != v1) && (t->point.x == x) && (t->point.y >= y1))
- {
- w1 = t;
- y1 = t->point.y;
- }
- v1 = w1;
- }
-
- if (side == 0)
- {
- v00 = v0;
- v10 = v1;
-
- v0 = h0.minXy;
- v1 = h1.minXy;
- sign = -1;
- }
- }
-
- v0->prev = v1;
- v1->next = v0;
-
- v00->next = v10;
- v10->prev = v00;
-
- if (h1.minXy->point.x < h0.minXy->point.x)
- {
- h0.minXy = h1.minXy;
- }
- if (h1.maxXy->point.x >= h0.maxXy->point.x)
- {
- h0.maxXy = h1.maxXy;
- }
-
- h0.maxYx = h1.maxYx;
-
- c0 = v00;
- c1 = v10;
-
- return true;
-}
-
-void btConvexHullInternal::computeInternal(int start, int end, IntermediateHull& result)
-{
- int n = end - start;
- switch (n)
- {
- case 0:
- result.minXy = NULL;
- result.maxXy = NULL;
- result.minYx = NULL;
- result.maxYx = NULL;
- return;
- case 2:
- {
- Vertex* v = originalVertices[start];
- Vertex* w = v + 1;
- if (v->point != w->point)
- {
- int32_t dx = v->point.x - w->point.x;
- int32_t dy = v->point.y - w->point.y;
-
- if ((dx == 0) && (dy == 0))
- {
- if (v->point.z > w->point.z)
- {
- Vertex* t = w;
- w = v;
- v = t;
- }
- btAssert(v->point.z < w->point.z);
- v->next = v;
- v->prev = v;
- result.minXy = v;
- result.maxXy = v;
- result.minYx = v;
- result.maxYx = v;
- }
- else
- {
- v->next = w;
- v->prev = w;
- w->next = v;
- w->prev = v;
-
- if ((dx < 0) || ((dx == 0) && (dy < 0)))
- {
- result.minXy = v;
- result.maxXy = w;
- }
- else
- {
- result.minXy = w;
- result.maxXy = v;
- }
-
- if ((dy < 0) || ((dy == 0) && (dx < 0)))
- {
- result.minYx = v;
- result.maxYx = w;
- }
- else
- {
- result.minYx = w;
- result.maxYx = v;
- }
- }
-
- Edge* e = newEdgePair(v, w);
- e->link(e);
- v->edges = e;
-
- e = e->reverse;
- e->link(e);
- w->edges = e;
-
- return;
- }
- {
- Vertex* v = originalVertices[start];
- v->edges = NULL;
- v->next = v;
- v->prev = v;
-
- result.minXy = v;
- result.maxXy = v;
- result.minYx = v;
- result.maxYx = v;
- }
-
- return;
- }
-
- case 1:
- {
- Vertex* v = originalVertices[start];
- v->edges = NULL;
- v->next = v;
- v->prev = v;
-
- result.minXy = v;
- result.maxXy = v;
- result.minYx = v;
- result.maxYx = v;
-
- return;
- }
- }
-
- int split0 = start + n / 2;
- Point32 p = originalVertices[split0 - 1]->point;
- int split1 = split0;
- while ((split1 < end) && (originalVertices[split1]->point == p))
- {
- split1++;
- }
- computeInternal(start, split0, result);
- IntermediateHull hull1;
- computeInternal(split1, end, hull1);
-#ifdef DEBUG_CONVEX_HULL
- printf("\n\nMerge\n");
- result.print();
- hull1.print();
-#endif
- merge(result, hull1);
-#ifdef DEBUG_CONVEX_HULL
- printf("\n Result\n");
- result.print();
-#endif
-}
-
-#ifdef DEBUG_CONVEX_HULL
-void btConvexHullInternal::IntermediateHull::print()
-{
- printf(" Hull\n");
- for (Vertex* v = minXy; v;)
- {
- printf(" ");
- v->print();
- if (v == maxXy)
- {
- printf(" maxXy");
- }
- if (v == minYx)
- {
- printf(" minYx");
- }
- if (v == maxYx)
- {
- printf(" maxYx");
- }
- if (v->next->prev != v)
- {
- printf(" Inconsistency");
- }
- printf("\n");
- v = v->next;
- if (v == minXy)
- {
- break;
- }
- }
- if (minXy)
- {
- minXy->copy = (minXy->copy == -1) ? -2 : -1;
- minXy->printGraph();
- }
-}
-
-void btConvexHullInternal::Vertex::printGraph()
-{
- print();
- printf("\nEdges\n");
- Edge* e = edges;
- if (e)
- {
- do
- {
- e->print();
- printf("\n");
- e = e->next;
- } while (e != edges);
- do
- {
- Vertex* v = e->target;
- if (v->copy != copy)
- {
- v->copy = copy;
- v->printGraph();
- }
- e = e->next;
- } while (e != edges);
- }
-}
-#endif
-
-btConvexHullInternal::Orientation btConvexHullInternal::getOrientation(const Edge* prev, const Edge* next, const Point32& s, const Point32& t)
-{
- btAssert(prev->reverse->target == next->reverse->target);
- if (prev->next == next)
- {
- if (prev->prev == next)
- {
- Point64 n = t.cross(s);
- Point64 m = (*prev->target - *next->reverse->target).cross(*next->target - *next->reverse->target);
- btAssert(!m.isZero());
- int64_t dot = n.dot(m);
- btAssert(dot != 0);
- return (dot > 0) ? COUNTER_CLOCKWISE : CLOCKWISE;
- }
- return COUNTER_CLOCKWISE;
- }
- else if (prev->prev == next)
- {
- return CLOCKWISE;
- }
- else
- {
- return NONE;
- }
-}
-
-btConvexHullInternal::Edge* btConvexHullInternal::findMaxAngle(bool ccw, const Vertex* start, const Point32& s, const Point64& rxs, const Point64& sxrxs, Rational64& minCot)
-{
- Edge* minEdge = NULL;
-
-#ifdef DEBUG_CONVEX_HULL
- printf("find max edge for %d\n", start->point.index);
-#endif
- Edge* e = start->edges;
- if (e)
- {
- do
- {
- if (e->copy > mergeStamp)
- {
- Point32 t = *e->target - *start;
- Rational64 cot(t.dot(sxrxs), t.dot(rxs));
-#ifdef DEBUG_CONVEX_HULL
- printf(" Angle is %f (%d) for ", (float)btAtan(cot.toScalar()), (int)cot.isNaN());
- e->print();
-#endif
- if (cot.isNaN())
- {
- btAssert(ccw ? (t.dot(s) < 0) : (t.dot(s) > 0));
- }
- else
- {
- int cmp;
- if (minEdge == NULL)
- {
- minCot = cot;
- minEdge = e;
- }
- else if ((cmp = cot.compare(minCot)) < 0)
- {
- minCot = cot;
- minEdge = e;
- }
- else if ((cmp == 0) && (ccw == (getOrientation(minEdge, e, s, t) == COUNTER_CLOCKWISE)))
- {
- minEdge = e;
- }
- }
-#ifdef DEBUG_CONVEX_HULL
- printf("\n");
-#endif
- }
- e = e->next;
- } while (e != start->edges);
- }
- return minEdge;
-}
-
-void btConvexHullInternal::findEdgeForCoplanarFaces(Vertex* c0, Vertex* c1, Edge*& e0, Edge*& e1, Vertex* stop0, Vertex* stop1)
-{
- Edge* start0 = e0;
- Edge* start1 = e1;
- Point32 et0 = start0 ? start0->target->point : c0->point;
- Point32 et1 = start1 ? start1->target->point : c1->point;
- Point32 s = c1->point - c0->point;
- Point64 normal = ((start0 ? start0 : start1)->target->point - c0->point).cross(s);
- int64_t dist = c0->point.dot(normal);
- btAssert(!start1 || (start1->target->point.dot(normal) == dist));
- Point64 perp = s.cross(normal);
- btAssert(!perp.isZero());
-
-#ifdef DEBUG_CONVEX_HULL
- printf(" Advancing %d %d (%p %p, %d %d)\n", c0->point.index, c1->point.index, start0, start1, start0 ? start0->target->point.index : -1, start1 ? start1->target->point.index : -1);
-#endif
-
- int64_t maxDot0 = et0.dot(perp);
- if (e0)
- {
- while (e0->target != stop0)
- {
- Edge* e = e0->reverse->prev;
- if (e->target->point.dot(normal) < dist)
- {
- break;
- }
- btAssert(e->target->point.dot(normal) == dist);
- if (e->copy == mergeStamp)
- {
- break;
- }
- int64_t dot = e->target->point.dot(perp);
- if (dot <= maxDot0)
- {
- break;
- }
- maxDot0 = dot;
- e0 = e;
- et0 = e->target->point;
- }
- }
-
- int64_t maxDot1 = et1.dot(perp);
- if (e1)
- {
- while (e1->target != stop1)
- {
- Edge* e = e1->reverse->next;
- if (e->target->point.dot(normal) < dist)
- {
- break;
- }
- btAssert(e->target->point.dot(normal) == dist);
- if (e->copy == mergeStamp)
- {
- break;
- }
- int64_t dot = e->target->point.dot(perp);
- if (dot <= maxDot1)
- {
- break;
- }
- maxDot1 = dot;
- e1 = e;
- et1 = e->target->point;
- }
- }
-
-#ifdef DEBUG_CONVEX_HULL
- printf(" Starting at %d %d\n", et0.index, et1.index);
-#endif
-
- int64_t dx = maxDot1 - maxDot0;
- if (dx > 0)
- {
- while (true)
- {
- int64_t dy = (et1 - et0).dot(s);
-
- if (e0 && (e0->target != stop0))
- {
- Edge* f0 = e0->next->reverse;
- if (f0->copy > mergeStamp)
- {
- int64_t dx0 = (f0->target->point - et0).dot(perp);
- int64_t dy0 = (f0->target->point - et0).dot(s);
- if ((dx0 == 0) ? (dy0 < 0) : ((dx0 < 0) && (Rational64(dy0, dx0).compare(Rational64(dy, dx)) >= 0)))
- {
- et0 = f0->target->point;
- dx = (et1 - et0).dot(perp);
- e0 = (e0 == start0) ? NULL : f0;
- continue;
- }
- }
- }
-
- if (e1 && (e1->target != stop1))
- {
- Edge* f1 = e1->reverse->next;
- if (f1->copy > mergeStamp)
- {
- Point32 d1 = f1->target->point - et1;
- if (d1.dot(normal) == 0)
- {
- int64_t dx1 = d1.dot(perp);
- int64_t dy1 = d1.dot(s);
- int64_t dxn = (f1->target->point - et0).dot(perp);
- if ((dxn > 0) && ((dx1 == 0) ? (dy1 < 0) : ((dx1 < 0) && (Rational64(dy1, dx1).compare(Rational64(dy, dx)) > 0))))
- {
- e1 = f1;
- et1 = e1->target->point;
- dx = dxn;
- continue;
- }
- }
- else
- {
- btAssert((e1 == start1) && (d1.dot(normal) < 0));
- }
- }
- }
-
- break;
- }
- }
- else if (dx < 0)
- {
- while (true)
- {
- int64_t dy = (et1 - et0).dot(s);
-
- if (e1 && (e1->target != stop1))
- {
- Edge* f1 = e1->prev->reverse;
- if (f1->copy > mergeStamp)
- {
- int64_t dx1 = (f1->target->point - et1).dot(perp);
- int64_t dy1 = (f1->target->point - et1).dot(s);
- if ((dx1 == 0) ? (dy1 > 0) : ((dx1 < 0) && (Rational64(dy1, dx1).compare(Rational64(dy, dx)) <= 0)))
- {
- et1 = f1->target->point;
- dx = (et1 - et0).dot(perp);
- e1 = (e1 == start1) ? NULL : f1;
- continue;
- }
- }
- }
-
- if (e0 && (e0->target != stop0))
- {
- Edge* f0 = e0->reverse->prev;
- if (f0->copy > mergeStamp)
- {
- Point32 d0 = f0->target->point - et0;
- if (d0.dot(normal) == 0)
- {
- int64_t dx0 = d0.dot(perp);
- int64_t dy0 = d0.dot(s);
- int64_t dxn = (et1 - f0->target->point).dot(perp);
- if ((dxn < 0) && ((dx0 == 0) ? (dy0 > 0) : ((dx0 < 0) && (Rational64(dy0, dx0).compare(Rational64(dy, dx)) < 0))))
- {
- e0 = f0;
- et0 = e0->target->point;
- dx = dxn;
- continue;
- }
- }
- else
- {
- btAssert((e0 == start0) && (d0.dot(normal) < 0));
- }
- }
- }
-
- break;
- }
- }
-#ifdef DEBUG_CONVEX_HULL
- printf(" Advanced edges to %d %d\n", et0.index, et1.index);
-#endif
-}
-
-void btConvexHullInternal::merge(IntermediateHull& h0, IntermediateHull& h1)
-{
- if (!h1.maxXy)
- {
- return;
- }
- if (!h0.maxXy)
- {
- h0 = h1;
- return;
- }
-
- mergeStamp--;
-
- Vertex* c0 = NULL;
- Edge* toPrev0 = NULL;
- Edge* firstNew0 = NULL;
- Edge* pendingHead0 = NULL;
- Edge* pendingTail0 = NULL;
- Vertex* c1 = NULL;
- Edge* toPrev1 = NULL;
- Edge* firstNew1 = NULL;
- Edge* pendingHead1 = NULL;
- Edge* pendingTail1 = NULL;
- Point32 prevPoint;
-
- if (mergeProjection(h0, h1, c0, c1))
- {
- Point32 s = *c1 - *c0;
- Point64 normal = Point32(0, 0, -1).cross(s);
- Point64 t = s.cross(normal);
- btAssert(!t.isZero());
-
- Edge* e = c0->edges;
- Edge* start0 = NULL;
- if (e)
- {
- do
- {
- int64_t dot = (*e->target - *c0).dot(normal);
- btAssert(dot <= 0);
- if ((dot == 0) && ((*e->target - *c0).dot(t) > 0))
- {
- if (!start0 || (getOrientation(start0, e, s, Point32(0, 0, -1)) == CLOCKWISE))
- {
- start0 = e;
- }
- }
- e = e->next;
- } while (e != c0->edges);
- }
-
- e = c1->edges;
- Edge* start1 = NULL;
- if (e)
- {
- do
- {
- int64_t dot = (*e->target - *c1).dot(normal);
- btAssert(dot <= 0);
- if ((dot == 0) && ((*e->target - *c1).dot(t) > 0))
- {
- if (!start1 || (getOrientation(start1, e, s, Point32(0, 0, -1)) == COUNTER_CLOCKWISE))
- {
- start1 = e;
- }
- }
- e = e->next;
- } while (e != c1->edges);
- }
-
- if (start0 || start1)
- {
- findEdgeForCoplanarFaces(c0, c1, start0, start1, NULL, NULL);
- if (start0)
- {
- c0 = start0->target;
- }
- if (start1)
- {
- c1 = start1->target;
- }
- }
-
- prevPoint = c1->point;
- prevPoint.z++;
- }
- else
- {
- prevPoint = c1->point;
- prevPoint.x++;
- }
-
- Vertex* first0 = c0;
- Vertex* first1 = c1;
- bool firstRun = true;
-
- while (true)
- {
- Point32 s = *c1 - *c0;
- Point32 r = prevPoint - c0->point;
- Point64 rxs = r.cross(s);
- Point64 sxrxs = s.cross(rxs);
-
-#ifdef DEBUG_CONVEX_HULL
- printf("\n Checking %d %d\n", c0->point.index, c1->point.index);
-#endif
- Rational64 minCot0(0, 0);
- Edge* min0 = findMaxAngle(false, c0, s, rxs, sxrxs, minCot0);
- Rational64 minCot1(0, 0);
- Edge* min1 = findMaxAngle(true, c1, s, rxs, sxrxs, minCot1);
- if (!min0 && !min1)
- {
- Edge* e = newEdgePair(c0, c1);
- e->link(e);
- c0->edges = e;
-
- e = e->reverse;
- e->link(e);
- c1->edges = e;
- return;
- }
- else
- {
- int cmp = !min0 ? 1 : !min1 ? -1 : minCot0.compare(minCot1);
-#ifdef DEBUG_CONVEX_HULL
- printf(" -> Result %d\n", cmp);
-#endif
- if (firstRun || ((cmp >= 0) ? !minCot1.isNegativeInfinity() : !minCot0.isNegativeInfinity()))
- {
- Edge* e = newEdgePair(c0, c1);
- if (pendingTail0)
- {
- pendingTail0->prev = e;
- }
- else
- {
- pendingHead0 = e;
- }
- e->next = pendingTail0;
- pendingTail0 = e;
-
- e = e->reverse;
- if (pendingTail1)
- {
- pendingTail1->next = e;
- }
- else
- {
- pendingHead1 = e;
- }
- e->prev = pendingTail1;
- pendingTail1 = e;
- }
-
- Edge* e0 = min0;
- Edge* e1 = min1;
-
-#ifdef DEBUG_CONVEX_HULL
- printf(" Found min edges to %d %d\n", e0 ? e0->target->point.index : -1, e1 ? e1->target->point.index : -1);
-#endif
-
- if (cmp == 0)
- {
- findEdgeForCoplanarFaces(c0, c1, e0, e1, NULL, NULL);
- }
-
- if ((cmp >= 0) && e1)
- {
- if (toPrev1)
- {
- for (Edge *e = toPrev1->next, *n = NULL; e != min1; e = n)
- {
- n = e->next;
- removeEdgePair(e);
- }
- }
-
- if (pendingTail1)
- {
- if (toPrev1)
- {
- toPrev1->link(pendingHead1);
- }
- else
- {
- min1->prev->link(pendingHead1);
- firstNew1 = pendingHead1;
- }
- pendingTail1->link(min1);
- pendingHead1 = NULL;
- pendingTail1 = NULL;
- }
- else if (!toPrev1)
- {
- firstNew1 = min1;
- }
-
- prevPoint = c1->point;
- c1 = e1->target;
- toPrev1 = e1->reverse;
- }
-
- if ((cmp <= 0) && e0)
- {
- if (toPrev0)
- {
- for (Edge *e = toPrev0->prev, *n = NULL; e != min0; e = n)
- {
- n = e->prev;
- removeEdgePair(e);
- }
- }
-
- if (pendingTail0)
- {
- if (toPrev0)
- {
- pendingHead0->link(toPrev0);
- }
- else
- {
- pendingHead0->link(min0->next);
- firstNew0 = pendingHead0;
- }
- min0->link(pendingTail0);
- pendingHead0 = NULL;
- pendingTail0 = NULL;
- }
- else if (!toPrev0)
- {
- firstNew0 = min0;
- }
-
- prevPoint = c0->point;
- c0 = e0->target;
- toPrev0 = e0->reverse;
- }
- }
-
- if ((c0 == first0) && (c1 == first1))
- {
- if (toPrev0 == NULL)
- {
- pendingHead0->link(pendingTail0);
- c0->edges = pendingTail0;
- }
- else
- {
- for (Edge *e = toPrev0->prev, *n = NULL; e != firstNew0; e = n)
- {
- n = e->prev;
- removeEdgePair(e);
- }
- if (pendingTail0)
- {
- pendingHead0->link(toPrev0);
- firstNew0->link(pendingTail0);
- }
- }
-
- if (toPrev1 == NULL)
- {
- pendingTail1->link(pendingHead1);
- c1->edges = pendingTail1;
- }
- else
- {
- for (Edge *e = toPrev1->next, *n = NULL; e != firstNew1; e = n)
- {
- n = e->next;
- removeEdgePair(e);
- }
- if (pendingTail1)
- {
- toPrev1->link(pendingHead1);
- pendingTail1->link(firstNew1);
- }
- }
-
- return;
- }
-
- firstRun = false;
- }
-}
-
-class pointCmp
-{
-public:
- bool operator()(const btConvexHullInternal::Point32& p, const btConvexHullInternal::Point32& q) const
- {
- return (p.y < q.y) || ((p.y == q.y) && ((p.x < q.x) || ((p.x == q.x) && (p.z < q.z))));
- }
-};
-
-void btConvexHullInternal::compute(const void* coords, bool doubleCoords, int stride, int count)
-{
- btVector3 min(btScalar(1e30), btScalar(1e30), btScalar(1e30)), max(btScalar(-1e30), btScalar(-1e30), btScalar(-1e30));
- const char* ptr = (const char*)coords;
- if (doubleCoords)
- {
- for (int i = 0; i < count; i++)
- {
- const double* v = (const double*)ptr;
- btVector3 p((btScalar)v[0], (btScalar)v[1], (btScalar)v[2]);
- ptr += stride;
- min.setMin(p);
- max.setMax(p);
- }
- }
- else
- {
- for (int i = 0; i < count; i++)
- {
- const float* v = (const float*)ptr;
- btVector3 p(v[0], v[1], v[2]);
- ptr += stride;
- min.setMin(p);
- max.setMax(p);
- }
- }
-
- btVector3 s = max - min;
- maxAxis = s.maxAxis();
- minAxis = s.minAxis();
- if (minAxis == maxAxis)
- {
- minAxis = (maxAxis + 1) % 3;
- }
- medAxis = 3 - maxAxis - minAxis;
-
- s /= btScalar(10216);
- if (((medAxis + 1) % 3) != maxAxis)
- {
- s *= -1;
- }
- scaling = s;
-
- if (s[0] != 0)
- {
- s[0] = btScalar(1) / s[0];
- }
- if (s[1] != 0)
- {
- s[1] = btScalar(1) / s[1];
- }
- if (s[2] != 0)
- {
- s[2] = btScalar(1) / s[2];
- }
-
- center = (min + max) * btScalar(0.5);
-
- btAlignedObjectArray<Point32> points;
- points.resize(count);
- ptr = (const char*)coords;
- if (doubleCoords)
- {
- for (int i = 0; i < count; i++)
- {
- const double* v = (const double*)ptr;
- btVector3 p((btScalar)v[0], (btScalar)v[1], (btScalar)v[2]);
- ptr += stride;
- p = (p - center) * s;
- points[i].x = (int32_t)p[medAxis];
- points[i].y = (int32_t)p[maxAxis];
- points[i].z = (int32_t)p[minAxis];
- points[i].index = i;
- }
- }
- else
- {
- for (int i = 0; i < count; i++)
- {
- const float* v = (const float*)ptr;
- btVector3 p(v[0], v[1], v[2]);
- ptr += stride;
- p = (p - center) * s;
- points[i].x = (int32_t)p[medAxis];
- points[i].y = (int32_t)p[maxAxis];
- points[i].z = (int32_t)p[minAxis];
- points[i].index = i;
- }
- }
- points.quickSort(pointCmp());
-
- vertexPool.reset();
- vertexPool.setArraySize(count);
- originalVertices.resize(count);
- for (int i = 0; i < count; i++)
- {
- Vertex* v = vertexPool.newObject();
- v->edges = NULL;
- v->point = points[i];
- v->copy = -1;
- originalVertices[i] = v;
- }
-
- points.clear();
-
- edgePool.reset();
- edgePool.setArraySize(6 * count);
-
- usedEdgePairs = 0;
- maxUsedEdgePairs = 0;
-
- mergeStamp = -3;
-
- IntermediateHull hull;
- computeInternal(0, count, hull);
- vertexList = hull.minXy;
-#ifdef DEBUG_CONVEX_HULL
- printf("max. edges %d (3v = %d)", maxUsedEdgePairs, 3 * count);
-#endif
-}
-
-btVector3 btConvexHullInternal::toBtVector(const Point32& v)
-{
- btVector3 p;
- p[medAxis] = btScalar(v.x);
- p[maxAxis] = btScalar(v.y);
- p[minAxis] = btScalar(v.z);
- return p * scaling;
-}
-
-btVector3 btConvexHullInternal::getBtNormal(Face* face)
-{
- return toBtVector(face->dir0).cross(toBtVector(face->dir1)).normalized();
-}
-
-btVector3 btConvexHullInternal::getCoordinates(const Vertex* v)
-{
- btVector3 p;
- p[medAxis] = v->xvalue();
- p[maxAxis] = v->yvalue();
- p[minAxis] = v->zvalue();
- return p * scaling + center;
-}
-
-btScalar btConvexHullInternal::shrink(btScalar amount, btScalar clampAmount)
-{
- if (!vertexList)
- {
- return 0;
- }
- int stamp = --mergeStamp;
- btAlignedObjectArray<Vertex*> stack;
- vertexList->copy = stamp;
- stack.push_back(vertexList);
- btAlignedObjectArray<Face*> faces;
-
- Point32 ref = vertexList->point;
- Int128 hullCenterX(0, 0);
- Int128 hullCenterY(0, 0);
- Int128 hullCenterZ(0, 0);
- Int128 volume(0, 0);
-
- while (stack.size() > 0)
- {
- Vertex* v = stack[stack.size() - 1];
- stack.pop_back();
- Edge* e = v->edges;
- if (e)
- {
- do
- {
- if (e->target->copy != stamp)
- {
- e->target->copy = stamp;
- stack.push_back(e->target);
- }
- if (e->copy != stamp)
- {
- Face* face = facePool.newObject();
- face->init(e->target, e->reverse->prev->target, v);
- faces.push_back(face);
- Edge* f = e;
-
- Vertex* a = NULL;
- Vertex* b = NULL;
- do
- {
- if (a && b)
- {
- int64_t vol = (v->point - ref).dot((a->point - ref).cross(b->point - ref));
- btAssert(vol >= 0);
- Point32 c = v->point + a->point + b->point + ref;
- hullCenterX += vol * c.x;
- hullCenterY += vol * c.y;
- hullCenterZ += vol * c.z;
- volume += vol;
- }
-
- btAssert(f->copy != stamp);
- f->copy = stamp;
- f->face = face;
-
- a = b;
- b = f->target;
-
- f = f->reverse->prev;
- } while (f != e);
- }
- e = e->next;
- } while (e != v->edges);
- }
- }
-
- if (volume.getSign() <= 0)
- {
- return 0;
- }
-
- btVector3 hullCenter;
- hullCenter[medAxis] = hullCenterX.toScalar();
- hullCenter[maxAxis] = hullCenterY.toScalar();
- hullCenter[minAxis] = hullCenterZ.toScalar();
- hullCenter /= 4 * volume.toScalar();
- hullCenter *= scaling;
-
- int faceCount = faces.size();
-
- if (clampAmount > 0)
- {
- btScalar minDist = SIMD_INFINITY;
- for (int i = 0; i < faceCount; i++)
- {
- btVector3 normal = getBtNormal(faces[i]);
- btScalar dist = normal.dot(toBtVector(faces[i]->origin) - hullCenter);
- if (dist < minDist)
- {
- minDist = dist;
- }
- }
-
- if (minDist <= 0)
- {
- return 0;
- }
-
- amount = btMin(amount, minDist * clampAmount);
- }
-
- unsigned int seed = 243703;
- for (int i = 0; i < faceCount; i++, seed = 1664525 * seed + 1013904223)
- {
- btSwap(faces[i], faces[seed % faceCount]);
- }
-
- for (int i = 0; i < faceCount; i++)
- {
- if (!shiftFace(faces[i], amount, stack))
- {
- return -amount;
- }
- }
-
- return amount;
-}
-
-bool btConvexHullInternal::shiftFace(Face* face, btScalar amount, btAlignedObjectArray<Vertex*> stack)
-{
- btVector3 origShift = getBtNormal(face) * -amount;
- if (scaling[0] != 0)
- {
- origShift[0] /= scaling[0];
- }
- if (scaling[1] != 0)
- {
- origShift[1] /= scaling[1];
- }
- if (scaling[2] != 0)
- {
- origShift[2] /= scaling[2];
- }
- Point32 shift((int32_t)origShift[medAxis], (int32_t)origShift[maxAxis], (int32_t)origShift[minAxis]);
- if (shift.isZero())
- {
- return true;
- }
- Point64 normal = face->getNormal();
-#ifdef DEBUG_CONVEX_HULL
- printf("\nShrinking face (%d %d %d) (%d %d %d) (%d %d %d) by (%d %d %d)\n",
- face->origin.x, face->origin.y, face->origin.z, face->dir0.x, face->dir0.y, face->dir0.z, face->dir1.x, face->dir1.y, face->dir1.z, shift.x, shift.y, shift.z);
-#endif
- int64_t origDot = face->origin.dot(normal);
- Point32 shiftedOrigin = face->origin + shift;
- int64_t shiftedDot = shiftedOrigin.dot(normal);
- btAssert(shiftedDot <= origDot);
- if (shiftedDot >= origDot)
- {
- return false;
- }
-
- Edge* intersection = NULL;
-
- Edge* startEdge = face->nearbyVertex->edges;
-#ifdef DEBUG_CONVEX_HULL
- printf("Start edge is ");
- startEdge->print();
- printf(", normal is (%lld %lld %lld), shifted dot is %lld\n", normal.x, normal.y, normal.z, shiftedDot);
-#endif
- Rational128 optDot = face->nearbyVertex->dot(normal);
- int cmp = optDot.compare(shiftedDot);
-#ifdef SHOW_ITERATIONS
- int n = 0;
-#endif
- if (cmp >= 0)
- {
- Edge* e = startEdge;
- do
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- Rational128 dot = e->target->dot(normal);
- btAssert(dot.compare(origDot) <= 0);
-#ifdef DEBUG_CONVEX_HULL
- printf("Moving downwards, edge is ");
- e->print();
- printf(", dot is %f (%f %lld)\n", (float)dot.toScalar(), (float)optDot.toScalar(), shiftedDot);
-#endif
- if (dot.compare(optDot) < 0)
- {
- int c = dot.compare(shiftedDot);
- optDot = dot;
- e = e->reverse;
- startEdge = e;
- if (c < 0)
- {
- intersection = e;
- break;
- }
- cmp = c;
- }
- e = e->prev;
- } while (e != startEdge);
-
- if (!intersection)
- {
- return false;
- }
- }
- else
- {
- Edge* e = startEdge;
- do
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- Rational128 dot = e->target->dot(normal);
- btAssert(dot.compare(origDot) <= 0);
-#ifdef DEBUG_CONVEX_HULL
- printf("Moving upwards, edge is ");
- e->print();
- printf(", dot is %f (%f %lld)\n", (float)dot.toScalar(), (float)optDot.toScalar(), shiftedDot);
-#endif
- if (dot.compare(optDot) > 0)
- {
- cmp = dot.compare(shiftedDot);
- if (cmp >= 0)
- {
- intersection = e;
- break;
- }
- optDot = dot;
- e = e->reverse;
- startEdge = e;
- }
- e = e->prev;
- } while (e != startEdge);
-
- if (!intersection)
- {
- return true;
- }
- }
-
-#ifdef SHOW_ITERATIONS
- printf("Needed %d iterations to find initial intersection\n", n);
-#endif
-
- if (cmp == 0)
- {
- Edge* e = intersection->reverse->next;
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- while (e->target->dot(normal).compare(shiftedDot) <= 0)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- e = e->next;
- if (e == intersection->reverse)
- {
- return true;
- }
-#ifdef DEBUG_CONVEX_HULL
- printf("Checking for outwards edge, current edge is ");
- e->print();
- printf("\n");
-#endif
- }
-#ifdef SHOW_ITERATIONS
- printf("Needed %d iterations to check for complete containment\n", n);
-#endif
- }
-
- Edge* firstIntersection = NULL;
- Edge* faceEdge = NULL;
- Edge* firstFaceEdge = NULL;
-
-#ifdef SHOW_ITERATIONS
- int m = 0;
-#endif
- while (true)
- {
-#ifdef SHOW_ITERATIONS
- m++;
-#endif
-#ifdef DEBUG_CONVEX_HULL
- printf("Intersecting edge is ");
- intersection->print();
- printf("\n");
-#endif
- if (cmp == 0)
- {
- Edge* e = intersection->reverse->next;
- startEdge = e;
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- while (true)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- if (e->target->dot(normal).compare(shiftedDot) >= 0)
- {
- break;
- }
- intersection = e->reverse;
- e = e->next;
- if (e == startEdge)
- {
- return true;
- }
- }
-#ifdef SHOW_ITERATIONS
- printf("Needed %d iterations to advance intersection\n", n);
-#endif
- }
-
-#ifdef DEBUG_CONVEX_HULL
- printf("Advanced intersecting edge to ");
- intersection->print();
- printf(", cmp = %d\n", cmp);
-#endif
-
- if (!firstIntersection)
- {
- firstIntersection = intersection;
- }
- else if (intersection == firstIntersection)
- {
- break;
- }
-
- int prevCmp = cmp;
- Edge* prevIntersection = intersection;
- Edge* prevFaceEdge = faceEdge;
-
- Edge* e = intersection->reverse;
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- while (true)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- e = e->reverse->prev;
- btAssert(e != intersection->reverse);
- cmp = e->target->dot(normal).compare(shiftedDot);
-#ifdef DEBUG_CONVEX_HULL
- printf("Testing edge ");
- e->print();
- printf(" -> cmp = %d\n", cmp);
-#endif
- if (cmp >= 0)
- {
- intersection = e;
- break;
- }
- }
-#ifdef SHOW_ITERATIONS
- printf("Needed %d iterations to find other intersection of face\n", n);
-#endif
-
- if (cmp > 0)
- {
- Vertex* removed = intersection->target;
- e = intersection->reverse;
- if (e->prev == e)
- {
- removed->edges = NULL;
- }
- else
- {
- removed->edges = e->prev;
- e->prev->link(e->next);
- e->link(e);
- }
-#ifdef DEBUG_CONVEX_HULL
- printf("1: Removed part contains (%d %d %d)\n", removed->point.x, removed->point.y, removed->point.z);
-#endif
-
- Point64 n0 = intersection->face->getNormal();
- Point64 n1 = intersection->reverse->face->getNormal();
- int64_t m00 = face->dir0.dot(n0);
- int64_t m01 = face->dir1.dot(n0);
- int64_t m10 = face->dir0.dot(n1);
- int64_t m11 = face->dir1.dot(n1);
- int64_t r0 = (intersection->face->origin - shiftedOrigin).dot(n0);
- int64_t r1 = (intersection->reverse->face->origin - shiftedOrigin).dot(n1);
- Int128 det = Int128::mul(m00, m11) - Int128::mul(m01, m10);
- btAssert(det.getSign() != 0);
- Vertex* v = vertexPool.newObject();
- v->point.index = -1;
- v->copy = -1;
- v->point128 = PointR128(Int128::mul(face->dir0.x * r0, m11) - Int128::mul(face->dir0.x * r1, m01) + Int128::mul(face->dir1.x * r1, m00) - Int128::mul(face->dir1.x * r0, m10) + det * shiftedOrigin.x,
- Int128::mul(face->dir0.y * r0, m11) - Int128::mul(face->dir0.y * r1, m01) + Int128::mul(face->dir1.y * r1, m00) - Int128::mul(face->dir1.y * r0, m10) + det * shiftedOrigin.y,
- Int128::mul(face->dir0.z * r0, m11) - Int128::mul(face->dir0.z * r1, m01) + Int128::mul(face->dir1.z * r1, m00) - Int128::mul(face->dir1.z * r0, m10) + det * shiftedOrigin.z,
- det);
- v->point.x = (int32_t)v->point128.xvalue();
- v->point.y = (int32_t)v->point128.yvalue();
- v->point.z = (int32_t)v->point128.zvalue();
- intersection->target = v;
- v->edges = e;
-
- stack.push_back(v);
- stack.push_back(removed);
- stack.push_back(NULL);
- }
-
- if (cmp || prevCmp || (prevIntersection->reverse->next->target != intersection->target))
- {
- faceEdge = newEdgePair(prevIntersection->target, intersection->target);
- if (prevCmp == 0)
- {
- faceEdge->link(prevIntersection->reverse->next);
- }
- if ((prevCmp == 0) || prevFaceEdge)
- {
- prevIntersection->reverse->link(faceEdge);
- }
- if (cmp == 0)
- {
- intersection->reverse->prev->link(faceEdge->reverse);
- }
- faceEdge->reverse->link(intersection->reverse);
- }
- else
- {
- faceEdge = prevIntersection->reverse->next;
- }
-
- if (prevFaceEdge)
- {
- if (prevCmp > 0)
- {
- faceEdge->link(prevFaceEdge->reverse);
- }
- else if (faceEdge != prevFaceEdge->reverse)
- {
- stack.push_back(prevFaceEdge->target);
- while (faceEdge->next != prevFaceEdge->reverse)
- {
- Vertex* removed = faceEdge->next->target;
- removeEdgePair(faceEdge->next);
- stack.push_back(removed);
-#ifdef DEBUG_CONVEX_HULL
- printf("2: Removed part contains (%d %d %d)\n", removed->point.x, removed->point.y, removed->point.z);
-#endif
- }
- stack.push_back(NULL);
- }
- }
- faceEdge->face = face;
- faceEdge->reverse->face = intersection->face;
-
- if (!firstFaceEdge)
- {
- firstFaceEdge = faceEdge;
- }
- }
-#ifdef SHOW_ITERATIONS
- printf("Needed %d iterations to process all intersections\n", m);
-#endif
-
- if (cmp > 0)
- {
- firstFaceEdge->reverse->target = faceEdge->target;
- firstIntersection->reverse->link(firstFaceEdge);
- firstFaceEdge->link(faceEdge->reverse);
- }
- else if (firstFaceEdge != faceEdge->reverse)
- {
- stack.push_back(faceEdge->target);
- while (firstFaceEdge->next != faceEdge->reverse)
- {
- Vertex* removed = firstFaceEdge->next->target;
- removeEdgePair(firstFaceEdge->next);
- stack.push_back(removed);
-#ifdef DEBUG_CONVEX_HULL
- printf("3: Removed part contains (%d %d %d)\n", removed->point.x, removed->point.y, removed->point.z);
-#endif
- }
- stack.push_back(NULL);
- }
-
- btAssert(stack.size() > 0);
- vertexList = stack[0];
-
-#ifdef DEBUG_CONVEX_HULL
- printf("Removing part\n");
-#endif
-#ifdef SHOW_ITERATIONS
- n = 0;
-#endif
- int pos = 0;
- while (pos < stack.size())
- {
- int end = stack.size();
- while (pos < end)
- {
- Vertex* kept = stack[pos++];
-#ifdef DEBUG_CONVEX_HULL
- kept->print();
-#endif
- bool deeper = false;
- Vertex* removed;
- while ((removed = stack[pos++]) != NULL)
- {
-#ifdef SHOW_ITERATIONS
- n++;
-#endif
- kept->receiveNearbyFaces(removed);
- while (removed->edges)
- {
- if (!deeper)
- {
- deeper = true;
- stack.push_back(kept);
- }
- stack.push_back(removed->edges->target);
- removeEdgePair(removed->edges);
- }
- }
- if (deeper)
- {
- stack.push_back(NULL);
- }
- }
- }
-#ifdef SHOW_ITERATIONS
- printf("Needed %d iterations to remove part\n", n);
-#endif
-
- stack.resize(0);
- face->origin = shiftedOrigin;
-
- return true;
-}
-
-static int getVertexCopy(btConvexHullInternal::Vertex* vertex, btAlignedObjectArray<btConvexHullInternal::Vertex*>& vertices)
-{
- int index = vertex->copy;
- if (index < 0)
- {
- index = vertices.size();
- vertex->copy = index;
- vertices.push_back(vertex);
-#ifdef DEBUG_CONVEX_HULL
- printf("Vertex %d gets index *%d\n", vertex->point.index, index);
-#endif
- }
- return index;
-}
-
-btScalar btConvexHullComputer::compute(const void* coords, bool doubleCoords, int stride, int count, btScalar shrink, btScalar shrinkClamp)
-{
- if (count <= 0)
- {
- vertices.clear();
- edges.clear();
- faces.clear();
- return 0;
- }
-
- btConvexHullInternal hull;
- hull.compute(coords, doubleCoords, stride, count);
-
- btScalar shift = 0;
- if ((shrink > 0) && ((shift = hull.shrink(shrink, shrinkClamp)) < 0))
- {
- vertices.clear();
- edges.clear();
- faces.clear();
- return shift;
- }
-
- vertices.resize(0);
- original_vertex_index.resize(0);
- edges.resize(0);
- faces.resize(0);
-
- btAlignedObjectArray<btConvexHullInternal::Vertex*> oldVertices;
- getVertexCopy(hull.vertexList, oldVertices);
- int copied = 0;
- while (copied < oldVertices.size())
- {
- btConvexHullInternal::Vertex* v = oldVertices[copied];
- vertices.push_back(hull.getCoordinates(v));
- original_vertex_index.push_back(v->point.index);
- btConvexHullInternal::Edge* firstEdge = v->edges;
- if (firstEdge)
- {
- int firstCopy = -1;
- int prevCopy = -1;
- btConvexHullInternal::Edge* e = firstEdge;
- do
- {
- if (e->copy < 0)
- {
- int s = edges.size();
- edges.push_back(Edge());
- edges.push_back(Edge());
- Edge* c = &edges[s];
- Edge* r = &edges[s + 1];
- e->copy = s;
- e->reverse->copy = s + 1;
- c->reverse = 1;
- r->reverse = -1;
- c->targetVertex = getVertexCopy(e->target, oldVertices);
- r->targetVertex = copied;
-#ifdef DEBUG_CONVEX_HULL
- printf(" CREATE: Vertex *%d has edge to *%d\n", copied, c->getTargetVertex());
-#endif
- }
- if (prevCopy >= 0)
- {
- edges[e->copy].next = prevCopy - e->copy;
- }
- else
- {
- firstCopy = e->copy;
- }
- prevCopy = e->copy;
- e = e->next;
- } while (e != firstEdge);
- edges[firstCopy].next = prevCopy - firstCopy;
- }
- copied++;
- }
-
- for (int i = 0; i < copied; i++)
- {
- btConvexHullInternal::Vertex* v = oldVertices[i];
- btConvexHullInternal::Edge* firstEdge = v->edges;
- if (firstEdge)
- {
- btConvexHullInternal::Edge* e = firstEdge;
- do
- {
- if (e->copy >= 0)
- {
-#ifdef DEBUG_CONVEX_HULL
- printf("Vertex *%d has edge to *%d\n", i, edges[e->copy].getTargetVertex());
-#endif
- faces.push_back(e->copy);
- btConvexHullInternal::Edge* f = e;
- do
- {
-#ifdef DEBUG_CONVEX_HULL
- printf(" Face *%d\n", edges[f->copy].getTargetVertex());
-#endif
- f->copy = -1;
- f = f->reverse->prev;
- } while (f != e);
- }
- e = e->next;
- } while (e != firstEdge);
- }
- }
-
- return shift;
-}
diff --git a/thirdparty/bullet/LinearMath/btConvexHullComputer.h b/thirdparty/bullet/LinearMath/btConvexHullComputer.h
deleted file mode 100644
index 18b26eea9a..0000000000
--- a/thirdparty/bullet/LinearMath/btConvexHullComputer.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
-Copyright (c) 2011 Ole Kniemeyer, MAXON, www.maxon.net
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_CONVEX_HULL_COMPUTER_H
-#define BT_CONVEX_HULL_COMPUTER_H
-
-#include "btVector3.h"
-#include "btAlignedObjectArray.h"
-
-/// Convex hull implementation based on Preparata and Hong
-/// See http://code.google.com/p/bullet/issues/detail?id=275
-/// Ole Kniemeyer, MAXON Computer GmbH
-class btConvexHullComputer
-{
-private:
- btScalar compute(const void* coords, bool doubleCoords, int stride, int count, btScalar shrink, btScalar shrinkClamp);
-
-public:
- class Edge
- {
- private:
- int next;
- int reverse;
- int targetVertex;
-
- friend class btConvexHullComputer;
-
- public:
- int getSourceVertex() const
- {
- return (this + reverse)->targetVertex;
- }
-
- int getTargetVertex() const
- {
- return targetVertex;
- }
-
- const Edge* getNextEdgeOfVertex() const // clockwise list of all edges of a vertex
- {
- return this + next;
- }
-
- const Edge* getNextEdgeOfFace() const // counter-clockwise list of all edges of a face
- {
- return (this + reverse)->getNextEdgeOfVertex();
- }
-
- const Edge* getReverseEdge() const
- {
- return this + reverse;
- }
- };
-
- // Vertices of the output hull
- btAlignedObjectArray<btVector3> vertices;
-
- // The original vertex index in the input coords array
- btAlignedObjectArray<int> original_vertex_index;
-
- // Edges of the output hull
- btAlignedObjectArray<Edge> edges;
-
- // Faces of the convex hull. Each entry is an index into the "edges" array pointing to an edge of the face. Faces are planar n-gons
- btAlignedObjectArray<int> faces;
-
- /*
- Compute convex hull of "count" vertices stored in "coords". "stride" is the difference in bytes
- between the addresses of consecutive vertices. If "shrink" is positive, the convex hull is shrunken
- by that amount (each face is moved by "shrink" length units towards the center along its normal).
- If "shrinkClamp" is positive, "shrink" is clamped to not exceed "shrinkClamp * innerRadius", where "innerRadius"
- is the minimum distance of a face to the center of the convex hull.
-
- The returned value is the amount by which the hull has been shrunken. If it is negative, the amount was so large
- that the resulting convex hull is empty.
-
- The output convex hull can be found in the member variables "vertices", "edges", "faces".
- */
- btScalar compute(const float* coords, int stride, int count, btScalar shrink, btScalar shrinkClamp)
- {
- return compute(coords, false, stride, count, shrink, shrinkClamp);
- }
-
- // same as above, but double precision
- btScalar compute(const double* coords, int stride, int count, btScalar shrink, btScalar shrinkClamp)
- {
- return compute(coords, true, stride, count, shrink, shrinkClamp);
- }
-};
-
-#endif //BT_CONVEX_HULL_COMPUTER_H
diff --git a/thirdparty/bullet/LinearMath/btCpuFeatureUtility.h b/thirdparty/bullet/LinearMath/btCpuFeatureUtility.h
deleted file mode 100644
index 5e4b9a313c..0000000000
--- a/thirdparty/bullet/LinearMath/btCpuFeatureUtility.h
+++ /dev/null
@@ -1,88 +0,0 @@
-
-#ifndef BT_CPU_UTILITY_H
-#define BT_CPU_UTILITY_H
-
-#include "LinearMath/btScalar.h"
-
-#include <string.h> //memset
-#ifdef USE_SIMD
-#include <emmintrin.h>
-#ifdef BT_ALLOW_SSE4
-#include <intrin.h>
-#endif //BT_ALLOW_SSE4
-#endif //USE_SIMD
-
-#if defined BT_USE_NEON
-#define ARM_NEON_GCC_COMPATIBILITY 1
-#include <arm_neon.h>
-#include <sys/types.h>
-#include <sys/sysctl.h> //for sysctlbyname
-#endif //BT_USE_NEON
-
-///Rudimentary btCpuFeatureUtility for CPU features: only report the features that Bullet actually uses (SSE4/FMA3, NEON_HPFP)
-///We assume SSE2 in case BT_USE_SSE2 is defined in LinearMath/btScalar.h
-class btCpuFeatureUtility
-{
-public:
- enum btCpuFeature
- {
- CPU_FEATURE_FMA3 = 1,
- CPU_FEATURE_SSE4_1 = 2,
- CPU_FEATURE_NEON_HPFP = 4
- };
-
- static int getCpuFeatures()
- {
- static int capabilities = 0;
- static bool testedCapabilities = false;
- if (0 != testedCapabilities)
- {
- return capabilities;
- }
-
-#ifdef BT_USE_NEON
- {
- uint32_t hasFeature = 0;
- size_t featureSize = sizeof(hasFeature);
- int err = sysctlbyname("hw.optional.neon_hpfp", &hasFeature, &featureSize, NULL, 0);
- if (0 == err && hasFeature)
- capabilities |= CPU_FEATURE_NEON_HPFP;
- }
-#endif //BT_USE_NEON
-
-#ifdef BT_ALLOW_SSE4
- {
- int cpuInfo[4];
- memset(cpuInfo, 0, sizeof(cpuInfo));
- unsigned long long sseExt = 0;
- __cpuid(cpuInfo, 1);
-
- bool osUsesXSAVE_XRSTORE = cpuInfo[2] & (1 << 27) || false;
- bool cpuAVXSuport = cpuInfo[2] & (1 << 28) || false;
-
- if (osUsesXSAVE_XRSTORE && cpuAVXSuport)
- {
- sseExt = _xgetbv(0);
- }
- const int OSXSAVEFlag = (1UL << 27);
- const int AVXFlag = ((1UL << 28) | OSXSAVEFlag);
- const int FMAFlag = ((1UL << 12) | AVXFlag | OSXSAVEFlag);
- if ((cpuInfo[2] & FMAFlag) == FMAFlag && (sseExt & 6) == 6)
- {
- capabilities |= btCpuFeatureUtility::CPU_FEATURE_FMA3;
- }
-
- const int SSE41Flag = (1 << 19);
- if (cpuInfo[2] & SSE41Flag)
- {
- capabilities |= btCpuFeatureUtility::CPU_FEATURE_SSE4_1;
- }
- }
-#endif //BT_ALLOW_SSE4
-
- testedCapabilities = true;
- return capabilities;
- }
-};
-
-#endif //BT_CPU_UTILITY_H
diff --git a/thirdparty/bullet/LinearMath/btDefaultMotionState.h b/thirdparty/bullet/LinearMath/btDefaultMotionState.h
deleted file mode 100644
index 14c40d36b0..0000000000
--- a/thirdparty/bullet/LinearMath/btDefaultMotionState.h
+++ /dev/null
@@ -1,40 +0,0 @@
-#ifndef BT_DEFAULT_MOTION_STATE_H
-#define BT_DEFAULT_MOTION_STATE_H
-
-#include "btMotionState.h"
-
-///The btDefaultMotionState provides a common implementation to synchronize world transforms with offsets.
-ATTRIBUTE_ALIGNED16(struct)
-btDefaultMotionState : public btMotionState
-{
- btTransform m_graphicsWorldTrans;
- btTransform m_centerOfMassOffset;
- btTransform m_startWorldTrans;
- void* m_userPointer;
-
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
- btDefaultMotionState(const btTransform& startTrans = btTransform::getIdentity(), const btTransform& centerOfMassOffset = btTransform::getIdentity())
- : m_graphicsWorldTrans(startTrans),
- m_centerOfMassOffset(centerOfMassOffset),
- m_startWorldTrans(startTrans),
- m_userPointer(0)
-
- {
- }
-
- ///synchronizes world transform from user to physics
- virtual void getWorldTransform(btTransform & centerOfMassWorldTrans) const
- {
- centerOfMassWorldTrans = m_graphicsWorldTrans * m_centerOfMassOffset.inverse();
- }
-
- ///synchronizes world transform from physics to user
- ///Bullet only calls the update of worldtransform for active objects
- virtual void setWorldTransform(const btTransform& centerOfMassWorldTrans)
- {
- m_graphicsWorldTrans = centerOfMassWorldTrans * m_centerOfMassOffset;
- }
-};
-
-#endif //BT_DEFAULT_MOTION_STATE_H
diff --git a/thirdparty/bullet/LinearMath/btGeometryUtil.cpp b/thirdparty/bullet/LinearMath/btGeometryUtil.cpp
deleted file mode 100644
index 115e3eab81..0000000000
--- a/thirdparty/bullet/LinearMath/btGeometryUtil.cpp
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btGeometryUtil.h"
-
-/*
- Make sure this dummy function never changes so that it
- can be used by probes that are checking whether the
- library is actually installed.
-*/
-extern "C"
-{
- void btBulletMathProbe();
-
- void btBulletMathProbe() {}
-}
-
-bool btGeometryUtil::isPointInsidePlanes(const btAlignedObjectArray<btVector3>& planeEquations, const btVector3& point, btScalar margin)
-{
- int numbrushes = planeEquations.size();
- for (int i = 0; i < numbrushes; i++)
- {
- const btVector3& N1 = planeEquations[i];
- btScalar dist = btScalar(N1.dot(point)) + btScalar(N1[3]) - margin;
- if (dist > btScalar(0.))
- {
- return false;
- }
- }
- return true;
-}
-
-bool btGeometryUtil::areVerticesBehindPlane(const btVector3& planeNormal, const btAlignedObjectArray<btVector3>& vertices, btScalar margin)
-{
- int numvertices = vertices.size();
- for (int i = 0; i < numvertices; i++)
- {
- const btVector3& N1 = vertices[i];
- btScalar dist = btScalar(planeNormal.dot(N1)) + btScalar(planeNormal[3]) - margin;
- if (dist > btScalar(0.))
- {
- return false;
- }
- }
- return true;
-}
-
-bool notExist(const btVector3& planeEquation, const btAlignedObjectArray<btVector3>& planeEquations);
-
-bool notExist(const btVector3& planeEquation, const btAlignedObjectArray<btVector3>& planeEquations)
-{
- int numbrushes = planeEquations.size();
- for (int i = 0; i < numbrushes; i++)
- {
- const btVector3& N1 = planeEquations[i];
- if (planeEquation.dot(N1) > btScalar(0.999))
- {
- return false;
- }
- }
- return true;
-}
-
-void btGeometryUtil::getPlaneEquationsFromVertices(btAlignedObjectArray<btVector3>& vertices, btAlignedObjectArray<btVector3>& planeEquationsOut)
-{
- const int numvertices = vertices.size();
- // brute force:
- for (int i = 0; i < numvertices; i++)
- {
- const btVector3& N1 = vertices[i];
-
- for (int j = i + 1; j < numvertices; j++)
- {
- const btVector3& N2 = vertices[j];
-
- for (int k = j + 1; k < numvertices; k++)
- {
- const btVector3& N3 = vertices[k];
-
- btVector3 planeEquation, edge0, edge1;
- edge0 = N2 - N1;
- edge1 = N3 - N1;
- btScalar normalSign = btScalar(1.);
- for (int ww = 0; ww < 2; ww++)
- {
- planeEquation = normalSign * edge0.cross(edge1);
- if (planeEquation.length2() > btScalar(0.0001))
- {
- planeEquation.normalize();
- if (notExist(planeEquation, planeEquationsOut))
- {
- planeEquation[3] = -planeEquation.dot(N1);
-
- //check if inside, and replace supportingVertexOut if needed
- if (areVerticesBehindPlane(planeEquation, vertices, btScalar(0.01)))
- {
- planeEquationsOut.push_back(planeEquation);
- }
- }
- }
- normalSign = btScalar(-1.);
- }
- }
- }
- }
-}
-
-void btGeometryUtil::getVerticesFromPlaneEquations(const btAlignedObjectArray<btVector3>& planeEquations, btAlignedObjectArray<btVector3>& verticesOut)
-{
- const int numbrushes = planeEquations.size();
- // brute force:
- for (int i = 0; i < numbrushes; i++)
- {
- const btVector3& N1 = planeEquations[i];
-
- for (int j = i + 1; j < numbrushes; j++)
- {
- const btVector3& N2 = planeEquations[j];
-
- for (int k = j + 1; k < numbrushes; k++)
- {
- const btVector3& N3 = planeEquations[k];
-
- btVector3 n2n3;
- n2n3 = N2.cross(N3);
- btVector3 n3n1;
- n3n1 = N3.cross(N1);
- btVector3 n1n2;
- n1n2 = N1.cross(N2);
-
- if ((n2n3.length2() > btScalar(0.0001)) &&
- (n3n1.length2() > btScalar(0.0001)) &&
- (n1n2.length2() > btScalar(0.0001)))
- {
- //point P out of 3 plane equations:
-
- // d1 ( N2 * N3 ) + d2 ( N3 * N1 ) + d3 ( N1 * N2 )
- //P = -------------------------------------------------------------------------
- // N1 . ( N2 * N3 )
-
- btScalar quotient = (N1.dot(n2n3));
- if (btFabs(quotient) > btScalar(0.000001))
- {
- quotient = btScalar(-1.) / quotient;
- n2n3 *= N1[3];
- n3n1 *= N2[3];
- n1n2 *= N3[3];
- btVector3 potentialVertex = n2n3;
- potentialVertex += n3n1;
- potentialVertex += n1n2;
- potentialVertex *= quotient;
-
- //check if inside, and replace supportingVertexOut if needed
- if (isPointInsidePlanes(planeEquations, potentialVertex, btScalar(0.01)))
- {
- verticesOut.push_back(potentialVertex);
- }
- }
- }
- }
- }
- }
-}
diff --git a/thirdparty/bullet/LinearMath/btGeometryUtil.h b/thirdparty/bullet/LinearMath/btGeometryUtil.h
deleted file mode 100644
index 0ce5b76d92..0000000000
--- a/thirdparty/bullet/LinearMath/btGeometryUtil.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GEOMETRY_UTIL_H
-#define BT_GEOMETRY_UTIL_H
-
-#include "btVector3.h"
-#include "btAlignedObjectArray.h"
-
-///The btGeometryUtil helper class provides a few methods to convert between plane equations and vertices.
-class btGeometryUtil
-{
-public:
- static void getPlaneEquationsFromVertices(btAlignedObjectArray<btVector3>& vertices, btAlignedObjectArray<btVector3>& planeEquationsOut);
-
- static void getVerticesFromPlaneEquations(const btAlignedObjectArray<btVector3>& planeEquations, btAlignedObjectArray<btVector3>& verticesOut);
-
- static bool isInside(const btAlignedObjectArray<btVector3>& vertices, const btVector3& planeNormal, btScalar margin);
-
- static bool isPointInsidePlanes(const btAlignedObjectArray<btVector3>& planeEquations, const btVector3& point, btScalar margin);
-
- static bool areVerticesBehindPlane(const btVector3& planeNormal, const btAlignedObjectArray<btVector3>& vertices, btScalar margin);
-};
-
-#endif //BT_GEOMETRY_UTIL_H
diff --git a/thirdparty/bullet/LinearMath/btGrahamScan2dConvexHull.h b/thirdparty/bullet/LinearMath/btGrahamScan2dConvexHull.h
deleted file mode 100644
index 0fcb285971..0000000000
--- a/thirdparty/bullet/LinearMath/btGrahamScan2dConvexHull.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2011 Advanced Micro Devices, Inc. http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef GRAHAM_SCAN_2D_CONVEX_HULL_H
-#define GRAHAM_SCAN_2D_CONVEX_HULL_H
-
-#include "btVector3.h"
-#include "btAlignedObjectArray.h"
-
-struct GrahamVector3 : public btVector3
-{
- GrahamVector3(const btVector3& org, int orgIndex)
- : btVector3(org),
- m_orgIndex(orgIndex)
- {
- }
- btScalar m_angle;
- int m_orgIndex;
-};
-
-struct btAngleCompareFunc
-{
- btVector3 m_anchor;
- btAngleCompareFunc(const btVector3& anchor)
- : m_anchor(anchor)
- {
- }
- bool operator()(const GrahamVector3& a, const GrahamVector3& b) const
- {
- if (a.m_angle != b.m_angle)
- return a.m_angle < b.m_angle;
- else
- {
- btScalar al = (a - m_anchor).length2();
- btScalar bl = (b - m_anchor).length2();
- if (al != bl)
- return al < bl;
- else
- {
- return a.m_orgIndex < b.m_orgIndex;
- }
- }
- }
-};
-
-inline void GrahamScanConvexHull2D(btAlignedObjectArray<GrahamVector3>& originalPoints, btAlignedObjectArray<GrahamVector3>& hull, const btVector3& normalAxis)
-{
- btVector3 axis0, axis1;
- btPlaneSpace1(normalAxis, axis0, axis1);
-
- if (originalPoints.size() <= 1)
- {
- for (int i = 0; i < originalPoints.size(); i++)
- hull.push_back(originalPoints[0]);
- return;
- }
- //step1 : find anchor point with smallest projection on axis0 and move it to first location
- for (int i = 0; i < originalPoints.size(); i++)
- {
- // const btVector3& left = originalPoints[i];
- // const btVector3& right = originalPoints[0];
- btScalar projL = originalPoints[i].dot(axis0);
- btScalar projR = originalPoints[0].dot(axis0);
- if (projL < projR)
- {
- originalPoints.swap(0, i);
- }
- }
-
- //also precompute angles
- originalPoints[0].m_angle = -1e30f;
- for (int i = 1; i < originalPoints.size(); i++)
- {
- btVector3 ar = originalPoints[i] - originalPoints[0];
- btScalar ar1 = axis1.dot(ar);
- btScalar ar0 = axis0.dot(ar);
- if (ar1 * ar1 + ar0 * ar0 < FLT_EPSILON)
- {
- originalPoints[i].m_angle = 0.0f;
- }
- else
- {
- originalPoints[i].m_angle = btAtan2Fast(ar1, ar0);
- }
- }
-
- //step 2: sort all points, based on 'angle' with this anchor
- btAngleCompareFunc comp(originalPoints[0]);
- originalPoints.quickSortInternal(comp, 1, originalPoints.size() - 1);
-
- int i;
- for (i = 0; i < 2; i++)
- hull.push_back(originalPoints[i]);
-
- //step 3: keep all 'convex' points and discard concave points (using back tracking)
- for (; i != originalPoints.size(); i++)
- {
- bool isConvex = false;
- while (!isConvex && hull.size() > 1)
- {
- btVector3& a = hull[hull.size() - 2];
- btVector3& b = hull[hull.size() - 1];
- isConvex = btCross(a - b, a - originalPoints[i]).dot(normalAxis) > 0;
- if (!isConvex)
- hull.pop_back();
- else
- hull.push_back(originalPoints[i]);
- }
-
- if (hull.size() == 1)
- {
- hull.push_back(originalPoints[i]);
- }
- }
-}
-
-#endif //GRAHAM_SCAN_2D_CONVEX_HULL_H
diff --git a/thirdparty/bullet/LinearMath/btHashMap.h b/thirdparty/bullet/LinearMath/btHashMap.h
deleted file mode 100644
index 1fca0fb73a..0000000000
--- a/thirdparty/bullet/LinearMath/btHashMap.h
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_HASH_MAP_H
-#define BT_HASH_MAP_H
-
-#include <string>
-#include "btAlignedObjectArray.h"
-
-///very basic hashable string implementation, compatible with btHashMap
-struct btHashString
-{
- std::string m_string1;
- unsigned int m_hash;
-
- SIMD_FORCE_INLINE unsigned int getHash() const
- {
- return m_hash;
- }
-
- btHashString()
- {
- m_string1 = "";
- m_hash = 0;
- }
- btHashString(const char* name)
- : m_string1(name)
- {
- /* magic numbers from http://www.isthe.com/chongo/tech/comp/fnv/ */
- static const unsigned int InitialFNV = 2166136261u;
- static const unsigned int FNVMultiple = 16777619u;
-
- /* Fowler / Noll / Vo (FNV) Hash */
- unsigned int hash = InitialFNV;
-
- for (int i = 0; m_string1.c_str()[i]; i++)
- {
- hash = hash ^ (m_string1.c_str()[i]); /* xor the low 8 bits */
- hash = hash * FNVMultiple; /* multiply by the magic number */
- }
- m_hash = hash;
- }
-
- bool equals(const btHashString& other) const
- {
- return (m_string1 == other.m_string1);
- }
-};
-
-const int BT_HASH_NULL = 0xffffffff;
-
-class btHashInt
-{
- int m_uid;
-
-public:
- btHashInt()
- {
- }
-
- btHashInt(int uid) : m_uid(uid)
- {
- }
-
- int getUid1() const
- {
- return m_uid;
- }
-
- void setUid1(int uid)
- {
- m_uid = uid;
- }
-
- bool equals(const btHashInt& other) const
- {
- return getUid1() == other.getUid1();
- }
- //to our success
- SIMD_FORCE_INLINE unsigned int getHash() const
- {
- unsigned int key = m_uid;
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
-
- return key;
- }
-};
-
-class btHashPtr
-{
- union {
- const void* m_pointer;
- unsigned int m_hashValues[2];
- };
-
-public:
- btHashPtr(const void* ptr)
- : m_pointer(ptr)
- {
- }
-
- const void* getPointer() const
- {
- return m_pointer;
- }
-
- bool equals(const btHashPtr& other) const
- {
- return getPointer() == other.getPointer();
- }
-
- //to our success
- SIMD_FORCE_INLINE unsigned int getHash() const
- {
- const bool VOID_IS_8 = ((sizeof(void*) == 8));
-
- unsigned int key = VOID_IS_8 ? m_hashValues[0] + m_hashValues[1] : m_hashValues[0];
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-template <class Value>
-class btHashKeyPtr
-{
- int m_uid;
-
-public:
- btHashKeyPtr(int uid) : m_uid(uid)
- {
- }
-
- int getUid1() const
- {
- return m_uid;
- }
-
- bool equals(const btHashKeyPtr<Value>& other) const
- {
- return getUid1() == other.getUid1();
- }
-
- //to our success
- SIMD_FORCE_INLINE unsigned int getHash() const
- {
- unsigned int key = m_uid;
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-template <class Value>
-class btHashKey
-{
- int m_uid;
-
-public:
- btHashKey(int uid) : m_uid(uid)
- {
- }
-
- int getUid1() const
- {
- return m_uid;
- }
-
- bool equals(const btHashKey<Value>& other) const
- {
- return getUid1() == other.getUid1();
- }
- //to our success
- SIMD_FORCE_INLINE unsigned int getHash() const
- {
- unsigned int key = m_uid;
- // Thomas Wang's hash
- key += ~(key << 15);
- key ^= (key >> 10);
- key += (key << 3);
- key ^= (key >> 6);
- key += ~(key << 11);
- key ^= (key >> 16);
- return key;
- }
-};
-
-///The btHashMap template class implements a generic and lightweight hashmap.
-///A basic sample of how to use btHashMap is located in Demos\BasicDemo\main.cpp
-template <class Key, class Value>
-class btHashMap
-{
-protected:
- btAlignedObjectArray<int> m_hashTable;
- btAlignedObjectArray<int> m_next;
-
- btAlignedObjectArray<Value> m_valueArray;
- btAlignedObjectArray<Key> m_keyArray;
-
- void growTables(const Key& /*key*/)
- {
- int newCapacity = m_valueArray.capacity();
-
- if (m_hashTable.size() < newCapacity)
- {
- //grow hashtable and next table
- int curHashtableSize = m_hashTable.size();
-
- m_hashTable.resize(newCapacity);
- m_next.resize(newCapacity);
-
- int i;
-
- for (i = 0; i < newCapacity; ++i)
- {
- m_hashTable[i] = BT_HASH_NULL;
- }
- for (i = 0; i < newCapacity; ++i)
- {
- m_next[i] = BT_HASH_NULL;
- }
-
- for (i = 0; i < curHashtableSize; i++)
- {
- //const Value& value = m_valueArray[i];
- //const Key& key = m_keyArray[i];
-
- int hashValue = m_keyArray[i].getHash() & (m_valueArray.capacity() - 1); // New hash value with new mask
- m_next[i] = m_hashTable[hashValue];
- m_hashTable[hashValue] = i;
- }
- }
- }
-
-public:
- void insert(const Key& key, const Value& value)
- {
- int hash = key.getHash() & (m_valueArray.capacity() - 1);
-
- //replace value if the key is already there
- int index = findIndex(key);
- if (index != BT_HASH_NULL)
- {
- m_valueArray[index] = value;
- return;
- }
-
- int count = m_valueArray.size();
- int oldCapacity = m_valueArray.capacity();
- m_valueArray.push_back(value);
- m_keyArray.push_back(key);
-
- int newCapacity = m_valueArray.capacity();
- if (oldCapacity < newCapacity)
- {
- growTables(key);
- //hash with new capacity
- hash = key.getHash() & (m_valueArray.capacity() - 1);
- }
- m_next[count] = m_hashTable[hash];
- m_hashTable[hash] = count;
- }
-
- void remove(const Key& key)
- {
- int hash = key.getHash() & (m_valueArray.capacity() - 1);
-
- int pairIndex = findIndex(key);
-
- if (pairIndex == BT_HASH_NULL)
- {
- return;
- }
-
- // Remove the pair from the hash table.
- int index = m_hashTable[hash];
- btAssert(index != BT_HASH_NULL);
-
- int previous = BT_HASH_NULL;
- while (index != pairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != BT_HASH_NULL)
- {
- btAssert(m_next[previous] == pairIndex);
- m_next[previous] = m_next[pairIndex];
- }
- else
- {
- m_hashTable[hash] = m_next[pairIndex];
- }
-
- // We now move the last pair into spot of the
- // pair being removed. We need to fix the hash
- // table indices to support the move.
-
- int lastPairIndex = m_valueArray.size() - 1;
-
- // If the removed pair is the last pair, we are done.
- if (lastPairIndex == pairIndex)
- {
- m_valueArray.pop_back();
- m_keyArray.pop_back();
- return;
- }
-
- // Remove the last pair from the hash table.
- int lastHash = m_keyArray[lastPairIndex].getHash() & (m_valueArray.capacity() - 1);
-
- index = m_hashTable[lastHash];
- btAssert(index != BT_HASH_NULL);
-
- previous = BT_HASH_NULL;
- while (index != lastPairIndex)
- {
- previous = index;
- index = m_next[index];
- }
-
- if (previous != BT_HASH_NULL)
- {
- btAssert(m_next[previous] == lastPairIndex);
- m_next[previous] = m_next[lastPairIndex];
- }
- else
- {
- m_hashTable[lastHash] = m_next[lastPairIndex];
- }
-
- // Copy the last pair into the remove pair's spot.
- m_valueArray[pairIndex] = m_valueArray[lastPairIndex];
- m_keyArray[pairIndex] = m_keyArray[lastPairIndex];
-
- // Insert the last pair into the hash table
- m_next[pairIndex] = m_hashTable[lastHash];
- m_hashTable[lastHash] = pairIndex;
-
- m_valueArray.pop_back();
- m_keyArray.pop_back();
- }
-
- int size() const
- {
- return m_valueArray.size();
- }
-
- const Value* getAtIndex(int index) const
- {
- btAssert(index < m_valueArray.size());
- btAssert(index >= 0);
- if (index >= 0 && index < m_valueArray.size())
- {
- return &m_valueArray[index];
- }
- return 0;
- }
-
- Value* getAtIndex(int index)
- {
- btAssert(index < m_valueArray.size());
- btAssert(index >= 0);
- if (index >= 0 && index < m_valueArray.size())
- {
- return &m_valueArray[index];
- }
- return 0;
- }
-
- Key getKeyAtIndex(int index)
- {
- btAssert(index < m_keyArray.size());
- btAssert(index >= 0);
- return m_keyArray[index];
- }
-
- const Key getKeyAtIndex(int index) const
- {
- btAssert(index < m_keyArray.size());
- btAssert(index >= 0);
- return m_keyArray[index];
- }
-
- Value* operator[](const Key& key)
- {
- return find(key);
- }
-
- const Value* operator[](const Key& key) const
- {
- return find(key);
- }
-
- const Value* find(const Key& key) const
- {
- int index = findIndex(key);
- if (index == BT_HASH_NULL)
- {
- return NULL;
- }
- return &m_valueArray[index];
- }
-
- Value* find(const Key& key)
- {
- int index = findIndex(key);
- if (index == BT_HASH_NULL)
- {
- return NULL;
- }
- return &m_valueArray[index];
- }
-
- int findIndex(const Key& key) const
- {
- unsigned int hash = key.getHash() & (m_valueArray.capacity() - 1);
-
- if (hash >= (unsigned int)m_hashTable.size())
- {
- return BT_HASH_NULL;
- }
-
- int index = m_hashTable[hash];
- while ((index != BT_HASH_NULL) && key.equals(m_keyArray[index]) == false)
- {
- index = m_next[index];
- }
- return index;
- }
-
- void clear()
- {
- m_hashTable.clear();
- m_next.clear();
- m_valueArray.clear();
- m_keyArray.clear();
- }
-};
-
-#endif //BT_HASH_MAP_H
diff --git a/thirdparty/bullet/LinearMath/btIDebugDraw.h b/thirdparty/bullet/LinearMath/btIDebugDraw.h
deleted file mode 100644
index df4db2ff5a..0000000000
--- a/thirdparty/bullet/LinearMath/btIDebugDraw.h
+++ /dev/null
@@ -1,473 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_IDEBUG_DRAW__H
-#define BT_IDEBUG_DRAW__H
-
-#include "btVector3.h"
-#include "btTransform.h"
-
-///The btIDebugDraw interface class allows hooking up a debug renderer to visually debug simulations.
-///Typical use case: create a debug drawer object, and assign it to a btCollisionWorld or btDynamicsWorld using setDebugDrawer and call debugDrawWorld.
-///A class that implements the btIDebugDraw interface will need to provide non-empty implementations of the the drawLine and getDebugMode methods at a minimum.
-///For color arguments the X,Y,Z components refer to Red, Green and Blue each in the range [0..1]
-class btIDebugDraw
-{
-public:
- ATTRIBUTE_ALIGNED16(struct)
- DefaultColors
- {
- btVector3 m_activeObject;
- btVector3 m_deactivatedObject;
- btVector3 m_wantsDeactivationObject;
- btVector3 m_disabledDeactivationObject;
- btVector3 m_disabledSimulationObject;
- btVector3 m_aabb;
- btVector3 m_contactPoint;
-
- DefaultColors()
- : m_activeObject(1, 1, 1),
- m_deactivatedObject(0, 1, 0),
- m_wantsDeactivationObject(0, 1, 1),
- m_disabledDeactivationObject(1, 0, 0),
- m_disabledSimulationObject(1, 1, 0),
- m_aabb(1, 0, 0),
- m_contactPoint(1, 1, 0)
- {
- }
- };
-
- enum DebugDrawModes
- {
- DBG_NoDebug = 0,
- DBG_DrawWireframe = 1,
- DBG_DrawAabb = 2,
- DBG_DrawFeaturesText = 4,
- DBG_DrawContactPoints = 8,
- DBG_NoDeactivation = 16,
- DBG_NoHelpText = 32,
- DBG_DrawText = 64,
- DBG_ProfileTimings = 128,
- DBG_EnableSatComparison = 256,
- DBG_DisableBulletLCP = 512,
- DBG_EnableCCD = 1024,
- DBG_DrawConstraints = (1 << 11),
- DBG_DrawConstraintLimits = (1 << 12),
- DBG_FastWireframe = (1 << 13),
- DBG_DrawNormals = (1 << 14),
- DBG_DrawFrames = (1 << 15),
- DBG_MAX_DEBUG_DRAW_MODE
- };
-
- virtual ~btIDebugDraw(){};
-
- virtual DefaultColors getDefaultColors() const
- {
- DefaultColors colors;
- return colors;
- }
- ///the default implementation for setDefaultColors has no effect. A derived class can implement it and store the colors.
- virtual void setDefaultColors(const DefaultColors& /*colors*/) {}
-
- virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& color) = 0;
-
- virtual void drawLine(const btVector3& from, const btVector3& to, const btVector3& fromColor, const btVector3& toColor)
- {
- (void)toColor;
- drawLine(from, to, fromColor);
- }
-
- virtual void drawSphere(btScalar radius, const btTransform& transform, const btVector3& color)
- {
- btVector3 center = transform.getOrigin();
- btVector3 up = transform.getBasis().getColumn(1);
- btVector3 axis = transform.getBasis().getColumn(0);
- btScalar minTh = -SIMD_HALF_PI;
- btScalar maxTh = SIMD_HALF_PI;
- btScalar minPs = -SIMD_HALF_PI;
- btScalar maxPs = SIMD_HALF_PI;
- btScalar stepDegrees = 30.f;
- drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees, false);
- drawSpherePatch(center, up, -axis, radius, minTh, maxTh, minPs, maxPs, color, stepDegrees, false);
- }
-
- virtual void drawSphere(const btVector3& p, btScalar radius, const btVector3& color)
- {
- btTransform tr;
- tr.setIdentity();
- tr.setOrigin(p);
- drawSphere(radius, tr, color);
- }
-
- virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& /*n0*/, const btVector3& /*n1*/, const btVector3& /*n2*/, const btVector3& color, btScalar alpha)
- {
- drawTriangle(v0, v1, v2, color, alpha);
- }
- virtual void drawTriangle(const btVector3& v0, const btVector3& v1, const btVector3& v2, const btVector3& color, btScalar /*alpha*/)
- {
- drawLine(v0, v1, color);
- drawLine(v1, v2, color);
- drawLine(v2, v0, color);
- }
-
- virtual void drawContactPoint(const btVector3& PointOnB, const btVector3& normalOnB, btScalar distance, int lifeTime, const btVector3& color) = 0;
-
- virtual void reportErrorWarning(const char* warningString) = 0;
-
- virtual void draw3dText(const btVector3& location, const char* textString) = 0;
-
- virtual void setDebugMode(int debugMode) = 0;
-
- virtual int getDebugMode() const = 0;
-
- virtual void drawAabb(const btVector3& from, const btVector3& to, const btVector3& color)
- {
- btVector3 halfExtents = (to - from) * 0.5f;
- btVector3 center = (to + from) * 0.5f;
- int i, j;
-
- btVector3 edgecoord(1.f, 1.f, 1.f), pa, pb;
- for (i = 0; i < 4; i++)
- {
- for (j = 0; j < 3; j++)
- {
- pa = btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1],
- edgecoord[2] * halfExtents[2]);
- pa += center;
-
- int othercoord = j % 3;
- edgecoord[othercoord] *= -1.f;
- pb = btVector3(edgecoord[0] * halfExtents[0], edgecoord[1] * halfExtents[1],
- edgecoord[2] * halfExtents[2]);
- pb += center;
-
- drawLine(pa, pb, color);
- }
- edgecoord = btVector3(-1.f, -1.f, -1.f);
- if (i < 3)
- edgecoord[i] *= -1.f;
- }
- }
- virtual void drawTransform(const btTransform& transform, btScalar orthoLen)
- {
- btVector3 start = transform.getOrigin();
- drawLine(start, start + transform.getBasis() * btVector3(orthoLen, 0, 0), btVector3(btScalar(1.), btScalar(0.3), btScalar(0.3)));
- drawLine(start, start + transform.getBasis() * btVector3(0, orthoLen, 0), btVector3(btScalar(0.3), btScalar(1.), btScalar(0.3)));
- drawLine(start, start + transform.getBasis() * btVector3(0, 0, orthoLen), btVector3(btScalar(0.3), btScalar(0.3), btScalar(1.)));
- }
-
- virtual void drawArc(const btVector3& center, const btVector3& normal, const btVector3& axis, btScalar radiusA, btScalar radiusB, btScalar minAngle, btScalar maxAngle,
- const btVector3& color, bool drawSect, btScalar stepDegrees = btScalar(10.f))
- {
- const btVector3& vx = axis;
- btVector3 vy = normal.cross(axis);
- btScalar step = stepDegrees * SIMD_RADS_PER_DEG;
- int nSteps = (int)btFabs((maxAngle - minAngle) / step);
- if (!nSteps) nSteps = 1;
- btVector3 prev = center + radiusA * vx * btCos(minAngle) + radiusB * vy * btSin(minAngle);
- if (drawSect)
- {
- drawLine(center, prev, color);
- }
- for (int i = 1; i <= nSteps; i++)
- {
- btScalar angle = minAngle + (maxAngle - minAngle) * btScalar(i) / btScalar(nSteps);
- btVector3 next = center + radiusA * vx * btCos(angle) + radiusB * vy * btSin(angle);
- drawLine(prev, next, color);
- prev = next;
- }
- if (drawSect)
- {
- drawLine(center, prev, color);
- }
- }
- virtual void drawSpherePatch(const btVector3& center, const btVector3& up, const btVector3& axis, btScalar radius,
- btScalar minTh, btScalar maxTh, btScalar minPs, btScalar maxPs, const btVector3& color, btScalar stepDegrees = btScalar(10.f), bool drawCenter = true)
- {
- btVector3 vA[74];
- btVector3 vB[74];
- btVector3 *pvA = vA, *pvB = vB, *pT;
- btVector3 npole = center + up * radius;
- btVector3 spole = center - up * radius;
- btVector3 arcStart;
- btScalar step = stepDegrees * SIMD_RADS_PER_DEG;
- const btVector3& kv = up;
- const btVector3& iv = axis;
- btVector3 jv = kv.cross(iv);
- bool drawN = false;
- bool drawS = false;
- if (minTh <= -SIMD_HALF_PI)
- {
- minTh = -SIMD_HALF_PI + step;
- drawN = true;
- }
- if (maxTh >= SIMD_HALF_PI)
- {
- maxTh = SIMD_HALF_PI - step;
- drawS = true;
- }
- if (minTh > maxTh)
- {
- minTh = -SIMD_HALF_PI + step;
- maxTh = SIMD_HALF_PI - step;
- drawN = drawS = true;
- }
- int n_hor = (int)((maxTh - minTh) / step) + 1;
- if (n_hor < 2) n_hor = 2;
- btScalar step_h = (maxTh - minTh) / btScalar(n_hor - 1);
- bool isClosed = false;
- if (minPs > maxPs)
- {
- minPs = -SIMD_PI + step;
- maxPs = SIMD_PI;
- isClosed = true;
- }
- else if ((maxPs - minPs) >= SIMD_PI * btScalar(2.f))
- {
- isClosed = true;
- }
- else
- {
- isClosed = false;
- }
- int n_vert = (int)((maxPs - minPs) / step) + 1;
- if (n_vert < 2) n_vert = 2;
- btScalar step_v = (maxPs - minPs) / btScalar(n_vert - 1);
- for (int i = 0; i < n_hor; i++)
- {
- btScalar th = minTh + btScalar(i) * step_h;
- btScalar sth = radius * btSin(th);
- btScalar cth = radius * btCos(th);
- for (int j = 0; j < n_vert; j++)
- {
- btScalar psi = minPs + btScalar(j) * step_v;
- btScalar sps = btSin(psi);
- btScalar cps = btCos(psi);
- pvB[j] = center + cth * cps * iv + cth * sps * jv + sth * kv;
- if (i)
- {
- drawLine(pvA[j], pvB[j], color);
- }
- else if (drawS)
- {
- drawLine(spole, pvB[j], color);
- }
- if (j)
- {
- drawLine(pvB[j - 1], pvB[j], color);
- }
- else
- {
- arcStart = pvB[j];
- }
- if ((i == (n_hor - 1)) && drawN)
- {
- drawLine(npole, pvB[j], color);
- }
-
- if (drawCenter)
- {
- if (isClosed)
- {
- if (j == (n_vert - 1))
- {
- drawLine(arcStart, pvB[j], color);
- }
- }
- else
- {
- if (((!i) || (i == (n_hor - 1))) && ((!j) || (j == (n_vert - 1))))
- {
- drawLine(center, pvB[j], color);
- }
- }
- }
- }
- pT = pvA;
- pvA = pvB;
- pvB = pT;
- }
- }
-
- virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btVector3& color)
- {
- drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMin[2]), color);
- drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMin[2]), color);
- drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMin[2]), color);
- drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMin[2]), color);
- drawLine(btVector3(bbMin[0], bbMin[1], bbMin[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color);
- drawLine(btVector3(bbMax[0], bbMin[1], bbMin[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color);
- drawLine(btVector3(bbMax[0], bbMax[1], bbMin[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color);
- drawLine(btVector3(bbMin[0], bbMax[1], bbMin[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color);
- drawLine(btVector3(bbMin[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMin[1], bbMax[2]), color);
- drawLine(btVector3(bbMax[0], bbMin[1], bbMax[2]), btVector3(bbMax[0], bbMax[1], bbMax[2]), color);
- drawLine(btVector3(bbMax[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMax[1], bbMax[2]), color);
- drawLine(btVector3(bbMin[0], bbMax[1], bbMax[2]), btVector3(bbMin[0], bbMin[1], bbMax[2]), color);
- }
- virtual void drawBox(const btVector3& bbMin, const btVector3& bbMax, const btTransform& trans, const btVector3& color)
- {
- drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), color);
- drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), color);
- drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), color);
- drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), color);
- drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMin[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMin[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMin[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMin[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMax[0], bbMin[1], bbMax[2]), trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMax[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), color);
- drawLine(trans * btVector3(bbMin[0], bbMax[1], bbMax[2]), trans * btVector3(bbMin[0], bbMin[1], bbMax[2]), color);
- }
-
- virtual void drawCapsule(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color)
- {
- int stepDegrees = 30;
-
- btVector3 capStart(0.f, 0.f, 0.f);
- capStart[upAxis] = -halfHeight;
-
- btVector3 capEnd(0.f, 0.f, 0.f);
- capEnd[upAxis] = halfHeight;
-
- // Draw the ends
- {
- btTransform childTransform = transform;
- childTransform.getOrigin() = transform * capStart;
- {
- btVector3 center = childTransform.getOrigin();
- btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3);
- btVector3 axis = -childTransform.getBasis().getColumn(upAxis);
- btScalar minTh = -SIMD_HALF_PI;
- btScalar maxTh = SIMD_HALF_PI;
- btScalar minPs = -SIMD_HALF_PI;
- btScalar maxPs = SIMD_HALF_PI;
-
- drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, btScalar(stepDegrees), false);
- }
- }
-
- {
- btTransform childTransform = transform;
- childTransform.getOrigin() = transform * capEnd;
- {
- btVector3 center = childTransform.getOrigin();
- btVector3 up = childTransform.getBasis().getColumn((upAxis + 1) % 3);
- btVector3 axis = childTransform.getBasis().getColumn(upAxis);
- btScalar minTh = -SIMD_HALF_PI;
- btScalar maxTh = SIMD_HALF_PI;
- btScalar minPs = -SIMD_HALF_PI;
- btScalar maxPs = SIMD_HALF_PI;
- drawSpherePatch(center, up, axis, radius, minTh, maxTh, minPs, maxPs, color, btScalar(stepDegrees), false);
- }
- }
-
- // Draw some additional lines
- btVector3 start = transform.getOrigin();
-
- for (int i = 0; i < 360; i += stepDegrees)
- {
- capEnd[(upAxis + 1) % 3] = capStart[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius;
- capEnd[(upAxis + 2) % 3] = capStart[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius;
- drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color);
- }
- }
-
- virtual void drawCylinder(btScalar radius, btScalar halfHeight, int upAxis, const btTransform& transform, const btVector3& color)
- {
- btVector3 start = transform.getOrigin();
- btVector3 offsetHeight(0, 0, 0);
- offsetHeight[upAxis] = halfHeight;
- int stepDegrees = 30;
- btVector3 capStart(0.f, 0.f, 0.f);
- capStart[upAxis] = -halfHeight;
- btVector3 capEnd(0.f, 0.f, 0.f);
- capEnd[upAxis] = halfHeight;
-
- for (int i = 0; i < 360; i += stepDegrees)
- {
- capEnd[(upAxis + 1) % 3] = capStart[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius;
- capEnd[(upAxis + 2) % 3] = capStart[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius;
- drawLine(start + transform.getBasis() * capStart, start + transform.getBasis() * capEnd, color);
- }
- // Drawing top and bottom caps of the cylinder
- btVector3 yaxis(0, 0, 0);
- yaxis[upAxis] = btScalar(1.0);
- btVector3 xaxis(0, 0, 0);
- xaxis[(upAxis + 1) % 3] = btScalar(1.0);
- drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, btScalar(10.0));
- drawArc(start + transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, btScalar(10.0));
- }
-
- virtual void drawCone(btScalar radius, btScalar height, int upAxis, const btTransform& transform, const btVector3& color)
- {
- int stepDegrees = 30;
- btVector3 start = transform.getOrigin();
-
- btVector3 offsetHeight(0, 0, 0);
- btScalar halfHeight = height * btScalar(0.5);
- offsetHeight[upAxis] = halfHeight;
- btVector3 offsetRadius(0, 0, 0);
- offsetRadius[(upAxis + 1) % 3] = radius;
- btVector3 offset2Radius(0, 0, 0);
- offset2Radius[(upAxis + 2) % 3] = radius;
-
- btVector3 capEnd(0.f, 0.f, 0.f);
- capEnd[upAxis] = -halfHeight;
-
- for (int i = 0; i < 360; i += stepDegrees)
- {
- capEnd[(upAxis + 1) % 3] = btSin(btScalar(i) * SIMD_RADS_PER_DEG) * radius;
- capEnd[(upAxis + 2) % 3] = btCos(btScalar(i) * SIMD_RADS_PER_DEG) * radius;
- drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * capEnd, color);
- }
-
- drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offsetRadius), color);
- drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offsetRadius), color);
- drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight + offset2Radius), color);
- drawLine(start + transform.getBasis() * (offsetHeight), start + transform.getBasis() * (-offsetHeight - offset2Radius), color);
-
- // Drawing the base of the cone
- btVector3 yaxis(0, 0, 0);
- yaxis[upAxis] = btScalar(1.0);
- btVector3 xaxis(0, 0, 0);
- xaxis[(upAxis + 1) % 3] = btScalar(1.0);
- drawArc(start - transform.getBasis() * (offsetHeight), transform.getBasis() * yaxis, transform.getBasis() * xaxis, radius, radius, 0, SIMD_2_PI, color, false, 10.0);
- }
-
- virtual void drawPlane(const btVector3& planeNormal, btScalar planeConst, const btTransform& transform, const btVector3& color)
- {
- btVector3 planeOrigin = planeNormal * planeConst;
- btVector3 vec0, vec1;
- btPlaneSpace1(planeNormal, vec0, vec1);
- btScalar vecLen = 100.f;
- btVector3 pt0 = planeOrigin + vec0 * vecLen;
- btVector3 pt1 = planeOrigin - vec0 * vecLen;
- btVector3 pt2 = planeOrigin + vec1 * vecLen;
- btVector3 pt3 = planeOrigin - vec1 * vecLen;
- drawLine(transform * pt0, transform * pt1, color);
- drawLine(transform * pt2, transform * pt3, color);
- }
-
- virtual void clearLines()
- {
- }
-
- virtual void flushLines()
- {
- }
-};
-
-#endif //BT_IDEBUG_DRAW__H
diff --git a/thirdparty/bullet/LinearMath/btImplicitQRSVD.h b/thirdparty/bullet/LinearMath/btImplicitQRSVD.h
deleted file mode 100644
index aaedc964f6..0000000000
--- a/thirdparty/bullet/LinearMath/btImplicitQRSVD.h
+++ /dev/null
@@ -1,916 +0,0 @@
-/**
- Bullet Continuous Collision Detection and Physics Library
- Copyright (c) 2019 Google Inc. http://bulletphysics.org
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- Copyright (c) 2016 Theodore Gast, Chuyuan Fu, Chenfanfu Jiang, Joseph Teran
-
- Permission is hereby granted, free of charge, to any person obtaining a copy of
- this software and associated documentation files (the "Software"), to deal in
- the Software without restriction, including without limitation the rights to
- use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
- of the Software, and to permit persons to whom the Software is furnished to do
- so, subject to the following conditions:
-
- The above copyright notice and this permission notice shall be included in all
- copies or substantial portions of the Software.
-
- If the code is used in an article, the following paper shall be cited:
- @techreport{qrsvd:2016,
- title={Implicit-shifted Symmetric QR Singular Value Decomposition of 3x3 Matrices},
- author={Gast, Theodore and Fu, Chuyuan and Jiang, Chenfanfu and Teran, Joseph},
- year={2016},
- institution={University of California Los Angeles}
- }
-
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
- SOFTWARE.
-**/
-
-#ifndef btImplicitQRSVD_h
-#define btImplicitQRSVD_h
-#include <limits>
-#include "btMatrix3x3.h"
-class btMatrix2x2
-{
-public:
- btScalar m_00, m_01, m_10, m_11;
- btMatrix2x2(): m_00(0), m_10(0), m_01(0), m_11(0)
- {
- }
- btMatrix2x2(const btMatrix2x2& other): m_00(other.m_00),m_01(other.m_01),m_10(other.m_10),m_11(other.m_11)
- {}
- btScalar& operator()(int i, int j)
- {
- if (i == 0 && j == 0)
- return m_00;
- if (i == 1 && j == 0)
- return m_10;
- if (i == 0 && j == 1)
- return m_01;
- if (i == 1 && j == 1)
- return m_11;
- btAssert(false);
- return m_00;
- }
- const btScalar& operator()(int i, int j) const
- {
- if (i == 0 && j == 0)
- return m_00;
- if (i == 1 && j == 0)
- return m_10;
- if (i == 0 && j == 1)
- return m_01;
- if (i == 1 && j == 1)
- return m_11;
- btAssert(false);
- return m_00;
- }
- void setIdentity()
- {
- m_00 = 1;
- m_11 = 1;
- m_01 = 0;
- m_10 = 0;
- }
-};
-
-static inline btScalar copySign(btScalar x, btScalar y) {
- if ((x < 0 && y > 0) || (x > 0 && y < 0))
- return -x;
- return x;
-}
-
-/**
- Class for givens rotation.
- Row rotation G*A corresponds to something like
- c -s 0
- ( s c 0 ) A
- 0 0 1
- Column rotation A G' corresponds to something like
- c -s 0
- A ( s c 0 )
- 0 0 1
-
- c and s are always computed so that
- ( c -s ) ( a ) = ( * )
- s c b ( 0 )
-
- Assume rowi<rowk.
- */
-
-class GivensRotation {
-public:
- int rowi;
- int rowk;
- btScalar c;
- btScalar s;
-
- inline GivensRotation(int rowi_in, int rowk_in)
- : rowi(rowi_in)
- , rowk(rowk_in)
- , c(1)
- , s(0)
- {
- }
-
- inline GivensRotation(btScalar a, btScalar b, int rowi_in, int rowk_in)
- : rowi(rowi_in)
- , rowk(rowk_in)
- {
- compute(a, b);
- }
-
- ~GivensRotation() {}
-
- inline void transposeInPlace()
- {
- s = -s;
- }
-
- /**
- Compute c and s from a and b so that
- ( c -s ) ( a ) = ( * )
- s c b ( 0 )
- */
- inline void compute(const btScalar a, const btScalar b)
- {
- btScalar d = a * a + b * b;
- c = 1;
- s = 0;
- if (d > SIMD_EPSILON) {
- btScalar sqrtd = btSqrt(d);
- if (sqrtd>SIMD_EPSILON)
- {
- btScalar t = btScalar(1.0)/sqrtd;
- c = a * t;
- s = -b * t;
- }
- }
- }
-
- /**
- This function computes c and s so that
- ( c -s ) ( a ) = ( 0 )
- s c b ( * )
- */
- inline void computeUnconventional(const btScalar a, const btScalar b)
- {
- btScalar d = a * a + b * b;
- c = 0;
- s = 1;
- if (d > SIMD_EPSILON) {
- btScalar t = btScalar(1.0)/btSqrt(d);
- s = a * t;
- c = b * t;
- }
- }
- /**
- Fill the R with the entries of this rotation
- */
- inline void fill(const btMatrix3x3& R) const
- {
- btMatrix3x3& A = const_cast<btMatrix3x3&>(R);
- A.setIdentity();
- A[rowi][rowi] = c;
- A[rowk][rowi] = -s;
- A[rowi][rowk] = s;
- A[rowk][rowk] = c;
- }
-
- inline void fill(const btMatrix2x2& R) const
- {
- btMatrix2x2& A = const_cast<btMatrix2x2&>(R);
- A(rowi,rowi) = c;
- A(rowk,rowi) = -s;
- A(rowi,rowk) = s;
- A(rowk,rowk) = c;
- }
-
- /**
- This function does something like
- c -s 0
- ( s c 0 ) A -> A
- 0 0 1
- It only affects row i and row k of A.
- */
- inline void rowRotation(btMatrix3x3& A) const
- {
- for (int j = 0; j < 3; j++) {
- btScalar tau1 = A[rowi][j];
- btScalar tau2 = A[rowk][j];
- A[rowi][j] = c * tau1 - s * tau2;
- A[rowk][j] = s * tau1 + c * tau2;
- }
- }
- inline void rowRotation(btMatrix2x2& A) const
- {
- for (int j = 0; j < 2; j++) {
- btScalar tau1 = A(rowi,j);
- btScalar tau2 = A(rowk,j);
- A(rowi,j) = c * tau1 - s * tau2;
- A(rowk,j) = s * tau1 + c * tau2;
- }
- }
-
- /**
- This function does something like
- c s 0
- A ( -s c 0 ) -> A
- 0 0 1
- It only affects column i and column k of A.
- */
- inline void columnRotation(btMatrix3x3& A) const
- {
- for (int j = 0; j < 3; j++) {
- btScalar tau1 = A[j][rowi];
- btScalar tau2 = A[j][rowk];
- A[j][rowi] = c * tau1 - s * tau2;
- A[j][rowk] = s * tau1 + c * tau2;
- }
- }
- inline void columnRotation(btMatrix2x2& A) const
- {
- for (int j = 0; j < 2; j++) {
- btScalar tau1 = A(j,rowi);
- btScalar tau2 = A(j,rowk);
- A(j,rowi) = c * tau1 - s * tau2;
- A(j,rowk) = s * tau1 + c * tau2;
- }
- }
-
- /**
- Multiply givens must be for same row and column
- **/
- inline void operator*=(const GivensRotation& A)
- {
- btScalar new_c = c * A.c - s * A.s;
- btScalar new_s = s * A.c + c * A.s;
- c = new_c;
- s = new_s;
- }
-
- /**
- Multiply givens must be for same row and column
- **/
- inline GivensRotation operator*(const GivensRotation& A) const
- {
- GivensRotation r(*this);
- r *= A;
- return r;
- }
-};
-
-/**
- \brief zero chasing the 3X3 matrix to bidiagonal form
- original form of H: x x 0
- x x x
- 0 0 x
- after zero chase:
- x x 0
- 0 x x
- 0 0 x
- */
-inline void zeroChase(btMatrix3x3& H, btMatrix3x3& U, btMatrix3x3& V)
-{
-
- /**
- Reduce H to of form
- x x +
- 0 x x
- 0 0 x
- */
- GivensRotation r1(H[0][0], H[1][0], 0, 1);
- /**
- Reduce H to of form
- x x 0
- 0 x x
- 0 + x
- Can calculate r2 without multiplying by r1 since both entries are in first two
- rows thus no need to divide by sqrt(a^2+b^2)
- */
- GivensRotation r2(1, 2);
- if (H[1][0] != 0)
- r2.compute(H[0][0] * H[0][1] + H[1][0] * H[1][1], H[0][0] * H[0][2] + H[1][0] * H[1][2]);
- else
- r2.compute(H[0][1], H[0][2]);
-
- r1.rowRotation(H);
-
- /* GivensRotation<T> r2(H(0, 1), H(0, 2), 1, 2); */
- r2.columnRotation(H);
- r2.columnRotation(V);
-
- /**
- Reduce H to of form
- x x 0
- 0 x x
- 0 0 x
- */
- GivensRotation r3(H[1][1], H[2][1], 1, 2);
- r3.rowRotation(H);
-
- // Save this till end for better cache coherency
- // r1.rowRotation(u_transpose);
- // r3.rowRotation(u_transpose);
- r1.columnRotation(U);
- r3.columnRotation(U);
-}
-
-/**
- \brief make a 3X3 matrix to upper bidiagonal form
- original form of H: x x x
- x x x
- x x x
- after zero chase:
- x x 0
- 0 x x
- 0 0 x
- */
-inline void makeUpperBidiag(btMatrix3x3& H, btMatrix3x3& U, btMatrix3x3& V)
-{
- U.setIdentity();
- V.setIdentity();
-
- /**
- Reduce H to of form
- x x x
- x x x
- 0 x x
- */
-
- GivensRotation r(H[1][0], H[2][0], 1, 2);
- r.rowRotation(H);
- // r.rowRotation(u_transpose);
- r.columnRotation(U);
- // zeroChase(H, u_transpose, V);
- zeroChase(H, U, V);
-}
-
-/**
- \brief make a 3X3 matrix to lambda shape
- original form of H: x x x
- * x x x
- * x x x
- after :
- * x 0 0
- * x x 0
- * x 0 x
- */
-inline void makeLambdaShape(btMatrix3x3& H, btMatrix3x3& U, btMatrix3x3& V)
-{
- U.setIdentity();
- V.setIdentity();
-
- /**
- Reduce H to of form
- * x x 0
- * x x x
- * x x x
- */
-
- GivensRotation r1(H[0][1], H[0][2], 1, 2);
- r1.columnRotation(H);
- r1.columnRotation(V);
-
- /**
- Reduce H to of form
- * x x 0
- * x x 0
- * x x x
- */
-
- r1.computeUnconventional(H[1][2], H[2][2]);
- r1.rowRotation(H);
- r1.columnRotation(U);
-
- /**
- Reduce H to of form
- * x x 0
- * x x 0
- * x 0 x
- */
-
- GivensRotation r2(H[2][0], H[2][1], 0, 1);
- r2.columnRotation(H);
- r2.columnRotation(V);
-
- /**
- Reduce H to of form
- * x 0 0
- * x x 0
- * x 0 x
- */
- r2.computeUnconventional(H[0][1], H[1][1]);
- r2.rowRotation(H);
- r2.columnRotation(U);
-}
-
-/**
- \brief 2x2 polar decomposition.
- \param[in] A matrix.
- \param[out] R Robustly a rotation matrix.
- \param[out] S_Sym Symmetric. Whole matrix is stored
-
- Polar guarantees negative sign is on the small magnitude singular value.
- S is guaranteed to be the closest one to identity.
- R is guaranteed to be the closest rotation to A.
- */
-inline void polarDecomposition(const btMatrix2x2& A,
- GivensRotation& R,
- const btMatrix2x2& S_Sym)
-{
- btScalar a = (A(0, 0) + A(1, 1)), b = (A(1, 0) - A(0, 1));
- btScalar denominator = btSqrt(a*a+b*b);
- R.c = (btScalar)1;
- R.s = (btScalar)0;
- if (denominator > SIMD_EPSILON) {
- /*
- No need to use a tolerance here because x(0) and x(1) always have
- smaller magnitude then denominator, therefore overflow never happens.
- In Bullet, we use a tolerance anyway.
- */
- R.c = a / denominator;
- R.s = -b / denominator;
- }
- btMatrix2x2& S = const_cast<btMatrix2x2&>(S_Sym);
- S = A;
- R.rowRotation(S);
-}
-
-inline void polarDecomposition(const btMatrix2x2& A,
- const btMatrix2x2& R,
- const btMatrix2x2& S_Sym)
-{
- GivensRotation r(0, 1);
- polarDecomposition(A, r, S_Sym);
- r.fill(R);
-}
-
-/**
- \brief 2x2 SVD (singular value decomposition) A=USV'
- \param[in] A Input matrix.
- \param[out] U Robustly a rotation matrix in Givens form
- \param[out] Sigma matrix of singular values sorted with decreasing magnitude. The second one can be negative.
- \param[out] V Robustly a rotation matrix in Givens form
- */
-inline void singularValueDecomposition(
- const btMatrix2x2& A,
- GivensRotation& U,
- const btMatrix2x2& Sigma,
- GivensRotation& V,
- const btScalar tol = 64 * std::numeric_limits<btScalar>::epsilon())
-{
- btMatrix2x2& sigma = const_cast<btMatrix2x2&>(Sigma);
- sigma.setIdentity();
- btMatrix2x2 S_Sym;
- polarDecomposition(A, U, S_Sym);
- btScalar cosine, sine;
- btScalar x = S_Sym(0, 0);
- btScalar y = S_Sym(0, 1);
- btScalar z = S_Sym(1, 1);
- if (y == 0) {
- // S is already diagonal
- cosine = 1;
- sine = 0;
- sigma(0,0) = x;
- sigma(1,1) = z;
- }
- else {
- btScalar tau = 0.5 * (x - z);
- btScalar val = tau * tau + y * y;
- if (val > SIMD_EPSILON)
- {
- btScalar w = btSqrt(val);
- // w > y > 0
- btScalar t;
- if (tau > 0) {
- // tau + w > w > y > 0 ==> division is safe
- t = y / (tau + w);
- }
- else {
- // tau - w < -w < -y < 0 ==> division is safe
- t = y / (tau - w);
- }
- cosine = btScalar(1) / btSqrt(t * t + btScalar(1));
- sine = -t * cosine;
- /*
- V = [cosine -sine; sine cosine]
- Sigma = V'SV. Only compute the diagonals for efficiency.
- Also utilize symmetry of S and don't form V yet.
- */
- btScalar c2 = cosine * cosine;
- btScalar csy = 2 * cosine * sine * y;
- btScalar s2 = sine * sine;
- sigma(0,0) = c2 * x - csy + s2 * z;
- sigma(1,1) = s2 * x + csy + c2 * z;
- } else
- {
- cosine = 1;
- sine = 0;
- sigma(0,0) = x;
- sigma(1,1) = z;
- }
- }
-
- // Sorting
- // Polar already guarantees negative sign is on the small magnitude singular value.
- if (sigma(0,0) < sigma(1,1)) {
- std::swap(sigma(0,0), sigma(1,1));
- V.c = -sine;
- V.s = cosine;
- }
- else {
- V.c = cosine;
- V.s = sine;
- }
- U *= V;
-}
-
-/**
- \brief 2x2 SVD (singular value decomposition) A=USV'
- \param[in] A Input matrix.
- \param[out] U Robustly a rotation matrix.
- \param[out] Sigma Vector of singular values sorted with decreasing magnitude. The second one can be negative.
- \param[out] V Robustly a rotation matrix.
- */
-inline void singularValueDecomposition(
- const btMatrix2x2& A,
- const btMatrix2x2& U,
- const btMatrix2x2& Sigma,
- const btMatrix2x2& V,
- const btScalar tol = 64 * std::numeric_limits<btScalar>::epsilon())
-{
- GivensRotation gv(0, 1);
- GivensRotation gu(0, 1);
- singularValueDecomposition(A, gu, Sigma, gv);
-
- gu.fill(U);
- gv.fill(V);
-}
-
-/**
- \brief compute wilkinsonShift of the block
- a1 b1
- b1 a2
- based on the wilkinsonShift formula
- mu = c + d - sign (d) \ sqrt (d*d + b*b), where d = (a-c)/2
-
- */
-inline btScalar wilkinsonShift(const btScalar a1, const btScalar b1, const btScalar a2)
-{
- btScalar d = (btScalar)0.5 * (a1 - a2);
- btScalar bs = b1 * b1;
- btScalar val = d * d + bs;
- if (val>SIMD_EPSILON)
- {
- btScalar denom = btFabs(d) + btSqrt(val);
-
- btScalar mu = a2 - copySign(bs / (denom), d);
- // T mu = a2 - bs / ( d + sign_d*sqrt (d*d + bs));
- return mu;
- }
- return a2;
-}
-
-/**
- \brief Helper function of 3X3 SVD for processing 2X2 SVD
- */
-template <int t>
-inline void process(btMatrix3x3& B, btMatrix3x3& U, btVector3& sigma, btMatrix3x3& V)
-{
- int other = (t == 1) ? 0 : 2;
- GivensRotation u(0, 1);
- GivensRotation v(0, 1);
- sigma[other] = B[other][other];
-
- btMatrix2x2 B_sub, sigma_sub;
- if (t == 0)
- {
- B_sub.m_00 = B[0][0];
- B_sub.m_10 = B[1][0];
- B_sub.m_01 = B[0][1];
- B_sub.m_11 = B[1][1];
- sigma_sub.m_00 = sigma[0];
- sigma_sub.m_11 = sigma[1];
-// singularValueDecomposition(B.template block<2, 2>(t, t), u, sigma.template block<2, 1>(t, 0), v);
- singularValueDecomposition(B_sub, u, sigma_sub, v);
- B[0][0] = B_sub.m_00;
- B[1][0] = B_sub.m_10;
- B[0][1] = B_sub.m_01;
- B[1][1] = B_sub.m_11;
- sigma[0] = sigma_sub.m_00;
- sigma[1] = sigma_sub.m_11;
- }
- else
- {
- B_sub.m_00 = B[1][1];
- B_sub.m_10 = B[2][1];
- B_sub.m_01 = B[1][2];
- B_sub.m_11 = B[2][2];
- sigma_sub.m_00 = sigma[1];
- sigma_sub.m_11 = sigma[2];
- // singularValueDecomposition(B.template block<2, 2>(t, t), u, sigma.template block<2, 1>(t, 0), v);
- singularValueDecomposition(B_sub, u, sigma_sub, v);
- B[1][1] = B_sub.m_00;
- B[2][1] = B_sub.m_10;
- B[1][2] = B_sub.m_01;
- B[2][2] = B_sub.m_11;
- sigma[1] = sigma_sub.m_00;
- sigma[2] = sigma_sub.m_11;
- }
- u.rowi += t;
- u.rowk += t;
- v.rowi += t;
- v.rowk += t;
- u.columnRotation(U);
- v.columnRotation(V);
-}
-
-/**
- \brief Helper function of 3X3 SVD for flipping signs due to flipping signs of sigma
- */
-inline void flipSign(int i, btMatrix3x3& U, btVector3& sigma)
-{
- sigma[i] = -sigma[i];
- U[0][i] = -U[0][i];
- U[1][i] = -U[1][i];
- U[2][i] = -U[2][i];
-}
-
-inline void flipSign(int i, btMatrix3x3& U)
-{
- U[0][i] = -U[0][i];
- U[1][i] = -U[1][i];
- U[2][i] = -U[2][i];
-}
-
-inline void swapCol(btMatrix3x3& A, int i, int j)
-{
- for (int d = 0; d < 3; ++d)
- std::swap(A[d][i], A[d][j]);
-}
-/**
- \brief Helper function of 3X3 SVD for sorting singular values
- */
-inline void sort(btMatrix3x3& U, btVector3& sigma, btMatrix3x3& V, int t)
-{
- if (t == 0)
- {
- // Case: sigma(0) > |sigma(1)| >= |sigma(2)|
- if (btFabs(sigma[1]) >= btFabs(sigma[2])) {
- if (sigma[1] < 0) {
- flipSign(1, U, sigma);
- flipSign(2, U, sigma);
- }
- return;
- }
-
- //fix sign of sigma for both cases
- if (sigma[2] < 0) {
- flipSign(1, U, sigma);
- flipSign(2, U, sigma);
- }
-
- //swap sigma(1) and sigma(2) for both cases
- std::swap(sigma[1], sigma[2]);
- // swap the col 1 and col 2 for U,V
- swapCol(U,1,2);
- swapCol(V,1,2);
-
- // Case: |sigma(2)| >= sigma(0) > |simga(1)|
- if (sigma[1] > sigma[0]) {
- std::swap(sigma[0], sigma[1]);
- swapCol(U,0,1);
- swapCol(V,0,1);
- }
-
- // Case: sigma(0) >= |sigma(2)| > |simga(1)|
- else {
- flipSign(2, U);
- flipSign(2, V);
- }
- }
- else if (t == 1)
- {
- // Case: |sigma(0)| >= sigma(1) > |sigma(2)|
- if (btFabs(sigma[0]) >= sigma[1]) {
- if (sigma[0] < 0) {
- flipSign(0, U, sigma);
- flipSign(2, U, sigma);
- }
- return;
- }
-
- //swap sigma(0) and sigma(1) for both cases
- std::swap(sigma[0], sigma[1]);
- swapCol(U, 0, 1);
- swapCol(V, 0, 1);
-
- // Case: sigma(1) > |sigma(2)| >= |sigma(0)|
- if (btFabs(sigma[1]) < btFabs(sigma[2])) {
- std::swap(sigma[1], sigma[2]);
- swapCol(U, 1, 2);
- swapCol(V, 1, 2);
- }
-
- // Case: sigma(1) >= |sigma(0)| > |sigma(2)|
- else {
- flipSign(1, U);
- flipSign(1, V);
- }
-
- // fix sign for both cases
- if (sigma[1] < 0) {
- flipSign(1, U, sigma);
- flipSign(2, U, sigma);
- }
- }
-}
-
-/**
- \brief 3X3 SVD (singular value decomposition) A=USV'
- \param[in] A Input matrix.
- \param[out] U is a rotation matrix.
- \param[out] sigma Diagonal matrix, sorted with decreasing magnitude. The third one can be negative.
- \param[out] V is a rotation matrix.
- */
-inline int singularValueDecomposition(const btMatrix3x3& A,
- btMatrix3x3& U,
- btVector3& sigma,
- btMatrix3x3& V,
- btScalar tol = 128*std::numeric_limits<btScalar>::epsilon())
-{
-// using std::fabs;
- btMatrix3x3 B = A;
- U.setIdentity();
- V.setIdentity();
-
- makeUpperBidiag(B, U, V);
-
- int count = 0;
- btScalar mu = (btScalar)0;
- GivensRotation r(0, 1);
-
- btScalar alpha_1 = B[0][0];
- btScalar beta_1 = B[0][1];
- btScalar alpha_2 = B[1][1];
- btScalar alpha_3 = B[2][2];
- btScalar beta_2 = B[1][2];
- btScalar gamma_1 = alpha_1 * beta_1;
- btScalar gamma_2 = alpha_2 * beta_2;
- btScalar val = alpha_1 * alpha_1 + alpha_2 * alpha_2 + alpha_3 * alpha_3 + beta_1 * beta_1 + beta_2 * beta_2;
- if (val > SIMD_EPSILON)
- {
- tol *= btMax((btScalar)0.5 * btSqrt(val), (btScalar)1);
- }
- /**
- Do implicit shift QR until A^T A is block diagonal
- */
- int max_count = 100;
-
- while (btFabs(beta_2) > tol && btFabs(beta_1) > tol
- && btFabs(alpha_1) > tol && btFabs(alpha_2) > tol
- && btFabs(alpha_3) > tol
- && count < max_count) {
- mu = wilkinsonShift(alpha_2 * alpha_2 + beta_1 * beta_1, gamma_2, alpha_3 * alpha_3 + beta_2 * beta_2);
-
- r.compute(alpha_1 * alpha_1 - mu, gamma_1);
- r.columnRotation(B);
-
- r.columnRotation(V);
- zeroChase(B, U, V);
-
- alpha_1 = B[0][0];
- beta_1 = B[0][1];
- alpha_2 = B[1][1];
- alpha_3 = B[2][2];
- beta_2 = B[1][2];
- gamma_1 = alpha_1 * beta_1;
- gamma_2 = alpha_2 * beta_2;
- count++;
- }
- /**
- Handle the cases of one of the alphas and betas being 0
- Sorted by ease of handling and then frequency
- of occurrence
-
- If B is of form
- x x 0
- 0 x 0
- 0 0 x
- */
- if (btFabs(beta_2) <= tol) {
- process<0>(B, U, sigma, V);
- sort(U, sigma, V,0);
- }
- /**
- If B is of form
- x 0 0
- 0 x x
- 0 0 x
- */
- else if (btFabs(beta_1) <= tol) {
- process<1>(B, U, sigma, V);
- sort(U, sigma, V,1);
- }
- /**
- If B is of form
- x x 0
- 0 0 x
- 0 0 x
- */
- else if (btFabs(alpha_2) <= tol) {
- /**
- Reduce B to
- x x 0
- 0 0 0
- 0 0 x
- */
- GivensRotation r1(1, 2);
- r1.computeUnconventional(B[1][2], B[2][2]);
- r1.rowRotation(B);
- r1.columnRotation(U);
-
- process<0>(B, U, sigma, V);
- sort(U, sigma, V, 0);
- }
- /**
- If B is of form
- x x 0
- 0 x x
- 0 0 0
- */
- else if (btFabs(alpha_3) <= tol) {
- /**
- Reduce B to
- x x +
- 0 x 0
- 0 0 0
- */
- GivensRotation r1(1, 2);
- r1.compute(B[1][1], B[1][2]);
- r1.columnRotation(B);
- r1.columnRotation(V);
- /**
- Reduce B to
- x x 0
- + x 0
- 0 0 0
- */
- GivensRotation r2(0, 2);
- r2.compute(B[0][0], B[0][2]);
- r2.columnRotation(B);
- r2.columnRotation(V);
-
- process<0>(B, U, sigma, V);
- sort(U, sigma, V, 0);
- }
- /**
- If B is of form
- 0 x 0
- 0 x x
- 0 0 x
- */
- else if (btFabs(alpha_1) <= tol) {
- /**
- Reduce B to
- 0 0 +
- 0 x x
- 0 0 x
- */
- GivensRotation r1(0, 1);
- r1.computeUnconventional(B[0][1], B[1][1]);
- r1.rowRotation(B);
- r1.columnRotation(U);
-
- /**
- Reduce B to
- 0 0 0
- 0 x x
- 0 + x
- */
- GivensRotation r2(0, 2);
- r2.computeUnconventional(B[0][2], B[2][2]);
- r2.rowRotation(B);
- r2.columnRotation(U);
-
- process<1>(B, U, sigma, V);
- sort(U, sigma, V, 1);
- }
-
- return count;
-}
-#endif /* btImplicitQRSVD_h */
diff --git a/thirdparty/bullet/LinearMath/btList.h b/thirdparty/bullet/LinearMath/btList.h
deleted file mode 100644
index b255938c30..0000000000
--- a/thirdparty/bullet/LinearMath/btList.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GEN_LIST_H
-#define BT_GEN_LIST_H
-
-class btGEN_Link
-{
-public:
- btGEN_Link() : m_next(0), m_prev(0) {}
- btGEN_Link(btGEN_Link *next, btGEN_Link *prev) : m_next(next), m_prev(prev) {}
-
- btGEN_Link *getNext() const { return m_next; }
- btGEN_Link *getPrev() const { return m_prev; }
-
- bool isHead() const { return m_prev == 0; }
- bool isTail() const { return m_next == 0; }
-
- void insertBefore(btGEN_Link *link)
- {
- m_next = link;
- m_prev = link->m_prev;
- m_next->m_prev = this;
- m_prev->m_next = this;
- }
-
- void insertAfter(btGEN_Link *link)
- {
- m_next = link->m_next;
- m_prev = link;
- m_next->m_prev = this;
- m_prev->m_next = this;
- }
-
- void remove()
- {
- m_next->m_prev = m_prev;
- m_prev->m_next = m_next;
- }
-
-private:
- btGEN_Link *m_next;
- btGEN_Link *m_prev;
-};
-
-class btGEN_List
-{
-public:
- btGEN_List() : m_head(&m_tail, 0), m_tail(0, &m_head) {}
-
- btGEN_Link *getHead() const { return m_head.getNext(); }
- btGEN_Link *getTail() const { return m_tail.getPrev(); }
-
- void addHead(btGEN_Link *link) { link->insertAfter(&m_head); }
- void addTail(btGEN_Link *link) { link->insertBefore(&m_tail); }
-
-private:
- btGEN_Link m_head;
- btGEN_Link m_tail;
-};
-
-#endif //BT_GEN_LIST_H
diff --git a/thirdparty/bullet/LinearMath/btMatrix3x3.h b/thirdparty/bullet/LinearMath/btMatrix3x3.h
deleted file mode 100644
index 9c90fee1d2..0000000000
--- a/thirdparty/bullet/LinearMath/btMatrix3x3.h
+++ /dev/null
@@ -1,1431 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MATRIX3x3_H
-#define BT_MATRIX3x3_H
-
-#include "btVector3.h"
-#include "btQuaternion.h"
-#include <stdio.h>
-
-#ifdef BT_USE_SSE
-//const __m128 ATTRIBUTE_ALIGNED16(v2220) = {2.0f, 2.0f, 2.0f, 0.0f};
-//const __m128 ATTRIBUTE_ALIGNED16(vMPPP) = {-0.0f, +0.0f, +0.0f, +0.0f};
-#define vMPPP (_mm_set_ps(+0.0f, +0.0f, +0.0f, -0.0f))
-#endif
-
-#if defined(BT_USE_SSE)
-#define v0000 (_mm_set_ps(0.0f, 0.0f, 0.0f, 0.0f))
-#define v1000 (_mm_set_ps(0.0f, 0.0f, 0.0f, 1.0f))
-#define v0100 (_mm_set_ps(0.0f, 0.0f, 1.0f, 0.0f))
-#define v0010 (_mm_set_ps(0.0f, 1.0f, 0.0f, 0.0f))
-#elif defined(BT_USE_NEON)
-const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0000) = {0.0f, 0.0f, 0.0f, 0.0f};
-const btSimdFloat4 ATTRIBUTE_ALIGNED16(v1000) = {1.0f, 0.0f, 0.0f, 0.0f};
-const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0100) = {0.0f, 1.0f, 0.0f, 0.0f};
-const btSimdFloat4 ATTRIBUTE_ALIGNED16(v0010) = {0.0f, 0.0f, 1.0f, 0.0f};
-#endif
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btMatrix3x3Data btMatrix3x3DoubleData
-#else
-#define btMatrix3x3Data btMatrix3x3FloatData
-#endif //BT_USE_DOUBLE_PRECISION
-
-/**@brief The btMatrix3x3 class implements a 3x3 rotation matrix, to perform linear algebra in combination with btQuaternion, btTransform and btVector3.
-* Make sure to only include a pure orthogonal matrix without scaling. */
-ATTRIBUTE_ALIGNED16(class)
-btMatrix3x3
-{
- ///Data storage for the matrix, each vector is a row of the matrix
- btVector3 m_el[3];
-
-public:
- /** @brief No initializaion constructor */
- btMatrix3x3() {}
-
- // explicit btMatrix3x3(const btScalar *m) { setFromOpenGLSubMatrix(m); }
-
- /**@brief Constructor from Quaternion */
- explicit btMatrix3x3(const btQuaternion& q) { setRotation(q); }
- /*
- template <typename btScalar>
- Matrix3x3(const btScalar& yaw, const btScalar& pitch, const btScalar& roll)
- {
- setEulerYPR(yaw, pitch, roll);
- }
- */
- /** @brief Constructor with row major formatting */
- btMatrix3x3(const btScalar& xx, const btScalar& xy, const btScalar& xz,
- const btScalar& yx, const btScalar& yy, const btScalar& yz,
- const btScalar& zx, const btScalar& zy, const btScalar& zz)
- {
- setValue(xx, xy, xz,
- yx, yy, yz,
- zx, zy, zz);
- }
-
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- SIMD_FORCE_INLINE btMatrix3x3(const btSimdFloat4 v0, const btSimdFloat4 v1, const btSimdFloat4 v2)
- {
- m_el[0].mVec128 = v0;
- m_el[1].mVec128 = v1;
- m_el[2].mVec128 = v2;
- }
-
- SIMD_FORCE_INLINE btMatrix3x3(const btVector3& v0, const btVector3& v1, const btVector3& v2)
- {
- m_el[0] = v0;
- m_el[1] = v1;
- m_el[2] = v2;
- }
-
- // Copy constructor
- SIMD_FORCE_INLINE btMatrix3x3(const btMatrix3x3& rhs)
- {
- m_el[0].mVec128 = rhs.m_el[0].mVec128;
- m_el[1].mVec128 = rhs.m_el[1].mVec128;
- m_el[2].mVec128 = rhs.m_el[2].mVec128;
- }
-
- // Assignment Operator
- SIMD_FORCE_INLINE btMatrix3x3& operator=(const btMatrix3x3& m)
- {
- m_el[0].mVec128 = m.m_el[0].mVec128;
- m_el[1].mVec128 = m.m_el[1].mVec128;
- m_el[2].mVec128 = m.m_el[2].mVec128;
-
- return *this;
- }
-
-#else
-
- /** @brief Copy constructor */
- SIMD_FORCE_INLINE btMatrix3x3(const btMatrix3x3& other)
- {
- m_el[0] = other.m_el[0];
- m_el[1] = other.m_el[1];
- m_el[2] = other.m_el[2];
- }
-
- /** @brief Assignment Operator */
- SIMD_FORCE_INLINE btMatrix3x3& operator=(const btMatrix3x3& other)
- {
- m_el[0] = other.m_el[0];
- m_el[1] = other.m_el[1];
- m_el[2] = other.m_el[2];
- return *this;
- }
-
- SIMD_FORCE_INLINE btMatrix3x3(const btVector3& v0, const btVector3& v1, const btVector3& v2)
- {
- m_el[0] = v0;
- m_el[1] = v1;
- m_el[2] = v2;
- }
-
-#endif
-
- /** @brief Get a column of the matrix as a vector
- * @param i Column number 0 indexed */
- SIMD_FORCE_INLINE btVector3 getColumn(int i) const
- {
- return btVector3(m_el[0][i], m_el[1][i], m_el[2][i]);
- }
-
- /** @brief Get a row of the matrix as a vector
- * @param i Row number 0 indexed */
- SIMD_FORCE_INLINE const btVector3& getRow(int i) const
- {
- btFullAssert(0 <= i && i < 3);
- return m_el[i];
- }
-
- /** @brief Get a mutable reference to a row of the matrix as a vector
- * @param i Row number 0 indexed */
- SIMD_FORCE_INLINE btVector3& operator[](int i)
- {
- btFullAssert(0 <= i && i < 3);
- return m_el[i];
- }
-
- /** @brief Get a const reference to a row of the matrix as a vector
- * @param i Row number 0 indexed */
- SIMD_FORCE_INLINE const btVector3& operator[](int i) const
- {
- btFullAssert(0 <= i && i < 3);
- return m_el[i];
- }
-
- /** @brief Multiply by the target matrix on the right
- * @param m Rotation matrix to be applied
- * Equivilant to this = this * m */
- btMatrix3x3& operator*=(const btMatrix3x3& m);
-
- /** @brief Adds by the target matrix on the right
- * @param m matrix to be applied
- * Equivilant to this = this + m */
- btMatrix3x3& operator+=(const btMatrix3x3& m);
-
- /** @brief Substractss by the target matrix on the right
- * @param m matrix to be applied
- * Equivilant to this = this - m */
- btMatrix3x3& operator-=(const btMatrix3x3& m);
-
- /** @brief Set from the rotational part of a 4x4 OpenGL matrix
- * @param m A pointer to the beginning of the array of scalars*/
- void setFromOpenGLSubMatrix(const btScalar* m)
- {
- m_el[0].setValue(m[0], m[4], m[8]);
- m_el[1].setValue(m[1], m[5], m[9]);
- m_el[2].setValue(m[2], m[6], m[10]);
- }
- /** @brief Set the values of the matrix explicitly (row major)
- * @param xx Top left
- * @param xy Top Middle
- * @param xz Top Right
- * @param yx Middle Left
- * @param yy Middle Middle
- * @param yz Middle Right
- * @param zx Bottom Left
- * @param zy Bottom Middle
- * @param zz Bottom Right*/
- void setValue(const btScalar& xx, const btScalar& xy, const btScalar& xz,
- const btScalar& yx, const btScalar& yy, const btScalar& yz,
- const btScalar& zx, const btScalar& zy, const btScalar& zz)
- {
- m_el[0].setValue(xx, xy, xz);
- m_el[1].setValue(yx, yy, yz);
- m_el[2].setValue(zx, zy, zz);
- }
-
- /** @brief Set the matrix from a quaternion
- * @param q The Quaternion to match */
- void setRotation(const btQuaternion& q)
- {
- btScalar d = q.length2();
- btFullAssert(d != btScalar(0.0));
- btScalar s = btScalar(2.0) / d;
-
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vs, Q = q.get128();
- __m128i Qi = btCastfTo128i(Q);
- __m128 Y, Z;
- __m128 V1, V2, V3;
- __m128 V11, V21, V31;
- __m128 NQ = _mm_xor_ps(Q, btvMzeroMask);
- __m128i NQi = btCastfTo128i(NQ);
-
- V1 = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(1, 0, 2, 3))); // Y X Z W
- V2 = _mm_shuffle_ps(NQ, Q, BT_SHUFFLE(0, 0, 1, 3)); // -X -X Y W
- V3 = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(2, 1, 0, 3))); // Z Y X W
- V1 = _mm_xor_ps(V1, vMPPP); // change the sign of the first element
-
- V11 = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(1, 1, 0, 3))); // Y Y X W
- V21 = _mm_unpackhi_ps(Q, Q); // Z Z W W
- V31 = _mm_shuffle_ps(Q, NQ, BT_SHUFFLE(0, 2, 0, 3)); // X Z -X -W
-
- V2 = V2 * V1; //
- V1 = V1 * V11; //
- V3 = V3 * V31; //
-
- V11 = _mm_shuffle_ps(NQ, Q, BT_SHUFFLE(2, 3, 1, 3)); // -Z -W Y W
- V11 = V11 * V21; //
- V21 = _mm_xor_ps(V21, vMPPP); // change the sign of the first element
- V31 = _mm_shuffle_ps(Q, NQ, BT_SHUFFLE(3, 3, 1, 3)); // W W -Y -W
- V31 = _mm_xor_ps(V31, vMPPP); // change the sign of the first element
- Y = btCastiTo128f(_mm_shuffle_epi32(NQi, BT_SHUFFLE(3, 2, 0, 3))); // -W -Z -X -W
- Z = btCastiTo128f(_mm_shuffle_epi32(Qi, BT_SHUFFLE(1, 0, 1, 3))); // Y X Y W
-
- vs = _mm_load_ss(&s);
- V21 = V21 * Y;
- V31 = V31 * Z;
-
- V1 = V1 + V11;
- V2 = V2 + V21;
- V3 = V3 + V31;
-
- vs = bt_splat3_ps(vs, 0);
- // s ready
- V1 = V1 * vs;
- V2 = V2 * vs;
- V3 = V3 * vs;
-
- V1 = V1 + v1000;
- V2 = V2 + v0100;
- V3 = V3 + v0010;
-
- m_el[0] = V1;
- m_el[1] = V2;
- m_el[2] = V3;
-#else
- btScalar xs = q.x() * s, ys = q.y() * s, zs = q.z() * s;
- btScalar wx = q.w() * xs, wy = q.w() * ys, wz = q.w() * zs;
- btScalar xx = q.x() * xs, xy = q.x() * ys, xz = q.x() * zs;
- btScalar yy = q.y() * ys, yz = q.y() * zs, zz = q.z() * zs;
- setValue(
- btScalar(1.0) - (yy + zz), xy - wz, xz + wy,
- xy + wz, btScalar(1.0) - (xx + zz), yz - wx,
- xz - wy, yz + wx, btScalar(1.0) - (xx + yy));
-#endif
- }
-
- /** @brief Set the matrix from euler angles using YPR around YXZ respectively
- * @param yaw Yaw about Y axis
- * @param pitch Pitch about X axis
- * @param roll Roll about Z axis
- */
- void setEulerYPR(const btScalar& yaw, const btScalar& pitch, const btScalar& roll)
- {
- setEulerZYX(roll, pitch, yaw);
- }
-
- /** @brief Set the matrix from euler angles YPR around ZYX axes
- * @param eulerX Roll about X axis
- * @param eulerY Pitch around Y axis
- * @param eulerZ Yaw about Z axis
- *
- * These angles are used to produce a rotation matrix. The euler
- * angles are applied in ZYX order. I.e a vector is first rotated
- * about X then Y and then Z
- **/
- void setEulerZYX(btScalar eulerX, btScalar eulerY, btScalar eulerZ)
- {
- ///@todo proposed to reverse this since it's labeled zyx but takes arguments xyz and it will match all other parts of the code
- btScalar ci(btCos(eulerX));
- btScalar cj(btCos(eulerY));
- btScalar ch(btCos(eulerZ));
- btScalar si(btSin(eulerX));
- btScalar sj(btSin(eulerY));
- btScalar sh(btSin(eulerZ));
- btScalar cc = ci * ch;
- btScalar cs = ci * sh;
- btScalar sc = si * ch;
- btScalar ss = si * sh;
-
- setValue(cj * ch, sj * sc - cs, sj * cc + ss,
- cj * sh, sj * ss + cc, sj * cs - sc,
- -sj, cj * si, cj * ci);
- }
-
- /**@brief Set the matrix to the identity */
- void setIdentity()
- {
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- m_el[0] = v1000;
- m_el[1] = v0100;
- m_el[2] = v0010;
-#else
- setValue(btScalar(1.0), btScalar(0.0), btScalar(0.0),
- btScalar(0.0), btScalar(1.0), btScalar(0.0),
- btScalar(0.0), btScalar(0.0), btScalar(1.0));
-#endif
- }
-
- /**@brief Set the matrix to the identity */
- void setZero()
- {
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- m_el[0] = v0000;
- m_el[1] = v0000;
- m_el[2] = v0000;
-#else
- setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0),
- btScalar(0.0), btScalar(0.0), btScalar(0.0),
- btScalar(0.0), btScalar(0.0), btScalar(0.0));
-#endif
- }
-
- static const btMatrix3x3& getIdentity()
- {
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- static const btMatrix3x3
- identityMatrix(v1000, v0100, v0010);
-#else
- static const btMatrix3x3
- identityMatrix(
- btScalar(1.0), btScalar(0.0), btScalar(0.0),
- btScalar(0.0), btScalar(1.0), btScalar(0.0),
- btScalar(0.0), btScalar(0.0), btScalar(1.0));
-#endif
- return identityMatrix;
- }
-
- /**@brief Fill the rotational part of an OpenGL matrix and clear the shear/perspective
- * @param m The array to be filled */
- void getOpenGLSubMatrix(btScalar * m) const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 v0 = m_el[0].mVec128;
- __m128 v1 = m_el[1].mVec128;
- __m128 v2 = m_el[2].mVec128; // x2 y2 z2 w2
- __m128* vm = (__m128*)m;
- __m128 vT;
-
- v2 = _mm_and_ps(v2, btvFFF0fMask); // x2 y2 z2 0
-
- vT = _mm_unpackhi_ps(v0, v1); // z0 z1 * *
- v0 = _mm_unpacklo_ps(v0, v1); // x0 x1 y0 y1
-
- v1 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(2, 3, 1, 3)); // y0 y1 y2 0
- v0 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(0, 1, 0, 3)); // x0 x1 x2 0
- v2 = btCastdTo128f(_mm_move_sd(btCastfTo128d(v2), btCastfTo128d(vT))); // z0 z1 z2 0
-
- vm[0] = v0;
- vm[1] = v1;
- vm[2] = v2;
-#elif defined(BT_USE_NEON)
- // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions.
- static const uint32x2_t zMask = (const uint32x2_t){static_cast<uint32_t>(-1), 0};
- float32x4_t* vm = (float32x4_t*)m;
- float32x4x2_t top = vtrnq_f32(m_el[0].mVec128, m_el[1].mVec128); // {x0 x1 z0 z1}, {y0 y1 w0 w1}
- float32x2x2_t bl = vtrn_f32(vget_low_f32(m_el[2].mVec128), vdup_n_f32(0.0f)); // {x2 0 }, {y2 0}
- float32x4_t v0 = vcombine_f32(vget_low_f32(top.val[0]), bl.val[0]);
- float32x4_t v1 = vcombine_f32(vget_low_f32(top.val[1]), bl.val[1]);
- float32x2_t q = (float32x2_t)vand_u32((uint32x2_t)vget_high_f32(m_el[2].mVec128), zMask);
- float32x4_t v2 = vcombine_f32(vget_high_f32(top.val[0]), q); // z0 z1 z2 0
-
- vm[0] = v0;
- vm[1] = v1;
- vm[2] = v2;
-#else
- m[0] = btScalar(m_el[0].x());
- m[1] = btScalar(m_el[1].x());
- m[2] = btScalar(m_el[2].x());
- m[3] = btScalar(0.0);
- m[4] = btScalar(m_el[0].y());
- m[5] = btScalar(m_el[1].y());
- m[6] = btScalar(m_el[2].y());
- m[7] = btScalar(0.0);
- m[8] = btScalar(m_el[0].z());
- m[9] = btScalar(m_el[1].z());
- m[10] = btScalar(m_el[2].z());
- m[11] = btScalar(0.0);
-#endif
- }
-
- /**@brief Get the matrix represented as a quaternion
- * @param q The quaternion which will be set */
- void getRotation(btQuaternion & q) const
- {
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- btScalar trace = m_el[0].x() + m_el[1].y() + m_el[2].z();
- btScalar s, x;
-
- union {
- btSimdFloat4 vec;
- btScalar f[4];
- } temp;
-
- if (trace > btScalar(0.0))
- {
- x = trace + btScalar(1.0);
-
- temp.f[0] = m_el[2].y() - m_el[1].z();
- temp.f[1] = m_el[0].z() - m_el[2].x();
- temp.f[2] = m_el[1].x() - m_el[0].y();
- temp.f[3] = x;
- //temp.f[3]= s * btScalar(0.5);
- }
- else
- {
- int i, j, k;
- if (m_el[0].x() < m_el[1].y())
- {
- if (m_el[1].y() < m_el[2].z())
- {
- i = 2;
- j = 0;
- k = 1;
- }
- else
- {
- i = 1;
- j = 2;
- k = 0;
- }
- }
- else
- {
- if (m_el[0].x() < m_el[2].z())
- {
- i = 2;
- j = 0;
- k = 1;
- }
- else
- {
- i = 0;
- j = 1;
- k = 2;
- }
- }
-
- x = m_el[i][i] - m_el[j][j] - m_el[k][k] + btScalar(1.0);
-
- temp.f[3] = (m_el[k][j] - m_el[j][k]);
- temp.f[j] = (m_el[j][i] + m_el[i][j]);
- temp.f[k] = (m_el[k][i] + m_el[i][k]);
- temp.f[i] = x;
- //temp.f[i] = s * btScalar(0.5);
- }
-
- s = btSqrt(x);
- q.set128(temp.vec);
- s = btScalar(0.5) / s;
-
- q *= s;
-#else
- btScalar trace = m_el[0].x() + m_el[1].y() + m_el[2].z();
-
- btScalar temp[4];
-
- if (trace > btScalar(0.0))
- {
- btScalar s = btSqrt(trace + btScalar(1.0));
- temp[3] = (s * btScalar(0.5));
- s = btScalar(0.5) / s;
-
- temp[0] = ((m_el[2].y() - m_el[1].z()) * s);
- temp[1] = ((m_el[0].z() - m_el[2].x()) * s);
- temp[2] = ((m_el[1].x() - m_el[0].y()) * s);
- }
- else
- {
- int i = m_el[0].x() < m_el[1].y() ? (m_el[1].y() < m_el[2].z() ? 2 : 1) : (m_el[0].x() < m_el[2].z() ? 2 : 0);
- int j = (i + 1) % 3;
- int k = (i + 2) % 3;
-
- btScalar s = btSqrt(m_el[i][i] - m_el[j][j] - m_el[k][k] + btScalar(1.0));
- temp[i] = s * btScalar(0.5);
- s = btScalar(0.5) / s;
-
- temp[3] = (m_el[k][j] - m_el[j][k]) * s;
- temp[j] = (m_el[j][i] + m_el[i][j]) * s;
- temp[k] = (m_el[k][i] + m_el[i][k]) * s;
- }
- q.setValue(temp[0], temp[1], temp[2], temp[3]);
-#endif
- }
-
- /**@brief Get the matrix represented as euler angles around YXZ, roundtrip with setEulerYPR
- * @param yaw Yaw around Y axis
- * @param pitch Pitch around X axis
- * @param roll around Z axis */
- void getEulerYPR(btScalar & yaw, btScalar & pitch, btScalar & roll) const
- {
- // first use the normal calculus
- yaw = btScalar(btAtan2(m_el[1].x(), m_el[0].x()));
- pitch = btScalar(btAsin(-m_el[2].x()));
- roll = btScalar(btAtan2(m_el[2].y(), m_el[2].z()));
-
- // on pitch = +/-HalfPI
- if (btFabs(pitch) == SIMD_HALF_PI)
- {
- if (yaw > 0)
- yaw -= SIMD_PI;
- else
- yaw += SIMD_PI;
-
- if (roll > 0)
- roll -= SIMD_PI;
- else
- roll += SIMD_PI;
- }
- };
-
- /**@brief Get the matrix represented as euler angles around ZYX
- * @param yaw Yaw around Z axis
- * @param pitch Pitch around Y axis
- * @param roll around X axis
- * @param solution_number Which solution of two possible solutions ( 1 or 2) are possible values*/
- void getEulerZYX(btScalar & yaw, btScalar & pitch, btScalar & roll, unsigned int solution_number = 1) const
- {
- struct Euler
- {
- btScalar yaw;
- btScalar pitch;
- btScalar roll;
- };
-
- Euler euler_out;
- Euler euler_out2; //second solution
- //get the pointer to the raw data
-
- // Check that pitch is not at a singularity
- if (btFabs(m_el[2].x()) >= 1)
- {
- euler_out.yaw = 0;
- euler_out2.yaw = 0;
-
- // From difference of angles formula
- btScalar delta = btAtan2(m_el[0].x(), m_el[0].z());
- if (m_el[2].x() > 0) //gimbal locked up
- {
- euler_out.pitch = SIMD_PI / btScalar(2.0);
- euler_out2.pitch = SIMD_PI / btScalar(2.0);
- euler_out.roll = euler_out.pitch + delta;
- euler_out2.roll = euler_out.pitch + delta;
- }
- else // gimbal locked down
- {
- euler_out.pitch = -SIMD_PI / btScalar(2.0);
- euler_out2.pitch = -SIMD_PI / btScalar(2.0);
- euler_out.roll = -euler_out.pitch + delta;
- euler_out2.roll = -euler_out.pitch + delta;
- }
- }
- else
- {
- euler_out.pitch = -btAsin(m_el[2].x());
- euler_out2.pitch = SIMD_PI - euler_out.pitch;
-
- euler_out.roll = btAtan2(m_el[2].y() / btCos(euler_out.pitch),
- m_el[2].z() / btCos(euler_out.pitch));
- euler_out2.roll = btAtan2(m_el[2].y() / btCos(euler_out2.pitch),
- m_el[2].z() / btCos(euler_out2.pitch));
-
- euler_out.yaw = btAtan2(m_el[1].x() / btCos(euler_out.pitch),
- m_el[0].x() / btCos(euler_out.pitch));
- euler_out2.yaw = btAtan2(m_el[1].x() / btCos(euler_out2.pitch),
- m_el[0].x() / btCos(euler_out2.pitch));
- }
-
- if (solution_number == 1)
- {
- yaw = euler_out.yaw;
- pitch = euler_out.pitch;
- roll = euler_out.roll;
- }
- else
- {
- yaw = euler_out2.yaw;
- pitch = euler_out2.pitch;
- roll = euler_out2.roll;
- }
- }
-
- /**@brief Create a scaled copy of the matrix
- * @param s Scaling vector The elements of the vector will scale each column */
-
- btMatrix3x3 scaled(const btVector3& s) const
- {
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- return btMatrix3x3(m_el[0] * s, m_el[1] * s, m_el[2] * s);
-#else
- return btMatrix3x3(
- m_el[0].x() * s.x(), m_el[0].y() * s.y(), m_el[0].z() * s.z(),
- m_el[1].x() * s.x(), m_el[1].y() * s.y(), m_el[1].z() * s.z(),
- m_el[2].x() * s.x(), m_el[2].y() * s.y(), m_el[2].z() * s.z());
-#endif
- }
-
- /**@brief Return the determinant of the matrix */
- btScalar determinant() const;
- /**@brief Return the adjoint of the matrix */
- btMatrix3x3 adjoint() const;
- /**@brief Return the matrix with all values non negative */
- btMatrix3x3 absolute() const;
- /**@brief Return the transpose of the matrix */
- btMatrix3x3 transpose() const;
- /**@brief Return the inverse of the matrix */
- btMatrix3x3 inverse() const;
-
- /// Solve A * x = b, where b is a column vector. This is more efficient
- /// than computing the inverse in one-shot cases.
- ///Solve33 is from Box2d, thanks to Erin Catto,
- btVector3 solve33(const btVector3& b) const
- {
- btVector3 col1 = getColumn(0);
- btVector3 col2 = getColumn(1);
- btVector3 col3 = getColumn(2);
-
- btScalar det = btDot(col1, btCross(col2, col3));
- if (btFabs(det) > SIMD_EPSILON)
- {
- det = 1.0f / det;
- }
- btVector3 x;
- x[0] = det * btDot(b, btCross(col2, col3));
- x[1] = det * btDot(col1, btCross(b, col3));
- x[2] = det * btDot(col1, btCross(col2, b));
- return x;
- }
-
- btMatrix3x3 transposeTimes(const btMatrix3x3& m) const;
- btMatrix3x3 timesTranspose(const btMatrix3x3& m) const;
-
- SIMD_FORCE_INLINE btScalar tdotx(const btVector3& v) const
- {
- return m_el[0].x() * v.x() + m_el[1].x() * v.y() + m_el[2].x() * v.z();
- }
- SIMD_FORCE_INLINE btScalar tdoty(const btVector3& v) const
- {
- return m_el[0].y() * v.x() + m_el[1].y() * v.y() + m_el[2].y() * v.z();
- }
- SIMD_FORCE_INLINE btScalar tdotz(const btVector3& v) const
- {
- return m_el[0].z() * v.x() + m_el[1].z() * v.y() + m_el[2].z() * v.z();
- }
-
- ///extractRotation is from "A robust method to extract the rotational part of deformations"
- ///See http://dl.acm.org/citation.cfm?doid=2994258.2994269
- ///decomposes a matrix A in a orthogonal matrix R and a
- ///symmetric matrix S:
- ///A = R*S.
- ///note that R can include both rotation and scaling.
- SIMD_FORCE_INLINE void extractRotation(btQuaternion & q, btScalar tolerance = 1.0e-9, int maxIter = 100)
- {
- int iter = 0;
- btScalar w;
- const btMatrix3x3& A = *this;
- for (iter = 0; iter < maxIter; iter++)
- {
- btMatrix3x3 R(q);
- btVector3 omega = (R.getColumn(0).cross(A.getColumn(0)) + R.getColumn(1).cross(A.getColumn(1)) + R.getColumn(2).cross(A.getColumn(2))) * (btScalar(1.0) / btFabs(R.getColumn(0).dot(A.getColumn(0)) + R.getColumn(1).dot(A.getColumn(1)) + R.getColumn(2).dot(A.getColumn(2))) +
- tolerance);
- w = omega.norm();
- if (w < tolerance)
- break;
- q = btQuaternion(btVector3((btScalar(1.0) / w) * omega), w) *
- q;
- q.normalize();
- }
- }
-
- /**@brief diagonalizes this matrix by the Jacobi method.
- * @param rot stores the rotation from the coordinate system in which the matrix is diagonal to the original
- * coordinate system, i.e., old_this = rot * new_this * rot^T.
- * @param threshold See iteration
- * @param iteration The iteration stops when all off-diagonal elements are less than the threshold multiplied
- * by the sum of the absolute values of the diagonal, or when maxSteps have been executed.
- *
- * Note that this matrix is assumed to be symmetric.
- */
- void diagonalize(btMatrix3x3 & rot, btScalar threshold, int maxSteps)
- {
- rot.setIdentity();
- for (int step = maxSteps; step > 0; step--)
- {
- // find off-diagonal element [p][q] with largest magnitude
- int p = 0;
- int q = 1;
- int r = 2;
- btScalar max = btFabs(m_el[0][1]);
- btScalar v = btFabs(m_el[0][2]);
- if (v > max)
- {
- q = 2;
- r = 1;
- max = v;
- }
- v = btFabs(m_el[1][2]);
- if (v > max)
- {
- p = 1;
- q = 2;
- r = 0;
- max = v;
- }
-
- btScalar t = threshold * (btFabs(m_el[0][0]) + btFabs(m_el[1][1]) + btFabs(m_el[2][2]));
- if (max <= t)
- {
- if (max <= SIMD_EPSILON * t)
- {
- return;
- }
- step = 1;
- }
-
- // compute Jacobi rotation J which leads to a zero for element [p][q]
- btScalar mpq = m_el[p][q];
- btScalar theta = (m_el[q][q] - m_el[p][p]) / (2 * mpq);
- btScalar theta2 = theta * theta;
- btScalar cos;
- btScalar sin;
- if (theta2 * theta2 < btScalar(10 / SIMD_EPSILON))
- {
- t = (theta >= 0) ? 1 / (theta + btSqrt(1 + theta2))
- : 1 / (theta - btSqrt(1 + theta2));
- cos = 1 / btSqrt(1 + t * t);
- sin = cos * t;
- }
- else
- {
- // approximation for large theta-value, i.e., a nearly diagonal matrix
- t = 1 / (theta * (2 + btScalar(0.5) / theta2));
- cos = 1 - btScalar(0.5) * t * t;
- sin = cos * t;
- }
-
- // apply rotation to matrix (this = J^T * this * J)
- m_el[p][q] = m_el[q][p] = 0;
- m_el[p][p] -= t * mpq;
- m_el[q][q] += t * mpq;
- btScalar mrp = m_el[r][p];
- btScalar mrq = m_el[r][q];
- m_el[r][p] = m_el[p][r] = cos * mrp - sin * mrq;
- m_el[r][q] = m_el[q][r] = cos * mrq + sin * mrp;
-
- // apply rotation to rot (rot = rot * J)
- for (int i = 0; i < 3; i++)
- {
- btVector3& row = rot[i];
- mrp = row[p];
- mrq = row[q];
- row[p] = cos * mrp - sin * mrq;
- row[q] = cos * mrq + sin * mrp;
- }
- }
- }
-
- /**@brief Calculate the matrix cofactor
- * @param r1 The first row to use for calculating the cofactor
- * @param c1 The first column to use for calculating the cofactor
- * @param r1 The second row to use for calculating the cofactor
- * @param c1 The second column to use for calculating the cofactor
- * See http://en.wikipedia.org/wiki/Cofactor_(linear_algebra) for more details
- */
- btScalar cofac(int r1, int c1, int r2, int c2) const
- {
- return m_el[r1][c1] * m_el[r2][c2] - m_el[r1][c2] * m_el[r2][c1];
- }
-
- void serialize(struct btMatrix3x3Data & dataOut) const;
-
- void serializeFloat(struct btMatrix3x3FloatData & dataOut) const;
-
- void deSerialize(const struct btMatrix3x3Data& dataIn);
-
- void deSerializeFloat(const struct btMatrix3x3FloatData& dataIn);
-
- void deSerializeDouble(const struct btMatrix3x3DoubleData& dataIn);
-};
-
-SIMD_FORCE_INLINE btMatrix3x3&
-btMatrix3x3::operator*=(const btMatrix3x3& m)
-{
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 rv00, rv01, rv02;
- __m128 rv10, rv11, rv12;
- __m128 rv20, rv21, rv22;
- __m128 mv0, mv1, mv2;
-
- rv02 = m_el[0].mVec128;
- rv12 = m_el[1].mVec128;
- rv22 = m_el[2].mVec128;
-
- mv0 = _mm_and_ps(m[0].mVec128, btvFFF0fMask);
- mv1 = _mm_and_ps(m[1].mVec128, btvFFF0fMask);
- mv2 = _mm_and_ps(m[2].mVec128, btvFFF0fMask);
-
- // rv0
- rv00 = bt_splat_ps(rv02, 0);
- rv01 = bt_splat_ps(rv02, 1);
- rv02 = bt_splat_ps(rv02, 2);
-
- rv00 = _mm_mul_ps(rv00, mv0);
- rv01 = _mm_mul_ps(rv01, mv1);
- rv02 = _mm_mul_ps(rv02, mv2);
-
- // rv1
- rv10 = bt_splat_ps(rv12, 0);
- rv11 = bt_splat_ps(rv12, 1);
- rv12 = bt_splat_ps(rv12, 2);
-
- rv10 = _mm_mul_ps(rv10, mv0);
- rv11 = _mm_mul_ps(rv11, mv1);
- rv12 = _mm_mul_ps(rv12, mv2);
-
- // rv2
- rv20 = bt_splat_ps(rv22, 0);
- rv21 = bt_splat_ps(rv22, 1);
- rv22 = bt_splat_ps(rv22, 2);
-
- rv20 = _mm_mul_ps(rv20, mv0);
- rv21 = _mm_mul_ps(rv21, mv1);
- rv22 = _mm_mul_ps(rv22, mv2);
-
- rv00 = _mm_add_ps(rv00, rv01);
- rv10 = _mm_add_ps(rv10, rv11);
- rv20 = _mm_add_ps(rv20, rv21);
-
- m_el[0].mVec128 = _mm_add_ps(rv00, rv02);
- m_el[1].mVec128 = _mm_add_ps(rv10, rv12);
- m_el[2].mVec128 = _mm_add_ps(rv20, rv22);
-
-#elif defined(BT_USE_NEON)
-
- float32x4_t rv0, rv1, rv2;
- float32x4_t v0, v1, v2;
- float32x4_t mv0, mv1, mv2;
-
- v0 = m_el[0].mVec128;
- v1 = m_el[1].mVec128;
- v2 = m_el[2].mVec128;
-
- mv0 = (float32x4_t)vandq_s32((int32x4_t)m[0].mVec128, btvFFF0Mask);
- mv1 = (float32x4_t)vandq_s32((int32x4_t)m[1].mVec128, btvFFF0Mask);
- mv2 = (float32x4_t)vandq_s32((int32x4_t)m[2].mVec128, btvFFF0Mask);
-
- rv0 = vmulq_lane_f32(mv0, vget_low_f32(v0), 0);
- rv1 = vmulq_lane_f32(mv0, vget_low_f32(v1), 0);
- rv2 = vmulq_lane_f32(mv0, vget_low_f32(v2), 0);
-
- rv0 = vmlaq_lane_f32(rv0, mv1, vget_low_f32(v0), 1);
- rv1 = vmlaq_lane_f32(rv1, mv1, vget_low_f32(v1), 1);
- rv2 = vmlaq_lane_f32(rv2, mv1, vget_low_f32(v2), 1);
-
- rv0 = vmlaq_lane_f32(rv0, mv2, vget_high_f32(v0), 0);
- rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0);
- rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0);
-
- m_el[0].mVec128 = rv0;
- m_el[1].mVec128 = rv1;
- m_el[2].mVec128 = rv2;
-#else
- setValue(
- m.tdotx(m_el[0]), m.tdoty(m_el[0]), m.tdotz(m_el[0]),
- m.tdotx(m_el[1]), m.tdoty(m_el[1]), m.tdotz(m_el[1]),
- m.tdotx(m_el[2]), m.tdoty(m_el[2]), m.tdotz(m_el[2]));
-#endif
- return *this;
-}
-
-SIMD_FORCE_INLINE btMatrix3x3&
-btMatrix3x3::operator+=(const btMatrix3x3& m)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- m_el[0].mVec128 = m_el[0].mVec128 + m.m_el[0].mVec128;
- m_el[1].mVec128 = m_el[1].mVec128 + m.m_el[1].mVec128;
- m_el[2].mVec128 = m_el[2].mVec128 + m.m_el[2].mVec128;
-#else
- setValue(
- m_el[0][0] + m.m_el[0][0],
- m_el[0][1] + m.m_el[0][1],
- m_el[0][2] + m.m_el[0][2],
- m_el[1][0] + m.m_el[1][0],
- m_el[1][1] + m.m_el[1][1],
- m_el[1][2] + m.m_el[1][2],
- m_el[2][0] + m.m_el[2][0],
- m_el[2][1] + m.m_el[2][1],
- m_el[2][2] + m.m_el[2][2]);
-#endif
- return *this;
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-operator*(const btMatrix3x3& m, const btScalar& k)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- __m128 vk = bt_splat_ps(_mm_load_ss((float*)&k), 0x80);
- return btMatrix3x3(
- _mm_mul_ps(m[0].mVec128, vk),
- _mm_mul_ps(m[1].mVec128, vk),
- _mm_mul_ps(m[2].mVec128, vk));
-#elif defined(BT_USE_NEON)
- return btMatrix3x3(
- vmulq_n_f32(m[0].mVec128, k),
- vmulq_n_f32(m[1].mVec128, k),
- vmulq_n_f32(m[2].mVec128, k));
-#else
- return btMatrix3x3(
- m[0].x() * k, m[0].y() * k, m[0].z() * k,
- m[1].x() * k, m[1].y() * k, m[1].z() * k,
- m[2].x() * k, m[2].y() * k, m[2].z() * k);
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-operator+(const btMatrix3x3& m1, const btMatrix3x3& m2)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- return btMatrix3x3(
- m1[0].mVec128 + m2[0].mVec128,
- m1[1].mVec128 + m2[1].mVec128,
- m1[2].mVec128 + m2[2].mVec128);
-#else
- return btMatrix3x3(
- m1[0][0] + m2[0][0],
- m1[0][1] + m2[0][1],
- m1[0][2] + m2[0][2],
-
- m1[1][0] + m2[1][0],
- m1[1][1] + m2[1][1],
- m1[1][2] + m2[1][2],
-
- m1[2][0] + m2[2][0],
- m1[2][1] + m2[2][1],
- m1[2][2] + m2[2][2]);
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-operator-(const btMatrix3x3& m1, const btMatrix3x3& m2)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- return btMatrix3x3(
- m1[0].mVec128 - m2[0].mVec128,
- m1[1].mVec128 - m2[1].mVec128,
- m1[2].mVec128 - m2[2].mVec128);
-#else
- return btMatrix3x3(
- m1[0][0] - m2[0][0],
- m1[0][1] - m2[0][1],
- m1[0][2] - m2[0][2],
-
- m1[1][0] - m2[1][0],
- m1[1][1] - m2[1][1],
- m1[1][2] - m2[1][2],
-
- m1[2][0] - m2[2][0],
- m1[2][1] - m2[2][1],
- m1[2][2] - m2[2][2]);
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3&
-btMatrix3x3::operator-=(const btMatrix3x3& m)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- m_el[0].mVec128 = m_el[0].mVec128 - m.m_el[0].mVec128;
- m_el[1].mVec128 = m_el[1].mVec128 - m.m_el[1].mVec128;
- m_el[2].mVec128 = m_el[2].mVec128 - m.m_el[2].mVec128;
-#else
- setValue(
- m_el[0][0] - m.m_el[0][0],
- m_el[0][1] - m.m_el[0][1],
- m_el[0][2] - m.m_el[0][2],
- m_el[1][0] - m.m_el[1][0],
- m_el[1][1] - m.m_el[1][1],
- m_el[1][2] - m.m_el[1][2],
- m_el[2][0] - m.m_el[2][0],
- m_el[2][1] - m.m_el[2][1],
- m_el[2][2] - m.m_el[2][2]);
-#endif
- return *this;
-}
-
-SIMD_FORCE_INLINE btScalar
-btMatrix3x3::determinant() const
-{
- return btTriple((*this)[0], (*this)[1], (*this)[2]);
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-btMatrix3x3::absolute() const
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- return btMatrix3x3(
- _mm_and_ps(m_el[0].mVec128, btvAbsfMask),
- _mm_and_ps(m_el[1].mVec128, btvAbsfMask),
- _mm_and_ps(m_el[2].mVec128, btvAbsfMask));
-#elif defined(BT_USE_NEON)
- return btMatrix3x3(
- (float32x4_t)vandq_s32((int32x4_t)m_el[0].mVec128, btv3AbsMask),
- (float32x4_t)vandq_s32((int32x4_t)m_el[1].mVec128, btv3AbsMask),
- (float32x4_t)vandq_s32((int32x4_t)m_el[2].mVec128, btv3AbsMask));
-#else
- return btMatrix3x3(
- btFabs(m_el[0].x()), btFabs(m_el[0].y()), btFabs(m_el[0].z()),
- btFabs(m_el[1].x()), btFabs(m_el[1].y()), btFabs(m_el[1].z()),
- btFabs(m_el[2].x()), btFabs(m_el[2].y()), btFabs(m_el[2].z()));
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-btMatrix3x3::transpose() const
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- __m128 v0 = m_el[0].mVec128;
- __m128 v1 = m_el[1].mVec128;
- __m128 v2 = m_el[2].mVec128; // x2 y2 z2 w2
- __m128 vT;
-
- v2 = _mm_and_ps(v2, btvFFF0fMask); // x2 y2 z2 0
-
- vT = _mm_unpackhi_ps(v0, v1); // z0 z1 * *
- v0 = _mm_unpacklo_ps(v0, v1); // x0 x1 y0 y1
-
- v1 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(2, 3, 1, 3)); // y0 y1 y2 0
- v0 = _mm_shuffle_ps(v0, v2, BT_SHUFFLE(0, 1, 0, 3)); // x0 x1 x2 0
- v2 = btCastdTo128f(_mm_move_sd(btCastfTo128d(v2), btCastfTo128d(vT))); // z0 z1 z2 0
-
- return btMatrix3x3(v0, v1, v2);
-#elif defined(BT_USE_NEON)
- // note: zeros the w channel. We can preserve it at the cost of two more vtrn instructions.
- static const uint32x2_t zMask = (const uint32x2_t){static_cast<uint32_t>(-1), 0};
- float32x4x2_t top = vtrnq_f32(m_el[0].mVec128, m_el[1].mVec128); // {x0 x1 z0 z1}, {y0 y1 w0 w1}
- float32x2x2_t bl = vtrn_f32(vget_low_f32(m_el[2].mVec128), vdup_n_f32(0.0f)); // {x2 0 }, {y2 0}
- float32x4_t v0 = vcombine_f32(vget_low_f32(top.val[0]), bl.val[0]);
- float32x4_t v1 = vcombine_f32(vget_low_f32(top.val[1]), bl.val[1]);
- float32x2_t q = (float32x2_t)vand_u32((uint32x2_t)vget_high_f32(m_el[2].mVec128), zMask);
- float32x4_t v2 = vcombine_f32(vget_high_f32(top.val[0]), q); // z0 z1 z2 0
- return btMatrix3x3(v0, v1, v2);
-#else
- return btMatrix3x3(m_el[0].x(), m_el[1].x(), m_el[2].x(),
- m_el[0].y(), m_el[1].y(), m_el[2].y(),
- m_el[0].z(), m_el[1].z(), m_el[2].z());
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-btMatrix3x3::adjoint() const
-{
- return btMatrix3x3(cofac(1, 1, 2, 2), cofac(0, 2, 2, 1), cofac(0, 1, 1, 2),
- cofac(1, 2, 2, 0), cofac(0, 0, 2, 2), cofac(0, 2, 1, 0),
- cofac(1, 0, 2, 1), cofac(0, 1, 2, 0), cofac(0, 0, 1, 1));
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-btMatrix3x3::inverse() const
-{
- btVector3 co(cofac(1, 1, 2, 2), cofac(1, 2, 2, 0), cofac(1, 0, 2, 1));
- btScalar det = (*this)[0].dot(co);
- //btFullAssert(det != btScalar(0.0));
- btAssert(det != btScalar(0.0));
- btScalar s = btScalar(1.0) / det;
- return btMatrix3x3(co.x() * s, cofac(0, 2, 2, 1) * s, cofac(0, 1, 1, 2) * s,
- co.y() * s, cofac(0, 0, 2, 2) * s, cofac(0, 2, 1, 0) * s,
- co.z() * s, cofac(0, 1, 2, 0) * s, cofac(0, 0, 1, 1) * s);
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-btMatrix3x3::transposeTimes(const btMatrix3x3& m) const
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- // zeros w
- // static const __m128i xyzMask = (const __m128i){ -1ULL, 0xffffffffULL };
- __m128 row = m_el[0].mVec128;
- __m128 m0 = _mm_and_ps(m.getRow(0).mVec128, btvFFF0fMask);
- __m128 m1 = _mm_and_ps(m.getRow(1).mVec128, btvFFF0fMask);
- __m128 m2 = _mm_and_ps(m.getRow(2).mVec128, btvFFF0fMask);
- __m128 r0 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0));
- __m128 r1 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0x55));
- __m128 r2 = _mm_mul_ps(m0, _mm_shuffle_ps(row, row, 0xaa));
- row = m_el[1].mVec128;
- r0 = _mm_add_ps(r0, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0x55)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(m1, _mm_shuffle_ps(row, row, 0xaa)));
- row = m_el[2].mVec128;
- r0 = _mm_add_ps(r0, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0x55)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(m2, _mm_shuffle_ps(row, row, 0xaa)));
- return btMatrix3x3(r0, r1, r2);
-
-#elif defined BT_USE_NEON
- // zeros w
- static const uint32x4_t xyzMask = (const uint32x4_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), 0};
- float32x4_t m0 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(0).mVec128, xyzMask);
- float32x4_t m1 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(1).mVec128, xyzMask);
- float32x4_t m2 = (float32x4_t)vandq_u32((uint32x4_t)m.getRow(2).mVec128, xyzMask);
- float32x4_t row = m_el[0].mVec128;
- float32x4_t r0 = vmulq_lane_f32(m0, vget_low_f32(row), 0);
- float32x4_t r1 = vmulq_lane_f32(m0, vget_low_f32(row), 1);
- float32x4_t r2 = vmulq_lane_f32(m0, vget_high_f32(row), 0);
- row = m_el[1].mVec128;
- r0 = vmlaq_lane_f32(r0, m1, vget_low_f32(row), 0);
- r1 = vmlaq_lane_f32(r1, m1, vget_low_f32(row), 1);
- r2 = vmlaq_lane_f32(r2, m1, vget_high_f32(row), 0);
- row = m_el[2].mVec128;
- r0 = vmlaq_lane_f32(r0, m2, vget_low_f32(row), 0);
- r1 = vmlaq_lane_f32(r1, m2, vget_low_f32(row), 1);
- r2 = vmlaq_lane_f32(r2, m2, vget_high_f32(row), 0);
- return btMatrix3x3(r0, r1, r2);
-#else
- return btMatrix3x3(
- m_el[0].x() * m[0].x() + m_el[1].x() * m[1].x() + m_el[2].x() * m[2].x(),
- m_el[0].x() * m[0].y() + m_el[1].x() * m[1].y() + m_el[2].x() * m[2].y(),
- m_el[0].x() * m[0].z() + m_el[1].x() * m[1].z() + m_el[2].x() * m[2].z(),
- m_el[0].y() * m[0].x() + m_el[1].y() * m[1].x() + m_el[2].y() * m[2].x(),
- m_el[0].y() * m[0].y() + m_el[1].y() * m[1].y() + m_el[2].y() * m[2].y(),
- m_el[0].y() * m[0].z() + m_el[1].y() * m[1].z() + m_el[2].y() * m[2].z(),
- m_el[0].z() * m[0].x() + m_el[1].z() * m[1].x() + m_el[2].z() * m[2].x(),
- m_el[0].z() * m[0].y() + m_el[1].z() * m[1].y() + m_el[2].z() * m[2].y(),
- m_el[0].z() * m[0].z() + m_el[1].z() * m[1].z() + m_el[2].z() * m[2].z());
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-btMatrix3x3::timesTranspose(const btMatrix3x3& m) const
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- __m128 a0 = m_el[0].mVec128;
- __m128 a1 = m_el[1].mVec128;
- __m128 a2 = m_el[2].mVec128;
-
- btMatrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here
- __m128 mx = mT[0].mVec128;
- __m128 my = mT[1].mVec128;
- __m128 mz = mT[2].mVec128;
-
- __m128 r0 = _mm_mul_ps(mx, _mm_shuffle_ps(a0, a0, 0x00));
- __m128 r1 = _mm_mul_ps(mx, _mm_shuffle_ps(a1, a1, 0x00));
- __m128 r2 = _mm_mul_ps(mx, _mm_shuffle_ps(a2, a2, 0x00));
- r0 = _mm_add_ps(r0, _mm_mul_ps(my, _mm_shuffle_ps(a0, a0, 0x55)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(my, _mm_shuffle_ps(a1, a1, 0x55)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(my, _mm_shuffle_ps(a2, a2, 0x55)));
- r0 = _mm_add_ps(r0, _mm_mul_ps(mz, _mm_shuffle_ps(a0, a0, 0xaa)));
- r1 = _mm_add_ps(r1, _mm_mul_ps(mz, _mm_shuffle_ps(a1, a1, 0xaa)));
- r2 = _mm_add_ps(r2, _mm_mul_ps(mz, _mm_shuffle_ps(a2, a2, 0xaa)));
- return btMatrix3x3(r0, r1, r2);
-
-#elif defined BT_USE_NEON
- float32x4_t a0 = m_el[0].mVec128;
- float32x4_t a1 = m_el[1].mVec128;
- float32x4_t a2 = m_el[2].mVec128;
-
- btMatrix3x3 mT = m.transpose(); // we rely on transpose() zeroing w channel so that we don't have to do it here
- float32x4_t mx = mT[0].mVec128;
- float32x4_t my = mT[1].mVec128;
- float32x4_t mz = mT[2].mVec128;
-
- float32x4_t r0 = vmulq_lane_f32(mx, vget_low_f32(a0), 0);
- float32x4_t r1 = vmulq_lane_f32(mx, vget_low_f32(a1), 0);
- float32x4_t r2 = vmulq_lane_f32(mx, vget_low_f32(a2), 0);
- r0 = vmlaq_lane_f32(r0, my, vget_low_f32(a0), 1);
- r1 = vmlaq_lane_f32(r1, my, vget_low_f32(a1), 1);
- r2 = vmlaq_lane_f32(r2, my, vget_low_f32(a2), 1);
- r0 = vmlaq_lane_f32(r0, mz, vget_high_f32(a0), 0);
- r1 = vmlaq_lane_f32(r1, mz, vget_high_f32(a1), 0);
- r2 = vmlaq_lane_f32(r2, mz, vget_high_f32(a2), 0);
- return btMatrix3x3(r0, r1, r2);
-
-#else
- return btMatrix3x3(
- m_el[0].dot(m[0]), m_el[0].dot(m[1]), m_el[0].dot(m[2]),
- m_el[1].dot(m[0]), m_el[1].dot(m[1]), m_el[1].dot(m[2]),
- m_el[2].dot(m[0]), m_el[2].dot(m[1]), m_el[2].dot(m[2]));
-#endif
-}
-
-SIMD_FORCE_INLINE btVector3
-operator*(const btMatrix3x3& m, const btVector3& v)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- return v.dot3(m[0], m[1], m[2]);
-#else
- return btVector3(m[0].dot(v), m[1].dot(v), m[2].dot(v));
-#endif
-}
-
-SIMD_FORCE_INLINE btVector3
-operator*(const btVector3& v, const btMatrix3x3& m)
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
-
- const __m128 vv = v.mVec128;
-
- __m128 c0 = bt_splat_ps(vv, 0);
- __m128 c1 = bt_splat_ps(vv, 1);
- __m128 c2 = bt_splat_ps(vv, 2);
-
- c0 = _mm_mul_ps(c0, _mm_and_ps(m[0].mVec128, btvFFF0fMask));
- c1 = _mm_mul_ps(c1, _mm_and_ps(m[1].mVec128, btvFFF0fMask));
- c0 = _mm_add_ps(c0, c1);
- c2 = _mm_mul_ps(c2, _mm_and_ps(m[2].mVec128, btvFFF0fMask));
-
- return btVector3(_mm_add_ps(c0, c2));
-#elif defined(BT_USE_NEON)
- const float32x4_t vv = v.mVec128;
- const float32x2_t vlo = vget_low_f32(vv);
- const float32x2_t vhi = vget_high_f32(vv);
-
- float32x4_t c0, c1, c2;
-
- c0 = (float32x4_t)vandq_s32((int32x4_t)m[0].mVec128, btvFFF0Mask);
- c1 = (float32x4_t)vandq_s32((int32x4_t)m[1].mVec128, btvFFF0Mask);
- c2 = (float32x4_t)vandq_s32((int32x4_t)m[2].mVec128, btvFFF0Mask);
-
- c0 = vmulq_lane_f32(c0, vlo, 0);
- c1 = vmulq_lane_f32(c1, vlo, 1);
- c2 = vmulq_lane_f32(c2, vhi, 0);
- c0 = vaddq_f32(c0, c1);
- c0 = vaddq_f32(c0, c2);
-
- return btVector3(c0);
-#else
- return btVector3(m.tdotx(v), m.tdoty(v), m.tdotz(v));
-#endif
-}
-
-SIMD_FORCE_INLINE btMatrix3x3
-operator*(const btMatrix3x3& m1, const btMatrix3x3& m2)
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
-
- __m128 m10 = m1[0].mVec128;
- __m128 m11 = m1[1].mVec128;
- __m128 m12 = m1[2].mVec128;
-
- __m128 m2v = _mm_and_ps(m2[0].mVec128, btvFFF0fMask);
-
- __m128 c0 = bt_splat_ps(m10, 0);
- __m128 c1 = bt_splat_ps(m11, 0);
- __m128 c2 = bt_splat_ps(m12, 0);
-
- c0 = _mm_mul_ps(c0, m2v);
- c1 = _mm_mul_ps(c1, m2v);
- c2 = _mm_mul_ps(c2, m2v);
-
- m2v = _mm_and_ps(m2[1].mVec128, btvFFF0fMask);
-
- __m128 c0_1 = bt_splat_ps(m10, 1);
- __m128 c1_1 = bt_splat_ps(m11, 1);
- __m128 c2_1 = bt_splat_ps(m12, 1);
-
- c0_1 = _mm_mul_ps(c0_1, m2v);
- c1_1 = _mm_mul_ps(c1_1, m2v);
- c2_1 = _mm_mul_ps(c2_1, m2v);
-
- m2v = _mm_and_ps(m2[2].mVec128, btvFFF0fMask);
-
- c0 = _mm_add_ps(c0, c0_1);
- c1 = _mm_add_ps(c1, c1_1);
- c2 = _mm_add_ps(c2, c2_1);
-
- m10 = bt_splat_ps(m10, 2);
- m11 = bt_splat_ps(m11, 2);
- m12 = bt_splat_ps(m12, 2);
-
- m10 = _mm_mul_ps(m10, m2v);
- m11 = _mm_mul_ps(m11, m2v);
- m12 = _mm_mul_ps(m12, m2v);
-
- c0 = _mm_add_ps(c0, m10);
- c1 = _mm_add_ps(c1, m11);
- c2 = _mm_add_ps(c2, m12);
-
- return btMatrix3x3(c0, c1, c2);
-
-#elif defined(BT_USE_NEON)
-
- float32x4_t rv0, rv1, rv2;
- float32x4_t v0, v1, v2;
- float32x4_t mv0, mv1, mv2;
-
- v0 = m1[0].mVec128;
- v1 = m1[1].mVec128;
- v2 = m1[2].mVec128;
-
- mv0 = (float32x4_t)vandq_s32((int32x4_t)m2[0].mVec128, btvFFF0Mask);
- mv1 = (float32x4_t)vandq_s32((int32x4_t)m2[1].mVec128, btvFFF0Mask);
- mv2 = (float32x4_t)vandq_s32((int32x4_t)m2[2].mVec128, btvFFF0Mask);
-
- rv0 = vmulq_lane_f32(mv0, vget_low_f32(v0), 0);
- rv1 = vmulq_lane_f32(mv0, vget_low_f32(v1), 0);
- rv2 = vmulq_lane_f32(mv0, vget_low_f32(v2), 0);
-
- rv0 = vmlaq_lane_f32(rv0, mv1, vget_low_f32(v0), 1);
- rv1 = vmlaq_lane_f32(rv1, mv1, vget_low_f32(v1), 1);
- rv2 = vmlaq_lane_f32(rv2, mv1, vget_low_f32(v2), 1);
-
- rv0 = vmlaq_lane_f32(rv0, mv2, vget_high_f32(v0), 0);
- rv1 = vmlaq_lane_f32(rv1, mv2, vget_high_f32(v1), 0);
- rv2 = vmlaq_lane_f32(rv2, mv2, vget_high_f32(v2), 0);
-
- return btMatrix3x3(rv0, rv1, rv2);
-
-#else
- return btMatrix3x3(
- m2.tdotx(m1[0]), m2.tdoty(m1[0]), m2.tdotz(m1[0]),
- m2.tdotx(m1[1]), m2.tdoty(m1[1]), m2.tdotz(m1[1]),
- m2.tdotx(m1[2]), m2.tdoty(m1[2]), m2.tdotz(m1[2]));
-#endif
-}
-
-/*
-SIMD_FORCE_INLINE btMatrix3x3 btMultTransposeLeft(const btMatrix3x3& m1, const btMatrix3x3& m2) {
-return btMatrix3x3(
-m1[0][0] * m2[0][0] + m1[1][0] * m2[1][0] + m1[2][0] * m2[2][0],
-m1[0][0] * m2[0][1] + m1[1][0] * m2[1][1] + m1[2][0] * m2[2][1],
-m1[0][0] * m2[0][2] + m1[1][0] * m2[1][2] + m1[2][0] * m2[2][2],
-m1[0][1] * m2[0][0] + m1[1][1] * m2[1][0] + m1[2][1] * m2[2][0],
-m1[0][1] * m2[0][1] + m1[1][1] * m2[1][1] + m1[2][1] * m2[2][1],
-m1[0][1] * m2[0][2] + m1[1][1] * m2[1][2] + m1[2][1] * m2[2][2],
-m1[0][2] * m2[0][0] + m1[1][2] * m2[1][0] + m1[2][2] * m2[2][0],
-m1[0][2] * m2[0][1] + m1[1][2] * m2[1][1] + m1[2][2] * m2[2][1],
-m1[0][2] * m2[0][2] + m1[1][2] * m2[1][2] + m1[2][2] * m2[2][2]);
-}
-*/
-
-/**@brief Equality operator between two matrices
-* It will test all elements are equal. */
-SIMD_FORCE_INLINE bool operator==(const btMatrix3x3& m1, const btMatrix3x3& m2)
-{
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
-
- __m128 c0, c1, c2;
-
- c0 = _mm_cmpeq_ps(m1[0].mVec128, m2[0].mVec128);
- c1 = _mm_cmpeq_ps(m1[1].mVec128, m2[1].mVec128);
- c2 = _mm_cmpeq_ps(m1[2].mVec128, m2[2].mVec128);
-
- c0 = _mm_and_ps(c0, c1);
- c0 = _mm_and_ps(c0, c2);
-
- int m = _mm_movemask_ps((__m128)c0);
- return (0x7 == (m & 0x7));
-
-#else
- return (m1[0][0] == m2[0][0] && m1[1][0] == m2[1][0] && m1[2][0] == m2[2][0] &&
- m1[0][1] == m2[0][1] && m1[1][1] == m2[1][1] && m1[2][1] == m2[2][1] &&
- m1[0][2] == m2[0][2] && m1[1][2] == m2[1][2] && m1[2][2] == m2[2][2]);
-#endif
-}
-
-///for serialization
-struct btMatrix3x3FloatData
-{
- btVector3FloatData m_el[3];
-};
-
-///for serialization
-struct btMatrix3x3DoubleData
-{
- btVector3DoubleData m_el[3];
-};
-
-SIMD_FORCE_INLINE void btMatrix3x3::serialize(struct btMatrix3x3Data& dataOut) const
-{
- for (int i = 0; i < 3; i++)
- m_el[i].serialize(dataOut.m_el[i]);
-}
-
-SIMD_FORCE_INLINE void btMatrix3x3::serializeFloat(struct btMatrix3x3FloatData& dataOut) const
-{
- for (int i = 0; i < 3; i++)
- m_el[i].serializeFloat(dataOut.m_el[i]);
-}
-
-SIMD_FORCE_INLINE void btMatrix3x3::deSerialize(const struct btMatrix3x3Data& dataIn)
-{
- for (int i = 0; i < 3; i++)
- m_el[i].deSerialize(dataIn.m_el[i]);
-}
-
-SIMD_FORCE_INLINE void btMatrix3x3::deSerializeFloat(const struct btMatrix3x3FloatData& dataIn)
-{
- for (int i = 0; i < 3; i++)
- m_el[i].deSerializeFloat(dataIn.m_el[i]);
-}
-
-SIMD_FORCE_INLINE void btMatrix3x3::deSerializeDouble(const struct btMatrix3x3DoubleData& dataIn)
-{
- for (int i = 0; i < 3; i++)
- m_el[i].deSerializeDouble(dataIn.m_el[i]);
-}
-
-#endif //BT_MATRIX3x3_H
diff --git a/thirdparty/bullet/LinearMath/btMatrixX.h b/thirdparty/bullet/LinearMath/btMatrixX.h
deleted file mode 100644
index bb0f0dd259..0000000000
--- a/thirdparty/bullet/LinearMath/btMatrixX.h
+++ /dev/null
@@ -1,532 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2013 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-///original version written by Erwin Coumans, October 2013
-
-#ifndef BT_MATRIX_X_H
-#define BT_MATRIX_X_H
-
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btAlignedObjectArray.h"
-#include <stdio.h>
-
-//#define BT_DEBUG_OSTREAM
-#ifdef BT_DEBUG_OSTREAM
-#include <iostream>
-#include <iomanip> // std::setw
-#endif //BT_DEBUG_OSTREAM
-
-class btIntSortPredicate
-{
-public:
- bool operator()(const int& a, const int& b) const
- {
- return a < b;
- }
-};
-
-template <typename T>
-struct btVectorX
-{
- btAlignedObjectArray<T> m_storage;
-
- btVectorX()
- {
- }
- btVectorX(int numRows)
- {
- m_storage.resize(numRows);
- }
-
- void resize(int rows)
- {
- m_storage.resize(rows);
- }
- int cols() const
- {
- return 1;
- }
- int rows() const
- {
- return m_storage.size();
- }
- int size() const
- {
- return rows();
- }
-
- T nrm2() const
- {
- T norm = T(0);
-
- int nn = rows();
-
- {
- if (nn == 1)
- {
- norm = btFabs((*this)[0]);
- }
- else
- {
- T scale = 0.0;
- T ssq = 1.0;
-
- /* The following loop is equivalent to this call to the LAPACK
- auxiliary routine: CALL SLASSQ( N, X, INCX, SCALE, SSQ ) */
-
- for (int ix = 0; ix < nn; ix++)
- {
- if ((*this)[ix] != 0.0)
- {
- T absxi = btFabs((*this)[ix]);
- if (scale < absxi)
- {
- T temp;
- temp = scale / absxi;
- ssq = ssq * (temp * temp) + BT_ONE;
- scale = absxi;
- }
- else
- {
- T temp;
- temp = absxi / scale;
- ssq += temp * temp;
- }
- }
- }
- norm = scale * sqrt(ssq);
- }
- }
- return norm;
- }
- void setZero()
- {
- if (m_storage.size())
- {
- // for (int i=0;i<m_storage.size();i++)
- // m_storage[i]=0;
- //memset(&m_storage[0],0,sizeof(T)*m_storage.size());
- btSetZero(&m_storage[0], m_storage.size());
- }
- }
- const T& operator[](int index) const
- {
- return m_storage[index];
- }
-
- T& operator[](int index)
- {
- return m_storage[index];
- }
-
- T* getBufferPointerWritable()
- {
- return m_storage.size() ? &m_storage[0] : 0;
- }
-
- const T* getBufferPointer() const
- {
- return m_storage.size() ? &m_storage[0] : 0;
- }
-};
-/*
- template <typename T>
- void setElem(btMatrixX<T>& mat, int row, int col, T val)
- {
- mat.setElem(row,col,val);
- }
- */
-
-template <typename T>
-struct btMatrixX
-{
- int m_rows;
- int m_cols;
- int m_operations;
- int m_resizeOperations;
- int m_setElemOperations;
-
- btAlignedObjectArray<T> m_storage;
- mutable btAlignedObjectArray<btAlignedObjectArray<int> > m_rowNonZeroElements1;
-
- T* getBufferPointerWritable()
- {
- return m_storage.size() ? &m_storage[0] : 0;
- }
-
- const T* getBufferPointer() const
- {
- return m_storage.size() ? &m_storage[0] : 0;
- }
- btMatrixX()
- : m_rows(0),
- m_cols(0),
- m_operations(0),
- m_resizeOperations(0),
- m_setElemOperations(0)
- {
- }
- btMatrixX(int rows, int cols)
- : m_rows(rows),
- m_cols(cols),
- m_operations(0),
- m_resizeOperations(0),
- m_setElemOperations(0)
- {
- resize(rows, cols);
- }
- void resize(int rows, int cols)
- {
- m_resizeOperations++;
- m_rows = rows;
- m_cols = cols;
- {
- BT_PROFILE("m_storage.resize");
- m_storage.resize(rows * cols);
- }
- }
- int cols() const
- {
- return m_cols;
- }
- int rows() const
- {
- return m_rows;
- }
- ///we don't want this read/write operator(), because we cannot keep track of non-zero elements, use setElem instead
- /*T& operator() (int row,int col)
- {
- return m_storage[col*m_rows+row];
- }
- */
-
- void addElem(int row, int col, T val)
- {
- if (val)
- {
- if (m_storage[col + row * m_cols] == 0.f)
- {
- setElem(row, col, val);
- }
- else
- {
- m_storage[row * m_cols + col] += val;
- }
- }
- }
-
- void setElem(int row, int col, T val)
- {
- m_setElemOperations++;
- m_storage[row * m_cols + col] = val;
- }
-
- void mulElem(int row, int col, T val)
- {
- m_setElemOperations++;
- //mul doesn't change sparsity info
-
- m_storage[row * m_cols + col] *= val;
- }
-
- void copyLowerToUpperTriangle()
- {
- int count = 0;
- for (int row = 0; row < rows(); row++)
- {
- for (int col = 0; col < row; col++)
- {
- setElem(col, row, (*this)(row, col));
- count++;
- }
- }
- //printf("copyLowerToUpperTriangle copied %d elements out of %dx%d=%d\n", count,rows(),cols(),cols()*rows());
- }
-
- const T& operator()(int row, int col) const
- {
- return m_storage[col + row * m_cols];
- }
-
- void setZero()
- {
- {
- BT_PROFILE("storage=0");
- if (m_storage.size())
- {
- btSetZero(&m_storage[0], m_storage.size());
- }
- //memset(&m_storage[0],0,sizeof(T)*m_storage.size());
- //for (int i=0;i<m_storage.size();i++)
- // m_storage[i]=0;
- }
- }
-
- void setIdentity()
- {
- btAssert(rows() == cols());
-
- setZero();
- for (int row = 0; row < rows(); row++)
- {
- setElem(row, row, 1);
- }
- }
-
- void printMatrix(const char* msg) const
- {
- printf("%s ---------------------\n", msg);
- for (int i = 0; i < rows(); i++)
- {
- printf("\n");
- for (int j = 0; j < cols(); j++)
- {
- printf("%2.1f\t", (*this)(i, j));
- }
- }
- printf("\n---------------------\n");
- }
-
- void rowComputeNonZeroElements() const
- {
- m_rowNonZeroElements1.resize(rows());
- for (int i = 0; i < rows(); i++)
- {
- m_rowNonZeroElements1[i].resize(0);
- for (int j = 0; j < cols(); j++)
- {
- if ((*this)(i, j) != 0.f)
- {
- m_rowNonZeroElements1[i].push_back(j);
- }
- }
- }
- }
- btMatrixX transpose() const
- {
- //transpose is optimized for sparse matrices
- btMatrixX tr(m_cols, m_rows);
- tr.setZero();
- for (int i = 0; i < m_cols; i++)
- for (int j = 0; j < m_rows; j++)
- {
- T v = (*this)(j, i);
- if (v)
- {
- tr.setElem(i, j, v);
- }
- }
- return tr;
- }
-
- btMatrixX operator*(const btMatrixX& other)
- {
- //btMatrixX*btMatrixX implementation, brute force
- btAssert(cols() == other.rows());
-
- btMatrixX res(rows(), other.cols());
- res.setZero();
- // BT_PROFILE("btMatrixX mul");
- for (int i = 0; i < rows(); ++i)
- {
- {
- for (int j = 0; j < other.cols(); ++j)
- {
- T dotProd = 0;
- {
- {
- int c = cols();
-
- for (int k = 0; k < c; k++)
- {
- T w = (*this)(i, k);
- if (other(k, j) != 0.f)
- {
- dotProd += w * other(k, j);
- }
- }
- }
- }
- if (dotProd)
- res.setElem(i, j, dotProd);
- }
- }
- }
- return res;
- }
-
- // this assumes the 4th and 8th rows of B and C are zero.
- void multiplyAdd2_p8r(const btScalar* B, const btScalar* C, int numRows, int numRowsOther, int row, int col)
- {
- const btScalar* bb = B;
- for (int i = 0; i < numRows; i++)
- {
- const btScalar* cc = C;
- for (int j = 0; j < numRowsOther; j++)
- {
- btScalar sum;
- sum = bb[0] * cc[0];
- sum += bb[1] * cc[1];
- sum += bb[2] * cc[2];
- sum += bb[4] * cc[4];
- sum += bb[5] * cc[5];
- sum += bb[6] * cc[6];
- addElem(row + i, col + j, sum);
- cc += 8;
- }
- bb += 8;
- }
- }
-
- void multiply2_p8r(const btScalar* B, const btScalar* C, int numRows, int numRowsOther, int row, int col)
- {
- btAssert(numRows > 0 && numRowsOther > 0 && B && C);
- const btScalar* bb = B;
- for (int i = 0; i < numRows; i++)
- {
- const btScalar* cc = C;
- for (int j = 0; j < numRowsOther; j++)
- {
- btScalar sum;
- sum = bb[0] * cc[0];
- sum += bb[1] * cc[1];
- sum += bb[2] * cc[2];
- sum += bb[4] * cc[4];
- sum += bb[5] * cc[5];
- sum += bb[6] * cc[6];
- setElem(row + i, col + j, sum);
- cc += 8;
- }
- bb += 8;
- }
- }
-
- void setSubMatrix(int rowstart, int colstart, int rowend, int colend, const T value)
- {
- int numRows = rowend + 1 - rowstart;
- int numCols = colend + 1 - colstart;
-
- for (int row = 0; row < numRows; row++)
- {
- for (int col = 0; col < numCols; col++)
- {
- setElem(rowstart + row, colstart + col, value);
- }
- }
- }
-
- void setSubMatrix(int rowstart, int colstart, int rowend, int colend, const btMatrixX& block)
- {
- btAssert(rowend + 1 - rowstart == block.rows());
- btAssert(colend + 1 - colstart == block.cols());
- for (int row = 0; row < block.rows(); row++)
- {
- for (int col = 0; col < block.cols(); col++)
- {
- setElem(rowstart + row, colstart + col, block(row, col));
- }
- }
- }
- void setSubMatrix(int rowstart, int colstart, int rowend, int colend, const btVectorX<T>& block)
- {
- btAssert(rowend + 1 - rowstart == block.rows());
- btAssert(colend + 1 - colstart == block.cols());
- for (int row = 0; row < block.rows(); row++)
- {
- for (int col = 0; col < block.cols(); col++)
- {
- setElem(rowstart + row, colstart + col, block[row]);
- }
- }
- }
-
- btMatrixX negative()
- {
- btMatrixX neg(rows(), cols());
- for (int i = 0; i < rows(); i++)
- for (int j = 0; j < cols(); j++)
- {
- T v = (*this)(i, j);
- neg.setElem(i, j, -v);
- }
- return neg;
- }
-};
-
-typedef btMatrixX<float> btMatrixXf;
-typedef btVectorX<float> btVectorXf;
-
-typedef btMatrixX<double> btMatrixXd;
-typedef btVectorX<double> btVectorXd;
-
-#ifdef BT_DEBUG_OSTREAM
-template <typename T>
-std::ostream& operator<<(std::ostream& os, const btMatrixX<T>& mat)
-{
- os << " [";
- //printf("%s ---------------------\n",msg);
- for (int i = 0; i < mat.rows(); i++)
- {
- for (int j = 0; j < mat.cols(); j++)
- {
- os << std::setw(12) << mat(i, j);
- }
- if (i != mat.rows() - 1)
- os << std::endl
- << " ";
- }
- os << " ]";
- //printf("\n---------------------\n");
-
- return os;
-}
-template <typename T>
-std::ostream& operator<<(std::ostream& os, const btVectorX<T>& mat)
-{
- os << " [";
- //printf("%s ---------------------\n",msg);
- for (int i = 0; i < mat.rows(); i++)
- {
- os << std::setw(12) << mat[i];
- if (i != mat.rows() - 1)
- os << std::endl
- << " ";
- }
- os << " ]";
- //printf("\n---------------------\n");
-
- return os;
-}
-
-#endif //BT_DEBUG_OSTREAM
-
-inline void setElem(btMatrixXd& mat, int row, int col, double val)
-{
- mat.setElem(row, col, val);
-}
-
-inline void setElem(btMatrixXf& mat, int row, int col, float val)
-{
- mat.setElem(row, col, val);
-}
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btVectorXu btVectorXd
-#define btMatrixXu btMatrixXd
-#else
-#define btVectorXu btVectorXf
-#define btMatrixXu btMatrixXf
-#endif //BT_USE_DOUBLE_PRECISION
-
-#endif //BT_MATRIX_H_H
diff --git a/thirdparty/bullet/LinearMath/btMinMax.h b/thirdparty/bullet/LinearMath/btMinMax.h
deleted file mode 100644
index 92fea0275a..0000000000
--- a/thirdparty/bullet/LinearMath/btMinMax.h
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GEN_MINMAX_H
-#define BT_GEN_MINMAX_H
-
-#include "btScalar.h"
-
-template <class T>
-SIMD_FORCE_INLINE const T& btMin(const T& a, const T& b)
-{
- return a < b ? a : b;
-}
-
-template <class T>
-SIMD_FORCE_INLINE const T& btMax(const T& a, const T& b)
-{
- return a > b ? a : b;
-}
-
-template <class T>
-SIMD_FORCE_INLINE const T& btClamped(const T& a, const T& lb, const T& ub)
-{
- return a < lb ? lb : (ub < a ? ub : a);
-}
-
-template <class T>
-SIMD_FORCE_INLINE void btSetMin(T& a, const T& b)
-{
- if (b < a)
- {
- a = b;
- }
-}
-
-template <class T>
-SIMD_FORCE_INLINE void btSetMax(T& a, const T& b)
-{
- if (a < b)
- {
- a = b;
- }
-}
-
-template <class T>
-SIMD_FORCE_INLINE void btClamp(T& a, const T& lb, const T& ub)
-{
- if (a < lb)
- {
- a = lb;
- }
- else if (ub < a)
- {
- a = ub;
- }
-}
-
-#endif //BT_GEN_MINMAX_H
diff --git a/thirdparty/bullet/LinearMath/btModifiedGramSchmidt.h b/thirdparty/bullet/LinearMath/btModifiedGramSchmidt.h
deleted file mode 100644
index 33bab8d650..0000000000
--- a/thirdparty/bullet/LinearMath/btModifiedGramSchmidt.h
+++ /dev/null
@@ -1,83 +0,0 @@
-//
-// btModifiedGramSchmidt.h
-// LinearMath
-//
-// Created by Xuchen Han on 4/4/20.
-//
-
-#ifndef btModifiedGramSchmidt_h
-#define btModifiedGramSchmidt_h
-
-#include "btReducedVector.h"
-#include "btAlignedObjectArray.h"
-#include <iostream>
-#include <cmath>
-template<class TV>
-class btModifiedGramSchmidt
-{
-public:
- btAlignedObjectArray<TV> m_in;
- btAlignedObjectArray<TV> m_out;
-
- btModifiedGramSchmidt(const btAlignedObjectArray<TV>& vecs): m_in(vecs)
- {
- m_out.resize(0);
- }
-
- void solve()
- {
- m_out.resize(m_in.size());
- for (int i = 0; i < m_in.size(); ++i)
- {
-// printf("========= starting %d ==========\n", i);
- TV v(m_in[i]);
-// v.print();
- for (int j = 0; j < i; ++j)
- {
- v = v - v.proj(m_out[j]);
-// v.print();
- }
- v.normalize();
- m_out[i] = v;
-// v.print();
- }
- }
-
- void test()
- {
- std::cout << SIMD_EPSILON << std::endl;
- printf("=======inputs=========\n");
- for (int i = 0; i < m_out.size(); ++i)
- {
- m_in[i].print();
- }
- printf("=======output=========\n");
- for (int i = 0; i < m_out.size(); ++i)
- {
- m_out[i].print();
- }
- btScalar eps = SIMD_EPSILON;
- for (int i = 0; i < m_out.size(); ++i)
- {
- for (int j = 0; j < m_out.size(); ++j)
- {
- if (i == j)
- {
- if (std::abs(1.0-m_out[i].dot(m_out[j])) > eps)// && std::abs(m_out[i].dot(m_out[j])) > eps)
- {
- printf("vec[%d] is not unit, norm squared = %f\n", i,m_out[i].dot(m_out[j]));
- }
- }
- else
- {
- if (std::abs(m_out[i].dot(m_out[j])) > eps)
- {
- printf("vec[%d] and vec[%d] is not orthogonal, dot product = %f\n", i, j, m_out[i].dot(m_out[j]));
- }
- }
- }
- }
- }
-};
-template class btModifiedGramSchmidt<btReducedVector>;
-#endif /* btModifiedGramSchmidt_h */
diff --git a/thirdparty/bullet/LinearMath/btMotionState.h b/thirdparty/bullet/LinearMath/btMotionState.h
deleted file mode 100644
index ae6a51611d..0000000000
--- a/thirdparty/bullet/LinearMath/btMotionState.h
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_MOTIONSTATE_H
-#define BT_MOTIONSTATE_H
-
-#include "btTransform.h"
-
-///The btMotionState interface class allows the dynamics world to synchronize and interpolate the updated world transforms with graphics
-///For optimizations, potentially only moving objects get synchronized (using setWorldPosition/setWorldOrientation)
-class btMotionState
-{
-public:
- virtual ~btMotionState()
- {
- }
-
- virtual void getWorldTransform(btTransform& worldTrans) const = 0;
-
- //Bullet only calls the update of worldtransform for active objects
- virtual void setWorldTransform(const btTransform& worldTrans) = 0;
-};
-
-#endif //BT_MOTIONSTATE_H
diff --git a/thirdparty/bullet/LinearMath/btPolarDecomposition.cpp b/thirdparty/bullet/LinearMath/btPolarDecomposition.cpp
deleted file mode 100644
index d9c72a8014..0000000000
--- a/thirdparty/bullet/LinearMath/btPolarDecomposition.cpp
+++ /dev/null
@@ -1,94 +0,0 @@
-#include "btPolarDecomposition.h"
-#include "btMinMax.h"
-
-namespace
-{
-btScalar abs_column_sum(const btMatrix3x3& a, int i)
-{
- return btFabs(a[0][i]) + btFabs(a[1][i]) + btFabs(a[2][i]);
-}
-
-btScalar abs_row_sum(const btMatrix3x3& a, int i)
-{
- return btFabs(a[i][0]) + btFabs(a[i][1]) + btFabs(a[i][2]);
-}
-
-btScalar p1_norm(const btMatrix3x3& a)
-{
- const btScalar sum0 = abs_column_sum(a, 0);
- const btScalar sum1 = abs_column_sum(a, 1);
- const btScalar sum2 = abs_column_sum(a, 2);
- return btMax(btMax(sum0, sum1), sum2);
-}
-
-btScalar pinf_norm(const btMatrix3x3& a)
-{
- const btScalar sum0 = abs_row_sum(a, 0);
- const btScalar sum1 = abs_row_sum(a, 1);
- const btScalar sum2 = abs_row_sum(a, 2);
- return btMax(btMax(sum0, sum1), sum2);
-}
-} // namespace
-
-btPolarDecomposition::btPolarDecomposition(btScalar tolerance, unsigned int maxIterations)
- : m_tolerance(tolerance), m_maxIterations(maxIterations)
-{
-}
-
-unsigned int btPolarDecomposition::decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const
-{
- // Use the 'u' and 'h' matrices for intermediate calculations
- u = a;
- h = a.inverse();
-
- for (unsigned int i = 0; i < m_maxIterations; ++i)
- {
- const btScalar h_1 = p1_norm(h);
- const btScalar h_inf = pinf_norm(h);
- const btScalar u_1 = p1_norm(u);
- const btScalar u_inf = pinf_norm(u);
-
- const btScalar h_norm = h_1 * h_inf;
- const btScalar u_norm = u_1 * u_inf;
-
- // The matrix is effectively singular so we cannot invert it
- if (btFuzzyZero(h_norm) || btFuzzyZero(u_norm))
- break;
-
- const btScalar gamma = btPow(h_norm / u_norm, 0.25f);
- const btScalar inv_gamma = btScalar(1.0) / gamma;
-
- // Determine the delta to 'u'
- const btMatrix3x3 delta = (u * (gamma - btScalar(2.0)) + h.transpose() * inv_gamma) * btScalar(0.5);
-
- // Update the matrices
- u += delta;
- h = u.inverse();
-
- // Check for convergence
- if (p1_norm(delta) <= m_tolerance * u_1)
- {
- h = u.transpose() * a;
- h = (h + h.transpose()) * 0.5;
- return i;
- }
- }
-
- // The algorithm has failed to converge to the specified tolerance, but we
- // want to make sure that the matrices returned are in the right form.
- h = u.transpose() * a;
- h = (h + h.transpose()) * 0.5;
-
- return m_maxIterations;
-}
-
-unsigned int btPolarDecomposition::maxIterations() const
-{
- return m_maxIterations;
-}
-
-unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h)
-{
- static btPolarDecomposition polar;
- return polar.decompose(a, u, h);
-}
diff --git a/thirdparty/bullet/LinearMath/btPolarDecomposition.h b/thirdparty/bullet/LinearMath/btPolarDecomposition.h
deleted file mode 100644
index bf29140a14..0000000000
--- a/thirdparty/bullet/LinearMath/btPolarDecomposition.h
+++ /dev/null
@@ -1,69 +0,0 @@
-#ifndef POLARDECOMPOSITION_H
-#define POLARDECOMPOSITION_H
-
-#include "btMatrix3x3.h"
-
-/**
- * This class is used to compute the polar decomposition of a matrix. In
- * general, the polar decomposition factorizes a matrix, A, into two parts: a
- * unitary matrix (U) and a positive, semi-definite Hermitian matrix (H).
- * However, in this particular implementation the original matrix, A, is
- * required to be a square 3x3 matrix with real elements. This means that U will
- * be an orthogonal matrix and H with be a positive-definite, symmetric matrix.
- */
-class btPolarDecomposition
-{
-public:
- /**
- * Creates an instance with optional parameters.
- *
- * @param tolerance - the tolerance used to determine convergence of the
- * algorithm
- * @param maxIterations - the maximum number of iterations used to achieve
- * convergence
- */
- btPolarDecomposition(btScalar tolerance = btScalar(0.0001),
- unsigned int maxIterations = 16);
-
- /**
- * Decomposes a matrix into orthogonal and symmetric, positive-definite
- * parts. If the number of iterations returned by this function is equal to
- * the maximum number of iterations, the algorithm has failed to converge.
- *
- * @param a - the original matrix
- * @param u - the resulting orthogonal matrix
- * @param h - the resulting symmetric matrix
- *
- * @return the number of iterations performed by the algorithm.
- */
- unsigned int decompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h) const;
-
- /**
- * Returns the maximum number of iterations that this algorithm will perform
- * to achieve convergence.
- *
- * @return maximum number of iterations
- */
- unsigned int maxIterations() const;
-
-private:
- btScalar m_tolerance;
- unsigned int m_maxIterations;
-};
-
-/**
- * This functions decomposes the matrix 'a' into two parts: an orthogonal matrix
- * 'u' and a symmetric, positive-definite matrix 'h'. If the number of
- * iterations returned by this function is equal to
- * btPolarDecomposition::DEFAULT_MAX_ITERATIONS, the algorithm has failed to
- * converge.
- *
- * @param a - the original matrix
- * @param u - the resulting orthogonal matrix
- * @param h - the resulting symmetric matrix
- *
- * @return the number of iterations performed by the algorithm.
- */
-unsigned int polarDecompose(const btMatrix3x3& a, btMatrix3x3& u, btMatrix3x3& h);
-
-#endif // POLARDECOMPOSITION_H
diff --git a/thirdparty/bullet/LinearMath/btPoolAllocator.h b/thirdparty/bullet/LinearMath/btPoolAllocator.h
deleted file mode 100644
index 4e7b49660a..0000000000
--- a/thirdparty/bullet/LinearMath/btPoolAllocator.h
+++ /dev/null
@@ -1,130 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef _BT_POOL_ALLOCATOR_H
-#define _BT_POOL_ALLOCATOR_H
-
-#include "btScalar.h"
-#include "btAlignedAllocator.h"
-#include "btThreads.h"
-
-///The btPoolAllocator class allows to efficiently allocate a large pool of objects, instead of dynamically allocating them separately.
-class btPoolAllocator
-{
- int m_elemSize;
- int m_maxElements;
- int m_freeCount;
- void* m_firstFree;
- unsigned char* m_pool;
- btSpinMutex m_mutex; // only used if BT_THREADSAFE
-
-public:
- btPoolAllocator(int elemSize, int maxElements)
- : m_elemSize(elemSize),
- m_maxElements(maxElements)
- {
- m_pool = (unsigned char*)btAlignedAlloc(static_cast<unsigned int>(m_elemSize * m_maxElements), 16);
-
- unsigned char* p = m_pool;
- m_firstFree = p;
- m_freeCount = m_maxElements;
- int count = m_maxElements;
- while (--count)
- {
- *(void**)p = (p + m_elemSize);
- p += m_elemSize;
- }
- *(void**)p = 0;
- }
-
- ~btPoolAllocator()
- {
- btAlignedFree(m_pool);
- }
-
- int getFreeCount() const
- {
- return m_freeCount;
- }
-
- int getUsedCount() const
- {
- return m_maxElements - m_freeCount;
- }
-
- int getMaxCount() const
- {
- return m_maxElements;
- }
-
- void* allocate(int size)
- {
- // release mode fix
- (void)size;
- btMutexLock(&m_mutex);
- btAssert(!size || size <= m_elemSize);
- //btAssert(m_freeCount>0); // should return null if all full
- void* result = m_firstFree;
- if (NULL != m_firstFree)
- {
- m_firstFree = *(void**)m_firstFree;
- --m_freeCount;
- }
- btMutexUnlock(&m_mutex);
- return result;
- }
-
- bool validPtr(void* ptr)
- {
- if (ptr)
- {
- if (((unsigned char*)ptr >= m_pool && (unsigned char*)ptr < m_pool + m_maxElements * m_elemSize))
- {
- return true;
- }
- }
- return false;
- }
-
- void freeMemory(void* ptr)
- {
- if (ptr)
- {
- btAssert((unsigned char*)ptr >= m_pool && (unsigned char*)ptr < m_pool + m_maxElements * m_elemSize);
-
- btMutexLock(&m_mutex);
- *(void**)ptr = m_firstFree;
- m_firstFree = ptr;
- ++m_freeCount;
- btMutexUnlock(&m_mutex);
- }
- }
-
- int getElementSize() const
- {
- return m_elemSize;
- }
-
- unsigned char* getPoolAddress()
- {
- return m_pool;
- }
-
- const unsigned char* getPoolAddress() const
- {
- return m_pool;
- }
-};
-
-#endif //_BT_POOL_ALLOCATOR_H
diff --git a/thirdparty/bullet/LinearMath/btQuadWord.h b/thirdparty/bullet/LinearMath/btQuadWord.h
deleted file mode 100644
index ab2d3175ad..0000000000
--- a/thirdparty/bullet/LinearMath/btQuadWord.h
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMD_QUADWORD_H
-#define BT_SIMD_QUADWORD_H
-
-#include "btScalar.h"
-#include "btMinMax.h"
-
-#if defined(__CELLOS_LV2) && defined(__SPU__)
-#include <altivec.h>
-#endif
-
-/**@brief The btQuadWord class is base class for btVector3 and btQuaternion.
- * Some issues under PS3 Linux with IBM 2.1 SDK, gcc compiler prevent from using aligned quadword.
- */
-#ifndef USE_LIBSPE2
-ATTRIBUTE_ALIGNED16(class)
-btQuadWord
-#else
-class btQuadWord
-#endif
-{
-protected:
-#if defined(__SPU__) && defined(__CELLOS_LV2__)
- union {
- vec_float4 mVec128;
- btScalar m_floats[4];
- };
-
-public:
- vec_float4 get128() const
- {
- return mVec128;
- }
-
-protected:
-#else //__CELLOS_LV2__ __SPU__
-
-#if defined(BT_USE_SSE) || defined(BT_USE_NEON)
- union {
- btSimdFloat4 mVec128;
- btScalar m_floats[4];
- };
-
-public:
- SIMD_FORCE_INLINE btSimdFloat4 get128() const
- {
- return mVec128;
- }
- SIMD_FORCE_INLINE void set128(btSimdFloat4 v128)
- {
- mVec128 = v128;
- }
-#else
- btScalar m_floats[4];
-#endif // BT_USE_SSE
-
-#endif //__CELLOS_LV2__ __SPU__
-
-public:
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
-
- // Set Vector
- SIMD_FORCE_INLINE btQuadWord(const btSimdFloat4 vec)
- {
- mVec128 = vec;
- }
-
- // Copy constructor
- SIMD_FORCE_INLINE btQuadWord(const btQuadWord& rhs)
- {
- mVec128 = rhs.mVec128;
- }
-
- // Assignment Operator
- SIMD_FORCE_INLINE btQuadWord&
- operator=(const btQuadWord& v)
- {
- mVec128 = v.mVec128;
-
- return *this;
- }
-
-#endif
-
- /**@brief Return the x value */
- SIMD_FORCE_INLINE const btScalar& getX() const { return m_floats[0]; }
- /**@brief Return the y value */
- SIMD_FORCE_INLINE const btScalar& getY() const { return m_floats[1]; }
- /**@brief Return the z value */
- SIMD_FORCE_INLINE const btScalar& getZ() const { return m_floats[2]; }
- /**@brief Set the x value */
- SIMD_FORCE_INLINE void setX(btScalar _x) { m_floats[0] = _x; };
- /**@brief Set the y value */
- SIMD_FORCE_INLINE void setY(btScalar _y) { m_floats[1] = _y; };
- /**@brief Set the z value */
- SIMD_FORCE_INLINE void setZ(btScalar _z) { m_floats[2] = _z; };
- /**@brief Set the w value */
- SIMD_FORCE_INLINE void setW(btScalar _w) { m_floats[3] = _w; };
- /**@brief Return the x value */
- SIMD_FORCE_INLINE const btScalar& x() const { return m_floats[0]; }
- /**@brief Return the y value */
- SIMD_FORCE_INLINE const btScalar& y() const { return m_floats[1]; }
- /**@brief Return the z value */
- SIMD_FORCE_INLINE const btScalar& z() const { return m_floats[2]; }
- /**@brief Return the w value */
- SIMD_FORCE_INLINE const btScalar& w() const { return m_floats[3]; }
-
- //SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_floats[0])[i]; }
- //SIMD_FORCE_INLINE const btScalar& operator[](int i) const { return (&m_floats[0])[i]; }
- ///operator btScalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons.
- SIMD_FORCE_INLINE operator btScalar*() { return &m_floats[0]; }
- SIMD_FORCE_INLINE operator const btScalar*() const { return &m_floats[0]; }
-
- SIMD_FORCE_INLINE bool operator==(const btQuadWord& other) const
- {
-#ifdef BT_USE_SSE
- return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128)));
-#else
- return ((m_floats[3] == other.m_floats[3]) &&
- (m_floats[2] == other.m_floats[2]) &&
- (m_floats[1] == other.m_floats[1]) &&
- (m_floats[0] == other.m_floats[0]));
-#endif
- }
-
- SIMD_FORCE_INLINE bool operator!=(const btQuadWord& other) const
- {
- return !(*this == other);
- }
-
- /**@brief Set x,y,z and zero w
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- */
- SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = 0.f;
- }
-
- /* void getValue(btScalar *m) const
- {
- m[0] = m_floats[0];
- m[1] = m_floats[1];
- m[2] = m_floats[2];
- }
-*/
- /**@brief Set the values
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
- */
- SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = _w;
- }
- /**@brief No initialization constructor */
- SIMD_FORCE_INLINE btQuadWord()
- // :m_floats[0](btScalar(0.)),m_floats[1](btScalar(0.)),m_floats[2](btScalar(0.)),m_floats[3](btScalar(0.))
- {
- }
-
- /**@brief Three argument constructor (zeros w)
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- */
- SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z)
- {
- m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = 0.0f;
- }
-
- /**@brief Initializing constructor
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
- */
- SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
- {
- m_floats[0] = _x, m_floats[1] = _y, m_floats[2] = _z, m_floats[3] = _w;
- }
-
- /**@brief Set each element to the max of the current values and the values of another btQuadWord
- * @param other The other btQuadWord to compare with
- */
- SIMD_FORCE_INLINE void setMax(const btQuadWord& other)
- {
-#ifdef BT_USE_SSE
- mVec128 = _mm_max_ps(mVec128, other.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vmaxq_f32(mVec128, other.mVec128);
-#else
- btSetMax(m_floats[0], other.m_floats[0]);
- btSetMax(m_floats[1], other.m_floats[1]);
- btSetMax(m_floats[2], other.m_floats[2]);
- btSetMax(m_floats[3], other.m_floats[3]);
-#endif
- }
- /**@brief Set each element to the min of the current values and the values of another btQuadWord
- * @param other The other btQuadWord to compare with
- */
- SIMD_FORCE_INLINE void setMin(const btQuadWord& other)
- {
-#ifdef BT_USE_SSE
- mVec128 = _mm_min_ps(mVec128, other.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vminq_f32(mVec128, other.mVec128);
-#else
- btSetMin(m_floats[0], other.m_floats[0]);
- btSetMin(m_floats[1], other.m_floats[1]);
- btSetMin(m_floats[2], other.m_floats[2]);
- btSetMin(m_floats[3], other.m_floats[3]);
-#endif
- }
-};
-
-#endif //BT_SIMD_QUADWORD_H
diff --git a/thirdparty/bullet/LinearMath/btQuaternion.h b/thirdparty/bullet/LinearMath/btQuaternion.h
deleted file mode 100644
index 53e8169b80..0000000000
--- a/thirdparty/bullet/LinearMath/btQuaternion.h
+++ /dev/null
@@ -1,1021 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SIMD__QUATERNION_H_
-#define BT_SIMD__QUATERNION_H_
-
-#include "btVector3.h"
-#include "btQuadWord.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btQuaternionData btQuaternionDoubleData
-#define btQuaternionDataName "btQuaternionDoubleData"
-#else
-#define btQuaternionData btQuaternionFloatData
-#define btQuaternionDataName "btQuaternionFloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-#ifdef BT_USE_SSE
-
-//const __m128 ATTRIBUTE_ALIGNED16(vOnes) = {1.0f, 1.0f, 1.0f, 1.0f};
-#define vOnes (_mm_set_ps(1.0f, 1.0f, 1.0f, 1.0f))
-
-#endif
-
-#if defined(BT_USE_SSE)
-
-#define vQInv (_mm_set_ps(+0.0f, -0.0f, -0.0f, -0.0f))
-#define vPPPM (_mm_set_ps(-0.0f, +0.0f, +0.0f, +0.0f))
-
-#elif defined(BT_USE_NEON)
-
-const btSimdFloat4 ATTRIBUTE_ALIGNED16(vQInv) = {-0.0f, -0.0f, -0.0f, +0.0f};
-const btSimdFloat4 ATTRIBUTE_ALIGNED16(vPPPM) = {+0.0f, +0.0f, +0.0f, -0.0f};
-
-#endif
-
-/**@brief The btQuaternion implements quaternion to perform linear algebra rotations in combination with btMatrix3x3, btVector3 and btTransform. */
-class btQuaternion : public btQuadWord
-{
-public:
- /**@brief No initialization constructor */
- btQuaternion() {}
-
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- // Set Vector
- SIMD_FORCE_INLINE btQuaternion(const btSimdFloat4 vec)
- {
- mVec128 = vec;
- }
-
- // Copy constructor
- SIMD_FORCE_INLINE btQuaternion(const btQuaternion& rhs)
- {
- mVec128 = rhs.mVec128;
- }
-
- // Assignment Operator
- SIMD_FORCE_INLINE btQuaternion&
- operator=(const btQuaternion& v)
- {
- mVec128 = v.mVec128;
-
- return *this;
- }
-
-#endif
-
- // template <typename btScalar>
- // explicit Quaternion(const btScalar *v) : Tuple4<btScalar>(v) {}
- /**@brief Constructor from scalars */
- btQuaternion(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
- : btQuadWord(_x, _y, _z, _w)
- {
- }
- /**@brief Axis angle Constructor
- * @param axis The axis which the rotation is around
- * @param angle The magnitude of the rotation around the angle (Radians) */
- btQuaternion(const btVector3& _axis, const btScalar& _angle)
- {
- setRotation(_axis, _angle);
- }
- /**@brief Constructor from Euler angles
- * @param yaw Angle around Y unless BT_EULER_DEFAULT_ZYX defined then Z
- * @param pitch Angle around X unless BT_EULER_DEFAULT_ZYX defined then Y
- * @param roll Angle around Z unless BT_EULER_DEFAULT_ZYX defined then X */
- btQuaternion(const btScalar& yaw, const btScalar& pitch, const btScalar& roll)
- {
-#ifndef BT_EULER_DEFAULT_ZYX
- setEuler(yaw, pitch, roll);
-#else
- setEulerZYX(yaw, pitch, roll);
-#endif
- }
- /**@brief Set the rotation using axis angle notation
- * @param axis The axis around which to rotate
- * @param angle The magnitude of the rotation in Radians */
- void setRotation(const btVector3& axis, const btScalar& _angle)
- {
- btScalar d = axis.length();
- btAssert(d != btScalar(0.0));
- btScalar s = btSin(_angle * btScalar(0.5)) / d;
- setValue(axis.x() * s, axis.y() * s, axis.z() * s,
- btCos(_angle * btScalar(0.5)));
- }
- /**@brief Set the quaternion using Euler angles
- * @param yaw Angle around Y
- * @param pitch Angle around X
- * @param roll Angle around Z */
- void setEuler(const btScalar& yaw, const btScalar& pitch, const btScalar& roll)
- {
- btScalar halfYaw = btScalar(yaw) * btScalar(0.5);
- btScalar halfPitch = btScalar(pitch) * btScalar(0.5);
- btScalar halfRoll = btScalar(roll) * btScalar(0.5);
- btScalar cosYaw = btCos(halfYaw);
- btScalar sinYaw = btSin(halfYaw);
- btScalar cosPitch = btCos(halfPitch);
- btScalar sinPitch = btSin(halfPitch);
- btScalar cosRoll = btCos(halfRoll);
- btScalar sinRoll = btSin(halfRoll);
- setValue(cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw,
- cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw,
- sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw,
- cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw);
- }
- /**@brief Set the quaternion using euler angles
- * @param yaw Angle around Z
- * @param pitch Angle around Y
- * @param roll Angle around X */
- void setEulerZYX(const btScalar& yawZ, const btScalar& pitchY, const btScalar& rollX)
- {
- btScalar halfYaw = btScalar(yawZ) * btScalar(0.5);
- btScalar halfPitch = btScalar(pitchY) * btScalar(0.5);
- btScalar halfRoll = btScalar(rollX) * btScalar(0.5);
- btScalar cosYaw = btCos(halfYaw);
- btScalar sinYaw = btSin(halfYaw);
- btScalar cosPitch = btCos(halfPitch);
- btScalar sinPitch = btSin(halfPitch);
- btScalar cosRoll = btCos(halfRoll);
- btScalar sinRoll = btSin(halfRoll);
- setValue(sinRoll * cosPitch * cosYaw - cosRoll * sinPitch * sinYaw, //x
- cosRoll * sinPitch * cosYaw + sinRoll * cosPitch * sinYaw, //y
- cosRoll * cosPitch * sinYaw - sinRoll * sinPitch * cosYaw, //z
- cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw); //formerly yzx
- }
-
- /**@brief Get the euler angles from this quaternion
- * @param yaw Angle around Z
- * @param pitch Angle around Y
- * @param roll Angle around X */
- void getEulerZYX(btScalar& yawZ, btScalar& pitchY, btScalar& rollX) const
- {
- btScalar squ;
- btScalar sqx;
- btScalar sqy;
- btScalar sqz;
- btScalar sarg;
- sqx = m_floats[0] * m_floats[0];
- sqy = m_floats[1] * m_floats[1];
- sqz = m_floats[2] * m_floats[2];
- squ = m_floats[3] * m_floats[3];
- sarg = btScalar(-2.) * (m_floats[0] * m_floats[2] - m_floats[3] * m_floats[1]);
-
- // If the pitch angle is PI/2 or -PI/2, we can only compute
- // the sum roll + yaw. However, any combination that gives
- // the right sum will produce the correct orientation, so we
- // set rollX = 0 and compute yawZ.
- if (sarg <= -btScalar(0.99999))
- {
- pitchY = btScalar(-0.5) * SIMD_PI;
- rollX = 0;
- yawZ = btScalar(2) * btAtan2(m_floats[0], -m_floats[1]);
- }
- else if (sarg >= btScalar(0.99999))
- {
- pitchY = btScalar(0.5) * SIMD_PI;
- rollX = 0;
- yawZ = btScalar(2) * btAtan2(-m_floats[0], m_floats[1]);
- }
- else
- {
- pitchY = btAsin(sarg);
- rollX = btAtan2(2 * (m_floats[1] * m_floats[2] + m_floats[3] * m_floats[0]), squ - sqx - sqy + sqz);
- yawZ = btAtan2(2 * (m_floats[0] * m_floats[1] + m_floats[3] * m_floats[2]), squ + sqx - sqy - sqz);
- }
- }
-
- /**@brief Add two quaternions
- * @param q The quaternion to add to this one */
- SIMD_FORCE_INLINE btQuaternion& operator+=(const btQuaternion& q)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_add_ps(mVec128, q.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vaddq_f32(mVec128, q.mVec128);
-#else
- m_floats[0] += q.x();
- m_floats[1] += q.y();
- m_floats[2] += q.z();
- m_floats[3] += q.m_floats[3];
-#endif
- return *this;
- }
-
- /**@brief Subtract out a quaternion
- * @param q The quaternion to subtract from this one */
- btQuaternion& operator-=(const btQuaternion& q)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_sub_ps(mVec128, q.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vsubq_f32(mVec128, q.mVec128);
-#else
- m_floats[0] -= q.x();
- m_floats[1] -= q.y();
- m_floats[2] -= q.z();
- m_floats[3] -= q.m_floats[3];
-#endif
- return *this;
- }
-
- /**@brief Scale this quaternion
- * @param s The scalar to scale by */
- btQuaternion& operator*=(const btScalar& s)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = bt_pshufd_ps(vs, 0); // (S S S S)
- mVec128 = _mm_mul_ps(mVec128, vs);
-#elif defined(BT_USE_NEON)
- mVec128 = vmulq_n_f32(mVec128, s);
-#else
- m_floats[0] *= s;
- m_floats[1] *= s;
- m_floats[2] *= s;
- m_floats[3] *= s;
-#endif
- return *this;
- }
-
- /**@brief Multiply this quaternion by q on the right
- * @param q The other quaternion
- * Equivilant to this = this * q */
- btQuaternion& operator*=(const btQuaternion& q)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vQ2 = q.get128();
-
- __m128 A1 = bt_pshufd_ps(mVec128, BT_SHUFFLE(0, 1, 2, 0));
- __m128 B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(3, 3, 3, 0));
-
- A1 = A1 * B1;
-
- __m128 A2 = bt_pshufd_ps(mVec128, BT_SHUFFLE(1, 2, 0, 1));
- __m128 B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1));
-
- A2 = A2 * B2;
-
- B1 = bt_pshufd_ps(mVec128, BT_SHUFFLE(2, 0, 1, 2));
- B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2));
-
- B1 = B1 * B2; // A3 *= B3
-
- mVec128 = bt_splat_ps(mVec128, 3); // A0
- mVec128 = mVec128 * vQ2; // A0 * B0
-
- A1 = A1 + A2; // AB12
- mVec128 = mVec128 - B1; // AB03 = AB0 - AB3
- A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element
- mVec128 = mVec128 + A1; // AB03 + AB12
-
-#elif defined(BT_USE_NEON)
-
- float32x4_t vQ1 = mVec128;
- float32x4_t vQ2 = q.get128();
- float32x4_t A0, A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz;
-
- {
- float32x2x2_t tmp;
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
- }
- vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1);
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x
- B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
- A0 = vmulq_lane_f32(vQ2, vget_high_f32(vQ1), 1); // A0 * B0
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
- A0 = vsubq_f32(A0, A3); // AB03 = AB0 - AB3
-
- // change the sign of the last element
- A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM);
- A0 = vaddq_f32(A0, A1); // AB03 + AB12
-
- mVec128 = A0;
-#else
- setValue(
- m_floats[3] * q.x() + m_floats[0] * q.m_floats[3] + m_floats[1] * q.z() - m_floats[2] * q.y(),
- m_floats[3] * q.y() + m_floats[1] * q.m_floats[3] + m_floats[2] * q.x() - m_floats[0] * q.z(),
- m_floats[3] * q.z() + m_floats[2] * q.m_floats[3] + m_floats[0] * q.y() - m_floats[1] * q.x(),
- m_floats[3] * q.m_floats[3] - m_floats[0] * q.x() - m_floats[1] * q.y() - m_floats[2] * q.z());
-#endif
- return *this;
- }
- /**@brief Return the dot product between this quaternion and another
- * @param q The other quaternion */
- btScalar dot(const btQuaternion& q) const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vd;
-
- vd = _mm_mul_ps(mVec128, q.mVec128);
-
- __m128 t = _mm_movehl_ps(vd, vd);
- vd = _mm_add_ps(vd, t);
- t = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, t);
-
- return _mm_cvtss_f32(vd);
-#elif defined(BT_USE_NEON)
- float32x4_t vd = vmulq_f32(mVec128, q.mVec128);
- float32x2_t x = vpadd_f32(vget_low_f32(vd), vget_high_f32(vd));
- x = vpadd_f32(x, x);
- return vget_lane_f32(x, 0);
-#else
- return m_floats[0] * q.x() +
- m_floats[1] * q.y() +
- m_floats[2] * q.z() +
- m_floats[3] * q.m_floats[3];
-#endif
- }
-
- /**@brief Return the length squared of the quaternion */
- btScalar length2() const
- {
- return dot(*this);
- }
-
- /**@brief Return the length of the quaternion */
- btScalar length() const
- {
- return btSqrt(length2());
- }
- btQuaternion& safeNormalize()
- {
- btScalar l2 = length2();
- if (l2 > SIMD_EPSILON)
- {
- normalize();
- }
- return *this;
- }
- /**@brief Normalize the quaternion
- * Such that x^2 + y^2 + z^2 +w^2 = 1 */
- btQuaternion& normalize()
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vd;
-
- vd = _mm_mul_ps(mVec128, mVec128);
-
- __m128 t = _mm_movehl_ps(vd, vd);
- vd = _mm_add_ps(vd, t);
- t = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, t);
-
- vd = _mm_sqrt_ss(vd);
- vd = _mm_div_ss(vOnes, vd);
- vd = bt_pshufd_ps(vd, 0); // splat
- mVec128 = _mm_mul_ps(mVec128, vd);
-
- return *this;
-#else
- return *this /= length();
-#endif
- }
-
- /**@brief Return a scaled version of this quaternion
- * @param s The scale factor */
- SIMD_FORCE_INLINE btQuaternion
- operator*(const btScalar& s) const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = bt_pshufd_ps(vs, 0x00); // (S S S S)
-
- return btQuaternion(_mm_mul_ps(mVec128, vs));
-#elif defined(BT_USE_NEON)
- return btQuaternion(vmulq_n_f32(mVec128, s));
-#else
- return btQuaternion(x() * s, y() * s, z() * s, m_floats[3] * s);
-#endif
- }
-
- /**@brief Return an inversely scaled versionof this quaternion
- * @param s The inverse scale factor */
- btQuaternion operator/(const btScalar& s) const
- {
- btAssert(s != btScalar(0.0));
- return *this * (btScalar(1.0) / s);
- }
-
- /**@brief Inversely scale this quaternion
- * @param s The scale factor */
- btQuaternion& operator/=(const btScalar& s)
- {
- btAssert(s != btScalar(0.0));
- return *this *= btScalar(1.0) / s;
- }
-
- /**@brief Return a normalized version of this quaternion */
- btQuaternion normalized() const
- {
- return *this / length();
- }
- /**@brief Return the ***half*** angle between this quaternion and the other
- * @param q The other quaternion */
- btScalar angle(const btQuaternion& q) const
- {
- btScalar s = btSqrt(length2() * q.length2());
- btAssert(s != btScalar(0.0));
- return btAcos(dot(q) / s);
- }
-
- /**@brief Return the angle between this quaternion and the other along the shortest path
- * @param q The other quaternion */
- btScalar angleShortestPath(const btQuaternion& q) const
- {
- btScalar s = btSqrt(length2() * q.length2());
- btAssert(s != btScalar(0.0));
- if (dot(q) < 0) // Take care of long angle case see http://en.wikipedia.org/wiki/Slerp
- return btAcos(dot(-q) / s) * btScalar(2.0);
- else
- return btAcos(dot(q) / s) * btScalar(2.0);
- }
-
- /**@brief Return the angle [0, 2Pi] of rotation represented by this quaternion */
- btScalar getAngle() const
- {
- btScalar s = btScalar(2.) * btAcos(m_floats[3]);
- return s;
- }
-
- /**@brief Return the angle [0, Pi] of rotation represented by this quaternion along the shortest path */
- btScalar getAngleShortestPath() const
- {
- btScalar s;
- if (m_floats[3] >= 0)
- s = btScalar(2.) * btAcos(m_floats[3]);
- else
- s = btScalar(2.) * btAcos(-m_floats[3]);
- return s;
- }
-
- /**@brief Return the axis of the rotation represented by this quaternion */
- btVector3 getAxis() const
- {
- btScalar s_squared = 1.f - m_floats[3] * m_floats[3];
-
- if (s_squared < btScalar(10.) * SIMD_EPSILON) //Check for divide by zero
- return btVector3(1.0, 0.0, 0.0); // Arbitrary
- btScalar s = 1.f / btSqrt(s_squared);
- return btVector3(m_floats[0] * s, m_floats[1] * s, m_floats[2] * s);
- }
-
- /**@brief Return the inverse of this quaternion */
- btQuaternion inverse() const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btQuaternion(_mm_xor_ps(mVec128, vQInv));
-#elif defined(BT_USE_NEON)
- return btQuaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)vQInv));
-#else
- return btQuaternion(-m_floats[0], -m_floats[1], -m_floats[2], m_floats[3]);
-#endif
- }
-
- /**@brief Return the sum of this quaternion and the other
- * @param q2 The other quaternion */
- SIMD_FORCE_INLINE btQuaternion
- operator+(const btQuaternion& q2) const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btQuaternion(_mm_add_ps(mVec128, q2.mVec128));
-#elif defined(BT_USE_NEON)
- return btQuaternion(vaddq_f32(mVec128, q2.mVec128));
-#else
- const btQuaternion& q1 = *this;
- return btQuaternion(q1.x() + q2.x(), q1.y() + q2.y(), q1.z() + q2.z(), q1.m_floats[3] + q2.m_floats[3]);
-#endif
- }
-
- /**@brief Return the difference between this quaternion and the other
- * @param q2 The other quaternion */
- SIMD_FORCE_INLINE btQuaternion
- operator-(const btQuaternion& q2) const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btQuaternion(_mm_sub_ps(mVec128, q2.mVec128));
-#elif defined(BT_USE_NEON)
- return btQuaternion(vsubq_f32(mVec128, q2.mVec128));
-#else
- const btQuaternion& q1 = *this;
- return btQuaternion(q1.x() - q2.x(), q1.y() - q2.y(), q1.z() - q2.z(), q1.m_floats[3] - q2.m_floats[3]);
-#endif
- }
-
- /**@brief Return the negative of this quaternion
- * This simply negates each element */
- SIMD_FORCE_INLINE btQuaternion operator-() const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btQuaternion(_mm_xor_ps(mVec128, btvMzeroMask));
-#elif defined(BT_USE_NEON)
- return btQuaternion((btSimdFloat4)veorq_s32((int32x4_t)mVec128, (int32x4_t)btvMzeroMask));
-#else
- const btQuaternion& q2 = *this;
- return btQuaternion(-q2.x(), -q2.y(), -q2.z(), -q2.m_floats[3]);
-#endif
- }
- /**@todo document this and it's use */
- SIMD_FORCE_INLINE btQuaternion farthest(const btQuaternion& qd) const
- {
- btQuaternion diff, sum;
- diff = *this - qd;
- sum = *this + qd;
- if (diff.dot(diff) > sum.dot(sum))
- return qd;
- return (-qd);
- }
-
- /**@todo document this and it's use */
- SIMD_FORCE_INLINE btQuaternion nearest(const btQuaternion& qd) const
- {
- btQuaternion diff, sum;
- diff = *this - qd;
- sum = *this + qd;
- if (diff.dot(diff) < sum.dot(sum))
- return qd;
- return (-qd);
- }
-
- /**@brief Return the quaternion which is the result of Spherical Linear Interpolation between this and the other quaternion
- * @param q The other quaternion to interpolate with
- * @param t The ratio between this and q to interpolate. If t = 0 the result is this, if t=1 the result is q.
- * Slerp interpolates assuming constant velocity. */
- btQuaternion slerp(const btQuaternion& q, const btScalar& t) const
- {
- const btScalar magnitude = btSqrt(length2() * q.length2());
- btAssert(magnitude > btScalar(0));
-
- const btScalar product = dot(q) / magnitude;
- const btScalar absproduct = btFabs(product);
-
- if (absproduct < btScalar(1.0 - SIMD_EPSILON))
- {
- // Take care of long angle case see http://en.wikipedia.org/wiki/Slerp
- const btScalar theta = btAcos(absproduct);
- const btScalar d = btSin(theta);
- btAssert(d > btScalar(0));
-
- const btScalar sign = (product < 0) ? btScalar(-1) : btScalar(1);
- const btScalar s0 = btSin((btScalar(1.0) - t) * theta) / d;
- const btScalar s1 = btSin(sign * t * theta) / d;
-
- return btQuaternion(
- (m_floats[0] * s0 + q.x() * s1),
- (m_floats[1] * s0 + q.y() * s1),
- (m_floats[2] * s0 + q.z() * s1),
- (m_floats[3] * s0 + q.w() * s1));
- }
- else
- {
- return *this;
- }
- }
-
- static const btQuaternion& getIdentity()
- {
- static const btQuaternion identityQuat(btScalar(0.), btScalar(0.), btScalar(0.), btScalar(1.));
- return identityQuat;
- }
-
- SIMD_FORCE_INLINE const btScalar& getW() const { return m_floats[3]; }
-
- SIMD_FORCE_INLINE void serialize(struct btQuaternionData& dataOut) const;
-
- SIMD_FORCE_INLINE void deSerialize(const struct btQuaternionFloatData& dataIn);
-
- SIMD_FORCE_INLINE void deSerialize(const struct btQuaternionDoubleData& dataIn);
-
- SIMD_FORCE_INLINE void serializeFloat(struct btQuaternionFloatData& dataOut) const;
-
- SIMD_FORCE_INLINE void deSerializeFloat(const struct btQuaternionFloatData& dataIn);
-
- SIMD_FORCE_INLINE void serializeDouble(struct btQuaternionDoubleData& dataOut) const;
-
- SIMD_FORCE_INLINE void deSerializeDouble(const struct btQuaternionDoubleData& dataIn);
-};
-
-/**@brief Return the product of two quaternions */
-SIMD_FORCE_INLINE btQuaternion
-operator*(const btQuaternion& q1, const btQuaternion& q2)
-{
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vQ1 = q1.get128();
- __m128 vQ2 = q2.get128();
- __m128 A0, A1, B1, A2, B2;
-
- A1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(0, 1, 2, 0)); // X Y z x // vtrn
- B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(3, 3, 3, 0)); // W W W X // vdup vext
-
- A1 = A1 * B1;
-
- A2 = bt_pshufd_ps(vQ1, BT_SHUFFLE(1, 2, 0, 1)); // Y Z X Y // vext
- B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1)); // z x Y Y // vtrn vdup
-
- A2 = A2 * B2;
-
- B1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(2, 0, 1, 2)); // z x Y Z // vtrn vext
- B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2)); // Y Z x z // vext vtrn
-
- B1 = B1 * B2; // A3 *= B3
-
- A0 = bt_splat_ps(vQ1, 3); // A0
- A0 = A0 * vQ2; // A0 * B0
-
- A1 = A1 + A2; // AB12
- A0 = A0 - B1; // AB03 = AB0 - AB3
-
- A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element
- A0 = A0 + A1; // AB03 + AB12
-
- return btQuaternion(A0);
-
-#elif defined(BT_USE_NEON)
-
- float32x4_t vQ1 = q1.get128();
- float32x4_t vQ2 = q2.get128();
- float32x4_t A0, A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz;
-
- {
- float32x2x2_t tmp;
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
- }
- vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1);
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x
- B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
- A0 = vmulq_lane_f32(vQ2, vget_high_f32(vQ1), 1); // A0 * B0
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
- A0 = vsubq_f32(A0, A3); // AB03 = AB0 - AB3
-
- // change the sign of the last element
- A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM);
- A0 = vaddq_f32(A0, A1); // AB03 + AB12
-
- return btQuaternion(A0);
-
-#else
- return btQuaternion(
- q1.w() * q2.x() + q1.x() * q2.w() + q1.y() * q2.z() - q1.z() * q2.y(),
- q1.w() * q2.y() + q1.y() * q2.w() + q1.z() * q2.x() - q1.x() * q2.z(),
- q1.w() * q2.z() + q1.z() * q2.w() + q1.x() * q2.y() - q1.y() * q2.x(),
- q1.w() * q2.w() - q1.x() * q2.x() - q1.y() * q2.y() - q1.z() * q2.z());
-#endif
-}
-
-SIMD_FORCE_INLINE btQuaternion
-operator*(const btQuaternion& q, const btVector3& w)
-{
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vQ1 = q.get128();
- __m128 vQ2 = w.get128();
- __m128 A1, B1, A2, B2, A3, B3;
-
- A1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(3, 3, 3, 0));
- B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(0, 1, 2, 0));
-
- A1 = A1 * B1;
-
- A2 = bt_pshufd_ps(vQ1, BT_SHUFFLE(1, 2, 0, 1));
- B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1));
-
- A2 = A2 * B2;
-
- A3 = bt_pshufd_ps(vQ1, BT_SHUFFLE(2, 0, 1, 2));
- B3 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2));
-
- A3 = A3 * B3; // A3 *= B3
-
- A1 = A1 + A2; // AB12
- A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element
- A1 = A1 - A3; // AB123 = AB12 - AB3
-
- return btQuaternion(A1);
-
-#elif defined(BT_USE_NEON)
-
- float32x4_t vQ1 = q.get128();
- float32x4_t vQ2 = w.get128();
- float32x4_t A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1wx, vQ2zx, vQ1yz, vQ2yz, vQ1zx, vQ2xz;
-
- vQ1wx = vext_f32(vget_high_f32(vQ1), vget_low_f32(vQ1), 1);
- {
- float32x2x2_t tmp;
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
- }
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ1), 1), vQ1wx); // W W W X
- B1 = vcombine_f32(vget_low_f32(vQ2), vQ2zx); // X Y z x
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
-
- // change the sign of the last element
- A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM);
-
- A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3
-
- return btQuaternion(A1);
-
-#else
- return btQuaternion(
- q.w() * w.x() + q.y() * w.z() - q.z() * w.y(),
- q.w() * w.y() + q.z() * w.x() - q.x() * w.z(),
- q.w() * w.z() + q.x() * w.y() - q.y() * w.x(),
- -q.x() * w.x() - q.y() * w.y() - q.z() * w.z());
-#endif
-}
-
-SIMD_FORCE_INLINE btQuaternion
-operator*(const btVector3& w, const btQuaternion& q)
-{
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vQ1 = w.get128();
- __m128 vQ2 = q.get128();
- __m128 A1, B1, A2, B2, A3, B3;
-
- A1 = bt_pshufd_ps(vQ1, BT_SHUFFLE(0, 1, 2, 0)); // X Y z x
- B1 = bt_pshufd_ps(vQ2, BT_SHUFFLE(3, 3, 3, 0)); // W W W X
-
- A1 = A1 * B1;
-
- A2 = bt_pshufd_ps(vQ1, BT_SHUFFLE(1, 2, 0, 1));
- B2 = bt_pshufd_ps(vQ2, BT_SHUFFLE(2, 0, 1, 1));
-
- A2 = A2 * B2;
-
- A3 = bt_pshufd_ps(vQ1, BT_SHUFFLE(2, 0, 1, 2));
- B3 = bt_pshufd_ps(vQ2, BT_SHUFFLE(1, 2, 0, 2));
-
- A3 = A3 * B3; // A3 *= B3
-
- A1 = A1 + A2; // AB12
- A1 = _mm_xor_ps(A1, vPPPM); // change sign of the last element
- A1 = A1 - A3; // AB123 = AB12 - AB3
-
- return btQuaternion(A1);
-
-#elif defined(BT_USE_NEON)
-
- float32x4_t vQ1 = w.get128();
- float32x4_t vQ2 = q.get128();
- float32x4_t A1, B1, A2, B2, A3, B3;
- float32x2_t vQ1zx, vQ2wx, vQ1yz, vQ2zx, vQ2yz, vQ2xz;
-
- {
- float32x2x2_t tmp;
-
- tmp = vtrn_f32(vget_high_f32(vQ1), vget_low_f32(vQ1)); // {z x}, {w y}
- vQ1zx = tmp.val[0];
-
- tmp = vtrn_f32(vget_high_f32(vQ2), vget_low_f32(vQ2)); // {z x}, {w y}
- vQ2zx = tmp.val[0];
- }
- vQ2wx = vext_f32(vget_high_f32(vQ2), vget_low_f32(vQ2), 1);
-
- vQ1yz = vext_f32(vget_low_f32(vQ1), vget_high_f32(vQ1), 1);
-
- vQ2yz = vext_f32(vget_low_f32(vQ2), vget_high_f32(vQ2), 1);
- vQ2xz = vext_f32(vQ2zx, vQ2zx, 1);
-
- A1 = vcombine_f32(vget_low_f32(vQ1), vQ1zx); // X Y z x
- B1 = vcombine_f32(vdup_lane_f32(vget_high_f32(vQ2), 1), vQ2wx); // W W W X
-
- A2 = vcombine_f32(vQ1yz, vget_low_f32(vQ1));
- B2 = vcombine_f32(vQ2zx, vdup_lane_f32(vget_low_f32(vQ2), 1));
-
- A3 = vcombine_f32(vQ1zx, vQ1yz); // Z X Y Z
- B3 = vcombine_f32(vQ2yz, vQ2xz); // Y Z x z
-
- A1 = vmulq_f32(A1, B1);
- A2 = vmulq_f32(A2, B2);
- A3 = vmulq_f32(A3, B3); // A3 *= B3
-
- A1 = vaddq_f32(A1, A2); // AB12 = AB1 + AB2
-
- // change the sign of the last element
- A1 = (btSimdFloat4)veorq_s32((int32x4_t)A1, (int32x4_t)vPPPM);
-
- A1 = vsubq_f32(A1, A3); // AB123 = AB12 - AB3
-
- return btQuaternion(A1);
-
-#else
- return btQuaternion(
- +w.x() * q.w() + w.y() * q.z() - w.z() * q.y(),
- +w.y() * q.w() + w.z() * q.x() - w.x() * q.z(),
- +w.z() * q.w() + w.x() * q.y() - w.y() * q.x(),
- -w.x() * q.x() - w.y() * q.y() - w.z() * q.z());
-#endif
-}
-
-/**@brief Calculate the dot product between two quaternions */
-SIMD_FORCE_INLINE btScalar
-dot(const btQuaternion& q1, const btQuaternion& q2)
-{
- return q1.dot(q2);
-}
-
-/**@brief Return the length of a quaternion */
-SIMD_FORCE_INLINE btScalar
-length(const btQuaternion& q)
-{
- return q.length();
-}
-
-/**@brief Return the angle between two quaternions*/
-SIMD_FORCE_INLINE btScalar
-btAngle(const btQuaternion& q1, const btQuaternion& q2)
-{
- return q1.angle(q2);
-}
-
-/**@brief Return the inverse of a quaternion*/
-SIMD_FORCE_INLINE btQuaternion
-inverse(const btQuaternion& q)
-{
- return q.inverse();
-}
-
-/**@brief Return the result of spherical linear interpolation betwen two quaternions
- * @param q1 The first quaternion
- * @param q2 The second quaternion
- * @param t The ration between q1 and q2. t = 0 return q1, t=1 returns q2
- * Slerp assumes constant velocity between positions. */
-SIMD_FORCE_INLINE btQuaternion
-slerp(const btQuaternion& q1, const btQuaternion& q2, const btScalar& t)
-{
- return q1.slerp(q2, t);
-}
-
-SIMD_FORCE_INLINE btVector3
-quatRotate(const btQuaternion& rotation, const btVector3& v)
-{
- btQuaternion q = rotation * v;
- q *= rotation.inverse();
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btVector3(_mm_and_ps(q.get128(), btvFFF0fMask));
-#elif defined(BT_USE_NEON)
- return btVector3((float32x4_t)vandq_s32((int32x4_t)q.get128(), btvFFF0Mask));
-#else
- return btVector3(q.getX(), q.getY(), q.getZ());
-#endif
-}
-
-SIMD_FORCE_INLINE btQuaternion
-shortestArcQuat(const btVector3& v0, const btVector3& v1) // Game Programming Gems 2.10. make sure v0,v1 are normalized
-{
- btVector3 c = v0.cross(v1);
- btScalar d = v0.dot(v1);
-
- if (d < -1.0 + SIMD_EPSILON)
- {
- btVector3 n, unused;
- btPlaneSpace1(v0, n, unused);
- return btQuaternion(n.x(), n.y(), n.z(), 0.0f); // just pick any vector that is orthogonal to v0
- }
-
- btScalar s = btSqrt((1.0f + d) * 2.0f);
- btScalar rs = 1.0f / s;
-
- return btQuaternion(c.getX() * rs, c.getY() * rs, c.getZ() * rs, s * 0.5f);
-}
-
-SIMD_FORCE_INLINE btQuaternion
-shortestArcQuatNormalize2(btVector3& v0, btVector3& v1)
-{
- v0.normalize();
- v1.normalize();
- return shortestArcQuat(v0, v1);
-}
-
-struct btQuaternionFloatData
-{
- float m_floats[4];
-};
-
-struct btQuaternionDoubleData
-{
- double m_floats[4];
-};
-
-SIMD_FORCE_INLINE void btQuaternion::serializeFloat(struct btQuaternionFloatData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = float(m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btQuaternion::deSerializeFloat(const struct btQuaternionFloatData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = btScalar(dataIn.m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btQuaternion::serializeDouble(struct btQuaternionDoubleData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = double(m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btQuaternion::deSerializeDouble(const struct btQuaternionDoubleData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = btScalar(dataIn.m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btQuaternion::serialize(struct btQuaternionData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = m_floats[i];
-}
-
-SIMD_FORCE_INLINE void btQuaternion::deSerialize(const struct btQuaternionFloatData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = (btScalar)dataIn.m_floats[i];
-}
-
-SIMD_FORCE_INLINE void btQuaternion::deSerialize(const struct btQuaternionDoubleData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = (btScalar)dataIn.m_floats[i];
-}
-
-#endif //BT_SIMD__QUATERNION_H_
diff --git a/thirdparty/bullet/LinearMath/btQuickprof.cpp b/thirdparty/bullet/LinearMath/btQuickprof.cpp
deleted file mode 100644
index 33b51eb763..0000000000
--- a/thirdparty/bullet/LinearMath/btQuickprof.cpp
+++ /dev/null
@@ -1,805 +0,0 @@
-/*
-
-***************************************************************************************************
-**
-** profile.cpp
-**
-** Real-Time Hierarchical Profiling for Game Programming Gems 3
-**
-** by Greg Hjelstrom & Byon Garrabrant
-**
-***************************************************************************************************/
-
-// Credits: The Clock class was inspired by the Timer classes in
-// Ogre (www.ogre3d.org).
-
-#include "btQuickprof.h"
-#include "btThreads.h"
-
-#ifdef __CELLOS_LV2__
-#include <sys/sys_time.h>
-#include <sys/time_util.h>
-#include <stdio.h>
-#endif
-
-#if defined(SUNOS) || defined(__SUNOS__)
-#include <stdio.h>
-#endif
-#ifdef __APPLE__
-#include <mach/mach_time.h>
-#include <TargetConditionals.h>
-#endif
-
-#if defined(WIN32) || defined(_WIN32)
-
-#define BT_USE_WINDOWS_TIMERS
-#define WIN32_LEAN_AND_MEAN
-#define NOWINRES
-#define NOMCX
-#define NOIME
-
-#ifdef _XBOX
-#include <Xtl.h>
-#else //_XBOX
-#include <windows.h>
-
-#if WINVER < 0x0602
-#define GetTickCount64 GetTickCount
-#endif
-
-#endif //_XBOX
-
-#include <time.h>
-
-#else //_WIN32
-#include <sys/time.h>
-
-#ifdef BT_LINUX_REALTIME
-//required linking against rt (librt)
-#include <time.h>
-#endif //BT_LINUX_REALTIME
-
-#endif //_WIN32
-
-#define mymin(a, b) (a > b ? a : b)
-
-struct btClockData
-{
-#ifdef BT_USE_WINDOWS_TIMERS
- LARGE_INTEGER mClockFrequency;
- LONGLONG mStartTick;
- LARGE_INTEGER mStartTime;
-#else
-#ifdef __CELLOS_LV2__
- uint64_t mStartTime;
-#else
-#ifdef __APPLE__
- uint64_t mStartTimeNano;
-#endif
- struct timeval mStartTime;
-#endif
-#endif //__CELLOS_LV2__
-};
-
-///The btClock is a portable basic clock that measures accurate time in seconds, use for profiling.
-btClock::btClock()
-{
- m_data = new btClockData;
-#ifdef BT_USE_WINDOWS_TIMERS
- QueryPerformanceFrequency(&m_data->mClockFrequency);
-#endif
- reset();
-}
-
-btClock::~btClock()
-{
- delete m_data;
-}
-
-btClock::btClock(const btClock& other)
-{
- m_data = new btClockData;
- *m_data = *other.m_data;
-}
-
-btClock& btClock::operator=(const btClock& other)
-{
- *m_data = *other.m_data;
- return *this;
-}
-
-/// Resets the initial reference time.
-void btClock::reset()
-{
-#ifdef BT_USE_WINDOWS_TIMERS
- QueryPerformanceCounter(&m_data->mStartTime);
- m_data->mStartTick = GetTickCount64();
-#else
-#ifdef __CELLOS_LV2__
-
- typedef uint64_t ClockSize;
- ClockSize newTime;
- //__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
- SYS_TIMEBASE_GET(newTime);
- m_data->mStartTime = newTime;
-#else
-#ifdef __APPLE__
- m_data->mStartTimeNano = mach_absolute_time();
-#endif
- gettimeofday(&m_data->mStartTime, 0);
-#endif
-#endif
-}
-
-/// Returns the time in ms since the last call to reset or since
-/// the btClock was created.
-unsigned long long int btClock::getTimeMilliseconds()
-{
-#ifdef BT_USE_WINDOWS_TIMERS
- LARGE_INTEGER currentTime;
- QueryPerformanceCounter(&currentTime);
- LONGLONG elapsedTime = currentTime.QuadPart -
- m_data->mStartTime.QuadPart;
- // Compute the number of millisecond ticks elapsed.
- unsigned long msecTicks = (unsigned long)(1000 * elapsedTime /
- m_data->mClockFrequency.QuadPart);
-
- return msecTicks;
-#else
-
-#ifdef __CELLOS_LV2__
- uint64_t freq = sys_time_get_timebase_frequency();
- double dFreq = ((double)freq) / 1000.0;
- typedef uint64_t ClockSize;
- ClockSize newTime;
- SYS_TIMEBASE_GET(newTime);
- //__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
-
- return (unsigned long int)((double(newTime - m_data->mStartTime)) / dFreq);
-#else
-
- struct timeval currentTime;
- gettimeofday(&currentTime, 0);
- return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1000 +
- (currentTime.tv_usec - m_data->mStartTime.tv_usec) / 1000;
-#endif //__CELLOS_LV2__
-#endif
-}
-
-/// Returns the time in us since the last call to reset or since
-/// the Clock was created.
-unsigned long long int btClock::getTimeMicroseconds()
-{
-#ifdef BT_USE_WINDOWS_TIMERS
- //see https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx
- LARGE_INTEGER currentTime, elapsedTime;
-
- QueryPerformanceCounter(&currentTime);
- elapsedTime.QuadPart = currentTime.QuadPart -
- m_data->mStartTime.QuadPart;
- elapsedTime.QuadPart *= 1000000;
- elapsedTime.QuadPart /= m_data->mClockFrequency.QuadPart;
-
- return (unsigned long long)elapsedTime.QuadPart;
-#else
-
-#ifdef __CELLOS_LV2__
- uint64_t freq = sys_time_get_timebase_frequency();
- double dFreq = ((double)freq) / 1000000.0;
- typedef uint64_t ClockSize;
- ClockSize newTime;
- //__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
- SYS_TIMEBASE_GET(newTime);
-
- return (unsigned long int)((double(newTime - m_data->mStartTime)) / dFreq);
-#else
-
- struct timeval currentTime;
- gettimeofday(&currentTime, 0);
- return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1000000 +
- (currentTime.tv_usec - m_data->mStartTime.tv_usec);
-#endif //__CELLOS_LV2__
-#endif
-}
-
-unsigned long long int btClock::getTimeNanoseconds()
-{
-#ifdef BT_USE_WINDOWS_TIMERS
- //see https://msdn.microsoft.com/en-us/library/windows/desktop/dn553408(v=vs.85).aspx
- LARGE_INTEGER currentTime, elapsedTime;
-
- QueryPerformanceCounter(&currentTime);
- elapsedTime.QuadPart = currentTime.QuadPart -
- m_data->mStartTime.QuadPart;
- elapsedTime.QuadPart *= 1000000000;
- elapsedTime.QuadPart /= m_data->mClockFrequency.QuadPart;
-
- return (unsigned long long)elapsedTime.QuadPart;
-#else
-
-#ifdef __CELLOS_LV2__
- uint64_t freq = sys_time_get_timebase_frequency();
- double dFreq = ((double)freq) / 1e9;
- typedef uint64_t ClockSize;
- ClockSize newTime;
- //__asm __volatile__( "mftb %0" : "=r" (newTime) : : "memory");
- SYS_TIMEBASE_GET(newTime);
-
- return (unsigned long int)((double(newTime - m_data->mStartTime)) / dFreq);
-#else
-#ifdef __APPLE__
- uint64_t ticks = mach_absolute_time() - m_data->mStartTimeNano;
- static long double conversion = 0.0L;
- if (0.0L == conversion)
- {
- // attempt to get conversion to nanoseconds
- mach_timebase_info_data_t info;
- int err = mach_timebase_info(&info);
- if (err)
- {
- btAssert(0);
- conversion = 1.;
- }
- conversion = info.numer / info.denom;
- }
- return (ticks * conversion);
-
-#else //__APPLE__
-
-#ifdef BT_LINUX_REALTIME
- timespec ts;
- clock_gettime(CLOCK_REALTIME, &ts);
- return 1000000000 * ts.tv_sec + ts.tv_nsec;
-#else
- struct timeval currentTime;
- gettimeofday(&currentTime, 0);
- return (currentTime.tv_sec - m_data->mStartTime.tv_sec) * 1e9 +
- (currentTime.tv_usec - m_data->mStartTime.tv_usec) * 1000;
-#endif //BT_LINUX_REALTIME
-
-#endif //__APPLE__
-#endif //__CELLOS_LV2__
-#endif
-}
-
-/// Returns the time in s since the last call to reset or since
-/// the Clock was created.
-btScalar btClock::getTimeSeconds()
-{
- static const btScalar microseconds_to_seconds = btScalar(0.000001);
- return btScalar(getTimeMicroseconds()) * microseconds_to_seconds;
-}
-
-#ifndef BT_NO_PROFILE
-
-static btClock gProfileClock;
-
-inline void Profile_Get_Ticks(unsigned long int* ticks)
-{
- *ticks = (unsigned long int)gProfileClock.getTimeMicroseconds();
-}
-
-inline float Profile_Get_Tick_Rate(void)
-{
- // return 1000000.f;
- return 1000.f;
-}
-
-/***************************************************************************************************
-**
-** CProfileNode
-**
-***************************************************************************************************/
-
-/***********************************************************************************************
- * INPUT: *
- * name - pointer to a static string which is the name of this profile node *
- * parent - parent pointer *
- * *
- * WARNINGS: *
- * The name is assumed to be a static pointer, only the pointer is stored and compared for *
- * efficiency reasons. *
- *=============================================================================================*/
-CProfileNode::CProfileNode(const char* name, CProfileNode* parent) : Name(name),
- TotalCalls(0),
- TotalTime(0),
- StartTime(0),
- RecursionCounter(0),
- Parent(parent),
- Child(NULL),
- Sibling(NULL),
- m_userPtr(0)
-{
- Reset();
-}
-
-void CProfileNode::CleanupMemory()
-{
- delete (Child);
- Child = NULL;
- delete (Sibling);
- Sibling = NULL;
-}
-
-CProfileNode::~CProfileNode(void)
-{
- CleanupMemory();
-}
-
-/***********************************************************************************************
- * INPUT: *
- * name - static string pointer to the name of the node we are searching for *
- * *
- * WARNINGS: *
- * All profile names are assumed to be static strings so this function uses pointer compares *
- * to find the named node. *
- *=============================================================================================*/
-CProfileNode* CProfileNode::Get_Sub_Node(const char* name)
-{
- // Try to find this sub node
- CProfileNode* child = Child;
- while (child)
- {
- if (child->Name == name)
- {
- return child;
- }
- child = child->Sibling;
- }
-
- // We didn't find it, so add it
-
- CProfileNode* node = new CProfileNode(name, this);
- node->Sibling = Child;
- Child = node;
- return node;
-}
-
-void CProfileNode::Reset(void)
-{
- TotalCalls = 0;
- TotalTime = 0.0f;
-
- if (Child)
- {
- Child->Reset();
- }
- if (Sibling)
- {
- Sibling->Reset();
- }
-}
-
-void CProfileNode::Call(void)
-{
- TotalCalls++;
- if (RecursionCounter++ == 0)
- {
- Profile_Get_Ticks(&StartTime);
- }
-}
-
-bool CProfileNode::Return(void)
-{
- if (--RecursionCounter == 0 && TotalCalls != 0)
- {
- unsigned long int time;
- Profile_Get_Ticks(&time);
-
- time -= StartTime;
- TotalTime += (float)time / Profile_Get_Tick_Rate();
- }
- return (RecursionCounter == 0);
-}
-
-/***************************************************************************************************
-**
-** CProfileIterator
-**
-***************************************************************************************************/
-CProfileIterator::CProfileIterator(CProfileNode* start)
-{
- CurrentParent = start;
- CurrentChild = CurrentParent->Get_Child();
-}
-
-void CProfileIterator::First(void)
-{
- CurrentChild = CurrentParent->Get_Child();
-}
-
-void CProfileIterator::Next(void)
-{
- CurrentChild = CurrentChild->Get_Sibling();
-}
-
-bool CProfileIterator::Is_Done(void)
-{
- return CurrentChild == NULL;
-}
-
-void CProfileIterator::Enter_Child(int index)
-{
- CurrentChild = CurrentParent->Get_Child();
- while ((CurrentChild != NULL) && (index != 0))
- {
- index--;
- CurrentChild = CurrentChild->Get_Sibling();
- }
-
- if (CurrentChild != NULL)
- {
- CurrentParent = CurrentChild;
- CurrentChild = CurrentParent->Get_Child();
- }
-}
-
-void CProfileIterator::Enter_Parent(void)
-{
- if (CurrentParent->Get_Parent() != NULL)
- {
- CurrentParent = CurrentParent->Get_Parent();
- }
- CurrentChild = CurrentParent->Get_Child();
-}
-
-/***************************************************************************************************
-**
-** CProfileManager
-**
-***************************************************************************************************/
-
-CProfileNode gRoots[BT_QUICKPROF_MAX_THREAD_COUNT] = {
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL),
- CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL), CProfileNode("Root", NULL)};
-
-CProfileNode* gCurrentNodes[BT_QUICKPROF_MAX_THREAD_COUNT] =
- {
- &gRoots[0],
- &gRoots[1],
- &gRoots[2],
- &gRoots[3],
- &gRoots[4],
- &gRoots[5],
- &gRoots[6],
- &gRoots[7],
- &gRoots[8],
- &gRoots[9],
- &gRoots[10],
- &gRoots[11],
- &gRoots[12],
- &gRoots[13],
- &gRoots[14],
- &gRoots[15],
- &gRoots[16],
- &gRoots[17],
- &gRoots[18],
- &gRoots[19],
- &gRoots[20],
- &gRoots[21],
- &gRoots[22],
- &gRoots[23],
- &gRoots[24],
- &gRoots[25],
- &gRoots[26],
- &gRoots[27],
- &gRoots[28],
- &gRoots[29],
- &gRoots[30],
- &gRoots[31],
- &gRoots[32],
- &gRoots[33],
- &gRoots[34],
- &gRoots[35],
- &gRoots[36],
- &gRoots[37],
- &gRoots[38],
- &gRoots[39],
- &gRoots[40],
- &gRoots[41],
- &gRoots[42],
- &gRoots[43],
- &gRoots[44],
- &gRoots[45],
- &gRoots[46],
- &gRoots[47],
- &gRoots[48],
- &gRoots[49],
- &gRoots[50],
- &gRoots[51],
- &gRoots[52],
- &gRoots[53],
- &gRoots[54],
- &gRoots[55],
- &gRoots[56],
- &gRoots[57],
- &gRoots[58],
- &gRoots[59],
- &gRoots[60],
- &gRoots[61],
- &gRoots[62],
- &gRoots[63],
-};
-
-int CProfileManager::FrameCounter = 0;
-unsigned long int CProfileManager::ResetTime = 0;
-
-CProfileIterator* CProfileManager::Get_Iterator(void)
-{
- int threadIndex = btQuickprofGetCurrentThreadIndex2();
- if ((threadIndex < 0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
- return 0;
-
- return new CProfileIterator(&gRoots[threadIndex]);
-}
-
-void CProfileManager::CleanupMemory(void)
-{
- for (int i = 0; i < BT_QUICKPROF_MAX_THREAD_COUNT; i++)
- {
- gRoots[i].CleanupMemory();
- }
-}
-
-/***********************************************************************************************
- * CProfileManager::Start_Profile -- Begin a named profile *
- * *
- * Steps one level deeper into the tree, if a child already exists with the specified name *
- * then it accumulates the profiling; otherwise a new child node is added to the profile tree. *
- * *
- * INPUT: *
- * name - name of this profiling record *
- * *
- * WARNINGS: *
- * The string used is assumed to be a static string; pointer compares are used throughout *
- * the profiling code for efficiency. *
- *=============================================================================================*/
-void CProfileManager::Start_Profile(const char* name)
-{
- int threadIndex = btQuickprofGetCurrentThreadIndex2();
- if ((threadIndex < 0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
- return;
-
- if (name != gCurrentNodes[threadIndex]->Get_Name())
- {
- gCurrentNodes[threadIndex] = gCurrentNodes[threadIndex]->Get_Sub_Node(name);
- }
-
- gCurrentNodes[threadIndex]->Call();
-}
-
-/***********************************************************************************************
- * CProfileManager::Stop_Profile -- Stop timing and record the results. *
- *=============================================================================================*/
-void CProfileManager::Stop_Profile(void)
-{
- int threadIndex = btQuickprofGetCurrentThreadIndex2();
- if ((threadIndex < 0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
- return;
-
- // Return will indicate whether we should back up to our parent (we may
- // be profiling a recursive function)
- if (gCurrentNodes[threadIndex]->Return())
- {
- gCurrentNodes[threadIndex] = gCurrentNodes[threadIndex]->Get_Parent();
- }
-}
-
-/***********************************************************************************************
- * CProfileManager::Reset -- Reset the contents of the profiling system *
- * *
- * This resets everything except for the tree structure. All of the timing data is reset. *
- *=============================================================================================*/
-void CProfileManager::Reset(void)
-{
- gProfileClock.reset();
- int threadIndex = btQuickprofGetCurrentThreadIndex2();
- if ((threadIndex < 0) || threadIndex >= BT_QUICKPROF_MAX_THREAD_COUNT)
- return;
- gRoots[threadIndex].Reset();
- gRoots[threadIndex].Call();
- FrameCounter = 0;
- Profile_Get_Ticks(&ResetTime);
-}
-
-/***********************************************************************************************
- * CProfileManager::Increment_Frame_Counter -- Increment the frame counter *
- *=============================================================================================*/
-void CProfileManager::Increment_Frame_Counter(void)
-{
- FrameCounter++;
-}
-
-/***********************************************************************************************
- * CProfileManager::Get_Time_Since_Reset -- returns the elapsed time since last reset *
- *=============================================================================================*/
-float CProfileManager::Get_Time_Since_Reset(void)
-{
- unsigned long int time;
- Profile_Get_Ticks(&time);
- time -= ResetTime;
- return (float)time / Profile_Get_Tick_Rate();
-}
-
-#include <stdio.h>
-
-void CProfileManager::dumpRecursive(CProfileIterator* profileIterator, int spacing)
-{
- profileIterator->First();
- if (profileIterator->Is_Done())
- return;
-
- float accumulated_time = 0, parent_time = profileIterator->Is_Root() ? CProfileManager::Get_Time_Since_Reset() : profileIterator->Get_Current_Parent_Total_Time();
- int i;
- int frames_since_reset = CProfileManager::Get_Frame_Count_Since_Reset();
- for (i = 0; i < spacing; i++) printf(".");
- printf("----------------------------------\n");
- for (i = 0; i < spacing; i++) printf(".");
- printf("Profiling: %s (total running time: %.3f ms) ---\n", profileIterator->Get_Current_Parent_Name(), parent_time);
- float totalTime = 0.f;
-
- int numChildren = 0;
-
- for (i = 0; !profileIterator->Is_Done(); i++, profileIterator->Next())
- {
- numChildren++;
- float current_total_time = profileIterator->Get_Current_Total_Time();
- accumulated_time += current_total_time;
- float fraction = parent_time > SIMD_EPSILON ? (current_total_time / parent_time) * 100 : 0.f;
- {
- int i;
- for (i = 0; i < spacing; i++) printf(".");
- }
- printf("%d -- %s (%.2f %%) :: %.3f ms / frame (%d calls)\n", i, profileIterator->Get_Current_Name(), fraction, (current_total_time / (double)frames_since_reset), profileIterator->Get_Current_Total_Calls());
- totalTime += current_total_time;
- //recurse into children
- }
-
- if (parent_time < accumulated_time)
- {
- //printf("what's wrong\n");
- }
- for (i = 0; i < spacing; i++) printf(".");
- printf("%s (%.3f %%) :: %.3f ms\n", "Unaccounted:", parent_time > SIMD_EPSILON ? ((parent_time - accumulated_time) / parent_time) * 100 : 0.f, parent_time - accumulated_time);
-
- for (i = 0; i < numChildren; i++)
- {
- profileIterator->Enter_Child(i);
- dumpRecursive(profileIterator, spacing + 3);
- profileIterator->Enter_Parent();
- }
-}
-
-void CProfileManager::dumpAll()
-{
- CProfileIterator* profileIterator = 0;
- profileIterator = CProfileManager::Get_Iterator();
-
- dumpRecursive(profileIterator, 0);
-
- CProfileManager::Release_Iterator(profileIterator);
-}
-
-
-void btEnterProfileZoneDefault(const char* name)
-{
-}
-void btLeaveProfileZoneDefault()
-{
-}
-
-#else
-void btEnterProfileZoneDefault(const char* name)
-{
-}
-void btLeaveProfileZoneDefault()
-{
-}
-#endif //BT_NO_PROFILE
-
-
-// clang-format off
-#if defined(_WIN32) && (defined(__MINGW32__) || defined(__MINGW64__))
- #define BT_HAVE_TLS 1
-#elif __APPLE__ && !TARGET_OS_IPHONE
- // TODO: Modern versions of iOS support TLS now with updated version checking.
- #define BT_HAVE_TLS 1
-#elif __linux__
- #define BT_HAVE_TLS 1
-#elif defined(__FreeBSD__) || defined(__NetBSD__)
- // TODO: At the moment disabling purposely OpenBSD, albeit tls support exists but not fully functioning
- #define BT_HAVE_TLS 1
-#endif
-
-// __thread is broken on Andorid clang until r12b. See
-// https://github.com/android-ndk/ndk/issues/8
-#if defined(__ANDROID__) && defined(__clang__)
- #if __has_include(<android/ndk-version.h>)
- #include <android/ndk-version.h>
- #endif // __has_include(<android/ndk-version.h>)
- #if defined(__NDK_MAJOR__) && \
- ((__NDK_MAJOR__ < 12) || ((__NDK_MAJOR__ == 12) && (__NDK_MINOR__ < 1)))
- #undef BT_HAVE_TLS
- #endif
-#endif // defined(__ANDROID__) && defined(__clang__)
-// clang-format on
-
-unsigned int btQuickprofGetCurrentThreadIndex2()
-{
- const unsigned int kNullIndex = ~0U;
-
-#if BT_THREADSAFE
- return btGetCurrentThreadIndex();
-#else
-#if defined(BT_HAVE_TLS)
- static __thread unsigned int sThreadIndex = kNullIndex;
-#elif defined(_WIN32)
- __declspec(thread) static unsigned int sThreadIndex = kNullIndex;
-#else
- unsigned int sThreadIndex = 0;
- return -1;
-#endif
-
- static int gThreadCounter = 0;
-
- if (sThreadIndex == kNullIndex)
- {
- sThreadIndex = gThreadCounter++;
- }
- return sThreadIndex;
-#endif //BT_THREADSAFE
-}
-
-static btEnterProfileZoneFunc* bts_enterFunc = btEnterProfileZoneDefault;
-static btLeaveProfileZoneFunc* bts_leaveFunc = btLeaveProfileZoneDefault;
-
-void btEnterProfileZone(const char* name)
-{
- (bts_enterFunc)(name);
-}
-void btLeaveProfileZone()
-{
- (bts_leaveFunc)();
-}
-
-btEnterProfileZoneFunc* btGetCurrentEnterProfileZoneFunc()
-{
- return bts_enterFunc;
-}
-btLeaveProfileZoneFunc* btGetCurrentLeaveProfileZoneFunc()
-{
- return bts_leaveFunc;
-}
-
-void btSetCustomEnterProfileZoneFunc(btEnterProfileZoneFunc* enterFunc)
-{
- bts_enterFunc = enterFunc;
-}
-void btSetCustomLeaveProfileZoneFunc(btLeaveProfileZoneFunc* leaveFunc)
-{
- bts_leaveFunc = leaveFunc;
-}
-
-CProfileSample::CProfileSample(const char* name)
-{
- btEnterProfileZone(name);
-}
-
-CProfileSample::~CProfileSample(void)
-{
- btLeaveProfileZone();
-}
diff --git a/thirdparty/bullet/LinearMath/btQuickprof.h b/thirdparty/bullet/LinearMath/btQuickprof.h
deleted file mode 100644
index 990d401d50..0000000000
--- a/thirdparty/bullet/LinearMath/btQuickprof.h
+++ /dev/null
@@ -1,200 +0,0 @@
-
-/***************************************************************************************************
-**
-** Real-Time Hierarchical Profiling for Game Programming Gems 3
-**
-** by Greg Hjelstrom & Byon Garrabrant
-**
-***************************************************************************************************/
-
-// Credits: The Clock class was inspired by the Timer classes in
-// Ogre (www.ogre3d.org).
-
-#ifndef BT_QUICK_PROF_H
-#define BT_QUICK_PROF_H
-
-#include "btScalar.h"
-#define USE_BT_CLOCK 1
-
-#ifdef USE_BT_CLOCK
-
-///The btClock is a portable basic clock that measures accurate time in seconds, use for profiling.
-class btClock
-{
-public:
- btClock();
-
- btClock(const btClock& other);
- btClock& operator=(const btClock& other);
-
- ~btClock();
-
- /// Resets the initial reference time.
- void reset();
-
- /// Returns the time in ms since the last call to reset or since
- /// the btClock was created.
- unsigned long long int getTimeMilliseconds();
-
- /// Returns the time in us since the last call to reset or since
- /// the Clock was created.
- unsigned long long int getTimeMicroseconds();
-
- unsigned long long int getTimeNanoseconds();
-
- /// Returns the time in s since the last call to reset or since
- /// the Clock was created.
- btScalar getTimeSeconds();
-
-private:
- struct btClockData* m_data;
-};
-
-#endif //USE_BT_CLOCK
-
-typedef void(btEnterProfileZoneFunc)(const char* msg);
-typedef void(btLeaveProfileZoneFunc)();
-
-btEnterProfileZoneFunc* btGetCurrentEnterProfileZoneFunc();
-btLeaveProfileZoneFunc* btGetCurrentLeaveProfileZoneFunc();
-
-void btSetCustomEnterProfileZoneFunc(btEnterProfileZoneFunc* enterFunc);
-void btSetCustomLeaveProfileZoneFunc(btLeaveProfileZoneFunc* leaveFunc);
-
-#ifndef BT_ENABLE_PROFILE
-#define BT_NO_PROFILE 1
-#endif //BT_NO_PROFILE
-
-const unsigned int BT_QUICKPROF_MAX_THREAD_COUNT = 64;
-
-//btQuickprofGetCurrentThreadIndex will return -1 if thread index cannot be determined,
-//otherwise returns thread index in range [0..maxThreads]
-unsigned int btQuickprofGetCurrentThreadIndex2();
-
-#ifndef BT_NO_PROFILE
-
-
-#include <stdio.h> //@todo remove this, backwards compatibility
-
-#include "btAlignedAllocator.h"
-#include <new>
-
-///A node in the Profile Hierarchy Tree
-class CProfileNode
-{
-public:
- CProfileNode(const char* name, CProfileNode* parent);
- ~CProfileNode(void);
-
- CProfileNode* Get_Sub_Node(const char* name);
-
- CProfileNode* Get_Parent(void) { return Parent; }
- CProfileNode* Get_Sibling(void) { return Sibling; }
- CProfileNode* Get_Child(void) { return Child; }
-
- void CleanupMemory();
- void Reset(void);
- void Call(void);
- bool Return(void);
-
- const char* Get_Name(void) { return Name; }
- int Get_Total_Calls(void) { return TotalCalls; }
- float Get_Total_Time(void) { return TotalTime; }
- void* GetUserPointer() const { return m_userPtr; }
- void SetUserPointer(void* ptr) { m_userPtr = ptr; }
-
-protected:
- const char* Name;
- int TotalCalls;
- float TotalTime;
- unsigned long int StartTime;
- int RecursionCounter;
-
- CProfileNode* Parent;
- CProfileNode* Child;
- CProfileNode* Sibling;
- void* m_userPtr;
-};
-
-///An iterator to navigate through the tree
-class CProfileIterator
-{
-public:
- // Access all the children of the current parent
- void First(void);
- void Next(void);
- bool Is_Done(void);
- bool Is_Root(void) { return (CurrentParent->Get_Parent() == 0); }
-
- void Enter_Child(int index); // Make the given child the new parent
- void Enter_Largest_Child(void); // Make the largest child the new parent
- void Enter_Parent(void); // Make the current parent's parent the new parent
-
- // Access the current child
- const char* Get_Current_Name(void) { return CurrentChild->Get_Name(); }
- int Get_Current_Total_Calls(void) { return CurrentChild->Get_Total_Calls(); }
- float Get_Current_Total_Time(void) { return CurrentChild->Get_Total_Time(); }
-
- void* Get_Current_UserPointer(void) { return CurrentChild->GetUserPointer(); }
- void Set_Current_UserPointer(void* ptr) { CurrentChild->SetUserPointer(ptr); }
- // Access the current parent
- const char* Get_Current_Parent_Name(void) { return CurrentParent->Get_Name(); }
- int Get_Current_Parent_Total_Calls(void) { return CurrentParent->Get_Total_Calls(); }
- float Get_Current_Parent_Total_Time(void) { return CurrentParent->Get_Total_Time(); }
-
-protected:
- CProfileNode* CurrentParent;
- CProfileNode* CurrentChild;
-
- CProfileIterator(CProfileNode* start);
- friend class CProfileManager;
-};
-
-///The Manager for the Profile system
-class CProfileManager
-{
-public:
- static void Start_Profile(const char* name);
- static void Stop_Profile(void);
-
- static void CleanupMemory(void);
- // {
- // Root.CleanupMemory();
- // }
-
- static void Reset(void);
- static void Increment_Frame_Counter(void);
- static int Get_Frame_Count_Since_Reset(void) { return FrameCounter; }
- static float Get_Time_Since_Reset(void);
-
- static CProfileIterator* Get_Iterator(void);
- // {
- //
- // return new CProfileIterator( &Root );
- // }
- static void Release_Iterator(CProfileIterator* iterator) { delete (iterator); }
-
- static void dumpRecursive(CProfileIterator* profileIterator, int spacing);
-
- static void dumpAll();
-
-private:
- static int FrameCounter;
- static unsigned long int ResetTime;
-};
-
-#endif //#ifndef BT_NO_PROFILE
-
-///ProfileSampleClass is a simple way to profile a function's scope
-///Use the BT_PROFILE macro at the start of scope to time
-class CProfileSample
-{
-public:
- CProfileSample(const char* name);
-
- ~CProfileSample(void);
-};
-
-#define BT_PROFILE(name) CProfileSample __profile(name)
-
-#endif //BT_QUICK_PROF_H
diff --git a/thirdparty/bullet/LinearMath/btRandom.h b/thirdparty/bullet/LinearMath/btRandom.h
deleted file mode 100644
index e659af8605..0000000000
--- a/thirdparty/bullet/LinearMath/btRandom.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_GEN_RANDOM_H
-#define BT_GEN_RANDOM_H
-
-#ifdef MT19937
-
-#include <limits.h>
-#include <mt19937.h>
-
-#define GEN_RAND_MAX UINT_MAX
-
-SIMD_FORCE_INLINE void GEN_srand(unsigned int seed) { init_genrand(seed); }
-SIMD_FORCE_INLINE unsigned int GEN_rand() { return genrand_int32(); }
-
-#else
-
-#include <stdlib.h>
-
-#define GEN_RAND_MAX RAND_MAX
-
-SIMD_FORCE_INLINE void GEN_srand(unsigned int seed) { srand(seed); }
-SIMD_FORCE_INLINE unsigned int GEN_rand() { return rand(); }
-
-#endif
-
-#endif //BT_GEN_RANDOM_H
diff --git a/thirdparty/bullet/LinearMath/btReducedVector.cpp b/thirdparty/bullet/LinearMath/btReducedVector.cpp
deleted file mode 100644
index 1539584e7e..0000000000
--- a/thirdparty/bullet/LinearMath/btReducedVector.cpp
+++ /dev/null
@@ -1,170 +0,0 @@
-//
-// btReducedVector.cpp
-// LinearMath
-//
-// Created by Xuchen Han on 4/4/20.
-//
-#include <stdio.h>
-#include "btReducedVector.h"
-#include <cmath>
-
-// returns the projection of this onto other
-btReducedVector btReducedVector::proj(const btReducedVector& other) const
-{
- btReducedVector ret(m_sz);
- btScalar other_length2 = other.length2();
- if (other_length2 < SIMD_EPSILON)
- {
- return ret;
- }
- return other*(this->dot(other))/other_length2;
-}
-
-void btReducedVector::normalize()
-{
- if (this->length2() < SIMD_EPSILON)
- {
- m_indices.clear();
- m_vecs.clear();
- return;
- }
- *this /= std::sqrt(this->length2());
-}
-
-bool btReducedVector::testAdd() const
-{
- int sz = 5;
- btAlignedObjectArray<int> id1;
- id1.push_back(1);
- id1.push_back(3);
- btAlignedObjectArray<btVector3> v1;
- v1.push_back(btVector3(1,0,1));
- v1.push_back(btVector3(3,1,5));
- btAlignedObjectArray<int> id2;
- id2.push_back(2);
- id2.push_back(3);
- id2.push_back(5);
- btAlignedObjectArray<btVector3> v2;
- v2.push_back(btVector3(2,3,1));
- v2.push_back(btVector3(3,4,9));
- v2.push_back(btVector3(0,4,0));
- btAlignedObjectArray<int> id3;
- id3.push_back(1);
- id3.push_back(2);
- id3.push_back(3);
- id3.push_back(5);
- btAlignedObjectArray<btVector3> v3;
- v3.push_back(btVector3(1,0,1));
- v3.push_back(btVector3(2,3,1));
- v3.push_back(btVector3(6,5,14));
- v3.push_back(btVector3(0,4,0));
- btReducedVector rv1(sz, id1, v1);
- btReducedVector rv2(sz, id2, v2);
- btReducedVector ans(sz, id3, v3);
- bool ret = ((ans == rv1+rv2) && (ans == rv2+rv1));
- if (!ret)
- printf("btReducedVector testAdd failed\n");
- return ret;
-}
-
-bool btReducedVector::testMinus() const
-{
- int sz = 5;
- btAlignedObjectArray<int> id1;
- id1.push_back(1);
- id1.push_back(3);
- btAlignedObjectArray<btVector3> v1;
- v1.push_back(btVector3(1,0,1));
- v1.push_back(btVector3(3,1,5));
- btAlignedObjectArray<int> id2;
- id2.push_back(2);
- id2.push_back(3);
- id2.push_back(5);
- btAlignedObjectArray<btVector3> v2;
- v2.push_back(btVector3(2,3,1));
- v2.push_back(btVector3(3,4,9));
- v2.push_back(btVector3(0,4,0));
- btAlignedObjectArray<int> id3;
- id3.push_back(1);
- id3.push_back(2);
- id3.push_back(3);
- id3.push_back(5);
- btAlignedObjectArray<btVector3> v3;
- v3.push_back(btVector3(-1,-0,-1));
- v3.push_back(btVector3(2,3,1));
- v3.push_back(btVector3(0,3,4));
- v3.push_back(btVector3(0,4,0));
- btReducedVector rv1(sz, id1, v1);
- btReducedVector rv2(sz, id2, v2);
- btReducedVector ans(sz, id3, v3);
- bool ret = (ans == rv2-rv1);
- if (!ret)
- printf("btReducedVector testMinus failed\n");
- return ret;
-}
-
-bool btReducedVector::testDot() const
-{
- int sz = 5;
- btAlignedObjectArray<int> id1;
- id1.push_back(1);
- id1.push_back(3);
- btAlignedObjectArray<btVector3> v1;
- v1.push_back(btVector3(1,0,1));
- v1.push_back(btVector3(3,1,5));
- btAlignedObjectArray<int> id2;
- id2.push_back(2);
- id2.push_back(3);
- id2.push_back(5);
- btAlignedObjectArray<btVector3> v2;
- v2.push_back(btVector3(2,3,1));
- v2.push_back(btVector3(3,4,9));
- v2.push_back(btVector3(0,4,0));
- btReducedVector rv1(sz, id1, v1);
- btReducedVector rv2(sz, id2, v2);
- btScalar ans = 58;
- bool ret = (ans == rv2.dot(rv1) && ans == rv1.dot(rv2));
- ans = 14+16+9+16+81;
- ret &= (ans==rv2.dot(rv2));
-
- if (!ret)
- printf("btReducedVector testDot failed\n");
- return ret;
-}
-
-bool btReducedVector::testMultiply() const
-{
- int sz = 5;
- btAlignedObjectArray<int> id1;
- id1.push_back(1);
- id1.push_back(3);
- btAlignedObjectArray<btVector3> v1;
- v1.push_back(btVector3(1,0,1));
- v1.push_back(btVector3(3,1,5));
- btScalar s = 2;
- btReducedVector rv1(sz, id1, v1);
- btAlignedObjectArray<int> id2;
- id2.push_back(1);
- id2.push_back(3);
- btAlignedObjectArray<btVector3> v2;
- v2.push_back(btVector3(2,0,2));
- v2.push_back(btVector3(6,2,10));
- btReducedVector ans(sz, id2, v2);
- bool ret = (ans == rv1*s);
- if (!ret)
- printf("btReducedVector testMultiply failed\n");
- return ret;
-}
-
-void btReducedVector::test() const
-{
- bool ans = testAdd() && testMinus() && testDot() && testMultiply();
- if (ans)
- {
- printf("All tests passed\n");
- }
- else
- {
- printf("Tests failed\n");
- }
-}
diff --git a/thirdparty/bullet/LinearMath/btReducedVector.h b/thirdparty/bullet/LinearMath/btReducedVector.h
deleted file mode 100644
index 313a4271f0..0000000000
--- a/thirdparty/bullet/LinearMath/btReducedVector.h
+++ /dev/null
@@ -1,320 +0,0 @@
-//
-// btReducedVectors.h
-// BulletLinearMath
-//
-// Created by Xuchen Han on 4/4/20.
-//
-#ifndef btReducedVectors_h
-#define btReducedVectors_h
-#include "btVector3.h"
-#include "btMatrix3x3.h"
-#include "btAlignedObjectArray.h"
-#include <stdio.h>
-#include <vector>
-#include <algorithm>
-struct TwoInts
-{
- int a,b;
-};
-inline bool operator<(const TwoInts& A, const TwoInts& B)
-{
- return A.b < B.b;
-}
-
-
-// A helper vector type used for CG projections
-class btReducedVector
-{
-public:
- btAlignedObjectArray<int> m_indices;
- btAlignedObjectArray<btVector3> m_vecs;
- int m_sz; // all m_indices value < m_sz
-public:
- btReducedVector():m_sz(0)
- {
- m_indices.resize(0);
- m_vecs.resize(0);
- m_indices.clear();
- m_vecs.clear();
- }
-
- btReducedVector(int sz): m_sz(sz)
- {
- m_indices.resize(0);
- m_vecs.resize(0);
- m_indices.clear();
- m_vecs.clear();
- }
-
- btReducedVector(int sz, const btAlignedObjectArray<int>& indices, const btAlignedObjectArray<btVector3>& vecs): m_sz(sz), m_indices(indices), m_vecs(vecs)
- {
- }
-
- void simplify()
- {
- btAlignedObjectArray<int> old_indices(m_indices);
- btAlignedObjectArray<btVector3> old_vecs(m_vecs);
- m_indices.resize(0);
- m_vecs.resize(0);
- m_indices.clear();
- m_vecs.clear();
- for (int i = 0; i < old_indices.size(); ++i)
- {
- if (old_vecs[i].length2() > SIMD_EPSILON)
- {
- m_indices.push_back(old_indices[i]);
- m_vecs.push_back(old_vecs[i]);
- }
- }
- }
-
- btReducedVector operator+(const btReducedVector& other)
- {
- btReducedVector ret(m_sz);
- int i=0, j=0;
- while (i < m_indices.size() && j < other.m_indices.size())
- {
- if (m_indices[i] < other.m_indices[j])
- {
- ret.m_indices.push_back(m_indices[i]);
- ret.m_vecs.push_back(m_vecs[i]);
- ++i;
- }
- else if (m_indices[i] > other.m_indices[j])
- {
- ret.m_indices.push_back(other.m_indices[j]);
- ret.m_vecs.push_back(other.m_vecs[j]);
- ++j;
- }
- else
- {
- ret.m_indices.push_back(other.m_indices[j]);
- ret.m_vecs.push_back(m_vecs[i] + other.m_vecs[j]);
- ++i; ++j;
- }
- }
- while (i < m_indices.size())
- {
- ret.m_indices.push_back(m_indices[i]);
- ret.m_vecs.push_back(m_vecs[i]);
- ++i;
- }
- while (j < other.m_indices.size())
- {
- ret.m_indices.push_back(other.m_indices[j]);
- ret.m_vecs.push_back(other.m_vecs[j]);
- ++j;
- }
- ret.simplify();
- return ret;
- }
-
- btReducedVector operator-()
- {
- btReducedVector ret(m_sz);
- for (int i = 0; i < m_indices.size(); ++i)
- {
- ret.m_indices.push_back(m_indices[i]);
- ret.m_vecs.push_back(-m_vecs[i]);
- }
- ret.simplify();
- return ret;
- }
-
- btReducedVector operator-(const btReducedVector& other)
- {
- btReducedVector ret(m_sz);
- int i=0, j=0;
- while (i < m_indices.size() && j < other.m_indices.size())
- {
- if (m_indices[i] < other.m_indices[j])
- {
- ret.m_indices.push_back(m_indices[i]);
- ret.m_vecs.push_back(m_vecs[i]);
- ++i;
- }
- else if (m_indices[i] > other.m_indices[j])
- {
- ret.m_indices.push_back(other.m_indices[j]);
- ret.m_vecs.push_back(-other.m_vecs[j]);
- ++j;
- }
- else
- {
- ret.m_indices.push_back(other.m_indices[j]);
- ret.m_vecs.push_back(m_vecs[i] - other.m_vecs[j]);
- ++i; ++j;
- }
- }
- while (i < m_indices.size())
- {
- ret.m_indices.push_back(m_indices[i]);
- ret.m_vecs.push_back(m_vecs[i]);
- ++i;
- }
- while (j < other.m_indices.size())
- {
- ret.m_indices.push_back(other.m_indices[j]);
- ret.m_vecs.push_back(-other.m_vecs[j]);
- ++j;
- }
- ret.simplify();
- return ret;
- }
-
- bool operator==(const btReducedVector& other) const
- {
- if (m_sz != other.m_sz)
- return false;
- if (m_indices.size() != other.m_indices.size())
- return false;
- for (int i = 0; i < m_indices.size(); ++i)
- {
- if (m_indices[i] != other.m_indices[i] || m_vecs[i] != other.m_vecs[i])
- {
- return false;
- }
- }
- return true;
- }
-
- bool operator!=(const btReducedVector& other) const
- {
- return !(*this == other);
- }
-
- btReducedVector& operator=(const btReducedVector& other)
- {
- if (this == &other)
- {
- return *this;
- }
- m_sz = other.m_sz;
- m_indices.copyFromArray(other.m_indices);
- m_vecs.copyFromArray(other.m_vecs);
- return *this;
- }
-
- btScalar dot(const btReducedVector& other) const
- {
- btScalar ret = 0;
- int j = 0;
- for (int i = 0; i < m_indices.size(); ++i)
- {
- while (j < other.m_indices.size() && other.m_indices[j] < m_indices[i])
- {
- ++j;
- }
- if (j < other.m_indices.size() && other.m_indices[j] == m_indices[i])
- {
- ret += m_vecs[i].dot(other.m_vecs[j]);
-// ++j;
- }
- }
- return ret;
- }
-
- btScalar dot(const btAlignedObjectArray<btVector3>& other) const
- {
- btScalar ret = 0;
- for (int i = 0; i < m_indices.size(); ++i)
- {
- ret += m_vecs[i].dot(other[m_indices[i]]);
- }
- return ret;
- }
-
- btScalar length2() const
- {
- return this->dot(*this);
- }
-
- void normalize();
-
- // returns the projection of this onto other
- btReducedVector proj(const btReducedVector& other) const;
-
- bool testAdd() const;
-
- bool testMinus() const;
-
- bool testDot() const;
-
- bool testMultiply() const;
-
- void test() const;
-
- void print() const
- {
- for (int i = 0; i < m_indices.size(); ++i)
- {
- printf("%d: (%f, %f, %f)/", m_indices[i], m_vecs[i][0],m_vecs[i][1],m_vecs[i][2]);
- }
- printf("\n");
- }
-
-
- void sort()
- {
- std::vector<TwoInts> tuples;
- for (int i = 0; i < m_indices.size(); ++i)
- {
- TwoInts ti;
- ti.a = i;
- ti.b = m_indices[i];
- tuples.push_back(ti);
- }
- std::sort(tuples.begin(), tuples.end());
- btAlignedObjectArray<int> new_indices;
- btAlignedObjectArray<btVector3> new_vecs;
- for (size_t i = 0; i < tuples.size(); ++i)
- {
- new_indices.push_back(tuples[i].b);
- new_vecs.push_back(m_vecs[tuples[i].a]);
- }
- m_indices = new_indices;
- m_vecs = new_vecs;
- }
-};
-
-SIMD_FORCE_INLINE btReducedVector operator*(const btReducedVector& v, btScalar s)
-{
- btReducedVector ret(v.m_sz);
- for (int i = 0; i < v.m_indices.size(); ++i)
- {
- ret.m_indices.push_back(v.m_indices[i]);
- ret.m_vecs.push_back(s*v.m_vecs[i]);
- }
- ret.simplify();
- return ret;
-}
-
-SIMD_FORCE_INLINE btReducedVector operator*(btScalar s, const btReducedVector& v)
-{
- return v*s;
-}
-
-SIMD_FORCE_INLINE btReducedVector operator/(const btReducedVector& v, btScalar s)
-{
- return v * (1.0/s);
-}
-
-SIMD_FORCE_INLINE btReducedVector& operator/=(btReducedVector& v, btScalar s)
-{
- v = v/s;
- return v;
-}
-
-SIMD_FORCE_INLINE btReducedVector& operator+=(btReducedVector& v1, const btReducedVector& v2)
-{
- v1 = v1+v2;
- return v1;
-}
-
-SIMD_FORCE_INLINE btReducedVector& operator-=(btReducedVector& v1, const btReducedVector& v2)
-{
- v1 = v1-v2;
- return v1;
-}
-
-#endif /* btReducedVectors_h */
diff --git a/thirdparty/bullet/LinearMath/btScalar.h b/thirdparty/bullet/LinearMath/btScalar.h
deleted file mode 100644
index b239217bb6..0000000000
--- a/thirdparty/bullet/LinearMath/btScalar.h
+++ /dev/null
@@ -1,832 +0,0 @@
-/*
-Copyright (c) 2003-2009 Erwin Coumans http://bullet.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SCALAR_H
-#define BT_SCALAR_H
-
-#ifdef BT_MANAGED_CODE
-//Aligned data types not supported in managed code
-#pragma unmanaged
-#endif
-
-#include <math.h>
-#include <stdlib.h> //size_t for MSVC 6.0
-#include <float.h>
-
-/* SVN $Revision$ on $Date$ from http://bullet.googlecode.com*/
-#define BT_BULLET_VERSION 317
-
-inline int btGetVersion()
-{
- return BT_BULLET_VERSION;
-}
-
-inline int btIsDoublePrecision()
-{
- #ifdef BT_USE_DOUBLE_PRECISION
- return true;
- #else
- return false;
- #endif
-}
-
-
-// The following macro "BT_NOT_EMPTY_FILE" can be put into a file
-// in order suppress the MS Visual C++ Linker warning 4221
-//
-// warning LNK4221: no public symbols found; archive member will be inaccessible
-//
-// This warning occurs on PC and XBOX when a file compiles out completely
-// has no externally visible symbols which may be dependant on configuration
-// #defines and options.
-//
-// see more https://stackoverflow.com/questions/1822887/what-is-the-best-way-to-eliminate-ms-visual-c-linker-warning-warning-lnk422
-
-#if defined(_MSC_VER)
-#define BT_NOT_EMPTY_FILE_CAT_II(p, res) res
-#define BT_NOT_EMPTY_FILE_CAT_I(a, b) BT_NOT_EMPTY_FILE_CAT_II(~, a##b)
-#define BT_NOT_EMPTY_FILE_CAT(a, b) BT_NOT_EMPTY_FILE_CAT_I(a, b)
-#define BT_NOT_EMPTY_FILE \
- namespace \
- { \
- char BT_NOT_EMPTY_FILE_CAT(NoEmptyFileDummy, __COUNTER__); \
- }
-#else
-#define BT_NOT_EMPTY_FILE
-#endif
-
-// clang and most formatting tools don't support indentation of preprocessor guards, so turn it off
-// clang-format off
-#if defined(DEBUG) || defined (_DEBUG)
- #define BT_DEBUG
-#endif
-
-#ifdef _WIN32
- #if defined(__GNUC__) // it should handle both MINGW and CYGWIN
- #define SIMD_FORCE_INLINE __inline__ __attribute__((always_inline))
- #define ATTRIBUTE_ALIGNED16(a) a __attribute__((aligned(16)))
- #define ATTRIBUTE_ALIGNED64(a) a __attribute__((aligned(64)))
- #define ATTRIBUTE_ALIGNED128(a) a __attribute__((aligned(128)))
- #elif ( defined(_MSC_VER) && _MSC_VER < 1300 )
- #define SIMD_FORCE_INLINE inline
- #define ATTRIBUTE_ALIGNED16(a) a
- #define ATTRIBUTE_ALIGNED64(a) a
- #define ATTRIBUTE_ALIGNED128(a) a
- #elif defined(_M_ARM)
- #define SIMD_FORCE_INLINE __forceinline
- #define ATTRIBUTE_ALIGNED16(a) __declspec() a
- #define ATTRIBUTE_ALIGNED64(a) __declspec() a
- #define ATTRIBUTE_ALIGNED128(a) __declspec () a
- #else//__MINGW32__
- //#define BT_HAS_ALIGNED_ALLOCATOR
- #pragma warning(disable : 4324) // disable padding warning
-// #pragma warning(disable:4530) // Disable the exception disable but used in MSCV Stl warning.
- #pragma warning(disable:4996) //Turn off warnings about deprecated C routines
-// #pragma warning(disable:4786) // Disable the "debug name too long" warning
-
- #define SIMD_FORCE_INLINE __forceinline
- #define ATTRIBUTE_ALIGNED16(a) __declspec(align(16)) a
- #define ATTRIBUTE_ALIGNED64(a) __declspec(align(64)) a
- #define ATTRIBUTE_ALIGNED128(a) __declspec (align(128)) a
- #ifdef _XBOX
- #define BT_USE_VMX128
-
- #include <ppcintrinsics.h>
- #define BT_HAVE_NATIVE_FSEL
- #define btFsel(a,b,c) __fsel((a),(b),(c))
- #else
-
-#if defined (_M_ARM)
- //Do not turn SSE on for ARM (may want to turn on BT_USE_NEON however)
-#elif (defined (_WIN32) && (_MSC_VER) && _MSC_VER >= 1400) && (!defined (BT_USE_DOUBLE_PRECISION))
-
-#ifdef __clang__
-#define __BT_DISABLE_SSE__
-#endif
-#ifndef __BT_DISABLE_SSE__
- #if _MSC_VER>1400
- #define BT_USE_SIMD_VECTOR3
- #endif
- #define BT_USE_SSE
-#endif//__BT_DISABLE_SSE__
- #ifdef BT_USE_SSE
-
-#if (_MSC_FULL_VER >= 170050727)//Visual Studio 2012 can compile SSE4/FMA3 (but SSE4/FMA3 is not enabled by default)
- #define BT_ALLOW_SSE4
-#endif //(_MSC_FULL_VER >= 160040219)
-
- //BT_USE_SSE_IN_API is disabled under Windows by default, because
- //it makes it harder to integrate Bullet into your application under Windows
- //(structured embedding Bullet structs/classes need to be 16-byte aligned)
- //with relatively little performance gain
- //If you are not embedded Bullet data in your classes, or make sure that you align those classes on 16-byte boundaries
- //you can manually enable this line or set it in the build system for a bit of performance gain (a few percent, dependent on usage)
- //#define BT_USE_SSE_IN_API
- #endif //BT_USE_SSE
- #include <emmintrin.h>
-#endif
-
- #endif//_XBOX
-
- #endif //__MINGW32__
-
- #ifdef BT_DEBUG
- #ifdef _MSC_VER
- #include <stdio.h>
- #define btAssert(x) { if(!(x)){printf("Assert " __FILE__ ":%u (%s)\n", __LINE__, #x);__debugbreak(); }}
- #else//_MSC_VER
- #include <assert.h>
- #define btAssert assert
- #endif//_MSC_VER
- #else
- #define btAssert(x)
- #endif
- //btFullAssert is optional, slows down a lot
- #define btFullAssert(x)
-
- #define btLikely(_c) _c
- #define btUnlikely(_c) _c
-
-#else//_WIN32
-
- #if defined (__CELLOS_LV2__)
- #define SIMD_FORCE_INLINE inline __attribute__((always_inline))
- #define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16)))
- #define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64)))
- #define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128)))
- #ifndef assert
- #include <assert.h>
- #endif
- #ifdef BT_DEBUG
- #ifdef __SPU__
- #include <spu_printf.h>
- #define printf spu_printf
- #define btAssert(x) {if(!(x)){printf("Assert " __FILE__ ":%u ("#x")\n", __LINE__);spu_hcmpeq(0,0);}}
- #else
- #define btAssert assert
- #endif
-
- #else//BT_DEBUG
- #define btAssert(x)
- #endif//BT_DEBUG
- //btFullAssert is optional, slows down a lot
- #define btFullAssert(x)
-
- #define btLikely(_c) _c
- #define btUnlikely(_c) _c
-
- #else//defined (__CELLOS_LV2__)
-
- #ifdef USE_LIBSPE2
-
- #define SIMD_FORCE_INLINE __inline
- #define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16)))
- #define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64)))
- #define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128)))
- #ifndef assert
- #include <assert.h>
- #endif
- #ifdef BT_DEBUG
- #define btAssert assert
- #else
- #define btAssert(x)
- #endif
- //btFullAssert is optional, slows down a lot
- #define btFullAssert(x)
-
-
- #define btLikely(_c) __builtin_expect((_c), 1)
- #define btUnlikely(_c) __builtin_expect((_c), 0)
-
-
- #else//USE_LIBSPE2
- //non-windows systems
-
- #if (defined (__APPLE__) && (!defined (BT_USE_DOUBLE_PRECISION)))
- #if defined (__i386__) || defined (__x86_64__)
- #define BT_USE_SIMD_VECTOR3
- #define BT_USE_SSE
- //BT_USE_SSE_IN_API is enabled on Mac OSX by default, because memory is automatically aligned on 16-byte boundaries
- //if apps run into issues, we will disable the next line
- #define BT_USE_SSE_IN_API
- #ifdef BT_USE_SSE
- // include appropriate SSE level
- #if defined (__SSE4_1__)
- #include <smmintrin.h>
- #elif defined (__SSSE3__)
- #include <tmmintrin.h>
- #elif defined (__SSE3__)
- #include <pmmintrin.h>
- #else
- #include <emmintrin.h>
- #endif
- #endif //BT_USE_SSE
- #elif defined( __ARM_NEON__ )
- #ifdef __clang__
- #define BT_USE_NEON 1
- #define BT_USE_SIMD_VECTOR3
-
- #if defined BT_USE_NEON && defined (__clang__)
- #include <arm_neon.h>
- #endif//BT_USE_NEON
- #endif //__clang__
- #endif//__arm__
-
- #define SIMD_FORCE_INLINE inline __attribute__ ((always_inline))
- ///@todo: check out alignment methods for other platforms/compilers
- #define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16)))
- #define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64)))
- #define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128)))
- #ifndef assert
- #include <assert.h>
- #endif
-
- #if defined(DEBUG) || defined (_DEBUG)
- #if defined (__i386__) || defined (__x86_64__)
- #include <stdio.h>
- #define btAssert(x)\
- {\
- if(!(x))\
- {\
- printf("Assert %s in line %d, file %s\n",#x, __LINE__, __FILE__);\
- asm volatile ("int3");\
- }\
- }
- #else//defined (__i386__) || defined (__x86_64__)
- #define btAssert assert
- #endif//defined (__i386__) || defined (__x86_64__)
- #else//defined(DEBUG) || defined (_DEBUG)
- #define btAssert(x)
- #endif//defined(DEBUG) || defined (_DEBUG)
-
- //btFullAssert is optional, slows down a lot
- #define btFullAssert(x)
- #define btLikely(_c) _c
- #define btUnlikely(_c) _c
-
- #else//__APPLE__
-
- #define SIMD_FORCE_INLINE inline
- ///@todo: check out alignment methods for other platforms/compilers
- ///#define ATTRIBUTE_ALIGNED16(a) a __attribute__ ((aligned (16)))
- ///#define ATTRIBUTE_ALIGNED64(a) a __attribute__ ((aligned (64)))
- ///#define ATTRIBUTE_ALIGNED128(a) a __attribute__ ((aligned (128)))
- #define ATTRIBUTE_ALIGNED16(a) a
- #define ATTRIBUTE_ALIGNED64(a) a
- #define ATTRIBUTE_ALIGNED128(a) a
- #ifndef assert
- #include <assert.h>
- #endif
-
- #if defined(DEBUG) || defined (_DEBUG)
- #define btAssert assert
- #else
- #define btAssert(x)
- #endif
-
- //btFullAssert is optional, slows down a lot
- #define btFullAssert(x)
- #define btLikely(_c) _c
- #define btUnlikely(_c) _c
- #endif //__APPLE__
- #endif // LIBSPE2
- #endif //__CELLOS_LV2__
-#endif//_WIN32
-
-
-///The btScalar type abstracts floating point numbers, to easily switch between double and single floating point precision.
-#if defined(BT_USE_DOUBLE_PRECISION)
- typedef double btScalar;
- //this number could be bigger in double precision
- #define BT_LARGE_FLOAT 1e30
-#else
- typedef float btScalar;
- //keep BT_LARGE_FLOAT*BT_LARGE_FLOAT < FLT_MAX
- #define BT_LARGE_FLOAT 1e18f
-#endif
-
-#ifdef BT_USE_SSE
- typedef __m128 btSimdFloat4;
-#endif //BT_USE_SSE
-
-#if defined(BT_USE_SSE)
- //#if defined BT_USE_SSE_IN_API && defined (BT_USE_SSE)
- #ifdef _WIN32
-
- #ifndef BT_NAN
- static int btNanMask = 0x7F800001;
- #define BT_NAN (*(float *)&btNanMask)
- #endif
-
- #ifndef BT_INFINITY
- static int btInfinityMask = 0x7F800000;
- #define BT_INFINITY (*(float *)&btInfinityMask)
- inline int btGetInfinityMask() //suppress stupid compiler warning
- {
- return btInfinityMask;
- }
- #endif
-
-
-
- //use this, in case there are clashes (such as xnamath.h)
- #ifndef BT_NO_SIMD_OPERATOR_OVERLOADS
- inline __m128 operator+(const __m128 A, const __m128 B)
- {
- return _mm_add_ps(A, B);
- }
-
- inline __m128 operator-(const __m128 A, const __m128 B)
- {
- return _mm_sub_ps(A, B);
- }
-
- inline __m128 operator*(const __m128 A, const __m128 B)
- {
- return _mm_mul_ps(A, B);
- }
- #endif //BT_NO_SIMD_OPERATOR_OVERLOADS
-
- #define btCastfTo128i(a) (_mm_castps_si128(a))
- #define btCastfTo128d(a) (_mm_castps_pd(a))
- #define btCastiTo128f(a) (_mm_castsi128_ps(a))
- #define btCastdTo128f(a) (_mm_castpd_ps(a))
- #define btCastdTo128i(a) (_mm_castpd_si128(a))
- #define btAssign128(r0, r1, r2, r3) _mm_setr_ps(r0, r1, r2, r3)
-
- #else //_WIN32
-
- #define btCastfTo128i(a) ((__m128i)(a))
- #define btCastfTo128d(a) ((__m128d)(a))
- #define btCastiTo128f(a) ((__m128)(a))
- #define btCastdTo128f(a) ((__m128)(a))
- #define btCastdTo128i(a) ((__m128i)(a))
- #define btAssign128(r0, r1, r2, r3) \
- (__m128) { r0, r1, r2, r3 }
- #define BT_INFINITY INFINITY
- #define BT_NAN NAN
- #endif //_WIN32
-#else//BT_USE_SSE
-
- #ifdef BT_USE_NEON
- #include <arm_neon.h>
-
- typedef float32x4_t btSimdFloat4;
- #define BT_INFINITY INFINITY
- #define BT_NAN NAN
- #define btAssign128(r0, r1, r2, r3) \
- (float32x4_t) { r0, r1, r2, r3 }
- #else //BT_USE_NEON
-
- #ifndef BT_INFINITY
- struct btInfMaskConverter
- {
- union {
- float mask;
- int intmask;
- };
- btInfMaskConverter(int _mask = 0x7F800000)
- : intmask(_mask)
- {
- }
- };
- static btInfMaskConverter btInfinityMask = 0x7F800000;
- #define BT_INFINITY (btInfinityMask.mask)
- inline int btGetInfinityMask() //suppress stupid compiler warning
- {
- return btInfinityMask.intmask;
- }
- #endif
- #endif //BT_USE_NEON
-
-#endif //BT_USE_SSE
-
-#ifdef BT_USE_NEON
- #include <arm_neon.h>
-
- typedef float32x4_t btSimdFloat4;
- #define BT_INFINITY INFINITY
- #define BT_NAN NAN
- #define btAssign128(r0, r1, r2, r3) \
- (float32x4_t) { r0, r1, r2, r3 }
-#endif//BT_USE_NEON
-
-#define BT_DECLARE_ALIGNED_ALLOCATOR() \
- SIMD_FORCE_INLINE void *operator new(size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes, 16); } \
- SIMD_FORCE_INLINE void operator delete(void *ptr) { btAlignedFree(ptr); } \
- SIMD_FORCE_INLINE void *operator new(size_t, void *ptr) { return ptr; } \
- SIMD_FORCE_INLINE void operator delete(void *, void *) {} \
- SIMD_FORCE_INLINE void *operator new[](size_t sizeInBytes) { return btAlignedAlloc(sizeInBytes, 16); } \
- SIMD_FORCE_INLINE void operator delete[](void *ptr) { btAlignedFree(ptr); } \
- SIMD_FORCE_INLINE void *operator new[](size_t, void *ptr) { return ptr; } \
- SIMD_FORCE_INLINE void operator delete[](void *, void *) {}
-
-#if defined(BT_USE_DOUBLE_PRECISION) || defined(BT_FORCE_DOUBLE_FUNCTIONS)
-
- SIMD_FORCE_INLINE btScalar btSqrt(btScalar x)
- {
- return sqrt(x);
- }
- SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabs(x); }
- SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cos(x); }
- SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sin(x); }
- SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tan(x); }
- SIMD_FORCE_INLINE btScalar btAcos(btScalar x)
- {
- if (x < btScalar(-1)) x = btScalar(-1);
- if (x > btScalar(1)) x = btScalar(1);
- return acos(x);
- }
- SIMD_FORCE_INLINE btScalar btAsin(btScalar x)
- {
- if (x < btScalar(-1)) x = btScalar(-1);
- if (x > btScalar(1)) x = btScalar(1);
- return asin(x);
- }
- SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atan(x); }
- SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2(x, y); }
- SIMD_FORCE_INLINE btScalar btExp(btScalar x) { return exp(x); }
- SIMD_FORCE_INLINE btScalar btLog(btScalar x) { return log(x); }
- SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y) { return pow(x, y); }
- SIMD_FORCE_INLINE btScalar btFmod(btScalar x, btScalar y) { return fmod(x, y); }
-
-#else//BT_USE_DOUBLE_PRECISION
-
- SIMD_FORCE_INLINE btScalar btSqrt(btScalar y)
- {
- #ifdef USE_APPROXIMATION
- #ifdef __LP64__
- float xhalf = 0.5f * y;
- int i = *(int *)&y;
- i = 0x5f375a86 - (i >> 1);
- y = *(float *)&i;
- y = y * (1.5f - xhalf * y * y);
- y = y * (1.5f - xhalf * y * y);
- y = y * (1.5f - xhalf * y * y);
- y = 1 / y;
- return y;
- #else
- double x, z, tempf;
- unsigned long *tfptr = ((unsigned long *)&tempf) + 1;
- tempf = y;
- *tfptr = (0xbfcdd90a - *tfptr) >> 1; /* estimate of 1/sqrt(y) */
- x = tempf;
- z = y * btScalar(0.5);
- x = (btScalar(1.5) * x) - (x * x) * (x * z); /* iteration formula */
- x = (btScalar(1.5) * x) - (x * x) * (x * z);
- x = (btScalar(1.5) * x) - (x * x) * (x * z);
- x = (btScalar(1.5) * x) - (x * x) * (x * z);
- x = (btScalar(1.5) * x) - (x * x) * (x * z);
- return x * y;
- #endif
- #else
- return sqrtf(y);
- #endif
- }
- SIMD_FORCE_INLINE btScalar btFabs(btScalar x) { return fabsf(x); }
- SIMD_FORCE_INLINE btScalar btCos(btScalar x) { return cosf(x); }
- SIMD_FORCE_INLINE btScalar btSin(btScalar x) { return sinf(x); }
- SIMD_FORCE_INLINE btScalar btTan(btScalar x) { return tanf(x); }
- SIMD_FORCE_INLINE btScalar btAcos(btScalar x)
- {
- if (x < btScalar(-1))
- x = btScalar(-1);
- if (x > btScalar(1))
- x = btScalar(1);
- return acosf(x);
- }
- SIMD_FORCE_INLINE btScalar btAsin(btScalar x)
- {
- if (x < btScalar(-1))
- x = btScalar(-1);
- if (x > btScalar(1))
- x = btScalar(1);
- return asinf(x);
- }
- SIMD_FORCE_INLINE btScalar btAtan(btScalar x) { return atanf(x); }
- SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y) { return atan2f(x, y); }
- SIMD_FORCE_INLINE btScalar btExp(btScalar x) { return expf(x); }
- SIMD_FORCE_INLINE btScalar btLog(btScalar x) { return logf(x); }
- SIMD_FORCE_INLINE btScalar btPow(btScalar x, btScalar y) { return powf(x, y); }
- SIMD_FORCE_INLINE btScalar btFmod(btScalar x, btScalar y) { return fmodf(x, y); }
-
-#endif//BT_USE_DOUBLE_PRECISION
-
-#define SIMD_PI btScalar(3.1415926535897932384626433832795029)
-#define SIMD_2_PI (btScalar(2.0) * SIMD_PI)
-#define SIMD_HALF_PI (SIMD_PI * btScalar(0.5))
-#define SIMD_RADS_PER_DEG (SIMD_2_PI / btScalar(360.0))
-#define SIMD_DEGS_PER_RAD (btScalar(360.0) / SIMD_2_PI)
-#define SIMDSQRT12 btScalar(0.7071067811865475244008443621048490)
-#define btRecipSqrt(x) ((btScalar)(btScalar(1.0) / btSqrt(btScalar(x)))) /* reciprocal square root */
-#define btRecip(x) (btScalar(1.0) / btScalar(x))
-
-#ifdef BT_USE_DOUBLE_PRECISION
- #define SIMD_EPSILON DBL_EPSILON
- #define SIMD_INFINITY DBL_MAX
- #define BT_ONE 1.0
- #define BT_ZERO 0.0
- #define BT_TWO 2.0
- #define BT_HALF 0.5
-#else
- #define SIMD_EPSILON FLT_EPSILON
- #define SIMD_INFINITY FLT_MAX
- #define BT_ONE 1.0f
- #define BT_ZERO 0.0f
- #define BT_TWO 2.0f
- #define BT_HALF 0.5f
-#endif
-
-// clang-format on
-
-SIMD_FORCE_INLINE btScalar btAtan2Fast(btScalar y, btScalar x)
-{
- btScalar coeff_1 = SIMD_PI / 4.0f;
- btScalar coeff_2 = 3.0f * coeff_1;
- btScalar abs_y = btFabs(y);
- btScalar angle;
- if (x >= 0.0f)
- {
- btScalar r = (x - abs_y) / (x + abs_y);
- angle = coeff_1 - coeff_1 * r;
- }
- else
- {
- btScalar r = (x + abs_y) / (abs_y - x);
- angle = coeff_2 - coeff_1 * r;
- }
- return (y < 0.0f) ? -angle : angle;
-}
-
-SIMD_FORCE_INLINE bool btFuzzyZero(btScalar x) { return btFabs(x) < SIMD_EPSILON; }
-
-SIMD_FORCE_INLINE bool btEqual(btScalar a, btScalar eps)
-{
- return (((a) <= eps) && !((a) < -eps));
-}
-SIMD_FORCE_INLINE bool btGreaterEqual(btScalar a, btScalar eps)
-{
- return (!((a) <= eps));
-}
-
-SIMD_FORCE_INLINE int btIsNegative(btScalar x)
-{
- return x < btScalar(0.0) ? 1 : 0;
-}
-
-SIMD_FORCE_INLINE btScalar btRadians(btScalar x) { return x * SIMD_RADS_PER_DEG; }
-SIMD_FORCE_INLINE btScalar btDegrees(btScalar x) { return x * SIMD_DEGS_PER_RAD; }
-
-#define BT_DECLARE_HANDLE(name) \
- typedef struct name##__ \
- { \
- int unused; \
- } * name
-
-#ifndef btFsel
-SIMD_FORCE_INLINE btScalar btFsel(btScalar a, btScalar b, btScalar c)
-{
- return a >= 0 ? b : c;
-}
-#endif
-#define btFsels(a, b, c) (btScalar) btFsel(a, b, c)
-
-SIMD_FORCE_INLINE bool btMachineIsLittleEndian()
-{
- long int i = 1;
- const char *p = (const char *)&i;
- if (p[0] == 1) // Lowest address contains the least significant byte
- return true;
- else
- return false;
-}
-
-///btSelect avoids branches, which makes performance much better for consoles like Playstation 3 and XBox 360
-///Thanks Phil Knight. See also http://www.cellperformance.com/articles/2006/04/more_techniques_for_eliminatin_1.html
-SIMD_FORCE_INLINE unsigned btSelect(unsigned condition, unsigned valueIfConditionNonZero, unsigned valueIfConditionZero)
-{
- // Set testNz to 0xFFFFFFFF if condition is nonzero, 0x00000000 if condition is zero
- // Rely on positive value or'ed with its negative having sign bit on
- // and zero value or'ed with its negative (which is still zero) having sign bit off
- // Use arithmetic shift right, shifting the sign bit through all 32 bits
- unsigned testNz = (unsigned)(((int)condition | -(int)condition) >> 31);
- unsigned testEqz = ~testNz;
- return ((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz));
-}
-SIMD_FORCE_INLINE int btSelect(unsigned condition, int valueIfConditionNonZero, int valueIfConditionZero)
-{
- unsigned testNz = (unsigned)(((int)condition | -(int)condition) >> 31);
- unsigned testEqz = ~testNz;
- return static_cast<int>((valueIfConditionNonZero & testNz) | (valueIfConditionZero & testEqz));
-}
-SIMD_FORCE_INLINE float btSelect(unsigned condition, float valueIfConditionNonZero, float valueIfConditionZero)
-{
-#ifdef BT_HAVE_NATIVE_FSEL
- return (float)btFsel((btScalar)condition - btScalar(1.0f), valueIfConditionNonZero, valueIfConditionZero);
-#else
- return (condition != 0) ? valueIfConditionNonZero : valueIfConditionZero;
-#endif
-}
-
-template <typename T>
-SIMD_FORCE_INLINE void btSwap(T &a, T &b)
-{
- T tmp = a;
- a = b;
- b = tmp;
-}
-
-//PCK: endian swapping functions
-SIMD_FORCE_INLINE unsigned btSwapEndian(unsigned val)
-{
- return (((val & 0xff000000) >> 24) | ((val & 0x00ff0000) >> 8) | ((val & 0x0000ff00) << 8) | ((val & 0x000000ff) << 24));
-}
-
-SIMD_FORCE_INLINE unsigned short btSwapEndian(unsigned short val)
-{
- return static_cast<unsigned short>(((val & 0xff00) >> 8) | ((val & 0x00ff) << 8));
-}
-
-SIMD_FORCE_INLINE unsigned btSwapEndian(int val)
-{
- return btSwapEndian((unsigned)val);
-}
-
-SIMD_FORCE_INLINE unsigned short btSwapEndian(short val)
-{
- return btSwapEndian((unsigned short)val);
-}
-
-///btSwapFloat uses using char pointers to swap the endianness
-////btSwapFloat/btSwapDouble will NOT return a float, because the machine might 'correct' invalid floating point values
-///Not all values of sign/exponent/mantissa are valid floating point numbers according to IEEE 754.
-///When a floating point unit is faced with an invalid value, it may actually change the value, or worse, throw an exception.
-///In most systems, running user mode code, you wouldn't get an exception, but instead the hardware/os/runtime will 'fix' the number for you.
-///so instead of returning a float/double, we return integer/long long integer
-SIMD_FORCE_INLINE unsigned int btSwapEndianFloat(float d)
-{
- unsigned int a = 0;
- unsigned char *dst = (unsigned char *)&a;
- unsigned char *src = (unsigned char *)&d;
-
- dst[0] = src[3];
- dst[1] = src[2];
- dst[2] = src[1];
- dst[3] = src[0];
- return a;
-}
-
-// unswap using char pointers
-SIMD_FORCE_INLINE float btUnswapEndianFloat(unsigned int a)
-{
- float d = 0.0f;
- unsigned char *src = (unsigned char *)&a;
- unsigned char *dst = (unsigned char *)&d;
-
- dst[0] = src[3];
- dst[1] = src[2];
- dst[2] = src[1];
- dst[3] = src[0];
-
- return d;
-}
-
-// swap using char pointers
-SIMD_FORCE_INLINE void btSwapEndianDouble(double d, unsigned char *dst)
-{
- unsigned char *src = (unsigned char *)&d;
-
- dst[0] = src[7];
- dst[1] = src[6];
- dst[2] = src[5];
- dst[3] = src[4];
- dst[4] = src[3];
- dst[5] = src[2];
- dst[6] = src[1];
- dst[7] = src[0];
-}
-
-// unswap using char pointers
-SIMD_FORCE_INLINE double btUnswapEndianDouble(const unsigned char *src)
-{
- double d = 0.0;
- unsigned char *dst = (unsigned char *)&d;
-
- dst[0] = src[7];
- dst[1] = src[6];
- dst[2] = src[5];
- dst[3] = src[4];
- dst[4] = src[3];
- dst[5] = src[2];
- dst[6] = src[1];
- dst[7] = src[0];
-
- return d;
-}
-
-template <typename T>
-SIMD_FORCE_INLINE void btSetZero(T *a, int n)
-{
- T *acurr = a;
- size_t ncurr = n;
- while (ncurr > 0)
- {
- *(acurr++) = 0;
- --ncurr;
- }
-}
-
-SIMD_FORCE_INLINE btScalar btLargeDot(const btScalar *a, const btScalar *b, int n)
-{
- btScalar p0, q0, m0, p1, q1, m1, sum;
- sum = 0;
- n -= 2;
- while (n >= 0)
- {
- p0 = a[0];
- q0 = b[0];
- m0 = p0 * q0;
- p1 = a[1];
- q1 = b[1];
- m1 = p1 * q1;
- sum += m0;
- sum += m1;
- a += 2;
- b += 2;
- n -= 2;
- }
- n += 2;
- while (n > 0)
- {
- sum += (*a) * (*b);
- a++;
- b++;
- n--;
- }
- return sum;
-}
-
-// returns normalized value in range [-SIMD_PI, SIMD_PI]
-SIMD_FORCE_INLINE btScalar btNormalizeAngle(btScalar angleInRadians)
-{
- angleInRadians = btFmod(angleInRadians, SIMD_2_PI);
- if (angleInRadians < -SIMD_PI)
- {
- return angleInRadians + SIMD_2_PI;
- }
- else if (angleInRadians > SIMD_PI)
- {
- return angleInRadians - SIMD_2_PI;
- }
- else
- {
- return angleInRadians;
- }
-}
-
-///rudimentary class to provide type info
-struct btTypedObject
-{
- btTypedObject(int objectType)
- : m_objectType(objectType)
- {
- }
- int m_objectType;
- inline int getObjectType() const
- {
- return m_objectType;
- }
-};
-
-///align a pointer to the provided alignment, upwards
-template <typename T>
-T *btAlignPointer(T *unalignedPtr, size_t alignment)
-{
- struct btConvertPointerSizeT
- {
- union {
- T *ptr;
- size_t integer;
- };
- };
- btConvertPointerSizeT converter;
-
- const size_t bit_mask = ~(alignment - 1);
- converter.ptr = unalignedPtr;
- converter.integer += alignment - 1;
- converter.integer &= bit_mask;
- return converter.ptr;
-}
-
-#endif //BT_SCALAR_H
diff --git a/thirdparty/bullet/LinearMath/btSerializer.cpp b/thirdparty/bullet/LinearMath/btSerializer.cpp
deleted file mode 100644
index 068836f2c4..0000000000
--- a/thirdparty/bullet/LinearMath/btSerializer.cpp
+++ /dev/null
@@ -1,692 +0,0 @@
-char sBulletDNAstr[]= {
-char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(-74),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109),
-char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95),
-char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111),
-char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),
-char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115),
-char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51),
-char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109),
-char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),
-char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),
-char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),
-char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),
-char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109),
-char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97),
-char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),
-char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),
-char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98),
-char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77),
-char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),
-char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115),
-char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67),
-char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109),
-char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),
-char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111),
-char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),
-char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),
-char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0),
-char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117),
-char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110),
-char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97),
-char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
-char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97),
-char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109),
-char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112),
-char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115),
-char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109),
-char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100),
-char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),
-char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111),
-char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99),
-char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0),
-char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118),
-char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101),
-char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115),
-char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51),
-char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101),
-char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117),
-char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116),
-char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114),
-char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104),
-char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),
-char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66),
-char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108),
-char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),
-char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109),
-char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115),
-char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109),
-char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),
-char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),
-char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97),
-char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(117),char(112),char(73),char(110),char(100),
-char(101),char(120),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),
-char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),
-char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),
-char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),
-char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),
-char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),
-char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),
-char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),
-char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),
-char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),
-char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),
-char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),
-char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),
-char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(76),char(111),
-char(99),char(97),char(108),char(80),char(111),char(105),char(110),char(116),char(65),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(76),char(111),char(99),char(97),char(108),char(80),char(111),char(105),char(110),char(116),char(66),char(91),char(52),char(93),char(0),
-char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),
-char(87),char(111),char(114),char(108),char(100),char(79),char(110),char(65),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(79),char(110),char(66),
-char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(78),char(111),char(114),char(109),
-char(97),char(108),char(87),char(111),char(114),char(108),char(100),char(79),char(110),char(66),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),
-char(116),char(67),char(97),char(99),char(104),char(101),char(76),char(97),char(116),char(101),char(114),char(97),char(108),char(70),char(114),char(105),char(99),char(116),char(105),char(111),
-char(110),char(68),char(105),char(114),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),
-char(101),char(76),char(97),char(116),char(101),char(114),char(97),char(108),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(68),char(105),char(114),char(50),
-char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(68),char(105),char(115),char(116),
-char(97),char(110),char(99),char(101),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),
-char(65),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(91),char(52),char(93),char(0),char(109),char(95),
-char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(80),char(114),char(101),char(118),char(82),char(72),char(83),char(91),char(52),char(93),
-char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),
-char(100),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(82),char(111),char(108),char(108),char(105),char(110),char(103),
-char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(83),char(112),char(105),char(110),char(110),char(105),char(110),char(103),
-char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(82),char(101),char(115),char(116),char(105),char(116),char(117),char(116),
-char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(80),
-char(97),char(114),char(116),char(73),char(100),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),
-char(104),char(101),char(80),char(97),char(114),char(116),char(73),char(100),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(73),char(110),char(100),char(101),char(120),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),
-char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(73),char(110),char(100),char(101),char(120),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),
-char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(80),char(111),char(105),char(110),
-char(116),char(70),char(108),char(97),char(103),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),
-char(104),char(101),char(65),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(76),char(97),char(116),char(101),
-char(114),char(97),char(108),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),
-char(65),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(76),char(97),char(116),char(101),char(114),char(97),
-char(108),char(50),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),
-char(110),char(116),char(97),char(99),char(116),char(77),char(111),char(116),char(105),char(111),char(110),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),
-char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(77),char(111),char(116),char(105),char(111),
-char(110),char(50),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),
-char(110),char(116),char(97),char(99),char(116),char(67),char(70),char(77),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),
-char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(69),char(82),char(80),char(91),char(52),char(93),char(0),char(109),
-char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(67),
-char(111),char(110),char(116),char(97),char(99),char(116),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(49),char(91),char(52),char(93),char(0),char(109),char(95),
-char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(67),char(70),
-char(77),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(76),char(105),char(102),
-char(101),char(84),char(105),char(109),char(101),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(97),char(99),char(104),char(101),char(100),
-char(80),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),
-char(65),char(0),char(109),char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(66),char(0),char(109),char(95),char(105),
-char(110),char(100),char(101),char(120),char(49),char(97),char(0),char(109),char(95),char(111),char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),
-char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(66),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(84),char(104),char(114),
-char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80),char(114),char(111),char(99),
-char(101),char(115),char(115),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(42),char(109),char(95),char(98),
-char(111),char(100),char(121),char(48),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(49),char(0),char(109),char(95),char(103),char(105),char(109),char(112),
-char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),
-char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),
-char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98),char(108),char(101),
-char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),
-char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0),char(42),char(109),
-char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0),char(42),char(109),
-char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109),char(95),char(114),
-char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(109),char(95),
-char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),
-char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),
-char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),
-char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105),char(110),char(116),
-char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),
-char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),
-char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),
-char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95),char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),
-char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),
-char(110),char(116),char(97),char(99),char(116),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),
-char(99),char(116),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(116),
-char(117),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),char(0),
-char(109),char(95),char(99),char(99),char(100),char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),char(105),
-char(117),char(115),char(0),char(109),char(95),char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),
-char(111),char(108),char(100),char(0),char(109),char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),
-char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
-char(70),char(108),char(97),char(103),char(115),char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),char(109),
-char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),char(118),
-char(97),char(116),char(105),char(111),char(110),char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(110),
-char(97),char(108),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),char(100),
-char(101),char(87),char(105),char(116),char(104),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(70),char(105),char(108),
-char(116),char(101),char(114),char(71),char(114),char(111),char(117),char(112),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
-char(70),char(105),char(108),char(116),char(101),char(114),char(77),char(97),char(115),char(107),char(0),char(109),char(95),char(117),char(110),char(105),char(113),char(117),char(101),char(73),
-char(100),char(0),char(109),char(95),char(116),char(97),char(117),char(0),char(109),char(95),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),
-char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),char(114),char(114),char(111),char(114),char(82),
-char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),char(109),char(95),char(101),char(114),char(112),
-char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),char(108),char(67),char(102),char(109),char(0),
-char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),char(101),char(110),char(101),char(116),char(114),
-char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(115),char(112),char(108),
-char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),char(112),char(0),char(109),char(95),char(108),
-char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),char(109),char(115),char(116),char(97),char(114),
-char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97),char(114),char(116),char(105),char(99),char(117),char(108),
-char(97),char(116),char(101),char(100),char(87),char(97),char(114),char(109),char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),
-char(111),char(114),char(0),char(109),char(95),char(109),char(97),char(120),char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),
-char(114),char(99),char(101),char(0),char(109),char(95),char(115),char(105),char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),
-char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),
-char(0),char(109),char(95),char(110),char(117),char(109),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),
-char(111),char(108),char(118),char(101),char(114),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),
-char(111),char(110),char(116),char(97),char(99),char(116),char(82),char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),
-char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),
-char(101),char(114),char(66),char(97),char(116),char(99),char(104),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),
-char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),
-char(109),char(95),char(103),char(114),char(97),char(118),char(105),char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
-char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),
-char(114),char(116),char(105),char(97),char(84),char(101),char(110),char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),
-char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),
-char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),
-char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),
-char(114),char(0),char(109),char(95),char(103),char(114),char(97),char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),
-char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),
-char(97),char(108),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),
-char(116),char(97),char(108),char(84),char(111),char(114),char(113),char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),
-char(97),char(115),char(115),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),
-char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),
-char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),
-char(111),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),
-char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),
-char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),
-char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),
-char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),
-char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),
-char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
-char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),
-char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),
-char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),
-char(116),char(82),char(111),char(119),char(115),char(0),char(110),char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),
-char(114),char(98),char(66),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
-char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),
-char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101),char(101),char(100),char(98),char(97),char(99),char(107),char(0),
-char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(100),
-char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(100),char(105),char(115),char(97),char(98),char(108),char(101),
-char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116),char(119),char(101),char(101),char(110),char(76),char(105),char(110),
-char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111),char(118),char(101),char(114),char(114),char(105),char(100),char(101),
-char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),
-char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(104),char(114),
-char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(0),char(112),
-char(97),char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(121),char(112),char(101),char(67),char(111),char(110),char(115),
-char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),
-char(65),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(98),char(65),char(70),char(114),
-char(97),char(109),char(101),char(0),char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(117),char(115),char(101),
-char(82),char(101),char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(97),char(110),
-char(103),char(117),char(108),char(97),char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),char(97),char(98),char(108),char(101),char(65),char(110),
-char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(111),char(116),char(111),char(114),char(84),char(97),
-char(114),char(103),char(101),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(109),char(97),char(120),char(77),char(111),
-char(116),char(111),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),char(111),char(119),char(101),char(114),char(76),char(105),
-char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),
-char(105),char(109),char(105),char(116),char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(98),char(105),char(97),char(115),char(70),
-char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),char(116),char(105),char(111),char(110),char(70),char(97),
-char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(49),char(91),char(52),char(93),char(0),char(109),
-char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),
-char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),char(97),char(110),char(0),char(109),char(95),char(108),
-char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),
-char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),
-char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),
-char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(115),char(101),
-char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101),char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),
-char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79),char(102),char(102),char(115),char(101),char(116),char(70),char(111),char(114),char(67),char(111),char(110),char(115),
-char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(54),char(100),char(111),char(102),char(68),char(97),
-char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(91),char(54),
-char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),
-char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),
-char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),
-char(91),char(54),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(66),char(111),char(117),char(110),char(99),char(101),char(0),char(109),
-char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(111),char(112),char(69),char(82),char(80),char(0),char(109),char(95),char(108),char(105),char(110),
-char(101),char(97),char(114),char(83),char(116),char(111),char(112),char(67),char(70),char(77),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(77),
-char(111),char(116),char(111),char(114),char(69),char(82),char(80),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(77),char(111),char(116),char(111),
-char(114),char(67),char(70),char(77),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(84),char(97),char(114),char(103),char(101),char(116),char(86),
-char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(77),char(97),char(120),char(77),
-char(111),char(116),char(111),char(114),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(101),
-char(114),char(118),char(111),char(84),char(97),char(114),char(103),char(101),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),
-char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(108),char(105),char(110),char(101),
-char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(105),
-char(110),char(101),char(97),char(114),char(69),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),
-char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),char(77),char(111),char(116),char(111),char(114),
-char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(101),char(114),char(118),char(111),char(77),char(111),char(116),
-char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),
-char(83),char(112),char(114),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),
-char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(76),char(105),char(109),char(105),char(116),char(101),char(100),
-char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),
-char(109),char(112),char(105),char(110),char(103),char(76),char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),
-char(103),char(117),char(108),char(97),char(114),char(66),char(111),char(117),char(110),char(99),char(101),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
-char(114),char(83),char(116),char(111),char(112),char(69),char(82),char(80),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),
-char(111),char(112),char(67),char(70),char(77),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),
-char(69),char(82),char(80),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(67),char(70),
-char(77),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(84),char(97),char(114),char(103),char(101),char(116),char(86),char(101),char(108),
-char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(97),char(120),char(77),char(111),
-char(116),char(111),char(114),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(101),
-char(114),char(118),char(111),char(84),char(97),char(114),char(103),char(101),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),
-char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(103),
-char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),
-char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(69),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),
-char(105),char(110),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),char(77),
-char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(101),char(114),
-char(118),char(111),char(77),char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),
-char(69),char(110),char(97),char(98),char(108),char(101),char(83),char(112),char(114),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),
-char(103),char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),
-char(76),char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),
-char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(76),char(105),char(109),char(105),char(116),char(101),char(100),
-char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(111),char(116),char(97),char(116),char(101),char(79),char(114),char(100),char(101),char(114),char(0),char(109),char(95),
-char(97),char(120),char(105),char(115),char(73),char(110),char(65),char(0),char(109),char(95),char(97),char(120),char(105),char(115),char(73),char(110),char(66),char(0),char(109),char(95),
-char(114),char(97),char(116),char(105),char(111),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),
-char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),
-char(115),char(115),char(0),char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),
-char(0),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),
-char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(114),char(101),char(118),char(105),char(111),char(117),char(115),char(80),char(111),char(115),char(105),char(116),char(105),
-char(111),char(110),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(99),char(99),char(117),
-char(109),char(117),char(108),char(97),char(116),char(101),char(100),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(110),char(111),char(114),char(109),char(97),
-char(108),char(0),char(109),char(95),char(97),char(114),char(101),char(97),char(0),char(109),char(95),char(97),char(116),char(116),char(97),char(99),char(104),char(0),char(109),char(95),
-char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(114),char(101),char(115),
-char(116),char(76),char(101),char(110),char(103),char(116),char(104),char(0),char(109),char(95),char(98),char(98),char(101),char(110),char(100),char(105),char(110),char(103),char(0),char(109),
-char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(114),char(101),
-char(115),char(116),char(65),char(114),char(101),char(97),char(0),char(109),char(95),char(99),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(111),char(100),
-char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(86),char(111),
-char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(99),char(49),char(0),char(109),char(95),char(99),char(50),char(0),char(109),char(95),char(99),char(48),char(0),
-char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(70),char(114),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(114),char(105),char(103),char(105),
-char(100),char(66),char(111),char(100),char(121),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),
-char(97),char(101),char(114),char(111),char(77),char(111),char(100),char(101),char(108),char(0),char(109),char(95),char(98),char(97),char(117),char(109),char(103),char(97),char(114),char(116),
-char(101),char(0),char(109),char(95),char(100),char(114),char(97),char(103),char(0),char(109),char(95),char(108),char(105),char(102),char(116),char(0),char(109),char(95),char(112),char(114),
-char(101),char(115),char(115),char(117),char(114),char(101),char(0),char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(100),char(121),
-char(110),char(97),char(109),char(105),char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(111),char(115),char(101),
-char(77),char(97),char(116),char(99),char(104),char(0),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),
-char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(107),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(111),
-char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),
-char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),
-char(99),char(104),char(111),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),
-char(105),char(103),char(105),char(100),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),
-char(109),char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),
-char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),
-char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),
-char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),
-char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),
-char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),
-char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),
-char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(109),char(97),char(120),char(86),char(111),char(108),char(117),char(109),char(101),
-char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),
-char(105),char(116),char(121),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(112),char(111),char(115),char(105),
-char(116),char(105),char(111),char(110),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(100),char(114),char(105),
-char(102),char(116),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),
-char(101),char(114),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(114),char(111),char(116),char(0),char(109),
-char(95),char(115),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(97),char(113),char(113),char(0),char(109),char(95),char(99),char(111),char(109),char(0),char(42),
-char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(42),char(109),char(95),char(119),char(101),char(105),char(103),char(104),
-char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),
-char(110),char(117),char(109),char(87),char(101),char(105),char(103),char(116),char(115),char(0),char(109),char(95),char(98),char(118),char(111),char(108),char(117),char(109),char(101),char(0),
-char(109),char(95),char(98),char(102),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(120),char(102),char(111),char(114),
-char(109),char(0),char(109),char(95),char(108),char(111),char(99),char(105),char(105),char(0),char(109),char(95),char(105),char(110),char(118),char(119),char(105),char(0),char(109),char(95),
-char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(100),char(105),char(109),char(112),char(117),
-char(108),char(115),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(108),char(118),char(0),char(109),char(95),char(97),char(118),char(0),char(42),char(109),
-char(95),char(102),char(114),char(97),char(109),char(101),char(114),char(101),char(102),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),
-char(100),char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(117),
-char(109),char(70),char(114),char(97),char(109),char(101),char(82),char(101),char(102),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(78),char(111),char(100),char(101),
-char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(105),char(100),char(109),char(97),
-char(115),char(115),char(0),char(109),char(95),char(105),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(110),char(118),char(105),char(109),char(112),char(117),char(108),
-char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),
-char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),
-char(95),char(97),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(116),char(99),char(104),char(105),char(110),char(103),
-char(0),char(109),char(95),char(109),char(97),char(120),char(83),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),
-char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(115),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),
-char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(99),char(111),
-char(110),char(116),char(97),char(105),char(110),char(115),char(65),char(110),char(99),char(104),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),
-char(100),char(101),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(110),char(100),char(101),char(120),char(0),char(42),char(109),
-char(95),char(98),char(111),char(100),char(121),char(65),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(0),char(109),char(95),char(114),char(101),
-char(102),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(99),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(0),
-char(109),char(95),char(100),char(101),char(108),char(101),char(116),char(101),char(0),char(109),char(95),char(114),char(101),char(108),char(80),char(111),char(115),char(105),char(116),char(105),
-char(111),char(110),char(91),char(50),char(93),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(116),char(121),char(112),char(101),char(0),char(109),char(95),
-char(98),char(111),char(100),char(121),char(66),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),char(121),char(112),
-char(101),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(101),char(0),char(42),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),
-char(97),char(108),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),
-char(115),char(0),char(42),char(109),char(95),char(102),char(97),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(116),char(101),char(116),char(114),char(97),char(104),
-char(101),char(100),char(114),char(97),char(0),char(42),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(42),char(109),char(95),char(99),
-char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),
-char(110),char(117),char(109),char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(76),char(105),
-char(110),char(107),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(97),char(99),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),
-char(84),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(109),char(95),char(110),char(117),char(109),char(65),char(110),char(99),char(104),
-char(111),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(109),char(95),
-char(110),char(117),char(109),char(74),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(102),char(105),char(103),char(0),char(109),
-char(95),char(122),char(101),char(114),char(111),char(82),char(111),char(116),char(80),char(97),char(114),char(101),char(110),char(116),char(84),char(111),char(84),char(104),char(105),char(115),
-char(0),char(109),char(95),char(112),char(97),char(114),char(101),char(110),char(116),char(67),char(111),char(109),char(84),char(111),char(84),char(104),char(105),char(115),char(80),char(105),
-char(118),char(111),char(116),char(79),char(102),char(102),char(115),char(101),char(116),char(0),char(109),char(95),char(116),char(104),char(105),char(115),char(80),char(105),char(118),char(111),
-char(116),char(84),char(111),char(84),char(104),char(105),char(115),char(67),char(111),char(109),char(79),char(102),char(102),char(115),char(101),char(116),char(0),char(109),char(95),char(106),
-char(111),char(105),char(110),char(116),char(65),char(120),char(105),char(115),char(84),char(111),char(112),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),
-char(110),char(116),char(65),char(120),char(105),char(115),char(66),char(111),char(116),char(116),char(111),char(109),char(91),char(54),char(93),char(0),char(109),char(95),char(108),char(105),
-char(110),char(107),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(0),char(109),char(95),char(97),char(98),char(115),char(70),char(114),char(97),char(109),char(101),
-char(84),char(111),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(84),char(111),char(112),char(0),char(109),char(95),char(97),char(98),char(115),
-char(70),char(114),char(97),char(109),char(101),char(84),char(111),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(66),char(111),char(116),char(116),
-char(111),char(109),char(0),char(109),char(95),char(97),char(98),char(115),char(70),char(114),char(97),char(109),char(101),char(76),char(111),char(99),char(86),char(101),char(108),char(111),
-char(99),char(105),char(116),char(121),char(84),char(111),char(112),char(0),char(109),char(95),char(97),char(98),char(115),char(70),char(114),char(97),char(109),char(101),char(76),char(111),
-char(99),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(66),char(111),char(116),char(116),char(111),char(109),char(0),char(109),char(95),char(108),char(105),
-char(110),char(107),char(77),char(97),char(115),char(115),char(0),char(109),char(95),char(112),char(97),char(114),char(101),char(110),char(116),char(73),char(110),char(100),char(101),char(120),
-char(0),char(109),char(95),char(100),char(111),char(102),char(67),char(111),char(117),char(110),char(116),char(0),char(109),char(95),char(112),char(111),char(115),char(86),char(97),char(114),
-char(67),char(111),char(117),char(110),char(116),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(80),char(111),char(115),char(91),char(55),char(93),char(0),
-char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(86),char(101),char(108),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),char(110),
-char(116),char(84),char(111),char(114),char(113),char(117),char(101),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(68),char(97),
-char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(70),char(114),char(105),char(99),char(116),char(105),char(111),
-char(110),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),
-char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),
-char(106),char(111),char(105),char(110),char(116),char(77),char(97),char(120),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),
-char(116),char(77),char(97),char(120),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),
-char(78),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(78),char(97),char(109),char(101),char(0),char(42),char(109),
-char(95),char(108),char(105),char(110),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(114),char(0),char(42),char(109),char(95),char(112),char(97),char(100),
-char(100),char(105),char(110),char(103),char(80),char(116),char(114),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(87),char(111),char(114),char(108),char(100),char(80),
-char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(87),char(111),char(114),char(108),char(100),char(79),
-char(114),char(105),char(101),char(110),char(116),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(76),char(105),char(110),
-char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(65),char(110),
-char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(98),char(97),char(115),char(101),
-char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(42),
-char(109),char(95),char(98),char(97),char(115),char(101),char(78),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(98),char(97),char(115),char(101),char(67),char(111),
-char(108),char(108),char(105),char(100),char(101),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(79),char(98),char(106),char(68),char(97),char(116),char(97),char(0),
-char(42),char(109),char(95),char(109),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(0),char(109),char(95),char(108),char(105),char(110),char(107),char(0),
-char(84),char(89),char(80),char(69),char(99),char(0),char(0),char(0),char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),
-char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104),char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),
-char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102),char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),
-char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105),char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),
-char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83),char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),
-char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99),char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116),char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(116),char(101),char(114),char(110),char(105),char(111),char(110),char(70),char(108),char(111),char(97),char(116),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(116),char(101),char(114),char(110),char(105),char(111),char(110),char(68),char(111),char(117),char(98),
-char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),char(105),char(120),char(51),char(120),char(51),char(70),char(108),
-char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),char(105),char(120),char(51),char(120),char(51),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),
-char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(97),char(110),char(115),char(102),char(111),
-char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(66),char(118),char(104),char(83),char(117),
-char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),
-char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),
-char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),
-char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),
-char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
-char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80),char(108),char(97),char(110),char(101),char(83),char(104),char(97),
-char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),
-char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(115),char(105),char(116),
-char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),
-char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(73),char(110),
-char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(104),char(111),char(114),char(116),char(73),char(110),
-char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(104),char(111),char(114),char(116),char(73),char(110),
-char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),
-char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),char(101),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),
-char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),
-char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(99),char(97),char(108),char(101),char(100),char(84),char(114),
-char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(67),char(104),char(105),char(108),char(100),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),char(112),char(101),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100),char(101),char(114),char(83),char(104),char(97),char(112),char(101),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),
-char(116),char(80),char(101),char(114),char(115),char(105),char(115),char(116),char(101),char(110),char(116),char(77),char(97),char(110),char(105),char(102),char(111),char(108),char(100),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
-char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(80),char(101),char(114),char(115),char(105),char(115),char(116),char(101),char(110),char(116),char(77),char(97),char(110),char(105),char(102),char(111),char(108),char(100),char(70),char(108),
-char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),
-char(98),char(106),char(101),char(99),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(73),char(109),
-char(112),char(97),char(99),char(116),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(67),char(111),char(110),char(118),char(101),char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),
-char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),
-char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),char(100),
-char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),
-char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),
-char(100),char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),
-char(114),char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49),char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),
-char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(121),
-char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),
-char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),
-char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
-char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),
-char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),
-char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
-char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),
-char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),
-char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),
-char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
-char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),
-char(102),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),
-char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),
-char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),
-char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),
-char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),
-char(112),char(114),char(105),char(110),char(103),char(50),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),
-char(50),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
-char(97),char(50),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),
-char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),
-char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(97),
-char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(71),char(101),char(97),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),
-char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(77),char(97),char(116),char(101),
-char(114),char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(78),char(111),char(100),
-char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(68),char(97),
-char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),
-char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116),char(97),char(0),char(83),char(111),
-char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116),char(97),char(0),char(83),char(111),
-char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),
-char(116),char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),
-char(100),char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(111),char(102),char(116),
-char(66),char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(111),char(102),char(116),
-char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),
-char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(70),char(108),char(111),char(97),char(116),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),
-char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(70),char(108),
-char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),
-char(105),char(110),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(114),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(67),char(111),char(108),char(108),
-char(105),char(100),char(101),char(114),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(0),char(84),char(76),char(69),char(78),
-char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(0),char(0),
-char(12),char(0),char(36),char(0),char(8),char(0),char(16),char(0),char(32),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0),
-char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),char(16),char(0),char(84),char(0),char(-124),char(0),char(12),char(0),char(52),char(0),char(52),char(0),
-char(20),char(0),char(64),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(4),char(0),char(32),char(0),char(28),char(0),char(60),char(0),char(56),char(0),
-char(76),char(0),char(76),char(0),char(24),char(0),char(60),char(0),char(60),char(0),char(60),char(0),char(16),char(0),char(16),char(6),char(-24),char(1),char(72),char(3),
-char(16),char(1),char(64),char(0),char(68),char(0),char(-96),char(0),char(88),char(0),char(-64),char(0),char(104),char(0),char(-8),char(1),char(-72),char(3),char(8),char(0),
-char(52),char(0),char(52),char(0),char(0),char(0),char(68),char(0),char(84),char(0),char(-124),char(0),char(116),char(0),char(92),char(1),char(-36),char(0),char(-116),char(1),
-char(124),char(1),char(-44),char(0),char(-4),char(0),char(-52),char(1),char(92),char(1),char(116),char(2),char(-124),char(2),char(-76),char(4),char(-52),char(0),char(108),char(1),
-char(92),char(0),char(-116),char(0),char(16),char(0),char(100),char(0),char(20),char(0),char(36),char(0),char(100),char(0),char(92),char(0),char(104),char(0),char(-64),char(0),
-char(92),char(1),char(104),char(0),char(-68),char(1),char(112),char(3),char(-56),char(1),char(-68),char(0),char(100),char(0),char(28),char(1),char(-12),char(1),char(0),char(0),
-char(83),char(84),char(82),char(67),char(88),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),char(4),char(0),char(1),char(0),
-char(9),char(0),char(2),char(0),char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),char(10),char(0),char(5),char(0),
-char(12),char(0),char(2),char(0),char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),char(7),char(0),char(8),char(0),
-char(14),char(0),char(1),char(0),char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(7),char(0),char(8),char(0),char(16),char(0),char(1),char(0),
-char(8),char(0),char(8),char(0),char(17),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(18),char(0),char(1),char(0),char(14),char(0),char(9),char(0),
-char(19),char(0),char(2),char(0),char(17),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(20),char(0),char(2),char(0),char(18),char(0),char(10),char(0),
-char(14),char(0),char(11),char(0),char(21),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),char(2),char(0),char(14),char(0),
-char(2),char(0),char(15),char(0),char(22),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),char(4),char(0),char(18),char(0),
-char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(23),char(0),char(6),char(0),char(14),char(0),char(16),char(0),
-char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),
-char(24),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),char(25),char(0),char(12),char(0),
-char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),
-char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(22),char(0),char(30),char(0),char(24),char(0),char(31),char(0),char(21),char(0),char(32),char(0),
-char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(26),char(0),char(12),char(0),char(14),char(0),char(23),char(0),char(14),char(0),char(24),char(0),
-char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),
-char(23),char(0),char(30),char(0),char(24),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(21),char(0),char(32),char(0),
-char(27),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),char(28),char(0),char(5),char(0),
-char(27),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),char(0),char(0),char(21),char(0),
-char(29),char(0),char(5),char(0),char(27),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),char(7),char(0),char(43),char(0),
-char(4),char(0),char(44),char(0),char(30),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),char(31),char(0),char(4),char(0),
-char(29),char(0),char(47),char(0),char(30),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),char(32),char(0),char(1),char(0),
-char(4),char(0),char(50),char(0),char(33),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),char(34),char(0),char(2),char(0),
-char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(35),char(0),char(2),char(0),char(0),char(0),char(52),char(0),char(0),char(0),char(53),char(0),
-char(36),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(32),char(0),char(56),char(0),char(34),char(0),char(57),char(0),
-char(35),char(0),char(58),char(0),char(33),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),char(37),char(0),char(4),char(0),
-char(36),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),char(38),char(0),char(7),char(0),
-char(27),char(0),char(38),char(0),char(37),char(0),char(65),char(0),char(25),char(0),char(66),char(0),char(26),char(0),char(67),char(0),char(39),char(0),char(68),char(0),
-char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(40),char(0),char(2),char(0),char(38),char(0),char(70),char(0),char(13),char(0),char(39),char(0),
-char(41),char(0),char(4),char(0),char(19),char(0),char(71),char(0),char(27),char(0),char(72),char(0),char(4),char(0),char(73),char(0),char(7),char(0),char(74),char(0),
-char(42),char(0),char(4),char(0),char(27),char(0),char(38),char(0),char(41),char(0),char(75),char(0),char(4),char(0),char(76),char(0),char(7),char(0),char(43),char(0),
-char(43),char(0),char(3),char(0),char(29),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(44),char(0),char(3),char(0),
-char(29),char(0),char(47),char(0),char(4),char(0),char(78),char(0),char(0),char(0),char(37),char(0),char(45),char(0),char(3),char(0),char(29),char(0),char(47),char(0),
-char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(46),char(0),char(4),char(0),char(4),char(0),char(79),char(0),char(7),char(0),char(80),char(0),
-char(7),char(0),char(81),char(0),char(7),char(0),char(82),char(0),char(39),char(0),char(14),char(0),char(4),char(0),char(83),char(0),char(4),char(0),char(84),char(0),
-char(46),char(0),char(85),char(0),char(4),char(0),char(86),char(0),char(7),char(0),char(87),char(0),char(7),char(0),char(88),char(0),char(7),char(0),char(89),char(0),
-char(7),char(0),char(90),char(0),char(7),char(0),char(91),char(0),char(4),char(0),char(92),char(0),char(4),char(0),char(93),char(0),char(4),char(0),char(94),char(0),
-char(4),char(0),char(95),char(0),char(0),char(0),char(37),char(0),char(47),char(0),char(39),char(0),char(14),char(0),char(96),char(0),char(14),char(0),char(97),char(0),
-char(14),char(0),char(98),char(0),char(14),char(0),char(99),char(0),char(14),char(0),char(100),char(0),char(14),char(0),char(101),char(0),char(14),char(0),char(102),char(0),
-char(8),char(0),char(103),char(0),char(8),char(0),char(104),char(0),char(8),char(0),char(105),char(0),char(8),char(0),char(106),char(0),char(8),char(0),char(107),char(0),
-char(8),char(0),char(108),char(0),char(8),char(0),char(109),char(0),char(4),char(0),char(110),char(0),char(4),char(0),char(111),char(0),char(4),char(0),char(112),char(0),
-char(4),char(0),char(113),char(0),char(4),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(8),char(0),char(116),char(0),char(8),char(0),char(117),char(0),
-char(8),char(0),char(118),char(0),char(8),char(0),char(119),char(0),char(8),char(0),char(120),char(0),char(8),char(0),char(121),char(0),char(8),char(0),char(122),char(0),
-char(8),char(0),char(123),char(0),char(4),char(0),char(124),char(0),char(4),char(0),char(125),char(0),char(4),char(0),char(126),char(0),char(4),char(0),char(127),char(0),
-char(4),char(0),char(-128),char(0),char(4),char(0),char(-127),char(0),char(8),char(0),char(-126),char(0),char(8),char(0),char(-125),char(0),char(4),char(0),char(44),char(0),
-char(48),char(0),char(-124),char(0),char(48),char(0),char(-123),char(0),char(49),char(0),char(39),char(0),char(13),char(0),char(96),char(0),char(13),char(0),char(97),char(0),
-char(13),char(0),char(98),char(0),char(13),char(0),char(99),char(0),char(13),char(0),char(100),char(0),char(13),char(0),char(101),char(0),char(13),char(0),char(102),char(0),
-char(7),char(0),char(103),char(0),char(7),char(0),char(104),char(0),char(7),char(0),char(105),char(0),char(7),char(0),char(106),char(0),char(7),char(0),char(107),char(0),
-char(7),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(4),char(0),char(110),char(0),char(4),char(0),char(111),char(0),char(4),char(0),char(112),char(0),
-char(4),char(0),char(113),char(0),char(4),char(0),char(114),char(0),char(7),char(0),char(115),char(0),char(7),char(0),char(116),char(0),char(7),char(0),char(117),char(0),
-char(7),char(0),char(118),char(0),char(7),char(0),char(119),char(0),char(7),char(0),char(120),char(0),char(7),char(0),char(121),char(0),char(7),char(0),char(122),char(0),
-char(7),char(0),char(123),char(0),char(4),char(0),char(124),char(0),char(4),char(0),char(125),char(0),char(4),char(0),char(126),char(0),char(4),char(0),char(127),char(0),
-char(4),char(0),char(-128),char(0),char(4),char(0),char(-127),char(0),char(7),char(0),char(-126),char(0),char(7),char(0),char(-125),char(0),char(4),char(0),char(44),char(0),
-char(50),char(0),char(-124),char(0),char(50),char(0),char(-123),char(0),char(51),char(0),char(5),char(0),char(27),char(0),char(38),char(0),char(37),char(0),char(65),char(0),
-char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(-122),char(0),char(52),char(0),char(5),char(0),char(29),char(0),char(47),char(0),
-char(13),char(0),char(-121),char(0),char(14),char(0),char(-120),char(0),char(4),char(0),char(-119),char(0),char(0),char(0),char(-118),char(0),char(48),char(0),char(29),char(0),
-char(9),char(0),char(-117),char(0),char(9),char(0),char(-116),char(0),char(27),char(0),char(-115),char(0),char(0),char(0),char(35),char(0),char(20),char(0),char(-114),char(0),
-char(20),char(0),char(-113),char(0),char(14),char(0),char(-112),char(0),char(14),char(0),char(-111),char(0),char(14),char(0),char(-110),char(0),char(8),char(0),char(-125),char(0),
-char(8),char(0),char(-109),char(0),char(8),char(0),char(-108),char(0),char(8),char(0),char(-107),char(0),char(8),char(0),char(-106),char(0),char(8),char(0),char(-105),char(0),
-char(8),char(0),char(-104),char(0),char(8),char(0),char(-103),char(0),char(8),char(0),char(-102),char(0),char(8),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),
-char(4),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0),char(4),char(0),char(-97),char(0),char(4),char(0),char(-96),char(0),char(4),char(0),char(-95),char(0),
-char(4),char(0),char(-94),char(0),char(4),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(50),char(0),char(29),char(0),
-char(9),char(0),char(-117),char(0),char(9),char(0),char(-116),char(0),char(27),char(0),char(-115),char(0),char(0),char(0),char(35),char(0),char(19),char(0),char(-114),char(0),
-char(19),char(0),char(-113),char(0),char(13),char(0),char(-112),char(0),char(13),char(0),char(-111),char(0),char(13),char(0),char(-110),char(0),char(7),char(0),char(-125),char(0),
-char(7),char(0),char(-109),char(0),char(7),char(0),char(-108),char(0),char(7),char(0),char(-107),char(0),char(7),char(0),char(-106),char(0),char(7),char(0),char(-105),char(0),
-char(7),char(0),char(-104),char(0),char(7),char(0),char(-103),char(0),char(7),char(0),char(-102),char(0),char(7),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),
-char(4),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0),char(4),char(0),char(-97),char(0),char(4),char(0),char(-96),char(0),char(4),char(0),char(-95),char(0),
-char(4),char(0),char(-94),char(0),char(4),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(53),char(0),char(23),char(0),
-char(8),char(0),char(-90),char(0),char(8),char(0),char(-89),char(0),char(8),char(0),char(-108),char(0),char(8),char(0),char(-88),char(0),char(8),char(0),char(-104),char(0),
-char(8),char(0),char(-87),char(0),char(8),char(0),char(-86),char(0),char(8),char(0),char(-85),char(0),char(8),char(0),char(-84),char(0),char(8),char(0),char(-83),char(0),
-char(8),char(0),char(-82),char(0),char(8),char(0),char(-81),char(0),char(8),char(0),char(-80),char(0),char(8),char(0),char(-79),char(0),char(8),char(0),char(-78),char(0),
-char(8),char(0),char(-77),char(0),char(8),char(0),char(-76),char(0),char(4),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),
-char(4),char(0),char(-72),char(0),char(4),char(0),char(-71),char(0),char(0),char(0),char(37),char(0),char(54),char(0),char(22),char(0),char(7),char(0),char(-90),char(0),
-char(7),char(0),char(-89),char(0),char(7),char(0),char(-108),char(0),char(7),char(0),char(-88),char(0),char(7),char(0),char(-104),char(0),char(7),char(0),char(-87),char(0),
-char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0),char(7),char(0),char(-83),char(0),char(7),char(0),char(-82),char(0),
-char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),char(7),char(0),char(-79),char(0),char(7),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0),
-char(7),char(0),char(-76),char(0),char(4),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(4),char(0),char(-72),char(0),
-char(4),char(0),char(-71),char(0),char(55),char(0),char(2),char(0),char(53),char(0),char(-70),char(0),char(14),char(0),char(-69),char(0),char(56),char(0),char(2),char(0),
-char(54),char(0),char(-70),char(0),char(13),char(0),char(-69),char(0),char(57),char(0),char(21),char(0),char(50),char(0),char(-68),char(0),char(17),char(0),char(-67),char(0),
-char(13),char(0),char(-66),char(0),char(13),char(0),char(-65),char(0),char(13),char(0),char(-64),char(0),char(13),char(0),char(-63),char(0),char(13),char(0),char(-69),char(0),
-char(13),char(0),char(-62),char(0),char(13),char(0),char(-61),char(0),char(13),char(0),char(-60),char(0),char(13),char(0),char(-59),char(0),char(7),char(0),char(-58),char(0),
-char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-55),char(0),char(7),char(0),char(-54),char(0),char(7),char(0),char(-53),char(0),
-char(7),char(0),char(-52),char(0),char(7),char(0),char(-51),char(0),char(7),char(0),char(-50),char(0),char(4),char(0),char(-49),char(0),char(58),char(0),char(22),char(0),
-char(48),char(0),char(-68),char(0),char(18),char(0),char(-67),char(0),char(14),char(0),char(-66),char(0),char(14),char(0),char(-65),char(0),char(14),char(0),char(-64),char(0),
-char(14),char(0),char(-63),char(0),char(14),char(0),char(-69),char(0),char(14),char(0),char(-62),char(0),char(14),char(0),char(-61),char(0),char(14),char(0),char(-60),char(0),
-char(14),char(0),char(-59),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),char(8),char(0),char(-56),char(0),char(8),char(0),char(-55),char(0),
-char(8),char(0),char(-54),char(0),char(8),char(0),char(-53),char(0),char(8),char(0),char(-52),char(0),char(8),char(0),char(-51),char(0),char(8),char(0),char(-50),char(0),
-char(4),char(0),char(-49),char(0),char(0),char(0),char(37),char(0),char(59),char(0),char(2),char(0),char(4),char(0),char(-48),char(0),char(4),char(0),char(-47),char(0),
-char(60),char(0),char(13),char(0),char(57),char(0),char(-46),char(0),char(57),char(0),char(-45),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-127),char(0),
-char(4),char(0),char(-44),char(0),char(4),char(0),char(-43),char(0),char(4),char(0),char(-42),char(0),char(7),char(0),char(-41),char(0),char(7),char(0),char(-40),char(0),
-char(4),char(0),char(-39),char(0),char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0),char(4),char(0),char(-36),char(0),char(61),char(0),char(13),char(0),
-char(62),char(0),char(-46),char(0),char(62),char(0),char(-45),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-127),char(0),char(4),char(0),char(-44),char(0),
-char(4),char(0),char(-43),char(0),char(4),char(0),char(-42),char(0),char(7),char(0),char(-41),char(0),char(7),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0),
-char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0),char(4),char(0),char(-36),char(0),char(63),char(0),char(14),char(0),char(58),char(0),char(-46),char(0),
-char(58),char(0),char(-45),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-127),char(0),char(4),char(0),char(-44),char(0),char(4),char(0),char(-43),char(0),
-char(4),char(0),char(-42),char(0),char(8),char(0),char(-41),char(0),char(8),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0),char(4),char(0),char(-38),char(0),
-char(8),char(0),char(-37),char(0),char(4),char(0),char(-36),char(0),char(0),char(0),char(-35),char(0),char(64),char(0),char(3),char(0),char(61),char(0),char(-34),char(0),
-char(13),char(0),char(-33),char(0),char(13),char(0),char(-32),char(0),char(65),char(0),char(3),char(0),char(63),char(0),char(-34),char(0),char(14),char(0),char(-33),char(0),
-char(14),char(0),char(-32),char(0),char(66),char(0),char(3),char(0),char(61),char(0),char(-34),char(0),char(14),char(0),char(-33),char(0),char(14),char(0),char(-32),char(0),
-char(67),char(0),char(13),char(0),char(61),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(4),char(0),char(-29),char(0),
-char(4),char(0),char(-28),char(0),char(4),char(0),char(-27),char(0),char(7),char(0),char(-26),char(0),char(7),char(0),char(-25),char(0),char(7),char(0),char(-24),char(0),
-char(7),char(0),char(-23),char(0),char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(68),char(0),char(13),char(0),
-char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),char(4),char(0),char(-29),char(0),char(4),char(0),char(-28),char(0),
-char(4),char(0),char(-27),char(0),char(7),char(0),char(-26),char(0),char(7),char(0),char(-25),char(0),char(7),char(0),char(-24),char(0),char(7),char(0),char(-23),char(0),
-char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(69),char(0),char(14),char(0),char(63),char(0),char(-34),char(0),
-char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(4),char(0),char(-29),char(0),char(4),char(0),char(-28),char(0),char(4),char(0),char(-27),char(0),
-char(8),char(0),char(-26),char(0),char(8),char(0),char(-25),char(0),char(8),char(0),char(-24),char(0),char(8),char(0),char(-23),char(0),char(8),char(0),char(-22),char(0),
-char(8),char(0),char(-21),char(0),char(8),char(0),char(-20),char(0),char(0),char(0),char(-19),char(0),char(70),char(0),char(10),char(0),char(63),char(0),char(-34),char(0),
-char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(8),char(0),char(-18),char(0),char(8),char(0),char(-17),char(0),char(8),char(0),char(-16),char(0),
-char(8),char(0),char(-22),char(0),char(8),char(0),char(-21),char(0),char(8),char(0),char(-20),char(0),char(8),char(0),char(-89),char(0),char(71),char(0),char(11),char(0),
-char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),char(7),char(0),char(-18),char(0),char(7),char(0),char(-17),char(0),
-char(7),char(0),char(-16),char(0),char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(7),char(0),char(-89),char(0),
-char(0),char(0),char(21),char(0),char(72),char(0),char(9),char(0),char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),
-char(13),char(0),char(-15),char(0),char(13),char(0),char(-14),char(0),char(13),char(0),char(-13),char(0),char(13),char(0),char(-12),char(0),char(4),char(0),char(-11),char(0),
-char(4),char(0),char(-10),char(0),char(73),char(0),char(9),char(0),char(63),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),
-char(14),char(0),char(-15),char(0),char(14),char(0),char(-14),char(0),char(14),char(0),char(-13),char(0),char(14),char(0),char(-12),char(0),char(4),char(0),char(-11),char(0),
-char(4),char(0),char(-10),char(0),char(74),char(0),char(5),char(0),char(72),char(0),char(-9),char(0),char(4),char(0),char(-8),char(0),char(7),char(0),char(-7),char(0),
-char(7),char(0),char(-6),char(0),char(7),char(0),char(-5),char(0),char(75),char(0),char(5),char(0),char(73),char(0),char(-9),char(0),char(4),char(0),char(-8),char(0),
-char(8),char(0),char(-7),char(0),char(8),char(0),char(-6),char(0),char(8),char(0),char(-5),char(0),char(76),char(0),char(41),char(0),char(61),char(0),char(-34),char(0),
-char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),char(13),char(0),char(-15),char(0),char(13),char(0),char(-14),char(0),char(13),char(0),char(-4),char(0),
-char(13),char(0),char(-3),char(0),char(13),char(0),char(-2),char(0),char(13),char(0),char(-1),char(0),char(13),char(0),char(0),char(1),char(13),char(0),char(1),char(1),
-char(13),char(0),char(2),char(1),char(13),char(0),char(3),char(1),char(13),char(0),char(4),char(1),char(13),char(0),char(5),char(1),char(13),char(0),char(6),char(1),
-char(0),char(0),char(7),char(1),char(0),char(0),char(8),char(1),char(0),char(0),char(9),char(1),char(0),char(0),char(10),char(1),char(0),char(0),char(11),char(1),
-char(0),char(0),char(-19),char(0),char(13),char(0),char(-13),char(0),char(13),char(0),char(-12),char(0),char(13),char(0),char(12),char(1),char(13),char(0),char(13),char(1),
-char(13),char(0),char(14),char(1),char(13),char(0),char(15),char(1),char(13),char(0),char(16),char(1),char(13),char(0),char(17),char(1),char(13),char(0),char(18),char(1),
-char(13),char(0),char(19),char(1),char(13),char(0),char(20),char(1),char(13),char(0),char(21),char(1),char(13),char(0),char(22),char(1),char(0),char(0),char(23),char(1),
-char(0),char(0),char(24),char(1),char(0),char(0),char(25),char(1),char(0),char(0),char(26),char(1),char(0),char(0),char(27),char(1),char(4),char(0),char(28),char(1),
-char(77),char(0),char(41),char(0),char(63),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(14),char(0),char(-15),char(0),
-char(14),char(0),char(-14),char(0),char(14),char(0),char(-4),char(0),char(14),char(0),char(-3),char(0),char(14),char(0),char(-2),char(0),char(14),char(0),char(-1),char(0),
-char(14),char(0),char(0),char(1),char(14),char(0),char(1),char(1),char(14),char(0),char(2),char(1),char(14),char(0),char(3),char(1),char(14),char(0),char(4),char(1),
-char(14),char(0),char(5),char(1),char(14),char(0),char(6),char(1),char(0),char(0),char(7),char(1),char(0),char(0),char(8),char(1),char(0),char(0),char(9),char(1),
-char(0),char(0),char(10),char(1),char(0),char(0),char(11),char(1),char(0),char(0),char(-19),char(0),char(14),char(0),char(-13),char(0),char(14),char(0),char(-12),char(0),
-char(14),char(0),char(12),char(1),char(14),char(0),char(13),char(1),char(14),char(0),char(14),char(1),char(14),char(0),char(15),char(1),char(14),char(0),char(16),char(1),
-char(14),char(0),char(17),char(1),char(14),char(0),char(18),char(1),char(14),char(0),char(19),char(1),char(14),char(0),char(20),char(1),char(14),char(0),char(21),char(1),
-char(14),char(0),char(22),char(1),char(0),char(0),char(23),char(1),char(0),char(0),char(24),char(1),char(0),char(0),char(25),char(1),char(0),char(0),char(26),char(1),
-char(0),char(0),char(27),char(1),char(4),char(0),char(28),char(1),char(78),char(0),char(9),char(0),char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),
-char(19),char(0),char(-30),char(0),char(7),char(0),char(-15),char(0),char(7),char(0),char(-14),char(0),char(7),char(0),char(-13),char(0),char(7),char(0),char(-12),char(0),
-char(4),char(0),char(-11),char(0),char(4),char(0),char(-10),char(0),char(79),char(0),char(9),char(0),char(63),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),
-char(20),char(0),char(-30),char(0),char(8),char(0),char(-15),char(0),char(8),char(0),char(-14),char(0),char(8),char(0),char(-13),char(0),char(8),char(0),char(-12),char(0),
-char(4),char(0),char(-11),char(0),char(4),char(0),char(-10),char(0),char(80),char(0),char(5),char(0),char(60),char(0),char(-34),char(0),char(13),char(0),char(29),char(1),
-char(13),char(0),char(30),char(1),char(7),char(0),char(31),char(1),char(0),char(0),char(37),char(0),char(81),char(0),char(4),char(0),char(63),char(0),char(-34),char(0),
-char(14),char(0),char(29),char(1),char(14),char(0),char(30),char(1),char(8),char(0),char(31),char(1),char(82),char(0),char(4),char(0),char(7),char(0),char(32),char(1),
-char(7),char(0),char(33),char(1),char(7),char(0),char(34),char(1),char(4),char(0),char(79),char(0),char(83),char(0),char(10),char(0),char(82),char(0),char(35),char(1),
-char(13),char(0),char(36),char(1),char(13),char(0),char(37),char(1),char(13),char(0),char(38),char(1),char(13),char(0),char(39),char(1),char(13),char(0),char(40),char(1),
-char(7),char(0),char(-58),char(0),char(7),char(0),char(41),char(1),char(4),char(0),char(42),char(1),char(4),char(0),char(53),char(0),char(84),char(0),char(4),char(0),
-char(82),char(0),char(35),char(1),char(4),char(0),char(43),char(1),char(7),char(0),char(44),char(1),char(4),char(0),char(45),char(1),char(85),char(0),char(4),char(0),
-char(13),char(0),char(40),char(1),char(82),char(0),char(35),char(1),char(4),char(0),char(46),char(1),char(7),char(0),char(47),char(1),char(86),char(0),char(7),char(0),
-char(13),char(0),char(48),char(1),char(82),char(0),char(35),char(1),char(4),char(0),char(49),char(1),char(7),char(0),char(50),char(1),char(7),char(0),char(51),char(1),
-char(7),char(0),char(52),char(1),char(4),char(0),char(53),char(0),char(87),char(0),char(6),char(0),char(17),char(0),char(53),char(1),char(13),char(0),char(51),char(1),
-char(13),char(0),char(54),char(1),char(62),char(0),char(55),char(1),char(4),char(0),char(56),char(1),char(7),char(0),char(52),char(1),char(88),char(0),char(26),char(0),
-char(4),char(0),char(57),char(1),char(7),char(0),char(58),char(1),char(7),char(0),char(-89),char(0),char(7),char(0),char(59),char(1),char(7),char(0),char(60),char(1),
-char(7),char(0),char(61),char(1),char(7),char(0),char(62),char(1),char(7),char(0),char(63),char(1),char(7),char(0),char(64),char(1),char(7),char(0),char(65),char(1),
-char(7),char(0),char(66),char(1),char(7),char(0),char(67),char(1),char(7),char(0),char(68),char(1),char(7),char(0),char(69),char(1),char(7),char(0),char(70),char(1),
-char(7),char(0),char(71),char(1),char(7),char(0),char(72),char(1),char(7),char(0),char(73),char(1),char(7),char(0),char(74),char(1),char(7),char(0),char(75),char(1),
-char(7),char(0),char(76),char(1),char(4),char(0),char(77),char(1),char(4),char(0),char(78),char(1),char(4),char(0),char(79),char(1),char(4),char(0),char(80),char(1),
-char(4),char(0),char(-99),char(0),char(89),char(0),char(12),char(0),char(17),char(0),char(81),char(1),char(17),char(0),char(82),char(1),char(17),char(0),char(83),char(1),
-char(13),char(0),char(84),char(1),char(13),char(0),char(85),char(1),char(7),char(0),char(86),char(1),char(4),char(0),char(87),char(1),char(4),char(0),char(88),char(1),
-char(4),char(0),char(89),char(1),char(4),char(0),char(90),char(1),char(7),char(0),char(50),char(1),char(4),char(0),char(53),char(0),char(90),char(0),char(27),char(0),
-char(19),char(0),char(91),char(1),char(17),char(0),char(92),char(1),char(17),char(0),char(93),char(1),char(13),char(0),char(84),char(1),char(13),char(0),char(94),char(1),
-char(13),char(0),char(95),char(1),char(13),char(0),char(96),char(1),char(13),char(0),char(97),char(1),char(13),char(0),char(98),char(1),char(4),char(0),char(99),char(1),
-char(7),char(0),char(100),char(1),char(4),char(0),char(101),char(1),char(4),char(0),char(102),char(1),char(4),char(0),char(103),char(1),char(7),char(0),char(104),char(1),
-char(7),char(0),char(105),char(1),char(4),char(0),char(106),char(1),char(4),char(0),char(107),char(1),char(7),char(0),char(108),char(1),char(7),char(0),char(109),char(1),
-char(7),char(0),char(110),char(1),char(7),char(0),char(111),char(1),char(7),char(0),char(112),char(1),char(7),char(0),char(113),char(1),char(4),char(0),char(114),char(1),
-char(4),char(0),char(115),char(1),char(4),char(0),char(116),char(1),char(91),char(0),char(12),char(0),char(9),char(0),char(117),char(1),char(9),char(0),char(118),char(1),
-char(13),char(0),char(119),char(1),char(7),char(0),char(120),char(1),char(7),char(0),char(-85),char(0),char(7),char(0),char(121),char(1),char(4),char(0),char(122),char(1),
-char(13),char(0),char(123),char(1),char(4),char(0),char(124),char(1),char(4),char(0),char(125),char(1),char(4),char(0),char(126),char(1),char(4),char(0),char(53),char(0),
-char(92),char(0),char(19),char(0),char(50),char(0),char(-68),char(0),char(89),char(0),char(127),char(1),char(82),char(0),char(-128),char(1),char(83),char(0),char(-127),char(1),
-char(84),char(0),char(-126),char(1),char(85),char(0),char(-125),char(1),char(86),char(0),char(-124),char(1),char(87),char(0),char(-123),char(1),char(90),char(0),char(-122),char(1),
-char(91),char(0),char(-121),char(1),char(4),char(0),char(-120),char(1),char(4),char(0),char(102),char(1),char(4),char(0),char(-119),char(1),char(4),char(0),char(-118),char(1),
-char(4),char(0),char(-117),char(1),char(4),char(0),char(-116),char(1),char(4),char(0),char(-115),char(1),char(4),char(0),char(-114),char(1),char(88),char(0),char(-113),char(1),
-char(93),char(0),char(28),char(0),char(16),char(0),char(-112),char(1),char(14),char(0),char(-111),char(1),char(14),char(0),char(-110),char(1),char(14),char(0),char(-109),char(1),
-char(14),char(0),char(-108),char(1),char(14),char(0),char(-107),char(1),char(14),char(0),char(-106),char(1),char(14),char(0),char(-105),char(1),char(14),char(0),char(-104),char(1),
-char(14),char(0),char(-103),char(1),char(8),char(0),char(-102),char(1),char(4),char(0),char(-101),char(1),char(4),char(0),char(126),char(1),char(4),char(0),char(-100),char(1),
-char(4),char(0),char(-99),char(1),char(8),char(0),char(-98),char(1),char(8),char(0),char(-97),char(1),char(8),char(0),char(-96),char(1),char(8),char(0),char(-95),char(1),
-char(8),char(0),char(-94),char(1),char(8),char(0),char(-93),char(1),char(8),char(0),char(-92),char(1),char(8),char(0),char(-91),char(1),char(8),char(0),char(-90),char(1),
-char(0),char(0),char(-89),char(1),char(0),char(0),char(-88),char(1),char(48),char(0),char(-87),char(1),char(0),char(0),char(-86),char(1),char(94),char(0),char(28),char(0),
-char(15),char(0),char(-112),char(1),char(13),char(0),char(-111),char(1),char(13),char(0),char(-110),char(1),char(13),char(0),char(-109),char(1),char(13),char(0),char(-108),char(1),
-char(13),char(0),char(-107),char(1),char(13),char(0),char(-106),char(1),char(13),char(0),char(-105),char(1),char(13),char(0),char(-104),char(1),char(13),char(0),char(-103),char(1),
-char(4),char(0),char(-100),char(1),char(7),char(0),char(-102),char(1),char(4),char(0),char(-101),char(1),char(4),char(0),char(126),char(1),char(7),char(0),char(-98),char(1),
-char(7),char(0),char(-97),char(1),char(7),char(0),char(-96),char(1),char(4),char(0),char(-99),char(1),char(7),char(0),char(-95),char(1),char(7),char(0),char(-94),char(1),
-char(7),char(0),char(-93),char(1),char(7),char(0),char(-92),char(1),char(7),char(0),char(-91),char(1),char(7),char(0),char(-90),char(1),char(0),char(0),char(-89),char(1),
-char(0),char(0),char(-88),char(1),char(50),char(0),char(-87),char(1),char(0),char(0),char(-86),char(1),char(95),char(0),char(11),char(0),char(14),char(0),char(-85),char(1),
-char(16),char(0),char(-84),char(1),char(14),char(0),char(-83),char(1),char(14),char(0),char(-82),char(1),char(14),char(0),char(-81),char(1),char(8),char(0),char(-80),char(1),
-char(4),char(0),char(-119),char(1),char(0),char(0),char(37),char(0),char(0),char(0),char(-79),char(1),char(93),char(0),char(-126),char(1),char(48),char(0),char(-78),char(1),
-char(96),char(0),char(10),char(0),char(13),char(0),char(-85),char(1),char(15),char(0),char(-84),char(1),char(13),char(0),char(-83),char(1),char(13),char(0),char(-82),char(1),
-char(13),char(0),char(-81),char(1),char(7),char(0),char(-80),char(1),char(4),char(0),char(-119),char(1),char(0),char(0),char(-79),char(1),char(94),char(0),char(-126),char(1),
-char(50),char(0),char(-78),char(1),char(97),char(0),char(4),char(0),char(50),char(0),char(-77),char(1),char(96),char(0),char(-76),char(1),char(4),char(0),char(-75),char(1),
-char(0),char(0),char(37),char(0),char(98),char(0),char(4),char(0),char(48),char(0),char(-77),char(1),char(95),char(0),char(-76),char(1),char(4),char(0),char(-75),char(1),
-char(0),char(0),char(37),char(0),};
-int sBulletDNAlen= sizeof(sBulletDNAstr);
diff --git a/thirdparty/bullet/LinearMath/btSerializer.h b/thirdparty/bullet/LinearMath/btSerializer.h
deleted file mode 100644
index f18442f23d..0000000000
--- a/thirdparty/bullet/LinearMath/btSerializer.h
+++ /dev/null
@@ -1,866 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2009 Erwin Coumans http://bulletphysics.org
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_SERIALIZER_H
-#define BT_SERIALIZER_H
-
-#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE
-#include "btHashMap.h"
-
-#if !defined(__CELLOS_LV2__) && !defined(__MWERKS__)
-#include <memory.h>
-#endif
-#include <string.h>
-
-extern char sBulletDNAstr[];
-extern int sBulletDNAlen;
-extern char sBulletDNAstr64[];
-extern int sBulletDNAlen64;
-
-SIMD_FORCE_INLINE int btStrLen(const char* str)
-{
- if (!str)
- return (0);
- int len = 0;
-
- while (*str != 0)
- {
- str++;
- len++;
- }
-
- return len;
-}
-
-class btChunk
-{
-public:
- int m_chunkCode;
- int m_length;
- void* m_oldPtr;
- int m_dna_nr;
- int m_number;
-};
-
-enum btSerializationFlags
-{
- BT_SERIALIZE_NO_BVH = 1,
- BT_SERIALIZE_NO_TRIANGLEINFOMAP = 2,
- BT_SERIALIZE_NO_DUPLICATE_ASSERT = 4,
- BT_SERIALIZE_CONTACT_MANIFOLDS = 8,
-};
-
-class btSerializer
-{
-public:
- virtual ~btSerializer() {}
-
- virtual const unsigned char* getBufferPointer() const = 0;
-
- virtual int getCurrentBufferSize() const = 0;
-
- virtual btChunk* allocate(size_t size, int numElements) = 0;
-
- virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode, void* oldPtr) = 0;
-
- virtual void* findPointer(void* oldPtr) = 0;
-
- virtual void* getUniquePointer(void* oldPtr) = 0;
-
- virtual void startSerialization() = 0;
-
- virtual void finishSerialization() = 0;
-
- virtual const char* findNameForPointer(const void* ptr) const = 0;
-
- virtual void registerNameForPointer(const void* ptr, const char* name) = 0;
-
- virtual void serializeName(const char* ptr) = 0;
-
- virtual int getSerializationFlags() const = 0;
-
- virtual void setSerializationFlags(int flags) = 0;
-
- virtual int getNumChunks() const = 0;
-
- virtual const btChunk* getChunk(int chunkIndex) const = 0;
-};
-
-#define BT_HEADER_LENGTH 12
-#if defined(__sgi) || defined(__sparc) || defined(__sparc__) || defined(__PPC__) || defined(__ppc__) || defined(__BIG_ENDIAN__)
-#define BT_MAKE_ID(a, b, c, d) ((int)(a) << 24 | (int)(b) << 16 | (c) << 8 | (d))
-#else
-#define BT_MAKE_ID(a, b, c, d) ((int)(d) << 24 | (int)(c) << 16 | (b) << 8 | (a))
-#endif
-
-#define BT_MULTIBODY_CODE BT_MAKE_ID('M', 'B', 'D', 'Y')
-#define BT_MB_LINKCOLLIDER_CODE BT_MAKE_ID('M', 'B', 'L', 'C')
-#define BT_SOFTBODY_CODE BT_MAKE_ID('S', 'B', 'D', 'Y')
-#define BT_COLLISIONOBJECT_CODE BT_MAKE_ID('C', 'O', 'B', 'J')
-#define BT_RIGIDBODY_CODE BT_MAKE_ID('R', 'B', 'D', 'Y')
-#define BT_CONSTRAINT_CODE BT_MAKE_ID('C', 'O', 'N', 'S')
-#define BT_BOXSHAPE_CODE BT_MAKE_ID('B', 'O', 'X', 'S')
-#define BT_QUANTIZED_BVH_CODE BT_MAKE_ID('Q', 'B', 'V', 'H')
-#define BT_TRIANLGE_INFO_MAP BT_MAKE_ID('T', 'M', 'A', 'P')
-#define BT_SHAPE_CODE BT_MAKE_ID('S', 'H', 'A', 'P')
-#define BT_ARRAY_CODE BT_MAKE_ID('A', 'R', 'A', 'Y')
-#define BT_SBMATERIAL_CODE BT_MAKE_ID('S', 'B', 'M', 'T')
-#define BT_SBNODE_CODE BT_MAKE_ID('S', 'B', 'N', 'D')
-#define BT_DYNAMICSWORLD_CODE BT_MAKE_ID('D', 'W', 'L', 'D')
-#define BT_CONTACTMANIFOLD_CODE BT_MAKE_ID('C', 'O', 'N', 'T')
-#define BT_DNA_CODE BT_MAKE_ID('D', 'N', 'A', '1')
-
-struct btPointerUid
-{
- union {
- void* m_ptr;
- int m_uniqueIds[2];
- };
-};
-
-struct btBulletSerializedArrays
-{
- btBulletSerializedArrays()
- {
- }
- btAlignedObjectArray<struct btQuantizedBvhDoubleData*> m_bvhsDouble;
- btAlignedObjectArray<struct btQuantizedBvhFloatData*> m_bvhsFloat;
- btAlignedObjectArray<struct btCollisionShapeData*> m_colShapeData;
- btAlignedObjectArray<struct btDynamicsWorldDoubleData*> m_dynamicWorldInfoDataDouble;
- btAlignedObjectArray<struct btDynamicsWorldFloatData*> m_dynamicWorldInfoDataFloat;
- btAlignedObjectArray<struct btRigidBodyDoubleData*> m_rigidBodyDataDouble;
- btAlignedObjectArray<struct btRigidBodyFloatData*> m_rigidBodyDataFloat;
- btAlignedObjectArray<struct btCollisionObjectDoubleData*> m_collisionObjectDataDouble;
- btAlignedObjectArray<struct btCollisionObjectFloatData*> m_collisionObjectDataFloat;
- btAlignedObjectArray<struct btTypedConstraintFloatData*> m_constraintDataFloat;
- btAlignedObjectArray<struct btTypedConstraintDoubleData*> m_constraintDataDouble;
- btAlignedObjectArray<struct btTypedConstraintData*> m_constraintData; //for backwards compatibility
- btAlignedObjectArray<struct btSoftBodyFloatData*> m_softBodyFloatData;
- btAlignedObjectArray<struct btSoftBodyDoubleData*> m_softBodyDoubleData;
-};
-
-///The btDefaultSerializer is the main Bullet serialization class.
-///The constructor takes an optional argument for backwards compatibility, it is recommended to leave this empty/zero.
-class btDefaultSerializer : public btSerializer
-{
-protected:
- btAlignedObjectArray<char*> mTypes;
- btAlignedObjectArray<short*> mStructs;
- btAlignedObjectArray<short> mTlens;
- btHashMap<btHashInt, int> mStructReverse;
- btHashMap<btHashString, int> mTypeLookup;
-
- btHashMap<btHashPtr, void*> m_chunkP;
-
- btHashMap<btHashPtr, const char*> m_nameMap;
-
- btHashMap<btHashPtr, btPointerUid> m_uniquePointers;
- int m_uniqueIdGenerator;
-
- int m_totalSize;
- unsigned char* m_buffer;
- bool m_ownsBuffer;
- int m_currentSize;
- void* m_dna;
- int m_dnaLength;
-
- int m_serializationFlags;
-
- btAlignedObjectArray<btChunk*> m_chunkPtrs;
-
-protected:
- virtual void* findPointer(void* oldPtr)
- {
- void** ptr = m_chunkP.find(oldPtr);
- if (ptr && *ptr)
- return *ptr;
- return 0;
- }
-
- virtual void writeDNA()
- {
- btChunk* dnaChunk = allocate(m_dnaLength, 1);
- memcpy(dnaChunk->m_oldPtr, m_dna, m_dnaLength);
- finalizeChunk(dnaChunk, "DNA1", BT_DNA_CODE, m_dna);
- }
-
- int getReverseType(const char* type) const
- {
- btHashString key(type);
- const int* valuePtr = mTypeLookup.find(key);
- if (valuePtr)
- return *valuePtr;
-
- return -1;
- }
-
- void initDNA(const char* bdnaOrg, int dnalen)
- {
- ///was already initialized
- if (m_dna)
- return;
-
- int littleEndian = 1;
- littleEndian = ((char*)&littleEndian)[0];
-
- m_dna = btAlignedAlloc(dnalen, 16);
- memcpy(m_dna, bdnaOrg, dnalen);
- m_dnaLength = dnalen;
-
- int* intPtr = 0;
- short* shtPtr = 0;
- char* cp = 0;
- int dataLen = 0;
- intPtr = (int*)m_dna;
-
- /*
- SDNA (4 bytes) (magic number)
- NAME (4 bytes)
- <nr> (4 bytes) amount of names (int)
- <string>
- <string>
- */
-
- if (strncmp((const char*)m_dna, "SDNA", 4) == 0)
- {
- // skip ++ NAME
- intPtr++;
- intPtr++;
- }
-
- // Parse names
- if (!littleEndian)
- *intPtr = btSwapEndian(*intPtr);
-
- dataLen = *intPtr;
-
- intPtr++;
-
- cp = (char*)intPtr;
- int i;
- for (i = 0; i < dataLen; i++)
- {
- while (*cp) cp++;
- cp++;
- }
- cp = btAlignPointer(cp, 4);
-
- /*
- TYPE (4 bytes)
- <nr> amount of types (int)
- <string>
- <string>
- */
-
- intPtr = (int*)cp;
- btAssert(strncmp(cp, "TYPE", 4) == 0);
- intPtr++;
-
- if (!littleEndian)
- *intPtr = btSwapEndian(*intPtr);
-
- dataLen = *intPtr;
- intPtr++;
-
- cp = (char*)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- mTypes.push_back(cp);
- while (*cp) cp++;
- cp++;
- }
-
- cp = btAlignPointer(cp, 4);
-
- /*
- TLEN (4 bytes)
- <len> (short) the lengths of types
- <len>
- */
-
- // Parse type lens
- intPtr = (int*)cp;
- btAssert(strncmp(cp, "TLEN", 4) == 0);
- intPtr++;
-
- dataLen = (int)mTypes.size();
-
- shtPtr = (short*)intPtr;
- for (i = 0; i < dataLen; i++, shtPtr++)
- {
- if (!littleEndian)
- shtPtr[0] = btSwapEndian(shtPtr[0]);
- mTlens.push_back(shtPtr[0]);
- }
-
- if (dataLen & 1) shtPtr++;
-
- /*
- STRC (4 bytes)
- <nr> amount of structs (int)
- <typenr>
- <nr_of_elems>
- <typenr>
- <namenr>
- <typenr>
- <namenr>
- */
-
- intPtr = (int*)shtPtr;
- cp = (char*)intPtr;
- btAssert(strncmp(cp, "STRC", 4) == 0);
- intPtr++;
-
- if (!littleEndian)
- *intPtr = btSwapEndian(*intPtr);
- dataLen = *intPtr;
- intPtr++;
-
- shtPtr = (short*)intPtr;
- for (i = 0; i < dataLen; i++)
- {
- mStructs.push_back(shtPtr);
-
- if (!littleEndian)
- {
- shtPtr[0] = btSwapEndian(shtPtr[0]);
- shtPtr[1] = btSwapEndian(shtPtr[1]);
-
- int len = shtPtr[1];
- shtPtr += 2;
-
- for (int a = 0; a < len; a++, shtPtr += 2)
- {
- shtPtr[0] = btSwapEndian(shtPtr[0]);
- shtPtr[1] = btSwapEndian(shtPtr[1]);
- }
- }
- else
- {
- shtPtr += (2 * shtPtr[1]) + 2;
- }
- }
-
- // build reverse lookups
- for (i = 0; i < (int)mStructs.size(); i++)
- {
- short* strc = mStructs.at(i);
- mStructReverse.insert(strc[0], i);
- mTypeLookup.insert(btHashString(mTypes[strc[0]]), i);
- }
- }
-
-public:
- btHashMap<btHashPtr, void*> m_skipPointers;
-
- btDefaultSerializer(int totalSize = 0, unsigned char* buffer = 0)
- : m_uniqueIdGenerator(0),
- m_totalSize(totalSize),
- m_currentSize(0),
- m_dna(0),
- m_dnaLength(0),
- m_serializationFlags(0)
- {
- if (buffer == 0)
- {
- m_buffer = m_totalSize ? (unsigned char*)btAlignedAlloc(totalSize, 16) : 0;
- m_ownsBuffer = true;
- }
- else
- {
- m_buffer = buffer;
- m_ownsBuffer = false;
- }
-
- const bool VOID_IS_8 = ((sizeof(void*) == 8));
-
-#ifdef BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
-#if _WIN64
- initDNA((const char*)sBulletDNAstr64, sBulletDNAlen64);
-#else
- btAssert(0);
-#endif
- }
- else
- {
-#ifndef _WIN64
- initDNA((const char*)sBulletDNAstr, sBulletDNAlen);
-#else
- btAssert(0);
-#endif
- }
-
-#else //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- if (VOID_IS_8)
- {
- initDNA((const char*)sBulletDNAstr64, sBulletDNAlen64);
- }
- else
- {
- initDNA((const char*)sBulletDNAstr, sBulletDNAlen);
- }
-#endif //BT_INTERNAL_UPDATE_SERIALIZATION_STRUCTURES
- }
-
- virtual ~btDefaultSerializer()
- {
- if (m_buffer && m_ownsBuffer)
- btAlignedFree(m_buffer);
- if (m_dna)
- btAlignedFree(m_dna);
- }
-
- static int getMemoryDnaSizeInBytes()
- {
- const bool VOID_IS_8 = ((sizeof(void*) == 8));
-
- if (VOID_IS_8)
- {
- return sBulletDNAlen64;
- }
- return sBulletDNAlen;
- }
- static const char* getMemoryDna()
- {
- const bool VOID_IS_8 = ((sizeof(void*) == 8));
- if (VOID_IS_8)
- {
- return (const char*)sBulletDNAstr64;
- }
- return (const char*)sBulletDNAstr;
- }
-
- void insertHeader()
- {
- writeHeader(m_buffer);
- m_currentSize += BT_HEADER_LENGTH;
- }
-
- void writeHeader(unsigned char* buffer) const
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- memcpy(buffer, "BULLETd", 7);
-#else
- memcpy(buffer, "BULLETf", 7);
-#endif //BT_USE_DOUBLE_PRECISION
-
- int littleEndian = 1;
- littleEndian = ((char*)&littleEndian)[0];
-
- if (sizeof(void*) == 8)
- {
- buffer[7] = '-';
- }
- else
- {
- buffer[7] = '_';
- }
-
- if (littleEndian)
- {
- buffer[8] = 'v';
- }
- else
- {
- buffer[8] = 'V';
- }
-
- buffer[9] = '3';
- buffer[10] = '1';
- buffer[11] = '7';
- }
-
- virtual void startSerialization()
- {
- m_uniqueIdGenerator = 1;
- if (m_totalSize)
- {
- unsigned char* buffer = internalAlloc(BT_HEADER_LENGTH);
- writeHeader(buffer);
- }
- }
-
- virtual void finishSerialization()
- {
- writeDNA();
-
- //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now
- if (!m_totalSize)
- {
- if (m_buffer)
- btAlignedFree(m_buffer);
-
- m_currentSize += BT_HEADER_LENGTH;
- m_buffer = (unsigned char*)btAlignedAlloc(m_currentSize, 16);
-
- unsigned char* currentPtr = m_buffer;
- writeHeader(m_buffer);
- currentPtr += BT_HEADER_LENGTH;
- for (int i = 0; i < m_chunkPtrs.size(); i++)
- {
- int curLength = sizeof(btChunk) + m_chunkPtrs[i]->m_length;
- memcpy(currentPtr, m_chunkPtrs[i], curLength);
- btAlignedFree(m_chunkPtrs[i]);
- currentPtr += curLength;
- }
- }
-
- mTypes.clear();
- mStructs.clear();
- mTlens.clear();
- mStructReverse.clear();
- mTypeLookup.clear();
- m_skipPointers.clear();
- m_chunkP.clear();
- m_nameMap.clear();
- m_uniquePointers.clear();
- m_chunkPtrs.clear();
- }
-
- virtual void* getUniquePointer(void* oldPtr)
- {
- btAssert(m_uniqueIdGenerator >= 0);
- if (!oldPtr)
- return 0;
-
- btPointerUid* uptr = (btPointerUid*)m_uniquePointers.find(oldPtr);
- if (uptr)
- {
- return uptr->m_ptr;
- }
-
- void** ptr2 = m_skipPointers[oldPtr];
- if (ptr2)
- {
- return 0;
- }
-
- m_uniqueIdGenerator++;
-
- btPointerUid uid;
- uid.m_uniqueIds[0] = m_uniqueIdGenerator;
- uid.m_uniqueIds[1] = m_uniqueIdGenerator;
- m_uniquePointers.insert(oldPtr, uid);
- return uid.m_ptr;
- }
-
- virtual const unsigned char* getBufferPointer() const
- {
- return m_buffer;
- }
-
- virtual int getCurrentBufferSize() const
- {
- return m_currentSize;
- }
-
- virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode, void* oldPtr)
- {
- if (!(m_serializationFlags & BT_SERIALIZE_NO_DUPLICATE_ASSERT))
- {
- btAssert(!findPointer(oldPtr));
- }
-
- chunk->m_dna_nr = getReverseType(structType);
-
- chunk->m_chunkCode = chunkCode;
-
- void* uniquePtr = getUniquePointer(oldPtr);
-
- m_chunkP.insert(oldPtr, uniquePtr); //chunk->m_oldPtr);
- chunk->m_oldPtr = uniquePtr; //oldPtr;
- }
-
- virtual unsigned char* internalAlloc(size_t size)
- {
- unsigned char* ptr = 0;
-
- if (m_totalSize)
- {
- ptr = m_buffer + m_currentSize;
- m_currentSize += int(size);
- btAssert(m_currentSize < m_totalSize);
- }
- else
- {
- ptr = (unsigned char*)btAlignedAlloc(size, 16);
- m_currentSize += int(size);
- }
- return ptr;
- }
-
- virtual btChunk* allocate(size_t size, int numElements)
- {
- unsigned char* ptr = internalAlloc(int(size) * numElements + sizeof(btChunk));
-
- unsigned char* data = ptr + sizeof(btChunk);
-
- btChunk* chunk = (btChunk*)ptr;
- chunk->m_chunkCode = 0;
- chunk->m_oldPtr = data;
- chunk->m_length = int(size) * numElements;
- chunk->m_number = numElements;
-
- m_chunkPtrs.push_back(chunk);
-
- return chunk;
- }
-
- virtual const char* findNameForPointer(const void* ptr) const
- {
- const char* const* namePtr = m_nameMap.find(ptr);
- if (namePtr && *namePtr)
- return *namePtr;
- return 0;
- }
-
- virtual void registerNameForPointer(const void* ptr, const char* name)
- {
- m_nameMap.insert(ptr, name);
- }
-
- virtual void serializeName(const char* name)
- {
- if (name)
- {
- //don't serialize name twice
- if (findPointer((void*)name))
- return;
-
- int len = btStrLen(name);
- if (len)
- {
- int newLen = len + 1;
- int padding = ((newLen + 3) & ~3) - newLen;
- newLen += padding;
-
- //serialize name string now
- btChunk* chunk = allocate(sizeof(char), newLen);
- char* destinationName = (char*)chunk->m_oldPtr;
- for (int i = 0; i < len; i++)
- {
- destinationName[i] = name[i];
- }
- destinationName[len] = 0;
- finalizeChunk(chunk, "char", BT_ARRAY_CODE, (void*)name);
- }
- }
- }
-
- virtual int getSerializationFlags() const
- {
- return m_serializationFlags;
- }
-
- virtual void setSerializationFlags(int flags)
- {
- m_serializationFlags = flags;
- }
- int getNumChunks() const
- {
- return m_chunkPtrs.size();
- }
-
- const btChunk* getChunk(int chunkIndex) const
- {
- return m_chunkPtrs[chunkIndex];
- }
-};
-
-///In general it is best to use btDefaultSerializer,
-///in particular when writing the data to disk or sending it over the network.
-///The btInMemorySerializer is experimental and only suitable in a few cases.
-///The btInMemorySerializer takes a shortcut and can be useful to create a deep-copy
-///of objects. There will be a demo on how to use the btInMemorySerializer.
-#ifdef ENABLE_INMEMORY_SERIALIZER
-
-struct btInMemorySerializer : public btDefaultSerializer
-{
- btHashMap<btHashPtr, btChunk*> m_uid2ChunkPtr;
- btHashMap<btHashPtr, void*> m_orgPtr2UniqueDataPtr;
- btHashMap<btHashString, const void*> m_names2Ptr;
-
- btBulletSerializedArrays m_arrays;
-
- btInMemorySerializer(int totalSize = 0, unsigned char* buffer = 0)
- : btDefaultSerializer(totalSize, buffer)
- {
- }
-
- virtual void startSerialization()
- {
- m_uid2ChunkPtr.clear();
- //todo: m_arrays.clear();
- btDefaultSerializer::startSerialization();
- }
-
- btChunk* findChunkFromUniquePointer(void* uniquePointer)
- {
- btChunk** chkPtr = m_uid2ChunkPtr[uniquePointer];
- if (chkPtr)
- {
- return *chkPtr;
- }
- return 0;
- }
-
- virtual void registerNameForPointer(const void* ptr, const char* name)
- {
- btDefaultSerializer::registerNameForPointer(ptr, name);
- m_names2Ptr.insert(name, ptr);
- }
-
- virtual void finishSerialization()
- {
- }
-
- virtual void* getUniquePointer(void* oldPtr)
- {
- if (oldPtr == 0)
- return 0;
-
- // void* uniquePtr = getUniquePointer(oldPtr);
- btChunk* chunk = findChunkFromUniquePointer(oldPtr);
- if (chunk)
- {
- return chunk->m_oldPtr;
- }
- else
- {
- const char* n = (const char*)oldPtr;
- const void** ptr = m_names2Ptr[n];
- if (ptr)
- {
- return oldPtr;
- }
- else
- {
- void** ptr2 = m_skipPointers[oldPtr];
- if (ptr2)
- {
- return 0;
- }
- else
- {
- //If this assert hit, serialization happened in the wrong order
- // 'getUniquePointer'
- btAssert(0);
- }
- }
- return 0;
- }
- return oldPtr;
- }
-
- virtual void finalizeChunk(btChunk* chunk, const char* structType, int chunkCode, void* oldPtr)
- {
- if (!(m_serializationFlags & BT_SERIALIZE_NO_DUPLICATE_ASSERT))
- {
- btAssert(!findPointer(oldPtr));
- }
-
- chunk->m_dna_nr = getReverseType(structType);
- chunk->m_chunkCode = chunkCode;
- //void* uniquePtr = getUniquePointer(oldPtr);
- m_chunkP.insert(oldPtr, oldPtr); //chunk->m_oldPtr);
- // chunk->m_oldPtr = uniquePtr;//oldPtr;
-
- void* uid = findPointer(oldPtr);
- m_uid2ChunkPtr.insert(uid, chunk);
-
- switch (chunk->m_chunkCode)
- {
- case BT_SOFTBODY_CODE:
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- m_arrays.m_softBodyDoubleData.push_back((btSoftBodyDoubleData*)chunk->m_oldPtr);
-#else
- m_arrays.m_softBodyFloatData.push_back((btSoftBodyFloatData*)chunk->m_oldPtr);
-#endif
- break;
- }
- case BT_COLLISIONOBJECT_CODE:
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- m_arrays.m_collisionObjectDataDouble.push_back((btCollisionObjectDoubleData*)chunk->m_oldPtr);
-#else //BT_USE_DOUBLE_PRECISION
- m_arrays.m_collisionObjectDataFloat.push_back((btCollisionObjectFloatData*)chunk->m_oldPtr);
-#endif //BT_USE_DOUBLE_PRECISION
- break;
- }
- case BT_RIGIDBODY_CODE:
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- m_arrays.m_rigidBodyDataDouble.push_back((btRigidBodyDoubleData*)chunk->m_oldPtr);
-#else
- m_arrays.m_rigidBodyDataFloat.push_back((btRigidBodyFloatData*)chunk->m_oldPtr);
-#endif //BT_USE_DOUBLE_PRECISION
- break;
- };
- case BT_CONSTRAINT_CODE:
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- m_arrays.m_constraintDataDouble.push_back((btTypedConstraintDoubleData*)chunk->m_oldPtr);
-#else
- m_arrays.m_constraintDataFloat.push_back((btTypedConstraintFloatData*)chunk->m_oldPtr);
-#endif
- break;
- }
- case BT_QUANTIZED_BVH_CODE:
- {
-#ifdef BT_USE_DOUBLE_PRECISION
- m_arrays.m_bvhsDouble.push_back((btQuantizedBvhDoubleData*)chunk->m_oldPtr);
-#else
- m_arrays.m_bvhsFloat.push_back((btQuantizedBvhFloatData*)chunk->m_oldPtr);
-#endif
- break;
- }
-
- case BT_SHAPE_CODE:
- {
- btCollisionShapeData* shapeData = (btCollisionShapeData*)chunk->m_oldPtr;
- m_arrays.m_colShapeData.push_back(shapeData);
- break;
- }
- case BT_TRIANLGE_INFO_MAP:
- case BT_ARRAY_CODE:
- case BT_SBMATERIAL_CODE:
- case BT_SBNODE_CODE:
- case BT_DYNAMICSWORLD_CODE:
- case BT_DNA_CODE:
- {
- break;
- }
- default:
- {
- }
- };
- }
-
- int getNumChunks() const
- {
- return m_uid2ChunkPtr.size();
- }
-
- const btChunk* getChunk(int chunkIndex) const
- {
- return *m_uid2ChunkPtr.getAtIndex(chunkIndex);
- }
-};
-#endif //ENABLE_INMEMORY_SERIALIZER
-
-#endif //BT_SERIALIZER_H
diff --git a/thirdparty/bullet/LinearMath/btSerializer64.cpp b/thirdparty/bullet/LinearMath/btSerializer64.cpp
deleted file mode 100644
index 6c4bc7031f..0000000000
--- a/thirdparty/bullet/LinearMath/btSerializer64.cpp
+++ /dev/null
@@ -1,692 +0,0 @@
-char sBulletDNAstr64[]= {
-char(83),char(68),char(78),char(65),char(78),char(65),char(77),char(69),char(-74),char(1),char(0),char(0),char(109),char(95),char(115),char(105),char(122),char(101),char(0),char(109),
-char(95),char(99),char(97),char(112),char(97),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(100),char(97),char(116),char(97),char(0),char(109),char(95),
-char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(115),char(0),char(109),char(95),char(99),char(111),
-char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),
-char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(115),char(0),char(42),char(102),char(105),char(114),char(115),char(116),char(0),char(42),char(108),char(97),char(115),
-char(116),char(0),char(109),char(95),char(102),char(108),char(111),char(97),char(116),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(108),char(91),char(51),
-char(93),char(0),char(109),char(95),char(98),char(97),char(115),char(105),char(115),char(0),char(109),char(95),char(111),char(114),char(105),char(103),char(105),char(110),char(0),char(109),
-char(95),char(114),char(111),char(111),char(116),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),
-char(116),char(114),char(101),char(101),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),
-char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(91),char(51),char(93),char(0),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),
-char(101),char(100),char(65),char(97),char(98),char(98),char(77),char(97),char(120),char(91),char(51),char(93),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),
-char(105),char(110),char(79),char(114),char(103),char(0),char(109),char(95),char(97),char(97),char(98),char(98),char(77),char(97),char(120),char(79),char(114),char(103),char(0),char(109),
-char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(115),char(117),char(98),char(80),char(97),
-char(114),char(116),char(0),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),
-char(95),char(112),char(97),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(101),char(115),char(99),char(97),char(112),char(101),char(73),char(110),char(100),char(101),
-char(120),char(79),char(114),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(98),
-char(118),char(104),char(65),char(97),char(98),char(98),char(77),char(105),char(110),char(0),char(109),char(95),char(98),char(118),char(104),char(65),char(97),char(98),char(98),char(77),
-char(97),char(120),char(0),char(109),char(95),char(98),char(118),char(104),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),
-char(0),char(109),char(95),char(99),char(117),char(114),char(78),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),char(117),char(115),
-char(101),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(110),char(117),char(109),char(67),
-char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(76),char(101),char(97),char(102),char(78),char(111),char(100),char(101),char(115),char(0),char(109),
-char(95),char(110),char(117),char(109),char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),
-char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(99),char(111),char(110),char(116),char(105),char(103),char(117),char(111),
-char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),
-char(122),char(101),char(100),char(67),char(111),char(110),char(116),char(105),char(103),char(117),char(111),char(117),char(115),char(78),char(111),char(100),char(101),char(115),char(80),char(116),
-char(114),char(0),char(42),char(109),char(95),char(115),char(117),char(98),char(84),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(80),char(116),char(114),char(0),
-char(109),char(95),char(116),char(114),char(97),char(118),char(101),char(114),char(115),char(97),char(108),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(110),char(117),
-char(109),char(83),char(117),char(98),char(116),char(114),char(101),char(101),char(72),char(101),char(97),char(100),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(110),
-char(97),char(109),char(101),char(0),char(109),char(95),char(115),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(112),char(97),
-char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
-char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(83),char(99),char(97),
-char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(108),char(97),char(110),char(101),char(78),char(111),char(114),char(109),char(97),char(108),char(0),char(109),
-char(95),char(112),char(108),char(97),char(110),char(101),char(67),char(111),char(110),char(115),char(116),char(97),char(110),char(116),char(0),char(109),char(95),char(105),char(109),char(112),
-char(108),char(105),char(99),char(105),char(116),char(83),char(104),char(97),char(112),char(101),char(68),char(105),char(109),char(101),char(110),char(115),char(105),char(111),char(110),char(115),
-char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(109),
-char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(0),char(109),char(95),char(112),char(111),char(115),char(0),char(109),char(95),char(114),char(97),char(100),
-char(105),char(117),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),char(110),char(97),char(108),
-char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(42),char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(80),char(111),
-char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),char(108),char(111),char(99),
-char(97),char(108),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(65),char(114),char(114),char(97),char(121),char(83),char(105),char(122),char(101),char(0),
-char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(0),char(109),char(95),char(112),char(97),char(100),char(91),char(50),char(93),char(0),char(109),char(95),char(118),
-char(97),char(108),char(117),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(112),char(97),char(100),char(0),char(42),char(109),char(95),char(118),char(101),
-char(114),char(116),char(105),char(99),char(101),char(115),char(51),char(102),char(0),char(42),char(109),char(95),char(118),char(101),char(114),char(116),char(105),char(99),char(101),char(115),
-char(51),char(100),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(51),char(50),char(0),char(42),char(109),char(95),char(51),
-char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(42),char(109),char(95),char(51),char(105),char(110),char(100),char(105),char(99),char(101),
-char(115),char(56),char(0),char(42),char(109),char(95),char(105),char(110),char(100),char(105),char(99),char(101),char(115),char(49),char(54),char(0),char(109),char(95),char(110),char(117),
-char(109),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(101),char(114),char(116),
-char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(115),char(80),char(116),char(114),
-char(0),char(109),char(95),char(115),char(99),char(97),char(108),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(101),char(115),char(104),
-char(80),char(97),char(114),char(116),char(115),char(0),char(109),char(95),char(109),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),
-char(101),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(70),char(108),char(111),char(97),char(116),char(66),
-char(118),char(104),char(0),char(42),char(109),char(95),char(113),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(68),char(111),char(117),char(98),char(108),
-char(101),char(66),char(118),char(104),char(0),char(42),char(109),char(95),char(116),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),
-char(77),char(97),char(112),char(0),char(109),char(95),char(112),char(97),char(100),char(51),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(114),char(105),char(109),
-char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(116),char(114),char(97),char(110),char(115),
-char(102),char(111),char(114),char(109),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(0),char(109),
-char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),char(97),char(112),char(101),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),
-char(105),char(108),char(100),char(77),char(97),char(114),char(103),char(105),char(110),char(0),char(42),char(109),char(95),char(99),char(104),char(105),char(108),char(100),char(83),char(104),
-char(97),char(112),char(101),char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(104),char(105),char(108),char(100),char(83),char(104),char(97),
-char(112),char(101),char(115),char(0),char(109),char(95),char(117),char(112),char(65),char(120),char(105),char(115),char(0),char(109),char(95),char(117),char(112),char(73),char(110),char(100),
-char(101),char(120),char(0),char(109),char(95),char(102),char(108),char(97),char(103),char(115),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(48),char(86),
-char(49),char(65),char(110),char(103),char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(49),char(86),char(50),char(65),char(110),char(103),
-char(108),char(101),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(86),char(50),char(86),char(48),char(65),char(110),char(103),char(108),char(101),char(0),char(42),
-char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(110),char(101),
-char(120),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),char(118),char(97),char(108),char(117),char(101),char(65),char(114),char(114),char(97),char(121),char(80),
-char(116),char(114),char(0),char(42),char(109),char(95),char(107),char(101),char(121),char(65),char(114),char(114),char(97),char(121),char(80),char(116),char(114),char(0),char(109),char(95),
-char(99),char(111),char(110),char(118),char(101),char(120),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),char(109),char(95),char(112),char(108),char(97),char(110),
-char(97),char(114),char(69),char(112),char(115),char(105),char(108),char(111),char(110),char(0),char(109),char(95),char(101),char(113),char(117),char(97),char(108),char(86),char(101),char(114),
-char(116),char(101),char(120),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(101),char(100),char(103),char(101),char(68),
-char(105),char(115),char(116),char(97),char(110),char(99),char(101),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(122),
-char(101),char(114),char(111),char(65),char(114),char(101),char(97),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(110),
-char(101),char(120),char(116),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(104),char(97),char(115),char(104),char(84),char(97),char(98),char(108),char(101),char(83),
-char(105),char(122),char(101),char(0),char(109),char(95),char(110),char(117),char(109),char(86),char(97),char(108),char(117),char(101),char(115),char(0),char(109),char(95),char(110),char(117),
-char(109),char(75),char(101),char(121),char(115),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(76),char(111),
-char(99),char(97),char(108),char(80),char(111),char(105),char(110),char(116),char(65),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(76),char(111),char(99),char(97),char(108),char(80),char(111),char(105),char(110),char(116),char(66),char(91),char(52),char(93),char(0),
-char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),
-char(87),char(111),char(114),char(108),char(100),char(79),char(110),char(65),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(79),char(110),char(66),
-char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(78),char(111),char(114),char(109),
-char(97),char(108),char(87),char(111),char(114),char(108),char(100),char(79),char(110),char(66),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),
-char(116),char(67),char(97),char(99),char(104),char(101),char(76),char(97),char(116),char(101),char(114),char(97),char(108),char(70),char(114),char(105),char(99),char(116),char(105),char(111),
-char(110),char(68),char(105),char(114),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),
-char(101),char(76),char(97),char(116),char(101),char(114),char(97),char(108),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(68),char(105),char(114),char(50),
-char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(68),char(105),char(115),char(116),
-char(97),char(110),char(99),char(101),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),
-char(65),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(91),char(52),char(93),char(0),char(109),char(95),
-char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(80),char(114),char(101),char(118),char(82),char(72),char(83),char(91),char(52),char(93),
-char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),
-char(100),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(82),char(111),char(108),char(108),char(105),char(110),char(103),
-char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(83),char(112),char(105),char(110),char(110),char(105),char(110),char(103),
-char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(82),char(101),char(115),char(116),char(105),char(116),char(117),char(116),
-char(105),char(111),char(110),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(80),
-char(97),char(114),char(116),char(73),char(100),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),
-char(104),char(101),char(80),char(97),char(114),char(116),char(73),char(100),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(73),char(110),char(100),char(101),char(120),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),
-char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(73),char(110),char(100),char(101),char(120),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),
-char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(80),char(111),char(105),char(110),
-char(116),char(70),char(108),char(97),char(103),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),
-char(104),char(101),char(65),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(76),char(97),char(116),char(101),
-char(114),char(97),char(108),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),
-char(65),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(76),char(97),char(116),char(101),char(114),char(97),
-char(108),char(50),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),
-char(110),char(116),char(97),char(99),char(116),char(77),char(111),char(116),char(105),char(111),char(110),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),
-char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(77),char(111),char(116),char(105),char(111),
-char(110),char(50),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),
-char(110),char(116),char(97),char(99),char(116),char(67),char(70),char(77),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),
-char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),
-char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(49),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),
-char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(69),char(82),char(80),char(91),char(52),char(93),char(0),char(109),
-char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(67),char(111),char(109),char(98),char(105),char(110),char(101),char(100),char(67),
-char(111),char(110),char(116),char(97),char(99),char(116),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(49),char(91),char(52),char(93),char(0),char(109),char(95),
-char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(67),char(70),
-char(77),char(91),char(52),char(93),char(0),char(109),char(95),char(112),char(111),char(105),char(110),char(116),char(67),char(97),char(99),char(104),char(101),char(76),char(105),char(102),
-char(101),char(84),char(105),char(109),char(101),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(97),char(99),char(104),char(101),char(100),
-char(80),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),
-char(65),char(0),char(109),char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(66),char(0),char(109),char(95),char(105),
-char(110),char(100),char(101),char(120),char(49),char(97),char(0),char(109),char(95),char(111),char(98),char(106),char(101),char(99),char(116),char(84),char(121),char(112),char(101),char(0),
-char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(66),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(84),char(104),char(114),
-char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),char(99),char(116),char(80),char(114),char(111),char(99),
-char(101),char(115),char(115),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(42),char(109),char(95),char(98),
-char(111),char(100),char(121),char(48),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(49),char(0),char(109),char(95),char(103),char(105),char(109),char(112),
-char(97),char(99),char(116),char(83),char(117),char(98),char(84),char(121),char(112),char(101),char(0),char(42),char(109),char(95),char(117),char(110),char(115),char(99),char(97),char(108),
-char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(70),char(108),char(111),char(97),char(116),char(80),char(116),char(114),char(0),char(42),char(109),char(95),
-char(117),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),char(110),char(116),char(115),char(68),char(111),char(117),char(98),char(108),char(101),
-char(80),char(116),char(114),char(0),char(109),char(95),char(110),char(117),char(109),char(85),char(110),char(115),char(99),char(97),char(108),char(101),char(100),char(80),char(111),char(105),
-char(110),char(116),char(115),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(51),char(91),char(52),char(93),char(0),char(42),char(109),
-char(95),char(98),char(114),char(111),char(97),char(100),char(112),char(104),char(97),char(115),char(101),char(72),char(97),char(110),char(100),char(108),char(101),char(0),char(42),char(109),
-char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(42),char(109),char(95),char(114),
-char(111),char(111),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(0),char(109),char(95),
-char(119),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),
-char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(87),char(111),char(114),char(108),char(100),char(84),char(114),char(97),char(110),char(115),
-char(102),char(111),char(114),char(109),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),
-char(76),char(105),char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(105),char(110),char(116),
-char(101),char(114),char(112),char(111),char(108),char(97),char(116),char(105),char(111),char(110),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),
-char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),char(70),
-char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(100),char(101),char(97),char(99),char(116),char(105),char(118),char(97),char(116),char(105),
-char(111),char(110),char(84),char(105),char(109),char(101),char(0),char(109),char(95),char(102),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),
-char(114),char(111),char(108),char(108),char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),
-char(110),char(116),char(97),char(99),char(116),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(99),char(111),char(110),char(116),char(97),
-char(99),char(116),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(116),
-char(117),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(104),char(105),char(116),char(70),char(114),char(97),char(99),char(116),char(105),char(111),char(110),char(0),
-char(109),char(95),char(99),char(99),char(100),char(83),char(119),char(101),char(112),char(116),char(83),char(112),char(104),char(101),char(114),char(101),char(82),char(97),char(100),char(105),
-char(117),char(115),char(0),char(109),char(95),char(99),char(99),char(100),char(77),char(111),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),
-char(111),char(108),char(100),char(0),char(109),char(95),char(104),char(97),char(115),char(65),char(110),char(105),char(115),char(111),char(116),char(114),char(111),char(112),char(105),char(99),
-char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
-char(70),char(108),char(97),char(103),char(115),char(0),char(109),char(95),char(105),char(115),char(108),char(97),char(110),char(100),char(84),char(97),char(103),char(49),char(0),char(109),
-char(95),char(99),char(111),char(109),char(112),char(97),char(110),char(105),char(111),char(110),char(73),char(100),char(0),char(109),char(95),char(97),char(99),char(116),char(105),char(118),
-char(97),char(116),char(105),char(111),char(110),char(83),char(116),char(97),char(116),char(101),char(49),char(0),char(109),char(95),char(105),char(110),char(116),char(101),char(114),char(110),
-char(97),char(108),char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(99),char(104),char(101),char(99),char(107),char(67),char(111),char(108),char(108),char(105),char(100),
-char(101),char(87),char(105),char(116),char(104),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(70),char(105),char(108),
-char(116),char(101),char(114),char(71),char(114),char(111),char(117),char(112),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),
-char(70),char(105),char(108),char(116),char(101),char(114),char(77),char(97),char(115),char(107),char(0),char(109),char(95),char(117),char(110),char(105),char(113),char(117),char(101),char(73),
-char(100),char(0),char(109),char(95),char(116),char(97),char(117),char(0),char(109),char(95),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),
-char(116),char(105),char(109),char(101),char(83),char(116),char(101),char(112),char(0),char(109),char(95),char(109),char(97),char(120),char(69),char(114),char(114),char(111),char(114),char(82),
-char(101),char(100),char(117),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(115),char(111),char(114),char(0),char(109),char(95),char(101),char(114),char(112),
-char(0),char(109),char(95),char(101),char(114),char(112),char(50),char(0),char(109),char(95),char(103),char(108),char(111),char(98),char(97),char(108),char(67),char(102),char(109),char(0),
-char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(80),char(101),char(110),char(101),char(116),char(114),
-char(97),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(115),char(112),char(108),
-char(105),char(116),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(117),char(114),char(110),char(69),char(114),char(112),char(0),char(109),char(95),char(108),
-char(105),char(110),char(101),char(97),char(114),char(83),char(108),char(111),char(112),char(0),char(109),char(95),char(119),char(97),char(114),char(109),char(115),char(116),char(97),char(114),
-char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(97),char(114),char(116),char(105),char(99),char(117),char(108),
-char(97),char(116),char(101),char(100),char(87),char(97),char(114),char(109),char(115),char(116),char(97),char(114),char(116),char(105),char(110),char(103),char(70),char(97),char(99),char(116),
-char(111),char(114),char(0),char(109),char(95),char(109),char(97),char(120),char(71),char(121),char(114),char(111),char(115),char(99),char(111),char(112),char(105),char(99),char(70),char(111),
-char(114),char(99),char(101),char(0),char(109),char(95),char(115),char(105),char(110),char(103),char(108),char(101),char(65),char(120),char(105),char(115),char(82),char(111),char(108),char(108),
-char(105),char(110),char(103),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),
-char(0),char(109),char(95),char(110),char(117),char(109),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(115),
-char(111),char(108),char(118),char(101),char(114),char(77),char(111),char(100),char(101),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(105),char(110),char(103),char(67),
-char(111),char(110),char(116),char(97),char(99),char(116),char(82),char(101),char(115),char(116),char(105),char(116),char(117),char(116),char(105),char(111),char(110),char(84),char(104),char(114),
-char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(109),char(105),char(110),char(105),char(109),char(117),char(109),char(83),char(111),char(108),char(118),
-char(101),char(114),char(66),char(97),char(116),char(99),char(104),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(73),
-char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(115),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(0),
-char(109),char(95),char(103),char(114),char(97),char(118),char(105),char(116),char(121),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
-char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),
-char(114),char(116),char(105),char(97),char(84),char(101),char(110),char(115),char(111),char(114),char(87),char(111),char(114),char(108),char(100),char(0),char(109),char(95),char(108),char(105),
-char(110),char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),
-char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),
-char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(70),char(97),char(99),char(116),char(111),
-char(114),char(0),char(109),char(95),char(103),char(114),char(97),char(118),char(105),char(116),char(121),char(95),char(97),char(99),char(99),char(101),char(108),char(101),char(114),char(97),
-char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(105),char(110),char(118),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(76),char(111),char(99),
-char(97),char(108),char(0),char(109),char(95),char(116),char(111),char(116),char(97),char(108),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(116),char(111),
-char(116),char(97),char(108),char(84),char(111),char(114),char(113),char(117),char(101),char(0),char(109),char(95),char(105),char(110),char(118),char(101),char(114),char(115),char(101),char(77),
-char(97),char(115),char(115),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),
-char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(97),
-char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),
-char(111),char(114),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(76),char(105),char(110),char(101),char(97),
-char(114),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),
-char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),
-char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(83),char(113),char(114),char(0),
-char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(65),char(110),char(103),char(117),char(108),char(97),char(114),char(68),
-char(97),char(109),char(112),char(105),char(110),char(103),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),
-char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),
-char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(108),char(101),char(101),char(112),char(105),char(110),char(103),char(84),char(104),char(114),char(101),
-char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(97),char(100),char(100),char(105),char(116),char(105),char(111),char(110),char(97),char(108),char(68),char(97),
-char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),
-char(116),char(82),char(111),char(119),char(115),char(0),char(110),char(117),char(98),char(0),char(42),char(109),char(95),char(114),char(98),char(65),char(0),char(42),char(109),char(95),
-char(114),char(98),char(66),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
-char(84),char(121),char(112),char(101),char(0),char(109),char(95),char(117),char(115),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),
-char(116),char(73),char(100),char(0),char(109),char(95),char(110),char(101),char(101),char(100),char(115),char(70),char(101),char(101),char(100),char(98),char(97),char(99),char(107),char(0),
-char(109),char(95),char(97),char(112),char(112),char(108),char(105),char(101),char(100),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(100),
-char(98),char(103),char(68),char(114),char(97),char(119),char(83),char(105),char(122),char(101),char(0),char(109),char(95),char(100),char(105),char(115),char(97),char(98),char(108),char(101),
-char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(115),char(66),char(101),char(116),char(119),char(101),char(101),char(110),char(76),char(105),char(110),
-char(107),char(101),char(100),char(66),char(111),char(100),char(105),char(101),char(115),char(0),char(109),char(95),char(111),char(118),char(101),char(114),char(114),char(105),char(100),char(101),
-char(78),char(117),char(109),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),
-char(109),char(95),char(98),char(114),char(101),char(97),char(107),char(105),char(110),char(103),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(84),char(104),char(114),
-char(101),char(115),char(104),char(111),char(108),char(100),char(0),char(109),char(95),char(105),char(115),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(0),char(112),
-char(97),char(100),char(100),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(116),char(121),char(112),char(101),char(67),char(111),char(110),char(115),
-char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),
-char(65),char(0),char(109),char(95),char(112),char(105),char(118),char(111),char(116),char(73),char(110),char(66),char(0),char(109),char(95),char(114),char(98),char(65),char(70),char(114),
-char(97),char(109),char(101),char(0),char(109),char(95),char(114),char(98),char(66),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(117),char(115),char(101),
-char(82),char(101),char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),char(65),char(0),char(109),char(95),char(97),char(110),
-char(103),char(117),char(108),char(97),char(114),char(79),char(110),char(108),char(121),char(0),char(109),char(95),char(101),char(110),char(97),char(98),char(108),char(101),char(65),char(110),
-char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(0),char(109),char(95),char(109),char(111),char(116),char(111),char(114),char(84),char(97),
-char(114),char(103),char(101),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(109),char(97),char(120),char(77),char(111),
-char(116),char(111),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(108),char(111),char(119),char(101),char(114),char(76),char(105),
-char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),
-char(105),char(109),char(105),char(116),char(83),char(111),char(102),char(116),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(98),char(105),char(97),char(115),char(70),
-char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(114),char(101),char(108),char(97),char(120),char(97),char(116),char(105),char(111),char(110),char(70),char(97),
-char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(112),char(97),char(100),char(100),char(105),char(110),char(103),char(49),char(91),char(52),char(93),char(0),char(109),
-char(95),char(115),char(119),char(105),char(110),char(103),char(83),char(112),char(97),char(110),char(49),char(0),char(109),char(95),char(115),char(119),char(105),char(110),char(103),char(83),
-char(112),char(97),char(110),char(50),char(0),char(109),char(95),char(116),char(119),char(105),char(115),char(116),char(83),char(112),char(97),char(110),char(0),char(109),char(95),char(108),
-char(105),char(110),char(101),char(97),char(114),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(108),char(105),
-char(110),char(101),char(97),char(114),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),
-char(117),char(108),char(97),char(114),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(97),char(110),char(103),
-char(117),char(108),char(97),char(114),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),char(117),char(115),char(101),
-char(76),char(105),char(110),char(101),char(97),char(114),char(82),char(101),char(102),char(101),char(114),char(101),char(110),char(99),char(101),char(70),char(114),char(97),char(109),char(101),
-char(65),char(0),char(109),char(95),char(117),char(115),char(101),char(79),char(102),char(102),char(115),char(101),char(116),char(70),char(111),char(114),char(67),char(111),char(110),char(115),
-char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(54),char(100),char(111),char(102),char(68),char(97),
-char(116),char(97),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(69),char(110),char(97),char(98),char(108),char(101),char(100),char(91),char(54),
-char(93),char(0),char(109),char(95),char(101),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),
-char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),
-char(115),char(91),char(54),char(93),char(0),char(109),char(95),char(115),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),
-char(91),char(54),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(66),char(111),char(117),char(110),char(99),char(101),char(0),char(109),
-char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(111),char(112),char(69),char(82),char(80),char(0),char(109),char(95),char(108),char(105),char(110),
-char(101),char(97),char(114),char(83),char(116),char(111),char(112),char(67),char(70),char(77),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(77),
-char(111),char(116),char(111),char(114),char(69),char(82),char(80),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(77),char(111),char(116),char(111),
-char(114),char(67),char(70),char(77),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(84),char(97),char(114),char(103),char(101),char(116),char(86),
-char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(77),char(97),char(120),char(77),
-char(111),char(116),char(111),char(114),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(101),
-char(114),char(118),char(111),char(84),char(97),char(114),char(103),char(101),char(116),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),
-char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(108),char(105),char(110),char(101),
-char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(105),
-char(110),char(101),char(97),char(114),char(69),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),char(105),char(110),char(116),
-char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),char(77),char(111),char(116),char(111),char(114),
-char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(101),char(114),char(118),char(111),char(77),char(111),char(116),
-char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),
-char(83),char(112),char(114),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),
-char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(76),char(105),char(109),char(105),char(116),char(101),char(100),
-char(91),char(52),char(93),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),
-char(109),char(112),char(105),char(110),char(103),char(76),char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),
-char(103),char(117),char(108),char(97),char(114),char(66),char(111),char(117),char(110),char(99),char(101),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),
-char(114),char(83),char(116),char(111),char(112),char(69),char(82),char(80),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),
-char(111),char(112),char(67),char(70),char(77),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),
-char(69),char(82),char(80),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(111),char(116),char(111),char(114),char(67),char(70),
-char(77),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(84),char(97),char(114),char(103),char(101),char(116),char(86),char(101),char(108),
-char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(77),char(97),char(120),char(77),char(111),
-char(116),char(111),char(114),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(101),
-char(114),char(118),char(111),char(84),char(97),char(114),char(103),char(101),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),
-char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(103),
-char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),
-char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(69),char(113),char(117),char(105),char(108),char(105),char(98),char(114),char(105),char(117),char(109),char(80),char(111),
-char(105),char(110),char(116),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(69),char(110),char(97),char(98),char(108),char(101),char(77),
-char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(101),char(114),
-char(118),char(111),char(77),char(111),char(116),char(111),char(114),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),
-char(69),char(110),char(97),char(98),char(108),char(101),char(83),char(112),char(114),char(105),char(110),char(103),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),
-char(103),char(117),char(108),char(97),char(114),char(83),char(112),char(114),char(105),char(110),char(103),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),
-char(76),char(105),char(109),char(105),char(116),char(101),char(100),char(91),char(52),char(93),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),
-char(83),char(112),char(114),char(105),char(110),char(103),char(68),char(97),char(109),char(112),char(105),char(110),char(103),char(76),char(105),char(109),char(105),char(116),char(101),char(100),
-char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(111),char(116),char(97),char(116),char(101),char(79),char(114),char(100),char(101),char(114),char(0),char(109),char(95),
-char(97),char(120),char(105),char(115),char(73),char(110),char(65),char(0),char(109),char(95),char(97),char(120),char(105),char(115),char(73),char(110),char(66),char(0),char(109),char(95),
-char(114),char(97),char(116),char(105),char(111),char(0),char(109),char(95),char(108),char(105),char(110),char(101),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),
-char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),char(103),char(117),char(108),char(97),char(114),char(83),char(116),char(105),char(102),char(102),char(110),char(101),
-char(115),char(115),char(0),char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(83),char(116),char(105),char(102),char(102),char(110),char(101),char(115),char(115),
-char(0),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(0),char(109),char(95),char(112),char(111),char(115),char(105),char(116),
-char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(114),char(101),char(118),char(105),char(111),char(117),char(115),char(80),char(111),char(115),char(105),char(116),char(105),
-char(111),char(110),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(97),char(99),char(99),char(117),
-char(109),char(117),char(108),char(97),char(116),char(101),char(100),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(110),char(111),char(114),char(109),char(97),
-char(108),char(0),char(109),char(95),char(97),char(114),char(101),char(97),char(0),char(109),char(95),char(97),char(116),char(116),char(97),char(99),char(104),char(0),char(109),char(95),
-char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(114),char(101),char(115),
-char(116),char(76),char(101),char(110),char(103),char(116),char(104),char(0),char(109),char(95),char(98),char(98),char(101),char(110),char(100),char(105),char(110),char(103),char(0),char(109),
-char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(51),char(93),char(0),char(109),char(95),char(114),char(101),
-char(115),char(116),char(65),char(114),char(101),char(97),char(0),char(109),char(95),char(99),char(48),char(91),char(52),char(93),char(0),char(109),char(95),char(110),char(111),char(100),
-char(101),char(73),char(110),char(100),char(105),char(99),char(101),char(115),char(91),char(52),char(93),char(0),char(109),char(95),char(114),char(101),char(115),char(116),char(86),char(111),
-char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(99),char(49),char(0),char(109),char(95),char(99),char(50),char(0),char(109),char(95),char(99),char(48),char(0),
-char(109),char(95),char(108),char(111),char(99),char(97),char(108),char(70),char(114),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(114),char(105),char(103),char(105),
-char(100),char(66),char(111),char(100),char(121),char(0),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),char(100),char(101),char(120),char(0),char(109),char(95),
-char(97),char(101),char(114),char(111),char(77),char(111),char(100),char(101),char(108),char(0),char(109),char(95),char(98),char(97),char(117),char(109),char(103),char(97),char(114),char(116),
-char(101),char(0),char(109),char(95),char(100),char(114),char(97),char(103),char(0),char(109),char(95),char(108),char(105),char(102),char(116),char(0),char(109),char(95),char(112),char(114),
-char(101),char(115),char(115),char(117),char(114),char(101),char(0),char(109),char(95),char(118),char(111),char(108),char(117),char(109),char(101),char(0),char(109),char(95),char(100),char(121),
-char(110),char(97),char(109),char(105),char(99),char(70),char(114),char(105),char(99),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(112),char(111),char(115),char(101),
-char(77),char(97),char(116),char(99),char(104),char(0),char(109),char(95),char(114),char(105),char(103),char(105),char(100),char(67),char(111),char(110),char(116),char(97),char(99),char(116),
-char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(107),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(111),
-char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),
-char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(97),char(110),
-char(99),char(104),char(111),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(82),
-char(105),char(103),char(105),char(100),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),
-char(109),char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),char(108),char(117),char(115),char(116),char(101),char(114),
-char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),
-char(108),char(117),char(115),char(116),char(101),char(114),char(72),char(97),char(114),char(100),char(110),char(101),char(115),char(115),char(0),char(109),char(95),char(115),char(111),char(102),
-char(116),char(82),char(105),char(103),char(105),char(100),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),
-char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(115),char(111),char(102),char(116),char(75),char(105),char(110),char(101),char(116),char(105),char(99),char(67),
-char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),
-char(95),char(115),char(111),char(102),char(116),char(83),char(111),char(102),char(116),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(109),char(112),char(117),
-char(108),char(115),char(101),char(83),char(112),char(108),char(105),char(116),char(0),char(109),char(95),char(109),char(97),char(120),char(86),char(111),char(108),char(117),char(109),char(101),
-char(0),char(109),char(95),char(116),char(105),char(109),char(101),char(83),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(118),char(101),char(108),char(111),char(99),
-char(105),char(116),char(121),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(112),char(111),char(115),char(105),
-char(116),char(105),char(111),char(110),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(100),char(114),char(105),
-char(102),char(116),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),
-char(101),char(114),char(73),char(116),char(101),char(114),char(97),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),char(114),char(111),char(116),char(0),char(109),
-char(95),char(115),char(99),char(97),char(108),char(101),char(0),char(109),char(95),char(97),char(113),char(113),char(0),char(109),char(95),char(99),char(111),char(109),char(0),char(42),
-char(109),char(95),char(112),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(42),char(109),char(95),char(119),char(101),char(105),char(103),char(104),
-char(116),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(80),char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(115),char(0),char(109),char(95),
-char(110),char(117),char(109),char(87),char(101),char(105),char(103),char(116),char(115),char(0),char(109),char(95),char(98),char(118),char(111),char(108),char(117),char(109),char(101),char(0),
-char(109),char(95),char(98),char(102),char(114),char(97),char(109),char(101),char(0),char(109),char(95),char(102),char(114),char(97),char(109),char(101),char(120),char(102),char(111),char(114),
-char(109),char(0),char(109),char(95),char(108),char(111),char(99),char(105),char(105),char(0),char(109),char(95),char(105),char(110),char(118),char(119),char(105),char(0),char(109),char(95),
-char(118),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(100),char(105),char(109),char(112),char(117),
-char(108),char(115),char(101),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(108),char(118),char(0),char(109),char(95),char(97),char(118),char(0),char(42),char(109),
-char(95),char(102),char(114),char(97),char(109),char(101),char(114),char(101),char(102),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(73),char(110),
-char(100),char(105),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(109),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(117),
-char(109),char(70),char(114),char(97),char(109),char(101),char(82),char(101),char(102),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(78),char(111),char(100),char(101),
-char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(77),char(97),char(115),char(115),char(101),char(115),char(0),char(109),char(95),char(105),char(100),char(109),char(97),
-char(115),char(115),char(0),char(109),char(95),char(105),char(109),char(97),char(115),char(115),char(0),char(109),char(95),char(110),char(118),char(105),char(109),char(112),char(117),char(108),
-char(115),char(101),char(115),char(0),char(109),char(95),char(110),char(100),char(105),char(109),char(112),char(117),char(108),char(115),char(101),char(115),char(0),char(109),char(95),char(110),
-char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(108),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),
-char(95),char(97),char(100),char(97),char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(109),char(97),char(116),char(99),char(104),char(105),char(110),char(103),
-char(0),char(109),char(95),char(109),char(97),char(120),char(83),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(73),
-char(109),char(112),char(117),char(108),char(115),char(101),char(0),char(109),char(95),char(115),char(101),char(108),char(102),char(67),char(111),char(108),char(108),char(105),char(115),char(105),
-char(111),char(110),char(73),char(109),char(112),char(117),char(108),char(115),char(101),char(70),char(97),char(99),char(116),char(111),char(114),char(0),char(109),char(95),char(99),char(111),
-char(110),char(116),char(97),char(105),char(110),char(115),char(65),char(110),char(99),char(104),char(111),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(108),char(105),
-char(100),char(101),char(0),char(109),char(95),char(99),char(108),char(117),char(115),char(116),char(101),char(114),char(73),char(110),char(100),char(101),char(120),char(0),char(42),char(109),
-char(95),char(98),char(111),char(100),char(121),char(65),char(0),char(42),char(109),char(95),char(98),char(111),char(100),char(121),char(66),char(0),char(109),char(95),char(114),char(101),
-char(102),char(115),char(91),char(50),char(93),char(0),char(109),char(95),char(99),char(102),char(109),char(0),char(109),char(95),char(115),char(112),char(108),char(105),char(116),char(0),
-char(109),char(95),char(100),char(101),char(108),char(101),char(116),char(101),char(0),char(109),char(95),char(114),char(101),char(108),char(80),char(111),char(115),char(105),char(116),char(105),
-char(111),char(110),char(91),char(50),char(93),char(0),char(109),char(95),char(98),char(111),char(100),char(121),char(65),char(116),char(121),char(112),char(101),char(0),char(109),char(95),
-char(98),char(111),char(100),char(121),char(66),char(116),char(121),char(112),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(84),char(121),char(112),
-char(101),char(0),char(42),char(109),char(95),char(112),char(111),char(115),char(101),char(0),char(42),char(42),char(109),char(95),char(109),char(97),char(116),char(101),char(114),char(105),
-char(97),char(108),char(115),char(0),char(42),char(109),char(95),char(110),char(111),char(100),char(101),char(115),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),
-char(115),char(0),char(42),char(109),char(95),char(102),char(97),char(99),char(101),char(115),char(0),char(42),char(109),char(95),char(116),char(101),char(116),char(114),char(97),char(104),
-char(101),char(100),char(114),char(97),char(0),char(42),char(109),char(95),char(97),char(110),char(99),char(104),char(111),char(114),char(115),char(0),char(42),char(109),char(95),char(99),
-char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),
-char(110),char(117),char(109),char(77),char(97),char(116),char(101),char(114),char(105),char(97),char(108),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(76),char(105),
-char(110),char(107),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(70),char(97),char(99),char(101),char(115),char(0),char(109),char(95),char(110),char(117),char(109),
-char(84),char(101),char(116),char(114),char(97),char(104),char(101),char(100),char(114),char(97),char(0),char(109),char(95),char(110),char(117),char(109),char(65),char(110),char(99),char(104),
-char(111),char(114),char(115),char(0),char(109),char(95),char(110),char(117),char(109),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(115),char(0),char(109),char(95),
-char(110),char(117),char(109),char(74),char(111),char(105),char(110),char(116),char(115),char(0),char(109),char(95),char(99),char(111),char(110),char(102),char(105),char(103),char(0),char(109),
-char(95),char(122),char(101),char(114),char(111),char(82),char(111),char(116),char(80),char(97),char(114),char(101),char(110),char(116),char(84),char(111),char(84),char(104),char(105),char(115),
-char(0),char(109),char(95),char(112),char(97),char(114),char(101),char(110),char(116),char(67),char(111),char(109),char(84),char(111),char(84),char(104),char(105),char(115),char(80),char(105),
-char(118),char(111),char(116),char(79),char(102),char(102),char(115),char(101),char(116),char(0),char(109),char(95),char(116),char(104),char(105),char(115),char(80),char(105),char(118),char(111),
-char(116),char(84),char(111),char(84),char(104),char(105),char(115),char(67),char(111),char(109),char(79),char(102),char(102),char(115),char(101),char(116),char(0),char(109),char(95),char(106),
-char(111),char(105),char(110),char(116),char(65),char(120),char(105),char(115),char(84),char(111),char(112),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),
-char(110),char(116),char(65),char(120),char(105),char(115),char(66),char(111),char(116),char(116),char(111),char(109),char(91),char(54),char(93),char(0),char(109),char(95),char(108),char(105),
-char(110),char(107),char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(0),char(109),char(95),char(97),char(98),char(115),char(70),char(114),char(97),char(109),char(101),
-char(84),char(111),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(84),char(111),char(112),char(0),char(109),char(95),char(97),char(98),char(115),
-char(70),char(114),char(97),char(109),char(101),char(84),char(111),char(116),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(66),char(111),char(116),char(116),
-char(111),char(109),char(0),char(109),char(95),char(97),char(98),char(115),char(70),char(114),char(97),char(109),char(101),char(76),char(111),char(99),char(86),char(101),char(108),char(111),
-char(99),char(105),char(116),char(121),char(84),char(111),char(112),char(0),char(109),char(95),char(97),char(98),char(115),char(70),char(114),char(97),char(109),char(101),char(76),char(111),
-char(99),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(66),char(111),char(116),char(116),char(111),char(109),char(0),char(109),char(95),char(108),char(105),
-char(110),char(107),char(77),char(97),char(115),char(115),char(0),char(109),char(95),char(112),char(97),char(114),char(101),char(110),char(116),char(73),char(110),char(100),char(101),char(120),
-char(0),char(109),char(95),char(100),char(111),char(102),char(67),char(111),char(117),char(110),char(116),char(0),char(109),char(95),char(112),char(111),char(115),char(86),char(97),char(114),
-char(67),char(111),char(117),char(110),char(116),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(80),char(111),char(115),char(91),char(55),char(93),char(0),
-char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(86),char(101),char(108),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),char(110),
-char(116),char(84),char(111),char(114),char(113),char(117),char(101),char(91),char(54),char(93),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(68),char(97),
-char(109),char(112),char(105),char(110),char(103),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(70),char(114),char(105),char(99),char(116),char(105),char(111),
-char(110),char(0),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(76),char(111),char(119),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),
-char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(85),char(112),char(112),char(101),char(114),char(76),char(105),char(109),char(105),char(116),char(0),char(109),char(95),
-char(106),char(111),char(105),char(110),char(116),char(77),char(97),char(120),char(70),char(111),char(114),char(99),char(101),char(0),char(109),char(95),char(106),char(111),char(105),char(110),
-char(116),char(77),char(97),char(120),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(42),char(109),char(95),char(108),char(105),char(110),char(107),
-char(78),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(106),char(111),char(105),char(110),char(116),char(78),char(97),char(109),char(101),char(0),char(42),char(109),
-char(95),char(108),char(105),char(110),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(114),char(0),char(42),char(109),char(95),char(112),char(97),char(100),
-char(100),char(105),char(110),char(103),char(80),char(116),char(114),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(87),char(111),char(114),char(108),char(100),char(80),
-char(111),char(115),char(105),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(87),char(111),char(114),char(108),char(100),char(79),
-char(114),char(105),char(101),char(110),char(116),char(97),char(116),char(105),char(111),char(110),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(76),char(105),char(110),
-char(101),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(65),char(110),
-char(103),char(117),char(108),char(97),char(114),char(86),char(101),char(108),char(111),char(99),char(105),char(116),char(121),char(0),char(109),char(95),char(98),char(97),char(115),char(101),
-char(73),char(110),char(101),char(114),char(116),char(105),char(97),char(0),char(109),char(95),char(98),char(97),char(115),char(101),char(77),char(97),char(115),char(115),char(0),char(42),
-char(109),char(95),char(98),char(97),char(115),char(101),char(78),char(97),char(109),char(101),char(0),char(42),char(109),char(95),char(98),char(97),char(115),char(101),char(67),char(111),
-char(108),char(108),char(105),char(100),char(101),char(114),char(0),char(109),char(95),char(99),char(111),char(108),char(79),char(98),char(106),char(68),char(97),char(116),char(97),char(0),
-char(42),char(109),char(95),char(109),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(0),char(109),char(95),char(108),char(105),char(110),char(107),char(0),
-char(84),char(89),char(80),char(69),char(99),char(0),char(0),char(0),char(99),char(104),char(97),char(114),char(0),char(117),char(99),char(104),char(97),char(114),char(0),char(115),
-char(104),char(111),char(114),char(116),char(0),char(117),char(115),char(104),char(111),char(114),char(116),char(0),char(105),char(110),char(116),char(0),char(108),char(111),char(110),char(103),
-char(0),char(117),char(108),char(111),char(110),char(103),char(0),char(102),char(108),char(111),char(97),char(116),char(0),char(100),char(111),char(117),char(98),char(108),char(101),char(0),
-char(118),char(111),char(105),char(100),char(0),char(80),char(111),char(105),char(110),char(116),char(101),char(114),char(65),char(114),char(114),char(97),char(121),char(0),char(98),char(116),
-char(80),char(104),char(121),char(115),char(105),char(99),char(115),char(83),char(121),char(115),char(116),char(101),char(109),char(0),char(76),char(105),char(115),char(116),char(66),char(97),
-char(115),char(101),char(0),char(98),char(116),char(86),char(101),char(99),char(116),char(111),char(114),char(51),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(86),char(101),char(99),char(116),char(111),char(114),char(51),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(116),char(101),char(114),char(110),char(105),char(111),char(110),char(70),char(108),char(111),char(97),char(116),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(116),char(101),char(114),char(110),char(105),char(111),char(110),char(68),char(111),char(117),char(98),
-char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),char(105),char(120),char(51),char(120),char(51),char(70),char(108),
-char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(97),char(116),char(114),char(105),char(120),char(51),char(120),char(51),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(97),char(110),char(115),char(102),char(111),char(114),
-char(109),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(97),char(110),char(115),char(102),char(111),
-char(114),char(109),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(66),char(118),char(104),char(83),char(117),
-char(98),char(116),char(114),char(101),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),
-char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(79),char(112),char(116),char(105),char(109),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),
-char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),char(116),char(105),char(122),
-char(101),char(100),char(66),char(118),char(104),char(78),char(111),char(100),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(81),char(117),char(97),char(110),
-char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(81),char(117),char(97),char(110),char(116),char(105),char(122),char(101),char(100),char(66),char(118),char(104),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),
-char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(83),char(104),char(97),char(112),char(101),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),char(97),char(116),char(105),char(99),char(80),char(108),char(97),char(110),char(101),char(83),char(104),char(97),
-char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(118),char(101),char(120),char(73),char(110),char(116),char(101),char(114),
-char(110),char(97),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(115),char(105),char(116),
-char(105),char(111),char(110),char(65),char(110),char(100),char(82),char(97),char(100),char(105),char(117),char(115),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),
-char(83),char(112),char(104),char(101),char(114),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(73),char(110),
-char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(104),char(111),char(114),char(116),char(73),char(110),
-char(116),char(73),char(110),char(100),char(101),char(120),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(104),char(111),char(114),char(116),char(73),char(110),
-char(116),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(67),char(104),char(97),char(114),char(73),char(110),char(100),char(101),char(120),char(84),char(114),char(105),char(112),char(108),char(101),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(77),char(101),char(115),char(104),char(80),char(97),char(114),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(116),
-char(114),char(105),char(100),char(105),char(110),char(103),char(77),char(101),char(115),char(104),char(73),char(110),char(116),char(101),char(114),char(102),char(97),char(99),char(101),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),
-char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),
-char(102),char(111),char(77),char(97),char(112),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(99),char(97),char(108),char(101),char(100),char(84),char(114),
-char(105),char(97),char(110),char(103),char(108),char(101),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),char(112),char(101),char(67),char(104),char(105),char(108),char(100),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(109),char(112),char(111),char(117),char(110),char(100),char(83),char(104),char(97),char(112),char(101),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(121),char(108),char(105),char(110),char(100),char(101),char(114),char(83),char(104),char(97),char(112),char(101),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(67),char(97),char(112),char(115),char(117),char(108),char(101),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(84),char(114),char(105),char(97),char(110),char(103),char(108),char(101),char(73),char(110),char(102),char(111),char(68),char(97),char(116),char(97),char(0),char(98),
-char(116),char(80),char(101),char(114),char(115),char(105),char(115),char(116),char(101),char(110),char(116),char(77),char(97),char(110),char(105),char(102),char(111),char(108),char(100),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),
-char(110),char(79),char(98),char(106),char(101),char(99),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(80),char(101),char(114),char(115),char(105),char(115),char(116),char(101),char(110),char(116),char(77),char(97),char(110),char(105),char(102),char(111),char(108),char(100),char(70),char(108),
-char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(108),char(108),char(105),char(115),char(105),char(111),char(110),char(79),
-char(98),char(106),char(101),char(99),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(73),char(109),
-char(112),char(97),char(99),char(116),char(77),char(101),char(115),char(104),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(67),char(111),char(110),char(118),char(101),char(120),char(72),char(117),char(108),char(108),char(83),char(104),char(97),char(112),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(116),char(97),char(99),char(116),char(83),
-char(111),char(108),char(118),char(101),char(114),char(73),char(110),char(102),char(111),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),
-char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),char(100),char(68),char(111),char(117),char(98),char(108),char(101),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(68),char(121),char(110),char(97),char(109),char(105),char(99),char(115),char(87),char(111),char(114),char(108),char(100),
-char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),
-char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),
-char(100),char(121),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(115),char(116),
-char(114),char(97),char(105),char(110),char(116),char(73),char(110),char(102),char(111),char(49),char(0),char(98),char(116),char(84),char(121),char(112),char(101),char(100),char(67),char(111),
-char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),
-char(84),char(121),char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(82),char(105),char(103),char(105),char(100),char(66),char(111),char(100),char(121),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(84),char(121),
-char(112),char(101),char(100),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),
-char(97),char(116),char(97),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),
-char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(80),
-char(111),char(105),char(110),char(116),char(50),char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
-char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(80),char(111),char(105),char(110),char(116),char(50),
-char(80),char(111),char(105),char(110),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),
-char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
-char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(72),char(105),char(110),char(103),
-char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(72),char(105),char(110),char(103),char(101),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),
-char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),
-char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
-char(97),char(0),char(98),char(116),char(67),char(111),char(110),char(101),char(84),char(119),char(105),char(115),char(116),char(67),char(111),char(110),char(115),char(116),char(114),char(97),
-char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),
-char(102),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),
-char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),
-char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),
-char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),
-char(114),char(105),char(110),char(103),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),
-char(68),char(97),char(116),char(97),char(50),char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),
-char(112),char(114),char(105),char(110),char(103),char(50),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(71),char(101),char(110),char(101),char(114),char(105),char(99),char(54),char(68),char(111),char(102),char(83),char(112),char(114),char(105),char(110),char(103),
-char(50),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),
-char(97),char(50),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),
-char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(108),char(105),char(100),char(101),char(114),char(67),char(111),char(110),char(115),char(116),char(114),
-char(97),char(105),char(110),char(116),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(71),char(101),char(97),
-char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(71),char(101),char(97),char(114),char(67),char(111),char(110),char(115),char(116),char(114),char(97),char(105),char(110),char(116),char(68),char(111),char(117),
-char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(77),char(97),char(116),char(101),
-char(114),char(105),char(97),char(108),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(78),char(111),char(100),
-char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(68),char(97),
-char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(70),char(97),char(99),char(101),char(68),char(97),char(116),char(97),char(0),
-char(83),char(111),char(102),char(116),char(66),char(111),char(100),char(121),char(84),char(101),char(116),char(114),char(97),char(68),char(97),char(116),char(97),char(0),char(83),char(111),
-char(102),char(116),char(82),char(105),char(103),char(105),char(100),char(65),char(110),char(99),char(104),char(111),char(114),char(68),char(97),char(116),char(97),char(0),char(83),char(111),
-char(102),char(116),char(66),char(111),char(100),char(121),char(67),char(111),char(110),char(102),char(105),char(103),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),
-char(116),char(66),char(111),char(100),char(121),char(80),char(111),char(115),char(101),char(68),char(97),char(116),char(97),char(0),char(83),char(111),char(102),char(116),char(66),char(111),
-char(100),char(121),char(67),char(108),char(117),char(115),char(116),char(101),char(114),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(111),char(102),char(116),
-char(66),char(111),char(100),char(121),char(74),char(111),char(105),char(110),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(83),char(111),char(102),char(116),
-char(66),char(111),char(100),char(121),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),
-char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),
-char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(70),char(108),char(111),char(97),char(116),
-char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(68),char(111),char(117),char(98),
-char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(70),char(108),
-char(111),char(97),char(116),char(68),char(97),char(116),char(97),char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),
-char(105),char(110),char(107),char(67),char(111),char(108),char(108),char(105),char(100),char(101),char(114),char(70),char(108),char(111),char(97),char(116),char(68),char(97),char(116),char(97),
-char(0),char(98),char(116),char(77),char(117),char(108),char(116),char(105),char(66),char(111),char(100),char(121),char(76),char(105),char(110),char(107),char(67),char(111),char(108),char(108),
-char(105),char(100),char(101),char(114),char(68),char(111),char(117),char(98),char(108),char(101),char(68),char(97),char(116),char(97),char(0),char(0),char(84),char(76),char(69),char(78),
-char(1),char(0),char(1),char(0),char(2),char(0),char(2),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(0),char(0),
-char(16),char(0),char(48),char(0),char(16),char(0),char(16),char(0),char(32),char(0),char(16),char(0),char(32),char(0),char(48),char(0),char(96),char(0),char(64),char(0),
-char(-128),char(0),char(20),char(0),char(48),char(0),char(80),char(0),char(16),char(0),char(96),char(0),char(-112),char(0),char(16),char(0),char(56),char(0),char(56),char(0),
-char(20),char(0),char(72),char(0),char(4),char(0),char(4),char(0),char(8),char(0),char(4),char(0),char(56),char(0),char(32),char(0),char(80),char(0),char(72),char(0),
-char(96),char(0),char(80),char(0),char(32),char(0),char(64),char(0),char(64),char(0),char(64),char(0),char(16),char(0),char(24),char(6),char(-8),char(1),char(80),char(3),
-char(32),char(1),char(72),char(0),char(80),char(0),char(-96),char(0),char(88),char(0),char(-64),char(0),char(104),char(0),char(8),char(2),char(-56),char(3),char(8),char(0),
-char(64),char(0),char(64),char(0),char(0),char(0),char(80),char(0),char(96),char(0),char(-112),char(0),char(-128),char(0),char(104),char(1),char(-24),char(0),char(-104),char(1),
-char(-120),char(1),char(-32),char(0),char(8),char(1),char(-40),char(1),char(104),char(1),char(-128),char(2),char(-112),char(2),char(-64),char(4),char(-40),char(0),char(120),char(1),
-char(104),char(0),char(-104),char(0),char(16),char(0),char(104),char(0),char(24),char(0),char(40),char(0),char(104),char(0),char(96),char(0),char(104),char(0),char(-56),char(0),
-char(104),char(1),char(112),char(0),char(-16),char(1),char(-128),char(3),char(-40),char(1),char(-56),char(0),char(112),char(0),char(48),char(1),char(8),char(2),char(0),char(0),
-char(83),char(84),char(82),char(67),char(88),char(0),char(0),char(0),char(10),char(0),char(3),char(0),char(4),char(0),char(0),char(0),char(4),char(0),char(1),char(0),
-char(9),char(0),char(2),char(0),char(11),char(0),char(3),char(0),char(10),char(0),char(3),char(0),char(10),char(0),char(4),char(0),char(10),char(0),char(5),char(0),
-char(12),char(0),char(2),char(0),char(9),char(0),char(6),char(0),char(9),char(0),char(7),char(0),char(13),char(0),char(1),char(0),char(7),char(0),char(8),char(0),
-char(14),char(0),char(1),char(0),char(8),char(0),char(8),char(0),char(15),char(0),char(1),char(0),char(7),char(0),char(8),char(0),char(16),char(0),char(1),char(0),
-char(8),char(0),char(8),char(0),char(17),char(0),char(1),char(0),char(13),char(0),char(9),char(0),char(18),char(0),char(1),char(0),char(14),char(0),char(9),char(0),
-char(19),char(0),char(2),char(0),char(17),char(0),char(10),char(0),char(13),char(0),char(11),char(0),char(20),char(0),char(2),char(0),char(18),char(0),char(10),char(0),
-char(14),char(0),char(11),char(0),char(21),char(0),char(4),char(0),char(4),char(0),char(12),char(0),char(4),char(0),char(13),char(0),char(2),char(0),char(14),char(0),
-char(2),char(0),char(15),char(0),char(22),char(0),char(6),char(0),char(13),char(0),char(16),char(0),char(13),char(0),char(17),char(0),char(4),char(0),char(18),char(0),
-char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),char(23),char(0),char(6),char(0),char(14),char(0),char(16),char(0),
-char(14),char(0),char(17),char(0),char(4),char(0),char(18),char(0),char(4),char(0),char(19),char(0),char(4),char(0),char(20),char(0),char(0),char(0),char(21),char(0),
-char(24),char(0),char(3),char(0),char(2),char(0),char(14),char(0),char(2),char(0),char(15),char(0),char(4),char(0),char(22),char(0),char(25),char(0),char(12),char(0),
-char(13),char(0),char(23),char(0),char(13),char(0),char(24),char(0),char(13),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),
-char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),char(22),char(0),char(30),char(0),char(24),char(0),char(31),char(0),char(21),char(0),char(32),char(0),
-char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(26),char(0),char(12),char(0),char(14),char(0),char(23),char(0),char(14),char(0),char(24),char(0),
-char(14),char(0),char(25),char(0),char(4),char(0),char(26),char(0),char(4),char(0),char(27),char(0),char(4),char(0),char(28),char(0),char(4),char(0),char(29),char(0),
-char(23),char(0),char(30),char(0),char(24),char(0),char(31),char(0),char(4),char(0),char(33),char(0),char(4),char(0),char(34),char(0),char(21),char(0),char(32),char(0),
-char(27),char(0),char(3),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(36),char(0),char(0),char(0),char(37),char(0),char(28),char(0),char(5),char(0),
-char(27),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(40),char(0),char(7),char(0),char(41),char(0),char(0),char(0),char(21),char(0),
-char(29),char(0),char(5),char(0),char(27),char(0),char(38),char(0),char(13),char(0),char(39),char(0),char(13),char(0),char(42),char(0),char(7),char(0),char(43),char(0),
-char(4),char(0),char(44),char(0),char(30),char(0),char(2),char(0),char(13),char(0),char(45),char(0),char(7),char(0),char(46),char(0),char(31),char(0),char(4),char(0),
-char(29),char(0),char(47),char(0),char(30),char(0),char(48),char(0),char(4),char(0),char(49),char(0),char(0),char(0),char(37),char(0),char(32),char(0),char(1),char(0),
-char(4),char(0),char(50),char(0),char(33),char(0),char(2),char(0),char(2),char(0),char(50),char(0),char(0),char(0),char(51),char(0),char(34),char(0),char(2),char(0),
-char(2),char(0),char(52),char(0),char(0),char(0),char(51),char(0),char(35),char(0),char(2),char(0),char(0),char(0),char(52),char(0),char(0),char(0),char(53),char(0),
-char(36),char(0),char(8),char(0),char(13),char(0),char(54),char(0),char(14),char(0),char(55),char(0),char(32),char(0),char(56),char(0),char(34),char(0),char(57),char(0),
-char(35),char(0),char(58),char(0),char(33),char(0),char(59),char(0),char(4),char(0),char(60),char(0),char(4),char(0),char(61),char(0),char(37),char(0),char(4),char(0),
-char(36),char(0),char(62),char(0),char(13),char(0),char(63),char(0),char(4),char(0),char(64),char(0),char(0),char(0),char(37),char(0),char(38),char(0),char(7),char(0),
-char(27),char(0),char(38),char(0),char(37),char(0),char(65),char(0),char(25),char(0),char(66),char(0),char(26),char(0),char(67),char(0),char(39),char(0),char(68),char(0),
-char(7),char(0),char(43),char(0),char(0),char(0),char(69),char(0),char(40),char(0),char(2),char(0),char(38),char(0),char(70),char(0),char(13),char(0),char(39),char(0),
-char(41),char(0),char(4),char(0),char(19),char(0),char(71),char(0),char(27),char(0),char(72),char(0),char(4),char(0),char(73),char(0),char(7),char(0),char(74),char(0),
-char(42),char(0),char(4),char(0),char(27),char(0),char(38),char(0),char(41),char(0),char(75),char(0),char(4),char(0),char(76),char(0),char(7),char(0),char(43),char(0),
-char(43),char(0),char(3),char(0),char(29),char(0),char(47),char(0),char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(44),char(0),char(3),char(0),
-char(29),char(0),char(47),char(0),char(4),char(0),char(78),char(0),char(0),char(0),char(37),char(0),char(45),char(0),char(3),char(0),char(29),char(0),char(47),char(0),
-char(4),char(0),char(77),char(0),char(0),char(0),char(37),char(0),char(46),char(0),char(4),char(0),char(4),char(0),char(79),char(0),char(7),char(0),char(80),char(0),
-char(7),char(0),char(81),char(0),char(7),char(0),char(82),char(0),char(39),char(0),char(14),char(0),char(4),char(0),char(83),char(0),char(4),char(0),char(84),char(0),
-char(46),char(0),char(85),char(0),char(4),char(0),char(86),char(0),char(7),char(0),char(87),char(0),char(7),char(0),char(88),char(0),char(7),char(0),char(89),char(0),
-char(7),char(0),char(90),char(0),char(7),char(0),char(91),char(0),char(4),char(0),char(92),char(0),char(4),char(0),char(93),char(0),char(4),char(0),char(94),char(0),
-char(4),char(0),char(95),char(0),char(0),char(0),char(37),char(0),char(47),char(0),char(39),char(0),char(14),char(0),char(96),char(0),char(14),char(0),char(97),char(0),
-char(14),char(0),char(98),char(0),char(14),char(0),char(99),char(0),char(14),char(0),char(100),char(0),char(14),char(0),char(101),char(0),char(14),char(0),char(102),char(0),
-char(8),char(0),char(103),char(0),char(8),char(0),char(104),char(0),char(8),char(0),char(105),char(0),char(8),char(0),char(106),char(0),char(8),char(0),char(107),char(0),
-char(8),char(0),char(108),char(0),char(8),char(0),char(109),char(0),char(4),char(0),char(110),char(0),char(4),char(0),char(111),char(0),char(4),char(0),char(112),char(0),
-char(4),char(0),char(113),char(0),char(4),char(0),char(114),char(0),char(8),char(0),char(115),char(0),char(8),char(0),char(116),char(0),char(8),char(0),char(117),char(0),
-char(8),char(0),char(118),char(0),char(8),char(0),char(119),char(0),char(8),char(0),char(120),char(0),char(8),char(0),char(121),char(0),char(8),char(0),char(122),char(0),
-char(8),char(0),char(123),char(0),char(4),char(0),char(124),char(0),char(4),char(0),char(125),char(0),char(4),char(0),char(126),char(0),char(4),char(0),char(127),char(0),
-char(4),char(0),char(-128),char(0),char(4),char(0),char(-127),char(0),char(8),char(0),char(-126),char(0),char(8),char(0),char(-125),char(0),char(4),char(0),char(44),char(0),
-char(48),char(0),char(-124),char(0),char(48),char(0),char(-123),char(0),char(49),char(0),char(39),char(0),char(13),char(0),char(96),char(0),char(13),char(0),char(97),char(0),
-char(13),char(0),char(98),char(0),char(13),char(0),char(99),char(0),char(13),char(0),char(100),char(0),char(13),char(0),char(101),char(0),char(13),char(0),char(102),char(0),
-char(7),char(0),char(103),char(0),char(7),char(0),char(104),char(0),char(7),char(0),char(105),char(0),char(7),char(0),char(106),char(0),char(7),char(0),char(107),char(0),
-char(7),char(0),char(108),char(0),char(7),char(0),char(109),char(0),char(4),char(0),char(110),char(0),char(4),char(0),char(111),char(0),char(4),char(0),char(112),char(0),
-char(4),char(0),char(113),char(0),char(4),char(0),char(114),char(0),char(7),char(0),char(115),char(0),char(7),char(0),char(116),char(0),char(7),char(0),char(117),char(0),
-char(7),char(0),char(118),char(0),char(7),char(0),char(119),char(0),char(7),char(0),char(120),char(0),char(7),char(0),char(121),char(0),char(7),char(0),char(122),char(0),
-char(7),char(0),char(123),char(0),char(4),char(0),char(124),char(0),char(4),char(0),char(125),char(0),char(4),char(0),char(126),char(0),char(4),char(0),char(127),char(0),
-char(4),char(0),char(-128),char(0),char(4),char(0),char(-127),char(0),char(7),char(0),char(-126),char(0),char(7),char(0),char(-125),char(0),char(4),char(0),char(44),char(0),
-char(50),char(0),char(-124),char(0),char(50),char(0),char(-123),char(0),char(51),char(0),char(5),char(0),char(27),char(0),char(38),char(0),char(37),char(0),char(65),char(0),
-char(13),char(0),char(39),char(0),char(7),char(0),char(43),char(0),char(4),char(0),char(-122),char(0),char(52),char(0),char(5),char(0),char(29),char(0),char(47),char(0),
-char(13),char(0),char(-121),char(0),char(14),char(0),char(-120),char(0),char(4),char(0),char(-119),char(0),char(0),char(0),char(-118),char(0),char(48),char(0),char(29),char(0),
-char(9),char(0),char(-117),char(0),char(9),char(0),char(-116),char(0),char(27),char(0),char(-115),char(0),char(0),char(0),char(35),char(0),char(20),char(0),char(-114),char(0),
-char(20),char(0),char(-113),char(0),char(14),char(0),char(-112),char(0),char(14),char(0),char(-111),char(0),char(14),char(0),char(-110),char(0),char(8),char(0),char(-125),char(0),
-char(8),char(0),char(-109),char(0),char(8),char(0),char(-108),char(0),char(8),char(0),char(-107),char(0),char(8),char(0),char(-106),char(0),char(8),char(0),char(-105),char(0),
-char(8),char(0),char(-104),char(0),char(8),char(0),char(-103),char(0),char(8),char(0),char(-102),char(0),char(8),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),
-char(4),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0),char(4),char(0),char(-97),char(0),char(4),char(0),char(-96),char(0),char(4),char(0),char(-95),char(0),
-char(4),char(0),char(-94),char(0),char(4),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(50),char(0),char(29),char(0),
-char(9),char(0),char(-117),char(0),char(9),char(0),char(-116),char(0),char(27),char(0),char(-115),char(0),char(0),char(0),char(35),char(0),char(19),char(0),char(-114),char(0),
-char(19),char(0),char(-113),char(0),char(13),char(0),char(-112),char(0),char(13),char(0),char(-111),char(0),char(13),char(0),char(-110),char(0),char(7),char(0),char(-125),char(0),
-char(7),char(0),char(-109),char(0),char(7),char(0),char(-108),char(0),char(7),char(0),char(-107),char(0),char(7),char(0),char(-106),char(0),char(7),char(0),char(-105),char(0),
-char(7),char(0),char(-104),char(0),char(7),char(0),char(-103),char(0),char(7),char(0),char(-102),char(0),char(7),char(0),char(-101),char(0),char(4),char(0),char(-100),char(0),
-char(4),char(0),char(-99),char(0),char(4),char(0),char(-98),char(0),char(4),char(0),char(-97),char(0),char(4),char(0),char(-96),char(0),char(4),char(0),char(-95),char(0),
-char(4),char(0),char(-94),char(0),char(4),char(0),char(-93),char(0),char(4),char(0),char(-92),char(0),char(4),char(0),char(-91),char(0),char(53),char(0),char(23),char(0),
-char(8),char(0),char(-90),char(0),char(8),char(0),char(-89),char(0),char(8),char(0),char(-108),char(0),char(8),char(0),char(-88),char(0),char(8),char(0),char(-104),char(0),
-char(8),char(0),char(-87),char(0),char(8),char(0),char(-86),char(0),char(8),char(0),char(-85),char(0),char(8),char(0),char(-84),char(0),char(8),char(0),char(-83),char(0),
-char(8),char(0),char(-82),char(0),char(8),char(0),char(-81),char(0),char(8),char(0),char(-80),char(0),char(8),char(0),char(-79),char(0),char(8),char(0),char(-78),char(0),
-char(8),char(0),char(-77),char(0),char(8),char(0),char(-76),char(0),char(4),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),
-char(4),char(0),char(-72),char(0),char(4),char(0),char(-71),char(0),char(0),char(0),char(37),char(0),char(54),char(0),char(22),char(0),char(7),char(0),char(-90),char(0),
-char(7),char(0),char(-89),char(0),char(7),char(0),char(-108),char(0),char(7),char(0),char(-88),char(0),char(7),char(0),char(-104),char(0),char(7),char(0),char(-87),char(0),
-char(7),char(0),char(-86),char(0),char(7),char(0),char(-85),char(0),char(7),char(0),char(-84),char(0),char(7),char(0),char(-83),char(0),char(7),char(0),char(-82),char(0),
-char(7),char(0),char(-81),char(0),char(7),char(0),char(-80),char(0),char(7),char(0),char(-79),char(0),char(7),char(0),char(-78),char(0),char(7),char(0),char(-77),char(0),
-char(7),char(0),char(-76),char(0),char(4),char(0),char(-75),char(0),char(4),char(0),char(-74),char(0),char(4),char(0),char(-73),char(0),char(4),char(0),char(-72),char(0),
-char(4),char(0),char(-71),char(0),char(55),char(0),char(2),char(0),char(53),char(0),char(-70),char(0),char(14),char(0),char(-69),char(0),char(56),char(0),char(2),char(0),
-char(54),char(0),char(-70),char(0),char(13),char(0),char(-69),char(0),char(57),char(0),char(21),char(0),char(50),char(0),char(-68),char(0),char(17),char(0),char(-67),char(0),
-char(13),char(0),char(-66),char(0),char(13),char(0),char(-65),char(0),char(13),char(0),char(-64),char(0),char(13),char(0),char(-63),char(0),char(13),char(0),char(-69),char(0),
-char(13),char(0),char(-62),char(0),char(13),char(0),char(-61),char(0),char(13),char(0),char(-60),char(0),char(13),char(0),char(-59),char(0),char(7),char(0),char(-58),char(0),
-char(7),char(0),char(-57),char(0),char(7),char(0),char(-56),char(0),char(7),char(0),char(-55),char(0),char(7),char(0),char(-54),char(0),char(7),char(0),char(-53),char(0),
-char(7),char(0),char(-52),char(0),char(7),char(0),char(-51),char(0),char(7),char(0),char(-50),char(0),char(4),char(0),char(-49),char(0),char(58),char(0),char(22),char(0),
-char(48),char(0),char(-68),char(0),char(18),char(0),char(-67),char(0),char(14),char(0),char(-66),char(0),char(14),char(0),char(-65),char(0),char(14),char(0),char(-64),char(0),
-char(14),char(0),char(-63),char(0),char(14),char(0),char(-69),char(0),char(14),char(0),char(-62),char(0),char(14),char(0),char(-61),char(0),char(14),char(0),char(-60),char(0),
-char(14),char(0),char(-59),char(0),char(8),char(0),char(-58),char(0),char(8),char(0),char(-57),char(0),char(8),char(0),char(-56),char(0),char(8),char(0),char(-55),char(0),
-char(8),char(0),char(-54),char(0),char(8),char(0),char(-53),char(0),char(8),char(0),char(-52),char(0),char(8),char(0),char(-51),char(0),char(8),char(0),char(-50),char(0),
-char(4),char(0),char(-49),char(0),char(0),char(0),char(37),char(0),char(59),char(0),char(2),char(0),char(4),char(0),char(-48),char(0),char(4),char(0),char(-47),char(0),
-char(60),char(0),char(13),char(0),char(57),char(0),char(-46),char(0),char(57),char(0),char(-45),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-127),char(0),
-char(4),char(0),char(-44),char(0),char(4),char(0),char(-43),char(0),char(4),char(0),char(-42),char(0),char(7),char(0),char(-41),char(0),char(7),char(0),char(-40),char(0),
-char(4),char(0),char(-39),char(0),char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0),char(4),char(0),char(-36),char(0),char(61),char(0),char(13),char(0),
-char(62),char(0),char(-46),char(0),char(62),char(0),char(-45),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-127),char(0),char(4),char(0),char(-44),char(0),
-char(4),char(0),char(-43),char(0),char(4),char(0),char(-42),char(0),char(7),char(0),char(-41),char(0),char(7),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0),
-char(4),char(0),char(-38),char(0),char(7),char(0),char(-37),char(0),char(4),char(0),char(-36),char(0),char(63),char(0),char(14),char(0),char(58),char(0),char(-46),char(0),
-char(58),char(0),char(-45),char(0),char(0),char(0),char(35),char(0),char(4),char(0),char(-127),char(0),char(4),char(0),char(-44),char(0),char(4),char(0),char(-43),char(0),
-char(4),char(0),char(-42),char(0),char(8),char(0),char(-41),char(0),char(8),char(0),char(-40),char(0),char(4),char(0),char(-39),char(0),char(4),char(0),char(-38),char(0),
-char(8),char(0),char(-37),char(0),char(4),char(0),char(-36),char(0),char(0),char(0),char(-35),char(0),char(64),char(0),char(3),char(0),char(61),char(0),char(-34),char(0),
-char(13),char(0),char(-33),char(0),char(13),char(0),char(-32),char(0),char(65),char(0),char(3),char(0),char(63),char(0),char(-34),char(0),char(14),char(0),char(-33),char(0),
-char(14),char(0),char(-32),char(0),char(66),char(0),char(3),char(0),char(61),char(0),char(-34),char(0),char(14),char(0),char(-33),char(0),char(14),char(0),char(-32),char(0),
-char(67),char(0),char(13),char(0),char(61),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(4),char(0),char(-29),char(0),
-char(4),char(0),char(-28),char(0),char(4),char(0),char(-27),char(0),char(7),char(0),char(-26),char(0),char(7),char(0),char(-25),char(0),char(7),char(0),char(-24),char(0),
-char(7),char(0),char(-23),char(0),char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(68),char(0),char(13),char(0),
-char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),char(4),char(0),char(-29),char(0),char(4),char(0),char(-28),char(0),
-char(4),char(0),char(-27),char(0),char(7),char(0),char(-26),char(0),char(7),char(0),char(-25),char(0),char(7),char(0),char(-24),char(0),char(7),char(0),char(-23),char(0),
-char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(69),char(0),char(14),char(0),char(63),char(0),char(-34),char(0),
-char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(4),char(0),char(-29),char(0),char(4),char(0),char(-28),char(0),char(4),char(0),char(-27),char(0),
-char(8),char(0),char(-26),char(0),char(8),char(0),char(-25),char(0),char(8),char(0),char(-24),char(0),char(8),char(0),char(-23),char(0),char(8),char(0),char(-22),char(0),
-char(8),char(0),char(-21),char(0),char(8),char(0),char(-20),char(0),char(0),char(0),char(-19),char(0),char(70),char(0),char(10),char(0),char(63),char(0),char(-34),char(0),
-char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(8),char(0),char(-18),char(0),char(8),char(0),char(-17),char(0),char(8),char(0),char(-16),char(0),
-char(8),char(0),char(-22),char(0),char(8),char(0),char(-21),char(0),char(8),char(0),char(-20),char(0),char(8),char(0),char(-89),char(0),char(71),char(0),char(11),char(0),
-char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),char(7),char(0),char(-18),char(0),char(7),char(0),char(-17),char(0),
-char(7),char(0),char(-16),char(0),char(7),char(0),char(-22),char(0),char(7),char(0),char(-21),char(0),char(7),char(0),char(-20),char(0),char(7),char(0),char(-89),char(0),
-char(0),char(0),char(21),char(0),char(72),char(0),char(9),char(0),char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),
-char(13),char(0),char(-15),char(0),char(13),char(0),char(-14),char(0),char(13),char(0),char(-13),char(0),char(13),char(0),char(-12),char(0),char(4),char(0),char(-11),char(0),
-char(4),char(0),char(-10),char(0),char(73),char(0),char(9),char(0),char(63),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),
-char(14),char(0),char(-15),char(0),char(14),char(0),char(-14),char(0),char(14),char(0),char(-13),char(0),char(14),char(0),char(-12),char(0),char(4),char(0),char(-11),char(0),
-char(4),char(0),char(-10),char(0),char(74),char(0),char(5),char(0),char(72),char(0),char(-9),char(0),char(4),char(0),char(-8),char(0),char(7),char(0),char(-7),char(0),
-char(7),char(0),char(-6),char(0),char(7),char(0),char(-5),char(0),char(75),char(0),char(5),char(0),char(73),char(0),char(-9),char(0),char(4),char(0),char(-8),char(0),
-char(8),char(0),char(-7),char(0),char(8),char(0),char(-6),char(0),char(8),char(0),char(-5),char(0),char(76),char(0),char(41),char(0),char(61),char(0),char(-34),char(0),
-char(19),char(0),char(-31),char(0),char(19),char(0),char(-30),char(0),char(13),char(0),char(-15),char(0),char(13),char(0),char(-14),char(0),char(13),char(0),char(-4),char(0),
-char(13),char(0),char(-3),char(0),char(13),char(0),char(-2),char(0),char(13),char(0),char(-1),char(0),char(13),char(0),char(0),char(1),char(13),char(0),char(1),char(1),
-char(13),char(0),char(2),char(1),char(13),char(0),char(3),char(1),char(13),char(0),char(4),char(1),char(13),char(0),char(5),char(1),char(13),char(0),char(6),char(1),
-char(0),char(0),char(7),char(1),char(0),char(0),char(8),char(1),char(0),char(0),char(9),char(1),char(0),char(0),char(10),char(1),char(0),char(0),char(11),char(1),
-char(0),char(0),char(-19),char(0),char(13),char(0),char(-13),char(0),char(13),char(0),char(-12),char(0),char(13),char(0),char(12),char(1),char(13),char(0),char(13),char(1),
-char(13),char(0),char(14),char(1),char(13),char(0),char(15),char(1),char(13),char(0),char(16),char(1),char(13),char(0),char(17),char(1),char(13),char(0),char(18),char(1),
-char(13),char(0),char(19),char(1),char(13),char(0),char(20),char(1),char(13),char(0),char(21),char(1),char(13),char(0),char(22),char(1),char(0),char(0),char(23),char(1),
-char(0),char(0),char(24),char(1),char(0),char(0),char(25),char(1),char(0),char(0),char(26),char(1),char(0),char(0),char(27),char(1),char(4),char(0),char(28),char(1),
-char(77),char(0),char(41),char(0),char(63),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),char(20),char(0),char(-30),char(0),char(14),char(0),char(-15),char(0),
-char(14),char(0),char(-14),char(0),char(14),char(0),char(-4),char(0),char(14),char(0),char(-3),char(0),char(14),char(0),char(-2),char(0),char(14),char(0),char(-1),char(0),
-char(14),char(0),char(0),char(1),char(14),char(0),char(1),char(1),char(14),char(0),char(2),char(1),char(14),char(0),char(3),char(1),char(14),char(0),char(4),char(1),
-char(14),char(0),char(5),char(1),char(14),char(0),char(6),char(1),char(0),char(0),char(7),char(1),char(0),char(0),char(8),char(1),char(0),char(0),char(9),char(1),
-char(0),char(0),char(10),char(1),char(0),char(0),char(11),char(1),char(0),char(0),char(-19),char(0),char(14),char(0),char(-13),char(0),char(14),char(0),char(-12),char(0),
-char(14),char(0),char(12),char(1),char(14),char(0),char(13),char(1),char(14),char(0),char(14),char(1),char(14),char(0),char(15),char(1),char(14),char(0),char(16),char(1),
-char(14),char(0),char(17),char(1),char(14),char(0),char(18),char(1),char(14),char(0),char(19),char(1),char(14),char(0),char(20),char(1),char(14),char(0),char(21),char(1),
-char(14),char(0),char(22),char(1),char(0),char(0),char(23),char(1),char(0),char(0),char(24),char(1),char(0),char(0),char(25),char(1),char(0),char(0),char(26),char(1),
-char(0),char(0),char(27),char(1),char(4),char(0),char(28),char(1),char(78),char(0),char(9),char(0),char(61),char(0),char(-34),char(0),char(19),char(0),char(-31),char(0),
-char(19),char(0),char(-30),char(0),char(7),char(0),char(-15),char(0),char(7),char(0),char(-14),char(0),char(7),char(0),char(-13),char(0),char(7),char(0),char(-12),char(0),
-char(4),char(0),char(-11),char(0),char(4),char(0),char(-10),char(0),char(79),char(0),char(9),char(0),char(63),char(0),char(-34),char(0),char(20),char(0),char(-31),char(0),
-char(20),char(0),char(-30),char(0),char(8),char(0),char(-15),char(0),char(8),char(0),char(-14),char(0),char(8),char(0),char(-13),char(0),char(8),char(0),char(-12),char(0),
-char(4),char(0),char(-11),char(0),char(4),char(0),char(-10),char(0),char(80),char(0),char(5),char(0),char(60),char(0),char(-34),char(0),char(13),char(0),char(29),char(1),
-char(13),char(0),char(30),char(1),char(7),char(0),char(31),char(1),char(0),char(0),char(37),char(0),char(81),char(0),char(4),char(0),char(63),char(0),char(-34),char(0),
-char(14),char(0),char(29),char(1),char(14),char(0),char(30),char(1),char(8),char(0),char(31),char(1),char(82),char(0),char(4),char(0),char(7),char(0),char(32),char(1),
-char(7),char(0),char(33),char(1),char(7),char(0),char(34),char(1),char(4),char(0),char(79),char(0),char(83),char(0),char(10),char(0),char(82),char(0),char(35),char(1),
-char(13),char(0),char(36),char(1),char(13),char(0),char(37),char(1),char(13),char(0),char(38),char(1),char(13),char(0),char(39),char(1),char(13),char(0),char(40),char(1),
-char(7),char(0),char(-58),char(0),char(7),char(0),char(41),char(1),char(4),char(0),char(42),char(1),char(4),char(0),char(53),char(0),char(84),char(0),char(4),char(0),
-char(82),char(0),char(35),char(1),char(4),char(0),char(43),char(1),char(7),char(0),char(44),char(1),char(4),char(0),char(45),char(1),char(85),char(0),char(4),char(0),
-char(13),char(0),char(40),char(1),char(82),char(0),char(35),char(1),char(4),char(0),char(46),char(1),char(7),char(0),char(47),char(1),char(86),char(0),char(7),char(0),
-char(13),char(0),char(48),char(1),char(82),char(0),char(35),char(1),char(4),char(0),char(49),char(1),char(7),char(0),char(50),char(1),char(7),char(0),char(51),char(1),
-char(7),char(0),char(52),char(1),char(4),char(0),char(53),char(0),char(87),char(0),char(6),char(0),char(17),char(0),char(53),char(1),char(13),char(0),char(51),char(1),
-char(13),char(0),char(54),char(1),char(62),char(0),char(55),char(1),char(4),char(0),char(56),char(1),char(7),char(0),char(52),char(1),char(88),char(0),char(26),char(0),
-char(4),char(0),char(57),char(1),char(7),char(0),char(58),char(1),char(7),char(0),char(-89),char(0),char(7),char(0),char(59),char(1),char(7),char(0),char(60),char(1),
-char(7),char(0),char(61),char(1),char(7),char(0),char(62),char(1),char(7),char(0),char(63),char(1),char(7),char(0),char(64),char(1),char(7),char(0),char(65),char(1),
-char(7),char(0),char(66),char(1),char(7),char(0),char(67),char(1),char(7),char(0),char(68),char(1),char(7),char(0),char(69),char(1),char(7),char(0),char(70),char(1),
-char(7),char(0),char(71),char(1),char(7),char(0),char(72),char(1),char(7),char(0),char(73),char(1),char(7),char(0),char(74),char(1),char(7),char(0),char(75),char(1),
-char(7),char(0),char(76),char(1),char(4),char(0),char(77),char(1),char(4),char(0),char(78),char(1),char(4),char(0),char(79),char(1),char(4),char(0),char(80),char(1),
-char(4),char(0),char(-99),char(0),char(89),char(0),char(12),char(0),char(17),char(0),char(81),char(1),char(17),char(0),char(82),char(1),char(17),char(0),char(83),char(1),
-char(13),char(0),char(84),char(1),char(13),char(0),char(85),char(1),char(7),char(0),char(86),char(1),char(4),char(0),char(87),char(1),char(4),char(0),char(88),char(1),
-char(4),char(0),char(89),char(1),char(4),char(0),char(90),char(1),char(7),char(0),char(50),char(1),char(4),char(0),char(53),char(0),char(90),char(0),char(27),char(0),
-char(19),char(0),char(91),char(1),char(17),char(0),char(92),char(1),char(17),char(0),char(93),char(1),char(13),char(0),char(84),char(1),char(13),char(0),char(94),char(1),
-char(13),char(0),char(95),char(1),char(13),char(0),char(96),char(1),char(13),char(0),char(97),char(1),char(13),char(0),char(98),char(1),char(4),char(0),char(99),char(1),
-char(7),char(0),char(100),char(1),char(4),char(0),char(101),char(1),char(4),char(0),char(102),char(1),char(4),char(0),char(103),char(1),char(7),char(0),char(104),char(1),
-char(7),char(0),char(105),char(1),char(4),char(0),char(106),char(1),char(4),char(0),char(107),char(1),char(7),char(0),char(108),char(1),char(7),char(0),char(109),char(1),
-char(7),char(0),char(110),char(1),char(7),char(0),char(111),char(1),char(7),char(0),char(112),char(1),char(7),char(0),char(113),char(1),char(4),char(0),char(114),char(1),
-char(4),char(0),char(115),char(1),char(4),char(0),char(116),char(1),char(91),char(0),char(12),char(0),char(9),char(0),char(117),char(1),char(9),char(0),char(118),char(1),
-char(13),char(0),char(119),char(1),char(7),char(0),char(120),char(1),char(7),char(0),char(-85),char(0),char(7),char(0),char(121),char(1),char(4),char(0),char(122),char(1),
-char(13),char(0),char(123),char(1),char(4),char(0),char(124),char(1),char(4),char(0),char(125),char(1),char(4),char(0),char(126),char(1),char(4),char(0),char(53),char(0),
-char(92),char(0),char(19),char(0),char(50),char(0),char(-68),char(0),char(89),char(0),char(127),char(1),char(82),char(0),char(-128),char(1),char(83),char(0),char(-127),char(1),
-char(84),char(0),char(-126),char(1),char(85),char(0),char(-125),char(1),char(86),char(0),char(-124),char(1),char(87),char(0),char(-123),char(1),char(90),char(0),char(-122),char(1),
-char(91),char(0),char(-121),char(1),char(4),char(0),char(-120),char(1),char(4),char(0),char(102),char(1),char(4),char(0),char(-119),char(1),char(4),char(0),char(-118),char(1),
-char(4),char(0),char(-117),char(1),char(4),char(0),char(-116),char(1),char(4),char(0),char(-115),char(1),char(4),char(0),char(-114),char(1),char(88),char(0),char(-113),char(1),
-char(93),char(0),char(28),char(0),char(16),char(0),char(-112),char(1),char(14),char(0),char(-111),char(1),char(14),char(0),char(-110),char(1),char(14),char(0),char(-109),char(1),
-char(14),char(0),char(-108),char(1),char(14),char(0),char(-107),char(1),char(14),char(0),char(-106),char(1),char(14),char(0),char(-105),char(1),char(14),char(0),char(-104),char(1),
-char(14),char(0),char(-103),char(1),char(8),char(0),char(-102),char(1),char(4),char(0),char(-101),char(1),char(4),char(0),char(126),char(1),char(4),char(0),char(-100),char(1),
-char(4),char(0),char(-99),char(1),char(8),char(0),char(-98),char(1),char(8),char(0),char(-97),char(1),char(8),char(0),char(-96),char(1),char(8),char(0),char(-95),char(1),
-char(8),char(0),char(-94),char(1),char(8),char(0),char(-93),char(1),char(8),char(0),char(-92),char(1),char(8),char(0),char(-91),char(1),char(8),char(0),char(-90),char(1),
-char(0),char(0),char(-89),char(1),char(0),char(0),char(-88),char(1),char(48),char(0),char(-87),char(1),char(0),char(0),char(-86),char(1),char(94),char(0),char(28),char(0),
-char(15),char(0),char(-112),char(1),char(13),char(0),char(-111),char(1),char(13),char(0),char(-110),char(1),char(13),char(0),char(-109),char(1),char(13),char(0),char(-108),char(1),
-char(13),char(0),char(-107),char(1),char(13),char(0),char(-106),char(1),char(13),char(0),char(-105),char(1),char(13),char(0),char(-104),char(1),char(13),char(0),char(-103),char(1),
-char(4),char(0),char(-100),char(1),char(7),char(0),char(-102),char(1),char(4),char(0),char(-101),char(1),char(4),char(0),char(126),char(1),char(7),char(0),char(-98),char(1),
-char(7),char(0),char(-97),char(1),char(7),char(0),char(-96),char(1),char(4),char(0),char(-99),char(1),char(7),char(0),char(-95),char(1),char(7),char(0),char(-94),char(1),
-char(7),char(0),char(-93),char(1),char(7),char(0),char(-92),char(1),char(7),char(0),char(-91),char(1),char(7),char(0),char(-90),char(1),char(0),char(0),char(-89),char(1),
-char(0),char(0),char(-88),char(1),char(50),char(0),char(-87),char(1),char(0),char(0),char(-86),char(1),char(95),char(0),char(11),char(0),char(14),char(0),char(-85),char(1),
-char(16),char(0),char(-84),char(1),char(14),char(0),char(-83),char(1),char(14),char(0),char(-82),char(1),char(14),char(0),char(-81),char(1),char(8),char(0),char(-80),char(1),
-char(4),char(0),char(-119),char(1),char(0),char(0),char(37),char(0),char(0),char(0),char(-79),char(1),char(93),char(0),char(-126),char(1),char(48),char(0),char(-78),char(1),
-char(96),char(0),char(10),char(0),char(13),char(0),char(-85),char(1),char(15),char(0),char(-84),char(1),char(13),char(0),char(-83),char(1),char(13),char(0),char(-82),char(1),
-char(13),char(0),char(-81),char(1),char(7),char(0),char(-80),char(1),char(4),char(0),char(-119),char(1),char(0),char(0),char(-79),char(1),char(94),char(0),char(-126),char(1),
-char(50),char(0),char(-78),char(1),char(97),char(0),char(4),char(0),char(50),char(0),char(-77),char(1),char(96),char(0),char(-76),char(1),char(4),char(0),char(-75),char(1),
-char(0),char(0),char(37),char(0),char(98),char(0),char(4),char(0),char(48),char(0),char(-77),char(1),char(95),char(0),char(-76),char(1),char(4),char(0),char(-75),char(1),
-char(0),char(0),char(37),char(0),};
-int sBulletDNAlen64= sizeof(sBulletDNAstr64);
diff --git a/thirdparty/bullet/LinearMath/btSpatialAlgebra.h b/thirdparty/bullet/LinearMath/btSpatialAlgebra.h
deleted file mode 100644
index 6ad67a1081..0000000000
--- a/thirdparty/bullet/LinearMath/btSpatialAlgebra.h
+++ /dev/null
@@ -1,389 +0,0 @@
-/*
-Copyright (c) 2003-2015 Erwin Coumans, Jakub Stepien
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-///These spatial algebra classes are used for btMultiBody,
-///see BulletDynamics/Featherstone
-
-#ifndef BT_SPATIAL_ALGEBRA_H
-#define BT_SPATIAL_ALGEBRA_H
-
-#include "btMatrix3x3.h"
-
-struct btSpatialForceVector
-{
- btVector3 m_topVec, m_bottomVec;
- //
- btSpatialForceVector() { setZero(); }
- btSpatialForceVector(const btVector3 &angular, const btVector3 &linear) : m_topVec(linear), m_bottomVec(angular) {}
- btSpatialForceVector(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz)
- {
- setValue(ax, ay, az, lx, ly, lz);
- }
- //
- void setVector(const btVector3 &angular, const btVector3 &linear)
- {
- m_topVec = linear;
- m_bottomVec = angular;
- }
- void setValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz)
- {
- m_bottomVec.setValue(ax, ay, az);
- m_topVec.setValue(lx, ly, lz);
- }
- //
- void addVector(const btVector3 &angular, const btVector3 &linear)
- {
- m_topVec += linear;
- m_bottomVec += angular;
- }
- void addValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz)
- {
- m_bottomVec[0] += ax;
- m_bottomVec[1] += ay;
- m_bottomVec[2] += az;
- m_topVec[0] += lx;
- m_topVec[1] += ly;
- m_topVec[2] += lz;
- }
- //
- const btVector3 &getLinear() const { return m_topVec; }
- const btVector3 &getAngular() const { return m_bottomVec; }
- //
- void setLinear(const btVector3 &linear) { m_topVec = linear; }
- void setAngular(const btVector3 &angular) { m_bottomVec = angular; }
- //
- void addAngular(const btVector3 &angular) { m_bottomVec += angular; }
- void addLinear(const btVector3 &linear) { m_topVec += linear; }
- //
- void setZero()
- {
- m_topVec.setZero();
- m_bottomVec.setZero();
- }
- //
- btSpatialForceVector &operator+=(const btSpatialForceVector &vec)
- {
- m_topVec += vec.m_topVec;
- m_bottomVec += vec.m_bottomVec;
- return *this;
- }
- btSpatialForceVector &operator-=(const btSpatialForceVector &vec)
- {
- m_topVec -= vec.m_topVec;
- m_bottomVec -= vec.m_bottomVec;
- return *this;
- }
- btSpatialForceVector operator-(const btSpatialForceVector &vec) const { return btSpatialForceVector(m_bottomVec - vec.m_bottomVec, m_topVec - vec.m_topVec); }
- btSpatialForceVector operator+(const btSpatialForceVector &vec) const { return btSpatialForceVector(m_bottomVec + vec.m_bottomVec, m_topVec + vec.m_topVec); }
- btSpatialForceVector operator-() const { return btSpatialForceVector(-m_bottomVec, -m_topVec); }
- btSpatialForceVector operator*(const btScalar &s) const { return btSpatialForceVector(s * m_bottomVec, s * m_topVec); }
- //btSpatialForceVector & operator = (const btSpatialForceVector &vec) { m_topVec = vec.m_topVec; m_bottomVec = vec.m_bottomVec; return *this; }
-};
-
-struct btSpatialMotionVector
-{
- btVector3 m_topVec, m_bottomVec;
- //
- btSpatialMotionVector() { setZero(); }
- btSpatialMotionVector(const btVector3 &angular, const btVector3 &linear) : m_topVec(angular), m_bottomVec(linear) {}
- //
- void setVector(const btVector3 &angular, const btVector3 &linear)
- {
- m_topVec = angular;
- m_bottomVec = linear;
- }
- void setValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz)
- {
- m_topVec.setValue(ax, ay, az);
- m_bottomVec.setValue(lx, ly, lz);
- }
- //
- void addVector(const btVector3 &angular, const btVector3 &linear)
- {
- m_topVec += linear;
- m_bottomVec += angular;
- }
- void addValue(const btScalar &ax, const btScalar &ay, const btScalar &az, const btScalar &lx, const btScalar &ly, const btScalar &lz)
- {
- m_topVec[0] += ax;
- m_topVec[1] += ay;
- m_topVec[2] += az;
- m_bottomVec[0] += lx;
- m_bottomVec[1] += ly;
- m_bottomVec[2] += lz;
- }
- //
- const btVector3 &getAngular() const { return m_topVec; }
- const btVector3 &getLinear() const { return m_bottomVec; }
- //
- void setAngular(const btVector3 &angular) { m_topVec = angular; }
- void setLinear(const btVector3 &linear) { m_bottomVec = linear; }
- //
- void addAngular(const btVector3 &angular) { m_topVec += angular; }
- void addLinear(const btVector3 &linear) { m_bottomVec += linear; }
- //
- void setZero()
- {
- m_topVec.setZero();
- m_bottomVec.setZero();
- }
- //
- btScalar dot(const btSpatialForceVector &b) const
- {
- return m_bottomVec.dot(b.m_topVec) + m_topVec.dot(b.m_bottomVec);
- }
- //
- template <typename SpatialVectorType>
- void cross(const SpatialVectorType &b, SpatialVectorType &out) const
- {
- out.m_topVec = m_topVec.cross(b.m_topVec);
- out.m_bottomVec = m_bottomVec.cross(b.m_topVec) + m_topVec.cross(b.m_bottomVec);
- }
- template <typename SpatialVectorType>
- SpatialVectorType cross(const SpatialVectorType &b) const
- {
- SpatialVectorType out;
- out.m_topVec = m_topVec.cross(b.m_topVec);
- out.m_bottomVec = m_bottomVec.cross(b.m_topVec) + m_topVec.cross(b.m_bottomVec);
- return out;
- }
- //
- btSpatialMotionVector &operator+=(const btSpatialMotionVector &vec)
- {
- m_topVec += vec.m_topVec;
- m_bottomVec += vec.m_bottomVec;
- return *this;
- }
- btSpatialMotionVector &operator-=(const btSpatialMotionVector &vec)
- {
- m_topVec -= vec.m_topVec;
- m_bottomVec -= vec.m_bottomVec;
- return *this;
- }
- btSpatialMotionVector &operator*=(const btScalar &s)
- {
- m_topVec *= s;
- m_bottomVec *= s;
- return *this;
- }
- btSpatialMotionVector operator-(const btSpatialMotionVector &vec) const { return btSpatialMotionVector(m_topVec - vec.m_topVec, m_bottomVec - vec.m_bottomVec); }
- btSpatialMotionVector operator+(const btSpatialMotionVector &vec) const { return btSpatialMotionVector(m_topVec + vec.m_topVec, m_bottomVec + vec.m_bottomVec); }
- btSpatialMotionVector operator-() const { return btSpatialMotionVector(-m_topVec, -m_bottomVec); }
- btSpatialMotionVector operator*(const btScalar &s) const { return btSpatialMotionVector(s * m_topVec, s * m_bottomVec); }
-};
-
-struct btSymmetricSpatialDyad
-{
- btMatrix3x3 m_topLeftMat, m_topRightMat, m_bottomLeftMat;
- //
- btSymmetricSpatialDyad() { setIdentity(); }
- btSymmetricSpatialDyad(const btMatrix3x3 &topLeftMat, const btMatrix3x3 &topRightMat, const btMatrix3x3 &bottomLeftMat) { setMatrix(topLeftMat, topRightMat, bottomLeftMat); }
- //
- void setMatrix(const btMatrix3x3 &topLeftMat, const btMatrix3x3 &topRightMat, const btMatrix3x3 &bottomLeftMat)
- {
- m_topLeftMat = topLeftMat;
- m_topRightMat = topRightMat;
- m_bottomLeftMat = bottomLeftMat;
- }
- //
- void addMatrix(const btMatrix3x3 &topLeftMat, const btMatrix3x3 &topRightMat, const btMatrix3x3 &bottomLeftMat)
- {
- m_topLeftMat += topLeftMat;
- m_topRightMat += topRightMat;
- m_bottomLeftMat += bottomLeftMat;
- }
- //
- void setIdentity()
- {
- m_topLeftMat.setIdentity();
- m_topRightMat.setIdentity();
- m_bottomLeftMat.setIdentity();
- }
- //
- btSymmetricSpatialDyad &operator-=(const btSymmetricSpatialDyad &mat)
- {
- m_topLeftMat -= mat.m_topLeftMat;
- m_topRightMat -= mat.m_topRightMat;
- m_bottomLeftMat -= mat.m_bottomLeftMat;
- return *this;
- }
- //
- btSpatialForceVector operator*(const btSpatialMotionVector &vec)
- {
- return btSpatialForceVector(m_bottomLeftMat * vec.m_topVec + m_topLeftMat.transpose() * vec.m_bottomVec, m_topLeftMat * vec.m_topVec + m_topRightMat * vec.m_bottomVec);
- }
-};
-
-struct btSpatialTransformationMatrix
-{
- btMatrix3x3 m_rotMat; //btMatrix3x3 m_trnCrossMat;
- btVector3 m_trnVec;
- //
- enum eOutputOperation
- {
- None = 0,
- Add = 1,
- Subtract = 2
- };
- //
- template <typename SpatialVectorType>
- void transform(const SpatialVectorType &inVec,
- SpatialVectorType &outVec,
- eOutputOperation outOp = None)
- {
- if (outOp == None)
- {
- outVec.m_topVec = m_rotMat * inVec.m_topVec;
- outVec.m_bottomVec = -m_trnVec.cross(outVec.m_topVec) + m_rotMat * inVec.m_bottomVec;
- }
- else if (outOp == Add)
- {
- outVec.m_topVec += m_rotMat * inVec.m_topVec;
- outVec.m_bottomVec += -m_trnVec.cross(outVec.m_topVec) + m_rotMat * inVec.m_bottomVec;
- }
- else if (outOp == Subtract)
- {
- outVec.m_topVec -= m_rotMat * inVec.m_topVec;
- outVec.m_bottomVec -= -m_trnVec.cross(outVec.m_topVec) + m_rotMat * inVec.m_bottomVec;
- }
- }
-
- template <typename SpatialVectorType>
- void transformRotationOnly(const SpatialVectorType &inVec,
- SpatialVectorType &outVec,
- eOutputOperation outOp = None)
- {
- if (outOp == None)
- {
- outVec.m_topVec = m_rotMat * inVec.m_topVec;
- outVec.m_bottomVec = m_rotMat * inVec.m_bottomVec;
- }
- else if (outOp == Add)
- {
- outVec.m_topVec += m_rotMat * inVec.m_topVec;
- outVec.m_bottomVec += m_rotMat * inVec.m_bottomVec;
- }
- else if (outOp == Subtract)
- {
- outVec.m_topVec -= m_rotMat * inVec.m_topVec;
- outVec.m_bottomVec -= m_rotMat * inVec.m_bottomVec;
- }
- }
-
- template <typename SpatialVectorType>
- void transformInverse(const SpatialVectorType &inVec,
- SpatialVectorType &outVec,
- eOutputOperation outOp = None)
- {
- if (outOp == None)
- {
- outVec.m_topVec = m_rotMat.transpose() * inVec.m_topVec;
- outVec.m_bottomVec = m_rotMat.transpose() * (inVec.m_bottomVec + m_trnVec.cross(inVec.m_topVec));
- }
- else if (outOp == Add)
- {
- outVec.m_topVec += m_rotMat.transpose() * inVec.m_topVec;
- outVec.m_bottomVec += m_rotMat.transpose() * (inVec.m_bottomVec + m_trnVec.cross(inVec.m_topVec));
- }
- else if (outOp == Subtract)
- {
- outVec.m_topVec -= m_rotMat.transpose() * inVec.m_topVec;
- outVec.m_bottomVec -= m_rotMat.transpose() * (inVec.m_bottomVec + m_trnVec.cross(inVec.m_topVec));
- }
- }
-
- template <typename SpatialVectorType>
- void transformInverseRotationOnly(const SpatialVectorType &inVec,
- SpatialVectorType &outVec,
- eOutputOperation outOp = None)
- {
- if (outOp == None)
- {
- outVec.m_topVec = m_rotMat.transpose() * inVec.m_topVec;
- outVec.m_bottomVec = m_rotMat.transpose() * inVec.m_bottomVec;
- }
- else if (outOp == Add)
- {
- outVec.m_topVec += m_rotMat.transpose() * inVec.m_topVec;
- outVec.m_bottomVec += m_rotMat.transpose() * inVec.m_bottomVec;
- }
- else if (outOp == Subtract)
- {
- outVec.m_topVec -= m_rotMat.transpose() * inVec.m_topVec;
- outVec.m_bottomVec -= m_rotMat.transpose() * inVec.m_bottomVec;
- }
- }
-
- void transformInverse(const btSymmetricSpatialDyad &inMat,
- btSymmetricSpatialDyad &outMat,
- eOutputOperation outOp = None)
- {
- const btMatrix3x3 r_cross(0, -m_trnVec[2], m_trnVec[1],
- m_trnVec[2], 0, -m_trnVec[0],
- -m_trnVec[1], m_trnVec[0], 0);
-
- if (outOp == None)
- {
- outMat.m_topLeftMat = m_rotMat.transpose() * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) * m_rotMat;
- outMat.m_topRightMat = m_rotMat.transpose() * inMat.m_topRightMat * m_rotMat;
- outMat.m_bottomLeftMat = m_rotMat.transpose() * (r_cross * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) + inMat.m_bottomLeftMat - inMat.m_topLeftMat.transpose() * r_cross) * m_rotMat;
- }
- else if (outOp == Add)
- {
- outMat.m_topLeftMat += m_rotMat.transpose() * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) * m_rotMat;
- outMat.m_topRightMat += m_rotMat.transpose() * inMat.m_topRightMat * m_rotMat;
- outMat.m_bottomLeftMat += m_rotMat.transpose() * (r_cross * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) + inMat.m_bottomLeftMat - inMat.m_topLeftMat.transpose() * r_cross) * m_rotMat;
- }
- else if (outOp == Subtract)
- {
- outMat.m_topLeftMat -= m_rotMat.transpose() * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) * m_rotMat;
- outMat.m_topRightMat -= m_rotMat.transpose() * inMat.m_topRightMat * m_rotMat;
- outMat.m_bottomLeftMat -= m_rotMat.transpose() * (r_cross * (inMat.m_topLeftMat - inMat.m_topRightMat * r_cross) + inMat.m_bottomLeftMat - inMat.m_topLeftMat.transpose() * r_cross) * m_rotMat;
- }
- }
-
- template <typename SpatialVectorType>
- SpatialVectorType operator*(const SpatialVectorType &vec)
- {
- SpatialVectorType out;
- transform(vec, out);
- return out;
- }
-};
-
-template <typename SpatialVectorType>
-void symmetricSpatialOuterProduct(const SpatialVectorType &a, const SpatialVectorType &b, btSymmetricSpatialDyad &out)
-{
- //output op maybe?
-
- out.m_topLeftMat = outerProduct(a.m_topVec, b.m_bottomVec);
- out.m_topRightMat = outerProduct(a.m_topVec, b.m_topVec);
- out.m_topLeftMat = outerProduct(a.m_bottomVec, b.m_bottomVec);
- //maybe simple a*spatTranspose(a) would be nicer?
-}
-
-template <typename SpatialVectorType>
-btSymmetricSpatialDyad symmetricSpatialOuterProduct(const SpatialVectorType &a, const SpatialVectorType &b)
-{
- btSymmetricSpatialDyad out;
-
- out.m_topLeftMat = outerProduct(a.m_topVec, b.m_bottomVec);
- out.m_topRightMat = outerProduct(a.m_topVec, b.m_topVec);
- out.m_bottomLeftMat = outerProduct(a.m_bottomVec, b.m_bottomVec);
-
- return out;
- //maybe simple a*spatTranspose(a) would be nicer?
-}
-
-#endif //BT_SPATIAL_ALGEBRA_H
diff --git a/thirdparty/bullet/LinearMath/btStackAlloc.h b/thirdparty/bullet/LinearMath/btStackAlloc.h
deleted file mode 100644
index 3fc2084976..0000000000
--- a/thirdparty/bullet/LinearMath/btStackAlloc.h
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-/*
-StackAlloc extracted from GJK-EPA collision solver by Nathanael Presson
-Nov.2006
-*/
-
-#ifndef BT_STACK_ALLOC
-#define BT_STACK_ALLOC
-
-#include "btScalar.h" //for btAssert
-#include "btAlignedAllocator.h"
-
-///The btBlock class is an internal structure for the btStackAlloc memory allocator.
-struct btBlock
-{
- btBlock* previous;
- unsigned char* address;
-};
-
-///The StackAlloc class provides some fast stack-based memory allocator (LIFO last-in first-out)
-class btStackAlloc
-{
-public:
- btStackAlloc(unsigned int size)
- {
- ctor();
- create(size);
- }
- ~btStackAlloc() { destroy(); }
-
- inline void create(unsigned int size)
- {
- destroy();
- data = (unsigned char*)btAlignedAlloc(size, 16);
- totalsize = size;
- }
- inline void destroy()
- {
- btAssert(usedsize == 0);
- //Raise(L"StackAlloc is still in use");
-
- if (usedsize == 0)
- {
- if (!ischild && data)
- btAlignedFree(data);
-
- data = 0;
- usedsize = 0;
- }
- }
-
- int getAvailableMemory() const
- {
- return static_cast<int>(totalsize - usedsize);
- }
-
- unsigned char* allocate(unsigned int size)
- {
- const unsigned int nus(usedsize + size);
- if (nus < totalsize)
- {
- usedsize = nus;
- return (data + (usedsize - size));
- }
- btAssert(0);
- //&& (L"Not enough memory"));
-
- return (0);
- }
- SIMD_FORCE_INLINE btBlock* beginBlock()
- {
- btBlock* pb = (btBlock*)allocate(sizeof(btBlock));
- pb->previous = current;
- pb->address = data + usedsize;
- current = pb;
- return (pb);
- }
- SIMD_FORCE_INLINE void endBlock(btBlock* block)
- {
- btAssert(block == current);
- //Raise(L"Unmatched blocks");
- if (block == current)
- {
- current = block->previous;
- usedsize = (unsigned int)((block->address - data) - sizeof(btBlock));
- }
- }
-
-private:
- void ctor()
- {
- data = 0;
- totalsize = 0;
- usedsize = 0;
- current = 0;
- ischild = false;
- }
- unsigned char* data;
- unsigned int totalsize;
- unsigned int usedsize;
- btBlock* current;
- bool ischild;
-};
-
-#endif //BT_STACK_ALLOC
diff --git a/thirdparty/bullet/LinearMath/btThreads.cpp b/thirdparty/bullet/LinearMath/btThreads.cpp
deleted file mode 100644
index 69a86799fa..0000000000
--- a/thirdparty/bullet/LinearMath/btThreads.cpp
+++ /dev/null
@@ -1,792 +0,0 @@
-/*
-Copyright (c) 2003-2014 Erwin Coumans http://bullet.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#include "btThreads.h"
-#include "btQuickprof.h"
-#include <algorithm> // for min and max
-
-#if BT_USE_OPENMP && BT_THREADSAFE
-
-#include <omp.h>
-
-#endif // #if BT_USE_OPENMP && BT_THREADSAFE
-
-#if BT_USE_PPL && BT_THREADSAFE
-
-// use Microsoft Parallel Patterns Library (installed with Visual Studio 2010 and later)
-#include <ppl.h> // if you get a compile error here, check whether your version of Visual Studio includes PPL
-// Visual Studio 2010 and later should come with it
-#include <concrtrm.h> // for GetProcessorCount()
-
-#endif // #if BT_USE_PPL && BT_THREADSAFE
-
-#if BT_USE_TBB && BT_THREADSAFE
-
-// use Intel Threading Building Blocks for thread management
-#define __TBB_NO_IMPLICIT_LINKAGE 1
-#include <tbb/tbb.h>
-#include <tbb/task_scheduler_init.h>
-#include <tbb/parallel_for.h>
-#include <tbb/blocked_range.h>
-
-#endif // #if BT_USE_TBB && BT_THREADSAFE
-
-#if BT_THREADSAFE
-//
-// Lightweight spin-mutex based on atomics
-// Using ordinary system-provided mutexes like Windows critical sections was noticeably slower
-// presumably because when it fails to lock at first it would sleep the thread and trigger costly
-// context switching.
-//
-
-#if __cplusplus >= 201103L
-
-// for anything claiming full C++11 compliance, use C++11 atomics
-// on GCC or Clang you need to compile with -std=c++11
-#define USE_CPP11_ATOMICS 1
-
-#elif defined(_MSC_VER)
-
-// on MSVC, use intrinsics instead
-#define USE_MSVC_INTRINSICS 1
-
-#elif defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 7))
-
-// available since GCC 4.7 and some versions of clang
-// todo: check for clang
-#define USE_GCC_BUILTIN_ATOMICS 1
-
-#elif defined(__GNUC__) && (__GNUC__ == 4 && __GNUC_MINOR__ >= 1)
-
-// available since GCC 4.1
-#define USE_GCC_BUILTIN_ATOMICS_OLD 1
-
-#endif
-
-#if USE_CPP11_ATOMICS
-
-#include <atomic>
-#include <thread>
-
-#define THREAD_LOCAL_STATIC thread_local static
-
-bool btSpinMutex::tryLock()
-{
- std::atomic<int>* aDest = reinterpret_cast<std::atomic<int>*>(&mLock);
- int expected = 0;
- return std::atomic_compare_exchange_weak_explicit(aDest, &expected, int(1), std::memory_order_acq_rel, std::memory_order_acquire);
-}
-
-void btSpinMutex::lock()
-{
- // note: this lock does not sleep the thread.
- while (!tryLock())
- {
- // spin
- }
-}
-
-void btSpinMutex::unlock()
-{
- std::atomic<int>* aDest = reinterpret_cast<std::atomic<int>*>(&mLock);
- std::atomic_store_explicit(aDest, int(0), std::memory_order_release);
-}
-
-#elif USE_MSVC_INTRINSICS
-
-#define WIN32_LEAN_AND_MEAN
-
-#include <windows.h>
-#include <intrin.h>
-
-#define THREAD_LOCAL_STATIC __declspec(thread) static
-
-bool btSpinMutex::tryLock()
-{
- volatile long* aDest = reinterpret_cast<long*>(&mLock);
- return (0 == _InterlockedCompareExchange(aDest, 1, 0));
-}
-
-void btSpinMutex::lock()
-{
- // note: this lock does not sleep the thread
- while (!tryLock())
- {
- // spin
- }
-}
-
-void btSpinMutex::unlock()
-{
- volatile long* aDest = reinterpret_cast<long*>(&mLock);
- _InterlockedExchange(aDest, 0);
-}
-
-#elif USE_GCC_BUILTIN_ATOMICS
-
-#define THREAD_LOCAL_STATIC static __thread
-
-bool btSpinMutex::tryLock()
-{
- int expected = 0;
- bool weak = false;
- const int memOrderSuccess = __ATOMIC_ACQ_REL;
- const int memOrderFail = __ATOMIC_ACQUIRE;
- return __atomic_compare_exchange_n(&mLock, &expected, int(1), weak, memOrderSuccess, memOrderFail);
-}
-
-void btSpinMutex::lock()
-{
- // note: this lock does not sleep the thread
- while (!tryLock())
- {
- // spin
- }
-}
-
-void btSpinMutex::unlock()
-{
- __atomic_store_n(&mLock, int(0), __ATOMIC_RELEASE);
-}
-
-#elif USE_GCC_BUILTIN_ATOMICS_OLD
-
-#define THREAD_LOCAL_STATIC static __thread
-
-bool btSpinMutex::tryLock()
-{
- return __sync_bool_compare_and_swap(&mLock, int(0), int(1));
-}
-
-void btSpinMutex::lock()
-{
- // note: this lock does not sleep the thread
- while (!tryLock())
- {
- // spin
- }
-}
-
-void btSpinMutex::unlock()
-{
- // write 0
- __sync_fetch_and_and(&mLock, int(0));
-}
-
-#else //#elif USE_MSVC_INTRINSICS
-
-#error "no threading primitives defined -- unknown platform"
-
-#endif //#else //#elif USE_MSVC_INTRINSICS
-
-#else //#if BT_THREADSAFE
-
-// These should not be called ever
-void btSpinMutex::lock()
-{
- btAssert(!"unimplemented btSpinMutex::lock() called");
-}
-
-void btSpinMutex::unlock()
-{
- btAssert(!"unimplemented btSpinMutex::unlock() called");
-}
-
-bool btSpinMutex::tryLock()
-{
- btAssert(!"unimplemented btSpinMutex::tryLock() called");
- return true;
-}
-
-#define THREAD_LOCAL_STATIC static
-
-#endif // #else //#if BT_THREADSAFE
-
-struct ThreadsafeCounter
-{
- unsigned int mCounter;
- btSpinMutex mMutex;
-
- ThreadsafeCounter()
- {
- mCounter = 0;
- --mCounter; // first count should come back 0
- }
-
- unsigned int getNext()
- {
- // no need to optimize this with atomics, it is only called ONCE per thread!
- mMutex.lock();
- mCounter++;
- if (mCounter >= BT_MAX_THREAD_COUNT)
- {
- btAssert(!"thread counter exceeded");
- // wrap back to the first worker index
- mCounter = 1;
- }
- unsigned int val = mCounter;
- mMutex.unlock();
- return val;
- }
-};
-
-static btITaskScheduler* gBtTaskScheduler=0;
-static int gThreadsRunningCounter = 0; // useful for detecting if we are trying to do nested parallel-for calls
-static btSpinMutex gThreadsRunningCounterMutex;
-static ThreadsafeCounter gThreadCounter;
-
-//
-// BT_DETECT_BAD_THREAD_INDEX tries to detect when there are multiple threads assigned the same thread index.
-//
-// BT_DETECT_BAD_THREAD_INDEX is a developer option to test if
-// certain assumptions about how the task scheduler manages its threads
-// holds true.
-// The main assumption is:
-// - when the threadpool is resized, the task scheduler either
-// 1. destroys all worker threads and creates all new ones in the correct number, OR
-// 2. never destroys a worker thread
-//
-// We make that assumption because we can't easily enumerate the worker threads of a task scheduler
-// to assign nice sequential thread-indexes. We also do not get notified if a worker thread is destroyed,
-// so we can't tell when a thread-index is no longer being used.
-// We allocate thread-indexes as needed with a sequential global thread counter.
-//
-// Our simple thread-counting scheme falls apart if the task scheduler destroys some threads but
-// continues to re-use other threads and the application repeatedly resizes the thread pool of the
-// task scheduler.
-// In order to prevent the thread-counter from exceeding the global max (BT_MAX_THREAD_COUNT), we
-// wrap the thread counter back to 1. This should only happen if the worker threads have all been
-// destroyed and re-created.
-//
-// BT_DETECT_BAD_THREAD_INDEX only works for Win32 right now,
-// but could be adapted to work with pthreads
-#define BT_DETECT_BAD_THREAD_INDEX 0
-
-#if BT_DETECT_BAD_THREAD_INDEX
-
-typedef DWORD ThreadId_t;
-const static ThreadId_t kInvalidThreadId = 0;
-ThreadId_t gDebugThreadIds[BT_MAX_THREAD_COUNT];
-
-static ThreadId_t getDebugThreadId()
-{
- return GetCurrentThreadId();
-}
-
-#endif // #if BT_DETECT_BAD_THREAD_INDEX
-
-// return a unique index per thread, main thread is 0, worker threads are in [1, BT_MAX_THREAD_COUNT)
-unsigned int btGetCurrentThreadIndex()
-{
- const unsigned int kNullIndex = ~0U;
- THREAD_LOCAL_STATIC unsigned int sThreadIndex = kNullIndex;
- if (sThreadIndex == kNullIndex)
- {
- sThreadIndex = gThreadCounter.getNext();
- btAssert(sThreadIndex < BT_MAX_THREAD_COUNT);
- }
-#if BT_DETECT_BAD_THREAD_INDEX
- if (gBtTaskScheduler && sThreadIndex > 0)
- {
- ThreadId_t tid = getDebugThreadId();
- // if not set
- if (gDebugThreadIds[sThreadIndex] == kInvalidThreadId)
- {
- // set it
- gDebugThreadIds[sThreadIndex] = tid;
- }
- else
- {
- if (gDebugThreadIds[sThreadIndex] != tid)
- {
- // this could indicate the task scheduler is breaking our assumptions about
- // how threads are managed when threadpool is resized
- btAssert(!"there are 2 or more threads with the same thread-index!");
- __debugbreak();
- }
- }
- }
-#endif // #if BT_DETECT_BAD_THREAD_INDEX
- return sThreadIndex;
-}
-
-bool btIsMainThread()
-{
- return btGetCurrentThreadIndex() == 0;
-}
-
-void btResetThreadIndexCounter()
-{
- // for when all current worker threads are destroyed
- btAssert(btIsMainThread());
- gThreadCounter.mCounter = 0;
-}
-
-btITaskScheduler::btITaskScheduler(const char* name)
-{
- m_name = name;
- m_savedThreadCounter = 0;
- m_isActive = false;
-}
-
-void btITaskScheduler::activate()
-{
- // gThreadCounter is used to assign a thread-index to each worker thread in a task scheduler.
- // The main thread is always thread-index 0, and worker threads are numbered from 1 to 63 (BT_MAX_THREAD_COUNT-1)
- // The thread-indexes need to be unique amongst the threads that can be running simultaneously.
- // Since only one task scheduler can be used at a time, it is OK for a pair of threads that belong to different
- // task schedulers to share the same thread index because they can't be running at the same time.
- // So each task scheduler needs to keep its own thread counter value
- if (!m_isActive)
- {
- gThreadCounter.mCounter = m_savedThreadCounter; // restore saved thread counter
- m_isActive = true;
- }
-}
-
-void btITaskScheduler::deactivate()
-{
- if (m_isActive)
- {
- m_savedThreadCounter = gThreadCounter.mCounter; // save thread counter
- m_isActive = false;
- }
-}
-
-void btPushThreadsAreRunning()
-{
- gThreadsRunningCounterMutex.lock();
- gThreadsRunningCounter++;
- gThreadsRunningCounterMutex.unlock();
-}
-
-void btPopThreadsAreRunning()
-{
- gThreadsRunningCounterMutex.lock();
- gThreadsRunningCounter--;
- gThreadsRunningCounterMutex.unlock();
-}
-
-bool btThreadsAreRunning()
-{
- return gThreadsRunningCounter != 0;
-}
-
-void btSetTaskScheduler(btITaskScheduler* ts)
-{
- int threadId = btGetCurrentThreadIndex(); // make sure we call this on main thread at least once before any workers run
- if (threadId != 0)
- {
- btAssert(!"btSetTaskScheduler must be called from the main thread!");
- return;
- }
- if (gBtTaskScheduler)
- {
- // deactivate old task scheduler
- gBtTaskScheduler->deactivate();
- }
- gBtTaskScheduler = ts;
- if (ts)
- {
- // activate new task scheduler
- ts->activate();
- }
-}
-
-btITaskScheduler* btGetTaskScheduler()
-{
- return gBtTaskScheduler;
-}
-
-void btParallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body)
-{
-#if BT_THREADSAFE
-
-#if BT_DETECT_BAD_THREAD_INDEX
- if (!btThreadsAreRunning())
- {
- // clear out thread ids
- for (int i = 0; i < BT_MAX_THREAD_COUNT; ++i)
- {
- gDebugThreadIds[i] = kInvalidThreadId;
- }
- }
-#endif // #if BT_DETECT_BAD_THREAD_INDEX
-
- btAssert(gBtTaskScheduler != NULL); // call btSetTaskScheduler() with a valid task scheduler first!
- gBtTaskScheduler->parallelFor(iBegin, iEnd, grainSize, body);
-
-#else // #if BT_THREADSAFE
-
- // non-parallel version of btParallelFor
- btAssert(!"called btParallelFor in non-threadsafe build. enable BT_THREADSAFE");
- body.forLoop(iBegin, iEnd);
-
-#endif // #if BT_THREADSAFE
-}
-
-btScalar btParallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body)
-{
-#if BT_THREADSAFE
-
-#if BT_DETECT_BAD_THREAD_INDEX
- if (!btThreadsAreRunning())
- {
- // clear out thread ids
- for (int i = 0; i < BT_MAX_THREAD_COUNT; ++i)
- {
- gDebugThreadIds[i] = kInvalidThreadId;
- }
- }
-#endif // #if BT_DETECT_BAD_THREAD_INDEX
-
- btAssert(gBtTaskScheduler != NULL); // call btSetTaskScheduler() with a valid task scheduler first!
- return gBtTaskScheduler->parallelSum(iBegin, iEnd, grainSize, body);
-
-#else // #if BT_THREADSAFE
-
- // non-parallel version of btParallelSum
- btAssert(!"called btParallelFor in non-threadsafe build. enable BT_THREADSAFE");
- return body.sumLoop(iBegin, iEnd);
-
-#endif //#else // #if BT_THREADSAFE
-}
-
-///
-/// btTaskSchedulerSequential -- non-threaded implementation of task scheduler
-/// (really just useful for testing performance of single threaded vs multi)
-///
-class btTaskSchedulerSequential : public btITaskScheduler
-{
-public:
- btTaskSchedulerSequential() : btITaskScheduler("Sequential") {}
- virtual int getMaxNumThreads() const BT_OVERRIDE { return 1; }
- virtual int getNumThreads() const BT_OVERRIDE { return 1; }
- virtual void setNumThreads(int numThreads) BT_OVERRIDE {}
- virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelFor_sequential");
- body.forLoop(iBegin, iEnd);
- }
- virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelSum_sequential");
- return body.sumLoop(iBegin, iEnd);
- }
-};
-
-#if BT_USE_OPENMP && BT_THREADSAFE
-///
-/// btTaskSchedulerOpenMP -- wrapper around OpenMP task scheduler
-///
-class btTaskSchedulerOpenMP : public btITaskScheduler
-{
- int m_numThreads;
-
-public:
- btTaskSchedulerOpenMP() : btITaskScheduler("OpenMP")
- {
- m_numThreads = 0;
- }
- virtual int getMaxNumThreads() const BT_OVERRIDE
- {
- return omp_get_max_threads();
- }
- virtual int getNumThreads() const BT_OVERRIDE
- {
- return m_numThreads;
- }
- virtual void setNumThreads(int numThreads) BT_OVERRIDE
- {
- // With OpenMP, because it is a standard with various implementations, we can't
- // know for sure if every implementation has the same behavior of destroying all
- // previous threads when resizing the threadpool
- m_numThreads = (std::max)(1, (std::min)(int(BT_MAX_THREAD_COUNT), numThreads));
- omp_set_num_threads(1); // hopefully, all previous threads get destroyed here
- omp_set_num_threads(m_numThreads);
- m_savedThreadCounter = 0;
- if (m_isActive)
- {
- btResetThreadIndexCounter();
- }
- }
- virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelFor_OpenMP");
- btPushThreadsAreRunning();
-#pragma omp parallel for schedule(static, 1)
- for (int i = iBegin; i < iEnd; i += grainSize)
- {
- BT_PROFILE("OpenMP_forJob");
- body.forLoop(i, (std::min)(i + grainSize, iEnd));
- }
- btPopThreadsAreRunning();
- }
- virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelFor_OpenMP");
- btPushThreadsAreRunning();
- btScalar sum = btScalar(0);
-#pragma omp parallel for schedule(static, 1) reduction(+ \
- : sum)
- for (int i = iBegin; i < iEnd; i += grainSize)
- {
- BT_PROFILE("OpenMP_sumJob");
- sum += body.sumLoop(i, (std::min)(i + grainSize, iEnd));
- }
- btPopThreadsAreRunning();
- return sum;
- }
-};
-#endif // #if BT_USE_OPENMP && BT_THREADSAFE
-
-#if BT_USE_TBB && BT_THREADSAFE
-///
-/// btTaskSchedulerTBB -- wrapper around Intel Threaded Building Blocks task scheduler
-///
-class btTaskSchedulerTBB : public btITaskScheduler
-{
- int m_numThreads;
- tbb::task_scheduler_init* m_tbbSchedulerInit;
-
-public:
- btTaskSchedulerTBB() : btITaskScheduler("IntelTBB")
- {
- m_numThreads = 0;
- m_tbbSchedulerInit = NULL;
- }
- ~btTaskSchedulerTBB()
- {
- if (m_tbbSchedulerInit)
- {
- delete m_tbbSchedulerInit;
- m_tbbSchedulerInit = NULL;
- }
- }
-
- virtual int getMaxNumThreads() const BT_OVERRIDE
- {
- return tbb::task_scheduler_init::default_num_threads();
- }
- virtual int getNumThreads() const BT_OVERRIDE
- {
- return m_numThreads;
- }
- virtual void setNumThreads(int numThreads) BT_OVERRIDE
- {
- m_numThreads = (std::max)(1, (std::min)(int(BT_MAX_THREAD_COUNT), numThreads));
- if (m_tbbSchedulerInit)
- {
- // destroys all previous threads
- delete m_tbbSchedulerInit;
- m_tbbSchedulerInit = NULL;
- }
- m_tbbSchedulerInit = new tbb::task_scheduler_init(m_numThreads);
- m_savedThreadCounter = 0;
- if (m_isActive)
- {
- btResetThreadIndexCounter();
- }
- }
- struct ForBodyAdapter
- {
- const btIParallelForBody* mBody;
-
- ForBodyAdapter(const btIParallelForBody* body) : mBody(body) {}
- void operator()(const tbb::blocked_range<int>& range) const
- {
- BT_PROFILE("TBB_forJob");
- mBody->forLoop(range.begin(), range.end());
- }
- };
- virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelFor_TBB");
- ForBodyAdapter tbbBody(&body);
- btPushThreadsAreRunning();
- tbb::parallel_for(tbb::blocked_range<int>(iBegin, iEnd, grainSize),
- tbbBody,
- tbb::simple_partitioner());
- btPopThreadsAreRunning();
- }
- struct SumBodyAdapter
- {
- const btIParallelSumBody* mBody;
- btScalar mSum;
-
- SumBodyAdapter(const btIParallelSumBody* body) : mBody(body), mSum(btScalar(0)) {}
- SumBodyAdapter(const SumBodyAdapter& src, tbb::split) : mBody(src.mBody), mSum(btScalar(0)) {}
- void join(const SumBodyAdapter& src) { mSum += src.mSum; }
- void operator()(const tbb::blocked_range<int>& range)
- {
- BT_PROFILE("TBB_sumJob");
- mSum += mBody->sumLoop(range.begin(), range.end());
- }
- };
- virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelSum_TBB");
- SumBodyAdapter tbbBody(&body);
- btPushThreadsAreRunning();
- tbb::parallel_deterministic_reduce(tbb::blocked_range<int>(iBegin, iEnd, grainSize), tbbBody);
- btPopThreadsAreRunning();
- return tbbBody.mSum;
- }
-};
-#endif // #if BT_USE_TBB && BT_THREADSAFE
-
-#if BT_USE_PPL && BT_THREADSAFE
-///
-/// btTaskSchedulerPPL -- wrapper around Microsoft Parallel Patterns Lib task scheduler
-///
-class btTaskSchedulerPPL : public btITaskScheduler
-{
- int m_numThreads;
- concurrency::combinable<btScalar> m_sum; // for parallelSum
-public:
- btTaskSchedulerPPL() : btITaskScheduler("PPL")
- {
- m_numThreads = 0;
- }
- virtual int getMaxNumThreads() const BT_OVERRIDE
- {
- return concurrency::GetProcessorCount();
- }
- virtual int getNumThreads() const BT_OVERRIDE
- {
- return m_numThreads;
- }
- virtual void setNumThreads(int numThreads) BT_OVERRIDE
- {
- // capping the thread count for PPL due to a thread-index issue
- const int maxThreadCount = (std::min)(int(BT_MAX_THREAD_COUNT), 31);
- m_numThreads = (std::max)(1, (std::min)(maxThreadCount, numThreads));
- using namespace concurrency;
- if (CurrentScheduler::Id() != -1)
- {
- CurrentScheduler::Detach();
- }
- SchedulerPolicy policy;
- {
- // PPL seems to destroy threads when threadpool is shrunk, but keeps reusing old threads
- // force it to destroy old threads
- policy.SetConcurrencyLimits(1, 1);
- CurrentScheduler::Create(policy);
- CurrentScheduler::Detach();
- }
- policy.SetConcurrencyLimits(m_numThreads, m_numThreads);
- CurrentScheduler::Create(policy);
- m_savedThreadCounter = 0;
- if (m_isActive)
- {
- btResetThreadIndexCounter();
- }
- }
- struct ForBodyAdapter
- {
- const btIParallelForBody* mBody;
- int mGrainSize;
- int mIndexEnd;
-
- ForBodyAdapter(const btIParallelForBody* body, int grainSize, int end) : mBody(body), mGrainSize(grainSize), mIndexEnd(end) {}
- void operator()(int i) const
- {
- BT_PROFILE("PPL_forJob");
- mBody->forLoop(i, (std::min)(i + mGrainSize, mIndexEnd));
- }
- };
- virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelFor_PPL");
- // PPL dispatch
- ForBodyAdapter pplBody(&body, grainSize, iEnd);
- btPushThreadsAreRunning();
- // note: MSVC 2010 doesn't support partitioner args, so avoid them
- concurrency::parallel_for(iBegin,
- iEnd,
- grainSize,
- pplBody);
- btPopThreadsAreRunning();
- }
- struct SumBodyAdapter
- {
- const btIParallelSumBody* mBody;
- concurrency::combinable<btScalar>* mSum;
- int mGrainSize;
- int mIndexEnd;
-
- SumBodyAdapter(const btIParallelSumBody* body, concurrency::combinable<btScalar>* sum, int grainSize, int end) : mBody(body), mSum(sum), mGrainSize(grainSize), mIndexEnd(end) {}
- void operator()(int i) const
- {
- BT_PROFILE("PPL_sumJob");
- mSum->local() += mBody->sumLoop(i, (std::min)(i + mGrainSize, mIndexEnd));
- }
- };
- static btScalar sumFunc(btScalar a, btScalar b) { return a + b; }
- virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) BT_OVERRIDE
- {
- BT_PROFILE("parallelSum_PPL");
- m_sum.clear();
- SumBodyAdapter pplBody(&body, &m_sum, grainSize, iEnd);
- btPushThreadsAreRunning();
- // note: MSVC 2010 doesn't support partitioner args, so avoid them
- concurrency::parallel_for(iBegin,
- iEnd,
- grainSize,
- pplBody);
- btPopThreadsAreRunning();
- return m_sum.combine(sumFunc);
- }
-};
-#endif // #if BT_USE_PPL && BT_THREADSAFE
-
-// create a non-threaded task scheduler (always available)
-btITaskScheduler* btGetSequentialTaskScheduler()
-{
- static btTaskSchedulerSequential sTaskScheduler;
- return &sTaskScheduler;
-}
-
-// create an OpenMP task scheduler (if available, otherwise returns null)
-btITaskScheduler* btGetOpenMPTaskScheduler()
-{
-#if BT_USE_OPENMP && BT_THREADSAFE
- static btTaskSchedulerOpenMP sTaskScheduler;
- return &sTaskScheduler;
-#else
- return NULL;
-#endif
-}
-
-// create an Intel TBB task scheduler (if available, otherwise returns null)
-btITaskScheduler* btGetTBBTaskScheduler()
-{
-#if BT_USE_TBB && BT_THREADSAFE
- static btTaskSchedulerTBB sTaskScheduler;
- return &sTaskScheduler;
-#else
- return NULL;
-#endif
-}
-
-// create a PPL task scheduler (if available, otherwise returns null)
-btITaskScheduler* btGetPPLTaskScheduler()
-{
-#if BT_USE_PPL && BT_THREADSAFE
- static btTaskSchedulerPPL sTaskScheduler;
- return &sTaskScheduler;
-#else
- return NULL;
-#endif
-}
diff --git a/thirdparty/bullet/LinearMath/btThreads.h b/thirdparty/bullet/LinearMath/btThreads.h
deleted file mode 100644
index b2227e1724..0000000000
--- a/thirdparty/bullet/LinearMath/btThreads.h
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
-Copyright (c) 2003-2014 Erwin Coumans http://bullet.googlecode.com
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_THREADS_H
-#define BT_THREADS_H
-
-#include "btScalar.h" // has definitions like SIMD_FORCE_INLINE
-
-#if defined(_MSC_VER) && _MSC_VER >= 1600
-// give us a compile error if any signatures of overriden methods is changed
-#define BT_OVERRIDE override
-#endif
-
-#ifndef BT_OVERRIDE
-#define BT_OVERRIDE
-#endif
-
-// Don't set this to larger than 64, without modifying btThreadSupportPosix
-// and btThreadSupportWin32. They use UINT64 bit-masks.
-const unsigned int BT_MAX_THREAD_COUNT = 64; // only if BT_THREADSAFE is 1
-
-// for internal use only
-bool btIsMainThread();
-bool btThreadsAreRunning();
-unsigned int btGetCurrentThreadIndex();
-void btResetThreadIndexCounter(); // notify that all worker threads have been destroyed
-
-///
-/// btSpinMutex -- lightweight spin-mutex implemented with atomic ops, never puts
-/// a thread to sleep because it is designed to be used with a task scheduler
-/// which has one thread per core and the threads don't sleep until they
-/// run out of tasks. Not good for general purpose use.
-///
-class btSpinMutex
-{
- int mLock;
-
-public:
- btSpinMutex()
- {
- mLock = 0;
- }
- void lock();
- void unlock();
- bool tryLock();
-};
-
-//
-// NOTE: btMutex* is for internal Bullet use only
-//
-// If BT_THREADSAFE is undefined or 0, should optimize away to nothing.
-// This is good because for the single-threaded build of Bullet, any calls
-// to these functions will be optimized out.
-//
-// However, for users of the multi-threaded build of Bullet this is kind
-// of bad because if you call any of these functions from external code
-// (where BT_THREADSAFE is undefined) you will get unexpected race conditions.
-//
-SIMD_FORCE_INLINE void btMutexLock(btSpinMutex* mutex)
-{
-#if BT_THREADSAFE
- mutex->lock();
-#else
- (void)mutex;
-#endif // #if BT_THREADSAFE
-}
-
-SIMD_FORCE_INLINE void btMutexUnlock(btSpinMutex* mutex)
-{
-#if BT_THREADSAFE
- mutex->unlock();
-#else
- (void)mutex;
-#endif // #if BT_THREADSAFE
-}
-
-SIMD_FORCE_INLINE bool btMutexTryLock(btSpinMutex* mutex)
-{
-#if BT_THREADSAFE
- return mutex->tryLock();
-#else
- (void)mutex;
- return true;
-#endif // #if BT_THREADSAFE
-}
-
-//
-// btIParallelForBody -- subclass this to express work that can be done in parallel
-//
-class btIParallelForBody
-{
-public:
- virtual ~btIParallelForBody() {}
- virtual void forLoop(int iBegin, int iEnd) const = 0;
-};
-
-//
-// btIParallelSumBody -- subclass this to express work that can be done in parallel
-// and produces a sum over all loop elements
-//
-class btIParallelSumBody
-{
-public:
- virtual ~btIParallelSumBody() {}
- virtual btScalar sumLoop(int iBegin, int iEnd) const = 0;
-};
-
-//
-// btITaskScheduler -- subclass this to implement a task scheduler that can dispatch work to
-// worker threads
-//
-class btITaskScheduler
-{
-public:
- btITaskScheduler(const char* name);
- virtual ~btITaskScheduler() {}
- const char* getName() const { return m_name; }
-
- virtual int getMaxNumThreads() const = 0;
- virtual int getNumThreads() const = 0;
- virtual void setNumThreads(int numThreads) = 0;
- virtual void parallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body) = 0;
- virtual btScalar parallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body) = 0;
- virtual void sleepWorkerThreadsHint() {} // hint the task scheduler that we may not be using these threads for a little while
-
- // internal use only
- virtual void activate();
- virtual void deactivate();
-
-protected:
- const char* m_name;
- unsigned int m_savedThreadCounter;
- bool m_isActive;
-};
-
-// set the task scheduler to use for all calls to btParallelFor()
-// NOTE: you must set this prior to using any of the multi-threaded "Mt" classes
-void btSetTaskScheduler(btITaskScheduler* ts);
-
-// get the current task scheduler
-btITaskScheduler* btGetTaskScheduler();
-
-// get non-threaded task scheduler (always available)
-btITaskScheduler* btGetSequentialTaskScheduler();
-
-// create a default task scheduler (Win32 or pthreads based)
-btITaskScheduler* btCreateDefaultTaskScheduler();
-
-// get OpenMP task scheduler (if available, otherwise returns null)
-btITaskScheduler* btGetOpenMPTaskScheduler();
-
-// get Intel TBB task scheduler (if available, otherwise returns null)
-btITaskScheduler* btGetTBBTaskScheduler();
-
-// get PPL task scheduler (if available, otherwise returns null)
-btITaskScheduler* btGetPPLTaskScheduler();
-
-// btParallelFor -- call this to dispatch work like a for-loop
-// (iterations may be done out of order, so no dependencies are allowed)
-void btParallelFor(int iBegin, int iEnd, int grainSize, const btIParallelForBody& body);
-
-// btParallelSum -- call this to dispatch work like a for-loop, returns the sum of all iterations
-// (iterations may be done out of order, so no dependencies are allowed)
-btScalar btParallelSum(int iBegin, int iEnd, int grainSize, const btIParallelSumBody& body);
-
-#endif
diff --git a/thirdparty/bullet/LinearMath/btTransform.h b/thirdparty/bullet/LinearMath/btTransform.h
deleted file mode 100644
index 6f2f99818c..0000000000
--- a/thirdparty/bullet/LinearMath/btTransform.h
+++ /dev/null
@@ -1,286 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRANSFORM_H
-#define BT_TRANSFORM_H
-
-#include "btMatrix3x3.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btTransformData btTransformDoubleData
-#else
-#define btTransformData btTransformFloatData
-#endif
-
-/**@brief The btTransform class supports rigid transforms with only translation and rotation and no scaling/shear.
- *It can be used in combination with btVector3, btQuaternion and btMatrix3x3 linear algebra classes. */
-ATTRIBUTE_ALIGNED16(class)
-btTransform
-{
- ///Storage for the rotation
- btMatrix3x3 m_basis;
- ///Storage for the translation
- btVector3 m_origin;
-
-public:
- /**@brief No initialization constructor */
- btTransform() {}
- /**@brief Constructor from btQuaternion (optional btVector3 )
- * @param q Rotation from quaternion
- * @param c Translation from Vector (default 0,0,0) */
- explicit SIMD_FORCE_INLINE btTransform(const btQuaternion& q,
- const btVector3& c = btVector3(btScalar(0), btScalar(0), btScalar(0)))
- : m_basis(q),
- m_origin(c)
- {
- }
-
- /**@brief Constructor from btMatrix3x3 (optional btVector3)
- * @param b Rotation from Matrix
- * @param c Translation from Vector default (0,0,0)*/
- explicit SIMD_FORCE_INLINE btTransform(const btMatrix3x3& b,
- const btVector3& c = btVector3(btScalar(0), btScalar(0), btScalar(0)))
- : m_basis(b),
- m_origin(c)
- {
- }
- /**@brief Copy constructor */
- SIMD_FORCE_INLINE btTransform(const btTransform& other)
- : m_basis(other.m_basis),
- m_origin(other.m_origin)
- {
- }
- /**@brief Assignment Operator */
- SIMD_FORCE_INLINE btTransform& operator=(const btTransform& other)
- {
- m_basis = other.m_basis;
- m_origin = other.m_origin;
- return *this;
- }
-
- /**@brief Set the current transform as the value of the product of two transforms
- * @param t1 Transform 1
- * @param t2 Transform 2
- * This = Transform1 * Transform2 */
- SIMD_FORCE_INLINE void mult(const btTransform& t1, const btTransform& t2)
- {
- m_basis = t1.m_basis * t2.m_basis;
- m_origin = t1(t2.m_origin);
- }
-
- /* void multInverseLeft(const btTransform& t1, const btTransform& t2) {
- btVector3 v = t2.m_origin - t1.m_origin;
- m_basis = btMultTransposeLeft(t1.m_basis, t2.m_basis);
- m_origin = v * t1.m_basis;
- }
- */
-
- /**@brief Return the transform of the vector */
- SIMD_FORCE_INLINE btVector3 operator()(const btVector3& x) const
- {
- return x.dot3(m_basis[0], m_basis[1], m_basis[2]) + m_origin;
- }
-
- /**@brief Return the transform of the vector */
- SIMD_FORCE_INLINE btVector3 operator*(const btVector3& x) const
- {
- return (*this)(x);
- }
-
- /**@brief Return the transform of the btQuaternion */
- SIMD_FORCE_INLINE btQuaternion operator*(const btQuaternion& q) const
- {
- return getRotation() * q;
- }
-
- /**@brief Return the basis matrix for the rotation */
- SIMD_FORCE_INLINE btMatrix3x3& getBasis() { return m_basis; }
- /**@brief Return the basis matrix for the rotation */
- SIMD_FORCE_INLINE const btMatrix3x3& getBasis() const { return m_basis; }
-
- /**@brief Return the origin vector translation */
- SIMD_FORCE_INLINE btVector3& getOrigin() { return m_origin; }
- /**@brief Return the origin vector translation */
- SIMD_FORCE_INLINE const btVector3& getOrigin() const { return m_origin; }
-
- /**@brief Return a quaternion representing the rotation */
- btQuaternion getRotation() const
- {
- btQuaternion q;
- m_basis.getRotation(q);
- return q;
- }
-
- /**@brief Set from an array
- * @param m A pointer to a 16 element array (12 rotation(row major padded on the right by 1), and 3 translation */
- void setFromOpenGLMatrix(const btScalar* m)
- {
- m_basis.setFromOpenGLSubMatrix(m);
- m_origin.setValue(m[12], m[13], m[14]);
- }
-
- /**@brief Fill an array representation
- * @param m A pointer to a 16 element array (12 rotation(row major padded on the right by 1), and 3 translation */
- void getOpenGLMatrix(btScalar * m) const
- {
- m_basis.getOpenGLSubMatrix(m);
- m[12] = m_origin.x();
- m[13] = m_origin.y();
- m[14] = m_origin.z();
- m[15] = btScalar(1.0);
- }
-
- /**@brief Set the translational element
- * @param origin The vector to set the translation to */
- SIMD_FORCE_INLINE void setOrigin(const btVector3& origin)
- {
- m_origin = origin;
- }
-
- SIMD_FORCE_INLINE btVector3 invXform(const btVector3& inVec) const;
-
- /**@brief Set the rotational element by btMatrix3x3 */
- SIMD_FORCE_INLINE void setBasis(const btMatrix3x3& basis)
- {
- m_basis = basis;
- }
-
- /**@brief Set the rotational element by btQuaternion */
- SIMD_FORCE_INLINE void setRotation(const btQuaternion& q)
- {
- m_basis.setRotation(q);
- }
-
- /**@brief Set this transformation to the identity */
- void setIdentity()
- {
- m_basis.setIdentity();
- m_origin.setValue(btScalar(0.0), btScalar(0.0), btScalar(0.0));
- }
-
- /**@brief Multiply this Transform by another(this = this * another)
- * @param t The other transform */
- btTransform& operator*=(const btTransform& t)
- {
- m_origin += m_basis * t.m_origin;
- m_basis *= t.m_basis;
- return *this;
- }
-
- /**@brief Return the inverse of this transform */
- btTransform inverse() const
- {
- btMatrix3x3 inv = m_basis.transpose();
- return btTransform(inv, inv * -m_origin);
- }
-
- /**@brief Return the inverse of this transform times the other transform
- * @param t The other transform
- * return this.inverse() * the other */
- btTransform inverseTimes(const btTransform& t) const;
-
- /**@brief Return the product of this transform and the other */
- btTransform operator*(const btTransform& t) const;
-
- /**@brief Return an identity transform */
- static const btTransform& getIdentity()
- {
- static const btTransform identityTransform(btMatrix3x3::getIdentity());
- return identityTransform;
- }
-
- void serialize(struct btTransformData & dataOut) const;
-
- void serializeFloat(struct btTransformFloatData & dataOut) const;
-
- void deSerialize(const struct btTransformData& dataIn);
-
- void deSerializeDouble(const struct btTransformDoubleData& dataIn);
-
- void deSerializeFloat(const struct btTransformFloatData& dataIn);
-};
-
-SIMD_FORCE_INLINE btVector3
-btTransform::invXform(const btVector3& inVec) const
-{
- btVector3 v = inVec - m_origin;
- return (m_basis.transpose() * v);
-}
-
-SIMD_FORCE_INLINE btTransform
-btTransform::inverseTimes(const btTransform& t) const
-{
- btVector3 v = t.getOrigin() - m_origin;
- return btTransform(m_basis.transposeTimes(t.m_basis),
- v * m_basis);
-}
-
-SIMD_FORCE_INLINE btTransform
- btTransform::operator*(const btTransform& t) const
-{
- return btTransform(m_basis * t.m_basis,
- (*this)(t.m_origin));
-}
-
-/**@brief Test if two transforms have all elements equal */
-SIMD_FORCE_INLINE bool operator==(const btTransform& t1, const btTransform& t2)
-{
- return (t1.getBasis() == t2.getBasis() &&
- t1.getOrigin() == t2.getOrigin());
-}
-
-///for serialization
-struct btTransformFloatData
-{
- btMatrix3x3FloatData m_basis;
- btVector3FloatData m_origin;
-};
-
-struct btTransformDoubleData
-{
- btMatrix3x3DoubleData m_basis;
- btVector3DoubleData m_origin;
-};
-
-SIMD_FORCE_INLINE void btTransform::serialize(btTransformData& dataOut) const
-{
- m_basis.serialize(dataOut.m_basis);
- m_origin.serialize(dataOut.m_origin);
-}
-
-SIMD_FORCE_INLINE void btTransform::serializeFloat(btTransformFloatData& dataOut) const
-{
- m_basis.serializeFloat(dataOut.m_basis);
- m_origin.serializeFloat(dataOut.m_origin);
-}
-
-SIMD_FORCE_INLINE void btTransform::deSerialize(const btTransformData& dataIn)
-{
- m_basis.deSerialize(dataIn.m_basis);
- m_origin.deSerialize(dataIn.m_origin);
-}
-
-SIMD_FORCE_INLINE void btTransform::deSerializeFloat(const btTransformFloatData& dataIn)
-{
- m_basis.deSerializeFloat(dataIn.m_basis);
- m_origin.deSerializeFloat(dataIn.m_origin);
-}
-
-SIMD_FORCE_INLINE void btTransform::deSerializeDouble(const btTransformDoubleData& dataIn)
-{
- m_basis.deSerializeDouble(dataIn.m_basis);
- m_origin.deSerializeDouble(dataIn.m_origin);
-}
-
-#endif //BT_TRANSFORM_H
diff --git a/thirdparty/bullet/LinearMath/btTransformUtil.h b/thirdparty/bullet/LinearMath/btTransformUtil.h
deleted file mode 100644
index b874dd6807..0000000000
--- a/thirdparty/bullet/LinearMath/btTransformUtil.h
+++ /dev/null
@@ -1,223 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_TRANSFORM_UTIL_H
-#define BT_TRANSFORM_UTIL_H
-
-#include "btTransform.h"
-#define ANGULAR_MOTION_THRESHOLD btScalar(0.5) * SIMD_HALF_PI
-
-SIMD_FORCE_INLINE btVector3 btAabbSupport(const btVector3& halfExtents, const btVector3& supportDir)
-{
- return btVector3(supportDir.x() < btScalar(0.0) ? -halfExtents.x() : halfExtents.x(),
- supportDir.y() < btScalar(0.0) ? -halfExtents.y() : halfExtents.y(),
- supportDir.z() < btScalar(0.0) ? -halfExtents.z() : halfExtents.z());
-}
-
-/// Utils related to temporal transforms
-class btTransformUtil
-{
-public:
- static void integrateTransform(const btTransform& curTrans, const btVector3& linvel, const btVector3& angvel, btScalar timeStep, btTransform& predictedTransform)
- {
- predictedTransform.setOrigin(curTrans.getOrigin() + linvel * timeStep);
- // #define QUATERNION_DERIVATIVE
-#ifdef QUATERNION_DERIVATIVE
- btQuaternion predictedOrn = curTrans.getRotation();
- predictedOrn += (angvel * predictedOrn) * (timeStep * btScalar(0.5));
- predictedOrn.safeNormalize();
-#else
- //Exponential map
- //google for "Practical Parameterization of Rotations Using the Exponential Map", F. Sebastian Grassia
-
- btVector3 axis;
- btScalar fAngle2 = angvel.length2();
- btScalar fAngle = 0;
- if (fAngle2 > SIMD_EPSILON)
- {
- fAngle = btSqrt(fAngle2);
- }
-
- //limit the angular motion
- if (fAngle * timeStep > ANGULAR_MOTION_THRESHOLD)
- {
- fAngle = ANGULAR_MOTION_THRESHOLD / timeStep;
- }
-
- if (fAngle < btScalar(0.001))
- {
- // use Taylor's expansions of sync function
- axis = angvel * (btScalar(0.5) * timeStep - (timeStep * timeStep * timeStep) * (btScalar(0.020833333333)) * fAngle * fAngle);
- }
- else
- {
- // sync(fAngle) = sin(c*fAngle)/t
- axis = angvel * (btSin(btScalar(0.5) * fAngle * timeStep) / fAngle);
- }
- btQuaternion dorn(axis.x(), axis.y(), axis.z(), btCos(fAngle * timeStep * btScalar(0.5)));
- btQuaternion orn0 = curTrans.getRotation();
-
- btQuaternion predictedOrn = dorn * orn0;
- predictedOrn.safeNormalize();
-#endif
- if (predictedOrn.length2() > SIMD_EPSILON)
- {
- predictedTransform.setRotation(predictedOrn);
- }
- else
- {
- predictedTransform.setBasis(curTrans.getBasis());
- }
- }
-
- static void calculateVelocityQuaternion(const btVector3& pos0, const btVector3& pos1, const btQuaternion& orn0, const btQuaternion& orn1, btScalar timeStep, btVector3& linVel, btVector3& angVel)
- {
- linVel = (pos1 - pos0) / timeStep;
- btVector3 axis;
- btScalar angle;
- if (orn0 != orn1)
- {
- calculateDiffAxisAngleQuaternion(orn0, orn1, axis, angle);
- angVel = axis * angle / timeStep;
- }
- else
- {
- angVel.setValue(0, 0, 0);
- }
- }
-
- static void calculateDiffAxisAngleQuaternion(const btQuaternion& orn0, const btQuaternion& orn1a, btVector3& axis, btScalar& angle)
- {
- btQuaternion orn1 = orn0.nearest(orn1a);
- btQuaternion dorn = orn1 * orn0.inverse();
- angle = dorn.getAngle();
- axis = btVector3(dorn.x(), dorn.y(), dorn.z());
- axis[3] = btScalar(0.);
- //check for axis length
- btScalar len = axis.length2();
- if (len < SIMD_EPSILON * SIMD_EPSILON)
- axis = btVector3(btScalar(1.), btScalar(0.), btScalar(0.));
- else
- axis /= btSqrt(len);
- }
-
- static void calculateVelocity(const btTransform& transform0, const btTransform& transform1, btScalar timeStep, btVector3& linVel, btVector3& angVel)
- {
- linVel = (transform1.getOrigin() - transform0.getOrigin()) / timeStep;
- btVector3 axis;
- btScalar angle;
- calculateDiffAxisAngle(transform0, transform1, axis, angle);
- angVel = axis * angle / timeStep;
- }
-
- static void calculateDiffAxisAngle(const btTransform& transform0, const btTransform& transform1, btVector3& axis, btScalar& angle)
- {
- btMatrix3x3 dmat = transform1.getBasis() * transform0.getBasis().inverse();
- btQuaternion dorn;
- dmat.getRotation(dorn);
-
- ///floating point inaccuracy can lead to w component > 1..., which breaks
- dorn.normalize();
-
- angle = dorn.getAngle();
- axis = btVector3(dorn.x(), dorn.y(), dorn.z());
- axis[3] = btScalar(0.);
- //check for axis length
- btScalar len = axis.length2();
- if (len < SIMD_EPSILON * SIMD_EPSILON)
- axis = btVector3(btScalar(1.), btScalar(0.), btScalar(0.));
- else
- axis /= btSqrt(len);
- }
-};
-
-///The btConvexSeparatingDistanceUtil can help speed up convex collision detection
-///by conservatively updating a cached separating distance/vector instead of re-calculating the closest distance
-class btConvexSeparatingDistanceUtil
-{
- btQuaternion m_ornA;
- btQuaternion m_ornB;
- btVector3 m_posA;
- btVector3 m_posB;
-
- btVector3 m_separatingNormal;
-
- btScalar m_boundingRadiusA;
- btScalar m_boundingRadiusB;
- btScalar m_separatingDistance;
-
-public:
- btConvexSeparatingDistanceUtil(btScalar boundingRadiusA, btScalar boundingRadiusB)
- : m_boundingRadiusA(boundingRadiusA),
- m_boundingRadiusB(boundingRadiusB),
- m_separatingDistance(0.f)
- {
- }
-
- btScalar getConservativeSeparatingDistance()
- {
- return m_separatingDistance;
- }
-
- void updateSeparatingDistance(const btTransform& transA, const btTransform& transB)
- {
- const btVector3& toPosA = transA.getOrigin();
- const btVector3& toPosB = transB.getOrigin();
- btQuaternion toOrnA = transA.getRotation();
- btQuaternion toOrnB = transB.getRotation();
-
- if (m_separatingDistance > 0.f)
- {
- btVector3 linVelA, angVelA, linVelB, angVelB;
- btTransformUtil::calculateVelocityQuaternion(m_posA, toPosA, m_ornA, toOrnA, btScalar(1.), linVelA, angVelA);
- btTransformUtil::calculateVelocityQuaternion(m_posB, toPosB, m_ornB, toOrnB, btScalar(1.), linVelB, angVelB);
- btScalar maxAngularProjectedVelocity = angVelA.length() * m_boundingRadiusA + angVelB.length() * m_boundingRadiusB;
- btVector3 relLinVel = (linVelB - linVelA);
- btScalar relLinVelocLength = relLinVel.dot(m_separatingNormal);
- if (relLinVelocLength < 0.f)
- {
- relLinVelocLength = 0.f;
- }
-
- btScalar projectedMotion = maxAngularProjectedVelocity + relLinVelocLength;
- m_separatingDistance -= projectedMotion;
- }
-
- m_posA = toPosA;
- m_posB = toPosB;
- m_ornA = toOrnA;
- m_ornB = toOrnB;
- }
-
- void initSeparatingDistance(const btVector3& separatingVector, btScalar separatingDistance, const btTransform& transA, const btTransform& transB)
- {
- m_separatingDistance = separatingDistance;
-
- if (m_separatingDistance > 0.f)
- {
- m_separatingNormal = separatingVector;
-
- const btVector3& toPosA = transA.getOrigin();
- const btVector3& toPosB = transB.getOrigin();
- btQuaternion toOrnA = transA.getRotation();
- btQuaternion toOrnB = transB.getRotation();
- m_posA = toPosA;
- m_posB = toPosB;
- m_ornA = toOrnA;
- m_ornB = toOrnB;
- }
- }
-};
-
-#endif //BT_TRANSFORM_UTIL_H
diff --git a/thirdparty/bullet/LinearMath/btVector3.cpp b/thirdparty/bullet/LinearMath/btVector3.cpp
deleted file mode 100644
index 13111157af..0000000000
--- a/thirdparty/bullet/LinearMath/btVector3.cpp
+++ /dev/null
@@ -1,1664 +0,0 @@
-/*
- Copyright (c) 2011 Apple Inc.
- http://continuousphysics.com/Bullet/
-
- This software is provided 'as-is', without any express or implied warranty.
- In no event will the authors be held liable for any damages arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it freely,
- subject to the following restrictions:
-
- 1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
-
- This source version has been altered.
- */
-
-#if defined(_WIN32) || defined(__i386__)
-#define BT_USE_SSE_IN_API
-#endif
-
-#include "btVector3.h"
-
-#if defined BT_USE_SIMD_VECTOR3
-
-#if DEBUG
-#include <string.h> //for memset
-#endif
-
-#ifdef __APPLE__
-#include <stdint.h>
-typedef float float4 __attribute__((vector_size(16)));
-#else
-#define float4 __m128
-#endif
-//typedef uint32_t uint4 __attribute__ ((vector_size(16)));
-
-#if defined BT_USE_SSE || defined _WIN32
-
-#define LOG2_ARRAY_SIZE 6
-#define STACK_ARRAY_COUNT (1UL << LOG2_ARRAY_SIZE)
-
-#include <emmintrin.h>
-
-long _maxdot_large(const float *vv, const float *vec, unsigned long count, float *dotResult);
-long _maxdot_large(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- const float4 *vertices = (const float4 *)vv;
- static const unsigned char indexTable[16] = {(unsigned char)-1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
- float4 dotMax = btAssign128(-BT_INFINITY, -BT_INFINITY, -BT_INFINITY, -BT_INFINITY);
- float4 vvec = _mm_loadu_ps(vec);
- float4 vHi = btCastiTo128f(_mm_shuffle_epi32(btCastfTo128i(vvec), 0xaa)); /// zzzz
- float4 vLo = _mm_movelh_ps(vvec, vvec); /// xyxy
-
- long maxIndex = -1L;
-
- size_t segment = 0;
- float4 stack_array[STACK_ARRAY_COUNT];
-
-#if DEBUG
- //memset( stack_array, -1, STACK_ARRAY_COUNT * sizeof(stack_array[0]) );
-#endif
-
- size_t index;
- float4 max;
- // Faster loop without cleanup code for full tiles
- for (segment = 0; segment + STACK_ARRAY_COUNT * 4 <= count; segment += STACK_ARRAY_COUNT * 4)
- {
- max = dotMax;
-
- for (index = 0; index < STACK_ARRAY_COUNT; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- // It is too costly to keep the index of the max here. We will look for it again later. We save a lot of work this way.
- }
-
- // If we found a new max
- if (0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(max, dotMax)))
- {
- // copy the new max across all lanes of our max accumulator
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0x4e));
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0xb1));
-
- dotMax = max;
-
- // find first occurrence of that max
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], max))); index++) // local_count must be a multiple of 4
- {
- }
- // record where it is.
- maxIndex = 4 * index + segment + indexTable[test];
- }
- }
-
- // account for work we've already done
- count -= segment;
-
- // Deal with the last < STACK_ARRAY_COUNT vectors
- max = dotMax;
- index = 0;
-
- if (btUnlikely(count > 16))
- {
- for (; index + 4 <= count / 4; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
-
- // It is too costly to keep the index of the max here. We will look for it again later. We save a lot of work this way.
- }
- }
-
- size_t localCount = (count & -4L) - 4 * index;
- if (localCount)
- {
-#ifdef __APPLE__
- float4 t0, t1, t2, t3, t4;
- float4 *sap = &stack_array[index + localCount / 4];
- vertices += localCount; // counter the offset
- size_t byteIndex = -(localCount) * sizeof(float);
- //AT&T Code style assembly
- asm volatile(
- ".align 4 \n\
- 0: movaps %[max], %[t2] // move max out of the way to avoid propagating NaNs in max \n\
- movaps (%[vertices], %[byteIndex], 4), %[t0] // vertices[0] \n\
- movaps 16(%[vertices], %[byteIndex], 4), %[t1] // vertices[1] \n\
- movaps %[t0], %[max] // vertices[0] \n\
- movlhps %[t1], %[max] // x0y0x1y1 \n\
- movaps 32(%[vertices], %[byteIndex], 4), %[t3] // vertices[2] \n\
- movaps 48(%[vertices], %[byteIndex], 4), %[t4] // vertices[3] \n\
- mulps %[vLo], %[max] // x0y0x1y1 * vLo \n\
- movhlps %[t0], %[t1] // z0w0z1w1 \n\
- movaps %[t3], %[t0] // vertices[2] \n\
- movlhps %[t4], %[t0] // x2y2x3y3 \n\
- mulps %[vLo], %[t0] // x2y2x3y3 * vLo \n\
- movhlps %[t3], %[t4] // z2w2z3w3 \n\
- shufps $0x88, %[t4], %[t1] // z0z1z2z3 \n\
- mulps %[vHi], %[t1] // z0z1z2z3 * vHi \n\
- movaps %[max], %[t3] // x0y0x1y1 * vLo \n\
- shufps $0x88, %[t0], %[max] // x0x1x2x3 * vLo.x \n\
- shufps $0xdd, %[t0], %[t3] // y0y1y2y3 * vLo.y \n\
- addps %[t3], %[max] // x + y \n\
- addps %[t1], %[max] // x + y + z \n\
- movaps %[max], (%[sap], %[byteIndex]) // record result for later scrutiny \n\
- maxps %[t2], %[max] // record max, restore max \n\
- add $16, %[byteIndex] // advance loop counter\n\
- jnz 0b \n\
- "
- : [max] "+x"(max), [t0] "=&x"(t0), [t1] "=&x"(t1), [t2] "=&x"(t2), [t3] "=&x"(t3), [t4] "=&x"(t4), [byteIndex] "+r"(byteIndex)
- : [vLo] "x"(vLo), [vHi] "x"(vHi), [vertices] "r"(vertices), [sap] "r"(sap)
- : "memory", "cc");
- index += localCount / 4;
-#else
- {
- for (unsigned int i = 0; i < localCount / 4; i++, index++)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
- }
- }
-#endif //__APPLE__
- }
-
- // process the last few points
- if (count & 3)
- {
- float4 v0, v1, v2, x, y, z;
- switch (count & 3)
- {
- case 3:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
-
- // Calculate 3 dot products, transpose, duplicate v2
- float4 lo0 = _mm_movelh_ps(v0, v1); // xyxy.lo
- float4 hi0 = _mm_movehl_ps(v1, v0); // z?z?.lo
- lo0 = lo0 * vLo;
- z = _mm_shuffle_ps(hi0, v2, 0xa8); // z0z1z2z2
- z = z * vHi;
- float4 lo1 = _mm_movelh_ps(v2, v2); // xyxy
- lo1 = lo1 * vLo;
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- }
- break;
- case 2:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- float4 xy = _mm_movelh_ps(v0, v1);
- z = _mm_movehl_ps(v1, v0);
- xy = xy * vLo;
- z = _mm_shuffle_ps(z, z, 0xa8);
- x = _mm_shuffle_ps(xy, xy, 0xa8);
- y = _mm_shuffle_ps(xy, xy, 0xfd);
- z = z * vHi;
- }
- break;
- case 1:
- {
- float4 xy = vertices[0];
- z = _mm_shuffle_ps(xy, xy, 0xaa);
- xy = xy * vLo;
- z = z * vHi;
- x = _mm_shuffle_ps(xy, xy, 0);
- y = _mm_shuffle_ps(xy, xy, 0x55);
- }
- break;
- }
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- max = _mm_max_ps(x, max); // control the order here so that max is never NaN even if x is nan
- index++;
- }
-
- // if we found a new max.
- if (0 == segment || 0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(max, dotMax)))
- { // we found a new max. Search for it
- // find max across the max vector, place in all elements of max -- big latency hit here
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0x4e));
- max = _mm_max_ps(max, (float4)_mm_shuffle_ps(max, max, 0xb1));
-
- // It is slightly faster to do this part in scalar code when count < 8. However, the common case for
- // this where it actually makes a difference is handled in the early out at the top of the function,
- // so it is less than a 1% difference here. I opted for improved code size, fewer branches and reduced
- // complexity, and removed it.
-
- dotMax = max;
-
- // scan for the first occurence of max in the array
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], max))); index++) // local_count must be a multiple of 4
- {
- }
- maxIndex = 4 * index + segment + indexTable[test];
- }
-
- _mm_store_ss(dotResult, dotMax);
- return maxIndex;
-}
-
-long _mindot_large(const float *vv, const float *vec, unsigned long count, float *dotResult);
-
-long _mindot_large(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- const float4 *vertices = (const float4 *)vv;
- static const unsigned char indexTable[16] = {(unsigned char)-1, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0};
- float4 dotmin = btAssign128(BT_INFINITY, BT_INFINITY, BT_INFINITY, BT_INFINITY);
- float4 vvec = _mm_loadu_ps(vec);
- float4 vHi = btCastiTo128f(_mm_shuffle_epi32(btCastfTo128i(vvec), 0xaa)); /// zzzz
- float4 vLo = _mm_movelh_ps(vvec, vvec); /// xyxy
-
- long minIndex = -1L;
-
- size_t segment = 0;
- float4 stack_array[STACK_ARRAY_COUNT];
-
-#if DEBUG
- //memset( stack_array, -1, STACK_ARRAY_COUNT * sizeof(stack_array[0]) );
-#endif
-
- size_t index;
- float4 min;
- // Faster loop without cleanup code for full tiles
- for (segment = 0; segment + STACK_ARRAY_COUNT * 4 <= count; segment += STACK_ARRAY_COUNT * 4)
- {
- min = dotmin;
-
- for (index = 0; index < STACK_ARRAY_COUNT; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- // It is too costly to keep the index of the min here. We will look for it again later. We save a lot of work this way.
- }
-
- // If we found a new min
- if (0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(min, dotmin)))
- {
- // copy the new min across all lanes of our min accumulator
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0x4e));
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0xb1));
-
- dotmin = min;
-
- // find first occurrence of that min
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], min))); index++) // local_count must be a multiple of 4
- {
- }
- // record where it is.
- minIndex = 4 * index + segment + indexTable[test];
- }
- }
-
- // account for work we've already done
- count -= segment;
-
- // Deal with the last < STACK_ARRAY_COUNT vectors
- min = dotmin;
- index = 0;
-
- if (btUnlikely(count > 16))
- {
- for (; index + 4 <= count / 4; index += 4)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 1] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 2] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
- v3 = vertices[3];
- vertices += 4;
-
- lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- z = _mm_shuffle_ps(hi0, hi1, 0x88);
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index + 3] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
-
- // It is too costly to keep the index of the min here. We will look for it again later. We save a lot of work this way.
- }
- }
-
- size_t localCount = (count & -4L) - 4 * index;
- if (localCount)
- {
-#ifdef __APPLE__
- vertices += localCount; // counter the offset
- float4 t0, t1, t2, t3, t4;
- size_t byteIndex = -(localCount) * sizeof(float);
- float4 *sap = &stack_array[index + localCount / 4];
-
- asm volatile(
- ".align 4 \n\
- 0: movaps %[min], %[t2] // move min out of the way to avoid propagating NaNs in min \n\
- movaps (%[vertices], %[byteIndex], 4), %[t0] // vertices[0] \n\
- movaps 16(%[vertices], %[byteIndex], 4), %[t1] // vertices[1] \n\
- movaps %[t0], %[min] // vertices[0] \n\
- movlhps %[t1], %[min] // x0y0x1y1 \n\
- movaps 32(%[vertices], %[byteIndex], 4), %[t3] // vertices[2] \n\
- movaps 48(%[vertices], %[byteIndex], 4), %[t4] // vertices[3] \n\
- mulps %[vLo], %[min] // x0y0x1y1 * vLo \n\
- movhlps %[t0], %[t1] // z0w0z1w1 \n\
- movaps %[t3], %[t0] // vertices[2] \n\
- movlhps %[t4], %[t0] // x2y2x3y3 \n\
- movhlps %[t3], %[t4] // z2w2z3w3 \n\
- mulps %[vLo], %[t0] // x2y2x3y3 * vLo \n\
- shufps $0x88, %[t4], %[t1] // z0z1z2z3 \n\
- mulps %[vHi], %[t1] // z0z1z2z3 * vHi \n\
- movaps %[min], %[t3] // x0y0x1y1 * vLo \n\
- shufps $0x88, %[t0], %[min] // x0x1x2x3 * vLo.x \n\
- shufps $0xdd, %[t0], %[t3] // y0y1y2y3 * vLo.y \n\
- addps %[t3], %[min] // x + y \n\
- addps %[t1], %[min] // x + y + z \n\
- movaps %[min], (%[sap], %[byteIndex]) // record result for later scrutiny \n\
- minps %[t2], %[min] // record min, restore min \n\
- add $16, %[byteIndex] // advance loop counter\n\
- jnz 0b \n\
- "
- : [min] "+x"(min), [t0] "=&x"(t0), [t1] "=&x"(t1), [t2] "=&x"(t2), [t3] "=&x"(t3), [t4] "=&x"(t4), [byteIndex] "+r"(byteIndex)
- : [vLo] "x"(vLo), [vHi] "x"(vHi), [vertices] "r"(vertices), [sap] "r"(sap)
- : "memory", "cc");
- index += localCount / 4;
-#else
- {
- for (unsigned int i = 0; i < localCount / 4; i++, index++)
- { // do four dot products at a time. Carefully avoid touching the w element.
- float4 v0 = vertices[0];
- float4 v1 = vertices[1];
- float4 v2 = vertices[2];
- float4 v3 = vertices[3];
- vertices += 4;
-
- float4 lo0 = _mm_movelh_ps(v0, v1); // x0y0x1y1
- float4 hi0 = _mm_movehl_ps(v1, v0); // z0?0z1?1
- float4 lo1 = _mm_movelh_ps(v2, v3); // x2y2x3y3
- float4 hi1 = _mm_movehl_ps(v3, v2); // z2?2z3?3
-
- lo0 = lo0 * vLo;
- lo1 = lo1 * vLo;
- float4 z = _mm_shuffle_ps(hi0, hi1, 0x88);
- float4 x = _mm_shuffle_ps(lo0, lo1, 0x88);
- float4 y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- z = z * vHi;
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that max is never NaN even if x is nan
- }
- }
-
-#endif
- }
-
- // process the last few points
- if (count & 3)
- {
- float4 v0, v1, v2, x, y, z;
- switch (count & 3)
- {
- case 3:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- v2 = vertices[2];
-
- // Calculate 3 dot products, transpose, duplicate v2
- float4 lo0 = _mm_movelh_ps(v0, v1); // xyxy.lo
- float4 hi0 = _mm_movehl_ps(v1, v0); // z?z?.lo
- lo0 = lo0 * vLo;
- z = _mm_shuffle_ps(hi0, v2, 0xa8); // z0z1z2z2
- z = z * vHi;
- float4 lo1 = _mm_movelh_ps(v2, v2); // xyxy
- lo1 = lo1 * vLo;
- x = _mm_shuffle_ps(lo0, lo1, 0x88);
- y = _mm_shuffle_ps(lo0, lo1, 0xdd);
- }
- break;
- case 2:
- {
- v0 = vertices[0];
- v1 = vertices[1];
- float4 xy = _mm_movelh_ps(v0, v1);
- z = _mm_movehl_ps(v1, v0);
- xy = xy * vLo;
- z = _mm_shuffle_ps(z, z, 0xa8);
- x = _mm_shuffle_ps(xy, xy, 0xa8);
- y = _mm_shuffle_ps(xy, xy, 0xfd);
- z = z * vHi;
- }
- break;
- case 1:
- {
- float4 xy = vertices[0];
- z = _mm_shuffle_ps(xy, xy, 0xaa);
- xy = xy * vLo;
- z = z * vHi;
- x = _mm_shuffle_ps(xy, xy, 0);
- y = _mm_shuffle_ps(xy, xy, 0x55);
- }
- break;
- }
- x = x + y;
- x = x + z;
- stack_array[index] = x;
- min = _mm_min_ps(x, min); // control the order here so that min is never NaN even if x is nan
- index++;
- }
-
- // if we found a new min.
- if (0 == segment || 0xf != _mm_movemask_ps((float4)_mm_cmpeq_ps(min, dotmin)))
- { // we found a new min. Search for it
- // find min across the min vector, place in all elements of min -- big latency hit here
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0x4e));
- min = _mm_min_ps(min, (float4)_mm_shuffle_ps(min, min, 0xb1));
-
- // It is slightly faster to do this part in scalar code when count < 8. However, the common case for
- // this where it actually makes a difference is handled in the early out at the top of the function,
- // so it is less than a 1% difference here. I opted for improved code size, fewer branches and reduced
- // complexity, and removed it.
-
- dotmin = min;
-
- // scan for the first occurence of min in the array
- size_t test;
- for (index = 0; 0 == (test = _mm_movemask_ps(_mm_cmpeq_ps(stack_array[index], min))); index++) // local_count must be a multiple of 4
- {
- }
- minIndex = 4 * index + segment + indexTable[test];
- }
-
- _mm_store_ss(dotResult, dotmin);
- return minIndex;
-}
-
-#elif defined BT_USE_NEON
-
-#define ARM_NEON_GCC_COMPATIBILITY 1
-#include <arm_neon.h>
-#include <sys/types.h>
-#include <sys/sysctl.h> //for sysctlbyname
-
-static long _maxdot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long _maxdot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long _maxdot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long _mindot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long _mindot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult);
-static long _mindot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult);
-
-long (*_maxdot_large)(const float *vv, const float *vec, unsigned long count, float *dotResult) = _maxdot_large_sel;
-long (*_mindot_large)(const float *vv, const float *vec, unsigned long count, float *dotResult) = _mindot_large_sel;
-
-static inline uint32_t btGetCpuCapabilities(void)
-{
- static uint32_t capabilities = 0;
- static bool testedCapabilities = false;
-
- if (0 == testedCapabilities)
- {
- uint32_t hasFeature = 0;
- size_t featureSize = sizeof(hasFeature);
- int err = sysctlbyname("hw.optional.neon_hpfp", &hasFeature, &featureSize, NULL, 0);
-
- if (0 == err && hasFeature)
- capabilities |= 0x2000;
-
- testedCapabilities = true;
- }
-
- return capabilities;
-}
-
-static long _maxdot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- if (btGetCpuCapabilities() & 0x2000)
- _maxdot_large = _maxdot_large_v1;
- else
- _maxdot_large = _maxdot_large_v0;
-
- return _maxdot_large(vv, vec, count, dotResult);
-}
-
-static long _mindot_large_sel(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- if (btGetCpuCapabilities() & 0x2000)
- _mindot_large = _mindot_large_v1;
- else
- _mindot_large = _mindot_large_v0;
-
- return _mindot_large(vv, vec, count, dotResult);
-}
-
-#if defined __arm__
-#define vld1q_f32_aligned_postincrement(_ptr) ({ float32x4_t _r; asm( "vld1.f32 {%0}, [%1, :128]!\n" : "=w" (_r), "+r" (_ptr) ); /*return*/ _r; })
-#else
-//support 64bit arm
-#define vld1q_f32_aligned_postincrement(_ptr) ({ float32x4_t _r = ((float32x4_t*)(_ptr))[0]; (_ptr) = (const float*) ((const char*)(_ptr) + 16L); /*return*/ _r; })
-#endif
-
-long _maxdot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- unsigned long i = 0;
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x2_t vLo = vget_low_f32(vvec);
- float32x2_t vHi = vdup_lane_f32(vget_high_f32(vvec), 0);
- float32x2_t dotMaxLo = (float32x2_t){-BT_INFINITY, -BT_INFINITY};
- float32x2_t dotMaxHi = (float32x2_t){-BT_INFINITY, -BT_INFINITY};
- uint32x2_t indexLo = (uint32x2_t){0, 1};
- uint32x2_t indexHi = (uint32x2_t){2, 3};
- uint32x2_t iLo = (uint32x2_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1)};
- uint32x2_t iHi = (uint32x2_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1)};
- const uint32x2_t four = (uint32x2_t){4, 4};
-
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- uint32x2_t maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- xy0 = vmul_f32(vget_low_f32(v0), vLo);
- xy1 = vmul_f32(vget_low_f32(v1), vLo);
- xy2 = vmul_f32(vget_low_f32(v2), vLo);
- xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- zLo = vmul_f32(z0.val[0], vHi);
- zHi = vmul_f32(z1.val[0], vHi);
-
- rLo = vpadd_f32(xy0, xy1);
- rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- maskLo = vcgt_f32(rLo, dotMaxLo);
- maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- uint32x2_t maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
-
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(vdup_lane_f32(vget_high_f32(v2), 0), vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy2);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- uint32x2_t maskHi = vcgt_f32(rHi, dotMaxHi);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- dotMaxHi = vbsl_f32(maskHi, rHi, dotMaxHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- }
- break;
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- rLo = vadd_f32(rLo, zLo);
-
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t z0 = vdup_lane_f32(vget_high_f32(v0), 0);
- float32x2_t zLo = vmul_f32(z0, vHi);
- float32x2_t rLo = vpadd_f32(xy0, xy0);
- rLo = vadd_f32(rLo, zLo);
- uint32x2_t maskLo = vcgt_f32(rLo, dotMaxLo);
- dotMaxLo = vbsl_f32(maskLo, rLo, dotMaxLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vcgt_f32(dotMaxHi, dotMaxLo);
- dotMaxLo = vbsl_f32(mask, dotMaxHi, dotMaxLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- // select best answer between even and odd results
- dotMaxHi = vdup_lane_f32(dotMaxLo, 1);
- iHi = vdup_lane_u32(iLo, 1);
- mask = vcgt_f32(dotMaxHi, dotMaxLo);
- dotMaxLo = vbsl_f32(mask, dotMaxHi, dotMaxLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- *dotResult = vget_lane_f32(dotMaxLo, 0);
- return vget_lane_u32(iLo, 0);
-}
-
-long _maxdot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x4_t vLo = vcombine_f32(vget_low_f32(vvec), vget_low_f32(vvec));
- float32x4_t vHi = vdupq_lane_f32(vget_high_f32(vvec), 0);
- const uint32x4_t four = (uint32x4_t){4, 4, 4, 4};
- uint32x4_t local_index = (uint32x4_t){0, 1, 2, 3};
- uint32x4_t index = (uint32x4_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), static_cast<uint32_t>(-1)};
- float32x4_t maxDot = (float32x4_t){-BT_INFINITY, -BT_INFINITY, -BT_INFINITY, -BT_INFINITY};
-
- unsigned long i = 0;
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- zb = vuzpq_f32(z0, z1);
- z = vmulq_f32(zb.val[0], vHi);
- xy = vuzpq_f32(xy0, xy1);
- x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v2));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v2));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
-
- xy0 = vmulq_f32(xy0, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z0);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v0));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z = vdupq_lane_f32(vget_high_f32(v0), 0);
-
- xy0 = vmulq_f32(xy0, vLo);
-
- z = vmulq_f32(z, vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcgtq_f32(x, maxDot);
- maxDot = vbslq_f32(mask, x, maxDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vcgt_f32(vget_high_f32(maxDot), vget_low_f32(maxDot));
- float32x2_t maxDot2 = vbsl_f32(mask, vget_high_f32(maxDot), vget_low_f32(maxDot));
- uint32x2_t index2 = vbsl_u32(mask, vget_high_u32(index), vget_low_u32(index));
-
- // select best answer between even and odd results
- float32x2_t maxDotO = vdup_lane_f32(maxDot2, 1);
- uint32x2_t indexHi = vdup_lane_u32(index2, 1);
- mask = vcgt_f32(maxDotO, maxDot2);
- maxDot2 = vbsl_f32(mask, maxDotO, maxDot2);
- index2 = vbsl_u32(mask, indexHi, index2);
-
- *dotResult = vget_lane_f32(maxDot2, 0);
- return vget_lane_u32(index2, 0);
-}
-
-long _mindot_large_v0(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- unsigned long i = 0;
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x2_t vLo = vget_low_f32(vvec);
- float32x2_t vHi = vdup_lane_f32(vget_high_f32(vvec), 0);
- float32x2_t dotMinLo = (float32x2_t){BT_INFINITY, BT_INFINITY};
- float32x2_t dotMinHi = (float32x2_t){BT_INFINITY, BT_INFINITY};
- uint32x2_t indexLo = (uint32x2_t){0, 1};
- uint32x2_t indexHi = (uint32x2_t){2, 3};
- uint32x2_t iLo = (uint32x2_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1)};
- uint32x2_t iHi = (uint32x2_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1)};
- const uint32x2_t four = (uint32x2_t){4, 4};
-
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- uint32x2_t maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- xy0 = vmul_f32(vget_low_f32(v0), vLo);
- xy1 = vmul_f32(vget_low_f32(v1), vLo);
- xy2 = vmul_f32(vget_low_f32(v2), vLo);
- xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- zLo = vmul_f32(z0.val[0], vHi);
- zHi = vmul_f32(z1.val[0], vHi);
-
- rLo = vpadd_f32(xy0, xy1);
- rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- maskLo = vclt_f32(rLo, dotMinLo);
- maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
- float32x2_t xy3 = vmul_f32(vget_low_f32(v3), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2x2_t z1 = vtrn_f32(vget_high_f32(v2), vget_high_f32(v3));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(z1.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy3);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- uint32x2_t maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- indexLo = vadd_u32(indexLo, four);
- indexHi = vadd_u32(indexHi, four);
- }
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
- float32x2_t xy2 = vmul_f32(vget_low_f32(v2), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
- float32x2_t zHi = vmul_f32(vdup_lane_f32(vget_high_f32(v2), 0), vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- float32x2_t rHi = vpadd_f32(xy2, xy2);
- rLo = vadd_f32(rLo, zLo);
- rHi = vadd_f32(rHi, zHi);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- uint32x2_t maskHi = vclt_f32(rHi, dotMinHi);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- dotMinHi = vbsl_f32(maskHi, rHi, dotMinHi);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- iHi = vbsl_u32(maskHi, indexHi, iHi);
- }
- break;
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t xy1 = vmul_f32(vget_low_f32(v1), vLo);
-
- float32x2x2_t z0 = vtrn_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x2_t zLo = vmul_f32(z0.val[0], vHi);
-
- float32x2_t rLo = vpadd_f32(xy0, xy1);
- rLo = vadd_f32(rLo, zLo);
-
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x2_t xy0 = vmul_f32(vget_low_f32(v0), vLo);
- float32x2_t z0 = vdup_lane_f32(vget_high_f32(v0), 0);
- float32x2_t zLo = vmul_f32(z0, vHi);
- float32x2_t rLo = vpadd_f32(xy0, xy0);
- rLo = vadd_f32(rLo, zLo);
- uint32x2_t maskLo = vclt_f32(rLo, dotMinLo);
- dotMinLo = vbsl_f32(maskLo, rLo, dotMinLo);
- iLo = vbsl_u32(maskLo, indexLo, iLo);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vclt_f32(dotMinHi, dotMinLo);
- dotMinLo = vbsl_f32(mask, dotMinHi, dotMinLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- // select best answer between even and odd results
- dotMinHi = vdup_lane_f32(dotMinLo, 1);
- iHi = vdup_lane_u32(iLo, 1);
- mask = vclt_f32(dotMinHi, dotMinLo);
- dotMinLo = vbsl_f32(mask, dotMinHi, dotMinLo);
- iLo = vbsl_u32(mask, iHi, iLo);
-
- *dotResult = vget_lane_f32(dotMinLo, 0);
- return vget_lane_u32(iLo, 0);
-}
-
-long _mindot_large_v1(const float *vv, const float *vec, unsigned long count, float *dotResult)
-{
- float32x4_t vvec = vld1q_f32_aligned_postincrement(vec);
- float32x4_t vLo = vcombine_f32(vget_low_f32(vvec), vget_low_f32(vvec));
- float32x4_t vHi = vdupq_lane_f32(vget_high_f32(vvec), 0);
- const uint32x4_t four = (uint32x4_t){4, 4, 4, 4};
- uint32x4_t local_index = (uint32x4_t){0, 1, 2, 3};
- uint32x4_t index = (uint32x4_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), static_cast<uint32_t>(-1)};
- float32x4_t minDot = (float32x4_t){BT_INFINITY, BT_INFINITY, BT_INFINITY, BT_INFINITY};
-
- unsigned long i = 0;
- for (; i + 8 <= count; i += 8)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
-
- v0 = vld1q_f32_aligned_postincrement(vv);
- v1 = vld1q_f32_aligned_postincrement(vv);
- v2 = vld1q_f32_aligned_postincrement(vv);
- v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- zb = vuzpq_f32(z0, z1);
- z = vmulq_f32(zb.val[0], vHi);
- xy = vuzpq_f32(xy0, xy1);
- x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- for (; i + 4 <= count; i += 4)
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v3 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v3));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v3));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
-
- switch (count & 3)
- {
- case 3:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v2 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- float32x4_t xy1 = vcombine_f32(vget_low_f32(v2), vget_low_f32(v2));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
- float32x4_t z1 = vcombine_f32(vget_high_f32(v2), vget_high_f32(v2));
-
- xy0 = vmulq_f32(xy0, vLo);
- xy1 = vmulq_f32(xy1, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z1);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy1);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 2:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
- float32x4_t v1 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v1));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z0 = vcombine_f32(vget_high_f32(v0), vget_high_f32(v1));
-
- xy0 = vmulq_f32(xy0, vLo);
-
- float32x4x2_t zb = vuzpq_f32(z0, z0);
- float32x4_t z = vmulq_f32(zb.val[0], vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- case 1:
- {
- float32x4_t v0 = vld1q_f32_aligned_postincrement(vv);
-
- // the next two lines should resolve to a single vswp d, d
- float32x4_t xy0 = vcombine_f32(vget_low_f32(v0), vget_low_f32(v0));
- // the next two lines should resolve to a single vswp d, d
- float32x4_t z = vdupq_lane_f32(vget_high_f32(v0), 0);
-
- xy0 = vmulq_f32(xy0, vLo);
-
- z = vmulq_f32(z, vHi);
- float32x4x2_t xy = vuzpq_f32(xy0, xy0);
- float32x4_t x = vaddq_f32(xy.val[0], xy.val[1]);
- x = vaddq_f32(x, z);
-
- uint32x4_t mask = vcltq_f32(x, minDot);
- minDot = vbslq_f32(mask, x, minDot);
- index = vbslq_u32(mask, local_index, index);
- local_index = vaddq_u32(local_index, four);
- }
- break;
-
- default:
- break;
- }
-
- // select best answer between hi and lo results
- uint32x2_t mask = vclt_f32(vget_high_f32(minDot), vget_low_f32(minDot));
- float32x2_t minDot2 = vbsl_f32(mask, vget_high_f32(minDot), vget_low_f32(minDot));
- uint32x2_t index2 = vbsl_u32(mask, vget_high_u32(index), vget_low_u32(index));
-
- // select best answer between even and odd results
- float32x2_t minDotO = vdup_lane_f32(minDot2, 1);
- uint32x2_t indexHi = vdup_lane_u32(index2, 1);
- mask = vclt_f32(minDotO, minDot2);
- minDot2 = vbsl_f32(mask, minDotO, minDot2);
- index2 = vbsl_u32(mask, indexHi, index2);
-
- *dotResult = vget_lane_f32(minDot2, 0);
- return vget_lane_u32(index2, 0);
-}
-
-#else
-#error Unhandled __APPLE__ arch
-#endif
-
-#endif /* __APPLE__ */
diff --git a/thirdparty/bullet/LinearMath/btVector3.h b/thirdparty/bullet/LinearMath/btVector3.h
deleted file mode 100644
index d65ed9808d..0000000000
--- a/thirdparty/bullet/LinearMath/btVector3.h
+++ /dev/null
@@ -1,1336 +0,0 @@
-/*
-Copyright (c) 2003-2006 Gino van den Bergen / Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BT_VECTOR3_H
-#define BT_VECTOR3_H
-
-//#include <stdint.h>
-#include "btScalar.h"
-#include "btMinMax.h"
-#include "btAlignedAllocator.h"
-
-#ifdef BT_USE_DOUBLE_PRECISION
-#define btVector3Data btVector3DoubleData
-#define btVector3DataName "btVector3DoubleData"
-#else
-#define btVector3Data btVector3FloatData
-#define btVector3DataName "btVector3FloatData"
-#endif //BT_USE_DOUBLE_PRECISION
-
-#if defined BT_USE_SSE
-
-//typedef uint32_t __m128i __attribute__ ((vector_size(16)));
-
-#ifdef _MSC_VER
-#pragma warning(disable : 4556) // value of intrinsic immediate argument '4294967239' is out of range '0 - 255'
-#endif
-
-#define BT_SHUFFLE(x, y, z, w) (((w) << 6 | (z) << 4 | (y) << 2 | (x)) & 0xff)
-//#define bt_pshufd_ps( _a, _mask ) (__m128) _mm_shuffle_epi32((__m128i)(_a), (_mask) )
-#define bt_pshufd_ps(_a, _mask) _mm_shuffle_ps((_a), (_a), (_mask))
-#define bt_splat3_ps(_a, _i) bt_pshufd_ps((_a), BT_SHUFFLE(_i, _i, _i, 3))
-#define bt_splat_ps(_a, _i) bt_pshufd_ps((_a), BT_SHUFFLE(_i, _i, _i, _i))
-
-#define btv3AbsiMask (_mm_set_epi32(0x00000000, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF))
-#define btvAbsMask (_mm_set_epi32(0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF))
-#define btvFFF0Mask (_mm_set_epi32(0x00000000, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF))
-#define btv3AbsfMask btCastiTo128f(btv3AbsiMask)
-#define btvFFF0fMask btCastiTo128f(btvFFF0Mask)
-#define btvxyzMaskf btvFFF0fMask
-#define btvAbsfMask btCastiTo128f(btvAbsMask)
-
-//there is an issue with XCode 3.2 (LCx errors)
-#define btvMzeroMask (_mm_set_ps(-0.0f, -0.0f, -0.0f, -0.0f))
-#define v1110 (_mm_set_ps(0.0f, 1.0f, 1.0f, 1.0f))
-#define vHalf (_mm_set_ps(0.5f, 0.5f, 0.5f, 0.5f))
-#define v1_5 (_mm_set_ps(1.5f, 1.5f, 1.5f, 1.5f))
-
-//const __m128 ATTRIBUTE_ALIGNED16(btvMzeroMask) = {-0.0f, -0.0f, -0.0f, -0.0f};
-//const __m128 ATTRIBUTE_ALIGNED16(v1110) = {1.0f, 1.0f, 1.0f, 0.0f};
-//const __m128 ATTRIBUTE_ALIGNED16(vHalf) = {0.5f, 0.5f, 0.5f, 0.5f};
-//const __m128 ATTRIBUTE_ALIGNED16(v1_5) = {1.5f, 1.5f, 1.5f, 1.5f};
-
-#endif
-
-#ifdef BT_USE_NEON
-
-const float32x4_t ATTRIBUTE_ALIGNED16(btvMzeroMask) = (float32x4_t){-0.0f, -0.0f, -0.0f, -0.0f};
-const int32x4_t ATTRIBUTE_ALIGNED16(btvFFF0Mask) = (int32x4_t){static_cast<int32_t>(0xFFFFFFFF),
- static_cast<int32_t>(0xFFFFFFFF), static_cast<int32_t>(0xFFFFFFFF), 0x0};
-const int32x4_t ATTRIBUTE_ALIGNED16(btvAbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF};
-const int32x4_t ATTRIBUTE_ALIGNED16(btv3AbsMask) = (int32x4_t){0x7FFFFFFF, 0x7FFFFFFF, 0x7FFFFFFF, 0x0};
-
-#endif
-
-/**@brief btVector3 can be used to represent 3D points and vectors.
- * It has an un-used w component to suit 16-byte alignment when btVector3 is stored in containers. This extra component can be used by derived classes (Quaternion?) or by user
- * Ideally, this class should be replaced by a platform optimized SIMD version that keeps the data in registers
- */
-ATTRIBUTE_ALIGNED16(class)
-btVector3
-{
-public:
- BT_DECLARE_ALIGNED_ALLOCATOR();
-
-#if defined(__SPU__) && defined(__CELLOS_LV2__)
- btScalar m_floats[4];
-
-public:
- SIMD_FORCE_INLINE const vec_float4& get128() const
- {
- return *((const vec_float4*)&m_floats[0]);
- }
-
-public:
-#else //__CELLOS_LV2__ __SPU__
-#if defined(BT_USE_SSE) || defined(BT_USE_NEON) // _WIN32 || ARM
- union {
- btSimdFloat4 mVec128;
- btScalar m_floats[4];
- };
- SIMD_FORCE_INLINE btSimdFloat4 get128() const
- {
- return mVec128;
- }
- SIMD_FORCE_INLINE void set128(btSimdFloat4 v128)
- {
- mVec128 = v128;
- }
-#else
- btScalar m_floats[4];
-#endif
-#endif //__CELLOS_LV2__ __SPU__
-
-public:
- /**@brief No initialization constructor */
- SIMD_FORCE_INLINE btVector3()
- {
- }
-
- /**@brief Constructor from scalars
- * @param x X value
- * @param y Y value
- * @param z Z value
- */
- SIMD_FORCE_INLINE btVector3(const btScalar& _x, const btScalar& _y, const btScalar& _z)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = btScalar(0.f);
- }
-
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- // Set Vector
- SIMD_FORCE_INLINE btVector3(btSimdFloat4 v)
- {
- mVec128 = v;
- }
-
- // Copy constructor
- SIMD_FORCE_INLINE btVector3(const btVector3& rhs)
- {
- mVec128 = rhs.mVec128;
- }
-
- // Assignment Operator
- SIMD_FORCE_INLINE btVector3&
- operator=(const btVector3& v)
- {
- mVec128 = v.mVec128;
-
- return *this;
- }
-#endif // #if defined (BT_USE_SSE_IN_API) || defined (BT_USE_NEON)
-
- /**@brief Add a vector to this one
- * @param The vector to add to this one */
- SIMD_FORCE_INLINE btVector3& operator+=(const btVector3& v)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_add_ps(mVec128, v.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vaddq_f32(mVec128, v.mVec128);
-#else
- m_floats[0] += v.m_floats[0];
- m_floats[1] += v.m_floats[1];
- m_floats[2] += v.m_floats[2];
-#endif
- return *this;
- }
-
- /**@brief Subtract a vector from this one
- * @param The vector to subtract */
- SIMD_FORCE_INLINE btVector3& operator-=(const btVector3& v)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_sub_ps(mVec128, v.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vsubq_f32(mVec128, v.mVec128);
-#else
- m_floats[0] -= v.m_floats[0];
- m_floats[1] -= v.m_floats[1];
- m_floats[2] -= v.m_floats[2];
-#endif
- return *this;
- }
-
- /**@brief Scale the vector
- * @param s Scale factor */
- SIMD_FORCE_INLINE btVector3& operator*=(const btScalar& s)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0)
- mVec128 = _mm_mul_ps(mVec128, vs);
-#elif defined(BT_USE_NEON)
- mVec128 = vmulq_n_f32(mVec128, s);
-#else
- m_floats[0] *= s;
- m_floats[1] *= s;
- m_floats[2] *= s;
-#endif
- return *this;
- }
-
- /**@brief Inversely scale the vector
- * @param s Scale factor to divide by */
- SIMD_FORCE_INLINE btVector3& operator/=(const btScalar& s)
- {
- btFullAssert(s != btScalar(0.0));
-
-#if 0 //defined(BT_USE_SSE_IN_API)
-// this code is not faster !
- __m128 vs = _mm_load_ss(&s);
- vs = _mm_div_ss(v1110, vs);
- vs = bt_pshufd_ps(vs, 0x00); // (S S S S)
-
- mVec128 = _mm_mul_ps(mVec128, vs);
-
- return *this;
-#else
- return *this *= btScalar(1.0) / s;
-#endif
- }
-
- /**@brief Return the dot product
- * @param v The other vector in the dot product */
- SIMD_FORCE_INLINE btScalar dot(const btVector3& v) const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vd = _mm_mul_ps(mVec128, v.mVec128);
- __m128 z = _mm_movehl_ps(vd, vd);
- __m128 y = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, y);
- vd = _mm_add_ss(vd, z);
- return _mm_cvtss_f32(vd);
-#elif defined(BT_USE_NEON)
- float32x4_t vd = vmulq_f32(mVec128, v.mVec128);
- float32x2_t x = vpadd_f32(vget_low_f32(vd), vget_low_f32(vd));
- x = vadd_f32(x, vget_high_f32(vd));
- return vget_lane_f32(x, 0);
-#else
- return m_floats[0] * v.m_floats[0] +
- m_floats[1] * v.m_floats[1] +
- m_floats[2] * v.m_floats[2];
-#endif
- }
-
- /**@brief Return the length of the vector squared */
- SIMD_FORCE_INLINE btScalar length2() const
- {
- return dot(*this);
- }
-
- /**@brief Return the length of the vector */
- SIMD_FORCE_INLINE btScalar length() const
- {
- return btSqrt(length2());
- }
-
- /**@brief Return the norm (length) of the vector */
- SIMD_FORCE_INLINE btScalar norm() const
- {
- return length();
- }
-
- /**@brief Return the norm (length) of the vector */
- SIMD_FORCE_INLINE btScalar safeNorm() const
- {
- btScalar d = length2();
- //workaround for some clang/gcc issue of sqrtf(tiny number) = -INF
- if (d > SIMD_EPSILON)
- return btSqrt(d);
- return btScalar(0);
- }
-
- /**@brief Return the distance squared between the ends of this and another vector
- * This is symantically treating the vector like a point */
- SIMD_FORCE_INLINE btScalar distance2(const btVector3& v) const;
-
- /**@brief Return the distance between the ends of this and another vector
- * This is symantically treating the vector like a point */
- SIMD_FORCE_INLINE btScalar distance(const btVector3& v) const;
-
- SIMD_FORCE_INLINE btVector3& safeNormalize()
- {
- btScalar l2 = length2();
- //triNormal.normalize();
- if (l2 >= SIMD_EPSILON * SIMD_EPSILON)
- {
- (*this) /= btSqrt(l2);
- }
- else
- {
- setValue(1, 0, 0);
- }
- return *this;
- }
-
- /**@brief Normalize this vector
- * x^2 + y^2 + z^2 = 1 */
- SIMD_FORCE_INLINE btVector3& normalize()
- {
- btAssert(!fuzzyZero());
-
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- // dot product first
- __m128 vd = _mm_mul_ps(mVec128, mVec128);
- __m128 z = _mm_movehl_ps(vd, vd);
- __m128 y = _mm_shuffle_ps(vd, vd, 0x55);
- vd = _mm_add_ss(vd, y);
- vd = _mm_add_ss(vd, z);
-
-#if 0
- vd = _mm_sqrt_ss(vd);
- vd = _mm_div_ss(v1110, vd);
- vd = bt_splat_ps(vd, 0x80);
- mVec128 = _mm_mul_ps(mVec128, vd);
-#else
-
- // NR step 1/sqrt(x) - vd is x, y is output
- y = _mm_rsqrt_ss(vd); // estimate
-
- // one step NR
- z = v1_5;
- vd = _mm_mul_ss(vd, vHalf); // vd * 0.5
- //x2 = vd;
- vd = _mm_mul_ss(vd, y); // vd * 0.5 * y0
- vd = _mm_mul_ss(vd, y); // vd * 0.5 * y0 * y0
- z = _mm_sub_ss(z, vd); // 1.5 - vd * 0.5 * y0 * y0
-
- y = _mm_mul_ss(y, z); // y0 * (1.5 - vd * 0.5 * y0 * y0)
-
- y = bt_splat_ps(y, 0x80);
- mVec128 = _mm_mul_ps(mVec128, y);
-
-#endif
-
- return *this;
-#else
- return *this /= length();
-#endif
- }
-
- /**@brief Return a normalized version of this vector */
- SIMD_FORCE_INLINE btVector3 normalized() const;
-
- /**@brief Return a rotated version of this vector
- * @param wAxis The axis to rotate about
- * @param angle The angle to rotate by */
- SIMD_FORCE_INLINE btVector3 rotate(const btVector3& wAxis, const btScalar angle) const;
-
- /**@brief Return the angle between this and another vector
- * @param v The other vector */
- SIMD_FORCE_INLINE btScalar angle(const btVector3& v) const
- {
- btScalar s = btSqrt(length2() * v.length2());
- btFullAssert(s != btScalar(0.0));
- return btAcos(dot(v) / s);
- }
-
- /**@brief Return a vector with the absolute values of each element */
- SIMD_FORCE_INLINE btVector3 absolute() const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btVector3(_mm_and_ps(mVec128, btv3AbsfMask));
-#elif defined(BT_USE_NEON)
- return btVector3(vabsq_f32(mVec128));
-#else
- return btVector3(
- btFabs(m_floats[0]),
- btFabs(m_floats[1]),
- btFabs(m_floats[2]));
-#endif
- }
-
- /**@brief Return the cross product between this and another vector
- * @param v The other vector */
- SIMD_FORCE_INLINE btVector3 cross(const btVector3& v) const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 T, V;
-
- T = bt_pshufd_ps(mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
- V = bt_pshufd_ps(v.mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
-
- V = _mm_mul_ps(V, mVec128);
- T = _mm_mul_ps(T, v.mVec128);
- V = _mm_sub_ps(V, T);
-
- V = bt_pshufd_ps(V, BT_SHUFFLE(1, 2, 0, 3));
- return btVector3(V);
-#elif defined(BT_USE_NEON)
- float32x4_t T, V;
- // form (Y, Z, X, _) of mVec128 and v.mVec128
- float32x2_t Tlow = vget_low_f32(mVec128);
- float32x2_t Vlow = vget_low_f32(v.mVec128);
- T = vcombine_f32(vext_f32(Tlow, vget_high_f32(mVec128), 1), Tlow);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(v.mVec128), 1), Vlow);
-
- V = vmulq_f32(V, mVec128);
- T = vmulq_f32(T, v.mVec128);
- V = vsubq_f32(V, T);
- Vlow = vget_low_f32(V);
- // form (Y, Z, X, _);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow);
- V = (float32x4_t)vandq_s32((int32x4_t)V, btvFFF0Mask);
-
- return btVector3(V);
-#else
- return btVector3(
- m_floats[1] * v.m_floats[2] - m_floats[2] * v.m_floats[1],
- m_floats[2] * v.m_floats[0] - m_floats[0] * v.m_floats[2],
- m_floats[0] * v.m_floats[1] - m_floats[1] * v.m_floats[0]);
-#endif
- }
-
- SIMD_FORCE_INLINE btScalar triple(const btVector3& v1, const btVector3& v2) const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- // cross:
- __m128 T = _mm_shuffle_ps(v1.mVec128, v1.mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
- __m128 V = _mm_shuffle_ps(v2.mVec128, v2.mVec128, BT_SHUFFLE(1, 2, 0, 3)); // (Y Z X 0)
-
- V = _mm_mul_ps(V, v1.mVec128);
- T = _mm_mul_ps(T, v2.mVec128);
- V = _mm_sub_ps(V, T);
-
- V = _mm_shuffle_ps(V, V, BT_SHUFFLE(1, 2, 0, 3));
-
- // dot:
- V = _mm_mul_ps(V, mVec128);
- __m128 z = _mm_movehl_ps(V, V);
- __m128 y = _mm_shuffle_ps(V, V, 0x55);
- V = _mm_add_ss(V, y);
- V = _mm_add_ss(V, z);
- return _mm_cvtss_f32(V);
-
-#elif defined(BT_USE_NEON)
- // cross:
- float32x4_t T, V;
- // form (Y, Z, X, _) of mVec128 and v.mVec128
- float32x2_t Tlow = vget_low_f32(v1.mVec128);
- float32x2_t Vlow = vget_low_f32(v2.mVec128);
- T = vcombine_f32(vext_f32(Tlow, vget_high_f32(v1.mVec128), 1), Tlow);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(v2.mVec128), 1), Vlow);
-
- V = vmulq_f32(V, v1.mVec128);
- T = vmulq_f32(T, v2.mVec128);
- V = vsubq_f32(V, T);
- Vlow = vget_low_f32(V);
- // form (Y, Z, X, _);
- V = vcombine_f32(vext_f32(Vlow, vget_high_f32(V), 1), Vlow);
-
- // dot:
- V = vmulq_f32(mVec128, V);
- float32x2_t x = vpadd_f32(vget_low_f32(V), vget_low_f32(V));
- x = vadd_f32(x, vget_high_f32(V));
- return vget_lane_f32(x, 0);
-#else
- return m_floats[0] * (v1.m_floats[1] * v2.m_floats[2] - v1.m_floats[2] * v2.m_floats[1]) +
- m_floats[1] * (v1.m_floats[2] * v2.m_floats[0] - v1.m_floats[0] * v2.m_floats[2]) +
- m_floats[2] * (v1.m_floats[0] * v2.m_floats[1] - v1.m_floats[1] * v2.m_floats[0]);
-#endif
- }
-
- /**@brief Return the axis with the smallest value
- * Note return values are 0,1,2 for x, y, or z */
- SIMD_FORCE_INLINE int minAxis() const
- {
- return m_floats[0] < m_floats[1] ? (m_floats[0] < m_floats[2] ? 0 : 2) : (m_floats[1] < m_floats[2] ? 1 : 2);
- }
-
- /**@brief Return the axis with the largest value
- * Note return values are 0,1,2 for x, y, or z */
- SIMD_FORCE_INLINE int maxAxis() const
- {
- return m_floats[0] < m_floats[1] ? (m_floats[1] < m_floats[2] ? 2 : 1) : (m_floats[0] < m_floats[2] ? 2 : 0);
- }
-
- SIMD_FORCE_INLINE int furthestAxis() const
- {
- return absolute().minAxis();
- }
-
- SIMD_FORCE_INLINE int closestAxis() const
- {
- return absolute().maxAxis();
- }
-
- SIMD_FORCE_INLINE void setInterpolate3(const btVector3& v0, const btVector3& v1, btScalar rt)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vrt = _mm_load_ss(&rt); // (rt 0 0 0)
- btScalar s = btScalar(1.0) - rt;
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0)
- __m128 r0 = _mm_mul_ps(v0.mVec128, vs);
- vrt = bt_pshufd_ps(vrt, 0x80); // (rt rt rt 0.0)
- __m128 r1 = _mm_mul_ps(v1.mVec128, vrt);
- __m128 tmp3 = _mm_add_ps(r0, r1);
- mVec128 = tmp3;
-#elif defined(BT_USE_NEON)
- float32x4_t vl = vsubq_f32(v1.mVec128, v0.mVec128);
- vl = vmulq_n_f32(vl, rt);
- mVec128 = vaddq_f32(vl, v0.mVec128);
-#else
- btScalar s = btScalar(1.0) - rt;
- m_floats[0] = s * v0.m_floats[0] + rt * v1.m_floats[0];
- m_floats[1] = s * v0.m_floats[1] + rt * v1.m_floats[1];
- m_floats[2] = s * v0.m_floats[2] + rt * v1.m_floats[2];
- //don't do the unused w component
- // m_co[3] = s * v0[3] + rt * v1[3];
-#endif
- }
-
- /**@brief Return the linear interpolation between this and another vector
- * @param v The other vector
- * @param t The ration of this to v (t = 0 => return this, t=1 => return other) */
- SIMD_FORCE_INLINE btVector3 lerp(const btVector3& v, const btScalar& t) const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vt = _mm_load_ss(&t); // (t 0 0 0)
- vt = bt_pshufd_ps(vt, 0x80); // (rt rt rt 0.0)
- __m128 vl = _mm_sub_ps(v.mVec128, mVec128);
- vl = _mm_mul_ps(vl, vt);
- vl = _mm_add_ps(vl, mVec128);
-
- return btVector3(vl);
-#elif defined(BT_USE_NEON)
- float32x4_t vl = vsubq_f32(v.mVec128, mVec128);
- vl = vmulq_n_f32(vl, t);
- vl = vaddq_f32(vl, mVec128);
-
- return btVector3(vl);
-#else
- return btVector3(m_floats[0] + (v.m_floats[0] - m_floats[0]) * t,
- m_floats[1] + (v.m_floats[1] - m_floats[1]) * t,
- m_floats[2] + (v.m_floats[2] - m_floats[2]) * t);
-#endif
- }
-
- /**@brief Elementwise multiply this vector by the other
- * @param v The other vector */
- SIMD_FORCE_INLINE btVector3& operator*=(const btVector3& v)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_mul_ps(mVec128, v.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vmulq_f32(mVec128, v.mVec128);
-#else
- m_floats[0] *= v.m_floats[0];
- m_floats[1] *= v.m_floats[1];
- m_floats[2] *= v.m_floats[2];
-#endif
- return *this;
- }
-
- /**@brief Return the x value */
- SIMD_FORCE_INLINE const btScalar& getX() const { return m_floats[0]; }
- /**@brief Return the y value */
- SIMD_FORCE_INLINE const btScalar& getY() const { return m_floats[1]; }
- /**@brief Return the z value */
- SIMD_FORCE_INLINE const btScalar& getZ() const { return m_floats[2]; }
- /**@brief Set the x value */
- SIMD_FORCE_INLINE void setX(btScalar _x) { m_floats[0] = _x; };
- /**@brief Set the y value */
- SIMD_FORCE_INLINE void setY(btScalar _y) { m_floats[1] = _y; };
- /**@brief Set the z value */
- SIMD_FORCE_INLINE void setZ(btScalar _z) { m_floats[2] = _z; };
- /**@brief Set the w value */
- SIMD_FORCE_INLINE void setW(btScalar _w) { m_floats[3] = _w; };
- /**@brief Return the x value */
- SIMD_FORCE_INLINE const btScalar& x() const { return m_floats[0]; }
- /**@brief Return the y value */
- SIMD_FORCE_INLINE const btScalar& y() const { return m_floats[1]; }
- /**@brief Return the z value */
- SIMD_FORCE_INLINE const btScalar& z() const { return m_floats[2]; }
- /**@brief Return the w value */
- SIMD_FORCE_INLINE const btScalar& w() const { return m_floats[3]; }
-
- //SIMD_FORCE_INLINE btScalar& operator[](int i) { return (&m_floats[0])[i]; }
- //SIMD_FORCE_INLINE const btScalar& operator[](int i) const { return (&m_floats[0])[i]; }
- ///operator btScalar*() replaces operator[], using implicit conversion. We added operator != and operator == to avoid pointer comparisons.
- SIMD_FORCE_INLINE operator btScalar*() { return &m_floats[0]; }
- SIMD_FORCE_INLINE operator const btScalar*() const { return &m_floats[0]; }
-
- SIMD_FORCE_INLINE bool operator==(const btVector3& other) const
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return (0xf == _mm_movemask_ps((__m128)_mm_cmpeq_ps(mVec128, other.mVec128)));
-#else
- return ((m_floats[3] == other.m_floats[3]) &&
- (m_floats[2] == other.m_floats[2]) &&
- (m_floats[1] == other.m_floats[1]) &&
- (m_floats[0] == other.m_floats[0]));
-#endif
- }
-
- SIMD_FORCE_INLINE bool operator!=(const btVector3& other) const
- {
- return !(*this == other);
- }
-
- /**@brief Set each element to the max of the current values and the values of another btVector3
- * @param other The other btVector3 to compare with
- */
- SIMD_FORCE_INLINE void setMax(const btVector3& other)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_max_ps(mVec128, other.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vmaxq_f32(mVec128, other.mVec128);
-#else
- btSetMax(m_floats[0], other.m_floats[0]);
- btSetMax(m_floats[1], other.m_floats[1]);
- btSetMax(m_floats[2], other.m_floats[2]);
- btSetMax(m_floats[3], other.w());
-#endif
- }
-
- /**@brief Set each element to the min of the current values and the values of another btVector3
- * @param other The other btVector3 to compare with
- */
- SIMD_FORCE_INLINE void setMin(const btVector3& other)
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = _mm_min_ps(mVec128, other.mVec128);
-#elif defined(BT_USE_NEON)
- mVec128 = vminq_f32(mVec128, other.mVec128);
-#else
- btSetMin(m_floats[0], other.m_floats[0]);
- btSetMin(m_floats[1], other.m_floats[1]);
- btSetMin(m_floats[2], other.m_floats[2]);
- btSetMin(m_floats[3], other.w());
-#endif
- }
-
- SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = btScalar(0.f);
- }
-
- void getSkewSymmetricMatrix(btVector3 * v0, btVector3 * v1, btVector3 * v2) const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
-
- __m128 V = _mm_and_ps(mVec128, btvFFF0fMask);
- __m128 V0 = _mm_xor_ps(btvMzeroMask, V);
- __m128 V2 = _mm_movelh_ps(V0, V);
-
- __m128 V1 = _mm_shuffle_ps(V, V0, 0xCE);
-
- V0 = _mm_shuffle_ps(V0, V, 0xDB);
- V2 = _mm_shuffle_ps(V2, V, 0xF9);
-
- v0->mVec128 = V0;
- v1->mVec128 = V1;
- v2->mVec128 = V2;
-#else
- v0->setValue(0., -z(), y());
- v1->setValue(z(), 0., -x());
- v2->setValue(-y(), x(), 0.);
-#endif
- }
-
- void setZero()
- {
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- mVec128 = (__m128)_mm_xor_ps(mVec128, mVec128);
-#elif defined(BT_USE_NEON)
- int32x4_t vi = vdupq_n_s32(0);
- mVec128 = vreinterpretq_f32_s32(vi);
-#else
- setValue(btScalar(0.), btScalar(0.), btScalar(0.));
-#endif
- }
-
- SIMD_FORCE_INLINE bool isZero() const
- {
- return m_floats[0] == btScalar(0) && m_floats[1] == btScalar(0) && m_floats[2] == btScalar(0);
- }
-
- SIMD_FORCE_INLINE bool fuzzyZero() const
- {
- return length2() < SIMD_EPSILON * SIMD_EPSILON;
- }
-
- SIMD_FORCE_INLINE void serialize(struct btVector3Data & dataOut) const;
-
- SIMD_FORCE_INLINE void deSerialize(const struct btVector3DoubleData& dataIn);
-
- SIMD_FORCE_INLINE void deSerialize(const struct btVector3FloatData& dataIn);
-
- SIMD_FORCE_INLINE void serializeFloat(struct btVector3FloatData & dataOut) const;
-
- SIMD_FORCE_INLINE void deSerializeFloat(const struct btVector3FloatData& dataIn);
-
- SIMD_FORCE_INLINE void serializeDouble(struct btVector3DoubleData & dataOut) const;
-
- SIMD_FORCE_INLINE void deSerializeDouble(const struct btVector3DoubleData& dataIn);
-
- /**@brief returns index of maximum dot product between this and vectors in array[]
- * @param array The other vectors
- * @param array_count The number of other vectors
- * @param dotOut The maximum dot product */
- SIMD_FORCE_INLINE long maxDot(const btVector3* array, long array_count, btScalar& dotOut) const;
-
- /**@brief returns index of minimum dot product between this and vectors in array[]
- * @param array The other vectors
- * @param array_count The number of other vectors
- * @param dotOut The minimum dot product */
- SIMD_FORCE_INLINE long minDot(const btVector3* array, long array_count, btScalar& dotOut) const;
-
- /* create a vector as btVector3( this->dot( btVector3 v0 ), this->dot( btVector3 v1), this->dot( btVector3 v2 )) */
- SIMD_FORCE_INLINE btVector3 dot3(const btVector3& v0, const btVector3& v1, const btVector3& v2) const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
-
- __m128 a0 = _mm_mul_ps(v0.mVec128, this->mVec128);
- __m128 a1 = _mm_mul_ps(v1.mVec128, this->mVec128);
- __m128 a2 = _mm_mul_ps(v2.mVec128, this->mVec128);
- __m128 b0 = _mm_unpacklo_ps(a0, a1);
- __m128 b1 = _mm_unpackhi_ps(a0, a1);
- __m128 b2 = _mm_unpacklo_ps(a2, _mm_setzero_ps());
- __m128 r = _mm_movelh_ps(b0, b2);
- r = _mm_add_ps(r, _mm_movehl_ps(b2, b0));
- a2 = _mm_and_ps(a2, btvxyzMaskf);
- r = _mm_add_ps(r, btCastdTo128f(_mm_move_sd(btCastfTo128d(a2), btCastfTo128d(b1))));
- return btVector3(r);
-
-#elif defined(BT_USE_NEON)
- static const uint32x4_t xyzMask = (const uint32x4_t){static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), static_cast<uint32_t>(-1), 0};
- float32x4_t a0 = vmulq_f32(v0.mVec128, this->mVec128);
- float32x4_t a1 = vmulq_f32(v1.mVec128, this->mVec128);
- float32x4_t a2 = vmulq_f32(v2.mVec128, this->mVec128);
- float32x2x2_t zLo = vtrn_f32(vget_high_f32(a0), vget_high_f32(a1));
- a2 = (float32x4_t)vandq_u32((uint32x4_t)a2, xyzMask);
- float32x2_t b0 = vadd_f32(vpadd_f32(vget_low_f32(a0), vget_low_f32(a1)), zLo.val[0]);
- float32x2_t b1 = vpadd_f32(vpadd_f32(vget_low_f32(a2), vget_high_f32(a2)), vdup_n_f32(0.0f));
- return btVector3(vcombine_f32(b0, b1));
-#else
- return btVector3(dot(v0), dot(v1), dot(v2));
-#endif
- }
-};
-
-/**@brief Return the sum of two vectors (Point symantics)*/
-SIMD_FORCE_INLINE btVector3
-operator+(const btVector3& v1, const btVector3& v2)
-{
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btVector3(_mm_add_ps(v1.mVec128, v2.mVec128));
-#elif defined(BT_USE_NEON)
- return btVector3(vaddq_f32(v1.mVec128, v2.mVec128));
-#else
- return btVector3(
- v1.m_floats[0] + v2.m_floats[0],
- v1.m_floats[1] + v2.m_floats[1],
- v1.m_floats[2] + v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the elementwise product of two vectors */
-SIMD_FORCE_INLINE btVector3
-operator*(const btVector3& v1, const btVector3& v2)
-{
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btVector3(_mm_mul_ps(v1.mVec128, v2.mVec128));
-#elif defined(BT_USE_NEON)
- return btVector3(vmulq_f32(v1.mVec128, v2.mVec128));
-#else
- return btVector3(
- v1.m_floats[0] * v2.m_floats[0],
- v1.m_floats[1] * v2.m_floats[1],
- v1.m_floats[2] * v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the difference between two vectors */
-SIMD_FORCE_INLINE btVector3
-operator-(const btVector3& v1, const btVector3& v2)
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
-
- // without _mm_and_ps this code causes slowdown in Concave moving
- __m128 r = _mm_sub_ps(v1.mVec128, v2.mVec128);
- return btVector3(_mm_and_ps(r, btvFFF0fMask));
-#elif defined(BT_USE_NEON)
- float32x4_t r = vsubq_f32(v1.mVec128, v2.mVec128);
- return btVector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask));
-#else
- return btVector3(
- v1.m_floats[0] - v2.m_floats[0],
- v1.m_floats[1] - v2.m_floats[1],
- v1.m_floats[2] - v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the negative of the vector */
-SIMD_FORCE_INLINE btVector3
-operator-(const btVector3& v)
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- __m128 r = _mm_xor_ps(v.mVec128, btvMzeroMask);
- return btVector3(_mm_and_ps(r, btvFFF0fMask));
-#elif defined(BT_USE_NEON)
- return btVector3((btSimdFloat4)veorq_s32((int32x4_t)v.mVec128, (int32x4_t)btvMzeroMask));
-#else
- return btVector3(-v.m_floats[0], -v.m_floats[1], -v.m_floats[2]);
-#endif
-}
-
-/**@brief Return the vector scaled by s */
-SIMD_FORCE_INLINE btVector3
-operator*(const btVector3& v, const btScalar& s)
-{
-#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- __m128 vs = _mm_load_ss(&s); // (S 0 0 0)
- vs = bt_pshufd_ps(vs, 0x80); // (S S S 0.0)
- return btVector3(_mm_mul_ps(v.mVec128, vs));
-#elif defined(BT_USE_NEON)
- float32x4_t r = vmulq_n_f32(v.mVec128, s);
- return btVector3((float32x4_t)vandq_s32((int32x4_t)r, btvFFF0Mask));
-#else
- return btVector3(v.m_floats[0] * s, v.m_floats[1] * s, v.m_floats[2] * s);
-#endif
-}
-
-/**@brief Return the vector scaled by s */
-SIMD_FORCE_INLINE btVector3
-operator*(const btScalar& s, const btVector3& v)
-{
- return v * s;
-}
-
-/**@brief Return the vector inversely scaled by s */
-SIMD_FORCE_INLINE btVector3
-operator/(const btVector3& v, const btScalar& s)
-{
- btFullAssert(s != btScalar(0.0));
-#if 0 //defined(BT_USE_SSE_IN_API)
-// this code is not faster !
- __m128 vs = _mm_load_ss(&s);
- vs = _mm_div_ss(v1110, vs);
- vs = bt_pshufd_ps(vs, 0x00); // (S S S S)
-
- return btVector3(_mm_mul_ps(v.mVec128, vs));
-#else
- return v * (btScalar(1.0) / s);
-#endif
-}
-
-/**@brief Return the vector inversely scaled by s */
-SIMD_FORCE_INLINE btVector3
-operator/(const btVector3& v1, const btVector3& v2)
-{
-#if defined BT_USE_SIMD_VECTOR3 && (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE))
- __m128 vec = _mm_div_ps(v1.mVec128, v2.mVec128);
- vec = _mm_and_ps(vec, btvFFF0fMask);
- return btVector3(vec);
-#elif defined(BT_USE_NEON)
- float32x4_t x, y, v, m;
-
- x = v1.mVec128;
- y = v2.mVec128;
-
- v = vrecpeq_f32(y); // v ~ 1/y
- m = vrecpsq_f32(y, v); // m = (2-v*y)
- v = vmulq_f32(v, m); // vv = v*m ~~ 1/y
- m = vrecpsq_f32(y, v); // mm = (2-vv*y)
- v = vmulq_f32(v, x); // x*vv
- v = vmulq_f32(v, m); // (x*vv)*(2-vv*y) = x*(vv(2-vv*y)) ~~~ x/y
-
- return btVector3(v);
-#else
- return btVector3(
- v1.m_floats[0] / v2.m_floats[0],
- v1.m_floats[1] / v2.m_floats[1],
- v1.m_floats[2] / v2.m_floats[2]);
-#endif
-}
-
-/**@brief Return the dot product between two vectors */
-SIMD_FORCE_INLINE btScalar
-btDot(const btVector3& v1, const btVector3& v2)
-{
- return v1.dot(v2);
-}
-
-/**@brief Return the distance squared between two vectors */
-SIMD_FORCE_INLINE btScalar
-btDistance2(const btVector3& v1, const btVector3& v2)
-{
- return v1.distance2(v2);
-}
-
-/**@brief Return the distance between two vectors */
-SIMD_FORCE_INLINE btScalar
-btDistance(const btVector3& v1, const btVector3& v2)
-{
- return v1.distance(v2);
-}
-
-/**@brief Return the angle between two vectors */
-SIMD_FORCE_INLINE btScalar
-btAngle(const btVector3& v1, const btVector3& v2)
-{
- return v1.angle(v2);
-}
-
-/**@brief Return the cross product of two vectors */
-SIMD_FORCE_INLINE btVector3
-btCross(const btVector3& v1, const btVector3& v2)
-{
- return v1.cross(v2);
-}
-
-SIMD_FORCE_INLINE btScalar
-btTriple(const btVector3& v1, const btVector3& v2, const btVector3& v3)
-{
- return v1.triple(v2, v3);
-}
-
-/**@brief Return the linear interpolation between two vectors
- * @param v1 One vector
- * @param v2 The other vector
- * @param t The ration of this to v (t = 0 => return v1, t=1 => return v2) */
-SIMD_FORCE_INLINE btVector3
-lerp(const btVector3& v1, const btVector3& v2, const btScalar& t)
-{
- return v1.lerp(v2, t);
-}
-
-SIMD_FORCE_INLINE btScalar btVector3::distance2(const btVector3& v) const
-{
- return (v - *this).length2();
-}
-
-SIMD_FORCE_INLINE btScalar btVector3::distance(const btVector3& v) const
-{
- return (v - *this).length();
-}
-
-SIMD_FORCE_INLINE btVector3 btVector3::normalized() const
-{
- btVector3 nrm = *this;
-
- return nrm.normalize();
-}
-
-SIMD_FORCE_INLINE btVector3 btVector3::rotate(const btVector3& wAxis, const btScalar _angle) const
-{
- // wAxis must be a unit lenght vector
-
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
-
- __m128 O = _mm_mul_ps(wAxis.mVec128, mVec128);
- btScalar ssin = btSin(_angle);
- __m128 C = wAxis.cross(mVec128).mVec128;
- O = _mm_and_ps(O, btvFFF0fMask);
- btScalar scos = btCos(_angle);
-
- __m128 vsin = _mm_load_ss(&ssin); // (S 0 0 0)
- __m128 vcos = _mm_load_ss(&scos); // (S 0 0 0)
-
- __m128 Y = bt_pshufd_ps(O, 0xC9); // (Y Z X 0)
- __m128 Z = bt_pshufd_ps(O, 0xD2); // (Z X Y 0)
- O = _mm_add_ps(O, Y);
- vsin = bt_pshufd_ps(vsin, 0x80); // (S S S 0)
- O = _mm_add_ps(O, Z);
- vcos = bt_pshufd_ps(vcos, 0x80); // (S S S 0)
-
- vsin = vsin * C;
- O = O * wAxis.mVec128;
- __m128 X = mVec128 - O;
-
- O = O + vsin;
- vcos = vcos * X;
- O = O + vcos;
-
- return btVector3(O);
-#else
- btVector3 o = wAxis * wAxis.dot(*this);
- btVector3 _x = *this - o;
- btVector3 _y;
-
- _y = wAxis.cross(*this);
-
- return (o + _x * btCos(_angle) + _y * btSin(_angle));
-#endif
-}
-
-SIMD_FORCE_INLINE long btVector3::maxDot(const btVector3* array, long array_count, btScalar& dotOut) const
-{
-#if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON)
-#if defined _WIN32 || defined(BT_USE_SSE)
- const long scalar_cutoff = 10;
- long _maxdot_large(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#elif defined BT_USE_NEON
- const long scalar_cutoff = 4;
- extern long (*_maxdot_large)(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#endif
- if (array_count < scalar_cutoff)
-#endif
- {
- btScalar maxDot1 = -SIMD_INFINITY;
- int i = 0;
- int ptIndex = -1;
- for (i = 0; i < array_count; i++)
- {
- btScalar dot = array[i].dot(*this);
-
- if (dot > maxDot1)
- {
- maxDot1 = dot;
- ptIndex = i;
- }
- }
-
- dotOut = maxDot1;
- return ptIndex;
- }
-#if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON)
- return _maxdot_large((float*)array, (float*)&m_floats[0], array_count, &dotOut);
-#endif
-}
-
-SIMD_FORCE_INLINE long btVector3::minDot(const btVector3* array, long array_count, btScalar& dotOut) const
-{
-#if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON)
-#if defined BT_USE_SSE
- const long scalar_cutoff = 10;
- long _mindot_large(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#elif defined BT_USE_NEON
- const long scalar_cutoff = 4;
- extern long (*_mindot_large)(const float* array, const float* vec, unsigned long array_count, float* dotOut);
-#else
-#error unhandled arch!
-#endif
-
- if (array_count < scalar_cutoff)
-#endif
- {
- btScalar minDot = SIMD_INFINITY;
- int i = 0;
- int ptIndex = -1;
-
- for (i = 0; i < array_count; i++)
- {
- btScalar dot = array[i].dot(*this);
-
- if (dot < minDot)
- {
- minDot = dot;
- ptIndex = i;
- }
- }
-
- dotOut = minDot;
-
- return ptIndex;
- }
-#if (defined BT_USE_SSE && defined BT_USE_SIMD_VECTOR3 && defined BT_USE_SSE_IN_API) || defined(BT_USE_NEON)
- return _mindot_large((float*)array, (float*)&m_floats[0], array_count, &dotOut);
-#endif //BT_USE_SIMD_VECTOR3
-}
-
-class btVector4 : public btVector3
-{
-public:
- SIMD_FORCE_INLINE btVector4() {}
-
- SIMD_FORCE_INLINE btVector4(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
- : btVector3(_x, _y, _z)
- {
- m_floats[3] = _w;
- }
-
-#if (defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)) || defined(BT_USE_NEON)
- SIMD_FORCE_INLINE btVector4(const btSimdFloat4 vec)
- {
- mVec128 = vec;
- }
-
- SIMD_FORCE_INLINE btVector4(const btVector3& rhs)
- {
- mVec128 = rhs.mVec128;
- }
-
- SIMD_FORCE_INLINE btVector4&
- operator=(const btVector4& v)
- {
- mVec128 = v.mVec128;
- return *this;
- }
-#endif // #if defined (BT_USE_SSE_IN_API) || defined (BT_USE_NEON)
-
- SIMD_FORCE_INLINE btVector4 absolute4() const
- {
-#if defined BT_USE_SIMD_VECTOR3 && defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
- return btVector4(_mm_and_ps(mVec128, btvAbsfMask));
-#elif defined(BT_USE_NEON)
- return btVector4(vabsq_f32(mVec128));
-#else
- return btVector4(
- btFabs(m_floats[0]),
- btFabs(m_floats[1]),
- btFabs(m_floats[2]),
- btFabs(m_floats[3]));
-#endif
- }
-
- btScalar getW() const { return m_floats[3]; }
-
- SIMD_FORCE_INLINE int maxAxis4() const
- {
- int maxIndex = -1;
- btScalar maxVal = btScalar(-BT_LARGE_FLOAT);
- if (m_floats[0] > maxVal)
- {
- maxIndex = 0;
- maxVal = m_floats[0];
- }
- if (m_floats[1] > maxVal)
- {
- maxIndex = 1;
- maxVal = m_floats[1];
- }
- if (m_floats[2] > maxVal)
- {
- maxIndex = 2;
- maxVal = m_floats[2];
- }
- if (m_floats[3] > maxVal)
- {
- maxIndex = 3;
- }
-
- return maxIndex;
- }
-
- SIMD_FORCE_INLINE int minAxis4() const
- {
- int minIndex = -1;
- btScalar minVal = btScalar(BT_LARGE_FLOAT);
- if (m_floats[0] < minVal)
- {
- minIndex = 0;
- minVal = m_floats[0];
- }
- if (m_floats[1] < minVal)
- {
- minIndex = 1;
- minVal = m_floats[1];
- }
- if (m_floats[2] < minVal)
- {
- minIndex = 2;
- minVal = m_floats[2];
- }
- if (m_floats[3] < minVal)
- {
- minIndex = 3;
- }
-
- return minIndex;
- }
-
- SIMD_FORCE_INLINE int closestAxis4() const
- {
- return absolute4().maxAxis4();
- }
-
- /**@brief Set x,y,z and zero w
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- */
-
- /* void getValue(btScalar *m) const
- {
- m[0] = m_floats[0];
- m[1] = m_floats[1];
- m[2] =m_floats[2];
- }
-*/
- /**@brief Set the values
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
- */
- SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
- {
- m_floats[0] = _x;
- m_floats[1] = _y;
- m_floats[2] = _z;
- m_floats[3] = _w;
- }
-};
-
-///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
-SIMD_FORCE_INLINE void btSwapScalarEndian(const btScalar& sourceVal, btScalar& destVal)
-{
-#ifdef BT_USE_DOUBLE_PRECISION
- unsigned char* dest = (unsigned char*)&destVal;
- const unsigned char* src = (const unsigned char*)&sourceVal;
- dest[0] = src[7];
- dest[1] = src[6];
- dest[2] = src[5];
- dest[3] = src[4];
- dest[4] = src[3];
- dest[5] = src[2];
- dest[6] = src[1];
- dest[7] = src[0];
-#else
- unsigned char* dest = (unsigned char*)&destVal;
- const unsigned char* src = (const unsigned char*)&sourceVal;
- dest[0] = src[3];
- dest[1] = src[2];
- dest[2] = src[1];
- dest[3] = src[0];
-#endif //BT_USE_DOUBLE_PRECISION
-}
-///btSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
-SIMD_FORCE_INLINE void btSwapVector3Endian(const btVector3& sourceVec, btVector3& destVec)
-{
- for (int i = 0; i < 4; i++)
- {
- btSwapScalarEndian(sourceVec[i], destVec[i]);
- }
-}
-
-///btUnSwapVector3Endian swaps vector endianness, useful for network and cross-platform serialization
-SIMD_FORCE_INLINE void btUnSwapVector3Endian(btVector3& vector)
-{
- btVector3 swappedVec;
- for (int i = 0; i < 4; i++)
- {
- btSwapScalarEndian(vector[i], swappedVec[i]);
- }
- vector = swappedVec;
-}
-
-template <class T>
-SIMD_FORCE_INLINE void btPlaneSpace1(const T& n, T& p, T& q)
-{
- if (btFabs(n[2]) > SIMDSQRT12)
- {
- // choose p in y-z plane
- btScalar a = n[1] * n[1] + n[2] * n[2];
- btScalar k = btRecipSqrt(a);
- p[0] = 0;
- p[1] = -n[2] * k;
- p[2] = n[1] * k;
- // set q = n x p
- q[0] = a * k;
- q[1] = -n[0] * p[2];
- q[2] = n[0] * p[1];
- }
- else
- {
- // choose p in x-y plane
- btScalar a = n[0] * n[0] + n[1] * n[1];
- btScalar k = btRecipSqrt(a);
- p[0] = -n[1] * k;
- p[1] = n[0] * k;
- p[2] = 0;
- // set q = n x p
- q[0] = -n[2] * p[1];
- q[1] = n[2] * p[0];
- q[2] = a * k;
- }
-}
-
-struct btVector3FloatData
-{
- float m_floats[4];
-};
-
-struct btVector3DoubleData
-{
- double m_floats[4];
-};
-
-SIMD_FORCE_INLINE void btVector3::serializeFloat(struct btVector3FloatData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = float(m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btVector3::deSerializeFloat(const struct btVector3FloatData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = btScalar(dataIn.m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btVector3::serializeDouble(struct btVector3DoubleData& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = double(m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btVector3::deSerializeDouble(const struct btVector3DoubleData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = btScalar(dataIn.m_floats[i]);
-}
-
-SIMD_FORCE_INLINE void btVector3::serialize(struct btVector3Data& dataOut) const
-{
- ///could also do a memcpy, check if it is worth it
- for (int i = 0; i < 4; i++)
- dataOut.m_floats[i] = m_floats[i];
-}
-
-SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3FloatData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = (btScalar)dataIn.m_floats[i];
-}
-
-SIMD_FORCE_INLINE void btVector3::deSerialize(const struct btVector3DoubleData& dataIn)
-{
- for (int i = 0; i < 4; i++)
- m_floats[i] = (btScalar)dataIn.m_floats[i];
-}
-
-#endif //BT_VECTOR3_H
diff --git a/thirdparty/bullet/VERSION.txt b/thirdparty/bullet/VERSION.txt
deleted file mode 100644
index 78c8a7428a..0000000000
--- a/thirdparty/bullet/VERSION.txt
+++ /dev/null
@@ -1 +0,0 @@
-3.17
diff --git a/thirdparty/bullet/btBulletCollisionAll.cpp b/thirdparty/bullet/btBulletCollisionAll.cpp
deleted file mode 100644
index 4a3ec8dd6f..0000000000
--- a/thirdparty/bullet/btBulletCollisionAll.cpp
+++ /dev/null
@@ -1,97 +0,0 @@
-#include "BulletCollision/BroadphaseCollision/btAxisSweep3.cpp"
-#include "BulletCollision/BroadphaseCollision/btDbvt.cpp"
-#include "BulletCollision/BroadphaseCollision/btOverlappingPairCache.cpp"
-#include "BulletCollision/BroadphaseCollision/btBroadphaseProxy.cpp"
-#include "BulletCollision/BroadphaseCollision/btDbvtBroadphase.cpp"
-#include "BulletCollision/BroadphaseCollision/btQuantizedBvh.cpp"
-#include "BulletCollision/BroadphaseCollision/btCollisionAlgorithm.cpp"
-#include "BulletCollision/BroadphaseCollision/btDispatcher.cpp"
-#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.cpp"
-#include "BulletCollision/CollisionDispatch/SphereTriangleDetector.cpp"
-#include "BulletCollision/CollisionDispatch/btCompoundCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btHashedSimplePairCache.cpp"
-#include "BulletCollision/CollisionDispatch/btActivatingCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btCompoundCompoundCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btInternalEdgeUtility.cpp"
-#include "BulletCollision/CollisionDispatch/btBox2dBox2dCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btConvex2dConvex2dAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btManifoldResult.cpp"
-#include "BulletCollision/CollisionDispatch/btBoxBoxCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btConvexConcaveCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.cpp"
-#include "BulletCollision/CollisionDispatch/btBoxBoxDetector.cpp"
-#include "BulletCollision/CollisionDispatch/btConvexConvexAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.cpp"
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcherMt.cpp"
-#include "BulletCollision/CollisionDispatch/btConvexPlaneCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.cpp"
-#include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.cpp"
-#include "BulletCollision/CollisionDispatch/btSphereTriangleCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.cpp"
-#include "BulletCollision/CollisionDispatch/btEmptyCollisionAlgorithm.cpp"
-#include "BulletCollision/CollisionDispatch/btUnionFind.cpp"
-#include "BulletCollision/CollisionDispatch/btCollisionWorldImporter.cpp"
-#include "BulletCollision/CollisionDispatch/btGhostObject.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btContinuousConvexCollision.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpaPenetrationDepthSolver.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btPolyhedralContactClipping.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btConvexCast.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btRaycastCallback.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btGjkConvexCast.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btMinkowskiPenetrationDepthSolver.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btSubSimplexConvexCast.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btGjkEpa2.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btPersistentManifold.cpp"
-#include "BulletCollision/NarrowPhaseCollision/btVoronoiSimplexSolver.cpp"
-#include "BulletCollision/CollisionShapes/btBox2dShape.cpp"
-#include "BulletCollision/CollisionShapes/btConvexPolyhedron.cpp"
-#include "BulletCollision/CollisionShapes/btShapeHull.cpp"
-#include "BulletCollision/CollisionShapes/btBoxShape.cpp"
-#include "BulletCollision/CollisionShapes/btConvexShape.cpp"
-#include "BulletCollision/CollisionShapes/btSphereShape.cpp"
-#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.cpp"
-#include "BulletCollision/CollisionShapes/btConvexTriangleMeshShape.cpp"
-#include "BulletCollision/CollisionShapes/btStaticPlaneShape.cpp"
-#include "BulletCollision/CollisionShapes/btCapsuleShape.cpp"
-#include "BulletCollision/CollisionShapes/btCylinderShape.cpp"
-#include "BulletCollision/CollisionShapes/btStridingMeshInterface.cpp"
-#include "BulletCollision/CollisionShapes/btCollisionShape.cpp"
-#include "BulletCollision/CollisionShapes/btEmptyShape.cpp"
-#include "BulletCollision/CollisionShapes/btTetrahedronShape.cpp"
-#include "BulletCollision/CollisionShapes/btCompoundShape.cpp"
-#include "BulletCollision/CollisionShapes/btHeightfieldTerrainShape.cpp"
-#include "BulletCollision/CollisionShapes/btTriangleBuffer.cpp"
-#include "BulletCollision/CollisionShapes/btConcaveShape.cpp"
-#include "BulletCollision/CollisionShapes/btMinkowskiSumShape.cpp"
-#include "BulletCollision/CollisionShapes/btTriangleCallback.cpp"
-#include "BulletCollision/CollisionShapes/btConeShape.cpp"
-#include "BulletCollision/CollisionShapes/btMultiSphereShape.cpp"
-#include "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.cpp"
-#include "BulletCollision/CollisionShapes/btConvex2dShape.cpp"
-#include "BulletCollision/CollisionShapes/btMultimaterialTriangleMeshShape.cpp"
-#include "BulletCollision/CollisionShapes/btTriangleIndexVertexMaterialArray.cpp"
-#include "BulletCollision/CollisionShapes/btConvexHullShape.cpp"
-#include "BulletCollision/CollisionShapes/btOptimizedBvh.cpp"
-#include "BulletCollision/CollisionShapes/btTriangleMesh.cpp"
-#include "BulletCollision/CollisionShapes/btConvexInternalShape.cpp"
-#include "BulletCollision/CollisionShapes/btPolyhedralConvexShape.cpp"
-#include "BulletCollision/CollisionShapes/btTriangleMeshShape.cpp"
-#include "BulletCollision/CollisionShapes/btConvexPointCloudShape.cpp"
-#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.cpp"
-#include "BulletCollision/CollisionShapes/btSdfCollisionShape.cpp"
-#include "BulletCollision/CollisionShapes/btMiniSDF.cpp"
-#include "BulletCollision/CollisionShapes/btUniformScalingShape.cpp"
-#include "BulletCollision/Gimpact/btContactProcessing.cpp"
-#include "BulletCollision/Gimpact/btGImpactQuantizedBvh.cpp"
-#include "BulletCollision/Gimpact/btTriangleShapeEx.cpp"
-#include "BulletCollision/Gimpact/gim_memory.cpp"
-#include "BulletCollision/Gimpact/btGImpactBvh.cpp"
-#include "BulletCollision/Gimpact/btGImpactShape.cpp"
-#include "BulletCollision/Gimpact/gim_box_set.cpp"
-#include "BulletCollision/Gimpact/gim_tri_collision.cpp"
-#include "BulletCollision/Gimpact/btGImpactCollisionAlgorithm.cpp"
-#include "BulletCollision/Gimpact/btGenericPoolAllocator.cpp"
-#include "BulletCollision/Gimpact/gim_contact.cpp"
diff --git a/thirdparty/bullet/btBulletCollisionCommon.h b/thirdparty/bullet/btBulletCollisionCommon.h
deleted file mode 100644
index 4f523756a7..0000000000
--- a/thirdparty/bullet/btBulletCollisionCommon.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BULLET_COLLISION_COMMON_H
-#define BULLET_COLLISION_COMMON_H
-
-///Common headerfile includes for Bullet Collision Detection
-
-///Bullet's btCollisionWorld and btCollisionObject definitions
-#include "BulletCollision/CollisionDispatch/btCollisionWorld.h"
-#include "BulletCollision/CollisionDispatch/btCollisionObject.h"
-
-///Collision Shapes
-#include "BulletCollision/CollisionShapes/btBoxShape.h"
-#include "BulletCollision/CollisionShapes/btSphereShape.h"
-#include "BulletCollision/CollisionShapes/btCapsuleShape.h"
-#include "BulletCollision/CollisionShapes/btCylinderShape.h"
-#include "BulletCollision/CollisionShapes/btConeShape.h"
-#include "BulletCollision/CollisionShapes/btStaticPlaneShape.h"
-#include "BulletCollision/CollisionShapes/btConvexHullShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleMesh.h"
-#include "BulletCollision/CollisionShapes/btConvexTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btBvhTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btScaledBvhTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleMeshShape.h"
-#include "BulletCollision/CollisionShapes/btTriangleIndexVertexArray.h"
-#include "BulletCollision/CollisionShapes/btCompoundShape.h"
-#include "BulletCollision/CollisionShapes/btTetrahedronShape.h"
-#include "BulletCollision/CollisionShapes/btEmptyShape.h"
-#include "BulletCollision/CollisionShapes/btMultiSphereShape.h"
-#include "BulletCollision/CollisionShapes/btUniformScalingShape.h"
-
-///Narrowphase Collision Detector
-#include "BulletCollision/CollisionDispatch/btSphereSphereCollisionAlgorithm.h"
-
-//#include "BulletCollision/CollisionDispatch/btSphereBoxCollisionAlgorithm.h"
-#include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h"
-
-///Dispatching and generation of collision pairs (broadphase)
-#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
-#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
-#include "BulletCollision/BroadphaseCollision/btAxisSweep3.h"
-#include "BulletCollision/BroadphaseCollision/btDbvtBroadphase.h"
-
-///Math library & Utils
-#include "LinearMath/btQuaternion.h"
-#include "LinearMath/btTransform.h"
-#include "LinearMath/btDefaultMotionState.h"
-#include "LinearMath/btQuickprof.h"
-#include "LinearMath/btIDebugDraw.h"
-#include "LinearMath/btSerializer.h"
-
-#endif //BULLET_COLLISION_COMMON_H
diff --git a/thirdparty/bullet/btBulletDynamicsAll.cpp b/thirdparty/bullet/btBulletDynamicsAll.cpp
deleted file mode 100644
index a8069e30ae..0000000000
--- a/thirdparty/bullet/btBulletDynamicsAll.cpp
+++ /dev/null
@@ -1,42 +0,0 @@
-#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.cpp"
-#include "BulletDynamics/Dynamics/btRigidBody.cpp"
-#include "BulletDynamics/Dynamics/btSimulationIslandManagerMt.cpp"
-#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorldMt.cpp"
-#include "BulletDynamics/Dynamics/btSimpleDynamicsWorld.cpp"
-#include "BulletDynamics/ConstraintSolver/btBatchedConstraints.cpp"
-#include "BulletDynamics/ConstraintSolver/btConeTwistConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btSliderConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btContactConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btHinge2Constraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btSolve2LinearConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btFixedConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btHingeConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btTypedConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btGearConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btNNCGConstraintSolver.cpp"
-#include "BulletDynamics/ConstraintSolver/btUniversalConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpring2Constraint.cpp"
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.cpp"
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolverMt.cpp"
-#include "BulletDynamics/MLCPSolvers/btDantzigLCP.cpp"
-#include "BulletDynamics/MLCPSolvers/btLemkeAlgorithm.cpp"
-#include "BulletDynamics/MLCPSolvers/btMLCPSolver.cpp"
-#include "BulletDynamics/Featherstone/btMultiBody.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyDynamicsWorld.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyJointMotor.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyGearConstraint.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraint.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyFixedConstraint.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyPoint2Point.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyConstraintSolver.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyMLCPConstraintSolver.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodyJointLimitConstraint.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodySliderConstraint.cpp"
-#include "BulletDynamics/Featherstone/btMultiBodySphericalJointMotor.cpp"
-#include "BulletDynamics/Vehicle/btRaycastVehicle.cpp"
-#include "BulletDynamics/Vehicle/btWheelInfo.cpp"
-#include "BulletDynamics/Character/btKinematicCharacterController.cpp"
-
diff --git a/thirdparty/bullet/btBulletDynamicsCommon.h b/thirdparty/bullet/btBulletDynamicsCommon.h
deleted file mode 100644
index a421fa4461..0000000000
--- a/thirdparty/bullet/btBulletDynamicsCommon.h
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
-Bullet Continuous Collision Detection and Physics Library
-Copyright (c) 2003-2006 Erwin Coumans http://continuousphysics.com/Bullet/
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from the use of this software.
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it freely,
-subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not claim that you wrote the original software. If you use this software in a product, an acknowledgment in the product documentation would be appreciated but is not required.
-2. Altered source versions must be plainly marked as such, and must not be misrepresented as being the original software.
-3. This notice may not be removed or altered from any source distribution.
-*/
-
-#ifndef BULLET_DYNAMICS_COMMON_H
-#define BULLET_DYNAMICS_COMMON_H
-
-///Common headerfile includes for Bullet Dynamics, including Collision Detection
-#include "btBulletCollisionCommon.h"
-
-#include "BulletDynamics/Dynamics/btDiscreteDynamicsWorld.h"
-
-#include "BulletDynamics/Dynamics/btSimpleDynamicsWorld.h"
-#include "BulletDynamics/Dynamics/btRigidBody.h"
-
-#include "BulletDynamics/ConstraintSolver/btPoint2PointConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btHingeConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btConeTwistConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btSliderConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btGeneric6DofSpringConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btUniversalConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btHinge2Constraint.h"
-#include "BulletDynamics/ConstraintSolver/btGearConstraint.h"
-#include "BulletDynamics/ConstraintSolver/btFixedConstraint.h"
-
-#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
-
-///Vehicle simulation, with wheel contact simulated by raycasts
-#include "BulletDynamics/Vehicle/btRaycastVehicle.h"
-
-#endif //BULLET_DYNAMICS_COMMON_H
diff --git a/thirdparty/bullet/btLinearMathAll.cpp b/thirdparty/bullet/btLinearMathAll.cpp
deleted file mode 100644
index d05a19e630..0000000000
--- a/thirdparty/bullet/btLinearMathAll.cpp
+++ /dev/null
@@ -1,15 +0,0 @@
-#include "LinearMath/btAlignedAllocator.cpp"
-#include "LinearMath/btGeometryUtil.cpp"
-#include "LinearMath/btSerializer.cpp"
-#include "LinearMath/btVector3.cpp"
-#include "LinearMath/btConvexHull.cpp"
-#include "LinearMath/btPolarDecomposition.cpp"
-#include "LinearMath/btSerializer64.cpp"
-#include "LinearMath/btConvexHullComputer.cpp"
-#include "LinearMath/btQuickprof.cpp"
-#include "LinearMath/btThreads.cpp"
-#include "LinearMath/btReducedVector.cpp"
-#include "LinearMath/TaskScheduler/btTaskScheduler.cpp"
-#include "LinearMath/TaskScheduler/btThreadSupportPosix.cpp"
-#include "LinearMath/TaskScheduler/btThreadSupportWin32.cpp"
-
diff --git a/thirdparty/bullet/clew/clew.c b/thirdparty/bullet/clew/clew.c
deleted file mode 100644
index 90caced535..0000000000
--- a/thirdparty/bullet/clew/clew.c
+++ /dev/null
@@ -1,374 +0,0 @@
-//////////////////////////////////////////////////////////////////////////
-// Copyright (c) 2009 Organic Vectory B.V.
-// Written by George van Venrooij
-//
-// Distributed under the Boost Software License, Version 1.0.
-// (See accompanying file license.txt)
-//////////////////////////////////////////////////////////////////////////
-
-#include "clew.h"
-
-#ifdef _WIN32
-#define WIN32_LEAN_AND_MEAN
-#define VC_EXTRALEAN
-#include <windows.h>
-
-typedef HMODULE CLEW_DYNLIB_HANDLE;
-
-#define CLEW_DYNLIB_OPEN LoadLibraryA
-#define CLEW_DYNLIB_CLOSE FreeLibrary
-#define CLEW_DYNLIB_IMPORT GetProcAddress
-#else
-#include <dlfcn.h>
-
-typedef void* CLEW_DYNLIB_HANDLE;
-
-#define CLEW_DYNLIB_OPEN(path) dlopen(path, RTLD_NOW | RTLD_GLOBAL)
-#define CLEW_DYNLIB_CLOSE dlclose
-#define CLEW_DYNLIB_IMPORT dlsym
-#endif
-
-#include <stdlib.h>
-
-//! \brief module handle
-static CLEW_DYNLIB_HANDLE module = NULL;
-
-// Variables holding function entry points
-PFNCLGETPLATFORMIDS __clewGetPlatformIDs = NULL;
-PFNCLGETPLATFORMINFO __clewGetPlatformInfo = NULL;
-PFNCLGETDEVICEIDS __clewGetDeviceIDs = NULL;
-PFNCLGETDEVICEINFO __clewGetDeviceInfo = NULL;
-PFNCLCREATECONTEXT __clewCreateContext = NULL;
-PFNCLCREATECONTEXTFROMTYPE __clewCreateContextFromType = NULL;
-PFNCLRETAINCONTEXT __clewRetainContext = NULL;
-PFNCLRELEASECONTEXT __clewReleaseContext = NULL;
-PFNCLGETCONTEXTINFO __clewGetContextInfo = NULL;
-PFNCLCREATECOMMANDQUEUE __clewCreateCommandQueue = NULL;
-PFNCLRETAINCOMMANDQUEUE __clewRetainCommandQueue = NULL;
-PFNCLRELEASECOMMANDQUEUE __clewReleaseCommandQueue = NULL;
-PFNCLGETCOMMANDQUEUEINFO __clewGetCommandQueueInfo = NULL;
-#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
-PFNCLSETCOMMANDQUEUEPROPERTY __clewSetCommandQueueProperty = NULL;
-#endif
-PFNCLCREATEBUFFER __clewCreateBuffer = NULL;
-PFNCLCREATESUBBUFFER __clewCreateSubBuffer = NULL;
-PFNCLCREATEIMAGE2D __clewCreateImage2D = NULL;
-PFNCLCREATEIMAGE3D __clewCreateImage3D = NULL;
-PFNCLRETAINMEMOBJECT __clewRetainMemObject = NULL;
-PFNCLRELEASEMEMOBJECT __clewReleaseMemObject = NULL;
-PFNCLGETSUPPORTEDIMAGEFORMATS __clewGetSupportedImageFormats = NULL;
-PFNCLGETMEMOBJECTINFO __clewGetMemObjectInfo = NULL;
-PFNCLGETIMAGEINFO __clewGetImageInfo = NULL;
-PFNCLSETMEMOBJECTDESTRUCTORCALLBACK __clewSetMemObjectDestructorCallback = NULL;
-PFNCLCREATESAMPLER __clewCreateSampler = NULL;
-PFNCLRETAINSAMPLER __clewRetainSampler = NULL;
-PFNCLRELEASESAMPLER __clewReleaseSampler = NULL;
-PFNCLGETSAMPLERINFO __clewGetSamplerInfo = NULL;
-PFNCLCREATEPROGRAMWITHSOURCE __clewCreateProgramWithSource = NULL;
-PFNCLCREATEPROGRAMWITHBINARY __clewCreateProgramWithBinary = NULL;
-PFNCLRETAINPROGRAM __clewRetainProgram = NULL;
-PFNCLRELEASEPROGRAM __clewReleaseProgram = NULL;
-PFNCLBUILDPROGRAM __clewBuildProgram = NULL;
-PFNCLUNLOADCOMPILER __clewUnloadCompiler = NULL;
-PFNCLGETPROGRAMINFO __clewGetProgramInfo = NULL;
-PFNCLGETPROGRAMBUILDINFO __clewGetProgramBuildInfo = NULL;
-PFNCLCREATEKERNEL __clewCreateKernel = NULL;
-PFNCLCREATEKERNELSINPROGRAM __clewCreateKernelsInProgram = NULL;
-PFNCLRETAINKERNEL __clewRetainKernel = NULL;
-PFNCLRELEASEKERNEL __clewReleaseKernel = NULL;
-PFNCLSETKERNELARG __clewSetKernelArg = NULL;
-PFNCLGETKERNELINFO __clewGetKernelInfo = NULL;
-PFNCLGETKERNELWORKGROUPINFO __clewGetKernelWorkGroupInfo = NULL;
-PFNCLWAITFOREVENTS __clewWaitForEvents = NULL;
-PFNCLGETEVENTINFO __clewGetEventInfo = NULL;
-PFNCLCREATEUSEREVENT __clewCreateUserEvent = NULL;
-PFNCLRETAINEVENT __clewRetainEvent = NULL;
-PFNCLRELEASEEVENT __clewReleaseEvent = NULL;
-PFNCLSETUSEREVENTSTATUS __clewSetUserEventStatus = NULL;
-PFNCLSETEVENTCALLBACK __clewSetEventCallback = NULL;
-PFNCLGETEVENTPROFILINGINFO __clewGetEventProfilingInfo = NULL;
-PFNCLFLUSH __clewFlush = NULL;
-PFNCLFINISH __clewFinish = NULL;
-PFNCLENQUEUEREADBUFFER __clewEnqueueReadBuffer = NULL;
-PFNCLENQUEUEREADBUFFERRECT __clewEnqueueReadBufferRect = NULL;
-PFNCLENQUEUEWRITEBUFFER __clewEnqueueWriteBuffer = NULL;
-PFNCLENQUEUEWRITEBUFFERRECT __clewEnqueueWriteBufferRect = NULL;
-PFNCLENQUEUECOPYBUFFER __clewEnqueueCopyBuffer = NULL;
-PFNCLENQUEUEREADIMAGE __clewEnqueueReadImage = NULL;
-PFNCLENQUEUEWRITEIMAGE __clewEnqueueWriteImage = NULL;
-PFNCLENQUEUECOPYIMAGE __clewEnqueueCopyImage = NULL;
-PFNCLENQUEUECOPYBUFFERRECT __clewEnqueueCopyBufferRect = NULL;
-PFNCLENQUEUECOPYIMAGETOBUFFER __clewEnqueueCopyImageToBuffer = NULL;
-PFNCLENQUEUECOPYBUFFERTOIMAGE __clewEnqueueCopyBufferToImage = NULL;
-PFNCLENQUEUEMAPBUFFER __clewEnqueueMapBuffer = NULL;
-PFNCLENQUEUEMAPIMAGE __clewEnqueueMapImage = NULL;
-PFNCLENQUEUEUNMAPMEMOBJECT __clewEnqueueUnmapMemObject = NULL;
-PFNCLENQUEUENDRANGEKERNEL __clewEnqueueNDRangeKernel = NULL;
-PFNCLENQUEUETASK __clewEnqueueTask = NULL;
-PFNCLENQUEUENATIVEKERNEL __clewEnqueueNativeKernel = NULL;
-PFNCLENQUEUEMARKER __clewEnqueueMarker = NULL;
-PFNCLENQUEUEWAITFOREVENTS __clewEnqueueWaitForEvents = NULL;
-PFNCLENQUEUEBARRIER __clewEnqueueBarrier = NULL;
-PFNCLGETEXTENSIONFUNCTIONADDRESS __clewGetExtensionFunctionAddress = NULL;
-
-void clewExit(void)
-{
- if (module != NULL)
- {
- // Ignore errors
- CLEW_DYNLIB_CLOSE(module);
- module = NULL;
- }
-}
-
-int clewInit(const char* path)
-{
- int error = 0;
-
- // Check if already initialized
- if (module != NULL)
- {
- return CLEW_SUCCESS;
- }
-
- // Load library
- module = CLEW_DYNLIB_OPEN(path);
-
- // Check for errors
- if (module == NULL)
- {
- return CLEW_ERROR_OPEN_FAILED;
- }
-
- // Set unloading
- error = atexit(clewExit);
-
- if (error)
- {
- // Failure queuing atexit, shutdown with error
- CLEW_DYNLIB_CLOSE(module);
- module = NULL;
-
- return CLEW_ERROR_ATEXIT_FAILED;
- }
-
- // Determine function entry-points
- __clewGetPlatformIDs = (PFNCLGETPLATFORMIDS)CLEW_DYNLIB_IMPORT(module, "clGetPlatformIDs");
- __clewGetPlatformInfo = (PFNCLGETPLATFORMINFO)CLEW_DYNLIB_IMPORT(module, "clGetPlatformInfo");
- __clewGetDeviceIDs = (PFNCLGETDEVICEIDS)CLEW_DYNLIB_IMPORT(module, "clGetDeviceIDs");
- __clewGetDeviceInfo = (PFNCLGETDEVICEINFO)CLEW_DYNLIB_IMPORT(module, "clGetDeviceInfo");
- __clewCreateContext = (PFNCLCREATECONTEXT)CLEW_DYNLIB_IMPORT(module, "clCreateContext");
- __clewCreateContextFromType = (PFNCLCREATECONTEXTFROMTYPE)CLEW_DYNLIB_IMPORT(module, "clCreateContextFromType");
- __clewRetainContext = (PFNCLRETAINCONTEXT)CLEW_DYNLIB_IMPORT(module, "clRetainContext");
- __clewReleaseContext = (PFNCLRELEASECONTEXT)CLEW_DYNLIB_IMPORT(module, "clReleaseContext");
- __clewGetContextInfo = (PFNCLGETCONTEXTINFO)CLEW_DYNLIB_IMPORT(module, "clGetContextInfo");
- __clewCreateCommandQueue = (PFNCLCREATECOMMANDQUEUE)CLEW_DYNLIB_IMPORT(module, "clCreateCommandQueue");
- __clewRetainCommandQueue = (PFNCLRETAINCOMMANDQUEUE)CLEW_DYNLIB_IMPORT(module, "clRetainCommandQueue");
- __clewReleaseCommandQueue = (PFNCLRELEASECOMMANDQUEUE)CLEW_DYNLIB_IMPORT(module, "clReleaseCommandQueue");
- __clewGetCommandQueueInfo = (PFNCLGETCOMMANDQUEUEINFO)CLEW_DYNLIB_IMPORT(module, "clGetCommandQueueInfo");
-#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
- __clewSetCommandQueueProperty = (PFNCLSETCOMMANDQUEUEPROPERTY)CLEW_DYNLIB_IMPORT(module, "clSetCommandQueueProperty");
-#endif
- __clewCreateBuffer = (PFNCLCREATEBUFFER)CLEW_DYNLIB_IMPORT(module, "clCreateBuffer");
- __clewCreateSubBuffer = (PFNCLCREATESUBBUFFER)CLEW_DYNLIB_IMPORT(module, "clCreateBuffer");
- __clewCreateImage2D = (PFNCLCREATEIMAGE2D)CLEW_DYNLIB_IMPORT(module, "clCreateImage2D");
- __clewCreateImage3D = (PFNCLCREATEIMAGE3D)CLEW_DYNLIB_IMPORT(module, "clCreateImage3D");
- __clewRetainMemObject = (PFNCLRETAINMEMOBJECT)CLEW_DYNLIB_IMPORT(module, "clRetainMemObject");
- __clewReleaseMemObject = (PFNCLRELEASEMEMOBJECT)CLEW_DYNLIB_IMPORT(module, "clReleaseMemObject");
- __clewGetSupportedImageFormats = (PFNCLGETSUPPORTEDIMAGEFORMATS)CLEW_DYNLIB_IMPORT(module, "clGetSupportedImageFormats");
- __clewGetMemObjectInfo = (PFNCLGETMEMOBJECTINFO)CLEW_DYNLIB_IMPORT(module, "clGetMemObjectInfo");
- __clewGetImageInfo = (PFNCLGETIMAGEINFO)CLEW_DYNLIB_IMPORT(module, "clGetImageInfo");
- __clewSetMemObjectDestructorCallback = (PFNCLSETMEMOBJECTDESTRUCTORCALLBACK)CLEW_DYNLIB_IMPORT(module, "clSetMemObjectDestructorCallback");
- __clewCreateSampler = (PFNCLCREATESAMPLER)CLEW_DYNLIB_IMPORT(module, "clCreateSampler");
- __clewRetainSampler = (PFNCLRETAINSAMPLER)CLEW_DYNLIB_IMPORT(module, "clRetainSampler");
- __clewReleaseSampler = (PFNCLRELEASESAMPLER)CLEW_DYNLIB_IMPORT(module, "clReleaseSampler");
- __clewGetSamplerInfo = (PFNCLGETSAMPLERINFO)CLEW_DYNLIB_IMPORT(module, "clGetSamplerInfo");
- __clewCreateProgramWithSource = (PFNCLCREATEPROGRAMWITHSOURCE)CLEW_DYNLIB_IMPORT(module, "clCreateProgramWithSource");
- __clewCreateProgramWithBinary = (PFNCLCREATEPROGRAMWITHBINARY)CLEW_DYNLIB_IMPORT(module, "clCreateProgramWithBinary");
- __clewRetainProgram = (PFNCLRETAINPROGRAM)CLEW_DYNLIB_IMPORT(module, "clRetainProgram");
- __clewReleaseProgram = (PFNCLRELEASEPROGRAM)CLEW_DYNLIB_IMPORT(module, "clReleaseProgram");
- __clewBuildProgram = (PFNCLBUILDPROGRAM)CLEW_DYNLIB_IMPORT(module, "clBuildProgram");
- __clewUnloadCompiler = (PFNCLUNLOADCOMPILER)CLEW_DYNLIB_IMPORT(module, "clUnloadCompiler");
- __clewGetProgramInfo = (PFNCLGETPROGRAMINFO)CLEW_DYNLIB_IMPORT(module, "clGetProgramInfo");
- __clewGetProgramBuildInfo = (PFNCLGETPROGRAMBUILDINFO)CLEW_DYNLIB_IMPORT(module, "clGetProgramBuildInfo");
- __clewCreateKernel = (PFNCLCREATEKERNEL)CLEW_DYNLIB_IMPORT(module, "clCreateKernel");
- __clewCreateKernelsInProgram = (PFNCLCREATEKERNELSINPROGRAM)CLEW_DYNLIB_IMPORT(module, "clCreateKernelsInProgram");
- __clewRetainKernel = (PFNCLRETAINKERNEL)CLEW_DYNLIB_IMPORT(module, "clRetainKernel");
- __clewReleaseKernel = (PFNCLRELEASEKERNEL)CLEW_DYNLIB_IMPORT(module, "clReleaseKernel");
- __clewSetKernelArg = (PFNCLSETKERNELARG)CLEW_DYNLIB_IMPORT(module, "clSetKernelArg");
- __clewGetKernelInfo = (PFNCLGETKERNELINFO)CLEW_DYNLIB_IMPORT(module, "clGetKernelInfo");
- __clewGetKernelWorkGroupInfo = (PFNCLGETKERNELWORKGROUPINFO)CLEW_DYNLIB_IMPORT(module, "clGetKernelWorkGroupInfo");
- __clewWaitForEvents = (PFNCLWAITFOREVENTS)CLEW_DYNLIB_IMPORT(module, "clWaitForEvents");
- __clewGetEventInfo = (PFNCLGETEVENTINFO)CLEW_DYNLIB_IMPORT(module, "clGetEventInfo");
- __clewCreateUserEvent = (PFNCLCREATEUSEREVENT)CLEW_DYNLIB_IMPORT(module, "clCreateUserEvent");
- __clewRetainEvent = (PFNCLRETAINEVENT)CLEW_DYNLIB_IMPORT(module, "clRetainEvent");
- __clewReleaseEvent = (PFNCLRELEASEEVENT)CLEW_DYNLIB_IMPORT(module, "clReleaseEvent");
- __clewSetUserEventStatus = (PFNCLSETUSEREVENTSTATUS)CLEW_DYNLIB_IMPORT(module, "clSetUserEventStatus");
- __clewSetEventCallback = (PFNCLSETEVENTCALLBACK)CLEW_DYNLIB_IMPORT(module, "clSetEventCallback");
- __clewGetEventProfilingInfo = (PFNCLGETEVENTPROFILINGINFO)CLEW_DYNLIB_IMPORT(module, "clGetEventProfilingInfo");
- __clewFlush = (PFNCLFLUSH)CLEW_DYNLIB_IMPORT(module, "clFlush");
- __clewFinish = (PFNCLFINISH)CLEW_DYNLIB_IMPORT(module, "clFinish");
- __clewEnqueueReadBuffer = (PFNCLENQUEUEREADBUFFER)CLEW_DYNLIB_IMPORT(module, "clEnqueueReadBuffer");
- __clewEnqueueReadBufferRect = (PFNCLENQUEUEREADBUFFERRECT)CLEW_DYNLIB_IMPORT(module, "clEnqueueReadBufferRect");
- __clewEnqueueWriteBuffer = (PFNCLENQUEUEWRITEBUFFER)CLEW_DYNLIB_IMPORT(module, "clEnqueueWriteBuffer");
- __clewEnqueueWriteBufferRect = (PFNCLENQUEUEWRITEBUFFERRECT)CLEW_DYNLIB_IMPORT(module, "clEnqueueWriteBufferRect");
- __clewEnqueueCopyBuffer = (PFNCLENQUEUECOPYBUFFER)CLEW_DYNLIB_IMPORT(module, "clEnqueueCopyBuffer");
- __clewEnqueueCopyBufferRect = (PFNCLENQUEUECOPYBUFFERRECT)CLEW_DYNLIB_IMPORT(module, "clEnqueueCopyBufferRect");
- __clewEnqueueReadImage = (PFNCLENQUEUEREADIMAGE)CLEW_DYNLIB_IMPORT(module, "clEnqueueReadImage");
- __clewEnqueueWriteImage = (PFNCLENQUEUEWRITEIMAGE)CLEW_DYNLIB_IMPORT(module, "clEnqueueWriteImage");
- __clewEnqueueCopyImage = (PFNCLENQUEUECOPYIMAGE)CLEW_DYNLIB_IMPORT(module, "clEnqueueCopyImage");
- __clewEnqueueCopyImageToBuffer = (PFNCLENQUEUECOPYIMAGETOBUFFER)CLEW_DYNLIB_IMPORT(module, "clEnqueueCopyImageToBuffer");
- __clewEnqueueCopyBufferToImage = (PFNCLENQUEUECOPYBUFFERTOIMAGE)CLEW_DYNLIB_IMPORT(module, "clEnqueueCopyBufferToImage");
- __clewEnqueueMapBuffer = (PFNCLENQUEUEMAPBUFFER)CLEW_DYNLIB_IMPORT(module, "clEnqueueMapBuffer");
- __clewEnqueueMapImage = (PFNCLENQUEUEMAPIMAGE)CLEW_DYNLIB_IMPORT(module, "clEnqueueMapImage");
- __clewEnqueueUnmapMemObject = (PFNCLENQUEUEUNMAPMEMOBJECT)CLEW_DYNLIB_IMPORT(module, "clEnqueueUnmapMemObject");
- __clewEnqueueNDRangeKernel = (PFNCLENQUEUENDRANGEKERNEL)CLEW_DYNLIB_IMPORT(module, "clEnqueueNDRangeKernel");
- __clewEnqueueTask = (PFNCLENQUEUETASK)CLEW_DYNLIB_IMPORT(module, "clEnqueueTask");
- __clewEnqueueNativeKernel = (PFNCLENQUEUENATIVEKERNEL)CLEW_DYNLIB_IMPORT(module, "clEnqueueNativeKernel");
- __clewEnqueueMarker = (PFNCLENQUEUEMARKER)CLEW_DYNLIB_IMPORT(module, "clEnqueueMarker");
- __clewEnqueueWaitForEvents = (PFNCLENQUEUEWAITFOREVENTS)CLEW_DYNLIB_IMPORT(module, "clEnqueueWaitForEvents");
- __clewEnqueueBarrier = (PFNCLENQUEUEBARRIER)CLEW_DYNLIB_IMPORT(module, "clEnqueueBarrier");
- __clewGetExtensionFunctionAddress = (PFNCLGETEXTENSIONFUNCTIONADDRESS)CLEW_DYNLIB_IMPORT(module, "clGetExtensionFunctionAddress");
-
- return CLEW_SUCCESS;
-}
-
-const char* clewErrorString(cl_int error)
-{
- static const char* strings[] =
- {
- // Error Codes
- "CL_SUCCESS" // 0
- ,
- "CL_DEVICE_NOT_FOUND" // -1
- ,
- "CL_DEVICE_NOT_AVAILABLE" // -2
- ,
- "CL_COMPILER_NOT_AVAILABLE" // -3
- ,
- "CL_MEM_OBJECT_ALLOCATION_FAILURE" // -4
- ,
- "CL_OUT_OF_RESOURCES" // -5
- ,
- "CL_OUT_OF_HOST_MEMORY" // -6
- ,
- "CL_PROFILING_INFO_NOT_AVAILABLE" // -7
- ,
- "CL_MEM_COPY_OVERLAP" // -8
- ,
- "CL_IMAGE_FORMAT_MISMATCH" // -9
- ,
- "CL_IMAGE_FORMAT_NOT_SUPPORTED" // -10
- ,
- "CL_BUILD_PROGRAM_FAILURE" // -11
- ,
- "CL_MAP_FAILURE" // -12
-
- ,
- "" // -13
- ,
- "" // -14
- ,
- "" // -15
- ,
- "" // -16
- ,
- "" // -17
- ,
- "" // -18
- ,
- "" // -19
-
- ,
- "" // -20
- ,
- "" // -21
- ,
- "" // -22
- ,
- "" // -23
- ,
- "" // -24
- ,
- "" // -25
- ,
- "" // -26
- ,
- "" // -27
- ,
- "" // -28
- ,
- "" // -29
-
- ,
- "CL_INVALID_VALUE" // -30
- ,
- "CL_INVALID_DEVICE_TYPE" // -31
- ,
- "CL_INVALID_PLATFORM" // -32
- ,
- "CL_INVALID_DEVICE" // -33
- ,
- "CL_INVALID_CONTEXT" // -34
- ,
- "CL_INVALID_QUEUE_PROPERTIES" // -35
- ,
- "CL_INVALID_COMMAND_QUEUE" // -36
- ,
- "CL_INVALID_HOST_PTR" // -37
- ,
- "CL_INVALID_MEM_OBJECT" // -38
- ,
- "CL_INVALID_IMAGE_FORMAT_DESCRIPTOR" // -39
- ,
- "CL_INVALID_IMAGE_SIZE" // -40
- ,
- "CL_INVALID_SAMPLER" // -41
- ,
- "CL_INVALID_BINARY" // -42
- ,
- "CL_INVALID_BUILD_OPTIONS" // -43
- ,
- "CL_INVALID_PROGRAM" // -44
- ,
- "CL_INVALID_PROGRAM_EXECUTABLE" // -45
- ,
- "CL_INVALID_KERNEL_NAME" // -46
- ,
- "CL_INVALID_KERNEL_DEFINITION" // -47
- ,
- "CL_INVALID_KERNEL" // -48
- ,
- "CL_INVALID_ARG_INDEX" // -49
- ,
- "CL_INVALID_ARG_VALUE" // -50
- ,
- "CL_INVALID_ARG_SIZE" // -51
- ,
- "CL_INVALID_KERNEL_ARGS" // -52
- ,
- "CL_INVALID_WORK_DIMENSION" // -53
- ,
- "CL_INVALID_WORK_GROUP_SIZE" // -54
- ,
- "CL_INVALID_WORK_ITEM_SIZE" // -55
- ,
- "CL_INVALID_GLOBAL_OFFSET" // -56
- ,
- "CL_INVALID_EVENT_WAIT_LIST" // -57
- ,
- "CL_INVALID_EVENT" // -58
- ,
- "CL_INVALID_OPERATION" // -59
- ,
- "CL_INVALID_GL_OBJECT" // -60
- ,
- "CL_INVALID_BUFFER_SIZE" // -61
- ,
- "CL_INVALID_MIP_LEVEL" // -62
- ,
- "CL_INVALID_GLOBAL_WORK_SIZE" // -63
- };
-
- return strings[-error];
-}
diff --git a/thirdparty/bullet/clew/clew.h b/thirdparty/bullet/clew/clew.h
deleted file mode 100644
index cba8585233..0000000000
--- a/thirdparty/bullet/clew/clew.h
+++ /dev/null
@@ -1,2708 +0,0 @@
-#ifndef CLEW_HPP_INCLUDED
-#define CLEW_HPP_INCLUDED
-
-//////////////////////////////////////////////////////////////////////////
-// Copyright (c) 2009-2011 Organic Vectory B.V., KindDragon
-// Written by George van Venrooij
-//
-// Distributed under the MIT License.
-//////////////////////////////////////////////////////////////////////////
-
-//! \file clew.h
-//! \brief OpenCL run-time loader header
-//!
-//! This file contains a copy of the contents of CL.H and CL_PLATFORM.H from the
-//! official OpenCL spec. The purpose of this code is to load the OpenCL dynamic
-//! library at run-time and thus allow the executable to function on many
-//! platforms regardless of the vendor of the OpenCL driver actually installed.
-//! Some of the techniques used here were inspired by work done in the GLEW
-//! library (http://glew.sourceforge.net/)
-
-// Run-time dynamic linking functionality based on concepts used in GLEW
-#ifdef __OPENCL_CL_H
-#error cl.h included before clew.h
-#endif
-
-#ifdef __OPENCL_CL_PLATFORM_H
-#error cl_platform.h included before clew.h
-#endif
-
-// Prevent cl.h inclusion
-#define __OPENCL_CL_H
-// Prevent cl_platform.h inclusion
-#define __CL_PLATFORM_H
-
-/*******************************************************************************
-* Copyright (c) 2008-2010 The Khronos Group Inc.
-*
-* Permission is hereby granted, free of charge, to any person obtaining a
-* copy of this software and/or associated documentation files (the
-* "Materials"), to deal in the Materials without restriction, including
-* without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Materials, and to
-* permit persons to whom the Materials are furnished to do so, subject to
-* the following conditions:
-*
-* The above copyright notice and this permission notice shall be included
-* in all copies or substantial portions of the Materials.
-*
-* THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-* MATERIALS OR THE USE OR OTHER DEALINGS IN THE MATERIALS.
-******************************************************************************/
-#ifdef __APPLE__
-/* Contains #defines for AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER below */
-#include <AvailabilityMacros.h>
-#endif
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
-
-#if defined(_WIN32)
-#define CL_API_ENTRY
-#define CL_API_CALL __stdcall
-#define CL_CALLBACK __stdcall
-#else
-#define CL_API_ENTRY
-#define CL_API_CALL
-#define CL_CALLBACK
-#endif
- //disabled the APPLE thing, don't know why it is there, is just causes tons of warnings
-
-#ifdef __APPLE1__
-#define CL_EXTENSION_WEAK_LINK __attribute__((weak_import))
-#define CL_API_SUFFIX__VERSION_1_0 AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-#define CL_EXT_SUFFIX__VERSION_1_0 CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-#define CL_API_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK
-#define CL_EXT_SUFFIX__VERSION_1_1 CL_EXTENSION_WEAK_LINK
-#define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED CL_EXTENSION_WEAK_LINK AVAILABLE_MAC_OS_X_VERSION_10_6_AND_LATER
-#else
-#define CL_EXTENSION_WEAK_LINK
-#define CL_API_SUFFIX__VERSION_1_0
-#define CL_EXT_SUFFIX__VERSION_1_0
-#define CL_API_SUFFIX__VERSION_1_1
-#define CL_EXT_SUFFIX__VERSION_1_1
-#define CL_EXT_SUFFIX__VERSION_1_0_DEPRECATED
-#endif
-
-#if (defined(_WIN32) && defined(_MSC_VER))
-
- /* scalar types */
- typedef signed __int8 cl_char;
- typedef unsigned __int8 cl_uchar;
- typedef signed __int16 cl_short;
- typedef unsigned __int16 cl_ushort;
- typedef signed __int32 cl_int;
- typedef unsigned __int32 cl_uint;
- typedef signed __int64 cl_long;
- typedef unsigned __int64 cl_ulong;
-
- typedef unsigned __int16 cl_half;
- typedef float cl_float;
- typedef double cl_double;
-
-/* Macro names and corresponding values defined by OpenCL */
-#define CL_CHAR_BIT 8
-#define CL_SCHAR_MAX 127
-#define CL_SCHAR_MIN (-127 - 1)
-#define CL_CHAR_MAX CL_SCHAR_MAX
-#define CL_CHAR_MIN CL_SCHAR_MIN
-#define CL_UCHAR_MAX 255
-#define CL_SHRT_MAX 32767
-#define CL_SHRT_MIN (-32767 - 1)
-#define CL_USHRT_MAX 65535
-#define CL_INT_MAX 2147483647
-#define CL_INT_MIN (-2147483647 - 1)
-#define CL_UINT_MAX 0xffffffffU
-#define CL_LONG_MAX ((cl_long)0x7FFFFFFFFFFFFFFFLL)
-#define CL_LONG_MIN ((cl_long)-0x7FFFFFFFFFFFFFFFLL - 1LL)
-#define CL_ULONG_MAX ((cl_ulong)0xFFFFFFFFFFFFFFFFULL)
-
-#define CL_FLT_DIG 6
-#define CL_FLT_MANT_DIG 24
-#define CL_FLT_MAX_10_EXP +38
-#define CL_FLT_MAX_EXP +128
-#define CL_FLT_MIN_10_EXP -37
-#define CL_FLT_MIN_EXP -125
-#define CL_FLT_RADIX 2
-#define CL_FLT_MAX 340282346638528859811704183484516925440.0f
-#define CL_FLT_MIN 1.175494350822287507969e-38f
-#define CL_FLT_EPSILON 0x1.0p-23f
-
-#define CL_DBL_DIG 15
-#define CL_DBL_MANT_DIG 53
-#define CL_DBL_MAX_10_EXP +308
-#define CL_DBL_MAX_EXP +1024
-#define CL_DBL_MIN_10_EXP -307
-#define CL_DBL_MIN_EXP -1021
-#define CL_DBL_RADIX 2
-#define CL_DBL_MAX 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.0
-#define CL_DBL_MIN 2.225073858507201383090e-308
-#define CL_DBL_EPSILON 2.220446049250313080847e-16
-
-#define CL_M_E 2.718281828459045090796
-#define CL_M_LOG2E 1.442695040888963387005
-#define CL_M_LOG10E 0.434294481903251816668
-#define CL_M_LN2 0.693147180559945286227
-#define CL_M_LN10 2.302585092994045901094
-#define CL_M_PI 3.141592653589793115998
-#define CL_M_PI_2 1.570796326794896557999
-#define CL_M_PI_4 0.785398163397448278999
-#define CL_M_1_PI 0.318309886183790691216
-#define CL_M_2_PI 0.636619772367581382433
-#define CL_M_2_SQRTPI 1.128379167095512558561
-#define CL_M_SQRT2 1.414213562373095145475
-#define CL_M_SQRT1_2 0.707106781186547572737
-
-#define CL_M_E_F 2.71828174591064f
-#define CL_M_LOG2E_F 1.44269502162933f
-#define CL_M_LOG10E_F 0.43429449200630f
-#define CL_M_LN2_F 0.69314718246460f
-#define CL_M_LN10_F 2.30258512496948f
-#define CL_M_PI_F 3.14159274101257f
-#define CL_M_PI_2_F 1.57079637050629f
-#define CL_M_PI_4_F 0.78539818525314f
-#define CL_M_1_PI_F 0.31830987334251f
-#define CL_M_2_PI_F 0.63661974668503f
-#define CL_M_2_SQRTPI_F 1.12837922573090f
-#define CL_M_SQRT2_F 1.41421353816986f
-#define CL_M_SQRT1_2_F 0.70710676908493f
-
-#define CL_NAN (CL_INFINITY - CL_INFINITY)
-#define CL_HUGE_VALF ((cl_float)1e50)
-#define CL_HUGE_VAL ((cl_double)1e500)
-#define CL_MAXFLOAT CL_FLT_MAX
-#define CL_INFINITY CL_HUGE_VALF
-
-#else
-
-#include <stdint.h>
-
-/* scalar types */
-typedef int8_t cl_char;
-typedef uint8_t cl_uchar;
-typedef int16_t cl_short __attribute__((aligned(2)));
-typedef uint16_t cl_ushort __attribute__((aligned(2)));
-typedef int32_t cl_int __attribute__((aligned(4)));
-typedef uint32_t cl_uint __attribute__((aligned(4)));
-typedef int64_t cl_long __attribute__((aligned(8)));
-typedef uint64_t cl_ulong __attribute__((aligned(8)));
-
-typedef uint16_t cl_half __attribute__((aligned(2)));
-typedef float cl_float __attribute__((aligned(4)));
-typedef double cl_double __attribute__((aligned(8)));
-
-/* Macro names and corresponding values defined by OpenCL */
-#define CL_CHAR_BIT 8
-#define CL_SCHAR_MAX 127
-#define CL_SCHAR_MIN (-127 - 1)
-#define CL_CHAR_MAX CL_SCHAR_MAX
-#define CL_CHAR_MIN CL_SCHAR_MIN
-#define CL_UCHAR_MAX 255
-#define CL_SHRT_MAX 32767
-#define CL_SHRT_MIN (-32767 - 1)
-#define CL_USHRT_MAX 65535
-#define CL_INT_MAX 2147483647
-#define CL_INT_MIN (-2147483647 - 1)
-#define CL_UINT_MAX 0xffffffffU
-#define CL_LONG_MAX ((cl_long)0x7FFFFFFFFFFFFFFFLL)
-#define CL_LONG_MIN ((cl_long)-0x7FFFFFFFFFFFFFFFLL - 1LL)
-#define CL_ULONG_MAX ((cl_ulong)0xFFFFFFFFFFFFFFFFULL)
-
-#define CL_FLT_DIG 6
-#define CL_FLT_MANT_DIG 24
-#define CL_FLT_MAX_10_EXP +38
-#define CL_FLT_MAX_EXP +128
-#define CL_FLT_MIN_10_EXP -37
-#define CL_FLT_MIN_EXP -125
-#define CL_FLT_RADIX 2
-#define CL_FLT_MAX 0x1.fffffep127f
-#define CL_FLT_MIN 0x1.0p-126f
-#define CL_FLT_EPSILON 0x1.0p-23f
-
-#define CL_DBL_DIG 15
-#define CL_DBL_MANT_DIG 53
-#define CL_DBL_MAX_10_EXP +308
-#define CL_DBL_MAX_EXP +1024
-#define CL_DBL_MIN_10_EXP -307
-#define CL_DBL_MIN_EXP -1021
-#define CL_DBL_RADIX 2
-#define CL_DBL_MAX 0x1.fffffffffffffp1023
-#define CL_DBL_MIN 0x1.0p-1022
-#define CL_DBL_EPSILON 0x1.0p-52
-
-#define CL_M_E 2.718281828459045090796
-#define CL_M_LOG2E 1.442695040888963387005
-#define CL_M_LOG10E 0.434294481903251816668
-#define CL_M_LN2 0.693147180559945286227
-#define CL_M_LN10 2.302585092994045901094
-#define CL_M_PI 3.141592653589793115998
-#define CL_M_PI_2 1.570796326794896557999
-#define CL_M_PI_4 0.785398163397448278999
-#define CL_M_1_PI 0.318309886183790691216
-#define CL_M_2_PI 0.636619772367581382433
-#define CL_M_2_SQRTPI 1.128379167095512558561
-#define CL_M_SQRT2 1.414213562373095145475
-#define CL_M_SQRT1_2 0.707106781186547572737
-
-#define CL_M_E_F 2.71828174591064f
-#define CL_M_LOG2E_F 1.44269502162933f
-#define CL_M_LOG10E_F 0.43429449200630f
-#define CL_M_LN2_F 0.69314718246460f
-#define CL_M_LN10_F 2.30258512496948f
-#define CL_M_PI_F 3.14159274101257f
-#define CL_M_PI_2_F 1.57079637050629f
-#define CL_M_PI_4_F 0.78539818525314f
-#define CL_M_1_PI_F 0.31830987334251f
-#define CL_M_2_PI_F 0.63661974668503f
-#define CL_M_2_SQRTPI_F 1.12837922573090f
-#define CL_M_SQRT2_F 1.41421353816986f
-#define CL_M_SQRT1_2_F 0.70710676908493f
-
-#if defined(__GNUC__)
-#define CL_HUGE_VALF __builtin_huge_valf()
-#define CL_HUGE_VAL __builtin_huge_val()
-#define CL_NAN __builtin_nanf("")
-#else
-#define CL_HUGE_VALF ((cl_float)1e50)
-#define CL_HUGE_VAL ((cl_double)1e500)
-float nanf(const char *);
-#define CL_NAN nanf("")
-#endif
-#define CL_MAXFLOAT CL_FLT_MAX
-#define CL_INFINITY CL_HUGE_VALF
-
-#endif
-
-#include <stddef.h>
-
- /* Mirror types to GL types. Mirror types allow us to avoid deciding which headers to load based on whether we are using GL or GLES here. */
- typedef unsigned int cl_GLuint;
- typedef int cl_GLint;
- typedef unsigned int cl_GLenum;
-
- /*
- * Vector types
- *
- * Note: OpenCL requires that all types be naturally aligned.
- * This means that vector types must be naturally aligned.
- * For example, a vector of four floats must be aligned to
- * a 16 byte boundary (calculated as 4 * the natural 4-byte
- * alignment of the float). The alignment qualifiers here
- * will only function properly if your compiler supports them
- * and if you don't actively work to defeat them. For example,
- * in order for a cl_float4 to be 16 byte aligned in a struct,
- * the start of the struct must itself be 16-byte aligned.
- *
- * Maintaining proper alignment is the user's responsibility.
- */
-
-#ifdef _MSC_VER
-#if defined(_M_IX86)
-#if _M_IX86_FP >= 0
-#define __SSE__
-#endif
-#if _M_IX86_FP >= 1
-#define __SSE2__
-#endif
-#elif defined(_M_X64)
-#define __SSE__
-#define __SSE2__
-#endif
-#endif
-
-/* Define basic vector types */
-#if defined(__VEC__)
-#include <altivec.h> /* may be omitted depending on compiler. AltiVec spec provides no way to detect whether the header is required. */
- typedef vector unsigned char __cl_uchar16;
- typedef vector signed char __cl_char16;
- typedef vector unsigned short __cl_ushort8;
- typedef vector signed short __cl_short8;
- typedef vector unsigned int __cl_uint4;
- typedef vector signed int __cl_int4;
- typedef vector float __cl_float4;
-#define __CL_UCHAR16__ 1
-#define __CL_CHAR16__ 1
-#define __CL_USHORT8__ 1
-#define __CL_SHORT8__ 1
-#define __CL_UINT4__ 1
-#define __CL_INT4__ 1
-#define __CL_FLOAT4__ 1
-#endif
-
-#if defined(__SSE__)
-#if defined(__MINGW64__)
-#include <intrin.h>
-#else
-#include <xmmintrin.h>
-#endif
-#if defined(__GNUC__) && !defined(__ICC)
- typedef float __cl_float4 __attribute__((vector_size(16)));
-#else
- typedef __m128 __cl_float4;
-#endif
-#define __CL_FLOAT4__ 1
-#endif
-
-#if defined(__SSE2__)
-#if defined(__MINGW64__)
-#include <intrin.h>
-#else
-#include <emmintrin.h>
-#endif
-#if defined(__GNUC__) && !defined(__ICC)
- typedef cl_uchar __cl_uchar16 __attribute__((vector_size(16)));
- typedef cl_char __cl_char16 __attribute__((vector_size(16)));
- typedef cl_ushort __cl_ushort8 __attribute__((vector_size(16)));
- typedef cl_short __cl_short8 __attribute__((vector_size(16)));
- typedef cl_uint __cl_uint4 __attribute__((vector_size(16)));
- typedef cl_int __cl_int4 __attribute__((vector_size(16)));
- typedef cl_ulong __cl_ulong2 __attribute__((vector_size(16)));
- typedef cl_long __cl_long2 __attribute__((vector_size(16)));
- typedef cl_double __cl_double2 __attribute__((vector_size(16)));
-#else
- typedef __m128i __cl_uchar16;
- typedef __m128i __cl_char16;
- typedef __m128i __cl_ushort8;
- typedef __m128i __cl_short8;
- typedef __m128i __cl_uint4;
- typedef __m128i __cl_int4;
- typedef __m128i __cl_ulong2;
- typedef __m128i __cl_long2;
- typedef __m128d __cl_double2;
-#endif
-#define __CL_UCHAR16__ 1
-#define __CL_CHAR16__ 1
-#define __CL_USHORT8__ 1
-#define __CL_SHORT8__ 1
-#define __CL_INT4__ 1
-#define __CL_UINT4__ 1
-#define __CL_ULONG2__ 1
-#define __CL_LONG2__ 1
-#define __CL_DOUBLE2__ 1
-#endif
-
-#if defined(__MMX__)
-#include <mmintrin.h>
-#if defined(__GNUC__) && !defined(__ICC)
- typedef cl_uchar __cl_uchar8 __attribute__((vector_size(8)));
- typedef cl_char __cl_char8 __attribute__((vector_size(8)));
- typedef cl_ushort __cl_ushort4 __attribute__((vector_size(8)));
- typedef cl_short __cl_short4 __attribute__((vector_size(8)));
- typedef cl_uint __cl_uint2 __attribute__((vector_size(8)));
- typedef cl_int __cl_int2 __attribute__((vector_size(8)));
- typedef cl_ulong __cl_ulong1 __attribute__((vector_size(8)));
- typedef cl_long __cl_long1 __attribute__((vector_size(8)));
- typedef cl_float __cl_float2 __attribute__((vector_size(8)));
-#else
- typedef __m64 __cl_uchar8;
- typedef __m64 __cl_char8;
- typedef __m64 __cl_ushort4;
- typedef __m64 __cl_short4;
- typedef __m64 __cl_uint2;
- typedef __m64 __cl_int2;
- typedef __m64 __cl_ulong1;
- typedef __m64 __cl_long1;
- typedef __m64 __cl_float2;
-#endif
-#define __CL_UCHAR8__ 1
-#define __CL_CHAR8__ 1
-#define __CL_USHORT4__ 1
-#define __CL_SHORT4__ 1
-#define __CL_INT2__ 1
-#define __CL_UINT2__ 1
-#define __CL_ULONG1__ 1
-#define __CL_LONG1__ 1
-#define __CL_FLOAT2__ 1
-#endif
-
-#if defined(__AVX__)
-#if defined(__MINGW64__)
-#include <intrin.h>
-#else
-#include <immintrin.h>
-#endif
-#if defined(__GNUC__) && !defined(__ICC)
- typedef cl_float __cl_float8 __attribute__((vector_size(32)));
- typedef cl_double __cl_double4 __attribute__((vector_size(32)));
-#else
- typedef __m256 __cl_float8;
- typedef __m256d __cl_double4;
-#endif
-#define __CL_FLOAT8__ 1
-#define __CL_DOUBLE4__ 1
-#endif
-
-/* Define alignment keys */
-#if defined(__GNUC__)
-#define CL_ALIGNED(_x) __attribute__((aligned(_x)))
-#elif defined(_WIN32) && (_MSC_VER)
-/* Alignment keys neutered on windows because MSVC can't swallow function arguments with alignment requirements */
-/* http://msdn.microsoft.com/en-us/library/373ak2y1%28VS.71%29.aspx */
-/* #include <crtdefs.h> */
-/* #define CL_ALIGNED(_x) _CRT_ALIGN(_x) */
-#define CL_ALIGNED(_x)
-#else
-#warning Need to implement some method to align data here
-#define CL_ALIGNED(_x)
-#endif
-
-/* Indicate whether .xyzw, .s0123 and .hi.lo are supported */
-#if (defined(__GNUC__) && !defined(__STRICT_ANSI__)) || (defined(_MSC_VER) && !defined(__STDC__))
-/* .xyzw and .s0123...{f|F} are supported */
-#define CL_HAS_NAMED_VECTOR_FIELDS 1
-/* .hi and .lo are supported */
-#define CL_HAS_HI_LO_VECTOR_FIELDS 1
-
-#define CL_NAMED_STRUCT_SUPPORTED
-#endif
-
-#if defined(CL_NAMED_STRUCT_SUPPORTED) && defined(_MSC_VER)
-#define __extension__ __pragma(warning(suppress : 4201))
-#endif
-
- /* Define cl_vector types */
-
- /* ---- cl_charn ---- */
- typedef union {
- cl_char CL_ALIGNED(2) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_char x, y;
- };
- __extension__ struct
- {
- cl_char s0, s1;
- };
- __extension__ struct
- {
- cl_char lo, hi;
- };
-#endif
-#if defined(__CL_CHAR2__)
- __cl_char2 v2;
-#endif
- } cl_char2;
-
- typedef union {
- cl_char CL_ALIGNED(4) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_char x, y, z, w;
- };
- __extension__ struct
- {
- cl_char s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_char2 lo, hi;
- };
-#endif
-#if defined(__CL_CHAR2__)
- __cl_char2 v2[2];
-#endif
-#if defined(__CL_CHAR4__)
- __cl_char4 v4;
-#endif
- } cl_char4;
-
- /* cl_char3 is identical in size, alignment and behavior to cl_char4. See section 6.1.5. */
- typedef cl_char4 cl_char3;
-
- typedef union {
- cl_char CL_ALIGNED(8) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_char x, y, z, w;
- };
- __extension__ struct
- {
- cl_char s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_char4 lo, hi;
- };
-#endif
-#if defined(__CL_CHAR2__)
- __cl_char2 v2[4];
-#endif
-#if defined(__CL_CHAR4__)
- __cl_char4 v4[2];
-#endif
-#if defined(__CL_CHAR8__)
- __cl_char8 v8;
-#endif
- } cl_char8;
-
- typedef union {
- cl_char CL_ALIGNED(16) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_char x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_char s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_char8 lo, hi;
- };
-#endif
-#if defined(__CL_CHAR2__)
- __cl_char2 v2[8];
-#endif
-#if defined(__CL_CHAR4__)
- __cl_char4 v4[4];
-#endif
-#if defined(__CL_CHAR8__)
- __cl_char8 v8[2];
-#endif
-#if defined(__CL_CHAR16__)
- __cl_char16 v16;
-#endif
- } cl_char16;
-
- /* ---- cl_ucharn ---- */
- typedef union {
- cl_uchar CL_ALIGNED(2) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uchar x, y;
- };
- __extension__ struct
- {
- cl_uchar s0, s1;
- };
- __extension__ struct
- {
- cl_uchar lo, hi;
- };
-#endif
-#if defined(__cl_uchar2__)
- __cl_uchar2 v2;
-#endif
- } cl_uchar2;
-
- typedef union {
- cl_uchar CL_ALIGNED(4) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uchar x, y, z, w;
- };
- __extension__ struct
- {
- cl_uchar s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_uchar2 lo, hi;
- };
-#endif
-#if defined(__CL_UCHAR2__)
- __cl_uchar2 v2[2];
-#endif
-#if defined(__CL_UCHAR4__)
- __cl_uchar4 v4;
-#endif
- } cl_uchar4;
-
- /* cl_uchar3 is identical in size, alignment and behavior to cl_uchar4. See section 6.1.5. */
- typedef cl_uchar4 cl_uchar3;
-
- typedef union {
- cl_uchar CL_ALIGNED(8) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uchar x, y, z, w;
- };
- __extension__ struct
- {
- cl_uchar s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_uchar4 lo, hi;
- };
-#endif
-#if defined(__CL_UCHAR2__)
- __cl_uchar2 v2[4];
-#endif
-#if defined(__CL_UCHAR4__)
- __cl_uchar4 v4[2];
-#endif
-#if defined(__CL_UCHAR8__)
- __cl_uchar8 v8;
-#endif
- } cl_uchar8;
-
- typedef union {
- cl_uchar CL_ALIGNED(16) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uchar x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_uchar s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_uchar8 lo, hi;
- };
-#endif
-#if defined(__CL_UCHAR2__)
- __cl_uchar2 v2[8];
-#endif
-#if defined(__CL_UCHAR4__)
- __cl_uchar4 v4[4];
-#endif
-#if defined(__CL_UCHAR8__)
- __cl_uchar8 v8[2];
-#endif
-#if defined(__CL_UCHAR16__)
- __cl_uchar16 v16;
-#endif
- } cl_uchar16;
-
- /* ---- cl_shortn ---- */
- typedef union {
- cl_short CL_ALIGNED(4) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_short x, y;
- };
- __extension__ struct
- {
- cl_short s0, s1;
- };
- __extension__ struct
- {
- cl_short lo, hi;
- };
-#endif
-#if defined(__CL_SHORT2__)
- __cl_short2 v2;
-#endif
- } cl_short2;
-
- typedef union {
- cl_short CL_ALIGNED(8) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_short x, y, z, w;
- };
- __extension__ struct
- {
- cl_short s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_short2 lo, hi;
- };
-#endif
-#if defined(__CL_SHORT2__)
- __cl_short2 v2[2];
-#endif
-#if defined(__CL_SHORT4__)
- __cl_short4 v4;
-#endif
- } cl_short4;
-
- /* cl_short3 is identical in size, alignment and behavior to cl_short4. See section 6.1.5. */
- typedef cl_short4 cl_short3;
-
- typedef union {
- cl_short CL_ALIGNED(16) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_short x, y, z, w;
- };
- __extension__ struct
- {
- cl_short s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_short4 lo, hi;
- };
-#endif
-#if defined(__CL_SHORT2__)
- __cl_short2 v2[4];
-#endif
-#if defined(__CL_SHORT4__)
- __cl_short4 v4[2];
-#endif
-#if defined(__CL_SHORT8__)
- __cl_short8 v8;
-#endif
- } cl_short8;
-
- typedef union {
- cl_short CL_ALIGNED(32) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_short x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_short s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_short8 lo, hi;
- };
-#endif
-#if defined(__CL_SHORT2__)
- __cl_short2 v2[8];
-#endif
-#if defined(__CL_SHORT4__)
- __cl_short4 v4[4];
-#endif
-#if defined(__CL_SHORT8__)
- __cl_short8 v8[2];
-#endif
-#if defined(__CL_SHORT16__)
- __cl_short16 v16;
-#endif
- } cl_short16;
-
- /* ---- cl_ushortn ---- */
- typedef union {
- cl_ushort CL_ALIGNED(4) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ushort x, y;
- };
- __extension__ struct
- {
- cl_ushort s0, s1;
- };
- __extension__ struct
- {
- cl_ushort lo, hi;
- };
-#endif
-#if defined(__CL_USHORT2__)
- __cl_ushort2 v2;
-#endif
- } cl_ushort2;
-
- typedef union {
- cl_ushort CL_ALIGNED(8) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ushort x, y, z, w;
- };
- __extension__ struct
- {
- cl_ushort s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_ushort2 lo, hi;
- };
-#endif
-#if defined(__CL_USHORT2__)
- __cl_ushort2 v2[2];
-#endif
-#if defined(__CL_USHORT4__)
- __cl_ushort4 v4;
-#endif
- } cl_ushort4;
-
- /* cl_ushort3 is identical in size, alignment and behavior to cl_ushort4. See section 6.1.5. */
- typedef cl_ushort4 cl_ushort3;
-
- typedef union {
- cl_ushort CL_ALIGNED(16) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ushort x, y, z, w;
- };
- __extension__ struct
- {
- cl_ushort s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_ushort4 lo, hi;
- };
-#endif
-#if defined(__CL_USHORT2__)
- __cl_ushort2 v2[4];
-#endif
-#if defined(__CL_USHORT4__)
- __cl_ushort4 v4[2];
-#endif
-#if defined(__CL_USHORT8__)
- __cl_ushort8 v8;
-#endif
- } cl_ushort8;
-
- typedef union {
- cl_ushort CL_ALIGNED(32) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ushort x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_ushort s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_ushort8 lo, hi;
- };
-#endif
-#if defined(__CL_USHORT2__)
- __cl_ushort2 v2[8];
-#endif
-#if defined(__CL_USHORT4__)
- __cl_ushort4 v4[4];
-#endif
-#if defined(__CL_USHORT8__)
- __cl_ushort8 v8[2];
-#endif
-#if defined(__CL_USHORT16__)
- __cl_ushort16 v16;
-#endif
- } cl_ushort16;
-
- /* ---- cl_intn ---- */
- typedef union {
- cl_int CL_ALIGNED(8) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_int x, y;
- };
- __extension__ struct
- {
- cl_int s0, s1;
- };
- __extension__ struct
- {
- cl_int lo, hi;
- };
-#endif
-#if defined(__CL_INT2__)
- __cl_int2 v2;
-#endif
- } cl_int2;
-
- typedef union {
- cl_int CL_ALIGNED(16) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_int x, y, z, w;
- };
- __extension__ struct
- {
- cl_int s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_int2 lo, hi;
- };
-#endif
-#if defined(__CL_INT2__)
- __cl_int2 v2[2];
-#endif
-#if defined(__CL_INT4__)
- __cl_int4 v4;
-#endif
- } cl_int4;
-
- /* cl_int3 is identical in size, alignment and behavior to cl_int4. See section 6.1.5. */
- typedef cl_int4 cl_int3;
-
- typedef union {
- cl_int CL_ALIGNED(32) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_int x, y, z, w;
- };
- __extension__ struct
- {
- cl_int s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_int4 lo, hi;
- };
-#endif
-#if defined(__CL_INT2__)
- __cl_int2 v2[4];
-#endif
-#if defined(__CL_INT4__)
- __cl_int4 v4[2];
-#endif
-#if defined(__CL_INT8__)
- __cl_int8 v8;
-#endif
- } cl_int8;
-
- typedef union {
- cl_int CL_ALIGNED(64) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_int x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_int s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_int8 lo, hi;
- };
-#endif
-#if defined(__CL_INT2__)
- __cl_int2 v2[8];
-#endif
-#if defined(__CL_INT4__)
- __cl_int4 v4[4];
-#endif
-#if defined(__CL_INT8__)
- __cl_int8 v8[2];
-#endif
-#if defined(__CL_INT16__)
- __cl_int16 v16;
-#endif
- } cl_int16;
-
- /* ---- cl_uintn ---- */
- typedef union {
- cl_uint CL_ALIGNED(8) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uint x, y;
- };
- __extension__ struct
- {
- cl_uint s0, s1;
- };
- __extension__ struct
- {
- cl_uint lo, hi;
- };
-#endif
-#if defined(__CL_UINT2__)
- __cl_uint2 v2;
-#endif
- } cl_uint2;
-
- typedef union {
- cl_uint CL_ALIGNED(16) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uint x, y, z, w;
- };
- __extension__ struct
- {
- cl_uint s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_uint2 lo, hi;
- };
-#endif
-#if defined(__CL_UINT2__)
- __cl_uint2 v2[2];
-#endif
-#if defined(__CL_UINT4__)
- __cl_uint4 v4;
-#endif
- } cl_uint4;
-
- /* cl_uint3 is identical in size, alignment and behavior to cl_uint4. See section 6.1.5. */
- typedef cl_uint4 cl_uint3;
-
- typedef union {
- cl_uint CL_ALIGNED(32) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uint x, y, z, w;
- };
- __extension__ struct
- {
- cl_uint s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_uint4 lo, hi;
- };
-#endif
-#if defined(__CL_UINT2__)
- __cl_uint2 v2[4];
-#endif
-#if defined(__CL_UINT4__)
- __cl_uint4 v4[2];
-#endif
-#if defined(__CL_UINT8__)
- __cl_uint8 v8;
-#endif
- } cl_uint8;
-
- typedef union {
- cl_uint CL_ALIGNED(64) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_uint x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_uint s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_uint8 lo, hi;
- };
-#endif
-#if defined(__CL_UINT2__)
- __cl_uint2 v2[8];
-#endif
-#if defined(__CL_UINT4__)
- __cl_uint4 v4[4];
-#endif
-#if defined(__CL_UINT8__)
- __cl_uint8 v8[2];
-#endif
-#if defined(__CL_UINT16__)
- __cl_uint16 v16;
-#endif
- } cl_uint16;
-
- /* ---- cl_longn ---- */
- typedef union {
- cl_long CL_ALIGNED(16) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_long x, y;
- };
- __extension__ struct
- {
- cl_long s0, s1;
- };
- __extension__ struct
- {
- cl_long lo, hi;
- };
-#endif
-#if defined(__CL_LONG2__)
- __cl_long2 v2;
-#endif
- } cl_long2;
-
- typedef union {
- cl_long CL_ALIGNED(32) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_long x, y, z, w;
- };
- __extension__ struct
- {
- cl_long s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_long2 lo, hi;
- };
-#endif
-#if defined(__CL_LONG2__)
- __cl_long2 v2[2];
-#endif
-#if defined(__CL_LONG4__)
- __cl_long4 v4;
-#endif
- } cl_long4;
-
- /* cl_long3 is identical in size, alignment and behavior to cl_long4. See section 6.1.5. */
- typedef cl_long4 cl_long3;
-
- typedef union {
- cl_long CL_ALIGNED(64) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_long x, y, z, w;
- };
- __extension__ struct
- {
- cl_long s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_long4 lo, hi;
- };
-#endif
-#if defined(__CL_LONG2__)
- __cl_long2 v2[4];
-#endif
-#if defined(__CL_LONG4__)
- __cl_long4 v4[2];
-#endif
-#if defined(__CL_LONG8__)
- __cl_long8 v8;
-#endif
- } cl_long8;
-
- typedef union {
- cl_long CL_ALIGNED(128) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_long x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_long s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_long8 lo, hi;
- };
-#endif
-#if defined(__CL_LONG2__)
- __cl_long2 v2[8];
-#endif
-#if defined(__CL_LONG4__)
- __cl_long4 v4[4];
-#endif
-#if defined(__CL_LONG8__)
- __cl_long8 v8[2];
-#endif
-#if defined(__CL_LONG16__)
- __cl_long16 v16;
-#endif
- } cl_long16;
-
- /* ---- cl_ulongn ---- */
- typedef union {
- cl_ulong CL_ALIGNED(16) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ulong x, y;
- };
- __extension__ struct
- {
- cl_ulong s0, s1;
- };
- __extension__ struct
- {
- cl_ulong lo, hi;
- };
-#endif
-#if defined(__CL_ULONG2__)
- __cl_ulong2 v2;
-#endif
- } cl_ulong2;
-
- typedef union {
- cl_ulong CL_ALIGNED(32) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ulong x, y, z, w;
- };
- __extension__ struct
- {
- cl_ulong s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_ulong2 lo, hi;
- };
-#endif
-#if defined(__CL_ULONG2__)
- __cl_ulong2 v2[2];
-#endif
-#if defined(__CL_ULONG4__)
- __cl_ulong4 v4;
-#endif
- } cl_ulong4;
-
- /* cl_ulong3 is identical in size, alignment and behavior to cl_ulong4. See section 6.1.5. */
- typedef cl_ulong4 cl_ulong3;
-
- typedef union {
- cl_ulong CL_ALIGNED(64) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ulong x, y, z, w;
- };
- __extension__ struct
- {
- cl_ulong s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_ulong4 lo, hi;
- };
-#endif
-#if defined(__CL_ULONG2__)
- __cl_ulong2 v2[4];
-#endif
-#if defined(__CL_ULONG4__)
- __cl_ulong4 v4[2];
-#endif
-#if defined(__CL_ULONG8__)
- __cl_ulong8 v8;
-#endif
- } cl_ulong8;
-
- typedef union {
- cl_ulong CL_ALIGNED(128) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_ulong x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_ulong s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_ulong8 lo, hi;
- };
-#endif
-#if defined(__CL_ULONG2__)
- __cl_ulong2 v2[8];
-#endif
-#if defined(__CL_ULONG4__)
- __cl_ulong4 v4[4];
-#endif
-#if defined(__CL_ULONG8__)
- __cl_ulong8 v8[2];
-#endif
-#if defined(__CL_ULONG16__)
- __cl_ulong16 v16;
-#endif
- } cl_ulong16;
-
- /* --- cl_floatn ---- */
-
- typedef union {
- cl_float CL_ALIGNED(8) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_float x, y;
- };
- __extension__ struct
- {
- cl_float s0, s1;
- };
- __extension__ struct
- {
- cl_float lo, hi;
- };
-#endif
-#if defined(__CL_FLOAT2__)
- __cl_float2 v2;
-#endif
- } cl_float2;
-
- typedef union {
- cl_float CL_ALIGNED(16) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_float x, y, z, w;
- };
- __extension__ struct
- {
- cl_float s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_float2 lo, hi;
- };
-#endif
-#if defined(__CL_FLOAT2__)
- __cl_float2 v2[2];
-#endif
-#if defined(__CL_FLOAT4__)
- __cl_float4 v4;
-#endif
- } cl_float4;
-
- /* cl_float3 is identical in size, alignment and behavior to cl_float4. See section 6.1.5. */
- typedef cl_float4 cl_float3;
-
- typedef union {
- cl_float CL_ALIGNED(32) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_float x, y, z, w;
- };
- __extension__ struct
- {
- cl_float s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_float4 lo, hi;
- };
-#endif
-#if defined(__CL_FLOAT2__)
- __cl_float2 v2[4];
-#endif
-#if defined(__CL_FLOAT4__)
- __cl_float4 v4[2];
-#endif
-#if defined(__CL_FLOAT8__)
- __cl_float8 v8;
-#endif
- } cl_float8;
-
- typedef union {
- cl_float CL_ALIGNED(64) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_float x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_float s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_float8 lo, hi;
- };
-#endif
-#if defined(__CL_FLOAT2__)
- __cl_float2 v2[8];
-#endif
-#if defined(__CL_FLOAT4__)
- __cl_float4 v4[4];
-#endif
-#if defined(__CL_FLOAT8__)
- __cl_float8 v8[2];
-#endif
-#if defined(__CL_FLOAT16__)
- __cl_float16 v16;
-#endif
- } cl_float16;
-
- /* --- cl_doublen ---- */
-
- typedef union {
- cl_double CL_ALIGNED(16) s[2];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_double x, y;
- };
- __extension__ struct
- {
- cl_double s0, s1;
- };
- __extension__ struct
- {
- cl_double lo, hi;
- };
-#endif
-#if defined(__CL_DOUBLE2__)
- __cl_double2 v2;
-#endif
- } cl_double2;
-
- typedef union {
- cl_double CL_ALIGNED(32) s[4];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_double x, y, z, w;
- };
- __extension__ struct
- {
- cl_double s0, s1, s2, s3;
- };
- __extension__ struct
- {
- cl_double2 lo, hi;
- };
-#endif
-#if defined(__CL_DOUBLE2__)
- __cl_double2 v2[2];
-#endif
-#if defined(__CL_DOUBLE4__)
- __cl_double4 v4;
-#endif
- } cl_double4;
-
- /* cl_double3 is identical in size, alignment and behavior to cl_double4. See section 6.1.5. */
- typedef cl_double4 cl_double3;
-
- typedef union {
- cl_double CL_ALIGNED(64) s[8];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_double x, y, z, w;
- };
- __extension__ struct
- {
- cl_double s0, s1, s2, s3, s4, s5, s6, s7;
- };
- __extension__ struct
- {
- cl_double4 lo, hi;
- };
-#endif
-#if defined(__CL_DOUBLE2__)
- __cl_double2 v2[4];
-#endif
-#if defined(__CL_DOUBLE4__)
- __cl_double4 v4[2];
-#endif
-#if defined(__CL_DOUBLE8__)
- __cl_double8 v8;
-#endif
- } cl_double8;
-
- typedef union {
- cl_double CL_ALIGNED(128) s[16];
-#if defined(CL_NAMED_STRUCT_SUPPORTED)
- __extension__ struct
- {
- cl_double x, y, z, w, __spacer4, __spacer5, __spacer6, __spacer7, __spacer8, __spacer9, sa, sb, sc, sd, se, sf;
- };
- __extension__ struct
- {
- cl_double s0, s1, s2, s3, s4, s5, s6, s7, s8, s9, sA, sB, sC, sD, sE, sF;
- };
- __extension__ struct
- {
- cl_double8 lo, hi;
- };
-#endif
-#if defined(__CL_DOUBLE2__)
- __cl_double2 v2[8];
-#endif
-#if defined(__CL_DOUBLE4__)
- __cl_double4 v4[4];
-#endif
-#if defined(__CL_DOUBLE8__)
- __cl_double8 v8[2];
-#endif
-#if defined(__CL_DOUBLE16__)
- __cl_double16 v16;
-#endif
- } cl_double16;
-
-/* Macro to facilitate debugging
- * Usage:
- * Place CL_PROGRAM_STRING_DEBUG_INFO on the line before the first line of your source.
- * The first line ends with: CL_PROGRAM_STRING_BEGIN \"
- * Each line thereafter of OpenCL C source must end with: \n\
- * The last line ends in ";
- *
- * Example:
- *
- * const char *my_program = CL_PROGRAM_STRING_BEGIN "\
- * kernel void foo( int a, float * b ) \n\
- * { \n\
- * // my comment \n\
- * *b[ get_global_id(0)] = a; \n\
- * } \n\
- * ";
- *
- * This should correctly set up the line, (column) and file information for your source
- * string so you can do source level debugging.
- */
-#define __CL_STRINGIFY(_x) #_x
-#define _CL_STRINGIFY(_x) __CL_STRINGIFY(_x)
-#define CL_PROGRAM_STRING_DEBUG_INFO "#line " _CL_STRINGIFY(__LINE__) " \"" __FILE__ "\" \n\n"
-
- // CL.h contents
- /******************************************************************************/
-
- typedef struct _cl_platform_id *cl_platform_id;
- typedef struct _cl_device_id *cl_device_id;
- typedef struct _cl_context *cl_context;
- typedef struct _cl_command_queue *cl_command_queue;
- typedef struct _cl_mem *cl_mem;
- typedef struct _cl_program *cl_program;
- typedef struct _cl_kernel *cl_kernel;
- typedef struct _cl_event *cl_event;
- typedef struct _cl_sampler *cl_sampler;
-
- typedef cl_uint cl_bool; /* WARNING! Unlike cl_ types in cl_platform.h, cl_bool is not guaranteed to be the same size as the bool in kernels. */
- typedef cl_ulong cl_bitfield;
- typedef cl_bitfield cl_device_type;
- typedef cl_uint cl_platform_info;
- typedef cl_uint cl_device_info;
- typedef cl_bitfield cl_device_fp_config;
- typedef cl_uint cl_device_mem_cache_type;
- typedef cl_uint cl_device_local_mem_type;
- typedef cl_bitfield cl_device_exec_capabilities;
- typedef cl_bitfield cl_command_queue_properties;
-
- typedef intptr_t cl_context_properties;
- typedef cl_uint cl_context_info;
- typedef cl_uint cl_command_queue_info;
- typedef cl_uint cl_channel_order;
- typedef cl_uint cl_channel_type;
- typedef cl_bitfield cl_mem_flags;
- typedef cl_uint cl_mem_object_type;
- typedef cl_uint cl_mem_info;
- typedef cl_uint cl_image_info;
- typedef cl_uint cl_buffer_create_type;
- typedef cl_uint cl_addressing_mode;
- typedef cl_uint cl_filter_mode;
- typedef cl_uint cl_sampler_info;
- typedef cl_bitfield cl_map_flags;
- typedef cl_uint cl_program_info;
- typedef cl_uint cl_program_build_info;
- typedef cl_int cl_build_status;
- typedef cl_uint cl_kernel_info;
- typedef cl_uint cl_kernel_work_group_info;
- typedef cl_uint cl_event_info;
- typedef cl_uint cl_command_type;
- typedef cl_uint cl_profiling_info;
-
- typedef struct _cl_image_format
- {
- cl_channel_order image_channel_order;
- cl_channel_type image_channel_data_type;
- } cl_image_format;
-
- typedef struct _cl_buffer_region
- {
- size_t origin;
- size_t size;
- } cl_buffer_region;
-
-/******************************************************************************/
-
-/* Error Codes */
-#define CL_SUCCESS 0
-#define CL_DEVICE_NOT_FOUND -1
-#define CL_DEVICE_NOT_AVAILABLE -2
-#define CL_COMPILER_NOT_AVAILABLE -3
-#define CL_MEM_OBJECT_ALLOCATION_FAILURE -4
-#define CL_OUT_OF_RESOURCES -5
-#define CL_OUT_OF_HOST_MEMORY -6
-#define CL_PROFILING_INFO_NOT_AVAILABLE -7
-#define CL_MEM_COPY_OVERLAP -8
-#define CL_IMAGE_FORMAT_MISMATCH -9
-#define CL_IMAGE_FORMAT_NOT_SUPPORTED -10
-#define CL_BUILD_PROGRAM_FAILURE -11
-#define CL_MAP_FAILURE -12
-#define CL_MISALIGNED_SUB_BUFFER_OFFSET -13
-#define CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST -14
-
-#define CL_INVALID_VALUE -30
-#define CL_INVALID_DEVICE_TYPE -31
-#define CL_INVALID_PLATFORM -32
-#define CL_INVALID_DEVICE -33
-#define CL_INVALID_CONTEXT -34
-#define CL_INVALID_QUEUE_PROPERTIES -35
-#define CL_INVALID_COMMAND_QUEUE -36
-#define CL_INVALID_HOST_PTR -37
-#define CL_INVALID_MEM_OBJECT -38
-#define CL_INVALID_IMAGE_FORMAT_DESCRIPTOR -39
-#define CL_INVALID_IMAGE_SIZE -40
-#define CL_INVALID_SAMPLER -41
-#define CL_INVALID_BINARY -42
-#define CL_INVALID_BUILD_OPTIONS -43
-#define CL_INVALID_PROGRAM -44
-#define CL_INVALID_PROGRAM_EXECUTABLE -45
-#define CL_INVALID_KERNEL_NAME -46
-#define CL_INVALID_KERNEL_DEFINITION -47
-#define CL_INVALID_KERNEL -48
-#define CL_INVALID_ARG_INDEX -49
-#define CL_INVALID_ARG_VALUE -50
-#define CL_INVALID_ARG_SIZE -51
-#define CL_INVALID_KERNEL_ARGS -52
-#define CL_INVALID_WORK_DIMENSION -53
-#define CL_INVALID_WORK_GROUP_SIZE -54
-#define CL_INVALID_WORK_ITEM_SIZE -55
-#define CL_INVALID_GLOBAL_OFFSET -56
-#define CL_INVALID_EVENT_WAIT_LIST -57
-#define CL_INVALID_EVENT -58
-#define CL_INVALID_OPERATION -59
-#define CL_INVALID_GL_OBJECT -60
-#define CL_INVALID_BUFFER_SIZE -61
-#define CL_INVALID_MIP_LEVEL -62
-#define CL_INVALID_GLOBAL_WORK_SIZE -63
-#define CL_INVALID_PROPERTY -64
-
-/* OpenCL Version */
-#define CL_VERSION_1_0 1
-#define CL_VERSION_1_1 1
-
-/* cl_bool */
-#define CL_FALSE 0
-#define CL_TRUE 1
-
-/* cl_platform_info */
-#define CL_PLATFORM_PROFILE 0x0900
-#define CL_PLATFORM_VERSION 0x0901
-#define CL_PLATFORM_NAME 0x0902
-#define CL_PLATFORM_VENDOR 0x0903
-#define CL_PLATFORM_EXTENSIONS 0x0904
-
-/* cl_device_type - bitfield */
-#define CL_DEVICE_TYPE_DEFAULT (1 << 0)
-#define CL_DEVICE_TYPE_CPU (1 << 1)
-#define CL_DEVICE_TYPE_GPU (1 << 2)
-#define CL_DEVICE_TYPE_ACCELERATOR (1 << 3)
-#define CL_DEVICE_TYPE_ALL 0xFFFFFFFF
-
-/* cl_device_info */
-#define CL_DEVICE_TYPE 0x1000
-#define CL_DEVICE_VENDOR_ID 0x1001
-#define CL_DEVICE_MAX_COMPUTE_UNITS 0x1002
-#define CL_DEVICE_MAX_WORK_ITEM_DIMENSIONS 0x1003
-#define CL_DEVICE_MAX_WORK_GROUP_SIZE 0x1004
-#define CL_DEVICE_MAX_WORK_ITEM_SIZES 0x1005
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_CHAR 0x1006
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_SHORT 0x1007
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_INT 0x1008
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_LONG 0x1009
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_FLOAT 0x100A
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_DOUBLE 0x100B
-#define CL_DEVICE_MAX_CLOCK_FREQUENCY 0x100C
-#define CL_DEVICE_ADDRESS_BITS 0x100D
-#define CL_DEVICE_MAX_READ_IMAGE_ARGS 0x100E
-#define CL_DEVICE_MAX_WRITE_IMAGE_ARGS 0x100F
-#define CL_DEVICE_MAX_MEM_ALLOC_SIZE 0x1010
-#define CL_DEVICE_IMAGE2D_MAX_WIDTH 0x1011
-#define CL_DEVICE_IMAGE2D_MAX_HEIGHT 0x1012
-#define CL_DEVICE_IMAGE3D_MAX_WIDTH 0x1013
-#define CL_DEVICE_IMAGE3D_MAX_HEIGHT 0x1014
-#define CL_DEVICE_IMAGE3D_MAX_DEPTH 0x1015
-#define CL_DEVICE_IMAGE_SUPPORT 0x1016
-#define CL_DEVICE_MAX_PARAMETER_SIZE 0x1017
-#define CL_DEVICE_MAX_SAMPLERS 0x1018
-#define CL_DEVICE_MEM_BASE_ADDR_ALIGN 0x1019
-#define CL_DEVICE_MIN_DATA_TYPE_ALIGN_SIZE 0x101A
-#define CL_DEVICE_SINGLE_FP_CONFIG 0x101B
-#define CL_DEVICE_GLOBAL_MEM_CACHE_TYPE 0x101C
-#define CL_DEVICE_GLOBAL_MEM_CACHELINE_SIZE 0x101D
-#define CL_DEVICE_GLOBAL_MEM_CACHE_SIZE 0x101E
-#define CL_DEVICE_GLOBAL_MEM_SIZE 0x101F
-#define CL_DEVICE_MAX_CONSTANT_BUFFER_SIZE 0x1020
-#define CL_DEVICE_MAX_CONSTANT_ARGS 0x1021
-#define CL_DEVICE_LOCAL_MEM_TYPE 0x1022
-#define CL_DEVICE_LOCAL_MEM_SIZE 0x1023
-#define CL_DEVICE_ERROR_CORRECTION_SUPPORT 0x1024
-#define CL_DEVICE_PROFILING_TIMER_RESOLUTION 0x1025
-#define CL_DEVICE_ENDIAN_LITTLE 0x1026
-#define CL_DEVICE_AVAILABLE 0x1027
-#define CL_DEVICE_COMPILER_AVAILABLE 0x1028
-#define CL_DEVICE_EXECUTION_CAPABILITIES 0x1029
-#define CL_DEVICE_QUEUE_PROPERTIES 0x102A
-#define CL_DEVICE_NAME 0x102B
-#define CL_DEVICE_VENDOR 0x102C
-#define CL_DRIVER_VERSION 0x102D
-#define CL_DEVICE_PROFILE 0x102E
-#define CL_DEVICE_VERSION 0x102F
-#define CL_DEVICE_EXTENSIONS 0x1030
-#define CL_DEVICE_PLATFORM 0x1031
-/* 0x1032 reserved for CL_DEVICE_DOUBLE_FP_CONFIG */
-/* 0x1033 reserved for CL_DEVICE_HALF_FP_CONFIG */
-#define CL_DEVICE_PREFERRED_VECTOR_WIDTH_HALF 0x1034
-#define CL_DEVICE_HOST_UNIFIED_MEMORY 0x1035
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_CHAR 0x1036
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_SHORT 0x1037
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_INT 0x1038
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_LONG 0x1039
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_FLOAT 0x103A
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_DOUBLE 0x103B
-#define CL_DEVICE_NATIVE_VECTOR_WIDTH_HALF 0x103C
-#define CL_DEVICE_OPENCL_C_VERSION 0x103D
-
-/* cl_device_fp_config - bitfield */
-#define CL_FP_DENORM (1 << 0)
-#define CL_FP_INF_NAN (1 << 1)
-#define CL_FP_ROUND_TO_NEAREST (1 << 2)
-#define CL_FP_ROUND_TO_ZERO (1 << 3)
-#define CL_FP_ROUND_TO_INF (1 << 4)
-#define CL_FP_FMA (1 << 5)
-#define CL_FP_SOFT_FLOAT (1 << 6)
-
-/* cl_device_mem_cache_type */
-#define CL_NONE 0x0
-#define CL_READ_ONLY_CACHE 0x1
-#define CL_READ_WRITE_CACHE 0x2
-
-/* cl_device_local_mem_type */
-#define CL_LOCAL 0x1
-#define CL_GLOBAL 0x2
-
-/* cl_device_exec_capabilities - bitfield */
-#define CL_EXEC_KERNEL (1 << 0)
-#define CL_EXEC_NATIVE_KERNEL (1 << 1)
-
-/* cl_command_queue_properties - bitfield */
-#define CL_QUEUE_OUT_OF_ORDER_EXEC_MODE_ENABLE (1 << 0)
-#define CL_QUEUE_PROFILING_ENABLE (1 << 1)
-
-/* cl_context_info */
-#define CL_CONTEXT_REFERENCE_COUNT 0x1080
-#define CL_CONTEXT_DEVICES 0x1081
-#define CL_CONTEXT_PROPERTIES 0x1082
-#define CL_CONTEXT_NUM_DEVICES 0x1083
-
-/* cl_context_info + cl_context_properties */
-#define CL_CONTEXT_PLATFORM 0x1084
-
-/* cl_command_queue_info */
-#define CL_QUEUE_CONTEXT 0x1090
-#define CL_QUEUE_DEVICE 0x1091
-#define CL_QUEUE_REFERENCE_COUNT 0x1092
-#define CL_QUEUE_PROPERTIES 0x1093
-
-/* cl_mem_flags - bitfield */
-#define CL_MEM_READ_WRITE (1 << 0)
-#define CL_MEM_WRITE_ONLY (1 << 1)
-#define CL_MEM_READ_ONLY (1 << 2)
-#define CL_MEM_USE_HOST_PTR (1 << 3)
-#define CL_MEM_ALLOC_HOST_PTR (1 << 4)
-#define CL_MEM_COPY_HOST_PTR (1 << 5)
-
-/* cl_channel_order */
-#define CL_R 0x10B0
-#define CL_A 0x10B1
-#define CL_RG 0x10B2
-#define CL_RA 0x10B3
-#define CL_RGB 0x10B4
-#define CL_RGBA 0x10B5
-#define CL_BGRA 0x10B6
-#define CL_ARGB 0x10B7
-#define CL_INTENSITY 0x10B8
-#define CL_LUMINANCE 0x10B9
-#define CL_Rx 0x10BA
-#define CL_RGx 0x10BB
-#define CL_RGBx 0x10BC
-
-/* cl_channel_type */
-#define CL_SNORM_INT8 0x10D0
-#define CL_SNORM_INT16 0x10D1
-#define CL_UNORM_INT8 0x10D2
-#define CL_UNORM_INT16 0x10D3
-#define CL_UNORM_SHORT_565 0x10D4
-#define CL_UNORM_SHORT_555 0x10D5
-#define CL_UNORM_INT_101010 0x10D6
-#define CL_SIGNED_INT8 0x10D7
-#define CL_SIGNED_INT16 0x10D8
-#define CL_SIGNED_INT32 0x10D9
-#define CL_UNSIGNED_INT8 0x10DA
-#define CL_UNSIGNED_INT16 0x10DB
-#define CL_UNSIGNED_INT32 0x10DC
-#define CL_HALF_FLOAT 0x10DD
-#define CL_FLOAT 0x10DE
-
-/* cl_mem_object_type */
-#define CL_MEM_OBJECT_BUFFER 0x10F0
-#define CL_MEM_OBJECT_IMAGE2D 0x10F1
-#define CL_MEM_OBJECT_IMAGE3D 0x10F2
-
-/* cl_mem_info */
-#define CL_MEM_TYPE 0x1100
-#define CL_MEM_FLAGS 0x1101
-#define CL_MEM_SIZE 0x1102
-#define CL_MEM_HOST_PTR 0x1103
-#define CL_MEM_MAP_COUNT 0x1104
-#define CL_MEM_REFERENCE_COUNT 0x1105
-#define CL_MEM_CONTEXT 0x1106
-#define CL_MEM_ASSOCIATED_MEMOBJECT 0x1107
-#define CL_MEM_OFFSET 0x1108
-
-/* cl_image_info */
-#define CL_IMAGE_FORMAT 0x1110
-#define CL_IMAGE_ELEMENT_SIZE 0x1111
-#define CL_IMAGE_ROW_PITCH 0x1112
-#define CL_IMAGE_SLICE_PITCH 0x1113
-#define CL_IMAGE_WIDTH 0x1114
-#define CL_IMAGE_HEIGHT 0x1115
-#define CL_IMAGE_DEPTH 0x1116
-
-/* cl_addressing_mode */
-#define CL_ADDRESS_NONE 0x1130
-#define CL_ADDRESS_CLAMP_TO_EDGE 0x1131
-#define CL_ADDRESS_CLAMP 0x1132
-#define CL_ADDRESS_REPEAT 0x1133
-#define CL_ADDRESS_MIRRORED_REPEAT 0x1134
-
-/* cl_filter_mode */
-#define CL_FILTER_NEAREST 0x1140
-#define CL_FILTER_LINEAR 0x1141
-
-/* cl_sampler_info */
-#define CL_SAMPLER_REFERENCE_COUNT 0x1150
-#define CL_SAMPLER_CONTEXT 0x1151
-#define CL_SAMPLER_NORMALIZED_COORDS 0x1152
-#define CL_SAMPLER_ADDRESSING_MODE 0x1153
-#define CL_SAMPLER_FILTER_MODE 0x1154
-
-/* cl_map_flags - bitfield */
-#define CL_MAP_READ (1 << 0)
-#define CL_MAP_WRITE (1 << 1)
-
-/* cl_program_info */
-#define CL_PROGRAM_REFERENCE_COUNT 0x1160
-#define CL_PROGRAM_CONTEXT 0x1161
-#define CL_PROGRAM_NUM_DEVICES 0x1162
-#define CL_PROGRAM_DEVICES 0x1163
-#define CL_PROGRAM_SOURCE 0x1164
-#define CL_PROGRAM_BINARY_SIZES 0x1165
-#define CL_PROGRAM_BINARIES 0x1166
-
-/* cl_program_build_info */
-#define CL_PROGRAM_BUILD_STATUS 0x1181
-#define CL_PROGRAM_BUILD_OPTIONS 0x1182
-#define CL_PROGRAM_BUILD_LOG 0x1183
-
-/* cl_build_status */
-#define CL_BUILD_SUCCESS 0
-#define CL_BUILD_NONE -1
-#define CL_BUILD_ERROR -2
-#define CL_BUILD_IN_PROGRESS -3
-
-/* cl_kernel_info */
-#define CL_KERNEL_FUNCTION_NAME 0x1190
-#define CL_KERNEL_NUM_ARGS 0x1191
-#define CL_KERNEL_REFERENCE_COUNT 0x1192
-#define CL_KERNEL_CONTEXT 0x1193
-#define CL_KERNEL_PROGRAM 0x1194
-
-/* cl_kernel_work_group_info */
-#define CL_KERNEL_WORK_GROUP_SIZE 0x11B0
-#define CL_KERNEL_COMPILE_WORK_GROUP_SIZE 0x11B1
-#define CL_KERNEL_LOCAL_MEM_SIZE 0x11B2
-#define CL_KERNEL_PREFERRED_WORK_GROUP_SIZE_MULTIPLE 0x11B3
-#define CL_KERNEL_PRIVATE_MEM_SIZE 0x11B4
-
-/* cl_event_info */
-#define CL_EVENT_COMMAND_QUEUE 0x11D0
-#define CL_EVENT_COMMAND_TYPE 0x11D1
-#define CL_EVENT_REFERENCE_COUNT 0x11D2
-#define CL_EVENT_COMMAND_EXECUTION_STATUS 0x11D3
-#define CL_EVENT_CONTEXT 0x11D4
-
-/* cl_command_type */
-#define CL_COMMAND_NDRANGE_KERNEL 0x11F0
-#define CL_COMMAND_TASK 0x11F1
-#define CL_COMMAND_NATIVE_KERNEL 0x11F2
-#define CL_COMMAND_READ_BUFFER 0x11F3
-#define CL_COMMAND_WRITE_BUFFER 0x11F4
-#define CL_COMMAND_COPY_BUFFER 0x11F5
-#define CL_COMMAND_READ_IMAGE 0x11F6
-#define CL_COMMAND_WRITE_IMAGE 0x11F7
-#define CL_COMMAND_COPY_IMAGE 0x11F8
-#define CL_COMMAND_COPY_IMAGE_TO_BUFFER 0x11F9
-#define CL_COMMAND_COPY_BUFFER_TO_IMAGE 0x11FA
-#define CL_COMMAND_MAP_BUFFER 0x11FB
-#define CL_COMMAND_MAP_IMAGE 0x11FC
-#define CL_COMMAND_UNMAP_MEM_OBJECT 0x11FD
-#define CL_COMMAND_MARKER 0x11FE
-#define CL_COMMAND_ACQUIRE_GL_OBJECTS 0x11FF
-#define CL_COMMAND_RELEASE_GL_OBJECTS 0x1200
-#define CL_COMMAND_READ_BUFFER_RECT 0x1201
-#define CL_COMMAND_WRITE_BUFFER_RECT 0x1202
-#define CL_COMMAND_COPY_BUFFER_RECT 0x1203
-#define CL_COMMAND_USER 0x1204
-
-/* command execution status */
-#define CL_COMPLETE 0x0
-#define CL_RUNNING 0x1
-#define CL_SUBMITTED 0x2
-#define CL_QUEUED 0x3
-
-/* cl_buffer_create_type */
-#define CL_BUFFER_CREATE_TYPE_REGION 0x1220
-
-/* cl_profiling_info */
-#define CL_PROFILING_COMMAND_QUEUED 0x1280
-#define CL_PROFILING_COMMAND_SUBMIT 0x1281
-#define CL_PROFILING_COMMAND_START 0x1282
-#define CL_PROFILING_COMMAND_END 0x1283
-
- /********************************************************************************************************/
-
- /********************************************************************************************************/
-
- /* Function signature typedef's */
-
- /* Platform API */
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETPLATFORMIDS)(cl_uint /* num_entries */,
- cl_platform_id * /* platforms */,
- cl_uint * /* num_platforms */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETPLATFORMINFO)(cl_platform_id /* platform */,
- cl_platform_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- /* Device APIs */
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETDEVICEIDS)(cl_platform_id /* platform */,
- cl_device_type /* device_type */,
- cl_uint /* num_entries */,
- cl_device_id * /* devices */,
- cl_uint * /* num_devices */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETDEVICEINFO)(cl_device_id /* device */,
- cl_device_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- // Context APIs
- typedef CL_API_ENTRY cl_context(CL_API_CALL *
- PFNCLCREATECONTEXT)(const cl_context_properties * /* properties */,
- cl_uint /* num_devices */,
- const cl_device_id * /* devices */,
- void(CL_CALLBACK * /* pfn_notify */)(const char *, const void *, size_t, void *),
- void * /* user_data */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_context(CL_API_CALL *
- PFNCLCREATECONTEXTFROMTYPE)(const cl_context_properties * /* properties */,
- cl_device_type /* device_type */,
- void(CL_CALLBACK * /* pfn_notify*/)(const char *, const void *, size_t, void *),
- void * /* user_data */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINCONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASECONTEXT)(cl_context /* context */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETCONTEXTINFO)(cl_context /* context */,
- cl_context_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- /* Command Queue APIs */
- typedef CL_API_ENTRY cl_command_queue(CL_API_CALL *
- PFNCLCREATECOMMANDQUEUE)(cl_context /* context */,
- cl_device_id /* device */,
- cl_command_queue_properties /* properties */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINCOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASECOMMANDQUEUE)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETCOMMANDQUEUEINFO)(cl_command_queue /* command_queue */,
- cl_command_queue_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLSETCOMMANDQUEUEPROPERTY)(cl_command_queue /* command_queue */,
- cl_command_queue_properties /* properties */,
- cl_bool /* enable */,
- cl_command_queue_properties * /* old_properties */) CL_API_SUFFIX__VERSION_1_0;
-
- /* Memory Object APIs */
- typedef CL_API_ENTRY cl_mem(CL_API_CALL *
- PFNCLCREATEBUFFER)(cl_context /* context */,
- cl_mem_flags /* flags */,
- size_t /* size */,
- void * /* host_ptr */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_mem(CL_API_CALL *
- PFNCLCREATESUBBUFFER)(cl_mem /* buffer */,
- cl_mem_flags /* flags */,
- cl_buffer_create_type /* buffer_create_type */,
- const void * /* buffer_create_info */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
-
- typedef CL_API_ENTRY cl_mem(CL_API_CALL *
- PFNCLCREATEIMAGE2D)(cl_context /* context */,
- cl_mem_flags /* flags */,
- const cl_image_format * /* image_format */,
- size_t /* image_width */,
- size_t /* image_height */,
- size_t /* image_row_pitch */,
- void * /* host_ptr */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_mem(CL_API_CALL *
- PFNCLCREATEIMAGE3D)(cl_context /* context */,
- cl_mem_flags /* flags */,
- const cl_image_format * /* image_format */,
- size_t /* image_width */,
- size_t /* image_height */,
- size_t /* image_depth */,
- size_t /* image_row_pitch */,
- size_t /* image_slice_pitch */,
- void * /* host_ptr */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASEMEMOBJECT)(cl_mem /* memobj */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETSUPPORTEDIMAGEFORMATS)(cl_context /* context */,
- cl_mem_flags /* flags */,
- cl_mem_object_type /* image_type */,
- cl_uint /* num_entries */,
- cl_image_format * /* image_formats */,
- cl_uint * /* num_image_formats */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETMEMOBJECTINFO)(cl_mem /* memobj */,
- cl_mem_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETIMAGEINFO)(cl_mem /* image */,
- cl_image_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLSETMEMOBJECTDESTRUCTORCALLBACK)(cl_mem /* memobj */,
- void(CL_CALLBACK * /*pfn_notify*/)(cl_mem /* memobj */, void * /*user_data*/),
- void * /*user_data */) CL_API_SUFFIX__VERSION_1_1;
-
- /* Sampler APIs */
- typedef CL_API_ENTRY cl_sampler(CL_API_CALL *
- PFNCLCREATESAMPLER)(cl_context /* context */,
- cl_bool /* normalized_coords */,
- cl_addressing_mode /* addressing_mode */,
- cl_filter_mode /* filter_mode */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINSAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASESAMPLER)(cl_sampler /* sampler */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETSAMPLERINFO)(cl_sampler /* sampler */,
- cl_sampler_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- /* Program Object APIs */
- typedef CL_API_ENTRY cl_program(CL_API_CALL *
- PFNCLCREATEPROGRAMWITHSOURCE)(cl_context /* context */,
- cl_uint /* count */,
- const char ** /* strings */,
- const size_t * /* lengths */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_program(CL_API_CALL *
- PFNCLCREATEPROGRAMWITHBINARY)(cl_context /* context */,
- cl_uint /* num_devices */,
- const cl_device_id * /* device_list */,
- const size_t * /* lengths */,
- const unsigned char ** /* binaries */,
- cl_int * /* binary_status */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASEPROGRAM)(cl_program /* program */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLBUILDPROGRAM)(cl_program /* program */,
- cl_uint /* num_devices */,
- const cl_device_id * /* device_list */,
- const char * /* options */,
- void(CL_CALLBACK * /* pfn_notify */)(cl_program /* program */, void * /* user_data */),
- void * /* user_data */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLUNLOADCOMPILER)(void) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETPROGRAMINFO)(cl_program /* program */,
- cl_program_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETPROGRAMBUILDINFO)(cl_program /* program */,
- cl_device_id /* device */,
- cl_program_build_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- /* Kernel Object APIs */
- typedef CL_API_ENTRY cl_kernel(CL_API_CALL *
- PFNCLCREATEKERNEL)(cl_program /* program */,
- const char * /* kernel_name */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLCREATEKERNELSINPROGRAM)(cl_program /* program */,
- cl_uint /* num_kernels */,
- cl_kernel * /* kernels */,
- cl_uint * /* num_kernels_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASEKERNEL)(cl_kernel /* kernel */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLSETKERNELARG)(cl_kernel /* kernel */,
- cl_uint /* arg_index */,
- size_t /* arg_size */,
- const void * /* arg_value */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETKERNELINFO)(cl_kernel /* kernel */,
- cl_kernel_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETKERNELWORKGROUPINFO)(cl_kernel /* kernel */,
- cl_device_id /* device */,
- cl_kernel_work_group_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- // Event Object APIs
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLWAITFOREVENTS)(cl_uint /* num_events */,
- const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETEVENTINFO)(cl_event /* event */,
- cl_event_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_event(CL_API_CALL *
- PFNCLCREATEUSEREVENT)(cl_context /* context */,
- cl_int * /* errcode_ret */) CL_API_SUFFIX__VERSION_1_1;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRETAINEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLRELEASEEVENT)(cl_event /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLSETUSEREVENTSTATUS)(cl_event /* event */,
- cl_int /* execution_status */) CL_API_SUFFIX__VERSION_1_1;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLSETEVENTCALLBACK)(cl_event /* event */,
- cl_int /* command_exec_callback_type */,
- void(CL_CALLBACK * /* pfn_notify */)(cl_event, cl_int, void *),
- void * /* user_data */) CL_API_SUFFIX__VERSION_1_1;
-
- /* Profiling APIs */
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLGETEVENTPROFILINGINFO)(cl_event /* event */,
- cl_profiling_info /* param_name */,
- size_t /* param_value_size */,
- void * /* param_value */,
- size_t * /* param_value_size_ret */) CL_API_SUFFIX__VERSION_1_0;
-
- // Flush and Finish APIs
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLFLUSH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLFINISH)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
- /* Enqueued Commands APIs */
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEREADBUFFER)(cl_command_queue /* command_queue */,
- cl_mem /* buffer */,
- cl_bool /* blocking_read */,
- size_t /* offset */,
- size_t /* cb */,
- void * /* ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEREADBUFFERRECT)(cl_command_queue /* command_queue */,
- cl_mem /* buffer */,
- cl_bool /* blocking_read */,
- const size_t * /* buffer_origin */,
- const size_t * /* host_origin */,
- const size_t * /* region */,
- size_t /* buffer_row_pitch */,
- size_t /* buffer_slice_pitch */,
- size_t /* host_row_pitch */,
- size_t /* host_slice_pitch */,
- void * /* ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEWRITEBUFFER)(cl_command_queue /* command_queue */,
- cl_mem /* buffer */,
- cl_bool /* blocking_write */,
- size_t /* offset */,
- size_t /* cb */,
- const void * /* ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEWRITEBUFFERRECT)(cl_command_queue /* command_queue */,
- cl_mem /* buffer */,
- cl_bool /* blocking_write */,
- const size_t * /* buffer_origin */,
- const size_t * /* host_origin */,
- const size_t * /* region */,
- size_t /* buffer_row_pitch */,
- size_t /* buffer_slice_pitch */,
- size_t /* host_row_pitch */,
- size_t /* host_slice_pitch */,
- const void * /* ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUECOPYBUFFER)(cl_command_queue /* command_queue */,
- cl_mem /* src_buffer */,
- cl_mem /* dst_buffer */,
- size_t /* src_offset */,
- size_t /* dst_offset */,
- size_t /* cb */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUECOPYBUFFERRECT)(cl_command_queue /* command_queue */,
- cl_mem /* src_buffer */,
- cl_mem /* dst_buffer */,
- const size_t * /* src_origin */,
- const size_t * /* dst_origin */,
- const size_t * /* region */,
- size_t /* src_row_pitch */,
- size_t /* src_slice_pitch */,
- size_t /* dst_row_pitch */,
- size_t /* dst_slice_pitch */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_1;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEREADIMAGE)(cl_command_queue /* command_queue */,
- cl_mem /* image */,
- cl_bool /* blocking_read */,
- const size_t * /* origin[3] */,
- const size_t * /* region[3] */,
- size_t /* row_pitch */,
- size_t /* slice_pitch */,
- void * /* ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEWRITEIMAGE)(cl_command_queue /* command_queue */,
- cl_mem /* image */,
- cl_bool /* blocking_write */,
- const size_t * /* origin[3] */,
- const size_t * /* region[3] */,
- size_t /* input_row_pitch */,
- size_t /* input_slice_pitch */,
- const void * /* ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUECOPYIMAGE)(cl_command_queue /* command_queue */,
- cl_mem /* src_image */,
- cl_mem /* dst_image */,
- const size_t * /* src_origin[3] */,
- const size_t * /* dst_origin[3] */,
- const size_t * /* region[3] */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUECOPYIMAGETOBUFFER)(cl_command_queue /* command_queue */,
- cl_mem /* src_image */,
- cl_mem /* dst_buffer */,
- const size_t * /* src_origin[3] */,
- const size_t * /* region[3] */,
- size_t /* dst_offset */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUECOPYBUFFERTOIMAGE)(cl_command_queue /* command_queue */,
- cl_mem /* src_buffer */,
- cl_mem /* dst_image */,
- size_t /* src_offset */,
- const size_t * /* dst_origin[3] */,
- const size_t * /* region[3] */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY void *(CL_API_CALL *
- PFNCLENQUEUEMAPBUFFER)(cl_command_queue /* command_queue */,
- cl_mem /* buffer */,
- cl_bool /* blocking_map */,
- cl_map_flags /* map_flags */,
- size_t /* offset */,
- size_t /* cb */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */,
- cl_int * /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY void *(CL_API_CALL *
- PFNCLENQUEUEMAPIMAGE)(cl_command_queue /* command_queue */,
- cl_mem /* image */,
- cl_bool /* blocking_map */,
- cl_map_flags /* map_flags */,
- const size_t * /* origin[3] */,
- const size_t * /* region[3] */,
- size_t * /* image_row_pitch */,
- size_t * /* image_slice_pitch */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */,
- cl_int * /* errcode_ret */)CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEUNMAPMEMOBJECT)(cl_command_queue /* command_queue */,
- cl_mem /* memobj */,
- void * /* mapped_ptr */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUENDRANGEKERNEL)(cl_command_queue /* command_queue */,
- cl_kernel /* kernel */,
- cl_uint /* work_dim */,
- const size_t * /* global_work_offset */,
- const size_t * /* global_work_size */,
- const size_t * /* local_work_size */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUETASK)(cl_command_queue /* command_queue */,
- cl_kernel /* kernel */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUENATIVEKERNEL)(cl_command_queue /* command_queue */,
- void (*user_func)(void *),
- void * /* args */,
- size_t /* cb_args */,
- cl_uint /* num_mem_objects */,
- const cl_mem * /* mem_list */,
- const void ** /* args_mem_loc */,
- cl_uint /* num_events_in_wait_list */,
- const cl_event * /* event_wait_list */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEMARKER)(cl_command_queue /* command_queue */,
- cl_event * /* event */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEWAITFOREVENTS)(cl_command_queue /* command_queue */,
- cl_uint /* num_events */,
- const cl_event * /* event_list */) CL_API_SUFFIX__VERSION_1_0;
-
- typedef CL_API_ENTRY cl_int(CL_API_CALL *
- PFNCLENQUEUEBARRIER)(cl_command_queue /* command_queue */) CL_API_SUFFIX__VERSION_1_0;
-
- // Extension function access
- //
- // Returns the extension function address for the given function name,
- // or NULL if a valid function can not be found. The client must
- // check to make sure the address is not NULL, before using or
- // calling the returned function address.
- //
- typedef CL_API_ENTRY void *(CL_API_CALL *PFNCLGETEXTENSIONFUNCTIONADDRESS)(const char * /* func_name */)CL_API_SUFFIX__VERSION_1_0;
-
-#define CLEW_STATIC
-
-#ifdef CLEW_STATIC
-#define CLEWAPI extern
-#else
-#ifdef CLEW_BUILD
-#define CLEWAPI extern __declspec(dllexport)
-#else
-#define CLEWAPI extern __declspec(dllimport)
-#endif
-#endif
-
-#if defined(_WIN32)
-#define CLEW_FUN_EXPORT extern
-#else
-#define CLEW_FUN_EXPORT CLEWAPI
-#endif
-
-#define CLEW_GET_FUN(x) x
-
- // Variables holding function entry points
- CLEW_FUN_EXPORT PFNCLGETPLATFORMIDS __clewGetPlatformIDs;
- CLEW_FUN_EXPORT PFNCLGETPLATFORMINFO __clewGetPlatformInfo;
- CLEW_FUN_EXPORT PFNCLGETDEVICEIDS __clewGetDeviceIDs;
- CLEW_FUN_EXPORT PFNCLGETDEVICEINFO __clewGetDeviceInfo;
- CLEW_FUN_EXPORT PFNCLCREATECONTEXT __clewCreateContext;
- CLEW_FUN_EXPORT PFNCLCREATECONTEXTFROMTYPE __clewCreateContextFromType;
- CLEW_FUN_EXPORT PFNCLRETAINCONTEXT __clewRetainContext;
- CLEW_FUN_EXPORT PFNCLRELEASECONTEXT __clewReleaseContext;
- CLEW_FUN_EXPORT PFNCLGETCONTEXTINFO __clewGetContextInfo;
- CLEW_FUN_EXPORT PFNCLCREATECOMMANDQUEUE __clewCreateCommandQueue;
- CLEW_FUN_EXPORT PFNCLRETAINCOMMANDQUEUE __clewRetainCommandQueue;
- CLEW_FUN_EXPORT PFNCLRELEASECOMMANDQUEUE __clewReleaseCommandQueue;
- CLEW_FUN_EXPORT PFNCLGETCOMMANDQUEUEINFO __clewGetCommandQueueInfo;
-#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
- CLEW_FUN_EXPORT PFNCLSETCOMMANDQUEUEPROPERTY __clewSetCommandQueueProperty;
-#endif
- CLEW_FUN_EXPORT PFNCLCREATEBUFFER __clewCreateBuffer;
- CLEW_FUN_EXPORT PFNCLCREATESUBBUFFER __clewCreateSubBuffer;
- CLEW_FUN_EXPORT PFNCLCREATEIMAGE2D __clewCreateImage2D;
- CLEW_FUN_EXPORT PFNCLCREATEIMAGE3D __clewCreateImage3D;
- CLEW_FUN_EXPORT PFNCLRETAINMEMOBJECT __clewRetainMemObject;
- CLEW_FUN_EXPORT PFNCLRELEASEMEMOBJECT __clewReleaseMemObject;
- CLEW_FUN_EXPORT PFNCLGETSUPPORTEDIMAGEFORMATS __clewGetSupportedImageFormats;
- CLEW_FUN_EXPORT PFNCLGETMEMOBJECTINFO __clewGetMemObjectInfo;
- CLEW_FUN_EXPORT PFNCLGETIMAGEINFO __clewGetImageInfo;
- CLEW_FUN_EXPORT PFNCLSETMEMOBJECTDESTRUCTORCALLBACK __clewSetMemObjectDestructorCallback;
- CLEW_FUN_EXPORT PFNCLCREATESAMPLER __clewCreateSampler;
- CLEW_FUN_EXPORT PFNCLRETAINSAMPLER __clewRetainSampler;
- CLEW_FUN_EXPORT PFNCLRELEASESAMPLER __clewReleaseSampler;
- CLEW_FUN_EXPORT PFNCLGETSAMPLERINFO __clewGetSamplerInfo;
- CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHSOURCE __clewCreateProgramWithSource;
- CLEW_FUN_EXPORT PFNCLCREATEPROGRAMWITHBINARY __clewCreateProgramWithBinary;
- CLEW_FUN_EXPORT PFNCLRETAINPROGRAM __clewRetainProgram;
- CLEW_FUN_EXPORT PFNCLRELEASEPROGRAM __clewReleaseProgram;
- CLEW_FUN_EXPORT PFNCLBUILDPROGRAM __clewBuildProgram;
- CLEW_FUN_EXPORT PFNCLUNLOADCOMPILER __clewUnloadCompiler;
- CLEW_FUN_EXPORT PFNCLGETPROGRAMINFO __clewGetProgramInfo;
- CLEW_FUN_EXPORT PFNCLGETPROGRAMBUILDINFO __clewGetProgramBuildInfo;
- CLEW_FUN_EXPORT PFNCLCREATEKERNEL __clewCreateKernel;
- CLEW_FUN_EXPORT PFNCLCREATEKERNELSINPROGRAM __clewCreateKernelsInProgram;
- CLEW_FUN_EXPORT PFNCLRETAINKERNEL __clewRetainKernel;
- CLEW_FUN_EXPORT PFNCLRELEASEKERNEL __clewReleaseKernel;
- CLEW_FUN_EXPORT PFNCLSETKERNELARG __clewSetKernelArg;
- CLEW_FUN_EXPORT PFNCLGETKERNELINFO __clewGetKernelInfo;
- CLEW_FUN_EXPORT PFNCLGETKERNELWORKGROUPINFO __clewGetKernelWorkGroupInfo;
- CLEW_FUN_EXPORT PFNCLWAITFOREVENTS __clewWaitForEvents;
- CLEW_FUN_EXPORT PFNCLGETEVENTINFO __clewGetEventInfo;
- CLEW_FUN_EXPORT PFNCLCREATEUSEREVENT __clewCreateUserEvent;
- CLEW_FUN_EXPORT PFNCLRETAINEVENT __clewRetainEvent;
- CLEW_FUN_EXPORT PFNCLRELEASEEVENT __clewReleaseEvent;
- CLEW_FUN_EXPORT PFNCLSETUSEREVENTSTATUS __clewSetUserEventStatus;
- CLEW_FUN_EXPORT PFNCLSETEVENTCALLBACK __clewSetEventCallback;
- CLEW_FUN_EXPORT PFNCLGETEVENTPROFILINGINFO __clewGetEventProfilingInfo;
- CLEW_FUN_EXPORT PFNCLFLUSH __clewFlush;
- CLEW_FUN_EXPORT PFNCLFINISH __clewFinish;
- CLEW_FUN_EXPORT PFNCLENQUEUEREADBUFFER __clewEnqueueReadBuffer;
- CLEW_FUN_EXPORT PFNCLENQUEUEREADBUFFERRECT __clewEnqueueReadBufferRect;
- CLEW_FUN_EXPORT PFNCLENQUEUEWRITEBUFFER __clewEnqueueWriteBuffer;
- CLEW_FUN_EXPORT PFNCLENQUEUEWRITEBUFFERRECT __clewEnqueueWriteBufferRect;
- CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFER __clewEnqueueCopyBuffer;
- CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFERRECT __clewEnqueueCopyBufferRect;
- CLEW_FUN_EXPORT PFNCLENQUEUEREADIMAGE __clewEnqueueReadImage;
- CLEW_FUN_EXPORT PFNCLENQUEUEWRITEIMAGE __clewEnqueueWriteImage;
- CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGE __clewEnqueueCopyImage;
- CLEW_FUN_EXPORT PFNCLENQUEUECOPYIMAGETOBUFFER __clewEnqueueCopyImageToBuffer;
- CLEW_FUN_EXPORT PFNCLENQUEUECOPYBUFFERTOIMAGE __clewEnqueueCopyBufferToImage;
- CLEW_FUN_EXPORT PFNCLENQUEUEMAPBUFFER __clewEnqueueMapBuffer;
- CLEW_FUN_EXPORT PFNCLENQUEUEMAPIMAGE __clewEnqueueMapImage;
- CLEW_FUN_EXPORT PFNCLENQUEUEUNMAPMEMOBJECT __clewEnqueueUnmapMemObject;
- CLEW_FUN_EXPORT PFNCLENQUEUENDRANGEKERNEL __clewEnqueueNDRangeKernel;
- CLEW_FUN_EXPORT PFNCLENQUEUETASK __clewEnqueueTask;
- CLEW_FUN_EXPORT PFNCLENQUEUENATIVEKERNEL __clewEnqueueNativeKernel;
- CLEW_FUN_EXPORT PFNCLENQUEUEMARKER __clewEnqueueMarker;
- CLEW_FUN_EXPORT PFNCLENQUEUEWAITFOREVENTS __clewEnqueueWaitForEvents;
- CLEW_FUN_EXPORT PFNCLENQUEUEBARRIER __clewEnqueueBarrier;
- CLEW_FUN_EXPORT PFNCLGETEXTENSIONFUNCTIONADDRESS __clewGetExtensionFunctionAddress;
-
-#define clGetPlatformIDs CLEW_GET_FUN(__clewGetPlatformIDs)
-#define clGetPlatformInfo CLEW_GET_FUN(__clewGetPlatformInfo)
-#define clGetDeviceIDs CLEW_GET_FUN(__clewGetDeviceIDs)
-#define clGetDeviceInfo CLEW_GET_FUN(__clewGetDeviceInfo)
-#define clCreateContext CLEW_GET_FUN(__clewCreateContext)
-#define clCreateContextFromType CLEW_GET_FUN(__clewCreateContextFromType)
-#define clRetainContext CLEW_GET_FUN(__clewRetainContext)
-#define clReleaseContext CLEW_GET_FUN(__clewReleaseContext)
-#define clGetContextInfo CLEW_GET_FUN(__clewGetContextInfo)
-#define clCreateCommandQueue CLEW_GET_FUN(__clewCreateCommandQueue)
-#define clRetainCommandQueue CLEW_GET_FUN(__clewRetainCommandQueue)
-#define clReleaseCommandQueue CLEW_GET_FUN(__clewReleaseCommandQueue)
-#define clGetCommandQueueInfo CLEW_GET_FUN(__clewGetCommandQueueInfo)
-#ifdef CL_USE_DEPRECATED_OPENCL_1_0_APIS
-#warning CL_USE_DEPRECATED_OPENCL_1_0_APIS is defined. These APIs are unsupported and untested in OpenCL 1.1!
-/*
- * WARNING:
- * This API introduces mutable state into the OpenCL implementation. It has been REMOVED
- * to better facilitate thread safety. The 1.0 API is not thread safe. It is not tested by the
- * OpenCL 1.1 conformance test, and consequently may not work or may not work dependably.
- * It is likely to be non-performant. Use of this API is not advised. Use at your own risk.
- *
- * Software developers previously relying on this API are instructed to set the command queue
- * properties when creating the queue, instead.
- */
-#define clSetCommandQueueProperty CLEW_GET_FUN(__clewSetCommandQueueProperty)
-#endif /* CL_USE_DEPRECATED_OPENCL_1_0_APIS */
-#define clCreateBuffer CLEW_GET_FUN(__clewCreateBuffer)
-#define clCreateSubBuffer CLEW_GET_FUN(__clewCreateSubBuffer)
-#define clCreateImage2D CLEW_GET_FUN(__clewCreateImage2D)
-#define clCreateImage3D CLEW_GET_FUN(__clewCreateImage3D)
-#define clRetainMemObject CLEW_GET_FUN(__clewRetainMemObject)
-#define clReleaseMemObject CLEW_GET_FUN(__clewReleaseMemObject)
-#define clGetSupportedImageFormats CLEW_GET_FUN(__clewGetSupportedImageFormats)
-#define clGetMemObjectInfo CLEW_GET_FUN(__clewGetMemObjectInfo)
-#define clGetImageInfo CLEW_GET_FUN(__clewGetImageInfo)
-#define clSetMemObjectDestructorCallback CLEW_GET_FUN(__clewSetMemObjectDestructorCallback)
-#define clCreateSampler CLEW_GET_FUN(__clewCreateSampler)
-#define clRetainSampler CLEW_GET_FUN(__clewRetainSampler)
-#define clReleaseSampler CLEW_GET_FUN(__clewReleaseSampler)
-#define clGetSamplerInfo CLEW_GET_FUN(__clewGetSamplerInfo)
-#define clCreateProgramWithSource CLEW_GET_FUN(__clewCreateProgramWithSource)
-#define clCreateProgramWithBinary CLEW_GET_FUN(__clewCreateProgramWithBinary)
-#define clRetainProgram CLEW_GET_FUN(__clewRetainProgram)
-#define clReleaseProgram CLEW_GET_FUN(__clewReleaseProgram)
-#define clBuildProgram CLEW_GET_FUN(__clewBuildProgram)
-#define clUnloadCompiler CLEW_GET_FUN(__clewUnloadCompiler)
-#define clGetProgramInfo CLEW_GET_FUN(__clewGetProgramInfo)
-#define clGetProgramBuildInfo CLEW_GET_FUN(__clewGetProgramBuildInfo)
-#define clCreateKernel CLEW_GET_FUN(__clewCreateKernel)
-#define clCreateKernelsInProgram CLEW_GET_FUN(__clewCreateKernelsInProgram)
-#define clRetainKernel CLEW_GET_FUN(__clewRetainKernel)
-#define clReleaseKernel CLEW_GET_FUN(__clewReleaseKernel)
-#define clSetKernelArg CLEW_GET_FUN(__clewSetKernelArg)
-#define clGetKernelInfo CLEW_GET_FUN(__clewGetKernelInfo)
-#define clGetKernelWorkGroupInfo CLEW_GET_FUN(__clewGetKernelWorkGroupInfo)
-#define clWaitForEvents CLEW_GET_FUN(__clewWaitForEvents)
-#define clGetEventInfo CLEW_GET_FUN(__clewGetEventInfo)
-#define clCreateUserEvent CLEW_GET_FUN(__clewCreateUserEvent)
-#define clRetainEvent CLEW_GET_FUN(__clewRetainEvent)
-#define clReleaseEvent CLEW_GET_FUN(__clewReleaseEvent)
-#define clSetUserEventStatus CLEW_GET_FUN(__clewSetUserEventStatus)
-#define clSetEventCallback CLEW_GET_FUN(__clewSetEventCallback)
-#define clGetEventProfilingInfo CLEW_GET_FUN(__clewGetEventProfilingInfo)
-#define clFlush CLEW_GET_FUN(__clewFlush)
-#define clFinish CLEW_GET_FUN(__clewFinish)
-#define clEnqueueReadBuffer CLEW_GET_FUN(__clewEnqueueReadBuffer)
-#define clEnqueueReadBufferRect CLEW_GET_FUN(__clewEnqueueReadBufferRect)
-#define clEnqueueWriteBuffer CLEW_GET_FUN(__clewEnqueueWriteBuffer)
-#define clEnqueueWriteBufferRect CLEW_GET_FUN(__clewEnqueueWriteBufferRect)
-#define clEnqueueCopyBuffer CLEW_GET_FUN(__clewEnqueueCopyBuffer)
-#define clEnqueueCopyBufferRect CLEW_GET_FUN(__clewEnqueueCopyBufferRect)
-#define clEnqueueReadImage CLEW_GET_FUN(__clewEnqueueReadImage)
-#define clEnqueueWriteImage CLEW_GET_FUN(__clewEnqueueWriteImage)
-#define clEnqueueCopyImage CLEW_GET_FUN(__clewEnqueueCopyImage)
-#define clEnqueueCopyImageToBuffer CLEW_GET_FUN(__clewEnqueueCopyImageToBuffer)
-#define clEnqueueCopyBufferToImage CLEW_GET_FUN(__clewEnqueueCopyBufferToImage)
-#define clEnqueueMapBuffer CLEW_GET_FUN(__clewEnqueueMapBuffer)
-#define clEnqueueMapImage CLEW_GET_FUN(__clewEnqueueMapImage)
-#define clEnqueueUnmapMemObject CLEW_GET_FUN(__clewEnqueueUnmapMemObject)
-#define clEnqueueNDRangeKernel CLEW_GET_FUN(__clewEnqueueNDRangeKernel)
-#define clEnqueueTask CLEW_GET_FUN(__clewEnqueueTask)
-#define clEnqueueNativeKernel CLEW_GET_FUN(__clewEnqueueNativeKernel)
-#define clEnqueueMarker CLEW_GET_FUN(__clewEnqueueMarker)
-#define clEnqueueWaitForEvents CLEW_GET_FUN(__clewEnqueueWaitForEvents)
-#define clEnqueueBarrier CLEW_GET_FUN(__clewEnqueueBarrier)
-#define clGetExtensionFunctionAddress CLEW_GET_FUN(__clewGetExtensionFunctionAddress)
-
-#define CLEW_SUCCESS 0 //!< Success error code
-#define CLEW_ERROR_OPEN_FAILED -1 //!< Error code for failing to open the dynamic library
-#define CLEW_ERROR_ATEXIT_FAILED -2 //!< Error code for failing to queue the closing of the dynamic library to atexit()
-
- //! \brief Load OpenCL dynamic library and set function entry points
- int clewInit(const char *);
-
- //! \brief Exit clew and unload OpenCL dynamic library
- void clewExit();
-
- //! \brief Convert an OpenCL error code to its string equivalent
- const char *clewErrorString(cl_int error);
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif // CLEW_HPP_INCLUDED
diff --git a/thirdparty/bullet/patches/bullet-fix-warnings.patch b/thirdparty/bullet/patches/bullet-fix-warnings.patch
deleted file mode 100644
index 69cde1b16e..0000000000
--- a/thirdparty/bullet/patches/bullet-fix-warnings.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff --git a/thirdparty/bullet/BulletSoftBody/btSoftBody.h b/thirdparty/bullet/BulletSoftBody/btSoftBody.h
-index f578487b8c..dfde8fd1e4 100644
---- a/thirdparty/bullet/BulletSoftBody/btSoftBody.h
-+++ b/thirdparty/bullet/BulletSoftBody/btSoftBody.h
-@@ -1317,8 +1317,8 @@ public:
- }
- for (int k = 0; k < m_faceNodeContacts.size(); ++k)
- {
-- int i = indices[k];
-- btSoftBody::DeformableFaceNodeContact& c = m_faceNodeContacts[i];
-+ int idx = indices[k];
-+ btSoftBody::DeformableFaceNodeContact& c = m_faceNodeContacts[idx];
- btSoftBody::Node* node = c.m_node;
- btSoftBody::Face* face = c.m_face;
- const btVector3& w = c.m_bary;
-diff --git a/thirdparty/bullet/LinearMath/btSerializer.h b/thirdparty/bullet/LinearMath/btSerializer.h
-index ce4fc34e20..11592d2ccd 100644
---- a/thirdparty/bullet/LinearMath/btSerializer.h
-+++ b/thirdparty/bullet/LinearMath/btSerializer.h
-@@ -499,7 +499,6 @@ public:
- writeDNA();
-
- //if we didn't pre-allocate a buffer, we need to create a contiguous buffer now
-- int mysize = 0;
- if (!m_totalSize)
- {
- if (m_buffer)
-@@ -511,14 +510,12 @@ public:
- unsigned char* currentPtr = m_buffer;
- writeHeader(m_buffer);
- currentPtr += BT_HEADER_LENGTH;
-- mysize += BT_HEADER_LENGTH;
- for (int i = 0; i < m_chunkPtrs.size(); i++)
- {
- int curLength = sizeof(btChunk) + m_chunkPtrs[i]->m_length;
- memcpy(currentPtr, m_chunkPtrs[i], curLength);
- btAlignedFree(m_chunkPtrs[i]);
- currentPtr += curLength;
-- mysize += curLength;
- }
- }
-
diff --git a/thirdparty/bullet/patches/fix-win32-scheduler-uwp.patch b/thirdparty/bullet/patches/fix-win32-scheduler-uwp.patch
deleted file mode 100644
index c65db49388..0000000000
--- a/thirdparty/bullet/patches/fix-win32-scheduler-uwp.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-diff --git a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp b/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp
-index 922e449cce..5862264a67 100644
---- a/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp
-+++ b/thirdparty/bullet/LinearMath/TaskScheduler/btThreadSupportWin32.cpp
-@@ -82,6 +82,11 @@ typedef BOOL(WINAPI* Pfn_GetLogicalProcessorInformation)(PSYSTEM_LOGICAL_PROCESS
- void getProcessorInformation(btProcessorInfo* procInfo)
- {
- memset(procInfo, 0, sizeof(*procInfo));
-+#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP) && \
-+ !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
-+ // Can't dlopen libraries on UWP.
-+ return;
-+#else
- Pfn_GetLogicalProcessorInformation getLogicalProcInfo =
- (Pfn_GetLogicalProcessorInformation)GetProcAddress(GetModuleHandle(TEXT("kernel32")), "GetLogicalProcessorInformation");
- if (getLogicalProcInfo == NULL)
-@@ -160,6 +165,7 @@ void getProcessorInformation(btProcessorInfo* procInfo)
- }
- }
- free(buf);
-+#endif
- }
-
- ///btThreadSupportWin32 helps to initialize/shutdown libspe2, start/stop SPU tasks and communication
diff --git a/thirdparty/cvtt/ConvectionKernels.cpp b/thirdparty/cvtt/ConvectionKernels.cpp
deleted file mode 100644
index 8d379344e1..0000000000
--- a/thirdparty/cvtt/ConvectionKernels.cpp
+++ /dev/null
@@ -1,7586 +0,0 @@
-/*
-Convection Texture Tools
-Copyright (c) 2018 Eric Lasota
-
-Permission is hereby granted, free of charge, to any person obtaining
-a copy of this software and associated documentation files (the
-"Software"), to deal in the Software without restriction, including
-without limitation the rights to use, copy, modify, merge, publish,
-distribute, sublicense, and/or sell copies of the Software, and to
-permit persons to whom the Software is furnished to do so, subject
-to the following conditions:
-
-The above copyright notice and this permission notice shall be included
-in all copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
-OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-
--------------------------------------------------------------------------------------
-
-Portions based on DirectX Texture Library (DirectXTex)
-
-Copyright (c) Microsoft Corporation. All rights reserved.
-Licensed under the MIT License.
-
-http://go.microsoft.com/fwlink/?LinkId=248926
-*/
-#include "ConvectionKernels.h"
-#include "ConvectionKernels_BC7_SingleColor.h"
-
-#if (defined(_M_IX86_FP) && _M_IX86_FP >= 2) || defined(_M_X64) || defined(__SSE2__)
-#define CVTT_USE_SSE2
-#endif
-
-#ifdef CVTT_USE_SSE2
-#include <emmintrin.h>
-#endif
-
-#include <float.h>
-#include <assert.h>
-#include <string.h>
-#include <algorithm>
-#include <math.h>
-
-#define UNREFERENCED_PARAMETER(n) ((void)n)
-
-namespace cvtt
-{
-#ifdef CVTT_USE_SSE2
- // SSE2 version
- struct ParallelMath
- {
- typedef uint16_t ScalarUInt16;
- typedef int16_t ScalarSInt16;
-
- template<unsigned int TRoundingMode>
- struct RoundForScope
- {
- unsigned int m_oldCSR;
-
- RoundForScope()
- {
- m_oldCSR = _mm_getcsr();
- _mm_setcsr((m_oldCSR & ~_MM_ROUND_MASK) | (TRoundingMode));
- }
-
- ~RoundForScope()
- {
- _mm_setcsr(m_oldCSR);
- }
- };
-
- struct RoundTowardZeroForScope : RoundForScope<_MM_ROUND_TOWARD_ZERO>
- {
- };
-
- struct RoundTowardNearestForScope : RoundForScope<_MM_ROUND_NEAREST>
- {
- };
-
- struct RoundUpForScope : RoundForScope<_MM_ROUND_UP>
- {
- };
-
- struct RoundDownForScope : RoundForScope<_MM_ROUND_DOWN>
- {
- };
-
- static const int ParallelSize = 8;
-
- enum Int16Subtype
- {
- IntSubtype_Signed,
- IntSubtype_UnsignedFull,
- IntSubtype_UnsignedTruncated,
- IntSubtype_Abstract,
- };
-
- template<int TSubtype>
- struct VInt16
- {
- __m128i m_value;
-
- inline VInt16 operator+(int16_t other) const
- {
- VInt16 result;
- result.m_value = _mm_add_epi16(m_value, _mm_set1_epi16(static_cast<int16_t>(other)));
- return result;
- }
-
- inline VInt16 operator+(const VInt16 &other) const
- {
- VInt16 result;
- result.m_value = _mm_add_epi16(m_value, other.m_value);
- return result;
- }
-
- inline VInt16 operator|(const VInt16 &other) const
- {
- VInt16 result;
- result.m_value = _mm_or_si128(m_value, other.m_value);
- return result;
- }
-
- inline VInt16 operator&(const VInt16 &other) const
- {
- VInt16 result;
- result.m_value = _mm_and_si128(m_value, other.m_value);
- return result;
- }
-
- inline VInt16 operator-(const VInt16 &other) const
- {
- VInt16 result;
- result.m_value = _mm_sub_epi16(m_value, other.m_value);
- return result;
- }
-
- inline VInt16 operator<<(int bits) const
- {
- VInt16 result;
- result.m_value = _mm_slli_epi16(m_value, bits);
- return result;
- }
- };
-
- typedef VInt16<IntSubtype_Signed> SInt16;
- typedef VInt16<IntSubtype_UnsignedFull> UInt16;
- typedef VInt16<IntSubtype_UnsignedTruncated> UInt15;
- typedef VInt16<IntSubtype_Abstract> AInt16;
-
- template<int TSubtype>
- struct VInt32
- {
- __m128i m_values[2];
-
- inline VInt32 operator+(const VInt32& other) const
- {
- VInt32 result;
- result.m_values[0] = _mm_add_epi32(m_values[0], other.m_values[0]);
- result.m_values[1] = _mm_add_epi32(m_values[1], other.m_values[1]);
- return result;
- }
-
- inline VInt32 operator-(const VInt32& other) const
- {
- VInt32 result;
- result.m_values[0] = _mm_sub_epi32(m_values[0], other.m_values[0]);
- result.m_values[1] = _mm_sub_epi32(m_values[1], other.m_values[1]);
- return result;
- }
-
- inline VInt32 operator<<(const int other) const
- {
- VInt32 result;
- result.m_values[0] = _mm_slli_epi32(m_values[0], other);
- result.m_values[1] = _mm_slli_epi32(m_values[1], other);
- return result;
- }
- };
-
- typedef VInt32<IntSubtype_Signed> SInt32;
- typedef VInt32<IntSubtype_UnsignedTruncated> UInt31;
- typedef VInt32<IntSubtype_UnsignedFull> UInt32;
- typedef VInt32<IntSubtype_Abstract> AInt32;
-
- template<class TTargetType>
- struct LosslessCast
- {
-#ifdef CVTT_PERMIT_ALIASING
- template<int TSrcSubtype>
- static const TTargetType& Cast(const VInt32<TSrcSubtype> &src)
- {
- return reinterpret_cast<VInt32<TSubtype>&>(src);
- }
-
- template<int TSrcSubtype>
- static const TTargetType& Cast(const VInt16<TSrcSubtype> &src)
- {
- return reinterpret_cast<VInt16<TSubtype>&>(src);
- }
-#else
- template<int TSrcSubtype>
- static TTargetType Cast(const VInt32<TSrcSubtype> &src)
- {
- TTargetType result;
- result.m_values[0] = src.m_values[0];
- result.m_values[1] = src.m_values[1];
- return result;
- }
-
- template<int TSrcSubtype>
- static TTargetType Cast(const VInt16<TSrcSubtype> &src)
- {
- TTargetType result;
- result.m_value = src.m_value;
- return result;
- }
-#endif
- };
-
- struct Int64
- {
- __m128i m_values[4];
- };
-
- struct Float
- {
- __m128 m_values[2];
-
- inline Float operator+(const Float &other) const
- {
- Float result;
- result.m_values[0] = _mm_add_ps(m_values[0], other.m_values[0]);
- result.m_values[1] = _mm_add_ps(m_values[1], other.m_values[1]);
- return result;
- }
-
- inline Float operator+(float other) const
- {
- Float result;
- result.m_values[0] = _mm_add_ps(m_values[0], _mm_set1_ps(other));
- result.m_values[1] = _mm_add_ps(m_values[1], _mm_set1_ps(other));
- return result;
- }
-
- inline Float operator-(const Float& other) const
- {
- Float result;
- result.m_values[0] = _mm_sub_ps(m_values[0], other.m_values[0]);
- result.m_values[1] = _mm_sub_ps(m_values[1], other.m_values[1]);
- return result;
- }
-
- inline Float operator-() const
- {
- Float result;
- result.m_values[0] = _mm_sub_ps(_mm_setzero_ps(), m_values[0]);
- result.m_values[1] = _mm_sub_ps(_mm_setzero_ps(), m_values[1]);
- return result;
- }
-
- inline Float operator*(const Float& other) const
- {
- Float result;
- result.m_values[0] = _mm_mul_ps(m_values[0], other.m_values[0]);
- result.m_values[1] = _mm_mul_ps(m_values[1], other.m_values[1]);
- return result;
- }
-
- inline Float operator*(float other) const
- {
- Float result;
- result.m_values[0] = _mm_mul_ps(m_values[0], _mm_set1_ps(other));
- result.m_values[1] = _mm_mul_ps(m_values[1], _mm_set1_ps(other));
- return result;
- }
-
- inline Float operator/(const Float &other) const
- {
- Float result;
- result.m_values[0] = _mm_div_ps(m_values[0], other.m_values[0]);
- result.m_values[1] = _mm_div_ps(m_values[1], other.m_values[1]);
- return result;
- }
-
- inline Float operator/(float other) const
- {
- Float result;
- result.m_values[0] = _mm_div_ps(m_values[0], _mm_set1_ps(other));
- result.m_values[1] = _mm_div_ps(m_values[1], _mm_set1_ps(other));
- return result;
- }
- };
-
- struct Int16CompFlag
- {
- __m128i m_value;
-
- inline Int16CompFlag operator&(const Int16CompFlag &other) const
- {
- Int16CompFlag result;
- result.m_value = _mm_and_si128(m_value, other.m_value);
- return result;
- }
-
- inline Int16CompFlag operator|(const Int16CompFlag &other) const
- {
- Int16CompFlag result;
- result.m_value = _mm_or_si128(m_value, other.m_value);
- return result;
- }
- };
-
- struct FloatCompFlag
- {
- __m128 m_values[2];
- };
-
- template<int TSubtype>
- static VInt16<TSubtype> AbstractAdd(const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
- {
- VInt16<TSubtype> result;
- result.m_value = _mm_add_epi16(a.m_value, b.m_value);
- return result;
- }
-
- template<int TSubtype>
- static VInt16<TSubtype> AbstractSubtract(const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
- {
- VInt16<TSubtype> result;
- result.m_value = _mm_sub_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static Float Select(const FloatCompFlag &flag, const Float &a, const Float &b)
- {
- Float result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_or_ps(_mm_and_ps(flag.m_values[i], a.m_values[i]), _mm_andnot_ps(flag.m_values[i], b.m_values[i]));
- return result;
- }
-
- template<int TSubtype>
- static VInt16<TSubtype> Select(const Int16CompFlag &flag, const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
- {
- VInt16<TSubtype> result;
- result.m_value = _mm_or_si128(_mm_and_si128(flag.m_value, a.m_value), _mm_andnot_si128(flag.m_value, b.m_value));
- return result;
- }
-
- template<int TSubtype>
- static VInt16<TSubtype> SelectOrZero(const Int16CompFlag &flag, const VInt16<TSubtype> &a)
- {
- VInt16<TSubtype> result;
- result.m_value = _mm_and_si128(flag.m_value, a.m_value);
- return result;
- }
-
- template<int TSubtype>
- static void ConditionalSet(VInt16<TSubtype> &dest, const Int16CompFlag &flag, const VInt16<TSubtype> &src)
- {
- dest.m_value = _mm_or_si128(_mm_andnot_si128(flag.m_value, dest.m_value), _mm_and_si128(flag.m_value, src.m_value));
- }
-
- static SInt16 ConditionalNegate(const Int16CompFlag &flag, const SInt16 &v)
- {
- SInt16 result;
- result.m_value = _mm_add_epi16(_mm_xor_si128(flag.m_value, v.m_value), _mm_srli_epi16(flag.m_value, 15));
- return result;
- }
-
- template<int TSubtype>
- static void NotConditionalSet(VInt16<TSubtype> &dest, const Int16CompFlag &flag, const VInt16<TSubtype> &src)
- {
- dest.m_value = _mm_or_si128(_mm_and_si128(flag.m_value, dest.m_value), _mm_andnot_si128(flag.m_value, src.m_value));
- }
-
- static void ConditionalSet(Float &dest, const FloatCompFlag &flag, const Float &src)
- {
- for (int i = 0; i < 2; i++)
- dest.m_values[i] = _mm_or_ps(_mm_andnot_ps(flag.m_values[i], dest.m_values[i]), _mm_and_ps(flag.m_values[i], src.m_values[i]));
- }
-
- static void NotConditionalSet(Float &dest, const FloatCompFlag &flag, const Float &src)
- {
- for (int i = 0; i < 2; i++)
- dest.m_values[i] = _mm_or_ps(_mm_and_ps(flag.m_values[i], dest.m_values[i]), _mm_andnot_ps(flag.m_values[i], src.m_values[i]));
- }
-
- static void MakeSafeDenominator(Float& v)
- {
- ConditionalSet(v, Equal(v, MakeFloatZero()), MakeFloat(1.0f));
- }
-
- static SInt16 TruncateToPrecisionSigned(const SInt16 &v, int precision)
- {
- int lostBits = 16 - precision;
- if (lostBits == 0)
- return v;
-
- SInt16 result;
- result.m_value = _mm_srai_epi16(_mm_slli_epi16(v.m_value, lostBits), lostBits);
- return result;
- }
-
- static UInt16 TruncateToPrecisionUnsigned(const UInt16 &v, int precision)
- {
- int lostBits = 16 - precision;
- if (lostBits == 0)
- return v;
-
- UInt16 result;
- result.m_value = _mm_srli_epi16(_mm_slli_epi16(v.m_value, lostBits), lostBits);
- return result;
- }
-
- static UInt16 Min(const UInt16 &a, const UInt16 &b)
- {
- __m128i bitFlip = _mm_set1_epi16(-32768);
-
- UInt16 result;
- result.m_value = _mm_xor_si128(_mm_min_epi16(_mm_xor_si128(a.m_value, bitFlip), _mm_xor_si128(b.m_value, bitFlip)), bitFlip);
- return result;
- }
-
- static SInt16 Min(const SInt16 &a, const SInt16 &b)
- {
- SInt16 result;
- result.m_value = _mm_min_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static UInt15 Min(const UInt15 &a, const UInt15 &b)
- {
- UInt15 result;
- result.m_value = _mm_min_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static Float Min(const Float &a, const Float &b)
- {
- Float result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_min_ps(a.m_values[i], b.m_values[i]);
- return result;
- }
-
- static UInt16 Max(const UInt16 &a, const UInt16 &b)
- {
- __m128i bitFlip = _mm_set1_epi16(-32768);
-
- UInt16 result;
- result.m_value = _mm_xor_si128(_mm_max_epi16(_mm_xor_si128(a.m_value, bitFlip), _mm_xor_si128(b.m_value, bitFlip)), bitFlip);
- return result;
- }
-
- static SInt16 Max(const SInt16 &a, const SInt16 &b)
- {
- SInt16 result;
- result.m_value = _mm_max_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static UInt15 Max(const UInt15 &a, const UInt15 &b)
- {
- UInt15 result;
- result.m_value = _mm_max_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static Float Max(const Float &a, const Float &b)
- {
- Float result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_max_ps(a.m_values[i], b.m_values[i]);
- return result;
- }
-
- static Float Clamp(const Float &v, float min, float max)
- {
- Float result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_max_ps(_mm_min_ps(v.m_values[i], _mm_set1_ps(max)), _mm_set1_ps(min));
- return result;
- }
-
- static Float Reciprocal(const Float &v)
- {
- Float result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_rcp_ps(v.m_values[i]);
- return result;
- }
-
- static void ConvertLDRInputs(const PixelBlockU8* inputBlocks, int pxOffset, int channel, UInt15 &chOut)
- {
- int16_t values[8];
- for (int i = 0; i < 8; i++)
- values[i] = inputBlocks[i].m_pixels[pxOffset][channel];
-
- chOut.m_value = _mm_set_epi16(values[7], values[6], values[5], values[4], values[3], values[2], values[1], values[0]);
- }
-
- static void ConvertHDRInputs(const PixelBlockF16* inputBlocks, int pxOffset, int channel, SInt16 &chOut)
- {
- int16_t values[8];
- for (int i = 0; i < 8; i++)
- values[i] = inputBlocks[i].m_pixels[pxOffset][channel];
-
- chOut.m_value = _mm_set_epi16(values[7], values[6], values[5], values[4], values[3], values[2], values[1], values[0]);
- }
-
- static Float MakeFloat(float v)
- {
- Float f;
- f.m_values[0] = f.m_values[1] = _mm_set1_ps(v);
- return f;
- }
-
- static Float MakeFloatZero()
- {
- Float f;
- f.m_values[0] = f.m_values[1] = _mm_setzero_ps();
- return f;
- }
-
- static UInt16 MakeUInt16(uint16_t v)
- {
- UInt16 result;
- result.m_value = _mm_set1_epi16(static_cast<short>(v));
- return result;
- }
-
- static SInt16 MakeSInt16(int16_t v)
- {
- SInt16 result;
- result.m_value = _mm_set1_epi16(static_cast<short>(v));
- return result;
- }
-
- static AInt16 MakeAInt16(int16_t v)
- {
- AInt16 result;
- result.m_value = _mm_set1_epi16(static_cast<short>(v));
- return result;
- }
-
- static UInt15 MakeUInt15(uint16_t v)
- {
- UInt15 result;
- result.m_value = _mm_set1_epi16(static_cast<short>(v));
- return result;
- }
-
- static SInt32 MakeSInt32(int32_t v)
- {
- SInt32 result;
- result.m_values[0] = _mm_set1_epi32(v);
- result.m_values[1] = _mm_set1_epi32(v);
- return result;
- }
-
- static UInt31 MakeUInt31(uint32_t v)
- {
- UInt31 result;
- result.m_values[0] = _mm_set1_epi32(v);
- result.m_values[1] = _mm_set1_epi32(v);
- return result;
- }
-
- static uint16_t Extract(const UInt16 &v, int offset)
- {
- return reinterpret_cast<const uint16_t*>(&v.m_value)[offset];
- }
-
- static int16_t Extract(const SInt16 &v, int offset)
- {
- return reinterpret_cast<const int16_t*>(&v.m_value)[offset];
- }
-
- static uint16_t Extract(const UInt15 &v, int offset)
- {
- return reinterpret_cast<const uint16_t*>(&v.m_value)[offset];
- }
-
- static int16_t Extract(const AInt16 &v, int offset)
- {
- return reinterpret_cast<const int16_t*>(&v.m_value)[offset];
- }
-
- static void PutUInt16(UInt16 &dest, int offset, uint16_t v)
- {
- reinterpret_cast<uint16_t*>(&dest)[offset] = v;
- }
-
- static void PutUInt15(UInt15 &dest, int offset, uint16_t v)
- {
- reinterpret_cast<uint16_t*>(&dest)[offset] = v;
- }
-
- static void PutSInt16(SInt16 &dest, int offset, int16_t v)
- {
- reinterpret_cast<int16_t*>(&dest)[offset] = v;
- }
-
- static float ExtractFloat(const Float& v, int offset)
- {
- return reinterpret_cast<const float*>(&v)[offset];
- }
-
- static void PutFloat(Float &dest, int offset, float v)
- {
- reinterpret_cast<float*>(&dest)[offset] = v;
- }
-
- static Int16CompFlag Less(const SInt16 &a, const SInt16 &b)
- {
- Int16CompFlag result;
- result.m_value = _mm_cmplt_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static Int16CompFlag Less(const UInt15 &a, const UInt15 &b)
- {
- Int16CompFlag result;
- result.m_value = _mm_cmplt_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static Int16CompFlag LessOrEqual(const UInt15 &a, const UInt15 &b)
- {
- Int16CompFlag result;
- result.m_value = _mm_cmplt_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static FloatCompFlag Less(const Float &a, const Float &b)
- {
- FloatCompFlag result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_cmplt_ps(a.m_values[i], b.m_values[i]);
- return result;
- }
-
- static FloatCompFlag LessOrEqual(const Float &a, const Float &b)
- {
- FloatCompFlag result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_cmple_ps(a.m_values[i], b.m_values[i]);
- return result;
- }
-
- template<int TSubtype>
- static Int16CompFlag Equal(const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
- {
- Int16CompFlag result;
- result.m_value = _mm_cmpeq_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static FloatCompFlag Equal(const Float &a, const Float &b)
- {
- FloatCompFlag result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_cmpeq_ps(a.m_values[i], b.m_values[i]);
- return result;
- }
-
- static Float ToFloat(const UInt16 &v)
- {
- Float result;
- result.m_values[0] = _mm_cvtepi32_ps(_mm_unpacklo_epi16(v.m_value, _mm_setzero_si128()));
- result.m_values[1] = _mm_cvtepi32_ps(_mm_unpackhi_epi16(v.m_value, _mm_setzero_si128()));
- return result;
- }
-
- static UInt31 ToUInt31(const UInt16 &v)
- {
- UInt31 result;
- result.m_values[0] = _mm_unpacklo_epi16(v.m_value, _mm_setzero_si128());
- result.m_values[1] = _mm_unpackhi_epi16(v.m_value, _mm_setzero_si128());
- return result;
- }
-
- static SInt32 ToInt32(const UInt16 &v)
- {
- SInt32 result;
- result.m_values[0] = _mm_unpacklo_epi16(v.m_value, _mm_setzero_si128());
- result.m_values[1] = _mm_unpackhi_epi16(v.m_value, _mm_setzero_si128());
- return result;
- }
-
- static SInt32 ToInt32(const SInt16 &v)
- {
- SInt32 result;
- result.m_values[0] = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), v.m_value), 16);
- result.m_values[1] = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), v.m_value), 16);
- return result;
- }
-
- static Float ToFloat(const SInt16 &v)
- {
- Float result;
- result.m_values[0] = _mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), v.m_value), 16));
- result.m_values[1] = _mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), v.m_value), 16));
- return result;
- }
-
- static Float ToFloat(const UInt15 &v)
- {
- Float result;
- result.m_values[0] = _mm_cvtepi32_ps(_mm_unpacklo_epi16(v.m_value, _mm_setzero_si128()));
- result.m_values[1] = _mm_cvtepi32_ps(_mm_unpackhi_epi16(v.m_value, _mm_setzero_si128()));
- return result;
- }
-
- static Float ToFloat(const UInt31 &v)
- {
- Float result;
- result.m_values[0] = _mm_cvtepi32_ps(v.m_values[0]);
- result.m_values[1] = _mm_cvtepi32_ps(v.m_values[1]);
- return result;
- }
-
- static Int16CompFlag FloatFlagToInt16(const FloatCompFlag &v)
- {
- __m128i lo = _mm_castps_si128(v.m_values[0]);
- __m128i hi = _mm_castps_si128(v.m_values[1]);
-
- Int16CompFlag result;
- result.m_value = _mm_packs_epi32(lo, hi);
- return result;
- }
-
- static FloatCompFlag Int16FlagToFloat(const Int16CompFlag &v)
- {
- __m128i lo = _mm_unpacklo_epi16(v.m_value, v.m_value);
- __m128i hi = _mm_unpackhi_epi16(v.m_value, v.m_value);
-
- FloatCompFlag result;
- result.m_values[0] = _mm_castsi128_ps(lo);
- result.m_values[1] = _mm_castsi128_ps(hi);
- return result;
- }
-
- static Int16CompFlag MakeBoolInt16(bool b)
- {
- Int16CompFlag result;
- if (b)
- result.m_value = _mm_set1_epi16(-1);
- else
- result.m_value = _mm_setzero_si128();
- return result;
- }
-
- static FloatCompFlag MakeBoolFloat(bool b)
- {
- FloatCompFlag result;
- if (b)
- result.m_values[0] = result.m_values[1] = _mm_castsi128_ps(_mm_set1_epi32(-1));
- else
- result.m_values[0] = result.m_values[1] = _mm_setzero_ps();
- return result;
- }
-
- static Int16CompFlag AndNot(const Int16CompFlag &a, const Int16CompFlag &b)
- {
- Int16CompFlag result;
- result.m_value = _mm_andnot_si128(b.m_value, a.m_value);
- return result;
- }
-
- static UInt16 RoundAndConvertToU16(const Float &v, const void* /*roundingMode*/)
- {
- __m128i lo = _mm_cvtps_epi32(_mm_add_ps(v.m_values[0], _mm_set1_ps(-32768)));
- __m128i hi = _mm_cvtps_epi32(_mm_add_ps(v.m_values[1], _mm_set1_ps(-32768)));
-
- __m128i packed = _mm_packs_epi32(lo, hi);
-
- UInt16 result;
- result.m_value = _mm_xor_si128(packed, _mm_set1_epi16(-32768));
- return result;
- }
-
- static UInt15 RoundAndConvertToU15(const Float &v, const void* /*roundingMode*/)
- {
- __m128i lo = _mm_cvtps_epi32(v.m_values[0]);
- __m128i hi = _mm_cvtps_epi32(v.m_values[1]);
-
- __m128i packed = _mm_packs_epi32(lo, hi);
-
- UInt15 result;
- result.m_value = _mm_packs_epi32(lo, hi);
- return result;
- }
-
- static SInt16 RoundAndConvertToS16(const Float &v, const void* /*roundingMode*/)
- {
- __m128i lo = _mm_cvtps_epi32(v.m_values[0]);
- __m128i hi = _mm_cvtps_epi32(v.m_values[1]);
-
- __m128i packed = _mm_packs_epi32(lo, hi);
-
- SInt16 result;
- result.m_value = _mm_packs_epi32(lo, hi);
- return result;
- }
-
- static Float Sqrt(const Float &f)
- {
- Float result;
- for (int i = 0; i < 2; i++)
- result.m_values[i] = _mm_sqrt_ps(f.m_values[i]);
- return result;
- }
-
- static UInt16 Abs(const SInt16 &a)
- {
- __m128i signBitsXor = _mm_srai_epi16(a.m_value, 15);
- __m128i signBitsAdd = _mm_srli_epi16(a.m_value, 15);
-
- UInt16 result;
- result.m_value = _mm_add_epi16(_mm_xor_si128(a.m_value, signBitsXor), signBitsAdd);
- return result;
- }
-
- static Float Abs(const Float& a)
- {
- __m128 invMask = _mm_set1_ps(-0.0f);
-
- Float result;
- result.m_values[0] = _mm_andnot_ps(invMask, a.m_values[0]);
- result.m_values[1] = _mm_andnot_ps(invMask, a.m_values[1]);
- return result;
- }
-
- static UInt16 SqDiffUInt8(const UInt15 &a, const UInt15 &b)
- {
- __m128i diff = _mm_sub_epi16(a.m_value, b.m_value);
-
- UInt16 result;
- result.m_value = _mm_mullo_epi16(diff, diff);
- return result;
- }
-
- static Float SqDiffSInt16(const SInt16 &a, const SInt16 &b)
- {
- __m128i diffU = _mm_sub_epi16(_mm_max_epi16(a.m_value, b.m_value), _mm_min_epi16(a.m_value, b.m_value));
-
- __m128i mulHi = _mm_mulhi_epu16(diffU, diffU);
- __m128i mulLo = _mm_mullo_epi16(diffU, diffU);
- __m128i sqDiffHi = _mm_unpackhi_epi16(mulLo, mulHi);
- __m128i sqDiffLo = _mm_unpacklo_epi16(mulLo, mulHi);
-
- Float result;
- result.m_values[0] = _mm_cvtepi32_ps(sqDiffLo);
- result.m_values[1] = _mm_cvtepi32_ps(sqDiffHi);
-
- return result;
- }
-
- static Float TwosCLHalfToFloat(const SInt16 &v)
- {
- __m128i absV = _mm_add_epi16(_mm_xor_si128(v.m_value, _mm_srai_epi16(v.m_value, 15)), _mm_srli_epi16(v.m_value, 15));
-
- __m128i signBits = _mm_and_si128(v.m_value, _mm_set1_epi16(-32768));
- __m128i mantissa = _mm_and_si128(v.m_value, _mm_set1_epi16(0x03ff));
- __m128i exponent = _mm_and_si128(v.m_value, _mm_set1_epi16(0x7c00));
-
- __m128i isDenormal = _mm_cmpeq_epi16(exponent, _mm_setzero_si128());
-
- // Convert exponent to high-bits
- exponent = _mm_add_epi16(_mm_srli_epi16(exponent, 3), _mm_set1_epi16(14336));
-
- __m128i denormalCorrectionHigh = _mm_and_si128(isDenormal, _mm_or_si128(signBits, _mm_set1_epi16(14336)));
-
- __m128i highBits = _mm_or_si128(signBits, _mm_or_si128(exponent, _mm_srli_epi16(mantissa, 3)));
- __m128i lowBits = _mm_slli_epi16(mantissa, 13);
-
- __m128i flow = _mm_unpacklo_epi16(lowBits, highBits);
- __m128i fhigh = _mm_unpackhi_epi16(lowBits, highBits);
-
- __m128i correctionLow = _mm_unpacklo_epi16(_mm_setzero_si128(), denormalCorrectionHigh);
- __m128i correctionHigh = _mm_unpackhi_epi16(_mm_setzero_si128(), denormalCorrectionHigh);
-
- Float result;
- result.m_values[0] = _mm_sub_ps(_mm_castsi128_ps(flow), _mm_castsi128_ps(correctionLow));
- result.m_values[1] = _mm_sub_ps(_mm_castsi128_ps(fhigh), _mm_castsi128_ps(correctionHigh));
-
- return result;
- }
-
- static Float SqDiff2CLFloat(const SInt16 &a, const Float &b)
- {
- Float fa = TwosCLHalfToFloat(a);
-
- Float diff = fa - b;
- return diff * diff;
- }
-
- static Float SqDiff2CL(const SInt16 &a, const SInt16 &b)
- {
- Float fa = TwosCLHalfToFloat(a);
- Float fb = TwosCLHalfToFloat(b);
-
- Float diff = fa - fb;
- return diff * diff;
- }
-
- static Float SqDiff2CLFloat(const SInt16 &a, float aWeight, const Float &b)
- {
- Float fa = TwosCLHalfToFloat(a) * aWeight;
-
- Float diff = fa - b;
- return diff * diff;
- }
-
- static UInt16 RightShift(const UInt16 &v, int bits)
- {
- UInt16 result;
- result.m_value = _mm_srli_epi16(v.m_value, bits);
- return result;
- }
-
- static UInt31 RightShift(const UInt31 &v, int bits)
- {
- UInt31 result;
- result.m_values[0] = _mm_srli_epi32(v.m_values[0], bits);
- result.m_values[1] = _mm_srli_epi32(v.m_values[1], bits);
- return result;
- }
-
- static SInt16 RightShift(const SInt16 &v, int bits)
- {
- SInt16 result;
- result.m_value = _mm_srai_epi16(v.m_value, bits);
- return result;
- }
-
- static UInt15 RightShift(const UInt15 &v, int bits)
- {
- UInt15 result;
- result.m_value = _mm_srli_epi16(v.m_value, bits);
- return result;
- }
-
- static SInt32 RightShift(const SInt32 &v, int bits)
- {
- SInt32 result;
- result.m_values[0] = _mm_srai_epi32(v.m_values[0], bits);
- result.m_values[1] = _mm_srai_epi32(v.m_values[1], bits);
- return result;
- }
-
- static SInt16 ToSInt16(const SInt32 &v)
- {
- SInt16 result;
- result.m_value = _mm_packs_epi32(v.m_values[0], v.m_values[1]);
- return result;
- }
-
- static UInt16 ToUInt16(const UInt32 &v)
- {
- __m128i low = _mm_srai_epi32(_mm_slli_epi32(v.m_values[0], 16), 16);
- __m128i high = _mm_srai_epi32(_mm_slli_epi32(v.m_values[1], 16), 16);
-
- UInt16 result;
- result.m_value = _mm_packs_epi32(low, high);
- return result;
- }
-
- static UInt16 ToUInt16(const UInt31 &v)
- {
- __m128i low = _mm_srai_epi32(_mm_slli_epi32(v.m_values[0], 16), 16);
- __m128i high = _mm_srai_epi32(_mm_slli_epi32(v.m_values[1], 16), 16);
-
- UInt16 result;
- result.m_value = _mm_packs_epi32(low, high);
- return result;
- }
-
- static UInt15 ToUInt15(const UInt31 &v)
- {
- UInt15 result;
- result.m_value = _mm_packs_epi32(v.m_values[0], v.m_values[1]);
- return result;
- }
-
- static SInt32 XMultiply(const SInt16 &a, const SInt16 &b)
- {
- __m128i high = _mm_mulhi_epi16(a.m_value, b.m_value);
- __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
-
- SInt32 result;
- result.m_values[0] = _mm_unpacklo_epi16(low, high);
- result.m_values[1] = _mm_unpackhi_epi16(low, high);
- return result;
- }
-
- static SInt32 XMultiply(const SInt16 &a, const UInt15 &b)
- {
- __m128i high = _mm_mulhi_epi16(a.m_value, b.m_value);
- __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
-
- SInt32 result;
- result.m_values[0] = _mm_unpacklo_epi16(low, high);
- result.m_values[1] = _mm_unpackhi_epi16(low, high);
- return result;
- }
-
- static SInt32 XMultiply(const UInt15 &a, const SInt16 &b)
- {
- return XMultiply(b, a);
- }
-
- static UInt32 XMultiply(const UInt16 &a, const UInt16 &b)
- {
- __m128i high = _mm_mulhi_epu16(a.m_value, b.m_value);
- __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
-
- UInt32 result;
- result.m_values[0] = _mm_unpacklo_epi16(low, high);
- result.m_values[1] = _mm_unpackhi_epi16(low, high);
- return result;
- }
-
- static UInt16 CompactMultiply(const UInt16 &a, const UInt15 &b)
- {
- UInt16 result;
- result.m_value = _mm_mullo_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static UInt16 CompactMultiply(const UInt15 &a, const UInt15 &b)
- {
- UInt16 result;
- result.m_value = _mm_mullo_epi16(a.m_value, b.m_value);
- return result;
- }
-
- static UInt31 XMultiply(const UInt15 &a, const UInt15 &b)
- {
- __m128i high = _mm_mulhi_epu16(a.m_value, b.m_value);
- __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
-
- UInt31 result;
- result.m_values[0] = _mm_unpacklo_epi16(low, high);
- result.m_values[1] = _mm_unpackhi_epi16(low, high);
- return result;
- }
-
- static UInt31 XMultiply(const UInt16 &a, const UInt15 &b)
- {
- __m128i high = _mm_mulhi_epu16(a.m_value, b.m_value);
- __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
-
- UInt31 result;
- result.m_values[0] = _mm_unpacklo_epi16(low, high);
- result.m_values[1] = _mm_unpackhi_epi16(low, high);
- return result;
- }
-
- static UInt31 XMultiply(const UInt15 &a, const UInt16 &b)
- {
- return XMultiply(b, a);
- }
-
- static bool AnySet(const Int16CompFlag &v)
- {
- return _mm_movemask_epi8(v.m_value) != 0;
- }
-
- static bool AllSet(const Int16CompFlag &v)
- {
- return _mm_movemask_epi8(v.m_value) == 0xffff;
- }
-
- static bool AnySet(const FloatCompFlag &v)
- {
- return _mm_movemask_ps(v.m_values[0]) != 0 || _mm_movemask_ps(v.m_values[1]) != 0;
- }
-
- static bool AllSet(const FloatCompFlag &v)
- {
- return _mm_movemask_ps(v.m_values[0]) == 0xf && _mm_movemask_ps(v.m_values[1]) == 0xf;
- }
- };
-
-#else
- // Scalar version
- struct ParallelMath
- {
- struct RoundTowardZeroForScope
- {
- };
-
- struct RoundTowardNearestForScope
- {
- };
-
- struct RoundUpForScope
- {
- };
-
- struct RoundDownForScope
- {
- };
-
- static const int ParallelSize = 1;
-
- enum Int16Subtype
- {
- IntSubtype_Signed,
- IntSubtype_UnsignedFull,
- IntSubtype_UnsignedTruncated,
- IntSubtype_Abstract,
- };
-
- typedef int32_t SInt16;
- typedef int32_t UInt15;
- typedef int32_t UInt16;
- typedef int32_t AInt16;
-
- typedef int32_t SInt32;
- typedef int32_t UInt31;
- typedef int32_t UInt32;
- typedef int32_t AInt32;
-
- typedef int32_t ScalarUInt16;
- typedef int32_t ScalarSInt16;
-
- typedef float Float;
-
- template<class TTargetType>
- struct LosslessCast
- {
- static const int32_t& Cast(const int32_t &src)
- {
- return src;
- }
- };
-
- typedef bool Int16CompFlag;
- typedef bool FloatCompFlag;
-
- static int32_t AbstractAdd(const int32_t &a, const int32_t &b)
- {
- return a + b;
- }
-
- static int32_t AbstractSubtract(const int32_t &a, const int32_t &b)
- {
- return a - b;
- }
-
- static float Select(bool flag, float a, float b)
- {
- return flag ? a : b;
- }
-
- static int32_t Select(bool flag, int32_t a, int32_t b)
- {
- return flag ? a : b;
- }
-
- static int32_t SelectOrZero(bool flag, int32_t a)
- {
- return flag ? a : 0;
- }
-
- static void ConditionalSet(int32_t& dest, bool flag, int32_t src)
- {
- if (flag)
- dest = src;
- }
-
- static int32_t ConditionalNegate(bool flag, int32_t v)
- {
- return (flag) ? -v : v;
- }
-
- static void NotConditionalSet(int32_t& dest, bool flag, int32_t src)
- {
- if (!flag)
- dest = src;
- }
-
- static void ConditionalSet(float& dest, bool flag, float src)
- {
- if (flag)
- dest = src;
- }
-
- static void NotConditionalSet(float& dest, bool flag, float src)
- {
- if (!flag)
- dest = src;
- }
-
- static void MakeSafeDenominator(float& v)
- {
- if (v == 0.0f)
- v = 1.0f;
- }
-
- static int32_t SignedRightShift(int32_t v, int bits)
- {
- return v >> bits;
- }
-
- static int32_t TruncateToPrecisionSigned(int32_t v, int precision)
- {
- v = (v << (32 - precision)) & 0xffffffff;
- return SignedRightShift(v, 32 - precision);
- }
-
- static int32_t TruncateToPrecisionUnsigned(int32_t v, int precision)
- {
- return v & ((1 << precision) - 1);
- }
-
- static int32_t Min(int32_t a, int32_t b)
- {
- if (a < b)
- return a;
- return b;
- }
-
- static float Min(float a, float b)
- {
- if (a < b)
- return a;
- return b;
- }
-
- static int32_t Max(int32_t a, int32_t b)
- {
- if (a > b)
- return a;
- return b;
- }
-
- static float Max(float a, float b)
- {
- if (a > b)
- return a;
- return b;
- }
-
- static float Abs(float a)
- {
- return fabsf(a);
- }
-
- static int32_t Abs(int32_t a)
- {
- if (a < 0)
- return -a;
- return a;
- }
-
- static float Clamp(float v, float min, float max)
- {
- if (v < min)
- return min;
- if (v > max)
- return max;
- return v;
- }
-
- static float Reciprocal(float v)
- {
- return 1.0f / v;
- }
-
- static void ConvertLDRInputs(const PixelBlockU8* inputBlocks, int pxOffset, int channel, int32_t& chOut)
- {
- chOut = inputBlocks[0].m_pixels[pxOffset][channel];
- }
-
- static void ConvertHDRInputs(const PixelBlockF16* inputBlocks, int pxOffset, int channel, int32_t& chOut)
- {
- chOut = inputBlocks[0].m_pixels[pxOffset][channel];
- }
-
- static float MakeFloat(float v)
- {
- return v;
- }
-
- static float MakeFloatZero()
- {
- return 0.0f;
- }
-
- static int32_t MakeUInt16(uint16_t v)
- {
- return v;
- }
-
- static int32_t MakeSInt16(int16_t v)
- {
- return v;
- }
-
- static int32_t MakeAInt16(int16_t v)
- {
- return v;
- }
-
- static int32_t MakeUInt15(uint16_t v)
- {
- return v;
- }
-
- static int32_t MakeSInt32(int32_t v)
- {
- return v;
- }
-
- static int32_t MakeUInt31(int32_t v)
- {
- return v;
- }
-
- static int32_t Extract(int32_t v, int offset)
- {
- UNREFERENCED_PARAMETER(offset);
- return v;
- }
-
- static void PutUInt16(int32_t &dest, int offset, ParallelMath::ScalarUInt16 v)
- {
- UNREFERENCED_PARAMETER(offset);
- dest = v;
- }
-
- static void PutUInt15(int32_t &dest, int offset, ParallelMath::ScalarUInt16 v)
- {
- UNREFERENCED_PARAMETER(offset);
- dest = v;
- }
-
- static void PutSInt16(int32_t &dest, int offset, ParallelMath::ScalarSInt16 v)
- {
- UNREFERENCED_PARAMETER(offset);
- dest = v;
- }
-
- static float ExtractFloat(float v, int offset)
- {
- UNREFERENCED_PARAMETER(offset);
- return v;
- }
-
- static void PutFloat(float &dest, int offset, float v)
- {
- UNREFERENCED_PARAMETER(offset);
- dest = v;
- }
-
- static bool Less(int32_t a, int32_t b)
- {
- return a < b;
- }
-
- static bool Less(float a, float b)
- {
- return a < b;
- }
-
- static bool LessOrEqual(int32_t a, int32_t b)
- {
- return a < b;
- }
-
- static bool LessOrEqual(float a, float b)
- {
- return a < b;
- }
-
- static bool Equal(int32_t a, int32_t b)
- {
- return a == b;
- }
-
- static bool Equal(float a, float b)
- {
- return a == b;
- }
-
- static float ToFloat(int32_t v)
- {
- return static_cast<float>(v);
- }
-
- static int32_t ToUInt31(int32_t v)
- {
- return v;
- }
-
- static int32_t ToInt32(int32_t v)
- {
- return v;
- }
-
- static bool FloatFlagToInt16(bool v)
- {
- return v;
- }
-
- static bool Int16FlagToFloat(bool v)
- {
- return v;
- }
-
- static bool MakeBoolInt16(bool b)
- {
- return b;
- }
-
- static bool MakeBoolFloat(bool b)
- {
- return b;
- }
-
- static bool AndNot(bool a, bool b)
- {
- return a && !b;
- }
-
- static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundTowardZeroForScope *rtz)
- {
- UNREFERENCED_PARAMETER(rtz);
- return static_cast<int>(v);
- }
-
- static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundUpForScope *ru)
- {
- UNREFERENCED_PARAMETER(ru);
- return static_cast<int>(ceilf(v));
- }
-
- static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundDownForScope *rd)
- {
- UNREFERENCED_PARAMETER(rd);
- return static_cast<int>(floorf(v));
- }
-
- static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- UNREFERENCED_PARAMETER(rtn);
- return static_cast<int>(floorf(v + 0.5f));
- }
-
- template<class TRoundMode>
- static int32_t RoundAndConvertToU16(float v, const TRoundMode *roundingMode)
- {
- return RoundAndConvertToInt(v, roundingMode);
- }
-
- template<class TRoundMode>
- static int32_t RoundAndConvertToU15(float v, const TRoundMode *roundingMode)
- {
- return RoundAndConvertToInt(v, roundingMode);
- }
-
- template<class TRoundMode>
- static int32_t RoundAndConvertToS16(float v, const TRoundMode *roundingMode)
- {
- return RoundAndConvertToInt(v, roundingMode);
- }
-
- static float Sqrt(float f)
- {
- return sqrtf(f);
- }
-
- static int32_t SqDiffUInt8(int32_t a, int32_t b)
- {
- int32_t delta = a - b;
- return delta * delta;
- }
-
- static int32_t SqDiffInt16(int32_t a, int32_t b)
- {
- int32_t delta = a - b;
- return delta * delta;
- }
-
- static int32_t SqDiffSInt16(int32_t a, int32_t b)
- {
- int32_t delta = a - b;
- return delta * delta;
- }
-
- static float TwosCLHalfToFloat(int32_t v)
- {
- int32_t absV = (v < 0) ? -v : v;
-
- int32_t signBits = (absV & -32768);
- int32_t mantissa = (absV & 0x03ff);
- int32_t exponent = (absV & 0x7c00);
-
- bool isDenormal = (exponent == 0);
-
- // Convert exponent to high-bits
- exponent = (exponent >> 3) + 14336;
-
- int32_t denormalCorrection = (isDenormal ? (signBits | 14336) : 0) << 16;
-
- int32_t fBits = ((exponent | signBits) << 16) | (mantissa << 13);
-
- float f, correction;
- memcpy(&f, &fBits, 4);
- memcpy(&correction, &denormalCorrection, 4);
-
- return f - correction;
- }
-
- static Float SqDiff2CLFloat(const SInt16 &a, const Float &b)
- {
- Float fa = TwosCLHalfToFloat(a);
-
- Float diff = fa - b;
- return diff * diff;
- }
-
- static Float SqDiff2CL(const SInt16 &a, const SInt16 &b)
- {
- Float fa = TwosCLHalfToFloat(a);
- Float fb = TwosCLHalfToFloat(b);
-
- Float diff = fa - fb;
- return diff * diff;
- }
-
- static Float SqDiff2CLFloat(const SInt16 &a, float aWeight, const Float &b)
- {
- Float fa = TwosCLHalfToFloat(a) * aWeight;
-
- Float diff = fa - b;
- return diff * diff;
- }
-
- static int32_t RightShift(int32_t v, int bits)
- {
- return SignedRightShift(v, bits);
- }
-
- static int32_t ToSInt16(int32_t v)
- {
- return v;
- }
-
- static int32_t ToUInt16(int32_t v)
- {
- return v;
- }
-
- static int32_t ToUInt15(int32_t v)
- {
- return v;
- }
-
- static int32_t XMultiply(int32_t a, int32_t b)
- {
- return a * b;
- }
-
- static int32_t CompactMultiply(int32_t a, int32_t b)
- {
- return a * b;
- }
-
- static bool AnySet(bool v)
- {
- return v;
- }
-
- static bool AllSet(bool v)
- {
- return v;
- }
- };
-
-#endif
-
- namespace Internal
- {
- namespace BC7Data
- {
- enum AlphaMode
- {
- AlphaMode_Combined,
- AlphaMode_Separate,
- AlphaMode_None,
- };
-
- enum PBitMode
- {
- PBitMode_PerEndpoint,
- PBitMode_PerSubset,
- PBitMode_None
- };
-
- struct BC7ModeInfo
- {
- PBitMode m_pBitMode;
- AlphaMode m_alphaMode;
- int m_rgbBits;
- int m_alphaBits;
- int m_partitionBits;
- int m_numSubsets;
- int m_indexBits;
- int m_alphaIndexBits;
- bool m_hasIndexSelector;
- };
-
- BC7ModeInfo g_modes[] =
- {
- { PBitMode_PerEndpoint, AlphaMode_None, 4, 0, 4, 3, 3, 0, false }, // 0
- { PBitMode_PerSubset, AlphaMode_None, 6, 0, 6, 2, 3, 0, false }, // 1
- { PBitMode_None, AlphaMode_None, 5, 0, 6, 3, 2, 0, false }, // 2
- { PBitMode_PerEndpoint, AlphaMode_None, 7, 0, 6, 2, 2, 0, false }, // 3 (Mode reference has an error, P-bit is really per-endpoint)
-
- { PBitMode_None, AlphaMode_Separate, 5, 6, 0, 1, 2, 3, true }, // 4
- { PBitMode_None, AlphaMode_Separate, 7, 8, 0, 1, 2, 2, false }, // 5
- { PBitMode_PerEndpoint, AlphaMode_Combined, 7, 7, 0, 1, 4, 0, false }, // 6
- { PBitMode_PerEndpoint, AlphaMode_Combined, 5, 5, 6, 2, 2, 0, false } // 7
- };
-
- const int g_weight2[] = { 0, 21, 43, 64 };
- const int g_weight3[] = { 0, 9, 18, 27, 37, 46, 55, 64 };
- const int g_weight4[] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 };
-
- const int *g_weightTables[] =
- {
- NULL,
- NULL,
- g_weight2,
- g_weight3,
- g_weight4
- };
-
- struct BC6HModeInfo
- {
- uint16_t m_modeID;
- bool m_partitioned;
- bool m_transformed;
- int m_aPrec;
- int m_bPrec[3];
- };
-
- // [partitioned][precision]
- bool g_hdrModesExistForPrecision[2][17] =
- {
- //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
- { false, false, false, false, false, false, false, false, false, false, true, true, true, false, false, false, true },
- { false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, false, false },
- };
-
- BC6HModeInfo g_hdrModes[] =
- {
- { 0x00, true, true, 10,{ 5, 5, 5 } },
- { 0x01, true, true, 7,{ 6, 6, 6 } },
- { 0x02, true, true, 11,{ 5, 4, 4 } },
- { 0x06, true, true, 11,{ 4, 5, 4 } },
- { 0x0a, true, true, 11,{ 4, 4, 5 } },
- { 0x0e, true, true, 9,{ 5, 5, 5 } },
- { 0x12, true, true, 8,{ 6, 5, 5 } },
- { 0x16, true, true, 8,{ 5, 6, 5 } },
- { 0x1a, true, true, 8,{ 5, 5, 6 } },
- { 0x1e, true, false, 6,{ 6, 6, 6 } },
- { 0x03, false, false, 10,{ 10, 10, 10 } },
- { 0x07, false, true, 11,{ 9, 9, 9 } },
- { 0x0b, false, true, 12,{ 8, 8, 8 } },
- { 0x0f, false, true, 16,{ 4, 4, 4 } },
- };
-
- const int g_maxHDRPrecision = 16;
-
- static const size_t g_numHDRModes = sizeof(g_hdrModes) / sizeof(g_hdrModes[0]);
-
- static uint16_t g_partitionMap[64] =
- {
- 0xCCCC, 0x8888, 0xEEEE, 0xECC8,
- 0xC880, 0xFEEC, 0xFEC8, 0xEC80,
- 0xC800, 0xFFEC, 0xFE80, 0xE800,
- 0xFFE8, 0xFF00, 0xFFF0, 0xF000,
- 0xF710, 0x008E, 0x7100, 0x08CE,
- 0x008C, 0x7310, 0x3100, 0x8CCE,
- 0x088C, 0x3110, 0x6666, 0x366C,
- 0x17E8, 0x0FF0, 0x718E, 0x399C,
- 0xaaaa, 0xf0f0, 0x5a5a, 0x33cc,
- 0x3c3c, 0x55aa, 0x9696, 0xa55a,
- 0x73ce, 0x13c8, 0x324c, 0x3bdc,
- 0x6996, 0xc33c, 0x9966, 0x660,
- 0x272, 0x4e4, 0x4e40, 0x2720,
- 0xc936, 0x936c, 0x39c6, 0x639c,
- 0x9336, 0x9cc6, 0x817e, 0xe718,
- 0xccf0, 0xfcc, 0x7744, 0xee22,
- };
-
- static uint32_t g_partitionMap2[64] =
- {
- 0xaa685050, 0x6a5a5040, 0x5a5a4200, 0x5450a0a8,
- 0xa5a50000, 0xa0a05050, 0x5555a0a0, 0x5a5a5050,
- 0xaa550000, 0xaa555500, 0xaaaa5500, 0x90909090,
- 0x94949494, 0xa4a4a4a4, 0xa9a59450, 0x2a0a4250,
- 0xa5945040, 0x0a425054, 0xa5a5a500, 0x55a0a0a0,
- 0xa8a85454, 0x6a6a4040, 0xa4a45000, 0x1a1a0500,
- 0x0050a4a4, 0xaaa59090, 0x14696914, 0x69691400,
- 0xa08585a0, 0xaa821414, 0x50a4a450, 0x6a5a0200,
- 0xa9a58000, 0x5090a0a8, 0xa8a09050, 0x24242424,
- 0x00aa5500, 0x24924924, 0x24499224, 0x50a50a50,
- 0x500aa550, 0xaaaa4444, 0x66660000, 0xa5a0a5a0,
- 0x50a050a0, 0x69286928, 0x44aaaa44, 0x66666600,
- 0xaa444444, 0x54a854a8, 0x95809580, 0x96969600,
- 0xa85454a8, 0x80959580, 0xaa141414, 0x96960000,
- 0xaaaa1414, 0xa05050a0, 0xa0a5a5a0, 0x96000000,
- 0x40804080, 0xa9a8a9a8, 0xaaaaaa44, 0x2a4a5254,
- };
-
- static int g_fixupIndexes2[64] =
- {
- 15,15,15,15,
- 15,15,15,15,
- 15,15,15,15,
- 15,15,15,15,
- 15, 2, 8, 2,
- 2, 8, 8,15,
- 2, 8, 2, 2,
- 8, 8, 2, 2,
-
- 15,15, 6, 8,
- 2, 8,15,15,
- 2, 8, 2, 2,
- 2,15,15, 6,
- 6, 2, 6, 8,
- 15,15, 2, 2,
- 15,15,15,15,
- 15, 2, 2,15,
- };
-
- static int g_fixupIndexes3[64][2] =
- {
- { 3,15 },{ 3, 8 },{ 15, 8 },{ 15, 3 },
- { 8,15 },{ 3,15 },{ 15, 3 },{ 15, 8 },
- { 8,15 },{ 8,15 },{ 6,15 },{ 6,15 },
- { 6,15 },{ 5,15 },{ 3,15 },{ 3, 8 },
- { 3,15 },{ 3, 8 },{ 8,15 },{ 15, 3 },
- { 3,15 },{ 3, 8 },{ 6,15 },{ 10, 8 },
- { 5, 3 },{ 8,15 },{ 8, 6 },{ 6,10 },
- { 8,15 },{ 5,15 },{ 15,10 },{ 15, 8 },
-
- { 8,15 },{ 15, 3 },{ 3,15 },{ 5,10 },
- { 6,10 },{ 10, 8 },{ 8, 9 },{ 15,10 },
- { 15, 6 },{ 3,15 },{ 15, 8 },{ 5,15 },
- { 15, 3 },{ 15, 6 },{ 15, 6 },{ 15, 8 },
- { 3,15 },{ 15, 3 },{ 5,15 },{ 5,15 },
- { 5,15 },{ 8,15 },{ 5,15 },{ 10,15 },
- { 5,15 },{ 10,15 },{ 8,15 },{ 13,15 },
- { 15, 3 },{ 12,15 },{ 3,15 },{ 3, 8 },
- };
-
- static const unsigned char g_fragments[] =
- {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 0, 16
- 0, 1, 2, 3, // 16, 4
- 0, 1, 4, // 20, 3
- 0, 1, 2, 4, // 23, 4
- 2, 3, 7, // 27, 3
- 1, 2, 3, 7, // 30, 4
- 0, 1, 2, 3, 4, 5, 6, 7, // 34, 8
- 0, 1, 4, 8, // 42, 4
- 0, 1, 2, 4, 5, 8, // 46, 6
- 0, 1, 2, 3, 4, 5, 6, 8, // 52, 8
- 1, 4, 5, 6, 9, // 60, 5
- 2, 5, 6, 7, 10, // 65, 5
- 5, 6, 9, 10, // 70, 4
- 2, 3, 7, 11, // 74, 4
- 1, 2, 3, 6, 7, 11, // 78, 6
- 0, 1, 2, 3, 5, 6, 7, 11, // 84, 8
- 0, 1, 2, 3, 8, 9, 10, 11, // 92, 8
- 2, 3, 6, 7, 8, 9, 10, 11, // 100, 8
- 4, 5, 6, 7, 8, 9, 10, 11, // 108, 8
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, // 116, 12
- 0, 4, 8, 12, // 128, 4
- 0, 2, 3, 4, 6, 7, 8, 12, // 132, 8
- 0, 1, 2, 4, 5, 8, 9, 12, // 140, 8
- 0, 1, 2, 3, 4, 5, 6, 8, 9, 12, // 148, 10
- 3, 6, 7, 8, 9, 12, // 158, 6
- 3, 5, 6, 7, 8, 9, 10, 12, // 164, 8
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, // 172, 12
- 0, 1, 2, 5, 6, 7, 11, 12, // 184, 8
- 5, 8, 9, 10, 13, // 192, 5
- 8, 12, 13, // 197, 3
- 4, 8, 12, 13, // 200, 4
- 2, 3, 6, 9, 12, 13, // 204, 6
- 0, 1, 2, 3, 8, 9, 12, 13, // 210, 8
- 0, 1, 4, 5, 8, 9, 12, 13, // 218, 8
- 2, 3, 6, 7, 8, 9, 12, 13, // 226, 8
- 2, 3, 5, 6, 9, 10, 12, 13, // 234, 8
- 0, 3, 6, 7, 9, 10, 12, 13, // 242, 8
- 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, // 250, 12
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, // 262, 13
- 2, 3, 4, 7, 8, 11, 12, 13, // 275, 8
- 1, 2, 6, 7, 8, 11, 12, 13, // 283, 8
- 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, // 291, 10
- 2, 3, 4, 5, 10, 11, 12, 13, // 301, 8
- 0, 1, 6, 7, 10, 11, 12, 13, // 309, 8
- 6, 9, 10, 11, 14, // 317, 5
- 0, 2, 4, 6, 8, 10, 12, 14, // 322, 8
- 1, 3, 5, 7, 8, 10, 12, 14, // 330, 8
- 1, 3, 4, 6, 9, 11, 12, 14, // 338, 8
- 0, 2, 5, 7, 9, 11, 12, 14, // 346, 8
- 0, 3, 4, 5, 8, 9, 13, 14, // 354, 8
- 2, 3, 4, 7, 8, 9, 13, 14, // 362, 8
- 1, 2, 5, 6, 9, 10, 13, 14, // 370, 8
- 0, 3, 4, 7, 9, 10, 13, 14, // 378, 8
- 0, 3, 5, 6, 8, 11, 13, 14, // 386, 8
- 1, 2, 4, 7, 8, 11, 13, 14, // 394, 8
- 0, 1, 4, 7, 10, 11, 13, 14, // 402, 8
- 0, 3, 6, 7, 10, 11, 13, 14, // 410, 8
- 8, 12, 13, 14, // 418, 4
- 1, 2, 3, 7, 8, 12, 13, 14, // 422, 8
- 4, 8, 9, 12, 13, 14, // 430, 6
- 0, 4, 5, 8, 9, 12, 13, 14, // 436, 8
- 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, // 444, 10
- 2, 6, 8, 9, 10, 12, 13, 14, // 454, 8
- 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, // 462, 12
- 0, 7, 9, 10, 11, 12, 13, 14, // 474, 8
- 1, 2, 3, 4, 5, 6, 8, 15, // 482, 8
- 3, 7, 11, 15, // 490, 4
- 0, 1, 3, 4, 5, 7, 11, 15, // 494, 8
- 0, 4, 5, 10, 11, 15, // 502, 6
- 1, 2, 3, 6, 7, 10, 11, 15, // 508, 8
- 0, 1, 2, 3, 5, 6, 7, 10, 11, 15, // 516, 10
- 0, 4, 5, 6, 9, 10, 11, 15, // 526, 8
- 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 15, // 534, 12
- 1, 2, 4, 5, 8, 9, 12, 15, // 546, 8
- 2, 3, 5, 6, 8, 9, 12, 15, // 554, 8
- 0, 3, 5, 6, 9, 10, 12, 15, // 562, 8
- 1, 2, 4, 7, 9, 10, 12, 15, // 570, 8
- 1, 2, 5, 6, 8, 11, 12, 15, // 578, 8
- 0, 3, 4, 7, 8, 11, 12, 15, // 586, 8
- 0, 1, 5, 6, 10, 11, 12, 15, // 594, 8
- 1, 2, 6, 7, 10, 11, 12, 15, // 602, 8
- 1, 3, 4, 6, 8, 10, 13, 15, // 610, 8
- 0, 2, 5, 7, 8, 10, 13, 15, // 618, 8
- 0, 2, 4, 6, 9, 11, 13, 15, // 626, 8
- 1, 3, 5, 7, 9, 11, 13, 15, // 634, 8
- 0, 1, 2, 3, 4, 5, 7, 8, 12, 13, 15, // 642, 11
- 2, 3, 4, 5, 8, 9, 14, 15, // 653, 8
- 0, 1, 6, 7, 8, 9, 14, 15, // 661, 8
- 0, 1, 5, 10, 14, 15, // 669, 6
- 0, 3, 4, 5, 9, 10, 14, 15, // 675, 8
- 0, 1, 5, 6, 9, 10, 14, 15, // 683, 8
- 11, 14, 15, // 691, 3
- 7, 11, 14, 15, // 694, 4
- 1, 2, 4, 5, 8, 11, 14, 15, // 698, 8
- 0, 1, 4, 7, 8, 11, 14, 15, // 706, 8
- 0, 1, 4, 5, 10, 11, 14, 15, // 714, 8
- 2, 3, 6, 7, 10, 11, 14, 15, // 722, 8
- 4, 5, 6, 7, 10, 11, 14, 15, // 730, 8
- 0, 1, 4, 5, 7, 8, 10, 11, 14, 15, // 738, 10
- 0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 14, 15, // 748, 12
- 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 14, 15, // 760, 13
- 0, 1, 2, 3, 4, 6, 7, 11, 12, 14, 15, // 773, 11
- 3, 4, 8, 9, 10, 13, 14, 15, // 784, 8
- 11, 13, 14, 15, // 792, 4
- 0, 1, 2, 4, 11, 13, 14, 15, // 796, 8
- 0, 1, 2, 4, 5, 10, 11, 13, 14, 15, // 804, 10
- 7, 10, 11, 13, 14, 15, // 814, 6
- 3, 6, 7, 10, 11, 13, 14, 15, // 820, 8
- 1, 5, 9, 10, 11, 13, 14, 15, // 828, 8
- 1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, // 836, 12
- 12, 13, 14, 15, // 848, 4
- 0, 1, 2, 3, 12, 13, 14, 15, // 852, 8
- 0, 1, 4, 5, 12, 13, 14, 15, // 860, 8
- 4, 5, 6, 7, 12, 13, 14, 15, // 868, 8
- 4, 8, 9, 10, 12, 13, 14, 15, // 876, 8
- 0, 4, 5, 8, 9, 10, 12, 13, 14, 15, // 884, 10
- 0, 1, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, // 894, 12
- 0, 1, 2, 3, 4, 7, 8, 11, 12, 13, 14, 15, // 906, 12
- 0, 1, 3, 4, 8, 9, 11, 12, 13, 14, 15, // 918, 11
- 0, 2, 3, 7, 8, 10, 11, 12, 13, 14, 15, // 929, 11
- 7, 9, 10, 11, 12, 13, 14, 15, // 940, 8
- 3, 6, 7, 9, 10, 11, 12, 13, 14, 15, // 948, 10
- 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, // 958, 12
- 8, 9, 10, 11, 12, 13, 14, 15, // 970, 8
- 0, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, // 978, 12
- 0, 1, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, // 990, 13
- 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 1003, 12
- 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 1015, 13
- 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 1028, 12
- 0, 2, // 1040, 2
- 1, 3, // 1042, 2
- 0, 1, 4, 5, // 1044, 4
- 0, 1, 2, 4, 5, // 1048, 5
- 2, 3, 6, // 1053, 3
- 0, 2, 4, 6, // 1056, 4
- 1, 2, 5, 6, // 1060, 4
- 0, 1, 2, 3, 5, 6, // 1064, 6
- 0, 1, 2, 4, 5, 6, // 1070, 6
- 0, 1, 2, 3, 4, 5, 6, // 1076, 7
- 0, 3, 4, 7, // 1083, 4
- 0, 1, 2, 3, 4, 7, // 1087, 6
- 1, 3, 5, 7, // 1093, 4
- 2, 3, 6, 7, // 1097, 4
- 1, 2, 3, 6, 7, // 1101, 5
- 1, 2, 3, 5, 6, 7, // 1106, 6
- 0, 1, 2, 3, 5, 6, 7, // 1112, 7
- 4, 5, 6, 7, // 1119, 4
- 0, 8, // 1123, 2
- 0, 1, 4, 5, 8, // 1125, 5
- 0, 1, 8, 9, // 1130, 4
- 4, 5, 8, 9, // 1134, 4
- 0, 1, 4, 5, 8, 9, // 1138, 6
- 2, 6, 8, 9, // 1144, 4
- 6, 7, 8, 9, // 1148, 4
- 0, 2, 4, 6, 8, 10, // 1152, 6
- 1, 2, 5, 6, 9, 10, // 1158, 6
- 0, 3, 4, 7, 9, 10, // 1164, 6
- 0, 1, 2, 8, 9, 10, // 1170, 6
- 4, 5, 6, 8, 9, 10, // 1176, 6
- 3, 11, // 1182, 2
- 2, 3, 6, 7, 11, // 1184, 5
- 0, 3, 8, 11, // 1189, 4
- 0, 3, 4, 7, 8, 11, // 1193, 6
- 1, 3, 5, 7, 9, 11, // 1199, 6
- 2, 3, 10, 11, // 1205, 4
- 1, 5, 10, 11, // 1209, 4
- 4, 5, 10, 11, // 1213, 4
- 6, 7, 10, 11, // 1217, 4
- 2, 3, 6, 7, 10, 11, // 1221, 6
- 1, 2, 3, 9, 10, 11, // 1227, 6
- 5, 6, 7, 9, 10, 11, // 1233, 6
- 8, 9, 10, 11, // 1239, 4
- 4, 12, // 1243, 2
- 0, 1, 2, 3, 4, 5, 8, 12, // 1245, 8
- 8, 9, 12, // 1253, 3
- 0, 4, 5, 8, 9, 12, // 1256, 6
- 0, 1, 4, 5, 8, 9, 12, // 1262, 7
- 2, 3, 5, 6, 8, 9, 12, // 1269, 7
- 1, 5, 9, 13, // 1276, 4
- 6, 7, 9, 13, // 1280, 4
- 1, 4, 7, 10, 13, // 1284, 5
- 1, 6, 8, 11, 13, // 1289, 5
- 0, 1, 12, 13, // 1294, 4
- 4, 5, 12, 13, // 1298, 4
- 0, 1, 6, 7, 12, 13, // 1302, 6
- 0, 1, 4, 8, 12, 13, // 1308, 6
- 8, 9, 12, 13, // 1314, 4
- 4, 8, 9, 12, 13, // 1318, 5
- 4, 5, 8, 9, 12, 13, // 1323, 6
- 0, 4, 5, 8, 9, 12, 13, // 1329, 7
- 0, 1, 6, 10, 12, 13, // 1336, 6
- 3, 6, 7, 9, 10, 12, 13, // 1342, 7
- 0, 1, 10, 11, 12, 13, // 1349, 6
- 2, 4, 7, 9, 14, // 1355, 5
- 4, 5, 10, 14, // 1360, 4
- 2, 6, 10, 14, // 1364, 4
- 2, 5, 8, 11, 14, // 1368, 5
- 0, 2, 12, 14, // 1373, 4
- 8, 10, 12, 14, // 1377, 4
- 4, 6, 8, 10, 12, 14, // 1381, 6
- 13, 14, // 1387, 2
- 9, 10, 13, 14, // 1389, 4
- 5, 6, 9, 10, 13, 14, // 1393, 6
- 0, 1, 2, 12, 13, 14, // 1399, 6
- 4, 5, 6, 12, 13, 14, // 1405, 6
- 8, 9, 12, 13, 14, // 1411, 5
- 8, 9, 10, 12, 13, 14, // 1416, 6
- 7, 15, // 1422, 2
- 0, 5, 10, 15, // 1424, 4
- 0, 1, 2, 3, 6, 7, 11, 15, // 1428, 8
- 10, 11, 15, // 1436, 3
- 0, 1, 5, 6, 10, 11, 15, // 1439, 7
- 3, 6, 7, 10, 11, 15, // 1446, 6
- 12, 15, // 1452, 2
- 0, 3, 12, 15, // 1454, 4
- 4, 7, 12, 15, // 1458, 4
- 0, 3, 6, 9, 12, 15, // 1462, 6
- 0, 3, 5, 10, 12, 15, // 1468, 6
- 8, 11, 12, 15, // 1474, 4
- 5, 6, 8, 11, 12, 15, // 1478, 6
- 4, 7, 8, 11, 12, 15, // 1484, 6
- 1, 3, 13, 15, // 1490, 4
- 9, 11, 13, 15, // 1494, 4
- 5, 7, 9, 11, 13, 15, // 1498, 6
- 2, 3, 14, 15, // 1504, 4
- 2, 3, 4, 5, 14, 15, // 1508, 6
- 6, 7, 14, 15, // 1514, 4
- 2, 3, 5, 9, 14, 15, // 1518, 6
- 2, 3, 8, 9, 14, 15, // 1524, 6
- 10, 14, 15, // 1530, 3
- 0, 4, 5, 9, 10, 14, 15, // 1533, 7
- 2, 3, 7, 11, 14, 15, // 1540, 6
- 10, 11, 14, 15, // 1546, 4
- 7, 10, 11, 14, 15, // 1550, 5
- 6, 7, 10, 11, 14, 15, // 1555, 6
- 1, 2, 3, 13, 14, 15, // 1561, 6
- 5, 6, 7, 13, 14, 15, // 1567, 6
- 10, 11, 13, 14, 15, // 1573, 5
- 9, 10, 11, 13, 14, 15, // 1578, 6
- 0, 4, 8, 9, 12, 13, 14, 15, // 1584, 8
- 9, 10, 12, 13, 14, 15, // 1592, 6
- 8, 11, 12, 13, 14, 15, // 1598, 6
- 3, 7, 10, 11, 12, 13, 14, 15, // 1604, 8
- };
- static const int g_shapeRanges[][2] =
- {
- { 0, 16 },{ 16, 4 },{ 20, 3 },{ 23, 4 },{ 27, 3 },{ 30, 4 },{ 34, 8 },{ 42, 4 },{ 46, 6 },{ 52, 8 },{ 60, 5 },
- { 65, 5 },{ 70, 4 },{ 74, 4 },{ 78, 6 },{ 84, 8 },{ 92, 8 },{ 100, 8 },{ 108, 8 },{ 116, 12 },{ 128, 4 },{ 132, 8 },
- { 140, 8 },{ 148, 10 },{ 158, 6 },{ 164, 8 },{ 172, 12 },{ 184, 8 },{ 192, 5 },{ 197, 3 },{ 200, 4 },{ 204, 6 },{ 210, 8 },
- { 218, 8 },{ 226, 8 },{ 234, 8 },{ 242, 8 },{ 250, 12 },{ 262, 13 },{ 275, 8 },{ 283, 8 },{ 291, 10 },{ 301, 8 },{ 309, 8 },
- { 317, 5 },{ 322, 8 },{ 330, 8 },{ 338, 8 },{ 346, 8 },{ 354, 8 },{ 362, 8 },{ 370, 8 },{ 378, 8 },{ 386, 8 },{ 394, 8 },
- { 402, 8 },{ 410, 8 },{ 418, 4 },{ 422, 8 },{ 430, 6 },{ 436, 8 },{ 444, 10 },{ 454, 8 },{ 462, 12 },{ 474, 8 },{ 482, 8 },
- { 490, 4 },{ 494, 8 },{ 502, 6 },{ 508, 8 },{ 516, 10 },{ 526, 8 },{ 534, 12 },{ 546, 8 },{ 554, 8 },{ 562, 8 },{ 570, 8 },
- { 578, 8 },{ 586, 8 },{ 594, 8 },{ 602, 8 },{ 610, 8 },{ 618, 8 },{ 626, 8 },{ 634, 8 },{ 642, 11 },{ 653, 8 },{ 661, 8 },
- { 669, 6 },{ 675, 8 },{ 683, 8 },{ 691, 3 },{ 694, 4 },{ 698, 8 },{ 706, 8 },{ 714, 8 },{ 722, 8 },{ 730, 8 },{ 738, 10 },
- { 748, 12 },{ 760, 13 },{ 773, 11 },{ 784, 8 },{ 792, 4 },{ 796, 8 },{ 804, 10 },{ 814, 6 },{ 820, 8 },{ 828, 8 },{ 836, 12 },
- { 848, 4 },{ 852, 8 },{ 860, 8 },{ 868, 8 },{ 876, 8 },{ 884, 10 },{ 894, 12 },{ 906, 12 },{ 918, 11 },{ 929, 11 },{ 940, 8 },
- { 948, 10 },{ 958, 12 },{ 970, 8 },{ 978, 12 },{ 990, 13 },{ 1003, 12 },{ 1015, 13 },{ 1028, 12 },{ 1040, 2 },{ 1042, 2 },{ 1044, 4 },
- { 1048, 5 },{ 1053, 3 },{ 1056, 4 },{ 1060, 4 },{ 1064, 6 },{ 1070, 6 },{ 1076, 7 },{ 1083, 4 },{ 1087, 6 },{ 1093, 4 },{ 1097, 4 },
- { 1101, 5 },{ 1106, 6 },{ 1112, 7 },{ 1119, 4 },{ 1123, 2 },{ 1125, 5 },{ 1130, 4 },{ 1134, 4 },{ 1138, 6 },{ 1144, 4 },{ 1148, 4 },
- { 1152, 6 },{ 1158, 6 },{ 1164, 6 },{ 1170, 6 },{ 1176, 6 },{ 1182, 2 },{ 1184, 5 },{ 1189, 4 },{ 1193, 6 },{ 1199, 6 },{ 1205, 4 },
- { 1209, 4 },{ 1213, 4 },{ 1217, 4 },{ 1221, 6 },{ 1227, 6 },{ 1233, 6 },{ 1239, 4 },{ 1243, 2 },{ 1245, 8 },{ 1253, 3 },{ 1256, 6 },
- { 1262, 7 },{ 1269, 7 },{ 1276, 4 },{ 1280, 4 },{ 1284, 5 },{ 1289, 5 },{ 1294, 4 },{ 1298, 4 },{ 1302, 6 },{ 1308, 6 },{ 1314, 4 },
- { 1318, 5 },{ 1323, 6 },{ 1329, 7 },{ 1336, 6 },{ 1342, 7 },{ 1349, 6 },{ 1355, 5 },{ 1360, 4 },{ 1364, 4 },{ 1368, 5 },{ 1373, 4 },
- { 1377, 4 },{ 1381, 6 },{ 1387, 2 },{ 1389, 4 },{ 1393, 6 },{ 1399, 6 },{ 1405, 6 },{ 1411, 5 },{ 1416, 6 },{ 1422, 2 },{ 1424, 4 },
- { 1428, 8 },{ 1436, 3 },{ 1439, 7 },{ 1446, 6 },{ 1452, 2 },{ 1454, 4 },{ 1458, 4 },{ 1462, 6 },{ 1468, 6 },{ 1474, 4 },{ 1478, 6 },
- { 1484, 6 },{ 1490, 4 },{ 1494, 4 },{ 1498, 6 },{ 1504, 4 },{ 1508, 6 },{ 1514, 4 },{ 1518, 6 },{ 1524, 6 },{ 1530, 3 },{ 1533, 7 },
- { 1540, 6 },{ 1546, 4 },{ 1550, 5 },{ 1555, 6 },{ 1561, 6 },{ 1567, 6 },{ 1573, 5 },{ 1578, 6 },{ 1584, 8 },{ 1592, 6 },{ 1598, 6 },
- { 1604, 8 },
- };
- static const int g_shapes1[][2] =
- {
- { 0, 16 }
- };
- static const int g_shapes2[64][2] =
- {
- { 33, 96 },{ 63, 66 },{ 20, 109 },{ 22, 107 },{ 37, 92 },{ 7, 122 },{ 8, 121 },{ 23, 106 },
- { 38, 91 },{ 2, 127 },{ 9, 120 },{ 26, 103 },{ 3, 126 },{ 6, 123 },{ 1, 128 },{ 19, 110 },
- { 15, 114 },{ 124, 5 },{ 72, 57 },{ 115, 14 },{ 125, 4 },{ 70, 59 },{ 100, 29 },{ 60, 69 },
- { 116, 13 },{ 99, 30 },{ 78, 51 },{ 94, 35 },{ 104, 25 },{ 111, 18 },{ 71, 58 },{ 90, 39 },
- { 45, 84 },{ 16, 113 },{ 82, 47 },{ 95, 34 },{ 87, 42 },{ 83, 46 },{ 53, 76 },{ 48, 81 },
- { 68, 61 },{ 105, 24 },{ 98, 31 },{ 88, 41 },{ 75, 54 },{ 43, 86 },{ 52, 77 },{ 117, 12 },
- { 119, 10 },{ 118, 11 },{ 85, 44 },{ 101, 28 },{ 36, 93 },{ 55, 74 },{ 89, 40 },{ 79, 50 },
- { 56, 73 },{ 49, 80 },{ 64, 65 },{ 27, 102 },{ 32, 97 },{ 112, 17 },{ 67, 62 },{ 21, 108 },
- };
- static const int g_shapes3[64][3] =
- {
- { 148, 160, 240 },{ 132, 212, 205 },{ 136, 233, 187 },{ 175, 237, 143 },{ 6, 186, 232 },{ 33, 142, 232 },{ 131, 123, 142 },{ 131, 96, 186 },
- { 6, 171, 110 },{ 1, 18, 110 },{ 1, 146, 123 },{ 33, 195, 66 },{ 20, 51, 66 },{ 20, 178, 96 },{ 2, 177, 106 },{ 211, 4, 59 },
- { 8, 191, 91 },{ 230, 14, 29 },{ 1, 188, 234 },{ 151, 110, 168 },{ 20, 144, 238 },{ 137, 66, 206 },{ 173, 179, 232 },{ 209, 194, 186 },
- { 239, 165, 142 },{ 131, 152, 242 },{ 214, 54, 12 },{ 140, 219, 201 },{ 190, 150, 231 },{ 156, 135, 241 },{ 185, 227, 167 },{ 145, 210, 59 },
- { 138, 174, 106 },{ 189, 229, 14 },{ 176, 133, 106 },{ 78, 178, 195 },{ 111, 146, 171 },{ 216, 180, 196 },{ 217, 181, 193 },{ 184, 228, 166 },
- { 192, 225, 153 },{ 134, 141, 123 },{ 6, 222, 198 },{ 149, 183, 96 },{ 33, 226, 164 },{ 161, 215, 51 },{ 197, 221, 18 },{ 1, 223, 199 },
- { 154, 163, 110 },{ 20, 236, 169 },{ 157, 204, 66 },{ 1, 202, 220 },{ 20, 170, 235 },{ 203, 158, 66 },{ 162, 155, 110 },{ 6, 201, 218 },
- { 139, 135, 123 },{ 33, 167, 224 },{ 182, 150, 96 },{ 19, 200, 213 },{ 63, 207, 159 },{ 147, 172, 109 },{ 129, 130, 128 },{ 208, 14, 59 },
- };
-
- static const int g_shapeList1[] =
- {
- 0,
- };
-
- static const int g_shapeList1Collapse[] =
- {
- 0, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1,
- };
- static const int g_shapeList2[] =
- {
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
- 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
- 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
- 122, 123, 124, 125, 126, 127, 128,
- };
- static const int g_shapeList2Collapse[] =
- {
- -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
- 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
- 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
- 120, 121, 122, 123, 124, 125, 126, 127, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1,
- };
-
- static const int g_shapeList12[] =
- {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128,
- };
-
- static const int g_shapeList12Collapse[] =
- {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1,
- };
-
- static const int g_shapeList3[] =
- {
- 1, 2, 4, 6, 8, 12, 14, 18, 19, 20, 29,
- 33, 51, 54, 59, 63, 66, 78, 91, 96, 106, 109,
- 110, 111, 123, 128, 129, 130, 131, 132, 133, 134, 135,
- 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
- 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
- 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
- 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
- 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242,
- };
-
- static const int g_shapeList3Collapse[] =
- {
- -1, 0, 1, -1, 2, -1, 3, -1, 4, -1, -1,
- -1, 5, -1, 6, -1, -1, -1, 7, 8, 9, -1,
- -1, -1, -1, -1, -1, -1, -1, 10, -1, -1, -1,
- 11, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 12, -1, -1, 13,
- -1, -1, -1, -1, 14, -1, -1, -1, 15, -1, -1,
- 16, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 18, -1, -1, -1, -1, 19, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 20, -1, -1, 21,
- 22, 23, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 24, -1, -1, -1, -1, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
- 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
- 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
- 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
- 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139,
- };
-
- static const int g_shapeList3Short[] =
- {
- 1, 2, 4, 6, 18, 20, 33, 51, 59, 66, 96,
- 106, 110, 123, 131, 132, 136, 142, 143, 146, 148, 160,
- 171, 175, 177, 178, 186, 187, 195, 205, 211, 212, 232,
- 233, 237, 240,
- };
-
- static const int g_shapeList3ShortCollapse[] =
- {
- -1, 0, 1, -1, 2, -1, 3, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 4, -1, 5, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 6, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 7, -1, -1, -1,
- -1, -1, -1, -1, 8, -1, -1, -1, -1, -1, -1,
- 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 10, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 11, -1, -1, -1,
- 12, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 13, -1, -1, -1, -1, -1, -1, -1, 14,
- 15, -1, -1, -1, 16, -1, -1, -1, -1, -1, 17,
- 18, -1, -1, 19, -1, 20, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 21, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 22, -1, -1, -1, 23,
- -1, 24, 25, -1, -1, -1, -1, -1, -1, -1, 26,
- 27, -1, -1, -1, -1, -1, -1, -1, 28, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 29, -1, -1, -1,
- -1, -1, 30, 31, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 32, 33, -1, -1, -1, 34, -1, -1, 35, -1,
- -1,
- };
-
- static const int g_shapeListAll[] =
- {
- 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
- 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
- 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
- 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
- 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
- 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
- 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
- 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
- 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
- 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
- 242,
- };
-
- static const int g_numShapes1 = sizeof(g_shapeList1) / sizeof(g_shapeList1[0]);
- static const int g_numShapes2 = sizeof(g_shapeList2) / sizeof(g_shapeList2[0]);
- static const int g_numShapes12 = sizeof(g_shapeList12) / sizeof(g_shapeList12[0]);
- static const int g_numShapes3 = sizeof(g_shapeList3) / sizeof(g_shapeList3[0]);
- static const int g_numShapes3Short = sizeof(g_shapeList3Short) / sizeof(g_shapeList3Short[0]);
- static const int g_numShapesAll = sizeof(g_shapeListAll) / sizeof(g_shapeListAll[0]);
- static const int g_numFragments = sizeof(g_fragments) / sizeof(g_fragments[0]);
-
- static const int g_maxFragmentsPerMode = (g_numShapes2 > g_numShapes3) ? g_numShapes2 : g_numShapes3;
- }
-
- namespace BC6HData
- {
- enum EField
- {
- NA, // N/A
- M, // Mode
- D, // Shape
- RW,
- RX,
- RY,
- RZ,
- GW,
- GX,
- GY,
- GZ,
- BW,
- BX,
- BY,
- BZ,
- };
-
- struct ModeDescriptor
- {
- EField m_eField;
- uint8_t m_uBit;
- };
-
- const ModeDescriptor g_modeDescriptors[14][82] =
- {
- { // Mode 1 (0x00) - 10 5 5 5
- { M, 0 },{ M, 1 },{ GY, 4 },{ BY, 4 },{ BZ, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { GZ, 4 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { BZ, 0 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BZ, 1 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 2 (0x01) - 7 6 6 6
- { M, 0 },{ M, 1 },{ GY, 5 },{ GZ, 4 },{ GZ, 5 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ BZ, 0 },{ BZ, 1 },{ BY, 4 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ BY, 5 },{ BZ, 2 },{ GY, 4 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BZ, 3 },{ BZ, 5 },{ BZ, 4 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RX, 5 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GX, 5 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BX, 5 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { RY, 5 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ RZ, 5 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 3 (0x02) - 11 5 4 4
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RW,10 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GW,10 },
- { BZ, 0 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BW,10 },
- { BZ, 1 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 4 (0x06) - 11 4 5 4
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RW,10 },
- { GZ, 4 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GW,10 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BW,10 },
- { BZ, 1 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ BZ, 0 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ GY, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 5 (0x0a) - 11 4 4 5
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RW,10 },
- { BY, 4 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GW,10 },
- { BZ, 0 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BW,10 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ BZ, 1 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ BZ, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 6 (0x0e) - 9 5 5 5
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ BY, 4 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GY, 4 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BZ, 4 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { GZ, 4 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { BZ, 0 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BZ, 1 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 7 (0x12) - 8 6 5 5
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ GZ, 4 },{ BY, 4 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ BZ, 2 },{ GY, 4 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BZ, 3 },{ BZ, 4 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RX, 5 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { BZ, 0 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BZ, 1 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { RY, 5 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ RZ, 5 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 8 (0x16) - 8 5 6 5
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ BZ, 0 },{ BY, 4 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GY, 5 },{ GY, 4 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ GZ, 5 },{ BZ, 4 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { GZ, 4 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GX, 5 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BZ, 1 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 9 (0x1a) - 8 5 5 6
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ BZ, 1 },{ BY, 4 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ BY, 5 },{ GY, 4 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BZ, 5 },{ BZ, 4 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { GZ, 4 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { BZ, 0 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BX, 5 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { BZ, 2 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ BZ, 3 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 10 (0x1e) - 6 6 6 6
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ GZ, 4 },{ BZ, 0 },{ BZ, 1 },{ BY, 4 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GY, 5 },{ BY, 5 },{ BZ, 2 },{ GY, 4 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ GZ, 5 },{ BZ, 3 },{ BZ, 5 },{ BZ, 4 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RX, 5 },{ GY, 0 },{ GY, 1 },{ GY, 2 },{ GY, 3 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GX, 5 },{ GZ, 0 },{ GZ, 1 },{ GZ, 2 },{ GZ, 3 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BX, 5 },{ BY, 0 },{ BY, 1 },{ BY, 2 },{ BY, 3 },{ RY, 0 },{ RY, 1 },{ RY, 2 },{ RY, 3 },{ RY, 4 },
- { RY, 5 },{ RZ, 0 },{ RZ, 1 },{ RZ, 2 },{ RZ, 3 },{ RZ, 4 },{ RZ, 5 },{ D, 0 },{ D, 1 },{ D, 2 },
- { D, 3 },{ D, 4 },
- },
-
- { // Mode 11 (0x03) - 10 10
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RX, 5 },{ RX, 6 },{ RX, 7 },{ RX, 8 },{ RX, 9 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GX, 5 },{ GX, 6 },{ GX, 7 },{ GX, 8 },{ GX, 9 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BX, 5 },{ BX, 6 },{ BX, 7 },{ BX, 8 },{ BX, 9 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },
- },
-
- { // Mode 12 (0x07) - 11 9
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RX, 5 },{ RX, 6 },{ RX, 7 },{ RX, 8 },{ RW,10 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GX, 5 },{ GX, 6 },{ GX, 7 },{ GX, 8 },{ GW,10 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BX, 5 },{ BX, 6 },{ BX, 7 },{ BX, 8 },{ BW,10 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },
- },
-
- { // Mode 13 (0x0b) - 12 8
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RX, 4 },
- { RX, 5 },{ RX, 6 },{ RX, 7 },{ RW,11 },{ RW,10 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GX, 4 },
- { GX, 5 },{ GX, 6 },{ GX, 7 },{ GW,11 },{ GW,10 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BX, 4 },
- { BX, 5 },{ BX, 6 },{ BX, 7 },{ BW,11 },{ BW,10 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },
- },
-
- { // Mode 14 (0x0f) - 16 4
- { M, 0 },{ M, 1 },{ M, 2 },{ M, 3 },{ M, 4 },{ RW, 0 },{ RW, 1 },{ RW, 2 },{ RW, 3 },{ RW, 4 },
- { RW, 5 },{ RW, 6 },{ RW, 7 },{ RW, 8 },{ RW, 9 },{ GW, 0 },{ GW, 1 },{ GW, 2 },{ GW, 3 },{ GW, 4 },
- { GW, 5 },{ GW, 6 },{ GW, 7 },{ GW, 8 },{ GW, 9 },{ BW, 0 },{ BW, 1 },{ BW, 2 },{ BW, 3 },{ BW, 4 },
- { BW, 5 },{ BW, 6 },{ BW, 7 },{ BW, 8 },{ BW, 9 },{ RX, 0 },{ RX, 1 },{ RX, 2 },{ RX, 3 },{ RW,15 },
- { RW,14 },{ RW,13 },{ RW,12 },{ RW,11 },{ RW,10 },{ GX, 0 },{ GX, 1 },{ GX, 2 },{ GX, 3 },{ GW,15 },
- { GW,14 },{ GW,13 },{ GW,12 },{ GW,11 },{ GW,10 },{ BX, 0 },{ BX, 1 },{ BX, 2 },{ BX, 3 },{ BW,15 },
- { BW,14 },{ BW,13 },{ BW,12 },{ BW,11 },{ BW,10 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },{ NA, 0 },
- { NA, 0 },{ NA, 0 },
- },
- };
- }
-
- struct PackingVector
- {
- uint32_t m_vector[4];
- int m_offset;
-
- void Init()
- {
- for (int i = 0; i < 4; i++)
- m_vector[i] = 0;
-
- m_offset = 0;
- }
-
- inline void Pack(ParallelMath::ScalarUInt16 value, int bits)
- {
- int vOffset = m_offset >> 5;
- int bitOffset = m_offset & 0x1f;
-
- m_vector[vOffset] |= (static_cast<uint32_t>(value) << bitOffset) & static_cast<uint32_t>(0xffffffff);
-
- int overflowBits = bitOffset + bits - 32;
- if (overflowBits > 0)
- m_vector[vOffset + 1] |= (static_cast<uint32_t>(value) >> (bits - overflowBits));
-
- m_offset += bits;
- }
-
- inline void Flush(uint8_t* output)
- {
- assert(m_offset == 128);
-
- for (int v = 0; v < 4; v++)
- {
- uint32_t chunk = m_vector[v];
- for (int b = 0; b < 4; b++)
- output[v * 4 + b] = static_cast<uint8_t>((chunk >> (b * 8)) & 0xff);
- }
- }
- };
-
-
- struct UnpackingVector
- {
- uint32_t m_vector[4];
-
- void Init(const uint8_t *bytes)
- {
- for (int i = 0; i < 4; i++)
- m_vector[i] = 0;
-
- for (int b = 0; b < 16; b++)
- m_vector[b / 4] |= (bytes[b] << ((b % 4) * 8));
- }
-
- inline ParallelMath::ScalarUInt16 Unpack(int bits)
- {
- uint32_t bitMask = (1 << bits) - 1;
-
- ParallelMath::ScalarUInt16 result = static_cast<ParallelMath::ScalarUInt16>(m_vector[0] & bitMask);
-
- for (int i = 0; i < 4; i++)
- {
- m_vector[i] >>= bits;
- if (i != 3)
- m_vector[i] |= (m_vector[i + 1] & bitMask) << (32 - bits);
- }
-
- return result;
- }
- };
-
- void ComputeTweakFactors(int tweak, int range, float *outFactors)
- {
- int totalUnits = range - 1;
- int minOutsideUnits = ((tweak >> 1) & 1);
- int maxOutsideUnits = (tweak & 1);
- int insideUnits = totalUnits - minOutsideUnits - maxOutsideUnits;
-
- outFactors[0] = -static_cast<float>(minOutsideUnits) / static_cast<float>(insideUnits);
- outFactors[1] = static_cast<float>(maxOutsideUnits) / static_cast<float>(insideUnits) + 1.0f;
- }
-
- ParallelMath::Float ScaleHDRValue(const ParallelMath::Float &v, bool isSigned)
- {
- if (isSigned)
- {
- ParallelMath::Float offset = ParallelMath::Select(ParallelMath::Less(v, ParallelMath::MakeFloatZero()), ParallelMath::MakeFloat(-30.0f), ParallelMath::MakeFloat(30.0f));
- return (v * 32.0f + offset) / 31.0f;
- }
- else
- return (v * 64.0f + 30.0f) / 31.0f;
- }
-
- ParallelMath::SInt16 UnscaleHDRValueSigned(const ParallelMath::SInt16 &v)
- {
-#ifdef CVTT_ENABLE_ASSERTS
- for (int i = 0; i < ParallelMath::ParallelSize; i++)
- assert(ParallelMath::Extract(v, i) != -32768)
-#endif
-
- ParallelMath::Int16CompFlag negative = ParallelMath::Less(v, ParallelMath::MakeSInt16(0));
- ParallelMath::UInt15 absComp = ParallelMath::LosslessCast<ParallelMath::UInt15>::Cast(ParallelMath::Select(negative, ParallelMath::SInt16(ParallelMath::MakeSInt16(0) - v), v));
-
- ParallelMath::UInt31 multiplied = ParallelMath::XMultiply(absComp, ParallelMath::MakeUInt15(31));
- ParallelMath::UInt31 shifted = ParallelMath::RightShift(multiplied, 5);
- ParallelMath::UInt15 absCompScaled = ParallelMath::ToUInt15(shifted);
- ParallelMath::SInt16 signBits = ParallelMath::SelectOrZero(negative, ParallelMath::MakeSInt16(-32768));
-
- return ParallelMath::LosslessCast<ParallelMath::SInt16>::Cast(absCompScaled) | signBits;
- }
-
- ParallelMath::UInt15 UnscaleHDRValueUnsigned(const ParallelMath::UInt16 &v)
- {
- return ParallelMath::ToUInt15(ParallelMath::RightShift(ParallelMath::XMultiply(v, ParallelMath::MakeUInt15(31)), 6));
- }
-
- void UnscaleHDREndpoints(const ParallelMath::AInt16 inEP[2][3], ParallelMath::AInt16 outEP[2][3], bool isSigned)
- {
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- if (isSigned)
- outEP[epi][ch] = ParallelMath::LosslessCast<ParallelMath::AInt16>::Cast(UnscaleHDRValueSigned(ParallelMath::LosslessCast<ParallelMath::SInt16>::Cast(inEP[epi][ch])));
- else
- outEP[epi][ch] = ParallelMath::LosslessCast<ParallelMath::AInt16>::Cast(UnscaleHDRValueUnsigned(ParallelMath::LosslessCast<ParallelMath::UInt16>::Cast(inEP[epi][ch])));
- }
- }
- }
-
- template<int TVectorSize>
- class UnfinishedEndpoints
- {
- public:
- typedef ParallelMath::Float MFloat;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::SInt32 MSInt32;
-
- UnfinishedEndpoints()
- {
- }
-
- UnfinishedEndpoints(const MFloat *base, const MFloat *offset)
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- m_base[ch] = base[ch];
- for (int ch = 0; ch < TVectorSize; ch++)
- m_offset[ch] = offset[ch];
- }
-
- UnfinishedEndpoints(const UnfinishedEndpoints& other)
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- m_base[ch] = other.m_base[ch];
- for (int ch = 0; ch < TVectorSize; ch++)
- m_offset[ch] = other.m_offset[ch];
- }
-
- void FinishHDRUnsigned(int tweak, int range, MSInt16 *outEP0, MSInt16 *outEP1, ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- float tweakFactors[2];
- ComputeTweakFactors(tweak, range, tweakFactors);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MUInt15 channelEPs[2];
- for (int epi = 0; epi < 2; epi++)
- {
- MFloat f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[epi], 0.0f, 31743.0f);
- channelEPs[epi] = ParallelMath::RoundAndConvertToU15(f, roundingMode);
- }
-
- outEP0[ch] = ParallelMath::LosslessCast<MSInt16>::Cast(channelEPs[0]);
- outEP1[ch] = ParallelMath::LosslessCast<MSInt16>::Cast(channelEPs[1]);
- }
- }
-
- void FinishHDRSigned(int tweak, int range, MSInt16* outEP0, MSInt16* outEP1, ParallelMath::RoundTowardNearestForScope* roundingMode)
- {
- float tweakFactors[2];
- ComputeTweakFactors(tweak, range, tweakFactors);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MSInt16 channelEPs[2];
- for (int epi = 0; epi < 2; epi++)
- {
- MFloat f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[epi], -31743.0f, 31743.0f);
- channelEPs[epi] = ParallelMath::RoundAndConvertToS16(f, roundingMode);
- }
-
- outEP0[ch] = channelEPs[0];
- outEP1[ch] = channelEPs[1];
- }
- }
-
- void FinishLDR(int tweak, int range, MUInt15* outEP0, MUInt15* outEP1)
- {
- ParallelMath::RoundTowardNearestForScope roundingMode;
-
- float tweakFactors[2];
- ComputeTweakFactors(tweak, range, tweakFactors);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MFloat ep0f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[0], 0.0f, 255.0f);
- MFloat ep1f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[1], 0.0f, 255.0f);
- outEP0[ch] = ParallelMath::RoundAndConvertToU15(ep0f, &roundingMode);
- outEP1[ch] = ParallelMath::RoundAndConvertToU15(ep1f, &roundingMode);
- }
- }
-
- template<int TNewVectorSize>
- UnfinishedEndpoints<TNewVectorSize> ExpandTo(float filler)
- {
- MFloat newBase[TNewVectorSize];
- MFloat newOffset[TNewVectorSize];
-
- for (int ch = 0; ch < TNewVectorSize && ch < TVectorSize; ch++)
- {
- newBase[ch] = m_base[ch];
- newOffset[ch] = m_offset[ch];
- }
-
- MFloat fillerV = ParallelMath::MakeFloat(filler);
-
- for (int ch = TVectorSize; ch < TNewVectorSize; ch++)
- {
- newBase[ch] = fillerV;
- newOffset[ch] = ParallelMath::MakeFloatZero();
- }
-
- return UnfinishedEndpoints<TNewVectorSize>(newBase, newOffset);
- }
-
- private:
- MFloat m_base[TVectorSize];
- MFloat m_offset[TVectorSize];
- };
-
- template<int TMatrixSize>
- class PackedCovarianceMatrix
- {
- public:
- // 0: xx,
- // 1: xy, yy
- // 3: xz, yz, zz
- // 6: xw, yw, zw, ww
- // ... etc.
- static const int PyramidSize = (TMatrixSize * (TMatrixSize + 1)) / 2;
-
- typedef ParallelMath::Float MFloat;
-
- PackedCovarianceMatrix()
- {
- for (int i = 0; i < PyramidSize; i++)
- m_values[i] = ParallelMath::MakeFloatZero();
- }
-
- void Add(const ParallelMath::Float *vec, const ParallelMath::Float &weight)
- {
- int index = 0;
- for (int row = 0; row < TMatrixSize; row++)
- {
- for (int col = 0; col <= row; col++)
- {
- m_values[index] = m_values[index] + vec[row] * vec[col] * weight;
- index++;
- }
- }
- }
-
- void Product(MFloat *outVec, const MFloat *inVec)
- {
- for (int row = 0; row < TMatrixSize; row++)
- {
- MFloat sum = ParallelMath::MakeFloatZero();
-
- int index = (row * (row + 1)) >> 1;
- for (int col = 0; col < TMatrixSize; col++)
- {
- sum = sum + inVec[col] * m_values[index];
- if (col >= row)
- index += col + 1;
- else
- index++;
- }
-
- outVec[row] = sum;
- }
- }
-
- private:
- ParallelMath::Float m_values[PyramidSize];
- };
-
- static const int NumEndpointSelectorPasses = 3;
-
- template<int TVectorSize, int TIterationCount>
- class EndpointSelector
- {
- public:
- typedef ParallelMath::Float MFloat;
-
- EndpointSelector()
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- m_centroid[ch] = ParallelMath::MakeFloatZero();
- m_direction[ch] = ParallelMath::MakeFloatZero();
- }
- m_weightTotal = ParallelMath::MakeFloatZero();
- m_minDist = ParallelMath::MakeFloat(FLT_MAX);
- m_maxDist = ParallelMath::MakeFloat(-FLT_MAX);
- }
-
- void ContributePass(const MFloat *value, int pass, const MFloat &weight)
- {
- if (pass == 0)
- ContributeCentroid(value, weight);
- else if (pass == 1)
- ContributeDirection(value, weight);
- else if (pass == 2)
- ContributeMinMax(value);
- }
-
- void FinishPass(int pass)
- {
- if (pass == 0)
- FinishCentroid();
- else if (pass == 1)
- FinishDirection();
- }
-
- UnfinishedEndpoints<TVectorSize> GetEndpoints(const float channelWeights[TVectorSize]) const
- {
- MFloat unweightedBase[TVectorSize];
- MFloat unweightedOffset[TVectorSize];
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MFloat min = m_centroid[ch] + m_direction[ch] * m_minDist;
- MFloat max = m_centroid[ch] + m_direction[ch] * m_maxDist;
-
- float safeWeight = channelWeights[ch];
- if (safeWeight == 0.f)
- safeWeight = 1.0f;
-
- unweightedBase[ch] = min / channelWeights[ch];
- unweightedOffset[ch] = (max - min) / channelWeights[ch];
- }
-
- return UnfinishedEndpoints<TVectorSize>(unweightedBase, unweightedOffset);
- }
-
- private:
- void ContributeCentroid(const MFloat *value, const MFloat &weight)
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- m_centroid[ch] = m_centroid[ch] + value[ch] * weight;
- m_weightTotal = m_weightTotal + weight;
- }
-
- void FinishCentroid()
- {
- MFloat denom = m_weightTotal;
- ParallelMath::MakeSafeDenominator(denom);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- m_centroid[ch] = m_centroid[ch] / denom;
- }
-
- void ContributeDirection(const MFloat *value, const MFloat &weight)
- {
- MFloat diff[TVectorSize];
- for (int ch = 0; ch < TVectorSize; ch++)
- diff[ch] = value[ch] - m_centroid[ch];
-
- m_covarianceMatrix.Add(diff, weight);
- }
-
- void FinishDirection()
- {
- MFloat approx[TVectorSize];
- for (int ch = 0; ch < TVectorSize; ch++)
- approx[ch] = ParallelMath::MakeFloat(1.0f);
-
- for (int i = 0; i < TIterationCount; i++)
- {
- MFloat product[TVectorSize];
- m_covarianceMatrix.Product(product, approx);
-
- MFloat largestComponent = product[0];
- for (int ch = 1; ch < TVectorSize; ch++)
- largestComponent = ParallelMath::Max(largestComponent, product[ch]);
-
- // product = largestComponent*newApprox
- ParallelMath::MakeSafeDenominator(largestComponent);
- for (int ch = 0; ch < TVectorSize; ch++)
- approx[ch] = product[ch] / largestComponent;
- }
-
- // Normalize
- MFloat approxLen = ParallelMath::MakeFloatZero();
- for (int ch = 0; ch < TVectorSize; ch++)
- approxLen = approxLen + approx[ch] * approx[ch];
-
- approxLen = ParallelMath::Sqrt(approxLen);
-
- ParallelMath::MakeSafeDenominator(approxLen);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- m_direction[ch] = approx[ch] / approxLen;
- }
-
- void ContributeMinMax(const MFloat *value)
- {
- MFloat dist = ParallelMath::MakeFloatZero();
- for (int ch = 0; ch < TVectorSize; ch++)
- dist = dist + m_direction[ch] * (value[ch] - m_centroid[ch]);
-
- m_minDist = ParallelMath::Min(m_minDist, dist);
- m_maxDist = ParallelMath::Max(m_maxDist, dist);
- }
-
- ParallelMath::Float m_centroid[TVectorSize];
- ParallelMath::Float m_direction[TVectorSize];
- PackedCovarianceMatrix<TVectorSize> m_covarianceMatrix;
- ParallelMath::Float m_weightTotal;
-
- ParallelMath::Float m_minDist;
- ParallelMath::Float m_maxDist;
- };
-
- static const ParallelMath::UInt16 g_weightReciprocals[] =
- {
- ParallelMath::MakeUInt16(0), // -1
- ParallelMath::MakeUInt16(0), // 0
- ParallelMath::MakeUInt16(32768), // 1
- ParallelMath::MakeUInt16(16384), // 2
- ParallelMath::MakeUInt16(10923), // 3
- ParallelMath::MakeUInt16(8192), // 4
- ParallelMath::MakeUInt16(6554), // 5
- ParallelMath::MakeUInt16(5461), // 6
- ParallelMath::MakeUInt16(4681), // 7
- ParallelMath::MakeUInt16(4096), // 8
- ParallelMath::MakeUInt16(3641), // 9
- ParallelMath::MakeUInt16(3277), // 10
- ParallelMath::MakeUInt16(2979), // 11
- ParallelMath::MakeUInt16(2731), // 12
- ParallelMath::MakeUInt16(2521), // 13
- ParallelMath::MakeUInt16(2341), // 14
- ParallelMath::MakeUInt16(2185), // 15
- };
-
- template<int TVectorSize>
- class IndexSelector
- {
- public:
- typedef ParallelMath::Float MFloat;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::AInt16 MAInt16;
- typedef ParallelMath::SInt32 MSInt32;
- typedef ParallelMath::UInt31 MUInt31;
-
- template<class TInterpolationEPType, class TColorEPType>
- void Init(const float *channelWeights, const TInterpolationEPType interpolationEndPoints[2][TVectorSize], const TColorEPType colorSpaceEndpoints[2][TVectorSize], int range)
- {
- // In BC6H, the interpolation endpoints are higher-precision than the endpoints in color space.
- // We need to select indexes using the color-space endpoints.
-
- m_isUniform = true;
- for (int ch = 1; ch < TVectorSize; ch++)
- {
- if (channelWeights[ch] != channelWeights[0])
- m_isUniform = false;
- }
-
- // To work with channel weights, we need something where:
- // pxDiff = px - ep[0]
- // epDiff = ep[1] - ep[0]
- //
- // weightedEPDiff = epDiff * channelWeights
- // normalizedWeightedAxis = weightedEPDiff / len(weightedEPDiff)
- // normalizedIndex = dot(pxDiff * channelWeights, normalizedWeightedAxis) / len(weightedEPDiff)
- // index = normalizedIndex * maxValue
- //
- // Equivalent to:
- // axis = channelWeights * maxValue * epDiff * channelWeights / lenSquared(epDiff * channelWeights)
- // index = dot(axis, pxDiff)
-
- for (int ep = 0; ep < 2; ep++)
- for (int ch = 0; ch < TVectorSize; ch++)
- m_endPoint[ep][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(interpolationEndPoints[ep][ch]);
-
- m_range = range;
- m_maxValue = static_cast<float>(range - 1);
-
- MFloat epDiffWeighted[TVectorSize];
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- m_origin[ch] = ParallelMath::ToFloat(colorSpaceEndpoints[0][ch]);
- MFloat opposingOriginCh = ParallelMath::ToFloat(colorSpaceEndpoints[1][ch]);
- epDiffWeighted[ch] = (opposingOriginCh - m_origin[ch]) * channelWeights[ch];
- }
-
- MFloat lenSquared = epDiffWeighted[0] * epDiffWeighted[0];
- for (int ch = 1; ch < TVectorSize; ch++)
- lenSquared = lenSquared + epDiffWeighted[ch] * epDiffWeighted[ch];
-
- ParallelMath::MakeSafeDenominator(lenSquared);
-
- MFloat maxValueDividedByLengthSquared = ParallelMath::MakeFloat(m_maxValue) / lenSquared;
-
- for (int ch = 0; ch < TVectorSize; ch++)
- m_axis[ch] = epDiffWeighted[ch] * channelWeights[ch] * maxValueDividedByLengthSquared;
- }
-
- template<bool TSigned>
- void Init(const float channelWeights[TVectorSize], const MUInt15 endPoints[2][TVectorSize], int range)
- {
- MAInt16 converted[2][TVectorSize];
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < TVectorSize; ch++)
- converted[epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(endPoints[epi][ch]);
-
- Init<MUInt15, MUInt15>(channelWeights, endPoints, endPoints, range);
- }
-
- void ReconstructLDR_BC7(const MUInt15 &index, MUInt15* pixel, int numRealChannels)
- {
- MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 256, 9));
-
- for (int ch = 0; ch < numRealChannels; ch++)
- {
- MUInt15 ep0f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply((ParallelMath::MakeUInt15(64) - weight), ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[0][ch])));
- MUInt15 ep1f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(weight, ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[1][ch])));
- pixel[ch] = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ep0f + ep1f + ParallelMath::MakeUInt15(32), 6));
- }
- }
-
- void ReconstructLDRPrecise(const MUInt15 &index, MUInt15* pixel, int numRealChannels)
- {
- MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 64, 7));
-
- for (int ch = 0; ch < numRealChannels; ch++)
- {
- MUInt15 ep0f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply((ParallelMath::MakeUInt15(256) - weight), ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[0][ch])));
- MUInt15 ep1f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(weight, ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[1][ch])));
- pixel[ch] = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ep0f + ep1f + ParallelMath::MakeUInt15(128), 8));
- }
- }
-
- void ReconstructLDR_BC7(const MUInt15 &index, MUInt15* pixel)
- {
- ReconstructLDR_BC7(index, pixel, TVectorSize);
- }
-
- void ReconstructLDRPrecise(const MUInt15 &index, MUInt15* pixel)
- {
- ReconstructLDRPrecise(index, pixel, TVectorSize);
- }
-
- MUInt15 SelectIndexLDR(const MFloat* pixel, const ParallelMath::RoundTowardNearestForScope* rtn) const
- {
- MFloat dist = (pixel[0] - m_origin[0]) * m_axis[0];
- for (int ch = 1; ch < TVectorSize; ch++)
- dist = dist + (pixel[ch] - m_origin[ch]) * m_axis[ch];
-
- return ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(dist, 0.0f, m_maxValue), rtn);
- }
-
- protected:
- MAInt16 m_endPoint[2][TVectorSize];
-
- private:
- MFloat m_origin[TVectorSize];
- MFloat m_axis[TVectorSize];
- int m_range;
- float m_maxValue;
- bool m_isUniform;
- };
-
-
- template<int TVectorSize>
- class IndexSelectorHDR : public IndexSelector<TVectorSize>
- {
- public:
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt31 MUInt31;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::SInt32 MSInt32;
- typedef ParallelMath::Float MFloat;
-
- private:
-
- MUInt15 InvertSingle(const MUInt15& anIndex) const
- {
- MUInt15 inverted = m_maxValueMinusOne - anIndex;
- return ParallelMath::Select(m_isInverted, inverted, anIndex);
- }
-
- void ReconstructHDRSignedUninverted(const MUInt15 &index, MSInt16* pixel) const
- {
- MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 256, 9));
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MSInt16 ep0 = ParallelMath::LosslessCast<MSInt16>::Cast(this->m_endPoint[0][ch]);
- MSInt16 ep1 = ParallelMath::LosslessCast<MSInt16>::Cast(this->m_endPoint[1][ch]);
-
- MSInt32 pixel32 = ParallelMath::XMultiply((ParallelMath::MakeUInt15(64) - weight), ep0) + ParallelMath::XMultiply(weight, ep1);
-
- pixel32 = ParallelMath::RightShift(pixel32 + ParallelMath::MakeSInt32(32), 6);
-
- pixel[ch] = UnscaleHDRValueSigned(ParallelMath::ToSInt16(pixel32));
- }
- }
-
- void ReconstructHDRUnsignedUninverted(const MUInt15 &index, MSInt16* pixel) const
- {
- MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 256, 9));
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MUInt16 ep0 = ParallelMath::LosslessCast<MUInt16>::Cast(this->m_endPoint[0][ch]);
- MUInt16 ep1 = ParallelMath::LosslessCast<MUInt16>::Cast(this->m_endPoint[1][ch]);
-
- MUInt31 pixel31 = ParallelMath::XMultiply((ParallelMath::MakeUInt15(64) - weight), ep0) + ParallelMath::XMultiply(weight, ep1);
-
- pixel31 = ParallelMath::RightShift(pixel31 + ParallelMath::MakeUInt31(32), 6);
-
- pixel[ch] = ParallelMath::LosslessCast<MSInt16>::Cast(UnscaleHDRValueUnsigned(ParallelMath::ToUInt16(pixel31)));
- }
- }
-
- MFloat ErrorForInterpolatorComponent(int index, int ch, const MFloat *pixel) const
- {
- MFloat diff = pixel[ch] - m_reconstructedInterpolators[index][ch];
- return diff * diff;
- }
-
- MFloat ErrorForInterpolator(int index, const MFloat *pixel) const
- {
- MFloat error = ErrorForInterpolatorComponent(index, 0, pixel);
- for (int ch = 1; ch < TVectorSize; ch++)
- error = error + ErrorForInterpolatorComponent(index, ch, pixel);
- return error;
- }
-
- public:
-
- void InitHDR(int range, bool isSigned, bool fastIndexing, const float *channelWeights)
- {
- assert(range <= 16);
-
- m_range = range;
-
- m_isInverted = ParallelMath::MakeBoolInt16(false);
- m_maxValueMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>(range - 1));
-
- if (!fastIndexing)
- {
- for (int i = 0; i < range; i++)
- {
- MSInt16 recon2CL[TVectorSize];
-
- if (isSigned)
- ReconstructHDRSignedUninverted(ParallelMath::MakeUInt15(static_cast<uint16_t>(i)), recon2CL);
- else
- ReconstructHDRUnsignedUninverted(ParallelMath::MakeUInt15(static_cast<uint16_t>(i)), recon2CL);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- m_reconstructedInterpolators[i][ch] = ParallelMath::TwosCLHalfToFloat(recon2CL[ch]) * channelWeights[ch];
- }
- }
- }
-
- void ReconstructHDRSigned(const MUInt15 &index, MSInt16* pixel) const
- {
- ReconstructHDRSignedUninverted(InvertSingle(index), pixel);
- }
-
- void ReconstructHDRUnsigned(const MUInt15 &index, MSInt16* pixel) const
- {
- ReconstructHDRUnsignedUninverted(InvertSingle(index), pixel);
- }
-
- void ConditionalInvert(const ParallelMath::Int16CompFlag &invert)
- {
- m_isInverted = invert;
- }
-
- MUInt15 SelectIndexHDRSlow(const MFloat* pixel, const ParallelMath::RoundTowardNearestForScope*) const
- {
- MUInt15 index = ParallelMath::MakeUInt15(0);
-
- MFloat bestError = ErrorForInterpolator(0, pixel);
- for (int i = 1; i < m_range; i++)
- {
- MFloat error = ErrorForInterpolator(i, pixel);
- ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
- ParallelMath::ConditionalSet(index, ParallelMath::FloatFlagToInt16(errorBetter), ParallelMath::MakeUInt15(static_cast<uint16_t>(i)));
- bestError = ParallelMath::Min(bestError, error);
- }
-
- return InvertSingle(index);
- }
-
- MUInt15 SelectIndexHDRFast(const MFloat* pixel, const ParallelMath::RoundTowardNearestForScope* rtn) const
- {
- return InvertSingle(this->SelectIndexLDR(pixel, rtn));
- }
-
- private:
- MFloat m_reconstructedInterpolators[16][TVectorSize];
- ParallelMath::Int16CompFlag m_isInverted;
- MUInt15 m_maxValueMinusOne;
- int m_range;
- };
-
- // Solve for a, b where v = a*t + b
- // This allows endpoints to be mapped to where T=0 and T=1
- // Least squares from totals:
- // a = (tv - t*v/w)/(tt - t*t/w)
- // b = (v - a*t)/w
- template<int TVectorSize>
- class EndpointRefiner
- {
- public:
- typedef ParallelMath::Float MFloat;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::AInt16 MAInt16;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::SInt32 MSInt32;
-
- MFloat m_tv[TVectorSize];
- MFloat m_v[TVectorSize];
- MFloat m_tt;
- MFloat m_t;
- MFloat m_w;
- int m_wu;
-
- float m_rcpMaxIndex;
- float m_channelWeights[TVectorSize];
- float m_rcpChannelWeights[TVectorSize];
-
- void Init(int indexRange, const float channelWeights[TVectorSize])
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- m_tv[ch] = ParallelMath::MakeFloatZero();
- m_v[ch] = ParallelMath::MakeFloatZero();
- }
- m_tt = ParallelMath::MakeFloatZero();
- m_t = ParallelMath::MakeFloatZero();
- m_w = ParallelMath::MakeFloatZero();
-
- m_rcpMaxIndex = 1.0f / static_cast<float>(indexRange - 1);
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- m_channelWeights[ch] = channelWeights[ch];
- m_rcpChannelWeights[ch] = 1.0f;
- if (m_channelWeights[ch] != 0.0f)
- m_rcpChannelWeights[ch] = 1.0f / channelWeights[ch];
- }
-
- m_wu = 0;
- }
-
- void ContributePW(const MFloat *pwFloatPixel, const MUInt15 &index, const MFloat &weight)
- {
- MFloat t = ParallelMath::ToFloat(index) * m_rcpMaxIndex;
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MFloat v = pwFloatPixel[ch] * weight;
-
- m_tv[ch] = m_tv[ch] + t * v;
- m_v[ch] = m_v[ch] + v;
- }
- m_tt = m_tt + weight * t * t;
- m_t = m_t + weight * t;
- m_w = m_w + weight;
- }
-
- void ContributeUnweightedPW(const MFloat *pwFloatPixel, const MUInt15 &index, int numRealChannels)
- {
- MFloat t = ParallelMath::ToFloat(index) * m_rcpMaxIndex;
-
- for (int ch = 0; ch < numRealChannels; ch++)
- {
- MFloat v = pwFloatPixel[ch];
-
- m_tv[ch] = m_tv[ch] + t * v;
- m_v[ch] = m_v[ch] + v;
- }
- m_tt = m_tt + t * t;
- m_t = m_t + t;
- m_wu++;
- }
-
- void ContributeUnweightedPW(const MFloat *floatPixel, const MUInt15 &index)
- {
- ContributeUnweightedPW(floatPixel, index, TVectorSize);
- }
-
- void GetRefinedEndpoints(MFloat endPoint[2][TVectorSize])
- {
- // a = (tv - t*v/w)/(tt - t*t/w)
- // b = (v - a*t)/w
- MFloat w = m_w + ParallelMath::MakeFloat(static_cast<float>(m_wu));
-
- ParallelMath::MakeSafeDenominator(w);
- MFloat wRcp = ParallelMath::Reciprocal(w);
-
- MFloat adenom = (m_tt * w - m_t * m_t) * wRcp;
-
- ParallelMath::FloatCompFlag adenomZero = ParallelMath::Equal(adenom, ParallelMath::MakeFloatZero());
- ParallelMath::ConditionalSet(adenom, adenomZero, ParallelMath::MakeFloat(1.0f));
-
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- /*
- if (adenom == 0.0)
- p1 = p2 = er.v / er.w;
- else
- {
- float4 a = (er.tv - er.t*er.v / er.w) / adenom;
- float4 b = (er.v - a * er.t) / er.w;
- p1 = b;
- p2 = a + b;
- }
- */
-
- MFloat a = (m_tv[ch] - m_t * m_v[ch] * wRcp) / adenom;
- MFloat b = (m_v[ch] - a * m_t) * wRcp;
-
- MFloat p1 = b;
- MFloat p2 = a + b;
-
- ParallelMath::ConditionalSet(p1, adenomZero, (m_v[ch] * wRcp));
- ParallelMath::ConditionalSet(p2, adenomZero, p1);
-
- // Unweight
- float inverseWeight = m_rcpChannelWeights[ch];
-
- endPoint[0][ch] = p1 * inverseWeight;
- endPoint[1][ch] = p2 * inverseWeight;
- }
- }
-
- void GetRefinedEndpointsLDR(MUInt15 endPoint[2][TVectorSize], int numRealChannels, const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- MFloat floatEndPoint[2][TVectorSize];
- GetRefinedEndpoints(floatEndPoint);
-
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < TVectorSize; ch++)
- endPoint[epi][ch] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(floatEndPoint[epi][ch], 0.0f, 255.0f), roundingMode);
- }
-
- void GetRefinedEndpointsLDR(MUInt15 endPoint[2][TVectorSize], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- GetRefinedEndpointsLDR(endPoint, TVectorSize, roundingMode);
- }
-
- void GetRefinedEndpointsHDR(MSInt16 endPoint[2][TVectorSize], bool isSigned, const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- MFloat floatEndPoint[2][TVectorSize];
- GetRefinedEndpoints(floatEndPoint);
-
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- {
- MFloat f = floatEndPoint[epi][ch];
- if (isSigned)
- endPoint[epi][ch] = ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::RoundAndConvertToS16(ParallelMath::Clamp(f, -31743.0f, 31743.0f), roundingMode));
- else
- endPoint[epi][ch] = ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(f, 0.0f, 31743.0f), roundingMode));
- }
- }
- }
- };
-
- template<int TVectorSize>
- class AggregatedError
- {
- public:
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt31 MUInt31;
- typedef ParallelMath::Float MFloat;
-
- AggregatedError()
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- m_errorUnweighted[ch] = ParallelMath::MakeUInt31(0);
- }
-
- void Add(const MUInt16 &channelErrorUnweighted, int ch)
- {
- m_errorUnweighted[ch] = m_errorUnweighted[ch] + ParallelMath::ToUInt31(channelErrorUnweighted);
- }
-
- MFloat Finalize(uint32_t flags, const float channelWeightsSq[TVectorSize]) const
- {
- if (flags & cvtt::Flags::Uniform)
- {
- MUInt31 total = m_errorUnweighted[0];
- for (int ch = 1; ch < TVectorSize; ch++)
- total = total + m_errorUnweighted[ch];
- return ParallelMath::ToFloat(total);
- }
- else
- {
- MFloat total = ParallelMath::ToFloat(m_errorUnweighted[0]) * channelWeightsSq[0];
- for (int ch = 1; ch < TVectorSize; ch++)
- total = total + ParallelMath::ToFloat(m_errorUnweighted[ch]) * channelWeightsSq[ch];
- return total;
- }
- }
-
- private:
- MUInt31 m_errorUnweighted[TVectorSize];
- };
-
- class BCCommon
- {
- public:
- typedef ParallelMath::Float MFloat;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::AInt16 MAInt16;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::SInt32 MSInt32;
-
- static int TweakRoundsForRange(int range)
- {
- if (range == 3)
- return 3;
- return 4;
- }
-
- template<int TVectorSize>
- static void ComputeErrorLDR(uint32_t flags, const MUInt15 reconstructed[TVectorSize], const MUInt15 original[TVectorSize], int numRealChannels, AggregatedError<TVectorSize> &aggError)
- {
- for (int ch = 0; ch < numRealChannels; ch++)
- aggError.Add(ParallelMath::SqDiffUInt8(reconstructed[ch], original[ch]), ch);
- }
-
- template<int TVectorSize>
- static void ComputeErrorLDR(uint32_t flags, const MUInt15 reconstructed[TVectorSize], const MUInt15 original[TVectorSize], AggregatedError<TVectorSize> &aggError)
- {
- ComputeErrorLDR<TVectorSize>(flags, reconstructed, original, TVectorSize, aggError);
- }
-
- template<int TVectorSize>
- static MFloat ComputeErrorLDRSimple(uint32_t flags, const MUInt15 reconstructed[TVectorSize], const MUInt15 original[TVectorSize], int numRealChannels, const float *channelWeightsSq)
- {
- AggregatedError<TVectorSize> aggError;
- ComputeErrorLDR<TVectorSize>(flags, reconstructed, original, numRealChannels, aggError);
- return aggError.Finalize(flags, channelWeightsSq);
- }
-
- template<int TVectorSize>
- static MFloat ComputeErrorHDRFast(uint32_t flags, const MSInt16 reconstructed[TVectorSize], const MSInt16 original[TVectorSize], const float channelWeightsSq[TVectorSize])
- {
- MFloat error = ParallelMath::MakeFloatZero();
- if (flags & Flags::Uniform)
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- error = error + ParallelMath::SqDiffSInt16(reconstructed[ch], original[ch]);
- }
- else
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- error = error + ParallelMath::SqDiffSInt16(reconstructed[ch], original[ch]) * ParallelMath::MakeFloat(channelWeightsSq[ch]);
- }
-
- return error;
- }
-
- template<int TVectorSize>
- static MFloat ComputeErrorHDRSlow(uint32_t flags, const MSInt16 reconstructed[TVectorSize], const MSInt16 original[TVectorSize], const float channelWeightsSq[TVectorSize])
- {
- MFloat error = ParallelMath::MakeFloatZero();
- if (flags & Flags::Uniform)
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- error = error + ParallelMath::SqDiff2CL(reconstructed[ch], original[ch]);
- }
- else
- {
- for (int ch = 0; ch < TVectorSize; ch++)
- error = error + ParallelMath::SqDiff2CL(reconstructed[ch], original[ch]) * ParallelMath::MakeFloat(channelWeightsSq[ch]);
- }
-
- return error;
- }
-
- template<int TChannelCount>
- static void PreWeightPixelsLDR(MFloat preWeightedPixels[16][TChannelCount], const MUInt15 pixels[16][TChannelCount], const float channelWeights[TChannelCount])
- {
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < TChannelCount; ch++)
- preWeightedPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]) * channelWeights[ch];
- }
- }
-
- template<int TChannelCount>
- static void PreWeightPixelsHDR(MFloat preWeightedPixels[16][TChannelCount], const MSInt16 pixels[16][TChannelCount], const float channelWeights[TChannelCount])
- {
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < TChannelCount; ch++)
- preWeightedPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]) * channelWeights[ch];
- }
- }
- };
-
- class BC7Computer
- {
- public:
- static const int MaxTweakRounds = 4;
-
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::SInt32 MSInt32;
- typedef ParallelMath::Float MFloat;
-
- struct WorkInfo
- {
- MUInt15 m_mode;
- MFloat m_error;
- MUInt15 m_ep[3][2][4];
- MUInt15 m_indexes[16];
- MUInt15 m_indexes2[16];
-
- union
- {
- MUInt15 m_partition;
- struct IndexSelectorAndRotation
- {
- MUInt15 m_indexSelector;
- MUInt15 m_rotation;
- } m_isr;
- } m_u;
- };
-
- static void TweakAlpha(const MUInt15 original[2], int tweak, int range, MUInt15 result[2])
- {
- ParallelMath::RoundTowardNearestForScope roundingMode;
-
- float tf[2];
- ComputeTweakFactors(tweak, range, tf);
-
- MFloat base = ParallelMath::ToFloat(original[0]);
- MFloat offs = ParallelMath::ToFloat(original[1]) - base;
-
- result[0] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(base + offs * tf[0], 0.0f, 255.0f), &roundingMode);
- result[1] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(base + offs * tf[1], 0.0f, 255.0f), &roundingMode);
- }
-
- static void Quantize(MUInt15* color, int bits, int channels, const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- float maxColor = static_cast<float>((1 << bits) - 1);
-
- for (int i = 0; i < channels; i++)
- color[i] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(ParallelMath::ToFloat(color[i]) * ParallelMath::MakeFloat(1.0f / 255.0f) * maxColor, 0.f, 255.f), roundingMode);
- }
-
- static void QuantizeP(MUInt15* color, int bits, uint16_t p, int channels, const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- uint16_t pShift = static_cast<uint16_t>(1 << (7 - bits));
- MUInt15 pShiftV = ParallelMath::MakeUInt15(pShift);
-
- float maxColorF = static_cast<float>(255 - (1 << (7 - bits)));
-
- float maxQuantized = static_cast<float>((1 << bits) - 1);
-
- for (int ch = 0; ch < channels; ch++)
- {
- MUInt15 clr = color[ch];
- if (p)
- clr = ParallelMath::Max(clr, pShiftV) - pShiftV;
-
- MFloat rerangedColor = ParallelMath::ToFloat(clr) * maxQuantized / maxColorF;
-
- clr = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(rerangedColor, 0.0f, maxQuantized), roundingMode) << 1;
- if (p)
- clr = clr | ParallelMath::MakeUInt15(1);
-
- color[ch] = clr;
- }
- }
-
- static void Unquantize(MUInt15* color, int bits, int channels)
- {
- for (int ch = 0; ch < channels; ch++)
- {
- MUInt15 clr = color[ch];
- clr = clr << (8 - bits);
- color[ch] = clr | ParallelMath::RightShift(clr, bits);
- }
- }
-
- static void CompressEndpoints0(MUInt15 ep[2][4], uint16_t p[2], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- QuantizeP(ep[j], 4, p[j], 3, roundingMode);
- Unquantize(ep[j], 5, 3);
- ep[j][3] = ParallelMath::MakeUInt15(255);
- }
- }
-
- static void CompressEndpoints1(MUInt15 ep[2][4], uint16_t p, const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- QuantizeP(ep[j], 6, p, 3, roundingMode);
- Unquantize(ep[j], 7, 3);
- ep[j][3] = ParallelMath::MakeUInt15(255);
- }
- }
-
- static void CompressEndpoints2(MUInt15 ep[2][4], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- Quantize(ep[j], 5, 3, roundingMode);
- Unquantize(ep[j], 5, 3);
- ep[j][3] = ParallelMath::MakeUInt15(255);
- }
- }
-
- static void CompressEndpoints3(MUInt15 ep[2][4], uint16_t p[2], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- QuantizeP(ep[j], 7, p[j], 3, roundingMode);
- ep[j][3] = ParallelMath::MakeUInt15(255);
- }
- }
-
- static void CompressEndpoints4(MUInt15 epRGB[2][3], MUInt15 epA[2], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- Quantize(epRGB[j], 5, 3, roundingMode);
- Unquantize(epRGB[j], 5, 3);
-
- Quantize(epA + j, 6, 1, roundingMode);
- Unquantize(epA + j, 6, 1);
- }
- }
-
- static void CompressEndpoints5(MUInt15 epRGB[2][3], MUInt15 epA[2], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- Quantize(epRGB[j], 7, 3, roundingMode);
- Unquantize(epRGB[j], 7, 3);
- }
-
- // Alpha is full precision
- (void)epA;
- }
-
- static void CompressEndpoints6(MUInt15 ep[2][4], uint16_t p[2], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- QuantizeP(ep[j], 7, p[j], 4, roundingMode);
- }
-
- static void CompressEndpoints7(MUInt15 ep[2][4], uint16_t p[2], const ParallelMath::RoundTowardNearestForScope *roundingMode)
- {
- for (int j = 0; j < 2; j++)
- {
- QuantizeP(ep[j], 5, p[j], 4, roundingMode);
- Unquantize(ep[j], 6, 4);
- }
- }
-
- struct SinglePlaneTemporaries
- {
- UnfinishedEndpoints<3> unfinishedRGB[BC7Data::g_numShapesAll];
- UnfinishedEndpoints<4> unfinishedRGBA[BC7Data::g_numShapes12];
-
- MUInt15 fragmentBestIndexes[BC7Data::g_numFragments];
- MUInt15 shapeBestEP[BC7Data::g_maxFragmentsPerMode][2][4];
- MFloat shapeBestError[BC7Data::g_maxFragmentsPerMode];
- };
-
- static void TrySingleColorRGBAMultiTable(uint32_t flags, const MUInt15 pixels[16][4], const MFloat average[4], int numRealChannels, const uint8_t *fragmentStart, int shapeLength, const MFloat &staticAlphaError, const ParallelMath::Int16CompFlag punchThroughInvalid[4], MFloat& shapeBestError, MUInt15 shapeBestEP[2][4], MUInt15 *fragmentBestIndexes, const float *channelWeightsSq, const cvtt::Tables::BC7SC::Table*const* tables, int numTables, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- MFloat bestAverageError = ParallelMath::MakeFloat(FLT_MAX);
-
- MUInt15 intAverage[4];
- for (int ch = 0; ch < 4; ch++)
- intAverage[ch] = ParallelMath::RoundAndConvertToU15(average[ch], rtn);
-
- MUInt15 eps[2][4];
- MUInt15 reconstructed[4];
- MUInt15 index = ParallelMath::MakeUInt15(0);
-
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- eps[epi][ch] = ParallelMath::MakeUInt15(0);
- eps[epi][3] = ParallelMath::MakeUInt15(255);
- }
-
- for (int ch = 0; ch < 3; ch++)
- reconstructed[ch] = ParallelMath::MakeUInt15(0);
- reconstructed[3] = ParallelMath::MakeUInt15(255);
-
- // Depending on the target index and parity bits, there are multiple valid solid colors.
- // We want to find the one closest to the actual average.
- MFloat epsAverageDiff = ParallelMath::MakeFloat(FLT_MAX);
- for (int t = 0; t < numTables; t++)
- {
- const cvtt::Tables::BC7SC::Table& table = *(tables[t]);
-
- ParallelMath::Int16CompFlag pti = punchThroughInvalid[table.m_pBits];
-
- MUInt15 candidateReconstructed[4];
- MUInt15 candidateEPs[2][4];
-
- for (int i = 0; i < ParallelMath::ParallelSize; i++)
- {
- for (int ch = 0; ch < numRealChannels; ch++)
- {
- ParallelMath::ScalarUInt16 avgValue = ParallelMath::Extract(intAverage[ch], i);
- assert(avgValue >= 0 && avgValue <= 255);
-
- const cvtt::Tables::BC7SC::TableEntry &entry = table.m_entries[avgValue];
-
- ParallelMath::PutUInt15(candidateEPs[0][ch], i, entry.m_min);
- ParallelMath::PutUInt15(candidateEPs[1][ch], i, entry.m_max);
- ParallelMath::PutUInt15(candidateReconstructed[ch], i, entry.m_actualColor);
- }
- }
-
- MFloat avgError = ParallelMath::MakeFloatZero();
- for (int ch = 0; ch < numRealChannels; ch++)
- {
- MFloat delta = ParallelMath::ToFloat(candidateReconstructed[ch]) - average[ch];
- avgError = avgError + delta * delta * channelWeightsSq[ch];
- }
-
- ParallelMath::Int16CompFlag better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(avgError, bestAverageError));
- better = ParallelMath::AndNot(pti, better); // Mask out punch-through invalidations
-
- if (ParallelMath::AnySet(better))
- {
- ParallelMath::ConditionalSet(bestAverageError, ParallelMath::Int16FlagToFloat(better), avgError);
-
- MUInt15 candidateIndex = ParallelMath::MakeUInt15(table.m_index);
-
- ParallelMath::ConditionalSet(index, better, candidateIndex);
-
- for (int ch = 0; ch < numRealChannels; ch++)
- ParallelMath::ConditionalSet(reconstructed[ch], better, candidateReconstructed[ch]);
-
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < numRealChannels; ch++)
- ParallelMath::ConditionalSet(eps[epi][ch], better, candidateEPs[epi][ch]);
- }
- }
-
- AggregatedError<4> aggError;
- for (int pxi = 0; pxi < shapeLength; pxi++)
- {
- int px = fragmentStart[pxi];
-
- BCCommon::ComputeErrorLDR<4>(flags, reconstructed, pixels[px], numRealChannels, aggError);
- }
-
- MFloat error = aggError.Finalize(flags, channelWeightsSq) + staticAlphaError;
-
- ParallelMath::Int16CompFlag better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, shapeBestError));
- if (ParallelMath::AnySet(better))
- {
- shapeBestError = ParallelMath::Min(shapeBestError, error);
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < numRealChannels; ch++)
- ParallelMath::ConditionalSet(shapeBestEP[epi][ch], better, eps[epi][ch]);
- }
-
- for (int pxi = 0; pxi < shapeLength; pxi++)
- ParallelMath::ConditionalSet(fragmentBestIndexes[pxi], better, index);
- }
- }
-
-
- static void TrySinglePlane(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const float channelWeights[4], int numTweakRounds, int numRefineRounds, WorkInfo& work, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- if (numRefineRounds < 1)
- numRefineRounds = 1;
-
- if (numTweakRounds < 1)
- numTweakRounds = 1;
- else if (numTweakRounds > MaxTweakRounds)
- numTweakRounds = MaxTweakRounds;
-
- float channelWeightsSq[4];
-
- for (int ch = 0; ch < 4; ch++)
- channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
-
- SinglePlaneTemporaries temps;
-
- MUInt15 maxAlpha = ParallelMath::MakeUInt15(0);
- MUInt15 minAlpha = ParallelMath::MakeUInt15(255);
- ParallelMath::Int16CompFlag isPunchThrough = ParallelMath::MakeBoolInt16(true);
- for (int px = 0; px < 16; px++)
- {
- MUInt15 a = pixels[px][3];
- maxAlpha = ParallelMath::Max(maxAlpha, a);
- minAlpha = ParallelMath::Min(minAlpha, a);
-
- isPunchThrough = (isPunchThrough & (ParallelMath::Equal(a, ParallelMath::MakeUInt15(0)) | ParallelMath::Equal(a, ParallelMath::MakeUInt15(255))));
- }
-
- ParallelMath::Int16CompFlag blockHasNonMaxAlpha = ParallelMath::Less(minAlpha, ParallelMath::MakeUInt15(255));
- ParallelMath::Int16CompFlag blockHasNonZeroAlpha = ParallelMath::Less(ParallelMath::MakeUInt15(0), maxAlpha);
-
- bool anyBlockHasAlpha = ParallelMath::AnySet(blockHasNonMaxAlpha);
-
- // Try RGB modes if any block has a min alpha 251 or higher
- bool allowRGBModes = ParallelMath::AnySet(ParallelMath::Less(ParallelMath::MakeUInt15(250), minAlpha));
-
- // Try mode 7 if any block has alpha.
- // Mode 7 is almost never selected for RGB blocks because mode 4 has very accurate 7.7.7.1 endpoints
- // and its parity bit doesn't affect alpha, meaning mode 7 can only be better in extremely specific
- // situations, and only by at most 1 unit of error per pixel.
- bool allowMode7 = anyBlockHasAlpha;
-
- MFloat preWeightedPixels[16][4];
-
- BCCommon::PreWeightPixelsLDR<4>(preWeightedPixels, pixels, channelWeights);
-
- const int *rgbInitialEPCollapseList = NULL;
-
- // Get initial RGB endpoints
- if (allowRGBModes)
- {
- const int *shapeList;
- int numShapesToEvaluate;
-
- if (flags & Flags::BC7_EnablePartitioning)
- {
- if (flags & Flags::BC7_Enable3Subsets)
- {
- shapeList = BC7Data::g_shapeListAll;
- rgbInitialEPCollapseList = BC7Data::g_shapeListAll;
- numShapesToEvaluate = BC7Data::g_numShapesAll;
- }
- else
- {
- shapeList = BC7Data::g_shapeList12;
- rgbInitialEPCollapseList = BC7Data::g_shapeList12Collapse;
- numShapesToEvaluate = BC7Data::g_numShapes12;
- }
- }
- else
- {
- shapeList = BC7Data::g_shapeList1;
- rgbInitialEPCollapseList = BC7Data::g_shapeList1Collapse;
- numShapesToEvaluate = BC7Data::g_numShapes1;
- }
-
- for (int shapeIter = 0; shapeIter < numShapesToEvaluate; shapeIter++)
- {
- int shape = shapeList[shapeIter];
-
- int shapeStart = BC7Data::g_shapeRanges[shape][0];
- int shapeSize = BC7Data::g_shapeRanges[shape][1];
-
- EndpointSelector<3, 8> epSelector;
-
- for (int epPass = 0; epPass < NumEndpointSelectorPasses; epPass++)
- {
- for (int spx = 0; spx < shapeSize; spx++)
- {
- int px = BC7Data::g_fragments[shapeStart + spx];
- epSelector.ContributePass(preWeightedPixels[px], epPass, ParallelMath::MakeFloat(1.0f));
- }
- epSelector.FinishPass(epPass);
- }
- temps.unfinishedRGB[shapeIter] = epSelector.GetEndpoints(channelWeights);
- }
- }
-
- const int *rgbaInitialEPCollapseList = BC7Data::g_shapeList12Collapse;
-
- // Get initial RGBA endpoints
- {
- const int *shapeList = BC7Data::g_shapeList12;
- int numShapesToEvaluate = BC7Data::g_numShapes12;
-
- for (int shapeIter = 0; shapeIter < numShapesToEvaluate; shapeIter++)
- {
- int shape = shapeList[shapeIter];
-
- if (anyBlockHasAlpha || !allowRGBModes)
- {
- int shapeStart = BC7Data::g_shapeRanges[shape][0];
- int shapeSize = BC7Data::g_shapeRanges[shape][1];
-
- EndpointSelector<4, 8> epSelector;
-
- for (int epPass = 0; epPass < NumEndpointSelectorPasses; epPass++)
- {
- for (int spx = 0; spx < shapeSize; spx++)
- {
- int px = BC7Data::g_fragments[shapeStart + spx];
- epSelector.ContributePass(preWeightedPixels[px], epPass, ParallelMath::MakeFloat(1.0f));
- }
- epSelector.FinishPass(epPass);
- }
- temps.unfinishedRGBA[shapeIter] = epSelector.GetEndpoints(channelWeights);
- }
- else
- {
- temps.unfinishedRGBA[shapeIter] = temps.unfinishedRGB[rgbInitialEPCollapseList[shape]].ExpandTo<4>(255);
- }
- }
- }
-
- for (uint16_t mode = 0; mode <= 7; mode++)
- {
- if (!(flags & Flags::BC7_EnablePartitioning) && BC7Data::g_modes[mode].m_numSubsets != 1)
- continue;
-
- if (!(flags & Flags::BC7_Enable3Subsets) && BC7Data::g_modes[mode].m_numSubsets == 3)
- continue;
-
- if (mode == 4 || mode == 5)
- continue;
-
- if (mode < 4 && !allowRGBModes)
- continue;
-
- if (mode == 7 && !allowMode7)
- continue;
-
- bool isRGB = (mode < 4);
-
- unsigned int numPartitions = 1 << BC7Data::g_modes[mode].m_partitionBits;
- int numSubsets = BC7Data::g_modes[mode].m_numSubsets;
- int indexPrec = BC7Data::g_modes[mode].m_indexBits;
-
- int parityBitMax = 1;
- if (BC7Data::g_modes[mode].m_pBitMode == BC7Data::PBitMode_PerEndpoint)
- parityBitMax = 4;
- else if (BC7Data::g_modes[mode].m_pBitMode == BC7Data::PBitMode_PerSubset)
- parityBitMax = 2;
-
- int numRealChannels = isRGB ? 3 : 4;
-
- int numShapes;
- const int *shapeList;
- const int *shapeCollapseList;
-
- if (numSubsets == 1)
- {
- numShapes = BC7Data::g_numShapes1;
- shapeList = BC7Data::g_shapeList1;
- shapeCollapseList = BC7Data::g_shapeList1Collapse;
- }
- else if (numSubsets == 2)
- {
- numShapes = BC7Data::g_numShapes2;
- shapeList = BC7Data::g_shapeList2;
- shapeCollapseList = BC7Data::g_shapeList2Collapse;
- }
- else
- {
- assert(numSubsets == 3);
- if (numPartitions == 16)
- {
- numShapes = BC7Data::g_numShapes3Short;
- shapeList = BC7Data::g_shapeList3Short;
- shapeCollapseList = BC7Data::g_shapeList3ShortCollapse;
- }
- else
- {
- assert(numPartitions == 64);
- numShapes = BC7Data::g_numShapes3;
- shapeList = BC7Data::g_shapeList3;
- shapeCollapseList = BC7Data::g_shapeList3Collapse;
- }
- }
-
- for (int slot = 0; slot < BC7Data::g_maxFragmentsPerMode; slot++)
- temps.shapeBestError[slot] = ParallelMath::MakeFloat(FLT_MAX);
-
- for (int shapeIter = 0; shapeIter < numShapes; shapeIter++)
- {
- int shape = shapeList[shapeIter];
- int shapeStart = BC7Data::g_shapeRanges[shape][0];
- int shapeLength = BC7Data::g_shapeRanges[shape][1];
- int shapeCollapsedEvalIndex = shapeCollapseList[shape];
-
- AggregatedError<1> alphaAggError;
- if (isRGB && anyBlockHasAlpha)
- {
- MUInt15 filledAlpha[1] = { ParallelMath::MakeUInt15(255) };
-
- for (int pxi = 0; pxi < shapeLength; pxi++)
- {
- int px = BC7Data::g_fragments[shapeStart + pxi];
- MUInt15 original[1] = { pixels[px][3] };
- BCCommon::ComputeErrorLDR<1>(flags, filledAlpha, original, alphaAggError);
- }
- }
-
- float alphaWeightsSq[1] = { channelWeightsSq[3] };
- MFloat staticAlphaError = alphaAggError.Finalize(flags, alphaWeightsSq);
-
- assert(shapeCollapsedEvalIndex >= 0);
-
- MUInt15 tweakBaseEP[MaxTweakRounds][2][4];
-
- for (int tweak = 0; tweak < numTweakRounds; tweak++)
- {
- if (isRGB)
- {
- temps.unfinishedRGB[rgbInitialEPCollapseList[shape]].FinishLDR(tweak, 1 << indexPrec, tweakBaseEP[tweak][0], tweakBaseEP[tweak][1]);
- tweakBaseEP[tweak][0][3] = tweakBaseEP[tweak][1][3] = ParallelMath::MakeUInt15(255);
- }
- else
- {
- temps.unfinishedRGBA[rgbaInitialEPCollapseList[shape]].FinishLDR(tweak, 1 << indexPrec, tweakBaseEP[tweak][0], tweakBaseEP[tweak][1]);
- }
- }
-
- ParallelMath::Int16CompFlag punchThroughInvalid[4];
- for (int pIter = 0; pIter < parityBitMax; pIter++)
- {
- punchThroughInvalid[pIter] = ParallelMath::MakeBoolInt16(false);
-
- if ((flags & Flags::BC7_RespectPunchThrough) && (mode == 6 || mode == 7))
- {
- // Modes 6 and 7 have parity bits that affect alpha
- if (pIter == 0)
- punchThroughInvalid[pIter] = (isPunchThrough & blockHasNonZeroAlpha);
- else if (pIter == parityBitMax - 1)
- punchThroughInvalid[pIter] = (isPunchThrough & blockHasNonMaxAlpha);
- else
- punchThroughInvalid[pIter] = isPunchThrough;
- }
- }
-
- for (int pIter = 0; pIter < parityBitMax; pIter++)
- {
- if (ParallelMath::AllSet(punchThroughInvalid[pIter]))
- continue;
-
- bool needPunchThroughCheck = ParallelMath::AnySet(punchThroughInvalid[pIter]);
-
- for (int tweak = 0; tweak < numTweakRounds; tweak++)
- {
- uint16_t p[2];
- p[0] = (pIter & 1);
- p[1] = ((pIter >> 1) & 1);
-
- MUInt15 ep[2][4];
-
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < 4; ch++)
- ep[epi][ch] = tweakBaseEP[tweak][epi][ch];
-
- for (int refine = 0; refine < numRefineRounds; refine++)
- {
- switch (mode)
- {
- case 0:
- CompressEndpoints0(ep, p, rtn);
- break;
- case 1:
- CompressEndpoints1(ep, p[0], rtn);
- break;
- case 2:
- CompressEndpoints2(ep, rtn);
- break;
- case 3:
- CompressEndpoints3(ep, p, rtn);
- break;
- case 6:
- CompressEndpoints6(ep, p, rtn);
- break;
- case 7:
- CompressEndpoints7(ep, p, rtn);
- break;
- default:
- assert(false);
- break;
- };
-
- MFloat shapeError = ParallelMath::MakeFloatZero();
-
- IndexSelector<4> indexSelector;
- indexSelector.Init<false>(channelWeights, ep, 1 << indexPrec);
-
- EndpointRefiner<4> epRefiner;
- epRefiner.Init(1 << indexPrec, channelWeights);
-
- MUInt15 indexes[16];
-
- AggregatedError<4> aggError;
- for (int pxi = 0; pxi < shapeLength; pxi++)
- {
- int px = BC7Data::g_fragments[shapeStart + pxi];
-
- MUInt15 index;
- MUInt15 reconstructed[4];
-
- index = indexSelector.SelectIndexLDR(floatPixels[px], rtn);
- indexSelector.ReconstructLDR_BC7(index, reconstructed, numRealChannels);
-
- if (flags & cvtt::Flags::BC7_FastIndexing)
- BCCommon::ComputeErrorLDR<4>(flags, reconstructed, pixels[px], numRealChannels, aggError);
- else
- {
- MFloat error = BCCommon::ComputeErrorLDRSimple<4>(flags, reconstructed, pixels[px], numRealChannels, channelWeightsSq);
-
- MUInt15 altIndexes[2];
- altIndexes[0] = ParallelMath::Max(index, ParallelMath::MakeUInt15(1)) - ParallelMath::MakeUInt15(1);
- altIndexes[1] = ParallelMath::Min(index + ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << indexPrec) - 1)));
-
- for (int ii = 0; ii < 2; ii++)
- {
- indexSelector.ReconstructLDR_BC7(altIndexes[ii], reconstructed, numRealChannels);
-
- MFloat altError = BCCommon::ComputeErrorLDRSimple<4>(flags, reconstructed, pixels[px], numRealChannels, channelWeightsSq);
- ParallelMath::Int16CompFlag better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(altError, error));
- error = ParallelMath::Min(error, altError);
- ParallelMath::ConditionalSet(index, better, altIndexes[ii]);
- }
-
- shapeError = shapeError + error;
- }
-
- if (refine != numRefineRounds - 1)
- epRefiner.ContributeUnweightedPW(preWeightedPixels[px], index, numRealChannels);
-
- indexes[pxi] = index;
- }
-
- if (flags & cvtt::Flags::BC7_FastIndexing)
- shapeError = aggError.Finalize(flags, channelWeightsSq);
-
- if (isRGB)
- shapeError = shapeError + staticAlphaError;
-
- ParallelMath::FloatCompFlag shapeErrorBetter;
- ParallelMath::Int16CompFlag shapeErrorBetter16;
-
- shapeErrorBetter = ParallelMath::Less(shapeError, temps.shapeBestError[shapeCollapsedEvalIndex]);
- shapeErrorBetter16 = ParallelMath::FloatFlagToInt16(shapeErrorBetter);
-
- if (ParallelMath::AnySet(shapeErrorBetter16))
- {
- bool punchThroughOK = true;
- if (needPunchThroughCheck)
- {
- shapeErrorBetter16 = ParallelMath::AndNot(punchThroughInvalid[pIter], shapeErrorBetter16);
- shapeErrorBetter = ParallelMath::Int16FlagToFloat(shapeErrorBetter16);
-
- if (!ParallelMath::AnySet(shapeErrorBetter16))
- punchThroughOK = false;
- }
-
- if (punchThroughOK)
- {
- ParallelMath::ConditionalSet(temps.shapeBestError[shapeCollapsedEvalIndex], shapeErrorBetter, shapeError);
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < numRealChannels; ch++)
- ParallelMath::ConditionalSet(temps.shapeBestEP[shapeCollapsedEvalIndex][epi][ch], shapeErrorBetter16, ep[epi][ch]);
-
- for (int pxi = 0; pxi < shapeLength; pxi++)
- ParallelMath::ConditionalSet(temps.fragmentBestIndexes[shapeStart + pxi], shapeErrorBetter16, indexes[pxi]);
- }
- }
-
- if (refine != numRefineRounds - 1)
- epRefiner.GetRefinedEndpointsLDR(ep, numRealChannels, rtn);
- } // refine
- } // tweak
- } // p
-
- if (flags & cvtt::Flags::BC7_TrySingleColor)
- {
- MUInt15 total[4];
- for (int ch = 0; ch < 4; ch++)
- total[ch] = ParallelMath::MakeUInt15(0);
-
- for (int pxi = 0; pxi < shapeLength; pxi++)
- {
- int px = BC7Data::g_fragments[shapeStart + pxi];
- for (int ch = 0; ch < 4; ch++)
- total[ch] = total[ch] + pixels[pxi][ch];
- }
-
- MFloat rcpShapeLength = ParallelMath::MakeFloat(1.0f / static_cast<float>(shapeLength));
- MFloat average[4];
- for (int ch = 0; ch < 4; ch++)
- average[ch] = ParallelMath::ToFloat(total[ch]) * rcpShapeLength;
-
- const uint8_t *fragment = BC7Data::g_fragments + shapeStart;
- MFloat &shapeBestError = temps.shapeBestError[shapeCollapsedEvalIndex];
- MUInt15(&shapeBestEP)[2][4] = temps.shapeBestEP[shapeCollapsedEvalIndex];
- MUInt15 *fragmentBestIndexes = temps.fragmentBestIndexes + shapeStart;
-
- const cvtt::Tables::BC7SC::Table **scTables = NULL;
- int numSCTables = 0;
-
- switch (mode)
- {
- case 0:
- {
- const cvtt::Tables::BC7SC::Table *tables[] =
- {
- &cvtt::Tables::BC7SC::g_mode0_p00_i1,
- &cvtt::Tables::BC7SC::g_mode0_p00_i2,
- &cvtt::Tables::BC7SC::g_mode0_p00_i3,
- &cvtt::Tables::BC7SC::g_mode0_p01_i1,
- &cvtt::Tables::BC7SC::g_mode0_p01_i2,
- &cvtt::Tables::BC7SC::g_mode0_p01_i3,
- &cvtt::Tables::BC7SC::g_mode0_p10_i1,
- &cvtt::Tables::BC7SC::g_mode0_p10_i2,
- &cvtt::Tables::BC7SC::g_mode0_p10_i3,
- &cvtt::Tables::BC7SC::g_mode0_p11_i1,
- &cvtt::Tables::BC7SC::g_mode0_p11_i2,
- &cvtt::Tables::BC7SC::g_mode0_p11_i3,
- };
- scTables = tables;
- numSCTables = sizeof(tables) / sizeof(tables[0]);
- }
- break;
- case 1:
- {
- const cvtt::Tables::BC7SC::Table *tables[] =
- {
- &cvtt::Tables::BC7SC::g_mode1_p0_i1,
- &cvtt::Tables::BC7SC::g_mode1_p0_i2,
- &cvtt::Tables::BC7SC::g_mode1_p0_i3,
- &cvtt::Tables::BC7SC::g_mode1_p1_i1,
- &cvtt::Tables::BC7SC::g_mode1_p1_i2,
- &cvtt::Tables::BC7SC::g_mode1_p1_i3,
- };
- scTables = tables;
- numSCTables = sizeof(tables) / sizeof(tables[0]);
- }
- break;
- case 2:
- {
- const cvtt::Tables::BC7SC::Table *tables[] =
- {
- &cvtt::Tables::BC7SC::g_mode2,
- };
- scTables = tables;
- numSCTables = sizeof(tables) / sizeof(tables[0]);
- }
- break;
- case 3:
- {
- const cvtt::Tables::BC7SC::Table *tables[] =
- {
- &cvtt::Tables::BC7SC::g_mode3_p0,
- &cvtt::Tables::BC7SC::g_mode3_p1,
- };
- scTables = tables;
- numSCTables = sizeof(tables) / sizeof(tables[0]);
- }
- break;
- case 6:
- {
- const cvtt::Tables::BC7SC::Table *tables[] =
- {
- &cvtt::Tables::BC7SC::g_mode6_p0_i1,
- &cvtt::Tables::BC7SC::g_mode6_p0_i2,
- &cvtt::Tables::BC7SC::g_mode6_p0_i3,
- &cvtt::Tables::BC7SC::g_mode6_p0_i4,
- &cvtt::Tables::BC7SC::g_mode6_p0_i5,
- &cvtt::Tables::BC7SC::g_mode6_p0_i6,
- &cvtt::Tables::BC7SC::g_mode6_p0_i7,
- &cvtt::Tables::BC7SC::g_mode6_p1_i1,
- &cvtt::Tables::BC7SC::g_mode6_p1_i2,
- &cvtt::Tables::BC7SC::g_mode6_p1_i3,
- &cvtt::Tables::BC7SC::g_mode6_p1_i4,
- &cvtt::Tables::BC7SC::g_mode6_p1_i5,
- &cvtt::Tables::BC7SC::g_mode6_p1_i6,
- &cvtt::Tables::BC7SC::g_mode6_p1_i7,
- };
- scTables = tables;
- numSCTables = sizeof(tables) / sizeof(tables[0]);
- }
- break;
- case 7:
- {
- const cvtt::Tables::BC7SC::Table *tables[] =
- {
- &cvtt::Tables::BC7SC::g_mode7_p00,
- &cvtt::Tables::BC7SC::g_mode7_p01,
- &cvtt::Tables::BC7SC::g_mode7_p10,
- &cvtt::Tables::BC7SC::g_mode7_p11,
- };
- scTables = tables;
- numSCTables = sizeof(tables) / sizeof(tables[0]);
- }
- break;
- default:
- assert(false);
- break;
- }
-
- TrySingleColorRGBAMultiTable(flags, pixels, average, numRealChannels, fragment, shapeLength, staticAlphaError, punchThroughInvalid, shapeBestError, shapeBestEP, fragmentBestIndexes, channelWeightsSq, scTables, numSCTables, rtn);
- }
- } // shapeIter
-
- for (uint16_t partition = 0; partition < numPartitions; partition++)
- {
- const int *partitionShapes;
- if (numSubsets == 1)
- partitionShapes = BC7Data::g_shapes1[partition];
- else if (numSubsets == 2)
- partitionShapes = BC7Data::g_shapes2[partition];
- else
- {
- assert(numSubsets == 3);
- partitionShapes = BC7Data::g_shapes3[partition];
- }
-
- MFloat totalError = ParallelMath::MakeFloatZero();
- for (int subset = 0; subset < numSubsets; subset++)
- totalError = totalError + temps.shapeBestError[shapeCollapseList[partitionShapes[subset]]];
-
- ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(totalError, work.m_error);
- ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
-
- if (ParallelMath::AnySet(errorBetter16))
- {
- for (int subset = 0; subset < numSubsets; subset++)
- {
- int shape = partitionShapes[subset];
- int shapeStart = BC7Data::g_shapeRanges[shape][0];
- int shapeLength = BC7Data::g_shapeRanges[shape][1];
- int shapeCollapsedEvalIndex = shapeCollapseList[shape];
-
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < 4; ch++)
- ParallelMath::ConditionalSet(work.m_ep[subset][epi][ch], errorBetter16, temps.shapeBestEP[shapeCollapsedEvalIndex][epi][ch]);
-
- for (int pxi = 0; pxi < shapeLength; pxi++)
- {
- int px = BC7Data::g_fragments[shapeStart + pxi];
- ParallelMath::ConditionalSet(work.m_indexes[px], errorBetter16, temps.fragmentBestIndexes[shapeStart + pxi]);
- }
- }
-
- work.m_error = ParallelMath::Min(totalError, work.m_error);
- ParallelMath::ConditionalSet(work.m_mode, errorBetter16, ParallelMath::MakeUInt15(mode));
- ParallelMath::ConditionalSet(work.m_u.m_partition, errorBetter16, ParallelMath::MakeUInt15(partition));
- }
- }
- }
- }
-
- static void TryDualPlane(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const float channelWeights[4], int numTweakRounds, int numRefineRounds, WorkInfo& work, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- // TODO: These error calculations are not optimal for weight-by-alpha, but this routine needs to be mostly rewritten for that.
- // The alpha/color solutions are co-dependent in that case, but a good way to solve it would probably be to
- // solve the alpha channel first, then solve the RGB channels, which in turn breaks down into two cases:
- // - Separate alpha channel, then weighted RGB
- // - Alpha+2 other channels, then the independent channel
-
- if (!(flags & Flags::BC7_EnableDualPlane))
- return;
-
- if (numRefineRounds < 1)
- numRefineRounds = 1;
-
- if (numTweakRounds < 1)
- numTweakRounds = 1;
- else if (numTweakRounds > MaxTweakRounds)
- numTweakRounds = MaxTweakRounds;
-
- float channelWeightsSq[4];
- for (int ch = 0; ch < 4; ch++)
- channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
-
- for (uint16_t mode = 4; mode <= 5; mode++)
- {
- for (uint16_t rotation = 0; rotation < 4; rotation++)
- {
- int alphaChannel = (rotation + 3) & 3;
- int redChannel = (rotation == 1) ? 3 : 0;
- int greenChannel = (rotation == 2) ? 3 : 1;
- int blueChannel = (rotation == 3) ? 3 : 2;
-
- MUInt15 rotatedRGB[16][3];
- MFloat floatRotatedRGB[16][3];
-
- for (int px = 0; px < 16; px++)
- {
- rotatedRGB[px][0] = pixels[px][redChannel];
- rotatedRGB[px][1] = pixels[px][greenChannel];
- rotatedRGB[px][2] = pixels[px][blueChannel];
-
- for (int ch = 0; ch < 3; ch++)
- floatRotatedRGB[px][ch] = ParallelMath::ToFloat(rotatedRGB[px][ch]);
- }
-
- uint16_t maxIndexSelector = (mode == 4) ? 2 : 1;
-
- float rotatedRGBWeights[3] = { channelWeights[redChannel], channelWeights[greenChannel], channelWeights[blueChannel] };
- float rotatedRGBWeightsSq[3] = { channelWeightsSq[redChannel], channelWeightsSq[greenChannel], channelWeightsSq[blueChannel] };
- float rotatedAlphaWeight[1] = { channelWeights[alphaChannel] };
- float rotatedAlphaWeightSq[1] = { channelWeightsSq[alphaChannel] };
-
- float uniformWeight[1] = { 1.0f }; // Since the alpha channel is independent, there's no need to bother with weights when doing refinement or selection, only error
-
- MFloat preWeightedRotatedRGB[16][3];
- BCCommon::PreWeightPixelsLDR<3>(preWeightedRotatedRGB, rotatedRGB, rotatedRGBWeights);
-
- for (uint16_t indexSelector = 0; indexSelector < maxIndexSelector; indexSelector++)
- {
- EndpointSelector<3, 8> rgbSelector;
-
- for (int epPass = 0; epPass < NumEndpointSelectorPasses; epPass++)
- {
- for (int px = 0; px < 16; px++)
- rgbSelector.ContributePass(preWeightedRotatedRGB[px], epPass, ParallelMath::MakeFloat(1.0f));
-
- rgbSelector.FinishPass(epPass);
- }
-
- MUInt15 alphaRange[2];
-
- alphaRange[0] = alphaRange[1] = pixels[0][alphaChannel];
- for (int px = 1; px < 16; px++)
- {
- alphaRange[0] = ParallelMath::Min(pixels[px][alphaChannel], alphaRange[0]);
- alphaRange[1] = ParallelMath::Max(pixels[px][alphaChannel], alphaRange[1]);
- }
-
- int rgbPrec = 0;
- int alphaPrec = 0;
-
- if (mode == 4)
- {
- rgbPrec = indexSelector ? 3 : 2;
- alphaPrec = indexSelector ? 2 : 3;
- }
- else
- rgbPrec = alphaPrec = 2;
-
- UnfinishedEndpoints<3> unfinishedRGB = rgbSelector.GetEndpoints(rotatedRGBWeights);
-
- MFloat bestRGBError = ParallelMath::MakeFloat(FLT_MAX);
- MFloat bestAlphaError = ParallelMath::MakeFloat(FLT_MAX);
-
- MUInt15 bestRGBIndexes[16];
- MUInt15 bestAlphaIndexes[16];
- MUInt15 bestEP[2][4];
-
- for (int px = 0; px < 16; px++)
- bestRGBIndexes[px] = bestAlphaIndexes[px] = ParallelMath::MakeUInt15(0);
-
- for (int tweak = 0; tweak < numTweakRounds; tweak++)
- {
- MUInt15 rgbEP[2][3];
- MUInt15 alphaEP[2];
-
- unfinishedRGB.FinishLDR(tweak, 1 << rgbPrec, rgbEP[0], rgbEP[1]);
-
- TweakAlpha(alphaRange, tweak, 1 << alphaPrec, alphaEP);
-
- for (int refine = 0; refine < numRefineRounds; refine++)
- {
- if (mode == 4)
- CompressEndpoints4(rgbEP, alphaEP, rtn);
- else
- CompressEndpoints5(rgbEP, alphaEP, rtn);
-
-
- IndexSelector<1> alphaIndexSelector;
- IndexSelector<3> rgbIndexSelector;
-
- {
- MUInt15 alphaEPTemp[2][1] = { { alphaEP[0] },{ alphaEP[1] } };
- alphaIndexSelector.Init<false>(uniformWeight, alphaEPTemp, 1 << alphaPrec);
- }
- rgbIndexSelector.Init<false>(rotatedRGBWeights, rgbEP, 1 << rgbPrec);
-
- EndpointRefiner<3> rgbRefiner;
- EndpointRefiner<1> alphaRefiner;
-
- rgbRefiner.Init(1 << rgbPrec, rotatedRGBWeights);
- alphaRefiner.Init(1 << alphaPrec, uniformWeight);
-
- MFloat errorRGB = ParallelMath::MakeFloatZero();
- MFloat errorA = ParallelMath::MakeFloatZero();
-
- MUInt15 rgbIndexes[16];
- MUInt15 alphaIndexes[16];
-
- AggregatedError<3> rgbAggError;
- AggregatedError<1> alphaAggError;
-
- for (int px = 0; px < 16; px++)
- {
- MUInt15 rgbIndex = rgbIndexSelector.SelectIndexLDR(floatRotatedRGB[px], rtn);
- MUInt15 alphaIndex = alphaIndexSelector.SelectIndexLDR(floatPixels[px] + alphaChannel, rtn);
-
- MUInt15 reconstructedRGB[3];
- MUInt15 reconstructedAlpha[1];
-
- rgbIndexSelector.ReconstructLDR_BC7(rgbIndex, reconstructedRGB);
- alphaIndexSelector.ReconstructLDR_BC7(alphaIndex, reconstructedAlpha);
-
- if (flags & cvtt::Flags::BC7_FastIndexing)
- {
- BCCommon::ComputeErrorLDR<3>(flags, reconstructedRGB, rotatedRGB[px], rgbAggError);
- BCCommon::ComputeErrorLDR<1>(flags, reconstructedAlpha, pixels[px] + alphaChannel, alphaAggError);
- }
- else
- {
- AggregatedError<3> baseRGBAggError;
- AggregatedError<1> baseAlphaAggError;
-
- BCCommon::ComputeErrorLDR<3>(flags, reconstructedRGB, rotatedRGB[px], baseRGBAggError);
- BCCommon::ComputeErrorLDR<1>(flags, reconstructedAlpha, pixels[px] + alphaChannel, baseAlphaAggError);
-
- MFloat rgbError = baseRGBAggError.Finalize(flags, rotatedRGBWeightsSq);
- MFloat alphaError = baseAlphaAggError.Finalize(flags, rotatedAlphaWeightSq);
-
- MUInt15 altRGBIndexes[2];
- MUInt15 altAlphaIndexes[2];
-
- altRGBIndexes[0] = ParallelMath::Max(rgbIndex, ParallelMath::MakeUInt15(1)) - ParallelMath::MakeUInt15(1);
- altRGBIndexes[1] = ParallelMath::Min(rgbIndex + ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << rgbPrec) - 1)));
-
- altAlphaIndexes[0] = ParallelMath::Max(alphaIndex, ParallelMath::MakeUInt15(1)) - ParallelMath::MakeUInt15(1);
- altAlphaIndexes[1] = ParallelMath::Min(alphaIndex + ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << alphaPrec) - 1)));
-
- for (int ii = 0; ii < 2; ii++)
- {
- rgbIndexSelector.ReconstructLDR_BC7(altRGBIndexes[ii], reconstructedRGB);
- alphaIndexSelector.ReconstructLDR_BC7(altAlphaIndexes[ii], reconstructedAlpha);
-
- AggregatedError<3> altRGBAggError;
- AggregatedError<1> altAlphaAggError;
-
- BCCommon::ComputeErrorLDR<3>(flags, reconstructedRGB, rotatedRGB[px], altRGBAggError);
- BCCommon::ComputeErrorLDR<1>(flags, reconstructedAlpha, pixels[px] + alphaChannel, altAlphaAggError);
-
- MFloat altRGBError = altRGBAggError.Finalize(flags, rotatedRGBWeightsSq);
- MFloat altAlphaError = altAlphaAggError.Finalize(flags, rotatedAlphaWeightSq);
-
- ParallelMath::Int16CompFlag rgbBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(altRGBError, rgbError));
- ParallelMath::Int16CompFlag alphaBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(altAlphaError, alphaError));
-
- rgbError = ParallelMath::Min(altRGBError, rgbError);
- alphaError = ParallelMath::Min(altAlphaError, alphaError);
-
- ParallelMath::ConditionalSet(rgbIndex, rgbBetter, altRGBIndexes[ii]);
- ParallelMath::ConditionalSet(alphaIndex, alphaBetter, altAlphaIndexes[ii]);
- }
-
- errorRGB = errorRGB + rgbError;
- errorA = errorA + alphaError;
- }
-
- if (refine != numRefineRounds - 1)
- {
- rgbRefiner.ContributeUnweightedPW(preWeightedRotatedRGB[px], rgbIndex);
- alphaRefiner.ContributeUnweightedPW(floatPixels[px] + alphaChannel, alphaIndex);
- }
-
- if (flags & Flags::BC7_FastIndexing)
- {
- errorRGB = rgbAggError.Finalize(flags, rotatedRGBWeightsSq);
- errorA = rgbAggError.Finalize(flags, rotatedAlphaWeightSq);
- }
-
- rgbIndexes[px] = rgbIndex;
- alphaIndexes[px] = alphaIndex;
- }
-
- ParallelMath::FloatCompFlag rgbBetter = ParallelMath::Less(errorRGB, bestRGBError);
- ParallelMath::FloatCompFlag alphaBetter = ParallelMath::Less(errorA, bestAlphaError);
-
- ParallelMath::Int16CompFlag rgbBetterInt16 = ParallelMath::FloatFlagToInt16(rgbBetter);
- ParallelMath::Int16CompFlag alphaBetterInt16 = ParallelMath::FloatFlagToInt16(alphaBetter);
-
- if (ParallelMath::AnySet(rgbBetterInt16))
- {
- bestRGBError = ParallelMath::Min(errorRGB, bestRGBError);
-
- for (int px = 0; px < 16; px++)
- ParallelMath::ConditionalSet(bestRGBIndexes[px], rgbBetterInt16, rgbIndexes[px]);
-
- for (int ep = 0; ep < 2; ep++)
- {
- for (int ch = 0; ch < 3; ch++)
- ParallelMath::ConditionalSet(bestEP[ep][ch], rgbBetterInt16, rgbEP[ep][ch]);
- }
- }
-
- if (ParallelMath::AnySet(alphaBetterInt16))
- {
- bestAlphaError = ParallelMath::Min(errorA, bestAlphaError);
-
- for (int px = 0; px < 16; px++)
- ParallelMath::ConditionalSet(bestAlphaIndexes[px], alphaBetterInt16, alphaIndexes[px]);
-
- for (int ep = 0; ep < 2; ep++)
- ParallelMath::ConditionalSet(bestEP[ep][3], alphaBetterInt16, alphaEP[ep]);
- }
-
- if (refine != numRefineRounds - 1)
- {
- rgbRefiner.GetRefinedEndpointsLDR(rgbEP, rtn);
-
- MUInt15 alphaEPTemp[2][1];
- alphaRefiner.GetRefinedEndpointsLDR(alphaEPTemp, rtn);
-
- for (int i = 0; i < 2; i++)
- alphaEP[i] = alphaEPTemp[i][0];
- }
- } // refine
- } // tweak
-
- MFloat combinedError = bestRGBError + bestAlphaError;
-
- ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(combinedError, work.m_error);
- ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
-
- work.m_error = ParallelMath::Min(combinedError, work.m_error);
-
- ParallelMath::ConditionalSet(work.m_mode, errorBetter16, ParallelMath::MakeUInt15(mode));
- ParallelMath::ConditionalSet(work.m_u.m_isr.m_rotation, errorBetter16, ParallelMath::MakeUInt15(rotation));
- ParallelMath::ConditionalSet(work.m_u.m_isr.m_indexSelector, errorBetter16, ParallelMath::MakeUInt15(indexSelector));
-
- for (int px = 0; px < 16; px++)
- {
- ParallelMath::ConditionalSet(work.m_indexes[px], errorBetter16, indexSelector ? bestAlphaIndexes[px] : bestRGBIndexes[px]);
- ParallelMath::ConditionalSet(work.m_indexes2[px], errorBetter16, indexSelector ? bestRGBIndexes[px] : bestAlphaIndexes[px]);
- }
-
- for (int ep = 0; ep < 2; ep++)
- for (int ch = 0; ch < 4; ch++)
- ParallelMath::ConditionalSet(work.m_ep[0][ep][ch], errorBetter16, bestEP[ep][ch]);
- }
- }
- }
- }
-
- template<class T>
- static void Swap(T& a, T& b)
- {
- T temp = a;
- a = b;
- b = temp;
- }
-
- static void Pack(uint32_t flags, const PixelBlockU8* inputs, uint8_t* packedBlocks, const float channelWeights[4], int numTweakRounds, int numRefineRounds)
- {
- MUInt15 pixels[16][4];
- MFloat floatPixels[16][4];
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 4; ch++)
- ParallelMath::ConvertLDRInputs(inputs, px, ch, pixels[px][ch]);
- }
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 4; ch++)
- floatPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]);
- }
-
- WorkInfo work;
- memset(&work, 0, sizeof(work));
-
- work.m_error = ParallelMath::MakeFloat(FLT_MAX);
-
- {
- ParallelMath::RoundTowardNearestForScope rtn;
- TrySinglePlane(flags, pixels, floatPixels, channelWeights, numTweakRounds, numRefineRounds, work, &rtn);
- TryDualPlane(flags, pixels, floatPixels, channelWeights, numTweakRounds, numRefineRounds, work, &rtn);
- }
-
- for (int block = 0; block < ParallelMath::ParallelSize; block++)
- {
- PackingVector pv;
- pv.Init();
-
- ParallelMath::ScalarUInt16 mode = ParallelMath::Extract(work.m_mode, block);
- ParallelMath::ScalarUInt16 partition = ParallelMath::Extract(work.m_u.m_partition, block);
- ParallelMath::ScalarUInt16 indexSelector = ParallelMath::Extract(work.m_u.m_isr.m_indexSelector, block);
-
- const BC7Data::BC7ModeInfo& modeInfo = BC7Data::g_modes[mode];
-
- ParallelMath::ScalarUInt16 indexes[16];
- ParallelMath::ScalarUInt16 indexes2[16];
- ParallelMath::ScalarUInt16 endPoints[3][2][4];
-
- for (int i = 0; i < 16; i++)
- {
- indexes[i] = ParallelMath::Extract(work.m_indexes[i], block);
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- indexes2[i] = ParallelMath::Extract(work.m_indexes2[i], block);
- }
-
- for (int subset = 0; subset < 3; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- {
- for (int ch = 0; ch < 4; ch++)
- endPoints[subset][ep][ch] = ParallelMath::Extract(work.m_ep[subset][ep][ch], block);
- }
- }
-
- int fixups[3] = { 0, 0, 0 };
-
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- {
- bool flipRGB = ((indexes[0] & (1 << (modeInfo.m_indexBits - 1))) != 0);
- bool flipAlpha = ((indexes2[0] & (1 << (modeInfo.m_alphaIndexBits - 1))) != 0);
-
- if (flipRGB)
- {
- uint16_t highIndex = (1 << modeInfo.m_indexBits) - 1;
- for (int px = 0; px < 16; px++)
- indexes[px] = highIndex - indexes[px];
- }
-
- if (flipAlpha)
- {
- uint16_t highIndex = (1 << modeInfo.m_alphaIndexBits) - 1;
- for (int px = 0; px < 16; px++)
- indexes2[px] = highIndex - indexes2[px];
- }
-
- if (indexSelector)
- Swap(flipRGB, flipAlpha);
-
- if (flipRGB)
- {
- for (int ch = 0; ch < 3; ch++)
- Swap(endPoints[0][0][ch], endPoints[0][1][ch]);
- }
- if (flipAlpha)
- Swap(endPoints[0][0][3], endPoints[0][1][3]);
-
- }
- else
- {
- if (modeInfo.m_numSubsets == 2)
- fixups[1] = BC7Data::g_fixupIndexes2[partition];
- else if (modeInfo.m_numSubsets == 3)
- {
- fixups[1] = BC7Data::g_fixupIndexes3[partition][0];
- fixups[2] = BC7Data::g_fixupIndexes3[partition][1];
- }
-
- bool flip[3] = { false, false, false };
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- flip[subset] = ((indexes[fixups[subset]] & (1 << (modeInfo.m_indexBits - 1))) != 0);
-
- if (flip[0] || flip[1] || flip[2])
- {
- uint16_t highIndex = (1 << modeInfo.m_indexBits) - 1;
- for (int px = 0; px < 16; px++)
- {
- int subset = 0;
- if (modeInfo.m_numSubsets == 2)
- subset = (BC7Data::g_partitionMap[partition] >> px) & 1;
- else if (modeInfo.m_numSubsets == 3)
- subset = (BC7Data::g_partitionMap2[partition] >> (px * 2)) & 3;
-
- if (flip[subset])
- indexes[px] = highIndex - indexes[px];
- }
-
- int maxCH = (modeInfo.m_alphaMode == BC7Data::AlphaMode_Combined) ? 4 : 3;
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- if (flip[subset])
- for (int ch = 0; ch < maxCH; ch++)
- Swap(endPoints[subset][0][ch], endPoints[subset][1][ch]);
- }
- }
- }
-
- pv.Pack(static_cast<uint8_t>(1 << mode), mode + 1);
-
- if (modeInfo.m_partitionBits)
- pv.Pack(partition, modeInfo.m_partitionBits);
-
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- {
- ParallelMath::ScalarUInt16 rotation = ParallelMath::Extract(work.m_u.m_isr.m_rotation, block);
- pv.Pack(rotation, 2);
- }
-
- if (modeInfo.m_hasIndexSelector)
- pv.Pack(indexSelector, 1);
-
- // Encode RGB
- for (int ch = 0; ch < 3; ch++)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- {
- ParallelMath::ScalarUInt16 epPart = endPoints[subset][ep][ch];
- epPart >>= (8 - modeInfo.m_rgbBits);
-
- pv.Pack(epPart, modeInfo.m_rgbBits);
- }
- }
- }
-
- // Encode alpha
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- {
- ParallelMath::ScalarUInt16 epPart = endPoints[subset][ep][3];
- epPart >>= (8 - modeInfo.m_alphaBits);
-
- pv.Pack(epPart, modeInfo.m_alphaBits);
- }
- }
- }
-
- // Encode parity bits
- if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerSubset)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- ParallelMath::ScalarUInt16 epPart = endPoints[subset][0][0];
- epPart >>= (7 - modeInfo.m_rgbBits);
- epPart &= 1;
-
- pv.Pack(epPart, 1);
- }
- }
- else if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerEndpoint)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- {
- ParallelMath::ScalarUInt16 epPart = endPoints[subset][ep][0];
- epPart >>= (7 - modeInfo.m_rgbBits);
- epPart &= 1;
-
- pv.Pack(epPart, 1);
- }
- }
- }
-
- // Encode indexes
- for (int px = 0; px < 16; px++)
- {
- int bits = modeInfo.m_indexBits;
- if ((px == 0) || (px == fixups[1]) || (px == fixups[2]))
- bits--;
-
- pv.Pack(indexes[px], bits);
- }
-
- // Encode secondary indexes
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- {
- for (int px = 0; px < 16; px++)
- {
- int bits = modeInfo.m_alphaIndexBits;
- if (px == 0)
- bits--;
-
- pv.Pack(indexes2[px], bits);
- }
- }
-
- pv.Flush(packedBlocks);
-
- packedBlocks += 16;
- }
- }
-
- static void UnpackOne(PixelBlockU8 &output, const uint8_t* packedBlock)
- {
- UnpackingVector pv;
- pv.Init(packedBlock);
-
- int mode = 8;
- for (int i = 0; i < 8; i++)
- {
- if (pv.Unpack(1) == 1)
- {
- mode = i;
- break;
- }
- }
-
- if (mode > 7)
- {
- for (int px = 0; px < 16; px++)
- for (int ch = 0; ch < 4; ch++)
- output.m_pixels[px][ch] = 0;
-
- return;
- }
-
- const BC7Data::BC7ModeInfo &modeInfo = BC7Data::g_modes[mode];
-
- int partition = 0;
- if (modeInfo.m_partitionBits)
- partition = pv.Unpack(modeInfo.m_partitionBits);
-
- int rotation = 0;
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- rotation = pv.Unpack(2);
-
- int indexSelector = 0;
- if (modeInfo.m_hasIndexSelector)
- indexSelector = pv.Unpack(1);
-
- // Resolve fixups
- int fixups[3] = { 0, 0, 0 };
-
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_Separate)
- {
- if (modeInfo.m_numSubsets == 2)
- fixups[1] = BC7Data::g_fixupIndexes2[partition];
- else if (modeInfo.m_numSubsets == 3)
- {
- fixups[1] = BC7Data::g_fixupIndexes3[partition][0];
- fixups[2] = BC7Data::g_fixupIndexes3[partition][1];
- }
- }
-
- int endPoints[3][2][4];
-
- // Decode RGB
- for (int ch = 0; ch < 3; ch++)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- endPoints[subset][ep][ch] = (pv.Unpack(modeInfo.m_rgbBits) << (8 - modeInfo.m_rgbBits));
- }
- }
-
- // Decode alpha
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- endPoints[subset][ep][3] = (pv.Unpack(modeInfo.m_alphaBits) << (8 - modeInfo.m_alphaBits));
- }
- }
- else
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- endPoints[subset][ep][3] = 255;
- }
- }
-
- int parityBits = 0;
-
- // Decode parity bits
- if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerSubset)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- int p = pv.Unpack(1);
-
- for (int ep = 0; ep < 2; ep++)
- {
- for (int ch = 0; ch < 3; ch++)
- endPoints[subset][ep][ch] |= p << (7 - modeInfo.m_rgbBits);
-
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
- endPoints[subset][ep][3] |= p << (7 - modeInfo.m_alphaBits);
- }
- }
-
- parityBits = 1;
- }
- else if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerEndpoint)
- {
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- {
- int p = pv.Unpack(1);
-
- for (int ch = 0; ch < 3; ch++)
- endPoints[subset][ep][ch] |= p << (7 - modeInfo.m_rgbBits);
-
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
- endPoints[subset][ep][3] |= p << (7 - modeInfo.m_alphaBits);
- }
- }
-
- parityBits = 1;
- }
-
- // Fill endpoint bits
- for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
- {
- for (int ep = 0; ep < 2; ep++)
- {
- for (int ch = 0; ch < 3; ch++)
- endPoints[subset][ep][ch] |= (endPoints[subset][ep][ch] >> (modeInfo.m_rgbBits + parityBits));
-
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
- endPoints[subset][ep][3] |= (endPoints[subset][ep][3] >> (modeInfo.m_alphaBits + parityBits));
- }
- }
-
- int indexes[16];
- int indexes2[16];
-
- // Decode indexes
- for (int px = 0; px < 16; px++)
- {
- int bits = modeInfo.m_indexBits;
- if ((px == 0) || (px == fixups[1]) || (px == fixups[2]))
- bits--;
-
- indexes[px] = pv.Unpack(bits);
- }
-
- // Decode secondary indexes
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- {
- for (int px = 0; px < 16; px++)
- {
- int bits = modeInfo.m_alphaIndexBits;
- if (px == 0)
- bits--;
-
- indexes2[px] = pv.Unpack(bits);
- }
- }
- else
- {
- for (int px = 0; px < 16; px++)
- indexes2[px] = 0;
- }
-
- const int *alphaWeights = BC7Data::g_weightTables[modeInfo.m_alphaIndexBits];
- const int *rgbWeights = BC7Data::g_weightTables[modeInfo.m_indexBits];
-
- // Decode each pixel
- for (int px = 0; px < 16; px++)
- {
- int rgbWeight = 0;
- int alphaWeight = 0;
-
- int rgbIndex = indexes[px];
-
- rgbWeight = rgbWeights[indexes[px]];
-
- if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Combined)
- alphaWeight = rgbWeight;
- else if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
- alphaWeight = alphaWeights[indexes2[px]];
-
- if (indexSelector == 1)
- {
- int temp = rgbWeight;
- rgbWeight = alphaWeight;
- alphaWeight = temp;
- }
-
- int pixel[4] = { 0, 0, 0, 255 };
-
- int subset = 0;
-
- if (modeInfo.m_numSubsets == 2)
- subset = (BC7Data::g_partitionMap[partition] >> px) & 1;
- else if (modeInfo.m_numSubsets == 3)
- subset = (BC7Data::g_partitionMap2[partition] >> (px * 2)) & 3;
-
- for (int ch = 0; ch < 3; ch++)
- pixel[ch] = ((64 - rgbWeight) * endPoints[subset][0][ch] + rgbWeight * endPoints[subset][1][ch] + 32) >> 6;
-
- if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
- pixel[3] = ((64 - alphaWeight) * endPoints[subset][0][3] + alphaWeight * endPoints[subset][1][3] + 32) >> 6;
-
- if (rotation != 0)
- {
- int ch = rotation - 1;
- int temp = pixel[ch];
- pixel[ch] = pixel[3];
- pixel[3] = temp;
- }
-
- for (int ch = 0; ch < 4; ch++)
- output.m_pixels[px][ch] = static_cast<uint8_t>(pixel[ch]);
- }
- }
- };
-
- class BC6HComputer
- {
- public:
- typedef ParallelMath::Float MFloat;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::AInt16 MAInt16;
- typedef ParallelMath::SInt32 MSInt32;
- typedef ParallelMath::UInt31 MUInt31;
-
- static const int MaxTweakRounds = 4;
- static const int MaxRefineRounds = 3;
-
- static MSInt16 QuantizeSingleEndpointElementSigned(const MSInt16 &elem2CL, int precision, const ParallelMath::RoundUpForScope* ru)
- {
- assert(ParallelMath::AllSet(ParallelMath::Less(elem2CL, ParallelMath::MakeSInt16(31744))));
- assert(ParallelMath::AllSet(ParallelMath::Less(ParallelMath::MakeSInt16(-31744), elem2CL)));
-
- // Expand to full range
- ParallelMath::Int16CompFlag isNegative = ParallelMath::Less(elem2CL, ParallelMath::MakeSInt16(0));
- MUInt15 absElem = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Select(isNegative, ParallelMath::MakeSInt16(0) - elem2CL, elem2CL));
-
- absElem = ParallelMath::RightShift(ParallelMath::RoundAndConvertToU15(ParallelMath::ToFloat(absElem) * 32.0f / 31.0f, ru), 16 - precision);
-
- MSInt16 absElemS16 = ParallelMath::LosslessCast<MSInt16>::Cast(absElem);
-
- return ParallelMath::Select(isNegative, ParallelMath::MakeSInt16(0) - absElemS16, absElemS16);
- }
-
- static MUInt15 QuantizeSingleEndpointElementUnsigned(const MUInt15 &elem, int precision, const ParallelMath::RoundUpForScope* ru)
- {
- MUInt16 expandedElem = ParallelMath::RoundAndConvertToU16(ParallelMath::Min(ParallelMath::ToFloat(elem) * 64.0f / 31.0f, ParallelMath::MakeFloat(65535.0f)), ru);
- return ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(expandedElem, 16 - precision));
- }
-
- static void UnquantizeSingleEndpointElementSigned(const MSInt16 &comp, int precision, MSInt16 &outUnquantized, MSInt16 &outUnquantizedFinished2CL)
- {
- MSInt16 zero = ParallelMath::MakeSInt16(0);
-
- ParallelMath::Int16CompFlag negative = ParallelMath::Less(comp, zero);
- MUInt15 absComp = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Select(negative, MSInt16(zero - comp), comp));
-
- MSInt16 unq;
- MUInt15 absUnq;
-
- if (precision >= 16)
- {
- unq = comp;
- absUnq = absComp;
- }
- else
- {
- MSInt16 maxCompMinusOne = ParallelMath::MakeSInt16(static_cast<int16_t>((1 << (precision - 1)) - 2));
- ParallelMath::Int16CompFlag isZero = ParallelMath::Equal(comp, zero);
- ParallelMath::Int16CompFlag isMax = ParallelMath::Less(maxCompMinusOne, comp);
-
- absUnq = (absComp << (16 - precision)) + ParallelMath::MakeUInt15(static_cast<uint16_t>(0x4000 >> (precision - 1)));
- ParallelMath::ConditionalSet(absUnq, isZero, ParallelMath::MakeUInt15(0));
- ParallelMath::ConditionalSet(absUnq, isMax, ParallelMath::MakeUInt15(0x7fff));
-
- unq = ParallelMath::ConditionalNegate(negative, ParallelMath::LosslessCast<MSInt16>::Cast(absUnq));
- }
-
- outUnquantized = unq;
-
- MUInt15 funq = ParallelMath::ToUInt15(ParallelMath::RightShift(ParallelMath::XMultiply(absUnq, ParallelMath::MakeUInt15(31)), 5));
-
- outUnquantizedFinished2CL = ParallelMath::ConditionalNegate(negative, ParallelMath::LosslessCast<MSInt16>::Cast(funq));
- }
-
- static void UnquantizeSingleEndpointElementUnsigned(const MUInt15 &comp, int precision, MUInt16 &outUnquantized, MUInt16 &outUnquantizedFinished)
- {
- MUInt16 unq = ParallelMath::LosslessCast<MUInt16>::Cast(comp);
- if (precision < 15)
- {
- MUInt15 zero = ParallelMath::MakeUInt15(0);
- MUInt15 maxCompMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << precision) - 2));
-
- ParallelMath::Int16CompFlag isZero = ParallelMath::Equal(comp, zero);
- ParallelMath::Int16CompFlag isMax = ParallelMath::Less(maxCompMinusOne, comp);
-
- unq = (ParallelMath::LosslessCast<MUInt16>::Cast(comp) << (16 - precision)) + ParallelMath::MakeUInt16(static_cast<uint16_t>(0x8000 >> precision));
-
- ParallelMath::ConditionalSet(unq, isZero, ParallelMath::MakeUInt16(0));
- ParallelMath::ConditionalSet(unq, isMax, ParallelMath::MakeUInt16(0xffff));
- }
-
- outUnquantized = unq;
- outUnquantizedFinished = ParallelMath::ToUInt16(ParallelMath::RightShift(ParallelMath::XMultiply(unq, ParallelMath::MakeUInt15(31)), 6));
- }
-
- static void QuantizeEndpointsSigned(const MSInt16 endPoints[2][3], const MFloat floatPixelsColorSpace[16][3], const MFloat floatPixelsLinearWeighted[16][3], MAInt16 quantizedEndPoints[2][3], MUInt15 indexes[16], IndexSelectorHDR<3> &indexSelector, int fixupIndex, int precision, int indexRange, const float *channelWeights, bool fastIndexing, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- MSInt16 unquantizedEP[2][3];
- MSInt16 finishedUnquantizedEP[2][3];
-
- {
- ParallelMath::RoundUpForScope ru;
-
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- MSInt16 qee = QuantizeSingleEndpointElementSigned(endPoints[epi][ch], precision, &ru);
- UnquantizeSingleEndpointElementSigned(qee, precision, unquantizedEP[epi][ch], finishedUnquantizedEP[epi][ch]);
- quantizedEndPoints[epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(qee);
- }
- }
- }
-
- indexSelector.Init(channelWeights, unquantizedEP, finishedUnquantizedEP, indexRange);
- indexSelector.InitHDR(indexRange, true, fastIndexing, channelWeights);
-
- MUInt15 halfRangeMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange / 2) - 1);
-
- MUInt15 index = fastIndexing ? indexSelector.SelectIndexHDRFast(floatPixelsColorSpace[fixupIndex], rtn) : indexSelector.SelectIndexHDRSlow(floatPixelsLinearWeighted[fixupIndex], rtn);
-
- ParallelMath::Int16CompFlag invert = ParallelMath::Less(halfRangeMinusOne, index);
-
- if (ParallelMath::AnySet(invert))
- {
- ParallelMath::ConditionalSet(index, invert, MUInt15(ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange - 1)) - index));
-
- indexSelector.ConditionalInvert(invert);
-
- for (int ch = 0; ch < 3; ch++)
- {
- MAInt16 firstEP = quantizedEndPoints[0][ch];
- MAInt16 secondEP = quantizedEndPoints[1][ch];
-
- quantizedEndPoints[0][ch] = ParallelMath::Select(invert, secondEP, firstEP);
- quantizedEndPoints[1][ch] = ParallelMath::Select(invert, firstEP, secondEP);
- }
- }
-
- indexes[fixupIndex] = index;
- }
-
- static void QuantizeEndpointsUnsigned(const MSInt16 endPoints[2][3], const MFloat floatPixelsColorSpace[16][3], const MFloat floatPixelsLinearWeighted[16][3], MAInt16 quantizedEndPoints[2][3], MUInt15 indexes[16], IndexSelectorHDR<3> &indexSelector, int fixupIndex, int precision, int indexRange, const float *channelWeights, bool fastIndexing, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- MUInt16 unquantizedEP[2][3];
- MUInt16 finishedUnquantizedEP[2][3];
-
- {
- ParallelMath::RoundUpForScope ru;
-
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- MUInt15 qee = QuantizeSingleEndpointElementUnsigned(ParallelMath::LosslessCast<MUInt15>::Cast(endPoints[epi][ch]), precision, &ru);
- UnquantizeSingleEndpointElementUnsigned(qee, precision, unquantizedEP[epi][ch], finishedUnquantizedEP[epi][ch]);
- quantizedEndPoints[epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(qee);
- }
- }
- }
-
- indexSelector.Init(channelWeights, unquantizedEP, finishedUnquantizedEP, indexRange);
- indexSelector.InitHDR(indexRange, false, fastIndexing, channelWeights);
-
- MUInt15 halfRangeMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange / 2) - 1);
-
- MUInt15 index = fastIndexing ? indexSelector.SelectIndexHDRFast(floatPixelsColorSpace[fixupIndex], rtn) : indexSelector.SelectIndexHDRSlow(floatPixelsLinearWeighted[fixupIndex], rtn);
-
- ParallelMath::Int16CompFlag invert = ParallelMath::Less(halfRangeMinusOne, index);
-
- if (ParallelMath::AnySet(invert))
- {
- ParallelMath::ConditionalSet(index, invert, MUInt15(ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange - 1)) - index));
-
- indexSelector.ConditionalInvert(invert);
-
- for (int ch = 0; ch < 3; ch++)
- {
- MAInt16 firstEP = quantizedEndPoints[0][ch];
- MAInt16 secondEP = quantizedEndPoints[1][ch];
-
- quantizedEndPoints[0][ch] = ParallelMath::Select(invert, secondEP, firstEP);
- quantizedEndPoints[1][ch] = ParallelMath::Select(invert, firstEP, secondEP);
- }
- }
-
- indexes[fixupIndex] = index;
- }
-
- static void EvaluatePartitionedLegality(const MAInt16 ep0[2][3], const MAInt16 ep1[2][3], int aPrec, const int bPrec[3], bool isTransformed, MAInt16 outEncodedEPs[2][2][3], ParallelMath::Int16CompFlag& outIsLegal)
- {
- ParallelMath::Int16CompFlag allLegal = ParallelMath::MakeBoolInt16(true);
-
- MAInt16 aSignificantMask = ParallelMath::MakeAInt16(static_cast<int16_t>((1 << aPrec) - 1));
-
- for (int ch = 0; ch < 3; ch++)
- {
- outEncodedEPs[0][0][ch] = ep0[0][ch];
- outEncodedEPs[0][1][ch] = ep0[1][ch];
- outEncodedEPs[1][0][ch] = ep1[0][ch];
- outEncodedEPs[1][1][ch] = ep1[1][ch];
-
- if (isTransformed)
- {
- for (int subset = 0; subset < 2; subset++)
- {
- for (int epi = 0; epi < 2; epi++)
- {
- if (epi == 0 && subset == 0)
- continue;
-
- MAInt16 bReduced = (outEncodedEPs[subset][epi][ch] & aSignificantMask);
-
- MSInt16 delta = ParallelMath::TruncateToPrecisionSigned(ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::AbstractSubtract(outEncodedEPs[subset][epi][ch], outEncodedEPs[0][0][ch])), bPrec[ch]);
-
- outEncodedEPs[subset][epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(delta);
-
- MAInt16 reconstructed = (ParallelMath::AbstractAdd(outEncodedEPs[subset][epi][ch], outEncodedEPs[0][0][ch]) & aSignificantMask);
- allLegal = allLegal & ParallelMath::Equal(reconstructed, bReduced);
- }
- }
- }
-
- if (!ParallelMath::AnySet(allLegal))
- break;
- }
-
- outIsLegal = allLegal;
- }
-
- static void EvaluateSingleLegality(const MAInt16 ep[2][3], int aPrec, const int bPrec[3], bool isTransformed, MAInt16 outEncodedEPs[2][3], ParallelMath::Int16CompFlag& outIsLegal)
- {
- ParallelMath::Int16CompFlag allLegal = ParallelMath::MakeBoolInt16(true);
-
- MAInt16 aSignificantMask = ParallelMath::MakeAInt16(static_cast<int16_t>((1 << aPrec) - 1));
-
- for (int ch = 0; ch < 3; ch++)
- {
- outEncodedEPs[0][ch] = ep[0][ch];
- outEncodedEPs[1][ch] = ep[1][ch];
-
- if (isTransformed)
- {
- MAInt16 bReduced = (outEncodedEPs[1][ch] & aSignificantMask);
-
- MSInt16 delta = ParallelMath::TruncateToPrecisionSigned(ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::AbstractSubtract(outEncodedEPs[1][ch], outEncodedEPs[0][ch])), bPrec[ch]);
-
- outEncodedEPs[1][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(delta);
-
- MAInt16 reconstructed = (ParallelMath::AbstractAdd(outEncodedEPs[1][ch], outEncodedEPs[0][ch]) & aSignificantMask);
- allLegal = allLegal & ParallelMath::Equal(reconstructed, bReduced);
- }
- }
-
- outIsLegal = allLegal;
- }
-
- static void Pack(uint32_t flags, const PixelBlockF16* inputs, uint8_t* packedBlocks, const float channelWeights[4], bool isSigned, int numTweakRounds, int numRefineRounds)
- {
- if (numTweakRounds < 1)
- numTweakRounds = 1;
- else if (numTweakRounds > MaxTweakRounds)
- numTweakRounds = MaxTweakRounds;
-
- if (numRefineRounds < 1)
- numRefineRounds = 1;
- else if (numRefineRounds > MaxRefineRounds)
- numRefineRounds = MaxRefineRounds;
-
- bool fastIndexing = ((flags & cvtt::Flags::BC6H_FastIndexing) != 0);
- float channelWeightsSq[3];
-
- ParallelMath::RoundTowardNearestForScope rtn;
-
- MSInt16 pixels[16][3];
- MFloat floatPixels2CL[16][3];
- MFloat floatPixelsLinearWeighted[16][3];
-
- MSInt16 low15Bits = ParallelMath::MakeSInt16(32767);
-
- for (int ch = 0; ch < 3; ch++)
- channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- MSInt16 pixelValue;
- ParallelMath::ConvertHDRInputs(inputs, px, ch, pixelValue);
-
- // Convert from sign+magnitude to 2CL
- if (isSigned)
- {
- ParallelMath::Int16CompFlag negative = ParallelMath::Less(pixelValue, ParallelMath::MakeSInt16(0));
- MSInt16 magnitude = (pixelValue & low15Bits);
- ParallelMath::ConditionalSet(pixelValue, negative, ParallelMath::MakeSInt16(0) - magnitude);
- pixelValue = ParallelMath::Max(pixelValue, ParallelMath::MakeSInt16(-31743));
- }
- else
- pixelValue = ParallelMath::Max(pixelValue, ParallelMath::MakeSInt16(0));
-
- pixelValue = ParallelMath::Min(pixelValue, ParallelMath::MakeSInt16(31743));
-
- pixels[px][ch] = pixelValue;
- floatPixels2CL[px][ch] = ParallelMath::ToFloat(pixelValue);
- floatPixelsLinearWeighted[px][ch] = ParallelMath::TwosCLHalfToFloat(pixelValue) * channelWeights[ch];
- }
- }
-
- MFloat preWeightedPixels[16][3];
-
- BCCommon::PreWeightPixelsHDR<3>(preWeightedPixels, pixels, channelWeights);
-
- MAInt16 bestEndPoints[2][2][3];
- MUInt15 bestIndexes[16];
- MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
- MUInt15 bestMode = ParallelMath::MakeUInt15(0);
- MUInt15 bestPartition = ParallelMath::MakeUInt15(0);
-
- for (int px = 0; px < 16; px++)
- bestIndexes[px] = ParallelMath::MakeUInt15(0);
-
- for (int subset = 0; subset < 2; subset++)
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < 3; ch++)
- bestEndPoints[subset][epi][ch] = ParallelMath::MakeAInt16(0);
-
- UnfinishedEndpoints<3> partitionedUFEP[32][2];
- UnfinishedEndpoints<3> singleUFEP;
-
- // Generate UFEP for partitions
- for (int p = 0; p < 32; p++)
- {
- int partitionMask = BC7Data::g_partitionMap[p];
-
- EndpointSelector<3, 8> epSelectors[2];
-
- for (int pass = 0; pass < NumEndpointSelectorPasses; pass++)
- {
- for (int px = 0; px < 16; px++)
- {
- int subset = (partitionMask >> px) & 1;
- epSelectors[subset].ContributePass(preWeightedPixels[px], pass, ParallelMath::MakeFloat(1.0f));
- }
-
- for (int subset = 0; subset < 2; subset++)
- epSelectors[subset].FinishPass(pass);
- }
-
- for (int subset = 0; subset < 2; subset++)
- partitionedUFEP[p][subset] = epSelectors[subset].GetEndpoints(channelWeights);
- }
-
- // Generate UFEP for single
- {
- EndpointSelector<3, 8> epSelector;
-
- for (int pass = 0; pass < NumEndpointSelectorPasses; pass++)
- {
- for (int px = 0; px < 16; px++)
- epSelector.ContributePass(preWeightedPixels[px], pass, ParallelMath::MakeFloat(1.0f));
-
- epSelector.FinishPass(pass);
- }
-
- singleUFEP = epSelector.GetEndpoints(channelWeights);
- }
-
- for (int partitionedInt = 0; partitionedInt < 2; partitionedInt++)
- {
- bool partitioned = (partitionedInt == 1);
-
- for (int aPrec = BC7Data::g_maxHDRPrecision; aPrec >= 0; aPrec--)
- {
- if (!BC7Data::g_hdrModesExistForPrecision[partitionedInt][aPrec])
- continue;
-
- int numPartitions = partitioned ? 32 : 1;
- int numSubsets = partitioned ? 2 : 1;
- int indexBits = partitioned ? 3 : 4;
- int indexRange = (1 << indexBits);
-
- for (int p = 0; p < numPartitions; p++)
- {
- int partitionMask = partitioned ? BC7Data::g_partitionMap[p] : 0;
-
- const int MaxMetaRounds = MaxTweakRounds * MaxRefineRounds;
-
- MAInt16 metaEndPointsQuantized[MaxMetaRounds][2][2][3];
- MUInt15 metaIndexes[MaxMetaRounds][16];
- MFloat metaError[MaxMetaRounds][2];
-
- bool roundValid[MaxMetaRounds][2];
-
- for (int r = 0; r < MaxMetaRounds; r++)
- for (int subset = 0; subset < 2; subset++)
- roundValid[r][subset] = true;
-
- for (int subset = 0; subset < numSubsets; subset++)
- {
- for (int tweak = 0; tweak < MaxTweakRounds; tweak++)
- {
- EndpointRefiner<3> refiners[2];
-
- bool abortRemainingRefines = false;
- for (int refinePass = 0; refinePass < MaxRefineRounds; refinePass++)
- {
- int metaRound = tweak * MaxRefineRounds + refinePass;
-
- if (tweak >= numTweakRounds || refinePass >= numRefineRounds)
- abortRemainingRefines = true;
-
- if (abortRemainingRefines)
- {
- roundValid[metaRound][subset] = false;
- continue;
- }
-
- MAInt16(&mrQuantizedEndPoints)[2][2][3] = metaEndPointsQuantized[metaRound];
- MUInt15(&mrIndexes)[16] = metaIndexes[metaRound];
-
- MSInt16 endPointsColorSpace[2][3];
-
- if (refinePass == 0)
- {
- UnfinishedEndpoints<3> ufep = partitioned ? partitionedUFEP[p][subset] : singleUFEP;
-
- if (isSigned)
- ufep.FinishHDRSigned(tweak, indexRange, endPointsColorSpace[0], endPointsColorSpace[1], &rtn);
- else
- ufep.FinishHDRUnsigned(tweak, indexRange, endPointsColorSpace[0], endPointsColorSpace[1], &rtn);
- }
- else
- refiners[subset].GetRefinedEndpointsHDR(endPointsColorSpace, isSigned, &rtn);
-
- refiners[subset].Init(indexRange, channelWeights);
-
- int fixupIndex = (subset == 0) ? 0 : BC7Data::g_fixupIndexes2[p];
-
- IndexSelectorHDR<3> indexSelector;
- if (isSigned)
- QuantizeEndpointsSigned(endPointsColorSpace, floatPixels2CL, floatPixelsLinearWeighted, mrQuantizedEndPoints[subset], mrIndexes, indexSelector, fixupIndex, aPrec, indexRange, channelWeights, fastIndexing, &rtn);
- else
- QuantizeEndpointsUnsigned(endPointsColorSpace, floatPixels2CL, floatPixelsLinearWeighted, mrQuantizedEndPoints[subset], mrIndexes, indexSelector, fixupIndex, aPrec, indexRange, channelWeights, fastIndexing, &rtn);
-
- if (metaRound > 0)
- {
- ParallelMath::Int16CompFlag anySame = ParallelMath::MakeBoolInt16(false);
-
- for (int prevRound = 0; prevRound < metaRound; prevRound++)
- {
- MAInt16(&prevRoundEPs)[2][3] = metaEndPointsQuantized[prevRound][subset];
-
- ParallelMath::Int16CompFlag same = ParallelMath::MakeBoolInt16(true);
-
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < 3; ch++)
- same = (same & ParallelMath::Equal(prevRoundEPs[epi][ch], mrQuantizedEndPoints[subset][epi][ch]));
-
- anySame = (anySame | same);
- if (ParallelMath::AllSet(anySame))
- break;
- }
-
- if (ParallelMath::AllSet(anySame))
- {
- roundValid[metaRound][subset] = false;
- continue;
- }
- }
-
- MFloat subsetError = ParallelMath::MakeFloatZero();
-
- {
- for (int px = 0; px < 16; px++)
- {
- if (subset != ((partitionMask >> px) & 1))
- continue;
-
- MUInt15 index;
- if (px == fixupIndex)
- index = mrIndexes[px];
- else
- {
- index = fastIndexing ? indexSelector.SelectIndexHDRFast(floatPixels2CL[px], &rtn) : indexSelector.SelectIndexHDRSlow(floatPixelsLinearWeighted[px], &rtn);
- mrIndexes[px] = index;
- }
-
- MSInt16 reconstructed[3];
- if (isSigned)
- indexSelector.ReconstructHDRSigned(mrIndexes[px], reconstructed);
- else
- indexSelector.ReconstructHDRUnsigned(mrIndexes[px], reconstructed);
-
- subsetError = subsetError + (fastIndexing ? BCCommon::ComputeErrorHDRFast<3>(flags, reconstructed, pixels[px], channelWeightsSq) : BCCommon::ComputeErrorHDRSlow<3>(flags, reconstructed, pixels[px], channelWeightsSq));
-
- if (refinePass != numRefineRounds - 1)
- refiners[subset].ContributeUnweightedPW(preWeightedPixels[px], index);
- }
- }
-
- metaError[metaRound][subset] = subsetError;
- }
- }
- }
-
- // Now we have a bunch of attempts, but not all of them will fit in the delta coding scheme
- int numMeta1 = partitioned ? MaxMetaRounds : 1;
- for (int meta0 = 0; meta0 < MaxMetaRounds; meta0++)
- {
- if (!roundValid[meta0][0])
- continue;
-
- for (int meta1 = 0; meta1 < numMeta1; meta1++)
- {
- MFloat combinedError = metaError[meta0][0];
- if (partitioned)
- {
- if (!roundValid[meta1][1])
- continue;
-
- combinedError = combinedError + metaError[meta1][1];
- }
-
- ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(combinedError, bestError);
- if (!ParallelMath::AnySet(errorBetter))
- continue;
-
- ParallelMath::Int16CompFlag needsCommit = ParallelMath::FloatFlagToInt16(errorBetter);
-
- // Figure out if this is encodable
- for (int mode = 0; mode < BC7Data::g_numHDRModes; mode++)
- {
- const BC7Data::BC6HModeInfo &modeInfo = BC7Data::g_hdrModes[mode];
-
- if (modeInfo.m_partitioned != partitioned || modeInfo.m_aPrec != aPrec)
- continue;
-
- MAInt16 encodedEPs[2][2][3];
- ParallelMath::Int16CompFlag isLegal;
- if (partitioned)
- EvaluatePartitionedLegality(metaEndPointsQuantized[meta0][0], metaEndPointsQuantized[meta1][1], modeInfo.m_aPrec, modeInfo.m_bPrec, modeInfo.m_transformed, encodedEPs, isLegal);
- else
- EvaluateSingleLegality(metaEndPointsQuantized[meta0][0], modeInfo.m_aPrec, modeInfo.m_bPrec, modeInfo.m_transformed, encodedEPs[0], isLegal);
-
- ParallelMath::Int16CompFlag isLegalAndBetter = (ParallelMath::FloatFlagToInt16(errorBetter) & isLegal);
- if (!ParallelMath::AnySet(isLegalAndBetter))
- continue;
-
- ParallelMath::FloatCompFlag isLegalAndBetterFloat = ParallelMath::Int16FlagToFloat(isLegalAndBetter);
-
- ParallelMath::ConditionalSet(bestError, isLegalAndBetterFloat, combinedError);
- ParallelMath::ConditionalSet(bestMode, isLegalAndBetter, ParallelMath::MakeUInt15(static_cast<uint16_t>(mode)));
- ParallelMath::ConditionalSet(bestPartition, isLegalAndBetter, ParallelMath::MakeUInt15(static_cast<uint16_t>(p)));
-
- for (int subset = 0; subset < numSubsets; subset++)
- {
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- ParallelMath::ConditionalSet(bestEndPoints[subset][epi][ch], isLegalAndBetter, encodedEPs[subset][epi][ch]);
- }
- }
-
- for (int px = 0; px < 16; px++)
- {
- int subset = ((partitionMask >> px) & 1);
- if (subset == 0)
- ParallelMath::ConditionalSet(bestIndexes[px], isLegalAndBetter, metaIndexes[meta0][px]);
- else
- ParallelMath::ConditionalSet(bestIndexes[px], isLegalAndBetter, metaIndexes[meta1][px]);
- }
-
- needsCommit = ParallelMath::AndNot(needsCommit, isLegalAndBetter);
- if (!ParallelMath::AnySet(needsCommit))
- break;
- }
- }
- }
- }
- }
- }
-
- // At this point, everything should be set
- for (int block = 0; block < ParallelMath::ParallelSize; block++)
- {
- ParallelMath::ScalarUInt16 mode = ParallelMath::Extract(bestMode, block);
- ParallelMath::ScalarUInt16 partition = ParallelMath::Extract(bestPartition, block);
- int32_t eps[2][2][3];
- ParallelMath::ScalarUInt16 indexes[16];
-
- const BC7Data::BC6HModeInfo& modeInfo = BC7Data::g_hdrModes[mode];
-
- const BC6HData::ModeDescriptor* desc = BC6HData::g_modeDescriptors[mode];
-
- const size_t headerBits = modeInfo.m_partitioned ? 82 : 65;
-
- for (int subset = 0; subset < 2; subset++)
- {
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- eps[subset][epi][ch] = ParallelMath::Extract(bestEndPoints[subset][epi][ch], block);
- }
- }
-
- for (int px = 0; px < 16; px++)
- indexes[px] = ParallelMath::Extract(bestIndexes[px], block);
-
- uint16_t modeID = modeInfo.m_modeID;
-
- PackingVector pv;
- pv.Init();
-
- for (size_t i = 0; i < headerBits; i++)
- {
- int32_t codedValue = 0;
- switch (desc[i].m_eField)
- {
- case BC6HData::M: codedValue = modeID; break;
- case BC6HData::D: codedValue = partition; break;
- case BC6HData::RW: codedValue = eps[0][0][0]; break;
- case BC6HData::RX: codedValue = eps[0][1][0]; break;
- case BC6HData::RY: codedValue = eps[1][0][0]; break;
- case BC6HData::RZ: codedValue = eps[1][1][0]; break;
- case BC6HData::GW: codedValue = eps[0][0][1]; break;
- case BC6HData::GX: codedValue = eps[0][1][1]; break;
- case BC6HData::GY: codedValue = eps[1][0][1]; break;
- case BC6HData::GZ: codedValue = eps[1][1][1]; break;
- case BC6HData::BW: codedValue = eps[0][0][2]; break;
- case BC6HData::BX: codedValue = eps[0][1][2]; break;
- case BC6HData::BY: codedValue = eps[1][0][2]; break;
- case BC6HData::BZ: codedValue = eps[1][1][2]; break;
- default: assert(false); break;
- }
-
- pv.Pack(static_cast<uint16_t>((codedValue >> desc[i].m_uBit) & 1), 1);
- }
-
- int fixupIndex1 = 0;
- int indexBits = 4;
- if (modeInfo.m_partitioned)
- {
- fixupIndex1 = BC7Data::g_fixupIndexes2[partition];
- indexBits = 3;
- }
-
- for (int px = 0; px < 16; px++)
- {
- ParallelMath::ScalarUInt16 index = ParallelMath::Extract(bestIndexes[px], block);
- if (px == 0 || px == fixupIndex1)
- pv.Pack(index, indexBits - 1);
- else
- pv.Pack(index, indexBits);
- }
-
- pv.Flush(packedBlocks + 16 * block);
- }
- }
-
- static void SignExtendSingle(int &v, int bits)
- {
- if (v & (1 << (bits - 1)))
- v |= -(1 << bits);
- }
-
- static void UnpackOne(PixelBlockF16 &output, const uint8_t *pBC, bool isSigned)
- {
- UnpackingVector pv;
- pv.Init(pBC);
-
- int numModeBits = 2;
- int modeBits = pv.Unpack(2);
- if (modeBits != 0 && modeBits != 1)
- {
- modeBits |= pv.Unpack(3) << 2;
- numModeBits += 3;
- }
-
- int mode = -1;
- for (int possibleMode = 0; possibleMode < BC7Data::g_numHDRModes; possibleMode++)
- {
- if (BC7Data::g_hdrModes[possibleMode].m_modeID == modeBits)
- {
- mode = possibleMode;
- break;
- }
- }
-
- if (mode < 0)
- {
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 3; ch++)
- output.m_pixels[px][ch] = 0;
- output.m_pixels[px][3] = 0x3c00; // 1.0
- }
- return;
- }
-
- const BC7Data::BC6HModeInfo& modeInfo = BC7Data::g_hdrModes[mode];
- const size_t headerBits = modeInfo.m_partitioned ? 82 : 65;
- const BC6HData::ModeDescriptor* desc = BC6HData::g_modeDescriptors[mode];
-
- int32_t partition = 0;
- int32_t eps[2][2][3];
-
- for (int subset = 0; subset < 2; subset++)
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < 3; ch++)
- eps[subset][epi][ch] = 0;
-
- for (size_t i = numModeBits; i < headerBits; i++)
- {
- int32_t *pCodedValue = NULL;
-
- switch (desc[i].m_eField)
- {
- case BC6HData::D: pCodedValue = &partition; break;
- case BC6HData::RW: pCodedValue = &eps[0][0][0]; break;
- case BC6HData::RX: pCodedValue = &eps[0][1][0]; break;
- case BC6HData::RY: pCodedValue = &eps[1][0][0]; break;
- case BC6HData::RZ: pCodedValue = &eps[1][1][0]; break;
- case BC6HData::GW: pCodedValue = &eps[0][0][1]; break;
- case BC6HData::GX: pCodedValue = &eps[0][1][1]; break;
- case BC6HData::GY: pCodedValue = &eps[1][0][1]; break;
- case BC6HData::GZ: pCodedValue = &eps[1][1][1]; break;
- case BC6HData::BW: pCodedValue = &eps[0][0][2]; break;
- case BC6HData::BX: pCodedValue = &eps[0][1][2]; break;
- case BC6HData::BY: pCodedValue = &eps[1][0][2]; break;
- case BC6HData::BZ: pCodedValue = &eps[1][1][2]; break;
- default: assert(false); break;
- }
-
- (*pCodedValue) |= pv.Unpack(1) << desc[i].m_uBit;
- }
-
-
- uint16_t modeID = modeInfo.m_modeID;
-
- int fixupIndex1 = 0;
- int indexBits = 4;
- int numSubsets = 1;
- if (modeInfo.m_partitioned)
- {
- fixupIndex1 = BC7Data::g_fixupIndexes2[partition];
- indexBits = 3;
- numSubsets = 2;
- }
-
- int indexes[16];
- for (int px = 0; px < 16; px++)
- {
- if (px == 0 || px == fixupIndex1)
- indexes[px] = pv.Unpack(indexBits - 1);
- else
- indexes[px] = pv.Unpack(indexBits);
- }
-
- if (modeInfo.m_partitioned)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- if (isSigned)
- SignExtendSingle(eps[0][0][ch], modeInfo.m_aPrec);
- if (modeInfo.m_transformed || isSigned)
- {
- SignExtendSingle(eps[0][1][ch], modeInfo.m_bPrec[ch]);
- SignExtendSingle(eps[1][0][ch], modeInfo.m_bPrec[ch]);
- SignExtendSingle(eps[1][1][ch], modeInfo.m_bPrec[ch]);
- }
- }
- }
- else
- {
- for (int ch = 0; ch < 3; ch++)
- {
- if (isSigned)
- SignExtendSingle(eps[0][0][ch], modeInfo.m_aPrec);
- if (modeInfo.m_transformed || isSigned)
- SignExtendSingle(eps[0][1][ch], modeInfo.m_bPrec[ch]);
- }
- }
-
- int aPrec = modeInfo.m_aPrec;
-
- if (modeInfo.m_transformed)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- int wrapMask = (1 << aPrec) - 1;
-
- eps[0][1][ch] = ((eps[0][0][ch] + eps[0][1][ch]) & wrapMask);
- if (isSigned)
- SignExtendSingle(eps[0][1][ch], aPrec);
-
- if (modeInfo.m_partitioned)
- {
- eps[1][0][ch] = ((eps[0][0][ch] + eps[1][0][ch]) & wrapMask);
- eps[1][1][ch] = ((eps[0][0][ch] + eps[1][1][ch]) & wrapMask);
-
- if (isSigned)
- {
- SignExtendSingle(eps[1][0][ch], aPrec);
- SignExtendSingle(eps[1][1][ch], aPrec);
- }
- }
- }
- }
-
- // Unquantize endpoints
- for (int subset = 0; subset < numSubsets; subset++)
- {
- for (int epi = 0; epi < 2; epi++)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- int &v = eps[subset][epi][ch];
-
- if (isSigned)
- {
- if (aPrec >= 16)
- {
- // Nothing
- }
- else
- {
- bool s = false;
- int comp = v;
- if (v < 0)
- {
- s = true;
- comp = -comp;
- }
-
- int unq = 0;
- if (comp == 0)
- unq = 0;
- else if (comp >= ((1 << (aPrec - 1)) - 1))
- unq = 0x7fff;
- else
- unq = ((comp << 15) + 0x4000) >> (aPrec - 1);
-
- if (s)
- unq = -unq;
-
- v = unq;
- }
- }
- else
- {
- if (aPrec >= 15)
- {
- // Nothing
- }
- else if (v == 0)
- {
- // Nothing
- }
- else if (v == ((1 << aPrec) - 1))
- v = 0xffff;
- else
- v = ((v << 16) + 0x8000) >> aPrec;
- }
- }
- }
- }
-
- const int *weights = BC7Data::g_weightTables[indexBits];
-
- for (int px = 0; px < 16; px++)
- {
- int subset = 0;
- if (modeInfo.m_partitioned)
- subset = (BC7Data::g_partitionMap[partition] >> px) & 1;
-
- int w = weights[indexes[px]];
- for (int ch = 0; ch < 3; ch++)
- {
- int comp = ((64 - w) * eps[subset][0][ch] + w * eps[subset][1][ch] + 32) >> 6;
-
- if (isSigned)
- {
- if (comp < 0)
- comp = -(((-comp) * 31) >> 5);
- else
- comp = (comp * 31) >> 5;
-
- int s = 0;
- if (comp < 0)
- {
- s = 0x8000;
- comp = -comp;
- }
-
- output.m_pixels[px][ch] = static_cast<uint16_t>(s | comp);
- }
- else
- {
- comp = (comp * 31) >> 6;
- output.m_pixels[px][ch] = static_cast<uint16_t>(comp);
- }
- }
- output.m_pixels[px][3] = 0x3c00; // 1.0
- }
- }
- };
-
- namespace S3TCSingleColorTables
- {
- struct SingleColorTableEntry
- {
- uint8_t m_min;
- uint8_t m_max;
- uint8_t m_actualColor;
- uint8_t m_span;
- };
-
- SingleColorTableEntry g_singleColor5_3[256] =
- {
- { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 8, 0, 2, 8 }, { 8, 0, 2, 8 }, { 0, 8, 5, 8 }, { 0, 8, 5, 8 }, { 0, 8, 5, 8 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 16, 8, 10, 8 }, { 33, 0, 11, 33 }, { 8, 16, 13, 8 }, { 8, 16, 13, 8 }, { 8, 16, 13, 8 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 24, 16, 18, 8 }, { 41, 8, 19, 33 }, { 16, 24, 21, 8 }, { 16, 24, 21, 8 }, { 0, 33, 22, 33 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 33, 24, 27, 9 }, { 33, 24, 27, 9 }, { 33, 24, 27, 9 }, { 41, 24, 29, 17 }, { 24, 33, 30, 9 }, { 24, 33, 30, 9 },
- { 16, 41, 32, 25 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 41, 33, 35, 8 }, { 41, 33, 35, 8 }, { 33, 41, 38, 8 }, { 33, 41, 38, 8 }, { 33, 41, 38, 8 },
- { 24, 49, 40, 25 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 49, 41, 43, 8 }, { 66, 33, 44, 33 }, { 41, 49, 46, 8 }, { 41, 49, 46, 8 }, { 41, 49, 46, 8 },
- { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 57, 49, 51, 8 }, { 74, 41, 52, 33 }, { 49, 57, 54, 8 }, { 49, 57, 54, 8 }, { 33, 66, 55, 33 },
- { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 66, 57, 60, 9 }, { 66, 57, 60, 9 }, { 66, 57, 60, 9 }, { 74, 57, 62, 17 }, { 57, 66, 63, 9 },
- { 57, 66, 63, 9 }, { 49, 74, 65, 25 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 74, 66, 68, 8 }, { 74, 66, 68, 8 }, { 66, 74, 71, 8 }, { 66, 74, 71, 8 },
- { 66, 74, 71, 8 }, { 57, 82, 73, 25 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 82, 74, 76, 8 }, { 99, 66, 77, 33 }, { 74, 82, 79, 8 }, { 74, 82, 79, 8 },
- { 74, 82, 79, 8 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 90, 82, 84, 8 }, { 107, 74, 85, 33 }, { 82, 90, 87, 8 }, { 82, 90, 87, 8 },
- { 66, 99, 88, 33 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 99, 90, 93, 9 }, { 99, 90, 93, 9 }, { 99, 90, 93, 9 }, { 107, 90, 95, 17 },
- { 90, 99, 96, 9 }, { 90, 99, 96, 9 }, { 82, 107, 98, 25 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 107, 99, 101, 8 }, { 107, 99, 101, 8 }, { 99, 107, 104, 8 },
- { 99, 107, 104, 8 }, { 99, 107, 104, 8 }, { 90, 115, 106, 25 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 115, 107, 109, 8 }, { 132, 99, 110, 33 }, { 107, 115, 112, 8 },
- { 107, 115, 112, 8 }, { 107, 115, 112, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 123, 115, 117, 8 }, { 140, 107, 118, 33 }, { 115, 123, 120, 8 },
- { 115, 123, 120, 8 }, { 99, 132, 121, 33 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 132, 123, 126, 9 }, { 132, 123, 126, 9 }, { 132, 123, 126, 9 },
- { 140, 123, 128, 17 }, { 123, 132, 129, 9 }, { 123, 132, 129, 9 }, { 115, 140, 131, 25 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 140, 132, 134, 8 }, { 140, 132, 134, 8 },
- { 132, 140, 137, 8 }, { 132, 140, 137, 8 }, { 132, 140, 137, 8 }, { 123, 148, 139, 25 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 148, 140, 142, 8 }, { 165, 132, 143, 33 },
- { 140, 148, 145, 8 }, { 140, 148, 145, 8 }, { 140, 148, 145, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 156, 148, 150, 8 }, { 173, 140, 151, 33 },
- { 148, 156, 153, 8 }, { 148, 156, 153, 8 }, { 132, 165, 154, 33 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 165, 156, 159, 9 }, { 165, 156, 159, 9 },
- { 165, 156, 159, 9 }, { 173, 156, 161, 17 }, { 156, 165, 162, 9 }, { 156, 165, 162, 9 }, { 148, 173, 164, 25 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 173, 165, 167, 8 },
- { 173, 165, 167, 8 }, { 165, 173, 170, 8 }, { 165, 173, 170, 8 }, { 165, 173, 170, 8 }, { 156, 181, 172, 25 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 181, 173, 175, 8 },
- { 198, 165, 176, 33 }, { 173, 181, 178, 8 }, { 173, 181, 178, 8 }, { 173, 181, 178, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 189, 181, 183, 8 },
- { 206, 173, 184, 33 }, { 181, 189, 186, 8 }, { 181, 189, 186, 8 }, { 165, 198, 187, 33 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 198, 189, 192, 9 },
- { 198, 189, 192, 9 }, { 198, 189, 192, 9 }, { 206, 189, 194, 17 }, { 189, 198, 195, 9 }, { 189, 198, 195, 9 }, { 181, 206, 197, 25 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
- { 206, 198, 200, 8 }, { 206, 198, 200, 8 }, { 198, 206, 203, 8 }, { 198, 206, 203, 8 }, { 198, 206, 203, 8 }, { 189, 214, 205, 25 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
- { 214, 206, 208, 8 }, { 231, 198, 209, 33 }, { 206, 214, 211, 8 }, { 206, 214, 211, 8 }, { 206, 214, 211, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
- { 222, 214, 216, 8 }, { 239, 206, 217, 33 }, { 214, 222, 219, 8 }, { 214, 222, 219, 8 }, { 198, 231, 220, 33 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
- { 231, 222, 225, 9 }, { 231, 222, 225, 9 }, { 231, 222, 225, 9 }, { 239, 222, 227, 17 }, { 222, 231, 228, 9 }, { 222, 231, 228, 9 }, { 214, 239, 230, 25 }, { 231, 231, 231, 0 },
- { 231, 231, 231, 0 }, { 239, 231, 233, 8 }, { 239, 231, 233, 8 }, { 231, 239, 236, 8 }, { 231, 239, 236, 8 }, { 231, 239, 236, 8 }, { 222, 247, 238, 25 }, { 239, 239, 239, 0 },
- { 239, 239, 239, 0 }, { 247, 239, 241, 8 }, { 247, 239, 241, 8 }, { 239, 247, 244, 8 }, { 239, 247, 244, 8 }, { 239, 247, 244, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 247, 247, 247, 0 }, { 255, 247, 249, 8 }, { 255, 247, 249, 8 }, { 247, 255, 252, 8 }, { 247, 255, 252, 8 }, { 247, 255, 252, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor6_3[256] =
- {
- { 0, 0, 0, 0 }, { 4, 0, 1, 4 }, { 0, 4, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 8, 4, 5, 4 }, { 4, 8, 6, 4 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 12, 8, 9, 4 }, { 8, 12, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 16, 12, 13, 4 }, { 12, 16, 14, 4 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 20, 16, 17, 4 }, { 16, 20, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 24, 20, 21, 4 }, { 20, 24, 22, 4 }, { 69, 0, 23, 69 },
- { 24, 24, 24, 0 }, { 28, 24, 25, 4 }, { 24, 28, 26, 4 }, { 65, 8, 27, 57 }, { 28, 28, 28, 0 }, { 32, 28, 29, 4 }, { 28, 32, 30, 4 }, { 69, 12, 31, 57 },
- { 32, 32, 32, 0 }, { 36, 32, 33, 4 }, { 32, 36, 34, 4 }, { 65, 20, 35, 45 }, { 36, 36, 36, 0 }, { 40, 36, 37, 4 }, { 36, 40, 38, 4 }, { 69, 24, 39, 45 },
- { 40, 40, 40, 0 }, { 44, 40, 41, 4 }, { 40, 44, 42, 4 }, { 65, 32, 43, 33 }, { 44, 44, 44, 0 }, { 48, 44, 45, 4 }, { 44, 48, 46, 4 }, { 69, 36, 47, 33 },
- { 48, 48, 48, 0 }, { 52, 48, 49, 4 }, { 48, 52, 50, 4 }, { 65, 44, 51, 21 }, { 52, 52, 52, 0 }, { 56, 52, 53, 4 }, { 52, 56, 54, 4 }, { 69, 48, 55, 21 },
- { 56, 56, 56, 0 }, { 60, 56, 57, 4 }, { 56, 60, 58, 4 }, { 65, 56, 59, 9 }, { 60, 60, 60, 0 }, { 65, 60, 61, 5 }, { 56, 65, 62, 9 }, { 60, 65, 63, 5 },
- { 56, 69, 64, 13 }, { 65, 65, 65, 0 }, { 69, 65, 66, 4 }, { 65, 69, 67, 4 }, { 60, 73, 68, 13 }, { 69, 69, 69, 0 }, { 73, 69, 70, 4 }, { 69, 73, 71, 4 },
- { 56, 81, 72, 25 }, { 73, 73, 73, 0 }, { 77, 73, 74, 4 }, { 73, 77, 75, 4 }, { 60, 85, 76, 25 }, { 77, 77, 77, 0 }, { 81, 77, 78, 4 }, { 77, 81, 79, 4 },
- { 56, 93, 80, 37 }, { 81, 81, 81, 0 }, { 85, 81, 82, 4 }, { 81, 85, 83, 4 }, { 60, 97, 84, 37 }, { 85, 85, 85, 0 }, { 89, 85, 86, 4 }, { 85, 89, 87, 4 },
- { 56, 105, 88, 49 }, { 89, 89, 89, 0 }, { 93, 89, 90, 4 }, { 89, 93, 91, 4 }, { 60, 109, 92, 49 }, { 93, 93, 93, 0 }, { 97, 93, 94, 4 }, { 93, 97, 95, 4 },
- { 134, 77, 96, 57 }, { 97, 97, 97, 0 }, { 101, 97, 98, 4 }, { 97, 101, 99, 4 }, { 130, 85, 100, 45 }, { 101, 101, 101, 0 }, { 105, 101, 102, 4 }, { 101, 105, 103, 4 },
- { 134, 89, 104, 45 }, { 105, 105, 105, 0 }, { 109, 105, 106, 4 }, { 105, 109, 107, 4 }, { 130, 97, 108, 33 }, { 109, 109, 109, 0 }, { 113, 109, 110, 4 }, { 109, 113, 111, 4 },
- { 134, 101, 112, 33 }, { 113, 113, 113, 0 }, { 117, 113, 114, 4 }, { 113, 117, 115, 4 }, { 130, 109, 116, 21 }, { 117, 117, 117, 0 }, { 121, 117, 118, 4 }, { 117, 121, 119, 4 },
- { 134, 113, 120, 21 }, { 121, 121, 121, 0 }, { 125, 121, 122, 4 }, { 121, 125, 123, 4 }, { 130, 121, 124, 9 }, { 125, 125, 125, 0 }, { 130, 125, 126, 5 }, { 121, 130, 127, 9 },
- { 125, 130, 128, 5 }, { 121, 134, 129, 13 }, { 130, 130, 130, 0 }, { 134, 130, 131, 4 }, { 130, 134, 132, 4 }, { 125, 138, 133, 13 }, { 134, 134, 134, 0 }, { 138, 134, 135, 4 },
- { 134, 138, 136, 4 }, { 121, 146, 137, 25 }, { 138, 138, 138, 0 }, { 142, 138, 139, 4 }, { 138, 142, 140, 4 }, { 125, 150, 141, 25 }, { 142, 142, 142, 0 }, { 146, 142, 143, 4 },
- { 142, 146, 144, 4 }, { 121, 158, 145, 37 }, { 146, 146, 146, 0 }, { 150, 146, 147, 4 }, { 146, 150, 148, 4 }, { 125, 162, 149, 37 }, { 150, 150, 150, 0 }, { 154, 150, 151, 4 },
- { 150, 154, 152, 4 }, { 121, 170, 153, 49 }, { 154, 154, 154, 0 }, { 158, 154, 155, 4 }, { 154, 158, 156, 4 }, { 125, 174, 157, 49 }, { 158, 158, 158, 0 }, { 162, 158, 159, 4 },
- { 158, 162, 160, 4 }, { 199, 142, 161, 57 }, { 162, 162, 162, 0 }, { 166, 162, 163, 4 }, { 162, 166, 164, 4 }, { 195, 150, 165, 45 }, { 166, 166, 166, 0 }, { 170, 166, 167, 4 },
- { 166, 170, 168, 4 }, { 199, 154, 169, 45 }, { 170, 170, 170, 0 }, { 174, 170, 171, 4 }, { 170, 174, 172, 4 }, { 195, 162, 173, 33 }, { 174, 174, 174, 0 }, { 178, 174, 175, 4 },
- { 174, 178, 176, 4 }, { 199, 166, 177, 33 }, { 178, 178, 178, 0 }, { 182, 178, 179, 4 }, { 178, 182, 180, 4 }, { 195, 174, 181, 21 }, { 182, 182, 182, 0 }, { 186, 182, 183, 4 },
- { 182, 186, 184, 4 }, { 199, 178, 185, 21 }, { 186, 186, 186, 0 }, { 190, 186, 187, 4 }, { 186, 190, 188, 4 }, { 195, 186, 189, 9 }, { 190, 190, 190, 0 }, { 195, 190, 191, 5 },
- { 186, 195, 192, 9 }, { 190, 195, 193, 5 }, { 186, 199, 194, 13 }, { 195, 195, 195, 0 }, { 199, 195, 196, 4 }, { 195, 199, 197, 4 }, { 190, 203, 198, 13 }, { 199, 199, 199, 0 },
- { 203, 199, 200, 4 }, { 199, 203, 201, 4 }, { 186, 211, 202, 25 }, { 203, 203, 203, 0 }, { 207, 203, 204, 4 }, { 203, 207, 205, 4 }, { 190, 215, 206, 25 }, { 207, 207, 207, 0 },
- { 211, 207, 208, 4 }, { 207, 211, 209, 4 }, { 186, 223, 210, 37 }, { 211, 211, 211, 0 }, { 215, 211, 212, 4 }, { 211, 215, 213, 4 }, { 190, 227, 214, 37 }, { 215, 215, 215, 0 },
- { 219, 215, 216, 4 }, { 215, 219, 217, 4 }, { 186, 235, 218, 49 }, { 219, 219, 219, 0 }, { 223, 219, 220, 4 }, { 219, 223, 221, 4 }, { 190, 239, 222, 49 }, { 223, 223, 223, 0 },
- { 227, 223, 224, 4 }, { 223, 227, 225, 4 }, { 186, 247, 226, 61 }, { 227, 227, 227, 0 }, { 231, 227, 228, 4 }, { 227, 231, 229, 4 }, { 190, 251, 230, 61 }, { 231, 231, 231, 0 },
- { 235, 231, 232, 4 }, { 231, 235, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 239, 235, 236, 4 }, { 235, 239, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
- { 243, 239, 240, 4 }, { 239, 243, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 247, 243, 244, 4 }, { 243, 247, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 251, 247, 248, 4 }, { 247, 251, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 255, 251, 252, 4 }, { 251, 255, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor5_2[256] =
- {
- { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 41, 32, 17 },
- { 24, 41, 32, 17 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 24, 49, 36, 25 }, { 24, 49, 36, 25 }, { 33, 41, 37, 8 }, { 33, 41, 37, 8 }, { 24, 57, 40, 33 },
- { 24, 57, 40, 33 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 49, 49, 49, 0 },
- { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 57, 57, 57, 0 },
- { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 },
- { 57, 74, 65, 17 }, { 57, 74, 65, 17 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 57, 82, 69, 25 }, { 57, 82, 69, 25 }, { 66, 74, 70, 8 }, { 66, 74, 70, 8 },
- { 57, 90, 73, 33 }, { 57, 90, 73, 33 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 },
- { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 },
- { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 },
- { 90, 99, 94, 9 }, { 90, 107, 98, 17 }, { 90, 107, 98, 17 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 90, 115, 102, 25 }, { 90, 115, 102, 25 }, { 99, 107, 103, 8 },
- { 99, 107, 103, 8 }, { 90, 123, 106, 33 }, { 90, 123, 106, 33 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 115, 111, 8 }, { 107, 115, 111, 8 },
- { 107, 115, 111, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 123, 119, 8 }, { 115, 123, 119, 8 },
- { 115, 123, 119, 8 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 132, 127, 9 }, { 123, 132, 127, 9 },
- { 123, 132, 127, 9 }, { 123, 132, 127, 9 }, { 123, 140, 131, 17 }, { 123, 140, 131, 17 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 123, 148, 135, 25 }, { 123, 148, 135, 25 },
- { 132, 140, 136, 8 }, { 132, 140, 136, 8 }, { 123, 156, 139, 33 }, { 123, 156, 139, 33 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 148, 144, 8 },
- { 140, 148, 144, 8 }, { 140, 148, 144, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 156, 152, 8 },
- { 148, 156, 152, 8 }, { 148, 156, 152, 8 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 165, 160, 9 },
- { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 173, 164, 17 }, { 156, 173, 164, 17 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 156, 181, 168, 25 },
- { 156, 181, 168, 25 }, { 165, 173, 169, 8 }, { 165, 173, 169, 8 }, { 156, 189, 172, 33 }, { 156, 189, 172, 33 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 },
- { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 },
- { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 },
- { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 206, 197, 17 }, { 189, 206, 197, 17 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
- { 189, 214, 201, 25 }, { 189, 214, 201, 25 }, { 198, 206, 202, 8 }, { 198, 206, 202, 8 }, { 189, 222, 205, 33 }, { 189, 222, 205, 33 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
- { 206, 206, 206, 0 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
- { 214, 214, 214, 0 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
- { 222, 222, 222, 0 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 239, 230, 17 }, { 222, 239, 230, 17 }, { 231, 231, 231, 0 },
- { 231, 231, 231, 0 }, { 222, 247, 234, 25 }, { 222, 247, 234, 25 }, { 231, 239, 235, 8 }, { 231, 239, 235, 8 }, { 222, 255, 238, 33 }, { 222, 255, 238, 33 }, { 239, 239, 239, 0 },
- { 239, 239, 239, 0 }, { 239, 239, 239, 0 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor6_2[256] =
- {
- { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 4, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 8, 6, 4 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 12, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 16, 14, 4 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 20, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 24, 22, 4 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 28, 26, 4 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 32, 30, 4 }, { 32, 32, 32, 0 },
- { 32, 32, 32, 0 }, { 32, 32, 32, 0 }, { 32, 36, 34, 4 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 40, 38, 4 }, { 40, 40, 40, 0 },
- { 40, 40, 40, 0 }, { 40, 40, 40, 0 }, { 40, 44, 42, 4 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 48, 46, 4 }, { 48, 48, 48, 0 },
- { 48, 48, 48, 0 }, { 48, 48, 48, 0 }, { 48, 52, 50, 4 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 56, 54, 4 }, { 56, 56, 56, 0 },
- { 56, 56, 56, 0 }, { 56, 56, 56, 0 }, { 56, 60, 58, 4 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 65, 62, 5 }, { 60, 65, 62, 5 },
- { 60, 69, 64, 9 }, { 65, 65, 65, 0 }, { 60, 73, 66, 13 }, { 65, 69, 67, 4 }, { 60, 77, 68, 17 }, { 69, 69, 69, 0 }, { 60, 81, 70, 21 }, { 69, 73, 71, 4 },
- { 60, 85, 72, 25 }, { 73, 73, 73, 0 }, { 60, 89, 74, 29 }, { 73, 77, 75, 4 }, { 60, 93, 76, 33 }, { 77, 77, 77, 0 }, { 60, 97, 78, 37 }, { 77, 81, 79, 4 },
- { 60, 101, 80, 41 }, { 81, 81, 81, 0 }, { 60, 105, 82, 45 }, { 81, 85, 83, 4 }, { 60, 109, 84, 49 }, { 85, 85, 85, 0 }, { 60, 113, 86, 53 }, { 85, 89, 87, 4 },
- { 60, 117, 88, 57 }, { 89, 89, 89, 0 }, { 60, 121, 90, 61 }, { 89, 93, 91, 4 }, { 60, 125, 92, 65 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 97, 95, 4 },
- { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 101, 99, 4 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 105, 103, 4 },
- { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 109, 107, 4 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 113, 111, 4 },
- { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 117, 115, 4 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 121, 119, 4 },
- { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 125, 123, 4 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 130, 127, 5 },
- { 125, 130, 127, 5 }, { 125, 134, 129, 9 }, { 130, 130, 130, 0 }, { 125, 138, 131, 13 }, { 130, 134, 132, 4 }, { 125, 142, 133, 17 }, { 134, 134, 134, 0 }, { 125, 146, 135, 21 },
- { 134, 138, 136, 4 }, { 125, 150, 137, 25 }, { 138, 138, 138, 0 }, { 125, 154, 139, 29 }, { 138, 142, 140, 4 }, { 125, 158, 141, 33 }, { 142, 142, 142, 0 }, { 125, 162, 143, 37 },
- { 142, 146, 144, 4 }, { 125, 166, 145, 41 }, { 146, 146, 146, 0 }, { 125, 170, 147, 45 }, { 146, 150, 148, 4 }, { 125, 174, 149, 49 }, { 150, 150, 150, 0 }, { 125, 178, 151, 53 },
- { 150, 154, 152, 4 }, { 125, 182, 153, 57 }, { 154, 154, 154, 0 }, { 125, 186, 155, 61 }, { 154, 158, 156, 4 }, { 125, 190, 157, 65 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 },
- { 158, 162, 160, 4 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 166, 164, 4 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 },
- { 166, 170, 168, 4 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 174, 172, 4 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 },
- { 174, 178, 176, 4 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 182, 180, 4 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 },
- { 182, 186, 184, 4 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 190, 188, 4 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 },
- { 190, 195, 192, 5 }, { 190, 195, 192, 5 }, { 190, 199, 194, 9 }, { 195, 195, 195, 0 }, { 190, 203, 196, 13 }, { 195, 199, 197, 4 }, { 190, 207, 198, 17 }, { 199, 199, 199, 0 },
- { 190, 211, 200, 21 }, { 199, 203, 201, 4 }, { 190, 215, 202, 25 }, { 203, 203, 203, 0 }, { 190, 219, 204, 29 }, { 203, 207, 205, 4 }, { 190, 223, 206, 33 }, { 207, 207, 207, 0 },
- { 190, 227, 208, 37 }, { 207, 211, 209, 4 }, { 190, 231, 210, 41 }, { 211, 211, 211, 0 }, { 190, 235, 212, 45 }, { 211, 215, 213, 4 }, { 190, 239, 214, 49 }, { 215, 215, 215, 0 },
- { 190, 243, 216, 53 }, { 215, 219, 217, 4 }, { 190, 247, 218, 57 }, { 219, 219, 219, 0 }, { 190, 251, 220, 61 }, { 219, 223, 221, 4 }, { 190, 255, 222, 65 }, { 223, 223, 223, 0 },
- { 223, 223, 223, 0 }, { 223, 227, 225, 4 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 231, 229, 4 }, { 231, 231, 231, 0 }, { 231, 231, 231, 0 },
- { 231, 231, 231, 0 }, { 231, 235, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 239, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
- { 239, 239, 239, 0 }, { 239, 243, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 247, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 247, 247, 247, 0 }, { 247, 251, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 255, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor5_3_p[256] =
- {
- { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 8, 0, 2, 8 }, { 8, 0, 2, 8 }, { 0, 8, 5, 8 }, { 0, 8, 5, 8 }, { 0, 8, 5, 8 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 16, 8, 10, 8 }, { 33, 0, 11, 33 }, { 8, 16, 13, 8 }, { 8, 16, 13, 8 }, { 8, 16, 13, 8 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 24, 16, 18, 8 }, { 41, 8, 19, 33 }, { 16, 24, 21, 8 }, { 16, 24, 21, 8 }, { 0, 33, 22, 33 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 33, 24, 27, 9 }, { 33, 24, 27, 9 }, { 33, 24, 27, 9 }, { 41, 24, 29, 17 }, { 24, 33, 30, 9 }, { 24, 33, 30, 9 },
- { 16, 41, 32, 25 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 41, 33, 35, 8 }, { 41, 33, 35, 8 }, { 33, 41, 38, 8 }, { 33, 41, 38, 8 }, { 33, 41, 38, 8 },
- { 24, 49, 40, 25 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 49, 41, 43, 8 }, { 66, 33, 44, 33 }, { 41, 49, 46, 8 }, { 41, 49, 46, 8 }, { 41, 49, 46, 8 },
- { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 57, 49, 51, 8 }, { 74, 41, 52, 33 }, { 49, 57, 54, 8 }, { 49, 57, 54, 8 }, { 33, 66, 55, 33 },
- { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 66, 57, 60, 9 }, { 66, 57, 60, 9 }, { 66, 57, 60, 9 }, { 74, 57, 62, 17 }, { 57, 66, 63, 9 },
- { 57, 66, 63, 9 }, { 49, 74, 65, 25 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 74, 66, 68, 8 }, { 74, 66, 68, 8 }, { 66, 74, 71, 8 }, { 66, 74, 71, 8 },
- { 66, 74, 71, 8 }, { 57, 82, 73, 25 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 82, 74, 76, 8 }, { 99, 66, 77, 33 }, { 74, 82, 79, 8 }, { 74, 82, 79, 8 },
- { 74, 82, 79, 8 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 90, 82, 84, 8 }, { 107, 74, 85, 33 }, { 82, 90, 87, 8 }, { 82, 90, 87, 8 },
- { 66, 99, 88, 33 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 99, 90, 93, 9 }, { 99, 90, 93, 9 }, { 99, 90, 93, 9 }, { 107, 90, 95, 17 },
- { 90, 99, 96, 9 }, { 90, 99, 96, 9 }, { 82, 107, 98, 25 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 107, 99, 101, 8 }, { 107, 99, 101, 8 }, { 99, 107, 104, 8 },
- { 99, 107, 104, 8 }, { 99, 107, 104, 8 }, { 90, 115, 106, 25 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 115, 107, 109, 8 }, { 132, 99, 110, 33 }, { 107, 115, 112, 8 },
- { 107, 115, 112, 8 }, { 107, 115, 112, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 123, 115, 117, 8 }, { 140, 107, 118, 33 }, { 115, 123, 120, 8 },
- { 115, 123, 120, 8 }, { 99, 132, 121, 33 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 132, 123, 126, 9 }, { 132, 123, 126, 9 }, { 132, 123, 126, 9 },
- { 140, 123, 128, 17 }, { 123, 132, 129, 9 }, { 123, 132, 129, 9 }, { 115, 140, 131, 25 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 140, 132, 134, 8 }, { 140, 132, 134, 8 },
- { 132, 140, 137, 8 }, { 132, 140, 137, 8 }, { 132, 140, 137, 8 }, { 123, 148, 139, 25 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 148, 140, 142, 8 }, { 165, 132, 143, 33 },
- { 140, 148, 145, 8 }, { 140, 148, 145, 8 }, { 140, 148, 145, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 156, 148, 150, 8 }, { 173, 140, 151, 33 },
- { 148, 156, 153, 8 }, { 148, 156, 153, 8 }, { 132, 165, 154, 33 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 165, 156, 159, 9 }, { 165, 156, 159, 9 },
- { 165, 156, 159, 9 }, { 173, 156, 161, 17 }, { 156, 165, 162, 9 }, { 156, 165, 162, 9 }, { 148, 173, 164, 25 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 173, 165, 167, 8 },
- { 173, 165, 167, 8 }, { 165, 173, 170, 8 }, { 165, 173, 170, 8 }, { 165, 173, 170, 8 }, { 156, 181, 172, 25 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 181, 173, 175, 8 },
- { 198, 165, 176, 33 }, { 173, 181, 178, 8 }, { 173, 181, 178, 8 }, { 173, 181, 178, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 189, 181, 183, 8 },
- { 206, 173, 184, 33 }, { 181, 189, 186, 8 }, { 181, 189, 186, 8 }, { 165, 198, 187, 33 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 198, 189, 192, 9 },
- { 198, 189, 192, 9 }, { 198, 189, 192, 9 }, { 206, 189, 194, 17 }, { 189, 198, 195, 9 }, { 189, 198, 195, 9 }, { 181, 206, 197, 25 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
- { 206, 198, 200, 8 }, { 206, 198, 200, 8 }, { 198, 206, 203, 8 }, { 198, 206, 203, 8 }, { 198, 206, 203, 8 }, { 189, 214, 205, 25 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
- { 214, 206, 208, 8 }, { 231, 198, 209, 33 }, { 206, 214, 211, 8 }, { 206, 214, 211, 8 }, { 206, 214, 211, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
- { 222, 214, 216, 8 }, { 239, 206, 217, 33 }, { 214, 222, 219, 8 }, { 214, 222, 219, 8 }, { 198, 231, 220, 33 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
- { 231, 222, 225, 9 }, { 231, 222, 225, 9 }, { 231, 222, 225, 9 }, { 239, 222, 227, 17 }, { 222, 231, 228, 9 }, { 222, 231, 228, 9 }, { 214, 239, 230, 25 }, { 231, 231, 231, 0 },
- { 231, 231, 231, 0 }, { 239, 231, 233, 8 }, { 239, 231, 233, 8 }, { 231, 239, 236, 8 }, { 231, 239, 236, 8 }, { 231, 239, 236, 8 }, { 222, 247, 238, 25 }, { 239, 239, 239, 0 },
- { 239, 239, 239, 0 }, { 247, 239, 241, 8 }, { 247, 239, 241, 8 }, { 239, 247, 244, 8 }, { 239, 247, 244, 8 }, { 239, 247, 244, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 247, 247, 247, 0 }, { 255, 247, 249, 8 }, { 255, 247, 249, 8 }, { 247, 255, 252, 8 }, { 247, 255, 252, 8 }, { 247, 255, 252, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor6_3_p[256] =
- {
- { 0, 0, 0, 0 }, { 4, 0, 1, 4 }, { 0, 4, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 8, 4, 5, 4 }, { 4, 8, 6, 4 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 12, 8, 9, 4 }, { 8, 12, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 16, 12, 13, 4 }, { 12, 16, 14, 4 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 20, 16, 17, 4 }, { 16, 20, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 24, 20, 21, 4 }, { 20, 24, 22, 4 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 28, 24, 25, 4 }, { 24, 28, 26, 4 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 32, 28, 29, 4 }, { 28, 32, 30, 4 }, { 32, 32, 32, 0 },
- { 32, 32, 32, 0 }, { 36, 32, 33, 4 }, { 32, 36, 34, 4 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 40, 36, 37, 4 }, { 36, 40, 38, 4 }, { 40, 40, 40, 0 },
- { 40, 40, 40, 0 }, { 44, 40, 41, 4 }, { 40, 44, 42, 4 }, { 65, 32, 43, 33 }, { 44, 44, 44, 0 }, { 48, 44, 45, 4 }, { 44, 48, 46, 4 }, { 69, 36, 47, 33 },
- { 48, 48, 48, 0 }, { 52, 48, 49, 4 }, { 48, 52, 50, 4 }, { 65, 44, 51, 21 }, { 52, 52, 52, 0 }, { 56, 52, 53, 4 }, { 52, 56, 54, 4 }, { 69, 48, 55, 21 },
- { 56, 56, 56, 0 }, { 60, 56, 57, 4 }, { 56, 60, 58, 4 }, { 65, 56, 59, 9 }, { 60, 60, 60, 0 }, { 65, 60, 61, 5 }, { 56, 65, 62, 9 }, { 60, 65, 63, 5 },
- { 56, 69, 64, 13 }, { 65, 65, 65, 0 }, { 69, 65, 66, 4 }, { 65, 69, 67, 4 }, { 60, 73, 68, 13 }, { 69, 69, 69, 0 }, { 73, 69, 70, 4 }, { 69, 73, 71, 4 },
- { 56, 81, 72, 25 }, { 73, 73, 73, 0 }, { 77, 73, 74, 4 }, { 73, 77, 75, 4 }, { 60, 85, 76, 25 }, { 77, 77, 77, 0 }, { 81, 77, 78, 4 }, { 77, 81, 79, 4 },
- { 81, 81, 81, 0 }, { 81, 81, 81, 0 }, { 85, 81, 82, 4 }, { 81, 85, 83, 4 }, { 85, 85, 85, 0 }, { 85, 85, 85, 0 }, { 89, 85, 86, 4 }, { 85, 89, 87, 4 },
- { 89, 89, 89, 0 }, { 89, 89, 89, 0 }, { 93, 89, 90, 4 }, { 89, 93, 91, 4 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 97, 93, 94, 4 }, { 93, 97, 95, 4 },
- { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 101, 97, 98, 4 }, { 97, 101, 99, 4 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 105, 101, 102, 4 }, { 101, 105, 103, 4 },
- { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 109, 105, 106, 4 }, { 105, 109, 107, 4 }, { 130, 97, 108, 33 }, { 109, 109, 109, 0 }, { 113, 109, 110, 4 }, { 109, 113, 111, 4 },
- { 134, 101, 112, 33 }, { 113, 113, 113, 0 }, { 117, 113, 114, 4 }, { 113, 117, 115, 4 }, { 130, 109, 116, 21 }, { 117, 117, 117, 0 }, { 121, 117, 118, 4 }, { 117, 121, 119, 4 },
- { 134, 113, 120, 21 }, { 121, 121, 121, 0 }, { 125, 121, 122, 4 }, { 121, 125, 123, 4 }, { 130, 121, 124, 9 }, { 125, 125, 125, 0 }, { 130, 125, 126, 5 }, { 121, 130, 127, 9 },
- { 125, 130, 128, 5 }, { 121, 134, 129, 13 }, { 130, 130, 130, 0 }, { 134, 130, 131, 4 }, { 130, 134, 132, 4 }, { 125, 138, 133, 13 }, { 134, 134, 134, 0 }, { 138, 134, 135, 4 },
- { 134, 138, 136, 4 }, { 121, 146, 137, 25 }, { 138, 138, 138, 0 }, { 142, 138, 139, 4 }, { 138, 142, 140, 4 }, { 125, 150, 141, 25 }, { 142, 142, 142, 0 }, { 146, 142, 143, 4 },
- { 142, 146, 144, 4 }, { 146, 146, 146, 0 }, { 146, 146, 146, 0 }, { 150, 146, 147, 4 }, { 146, 150, 148, 4 }, { 150, 150, 150, 0 }, { 150, 150, 150, 0 }, { 154, 150, 151, 4 },
- { 150, 154, 152, 4 }, { 154, 154, 154, 0 }, { 154, 154, 154, 0 }, { 158, 154, 155, 4 }, { 154, 158, 156, 4 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 }, { 162, 158, 159, 4 },
- { 158, 162, 160, 4 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 166, 162, 163, 4 }, { 162, 166, 164, 4 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 }, { 170, 166, 167, 4 },
- { 166, 170, 168, 4 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 174, 170, 171, 4 }, { 170, 174, 172, 4 }, { 195, 162, 173, 33 }, { 174, 174, 174, 0 }, { 178, 174, 175, 4 },
- { 174, 178, 176, 4 }, { 199, 166, 177, 33 }, { 178, 178, 178, 0 }, { 182, 178, 179, 4 }, { 178, 182, 180, 4 }, { 195, 174, 181, 21 }, { 182, 182, 182, 0 }, { 186, 182, 183, 4 },
- { 182, 186, 184, 4 }, { 199, 178, 185, 21 }, { 186, 186, 186, 0 }, { 190, 186, 187, 4 }, { 186, 190, 188, 4 }, { 195, 186, 189, 9 }, { 190, 190, 190, 0 }, { 195, 190, 191, 5 },
- { 186, 195, 192, 9 }, { 190, 195, 193, 5 }, { 186, 199, 194, 13 }, { 195, 195, 195, 0 }, { 199, 195, 196, 4 }, { 195, 199, 197, 4 }, { 190, 203, 198, 13 }, { 199, 199, 199, 0 },
- { 203, 199, 200, 4 }, { 199, 203, 201, 4 }, { 186, 211, 202, 25 }, { 203, 203, 203, 0 }, { 207, 203, 204, 4 }, { 203, 207, 205, 4 }, { 190, 215, 206, 25 }, { 207, 207, 207, 0 },
- { 211, 207, 208, 4 }, { 207, 211, 209, 4 }, { 211, 211, 211, 0 }, { 211, 211, 211, 0 }, { 215, 211, 212, 4 }, { 211, 215, 213, 4 }, { 215, 215, 215, 0 }, { 215, 215, 215, 0 },
- { 219, 215, 216, 4 }, { 215, 219, 217, 4 }, { 219, 219, 219, 0 }, { 219, 219, 219, 0 }, { 223, 219, 220, 4 }, { 219, 223, 221, 4 }, { 223, 223, 223, 0 }, { 223, 223, 223, 0 },
- { 227, 223, 224, 4 }, { 223, 227, 225, 4 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 231, 227, 228, 4 }, { 227, 231, 229, 4 }, { 231, 231, 231, 0 }, { 231, 231, 231, 0 },
- { 235, 231, 232, 4 }, { 231, 235, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 239, 235, 236, 4 }, { 235, 239, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
- { 243, 239, 240, 4 }, { 239, 243, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 247, 243, 244, 4 }, { 243, 247, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 251, 247, 248, 4 }, { 247, 251, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 255, 251, 252, 4 }, { 251, 255, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor5_2_p[256] =
- {
- { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 41, 32, 17 },
- { 24, 41, 32, 17 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 24, 49, 36, 25 }, { 24, 49, 36, 25 }, { 33, 41, 37, 8 }, { 33, 41, 37, 8 }, { 24, 57, 40, 33 },
- { 24, 57, 40, 33 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 49, 49, 49, 0 },
- { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 57, 57, 57, 0 },
- { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 },
- { 57, 74, 65, 17 }, { 57, 74, 65, 17 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 57, 82, 69, 25 }, { 57, 82, 69, 25 }, { 66, 74, 70, 8 }, { 66, 74, 70, 8 },
- { 57, 90, 73, 33 }, { 57, 90, 73, 33 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 },
- { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 },
- { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 },
- { 90, 99, 94, 9 }, { 90, 107, 98, 17 }, { 90, 107, 98, 17 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 90, 115, 102, 25 }, { 90, 115, 102, 25 }, { 99, 107, 103, 8 },
- { 99, 107, 103, 8 }, { 90, 123, 106, 33 }, { 90, 123, 106, 33 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 115, 111, 8 }, { 107, 115, 111, 8 },
- { 107, 115, 111, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 123, 119, 8 }, { 115, 123, 119, 8 },
- { 115, 123, 119, 8 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 132, 127, 9 }, { 123, 132, 127, 9 },
- { 123, 132, 127, 9 }, { 123, 132, 127, 9 }, { 123, 140, 131, 17 }, { 123, 140, 131, 17 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 123, 148, 135, 25 }, { 123, 148, 135, 25 },
- { 132, 140, 136, 8 }, { 132, 140, 136, 8 }, { 123, 156, 139, 33 }, { 123, 156, 139, 33 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 148, 144, 8 },
- { 140, 148, 144, 8 }, { 140, 148, 144, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 156, 152, 8 },
- { 148, 156, 152, 8 }, { 148, 156, 152, 8 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 165, 160, 9 },
- { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 173, 164, 17 }, { 156, 173, 164, 17 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 156, 181, 168, 25 },
- { 156, 181, 168, 25 }, { 165, 173, 169, 8 }, { 165, 173, 169, 8 }, { 156, 189, 172, 33 }, { 156, 189, 172, 33 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 },
- { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 },
- { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 },
- { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 206, 197, 17 }, { 189, 206, 197, 17 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
- { 189, 214, 201, 25 }, { 189, 214, 201, 25 }, { 198, 206, 202, 8 }, { 198, 206, 202, 8 }, { 189, 222, 205, 33 }, { 189, 222, 205, 33 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
- { 206, 206, 206, 0 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
- { 214, 214, 214, 0 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
- { 222, 222, 222, 0 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 239, 230, 17 }, { 222, 239, 230, 17 }, { 231, 231, 231, 0 },
- { 231, 231, 231, 0 }, { 222, 247, 234, 25 }, { 222, 247, 234, 25 }, { 231, 239, 235, 8 }, { 231, 239, 235, 8 }, { 222, 255, 238, 33 }, { 222, 255, 238, 33 }, { 239, 239, 239, 0 },
- { 239, 239, 239, 0 }, { 239, 239, 239, 0 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
-
- SingleColorTableEntry g_singleColor6_2_p[256] =
- {
- { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 4, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 8, 6, 4 }, { 8, 8, 8, 0 },
- { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 12, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 16, 14, 4 }, { 16, 16, 16, 0 },
- { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 20, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 24, 22, 4 }, { 24, 24, 24, 0 },
- { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 28, 26, 4 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 32, 30, 4 }, { 32, 32, 32, 0 },
- { 32, 32, 32, 0 }, { 32, 32, 32, 0 }, { 32, 36, 34, 4 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 40, 38, 4 }, { 40, 40, 40, 0 },
- { 40, 40, 40, 0 }, { 40, 40, 40, 0 }, { 40, 44, 42, 4 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 48, 46, 4 }, { 48, 48, 48, 0 },
- { 48, 48, 48, 0 }, { 48, 48, 48, 0 }, { 48, 52, 50, 4 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 56, 54, 4 }, { 56, 56, 56, 0 },
- { 56, 56, 56, 0 }, { 56, 56, 56, 0 }, { 56, 60, 58, 4 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 65, 62, 5 }, { 60, 65, 62, 5 },
- { 60, 69, 64, 9 }, { 65, 65, 65, 0 }, { 60, 73, 66, 13 }, { 65, 69, 67, 4 }, { 60, 77, 68, 17 }, { 69, 69, 69, 0 }, { 60, 81, 70, 21 }, { 69, 73, 71, 4 },
- { 60, 85, 72, 25 }, { 73, 73, 73, 0 }, { 60, 89, 74, 29 }, { 73, 77, 75, 4 }, { 60, 93, 76, 33 }, { 77, 77, 77, 0 }, { 77, 77, 77, 0 }, { 77, 81, 79, 4 },
- { 81, 81, 81, 0 }, { 81, 81, 81, 0 }, { 81, 81, 81, 0 }, { 81, 85, 83, 4 }, { 85, 85, 85, 0 }, { 85, 85, 85, 0 }, { 85, 85, 85, 0 }, { 85, 89, 87, 4 },
- { 89, 89, 89, 0 }, { 89, 89, 89, 0 }, { 89, 89, 89, 0 }, { 89, 93, 91, 4 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 97, 95, 4 },
- { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 101, 99, 4 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 105, 103, 4 },
- { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 109, 107, 4 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 113, 111, 4 },
- { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 117, 115, 4 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 121, 119, 4 },
- { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 125, 123, 4 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 130, 127, 5 },
- { 125, 130, 127, 5 }, { 125, 134, 129, 9 }, { 130, 130, 130, 0 }, { 125, 138, 131, 13 }, { 130, 134, 132, 4 }, { 125, 142, 133, 17 }, { 134, 134, 134, 0 }, { 125, 146, 135, 21 },
- { 134, 138, 136, 4 }, { 125, 150, 137, 25 }, { 138, 138, 138, 0 }, { 125, 154, 139, 29 }, { 138, 142, 140, 4 }, { 125, 158, 141, 33 }, { 142, 142, 142, 0 }, { 142, 142, 142, 0 },
- { 142, 146, 144, 4 }, { 146, 146, 146, 0 }, { 146, 146, 146, 0 }, { 146, 146, 146, 0 }, { 146, 150, 148, 4 }, { 150, 150, 150, 0 }, { 150, 150, 150, 0 }, { 150, 150, 150, 0 },
- { 150, 154, 152, 4 }, { 154, 154, 154, 0 }, { 154, 154, 154, 0 }, { 154, 154, 154, 0 }, { 154, 158, 156, 4 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 },
- { 158, 162, 160, 4 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 166, 164, 4 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 },
- { 166, 170, 168, 4 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 174, 172, 4 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 },
- { 174, 178, 176, 4 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 182, 180, 4 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 },
- { 182, 186, 184, 4 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 190, 188, 4 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 },
- { 190, 195, 192, 5 }, { 190, 195, 192, 5 }, { 190, 199, 194, 9 }, { 195, 195, 195, 0 }, { 190, 203, 196, 13 }, { 195, 199, 197, 4 }, { 190, 207, 198, 17 }, { 199, 199, 199, 0 },
- { 190, 211, 200, 21 }, { 199, 203, 201, 4 }, { 190, 215, 202, 25 }, { 203, 203, 203, 0 }, { 190, 219, 204, 29 }, { 203, 207, 205, 4 }, { 190, 223, 206, 33 }, { 207, 207, 207, 0 },
- { 207, 207, 207, 0 }, { 207, 211, 209, 4 }, { 211, 211, 211, 0 }, { 211, 211, 211, 0 }, { 211, 211, 211, 0 }, { 211, 215, 213, 4 }, { 215, 215, 215, 0 }, { 215, 215, 215, 0 },
- { 215, 215, 215, 0 }, { 215, 219, 217, 4 }, { 219, 219, 219, 0 }, { 219, 219, 219, 0 }, { 219, 219, 219, 0 }, { 219, 223, 221, 4 }, { 223, 223, 223, 0 }, { 223, 223, 223, 0 },
- { 223, 223, 223, 0 }, { 223, 227, 225, 4 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 231, 229, 4 }, { 231, 231, 231, 0 }, { 231, 231, 231, 0 },
- { 231, 231, 231, 0 }, { 231, 235, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 239, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
- { 239, 239, 239, 0 }, { 239, 243, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 247, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
- { 247, 247, 247, 0 }, { 247, 251, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 255, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
- };
- }
-
- class S3TCComputer
- {
- public:
- typedef ParallelMath::Float MFloat;
- typedef ParallelMath::SInt16 MSInt16;
- typedef ParallelMath::UInt15 MUInt15;
- typedef ParallelMath::UInt16 MUInt16;
- typedef ParallelMath::SInt32 MSInt32;
-
- static void Init(MFloat& error)
- {
- error = ParallelMath::MakeFloat(FLT_MAX);
- }
-
- static void QuantizeTo6Bits(MUInt15& v)
- {
- MUInt15 reduced = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(v, ParallelMath::MakeUInt15(253)) + ParallelMath::MakeUInt16(512), 10));
- v = (reduced << 2) | ParallelMath::RightShift(reduced, 4);
- }
-
- static void QuantizeTo5Bits(MUInt15& v)
- {
- MUInt15 reduced = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(v, ParallelMath::MakeUInt15(249)) + ParallelMath::MakeUInt16(1024), 11));
- v = (reduced << 3) | ParallelMath::RightShift(reduced, 2);
- }
-
- static void QuantizeTo565(MUInt15 endPoint[3])
- {
- QuantizeTo5Bits(endPoint[0]);
- QuantizeTo6Bits(endPoint[1]);
- QuantizeTo5Bits(endPoint[2]);
- }
-
- static MFloat ParanoidFactorForSpan(const MSInt16& span)
- {
- return ParallelMath::Abs(ParallelMath::ToFloat(span)) * 0.03f;
- }
-
- static MFloat ParanoidDiff(const MUInt15& a, const MUInt15& b, const MFloat& d)
- {
- MFloat absDiff = ParallelMath::Abs(ParallelMath::ToFloat(ParallelMath::LosslessCast<MSInt16>::Cast(a) - ParallelMath::LosslessCast<MSInt16>::Cast(b)));
- absDiff = absDiff + d;
- return absDiff * absDiff;
- }
-
- static void TestSingleColor(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], int range, const float* channelWeights,
- MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- float channelWeightsSq[3];
-
- for (int ch = 0; ch < 3; ch++)
- channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
-
- MUInt15 totals[3] = { ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0) };
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 3; ch++)
- totals[ch] = totals[ch] + pixels[px][ch];
- }
-
- MUInt15 average[3];
- for (int ch = 0; ch < 3; ch++)
- average[ch] = ParallelMath::RightShift(totals[ch] + ParallelMath::MakeUInt15(8), 4);
-
- const S3TCSingleColorTables::SingleColorTableEntry* rbTable = NULL;
- const S3TCSingleColorTables::SingleColorTableEntry* gTable = NULL;
- if (flags & cvtt::Flags::S3TC_Paranoid)
- {
- if (range == 4)
- {
- rbTable = S3TCSingleColorTables::g_singleColor5_3_p;
- gTable = S3TCSingleColorTables::g_singleColor6_3_p;
- }
- else
- {
- assert(range == 3);
- rbTable = S3TCSingleColorTables::g_singleColor5_2_p;
- gTable = S3TCSingleColorTables::g_singleColor6_2_p;
- }
- }
- else
- {
- if (range == 4)
- {
- rbTable = S3TCSingleColorTables::g_singleColor5_3;
- gTable = S3TCSingleColorTables::g_singleColor6_3;
- }
- else
- {
- assert(range == 3);
- rbTable = S3TCSingleColorTables::g_singleColor5_2;
- gTable = S3TCSingleColorTables::g_singleColor6_2;
- }
- }
-
- MUInt15 interpolated[3];
- MUInt15 eps[2][3];
- MSInt16 spans[3];
- for (int i = 0; i < ParallelMath::ParallelSize; i++)
- {
- for (int ch = 0; ch < 3; ch++)
- {
- uint16_t avg = ParallelMath::Extract(average[ch], i);
- const S3TCSingleColorTables::SingleColorTableEntry& tableEntry = ((ch == 1) ? gTable[avg] : rbTable[avg]);
- ParallelMath::PutUInt15(eps[0][ch], i, tableEntry.m_min);
- ParallelMath::PutUInt15(eps[1][ch], i, tableEntry.m_max);
- ParallelMath::PutUInt15(interpolated[ch], i, tableEntry.m_actualColor);
- ParallelMath::PutSInt16(spans[ch], i, tableEntry.m_span);
- }
- }
-
- MFloat error = ParallelMath::MakeFloatZero();
- if (flags & cvtt::Flags::S3TC_Paranoid)
- {
- MFloat spanParanoidFactors[3];
- for (int ch = 0; ch < 3; ch++)
- spanParanoidFactors[ch] = ParanoidFactorForSpan(spans[ch]);
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 3; ch++)
- error = error + ParanoidDiff(interpolated[ch], pixels[px][ch], spanParanoidFactors[ch]) * channelWeightsSq[ch];
- }
- }
- else
- {
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 3; ch++)
- error = error + ParallelMath::ToFloat(ParallelMath::SqDiffUInt8(interpolated[ch], pixels[px][ch])) * channelWeightsSq[ch];
- }
- }
-
- ParallelMath::FloatCompFlag better = ParallelMath::Less(error, bestError);
- ParallelMath::Int16CompFlag better16 = ParallelMath::FloatFlagToInt16(better);
-
- if (ParallelMath::AnySet(better16))
- {
- bestError = ParallelMath::Min(bestError, error);
- for (int epi = 0; epi < 2; epi++)
- for (int ch = 0; ch < 3; ch++)
- ParallelMath::ConditionalSet(bestEndpoints[epi][ch], better16, eps[epi][ch]);
-
- MUInt15 vindexes = ParallelMath::MakeUInt15(1);
- for (int px = 0; px < 16; px++)
- ParallelMath::ConditionalSet(bestIndexes[px], better16, vindexes);
-
- ParallelMath::ConditionalSet(bestRange, better16, ParallelMath::MakeUInt15(range));
- }
- }
-
- static void TestEndpoints(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const MFloat preWeightedPixels[16][4], const MUInt15 unquantizedEndPoints[2][3], int range, const float* channelWeights,
- MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange, EndpointRefiner<3> *refiner, const ParallelMath::RoundTowardNearestForScope *rtn)
- {
- float channelWeightsSq[3];
-
- for (int ch = 0; ch < 3; ch++)
- channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
-
- MUInt15 endPoints[2][3];
-
- for (int ep = 0; ep < 2; ep++)
- for (int ch = 0; ch < 3; ch++)
- endPoints[ep][ch] = unquantizedEndPoints[ep][ch];
-
- QuantizeTo565(endPoints[0]);
- QuantizeTo565(endPoints[1]);
-
- IndexSelector<3> selector;
- selector.Init<false>(channelWeights, endPoints, range);
-
- MUInt15 indexes[16];
-
- MFloat paranoidFactors[3];
- for (int ch = 0; ch < 3; ch++)
- paranoidFactors[ch] = ParanoidFactorForSpan(ParallelMath::LosslessCast<MSInt16>::Cast(endPoints[0][ch]) - ParallelMath::LosslessCast<MSInt16>::Cast(endPoints[1][ch]));
-
- MFloat error = ParallelMath::MakeFloatZero();
- AggregatedError<3> aggError;
- for (int px = 0; px < 16; px++)
- {
- MUInt15 index = selector.SelectIndexLDR(floatPixels[px], rtn);
- indexes[px] = index;
-
- if (refiner)
- refiner->ContributeUnweightedPW(preWeightedPixels[px], index);
-
- MUInt15 reconstructed[3];
- selector.ReconstructLDRPrecise(index, reconstructed);
-
- if (flags & Flags::S3TC_Paranoid)
- {
- for (int ch = 0; ch < 3; ch++)
- error = error + ParanoidDiff(reconstructed[ch], pixels[px][ch], paranoidFactors[ch]) * channelWeightsSq[ch];
- }
- else
- BCCommon::ComputeErrorLDR<3>(flags, reconstructed, pixels[px], aggError);
- }
-
- if (!(flags & Flags::S3TC_Paranoid))
- error = aggError.Finalize(flags, channelWeightsSq);
-
- ParallelMath::FloatCompFlag better = ParallelMath::Less(error, bestError);
-
- if (ParallelMath::AnySet(better))
- {
- ParallelMath::Int16CompFlag betterInt16 = ParallelMath::FloatFlagToInt16(better);
-
- ParallelMath::ConditionalSet(bestError, better, error);
-
- for (int ep = 0; ep < 2; ep++)
- for (int ch = 0; ch < 3; ch++)
- ParallelMath::ConditionalSet(bestEndpoints[ep][ch], betterInt16, endPoints[ep][ch]);
-
- for (int px = 0; px < 16; px++)
- ParallelMath::ConditionalSet(bestIndexes[px], betterInt16, indexes[px]);
-
- ParallelMath::ConditionalSet(bestRange, betterInt16, ParallelMath::MakeUInt15(static_cast<uint16_t>(range)));
- }
- }
-
- static void TestCounts(uint32_t flags, const int *counts, int nCounts, const MUInt15 &numElements, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const MFloat preWeightedPixels[16][4], bool alphaTest,
- const MFloat floatSortedInputs[16][4], const MFloat preWeightedFloatSortedInputs[16][4], const float *channelWeights, MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange,
- const ParallelMath::RoundTowardNearestForScope* rtn)
- {
- UNREFERENCED_PARAMETER(alphaTest);
- UNREFERENCED_PARAMETER(flags);
-
- EndpointRefiner<3> refiner;
-
- refiner.Init(nCounts, channelWeights);
-
- bool escape = false;
- int e = 0;
- for (int i = 0; i < nCounts; i++)
- {
- for (int n = 0; n < counts[i]; n++)
- {
- ParallelMath::Int16CompFlag valid = ParallelMath::Less(ParallelMath::MakeUInt15(static_cast<uint16_t>(n)), numElements);
- if (!ParallelMath::AnySet(valid))
- {
- escape = true;
- break;
- }
-
- if (ParallelMath::AllSet(valid))
- refiner.ContributeUnweightedPW(preWeightedFloatSortedInputs[e++], ParallelMath::MakeUInt15(static_cast<uint16_t>(i)));
- else
- {
- MFloat weight = ParallelMath::Select(ParallelMath::Int16FlagToFloat(valid), ParallelMath::MakeFloat(1.0f), ParallelMath::MakeFloat(0.0f));
- refiner.ContributePW(preWeightedFloatSortedInputs[e++], ParallelMath::MakeUInt15(static_cast<uint16_t>(i)), weight);
- }
- }
-
- if (escape)
- break;
- }
-
- MUInt15 endPoints[2][3];
- refiner.GetRefinedEndpointsLDR(endPoints, rtn);
-
- TestEndpoints(flags, pixels, floatPixels, preWeightedPixels, endPoints, nCounts, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, NULL, rtn);
- }
-
- static void PackExplicitAlpha(uint32_t flags, const PixelBlockU8* inputs, int inputChannel, uint8_t* packedBlocks, size_t packedBlockStride)
- {
- UNREFERENCED_PARAMETER(flags);
- ParallelMath::RoundTowardNearestForScope rtn;
-
- float weights[1] = { 1.0f };
-
- MUInt15 pixels[16];
- MFloat floatPixels[16];
-
- for (int px = 0; px < 16; px++)
- {
- ParallelMath::ConvertLDRInputs(inputs, px, inputChannel, pixels[px]);
- floatPixels[px] = ParallelMath::ToFloat(pixels[px]);
- }
-
- MUInt15 ep[2][1] = { { ParallelMath::MakeUInt15(0) },{ ParallelMath::MakeUInt15(255) } };
-
- IndexSelector<1> selector;
- selector.Init<false>(weights, ep, 16);
-
- MUInt15 indexes[16];
-
- for (int px = 0; px < 16; px++)
- indexes[px] = selector.SelectIndexLDR(&floatPixels[px], &rtn);
-
- for (int block = 0; block < ParallelMath::ParallelSize; block++)
- {
- for (int px = 0; px < 16; px += 8)
- {
- int index0 = ParallelMath::Extract(indexes[px], block);
- int index1 = ParallelMath::Extract(indexes[px], block);
-
- packedBlocks[px / 2] = static_cast<uint8_t>(index0 | (index1 << 4));
- }
-
- packedBlocks += packedBlockStride;
- }
- }
-
- static void PackInterpolatedAlpha(uint32_t flags, const PixelBlockU8* inputs, int inputChannel, uint8_t* packedBlocks, size_t packedBlockStride, bool isSigned, int maxTweakRounds, int numRefineRounds)
- {
- if (maxTweakRounds < 1)
- maxTweakRounds = 1;
-
- if (numRefineRounds < 1)
- numRefineRounds = 1;
-
- ParallelMath::RoundTowardNearestForScope rtn;
-
- float oneWeight[1] = { 1.0f };
-
- MUInt15 pixels[16];
- MFloat floatPixels[16];
-
- MUInt15 highTerminal = isSigned ? ParallelMath::MakeUInt15(254) : ParallelMath::MakeUInt15(255);
- MUInt15 highTerminalMinusOne = highTerminal - ParallelMath::MakeUInt15(1);
-
- for (int px = 0; px < 16; px++)
- {
- ParallelMath::ConvertLDRInputs(inputs, px, inputChannel, pixels[px]);
-
- if (isSigned)
- pixels[px] = ParallelMath::Min(pixels[px], highTerminal);
-
- floatPixels[px] = ParallelMath::ToFloat(pixels[px]);
- }
-
- MUInt15 sortedPixels[16];
- for (int px = 0; px < 16; px++)
- sortedPixels[px] = pixels[px];
-
- for (int sortEnd = 15; sortEnd > 0; sortEnd--)
- {
- for (int sortOffset = 0; sortOffset < sortEnd; sortOffset++)
- {
- MUInt15 a = sortedPixels[sortOffset];
- MUInt15 b = sortedPixels[sortOffset + 1];
-
- sortedPixels[sortOffset] = ParallelMath::Min(a, b);
- sortedPixels[sortOffset + 1] = ParallelMath::Max(a, b);
- }
- }
-
- MUInt15 zero = ParallelMath::MakeUInt15(0);
- MUInt15 one = ParallelMath::MakeUInt15(1);
-
- MUInt15 bestIsFullRange = zero;
- MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
- MUInt15 bestEP[2] = { zero, zero };
- MUInt15 bestIndexes[16] = {
- zero, zero, zero, zero,
- zero, zero, zero, zero,
- zero, zero, zero, zero,
- zero, zero, zero, zero
- };
-
- // Full-precision
- {
- MUInt15 minEP = sortedPixels[0];
- MUInt15 maxEP = sortedPixels[15];
-
- MFloat base[1] = { ParallelMath::ToFloat(minEP) };
- MFloat offset[1] = { ParallelMath::ToFloat(maxEP - minEP) };
-
- UnfinishedEndpoints<1> ufep = UnfinishedEndpoints<1>(base, offset);
-
- int numTweakRounds = BCCommon::TweakRoundsForRange(8);
- if (numTweakRounds > maxTweakRounds)
- numTweakRounds = maxTweakRounds;
-
- for (int tweak = 0; tweak < numTweakRounds; tweak++)
- {
- MUInt15 ep[2][1];
-
- ufep.FinishLDR(tweak, 8, ep[0], ep[1]);
-
- for (int refinePass = 0; refinePass < numRefineRounds; refinePass++)
- {
- EndpointRefiner<1> refiner;
- refiner.Init(8, oneWeight);
-
- if (isSigned)
- for (int epi = 0; epi < 2; epi++)
- ep[epi][0] = ParallelMath::Min(ep[epi][0], highTerminal);
-
- IndexSelector<1> indexSelector;
- indexSelector.Init<false>(oneWeight, ep, 8);
-
- MUInt15 indexes[16];
-
- AggregatedError<1> aggError;
- for (int px = 0; px < 16; px++)
- {
- MUInt15 index = indexSelector.SelectIndexLDR(&floatPixels[px], &rtn);
-
- MUInt15 reconstructedPixel;
-
- indexSelector.ReconstructLDRPrecise(index, &reconstructedPixel);
- BCCommon::ComputeErrorLDR<1>(flags, &reconstructedPixel, &pixels[px], aggError);
-
- if (refinePass != numRefineRounds - 1)
- refiner.ContributeUnweightedPW(&floatPixels[px], index);
-
- indexes[px] = index;
- }
- MFloat error = aggError.Finalize(flags | Flags::Uniform, oneWeight);
-
- ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
- ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
-
- if (ParallelMath::AnySet(errorBetter16))
- {
- bestError = ParallelMath::Min(error, bestError);
- ParallelMath::ConditionalSet(bestIsFullRange, errorBetter16, one);
- for (int px = 0; px < 16; px++)
- ParallelMath::ConditionalSet(bestIndexes[px], errorBetter16, indexes[px]);
-
- for (int epi = 0; epi < 2; epi++)
- ParallelMath::ConditionalSet(bestEP[epi], errorBetter16, ep[epi][0]);
- }
-
- if (refinePass != numRefineRounds - 1)
- refiner.GetRefinedEndpointsLDR(ep, &rtn);
- }
- }
- }
-
- // Reduced precision with special endpoints
- {
- MUInt15 bestHeuristicMin = sortedPixels[0];
- MUInt15 bestHeuristicMax = sortedPixels[15];
-
- ParallelMath::Int16CompFlag canTryClipping;
-
- // In reduced precision, we want try putting endpoints at the reserved indexes at the ends.
- // The heuristic we use is to assign indexes to the end as long as they aren't off by more than half of the index range.
- // This will usually not find anything, but it's cheap to check.
-
- {
- MUInt15 largestPossibleRange = bestHeuristicMax - bestHeuristicMin; // Max: 255
- MUInt15 lowestPossibleClearance = ParallelMath::Min(bestHeuristicMin, static_cast<MUInt15>(highTerminal - bestHeuristicMax));
-
- MUInt15 lowestPossibleClearanceTimes10 = (lowestPossibleClearance << 2) + (lowestPossibleClearance << 4);
- canTryClipping = ParallelMath::LessOrEqual(lowestPossibleClearanceTimes10, largestPossibleRange);
- }
-
- if (ParallelMath::AnySet(canTryClipping))
- {
- MUInt15 lowClearances[16];
- MUInt15 highClearances[16];
- MUInt15 bestSkipCount = ParallelMath::MakeUInt15(0);
-
- lowClearances[0] = highClearances[0] = ParallelMath::MakeUInt15(0);
-
- for (int px = 1; px < 16; px++)
- {
- lowClearances[px] = sortedPixels[px - 1];
- highClearances[px] = highTerminal - sortedPixels[16 - px];
- }
-
- for (uint16_t firstIndex = 0; firstIndex < 16; firstIndex++)
- {
- uint16_t numSkippedLow = firstIndex;
-
- MUInt15 lowClearance = lowClearances[firstIndex];
-
- for (uint16_t lastIndex = firstIndex; lastIndex < 16; lastIndex++)
- {
- uint16_t numSkippedHigh = 15 - lastIndex;
- uint16_t numSkipped = numSkippedLow + numSkippedHigh;
-
- MUInt15 numSkippedV = ParallelMath::MakeUInt15(numSkipped);
-
- ParallelMath::Int16CompFlag areMoreSkipped = ParallelMath::Less(bestSkipCount, numSkippedV);
-
- if (!ParallelMath::AnySet(areMoreSkipped))
- continue;
-
- MUInt15 clearance = ParallelMath::Max(highClearances[numSkippedHigh], lowClearance);
- MUInt15 clearanceTimes10 = (clearance << 2) + (clearance << 4);
-
- MUInt15 range = sortedPixels[lastIndex] - sortedPixels[firstIndex];
-
- ParallelMath::Int16CompFlag isBetter = (areMoreSkipped & ParallelMath::LessOrEqual(clearanceTimes10, range));
- ParallelMath::ConditionalSet(bestHeuristicMin, isBetter, sortedPixels[firstIndex]);
- ParallelMath::ConditionalSet(bestHeuristicMax, isBetter, sortedPixels[lastIndex]);
- }
- }
- }
-
- MUInt15 bestSimpleMin = one;
- MUInt15 bestSimpleMax = highTerminalMinusOne;
-
- for (int px = 0; px < 16; px++)
- {
- ParallelMath::ConditionalSet(bestSimpleMin, ParallelMath::Less(zero, sortedPixels[15 - px]), sortedPixels[15 - px]);
- ParallelMath::ConditionalSet(bestSimpleMax, ParallelMath::Less(sortedPixels[px], highTerminal), sortedPixels[px]);
- }
-
- MUInt15 minEPs[2] = { bestSimpleMin, bestHeuristicMin };
- MUInt15 maxEPs[2] = { bestSimpleMax, bestHeuristicMax };
-
- int minEPRange = 2;
- if (ParallelMath::AllSet(ParallelMath::Equal(minEPs[0], minEPs[1])))
- minEPRange = 1;
-
- int maxEPRange = 2;
- if (ParallelMath::AllSet(ParallelMath::Equal(maxEPs[0], maxEPs[1])))
- maxEPRange = 1;
-
- for (int minEPIndex = 0; minEPIndex < minEPRange; minEPIndex++)
- {
- for (int maxEPIndex = 0; maxEPIndex < maxEPRange; maxEPIndex++)
- {
- MFloat base[1] = { ParallelMath::ToFloat(minEPs[minEPIndex]) };
- MFloat offset[1] = { ParallelMath::ToFloat(maxEPs[maxEPIndex] - minEPs[minEPIndex]) };
-
- UnfinishedEndpoints<1> ufep = UnfinishedEndpoints<1>(base, offset);
-
- int numTweakRounds = BCCommon::TweakRoundsForRange(6);
- if (numTweakRounds > maxTweakRounds)
- numTweakRounds = maxTweakRounds;
-
- for (int tweak = 0; tweak < numTweakRounds; tweak++)
- {
- MUInt15 ep[2][1];
-
- ufep.FinishLDR(tweak, 8, ep[0], ep[1]);
-
- for (int refinePass = 0; refinePass < numRefineRounds; refinePass++)
- {
- EndpointRefiner<1> refiner;
- refiner.Init(6, oneWeight);
-
- if (isSigned)
- for (int epi = 0; epi < 2; epi++)
- ep[epi][0] = ParallelMath::Min(ep[epi][0], highTerminal);
-
- IndexSelector<1> indexSelector;
- indexSelector.Init<false>(oneWeight, ep, 6);
-
- MUInt15 indexes[16];
- MFloat error = ParallelMath::MakeFloatZero();
-
- for (int px = 0; px < 16; px++)
- {
- MUInt15 selectedIndex = indexSelector.SelectIndexLDR(&floatPixels[px], &rtn);
-
- MUInt15 reconstructedPixel;
-
- indexSelector.ReconstructLDRPrecise(selectedIndex, &reconstructedPixel);
-
- MFloat zeroError = BCCommon::ComputeErrorLDRSimple<1>(flags | Flags::Uniform, &zero, &pixels[px], 1, oneWeight);
- MFloat highTerminalError = BCCommon::ComputeErrorLDRSimple<1>(flags | Flags::Uniform, &highTerminal, &pixels[px], 1, oneWeight);
- MFloat selectedIndexError = BCCommon::ComputeErrorLDRSimple<1>(flags | Flags::Uniform, &reconstructedPixel, &pixels[px], 1, oneWeight);
-
- MFloat bestPixelError = zeroError;
- MUInt15 index = ParallelMath::MakeUInt15(6);
-
- ParallelMath::ConditionalSet(index, ParallelMath::FloatFlagToInt16(ParallelMath::Less(highTerminalError, bestPixelError)), ParallelMath::MakeUInt15(7));
- bestPixelError = ParallelMath::Min(bestPixelError, highTerminalError);
-
- ParallelMath::FloatCompFlag selectedIndexBetter = ParallelMath::Less(selectedIndexError, bestPixelError);
-
- if (ParallelMath::AllSet(selectedIndexBetter))
- {
- if (refinePass != numRefineRounds - 1)
- refiner.ContributeUnweightedPW(&floatPixels[px], selectedIndex);
- }
- else
- {
- MFloat refineWeight = ParallelMath::Select(selectedIndexBetter, ParallelMath::MakeFloat(1.0f), ParallelMath::MakeFloatZero());
-
- if (refinePass != numRefineRounds - 1)
- refiner.ContributePW(&floatPixels[px], selectedIndex, refineWeight);
- }
-
- ParallelMath::ConditionalSet(index, ParallelMath::FloatFlagToInt16(selectedIndexBetter), selectedIndex);
- bestPixelError = ParallelMath::Min(bestPixelError, selectedIndexError);
-
- error = error + bestPixelError;
-
- indexes[px] = index;
- }
-
- ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
- ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
-
- if (ParallelMath::AnySet(errorBetter16))
- {
- bestError = ParallelMath::Min(error, bestError);
- ParallelMath::ConditionalSet(bestIsFullRange, errorBetter16, zero);
- for (int px = 0; px < 16; px++)
- ParallelMath::ConditionalSet(bestIndexes[px], errorBetter16, indexes[px]);
-
- for (int epi = 0; epi < 2; epi++)
- ParallelMath::ConditionalSet(bestEP[epi], errorBetter16, ep[epi][0]);
- }
-
- if (refinePass != numRefineRounds - 1)
- refiner.GetRefinedEndpointsLDR(ep, &rtn);
- }
- }
- }
- }
- }
-
- for (int block = 0; block < ParallelMath::ParallelSize; block++)
- {
- int ep0 = ParallelMath::Extract(bestEP[0], block);
- int ep1 = ParallelMath::Extract(bestEP[1], block);
- int isFullRange = ParallelMath::Extract(bestIsFullRange, block);
-
- if (isSigned)
- {
- ep0 -= 127;
- ep1 -= 127;
-
- assert(ep0 >= -127 && ep0 <= 127);
- assert(ep1 >= -127 && ep1 <= 127);
- }
-
-
- bool swapEndpoints = (isFullRange != 0) != (ep0 > ep1);
-
- if (swapEndpoints)
- std::swap(ep0, ep1);
-
- uint16_t dumpBits = 0;
- int dumpBitsOffset = 0;
- int dumpByteOffset = 2;
- packedBlocks[0] = static_cast<uint8_t>(ep0 & 0xff);
- packedBlocks[1] = static_cast<uint8_t>(ep1 & 0xff);
-
- int maxValue = (isFullRange != 0) ? 7 : 5;
-
- for (int px = 0; px < 16; px++)
- {
- int index = ParallelMath::Extract(bestIndexes[px], block);
-
- if (swapEndpoints && index <= maxValue)
- index = maxValue - index;
-
- if (index != 0)
- {
- if (index == maxValue)
- index = 1;
- else if (index < maxValue)
- index++;
- }
-
- assert(index >= 0 && index < 8);
-
- dumpBits |= static_cast<uint16_t>(index << dumpBitsOffset);
- dumpBitsOffset += 3;
-
- if (dumpBitsOffset >= 8)
- {
- assert(dumpByteOffset < 8);
- packedBlocks[dumpByteOffset] = static_cast<uint8_t>(dumpBits & 0xff);
- dumpBits >>= 8;
- dumpBitsOffset -= 8;
- dumpByteOffset++;
- }
- }
-
- assert(dumpBitsOffset == 0);
- assert(dumpByteOffset == 8);
-
- packedBlocks += packedBlockStride;
- }
- }
-
- static void PackRGB(uint32_t flags, const PixelBlockU8* inputs, uint8_t* packedBlocks, size_t packedBlockStride, const float channelWeights[4], bool alphaTest, float alphaThreshold, bool exhaustive, int maxTweakRounds, int numRefineRounds)
- {
- ParallelMath::RoundTowardNearestForScope rtn;
-
- if (numRefineRounds < 1)
- numRefineRounds = 1;
-
- if (maxTweakRounds < 1)
- maxTweakRounds = 1;
-
- EndpointSelector<3, 8> endpointSelector;
-
- MUInt15 pixels[16][4];
- MFloat floatPixels[16][4];
-
- MFloat preWeightedPixels[16][4];
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 4; ch++)
- ParallelMath::ConvertLDRInputs(inputs, px, ch, pixels[px][ch]);
- }
-
- for (int px = 0; px < 16; px++)
- {
- for (int ch = 0; ch < 4; ch++)
- floatPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]);
- }
-
- if (alphaTest)
- {
- MUInt15 threshold = ParallelMath::MakeUInt15(static_cast<uint16_t>(floor(alphaThreshold * 255.0f + 0.5f)));
-
- for (int px = 0; px < 16; px++)
- {
- ParallelMath::Int16CompFlag belowThreshold = ParallelMath::Less(pixels[px][3], threshold);
- pixels[px][3] = ParallelMath::Select(belowThreshold, ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(255));
- }
- }
-
- BCCommon::PreWeightPixelsLDR<4>(preWeightedPixels, pixels, channelWeights);
-
- MUInt15 minAlpha = ParallelMath::MakeUInt15(255);
-
- for (int px = 0; px < 16; px++)
- minAlpha = ParallelMath::Min(minAlpha, pixels[px][3]);
-
- MFloat pixelWeights[16];
- for (int px = 0; px < 16; px++)
- {
- pixelWeights[px] = ParallelMath::MakeFloat(1.0f);
- if (alphaTest)
- {
- ParallelMath::Int16CompFlag isTransparent = ParallelMath::Less(pixels[px][3], ParallelMath::MakeUInt15(255));
-
- ParallelMath::ConditionalSet(pixelWeights[px], ParallelMath::Int16FlagToFloat(isTransparent), ParallelMath::MakeFloatZero());
- }
- }
-
- for (int pass = 0; pass < NumEndpointSelectorPasses; pass++)
- {
- for (int px = 0; px < 16; px++)
- endpointSelector.ContributePass(preWeightedPixels[px], pass, pixelWeights[px]);
-
- endpointSelector.FinishPass(pass);
- }
-
- UnfinishedEndpoints<3> ufep = endpointSelector.GetEndpoints(channelWeights);
-
- MUInt15 bestEndpoints[2][3];
- MUInt15 bestIndexes[16];
- MUInt15 bestRange = ParallelMath::MakeUInt15(0);
- MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
-
- for (int px = 0; px < 16; px++)
- bestIndexes[px] = ParallelMath::MakeUInt15(0);
-
- for (int ep = 0; ep < 2; ep++)
- for (int ch = 0; ch < 3; ch++)
- bestEndpoints[ep][ch] = ParallelMath::MakeUInt15(0);
-
- if (exhaustive)
- {
- MSInt16 sortBins[16];
-
- {
- // Compute an 11-bit index, change it to signed, stuff it in the high bits of the sort bins,
- // and pack the original indexes into the low bits.
-
- MUInt15 sortEP[2][3];
- ufep.FinishLDR(0, 11, sortEP[0], sortEP[1]);
-
- IndexSelector<3> sortSelector;
- sortSelector.Init<false>(channelWeights, sortEP, 1 << 11);
-
- for (int16_t px = 0; px < 16; px++)
- {
- MSInt16 sortBin = ParallelMath::LosslessCast<MSInt16>::Cast(sortSelector.SelectIndexLDR(floatPixels[px], &rtn) << 4);
-
- if (alphaTest)
- {
- ParallelMath::Int16CompFlag isTransparent = ParallelMath::Less(pixels[px][3], ParallelMath::MakeUInt15(255));
-
- ParallelMath::ConditionalSet(sortBin, isTransparent, ParallelMath::MakeSInt16(-16)); // 0xfff0
- }
-
- sortBin = sortBin + ParallelMath::MakeSInt16(px);
-
- sortBins[px] = sortBin;
- }
- }
-
- // Sort bins
- for (int sortEnd = 1; sortEnd < 16; sortEnd++)
- {
- for (int sortLoc = sortEnd; sortLoc > 0; sortLoc--)
- {
- MSInt16 a = sortBins[sortLoc];
- MSInt16 b = sortBins[sortLoc - 1];
-
- sortBins[sortLoc] = ParallelMath::Max(a, b);
- sortBins[sortLoc - 1] = ParallelMath::Min(a, b);
- }
- }
-
- MUInt15 firstElement = ParallelMath::MakeUInt15(0);
- for (uint16_t e = 0; e < 16; e++)
- {
- ParallelMath::Int16CompFlag isInvalid = ParallelMath::Less(sortBins[e], ParallelMath::MakeSInt16(0));
- ParallelMath::ConditionalSet(firstElement, isInvalid, ParallelMath::MakeUInt15(e + 1));
- if (!ParallelMath::AnySet(isInvalid))
- break;
- }
-
- MUInt15 numElements = ParallelMath::MakeUInt15(16) - firstElement;
-
- MUInt15 sortedInputs[16][4];
- MFloat floatSortedInputs[16][4];
- MFloat pwFloatSortedInputs[16][4];
-
- for (int e = 0; e < 16; e++)
- {
- for (int ch = 0; ch < 4; ch++)
- sortedInputs[e][ch] = ParallelMath::MakeUInt15(0);
- }
-
- for (int block = 0; block < ParallelMath::ParallelSize; block++)
- {
- for (int e = ParallelMath::Extract(firstElement, block); e < 16; e++)
- {
- ParallelMath::ScalarUInt16 sortBin = ParallelMath::Extract(sortBins[e], block);
- int originalIndex = (sortBin & 15);
-
- for (int ch = 0; ch < 4; ch++)
- ParallelMath::PutUInt15(sortedInputs[15 - e][ch], block, ParallelMath::Extract(pixels[originalIndex][ch], block));
- }
- }
-
- for (int e = 0; e < 16; e++)
- {
- for (int ch = 0; ch < 4; ch++)
- {
- MFloat f = ParallelMath::ToFloat(sortedInputs[e][ch]);
- floatSortedInputs[e][ch] = f;
- pwFloatSortedInputs[e][ch] = f * channelWeights[ch];
- }
- }
-
- for (int n0 = 0; n0 <= 15; n0++)
- {
- int remainingFor1 = 16 - n0;
- if (remainingFor1 == 16)
- remainingFor1 = 15;
-
- for (int n1 = 0; n1 <= remainingFor1; n1++)
- {
- int remainingFor2 = 16 - n1 - n0;
- if (remainingFor2 == 16)
- remainingFor2 = 15;
-
- for (int n2 = 0; n2 <= remainingFor2; n2++)
- {
- int n3 = 16 - n2 - n1 - n0;
-
- if (n3 == 16)
- continue;
-
- int counts[4] = { n0, n1, n2, n3 };
-
- TestCounts(flags, counts, 4, numElements, pixels, floatPixels, preWeightedPixels, alphaTest, floatSortedInputs, pwFloatSortedInputs, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
- }
- }
- }
-
- TestSingleColor(flags, pixels, floatPixels, 4, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
-
- if (alphaTest)
- {
- for (int n0 = 0; n0 <= 15; n0++)
- {
- int remainingFor1 = 16 - n0;
- if (remainingFor1 == 16)
- remainingFor1 = 15;
-
- for (int n1 = 0; n1 <= remainingFor1; n1++)
- {
- int n2 = 16 - n1 - n0;
-
- if (n2 == 16)
- continue;
-
- int counts[3] = { n0, n1, n2 };
-
- TestCounts(flags, counts, 3, numElements, pixels, floatPixels, preWeightedPixels, alphaTest, floatSortedInputs, pwFloatSortedInputs, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
- }
- }
-
- TestSingleColor(flags, pixels, floatPixels, 3, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
- }
- }
- else
- {
- int minRange = alphaTest ? 3 : 4;
-
- for (int range = minRange; range <= 4; range++)
- {
- int tweakRounds = BCCommon::TweakRoundsForRange(range);
- if (tweakRounds > maxTweakRounds)
- tweakRounds = maxTweakRounds;
-
- for (int tweak = 0; tweak < tweakRounds; tweak++)
- {
- MUInt15 endPoints[2][3];
-
- ufep.FinishLDR(tweak, range, endPoints[0], endPoints[1]);
-
- for (int refine = 0; refine < numRefineRounds; refine++)
- {
- EndpointRefiner<3> refiner;
- refiner.Init(range, channelWeights);
-
- TestEndpoints(flags, pixels, floatPixels, preWeightedPixels, endPoints, range, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &refiner, &rtn);
-
- if (refine != numRefineRounds - 1)
- refiner.GetRefinedEndpointsLDR(endPoints, &rtn);
- }
- }
- }
- }
-
- for (int block = 0; block < ParallelMath::ParallelSize; block++)
- {
- ParallelMath::ScalarUInt16 range = ParallelMath::Extract(bestRange, block);
- assert(range == 3 || range == 4);
-
- ParallelMath::ScalarUInt16 compressedEP[2];
- for (int ep = 0; ep < 2; ep++)
- {
- ParallelMath::ScalarUInt16 endPoint[3];
- for (int ch = 0; ch < 3; ch++)
- endPoint[ch] = ParallelMath::Extract(bestEndpoints[ep][ch], block);
-
- int compressed = (endPoint[0] & 0xf8) << 8;
- compressed |= (endPoint[1] & 0xfc) << 3;
- compressed |= (endPoint[2] & 0xf8) >> 3;
-
- compressedEP[ep] = static_cast<ParallelMath::ScalarUInt16>(compressed);
- }
-
- int indexOrder[4];
-
- if (range == 4)
- {
- if (compressedEP[0] == compressedEP[1])
- {
- indexOrder[0] = 0;
- indexOrder[1] = 0;
- indexOrder[2] = 0;
- indexOrder[3] = 0;
- }
- else if (compressedEP[0] < compressedEP[1])
- {
- std::swap(compressedEP[0], compressedEP[1]);
- indexOrder[0] = 1;
- indexOrder[1] = 3;
- indexOrder[2] = 2;
- indexOrder[3] = 0;
- }
- else
- {
- indexOrder[0] = 0;
- indexOrder[1] = 2;
- indexOrder[2] = 3;
- indexOrder[3] = 1;
- }
- }
- else
- {
- assert(range == 3);
-
- if (compressedEP[0] > compressedEP[1])
- {
- std::swap(compressedEP[0], compressedEP[1]);
- indexOrder[0] = 1;
- indexOrder[1] = 2;
- indexOrder[2] = 0;
- }
- else
- {
- indexOrder[0] = 0;
- indexOrder[1] = 2;
- indexOrder[2] = 1;
- }
- indexOrder[3] = 3;
- }
-
- packedBlocks[0] = static_cast<uint8_t>(compressedEP[0] & 0xff);
- packedBlocks[1] = static_cast<uint8_t>((compressedEP[0] >> 8) & 0xff);
- packedBlocks[2] = static_cast<uint8_t>(compressedEP[1] & 0xff);
- packedBlocks[3] = static_cast<uint8_t>((compressedEP[1] >> 8) & 0xff);
-
- for (int i = 0; i < 16; i += 4)
- {
- int packedIndexes = 0;
- for (int subi = 0; subi < 4; subi++)
- {
- ParallelMath::ScalarUInt16 index = ParallelMath::Extract(bestIndexes[i + subi], block);
- packedIndexes |= (indexOrder[index] << (subi * 2));
- }
-
- packedBlocks[4 + i / 4] = static_cast<uint8_t>(packedIndexes);
- }
-
- packedBlocks += packedBlockStride;
- }
- }
- };
-
- // Signed input blocks are converted into unsigned space, with the maximum value being 254
- void BiasSignedInput(PixelBlockU8 inputNormalized[ParallelMath::ParallelSize], const PixelBlockS8 inputSigned[ParallelMath::ParallelSize])
- {
- for (size_t block = 0; block < ParallelMath::ParallelSize; block++)
- {
- const PixelBlockS8& inputSignedBlock = inputSigned[block];
- PixelBlockU8& inputNormalizedBlock = inputNormalized[block];
-
- for (size_t px = 0; px < 16; px++)
- {
- for (size_t ch = 0; ch < 4; ch++)
- inputNormalizedBlock.m_pixels[px][ch] = static_cast<uint8_t>(std::max<int>(inputSignedBlock.m_pixels[px][ch], -127) + 127);
- }
- }
- }
-
- void FillWeights(const Options &options, float channelWeights[4])
- {
- if (options.flags & Flags::Uniform)
- channelWeights[0] = channelWeights[1] = channelWeights[2] = channelWeights[3] = 1.0f;
- else
- {
- channelWeights[0] = options.redWeight;
- channelWeights[1] = options.greenWeight;
- channelWeights[2] = options.blueWeight;
- channelWeights[3] = options.alphaWeight;
- }
- }
- }
-
- namespace Kernels
- {
- void EncodeBC7(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::BC7Computer::Pack(options.flags, pBlocks + blockBase, pBC, channelWeights, options.seedPoints, options.refineRoundsBC7);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void EncodeBC6HU(uint8_t *pBC, const PixelBlockF16 *pBlocks, const cvtt::Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::BC6HComputer::Pack(options.flags, pBlocks + blockBase, pBC, channelWeights, false, options.seedPoints, options.refineRoundsBC6H);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void EncodeBC6HS(uint8_t *pBC, const PixelBlockF16 *pBlocks, const cvtt::Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::BC6HComputer::Pack(options.flags, pBlocks + blockBase, pBC, channelWeights, true, options.seedPoints, options.refineRoundsBC6H);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void EncodeBC1(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::S3TCComputer::PackRGB(options.flags, pBlocks + blockBase, pBC, 8, channelWeights, true, options.threshold, (options.flags & Flags::S3TC_Exhaustive) != 0, options.seedPoints, options.refineRoundsS3TC);
- pBC += ParallelMath::ParallelSize * 8;
- }
- }
-
- void EncodeBC2(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::S3TCComputer::PackRGB(options.flags, pBlocks + blockBase, pBC + 8, 16, channelWeights, false, 1.0f, (options.flags & Flags::S3TC_Exhaustive) != 0, options.seedPoints, options.refineRoundsS3TC);
- Internal::S3TCComputer::PackExplicitAlpha(options.flags, pBlocks + blockBase, 3, pBC, 16);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void EncodeBC3(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::S3TCComputer::PackRGB(options.flags, pBlocks + blockBase, pBC + 8, 16, channelWeights, false, 1.0f, (options.flags & Flags::S3TC_Exhaustive) != 0, options.seedPoints, options.refineRoundsS3TC);
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 3, pBC, 16, false, options.seedPoints, options.refineRoundsIIC);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void EncodeBC4U(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 0, pBC, 8, false, options.seedPoints, options.refineRoundsIIC);
- pBC += ParallelMath::ParallelSize * 8;
- }
- }
-
- void EncodeBC4S(uint8_t *pBC, const PixelBlockS8 *pBlocks, const Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- PixelBlockU8 inputBlocks[ParallelMath::ParallelSize];
- Internal::BiasSignedInput(inputBlocks, pBlocks + blockBase);
-
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, inputBlocks, 0, pBC, 8, true, options.seedPoints, options.refineRoundsIIC);
- pBC += ParallelMath::ParallelSize * 8;
- }
- }
-
- void EncodeBC5U(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 0, pBC, 16, false, options.seedPoints, options.refineRoundsIIC);
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 1, pBC + 8, 16, false, options.seedPoints, options.refineRoundsIIC);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void EncodeBC5S(uint8_t *pBC, const PixelBlockS8 *pBlocks, const Options &options)
- {
- assert(pBlocks);
- assert(pBC);
-
- float channelWeights[4];
- Internal::FillWeights(options, channelWeights);
-
- for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
- {
- PixelBlockU8 inputBlocks[ParallelMath::ParallelSize];
- Internal::BiasSignedInput(inputBlocks, pBlocks + blockBase);
-
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, inputBlocks, 0, pBC, 16, true, options.seedPoints, options.refineRoundsIIC);
- Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, inputBlocks, 1, pBC + 8, 16, true, options.seedPoints, options.refineRoundsIIC);
- pBC += ParallelMath::ParallelSize * 16;
- }
- }
-
- void DecodeBC7(PixelBlockU8 *pBlocks, const uint8_t *pBC)
- {
- assert(pBlocks);
- assert(pBC);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
- {
- Internal::BC7Computer::UnpackOne(pBlocks[blockBase], pBC);
- pBC += 16;
- }
- }
-
- void DecodeBC6HU(PixelBlockF16 *pBlocks, const uint8_t *pBC)
- {
- assert(pBlocks);
- assert(pBC);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
- {
- Internal::BC6HComputer::UnpackOne(pBlocks[blockBase], pBC, false);
- pBC += 16;
- }
- }
-
- void DecodeBC6HS(PixelBlockF16 *pBlocks, const uint8_t *pBC)
- {
- assert(pBlocks);
- assert(pBC);
-
- for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
- {
- Internal::BC6HComputer::UnpackOne(pBlocks[blockBase], pBC, true);
- pBC += 16;
- }
- }
- }
-}
diff --git a/thirdparty/cvtt/ConvectionKernels.h b/thirdparty/cvtt/ConvectionKernels.h
index fb5ca130f9..3da48405ff 100644
--- a/thirdparty/cvtt/ConvectionKernels.h
+++ b/thirdparty/cvtt/ConvectionKernels.h
@@ -25,21 +25,13 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#ifndef __CVTT_CONVECTION_KERNELS__
#define __CVTT_CONVECTION_KERNELS__
+#include <stddef.h>
#include <stdint.h>
namespace cvtt
{
namespace Flags
{
- // Enable partitioned modes in BC7 encoding (slower, better quality)
- const uint32_t BC7_EnablePartitioning = 0x001;
-
- // Enable 3-partition modes in BC7 encoding (slower, better quality, requires BC7_EnablePartitioning)
- const uint32_t BC7_Enable3Subsets = 0x002;
-
- // Enable dual-plane modes in BC7 encoding (slower, better quality)
- const uint32_t BC7_EnableDualPlane = 0x004;
-
// Use fast indexing in BC7 encoding (about 2x faster, slightly worse quality)
const uint32_t BC7_FastIndexing = 0x008;
@@ -61,13 +53,19 @@ namespace cvtt
// Uniform color channel importance
const uint32_t Uniform = 0x200;
+ // Use fake BT.709 color space for etc2comp compatibility (slower)
+ const uint32_t ETC_UseFakeBT709 = 0x400;
+
+ // Use accurate quantization functions when quantizing fake BT.709 (much slower, marginal improvement on specific blocks)
+ const uint32_t ETC_FakeBT709Accurate = 0x800;
+
// Misc useful default flag combinations
- const uint32_t Fastest = (BC6H_FastIndexing | S3TC_Paranoid);
- const uint32_t Faster = (BC7_EnableDualPlane | BC6H_FastIndexing | S3TC_Paranoid);
- const uint32_t Fast = (BC7_EnablePartitioning | BC7_EnableDualPlane | BC7_FastIndexing | S3TC_Paranoid);
- const uint32_t Default = (BC7_EnablePartitioning | BC7_EnableDualPlane | BC7_Enable3Subsets | BC7_FastIndexing | S3TC_Paranoid);
- const uint32_t Better = (BC7_EnablePartitioning | BC7_EnableDualPlane | BC7_Enable3Subsets | S3TC_Paranoid | S3TC_Exhaustive);
- const uint32_t Ultra = (BC7_EnablePartitioning | BC7_EnableDualPlane | BC7_Enable3Subsets | BC7_TrySingleColor | S3TC_Paranoid | S3TC_Exhaustive);
+ const uint32_t Fastest = (BC6H_FastIndexing | BC7_FastIndexing | S3TC_Paranoid);
+ const uint32_t Faster = (BC6H_FastIndexing | BC7_FastIndexing | S3TC_Paranoid);
+ const uint32_t Fast = (BC7_FastIndexing | S3TC_Paranoid);
+ const uint32_t Default = (BC7_FastIndexing | S3TC_Paranoid);
+ const uint32_t Better = (S3TC_Paranoid | S3TC_Exhaustive);
+ const uint32_t Ultra = (BC7_TrySingleColor | S3TC_Paranoid | S3TC_Exhaustive | ETC_FakeBT709Accurate);
}
const unsigned int NumParallelBlocks = 8;
@@ -81,7 +79,7 @@ namespace cvtt
float blueWeight; // Blue channel importance
float alphaWeight; // Alpha channel importance
- int refineRoundsBC7; // Number of refine rounds for BC7
+ int refineRoundsBC7; // Number of refine rounds for BC7
int refineRoundsBC6H; // Number of refine rounds for BC6H (max 3)
int refineRoundsIIC; // Number of refine rounds for independent interpolated channels (BC3 alpha, BC4, BC5)
int refineRoundsS3TC; // Number of refine rounds for S3TC RGB
@@ -104,6 +102,102 @@ namespace cvtt
}
};
+ struct BC7FineTuningParams
+ {
+ // Seed point counts for each mode+configuration combination
+ uint8_t mode0SP[16];
+ uint8_t mode1SP[64];
+ uint8_t mode2SP[64];
+ uint8_t mode3SP[64];
+ uint8_t mode4SP[4][2];
+ uint8_t mode5SP[4];
+ uint8_t mode6SP;
+ uint8_t mode7SP[64];
+
+ BC7FineTuningParams()
+ {
+ for (int i = 0; i < 16; i++)
+ this->mode0SP[i] = 4;
+
+ for (int i = 0; i < 64; i++)
+ {
+ this->mode1SP[i] = 4;
+ this->mode2SP[i] = 4;
+ this->mode3SP[i] = 4;
+ this->mode7SP[i] = 4;
+ }
+
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < 2; j++)
+ this->mode4SP[i][j] = 4;
+
+ this->mode5SP[i] = 4;
+ }
+
+ this->mode6SP = 4;
+ }
+ };
+
+ struct BC7EncodingPlan
+ {
+ static const int kNumRGBAShapes = 129;
+ static const int kNumRGBShapes = 243;
+
+ uint64_t mode1PartitionEnabled;
+ uint64_t mode2PartitionEnabled;
+ uint64_t mode3PartitionEnabled;
+ uint16_t mode0PartitionEnabled;
+ uint64_t mode7RGBAPartitionEnabled;
+ uint64_t mode7RGBPartitionEnabled;
+ uint8_t mode4SP[4][2];
+ uint8_t mode5SP[4];
+ bool mode6Enabled;
+
+ uint8_t seedPointsForShapeRGB[kNumRGBShapes];
+ uint8_t seedPointsForShapeRGBA[kNumRGBAShapes];
+
+ uint8_t rgbaShapeList[kNumRGBAShapes];
+ uint8_t rgbaNumShapesToEvaluate;
+
+ uint8_t rgbShapeList[kNumRGBShapes];
+ uint8_t rgbNumShapesToEvaluate;
+
+ BC7EncodingPlan()
+ {
+ for (int i = 0; i < kNumRGBShapes; i++)
+ {
+ this->rgbShapeList[i] = i;
+ this->seedPointsForShapeRGB[i] = 4;
+ }
+ this->rgbNumShapesToEvaluate = kNumRGBShapes;
+
+ for (int i = 0; i < kNumRGBAShapes; i++)
+ {
+ this->rgbaShapeList[i] = i;
+ this->seedPointsForShapeRGBA[i] = 4;
+ }
+ this->rgbaNumShapesToEvaluate = kNumRGBAShapes;
+
+
+ this->mode0PartitionEnabled = 0xffff;
+ this->mode1PartitionEnabled = 0xffffffffffffffffULL;
+ this->mode2PartitionEnabled = 0xffffffffffffffffULL;
+ this->mode3PartitionEnabled = 0xffffffffffffffffULL;
+ this->mode6Enabled = true;
+ this->mode7RGBPartitionEnabled = 0xffffffffffffffffULL;
+ this->mode7RGBAPartitionEnabled = 0xffffffffffffffffULL;
+
+ for (int i = 0; i < 4; i++)
+ {
+ for (int j = 0; j < 2; j++)
+ this->mode4SP[i][j] = 4;
+
+ this->mode5SP[i] = 4;
+ }
+ }
+ };
+
// RGBA input block for unsigned 8-bit formats
struct PixelBlockU8
{
@@ -116,14 +210,34 @@ namespace cvtt
int8_t m_pixels[16][4];
};
+ struct PixelBlockScalarS16
+ {
+ int16_t m_pixels[16];
+ };
+
// RGBA input block for half-precision float formats (bit-cast to int16_t)
struct PixelBlockF16
{
int16_t m_pixels[16][4];
};
+ class ETC2CompressionData
+ {
+ protected:
+ ETC2CompressionData() {}
+ };
+
+ class ETC1CompressionData
+ {
+ protected:
+ ETC1CompressionData() {}
+ };
+
namespace Kernels
{
+ typedef void* allocFunc_t(void *context, size_t size);
+ typedef void freeFunc_t(void *context, void* ptr, size_t size);
+
// NOTE: All functions accept and output NumParallelBlocks blocks at once
void EncodeBC1(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options);
void EncodeBC2(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options);
@@ -134,7 +248,28 @@ namespace cvtt
void EncodeBC5S(uint8_t *pBC, const PixelBlockS8 *pBlocks, const Options &options);
void EncodeBC6HU(uint8_t *pBC, const PixelBlockF16 *pBlocks, const Options &options);
void EncodeBC6HS(uint8_t *pBC, const PixelBlockF16 *pBlocks, const Options &options);
- void EncodeBC7(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options);
+ void EncodeBC7(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options, const BC7EncodingPlan &encodingPlan);
+ void EncodeETC1(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options, ETC1CompressionData *compressionData);
+ void EncodeETC2(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options, ETC2CompressionData *compressionData);
+ void EncodeETC2RGBA(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, cvtt::ETC2CompressionData *compressionData);
+ void EncodeETC2PunchthroughAlpha(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, cvtt::ETC2CompressionData *compressionData);
+
+ void EncodeETC2Alpha(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options);
+ void EncodeETC2Alpha11(uint8_t *pBC, const PixelBlockScalarS16 *pBlocks, bool isSigned, const cvtt::Options &options);
+
+ // Generates a BC7 encoding plan from a quality parameter that ranges from 1 (fastest) to 100 (best)
+ void ConfigureBC7EncodingPlanFromQuality(BC7EncodingPlan &encodingPlan, int quality);
+
+ // Generates a BC7 encoding plan from fine-tuning parameters.
+ bool ConfigureBC7EncodingPlanFromFineTuningParams(BC7EncodingPlan &encodingPlan, const BC7FineTuningParams &params);
+
+ // ETC compression requires temporary storage that normally consumes a large amount of stack space.
+ // To allocate and release it, use one of these functions.
+ ETC2CompressionData *AllocETC2Data(allocFunc_t allocFunc, void *context, const cvtt::Options &options);
+ void ReleaseETC2Data(ETC2CompressionData *compressionData, freeFunc_t freeFunc);
+
+ ETC1CompressionData *AllocETC1Data(allocFunc_t allocFunc, void *context);
+ void ReleaseETC1Data(ETC1CompressionData *compressionData, freeFunc_t freeFunc);
void DecodeBC6HU(PixelBlockF16 *pBlocks, const uint8_t *pBC);
void DecodeBC6HS(PixelBlockF16 *pBlocks, const uint8_t *pBC);
diff --git a/thirdparty/cvtt/ConvectionKernels_API.cpp b/thirdparty/cvtt/ConvectionKernels_API.cpp
new file mode 100644
index 0000000000..707e71d474
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_API.cpp
@@ -0,0 +1,346 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include <stdint.h>
+#include "ConvectionKernels.h"
+#include "ConvectionKernels_Util.h"
+#include "ConvectionKernels_BC67.h"
+#include "ConvectionKernels_ETC.h"
+#include "ConvectionKernels_S3TC.h"
+
+#include <assert.h>
+
+namespace cvtt
+{
+ namespace Kernels
+ {
+ void EncodeBC7(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, const BC7EncodingPlan &encodingPlan)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::BC7Computer::Pack(options.flags, pBlocks + blockBase, pBC, channelWeights, encodingPlan, options.refineRoundsBC7);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeBC6HU(uint8_t *pBC, const PixelBlockF16 *pBlocks, const cvtt::Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::BC6HComputer::Pack(options.flags, pBlocks + blockBase, pBC, channelWeights, false, options.seedPoints, options.refineRoundsBC6H);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeBC6HS(uint8_t *pBC, const PixelBlockF16 *pBlocks, const cvtt::Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::BC6HComputer::Pack(options.flags, pBlocks + blockBase, pBC, channelWeights, true, options.seedPoints, options.refineRoundsBC6H);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeBC1(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::S3TCComputer::PackRGB(options.flags, pBlocks + blockBase, pBC, 8, channelWeights, true, options.threshold, (options.flags & Flags::S3TC_Exhaustive) != 0, options.seedPoints, options.refineRoundsS3TC);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeBC2(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::S3TCComputer::PackRGB(options.flags, pBlocks + blockBase, pBC + 8, 16, channelWeights, false, 1.0f, (options.flags & Flags::S3TC_Exhaustive) != 0, options.seedPoints, options.refineRoundsS3TC);
+ Internal::S3TCComputer::PackExplicitAlpha(options.flags, pBlocks + blockBase, 3, pBC, 16);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeBC3(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::S3TCComputer::PackRGB(options.flags, pBlocks + blockBase, pBC + 8, 16, channelWeights, false, 1.0f, (options.flags & Flags::S3TC_Exhaustive) != 0, options.seedPoints, options.refineRoundsS3TC);
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 3, pBC, 16, false, options.seedPoints, options.refineRoundsIIC);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeBC4U(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 0, pBC, 8, false, options.seedPoints, options.refineRoundsIIC);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeBC4S(uint8_t *pBC, const PixelBlockS8 *pBlocks, const Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ PixelBlockU8 inputBlocks[ParallelMath::ParallelSize];
+ Util::BiasSignedInput(inputBlocks, pBlocks + blockBase);
+
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, inputBlocks, 0, pBC, 8, true, options.seedPoints, options.refineRoundsIIC);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeBC5U(uint8_t *pBC, const PixelBlockU8 *pBlocks, const Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 0, pBC, 16, false, options.seedPoints, options.refineRoundsIIC);
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, pBlocks + blockBase, 1, pBC + 8, 16, false, options.seedPoints, options.refineRoundsIIC);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeBC5S(uint8_t *pBC, const PixelBlockS8 *pBlocks, const Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ PixelBlockU8 inputBlocks[ParallelMath::ParallelSize];
+ Util::BiasSignedInput(inputBlocks, pBlocks + blockBase);
+
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, inputBlocks, 0, pBC, 16, true, options.seedPoints, options.refineRoundsIIC);
+ Internal::S3TCComputer::PackInterpolatedAlpha(options.flags, inputBlocks, 1, pBC + 8, 16, true, options.seedPoints, options.refineRoundsIIC);
+ pBC += ParallelMath::ParallelSize * 16;
+ }
+ }
+
+ void EncodeETC1(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, cvtt::ETC1CompressionData *compressionData)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::ETCComputer::CompressETC1Block(pBC, pBlocks + blockBase, compressionData, options);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeETC2(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, cvtt::ETC2CompressionData *compressionData)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::ETCComputer::CompressETC2Block(pBC, pBlocks + blockBase, compressionData, options, false);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeETC2PunchthroughAlpha(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, cvtt::ETC2CompressionData *compressionData)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ float channelWeights[4];
+ Util::FillWeights(options, channelWeights);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::ETCComputer::CompressETC2Block(pBC, pBlocks + blockBase, compressionData, options, true);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeETC2Alpha(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::ETCComputer::CompressETC2AlphaBlock(pBC, pBlocks + blockBase, options);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeETC2Alpha11(uint8_t *pBC, const PixelBlockScalarS16 *pBlocks, bool isSigned, const cvtt::Options &options)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase += ParallelMath::ParallelSize)
+ {
+ Internal::ETCComputer::CompressEACBlock(pBC, pBlocks + blockBase, isSigned, options);
+ pBC += ParallelMath::ParallelSize * 8;
+ }
+ }
+
+ void EncodeETC2RGBA(uint8_t *pBC, const PixelBlockU8 *pBlocks, const cvtt::Options &options, cvtt::ETC2CompressionData *compressionData)
+ {
+ uint8_t alphaBlockData[cvtt::NumParallelBlocks * 8];
+ uint8_t colorBlockData[cvtt::NumParallelBlocks * 8];
+
+ EncodeETC2(colorBlockData, pBlocks, options, compressionData);
+ EncodeETC2Alpha(alphaBlockData, pBlocks, options);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
+ {
+ for (size_t blockData = 0; blockData < 8; blockData++)
+ pBC[blockBase * 16 + blockData] = alphaBlockData[blockBase * 8 + blockData];
+
+ for (size_t blockData = 0; blockData < 8; blockData++)
+ pBC[blockBase * 16 + 8 + blockData] = colorBlockData[blockBase * 8 + blockData];
+ }
+ }
+
+ void DecodeBC7(PixelBlockU8 *pBlocks, const uint8_t *pBC)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
+ {
+ Internal::BC7Computer::UnpackOne(pBlocks[blockBase], pBC);
+ pBC += 16;
+ }
+ }
+
+ void DecodeBC6HU(PixelBlockF16 *pBlocks, const uint8_t *pBC)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
+ {
+ Internal::BC6HComputer::UnpackOne(pBlocks[blockBase], pBC, false);
+ pBC += 16;
+ }
+ }
+
+ void DecodeBC6HS(PixelBlockF16 *pBlocks, const uint8_t *pBC)
+ {
+ assert(pBlocks);
+ assert(pBC);
+
+ for (size_t blockBase = 0; blockBase < cvtt::NumParallelBlocks; blockBase++)
+ {
+ Internal::BC6HComputer::UnpackOne(pBlocks[blockBase], pBC, true);
+ pBC += 16;
+ }
+ }
+
+ ETC1CompressionData *AllocETC1Data(allocFunc_t allocFunc, void *context)
+ {
+ return cvtt::Internal::ETCComputer::AllocETC1Data(allocFunc, context);
+ }
+
+ void ReleaseETC1Data(ETC1CompressionData *compressionData, freeFunc_t freeFunc)
+ {
+ cvtt::Internal::ETCComputer::ReleaseETC1Data(compressionData, freeFunc);
+ }
+
+ ETC2CompressionData *AllocETC2Data(allocFunc_t allocFunc, void *context, const cvtt::Options &options)
+ {
+ return cvtt::Internal::ETCComputer::AllocETC2Data(allocFunc, context, options);
+ }
+
+ void ReleaseETC2Data(ETC2CompressionData *compressionData, freeFunc_t freeFunc)
+ {
+ cvtt::Internal::ETCComputer::ReleaseETC2Data(compressionData, freeFunc);
+ }
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_AggregatedError.h b/thirdparty/cvtt/ConvectionKernels_AggregatedError.h
new file mode 100644
index 0000000000..9f9356a345
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_AggregatedError.h
@@ -0,0 +1,55 @@
+#pragma once
+#ifndef __CVTT_AGGREGATEDERROR_H__
+#define __CVTT_AGGREGATEDERROR_H__
+
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ template<int TVectorSize>
+ class AggregatedError
+ {
+ public:
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt31 MUInt31;
+ typedef ParallelMath::Float MFloat;
+
+ AggregatedError()
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_errorUnweighted[ch] = ParallelMath::MakeUInt31(0);
+ }
+
+ void Add(const MUInt16 &channelErrorUnweighted, int ch)
+ {
+ m_errorUnweighted[ch] = m_errorUnweighted[ch] + ParallelMath::ToUInt31(channelErrorUnweighted);
+ }
+
+ MFloat Finalize(uint32_t flags, const float channelWeightsSq[TVectorSize]) const
+ {
+ if (flags & cvtt::Flags::Uniform)
+ {
+ MUInt31 total = m_errorUnweighted[0];
+ for (int ch = 1; ch < TVectorSize; ch++)
+ total = total + m_errorUnweighted[ch];
+ return ParallelMath::ToFloat(total);
+ }
+ else
+ {
+ MFloat total = ParallelMath::ToFloat(m_errorUnweighted[0]) * channelWeightsSq[0];
+ for (int ch = 1; ch < TVectorSize; ch++)
+ total = total + ParallelMath::ToFloat(m_errorUnweighted[ch]) * channelWeightsSq[ch];
+ return total;
+ }
+ }
+
+ private:
+ MUInt31 m_errorUnweighted[TVectorSize];
+ };
+ }
+}
+
+#endif
+
diff --git a/thirdparty/cvtt/ConvectionKernels_BC67.cpp b/thirdparty/cvtt/ConvectionKernels_BC67.cpp
new file mode 100644
index 0000000000..791859b232
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BC67.cpp
@@ -0,0 +1,3485 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels_BC67.h"
+
+#include "ConvectionKernels_AggregatedError.h"
+#include "ConvectionKernels_BCCommon.h"
+#include "ConvectionKernels_BC7_Prio.h"
+#include "ConvectionKernels_BC7_SingleColor.h"
+#include "ConvectionKernels_BC6H_IO.h"
+#include "ConvectionKernels_EndpointRefiner.h"
+#include "ConvectionKernels_EndpointSelector.h"
+#include "ConvectionKernels_IndexSelectorHDR.h"
+#include "ConvectionKernels_ParallelMath.h"
+#include "ConvectionKernels_UnfinishedEndpoints.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ namespace BC67
+ {
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::UInt15 MUInt15;
+
+ struct WorkInfo
+ {
+ MUInt15 m_mode;
+ MFloat m_error;
+ MUInt15 m_ep[3][2][4];
+ MUInt15 m_indexes[16];
+ MUInt15 m_indexes2[16];
+
+ union
+ {
+ MUInt15 m_partition;
+ struct IndexSelectorAndRotation
+ {
+ MUInt15 m_indexSelector;
+ MUInt15 m_rotation;
+ } m_isr;
+ } m_u;
+ };
+ }
+
+ namespace BC7Data
+ {
+ enum AlphaMode
+ {
+ AlphaMode_Combined,
+ AlphaMode_Separate,
+ AlphaMode_None,
+ };
+
+ enum PBitMode
+ {
+ PBitMode_PerEndpoint,
+ PBitMode_PerSubset,
+ PBitMode_None
+ };
+
+ struct BC7ModeInfo
+ {
+ PBitMode m_pBitMode;
+ AlphaMode m_alphaMode;
+ int m_rgbBits;
+ int m_alphaBits;
+ int m_partitionBits;
+ int m_numSubsets;
+ int m_indexBits;
+ int m_alphaIndexBits;
+ bool m_hasIndexSelector;
+ };
+
+ BC7ModeInfo g_modes[] =
+ {
+ { PBitMode_PerEndpoint, AlphaMode_None, 4, 0, 4, 3, 3, 0, false }, // 0
+ { PBitMode_PerSubset, AlphaMode_None, 6, 0, 6, 2, 3, 0, false }, // 1
+ { PBitMode_None, AlphaMode_None, 5, 0, 6, 3, 2, 0, false }, // 2
+ { PBitMode_PerEndpoint, AlphaMode_None, 7, 0, 6, 2, 2, 0, false }, // 3 (Mode reference has an error, P-bit is really per-endpoint)
+
+ { PBitMode_None, AlphaMode_Separate, 5, 6, 0, 1, 2, 3, true }, // 4
+ { PBitMode_None, AlphaMode_Separate, 7, 8, 0, 1, 2, 2, false }, // 5
+ { PBitMode_PerEndpoint, AlphaMode_Combined, 7, 7, 0, 1, 4, 0, false }, // 6
+ { PBitMode_PerEndpoint, AlphaMode_Combined, 5, 5, 6, 2, 2, 0, false } // 7
+ };
+
+ const int g_weight2[] = { 0, 21, 43, 64 };
+ const int g_weight3[] = { 0, 9, 18, 27, 37, 46, 55, 64 };
+ const int g_weight4[] = { 0, 4, 9, 13, 17, 21, 26, 30, 34, 38, 43, 47, 51, 55, 60, 64 };
+
+ const int *g_weightTables[] =
+ {
+ NULL,
+ NULL,
+ g_weight2,
+ g_weight3,
+ g_weight4
+ };
+
+ struct BC6HModeInfo
+ {
+ uint16_t m_modeID;
+ bool m_partitioned;
+ bool m_transformed;
+ int m_aPrec;
+ int m_bPrec[3];
+ };
+
+ // [partitioned][precision]
+ bool g_hdrModesExistForPrecision[2][17] =
+ {
+ //0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
+ { false, false, false, false, false, false, false, false, false, false, true, true, true, false, false, false, true },
+ { false, false, false, false, false, false, true, true, true, true, true, true, false, false, false, false, false },
+ };
+
+ BC6HModeInfo g_hdrModes[] =
+ {
+ { 0x00, true, true, 10,{ 5, 5, 5 } },
+ { 0x01, true, true, 7,{ 6, 6, 6 } },
+ { 0x02, true, true, 11,{ 5, 4, 4 } },
+ { 0x06, true, true, 11,{ 4, 5, 4 } },
+ { 0x0a, true, true, 11,{ 4, 4, 5 } },
+ { 0x0e, true, true, 9,{ 5, 5, 5 } },
+ { 0x12, true, true, 8,{ 6, 5, 5 } },
+ { 0x16, true, true, 8,{ 5, 6, 5 } },
+ { 0x1a, true, true, 8,{ 5, 5, 6 } },
+ { 0x1e, true, false, 6,{ 6, 6, 6 } },
+ { 0x03, false, false, 10,{ 10, 10, 10 } },
+ { 0x07, false, true, 11,{ 9, 9, 9 } },
+ { 0x0b, false, true, 12,{ 8, 8, 8 } },
+ { 0x0f, false, true, 16,{ 4, 4, 4 } },
+ };
+
+ const int g_maxHDRPrecision = 16;
+
+ static const size_t g_numHDRModes = sizeof(g_hdrModes) / sizeof(g_hdrModes[0]);
+
+ static uint16_t g_partitionMap[64] =
+ {
+ 0xCCCC, 0x8888, 0xEEEE, 0xECC8,
+ 0xC880, 0xFEEC, 0xFEC8, 0xEC80,
+ 0xC800, 0xFFEC, 0xFE80, 0xE800,
+ 0xFFE8, 0xFF00, 0xFFF0, 0xF000,
+ 0xF710, 0x008E, 0x7100, 0x08CE,
+ 0x008C, 0x7310, 0x3100, 0x8CCE,
+ 0x088C, 0x3110, 0x6666, 0x366C,
+ 0x17E8, 0x0FF0, 0x718E, 0x399C,
+ 0xaaaa, 0xf0f0, 0x5a5a, 0x33cc,
+ 0x3c3c, 0x55aa, 0x9696, 0xa55a,
+ 0x73ce, 0x13c8, 0x324c, 0x3bdc,
+ 0x6996, 0xc33c, 0x9966, 0x660,
+ 0x272, 0x4e4, 0x4e40, 0x2720,
+ 0xc936, 0x936c, 0x39c6, 0x639c,
+ 0x9336, 0x9cc6, 0x817e, 0xe718,
+ 0xccf0, 0xfcc, 0x7744, 0xee22,
+ };
+
+ static uint32_t g_partitionMap2[64] =
+ {
+ 0xaa685050, 0x6a5a5040, 0x5a5a4200, 0x5450a0a8,
+ 0xa5a50000, 0xa0a05050, 0x5555a0a0, 0x5a5a5050,
+ 0xaa550000, 0xaa555500, 0xaaaa5500, 0x90909090,
+ 0x94949494, 0xa4a4a4a4, 0xa9a59450, 0x2a0a4250,
+ 0xa5945040, 0x0a425054, 0xa5a5a500, 0x55a0a0a0,
+ 0xa8a85454, 0x6a6a4040, 0xa4a45000, 0x1a1a0500,
+ 0x0050a4a4, 0xaaa59090, 0x14696914, 0x69691400,
+ 0xa08585a0, 0xaa821414, 0x50a4a450, 0x6a5a0200,
+ 0xa9a58000, 0x5090a0a8, 0xa8a09050, 0x24242424,
+ 0x00aa5500, 0x24924924, 0x24499224, 0x50a50a50,
+ 0x500aa550, 0xaaaa4444, 0x66660000, 0xa5a0a5a0,
+ 0x50a050a0, 0x69286928, 0x44aaaa44, 0x66666600,
+ 0xaa444444, 0x54a854a8, 0x95809580, 0x96969600,
+ 0xa85454a8, 0x80959580, 0xaa141414, 0x96960000,
+ 0xaaaa1414, 0xa05050a0, 0xa0a5a5a0, 0x96000000,
+ 0x40804080, 0xa9a8a9a8, 0xaaaaaa44, 0x2a4a5254,
+ };
+
+ static int g_fixupIndexes2[64] =
+ {
+ 15,15,15,15,
+ 15,15,15,15,
+ 15,15,15,15,
+ 15,15,15,15,
+ 15, 2, 8, 2,
+ 2, 8, 8,15,
+ 2, 8, 2, 2,
+ 8, 8, 2, 2,
+
+ 15,15, 6, 8,
+ 2, 8,15,15,
+ 2, 8, 2, 2,
+ 2,15,15, 6,
+ 6, 2, 6, 8,
+ 15,15, 2, 2,
+ 15,15,15,15,
+ 15, 2, 2,15,
+ };
+
+ static int g_fixupIndexes3[64][2] =
+ {
+ { 3,15 },{ 3, 8 },{ 15, 8 },{ 15, 3 },
+ { 8,15 },{ 3,15 },{ 15, 3 },{ 15, 8 },
+ { 8,15 },{ 8,15 },{ 6,15 },{ 6,15 },
+ { 6,15 },{ 5,15 },{ 3,15 },{ 3, 8 },
+ { 3,15 },{ 3, 8 },{ 8,15 },{ 15, 3 },
+ { 3,15 },{ 3, 8 },{ 6,15 },{ 10, 8 },
+ { 5, 3 },{ 8,15 },{ 8, 6 },{ 6,10 },
+ { 8,15 },{ 5,15 },{ 15,10 },{ 15, 8 },
+
+ { 8,15 },{ 15, 3 },{ 3,15 },{ 5,10 },
+ { 6,10 },{ 10, 8 },{ 8, 9 },{ 15,10 },
+ { 15, 6 },{ 3,15 },{ 15, 8 },{ 5,15 },
+ { 15, 3 },{ 15, 6 },{ 15, 6 },{ 15, 8 },
+ { 3,15 },{ 15, 3 },{ 5,15 },{ 5,15 },
+ { 5,15 },{ 8,15 },{ 5,15 },{ 10,15 },
+ { 5,15 },{ 10,15 },{ 8,15 },{ 13,15 },
+ { 15, 3 },{ 12,15 },{ 3,15 },{ 3, 8 },
+ };
+
+ static const unsigned char g_fragments[] =
+ {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 0, 16
+ 0, 1, 2, 3, // 16, 4
+ 0, 1, 4, // 20, 3
+ 0, 1, 2, 4, // 23, 4
+ 2, 3, 7, // 27, 3
+ 1, 2, 3, 7, // 30, 4
+ 0, 1, 2, 3, 4, 5, 6, 7, // 34, 8
+ 0, 1, 4, 8, // 42, 4
+ 0, 1, 2, 4, 5, 8, // 46, 6
+ 0, 1, 2, 3, 4, 5, 6, 8, // 52, 8
+ 1, 4, 5, 6, 9, // 60, 5
+ 2, 5, 6, 7, 10, // 65, 5
+ 5, 6, 9, 10, // 70, 4
+ 2, 3, 7, 11, // 74, 4
+ 1, 2, 3, 6, 7, 11, // 78, 6
+ 0, 1, 2, 3, 5, 6, 7, 11, // 84, 8
+ 0, 1, 2, 3, 8, 9, 10, 11, // 92, 8
+ 2, 3, 6, 7, 8, 9, 10, 11, // 100, 8
+ 4, 5, 6, 7, 8, 9, 10, 11, // 108, 8
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, // 116, 12
+ 0, 4, 8, 12, // 128, 4
+ 0, 2, 3, 4, 6, 7, 8, 12, // 132, 8
+ 0, 1, 2, 4, 5, 8, 9, 12, // 140, 8
+ 0, 1, 2, 3, 4, 5, 6, 8, 9, 12, // 148, 10
+ 3, 6, 7, 8, 9, 12, // 158, 6
+ 3, 5, 6, 7, 8, 9, 10, 12, // 164, 8
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, // 172, 12
+ 0, 1, 2, 5, 6, 7, 11, 12, // 184, 8
+ 5, 8, 9, 10, 13, // 192, 5
+ 8, 12, 13, // 197, 3
+ 4, 8, 12, 13, // 200, 4
+ 2, 3, 6, 9, 12, 13, // 204, 6
+ 0, 1, 2, 3, 8, 9, 12, 13, // 210, 8
+ 0, 1, 4, 5, 8, 9, 12, 13, // 218, 8
+ 2, 3, 6, 7, 8, 9, 12, 13, // 226, 8
+ 2, 3, 5, 6, 9, 10, 12, 13, // 234, 8
+ 0, 3, 6, 7, 9, 10, 12, 13, // 242, 8
+ 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 13, // 250, 12
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 13, // 262, 13
+ 2, 3, 4, 7, 8, 11, 12, 13, // 275, 8
+ 1, 2, 6, 7, 8, 11, 12, 13, // 283, 8
+ 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, // 291, 10
+ 2, 3, 4, 5, 10, 11, 12, 13, // 301, 8
+ 0, 1, 6, 7, 10, 11, 12, 13, // 309, 8
+ 6, 9, 10, 11, 14, // 317, 5
+ 0, 2, 4, 6, 8, 10, 12, 14, // 322, 8
+ 1, 3, 5, 7, 8, 10, 12, 14, // 330, 8
+ 1, 3, 4, 6, 9, 11, 12, 14, // 338, 8
+ 0, 2, 5, 7, 9, 11, 12, 14, // 346, 8
+ 0, 3, 4, 5, 8, 9, 13, 14, // 354, 8
+ 2, 3, 4, 7, 8, 9, 13, 14, // 362, 8
+ 1, 2, 5, 6, 9, 10, 13, 14, // 370, 8
+ 0, 3, 4, 7, 9, 10, 13, 14, // 378, 8
+ 0, 3, 5, 6, 8, 11, 13, 14, // 386, 8
+ 1, 2, 4, 7, 8, 11, 13, 14, // 394, 8
+ 0, 1, 4, 7, 10, 11, 13, 14, // 402, 8
+ 0, 3, 6, 7, 10, 11, 13, 14, // 410, 8
+ 8, 12, 13, 14, // 418, 4
+ 1, 2, 3, 7, 8, 12, 13, 14, // 422, 8
+ 4, 8, 9, 12, 13, 14, // 430, 6
+ 0, 4, 5, 8, 9, 12, 13, 14, // 436, 8
+ 1, 2, 3, 6, 7, 8, 9, 12, 13, 14, // 444, 10
+ 2, 6, 8, 9, 10, 12, 13, 14, // 454, 8
+ 0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, // 462, 12
+ 0, 7, 9, 10, 11, 12, 13, 14, // 474, 8
+ 1, 2, 3, 4, 5, 6, 8, 15, // 482, 8
+ 3, 7, 11, 15, // 490, 4
+ 0, 1, 3, 4, 5, 7, 11, 15, // 494, 8
+ 0, 4, 5, 10, 11, 15, // 502, 6
+ 1, 2, 3, 6, 7, 10, 11, 15, // 508, 8
+ 0, 1, 2, 3, 5, 6, 7, 10, 11, 15, // 516, 10
+ 0, 4, 5, 6, 9, 10, 11, 15, // 526, 8
+ 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 15, // 534, 12
+ 1, 2, 4, 5, 8, 9, 12, 15, // 546, 8
+ 2, 3, 5, 6, 8, 9, 12, 15, // 554, 8
+ 0, 3, 5, 6, 9, 10, 12, 15, // 562, 8
+ 1, 2, 4, 7, 9, 10, 12, 15, // 570, 8
+ 1, 2, 5, 6, 8, 11, 12, 15, // 578, 8
+ 0, 3, 4, 7, 8, 11, 12, 15, // 586, 8
+ 0, 1, 5, 6, 10, 11, 12, 15, // 594, 8
+ 1, 2, 6, 7, 10, 11, 12, 15, // 602, 8
+ 1, 3, 4, 6, 8, 10, 13, 15, // 610, 8
+ 0, 2, 5, 7, 8, 10, 13, 15, // 618, 8
+ 0, 2, 4, 6, 9, 11, 13, 15, // 626, 8
+ 1, 3, 5, 7, 9, 11, 13, 15, // 634, 8
+ 0, 1, 2, 3, 4, 5, 7, 8, 12, 13, 15, // 642, 11
+ 2, 3, 4, 5, 8, 9, 14, 15, // 653, 8
+ 0, 1, 6, 7, 8, 9, 14, 15, // 661, 8
+ 0, 1, 5, 10, 14, 15, // 669, 6
+ 0, 3, 4, 5, 9, 10, 14, 15, // 675, 8
+ 0, 1, 5, 6, 9, 10, 14, 15, // 683, 8
+ 11, 14, 15, // 691, 3
+ 7, 11, 14, 15, // 694, 4
+ 1, 2, 4, 5, 8, 11, 14, 15, // 698, 8
+ 0, 1, 4, 7, 8, 11, 14, 15, // 706, 8
+ 0, 1, 4, 5, 10, 11, 14, 15, // 714, 8
+ 2, 3, 6, 7, 10, 11, 14, 15, // 722, 8
+ 4, 5, 6, 7, 10, 11, 14, 15, // 730, 8
+ 0, 1, 4, 5, 7, 8, 10, 11, 14, 15, // 738, 10
+ 0, 1, 2, 3, 5, 6, 7, 9, 10, 11, 14, 15, // 748, 12
+ 0, 1, 2, 3, 4, 5, 6, 7, 9, 10, 11, 14, 15, // 760, 13
+ 0, 1, 2, 3, 4, 6, 7, 11, 12, 14, 15, // 773, 11
+ 3, 4, 8, 9, 10, 13, 14, 15, // 784, 8
+ 11, 13, 14, 15, // 792, 4
+ 0, 1, 2, 4, 11, 13, 14, 15, // 796, 8
+ 0, 1, 2, 4, 5, 10, 11, 13, 14, 15, // 804, 10
+ 7, 10, 11, 13, 14, 15, // 814, 6
+ 3, 6, 7, 10, 11, 13, 14, 15, // 820, 8
+ 1, 5, 9, 10, 11, 13, 14, 15, // 828, 8
+ 1, 2, 3, 5, 6, 7, 9, 10, 11, 13, 14, 15, // 836, 12
+ 12, 13, 14, 15, // 848, 4
+ 0, 1, 2, 3, 12, 13, 14, 15, // 852, 8
+ 0, 1, 4, 5, 12, 13, 14, 15, // 860, 8
+ 4, 5, 6, 7, 12, 13, 14, 15, // 868, 8
+ 4, 8, 9, 10, 12, 13, 14, 15, // 876, 8
+ 0, 4, 5, 8, 9, 10, 12, 13, 14, 15, // 884, 10
+ 0, 1, 4, 5, 6, 8, 9, 10, 12, 13, 14, 15, // 894, 12
+ 0, 1, 2, 3, 4, 7, 8, 11, 12, 13, 14, 15, // 906, 12
+ 0, 1, 3, 4, 8, 9, 11, 12, 13, 14, 15, // 918, 11
+ 0, 2, 3, 7, 8, 10, 11, 12, 13, 14, 15, // 929, 11
+ 7, 9, 10, 11, 12, 13, 14, 15, // 940, 8
+ 3, 6, 7, 9, 10, 11, 12, 13, 14, 15, // 948, 10
+ 2, 3, 5, 6, 7, 9, 10, 11, 12, 13, 14, 15, // 958, 12
+ 8, 9, 10, 11, 12, 13, 14, 15, // 970, 8
+ 0, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, // 978, 12
+ 0, 1, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, // 990, 13
+ 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 1003, 12
+ 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 1015, 13
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // 1028, 12
+ 0, 2, // 1040, 2
+ 1, 3, // 1042, 2
+ 0, 1, 4, 5, // 1044, 4
+ 0, 1, 2, 4, 5, // 1048, 5
+ 2, 3, 6, // 1053, 3
+ 0, 2, 4, 6, // 1056, 4
+ 1, 2, 5, 6, // 1060, 4
+ 0, 1, 2, 3, 5, 6, // 1064, 6
+ 0, 1, 2, 4, 5, 6, // 1070, 6
+ 0, 1, 2, 3, 4, 5, 6, // 1076, 7
+ 0, 3, 4, 7, // 1083, 4
+ 0, 1, 2, 3, 4, 7, // 1087, 6
+ 1, 3, 5, 7, // 1093, 4
+ 2, 3, 6, 7, // 1097, 4
+ 1, 2, 3, 6, 7, // 1101, 5
+ 1, 2, 3, 5, 6, 7, // 1106, 6
+ 0, 1, 2, 3, 5, 6, 7, // 1112, 7
+ 4, 5, 6, 7, // 1119, 4
+ 0, 8, // 1123, 2
+ 0, 1, 4, 5, 8, // 1125, 5
+ 0, 1, 8, 9, // 1130, 4
+ 4, 5, 8, 9, // 1134, 4
+ 0, 1, 4, 5, 8, 9, // 1138, 6
+ 2, 6, 8, 9, // 1144, 4
+ 6, 7, 8, 9, // 1148, 4
+ 0, 2, 4, 6, 8, 10, // 1152, 6
+ 1, 2, 5, 6, 9, 10, // 1158, 6
+ 0, 3, 4, 7, 9, 10, // 1164, 6
+ 0, 1, 2, 8, 9, 10, // 1170, 6
+ 4, 5, 6, 8, 9, 10, // 1176, 6
+ 3, 11, // 1182, 2
+ 2, 3, 6, 7, 11, // 1184, 5
+ 0, 3, 8, 11, // 1189, 4
+ 0, 3, 4, 7, 8, 11, // 1193, 6
+ 1, 3, 5, 7, 9, 11, // 1199, 6
+ 2, 3, 10, 11, // 1205, 4
+ 1, 5, 10, 11, // 1209, 4
+ 4, 5, 10, 11, // 1213, 4
+ 6, 7, 10, 11, // 1217, 4
+ 2, 3, 6, 7, 10, 11, // 1221, 6
+ 1, 2, 3, 9, 10, 11, // 1227, 6
+ 5, 6, 7, 9, 10, 11, // 1233, 6
+ 8, 9, 10, 11, // 1239, 4
+ 4, 12, // 1243, 2
+ 0, 1, 2, 3, 4, 5, 8, 12, // 1245, 8
+ 8, 9, 12, // 1253, 3
+ 0, 4, 5, 8, 9, 12, // 1256, 6
+ 0, 1, 4, 5, 8, 9, 12, // 1262, 7
+ 2, 3, 5, 6, 8, 9, 12, // 1269, 7
+ 1, 5, 9, 13, // 1276, 4
+ 6, 7, 9, 13, // 1280, 4
+ 1, 4, 7, 10, 13, // 1284, 5
+ 1, 6, 8, 11, 13, // 1289, 5
+ 0, 1, 12, 13, // 1294, 4
+ 4, 5, 12, 13, // 1298, 4
+ 0, 1, 6, 7, 12, 13, // 1302, 6
+ 0, 1, 4, 8, 12, 13, // 1308, 6
+ 8, 9, 12, 13, // 1314, 4
+ 4, 8, 9, 12, 13, // 1318, 5
+ 4, 5, 8, 9, 12, 13, // 1323, 6
+ 0, 4, 5, 8, 9, 12, 13, // 1329, 7
+ 0, 1, 6, 10, 12, 13, // 1336, 6
+ 3, 6, 7, 9, 10, 12, 13, // 1342, 7
+ 0, 1, 10, 11, 12, 13, // 1349, 6
+ 2, 4, 7, 9, 14, // 1355, 5
+ 4, 5, 10, 14, // 1360, 4
+ 2, 6, 10, 14, // 1364, 4
+ 2, 5, 8, 11, 14, // 1368, 5
+ 0, 2, 12, 14, // 1373, 4
+ 8, 10, 12, 14, // 1377, 4
+ 4, 6, 8, 10, 12, 14, // 1381, 6
+ 13, 14, // 1387, 2
+ 9, 10, 13, 14, // 1389, 4
+ 5, 6, 9, 10, 13, 14, // 1393, 6
+ 0, 1, 2, 12, 13, 14, // 1399, 6
+ 4, 5, 6, 12, 13, 14, // 1405, 6
+ 8, 9, 12, 13, 14, // 1411, 5
+ 8, 9, 10, 12, 13, 14, // 1416, 6
+ 7, 15, // 1422, 2
+ 0, 5, 10, 15, // 1424, 4
+ 0, 1, 2, 3, 6, 7, 11, 15, // 1428, 8
+ 10, 11, 15, // 1436, 3
+ 0, 1, 5, 6, 10, 11, 15, // 1439, 7
+ 3, 6, 7, 10, 11, 15, // 1446, 6
+ 12, 15, // 1452, 2
+ 0, 3, 12, 15, // 1454, 4
+ 4, 7, 12, 15, // 1458, 4
+ 0, 3, 6, 9, 12, 15, // 1462, 6
+ 0, 3, 5, 10, 12, 15, // 1468, 6
+ 8, 11, 12, 15, // 1474, 4
+ 5, 6, 8, 11, 12, 15, // 1478, 6
+ 4, 7, 8, 11, 12, 15, // 1484, 6
+ 1, 3, 13, 15, // 1490, 4
+ 9, 11, 13, 15, // 1494, 4
+ 5, 7, 9, 11, 13, 15, // 1498, 6
+ 2, 3, 14, 15, // 1504, 4
+ 2, 3, 4, 5, 14, 15, // 1508, 6
+ 6, 7, 14, 15, // 1514, 4
+ 2, 3, 5, 9, 14, 15, // 1518, 6
+ 2, 3, 8, 9, 14, 15, // 1524, 6
+ 10, 14, 15, // 1530, 3
+ 0, 4, 5, 9, 10, 14, 15, // 1533, 7
+ 2, 3, 7, 11, 14, 15, // 1540, 6
+ 10, 11, 14, 15, // 1546, 4
+ 7, 10, 11, 14, 15, // 1550, 5
+ 6, 7, 10, 11, 14, 15, // 1555, 6
+ 1, 2, 3, 13, 14, 15, // 1561, 6
+ 5, 6, 7, 13, 14, 15, // 1567, 6
+ 10, 11, 13, 14, 15, // 1573, 5
+ 9, 10, 11, 13, 14, 15, // 1578, 6
+ 0, 4, 8, 9, 12, 13, 14, 15, // 1584, 8
+ 9, 10, 12, 13, 14, 15, // 1592, 6
+ 8, 11, 12, 13, 14, 15, // 1598, 6
+ 3, 7, 10, 11, 12, 13, 14, 15, // 1604, 8
+ };
+ static const int g_shapeRanges[][2] =
+ {
+ { 0, 16 },{ 16, 4 },{ 20, 3 },{ 23, 4 },{ 27, 3 },{ 30, 4 },{ 34, 8 },{ 42, 4 },{ 46, 6 },{ 52, 8 },{ 60, 5 },
+ { 65, 5 },{ 70, 4 },{ 74, 4 },{ 78, 6 },{ 84, 8 },{ 92, 8 },{ 100, 8 },{ 108, 8 },{ 116, 12 },{ 128, 4 },{ 132, 8 },
+ { 140, 8 },{ 148, 10 },{ 158, 6 },{ 164, 8 },{ 172, 12 },{ 184, 8 },{ 192, 5 },{ 197, 3 },{ 200, 4 },{ 204, 6 },{ 210, 8 },
+ { 218, 8 },{ 226, 8 },{ 234, 8 },{ 242, 8 },{ 250, 12 },{ 262, 13 },{ 275, 8 },{ 283, 8 },{ 291, 10 },{ 301, 8 },{ 309, 8 },
+ { 317, 5 },{ 322, 8 },{ 330, 8 },{ 338, 8 },{ 346, 8 },{ 354, 8 },{ 362, 8 },{ 370, 8 },{ 378, 8 },{ 386, 8 },{ 394, 8 },
+ { 402, 8 },{ 410, 8 },{ 418, 4 },{ 422, 8 },{ 430, 6 },{ 436, 8 },{ 444, 10 },{ 454, 8 },{ 462, 12 },{ 474, 8 },{ 482, 8 },
+ { 490, 4 },{ 494, 8 },{ 502, 6 },{ 508, 8 },{ 516, 10 },{ 526, 8 },{ 534, 12 },{ 546, 8 },{ 554, 8 },{ 562, 8 },{ 570, 8 },
+ { 578, 8 },{ 586, 8 },{ 594, 8 },{ 602, 8 },{ 610, 8 },{ 618, 8 },{ 626, 8 },{ 634, 8 },{ 642, 11 },{ 653, 8 },{ 661, 8 },
+ { 669, 6 },{ 675, 8 },{ 683, 8 },{ 691, 3 },{ 694, 4 },{ 698, 8 },{ 706, 8 },{ 714, 8 },{ 722, 8 },{ 730, 8 },{ 738, 10 },
+ { 748, 12 },{ 760, 13 },{ 773, 11 },{ 784, 8 },{ 792, 4 },{ 796, 8 },{ 804, 10 },{ 814, 6 },{ 820, 8 },{ 828, 8 },{ 836, 12 },
+ { 848, 4 },{ 852, 8 },{ 860, 8 },{ 868, 8 },{ 876, 8 },{ 884, 10 },{ 894, 12 },{ 906, 12 },{ 918, 11 },{ 929, 11 },{ 940, 8 },
+ { 948, 10 },{ 958, 12 },{ 970, 8 },{ 978, 12 },{ 990, 13 },{ 1003, 12 },{ 1015, 13 },{ 1028, 12 },{ 1040, 2 },{ 1042, 2 },{ 1044, 4 },
+ { 1048, 5 },{ 1053, 3 },{ 1056, 4 },{ 1060, 4 },{ 1064, 6 },{ 1070, 6 },{ 1076, 7 },{ 1083, 4 },{ 1087, 6 },{ 1093, 4 },{ 1097, 4 },
+ { 1101, 5 },{ 1106, 6 },{ 1112, 7 },{ 1119, 4 },{ 1123, 2 },{ 1125, 5 },{ 1130, 4 },{ 1134, 4 },{ 1138, 6 },{ 1144, 4 },{ 1148, 4 },
+ { 1152, 6 },{ 1158, 6 },{ 1164, 6 },{ 1170, 6 },{ 1176, 6 },{ 1182, 2 },{ 1184, 5 },{ 1189, 4 },{ 1193, 6 },{ 1199, 6 },{ 1205, 4 },
+ { 1209, 4 },{ 1213, 4 },{ 1217, 4 },{ 1221, 6 },{ 1227, 6 },{ 1233, 6 },{ 1239, 4 },{ 1243, 2 },{ 1245, 8 },{ 1253, 3 },{ 1256, 6 },
+ { 1262, 7 },{ 1269, 7 },{ 1276, 4 },{ 1280, 4 },{ 1284, 5 },{ 1289, 5 },{ 1294, 4 },{ 1298, 4 },{ 1302, 6 },{ 1308, 6 },{ 1314, 4 },
+ { 1318, 5 },{ 1323, 6 },{ 1329, 7 },{ 1336, 6 },{ 1342, 7 },{ 1349, 6 },{ 1355, 5 },{ 1360, 4 },{ 1364, 4 },{ 1368, 5 },{ 1373, 4 },
+ { 1377, 4 },{ 1381, 6 },{ 1387, 2 },{ 1389, 4 },{ 1393, 6 },{ 1399, 6 },{ 1405, 6 },{ 1411, 5 },{ 1416, 6 },{ 1422, 2 },{ 1424, 4 },
+ { 1428, 8 },{ 1436, 3 },{ 1439, 7 },{ 1446, 6 },{ 1452, 2 },{ 1454, 4 },{ 1458, 4 },{ 1462, 6 },{ 1468, 6 },{ 1474, 4 },{ 1478, 6 },
+ { 1484, 6 },{ 1490, 4 },{ 1494, 4 },{ 1498, 6 },{ 1504, 4 },{ 1508, 6 },{ 1514, 4 },{ 1518, 6 },{ 1524, 6 },{ 1530, 3 },{ 1533, 7 },
+ { 1540, 6 },{ 1546, 4 },{ 1550, 5 },{ 1555, 6 },{ 1561, 6 },{ 1567, 6 },{ 1573, 5 },{ 1578, 6 },{ 1584, 8 },{ 1592, 6 },{ 1598, 6 },
+ { 1604, 8 },
+ };
+ static const int g_shapes1[][2] =
+ {
+ { 0, 16 }
+ };
+ static const int g_shapes2[64][2] =
+ {
+ { 33, 96 },{ 63, 66 },{ 20, 109 },{ 22, 107 },{ 37, 92 },{ 7, 122 },{ 8, 121 },{ 23, 106 },
+ { 38, 91 },{ 2, 127 },{ 9, 120 },{ 26, 103 },{ 3, 126 },{ 6, 123 },{ 1, 128 },{ 19, 110 },
+ { 15, 114 },{ 124, 5 },{ 72, 57 },{ 115, 14 },{ 125, 4 },{ 70, 59 },{ 100, 29 },{ 60, 69 },
+ { 116, 13 },{ 99, 30 },{ 78, 51 },{ 94, 35 },{ 104, 25 },{ 111, 18 },{ 71, 58 },{ 90, 39 },
+ { 45, 84 },{ 16, 113 },{ 82, 47 },{ 95, 34 },{ 87, 42 },{ 83, 46 },{ 53, 76 },{ 48, 81 },
+ { 68, 61 },{ 105, 24 },{ 98, 31 },{ 88, 41 },{ 75, 54 },{ 43, 86 },{ 52, 77 },{ 117, 12 },
+ { 119, 10 },{ 118, 11 },{ 85, 44 },{ 101, 28 },{ 36, 93 },{ 55, 74 },{ 89, 40 },{ 79, 50 },
+ { 56, 73 },{ 49, 80 },{ 64, 65 },{ 27, 102 },{ 32, 97 },{ 112, 17 },{ 67, 62 },{ 21, 108 },
+ };
+ static const int g_shapes3[64][3] =
+ {
+ { 148, 160, 240 },{ 132, 212, 205 },{ 136, 233, 187 },{ 175, 237, 143 },{ 6, 186, 232 },{ 33, 142, 232 },{ 131, 123, 142 },{ 131, 96, 186 },
+ { 6, 171, 110 },{ 1, 18, 110 },{ 1, 146, 123 },{ 33, 195, 66 },{ 20, 51, 66 },{ 20, 178, 96 },{ 2, 177, 106 },{ 211, 4, 59 },
+ { 8, 191, 91 },{ 230, 14, 29 },{ 1, 188, 234 },{ 151, 110, 168 },{ 20, 144, 238 },{ 137, 66, 206 },{ 173, 179, 232 },{ 209, 194, 186 },
+ { 239, 165, 142 },{ 131, 152, 242 },{ 214, 54, 12 },{ 140, 219, 201 },{ 190, 150, 231 },{ 156, 135, 241 },{ 185, 227, 167 },{ 145, 210, 59 },
+ { 138, 174, 106 },{ 189, 229, 14 },{ 176, 133, 106 },{ 78, 178, 195 },{ 111, 146, 171 },{ 216, 180, 196 },{ 217, 181, 193 },{ 184, 228, 166 },
+ { 192, 225, 153 },{ 134, 141, 123 },{ 6, 222, 198 },{ 149, 183, 96 },{ 33, 226, 164 },{ 161, 215, 51 },{ 197, 221, 18 },{ 1, 223, 199 },
+ { 154, 163, 110 },{ 20, 236, 169 },{ 157, 204, 66 },{ 1, 202, 220 },{ 20, 170, 235 },{ 203, 158, 66 },{ 162, 155, 110 },{ 6, 201, 218 },
+ { 139, 135, 123 },{ 33, 167, 224 },{ 182, 150, 96 },{ 19, 200, 213 },{ 63, 207, 159 },{ 147, 172, 109 },{ 129, 130, 128 },{ 208, 14, 59 },
+ };
+
+ static const int g_shapeList1[] =
+ {
+ 0,
+ };
+
+ static const int g_shapeList2[] =
+ {
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
+ 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
+ 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128,
+ };
+
+ static const int g_shapeList12[] =
+ {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128,
+ };
+
+ static const int g_shapeList3[] =
+ {
+ 1, 2, 4, 6, 8, 12, 14, 18, 19, 20, 29,
+ 33, 51, 54, 59, 63, 66, 78, 91, 96, 106, 109,
+ 110, 111, 123, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
+ 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
+ 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
+ 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
+ 235, 236, 237, 238, 239, 240, 241, 242,
+ };
+
+ static const int g_shapeList3Short[] =
+ {
+ 1, 2, 4, 6, 18, 20, 33, 51, 59, 66, 96,
+ 106, 110, 123, 131, 132, 136, 142, 143, 146, 148, 160,
+ 171, 175, 177, 178, 186, 187, 195, 205, 211, 212, 232,
+ 233, 237, 240,
+ };
+
+ static const int g_shapeListAll[] =
+ {
+ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
+ 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
+ 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
+ 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
+ 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
+ 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
+ 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
+ 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242,
+ };
+
+ static const int g_numShapes1 = sizeof(g_shapeList1) / sizeof(g_shapeList1[0]);
+ static const int g_numShapes2 = sizeof(g_shapeList2) / sizeof(g_shapeList2[0]);
+ static const int g_numShapes12 = sizeof(g_shapeList12) / sizeof(g_shapeList12[0]);
+ static const int g_numShapes3 = sizeof(g_shapeList3) / sizeof(g_shapeList3[0]);
+ static const int g_numShapes3Short = sizeof(g_shapeList3Short) / sizeof(g_shapeList3Short[0]);
+ static const int g_numShapesAll = sizeof(g_shapeListAll) / sizeof(g_shapeListAll[0]);
+ static const int g_numFragments = sizeof(g_fragments) / sizeof(g_fragments[0]);
+ }
+
+ struct PackingVector
+ {
+ uint32_t m_vector[4];
+ int m_offset;
+
+ void Init()
+ {
+ for (int i = 0; i < 4; i++)
+ m_vector[i] = 0;
+
+ m_offset = 0;
+ }
+
+ void InitPacked(const uint32_t *v, int bits)
+ {
+ for (int b = 0; b < bits; b += 32)
+ m_vector[b / 32] = v[b / 32];
+
+ m_offset = bits;
+ }
+
+ inline void Pack(ParallelMath::ScalarUInt16 value, int bits)
+ {
+ int vOffset = m_offset >> 5;
+ int bitOffset = m_offset & 0x1f;
+
+ m_vector[vOffset] |= (static_cast<uint32_t>(value) << bitOffset) & static_cast<uint32_t>(0xffffffff);
+
+ int overflowBits = bitOffset + bits - 32;
+ if (overflowBits > 0)
+ m_vector[vOffset + 1] |= (static_cast<uint32_t>(value) >> (bits - overflowBits));
+
+ m_offset += bits;
+ }
+
+ inline void Flush(uint8_t* output)
+ {
+ assert(m_offset == 128);
+
+ for (int v = 0; v < 4; v++)
+ {
+ uint32_t chunk = m_vector[v];
+ for (int b = 0; b < 4; b++)
+ output[v * 4 + b] = static_cast<uint8_t>((chunk >> (b * 8)) & 0xff);
+ }
+ }
+ };
+
+
+ struct UnpackingVector
+ {
+ uint32_t m_vector[4];
+
+ void Init(const uint8_t *bytes)
+ {
+ for (int i = 0; i < 4; i++)
+ m_vector[i] = 0;
+
+ for (int b = 0; b < 16; b++)
+ m_vector[b / 4] |= (bytes[b] << ((b % 4) * 8));
+ }
+
+ inline void UnpackStart(uint32_t *v, int bits)
+ {
+ for (int b = 0; b < bits; b += 32)
+ v[b / 32] = m_vector[b / 32];
+
+ int entriesShifted = bits / 32;
+ int carry = bits % 32;
+
+ for (int i = entriesShifted; i < 4; i++)
+ m_vector[i - entriesShifted] = m_vector[i];
+
+ int entriesRemaining = 4 - entriesShifted;
+ if (carry)
+ {
+ uint32_t bitMask = (1 << carry) - 1;
+ for (int i = 0; i < 4; i++)
+ {
+ m_vector[i] >>= carry;
+ if (i != 3)
+ m_vector[i] |= (m_vector[i + 1] & bitMask) << (32 - carry);
+ }
+ }
+ }
+
+ inline ParallelMath::ScalarUInt16 Unpack(int bits)
+ {
+ uint32_t bitMask = (1 << bits) - 1;
+
+ ParallelMath::ScalarUInt16 result = static_cast<ParallelMath::ScalarUInt16>(m_vector[0] & bitMask);
+
+ for (int i = 0; i < 4; i++)
+ {
+ m_vector[i] >>= bits;
+ if (i != 3)
+ m_vector[i] |= (m_vector[i + 1] & bitMask) << (32 - bits);
+ }
+
+ return result;
+ }
+ };
+
+ ParallelMath::Float ScaleHDRValue(const ParallelMath::Float &v, bool isSigned)
+ {
+ if (isSigned)
+ {
+ ParallelMath::Float offset = ParallelMath::Select(ParallelMath::Less(v, ParallelMath::MakeFloatZero()), ParallelMath::MakeFloat(-30.0f), ParallelMath::MakeFloat(30.0f));
+ return (v * 32.0f + offset) / 31.0f;
+ }
+ else
+ return (v * 64.0f + 30.0f) / 31.0f;
+ }
+
+ ParallelMath::SInt16 UnscaleHDRValueSigned(const ParallelMath::SInt16 &v)
+ {
+#ifdef CVTT_ENABLE_ASSERTS
+ for (int i = 0; i < ParallelMath::ParallelSize; i++)
+ assert(ParallelMath::Extract(v, i) != -32768)
+#endif
+
+ ParallelMath::Int16CompFlag negative = ParallelMath::Less(v, ParallelMath::MakeSInt16(0));
+ ParallelMath::UInt15 absComp = ParallelMath::LosslessCast<ParallelMath::UInt15>::Cast(ParallelMath::Select(negative, ParallelMath::SInt16(ParallelMath::MakeSInt16(0) - v), v));
+
+ ParallelMath::UInt31 multiplied = ParallelMath::XMultiply(absComp, ParallelMath::MakeUInt15(31));
+ ParallelMath::UInt31 shifted = ParallelMath::RightShift(multiplied, 5);
+ ParallelMath::UInt15 absCompScaled = ParallelMath::ToUInt15(shifted);
+ ParallelMath::SInt16 signBits = ParallelMath::SelectOrZero(negative, ParallelMath::MakeSInt16(-32768));
+
+ return ParallelMath::LosslessCast<ParallelMath::SInt16>::Cast(absCompScaled) | signBits;
+ }
+
+ ParallelMath::UInt15 UnscaleHDRValueUnsigned(const ParallelMath::UInt16 &v)
+ {
+ return ParallelMath::ToUInt15(ParallelMath::RightShift(ParallelMath::XMultiply(v, ParallelMath::MakeUInt15(31)), 6));
+ }
+
+ void UnscaleHDREndpoints(const ParallelMath::AInt16 inEP[2][3], ParallelMath::AInt16 outEP[2][3], bool isSigned)
+ {
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ if (isSigned)
+ outEP[epi][ch] = ParallelMath::LosslessCast<ParallelMath::AInt16>::Cast(UnscaleHDRValueSigned(ParallelMath::LosslessCast<ParallelMath::SInt16>::Cast(inEP[epi][ch])));
+ else
+ outEP[epi][ch] = ParallelMath::LosslessCast<ParallelMath::AInt16>::Cast(UnscaleHDRValueUnsigned(ParallelMath::LosslessCast<ParallelMath::UInt16>::Cast(inEP[epi][ch])));
+ }
+ }
+ }
+
+ struct SinglePlaneTemporaries
+ {
+ UnfinishedEndpoints<3> unfinishedRGB[BC7Data::g_numShapesAll];
+ UnfinishedEndpoints<4> unfinishedRGBA[BC7Data::g_numShapes12];
+
+ ParallelMath::UInt15 fragmentBestIndexes[BC7Data::g_numFragments];
+ ParallelMath::UInt15 shapeBestEP[BC7Data::g_numShapesAll][2][4];
+ ParallelMath::Float shapeBestError[BC7Data::g_numShapesAll];
+ };
+ }
+}
+
+void cvtt::Internal::BC7Computer::TweakAlpha(const MUInt15 original[2], int tweak, int range, MUInt15 result[2])
+{
+ ParallelMath::RoundTowardNearestForScope roundingMode;
+
+ float tf[2];
+ Util::ComputeTweakFactors(tweak, range, tf);
+
+ MFloat base = ParallelMath::ToFloat(original[0]);
+ MFloat offs = ParallelMath::ToFloat(original[1]) - base;
+
+ result[0] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(base + offs * tf[0], 0.0f, 255.0f), &roundingMode);
+ result[1] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(base + offs * tf[1], 0.0f, 255.0f), &roundingMode);
+}
+
+void cvtt::Internal::BC7Computer::Quantize(MUInt15* color, int bits, int channels)
+{
+ for (int ch = 0; ch < channels; ch++)
+ color[ch] = ParallelMath::RightShift(((color[ch] << bits) - color[ch]) + ParallelMath::MakeUInt15(127 + (1 << (7 - bits))), 8);
+}
+
+void cvtt::Internal::BC7Computer::QuantizeP(MUInt15* color, int bits, uint16_t p, int channels)
+{
+ int16_t addend;
+ if (p)
+ addend = ((1 << (8 - bits)) - 1);
+ else
+ addend = 255;
+
+ for (int ch = 0; ch < channels; ch++)
+ {
+ MUInt16 ch16 = ParallelMath::LosslessCast<MUInt16>::Cast(color[ch]);
+ ch16 = ParallelMath::RightShift((ch16 << (bits + 1)) - ch16 + addend, 9);
+ ch16 = (ch16 << 1) | ParallelMath::MakeUInt16(p);
+ color[ch] = ParallelMath::LosslessCast<MUInt15>::Cast(ch16);
+ }
+}
+
+void cvtt::Internal::BC7Computer::Unquantize(MUInt15* color, int bits, int channels)
+{
+ for (int ch = 0; ch < channels; ch++)
+ {
+ MUInt15 clr = color[ch];
+ clr = clr << (8 - bits);
+ color[ch] = clr | ParallelMath::RightShift(clr, bits);
+ }
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints0(MUInt15 ep[2][4], uint16_t p[2])
+{
+ for (int j = 0; j < 2; j++)
+ {
+ QuantizeP(ep[j], 4, p[j], 3);
+ Unquantize(ep[j], 5, 3);
+ ep[j][3] = ParallelMath::MakeUInt15(255);
+ }
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints1(MUInt15 ep[2][4], uint16_t p)
+{
+ for (int j = 0; j < 2; j++)
+ {
+ QuantizeP(ep[j], 6, p, 3);
+ Unquantize(ep[j], 7, 3);
+ ep[j][3] = ParallelMath::MakeUInt15(255);
+ }
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints2(MUInt15 ep[2][4])
+{
+ for (int j = 0; j < 2; j++)
+ {
+ Quantize(ep[j], 5, 3);
+ Unquantize(ep[j], 5, 3);
+ ep[j][3] = ParallelMath::MakeUInt15(255);
+ }
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints3(MUInt15 ep[2][4], uint16_t p[2])
+{
+ for (int j = 0; j < 2; j++)
+ {
+ QuantizeP(ep[j], 7, p[j], 3);
+ ep[j][3] = ParallelMath::MakeUInt15(255);
+ }
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints4(MUInt15 epRGB[2][3], MUInt15 epA[2])
+{
+ for (int j = 0; j < 2; j++)
+ {
+ Quantize(epRGB[j], 5, 3);
+ Unquantize(epRGB[j], 5, 3);
+
+ Quantize(epA + j, 6, 1);
+ Unquantize(epA + j, 6, 1);
+ }
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints5(MUInt15 epRGB[2][3], MUInt15 epA[2])
+{
+ for (int j = 0; j < 2; j++)
+ {
+ Quantize(epRGB[j], 7, 3);
+ Unquantize(epRGB[j], 7, 3);
+ }
+
+ // Alpha is full precision
+ (void)epA;
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints6(MUInt15 ep[2][4], uint16_t p[2])
+{
+ for (int j = 0; j < 2; j++)
+ QuantizeP(ep[j], 7, p[j], 4);
+}
+
+void cvtt::Internal::BC7Computer::CompressEndpoints7(MUInt15 ep[2][4], uint16_t p[2])
+{
+ for (int j = 0; j < 2; j++)
+ {
+ QuantizeP(ep[j], 5, p[j], 4);
+ Unquantize(ep[j], 6, 4);
+ }
+}
+
+void cvtt::Internal::BC7Computer::TrySingleColorRGBAMultiTable(uint32_t flags, const MUInt15 pixels[16][4], const MFloat average[4], int numRealChannels, const uint8_t *fragmentStart, int shapeLength, const MFloat &staticAlphaError, const ParallelMath::Int16CompFlag punchThroughInvalid[4], MFloat& shapeBestError, MUInt15 shapeBestEP[2][4], MUInt15 *fragmentBestIndexes, const float *channelWeightsSq, const cvtt::Tables::BC7SC::Table*const* tables, int numTables, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ MFloat bestAverageError = ParallelMath::MakeFloat(FLT_MAX);
+
+ MUInt15 intAverage[4];
+ for (int ch = 0; ch < 4; ch++)
+ intAverage[ch] = ParallelMath::RoundAndConvertToU15(average[ch], rtn);
+
+ MUInt15 eps[2][4];
+ MUInt15 reconstructed[4];
+ MUInt15 index = ParallelMath::MakeUInt15(0);
+
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ eps[epi][ch] = ParallelMath::MakeUInt15(0);
+ eps[epi][3] = ParallelMath::MakeUInt15(255);
+ }
+
+ for (int ch = 0; ch < 3; ch++)
+ reconstructed[ch] = ParallelMath::MakeUInt15(0);
+ reconstructed[3] = ParallelMath::MakeUInt15(255);
+
+ // Depending on the target index and parity bits, there are multiple valid solid colors.
+ // We want to find the one closest to the actual average.
+ MFloat epsAverageDiff = ParallelMath::MakeFloat(FLT_MAX);
+ for (int t = 0; t < numTables; t++)
+ {
+ const cvtt::Tables::BC7SC::Table& table = *(tables[t]);
+
+ ParallelMath::Int16CompFlag pti = punchThroughInvalid[table.m_pBits];
+
+ MUInt15 candidateReconstructed[4];
+ MUInt15 candidateEPs[2][4];
+
+ for (int i = 0; i < ParallelMath::ParallelSize; i++)
+ {
+ for (int ch = 0; ch < numRealChannels; ch++)
+ {
+ ParallelMath::ScalarUInt16 avgValue = ParallelMath::Extract(intAverage[ch], i);
+ assert(avgValue >= 0 && avgValue <= 255);
+
+ const cvtt::Tables::BC7SC::TableEntry &entry = table.m_entries[avgValue];
+
+ ParallelMath::PutUInt15(candidateEPs[0][ch], i, entry.m_min);
+ ParallelMath::PutUInt15(candidateEPs[1][ch], i, entry.m_max);
+ ParallelMath::PutUInt15(candidateReconstructed[ch], i, entry.m_actualColor);
+ }
+ }
+
+ MFloat avgError = ParallelMath::MakeFloatZero();
+ for (int ch = 0; ch < numRealChannels; ch++)
+ {
+ MFloat delta = ParallelMath::ToFloat(candidateReconstructed[ch]) - average[ch];
+ avgError = avgError + delta * delta * channelWeightsSq[ch];
+ }
+
+ ParallelMath::Int16CompFlag better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(avgError, bestAverageError));
+ better = ParallelMath::AndNot(pti, better); // Mask out punch-through invalidations
+
+ if (ParallelMath::AnySet(better))
+ {
+ ParallelMath::ConditionalSet(bestAverageError, ParallelMath::Int16FlagToFloat(better), avgError);
+
+ MUInt15 candidateIndex = ParallelMath::MakeUInt15(table.m_index);
+
+ ParallelMath::ConditionalSet(index, better, candidateIndex);
+
+ for (int ch = 0; ch < numRealChannels; ch++)
+ ParallelMath::ConditionalSet(reconstructed[ch], better, candidateReconstructed[ch]);
+
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < numRealChannels; ch++)
+ ParallelMath::ConditionalSet(eps[epi][ch], better, candidateEPs[epi][ch]);
+ }
+ }
+
+ AggregatedError<4> aggError;
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ {
+ int px = fragmentStart[pxi];
+
+ BCCommon::ComputeErrorLDR<4>(flags, reconstructed, pixels[px], numRealChannels, aggError);
+ }
+
+ MFloat error = aggError.Finalize(flags, channelWeightsSq) + staticAlphaError;
+
+ ParallelMath::Int16CompFlag better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, shapeBestError));
+ if (ParallelMath::AnySet(better))
+ {
+ shapeBestError = ParallelMath::Min(shapeBestError, error);
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < numRealChannels; ch++)
+ ParallelMath::ConditionalSet(shapeBestEP[epi][ch], better, eps[epi][ch]);
+ }
+
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ ParallelMath::ConditionalSet(fragmentBestIndexes[pxi], better, index);
+ }
+}
+
+void cvtt::Internal::BC7Computer::TrySinglePlane(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const float channelWeights[4], const BC7EncodingPlan &encodingPlan, int numRefineRounds, BC67::WorkInfo& work, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ if (numRefineRounds < 1)
+ numRefineRounds = 1;
+
+ float channelWeightsSq[4];
+
+ for (int ch = 0; ch < 4; ch++)
+ channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
+
+ SinglePlaneTemporaries temps;
+
+ MUInt15 maxAlpha = ParallelMath::MakeUInt15(0);
+ MUInt15 minAlpha = ParallelMath::MakeUInt15(255);
+ ParallelMath::Int16CompFlag isPunchThrough = ParallelMath::MakeBoolInt16(true);
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 a = pixels[px][3];
+ maxAlpha = ParallelMath::Max(maxAlpha, a);
+ minAlpha = ParallelMath::Min(minAlpha, a);
+
+ isPunchThrough = (isPunchThrough & (ParallelMath::Equal(a, ParallelMath::MakeUInt15(0)) | ParallelMath::Equal(a, ParallelMath::MakeUInt15(255))));
+ }
+
+ ParallelMath::Int16CompFlag blockHasNonMaxAlpha = ParallelMath::Less(minAlpha, ParallelMath::MakeUInt15(255));
+ ParallelMath::Int16CompFlag blockHasNonZeroAlpha = ParallelMath::Less(ParallelMath::MakeUInt15(0), maxAlpha);
+
+ bool anyBlockHasAlpha = ParallelMath::AnySet(blockHasNonMaxAlpha);
+
+ // Try RGB modes if any block has a min alpha 251 or higher
+ bool allowRGBModes = ParallelMath::AnySet(ParallelMath::Less(ParallelMath::MakeUInt15(250), minAlpha));
+
+ // Try mode 7 if any block has alpha.
+ // Mode 7 is almost never selected for RGB blocks because mode 4 has very accurate 7.7.7.1 endpoints
+ // and its parity bit doesn't affect alpha, meaning mode 7 can only be better in extremely specific
+ // situations, and only by at most 1 unit of error per pixel.
+ bool allowMode7 = anyBlockHasAlpha || (encodingPlan.mode7RGBPartitionEnabled != 0);
+
+ MFloat preWeightedPixels[16][4];
+
+ BCCommon::PreWeightPixelsLDR<4>(preWeightedPixels, pixels, channelWeights);
+
+ // Get initial RGB endpoints
+ if (allowRGBModes)
+ {
+ const uint8_t *shapeList = encodingPlan.rgbShapeList;
+ int numShapesToEvaluate = encodingPlan.rgbNumShapesToEvaluate;
+
+ for (int shapeIter = 0; shapeIter < numShapesToEvaluate; shapeIter++)
+ {
+ int shape = shapeList[shapeIter];
+
+ int shapeStart = BC7Data::g_shapeRanges[shape][0];
+ int shapeSize = BC7Data::g_shapeRanges[shape][1];
+
+ EndpointSelector<3, 8> epSelector;
+
+ for (int epPass = 0; epPass < NumEndpointSelectorPasses; epPass++)
+ {
+ for (int spx = 0; spx < shapeSize; spx++)
+ {
+ int px = BC7Data::g_fragments[shapeStart + spx];
+ epSelector.ContributePass(preWeightedPixels[px], epPass, ParallelMath::MakeFloat(1.0f));
+ }
+ epSelector.FinishPass(epPass);
+ }
+ temps.unfinishedRGB[shape] = epSelector.GetEndpoints(channelWeights);
+ }
+ }
+
+ // Get initial RGBA endpoints
+ {
+ const uint8_t *shapeList = encodingPlan.rgbaShapeList;
+ int numShapesToEvaluate = encodingPlan.rgbaNumShapesToEvaluate;
+
+ for (int shapeIter = 0; shapeIter < numShapesToEvaluate; shapeIter++)
+ {
+ int shape = shapeList[shapeIter];
+
+ if (anyBlockHasAlpha || !allowRGBModes)
+ {
+ int shapeStart = BC7Data::g_shapeRanges[shape][0];
+ int shapeSize = BC7Data::g_shapeRanges[shape][1];
+
+ EndpointSelector<4, 8> epSelector;
+
+ for (int epPass = 0; epPass < NumEndpointSelectorPasses; epPass++)
+ {
+ for (int spx = 0; spx < shapeSize; spx++)
+ {
+ int px = BC7Data::g_fragments[shapeStart + spx];
+ epSelector.ContributePass(preWeightedPixels[px], epPass, ParallelMath::MakeFloat(1.0f));
+ }
+ epSelector.FinishPass(epPass);
+ }
+ temps.unfinishedRGBA[shape] = epSelector.GetEndpoints(channelWeights);
+ }
+ else
+ {
+ temps.unfinishedRGBA[shape] = temps.unfinishedRGB[shape].ExpandTo<4>(255);
+ }
+ }
+ }
+
+ for (uint16_t mode = 0; mode <= 7; mode++)
+ {
+ if (mode == 4 || mode == 5)
+ continue;
+
+ if (mode < 4 && !allowRGBModes)
+ continue;
+
+ if (mode == 7 && !allowMode7)
+ continue;
+
+ uint64_t partitionEnabledBits = 0;
+ switch (mode)
+ {
+ case 0:
+ partitionEnabledBits = encodingPlan.mode0PartitionEnabled;
+ break;
+ case 1:
+ partitionEnabledBits = encodingPlan.mode1PartitionEnabled;
+ break;
+ case 2:
+ partitionEnabledBits = encodingPlan.mode2PartitionEnabled;
+ break;
+ case 3:
+ partitionEnabledBits = encodingPlan.mode3PartitionEnabled;
+ break;
+ case 6:
+ partitionEnabledBits = encodingPlan.mode6Enabled ? 1 : 0;
+ break;
+ case 7:
+ if (anyBlockHasAlpha)
+ partitionEnabledBits = encodingPlan.mode7RGBAPartitionEnabled;
+ else
+ partitionEnabledBits = encodingPlan.mode7RGBPartitionEnabled;
+ break;
+ default:
+ break;
+ }
+
+ bool isRGB = (mode < 4);
+
+ unsigned int numPartitions = 1 << BC7Data::g_modes[mode].m_partitionBits;
+ int numSubsets = BC7Data::g_modes[mode].m_numSubsets;
+ int indexPrec = BC7Data::g_modes[mode].m_indexBits;
+
+ int parityBitMax = 1;
+ if (BC7Data::g_modes[mode].m_pBitMode == BC7Data::PBitMode_PerEndpoint)
+ parityBitMax = 4;
+ else if (BC7Data::g_modes[mode].m_pBitMode == BC7Data::PBitMode_PerSubset)
+ parityBitMax = 2;
+
+ int numRealChannels = isRGB ? 3 : 4;
+
+ int numShapes;
+ const int *shapeList;
+
+ if (numSubsets == 1)
+ {
+ numShapes = BC7Data::g_numShapes1;
+ shapeList = BC7Data::g_shapeList1;
+ }
+ else if (numSubsets == 2)
+ {
+ numShapes = BC7Data::g_numShapes2;
+ shapeList = BC7Data::g_shapeList2;
+ }
+ else
+ {
+ assert(numSubsets == 3);
+ if (numPartitions == 16)
+ {
+ numShapes = BC7Data::g_numShapes3Short;
+ shapeList = BC7Data::g_shapeList3Short;
+ }
+ else
+ {
+ assert(numPartitions == 64);
+ numShapes = BC7Data::g_numShapes3;
+ shapeList = BC7Data::g_shapeList3;
+ }
+ }
+
+ for (int slot = 0; slot < BC7Data::g_numShapesAll; slot++)
+ temps.shapeBestError[slot] = ParallelMath::MakeFloat(FLT_MAX);
+
+ for (int shapeIter = 0; shapeIter < numShapes; shapeIter++)
+ {
+ int shape = shapeList[shapeIter];
+
+ int numTweakRounds = 0;
+ if (isRGB)
+ numTweakRounds = encodingPlan.seedPointsForShapeRGB[shape];
+ else
+ numTweakRounds = encodingPlan.seedPointsForShapeRGBA[shape];
+
+ if (numTweakRounds == 0)
+ continue;
+
+ if (numTweakRounds > MaxTweakRounds)
+ numTweakRounds = MaxTweakRounds;
+
+ int shapeStart = BC7Data::g_shapeRanges[shape][0];
+ int shapeLength = BC7Data::g_shapeRanges[shape][1];
+
+ AggregatedError<1> alphaAggError;
+ if (isRGB && anyBlockHasAlpha)
+ {
+ MUInt15 filledAlpha[1] = { ParallelMath::MakeUInt15(255) };
+
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ {
+ int px = BC7Data::g_fragments[shapeStart + pxi];
+ MUInt15 original[1] = { pixels[px][3] };
+ BCCommon::ComputeErrorLDR<1>(flags, filledAlpha, original, alphaAggError);
+ }
+ }
+
+ float alphaWeightsSq[1] = { channelWeightsSq[3] };
+ MFloat staticAlphaError = alphaAggError.Finalize(flags, alphaWeightsSq);
+
+ MUInt15 tweakBaseEP[MaxTweakRounds][2][4];
+
+ for (int tweak = 0; tweak < numTweakRounds; tweak++)
+ {
+ if (isRGB)
+ {
+ temps.unfinishedRGB[shape].FinishLDR(tweak, 1 << indexPrec, tweakBaseEP[tweak][0], tweakBaseEP[tweak][1]);
+ tweakBaseEP[tweak][0][3] = tweakBaseEP[tweak][1][3] = ParallelMath::MakeUInt15(255);
+ }
+ else
+ {
+ temps.unfinishedRGBA[shape].FinishLDR(tweak, 1 << indexPrec, tweakBaseEP[tweak][0], tweakBaseEP[tweak][1]);
+ }
+ }
+
+ ParallelMath::Int16CompFlag punchThroughInvalid[4];
+ for (int pIter = 0; pIter < parityBitMax; pIter++)
+ {
+ punchThroughInvalid[pIter] = ParallelMath::MakeBoolInt16(false);
+
+ if ((flags & Flags::BC7_RespectPunchThrough) && (mode == 6 || mode == 7))
+ {
+ // Modes 6 and 7 have parity bits that affect alpha
+ if (pIter == 0)
+ punchThroughInvalid[pIter] = (isPunchThrough & blockHasNonZeroAlpha);
+ else if (pIter == parityBitMax - 1)
+ punchThroughInvalid[pIter] = (isPunchThrough & blockHasNonMaxAlpha);
+ else
+ punchThroughInvalid[pIter] = isPunchThrough;
+ }
+ }
+
+ for (int pIter = 0; pIter < parityBitMax; pIter++)
+ {
+ if (ParallelMath::AllSet(punchThroughInvalid[pIter]))
+ continue;
+
+ bool needPunchThroughCheck = ParallelMath::AnySet(punchThroughInvalid[pIter]);
+
+ for (int tweak = 0; tweak < numTweakRounds; tweak++)
+ {
+ uint16_t p[2];
+ p[0] = (pIter & 1);
+ p[1] = ((pIter >> 1) & 1);
+
+ MUInt15 ep[2][4];
+
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 4; ch++)
+ ep[epi][ch] = tweakBaseEP[tweak][epi][ch];
+
+ for (int refine = 0; refine < numRefineRounds; refine++)
+ {
+ switch (mode)
+ {
+ case 0:
+ CompressEndpoints0(ep, p);
+ break;
+ case 1:
+ CompressEndpoints1(ep, p[0]);
+ break;
+ case 2:
+ CompressEndpoints2(ep);
+ break;
+ case 3:
+ CompressEndpoints3(ep, p);
+ break;
+ case 6:
+ CompressEndpoints6(ep, p);
+ break;
+ case 7:
+ CompressEndpoints7(ep, p);
+ break;
+ default:
+ assert(false);
+ break;
+ };
+
+ MFloat shapeError = ParallelMath::MakeFloatZero();
+
+ IndexSelector<4> indexSelector;
+ indexSelector.Init<false>(channelWeights, ep, 1 << indexPrec);
+
+ EndpointRefiner<4> epRefiner;
+ epRefiner.Init(1 << indexPrec, channelWeights);
+
+ MUInt15 indexes[16];
+
+ AggregatedError<4> aggError;
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ {
+ int px = BC7Data::g_fragments[shapeStart + pxi];
+
+ MUInt15 index;
+ MUInt15 reconstructed[4];
+
+ index = indexSelector.SelectIndexLDR(floatPixels[px], rtn);
+ indexSelector.ReconstructLDR_BC7(index, reconstructed, numRealChannels);
+
+ if (flags & cvtt::Flags::BC7_FastIndexing)
+ BCCommon::ComputeErrorLDR<4>(flags, reconstructed, pixels[px], numRealChannels, aggError);
+ else
+ {
+ MFloat error = BCCommon::ComputeErrorLDRSimple<4>(flags, reconstructed, pixels[px], numRealChannels, channelWeightsSq);
+
+ MUInt15 altIndexes[2];
+ altIndexes[0] = ParallelMath::Max(index, ParallelMath::MakeUInt15(1)) - ParallelMath::MakeUInt15(1);
+ altIndexes[1] = ParallelMath::Min(index + ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << indexPrec) - 1)));
+
+ for (int ii = 0; ii < 2; ii++)
+ {
+ indexSelector.ReconstructLDR_BC7(altIndexes[ii], reconstructed, numRealChannels);
+
+ MFloat altError = BCCommon::ComputeErrorLDRSimple<4>(flags, reconstructed, pixels[px], numRealChannels, channelWeightsSq);
+ ParallelMath::Int16CompFlag better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(altError, error));
+ error = ParallelMath::Min(error, altError);
+ ParallelMath::ConditionalSet(index, better, altIndexes[ii]);
+ }
+
+ shapeError = shapeError + error;
+ }
+
+ if (refine != numRefineRounds - 1)
+ epRefiner.ContributeUnweightedPW(preWeightedPixels[px], index, numRealChannels);
+
+ indexes[pxi] = index;
+ }
+
+ if (flags & cvtt::Flags::BC7_FastIndexing)
+ shapeError = aggError.Finalize(flags, channelWeightsSq);
+
+ if (isRGB)
+ shapeError = shapeError + staticAlphaError;
+
+ ParallelMath::FloatCompFlag shapeErrorBetter;
+ ParallelMath::Int16CompFlag shapeErrorBetter16;
+
+ shapeErrorBetter = ParallelMath::Less(shapeError, temps.shapeBestError[shape]);
+ shapeErrorBetter16 = ParallelMath::FloatFlagToInt16(shapeErrorBetter);
+
+ if (ParallelMath::AnySet(shapeErrorBetter16))
+ {
+ bool punchThroughOK = true;
+ if (needPunchThroughCheck)
+ {
+ shapeErrorBetter16 = ParallelMath::AndNot(punchThroughInvalid[pIter], shapeErrorBetter16);
+ shapeErrorBetter = ParallelMath::Int16FlagToFloat(shapeErrorBetter16);
+
+ if (!ParallelMath::AnySet(shapeErrorBetter16))
+ punchThroughOK = false;
+ }
+
+ if (punchThroughOK)
+ {
+ ParallelMath::ConditionalSet(temps.shapeBestError[shape], shapeErrorBetter, shapeError);
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < numRealChannels; ch++)
+ ParallelMath::ConditionalSet(temps.shapeBestEP[shape][epi][ch], shapeErrorBetter16, ep[epi][ch]);
+
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ ParallelMath::ConditionalSet(temps.fragmentBestIndexes[shapeStart + pxi], shapeErrorBetter16, indexes[pxi]);
+ }
+ }
+
+ if (refine != numRefineRounds - 1)
+ epRefiner.GetRefinedEndpointsLDR(ep, numRealChannels, rtn);
+ } // refine
+ } // tweak
+ } // p
+
+ if (flags & cvtt::Flags::BC7_TrySingleColor)
+ {
+ MUInt15 total[4];
+ for (int ch = 0; ch < 4; ch++)
+ total[ch] = ParallelMath::MakeUInt15(0);
+
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ {
+ int px = BC7Data::g_fragments[shapeStart + pxi];
+ for (int ch = 0; ch < 4; ch++)
+ total[ch] = total[ch] + pixels[pxi][ch];
+ }
+
+ MFloat rcpShapeLength = ParallelMath::MakeFloat(1.0f / static_cast<float>(shapeLength));
+ MFloat average[4];
+ for (int ch = 0; ch < 4; ch++)
+ average[ch] = ParallelMath::ToFloat(total[ch]) * rcpShapeLength;
+
+ const uint8_t *fragment = BC7Data::g_fragments + shapeStart;
+ MFloat &shapeBestError = temps.shapeBestError[shape];
+ MUInt15 (&shapeBestEP)[2][4] = temps.shapeBestEP[shape];
+ MUInt15 *fragmentBestIndexes = temps.fragmentBestIndexes + shapeStart;
+
+ const cvtt::Tables::BC7SC::Table **scTables = NULL;
+ int numSCTables = 0;
+
+ const cvtt::Tables::BC7SC::Table *tables0[] =
+ {
+ &cvtt::Tables::BC7SC::g_mode0_p00_i1,
+ &cvtt::Tables::BC7SC::g_mode0_p00_i2,
+ &cvtt::Tables::BC7SC::g_mode0_p00_i3,
+ &cvtt::Tables::BC7SC::g_mode0_p01_i1,
+ &cvtt::Tables::BC7SC::g_mode0_p01_i2,
+ &cvtt::Tables::BC7SC::g_mode0_p01_i3,
+ &cvtt::Tables::BC7SC::g_mode0_p10_i1,
+ &cvtt::Tables::BC7SC::g_mode0_p10_i2,
+ &cvtt::Tables::BC7SC::g_mode0_p10_i3,
+ &cvtt::Tables::BC7SC::g_mode0_p11_i1,
+ &cvtt::Tables::BC7SC::g_mode0_p11_i2,
+ &cvtt::Tables::BC7SC::g_mode0_p11_i3,
+ };
+
+ const cvtt::Tables::BC7SC::Table *tables1[] =
+ {
+ &cvtt::Tables::BC7SC::g_mode1_p0_i1,
+ &cvtt::Tables::BC7SC::g_mode1_p0_i2,
+ &cvtt::Tables::BC7SC::g_mode1_p0_i3,
+ &cvtt::Tables::BC7SC::g_mode1_p1_i1,
+ &cvtt::Tables::BC7SC::g_mode1_p1_i2,
+ &cvtt::Tables::BC7SC::g_mode1_p1_i3,
+ };
+
+ const cvtt::Tables::BC7SC::Table *tables2[] =
+ {
+ &cvtt::Tables::BC7SC::g_mode2,
+ };
+
+ const cvtt::Tables::BC7SC::Table *tables3[] =
+ {
+ &cvtt::Tables::BC7SC::g_mode3_p0,
+ &cvtt::Tables::BC7SC::g_mode3_p1,
+ };
+
+ const cvtt::Tables::BC7SC::Table *tables6[] =
+ {
+ &cvtt::Tables::BC7SC::g_mode6_p0_i1,
+ &cvtt::Tables::BC7SC::g_mode6_p0_i2,
+ &cvtt::Tables::BC7SC::g_mode6_p0_i3,
+ &cvtt::Tables::BC7SC::g_mode6_p0_i4,
+ &cvtt::Tables::BC7SC::g_mode6_p0_i5,
+ &cvtt::Tables::BC7SC::g_mode6_p0_i6,
+ &cvtt::Tables::BC7SC::g_mode6_p0_i7,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i1,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i2,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i3,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i4,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i5,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i6,
+ &cvtt::Tables::BC7SC::g_mode6_p1_i7,
+ };
+
+ const cvtt::Tables::BC7SC::Table *tables7[] =
+ {
+ &cvtt::Tables::BC7SC::g_mode7_p00,
+ &cvtt::Tables::BC7SC::g_mode7_p01,
+ &cvtt::Tables::BC7SC::g_mode7_p10,
+ &cvtt::Tables::BC7SC::g_mode7_p11,
+ };
+
+ switch (mode)
+ {
+ case 0:
+ {
+ scTables = tables0;
+ numSCTables = sizeof(tables0) / sizeof(tables0[0]);
+ }
+ break;
+ case 1:
+ {
+ scTables = tables1;
+ numSCTables = sizeof(tables1) / sizeof(tables1[0]);
+ }
+ break;
+ case 2:
+ {
+
+ scTables = tables2;
+ numSCTables = sizeof(tables2) / sizeof(tables2[0]);
+ }
+ break;
+ case 3:
+ {
+ scTables = tables3;
+ numSCTables = sizeof(tables3) / sizeof(tables3[0]);
+ }
+ break;
+ case 6:
+ {
+ scTables = tables6;
+ numSCTables = sizeof(tables6) / sizeof(tables6[0]);
+ }
+ break;
+ case 7:
+ {
+ scTables = tables7;
+ numSCTables = sizeof(tables7) / sizeof(tables7[0]);
+ }
+ break;
+ default:
+ assert(false);
+ break;
+ }
+
+ TrySingleColorRGBAMultiTable(flags, pixels, average, numRealChannels, fragment, shapeLength, staticAlphaError, punchThroughInvalid, shapeBestError, shapeBestEP, fragmentBestIndexes, channelWeightsSq, scTables, numSCTables, rtn);
+ }
+ } // shapeIter
+
+ uint64_t partitionsEnabledBits = 0xffffffffffffffffULL;
+
+ switch (mode)
+ {
+ case 0:
+ partitionsEnabledBits = encodingPlan.mode0PartitionEnabled;
+ break;
+ case 1:
+ partitionsEnabledBits = encodingPlan.mode1PartitionEnabled;
+ break;
+ case 2:
+ partitionsEnabledBits = encodingPlan.mode2PartitionEnabled;
+ break;
+ case 3:
+ partitionsEnabledBits = encodingPlan.mode3PartitionEnabled;
+ break;
+ case 6:
+ partitionsEnabledBits = encodingPlan.mode6Enabled ? 1 : 0;
+ break;
+ case 7:
+ if (anyBlockHasAlpha)
+ partitionEnabledBits = encodingPlan.mode7RGBAPartitionEnabled;
+ else
+ partitionEnabledBits = encodingPlan.mode7RGBPartitionEnabled;
+ break;
+ default:
+ break;
+ };
+
+ for (uint16_t partition = 0; partition < numPartitions; partition++)
+ {
+ if (((partitionsEnabledBits >> partition) & 1) == 0)
+ continue;
+
+ const int *partitionShapes;
+ if (numSubsets == 1)
+ partitionShapes = BC7Data::g_shapes1[partition];
+ else if (numSubsets == 2)
+ partitionShapes = BC7Data::g_shapes2[partition];
+ else
+ {
+ assert(numSubsets == 3);
+ partitionShapes = BC7Data::g_shapes3[partition];
+ }
+
+ MFloat totalError = ParallelMath::MakeFloatZero();
+ for (int subset = 0; subset < numSubsets; subset++)
+ totalError = totalError + temps.shapeBestError[partitionShapes[subset]];
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(totalError, work.m_error);
+ ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
+
+ if (mode == 7 && anyBlockHasAlpha)
+ {
+ // Some lanes could be better, but we filter them out to ensure consistency with scalar
+ bool isRGBAllowedForThisPartition = (((encodingPlan.mode7RGBPartitionEnabled >> partition) & 1) != 0);
+
+ if (!isRGBAllowedForThisPartition)
+ {
+ errorBetter16 = (errorBetter16 & blockHasNonMaxAlpha);
+ errorBetter = ParallelMath::Int16FlagToFloat(errorBetter16);
+ }
+ }
+
+ if (ParallelMath::AnySet(errorBetter16))
+ {
+ for (int subset = 0; subset < numSubsets; subset++)
+ {
+ int shape = partitionShapes[subset];
+ int shapeStart = BC7Data::g_shapeRanges[shape][0];
+ int shapeLength = BC7Data::g_shapeRanges[shape][1];
+
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 4; ch++)
+ ParallelMath::ConditionalSet(work.m_ep[subset][epi][ch], errorBetter16, temps.shapeBestEP[shape][epi][ch]);
+
+ for (int pxi = 0; pxi < shapeLength; pxi++)
+ {
+ int px = BC7Data::g_fragments[shapeStart + pxi];
+ ParallelMath::ConditionalSet(work.m_indexes[px], errorBetter16, temps.fragmentBestIndexes[shapeStart + pxi]);
+ }
+ }
+
+ ParallelMath::ConditionalSet(work.m_error, errorBetter, totalError);
+ ParallelMath::ConditionalSet(work.m_mode, errorBetter16, ParallelMath::MakeUInt15(mode));
+ ParallelMath::ConditionalSet(work.m_u.m_partition, errorBetter16, ParallelMath::MakeUInt15(partition));
+ }
+ }
+ }
+}
+
+void cvtt::Internal::BC7Computer::TryDualPlane(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const float channelWeights[4], const BC7EncodingPlan &encodingPlan, int numRefineRounds, BC67::WorkInfo& work, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ // TODO: These error calculations are not optimal for weight-by-alpha, but this routine needs to be mostly rewritten for that.
+ // The alpha/color solutions are co-dependent in that case, but a good way to solve it would probably be to
+ // solve the alpha channel first, then solve the RGB channels, which in turn breaks down into two cases:
+ // - Separate alpha channel, then weighted RGB
+ // - Alpha+2 other channels, then the independent channel
+ if (numRefineRounds < 1)
+ numRefineRounds = 1;
+
+ float channelWeightsSq[4];
+ for (int ch = 0; ch < 4; ch++)
+ channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
+
+ for (uint16_t mode = 4; mode <= 5; mode++)
+ {
+ int numSP[2] = { 0, 0 };
+
+ for (uint16_t rotation = 0; rotation < 4; rotation++)
+ {
+ if (mode == 4)
+ {
+ numSP[0] = encodingPlan.mode4SP[rotation][0];
+ numSP[1] = encodingPlan.mode4SP[rotation][1];
+ }
+ else
+ numSP[0] = numSP[1] = encodingPlan.mode5SP[rotation];
+
+ if (numSP[0] == 0 && numSP[1] == 0)
+ continue;
+
+ int alphaChannel = (rotation + 3) & 3;
+ int redChannel = (rotation == 1) ? 3 : 0;
+ int greenChannel = (rotation == 2) ? 3 : 1;
+ int blueChannel = (rotation == 3) ? 3 : 2;
+
+ MUInt15 rotatedRGB[16][3];
+ MFloat floatRotatedRGB[16][3];
+
+ for (int px = 0; px < 16; px++)
+ {
+ rotatedRGB[px][0] = pixels[px][redChannel];
+ rotatedRGB[px][1] = pixels[px][greenChannel];
+ rotatedRGB[px][2] = pixels[px][blueChannel];
+
+ for (int ch = 0; ch < 3; ch++)
+ floatRotatedRGB[px][ch] = ParallelMath::ToFloat(rotatedRGB[px][ch]);
+ }
+
+ uint16_t maxIndexSelector = (mode == 4) ? 2 : 1;
+
+ float rotatedRGBWeights[3] = { channelWeights[redChannel], channelWeights[greenChannel], channelWeights[blueChannel] };
+ float rotatedRGBWeightsSq[3] = { channelWeightsSq[redChannel], channelWeightsSq[greenChannel], channelWeightsSq[blueChannel] };
+ float rotatedAlphaWeight[1] = { channelWeights[alphaChannel] };
+ float rotatedAlphaWeightSq[1] = { channelWeightsSq[alphaChannel] };
+
+ float uniformWeight[1] = { 1.0f }; // Since the alpha channel is independent, there's no need to bother with weights when doing refinement or selection, only error
+
+ MFloat preWeightedRotatedRGB[16][3];
+ BCCommon::PreWeightPixelsLDR<3>(preWeightedRotatedRGB, rotatedRGB, rotatedRGBWeights);
+
+ for (uint16_t indexSelector = 0; indexSelector < maxIndexSelector; indexSelector++)
+ {
+ int numTweakRounds = numSP[indexSelector];
+
+ if (numTweakRounds <= 0)
+ continue;
+
+ if (numTweakRounds > MaxTweakRounds)
+ numTweakRounds = MaxTweakRounds;
+
+ EndpointSelector<3, 8> rgbSelector;
+
+ for (int epPass = 0; epPass < NumEndpointSelectorPasses; epPass++)
+ {
+ for (int px = 0; px < 16; px++)
+ rgbSelector.ContributePass(preWeightedRotatedRGB[px], epPass, ParallelMath::MakeFloat(1.0f));
+
+ rgbSelector.FinishPass(epPass);
+ }
+
+ MUInt15 alphaRange[2];
+
+ alphaRange[0] = alphaRange[1] = pixels[0][alphaChannel];
+ for (int px = 1; px < 16; px++)
+ {
+ alphaRange[0] = ParallelMath::Min(pixels[px][alphaChannel], alphaRange[0]);
+ alphaRange[1] = ParallelMath::Max(pixels[px][alphaChannel], alphaRange[1]);
+ }
+
+ int rgbPrec = 0;
+ int alphaPrec = 0;
+
+ if (mode == 4)
+ {
+ rgbPrec = indexSelector ? 3 : 2;
+ alphaPrec = indexSelector ? 2 : 3;
+ }
+ else
+ rgbPrec = alphaPrec = 2;
+
+ UnfinishedEndpoints<3> unfinishedRGB = rgbSelector.GetEndpoints(rotatedRGBWeights);
+
+ MFloat bestRGBError = ParallelMath::MakeFloat(FLT_MAX);
+ MFloat bestAlphaError = ParallelMath::MakeFloat(FLT_MAX);
+
+ MUInt15 bestRGBIndexes[16];
+ MUInt15 bestAlphaIndexes[16];
+ MUInt15 bestEP[2][4];
+
+ for (int px = 0; px < 16; px++)
+ bestRGBIndexes[px] = bestAlphaIndexes[px] = ParallelMath::MakeUInt15(0);
+
+ for (int tweak = 0; tweak < numTweakRounds; tweak++)
+ {
+ MUInt15 rgbEP[2][3];
+ MUInt15 alphaEP[2];
+
+ unfinishedRGB.FinishLDR(tweak, 1 << rgbPrec, rgbEP[0], rgbEP[1]);
+
+ TweakAlpha(alphaRange, tweak, 1 << alphaPrec, alphaEP);
+
+ for (int refine = 0; refine < numRefineRounds; refine++)
+ {
+ if (mode == 4)
+ CompressEndpoints4(rgbEP, alphaEP);
+ else
+ CompressEndpoints5(rgbEP, alphaEP);
+
+
+ IndexSelector<1> alphaIndexSelector;
+ IndexSelector<3> rgbIndexSelector;
+
+ {
+ MUInt15 alphaEPTemp[2][1] = { { alphaEP[0] },{ alphaEP[1] } };
+ alphaIndexSelector.Init<false>(uniformWeight, alphaEPTemp, 1 << alphaPrec);
+ }
+ rgbIndexSelector.Init<false>(rotatedRGBWeights, rgbEP, 1 << rgbPrec);
+
+ EndpointRefiner<3> rgbRefiner;
+ EndpointRefiner<1> alphaRefiner;
+
+ rgbRefiner.Init(1 << rgbPrec, rotatedRGBWeights);
+ alphaRefiner.Init(1 << alphaPrec, uniformWeight);
+
+ MFloat errorRGB = ParallelMath::MakeFloatZero();
+ MFloat errorA = ParallelMath::MakeFloatZero();
+
+ MUInt15 rgbIndexes[16];
+ MUInt15 alphaIndexes[16];
+
+ AggregatedError<3> rgbAggError;
+ AggregatedError<1> alphaAggError;
+
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 rgbIndex = rgbIndexSelector.SelectIndexLDR(floatRotatedRGB[px], rtn);
+ MUInt15 alphaIndex = alphaIndexSelector.SelectIndexLDR(floatPixels[px] + alphaChannel, rtn);
+
+ MUInt15 reconstructedRGB[3];
+ MUInt15 reconstructedAlpha[1];
+
+ rgbIndexSelector.ReconstructLDR_BC7(rgbIndex, reconstructedRGB);
+ alphaIndexSelector.ReconstructLDR_BC7(alphaIndex, reconstructedAlpha);
+
+ if (flags & cvtt::Flags::BC7_FastIndexing)
+ {
+ BCCommon::ComputeErrorLDR<3>(flags, reconstructedRGB, rotatedRGB[px], rgbAggError);
+ BCCommon::ComputeErrorLDR<1>(flags, reconstructedAlpha, pixels[px] + alphaChannel, alphaAggError);
+ }
+ else
+ {
+ AggregatedError<3> baseRGBAggError;
+ AggregatedError<1> baseAlphaAggError;
+
+ BCCommon::ComputeErrorLDR<3>(flags, reconstructedRGB, rotatedRGB[px], baseRGBAggError);
+ BCCommon::ComputeErrorLDR<1>(flags, reconstructedAlpha, pixels[px] + alphaChannel, baseAlphaAggError);
+
+ MFloat rgbError = baseRGBAggError.Finalize(flags, rotatedRGBWeightsSq);
+ MFloat alphaError = baseAlphaAggError.Finalize(flags, rotatedAlphaWeightSq);
+
+ MUInt15 altRGBIndexes[2];
+ MUInt15 altAlphaIndexes[2];
+
+ altRGBIndexes[0] = ParallelMath::Max(rgbIndex, ParallelMath::MakeUInt15(1)) - ParallelMath::MakeUInt15(1);
+ altRGBIndexes[1] = ParallelMath::Min(rgbIndex + ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << rgbPrec) - 1)));
+
+ altAlphaIndexes[0] = ParallelMath::Max(alphaIndex, ParallelMath::MakeUInt15(1)) - ParallelMath::MakeUInt15(1);
+ altAlphaIndexes[1] = ParallelMath::Min(alphaIndex + ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << alphaPrec) - 1)));
+
+ for (int ii = 0; ii < 2; ii++)
+ {
+ rgbIndexSelector.ReconstructLDR_BC7(altRGBIndexes[ii], reconstructedRGB);
+ alphaIndexSelector.ReconstructLDR_BC7(altAlphaIndexes[ii], reconstructedAlpha);
+
+ AggregatedError<3> altRGBAggError;
+ AggregatedError<1> altAlphaAggError;
+
+ BCCommon::ComputeErrorLDR<3>(flags, reconstructedRGB, rotatedRGB[px], altRGBAggError);
+ BCCommon::ComputeErrorLDR<1>(flags, reconstructedAlpha, pixels[px] + alphaChannel, altAlphaAggError);
+
+ MFloat altRGBError = altRGBAggError.Finalize(flags, rotatedRGBWeightsSq);
+ MFloat altAlphaError = altAlphaAggError.Finalize(flags, rotatedAlphaWeightSq);
+
+ ParallelMath::Int16CompFlag rgbBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(altRGBError, rgbError));
+ ParallelMath::Int16CompFlag alphaBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(altAlphaError, alphaError));
+
+ rgbError = ParallelMath::Min(altRGBError, rgbError);
+ alphaError = ParallelMath::Min(altAlphaError, alphaError);
+
+ ParallelMath::ConditionalSet(rgbIndex, rgbBetter, altRGBIndexes[ii]);
+ ParallelMath::ConditionalSet(alphaIndex, alphaBetter, altAlphaIndexes[ii]);
+ }
+
+ errorRGB = errorRGB + rgbError;
+ errorA = errorA + alphaError;
+ }
+
+ if (refine != numRefineRounds - 1)
+ {
+ rgbRefiner.ContributeUnweightedPW(preWeightedRotatedRGB[px], rgbIndex);
+ alphaRefiner.ContributeUnweightedPW(floatPixels[px] + alphaChannel, alphaIndex);
+ }
+
+ if (flags & Flags::BC7_FastIndexing)
+ {
+ errorRGB = rgbAggError.Finalize(flags, rotatedRGBWeightsSq);
+ errorA = alphaAggError.Finalize(flags, rotatedAlphaWeightSq);
+ }
+
+ rgbIndexes[px] = rgbIndex;
+ alphaIndexes[px] = alphaIndex;
+ }
+
+ ParallelMath::FloatCompFlag rgbBetter = ParallelMath::Less(errorRGB, bestRGBError);
+ ParallelMath::FloatCompFlag alphaBetter = ParallelMath::Less(errorA, bestAlphaError);
+
+ ParallelMath::Int16CompFlag rgbBetterInt16 = ParallelMath::FloatFlagToInt16(rgbBetter);
+ ParallelMath::Int16CompFlag alphaBetterInt16 = ParallelMath::FloatFlagToInt16(alphaBetter);
+
+ if (ParallelMath::AnySet(rgbBetterInt16))
+ {
+ bestRGBError = ParallelMath::Min(errorRGB, bestRGBError);
+
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestRGBIndexes[px], rgbBetterInt16, rgbIndexes[px]);
+
+ for (int ep = 0; ep < 2; ep++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ ParallelMath::ConditionalSet(bestEP[ep][ch], rgbBetterInt16, rgbEP[ep][ch]);
+ }
+ }
+
+ if (ParallelMath::AnySet(alphaBetterInt16))
+ {
+ bestAlphaError = ParallelMath::Min(errorA, bestAlphaError);
+
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestAlphaIndexes[px], alphaBetterInt16, alphaIndexes[px]);
+
+ for (int ep = 0; ep < 2; ep++)
+ ParallelMath::ConditionalSet(bestEP[ep][3], alphaBetterInt16, alphaEP[ep]);
+ }
+
+ if (refine != numRefineRounds - 1)
+ {
+ rgbRefiner.GetRefinedEndpointsLDR(rgbEP, rtn);
+
+ MUInt15 alphaEPTemp[2][1];
+ alphaRefiner.GetRefinedEndpointsLDR(alphaEPTemp, rtn);
+
+ for (int i = 0; i < 2; i++)
+ alphaEP[i] = alphaEPTemp[i][0];
+ }
+ } // refine
+ } // tweak
+
+ MFloat combinedError = bestRGBError + bestAlphaError;
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(combinedError, work.m_error);
+ ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
+
+ work.m_error = ParallelMath::Min(combinedError, work.m_error);
+
+ ParallelMath::ConditionalSet(work.m_mode, errorBetter16, ParallelMath::MakeUInt15(mode));
+ ParallelMath::ConditionalSet(work.m_u.m_isr.m_rotation, errorBetter16, ParallelMath::MakeUInt15(rotation));
+ ParallelMath::ConditionalSet(work.m_u.m_isr.m_indexSelector, errorBetter16, ParallelMath::MakeUInt15(indexSelector));
+
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::ConditionalSet(work.m_indexes[px], errorBetter16, indexSelector ? bestAlphaIndexes[px] : bestRGBIndexes[px]);
+ ParallelMath::ConditionalSet(work.m_indexes2[px], errorBetter16, indexSelector ? bestRGBIndexes[px] : bestAlphaIndexes[px]);
+ }
+
+ for (int ep = 0; ep < 2; ep++)
+ for (int ch = 0; ch < 4; ch++)
+ ParallelMath::ConditionalSet(work.m_ep[0][ep][ch], errorBetter16, bestEP[ep][ch]);
+ }
+ }
+ }
+}
+
+template<class T>
+void cvtt::Internal::BC7Computer::Swap(T& a, T& b)
+{
+ T temp = a;
+ a = b;
+ b = temp;
+}
+
+void cvtt::Internal::BC7Computer::Pack(uint32_t flags, const PixelBlockU8* inputs, uint8_t* packedBlocks, const float channelWeights[4], const BC7EncodingPlan &encodingPlan, int numRefineRounds)
+{
+ MUInt15 pixels[16][4];
+ MFloat floatPixels[16][4];
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ ParallelMath::ConvertLDRInputs(inputs, px, ch, pixels[px][ch]);
+ }
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ floatPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]);
+ }
+
+ BC67::WorkInfo work;
+ memset(&work, 0, sizeof(work));
+
+ work.m_error = ParallelMath::MakeFloat(FLT_MAX);
+
+ {
+ ParallelMath::RoundTowardNearestForScope rtn;
+ TrySinglePlane(flags, pixels, floatPixels, channelWeights, encodingPlan, numRefineRounds, work, &rtn);
+ TryDualPlane(flags, pixels, floatPixels, channelWeights, encodingPlan, numRefineRounds, work, &rtn);
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ PackingVector pv;
+ pv.Init();
+
+ ParallelMath::ScalarUInt16 mode = ParallelMath::Extract(work.m_mode, block);
+ ParallelMath::ScalarUInt16 partition = ParallelMath::Extract(work.m_u.m_partition, block);
+ ParallelMath::ScalarUInt16 indexSelector = ParallelMath::Extract(work.m_u.m_isr.m_indexSelector, block);
+
+ const BC7Data::BC7ModeInfo& modeInfo = BC7Data::g_modes[mode];
+
+ ParallelMath::ScalarUInt16 indexes[16];
+ ParallelMath::ScalarUInt16 indexes2[16];
+ ParallelMath::ScalarUInt16 endPoints[3][2][4];
+
+ for (int i = 0; i < 16; i++)
+ {
+ indexes[i] = ParallelMath::Extract(work.m_indexes[i], block);
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ indexes2[i] = ParallelMath::Extract(work.m_indexes2[i], block);
+ }
+
+ for (int subset = 0; subset < 3; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ endPoints[subset][ep][ch] = ParallelMath::Extract(work.m_ep[subset][ep][ch], block);
+ }
+ }
+
+ int fixups[3] = { 0, 0, 0 };
+
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ {
+ bool flipRGB = ((indexes[0] & (1 << (modeInfo.m_indexBits - 1))) != 0);
+ bool flipAlpha = ((indexes2[0] & (1 << (modeInfo.m_alphaIndexBits - 1))) != 0);
+
+ if (flipRGB)
+ {
+ uint16_t highIndex = (1 << modeInfo.m_indexBits) - 1;
+ for (int px = 0; px < 16; px++)
+ indexes[px] = highIndex - indexes[px];
+ }
+
+ if (flipAlpha)
+ {
+ uint16_t highIndex = (1 << modeInfo.m_alphaIndexBits) - 1;
+ for (int px = 0; px < 16; px++)
+ indexes2[px] = highIndex - indexes2[px];
+ }
+
+ if (indexSelector)
+ Swap(flipRGB, flipAlpha);
+
+ if (flipRGB)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ Swap(endPoints[0][0][ch], endPoints[0][1][ch]);
+ }
+ if (flipAlpha)
+ Swap(endPoints[0][0][3], endPoints[0][1][3]);
+
+ }
+ else
+ {
+ if (modeInfo.m_numSubsets == 2)
+ fixups[1] = BC7Data::g_fixupIndexes2[partition];
+ else if (modeInfo.m_numSubsets == 3)
+ {
+ fixups[1] = BC7Data::g_fixupIndexes3[partition][0];
+ fixups[2] = BC7Data::g_fixupIndexes3[partition][1];
+ }
+
+ bool flip[3] = { false, false, false };
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ flip[subset] = ((indexes[fixups[subset]] & (1 << (modeInfo.m_indexBits - 1))) != 0);
+
+ if (flip[0] || flip[1] || flip[2])
+ {
+ uint16_t highIndex = (1 << modeInfo.m_indexBits) - 1;
+ for (int px = 0; px < 16; px++)
+ {
+ int subset = 0;
+ if (modeInfo.m_numSubsets == 2)
+ subset = (BC7Data::g_partitionMap[partition] >> px) & 1;
+ else if (modeInfo.m_numSubsets == 3)
+ subset = (BC7Data::g_partitionMap2[partition] >> (px * 2)) & 3;
+
+ if (flip[subset])
+ indexes[px] = highIndex - indexes[px];
+ }
+
+ int maxCH = (modeInfo.m_alphaMode == BC7Data::AlphaMode_Combined) ? 4 : 3;
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ if (flip[subset])
+ for (int ch = 0; ch < maxCH; ch++)
+ Swap(endPoints[subset][0][ch], endPoints[subset][1][ch]);
+ }
+ }
+ }
+
+ pv.Pack(static_cast<uint8_t>(1 << mode), mode + 1);
+
+ if (modeInfo.m_partitionBits)
+ pv.Pack(partition, modeInfo.m_partitionBits);
+
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ {
+ ParallelMath::ScalarUInt16 rotation = ParallelMath::Extract(work.m_u.m_isr.m_rotation, block);
+ pv.Pack(rotation, 2);
+ }
+
+ if (modeInfo.m_hasIndexSelector)
+ pv.Pack(indexSelector, 1);
+
+ // Encode RGB
+ for (int ch = 0; ch < 3; ch++)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ {
+ ParallelMath::ScalarUInt16 epPart = endPoints[subset][ep][ch];
+ epPart >>= (8 - modeInfo.m_rgbBits);
+
+ pv.Pack(epPart, modeInfo.m_rgbBits);
+ }
+ }
+ }
+
+ // Encode alpha
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ {
+ ParallelMath::ScalarUInt16 epPart = endPoints[subset][ep][3];
+ epPart >>= (8 - modeInfo.m_alphaBits);
+
+ pv.Pack(epPart, modeInfo.m_alphaBits);
+ }
+ }
+ }
+
+ // Encode parity bits
+ if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerSubset)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ ParallelMath::ScalarUInt16 epPart = endPoints[subset][0][0];
+ epPart >>= (7 - modeInfo.m_rgbBits);
+ epPart &= 1;
+
+ pv.Pack(epPart, 1);
+ }
+ }
+ else if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerEndpoint)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ {
+ ParallelMath::ScalarUInt16 epPart = endPoints[subset][ep][0];
+ epPart >>= (7 - modeInfo.m_rgbBits);
+ epPart &= 1;
+
+ pv.Pack(epPart, 1);
+ }
+ }
+ }
+
+ // Encode indexes
+ for (int px = 0; px < 16; px++)
+ {
+ int bits = modeInfo.m_indexBits;
+ if ((px == 0) || (px == fixups[1]) || (px == fixups[2]))
+ bits--;
+
+ pv.Pack(indexes[px], bits);
+ }
+
+ // Encode secondary indexes
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ int bits = modeInfo.m_alphaIndexBits;
+ if (px == 0)
+ bits--;
+
+ pv.Pack(indexes2[px], bits);
+ }
+ }
+
+ pv.Flush(packedBlocks);
+
+ packedBlocks += 16;
+ }
+}
+
+void cvtt::Internal::BC7Computer::UnpackOne(PixelBlockU8 &output, const uint8_t* packedBlock)
+{
+ UnpackingVector pv;
+ pv.Init(packedBlock);
+
+ int mode = 8;
+ for (int i = 0; i < 8; i++)
+ {
+ if (pv.Unpack(1) == 1)
+ {
+ mode = i;
+ break;
+ }
+ }
+
+ if (mode > 7)
+ {
+ for (int px = 0; px < 16; px++)
+ for (int ch = 0; ch < 4; ch++)
+ output.m_pixels[px][ch] = 0;
+
+ return;
+ }
+
+ const BC7Data::BC7ModeInfo &modeInfo = BC7Data::g_modes[mode];
+
+ int partition = 0;
+ if (modeInfo.m_partitionBits)
+ partition = pv.Unpack(modeInfo.m_partitionBits);
+
+ int rotation = 0;
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ rotation = pv.Unpack(2);
+
+ int indexSelector = 0;
+ if (modeInfo.m_hasIndexSelector)
+ indexSelector = pv.Unpack(1);
+
+ // Resolve fixups
+ int fixups[3] = { 0, 0, 0 };
+
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_Separate)
+ {
+ if (modeInfo.m_numSubsets == 2)
+ fixups[1] = BC7Data::g_fixupIndexes2[partition];
+ else if (modeInfo.m_numSubsets == 3)
+ {
+ fixups[1] = BC7Data::g_fixupIndexes3[partition][0];
+ fixups[2] = BC7Data::g_fixupIndexes3[partition][1];
+ }
+ }
+
+ int endPoints[3][2][4];
+
+ // Decode RGB
+ for (int ch = 0; ch < 3; ch++)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ endPoints[subset][ep][ch] = (pv.Unpack(modeInfo.m_rgbBits) << (8 - modeInfo.m_rgbBits));
+ }
+ }
+
+ // Decode alpha
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ endPoints[subset][ep][3] = (pv.Unpack(modeInfo.m_alphaBits) << (8 - modeInfo.m_alphaBits));
+ }
+ }
+ else
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ endPoints[subset][ep][3] = 255;
+ }
+ }
+
+ int parityBits = 0;
+
+ // Decode parity bits
+ if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerSubset)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ int p = pv.Unpack(1);
+
+ for (int ep = 0; ep < 2; ep++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ endPoints[subset][ep][ch] |= p << (7 - modeInfo.m_rgbBits);
+
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
+ endPoints[subset][ep][3] |= p << (7 - modeInfo.m_alphaBits);
+ }
+ }
+
+ parityBits = 1;
+ }
+ else if (modeInfo.m_pBitMode == BC7Data::PBitMode_PerEndpoint)
+ {
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ {
+ int p = pv.Unpack(1);
+
+ for (int ch = 0; ch < 3; ch++)
+ endPoints[subset][ep][ch] |= p << (7 - modeInfo.m_rgbBits);
+
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
+ endPoints[subset][ep][3] |= p << (7 - modeInfo.m_alphaBits);
+ }
+ }
+
+ parityBits = 1;
+ }
+
+ // Fill endpoint bits
+ for (int subset = 0; subset < modeInfo.m_numSubsets; subset++)
+ {
+ for (int ep = 0; ep < 2; ep++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ endPoints[subset][ep][ch] |= (endPoints[subset][ep][ch] >> (modeInfo.m_rgbBits + parityBits));
+
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
+ endPoints[subset][ep][3] |= (endPoints[subset][ep][3] >> (modeInfo.m_alphaBits + parityBits));
+ }
+ }
+
+ int indexes[16];
+ int indexes2[16];
+
+ // Decode indexes
+ for (int px = 0; px < 16; px++)
+ {
+ int bits = modeInfo.m_indexBits;
+ if ((px == 0) || (px == fixups[1]) || (px == fixups[2]))
+ bits--;
+
+ indexes[px] = pv.Unpack(bits);
+ }
+
+ // Decode secondary indexes
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ int bits = modeInfo.m_alphaIndexBits;
+ if (px == 0)
+ bits--;
+
+ indexes2[px] = pv.Unpack(bits);
+ }
+ }
+ else
+ {
+ for (int px = 0; px < 16; px++)
+ indexes2[px] = 0;
+ }
+
+ const int *alphaWeights = BC7Data::g_weightTables[modeInfo.m_alphaIndexBits];
+ const int *rgbWeights = BC7Data::g_weightTables[modeInfo.m_indexBits];
+
+ // Decode each pixel
+ for (int px = 0; px < 16; px++)
+ {
+ int rgbWeight = 0;
+ int alphaWeight = 0;
+
+ int rgbIndex = indexes[px];
+
+ rgbWeight = rgbWeights[indexes[px]];
+
+ if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Combined)
+ alphaWeight = rgbWeight;
+ else if (modeInfo.m_alphaMode == BC7Data::AlphaMode_Separate)
+ alphaWeight = alphaWeights[indexes2[px]];
+
+ if (indexSelector == 1)
+ {
+ int temp = rgbWeight;
+ rgbWeight = alphaWeight;
+ alphaWeight = temp;
+ }
+
+ int pixel[4] = { 0, 0, 0, 255 };
+
+ int subset = 0;
+
+ if (modeInfo.m_numSubsets == 2)
+ subset = (BC7Data::g_partitionMap[partition] >> px) & 1;
+ else if (modeInfo.m_numSubsets == 3)
+ subset = (BC7Data::g_partitionMap2[partition] >> (px * 2)) & 3;
+
+ for (int ch = 0; ch < 3; ch++)
+ pixel[ch] = ((64 - rgbWeight) * endPoints[subset][0][ch] + rgbWeight * endPoints[subset][1][ch] + 32) >> 6;
+
+ if (modeInfo.m_alphaMode != BC7Data::AlphaMode_None)
+ pixel[3] = ((64 - alphaWeight) * endPoints[subset][0][3] + alphaWeight * endPoints[subset][1][3] + 32) >> 6;
+
+ if (rotation != 0)
+ {
+ int ch = rotation - 1;
+ int temp = pixel[ch];
+ pixel[ch] = pixel[3];
+ pixel[3] = temp;
+ }
+
+ for (int ch = 0; ch < 4; ch++)
+ output.m_pixels[px][ch] = static_cast<uint8_t>(pixel[ch]);
+ }
+}
+
+cvtt::ParallelMath::SInt16 cvtt::Internal::BC6HComputer::QuantizeSingleEndpointElementSigned(const MSInt16 &elem2CL, int precision, const ParallelMath::RoundUpForScope* ru)
+{
+ assert(ParallelMath::AllSet(ParallelMath::Less(elem2CL, ParallelMath::MakeSInt16(31744))));
+ assert(ParallelMath::AllSet(ParallelMath::Less(ParallelMath::MakeSInt16(-31744), elem2CL)));
+
+ // Expand to full range
+ ParallelMath::Int16CompFlag isNegative = ParallelMath::Less(elem2CL, ParallelMath::MakeSInt16(0));
+ MUInt15 absElem = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Select(isNegative, ParallelMath::MakeSInt16(0) - elem2CL, elem2CL));
+
+ absElem = ParallelMath::RightShift(ParallelMath::RoundAndConvertToU15(ParallelMath::ToFloat(absElem) * 32.0f / 31.0f, ru), 16 - precision);
+
+ MSInt16 absElemS16 = ParallelMath::LosslessCast<MSInt16>::Cast(absElem);
+
+ return ParallelMath::Select(isNegative, ParallelMath::MakeSInt16(0) - absElemS16, absElemS16);
+}
+
+cvtt::ParallelMath::UInt15 cvtt::Internal::BC6HComputer::QuantizeSingleEndpointElementUnsigned(const MUInt15 &elem, int precision, const ParallelMath::RoundUpForScope* ru)
+{
+ MUInt16 expandedElem = ParallelMath::RoundAndConvertToU16(ParallelMath::Min(ParallelMath::ToFloat(elem) * 64.0f / 31.0f, ParallelMath::MakeFloat(65535.0f)), ru);
+ return ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(expandedElem, 16 - precision));
+}
+
+void cvtt::Internal::BC6HComputer::UnquantizeSingleEndpointElementSigned(const MSInt16 &comp, int precision, MSInt16 &outUnquantized, MSInt16 &outUnquantizedFinished2CL)
+{
+ MSInt16 zero = ParallelMath::MakeSInt16(0);
+
+ ParallelMath::Int16CompFlag negative = ParallelMath::Less(comp, zero);
+ MUInt15 absComp = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Select(negative, MSInt16(zero - comp), comp));
+
+ MSInt16 unq;
+ MUInt15 absUnq;
+
+ if (precision >= 16)
+ {
+ unq = comp;
+ absUnq = absComp;
+ }
+ else
+ {
+ MSInt16 maxCompMinusOne = ParallelMath::MakeSInt16(static_cast<int16_t>((1 << (precision - 1)) - 2));
+ ParallelMath::Int16CompFlag isZero = ParallelMath::Equal(comp, zero);
+ ParallelMath::Int16CompFlag isMax = ParallelMath::Less(maxCompMinusOne, comp);
+
+ absUnq = (absComp << (16 - precision)) + ParallelMath::MakeUInt15(static_cast<uint16_t>(0x4000 >> (precision - 1)));
+ ParallelMath::ConditionalSet(absUnq, isZero, ParallelMath::MakeUInt15(0));
+ ParallelMath::ConditionalSet(absUnq, isMax, ParallelMath::MakeUInt15(0x7fff));
+
+ unq = ParallelMath::ConditionalNegate(negative, ParallelMath::LosslessCast<MSInt16>::Cast(absUnq));
+ }
+
+ outUnquantized = unq;
+
+ MUInt15 funq = ParallelMath::ToUInt15(ParallelMath::RightShift(ParallelMath::XMultiply(absUnq, ParallelMath::MakeUInt15(31)), 5));
+
+ outUnquantizedFinished2CL = ParallelMath::ConditionalNegate(negative, ParallelMath::LosslessCast<MSInt16>::Cast(funq));
+}
+
+void cvtt::Internal::BC6HComputer::UnquantizeSingleEndpointElementUnsigned(const MUInt15 &comp, int precision, MUInt16 &outUnquantized, MUInt16 &outUnquantizedFinished)
+{
+ MUInt16 unq = ParallelMath::LosslessCast<MUInt16>::Cast(comp);
+ if (precision < 15)
+ {
+ MUInt15 zero = ParallelMath::MakeUInt15(0);
+ MUInt15 maxCompMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>((1 << precision) - 2));
+
+ ParallelMath::Int16CompFlag isZero = ParallelMath::Equal(comp, zero);
+ ParallelMath::Int16CompFlag isMax = ParallelMath::Less(maxCompMinusOne, comp);
+
+ unq = (ParallelMath::LosslessCast<MUInt16>::Cast(comp) << (16 - precision)) + ParallelMath::MakeUInt16(static_cast<uint16_t>(0x8000 >> precision));
+
+ ParallelMath::ConditionalSet(unq, isZero, ParallelMath::MakeUInt16(0));
+ ParallelMath::ConditionalSet(unq, isMax, ParallelMath::MakeUInt16(0xffff));
+ }
+
+ outUnquantized = unq;
+ outUnquantizedFinished = ParallelMath::ToUInt16(ParallelMath::RightShift(ParallelMath::XMultiply(unq, ParallelMath::MakeUInt15(31)), 6));
+}
+
+void cvtt::Internal::BC6HComputer::QuantizeEndpointsSigned(const MSInt16 endPoints[2][3], const MFloat floatPixelsColorSpace[16][3], const MFloat floatPixelsLinearWeighted[16][3], MAInt16 quantizedEndPoints[2][3], MUInt15 indexes[16], IndexSelectorHDR<3> &indexSelector, int fixupIndex, int precision, int indexRange, const float *channelWeights, bool fastIndexing, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ MSInt16 unquantizedEP[2][3];
+ MSInt16 finishedUnquantizedEP[2][3];
+
+ {
+ ParallelMath::RoundUpForScope ru;
+
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MSInt16 qee = QuantizeSingleEndpointElementSigned(endPoints[epi][ch], precision, &ru);
+ UnquantizeSingleEndpointElementSigned(qee, precision, unquantizedEP[epi][ch], finishedUnquantizedEP[epi][ch]);
+ quantizedEndPoints[epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(qee);
+ }
+ }
+ }
+
+ indexSelector.Init(channelWeights, unquantizedEP, finishedUnquantizedEP, indexRange);
+ indexSelector.InitHDR(indexRange, true, fastIndexing, channelWeights);
+
+ MUInt15 halfRangeMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange / 2) - 1);
+
+ MUInt15 index = fastIndexing ? indexSelector.SelectIndexHDRFast(floatPixelsColorSpace[fixupIndex], rtn) : indexSelector.SelectIndexHDRSlow(floatPixelsLinearWeighted[fixupIndex], rtn);
+
+ ParallelMath::Int16CompFlag invert = ParallelMath::Less(halfRangeMinusOne, index);
+
+ if (ParallelMath::AnySet(invert))
+ {
+ ParallelMath::ConditionalSet(index, invert, MUInt15(ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange - 1)) - index));
+
+ indexSelector.ConditionalInvert(invert);
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MAInt16 firstEP = quantizedEndPoints[0][ch];
+ MAInt16 secondEP = quantizedEndPoints[1][ch];
+
+ quantizedEndPoints[0][ch] = ParallelMath::Select(invert, secondEP, firstEP);
+ quantizedEndPoints[1][ch] = ParallelMath::Select(invert, firstEP, secondEP);
+ }
+ }
+
+ indexes[fixupIndex] = index;
+}
+
+void cvtt::Internal::BC6HComputer::QuantizeEndpointsUnsigned(const MSInt16 endPoints[2][3], const MFloat floatPixelsColorSpace[16][3], const MFloat floatPixelsLinearWeighted[16][3], MAInt16 quantizedEndPoints[2][3], MUInt15 indexes[16], IndexSelectorHDR<3> &indexSelector, int fixupIndex, int precision, int indexRange, const float *channelWeights, bool fastIndexing, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ MUInt16 unquantizedEP[2][3];
+ MUInt16 finishedUnquantizedEP[2][3];
+
+ {
+ ParallelMath::RoundUpForScope ru;
+
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 qee = QuantizeSingleEndpointElementUnsigned(ParallelMath::LosslessCast<MUInt15>::Cast(endPoints[epi][ch]), precision, &ru);
+ UnquantizeSingleEndpointElementUnsigned(qee, precision, unquantizedEP[epi][ch], finishedUnquantizedEP[epi][ch]);
+ quantizedEndPoints[epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(qee);
+ }
+ }
+ }
+
+ indexSelector.Init(channelWeights, unquantizedEP, finishedUnquantizedEP, indexRange);
+ indexSelector.InitHDR(indexRange, false, fastIndexing, channelWeights);
+
+ MUInt15 halfRangeMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange / 2) - 1);
+
+ MUInt15 index = fastIndexing ? indexSelector.SelectIndexHDRFast(floatPixelsColorSpace[fixupIndex], rtn) : indexSelector.SelectIndexHDRSlow(floatPixelsLinearWeighted[fixupIndex], rtn);
+
+ ParallelMath::Int16CompFlag invert = ParallelMath::Less(halfRangeMinusOne, index);
+
+ if (ParallelMath::AnySet(invert))
+ {
+ ParallelMath::ConditionalSet(index, invert, MUInt15(ParallelMath::MakeUInt15(static_cast<uint16_t>(indexRange - 1)) - index));
+
+ indexSelector.ConditionalInvert(invert);
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MAInt16 firstEP = quantizedEndPoints[0][ch];
+ MAInt16 secondEP = quantizedEndPoints[1][ch];
+
+ quantizedEndPoints[0][ch] = ParallelMath::Select(invert, secondEP, firstEP);
+ quantizedEndPoints[1][ch] = ParallelMath::Select(invert, firstEP, secondEP);
+ }
+ }
+
+ indexes[fixupIndex] = index;
+}
+
+void cvtt::Internal::BC6HComputer::EvaluatePartitionedLegality(const MAInt16 ep0[2][3], const MAInt16 ep1[2][3], int aPrec, const int bPrec[3], bool isTransformed, MAInt16 outEncodedEPs[2][2][3], ParallelMath::Int16CompFlag& outIsLegal)
+{
+ ParallelMath::Int16CompFlag allLegal = ParallelMath::MakeBoolInt16(true);
+
+ MAInt16 aSignificantMask = ParallelMath::MakeAInt16(static_cast<int16_t>((1 << aPrec) - 1));
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ outEncodedEPs[0][0][ch] = ep0[0][ch];
+ outEncodedEPs[0][1][ch] = ep0[1][ch];
+ outEncodedEPs[1][0][ch] = ep1[0][ch];
+ outEncodedEPs[1][1][ch] = ep1[1][ch];
+
+ if (isTransformed)
+ {
+ for (int subset = 0; subset < 2; subset++)
+ {
+ for (int epi = 0; epi < 2; epi++)
+ {
+ if (epi == 0 && subset == 0)
+ continue;
+
+ MAInt16 bReduced = (outEncodedEPs[subset][epi][ch] & aSignificantMask);
+
+ MSInt16 delta = ParallelMath::TruncateToPrecisionSigned(ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::AbstractSubtract(outEncodedEPs[subset][epi][ch], outEncodedEPs[0][0][ch])), bPrec[ch]);
+
+ outEncodedEPs[subset][epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(delta);
+
+ MAInt16 reconstructed = (ParallelMath::AbstractAdd(outEncodedEPs[subset][epi][ch], outEncodedEPs[0][0][ch]) & aSignificantMask);
+ allLegal = allLegal & ParallelMath::Equal(reconstructed, bReduced);
+ }
+ }
+ }
+
+ if (!ParallelMath::AnySet(allLegal))
+ break;
+ }
+
+ outIsLegal = allLegal;
+}
+
+void cvtt::Internal::BC6HComputer::EvaluateSingleLegality(const MAInt16 ep[2][3], int aPrec, const int bPrec[3], bool isTransformed, MAInt16 outEncodedEPs[2][3], ParallelMath::Int16CompFlag& outIsLegal)
+{
+ ParallelMath::Int16CompFlag allLegal = ParallelMath::MakeBoolInt16(true);
+
+ MAInt16 aSignificantMask = ParallelMath::MakeAInt16(static_cast<int16_t>((1 << aPrec) - 1));
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ outEncodedEPs[0][ch] = ep[0][ch];
+ outEncodedEPs[1][ch] = ep[1][ch];
+
+ if (isTransformed)
+ {
+ MAInt16 bReduced = (outEncodedEPs[1][ch] & aSignificantMask);
+
+ MSInt16 delta = ParallelMath::TruncateToPrecisionSigned(ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::AbstractSubtract(outEncodedEPs[1][ch], outEncodedEPs[0][ch])), bPrec[ch]);
+
+ outEncodedEPs[1][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(delta);
+
+ MAInt16 reconstructed = (ParallelMath::AbstractAdd(outEncodedEPs[1][ch], outEncodedEPs[0][ch]) & aSignificantMask);
+ allLegal = allLegal & ParallelMath::Equal(reconstructed, bReduced);
+ }
+ }
+
+ outIsLegal = allLegal;
+}
+
+void cvtt::Internal::BC6HComputer::Pack(uint32_t flags, const PixelBlockF16* inputs, uint8_t* packedBlocks, const float channelWeights[4], bool isSigned, int numTweakRounds, int numRefineRounds)
+{
+ if (numTweakRounds < 1)
+ numTweakRounds = 1;
+ else if (numTweakRounds > MaxTweakRounds)
+ numTweakRounds = MaxTweakRounds;
+
+ if (numRefineRounds < 1)
+ numRefineRounds = 1;
+ else if (numRefineRounds > MaxRefineRounds)
+ numRefineRounds = MaxRefineRounds;
+
+ bool fastIndexing = ((flags & cvtt::Flags::BC6H_FastIndexing) != 0);
+ float channelWeightsSq[3];
+
+ ParallelMath::RoundTowardNearestForScope rtn;
+
+ MSInt16 pixels[16][3];
+ MFloat floatPixels2CL[16][3];
+ MFloat floatPixelsLinearWeighted[16][3];
+
+ MSInt16 low15Bits = ParallelMath::MakeSInt16(32767);
+
+ for (int ch = 0; ch < 3; ch++)
+ channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MSInt16 pixelValue;
+ ParallelMath::ConvertHDRInputs(inputs, px, ch, pixelValue);
+
+ // Convert from sign+magnitude to 2CL
+ if (isSigned)
+ {
+ ParallelMath::Int16CompFlag negative = ParallelMath::Less(pixelValue, ParallelMath::MakeSInt16(0));
+ MSInt16 magnitude = (pixelValue & low15Bits);
+ ParallelMath::ConditionalSet(pixelValue, negative, ParallelMath::MakeSInt16(0) - magnitude);
+ pixelValue = ParallelMath::Max(pixelValue, ParallelMath::MakeSInt16(-31743));
+ }
+ else
+ pixelValue = ParallelMath::Max(pixelValue, ParallelMath::MakeSInt16(0));
+
+ pixelValue = ParallelMath::Min(pixelValue, ParallelMath::MakeSInt16(31743));
+
+ pixels[px][ch] = pixelValue;
+ floatPixels2CL[px][ch] = ParallelMath::ToFloat(pixelValue);
+ floatPixelsLinearWeighted[px][ch] = ParallelMath::TwosCLHalfToFloat(pixelValue) * channelWeights[ch];
+ }
+ }
+
+ MFloat preWeightedPixels[16][3];
+
+ BCCommon::PreWeightPixelsHDR<3>(preWeightedPixels, pixels, channelWeights);
+
+ MAInt16 bestEndPoints[2][2][3];
+ MUInt15 bestIndexes[16];
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+ MUInt15 bestMode = ParallelMath::MakeUInt15(0);
+ MUInt15 bestPartition = ParallelMath::MakeUInt15(0);
+
+ for (int px = 0; px < 16; px++)
+ bestIndexes[px] = ParallelMath::MakeUInt15(0);
+
+ for (int subset = 0; subset < 2; subset++)
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 3; ch++)
+ bestEndPoints[subset][epi][ch] = ParallelMath::MakeAInt16(0);
+
+ UnfinishedEndpoints<3> partitionedUFEP[32][2];
+ UnfinishedEndpoints<3> singleUFEP;
+
+ // Generate UFEP for partitions
+ for (int p = 0; p < 32; p++)
+ {
+ int partitionMask = BC7Data::g_partitionMap[p];
+
+ EndpointSelector<3, 8> epSelectors[2];
+
+ for (int pass = 0; pass < NumEndpointSelectorPasses; pass++)
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ int subset = (partitionMask >> px) & 1;
+ epSelectors[subset].ContributePass(preWeightedPixels[px], pass, ParallelMath::MakeFloat(1.0f));
+ }
+
+ for (int subset = 0; subset < 2; subset++)
+ epSelectors[subset].FinishPass(pass);
+ }
+
+ for (int subset = 0; subset < 2; subset++)
+ partitionedUFEP[p][subset] = epSelectors[subset].GetEndpoints(channelWeights);
+ }
+
+ // Generate UFEP for single
+ {
+ EndpointSelector<3, 8> epSelector;
+
+ for (int pass = 0; pass < NumEndpointSelectorPasses; pass++)
+ {
+ for (int px = 0; px < 16; px++)
+ epSelector.ContributePass(preWeightedPixels[px], pass, ParallelMath::MakeFloat(1.0f));
+
+ epSelector.FinishPass(pass);
+ }
+
+ singleUFEP = epSelector.GetEndpoints(channelWeights);
+ }
+
+ for (int partitionedInt = 0; partitionedInt < 2; partitionedInt++)
+ {
+ bool partitioned = (partitionedInt == 1);
+
+ for (int aPrec = BC7Data::g_maxHDRPrecision; aPrec >= 0; aPrec--)
+ {
+ if (!BC7Data::g_hdrModesExistForPrecision[partitionedInt][aPrec])
+ continue;
+
+ int numPartitions = partitioned ? 32 : 1;
+ int numSubsets = partitioned ? 2 : 1;
+ int indexBits = partitioned ? 3 : 4;
+ int indexRange = (1 << indexBits);
+
+ for (int p = 0; p < numPartitions; p++)
+ {
+ int partitionMask = partitioned ? BC7Data::g_partitionMap[p] : 0;
+
+ const int MaxMetaRounds = MaxTweakRounds * MaxRefineRounds;
+
+ MAInt16 metaEndPointsQuantized[MaxMetaRounds][2][2][3];
+ MUInt15 metaIndexes[MaxMetaRounds][16];
+ MFloat metaError[MaxMetaRounds][2];
+
+ bool roundValid[MaxMetaRounds][2];
+
+ for (int r = 0; r < MaxMetaRounds; r++)
+ for (int subset = 0; subset < 2; subset++)
+ roundValid[r][subset] = true;
+
+ for (int subset = 0; subset < numSubsets; subset++)
+ {
+ for (int tweak = 0; tweak < MaxTweakRounds; tweak++)
+ {
+ EndpointRefiner<3> refiners[2];
+
+ bool abortRemainingRefines = false;
+ for (int refinePass = 0; refinePass < MaxRefineRounds; refinePass++)
+ {
+ int metaRound = tweak * MaxRefineRounds + refinePass;
+
+ if (tweak >= numTweakRounds || refinePass >= numRefineRounds)
+ abortRemainingRefines = true;
+
+ if (abortRemainingRefines)
+ {
+ roundValid[metaRound][subset] = false;
+ continue;
+ }
+
+ MAInt16(&mrQuantizedEndPoints)[2][2][3] = metaEndPointsQuantized[metaRound];
+ MUInt15(&mrIndexes)[16] = metaIndexes[metaRound];
+
+ MSInt16 endPointsColorSpace[2][3];
+
+ if (refinePass == 0)
+ {
+ UnfinishedEndpoints<3> ufep = partitioned ? partitionedUFEP[p][subset] : singleUFEP;
+
+ if (isSigned)
+ ufep.FinishHDRSigned(tweak, indexRange, endPointsColorSpace[0], endPointsColorSpace[1], &rtn);
+ else
+ ufep.FinishHDRUnsigned(tweak, indexRange, endPointsColorSpace[0], endPointsColorSpace[1], &rtn);
+ }
+ else
+ refiners[subset].GetRefinedEndpointsHDR(endPointsColorSpace, isSigned, &rtn);
+
+ refiners[subset].Init(indexRange, channelWeights);
+
+ int fixupIndex = (subset == 0) ? 0 : BC7Data::g_fixupIndexes2[p];
+
+ IndexSelectorHDR<3> indexSelector;
+ if (isSigned)
+ QuantizeEndpointsSigned(endPointsColorSpace, floatPixels2CL, floatPixelsLinearWeighted, mrQuantizedEndPoints[subset], mrIndexes, indexSelector, fixupIndex, aPrec, indexRange, channelWeights, fastIndexing, &rtn);
+ else
+ QuantizeEndpointsUnsigned(endPointsColorSpace, floatPixels2CL, floatPixelsLinearWeighted, mrQuantizedEndPoints[subset], mrIndexes, indexSelector, fixupIndex, aPrec, indexRange, channelWeights, fastIndexing, &rtn);
+
+ if (metaRound > 0)
+ {
+ ParallelMath::Int16CompFlag anySame = ParallelMath::MakeBoolInt16(false);
+
+ for (int prevRound = 0; prevRound < metaRound; prevRound++)
+ {
+ MAInt16(&prevRoundEPs)[2][3] = metaEndPointsQuantized[prevRound][subset];
+
+ ParallelMath::Int16CompFlag same = ParallelMath::MakeBoolInt16(true);
+
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 3; ch++)
+ same = (same & ParallelMath::Equal(prevRoundEPs[epi][ch], mrQuantizedEndPoints[subset][epi][ch]));
+
+ anySame = (anySame | same);
+ if (ParallelMath::AllSet(anySame))
+ break;
+ }
+
+ if (ParallelMath::AllSet(anySame))
+ {
+ roundValid[metaRound][subset] = false;
+ continue;
+ }
+ }
+
+ MFloat subsetError = ParallelMath::MakeFloatZero();
+
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ if (subset != ((partitionMask >> px) & 1))
+ continue;
+
+ MUInt15 index;
+ if (px == fixupIndex)
+ index = mrIndexes[px];
+ else
+ {
+ index = fastIndexing ? indexSelector.SelectIndexHDRFast(floatPixels2CL[px], &rtn) : indexSelector.SelectIndexHDRSlow(floatPixelsLinearWeighted[px], &rtn);
+ mrIndexes[px] = index;
+ }
+
+ MSInt16 reconstructed[3];
+ if (isSigned)
+ indexSelector.ReconstructHDRSigned(mrIndexes[px], reconstructed);
+ else
+ indexSelector.ReconstructHDRUnsigned(mrIndexes[px], reconstructed);
+
+ subsetError = subsetError + (fastIndexing ? BCCommon::ComputeErrorHDRFast<3>(flags, reconstructed, pixels[px], channelWeightsSq) : BCCommon::ComputeErrorHDRSlow<3>(flags, reconstructed, pixels[px], channelWeightsSq));
+
+ if (refinePass != numRefineRounds - 1)
+ refiners[subset].ContributeUnweightedPW(preWeightedPixels[px], index);
+ }
+ }
+
+ metaError[metaRound][subset] = subsetError;
+ }
+ }
+ }
+
+ // Now we have a bunch of attempts, but not all of them will fit in the delta coding scheme
+ int numMeta1 = partitioned ? MaxMetaRounds : 1;
+ for (int meta0 = 0; meta0 < MaxMetaRounds; meta0++)
+ {
+ if (!roundValid[meta0][0])
+ continue;
+
+ for (int meta1 = 0; meta1 < numMeta1; meta1++)
+ {
+ MFloat combinedError = metaError[meta0][0];
+ if (partitioned)
+ {
+ if (!roundValid[meta1][1])
+ continue;
+
+ combinedError = combinedError + metaError[meta1][1];
+ }
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(combinedError, bestError);
+ if (!ParallelMath::AnySet(errorBetter))
+ continue;
+
+ ParallelMath::Int16CompFlag needsCommit = ParallelMath::FloatFlagToInt16(errorBetter);
+
+ // Figure out if this is encodable
+ for (int mode = 0; mode < BC7Data::g_numHDRModes; mode++)
+ {
+ const BC7Data::BC6HModeInfo &modeInfo = BC7Data::g_hdrModes[mode];
+
+ if (modeInfo.m_partitioned != partitioned || modeInfo.m_aPrec != aPrec)
+ continue;
+
+ MAInt16 encodedEPs[2][2][3];
+ ParallelMath::Int16CompFlag isLegal;
+ if (partitioned)
+ EvaluatePartitionedLegality(metaEndPointsQuantized[meta0][0], metaEndPointsQuantized[meta1][1], modeInfo.m_aPrec, modeInfo.m_bPrec, modeInfo.m_transformed, encodedEPs, isLegal);
+ else
+ EvaluateSingleLegality(metaEndPointsQuantized[meta0][0], modeInfo.m_aPrec, modeInfo.m_bPrec, modeInfo.m_transformed, encodedEPs[0], isLegal);
+
+ ParallelMath::Int16CompFlag isLegalAndBetter = (ParallelMath::FloatFlagToInt16(errorBetter) & isLegal);
+ if (!ParallelMath::AnySet(isLegalAndBetter))
+ continue;
+
+ ParallelMath::FloatCompFlag isLegalAndBetterFloat = ParallelMath::Int16FlagToFloat(isLegalAndBetter);
+
+ ParallelMath::ConditionalSet(bestError, isLegalAndBetterFloat, combinedError);
+ ParallelMath::ConditionalSet(bestMode, isLegalAndBetter, ParallelMath::MakeUInt15(static_cast<uint16_t>(mode)));
+ ParallelMath::ConditionalSet(bestPartition, isLegalAndBetter, ParallelMath::MakeUInt15(static_cast<uint16_t>(p)));
+
+ for (int subset = 0; subset < numSubsets; subset++)
+ {
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ ParallelMath::ConditionalSet(bestEndPoints[subset][epi][ch], isLegalAndBetter, encodedEPs[subset][epi][ch]);
+ }
+ }
+
+ for (int px = 0; px < 16; px++)
+ {
+ int subset = ((partitionMask >> px) & 1);
+ if (subset == 0)
+ ParallelMath::ConditionalSet(bestIndexes[px], isLegalAndBetter, metaIndexes[meta0][px]);
+ else
+ ParallelMath::ConditionalSet(bestIndexes[px], isLegalAndBetter, metaIndexes[meta1][px]);
+ }
+
+ needsCommit = ParallelMath::AndNot(needsCommit, isLegalAndBetter);
+ if (!ParallelMath::AnySet(needsCommit))
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // At this point, everything should be set
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ ParallelMath::ScalarUInt16 mode = ParallelMath::Extract(bestMode, block);
+ ParallelMath::ScalarUInt16 partition = ParallelMath::Extract(bestPartition, block);
+ int32_t eps[2][2][3];
+ ParallelMath::ScalarUInt16 indexes[16];
+
+ const BC7Data::BC6HModeInfo& modeInfo = BC7Data::g_hdrModes[mode];
+
+ BC6H_IO::WriteFunc_t writeFunc = BC6H_IO::g_writeFuncs[mode];
+
+ const int headerBits = modeInfo.m_partitioned ? 82 : 65;
+
+ for (int subset = 0; subset < 2; subset++)
+ {
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ eps[subset][epi][ch] = ParallelMath::Extract(bestEndPoints[subset][epi][ch], block);
+ }
+ }
+
+ for (int px = 0; px < 16; px++)
+ indexes[px] = ParallelMath::Extract(bestIndexes[px], block);
+
+ uint16_t modeID = modeInfo.m_modeID;
+
+ PackingVector pv;
+
+ {
+ uint32_t header[3];
+ writeFunc(header, modeID, partition,
+ eps[0][0][0], eps[0][1][0], eps[1][0][0], eps[1][1][0],
+ eps[0][0][1], eps[0][1][1], eps[1][0][1], eps[1][1][1],
+ eps[0][0][2], eps[0][1][2], eps[1][0][2], eps[1][1][2]
+ );
+
+ pv.InitPacked(header, headerBits);
+ }
+
+ int fixupIndex1 = 0;
+ int indexBits = 4;
+ if (modeInfo.m_partitioned)
+ {
+ fixupIndex1 = BC7Data::g_fixupIndexes2[partition];
+ indexBits = 3;
+ }
+
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::ScalarUInt16 index = ParallelMath::Extract(bestIndexes[px], block);
+ if (px == 0 || px == fixupIndex1)
+ pv.Pack(index, indexBits - 1);
+ else
+ pv.Pack(index, indexBits);
+ }
+
+ pv.Flush(packedBlocks + 16 * block);
+ }
+}
+
+void cvtt::Internal::BC6HComputer::SignExtendSingle(int &v, int bits)
+{
+ if (v & (1 << (bits - 1)))
+ v |= -(1 << bits);
+}
+
+void cvtt::Internal::BC6HComputer::UnpackOne(PixelBlockF16 &output, const uint8_t *pBC, bool isSigned)
+{
+ UnpackingVector pv;
+ pv.Init(pBC);
+
+ int numModeBits = 2;
+ int modeBits = pv.Unpack(2);
+ if (modeBits != 0 && modeBits != 1)
+ {
+ modeBits |= pv.Unpack(3) << 2;
+ numModeBits += 3;
+ }
+
+ int mode = -1;
+ for (int possibleMode = 0; possibleMode < BC7Data::g_numHDRModes; possibleMode++)
+ {
+ if (BC7Data::g_hdrModes[possibleMode].m_modeID == modeBits)
+ {
+ mode = possibleMode;
+ break;
+ }
+ }
+
+ if (mode < 0)
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ output.m_pixels[px][ch] = 0;
+ output.m_pixels[px][3] = 0x3c00; // 1.0
+ }
+ return;
+ }
+
+ const BC7Data::BC6HModeInfo& modeInfo = BC7Data::g_hdrModes[mode];
+ const int headerBits = modeInfo.m_partitioned ? 82 : 65;
+ const BC6H_IO::ReadFunc_t readFunc = BC6H_IO::g_readFuncs[mode];
+
+ uint16_t partition = 0;
+ int32_t eps[2][2][3];
+
+ for (int subset = 0; subset < 2; subset++)
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 3; ch++)
+ eps[subset][epi][ch] = 0;
+
+ {
+ uint32_t header[3];
+ uint16_t codedEPs[2][2][3];
+ pv.UnpackStart(header, headerBits);
+
+ readFunc(header, partition,
+ codedEPs[0][0][0], codedEPs[0][1][0], codedEPs[1][0][0], codedEPs[1][1][0],
+ codedEPs[0][0][1], codedEPs[0][1][1], codedEPs[1][0][1], codedEPs[1][1][1],
+ codedEPs[0][0][2], codedEPs[0][1][2], codedEPs[1][0][2], codedEPs[1][1][2]
+ );
+
+ for (int subset = 0; subset < 2; subset++)
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 3; ch++)
+ eps[subset][epi][ch] = codedEPs[subset][epi][ch];
+ }
+
+ uint16_t modeID = modeInfo.m_modeID;
+
+ int fixupIndex1 = 0;
+ int indexBits = 4;
+ int numSubsets = 1;
+ if (modeInfo.m_partitioned)
+ {
+ fixupIndex1 = BC7Data::g_fixupIndexes2[partition];
+ indexBits = 3;
+ numSubsets = 2;
+ }
+
+ int indexes[16];
+ for (int px = 0; px < 16; px++)
+ {
+ if (px == 0 || px == fixupIndex1)
+ indexes[px] = pv.Unpack(indexBits - 1);
+ else
+ indexes[px] = pv.Unpack(indexBits);
+ }
+
+ if (modeInfo.m_partitioned)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ if (isSigned)
+ SignExtendSingle(eps[0][0][ch], modeInfo.m_aPrec);
+ if (modeInfo.m_transformed || isSigned)
+ {
+ SignExtendSingle(eps[0][1][ch], modeInfo.m_bPrec[ch]);
+ SignExtendSingle(eps[1][0][ch], modeInfo.m_bPrec[ch]);
+ SignExtendSingle(eps[1][1][ch], modeInfo.m_bPrec[ch]);
+ }
+ }
+ }
+ else
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ if (isSigned)
+ SignExtendSingle(eps[0][0][ch], modeInfo.m_aPrec);
+ if (modeInfo.m_transformed || isSigned)
+ SignExtendSingle(eps[0][1][ch], modeInfo.m_bPrec[ch]);
+ }
+ }
+
+ int aPrec = modeInfo.m_aPrec;
+
+ if (modeInfo.m_transformed)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ int wrapMask = (1 << aPrec) - 1;
+
+ eps[0][1][ch] = ((eps[0][0][ch] + eps[0][1][ch]) & wrapMask);
+ if (isSigned)
+ SignExtendSingle(eps[0][1][ch], aPrec);
+
+ if (modeInfo.m_partitioned)
+ {
+ eps[1][0][ch] = ((eps[0][0][ch] + eps[1][0][ch]) & wrapMask);
+ eps[1][1][ch] = ((eps[0][0][ch] + eps[1][1][ch]) & wrapMask);
+
+ if (isSigned)
+ {
+ SignExtendSingle(eps[1][0][ch], aPrec);
+ SignExtendSingle(eps[1][1][ch], aPrec);
+ }
+ }
+ }
+ }
+
+ // Unquantize endpoints
+ for (int subset = 0; subset < numSubsets; subset++)
+ {
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ int &v = eps[subset][epi][ch];
+
+ if (isSigned)
+ {
+ if (aPrec >= 16)
+ {
+ // Nothing
+ }
+ else
+ {
+ bool s = false;
+ int comp = v;
+ if (v < 0)
+ {
+ s = true;
+ comp = -comp;
+ }
+
+ int unq = 0;
+ if (comp == 0)
+ unq = 0;
+ else if (comp >= ((1 << (aPrec - 1)) - 1))
+ unq = 0x7fff;
+ else
+ unq = ((comp << 15) + 0x4000) >> (aPrec - 1);
+
+ if (s)
+ unq = -unq;
+
+ v = unq;
+ }
+ }
+ else
+ {
+ if (aPrec >= 15)
+ {
+ // Nothing
+ }
+ else if (v == 0)
+ {
+ // Nothing
+ }
+ else if (v == ((1 << aPrec) - 1))
+ v = 0xffff;
+ else
+ v = ((v << 16) + 0x8000) >> aPrec;
+ }
+ }
+ }
+ }
+
+ const int *weights = BC7Data::g_weightTables[indexBits];
+
+ for (int px = 0; px < 16; px++)
+ {
+ int subset = 0;
+ if (modeInfo.m_partitioned)
+ subset = (BC7Data::g_partitionMap[partition] >> px) & 1;
+
+ int w = weights[indexes[px]];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ int comp = ((64 - w) * eps[subset][0][ch] + w * eps[subset][1][ch] + 32) >> 6;
+
+ if (isSigned)
+ {
+ if (comp < 0)
+ comp = -(((-comp) * 31) >> 5);
+ else
+ comp = (comp * 31) >> 5;
+
+ int s = 0;
+ if (comp < 0)
+ {
+ s = 0x8000;
+ comp = -comp;
+ }
+
+ output.m_pixels[px][ch] = static_cast<uint16_t>(s | comp);
+ }
+ else
+ {
+ comp = (comp * 31) >> 6;
+ output.m_pixels[px][ch] = static_cast<uint16_t>(comp);
+ }
+ }
+ output.m_pixels[px][3] = 0x3c00; // 1.0
+ }
+}
+
+void cvtt::Kernels::ConfigureBC7EncodingPlanFromQuality(BC7EncodingPlan &encodingPlan, int quality)
+{
+ static const int kMaxQuality = 100;
+
+ if (quality < 1)
+ quality = 1;
+ else if (quality > kMaxQuality)
+ quality = kMaxQuality;
+
+ const int numRGBModes = cvtt::Tables::BC7Prio::g_bc7NumPrioCodesRGB * quality / kMaxQuality;
+ const int numRGBAModes = cvtt::Tables::BC7Prio::g_bc7NumPrioCodesRGBA * quality / kMaxQuality;
+
+ const uint16_t *prioLists[] = { cvtt::Tables::BC7Prio::g_bc7PrioCodesRGB, cvtt::Tables::BC7Prio::g_bc7PrioCodesRGBA };
+ const int prioListSizes[] = { numRGBModes, numRGBAModes };
+
+ BC7FineTuningParams ftParams;
+ memset(&ftParams, 0, sizeof(ftParams));
+
+ for (int listIndex = 0; listIndex < 2; listIndex++)
+ {
+ int prioListSize = prioListSizes[listIndex];
+ const uint16_t *prioList = prioLists[listIndex];
+
+ for (int prioIndex = 0; prioIndex < prioListSize; prioIndex++)
+ {
+ const uint16_t packedMode = prioList[prioIndex];
+
+ uint8_t seedPoints = static_cast<uint8_t>(cvtt::Tables::BC7Prio::UnpackSeedPointCount(packedMode));
+ int mode = cvtt::Tables::BC7Prio::UnpackMode(packedMode);
+
+ switch (mode)
+ {
+ case 0:
+ ftParams.mode0SP[cvtt::Tables::BC7Prio::UnpackPartition(packedMode)] = seedPoints;
+ break;
+ case 1:
+ ftParams.mode1SP[cvtt::Tables::BC7Prio::UnpackPartition(packedMode)] = seedPoints;
+ break;
+ case 2:
+ ftParams.mode2SP[cvtt::Tables::BC7Prio::UnpackPartition(packedMode)] = seedPoints;
+ break;
+ case 3:
+ ftParams.mode3SP[cvtt::Tables::BC7Prio::UnpackPartition(packedMode)] = seedPoints;
+ break;
+ case 4:
+ ftParams.mode4SP[cvtt::Tables::BC7Prio::UnpackRotation(packedMode)][cvtt::Tables::BC7Prio::UnpackIndexSelector(packedMode)] = seedPoints;
+ break;
+ case 5:
+ ftParams.mode5SP[cvtt::Tables::BC7Prio::UnpackRotation(packedMode)] = seedPoints;
+ break;
+ case 6:
+ ftParams.mode6SP = seedPoints;
+ break;
+ case 7:
+ ftParams.mode7SP[cvtt::Tables::BC7Prio::UnpackPartition(packedMode)] = seedPoints;
+ break;
+ }
+ }
+ }
+
+ ConfigureBC7EncodingPlanFromFineTuningParams(encodingPlan, ftParams);
+}
+
+// Generates a BC7 encoding plan from fine-tuning parameters.
+bool cvtt::Kernels::ConfigureBC7EncodingPlanFromFineTuningParams(BC7EncodingPlan &encodingPlan, const BC7FineTuningParams &params)
+{
+ memset(&encodingPlan, 0, sizeof(encodingPlan));
+
+ // Mode 0
+ for (int partition = 0; partition < 16; partition++)
+ {
+ uint8_t sp = params.mode0SP[partition];
+ if (sp == 0)
+ continue;
+
+ encodingPlan.mode0PartitionEnabled |= static_cast<uint16_t>(1) << partition;
+
+ for (int subset = 0; subset < 3; subset++)
+ {
+ int shape = cvtt::Internal::BC7Data::g_shapes3[partition][subset];
+ encodingPlan.seedPointsForShapeRGB[shape] = std::max(encodingPlan.seedPointsForShapeRGB[shape], sp);
+ }
+ }
+
+ // Mode 1
+ for (int partition = 0; partition < 64; partition++)
+ {
+ uint8_t sp = params.mode1SP[partition];
+ if (sp == 0)
+ continue;
+
+ encodingPlan.mode1PartitionEnabled |= static_cast<uint64_t>(1) << partition;
+
+ for (int subset = 0; subset < 2; subset++)
+ {
+ int shape = cvtt::Internal::BC7Data::g_shapes2[partition][subset];
+ encodingPlan.seedPointsForShapeRGB[shape] = std::max(encodingPlan.seedPointsForShapeRGB[shape], sp);
+ }
+ }
+
+ // Mode 2
+ for (int partition = 0; partition < 64; partition++)
+ {
+ uint8_t sp = params.mode2SP[partition];
+ if (sp == 0)
+ continue;
+
+ encodingPlan.mode2PartitionEnabled |= static_cast<uint64_t>(1) << partition;
+
+ for (int subset = 0; subset < 3; subset++)
+ {
+ int shape = cvtt::Internal::BC7Data::g_shapes3[partition][subset];
+ encodingPlan.seedPointsForShapeRGB[shape] = std::max(encodingPlan.seedPointsForShapeRGB[shape], sp);
+ }
+ }
+
+ // Mode 3
+ for (int partition = 0; partition < 64; partition++)
+ {
+ uint8_t sp = params.mode3SP[partition];
+ if (sp == 0)
+ continue;
+
+ encodingPlan.mode3PartitionEnabled |= static_cast<uint64_t>(1) << partition;
+
+ for (int subset = 0; subset < 2; subset++)
+ {
+ int shape = cvtt::Internal::BC7Data::g_shapes2[partition][subset];
+ encodingPlan.seedPointsForShapeRGB[shape] = std::max(encodingPlan.seedPointsForShapeRGB[shape], sp);
+ }
+ }
+
+ // Mode 4
+ for (int rotation = 0; rotation < 4; rotation++)
+ {
+ for (int indexMode = 0; indexMode < 2; indexMode++)
+ encodingPlan.mode4SP[rotation][indexMode] = params.mode4SP[rotation][indexMode];
+ }
+
+ // Mode 5
+ for (int rotation = 0; rotation < 4; rotation++)
+ encodingPlan.mode5SP[rotation] = params.mode5SP[rotation];
+
+ // Mode 6
+ {
+ uint8_t sp = params.mode6SP;
+ if (sp != 0)
+ {
+ encodingPlan.mode6Enabled = true;
+
+ int shape = cvtt::Internal::BC7Data::g_shapes1[0][0];
+ encodingPlan.seedPointsForShapeRGBA[shape] = std::max(encodingPlan.seedPointsForShapeRGBA[shape], sp);
+ }
+ }
+
+ // Mode 7
+ for (int partition = 0; partition < 64; partition++)
+ {
+ uint8_t sp = params.mode7SP[partition];
+ if (sp == 0)
+ continue;
+
+ encodingPlan.mode7RGBAPartitionEnabled |= static_cast<uint64_t>(1) << partition;
+
+ for (int subset = 0; subset < 2; subset++)
+ {
+ int shape = cvtt::Internal::BC7Data::g_shapes2[partition][subset];
+ encodingPlan.seedPointsForShapeRGBA[shape] = std::max(encodingPlan.seedPointsForShapeRGBA[shape], sp);
+ }
+ }
+
+ for (int i = 0; i < BC7EncodingPlan::kNumRGBShapes; i++)
+ {
+ if (encodingPlan.seedPointsForShapeRGB[i] > 0)
+ {
+ encodingPlan.rgbShapeList[encodingPlan.rgbNumShapesToEvaluate] = i;
+ encodingPlan.rgbNumShapesToEvaluate++;
+ }
+ }
+
+ for (int i = 0; i < BC7EncodingPlan::kNumRGBAShapes; i++)
+ {
+ if (encodingPlan.seedPointsForShapeRGBA[i] > 0)
+ {
+ encodingPlan.rgbaShapeList[encodingPlan.rgbaNumShapesToEvaluate] = i;
+ encodingPlan.rgbaNumShapesToEvaluate++;
+ }
+ }
+
+ encodingPlan.mode7RGBPartitionEnabled = (encodingPlan.mode7RGBAPartitionEnabled & ~encodingPlan.mode3PartitionEnabled);
+
+ return true;
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_BC67.h b/thirdparty/cvtt/ConvectionKernels_BC67.h
new file mode 100644
index 0000000000..b929711187
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BC67.h
@@ -0,0 +1,99 @@
+#pragma once
+
+#include "ConvectionKernels_ParallelMath.h"
+
+
+namespace cvtt
+{
+ namespace Tables
+ {
+ namespace BC7SC
+ {
+ struct Table;
+ }
+ }
+
+ namespace Internal
+ {
+ namespace BC67
+ {
+ struct WorkInfo;
+ }
+
+ template<int TVectorSize>
+ class IndexSelectorHDR;
+ }
+
+ struct PixelBlockU8;
+}
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ class BC7Computer
+ {
+ public:
+ static void Pack(uint32_t flags, const PixelBlockU8* inputs, uint8_t* packedBlocks, const float channelWeights[4], const BC7EncodingPlan &encodingPlan, int numRefineRounds);
+ static void UnpackOne(PixelBlockU8 &output, const uint8_t* packedBlock);
+
+ private:
+ static const int MaxTweakRounds = 4;
+
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+ typedef ParallelMath::Float MFloat;
+
+ static void TweakAlpha(const MUInt15 original[2], int tweak, int range, MUInt15 result[2]);
+ static void Quantize(MUInt15* color, int bits, int channels);
+ static void QuantizeP(MUInt15* color, int bits, uint16_t p, int channels);
+ static void Unquantize(MUInt15* color, int bits, int channels);
+ static void CompressEndpoints0(MUInt15 ep[2][4], uint16_t p[2]);
+ static void CompressEndpoints1(MUInt15 ep[2][4], uint16_t p);
+ static void CompressEndpoints2(MUInt15 ep[2][4]);
+ static void CompressEndpoints3(MUInt15 ep[2][4], uint16_t p[2]);
+ static void CompressEndpoints4(MUInt15 epRGB[2][3], MUInt15 epA[2]);
+ static void CompressEndpoints5(MUInt15 epRGB[2][3], MUInt15 epA[2]);
+ static void CompressEndpoints6(MUInt15 ep[2][4], uint16_t p[2]);
+ static void CompressEndpoints7(MUInt15 ep[2][4], uint16_t p[2]);
+ static void TrySingleColorRGBAMultiTable(uint32_t flags, const MUInt15 pixels[16][4], const MFloat average[4], int numRealChannels, const uint8_t *fragmentStart, int shapeLength, const MFloat &staticAlphaError, const ParallelMath::Int16CompFlag punchThroughInvalid[4], MFloat& shapeBestError, MUInt15 shapeBestEP[2][4], MUInt15 *fragmentBestIndexes, const float *channelWeightsSq, const cvtt::Tables::BC7SC::Table*const* tables, int numTables, const ParallelMath::RoundTowardNearestForScope *rtn);
+ static void TrySinglePlane(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const float channelWeights[4], const BC7EncodingPlan &encodingPlan, int numRefineRounds, BC67::WorkInfo& work, const ParallelMath::RoundTowardNearestForScope *rtn);
+ static void TryDualPlane(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const float channelWeights[4], const BC7EncodingPlan &encodingPlan, int numRefineRounds, BC67::WorkInfo& work, const ParallelMath::RoundTowardNearestForScope *rtn);
+
+ template<class T>
+ static void Swap(T& a, T& b);
+ };
+
+
+ class BC6HComputer
+ {
+ public:
+ static void Pack(uint32_t flags, const PixelBlockF16* inputs, uint8_t* packedBlocks, const float channelWeights[4], bool isSigned, int numTweakRounds, int numRefineRounds);
+ static void UnpackOne(PixelBlockF16 &output, const uint8_t *pBC, bool isSigned);
+
+ private:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::AInt16 MAInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+ typedef ParallelMath::UInt31 MUInt31;
+
+ static const int MaxTweakRounds = 4;
+ static const int MaxRefineRounds = 3;
+
+ static MSInt16 QuantizeSingleEndpointElementSigned(const MSInt16 &elem2CL, int precision, const ParallelMath::RoundUpForScope* ru);
+ static MUInt15 QuantizeSingleEndpointElementUnsigned(const MUInt15 &elem, int precision, const ParallelMath::RoundUpForScope* ru);
+ static void UnquantizeSingleEndpointElementSigned(const MSInt16 &comp, int precision, MSInt16 &outUnquantized, MSInt16 &outUnquantizedFinished2CL);
+ static void UnquantizeSingleEndpointElementUnsigned(const MUInt15 &comp, int precision, MUInt16 &outUnquantized, MUInt16 &outUnquantizedFinished);
+ static void QuantizeEndpointsSigned(const MSInt16 endPoints[2][3], const MFloat floatPixelsColorSpace[16][3], const MFloat floatPixelsLinearWeighted[16][3], MAInt16 quantizedEndPoints[2][3], MUInt15 indexes[16], IndexSelectorHDR<3> &indexSelector, int fixupIndex, int precision, int indexRange, const float *channelWeights, bool fastIndexing, const ParallelMath::RoundTowardNearestForScope *rtn);
+ static void QuantizeEndpointsUnsigned(const MSInt16 endPoints[2][3], const MFloat floatPixelsColorSpace[16][3], const MFloat floatPixelsLinearWeighted[16][3], MAInt16 quantizedEndPoints[2][3], MUInt15 indexes[16], IndexSelectorHDR<3> &indexSelector, int fixupIndex, int precision, int indexRange, const float *channelWeights, bool fastIndexing, const ParallelMath::RoundTowardNearestForScope *rtn);
+ static void EvaluatePartitionedLegality(const MAInt16 ep0[2][3], const MAInt16 ep1[2][3], int aPrec, const int bPrec[3], bool isTransformed, MAInt16 outEncodedEPs[2][2][3], ParallelMath::Int16CompFlag& outIsLegal);
+ static void EvaluateSingleLegality(const MAInt16 ep[2][3], int aPrec, const int bPrec[3], bool isTransformed, MAInt16 outEncodedEPs[2][3], ParallelMath::Int16CompFlag& outIsLegal);
+ static void SignExtendSingle(int &v, int bits);
+ };
+ }
+}
diff --git a/thirdparty/cvtt/ConvectionKernels_BC6H_IO.cpp b/thirdparty/cvtt/ConvectionKernels_BC6H_IO.cpp
new file mode 100644
index 0000000000..753b6f9000
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BC6H_IO.cpp
@@ -0,0 +1,881 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels_BC6H_IO.h"
+
+namespace cvtt
+{
+ namespace BC6H_IO
+ {
+ void WriteMode0(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x3u) | ((gy >> 2) & 0x4u) | ((by >> 1) & 0x8u) | (bz & 0x10u) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0xf8u) | ((gz << 4) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x3e000u) | ((bz << 18) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0xf800000u) | ((bz << 27) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x3eu) | ((bz << 4) & 0x40u) | ((rz << 7) & 0xf80u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode1(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x3u) | ((gy >> 3) & 0x4u) | ((gz >> 1) & 0x18u) | ((rw << 5) & 0xfe0u) | ((bz << 12) & 0x3000u) | ((by << 10) & 0x4000u) | ((gw << 15) & 0x3f8000u) | ((by << 17) & 0x400000u) | ((bz << 21) & 0x800000u) | ((gy << 20) & 0x1000000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bz >> 3) & 0x1u) | ((bz >> 4) & 0x2u) | ((bz >> 2) & 0x4u) | ((rx << 3) & 0x1f8u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x7e000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0x1f800000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x7eu) | ((rz << 7) & 0x1f80u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode2(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0xf8u) | ((rw >> 2) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x1e000u) | ((gw << 7) & 0x20000u) | ((bz << 18) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0x7800000u) | ((bw << 17) & 0x8000000u) | ((bz << 27) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x3eu) | ((bz << 4) & 0x40u) | ((rz << 7) & 0xf80u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode3(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0x78u) | ((rw >> 3) & 0x80u) | ((gz << 4) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x3e000u) | ((gw << 8) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0x7800000u) | ((bw << 17) & 0x8000000u) | ((bz << 27) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x1eu) | ((bz << 5) & 0x20u) | ((bz << 4) & 0x40u) | ((rz << 7) & 0x780u) | ((gy << 7) & 0x800u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode4(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0x78u) | ((rw >> 3) & 0x80u) | ((by << 4) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x1e000u) | ((gw << 7) & 0x20000u) | ((bz << 18) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0xf800000u) | ((bw << 18) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x1eu) | ((bz << 4) & 0x60u) | ((rz << 7) & 0x780u) | ((bz << 7) & 0x800u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode5(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x3fe0u) | ((by << 10) & 0x4000u) | ((gw << 15) & 0xff8000u) | ((gy << 20) & 0x1000000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x3u) | ((bz >> 2) & 0x4u) | ((rx << 3) & 0xf8u) | ((gz << 4) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x3e000u) | ((bz << 18) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0xf800000u) | ((bz << 27) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x3eu) | ((bz << 4) & 0x40u) | ((rz << 7) & 0xf80u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode6(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x1fe0u) | ((gz << 9) & 0x2000u) | ((by << 10) & 0x4000u) | ((gw << 15) & 0x7f8000u) | ((bz << 21) & 0x800000u) | ((gy << 20) & 0x1000000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x1u) | ((bz >> 2) & 0x6u) | ((rx << 3) & 0x1f8u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x3e000u) | ((bz << 18) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0xf800000u) | ((bz << 27) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x7eu) | ((rz << 7) & 0x1f80u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode7(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x1fe0u) | ((bz << 13) & 0x2000u) | ((by << 10) & 0x4000u) | ((gw << 15) & 0x7f8000u) | ((gy << 18) & 0x800000u) | ((gy << 20) & 0x1000000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x1u) | ((gz >> 4) & 0x2u) | ((bz >> 2) & 0x4u) | ((rx << 3) & 0xf8u) | ((gz << 4) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x7e000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0xf800000u) | ((bz << 27) & 0x10000000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x3eu) | ((bz << 4) & 0x40u) | ((rz << 7) & 0xf80u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode8(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x1fe0u) | ((bz << 12) & 0x2000u) | ((by << 10) & 0x4000u) | ((gw << 15) & 0x7f8000u) | ((by << 18) & 0x800000u) | ((gy << 20) & 0x1000000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x1u) | ((bz >> 4) & 0x2u) | ((bz >> 2) & 0x4u) | ((rx << 3) & 0xf8u) | ((gz << 4) & 0x100u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x3e000u) | ((bz << 18) & 0x40000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0x1f800000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x3eu) | ((bz << 4) & 0x40u) | ((rz << 7) & 0xf80u) | ((bz << 9) & 0x1000u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode9(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7e0u) | ((gz << 7) & 0x800u) | ((bz << 12) & 0x3000u) | ((by << 10) & 0x4000u) | ((gw << 15) & 0x1f8000u) | ((gy << 16) & 0x200000u) | ((by << 17) & 0x400000u) | ((bz << 21) & 0x800000u) | ((gy << 20) & 0x1000000u) | ((bw << 25) & 0x7e000000u) | ((gz << 26) & 0x80000000u);
+ encoded[1] = ((bz >> 3) & 0x1u) | ((bz >> 4) & 0x2u) | ((bz >> 2) & 0x4u) | ((rx << 3) & 0x1f8u) | ((gy << 9) & 0x1e00u) | ((gx << 13) & 0x7e000u) | ((gz << 19) & 0x780000u) | ((bx << 23) & 0x1f800000u) | ((by << 29) & 0xe0000000u);
+ encoded[2] = ((by >> 3) & 0x1u) | ((ry << 1) & 0x7eu) | ((rz << 7) & 0x1f80u) | ((d << 13) & 0x3e000u);
+ }
+
+ void WriteMode10(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0x1ff8u) | ((gx << 13) & 0x7fe000u) | ((bx << 23) & 0xff800000u);
+ encoded[2] = ((bx >> 9) & 0x1u);
+ }
+
+ void WriteMode11(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0xff8u) | ((rw << 2) & 0x1000u) | ((gx << 13) & 0x3fe000u) | ((gw << 12) & 0x400000u) | ((bx << 23) & 0xff800000u);
+ encoded[2] = ((bw >> 10) & 0x1u);
+ }
+
+ void WriteMode12(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0x7f8u) | (rw & 0x800u) | ((rw << 2) & 0x1000u) | ((gx << 13) & 0x1fe000u) | ((gw << 10) & 0x200000u) | ((gw << 12) & 0x400000u) | ((bx << 23) & 0x7f800000u) | ((bw << 20) & 0x80000000u);
+ encoded[2] = ((bw >> 10) & 0x1u);
+ }
+
+ void WriteMode13(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz)
+ {
+ encoded[0] = (m & 0x1fu) | ((rw << 5) & 0x7fe0u) | ((gw << 15) & 0x1ff8000u) | ((bw << 25) & 0xfe000000u);
+ encoded[1] = ((bw >> 7) & 0x7u) | ((rx << 3) & 0x78u) | ((rw >> 8) & 0x80u) | ((rw >> 6) & 0x100u) | ((rw >> 4) & 0x200u) | ((rw >> 2) & 0x400u) | (rw & 0x800u) | ((rw << 2) & 0x1000u) | ((gx << 13) & 0x1e000u) | ((gw << 2) & 0x20000u) | ((gw << 4) & 0x40000u) | ((gw << 6) & 0x80000u) | ((gw << 8) & 0x100000u) | ((gw << 10) & 0x200000u) | ((gw << 12) & 0x400000u) | ((bx << 23) & 0x7800000u) | ((bw << 12) & 0x8000000u) | ((bw << 14) & 0x10000000u) | ((bw << 16) & 0x20000000u) | ((bw << 18) & 0x40000000u) | ((bw << 20) & 0x80000000u);
+ encoded[2] = ((bw >> 10) & 0x1u);
+ }
+
+ void ReadMode0(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ gy |= ((encoded[0] << 2) & 0x10u);
+ by |= ((encoded[0] << 1) & 0x10u);
+ bz |= (encoded[0] & 0x10u);
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0x1fu);
+ gz |= ((encoded[1] >> 4) & 0x10u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x1fu);
+ bz |= ((encoded[1] >> 18) & 0x1u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x1fu);
+ bz |= ((encoded[1] >> 27) & 0x2u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x1fu);
+ bz |= ((encoded[2] >> 4) & 0x4u);
+ rz |= ((encoded[2] >> 7) & 0x1fu);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode1(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ gy |= ((encoded[0] << 3) & 0x20u);
+ gz |= ((encoded[0] << 1) & 0x30u);
+ rw |= ((encoded[0] >> 5) & 0x7fu);
+ bz |= ((encoded[0] >> 12) & 0x3u);
+ by |= ((encoded[0] >> 10) & 0x10u);
+ gw |= ((encoded[0] >> 15) & 0x7fu);
+ by |= ((encoded[0] >> 17) & 0x20u);
+ bz |= ((encoded[0] >> 21) & 0x4u);
+ gy |= ((encoded[0] >> 20) & 0x10u);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bz |= ((encoded[1] << 3) & 0x8u);
+ bz |= ((encoded[1] << 4) & 0x20u);
+ bz |= ((encoded[1] << 2) & 0x10u);
+ rx |= ((encoded[1] >> 3) & 0x3fu);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x3fu);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x3fu);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x3fu);
+ rz |= ((encoded[2] >> 7) & 0x3fu);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode2(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0x1fu);
+ rw |= ((encoded[1] << 2) & 0x400u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0xfu);
+ gw |= ((encoded[1] >> 7) & 0x400u);
+ bz |= ((encoded[1] >> 18) & 0x1u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0xfu);
+ bw |= ((encoded[1] >> 17) & 0x400u);
+ bz |= ((encoded[1] >> 27) & 0x2u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x1fu);
+ bz |= ((encoded[2] >> 4) & 0x4u);
+ rz |= ((encoded[2] >> 7) & 0x1fu);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode3(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0xfu);
+ rw |= ((encoded[1] << 3) & 0x400u);
+ gz |= ((encoded[1] >> 4) & 0x10u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x1fu);
+ gw |= ((encoded[1] >> 8) & 0x400u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0xfu);
+ bw |= ((encoded[1] >> 17) & 0x400u);
+ bz |= ((encoded[1] >> 27) & 0x2u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0xfu);
+ bz |= ((encoded[2] >> 5) & 0x1u);
+ bz |= ((encoded[2] >> 4) & 0x4u);
+ rz |= ((encoded[2] >> 7) & 0xfu);
+ gy |= ((encoded[2] >> 7) & 0x10u);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode4(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0xfu);
+ rw |= ((encoded[1] << 3) & 0x400u);
+ by |= ((encoded[1] >> 4) & 0x10u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0xfu);
+ gw |= ((encoded[1] >> 7) & 0x400u);
+ bz |= ((encoded[1] >> 18) & 0x1u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x1fu);
+ bw |= ((encoded[1] >> 18) & 0x400u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0xfu);
+ bz |= ((encoded[2] >> 4) & 0x6u);
+ rz |= ((encoded[2] >> 7) & 0xfu);
+ bz |= ((encoded[2] >> 7) & 0x10u);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode5(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x1ffu);
+ by |= ((encoded[0] >> 10) & 0x10u);
+ gw |= ((encoded[0] >> 15) & 0x1ffu);
+ gy |= ((encoded[0] >> 20) & 0x10u);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x180u);
+ bz |= ((encoded[1] << 2) & 0x10u);
+ rx |= ((encoded[1] >> 3) & 0x1fu);
+ gz |= ((encoded[1] >> 4) & 0x10u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x1fu);
+ bz |= ((encoded[1] >> 18) & 0x1u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x1fu);
+ bz |= ((encoded[1] >> 27) & 0x2u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x1fu);
+ bz |= ((encoded[2] >> 4) & 0x4u);
+ rz |= ((encoded[2] >> 7) & 0x1fu);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode6(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0xffu);
+ gz |= ((encoded[0] >> 9) & 0x10u);
+ by |= ((encoded[0] >> 10) & 0x10u);
+ gw |= ((encoded[0] >> 15) & 0xffu);
+ bz |= ((encoded[0] >> 21) & 0x4u);
+ gy |= ((encoded[0] >> 20) & 0x10u);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x80u);
+ bz |= ((encoded[1] << 2) & 0x18u);
+ rx |= ((encoded[1] >> 3) & 0x3fu);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x1fu);
+ bz |= ((encoded[1] >> 18) & 0x1u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x1fu);
+ bz |= ((encoded[1] >> 27) & 0x2u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x3fu);
+ rz |= ((encoded[2] >> 7) & 0x3fu);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode7(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0xffu);
+ bz |= ((encoded[0] >> 13) & 0x1u);
+ by |= ((encoded[0] >> 10) & 0x10u);
+ gw |= ((encoded[0] >> 15) & 0xffu);
+ gy |= ((encoded[0] >> 18) & 0x20u);
+ gy |= ((encoded[0] >> 20) & 0x10u);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x80u);
+ gz |= ((encoded[1] << 4) & 0x20u);
+ bz |= ((encoded[1] << 2) & 0x10u);
+ rx |= ((encoded[1] >> 3) & 0x1fu);
+ gz |= ((encoded[1] >> 4) & 0x10u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x3fu);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x1fu);
+ bz |= ((encoded[1] >> 27) & 0x2u);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x1fu);
+ bz |= ((encoded[2] >> 4) & 0x4u);
+ rz |= ((encoded[2] >> 7) & 0x1fu);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode8(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0xffu);
+ bz |= ((encoded[0] >> 12) & 0x2u);
+ by |= ((encoded[0] >> 10) & 0x10u);
+ gw |= ((encoded[0] >> 15) & 0xffu);
+ by |= ((encoded[0] >> 18) & 0x20u);
+ gy |= ((encoded[0] >> 20) & 0x10u);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x80u);
+ bz |= ((encoded[1] << 4) & 0x20u);
+ bz |= ((encoded[1] << 2) & 0x10u);
+ rx |= ((encoded[1] >> 3) & 0x1fu);
+ gz |= ((encoded[1] >> 4) & 0x10u);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x1fu);
+ bz |= ((encoded[1] >> 18) & 0x1u);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x3fu);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x1fu);
+ bz |= ((encoded[2] >> 4) & 0x4u);
+ rz |= ((encoded[2] >> 7) & 0x1fu);
+ bz |= ((encoded[2] >> 9) & 0x8u);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode9(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3fu);
+ gz |= ((encoded[0] >> 7) & 0x10u);
+ bz |= ((encoded[0] >> 12) & 0x3u);
+ by |= ((encoded[0] >> 10) & 0x10u);
+ gw |= ((encoded[0] >> 15) & 0x3fu);
+ gy |= ((encoded[0] >> 16) & 0x20u);
+ by |= ((encoded[0] >> 17) & 0x20u);
+ bz |= ((encoded[0] >> 21) & 0x4u);
+ gy |= ((encoded[0] >> 20) & 0x10u);
+ bw |= ((encoded[0] >> 25) & 0x3fu);
+ gz |= ((encoded[0] >> 26) & 0x20u);
+ bz |= ((encoded[1] << 3) & 0x8u);
+ bz |= ((encoded[1] << 4) & 0x20u);
+ bz |= ((encoded[1] << 2) & 0x10u);
+ rx |= ((encoded[1] >> 3) & 0x3fu);
+ gy |= ((encoded[1] >> 9) & 0xfu);
+ gx |= ((encoded[1] >> 13) & 0x3fu);
+ gz |= ((encoded[1] >> 19) & 0xfu);
+ bx |= ((encoded[1] >> 23) & 0x3fu);
+ by |= ((encoded[1] >> 29) & 0x7u);
+ by |= ((encoded[2] << 3) & 0x8u);
+ ry |= ((encoded[2] >> 1) & 0x3fu);
+ rz |= ((encoded[2] >> 7) & 0x3fu);
+ d |= ((encoded[2] >> 13) & 0x1fu);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode10(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0x3ffu);
+ gx |= ((encoded[1] >> 13) & 0x3ffu);
+ bx |= ((encoded[1] >> 23) & 0x1ffu);
+ bx |= ((encoded[2] << 9) & 0x200u);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode11(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0x1ffu);
+ rw |= ((encoded[1] >> 2) & 0x400u);
+ gx |= ((encoded[1] >> 13) & 0x1ffu);
+ gw |= ((encoded[1] >> 12) & 0x400u);
+ bx |= ((encoded[1] >> 23) & 0x1ffu);
+ bw |= ((encoded[2] << 10) & 0x400u);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode12(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0xffu);
+ rw |= (encoded[1] & 0x800u);
+ rw |= ((encoded[1] >> 2) & 0x400u);
+ gx |= ((encoded[1] >> 13) & 0xffu);
+ gw |= ((encoded[1] >> 10) & 0x800u);
+ gw |= ((encoded[1] >> 12) & 0x400u);
+ bx |= ((encoded[1] >> 23) & 0xffu);
+ bw |= ((encoded[1] >> 20) & 0x800u);
+ bw |= ((encoded[2] << 10) & 0x400u);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ void ReadMode13(const uint32_t *encoded, uint16_t &outD, uint16_t &outRW, uint16_t &outRX, uint16_t &outRY, uint16_t &outRZ, uint16_t &outGW, uint16_t &outGX, uint16_t &outGY, uint16_t &outGZ, uint16_t &outBW, uint16_t &outBX, uint16_t &outBY, uint16_t &outBZ)
+ {
+ uint16_t d = 0;
+ uint16_t rw = 0;
+ uint16_t rx = 0;
+ uint16_t ry = 0;
+ uint16_t rz = 0;
+ uint16_t gw = 0;
+ uint16_t gx = 0;
+ uint16_t gy = 0;
+ uint16_t gz = 0;
+ uint16_t bw = 0;
+ uint16_t bx = 0;
+ uint16_t by = 0;
+ uint16_t bz = 0;
+ rw |= ((encoded[0] >> 5) & 0x3ffu);
+ gw |= ((encoded[0] >> 15) & 0x3ffu);
+ bw |= ((encoded[0] >> 25) & 0x7fu);
+ bw |= ((encoded[1] << 7) & 0x380u);
+ rx |= ((encoded[1] >> 3) & 0xfu);
+ rw |= ((encoded[1] << 8) & 0x8000u);
+ rw |= ((encoded[1] << 6) & 0x4000u);
+ rw |= ((encoded[1] << 4) & 0x2000u);
+ rw |= ((encoded[1] << 2) & 0x1000u);
+ rw |= (encoded[1] & 0x800u);
+ rw |= ((encoded[1] >> 2) & 0x400u);
+ gx |= ((encoded[1] >> 13) & 0xfu);
+ gw |= ((encoded[1] >> 2) & 0x8000u);
+ gw |= ((encoded[1] >> 4) & 0x4000u);
+ gw |= ((encoded[1] >> 6) & 0x2000u);
+ gw |= ((encoded[1] >> 8) & 0x1000u);
+ gw |= ((encoded[1] >> 10) & 0x800u);
+ gw |= ((encoded[1] >> 12) & 0x400u);
+ bx |= ((encoded[1] >> 23) & 0xfu);
+ bw |= ((encoded[1] >> 12) & 0x8000u);
+ bw |= ((encoded[1] >> 14) & 0x4000u);
+ bw |= ((encoded[1] >> 16) & 0x2000u);
+ bw |= ((encoded[1] >> 18) & 0x1000u);
+ bw |= ((encoded[1] >> 20) & 0x800u);
+ bw |= ((encoded[2] << 10) & 0x400u);
+ outD = d;
+ outRW = rw;
+ outRX = rx;
+ outRY = ry;
+ outRZ = rz;
+ outGW = gw;
+ outGX = gx;
+ outGY = gy;
+ outGZ = gz;
+ outBW = bw;
+ outBX = bx;
+ outBY = by;
+ outBZ = bz;
+ }
+
+ const ReadFunc_t g_readFuncs[14] =
+ {
+ ReadMode0,
+ ReadMode1,
+ ReadMode2,
+ ReadMode3,
+ ReadMode4,
+ ReadMode5,
+ ReadMode6,
+ ReadMode7,
+ ReadMode8,
+ ReadMode9,
+ ReadMode10,
+ ReadMode11,
+ ReadMode12,
+ ReadMode13
+ };
+
+ const WriteFunc_t g_writeFuncs[14] =
+ {
+ WriteMode0,
+ WriteMode1,
+ WriteMode2,
+ WriteMode3,
+ WriteMode4,
+ WriteMode5,
+ WriteMode6,
+ WriteMode7,
+ WriteMode8,
+ WriteMode9,
+ WriteMode10,
+ WriteMode11,
+ WriteMode12,
+ WriteMode13
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_BC6H_IO.h b/thirdparty/cvtt/ConvectionKernels_BC6H_IO.h
new file mode 100644
index 0000000000..a7bb517b54
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BC6H_IO.h
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <stdint.h>
+#include "ConvectionKernels_BC6H_IO.h"
+
+namespace cvtt
+{
+ namespace BC6H_IO
+ {
+ typedef void (*ReadFunc_t)(const uint32_t *encoded, uint16_t &d, uint16_t &rw, uint16_t &rx, uint16_t &ry, uint16_t &rz, uint16_t &gw, uint16_t &gx, uint16_t &gy, uint16_t &gz, uint16_t &bw, uint16_t &bx, uint16_t &by, uint16_t &bz);
+ typedef void (*WriteFunc_t)(uint32_t *encoded, uint16_t m, uint16_t d, uint16_t rw, uint16_t rx, uint16_t ry, uint16_t rz, uint16_t gw, uint16_t gx, uint16_t gy, uint16_t gz, uint16_t bw, uint16_t bx, uint16_t by, uint16_t bz);
+
+ extern const ReadFunc_t g_readFuncs[14];
+ extern const WriteFunc_t g_writeFuncs[14];
+ }
+}
diff --git a/thirdparty/cvtt/ConvectionKernels_BC7_Prio.h b/thirdparty/cvtt/ConvectionKernels_BC7_Prio.h
new file mode 100644
index 0000000000..1880e22d0f
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BC7_Prio.h
@@ -0,0 +1,17 @@
+#pragma once
+
+#include <stdint.h>
+
+namespace cvtt { namespace Tables { namespace BC7Prio {
+ extern const uint16_t *g_bc7PrioCodesRGB;
+ extern const int g_bc7NumPrioCodesRGB;
+
+ extern const uint16_t *g_bc7PrioCodesRGBA;
+ extern const int g_bc7NumPrioCodesRGBA;
+
+ int UnpackMode(uint16_t packed);
+ int UnpackSeedPointCount(uint16_t packed);
+ int UnpackPartition(uint16_t packed);
+ int UnpackRotation(uint16_t packed);
+ int UnpackIndexSelector(uint16_t packed);
+}}}
diff --git a/thirdparty/cvtt/ConvectionKernels_BC7_PrioData.cpp b/thirdparty/cvtt/ConvectionKernels_BC7_PrioData.cpp
new file mode 100644
index 0000000000..5b3134f860
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BC7_PrioData.cpp
@@ -0,0 +1,1301 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels_BC7_Prio.h"
+
+#define BC7_PARTITION_BITS 6
+#define BC7_PARTITION_OFFSET_BITS 0
+
+#define BC7_ROTATION_BITS 2
+#define BC7_ROTATION_OFFSET_BITS 0
+
+#define BC7_INDEX_MODE_BITS 1
+#define BC7_INDEX_MODE_OFFSET_BITS (BC7_ROTATION_OFFSET_BITS + BC7_ROTATION_BITS)
+
+#define BC7_MODE_BITS 3
+#define BC7_MODE_OFFSET_BITS (BC7_PARTITION_OFFSET_BITS + BC7_PARTITION_BITS)
+#define BC7_SEED_POINT_COUNT_BITS 2
+#define BC7_SEED_POINT_COUNT_OFFSET_BITS (BC7_MODE_BITS + BC7_MODE_OFFSET_BITS)
+
+
+
+#define BC7_MODE_PRIO_DUAL_PLANE(subData) \
+ ( \
+ ((subData / 10) << BC7_ROTATION_OFFSET_BITS) | \
+ ((subData % 10) << BC7_INDEX_MODE_OFFSET_BITS) \
+ )
+
+#define BC7_MODE_PRIO_CODE(seedPointCount, mode, subData) \
+ (\
+ ((seedPointCount - 1) << BC7_SEED_POINT_COUNT_OFFSET_BITS) | \
+ (mode << BC7_MODE_OFFSET_BITS) | \
+ ((mode == 4 || mode == 5) ? BC7_MODE_PRIO_DUAL_PLANE(subData) : (subData << BC7_PARTITION_OFFSET_BITS)) \
+ )
+
+namespace cvtt { namespace Tables { namespace BC7Prio {
+ const uint16_t g_bc7PrioCodesRGBData[] =
+ {
+ BC7_MODE_PRIO_CODE(1, 1, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 0),
+ BC7_MODE_PRIO_CODE(1, 0, 3),
+ BC7_MODE_PRIO_CODE(1, 0, 1),
+ BC7_MODE_PRIO_CODE(1, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 0, 9),
+ BC7_MODE_PRIO_CODE(1, 1, 6),
+ BC7_MODE_PRIO_CODE(1, 1, 1),
+ BC7_MODE_PRIO_CODE(1, 1, 2),
+ BC7_MODE_PRIO_CODE(1, 0, 15),
+ BC7_MODE_PRIO_CODE(1, 1, 7),
+ BC7_MODE_PRIO_CODE(1, 1, 16),
+ BC7_MODE_PRIO_CODE(1, 1, 15),
+ BC7_MODE_PRIO_CODE(1, 1, 14),
+ BC7_MODE_PRIO_CODE(1, 0, 13),
+ BC7_MODE_PRIO_CODE(1, 0, 14),
+ BC7_MODE_PRIO_CODE(1, 0, 11),
+ BC7_MODE_PRIO_CODE(1, 1, 22),
+ BC7_MODE_PRIO_CODE(1, 0, 8),
+ BC7_MODE_PRIO_CODE(1, 0, 10),
+ BC7_MODE_PRIO_CODE(1, 1, 8),
+ BC7_MODE_PRIO_CODE(1, 3, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 19),
+ BC7_MODE_PRIO_CODE(1, 4, 31),
+ BC7_MODE_PRIO_CODE(1, 1, 10),
+ BC7_MODE_PRIO_CODE(1, 1, 23),
+ BC7_MODE_PRIO_CODE(1, 1, 3),
+ BC7_MODE_PRIO_CODE(2, 1, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 9),
+ BC7_MODE_PRIO_CODE(2, 1, 0),
+ BC7_MODE_PRIO_CODE(1, 1, 20),
+ BC7_MODE_PRIO_CODE(1, 1, 21),
+ BC7_MODE_PRIO_CODE(1, 4, 11),
+ BC7_MODE_PRIO_CODE(1, 1, 29),
+ BC7_MODE_PRIO_CODE(1, 1, 26),
+ BC7_MODE_PRIO_CODE(1, 5, 30),
+ BC7_MODE_PRIO_CODE(1, 0, 4),
+ BC7_MODE_PRIO_CODE(2, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 0, 0),
+ BC7_MODE_PRIO_CODE(2, 0, 10),
+ BC7_MODE_PRIO_CODE(3, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 1, 11),
+ BC7_MODE_PRIO_CODE(1, 4, 10),
+ BC7_MODE_PRIO_CODE(2, 0, 8),
+ BC7_MODE_PRIO_CODE(2, 0, 11),
+ BC7_MODE_PRIO_CODE(2, 0, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 4),
+ BC7_MODE_PRIO_CODE(3, 1, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 12),
+ BC7_MODE_PRIO_CODE(1, 1, 18),
+ BC7_MODE_PRIO_CODE(1, 3, 0),
+ BC7_MODE_PRIO_CODE(1, 0, 5),
+ BC7_MODE_PRIO_CODE(1, 1, 17),
+ BC7_MODE_PRIO_CODE(1, 1, 25),
+ BC7_MODE_PRIO_CODE(1, 0, 7),
+ BC7_MODE_PRIO_CODE(3, 0, 10),
+ BC7_MODE_PRIO_CODE(1, 1, 5),
+ BC7_MODE_PRIO_CODE(2, 1, 10),
+ BC7_MODE_PRIO_CODE(1, 1, 24),
+ BC7_MODE_PRIO_CODE(3, 0, 8),
+ BC7_MODE_PRIO_CODE(3, 1, 0),
+ BC7_MODE_PRIO_CODE(2, 1, 15),
+ BC7_MODE_PRIO_CODE(2, 1, 14),
+ BC7_MODE_PRIO_CODE(3, 0, 13),
+ BC7_MODE_PRIO_CODE(3, 0, 11),
+ BC7_MODE_PRIO_CODE(2, 1, 16),
+ BC7_MODE_PRIO_CODE(2, 0, 14),
+ BC7_MODE_PRIO_CODE(2, 1, 3),
+ BC7_MODE_PRIO_CODE(4, 0, 10),
+ BC7_MODE_PRIO_CODE(2, 1, 1),
+ BC7_MODE_PRIO_CODE(1, 0, 2),
+ BC7_MODE_PRIO_CODE(2, 1, 2),
+ BC7_MODE_PRIO_CODE(4, 0, 8),
+ BC7_MODE_PRIO_CODE(1, 0, 12),
+ BC7_MODE_PRIO_CODE(4, 1, 13),
+ BC7_MODE_PRIO_CODE(1, 5, 10),
+ BC7_MODE_PRIO_CODE(2, 0, 15),
+ BC7_MODE_PRIO_CODE(1, 0, 6),
+ BC7_MODE_PRIO_CODE(1, 1, 35),
+ BC7_MODE_PRIO_CODE(2, 1, 23),
+ BC7_MODE_PRIO_CODE(4, 0, 13),
+ BC7_MODE_PRIO_CODE(4, 0, 11),
+ BC7_MODE_PRIO_CODE(1, 2, 17),
+ BC7_MODE_PRIO_CODE(2, 1, 6),
+ BC7_MODE_PRIO_CODE(2, 1, 7),
+ BC7_MODE_PRIO_CODE(4, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 2, 16),
+ BC7_MODE_PRIO_CODE(2, 1, 19),
+ BC7_MODE_PRIO_CODE(1, 1, 30),
+ BC7_MODE_PRIO_CODE(2, 3, 13),
+ BC7_MODE_PRIO_CODE(3, 0, 14),
+ BC7_MODE_PRIO_CODE(2, 1, 29),
+ BC7_MODE_PRIO_CODE(2, 1, 21),
+ BC7_MODE_PRIO_CODE(4, 1, 0),
+ BC7_MODE_PRIO_CODE(3, 0, 15),
+ BC7_MODE_PRIO_CODE(2, 0, 3),
+ BC7_MODE_PRIO_CODE(1, 1, 28),
+ BC7_MODE_PRIO_CODE(1, 4, 30),
+ BC7_MODE_PRIO_CODE(2, 0, 4),
+ BC7_MODE_PRIO_CODE(1, 2, 63),
+ BC7_MODE_PRIO_CODE(4, 0, 14),
+ BC7_MODE_PRIO_CODE(2, 1, 26),
+ BC7_MODE_PRIO_CODE(2, 0, 1),
+ BC7_MODE_PRIO_CODE(3, 0, 3),
+ BC7_MODE_PRIO_CODE(1, 1, 61),
+ BC7_MODE_PRIO_CODE(2, 0, 7),
+ BC7_MODE_PRIO_CODE(2, 0, 5),
+ BC7_MODE_PRIO_CODE(3, 1, 10),
+ BC7_MODE_PRIO_CODE(2, 4, 31),
+ BC7_MODE_PRIO_CODE(2, 0, 9),
+ BC7_MODE_PRIO_CODE(2, 1, 11),
+ BC7_MODE_PRIO_CODE(4, 0, 15),
+ BC7_MODE_PRIO_CODE(3, 1, 14),
+ BC7_MODE_PRIO_CODE(2, 0, 0),
+ BC7_MODE_PRIO_CODE(3, 1, 15),
+ BC7_MODE_PRIO_CODE(2, 3, 0),
+ BC7_MODE_PRIO_CODE(3, 0, 1),
+ BC7_MODE_PRIO_CODE(1, 1, 60),
+ BC7_MODE_PRIO_CODE(2, 1, 12),
+ BC7_MODE_PRIO_CODE(3, 1, 1),
+ BC7_MODE_PRIO_CODE(3, 0, 5),
+ BC7_MODE_PRIO_CODE(1, 1, 27),
+ BC7_MODE_PRIO_CODE(2, 1, 18),
+ BC7_MODE_PRIO_CODE(3, 0, 9),
+ BC7_MODE_PRIO_CODE(3, 1, 3),
+ BC7_MODE_PRIO_CODE(2, 0, 2),
+ BC7_MODE_PRIO_CODE(3, 1, 16),
+ BC7_MODE_PRIO_CODE(3, 1, 2),
+ BC7_MODE_PRIO_CODE(1, 1, 31),
+ BC7_MODE_PRIO_CODE(3, 0, 7),
+ BC7_MODE_PRIO_CODE(2, 1, 17),
+ BC7_MODE_PRIO_CODE(1, 5, 20),
+ BC7_MODE_PRIO_CODE(2, 1, 4),
+ BC7_MODE_PRIO_CODE(1, 1, 62),
+ BC7_MODE_PRIO_CODE(2, 0, 12),
+ BC7_MODE_PRIO_CODE(3, 0, 4),
+ BC7_MODE_PRIO_CODE(4, 0, 4),
+ BC7_MODE_PRIO_CODE(1, 1, 33),
+ BC7_MODE_PRIO_CODE(3, 1, 23),
+ BC7_MODE_PRIO_CODE(2, 1, 5),
+ BC7_MODE_PRIO_CODE(2, 0, 6),
+ BC7_MODE_PRIO_CODE(2, 1, 24),
+ BC7_MODE_PRIO_CODE(1, 1, 59),
+ BC7_MODE_PRIO_CODE(1, 1, 63),
+ BC7_MODE_PRIO_CODE(3, 0, 0),
+ BC7_MODE_PRIO_CODE(1, 1, 52),
+ BC7_MODE_PRIO_CODE(4, 0, 7),
+ BC7_MODE_PRIO_CODE(2, 1, 22),
+ BC7_MODE_PRIO_CODE(4, 0, 3),
+ BC7_MODE_PRIO_CODE(1, 2, 10),
+ BC7_MODE_PRIO_CODE(3, 1, 7),
+ BC7_MODE_PRIO_CODE(4, 0, 9),
+ BC7_MODE_PRIO_CODE(2, 1, 8),
+ BC7_MODE_PRIO_CODE(4, 0, 1),
+ BC7_MODE_PRIO_CODE(3, 0, 12),
+ BC7_MODE_PRIO_CODE(4, 0, 5),
+ BC7_MODE_PRIO_CODE(3, 1, 6),
+ BC7_MODE_PRIO_CODE(4, 1, 14),
+ BC7_MODE_PRIO_CODE(1, 3, 15),
+ BC7_MODE_PRIO_CODE(1, 1, 56),
+ BC7_MODE_PRIO_CODE(3, 0, 6),
+ BC7_MODE_PRIO_CODE(3, 0, 2),
+ BC7_MODE_PRIO_CODE(1, 1, 32),
+ BC7_MODE_PRIO_CODE(4, 1, 10),
+ BC7_MODE_PRIO_CODE(1, 2, 8),
+ BC7_MODE_PRIO_CODE(2, 1, 9),
+ BC7_MODE_PRIO_CODE(1, 2, 18),
+ BC7_MODE_PRIO_CODE(4, 1, 15),
+ BC7_MODE_PRIO_CODE(4, 0, 6),
+ BC7_MODE_PRIO_CODE(3, 1, 29),
+ BC7_MODE_PRIO_CODE(2, 1, 25),
+ BC7_MODE_PRIO_CODE(3, 4, 31),
+ BC7_MODE_PRIO_CODE(3, 3, 13),
+ BC7_MODE_PRIO_CODE(4, 0, 0),
+ BC7_MODE_PRIO_CODE(3, 1, 19),
+ BC7_MODE_PRIO_CODE(4, 0, 12),
+ BC7_MODE_PRIO_CODE(4, 1, 1),
+ BC7_MODE_PRIO_CODE(4, 0, 2),
+ BC7_MODE_PRIO_CODE(1, 3, 2),
+ BC7_MODE_PRIO_CODE(1, 2, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 58),
+ BC7_MODE_PRIO_CODE(1, 3, 14),
+ BC7_MODE_PRIO_CODE(4, 1, 3),
+ BC7_MODE_PRIO_CODE(3, 1, 21),
+ BC7_MODE_PRIO_CODE(2, 2, 8),
+ BC7_MODE_PRIO_CODE(1, 2, 19),
+ BC7_MODE_PRIO_CODE(4, 1, 16),
+ BC7_MODE_PRIO_CODE(4, 1, 2),
+ BC7_MODE_PRIO_CODE(2, 2, 16),
+ BC7_MODE_PRIO_CODE(2, 2, 10),
+ BC7_MODE_PRIO_CODE(2, 1, 20),
+ BC7_MODE_PRIO_CODE(1, 2, 11),
+ BC7_MODE_PRIO_CODE(1, 1, 54),
+ BC7_MODE_PRIO_CODE(1, 1, 47),
+ BC7_MODE_PRIO_CODE(1, 3, 1),
+ BC7_MODE_PRIO_CODE(1, 2, 21),
+ BC7_MODE_PRIO_CODE(1, 2, 62),
+ BC7_MODE_PRIO_CODE(2, 2, 11),
+ BC7_MODE_PRIO_CODE(3, 1, 26),
+ BC7_MODE_PRIO_CODE(1, 1, 53),
+ BC7_MODE_PRIO_CODE(2, 1, 35),
+ BC7_MODE_PRIO_CODE(2, 2, 13),
+ BC7_MODE_PRIO_CODE(4, 1, 23),
+ BC7_MODE_PRIO_CODE(4, 1, 6),
+ BC7_MODE_PRIO_CODE(4, 1, 7),
+ BC7_MODE_PRIO_CODE(1, 2, 25),
+ BC7_MODE_PRIO_CODE(1, 1, 57),
+ BC7_MODE_PRIO_CODE(2, 1, 60),
+ BC7_MODE_PRIO_CODE(1, 2, 20),
+ BC7_MODE_PRIO_CODE(3, 1, 8),
+ BC7_MODE_PRIO_CODE(4, 1, 29),
+ BC7_MODE_PRIO_CODE(4, 1, 19),
+ BC7_MODE_PRIO_CODE(3, 2, 8),
+ BC7_MODE_PRIO_CODE(2, 4, 11),
+ BC7_MODE_PRIO_CODE(4, 1, 21),
+ BC7_MODE_PRIO_CODE(3, 2, 10),
+ BC7_MODE_PRIO_CODE(2, 1, 61),
+ BC7_MODE_PRIO_CODE(2, 1, 30),
+ BC7_MODE_PRIO_CODE(3, 1, 12),
+ BC7_MODE_PRIO_CODE(3, 1, 11),
+ BC7_MODE_PRIO_CODE(2, 1, 63),
+ BC7_MODE_PRIO_CODE(2, 3, 1),
+ BC7_MODE_PRIO_CODE(2, 1, 28),
+ BC7_MODE_PRIO_CODE(2, 1, 62),
+ BC7_MODE_PRIO_CODE(3, 2, 13),
+ BC7_MODE_PRIO_CODE(2, 2, 63),
+ BC7_MODE_PRIO_CODE(2, 1, 33),
+ BC7_MODE_PRIO_CODE(2, 4, 10),
+ BC7_MODE_PRIO_CODE(3, 1, 18),
+ BC7_MODE_PRIO_CODE(2, 5, 30),
+ BC7_MODE_PRIO_CODE(3, 1, 5),
+ BC7_MODE_PRIO_CODE(2, 2, 17),
+ BC7_MODE_PRIO_CODE(1, 1, 55),
+ BC7_MODE_PRIO_CODE(3, 1, 17),
+ BC7_MODE_PRIO_CODE(2, 3, 2),
+ BC7_MODE_PRIO_CODE(1, 4, 21),
+ BC7_MODE_PRIO_CODE(3, 2, 11),
+ BC7_MODE_PRIO_CODE(4, 1, 11),
+ BC7_MODE_PRIO_CODE(2, 1, 27),
+ BC7_MODE_PRIO_CODE(1, 2, 59),
+ BC7_MODE_PRIO_CODE(4, 1, 26),
+ BC7_MODE_PRIO_CODE(3, 1, 9),
+ BC7_MODE_PRIO_CODE(2, 3, 14),
+ BC7_MODE_PRIO_CODE(3, 1, 4),
+ BC7_MODE_PRIO_CODE(3, 1, 24),
+ BC7_MODE_PRIO_CODE(3, 1, 25),
+ BC7_MODE_PRIO_CODE(3, 3, 0),
+ BC7_MODE_PRIO_CODE(3, 4, 11),
+ BC7_MODE_PRIO_CODE(4, 1, 12),
+ BC7_MODE_PRIO_CODE(2, 1, 32),
+ BC7_MODE_PRIO_CODE(2, 3, 15),
+ BC7_MODE_PRIO_CODE(4, 2, 10),
+ BC7_MODE_PRIO_CODE(1, 2, 60),
+ BC7_MODE_PRIO_CODE(1, 2, 32),
+ BC7_MODE_PRIO_CODE(1, 1, 40),
+ BC7_MODE_PRIO_CODE(4, 1, 18),
+ BC7_MODE_PRIO_CODE(2, 1, 59),
+ BC7_MODE_PRIO_CODE(4, 1, 5),
+ BC7_MODE_PRIO_CODE(3, 1, 22),
+ BC7_MODE_PRIO_CODE(3, 2, 16),
+ BC7_MODE_PRIO_CODE(3, 1, 20),
+ BC7_MODE_PRIO_CODE(4, 1, 4),
+ BC7_MODE_PRIO_CODE(2, 1, 31),
+ BC7_MODE_PRIO_CODE(4, 1, 17),
+ BC7_MODE_PRIO_CODE(1, 2, 24),
+ BC7_MODE_PRIO_CODE(4, 1, 24),
+ BC7_MODE_PRIO_CODE(2, 1, 58),
+ BC7_MODE_PRIO_CODE(4, 2, 8),
+ BC7_MODE_PRIO_CODE(1, 2, 22),
+ BC7_MODE_PRIO_CODE(1, 2, 23),
+ BC7_MODE_PRIO_CODE(1, 3, 10),
+ BC7_MODE_PRIO_CODE(1, 1, 41),
+ BC7_MODE_PRIO_CODE(2, 2, 18),
+ BC7_MODE_PRIO_CODE(4, 1, 25),
+ BC7_MODE_PRIO_CODE(3, 1, 61),
+ BC7_MODE_PRIO_CODE(1, 3, 29),
+ BC7_MODE_PRIO_CODE(1, 2, 57),
+ BC7_MODE_PRIO_CODE(2, 2, 19),
+ BC7_MODE_PRIO_CODE(1, 2, 53),
+ BC7_MODE_PRIO_CODE(1, 2, 55),
+ BC7_MODE_PRIO_CODE(3, 2, 63),
+ BC7_MODE_PRIO_CODE(3, 1, 60),
+ BC7_MODE_PRIO_CODE(4, 1, 8),
+ BC7_MODE_PRIO_CODE(2, 1, 56),
+ BC7_MODE_PRIO_CODE(3, 1, 35),
+ BC7_MODE_PRIO_CODE(4, 4, 31),
+ BC7_MODE_PRIO_CODE(4, 1, 9),
+ BC7_MODE_PRIO_CODE(1, 1, 46),
+ BC7_MODE_PRIO_CODE(1, 2, 58),
+ BC7_MODE_PRIO_CODE(2, 3, 29),
+ BC7_MODE_PRIO_CODE(1, 1, 45),
+ BC7_MODE_PRIO_CODE(4, 2, 13),
+ BC7_MODE_PRIO_CODE(1, 1, 42),
+ BC7_MODE_PRIO_CODE(1, 3, 3),
+ BC7_MODE_PRIO_CODE(4, 2, 11),
+ BC7_MODE_PRIO_CODE(3, 1, 63),
+ BC7_MODE_PRIO_CODE(3, 1, 30),
+ BC7_MODE_PRIO_CODE(1, 1, 36),
+ BC7_MODE_PRIO_CODE(3, 1, 62),
+ BC7_MODE_PRIO_CODE(1, 1, 43),
+ BC7_MODE_PRIO_CODE(1, 3, 21),
+ BC7_MODE_PRIO_CODE(3, 2, 17),
+ BC7_MODE_PRIO_CODE(1, 2, 14),
+ BC7_MODE_PRIO_CODE(1, 1, 48),
+ BC7_MODE_PRIO_CODE(2, 1, 57),
+ BC7_MODE_PRIO_CODE(2, 1, 52),
+ BC7_MODE_PRIO_CODE(1, 2, 61),
+ BC7_MODE_PRIO_CODE(3, 1, 33),
+ BC7_MODE_PRIO_CODE(1, 1, 51),
+ BC7_MODE_PRIO_CODE(4, 1, 20),
+ BC7_MODE_PRIO_CODE(1, 3, 8),
+ BC7_MODE_PRIO_CODE(4, 1, 22),
+ BC7_MODE_PRIO_CODE(1, 3, 19),
+ BC7_MODE_PRIO_CODE(1, 2, 36),
+ BC7_MODE_PRIO_CODE(2, 5, 10),
+ BC7_MODE_PRIO_CODE(3, 1, 28),
+ BC7_MODE_PRIO_CODE(2, 2, 14),
+ BC7_MODE_PRIO_CODE(1, 1, 49),
+ BC7_MODE_PRIO_CODE(1, 2, 33),
+ BC7_MODE_PRIO_CODE(1, 3, 9),
+ BC7_MODE_PRIO_CODE(2, 2, 20),
+ BC7_MODE_PRIO_CODE(1, 3, 26),
+ BC7_MODE_PRIO_CODE(2, 1, 53),
+ BC7_MODE_PRIO_CODE(4, 3, 13),
+ BC7_MODE_PRIO_CODE(2, 2, 21),
+ BC7_MODE_PRIO_CODE(3, 4, 10),
+ BC7_MODE_PRIO_CODE(4, 1, 60),
+ BC7_MODE_PRIO_CODE(2, 1, 54),
+ BC7_MODE_PRIO_CODE(1, 2, 29),
+ BC7_MODE_PRIO_CODE(2, 1, 47),
+ BC7_MODE_PRIO_CODE(1, 2, 52),
+ BC7_MODE_PRIO_CODE(3, 1, 32),
+ BC7_MODE_PRIO_CODE(1, 2, 40),
+ BC7_MODE_PRIO_CODE(1, 2, 31),
+ BC7_MODE_PRIO_CODE(3, 1, 27),
+ BC7_MODE_PRIO_CODE(3, 2, 18),
+ BC7_MODE_PRIO_CODE(2, 3, 10),
+ BC7_MODE_PRIO_CODE(2, 1, 55),
+ BC7_MODE_PRIO_CODE(4, 1, 61),
+ BC7_MODE_PRIO_CODE(3, 2, 14),
+ BC7_MODE_PRIO_CODE(3, 1, 31),
+ BC7_MODE_PRIO_CODE(1, 2, 34),
+ BC7_MODE_PRIO_CODE(3, 2, 19),
+ BC7_MODE_PRIO_CODE(2, 3, 21),
+ BC7_MODE_PRIO_CODE(2, 4, 30),
+ BC7_MODE_PRIO_CODE(1, 2, 15),
+ BC7_MODE_PRIO_CODE(2, 3, 26),
+ BC7_MODE_PRIO_CODE(1, 2, 28),
+ BC7_MODE_PRIO_CODE(4, 2, 16),
+ BC7_MODE_PRIO_CODE(2, 2, 15),
+ BC7_MODE_PRIO_CODE(2, 1, 40),
+ BC7_MODE_PRIO_CODE(2, 2, 22),
+ BC7_MODE_PRIO_CODE(4, 1, 33),
+ BC7_MODE_PRIO_CODE(1, 3, 7),
+ BC7_MODE_PRIO_CODE(1, 1, 50),
+ BC7_MODE_PRIO_CODE(2, 1, 41),
+ BC7_MODE_PRIO_CODE(1, 2, 9),
+ BC7_MODE_PRIO_CODE(1, 2, 39),
+ BC7_MODE_PRIO_CODE(2, 2, 25),
+ BC7_MODE_PRIO_CODE(1, 3, 6),
+ BC7_MODE_PRIO_CODE(3, 2, 21),
+ BC7_MODE_PRIO_CODE(1, 1, 37),
+ BC7_MODE_PRIO_CODE(2, 2, 58),
+ BC7_MODE_PRIO_CODE(3, 3, 29),
+ BC7_MODE_PRIO_CODE(4, 1, 62),
+ BC7_MODE_PRIO_CODE(1, 2, 35),
+ BC7_MODE_PRIO_CODE(3, 1, 59),
+ BC7_MODE_PRIO_CODE(4, 1, 28),
+ BC7_MODE_PRIO_CODE(1, 3, 23),
+ BC7_MODE_PRIO_CODE(4, 1, 30),
+ BC7_MODE_PRIO_CODE(2, 1, 45),
+ BC7_MODE_PRIO_CODE(1, 3, 16),
+ BC7_MODE_PRIO_CODE(4, 1, 35),
+ BC7_MODE_PRIO_CODE(2, 1, 46),
+ BC7_MODE_PRIO_CODE(1, 2, 38),
+ BC7_MODE_PRIO_CODE(4, 1, 63),
+ BC7_MODE_PRIO_CODE(1, 3, 22),
+ BC7_MODE_PRIO_CODE(1, 2, 30),
+ BC7_MODE_PRIO_CODE(2, 2, 31),
+ BC7_MODE_PRIO_CODE(1, 3, 20),
+ BC7_MODE_PRIO_CODE(2, 2, 9),
+ BC7_MODE_PRIO_CODE(2, 3, 3),
+ BC7_MODE_PRIO_CODE(3, 2, 22),
+ BC7_MODE_PRIO_CODE(2, 1, 42),
+ BC7_MODE_PRIO_CODE(2, 2, 62),
+ BC7_MODE_PRIO_CODE(3, 2, 20),
+ BC7_MODE_PRIO_CODE(4, 1, 32),
+ BC7_MODE_PRIO_CODE(2, 1, 43),
+ BC7_MODE_PRIO_CODE(3, 1, 58),
+ BC7_MODE_PRIO_CODE(2, 3, 19),
+ BC7_MODE_PRIO_CODE(2, 2, 32),
+ BC7_MODE_PRIO_CODE(2, 2, 57),
+ BC7_MODE_PRIO_CODE(4, 1, 27),
+ BC7_MODE_PRIO_CODE(2, 2, 34),
+ BC7_MODE_PRIO_CODE(4, 1, 58),
+ BC7_MODE_PRIO_CODE(1, 2, 12),
+ BC7_MODE_PRIO_CODE(2, 2, 12),
+ BC7_MODE_PRIO_CODE(1, 4, 20),
+ BC7_MODE_PRIO_CODE(1, 2, 56),
+ BC7_MODE_PRIO_CODE(2, 1, 48),
+ BC7_MODE_PRIO_CODE(2, 1, 36),
+ BC7_MODE_PRIO_CODE(4, 3, 0),
+ BC7_MODE_PRIO_CODE(2, 2, 24),
+ BC7_MODE_PRIO_CODE(3, 1, 40),
+ BC7_MODE_PRIO_CODE(3, 2, 9),
+ BC7_MODE_PRIO_CODE(3, 1, 56),
+ BC7_MODE_PRIO_CODE(3, 2, 15),
+ BC7_MODE_PRIO_CODE(2, 3, 7),
+ BC7_MODE_PRIO_CODE(1, 2, 37),
+ BC7_MODE_PRIO_CODE(2, 2, 35),
+ BC7_MODE_PRIO_CODE(3, 1, 52),
+ BC7_MODE_PRIO_CODE(2, 3, 6),
+ BC7_MODE_PRIO_CODE(3, 1, 57),
+ BC7_MODE_PRIO_CODE(4, 1, 31),
+ BC7_MODE_PRIO_CODE(4, 4, 11),
+ BC7_MODE_PRIO_CODE(1, 1, 44),
+ BC7_MODE_PRIO_CODE(3, 3, 1),
+ BC7_MODE_PRIO_CODE(1, 2, 54),
+ BC7_MODE_PRIO_CODE(2, 1, 50),
+ BC7_MODE_PRIO_CODE(3, 3, 15),
+ BC7_MODE_PRIO_CODE(2, 1, 51),
+ BC7_MODE_PRIO_CODE(1, 2, 27),
+ BC7_MODE_PRIO_CODE(3, 4, 30),
+ BC7_MODE_PRIO_CODE(3, 3, 14),
+ BC7_MODE_PRIO_CODE(3, 2, 25),
+ BC7_MODE_PRIO_CODE(2, 3, 9),
+ BC7_MODE_PRIO_CODE(2, 2, 60),
+ BC7_MODE_PRIO_CODE(2, 1, 49),
+ BC7_MODE_PRIO_CODE(1, 2, 6),
+ BC7_MODE_PRIO_CODE(2, 2, 23),
+ BC7_MODE_PRIO_CODE(3, 2, 12),
+ BC7_MODE_PRIO_CODE(3, 3, 2),
+ BC7_MODE_PRIO_CODE(4, 2, 14),
+ BC7_MODE_PRIO_CODE(2, 3, 16),
+ BC7_MODE_PRIO_CODE(1, 2, 51),
+ BC7_MODE_PRIO_CODE(1, 3, 11),
+ BC7_MODE_PRIO_CODE(1, 2, 4),
+ BC7_MODE_PRIO_CODE(4, 2, 17),
+ BC7_MODE_PRIO_CODE(1, 3, 12),
+ BC7_MODE_PRIO_CODE(3, 1, 43),
+ BC7_MODE_PRIO_CODE(2, 4, 21),
+ BC7_MODE_PRIO_CODE(4, 1, 56),
+ BC7_MODE_PRIO_CODE(3, 1, 53),
+ BC7_MODE_PRIO_CODE(3, 1, 47),
+ BC7_MODE_PRIO_CODE(2, 2, 61),
+ BC7_MODE_PRIO_CODE(2, 2, 55),
+ BC7_MODE_PRIO_CODE(2, 3, 23),
+ BC7_MODE_PRIO_CODE(3, 1, 42),
+ BC7_MODE_PRIO_CODE(2, 3, 8),
+ BC7_MODE_PRIO_CODE(3, 1, 55),
+ BC7_MODE_PRIO_CODE(4, 1, 59),
+ BC7_MODE_PRIO_CODE(3, 2, 60),
+ BC7_MODE_PRIO_CODE(2, 3, 20),
+ BC7_MODE_PRIO_CODE(3, 2, 57),
+ BC7_MODE_PRIO_CODE(3, 1, 54),
+ BC7_MODE_PRIO_CODE(3, 2, 35),
+ BC7_MODE_PRIO_CODE(1, 1, 38),
+ BC7_MODE_PRIO_CODE(1, 2, 5),
+ BC7_MODE_PRIO_CODE(2, 2, 5),
+ BC7_MODE_PRIO_CODE(2, 2, 6),
+ BC7_MODE_PRIO_CODE(3, 2, 23),
+ BC7_MODE_PRIO_CODE(2, 2, 59),
+ BC7_MODE_PRIO_CODE(3, 2, 5),
+ BC7_MODE_PRIO_CODE(4, 1, 42),
+ BC7_MODE_PRIO_CODE(2, 1, 37),
+ BC7_MODE_PRIO_CODE(3, 2, 59),
+ BC7_MODE_PRIO_CODE(4, 2, 9),
+ BC7_MODE_PRIO_CODE(2, 2, 4),
+ BC7_MODE_PRIO_CODE(2, 2, 56),
+ BC7_MODE_PRIO_CODE(1, 3, 33),
+ BC7_MODE_PRIO_CODE(2, 3, 33),
+ BC7_MODE_PRIO_CODE(2, 3, 22),
+ BC7_MODE_PRIO_CODE(2, 3, 12),
+ BC7_MODE_PRIO_CODE(4, 1, 40),
+ BC7_MODE_PRIO_CODE(3, 2, 34),
+ BC7_MODE_PRIO_CODE(3, 2, 56),
+ BC7_MODE_PRIO_CODE(3, 3, 26),
+ BC7_MODE_PRIO_CODE(1, 2, 7),
+ BC7_MODE_PRIO_CODE(2, 2, 7),
+ BC7_MODE_PRIO_CODE(3, 2, 7),
+ BC7_MODE_PRIO_CODE(2, 2, 36),
+ BC7_MODE_PRIO_CODE(3, 2, 36),
+ BC7_MODE_PRIO_CODE(4, 1, 52),
+ BC7_MODE_PRIO_CODE(2, 2, 33),
+ BC7_MODE_PRIO_CODE(3, 1, 45),
+ BC7_MODE_PRIO_CODE(1, 3, 4),
+ BC7_MODE_PRIO_CODE(4, 2, 15),
+ BC7_MODE_PRIO_CODE(3, 1, 41),
+ BC7_MODE_PRIO_CODE(2, 2, 54),
+ BC7_MODE_PRIO_CODE(3, 2, 4),
+ BC7_MODE_PRIO_CODE(2, 5, 20),
+ BC7_MODE_PRIO_CODE(3, 2, 62),
+ BC7_MODE_PRIO_CODE(1, 3, 35),
+ BC7_MODE_PRIO_CODE(4, 1, 41),
+ BC7_MODE_PRIO_CODE(3, 2, 6),
+ BC7_MODE_PRIO_CODE(2, 2, 52),
+ BC7_MODE_PRIO_CODE(3, 1, 46),
+ BC7_MODE_PRIO_CODE(1, 1, 39),
+ BC7_MODE_PRIO_CODE(3, 2, 33),
+ BC7_MODE_PRIO_CODE(1, 3, 5),
+ BC7_MODE_PRIO_CODE(3, 1, 48),
+ BC7_MODE_PRIO_CODE(3, 2, 24),
+ BC7_MODE_PRIO_CODE(3, 2, 32),
+ BC7_MODE_PRIO_CODE(3, 3, 33),
+ BC7_MODE_PRIO_CODE(1, 3, 17),
+ BC7_MODE_PRIO_CODE(4, 1, 57),
+ BC7_MODE_PRIO_CODE(1, 3, 25),
+ BC7_MODE_PRIO_CODE(2, 3, 11),
+ BC7_MODE_PRIO_CODE(1, 3, 61),
+ BC7_MODE_PRIO_CODE(4, 1, 43),
+ BC7_MODE_PRIO_CODE(1, 3, 60),
+ BC7_MODE_PRIO_CODE(2, 3, 60),
+ BC7_MODE_PRIO_CODE(2, 2, 28),
+ BC7_MODE_PRIO_CODE(3, 2, 28),
+ BC7_MODE_PRIO_CODE(4, 1, 55),
+ BC7_MODE_PRIO_CODE(2, 3, 5),
+ BC7_MODE_PRIO_CODE(3, 1, 51),
+ BC7_MODE_PRIO_CODE(4, 1, 53),
+ BC7_MODE_PRIO_CODE(4, 1, 54),
+ BC7_MODE_PRIO_CODE(1, 3, 32),
+ BC7_MODE_PRIO_CODE(1, 3, 24),
+ BC7_MODE_PRIO_CODE(4, 1, 47),
+ BC7_MODE_PRIO_CODE(2, 2, 51),
+ BC7_MODE_PRIO_CODE(4, 2, 12),
+ BC7_MODE_PRIO_CODE(2, 3, 61),
+ BC7_MODE_PRIO_CODE(3, 4, 21),
+ BC7_MODE_PRIO_CODE(2, 3, 32),
+ BC7_MODE_PRIO_CODE(3, 1, 36),
+ BC7_MODE_PRIO_CODE(3, 1, 49),
+ BC7_MODE_PRIO_CODE(1, 3, 18),
+ BC7_MODE_PRIO_CODE(4, 3, 29),
+ BC7_MODE_PRIO_CODE(4, 2, 63),
+ BC7_MODE_PRIO_CODE(2, 2, 27),
+ BC7_MODE_PRIO_CODE(2, 3, 17),
+ BC7_MODE_PRIO_CODE(3, 1, 50),
+ BC7_MODE_PRIO_CODE(3, 2, 61),
+ BC7_MODE_PRIO_CODE(1, 3, 63),
+ BC7_MODE_PRIO_CODE(2, 3, 63),
+ BC7_MODE_PRIO_CODE(3, 2, 27),
+ BC7_MODE_PRIO_CODE(4, 1, 46),
+ BC7_MODE_PRIO_CODE(1, 2, 26),
+ BC7_MODE_PRIO_CODE(2, 3, 4),
+ BC7_MODE_PRIO_CODE(2, 3, 18),
+ BC7_MODE_PRIO_CODE(4, 1, 45),
+ BC7_MODE_PRIO_CODE(4, 1, 51),
+ BC7_MODE_PRIO_CODE(1, 2, 1),
+ BC7_MODE_PRIO_CODE(4, 2, 6),
+ BC7_MODE_PRIO_CODE(1, 3, 62),
+ BC7_MODE_PRIO_CODE(2, 3, 62),
+ BC7_MODE_PRIO_CODE(2, 1, 44),
+ BC7_MODE_PRIO_CODE(4, 1, 49),
+ BC7_MODE_PRIO_CODE(3, 5, 30),
+ BC7_MODE_PRIO_CODE(2, 3, 25),
+ BC7_MODE_PRIO_CODE(1, 2, 49),
+ BC7_MODE_PRIO_CODE(4, 1, 48),
+ BC7_MODE_PRIO_CODE(3, 3, 3),
+ BC7_MODE_PRIO_CODE(3, 1, 37),
+ BC7_MODE_PRIO_CODE(1, 2, 0),
+ BC7_MODE_PRIO_CODE(2, 2, 0),
+ BC7_MODE_PRIO_CODE(2, 3, 35),
+ BC7_MODE_PRIO_CODE(2, 3, 24),
+ BC7_MODE_PRIO_CODE(2, 2, 53),
+ BC7_MODE_PRIO_CODE(3, 2, 53),
+ BC7_MODE_PRIO_CODE(4, 2, 59),
+ BC7_MODE_PRIO_CODE(3, 3, 10),
+ BC7_MODE_PRIO_CODE(1, 2, 3),
+ BC7_MODE_PRIO_CODE(2, 2, 3),
+ BC7_MODE_PRIO_CODE(3, 2, 3),
+ BC7_MODE_PRIO_CODE(3, 3, 32),
+ BC7_MODE_PRIO_CODE(1, 2, 46),
+ BC7_MODE_PRIO_CODE(4, 2, 62),
+ BC7_MODE_PRIO_CODE(4, 2, 60),
+ BC7_MODE_PRIO_CODE(2, 2, 30),
+ BC7_MODE_PRIO_CODE(1, 3, 47),
+ BC7_MODE_PRIO_CODE(4, 2, 36),
+ BC7_MODE_PRIO_CODE(2, 2, 1),
+ BC7_MODE_PRIO_CODE(3, 2, 1),
+ BC7_MODE_PRIO_CODE(3, 2, 58),
+ BC7_MODE_PRIO_CODE(4, 1, 36),
+ BC7_MODE_PRIO_CODE(3, 3, 16),
+ BC7_MODE_PRIO_CODE(2, 3, 47),
+ BC7_MODE_PRIO_CODE(2, 2, 39),
+ BC7_MODE_PRIO_CODE(4, 1, 50),
+ BC7_MODE_PRIO_CODE(4, 2, 21),
+ BC7_MODE_PRIO_CODE(2, 1, 38),
+ BC7_MODE_PRIO_CODE(4, 4, 21),
+ BC7_MODE_PRIO_CODE(3, 3, 23),
+ BC7_MODE_PRIO_CODE(1, 2, 43),
+ BC7_MODE_PRIO_CODE(1, 2, 41),
+ BC7_MODE_PRIO_CODE(2, 2, 41),
+ BC7_MODE_PRIO_CODE(1, 3, 28),
+ BC7_MODE_PRIO_CODE(4, 2, 35),
+ BC7_MODE_PRIO_CODE(4, 3, 26),
+ BC7_MODE_PRIO_CODE(1, 3, 59),
+ BC7_MODE_PRIO_CODE(1, 1, 34),
+ BC7_MODE_PRIO_CODE(2, 2, 29),
+ BC7_MODE_PRIO_CODE(3, 2, 29),
+ BC7_MODE_PRIO_CODE(3, 2, 52),
+ BC7_MODE_PRIO_CODE(1, 3, 58),
+ BC7_MODE_PRIO_CODE(4, 5, 30),
+ BC7_MODE_PRIO_CODE(4, 3, 33),
+ BC7_MODE_PRIO_CODE(3, 2, 30),
+ BC7_MODE_PRIO_CODE(1, 2, 44),
+ BC7_MODE_PRIO_CODE(1, 2, 2),
+ BC7_MODE_PRIO_CODE(2, 2, 2),
+ BC7_MODE_PRIO_CODE(3, 2, 2),
+ BC7_MODE_PRIO_CODE(1, 2, 47),
+ BC7_MODE_PRIO_CODE(2, 2, 47),
+ BC7_MODE_PRIO_CODE(3, 3, 7),
+ BC7_MODE_PRIO_CODE(2, 3, 58),
+ BC7_MODE_PRIO_CODE(3, 2, 55),
+ BC7_MODE_PRIO_CODE(4, 2, 4),
+ BC7_MODE_PRIO_CODE(3, 2, 0),
+ BC7_MODE_PRIO_CODE(1, 3, 31),
+ BC7_MODE_PRIO_CODE(3, 2, 31),
+ BC7_MODE_PRIO_CODE(3, 3, 12),
+ BC7_MODE_PRIO_CODE(3, 2, 51),
+ BC7_MODE_PRIO_CODE(2, 1, 39),
+ BC7_MODE_PRIO_CODE(1, 3, 48),
+ BC7_MODE_PRIO_CODE(1, 3, 27),
+ BC7_MODE_PRIO_CODE(4, 2, 25),
+ BC7_MODE_PRIO_CODE(4, 2, 22),
+ BC7_MODE_PRIO_CODE(4, 2, 18),
+ BC7_MODE_PRIO_CODE(2, 2, 44),
+ BC7_MODE_PRIO_CODE(2, 3, 28),
+ BC7_MODE_PRIO_CODE(3, 1, 44),
+ BC7_MODE_PRIO_CODE(2, 1, 34),
+ BC7_MODE_PRIO_CODE(3, 5, 10),
+ BC7_MODE_PRIO_CODE(4, 4, 10),
+ BC7_MODE_PRIO_CODE(3, 2, 54),
+ BC7_MODE_PRIO_CODE(4, 2, 7),
+ BC7_MODE_PRIO_CODE(4, 2, 20),
+ BC7_MODE_PRIO_CODE(2, 2, 37),
+ BC7_MODE_PRIO_CODE(3, 3, 6),
+ BC7_MODE_PRIO_CODE(2, 2, 43),
+ BC7_MODE_PRIO_CODE(2, 3, 59),
+ BC7_MODE_PRIO_CODE(1, 3, 30),
+ BC7_MODE_PRIO_CODE(4, 2, 5),
+ BC7_MODE_PRIO_CODE(4, 2, 61),
+ BC7_MODE_PRIO_CODE(4, 2, 19),
+ BC7_MODE_PRIO_CODE(4, 2, 23),
+ BC7_MODE_PRIO_CODE(3, 2, 39),
+ BC7_MODE_PRIO_CODE(2, 3, 27),
+ BC7_MODE_PRIO_CODE(1, 3, 57),
+ BC7_MODE_PRIO_CODE(2, 3, 57),
+ BC7_MODE_PRIO_CODE(3, 3, 21),
+ BC7_MODE_PRIO_CODE(3, 3, 11),
+ BC7_MODE_PRIO_CODE(3, 1, 39),
+ BC7_MODE_PRIO_CODE(2, 3, 48),
+ BC7_MODE_PRIO_CODE(4, 1, 37),
+ BC7_MODE_PRIO_CODE(3, 3, 19),
+ BC7_MODE_PRIO_CODE(3, 1, 38),
+ BC7_MODE_PRIO_CODE(2, 2, 38),
+ BC7_MODE_PRIO_CODE(2, 3, 31),
+ BC7_MODE_PRIO_CODE(2, 2, 40),
+ BC7_MODE_PRIO_CODE(3, 2, 40),
+ BC7_MODE_PRIO_CODE(1, 3, 56),
+ BC7_MODE_PRIO_CODE(4, 5, 10),
+ BC7_MODE_PRIO_CODE(2, 3, 56),
+ BC7_MODE_PRIO_CODE(4, 1, 38),
+ BC7_MODE_PRIO_CODE(1, 3, 41),
+ BC7_MODE_PRIO_CODE(1, 3, 50),
+ BC7_MODE_PRIO_CODE(2, 3, 30),
+ BC7_MODE_PRIO_CODE(3, 3, 8),
+ BC7_MODE_PRIO_CODE(4, 2, 24),
+ BC7_MODE_PRIO_CODE(3, 3, 9),
+ BC7_MODE_PRIO_CODE(3, 1, 34),
+ BC7_MODE_PRIO_CODE(4, 1, 34),
+ BC7_MODE_PRIO_CODE(2, 3, 50),
+ BC7_MODE_PRIO_CODE(1, 3, 43),
+ BC7_MODE_PRIO_CODE(1, 3, 40),
+ BC7_MODE_PRIO_CODE(1, 3, 51),
+ BC7_MODE_PRIO_CODE(2, 3, 51),
+ BC7_MODE_PRIO_CODE(1, 3, 45),
+ BC7_MODE_PRIO_CODE(2, 3, 45),
+ BC7_MODE_PRIO_CODE(2, 3, 40),
+ BC7_MODE_PRIO_CODE(3, 3, 20),
+ BC7_MODE_PRIO_CODE(2, 3, 41),
+ BC7_MODE_PRIO_CODE(3, 2, 44),
+ BC7_MODE_PRIO_CODE(2, 3, 43),
+ BC7_MODE_PRIO_CODE(4, 2, 57),
+ BC7_MODE_PRIO_CODE(2, 4, 20),
+ BC7_MODE_PRIO_CODE(3, 3, 4),
+ BC7_MODE_PRIO_CODE(3, 3, 61),
+ BC7_MODE_PRIO_CODE(1, 3, 46),
+ BC7_MODE_PRIO_CODE(2, 3, 46),
+ BC7_MODE_PRIO_CODE(4, 3, 1),
+ BC7_MODE_PRIO_CODE(3, 3, 22),
+ BC7_MODE_PRIO_CODE(1, 3, 49),
+ BC7_MODE_PRIO_CODE(2, 3, 49),
+ BC7_MODE_PRIO_CODE(4, 3, 15),
+ BC7_MODE_PRIO_CODE(3, 3, 5),
+ BC7_MODE_PRIO_CODE(4, 1, 44),
+ BC7_MODE_PRIO_CODE(4, 3, 14),
+ BC7_MODE_PRIO_CODE(4, 3, 2),
+ BC7_MODE_PRIO_CODE(3, 3, 60),
+ BC7_MODE_PRIO_CODE(1, 3, 53),
+ BC7_MODE_PRIO_CODE(2, 3, 53),
+ BC7_MODE_PRIO_CODE(4, 3, 32),
+ BC7_MODE_PRIO_CODE(3, 3, 24),
+ BC7_MODE_PRIO_CODE(3, 3, 63),
+ BC7_MODE_PRIO_CODE(3, 2, 37),
+ BC7_MODE_PRIO_CODE(1, 3, 52),
+ BC7_MODE_PRIO_CODE(2, 3, 52),
+ BC7_MODE_PRIO_CODE(4, 4, 30),
+ BC7_MODE_PRIO_CODE(4, 2, 34),
+ BC7_MODE_PRIO_CODE(1, 3, 54),
+ BC7_MODE_PRIO_CODE(3, 3, 62),
+ BC7_MODE_PRIO_CODE(3, 3, 18),
+ BC7_MODE_PRIO_CODE(3, 2, 41),
+ BC7_MODE_PRIO_CODE(4, 2, 58),
+ BC7_MODE_PRIO_CODE(1, 3, 42),
+ BC7_MODE_PRIO_CODE(2, 3, 42),
+ BC7_MODE_PRIO_CODE(4, 2, 0),
+ BC7_MODE_PRIO_CODE(4, 2, 55),
+ BC7_MODE_PRIO_CODE(2, 3, 54),
+ BC7_MODE_PRIO_CODE(3, 2, 47),
+ BC7_MODE_PRIO_CODE(4, 2, 53),
+ BC7_MODE_PRIO_CODE(3, 3, 25),
+ BC7_MODE_PRIO_CODE(3, 4, 20),
+ BC7_MODE_PRIO_CODE(4, 2, 33),
+ BC7_MODE_PRIO_CODE(1, 3, 55),
+ BC7_MODE_PRIO_CODE(2, 3, 55),
+ BC7_MODE_PRIO_CODE(4, 2, 32),
+ BC7_MODE_PRIO_CODE(3, 2, 43),
+ BC7_MODE_PRIO_CODE(3, 3, 17),
+ BC7_MODE_PRIO_CODE(3, 5, 20),
+ BC7_MODE_PRIO_CODE(4, 5, 20),
+ BC7_MODE_PRIO_CODE(1, 3, 36),
+ BC7_MODE_PRIO_CODE(2, 3, 36),
+ BC7_MODE_PRIO_CODE(4, 2, 54),
+ BC7_MODE_PRIO_CODE(2, 2, 49),
+ BC7_MODE_PRIO_CODE(3, 2, 49),
+ BC7_MODE_PRIO_CODE(4, 1, 39),
+ BC7_MODE_PRIO_CODE(4, 2, 3),
+ BC7_MODE_PRIO_CODE(3, 3, 35),
+ BC7_MODE_PRIO_CODE(4, 2, 52),
+ BC7_MODE_PRIO_CODE(4, 2, 1),
+ BC7_MODE_PRIO_CODE(1, 2, 50),
+ BC7_MODE_PRIO_CODE(4, 2, 49),
+ BC7_MODE_PRIO_CODE(4, 3, 16),
+ BC7_MODE_PRIO_CODE(2, 2, 50),
+ BC7_MODE_PRIO_CODE(3, 2, 50),
+ BC7_MODE_PRIO_CODE(4, 2, 31),
+ BC7_MODE_PRIO_CODE(4, 3, 3),
+ BC7_MODE_PRIO_CODE(1, 2, 48),
+ BC7_MODE_PRIO_CODE(2, 2, 48),
+ BC7_MODE_PRIO_CODE(3, 2, 48),
+ BC7_MODE_PRIO_CODE(3, 3, 28),
+ BC7_MODE_PRIO_CODE(4, 3, 9),
+ BC7_MODE_PRIO_CODE(1, 3, 38),
+ BC7_MODE_PRIO_CODE(4, 3, 10),
+ BC7_MODE_PRIO_CODE(3, 3, 31),
+ BC7_MODE_PRIO_CODE(4, 2, 51),
+ BC7_MODE_PRIO_CODE(1, 3, 37),
+ BC7_MODE_PRIO_CODE(2, 3, 37),
+ BC7_MODE_PRIO_CODE(3, 3, 50),
+ BC7_MODE_PRIO_CODE(2, 3, 38),
+ BC7_MODE_PRIO_CODE(4, 3, 20),
+ BC7_MODE_PRIO_CODE(3, 3, 41),
+ BC7_MODE_PRIO_CODE(3, 3, 56),
+ BC7_MODE_PRIO_CODE(4, 3, 6),
+ BC7_MODE_PRIO_CODE(4, 3, 8),
+ BC7_MODE_PRIO_CODE(4, 2, 37),
+ BC7_MODE_PRIO_CODE(3, 3, 58),
+ BC7_MODE_PRIO_CODE(3, 3, 59),
+ BC7_MODE_PRIO_CODE(4, 2, 56),
+ BC7_MODE_PRIO_CODE(1, 3, 39),
+ BC7_MODE_PRIO_CODE(2, 3, 39),
+ BC7_MODE_PRIO_CODE(4, 2, 43),
+ BC7_MODE_PRIO_CODE(1, 3, 44),
+ BC7_MODE_PRIO_CODE(2, 3, 44),
+ BC7_MODE_PRIO_CODE(4, 3, 7),
+ BC7_MODE_PRIO_CODE(3, 3, 27),
+ BC7_MODE_PRIO_CODE(4, 3, 23),
+ BC7_MODE_PRIO_CODE(3, 3, 45),
+ BC7_MODE_PRIO_CODE(4, 3, 22),
+ BC7_MODE_PRIO_CODE(3, 3, 30),
+ BC7_MODE_PRIO_CODE(3, 3, 48),
+ BC7_MODE_PRIO_CODE(3, 3, 51),
+ BC7_MODE_PRIO_CODE(1, 2, 42),
+ BC7_MODE_PRIO_CODE(2, 2, 42),
+ BC7_MODE_PRIO_CODE(3, 2, 42),
+ BC7_MODE_PRIO_CODE(4, 3, 19),
+ BC7_MODE_PRIO_CODE(4, 3, 21),
+ BC7_MODE_PRIO_CODE(2, 2, 46),
+ BC7_MODE_PRIO_CODE(3, 3, 36),
+ BC7_MODE_PRIO_CODE(4, 2, 28),
+ BC7_MODE_PRIO_CODE(3, 3, 49),
+ BC7_MODE_PRIO_CODE(3, 3, 53),
+ BC7_MODE_PRIO_CODE(3, 3, 55),
+ BC7_MODE_PRIO_CODE(2, 2, 26),
+ BC7_MODE_PRIO_CODE(3, 2, 26),
+ BC7_MODE_PRIO_CODE(4, 2, 30),
+ BC7_MODE_PRIO_CODE(3, 3, 52),
+ BC7_MODE_PRIO_CODE(4, 2, 41),
+ BC7_MODE_PRIO_CODE(4, 2, 29),
+ BC7_MODE_PRIO_CODE(1, 3, 34),
+ BC7_MODE_PRIO_CODE(2, 3, 34),
+ BC7_MODE_PRIO_CODE(4, 2, 44),
+ BC7_MODE_PRIO_CODE(3, 3, 43),
+ BC7_MODE_PRIO_CODE(4, 2, 47),
+ BC7_MODE_PRIO_CODE(4, 3, 18),
+ BC7_MODE_PRIO_CODE(4, 3, 17),
+ BC7_MODE_PRIO_CODE(3, 3, 47),
+ BC7_MODE_PRIO_CODE(4, 3, 11),
+ BC7_MODE_PRIO_CODE(3, 3, 57),
+ BC7_MODE_PRIO_CODE(3, 2, 38),
+ BC7_MODE_PRIO_CODE(3, 3, 46),
+ BC7_MODE_PRIO_CODE(4, 3, 25),
+ BC7_MODE_PRIO_CODE(4, 3, 4),
+ BC7_MODE_PRIO_CODE(3, 3, 42),
+ BC7_MODE_PRIO_CODE(4, 3, 61),
+ BC7_MODE_PRIO_CODE(4, 2, 48),
+ BC7_MODE_PRIO_CODE(4, 3, 5),
+ BC7_MODE_PRIO_CODE(3, 3, 54),
+ BC7_MODE_PRIO_CODE(4, 4, 20),
+ BC7_MODE_PRIO_CODE(4, 3, 24),
+ BC7_MODE_PRIO_CODE(4, 3, 12),
+ BC7_MODE_PRIO_CODE(4, 2, 40),
+ BC7_MODE_PRIO_CODE(3, 3, 40),
+ BC7_MODE_PRIO_CODE(3, 3, 44),
+ BC7_MODE_PRIO_CODE(4, 3, 63),
+ BC7_MODE_PRIO_CODE(4, 3, 50),
+ BC7_MODE_PRIO_CODE(4, 2, 50),
+ BC7_MODE_PRIO_CODE(4, 3, 60),
+ BC7_MODE_PRIO_CODE(4, 2, 39),
+ BC7_MODE_PRIO_CODE(4, 3, 62),
+ BC7_MODE_PRIO_CODE(4, 3, 49),
+ BC7_MODE_PRIO_CODE(4, 3, 58),
+ BC7_MODE_PRIO_CODE(4, 3, 47),
+ BC7_MODE_PRIO_CODE(4, 3, 56),
+ BC7_MODE_PRIO_CODE(4, 2, 26),
+ BC7_MODE_PRIO_CODE(4, 2, 27),
+ BC7_MODE_PRIO_CODE(3, 3, 37),
+ BC7_MODE_PRIO_CODE(4, 3, 57),
+ BC7_MODE_PRIO_CODE(4, 3, 48),
+ BC7_MODE_PRIO_CODE(4, 3, 31),
+ BC7_MODE_PRIO_CODE(4, 3, 51),
+ BC7_MODE_PRIO_CODE(4, 3, 28),
+ BC7_MODE_PRIO_CODE(4, 3, 53),
+ BC7_MODE_PRIO_CODE(3, 3, 39),
+ BC7_MODE_PRIO_CODE(4, 3, 40),
+ BC7_MODE_PRIO_CODE(4, 3, 27),
+ BC7_MODE_PRIO_CODE(4, 2, 2),
+ BC7_MODE_PRIO_CODE(3, 3, 34),
+ BC7_MODE_PRIO_CODE(4, 2, 38),
+ BC7_MODE_PRIO_CODE(4, 3, 54),
+ BC7_MODE_PRIO_CODE(3, 3, 38),
+ BC7_MODE_PRIO_CODE(4, 3, 52),
+ BC7_MODE_PRIO_CODE(4, 3, 30),
+ BC7_MODE_PRIO_CODE(4, 3, 59),
+ BC7_MODE_PRIO_CODE(1, 2, 45),
+ BC7_MODE_PRIO_CODE(4, 3, 45),
+ BC7_MODE_PRIO_CODE(4, 2, 42),
+ BC7_MODE_PRIO_CODE(4, 3, 35),
+ BC7_MODE_PRIO_CODE(4, 3, 41),
+ BC7_MODE_PRIO_CODE(3, 2, 46),
+ BC7_MODE_PRIO_CODE(4, 2, 46),
+ BC7_MODE_PRIO_CODE(4, 3, 46),
+ BC7_MODE_PRIO_CODE(2, 2, 45),
+ BC7_MODE_PRIO_CODE(4, 3, 43),
+ BC7_MODE_PRIO_CODE(4, 3, 37),
+ BC7_MODE_PRIO_CODE(4, 3, 38),
+ BC7_MODE_PRIO_CODE(4, 3, 36),
+ BC7_MODE_PRIO_CODE(4, 3, 42),
+ BC7_MODE_PRIO_CODE(4, 3, 34),
+ BC7_MODE_PRIO_CODE(4, 3, 39),
+ BC7_MODE_PRIO_CODE(4, 3, 55),
+ BC7_MODE_PRIO_CODE(4, 3, 44),
+ BC7_MODE_PRIO_CODE(3, 2, 45),
+ BC7_MODE_PRIO_CODE(1, 4, 0),
+ BC7_MODE_PRIO_CODE(1, 4, 1),
+ BC7_MODE_PRIO_CODE(1, 5, 0),
+ BC7_MODE_PRIO_CODE(4, 2, 45),
+ BC7_MODE_PRIO_CODE(2, 4, 0),
+ BC7_MODE_PRIO_CODE(2, 4, 1),
+ BC7_MODE_PRIO_CODE(2, 5, 0),
+ BC7_MODE_PRIO_CODE(3, 4, 0),
+ BC7_MODE_PRIO_CODE(3, 4, 1),
+ BC7_MODE_PRIO_CODE(3, 5, 0),
+ BC7_MODE_PRIO_CODE(4, 4, 0),
+ BC7_MODE_PRIO_CODE(4, 4, 1),
+ BC7_MODE_PRIO_CODE(4, 5, 0),
+ };
+
+ const uint16_t *g_bc7PrioCodesRGB = g_bc7PrioCodesRGBData;
+ const int g_bc7NumPrioCodesRGB = sizeof(g_bc7PrioCodesRGBData) / sizeof(g_bc7PrioCodesRGBData[0]);
+
+ const uint16_t g_bc7PrioCodesRGBAData[] =
+ {
+ BC7_MODE_PRIO_CODE(1, 4, 1),
+ BC7_MODE_PRIO_CODE(1, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 4, 31),
+ BC7_MODE_PRIO_CODE(1, 4, 11),
+ BC7_MODE_PRIO_CODE(1, 4, 0),
+ BC7_MODE_PRIO_CODE(1, 7, 13),
+ BC7_MODE_PRIO_CODE(1, 5, 0),
+ BC7_MODE_PRIO_CODE(1, 7, 0),
+ BC7_MODE_PRIO_CODE(2, 4, 1),
+ BC7_MODE_PRIO_CODE(3, 4, 1),
+ BC7_MODE_PRIO_CODE(2, 4, 0),
+ BC7_MODE_PRIO_CODE(2, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 7, 6),
+ BC7_MODE_PRIO_CODE(1, 4, 10),
+ BC7_MODE_PRIO_CODE(1, 7, 15),
+ BC7_MODE_PRIO_CODE(1, 7, 14),
+ BC7_MODE_PRIO_CODE(1, 4, 30),
+ BC7_MODE_PRIO_CODE(1, 7, 7),
+ BC7_MODE_PRIO_CODE(3, 6, 0),
+ BC7_MODE_PRIO_CODE(1, 7, 19),
+ BC7_MODE_PRIO_CODE(3, 4, 0),
+ BC7_MODE_PRIO_CODE(2, 7, 13),
+ BC7_MODE_PRIO_CODE(1, 5, 30),
+ BC7_MODE_PRIO_CODE(1, 7, 2),
+ BC7_MODE_PRIO_CODE(1, 7, 1),
+ BC7_MODE_PRIO_CODE(1, 7, 21),
+ BC7_MODE_PRIO_CODE(4, 4, 1),
+ BC7_MODE_PRIO_CODE(1, 4, 21),
+ BC7_MODE_PRIO_CODE(2, 4, 31),
+ BC7_MODE_PRIO_CODE(1, 7, 10),
+ BC7_MODE_PRIO_CODE(1, 7, 3),
+ BC7_MODE_PRIO_CODE(4, 6, 0),
+ BC7_MODE_PRIO_CODE(3, 7, 13),
+ BC7_MODE_PRIO_CODE(1, 7, 16),
+ BC7_MODE_PRIO_CODE(1, 7, 8),
+ BC7_MODE_PRIO_CODE(2, 5, 0),
+ BC7_MODE_PRIO_CODE(2, 7, 0),
+ BC7_MODE_PRIO_CODE(1, 7, 23),
+ BC7_MODE_PRIO_CODE(1, 7, 9),
+ BC7_MODE_PRIO_CODE(2, 4, 11),
+ BC7_MODE_PRIO_CODE(3, 4, 31),
+ BC7_MODE_PRIO_CODE(1, 7, 20),
+ BC7_MODE_PRIO_CODE(1, 7, 22),
+ BC7_MODE_PRIO_CODE(4, 4, 0),
+ BC7_MODE_PRIO_CODE(1, 5, 10),
+ BC7_MODE_PRIO_CODE(4, 7, 13),
+ BC7_MODE_PRIO_CODE(3, 7, 0),
+ BC7_MODE_PRIO_CODE(1, 7, 12),
+ BC7_MODE_PRIO_CODE(1, 7, 29),
+ BC7_MODE_PRIO_CODE(3, 4, 11),
+ BC7_MODE_PRIO_CODE(1, 7, 11),
+ BC7_MODE_PRIO_CODE(1, 7, 18),
+ BC7_MODE_PRIO_CODE(1, 7, 4),
+ BC7_MODE_PRIO_CODE(2, 7, 15),
+ BC7_MODE_PRIO_CODE(2, 7, 14),
+ BC7_MODE_PRIO_CODE(1, 7, 5),
+ BC7_MODE_PRIO_CODE(1, 7, 25),
+ BC7_MODE_PRIO_CODE(1, 7, 17),
+ BC7_MODE_PRIO_CODE(1, 7, 24),
+ BC7_MODE_PRIO_CODE(1, 7, 26),
+ BC7_MODE_PRIO_CODE(3, 5, 0),
+ BC7_MODE_PRIO_CODE(2, 7, 2),
+ BC7_MODE_PRIO_CODE(1, 5, 20),
+ BC7_MODE_PRIO_CODE(2, 7, 1),
+ BC7_MODE_PRIO_CODE(2, 7, 29),
+ BC7_MODE_PRIO_CODE(2, 4, 10),
+ BC7_MODE_PRIO_CODE(4, 7, 0),
+ BC7_MODE_PRIO_CODE(2, 7, 6),
+ BC7_MODE_PRIO_CODE(2, 7, 7),
+ BC7_MODE_PRIO_CODE(3, 7, 14),
+ BC7_MODE_PRIO_CODE(3, 7, 15),
+ BC7_MODE_PRIO_CODE(4, 4, 31),
+ BC7_MODE_PRIO_CODE(2, 7, 21),
+ BC7_MODE_PRIO_CODE(2, 4, 30),
+ BC7_MODE_PRIO_CODE(2, 4, 21),
+ BC7_MODE_PRIO_CODE(3, 7, 29),
+ BC7_MODE_PRIO_CODE(2, 7, 19),
+ BC7_MODE_PRIO_CODE(2, 7, 10),
+ BC7_MODE_PRIO_CODE(3, 7, 1),
+ BC7_MODE_PRIO_CODE(4, 7, 29),
+ BC7_MODE_PRIO_CODE(3, 7, 7),
+ BC7_MODE_PRIO_CODE(1, 4, 20),
+ BC7_MODE_PRIO_CODE(3, 7, 2),
+ BC7_MODE_PRIO_CODE(2, 7, 16),
+ BC7_MODE_PRIO_CODE(2, 7, 3),
+ BC7_MODE_PRIO_CODE(2, 5, 30),
+ BC7_MODE_PRIO_CODE(2, 7, 23),
+ BC7_MODE_PRIO_CODE(3, 7, 6),
+ BC7_MODE_PRIO_CODE(2, 7, 12),
+ BC7_MODE_PRIO_CODE(1, 7, 61),
+ BC7_MODE_PRIO_CODE(4, 4, 11),
+ BC7_MODE_PRIO_CODE(3, 4, 10),
+ BC7_MODE_PRIO_CODE(3, 7, 10),
+ BC7_MODE_PRIO_CODE(2, 7, 8),
+ BC7_MODE_PRIO_CODE(2, 7, 22),
+ BC7_MODE_PRIO_CODE(2, 7, 26),
+ BC7_MODE_PRIO_CODE(3, 4, 30),
+ BC7_MODE_PRIO_CODE(2, 7, 9),
+ BC7_MODE_PRIO_CODE(3, 7, 19),
+ BC7_MODE_PRIO_CODE(2, 7, 25),
+ BC7_MODE_PRIO_CODE(3, 4, 21),
+ BC7_MODE_PRIO_CODE(2, 7, 24),
+ BC7_MODE_PRIO_CODE(1, 7, 60),
+ BC7_MODE_PRIO_CODE(2, 7, 11),
+ BC7_MODE_PRIO_CODE(2, 7, 18),
+ BC7_MODE_PRIO_CODE(2, 7, 17),
+ BC7_MODE_PRIO_CODE(2, 7, 4),
+ BC7_MODE_PRIO_CODE(2, 7, 5),
+ BC7_MODE_PRIO_CODE(3, 7, 3),
+ BC7_MODE_PRIO_CODE(3, 7, 16),
+ BC7_MODE_PRIO_CODE(3, 7, 26),
+ BC7_MODE_PRIO_CODE(3, 7, 21),
+ BC7_MODE_PRIO_CODE(1, 7, 62),
+ BC7_MODE_PRIO_CODE(2, 7, 20),
+ BC7_MODE_PRIO_CODE(3, 7, 23),
+ BC7_MODE_PRIO_CODE(1, 7, 33),
+ BC7_MODE_PRIO_CODE(2, 7, 33),
+ BC7_MODE_PRIO_CODE(3, 7, 33),
+ BC7_MODE_PRIO_CODE(4, 7, 33),
+ BC7_MODE_PRIO_CODE(3, 7, 11),
+ BC7_MODE_PRIO_CODE(3, 7, 12),
+ BC7_MODE_PRIO_CODE(4, 7, 26),
+ BC7_MODE_PRIO_CODE(3, 7, 25),
+ BC7_MODE_PRIO_CODE(1, 7, 63),
+ BC7_MODE_PRIO_CODE(2, 5, 10),
+ BC7_MODE_PRIO_CODE(3, 7, 8),
+ BC7_MODE_PRIO_CODE(4, 5, 0),
+ BC7_MODE_PRIO_CODE(3, 7, 24),
+ BC7_MODE_PRIO_CODE(3, 7, 22),
+ BC7_MODE_PRIO_CODE(3, 7, 9),
+ BC7_MODE_PRIO_CODE(1, 7, 32),
+ BC7_MODE_PRIO_CODE(2, 7, 61),
+ BC7_MODE_PRIO_CODE(3, 7, 4),
+ BC7_MODE_PRIO_CODE(3, 5, 30),
+ BC7_MODE_PRIO_CODE(3, 7, 20),
+ BC7_MODE_PRIO_CODE(1, 7, 35),
+ BC7_MODE_PRIO_CODE(4, 7, 14),
+ BC7_MODE_PRIO_CODE(3, 7, 5),
+ BC7_MODE_PRIO_CODE(3, 7, 18),
+ BC7_MODE_PRIO_CODE(1, 7, 30),
+ BC7_MODE_PRIO_CODE(1, 7, 43),
+ BC7_MODE_PRIO_CODE(4, 4, 21),
+ BC7_MODE_PRIO_CODE(4, 7, 15),
+ BC7_MODE_PRIO_CODE(3, 7, 17),
+ BC7_MODE_PRIO_CODE(2, 7, 32),
+ BC7_MODE_PRIO_CODE(3, 7, 32),
+ BC7_MODE_PRIO_CODE(2, 5, 20),
+ BC7_MODE_PRIO_CODE(4, 7, 1),
+ BC7_MODE_PRIO_CODE(4, 7, 2),
+ BC7_MODE_PRIO_CODE(1, 7, 28),
+ BC7_MODE_PRIO_CODE(1, 7, 54),
+ BC7_MODE_PRIO_CODE(4, 7, 32),
+ BC7_MODE_PRIO_CODE(1, 7, 27),
+ BC7_MODE_PRIO_CODE(4, 4, 10),
+ BC7_MODE_PRIO_CODE(3, 5, 10),
+ BC7_MODE_PRIO_CODE(2, 7, 60),
+ BC7_MODE_PRIO_CODE(2, 4, 20),
+ BC7_MODE_PRIO_CODE(2, 7, 63),
+ BC7_MODE_PRIO_CODE(4, 4, 30),
+ BC7_MODE_PRIO_CODE(2, 7, 62),
+ BC7_MODE_PRIO_CODE(1, 7, 41),
+ BC7_MODE_PRIO_CODE(1, 7, 58),
+ BC7_MODE_PRIO_CODE(3, 7, 60),
+ BC7_MODE_PRIO_CODE(1, 7, 40),
+ BC7_MODE_PRIO_CODE(1, 7, 55),
+ BC7_MODE_PRIO_CODE(2, 7, 35),
+ BC7_MODE_PRIO_CODE(4, 7, 8),
+ BC7_MODE_PRIO_CODE(4, 7, 6),
+ BC7_MODE_PRIO_CODE(1, 7, 53),
+ BC7_MODE_PRIO_CODE(4, 7, 9),
+ BC7_MODE_PRIO_CODE(3, 7, 61),
+ BC7_MODE_PRIO_CODE(3, 4, 20),
+ BC7_MODE_PRIO_CODE(4, 7, 22),
+ BC7_MODE_PRIO_CODE(4, 7, 20),
+ BC7_MODE_PRIO_CODE(3, 7, 62),
+ BC7_MODE_PRIO_CODE(4, 7, 7),
+ BC7_MODE_PRIO_CODE(1, 7, 42),
+ BC7_MODE_PRIO_CODE(1, 7, 52),
+ BC7_MODE_PRIO_CODE(4, 5, 30),
+ BC7_MODE_PRIO_CODE(1, 7, 56),
+ BC7_MODE_PRIO_CODE(1, 7, 31),
+ BC7_MODE_PRIO_CODE(3, 5, 20),
+ BC7_MODE_PRIO_CODE(1, 7, 48),
+ BC7_MODE_PRIO_CODE(2, 7, 28),
+ BC7_MODE_PRIO_CODE(3, 7, 28),
+ BC7_MODE_PRIO_CODE(4, 7, 19),
+ BC7_MODE_PRIO_CODE(3, 7, 35),
+ BC7_MODE_PRIO_CODE(1, 7, 59),
+ BC7_MODE_PRIO_CODE(2, 7, 30),
+ BC7_MODE_PRIO_CODE(3, 7, 63),
+ BC7_MODE_PRIO_CODE(4, 7, 21),
+ BC7_MODE_PRIO_CODE(4, 7, 10),
+ BC7_MODE_PRIO_CODE(4, 7, 3),
+ BC7_MODE_PRIO_CODE(1, 7, 47),
+ BC7_MODE_PRIO_CODE(1, 7, 37),
+ BC7_MODE_PRIO_CODE(4, 5, 10),
+ BC7_MODE_PRIO_CODE(4, 7, 23),
+ BC7_MODE_PRIO_CODE(1, 7, 57),
+ BC7_MODE_PRIO_CODE(4, 7, 17),
+ BC7_MODE_PRIO_CODE(1, 7, 45),
+ BC7_MODE_PRIO_CODE(4, 7, 24),
+ BC7_MODE_PRIO_CODE(4, 7, 60),
+ BC7_MODE_PRIO_CODE(1, 7, 50),
+ BC7_MODE_PRIO_CODE(2, 7, 41),
+ BC7_MODE_PRIO_CODE(4, 7, 25),
+ BC7_MODE_PRIO_CODE(3, 7, 30),
+ BC7_MODE_PRIO_CODE(2, 7, 59),
+ BC7_MODE_PRIO_CODE(2, 7, 55),
+ BC7_MODE_PRIO_CODE(4, 7, 18),
+ BC7_MODE_PRIO_CODE(4, 7, 12),
+ BC7_MODE_PRIO_CODE(4, 7, 5),
+ BC7_MODE_PRIO_CODE(3, 7, 59),
+ BC7_MODE_PRIO_CODE(1, 7, 51),
+ BC7_MODE_PRIO_CODE(4, 7, 16),
+ BC7_MODE_PRIO_CODE(4, 7, 11),
+ BC7_MODE_PRIO_CODE(2, 7, 58),
+ BC7_MODE_PRIO_CODE(3, 7, 41),
+ BC7_MODE_PRIO_CODE(4, 4, 20),
+ BC7_MODE_PRIO_CODE(4, 7, 4),
+ BC7_MODE_PRIO_CODE(1, 7, 49),
+ BC7_MODE_PRIO_CODE(2, 7, 27),
+ BC7_MODE_PRIO_CODE(3, 7, 27),
+ BC7_MODE_PRIO_CODE(4, 7, 62),
+ BC7_MODE_PRIO_CODE(3, 7, 58),
+ BC7_MODE_PRIO_CODE(4, 5, 20),
+ BC7_MODE_PRIO_CODE(2, 7, 53),
+ BC7_MODE_PRIO_CODE(3, 7, 53),
+ BC7_MODE_PRIO_CODE(2, 7, 40),
+ BC7_MODE_PRIO_CODE(3, 7, 40),
+ BC7_MODE_PRIO_CODE(2, 7, 31),
+ BC7_MODE_PRIO_CODE(3, 7, 31),
+ BC7_MODE_PRIO_CODE(4, 7, 61),
+ BC7_MODE_PRIO_CODE(1, 7, 36),
+ BC7_MODE_PRIO_CODE(4, 7, 63),
+ BC7_MODE_PRIO_CODE(1, 7, 46),
+ BC7_MODE_PRIO_CODE(3, 7, 55),
+ BC7_MODE_PRIO_CODE(2, 7, 52),
+ BC7_MODE_PRIO_CODE(2, 7, 56),
+ BC7_MODE_PRIO_CODE(2, 7, 42),
+ BC7_MODE_PRIO_CODE(2, 7, 37),
+ BC7_MODE_PRIO_CODE(2, 7, 57),
+ BC7_MODE_PRIO_CODE(3, 7, 57),
+ BC7_MODE_PRIO_CODE(2, 7, 45),
+ BC7_MODE_PRIO_CODE(4, 7, 57),
+ BC7_MODE_PRIO_CODE(2, 7, 49),
+ BC7_MODE_PRIO_CODE(3, 7, 42),
+ BC7_MODE_PRIO_CODE(2, 7, 43),
+ BC7_MODE_PRIO_CODE(3, 7, 43),
+ BC7_MODE_PRIO_CODE(4, 7, 28),
+ BC7_MODE_PRIO_CODE(2, 7, 48),
+ BC7_MODE_PRIO_CODE(3, 7, 52),
+ BC7_MODE_PRIO_CODE(3, 7, 49),
+ BC7_MODE_PRIO_CODE(4, 7, 59),
+ BC7_MODE_PRIO_CODE(4, 7, 40),
+ BC7_MODE_PRIO_CODE(4, 7, 27),
+ BC7_MODE_PRIO_CODE(3, 7, 45),
+ BC7_MODE_PRIO_CODE(4, 7, 55),
+ BC7_MODE_PRIO_CODE(3, 7, 56),
+ BC7_MODE_PRIO_CODE(4, 7, 42),
+ BC7_MODE_PRIO_CODE(2, 7, 54),
+ BC7_MODE_PRIO_CODE(3, 7, 54),
+ BC7_MODE_PRIO_CODE(4, 7, 54),
+ BC7_MODE_PRIO_CODE(2, 7, 47),
+ BC7_MODE_PRIO_CODE(3, 7, 47),
+ BC7_MODE_PRIO_CODE(4, 7, 43),
+ BC7_MODE_PRIO_CODE(4, 7, 31),
+ BC7_MODE_PRIO_CODE(3, 7, 37),
+ BC7_MODE_PRIO_CODE(3, 7, 48),
+ BC7_MODE_PRIO_CODE(4, 7, 48),
+ BC7_MODE_PRIO_CODE(4, 7, 45),
+ BC7_MODE_PRIO_CODE(4, 7, 47),
+ BC7_MODE_PRIO_CODE(2, 7, 36),
+ BC7_MODE_PRIO_CODE(1, 7, 44),
+ BC7_MODE_PRIO_CODE(4, 7, 35),
+ BC7_MODE_PRIO_CODE(4, 7, 58),
+ BC7_MODE_PRIO_CODE(3, 7, 36),
+ BC7_MODE_PRIO_CODE(2, 7, 50),
+ BC7_MODE_PRIO_CODE(3, 7, 50),
+ BC7_MODE_PRIO_CODE(4, 7, 50),
+ BC7_MODE_PRIO_CODE(4, 7, 52),
+ BC7_MODE_PRIO_CODE(1, 7, 39),
+ BC7_MODE_PRIO_CODE(1, 7, 34),
+ BC7_MODE_PRIO_CODE(1, 7, 38),
+ BC7_MODE_PRIO_CODE(2, 7, 38),
+ BC7_MODE_PRIO_CODE(3, 7, 38),
+ BC7_MODE_PRIO_CODE(4, 7, 30),
+ BC7_MODE_PRIO_CODE(2, 7, 51),
+ BC7_MODE_PRIO_CODE(4, 7, 41),
+ BC7_MODE_PRIO_CODE(4, 7, 53),
+ BC7_MODE_PRIO_CODE(2, 7, 46),
+ BC7_MODE_PRIO_CODE(3, 7, 46),
+ BC7_MODE_PRIO_CODE(4, 7, 49),
+ BC7_MODE_PRIO_CODE(4, 7, 56),
+ BC7_MODE_PRIO_CODE(4, 7, 37),
+ BC7_MODE_PRIO_CODE(2, 7, 44),
+ BC7_MODE_PRIO_CODE(3, 7, 44),
+ BC7_MODE_PRIO_CODE(4, 7, 36),
+ BC7_MODE_PRIO_CODE(2, 7, 39),
+ BC7_MODE_PRIO_CODE(2, 7, 34),
+ BC7_MODE_PRIO_CODE(4, 7, 38),
+ BC7_MODE_PRIO_CODE(3, 7, 51),
+ BC7_MODE_PRIO_CODE(4, 7, 51),
+ BC7_MODE_PRIO_CODE(4, 7, 46),
+ BC7_MODE_PRIO_CODE(4, 7, 44),
+ BC7_MODE_PRIO_CODE(3, 7, 39),
+ BC7_MODE_PRIO_CODE(3, 7, 34),
+ BC7_MODE_PRIO_CODE(4, 7, 39),
+ BC7_MODE_PRIO_CODE(4, 7, 34),
+ };
+
+ const uint16_t *g_bc7PrioCodesRGBA = g_bc7PrioCodesRGBAData;
+ const int g_bc7NumPrioCodesRGBA = sizeof(g_bc7PrioCodesRGBAData) / sizeof(g_bc7PrioCodesRGBA[0]);
+
+ int UnpackMode(uint16_t packed)
+ {
+ return static_cast<int>((packed >> BC7_MODE_OFFSET_BITS) & ((1 << BC7_MODE_BITS) - 1));
+ }
+
+ int UnpackSeedPointCount(uint16_t packed)
+ {
+ return static_cast<int>((packed >> BC7_SEED_POINT_COUNT_OFFSET_BITS) & ((1 << BC7_SEED_POINT_COUNT_BITS) - 1)) + 1;
+ }
+
+ int UnpackPartition(uint16_t packed)
+ {
+ return static_cast<int>((packed >> BC7_PARTITION_OFFSET_BITS) & ((1 << BC7_PARTITION_BITS) - 1));
+ }
+
+ int UnpackRotation(uint16_t packed)
+ {
+ return static_cast<int>((packed >> BC7_ROTATION_OFFSET_BITS) & ((1 << BC7_ROTATION_BITS) - 1));
+ }
+
+ int UnpackIndexSelector(uint16_t packed)
+ {
+ return static_cast<int>((packed >> BC7_INDEX_MODE_OFFSET_BITS) & ((1 << BC7_INDEX_MODE_BITS) - 1));
+ }
+}}}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_BC7_SingleColor.h b/thirdparty/cvtt/ConvectionKernels_BC7_SingleColor.h
index b5564c0dab..b45ba5eca8 100644
--- a/thirdparty/cvtt/ConvectionKernels_BC7_SingleColor.h
+++ b/thirdparty/cvtt/ConvectionKernels_BC7_SingleColor.h
@@ -1,6 +1,8 @@
#pragma once
#include <stdint.h>
+// This file is generated by the MakeTables app. Do not edit this file manually.
+
namespace cvtt { namespace Tables { namespace BC7SC {
struct TableEntry
diff --git a/thirdparty/cvtt/ConvectionKernels_BCCommon.cpp b/thirdparty/cvtt/ConvectionKernels_BCCommon.cpp
new file mode 100644
index 0000000000..be16d1db06
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BCCommon.cpp
@@ -0,0 +1,46 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels_BCCommon.h"
+
+int cvtt::Internal::BCCommon::TweakRoundsForRange(int range)
+{
+ if (range == 3)
+ return 3;
+ return 4;
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_BCCommon.h b/thirdparty/cvtt/ConvectionKernels_BCCommon.h
new file mode 100644
index 0000000000..3e13151acd
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_BCCommon.h
@@ -0,0 +1,104 @@
+#pragma once
+#ifndef __CVTT_BCCOMMON_H__
+#define __CVTT_BCCOMMON_H__
+
+#include "ConvectionKernels_AggregatedError.h"
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ class BCCommon
+ {
+ public:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::AInt16 MAInt16;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+
+ static int TweakRoundsForRange(int range);
+
+ template<int TVectorSize>
+ static void ComputeErrorLDR(uint32_t flags, const MUInt15 reconstructed[TVectorSize], const MUInt15 original[TVectorSize], int numRealChannels, AggregatedError<TVectorSize> &aggError)
+ {
+ for (int ch = 0; ch < numRealChannels; ch++)
+ aggError.Add(ParallelMath::SqDiffUInt8(reconstructed[ch], original[ch]), ch);
+ }
+
+ template<int TVectorSize>
+ static void ComputeErrorLDR(uint32_t flags, const MUInt15 reconstructed[TVectorSize], const MUInt15 original[TVectorSize], AggregatedError<TVectorSize> &aggError)
+ {
+ ComputeErrorLDR<TVectorSize>(flags, reconstructed, original, TVectorSize, aggError);
+ }
+
+ template<int TVectorSize>
+ static MFloat ComputeErrorLDRSimple(uint32_t flags, const MUInt15 reconstructed[TVectorSize], const MUInt15 original[TVectorSize], int numRealChannels, const float *channelWeightsSq)
+ {
+ AggregatedError<TVectorSize> aggError;
+ ComputeErrorLDR<TVectorSize>(flags, reconstructed, original, numRealChannels, aggError);
+ return aggError.Finalize(flags, channelWeightsSq);
+ }
+
+ template<int TVectorSize>
+ static MFloat ComputeErrorHDRFast(uint32_t flags, const MSInt16 reconstructed[TVectorSize], const MSInt16 original[TVectorSize], const float channelWeightsSq[TVectorSize])
+ {
+ MFloat error = ParallelMath::MakeFloatZero();
+ if (flags & Flags::Uniform)
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ error = error + ParallelMath::SqDiffSInt16(reconstructed[ch], original[ch]);
+ }
+ else
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ error = error + ParallelMath::SqDiffSInt16(reconstructed[ch], original[ch]) * ParallelMath::MakeFloat(channelWeightsSq[ch]);
+ }
+
+ return error;
+ }
+
+ template<int TVectorSize>
+ static MFloat ComputeErrorHDRSlow(uint32_t flags, const MSInt16 reconstructed[TVectorSize], const MSInt16 original[TVectorSize], const float channelWeightsSq[TVectorSize])
+ {
+ MFloat error = ParallelMath::MakeFloatZero();
+ if (flags & Flags::Uniform)
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ error = error + ParallelMath::SqDiff2CL(reconstructed[ch], original[ch]);
+ }
+ else
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ error = error + ParallelMath::SqDiff2CL(reconstructed[ch], original[ch]) * ParallelMath::MakeFloat(channelWeightsSq[ch]);
+ }
+
+ return error;
+ }
+
+ template<int TChannelCount>
+ static void PreWeightPixelsLDR(MFloat preWeightedPixels[16][TChannelCount], const MUInt15 pixels[16][TChannelCount], const float channelWeights[TChannelCount])
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < TChannelCount; ch++)
+ preWeightedPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]) * channelWeights[ch];
+ }
+ }
+
+ template<int TChannelCount>
+ static void PreWeightPixelsHDR(MFloat preWeightedPixels[16][TChannelCount], const MSInt16 pixels[16][TChannelCount], const float channelWeights[TChannelCount])
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < TChannelCount; ch++)
+ preWeightedPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]) * channelWeights[ch];
+ }
+ }
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_Config.h b/thirdparty/cvtt/ConvectionKernels_Config.h
new file mode 100644
index 0000000000..e79d32b1da
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_Config.h
@@ -0,0 +1,12 @@
+#pragma once
+#ifndef __CVTT_CONFIG_H__
+#define __CVTT_CONFIG_H__
+
+#if (defined(_M_IX86_FP) && _M_IX86_FP >= 2) || defined(_M_X64) || defined(__SSE2__)
+#define CVTT_USE_SSE2
+#endif
+
+// Define this to compile everything as a single source file
+//#define CVTT_SINGLE_FILE
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_ETC.cpp b/thirdparty/cvtt/ConvectionKernels_ETC.cpp
new file mode 100644
index 0000000000..cb202a6e9c
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_ETC.cpp
@@ -0,0 +1,3147 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels.h"
+#include "ConvectionKernels_ETC.h"
+#include "ConvectionKernels_ETC1.h"
+#include "ConvectionKernels_ETC2.h"
+#include "ConvectionKernels_ETC2_Rounding.h"
+#include "ConvectionKernels_ParallelMath.h"
+#include "ConvectionKernels_FakeBT709_Rounding.h"
+
+#include <cmath>
+
+const int cvtt::Internal::ETCComputer::g_flipTables[2][2][8] =
+{
+ {
+ { 0, 1, 4, 5, 8, 9, 12, 13 },
+ { 2, 3, 6, 7, 10, 11, 14, 15 }
+ },
+ {
+ { 0, 1, 2, 3, 4, 5, 6, 7 },
+ { 8, 9, 10, 11, 12, 13, 14, 15 }
+ },
+};
+
+cvtt::ParallelMath::Float cvtt::Internal::ETCComputer::ComputeErrorUniform(const MUInt15 pixelA[3], const MUInt15 pixelB[3])
+{
+ MSInt16 d0 = ParallelMath::LosslessCast<MSInt16>::Cast(pixelA[0]) - ParallelMath::LosslessCast<MSInt16>::Cast(pixelB[0]);
+ MFloat fd0 = ParallelMath::ToFloat(d0);
+ MFloat error = fd0 * fd0;
+ for (int ch = 1; ch < 3; ch++)
+ {
+ MSInt16 d = ParallelMath::LosslessCast<MSInt16>::Cast(pixelA[ch]) - ParallelMath::LosslessCast<MSInt16>::Cast(pixelB[ch]);
+ MFloat fd = ParallelMath::ToFloat(d);
+ error = error + fd * fd;
+ }
+ return error;
+}
+
+cvtt::ParallelMath::Float cvtt::Internal::ETCComputer::ComputeErrorWeighted(const MUInt15 reconstructed[3], const MFloat preWeightedPixel[3], const Options options)
+{
+ MFloat dr = ParallelMath::ToFloat(reconstructed[0]) * options.redWeight - preWeightedPixel[0];
+ MFloat dg = ParallelMath::ToFloat(reconstructed[1]) * options.greenWeight - preWeightedPixel[1];
+ MFloat db = ParallelMath::ToFloat(reconstructed[2]) * options.blueWeight - preWeightedPixel[2];
+
+ return dr * dr + dg * dg + db * db;
+}
+
+cvtt::ParallelMath::Float cvtt::Internal::ETCComputer::ComputeErrorFakeBT709(const MUInt15 reconstructed[3], const MFloat preWeightedPixel[3])
+{
+ MFloat yuv[3];
+ ConvertToFakeBT709(yuv, reconstructed);
+
+ MFloat dy = yuv[0] - preWeightedPixel[0];
+ MFloat du = yuv[1] - preWeightedPixel[1];
+ MFloat dv = yuv[2] - preWeightedPixel[2];
+
+ return dy * dy + du * du + dv * dv;
+}
+
+void cvtt::Internal::ETCComputer::TestHalfBlock(MFloat &outError, MUInt16 &outSelectors, MUInt15 quantizedPackedColor, const MUInt15 pixels[8][3], const MFloat preWeightedPixels[8][3], const MSInt16 modifiers[4], bool isDifferential, const Options &options)
+{
+ MUInt15 quantized[3];
+ MUInt15 unquantized[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ quantized[ch] = (ParallelMath::RightShift(quantizedPackedColor, (ch * 5)) & ParallelMath::MakeUInt15(31));
+
+ if (isDifferential)
+ unquantized[ch] = (quantized[ch] << 3) | ParallelMath::RightShift(quantized[ch], 2);
+ else
+ unquantized[ch] = (quantized[ch] << 4) | quantized[ch];
+ }
+
+ MUInt16 selectors = ParallelMath::MakeUInt16(0);
+ MFloat totalError = ParallelMath::MakeFloatZero();
+
+ MUInt15 u15_255 = ParallelMath::MakeUInt15(255);
+ MSInt16 s16_zero = ParallelMath::MakeSInt16(0);
+
+ MUInt15 unquantizedModified[4][3];
+ for (unsigned int s = 0; s < 4; s++)
+ for (int ch = 0; ch < 3; ch++)
+ unquantizedModified[s][ch] = ParallelMath::Min(ParallelMath::ToUInt15(ParallelMath::Max(ParallelMath::ToSInt16(unquantized[ch]) + modifiers[s], s16_zero)), u15_255);
+
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ for (int px = 0; px < 8; px++)
+ {
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+ MUInt16 bestSelector = ParallelMath::MakeUInt16(0);
+
+ for (unsigned int s = 0; s < 4; s++)
+ {
+ MFloat error;
+ if (isFakeBT709)
+ error = ComputeErrorFakeBT709(unquantizedModified[s], preWeightedPixels[px]);
+ else if (isUniform)
+ error = ComputeErrorUniform(pixels[px], unquantizedModified[s]);
+ else
+ error = ComputeErrorWeighted(unquantizedModified[s], preWeightedPixels[px], options);
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
+ bestSelector = ParallelMath::Select(ParallelMath::FloatFlagToInt16(errorBetter), ParallelMath::MakeUInt16(s), bestSelector);
+ bestError = ParallelMath::Min(error, bestError);
+ }
+
+ totalError = totalError + bestError;
+ selectors = selectors | (bestSelector << (px * 2));
+ }
+
+ outError = totalError;
+ outSelectors = selectors;
+}
+
+void cvtt::Internal::ETCComputer::TestHalfBlockPunchthrough(MFloat &outError, MUInt16 &outSelectors, MUInt15 quantizedPackedColor, const MUInt15 pixels[8][3], const MFloat preWeightedPixels[8][3], const ParallelMath::Int16CompFlag isTransparent[8], const MUInt15 modifier, const Options &options)
+{
+ MUInt15 quantized[3];
+ MUInt15 unquantized[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ quantized[ch] = (ParallelMath::RightShift(quantizedPackedColor, (ch * 5)) & ParallelMath::MakeUInt15(31));
+ unquantized[ch] = (quantized[ch] << 3) | ParallelMath::RightShift(quantized[ch], 2);
+ }
+
+ MUInt16 selectors = ParallelMath::MakeUInt16(0);
+ MFloat totalError = ParallelMath::MakeFloatZero();
+
+ MUInt15 u15_255 = ParallelMath::MakeUInt15(255);
+ MSInt16 s16_zero = ParallelMath::MakeSInt16(0);
+
+ MUInt15 unquantizedModified[3][3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ unquantizedModified[0][ch] = ParallelMath::Max(unquantized[ch], modifier) - modifier;
+ unquantizedModified[1][ch] = unquantized[ch];
+ unquantizedModified[2][ch] = ParallelMath::Min(unquantized[ch] + modifier, u15_255);
+ }
+
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ for (int px = 0; px < 8; px++)
+ {
+ ParallelMath::FloatCompFlag isTransparentFloat = ParallelMath::Int16FlagToFloat(isTransparent[px]);
+
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+ MUInt15 bestSelector = ParallelMath::MakeUInt15(0);
+
+ for (unsigned int s = 0; s < 3; s++)
+ {
+ MFloat error;
+ if (isFakeBT709)
+ error = ComputeErrorFakeBT709(unquantizedModified[s], preWeightedPixels[px]);
+ else if (isUniform)
+ error = ComputeErrorUniform(pixels[px], unquantizedModified[s]);
+ else
+ error = ComputeErrorWeighted(unquantizedModified[s], preWeightedPixels[px], options);
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
+ bestSelector = ParallelMath::Select(ParallelMath::FloatFlagToInt16(errorBetter), ParallelMath::MakeUInt15(s), bestSelector);
+ bestError = ParallelMath::Min(error, bestError);
+ }
+
+ // Annoying quirk: The ETC encoding machinery assumes that selectors are in the table order in the spec, which isn't
+ // the same as their encoding bits, so the transparent index is actually 1 and the valid indexes are 0, 2, and 3.
+
+ // Remap selector 1 to 2, and 2 to 3
+ bestSelector = ParallelMath::Min(ParallelMath::MakeUInt15(3), bestSelector << 1);
+
+ // Mark zero transparent as
+ ParallelMath::ConditionalSet(bestError, isTransparentFloat, ParallelMath::MakeFloatZero());
+ ParallelMath::ConditionalSet(bestSelector, isTransparent[px], ParallelMath::MakeUInt15(1));
+
+ totalError = totalError + bestError;
+ selectors = selectors | (ParallelMath::LosslessCast<MUInt16>::Cast(bestSelector) << (px * 2));
+ }
+
+ outError = totalError;
+ outSelectors = selectors;
+}
+
+void cvtt::Internal::ETCComputer::FindBestDifferentialCombination(int flip, int d, const ParallelMath::Int16CompFlag canIgnoreSector[2], ParallelMath::Int16CompFlag& bestIsThisMode, MFloat& bestTotalError, MUInt15& bestFlip, MUInt15& bestD, MUInt15 bestColors[2], MUInt16 bestSelectors[2], MUInt15 bestTables[2], DifferentialResolveStorage &drs)
+{
+ // We do this part scalar because most of the cost benefit of parallelization is in error evaluation,
+ // and this code has a LOT of early-outs and disjointed index lookups that vary heavily between blocks
+ // and save a lot of time.
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ bool canIgnore[2] = { ParallelMath::Extract(canIgnoreSector[0], block), ParallelMath::Extract(canIgnoreSector[1], block) };
+ bool canIgnoreEither = canIgnore[0] || canIgnore[1];
+ float blockBestTotalError = ParallelMath::Extract(bestTotalError, block);
+ float bestDiffErrors[2] = { FLT_MAX, FLT_MAX };
+ uint16_t bestDiffSelectors[2] = { 0, 0 };
+ uint16_t bestDiffColors[2] = { 0, 0 };
+ uint16_t bestDiffTables[2] = { 0, 0 };
+ for (int sector = 0; sector < 2; sector++)
+ {
+ unsigned int sectorNumAttempts = ParallelMath::Extract(drs.diffNumAttempts[sector], block);
+ for (unsigned int i = 0; i < sectorNumAttempts; i++)
+ {
+ float error = ParallelMath::Extract(drs.diffErrors[sector][i], block);
+ if (error < bestDiffErrors[sector])
+ {
+ bestDiffErrors[sector] = error;
+ bestDiffSelectors[sector] = ParallelMath::Extract(drs.diffSelectors[sector][i], block);
+ bestDiffColors[sector] = ParallelMath::Extract(drs.diffColors[sector][i], block);
+ bestDiffTables[sector] = ParallelMath::Extract(drs.diffTables[sector][i], block);
+ }
+ }
+ }
+
+ if (canIgnore[0])
+ bestDiffColors[0] = bestDiffColors[1];
+ else if (canIgnore[1])
+ bestDiffColors[1] = bestDiffColors[0];
+
+ // The best differential possibilities must be better than the best total error
+ if (bestDiffErrors[0] + bestDiffErrors[1] < blockBestTotalError)
+ {
+ // Fast path if the best possible case is legal
+ if (canIgnoreEither || ETCDifferentialIsLegalScalar(bestDiffColors[0], bestDiffColors[1]))
+ {
+ ParallelMath::PutBoolInt16(bestIsThisMode, block, true);
+ ParallelMath::PutFloat(bestTotalError, block, bestDiffErrors[0] + bestDiffErrors[1]);
+ ParallelMath::PutUInt15(bestFlip, block, flip);
+ ParallelMath::PutUInt15(bestD, block, d);
+ for (int sector = 0; sector < 2; sector++)
+ {
+ ParallelMath::PutUInt15(bestColors[sector], block, bestDiffColors[sector]);
+ ParallelMath::PutUInt16(bestSelectors[sector], block, bestDiffSelectors[sector]);
+ ParallelMath::PutUInt15(bestTables[sector], block, bestDiffTables[sector]);
+ }
+ }
+ else
+ {
+ // Slow path: Sort the possible cases by quality, and search valid combinations
+ // TODO: Pre-flatten the error lists so this is nicer to cache
+ unsigned int numSortIndexes[2] = { 0, 0 };
+ for (int sector = 0; sector < 2; sector++)
+ {
+ unsigned int sectorNumAttempts = ParallelMath::Extract(drs.diffNumAttempts[sector], block);
+
+ for (unsigned int i = 0; i < sectorNumAttempts; i++)
+ {
+ if (ParallelMath::Extract(drs.diffErrors[sector][i], block) < blockBestTotalError)
+ drs.attemptSortIndexes[sector][numSortIndexes[sector]++] = i;
+ }
+
+ struct SortPredicate
+ {
+ const MFloat *diffErrors;
+ int block;
+
+ bool operator()(uint16_t a, uint16_t b) const
+ {
+ float errorA = ParallelMath::Extract(diffErrors[a], block);
+ float errorB = ParallelMath::Extract(diffErrors[b], block);
+
+ if (errorA < errorB)
+ return true;
+ if (errorA > errorB)
+ return false;
+
+ return a < b;
+ }
+ };
+
+ SortPredicate sp;
+ sp.diffErrors = drs.diffErrors[sector];
+ sp.block = block;
+
+ std::sort<uint16_t*, const SortPredicate&>(drs.attemptSortIndexes[sector], drs.attemptSortIndexes[sector] + numSortIndexes[sector], sp);
+ }
+
+ int scannedElements = 0;
+ for (unsigned int i = 0; i < numSortIndexes[0]; i++)
+ {
+ unsigned int attemptIndex0 = drs.attemptSortIndexes[0][i];
+ float error0 = ParallelMath::Extract(drs.diffErrors[0][attemptIndex0], block);
+
+ scannedElements++;
+
+ if (error0 >= blockBestTotalError)
+ break;
+
+ float maxError1 = ParallelMath::Extract(bestTotalError, block) - error0;
+ uint16_t diffColor0 = ParallelMath::Extract(drs.diffColors[0][attemptIndex0], block);
+
+ if (maxError1 < bestDiffErrors[1])
+ break;
+
+ for (unsigned int j = 0; j < numSortIndexes[1]; j++)
+ {
+ unsigned int attemptIndex1 = drs.attemptSortIndexes[1][j];
+ float error1 = ParallelMath::Extract(drs.diffErrors[1][attemptIndex1], block);
+
+ scannedElements++;
+
+ if (error1 >= maxError1)
+ break;
+
+ uint16_t diffColor1 = ParallelMath::Extract(drs.diffColors[1][attemptIndex1], block);
+
+ if (ETCDifferentialIsLegalScalar(diffColor0, diffColor1))
+ {
+ blockBestTotalError = error0 + error1;
+
+ ParallelMath::PutBoolInt16(bestIsThisMode, block, true);
+ ParallelMath::PutFloat(bestTotalError, block, blockBestTotalError);
+ ParallelMath::PutUInt15(bestFlip, block, flip);
+ ParallelMath::PutUInt15(bestD, block, d);
+ ParallelMath::PutUInt15(bestColors[0], block, diffColor0);
+ ParallelMath::PutUInt15(bestColors[1], block, diffColor1);
+ ParallelMath::PutUInt16(bestSelectors[0], block, ParallelMath::Extract(drs.diffSelectors[0][attemptIndex0], block));
+ ParallelMath::PutUInt16(bestSelectors[1], block, ParallelMath::Extract(drs.diffSelectors[1][attemptIndex1], block));
+ ParallelMath::PutUInt15(bestTables[0], block, ParallelMath::Extract(drs.diffTables[0][attemptIndex0], block));
+ ParallelMath::PutUInt15(bestTables[1], block, ParallelMath::Extract(drs.diffTables[1][attemptIndex1], block));
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+}
+
+cvtt::ParallelMath::Int16CompFlag cvtt::Internal::ETCComputer::ETCDifferentialIsLegalForChannel(const MUInt15 &a, const MUInt15 &b)
+{
+ MSInt16 diff = ParallelMath::LosslessCast<MSInt16>::Cast(b) - ParallelMath::LosslessCast<MSInt16>::Cast(a);
+
+ return ParallelMath::Less(ParallelMath::MakeSInt16(-5), diff) & ParallelMath::Less(diff, ParallelMath::MakeSInt16(4));
+}
+
+cvtt::ParallelMath::Int16CompFlag cvtt::Internal::ETCComputer::ETCDifferentialIsLegal(const MUInt15 &a, const MUInt15 &b)
+{
+ MUInt15 mask = ParallelMath::MakeUInt15(31);
+
+ return ETCDifferentialIsLegalForChannel(ParallelMath::RightShift(a, 10), ParallelMath::RightShift(b, 10))
+ & ETCDifferentialIsLegalForChannel(ParallelMath::RightShift(a, 5) & mask, ParallelMath::RightShift(b, 5) & mask)
+ & ETCDifferentialIsLegalForChannel(a & mask, b & mask);
+}
+
+bool cvtt::Internal::ETCComputer::ETCDifferentialIsLegalForChannelScalar(const uint16_t &a, const uint16_t &b)
+{
+ int16_t diff = static_cast<int16_t>(b) - static_cast<int16_t>(a);
+
+ return (-4 <= diff) && (diff <= 3);
+}
+
+bool cvtt::Internal::ETCComputer::ETCDifferentialIsLegalScalar(const uint16_t &a, const uint16_t &b)
+{
+ MUInt15 mask = ParallelMath::MakeUInt15(31);
+
+ return ETCDifferentialIsLegalForChannelScalar((a >> 10), (b >> 10))
+ & ETCDifferentialIsLegalForChannelScalar((a >> 5) & 31, (b >> 5) & 31)
+ & ETCDifferentialIsLegalForChannelScalar(a & 31, b & 31);
+}
+
+void cvtt::Internal::ETCComputer::EncodeTMode(uint8_t *outputBuffer, MFloat &bestError, const ParallelMath::Int16CompFlag isIsolated[16], const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const Options &options)
+{
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ ParallelMath::Int16CompFlag bestIsThisMode = ParallelMath::MakeBoolInt16(false);
+
+ MUInt15 isolatedTotal[3] = { ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0) };
+ MUInt15 lineTotal[3] = { ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0) };
+
+ MUInt15 numPixelsIsolated = ParallelMath::MakeUInt15(0);
+
+ // To speed this up, we compute line total as the sum, then subtract out isolated
+ for (unsigned int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ isolatedTotal[ch] = isolatedTotal[ch] + ParallelMath::SelectOrZero(isIsolated[px], pixels[px][ch]);
+ lineTotal[ch] = lineTotal[ch] + pixels[px][ch];
+ }
+ numPixelsIsolated = numPixelsIsolated + ParallelMath::SelectOrZero(isIsolated[px], ParallelMath::MakeUInt15(1));
+ }
+
+ for (int ch = 0; ch < 3; ch++)
+ lineTotal[ch] = lineTotal[ch] - isolatedTotal[ch];
+
+ MUInt15 numPixelsLine = ParallelMath::MakeUInt15(16) - numPixelsIsolated;
+
+ MUInt15 isolatedAverageQuantized[3];
+ MUInt15 isolatedAverageTargets[3];
+ {
+ int divisors[ParallelMath::ParallelSize];
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ divisors[block] = ParallelMath::Extract(numPixelsIsolated, block) * 34;
+
+ MUInt15 addend = (numPixelsIsolated << 4) | numPixelsIsolated;
+ for (int ch = 0; ch < 3; ch++)
+ {
+ // isolatedAverageQuantized[ch] = (isolatedTotal[ch] * 2 + numPixelsIsolated * 17) / (numPixelsIsolated * 34);
+
+ MUInt15 numerator = isolatedTotal[ch] + isolatedTotal[ch];
+ if (!isFakeBT709)
+ numerator = numerator + addend;
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int divisor = divisors[block];
+ if (divisor == 0)
+ ParallelMath::PutUInt15(isolatedAverageQuantized[ch], block, 0);
+ else
+ ParallelMath::PutUInt15(isolatedAverageQuantized[ch], block, ParallelMath::Extract(numerator, block) / divisor);
+ }
+
+ isolatedAverageTargets[ch] = numerator;
+ }
+ }
+
+ if (isFakeBT709)
+ ResolveTHFakeBT709Rounding(isolatedAverageQuantized, isolatedAverageTargets, numPixelsIsolated);
+
+ MUInt15 isolatedColor[3];
+ for (int ch = 0; ch < 3; ch++)
+ isolatedColor[ch] = (isolatedAverageQuantized[ch]) | (isolatedAverageQuantized[ch] << 4);
+
+ MFloat isolatedError[16];
+ for (int px = 0; px < 16; px++)
+ {
+ if (isFakeBT709)
+ isolatedError[px] = ComputeErrorFakeBT709(isolatedColor, preWeightedPixels[px]);
+ else if (isUniform)
+ isolatedError[px] = ComputeErrorUniform(pixels[px], isolatedColor);
+ else
+ isolatedError[px] = ComputeErrorWeighted(isolatedColor, preWeightedPixels[px], options);
+ }
+
+ MSInt32 bestSelectors = ParallelMath::MakeSInt32(0);
+ MUInt15 bestTable = ParallelMath::MakeUInt15(0);
+ MUInt15 bestLineColor = ParallelMath::MakeUInt15(0);
+
+ MSInt16 maxLine = ParallelMath::LosslessCast<MSInt16>::Cast(numPixelsLine);
+ MSInt16 minLine = ParallelMath::MakeSInt16(0) - maxLine;
+
+ int16_t clusterMaxLine = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int16_t blockMaxLine = ParallelMath::Extract(maxLine, block);
+ if (blockMaxLine > clusterMaxLine)
+ clusterMaxLine = blockMaxLine;
+ }
+
+ int16_t clusterMinLine = -clusterMaxLine;
+
+ int lineDivisors[ParallelMath::ParallelSize];
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ lineDivisors[block] = ParallelMath::Extract(numPixelsLine, block) * 34;
+
+ MUInt15 lineAddend = (numPixelsLine << 4) | numPixelsLine;
+
+ for (int table = 0; table < 8; table++)
+ {
+ int numUniqueColors[ParallelMath::ParallelSize];
+ MUInt15 uniqueQuantizedColors[31];
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ numUniqueColors[block] = 0;
+
+ MUInt15 modifier = ParallelMath::MakeUInt15(cvtt::Tables::ETC2::g_thModifierTable[table]);
+ MUInt15 modifierOffset = (modifier + modifier);
+
+ for (int16_t offsetPremultiplier = clusterMinLine; offsetPremultiplier <= clusterMaxLine; offsetPremultiplier++)
+ {
+ MSInt16 clampedOffsetPremultiplier = ParallelMath::Max(minLine, ParallelMath::Min(maxLine, ParallelMath::MakeSInt16(offsetPremultiplier)));
+ MSInt16 modifierAddend = ParallelMath::CompactMultiply(clampedOffsetPremultiplier, modifierOffset);
+
+ MUInt15 quantized[3];
+ if (isFakeBT709)
+ {
+ MUInt15 targets[3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ //quantized[ch] = std::min<int16_t>(15, std::max(0, (lineTotal[ch] * 2 + modifierOffset * offsetPremultiplier)) / (numDAIILine * 34));
+ MUInt15 numerator = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(lineTotal[ch] + lineTotal[ch]) + modifierAddend));
+ MUInt15 divided = ParallelMath::MakeUInt15(0);
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int divisor = lineDivisors[block];
+ if (divisor == 0)
+ ParallelMath::PutUInt15(divided, block, 0);
+ else
+ ParallelMath::PutUInt15(divided, block, ParallelMath::Extract(numerator, block) / divisor);
+ }
+ quantized[ch] = ParallelMath::Min(ParallelMath::MakeUInt15(15), divided);
+ targets[ch] = numerator;
+ }
+
+ ResolveTHFakeBT709Rounding(quantized, targets, numPixelsLine);
+ }
+ else
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ //quantized[ch] = std::min<int16_t>(15, std::max(0, (lineTotal[ch] * 2 + numDAIILine * 17 + modifierOffset * offsetPremultiplier)) / (numDAIILine * 34));
+ MUInt15 numerator = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(lineTotal[ch] + lineTotal[ch] + lineAddend) + modifierAddend));
+ MUInt15 divided = ParallelMath::MakeUInt15(0);
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int divisor = lineDivisors[block];
+ if (divisor == 0)
+ ParallelMath::PutUInt15(divided, block, 0);
+ else
+ ParallelMath::PutUInt15(divided, block, ParallelMath::Extract(numerator, block) / divisor);
+ }
+ quantized[ch] = ParallelMath::Min(ParallelMath::MakeUInt15(15), divided);
+ }
+ }
+
+ MUInt15 packedColor = quantized[0] | (quantized[1] << 5) | (quantized[2] << 10);
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t blockPackedColor = ParallelMath::Extract(packedColor, block);
+ if (numUniqueColors[block] == 0 || blockPackedColor != ParallelMath::Extract(uniqueQuantizedColors[numUniqueColors[block] - 1], block))
+ ParallelMath::PutUInt15(uniqueQuantizedColors[numUniqueColors[block]++], block, blockPackedColor);
+ }
+ }
+
+ // Stripe unfilled unique colors
+ int maxUniqueColors = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (numUniqueColors[block] > maxUniqueColors)
+ maxUniqueColors = numUniqueColors[block];
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t fillColor = ParallelMath::Extract(uniqueQuantizedColors[0], block);
+
+ int numUnique = numUniqueColors[block];
+ for (int fill = numUnique + 1; fill < maxUniqueColors; fill++)
+ ParallelMath::PutUInt15(uniqueQuantizedColors[fill], block, fillColor);
+ }
+
+ for (int ci = 0; ci < maxUniqueColors; ci++)
+ {
+ MUInt15 lineColors[3][3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 quantizedChannel = (ParallelMath::RightShift(uniqueQuantizedColors[ci], (ch * 5)) & ParallelMath::MakeUInt15(15));
+
+ MUInt15 unquantizedColor = (quantizedChannel << 4) | quantizedChannel;
+ lineColors[0][ch] = ParallelMath::Min(ParallelMath::MakeUInt15(255), unquantizedColor + modifier);
+ lineColors[1][ch] = unquantizedColor;
+ lineColors[2][ch] = ParallelMath::ToUInt15(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(unquantizedColor) - ParallelMath::LosslessCast<MSInt16>::Cast(modifier)));
+ }
+
+ MSInt32 selectors = ParallelMath::MakeSInt32(0);
+ MFloat error = ParallelMath::MakeFloatZero();
+ for (int px = 0; px < 16; px++)
+ {
+ MFloat pixelError = isolatedError[px];
+
+ MUInt15 pixelBestSelector = ParallelMath::MakeUInt15(0);
+ for (int i = 0; i < 3; i++)
+ {
+ MFloat error = isUniform ? ComputeErrorUniform(lineColors[i], pixels[px]) : ComputeErrorWeighted(lineColors[i], preWeightedPixels[px], options);
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, pixelError);
+ pixelError = ParallelMath::Min(error, pixelError);
+ pixelBestSelector = ParallelMath::Select(ParallelMath::FloatFlagToInt16(errorBetter), ParallelMath::MakeUInt15(i + 1), pixelBestSelector);
+ }
+
+ error = error + pixelError;
+ selectors = selectors | (ParallelMath::ToInt32(pixelBestSelector) << (px * 2));
+ }
+
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, bestError));
+ bestError = ParallelMath::Min(error, bestError);
+
+ if (ParallelMath::AnySet(errorBetter))
+ {
+ ParallelMath::ConditionalSet(bestLineColor, errorBetter, uniqueQuantizedColors[ci]);
+ ParallelMath::ConditionalSet(bestSelectors, errorBetter, selectors);
+ ParallelMath::ConditionalSet(bestTable, errorBetter, ParallelMath::MakeUInt15(table));
+ bestIsThisMode = bestIsThisMode | errorBetter;
+ }
+ }
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (ParallelMath::Extract(bestIsThisMode, block))
+ {
+ uint32_t lowBits = 0;
+ uint32_t highBits = 0;
+
+ uint16_t blockBestLineColor = ParallelMath::Extract(bestLineColor, block);
+ ParallelMath::ScalarUInt16 blockIsolatedAverageQuantized[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ blockIsolatedAverageQuantized[ch] = ParallelMath::Extract(isolatedAverageQuantized[ch], block);
+
+ uint16_t blockBestTable = ParallelMath::Extract(bestTable, block);
+ int32_t blockBestSelectors = ParallelMath::Extract(bestSelectors, block);
+
+ ParallelMath::ScalarUInt16 lineColor[3];
+ for (int ch = 0; ch < 3; ch++)
+ lineColor[ch] = (blockBestLineColor >> (ch * 5)) & 15;
+
+ EmitTModeBlock(outputBuffer + block * 8, lineColor, blockIsolatedAverageQuantized, blockBestSelectors, blockBestTable, true);
+ }
+ }
+}
+
+void cvtt::Internal::ETCComputer::EncodeHMode(uint8_t *outputBuffer, MFloat &bestError, const ParallelMath::Int16CompFlag groupings[16], const MUInt15 pixels[16][3], HModeEval &he, const MFloat preWeightedPixels[16][3], const Options &options)
+{
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ MUInt15 zero15 = ParallelMath::MakeUInt15(0);
+
+ MUInt15 counts[2] = { zero15, zero15 };
+
+ ParallelMath::Int16CompFlag bestIsThisMode = ParallelMath::MakeBoolInt16(false);
+
+ MUInt15 totals[2][3] =
+ {
+ { zero15, zero15, zero15 },
+ { zero15, zero15, zero15 }
+ };
+
+ for (unsigned int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ totals[0][ch] = totals[0][ch] + pixels[px][ch];
+ totals[1][ch] = totals[1][ch] + ParallelMath::SelectOrZero(groupings[px], pixels[px][ch]);
+ }
+ counts[1] = counts[1] + ParallelMath::SelectOrZero(groupings[px], ParallelMath::MakeUInt15(1));
+ }
+
+ for (int ch = 0; ch < 3; ch++)
+ totals[0][ch] = totals[0][ch] - totals[1][ch];
+ counts[0] = ParallelMath::MakeUInt15(16) - counts[1];
+
+ MUInt16 bestSectorBits = ParallelMath::MakeUInt16(0);
+ MUInt16 bestSignBits = ParallelMath::MakeUInt16(0);
+ MUInt15 bestColors[2] = { zero15, zero15 };
+ MUInt15 bestTable = ParallelMath::MakeUInt15(0);
+
+ for (int table = 0; table < 8; table++)
+ {
+ MUInt15 numUniqueColors = zero15;
+
+ int modifier = cvtt::Tables::ETC1::g_thModifierTable[table];
+
+ for (int sector = 0; sector < 2; sector++)
+ {
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int blockNumUniqueColors = 0;
+ uint16_t blockUniqueQuantizedColors[31];
+
+ int maxOffsetMultiplier = ParallelMath::Extract(counts[sector], block);
+ int minOffsetMultiplier = -maxOffsetMultiplier;
+
+ int modifierOffset = modifier * 2;
+
+ int blockSectorCounts = ParallelMath::Extract(counts[sector], block);
+ int blockSectorTotals[3];
+ for (int ch = 0; ch < 3; ch++)
+ blockSectorTotals[ch] = ParallelMath::Extract(totals[sector][ch], block);
+
+ for (int offsetPremultiplier = minOffsetMultiplier; offsetPremultiplier <= maxOffsetMultiplier; offsetPremultiplier++)
+ {
+ // TODO: This isn't ideal for FakeBT709
+ int16_t quantized[3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ if (blockSectorCounts == 0)
+ quantized[ch] = 0;
+ else
+ quantized[ch] = std::min<int16_t>(15, std::max<int16_t>(0, (blockSectorTotals[ch] * 2 + blockSectorCounts * 17 + modifierOffset * offsetPremultiplier)) / (blockSectorCounts * 34));
+ }
+
+ uint16_t packedColor = (quantized[0] << 10) | (quantized[1] << 5) | quantized[2];
+ if (blockNumUniqueColors == 0 || packedColor != blockUniqueQuantizedColors[blockNumUniqueColors - 1])
+ {
+ assert(blockNumUniqueColors < 32);
+ blockUniqueQuantizedColors[blockNumUniqueColors++] = packedColor;
+ }
+ }
+
+ ParallelMath::PutUInt15(he.numUniqueColors[sector], block, blockNumUniqueColors);
+
+ int baseIndex = 0;
+ if (sector == 1)
+ baseIndex = ParallelMath::Extract(he.numUniqueColors[0], block);
+
+ for (int i = 0; i < blockNumUniqueColors; i++)
+ ParallelMath::PutUInt15(he.uniqueQuantizedColors[baseIndex + i], block, blockUniqueQuantizedColors[i]);
+ }
+ }
+
+ MUInt15 totalColors = he.numUniqueColors[0] + he.numUniqueColors[1];
+ int maxErrorColors = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ maxErrorColors = std::max<int>(maxErrorColors, ParallelMath::Extract(totalColors, block));
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int lastColor = ParallelMath::Extract(totalColors, block);
+ uint16_t stripeColor = ParallelMath::Extract(he.uniqueQuantizedColors[0], block);
+ for (int i = lastColor; i < maxErrorColors; i++)
+ ParallelMath::PutUInt15(he.uniqueQuantizedColors[i], block, stripeColor);
+ }
+
+ for (int ci = 0; ci < maxErrorColors; ci++)
+ {
+ MUInt15 fifteen = ParallelMath::MakeUInt15(15);
+ MUInt15 twoFiftyFive = ParallelMath::MakeUInt15(255);
+ MSInt16 zeroS16 = ParallelMath::MakeSInt16(0);
+
+ MUInt15 colors[2][3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 quantizedChannel = ParallelMath::RightShift(he.uniqueQuantizedColors[ci], ((2 - ch) * 5)) & fifteen;
+
+ MUInt15 unquantizedColor = (quantizedChannel << 4) | quantizedChannel;
+ colors[0][ch] = ParallelMath::Min(twoFiftyFive, unquantizedColor + modifier);
+ colors[1][ch] = ParallelMath::ToUInt15(ParallelMath::Max(zeroS16, ParallelMath::LosslessCast<MSInt16>::Cast(unquantizedColor) - ParallelMath::MakeSInt16(modifier)));
+ }
+
+ MUInt16 signBits = ParallelMath::MakeUInt16(0);
+ for (int px = 0; px < 16; px++)
+ {
+ MFloat errors[2];
+ for (int i = 0; i < 2; i++)
+ {
+ if (isFakeBT709)
+ errors[i] = ComputeErrorFakeBT709(colors[i], preWeightedPixels[px]);
+ else if (isUniform)
+ errors[i] = ComputeErrorUniform(colors[i], pixels[px]);
+ else
+ errors[i] = ComputeErrorWeighted(colors[i], preWeightedPixels[px], options);
+ }
+
+ ParallelMath::Int16CompFlag errorOneLess = ParallelMath::FloatFlagToInt16(ParallelMath::Less(errors[1], errors[0]));
+ he.errors[ci][px] = ParallelMath::Min(errors[0], errors[1]);
+ signBits = signBits | ParallelMath::SelectOrZero(errorOneLess, ParallelMath::MakeUInt16(1 << px));
+ }
+ he.signBits[ci] = signBits;
+ }
+
+ int maxUniqueColorCombos = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int numUniqueColorCombos = ParallelMath::Extract(he.numUniqueColors[0], block) * ParallelMath::Extract(he.numUniqueColors[1], block);
+ if (numUniqueColorCombos > maxUniqueColorCombos)
+ maxUniqueColorCombos = numUniqueColorCombos;
+ }
+
+ MUInt15 indexes[2] = { zero15, zero15 };
+ MUInt15 maxIndex[2] = { he.numUniqueColors[0] - ParallelMath::MakeUInt15(1), he.numUniqueColors[1] - ParallelMath::MakeUInt15(1) };
+
+ int block1Starts[ParallelMath::ParallelSize];
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ block1Starts[block] = ParallelMath::Extract(he.numUniqueColors[0], block);
+
+ for (int combo = 0; combo < maxUniqueColorCombos; combo++)
+ {
+ MUInt15 index0 = indexes[0] + ParallelMath::MakeUInt15(1);
+ ParallelMath::Int16CompFlag index0Overflow = ParallelMath::Less(maxIndex[0], index0);
+ ParallelMath::ConditionalSet(index0, index0Overflow, ParallelMath::MakeUInt15(0));
+
+ MUInt15 index1 = ParallelMath::Min(maxIndex[1], indexes[1] + ParallelMath::SelectOrZero(index0Overflow, ParallelMath::MakeUInt15(1)));
+ indexes[0] = index0;
+ indexes[1] = index1;
+
+ int ci0[ParallelMath::ParallelSize];
+ int ci1[ParallelMath::ParallelSize];
+ MUInt15 color0;
+ MUInt15 color1;
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ ci0[block] = ParallelMath::Extract(index0, block);
+ ci1[block] = ParallelMath::Extract(index1, block) + block1Starts[block];
+ ParallelMath::PutUInt15(color0, block, ParallelMath::Extract(he.uniqueQuantizedColors[ci0[block]], block));
+ ParallelMath::PutUInt15(color1, block, ParallelMath::Extract(he.uniqueQuantizedColors[ci1[block]], block));
+ }
+
+ MFloat totalError = ParallelMath::MakeFloatZero();
+ MUInt16 sectorBits = ParallelMath::MakeUInt16(0);
+ MUInt16 signBits = ParallelMath::MakeUInt16(0);
+ for (int px = 0; px < 16; px++)
+ {
+ MFloat errorCI0;
+ MFloat errorCI1;
+ MUInt16 signBits0;
+ MUInt16 signBits1;
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ ParallelMath::PutFloat(errorCI0, block, ParallelMath::Extract(he.errors[ci0[block]][px], block));
+ ParallelMath::PutFloat(errorCI1, block, ParallelMath::Extract(he.errors[ci1[block]][px], block));
+ ParallelMath::PutUInt16(signBits0, block, ParallelMath::Extract(he.signBits[ci0[block]], block));
+ ParallelMath::PutUInt16(signBits1, block, ParallelMath::Extract(he.signBits[ci1[block]], block));
+ }
+
+ totalError = totalError + ParallelMath::Min(errorCI0, errorCI1);
+
+ MUInt16 bitPosition = ParallelMath::MakeUInt16(1 << px);
+
+ ParallelMath::Int16CompFlag error1Better = ParallelMath::FloatFlagToInt16(ParallelMath::Less(errorCI1, errorCI0));
+
+ sectorBits = sectorBits | ParallelMath::SelectOrZero(error1Better, bitPosition);
+ signBits = signBits | (bitPosition & ParallelMath::Select(error1Better, signBits1, signBits0));
+ }
+
+ ParallelMath::FloatCompFlag totalErrorBetter = ParallelMath::Less(totalError, bestError);
+ ParallelMath::Int16CompFlag totalErrorBetter16 = ParallelMath::FloatFlagToInt16(totalErrorBetter);
+ if (ParallelMath::AnySet(totalErrorBetter16))
+ {
+ bestIsThisMode = bestIsThisMode | totalErrorBetter16;
+ ParallelMath::ConditionalSet(bestTable, totalErrorBetter16, ParallelMath::MakeUInt15(table));
+ ParallelMath::ConditionalSet(bestColors[0], totalErrorBetter16, color0);
+ ParallelMath::ConditionalSet(bestColors[1], totalErrorBetter16, color1);
+ ParallelMath::ConditionalSet(bestSectorBits, totalErrorBetter16, sectorBits);
+ ParallelMath::ConditionalSet(bestSignBits, totalErrorBetter16, signBits);
+ bestError = ParallelMath::Min(totalError, bestError);
+ }
+ }
+ }
+
+ if (ParallelMath::AnySet(bestIsThisMode))
+ {
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (!ParallelMath::Extract(bestIsThisMode, block))
+ continue;
+
+ ParallelMath::ScalarUInt16 blockBestColors[2] = { ParallelMath::Extract(bestColors[0], block), ParallelMath::Extract(bestColors[1], block) };
+ ParallelMath::ScalarUInt16 blockBestSectorBits = ParallelMath::Extract(bestSectorBits, block);
+ ParallelMath::ScalarUInt16 blockBestSignBits = ParallelMath::Extract(bestSignBits, block);
+ ParallelMath::ScalarUInt16 blockBestTable = ParallelMath::Extract(bestTable, block);
+
+ EmitHModeBlock(outputBuffer + block * 8, blockBestColors, blockBestSectorBits, blockBestSignBits, blockBestTable, true);
+ }
+ }
+}
+
+void cvtt::Internal::ETCComputer::EncodeVirtualTModePunchthrough(uint8_t *outputBuffer, MFloat &bestError, const ParallelMath::Int16CompFlag isIsolatedBase[16], const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const ParallelMath::Int16CompFlag isTransparent[16], const ParallelMath::Int16CompFlag& anyTransparent, const ParallelMath::Int16CompFlag& allTransparent, const Options &options)
+{
+ // We treat T and H mode as the same mode ("Virtual T mode") with punchthrough, because of how the colors work:
+ //
+ // T mode: C1, C2+M, Transparent, C2-M
+ // H mode: C1+M, C1-M, Transparent, C2-M
+ //
+ // So in either case, we have 2 colors +/- a modifier, and a third unique color, which is basically T mode except without the middle color.
+ // The only thing that matters is whether it's better to store the isolated color as T mode color 1, or store it offset in H mode color 2.
+ //
+ // Sometimes it won't even be possible to store it in H mode color 2 because the table low bit derives from a numeric comparison of the colors,
+ // but unlike opaque blocks, we can't flip them.
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ ParallelMath::FloatCompFlag isTransparentF[16];
+ for (int px = 0; px < 16; px++)
+ isTransparentF[px] = ParallelMath::Int16FlagToFloat(isTransparent[px]);
+
+ ParallelMath::Int16CompFlag bestIsThisMode = ParallelMath::MakeBoolInt16(false);
+ ParallelMath::Int16CompFlag bestIsHMode = ParallelMath::MakeBoolInt16(false);
+
+ MUInt15 isolatedTotal[3] = { ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0) };
+ MUInt15 lineTotal[3] = { ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0) };
+
+ MUInt15 numPixelsIsolated = ParallelMath::MakeUInt15(0);
+ MUInt15 numPixelsLine = ParallelMath::MakeUInt15(0);
+
+ ParallelMath::Int16CompFlag isIsolated[16];
+ ParallelMath::Int16CompFlag isLine[16];
+
+ for (unsigned int px = 0; px < 16; px++)
+ {
+ ParallelMath::Int16CompFlag isOpaque = ParallelMath::Not(isTransparent[px]);
+ isIsolated[px] = isIsolatedBase[px] & isOpaque;
+ isLine[px] = ParallelMath::Not(isIsolatedBase[px]) & isOpaque;
+ }
+
+ for (unsigned int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ isolatedTotal[ch] = isolatedTotal[ch] + ParallelMath::SelectOrZero(isIsolated[px], pixels[px][ch]);
+ lineTotal[ch] = lineTotal[ch] + ParallelMath::SelectOrZero(isLine[px], pixels[px][ch]);
+ }
+ numPixelsIsolated = numPixelsIsolated + ParallelMath::SelectOrZero(isIsolated[px], ParallelMath::MakeUInt15(1));
+ numPixelsLine = numPixelsLine + ParallelMath::SelectOrZero(isLine[px], ParallelMath::MakeUInt15(1));
+ }
+
+ MUInt15 isolatedAverageQuantized[3];
+ MUInt15 hModeIsolatedQuantized[8][3];
+ MUInt15 isolatedAverageTargets[3];
+ {
+ int divisors[ParallelMath::ParallelSize];
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ divisors[block] = ParallelMath::Extract(numPixelsIsolated, block) * 34;
+
+ MUInt15 addend = (numPixelsIsolated << 4) | numPixelsIsolated;
+ for (int ch = 0; ch < 3; ch++)
+ {
+ // isolatedAverageQuantized[ch] = (isolatedTotal[ch] * 2 + numPixelsIsolated * 17) / (numPixelsIsolated * 34);
+
+ MUInt15 numerator = isolatedTotal[ch] + isolatedTotal[ch];
+ if (!isFakeBT709)
+ numerator = numerator + addend;
+
+ MUInt15 hModeIsolatedNumerators[8];
+ for (int table = 0; table < 8; table++)
+ {
+ // FIXME: Handle fake BT.709 correctly
+ MUInt15 offsetTotal = isolatedTotal[ch] + ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(ParallelMath::MakeUInt15(cvtt::Tables::ETC2::g_thModifierTable[table]), numPixelsIsolated));
+
+ hModeIsolatedNumerators[table] = (offsetTotal + offsetTotal) + addend;
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int divisor = divisors[block];
+ if (divisor == 0)
+ {
+ ParallelMath::PutUInt15(isolatedAverageQuantized[ch], block, 0);
+ for (int table = 0; table < 8; table++)
+ ParallelMath::PutUInt15(hModeIsolatedQuantized[table][ch], block, 0);
+ }
+ else
+ {
+ ParallelMath::PutUInt15(isolatedAverageQuantized[ch], block, ParallelMath::Extract(numerator, block) / divisor);
+ for (int table = 0; table < 8; table++)
+ ParallelMath::PutUInt15(hModeIsolatedQuantized[table][ch], block, ParallelMath::Extract(hModeIsolatedNumerators[table], block) / divisor);
+ }
+ }
+
+ isolatedAverageTargets[ch] = numerator;
+ }
+ }
+
+ if (isFakeBT709)
+ ResolveTHFakeBT709Rounding(isolatedAverageQuantized, isolatedAverageTargets, numPixelsIsolated);
+
+ for (int table = 0; table < 8; table++)
+ for (int ch = 0; ch < 3; ch++)
+ hModeIsolatedQuantized[table][ch] = ParallelMath::Min(ParallelMath::MakeUInt15(15), hModeIsolatedQuantized[table][ch]);
+
+ MUInt15 isolatedColor[3];
+ for (int ch = 0; ch < 3; ch++)
+ isolatedColor[ch] = (isolatedAverageQuantized[ch]) | (isolatedAverageQuantized[ch] << 4);
+
+ MFloat isolatedError[16];
+ for (int px = 0; px < 16; px++)
+ {
+ if (isFakeBT709)
+ isolatedError[px] = ComputeErrorFakeBT709(isolatedColor, preWeightedPixels[px]);
+ else if (isUniform)
+ isolatedError[px] = ComputeErrorUniform(pixels[px], isolatedColor);
+ else
+ isolatedError[px] = ComputeErrorWeighted(isolatedColor, preWeightedPixels[px], options);
+
+ ParallelMath::ConditionalSet(isolatedError[px], isTransparentF[px], ParallelMath::MakeFloatZero());
+ }
+
+ MSInt32 bestSelectors = ParallelMath::MakeSInt32(0);
+ MUInt15 bestTable = ParallelMath::MakeUInt15(0);
+ MUInt15 bestLineColor = ParallelMath::MakeUInt15(0);
+ MUInt15 bestIsolatedColor = ParallelMath::MakeUInt15(0);
+ MUInt15 bestHModeColor2 = ParallelMath::MakeUInt15(0);
+ ParallelMath::Int16CompFlag bestUseHMode = ParallelMath::MakeBoolInt16(false);
+
+ MSInt16 maxLine = ParallelMath::LosslessCast<MSInt16>::Cast(numPixelsLine);
+ MSInt16 minLine = ParallelMath::MakeSInt16(0) - maxLine;
+
+ int16_t clusterMaxLine = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int16_t blockMaxLine = ParallelMath::Extract(maxLine, block);
+ if (blockMaxLine > clusterMaxLine)
+ clusterMaxLine = blockMaxLine;
+ }
+
+ int16_t clusterMinLine = -clusterMaxLine;
+
+ int lineDivisors[ParallelMath::ParallelSize];
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ lineDivisors[block] = ParallelMath::Extract(numPixelsLine, block) * 34;
+
+ MUInt15 lineAddend = (numPixelsLine << 4) | numPixelsLine;
+
+ for (int table = 0; table < 8; table++)
+ {
+ int numUniqueColors[ParallelMath::ParallelSize];
+ MUInt15 uniqueQuantizedColors[31];
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ numUniqueColors[block] = 0;
+
+ MUInt15 modifier = ParallelMath::MakeUInt15(cvtt::Tables::ETC2::g_thModifierTable[table]);
+ MUInt15 modifierOffset = (modifier + modifier);
+
+ for (int16_t offsetPremultiplier = clusterMinLine; offsetPremultiplier <= clusterMaxLine; offsetPremultiplier += 2)
+ {
+ MSInt16 clampedOffsetPremultiplier = ParallelMath::Max(minLine, ParallelMath::Min(maxLine, ParallelMath::MakeSInt16(offsetPremultiplier)));
+ MSInt16 modifierAddend = ParallelMath::CompactMultiply(clampedOffsetPremultiplier, modifierOffset);
+
+ MUInt15 quantized[3];
+ if (isFakeBT709)
+ {
+ MUInt15 targets[3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ //quantized[ch] = std::min<int16_t>(15, std::max(0, (lineTotal[ch] * 2 + modifierOffset * offsetPremultiplier)) / (numDAIILine * 34));
+ MUInt15 numerator = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(lineTotal[ch] + lineTotal[ch]) + modifierAddend));
+ MUInt15 divided = ParallelMath::MakeUInt15(0);
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int divisor = lineDivisors[block];
+ if (divisor == 0)
+ ParallelMath::PutUInt15(divided, block, 0);
+ else
+ ParallelMath::PutUInt15(divided, block, ParallelMath::Extract(numerator, block) / divisor);
+ }
+ quantized[ch] = ParallelMath::Min(ParallelMath::MakeUInt15(15), divided);
+ targets[ch] = numerator;
+ }
+
+ ResolveTHFakeBT709Rounding(quantized, targets, numPixelsLine);
+ }
+ else
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ //quantized[ch] = std::min<int16_t>(15, std::max(0, (lineTotal[ch] * 2 + numDAIILine * 17 + modifierOffset * offsetPremultiplier)) / (numDAIILine * 34));
+ MUInt15 numerator = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(lineTotal[ch] + lineTotal[ch] + lineAddend) + modifierAddend));
+ MUInt15 divided = ParallelMath::MakeUInt15(0);
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int divisor = lineDivisors[block];
+ if (divisor == 0)
+ ParallelMath::PutUInt15(divided, block, 0);
+ else
+ ParallelMath::PutUInt15(divided, block, ParallelMath::Extract(numerator, block) / divisor);
+ }
+ quantized[ch] = ParallelMath::Min(ParallelMath::MakeUInt15(15), divided);
+ }
+ }
+
+ MUInt15 packedColor = (quantized[0] << 10) | (quantized[1] << 5) | quantized[2];
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t blockPackedColor = ParallelMath::Extract(packedColor, block);
+ if (numUniqueColors[block] == 0 || blockPackedColor != ParallelMath::Extract(uniqueQuantizedColors[numUniqueColors[block] - 1], block))
+ ParallelMath::PutUInt15(uniqueQuantizedColors[numUniqueColors[block]++], block, blockPackedColor);
+ }
+ }
+
+ // Stripe unfilled unique colors
+ int maxUniqueColors = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (numUniqueColors[block] > maxUniqueColors)
+ maxUniqueColors = numUniqueColors[block];
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t fillColor = ParallelMath::Extract(uniqueQuantizedColors[0], block);
+
+ int numUnique = numUniqueColors[block];
+ for (int fill = numUnique + 1; fill < maxUniqueColors; fill++)
+ ParallelMath::PutUInt15(uniqueQuantizedColors[fill], block, fillColor);
+ }
+
+ MFloat hModeErrors[16];
+ MUInt15 hModeUnquantizedColor[3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 quantizedChannel = hModeIsolatedQuantized[table][ch];
+
+ MUInt15 unquantizedCh = (quantizedChannel << 4) | quantizedChannel;
+ hModeUnquantizedColor[ch] = ParallelMath::ToUInt15(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(unquantizedCh) - ParallelMath::LosslessCast<MSInt16>::Cast(modifier)));
+ }
+
+ for (int px = 0; px < 16; px++)
+ {
+ hModeErrors[px] = isUniform ? ComputeErrorUniform(hModeUnquantizedColor, pixels[px]) : ComputeErrorWeighted(hModeUnquantizedColor, preWeightedPixels[px], options);
+ ParallelMath::ConditionalSet(hModeErrors[px], isTransparentF[px], ParallelMath::MakeFloatZero());
+ }
+
+ MUInt15 packedHModeColor2 = (hModeIsolatedQuantized[table][0] << 10) | (hModeIsolatedQuantized[table][1] << 5) | hModeIsolatedQuantized[table][2];
+ ParallelMath::Int16CompFlag tableLowBitIsZero = ((table & 1) == 0) ? ParallelMath::MakeBoolInt16(true) : ParallelMath::MakeBoolInt16(false);
+
+ for (int ci = 0; ci < maxUniqueColors; ci++)
+ {
+ MUInt15 lineColors[2][3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 quantizedChannel = (ParallelMath::RightShift(uniqueQuantizedColors[ci], 10 - (ch * 5)) & ParallelMath::MakeUInt15(15));
+
+ MUInt15 unquantizedColor = (quantizedChannel << 4) | quantizedChannel;
+ lineColors[0][ch] = ParallelMath::Min(ParallelMath::MakeUInt15(255), unquantizedColor + modifier);
+ lineColors[1][ch] = ParallelMath::ToUInt15(ParallelMath::Max(ParallelMath::MakeSInt16(0), ParallelMath::LosslessCast<MSInt16>::Cast(unquantizedColor) - ParallelMath::LosslessCast<MSInt16>::Cast(modifier)));
+ }
+
+ MUInt15 bestLineSelector[16];
+ MFloat bestLineError[16];
+ for (int px = 0; px < 16; px++)
+ {
+ MFloat lineErrors[2];
+ for (int i = 0; i < 2; i++)
+ lineErrors[i] = isUniform ? ComputeErrorUniform(lineColors[i], pixels[px]) : ComputeErrorWeighted(lineColors[i], preWeightedPixels[px], options);
+
+ ParallelMath::Int16CompFlag firstIsBetter = ParallelMath::FloatFlagToInt16(ParallelMath::LessOrEqual(lineErrors[0], lineErrors[1]));
+ bestLineSelector[px] = ParallelMath::Select(firstIsBetter, ParallelMath::MakeUInt15(1), ParallelMath::MakeUInt15(3));
+ bestLineError[px] = ParallelMath::Min(lineErrors[0], lineErrors[1]);
+
+ ParallelMath::ConditionalSet(bestLineError[px], isTransparentF[px], ParallelMath::MakeFloatZero());
+ }
+
+ // One case considered here was if it was possible to force H mode to be valid when the line color is unused.
+ // That case isn't actually useful because it's equivalent to the isolated color being unused at maximum offset,
+ // which is always checked after a swap.
+ MFloat tModeError = ParallelMath::MakeFloatZero();
+ MFloat hModeError = ParallelMath::MakeFloatZero();
+ for (int px = 0; px < 16; px++)
+ {
+ tModeError = tModeError + ParallelMath::Min(bestLineError[px], isolatedError[px]);
+ hModeError = hModeError + ParallelMath::Min(bestLineError[px], hModeErrors[px]);
+ }
+
+ ParallelMath::FloatCompFlag hLessError = ParallelMath::Less(hModeError, tModeError);
+
+ MUInt15 packedHModeColor1 = uniqueQuantizedColors[ci];
+
+ ParallelMath::Int16CompFlag hModeTableLowBitMustBeZero = ParallelMath::Less(packedHModeColor1, packedHModeColor2);
+
+ ParallelMath::Int16CompFlag hModeIsLegal = ParallelMath::Equal(hModeTableLowBitMustBeZero, tableLowBitIsZero);
+ ParallelMath::Int16CompFlag useHMode = ParallelMath::FloatFlagToInt16(hLessError) & hModeIsLegal;
+
+ MFloat roundBestError = tModeError;
+ ParallelMath::ConditionalSet(roundBestError, ParallelMath::Int16FlagToFloat(useHMode), hModeError);
+
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(roundBestError, bestError));
+ ParallelMath::FloatCompFlag useHModeF = ParallelMath::Int16FlagToFloat(useHMode);
+
+ if (ParallelMath::AnySet(errorBetter))
+ {
+ MSInt32 selectors = ParallelMath::MakeSInt32(0);
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 selector = bestLineSelector[px];
+
+ MFloat isolatedPixelError = ParallelMath::Select(useHModeF, hModeErrors[px], isolatedError[px]);
+ ParallelMath::Int16CompFlag isolatedBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(isolatedPixelError, bestLineError[px]));
+
+ ParallelMath::ConditionalSet(selector, isolatedBetter, ParallelMath::MakeUInt15(0));
+ ParallelMath::ConditionalSet(selector, isTransparent[px], ParallelMath::MakeUInt15(2));
+ selectors = selectors | (ParallelMath::ToInt32(selector) << (px * 2));
+ }
+
+ bestError = ParallelMath::Min(bestError, roundBestError);
+ ParallelMath::ConditionalSet(bestLineColor, errorBetter, uniqueQuantizedColors[ci]);
+ ParallelMath::ConditionalSet(bestSelectors, errorBetter, selectors);
+ ParallelMath::ConditionalSet(bestTable, errorBetter, ParallelMath::MakeUInt15(table));
+ ParallelMath::ConditionalSet(bestIsHMode, errorBetter, useHMode);
+ ParallelMath::ConditionalSet(bestHModeColor2, errorBetter, packedHModeColor2);
+
+ bestIsThisMode = bestIsThisMode | errorBetter;
+ }
+ }
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (ParallelMath::Extract(bestIsThisMode, block))
+ {
+ uint32_t lowBits = 0;
+ uint32_t highBits = 0;
+
+ uint16_t blockBestLineColor = ParallelMath::Extract(bestLineColor, block);
+ ParallelMath::ScalarUInt16 blockIsolatedAverageQuantized[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ blockIsolatedAverageQuantized[ch] = ParallelMath::Extract(isolatedAverageQuantized[ch], block);
+
+ uint16_t blockBestTable = ParallelMath::Extract(bestTable, block);
+ int32_t blockBestSelectors = ParallelMath::Extract(bestSelectors, block);
+
+ ParallelMath::ScalarUInt16 lineColor[3];
+ for (int ch = 0; ch < 3; ch++)
+ lineColor[ch] = (blockBestLineColor >> (10 - (ch * 5))) & 15;
+
+ if (ParallelMath::Extract(bestIsHMode, block))
+ {
+ // T mode: C1, C2+M, Transparent, C2-M
+ // H mode: C1+M, C1-M, Transparent, C2-M
+ static const ParallelMath::ScalarUInt16 selectorRemapSector[4] = { 1, 0, 1, 0 };
+ static const ParallelMath::ScalarUInt16 selectorRemapSign[4] = { 1, 0, 0, 1 };
+
+ // Remap selectors
+ ParallelMath::ScalarUInt16 signBits = 0;
+ ParallelMath::ScalarUInt16 sectorBits = 0;
+ int32_t blockBestSelectors = ParallelMath::Extract(bestSelectors, block);
+ for (int px = 0; px < 16; px++)
+ {
+ int32_t selector = (blockBestSelectors >> (px * 2)) & 3;
+ sectorBits |= (selectorRemapSector[selector] << px);
+ signBits |= (selectorRemapSign[selector] << px);
+ }
+
+ ParallelMath::ScalarUInt16 blockColors[2] = { blockBestLineColor, ParallelMath::Extract(bestHModeColor2, block) };
+
+ EmitHModeBlock(outputBuffer + block * 8, blockColors, sectorBits, signBits, blockBestTable, false);
+ }
+ else
+ EmitTModeBlock(outputBuffer + block * 8, lineColor, blockIsolatedAverageQuantized, blockBestSelectors, blockBestTable, false);
+ }
+ }
+}
+
+
+cvtt::ParallelMath::UInt15 cvtt::Internal::ETCComputer::DecodePlanarCoeff(const MUInt15 &coeff, int ch)
+{
+ if (ch == 1)
+ return (coeff << 1) | (ParallelMath::RightShift(coeff, 6));
+ else
+ return (coeff << 2) | (ParallelMath::RightShift(coeff, 4));
+}
+
+void cvtt::Internal::ETCComputer::EncodePlanar(uint8_t *outputBuffer, MFloat &bestError, const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const Options &options)
+{
+ // NOTE: If it's desired to do this in another color space, the best way to do it would probably be
+ // to do everything in that color space and then transform it back to RGB.
+
+ // We compute H = (H-O)/4 and V= (V-O)/4 to simplify the math
+
+ // error = (x*H + y*V + O - C)^2
+ MFloat h[3] = { ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero() };
+ MFloat v[3] = { ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero() };
+ MFloat o[3] = { ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero() };
+
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+
+ MFloat totalError = ParallelMath::MakeFloatZero();
+ MUInt15 bestCoeffs[3][3]; // [Channel][Coeff]
+ for (int ch = 0; ch < 3; ch++)
+ {
+ float fhh = 0.f;
+ float fho = 0.f;
+ float fhv = 0.f;
+ float foo = 0.f;
+ float fov = 0.f;
+ float fvv = 0.f;
+ MFloat fc = ParallelMath::MakeFloatZero();
+ MFloat fh = ParallelMath::MakeFloatZero();
+ MFloat fv = ParallelMath::MakeFloatZero();
+ MFloat fo = ParallelMath::MakeFloatZero();
+
+ float &foh = fho;
+ float &fvh = fhv;
+ float &fvo = fov;
+
+ for (int px = 0; px < 16; px++)
+ {
+ float x = static_cast<float>(px % 4);
+ float y = static_cast<float>(px / 4);
+ MFloat c = isFakeBT709 ? preWeightedPixels[px][ch] : ParallelMath::ToFloat(pixels[px][ch]);
+
+ // (x*H + y*V + O - C)^2
+ fhh += x * x;
+ fhv += x * y;
+ fho += x;
+ fh = fh - c * x;
+
+ fvh += y * x;
+ fvv += y * y;
+ fvo += y;
+ fv = fv - c * y;
+
+ foh += x;
+ fov += y;
+ foo += 1;
+ fo = fo - c;
+
+ fh = fh - c * x;
+ fv = fv - c * y;
+ fo = fo - c;
+ fc = fc + c * c;
+ }
+
+ //float totalError = fhh * h * h + fho * h*o + fhv * h*v + foo * o * o + fov * o*v + fvv * v * v + fh * h + fv * v + fo * o + fc;
+
+ // error = fhh*h^2 + fho*h*o + fhv*h*v + foo*o^2 + fov*o*v + fvv*v^2 + fh*h + fv*v + fo*o + fc
+ // derror/dh = 2*fhh*h + fho*o + fhv*v + fh
+ // derror/dv = fhv*h + fov*o + 2*fvv*v + fv
+ // derror/do = fho*h + 2*foo*o + fov*v + fo
+
+ // Solve system of equations
+ // h o v 1 = 0
+ // -------
+ // d e f g R0
+ // i j k l R1
+ // m n p q R2
+
+ float d = 2.0f * fhh;
+ float e = fho;
+ float f = fhv;
+ MFloat gD = fh;
+
+ float i = fhv;
+ float j = fov;
+ float k = 2.0f * fvv;
+ MFloat lD = fv;
+
+ float m = fho;
+ float n = 2.0f * foo;
+ float p = fov;
+ MFloat qD = fo;
+
+ {
+ // Factor out first column from R1 and R2
+ float r0to1 = -i / d;
+ float r0to2 = -m / d;
+
+ // 0 j1 k1 l1D
+ float j1 = j + r0to1 * e;
+ float k1 = k + r0to1 * f;
+ MFloat l1D = lD + gD * r0to1;
+
+ // 0 n1 p1 q1D
+ float n1 = n + r0to2 * e;
+ float p1 = p + r0to2 * f;
+ MFloat q1D = qD + gD * r0to2;
+
+ // Factor out third column from R2
+ float r1to2 = -p1 / k1;
+
+ // 0 n2 0 q2D
+ float n2 = n1 + r1to2 * j1;
+ MFloat q2D = q1D + l1D * r1to2;
+
+ o[ch] = -q2D / n2;
+
+ // Factor out second column from R1
+ // 0 n2 0 q2D
+
+ float r2to1 = -j1 / n2;
+
+ // 0 0 k1 l2D
+ // 0 n2 0 q2D
+ MFloat l2D = l1D + q2D * r2to1;
+
+ float elim2 = -f / k1;
+ float elim1 = -e / n2;
+
+ // d 0 0 g2D
+ MFloat g2D = gD + l2D * elim2 + q2D * elim1;
+
+ // n2*o + q2 = 0
+ // o = -q2 / n2
+ h[ch] = -g2D / d;
+ v[ch] = -l2D / k1;
+ }
+
+ // Undo the local transformation
+ h[ch] = h[ch] * 4.0f + o[ch];
+ v[ch] = v[ch] * 4.0f + o[ch];
+ }
+
+ if (isFakeBT709)
+ {
+ MFloat oRGB[3];
+ MFloat hRGB[3];
+ MFloat vRGB[3];
+
+ ConvertFromFakeBT709(oRGB, o);
+ ConvertFromFakeBT709(hRGB, h);
+ ConvertFromFakeBT709(vRGB, v);
+
+ // Twiddling in fake BT.607 is a mess, just round off for now (the precision is pretty good anyway)
+ {
+ ParallelMath::RoundTowardNearestForScope rtn;
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MFloat fcoeffs[3] = { oRGB[ch], hRGB[ch], vRGB[ch] };
+
+ for (int c = 0; c < 3; c++)
+ {
+ MFloat coeff = ParallelMath::Max(ParallelMath::MakeFloatZero(), fcoeffs[c]);
+ if (ch == 1)
+ coeff = ParallelMath::Min(ParallelMath::MakeFloat(127.0f), coeff * (127.0f / 255.0f));
+ else
+ coeff = ParallelMath::Min(ParallelMath::MakeFloat(63.0f), coeff * (63.0f / 255.0f));
+ fcoeffs[c] = coeff;
+ }
+
+ for (int c = 0; c < 3; c++)
+ bestCoeffs[ch][c] = ParallelMath::RoundAndConvertToU15(fcoeffs[c], &rtn);
+ }
+ }
+
+ MUInt15 reconstructed[16][3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 dO = DecodePlanarCoeff(bestCoeffs[ch][0], ch);
+ MUInt15 dH = DecodePlanarCoeff(bestCoeffs[ch][1], ch);
+ MUInt15 dV = DecodePlanarCoeff(bestCoeffs[ch][2], ch);
+
+ MSInt16 hMinusO = ParallelMath::LosslessCast<MSInt16>::Cast(dH) - ParallelMath::LosslessCast<MSInt16>::Cast(dO);
+ MSInt16 vMinusO = ParallelMath::LosslessCast<MSInt16>::Cast(dV) - ParallelMath::LosslessCast<MSInt16>::Cast(dO);
+
+ MFloat error = ParallelMath::MakeFloatZero();
+
+ MSInt16 addend = ParallelMath::LosslessCast<MSInt16>::Cast(dO << 2) + 2;
+
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 pxv = ParallelMath::MakeUInt15(px);
+ MSInt16 x = ParallelMath::LosslessCast<MSInt16>::Cast(pxv & ParallelMath::MakeUInt15(3));
+ MSInt16 y = ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::RightShift(pxv, 2));
+
+ MSInt16 interpolated = ParallelMath::RightShift(ParallelMath::CompactMultiply(x, hMinusO) + ParallelMath::CompactMultiply(y, vMinusO) + addend, 2);
+ MUInt15 clampedLow = ParallelMath::ToUInt15(ParallelMath::Max(ParallelMath::MakeSInt16(0), interpolated));
+ reconstructed[px][ch] = ParallelMath::Min(ParallelMath::MakeUInt15(255), clampedLow);
+ }
+ }
+
+ totalError = ParallelMath::MakeFloatZero();
+ for (int px = 0; px < 16; px++)
+ totalError = totalError + ComputeErrorFakeBT709(reconstructed[px], preWeightedPixels[px]);
+ }
+ else
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MFloat fcoeffs[3] = { o[ch], h[ch], v[ch] };
+ MUInt15 coeffRanges[3][2];
+
+ for (int c = 0; c < 3; c++)
+ {
+ MFloat coeff = ParallelMath::Max(ParallelMath::MakeFloatZero(), fcoeffs[c]);
+ if (ch == 1)
+ coeff = ParallelMath::Min(ParallelMath::MakeFloat(127.0f), coeff * (127.0f / 255.0f));
+ else
+ coeff = ParallelMath::Min(ParallelMath::MakeFloat(63.0f), coeff * (63.0f / 255.0f));
+ fcoeffs[c] = coeff;
+ }
+
+ {
+ ParallelMath::RoundDownForScope rd;
+ for (int c = 0; c < 3; c++)
+ coeffRanges[c][0] = ParallelMath::RoundAndConvertToU15(fcoeffs[c], &rd);
+ }
+
+ {
+ ParallelMath::RoundUpForScope ru;
+ for (int c = 0; c < 3; c++)
+ coeffRanges[c][1] = ParallelMath::RoundAndConvertToU15(fcoeffs[c], &ru);
+ }
+
+ MFloat bestChannelError = ParallelMath::MakeFloat(FLT_MAX);
+ for (int io = 0; io < 2; io++)
+ {
+ MUInt15 dO = DecodePlanarCoeff(coeffRanges[0][io], ch);
+
+ for (int ih = 0; ih < 2; ih++)
+ {
+ MUInt15 dH = DecodePlanarCoeff(coeffRanges[1][ih], ch);
+ MSInt16 hMinusO = ParallelMath::LosslessCast<MSInt16>::Cast(dH) - ParallelMath::LosslessCast<MSInt16>::Cast(dO);
+
+ for (int iv = 0; iv < 2; iv++)
+ {
+ MUInt15 dV = DecodePlanarCoeff(coeffRanges[2][iv], ch);
+ MSInt16 vMinusO = ParallelMath::LosslessCast<MSInt16>::Cast(dV) - ParallelMath::LosslessCast<MSInt16>::Cast(dO);
+
+ MFloat error = ParallelMath::MakeFloatZero();
+
+ MSInt16 addend = ParallelMath::LosslessCast<MSInt16>::Cast(dO << 2) + 2;
+
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 pxv = ParallelMath::MakeUInt15(px);
+ MSInt16 x = ParallelMath::LosslessCast<MSInt16>::Cast(pxv & ParallelMath::MakeUInt15(3));
+ MSInt16 y = ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::RightShift(pxv, 2));
+
+ MSInt16 interpolated = ParallelMath::RightShift(ParallelMath::CompactMultiply(x, hMinusO) + ParallelMath::CompactMultiply(y, vMinusO) + addend, 2);
+ MUInt15 clampedLow = ParallelMath::ToUInt15(ParallelMath::Max(ParallelMath::MakeSInt16(0), interpolated));
+ MUInt15 dec = ParallelMath::Min(ParallelMath::MakeUInt15(255), clampedLow);
+
+ MSInt16 delta = ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px][ch]) - ParallelMath::LosslessCast<MSInt16>::Cast(dec);
+
+ MFloat deltaF = ParallelMath::ToFloat(delta);
+ error = error + deltaF * deltaF;
+ }
+
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, bestChannelError));
+ if (ParallelMath::AnySet(errorBetter))
+ {
+ bestChannelError = ParallelMath::Min(error, bestChannelError);
+ ParallelMath::ConditionalSet(bestCoeffs[ch][0], errorBetter, coeffRanges[0][io]);
+ ParallelMath::ConditionalSet(bestCoeffs[ch][1], errorBetter, coeffRanges[1][ih]);
+ ParallelMath::ConditionalSet(bestCoeffs[ch][2], errorBetter, coeffRanges[2][iv]);
+ }
+ }
+ }
+ }
+
+ if (!isUniform)
+ {
+ switch (ch)
+ {
+ case 0:
+ bestChannelError = bestChannelError * (options.redWeight * options.redWeight);
+ break;
+ case 1:
+ bestChannelError = bestChannelError * (options.greenWeight * options.greenWeight);
+ break;
+ case 2:
+ bestChannelError = bestChannelError * (options.blueWeight * options.blueWeight);
+ break;
+ default:
+ break;
+ }
+ }
+
+ totalError = totalError + bestChannelError;
+ }
+ }
+
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(totalError, bestError));
+ if (ParallelMath::AnySet(errorBetter))
+ {
+ bestError = ParallelMath::Min(bestError, totalError);
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (!ParallelMath::Extract(errorBetter, block))
+ continue;
+
+ int ro = ParallelMath::Extract(bestCoeffs[0][0], block);
+ int rh = ParallelMath::Extract(bestCoeffs[0][1], block);
+ int rv = ParallelMath::Extract(bestCoeffs[0][2], block);
+
+ int go = ParallelMath::Extract(bestCoeffs[1][0], block);
+ int gh = ParallelMath::Extract(bestCoeffs[1][1], block);
+ int gv = ParallelMath::Extract(bestCoeffs[1][2], block);
+
+ int bo = ParallelMath::Extract(bestCoeffs[2][0], block);
+ int bh = ParallelMath::Extract(bestCoeffs[2][1], block);
+ int bv = ParallelMath::Extract(bestCoeffs[2][2], block);
+
+ int go1 = go >> 6;
+ int go2 = go & 63;
+
+ int bo1 = bo >> 5;
+ int bo2 = (bo >> 3) & 3;
+ int bo3 = bo & 7;
+
+ int rh1 = (rh >> 1);
+ int rh2 = rh & 1;
+
+ int fakeR = ro >> 2;
+ int fakeDR = go1 | ((ro & 3) << 1);
+
+ int fakeG = (go2 >> 2);
+ int fakeDG = ((go2 & 3) << 1) | bo1;
+
+ int fakeB = bo2;
+ int fakeDB = bo3 >> 1;
+
+ uint32_t highBits = 0;
+ uint32_t lowBits = 0;
+
+ // Avoid overflowing R
+ if ((fakeDR & 4) != 0 && fakeR + fakeDR < 8)
+ highBits |= 1 << (63 - 32);
+
+ // Avoid overflowing G
+ if ((fakeDG & 4) != 0 && fakeG + fakeDG < 8)
+ highBits |= 1 << (55 - 32);
+
+ // Overflow B
+ if (fakeB + fakeDB < 4)
+ {
+ // Overflow low
+ highBits |= 1 << (42 - 32);
+ }
+ else
+ {
+ // Overflow high
+ highBits |= 7 << (45 - 32);
+ }
+
+ highBits |= ro << (57 - 32);
+ highBits |= go1 << (56 - 32);
+ highBits |= go2 << (49 - 32);
+ highBits |= bo1 << (48 - 32);
+ highBits |= bo2 << (43 - 32);
+ highBits |= bo3 << (39 - 32);
+ highBits |= rh1 << (34 - 32);
+ highBits |= 1 << (33 - 32);
+ highBits |= rh2 << (32 - 32);
+
+ lowBits |= gh << 25;
+ lowBits |= bh << 19;
+ lowBits |= rv << 13;
+ lowBits |= gv << 6;
+ lowBits |= bv << 0;
+
+ for (int i = 0; i < 4; i++)
+ outputBuffer[block * 8 + i] = (highBits >> (24 - i * 8)) & 0xff;
+ for (int i = 0; i < 4; i++)
+ outputBuffer[block * 8 + i + 4] = (lowBits >> (24 - i * 8)) & 0xff;
+ }
+ }
+}
+
+void cvtt::Internal::ETCComputer::CompressETC2Block(uint8_t *outputBuffer, const PixelBlockU8 *pixelBlocks, ETC2CompressionData *compressionData, const Options &options, bool punchthroughAlpha)
+{
+ ParallelMath::Int16CompFlag pixelIsTransparent[16];
+ ParallelMath::Int16CompFlag anyTransparent = ParallelMath::MakeBoolInt16(false);
+ ParallelMath::Int16CompFlag allTransparent = ParallelMath::MakeBoolInt16(true);
+
+ if (punchthroughAlpha)
+ {
+ const float fThreshold = std::max<float>(std::min<float>(1.0f, options.threshold), 0.0f) * 255.0f;
+
+ // +1.0f is intentional, we want to take the next valid integer (even if it's 256) since everything else lower is transparent
+ MUInt15 threshold = ParallelMath::MakeUInt15(static_cast<uint16_t>(std::floor(fThreshold + 1.0f)));
+
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 alpha;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ ParallelMath::PutUInt15(alpha, block, pixelBlocks[block].m_pixels[px][3]);
+
+ ParallelMath::Int16CompFlag isTransparent = ParallelMath::Less(alpha, threshold);
+ anyTransparent = (anyTransparent | isTransparent);
+ allTransparent = (allTransparent & isTransparent);
+ pixelIsTransparent[px] = isTransparent;
+ }
+ }
+ else
+ {
+ for (int px = 0; px < 16; px++)
+ pixelIsTransparent[px] = ParallelMath::MakeBoolInt16(false);
+
+ allTransparent = anyTransparent = ParallelMath::MakeBoolInt16(false);
+ }
+
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+
+ ETC2CompressionDataInternal* internalData = static_cast<ETC2CompressionDataInternal*>(compressionData);
+
+ MUInt15 pixels[16][3];
+ MFloat preWeightedPixels[16][3];
+ ExtractBlocks(pixels, preWeightedPixels, pixelBlocks, options);
+
+ if (ParallelMath::AnySet(anyTransparent))
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::Int16CompFlag flag = pixelIsTransparent[px];
+ ParallelMath::FloatCompFlag fflag = ParallelMath::Int16FlagToFloat(flag);
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ ParallelMath::ConditionalSet(pixels[px][ch], flag, ParallelMath::MakeUInt15(0));
+ ParallelMath::ConditionalSet(preWeightedPixels[px][ch], fflag, ParallelMath::MakeFloat(0.0f));
+ }
+ }
+ }
+
+ if (!ParallelMath::AllSet(allTransparent))
+ EncodePlanar(outputBuffer, bestError, pixels, preWeightedPixels, options);
+
+ MFloat chromaDelta[16][2];
+
+ MUInt15 numOpaque = ParallelMath::MakeUInt15(16);
+ for (int px = 0; px < 16; px++)
+ numOpaque = numOpaque - ParallelMath::SelectOrZero(pixelIsTransparent[px], ParallelMath::MakeUInt15(1));
+
+ if (options.flags & cvtt::Flags::Uniform)
+ {
+ MSInt16 chromaCoordinates3[16][2];
+ for (int px = 0; px < 16; px++)
+ {
+ chromaCoordinates3[px][0] = ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px][0]) - ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px][2]);
+ chromaCoordinates3[px][1] = ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px][0]) - ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px][1] << 1) + ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px][2]);
+ }
+
+ MSInt16 chromaCoordinateCentroid[2] = { ParallelMath::MakeSInt16(0), ParallelMath::MakeSInt16(0) };
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 2; ch++)
+ chromaCoordinateCentroid[ch] = chromaCoordinateCentroid[ch] + chromaCoordinates3[px][ch];
+ }
+
+ if (punchthroughAlpha)
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 2; ch++)
+ {
+ MUInt15 chromaCoordinateMultiplied = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(chromaCoordinates3[px][ch], numOpaque));
+ MSInt16 delta = ParallelMath::LosslessCast<MSInt16>::Cast(chromaCoordinateMultiplied) - chromaCoordinateCentroid[ch];
+ chromaDelta[px][ch] = ParallelMath::ToFloat(delta);
+ }
+ }
+ }
+ else
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 2; ch++)
+ chromaDelta[px][ch] = ParallelMath::ToFloat((chromaCoordinates3[px][ch] << 4) - chromaCoordinateCentroid[ch]);
+ }
+ }
+
+ const MFloat rcpSqrt3 = ParallelMath::MakeFloat(0.57735026918962576450914878050196f);
+
+ for (int px = 0; px < 16; px++)
+ chromaDelta[px][1] = chromaDelta[px][1] * rcpSqrt3;
+ }
+ else
+ {
+ const float chromaAxis0[3] = { internalData->m_chromaSideAxis0[0], internalData->m_chromaSideAxis0[1], internalData->m_chromaSideAxis0[2] };
+ const float chromaAxis1[3] = { internalData->m_chromaSideAxis1[0], internalData->m_chromaSideAxis1[1], internalData->m_chromaSideAxis1[2] };
+
+ MFloat chromaCoordinates3[16][2];
+ for (int px = 0; px < 16; px++)
+ {
+ const MFloat &px0 = preWeightedPixels[px][0];
+ const MFloat &px1 = preWeightedPixels[px][1];
+ const MFloat &px2 = preWeightedPixels[px][2];
+
+ chromaCoordinates3[px][0] = px0 * chromaAxis0[0] + px1 * chromaAxis0[1] + px2 * chromaAxis0[2];
+ chromaCoordinates3[px][1] = px0 * chromaAxis1[0] + px1 * chromaAxis1[1] + px2 * chromaAxis1[2];
+ }
+
+ MFloat chromaCoordinateCentroid[2] = { ParallelMath::MakeFloatZero(), ParallelMath::MakeFloatZero() };
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 2; ch++)
+ chromaCoordinateCentroid[ch] = chromaCoordinateCentroid[ch] + chromaCoordinates3[px][ch];
+ }
+
+ if (punchthroughAlpha)
+ {
+ const MFloat numOpaqueF = ParallelMath::ToFloat(numOpaque);
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 2; ch++)
+ {
+ MFloat chromaCoordinateMultiplied = chromaCoordinates3[px][ch] * numOpaqueF;
+ MFloat delta = chromaCoordinateMultiplied - chromaCoordinateCentroid[ch];
+ chromaDelta[px][ch] = delta;
+ }
+ }
+ }
+ else
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 2; ch++)
+ chromaDelta[px][ch] = chromaCoordinates3[px][ch] * 16.0f - chromaCoordinateCentroid[ch];
+ }
+ }
+ }
+
+
+ MFloat covXX = ParallelMath::MakeFloatZero();
+ MFloat covYY = ParallelMath::MakeFloatZero();
+ MFloat covXY = ParallelMath::MakeFloatZero();
+
+ for (int px = 0; px < 16; px++)
+ {
+ MFloat nx = chromaDelta[px][0];
+ MFloat ny = chromaDelta[px][1];
+
+ covXX = covXX + nx * nx;
+ covYY = covYY + ny * ny;
+ covXY = covXY + nx * ny;
+ }
+
+ MFloat halfTrace = (covXX + covYY) * 0.5f;
+ MFloat det = covXX * covYY - covXY * covXY;
+
+ MFloat mm = ParallelMath::Sqrt(ParallelMath::Max(ParallelMath::MakeFloatZero(), halfTrace * halfTrace - det));
+
+ MFloat ev = halfTrace + mm;
+
+ MFloat dx = (covYY - ev + covXY);
+ MFloat dy = -(covXX - ev + covXY);
+
+ // If evenly distributed, pick an arbitrary plane
+ ParallelMath::FloatCompFlag allZero = ParallelMath::Equal(dx, ParallelMath::MakeFloatZero()) & ParallelMath::Equal(dy, ParallelMath::MakeFloatZero());
+ ParallelMath::ConditionalSet(dx, allZero, ParallelMath::MakeFloat(1.f));
+
+ ParallelMath::Int16CompFlag sectorAssignments[16];
+ for (int px = 0; px < 16; px++)
+ sectorAssignments[px] = ParallelMath::FloatFlagToInt16(ParallelMath::Less(chromaDelta[px][0] * dx + chromaDelta[px][1] * dy, ParallelMath::MakeFloatZero()));
+
+ if (!ParallelMath::AllSet(allTransparent))
+ {
+ EncodeTMode(outputBuffer, bestError, sectorAssignments, pixels, preWeightedPixels, options);
+
+ // Flip sector assignments
+ for (int px = 0; px < 16; px++)
+ sectorAssignments[px] = ParallelMath::Not(sectorAssignments[px]);
+
+ EncodeTMode(outputBuffer, bestError, sectorAssignments, pixels, preWeightedPixels, options);
+
+ EncodeHMode(outputBuffer, bestError, sectorAssignments, pixels, internalData->m_h, preWeightedPixels, options);
+
+ CompressETC1BlockInternal(bestError, outputBuffer, pixels, preWeightedPixels, internalData->m_drs, options, true);
+ }
+
+ if (ParallelMath::AnySet(anyTransparent))
+ {
+ if (!ParallelMath::AllSet(allTransparent))
+ {
+ // Flip sector assignments
+ for (int px = 0; px < 16; px++)
+ sectorAssignments[px] = ParallelMath::Not(sectorAssignments[px]);
+ }
+
+ // Reset the error of any transparent blocks to max and retry with punchthrough modes
+ ParallelMath::ConditionalSet(bestError, ParallelMath::Int16FlagToFloat(anyTransparent), ParallelMath::MakeFloat(FLT_MAX));
+
+ EncodeVirtualTModePunchthrough(outputBuffer, bestError, sectorAssignments, pixels, preWeightedPixels, pixelIsTransparent, anyTransparent, allTransparent, options);
+
+ // Flip sector assignments
+ for (int px = 0; px < 16; px++)
+ sectorAssignments[px] = ParallelMath::Not(sectorAssignments[px]);
+
+ EncodeVirtualTModePunchthrough(outputBuffer, bestError, sectorAssignments, pixels, preWeightedPixels, pixelIsTransparent, anyTransparent, allTransparent, options);
+
+ CompressETC1PunchthroughBlockInternal(bestError, outputBuffer, pixels, preWeightedPixels, pixelIsTransparent, static_cast<ETC2CompressionDataInternal*>(compressionData)->m_drs, options);
+ }
+}
+
+void cvtt::Internal::ETCComputer::CompressETC2AlphaBlock(uint8_t *outputBuffer, const PixelBlockU8 *pixelBlocks, const Options &options)
+{
+ MUInt15 pixels[16];
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ ParallelMath::PutUInt15(pixels[px], block, pixelBlocks[block].m_pixels[px][3]);
+ }
+
+ CompressETC2AlphaBlockInternal(outputBuffer, pixels, false, false, options);
+}
+
+void cvtt::Internal::ETCComputer::CompressETC2AlphaBlockInternal(uint8_t *outputBuffer, const MUInt15 pixels[16], bool is11Bit, bool isSigned, const Options &options)
+{
+ MUInt15 minAlpha = ParallelMath::MakeUInt15(is11Bit ? 2047 : 255);
+ MUInt15 maxAlpha = ParallelMath::MakeUInt15(0);
+
+ for (int px = 0; px < 16; px++)
+ {
+ minAlpha = ParallelMath::Min(minAlpha, pixels[px]);
+ maxAlpha = ParallelMath::Max(maxAlpha, pixels[px]);
+ }
+
+ MUInt15 alphaSpan = maxAlpha - minAlpha;
+ MUInt15 alphaSpanMidpointTimes2 = maxAlpha + minAlpha;
+
+ MUInt31 bestTotalError = ParallelMath::MakeUInt31(0x7fffffff);
+ MUInt15 bestTableIndex = ParallelMath::MakeUInt15(0);
+ MUInt15 bestBaseCodeword = ParallelMath::MakeUInt15(0);
+ MUInt15 bestMultiplier = ParallelMath::MakeUInt15(0);
+ MUInt15 bestIndexes[16];
+
+ for (int px = 0; px < 16; px++)
+ bestIndexes[px] = ParallelMath::MakeUInt15(0);
+
+ const int numAlphaRanges = 10;
+ for (uint16_t tableIndex = 0; tableIndex < 16; tableIndex++)
+ {
+ for (int r = 0; r < numAlphaRanges; r++)
+ {
+ int subrange = r % 3;
+ int mainRange = r / 3;
+
+ int16_t maxOffset = Tables::ETC2::g_alphaModifierTablePositive[tableIndex][3 - mainRange - (subrange & 1)];
+ int16_t minOffset = -Tables::ETC2::g_alphaModifierTablePositive[tableIndex][3 - mainRange - ((subrange >> 1) & 1)] - 1;
+ uint16_t offsetSpan = static_cast<uint16_t>(maxOffset - minOffset);
+
+ MSInt16 vminOffset = ParallelMath::MakeSInt16(minOffset);
+ MUInt15 vmaxOffset = ParallelMath::MakeUInt15(maxOffset);
+ MUInt15 voffsetSpan = ParallelMath::MakeUInt15(offsetSpan);
+
+ MUInt15 minMultiplier = ParallelMath::MakeUInt15(0);
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t singleAlphaSpan = ParallelMath::Extract(alphaSpan, block);
+
+ uint16_t lowMultiplier = singleAlphaSpan / offsetSpan;
+ ParallelMath::PutUInt15(minMultiplier, block, lowMultiplier);
+ }
+
+ if (is11Bit)
+ {
+ // Clamps this to valid multipliers under 15 and rounds down to nearest multiple of 8
+ minMultiplier = ParallelMath::Min(minMultiplier, ParallelMath::MakeUInt15(112)) & ParallelMath::MakeUInt15(120);
+ }
+ else
+ {
+ // We cap at 1 and 14 so both multipliers are valid and dividable
+ // Cases where offset span is 0 should be caught by multiplier 1 of table 13
+ minMultiplier = ParallelMath::Max(ParallelMath::Min(minMultiplier, ParallelMath::MakeUInt15(14)), ParallelMath::MakeUInt15(1));
+ }
+
+ for (uint16_t multiplierOffset = 0; multiplierOffset < 2; multiplierOffset++)
+ {
+ MUInt15 multiplier = minMultiplier;
+
+ if (is11Bit)
+ {
+ if (multiplierOffset == 1)
+ multiplier = multiplier + ParallelMath::MakeUInt15(8);
+ else
+ multiplier = ParallelMath::Max(multiplier, ParallelMath::MakeUInt15(1));
+ }
+ else
+ {
+ if (multiplierOffset == 1)
+ multiplier = multiplier + ParallelMath::MakeUInt15(1);
+ }
+
+ MSInt16 multipliedMinOffset = ParallelMath::CompactMultiply(ParallelMath::LosslessCast<MSInt16>::Cast(multiplier), vminOffset);
+ MUInt15 multipliedMaxOffset = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(multiplier, vmaxOffset));
+
+ // codeword = (maxOffset + minOffset + minAlpha + maxAlpha) / 2
+ MSInt16 unclampedBaseAlphaTimes2 = ParallelMath::LosslessCast<MSInt16>::Cast(alphaSpanMidpointTimes2) - ParallelMath::LosslessCast<MSInt16>::Cast(multipliedMaxOffset) - multipliedMinOffset;
+
+ MUInt15 baseAlpha;
+ if (is11Bit)
+ {
+ // In unsigned, 4 is added to the unquantized alpha, so compensating for that cancels the 4 we have to add to do rounding.
+ if (isSigned)
+ unclampedBaseAlphaTimes2 = unclampedBaseAlphaTimes2 + ParallelMath::MakeSInt16(8);
+
+ // -128 is illegal for some reason
+ MSInt16 minBaseAlphaTimes2 = isSigned ? ParallelMath::MakeSInt16(16) : ParallelMath::MakeSInt16(0);
+
+ MUInt15 clampedBaseAlphaTimes2 = ParallelMath::Min(ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(unclampedBaseAlphaTimes2, minBaseAlphaTimes2)), ParallelMath::MakeUInt15(4095));
+ baseAlpha = ParallelMath::RightShift(clampedBaseAlphaTimes2, 1) & ParallelMath::MakeUInt15(2040);
+
+ if (!isSigned)
+ baseAlpha = baseAlpha + ParallelMath::MakeUInt15(4);
+ }
+ else
+ {
+ MUInt15 clampedBaseAlphaTimes2 = ParallelMath::Min(ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(unclampedBaseAlphaTimes2, ParallelMath::MakeSInt16(0))), ParallelMath::MakeUInt15(510));
+ baseAlpha = ParallelMath::RightShift(clampedBaseAlphaTimes2 + ParallelMath::MakeUInt15(1), 1);
+ }
+
+ MUInt15 indexes[16];
+ MUInt31 totalError = ParallelMath::MakeUInt31(0);
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 quantizedValues;
+ QuantizeETC2Alpha(tableIndex, pixels[px], baseAlpha, multiplier, is11Bit, isSigned, indexes[px], quantizedValues);
+
+ if (is11Bit)
+ {
+ MSInt16 delta = ParallelMath::LosslessCast<MSInt16>::Cast(quantizedValues) - ParallelMath::LosslessCast<MSInt16>::Cast(pixels[px]);
+ MSInt32 deltaSq = ParallelMath::XMultiply(delta, delta);
+ totalError = totalError + ParallelMath::LosslessCast<MUInt31>::Cast(deltaSq);
+ }
+ else
+ totalError = totalError + ParallelMath::ToUInt31(ParallelMath::SqDiffUInt8(quantizedValues, pixels[px]));
+ }
+
+ ParallelMath::Int16CompFlag isBetter = ParallelMath::Int32FlagToInt16(ParallelMath::Less(totalError, bestTotalError));
+ if (ParallelMath::AnySet(isBetter))
+ {
+ ParallelMath::ConditionalSet(bestTotalError, isBetter, totalError);
+ ParallelMath::ConditionalSet(bestTableIndex, isBetter, ParallelMath::MakeUInt15(tableIndex));
+ ParallelMath::ConditionalSet(bestBaseCodeword, isBetter, baseAlpha);
+ ParallelMath::ConditionalSet(bestMultiplier, isBetter, multiplier);
+
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestIndexes[px], isBetter, indexes[px]);
+ }
+
+ // TODO: Do one refine pass
+ }
+ }
+ }
+
+ if (is11Bit)
+ {
+ bestMultiplier = ParallelMath::RightShift(bestMultiplier, 3);
+
+ if (isSigned)
+ bestBaseCodeword = bestBaseCodeword ^ ParallelMath::MakeUInt15(0x80);
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint8_t *output = outputBuffer + block * 8;
+
+ output[0] = static_cast<uint8_t>(ParallelMath::Extract(bestBaseCodeword, block));
+
+ ParallelMath::ScalarUInt16 multiplier = ParallelMath::Extract(bestMultiplier, block);
+ ParallelMath::ScalarUInt16 tableIndex = ParallelMath::Extract(bestTableIndex, block);
+
+ output[1] = static_cast<uint8_t>((multiplier << 4) | tableIndex);
+
+ static const int pixelSelectorOrder[16] = { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 };
+
+ ParallelMath::ScalarUInt16 indexes[16];
+ for (int px = 0; px < 16; px++)
+ indexes[pixelSelectorOrder[px]] = ParallelMath::Extract(bestIndexes[px], block);
+
+ int outputOffset = 2;
+ int outputBits = 0;
+ int numOutputBits = 0;
+ for (int s = 0; s < 16; s++)
+ {
+ outputBits = (outputBits << 3) | indexes[s];
+ numOutputBits += 3;
+
+ if (numOutputBits >= 8)
+ {
+ output[outputOffset++] = static_cast<uint8_t>(outputBits >> (numOutputBits - 8));
+ numOutputBits -= 8;
+
+ outputBits &= ((1 << numOutputBits) - 1);
+ }
+ }
+
+ assert(outputOffset == 8 && numOutputBits == 0);
+ }
+}
+
+void cvtt::Internal::ETCComputer::CompressEACBlock(uint8_t *outputBuffer, const PixelBlockScalarS16 *inputBlocks, bool isSigned, const Options &options)
+{
+ MUInt15 pixels[16];
+ for (int px = 0; px < 16; px++)
+ {
+ MSInt16 adjustedPixel;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ ParallelMath::PutSInt16(adjustedPixel, block, inputBlocks[block].m_pixels[px]);
+
+ // We use a slightly shifted range here so we can keep the unquantized base color in a UInt15
+ // That is, signed range is 1..2047, and unsigned range is 0..2047
+ if (isSigned)
+ {
+ adjustedPixel = ParallelMath::Min(adjustedPixel, ParallelMath::MakeSInt16(1023)) + ParallelMath::MakeSInt16(1024);
+ adjustedPixel = ParallelMath::Max(ParallelMath::MakeSInt16(1), adjustedPixel);
+ }
+ else
+ {
+ adjustedPixel = ParallelMath::Min(adjustedPixel, ParallelMath::MakeSInt16(2047));
+ adjustedPixel = ParallelMath::Max(ParallelMath::MakeSInt16(0), adjustedPixel);
+ }
+
+
+ pixels[px] = ParallelMath::LosslessCast<MUInt15>::Cast(adjustedPixel);
+ }
+
+ CompressETC2AlphaBlockInternal(outputBuffer, pixels, true, isSigned, options);
+}
+
+void cvtt::Internal::ETCComputer::CompressETC1Block(uint8_t *outputBuffer, const PixelBlockU8 *inputBlocks, ETC1CompressionData *compressionData, const Options &options)
+{
+ DifferentialResolveStorage &drs = static_cast<ETC1CompressionDataInternal*>(compressionData)->m_drs;
+ MFloat bestTotalError = ParallelMath::MakeFloat(FLT_MAX);
+
+ MUInt15 pixels[16][3];
+ MFloat preWeightedPixels[16][3];
+ ExtractBlocks(pixels, preWeightedPixels, inputBlocks, options);
+
+ CompressETC1BlockInternal(bestTotalError, outputBuffer, pixels, preWeightedPixels, drs, options, false);
+}
+
+void cvtt::Internal::ETCComputer::ExtractBlocks(MUInt15 pixels[16][3], MFloat preWeightedPixels[16][3], const PixelBlockU8 *inputBlocks, const Options &options)
+{
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+ bool isUniform = ((options.flags & cvtt::Flags::Uniform) != 0);
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ ParallelMath::PutUInt15(pixels[px][ch], block, inputBlocks[block].m_pixels[px][ch]);
+ }
+
+ if (isFakeBT709)
+ ConvertToFakeBT709(preWeightedPixels[px], pixels[px]);
+ else if (isUniform)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ preWeightedPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]);
+ }
+ else
+ {
+ preWeightedPixels[px][0] = ParallelMath::ToFloat(pixels[px][0]) * options.redWeight;
+ preWeightedPixels[px][1] = ParallelMath::ToFloat(pixels[px][1]) * options.greenWeight;
+ preWeightedPixels[px][2] = ParallelMath::ToFloat(pixels[px][2]) * options.blueWeight;
+ }
+ }
+}
+
+void cvtt::Internal::ETCComputer::ResolveHalfBlockFakeBT709RoundingAccurate(MUInt15 quantized[3], const MUInt15 sectorCumulative[3], bool isDifferential)
+{
+ for (int ch = 0; ch < 3; ch++)
+ {
+ const MUInt15& cu15 = sectorCumulative[ch];
+
+ if (isDifferential)
+ {
+ //quantized[ch] = (cu * 31 + (cu >> 3)) >> 11;
+ quantized[ch] = ParallelMath::ToUInt15(
+ ParallelMath::RightShift(
+ (ParallelMath::LosslessCast<MUInt16>::Cast(cu15) << 5) - ParallelMath::LosslessCast<MUInt16>::Cast(cu15) + ParallelMath::LosslessCast<MUInt16>::Cast(ParallelMath::RightShift(cu15, 3))
+ , 11)
+ );
+ }
+ else
+ {
+ //quantized[ch] = (cu * 30 + (cu >> 3)) >> 12;
+ quantized[ch] = ParallelMath::ToUInt15(
+ ParallelMath::RightShift(
+ (ParallelMath::LosslessCast<MUInt16>::Cast(cu15) << 5) - ParallelMath::LosslessCast<MUInt16>::Cast(cu15 << 1) + ParallelMath::LosslessCast<MUInt16>::Cast(ParallelMath::RightShift(cu15, 3))
+ , 12)
+ );
+ }
+ }
+
+ MFloat lowOctantRGBFloat[3];
+ MFloat highOctantRGBFloat[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 unquantized;
+ MUInt15 unquantizedNext;
+ if (isDifferential)
+ {
+ unquantized = (quantized[ch] << 3) | ParallelMath::RightShift(quantized[ch], 2);
+ MUInt15 quantizedNext = ParallelMath::Min(ParallelMath::MakeUInt15(31), quantized[ch] + ParallelMath::MakeUInt15(1));
+ unquantizedNext = (quantizedNext << 3) | ParallelMath::RightShift(quantizedNext, 2);
+ }
+ else
+ {
+ unquantized = (quantized[ch] << 4) | quantized[ch];
+ unquantizedNext = ParallelMath::Min(ParallelMath::MakeUInt15(255), unquantized + ParallelMath::MakeUInt15(17));
+ }
+ lowOctantRGBFloat[ch] = ParallelMath::ToFloat(unquantized << 3);
+ highOctantRGBFloat[ch] = ParallelMath::ToFloat(unquantizedNext << 3);
+ }
+
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+ MUInt15 bestOctant = ParallelMath::MakeUInt15(0);
+
+ MFloat cumulativeYUV[3];
+ ConvertToFakeBT709(cumulativeYUV, sectorCumulative);
+
+ for (uint16_t octant = 0; octant < 8; octant++)
+ {
+ const MFloat &r = (octant & 1) ? highOctantRGBFloat[0] : lowOctantRGBFloat[0];
+ const MFloat &g = (octant & 2) ? highOctantRGBFloat[1] : lowOctantRGBFloat[1];
+ const MFloat &b = (octant & 4) ? highOctantRGBFloat[2] : lowOctantRGBFloat[2];
+
+ MFloat octantYUV[3];
+ ConvertToFakeBT709(octantYUV, r, g, b);
+
+ MFloat delta[3];
+ for (int ch = 0; ch < 3; ch++)
+ delta[ch] = octantYUV[ch] - cumulativeYUV[ch];
+
+ MFloat error = delta[0] * delta[0] + delta[1] + delta[1] + delta[2] * delta[2];
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, bestError));
+ ParallelMath::ConditionalSet(bestOctant, errorBetter, ParallelMath::MakeUInt15(octant));
+ bestError = ParallelMath::Min(error, bestError);
+ }
+
+ for (int ch = 0; ch < 3; ch++)
+ quantized[ch] = quantized[ch] + (ParallelMath::RightShift(bestOctant, ch) & ParallelMath::MakeUInt15(1));
+}
+
+void cvtt::Internal::ETCComputer::ResolveHalfBlockFakeBT709RoundingFast(MUInt15 quantized[3], const MUInt15 sectorCumulative[3], bool isDifferential)
+{
+ // sectorCumulative range is 0..2040 (11 bits)
+ MUInt15 roundingOffset = ParallelMath::MakeUInt15(0);
+
+ MUInt15 rOffset;
+ MUInt15 gOffset;
+ MUInt15 bOffset;
+ MUInt15 quantizedBase[3];
+ MUInt15 upperBound;
+
+ MUInt15 sectorCumulativeFillIn[3];
+ for (int ch = 0; ch < 3; ch++)
+ sectorCumulativeFillIn[ch] = sectorCumulative[ch] + ParallelMath::RightShift(sectorCumulative[ch], 8);
+
+ if (isDifferential)
+ {
+ rOffset = (sectorCumulativeFillIn[0] << 6) & ParallelMath::MakeUInt15(0xf00);
+ gOffset = (sectorCumulativeFillIn[1] << 4) & ParallelMath::MakeUInt15(0x0f0);
+ bOffset = ParallelMath::RightShift(sectorCumulativeFillIn[2], 2) & ParallelMath::MakeUInt15(0x00f);
+
+ for (int ch = 0; ch < 3; ch++)
+ quantizedBase[ch] = ParallelMath::RightShift(sectorCumulativeFillIn[ch], 6);
+
+ upperBound = ParallelMath::MakeUInt15(31);
+ }
+ else
+ {
+ rOffset = (sectorCumulativeFillIn[0] << 5) & ParallelMath::MakeUInt15(0xf00);
+ gOffset = (sectorCumulativeFillIn[1] << 1) & ParallelMath::MakeUInt15(0x0f0);
+ bOffset = ParallelMath::RightShift(sectorCumulativeFillIn[2], 3) & ParallelMath::MakeUInt15(0x00f);
+
+ for (int ch = 0; ch < 3; ch++)
+ quantizedBase[ch] = ParallelMath::RightShift(sectorCumulativeFillIn[ch], 7);
+
+ upperBound = ParallelMath::MakeUInt15(15);
+ }
+
+ MUInt15 lookupIndex = (rOffset | gOffset | bOffset);
+
+ MUInt15 octant;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ ParallelMath::PutUInt15(octant, block, Tables::FakeBT709::g_rounding16[ParallelMath::Extract(lookupIndex, block)]);
+
+ quantizedBase[0] = quantizedBase[0] + (octant & ParallelMath::MakeUInt15(1));
+ quantizedBase[1] = quantizedBase[1] + (ParallelMath::RightShift(octant, 1) & ParallelMath::MakeUInt15(1));
+ quantizedBase[2] = quantizedBase[2] + (ParallelMath::RightShift(octant, 2) & ParallelMath::MakeUInt15(1));
+
+ for (int ch = 0; ch < 3; ch++)
+ quantized[ch] = ParallelMath::Min(quantizedBase[ch], upperBound);
+}
+
+void cvtt::Internal::ETCComputer::ResolveTHFakeBT709Rounding(MUInt15 quantized[3], const MUInt15 targets[3], const MUInt15 &granularity)
+{
+ MFloat lowOctantRGBFloat[3];
+ MFloat highOctantRGBFloat[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 unquantized = (quantized[ch] << 4) | quantized[ch];
+ MUInt15 unquantizedNext = ParallelMath::Min(ParallelMath::MakeUInt15(255), unquantized + ParallelMath::MakeUInt15(17));
+
+ lowOctantRGBFloat[ch] = ParallelMath::ToFloat(ParallelMath::CompactMultiply(unquantized, granularity) << 1);
+ highOctantRGBFloat[ch] = ParallelMath::ToFloat(ParallelMath::CompactMultiply(unquantizedNext, granularity) << 1);
+ }
+
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+ MUInt15 bestOctant = ParallelMath::MakeUInt15(0);
+
+ MFloat cumulativeYUV[3];
+ ConvertToFakeBT709(cumulativeYUV, ParallelMath::ToFloat(targets[0]), ParallelMath::ToFloat(targets[1]), ParallelMath::ToFloat(targets[2]));
+
+ for (uint16_t octant = 0; octant < 8; octant++)
+ {
+ const MFloat &r = (octant & 1) ? highOctantRGBFloat[0] : lowOctantRGBFloat[0];
+ const MFloat &g = (octant & 2) ? highOctantRGBFloat[1] : lowOctantRGBFloat[1];
+ const MFloat &b = (octant & 4) ? highOctantRGBFloat[2] : lowOctantRGBFloat[2];
+
+ MFloat octantYUV[3];
+ ConvertToFakeBT709(octantYUV, r, g, b);
+
+ MFloat delta[3];
+ for (int ch = 0; ch < 3; ch++)
+ delta[ch] = octantYUV[ch] - cumulativeYUV[ch];
+
+ MFloat error = delta[0] * delta[0] + delta[1] + delta[1] + delta[2] * delta[2];
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, bestError));
+ ParallelMath::ConditionalSet(bestOctant, errorBetter, ParallelMath::MakeUInt15(octant));
+ bestError = ParallelMath::Min(error, bestError);
+ }
+
+ for (int ch = 0; ch < 3; ch++)
+ quantized[ch] = quantized[ch] + (ParallelMath::RightShift(bestOctant, ch) & ParallelMath::MakeUInt15(1));
+}
+
+void cvtt::Internal::ETCComputer::ConvertToFakeBT709(MFloat yuv[3], const MUInt15 color[3])
+{
+ MFloat floatRGB[3];
+ for (int ch = 0; ch < 3; ch++)
+ floatRGB[ch] = ParallelMath::ToFloat(color[ch]);
+
+ ConvertToFakeBT709(yuv, floatRGB);
+}
+
+void cvtt::Internal::ETCComputer::ConvertToFakeBT709(MFloat yuv[3], const MFloat color[3])
+{
+ ConvertToFakeBT709(yuv, color[0], color[1], color[2]);
+}
+
+void cvtt::Internal::ETCComputer::ConvertToFakeBT709(MFloat yuv[3], const MFloat &pr, const MFloat &pg, const MFloat &pb)
+{
+ MFloat r = pr;
+ MFloat g = pg;
+ MFloat b = pb;
+
+ yuv[0] = r * 0.368233989135369f + g * 1.23876274963149f + b * 0.125054068802017f;
+ yuv[1] = r * 0.5f - g * 0.4541529f - b * 0.04584709f;
+ yuv[2] = r * -0.081014709086133f - g * 0.272538676238785f + b * 0.353553390593274f;
+}
+
+void cvtt::Internal::ETCComputer::ConvertFromFakeBT709(MFloat rgb[3], const MFloat yuv[3])
+{
+ MFloat yy = yuv[0] * 0.57735026466774571071f;
+ MFloat u = yuv[1];
+ MFloat v = yuv[2];
+
+ rgb[0] = yy + u * 1.5748000207960953486f;
+ rgb[1] = yy - u * 0.46812425854364753669f - v * 0.26491652528157560861f;
+ rgb[2] = yy + v * 2.6242146882856944069f;
+}
+
+
+void cvtt::Internal::ETCComputer::QuantizeETC2Alpha(int tableIndex, const MUInt15& value, const MUInt15& baseValue, const MUInt15& multiplier, bool is11Bit, bool isSigned, MUInt15& outIndexes, MUInt15& outQuantizedValues)
+{
+ MSInt16 offset = ParallelMath::LosslessCast<MSInt16>::Cast(value) - ParallelMath::LosslessCast<MSInt16>::Cast(baseValue);
+ MSInt16 offsetTimes2 = offset + offset;
+
+ // ETC2's offset tables all have a reflect about 0.5*multiplier
+ MSInt16 offsetAboutReflectorTimes2 = offsetTimes2 + ParallelMath::LosslessCast<MSInt16>::Cast(multiplier);
+
+ MUInt15 absOffsetAboutReflectorTimes2 = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Abs(offsetAboutReflectorTimes2));
+ MUInt15 lookupIndex = ParallelMath::RightShift(absOffsetAboutReflectorTimes2, 1);
+
+ MUInt15 positiveIndex;
+ MUInt15 positiveOffsetUnmultiplied;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t blockLookupIndex = ParallelMath::Extract(lookupIndex, block) / ParallelMath::Extract(multiplier, block);
+ if (blockLookupIndex >= Tables::ETC2::g_alphaRoundingTableWidth)
+ blockLookupIndex = Tables::ETC2::g_alphaRoundingTableWidth - 1;
+ uint16_t index = Tables::ETC2::g_alphaRoundingTables[tableIndex][blockLookupIndex];
+ ParallelMath::PutUInt15(positiveIndex, block, index);
+ ParallelMath::PutUInt15(positiveOffsetUnmultiplied, block, Tables::ETC2::g_alphaModifierTablePositive[tableIndex][index]);
+
+ // TODO: This is suboptimal when the offset is capped. We should detect 0 and 255 values and always map them to the maximum offsets.
+ // Doing that will also affect refinement though.
+ }
+
+ MSInt16 signBits = ParallelMath::RightShift(offsetAboutReflectorTimes2, 15);
+ MSInt16 offsetUnmultiplied = ParallelMath::LosslessCast<MSInt16>::Cast(positiveOffsetUnmultiplied) ^ signBits;
+ MSInt16 quantizedOffset = ParallelMath::CompactMultiply(offsetUnmultiplied, multiplier);
+
+ MSInt16 offsetValue = ParallelMath::LosslessCast<MSInt16>::Cast(baseValue) + quantizedOffset;
+
+ if (is11Bit)
+ {
+ if (isSigned)
+ outQuantizedValues = ParallelMath::Min(ParallelMath::MakeUInt15(2047), ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(1), offsetValue)));
+ else
+ outQuantizedValues = ParallelMath::Min(ParallelMath::MakeUInt15(2047), ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(0), offsetValue)));
+ }
+ else
+ outQuantizedValues = ParallelMath::Min(ParallelMath::MakeUInt15(255), ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::Max(ParallelMath::MakeSInt16(0), offsetValue)));
+
+ MUInt15 indexSub = ParallelMath::LosslessCast<MUInt15>::Cast(signBits) & ParallelMath::MakeUInt15(4);
+
+ outIndexes = positiveIndex + ParallelMath::MakeUInt15(4) - indexSub;
+}
+
+
+void cvtt::Internal::ETCComputer::EmitTModeBlock(uint8_t *outputBuffer, const ParallelMath::ScalarUInt16 lineColor[3], const ParallelMath::ScalarUInt16 isolatedColor[3], int32_t packedSelectors, ParallelMath::ScalarUInt16 table, bool opaque)
+{
+ static const int selectorOrder[] = { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 };
+
+ uint32_t lowBits = 0;
+ uint32_t highBits = 0;
+
+ int rh = ((isolatedColor[0] >> 2) & 3);
+ int rl = (isolatedColor[0] & 3);
+
+ if (rh + rl < 4)
+ {
+ // Overflow low
+ highBits |= 1 << (58 - 32);
+ }
+ else
+ {
+ // Overflow high
+ highBits |= 7 << (61 - 32);
+ }
+
+ highBits |= rh << (59 - 32);
+ highBits |= rl << (56 - 32);
+ highBits |= isolatedColor[1] << (52 - 32);
+ highBits |= isolatedColor[2] << (48 - 32);
+ highBits |= lineColor[0] << (44 - 32);
+ highBits |= lineColor[1] << (40 - 32);
+ highBits |= lineColor[2] << (36 - 32);
+ highBits |= ((table >> 1) & 3) << (34 - 32);
+ if (opaque)
+ highBits |= 1 << (33 - 32);
+ highBits |= (table & 1) << (32 - 32);
+
+ for (int px = 0; px < 16; px++)
+ {
+ int sel = (packedSelectors >> (2 * selectorOrder[px])) & 3;
+ if ((sel & 0x1) != 0)
+ lowBits |= (1 << px);
+ if ((sel & 0x2) != 0)
+ lowBits |= (1 << (16 + px));
+ }
+
+ for (int i = 0; i < 4; i++)
+ outputBuffer[i] = (highBits >> (24 - i * 8)) & 0xff;
+ for (int i = 0; i < 4; i++)
+ outputBuffer[i + 4] = (lowBits >> (24 - i * 8)) & 0xff;
+}
+
+void cvtt::Internal::ETCComputer::EmitHModeBlock(uint8_t *outputBuffer, const ParallelMath::ScalarUInt16 blockColors[2], ParallelMath::ScalarUInt16 sectorBits, ParallelMath::ScalarUInt16 signBits, ParallelMath::ScalarUInt16 table, bool opaque)
+{
+ if (blockColors[0] == blockColors[1])
+ {
+ // Base colors are the same.
+ // If the table low bit isn't 1, then we can't encode this, because swapping the block colors will have no effect
+ // on their order.
+ // Instead, we encode this as T mode where all of the indexes are on the line.
+
+ ParallelMath::ScalarUInt16 lineColor[3];
+ ParallelMath::ScalarUInt16 isolatedColor[3];
+
+ lineColor[0] = isolatedColor[0] = (blockColors[0] >> 10) & 0x1f;
+ lineColor[1] = isolatedColor[1] = (blockColors[0] >> 5) & 0x1f;
+ lineColor[2] = isolatedColor[2] = (blockColors[0] >> 0) & 0x1f;
+
+ int32_t packedSelectors = 0x55555555;
+ for (int px = 0; px < 16; px++)
+ packedSelectors |= ((signBits >> px) & 1) << ((px * 2) + 1);
+
+ EmitTModeBlock(outputBuffer, lineColor, isolatedColor, packedSelectors, table, opaque);
+ return;
+ }
+
+ static const int selectorOrder[] = { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 };
+
+ int16_t colors[2][3];
+ for (int sector = 0; sector < 2; sector++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ colors[sector][ch] = (blockColors[sector] >> ((2 - ch) * 5)) & 15;
+ }
+
+ uint32_t lowBits = 0;
+ uint32_t highBits = 0;
+
+ if (((table & 1) == 1) != (blockColors[0] > blockColors[1]))
+ {
+ for (int ch = 0; ch < 3; ch++)
+ std::swap(colors[0][ch], colors[1][ch]);
+ sectorBits ^= 0xffff;
+ }
+
+ int r1 = colors[0][0];
+ int g1a = colors[0][1] >> 1;
+ int g1b = (colors[0][1] & 1);
+ int b1a = colors[0][2] >> 3;
+ int b1b = colors[0][2] & 7;
+ int r2 = colors[1][0];
+ int g2 = colors[1][1];
+ int b2 = colors[1][2];
+
+ // Avoid overflowing R
+ if ((g1a & 4) != 0 && r1 + g1a < 8)
+ highBits |= 1 << (63 - 32);
+
+ int fakeDG = b1b >> 1;
+ int fakeG = b1a | (g1b << 1);
+
+ if (fakeG + fakeDG < 4)
+ {
+ // Overflow low
+ highBits |= 1 << (50 - 32);
+ }
+ else
+ {
+ // Overflow high
+ highBits |= 7 << (53 - 32);
+ }
+
+ int da = (table >> 2) & 1;
+ int db = (table >> 1) & 1;
+
+ highBits |= r1 << (59 - 32);
+ highBits |= g1a << (56 - 32);
+ highBits |= g1b << (52 - 32);
+ highBits |= b1a << (51 - 32);
+ highBits |= b1b << (47 - 32);
+ highBits |= r2 << (43 - 32);
+ highBits |= g2 << (39 - 32);
+ highBits |= b2 << (35 - 32);
+ highBits |= da << (34 - 32);
+ if (opaque)
+ highBits |= 1 << (33 - 32);
+ highBits |= db << (32 - 32);
+
+ for (int px = 0; px < 16; px++)
+ {
+ int sectorBit = (sectorBits >> selectorOrder[px]) & 1;
+ int signBit = (signBits >> selectorOrder[px]) & 1;
+
+ lowBits |= (signBit << px);
+ lowBits |= (sectorBit << (16 + px));
+ }
+
+ uint8_t *output = outputBuffer;
+
+ for (int i = 0; i < 4; i++)
+ output[i] = (highBits >> (24 - i * 8)) & 0xff;
+ for (int i = 0; i < 4; i++)
+ output[i + 4] = (lowBits >> (24 - i * 8)) & 0xff;
+}
+
+void cvtt::Internal::ETCComputer::EmitETC1Block(uint8_t *outputBuffer, int blockBestFlip, int blockBestD, const int blockBestColors[2][3], const int blockBestTables[2], const ParallelMath::ScalarUInt16 blockBestSelectors[2], bool transparent)
+{
+ uint32_t highBits = 0;
+ uint32_t lowBits = 0;
+
+ if (blockBestD == 0)
+ {
+ highBits |= blockBestColors[0][0] << 28;
+ highBits |= blockBestColors[1][0] << 24;
+ highBits |= blockBestColors[0][1] << 20;
+ highBits |= blockBestColors[1][1] << 16;
+ highBits |= blockBestColors[0][2] << 12;
+ highBits |= blockBestColors[1][2] << 8;
+ }
+ else
+ {
+ highBits |= blockBestColors[0][0] << 27;
+ highBits |= ((blockBestColors[1][0] - blockBestColors[0][0]) & 7) << 24;
+ highBits |= blockBestColors[0][1] << 19;
+ highBits |= ((blockBestColors[1][1] - blockBestColors[0][1]) & 7) << 16;
+ highBits |= blockBestColors[0][2] << 11;
+ highBits |= ((blockBestColors[1][2] - blockBestColors[0][2]) & 7) << 8;
+ }
+
+ highBits |= (blockBestTables[0] << 5);
+ highBits |= (blockBestTables[1] << 2);
+ if (!transparent)
+ highBits |= (blockBestD << 1);
+ highBits |= blockBestFlip;
+
+ const uint8_t modifierCodes[4] = { 3, 2, 0, 1 };
+
+ uint8_t unpackedSelectors[16];
+ uint8_t unpackedSelectorCodes[16];
+ for (int sector = 0; sector < 2; sector++)
+ {
+ int blockSectorBestSelectors = blockBestSelectors[sector];
+
+ for (int px = 0; px < 8; px++)
+ {
+ int selector = (blockSectorBestSelectors >> (2 * px)) & 3;
+ unpackedSelectorCodes[g_flipTables[blockBestFlip][sector][px]] = modifierCodes[selector];
+ unpackedSelectors[g_flipTables[blockBestFlip][sector][px]] = selector;
+ }
+ }
+
+ const int pixelSelectorOrder[16] = { 0, 4, 8, 12, 1, 5, 9, 13, 2, 6, 10, 14, 3, 7, 11, 15 };
+
+ int lowBitOffset = 0;
+ for (int sb = 0; sb < 2; sb++)
+ for (int px = 0; px < 16; px++)
+ lowBits |= ((unpackedSelectorCodes[pixelSelectorOrder[px]] >> sb) & 1) << (px + sb * 16);
+
+ for (int i = 0; i < 4; i++)
+ outputBuffer[i] = (highBits >> (24 - i * 8)) & 0xff;
+ for (int i = 0; i < 4; i++)
+ outputBuffer[i + 4] = (lowBits >> (24 - i * 8)) & 0xff;
+}
+
+void cvtt::Internal::ETCComputer::CompressETC1BlockInternal(MFloat &bestTotalError, uint8_t *outputBuffer, const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], DifferentialResolveStorage &drs, const Options &options, bool punchthrough)
+{
+ int numTries = 0;
+
+ MUInt15 zeroU15 = ParallelMath::MakeUInt15(0);
+ MUInt16 zeroU16 = ParallelMath::MakeUInt16(0);
+
+ MUInt15 bestColors[2] = { zeroU15, zeroU15 };
+ MUInt16 bestSelectors[2] = { zeroU16, zeroU16 };
+ MUInt15 bestTables[2] = { zeroU15, zeroU15 };
+ MUInt15 bestFlip = zeroU15;
+ MUInt15 bestD = zeroU15;
+
+ MUInt15 sectorPixels[2][2][8][3];
+ MFloat sectorPreWeightedPixels[2][2][8][3];
+ MUInt15 sectorCumulative[2][2][3];
+
+ ParallelMath::Int16CompFlag bestIsThisMode = ParallelMath::MakeBoolInt16(false);
+
+ for (int flip = 0; flip < 2; flip++)
+ {
+ for (int sector = 0; sector < 2; sector++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ sectorCumulative[flip][sector][ch] = zeroU15;
+
+ for (int px = 0; px < 8; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 pixelChannelValue = pixels[g_flipTables[flip][sector][px]][ch];
+ sectorPixels[flip][sector][px][ch] = pixelChannelValue;
+ sectorPreWeightedPixels[flip][sector][px][ch] = preWeightedPixels[g_flipTables[flip][sector][px]][ch];
+ sectorCumulative[flip][sector][ch] = sectorCumulative[flip][sector][ch] + pixelChannelValue;
+ }
+ }
+ }
+ }
+
+ static const MSInt16 modifierTables[8][4] =
+ {
+ { ParallelMath::MakeSInt16(-8), ParallelMath::MakeSInt16(-2), ParallelMath::MakeSInt16(2), ParallelMath::MakeSInt16(8) },
+ { ParallelMath::MakeSInt16(-17), ParallelMath::MakeSInt16(-5), ParallelMath::MakeSInt16(5), ParallelMath::MakeSInt16(17) },
+ { ParallelMath::MakeSInt16(-29), ParallelMath::MakeSInt16(-9), ParallelMath::MakeSInt16(9), ParallelMath::MakeSInt16(29) },
+ { ParallelMath::MakeSInt16(-42), ParallelMath::MakeSInt16(-13), ParallelMath::MakeSInt16(13), ParallelMath::MakeSInt16(42) },
+ { ParallelMath::MakeSInt16(-60), ParallelMath::MakeSInt16(-18), ParallelMath::MakeSInt16(18), ParallelMath::MakeSInt16(60) },
+ { ParallelMath::MakeSInt16(-80), ParallelMath::MakeSInt16(-24), ParallelMath::MakeSInt16(24), ParallelMath::MakeSInt16(80) },
+ { ParallelMath::MakeSInt16(-106), ParallelMath::MakeSInt16(-33), ParallelMath::MakeSInt16(33), ParallelMath::MakeSInt16(106) },
+ { ParallelMath::MakeSInt16(-183), ParallelMath::MakeSInt16(-47), ParallelMath::MakeSInt16(47), ParallelMath::MakeSInt16(183) },
+ };
+
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ int minD = punchthrough ? 1 : 0;
+
+ for (int flip = 0; flip < 2; flip++)
+ {
+ drs.diffNumAttempts[0] = drs.diffNumAttempts[1] = zeroU15;
+
+ MFloat bestIndError[2] = { ParallelMath::MakeFloat(FLT_MAX), ParallelMath::MakeFloat(FLT_MAX) };
+ MUInt16 bestIndSelectors[2] = { ParallelMath::MakeUInt16(0), ParallelMath::MakeUInt16(0) };
+ MUInt15 bestIndColors[2] = { zeroU15, zeroU15 };
+ MUInt15 bestIndTable[2] = { zeroU15, zeroU15 };
+
+ for (int d = minD; d < 2; d++)
+ {
+ for (int sector = 0; sector < 2; sector++)
+ {
+ const int16_t *potentialOffsets = cvtt::Tables::ETC1::g_potentialOffsets4;
+
+ for (int table = 0; table < 8; table++)
+ {
+ int16_t numOffsets = *potentialOffsets++;
+
+ MUInt15 possibleColors[cvtt::Tables::ETC1::g_maxPotentialOffsets];
+
+ MUInt15 quantized[3];
+ for (int oi = 0; oi < numOffsets; oi++)
+ {
+ if (!isFakeBT709)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ // cu is in range 0..2040
+ MUInt15 cu15 = ParallelMath::Min(
+ ParallelMath::MakeUInt15(2040),
+ ParallelMath::ToUInt15(
+ ParallelMath::Max(
+ ParallelMath::MakeSInt16(0),
+ ParallelMath::LosslessCast<MSInt16>::Cast(sectorCumulative[flip][sector][ch]) + ParallelMath::MakeSInt16(potentialOffsets[oi])
+ )
+ )
+ );
+
+ if (d == 1)
+ {
+ //quantized[ch] = (cu * 31 + (cu >> 3) + 1024) >> 11;
+ quantized[ch] = ParallelMath::ToUInt15(
+ ParallelMath::RightShift(
+ (ParallelMath::LosslessCast<MUInt16>::Cast(cu15) << 5) - ParallelMath::LosslessCast<MUInt16>::Cast(cu15) + ParallelMath::LosslessCast<MUInt16>::Cast(ParallelMath::RightShift(cu15, 3)) + ParallelMath::MakeUInt16(1024)
+ , 11)
+ );
+ }
+ else
+ {
+ //quantized[ch] = (cu * 30 + (cu >> 3) + 2048) >> 12;
+ quantized[ch] = ParallelMath::ToUInt15(
+ ParallelMath::RightShift(
+ (ParallelMath::LosslessCast<MUInt16>::Cast(cu15) << 5) - ParallelMath::LosslessCast<MUInt16>::Cast(cu15 << 1) + ParallelMath::LosslessCast<MUInt16>::Cast(ParallelMath::RightShift(cu15, 3)) + ParallelMath::MakeUInt16(2048)
+ , 12)
+ );
+ }
+ }
+ }
+ else
+ {
+ MUInt15 offsetCumulative[3];
+ for (int ch = 0; ch < 3; ch++)
+ {
+ // cu is in range 0..2040
+ MUInt15 cu15 = ParallelMath::Min(
+ ParallelMath::MakeUInt15(2040),
+ ParallelMath::ToUInt15(
+ ParallelMath::Max(
+ ParallelMath::MakeSInt16(0),
+ ParallelMath::LosslessCast<MSInt16>::Cast(sectorCumulative[flip][sector][ch]) + ParallelMath::MakeSInt16(potentialOffsets[oi])
+ )
+ )
+ );
+
+ offsetCumulative[ch] = cu15;
+ }
+
+ if ((options.flags & cvtt::Flags::ETC_FakeBT709Accurate) != 0)
+ ResolveHalfBlockFakeBT709RoundingAccurate(quantized, offsetCumulative, d == 1);
+ else
+ ResolveHalfBlockFakeBT709RoundingFast(quantized, offsetCumulative, d == 1);
+ }
+
+ possibleColors[oi] = quantized[0] | (quantized[1] << 5) | (quantized[2] << 10);
+ }
+
+ potentialOffsets += numOffsets;
+
+ ParallelMath::UInt15 numUniqueColors;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t blockNumUniqueColors = 1;
+ for (int i = 1; i < numOffsets; i++)
+ {
+ uint16_t color = ParallelMath::Extract(possibleColors[i], block);
+ if (color != ParallelMath::Extract(possibleColors[blockNumUniqueColors - 1], block))
+ ParallelMath::PutUInt15(possibleColors[blockNumUniqueColors++], block, color);
+ }
+
+ ParallelMath::PutUInt15(numUniqueColors, block, blockNumUniqueColors);
+ }
+
+ int maxUniqueColors = ParallelMath::Extract(numUniqueColors, 0);
+ for (int block = 1; block < ParallelMath::ParallelSize; block++)
+ maxUniqueColors = std::max<int>(maxUniqueColors, ParallelMath::Extract(numUniqueColors, block));
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t fillColor = ParallelMath::Extract(possibleColors[0], block);
+ for (int i = ParallelMath::Extract(numUniqueColors, block); i < maxUniqueColors; i++)
+ ParallelMath::PutUInt15(possibleColors[i], block, fillColor);
+ }
+
+ for (int i = 0; i < maxUniqueColors; i++)
+ {
+ MFloat error = ParallelMath::MakeFloatZero();
+ MUInt16 selectors = ParallelMath::MakeUInt16(0);
+ MUInt15 quantized = possibleColors[i];
+ TestHalfBlock(error, selectors, quantized, sectorPixels[flip][sector], sectorPreWeightedPixels[flip][sector], modifierTables[table], d == 1, options);
+
+ if (d == 0)
+ {
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(error, bestIndError[sector]));
+ if (ParallelMath::AnySet(errorBetter))
+ {
+ bestIndError[sector] = ParallelMath::Min(error, bestIndError[sector]);
+ ParallelMath::ConditionalSet(bestIndSelectors[sector], errorBetter, selectors);
+ ParallelMath::ConditionalSet(bestIndColors[sector], errorBetter, quantized);
+ ParallelMath::ConditionalSet(bestIndTable[sector], errorBetter, ParallelMath::MakeUInt15(table));
+ }
+ }
+ else
+ {
+ ParallelMath::Int16CompFlag isInBounds = ParallelMath::Less(ParallelMath::MakeUInt15(i), numUniqueColors);
+
+ MUInt15 storageIndexes = drs.diffNumAttempts[sector];
+ drs.diffNumAttempts[sector] = drs.diffNumAttempts[sector] + ParallelMath::SelectOrZero(isInBounds, ParallelMath::MakeUInt15(1));
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int storageIndex = ParallelMath::Extract(storageIndexes, block);
+
+ ParallelMath::PutFloat(drs.diffErrors[sector][storageIndex], block, ParallelMath::Extract(error, block));
+ ParallelMath::PutUInt16(drs.diffSelectors[sector][storageIndex], block, ParallelMath::Extract(selectors, block));
+ ParallelMath::PutUInt15(drs.diffColors[sector][storageIndex], block, ParallelMath::Extract(quantized, block));
+ ParallelMath::PutUInt15(drs.diffTables[sector][storageIndex], block, table);
+ }
+ }
+ }
+ }
+ }
+
+ if (d == 0)
+ {
+ MFloat bestIndErrorTotal = bestIndError[0] + bestIndError[1];
+ ParallelMath::Int16CompFlag errorBetter = ParallelMath::FloatFlagToInt16(ParallelMath::Less(bestIndErrorTotal, bestTotalError));
+ if (ParallelMath::AnySet(errorBetter))
+ {
+ bestIsThisMode = bestIsThisMode | errorBetter;
+
+ bestTotalError = ParallelMath::Min(bestTotalError, bestIndErrorTotal);
+ ParallelMath::ConditionalSet(bestFlip, errorBetter, ParallelMath::MakeUInt15(flip));
+ ParallelMath::ConditionalSet(bestD, errorBetter, ParallelMath::MakeUInt15(d));
+ for (int sector = 0; sector < 2; sector++)
+ {
+ ParallelMath::ConditionalSet(bestColors[sector], errorBetter, bestIndColors[sector]);
+ ParallelMath::ConditionalSet(bestSelectors[sector], errorBetter, bestIndSelectors[sector]);
+ ParallelMath::ConditionalSet(bestTables[sector], errorBetter, bestIndTable[sector]);
+ }
+ }
+ }
+ else
+ {
+ ParallelMath::Int16CompFlag canIgnoreSector[2] = { ParallelMath::MakeBoolInt16(false), ParallelMath::MakeBoolInt16(false) };
+ FindBestDifferentialCombination(flip, d, canIgnoreSector, bestIsThisMode, bestTotalError, bestFlip, bestD, bestColors, bestSelectors, bestTables, drs);
+ }
+ }
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (!ParallelMath::Extract(bestIsThisMode, block))
+ continue;
+
+ uint32_t highBits = 0;
+ uint32_t lowBits = 0;
+
+ int blockBestFlip = ParallelMath::Extract(bestFlip, block);
+ int blockBestD = ParallelMath::Extract(bestD, block);
+ int blockBestTables[2] = { ParallelMath::Extract(bestTables[0], block), ParallelMath::Extract(bestTables[1], block) };
+ ParallelMath::ScalarUInt16 blockBestSelectors[2] = { ParallelMath::Extract(bestSelectors[0], block), ParallelMath::Extract(bestSelectors[1], block) };
+
+ int colors[2][3];
+ for (int sector = 0; sector < 2; sector++)
+ {
+ int sectorColor = ParallelMath::Extract(bestColors[sector], block);
+ for (int ch = 0; ch < 3; ch++)
+ colors[sector][ch] = (sectorColor >> (ch * 5)) & 31;
+ }
+
+ EmitETC1Block(outputBuffer + block * 8, blockBestFlip, blockBestD, colors, blockBestTables, blockBestSelectors, false);
+ }
+}
+
+
+void cvtt::Internal::ETCComputer::CompressETC1PunchthroughBlockInternal(MFloat &bestTotalError, uint8_t *outputBuffer, const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const ParallelMath::Int16CompFlag isTransparent[16], DifferentialResolveStorage &drs, const Options &options)
+{
+ int numTries = 0;
+
+ MUInt15 zeroU15 = ParallelMath::MakeUInt15(0);
+ MUInt16 zeroU16 = ParallelMath::MakeUInt16(0);
+
+ MUInt15 bestColors[2] = { zeroU15, zeroU15 };
+ MUInt16 bestSelectors[2] = { zeroU16, zeroU16 };
+ MUInt15 bestTables[2] = { zeroU15, zeroU15 };
+ MUInt15 bestFlip = zeroU15;
+
+ MUInt15 sectorPixels[2][2][8][3];
+ ParallelMath::Int16CompFlag sectorTransparent[2][2][8];
+ MFloat sectorPreWeightedPixels[2][2][8][3];
+ MUInt15 sectorCumulative[2][2][3];
+
+ ParallelMath::Int16CompFlag bestIsThisMode = ParallelMath::MakeBoolInt16(false);
+
+ for (int flip = 0; flip < 2; flip++)
+ {
+ for (int sector = 0; sector < 2; sector++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ sectorCumulative[flip][sector][ch] = zeroU15;
+
+ for (int px = 0; px < 8; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ MUInt15 pixelChannelValue = pixels[g_flipTables[flip][sector][px]][ch];
+ sectorPixels[flip][sector][px][ch] = pixelChannelValue;
+ sectorPreWeightedPixels[flip][sector][px][ch] = preWeightedPixels[g_flipTables[flip][sector][px]][ch];
+ sectorCumulative[flip][sector][ch] = sectorCumulative[flip][sector][ch] + pixelChannelValue;
+ }
+
+ sectorTransparent[flip][sector][px] = isTransparent[g_flipTables[flip][sector][px]];
+ }
+ }
+ }
+
+ static const MUInt15 modifiers[8] =
+ {
+ ParallelMath::MakeUInt15(8),
+ ParallelMath::MakeUInt15(17),
+ ParallelMath::MakeUInt15(29),
+ ParallelMath::MakeUInt15(42),
+ ParallelMath::MakeUInt15(60),
+ ParallelMath::MakeUInt15(80),
+ ParallelMath::MakeUInt15(106),
+ ParallelMath::MakeUInt15(183),
+ };
+
+ bool isFakeBT709 = ((options.flags & cvtt::Flags::ETC_UseFakeBT709) != 0);
+
+ const int maxSectorCumulativeOffsets = 17;
+
+ for (int flip = 0; flip < 2; flip++)
+ {
+ ParallelMath::Int16CompFlag canIgnoreSector[2] = { ParallelMath::MakeBoolInt16(true), ParallelMath::MakeBoolInt16(false) };
+
+ for (int sector = 0; sector < 2; sector++)
+ for (int px = 0; px < 8; px++)
+ canIgnoreSector[sector] = canIgnoreSector[sector] & sectorTransparent[flip][sector][px];
+
+ drs.diffNumAttempts[0] = drs.diffNumAttempts[1] = zeroU15;
+
+ for (int sector = 0; sector < 2; sector++)
+ {
+ MUInt15 sectorNumOpaque = ParallelMath::MakeUInt15(0);
+ for (int px = 0; px < 8; px++)
+ sectorNumOpaque = sectorNumOpaque + ParallelMath::SelectOrZero(sectorTransparent[flip][sector][px], ParallelMath::MakeUInt15(1));
+
+ int sectorMaxOpaque = 0;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ sectorMaxOpaque = std::max<int>(sectorMaxOpaque, ParallelMath::Extract(sectorNumOpaque, block));
+
+ int sectorNumOpaqueMultipliers = sectorMaxOpaque * 2 + 1;
+
+ MUInt15 sectorNumOpaqueDenominator = ParallelMath::Max(ParallelMath::MakeUInt15(1), sectorNumOpaque) << 8;
+ MUInt15 sectorNumOpaqueAddend = sectorNumOpaque << 7;
+
+ MSInt16 sectorNumOpaqueSigned = ParallelMath::LosslessCast<MSInt16>::Cast(sectorNumOpaque);
+ MSInt16 negSectorNumOpaqueSigned = ParallelMath::MakeSInt16(0) - sectorNumOpaqueSigned;
+
+ MUInt15 sectorCumulativeMax = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(ParallelMath::MakeUInt15(255), sectorNumOpaque));
+
+ for (int table = 0; table < 8; table++)
+ {
+ MUInt15 possibleColors[maxSectorCumulativeOffsets];
+
+ MUInt15 quantized[3];
+ for (int om = -sectorMaxOpaque; om <= sectorMaxOpaque; om++)
+ {
+ MSInt16 clampedOffsetMult = ParallelMath::Max(ParallelMath::Min(ParallelMath::MakeSInt16(om), sectorNumOpaqueSigned), negSectorNumOpaqueSigned);
+ MSInt16 offset = ParallelMath::CompactMultiply(clampedOffsetMult, modifiers[table]);
+
+ for (int ch = 0; ch < 3; ch++)
+ {
+ // cu is in range 0..255*numOpaque (at most 0..2040)
+ MUInt15 cu15 = ParallelMath::Min(
+ sectorCumulativeMax,
+ ParallelMath::ToUInt15(
+ ParallelMath::Max(
+ ParallelMath::MakeSInt16(0),
+ ParallelMath::LosslessCast<MSInt16>::Cast(sectorCumulative[flip][sector][ch]) + offset
+ )
+ )
+ );
+
+ //quantized[ch] = (cu * 31 + (cu >> 3) + (numOpaque * 128)) / (numOpaque * 256)
+ MUInt16 cuTimes31 = (ParallelMath::LosslessCast<MUInt16>::Cast(cu15) << 5) - ParallelMath::LosslessCast<MUInt16>::Cast(cu15);
+ MUInt15 cuDiv8 = ParallelMath::RightShift(cu15, 3);
+ MUInt16 numerator = cuTimes31 + ParallelMath::LosslessCast<MUInt16>::Cast(cuDiv8 + sectorNumOpaqueAddend);
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ ParallelMath::PutUInt15(quantized[ch], block, ParallelMath::Extract(numerator, block) / ParallelMath::Extract(sectorNumOpaqueDenominator, block));
+ }
+
+ possibleColors[om + sectorMaxOpaque] = quantized[0] | (quantized[1] << 5) | (quantized[2] << 10);
+ }
+
+ ParallelMath::UInt15 numUniqueColors;
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t blockNumUniqueColors = 1;
+ for (int i = 1; i < sectorNumOpaqueMultipliers; i++)
+ {
+ uint16_t color = ParallelMath::Extract(possibleColors[i], block);
+ if (color != ParallelMath::Extract(possibleColors[blockNumUniqueColors - 1], block))
+ ParallelMath::PutUInt15(possibleColors[blockNumUniqueColors++], block, color);
+ }
+
+ ParallelMath::PutUInt15(numUniqueColors, block, blockNumUniqueColors);
+ }
+
+ int maxUniqueColors = ParallelMath::Extract(numUniqueColors, 0);
+ for (int block = 1; block < ParallelMath::ParallelSize; block++)
+ maxUniqueColors = std::max<int>(maxUniqueColors, ParallelMath::Extract(numUniqueColors, block));
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ uint16_t fillColor = ParallelMath::Extract(possibleColors[0], block);
+ for (int i = ParallelMath::Extract(numUniqueColors, block); i < maxUniqueColors; i++)
+ ParallelMath::PutUInt15(possibleColors[i], block, fillColor);
+ }
+
+ for (int i = 0; i < maxUniqueColors; i++)
+ {
+ MFloat error = ParallelMath::MakeFloatZero();
+ MUInt16 selectors = ParallelMath::MakeUInt16(0);
+ MUInt15 quantized = possibleColors[i];
+ TestHalfBlockPunchthrough(error, selectors, quantized, sectorPixels[flip][sector], sectorPreWeightedPixels[flip][sector], sectorTransparent[flip][sector], modifiers[table], options);
+
+ ParallelMath::Int16CompFlag isInBounds = ParallelMath::Less(ParallelMath::MakeUInt15(i), numUniqueColors);
+
+ MUInt15 storageIndexes = drs.diffNumAttempts[sector];
+ drs.diffNumAttempts[sector] = drs.diffNumAttempts[sector] + ParallelMath::SelectOrZero(isInBounds, ParallelMath::MakeUInt15(1));
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int storageIndex = ParallelMath::Extract(storageIndexes, block);
+
+ ParallelMath::PutFloat(drs.diffErrors[sector][storageIndex], block, ParallelMath::Extract(error, block));
+ ParallelMath::PutUInt16(drs.diffSelectors[sector][storageIndex], block, ParallelMath::Extract(selectors, block));
+ ParallelMath::PutUInt15(drs.diffColors[sector][storageIndex], block, ParallelMath::Extract(quantized, block));
+ ParallelMath::PutUInt15(drs.diffTables[sector][storageIndex], block, table);
+ }
+ }
+ }
+ }
+
+ MUInt15 bestDDummy = ParallelMath::MakeUInt15(0);
+ FindBestDifferentialCombination(flip, 1, canIgnoreSector, bestIsThisMode, bestTotalError, bestFlip, bestDDummy, bestColors, bestSelectors, bestTables, drs);
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ if (!ParallelMath::Extract(bestIsThisMode, block))
+ continue;
+
+ int blockBestColors[2][3];
+ int blockBestTables[2];
+ ParallelMath::ScalarUInt16 blockBestSelectors[2];
+ for (int sector = 0; sector < 2; sector++)
+ {
+ int sectorColor = ParallelMath::Extract(bestColors[sector], block);
+ for (int ch = 0; ch < 3; ch++)
+ blockBestColors[sector][ch] = (sectorColor >> (ch * 5)) & 31;
+
+ blockBestTables[sector] = ParallelMath::Extract(bestTables[sector], block);
+ blockBestSelectors[sector] = ParallelMath::Extract(bestSelectors[sector], block);
+ }
+
+ EmitETC1Block(outputBuffer + block * 8, ParallelMath::Extract(bestFlip, block), 1, blockBestColors, blockBestTables, blockBestSelectors, true);
+ }
+}
+
+
+cvtt::ETC1CompressionData *cvtt::Internal::ETCComputer::AllocETC1Data(cvtt::Kernels::allocFunc_t allocFunc, void *context)
+{
+ void *buffer = allocFunc(context, sizeof(cvtt::Internal::ETCComputer::ETC1CompressionDataInternal));
+ if (!buffer)
+ return NULL;
+ new (buffer) cvtt::Internal::ETCComputer::ETC1CompressionDataInternal(context);
+ return static_cast<ETC1CompressionData*>(buffer);
+}
+
+void cvtt::Internal::ETCComputer::ReleaseETC1Data(ETC1CompressionData *compressionData, cvtt::Kernels::freeFunc_t freeFunc)
+{
+ cvtt::Internal::ETCComputer::ETC1CompressionDataInternal* internalData = static_cast<cvtt::Internal::ETCComputer::ETC1CompressionDataInternal*>(compressionData);
+ void *context = internalData->m_context;
+ internalData->~ETC1CompressionDataInternal();
+ freeFunc(context, compressionData, sizeof(cvtt::Internal::ETCComputer::ETC1CompressionDataInternal));
+}
+
+cvtt::ETC2CompressionData *cvtt::Internal::ETCComputer::AllocETC2Data(cvtt::Kernels::allocFunc_t allocFunc, void *context, const cvtt::Options &options)
+{
+ void *buffer = allocFunc(context, sizeof(cvtt::Internal::ETCComputer::ETC2CompressionDataInternal));
+ if (!buffer)
+ return NULL;
+ new (buffer) cvtt::Internal::ETCComputer::ETC2CompressionDataInternal(context, options);
+ return static_cast<ETC2CompressionData*>(buffer);
+}
+
+void cvtt::Internal::ETCComputer::ReleaseETC2Data(ETC2CompressionData *compressionData, cvtt::Kernels::freeFunc_t freeFunc)
+{
+ cvtt::Internal::ETCComputer::ETC2CompressionDataInternal* internalData = static_cast<cvtt::Internal::ETCComputer::ETC2CompressionDataInternal*>(compressionData);
+ void *context = internalData->m_context;
+ internalData->~ETC2CompressionDataInternal();
+ freeFunc(context, compressionData, sizeof(cvtt::Internal::ETCComputer::ETC2CompressionDataInternal));
+}
+
+cvtt::Internal::ETCComputer::ETC2CompressionDataInternal::ETC2CompressionDataInternal(void *context, const cvtt::Options &options)
+ : m_context(context)
+{
+ const float cd[3] = { options.redWeight, options.greenWeight, options.blueWeight };
+ const float rotCD[3] = { cd[1], cd[2], cd[0] };
+
+ const float offs = -(rotCD[0] * cd[0] + rotCD[1] * cd[1] + rotCD[2] * cd[2]) / (cd[0] * cd[0] + cd[1] * cd[1] + cd[2] * cd[2]);
+
+ const float chromaAxis0[3] = { rotCD[0] + cd[0] * offs, rotCD[1] + cd[1] * offs, rotCD[2] + cd[2] * offs };
+
+ const float chromaAxis1Unnormalized[3] =
+ {
+ chromaAxis0[1] * cd[2] - chromaAxis0[2] * cd[1],
+ chromaAxis0[2] * cd[0] - chromaAxis0[0] * cd[2],
+ chromaAxis0[0] * cd[1] - chromaAxis0[1] * cd[0]
+ };
+
+ const float ca0LengthSq = (chromaAxis0[0] * chromaAxis0[0] + chromaAxis0[1] * chromaAxis0[1] + chromaAxis0[2] * chromaAxis0[2]);
+ const float ca1UNLengthSq = (chromaAxis1Unnormalized[0] * chromaAxis1Unnormalized[0] + chromaAxis1Unnormalized[1] * chromaAxis1Unnormalized[1] + chromaAxis1Unnormalized[2] * chromaAxis1Unnormalized[2]);
+ const float lengthRatio = static_cast<float>(std::sqrt(ca0LengthSq / ca1UNLengthSq));
+
+ const float chromaAxis1[3] = { chromaAxis1Unnormalized[0] * lengthRatio, chromaAxis1Unnormalized[1] * lengthRatio, chromaAxis1Unnormalized[2] * lengthRatio };
+
+ for (int i = 0; i < 3; i++)
+ {
+ m_chromaSideAxis0[i] = chromaAxis0[i];
+ m_chromaSideAxis1[i] = chromaAxis1[i];
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_ETC.h b/thirdparty/cvtt/ConvectionKernels_ETC.h
new file mode 100644
index 0000000000..5e3c4d74fd
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_ETC.h
@@ -0,0 +1,126 @@
+#pragma once
+#ifndef __CVTT_CONVECTIONKERNELS_ETC_H__
+#define __CVTT_CONVECTIONKERNELS_ETC_H__
+
+#include "ConvectionKernels.h"
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ struct Options;
+
+ namespace Internal
+ {
+ class ETCComputer
+ {
+ public:
+ static void CompressETC1Block(uint8_t *outputBuffer, const PixelBlockU8 *inputBlocks, ETC1CompressionData *compressionData, const Options &options);
+ static void CompressETC2Block(uint8_t *outputBuffer, const PixelBlockU8 *inputBlocks, ETC2CompressionData *compressionData, const Options &options, bool punchthroughAlpha);
+ static void CompressETC2AlphaBlock(uint8_t *outputBuffer, const PixelBlockU8 *inputBlocks, const Options &options);
+ static void CompressEACBlock(uint8_t *outputBuffer, const PixelBlockScalarS16 *inputBlocks, bool isSigned, const Options &options);
+
+ static ETC2CompressionData *AllocETC2Data(cvtt::Kernels::allocFunc_t allocFunc, void *context, const cvtt::Options &options);
+ static void ReleaseETC2Data(ETC2CompressionData *compressionData, cvtt::Kernels::freeFunc_t freeFunc);
+
+ static ETC1CompressionData *AllocETC1Data(cvtt::Kernels::allocFunc_t allocFunc, void *context);
+ static void ReleaseETC1Data(ETC1CompressionData *compressionData, cvtt::Kernels::freeFunc_t freeFunc);
+
+ private:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+ typedef ParallelMath::UInt31 MUInt31;
+
+ struct DifferentialResolveStorage
+ {
+ static const unsigned int MaxAttemptsPerSector = 57 + 81 + 81 + 81 + 81 + 81 + 81 + 81;
+
+ MUInt15 diffNumAttempts[2];
+ MFloat diffErrors[2][MaxAttemptsPerSector];
+ MUInt16 diffSelectors[2][MaxAttemptsPerSector];
+ MUInt15 diffColors[2][MaxAttemptsPerSector];
+ MUInt15 diffTables[2][MaxAttemptsPerSector];
+
+ uint16_t attemptSortIndexes[2][MaxAttemptsPerSector];
+ };
+
+ struct HModeEval
+ {
+ MFloat errors[62][16];
+ MUInt16 signBits[62];
+ MUInt15 uniqueQuantizedColors[62];
+ MUInt15 numUniqueColors[2];
+ };
+
+ struct ETC1CompressionDataInternal : public cvtt::ETC1CompressionData
+ {
+ explicit ETC1CompressionDataInternal(void *context)
+ : m_context(context)
+ {
+ }
+
+ DifferentialResolveStorage m_drs;
+ void *m_context;
+ };
+
+ struct ETC2CompressionDataInternal : public cvtt::ETC2CompressionData
+ {
+ explicit ETC2CompressionDataInternal(void *context, const cvtt::Options &options);
+
+ HModeEval m_h;
+ DifferentialResolveStorage m_drs;
+
+ void *m_context;
+ float m_chromaSideAxis0[3];
+ float m_chromaSideAxis1[3];
+ };
+
+ static MFloat ComputeErrorUniform(const MUInt15 pixelA[3], const MUInt15 pixelB[3]);
+ static MFloat ComputeErrorWeighted(const MUInt15 reconstructed[3], const MFloat pixelB[3], const Options options);
+ static MFloat ComputeErrorFakeBT709(const MUInt15 reconstructed[3], const MFloat pixelB[3]);
+
+ static void TestHalfBlock(MFloat &outError, MUInt16 &outSelectors, MUInt15 quantizedPackedColor, const MUInt15 pixels[8][3], const MFloat preWeightedPixels[8][3], const MSInt16 modifiers[4], bool isDifferential, const Options &options);
+ static void TestHalfBlockPunchthrough(MFloat &outError, MUInt16 &outSelectors, MUInt15 quantizedPackedColor, const MUInt15 pixels[8][3], const MFloat preWeightedPixels[8][3], const ParallelMath::Int16CompFlag isTransparent[8], const MUInt15 modifier, const Options &options);
+ static void FindBestDifferentialCombination(int flip, int d, const ParallelMath::Int16CompFlag canIgnoreSector[2], ParallelMath::Int16CompFlag& bestIsThisMode, MFloat& bestTotalError, MUInt15& bestFlip, MUInt15& bestD, MUInt15 bestColors[2], MUInt16 bestSelectors[2], MUInt15 bestTables[2], DifferentialResolveStorage &drs);
+
+ static ParallelMath::Int16CompFlag ETCDifferentialIsLegalForChannel(const MUInt15 &a, const MUInt15 &b);
+ static ParallelMath::Int16CompFlag ETCDifferentialIsLegal(const MUInt15 &a, const MUInt15 &b);
+ static bool ETCDifferentialIsLegalForChannelScalar(const uint16_t &a, const uint16_t &b);
+ static bool ETCDifferentialIsLegalScalar(const uint16_t &a, const uint16_t &b);
+
+ static void EncodeTMode(uint8_t *outputBuffer, MFloat &bestError, const ParallelMath::Int16CompFlag isIsolated[16], const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const Options &options);
+ static void EncodeHMode(uint8_t *outputBuffer, MFloat &bestError, const ParallelMath::Int16CompFlag groupings[16], const MUInt15 pixels[16][3], HModeEval &he, const MFloat preWeightedPixels[16][3], const Options &options);
+
+ static void EncodeVirtualTModePunchthrough(uint8_t *outputBuffer, MFloat &bestError, const ParallelMath::Int16CompFlag isIsolated[16], const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const ParallelMath::Int16CompFlag isTransparent[16], const ParallelMath::Int16CompFlag& anyTransparent, const ParallelMath::Int16CompFlag& allTransparent, const Options &options);
+
+ static MUInt15 DecodePlanarCoeff(const MUInt15 &coeff, int ch);
+ static void EncodePlanar(uint8_t *outputBuffer, MFloat &bestError, const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const Options &options);
+
+ static void CompressETC1BlockInternal(MFloat &bestTotalError, uint8_t *outputBuffer, const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], DifferentialResolveStorage& compressionData, const Options &options, bool punchthrough);
+ static void CompressETC1PunchthroughBlockInternal(MFloat &bestTotalError, uint8_t *outputBuffer, const MUInt15 pixels[16][3], const MFloat preWeightedPixels[16][3], const ParallelMath::Int16CompFlag isTransparent[16], DifferentialResolveStorage& compressionData, const Options &options);
+ static void CompressETC2AlphaBlockInternal(uint8_t *outputBuffer, const MUInt15 pixels[16], bool is11Bit, bool isSigned, const Options &options);
+
+ static void ExtractBlocks(MUInt15 pixels[16][3], MFloat preWeightedPixels[16][3], const PixelBlockU8 *inputBlocks, const Options &options);
+
+ static void ResolveHalfBlockFakeBT709RoundingAccurate(MUInt15 quantized[3], const MUInt15 sectorCumulative[3], bool isDifferential);
+ static void ResolveHalfBlockFakeBT709RoundingFast(MUInt15 quantized[3], const MUInt15 sectorCumulative[3], bool isDifferential);
+ static void ResolveTHFakeBT709Rounding(MUInt15 quantized[3], const MUInt15 target[3], const MUInt15 &granularity);
+ static void ConvertToFakeBT709(MFloat yuv[3], const MUInt15 color[3]);
+ static void ConvertToFakeBT709(MFloat yuv[3], const MFloat color[3]);
+ static void ConvertToFakeBT709(MFloat yuv[3], const MFloat &r, const MFloat &g, const MFloat &b);
+ static void ConvertFromFakeBT709(MFloat rgb[3], const MFloat yuv[3]);
+
+ static void QuantizeETC2Alpha(int tableIndex, const MUInt15& value, const MUInt15& baseValue, const MUInt15& multiplier, bool is11Bit, bool isSigned, MUInt15& outIndexes, MUInt15& outQuantizedValues);
+
+ static void EmitTModeBlock(uint8_t *outputBuffer, const ParallelMath::ScalarUInt16 lineColor[3], const ParallelMath::ScalarUInt16 isolatedColor[3], int32_t packedSelectors, ParallelMath::ScalarUInt16 table, bool opaque);
+ static void EmitHModeBlock(uint8_t *outputBuffer, const ParallelMath::ScalarUInt16 blockColors[2], ParallelMath::ScalarUInt16 sectorBits, ParallelMath::ScalarUInt16 signBits, ParallelMath::ScalarUInt16 table, bool opaque);
+ static void EmitETC1Block(uint8_t *outputBuffer, int blockBestFlip, int blockBestD, const int blockBestColors[2][3], const int blockBestTables[2], const ParallelMath::ScalarUInt16 blockBestSelectors[2], bool transparent);
+
+ static const int g_flipTables[2][2][8];
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_ETC1.h b/thirdparty/cvtt/ConvectionKernels_ETC1.h
new file mode 100644
index 0000000000..775e41669f
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_ETC1.h
@@ -0,0 +1,29 @@
+#include <stdint.h>
+
+namespace cvtt
+{
+ namespace Tables
+ {
+ namespace ETC1
+ {
+ const int16_t g_potentialOffsets4[] =
+ {
+ 57, -64, -58, -54, -52, -48, -46, -44, -42, -40, -38, -36, -34, -32, -30, -28, -26, -24, -22, -20, -18, -16, -14, -12, -10, -8, -6, -4, -2, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32, 34, 36, 38, 40, 42, 44, 46, 48, 52, 54, 58, 64,
+ 81, -136, -124, -114, -112, -102, -100, -92, -90, -88, -80, -78, -76, -70, -68, -66, -64, -58, -56, -54, -52, -48, -46, -44, -42, -40, -36, -34, -32, -30, -26, -24, -22, -20, -18, -14, -12, -10, -8, -4, -2, 0, 2, 4, 8, 10, 12, 14, 18, 20, 22, 24, 26, 30, 32, 34, 36, 40, 42, 44, 46, 48, 52, 54, 56, 58, 64, 66, 68, 70, 76, 78, 80, 88, 90, 92, 100, 102, 112, 114, 124, 136,
+ 81, -232, -212, -194, -192, -174, -172, -156, -154, -152, -136, -134, -132, -118, -116, -114, -112, -98, -96, -94, -92, -80, -78, -76, -74, -72, -60, -58, -56, -54, -42, -40, -38, -36, -34, -22, -20, -18, -16, -4, -2, 0, 2, 4, 16, 18, 20, 22, 34, 36, 38, 40, 42, 54, 56, 58, 60, 72, 74, 76, 78, 80, 92, 94, 96, 98, 112, 114, 116, 118, 132, 134, 136, 152, 154, 156, 172, 174, 192, 194, 212, 232,
+ 81, -336, -307, -281, -278, -252, -249, -226, -223, -220, -197, -194, -191, -171, -168, -165, -162, -142, -139, -136, -133, -116, -113, -110, -107, -104, -87, -84, -81, -78, -61, -58, -55, -52, -49, -32, -29, -26, -23, -6, -3, 0, 3, 6, 23, 26, 29, 32, 49, 52, 55, 58, 61, 78, 81, 84, 87, 104, 107, 110, 113, 116, 133, 136, 139, 142, 162, 165, 168, 171, 191, 194, 197, 220, 223, 226, 249, 252, 278, 281, 307, 336,
+ 81, -480, -438, -402, -396, -360, -354, -324, -318, -312, -282, -276, -270, -246, -240, -234, -228, -204, -198, -192, -186, -168, -162, -156, -150, -144, -126, -120, -114, -108, -90, -84, -78, -72, -66, -48, -42, -36, -30, -12, -6, 0, 6, 12, 30, 36, 42, 48, 66, 72, 78, 84, 90, 108, 114, 120, 126, 144, 150, 156, 162, 168, 186, 192, 198, 204, 228, 234, 240, 246, 270, 276, 282, 312, 318, 324, 354, 360, 396, 402, 438, 480,
+ 81, -640, -584, -536, -528, -480, -472, -432, -424, -416, -376, -368, -360, -328, -320, -312, -304, -272, -264, -256, -248, -224, -216, -208, -200, -192, -168, -160, -152, -144, -120, -112, -104, -96, -88, -64, -56, -48, -40, -16, -8, 0, 8, 16, 40, 48, 56, 64, 88, 96, 104, 112, 120, 144, 152, 160, 168, 192, 200, 208, 216, 224, 248, 256, 264, 272, 304, 312, 320, 328, 360, 368, 376, 416, 424, 432, 472, 480, 528, 536, 584, 640,
+ 81, -848, -775, -709, -702, -636, -629, -570, -563, -556, -497, -490, -483, -431, -424, -417, -410, -358, -351, -344, -337, -292, -285, -278, -271, -264, -219, -212, -205, -198, -153, -146, -139, -132, -125, -80, -73, -66, -59, -14, -7, 0, 7, 14, 59, 66, 73, 80, 125, 132, 139, 146, 153, 198, 205, 212, 219, 264, 271, 278, 285, 292, 337, 344, 351, 358, 410, 417, 424, 431, 483, 490, 497, 556, 563, 570, 629, 636, 702, 709, 775, 848,
+ 81, -1464, -1328, -1234, -1192, -1098, -1056, -1004, -962, -920, -868, -826, -784, -774, -732, -690, -648, -638, -596, -554, -544, -512, -502, -460, -418, -408, -376, -366, -324, -314, -282, -272, -230, -188, -178, -146, -136, -94, -84, -52, -42, 0, 42, 52, 84, 94, 136, 146, 178, 188, 230, 272, 282, 314, 324, 366, 376, 408, 418, 460, 502, 512, 544, 554, 596, 638, 648, 690, 732, 774, 784, 826, 868, 920, 962, 1004, 1056, 1098, 1192, 1234, 1328, 1464
+ };
+
+ const unsigned int g_maxPotentialOffsets = 81;
+
+ const int16_t g_thModifierTable[8] =
+ {
+ 3, 6, 11, 16, 23, 32, 41, 64
+ };
+ }
+ }
+}
diff --git a/thirdparty/cvtt/ConvectionKernels_ETC2.h b/thirdparty/cvtt/ConvectionKernels_ETC2.h
new file mode 100644
index 0000000000..4befc8e8c2
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_ETC2.h
@@ -0,0 +1,35 @@
+#include <stdint.h>
+
+namespace cvtt
+{
+ namespace Tables
+ {
+ namespace ETC2
+ {
+ const int16_t g_thModifierTable[8] =
+ {
+ 3, 6, 11, 16, 23, 32, 41, 64
+ };
+
+ const int16_t g_alphaModifierTablePositive[16][4] =
+ {
+ { 2, 5, 8, 14, },
+ { 2, 6, 9, 12, },
+ { 1, 4, 7, 12, },
+ { 1, 3, 5, 12, },
+ { 2, 5, 7, 11, },
+ { 2, 6, 8, 10, },
+ { 3, 6, 7, 10, },
+ { 2, 4, 7, 10, },
+ { 1, 5, 7, 9, },
+ { 1, 4, 7, 9, },
+ { 1, 3, 7, 9, },
+ { 1, 4, 6, 9, },
+ { 2, 3, 6, 9, },
+ { 0, 1, 2, 9, },
+ { 3, 5, 7, 8, },
+ { 2, 4, 6, 8, },
+ };
+ }
+ }
+}
diff --git a/thirdparty/cvtt/ConvectionKernels_ETC2_Rounding.h b/thirdparty/cvtt/ConvectionKernels_ETC2_Rounding.h
new file mode 100644
index 0000000000..a4f5a3ddfa
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_ETC2_Rounding.h
@@ -0,0 +1,27 @@
+#pragma once
+#include <stdint.h>
+
+// This file is generated by the MakeTables app. Do not edit this file manually.
+
+namespace cvtt { namespace Tables { namespace ETC2 {
+ const int g_alphaRoundingTableWidth = 13;
+ const uint8_t g_alphaRoundingTables[16][13] =
+ {
+ { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 2, 3 },
+ { 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3 },
+ { 0, 0, 0, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3 },
+ { 0, 0, 0, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3 },
+ { 0, 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3 },
+ { 0, 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3 },
+ { 0, 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3 },
+ { 0, 0, 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3 },
+ { 0, 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 3 },
+ { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3 },
+ { 0, 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3 },
+ { 0, 0, 0, 1, 1, 1, 2, 2, 3, 3, 3, 3, 3 },
+ { 0, 0, 0, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3 },
+ { 0, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3 },
+ { 0, 0, 0, 0, 0, 1, 1, 2, 3, 3, 3, 3, 3 },
+ { 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 3, 3, 3 },
+ };
+}}}
diff --git a/thirdparty/cvtt/ConvectionKernels_EndpointRefiner.h b/thirdparty/cvtt/ConvectionKernels_EndpointRefiner.h
new file mode 100644
index 0000000000..c1276553b2
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_EndpointRefiner.h
@@ -0,0 +1,181 @@
+#pragma once
+#ifndef __CVTT_ENDPOINTREFINER_H__
+#define __CVTT_ENDPOINTREFINER_H__
+
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ // Solve for a, b where v = a*t + b
+ // This allows endpoints to be mapped to where T=0 and T=1
+ // Least squares from totals:
+ // a = (tv - t*v/w)/(tt - t*t/w)
+ // b = (v - a*t)/w
+ template<int TVectorSize>
+ class EndpointRefiner
+ {
+ public:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::AInt16 MAInt16;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+
+ MFloat m_tv[TVectorSize];
+ MFloat m_v[TVectorSize];
+ MFloat m_tt;
+ MFloat m_t;
+ MFloat m_w;
+ int m_wu;
+
+ float m_rcpMaxIndex;
+ float m_channelWeights[TVectorSize];
+ float m_rcpChannelWeights[TVectorSize];
+
+ void Init(int indexRange, const float channelWeights[TVectorSize])
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ m_tv[ch] = ParallelMath::MakeFloatZero();
+ m_v[ch] = ParallelMath::MakeFloatZero();
+ }
+ m_tt = ParallelMath::MakeFloatZero();
+ m_t = ParallelMath::MakeFloatZero();
+ m_w = ParallelMath::MakeFloatZero();
+
+ m_rcpMaxIndex = 1.0f / static_cast<float>(indexRange - 1);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ m_channelWeights[ch] = channelWeights[ch];
+ m_rcpChannelWeights[ch] = 1.0f;
+ if (m_channelWeights[ch] != 0.0f)
+ m_rcpChannelWeights[ch] = 1.0f / channelWeights[ch];
+ }
+
+ m_wu = 0;
+ }
+
+ void ContributePW(const MFloat *pwFloatPixel, const MUInt15 &index, const MFloat &weight)
+ {
+ MFloat t = ParallelMath::ToFloat(index) * m_rcpMaxIndex;
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MFloat v = pwFloatPixel[ch] * weight;
+
+ m_tv[ch] = m_tv[ch] + t * v;
+ m_v[ch] = m_v[ch] + v;
+ }
+ m_tt = m_tt + weight * t * t;
+ m_t = m_t + weight * t;
+ m_w = m_w + weight;
+ }
+
+ void ContributeUnweightedPW(const MFloat *pwFloatPixel, const MUInt15 &index, int numRealChannels)
+ {
+ MFloat t = ParallelMath::ToFloat(index) * m_rcpMaxIndex;
+
+ for (int ch = 0; ch < numRealChannels; ch++)
+ {
+ MFloat v = pwFloatPixel[ch];
+
+ m_tv[ch] = m_tv[ch] + t * v;
+ m_v[ch] = m_v[ch] + v;
+ }
+ m_tt = m_tt + t * t;
+ m_t = m_t + t;
+ m_wu++;
+ }
+
+ void ContributeUnweightedPW(const MFloat *floatPixel, const MUInt15 &index)
+ {
+ ContributeUnweightedPW(floatPixel, index, TVectorSize);
+ }
+
+ void GetRefinedEndpoints(MFloat endPoint[2][TVectorSize])
+ {
+ // a = (tv - t*v/w)/(tt - t*t/w)
+ // b = (v - a*t)/w
+ MFloat w = m_w + ParallelMath::MakeFloat(static_cast<float>(m_wu));
+
+ ParallelMath::MakeSafeDenominator(w);
+ MFloat wRcp = ParallelMath::Reciprocal(w);
+
+ MFloat adenom = (m_tt * w - m_t * m_t) * wRcp;
+
+ ParallelMath::FloatCompFlag adenomZero = ParallelMath::Equal(adenom, ParallelMath::MakeFloatZero());
+ ParallelMath::ConditionalSet(adenom, adenomZero, ParallelMath::MakeFloat(1.0f));
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ /*
+ if (adenom == 0.0)
+ p1 = p2 = er.v / er.w;
+ else
+ {
+ float4 a = (er.tv - er.t*er.v / er.w) / adenom;
+ float4 b = (er.v - a * er.t) / er.w;
+ p1 = b;
+ p2 = a + b;
+ }
+ */
+
+ MFloat a = (m_tv[ch] - m_t * m_v[ch] * wRcp) / adenom;
+ MFloat b = (m_v[ch] - a * m_t) * wRcp;
+
+ MFloat p1 = b;
+ MFloat p2 = a + b;
+
+ ParallelMath::ConditionalSet(p1, adenomZero, (m_v[ch] * wRcp));
+ ParallelMath::ConditionalSet(p2, adenomZero, p1);
+
+ // Unweight
+ float inverseWeight = m_rcpChannelWeights[ch];
+
+ endPoint[0][ch] = p1 * inverseWeight;
+ endPoint[1][ch] = p2 * inverseWeight;
+ }
+ }
+
+ void GetRefinedEndpointsLDR(MUInt15 endPoint[2][TVectorSize], int numRealChannels, const ParallelMath::RoundTowardNearestForScope *roundingMode)
+ {
+ MFloat floatEndPoint[2][TVectorSize];
+ GetRefinedEndpoints(floatEndPoint);
+
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < TVectorSize; ch++)
+ endPoint[epi][ch] = ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(floatEndPoint[epi][ch], 0.0f, 255.0f), roundingMode);
+ }
+
+ void GetRefinedEndpointsLDR(MUInt15 endPoint[2][TVectorSize], const ParallelMath::RoundTowardNearestForScope *roundingMode)
+ {
+ GetRefinedEndpointsLDR(endPoint, TVectorSize, roundingMode);
+ }
+
+ void GetRefinedEndpointsHDR(MSInt16 endPoint[2][TVectorSize], bool isSigned, const ParallelMath::RoundTowardNearestForScope *roundingMode)
+ {
+ MFloat floatEndPoint[2][TVectorSize];
+ GetRefinedEndpoints(floatEndPoint);
+
+ for (int epi = 0; epi < 2; epi++)
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MFloat f = floatEndPoint[epi][ch];
+ if (isSigned)
+ endPoint[epi][ch] = ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::RoundAndConvertToS16(ParallelMath::Clamp(f, -31743.0f, 31743.0f), roundingMode));
+ else
+ endPoint[epi][ch] = ParallelMath::LosslessCast<MSInt16>::Cast(ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(f, 0.0f, 31743.0f), roundingMode));
+ }
+ }
+ }
+ };
+ }
+}
+
+#endif
+
diff --git a/thirdparty/cvtt/ConvectionKernels_EndpointSelector.h b/thirdparty/cvtt/ConvectionKernels_EndpointSelector.h
new file mode 100644
index 0000000000..e09dfd248c
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_EndpointSelector.h
@@ -0,0 +1,153 @@
+#pragma once
+#ifndef __CVTT_ENDPOINTSELECTOR_H__
+#define __CVTT_ENDPOINTSELECTOR_H__
+
+#include "ConvectionKernels_ParallelMath.h"
+#include "ConvectionKernels_UnfinishedEndpoints.h"
+#include "ConvectionKernels_PackedCovarianceMatrix.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ static const int NumEndpointSelectorPasses = 3;
+
+ template<int TVectorSize, int TIterationCount>
+ class EndpointSelector
+ {
+ public:
+ typedef ParallelMath::Float MFloat;
+
+ EndpointSelector()
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ m_centroid[ch] = ParallelMath::MakeFloatZero();
+ m_direction[ch] = ParallelMath::MakeFloatZero();
+ }
+ m_weightTotal = ParallelMath::MakeFloatZero();
+ m_minDist = ParallelMath::MakeFloat(FLT_MAX);
+ m_maxDist = ParallelMath::MakeFloat(-FLT_MAX);
+ }
+
+ void ContributePass(const MFloat *value, int pass, const MFloat &weight)
+ {
+ if (pass == 0)
+ ContributeCentroid(value, weight);
+ else if (pass == 1)
+ ContributeDirection(value, weight);
+ else if (pass == 2)
+ ContributeMinMax(value);
+ }
+
+ void FinishPass(int pass)
+ {
+ if (pass == 0)
+ FinishCentroid();
+ else if (pass == 1)
+ FinishDirection();
+ }
+
+ UnfinishedEndpoints<TVectorSize> GetEndpoints(const float channelWeights[TVectorSize]) const
+ {
+ MFloat unweightedBase[TVectorSize];
+ MFloat unweightedOffset[TVectorSize];
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MFloat min = m_centroid[ch] + m_direction[ch] * m_minDist;
+ MFloat max = m_centroid[ch] + m_direction[ch] * m_maxDist;
+
+ float safeWeight = channelWeights[ch];
+ if (safeWeight == 0.f)
+ safeWeight = 1.0f;
+
+ unweightedBase[ch] = min / channelWeights[ch];
+ unweightedOffset[ch] = (max - min) / channelWeights[ch];
+ }
+
+ return UnfinishedEndpoints<TVectorSize>(unweightedBase, unweightedOffset);
+ }
+
+ private:
+ void ContributeCentroid(const MFloat *value, const MFloat &weight)
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_centroid[ch] = m_centroid[ch] + value[ch] * weight;
+ m_weightTotal = m_weightTotal + weight;
+ }
+
+ void FinishCentroid()
+ {
+ MFloat denom = m_weightTotal;
+ ParallelMath::MakeSafeDenominator(denom);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_centroid[ch] = m_centroid[ch] / denom;
+ }
+
+ void ContributeDirection(const MFloat *value, const MFloat &weight)
+ {
+ MFloat diff[TVectorSize];
+ for (int ch = 0; ch < TVectorSize; ch++)
+ diff[ch] = value[ch] - m_centroid[ch];
+
+ m_covarianceMatrix.Add(diff, weight);
+ }
+
+ void FinishDirection()
+ {
+ MFloat approx[TVectorSize];
+ for (int ch = 0; ch < TVectorSize; ch++)
+ approx[ch] = ParallelMath::MakeFloat(1.0f);
+
+ for (int i = 0; i < TIterationCount; i++)
+ {
+ MFloat product[TVectorSize];
+ m_covarianceMatrix.Product(product, approx);
+
+ MFloat largestComponent = product[0];
+ for (int ch = 1; ch < TVectorSize; ch++)
+ largestComponent = ParallelMath::Max(largestComponent, product[ch]);
+
+ // product = largestComponent*newApprox
+ ParallelMath::MakeSafeDenominator(largestComponent);
+ for (int ch = 0; ch < TVectorSize; ch++)
+ approx[ch] = product[ch] / largestComponent;
+ }
+
+ // Normalize
+ MFloat approxLen = ParallelMath::MakeFloatZero();
+ for (int ch = 0; ch < TVectorSize; ch++)
+ approxLen = approxLen + approx[ch] * approx[ch];
+
+ approxLen = ParallelMath::Sqrt(approxLen);
+
+ ParallelMath::MakeSafeDenominator(approxLen);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_direction[ch] = approx[ch] / approxLen;
+ }
+
+ void ContributeMinMax(const MFloat *value)
+ {
+ MFloat dist = ParallelMath::MakeFloatZero();
+ for (int ch = 0; ch < TVectorSize; ch++)
+ dist = dist + m_direction[ch] * (value[ch] - m_centroid[ch]);
+
+ m_minDist = ParallelMath::Min(m_minDist, dist);
+ m_maxDist = ParallelMath::Max(m_maxDist, dist);
+ }
+
+ ParallelMath::Float m_centroid[TVectorSize];
+ ParallelMath::Float m_direction[TVectorSize];
+ PackedCovarianceMatrix<TVectorSize> m_covarianceMatrix;
+ ParallelMath::Float m_weightTotal;
+
+ ParallelMath::Float m_minDist;
+ ParallelMath::Float m_maxDist;
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_FakeBT709_Rounding.h b/thirdparty/cvtt/ConvectionKernels_FakeBT709_Rounding.h
new file mode 100644
index 0000000000..1eb924befe
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_FakeBT709_Rounding.h
@@ -0,0 +1,282 @@
+#pragma once
+#include <stdint.h>
+
+// This file is generated by the MakeTables app. Do not edit this file manually.
+
+namespace cvtt { namespace Tables { namespace FakeBT709 {
+ const uint8_t g_rounding16[] =
+ {
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 4, 4, 4, 4, 4, 4, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4,
+ 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 4, 4, 4, 4, 4, 4,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 2, 2, 2, 2, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6, 6,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 2, 2, 2, 2, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6, 6,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6, 6,
+ 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6, 6,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 6, 6, 6,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 1, 1, 1, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7,
+ 3, 3, 3, 3, 3, 3, 3, 3, 3, 7, 7, 7, 7, 7, 7, 7,
+
+ };
+}}}
diff --git a/thirdparty/cvtt/ConvectionKernels_IndexSelector.cpp b/thirdparty/cvtt/ConvectionKernels_IndexSelector.cpp
new file mode 100644
index 0000000000..b3d1b5497e
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_IndexSelector.cpp
@@ -0,0 +1,66 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels_IndexSelector.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ const ParallelMath::UInt16 g_weightReciprocals[17] =
+ {
+ ParallelMath::MakeUInt16(0), // -1
+ ParallelMath::MakeUInt16(0), // 0
+ ParallelMath::MakeUInt16(32768), // 1
+ ParallelMath::MakeUInt16(16384), // 2
+ ParallelMath::MakeUInt16(10923), // 3
+ ParallelMath::MakeUInt16(8192), // 4
+ ParallelMath::MakeUInt16(6554), // 5
+ ParallelMath::MakeUInt16(5461), // 6
+ ParallelMath::MakeUInt16(4681), // 7
+ ParallelMath::MakeUInt16(4096), // 8
+ ParallelMath::MakeUInt16(3641), // 9
+ ParallelMath::MakeUInt16(3277), // 10
+ ParallelMath::MakeUInt16(2979), // 11
+ ParallelMath::MakeUInt16(2731), // 12
+ ParallelMath::MakeUInt16(2521), // 13
+ ParallelMath::MakeUInt16(2341), // 14
+ ParallelMath::MakeUInt16(2185), // 15
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_IndexSelector.h b/thirdparty/cvtt/ConvectionKernels_IndexSelector.h
new file mode 100644
index 0000000000..0f9d209183
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_IndexSelector.h
@@ -0,0 +1,147 @@
+#pragma once
+#ifndef __CVTT_INDEXSELECTOR_H__
+#define __CVTT_INDEXSELECTOR_H__
+
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ extern const ParallelMath::UInt16 g_weightReciprocals[17];
+
+ template<int TVectorSize>
+ class IndexSelector
+ {
+ public:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::AInt16 MAInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+ typedef ParallelMath::UInt31 MUInt31;
+
+
+ template<class TInterpolationEPType, class TColorEPType>
+ void Init(const float *channelWeights, const TInterpolationEPType interpolationEndPoints[2][TVectorSize], const TColorEPType colorSpaceEndpoints[2][TVectorSize], int range)
+ {
+ // In BC6H, the interpolation endpoints are higher-precision than the endpoints in color space.
+ // We need to select indexes using the color-space endpoints.
+
+ m_isUniform = true;
+ for (int ch = 1; ch < TVectorSize; ch++)
+ {
+ if (channelWeights[ch] != channelWeights[0])
+ m_isUniform = false;
+ }
+
+ // To work with channel weights, we need something where:
+ // pxDiff = px - ep[0]
+ // epDiff = ep[1] - ep[0]
+ //
+ // weightedEPDiff = epDiff * channelWeights
+ // normalizedWeightedAxis = weightedEPDiff / len(weightedEPDiff)
+ // normalizedIndex = dot(pxDiff * channelWeights, normalizedWeightedAxis) / len(weightedEPDiff)
+ // index = normalizedIndex * maxValue
+ //
+ // Equivalent to:
+ // axis = channelWeights * maxValue * epDiff * channelWeights / lenSquared(epDiff * channelWeights)
+ // index = dot(axis, pxDiff)
+
+ for (int ep = 0; ep < 2; ep++)
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_endPoint[ep][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(interpolationEndPoints[ep][ch]);
+
+ m_range = range;
+ m_maxValue = static_cast<float>(range - 1);
+
+ MFloat epDiffWeighted[TVectorSize];
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ m_origin[ch] = ParallelMath::ToFloat(colorSpaceEndpoints[0][ch]);
+ MFloat opposingOriginCh = ParallelMath::ToFloat(colorSpaceEndpoints[1][ch]);
+ epDiffWeighted[ch] = (opposingOriginCh - m_origin[ch]) * channelWeights[ch];
+ }
+
+ MFloat lenSquared = epDiffWeighted[0] * epDiffWeighted[0];
+ for (int ch = 1; ch < TVectorSize; ch++)
+ lenSquared = lenSquared + epDiffWeighted[ch] * epDiffWeighted[ch];
+
+ ParallelMath::MakeSafeDenominator(lenSquared);
+
+ MFloat maxValueDividedByLengthSquared = ParallelMath::MakeFloat(m_maxValue) / lenSquared;
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_axis[ch] = epDiffWeighted[ch] * channelWeights[ch] * maxValueDividedByLengthSquared;
+ }
+
+ template<bool TSigned>
+ void Init(const float channelWeights[TVectorSize], const MUInt15 endPoints[2][TVectorSize], int range)
+ {
+ MAInt16 converted[2][TVectorSize];
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < TVectorSize; ch++)
+ converted[epi][ch] = ParallelMath::LosslessCast<MAInt16>::Cast(endPoints[epi][ch]);
+
+ Init<MUInt15, MUInt15>(channelWeights, endPoints, endPoints, range);
+ }
+
+ void ReconstructLDR_BC7(const MUInt15 &index, MUInt15* pixel, int numRealChannels)
+ {
+ MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 256, 9));
+
+ for (int ch = 0; ch < numRealChannels; ch++)
+ {
+ MUInt15 ep0f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply((ParallelMath::MakeUInt15(64) - weight), ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[0][ch])));
+ MUInt15 ep1f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(weight, ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[1][ch])));
+ pixel[ch] = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ep0f + ep1f + ParallelMath::MakeUInt15(32), 6));
+ }
+ }
+
+ void ReconstructLDRPrecise(const MUInt15 &index, MUInt15* pixel, int numRealChannels)
+ {
+ MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 64, 7));
+
+ for (int ch = 0; ch < numRealChannels; ch++)
+ {
+ MUInt15 ep0f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply((ParallelMath::MakeUInt15(256) - weight), ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[0][ch])));
+ MUInt15 ep1f = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::CompactMultiply(weight, ParallelMath::LosslessCast<MUInt15>::Cast(m_endPoint[1][ch])));
+ pixel[ch] = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ep0f + ep1f + ParallelMath::MakeUInt15(128), 8));
+ }
+ }
+
+ void ReconstructLDR_BC7(const MUInt15 &index, MUInt15* pixel)
+ {
+ ReconstructLDR_BC7(index, pixel, TVectorSize);
+ }
+
+ void ReconstructLDRPrecise(const MUInt15 &index, MUInt15* pixel)
+ {
+ ReconstructLDRPrecise(index, pixel, TVectorSize);
+ }
+
+ MUInt15 SelectIndexLDR(const MFloat* pixel, const ParallelMath::RoundTowardNearestForScope* rtn) const
+ {
+ MFloat dist = (pixel[0] - m_origin[0]) * m_axis[0];
+ for (int ch = 1; ch < TVectorSize; ch++)
+ dist = dist + (pixel[ch] - m_origin[ch]) * m_axis[ch];
+
+ return ParallelMath::RoundAndConvertToU15(ParallelMath::Clamp(dist, 0.0f, m_maxValue), rtn);
+ }
+
+ protected:
+ MAInt16 m_endPoint[2][TVectorSize];
+
+ private:
+ MFloat m_origin[TVectorSize];
+ MFloat m_axis[TVectorSize];
+ int m_range;
+ float m_maxValue;
+ bool m_isUniform;
+ };
+ }
+}
+
+#endif
+
diff --git a/thirdparty/cvtt/ConvectionKernels_IndexSelectorHDR.h b/thirdparty/cvtt/ConvectionKernels_IndexSelectorHDR.h
new file mode 100644
index 0000000000..84795cd689
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_IndexSelectorHDR.h
@@ -0,0 +1,155 @@
+#pragma once
+#ifndef __CVTT_INDEXSELECTORHDR_H__
+#define __CVTT_INDEXSELECTORHDR_H__
+
+#include "ConvectionKernels_ParallelMath.h"
+#include "ConvectionKernels_IndexSelector.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ ParallelMath::SInt16 UnscaleHDRValueSigned(const ParallelMath::SInt16 &v);
+ ParallelMath::UInt15 UnscaleHDRValueUnsigned(const ParallelMath::UInt16 &v);
+
+ template<int TVectorSize>
+ class IndexSelectorHDR : public IndexSelector<TVectorSize>
+ {
+ public:
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt31 MUInt31;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+ typedef ParallelMath::Float MFloat;
+
+ private:
+
+ MUInt15 InvertSingle(const MUInt15& anIndex) const
+ {
+ MUInt15 inverted = m_maxValueMinusOne - anIndex;
+ return ParallelMath::Select(m_isInverted, inverted, anIndex);
+ }
+
+ void ReconstructHDRSignedUninverted(const MUInt15 &index, MSInt16* pixel) const
+ {
+ MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 256, 9));
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MSInt16 ep0 = ParallelMath::LosslessCast<MSInt16>::Cast(this->m_endPoint[0][ch]);
+ MSInt16 ep1 = ParallelMath::LosslessCast<MSInt16>::Cast(this->m_endPoint[1][ch]);
+
+ MSInt32 pixel32 = ParallelMath::XMultiply((ParallelMath::MakeUInt15(64) - weight), ep0) + ParallelMath::XMultiply(weight, ep1);
+
+ pixel32 = ParallelMath::RightShift(pixel32 + ParallelMath::MakeSInt32(32), 6);
+
+ pixel[ch] = UnscaleHDRValueSigned(ParallelMath::ToSInt16(pixel32));
+ }
+ }
+
+ void ReconstructHDRUnsignedUninverted(const MUInt15 &index, MSInt16* pixel) const
+ {
+ MUInt15 weight = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(g_weightReciprocals[m_range], index) + 256, 9));
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MUInt16 ep0 = ParallelMath::LosslessCast<MUInt16>::Cast(this->m_endPoint[0][ch]);
+ MUInt16 ep1 = ParallelMath::LosslessCast<MUInt16>::Cast(this->m_endPoint[1][ch]);
+
+ MUInt31 pixel31 = ParallelMath::XMultiply((ParallelMath::MakeUInt15(64) - weight), ep0) + ParallelMath::XMultiply(weight, ep1);
+
+ pixel31 = ParallelMath::RightShift(pixel31 + ParallelMath::MakeUInt31(32), 6);
+
+ pixel[ch] = ParallelMath::LosslessCast<MSInt16>::Cast(UnscaleHDRValueUnsigned(ParallelMath::ToUInt16(pixel31)));
+ }
+ }
+
+ MFloat ErrorForInterpolatorComponent(int index, int ch, const MFloat *pixel) const
+ {
+ MFloat diff = pixel[ch] - m_reconstructedInterpolators[index][ch];
+ return diff * diff;
+ }
+
+ MFloat ErrorForInterpolator(int index, const MFloat *pixel) const
+ {
+ MFloat error = ErrorForInterpolatorComponent(index, 0, pixel);
+ for (int ch = 1; ch < TVectorSize; ch++)
+ error = error + ErrorForInterpolatorComponent(index, ch, pixel);
+ return error;
+ }
+
+ public:
+
+ void InitHDR(int range, bool isSigned, bool fastIndexing, const float *channelWeights)
+ {
+ assert(range <= 16);
+
+ m_range = range;
+
+ m_isInverted = ParallelMath::MakeBoolInt16(false);
+ m_maxValueMinusOne = ParallelMath::MakeUInt15(static_cast<uint16_t>(range - 1));
+
+ if (!fastIndexing)
+ {
+ for (int i = 0; i < range; i++)
+ {
+ MSInt16 recon2CL[TVectorSize];
+
+ if (isSigned)
+ ReconstructHDRSignedUninverted(ParallelMath::MakeUInt15(static_cast<uint16_t>(i)), recon2CL);
+ else
+ ReconstructHDRUnsignedUninverted(ParallelMath::MakeUInt15(static_cast<uint16_t>(i)), recon2CL);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_reconstructedInterpolators[i][ch] = ParallelMath::TwosCLHalfToFloat(recon2CL[ch]) * channelWeights[ch];
+ }
+ }
+ }
+
+ void ReconstructHDRSigned(const MUInt15 &index, MSInt16* pixel) const
+ {
+ ReconstructHDRSignedUninverted(InvertSingle(index), pixel);
+ }
+
+ void ReconstructHDRUnsigned(const MUInt15 &index, MSInt16* pixel) const
+ {
+ ReconstructHDRUnsignedUninverted(InvertSingle(index), pixel);
+ }
+
+ void ConditionalInvert(const ParallelMath::Int16CompFlag &invert)
+ {
+ m_isInverted = invert;
+ }
+
+ MUInt15 SelectIndexHDRSlow(const MFloat* pixel, const ParallelMath::RoundTowardNearestForScope*) const
+ {
+ MUInt15 index = ParallelMath::MakeUInt15(0);
+
+ MFloat bestError = ErrorForInterpolator(0, pixel);
+ for (int i = 1; i < m_range; i++)
+ {
+ MFloat error = ErrorForInterpolator(i, pixel);
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
+ ParallelMath::ConditionalSet(index, ParallelMath::FloatFlagToInt16(errorBetter), ParallelMath::MakeUInt15(static_cast<uint16_t>(i)));
+ bestError = ParallelMath::Min(bestError, error);
+ }
+
+ return InvertSingle(index);
+ }
+
+ MUInt15 SelectIndexHDRFast(const MFloat* pixel, const ParallelMath::RoundTowardNearestForScope* rtn) const
+ {
+ return InvertSingle(this->SelectIndexLDR(pixel, rtn));
+ }
+
+ private:
+ MFloat m_reconstructedInterpolators[16][TVectorSize];
+ ParallelMath::Int16CompFlag m_isInverted;
+ MUInt15 m_maxValueMinusOne;
+ int m_range;
+ };
+ }
+}
+#endif
+
diff --git a/thirdparty/cvtt/ConvectionKernels_PackedCovarianceMatrix.h b/thirdparty/cvtt/ConvectionKernels_PackedCovarianceMatrix.h
new file mode 100644
index 0000000000..7ac3d4fdda
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_PackedCovarianceMatrix.h
@@ -0,0 +1,68 @@
+#pragma once
+#ifndef __CVTT_COVARIANCEMATRIX_H__
+#define __CVTT_COVARIANCEMATRIX_H__
+
+namespace cvtt
+{
+ namespace Internal
+ {
+
+ template<int TMatrixSize>
+ class PackedCovarianceMatrix
+ {
+ public:
+ // 0: xx,
+ // 1: xy, yy
+ // 3: xz, yz, zz
+ // 6: xw, yw, zw, ww
+ // ... etc.
+ static const int PyramidSize = (TMatrixSize * (TMatrixSize + 1)) / 2;
+
+ typedef ParallelMath::Float MFloat;
+
+ PackedCovarianceMatrix()
+ {
+ for (int i = 0; i < PyramidSize; i++)
+ m_values[i] = ParallelMath::MakeFloatZero();
+ }
+
+ void Add(const ParallelMath::Float *vec, const ParallelMath::Float &weight)
+ {
+ int index = 0;
+ for (int row = 0; row < TMatrixSize; row++)
+ {
+ for (int col = 0; col <= row; col++)
+ {
+ m_values[index] = m_values[index] + vec[row] * vec[col] * weight;
+ index++;
+ }
+ }
+ }
+
+ void Product(MFloat *outVec, const MFloat *inVec)
+ {
+ for (int row = 0; row < TMatrixSize; row++)
+ {
+ MFloat sum = ParallelMath::MakeFloatZero();
+
+ int index = (row * (row + 1)) >> 1;
+ for (int col = 0; col < TMatrixSize; col++)
+ {
+ sum = sum + inVec[col] * m_values[index];
+ if (col >= row)
+ index += col + 1;
+ else
+ index++;
+ }
+
+ outVec[row] = sum;
+ }
+ }
+
+ private:
+ ParallelMath::Float m_values[PyramidSize];
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_ParallelMath.h b/thirdparty/cvtt/ConvectionKernels_ParallelMath.h
new file mode 100644
index 0000000000..9e25280f45
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_ParallelMath.h
@@ -0,0 +1,1816 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+*/
+#pragma once
+#ifndef __CVTT_PARALLELMATH_H__
+#define __CVTT_PARALLELMATH_H__
+
+#include "ConvectionKernels.h"
+#include "ConvectionKernels_Config.h"
+
+#ifdef CVTT_USE_SSE2
+#include <emmintrin.h>
+#endif
+
+#include <float.h>
+#include <assert.h>
+#include <string.h>
+#include <algorithm>
+#include <math.h>
+
+#define UNREFERENCED_PARAMETER(n) ((void)n)
+
+// Parallel math implementation
+//
+// After preprocessor defs are handled, what this should do is expose the following types:
+// SInt16 - Signed 16-bit integer
+// UInt16 - Signed 16-bit integer
+// UInt15 - Unsigned 15-bit integer
+// SInt32 - Signed 32-bit integer
+// UInt31 - Unsigned 31-bit integer
+// AInt16 - 16-bit integer of unknown signedness (only used for storage)
+// Int16CompFlag - Comparison flags from comparing 16-bit integers
+// Int32CompFlag - Comparison flags from comparing 32-bit integers
+// FloatCompFlag - Comparison flags from comparing 32-bit floats
+//
+// The reason for these distinctions are that depending on the instruction set, signed or unsigned versions of certain ops
+// (particularly max, min, compares, and right shift) may not be available. In cases where ops are not available, it's
+// necessary to do high bit manipulations to accomplish the operation with 16-bit numbers. The 15-bit and 31-bit uint types
+// can elide the bit flips if unsigned versions are not available.
+
+namespace cvtt
+{
+#ifdef CVTT_USE_SSE2
+ // SSE2 version
+ struct ParallelMath
+ {
+ typedef uint16_t ScalarUInt16;
+ typedef int16_t ScalarSInt16;
+
+ template<unsigned int TRoundingMode>
+ struct RoundForScope
+ {
+ unsigned int m_oldCSR;
+
+ RoundForScope()
+ {
+ m_oldCSR = _mm_getcsr();
+ _mm_setcsr((m_oldCSR & ~_MM_ROUND_MASK) | (TRoundingMode));
+ }
+
+ ~RoundForScope()
+ {
+ _mm_setcsr(m_oldCSR);
+ }
+ };
+
+ struct RoundTowardZeroForScope : RoundForScope<_MM_ROUND_TOWARD_ZERO>
+ {
+ };
+
+ struct RoundTowardNearestForScope : RoundForScope<_MM_ROUND_NEAREST>
+ {
+ };
+
+ struct RoundUpForScope : RoundForScope<_MM_ROUND_UP>
+ {
+ };
+
+ struct RoundDownForScope : RoundForScope<_MM_ROUND_DOWN>
+ {
+ };
+
+ static const int ParallelSize = 8;
+
+ enum Int16Subtype
+ {
+ IntSubtype_Signed,
+ IntSubtype_UnsignedFull,
+ IntSubtype_UnsignedTruncated,
+ IntSubtype_Abstract,
+ };
+
+ template<int TSubtype>
+ struct VInt16
+ {
+ __m128i m_value;
+
+ inline VInt16 operator+(int16_t other) const
+ {
+ VInt16 result;
+ result.m_value = _mm_add_epi16(m_value, _mm_set1_epi16(static_cast<int16_t>(other)));
+ return result;
+ }
+
+ inline VInt16 operator+(const VInt16 &other) const
+ {
+ VInt16 result;
+ result.m_value = _mm_add_epi16(m_value, other.m_value);
+ return result;
+ }
+
+ inline VInt16 operator|(const VInt16 &other) const
+ {
+ VInt16 result;
+ result.m_value = _mm_or_si128(m_value, other.m_value);
+ return result;
+ }
+
+ inline VInt16 operator&(const VInt16 &other) const
+ {
+ VInt16 result;
+ result.m_value = _mm_and_si128(m_value, other.m_value);
+ return result;
+ }
+
+ inline VInt16 operator-(const VInt16 &other) const
+ {
+ VInt16 result;
+ result.m_value = _mm_sub_epi16(m_value, other.m_value);
+ return result;
+ }
+
+ inline VInt16 operator<<(int bits) const
+ {
+ VInt16 result;
+ result.m_value = _mm_slli_epi16(m_value, bits);
+ return result;
+ }
+
+ inline VInt16 operator^(const VInt16 &other) const
+ {
+ VInt16 result;
+ result.m_value = _mm_xor_si128(m_value, other.m_value);
+ return result;
+ }
+ };
+
+ typedef VInt16<IntSubtype_Signed> SInt16;
+ typedef VInt16<IntSubtype_UnsignedFull> UInt16;
+ typedef VInt16<IntSubtype_UnsignedTruncated> UInt15;
+ typedef VInt16<IntSubtype_Abstract> AInt16;
+
+ template<int TSubtype>
+ struct VInt32
+ {
+ __m128i m_values[2];
+
+ inline VInt32 operator+(const VInt32& other) const
+ {
+ VInt32 result;
+ result.m_values[0] = _mm_add_epi32(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_add_epi32(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline VInt32 operator-(const VInt32& other) const
+ {
+ VInt32 result;
+ result.m_values[0] = _mm_sub_epi32(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_sub_epi32(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline VInt32 operator<<(const int other) const
+ {
+ VInt32 result;
+ result.m_values[0] = _mm_slli_epi32(m_values[0], other);
+ result.m_values[1] = _mm_slli_epi32(m_values[1], other);
+ return result;
+ }
+
+ inline VInt32 operator|(const VInt32& other) const
+ {
+ VInt32 result;
+ result.m_values[0] = _mm_or_si128(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_or_si128(m_values[1], other.m_values[1]);
+ return result;
+ }
+ };
+
+ typedef VInt32<IntSubtype_Signed> SInt32;
+ typedef VInt32<IntSubtype_UnsignedTruncated> UInt31;
+ typedef VInt32<IntSubtype_UnsignedFull> UInt32;
+ typedef VInt32<IntSubtype_Abstract> AInt32;
+
+ template<class TTargetType>
+ struct LosslessCast
+ {
+#ifdef CVTT_PERMIT_ALIASING
+ template<int TSrcSubtype>
+ static const TTargetType& Cast(const VInt32<TSrcSubtype> &src)
+ {
+ return reinterpret_cast<VInt32<TSubtype>&>(src);
+ }
+
+ template<int TSrcSubtype>
+ static const TTargetType& Cast(const VInt16<TSrcSubtype> &src)
+ {
+ return reinterpret_cast<VInt16<TSubtype>&>(src);
+ }
+#else
+ template<int TSrcSubtype>
+ static TTargetType Cast(const VInt32<TSrcSubtype> &src)
+ {
+ TTargetType result;
+ result.m_values[0] = src.m_values[0];
+ result.m_values[1] = src.m_values[1];
+ return result;
+ }
+
+ template<int TSrcSubtype>
+ static TTargetType Cast(const VInt16<TSrcSubtype> &src)
+ {
+ TTargetType result;
+ result.m_value = src.m_value;
+ return result;
+ }
+#endif
+ };
+
+ struct Int64
+ {
+ __m128i m_values[4];
+ };
+
+ struct Float
+ {
+ __m128 m_values[2];
+
+ inline Float operator+(const Float &other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_add_ps(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_add_ps(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline Float operator+(float other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_add_ps(m_values[0], _mm_set1_ps(other));
+ result.m_values[1] = _mm_add_ps(m_values[1], _mm_set1_ps(other));
+ return result;
+ }
+
+ inline Float operator-(const Float& other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_sub_ps(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_sub_ps(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline Float operator-() const
+ {
+ Float result;
+ result.m_values[0] = _mm_sub_ps(_mm_setzero_ps(), m_values[0]);
+ result.m_values[1] = _mm_sub_ps(_mm_setzero_ps(), m_values[1]);
+ return result;
+ }
+
+ inline Float operator*(const Float& other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_mul_ps(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_mul_ps(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline Float operator*(float other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_mul_ps(m_values[0], _mm_set1_ps(other));
+ result.m_values[1] = _mm_mul_ps(m_values[1], _mm_set1_ps(other));
+ return result;
+ }
+
+ inline Float operator/(const Float &other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_div_ps(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_div_ps(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline Float operator/(float other) const
+ {
+ Float result;
+ result.m_values[0] = _mm_div_ps(m_values[0], _mm_set1_ps(other));
+ result.m_values[1] = _mm_div_ps(m_values[1], _mm_set1_ps(other));
+ return result;
+ }
+ };
+
+ struct Int16CompFlag
+ {
+ __m128i m_value;
+
+ inline Int16CompFlag operator&(const Int16CompFlag &other) const
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_and_si128(m_value, other.m_value);
+ return result;
+ }
+
+ inline Int16CompFlag operator|(const Int16CompFlag &other) const
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_or_si128(m_value, other.m_value);
+ return result;
+ }
+ };
+
+ struct Int32CompFlag
+ {
+ __m128i m_values[2];
+
+ inline Int32CompFlag operator&(const Int32CompFlag &other) const
+ {
+ Int32CompFlag result;
+ result.m_values[0] = _mm_and_si128(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_and_si128(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline Int32CompFlag operator|(const Int32CompFlag &other) const
+ {
+ Int32CompFlag result;
+ result.m_values[0] = _mm_or_si128(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_or_si128(m_values[1], other.m_values[1]);
+ return result;
+ }
+ };
+
+ struct FloatCompFlag
+ {
+ __m128 m_values[2];
+
+ inline FloatCompFlag operator&(const FloatCompFlag &other) const
+ {
+ FloatCompFlag result;
+ result.m_values[0] = _mm_and_ps(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_and_ps(m_values[1], other.m_values[1]);
+ return result;
+ }
+
+ inline FloatCompFlag operator|(const FloatCompFlag &other) const
+ {
+ FloatCompFlag result;
+ result.m_values[0] = _mm_or_ps(m_values[0], other.m_values[0]);
+ result.m_values[1] = _mm_or_ps(m_values[1], other.m_values[1]);
+ return result;
+ }
+ };
+
+ template<int TSubtype>
+ static VInt16<TSubtype> AbstractAdd(const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
+ {
+ VInt16<TSubtype> result;
+ result.m_value = _mm_add_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ template<int TSubtype>
+ static VInt16<TSubtype> AbstractSubtract(const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
+ {
+ VInt16<TSubtype> result;
+ result.m_value = _mm_sub_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static Float Select(const FloatCompFlag &flag, const Float &a, const Float &b)
+ {
+ Float result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_or_ps(_mm_and_ps(flag.m_values[i], a.m_values[i]), _mm_andnot_ps(flag.m_values[i], b.m_values[i]));
+ return result;
+ }
+
+ template<int TSubtype>
+ static VInt16<TSubtype> Select(const Int16CompFlag &flag, const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
+ {
+ VInt16<TSubtype> result;
+ result.m_value = _mm_or_si128(_mm_and_si128(flag.m_value, a.m_value), _mm_andnot_si128(flag.m_value, b.m_value));
+ return result;
+ }
+
+ template<int TSubtype>
+ static VInt16<TSubtype> SelectOrZero(const Int16CompFlag &flag, const VInt16<TSubtype> &a)
+ {
+ VInt16<TSubtype> result;
+ result.m_value = _mm_and_si128(flag.m_value, a.m_value);
+ return result;
+ }
+
+ template<int TSubtype>
+ static void ConditionalSet(VInt16<TSubtype> &dest, const Int16CompFlag &flag, const VInt16<TSubtype> &src)
+ {
+ dest.m_value = _mm_or_si128(_mm_andnot_si128(flag.m_value, dest.m_value), _mm_and_si128(flag.m_value, src.m_value));
+ }
+
+ template<int TSubtype>
+ static void ConditionalSet(VInt32<TSubtype> &dest, const Int16CompFlag &flag, const VInt32<TSubtype> &src)
+ {
+ __m128i lowFlags = _mm_unpacklo_epi16(flag.m_value, flag.m_value);
+ __m128i highFlags = _mm_unpackhi_epi16(flag.m_value, flag.m_value);
+ dest.m_values[0] = _mm_or_si128(_mm_andnot_si128(lowFlags, dest.m_values[0]), _mm_and_si128(lowFlags, src.m_values[0]));
+ dest.m_values[1] = _mm_or_si128(_mm_andnot_si128(highFlags, dest.m_values[1]), _mm_and_si128(highFlags, src.m_values[1]));
+ }
+
+ static void ConditionalSet(ParallelMath::Int16CompFlag &dest, const Int16CompFlag &flag, const ParallelMath::Int16CompFlag &src)
+ {
+ dest.m_value = _mm_or_si128(_mm_andnot_si128(flag.m_value, dest.m_value), _mm_and_si128(flag.m_value, src.m_value));
+ }
+
+ static SInt16 ConditionalNegate(const Int16CompFlag &flag, const SInt16 &v)
+ {
+ SInt16 result;
+ result.m_value = _mm_add_epi16(_mm_xor_si128(flag.m_value, v.m_value), _mm_srli_epi16(flag.m_value, 15));
+ return result;
+ }
+
+ template<int TSubtype>
+ static void NotConditionalSet(VInt16<TSubtype> &dest, const Int16CompFlag &flag, const VInt16<TSubtype> &src)
+ {
+ dest.m_value = _mm_or_si128(_mm_and_si128(flag.m_value, dest.m_value), _mm_andnot_si128(flag.m_value, src.m_value));
+ }
+
+ static void ConditionalSet(Float &dest, const FloatCompFlag &flag, const Float &src)
+ {
+ for (int i = 0; i < 2; i++)
+ dest.m_values[i] = _mm_or_ps(_mm_andnot_ps(flag.m_values[i], dest.m_values[i]), _mm_and_ps(flag.m_values[i], src.m_values[i]));
+ }
+
+ static void NotConditionalSet(Float &dest, const FloatCompFlag &flag, const Float &src)
+ {
+ for (int i = 0; i < 2; i++)
+ dest.m_values[i] = _mm_or_ps(_mm_and_ps(flag.m_values[i], dest.m_values[i]), _mm_andnot_ps(flag.m_values[i], src.m_values[i]));
+ }
+
+ static void MakeSafeDenominator(Float& v)
+ {
+ ConditionalSet(v, Equal(v, MakeFloatZero()), MakeFloat(1.0f));
+ }
+
+ static SInt16 TruncateToPrecisionSigned(const SInt16 &v, int precision)
+ {
+ int lostBits = 16 - precision;
+ if (lostBits == 0)
+ return v;
+
+ SInt16 result;
+ result.m_value = _mm_srai_epi16(_mm_slli_epi16(v.m_value, lostBits), lostBits);
+ return result;
+ }
+
+ static UInt16 TruncateToPrecisionUnsigned(const UInt16 &v, int precision)
+ {
+ int lostBits = 16 - precision;
+ if (lostBits == 0)
+ return v;
+
+ UInt16 result;
+ result.m_value = _mm_srli_epi16(_mm_slli_epi16(v.m_value, lostBits), lostBits);
+ return result;
+ }
+
+ static UInt16 Min(const UInt16 &a, const UInt16 &b)
+ {
+ __m128i bitFlip = _mm_set1_epi16(-32768);
+
+ UInt16 result;
+ result.m_value = _mm_xor_si128(_mm_min_epi16(_mm_xor_si128(a.m_value, bitFlip), _mm_xor_si128(b.m_value, bitFlip)), bitFlip);
+ return result;
+ }
+
+ static SInt16 Min(const SInt16 &a, const SInt16 &b)
+ {
+ SInt16 result;
+ result.m_value = _mm_min_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static UInt15 Min(const UInt15 &a, const UInt15 &b)
+ {
+ UInt15 result;
+ result.m_value = _mm_min_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static Float Min(const Float &a, const Float &b)
+ {
+ Float result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_min_ps(a.m_values[i], b.m_values[i]);
+ return result;
+ }
+
+ static UInt16 Max(const UInt16 &a, const UInt16 &b)
+ {
+ __m128i bitFlip = _mm_set1_epi16(-32768);
+
+ UInt16 result;
+ result.m_value = _mm_xor_si128(_mm_max_epi16(_mm_xor_si128(a.m_value, bitFlip), _mm_xor_si128(b.m_value, bitFlip)), bitFlip);
+ return result;
+ }
+
+ static SInt16 Max(const SInt16 &a, const SInt16 &b)
+ {
+ SInt16 result;
+ result.m_value = _mm_max_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static UInt15 Max(const UInt15 &a, const UInt15 &b)
+ {
+ UInt15 result;
+ result.m_value = _mm_max_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static Float Max(const Float &a, const Float &b)
+ {
+ Float result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_max_ps(a.m_values[i], b.m_values[i]);
+ return result;
+ }
+
+ static Float Clamp(const Float &v, float min, float max)
+ {
+ Float result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_max_ps(_mm_min_ps(v.m_values[i], _mm_set1_ps(max)), _mm_set1_ps(min));
+ return result;
+ }
+
+ static Float Reciprocal(const Float &v)
+ {
+ Float result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_rcp_ps(v.m_values[i]);
+ return result;
+ }
+
+ static void ConvertLDRInputs(const PixelBlockU8* inputBlocks, int pxOffset, int channel, UInt15 &chOut)
+ {
+ int16_t values[8];
+ for (int i = 0; i < 8; i++)
+ values[i] = inputBlocks[i].m_pixels[pxOffset][channel];
+
+ chOut.m_value = _mm_set_epi16(values[7], values[6], values[5], values[4], values[3], values[2], values[1], values[0]);
+ }
+
+ static void ConvertHDRInputs(const PixelBlockF16* inputBlocks, int pxOffset, int channel, SInt16 &chOut)
+ {
+ int16_t values[8];
+ for (int i = 0; i < 8; i++)
+ values[i] = inputBlocks[i].m_pixels[pxOffset][channel];
+
+ chOut.m_value = _mm_set_epi16(values[7], values[6], values[5], values[4], values[3], values[2], values[1], values[0]);
+ }
+
+ static Float MakeFloat(float v)
+ {
+ Float f;
+ f.m_values[0] = f.m_values[1] = _mm_set1_ps(v);
+ return f;
+ }
+
+ static Float MakeFloatZero()
+ {
+ Float f;
+ f.m_values[0] = f.m_values[1] = _mm_setzero_ps();
+ return f;
+ }
+
+ static UInt16 MakeUInt16(uint16_t v)
+ {
+ UInt16 result;
+ result.m_value = _mm_set1_epi16(static_cast<short>(v));
+ return result;
+ }
+
+ static SInt16 MakeSInt16(int16_t v)
+ {
+ SInt16 result;
+ result.m_value = _mm_set1_epi16(static_cast<short>(v));
+ return result;
+ }
+
+ static AInt16 MakeAInt16(int16_t v)
+ {
+ AInt16 result;
+ result.m_value = _mm_set1_epi16(static_cast<short>(v));
+ return result;
+ }
+
+ static UInt15 MakeUInt15(uint16_t v)
+ {
+ UInt15 result;
+ result.m_value = _mm_set1_epi16(static_cast<short>(v));
+ return result;
+ }
+
+ static SInt32 MakeSInt32(int32_t v)
+ {
+ SInt32 result;
+ result.m_values[0] = _mm_set1_epi32(v);
+ result.m_values[1] = _mm_set1_epi32(v);
+ return result;
+ }
+
+ static UInt31 MakeUInt31(uint32_t v)
+ {
+ UInt31 result;
+ result.m_values[0] = _mm_set1_epi32(v);
+ result.m_values[1] = _mm_set1_epi32(v);
+ return result;
+ }
+
+ static uint16_t Extract(const UInt16 &v, int offset)
+ {
+ return reinterpret_cast<const uint16_t*>(&v.m_value)[offset];
+ }
+
+ static int16_t Extract(const SInt16 &v, int offset)
+ {
+ return reinterpret_cast<const int16_t*>(&v.m_value)[offset];
+ }
+
+ static uint16_t Extract(const UInt15 &v, int offset)
+ {
+ return reinterpret_cast<const uint16_t*>(&v.m_value)[offset];
+ }
+
+ static int16_t Extract(const AInt16 &v, int offset)
+ {
+ return reinterpret_cast<const int16_t*>(&v.m_value)[offset];
+ }
+
+ static int32_t Extract(const SInt32 &v, int offset)
+ {
+ return reinterpret_cast<const int32_t*>(&v.m_values[offset >> 2])[offset & 3];
+ }
+
+ static float Extract(const Float &v, int offset)
+ {
+ return reinterpret_cast<const float*>(&v.m_values[offset >> 2])[offset & 3];
+ }
+
+ static bool Extract(const ParallelMath::Int16CompFlag &v, int offset)
+ {
+ return reinterpret_cast<const int16_t*>(&v.m_value)[offset] != 0;
+ }
+
+ static void PutUInt16(UInt16 &dest, int offset, uint16_t v)
+ {
+ reinterpret_cast<uint16_t*>(&dest)[offset] = v;
+ }
+
+ static void PutUInt15(UInt15 &dest, int offset, uint16_t v)
+ {
+ reinterpret_cast<uint16_t*>(&dest)[offset] = v;
+ }
+
+ static void PutSInt16(SInt16 &dest, int offset, int16_t v)
+ {
+ reinterpret_cast<int16_t*>(&dest)[offset] = v;
+ }
+
+ static float ExtractFloat(const Float& v, int offset)
+ {
+ return reinterpret_cast<const float*>(&v)[offset];
+ }
+
+ static void PutFloat(Float &dest, int offset, float v)
+ {
+ reinterpret_cast<float*>(&dest)[offset] = v;
+ }
+
+ static void PutBoolInt16(Int16CompFlag &dest, int offset, bool v)
+ {
+ reinterpret_cast<int16_t*>(&dest)[offset] = v ? -1 : 0;
+ }
+
+ static Int32CompFlag Less(const UInt31 &a, const UInt31 &b)
+ {
+ Int32CompFlag result;
+ result.m_values[0] = _mm_cmplt_epi32(a.m_values[0], b.m_values[0]);
+ result.m_values[1] = _mm_cmplt_epi32(a.m_values[1], b.m_values[1]);
+ return result;
+ }
+
+ static Int16CompFlag Less(const SInt16 &a, const SInt16 &b)
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_cmplt_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static Int16CompFlag Less(const UInt15 &a, const UInt15 &b)
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_cmplt_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static Int16CompFlag LessOrEqual(const UInt15 &a, const UInt15 &b)
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_cmplt_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static FloatCompFlag Less(const Float &a, const Float &b)
+ {
+ FloatCompFlag result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_cmplt_ps(a.m_values[i], b.m_values[i]);
+ return result;
+ }
+
+ static FloatCompFlag LessOrEqual(const Float &a, const Float &b)
+ {
+ FloatCompFlag result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_cmple_ps(a.m_values[i], b.m_values[i]);
+ return result;
+ }
+
+ template<int TSubtype>
+ static Int16CompFlag Equal(const VInt16<TSubtype> &a, const VInt16<TSubtype> &b)
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_cmpeq_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static FloatCompFlag Equal(const Float &a, const Float &b)
+ {
+ FloatCompFlag result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_cmpeq_ps(a.m_values[i], b.m_values[i]);
+ return result;
+ }
+
+ static Int16CompFlag Equal(const Int16CompFlag &a, const Int16CompFlag &b)
+ {
+ Int16CompFlag notResult;
+ notResult.m_value = _mm_xor_si128(a.m_value, b.m_value);
+ return Not(notResult);
+ }
+
+ static Float ToFloat(const UInt16 &v)
+ {
+ Float result;
+ result.m_values[0] = _mm_cvtepi32_ps(_mm_unpacklo_epi16(v.m_value, _mm_setzero_si128()));
+ result.m_values[1] = _mm_cvtepi32_ps(_mm_unpackhi_epi16(v.m_value, _mm_setzero_si128()));
+ return result;
+ }
+
+ static UInt31 ToUInt31(const UInt16 &v)
+ {
+ UInt31 result;
+ result.m_values[0] = _mm_unpacklo_epi16(v.m_value, _mm_setzero_si128());
+ result.m_values[1] = _mm_unpackhi_epi16(v.m_value, _mm_setzero_si128());
+ return result;
+ }
+
+ static SInt32 ToInt32(const UInt16 &v)
+ {
+ SInt32 result;
+ result.m_values[0] = _mm_unpacklo_epi16(v.m_value, _mm_setzero_si128());
+ result.m_values[1] = _mm_unpackhi_epi16(v.m_value, _mm_setzero_si128());
+ return result;
+ }
+
+ static SInt32 ToInt32(const UInt15 &v)
+ {
+ SInt32 result;
+ result.m_values[0] = _mm_unpacklo_epi16(v.m_value, _mm_setzero_si128());
+ result.m_values[1] = _mm_unpackhi_epi16(v.m_value, _mm_setzero_si128());
+ return result;
+ }
+
+ static SInt32 ToInt32(const SInt16 &v)
+ {
+ SInt32 result;
+ result.m_values[0] = _mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), v.m_value), 16);
+ result.m_values[1] = _mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), v.m_value), 16);
+ return result;
+ }
+
+ static Float ToFloat(const SInt16 &v)
+ {
+ Float result;
+ result.m_values[0] = _mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpacklo_epi16(_mm_setzero_si128(), v.m_value), 16));
+ result.m_values[1] = _mm_cvtepi32_ps(_mm_srai_epi32(_mm_unpackhi_epi16(_mm_setzero_si128(), v.m_value), 16));
+ return result;
+ }
+
+ static Float ToFloat(const UInt15 &v)
+ {
+ Float result;
+ result.m_values[0] = _mm_cvtepi32_ps(_mm_unpacklo_epi16(v.m_value, _mm_setzero_si128()));
+ result.m_values[1] = _mm_cvtepi32_ps(_mm_unpackhi_epi16(v.m_value, _mm_setzero_si128()));
+ return result;
+ }
+
+ static Float ToFloat(const UInt31 &v)
+ {
+ Float result;
+ result.m_values[0] = _mm_cvtepi32_ps(v.m_values[0]);
+ result.m_values[1] = _mm_cvtepi32_ps(v.m_values[1]);
+ return result;
+ }
+
+ static Int16CompFlag FloatFlagToInt16(const FloatCompFlag &v)
+ {
+ __m128i lo = _mm_castps_si128(v.m_values[0]);
+ __m128i hi = _mm_castps_si128(v.m_values[1]);
+
+ Int16CompFlag result;
+ result.m_value = _mm_packs_epi32(lo, hi);
+ return result;
+ }
+
+ static FloatCompFlag Int16FlagToFloat(const Int16CompFlag &v)
+ {
+ __m128i lo = _mm_unpacklo_epi16(v.m_value, v.m_value);
+ __m128i hi = _mm_unpackhi_epi16(v.m_value, v.m_value);
+
+ FloatCompFlag result;
+ result.m_values[0] = _mm_castsi128_ps(lo);
+ result.m_values[1] = _mm_castsi128_ps(hi);
+ return result;
+ }
+
+ static Int16CompFlag Int32FlagToInt16(const Int32CompFlag &v)
+ {
+ __m128i lo = v.m_values[0];
+ __m128i hi = v.m_values[1];
+
+ Int16CompFlag result;
+ result.m_value = _mm_packs_epi32(lo, hi);
+ return result;
+ }
+
+ static Int16CompFlag MakeBoolInt16(bool b)
+ {
+ Int16CompFlag result;
+ if (b)
+ result.m_value = _mm_set1_epi16(-1);
+ else
+ result.m_value = _mm_setzero_si128();
+ return result;
+ }
+
+ static FloatCompFlag MakeBoolFloat(bool b)
+ {
+ FloatCompFlag result;
+ if (b)
+ result.m_values[0] = result.m_values[1] = _mm_castsi128_ps(_mm_set1_epi32(-1));
+ else
+ result.m_values[0] = result.m_values[1] = _mm_setzero_ps();
+ return result;
+ }
+
+ static Int16CompFlag AndNot(const Int16CompFlag &a, const Int16CompFlag &b)
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_andnot_si128(b.m_value, a.m_value);
+ return result;
+ }
+
+ static Int16CompFlag Not(const Int16CompFlag &b)
+ {
+ Int16CompFlag result;
+ result.m_value = _mm_xor_si128(b.m_value, _mm_set1_epi32(-1));
+ return result;
+ }
+
+ static Int32CompFlag Not(const Int32CompFlag &b)
+ {
+ Int32CompFlag result;
+ result.m_values[0] = _mm_xor_si128(b.m_values[0], _mm_set1_epi32(-1));
+ result.m_values[1] = _mm_xor_si128(b.m_values[1], _mm_set1_epi32(-1));
+ return result;
+ }
+
+ static UInt16 RoundAndConvertToU16(const Float &v, const void* /*roundingMode*/)
+ {
+ __m128i lo = _mm_cvtps_epi32(_mm_add_ps(v.m_values[0], _mm_set1_ps(-32768)));
+ __m128i hi = _mm_cvtps_epi32(_mm_add_ps(v.m_values[1], _mm_set1_ps(-32768)));
+
+ __m128i packed = _mm_packs_epi32(lo, hi);
+
+ UInt16 result;
+ result.m_value = _mm_xor_si128(packed, _mm_set1_epi16(-32768));
+ return result;
+ }
+
+ static UInt15 RoundAndConvertToU15(const Float &v, const void* /*roundingMode*/)
+ {
+ __m128i lo = _mm_cvtps_epi32(v.m_values[0]);
+ __m128i hi = _mm_cvtps_epi32(v.m_values[1]);
+
+ __m128i packed = _mm_packs_epi32(lo, hi);
+
+ UInt15 result;
+ result.m_value = _mm_packs_epi32(lo, hi);
+ return result;
+ }
+
+ static SInt16 RoundAndConvertToS16(const Float &v, const void* /*roundingMode*/)
+ {
+ __m128i lo = _mm_cvtps_epi32(v.m_values[0]);
+ __m128i hi = _mm_cvtps_epi32(v.m_values[1]);
+
+ __m128i packed = _mm_packs_epi32(lo, hi);
+
+ SInt16 result;
+ result.m_value = _mm_packs_epi32(lo, hi);
+ return result;
+ }
+
+ static Float Sqrt(const Float &f)
+ {
+ Float result;
+ for (int i = 0; i < 2; i++)
+ result.m_values[i] = _mm_sqrt_ps(f.m_values[i]);
+ return result;
+ }
+
+ static UInt16 Abs(const SInt16 &a)
+ {
+ __m128i signBitsXor = _mm_srai_epi16(a.m_value, 15);
+ __m128i signBitsAdd = _mm_srli_epi16(a.m_value, 15);
+
+ UInt16 result;
+ result.m_value = _mm_add_epi16(_mm_xor_si128(a.m_value, signBitsXor), signBitsAdd);
+ return result;
+ }
+
+ static Float Abs(const Float& a)
+ {
+ __m128 invMask = _mm_set1_ps(-0.0f);
+
+ Float result;
+ result.m_values[0] = _mm_andnot_ps(invMask, a.m_values[0]);
+ result.m_values[1] = _mm_andnot_ps(invMask, a.m_values[1]);
+ return result;
+ }
+
+ static UInt16 SqDiffUInt8(const UInt15 &a, const UInt15 &b)
+ {
+ __m128i diff = _mm_sub_epi16(a.m_value, b.m_value);
+
+ UInt16 result;
+ result.m_value = _mm_mullo_epi16(diff, diff);
+ return result;
+ }
+
+ static Float SqDiffSInt16(const SInt16 &a, const SInt16 &b)
+ {
+ __m128i diffU = _mm_sub_epi16(_mm_max_epi16(a.m_value, b.m_value), _mm_min_epi16(a.m_value, b.m_value));
+
+ __m128i mulHi = _mm_mulhi_epu16(diffU, diffU);
+ __m128i mulLo = _mm_mullo_epi16(diffU, diffU);
+ __m128i sqDiffHi = _mm_unpackhi_epi16(mulLo, mulHi);
+ __m128i sqDiffLo = _mm_unpacklo_epi16(mulLo, mulHi);
+
+ Float result;
+ result.m_values[0] = _mm_cvtepi32_ps(sqDiffLo);
+ result.m_values[1] = _mm_cvtepi32_ps(sqDiffHi);
+
+ return result;
+ }
+
+ static Float TwosCLHalfToFloat(const SInt16 &v)
+ {
+ __m128i absV = _mm_add_epi16(_mm_xor_si128(v.m_value, _mm_srai_epi16(v.m_value, 15)), _mm_srli_epi16(v.m_value, 15));
+
+ __m128i signBits = _mm_and_si128(v.m_value, _mm_set1_epi16(-32768));
+ __m128i mantissa = _mm_and_si128(v.m_value, _mm_set1_epi16(0x03ff));
+ __m128i exponent = _mm_and_si128(v.m_value, _mm_set1_epi16(0x7c00));
+
+ __m128i isDenormal = _mm_cmpeq_epi16(exponent, _mm_setzero_si128());
+
+ // Convert exponent to high-bits
+ exponent = _mm_add_epi16(_mm_srli_epi16(exponent, 3), _mm_set1_epi16(14336));
+
+ __m128i denormalCorrectionHigh = _mm_and_si128(isDenormal, _mm_or_si128(signBits, _mm_set1_epi16(14336)));
+
+ __m128i highBits = _mm_or_si128(signBits, _mm_or_si128(exponent, _mm_srli_epi16(mantissa, 3)));
+ __m128i lowBits = _mm_slli_epi16(mantissa, 13);
+
+ __m128i flow = _mm_unpacklo_epi16(lowBits, highBits);
+ __m128i fhigh = _mm_unpackhi_epi16(lowBits, highBits);
+
+ __m128i correctionLow = _mm_unpacklo_epi16(_mm_setzero_si128(), denormalCorrectionHigh);
+ __m128i correctionHigh = _mm_unpackhi_epi16(_mm_setzero_si128(), denormalCorrectionHigh);
+
+ Float result;
+ result.m_values[0] = _mm_sub_ps(_mm_castsi128_ps(flow), _mm_castsi128_ps(correctionLow));
+ result.m_values[1] = _mm_sub_ps(_mm_castsi128_ps(fhigh), _mm_castsi128_ps(correctionHigh));
+
+ return result;
+ }
+
+ static Float SqDiff2CLFloat(const SInt16 &a, const Float &b)
+ {
+ Float fa = TwosCLHalfToFloat(a);
+
+ Float diff = fa - b;
+ return diff * diff;
+ }
+
+ static Float SqDiff2CL(const SInt16 &a, const SInt16 &b)
+ {
+ Float fa = TwosCLHalfToFloat(a);
+ Float fb = TwosCLHalfToFloat(b);
+
+ Float diff = fa - fb;
+ return diff * diff;
+ }
+
+ static Float SqDiff2CLFloat(const SInt16 &a, float aWeight, const Float &b)
+ {
+ Float fa = TwosCLHalfToFloat(a) * aWeight;
+
+ Float diff = fa - b;
+ return diff * diff;
+ }
+
+ static UInt16 RightShift(const UInt16 &v, int bits)
+ {
+ UInt16 result;
+ result.m_value = _mm_srli_epi16(v.m_value, bits);
+ return result;
+ }
+
+ static UInt31 RightShift(const UInt31 &v, int bits)
+ {
+ UInt31 result;
+ result.m_values[0] = _mm_srli_epi32(v.m_values[0], bits);
+ result.m_values[1] = _mm_srli_epi32(v.m_values[1], bits);
+ return result;
+ }
+
+ static SInt16 RightShift(const SInt16 &v, int bits)
+ {
+ SInt16 result;
+ result.m_value = _mm_srai_epi16(v.m_value, bits);
+ return result;
+ }
+
+ static UInt15 RightShift(const UInt15 &v, int bits)
+ {
+ UInt15 result;
+ result.m_value = _mm_srli_epi16(v.m_value, bits);
+ return result;
+ }
+
+ static SInt32 RightShift(const SInt32 &v, int bits)
+ {
+ SInt32 result;
+ result.m_values[0] = _mm_srai_epi32(v.m_values[0], bits);
+ result.m_values[1] = _mm_srai_epi32(v.m_values[1], bits);
+ return result;
+ }
+
+ static SInt16 ToSInt16(const SInt32 &v)
+ {
+ SInt16 result;
+ result.m_value = _mm_packs_epi32(v.m_values[0], v.m_values[1]);
+ return result;
+ }
+
+ static SInt16 ToSInt16(const UInt16 &v)
+ {
+ SInt16 result;
+ result.m_value = v.m_value;
+ return result;
+ }
+
+ static SInt16 ToSInt16(const UInt15 &v)
+ {
+ SInt16 result;
+ result.m_value = v.m_value;
+ return result;
+ }
+
+ static UInt16 ToUInt16(const UInt32 &v)
+ {
+ __m128i low = _mm_srai_epi32(_mm_slli_epi32(v.m_values[0], 16), 16);
+ __m128i high = _mm_srai_epi32(_mm_slli_epi32(v.m_values[1], 16), 16);
+
+ UInt16 result;
+ result.m_value = _mm_packs_epi32(low, high);
+ return result;
+ }
+
+ static UInt16 ToUInt16(const UInt31 &v)
+ {
+ __m128i low = _mm_srai_epi32(_mm_slli_epi32(v.m_values[0], 16), 16);
+ __m128i high = _mm_srai_epi32(_mm_slli_epi32(v.m_values[1], 16), 16);
+
+ UInt16 result;
+ result.m_value = _mm_packs_epi32(low, high);
+ return result;
+ }
+
+ static UInt15 ToUInt15(const UInt31 &v)
+ {
+ UInt15 result;
+ result.m_value = _mm_packs_epi32(v.m_values[0], v.m_values[1]);
+ return result;
+ }
+
+ static UInt15 ToUInt15(const SInt16 &v)
+ {
+ UInt15 result;
+ result.m_value = v.m_value;
+ return result;
+ }
+
+ static UInt15 ToUInt15(const UInt16 &v)
+ {
+ UInt15 result;
+ result.m_value = v.m_value;
+ return result;
+ }
+
+ static SInt32 XMultiply(const SInt16 &a, const SInt16 &b)
+ {
+ __m128i high = _mm_mulhi_epi16(a.m_value, b.m_value);
+ __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
+
+ SInt32 result;
+ result.m_values[0] = _mm_unpacklo_epi16(low, high);
+ result.m_values[1] = _mm_unpackhi_epi16(low, high);
+ return result;
+ }
+
+ static SInt32 XMultiply(const SInt16 &a, const UInt15 &b)
+ {
+ __m128i high = _mm_mulhi_epi16(a.m_value, b.m_value);
+ __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
+
+ SInt32 result;
+ result.m_values[0] = _mm_unpacklo_epi16(low, high);
+ result.m_values[1] = _mm_unpackhi_epi16(low, high);
+ return result;
+ }
+
+ static SInt32 XMultiply(const UInt15 &a, const SInt16 &b)
+ {
+ return XMultiply(b, a);
+ }
+
+ static UInt32 XMultiply(const UInt16 &a, const UInt16 &b)
+ {
+ __m128i high = _mm_mulhi_epu16(a.m_value, b.m_value);
+ __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
+
+ UInt32 result;
+ result.m_values[0] = _mm_unpacklo_epi16(low, high);
+ result.m_values[1] = _mm_unpackhi_epi16(low, high);
+ return result;
+ }
+
+ static UInt16 CompactMultiply(const UInt16 &a, const UInt15 &b)
+ {
+ UInt16 result;
+ result.m_value = _mm_mullo_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static UInt16 CompactMultiply(const UInt15 &a, const UInt15 &b)
+ {
+ UInt16 result;
+ result.m_value = _mm_mullo_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static SInt16 CompactMultiply(const SInt16 &a, const UInt15 &b)
+ {
+ SInt16 result;
+ result.m_value = _mm_mullo_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static SInt16 CompactMultiply(const SInt16 &a, const SInt16 &b)
+ {
+ SInt16 result;
+ result.m_value = _mm_mullo_epi16(a.m_value, b.m_value);
+ return result;
+ }
+
+ static UInt31 XMultiply(const UInt15 &a, const UInt15 &b)
+ {
+ __m128i high = _mm_mulhi_epu16(a.m_value, b.m_value);
+ __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
+
+ UInt31 result;
+ result.m_values[0] = _mm_unpacklo_epi16(low, high);
+ result.m_values[1] = _mm_unpackhi_epi16(low, high);
+ return result;
+ }
+
+ static UInt31 XMultiply(const UInt16 &a, const UInt15 &b)
+ {
+ __m128i high = _mm_mulhi_epu16(a.m_value, b.m_value);
+ __m128i low = _mm_mullo_epi16(a.m_value, b.m_value);
+
+ UInt31 result;
+ result.m_values[0] = _mm_unpacklo_epi16(low, high);
+ result.m_values[1] = _mm_unpackhi_epi16(low, high);
+ return result;
+ }
+
+ static UInt31 XMultiply(const UInt15 &a, const UInt16 &b)
+ {
+ return XMultiply(b, a);
+ }
+
+ static bool AnySet(const Int16CompFlag &v)
+ {
+ return _mm_movemask_epi8(v.m_value) != 0;
+ }
+
+ static bool AllSet(const Int16CompFlag &v)
+ {
+ return _mm_movemask_epi8(v.m_value) == 0xffff;
+ }
+
+ static bool AnySet(const FloatCompFlag &v)
+ {
+ return _mm_movemask_ps(v.m_values[0]) != 0 || _mm_movemask_ps(v.m_values[1]) != 0;
+ }
+
+ static bool AllSet(const FloatCompFlag &v)
+ {
+ return _mm_movemask_ps(v.m_values[0]) == 0xf && _mm_movemask_ps(v.m_values[1]) == 0xf;
+ }
+ };
+
+#else
+ // Scalar version
+ struct ParallelMath
+ {
+ struct RoundTowardZeroForScope
+ {
+ };
+
+ struct RoundTowardNearestForScope
+ {
+ };
+
+ struct RoundUpForScope
+ {
+ };
+
+ struct RoundDownForScope
+ {
+ };
+
+ static const int ParallelSize = 1;
+
+ enum Int16Subtype
+ {
+ IntSubtype_Signed,
+ IntSubtype_UnsignedFull,
+ IntSubtype_UnsignedTruncated,
+ IntSubtype_Abstract,
+ };
+
+ typedef int32_t SInt16;
+ typedef int32_t UInt15;
+ typedef int32_t UInt16;
+ typedef int32_t AInt16;
+
+ typedef int32_t SInt32;
+ typedef int32_t UInt31;
+ typedef int32_t UInt32;
+ typedef int32_t AInt32;
+
+ typedef int32_t ScalarUInt16;
+ typedef int32_t ScalarSInt16;
+
+ typedef float Float;
+
+ template<class TTargetType>
+ struct LosslessCast
+ {
+ static const int32_t& Cast(const int32_t &src)
+ {
+ return src;
+ }
+ };
+
+ typedef bool Int16CompFlag;
+ typedef bool FloatCompFlag;
+
+ static int32_t AbstractAdd(const int32_t &a, const int32_t &b)
+ {
+ return a + b;
+ }
+
+ static int32_t AbstractSubtract(const int32_t &a, const int32_t &b)
+ {
+ return a - b;
+ }
+
+ static float Select(bool flag, float a, float b)
+ {
+ return flag ? a : b;
+ }
+
+ static int32_t Select(bool flag, int32_t a, int32_t b)
+ {
+ return flag ? a : b;
+ }
+
+ static int32_t SelectOrZero(bool flag, int32_t a)
+ {
+ return flag ? a : 0;
+ }
+
+ static void ConditionalSet(int32_t& dest, bool flag, int32_t src)
+ {
+ if (flag)
+ dest = src;
+ }
+
+ static void ConditionalSet(bool& dest, bool flag, bool src)
+ {
+ if (flag)
+ dest = src;
+ }
+
+ static int32_t ConditionalNegate(bool flag, int32_t v)
+ {
+ return (flag) ? -v : v;
+ }
+
+ static void NotConditionalSet(int32_t& dest, bool flag, int32_t src)
+ {
+ if (!flag)
+ dest = src;
+ }
+
+ static void ConditionalSet(float& dest, bool flag, float src)
+ {
+ if (flag)
+ dest = src;
+ }
+
+ static void NotConditionalSet(float& dest, bool flag, float src)
+ {
+ if (!flag)
+ dest = src;
+ }
+
+ static void MakeSafeDenominator(float& v)
+ {
+ if (v == 0.0f)
+ v = 1.0f;
+ }
+
+ static int32_t SignedRightShift(int32_t v, int bits)
+ {
+ return v >> bits;
+ }
+
+ static int32_t TruncateToPrecisionSigned(int32_t v, int precision)
+ {
+ v = (v << (32 - precision)) & 0xffffffff;
+ return SignedRightShift(v, 32 - precision);
+ }
+
+ static int32_t TruncateToPrecisionUnsigned(int32_t v, int precision)
+ {
+ return v & ((1 << precision) - 1);
+ }
+
+ static int32_t Min(int32_t a, int32_t b)
+ {
+ if (a < b)
+ return a;
+ return b;
+ }
+
+ static float Min(float a, float b)
+ {
+ if (a < b)
+ return a;
+ return b;
+ }
+
+ static int32_t Max(int32_t a, int32_t b)
+ {
+ if (a > b)
+ return a;
+ return b;
+ }
+
+ static float Max(float a, float b)
+ {
+ if (a > b)
+ return a;
+ return b;
+ }
+
+ static float Abs(float a)
+ {
+ return fabsf(a);
+ }
+
+ static int32_t Abs(int32_t a)
+ {
+ if (a < 0)
+ return -a;
+ return a;
+ }
+
+ static float Clamp(float v, float min, float max)
+ {
+ if (v < min)
+ return min;
+ if (v > max)
+ return max;
+ return v;
+ }
+
+ static float Reciprocal(float v)
+ {
+ return 1.0f / v;
+ }
+
+ static void ConvertLDRInputs(const PixelBlockU8* inputBlocks, int pxOffset, int channel, int32_t& chOut)
+ {
+ chOut = inputBlocks[0].m_pixels[pxOffset][channel];
+ }
+
+ static void ConvertHDRInputs(const PixelBlockF16* inputBlocks, int pxOffset, int channel, int32_t& chOut)
+ {
+ chOut = inputBlocks[0].m_pixels[pxOffset][channel];
+ }
+
+ static float MakeFloat(float v)
+ {
+ return v;
+ }
+
+ static float MakeFloatZero()
+ {
+ return 0.0f;
+ }
+
+ static int32_t MakeUInt16(uint16_t v)
+ {
+ return v;
+ }
+
+ static int32_t MakeSInt16(int16_t v)
+ {
+ return v;
+ }
+
+ static int32_t MakeAInt16(int16_t v)
+ {
+ return v;
+ }
+
+ static int32_t MakeUInt15(uint16_t v)
+ {
+ return v;
+ }
+
+ static int32_t MakeSInt32(int32_t v)
+ {
+ return v;
+ }
+
+ static int32_t MakeUInt31(int32_t v)
+ {
+ return v;
+ }
+
+ static int32_t Extract(int32_t v, int offset)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ return v;
+ }
+
+ static bool Extract(bool v, int offset)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ return v;
+ }
+
+ static float Extract(float v, int offset)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ return v;
+ }
+
+ static void PutUInt16(int32_t &dest, int offset, ParallelMath::ScalarUInt16 v)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ dest = v;
+ }
+
+ static void PutUInt15(int32_t &dest, int offset, ParallelMath::ScalarUInt16 v)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ dest = v;
+ }
+
+ static void PutSInt16(int32_t &dest, int offset, ParallelMath::ScalarSInt16 v)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ dest = v;
+ }
+
+ static float ExtractFloat(float v, int offset)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ return v;
+ }
+
+ static void PutFloat(float &dest, int offset, float v)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ dest = v;
+ }
+
+ static void PutBoolInt16(bool &dest, int offset, bool v)
+ {
+ UNREFERENCED_PARAMETER(offset);
+ dest = v;
+ }
+
+ static bool Less(int32_t a, int32_t b)
+ {
+ return a < b;
+ }
+
+ static bool Less(float a, float b)
+ {
+ return a < b;
+ }
+
+ static bool LessOrEqual(int32_t a, int32_t b)
+ {
+ return a < b;
+ }
+
+ static bool LessOrEqual(float a, float b)
+ {
+ return a < b;
+ }
+
+ static bool Equal(int32_t a, int32_t b)
+ {
+ return a == b;
+ }
+
+ static bool Equal(float a, float b)
+ {
+ return a == b;
+ }
+
+ static float ToFloat(int32_t v)
+ {
+ return static_cast<float>(v);
+ }
+
+ static int32_t ToUInt31(int32_t v)
+ {
+ return v;
+ }
+
+ static int32_t ToInt32(int32_t v)
+ {
+ return v;
+ }
+
+ static bool FloatFlagToInt16(bool v)
+ {
+ return v;
+ }
+
+ static bool Int32FlagToInt16(bool v)
+ {
+ return v;
+ }
+
+ static bool Int16FlagToFloat(bool v)
+ {
+ return v;
+ }
+
+ static bool MakeBoolInt16(bool b)
+ {
+ return b;
+ }
+
+ static bool MakeBoolFloat(bool b)
+ {
+ return b;
+ }
+
+ static bool AndNot(bool a, bool b)
+ {
+ return a && !b;
+ }
+
+ static bool Not(bool b)
+ {
+ return !b;
+ }
+
+ static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundTowardZeroForScope *rtz)
+ {
+ UNREFERENCED_PARAMETER(rtz);
+ return static_cast<int>(v);
+ }
+
+ static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundUpForScope *ru)
+ {
+ UNREFERENCED_PARAMETER(ru);
+ return static_cast<int>(ceilf(v));
+ }
+
+ static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundDownForScope *rd)
+ {
+ UNREFERENCED_PARAMETER(rd);
+ return static_cast<int>(floorf(v));
+ }
+
+ static int32_t RoundAndConvertToInt(float v, const ParallelMath::RoundTowardNearestForScope *rtn)
+ {
+ UNREFERENCED_PARAMETER(rtn);
+ return static_cast<int>(floorf(v + 0.5f));
+ }
+
+ template<class TRoundMode>
+ static int32_t RoundAndConvertToU16(float v, const TRoundMode *roundingMode)
+ {
+ return RoundAndConvertToInt(v, roundingMode);
+ }
+
+ template<class TRoundMode>
+ static int32_t RoundAndConvertToU15(float v, const TRoundMode *roundingMode)
+ {
+ return RoundAndConvertToInt(v, roundingMode);
+ }
+
+ template<class TRoundMode>
+ static int32_t RoundAndConvertToS16(float v, const TRoundMode *roundingMode)
+ {
+ return RoundAndConvertToInt(v, roundingMode);
+ }
+
+ static float Sqrt(float f)
+ {
+ return sqrtf(f);
+ }
+
+ static int32_t SqDiffUInt8(int32_t a, int32_t b)
+ {
+ int32_t delta = a - b;
+ return delta * delta;
+ }
+
+ static int32_t SqDiffInt16(int32_t a, int32_t b)
+ {
+ int32_t delta = a - b;
+ return delta * delta;
+ }
+
+ static int32_t SqDiffSInt16(int32_t a, int32_t b)
+ {
+ int32_t delta = a - b;
+ return delta * delta;
+ }
+
+ static float TwosCLHalfToFloat(int32_t v)
+ {
+ int32_t absV = (v < 0) ? -v : v;
+
+ int32_t signBits = (absV & -32768);
+ int32_t mantissa = (absV & 0x03ff);
+ int32_t exponent = (absV & 0x7c00);
+
+ bool isDenormal = (exponent == 0);
+
+ // Convert exponent to high-bits
+ exponent = (exponent >> 3) + 14336;
+
+ int32_t denormalCorrection = (isDenormal ? (signBits | 14336) : 0) << 16;
+
+ int32_t fBits = ((exponent | signBits) << 16) | (mantissa << 13);
+
+ float f, correction;
+ memcpy(&f, &fBits, 4);
+ memcpy(&correction, &denormalCorrection, 4);
+
+ return f - correction;
+ }
+
+ static Float SqDiff2CLFloat(const SInt16 &a, const Float &b)
+ {
+ Float fa = TwosCLHalfToFloat(a);
+
+ Float diff = fa - b;
+ return diff * diff;
+ }
+
+ static Float SqDiff2CL(const SInt16 &a, const SInt16 &b)
+ {
+ Float fa = TwosCLHalfToFloat(a);
+ Float fb = TwosCLHalfToFloat(b);
+
+ Float diff = fa - fb;
+ return diff * diff;
+ }
+
+ static Float SqDiff2CLFloat(const SInt16 &a, float aWeight, const Float &b)
+ {
+ Float fa = TwosCLHalfToFloat(a) * aWeight;
+
+ Float diff = fa - b;
+ return diff * diff;
+ }
+
+ static int32_t RightShift(int32_t v, int bits)
+ {
+ return SignedRightShift(v, bits);
+ }
+
+ static int32_t ToSInt16(int32_t v)
+ {
+ return v;
+ }
+
+ static int32_t ToUInt16(int32_t v)
+ {
+ return v;
+ }
+
+ static int32_t ToUInt15(int32_t v)
+ {
+ return v;
+ }
+
+ static int32_t XMultiply(int32_t a, int32_t b)
+ {
+ return a * b;
+ }
+
+ static int32_t CompactMultiply(int32_t a, int32_t b)
+ {
+ return a * b;
+ }
+
+ static bool AnySet(bool v)
+ {
+ return v;
+ }
+
+ static bool AllSet(bool v)
+ {
+ return v;
+ }
+ };
+
+#endif
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_S3TC.cpp b/thirdparty/cvtt/ConvectionKernels_S3TC.cpp
new file mode 100644
index 0000000000..23f1bd3314
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_S3TC.cpp
@@ -0,0 +1,1054 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels_S3TC.h"
+
+#include "ConvectionKernels_AggregatedError.h"
+#include "ConvectionKernels_BCCommon.h"
+#include "ConvectionKernels_EndpointRefiner.h"
+#include "ConvectionKernels_EndpointSelector.h"
+#include "ConvectionKernels_IndexSelector.h"
+#include "ConvectionKernels_UnfinishedEndpoints.h"
+#include "ConvectionKernels_S3TC_SingleColor.h"
+
+void cvtt::Internal::S3TCComputer::Init(MFloat& error)
+{
+ error = ParallelMath::MakeFloat(FLT_MAX);
+}
+
+void cvtt::Internal::S3TCComputer::QuantizeTo6Bits(MUInt15& v)
+{
+ MUInt15 reduced = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(v, ParallelMath::MakeUInt15(253)) + ParallelMath::MakeUInt16(512), 10));
+ v = (reduced << 2) | ParallelMath::RightShift(reduced, 4);
+}
+
+void cvtt::Internal::S3TCComputer::QuantizeTo5Bits(MUInt15& v)
+{
+ MUInt15 reduced = ParallelMath::LosslessCast<MUInt15>::Cast(ParallelMath::RightShift(ParallelMath::CompactMultiply(v, ParallelMath::MakeUInt15(249)) + ParallelMath::MakeUInt16(1024), 11));
+ v = (reduced << 3) | ParallelMath::RightShift(reduced, 2);
+}
+
+void cvtt::Internal::S3TCComputer::QuantizeTo565(MUInt15 endPoint[3])
+{
+ QuantizeTo5Bits(endPoint[0]);
+ QuantizeTo6Bits(endPoint[1]);
+ QuantizeTo5Bits(endPoint[2]);
+}
+
+cvtt::ParallelMath::Float cvtt::Internal::S3TCComputer::ParanoidFactorForSpan(const MSInt16& span)
+{
+ return ParallelMath::Abs(ParallelMath::ToFloat(span)) * 0.03f;
+}
+
+cvtt::ParallelMath::Float cvtt::Internal::S3TCComputer::ParanoidDiff(const MUInt15& a, const MUInt15& b, const MFloat& d)
+{
+ MFloat absDiff = ParallelMath::Abs(ParallelMath::ToFloat(ParallelMath::LosslessCast<MSInt16>::Cast(a) - ParallelMath::LosslessCast<MSInt16>::Cast(b)));
+ absDiff = absDiff + d;
+ return absDiff * absDiff;
+}
+
+void cvtt::Internal::S3TCComputer::TestSingleColor(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], int range, const float* channelWeights,
+ MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ float channelWeightsSq[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
+
+ MUInt15 totals[3] = { ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(0) };
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ totals[ch] = totals[ch] + pixels[px][ch];
+ }
+
+ MUInt15 average[3];
+ for (int ch = 0; ch < 3; ch++)
+ average[ch] = ParallelMath::RightShift(totals[ch] + ParallelMath::MakeUInt15(8), 4);
+
+ const Tables::S3TCSC::TableEntry* rbTable = NULL;
+ const Tables::S3TCSC::TableEntry* gTable = NULL;
+ if (flags & cvtt::Flags::S3TC_Paranoid)
+ {
+ if (range == 4)
+ {
+ rbTable = Tables::S3TCSC::g_singleColor5_3_p;
+ gTable = Tables::S3TCSC::g_singleColor6_3_p;
+ }
+ else
+ {
+ assert(range == 3);
+ rbTable = Tables::S3TCSC::g_singleColor5_2_p;
+ gTable = Tables::S3TCSC::g_singleColor6_2_p;
+ }
+ }
+ else
+ {
+ if (range == 4)
+ {
+ rbTable = Tables::S3TCSC::g_singleColor5_3;
+ gTable = Tables::S3TCSC::g_singleColor6_3;
+ }
+ else
+ {
+ assert(range == 3);
+ rbTable = Tables::S3TCSC::g_singleColor5_2;
+ gTable = Tables::S3TCSC::g_singleColor6_2;
+ }
+ }
+
+ MUInt15 interpolated[3];
+ MUInt15 eps[2][3];
+ MSInt16 spans[3];
+ for (int i = 0; i < ParallelMath::ParallelSize; i++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ {
+ uint16_t avg = ParallelMath::Extract(average[ch], i);
+ const Tables::S3TCSC::TableEntry& tableEntry = ((ch == 1) ? gTable[avg] : rbTable[avg]);
+ ParallelMath::PutUInt15(eps[0][ch], i, tableEntry.m_min);
+ ParallelMath::PutUInt15(eps[1][ch], i, tableEntry.m_max);
+ ParallelMath::PutUInt15(interpolated[ch], i, tableEntry.m_actualColor);
+ ParallelMath::PutSInt16(spans[ch], i, tableEntry.m_span);
+ }
+ }
+
+ MFloat error = ParallelMath::MakeFloatZero();
+ if (flags & cvtt::Flags::S3TC_Paranoid)
+ {
+ MFloat spanParanoidFactors[3];
+ for (int ch = 0; ch < 3; ch++)
+ spanParanoidFactors[ch] = ParanoidFactorForSpan(spans[ch]);
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ error = error + ParanoidDiff(interpolated[ch], pixels[px][ch], spanParanoidFactors[ch]) * channelWeightsSq[ch];
+ }
+ }
+ else
+ {
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ error = error + ParallelMath::ToFloat(ParallelMath::SqDiffUInt8(interpolated[ch], pixels[px][ch])) * channelWeightsSq[ch];
+ }
+ }
+
+ ParallelMath::FloatCompFlag better = ParallelMath::Less(error, bestError);
+ ParallelMath::Int16CompFlag better16 = ParallelMath::FloatFlagToInt16(better);
+
+ if (ParallelMath::AnySet(better16))
+ {
+ bestError = ParallelMath::Min(bestError, error);
+ for (int epi = 0; epi < 2; epi++)
+ for (int ch = 0; ch < 3; ch++)
+ ParallelMath::ConditionalSet(bestEndpoints[epi][ch], better16, eps[epi][ch]);
+
+ MUInt15 vindexes = ParallelMath::MakeUInt15(1);
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestIndexes[px], better16, vindexes);
+
+ ParallelMath::ConditionalSet(bestRange, better16, ParallelMath::MakeUInt15(range));
+ }
+}
+
+void cvtt::Internal::S3TCComputer::TestEndpoints(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const MFloat preWeightedPixels[16][4], const MUInt15 unquantizedEndPoints[2][3], int range, const float* channelWeights,
+ MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange, EndpointRefiner<3> *refiner, const ParallelMath::RoundTowardNearestForScope *rtn)
+{
+ float channelWeightsSq[3];
+
+ for (int ch = 0; ch < 3; ch++)
+ channelWeightsSq[ch] = channelWeights[ch] * channelWeights[ch];
+
+ MUInt15 endPoints[2][3];
+
+ for (int ep = 0; ep < 2; ep++)
+ for (int ch = 0; ch < 3; ch++)
+ endPoints[ep][ch] = unquantizedEndPoints[ep][ch];
+
+ QuantizeTo565(endPoints[0]);
+ QuantizeTo565(endPoints[1]);
+
+ IndexSelector<3> selector;
+ selector.Init<false>(channelWeights, endPoints, range);
+
+ MUInt15 indexes[16];
+
+ MFloat paranoidFactors[3];
+ for (int ch = 0; ch < 3; ch++)
+ paranoidFactors[ch] = ParanoidFactorForSpan(ParallelMath::LosslessCast<MSInt16>::Cast(endPoints[0][ch]) - ParallelMath::LosslessCast<MSInt16>::Cast(endPoints[1][ch]));
+
+ MFloat error = ParallelMath::MakeFloatZero();
+ AggregatedError<3> aggError;
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 index = selector.SelectIndexLDR(floatPixels[px], rtn);
+ indexes[px] = index;
+
+ if (refiner)
+ refiner->ContributeUnweightedPW(preWeightedPixels[px], index);
+
+ MUInt15 reconstructed[3];
+ selector.ReconstructLDRPrecise(index, reconstructed);
+
+ if (flags & Flags::S3TC_Paranoid)
+ {
+ for (int ch = 0; ch < 3; ch++)
+ error = error + ParanoidDiff(reconstructed[ch], pixels[px][ch], paranoidFactors[ch]) * channelWeightsSq[ch];
+ }
+ else
+ BCCommon::ComputeErrorLDR<3>(flags, reconstructed, pixels[px], aggError);
+ }
+
+ if (!(flags & Flags::S3TC_Paranoid))
+ error = aggError.Finalize(flags, channelWeightsSq);
+
+ ParallelMath::FloatCompFlag better = ParallelMath::Less(error, bestError);
+
+ if (ParallelMath::AnySet(better))
+ {
+ ParallelMath::Int16CompFlag betterInt16 = ParallelMath::FloatFlagToInt16(better);
+
+ ParallelMath::ConditionalSet(bestError, better, error);
+
+ for (int ep = 0; ep < 2; ep++)
+ for (int ch = 0; ch < 3; ch++)
+ ParallelMath::ConditionalSet(bestEndpoints[ep][ch], betterInt16, endPoints[ep][ch]);
+
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestIndexes[px], betterInt16, indexes[px]);
+
+ ParallelMath::ConditionalSet(bestRange, betterInt16, ParallelMath::MakeUInt15(static_cast<uint16_t>(range)));
+ }
+}
+
+void cvtt::Internal::S3TCComputer::TestCounts(uint32_t flags, const int *counts, int nCounts, const MUInt15 &numElements, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const MFloat preWeightedPixels[16][4], bool alphaTest,
+ const MFloat floatSortedInputs[16][4], const MFloat preWeightedFloatSortedInputs[16][4], const float *channelWeights, MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange,
+ const ParallelMath::RoundTowardNearestForScope* rtn)
+{
+ UNREFERENCED_PARAMETER(alphaTest);
+ UNREFERENCED_PARAMETER(flags);
+
+ EndpointRefiner<3> refiner;
+
+ refiner.Init(nCounts, channelWeights);
+
+ bool escape = false;
+ int e = 0;
+ for (int i = 0; i < nCounts; i++)
+ {
+ for (int n = 0; n < counts[i]; n++)
+ {
+ ParallelMath::Int16CompFlag valid = ParallelMath::Less(ParallelMath::MakeUInt15(static_cast<uint16_t>(n)), numElements);
+ if (!ParallelMath::AnySet(valid))
+ {
+ escape = true;
+ break;
+ }
+
+ if (ParallelMath::AllSet(valid))
+ refiner.ContributeUnweightedPW(preWeightedFloatSortedInputs[e++], ParallelMath::MakeUInt15(static_cast<uint16_t>(i)));
+ else
+ {
+ MFloat weight = ParallelMath::Select(ParallelMath::Int16FlagToFloat(valid), ParallelMath::MakeFloat(1.0f), ParallelMath::MakeFloat(0.0f));
+ refiner.ContributePW(preWeightedFloatSortedInputs[e++], ParallelMath::MakeUInt15(static_cast<uint16_t>(i)), weight);
+ }
+ }
+
+ if (escape)
+ break;
+ }
+
+ MUInt15 endPoints[2][3];
+ refiner.GetRefinedEndpointsLDR(endPoints, rtn);
+
+ TestEndpoints(flags, pixels, floatPixels, preWeightedPixels, endPoints, nCounts, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, NULL, rtn);
+}
+
+void cvtt::Internal::S3TCComputer::PackExplicitAlpha(uint32_t flags, const PixelBlockU8* inputs, int inputChannel, uint8_t* packedBlocks, size_t packedBlockStride)
+{
+ UNREFERENCED_PARAMETER(flags);
+ ParallelMath::RoundTowardNearestForScope rtn;
+
+ float weights[1] = { 1.0f };
+
+ MUInt15 pixels[16];
+ MFloat floatPixels[16];
+
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::ConvertLDRInputs(inputs, px, inputChannel, pixels[px]);
+ floatPixels[px] = ParallelMath::ToFloat(pixels[px]);
+ }
+
+ MUInt15 ep[2][1] = { { ParallelMath::MakeUInt15(0) },{ ParallelMath::MakeUInt15(255) } };
+
+ IndexSelector<1> selector;
+ selector.Init<false>(weights, ep, 16);
+
+ MUInt15 indexes[16];
+
+ for (int px = 0; px < 16; px++)
+ indexes[px] = selector.SelectIndexLDR(&floatPixels[px], &rtn);
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ for (int px = 0; px < 16; px += 2)
+ {
+ int index0 = ParallelMath::Extract(indexes[px], block);
+ int index1 = ParallelMath::Extract(indexes[px + 1], block);
+
+ packedBlocks[px / 2] = static_cast<uint8_t>(index0 | (index1 << 4));
+ }
+
+ packedBlocks += packedBlockStride;
+ }
+}
+
+void cvtt::Internal::S3TCComputer::PackInterpolatedAlpha(uint32_t flags, const PixelBlockU8* inputs, int inputChannel, uint8_t* packedBlocks, size_t packedBlockStride, bool isSigned, int maxTweakRounds, int numRefineRounds)
+{
+ if (maxTweakRounds < 1)
+ maxTweakRounds = 1;
+
+ if (numRefineRounds < 1)
+ numRefineRounds = 1;
+
+ ParallelMath::RoundTowardNearestForScope rtn;
+
+ float oneWeight[1] = { 1.0f };
+
+ MUInt15 pixels[16];
+ MFloat floatPixels[16];
+
+ MUInt15 highTerminal = isSigned ? ParallelMath::MakeUInt15(254) : ParallelMath::MakeUInt15(255);
+ MUInt15 highTerminalMinusOne = highTerminal - ParallelMath::MakeUInt15(1);
+
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::ConvertLDRInputs(inputs, px, inputChannel, pixels[px]);
+
+ if (isSigned)
+ pixels[px] = ParallelMath::Min(pixels[px], highTerminal);
+
+ floatPixels[px] = ParallelMath::ToFloat(pixels[px]);
+ }
+
+ MUInt15 sortedPixels[16];
+ for (int px = 0; px < 16; px++)
+ sortedPixels[px] = pixels[px];
+
+ for (int sortEnd = 15; sortEnd > 0; sortEnd--)
+ {
+ for (int sortOffset = 0; sortOffset < sortEnd; sortOffset++)
+ {
+ MUInt15 a = sortedPixels[sortOffset];
+ MUInt15 b = sortedPixels[sortOffset + 1];
+
+ sortedPixels[sortOffset] = ParallelMath::Min(a, b);
+ sortedPixels[sortOffset + 1] = ParallelMath::Max(a, b);
+ }
+ }
+
+ MUInt15 zero = ParallelMath::MakeUInt15(0);
+ MUInt15 one = ParallelMath::MakeUInt15(1);
+
+ MUInt15 bestIsFullRange = zero;
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+ MUInt15 bestEP[2] = { zero, zero };
+ MUInt15 bestIndexes[16] = {
+ zero, zero, zero, zero,
+ zero, zero, zero, zero,
+ zero, zero, zero, zero,
+ zero, zero, zero, zero
+ };
+
+ // Full-precision
+ {
+ MUInt15 minEP = sortedPixels[0];
+ MUInt15 maxEP = sortedPixels[15];
+
+ MFloat base[1] = { ParallelMath::ToFloat(minEP) };
+ MFloat offset[1] = { ParallelMath::ToFloat(maxEP - minEP) };
+
+ UnfinishedEndpoints<1> ufep = UnfinishedEndpoints<1>(base, offset);
+
+ int numTweakRounds = BCCommon::TweakRoundsForRange(8);
+ if (numTweakRounds > maxTweakRounds)
+ numTweakRounds = maxTweakRounds;
+
+ for (int tweak = 0; tweak < numTweakRounds; tweak++)
+ {
+ MUInt15 ep[2][1];
+
+ ufep.FinishLDR(tweak, 8, ep[0], ep[1]);
+
+ for (int refinePass = 0; refinePass < numRefineRounds; refinePass++)
+ {
+ EndpointRefiner<1> refiner;
+ refiner.Init(8, oneWeight);
+
+ if (isSigned)
+ for (int epi = 0; epi < 2; epi++)
+ ep[epi][0] = ParallelMath::Min(ep[epi][0], highTerminal);
+
+ IndexSelector<1> indexSelector;
+ indexSelector.Init<false>(oneWeight, ep, 8);
+
+ MUInt15 indexes[16];
+
+ AggregatedError<1> aggError;
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 index = indexSelector.SelectIndexLDR(&floatPixels[px], &rtn);
+
+ MUInt15 reconstructedPixel;
+
+ indexSelector.ReconstructLDRPrecise(index, &reconstructedPixel);
+ BCCommon::ComputeErrorLDR<1>(flags, &reconstructedPixel, &pixels[px], aggError);
+
+ if (refinePass != numRefineRounds - 1)
+ refiner.ContributeUnweightedPW(&floatPixels[px], index);
+
+ indexes[px] = index;
+ }
+ MFloat error = aggError.Finalize(flags | Flags::Uniform, oneWeight);
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
+ ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
+
+ if (ParallelMath::AnySet(errorBetter16))
+ {
+ bestError = ParallelMath::Min(error, bestError);
+ ParallelMath::ConditionalSet(bestIsFullRange, errorBetter16, one);
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestIndexes[px], errorBetter16, indexes[px]);
+
+ for (int epi = 0; epi < 2; epi++)
+ ParallelMath::ConditionalSet(bestEP[epi], errorBetter16, ep[epi][0]);
+ }
+
+ if (refinePass != numRefineRounds - 1)
+ refiner.GetRefinedEndpointsLDR(ep, &rtn);
+ }
+ }
+ }
+
+ // Reduced precision with special endpoints
+ {
+ MUInt15 bestHeuristicMin = sortedPixels[0];
+ MUInt15 bestHeuristicMax = sortedPixels[15];
+
+ ParallelMath::Int16CompFlag canTryClipping;
+
+ // In reduced precision, we want try putting endpoints at the reserved indexes at the ends.
+ // The heuristic we use is to assign indexes to the end as long as they aren't off by more than half of the index range.
+ // This will usually not find anything, but it's cheap to check.
+
+ {
+ MUInt15 largestPossibleRange = bestHeuristicMax - bestHeuristicMin; // Max: 255
+ MUInt15 lowestPossibleClearance = ParallelMath::Min(bestHeuristicMin, static_cast<MUInt15>(highTerminal - bestHeuristicMax));
+
+ MUInt15 lowestPossibleClearanceTimes10 = (lowestPossibleClearance << 2) + (lowestPossibleClearance << 4);
+ canTryClipping = ParallelMath::LessOrEqual(lowestPossibleClearanceTimes10, largestPossibleRange);
+ }
+
+ if (ParallelMath::AnySet(canTryClipping))
+ {
+ MUInt15 lowClearances[16];
+ MUInt15 highClearances[16];
+ MUInt15 bestSkipCount = ParallelMath::MakeUInt15(0);
+
+ lowClearances[0] = highClearances[0] = ParallelMath::MakeUInt15(0);
+
+ for (int px = 1; px < 16; px++)
+ {
+ lowClearances[px] = sortedPixels[px - 1];
+ highClearances[px] = highTerminal - sortedPixels[16 - px];
+ }
+
+ for (uint16_t firstIndex = 0; firstIndex < 16; firstIndex++)
+ {
+ uint16_t numSkippedLow = firstIndex;
+
+ MUInt15 lowClearance = lowClearances[firstIndex];
+
+ for (uint16_t lastIndex = firstIndex; lastIndex < 16; lastIndex++)
+ {
+ uint16_t numSkippedHigh = 15 - lastIndex;
+ uint16_t numSkipped = numSkippedLow + numSkippedHigh;
+
+ MUInt15 numSkippedV = ParallelMath::MakeUInt15(numSkipped);
+
+ ParallelMath::Int16CompFlag areMoreSkipped = ParallelMath::Less(bestSkipCount, numSkippedV);
+
+ if (!ParallelMath::AnySet(areMoreSkipped))
+ continue;
+
+ MUInt15 clearance = ParallelMath::Max(highClearances[numSkippedHigh], lowClearance);
+ MUInt15 clearanceTimes10 = (clearance << 2) + (clearance << 4);
+
+ MUInt15 range = sortedPixels[lastIndex] - sortedPixels[firstIndex];
+
+ ParallelMath::Int16CompFlag isBetter = (areMoreSkipped & ParallelMath::LessOrEqual(clearanceTimes10, range));
+ ParallelMath::ConditionalSet(bestHeuristicMin, isBetter, sortedPixels[firstIndex]);
+ ParallelMath::ConditionalSet(bestHeuristicMax, isBetter, sortedPixels[lastIndex]);
+ }
+ }
+ }
+
+ MUInt15 bestSimpleMin = one;
+ MUInt15 bestSimpleMax = highTerminalMinusOne;
+
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::ConditionalSet(bestSimpleMin, ParallelMath::Less(zero, sortedPixels[15 - px]), sortedPixels[15 - px]);
+ ParallelMath::ConditionalSet(bestSimpleMax, ParallelMath::Less(sortedPixels[px], highTerminal), sortedPixels[px]);
+ }
+
+ MUInt15 minEPs[2] = { bestSimpleMin, bestHeuristicMin };
+ MUInt15 maxEPs[2] = { bestSimpleMax, bestHeuristicMax };
+
+ int minEPRange = 2;
+ if (ParallelMath::AllSet(ParallelMath::Equal(minEPs[0], minEPs[1])))
+ minEPRange = 1;
+
+ int maxEPRange = 2;
+ if (ParallelMath::AllSet(ParallelMath::Equal(maxEPs[0], maxEPs[1])))
+ maxEPRange = 1;
+
+ for (int minEPIndex = 0; minEPIndex < minEPRange; minEPIndex++)
+ {
+ for (int maxEPIndex = 0; maxEPIndex < maxEPRange; maxEPIndex++)
+ {
+ MFloat base[1] = { ParallelMath::ToFloat(minEPs[minEPIndex]) };
+ MFloat offset[1] = { ParallelMath::ToFloat(maxEPs[maxEPIndex] - minEPs[minEPIndex]) };
+
+ UnfinishedEndpoints<1> ufep = UnfinishedEndpoints<1>(base, offset);
+
+ int numTweakRounds = BCCommon::TweakRoundsForRange(6);
+ if (numTweakRounds > maxTweakRounds)
+ numTweakRounds = maxTweakRounds;
+
+ for (int tweak = 0; tweak < numTweakRounds; tweak++)
+ {
+ MUInt15 ep[2][1];
+
+ ufep.FinishLDR(tweak, 8, ep[0], ep[1]);
+
+ for (int refinePass = 0; refinePass < numRefineRounds; refinePass++)
+ {
+ EndpointRefiner<1> refiner;
+ refiner.Init(6, oneWeight);
+
+ if (isSigned)
+ for (int epi = 0; epi < 2; epi++)
+ ep[epi][0] = ParallelMath::Min(ep[epi][0], highTerminal);
+
+ IndexSelector<1> indexSelector;
+ indexSelector.Init<false>(oneWeight, ep, 6);
+
+ MUInt15 indexes[16];
+ MFloat error = ParallelMath::MakeFloatZero();
+
+ for (int px = 0; px < 16; px++)
+ {
+ MUInt15 selectedIndex = indexSelector.SelectIndexLDR(&floatPixels[px], &rtn);
+
+ MUInt15 reconstructedPixel;
+
+ indexSelector.ReconstructLDRPrecise(selectedIndex, &reconstructedPixel);
+
+ MFloat zeroError = BCCommon::ComputeErrorLDRSimple<1>(flags | Flags::Uniform, &zero, &pixels[px], 1, oneWeight);
+ MFloat highTerminalError = BCCommon::ComputeErrorLDRSimple<1>(flags | Flags::Uniform, &highTerminal, &pixels[px], 1, oneWeight);
+ MFloat selectedIndexError = BCCommon::ComputeErrorLDRSimple<1>(flags | Flags::Uniform, &reconstructedPixel, &pixels[px], 1, oneWeight);
+
+ MFloat bestPixelError = zeroError;
+ MUInt15 index = ParallelMath::MakeUInt15(6);
+
+ ParallelMath::ConditionalSet(index, ParallelMath::FloatFlagToInt16(ParallelMath::Less(highTerminalError, bestPixelError)), ParallelMath::MakeUInt15(7));
+ bestPixelError = ParallelMath::Min(bestPixelError, highTerminalError);
+
+ ParallelMath::FloatCompFlag selectedIndexBetter = ParallelMath::Less(selectedIndexError, bestPixelError);
+
+ if (ParallelMath::AllSet(selectedIndexBetter))
+ {
+ if (refinePass != numRefineRounds - 1)
+ refiner.ContributeUnweightedPW(&floatPixels[px], selectedIndex);
+ }
+ else
+ {
+ MFloat refineWeight = ParallelMath::Select(selectedIndexBetter, ParallelMath::MakeFloat(1.0f), ParallelMath::MakeFloatZero());
+
+ if (refinePass != numRefineRounds - 1)
+ refiner.ContributePW(&floatPixels[px], selectedIndex, refineWeight);
+ }
+
+ ParallelMath::ConditionalSet(index, ParallelMath::FloatFlagToInt16(selectedIndexBetter), selectedIndex);
+ bestPixelError = ParallelMath::Min(bestPixelError, selectedIndexError);
+
+ error = error + bestPixelError;
+
+ indexes[px] = index;
+ }
+
+ ParallelMath::FloatCompFlag errorBetter = ParallelMath::Less(error, bestError);
+ ParallelMath::Int16CompFlag errorBetter16 = ParallelMath::FloatFlagToInt16(errorBetter);
+
+ if (ParallelMath::AnySet(errorBetter16))
+ {
+ bestError = ParallelMath::Min(error, bestError);
+ ParallelMath::ConditionalSet(bestIsFullRange, errorBetter16, zero);
+ for (int px = 0; px < 16; px++)
+ ParallelMath::ConditionalSet(bestIndexes[px], errorBetter16, indexes[px]);
+
+ for (int epi = 0; epi < 2; epi++)
+ ParallelMath::ConditionalSet(bestEP[epi], errorBetter16, ep[epi][0]);
+ }
+
+ if (refinePass != numRefineRounds - 1)
+ refiner.GetRefinedEndpointsLDR(ep, &rtn);
+ }
+ }
+ }
+ }
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ int ep0 = ParallelMath::Extract(bestEP[0], block);
+ int ep1 = ParallelMath::Extract(bestEP[1], block);
+ int isFullRange = ParallelMath::Extract(bestIsFullRange, block);
+
+ if (isSigned)
+ {
+ ep0 -= 127;
+ ep1 -= 127;
+
+ assert(ep0 >= -127 && ep0 <= 127);
+ assert(ep1 >= -127 && ep1 <= 127);
+ }
+
+
+ bool swapEndpoints = (isFullRange != 0) != (ep0 > ep1);
+
+ if (swapEndpoints)
+ std::swap(ep0, ep1);
+
+ uint16_t dumpBits = 0;
+ int dumpBitsOffset = 0;
+ int dumpByteOffset = 2;
+ packedBlocks[0] = static_cast<uint8_t>(ep0 & 0xff);
+ packedBlocks[1] = static_cast<uint8_t>(ep1 & 0xff);
+
+ int maxValue = (isFullRange != 0) ? 7 : 5;
+
+ for (int px = 0; px < 16; px++)
+ {
+ int index = ParallelMath::Extract(bestIndexes[px], block);
+
+ if (swapEndpoints && index <= maxValue)
+ index = maxValue - index;
+
+ if (index != 0)
+ {
+ if (index == maxValue)
+ index = 1;
+ else if (index < maxValue)
+ index++;
+ }
+
+ assert(index >= 0 && index < 8);
+
+ dumpBits |= static_cast<uint16_t>(index << dumpBitsOffset);
+ dumpBitsOffset += 3;
+
+ if (dumpBitsOffset >= 8)
+ {
+ assert(dumpByteOffset < 8);
+ packedBlocks[dumpByteOffset] = static_cast<uint8_t>(dumpBits & 0xff);
+ dumpBits >>= 8;
+ dumpBitsOffset -= 8;
+ dumpByteOffset++;
+ }
+ }
+
+ assert(dumpBitsOffset == 0);
+ assert(dumpByteOffset == 8);
+
+ packedBlocks += packedBlockStride;
+ }
+}
+
+void cvtt::Internal::S3TCComputer::PackRGB(uint32_t flags, const PixelBlockU8* inputs, uint8_t* packedBlocks, size_t packedBlockStride, const float channelWeights[4], bool alphaTest, float alphaThreshold, bool exhaustive, int maxTweakRounds, int numRefineRounds)
+{
+ ParallelMath::RoundTowardNearestForScope rtn;
+
+ if (numRefineRounds < 1)
+ numRefineRounds = 1;
+
+ if (maxTweakRounds < 1)
+ maxTweakRounds = 1;
+
+ EndpointSelector<3, 8> endpointSelector;
+
+ MUInt15 pixels[16][4];
+ MFloat floatPixels[16][4];
+
+ MFloat preWeightedPixels[16][4];
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ ParallelMath::ConvertLDRInputs(inputs, px, ch, pixels[px][ch]);
+ }
+
+ for (int px = 0; px < 16; px++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ floatPixels[px][ch] = ParallelMath::ToFloat(pixels[px][ch]);
+ }
+
+ if (alphaTest)
+ {
+ MUInt15 threshold = ParallelMath::MakeUInt15(static_cast<uint16_t>(floor(alphaThreshold * 255.0f + 0.5f)));
+
+ for (int px = 0; px < 16; px++)
+ {
+ ParallelMath::Int16CompFlag belowThreshold = ParallelMath::Less(pixels[px][3], threshold);
+ pixels[px][3] = ParallelMath::Select(belowThreshold, ParallelMath::MakeUInt15(0), ParallelMath::MakeUInt15(255));
+ }
+ }
+
+ BCCommon::PreWeightPixelsLDR<4>(preWeightedPixels, pixels, channelWeights);
+
+ MUInt15 minAlpha = ParallelMath::MakeUInt15(255);
+
+ for (int px = 0; px < 16; px++)
+ minAlpha = ParallelMath::Min(minAlpha, pixels[px][3]);
+
+ MFloat pixelWeights[16];
+ for (int px = 0; px < 16; px++)
+ {
+ pixelWeights[px] = ParallelMath::MakeFloat(1.0f);
+ if (alphaTest)
+ {
+ ParallelMath::Int16CompFlag isTransparent = ParallelMath::Less(pixels[px][3], ParallelMath::MakeUInt15(255));
+
+ ParallelMath::ConditionalSet(pixelWeights[px], ParallelMath::Int16FlagToFloat(isTransparent), ParallelMath::MakeFloatZero());
+ }
+ }
+
+ for (int pass = 0; pass < NumEndpointSelectorPasses; pass++)
+ {
+ for (int px = 0; px < 16; px++)
+ endpointSelector.ContributePass(preWeightedPixels[px], pass, pixelWeights[px]);
+
+ endpointSelector.FinishPass(pass);
+ }
+
+ UnfinishedEndpoints<3> ufep = endpointSelector.GetEndpoints(channelWeights);
+
+ MUInt15 bestEndpoints[2][3];
+ MUInt15 bestIndexes[16];
+ MUInt15 bestRange = ParallelMath::MakeUInt15(0);
+ MFloat bestError = ParallelMath::MakeFloat(FLT_MAX);
+
+ for (int px = 0; px < 16; px++)
+ bestIndexes[px] = ParallelMath::MakeUInt15(0);
+
+ for (int ep = 0; ep < 2; ep++)
+ for (int ch = 0; ch < 3; ch++)
+ bestEndpoints[ep][ch] = ParallelMath::MakeUInt15(0);
+
+ if (exhaustive)
+ {
+ MSInt16 sortBins[16];
+
+ {
+ // Compute an 11-bit index, change it to signed, stuff it in the high bits of the sort bins,
+ // and pack the original indexes into the low bits.
+
+ MUInt15 sortEP[2][3];
+ ufep.FinishLDR(0, 11, sortEP[0], sortEP[1]);
+
+ IndexSelector<3> sortSelector;
+ sortSelector.Init<false>(channelWeights, sortEP, 1 << 11);
+
+ for (int16_t px = 0; px < 16; px++)
+ {
+ MSInt16 sortBin = ParallelMath::LosslessCast<MSInt16>::Cast(sortSelector.SelectIndexLDR(floatPixels[px], &rtn) << 4);
+
+ if (alphaTest)
+ {
+ ParallelMath::Int16CompFlag isTransparent = ParallelMath::Less(pixels[px][3], ParallelMath::MakeUInt15(255));
+
+ ParallelMath::ConditionalSet(sortBin, isTransparent, ParallelMath::MakeSInt16(-16)); // 0xfff0
+ }
+
+ sortBin = sortBin + ParallelMath::MakeSInt16(px);
+
+ sortBins[px] = sortBin;
+ }
+ }
+
+ // Sort bins
+ for (int sortEnd = 1; sortEnd < 16; sortEnd++)
+ {
+ for (int sortLoc = sortEnd; sortLoc > 0; sortLoc--)
+ {
+ MSInt16 a = sortBins[sortLoc];
+ MSInt16 b = sortBins[sortLoc - 1];
+
+ sortBins[sortLoc] = ParallelMath::Max(a, b);
+ sortBins[sortLoc - 1] = ParallelMath::Min(a, b);
+ }
+ }
+
+ MUInt15 firstElement = ParallelMath::MakeUInt15(0);
+ for (uint16_t e = 0; e < 16; e++)
+ {
+ ParallelMath::Int16CompFlag isInvalid = ParallelMath::Less(sortBins[e], ParallelMath::MakeSInt16(0));
+ ParallelMath::ConditionalSet(firstElement, isInvalid, ParallelMath::MakeUInt15(e + 1));
+ if (!ParallelMath::AnySet(isInvalid))
+ break;
+ }
+
+ MUInt15 numElements = ParallelMath::MakeUInt15(16) - firstElement;
+
+ MUInt15 sortedInputs[16][4];
+ MFloat floatSortedInputs[16][4];
+ MFloat pwFloatSortedInputs[16][4];
+
+ for (int e = 0; e < 16; e++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ sortedInputs[e][ch] = ParallelMath::MakeUInt15(0);
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ for (int e = ParallelMath::Extract(firstElement, block); e < 16; e++)
+ {
+ ParallelMath::ScalarUInt16 sortBin = ParallelMath::Extract(sortBins[e], block);
+ int originalIndex = (sortBin & 15);
+
+ for (int ch = 0; ch < 4; ch++)
+ ParallelMath::PutUInt15(sortedInputs[15 - e][ch], block, ParallelMath::Extract(pixels[originalIndex][ch], block));
+ }
+ }
+
+ for (int e = 0; e < 16; e++)
+ {
+ for (int ch = 0; ch < 4; ch++)
+ {
+ MFloat f = ParallelMath::ToFloat(sortedInputs[e][ch]);
+ floatSortedInputs[e][ch] = f;
+ pwFloatSortedInputs[e][ch] = f * channelWeights[ch];
+ }
+ }
+
+ for (int n0 = 0; n0 <= 15; n0++)
+ {
+ int remainingFor1 = 16 - n0;
+ if (remainingFor1 == 16)
+ remainingFor1 = 15;
+
+ for (int n1 = 0; n1 <= remainingFor1; n1++)
+ {
+ int remainingFor2 = 16 - n1 - n0;
+ if (remainingFor2 == 16)
+ remainingFor2 = 15;
+
+ for (int n2 = 0; n2 <= remainingFor2; n2++)
+ {
+ int n3 = 16 - n2 - n1 - n0;
+
+ if (n3 == 16)
+ continue;
+
+ int counts[4] = { n0, n1, n2, n3 };
+
+ TestCounts(flags, counts, 4, numElements, pixels, floatPixels, preWeightedPixels, alphaTest, floatSortedInputs, pwFloatSortedInputs, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
+ }
+ }
+ }
+
+ TestSingleColor(flags, pixels, floatPixels, 4, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
+
+ if (alphaTest)
+ {
+ for (int n0 = 0; n0 <= 15; n0++)
+ {
+ int remainingFor1 = 16 - n0;
+ if (remainingFor1 == 16)
+ remainingFor1 = 15;
+
+ for (int n1 = 0; n1 <= remainingFor1; n1++)
+ {
+ int n2 = 16 - n1 - n0;
+
+ if (n2 == 16)
+ continue;
+
+ int counts[3] = { n0, n1, n2 };
+
+ TestCounts(flags, counts, 3, numElements, pixels, floatPixels, preWeightedPixels, alphaTest, floatSortedInputs, pwFloatSortedInputs, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
+ }
+ }
+
+ TestSingleColor(flags, pixels, floatPixels, 3, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &rtn);
+ }
+ }
+ else
+ {
+ int minRange = alphaTest ? 3 : 4;
+
+ for (int range = minRange; range <= 4; range++)
+ {
+ int tweakRounds = BCCommon::TweakRoundsForRange(range);
+ if (tweakRounds > maxTweakRounds)
+ tweakRounds = maxTweakRounds;
+
+ for (int tweak = 0; tweak < tweakRounds; tweak++)
+ {
+ MUInt15 endPoints[2][3];
+
+ ufep.FinishLDR(tweak, range, endPoints[0], endPoints[1]);
+
+ for (int refine = 0; refine < numRefineRounds; refine++)
+ {
+ EndpointRefiner<3> refiner;
+ refiner.Init(range, channelWeights);
+
+ TestEndpoints(flags, pixels, floatPixels, preWeightedPixels, endPoints, range, channelWeights, bestError, bestEndpoints, bestIndexes, bestRange, &refiner, &rtn);
+
+ if (refine != numRefineRounds - 1)
+ refiner.GetRefinedEndpointsLDR(endPoints, &rtn);
+ }
+ }
+ }
+ }
+
+ for (int block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ ParallelMath::ScalarUInt16 range = ParallelMath::Extract(bestRange, block);
+ assert(range == 3 || range == 4);
+
+ ParallelMath::ScalarUInt16 compressedEP[2];
+ for (int ep = 0; ep < 2; ep++)
+ {
+ ParallelMath::ScalarUInt16 endPoint[3];
+ for (int ch = 0; ch < 3; ch++)
+ endPoint[ch] = ParallelMath::Extract(bestEndpoints[ep][ch], block);
+
+ int compressed = (endPoint[0] & 0xf8) << 8;
+ compressed |= (endPoint[1] & 0xfc) << 3;
+ compressed |= (endPoint[2] & 0xf8) >> 3;
+
+ compressedEP[ep] = static_cast<ParallelMath::ScalarUInt16>(compressed);
+ }
+
+ int indexOrder[4];
+
+ if (range == 4)
+ {
+ if (compressedEP[0] == compressedEP[1])
+ {
+ indexOrder[0] = 0;
+ indexOrder[1] = 0;
+ indexOrder[2] = 0;
+ indexOrder[3] = 0;
+ }
+ else if (compressedEP[0] < compressedEP[1])
+ {
+ std::swap(compressedEP[0], compressedEP[1]);
+ indexOrder[0] = 1;
+ indexOrder[1] = 3;
+ indexOrder[2] = 2;
+ indexOrder[3] = 0;
+ }
+ else
+ {
+ indexOrder[0] = 0;
+ indexOrder[1] = 2;
+ indexOrder[2] = 3;
+ indexOrder[3] = 1;
+ }
+ }
+ else
+ {
+ assert(range == 3);
+
+ if (compressedEP[0] > compressedEP[1])
+ {
+ std::swap(compressedEP[0], compressedEP[1]);
+ indexOrder[0] = 1;
+ indexOrder[1] = 2;
+ indexOrder[2] = 0;
+ }
+ else
+ {
+ indexOrder[0] = 0;
+ indexOrder[1] = 2;
+ indexOrder[2] = 1;
+ }
+ indexOrder[3] = 3;
+ }
+
+ packedBlocks[0] = static_cast<uint8_t>(compressedEP[0] & 0xff);
+ packedBlocks[1] = static_cast<uint8_t>((compressedEP[0] >> 8) & 0xff);
+ packedBlocks[2] = static_cast<uint8_t>(compressedEP[1] & 0xff);
+ packedBlocks[3] = static_cast<uint8_t>((compressedEP[1] >> 8) & 0xff);
+
+ for (int i = 0; i < 16; i += 4)
+ {
+ int packedIndexes = 0;
+ for (int subi = 0; subi < 4; subi++)
+ {
+ ParallelMath::ScalarUInt16 index = ParallelMath::Extract(bestIndexes[i + subi], block);
+ packedIndexes |= (indexOrder[index] << (subi * 2));
+ }
+
+ packedBlocks[4 + i / 4] = static_cast<uint8_t>(packedIndexes);
+ }
+
+ packedBlocks += packedBlockStride;
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_S3TC.h b/thirdparty/cvtt/ConvectionKernels_S3TC.h
new file mode 100644
index 0000000000..aa197229c2
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_S3TC.h
@@ -0,0 +1,51 @@
+#pragma once
+#ifndef __CVTT_S3TC_H__
+#define __CVTT_S3TC_H__
+
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ template<int TVectorSize>
+ class EndpointRefiner;
+ }
+
+ struct PixelBlockU8;
+}
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ class S3TCComputer
+ {
+ public:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+
+ static void Init(MFloat& error);
+ static void QuantizeTo6Bits(MUInt15& v);
+ static void QuantizeTo5Bits(MUInt15& v);
+ static void QuantizeTo565(MUInt15 endPoint[3]);
+ static MFloat ParanoidFactorForSpan(const MSInt16& span);
+ static MFloat ParanoidDiff(const MUInt15& a, const MUInt15& b, const MFloat& d);
+ static void TestSingleColor(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], int range, const float* channelWeights,
+ MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange, const ParallelMath::RoundTowardNearestForScope *rtn);
+ static void TestEndpoints(uint32_t flags, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const MFloat preWeightedPixels[16][4], const MUInt15 unquantizedEndPoints[2][3], int range, const float* channelWeights,
+ MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange, EndpointRefiner<3> *refiner, const ParallelMath::RoundTowardNearestForScope *rtn);
+ static void TestCounts(uint32_t flags, const int *counts, int nCounts, const MUInt15 &numElements, const MUInt15 pixels[16][4], const MFloat floatPixels[16][4], const MFloat preWeightedPixels[16][4], bool alphaTest,
+ const MFloat floatSortedInputs[16][4], const MFloat preWeightedFloatSortedInputs[16][4], const float *channelWeights, MFloat &bestError, MUInt15 bestEndpoints[2][3], MUInt15 bestIndexes[16], MUInt15 &bestRange,
+ const ParallelMath::RoundTowardNearestForScope* rtn);
+ static void PackExplicitAlpha(uint32_t flags, const PixelBlockU8* inputs, int inputChannel, uint8_t* packedBlocks, size_t packedBlockStride);
+ static void PackInterpolatedAlpha(uint32_t flags, const PixelBlockU8* inputs, int inputChannel, uint8_t* packedBlocks, size_t packedBlockStride, bool isSigned, int maxTweakRounds, int numRefineRounds);
+ static void PackRGB(uint32_t flags, const PixelBlockU8* inputs, uint8_t* packedBlocks, size_t packedBlockStride, const float channelWeights[4], bool alphaTest, float alphaThreshold, bool exhaustive, int maxTweakRounds, int numRefineRounds);
+ };
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_S3TC_SingleColor.h b/thirdparty/cvtt/ConvectionKernels_S3TC_SingleColor.h
new file mode 100644
index 0000000000..c772b163c2
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_S3TC_SingleColor.h
@@ -0,0 +1,304 @@
+#pragma once
+#include <stdint.h>
+
+// This file is generated by the MakeTables app. Do not edit this file manually.
+
+namespace cvtt { namespace Tables { namespace S3TCSC {
+
+struct TableEntry
+{
+ uint8_t m_min;
+ uint8_t m_max;
+ uint8_t m_actualColor;
+ uint8_t m_span;
+};
+
+TableEntry g_singleColor5_3[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 8, 2, 8 }, { 0, 8, 2, 8 }, { 8, 0, 5, 8 }, { 8, 0, 5, 8 }, { 8, 0, 5, 8 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 16, 10, 8 }, { 0, 33, 11, 33 }, { 16, 8, 13, 8 }, { 16, 8, 13, 8 }, { 16, 8, 13, 8 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 24, 18, 8 }, { 8, 41, 19, 33 }, { 24, 16, 21, 8 }, { 24, 16, 21, 8 }, { 33, 0, 22, 33 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 33, 27, 9 }, { 24, 33, 27, 9 }, { 24, 33, 27, 9 }, { 24, 41, 29, 17 }, { 33, 24, 30, 9 }, { 33, 24, 30, 9 },
+ { 24, 49, 32, 25 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 33, 41, 35, 8 }, { 33, 41, 35, 8 }, { 41, 33, 38, 8 }, { 41, 33, 38, 8 }, { 41, 33, 38, 8 },
+ { 49, 24, 40, 25 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 49, 43, 8 }, { 33, 66, 44, 33 }, { 49, 41, 46, 8 }, { 49, 41, 46, 8 }, { 49, 41, 46, 8 },
+ { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 57, 51, 8 }, { 41, 74, 52, 33 }, { 57, 49, 54, 8 }, { 57, 49, 54, 8 }, { 66, 33, 55, 33 },
+ { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 66, 60, 9 }, { 57, 66, 60, 9 }, { 57, 66, 60, 9 }, { 57, 74, 62, 17 }, { 66, 57, 63, 9 },
+ { 66, 57, 63, 9 }, { 57, 82, 65, 25 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 66, 74, 68, 8 }, { 66, 74, 68, 8 }, { 74, 66, 71, 8 }, { 74, 66, 71, 8 },
+ { 74, 66, 71, 8 }, { 82, 57, 73, 25 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 82, 76, 8 }, { 66, 99, 77, 33 }, { 82, 74, 79, 8 }, { 82, 74, 79, 8 },
+ { 82, 74, 79, 8 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 90, 84, 8 }, { 74, 107, 85, 33 }, { 90, 82, 87, 8 }, { 90, 82, 87, 8 },
+ { 99, 66, 88, 33 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 99, 93, 9 }, { 90, 99, 93, 9 }, { 90, 99, 93, 9 }, { 90, 107, 95, 17 },
+ { 99, 90, 96, 9 }, { 99, 90, 96, 9 }, { 90, 115, 98, 25 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 99, 107, 101, 8 }, { 99, 107, 101, 8 }, { 107, 99, 104, 8 },
+ { 107, 99, 104, 8 }, { 107, 99, 104, 8 }, { 115, 90, 106, 25 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 115, 109, 8 }, { 99, 132, 110, 33 }, { 115, 107, 112, 8 },
+ { 115, 107, 112, 8 }, { 115, 107, 112, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 123, 117, 8 }, { 107, 140, 118, 33 }, { 123, 115, 120, 8 },
+ { 123, 115, 120, 8 }, { 132, 99, 121, 33 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 132, 126, 9 }, { 123, 132, 126, 9 }, { 123, 132, 126, 9 },
+ { 123, 140, 128, 17 }, { 132, 123, 129, 9 }, { 132, 123, 129, 9 }, { 123, 148, 131, 25 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 132, 140, 134, 8 }, { 132, 140, 134, 8 },
+ { 140, 132, 137, 8 }, { 140, 132, 137, 8 }, { 140, 132, 137, 8 }, { 148, 123, 139, 25 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 148, 142, 8 }, { 132, 165, 143, 33 },
+ { 148, 140, 145, 8 }, { 148, 140, 145, 8 }, { 148, 140, 145, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 156, 150, 8 }, { 140, 173, 151, 33 },
+ { 156, 148, 153, 8 }, { 156, 148, 153, 8 }, { 165, 132, 154, 33 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 165, 159, 9 }, { 156, 165, 159, 9 },
+ { 156, 165, 159, 9 }, { 156, 173, 161, 17 }, { 165, 156, 162, 9 }, { 165, 156, 162, 9 }, { 156, 181, 164, 25 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 165, 173, 167, 8 },
+ { 165, 173, 167, 8 }, { 173, 165, 170, 8 }, { 173, 165, 170, 8 }, { 173, 165, 170, 8 }, { 181, 156, 172, 25 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 173, 181, 175, 8 },
+ { 165, 198, 176, 33 }, { 181, 173, 178, 8 }, { 181, 173, 178, 8 }, { 181, 173, 178, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 189, 183, 8 },
+ { 173, 206, 184, 33 }, { 189, 181, 186, 8 }, { 189, 181, 186, 8 }, { 198, 165, 187, 33 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 198, 192, 9 },
+ { 189, 198, 192, 9 }, { 189, 198, 192, 9 }, { 189, 206, 194, 17 }, { 198, 189, 195, 9 }, { 198, 189, 195, 9 }, { 189, 214, 197, 25 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
+ { 198, 206, 200, 8 }, { 198, 206, 200, 8 }, { 206, 198, 203, 8 }, { 206, 198, 203, 8 }, { 206, 198, 203, 8 }, { 214, 189, 205, 25 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
+ { 206, 214, 208, 8 }, { 198, 231, 209, 33 }, { 214, 206, 211, 8 }, { 214, 206, 211, 8 }, { 214, 206, 211, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
+ { 214, 222, 216, 8 }, { 206, 239, 217, 33 }, { 222, 214, 219, 8 }, { 222, 214, 219, 8 }, { 231, 198, 220, 33 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
+ { 222, 231, 225, 9 }, { 222, 231, 225, 9 }, { 222, 231, 225, 9 }, { 222, 239, 227, 17 }, { 231, 222, 228, 9 }, { 231, 222, 228, 9 }, { 222, 247, 230, 25 }, { 231, 231, 231, 0 },
+ { 231, 231, 231, 0 }, { 231, 239, 233, 8 }, { 231, 239, 233, 8 }, { 239, 231, 236, 8 }, { 239, 231, 236, 8 }, { 239, 231, 236, 8 }, { 247, 222, 238, 25 }, { 239, 239, 239, 0 },
+ { 239, 239, 239, 0 }, { 239, 247, 241, 8 }, { 239, 247, 241, 8 }, { 247, 239, 244, 8 }, { 247, 239, 244, 8 }, { 247, 239, 244, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 247, 247, 0 }, { 247, 255, 249, 8 }, { 247, 255, 249, 8 }, { 255, 247, 252, 8 }, { 255, 247, 252, 8 }, { 255, 247, 252, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor6_3[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 4, 1, 4 }, { 4, 0, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 8, 5, 4 }, { 8, 4, 6, 4 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 12, 9, 4 }, { 12, 8, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 16, 13, 4 }, { 16, 12, 14, 4 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 20, 17, 4 }, { 20, 16, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 24, 21, 4 }, { 24, 20, 22, 4 }, { 0, 69, 23, 69 },
+ { 24, 24, 24, 0 }, { 24, 28, 25, 4 }, { 28, 24, 26, 4 }, { 8, 65, 27, 57 }, { 28, 28, 28, 0 }, { 28, 32, 29, 4 }, { 32, 28, 30, 4 }, { 12, 69, 31, 57 },
+ { 32, 32, 32, 0 }, { 32, 36, 33, 4 }, { 36, 32, 34, 4 }, { 20, 65, 35, 45 }, { 36, 36, 36, 0 }, { 36, 40, 37, 4 }, { 40, 36, 38, 4 }, { 24, 69, 39, 45 },
+ { 40, 40, 40, 0 }, { 40, 44, 41, 4 }, { 44, 40, 42, 4 }, { 32, 65, 43, 33 }, { 44, 44, 44, 0 }, { 44, 48, 45, 4 }, { 48, 44, 46, 4 }, { 36, 69, 47, 33 },
+ { 48, 48, 48, 0 }, { 48, 52, 49, 4 }, { 52, 48, 50, 4 }, { 44, 65, 51, 21 }, { 52, 52, 52, 0 }, { 52, 56, 53, 4 }, { 56, 52, 54, 4 }, { 48, 69, 55, 21 },
+ { 56, 56, 56, 0 }, { 56, 60, 57, 4 }, { 60, 56, 58, 4 }, { 56, 65, 59, 9 }, { 60, 60, 60, 0 }, { 60, 65, 61, 5 }, { 65, 56, 62, 9 }, { 65, 60, 63, 5 },
+ { 60, 73, 64, 13 }, { 65, 65, 65, 0 }, { 65, 69, 66, 4 }, { 69, 65, 67, 4 }, { 73, 60, 68, 13 }, { 69, 69, 69, 0 }, { 69, 73, 70, 4 }, { 73, 69, 71, 4 },
+ { 81, 56, 72, 25 }, { 73, 73, 73, 0 }, { 73, 77, 74, 4 }, { 77, 73, 75, 4 }, { 85, 60, 76, 25 }, { 77, 77, 77, 0 }, { 77, 81, 78, 4 }, { 81, 77, 79, 4 },
+ { 93, 56, 80, 37 }, { 81, 81, 81, 0 }, { 81, 85, 82, 4 }, { 85, 81, 83, 4 }, { 97, 60, 84, 37 }, { 85, 85, 85, 0 }, { 85, 89, 86, 4 }, { 89, 85, 87, 4 },
+ { 105, 56, 88, 49 }, { 89, 89, 89, 0 }, { 89, 93, 90, 4 }, { 93, 89, 91, 4 }, { 109, 60, 92, 49 }, { 93, 93, 93, 0 }, { 93, 97, 94, 4 }, { 97, 93, 95, 4 },
+ { 77, 134, 96, 57 }, { 97, 97, 97, 0 }, { 97, 101, 98, 4 }, { 101, 97, 99, 4 }, { 85, 130, 100, 45 }, { 101, 101, 101, 0 }, { 101, 105, 102, 4 }, { 105, 101, 103, 4 },
+ { 89, 134, 104, 45 }, { 105, 105, 105, 0 }, { 105, 109, 106, 4 }, { 109, 105, 107, 4 }, { 97, 130, 108, 33 }, { 109, 109, 109, 0 }, { 109, 113, 110, 4 }, { 113, 109, 111, 4 },
+ { 101, 134, 112, 33 }, { 113, 113, 113, 0 }, { 113, 117, 114, 4 }, { 117, 113, 115, 4 }, { 109, 130, 116, 21 }, { 117, 117, 117, 0 }, { 117, 121, 118, 4 }, { 121, 117, 119, 4 },
+ { 113, 134, 120, 21 }, { 121, 121, 121, 0 }, { 121, 125, 122, 4 }, { 125, 121, 123, 4 }, { 121, 130, 124, 9 }, { 125, 125, 125, 0 }, { 125, 130, 126, 5 }, { 130, 121, 127, 9 },
+ { 130, 125, 128, 5 }, { 125, 138, 129, 13 }, { 130, 130, 130, 0 }, { 130, 134, 131, 4 }, { 134, 130, 132, 4 }, { 138, 125, 133, 13 }, { 134, 134, 134, 0 }, { 134, 138, 135, 4 },
+ { 138, 134, 136, 4 }, { 146, 121, 137, 25 }, { 138, 138, 138, 0 }, { 138, 142, 139, 4 }, { 142, 138, 140, 4 }, { 150, 125, 141, 25 }, { 142, 142, 142, 0 }, { 142, 146, 143, 4 },
+ { 146, 142, 144, 4 }, { 158, 121, 145, 37 }, { 146, 146, 146, 0 }, { 146, 150, 147, 4 }, { 150, 146, 148, 4 }, { 162, 125, 149, 37 }, { 150, 150, 150, 0 }, { 150, 154, 151, 4 },
+ { 154, 150, 152, 4 }, { 170, 121, 153, 49 }, { 154, 154, 154, 0 }, { 154, 158, 155, 4 }, { 158, 154, 156, 4 }, { 174, 125, 157, 49 }, { 158, 158, 158, 0 }, { 158, 162, 159, 4 },
+ { 162, 158, 160, 4 }, { 142, 199, 161, 57 }, { 162, 162, 162, 0 }, { 162, 166, 163, 4 }, { 166, 162, 164, 4 }, { 150, 195, 165, 45 }, { 166, 166, 166, 0 }, { 166, 170, 167, 4 },
+ { 170, 166, 168, 4 }, { 154, 199, 169, 45 }, { 170, 170, 170, 0 }, { 170, 174, 171, 4 }, { 174, 170, 172, 4 }, { 162, 195, 173, 33 }, { 174, 174, 174, 0 }, { 174, 178, 175, 4 },
+ { 178, 174, 176, 4 }, { 166, 199, 177, 33 }, { 178, 178, 178, 0 }, { 178, 182, 179, 4 }, { 182, 178, 180, 4 }, { 174, 195, 181, 21 }, { 182, 182, 182, 0 }, { 182, 186, 183, 4 },
+ { 186, 182, 184, 4 }, { 178, 199, 185, 21 }, { 186, 186, 186, 0 }, { 186, 190, 187, 4 }, { 190, 186, 188, 4 }, { 186, 195, 189, 9 }, { 190, 190, 190, 0 }, { 190, 195, 191, 5 },
+ { 195, 186, 192, 9 }, { 195, 190, 193, 5 }, { 190, 203, 194, 13 }, { 195, 195, 195, 0 }, { 195, 199, 196, 4 }, { 199, 195, 197, 4 }, { 203, 190, 198, 13 }, { 199, 199, 199, 0 },
+ { 199, 203, 200, 4 }, { 203, 199, 201, 4 }, { 211, 186, 202, 25 }, { 203, 203, 203, 0 }, { 203, 207, 204, 4 }, { 207, 203, 205, 4 }, { 215, 190, 206, 25 }, { 207, 207, 207, 0 },
+ { 207, 211, 208, 4 }, { 211, 207, 209, 4 }, { 223, 186, 210, 37 }, { 211, 211, 211, 0 }, { 211, 215, 212, 4 }, { 215, 211, 213, 4 }, { 227, 190, 214, 37 }, { 215, 215, 215, 0 },
+ { 215, 219, 216, 4 }, { 219, 215, 217, 4 }, { 235, 186, 218, 49 }, { 219, 219, 219, 0 }, { 219, 223, 220, 4 }, { 223, 219, 221, 4 }, { 239, 190, 222, 49 }, { 223, 223, 223, 0 },
+ { 223, 227, 224, 4 }, { 227, 223, 225, 4 }, { 247, 186, 226, 61 }, { 227, 227, 227, 0 }, { 227, 231, 228, 4 }, { 231, 227, 229, 4 }, { 251, 190, 230, 61 }, { 231, 231, 231, 0 },
+ { 231, 235, 232, 4 }, { 235, 231, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 239, 236, 4 }, { 239, 235, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
+ { 239, 243, 240, 4 }, { 243, 239, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 247, 244, 4 }, { 247, 243, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 251, 248, 4 }, { 251, 247, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 255, 252, 4 }, { 255, 251, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor5_2[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 41, 32, 17 },
+ { 24, 41, 32, 17 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 24, 49, 36, 25 }, { 24, 49, 36, 25 }, { 33, 41, 37, 8 }, { 33, 41, 37, 8 }, { 24, 57, 40, 33 },
+ { 24, 57, 40, 33 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 49, 49, 49, 0 },
+ { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 57, 57, 57, 0 },
+ { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 },
+ { 57, 74, 65, 17 }, { 57, 74, 65, 17 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 57, 82, 69, 25 }, { 57, 82, 69, 25 }, { 66, 74, 70, 8 }, { 66, 74, 70, 8 },
+ { 57, 90, 73, 33 }, { 57, 90, 73, 33 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 },
+ { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 },
+ { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 },
+ { 90, 99, 94, 9 }, { 90, 107, 98, 17 }, { 90, 107, 98, 17 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 90, 115, 102, 25 }, { 90, 115, 102, 25 }, { 99, 107, 103, 8 },
+ { 99, 107, 103, 8 }, { 90, 123, 106, 33 }, { 90, 123, 106, 33 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 115, 111, 8 }, { 107, 115, 111, 8 },
+ { 107, 115, 111, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 123, 119, 8 }, { 115, 123, 119, 8 },
+ { 115, 123, 119, 8 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 132, 127, 9 }, { 123, 132, 127, 9 },
+ { 123, 132, 127, 9 }, { 123, 132, 127, 9 }, { 123, 140, 131, 17 }, { 123, 140, 131, 17 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 123, 148, 135, 25 }, { 123, 148, 135, 25 },
+ { 132, 140, 136, 8 }, { 132, 140, 136, 8 }, { 123, 156, 139, 33 }, { 123, 156, 139, 33 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 148, 144, 8 },
+ { 140, 148, 144, 8 }, { 140, 148, 144, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 156, 152, 8 },
+ { 148, 156, 152, 8 }, { 148, 156, 152, 8 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 165, 160, 9 },
+ { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 173, 164, 17 }, { 156, 173, 164, 17 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 156, 181, 168, 25 },
+ { 156, 181, 168, 25 }, { 165, 173, 169, 8 }, { 165, 173, 169, 8 }, { 156, 189, 172, 33 }, { 156, 189, 172, 33 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 },
+ { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 },
+ { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 },
+ { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 206, 197, 17 }, { 189, 206, 197, 17 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
+ { 189, 214, 201, 25 }, { 189, 214, 201, 25 }, { 198, 206, 202, 8 }, { 198, 206, 202, 8 }, { 189, 222, 205, 33 }, { 189, 222, 205, 33 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
+ { 206, 206, 206, 0 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
+ { 214, 214, 214, 0 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
+ { 222, 222, 222, 0 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 239, 230, 17 }, { 222, 239, 230, 17 }, { 231, 231, 231, 0 },
+ { 231, 231, 231, 0 }, { 222, 247, 234, 25 }, { 222, 247, 234, 25 }, { 231, 239, 235, 8 }, { 231, 239, 235, 8 }, { 222, 255, 238, 33 }, { 222, 255, 238, 33 }, { 239, 239, 239, 0 },
+ { 239, 239, 239, 0 }, { 239, 239, 239, 0 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor6_2[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 4, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 8, 6, 4 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 12, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 16, 14, 4 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 20, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 24, 22, 4 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 28, 26, 4 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 32, 30, 4 }, { 32, 32, 32, 0 },
+ { 32, 32, 32, 0 }, { 32, 32, 32, 0 }, { 32, 36, 34, 4 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 40, 38, 4 }, { 40, 40, 40, 0 },
+ { 40, 40, 40, 0 }, { 40, 40, 40, 0 }, { 40, 44, 42, 4 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 48, 46, 4 }, { 48, 48, 48, 0 },
+ { 48, 48, 48, 0 }, { 48, 48, 48, 0 }, { 48, 52, 50, 4 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 56, 54, 4 }, { 56, 56, 56, 0 },
+ { 56, 56, 56, 0 }, { 56, 56, 56, 0 }, { 56, 60, 58, 4 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 65, 62, 5 }, { 60, 65, 62, 5 },
+ { 60, 69, 64, 9 }, { 65, 65, 65, 0 }, { 60, 73, 66, 13 }, { 65, 69, 67, 4 }, { 60, 77, 68, 17 }, { 69, 69, 69, 0 }, { 60, 81, 70, 21 }, { 69, 73, 71, 4 },
+ { 60, 85, 72, 25 }, { 73, 73, 73, 0 }, { 60, 89, 74, 29 }, { 73, 77, 75, 4 }, { 60, 93, 76, 33 }, { 77, 77, 77, 0 }, { 60, 97, 78, 37 }, { 77, 81, 79, 4 },
+ { 60, 101, 80, 41 }, { 81, 81, 81, 0 }, { 60, 105, 82, 45 }, { 81, 85, 83, 4 }, { 60, 109, 84, 49 }, { 85, 85, 85, 0 }, { 60, 113, 86, 53 }, { 85, 89, 87, 4 },
+ { 60, 117, 88, 57 }, { 89, 89, 89, 0 }, { 60, 121, 90, 61 }, { 89, 93, 91, 4 }, { 60, 125, 92, 65 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 97, 95, 4 },
+ { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 101, 99, 4 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 105, 103, 4 },
+ { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 109, 107, 4 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 113, 111, 4 },
+ { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 117, 115, 4 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 121, 119, 4 },
+ { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 125, 123, 4 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 130, 127, 5 },
+ { 125, 130, 127, 5 }, { 125, 134, 129, 9 }, { 130, 130, 130, 0 }, { 125, 138, 131, 13 }, { 130, 134, 132, 4 }, { 125, 142, 133, 17 }, { 134, 134, 134, 0 }, { 125, 146, 135, 21 },
+ { 134, 138, 136, 4 }, { 125, 150, 137, 25 }, { 138, 138, 138, 0 }, { 125, 154, 139, 29 }, { 138, 142, 140, 4 }, { 125, 158, 141, 33 }, { 142, 142, 142, 0 }, { 125, 162, 143, 37 },
+ { 142, 146, 144, 4 }, { 125, 166, 145, 41 }, { 146, 146, 146, 0 }, { 125, 170, 147, 45 }, { 146, 150, 148, 4 }, { 125, 174, 149, 49 }, { 150, 150, 150, 0 }, { 125, 178, 151, 53 },
+ { 150, 154, 152, 4 }, { 125, 182, 153, 57 }, { 154, 154, 154, 0 }, { 125, 186, 155, 61 }, { 154, 158, 156, 4 }, { 125, 190, 157, 65 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 },
+ { 158, 162, 160, 4 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 166, 164, 4 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 },
+ { 166, 170, 168, 4 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 174, 172, 4 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 },
+ { 174, 178, 176, 4 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 182, 180, 4 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 },
+ { 182, 186, 184, 4 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 190, 188, 4 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 },
+ { 190, 195, 192, 5 }, { 190, 195, 192, 5 }, { 190, 199, 194, 9 }, { 195, 195, 195, 0 }, { 190, 203, 196, 13 }, { 195, 199, 197, 4 }, { 190, 207, 198, 17 }, { 199, 199, 199, 0 },
+ { 190, 211, 200, 21 }, { 199, 203, 201, 4 }, { 190, 215, 202, 25 }, { 203, 203, 203, 0 }, { 190, 219, 204, 29 }, { 203, 207, 205, 4 }, { 190, 223, 206, 33 }, { 207, 207, 207, 0 },
+ { 190, 227, 208, 37 }, { 207, 211, 209, 4 }, { 190, 231, 210, 41 }, { 211, 211, 211, 0 }, { 190, 235, 212, 45 }, { 211, 215, 213, 4 }, { 190, 239, 214, 49 }, { 215, 215, 215, 0 },
+ { 190, 243, 216, 53 }, { 215, 219, 217, 4 }, { 190, 247, 218, 57 }, { 219, 219, 219, 0 }, { 190, 251, 220, 61 }, { 219, 223, 221, 4 }, { 190, 255, 222, 65 }, { 223, 223, 223, 0 },
+ { 223, 223, 223, 0 }, { 223, 227, 225, 4 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 231, 229, 4 }, { 231, 231, 231, 0 }, { 231, 231, 231, 0 },
+ { 231, 231, 231, 0 }, { 231, 235, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 239, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
+ { 239, 239, 239, 0 }, { 239, 243, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 247, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 247, 247, 0 }, { 247, 251, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 255, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor5_3_p[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 8, 2, 8 }, { 0, 8, 2, 8 }, { 8, 0, 5, 8 }, { 8, 0, 5, 8 }, { 8, 0, 5, 8 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 16, 10, 8 }, { 0, 33, 11, 33 }, { 16, 8, 13, 8 }, { 16, 8, 13, 8 }, { 16, 8, 13, 8 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 24, 18, 8 }, { 8, 41, 19, 33 }, { 24, 16, 21, 8 }, { 24, 16, 21, 8 }, { 33, 0, 22, 33 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 33, 27, 9 }, { 24, 33, 27, 9 }, { 24, 33, 27, 9 }, { 24, 41, 29, 17 }, { 33, 24, 30, 9 }, { 33, 24, 30, 9 },
+ { 24, 49, 32, 25 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 33, 41, 35, 8 }, { 33, 41, 35, 8 }, { 41, 33, 38, 8 }, { 41, 33, 38, 8 }, { 41, 33, 38, 8 },
+ { 49, 24, 40, 25 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 49, 43, 8 }, { 33, 66, 44, 33 }, { 49, 41, 46, 8 }, { 49, 41, 46, 8 }, { 49, 41, 46, 8 },
+ { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 57, 51, 8 }, { 41, 74, 52, 33 }, { 57, 49, 54, 8 }, { 57, 49, 54, 8 }, { 66, 33, 55, 33 },
+ { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 66, 60, 9 }, { 57, 66, 60, 9 }, { 57, 66, 60, 9 }, { 57, 74, 62, 17 }, { 66, 57, 63, 9 },
+ { 66, 57, 63, 9 }, { 57, 82, 65, 25 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 66, 74, 68, 8 }, { 66, 74, 68, 8 }, { 74, 66, 71, 8 }, { 74, 66, 71, 8 },
+ { 74, 66, 71, 8 }, { 82, 57, 73, 25 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 82, 76, 8 }, { 66, 99, 77, 33 }, { 82, 74, 79, 8 }, { 82, 74, 79, 8 },
+ { 82, 74, 79, 8 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 90, 84, 8 }, { 74, 107, 85, 33 }, { 90, 82, 87, 8 }, { 90, 82, 87, 8 },
+ { 99, 66, 88, 33 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 99, 93, 9 }, { 90, 99, 93, 9 }, { 90, 99, 93, 9 }, { 90, 107, 95, 17 },
+ { 99, 90, 96, 9 }, { 99, 90, 96, 9 }, { 90, 115, 98, 25 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 99, 107, 101, 8 }, { 99, 107, 101, 8 }, { 107, 99, 104, 8 },
+ { 107, 99, 104, 8 }, { 107, 99, 104, 8 }, { 115, 90, 106, 25 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 115, 109, 8 }, { 99, 132, 110, 33 }, { 115, 107, 112, 8 },
+ { 115, 107, 112, 8 }, { 115, 107, 112, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 123, 117, 8 }, { 107, 140, 118, 33 }, { 123, 115, 120, 8 },
+ { 123, 115, 120, 8 }, { 132, 99, 121, 33 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 132, 126, 9 }, { 123, 132, 126, 9 }, { 123, 132, 126, 9 },
+ { 123, 140, 128, 17 }, { 132, 123, 129, 9 }, { 132, 123, 129, 9 }, { 123, 148, 131, 25 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 132, 140, 134, 8 }, { 132, 140, 134, 8 },
+ { 140, 132, 137, 8 }, { 140, 132, 137, 8 }, { 140, 132, 137, 8 }, { 148, 123, 139, 25 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 148, 142, 8 }, { 132, 165, 143, 33 },
+ { 148, 140, 145, 8 }, { 148, 140, 145, 8 }, { 148, 140, 145, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 156, 150, 8 }, { 140, 173, 151, 33 },
+ { 156, 148, 153, 8 }, { 156, 148, 153, 8 }, { 165, 132, 154, 33 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 165, 159, 9 }, { 156, 165, 159, 9 },
+ { 156, 165, 159, 9 }, { 156, 173, 161, 17 }, { 165, 156, 162, 9 }, { 165, 156, 162, 9 }, { 156, 181, 164, 25 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 165, 173, 167, 8 },
+ { 165, 173, 167, 8 }, { 173, 165, 170, 8 }, { 173, 165, 170, 8 }, { 173, 165, 170, 8 }, { 181, 156, 172, 25 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 173, 181, 175, 8 },
+ { 165, 198, 176, 33 }, { 181, 173, 178, 8 }, { 181, 173, 178, 8 }, { 181, 173, 178, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 189, 183, 8 },
+ { 173, 206, 184, 33 }, { 189, 181, 186, 8 }, { 189, 181, 186, 8 }, { 198, 165, 187, 33 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 198, 192, 9 },
+ { 189, 198, 192, 9 }, { 189, 198, 192, 9 }, { 189, 206, 194, 17 }, { 198, 189, 195, 9 }, { 198, 189, 195, 9 }, { 189, 214, 197, 25 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
+ { 198, 206, 200, 8 }, { 198, 206, 200, 8 }, { 206, 198, 203, 8 }, { 206, 198, 203, 8 }, { 206, 198, 203, 8 }, { 214, 189, 205, 25 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
+ { 206, 214, 208, 8 }, { 198, 231, 209, 33 }, { 214, 206, 211, 8 }, { 214, 206, 211, 8 }, { 214, 206, 211, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
+ { 214, 222, 216, 8 }, { 206, 239, 217, 33 }, { 222, 214, 219, 8 }, { 222, 214, 219, 8 }, { 231, 198, 220, 33 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
+ { 222, 231, 225, 9 }, { 222, 231, 225, 9 }, { 222, 231, 225, 9 }, { 222, 239, 227, 17 }, { 231, 222, 228, 9 }, { 231, 222, 228, 9 }, { 222, 247, 230, 25 }, { 231, 231, 231, 0 },
+ { 231, 231, 231, 0 }, { 231, 239, 233, 8 }, { 231, 239, 233, 8 }, { 239, 231, 236, 8 }, { 239, 231, 236, 8 }, { 239, 231, 236, 8 }, { 247, 222, 238, 25 }, { 239, 239, 239, 0 },
+ { 239, 239, 239, 0 }, { 239, 247, 241, 8 }, { 239, 247, 241, 8 }, { 247, 239, 244, 8 }, { 247, 239, 244, 8 }, { 247, 239, 244, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 247, 247, 0 }, { 247, 255, 249, 8 }, { 247, 255, 249, 8 }, { 255, 247, 252, 8 }, { 255, 247, 252, 8 }, { 255, 247, 252, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor6_3_p[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 4, 1, 4 }, { 4, 0, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 8, 5, 4 }, { 8, 4, 6, 4 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 12, 9, 4 }, { 12, 8, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 16, 13, 4 }, { 16, 12, 14, 4 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 20, 17, 4 }, { 20, 16, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 24, 21, 4 }, { 24, 20, 22, 4 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 28, 25, 4 }, { 28, 24, 26, 4 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 32, 29, 4 }, { 32, 28, 30, 4 }, { 32, 32, 32, 0 },
+ { 32, 32, 32, 0 }, { 32, 36, 33, 4 }, { 36, 32, 34, 4 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 40, 37, 4 }, { 40, 36, 38, 4 }, { 40, 40, 40, 0 },
+ { 40, 40, 40, 0 }, { 40, 44, 41, 4 }, { 44, 40, 42, 4 }, { 32, 65, 43, 33 }, { 44, 44, 44, 0 }, { 44, 48, 45, 4 }, { 48, 44, 46, 4 }, { 36, 69, 47, 33 },
+ { 48, 48, 48, 0 }, { 48, 52, 49, 4 }, { 52, 48, 50, 4 }, { 44, 65, 51, 21 }, { 52, 52, 52, 0 }, { 52, 56, 53, 4 }, { 56, 52, 54, 4 }, { 48, 69, 55, 21 },
+ { 56, 56, 56, 0 }, { 56, 60, 57, 4 }, { 60, 56, 58, 4 }, { 56, 65, 59, 9 }, { 60, 60, 60, 0 }, { 60, 65, 61, 5 }, { 65, 56, 62, 9 }, { 65, 60, 63, 5 },
+ { 60, 73, 64, 13 }, { 65, 65, 65, 0 }, { 65, 69, 66, 4 }, { 69, 65, 67, 4 }, { 73, 60, 68, 13 }, { 69, 69, 69, 0 }, { 69, 73, 70, 4 }, { 73, 69, 71, 4 },
+ { 81, 56, 72, 25 }, { 73, 73, 73, 0 }, { 73, 77, 74, 4 }, { 77, 73, 75, 4 }, { 85, 60, 76, 25 }, { 77, 77, 77, 0 }, { 77, 81, 78, 4 }, { 81, 77, 79, 4 },
+ { 81, 81, 81, 0 }, { 81, 81, 81, 0 }, { 81, 85, 82, 4 }, { 85, 81, 83, 4 }, { 85, 85, 85, 0 }, { 85, 85, 85, 0 }, { 85, 89, 86, 4 }, { 89, 85, 87, 4 },
+ { 89, 89, 89, 0 }, { 89, 89, 89, 0 }, { 89, 93, 90, 4 }, { 93, 89, 91, 4 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 97, 94, 4 }, { 97, 93, 95, 4 },
+ { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 101, 98, 4 }, { 101, 97, 99, 4 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 105, 102, 4 }, { 105, 101, 103, 4 },
+ { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 109, 106, 4 }, { 109, 105, 107, 4 }, { 97, 130, 108, 33 }, { 109, 109, 109, 0 }, { 109, 113, 110, 4 }, { 113, 109, 111, 4 },
+ { 101, 134, 112, 33 }, { 113, 113, 113, 0 }, { 113, 117, 114, 4 }, { 117, 113, 115, 4 }, { 109, 130, 116, 21 }, { 117, 117, 117, 0 }, { 117, 121, 118, 4 }, { 121, 117, 119, 4 },
+ { 113, 134, 120, 21 }, { 121, 121, 121, 0 }, { 121, 125, 122, 4 }, { 125, 121, 123, 4 }, { 121, 130, 124, 9 }, { 125, 125, 125, 0 }, { 125, 130, 126, 5 }, { 130, 121, 127, 9 },
+ { 130, 125, 128, 5 }, { 125, 138, 129, 13 }, { 130, 130, 130, 0 }, { 130, 134, 131, 4 }, { 134, 130, 132, 4 }, { 138, 125, 133, 13 }, { 134, 134, 134, 0 }, { 134, 138, 135, 4 },
+ { 138, 134, 136, 4 }, { 146, 121, 137, 25 }, { 138, 138, 138, 0 }, { 138, 142, 139, 4 }, { 142, 138, 140, 4 }, { 150, 125, 141, 25 }, { 142, 142, 142, 0 }, { 142, 146, 143, 4 },
+ { 146, 142, 144, 4 }, { 146, 146, 146, 0 }, { 146, 146, 146, 0 }, { 146, 150, 147, 4 }, { 150, 146, 148, 4 }, { 150, 150, 150, 0 }, { 150, 150, 150, 0 }, { 150, 154, 151, 4 },
+ { 154, 150, 152, 4 }, { 154, 154, 154, 0 }, { 154, 154, 154, 0 }, { 154, 158, 155, 4 }, { 158, 154, 156, 4 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 }, { 158, 162, 159, 4 },
+ { 162, 158, 160, 4 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 166, 163, 4 }, { 166, 162, 164, 4 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 }, { 166, 170, 167, 4 },
+ { 170, 166, 168, 4 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 174, 171, 4 }, { 174, 170, 172, 4 }, { 162, 195, 173, 33 }, { 174, 174, 174, 0 }, { 174, 178, 175, 4 },
+ { 178, 174, 176, 4 }, { 166, 199, 177, 33 }, { 178, 178, 178, 0 }, { 178, 182, 179, 4 }, { 182, 178, 180, 4 }, { 174, 195, 181, 21 }, { 182, 182, 182, 0 }, { 182, 186, 183, 4 },
+ { 186, 182, 184, 4 }, { 178, 199, 185, 21 }, { 186, 186, 186, 0 }, { 186, 190, 187, 4 }, { 190, 186, 188, 4 }, { 186, 195, 189, 9 }, { 190, 190, 190, 0 }, { 190, 195, 191, 5 },
+ { 195, 186, 192, 9 }, { 195, 190, 193, 5 }, { 190, 203, 194, 13 }, { 195, 195, 195, 0 }, { 195, 199, 196, 4 }, { 199, 195, 197, 4 }, { 203, 190, 198, 13 }, { 199, 199, 199, 0 },
+ { 199, 203, 200, 4 }, { 203, 199, 201, 4 }, { 211, 186, 202, 25 }, { 203, 203, 203, 0 }, { 203, 207, 204, 4 }, { 207, 203, 205, 4 }, { 215, 190, 206, 25 }, { 207, 207, 207, 0 },
+ { 207, 211, 208, 4 }, { 211, 207, 209, 4 }, { 211, 211, 211, 0 }, { 211, 211, 211, 0 }, { 211, 215, 212, 4 }, { 215, 211, 213, 4 }, { 215, 215, 215, 0 }, { 215, 215, 215, 0 },
+ { 215, 219, 216, 4 }, { 219, 215, 217, 4 }, { 219, 219, 219, 0 }, { 219, 219, 219, 0 }, { 219, 223, 220, 4 }, { 223, 219, 221, 4 }, { 223, 223, 223, 0 }, { 223, 223, 223, 0 },
+ { 223, 227, 224, 4 }, { 227, 223, 225, 4 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 231, 228, 4 }, { 231, 227, 229, 4 }, { 231, 231, 231, 0 }, { 231, 231, 231, 0 },
+ { 231, 235, 232, 4 }, { 235, 231, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 239, 236, 4 }, { 239, 235, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
+ { 239, 243, 240, 4 }, { 243, 239, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 247, 244, 4 }, { 247, 243, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 251, 248, 4 }, { 251, 247, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 255, 252, 4 }, { 255, 251, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor5_2_p[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 0, 8, 4, 8 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 8, 16, 12, 8 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 16, 24, 20, 8 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 33, 28, 9 }, { 24, 41, 32, 17 },
+ { 24, 41, 32, 17 }, { 33, 33, 33, 0 }, { 33, 33, 33, 0 }, { 24, 49, 36, 25 }, { 24, 49, 36, 25 }, { 33, 41, 37, 8 }, { 33, 41, 37, 8 }, { 24, 57, 40, 33 },
+ { 24, 57, 40, 33 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 41, 41, 0 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 41, 49, 45, 8 }, { 49, 49, 49, 0 },
+ { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 49, 49, 0 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 49, 57, 53, 8 }, { 57, 57, 57, 0 },
+ { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 57, 57, 0 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 }, { 57, 66, 61, 9 },
+ { 57, 74, 65, 17 }, { 57, 74, 65, 17 }, { 66, 66, 66, 0 }, { 66, 66, 66, 0 }, { 57, 82, 69, 25 }, { 57, 82, 69, 25 }, { 66, 74, 70, 8 }, { 66, 74, 70, 8 },
+ { 57, 90, 73, 33 }, { 57, 90, 73, 33 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 74, 74, 0 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 }, { 74, 82, 78, 8 },
+ { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 82, 82, 0 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 }, { 82, 90, 86, 8 },
+ { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 90, 90, 0 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 }, { 90, 99, 94, 9 },
+ { 90, 99, 94, 9 }, { 90, 107, 98, 17 }, { 90, 107, 98, 17 }, { 99, 99, 99, 0 }, { 99, 99, 99, 0 }, { 90, 115, 102, 25 }, { 90, 115, 102, 25 }, { 99, 107, 103, 8 },
+ { 99, 107, 103, 8 }, { 90, 123, 106, 33 }, { 90, 123, 106, 33 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 107, 107, 0 }, { 107, 115, 111, 8 }, { 107, 115, 111, 8 },
+ { 107, 115, 111, 8 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 115, 115, 0 }, { 115, 123, 119, 8 }, { 115, 123, 119, 8 },
+ { 115, 123, 119, 8 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 123, 123, 0 }, { 123, 132, 127, 9 }, { 123, 132, 127, 9 },
+ { 123, 132, 127, 9 }, { 123, 132, 127, 9 }, { 123, 140, 131, 17 }, { 123, 140, 131, 17 }, { 132, 132, 132, 0 }, { 132, 132, 132, 0 }, { 123, 148, 135, 25 }, { 123, 148, 135, 25 },
+ { 132, 140, 136, 8 }, { 132, 140, 136, 8 }, { 123, 156, 139, 33 }, { 123, 156, 139, 33 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 140, 140, 0 }, { 140, 148, 144, 8 },
+ { 140, 148, 144, 8 }, { 140, 148, 144, 8 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 148, 148, 0 }, { 148, 156, 152, 8 },
+ { 148, 156, 152, 8 }, { 148, 156, 152, 8 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 156, 156, 0 }, { 156, 165, 160, 9 },
+ { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 165, 160, 9 }, { 156, 173, 164, 17 }, { 156, 173, 164, 17 }, { 165, 165, 165, 0 }, { 165, 165, 165, 0 }, { 156, 181, 168, 25 },
+ { 156, 181, 168, 25 }, { 165, 173, 169, 8 }, { 165, 173, 169, 8 }, { 156, 189, 172, 33 }, { 156, 189, 172, 33 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 }, { 173, 173, 173, 0 },
+ { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 173, 181, 177, 8 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 }, { 181, 181, 181, 0 },
+ { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 181, 189, 185, 8 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 }, { 189, 189, 189, 0 },
+ { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 198, 193, 9 }, { 189, 206, 197, 17 }, { 189, 206, 197, 17 }, { 198, 198, 198, 0 }, { 198, 198, 198, 0 },
+ { 189, 214, 201, 25 }, { 189, 214, 201, 25 }, { 198, 206, 202, 8 }, { 198, 206, 202, 8 }, { 189, 222, 205, 33 }, { 189, 222, 205, 33 }, { 206, 206, 206, 0 }, { 206, 206, 206, 0 },
+ { 206, 206, 206, 0 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 206, 214, 210, 8 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 }, { 214, 214, 214, 0 },
+ { 214, 214, 214, 0 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 214, 222, 218, 8 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 }, { 222, 222, 222, 0 },
+ { 222, 222, 222, 0 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 231, 226, 9 }, { 222, 239, 230, 17 }, { 222, 239, 230, 17 }, { 231, 231, 231, 0 },
+ { 231, 231, 231, 0 }, { 222, 247, 234, 25 }, { 222, 247, 234, 25 }, { 231, 239, 235, 8 }, { 231, 239, 235, 8 }, { 222, 255, 238, 33 }, { 222, 255, 238, 33 }, { 239, 239, 239, 0 },
+ { 239, 239, 239, 0 }, { 239, 239, 239, 0 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 239, 247, 243, 8 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 247, 247, 0 }, { 247, 247, 247, 0 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 247, 255, 251, 8 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+TableEntry g_singleColor6_2_p[256] =
+{
+ { 0, 0, 0, 0 }, { 0, 0, 0, 0 }, { 0, 4, 2, 4 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 4, 4, 0 }, { 4, 8, 6, 4 }, { 8, 8, 8, 0 },
+ { 8, 8, 8, 0 }, { 8, 8, 8, 0 }, { 8, 12, 10, 4 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 12, 12, 0 }, { 12, 16, 14, 4 }, { 16, 16, 16, 0 },
+ { 16, 16, 16, 0 }, { 16, 16, 16, 0 }, { 16, 20, 18, 4 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 20, 20, 0 }, { 20, 24, 22, 4 }, { 24, 24, 24, 0 },
+ { 24, 24, 24, 0 }, { 24, 24, 24, 0 }, { 24, 28, 26, 4 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 28, 28, 0 }, { 28, 32, 30, 4 }, { 32, 32, 32, 0 },
+ { 32, 32, 32, 0 }, { 32, 32, 32, 0 }, { 32, 36, 34, 4 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 36, 36, 0 }, { 36, 40, 38, 4 }, { 40, 40, 40, 0 },
+ { 40, 40, 40, 0 }, { 40, 40, 40, 0 }, { 40, 44, 42, 4 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 44, 44, 0 }, { 44, 48, 46, 4 }, { 48, 48, 48, 0 },
+ { 48, 48, 48, 0 }, { 48, 48, 48, 0 }, { 48, 52, 50, 4 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 52, 52, 0 }, { 52, 56, 54, 4 }, { 56, 56, 56, 0 },
+ { 56, 56, 56, 0 }, { 56, 56, 56, 0 }, { 56, 60, 58, 4 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 60, 60, 0 }, { 60, 65, 62, 5 }, { 60, 65, 62, 5 },
+ { 60, 69, 64, 9 }, { 65, 65, 65, 0 }, { 60, 73, 66, 13 }, { 65, 69, 67, 4 }, { 60, 77, 68, 17 }, { 69, 69, 69, 0 }, { 60, 81, 70, 21 }, { 69, 73, 71, 4 },
+ { 60, 85, 72, 25 }, { 73, 73, 73, 0 }, { 60, 89, 74, 29 }, { 73, 77, 75, 4 }, { 60, 93, 76, 33 }, { 77, 77, 77, 0 }, { 77, 77, 77, 0 }, { 77, 81, 79, 4 },
+ { 81, 81, 81, 0 }, { 81, 81, 81, 0 }, { 81, 81, 81, 0 }, { 81, 85, 83, 4 }, { 85, 85, 85, 0 }, { 85, 85, 85, 0 }, { 85, 85, 85, 0 }, { 85, 89, 87, 4 },
+ { 89, 89, 89, 0 }, { 89, 89, 89, 0 }, { 89, 89, 89, 0 }, { 89, 93, 91, 4 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 93, 93, 0 }, { 93, 97, 95, 4 },
+ { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 97, 97, 0 }, { 97, 101, 99, 4 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 101, 101, 0 }, { 101, 105, 103, 4 },
+ { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 105, 105, 0 }, { 105, 109, 107, 4 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 109, 109, 0 }, { 109, 113, 111, 4 },
+ { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 113, 113, 0 }, { 113, 117, 115, 4 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 117, 117, 0 }, { 117, 121, 119, 4 },
+ { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 121, 121, 0 }, { 121, 125, 123, 4 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 125, 125, 0 }, { 125, 130, 127, 5 },
+ { 125, 130, 127, 5 }, { 125, 134, 129, 9 }, { 130, 130, 130, 0 }, { 125, 138, 131, 13 }, { 130, 134, 132, 4 }, { 125, 142, 133, 17 }, { 134, 134, 134, 0 }, { 125, 146, 135, 21 },
+ { 134, 138, 136, 4 }, { 125, 150, 137, 25 }, { 138, 138, 138, 0 }, { 125, 154, 139, 29 }, { 138, 142, 140, 4 }, { 125, 158, 141, 33 }, { 142, 142, 142, 0 }, { 142, 142, 142, 0 },
+ { 142, 146, 144, 4 }, { 146, 146, 146, 0 }, { 146, 146, 146, 0 }, { 146, 146, 146, 0 }, { 146, 150, 148, 4 }, { 150, 150, 150, 0 }, { 150, 150, 150, 0 }, { 150, 150, 150, 0 },
+ { 150, 154, 152, 4 }, { 154, 154, 154, 0 }, { 154, 154, 154, 0 }, { 154, 154, 154, 0 }, { 154, 158, 156, 4 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 }, { 158, 158, 158, 0 },
+ { 158, 162, 160, 4 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 162, 162, 0 }, { 162, 166, 164, 4 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 }, { 166, 166, 166, 0 },
+ { 166, 170, 168, 4 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 170, 170, 0 }, { 170, 174, 172, 4 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 }, { 174, 174, 174, 0 },
+ { 174, 178, 176, 4 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 178, 178, 0 }, { 178, 182, 180, 4 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 }, { 182, 182, 182, 0 },
+ { 182, 186, 184, 4 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 186, 186, 0 }, { 186, 190, 188, 4 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 }, { 190, 190, 190, 0 },
+ { 190, 195, 192, 5 }, { 190, 195, 192, 5 }, { 190, 199, 194, 9 }, { 195, 195, 195, 0 }, { 190, 203, 196, 13 }, { 195, 199, 197, 4 }, { 190, 207, 198, 17 }, { 199, 199, 199, 0 },
+ { 190, 211, 200, 21 }, { 199, 203, 201, 4 }, { 190, 215, 202, 25 }, { 203, 203, 203, 0 }, { 190, 219, 204, 29 }, { 203, 207, 205, 4 }, { 190, 223, 206, 33 }, { 207, 207, 207, 0 },
+ { 207, 207, 207, 0 }, { 207, 211, 209, 4 }, { 211, 211, 211, 0 }, { 211, 211, 211, 0 }, { 211, 211, 211, 0 }, { 211, 215, 213, 4 }, { 215, 215, 215, 0 }, { 215, 215, 215, 0 },
+ { 215, 215, 215, 0 }, { 215, 219, 217, 4 }, { 219, 219, 219, 0 }, { 219, 219, 219, 0 }, { 219, 219, 219, 0 }, { 219, 223, 221, 4 }, { 223, 223, 223, 0 }, { 223, 223, 223, 0 },
+ { 223, 223, 223, 0 }, { 223, 227, 225, 4 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 227, 227, 0 }, { 227, 231, 229, 4 }, { 231, 231, 231, 0 }, { 231, 231, 231, 0 },
+ { 231, 231, 231, 0 }, { 231, 235, 233, 4 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 235, 235, 0 }, { 235, 239, 237, 4 }, { 239, 239, 239, 0 }, { 239, 239, 239, 0 },
+ { 239, 239, 239, 0 }, { 239, 243, 241, 4 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 243, 243, 0 }, { 243, 247, 245, 4 }, { 247, 247, 247, 0 }, { 247, 247, 247, 0 },
+ { 247, 247, 247, 0 }, { 247, 251, 249, 4 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 251, 251, 0 }, { 251, 255, 253, 4 }, { 255, 255, 255, 0 }, { 255, 255, 255, 0 },
+};
+
+}}}
diff --git a/thirdparty/cvtt/ConvectionKernels_SingleFile.cpp b/thirdparty/cvtt/ConvectionKernels_SingleFile.cpp
new file mode 100644
index 0000000000..ad59988655
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_SingleFile.cpp
@@ -0,0 +1,48 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if defined(CVTT_SINGLE_FILE)
+#define CVTT_SINGLE_FILE_IMPL
+
+#include "ConvectionKernels_API.cpp"
+#include "ConvectionKernels_BC67.cpp"
+#include "ConvectionKernels_BC6H_IO.cpp"
+#include "ConvectionKernels_BC7_PrioData.cpp"
+#include "ConvectionKernels_BCCommon.cpp"
+#include "ConvectionKernels_ETC.cpp"
+#include "ConvectionKernels_IndexSelector.cpp"
+#include "ConvectionKernels_S3TC.cpp"
+#include "ConvectionKernels_Util.cpp"
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_UnfinishedEndpoints.h b/thirdparty/cvtt/ConvectionKernels_UnfinishedEndpoints.h
new file mode 100644
index 0000000000..371cbe54bf
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_UnfinishedEndpoints.h
@@ -0,0 +1,121 @@
+#pragma once
+
+#include "ConvectionKernels_Util.h"
+
+namespace cvtt
+{
+ namespace Internal
+ {
+ template<int TVectorSize>
+ class UnfinishedEndpoints
+ {
+ public:
+ typedef ParallelMath::Float MFloat;
+ typedef ParallelMath::UInt16 MUInt16;
+ typedef ParallelMath::UInt15 MUInt15;
+ typedef ParallelMath::SInt16 MSInt16;
+ typedef ParallelMath::SInt32 MSInt32;
+
+ UnfinishedEndpoints()
+ {
+ }
+
+ UnfinishedEndpoints(const MFloat *base, const MFloat *offset)
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_base[ch] = base[ch];
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_offset[ch] = offset[ch];
+ }
+
+ UnfinishedEndpoints(const UnfinishedEndpoints& other)
+ {
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_base[ch] = other.m_base[ch];
+ for (int ch = 0; ch < TVectorSize; ch++)
+ m_offset[ch] = other.m_offset[ch];
+ }
+
+ void FinishHDRUnsigned(int tweak, int range, MSInt16 *outEP0, MSInt16 *outEP1, ParallelMath::RoundTowardNearestForScope *roundingMode)
+ {
+ float tweakFactors[2];
+ Util::ComputeTweakFactors(tweak, range, tweakFactors);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MUInt15 channelEPs[2];
+ for (int epi = 0; epi < 2; epi++)
+ {
+ MFloat f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[epi], 0.0f, 31743.0f);
+ channelEPs[epi] = ParallelMath::RoundAndConvertToU15(f, roundingMode);
+ }
+
+ outEP0[ch] = ParallelMath::LosslessCast<MSInt16>::Cast(channelEPs[0]);
+ outEP1[ch] = ParallelMath::LosslessCast<MSInt16>::Cast(channelEPs[1]);
+ }
+ }
+
+ void FinishHDRSigned(int tweak, int range, MSInt16* outEP0, MSInt16* outEP1, ParallelMath::RoundTowardNearestForScope* roundingMode)
+ {
+ float tweakFactors[2];
+ Util::ComputeTweakFactors(tweak, range, tweakFactors);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MSInt16 channelEPs[2];
+ for (int epi = 0; epi < 2; epi++)
+ {
+ MFloat f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[epi], -31743.0f, 31743.0f);
+ channelEPs[epi] = ParallelMath::RoundAndConvertToS16(f, roundingMode);
+ }
+
+ outEP0[ch] = channelEPs[0];
+ outEP1[ch] = channelEPs[1];
+ }
+ }
+
+ void FinishLDR(int tweak, int range, MUInt15* outEP0, MUInt15* outEP1)
+ {
+ ParallelMath::RoundTowardNearestForScope roundingMode;
+
+ float tweakFactors[2];
+ Util::ComputeTweakFactors(tweak, range, tweakFactors);
+
+ for (int ch = 0; ch < TVectorSize; ch++)
+ {
+ MFloat ep0f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[0], 0.0f, 255.0f);
+ MFloat ep1f = ParallelMath::Clamp(m_base[ch] + m_offset[ch] * tweakFactors[1], 0.0f, 255.0f);
+ outEP0[ch] = ParallelMath::RoundAndConvertToU15(ep0f, &roundingMode);
+ outEP1[ch] = ParallelMath::RoundAndConvertToU15(ep1f, &roundingMode);
+ }
+ }
+
+ template<int TNewVectorSize>
+ UnfinishedEndpoints<TNewVectorSize> ExpandTo(float filler)
+ {
+ MFloat newBase[TNewVectorSize];
+ MFloat newOffset[TNewVectorSize];
+
+ for (int ch = 0; ch < TNewVectorSize && ch < TVectorSize; ch++)
+ {
+ newBase[ch] = m_base[ch];
+ newOffset[ch] = m_offset[ch];
+ }
+
+ MFloat fillerV = ParallelMath::MakeFloat(filler);
+
+ for (int ch = TVectorSize; ch < TNewVectorSize; ch++)
+ {
+ newBase[ch] = fillerV;
+ newOffset[ch] = ParallelMath::MakeFloatZero();
+ }
+
+ return UnfinishedEndpoints<TNewVectorSize>(newBase, newOffset);
+ }
+
+ private:
+ MFloat m_base[TVectorSize];
+ MFloat m_offset[TVectorSize];
+ };
+ }
+}
diff --git a/thirdparty/cvtt/ConvectionKernels_Util.cpp b/thirdparty/cvtt/ConvectionKernels_Util.cpp
new file mode 100644
index 0000000000..d9c25c7845
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_Util.cpp
@@ -0,0 +1,88 @@
+/*
+Convection Texture Tools
+Copyright (c) 2018-2019 Eric Lasota
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject
+to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
+IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
+CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
+TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
+SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+-------------------------------------------------------------------------------------
+
+Portions based on DirectX Texture Library (DirectXTex)
+
+Copyright (c) Microsoft Corporation. All rights reserved.
+Licensed under the MIT License.
+
+http://go.microsoft.com/fwlink/?LinkId=248926
+*/
+#include "ConvectionKernels_Config.h"
+
+#if !defined(CVTT_SINGLE_FILE) || defined(CVTT_SINGLE_FILE_IMPL)
+
+#include "ConvectionKernels.h"
+#include "ConvectionKernels_ParallelMath.h"
+
+#include <algorithm>
+
+namespace cvtt
+{
+ namespace Util
+ {
+ // Signed input blocks are converted into unsigned space, with the maximum value being 254
+ void BiasSignedInput(PixelBlockU8 inputNormalized[ParallelMath::ParallelSize], const PixelBlockS8 inputSigned[ParallelMath::ParallelSize])
+ {
+ for (size_t block = 0; block < ParallelMath::ParallelSize; block++)
+ {
+ const PixelBlockS8& inputSignedBlock = inputSigned[block];
+ PixelBlockU8& inputNormalizedBlock = inputNormalized[block];
+
+ for (size_t px = 0; px < 16; px++)
+ {
+ for (size_t ch = 0; ch < 4; ch++)
+ inputNormalizedBlock.m_pixels[px][ch] = static_cast<uint8_t>(std::max<int>(inputSignedBlock.m_pixels[px][ch], -127) + 127);
+ }
+ }
+ }
+
+ void FillWeights(const Options &options, float channelWeights[4])
+ {
+ if (options.flags & Flags::Uniform)
+ channelWeights[0] = channelWeights[1] = channelWeights[2] = channelWeights[3] = 1.0f;
+ else
+ {
+ channelWeights[0] = options.redWeight;
+ channelWeights[1] = options.greenWeight;
+ channelWeights[2] = options.blueWeight;
+ channelWeights[3] = options.alphaWeight;
+ }
+ }
+
+ void ComputeTweakFactors(int tweak, int range, float *outFactors)
+ {
+ int totalUnits = range - 1;
+ int minOutsideUnits = ((tweak >> 1) & 1);
+ int maxOutsideUnits = (tweak & 1);
+ int insideUnits = totalUnits - minOutsideUnits - maxOutsideUnits;
+
+ outFactors[0] = -static_cast<float>(minOutsideUnits) / static_cast<float>(insideUnits);
+ outFactors[1] = static_cast<float>(maxOutsideUnits) / static_cast<float>(insideUnits) + 1.0f;
+ }
+ }
+}
+
+#endif
diff --git a/thirdparty/cvtt/ConvectionKernels_Util.h b/thirdparty/cvtt/ConvectionKernels_Util.h
new file mode 100644
index 0000000000..c07b9bf2aa
--- /dev/null
+++ b/thirdparty/cvtt/ConvectionKernels_Util.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "ConvectionKernels_ParallelMath.h"
+
+namespace cvtt
+{
+ struct PixelBlockU8;
+ struct PixelBlockS8;
+ struct Options;
+}
+
+namespace cvtt
+{
+ namespace Util
+ {
+ // Signed input blocks are converted into unsigned space, with the maximum value being 254
+ void BiasSignedInput(PixelBlockU8 inputNormalized[ParallelMath::ParallelSize], const PixelBlockS8 inputSigned[ParallelMath::ParallelSize]);
+ void FillWeights(const Options &options, float channelWeights[4]);
+ void ComputeTweakFactors(int tweak, int range, float *outFactors);
+ }
+}
diff --git a/thirdparty/cvtt/etc_notes.txt b/thirdparty/cvtt/etc_notes.txt
new file mode 100644
index 0000000000..bb041a8435
--- /dev/null
+++ b/thirdparty/cvtt/etc_notes.txt
@@ -0,0 +1,27 @@
+The ETC1 compressor uses modified cluster fit:
+
+Assume that there exists an ideal base color and set of selectors for a given table.
+For a given table and set of selectors, the ideal base color can be determined by subtracting the offsets from each pixel and averaging them.
+Doing that is equivalent to subtracting the average offset from the average color.
+Because positive and negative selectors of the same magnitude cancel out, the search space of possible average offsets is reduced: 57 unique offsets for the first table and 81 for the others.
+Most of the offsets result in the same color as another average offset due to quantization of the base color, so those can be de-duplicated.
+So:
+- Start with a high-precision average color.
+- Apply precomputed luma offsets to it.
+- Quantize and de-duplicate the base colors.
+- Find the ideal selectors for each base color.
+
+Differential mode is solved by just finding the best legal combination from those attempts.
+
+There are several scenarios where this is not ideal:
+- Clamping behavior can sometimes be leveraged for a more accurate block.
+- Differentials can sometimes be moved slightly closer to become legal.
+- This only works when MSE is the error metric (i.e. not normal maps)
+- This only works when pixel weights are of equal importance (i.e. not using weight by alpha or edge deblocking)
+
+T and H mode just work by generating clustering assignments by computing a chrominance line and splitting the block in half by the chrominance midpoint and using those to determine the averages.
+
+Planar mode is just solved algebraically.
+
+If you want to emulate etc2comp's default settings, add the flag ETC_UseFakeBT709 to use its modified Rec. 709 error coefficients.
+Doing that will significantly slow down encoding because it requires much more complicated quantization math. \ No newline at end of file
diff --git a/thirdparty/glslang/LICENSE.txt b/thirdparty/glslang/LICENSE.txt
index 5f58565dc4..054e68a461 100644
--- a/thirdparty/glslang/LICENSE.txt
+++ b/thirdparty/glslang/LICENSE.txt
@@ -303,41 +303,647 @@ APACHE LICENSE, VERSION 2.0
GPL 3 with special bison exception
--------------------------------------------------------------------------------
- Bison implementation for Yacc-like parsers in C
-
- Copyright (C) 1984, 1989-1990, 2000-2015 Free Software Foundation, Inc.
-
- This program is free software: you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation, either version 3 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program. If not, see <http://www.gnu.org/licenses/>.
-
- As a special exception, you may create a larger work that contains
- part or all of the Bison parser skeleton and distribute that work
- under terms of your choice, so long as that work isn't itself a
- parser generator using the skeleton or a modified version thereof
- as a parser skeleton. Alternatively, if you modify or redistribute
- the parser skeleton itself, you may (at your option) remove this
- special exception, which will cause the skeleton and the resulting
- Bison output files to be licensed under the GNU General Public
- License without this special exception.
-
- This special exception was added by the Free Software Foundation in
- version 2.2 of Bison.
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+Bison Exception
+
+As a special exception, you may create a larger work that contains part or all
+of the Bison parser skeleton and distribute that work under terms of your
+choice, so long as that work isn't itself a parser generator using the skeleton
+or a modified version thereof as a parser skeleton. Alternatively, if you
+modify or redistribute the parser skeleton itself, you may (at your option)
+remove this special exception, which will cause the skeleton and the resulting
+Bison output files to be licensed under the GNU General Public License without
+this special exception.
+
+This special exception was added by the Free Software Foundation in version
+2.2 of Bison.
+
+ END OF TERMS AND CONDITIONS
--------------------------------------------------------------------------------
================================================================================
--------------------------------------------------------------------------------
-The preprocessor has the core licenses stated above, plus an additional licence:
+The preprocessor has the core licenses stated above, plus additional licences:
/****************************************************************************\
Copyright (c) 2002, NVIDIA Corporation.
@@ -382,3 +988,29 @@ NVIDIA SOFTWARE, HOWEVER CAUSED AND WHETHER UNDER THEORY OF CONTRACT,
TORT (INCLUDING NEGLIGENCE), STRICT LIABILITY OR OTHERWISE, EVEN IF
NVIDIA HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
\****************************************************************************/
+
+/*
+** Copyright (c) 2014-2016 The Khronos Group Inc.
+**
+** Permission is hereby granted, free of charge, to any person obtaining a copy
+** of this software and/or associated documentation files (the "Materials"),
+** to deal in the Materials without restriction, including without limitation
+** the rights to use, copy, modify, merge, publish, distribute, sublicense,
+** and/or sell copies of the Materials, and to permit persons to whom the
+** Materials are furnished to do so, subject to the following conditions:
+**
+** The above copyright notice and this permission notice shall be included in
+** all copies or substantial portions of the Materials.
+**
+** MODIFICATIONS TO THIS FILE MAY MEAN IT NO LONGER ACCURATELY REFLECTS KHRONOS
+** STANDARDS. THE UNMODIFIED, NORMATIVE VERSIONS OF KHRONOS SPECIFICATIONS AND
+** HEADER INFORMATION ARE LOCATED AT https://www.khronos.org/registry/
+**
+** THE MATERIALS ARE PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+** OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+** FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+** THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+** LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+** FROM,OUT OF OR IN CONNECTION WITH THE MATERIALS OR THE USE OR OTHER DEALINGS
+** IN THE MATERIALS.
+*/
diff --git a/thirdparty/glslang/SPIRV/GlslangToSpv.cpp b/thirdparty/glslang/SPIRV/GlslangToSpv.cpp
index c323bcdb09..39941d3752 100644
--- a/thirdparty/glslang/SPIRV/GlslangToSpv.cpp
+++ b/thirdparty/glslang/SPIRV/GlslangToSpv.cpp
@@ -1256,8 +1256,10 @@ spv::StorageClass TGlslangToSpvTraverser::TranslateStorageClass(const glslang::T
if (type.getBasicType() == glslang::EbtRayQuery)
return spv::StorageClassPrivate;
#ifndef GLSLANG_WEB
- if (type.getQualifier().isSpirvByReference())
- return spv::StorageClassFunction;
+ if (type.getQualifier().isSpirvByReference()) {
+ if (type.getQualifier().isParamInput() || type.getQualifier().isParamOutput())
+ return spv::StorageClassFunction;
+ }
#endif
if (type.getQualifier().isPipeInput())
return spv::StorageClassInput;
@@ -1662,9 +1664,22 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
case EShLangCompute:
builder.addCapability(spv::CapabilityShader);
- builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
- glslangIntermediate->getLocalSize(1),
- glslangIntermediate->getLocalSize(2));
+ if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+ std::vector<spv::Id> dimConstId;
+ for (int dim = 0; dim < 3; ++dim) {
+ bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet);
+ dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst));
+ if (specConst) {
+ builder.addDecoration(dimConstId.back(), spv::DecorationSpecId,
+ glslangIntermediate->getLocalSizeSpecId(dim));
+ }
+ }
+ builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId);
+ } else {
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+ glslangIntermediate->getLocalSize(1),
+ glslangIntermediate->getLocalSize(2));
+ }
if (glslangIntermediate->getLayoutDerivativeModeNone() == glslang::LayoutDerivativeGroupQuads) {
builder.addCapability(spv::CapabilityComputeDerivativeGroupQuadsNV);
builder.addExecutionMode(shaderEntry, spv::ExecutionModeDerivativeGroupQuadsNV);
@@ -1768,9 +1783,22 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
case EShLangMeshNV:
builder.addCapability(spv::CapabilityMeshShadingNV);
builder.addExtension(spv::E_SPV_NV_mesh_shader);
- builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
- glslangIntermediate->getLocalSize(1),
- glslangIntermediate->getLocalSize(2));
+ if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+ std::vector<spv::Id> dimConstId;
+ for (int dim = 0; dim < 3; ++dim) {
+ bool specConst = (glslangIntermediate->getLocalSizeSpecId(dim) != glslang::TQualifier::layoutNotSet);
+ dimConstId.push_back(builder.makeUintConstant(glslangIntermediate->getLocalSize(dim), specConst));
+ if (specConst) {
+ builder.addDecoration(dimConstId.back(), spv::DecorationSpecId,
+ glslangIntermediate->getLocalSizeSpecId(dim));
+ }
+ }
+ builder.addExecutionModeId(shaderEntry, spv::ExecutionModeLocalSizeId, dimConstId);
+ } else {
+ builder.addExecutionMode(shaderEntry, spv::ExecutionModeLocalSize, glslangIntermediate->getLocalSize(0),
+ glslangIntermediate->getLocalSize(1),
+ glslangIntermediate->getLocalSize(2));
+ }
if (glslangIntermediate->getStage() == EShLangMeshNV) {
builder.addExecutionMode(shaderEntry, spv::ExecutionModeOutputVertices,
glslangIntermediate->getVertices());
@@ -1830,10 +1858,10 @@ TGlslangToSpvTraverser::TGlslangToSpvTraverser(unsigned int spvVersion,
std::vector<spv::Id> operandIds;
assert(!modeId.second.empty());
for (auto extraOperand : modeId.second) {
- int nextConst = 0;
- spv::Id operandId = createSpvConstantFromConstUnionArray(
- extraOperand->getType(), extraOperand->getConstArray(), nextConst, false);
- operandIds.push_back(operandId);
+ if (extraOperand->getType().getQualifier().isSpecConstant())
+ operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
+ else
+ operandIds.push_back(createSpvConstant(*extraOperand));
}
builder.addExecutionModeId(shaderEntry, static_cast<spv::ExecutionMode>(modeId.first), operandIds);
}
@@ -3384,7 +3412,7 @@ bool TGlslangToSpvTraverser::visitAggregate(glslang::TVisit visit, glslang::TInt
const auto& spirvInst = node->getSpirvInstruction();
if (spirvInst.set == "") {
std::vector<spv::IdImmediate> idImmOps;
- for (int i = 0; i < glslangOperands.size(); ++i) {
+ for (unsigned int i = 0; i < glslangOperands.size(); ++i) {
if (glslangOperands[i]->getAsTyped()->getQualifier().isSpirvLiteral()) {
// Translate the constant to a literal value
std::vector<unsigned> literals;
@@ -3777,7 +3805,16 @@ bool TGlslangToSpvTraverser::visitBranch(glslang::TVisit /* visit */, glslang::T
switch (node->getFlowOp()) {
case glslang::EOpKill:
- builder.makeStatementTerminator(spv::OpKill, "post-discard");
+ if (glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+ if (glslangIntermediate->getSource() == glslang::EShSourceHlsl) {
+ builder.addCapability(spv::CapabilityDemoteToHelperInvocation);
+ builder.createNoResultOp(spv::OpDemoteToHelperInvocationEXT);
+ } else {
+ builder.makeStatementTerminator(spv::OpTerminateInvocation, "post-terminate-invocation");
+ }
+ } else {
+ builder.makeStatementTerminator(spv::OpKill, "post-discard");
+ }
break;
case glslang::EOpTerminateInvocation:
builder.addExtension(spv::E_SPV_KHR_terminate_invocation);
@@ -3940,12 +3977,14 @@ spv::Id TGlslangToSpvTraverser::getSampledType(const glslang::TSampler& sampler)
builder.addExtension(spv::E_SPV_AMD_gpu_shader_half_float_fetch);
builder.addCapability(spv::CapabilityFloat16ImageAMD);
return builder.makeFloatType(16);
- case glslang::EbtInt64: return builder.makeIntType(64);
+ case glslang::EbtInt64:
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
- builder.addCapability(spv::CapabilityFloat16ImageAMD);
- case glslang::EbtUint64: return builder.makeUintType(64);
+ builder.addCapability(spv::CapabilityInt64ImageEXT);
+ return builder.makeIntType(64);
+ case glslang::EbtUint64:
builder.addExtension(spv::E_SPV_EXT_shader_image_int64);
- builder.addCapability(spv::CapabilityFloat16ImageAMD);
+ builder.addCapability(spv::CapabilityInt64ImageEXT);
+ return builder.makeUintType(64);
#endif
default:
assert(0);
@@ -4146,68 +4185,55 @@ spv::Id TGlslangToSpvTraverser::convertGlslangToSpvType(const glslang::TType& ty
const auto& spirvType = type.getSpirvType();
const auto& spirvInst = spirvType.spirvInst;
- std::vector<spv::Id> operands;
+ std::vector<spv::IdImmediate> operands;
for (const auto& typeParam : spirvType.typeParams) {
- if (typeParam.isConstant) {
- // Constant expression
- if (typeParam.constant->isLiteral()) {
- if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
- float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
- unsigned literal = *reinterpret_cast<unsigned*>(&floatValue);
- operands.push_back(literal);
- } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
- unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
- operands.push_back(literal);
- } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
- unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
- operands.push_back(literal);
- } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
- unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
- operands.push_back(literal);
- } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
- auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
- unsigned literal = 0;
- char* literalPtr = reinterpret_cast<char*>(&literal);
- unsigned charCount = 0;
- char ch = 0;
- do {
- ch = *(str++);
- *(literalPtr++) = ch;
- ++charCount;
- if (charCount == 4) {
- operands.push_back(literal);
- literalPtr = reinterpret_cast<char*>(&literal);
- charCount = 0;
- }
- } while (ch != 0);
-
- // Partial literal is padded with 0
- if (charCount > 0) {
- for (; charCount < 4; ++charCount)
- *(literalPtr++) = 0;
- operands.push_back(literal);
+ // Constant expression
+ if (typeParam.constant->isLiteral()) {
+ if (typeParam.constant->getBasicType() == glslang::EbtFloat) {
+ float floatValue = static_cast<float>(typeParam.constant->getConstArray()[0].getDConst());
+ unsigned literal = *reinterpret_cast<unsigned*>(&floatValue);
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtInt) {
+ unsigned literal = typeParam.constant->getConstArray()[0].getIConst();
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtUint) {
+ unsigned literal = typeParam.constant->getConstArray()[0].getUConst();
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtBool) {
+ unsigned literal = typeParam.constant->getConstArray()[0].getBConst();
+ operands.push_back({false, literal});
+ } else if (typeParam.constant->getBasicType() == glslang::EbtString) {
+ auto str = typeParam.constant->getConstArray()[0].getSConst()->c_str();
+ unsigned literal = 0;
+ char* literalPtr = reinterpret_cast<char*>(&literal);
+ unsigned charCount = 0;
+ char ch = 0;
+ do {
+ ch = *(str++);
+ *(literalPtr++) = ch;
+ ++charCount;
+ if (charCount == 4) {
+ operands.push_back({false, literal});
+ literalPtr = reinterpret_cast<char*>(&literal);
+ charCount = 0;
}
- } else
- assert(0); // Unexpected type
- } else {
- int nextConst = 0;
- spv::Id constant = createSpvConstantFromConstUnionArray(
- typeParam.constant->getType(), typeParam.constant->getConstArray(), nextConst, false);
- operands.push_back(constant);
- }
- } else {
- // Type specifier
- spv::Id typeId = convertGlslangToSpvType(*typeParam.type);
- operands.push_back(typeId);
- }
- }
+ } while (ch != 0);
- if (spirvInst.set == "")
- spvType = builder.createOp(static_cast<spv::Op>(spirvInst.id), spv::NoType, operands);
- else {
- spvType = builder.createBuiltinCall(
- spv::NoType, getExtBuiltins(spirvInst.set.c_str()), spirvInst.id, operands);
+ // Partial literal is padded with 0
+ if (charCount > 0) {
+ for (; charCount < 4; ++charCount)
+ *(literalPtr++) = 0;
+ operands.push_back({false, literal});
+ }
+ } else
+ assert(0); // Unexpected type
+ } else
+ operands.push_back({true, createSpvConstant(*typeParam.constant)});
}
+
+ assert(spirvInst.set == ""); // Currently, couldn't be extended instructions.
+ spvType = builder.makeGenericType(static_cast<spv::Op>(spirvInst.id), operands);
+
break;
}
#endif
@@ -7506,6 +7532,8 @@ spv::Id TGlslangToSpvTraverser::createInvocationsOperation(glslang::TOperator op
break;
case glslang::EOpReadFirstInvocation:
opCode = spv::OpSubgroupFirstInvocationKHR;
+ if (builder.isVectorType(typeId))
+ return CreateInvocationsVectorOperation(opCode, groupOperation, typeId, operands);
break;
case glslang::EOpBallot:
{
@@ -7630,7 +7658,7 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
assert(op == spv::OpGroupFMin || op == spv::OpGroupUMin || op == spv::OpGroupSMin ||
op == spv::OpGroupFMax || op == spv::OpGroupUMax || op == spv::OpGroupSMax ||
op == spv::OpGroupFAdd || op == spv::OpGroupIAdd || op == spv::OpGroupBroadcast ||
- op == spv::OpSubgroupReadInvocationKHR ||
+ op == spv::OpSubgroupReadInvocationKHR || op == spv::OpSubgroupFirstInvocationKHR ||
op == spv::OpGroupFMinNonUniformAMD || op == spv::OpGroupUMinNonUniformAMD ||
op == spv::OpGroupSMinNonUniformAMD ||
op == spv::OpGroupFMaxNonUniformAMD || op == spv::OpGroupUMaxNonUniformAMD ||
@@ -7659,6 +7687,8 @@ spv::Id TGlslangToSpvTraverser::CreateInvocationsVectorOperation(spv::Op op, spv
spvGroupOperands.push_back(scalar);
spv::IdImmediate operand = { true, operands[1] };
spvGroupOperands.push_back(operand);
+ } else if (op == spv::OpSubgroupFirstInvocationKHR) {
+ spvGroupOperands.push_back(scalar);
} else if (op == spv::OpGroupBroadcast) {
spv::IdImmediate scope = { true, builder.makeUintConstant(spv::ScopeSubgroup) };
spvGroupOperands.push_back(scope);
@@ -8721,8 +8751,18 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
builder.addDecoration(id, spv::DecorationOffset, symbol->getQualifier().layoutOffset);
}
- if (symbol->getQualifier().hasLocation())
- builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
+ if (symbol->getQualifier().hasLocation()) {
+ if (!(glslangIntermediate->isRayTracingStage() && glslangIntermediate->IsRequestedExtension(glslang::E_GL_EXT_ray_tracing)
+ && (builder.getStorageClass(id) == spv::StorageClassRayPayloadKHR ||
+ builder.getStorageClass(id) == spv::StorageClassIncomingRayPayloadKHR ||
+ builder.getStorageClass(id) == spv::StorageClassCallableDataKHR ||
+ builder.getStorageClass(id) == spv::StorageClassIncomingCallableDataKHR))) {
+ // Location values are used to link TraceRayKHR and ExecuteCallableKHR to corresponding variables
+ // but are not valid in SPIRV since they are supported only for Input/Output Storage classes.
+ builder.addDecoration(id, spv::DecorationLocation, symbol->getQualifier().layoutLocation);
+ }
+ }
+
builder.addDecoration(id, TranslateInvariantDecoration(symbol->getType().getQualifier()));
if (symbol->getQualifier().hasStream() && glslangIntermediate->isMultiStream()) {
builder.addCapability(spv::CapabilityGeometryStreams);
@@ -8756,7 +8796,16 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
// add built-in variable decoration
if (builtIn != spv::BuiltInMax) {
- builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+ // WorkgroupSize deprecated in spirv1.6
+ if (glslangIntermediate->getSpv().spv < glslang::EShTargetSpv_1_6 ||
+ builtIn != spv::BuiltInWorkgroupSize)
+ builder.addDecoration(id, spv::DecorationBuiltIn, (int)builtIn);
+ }
+
+ // Add volatile decoration to HelperInvocation for spirv1.6 and beyond
+ if (builtIn == spv::BuiltInHelperInvocation &&
+ glslangIntermediate->getSpv().spv >= glslang::EShTargetSpv_1_6) {
+ builder.addDecoration(id, spv::DecorationVolatile);
}
#ifndef GLSLANG_WEB
@@ -8841,12 +8890,12 @@ spv::Id TGlslangToSpvTraverser::getSymbolId(const glslang::TIntermSymbol* symbol
std::vector<spv::Id> operandIds;
assert(!decorateId.second.empty());
for (auto extraOperand : decorateId.second) {
- int nextConst = 0;
- spv::Id operandId = createSpvConstantFromConstUnionArray(
- extraOperand->getType(), extraOperand->getConstArray(), nextConst, false);
- operandIds.push_back(operandId);
+ if (extraOperand->getQualifier().isSpecConstant())
+ operandIds.push_back(getSymbolId(extraOperand->getAsSymbolNode()));
+ else
+ operandIds.push_back(createSpvConstant(*extraOperand));
}
- builder.addDecoration(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
+ builder.addDecorationId(id, static_cast<spv::Decoration>(decorateId.first), operandIds);
}
// Add spirv_decorate_string
diff --git a/thirdparty/glslang/SPIRV/SPVRemapper.cpp b/thirdparty/glslang/SPIRV/SPVRemapper.cpp
index 56d6d5d4a5..fdfbeb90cd 100644
--- a/thirdparty/glslang/SPIRV/SPVRemapper.cpp
+++ b/thirdparty/glslang/SPIRV/SPVRemapper.cpp
@@ -297,15 +297,21 @@ namespace spv {
std::string spirvbin_t::literalString(unsigned word) const
{
std::string literal;
+ const spirword_t * pos = spv.data() + word;
literal.reserve(16);
- const char* bytes = reinterpret_cast<const char*>(spv.data() + word);
-
- while (bytes && *bytes)
- literal += *bytes++;
-
- return literal;
+ do {
+ spirword_t word = *pos;
+ for (int i = 0; i < 4; i++) {
+ char c = word & 0xff;
+ if (c == '\0')
+ return literal;
+ literal += c;
+ word >>= 8;
+ }
+ pos++;
+ } while (true);
}
void spirvbin_t::applyMap()
diff --git a/thirdparty/glslang/SPIRV/SpvBuilder.cpp b/thirdparty/glslang/SPIRV/SpvBuilder.cpp
index e83306ebcb..36a3f09744 100644
--- a/thirdparty/glslang/SPIRV/SpvBuilder.cpp
+++ b/thirdparty/glslang/SPIRV/SpvBuilder.cpp
@@ -427,6 +427,37 @@ Id Builder::makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols)
return type->getResultId();
}
+Id Builder::makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands)
+{
+ // try to find it
+ Instruction* type;
+ for (int t = 0; t < (int)groupedTypes[opcode].size(); ++t) {
+ type = groupedTypes[opcode][t];
+ if (static_cast<size_t>(type->getNumOperands()) != operands.size())
+ continue; // Number mismatch, find next
+
+ bool match = true;
+ for (int op = 0; match && op < (int)operands.size(); ++op) {
+ match = (operands[op].isId ? type->getIdOperand(op) : type->getImmediateOperand(op)) == operands[op].word;
+ }
+ if (match)
+ return type->getResultId();
+ }
+
+ // not found, make it
+ type = new Instruction(getUniqueId(), NoType, opcode);
+ for (size_t op = 0; op < operands.size(); ++op) {
+ if (operands[op].isId)
+ type->addIdOperand(operands[op].word);
+ else
+ type->addImmediateOperand(operands[op].word);
+ }
+ groupedTypes[opcode].push_back(type);
+ constantsTypesGlobals.push_back(std::unique_ptr<Instruction>(type));
+ module.mapInstruction(type);
+
+ return type->getResultId();
+}
// TODO: performance: track arrays per stride
// If a stride is supplied (non-zero) make an array.
diff --git a/thirdparty/glslang/SPIRV/SpvBuilder.h b/thirdparty/glslang/SPIRV/SpvBuilder.h
index 251b9ee823..c72d9b287e 100644
--- a/thirdparty/glslang/SPIRV/SpvBuilder.h
+++ b/thirdparty/glslang/SPIRV/SpvBuilder.h
@@ -181,6 +181,7 @@ public:
Id makeSamplerType();
Id makeSampledImageType(Id imageType);
Id makeCooperativeMatrixType(Id component, Id scope, Id rows, Id cols);
+ Id makeGenericType(spv::Op opcode, std::vector<spv::IdImmediate>& operands);
// accelerationStructureNV type
Id makeAccelerationStructureType();
diff --git a/thirdparty/glslang/SPIRV/SpvPostProcess.cpp b/thirdparty/glslang/SPIRV/SpvPostProcess.cpp
index 23d7b5a461..dd6dabce0d 100644
--- a/thirdparty/glslang/SPIRV/SpvPostProcess.cpp
+++ b/thirdparty/glslang/SPIRV/SpvPostProcess.cpp
@@ -44,10 +44,8 @@
#include <algorithm>
#include "SpvBuilder.h"
-
#include "spirv.hpp"
-#include "GlslangToSpv.h"
-#include "SpvBuilder.h"
+
namespace spv {
#include "GLSL.std.450.h"
#include "GLSL.ext.KHR.h"
@@ -113,8 +111,6 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
}
}
break;
- case OpAccessChain:
- case OpPtrAccessChain:
case OpCopyObject:
break;
case OpFConvert:
@@ -161,26 +157,43 @@ void Builder::postProcessType(const Instruction& inst, Id typeId)
switch (inst.getImmediateOperand(1)) {
case GLSLstd450Frexp:
case GLSLstd450FrexpStruct:
- if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeInt, 16))
+ if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeInt, 16))
addExtension(spv::E_SPV_AMD_gpu_shader_int16);
break;
case GLSLstd450InterpolateAtCentroid:
case GLSLstd450InterpolateAtSample:
case GLSLstd450InterpolateAtOffset:
- if (getSpvVersion() < glslang::EShTargetSpv_1_3 && containsType(typeId, OpTypeFloat, 16))
+ if (getSpvVersion() < spv::Spv_1_3 && containsType(typeId, OpTypeFloat, 16))
addExtension(spv::E_SPV_AMD_gpu_shader_half_float);
break;
default:
break;
}
break;
+ case OpAccessChain:
+ case OpPtrAccessChain:
+ if (isPointerType(typeId))
+ break;
+ if (basicTypeOp == OpTypeInt) {
+ if (width == 16)
+ addCapability(CapabilityInt16);
+ else if (width == 8)
+ addCapability(CapabilityInt8);
+ }
default:
- if (basicTypeOp == OpTypeFloat && width == 16)
- addCapability(CapabilityFloat16);
- if (basicTypeOp == OpTypeInt && width == 16)
- addCapability(CapabilityInt16);
- if (basicTypeOp == OpTypeInt && width == 8)
- addCapability(CapabilityInt8);
+ if (basicTypeOp == OpTypeInt) {
+ if (width == 16)
+ addCapability(CapabilityInt16);
+ else if (width == 8)
+ addCapability(CapabilityInt8);
+ else if (width == 64)
+ addCapability(CapabilityInt64);
+ } else if (basicTypeOp == OpTypeFloat) {
+ if (width == 16)
+ addCapability(CapabilityFloat16);
+ else if (width == 64)
+ addCapability(CapabilityFloat64);
+ }
break;
}
}
diff --git a/thirdparty/glslang/SPIRV/SpvTools.cpp b/thirdparty/glslang/SPIRV/SpvTools.cpp
index 8acf9b139a..e8f825119a 100644
--- a/thirdparty/glslang/SPIRV/SpvTools.cpp
+++ b/thirdparty/glslang/SPIRV/SpvTools.cpp
@@ -68,6 +68,8 @@ spv_target_env MapToSpirvToolsEnv(const SpvVersion& spvVersion, spv::SpvBuildLog
}
case glslang::EShTargetVulkan_1_2:
return spv_target_env::SPV_ENV_VULKAN_1_2;
+ case glslang::EShTargetVulkan_1_3:
+ return spv_target_env::SPV_ENV_VULKAN_1_3;
default:
break;
}
diff --git a/thirdparty/glslang/SPIRV/disassemble.cpp b/thirdparty/glslang/SPIRV/disassemble.cpp
index 73c988c5b3..74dd605409 100644
--- a/thirdparty/glslang/SPIRV/disassemble.cpp
+++ b/thirdparty/glslang/SPIRV/disassemble.cpp
@@ -43,6 +43,7 @@
#include <stack>
#include <sstream>
#include <cstring>
+#include <utility>
#include "disassemble.h"
#include "doc.h"
@@ -100,6 +101,7 @@ protected:
void outputMask(OperandClass operandClass, unsigned mask);
void disassembleImmediates(int numOperands);
void disassembleIds(int numOperands);
+ std::pair<int, std::string> decodeString();
int disassembleString();
void disassembleInstruction(Id resultId, Id typeId, Op opCode, int numOperands);
@@ -290,31 +292,44 @@ void SpirvStream::disassembleIds(int numOperands)
}
}
-// return the number of operands consumed by the string
-int SpirvStream::disassembleString()
+// decode string from words at current position (non-consuming)
+std::pair<int, std::string> SpirvStream::decodeString()
{
- int startWord = word;
-
- out << " \"";
-
- const char* wordString;
+ std::string res;
+ int wordPos = word;
+ char c;
bool done = false;
+
do {
- unsigned int content = stream[word];
- wordString = (const char*)&content;
+ unsigned int content = stream[wordPos];
for (int charCount = 0; charCount < 4; ++charCount) {
- if (*wordString == 0) {
+ c = content & 0xff;
+ content >>= 8;
+ if (c == '\0') {
done = true;
break;
}
- out << *(wordString++);
+ res += c;
}
- ++word;
- } while (! done);
+ ++wordPos;
+ } while(! done);
+
+ return std::make_pair(wordPos - word, res);
+}
+
+// return the number of operands consumed by the string
+int SpirvStream::disassembleString()
+{
+ out << " \"";
+ std::pair<int, std::string> decoderes = decodeString();
+
+ out << decoderes.second;
out << "\"";
- return word - startWord;
+ word += decoderes.first;
+
+ return decoderes.first;
}
void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode, int numOperands)
@@ -331,7 +346,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
nextNestedControl = 0;
}
} else if (opCode == OpExtInstImport) {
- idDescriptor[resultId] = (const char*)(&stream[word]);
+ idDescriptor[resultId] = decodeString().second;
}
else {
if (resultId != 0 && idDescriptor[resultId].size() == 0) {
@@ -428,7 +443,7 @@ void SpirvStream::disassembleInstruction(Id resultId, Id /*typeId*/, Op opCode,
--numOperands;
// Get names for printing "(XXX)" for readability, *after* this id
if (opCode == OpName)
- idDescriptor[stream[word - 1]] = (const char*)(&stream[word]);
+ idDescriptor[stream[word - 1]] = decodeString().second;
break;
case OperandVariableIds:
disassembleIds(numOperands);
diff --git a/thirdparty/glslang/SPIRV/doc.cpp b/thirdparty/glslang/SPIRV/doc.cpp
index dbdf7077a6..9a569e0d7f 100644
--- a/thirdparty/glslang/SPIRV/doc.cpp
+++ b/thirdparty/glslang/SPIRV/doc.cpp
@@ -900,6 +900,12 @@ const char* CapabilityString(int info)
case CapabilityDeviceGroup: return "DeviceGroup";
case CapabilityMultiView: return "MultiView";
+ case CapabilityDenormPreserve: return "DenormPreserve";
+ case CapabilityDenormFlushToZero: return "DenormFlushToZero";
+ case CapabilitySignedZeroInfNanPreserve: return "SignedZeroInfNanPreserve";
+ case CapabilityRoundingModeRTE: return "RoundingModeRTE";
+ case CapabilityRoundingModeRTZ: return "RoundingModeRTZ";
+
case CapabilityStencilExportEXT: return "StencilExportEXT";
case CapabilityFloat16ImageAMD: return "Float16ImageAMD";
diff --git a/thirdparty/glslang/SPIRV/spirv.hpp b/thirdparty/glslang/SPIRV/spirv.hpp
index e0fe24980d..3d500ebbd9 100644
--- a/thirdparty/glslang/SPIRV/spirv.hpp
+++ b/thirdparty/glslang/SPIRV/spirv.hpp
@@ -49,12 +49,12 @@ namespace spv {
typedef unsigned int Id;
-#define SPV_VERSION 0x10500
-#define SPV_REVISION 4
+#define SPV_VERSION 0x10600
+#define SPV_REVISION 1
static const unsigned int MagicNumber = 0x07230203;
-static const unsigned int Version = 0x00010500;
-static const unsigned int Revision = 4;
+static const unsigned int Version = 0x00010600;
+static const unsigned int Revision = 1;
static const unsigned int OpCodeMask = 0xffff;
static const unsigned int WordCountShift = 16;
@@ -65,6 +65,7 @@ enum SourceLanguage {
SourceLanguageOpenCL_C = 3,
SourceLanguageOpenCL_CPP = 4,
SourceLanguageHLSL = 5,
+ SourceLanguageCPP_for_OpenCL = 6,
SourceLanguageMax = 0x7fffffff,
};
@@ -352,6 +353,8 @@ enum ImageOperandsShift {
ImageOperandsVolatileTexelKHRShift = 11,
ImageOperandsSignExtendShift = 12,
ImageOperandsZeroExtendShift = 13,
+ ImageOperandsNontemporalShift = 14,
+ ImageOperandsOffsetsShift = 16,
ImageOperandsMax = 0x7fffffff,
};
@@ -375,6 +378,8 @@ enum ImageOperandsMask {
ImageOperandsVolatileTexelKHRMask = 0x00000800,
ImageOperandsSignExtendMask = 0x00001000,
ImageOperandsZeroExtendMask = 0x00002000,
+ ImageOperandsNontemporalMask = 0x00004000,
+ ImageOperandsOffsetsMask = 0x00010000,
};
enum FPFastMathModeShift {
@@ -491,6 +496,7 @@ enum Decoration {
DecorationPerPrimitiveNV = 5271,
DecorationPerViewNV = 5272,
DecorationPerTaskNV = 5273,
+ DecorationPerVertexKHR = 5285,
DecorationPerVertexNV = 5285,
DecorationNonUniform = 5300,
DecorationNonUniformEXT = 5300,
@@ -498,6 +504,10 @@ enum Decoration {
DecorationRestrictPointerEXT = 5355,
DecorationAliasedPointer = 5356,
DecorationAliasedPointerEXT = 5356,
+ DecorationBindlessSamplerNV = 5398,
+ DecorationBindlessImageNV = 5399,
+ DecorationBoundSamplerNV = 5400,
+ DecorationBoundImageNV = 5401,
DecorationSIMTCallINTEL = 5599,
DecorationReferencedIndirectlyINTEL = 5602,
DecorationClobberINTEL = 5607,
@@ -537,6 +547,7 @@ enum Decoration {
DecorationFunctionFloatingPointModeINTEL = 6080,
DecorationSingleElementVectorINTEL = 6085,
DecorationVectorComputeCallableFunctionINTEL = 6087,
+ DecorationMediaBlockIOINTEL = 6140,
DecorationMax = 0x7fffffff,
};
@@ -621,7 +632,9 @@ enum BuiltIn {
BuiltInLayerPerViewNV = 5279,
BuiltInMeshViewCountNV = 5280,
BuiltInMeshViewIndicesNV = 5281,
+ BuiltInBaryCoordKHR = 5286,
BuiltInBaryCoordNV = 5286,
+ BuiltInBaryCoordNoPerspKHR = 5287,
BuiltInBaryCoordNoPerspNV = 5287,
BuiltInFragSizeEXT = 5292,
BuiltInFragmentSizeNV = 5292,
@@ -722,6 +735,7 @@ enum FunctionControlShift {
FunctionControlDontInlineShift = 1,
FunctionControlPureShift = 2,
FunctionControlConstShift = 3,
+ FunctionControlOptNoneINTELShift = 16,
FunctionControlMax = 0x7fffffff,
};
@@ -731,6 +745,7 @@ enum FunctionControlMask {
FunctionControlDontInlineMask = 0x00000002,
FunctionControlPureMask = 0x00000004,
FunctionControlConstMask = 0x00000008,
+ FunctionControlOptNoneINTELMask = 0x00010000,
};
enum MemorySemanticsShift {
@@ -911,6 +926,7 @@ enum Capability {
CapabilityGroupNonUniformQuad = 68,
CapabilityShaderLayer = 69,
CapabilityShaderViewportIndex = 70,
+ CapabilityUniformDecoration = 71,
CapabilityFragmentShadingRateKHR = 4422,
CapabilitySubgroupBallotKHR = 4423,
CapabilityDrawParameters = 4427,
@@ -959,6 +975,7 @@ enum Capability {
CapabilityFragmentFullyCoveredEXT = 5265,
CapabilityMeshShadingNV = 5266,
CapabilityImageFootprintNV = 5282,
+ CapabilityFragmentBarycentricKHR = 5284,
CapabilityFragmentBarycentricNV = 5284,
CapabilityComputeDerivativeGroupQuadsNV = 5288,
CapabilityFragmentDensityEXT = 5291,
@@ -1003,7 +1020,9 @@ enum Capability {
CapabilityFragmentShaderShadingRateInterlockEXT = 5372,
CapabilityShaderSMBuiltinsNV = 5373,
CapabilityFragmentShaderPixelInterlockEXT = 5378,
+ CapabilityDemoteToHelperInvocation = 5379,
CapabilityDemoteToHelperInvocationEXT = 5379,
+ CapabilityBindlessTextureNV = 5390,
CapabilitySubgroupShuffleINTEL = 5568,
CapabilitySubgroupBufferBlockIOINTEL = 5569,
CapabilitySubgroupImageBlockIOINTEL = 5570,
@@ -1028,6 +1047,7 @@ enum Capability {
CapabilityFPGAMemoryAttributesINTEL = 5824,
CapabilityFPFastMathModeINTEL = 5837,
CapabilityArbitraryPrecisionIntegersINTEL = 5844,
+ CapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
CapabilityUnstructuredLoopControlsINTEL = 5886,
CapabilityFPGALoopControlsINTEL = 5888,
CapabilityKernelAttributesINTEL = 5892,
@@ -1036,14 +1056,26 @@ enum Capability {
CapabilityFPGAClusterAttributesINTEL = 5904,
CapabilityLoopFuseINTEL = 5906,
CapabilityFPGABufferLocationINTEL = 5920,
+ CapabilityArbitraryPrecisionFixedPointINTEL = 5922,
CapabilityUSMStorageClassesINTEL = 5935,
CapabilityIOPipesINTEL = 5943,
CapabilityBlockingPipesINTEL = 5945,
CapabilityFPGARegINTEL = 5948,
+ CapabilityDotProductInputAll = 6016,
+ CapabilityDotProductInputAllKHR = 6016,
+ CapabilityDotProductInput4x8Bit = 6017,
+ CapabilityDotProductInput4x8BitKHR = 6017,
+ CapabilityDotProductInput4x8BitPacked = 6018,
+ CapabilityDotProductInput4x8BitPackedKHR = 6018,
+ CapabilityDotProduct = 6019,
+ CapabilityDotProductKHR = 6019,
+ CapabilityBitInstructions = 6025,
CapabilityAtomicFloat32AddEXT = 6033,
CapabilityAtomicFloat64AddEXT = 6034,
CapabilityLongConstantCompositeINTEL = 6089,
+ CapabilityOptNoneINTEL = 6094,
CapabilityAtomicFloat16AddEXT = 6095,
+ CapabilityDebugInfoModuleINTEL = 6114,
CapabilityMax = 0x7fffffff,
};
@@ -1122,6 +1154,32 @@ enum FPOperationMode {
FPOperationModeMax = 0x7fffffff,
};
+enum QuantizationModes {
+ QuantizationModesTRN = 0,
+ QuantizationModesTRN_ZERO = 1,
+ QuantizationModesRND = 2,
+ QuantizationModesRND_ZERO = 3,
+ QuantizationModesRND_INF = 4,
+ QuantizationModesRND_MIN_INF = 5,
+ QuantizationModesRND_CONV = 6,
+ QuantizationModesRND_CONV_ODD = 7,
+ QuantizationModesMax = 0x7fffffff,
+};
+
+enum OverflowModes {
+ OverflowModesWRAP = 0,
+ OverflowModesSAT = 1,
+ OverflowModesSAT_ZERO = 2,
+ OverflowModesSAT_SYM = 3,
+ OverflowModesMax = 0x7fffffff,
+};
+
+enum PackedVectorFormat {
+ PackedVectorFormatPackedVectorFormat4x8Bit = 0,
+ PackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
+ PackedVectorFormatMax = 0x7fffffff,
+};
+
enum Op {
OpNop = 0,
OpUndef = 1,
@@ -1479,6 +1537,18 @@ enum Op {
OpConvertUToAccelerationStructureKHR = 4447,
OpIgnoreIntersectionKHR = 4448,
OpTerminateRayKHR = 4449,
+ OpSDot = 4450,
+ OpSDotKHR = 4450,
+ OpUDot = 4451,
+ OpUDotKHR = 4451,
+ OpSUDot = 4452,
+ OpSUDotKHR = 4452,
+ OpSDotAccSat = 4453,
+ OpSDotAccSatKHR = 4453,
+ OpUDotAccSat = 4454,
+ OpUDotAccSatKHR = 4454,
+ OpSUDotAccSat = 4455,
+ OpSUDotAccSatKHR = 4455,
OpTypeRayQueryKHR = 4472,
OpRayQueryInitializeKHR = 4473,
OpRayQueryTerminateKHR = 4474,
@@ -1517,8 +1587,16 @@ enum Op {
OpCooperativeMatrixLengthNV = 5362,
OpBeginInvocationInterlockEXT = 5364,
OpEndInvocationInterlockEXT = 5365,
+ OpDemoteToHelperInvocation = 5380,
OpDemoteToHelperInvocationEXT = 5380,
OpIsHelperInvocationEXT = 5381,
+ OpConvertUToImageNV = 5391,
+ OpConvertUToSamplerNV = 5392,
+ OpConvertImageToUNV = 5393,
+ OpConvertSamplerToUNV = 5394,
+ OpConvertUToSampledImageNV = 5395,
+ OpConvertSampledImageToUNV = 5396,
+ OpSamplerImageAddressingModeNV = 5397,
OpSubgroupShuffleINTEL = 5571,
OpSubgroupShuffleDownINTEL = 5572,
OpSubgroupShuffleUpINTEL = 5573,
@@ -1543,7 +1621,7 @@ enum Op {
OpUSubSatINTEL = 5596,
OpIMul32x16INTEL = 5597,
OpUMul32x16INTEL = 5598,
- OpConstFunctionPointerINTEL = 5600,
+ OpConstantFunctionPointerINTEL = 5600,
OpFunctionPointerCallINTEL = 5601,
OpAsmTargetINTEL = 5609,
OpAsmINTEL = 5610,
@@ -1677,7 +1755,59 @@ enum Op {
OpVariableLengthArrayINTEL = 5818,
OpSaveMemoryINTEL = 5819,
OpRestoreMemoryINTEL = 5820,
+ OpArbitraryFloatSinCosPiINTEL = 5840,
+ OpArbitraryFloatCastINTEL = 5841,
+ OpArbitraryFloatCastFromIntINTEL = 5842,
+ OpArbitraryFloatCastToIntINTEL = 5843,
+ OpArbitraryFloatAddINTEL = 5846,
+ OpArbitraryFloatSubINTEL = 5847,
+ OpArbitraryFloatMulINTEL = 5848,
+ OpArbitraryFloatDivINTEL = 5849,
+ OpArbitraryFloatGTINTEL = 5850,
+ OpArbitraryFloatGEINTEL = 5851,
+ OpArbitraryFloatLTINTEL = 5852,
+ OpArbitraryFloatLEINTEL = 5853,
+ OpArbitraryFloatEQINTEL = 5854,
+ OpArbitraryFloatRecipINTEL = 5855,
+ OpArbitraryFloatRSqrtINTEL = 5856,
+ OpArbitraryFloatCbrtINTEL = 5857,
+ OpArbitraryFloatHypotINTEL = 5858,
+ OpArbitraryFloatSqrtINTEL = 5859,
+ OpArbitraryFloatLogINTEL = 5860,
+ OpArbitraryFloatLog2INTEL = 5861,
+ OpArbitraryFloatLog10INTEL = 5862,
+ OpArbitraryFloatLog1pINTEL = 5863,
+ OpArbitraryFloatExpINTEL = 5864,
+ OpArbitraryFloatExp2INTEL = 5865,
+ OpArbitraryFloatExp10INTEL = 5866,
+ OpArbitraryFloatExpm1INTEL = 5867,
+ OpArbitraryFloatSinINTEL = 5868,
+ OpArbitraryFloatCosINTEL = 5869,
+ OpArbitraryFloatSinCosINTEL = 5870,
+ OpArbitraryFloatSinPiINTEL = 5871,
+ OpArbitraryFloatCosPiINTEL = 5872,
+ OpArbitraryFloatASinINTEL = 5873,
+ OpArbitraryFloatASinPiINTEL = 5874,
+ OpArbitraryFloatACosINTEL = 5875,
+ OpArbitraryFloatACosPiINTEL = 5876,
+ OpArbitraryFloatATanINTEL = 5877,
+ OpArbitraryFloatATanPiINTEL = 5878,
+ OpArbitraryFloatATan2INTEL = 5879,
+ OpArbitraryFloatPowINTEL = 5880,
+ OpArbitraryFloatPowRINTEL = 5881,
+ OpArbitraryFloatPowNINTEL = 5882,
OpLoopControlINTEL = 5887,
+ OpFixedSqrtINTEL = 5923,
+ OpFixedRecipINTEL = 5924,
+ OpFixedRsqrtINTEL = 5925,
+ OpFixedSinINTEL = 5926,
+ OpFixedCosINTEL = 5927,
+ OpFixedSinCosINTEL = 5928,
+ OpFixedSinPiINTEL = 5929,
+ OpFixedCosPiINTEL = 5930,
+ OpFixedSinCosPiINTEL = 5931,
+ OpFixedLogINTEL = 5932,
+ OpFixedExpINTEL = 5933,
OpPtrCastToCrossWorkgroupINTEL = 5934,
OpCrossWorkgroupCastToPtrINTEL = 5938,
OpReadPipeBlockingINTEL = 5946,
@@ -2069,6 +2199,12 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
case OpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
case OpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+ case OpSDot: *hasResult = true; *hasResultType = true; break;
+ case OpUDot: *hasResult = true; *hasResultType = true; break;
+ case OpSUDot: *hasResult = true; *hasResultType = true; break;
+ case OpSDotAccSat: *hasResult = true; *hasResultType = true; break;
+ case OpUDotAccSat: *hasResult = true; *hasResultType = true; break;
+ case OpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
case OpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
case OpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
case OpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
@@ -2105,8 +2241,15 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
case OpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
case OpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
- case OpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
+ case OpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
case OpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+ case OpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
+ case OpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
+ case OpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
+ case OpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
+ case OpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
+ case OpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
+ case OpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
case OpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
case OpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2131,7 +2274,7 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
case OpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
case OpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
- case OpConstFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
case OpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
case OpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
case OpAsmINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2263,7 +2406,59 @@ inline void HasResultAndType(Op opcode, bool *hasResult, bool *hasResultType) {
case OpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
case OpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
case OpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
+ case OpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
case OpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
+ case OpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
+ case OpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
case OpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
case OpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
case OpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
diff --git a/thirdparty/glslang/SPIRV/spvIR.h b/thirdparty/glslang/SPIRV/spvIR.h
index 486e80d000..5249a5ba73 100644
--- a/thirdparty/glslang/SPIRV/spvIR.h
+++ b/thirdparty/glslang/SPIRV/spvIR.h
@@ -111,27 +111,23 @@ public:
void addStringOperand(const char* str)
{
- unsigned int word;
- char* wordString = (char*)&word;
- char* wordPtr = wordString;
- int charCount = 0;
+ unsigned int word = 0;
+ unsigned int shiftAmount = 0;
char c;
+
do {
c = *(str++);
- *(wordPtr++) = c;
- ++charCount;
- if (charCount == 4) {
+ word |= ((unsigned int)c) << shiftAmount;
+ shiftAmount += 8;
+ if (shiftAmount == 32) {
addImmediateOperand(word);
- wordPtr = wordString;
- charCount = 0;
+ word = 0;
+ shiftAmount = 0;
}
} while (c != 0);
// deal with partial last word
- if (charCount > 0) {
- // pad with 0s
- for (; charCount < 4; ++charCount)
- *(wordPtr++) = 0;
+ if (shiftAmount > 0) {
addImmediateOperand(word);
}
}
diff --git a/thirdparty/glslang/glslang/Include/Common.h b/thirdparty/glslang/glslang/Include/Common.h
index 1e47239a7a..9042a1aa27 100644
--- a/thirdparty/glslang/glslang/Include/Common.h
+++ b/thirdparty/glslang/glslang/Include/Common.h
@@ -39,6 +39,11 @@
#include <algorithm>
#include <cassert>
+#ifdef _MSC_VER
+#include <cfloat>
+#else
+#include <cmath>
+#endif
#include <cstdio>
#include <cstdlib>
#include <list>
@@ -61,7 +66,7 @@ std::string to_string(const T& val) {
}
#endif
-#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || defined MINGW_HAS_SECURE_API
+#if (defined(_MSC_VER) && _MSC_VER < 1900 /*vs2015*/) || MINGW_HAS_SECURE_API
#include <basetsd.h>
#ifndef snprintf
#define snprintf sprintf_s
@@ -213,7 +218,7 @@ template <class T> T Max(const T a, const T b) { return a > b ? a : b; }
//
// Create a TString object from an integer.
//
-#if defined _MSC_VER || defined MINGW_HAS_SECURE_API
+#if defined _MSC_VER || MINGW_HAS_SECURE_API
inline const TString String(const int i, const int base = 10)
{
char text[16]; // 32 bit ints are at most 10 digits in base 10
@@ -302,6 +307,34 @@ template <class T> int IntLog2(T n)
return result;
}
+inline bool IsInfinity(double x) {
+#ifdef _MSC_VER
+ switch (_fpclass(x)) {
+ case _FPCLASS_NINF:
+ case _FPCLASS_PINF:
+ return true;
+ default:
+ return false;
+ }
+#else
+ return std::isinf(x);
+#endif
+}
+
+inline bool IsNan(double x) {
+#ifdef _MSC_VER
+ switch (_fpclass(x)) {
+ case _FPCLASS_SNAN:
+ case _FPCLASS_QNAN:
+ return true;
+ default:
+ return false;
+ }
+#else
+ return std::isnan(x);
+#endif
+}
+
} // end namespace glslang
#endif // _COMMON_INCLUDED_
diff --git a/thirdparty/glslang/glslang/Include/PoolAlloc.h b/thirdparty/glslang/glslang/Include/PoolAlloc.h
index b8eccb8832..1f5cac76de 100644
--- a/thirdparty/glslang/glslang/Include/PoolAlloc.h
+++ b/thirdparty/glslang/glslang/Include/PoolAlloc.h
@@ -306,6 +306,8 @@ public:
TPoolAllocator& getAllocator() const { return allocator; }
+ pool_allocator select_on_container_copy_construction() const { return pool_allocator{}; }
+
protected:
pool_allocator& operator=(const pool_allocator&) { return *this; }
TPoolAllocator& allocator;
diff --git a/thirdparty/glslang/glslang/Include/SpirvIntrinsics.h b/thirdparty/glslang/glslang/Include/SpirvIntrinsics.h
index e7a999d408..3c7d72ce97 100644
--- a/thirdparty/glslang/glslang/Include/SpirvIntrinsics.h
+++ b/thirdparty/glslang/glslang/Include/SpirvIntrinsics.h
@@ -65,7 +65,7 @@ struct TSpirvExecutionMode {
// spirv_execution_mode
TMap<int, TVector<const TIntermConstantUnion*>> modes;
// spirv_execution_mode_id
- TMap<int, TVector<const TIntermConstantUnion*> > modeIds;
+ TMap<int, TVector<const TIntermTyped*> > modeIds;
};
// SPIR-V decorations
@@ -75,7 +75,7 @@ struct TSpirvDecorate {
// spirv_decorate
TMap<int, TVector<const TIntermConstantUnion*> > decorates;
// spirv_decorate_id
- TMap<int, TVector<const TIntermConstantUnion*> > decorateIds;
+ TMap<int, TVector<const TIntermTyped*>> decorateIds;
// spirv_decorate_string
TMap<int, TVector<const TIntermConstantUnion*> > decorateStrings;
};
@@ -98,20 +98,12 @@ struct TSpirvInstruction {
struct TSpirvTypeParameter {
POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
- TSpirvTypeParameter(const TIntermConstantUnion* arg) { isConstant = true; constant = arg; }
- TSpirvTypeParameter(const TType* arg) { isConstant = false; type = arg; }
+ TSpirvTypeParameter(const TIntermConstantUnion* arg) { constant = arg; }
- bool operator==(const TSpirvTypeParameter& rhs) const
- {
- return isConstant == rhs.isConstant && ((isConstant && constant == rhs.constant) || (!isConstant && type == rhs.type));
- }
+ bool operator==(const TSpirvTypeParameter& rhs) const { return constant == rhs.constant; }
bool operator!=(const TSpirvTypeParameter& rhs) const { return !operator==(rhs); }
- bool isConstant;
- union {
- const TIntermConstantUnion* constant;
- const TType* type;
- };
+ const TIntermConstantUnion* constant;
};
typedef TVector<TSpirvTypeParameter> TSpirvTypeParameters;
diff --git a/thirdparty/glslang/glslang/Include/Types.h b/thirdparty/glslang/glslang/Include/Types.h
index a6bf191d75..6a7e61df3a 100644
--- a/thirdparty/glslang/glslang/Include/Types.h
+++ b/thirdparty/glslang/glslang/Include/Types.h
@@ -741,6 +741,16 @@ public:
}
}
+ bool isUniform() const
+ {
+ switch (storage) {
+ case EvqUniform:
+ return true;
+ default:
+ return false;
+ }
+ }
+
bool isIo() const
{
switch (storage) {
@@ -1855,10 +1865,12 @@ public:
bool isAtomic() const { return false; }
bool isCoopMat() const { return false; }
bool isReference() const { return false; }
+ bool isSpirvType() const { return false; }
#else
bool isAtomic() const { return basicType == EbtAtomicUint; }
bool isCoopMat() const { return coopmat; }
bool isReference() const { return getBasicType() == EbtReference; }
+ bool isSpirvType() const { return getBasicType() == EbtSpirvType; }
#endif
// return true if this type contains any subtype which satisfies the given predicate.
@@ -2434,11 +2446,15 @@ public:
//
bool sameStructType(const TType& right) const
{
+ // TODO: Why return true when neither types are structures?
// Most commonly, they are both nullptr, or the same pointer to the same actual structure
if ((!isStruct() && !right.isStruct()) ||
(isStruct() && right.isStruct() && structure == right.structure))
return true;
+ if (!isStruct() || !right.isStruct())
+ return false;
+
// Structure names have to match
if (*typeName != *right.typeName)
return false;
@@ -2448,8 +2464,7 @@ public:
bool isGLPerVertex = *typeName == "gl_PerVertex";
// Both being nullptr was caught above, now they both have to be structures of the same number of elements
- if (!isStruct() || !right.isStruct() ||
- (structure->size() != right.structure->size() && !isGLPerVertex))
+ if (structure->size() != right.structure->size() && !isGLPerVertex)
return false;
// Compare the names and types of all the members, which have to match
@@ -2459,6 +2474,14 @@ public:
if (*(*structure)[li].type != *(*right.structure)[ri].type)
return false;
} else {
+ // Skip hidden members
+ if ((*structure)[li].type->hiddenMember()) {
+ ri--;
+ continue;
+ } else if ((*right.structure)[ri].type->hiddenMember()) {
+ li--;
+ continue;
+ }
// If one of the members is something that's inconsistently declared, skip over it
// for now.
if (isGLPerVertex) {
@@ -2475,10 +2498,10 @@ public:
}
// If we get here, then there should only be inconsistently declared members left
} else if (li < structure->size()) {
- if (!isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName()))
+ if (!(*structure)[li].type->hiddenMember() && !isInconsistentGLPerVertexMember((*structure)[li].type->getFieldName()))
return false;
} else {
- if (!isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName()))
+ if (!(*right.structure)[ri].type->hiddenMember() && !isInconsistentGLPerVertexMember((*right.structure)[ri].type->getFieldName()))
return false;
}
}
diff --git a/thirdparty/glslang/glslang/Include/glslang_c_interface.h b/thirdparty/glslang/glslang/Include/glslang_c_interface.h
index 4b32e2b85f..14ab6acbc2 100644
--- a/thirdparty/glslang/glslang/Include/glslang_c_interface.h
+++ b/thirdparty/glslang/glslang/Include/glslang_c_interface.h
@@ -224,6 +224,9 @@ GLSLANG_EXPORT void glslang_finalize_process();
GLSLANG_EXPORT glslang_shader_t* glslang_shader_create(const glslang_input_t* input);
GLSLANG_EXPORT void glslang_shader_delete(glslang_shader_t* shader);
+GLSLANG_EXPORT void glslang_shader_shift_binding(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base);
+GLSLANG_EXPORT void glslang_shader_shift_binding_for_set(glslang_shader_t* shader, glslang_resource_type_t res, unsigned int base, unsigned int set);
+GLSLANG_EXPORT void glslang_shader_set_options(glslang_shader_t* shader, int options); // glslang_shader_options_t
GLSLANG_EXPORT int glslang_shader_preprocess(glslang_shader_t* shader, const glslang_input_t* input);
GLSLANG_EXPORT int glslang_shader_parse(glslang_shader_t* shader, const glslang_input_t* input);
GLSLANG_EXPORT const char* glslang_shader_get_preprocessed_code(glslang_shader_t* shader);
@@ -234,6 +237,7 @@ GLSLANG_EXPORT glslang_program_t* glslang_program_create();
GLSLANG_EXPORT void glslang_program_delete(glslang_program_t* program);
GLSLANG_EXPORT void glslang_program_add_shader(glslang_program_t* program, glslang_shader_t* shader);
GLSLANG_EXPORT int glslang_program_link(glslang_program_t* program, int messages); // glslang_messages_t
+GLSLANG_EXPORT int glslang_program_map_io(glslang_program_t* program);
GLSLANG_EXPORT void glslang_program_SPIRV_generate(glslang_program_t* program, glslang_stage_t stage);
GLSLANG_EXPORT size_t glslang_program_SPIRV_get_size(glslang_program_t* program);
GLSLANG_EXPORT void glslang_program_SPIRV_get(glslang_program_t* program, unsigned int*);
diff --git a/thirdparty/glslang/glslang/Include/glslang_c_shader_types.h b/thirdparty/glslang/glslang/Include/glslang_c_shader_types.h
index f100a9aa82..df19777b0b 100644
--- a/thirdparty/glslang/glslang/Include/glslang_c_shader_types.h
+++ b/thirdparty/glslang/glslang/Include/glslang_c_shader_types.h
@@ -101,8 +101,9 @@ typedef enum {
GLSLANG_TARGET_VULKAN_1_0 = (1 << 22),
GLSLANG_TARGET_VULKAN_1_1 = (1 << 22) | (1 << 12),
GLSLANG_TARGET_VULKAN_1_2 = (1 << 22) | (2 << 12),
+ GLSLANG_TARGET_VULKAN_1_3 = (1 << 22) | (3 << 12),
GLSLANG_TARGET_OPENGL_450 = 450,
- LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 4),
+ LAST_ELEMENT_MARKER(GLSLANG_TARGET_CLIENT_VERSION_COUNT = 5),
} glslang_target_client_version_t;
/* SH_TARGET_LanguageVersion counterpart */
@@ -113,7 +114,8 @@ typedef enum {
GLSLANG_TARGET_SPV_1_3 = (1 << 16) | (3 << 8),
GLSLANG_TARGET_SPV_1_4 = (1 << 16) | (4 << 8),
GLSLANG_TARGET_SPV_1_5 = (1 << 16) | (5 << 8),
- LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 6),
+ GLSLANG_TARGET_SPV_1_6 = (1 << 16) | (6 << 8),
+ LAST_ELEMENT_MARKER(GLSLANG_TARGET_LANGUAGE_VERSION_COUNT = 7),
} glslang_target_language_version_t;
/* EShExecutable counterpart */
@@ -181,6 +183,26 @@ typedef enum {
LAST_ELEMENT_MARKER(GLSLANG_PROFILE_COUNT),
} glslang_profile_t;
+/* Shader options */
+typedef enum {
+ GLSLANG_SHADER_DEFAULT_BIT = 0,
+ GLSLANG_SHADER_AUTO_MAP_BINDINGS = (1 << 0),
+ GLSLANG_SHADER_AUTO_MAP_LOCATIONS = (1 << 1),
+ GLSLANG_SHADER_VULKAN_RULES_RELAXED = (1 << 2),
+ LAST_ELEMENT_MARKER(GLSLANG_SHADER_COUNT),
+} glslang_shader_options_t;
+
+/* TResourceType counterpart */
+typedef enum {
+ GLSLANG_RESOURCE_TYPE_SAMPLER,
+ GLSLANG_RESOURCE_TYPE_TEXTURE,
+ GLSLANG_RESOURCE_TYPE_IMAGE,
+ GLSLANG_RESOURCE_TYPE_UBO,
+ GLSLANG_RESOURCE_TYPE_SSBO,
+ GLSLANG_RESOURCE_TYPE_UAV,
+ LAST_ELEMENT_MARKER(GLSLANG_RESOURCE_TYPE_COUNT),
+} glslang_resource_type_t;
+
#undef LAST_ELEMENT_MARKER
#endif
diff --git a/thirdparty/glslang/glslang/Include/intermediate.h b/thirdparty/glslang/glslang/Include/intermediate.h
index 1e6ab4aa7a..595bd623db 100644
--- a/thirdparty/glslang/glslang/Include/intermediate.h
+++ b/thirdparty/glslang/glslang/Include/intermediate.h
@@ -1643,6 +1643,7 @@ public:
~TIntermAggregate() { delete pragmaTable; }
virtual TIntermAggregate* getAsAggregate() { return this; }
virtual const TIntermAggregate* getAsAggregate() const { return this; }
+ virtual void updatePrecision();
virtual void setOperator(TOperator o) { op = o; }
virtual TIntermSequence& getSequence() { return sequence; }
virtual const TIntermSequence& getSequence() const { return sequence; }
diff --git a/thirdparty/glslang/glslang/MachineIndependent/Constant.cpp b/thirdparty/glslang/glslang/MachineIndependent/Constant.cpp
index 4629cc2da5..5fc61dbb79 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/Constant.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/Constant.cpp
@@ -46,35 +46,6 @@ namespace {
using namespace glslang;
-typedef union {
- double d;
- int i[2];
-} DoubleIntUnion;
-
-// Some helper functions
-
-bool isNan(double x)
-{
- DoubleIntUnion u;
- // tough to find a platform independent library function, do it directly
- u.d = x;
- int bitPatternL = u.i[0];
- int bitPatternH = u.i[1];
- return (bitPatternH & 0x7ff80000) == 0x7ff80000 &&
- ((bitPatternH & 0xFFFFF) != 0 || bitPatternL != 0);
-}
-
-bool isInf(double x)
-{
- DoubleIntUnion u;
- // tough to find a platform independent library function, do it directly
- u.d = x;
- int bitPatternL = u.i[0];
- int bitPatternH = u.i[1];
- return (bitPatternH & 0x7ff00000) == 0x7ff00000 &&
- (bitPatternH & 0xFFFFF) == 0 && bitPatternL == 0;
-}
-
const double pi = 3.1415926535897932384626433832795;
} // end anonymous namespace
@@ -531,7 +502,7 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EbtFloat: newConstArray[i].setDConst(-unionArray[i].getDConst()); break;
// Note: avoid UBSAN error regarding negating 0x80000000
case EbtInt: newConstArray[i].setIConst(
- unionArray[i].getIConst() == 0x80000000
+ static_cast<unsigned int>(unionArray[i].getIConst()) == 0x80000000
? -0x7FFFFFFF - 1
: -unionArray[i].getIConst());
break;
@@ -663,12 +634,12 @@ TIntermTyped* TIntermConstantUnion::fold(TOperator op, const TType& returnType)
case EOpIsNan:
{
- newConstArray[i].setBConst(isNan(unionArray[i].getDConst()));
+ newConstArray[i].setBConst(IsNan(unionArray[i].getDConst()));
break;
}
case EOpIsInf:
{
- newConstArray[i].setBConst(isInf(unionArray[i].getDConst()));
+ newConstArray[i].setBConst(IsInfinity(unionArray[i].getDConst()));
break;
}
diff --git a/thirdparty/glslang/glslang/MachineIndependent/Initialize.cpp b/thirdparty/glslang/glslang/MachineIndependent/Initialize.cpp
index 823406c18d..03fdce9f6b 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/Initialize.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/Initialize.cpp
@@ -3,7 +3,7 @@
// Copyright (C) 2012-2016 LunarG, Inc.
// Copyright (C) 2015-2020 Google, Inc.
// Copyright (C) 2017 ARM Limited.
-// Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
+// Modifications Copyright (C) 2020-2021 Advanced Micro Devices, Inc. All rights reserved.
//
// All rights reserved.
//
@@ -316,6 +316,7 @@ const CustomFunction CustomFunctions[] = {
{ EOpTextureQuerySize, "textureSize", nullptr },
{ EOpTextureQueryLod, "textureQueryLod", nullptr },
+ { EOpTextureQueryLod, "textureQueryLOD", nullptr }, // extension GL_ARB_texture_query_lod
{ EOpTextureQueryLevels, "textureQueryLevels", nullptr },
{ EOpTextureQuerySamples, "textureSamples", nullptr },
{ EOpTexture, "texture", nullptr },
@@ -4159,106 +4160,6 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"u16vec4 unpack16(uint64_t);"
"i32vec2 unpack32(int64_t);"
"u32vec2 unpack32(uint64_t);"
-
- "float64_t radians(float64_t);"
- "f64vec2 radians(f64vec2);"
- "f64vec3 radians(f64vec3);"
- "f64vec4 radians(f64vec4);"
-
- "float64_t degrees(float64_t);"
- "f64vec2 degrees(f64vec2);"
- "f64vec3 degrees(f64vec3);"
- "f64vec4 degrees(f64vec4);"
-
- "float64_t sin(float64_t);"
- "f64vec2 sin(f64vec2);"
- "f64vec3 sin(f64vec3);"
- "f64vec4 sin(f64vec4);"
-
- "float64_t cos(float64_t);"
- "f64vec2 cos(f64vec2);"
- "f64vec3 cos(f64vec3);"
- "f64vec4 cos(f64vec4);"
-
- "float64_t tan(float64_t);"
- "f64vec2 tan(f64vec2);"
- "f64vec3 tan(f64vec3);"
- "f64vec4 tan(f64vec4);"
-
- "float64_t asin(float64_t);"
- "f64vec2 asin(f64vec2);"
- "f64vec3 asin(f64vec3);"
- "f64vec4 asin(f64vec4);"
-
- "float64_t acos(float64_t);"
- "f64vec2 acos(f64vec2);"
- "f64vec3 acos(f64vec3);"
- "f64vec4 acos(f64vec4);"
-
- "float64_t atan(float64_t, float64_t);"
- "f64vec2 atan(f64vec2, f64vec2);"
- "f64vec3 atan(f64vec3, f64vec3);"
- "f64vec4 atan(f64vec4, f64vec4);"
-
- "float64_t atan(float64_t);"
- "f64vec2 atan(f64vec2);"
- "f64vec3 atan(f64vec3);"
- "f64vec4 atan(f64vec4);"
-
- "float64_t sinh(float64_t);"
- "f64vec2 sinh(f64vec2);"
- "f64vec3 sinh(f64vec3);"
- "f64vec4 sinh(f64vec4);"
-
- "float64_t cosh(float64_t);"
- "f64vec2 cosh(f64vec2);"
- "f64vec3 cosh(f64vec3);"
- "f64vec4 cosh(f64vec4);"
-
- "float64_t tanh(float64_t);"
- "f64vec2 tanh(f64vec2);"
- "f64vec3 tanh(f64vec3);"
- "f64vec4 tanh(f64vec4);"
-
- "float64_t asinh(float64_t);"
- "f64vec2 asinh(f64vec2);"
- "f64vec3 asinh(f64vec3);"
- "f64vec4 asinh(f64vec4);"
-
- "float64_t acosh(float64_t);"
- "f64vec2 acosh(f64vec2);"
- "f64vec3 acosh(f64vec3);"
- "f64vec4 acosh(f64vec4);"
-
- "float64_t atanh(float64_t);"
- "f64vec2 atanh(f64vec2);"
- "f64vec3 atanh(f64vec3);"
- "f64vec4 atanh(f64vec4);"
-
- "float64_t pow(float64_t, float64_t);"
- "f64vec2 pow(f64vec2, f64vec2);"
- "f64vec3 pow(f64vec3, f64vec3);"
- "f64vec4 pow(f64vec4, f64vec4);"
-
- "float64_t exp(float64_t);"
- "f64vec2 exp(f64vec2);"
- "f64vec3 exp(f64vec3);"
- "f64vec4 exp(f64vec4);"
-
- "float64_t log(float64_t);"
- "f64vec2 log(f64vec2);"
- "f64vec3 log(f64vec3);"
- "f64vec4 log(f64vec4);"
-
- "float64_t exp2(float64_t);"
- "f64vec2 exp2(f64vec2);"
- "f64vec3 exp2(f64vec3);"
- "f64vec4 exp2(f64vec4);"
-
- "float64_t log2(float64_t);"
- "f64vec2 log2(f64vec2);"
- "f64vec3 log2(f64vec3);"
- "f64vec4 log2(f64vec4);"
"\n");
}
@@ -4369,7 +4270,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
//
//============================================================================
- if (profile != EEsProfile && version >= 400) {
+ if (profile != EEsProfile && (version >= 400 || version == 150)) {
stageBuiltins[EShLangGeometry].append(
"void EmitStreamVertex(int);"
"void EndStreamPrimitive(int);"
@@ -4653,7 +4554,7 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"\n");
}
- // GL_ARB_shader_clock & GL_EXT_shader_realtime_clock
+ // GL_ARB_shader_clock& GL_EXT_shader_realtime_clock
if (profile != EEsProfile && version >= 450) {
commonBuiltins.append(
"uvec2 clock2x32ARB();"
@@ -5174,9 +5075,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
);
}
- if (version >= 450)
+ if (version >= 430)
stageBuiltins[EShLangVertex].append(
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
+ );
+
+ if (version >= 450)
+ stageBuiltins[EShLangVertex].append(
"out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
"out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
"out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes
@@ -5312,9 +5217,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"in int gl_InvocationID;"
);
- if (version >= 450)
+ if (version >= 430)
stageBuiltins[EShLangGeometry].append(
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
+ );
+
+ if (version >= 450)
+ stageBuiltins[EShLangGeometry].append(
"out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
"out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
"out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes
@@ -5390,7 +5299,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
if (version >= 450)
stageBuiltins[EShLangTessControl].append(
"float gl_CullDistance[];"
+ );
+ if (version >= 430)
+ stageBuiltins[EShLangTessControl].append(
"int gl_ViewportMask[];" // GL_NV_viewport_array2
+ );
+ if (version >= 450)
+ stageBuiltins[EShLangTessControl].append(
"vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
"int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
"vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes
@@ -5493,9 +5408,13 @@ void TBuiltIns::initialize(int version, EProfile profile, const SpvVersion& spvV
"out int gl_Layer;"
"\n");
- if (version >= 450)
+ if (version >= 430)
stageBuiltins[EShLangTessEvaluation].append(
"out int gl_ViewportMask[];" // GL_NV_viewport_array2
+ );
+
+ if (version >= 450)
+ stageBuiltins[EShLangTessEvaluation].append(
"out vec4 gl_SecondaryPositionNV;" // GL_NV_stereo_view_rendering
"out int gl_SecondaryViewportMaskNV[];" // GL_NV_stereo_view_rendering
"out vec4 gl_PositionPerViewNV[];" // GL_NVX_multiview_per_view_attributes
@@ -6329,38 +6248,44 @@ void TBuiltIns::addQueryFunctions(TSampler sampler, const TString& typeName, int
//
// textureQueryLod(), fragment stage only
// Also enabled with extension GL_ARB_texture_query_lod
+ // Extension GL_ARB_texture_query_lod says that textureQueryLOD() also exist at extension.
if (profile != EEsProfile && version >= 150 && sampler.isCombined() && sampler.dim != EsdRect &&
! sampler.isMultiSample() && ! sampler.isBuffer()) {
- for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
- if (f16TexAddr && sampler.type != EbtFloat16)
- continue;
- stageBuiltins[EShLangFragment].append("vec2 textureQueryLod(");
- stageBuiltins[EShLangFragment].append(typeName);
+
+ const TString funcName[2] = {"vec2 textureQueryLod(", "vec2 textureQueryLOD("};
+
+ for (int i = 0; i < 2; ++i){
+ for (int f16TexAddr = 0; f16TexAddr < 2; ++f16TexAddr) {
+ if (f16TexAddr && sampler.type != EbtFloat16)
+ continue;
+ stageBuiltins[EShLangFragment].append(funcName[i]);
+ stageBuiltins[EShLangFragment].append(typeName);
+ if (dimMap[sampler.dim] == 1)
+ if (f16TexAddr)
+ stageBuiltins[EShLangFragment].append(", float16_t");
+ else
+ stageBuiltins[EShLangFragment].append(", float");
+ else {
+ if (f16TexAddr)
+ stageBuiltins[EShLangFragment].append(", f16vec");
+ else
+ stageBuiltins[EShLangFragment].append(", vec");
+ stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
+ }
+ stageBuiltins[EShLangFragment].append(");\n");
+ }
+
+ stageBuiltins[EShLangCompute].append(funcName[i]);
+ stageBuiltins[EShLangCompute].append(typeName);
if (dimMap[sampler.dim] == 1)
- if (f16TexAddr)
- stageBuiltins[EShLangFragment].append(", float16_t");
- else
- stageBuiltins[EShLangFragment].append(", float");
+ stageBuiltins[EShLangCompute].append(", float");
else {
- if (f16TexAddr)
- stageBuiltins[EShLangFragment].append(", f16vec");
- else
- stageBuiltins[EShLangFragment].append(", vec");
- stageBuiltins[EShLangFragment].append(postfixes[dimMap[sampler.dim]]);
+ stageBuiltins[EShLangCompute].append(", vec");
+ stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
}
- stageBuiltins[EShLangFragment].append(");\n");
+ stageBuiltins[EShLangCompute].append(");\n");
}
-
- stageBuiltins[EShLangCompute].append("vec2 textureQueryLod(");
- stageBuiltins[EShLangCompute].append(typeName);
- if (dimMap[sampler.dim] == 1)
- stageBuiltins[EShLangCompute].append(", float");
- else {
- stageBuiltins[EShLangCompute].append(", vec");
- stageBuiltins[EShLangCompute].append(postfixes[dimMap[sampler.dim]]);
- }
- stageBuiltins[EShLangCompute].append(");\n");
}
//
@@ -7701,6 +7626,11 @@ static void BuiltInVariable(const char* name, TBuiltInVariable builtIn, TSymbolT
symQualifier.builtIn = builtIn;
}
+static void RetargetVariable(const char* from, const char* to, TSymbolTable& symbolTable)
+{
+ symbolTable.retargetSymbol(from, to);
+}
+
//
// For built-in variables inside a named block.
// SpecialQualifier() won't ever go inside a block; their member's qualifier come
@@ -7768,8 +7698,8 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
if (spvVersion.vulkan > 0 && spvVersion.vulkanRelaxed) {
// treat these built-ins as aliases of VertexIndex and InstanceIndex
- BuiltInVariable("gl_VertexID", EbvVertexIndex, symbolTable);
- BuiltInVariable("gl_InstanceID", EbvInstanceIndex, symbolTable);
+ RetargetVariable("gl_InstanceID", "gl_InstanceIndex", symbolTable);
+ RetargetVariable("gl_VertexID", "gl_VertexIndex", symbolTable);
}
if (profile != EEsProfile) {
@@ -8140,7 +8070,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
if (profile != EEsProfile && version < 400) {
- symbolTable.setFunctionExtensions("textureQueryLod", 1, &E_GL_ARB_texture_query_lod);
+ symbolTable.setFunctionExtensions("textureQueryLOD", 1, &E_GL_ARB_texture_query_lod);
}
if (profile != EEsProfile && version >= 460) {
@@ -8403,7 +8333,7 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
symbolTable.setFunctionExtensions("clockARB", 1, &E_GL_ARB_shader_clock);
symbolTable.setFunctionExtensions("clock2x32ARB", 1, &E_GL_ARB_shader_clock);
- symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock);
+ symbolTable.setFunctionExtensions("clockRealtimeEXT", 1, &E_GL_EXT_shader_realtime_clock);
symbolTable.setFunctionExtensions("clockRealtime2x32EXT", 1, &E_GL_EXT_shader_realtime_clock);
if (profile == EEsProfile && version < 320) {
@@ -8423,10 +8353,11 @@ void TBuiltIns::identifyBuiltIns(int version, EProfile profile, const SpvVersion
}
if (profile != EEsProfile && version < 330 ) {
- symbolTable.setFunctionExtensions("floatBitsToInt", 1, &E_GL_ARB_shader_bit_encoding);
- symbolTable.setFunctionExtensions("floatBitsToUint", 1, &E_GL_ARB_shader_bit_encoding);
- symbolTable.setFunctionExtensions("intBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
- symbolTable.setFunctionExtensions("uintBitsToFloat", 1, &E_GL_ARB_shader_bit_encoding);
+ const char* bitsConvertExt[2] = {E_GL_ARB_shader_bit_encoding, E_GL_ARB_gpu_shader5};
+ symbolTable.setFunctionExtensions("floatBitsToInt", 2, bitsConvertExt);
+ symbolTable.setFunctionExtensions("floatBitsToUint", 2, bitsConvertExt);
+ symbolTable.setFunctionExtensions("intBitsToFloat", 2, bitsConvertExt);
+ symbolTable.setFunctionExtensions("uintBitsToFloat", 2, bitsConvertExt);
}
if (profile != EEsProfile && version < 430 ) {
diff --git a/thirdparty/glslang/glslang/MachineIndependent/Intermediate.cpp b/thirdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
index 0278445969..6aea5b3d7c 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/Intermediate.cpp
@@ -416,20 +416,24 @@ TIntermTyped* TIntermediate::addUnaryMath(TOperator op, TIntermTyped* child,
// TODO: but, did this bypass constant folding?
//
switch (op) {
- case EOpConstructInt8:
- case EOpConstructUint8:
- case EOpConstructInt16:
- case EOpConstructUint16:
- case EOpConstructInt:
- case EOpConstructUint:
- case EOpConstructInt64:
- case EOpConstructUint64:
- case EOpConstructBool:
- case EOpConstructFloat:
- case EOpConstructDouble:
- case EOpConstructFloat16:
- return child;
- default: break; // some compilers want this
+ case EOpConstructInt8:
+ case EOpConstructUint8:
+ case EOpConstructInt16:
+ case EOpConstructUint16:
+ case EOpConstructInt:
+ case EOpConstructUint:
+ case EOpConstructInt64:
+ case EOpConstructUint64:
+ case EOpConstructBool:
+ case EOpConstructFloat:
+ case EOpConstructDouble:
+ case EOpConstructFloat16: {
+ TIntermUnary* unary_node = child->getAsUnaryNode();
+ if (unary_node != nullptr)
+ unary_node->updatePrecision();
+ return child;
+ }
+ default: break; // some compilers want this
}
//
@@ -3778,6 +3782,28 @@ bool TIntermediate::promoteAggregate(TIntermAggregate& node)
// Propagate precision qualifiers *up* from children to parent, and then
// back *down* again to the children's subtrees.
+void TIntermAggregate::updatePrecision()
+{
+ if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
+ getBasicType() == EbtFloat || getBasicType() == EbtFloat16) {
+ TPrecisionQualifier maxPrecision = EpqNone;
+ TIntermSequence operands = getSequence();
+ for (unsigned int i = 0; i < operands.size(); ++i) {
+ TIntermTyped* typedNode = operands[i]->getAsTyped();
+ assert(typedNode);
+ maxPrecision = std::max(maxPrecision, typedNode->getQualifier().precision);
+ }
+ getQualifier().precision = maxPrecision;
+ for (unsigned int i = 0; i < operands.size(); ++i) {
+ TIntermTyped* typedNode = operands[i]->getAsTyped();
+ assert(typedNode);
+ typedNode->propagatePrecision(maxPrecision);
+ }
+ }
+}
+
+// Propagate precision qualifiers *up* from children to parent, and then
+// back *down* again to the children's subtrees.
void TIntermBinary::updatePrecision()
{
if (getBasicType() == EbtInt || getBasicType() == EbtUint ||
@@ -3876,7 +3902,7 @@ TIntermTyped* TIntermediate::promoteConstantUnion(TBasicType promoteTo, TIntermC
case EbtFloat16: PROMOTE(setDConst, double, Get); break; \
case EbtFloat: PROMOTE(setDConst, double, Get); break; \
case EbtDouble: PROMOTE(setDConst, double, Get); break; \
- case EbtInt8: PROMOTE(setI8Const, char, Get); break; \
+ case EbtInt8: PROMOTE(setI8Const, signed char, Get); break; \
case EbtInt16: PROMOTE(setI16Const, short, Get); break; \
case EbtInt: PROMOTE(setIConst, int, Get); break; \
case EbtInt64: PROMOTE(setI64Const, long long, Get); break; \
diff --git a/thirdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp b/thirdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
index 02cca409e1..1da50d62f9 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/ParseContextBase.cpp
@@ -622,6 +622,19 @@ void TParseContextBase::growGlobalUniformBlock(const TSourceLoc& loc, TType& mem
globalUniformBlock->getWritableType().getQualifier().layoutBinding = globalUniformBinding;
globalUniformBlock->getWritableType().getQualifier().layoutSet = globalUniformSet;
+ // Check for declarations of this default uniform that already exist due to other compilation units.
+ TSymbol* symbol = symbolTable.find(memberName);
+ if (symbol) {
+ if (memberType != symbol->getType()) {
+ TString err;
+ err += "\"" + memberType.getCompleteString() + "\"";
+ err += " versus ";
+ err += "\"" + symbol->getType().getCompleteString() + "\"";
+ error(loc, "Types must match:", memberType.getFieldName().c_str(), err.c_str());
+ }
+ return;
+ }
+
// Add the requested member as a member to the global block.
TType* type = new TType;
type->shallowCopy(memberType);
diff --git a/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp b/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
index b957bb87ca..fa291160cb 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.cpp
@@ -1321,7 +1321,7 @@ TIntermTyped* TParseContext::handleFunctionCall(const TSourceLoc& loc, TFunction
// Find it in the symbol table.
//
const TFunction* fnCandidate;
- bool builtIn;
+ bool builtIn {false};
fnCandidate = findFunction(loc, *function, builtIn);
if (fnCandidate) {
// This is a declared function that might map to
@@ -2495,6 +2495,8 @@ void TParseContext::builtInOpCheck(const TSourceLoc& loc, const TFunction& fnCan
case EOpEmitStreamVertex:
case EOpEndStreamPrimitive:
+ if (version == 150)
+ requireExtensions(loc, 1, &E_GL_ARB_gpu_shader5, "if the verison is 150 , the EmitStreamVertex and EndStreamPrimitive only support at extension GL_ARB_gpu_shader5");
intermediate.setMultiStream();
break;
@@ -3029,11 +3031,14 @@ void TParseContext::constantValueCheck(TIntermTyped* node, const char* token)
//
// Both test, and if necessary spit out an error, to see if the node is really
-// an integer.
+// a 32-bit integer or can implicitly convert to one.
//
void TParseContext::integerCheck(const TIntermTyped* node, const char* token)
{
- if ((node->getBasicType() == EbtInt || node->getBasicType() == EbtUint) && node->isScalar())
+ auto from_type = node->getBasicType();
+ if ((from_type == EbtInt || from_type == EbtUint ||
+ intermediate.canImplicitlyPromote(from_type, EbtInt, EOpNull) ||
+ intermediate.canImplicitlyPromote(from_type, EbtUint, EOpNull)) && node->isScalar())
return;
error(node->getLoc(), "scalar integer expression required", token, "");
@@ -6207,11 +6212,13 @@ void TParseContext::layoutTypeCheck(const TSourceLoc& loc, const TType& type)
#ifndef GLSLANG_WEB
if (qualifier.hasXfbOffset() && qualifier.hasXfbBuffer()) {
- int repeated = intermediate.addXfbBufferOffset(type);
- if (repeated >= 0)
- error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
- if (type.isUnsizedArray())
+ if (type.isUnsizedArray()) {
error(loc, "unsized array", "xfb_offset", "in buffer %d", qualifier.layoutXfbBuffer);
+ } else {
+ int repeated = intermediate.addXfbBufferOffset(type);
+ if (repeated >= 0)
+ error(loc, "overlapping offsets at", "xfb_offset", "offset %d in buffer %d", repeated, qualifier.layoutXfbBuffer);
+ }
// "The offset must be a multiple of the size of the first component of the first
// qualified variable or block member, or a compile-time error results. Further, if applied to an aggregate
@@ -6493,6 +6500,8 @@ void TParseContext::layoutQualifierCheck(const TSourceLoc& loc, const TQualifier
error(loc, "can only be used with a uniform", "push_constant", "");
if (qualifier.hasSet())
error(loc, "cannot be used with push_constant", "set", "");
+ if (qualifier.hasBinding())
+ error(loc, "cannot be used with push_constant", "binding", "");
}
if (qualifier.hasBufferReference()) {
if (qualifier.storage != EvqBuffer)
@@ -6647,8 +6656,10 @@ const TFunction* TParseContext::findFunction(const TSourceLoc& loc, const TFunct
: findFunctionExact(loc, call, builtIn));
else if (version < 120)
function = findFunctionExact(loc, call, builtIn);
- else if (version < 400)
- function = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
+ else if (version < 400) {
+ bool needfindFunction400 = extensionTurnedOn(E_GL_ARB_gpu_shader_fp64) || extensionTurnedOn(E_GL_ARB_gpu_shader5);
+ function = needfindFunction400 ? findFunction400(loc, call, builtIn) : findFunction120(loc, call, builtIn);
+ }
else if (explicitTypesEnabled)
function = findFunctionExplicitTypes(loc, call, builtIn);
else
@@ -7691,7 +7702,13 @@ TIntermTyped* TParseContext::addConstructor(const TSourceLoc& loc, TIntermNode*
return nullptr;
}
- return intermediate.setAggregateOperator(aggrNode, op, type, loc);
+ TIntermTyped *ret_node = intermediate.setAggregateOperator(aggrNode, op, type, loc);
+
+ TIntermAggregate *agg_node = ret_node->getAsAggregate();
+ if (agg_node && (agg_node->isVector() || agg_node->isArray() || agg_node->isMatrix()))
+ agg_node->updatePrecision();
+
+ return ret_node;
}
// Function for constructor implementation. Calls addUnaryMath with appropriate EOp value
@@ -9237,11 +9254,14 @@ TIntermNode* TParseContext::addSwitch(const TSourceLoc& loc, TIntermTyped* expre
// "it is an error to have no statement between a label and the end of the switch statement."
// The specifications were updated to remove this (being ill-defined what a "statement" was),
// so, this became a warning. However, 3.0 tests still check for the error.
- if (isEsProfile() && version <= 300 && ! relaxedErrors())
+ if (isEsProfile() && (version <= 300 || version >= 320) && ! relaxedErrors())
+ error(loc, "last case/default label not followed by statements", "switch", "");
+ else if (!isEsProfile() && (version <= 430 || version >= 460))
error(loc, "last case/default label not followed by statements", "switch", "");
else
warn(loc, "last case/default label not followed by statements", "switch", "");
+
// emulate a break for error recovery
lastStatements = intermediate.makeAggregate(intermediate.addBranch(EOpBreak, loc));
lastStatements->setOperator(EOpSequence);
diff --git a/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.h b/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.h
index de44884653..885fd90810 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.h
+++ b/thirdparty/glslang/glslang/MachineIndependent/ParseHelper.h
@@ -241,7 +241,7 @@ protected:
// override this to set the language-specific name
virtual const char* getAtomicCounterBlockName() const { return ""; }
virtual void setAtomicCounterBlockDefaults(TType&) const {}
- virtual void setInvariant(const TSourceLoc& loc, const char* builtin) {}
+ virtual void setInvariant(const TSourceLoc&, const char*) {}
virtual void finalizeAtomicCounterBlockLayout(TVariable&) {}
bool isAtomicCounterBlock(const TSymbol& symbol) {
const TVariable* var = symbol.getAsVariable();
@@ -472,7 +472,7 @@ public:
// Determine loop control from attributes
void handleLoopAttributes(const TAttributes& attributes, TIntermNode*);
// Function attributes
- void handleFunctionAttributes(const TSourceLoc&, const TAttributes&, TFunction*);
+ void handleFunctionAttributes(const TSourceLoc&, const TAttributes&);
// GL_EXT_spirv_intrinsics
TSpirvRequirement* makeSpirvRequirement(const TSourceLoc& loc, const TString& name,
@@ -480,7 +480,6 @@ public:
TSpirvRequirement* mergeSpirvRequirements(const TSourceLoc& loc, TSpirvRequirement* spirvReq1,
TSpirvRequirement* spirvReq2);
TSpirvTypeParameters* makeSpirvTypeParameters(const TSourceLoc& loc, const TIntermConstantUnion* constant);
- TSpirvTypeParameters* makeSpirvTypeParameters(const TPublicType& type);
TSpirvTypeParameters* mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1,
TSpirvTypeParameters* spirvTypeParams2);
TSpirvInstruction* makeSpirvInstruction(const TSourceLoc& loc, const TString& name, const TString& value);
diff --git a/thirdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp b/thirdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
index d02eae6fcc..bcf2c33ff7 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/ShaderLang.cpp
@@ -1343,7 +1343,6 @@ int ShInitialize()
glslang::GetGlobalLock();
++NumberOfClients;
- glslang::ReleaseGlobalLock();
if (PerProcessGPA == nullptr)
PerProcessGPA = new TPoolAllocator();
@@ -1353,6 +1352,7 @@ int ShInitialize()
glslang::HlslScanContext::fillInKeywordMap();
#endif
+ glslang::ReleaseGlobalLock();
return 1;
}
@@ -1415,9 +1415,10 @@ int ShFinalize()
--NumberOfClients;
assert(NumberOfClients >= 0);
bool finalize = NumberOfClients == 0;
- glslang::ReleaseGlobalLock();
- if (! finalize)
+ if (! finalize) {
+ glslang::ReleaseGlobalLock();
return 1;
+ }
for (int version = 0; version < VersionCount; ++version) {
for (int spvVersion = 0; spvVersion < SpvVersionCount; ++spvVersion) {
@@ -1455,6 +1456,7 @@ int ShFinalize()
glslang::HlslScanContext::deleteKeywordMap();
#endif
+ glslang::ReleaseGlobalLock();
return 1;
}
@@ -1827,6 +1829,7 @@ void TShader::setUniqueId(unsigned long long id)
}
void TShader::setInvertY(bool invert) { intermediate->setInvertY(invert); }
+void TShader::setDxPositionW(bool invert) { intermediate->setDxPositionW(invert); }
void TShader::setNanMinMaxClamp(bool useNonNan) { intermediate->setNanMinMaxClamp(useNonNan); }
#ifndef GLSLANG_WEB
diff --git a/thirdparty/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp b/thirdparty/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp
index 38094eaaf7..6650f7d9ee 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/SpirvIntrinsics.cpp
@@ -130,11 +130,11 @@ void TIntermediate::insertSpirvExecutionModeId(int executionMode, const TIntermA
spirvExecutionMode = new TSpirvExecutionMode;
assert(args);
- TVector<const TIntermConstantUnion*> extraOperands;
+ TVector<const TIntermTyped*> extraOperands;
for (auto arg : args->getSequence()) {
- auto extraOperand = arg->getAsConstantUnion();
- assert(extraOperand != nullptr);
+ auto extraOperand = arg->getAsTyped();
+ assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant());
extraOperands.push_back(extraOperand);
}
spirvExecutionMode->modeIds[executionMode] = extraOperands;
@@ -165,10 +165,10 @@ void TQualifier::setSpirvDecorateId(int decoration, const TIntermAggregate* args
spirvDecorate = new TSpirvDecorate;
assert(args);
- TVector<const TIntermConstantUnion*> extraOperands;
+ TVector<const TIntermTyped*> extraOperands;
for (auto arg : args->getSequence()) {
- auto extraOperand = arg->getAsConstantUnion();
- assert(extraOperand != nullptr);
+ auto extraOperand = arg->getAsTyped();
+ assert(extraOperand != nullptr && extraOperand->getQualifier().isConstant());
extraOperands.push_back(extraOperand);
}
spirvDecorate->decorateIds[decoration] = extraOperands;
@@ -201,25 +201,27 @@ TString TQualifier::getSpirvDecorateQualifierString() const
const auto appendBool = [&](bool b) { qualifierString.append(std::to_string(b).c_str()); };
const auto appendStr = [&](const char* s) { qualifierString.append(s); };
- const auto appendDecorate = [&](const TIntermConstantUnion* constant) {
+ const auto appendDecorate = [&](const TIntermTyped* constant) {
+ auto& constArray = constant->getAsConstantUnion() != nullptr ? constant->getAsConstantUnion()->getConstArray()
+ : constant->getAsSymbolNode()->getConstArray();
if (constant->getBasicType() == EbtFloat) {
- float value = static_cast<float>(constant->getConstArray()[0].getDConst());
+ float value = static_cast<float>(constArray[0].getDConst());
appendFloat(value);
}
else if (constant->getBasicType() == EbtInt) {
- int value = constant->getConstArray()[0].getIConst();
+ int value = constArray[0].getIConst();
appendInt(value);
}
else if (constant->getBasicType() == EbtUint) {
- unsigned value = constant->getConstArray()[0].getUConst();
+ unsigned value = constArray[0].getUConst();
appendUint(value);
}
else if (constant->getBasicType() == EbtBool) {
- bool value = constant->getConstArray()[0].getBConst();
+ bool value = constArray[0].getBConst();
appendBool(value);
}
else if (constant->getBasicType() == EbtString) {
- const TString* value = constant->getConstArray()[0].getSConst();
+ const TString* value = constArray[0].getSConst();
appendStr(value->c_str());
}
else
@@ -290,13 +292,6 @@ TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TSourceLoc& l
return spirvTypeParams;
}
-TSpirvTypeParameters* TParseContext::makeSpirvTypeParameters(const TPublicType& type)
-{
- TSpirvTypeParameters* spirvTypeParams = new TSpirvTypeParameters;
- spirvTypeParams->push_back(TSpirvTypeParameter(new TType(type)));
- return spirvTypeParams;
-}
-
TSpirvTypeParameters* TParseContext::mergeSpirvTypeParameters(TSpirvTypeParameters* spirvTypeParams1, TSpirvTypeParameters* spirvTypeParams2)
{
// Merge SPIR-V type parameters of the second one to the first one
diff --git a/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp b/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
index 747b43666d..a3ffa0c467 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.cpp
@@ -279,8 +279,14 @@ TFunction::~TFunction()
//
TSymbolTableLevel::~TSymbolTableLevel()
{
- for (tLevel::iterator it = level.begin(); it != level.end(); ++it)
- delete (*it).second;
+ for (tLevel::iterator it = level.begin(); it != level.end(); ++it) {
+ const TString& name = it->first;
+ auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(),
+ [&name](const std::pair<TString, TString>& i) { return i.first == name; });
+ if (retargetIter == retargetedSymbols.end())
+ delete (*it).second;
+ }
+
delete [] defaultPrecision;
}
@@ -418,6 +424,10 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const
TSymbolTableLevel *symTableLevel = new TSymbolTableLevel();
symTableLevel->anonId = anonId;
symTableLevel->thisLevel = thisLevel;
+ symTableLevel->retargetedSymbols.clear();
+ for (auto &s : retargetedSymbols) {
+ symTableLevel->retargetedSymbols.push_back({s.first, s.second});
+ }
std::vector<bool> containerCopied(anonId, false);
tLevel::const_iterator iter;
for (iter = level.begin(); iter != level.end(); ++iter) {
@@ -433,8 +443,21 @@ TSymbolTableLevel* TSymbolTableLevel::clone() const
symTableLevel->insert(*container, false);
containerCopied[anon->getAnonId()] = true;
}
- } else
+ } else {
+ const TString& name = iter->first;
+ auto retargetIter = std::find_if(retargetedSymbols.begin(), retargetedSymbols.end(),
+ [&name](const std::pair<TString, TString>& i) { return i.first == name; });
+ if (retargetIter != retargetedSymbols.end())
+ continue;
symTableLevel->insert(*iter->second->clone(), false);
+ }
+ }
+ // Now point retargeted symbols to the newly created versions of them
+ for (auto &s : retargetedSymbols) {
+ TSymbol* sym = symTableLevel->find(s.second);
+ if (!sym)
+ continue;
+ symTableLevel->insert(s.first, sym);
}
return symTableLevel;
diff --git a/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.h b/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.h
index 2196093073..31312ecbaa 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.h
+++ b/thirdparty/glslang/glslang/MachineIndependent/SymbolTable.h
@@ -84,7 +84,7 @@ typedef TVector<const char*> TExtensionList;
class TSymbol {
public:
POOL_ALLOCATOR_NEW_DELETE(GetThreadPoolAllocator())
- explicit TSymbol(const TString *n) : name(n), extensions(0), writable(true) { }
+ explicit TSymbol(const TString *n) : name(n), uniqueId(0), extensions(0), writable(true) { }
virtual TSymbol* clone() const = 0;
virtual ~TSymbol() { } // rely on all symbol owned memory coming from the pool
@@ -413,13 +413,20 @@ public:
TSymbolTableLevel() : defaultPrecision(0), anonId(0), thisLevel(false) { }
~TSymbolTableLevel();
- bool insert(TSymbol& symbol, bool separateNameSpaces)
+ bool insert(const TString& name, TSymbol* symbol) {
+ return level.insert(tLevelPair(name, symbol)).second;
+ }
+
+ bool insert(TSymbol& symbol, bool separateNameSpaces, const TString& forcedKeyName = TString())
{
//
// returning true means symbol was added to the table with no semantic errors
//
const TString& name = symbol.getName();
- if (name == "") {
+ if (forcedKeyName.length()) {
+ return level.insert(tLevelPair(forcedKeyName, &symbol)).second;
+ }
+ else if (name == "") {
symbol.getAsVariable()->setAnonId(anonId++);
// An empty name means an anonymous container, exposing its members to the external scope.
// Give it a name and insert its members in the symbol table, pointing to the container.
@@ -471,6 +478,16 @@ public:
return true;
}
+ void retargetSymbol(const TString& from, const TString& to) {
+ tLevel::const_iterator fromIt = level.find(from);
+ tLevel::const_iterator toIt = level.find(to);
+ if (fromIt == level.end() || toIt == level.end())
+ return;
+ delete fromIt->second;
+ level[from] = toIt->second;
+ retargetedSymbols.push_back({from, to});
+ }
+
TSymbol* find(const TString& name) const
{
tLevel::const_iterator it = level.find(name);
@@ -583,6 +600,8 @@ protected:
tLevel level; // named mappings
TPrecisionQualifier *defaultPrecision;
+ // pair<FromName, ToName>
+ TVector<std::pair<TString, TString>> retargetedSymbols;
int anonId;
bool thisLevel; // True if this level of the symbol table is a structure scope containing member function
// that are supposed to see anonymous access to member variables.
@@ -788,6 +807,12 @@ public:
return symbol;
}
+ void retargetSymbol(const TString& from, const TString& to) {
+ int level = currentLevel();
+ table[level]->retargetSymbol(from, to);
+ }
+
+
// Find of a symbol that returns how many layers deep of nested
// structures-with-member-functions ('this' scopes) deep the symbol was
// found in.
diff --git a/thirdparty/glslang/glslang/MachineIndependent/Versions.cpp b/thirdparty/glslang/glslang/MachineIndependent/Versions.cpp
index 097ee84552..8d96e0e104 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/Versions.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/Versions.cpp
@@ -225,6 +225,9 @@ void TParseVersions::initializeExtensionBehavior()
extensionBehavior[E_GL_ARB_shading_language_packing] = EBhDisable;
extensionBehavior[E_GL_ARB_texture_query_lod] = EBhDisable;
extensionBehavior[E_GL_ARB_vertex_attrib_64bit] = EBhDisable;
+ extensionBehavior[E_GL_ARB_draw_instanced] = EBhDisable;
+ extensionBehavior[E_GL_ARB_fragment_coord_conventions] = EBhDisable;
+
extensionBehavior[E_GL_KHR_shader_subgroup_basic] = EBhDisable;
extensionBehavior[E_GL_KHR_shader_subgroup_vote] = EBhDisable;
@@ -465,6 +468,8 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_ARB_shader_storage_buffer_object 1\n"
"#define GL_ARB_texture_query_lod 1\n"
"#define GL_ARB_vertex_attrib_64bit 1\n"
+ "#define GL_ARB_draw_instanced 1\n"
+ "#define GL_ARB_fragment_coord_conventions 1\n"
"#define GL_EXT_shader_non_constant_global_initializers 1\n"
"#define GL_EXT_shader_image_load_formatted 1\n"
"#define GL_EXT_post_depth_coverage 1\n"
@@ -482,6 +487,7 @@ void TParseVersions::getPreamble(std::string& preamble)
"#define GL_EXT_debug_printf 1\n"
"#define GL_EXT_fragment_shading_rate 1\n"
"#define GL_EXT_shared_memory_block 1\n"
+ "#define GL_EXT_shader_integer_mix 1\n"
// GL_KHR_shader_subgroup
"#define GL_KHR_shader_subgroup_basic 1\n"
diff --git a/thirdparty/glslang/glslang/MachineIndependent/Versions.h b/thirdparty/glslang/glslang/MachineIndependent/Versions.h
index 949a7a1739..96a6e1fc52 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/Versions.h
+++ b/thirdparty/glslang/glslang/MachineIndependent/Versions.h
@@ -161,6 +161,8 @@ const char* const E_GL_ARB_shader_storage_buffer_object = "GL_ARB_shader_storage
const char* const E_GL_ARB_shading_language_packing = "GL_ARB_shading_language_packing";
const char* const E_GL_ARB_texture_query_lod = "GL_ARB_texture_query_lod";
const char* const E_GL_ARB_vertex_attrib_64bit = "GL_ARB_vertex_attrib_64bit";
+const char* const E_GL_ARB_draw_instanced = "GL_ARB_draw_instanced";
+const char* const E_GL_ARB_fragment_coord_conventions = "GL_ARB_fragment_coord_conventions";
const char* const E_GL_KHR_shader_subgroup_basic = "GL_KHR_shader_subgroup_basic";
const char* const E_GL_KHR_shader_subgroup_vote = "GL_KHR_shader_subgroup_vote";
diff --git a/thirdparty/glslang/glslang/MachineIndependent/attribute.cpp b/thirdparty/glslang/glslang/MachineIndependent/attribute.cpp
index 8a92f6ae09..df7fdc2a60 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/attribute.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/attribute.cpp
@@ -347,7 +347,7 @@ void TParseContext::handleLoopAttributes(const TAttributes& attributes, TIntermN
//
// Function attributes
//
-void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttributes& attributes, TFunction* function)
+void TParseContext::handleFunctionAttributes(const TSourceLoc& loc, const TAttributes& attributes)
{
for (auto it = attributes.begin(); it != attributes.end(); ++it) {
if (it->size() > 0) {
diff --git a/thirdparty/glslang/glslang/MachineIndependent/glslang.y b/thirdparty/glslang/glslang/MachineIndependent/glslang.y
index b77f4617be..df53eb5bd8 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/glslang.y
+++ b/thirdparty/glslang/glslang/MachineIndependent/glslang.y
@@ -983,20 +983,20 @@ function_prototype
$$.function = $1;
$$.loc = $2.loc;
parseContext.requireExtensions($2.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
- parseContext.handleFunctionAttributes($2.loc, *$3, $$.function);
+ parseContext.handleFunctionAttributes($2.loc, *$3);
}
| attribute function_declarator RIGHT_PAREN {
$$.function = $2;
$$.loc = $3.loc;
parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
- parseContext.handleFunctionAttributes($3.loc, *$1, $$.function);
+ parseContext.handleFunctionAttributes($3.loc, *$1);
}
| attribute function_declarator RIGHT_PAREN attribute {
$$.function = $2;
$$.loc = $3.loc;
parseContext.requireExtensions($3.loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
- parseContext.handleFunctionAttributes($3.loc, *$1, $$.function);
- parseContext.handleFunctionAttributes($3.loc, *$4, $$.function);
+ parseContext.handleFunctionAttributes($3.loc, *$1);
+ parseContext.handleFunctionAttributes($3.loc, *$4);
}
;
@@ -3926,6 +3926,7 @@ iteration_statement_nonattributed
--parseContext.controlFlowNestingLevel;
}
| DO {
+ parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
@@ -3937,6 +3938,7 @@ iteration_statement_nonattributed
parseContext.boolCheck($8.loc, $6);
$$ = parseContext.intermediate.addLoop($3, $6, 0, false, $4.loc);
+ parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
--parseContext.loopNestingLevel;
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
@@ -4365,9 +4367,6 @@ spirv_type_parameter
: constant_expression {
$$ = parseContext.makeSpirvTypeParameters($1->getLoc(), $1->getAsConstantUnion());
}
- | type_specifier {
- $$ = parseContext.makeSpirvTypeParameters($1);
- }
spirv_instruction_qualifier
: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN {
diff --git a/thirdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp b/thirdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
index dba06aefef..5ba6a6d495 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/glslang_tab.cpp
@@ -1034,16 +1034,16 @@ union yyalloc
/* YYFINAL -- State number of the termination state. */
#define YYFINAL 442
/* YYLAST -- Last index in YYTABLE. */
-#define YYLAST 12453
+#define YYLAST 12452
/* YYNTOKENS -- Number of terminals. */
#define YYNTOKENS 455
/* YYNNTS -- Number of nonterminals. */
#define YYNNTS 131
/* YYNRULES -- Number of rules. */
-#define YYNRULES 684
+#define YYNRULES 683
/* YYNSTATES -- Number of states. */
-#define YYNSTATES 930
+#define YYNSTATES 929
/* YYMAXUTOK -- Last valid token kind. */
#define YYMAXUTOK 709
@@ -1197,15 +1197,15 @@ static const yytype_int16 yyrline[] =
3732, 3739, 3739, 3753, 3756, 3764, 3772, 3783, 3784, 3788,
3792, 3800, 3807, 3811, 3819, 3823, 3836, 3840, 3848, 3848,
3868, 3871, 3877, 3889, 3901, 3905, 3913, 3913, 3928, 3928,
- 3944, 3944, 3965, 3968, 3974, 3977, 3983, 3987, 3994, 3999,
- 4004, 4011, 4014, 4018, 4023, 4027, 4037, 4041, 4050, 4053,
- 4057, 4066, 4066, 4108, 4113, 4116, 4121, 4124, 4131, 4134,
- 4139, 4142, 4147, 4150, 4155, 4158, 4163, 4167, 4172, 4176,
- 4181, 4185, 4192, 4195, 4200, 4203, 4206, 4209, 4212, 4217,
- 4226, 4237, 4242, 4250, 4254, 4259, 4263, 4268, 4272, 4277,
- 4281, 4288, 4291, 4296, 4299, 4302, 4305, 4310, 4318, 4328,
- 4332, 4337, 4341, 4346, 4350, 4357, 4360, 4365, 4368, 4373,
- 4376, 4382, 4385, 4390, 4393
+ 3946, 3946, 3967, 3970, 3976, 3979, 3985, 3989, 3996, 4001,
+ 4006, 4013, 4016, 4020, 4025, 4029, 4039, 4043, 4052, 4055,
+ 4059, 4068, 4068, 4110, 4115, 4118, 4123, 4126, 4133, 4136,
+ 4141, 4144, 4149, 4152, 4157, 4160, 4165, 4169, 4174, 4178,
+ 4183, 4187, 4194, 4197, 4202, 4205, 4208, 4211, 4214, 4219,
+ 4228, 4239, 4244, 4252, 4256, 4261, 4265, 4270, 4274, 4279,
+ 4283, 4290, 4293, 4298, 4301, 4304, 4307, 4312, 4320, 4330,
+ 4334, 4339, 4343, 4348, 4352, 4359, 4362, 4367, 4372, 4375,
+ 4381, 4384, 4389, 4392
};
#endif
@@ -1433,7 +1433,7 @@ static const yytype_int16 yytoknum[] =
};
#endif
-#define YYPACT_NINF (-863)
+#define YYPACT_NINF (-859)
#define yypact_value_is_default(Yyn) \
((Yyn) == YYPACT_NINF)
@@ -1447,99 +1447,99 @@ static const yytype_int16 yytoknum[] =
STATE-NUM. */
static const yytype_int16 yypact[] =
{
- 4549, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -260, -182, -177, -163, -130,
- -115, -100, -89, -863, -863, -196, -863, -863, -863, -863,
- -863, -324, -863, -863, -863, -863, -863, -306, -863, -863,
- -863, -863, -863, -863, -77, -66, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -332, -175,
- -153, -161, 7713, -266, -863, -71, -863, -863, -863, -863,
- 5453, -863, -863, -863, -863, -116, -863, -863, 933, -863,
- -863, 7713, -35, -863, -863, -863, 5905, -54, -139, -138,
- -137, -128, -124, -54, -123, -51, 12061, -863, -15, -347,
- -44, -863, -295, -863, -9, -6, 7713, -863, -863, -863,
- 7713, -39, -38, -863, -303, -863, -226, -863, -863, 10762,
- -3, -863, -863, -863, 1, -32, 7713, -863, -5, -8,
- -1, -863, -230, -863, -219, -2, 3, 4, 5, -215,
- 6, 8, 10, 11, 12, 15, -214, 13, 16, 21,
- -134, -863, 17, 7713, -863, 19, -863, -212, -863, -863,
- -211, 9030, -863, -273, 1385, -863, -863, -863, -863, -863,
- -3, -263, -863, 9463, -236, -863, -28, -863, -106, 10762,
- 10762, -863, 10762, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -264, -863, -863, -863, 23, -203, 11195, 25,
- -863, 10762, -863, -863, -311, 24, -6, 29, -863, -309,
- -54, -863, -20, -863, -323, 28, -118, 10762, -112, -863,
- -155, -111, 10762, -103, 35, -98, -54, -863, 11628, -863,
- -94, 10762, 32, -51, -863, 7713, 18, 6357, -863, 7713,
- 10762, -863, -347, -863, 33, -863, -863, -72, -254, -86,
- -297, -68, -13, 26, 20, 50, 49, -300, 42, 9896,
- -863, 43, -863, -863, 55, 58, 60, -863, 65, 71,
- 62, 10329, 73, 10762, 66, 69, 70, 72, 74, -241,
- -863, -863, -41, -863, -175, 83, 85, -863, -863, -863,
- -863, -863, 1837, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, 5001, 24, 9463, -233, 8164, -863, -863, 9463,
- 7713, -863, 51, -863, -863, -863, -194, -863, -863, 10762,
- 52, -863, -863, 10762, 88, -863, -863, -863, 10762, -863,
- -863, -863, -315, -863, -863, -191, 82, -863, -863, -863,
- -863, -863, -863, -190, -863, -187, -863, -863, -186, 86,
- -863, -863, -863, -863, -169, -863, -168, -863, -167, 89,
- -863, -165, 91, -157, 82, -863, 85, -156, -863, 94,
- 98, -863, -863, 18, -3, -40, -863, -863, -863, 6809,
- -863, -863, -863, 10762, 10762, 10762, 10762, 10762, 10762, 10762,
- 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762, 10762,
- 10762, 10762, -863, -863, -863, 97, -863, 2289, -863, -863,
- -863, 2289, -863, 10762, -863, -863, -34, 10762, -79, -863,
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, 10762, 10762, -863, -863, -863,
- -863, -863, -863, -863, 9463, -863, -863, -208, -863, 7261,
- -863, -863, 99, 96, -863, -863, -863, -863, -863, -132,
- -131, -863, -307, -863, -323, -863, -323, -863, 10762, 10762,
- -863, -155, -863, -155, -863, 10762, 10762, -863, 93, 35,
- -863, 11628, -863, 10762, -863, -863, -33, 24, 18, -863,
- -863, -863, -863, -863, -72, -72, -254, -254, -86, -86,
- -86, -86, -297, -297, -68, -13, 26, 20, 50, 49,
- 10762, -863, 2289, 4097, 57, 3645, -154, -863, -152, -863,
- -863, -863, -863, -863, 8597, -863, -863, -863, 105, -863,
- 75, -863, -145, -863, -144, -863, -143, -863, -142, -863,
- -141, -140, -863, -863, -863, -27, 100, 96, 76, 106,
- 109, -863, -863, 4097, 107, -863, -863, -863, -863, -863,
- -863, -863, -863, -863, -863, -863, 10762, -863, 101, 2741,
- 10762, -863, 103, 113, 67, 112, 3193, -863, 114, -863,
- 9463, -863, -863, -863, -133, 10762, 2741, 107, -863, -863,
- 2289, -863, 110, 96, -863, -863, 2289, 116, -863, -863
+ 4548, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -312, -274, -244, -212, -208,
+ -201, -181, -169, -859, -859, -194, -859, -859, -859, -859,
+ -859, -285, -859, -859, -859, -859, -859, -317, -859, -859,
+ -859, -859, -859, -859, -132, -73, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -329, -70,
+ -158, -145, 7712, -221, -859, -164, -859, -859, -859, -859,
+ 5452, -859, -859, -859, -859, -68, -859, -859, 932, -859,
+ -859, 7712, -55, -859, -859, -859, 5904, -80, -154, -150,
+ -142, -135, -130, -80, -129, -79, 12060, -859, -45, -354,
+ -76, -859, -308, -859, -43, -40, 7712, -859, -859, -859,
+ 7712, -72, -71, -859, -265, -859, -257, -859, -859, 10761,
+ -39, -859, -859, -859, -35, -69, 7712, -859, -42, -38,
+ -37, -859, -302, -859, -235, -32, -33, -28, -27, -217,
+ -26, -23, -22, -21, -20, -16, -216, -29, -15, -31,
+ -303, -859, -13, 7712, -859, -14, -859, -214, -859, -859,
+ -205, 9029, -859, -279, 1384, -859, -859, -859, -859, -859,
+ -39, -299, -859, 9462, -275, -859, -34, -859, -137, 10761,
+ 10761, -859, 10761, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -248, -859, -859, -859, -3, -203, 11194, -1,
+ -859, 10761, -859, -859, -310, 3, -40, 1, -859, -309,
+ -80, -859, -30, -859, -319, 5, -128, 10761, -124, -859,
+ -157, -122, 10761, -120, 10, -118, -80, -859, 11627, -859,
+ -116, 10761, 7, -79, -859, 7712, -25, 6356, -859, 7712,
+ 10761, -859, -354, -859, -19, -859, -859, -78, -263, -94,
+ -298, -52, -18, -8, -12, 29, 28, -301, 15, 9895,
+ -859, 16, -859, -859, 19, 12, 17, -859, 20, 23,
+ 18, 10328, 24, 10761, 21, 22, 25, 27, 30, -215,
+ -859, -859, -117, -859, -70, 26, 34, -859, -859, -859,
+ -859, -859, 1836, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, 5000, 3, 9462, -264, 8163, -859, -859, 9462,
+ 7712, -859, -11, -859, -859, -859, -195, -859, -859, 10761,
+ -6, -859, -859, 10761, 37, -859, -859, -859, 10761, -859,
+ -859, -859, -322, -859, -859, -192, 35, -859, -859, -859,
+ -859, -859, -859, -179, -859, -178, -859, -859, -177, 32,
+ -859, -859, -859, -859, -175, -859, -174, -859, -167, 36,
+ -859, -166, 38, -165, 35, -859, -163, -859, 45, 46,
+ -859, -859, -25, -39, -115, -859, -859, -859, 6808, -859,
+ -859, -859, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761,
+ 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761, 10761,
+ 10761, -859, -859, -859, 51, -859, 2288, -859, -859, -859,
+ 2288, -859, 10761, -859, -859, -88, 10761, -63, -859, -859,
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, 10761, 10761, -859, -859, -859, -859,
+ -859, -859, -859, 9462, -859, -859, -108, -859, 7260, -859,
+ -859, 52, 53, -859, -859, -859, -859, -859, -138, -136,
+ -859, -304, -859, -319, -859, -319, -859, 10761, 10761, -859,
+ -157, -859, -157, -859, 10761, 10761, -859, 65, 10, -859,
+ 11627, -859, 10761, -859, -859, -86, 3, -25, -859, -859,
+ -859, -859, -859, -78, -78, -263, -263, -94, -94, -94,
+ -94, -298, -298, -52, -18, -8, -12, 29, 28, 10761,
+ -859, 2288, 4096, 31, 3644, -156, -859, -155, -859, -859,
+ -859, -859, -859, 8596, -859, -859, -859, 66, -859, 39,
+ -859, -153, -859, -151, -859, -148, -859, -146, -859, -144,
+ -143, -859, -859, -859, -61, 64, 53, 40, 72, 74,
+ -859, -859, 4096, 75, -859, -859, -859, -859, -859, -859,
+ -859, -859, -859, -859, -859, 10761, -859, 71, 2740, 10761,
+ -859, 73, 81, 41, 80, 3192, -859, 83, -859, 9462,
+ -859, -859, -859, -141, 10761, 2740, 75, -859, -859, 2288,
+ -859, 78, 53, -859, -859, 2288, 86, -859, -859
};
/* YYDEFACT[STATE-NUM] -- Default reduction number in state STATE-NUM.
@@ -1592,7 +1592,7 @@ static const yytype_int16 yydefact[] =
0, 99, 0, 94, 0, 109, 0, 121, 115, 123,
0, 124, 0, 97, 131, 102, 0, 154, 136, 0,
204, 210, 1, 617, 0, 0, 0, 96, 0, 0,
- 0, 628, 0, 681, 0, 0, 0, 0, 0, 0,
+ 0, 628, 0, 680, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 626,
0, 624, 0, 0, 533, 149, 151, 0, 147, 202,
0, 0, 100, 0, 0, 622, 110, 116, 120, 122,
@@ -1601,7 +1601,7 @@ static const yytype_int16 yydefact[] =
8, 2, 16, 14, 15, 17, 10, 11, 12, 13,
3, 18, 37, 20, 25, 26, 0, 0, 30, 0,
213, 0, 36, 34, 0, 205, 111, 0, 95, 0,
- 0, 679, 0, 636, 0, 0, 0, 0, 0, 653,
+ 0, 678, 0, 636, 0, 0, 0, 0, 0, 653,
0, 0, 0, 0, 0, 0, 0, 673, 0, 651,
0, 0, 0, 0, 98, 0, 0, 0, 537, 0,
0, 146, 0, 200, 0, 206, 45, 49, 52, 55,
@@ -1613,70 +1613,70 @@ static const yytype_int16 yydefact[] =
594, 560, 0, 119, 0, 127, 0, 545, 134, 0,
0, 107, 0, 104, 38, 39, 0, 22, 23, 0,
0, 28, 27, 0, 215, 31, 33, 40, 0, 212,
- 112, 683, 0, 684, 629, 0, 0, 682, 648, 644,
+ 112, 682, 0, 683, 629, 0, 0, 681, 648, 644,
645, 646, 647, 0, 642, 0, 93, 649, 0, 0,
663, 664, 665, 666, 0, 661, 0, 667, 0, 0,
- 669, 0, 0, 0, 2, 677, 678, 0, 675, 0,
- 0, 623, 625, 0, 543, 0, 541, 536, 538, 0,
- 150, 148, 203, 0, 0, 0, 0, 0, 0, 0,
+ 669, 0, 0, 0, 2, 677, 0, 675, 0, 0,
+ 623, 625, 0, 543, 0, 541, 536, 538, 0, 150,
+ 148, 203, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 76, 207, 208, 0, 563, 0, 596, 609,
- 608, 0, 600, 0, 612, 610, 0, 0, 0, 593,
- 613, 614, 615, 562, 81, 82, 84, 83, 86, 87,
- 88, 89, 90, 85, 80, 0, 0, 578, 574, 576,
- 580, 587, 595, 129, 0, 548, 549, 0, 133, 0,
- 108, 4, 0, 24, 21, 32, 214, 632, 634, 0,
- 0, 680, 0, 638, 0, 637, 0, 640, 0, 0,
- 655, 0, 654, 0, 657, 0, 0, 659, 0, 0,
- 674, 0, 671, 0, 652, 627, 0, 544, 0, 539,
- 534, 46, 47, 48, 51, 50, 53, 54, 58, 59,
- 56, 57, 61, 62, 64, 66, 68, 70, 72, 74,
- 0, 209, 565, 0, 0, 0, 0, 611, 0, 592,
- 79, 92, 128, 546, 0, 106, 19, 630, 0, 631,
- 0, 643, 0, 650, 0, 662, 0, 668, 0, 670,
- 0, 0, 676, 540, 542, 0, 0, 584, 0, 0,
- 0, 603, 602, 605, 571, 588, 547, 550, 633, 635,
- 639, 641, 656, 658, 660, 672, 0, 566, 0, 0,
- 0, 604, 0, 0, 583, 0, 0, 581, 0, 77,
- 0, 568, 597, 567, 0, 606, 0, 571, 570, 572,
- 590, 585, 0, 607, 601, 582, 591, 0, 599, 589
+ 0, 76, 207, 208, 0, 563, 0, 596, 609, 608,
+ 0, 600, 0, 612, 610, 0, 0, 0, 593, 613,
+ 614, 615, 562, 81, 82, 84, 83, 86, 87, 88,
+ 89, 90, 85, 80, 0, 0, 578, 574, 576, 580,
+ 587, 595, 129, 0, 548, 549, 0, 133, 0, 108,
+ 4, 0, 24, 21, 32, 214, 632, 634, 0, 0,
+ 679, 0, 638, 0, 637, 0, 640, 0, 0, 655,
+ 0, 654, 0, 657, 0, 0, 659, 0, 0, 674,
+ 0, 671, 0, 652, 627, 0, 544, 0, 539, 534,
+ 46, 47, 48, 51, 50, 53, 54, 58, 59, 56,
+ 57, 61, 62, 64, 66, 68, 70, 72, 74, 0,
+ 209, 565, 0, 0, 0, 0, 611, 0, 592, 79,
+ 92, 128, 546, 0, 106, 19, 630, 0, 631, 0,
+ 643, 0, 650, 0, 662, 0, 668, 0, 670, 0,
+ 0, 676, 540, 542, 0, 0, 584, 0, 0, 0,
+ 603, 602, 605, 571, 588, 547, 550, 633, 635, 639,
+ 641, 656, 658, 660, 672, 0, 566, 0, 0, 0,
+ 604, 0, 0, 583, 0, 0, 581, 0, 77, 0,
+ 568, 597, 567, 0, 606, 0, 571, 570, 572, 590,
+ 585, 0, 607, 601, 582, 591, 0, 599, 589
};
/* YYPGOTO[NTERM-NUM]. */
static const yytype_int16 yypgoto[] =
{
- -863, -863, -863, -863, -863, -863, -863, -863, -863, -863,
- -863, -863, -418, -863, -380, -379, -484, -382, -258, -256,
- -253, -257, -252, -255, -863, -478, -863, -485, -863, -491,
- -530, 14, -863, -863, -863, 7, -397, -863, -863, 44,
- 53, 47, -863, -863, -400, -863, -863, -863, -863, -92,
- -863, -377, -362, -863, 9, -863, 0, -414, -863, -863,
- -863, -863, 150, -863, -863, -863, -546, -548, -218, -331,
- -624, -863, -359, -609, -862, -863, -417, -863, -863, -427,
- -426, -863, -863, 68, -719, -355, -863, -136, -863, -389,
- -863, -135, -863, -863, -863, -863, -129, -863, -863, -863,
- -863, -863, -863, -863, -863, 102, -863, -863, 2, -863,
- -65, -234, -432, -863, -863, -863, -301, -293, -294, -863,
- -863, -304, -299, -302, -298, -863, -296, -305, -863, -383,
- -526
+ -859, -859, -859, -859, -859, -859, -859, -859, -859, -859,
+ -859, -859, -209, -859, -418, -417, -602, -421, -291, -284,
+ -286, -283, -281, -287, -859, -473, -859, -490, -859, -497,
+ -520, 13, -859, -859, -859, 14, -394, -859, -859, 33,
+ 42, 44, -859, -859, -395, -859, -859, -859, -859, -121,
+ -859, -381, -369, -859, 9, -859, 0, -424, -859, -859,
+ -859, -859, 113, -859, -859, -859, -545, -549, -252, -365,
+ -617, -859, -391, -618, -858, -859, -450, -859, -859, -459,
+ -458, -859, -859, 43, -721, -387, -859, -173, -859, -422,
+ -859, -170, -859, -859, -859, -859, -168, -859, -859, -859,
+ -859, -859, -859, -859, -859, 67, -859, -859, 2, -859,
+ -97, -300, -386, -859, -859, -859, -326, -323, -327, -859,
+ -859, -330, -325, -328, -332, -859, -331, -334, -859, -390,
+ -530
};
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
{
- -1, 520, 521, 522, 782, 523, 524, 525, 526, 527,
+ -1, 520, 521, 522, 781, 523, 524, 525, 526, 527,
528, 529, 609, 531, 577, 578, 579, 580, 581, 582,
- 583, 584, 585, 586, 587, 610, 840, 611, 765, 612,
+ 583, 584, 585, 586, 587, 610, 839, 611, 764, 612,
695, 613, 378, 640, 498, 614, 380, 381, 382, 427,
428, 429, 383, 384, 385, 386, 387, 388, 477, 478,
389, 390, 391, 392, 532, 480, 533, 483, 440, 441,
- 534, 395, 396, 397, 569, 473, 567, 568, 705, 706,
- 638, 777, 617, 618, 619, 620, 621, 737, 876, 912,
- 904, 905, 906, 913, 622, 623, 624, 625, 907, 879,
- 626, 627, 908, 927, 628, 629, 630, 843, 741, 845,
- 883, 902, 903, 631, 398, 399, 400, 424, 632, 470,
- 471, 450, 451, 789, 790, 402, 673, 674, 678, 403,
- 404, 684, 685, 688, 691, 405, 697, 698, 406, 452,
+ 534, 395, 396, 397, 569, 473, 567, 568, 704, 705,
+ 638, 776, 617, 618, 619, 620, 621, 736, 875, 911,
+ 903, 904, 905, 912, 622, 623, 624, 625, 906, 878,
+ 626, 627, 907, 926, 628, 629, 630, 842, 740, 844,
+ 882, 901, 902, 631, 398, 399, 400, 424, 632, 470,
+ 471, 450, 451, 788, 789, 402, 673, 674, 678, 403,
+ 404, 684, 685, 688, 691, 405, 696, 697, 406, 452,
453
};
@@ -1685,67 +1685,67 @@ static const yytype_int16 yydefgoto[] =
number is the opposite. If YYTABLE_NINF, syntax error. */
static const yytype_int16 yytable[] =
{
- 394, 445, 401, 588, 444, 430, 445, 379, 637, 393,
- 773, 646, 776, 769, 377, 778, 667, 677, 842, 708,
- 494, 530, 687, 709, 446, 668, 535, 421, 437, 446,
- 466, 700, 667, 787, 720, 721, 731, 911, 475, 661,
- 710, 661, 662, 655, 919, 658, 492, 417, 481, 430,
- 328, 329, 330, 422, 911, 493, 481, 659, 669, 670,
- 671, 672, 476, 576, 482, 647, 648, 788, 437, 676,
- 722, 723, 732, 663, 676, 663, 633, 635, 589, 418,
- 676, 644, 645, 676, 437, -35, 590, 649, 481, 407,
- 432, 650, 676, 433, 779, 634, 565, 754, 755, 756,
- 757, 758, 759, 760, 761, 762, 763, 716, 664, 717,
- 746, 735, 748, 657, 664, 589, 664, 764, 589, 664,
- 541, 664, 639, 664, 664, 774, 542, 495, 664, 576,
- 496, 543, 844, 497, 576, 549, 557, 544, 571, 573,
- 576, 550, 558, 576, 572, 574, 853, 652, 854, 637,
- 852, 637, 576, 653, 637, 415, 781, 665, 783, 791,
- 793, 708, 766, 795, 797, 542, 794, 408, 785, 796,
- 798, 576, 409, 693, 456, 458, 460, 462, 464, 465,
- 468, 800, 802, 804, 423, 807, 410, 801, 803, 805,
- 565, 808, 565, 810, 812, 426, 884, 425, 885, 811,
- 813, 926, 766, 437, 766, 890, 891, 892, 893, 894,
- 895, 794, 798, 801, 805, 808, 813, 922, 562, 411,
- 857, 859, 563, 766, 858, 860, 680, 681, 682, 683,
- 887, 708, 445, 769, 412, 444, 828, 829, 830, 831,
- 786, 718, 719, 454, 457, 459, 455, 455, 455, 413,
- 642, 439, 846, 643, 461, 446, 848, 455, 463, 467,
- 414, 455, 455, 565, 675, 724, 725, 455, 863, 677,
- 679, 686, 419, 455, 455, 867, 687, 766, 849, 689,
- 850, 851, 455, 420, 692, 667, 921, 455, 699, 637,
- 817, 455, 713, 714, 715, 821, 822, 823, 576, 576,
+ 394, 430, 401, 637, 768, 646, 445, 444, 588, 393,
+ 494, 445, 667, 377, 379, 841, 535, 772, 707, 775,
+ 446, 437, 777, 466, 708, 446, 786, 677, 667, 668,
+ 421, 475, 687, 719, 720, 730, 417, 407, 655, 661,
+ 910, 699, 662, 481, 661, 430, 658, 918, 541, 562,
+ 709, 482, 481, 563, 542, 476, 422, 910, 659, 634,
+ 787, 437, 669, 670, 671, 672, 633, 635, 418, 721,
+ 722, 731, 589, 663, 676, 408, 589, 437, 663, 676,
+ 590, 647, 648, 639, 492, 676, 481, 589, 676, 328,
+ 329, 330, 565, 493, 773, 778, 495, 676, 715, 496,
+ 716, -35, 497, 649, 745, 409, 747, 650, 456, 458,
+ 460, 462, 464, 465, 468, 543, 734, 827, 828, 829,
+ 830, 544, 843, 753, 754, 755, 756, 757, 758, 759,
+ 760, 761, 762, 549, 557, 432, 571, 410, 433, 550,
+ 558, 411, 572, 763, 637, 573, 637, 652, 412, 637,
+ 665, 574, 782, 653, 664, 780, 851, 415, 790, 707,
+ 664, 765, 664, 784, 542, 664, 693, 664, 413, 664,
+ 664, 792, 794, 796, 664, 799, 801, 793, 795, 797,
+ 414, 800, 802, 803, 806, 809, 565, 811, 565, 804,
+ 807, 810, 425, 812, 883, 884, 437, 889, 925, 890,
+ 765, 765, 891, 793, 892, 797, 893, 894, 800, 921,
+ 804, 426, 807, 812, 856, 765, 858, 419, 857, 642,
+ 859, 434, 643, 768, 680, 681, 682, 683, 454, 707,
+ 530, 455, 457, 717, 718, 455, 886, 445, 444, 765,
+ 459, 817, 766, 455, 818, 845, 852, 461, 853, 847,
+ 455, 446, 463, 467, 675, 455, 455, 455, 679, 565,
+ 686, 455, 689, 455, 692, 455, 698, 455, 765, 455,
+ 817, 846, 576, 872, 849, 850, 420, 862, 677, 816,
+ 667, 723, 724, 637, 866, 687, 712, 713, 714, 423,
+ 644, 645, 920, 765, 848, 765, 895, 823, 824, 439,
+ 825, 826, 831, 832, 447, 449, 469, 768, 474, 479,
+ 484, 325, 481, 490, 491, 536, 537, 538, 561, 540,
+ 539, 559, 657, 546, 676, 676, 545, 565, 547, 548,
+ 551, 676, 676, 552, 553, 554, 555, 676, 576, 676,
+ 556, 560, 874, 576, 570, 876, 564, 651, 656, 576,
+ 492, 641, 576, 725, 589, 666, 662, 727, 690, 700,
+ 703, 576, 726, 637, 728, 729, 711, 732, 737, 741,
+ 735, 738, 742, 746, 779, -36, 739, 743, 748, 783,
+ 576, 749, 431, -34, 750, 876, 751, -29, 798, 752,
+ 438, 393, 805, 791, 808, 813, 814, 565, 394, 393,
+ 401, 394, 913, 840, 855, 908, 394, 393, 401, 765,
+ 393, 377, 379, 868, 887, 393, 472, 922, 896, 637,
+ 448, 888, 898, 899, 879, 897, 431, 486, -569, 909,
+ 431, 915, 914, 591, 833, 393, 919, 927, 916, 393,
+ 928, 835, 834, 838, 416, 836, 438, 877, 837, 785,
+ 815, 710, 873, 880, 917, 393, 923, 881, 924, 769,
+ 900, 446, 770, 488, 771, 443, 701, 485, 487, 861,
+ 860, 863, 865, 566, 489, 864, 869, 867, 871, 870,
+ 0, 0, 393, 0, 616, 0, 0, 877, 0, 0,
+ 0, 0, 0, 615, 0, 0, 0, 0, 0, 0,
+ 0, 446, 0, 820, 821, 822, 576, 576, 576, 576,
576, 576, 576, 576, 576, 576, 576, 576, 576, 576,
- 576, 576, 576, 576, 434, 766, 818, 769, 767, 819,
- 676, 676, 766, 818, 447, 847, 873, 676, 676, 766,
- 896, 449, 565, 676, 469, 676, 824, 825, 474, 826,
- 827, 479, 832, 833, 484, 325, 490, 491, 481, 875,
- 539, 536, 877, 537, 538, 540, 545, 641, 726, 546,
- 547, 548, 551, 559, 552, 666, 553, 554, 555, 637,
- 561, 556, 560, 651, 656, 589, 564, 570, 492, 662,
- 576, 576, 431, 690, 701, 729, 730, 576, 576, 728,
- 438, 393, 877, 576, 733, 576, 727, 736, 394, 393,
- 401, 394, 565, 704, 738, 379, 394, 393, 401, 914,
- 393, 909, 377, 448, 742, 393, 472, 739, 712, 740,
- 743, 744, 747, 749, 923, 637, 431, 486, 750, 751,
- 431, 752, -36, 753, -34, 393, 780, 784, -29, 393,
- 792, 869, 799, 878, 814, 806, 438, 809, 815, 841,
- 880, 856, 766, 888, 897, 393, 899, 889, 900, 910,
- -569, 898, 915, 916, 917, 591, 446, 920, 834, 928,
- 929, 835, 837, 566, 488, 836, 839, 489, 838, 487,
- 711, 416, 393, 878, 616, 816, 881, 874, 918, 924,
- 882, 925, 485, 615, 901, 862, 770, 771, 702, 866,
- 443, 861, 865, 772, 868, 864, 446, 0, 872, 0,
- 0, 870, 0, 0, 0, 871, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 576, 576, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 660, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 696, 0,
- 0, 0, 0, 0, 0, 703, 0, 566, 0, 566,
- 0, 0, 0, 0, 393, 0, 393, 0, 393, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 702, 0, 566, 0, 566,
+ 0, 0, 0, 0, 393, 0, 393, 0, 393, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 576, 576,
+ 0, 0, 0, 0, 0, 576, 576, 0, 0, 0,
+ 0, 576, 0, 576, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 616, 0, 0, 0, 0, 0, 0, 0,
0, 615, 394, 0, 0, 0, 0, 0, 0, 0,
@@ -1755,759 +1755,533 @@ static const yytype_int16 yytable[] =
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 566,
- 0, 0, 0, 0, 0, 0, 0, 0, 393, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 616, 0, 0,
- 0, 616, 0, 0, 0, 0, 615, 0, 0, 0,
- 615, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 566,
- 0, 0, 0, 0, 0, 0, 0, 0, 393, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 696, 0, 696, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 566, 0,
+ 0, 0, 0, 0, 0, 0, 0, 393, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 616, 0, 0, 0,
+ 616, 0, 0, 0, 0, 615, 0, 0, 0, 615,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 616, 616, 0, 616, 0, 401, 0, 0,
- 0, 615, 615, 0, 615, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 616, 0, 0, 0, 0, 0, 0,
- 0, 0, 615, 0, 0, 0, 0, 0, 0, 616,
- 0, 0, 0, 0, 0, 0, 616, 0, 615, 0,
- 0, 0, 0, 0, 0, 615, 616, 0, 0, 0,
- 616, 0, 0, 0, 0, 615, 616, 0, 0, 615,
- 0, 0, 0, 442, 0, 615, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 325, 0, 0, 0, 0, 0,
- 0, 0, 326, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 327, 328, 329, 330,
- 331, 0, 0, 0, 0, 0, 0, 0, 0, 332,
- 333, 334, 335, 336, 337, 338, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 339, 340, 341, 342, 343, 344, 0, 0, 0,
- 0, 0, 0, 0, 0, 345, 0, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 369, 370, 371, 372, 373, 374, 375, 376, 1, 2,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
- 323, 324, 0, 0, 499, 500, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 501, 502, 0, 325, 0, 591, 592,
- 0, 0, 0, 0, 593, 503, 504, 505, 506, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 327, 328,
- 329, 330, 331, 0, 0, 0, 507, 508, 509, 510,
- 511, 332, 333, 334, 335, 336, 337, 338, 594, 595,
- 596, 597, 0, 598, 599, 600, 601, 602, 603, 604,
- 605, 606, 607, 339, 340, 341, 342, 343, 344, 512,
- 513, 514, 515, 516, 517, 518, 519, 345, 608, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
- 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
- 367, 368, 369, 370, 371, 372, 373, 374, 375, 376,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
- 321, 322, 323, 324, 0, 0, 499, 500, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 501, 502, 0, 325, 0,
- 591, 768, 0, 0, 0, 0, 593, 503, 504, 505,
- 506, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 327, 328, 329, 330, 331, 0, 0, 0, 507, 508,
- 509, 510, 511, 332, 333, 334, 335, 336, 337, 338,
- 594, 595, 596, 597, 0, 598, 599, 600, 601, 602,
- 603, 604, 605, 606, 607, 339, 340, 341, 342, 343,
- 344, 512, 513, 514, 515, 516, 517, 518, 519, 345,
- 608, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
- 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
- 375, 376, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
- 319, 320, 321, 322, 323, 324, 0, 0, 499, 500,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 501, 502, 0,
- 325, 0, 591, 0, 0, 0, 0, 0, 593, 503,
- 504, 505, 506, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 327, 328, 329, 330, 331, 0, 0, 0,
- 507, 508, 509, 510, 511, 332, 333, 334, 335, 336,
- 337, 338, 594, 595, 596, 597, 0, 598, 599, 600,
- 601, 602, 603, 604, 605, 606, 607, 339, 340, 341,
- 342, 343, 344, 512, 513, 514, 515, 516, 517, 518,
- 519, 345, 608, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
- 373, 374, 375, 376, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 324, 0, 0,
- 499, 500, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 501,
- 502, 0, 325, 0, 484, 0, 0, 0, 0, 0,
- 593, 503, 504, 505, 506, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 327, 328, 329, 330, 331, 0,
- 0, 0, 507, 508, 509, 510, 511, 332, 333, 334,
- 335, 336, 337, 338, 594, 595, 596, 597, 0, 598,
- 599, 600, 601, 602, 603, 604, 605, 606, 607, 339,
- 340, 341, 342, 343, 344, 512, 513, 514, 515, 516,
- 517, 518, 519, 345, 608, 346, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
- 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 375, 376, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
- 0, 0, 499, 500, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 501, 502, 0, 325, 0, 0, 0, 0, 0,
- 0, 0, 593, 503, 504, 505, 506, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 327, 328, 329, 330,
- 331, 0, 0, 0, 507, 508, 509, 510, 511, 332,
- 333, 334, 335, 336, 337, 338, 594, 595, 596, 597,
- 0, 598, 599, 600, 601, 602, 603, 604, 605, 606,
- 607, 339, 340, 341, 342, 343, 344, 512, 513, 514,
- 515, 516, 517, 518, 519, 345, 608, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 369, 370, 371, 372, 373, 374, 375, 376, 1, 2,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
- 323, 324, 0, 0, 499, 500, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 501, 502, 0, 325, 0, 0, 0,
- 0, 0, 0, 0, 593, 503, 504, 505, 506, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 327, 328,
- 329, 330, 331, 0, 0, 0, 507, 508, 509, 510,
- 511, 332, 333, 334, 335, 336, 337, 338, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 339, 340, 341, 342, 343, 344, 512,
- 513, 514, 515, 516, 517, 518, 519, 345, 0, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
- 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
- 367, 368, 369, 370, 371, 372, 373, 374, 375, 376,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 0, 0, 0, 318, 319, 320,
- 321, 322, 323, 324, 0, 0, 499, 500, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 501, 502, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 503, 504, 505,
- 506, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 327, 328, 329, 330, 0, 0, 0, 0, 507, 508,
- 509, 510, 511, 332, 333, 334, 335, 336, 337, 338,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 339, 340, 341, 342, 343,
- 344, 512, 513, 514, 515, 516, 517, 518, 519, 345,
- 0, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
- 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
- 375, 376, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
- 319, 320, 321, 322, 323, 324, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 566, 0,
+ 0, 0, 0, 0, 0, 0, 0, 393, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 325, 0, 0, 0, 0, 0, 0, 0, 326, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 327, 328, 329, 330, 331, 0, 0, 0,
- 0, 0, 0, 0, 0, 332, 333, 334, 335, 336,
- 337, 338, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 339, 340, 341,
- 342, 343, 344, 0, 0, 0, 0, 0, 0, 0,
- 0, 345, 0, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
- 373, 374, 375, 376, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 0, 0,
- 0, 318, 319, 320, 321, 322, 323, 324, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 616, 616, 0, 616, 0, 401, 0, 0, 0,
+ 615, 615, 0, 615, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 327, 328, 329, 330, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 332, 333, 334,
- 335, 336, 337, 338, 594, 0, 0, 597, 0, 598,
- 599, 0, 0, 602, 0, 0, 0, 0, 0, 339,
- 340, 341, 342, 343, 344, 0, 0, 0, 0, 0,
- 0, 0, 0, 345, 0, 346, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
- 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 375, 376, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 0, 0, 0, 318, 319, 320, 321, 322, 323, 324,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 616, 0, 0, 0, 0, 0, 0, 0,
+ 0, 615, 0, 0, 0, 0, 0, 0, 616, 0,
+ 0, 0, 0, 0, 0, 616, 0, 615, 0, 0,
+ 0, 0, 0, 0, 615, 616, 0, 0, 0, 616,
+ 0, 0, 0, 0, 615, 616, 0, 0, 615, 0,
+ 0, 0, 442, 0, 615, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 318, 319, 320, 321, 322, 323, 324, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 435, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 327, 328, 329, 330,
- 0, 0, 0, 0, 0, 0, 0, 0, 436, 332,
- 333, 334, 335, 336, 337, 338, 0, 0, 0, 0,
+ 0, 0, 0, 325, 0, 0, 0, 0, 0, 0,
+ 0, 326, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 327, 328, 329, 330, 331,
+ 0, 0, 0, 0, 0, 0, 0, 0, 332, 333,
+ 334, 335, 336, 337, 338, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 339, 340, 341, 342, 343, 344, 0, 0, 0,
- 0, 0, 0, 0, 0, 345, 0, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 369, 370, 371, 372, 373, 374, 375, 376, 1, 2,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 0, 0, 0, 318, 319, 320, 321, 322,
- 323, 324, 0, 0, 0, 0, 0, 0, 0, 0,
+ 339, 340, 341, 342, 343, 344, 0, 0, 0, 0,
+ 0, 0, 0, 0, 345, 0, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
+ 370, 371, 372, 373, 374, 375, 376, 1, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+ 324, 0, 0, 499, 500, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 325, 0, 0, 0,
+ 0, 0, 501, 502, 0, 325, 0, 591, 592, 0,
+ 0, 0, 0, 593, 503, 504, 505, 506, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 327, 328, 329,
+ 330, 331, 0, 0, 0, 507, 508, 509, 510, 511,
+ 332, 333, 334, 335, 336, 337, 338, 594, 595, 596,
+ 597, 0, 598, 599, 600, 601, 602, 603, 604, 605,
+ 606, 607, 339, 340, 341, 342, 343, 344, 512, 513,
+ 514, 515, 516, 517, 518, 519, 345, 608, 346, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
+ 368, 369, 370, 371, 372, 373, 374, 375, 376, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+ 322, 323, 324, 0, 0, 499, 500, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 327, 328,
- 329, 330, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 332, 333, 334, 335, 336, 337, 338, 0, 0,
+ 0, 0, 0, 0, 501, 502, 0, 325, 0, 591,
+ 767, 0, 0, 0, 0, 593, 503, 504, 505, 506,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
+ 328, 329, 330, 331, 0, 0, 0, 507, 508, 509,
+ 510, 511, 332, 333, 334, 335, 336, 337, 338, 594,
+ 595, 596, 597, 0, 598, 599, 600, 601, 602, 603,
+ 604, 605, 606, 607, 339, 340, 341, 342, 343, 344,
+ 512, 513, 514, 515, 516, 517, 518, 519, 345, 608,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
+ 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
+ 376, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 320, 321, 322, 323, 324, 0, 0, 499, 500, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 339, 340, 341, 342, 343, 344, 0,
- 0, 0, 0, 0, 0, 0, 0, 345, 0, 346,
- 347, 348, 349, 350, 351, 352, 353, 354, 355, 356,
- 357, 358, 359, 360, 361, 362, 363, 364, 365, 366,
- 367, 368, 369, 370, 371, 372, 373, 374, 375, 376,
- 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 0, 0, 0, 318, 319, 320,
- 321, 322, 323, 324, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 501, 502, 0, 325,
+ 0, 591, 0, 0, 0, 0, 0, 593, 503, 504,
+ 505, 506, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 327, 328, 329, 330, 331, 0, 0, 0, 507,
+ 508, 509, 510, 511, 332, 333, 334, 335, 336, 337,
+ 338, 594, 595, 596, 597, 0, 598, 599, 600, 601,
+ 602, 603, 604, 605, 606, 607, 339, 340, 341, 342,
+ 343, 344, 512, 513, 514, 515, 516, 517, 518, 519,
+ 345, 608, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
+ 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
+ 374, 375, 376, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ 318, 319, 320, 321, 322, 323, 324, 0, 0, 499,
+ 500, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 501, 502,
+ 0, 325, 0, 484, 0, 0, 0, 0, 0, 593,
+ 503, 504, 505, 506, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 327, 328, 329, 330, 331, 0, 0,
+ 0, 507, 508, 509, 510, 511, 332, 333, 334, 335,
+ 336, 337, 338, 594, 595, 596, 597, 0, 598, 599,
+ 600, 601, 602, 603, 604, 605, 606, 607, 339, 340,
+ 341, 342, 343, 344, 512, 513, 514, 515, 516, 517,
+ 518, 519, 345, 608, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
+ 372, 373, 374, 375, 376, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 318, 319, 320, 321, 322, 323, 324, 0,
+ 0, 499, 500, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 501, 502, 0, 325, 0, 0, 0, 0, 0, 0,
+ 0, 593, 503, 504, 505, 506, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 327, 328, 329, 330, 331,
+ 0, 0, 0, 507, 508, 509, 510, 511, 332, 333,
+ 334, 335, 336, 337, 338, 594, 595, 596, 597, 0,
+ 598, 599, 600, 601, 602, 603, 604, 605, 606, 607,
+ 339, 340, 341, 342, 343, 344, 512, 513, 514, 515,
+ 516, 517, 518, 519, 345, 608, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
+ 370, 371, 372, 373, 374, 375, 376, 1, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+ 324, 0, 0, 499, 500, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 707, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 501, 502, 0, 325, 0, 0, 0, 0,
+ 0, 0, 0, 593, 503, 504, 505, 506, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 327, 328, 329,
+ 330, 331, 0, 0, 0, 507, 508, 509, 510, 511,
+ 332, 333, 334, 335, 336, 337, 338, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 327, 328, 329, 330, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 332, 333, 334, 335, 336, 337, 338,
+ 0, 0, 339, 340, 341, 342, 343, 344, 512, 513,
+ 514, 515, 516, 517, 518, 519, 345, 0, 346, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
+ 368, 369, 370, 371, 372, 373, 374, 375, 376, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 0, 0, 0, 318, 319, 320, 321,
+ 322, 323, 324, 0, 0, 499, 500, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 339, 340, 341, 342, 343,
- 344, 0, 0, 0, 0, 0, 0, 0, 0, 345,
- 0, 346, 347, 348, 349, 350, 351, 352, 353, 354,
- 355, 356, 357, 358, 359, 360, 361, 362, 363, 364,
- 365, 366, 367, 368, 369, 370, 371, 372, 373, 374,
- 375, 376, 1, 2, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 0, 0, 0, 318,
- 319, 320, 321, 322, 323, 324, 0, 0, 0, 0,
+ 0, 0, 0, 0, 501, 502, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 503, 504, 505, 506,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
+ 328, 329, 330, 0, 0, 0, 0, 507, 508, 509,
+ 510, 511, 332, 333, 334, 335, 336, 337, 338, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 339, 340, 341, 342, 343, 344,
+ 512, 513, 514, 515, 516, 517, 518, 519, 345, 0,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
+ 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
+ 376, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 320, 321, 322, 323, 324, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 820, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 325,
+ 0, 0, 0, 0, 0, 0, 0, 326, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 327, 328, 329, 330, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 332, 333, 334, 335, 336,
- 337, 338, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 339, 340, 341,
- 342, 343, 344, 0, 0, 0, 0, 0, 0, 0,
- 0, 345, 0, 346, 347, 348, 349, 350, 351, 352,
- 353, 354, 355, 356, 357, 358, 359, 360, 361, 362,
- 363, 364, 365, 366, 367, 368, 369, 370, 371, 372,
- 373, 374, 375, 376, 1, 2, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 0, 0,
- 0, 318, 319, 320, 321, 322, 323, 324, 0, 0,
+ 0, 327, 328, 329, 330, 331, 0, 0, 0, 0,
+ 0, 0, 0, 0, 332, 333, 334, 335, 336, 337,
+ 338, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 339, 340, 341, 342,
+ 343, 344, 0, 0, 0, 0, 0, 0, 0, 0,
+ 345, 0, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
+ 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
+ 374, 375, 376, 1, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 0, 0, 0,
+ 318, 319, 320, 321, 322, 323, 324, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 855, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 327, 328, 329, 330, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 332, 333, 334,
- 335, 336, 337, 338, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 339,
- 340, 341, 342, 343, 344, 0, 0, 0, 0, 0,
- 0, 0, 0, 345, 0, 346, 347, 348, 349, 350,
- 351, 352, 353, 354, 355, 356, 357, 358, 359, 360,
- 361, 362, 363, 364, 365, 366, 367, 368, 369, 370,
- 371, 372, 373, 374, 375, 376, 1, 2, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 0, 0, 0, 318, 319, 320, 321, 322, 323, 324,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 327, 328, 329, 330, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 332, 333, 334, 335,
+ 336, 337, 338, 594, 0, 0, 597, 0, 598, 599,
+ 0, 0, 602, 0, 0, 0, 0, 0, 339, 340,
+ 341, 342, 343, 344, 0, 0, 0, 0, 0, 0,
+ 0, 0, 345, 0, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
+ 372, 373, 374, 375, 376, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 0,
+ 0, 0, 318, 319, 320, 321, 322, 323, 324, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 327, 328, 329, 330,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 332,
- 333, 334, 335, 336, 337, 338, 0, 0, 0, 0,
+ 0, 435, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 327, 328, 329, 330, 0,
+ 0, 0, 0, 0, 0, 0, 0, 436, 332, 333,
+ 334, 335, 336, 337, 338, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 339, 340, 341, 342, 343, 344, 0, 0, 0,
- 0, 0, 0, 0, 0, 345, 0, 346, 347, 348,
- 349, 350, 351, 352, 353, 354, 355, 356, 357, 358,
- 359, 360, 361, 362, 363, 364, 365, 366, 367, 368,
- 369, 370, 371, 372, 373, 374, 375, 376, 2, 3,
+ 339, 340, 341, 342, 343, 344, 0, 0, 0, 0,
+ 0, 0, 0, 0, 345, 0, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
+ 370, 371, 372, 373, 374, 375, 376, 1, 2, 3,
4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
- 54, 55, 56, 57, 58, 0, 0, 61, 62, 63,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
@@ -2533,68 +2307,117 @@ static const yytype_int16 yytable[] =
284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
- 314, 0, 0, 0, 0, 0, 0, 321, 0, 0,
- 0, 0, 0, 499, 500, 0, 0, 0, 0, 0,
+ 314, 0, 0, 0, 318, 319, 320, 321, 322, 323,
+ 324, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 501, 502, 0, 0, 0, 636, 775, 0,
- 0, 0, 0, 0, 503, 504, 505, 506, 0, 0,
+ 0, 0, 0, 0, 0, 325, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 507, 508, 509, 510, 511,
- 332, 0, 0, 0, 0, 337, 338, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 327, 328, 329,
+ 330, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 332, 333, 334, 335, 336, 337, 338, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 512, 513,
- 514, 515, 516, 517, 518, 519, 0, 0, 0, 0,
+ 0, 0, 339, 340, 341, 342, 343, 344, 0, 0,
+ 0, 0, 0, 0, 0, 0, 345, 0, 346, 347,
+ 348, 349, 350, 351, 352, 353, 354, 355, 356, 357,
+ 358, 359, 360, 361, 362, 363, 364, 365, 366, 367,
+ 368, 369, 370, 371, 372, 373, 374, 375, 376, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 0, 0, 0, 318, 319, 320, 321,
+ 322, 323, 324, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 358, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 0, 0,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 0, 0, 0, 0, 0, 0,
- 321, 0, 0, 0, 0, 0, 499, 500, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 501, 502, 0, 0, 0,
- 636, 886, 0, 0, 0, 0, 0, 503, 504, 505,
- 506, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 507, 508,
- 509, 510, 511, 332, 0, 0, 0, 0, 337, 338,
+ 706, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 327,
+ 328, 329, 330, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 332, 333, 334, 335, 336, 337, 338, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 339, 340, 341, 342, 343, 344,
+ 0, 0, 0, 0, 0, 0, 0, 0, 345, 0,
+ 346, 347, 348, 349, 350, 351, 352, 353, 354, 355,
+ 356, 357, 358, 359, 360, 361, 362, 363, 364, 365,
+ 366, 367, 368, 369, 370, 371, 372, 373, 374, 375,
+ 376, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 0, 0, 0, 318, 319,
+ 320, 321, 322, 323, 324, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 512, 513, 514, 515, 516, 517, 518, 519, 0,
+ 0, 0, 819, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 358, 2, 3, 4, 5, 6, 7,
+ 0, 327, 328, 329, 330, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 332, 333, 334, 335, 336, 337,
+ 338, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 339, 340, 341, 342,
+ 343, 344, 0, 0, 0, 0, 0, 0, 0, 0,
+ 345, 0, 346, 347, 348, 349, 350, 351, 352, 353,
+ 354, 355, 356, 357, 358, 359, 360, 361, 362, 363,
+ 364, 365, 366, 367, 368, 369, 370, 371, 372, 373,
+ 374, 375, 376, 1, 2, 3, 4, 5, 6, 7,
8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
- 58, 0, 0, 61, 62, 63, 64, 65, 66, 67,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
@@ -2620,18 +2443,65 @@ static const yytype_int16 yytable[] =
288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
308, 309, 310, 311, 312, 313, 314, 0, 0, 0,
- 0, 0, 0, 321, 0, 0, 0, 0, 0, 499,
- 500, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 501, 502,
- 0, 0, 575, 0, 0, 0, 0, 0, 0, 0,
- 503, 504, 505, 506, 0, 0, 0, 0, 0, 0,
+ 318, 319, 320, 321, 322, 323, 324, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 854, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 327, 328, 329, 330, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 332, 333, 334, 335,
+ 336, 337, 338, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 339, 340,
+ 341, 342, 343, 344, 0, 0, 0, 0, 0, 0,
+ 0, 0, 345, 0, 346, 347, 348, 349, 350, 351,
+ 352, 353, 354, 355, 356, 357, 358, 359, 360, 361,
+ 362, 363, 364, 365, 366, 367, 368, 369, 370, 371,
+ 372, 373, 374, 375, 376, 1, 2, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 0,
+ 0, 0, 318, 319, 320, 321, 322, 323, 324, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 507, 508, 509, 510, 511, 332, 0, 0, 0,
- 0, 337, 338, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 512, 513, 514, 515, 516, 517,
- 518, 519, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 358, 2, 3, 4,
+ 0, 0, 0, 0, 0, 327, 328, 329, 330, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 332, 333,
+ 334, 335, 336, 337, 338, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 339, 340, 341, 342, 343, 344, 0, 0, 0, 0,
+ 0, 0, 0, 0, 345, 0, 346, 347, 348, 349,
+ 350, 351, 352, 353, 354, 355, 356, 357, 358, 359,
+ 360, 361, 362, 363, 364, 365, 366, 367, 368, 369,
+ 370, 371, 372, 373, 374, 375, 376, 2, 3, 4,
5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
@@ -2666,7 +2536,7 @@ static const yytype_int16 yytable[] =
0, 0, 0, 0, 0, 0, 321, 0, 0, 0,
0, 0, 499, 500, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 501, 502, 0, 0, 0, 636, 0, 0, 0,
+ 0, 501, 502, 0, 0, 0, 636, 774, 0, 0,
0, 0, 0, 503, 504, 505, 506, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 507, 508, 509, 510, 511, 332,
@@ -2709,8 +2579,8 @@ static const yytype_int16 yytable[] =
312, 313, 314, 0, 0, 0, 0, 0, 0, 321,
0, 0, 0, 0, 0, 499, 500, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 501, 502, 0, 0, 734, 0,
- 0, 0, 0, 0, 0, 0, 503, 504, 505, 506,
+ 0, 0, 0, 0, 501, 502, 0, 0, 0, 636,
+ 885, 0, 0, 0, 0, 0, 503, 504, 505, 506,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 507, 508, 509,
510, 511, 332, 0, 0, 0, 0, 337, 338, 0,
@@ -2753,7 +2623,7 @@ static const yytype_int16 yytable[] =
0, 0, 321, 0, 0, 0, 0, 0, 499, 500,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 501, 502, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 745, 503,
+ 0, 575, 0, 0, 0, 0, 0, 0, 0, 503,
504, 505, 506, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
507, 508, 509, 510, 511, 332, 0, 0, 0, 0,
@@ -2796,7 +2666,7 @@ static const yytype_int16 yytable[] =
0, 0, 0, 0, 0, 321, 0, 0, 0, 0,
0, 499, 500, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 501, 502, 0, 0, 0, 0, 0, 0, 0, 0,
+ 501, 502, 0, 0, 0, 636, 0, 0, 0, 0,
0, 0, 503, 504, 505, 506, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 507, 508, 509, 510, 511, 332, 0,
@@ -2839,11 +2709,11 @@ static const yytype_int16 yytable[] =
313, 314, 0, 0, 0, 0, 0, 0, 321, 0,
0, 0, 0, 0, 499, 500, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 501, 502, 0, 0, 0, 0, 0,
+ 0, 0, 0, 501, 502, 0, 0, 733, 0, 0,
0, 0, 0, 0, 0, 503, 504, 505, 506, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 507, 508, 509, 510,
- 511, 332, 0, 0, 0, 0, 337, 654, 0, 0,
+ 511, 332, 0, 0, 0, 0, 337, 338, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 512,
513, 514, 515, 516, 517, 518, 519, 0, 0, 0,
@@ -2883,10 +2753,10 @@ static const yytype_int16 yytable[] =
0, 321, 0, 0, 0, 0, 0, 499, 500, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 501, 502, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 503, 504,
+ 0, 0, 0, 0, 0, 0, 0, 744, 503, 504,
505, 506, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 507,
- 508, 509, 510, 694, 332, 0, 0, 0, 0, 337,
+ 508, 509, 510, 511, 332, 0, 0, 0, 0, 337,
338, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 512, 513, 514, 515, 516, 517, 518, 519,
@@ -2924,252 +2794,66 @@ static const yytype_int16 yytable[] =
297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
307, 308, 309, 310, 311, 312, 313, 314, 0, 0,
0, 0, 0, 0, 321, 0, 0, 0, 0, 0,
+ 499, 500, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 501,
+ 502, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 503, 504, 505, 506, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 507, 508, 509, 510, 511, 332, 0, 0,
+ 0, 0, 337, 338, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 512, 513, 514, 515, 516,
+ 517, 518, 519, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 358, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 0, 0, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 0, 0, 0, 0, 0, 0, 321, 0, 0,
+ 0, 0, 0, 499, 500, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 501, 502, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 503, 504, 505, 506, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 507, 508, 509, 510, 511,
+ 332, 0, 0, 0, 0, 337, 654, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 332, 0, 0,
- 0, 0, 337, 338
-};
-
-static const yytype_int16 yycheck[] =
-{
- 0, 401, 0, 481, 401, 382, 406, 0, 493, 0,
- 634, 502, 636, 622, 0, 639, 542, 547, 737, 567,
- 434, 439, 552, 569, 401, 348, 440, 359, 390, 406,
- 413, 561, 558, 348, 331, 332, 336, 899, 385, 348,
- 570, 348, 351, 528, 906, 356, 349, 353, 351, 426,
- 374, 375, 376, 385, 916, 358, 351, 368, 381, 382,
- 383, 384, 409, 481, 359, 329, 330, 382, 430, 547,
- 367, 368, 372, 382, 552, 382, 490, 491, 351, 385,
- 558, 499, 500, 561, 446, 349, 359, 351, 351, 349,
- 356, 355, 570, 359, 640, 358, 473, 338, 339, 340,
- 341, 342, 343, 344, 345, 346, 347, 361, 540, 363,
- 601, 589, 603, 531, 546, 351, 548, 358, 351, 551,
- 350, 553, 358, 555, 556, 358, 356, 353, 560, 547,
- 356, 350, 741, 359, 552, 350, 350, 356, 350, 350,
- 558, 356, 356, 561, 356, 356, 354, 350, 356, 634,
- 774, 636, 570, 356, 639, 351, 350, 540, 649, 350,
- 350, 709, 356, 350, 350, 356, 356, 349, 653, 356,
- 356, 589, 349, 556, 408, 409, 410, 411, 412, 413,
- 414, 350, 350, 350, 359, 350, 349, 356, 356, 356,
- 567, 356, 569, 350, 350, 356, 350, 350, 350, 356,
- 356, 920, 356, 565, 356, 350, 350, 350, 350, 350,
- 350, 356, 356, 356, 356, 356, 356, 350, 352, 349,
- 352, 352, 356, 356, 356, 356, 381, 382, 383, 384,
- 854, 779, 632, 842, 349, 632, 720, 721, 722, 723,
- 658, 327, 328, 382, 382, 382, 385, 385, 385, 349,
- 356, 367, 743, 359, 382, 632, 747, 385, 382, 382,
- 349, 385, 385, 640, 382, 333, 334, 385, 798, 799,
- 382, 382, 349, 385, 385, 805, 806, 356, 357, 382,
- 765, 766, 385, 349, 382, 811, 910, 385, 382, 774,
- 704, 385, 364, 365, 366, 713, 714, 715, 716, 717,
- 718, 719, 720, 721, 722, 723, 724, 725, 726, 727,
- 728, 729, 730, 731, 385, 356, 356, 926, 359, 359,
- 798, 799, 356, 356, 359, 359, 359, 805, 806, 356,
- 357, 385, 709, 811, 385, 813, 716, 717, 353, 718,
- 719, 385, 724, 725, 353, 351, 385, 385, 351, 840,
- 358, 350, 843, 385, 359, 356, 358, 385, 371, 356,
- 356, 356, 356, 350, 356, 385, 356, 356, 356, 854,
- 349, 356, 356, 350, 349, 351, 359, 358, 349, 351,
- 798, 799, 382, 348, 352, 335, 337, 805, 806, 369,
- 390, 382, 883, 811, 352, 813, 370, 354, 398, 390,
- 398, 401, 779, 385, 349, 398, 406, 398, 406, 900,
- 401, 896, 398, 406, 349, 406, 416, 359, 385, 359,
- 349, 359, 349, 357, 915, 910, 426, 425, 359, 359,
- 430, 359, 349, 359, 349, 426, 385, 385, 350, 430,
- 358, 348, 356, 843, 350, 356, 446, 356, 350, 352,
- 393, 352, 356, 348, 354, 446, 350, 382, 349, 358,
- 353, 385, 359, 350, 397, 353, 843, 353, 726, 359,
- 354, 727, 729, 473, 430, 728, 731, 430, 730, 426,
- 572, 331, 473, 883, 484, 703, 845, 818, 905, 916,
- 845, 917, 424, 484, 883, 796, 632, 632, 563, 803,
- 398, 794, 801, 632, 806, 799, 883, -1, 813, -1,
- -1, 809, -1, -1, -1, 811, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 536, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 558, -1,
- -1, -1, -1, -1, -1, 565, -1, 567, -1, 569,
- -1, -1, -1, -1, 565, -1, 567, -1, 569, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 622, -1, -1, -1, -1, -1, -1, -1,
- -1, 622, 632, -1, -1, -1, -1, -1, -1, -1,
- 640, 632, -1, -1, -1, -1, -1, -1, -1, 640,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 709,
- -1, -1, -1, -1, -1, -1, -1, -1, 709, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 737, -1, -1,
- -1, 741, -1, -1, -1, -1, 737, -1, -1, -1,
- 741, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 779,
- -1, -1, -1, -1, -1, -1, -1, -1, 779, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 811, -1, 813, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 842, 843, -1, 845, -1, 845, -1, -1,
- -1, 842, 843, -1, 845, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 883, -1, -1, -1, -1, -1, -1,
- -1, -1, 883, -1, -1, -1, -1, -1, -1, 899,
- -1, -1, -1, -1, -1, -1, 906, -1, 899, -1,
- -1, -1, -1, -1, -1, 906, 916, -1, -1, -1,
- 920, -1, -1, -1, -1, 916, 926, -1, -1, 920,
- -1, -1, -1, 0, -1, 926, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 351, -1, -1, -1, -1, -1,
- -1, -1, 359, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 373, 374, 375, 376,
- 377, -1, -1, -1, -1, -1, -1, -1, -1, 386,
- 387, 388, 389, 390, 391, 392, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 408, 409, 410, 411, 412, 413, -1, -1, -1,
- -1, -1, -1, -1, -1, 422, -1, 424, 425, 426,
- 427, 428, 429, 430, 431, 432, 433, 434, 435, 436,
- 437, 438, 439, 440, 441, 442, 443, 444, 445, 446,
- 447, 448, 449, 450, 451, 452, 453, 454, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
- 325, 326, -1, -1, 329, 330, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 348, 349, -1, 351, -1, 353, 354,
- -1, -1, -1, -1, 359, 360, 361, 362, 363, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 373, 374,
- 375, 376, 377, -1, -1, -1, 381, 382, 383, 384,
- 385, 386, 387, 388, 389, 390, 391, 392, 393, 394,
- 395, 396, -1, 398, 399, 400, 401, 402, 403, 404,
- 405, 406, 407, 408, 409, 410, 411, 412, 413, 414,
- 415, 416, 417, 418, 419, 420, 421, 422, 423, 424,
- 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
- 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
- 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, 317, 318, 319, 320, 321, 322,
- 323, 324, 325, 326, -1, -1, 329, 330, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 348, 349, -1, 351, -1,
- 353, 354, -1, -1, -1, -1, 359, 360, 361, 362,
- 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 373, 374, 375, 376, 377, -1, -1, -1, 381, 382,
- 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
- 393, 394, 395, 396, -1, 398, 399, 400, 401, 402,
- 403, 404, 405, 406, 407, 408, 409, 410, 411, 412,
- 413, 414, 415, 416, 417, 418, 419, 420, 421, 422,
- 423, 424, 425, 426, 427, 428, 429, 430, 431, 432,
- 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
- 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
- 453, 454, 3, 4, 5, 6, 7, 8, 9, 10,
+ 0, 0, 0, 0, 0, 0, 0, 0, 512, 513,
+ 514, 515, 516, 517, 518, 519, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 358, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
+ 51, 52, 53, 54, 55, 56, 57, 58, 0, 0,
61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
@@ -3195,569 +2879,659 @@ static const yytype_int16 yycheck[] =
281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
- 321, 322, 323, 324, 325, 326, -1, -1, 329, 330,
+ 311, 312, 313, 314, 0, 0, 0, 0, 0, 0,
+ 321, 0, 0, 0, 0, 0, 499, 500, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 501, 502, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 503, 504, 505,
+ 506, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 507, 508,
+ 509, 510, 694, 332, 0, 0, 0, 0, 337, 338,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 512, 513, 514, 515, 516, 517, 518, 519, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 358, 2, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 0, 0, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 0, 0, 0,
+ 0, 0, 0, 321, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 332, 0, 0, 0,
+ 0, 337, 338
+};
+
+static const yytype_int16 yycheck[] =
+{
+ 0, 382, 0, 493, 622, 502, 401, 401, 481, 0,
+ 434, 406, 542, 0, 0, 736, 440, 634, 567, 636,
+ 401, 390, 639, 413, 569, 406, 348, 547, 558, 348,
+ 359, 385, 552, 331, 332, 336, 353, 349, 528, 348,
+ 898, 561, 351, 351, 348, 426, 356, 905, 350, 352,
+ 570, 359, 351, 356, 356, 409, 385, 915, 368, 358,
+ 382, 430, 381, 382, 383, 384, 490, 491, 385, 367,
+ 368, 372, 351, 382, 547, 349, 351, 446, 382, 552,
+ 359, 329, 330, 358, 349, 558, 351, 351, 561, 374,
+ 375, 376, 473, 358, 358, 640, 353, 570, 361, 356,
+ 363, 349, 359, 351, 601, 349, 603, 355, 408, 409,
+ 410, 411, 412, 413, 414, 350, 589, 719, 720, 721,
+ 722, 356, 740, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 350, 350, 356, 350, 349, 359, 356,
+ 356, 349, 356, 358, 634, 350, 636, 350, 349, 639,
+ 540, 356, 649, 356, 540, 350, 773, 351, 350, 708,
+ 546, 356, 548, 653, 356, 551, 556, 553, 349, 555,
+ 556, 350, 350, 350, 560, 350, 350, 356, 356, 356,
+ 349, 356, 356, 350, 350, 350, 567, 350, 569, 356,
+ 356, 356, 350, 356, 350, 350, 565, 350, 919, 350,
+ 356, 356, 350, 356, 350, 356, 350, 350, 356, 350,
+ 356, 356, 356, 356, 352, 356, 352, 349, 356, 356,
+ 356, 385, 359, 841, 381, 382, 383, 384, 382, 778,
+ 439, 385, 382, 327, 328, 385, 853, 632, 632, 356,
+ 382, 356, 359, 385, 359, 742, 354, 382, 356, 746,
+ 385, 632, 382, 382, 382, 385, 385, 385, 382, 640,
+ 382, 385, 382, 385, 382, 385, 382, 385, 356, 385,
+ 356, 359, 481, 359, 764, 765, 349, 797, 798, 703,
+ 810, 333, 334, 773, 804, 805, 364, 365, 366, 359,
+ 499, 500, 909, 356, 357, 356, 357, 715, 716, 367,
+ 717, 718, 723, 724, 359, 385, 385, 925, 353, 385,
+ 353, 351, 351, 385, 385, 350, 385, 359, 349, 356,
+ 358, 350, 531, 356, 797, 798, 358, 708, 356, 356,
+ 356, 804, 805, 356, 356, 356, 356, 810, 547, 812,
+ 356, 356, 839, 552, 358, 842, 359, 350, 349, 558,
+ 349, 385, 561, 371, 351, 385, 351, 369, 348, 352,
+ 385, 570, 370, 853, 335, 337, 385, 352, 349, 349,
+ 354, 359, 349, 349, 385, 349, 359, 359, 357, 385,
+ 589, 359, 382, 349, 359, 882, 359, 350, 356, 359,
+ 390, 382, 356, 358, 356, 350, 350, 778, 398, 390,
+ 398, 401, 899, 352, 352, 895, 406, 398, 406, 356,
+ 401, 398, 398, 348, 348, 406, 416, 914, 354, 909,
+ 406, 382, 350, 349, 393, 385, 426, 425, 353, 358,
+ 430, 350, 359, 353, 725, 426, 353, 359, 397, 430,
+ 354, 727, 726, 730, 331, 728, 446, 842, 729, 658,
+ 702, 572, 817, 844, 904, 446, 915, 844, 916, 632,
+ 882, 842, 632, 430, 632, 398, 563, 424, 426, 795,
+ 793, 798, 802, 473, 430, 800, 808, 805, 812, 810,
+ -1, -1, 473, -1, 484, -1, -1, 882, -1, -1,
+ -1, -1, -1, 484, -1, -1, -1, -1, -1, -1,
+ -1, 882, -1, 712, 713, 714, 715, 716, 717, 718,
+ 719, 720, 721, 722, 723, 724, 725, 726, 727, 728,
+ 729, 730, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 536, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 348, 349, -1,
- 351, -1, 353, -1, -1, -1, -1, -1, 359, 360,
- 361, 362, 363, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 373, 374, 375, 376, 377, -1, -1, -1,
- 381, 382, 383, 384, 385, 386, 387, 388, 389, 390,
- 391, 392, 393, 394, 395, 396, -1, 398, 399, 400,
- 401, 402, 403, 404, 405, 406, 407, 408, 409, 410,
- 411, 412, 413, 414, 415, 416, 417, 418, 419, 420,
- 421, 422, 423, 424, 425, 426, 427, 428, 429, 430,
- 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
- 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
- 451, 452, 453, 454, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, 317, 318,
- 319, 320, 321, 322, 323, 324, 325, 326, -1, -1,
- 329, 330, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 348,
- 349, -1, 351, -1, 353, -1, -1, -1, -1, -1,
- 359, 360, 361, 362, 363, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, 374, 375, 376, 377, -1,
- -1, -1, 381, 382, 383, 384, 385, 386, 387, 388,
- 389, 390, 391, 392, 393, 394, 395, 396, -1, 398,
- 399, 400, 401, 402, 403, 404, 405, 406, 407, 408,
- 409, 410, 411, 412, 413, 414, 415, 416, 417, 418,
- 419, 420, 421, 422, 423, 424, 425, 426, 427, 428,
- 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
- 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
- 449, 450, 451, 452, 453, 454, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- 317, 318, 319, 320, 321, 322, 323, 324, 325, 326,
- -1, -1, 329, 330, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 348, 349, -1, 351, -1, -1, -1, -1, -1,
- -1, -1, 359, 360, 361, 362, 363, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 373, 374, 375, 376,
- 377, -1, -1, -1, 381, 382, 383, 384, 385, 386,
- 387, 388, 389, 390, 391, 392, 393, 394, 395, 396,
- -1, 398, 399, 400, 401, 402, 403, 404, 405, 406,
- 407, 408, 409, 410, 411, 412, 413, 414, 415, 416,
- 417, 418, 419, 420, 421, 422, 423, 424, 425, 426,
- 427, 428, 429, 430, 431, 432, 433, 434, 435, 436,
- 437, 438, 439, 440, 441, 442, 443, 444, 445, 446,
- 447, 448, 449, 450, 451, 452, 453, 454, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, 317, 318, 319, 320, 321, 322, 323, 324,
- 325, 326, -1, -1, 329, 330, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 565, -1, 567, -1, 569,
+ -1, -1, -1, -1, 565, -1, 567, -1, 569, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 797, 798,
+ -1, -1, -1, -1, -1, 804, 805, -1, -1, -1,
+ -1, 810, -1, 812, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 348, 349, -1, 351, -1, -1, -1,
- -1, -1, -1, -1, 359, 360, 361, 362, 363, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 373, 374,
- 375, 376, 377, -1, -1, -1, 381, 382, 383, 384,
- 385, 386, 387, 388, 389, 390, 391, 392, -1, -1,
+ -1, -1, 622, -1, -1, -1, -1, -1, -1, -1,
+ -1, 622, 632, -1, -1, -1, -1, -1, -1, -1,
+ 640, 632, -1, -1, -1, -1, -1, -1, -1, 640,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 408, 409, 410, 411, 412, 413, 414,
- 415, 416, 417, 418, 419, 420, 421, 422, -1, 424,
- 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
- 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
- 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, 320, 321, 322,
- 323, 324, 325, 326, -1, -1, 329, 330, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 348, 349, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 360, 361, 362,
- 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 373, 374, 375, 376, -1, -1, -1, -1, 381, 382,
- 383, 384, 385, 386, 387, 388, 389, 390, 391, 392,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 408, 409, 410, 411, 412,
- 413, 414, 415, 416, 417, 418, 419, 420, 421, 422,
- -1, 424, 425, 426, 427, 428, 429, 430, 431, 432,
- 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
- 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
- 453, 454, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, 317, 318, 319, 320,
- 321, 322, 323, 324, 325, 326, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 351, -1, -1, -1, -1, -1, -1, -1, 359, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 708, -1,
+ -1, -1, -1, -1, -1, -1, -1, 708, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 373, 374, 375, 376, 377, -1, -1, -1,
- -1, -1, -1, -1, -1, 386, 387, 388, 389, 390,
- 391, 392, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 408, 409, 410,
- 411, 412, 413, -1, -1, -1, -1, -1, -1, -1,
- -1, 422, -1, 424, 425, 426, 427, 428, 429, 430,
- 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
- 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
- 451, 452, 453, 454, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, 320, 321, 322, 323, 324, 325, 326, -1, -1,
+ -1, -1, -1, -1, -1, -1, 736, -1, -1, -1,
+ 740, -1, -1, -1, -1, 736, -1, -1, -1, 740,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 778, -1,
+ -1, -1, -1, -1, -1, -1, -1, 778, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, 374, 375, 376, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 386, 387, 388,
- 389, 390, 391, 392, 393, -1, -1, 396, -1, 398,
- 399, -1, -1, 402, -1, -1, -1, -1, -1, 408,
- 409, 410, 411, 412, 413, -1, -1, -1, -1, -1,
- -1, -1, -1, 422, -1, 424, 425, 426, 427, 428,
- 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
- 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
- 449, 450, 451, 452, 453, 454, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, -1, 320, 321, 322, 323, 324, 325, 326,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 359, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 373, 374, 375, 376,
- -1, -1, -1, -1, -1, -1, -1, -1, 385, 386,
- 387, 388, 389, 390, 391, 392, -1, -1, -1, -1,
+ -1, 841, 842, -1, 844, -1, 844, -1, -1, -1,
+ 841, 842, -1, 844, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 408, 409, 410, 411, 412, 413, -1, -1, -1,
- -1, -1, -1, -1, -1, 422, -1, 424, 425, 426,
- 427, 428, 429, 430, 431, 432, 433, 434, 435, 436,
- 437, 438, 439, 440, 441, 442, 443, 444, 445, 446,
- 447, 448, 449, 450, 451, 452, 453, 454, 3, 4,
- 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
- 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
- 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
- 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
- 65, 66, 67, 68, 69, 70, 71, 72, 73, 74,
- 75, 76, 77, 78, 79, 80, 81, 82, 83, 84,
- 85, 86, 87, 88, 89, 90, 91, 92, 93, 94,
- 95, 96, 97, 98, 99, 100, 101, 102, 103, 104,
- 105, 106, 107, 108, 109, 110, 111, 112, 113, 114,
- 115, 116, 117, 118, 119, 120, 121, 122, 123, 124,
- 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
- 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
- 145, 146, 147, 148, 149, 150, 151, 152, 153, 154,
- 155, 156, 157, 158, 159, 160, 161, 162, 163, 164,
- 165, 166, 167, 168, 169, 170, 171, 172, 173, 174,
- 175, 176, 177, 178, 179, 180, 181, 182, 183, 184,
- 185, 186, 187, 188, 189, 190, 191, 192, 193, 194,
- 195, 196, 197, 198, 199, 200, 201, 202, 203, 204,
- 205, 206, 207, 208, 209, 210, 211, 212, 213, 214,
- 215, 216, 217, 218, 219, 220, 221, 222, 223, 224,
- 225, 226, 227, 228, 229, 230, 231, 232, 233, 234,
- 235, 236, 237, 238, 239, 240, 241, 242, 243, 244,
- 245, 246, 247, 248, 249, 250, 251, 252, 253, 254,
- 255, 256, 257, 258, 259, 260, 261, 262, 263, 264,
- 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
- 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
- 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
- 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
- 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
- 315, 316, -1, -1, -1, 320, 321, 322, 323, 324,
- 325, 326, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 351, -1, -1, -1,
+ -1, -1, 882, -1, -1, -1, -1, -1, -1, -1,
+ -1, 882, -1, -1, -1, -1, -1, -1, 898, -1,
+ -1, -1, -1, -1, -1, 905, -1, 898, -1, -1,
+ -1, -1, -1, -1, 905, 915, -1, -1, -1, 919,
+ -1, -1, -1, -1, 915, 925, -1, -1, 919, -1,
+ -1, -1, 0, -1, 925, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ 318, 319, 320, 321, 322, 323, 324, 325, 326, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 373, 374,
- 375, 376, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 386, 387, 388, 389, 390, 391, 392, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 408, 409, 410, 411, 412, 413, -1,
- -1, -1, -1, -1, -1, -1, -1, 422, -1, 424,
- 425, 426, 427, 428, 429, 430, 431, 432, 433, 434,
- 435, 436, 437, 438, 439, 440, 441, 442, 443, 444,
- 445, 446, 447, 448, 449, 450, 451, 452, 453, 454,
- 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, 61, 62,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, 320, 321, 322,
- 323, 324, 325, 326, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 351, -1, -1, -1, -1, -1, -1,
+ -1, 359, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 373, 374, 375, 376, 377,
+ -1, -1, -1, -1, -1, -1, -1, -1, 386, 387,
+ 388, 389, 390, 391, 392, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 408, 409, 410, 411, 412, 413, -1, -1, -1, -1,
+ -1, -1, -1, -1, 422, -1, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
+ 448, 449, 450, 451, 452, 453, 454, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
+ 326, -1, -1, 329, 330, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 354, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 348, 349, -1, 351, -1, 353, 354, -1,
+ -1, -1, -1, 359, 360, 361, 362, 363, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 373, 374, 375,
+ 376, 377, -1, -1, -1, 381, 382, 383, 384, 385,
+ 386, 387, 388, 389, 390, 391, 392, 393, 394, 395,
+ 396, -1, 398, 399, 400, 401, 402, 403, 404, 405,
+ 406, 407, 408, 409, 410, 411, 412, 413, 414, 415,
+ 416, 417, 418, 419, 420, 421, 422, 423, 424, 425,
+ 426, 427, 428, 429, 430, 431, 432, 433, 434, 435,
+ 436, 437, 438, 439, 440, 441, 442, 443, 444, 445,
+ 446, 447, 448, 449, 450, 451, 452, 453, 454, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, 317, 318, 319, 320, 321, 322, 323,
+ 324, 325, 326, -1, -1, 329, 330, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 373, 374, 375, 376, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 386, 387, 388, 389, 390, 391, 392,
+ -1, -1, -1, -1, 348, 349, -1, 351, -1, 353,
+ 354, -1, -1, -1, -1, 359, 360, 361, 362, 363,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 373,
+ 374, 375, 376, 377, -1, -1, -1, 381, 382, 383,
+ 384, 385, 386, 387, 388, 389, 390, 391, 392, 393,
+ 394, 395, 396, -1, 398, 399, 400, 401, 402, 403,
+ 404, 405, 406, 407, 408, 409, 410, 411, 412, 413,
+ 414, 415, 416, 417, 418, 419, 420, 421, 422, 423,
+ 424, 425, 426, 427, 428, 429, 430, 431, 432, 433,
+ 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
+ 444, 445, 446, 447, 448, 449, 450, 451, 452, 453,
+ 454, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+ 322, 323, 324, 325, 326, -1, -1, 329, 330, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 408, 409, 410, 411, 412,
- 413, -1, -1, -1, -1, -1, -1, -1, -1, 422,
- -1, 424, 425, 426, 427, 428, 429, 430, 431, 432,
- 433, 434, 435, 436, 437, 438, 439, 440, 441, 442,
- 443, 444, 445, 446, 447, 448, 449, 450, 451, 452,
- 453, 454, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
- 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
- 41, 42, 43, 44, 45, 46, 47, 48, 49, 50,
- 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
- 61, 62, 63, 64, 65, 66, 67, 68, 69, 70,
- 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
- 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
- 91, 92, 93, 94, 95, 96, 97, 98, 99, 100,
- 101, 102, 103, 104, 105, 106, 107, 108, 109, 110,
- 111, 112, 113, 114, 115, 116, 117, 118, 119, 120,
- 121, 122, 123, 124, 125, 126, 127, 128, 129, 130,
- 131, 132, 133, 134, 135, 136, 137, 138, 139, 140,
- 141, 142, 143, 144, 145, 146, 147, 148, 149, 150,
- 151, 152, 153, 154, 155, 156, 157, 158, 159, 160,
- 161, 162, 163, 164, 165, 166, 167, 168, 169, 170,
- 171, 172, 173, 174, 175, 176, 177, 178, 179, 180,
- 181, 182, 183, 184, 185, 186, 187, 188, 189, 190,
- 191, 192, 193, 194, 195, 196, 197, 198, 199, 200,
- 201, 202, 203, 204, 205, 206, 207, 208, 209, 210,
- 211, 212, 213, 214, 215, 216, 217, 218, 219, 220,
- 221, 222, 223, 224, 225, 226, 227, 228, 229, 230,
- 231, 232, 233, 234, 235, 236, 237, 238, 239, 240,
- 241, 242, 243, 244, 245, 246, 247, 248, 249, 250,
- 251, 252, 253, 254, 255, 256, 257, 258, 259, 260,
- 261, 262, 263, 264, 265, 266, 267, 268, 269, 270,
- 271, 272, 273, 274, 275, 276, 277, 278, 279, 280,
- 281, 282, 283, 284, 285, 286, 287, 288, 289, 290,
- 291, 292, 293, 294, 295, 296, 297, 298, 299, 300,
- 301, 302, 303, 304, 305, 306, 307, 308, 309, 310,
- 311, 312, 313, 314, 315, 316, -1, -1, -1, 320,
- 321, 322, 323, 324, 325, 326, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 348, 349, -1, 351,
+ -1, 353, -1, -1, -1, -1, -1, 359, 360, 361,
+ 362, 363, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 373, 374, 375, 376, 377, -1, -1, -1, 381,
+ 382, 383, 384, 385, 386, 387, 388, 389, 390, 391,
+ 392, 393, 394, 395, 396, -1, 398, 399, 400, 401,
+ 402, 403, 404, 405, 406, 407, 408, 409, 410, 411,
+ 412, 413, 414, 415, 416, 417, 418, 419, 420, 421,
+ 422, 423, 424, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
+ 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
+ 452, 453, 454, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, 317, 318, 319,
+ 320, 321, 322, 323, 324, 325, 326, -1, -1, 329,
+ 330, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 348, 349,
+ -1, 351, -1, 353, -1, -1, -1, -1, -1, 359,
+ 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 373, 374, 375, 376, 377, -1, -1,
+ -1, 381, 382, 383, 384, 385, 386, 387, 388, 389,
+ 390, 391, 392, 393, 394, 395, 396, -1, 398, 399,
+ 400, 401, 402, 403, 404, 405, 406, 407, 408, 409,
+ 410, 411, 412, 413, 414, 415, 416, 417, 418, 419,
+ 420, 421, 422, 423, 424, 425, 426, 427, 428, 429,
+ 430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
+ 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
+ 450, 451, 452, 453, 454, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, 317,
+ 318, 319, 320, 321, 322, 323, 324, 325, 326, -1,
+ -1, 329, 330, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 348, 349, -1, 351, -1, -1, -1, -1, -1, -1,
+ -1, 359, 360, 361, 362, 363, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 373, 374, 375, 376, 377,
+ -1, -1, -1, 381, 382, 383, 384, 385, 386, 387,
+ 388, 389, 390, 391, 392, 393, 394, 395, 396, -1,
+ 398, 399, 400, 401, 402, 403, 404, 405, 406, 407,
+ 408, 409, 410, 411, 412, 413, 414, 415, 416, 417,
+ 418, 419, 420, 421, 422, 423, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
+ 448, 449, 450, 451, 452, 453, 454, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, 317, 318, 319, 320, 321, 322, 323, 324, 325,
+ 326, -1, -1, 329, 330, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 354, -1, -1, -1, -1, -1, -1,
+ -1, -1, 348, 349, -1, 351, -1, -1, -1, -1,
+ -1, -1, -1, 359, 360, 361, 362, 363, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 373, 374, 375,
+ 376, 377, -1, -1, -1, 381, 382, 383, 384, 385,
+ 386, 387, 388, 389, 390, 391, 392, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 373, 374, 375, 376, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 386, 387, 388, 389, 390,
- 391, 392, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 408, 409, 410,
- 411, 412, 413, -1, -1, -1, -1, -1, -1, -1,
- -1, 422, -1, 424, 425, 426, 427, 428, 429, 430,
- 431, 432, 433, 434, 435, 436, 437, 438, 439, 440,
- 441, 442, 443, 444, 445, 446, 447, 448, 449, 450,
- 451, 452, 453, 454, 3, 4, 5, 6, 7, 8,
- 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
- 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
- 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
- 39, 40, 41, 42, 43, 44, 45, 46, 47, 48,
- 49, 50, 51, 52, 53, 54, 55, 56, 57, 58,
- 59, 60, 61, 62, 63, 64, 65, 66, 67, 68,
- 69, 70, 71, 72, 73, 74, 75, 76, 77, 78,
- 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
- 89, 90, 91, 92, 93, 94, 95, 96, 97, 98,
- 99, 100, 101, 102, 103, 104, 105, 106, 107, 108,
- 109, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 151, 152, 153, 154, 155, 156, 157, 158,
- 159, 160, 161, 162, 163, 164, 165, 166, 167, 168,
- 169, 170, 171, 172, 173, 174, 175, 176, 177, 178,
- 179, 180, 181, 182, 183, 184, 185, 186, 187, 188,
- 189, 190, 191, 192, 193, 194, 195, 196, 197, 198,
- 199, 200, 201, 202, 203, 204, 205, 206, 207, 208,
- 209, 210, 211, 212, 213, 214, 215, 216, 217, 218,
- 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
- 229, 230, 231, 232, 233, 234, 235, 236, 237, 238,
- 239, 240, 241, 242, 243, 244, 245, 246, 247, 248,
- 249, 250, 251, 252, 253, 254, 255, 256, 257, 258,
- 259, 260, 261, 262, 263, 264, 265, 266, 267, 268,
- 269, 270, 271, 272, 273, 274, 275, 276, 277, 278,
- 279, 280, 281, 282, 283, 284, 285, 286, 287, 288,
- 289, 290, 291, 292, 293, 294, 295, 296, 297, 298,
- 299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
- 309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
- -1, 320, 321, 322, 323, 324, 325, 326, -1, -1,
+ -1, -1, 408, 409, 410, 411, 412, 413, 414, 415,
+ 416, 417, 418, 419, 420, 421, 422, -1, 424, 425,
+ 426, 427, 428, 429, 430, 431, 432, 433, 434, 435,
+ 436, 437, 438, 439, 440, 441, 442, 443, 444, 445,
+ 446, 447, 448, 449, 450, 451, 452, 453, 454, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, -1, -1, -1, 320, 321, 322, 323,
+ 324, 325, 326, -1, -1, 329, 330, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 348, 349, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 360, 361, 362, 363,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 373,
+ 374, 375, 376, -1, -1, -1, -1, 381, 382, 383,
+ 384, 385, 386, 387, 388, 389, 390, 391, 392, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 354, -1, -1, -1, -1,
+ -1, -1, -1, -1, 408, 409, 410, 411, 412, 413,
+ 414, 415, 416, 417, 418, 419, 420, 421, 422, -1,
+ 424, 425, 426, 427, 428, 429, 430, 431, 432, 433,
+ 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
+ 444, 445, 446, 447, 448, 449, 450, 451, 452, 453,
+ 454, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, 317, 318, 319, 320, 321,
+ 322, 323, 324, 325, 326, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 373, 374, 375, 376, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 386, 387, 388,
- 389, 390, 391, 392, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 408,
- 409, 410, 411, 412, 413, -1, -1, -1, -1, -1,
- -1, -1, -1, 422, -1, 424, 425, 426, 427, 428,
- 429, 430, 431, 432, 433, 434, 435, 436, 437, 438,
- 439, 440, 441, 442, 443, 444, 445, 446, 447, 448,
- 449, 450, 451, 452, 453, 454, 3, 4, 5, 6,
- 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
- 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
- 27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
- 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
- 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
- 57, 58, 59, 60, 61, 62, 63, 64, 65, 66,
- 67, 68, 69, 70, 71, 72, 73, 74, 75, 76,
- 77, 78, 79, 80, 81, 82, 83, 84, 85, 86,
- 87, 88, 89, 90, 91, 92, 93, 94, 95, 96,
- 97, 98, 99, 100, 101, 102, 103, 104, 105, 106,
- 107, 108, 109, 110, 111, 112, 113, 114, 115, 116,
- 117, 118, 119, 120, 121, 122, 123, 124, 125, 126,
- 127, 128, 129, 130, 131, 132, 133, 134, 135, 136,
- 137, 138, 139, 140, 141, 142, 143, 144, 145, 146,
- 147, 148, 149, 150, 151, 152, 153, 154, 155, 156,
- 157, 158, 159, 160, 161, 162, 163, 164, 165, 166,
- 167, 168, 169, 170, 171, 172, 173, 174, 175, 176,
- 177, 178, 179, 180, 181, 182, 183, 184, 185, 186,
- 187, 188, 189, 190, 191, 192, 193, 194, 195, 196,
- 197, 198, 199, 200, 201, 202, 203, 204, 205, 206,
- 207, 208, 209, 210, 211, 212, 213, 214, 215, 216,
- 217, 218, 219, 220, 221, 222, 223, 224, 225, 226,
- 227, 228, 229, 230, 231, 232, 233, 234, 235, 236,
- 237, 238, 239, 240, 241, 242, 243, 244, 245, 246,
- 247, 248, 249, 250, 251, 252, 253, 254, 255, 256,
- 257, 258, 259, 260, 261, 262, 263, 264, 265, 266,
- 267, 268, 269, 270, 271, 272, 273, 274, 275, 276,
- 277, 278, 279, 280, 281, 282, 283, 284, 285, 286,
- 287, 288, 289, 290, 291, 292, 293, 294, 295, 296,
- 297, 298, 299, 300, 301, 302, 303, 304, 305, 306,
- 307, 308, 309, 310, 311, 312, 313, 314, 315, 316,
- -1, -1, -1, 320, 321, 322, 323, 324, 325, 326,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 351,
+ -1, -1, -1, -1, -1, -1, -1, 359, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 373, 374, 375, 376, 377, -1, -1, -1, -1,
+ -1, -1, -1, -1, 386, 387, 388, 389, 390, 391,
+ 392, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 408, 409, 410, 411,
+ 412, 413, -1, -1, -1, -1, -1, -1, -1, -1,
+ 422, -1, 424, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
+ 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
+ 452, 453, 454, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
+ 320, 321, 322, 323, 324, 325, 326, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 373, 374, 375, 376,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, 386,
- 387, 388, 389, 390, 391, 392, -1, -1, -1, -1,
+ -1, -1, -1, 373, 374, 375, 376, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 386, 387, 388, 389,
+ 390, 391, 392, 393, -1, -1, 396, -1, 398, 399,
+ -1, -1, 402, -1, -1, -1, -1, -1, 408, 409,
+ 410, 411, 412, 413, -1, -1, -1, -1, -1, -1,
+ -1, -1, 422, -1, 424, 425, 426, 427, 428, 429,
+ 430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
+ 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
+ 450, 451, 452, 453, 454, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
+ -1, -1, 320, 321, 322, 323, 324, 325, 326, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 408, 409, 410, 411, 412, 413, -1, -1, -1,
- -1, -1, -1, -1, -1, 422, -1, 424, 425, 426,
- 427, 428, 429, 430, 431, 432, 433, 434, 435, 436,
- 437, 438, 439, 440, 441, 442, 443, 444, 445, 446,
- 447, 448, 449, 450, 451, 452, 453, 454, 4, 5,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 359, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 373, 374, 375, 376, -1,
+ -1, -1, -1, -1, -1, -1, -1, 385, 386, 387,
+ 388, 389, 390, 391, 392, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 408, 409, 410, 411, 412, 413, -1, -1, -1, -1,
+ -1, -1, -1, -1, 422, -1, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
+ 448, 449, 450, 451, 452, 453, 454, 3, 4, 5,
6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
- 56, 57, 58, 59, 60, -1, -1, 63, 64, 65,
+ 56, 57, 58, 59, 60, 61, 62, 63, 64, 65,
66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
@@ -3783,68 +3557,117 @@ static const yytype_int16 yycheck[] =
286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
- 316, -1, -1, -1, -1, -1, -1, 323, -1, -1,
- -1, -1, -1, 329, 330, -1, -1, -1, -1, -1,
+ 316, -1, -1, -1, 320, 321, 322, 323, 324, 325,
+ 326, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 348, 349, -1, -1, -1, 353, 354, -1,
- -1, -1, -1, -1, 360, 361, 362, 363, -1, -1,
+ -1, -1, -1, -1, -1, 351, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 381, 382, 383, 384, 385,
- 386, -1, -1, -1, -1, 391, 392, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 373, 374, 375,
+ 376, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 386, 387, 388, 389, 390, 391, 392, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 414, 415,
- 416, 417, 418, 419, 420, 421, -1, -1, -1, -1,
+ -1, -1, 408, 409, 410, 411, 412, 413, -1, -1,
+ -1, -1, -1, -1, -1, -1, 422, -1, 424, 425,
+ 426, 427, 428, 429, 430, 431, 432, 433, 434, 435,
+ 436, 437, 438, 439, 440, 441, 442, 443, 444, 445,
+ 446, 447, 448, 449, 450, 451, 452, 453, 454, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 47, 48, 49, 50, 51, 52, 53,
+ 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,
+ 64, 65, 66, 67, 68, 69, 70, 71, 72, 73,
+ 74, 75, 76, 77, 78, 79, 80, 81, 82, 83,
+ 84, 85, 86, 87, 88, 89, 90, 91, 92, 93,
+ 94, 95, 96, 97, 98, 99, 100, 101, 102, 103,
+ 104, 105, 106, 107, 108, 109, 110, 111, 112, 113,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
+ 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
+ 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
+ 154, 155, 156, 157, 158, 159, 160, 161, 162, 163,
+ 164, 165, 166, 167, 168, 169, 170, 171, 172, 173,
+ 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
+ 184, 185, 186, 187, 188, 189, 190, 191, 192, 193,
+ 194, 195, 196, 197, 198, 199, 200, 201, 202, 203,
+ 204, 205, 206, 207, 208, 209, 210, 211, 212, 213,
+ 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
+ 224, 225, 226, 227, 228, 229, 230, 231, 232, 233,
+ 234, 235, 236, 237, 238, 239, 240, 241, 242, 243,
+ 244, 245, 246, 247, 248, 249, 250, 251, 252, 253,
+ 254, 255, 256, 257, 258, 259, 260, 261, 262, 263,
+ 264, 265, 266, 267, 268, 269, 270, 271, 272, 273,
+ 274, 275, 276, 277, 278, 279, 280, 281, 282, 283,
+ 284, 285, 286, 287, 288, 289, 290, 291, 292, 293,
+ 294, 295, 296, 297, 298, 299, 300, 301, 302, 303,
+ 304, 305, 306, 307, 308, 309, 310, 311, 312, 313,
+ 314, 315, 316, -1, -1, -1, 320, 321, 322, 323,
+ 324, 325, 326, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 436, 4, 5, 6, 7, 8, 9, 10, 11, 12,
- 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
- 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
- 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
- 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
- 53, 54, 55, 56, 57, 58, 59, 60, -1, -1,
- 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
- 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
- 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
- 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
- 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
- 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
- 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
- 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
- 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
- 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
- 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
- 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
- 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
- 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
- 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
- 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
- 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
- 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
- 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
- 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
- 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
- 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
- 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
- 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
- 313, 314, 315, 316, -1, -1, -1, -1, -1, -1,
- 323, -1, -1, -1, -1, -1, 329, 330, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 348, 349, -1, -1, -1,
- 353, 354, -1, -1, -1, -1, -1, 360, 361, 362,
- 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 381, 382,
- 383, 384, 385, 386, -1, -1, -1, -1, 391, 392,
+ 354, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 373,
+ 374, 375, 376, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 386, 387, 388, 389, 390, 391, 392, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 408, 409, 410, 411, 412, 413,
+ -1, -1, -1, -1, -1, -1, -1, -1, 422, -1,
+ 424, 425, 426, 427, 428, 429, 430, 431, 432, 433,
+ 434, 435, 436, 437, 438, 439, 440, 441, 442, 443,
+ 444, 445, 446, 447, 448, 449, 450, 451, 452, 453,
+ 454, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61,
+ 62, 63, 64, 65, 66, 67, 68, 69, 70, 71,
+ 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
+ 82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
+ 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
+ 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113, 114, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 142, 143, 144, 145, 146, 147, 148, 149, 150, 151,
+ 152, 153, 154, 155, 156, 157, 158, 159, 160, 161,
+ 162, 163, 164, 165, 166, 167, 168, 169, 170, 171,
+ 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
+ 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
+ 192, 193, 194, 195, 196, 197, 198, 199, 200, 201,
+ 202, 203, 204, 205, 206, 207, 208, 209, 210, 211,
+ 212, 213, 214, 215, 216, 217, 218, 219, 220, 221,
+ 222, 223, 224, 225, 226, 227, 228, 229, 230, 231,
+ 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
+ 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
+ 252, 253, 254, 255, 256, 257, 258, 259, 260, 261,
+ 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
+ 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
+ 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
+ 292, 293, 294, 295, 296, 297, 298, 299, 300, 301,
+ 302, 303, 304, 305, 306, 307, 308, 309, 310, 311,
+ 312, 313, 314, 315, 316, -1, -1, -1, 320, 321,
+ 322, 323, 324, 325, 326, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 414, 415, 416, 417, 418, 419, 420, 421, -1,
+ -1, -1, 354, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 436, 4, 5, 6, 7, 8, 9,
+ -1, 373, 374, 375, 376, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 386, 387, 388, 389, 390, 391,
+ 392, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 408, 409, 410, 411,
+ 412, 413, -1, -1, -1, -1, -1, -1, -1, -1,
+ 422, -1, 424, 425, 426, 427, 428, 429, 430, 431,
+ 432, 433, 434, 435, 436, 437, 438, 439, 440, 441,
+ 442, 443, 444, 445, 446, 447, 448, 449, 450, 451,
+ 452, 453, 454, 3, 4, 5, 6, 7, 8, 9,
10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
- 60, -1, -1, 63, 64, 65, 66, 67, 68, 69,
+ 60, 61, 62, 63, 64, 65, 66, 67, 68, 69,
70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
@@ -3870,18 +3693,65 @@ static const yytype_int16 yycheck[] =
290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
- -1, -1, -1, 323, -1, -1, -1, -1, -1, 329,
- 330, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 348, 349,
- -1, -1, 352, -1, -1, -1, -1, -1, -1, -1,
- 360, 361, 362, 363, -1, -1, -1, -1, -1, -1,
+ 320, 321, 322, 323, 324, 325, 326, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 354, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 373, 374, 375, 376, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, 386, 387, 388, 389,
+ 390, 391, 392, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 408, 409,
+ 410, 411, 412, 413, -1, -1, -1, -1, -1, -1,
+ -1, -1, 422, -1, 424, 425, 426, 427, 428, 429,
+ 430, 431, 432, 433, 434, 435, 436, 437, 438, 439,
+ 440, 441, 442, 443, 444, 445, 446, 447, 448, 449,
+ 450, 451, 452, 453, 454, 3, 4, 5, 6, 7,
+ 8, 9, 10, 11, 12, 13, 14, 15, 16, 17,
+ 18, 19, 20, 21, 22, 23, 24, 25, 26, 27,
+ 28, 29, 30, 31, 32, 33, 34, 35, 36, 37,
+ 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,
+ 48, 49, 50, 51, 52, 53, 54, 55, 56, 57,
+ 58, 59, 60, 61, 62, 63, 64, 65, 66, 67,
+ 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
+ 78, 79, 80, 81, 82, 83, 84, 85, 86, 87,
+ 88, 89, 90, 91, 92, 93, 94, 95, 96, 97,
+ 98, 99, 100, 101, 102, 103, 104, 105, 106, 107,
+ 108, 109, 110, 111, 112, 113, 114, 115, 116, 117,
+ 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
+ 128, 129, 130, 131, 132, 133, 134, 135, 136, 137,
+ 138, 139, 140, 141, 142, 143, 144, 145, 146, 147,
+ 148, 149, 150, 151, 152, 153, 154, 155, 156, 157,
+ 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
+ 168, 169, 170, 171, 172, 173, 174, 175, 176, 177,
+ 178, 179, 180, 181, 182, 183, 184, 185, 186, 187,
+ 188, 189, 190, 191, 192, 193, 194, 195, 196, 197,
+ 198, 199, 200, 201, 202, 203, 204, 205, 206, 207,
+ 208, 209, 210, 211, 212, 213, 214, 215, 216, 217,
+ 218, 219, 220, 221, 222, 223, 224, 225, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
+ 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
+ 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
+ 288, 289, 290, 291, 292, 293, 294, 295, 296, 297,
+ 298, 299, 300, 301, 302, 303, 304, 305, 306, 307,
+ 308, 309, 310, 311, 312, 313, 314, 315, 316, -1,
+ -1, -1, 320, 321, 322, 323, 324, 325, 326, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 381, 382, 383, 384, 385, 386, -1, -1, -1,
- -1, 391, 392, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 414, 415, 416, 417, 418, 419,
- 420, 421, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 436, 4, 5, 6,
+ -1, -1, -1, -1, -1, 373, 374, 375, 376, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 386, 387,
+ 388, 389, 390, 391, 392, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 408, 409, 410, 411, 412, 413, -1, -1, -1, -1,
+ -1, -1, -1, -1, 422, -1, 424, 425, 426, 427,
+ 428, 429, 430, 431, 432, 433, 434, 435, 436, 437,
+ 438, 439, 440, 441, 442, 443, 444, 445, 446, 447,
+ 448, 449, 450, 451, 452, 453, 454, 4, 5, 6,
7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
27, 28, 29, 30, 31, 32, 33, 34, 35, 36,
@@ -3916,7 +3786,7 @@ static const yytype_int16 yycheck[] =
-1, -1, -1, -1, -1, -1, 323, -1, -1, -1,
-1, -1, 329, 330, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, 348, 349, -1, -1, -1, 353, -1, -1, -1,
+ -1, 348, 349, -1, -1, -1, 353, 354, -1, -1,
-1, -1, -1, 360, 361, 362, 363, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, 381, 382, 383, 384, 385, 386,
@@ -3959,8 +3829,8 @@ static const yytype_int16 yycheck[] =
314, 315, 316, -1, -1, -1, -1, -1, -1, 323,
-1, -1, -1, -1, -1, 329, 330, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, 348, 349, -1, -1, 352, -1,
- -1, -1, -1, -1, -1, -1, 360, 361, 362, 363,
+ -1, -1, -1, -1, 348, 349, -1, -1, -1, 353,
+ 354, -1, -1, -1, -1, -1, 360, 361, 362, 363,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 381, 382, 383,
384, 385, 386, -1, -1, -1, -1, 391, 392, -1,
@@ -4003,7 +3873,7 @@ static const yytype_int16 yycheck[] =
-1, -1, 323, -1, -1, -1, -1, -1, 329, 330,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, 348, 349, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 359, 360,
+ -1, 352, -1, -1, -1, -1, -1, -1, -1, 360,
361, 362, 363, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
381, 382, 383, 384, 385, 386, -1, -1, -1, -1,
@@ -4046,7 +3916,7 @@ static const yytype_int16 yycheck[] =
-1, -1, -1, -1, -1, 323, -1, -1, -1, -1,
-1, 329, 330, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- 348, 349, -1, -1, -1, -1, -1, -1, -1, -1,
+ 348, 349, -1, -1, -1, 353, -1, -1, -1, -1,
-1, -1, 360, 361, 362, 363, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 381, 382, 383, 384, 385, 386, -1,
@@ -4089,7 +3959,7 @@ static const yytype_int16 yycheck[] =
315, 316, -1, -1, -1, -1, -1, -1, 323, -1,
-1, -1, -1, -1, 329, 330, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, 348, 349, -1, -1, -1, -1, -1,
+ -1, -1, -1, 348, 349, -1, -1, 352, -1, -1,
-1, -1, -1, -1, -1, 360, 361, 362, 363, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 381, 382, 383, 384,
@@ -4133,7 +4003,7 @@ static const yytype_int16 yycheck[] =
-1, 323, -1, -1, -1, -1, -1, 329, 330, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, 348, 349, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, 360, 361,
+ -1, -1, -1, -1, -1, -1, -1, 359, 360, 361,
362, 363, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, 381,
382, 383, 384, 385, 386, -1, -1, -1, -1, 391,
@@ -4174,13 +4044,143 @@ static const yytype_int16 yycheck[] =
299, 300, 301, 302, 303, 304, 305, 306, 307, 308,
309, 310, 311, 312, 313, 314, 315, 316, -1, -1,
-1, -1, -1, -1, 323, -1, -1, -1, -1, -1,
+ 329, 330, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, 348,
+ 349, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 360, 361, 362, 363, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 381, 382, 383, 384, 385, 386, -1, -1,
+ -1, -1, 391, 392, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 414, 415, 416, 417, 418,
+ 419, 420, 421, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 436, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 38, 39, 40, 41, 42, 43, 44, 45,
+ 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
+ 56, 57, 58, 59, 60, -1, -1, 63, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 78, 79, 80, 81, 82, 83, 84, 85,
+ 86, 87, 88, 89, 90, 91, 92, 93, 94, 95,
+ 96, 97, 98, 99, 100, 101, 102, 103, 104, 105,
+ 106, 107, 108, 109, 110, 111, 112, 113, 114, 115,
+ 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
+ 126, 127, 128, 129, 130, 131, 132, 133, 134, 135,
+ 136, 137, 138, 139, 140, 141, 142, 143, 144, 145,
+ 146, 147, 148, 149, 150, 151, 152, 153, 154, 155,
+ 156, 157, 158, 159, 160, 161, 162, 163, 164, 165,
+ 166, 167, 168, 169, 170, 171, 172, 173, 174, 175,
+ 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
+ 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
+ 196, 197, 198, 199, 200, 201, 202, 203, 204, 205,
+ 206, 207, 208, 209, 210, 211, 212, 213, 214, 215,
+ 216, 217, 218, 219, 220, 221, 222, 223, 224, 225,
+ 226, 227, 228, 229, 230, 231, 232, 233, 234, 235,
+ 236, 237, 238, 239, 240, 241, 242, 243, 244, 245,
+ 246, 247, 248, 249, 250, 251, 252, 253, 254, 255,
+ 256, 257, 258, 259, 260, 261, 262, 263, 264, 265,
+ 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 293, 294, 295,
+ 296, 297, 298, 299, 300, 301, 302, 303, 304, 305,
+ 306, 307, 308, 309, 310, 311, 312, 313, 314, 315,
+ 316, -1, -1, -1, -1, -1, -1, 323, -1, -1,
+ -1, -1, -1, 329, 330, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, 348, 349, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, 360, 361, 362, 363, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 381, 382, 383, 384, 385,
+ 386, -1, -1, -1, -1, 391, 392, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 414, 415,
+ 416, 417, 418, 419, 420, 421, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ 436, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 38, 39, 40, 41, 42,
+ 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
+ 53, 54, 55, 56, 57, 58, 59, 60, -1, -1,
+ 63, 64, 65, 66, 67, 68, 69, 70, 71, 72,
+ 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 92,
+ 93, 94, 95, 96, 97, 98, 99, 100, 101, 102,
+ 103, 104, 105, 106, 107, 108, 109, 110, 111, 112,
+ 113, 114, 115, 116, 117, 118, 119, 120, 121, 122,
+ 123, 124, 125, 126, 127, 128, 129, 130, 131, 132,
+ 133, 134, 135, 136, 137, 138, 139, 140, 141, 142,
+ 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
+ 153, 154, 155, 156, 157, 158, 159, 160, 161, 162,
+ 163, 164, 165, 166, 167, 168, 169, 170, 171, 172,
+ 173, 174, 175, 176, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 194, 195, 196, 197, 198, 199, 200, 201, 202,
+ 203, 204, 205, 206, 207, 208, 209, 210, 211, 212,
+ 213, 214, 215, 216, 217, 218, 219, 220, 221, 222,
+ 223, 224, 225, 226, 227, 228, 229, 230, 231, 232,
+ 233, 234, 235, 236, 237, 238, 239, 240, 241, 242,
+ 243, 244, 245, 246, 247, 248, 249, 250, 251, 252,
+ 253, 254, 255, 256, 257, 258, 259, 260, 261, 262,
+ 263, 264, 265, 266, 267, 268, 269, 270, 271, 272,
+ 273, 274, 275, 276, 277, 278, 279, 280, 281, 282,
+ 283, 284, 285, 286, 287, 288, 289, 290, 291, 292,
+ 293, 294, 295, 296, 297, 298, 299, 300, 301, 302,
+ 303, 304, 305, 306, 307, 308, 309, 310, 311, 312,
+ 313, 314, 315, 316, -1, -1, -1, -1, -1, -1,
+ 323, -1, -1, -1, -1, -1, 329, 330, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, 348, 349, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, 360, 361, 362,
+ 363, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, 381, 382,
+ 383, 384, 385, 386, -1, -1, -1, -1, 391, 392,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, 414, 415, 416, 417, 418, 419, 420, 421, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, 436, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
+ 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
+ 40, 41, 42, 43, 44, 45, 46, 47, 48, 49,
+ 50, 51, 52, 53, 54, 55, 56, 57, 58, 59,
+ 60, -1, -1, 63, 64, 65, 66, 67, 68, 69,
+ 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
+ 80, 81, 82, 83, 84, 85, 86, 87, 88, 89,
+ 90, 91, 92, 93, 94, 95, 96, 97, 98, 99,
+ 100, 101, 102, 103, 104, 105, 106, 107, 108, 109,
+ 110, 111, 112, 113, 114, 115, 116, 117, 118, 119,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 154, 155, 156, 157, 158, 159,
+ 160, 161, 162, 163, 164, 165, 166, 167, 168, 169,
+ 170, 171, 172, 173, 174, 175, 176, 177, 178, 179,
+ 180, 181, 182, 183, 184, 185, 186, 187, 188, 189,
+ 190, 191, 192, 193, 194, 195, 196, 197, 198, 199,
+ 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
+ 210, 211, 212, 213, 214, 215, 216, 217, 218, 219,
+ 220, 221, 222, 223, 224, 225, 226, 227, 228, 229,
+ 230, 231, 232, 233, 234, 235, 236, 237, 238, 239,
+ 240, 241, 242, 243, 244, 245, 246, 247, 248, 249,
+ 250, 251, 252, 253, 254, 255, 256, 257, 258, 259,
+ 260, 261, 262, 263, 264, 265, 266, 267, 268, 269,
+ 270, 271, 272, 273, 274, 275, 276, 277, 278, 279,
+ 280, 281, 282, 283, 284, 285, 286, 287, 288, 289,
+ 290, 291, 292, 293, 294, 295, 296, 297, 298, 299,
+ 300, 301, 302, 303, 304, 305, 306, 307, 308, 309,
+ 310, 311, 312, 313, 314, 315, 316, -1, -1, -1,
+ -1, -1, -1, 323, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, 386, -1, -1,
- -1, -1, 391, 392
+ -1, -1, -1, -1, -1, -1, 386, -1, -1, -1,
+ -1, 391, 392
};
/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
@@ -4256,30 +4256,30 @@ static const yytype_int16 yystos[] =
563, 348, 351, 382, 567, 584, 385, 585, 348, 381,
382, 383, 384, 571, 572, 382, 480, 485, 573, 382,
381, 382, 383, 384, 576, 577, 382, 485, 578, 382,
- 348, 579, 382, 584, 385, 485, 511, 581, 582, 382,
- 485, 352, 565, 511, 385, 523, 524, 354, 522, 521,
- 485, 504, 385, 364, 365, 366, 361, 363, 327, 328,
- 331, 332, 367, 368, 333, 334, 371, 370, 369, 335,
- 337, 336, 372, 352, 352, 480, 354, 532, 349, 359,
- 359, 553, 349, 349, 359, 359, 484, 349, 484, 357,
- 359, 359, 359, 359, 338, 339, 340, 341, 342, 343,
- 344, 345, 346, 347, 358, 483, 356, 359, 354, 528,
- 542, 546, 551, 525, 358, 354, 525, 526, 525, 521,
- 385, 350, 459, 484, 385, 482, 467, 348, 382, 568,
- 569, 350, 358, 350, 356, 350, 356, 350, 356, 356,
- 350, 356, 350, 356, 350, 356, 356, 350, 356, 356,
- 350, 356, 350, 356, 350, 350, 523, 512, 356, 359,
- 354, 467, 467, 467, 469, 469, 470, 470, 471, 471,
- 471, 471, 472, 472, 473, 474, 475, 476, 477, 478,
- 481, 352, 539, 552, 528, 554, 484, 359, 484, 357,
- 482, 482, 525, 354, 356, 354, 352, 352, 356, 352,
- 356, 572, 571, 485, 573, 577, 576, 485, 578, 348,
- 579, 581, 582, 359, 524, 484, 533, 484, 499, 544,
- 393, 527, 540, 555, 350, 350, 354, 525, 348, 382,
- 350, 350, 350, 350, 350, 350, 357, 354, 385, 350,
- 349, 544, 556, 557, 535, 536, 537, 543, 547, 482,
- 358, 529, 534, 538, 484, 359, 350, 397, 531, 529,
- 353, 525, 350, 484, 534, 535, 539, 548, 359, 354
+ 348, 579, 382, 584, 385, 485, 581, 582, 382, 485,
+ 352, 565, 511, 385, 523, 524, 354, 522, 521, 485,
+ 504, 385, 364, 365, 366, 361, 363, 327, 328, 331,
+ 332, 367, 368, 333, 334, 371, 370, 369, 335, 337,
+ 336, 372, 352, 352, 480, 354, 532, 349, 359, 359,
+ 553, 349, 349, 359, 359, 484, 349, 484, 357, 359,
+ 359, 359, 359, 338, 339, 340, 341, 342, 343, 344,
+ 345, 346, 347, 358, 483, 356, 359, 354, 528, 542,
+ 546, 551, 525, 358, 354, 525, 526, 525, 521, 385,
+ 350, 459, 484, 385, 482, 467, 348, 382, 568, 569,
+ 350, 358, 350, 356, 350, 356, 350, 356, 356, 350,
+ 356, 350, 356, 350, 356, 356, 350, 356, 356, 350,
+ 356, 350, 356, 350, 350, 523, 512, 356, 359, 354,
+ 467, 467, 467, 469, 469, 470, 470, 471, 471, 471,
+ 471, 472, 472, 473, 474, 475, 476, 477, 478, 481,
+ 352, 539, 552, 528, 554, 484, 359, 484, 357, 482,
+ 482, 525, 354, 356, 354, 352, 352, 356, 352, 356,
+ 572, 571, 485, 573, 577, 576, 485, 578, 348, 579,
+ 581, 582, 359, 524, 484, 533, 484, 499, 544, 393,
+ 527, 540, 555, 350, 350, 354, 525, 348, 382, 350,
+ 350, 350, 350, 350, 350, 357, 354, 385, 350, 349,
+ 544, 556, 557, 535, 536, 537, 543, 547, 482, 358,
+ 529, 534, 538, 484, 359, 350, 397, 531, 529, 353,
+ 525, 350, 484, 534, 535, 539, 548, 359, 354
};
/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
@@ -4352,8 +4352,8 @@ static const yytype_int16 yyr1[] =
570, 570, 571, 571, 572, 572, 572, 572, 572, 573,
573, 574, 574, 575, 575, 575, 575, 575, 575, 575,
575, 576, 576, 577, 577, 577, 577, 578, 578, 579,
- 579, 580, 580, 580, 580, 581, 581, 582, 582, 583,
- 583, 584, 584, 585, 585
+ 579, 580, 580, 580, 580, 581, 581, 582, 583, 583,
+ 584, 584, 585, 585
};
/* YYR2[YYN] -- Number of symbols on the right hand side of rule YYN. */
@@ -4426,8 +4426,8 @@ static const yytype_int8 yyr2[] =
6, 8, 1, 3, 1, 1, 1, 1, 1, 1,
3, 4, 6, 4, 6, 6, 8, 6, 8, 6,
8, 1, 3, 1, 1, 1, 1, 1, 3, 1,
- 3, 6, 8, 4, 6, 1, 3, 1, 1, 4,
- 6, 1, 3, 3, 3
+ 3, 6, 8, 4, 6, 1, 3, 1, 4, 6,
+ 1, 3, 3, 3
};
@@ -6204,7 +6204,7 @@ yyreduce:
(yyval.interm).function = (yyvsp[-2].interm.function);
(yyval.interm).loc = (yyvsp[-1].lex).loc;
parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
- parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function);
+ parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
}
#line 6210 "MachineIndependent/glslang_tab.cpp"
break;
@@ -6215,7 +6215,7 @@ yyreduce:
(yyval.interm).function = (yyvsp[-1].interm.function);
(yyval.interm).loc = (yyvsp[0].lex).loc;
parseContext.requireExtensions((yyvsp[0].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
- parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes), (yyval.interm).function);
+ parseContext.handleFunctionAttributes((yyvsp[0].lex).loc, *(yyvsp[-2].interm.attributes));
}
#line 6221 "MachineIndependent/glslang_tab.cpp"
break;
@@ -6226,8 +6226,8 @@ yyreduce:
(yyval.interm).function = (yyvsp[-2].interm.function);
(yyval.interm).loc = (yyvsp[-1].lex).loc;
parseContext.requireExtensions((yyvsp[-1].lex).loc, 1, &E_GL_EXT_subgroup_uniform_control_flow, "attribute");
- parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes), (yyval.interm).function);
- parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes), (yyval.interm).function);
+ parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[-3].interm.attributes));
+ parseContext.handleFunctionAttributes((yyvsp[-1].lex).loc, *(yyvsp[0].interm.attributes));
}
#line 6233 "MachineIndependent/glslang_tab.cpp"
break;
@@ -11387,15 +11387,16 @@ yyreduce:
case 598: /* $@11: %empty */
#line 3928 "MachineIndependent/glslang.y"
{
+ parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
-#line 11395 "MachineIndependent/glslang_tab.cpp"
+#line 11396 "MachineIndependent/glslang_tab.cpp"
break;
case 599: /* iteration_statement_nonattributed: DO $@11 statement WHILE LEFT_PAREN expression RIGHT_PAREN SEMICOLON */
-#line 3933 "MachineIndependent/glslang.y"
+#line 3934 "MachineIndependent/glslang.y"
{
if (! parseContext.limits.whileLoops)
parseContext.error((yyvsp[-7].lex).loc, "do-while loops not available", "limitation", "");
@@ -11403,26 +11404,27 @@ yyreduce:
parseContext.boolCheck((yyvsp[0].lex).loc, (yyvsp[-2].interm.intermTypedNode));
(yyval.interm.intermNode) = parseContext.intermediate.addLoop((yyvsp[-5].interm.intermNode), (yyvsp[-2].interm.intermTypedNode), 0, false, (yyvsp[-4].lex).loc);
+ parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
--parseContext.loopNestingLevel;
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
-#line 11411 "MachineIndependent/glslang_tab.cpp"
+#line 11413 "MachineIndependent/glslang_tab.cpp"
break;
case 600: /* $@12: %empty */
-#line 3944 "MachineIndependent/glslang.y"
+#line 3946 "MachineIndependent/glslang.y"
{
parseContext.symbolTable.push();
++parseContext.loopNestingLevel;
++parseContext.statementNestingLevel;
++parseContext.controlFlowNestingLevel;
}
-#line 11422 "MachineIndependent/glslang_tab.cpp"
+#line 11424 "MachineIndependent/glslang_tab.cpp"
break;
case 601: /* iteration_statement_nonattributed: FOR LEFT_PAREN $@12 for_init_statement for_rest_statement RIGHT_PAREN statement_no_new_scope */
-#line 3950 "MachineIndependent/glslang.y"
+#line 3952 "MachineIndependent/glslang.y"
{
parseContext.symbolTable.pop(&parseContext.defaultPrecision[0]);
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[-3].interm.intermNode), (yyvsp[-5].lex).loc);
@@ -11435,81 +11437,81 @@ yyreduce:
--parseContext.statementNestingLevel;
--parseContext.controlFlowNestingLevel;
}
-#line 11439 "MachineIndependent/glslang_tab.cpp"
+#line 11441 "MachineIndependent/glslang_tab.cpp"
break;
case 602: /* for_init_statement: expression_statement */
-#line 3965 "MachineIndependent/glslang.y"
+#line 3967 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 11447 "MachineIndependent/glslang_tab.cpp"
+#line 11449 "MachineIndependent/glslang_tab.cpp"
break;
case 603: /* for_init_statement: declaration_statement */
-#line 3968 "MachineIndependent/glslang.y"
+#line 3970 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 11455 "MachineIndependent/glslang_tab.cpp"
+#line 11457 "MachineIndependent/glslang_tab.cpp"
break;
case 604: /* conditionopt: condition */
-#line 3974 "MachineIndependent/glslang.y"
+#line 3976 "MachineIndependent/glslang.y"
{
(yyval.interm.intermTypedNode) = (yyvsp[0].interm.intermTypedNode);
}
-#line 11463 "MachineIndependent/glslang_tab.cpp"
+#line 11465 "MachineIndependent/glslang_tab.cpp"
break;
case 605: /* conditionopt: %empty */
-#line 3977 "MachineIndependent/glslang.y"
+#line 3979 "MachineIndependent/glslang.y"
{
(yyval.interm.intermTypedNode) = 0;
}
-#line 11471 "MachineIndependent/glslang_tab.cpp"
+#line 11473 "MachineIndependent/glslang_tab.cpp"
break;
case 606: /* for_rest_statement: conditionopt SEMICOLON */
-#line 3983 "MachineIndependent/glslang.y"
+#line 3985 "MachineIndependent/glslang.y"
{
(yyval.interm.nodePair).node1 = (yyvsp[-1].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = 0;
}
-#line 11480 "MachineIndependent/glslang_tab.cpp"
+#line 11482 "MachineIndependent/glslang_tab.cpp"
break;
case 607: /* for_rest_statement: conditionopt SEMICOLON expression */
-#line 3987 "MachineIndependent/glslang.y"
+#line 3989 "MachineIndependent/glslang.y"
{
(yyval.interm.nodePair).node1 = (yyvsp[-2].interm.intermTypedNode);
(yyval.interm.nodePair).node2 = (yyvsp[0].interm.intermTypedNode);
}
-#line 11489 "MachineIndependent/glslang_tab.cpp"
+#line 11491 "MachineIndependent/glslang_tab.cpp"
break;
case 608: /* jump_statement: CONTINUE SEMICOLON */
-#line 3994 "MachineIndependent/glslang.y"
+#line 3996 "MachineIndependent/glslang.y"
{
if (parseContext.loopNestingLevel <= 0)
parseContext.error((yyvsp[-1].lex).loc, "continue statement only allowed in loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpContinue, (yyvsp[-1].lex).loc);
}
-#line 11499 "MachineIndependent/glslang_tab.cpp"
+#line 11501 "MachineIndependent/glslang_tab.cpp"
break;
case 609: /* jump_statement: BREAK SEMICOLON */
-#line 3999 "MachineIndependent/glslang.y"
+#line 4001 "MachineIndependent/glslang.y"
{
if (parseContext.loopNestingLevel + parseContext.switchSequenceStack.size() <= 0)
parseContext.error((yyvsp[-1].lex).loc, "break statement only allowed in switch and loops", "", "");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpBreak, (yyvsp[-1].lex).loc);
}
-#line 11509 "MachineIndependent/glslang_tab.cpp"
+#line 11511 "MachineIndependent/glslang_tab.cpp"
break;
case 610: /* jump_statement: RETURN SEMICOLON */
-#line 4004 "MachineIndependent/glslang.y"
+#line 4006 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpReturn, (yyvsp[-1].lex).loc);
if (parseContext.currentFunctionType->getBasicType() != EbtVoid)
@@ -11517,101 +11519,101 @@ yyreduce:
if (parseContext.inMain)
parseContext.postEntryPointReturn = true;
}
-#line 11521 "MachineIndependent/glslang_tab.cpp"
+#line 11523 "MachineIndependent/glslang_tab.cpp"
break;
case 611: /* jump_statement: RETURN expression SEMICOLON */
-#line 4011 "MachineIndependent/glslang.y"
+#line 4013 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.handleReturnValue((yyvsp[-2].lex).loc, (yyvsp[-1].interm.intermTypedNode));
}
-#line 11529 "MachineIndependent/glslang_tab.cpp"
+#line 11531 "MachineIndependent/glslang_tab.cpp"
break;
case 612: /* jump_statement: DISCARD SEMICOLON */
-#line 4014 "MachineIndependent/glslang.y"
+#line 4016 "MachineIndependent/glslang.y"
{
parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "discard");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpKill, (yyvsp[-1].lex).loc);
}
-#line 11538 "MachineIndependent/glslang_tab.cpp"
+#line 11540 "MachineIndependent/glslang_tab.cpp"
break;
case 613: /* jump_statement: TERMINATE_INVOCATION SEMICOLON */
-#line 4018 "MachineIndependent/glslang.y"
+#line 4020 "MachineIndependent/glslang.y"
{
parseContext.requireStage((yyvsp[-1].lex).loc, EShLangFragment, "terminateInvocation");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateInvocation, (yyvsp[-1].lex).loc);
}
-#line 11547 "MachineIndependent/glslang_tab.cpp"
+#line 11549 "MachineIndependent/glslang_tab.cpp"
break;
case 614: /* jump_statement: TERMINATE_RAY SEMICOLON */
-#line 4023 "MachineIndependent/glslang.y"
+#line 4025 "MachineIndependent/glslang.y"
{
parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "terminateRayEXT");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpTerminateRayKHR, (yyvsp[-1].lex).loc);
}
-#line 11556 "MachineIndependent/glslang_tab.cpp"
+#line 11558 "MachineIndependent/glslang_tab.cpp"
break;
case 615: /* jump_statement: IGNORE_INTERSECTION SEMICOLON */
-#line 4027 "MachineIndependent/glslang.y"
+#line 4029 "MachineIndependent/glslang.y"
{
parseContext.requireStage((yyvsp[-1].lex).loc, EShLangAnyHit, "ignoreIntersectionEXT");
(yyval.interm.intermNode) = parseContext.intermediate.addBranch(EOpIgnoreIntersectionKHR, (yyvsp[-1].lex).loc);
}
-#line 11565 "MachineIndependent/glslang_tab.cpp"
+#line 11567 "MachineIndependent/glslang_tab.cpp"
break;
case 616: /* translation_unit: external_declaration */
-#line 4037 "MachineIndependent/glslang.y"
+#line 4039 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
-#line 11574 "MachineIndependent/glslang_tab.cpp"
+#line 11576 "MachineIndependent/glslang_tab.cpp"
break;
case 617: /* translation_unit: translation_unit external_declaration */
-#line 4041 "MachineIndependent/glslang.y"
+#line 4043 "MachineIndependent/glslang.y"
{
if ((yyvsp[0].interm.intermNode) != nullptr) {
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-1].interm.intermNode), (yyvsp[0].interm.intermNode));
parseContext.intermediate.setTreeRoot((yyval.interm.intermNode));
}
}
-#line 11585 "MachineIndependent/glslang_tab.cpp"
+#line 11587 "MachineIndependent/glslang_tab.cpp"
break;
case 618: /* external_declaration: function_definition */
-#line 4050 "MachineIndependent/glslang.y"
+#line 4052 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 11593 "MachineIndependent/glslang_tab.cpp"
+#line 11595 "MachineIndependent/glslang_tab.cpp"
break;
case 619: /* external_declaration: declaration */
-#line 4053 "MachineIndependent/glslang.y"
+#line 4055 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = (yyvsp[0].interm.intermNode);
}
-#line 11601 "MachineIndependent/glslang_tab.cpp"
+#line 11603 "MachineIndependent/glslang_tab.cpp"
break;
case 620: /* external_declaration: SEMICOLON */
-#line 4057 "MachineIndependent/glslang.y"
+#line 4059 "MachineIndependent/glslang.y"
{
parseContext.requireProfile((yyvsp[0].lex).loc, ~EEsProfile, "extraneous semicolon");
parseContext.profileRequires((yyvsp[0].lex).loc, ~EEsProfile, 460, nullptr, "extraneous semicolon");
(yyval.interm.intermNode) = nullptr;
}
-#line 11611 "MachineIndependent/glslang_tab.cpp"
+#line 11613 "MachineIndependent/glslang_tab.cpp"
break;
case 621: /* $@13: %empty */
-#line 4066 "MachineIndependent/glslang.y"
+#line 4068 "MachineIndependent/glslang.y"
{
(yyvsp[0].interm).function = parseContext.handleFunctionDeclarator((yyvsp[0].interm).loc, *(yyvsp[0].interm).function, false /* not prototype */);
(yyvsp[0].interm).intermNode = parseContext.handleFunctionDefinition((yyvsp[0].interm).loc, *(yyvsp[0].interm).function);
@@ -11624,11 +11626,11 @@ yyreduce:
++parseContext.statementNestingLevel;
}
}
-#line 11628 "MachineIndependent/glslang_tab.cpp"
+#line 11630 "MachineIndependent/glslang_tab.cpp"
break;
case 622: /* function_definition: function_prototype $@13 compound_statement_no_new_scope */
-#line 4078 "MachineIndependent/glslang.y"
+#line 4080 "MachineIndependent/glslang.y"
{
// May be best done as post process phase on intermediate code
if (parseContext.currentFunctionType->getBasicType() != EbtVoid && ! parseContext.functionReturnsValue)
@@ -11655,228 +11657,228 @@ yyreduce:
--parseContext.statementNestingLevel;
}
}
-#line 11659 "MachineIndependent/glslang_tab.cpp"
+#line 11661 "MachineIndependent/glslang_tab.cpp"
break;
case 623: /* attribute: LEFT_BRACKET LEFT_BRACKET attribute_list RIGHT_BRACKET RIGHT_BRACKET */
-#line 4108 "MachineIndependent/glslang.y"
+#line 4110 "MachineIndependent/glslang.y"
{
(yyval.interm.attributes) = (yyvsp[-2].interm.attributes);
}
-#line 11667 "MachineIndependent/glslang_tab.cpp"
+#line 11669 "MachineIndependent/glslang_tab.cpp"
break;
case 624: /* attribute_list: single_attribute */
-#line 4113 "MachineIndependent/glslang.y"
+#line 4115 "MachineIndependent/glslang.y"
{
(yyval.interm.attributes) = (yyvsp[0].interm.attributes);
}
-#line 11675 "MachineIndependent/glslang_tab.cpp"
+#line 11677 "MachineIndependent/glslang_tab.cpp"
break;
case 625: /* attribute_list: attribute_list COMMA single_attribute */
-#line 4116 "MachineIndependent/glslang.y"
+#line 4118 "MachineIndependent/glslang.y"
{
(yyval.interm.attributes) = parseContext.mergeAttributes((yyvsp[-2].interm.attributes), (yyvsp[0].interm.attributes));
}
-#line 11683 "MachineIndependent/glslang_tab.cpp"
+#line 11685 "MachineIndependent/glslang_tab.cpp"
break;
case 626: /* single_attribute: IDENTIFIER */
-#line 4121 "MachineIndependent/glslang.y"
+#line 4123 "MachineIndependent/glslang.y"
{
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[0].lex).string);
}
-#line 11691 "MachineIndependent/glslang_tab.cpp"
+#line 11693 "MachineIndependent/glslang_tab.cpp"
break;
case 627: /* single_attribute: IDENTIFIER LEFT_PAREN constant_expression RIGHT_PAREN */
-#line 4124 "MachineIndependent/glslang.y"
+#line 4126 "MachineIndependent/glslang.y"
{
(yyval.interm.attributes) = parseContext.makeAttributes(*(yyvsp[-3].lex).string, (yyvsp[-1].interm.intermTypedNode));
}
-#line 11699 "MachineIndependent/glslang_tab.cpp"
+#line 11701 "MachineIndependent/glslang_tab.cpp"
break;
case 628: /* spirv_requirements_list: spirv_requirements_parameter */
-#line 4131 "MachineIndependent/glslang.y"
+#line 4133 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvReq) = (yyvsp[0].interm.spirvReq);
}
-#line 11707 "MachineIndependent/glslang_tab.cpp"
+#line 11709 "MachineIndependent/glslang_tab.cpp"
break;
case 629: /* spirv_requirements_list: spirv_requirements_list COMMA spirv_requirements_parameter */
-#line 4134 "MachineIndependent/glslang.y"
+#line 4136 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvReq) = parseContext.mergeSpirvRequirements((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvReq), (yyvsp[0].interm.spirvReq));
}
-#line 11715 "MachineIndependent/glslang_tab.cpp"
+#line 11717 "MachineIndependent/glslang_tab.cpp"
break;
case 630: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_extension_list RIGHT_BRACKET */
-#line 4139 "MachineIndependent/glslang.y"
+#line 4141 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, (yyvsp[-1].interm.intermNode)->getAsAggregate(), nullptr);
}
-#line 11723 "MachineIndependent/glslang_tab.cpp"
+#line 11725 "MachineIndependent/glslang_tab.cpp"
break;
case 631: /* spirv_requirements_parameter: IDENTIFIER EQUAL LEFT_BRACKET spirv_capability_list RIGHT_BRACKET */
-#line 4142 "MachineIndependent/glslang.y"
+#line 4144 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvReq) = parseContext.makeSpirvRequirement((yyvsp[-3].lex).loc, *(yyvsp[-4].lex).string, nullptr, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 11731 "MachineIndependent/glslang_tab.cpp"
+#line 11733 "MachineIndependent/glslang_tab.cpp"
break;
case 632: /* spirv_extension_list: STRING_LITERAL */
-#line 4147 "MachineIndependent/glslang.y"
+#line 4149 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
}
-#line 11739 "MachineIndependent/glslang_tab.cpp"
+#line 11741 "MachineIndependent/glslang_tab.cpp"
break;
case 633: /* spirv_extension_list: spirv_extension_list COMMA STRING_LITERAL */
-#line 4150 "MachineIndependent/glslang.y"
+#line 4152 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
}
-#line 11747 "MachineIndependent/glslang_tab.cpp"
+#line 11749 "MachineIndependent/glslang_tab.cpp"
break;
case 634: /* spirv_capability_list: INTCONSTANT */
-#line 4155 "MachineIndependent/glslang.y"
+#line 4157 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
}
-#line 11755 "MachineIndependent/glslang_tab.cpp"
+#line 11757 "MachineIndependent/glslang_tab.cpp"
break;
case 635: /* spirv_capability_list: spirv_capability_list COMMA INTCONSTANT */
-#line 4158 "MachineIndependent/glslang.y"
+#line 4160 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true));
}
-#line 11763 "MachineIndependent/glslang_tab.cpp"
+#line 11765 "MachineIndependent/glslang_tab.cpp"
break;
case 636: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT RIGHT_PAREN */
-#line 4163 "MachineIndependent/glslang.y"
+#line 4165 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
(yyval.interm.intermNode) = 0;
}
-#line 11772 "MachineIndependent/glslang_tab.cpp"
+#line 11774 "MachineIndependent/glslang_tab.cpp"
break;
case 637: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */
-#line 4167 "MachineIndependent/glslang.y"
+#line 4169 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-1].lex).i);
(yyval.interm.intermNode) = 0;
}
-#line 11782 "MachineIndependent/glslang_tab.cpp"
+#line 11784 "MachineIndependent/glslang_tab.cpp"
break;
case 638: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */
-#line 4172 "MachineIndependent/glslang.y"
+#line 4174 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
(yyval.interm.intermNode) = 0;
}
-#line 11791 "MachineIndependent/glslang_tab.cpp"
+#line 11793 "MachineIndependent/glslang_tab.cpp"
break;
case 639: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_parameter_list RIGHT_PAREN */
-#line 4176 "MachineIndependent/glslang.y"
+#line 4178 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
parseContext.intermediate.insertSpirvExecutionMode((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
(yyval.interm.intermNode) = 0;
}
-#line 11801 "MachineIndependent/glslang_tab.cpp"
+#line 11803 "MachineIndependent/glslang_tab.cpp"
break;
case 640: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */
-#line 4181 "MachineIndependent/glslang.y"
+#line 4183 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
(yyval.interm.intermNode) = 0;
}
-#line 11810 "MachineIndependent/glslang_tab.cpp"
+#line 11812 "MachineIndependent/glslang_tab.cpp"
break;
case 641: /* spirv_execution_mode_qualifier: SPIRV_EXECUTION_MODE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_execution_mode_id_parameter_list RIGHT_PAREN */
-#line 4185 "MachineIndependent/glslang.y"
+#line 4187 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
parseContext.intermediate.insertSpirvExecutionModeId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
(yyval.interm.intermNode) = 0;
}
-#line 11820 "MachineIndependent/glslang_tab.cpp"
+#line 11822 "MachineIndependent/glslang_tab.cpp"
break;
case 642: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter */
-#line 4192 "MachineIndependent/glslang.y"
+#line 4194 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
}
-#line 11828 "MachineIndependent/glslang_tab.cpp"
+#line 11830 "MachineIndependent/glslang_tab.cpp"
break;
case 643: /* spirv_execution_mode_parameter_list: spirv_execution_mode_parameter_list COMMA spirv_execution_mode_parameter */
-#line 4195 "MachineIndependent/glslang.y"
+#line 4197 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
}
-#line 11836 "MachineIndependent/glslang_tab.cpp"
+#line 11838 "MachineIndependent/glslang_tab.cpp"
break;
case 644: /* spirv_execution_mode_parameter: FLOATCONSTANT */
-#line 4200 "MachineIndependent/glslang.y"
+#line 4202 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
}
-#line 11844 "MachineIndependent/glslang_tab.cpp"
+#line 11846 "MachineIndependent/glslang_tab.cpp"
break;
case 645: /* spirv_execution_mode_parameter: INTCONSTANT */
-#line 4203 "MachineIndependent/glslang.y"
+#line 4205 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
}
-#line 11852 "MachineIndependent/glslang_tab.cpp"
+#line 11854 "MachineIndependent/glslang_tab.cpp"
break;
case 646: /* spirv_execution_mode_parameter: UINTCONSTANT */
-#line 4206 "MachineIndependent/glslang.y"
+#line 4208 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
}
-#line 11860 "MachineIndependent/glslang_tab.cpp"
+#line 11862 "MachineIndependent/glslang_tab.cpp"
break;
case 647: /* spirv_execution_mode_parameter: BOOLCONSTANT */
-#line 4209 "MachineIndependent/glslang.y"
+#line 4211 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
}
-#line 11868 "MachineIndependent/glslang_tab.cpp"
+#line 11870 "MachineIndependent/glslang_tab.cpp"
break;
case 648: /* spirv_execution_mode_parameter: STRING_LITERAL */
-#line 4212 "MachineIndependent/glslang.y"
+#line 4214 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true);
}
-#line 11876 "MachineIndependent/glslang_tab.cpp"
+#line 11878 "MachineIndependent/glslang_tab.cpp"
break;
case 649: /* spirv_execution_mode_id_parameter_list: constant_expression */
-#line 4217 "MachineIndependent/glslang.y"
+#line 4219 "MachineIndependent/glslang.y"
{
if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
(yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11886,11 +11888,11 @@ yyreduce:
parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
}
-#line 11890 "MachineIndependent/glslang_tab.cpp"
+#line 11892 "MachineIndependent/glslang_tab.cpp"
break;
case 650: /* spirv_execution_mode_id_parameter_list: spirv_execution_mode_id_parameter_list COMMA constant_expression */
-#line 4226 "MachineIndependent/glslang.y"
+#line 4228 "MachineIndependent/glslang.y"
{
if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
(yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -11900,156 +11902,156 @@ yyreduce:
parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
}
-#line 11904 "MachineIndependent/glslang_tab.cpp"
+#line 11906 "MachineIndependent/glslang_tab.cpp"
break;
case 651: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN INTCONSTANT RIGHT_PAREN */
-#line 4237 "MachineIndependent/glslang.y"
+#line 4239 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-3].lex).loc);
(yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
(yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
}
-#line 11914 "MachineIndependent/glslang_tab.cpp"
+#line 11916 "MachineIndependent/glslang_tab.cpp"
break;
case 652: /* spirv_storage_class_qualifier: SPIRV_STORAGE_CLASS LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */
-#line 4242 "MachineIndependent/glslang.y"
+#line 4244 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc);
parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
(yyval.interm.type).qualifier.storage = EvqSpirvStorageClass;
(yyval.interm.type).qualifier.spirvStorageClass = (yyvsp[-1].lex).i;
}
-#line 11925 "MachineIndependent/glslang_tab.cpp"
+#line 11927 "MachineIndependent/glslang_tab.cpp"
break;
case 653: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT RIGHT_PAREN */
-#line 4250 "MachineIndependent/glslang.y"
+#line 4252 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-3].lex).loc);
(yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
}
-#line 11934 "MachineIndependent/glslang_tab.cpp"
+#line 11936 "MachineIndependent/glslang_tab.cpp"
break;
case 654: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT RIGHT_PAREN */
-#line 4254 "MachineIndependent/glslang.y"
+#line 4256 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc);
parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
(yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-1].lex).i);
}
-#line 11944 "MachineIndependent/glslang_tab.cpp"
+#line 11946 "MachineIndependent/glslang_tab.cpp"
break;
case 655: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */
-#line 4259 "MachineIndependent/glslang.y"
+#line 4261 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc);
(yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 11953 "MachineIndependent/glslang_tab.cpp"
+#line 11955 "MachineIndependent/glslang_tab.cpp"
break;
case 656: /* spirv_decorate_qualifier: SPIRV_DECORATE LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_parameter_list RIGHT_PAREN */
-#line 4263 "MachineIndependent/glslang.y"
+#line 4265 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-7].lex).loc);
parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
(yyval.interm.type).qualifier.setSpirvDecorate((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 11963 "MachineIndependent/glslang_tab.cpp"
+#line 11965 "MachineIndependent/glslang_tab.cpp"
break;
case 657: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */
-#line 4268 "MachineIndependent/glslang.y"
+#line 4270 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc);
(yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 11972 "MachineIndependent/glslang_tab.cpp"
+#line 11974 "MachineIndependent/glslang_tab.cpp"
break;
case 658: /* spirv_decorate_qualifier: SPIRV_DECORATE_ID LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_id_parameter_list RIGHT_PAREN */
-#line 4272 "MachineIndependent/glslang.y"
+#line 4274 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-7].lex).loc);
parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
(yyval.interm.type).qualifier.setSpirvDecorateId((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 11982 "MachineIndependent/glslang_tab.cpp"
+#line 11984 "MachineIndependent/glslang_tab.cpp"
break;
case 659: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */
-#line 4277 "MachineIndependent/glslang.y"
+#line 4279 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc);
(yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 11991 "MachineIndependent/glslang_tab.cpp"
+#line 11993 "MachineIndependent/glslang_tab.cpp"
break;
case 660: /* spirv_decorate_qualifier: SPIRV_DECORATE_STRING LEFT_PAREN spirv_requirements_list COMMA INTCONSTANT COMMA spirv_decorate_string_parameter_list RIGHT_PAREN */
-#line 4281 "MachineIndependent/glslang.y"
+#line 4283 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-7].lex).loc);
parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
(yyval.interm.type).qualifier.setSpirvDecorateString((yyvsp[-3].lex).i, (yyvsp[-1].interm.intermNode)->getAsAggregate());
}
-#line 12001 "MachineIndependent/glslang_tab.cpp"
+#line 12003 "MachineIndependent/glslang_tab.cpp"
break;
case 661: /* spirv_decorate_parameter_list: spirv_decorate_parameter */
-#line 4288 "MachineIndependent/glslang.y"
+#line 4290 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermNode));
}
-#line 12009 "MachineIndependent/glslang_tab.cpp"
+#line 12011 "MachineIndependent/glslang_tab.cpp"
break;
case 662: /* spirv_decorate_parameter_list: spirv_decorate_parameter_list COMMA spirv_decorate_parameter */
-#line 4291 "MachineIndependent/glslang.y"
+#line 4293 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermNode));
}
-#line 12017 "MachineIndependent/glslang_tab.cpp"
+#line 12019 "MachineIndependent/glslang_tab.cpp"
break;
case 663: /* spirv_decorate_parameter: FLOATCONSTANT */
-#line 4296 "MachineIndependent/glslang.y"
+#line 4298 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).d, EbtFloat, (yyvsp[0].lex).loc, true);
}
-#line 12025 "MachineIndependent/glslang_tab.cpp"
+#line 12027 "MachineIndependent/glslang_tab.cpp"
break;
case 664: /* spirv_decorate_parameter: INTCONSTANT */
-#line 4299 "MachineIndependent/glslang.y"
+#line 4301 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).i, (yyvsp[0].lex).loc, true);
}
-#line 12033 "MachineIndependent/glslang_tab.cpp"
+#line 12035 "MachineIndependent/glslang_tab.cpp"
break;
case 665: /* spirv_decorate_parameter: UINTCONSTANT */
-#line 4302 "MachineIndependent/glslang.y"
+#line 4304 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).u, (yyvsp[0].lex).loc, true);
}
-#line 12041 "MachineIndependent/glslang_tab.cpp"
+#line 12043 "MachineIndependent/glslang_tab.cpp"
break;
case 666: /* spirv_decorate_parameter: BOOLCONSTANT */
-#line 4305 "MachineIndependent/glslang.y"
+#line 4307 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.addConstantUnion((yyvsp[0].lex).b, (yyvsp[0].lex).loc, true);
}
-#line 12049 "MachineIndependent/glslang_tab.cpp"
+#line 12051 "MachineIndependent/glslang_tab.cpp"
break;
case 667: /* spirv_decorate_id_parameter_list: constant_expression */
-#line 4310 "MachineIndependent/glslang.y"
+#line 4312 "MachineIndependent/glslang.y"
{
if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
(yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12058,11 +12060,11 @@ yyreduce:
parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate((yyvsp[0].interm.intermTypedNode));
}
-#line 12062 "MachineIndependent/glslang_tab.cpp"
+#line 12064 "MachineIndependent/glslang_tab.cpp"
break;
case 668: /* spirv_decorate_id_parameter_list: spirv_decorate_id_parameter_list COMMA constant_expression */
-#line 4318 "MachineIndependent/glslang.y"
+#line 4320 "MachineIndependent/glslang.y"
{
if ((yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtFloat &&
(yyvsp[0].interm.intermTypedNode)->getBasicType() != EbtInt &&
@@ -12071,147 +12073,139 @@ yyreduce:
parseContext.error((yyvsp[0].interm.intermTypedNode)->getLoc(), "this type not allowed", (yyvsp[0].interm.intermTypedNode)->getType().getBasicString(), "");
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), (yyvsp[0].interm.intermTypedNode));
}
-#line 12075 "MachineIndependent/glslang_tab.cpp"
+#line 12077 "MachineIndependent/glslang_tab.cpp"
break;
case 669: /* spirv_decorate_string_parameter_list: STRING_LITERAL */
-#line 4328 "MachineIndependent/glslang.y"
+#line 4330 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.makeAggregate(
parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
}
-#line 12084 "MachineIndependent/glslang_tab.cpp"
+#line 12086 "MachineIndependent/glslang_tab.cpp"
break;
case 670: /* spirv_decorate_string_parameter_list: spirv_decorate_string_parameter_list COMMA STRING_LITERAL */
-#line 4332 "MachineIndependent/glslang.y"
+#line 4334 "MachineIndependent/glslang.y"
{
(yyval.interm.intermNode) = parseContext.intermediate.growAggregate((yyvsp[-2].interm.intermNode), parseContext.intermediate.addConstantUnion((yyvsp[0].lex).string, (yyvsp[0].lex).loc, true));
}
-#line 12092 "MachineIndependent/glslang_tab.cpp"
+#line 12094 "MachineIndependent/glslang_tab.cpp"
break;
case 671: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */
-#line 4337 "MachineIndependent/glslang.y"
+#line 4339 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
}
-#line 12101 "MachineIndependent/glslang_tab.cpp"
+#line 12103 "MachineIndependent/glslang_tab.cpp"
break;
case 672: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list COMMA spirv_type_parameter_list RIGHT_PAREN */
-#line 4341 "MachineIndependent/glslang.y"
+#line 4343 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-7].lex).loc, parseContext.symbolTable.atGlobalLevel());
parseContext.intermediate.insertSpirvRequirement((yyvsp[-5].interm.spirvReq));
(yyval.interm.type).setSpirvType(*(yyvsp[-3].interm.spirvInst), (yyvsp[-1].interm.spirvTypeParams));
}
-#line 12111 "MachineIndependent/glslang_tab.cpp"
+#line 12113 "MachineIndependent/glslang_tab.cpp"
break;
case 673: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */
-#line 4346 "MachineIndependent/glslang.y"
+#line 4348 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-3].lex).loc, parseContext.symbolTable.atGlobalLevel());
(yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
}
-#line 12120 "MachineIndependent/glslang_tab.cpp"
+#line 12122 "MachineIndependent/glslang_tab.cpp"
break;
case 674: /* spirv_type_specifier: SPIRV_TYPE LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */
-#line 4350 "MachineIndependent/glslang.y"
+#line 4352 "MachineIndependent/glslang.y"
{
(yyval.interm.type).init((yyvsp[-5].lex).loc, parseContext.symbolTable.atGlobalLevel());
parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
(yyval.interm.type).setSpirvType(*(yyvsp[-1].interm.spirvInst));
}
-#line 12130 "MachineIndependent/glslang_tab.cpp"
+#line 12132 "MachineIndependent/glslang_tab.cpp"
break;
case 675: /* spirv_type_parameter_list: spirv_type_parameter */
-#line 4357 "MachineIndependent/glslang.y"
+#line 4359 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvTypeParams) = (yyvsp[0].interm.spirvTypeParams);
}
-#line 12138 "MachineIndependent/glslang_tab.cpp"
+#line 12140 "MachineIndependent/glslang_tab.cpp"
break;
case 676: /* spirv_type_parameter_list: spirv_type_parameter_list COMMA spirv_type_parameter */
-#line 4360 "MachineIndependent/glslang.y"
+#line 4362 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvTypeParams) = parseContext.mergeSpirvTypeParameters((yyvsp[-2].interm.spirvTypeParams), (yyvsp[0].interm.spirvTypeParams));
}
-#line 12146 "MachineIndependent/glslang_tab.cpp"
+#line 12148 "MachineIndependent/glslang_tab.cpp"
break;
case 677: /* spirv_type_parameter: constant_expression */
-#line 4365 "MachineIndependent/glslang.y"
+#line 4367 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.intermTypedNode)->getLoc(), (yyvsp[0].interm.intermTypedNode)->getAsConstantUnion());
}
-#line 12154 "MachineIndependent/glslang_tab.cpp"
- break;
-
- case 678: /* spirv_type_parameter: type_specifier */
-#line 4368 "MachineIndependent/glslang.y"
- {
- (yyval.interm.spirvTypeParams) = parseContext.makeSpirvTypeParameters((yyvsp[0].interm.type));
- }
-#line 12162 "MachineIndependent/glslang_tab.cpp"
+#line 12156 "MachineIndependent/glslang_tab.cpp"
break;
- case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */
-#line 4373 "MachineIndependent/glslang.y"
+ case 678: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_instruction_qualifier_list RIGHT_PAREN */
+#line 4372 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
}
-#line 12170 "MachineIndependent/glslang_tab.cpp"
+#line 12164 "MachineIndependent/glslang_tab.cpp"
break;
- case 680: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */
-#line 4376 "MachineIndependent/glslang.y"
+ case 679: /* spirv_instruction_qualifier: SPIRV_INSTRUCTION LEFT_PAREN spirv_requirements_list COMMA spirv_instruction_qualifier_list RIGHT_PAREN */
+#line 4375 "MachineIndependent/glslang.y"
{
parseContext.intermediate.insertSpirvRequirement((yyvsp[-3].interm.spirvReq));
(yyval.interm.spirvInst) = (yyvsp[-1].interm.spirvInst);
}
-#line 12179 "MachineIndependent/glslang_tab.cpp"
+#line 12173 "MachineIndependent/glslang_tab.cpp"
break;
- case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */
-#line 4382 "MachineIndependent/glslang.y"
+ case 680: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_id */
+#line 4381 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvInst) = (yyvsp[0].interm.spirvInst);
}
-#line 12187 "MachineIndependent/glslang_tab.cpp"
+#line 12181 "MachineIndependent/glslang_tab.cpp"
break;
- case 682: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */
-#line 4385 "MachineIndependent/glslang.y"
+ case 681: /* spirv_instruction_qualifier_list: spirv_instruction_qualifier_list COMMA spirv_instruction_qualifier_id */
+#line 4384 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvInst) = parseContext.mergeSpirvInstruction((yyvsp[-1].lex).loc, (yyvsp[-2].interm.spirvInst), (yyvsp[0].interm.spirvInst));
}
-#line 12195 "MachineIndependent/glslang_tab.cpp"
+#line 12189 "MachineIndependent/glslang_tab.cpp"
break;
- case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */
-#line 4390 "MachineIndependent/glslang.y"
+ case 682: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL STRING_LITERAL */
+#line 4389 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, *(yyvsp[0].lex).string);
}
-#line 12203 "MachineIndependent/glslang_tab.cpp"
+#line 12197 "MachineIndependent/glslang_tab.cpp"
break;
- case 684: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */
-#line 4393 "MachineIndependent/glslang.y"
+ case 683: /* spirv_instruction_qualifier_id: IDENTIFIER EQUAL INTCONSTANT */
+#line 4392 "MachineIndependent/glslang.y"
{
(yyval.interm.spirvInst) = parseContext.makeSpirvInstruction((yyvsp[-1].lex).loc, *(yyvsp[-2].lex).string, (yyvsp[0].lex).i);
}
-#line 12211 "MachineIndependent/glslang_tab.cpp"
+#line 12205 "MachineIndependent/glslang_tab.cpp"
break;
-#line 12215 "MachineIndependent/glslang_tab.cpp"
+#line 12209 "MachineIndependent/glslang_tab.cpp"
default: break;
}
@@ -12436,5 +12430,5 @@ yyreturn:
return yyresult;
}
-#line 4398 "MachineIndependent/glslang.y"
+#line 4397 "MachineIndependent/glslang.y"
diff --git a/thirdparty/glslang/glslang/MachineIndependent/intermOut.cpp b/thirdparty/glslang/glslang/MachineIndependent/intermOut.cpp
index a0fade16c0..d8a3aab5d0 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/intermOut.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/intermOut.cpp
@@ -48,37 +48,6 @@
#endif
#include <cstdint>
-namespace {
-
-bool IsInfinity(double x) {
-#ifdef _MSC_VER
- switch (_fpclass(x)) {
- case _FPCLASS_NINF:
- case _FPCLASS_PINF:
- return true;
- default:
- return false;
- }
-#else
- return std::isinf(x);
-#endif
-}
-
-bool IsNan(double x) {
-#ifdef _MSC_VER
- switch (_fpclass(x)) {
- case _FPCLASS_SNAN:
- case _FPCLASS_QNAN:
- return true;
- default:
- return false;
- }
-#else
- return std::isnan(x);
-#endif
-}
-
-}
namespace glslang {
diff --git a/thirdparty/glslang/glslang/MachineIndependent/iomapper.cpp b/thirdparty/glslang/glslang/MachineIndependent/iomapper.cpp
index 7e12864f36..a3c53f505d 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/iomapper.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/iomapper.cpp
@@ -79,7 +79,7 @@ public:
target = &inputList;
else if (base->getQualifier().storage == EvqVaryingOut)
target = &outputList;
- else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant())
+ else if (base->getQualifier().isUniformOrBuffer() && !base->getQualifier().isPushConstant() && !base->getQualifier().isShaderRecord())
target = &uniformList;
// If a global is being visited, then we should also traverse it incase it's evaluation
// ends up visiting inputs we want to tag as live
@@ -514,6 +514,24 @@ struct TSymbolValidater
return;
}
else {
+ // Deal with input/output pairs where one is a block member but the other is loose,
+ // e.g. with ARB_separate_shader_objects
+ if (type1.getBasicType() == EbtBlock &&
+ type1.isStruct() && !type2.isStruct()) {
+ // Iterate through block members tracking layout
+ glslang::TString name;
+ type1.getStruct()->begin()->type->appendMangledName(name);
+ if (name == mangleName2
+ && type1.getQualifier().layoutLocation == type2.getQualifier().layoutLocation) return;
+ }
+ if (type2.getBasicType() == EbtBlock &&
+ type2.isStruct() && !type1.isStruct()) {
+ // Iterate through block members tracking layout
+ glslang::TString name;
+ type2.getStruct()->begin()->type->appendMangledName(name);
+ if (name == mangleName1
+ && type1.getQualifier().layoutLocation == type2.getQualifier().layoutLocation) return;
+ }
TString err = "Invalid In/Out variable type : " + entKey.first;
infoSink.info.message(EPrefixInternalError, err.c_str());
hadError = true;
@@ -748,7 +766,7 @@ private:
};
TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate)
- : intermediate(intermediate)
+ : referenceIntermediate(intermediate)
, nextUniformLocation(intermediate.getUniformLocationBase())
, nextInputLocation(0)
, nextOutputLocation(0)
@@ -760,17 +778,17 @@ TDefaultIoResolverBase::TDefaultIoResolverBase(const TIntermediate& intermediate
int TDefaultIoResolverBase::getBaseBinding(EShLanguage stage, TResourceType res, unsigned int set) const {
return stageIntermediates[stage] ? selectBaseBinding(stageIntermediates[stage]->getShiftBinding(res), stageIntermediates[stage]->getShiftBindingForSet(res, set))
- : selectBaseBinding(intermediate.getShiftBinding(res), intermediate.getShiftBindingForSet(res, set));
+ : selectBaseBinding(referenceIntermediate.getShiftBinding(res), referenceIntermediate.getShiftBindingForSet(res, set));
}
const std::vector<std::string>& TDefaultIoResolverBase::getResourceSetBinding(EShLanguage stage) const {
return stageIntermediates[stage] ? stageIntermediates[stage]->getResourceSetBinding()
- : intermediate.getResourceSetBinding();
+ : referenceIntermediate.getResourceSetBinding();
}
-bool TDefaultIoResolverBase::doAutoBindingMapping() const { return intermediate.getAutoMapBindings(); }
+bool TDefaultIoResolverBase::doAutoBindingMapping() const { return referenceIntermediate.getAutoMapBindings(); }
-bool TDefaultIoResolverBase::doAutoLocationMapping() const { return intermediate.getAutoMapLocations(); }
+bool TDefaultIoResolverBase::doAutoLocationMapping() const { return referenceIntermediate.getAutoMapLocations(); }
TDefaultIoResolverBase::TSlotSet::iterator TDefaultIoResolverBase::findSlot(int set, int slot) {
return std::lower_bound(slots[set].begin(), slots[set].end(), slot);
@@ -827,7 +845,7 @@ int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEn
}
// no locations added if already present, a built-in variable, a block, or an opaque
if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
- type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) {
+ type.isAtomic() || type.isSpirvType() || (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) {
return ent.newLocation = -1;
}
// no locations on blocks of built-in variables
@@ -839,7 +857,7 @@ int TDefaultIoResolverBase::resolveUniformLocation(EShLanguage /*stage*/, TVarEn
return ent.newLocation = -1;
}
}
- int location = intermediate.getUniformLocationOverride(name);
+ int location = referenceIntermediate.getUniformLocationOverride(name);
if (location != -1) {
return ent.newLocation = location;
}
@@ -855,8 +873,8 @@ int TDefaultIoResolverBase::resolveInOutLocation(EShLanguage stage, TVarEntryInf
return ent.newLocation = -1;
}
- // no locations added if already present, or a built-in variable
- if (type.getQualifier().hasLocation() || type.isBuiltIn()) {
+ // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate
+ if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) {
return ent.newLocation = -1;
}
@@ -942,8 +960,8 @@ int TDefaultGlslIoResolver::resolveInOutLocation(EShLanguage stage, TVarEntryInf
if (type.getQualifier().hasLocation()) {
return ent.newLocation = type.getQualifier().layoutLocation;
}
- // no locations added if already present, or a built-in variable
- if (type.isBuiltIn()) {
+ // no locations added if already present, a built-in variable, or a variable with SPIR-V decorate
+ if (type.isBuiltIn() || type.getQualifier().hasSprivDecorate()) {
return ent.newLocation = -1;
}
// no locations on blocks of built-in variables
@@ -1024,7 +1042,8 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn
} else {
// no locations added if already present, a built-in variable, a block, or an opaque
if (type.getQualifier().hasLocation() || type.isBuiltIn() || type.getBasicType() == EbtBlock ||
- type.isAtomic() || (type.containsOpaque() && intermediate.getSpv().openGl == 0)) {
+ type.isAtomic() || type.isSpirvType() ||
+ (type.containsOpaque() && referenceIntermediate.getSpv().openGl == 0)) {
return ent.newLocation = -1;
}
// no locations on blocks of built-in variables
@@ -1037,7 +1056,7 @@ int TDefaultGlslIoResolver::resolveUniformLocation(EShLanguage /*stage*/, TVarEn
}
}
}
- int location = intermediate.getUniformLocationOverride(name.c_str());
+ int location = referenceIntermediate.getUniformLocationOverride(name.c_str());
if (location != -1) {
return ent.newLocation = location;
}
@@ -1086,7 +1105,7 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent
const TType& type = ent.symbol->getType();
const TString& name = ent.symbol->getAccessName();
// On OpenGL arrays of opaque types take a separate binding for each element
- int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+ int numBindings = referenceIntermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
TResourceType resource = getResourceType(type);
// don't need to handle uniform symbol, it will be handled in resolveUniformLocation
if (resource == EResUbo && type.getBasicType() != EbtBlock) {
@@ -1095,7 +1114,7 @@ int TDefaultGlslIoResolver::resolveBinding(EShLanguage stage, TVarEntryInfo& ent
// There is no 'set' qualifier in OpenGL shading language, each resource has its own
// binding name space, so remap the 'set' to resource type which make each resource
// binding is valid from 0 to MAX_XXRESOURCE_BINDINGS
- int set = intermediate.getSpv().openGl != 0 ? resource : ent.newSet;
+ int set = referenceIntermediate.getSpv().openGl != 0 ? resource : ent.newSet;
int resourceKey = set;
if (resource < EResCount) {
if (type.getQualifier().hasBinding()) {
@@ -1223,7 +1242,7 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink&
const TType& type = ent.symbol->getType();
const TString& name = ent.symbol->getAccessName();
TResourceType resource = getResourceType(type);
- int set = intermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent);
+ int set = referenceIntermediate.getSpv().openGl != 0 ? resource : resolveSet(ent.stage, ent);
int resourceKey = set;
if (type.getQualifier().hasBinding()) {
@@ -1233,7 +1252,7 @@ void TDefaultGlslIoResolver::reserverResourceSlot(TVarEntryInfo& ent, TInfoSink&
if (iter == varSlotMap.end()) {
// Reserve the slots for the ubo, ssbo and opaques who has explicit binding
- int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+ int numBindings = referenceIntermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
varSlotMap[name] = binding;
reserveSlot(resourceKey, binding, numBindings);
} else {
@@ -1288,7 +1307,7 @@ struct TDefaultIoResolver : public TDefaultIoResolverBase {
const TType& type = ent.symbol->getType();
const int set = getLayoutSet(type);
// On OpenGL arrays of opaque types take a seperate binding for each element
- int numBindings = intermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
+ int numBindings = referenceIntermediate.getSpv().openGl != 0 && type.isSizedArray() ? type.getCumulativeArraySize() : 1;
TResourceType resource = getResourceType(type);
if (resource < EResCount) {
if (type.getQualifier().hasBinding()) {
@@ -1633,6 +1652,37 @@ bool TGlslIoMapper::doMap(TIoMapResolver* resolver, TInfoSink& infoSink) {
return TVarEntryInfo::TOrderByPriority()(p1.second, p2.second);
});
resolver->endResolve(EShLangCount);
+ if (autoPushConstantBlockName.length()) {
+ bool upgraded = false;
+ for (size_t stage = 0; stage < EShLangCount; stage++) {
+ if (intermediates[stage] != nullptr) {
+ TVarLiveMap** pUniformVarMap = uniformResolve.uniformVarMap;
+ auto at = pUniformVarMap[stage]->find(autoPushConstantBlockName);
+ if (at == pUniformVarMap[stage]->end())
+ continue;
+ TQualifier& qualifier = at->second.symbol->getQualifier();
+ if (!qualifier.isUniform())
+ continue;
+ TType& t = at->second.symbol->getWritableType();
+ int size, stride;
+ TIntermediate::getBaseAlignment(t, size, stride, autoPushConstantBlockPacking,
+ qualifier.layoutMatrix == ElmRowMajor);
+ if (size <= int(autoPushConstantMaxSize)) {
+ qualifier.setBlockStorage(EbsPushConstant);
+ qualifier.layoutPacking = autoPushConstantBlockPacking;
+ upgraded = true;
+ }
+ }
+ }
+ // If it's been upgraded to push_constant, then remove it from the uniformVector
+ // so it doesn't get a set/binding assigned to it.
+ if (upgraded) {
+ auto at = std::find_if(uniformVector.begin(), uniformVector.end(),
+ [this](const TVarLivePair& p) { return p.first == autoPushConstantBlockName; });
+ if (at != uniformVector.end())
+ uniformVector.erase(at);
+ }
+ }
for (size_t stage = 0; stage < EShLangCount; stage++) {
if (intermediates[stage] != nullptr) {
// traverse each stage, set new location to each input/output and unifom symbol, set new binding to
diff --git a/thirdparty/glslang/glslang/MachineIndependent/iomapper.h b/thirdparty/glslang/glslang/MachineIndependent/iomapper.h
index 07357c2ef4..c43864e3aa 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/iomapper.h
+++ b/thirdparty/glslang/glslang/MachineIndependent/iomapper.h
@@ -165,7 +165,7 @@ public:
protected:
TDefaultIoResolverBase(TDefaultIoResolverBase&);
TDefaultIoResolverBase& operator=(TDefaultIoResolverBase&);
- const TIntermediate& intermediate;
+ const TIntermediate& referenceIntermediate;
int nextUniformLocation;
int nextInputLocation;
int nextOutputLocation;
@@ -291,7 +291,7 @@ public:
bool virtual doMap(TIoMapResolver*, TInfoSink&) { return true; }
};
-// I/O mapper for OpenGL
+// I/O mapper for GLSL
class TGlslIoMapper : public TIoMapper {
public:
TGlslIoMapper() {
@@ -301,6 +301,8 @@ public:
memset(intermediates, 0, sizeof(TIntermediate*) * (EShLangCount + 1));
profile = ENoProfile;
version = 0;
+ autoPushConstantMaxSize = 128;
+ autoPushConstantBlockPacking = ElpStd430;
}
virtual ~TGlslIoMapper() {
for (size_t stage = 0; stage < EShLangCount; stage++) {
@@ -320,6 +322,13 @@ public:
intermediates[stage] = nullptr;
}
}
+ // If set, the uniform block with the given name will be changed to be backed by
+ // push_constant if it's size is <= maxSize
+ void setAutoPushConstantBlock(const char* name, unsigned int maxSize, TLayoutPacking packing) {
+ autoPushConstantBlockName = name;
+ autoPushConstantMaxSize = maxSize;
+ autoPushConstantBlockPacking = packing;
+ }
// grow the reflection stage by stage
bool addStage(EShLanguage, TIntermediate&, TInfoSink&, TIoMapResolver*) override;
bool doMap(TIoMapResolver*, TInfoSink&) override;
@@ -329,6 +338,11 @@ public:
bool hadError = false;
EProfile profile;
int version;
+
+private:
+ TString autoPushConstantBlockName;
+ unsigned int autoPushConstantMaxSize;
+ TLayoutPacking autoPushConstantBlockPacking;
};
} // end namespace glslang
diff --git a/thirdparty/glslang/glslang/MachineIndependent/linkValidate.cpp b/thirdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
index 9656e2e7e0..620be97c97 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
+++ b/thirdparty/glslang/glslang/MachineIndependent/linkValidate.cpp
@@ -312,6 +312,7 @@ void TIntermediate::mergeModes(TInfoSink& infoSink, TIntermediate& unit)
MERGE_TRUE(autoMapBindings);
MERGE_TRUE(autoMapLocations);
MERGE_TRUE(invertY);
+ MERGE_TRUE(dxPositionW);
MERGE_TRUE(flattenUniformArrays);
MERGE_TRUE(useUnknownFormat);
MERGE_TRUE(hlslOffsets);
@@ -759,7 +760,10 @@ void TIntermediate::mergeLinkerObjects(TInfoSink& infoSink, TIntermSequence& lin
auto checkName = [this, unitSymbol, &infoSink](const TString& name) {
for (unsigned int i = 0; i < unitSymbol->getType().getStruct()->size(); ++i) {
- if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()) {
+ if (name == (*unitSymbol->getType().getStruct())[i].type->getFieldName()
+ && !((*unitSymbol->getType().getStruct())[i].type->getQualifier().hasLocation()
+ || unitSymbol->getType().getQualifier().hasLocation())
+ ) {
error(infoSink, "Anonymous member name used for global variable or other anonymous member: ");
infoSink.info << (*unitSymbol->getType().getStruct())[i].type->getCompleteString() << "\n";
}
@@ -858,9 +862,19 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
if (symbol.getType().getBasicType() == EbtBlock && unitSymbol.getType().getBasicType() == EbtBlock &&
symbol.getType().getStruct() && unitSymbol.getType().getStruct() &&
symbol.getType().sameStructType(unitSymbol.getType())) {
- for (unsigned int i = 0; i < symbol.getType().getStruct()->size(); ++i) {
- const TQualifier& qualifier = (*symbol.getType().getStruct())[i].type->getQualifier();
- const TQualifier& unitQualifier = (*unitSymbol.getType().getStruct())[i].type->getQualifier();
+ unsigned int li = 0;
+ unsigned int ri = 0;
+ while (li < symbol.getType().getStruct()->size() && ri < unitSymbol.getType().getStruct()->size()) {
+ if ((*symbol.getType().getStruct())[li].type->hiddenMember()) {
+ ++li;
+ continue;
+ }
+ if ((*unitSymbol.getType().getStruct())[ri].type->hiddenMember()) {
+ ++ri;
+ continue;
+ }
+ const TQualifier& qualifier = (*symbol.getType().getStruct())[li].type->getQualifier();
+ const TQualifier & unitQualifier = (*unitSymbol.getType().getStruct())[ri].type->getQualifier();
if (qualifier.layoutMatrix != unitQualifier.layoutMatrix ||
qualifier.layoutOffset != unitQualifier.layoutOffset ||
qualifier.layoutAlign != unitQualifier.layoutAlign ||
@@ -869,6 +883,8 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
error(infoSink, "Interface block member layout qualifiers must match:");
writeTypeComparison = true;
}
+ ++li;
+ ++ri;
}
}
@@ -954,10 +970,10 @@ void TIntermediate::mergeErrorCheck(TInfoSink& infoSink, const TIntermSymbol& sy
// current implementation only has one offset.
if (symbol.getQualifier().layoutMatrix != unitSymbol.getQualifier().layoutMatrix ||
symbol.getQualifier().layoutPacking != unitSymbol.getQualifier().layoutPacking ||
- symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation ||
+ (symbol.getQualifier().hasLocation() && unitSymbol.getQualifier().hasLocation() && symbol.getQualifier().layoutLocation != unitSymbol.getQualifier().layoutLocation) ||
symbol.getQualifier().layoutComponent != unitSymbol.getQualifier().layoutComponent ||
symbol.getQualifier().layoutIndex != unitSymbol.getQualifier().layoutIndex ||
- symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding ||
+ (symbol.getQualifier().hasBinding() && unitSymbol.getQualifier().hasBinding() && symbol.getQualifier().layoutBinding != unitSymbol.getQualifier().layoutBinding) ||
(symbol.getQualifier().hasBinding() && (symbol.getQualifier().layoutOffset != unitSymbol.getQualifier().layoutOffset))) {
error(infoSink, "Layout qualification must match:");
writeTypeComparison = true;
@@ -1786,7 +1802,7 @@ unsigned int TIntermediate::computeTypeXfbSize(const TType& type, bool& contains
return size;
}
- int numComponents;
+ int numComponents {0};
if (type.isScalar())
numComponents = 1;
else if (type.isVector())
@@ -1934,7 +1950,7 @@ int TIntermediate::getBaseAlignment(const TType& type, int& size, int& stride, T
}
// rule 9
- if (type.getBasicType() == EbtStruct) {
+ if (type.getBasicType() == EbtStruct || type.getBasicType() == EbtBlock) {
const TTypeList& memberList = *type.getStruct();
size = 0;
@@ -2159,8 +2175,9 @@ int TIntermediate::computeBufferReferenceTypeSize(const TType& type)
bool TIntermediate::isIoResizeArray(const TType& type, EShLanguage language) {
return type.isArray() &&
((language == EShLangGeometry && type.getQualifier().storage == EvqVaryingIn) ||
- (language == EShLangTessControl && type.getQualifier().storage == EvqVaryingOut &&
+ (language == EShLangTessControl && (type.getQualifier().storage == EvqVaryingIn || type.getQualifier().storage == EvqVaryingOut) &&
! type.getQualifier().patch) ||
+ (language == EShLangTessEvaluation && type.getQualifier().storage == EvqVaryingIn) ||
(language == EShLangFragment && type.getQualifier().storage == EvqVaryingIn &&
type.getQualifier().pervertexNV) ||
(language == EShLangMeshNV && type.getQualifier().storage == EvqVaryingOut &&
diff --git a/thirdparty/glslang/glslang/MachineIndependent/localintermediate.h b/thirdparty/glslang/glslang/MachineIndependent/localintermediate.h
index 6aa9399dcc..a658c09c6c 100644
--- a/thirdparty/glslang/glslang/MachineIndependent/localintermediate.h
+++ b/thirdparty/glslang/glslang/MachineIndependent/localintermediate.h
@@ -290,6 +290,7 @@ public:
resources(TBuiltInResource{}),
numEntryPoints(0), numErrors(0), numPushConstants(0), recursive(false),
invertY(false),
+ dxPositionW(false),
useStorageBuffer(false),
invariantAll(false),
nanMinMaxClamp(false),
@@ -397,6 +398,9 @@ public:
case EShTargetSpv_1_5:
processes.addProcess("target-env spirv1.5");
break;
+ case EShTargetSpv_1_6:
+ processes.addProcess("target-env spirv1.6");
+ break;
default:
processes.addProcess("target-env spirvUnknown");
break;
@@ -415,6 +419,9 @@ public:
case EShTargetVulkan_1_2:
processes.addProcess("target-env vulkan1.2");
break;
+ case EShTargetVulkan_1_3:
+ processes.addProcess("target-env vulkan1.3");
+ break;
default:
processes.addProcess("target-env vulkanUnknown");
break;
@@ -460,6 +467,14 @@ public:
}
bool getInvertY() const { return invertY; }
+ void setDxPositionW(bool dxPosW)
+ {
+ dxPositionW = dxPosW;
+ if (dxPositionW)
+ processes.addProcess("dx-position-w");
+ }
+ bool getDxPositionW() const { return dxPositionW; }
+
#ifdef ENABLE_HLSL
void setSource(EShSource s) { source = s; }
EShSource getSource() const { return source; }
@@ -1070,6 +1085,7 @@ protected:
int numPushConstants;
bool recursive;
bool invertY;
+ bool dxPositionW;
bool useStorageBuffer;
bool invariantAll;
bool nanMinMaxClamp; // true if desiring min/max/clamp to favor non-NaN over NaN
diff --git a/thirdparty/glslang/glslang/OSDependent/Unix/ossource.cpp b/thirdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
index 3f029f0239..81da99c2c4 100644
--- a/thirdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
+++ b/thirdparty/glslang/glslang/OSDependent/Unix/ossource.cpp
@@ -172,7 +172,7 @@ namespace {
pthread_mutex_t gMutex;
}
-void InitGlobalLock()
+static void InitMutex(void)
{
pthread_mutexattr_t mutexattr;
pthread_mutexattr_init(&mutexattr);
@@ -180,6 +180,12 @@ void InitGlobalLock()
pthread_mutex_init(&gMutex, &mutexattr);
}
+void InitGlobalLock()
+{
+ static pthread_once_t once = PTHREAD_ONCE_INIT;
+ pthread_once(&once, InitMutex);
+}
+
void GetGlobalLock()
{
pthread_mutex_lock(&gMutex);
diff --git a/thirdparty/glslang/glslang/Public/ShaderLang.h b/thirdparty/glslang/glslang/Public/ShaderLang.h
index d2a4bf40a0..3c0e2910d6 100644
--- a/thirdparty/glslang/glslang/Public/ShaderLang.h
+++ b/thirdparty/glslang/glslang/Public/ShaderLang.h
@@ -150,8 +150,8 @@ typedef enum {
typedef enum {
EShClientNone, // use when there is no client, e.g. for validation
- EShClientVulkan,
- EShClientOpenGL,
+ EShClientVulkan, // as GLSL dialect, specifies KHR_vulkan_glsl extension
+ EShClientOpenGL, // as GLSL dialect, specifies ARB_gl_spirv extension
LAST_ELEMENT_MARKER(EShClientCount),
} EShClient;
@@ -166,8 +166,9 @@ typedef enum {
EShTargetVulkan_1_0 = (1 << 22), // Vulkan 1.0
EShTargetVulkan_1_1 = (1 << 22) | (1 << 12), // Vulkan 1.1
EShTargetVulkan_1_2 = (1 << 22) | (2 << 12), // Vulkan 1.2
+ EShTargetVulkan_1_3 = (1 << 22) | (3 << 12), // Vulkan 1.3
EShTargetOpenGL_450 = 450, // OpenGL
- LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 4),
+ LAST_ELEMENT_MARKER(EShTargetClientVersionCount = 5),
} EShTargetClientVersion;
typedef EShTargetClientVersion EshTargetClientVersion;
@@ -179,7 +180,8 @@ typedef enum {
EShTargetSpv_1_3 = (1 << 16) | (3 << 8), // SPIR-V 1.3
EShTargetSpv_1_4 = (1 << 16) | (4 << 8), // SPIR-V 1.4
EShTargetSpv_1_5 = (1 << 16) | (5 << 8), // SPIR-V 1.5
- LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 6),
+ EShTargetSpv_1_6 = (1 << 16) | (6 << 8), // SPIR-V 1.6
+ LAST_ELEMENT_MARKER(EShTargetLanguageVersionCount = 7),
} EShTargetLanguageVersion;
struct TInputLanguage {
@@ -485,6 +487,7 @@ public:
GLSLANG_EXPORT void addUniformLocationOverride(const char* name, int loc);
GLSLANG_EXPORT void setUniformLocationBase(int base);
GLSLANG_EXPORT void setInvertY(bool invert);
+ GLSLANG_EXPORT void setDxPositionW(bool dxPosW);
#ifdef ENABLE_HLSL
GLSLANG_EXPORT void setHlslIoMapping(bool hlslIoMap);
GLSLANG_EXPORT void setFlattenUniformArrays(bool flatten);
@@ -512,6 +515,9 @@ public:
// use EShClientNone and version of 0, e.g. for validation mode.
// Note 'version' does not describe the target environment,
// just the version of the source dialect to compile under.
+ // For example, to choose the Vulkan dialect of GLSL defined by
+ // version 100 of the KHR_vulkan_glsl extension: lang = EShSourceGlsl,
+ // dialect = EShClientVulkan, and version = 100.
//
// See the definitions of TEnvironment, EShSource, EShLanguage,
// and EShClient for choices and more detail.
diff --git a/thirdparty/glslang/glslang/build_info.h b/thirdparty/glslang/glslang/build_info.h
index 661c4a3c1c..3a445c9cb0 100644
--- a/thirdparty/glslang/glslang/build_info.h
+++ b/thirdparty/glslang/glslang/build_info.h
@@ -35,7 +35,7 @@
#define GLSLANG_BUILD_INFO
#define GLSLANG_VERSION_MAJOR 11
-#define GLSLANG_VERSION_MINOR 6
+#define GLSLANG_VERSION_MINOR 8
#define GLSLANG_VERSION_PATCH 0
#define GLSLANG_VERSION_FLAVOR ""
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
index 1dcbe92904..1db0f1df92 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-common.hh
@@ -839,7 +839,7 @@ struct StateTableDriver
}
if (!c->in_place)
- buffer->swap_buffers ();
+ buffer->sync ();
}
public:
diff --git a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
index d745c11431..0bf9bd2912 100644
--- a/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
+++ b/thirdparty/harfbuzz/src/hb-aat-layout-just-table.hh
@@ -146,7 +146,7 @@ struct DuctileGlyphAction
HBUINT32 variationAxis; /* The 4-byte tag identifying the ductile axis.
* This would normally be 0x64756374 ('duct'),
* but you may use any axis the font contains. */
- HBFixed minimumLimit; /* The lowest value for the ductility axis tha
+ HBFixed minimumLimit; /* The lowest value for the ductility axis that
* still yields an acceptable appearance. Normally
* this will be 1.0. */
HBFixed noStretchValue; /* This is the default value that corresponds to
diff --git a/thirdparty/harfbuzz/src/hb-algs.hh b/thirdparty/harfbuzz/src/hb-algs.hh
index 446d87e28b..c40a55cd1f 100644
--- a/thirdparty/harfbuzz/src/hb-algs.hh
+++ b/thirdparty/harfbuzz/src/hb-algs.hh
@@ -36,6 +36,7 @@
#include <algorithm>
#include <initializer_list>
+#include <functional>
#include <new>
/*
@@ -210,12 +211,23 @@ struct
}
HB_FUNCOBJ (hb_bool);
+template <typename T>
+static inline
+T hb_coerce (const T v) { return v; }
+template <typename T, typename V,
+ hb_enable_if (!hb_is_same (hb_decay<T>, hb_decay<V>) && std::is_pointer<V>::value)>
+static inline
+T hb_coerce (const V v) { return *v; }
+
struct
{
private:
template <typename T> constexpr auto
- impl (const T& v, hb_priority<1>) const HB_RETURN (uint32_t, hb_deref (v).hash ())
+ impl (const T& v, hb_priority<2>) const HB_RETURN (uint32_t, hb_deref (v).hash ())
+
+ template <typename T> constexpr auto
+ impl (const T& v, hb_priority<1>) const HB_RETURN (uint32_t, std::hash<hb_decay<decltype (hb_deref (v))>>{} (hb_deref (v)))
template <typename T,
hb_enable_if (std::is_integral<T>::value)> constexpr auto
@@ -435,23 +447,29 @@ struct
private:
template <typename T1, typename T2> auto
- impl (T1&& v1, T2 &&v2, hb_priority<2>) const HB_AUTO_RETURN
+ impl (T1&& v1, T2 &&v2, hb_priority<3>) const HB_AUTO_RETURN
(
std::forward<T2> (v2).cmp (std::forward<T1> (v1)) == 0
)
template <typename T1, typename T2> auto
- impl (T1&& v1, T2 &&v2, hb_priority<1>) const HB_AUTO_RETURN
+ impl (T1&& v1, T2 &&v2, hb_priority<2>) const HB_AUTO_RETURN
(
std::forward<T1> (v1).cmp (std::forward<T2> (v2)) == 0
)
template <typename T1, typename T2> auto
- impl (T1&& v1, T2 &&v2, hb_priority<0>) const HB_AUTO_RETURN
+ impl (T1&& v1, T2 &&v2, hb_priority<1>) const HB_AUTO_RETURN
(
std::forward<T1> (v1) == std::forward<T2> (v2)
)
+ template <typename T1, typename T2> auto
+ impl (T1&& v1, T2 &&v2, hb_priority<0>) const HB_AUTO_RETURN
+ (
+ std::forward<T2> (v2) == std::forward<T1> (v1)
+ )
+
public:
template <typename T1, typename T2> auto
@@ -472,11 +490,15 @@ struct hb_pair_t
typedef T2 second_t;
typedef hb_pair_t<T1, T2> pair_t;
+ template <typename U1 = T1, typename U2 = T2,
+ hb_enable_if (std::is_default_constructible<U1>::value &&
+ std::is_default_constructible<U2>::value)>
+ hb_pair_t () : first (), second () {}
hb_pair_t (T1 a, T2 b) : first (a), second (b) {}
template <typename Q1, typename Q2,
hb_enable_if (hb_is_convertible (T1, Q1) &&
- hb_is_convertible (T2, T2))>
+ hb_is_convertible (T2, Q2))>
operator hb_pair_t<Q1, Q2> () { return hb_pair_t<Q1, Q2> (first, second); }
hb_pair_t<T1, T2> reverse () const
@@ -870,7 +892,7 @@ hb_bsearch_impl (unsigned *pos, /* Out */
#pragma GCC diagnostic ignored "-Wcast-align"
V* p = (V*) (((const char *) base) + (mid * stride));
#pragma GCC diagnostic pop
- int c = compar ((const void *) hb_addressof (key), (const void *) p, ds...);
+ int c = compar ((const void *) std::addressof (key), (const void *) p, ds...);
if (c < 0)
max = mid - 1;
else if (c > 0)
diff --git a/thirdparty/harfbuzz/src/hb-array.hh b/thirdparty/harfbuzz/src/hb-array.hh
index 0beffb078f..1d1476d7cd 100644
--- a/thirdparty/harfbuzz/src/hb-array.hh
+++ b/thirdparty/harfbuzz/src/hb-array.hh
@@ -412,7 +412,7 @@ bool hb_array_t<T>::operator == (const hb_array_t<T> &o) const
return true;
}
-/* TODO Specialize opeator== for hb_bytes_t and hb_ubytes_t. */
+/* TODO Specialize operator== for hb_bytes_t and hb_ubytes_t. */
template <>
inline uint32_t hb_array_t<const char>::hash () const {
diff --git a/thirdparty/harfbuzz/src/hb-bimap.hh b/thirdparty/harfbuzz/src/hb-bimap.hh
index d466af8b60..a9e1278de7 100644
--- a/thirdparty/harfbuzz/src/hb-bimap.hh
+++ b/thirdparty/harfbuzz/src/hb-bimap.hh
@@ -33,20 +33,6 @@
/* Bi-directional map */
struct hb_bimap_t
{
- /* XXX(remove) */
- void init ()
- {
- forw_map.init ();
- back_map.init ();
- }
-
- /* XXX(remove) */
- void fini ()
- {
- forw_map.fini ();
- back_map.fini ();
- }
-
void reset ()
{
forw_map.reset ();
diff --git a/thirdparty/harfbuzz/src/hb-buffer-verify.cc b/thirdparty/harfbuzz/src/hb-buffer-verify.cc
new file mode 100644
index 0000000000..dea2c11c35
--- /dev/null
+++ b/thirdparty/harfbuzz/src/hb-buffer-verify.cc
@@ -0,0 +1,422 @@
+/*
+ * Copyright © 2022 Behdad Esfahbod
+ *
+ * This is part of HarfBuzz, a text shaping library.
+ *
+ * Permission is hereby granted, without written agreement and without
+ * license or royalty fees, to use, copy, modify, and distribute this
+ * software and its documentation for any purpose, provided that the
+ * above copyright notice and the following two paragraphs appear in
+ * all copies of this software.
+ *
+ * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
+ * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
+ * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
+ * DAMAGE.
+ *
+ * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
+ * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
+ * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
+ * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
+ * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
+ *
+ * Google Author(s): Behdad Esfahbod
+ */
+
+#include "hb.hh"
+
+#ifndef HB_NO_BUFFER_VERIFY
+
+#include "hb-buffer.hh"
+
+
+#define BUFFER_VERIFY_ERROR "buffer verify error: "
+static inline void
+buffer_verify_error (hb_buffer_t *buffer,
+ hb_font_t *font,
+ const char *fmt,
+ ...) HB_PRINTF_FUNC(3, 4);
+
+static inline void
+buffer_verify_error (hb_buffer_t *buffer,
+ hb_font_t *font,
+ const char *fmt,
+ ...)
+{
+ va_list ap;
+ va_start (ap, fmt);
+ if (buffer->messaging ())
+ {
+ buffer->message_impl (font, fmt, ap);
+ }
+ else
+ {
+ fprintf (stderr, "harfbuzz ");
+ vfprintf (stderr, fmt, ap);
+ fprintf (stderr, "\n");
+ }
+ va_end (ap);
+}
+
+static bool
+buffer_verify_monotone (hb_buffer_t *buffer,
+ hb_font_t *font)
+{
+ /* Check that clusters are monotone. */
+ if (buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES ||
+ buffer->cluster_level == HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
+ {
+ bool is_forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
+
+ unsigned int num_glyphs;
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
+
+ for (unsigned int i = 1; i < num_glyphs; i++)
+ if (info[i-1].cluster != info[i].cluster &&
+ (info[i-1].cluster < info[i].cluster) != is_forward)
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "clusters are not monotone.");
+ return false;
+ }
+ }
+
+ return true;
+}
+
+static bool
+buffer_verify_unsafe_to_break (hb_buffer_t *buffer,
+ hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+{
+ if (buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES &&
+ buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
+ {
+ /* Cannot perform this check without monotone clusters. */
+ return true;
+ }
+
+ /* Check that breaking up shaping at safe-to-break is indeed safe. */
+
+ hb_buffer_t *fragment = hb_buffer_create_similar (buffer);
+ hb_buffer_set_flags (fragment, hb_buffer_get_flags (fragment) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_buffer_t *reconstruction = hb_buffer_create_similar (buffer);
+ hb_buffer_set_flags (reconstruction, hb_buffer_get_flags (reconstruction) & ~HB_BUFFER_FLAG_VERIFY);
+
+ unsigned int num_glyphs;
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
+
+ unsigned int num_chars;
+ hb_glyph_info_t *text = hb_buffer_get_glyph_infos (text_buffer, &num_chars);
+
+ /* Chop text and shape fragments. */
+ bool forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
+ unsigned int start = 0;
+ unsigned int text_start = forward ? 0 : num_chars;
+ unsigned int text_end = text_start;
+ for (unsigned int end = 1; end < num_glyphs + 1; end++)
+ {
+ if (end < num_glyphs &&
+ (info[end].cluster == info[end-1].cluster ||
+ info[end-(forward?0:1)].mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK))
+ continue;
+
+ /* Shape segment corresponding to glyphs start..end. */
+ if (end == num_glyphs)
+ {
+ if (forward)
+ text_end = num_chars;
+ else
+ text_start = 0;
+ }
+ else
+ {
+ if (forward)
+ {
+ unsigned int cluster = info[end].cluster;
+ while (text_end < num_chars && text[text_end].cluster < cluster)
+ text_end++;
+ }
+ else
+ {
+ unsigned int cluster = info[end - 1].cluster;
+ while (text_start && text[text_start - 1].cluster >= cluster)
+ text_start--;
+ }
+ }
+ assert (text_start < text_end);
+
+ if (0)
+ printf("start %d end %d text start %d end %d\n", start, end, text_start, text_end);
+
+ hb_buffer_clear_contents (fragment);
+
+ hb_buffer_flags_t flags = hb_buffer_get_flags (fragment);
+ if (0 < text_start)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_BOT);
+ if (text_end < num_chars)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_EOT);
+ hb_buffer_set_flags (fragment, flags);
+
+ hb_buffer_append (fragment, text_buffer, text_start, text_end);
+ if (!hb_shape_full (font, fragment, features, num_features, shapers))
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
+ hb_buffer_destroy (reconstruction);
+ hb_buffer_destroy (fragment);
+ return false;
+ }
+ hb_buffer_append (reconstruction, fragment, 0, -1);
+
+ start = end;
+ if (forward)
+ text_start = text_end;
+ else
+ text_end = text_start;
+ }
+
+ bool ret = true;
+ hb_buffer_diff_flags_t diff = hb_buffer_diff (reconstruction, buffer, (hb_codepoint_t) -1, 0);
+ if (diff)
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "unsafe-to-break test failed.");
+ ret = false;
+
+ /* Return the reconstructed result instead so it can be inspected. */
+ hb_buffer_set_length (buffer, 0);
+ hb_buffer_append (buffer, reconstruction, 0, -1);
+ }
+
+ hb_buffer_destroy (reconstruction);
+ hb_buffer_destroy (fragment);
+
+ return ret;
+}
+
+static bool
+buffer_verify_unsafe_to_concat (hb_buffer_t *buffer,
+ hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+{
+ if (buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_GRAPHEMES &&
+ buffer->cluster_level != HB_BUFFER_CLUSTER_LEVEL_MONOTONE_CHARACTERS)
+ {
+ /* Cannot perform this check without monotone clusters. */
+ return true;
+ }
+
+ /* Check that shuffling up text before shaping at safe-to-concat points
+ * is indeed safe. */
+
+ /* This is what we do:
+ *
+ * 1. We shape text once. Then segment the text at all the safe-to-concat
+ * points;
+ *
+ * 2. Then we create two buffers, one containing all the even segments and
+ * one all the odd segments.
+ *
+ * 3. Because all these segments were safe-to-concat at both ends, we
+ * expect that concatenating them and shaping should NOT change the
+ * shaping results of each segment. As such, we expect that after
+ * shaping the two buffers, we still get cluster boundaries at the
+ * segment boundaries, and that those all are safe-to-concat points.
+ * Moreover, that there are NOT any safe-to-concat points within the
+ * segments.
+ *
+ * 4. Finally, we reconstruct the shaping results of the original text by
+ * simply interleaving the shaping results of the segments from the two
+ * buffers, and assert that the total shaping results is the same as
+ * the one from original buffer in step 1.
+ */
+
+ hb_buffer_t *fragments[2] {hb_buffer_create_similar (buffer),
+ hb_buffer_create_similar (buffer)};
+ hb_buffer_set_flags (fragments[0], hb_buffer_get_flags (fragments[0]) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_buffer_set_flags (fragments[1], hb_buffer_get_flags (fragments[1]) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_buffer_t *reconstruction = hb_buffer_create_similar (buffer);
+ hb_buffer_set_flags (reconstruction, hb_buffer_get_flags (reconstruction) & ~HB_BUFFER_FLAG_VERIFY);
+ hb_segment_properties_t props;
+ hb_buffer_get_segment_properties (buffer, &props);
+ hb_buffer_set_segment_properties (fragments[0], &props);
+ hb_buffer_set_segment_properties (fragments[1], &props);
+ hb_buffer_set_segment_properties (reconstruction, &props);
+
+ unsigned num_glyphs;
+ hb_glyph_info_t *info = hb_buffer_get_glyph_infos (buffer, &num_glyphs);
+
+ unsigned num_chars;
+ hb_glyph_info_t *text = hb_buffer_get_glyph_infos (text_buffer, &num_chars);
+
+ bool forward = HB_DIRECTION_IS_FORWARD (hb_buffer_get_direction (buffer));
+
+ if (!forward)
+ hb_buffer_reverse (buffer);
+
+ /*
+ * Split text into segments and collect into to fragment streams.
+ */
+ {
+ unsigned fragment_idx = 0;
+ unsigned start = 0;
+ unsigned text_start = 0;
+ unsigned text_end = 0;
+ for (unsigned end = 1; end < num_glyphs + 1; end++)
+ {
+ if (end < num_glyphs &&
+ (info[end].cluster == info[end-1].cluster ||
+ info[end].mask & HB_GLYPH_FLAG_UNSAFE_TO_CONCAT))
+ continue;
+
+ /* Accumulate segment corresponding to glyphs start..end. */
+ if (end == num_glyphs)
+ text_end = num_chars;
+ else
+ {
+ unsigned cluster = info[end].cluster;
+ while (text_end < num_chars && text[text_end].cluster < cluster)
+ text_end++;
+ }
+ assert (text_start < text_end);
+
+ if (0)
+ printf("start %d end %d text start %d end %d\n", start, end, text_start, text_end);
+
+#if 0
+ hb_buffer_flags_t flags = hb_buffer_get_flags (fragment);
+ if (0 < text_start)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_BOT);
+ if (text_end < num_chars)
+ flags = (hb_buffer_flags_t) (flags & ~HB_BUFFER_FLAG_EOT);
+ hb_buffer_set_flags (fragment, flags);
+#endif
+
+ hb_buffer_append (fragments[fragment_idx], text_buffer, text_start, text_end);
+
+ start = end;
+ text_start = text_end;
+ fragment_idx = 1 - fragment_idx;
+ }
+ }
+
+ bool ret = true;
+ hb_buffer_diff_flags_t diff;
+
+ /*
+ * Shape the two fragment streams.
+ */
+ if (!hb_shape_full (font, fragments[0], features, num_features, shapers))
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
+ ret = false;
+ goto out;
+ }
+ if (!hb_shape_full (font, fragments[1], features, num_features, shapers))
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "shaping failed while shaping fragment.");
+ ret = false;
+ goto out;
+ }
+
+ if (!forward)
+ {
+ hb_buffer_reverse (fragments[0]);
+ hb_buffer_reverse (fragments[1]);
+ }
+
+ /*
+ * Reconstruct results.
+ */
+ {
+ unsigned fragment_idx = 0;
+ unsigned fragment_start[2] {0, 0};
+ unsigned fragment_num_glyphs[2];
+ hb_glyph_info_t *fragment_info[2];
+ for (unsigned i = 0; i < 2; i++)
+ fragment_info[i] = hb_buffer_get_glyph_infos (fragments[i], &fragment_num_glyphs[i]);
+ while (fragment_start[0] < fragment_num_glyphs[0] ||
+ fragment_start[1] < fragment_num_glyphs[1])
+ {
+ unsigned fragment_end = fragment_start[fragment_idx] + 1;
+ while (fragment_end < fragment_num_glyphs[fragment_idx] &&
+ (fragment_info[fragment_idx][fragment_end].cluster == fragment_info[fragment_idx][fragment_end - 1].cluster ||
+ fragment_info[fragment_idx][fragment_end].mask & HB_GLYPH_FLAG_UNSAFE_TO_CONCAT))
+ fragment_end++;
+
+ hb_buffer_append (reconstruction, fragments[fragment_idx], fragment_start[fragment_idx], fragment_end);
+
+ fragment_start[fragment_idx] = fragment_end;
+ fragment_idx = 1 - fragment_idx;
+ }
+ }
+
+ if (!forward)
+ {
+ hb_buffer_reverse (buffer);
+ hb_buffer_reverse (reconstruction);
+ }
+
+ /*
+ * Diff results.
+ */
+ diff = hb_buffer_diff (reconstruction, buffer, (hb_codepoint_t) -1, 0);
+ if (diff)
+ {
+ buffer_verify_error (buffer, font, BUFFER_VERIFY_ERROR "unsafe-to-concat test failed.");
+ ret = false;
+
+ /* Return the reconstructed result instead so it can be inspected. */
+ hb_buffer_set_length (buffer, 0);
+ hb_buffer_append (buffer, reconstruction, 0, -1);
+ }
+
+
+out:
+ hb_buffer_destroy (reconstruction);
+ hb_buffer_destroy (fragments[0]);
+ hb_buffer_destroy (fragments[1]);
+
+ return ret;
+}
+
+bool
+hb_buffer_t::verify (hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+{
+ bool ret = true;
+ if (!buffer_verify_monotone (this, font))
+ ret = false;
+ if (!buffer_verify_unsafe_to_break (this, text_buffer, font, features, num_features, shapers))
+ ret = false;
+ if ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) != 0 &&
+ !buffer_verify_unsafe_to_concat (this, text_buffer, font, features, num_features, shapers))
+ ret = false;
+ if (!ret)
+ {
+ unsigned len = text_buffer->len;
+ hb_vector_t<char> bytes;
+ if (likely (bytes.resize (len * 10 + 16)))
+ {
+ hb_buffer_serialize_unicode (text_buffer,
+ 0, len,
+ bytes.arrayZ, bytes.length,
+ &len,
+ HB_BUFFER_SERIALIZE_FORMAT_TEXT,
+ HB_BUFFER_SERIALIZE_FLAG_NO_CLUSTERS);
+ buffer_verify_error (this, font, BUFFER_VERIFY_ERROR "text was: %s.", bytes.arrayZ);
+ }
+ }
+ return ret;
+}
+
+
+#endif
diff --git a/thirdparty/harfbuzz/src/hb-buffer.cc b/thirdparty/harfbuzz/src/hb-buffer.cc
index be3161a54d..d36fcfde39 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.cc
+++ b/thirdparty/harfbuzz/src/hb-buffer.cc
@@ -86,7 +86,46 @@ hb_segment_properties_hash (const hb_segment_properties_t *p)
(intptr_t) (p->language);
}
+/**
+ * hb_segment_properties_overlay:
+ * @p: #hb_segment_properties_t to fill in.
+ * @src: #hb_segment_properties_t to fill in from.
+ *
+ * Fills in missing fields of @p from @src in a considered manner.
+ *
+ * First, if @p does not have direction set, direction is copied from @src.
+ *
+ * Next, if @p and @src have the same direction (which can be unset), if @p
+ * does not have script set, script is copied from @src.
+ *
+ * Finally, if @p and @src have the same direction and script (which either
+ * can be unset), if @p does not have language set, language is copied from
+ * @src.
+ *
+ * Since: 3.3.0
+ **/
+void
+hb_segment_properties_overlay (hb_segment_properties_t *p,
+ const hb_segment_properties_t *src)
+{
+ if (unlikely (!p || !src))
+ return;
+ if (!p->direction)
+ p->direction = src->direction;
+
+ if (p->direction != src->direction)
+ return;
+
+ if (!p->script)
+ p->script = src->script;
+
+ if (p->script != src->script)
+ return;
+
+ if (!p->language)
+ p->language = src->language;
+}
/* Here is how the buffer works internally:
*
@@ -96,14 +135,14 @@ hb_segment_properties_hash (const hb_segment_properties_t *p)
* As an optimization, both info and out_info may point to the
* same piece of memory, which is owned by info. This remains the
* case as long as out_len doesn't exceed i at any time.
- * In that case, swap_buffers() is mostly no-op and the glyph operations
+ * In that case, sync() is mostly no-op and the glyph operations
* operate mostly in-place.
*
* As soon as out_info gets longer than info, out_info is moved over
* to an alternate buffer (which we reuse the pos buffer for), and its
* current contents (out_len entries) are copied to the new place.
*
- * This should all remain transparent to the user. swap_buffers() then
+ * This should all remain transparent to the user. sync() then
* switches info over to out_info and does housekeeping.
*/
@@ -217,11 +256,24 @@ hb_buffer_t::get_scratch_buffer (unsigned int *size)
/* HarfBuzz-Internal API */
void
+hb_buffer_t::similar (const hb_buffer_t &src)
+{
+ hb_unicode_funcs_destroy (unicode);
+ unicode = hb_unicode_funcs_reference (src.unicode);
+ flags = src.flags;
+ cluster_level = src.cluster_level;
+ replacement = src.invisible;
+ invisible = src.invisible;
+ not_found = src.not_found;
+}
+
+void
hb_buffer_t::reset ()
{
hb_unicode_funcs_destroy (unicode);
unicode = hb_unicode_funcs_reference (hb_unicode_funcs_get_default ());
flags = HB_BUFFER_FLAG_DEFAULT;
+ cluster_level = HB_BUFFER_CLUSTER_LEVEL_DEFAULT;
replacement = HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT;
invisible = 0;
not_found = 0;
@@ -232,11 +284,10 @@ hb_buffer_t::reset ()
void
hb_buffer_t::clear ()
{
+ content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
hb_segment_properties_t default_props = HB_SEGMENT_PROPERTIES_DEFAULT;
props = default_props;
- scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
- content_type = HB_BUFFER_CONTENT_TYPE_INVALID;
successful = true;
have_output = false;
have_positions = false;
@@ -244,16 +295,44 @@ hb_buffer_t::clear ()
idx = 0;
len = 0;
out_len = 0;
- out_info = info;
- serial = 0;
+ out_info = info;
memset (context, 0, sizeof context);
memset (context_len, 0, sizeof context_len);
deallocate_var_all ();
+ serial = 0;
+ scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
+}
+
+void
+hb_buffer_t::enter ()
+{
+ deallocate_var_all ();
+ serial = 0;
+ scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
+ if (likely (!hb_unsigned_mul_overflows (len, HB_BUFFER_MAX_LEN_FACTOR)))
+ {
+ max_len = hb_max (len * HB_BUFFER_MAX_LEN_FACTOR,
+ (unsigned) HB_BUFFER_MAX_LEN_MIN);
+ }
+ if (likely (!hb_unsigned_mul_overflows (len, HB_BUFFER_MAX_OPS_FACTOR)))
+ {
+ max_ops = hb_max (len * HB_BUFFER_MAX_OPS_FACTOR,
+ (unsigned) HB_BUFFER_MAX_OPS_MIN);
+ }
+}
+void
+hb_buffer_t::leave ()
+{
+ max_len = HB_BUFFER_MAX_LEN_DEFAULT;
+ max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
+ deallocate_var_all ();
+ serial = 0;
}
+
void
hb_buffer_t::add (hb_codepoint_t codepoint,
unsigned int cluster)
@@ -307,7 +386,7 @@ hb_buffer_t::clear_positions ()
}
void
-hb_buffer_t::swap_buffers ()
+hb_buffer_t::sync ()
{
assert (have_output);
@@ -494,33 +573,6 @@ done:
}
void
-hb_buffer_t::unsafe_to_break_impl (unsigned int start, unsigned int end)
-{
- unsigned int cluster = UINT_MAX;
- cluster = _infos_find_min_cluster (info, start, end, cluster);
- _unsafe_to_break_set_mask (info, start, end, cluster);
-}
-void
-hb_buffer_t::unsafe_to_break_from_outbuffer (unsigned int start, unsigned int end)
-{
- if (!have_output)
- {
- unsafe_to_break_impl (start, end);
- return;
- }
-
- assert (start <= out_len);
- assert (idx <= end);
-
- unsigned int cluster = UINT_MAX;
- cluster = _infos_find_min_cluster (out_info, start, out_len, cluster);
- cluster = _infos_find_min_cluster (info, idx, end, cluster);
-
- _unsafe_to_break_set_mask (out_info, start, out_len, cluster);
- _unsafe_to_break_set_mask (info, idx, end, cluster);
-}
-
-void
hb_buffer_t::guess_segment_properties ()
{
assert_unicode ();
@@ -565,12 +617,11 @@ DEFINE_NULL_INSTANCE (hb_buffer_t) =
HB_BUFFER_REPLACEMENT_CODEPOINT_DEFAULT,
0, /* invisible */
0, /* not_found */
- HB_BUFFER_SCRATCH_FLAG_DEFAULT,
- HB_BUFFER_MAX_LEN_DEFAULT,
- HB_BUFFER_MAX_OPS_DEFAULT,
+
HB_BUFFER_CONTENT_TYPE_INVALID,
HB_SEGMENT_PROPERTIES_DEFAULT,
+
false, /* successful */
false, /* have_output */
true /* have_positions */
@@ -610,6 +661,46 @@ hb_buffer_create ()
}
/**
+ * hb_buffer_create_similar:
+ * @src: An #hb_buffer_t
+ *
+ * Creates a new #hb_buffer_t, similar to hb_buffer_create(). The only
+ * difference is that the buffer is configured similarly to @src.
+ *
+ * Return value: (transfer full):
+ * A newly allocated #hb_buffer_t, similar to hb_buffer_create().
+ *
+ * Since: 3.3.0
+ **/
+hb_buffer_t *
+hb_buffer_create_similar (const hb_buffer_t *src)
+{
+ hb_buffer_t *buffer = hb_buffer_create ();
+
+ buffer->similar (*src);
+
+ return buffer;
+}
+
+/**
+ * hb_buffer_reset:
+ * @buffer: An #hb_buffer_t
+ *
+ * Resets the buffer to its initial status, as if it was just newly created
+ * with hb_buffer_create().
+ *
+ * Since: 0.9.2
+ **/
+void
+hb_buffer_reset (hb_buffer_t *buffer)
+{
+ if (unlikely (hb_object_is_immutable (buffer)))
+ return;
+
+ buffer->reset ();
+}
+
+/**
* hb_buffer_get_empty:
*
* Fetches an empty #hb_buffer_t.
@@ -1157,24 +1248,6 @@ hb_buffer_get_not_found_glyph (hb_buffer_t *buffer)
/**
- * hb_buffer_reset:
- * @buffer: An #hb_buffer_t
- *
- * Resets the buffer to its initial status, as if it was just newly created
- * with hb_buffer_create().
- *
- * Since: 0.9.2
- **/
-void
-hb_buffer_reset (hb_buffer_t *buffer)
-{
- if (unlikely (hb_object_is_immutable (buffer)))
- return;
-
- buffer->reset ();
-}
-
-/**
* hb_buffer_clear_contents:
* @buffer: An #hb_buffer_t
*
@@ -1716,7 +1789,7 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
**/
HB_EXTERN void
hb_buffer_append (hb_buffer_t *buffer,
- hb_buffer_t *source,
+ const hb_buffer_t *source,
unsigned int start,
unsigned int end)
{
@@ -1749,6 +1822,8 @@ hb_buffer_append (hb_buffer_t *buffer,
if (!buffer->have_positions && source->have_positions)
buffer->clear_positions ();
+ hb_segment_properties_overlay (&buffer->props, &source->props);
+
memcpy (buffer->info + orig_len, source->info + start, (end - start) * sizeof (buffer->info[0]));
if (buffer->have_positions)
memcpy (buffer->pos + orig_len, source->pos + start, (end - start) * sizeof (buffer->pos[0]));
diff --git a/thirdparty/harfbuzz/src/hb-buffer.h b/thirdparty/harfbuzz/src/hb-buffer.h
index a183cb9d4a..ece7d2d8cf 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.h
+++ b/thirdparty/harfbuzz/src/hb-buffer.h
@@ -76,18 +76,72 @@ typedef struct hb_glyph_info_t {
* @HB_GLYPH_FLAG_UNSAFE_TO_BREAK: Indicates that if input text is broken at the
* beginning of the cluster this glyph is part of,
* then both sides need to be re-shaped, as the
- * result might be different. On the flip side,
- * it means that when this flag is not present,
- * then it's safe to break the glyph-run at the
- * beginning of this cluster, and the two sides
- * represent the exact same result one would get
- * if breaking input text at the beginning of
- * this cluster and shaping the two sides
- * separately. This can be used to optimize
- * paragraph layout, by avoiding re-shaping
- * of each line after line-breaking, or limiting
- * the reshaping to a small piece around the
- * breaking point only.
+ * result might be different.
+ * On the flip side, it means that when this
+ * flag is not present, then it is safe to break
+ * the glyph-run at the beginning of this
+ * cluster, and the two sides will represent the
+ * exact same result one would get if breaking
+ * input text at the beginning of this cluster
+ * and shaping the two sides separately.
+ * This can be used to optimize paragraph
+ * layout, by avoiding re-shaping of each line
+ * after line-breaking.
+ * @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT: Indicates that if input text is changed on one
+ * side of the beginning of the cluster this glyph
+ * is part of, then the shaping results for the
+ * other side might change.
+ * Note that the absence of this flag will NOT by
+ * itself mean that it IS safe to concat text.
+ * Only two pieces of text both of which clear of
+ * this flag can be concatenated safely.
+ * This can be used to optimize paragraph
+ * layout, by avoiding re-shaping of each line
+ * after line-breaking, by limiting the
+ * reshaping to a small piece around the
+ * breaking positin only, even if the breaking
+ * position carries the
+ * #HB_GLYPH_FLAG_UNSAFE_TO_BREAK or when
+ * hyphenation or other text transformation
+ * happens at line-break position, in the following
+ * way:
+ * 1. Iterate back from the line-break position
+ * until the first cluster start position that is
+ * NOT unsafe-to-concat, 2. shape the segment from
+ * there till the end of line, 3. check whether the
+ * resulting glyph-run also is clear of the
+ * unsafe-to-concat at its start-of-text position;
+ * if it is, just splice it into place and the line
+ * is shaped; If not, move on to a position further
+ * back that is clear of unsafe-to-concat and retry
+ * from there, and repeat.
+ * At the start of next line a similar algorithm can
+ * be implemented. That is: 1. Iterate forward from
+ * the line-break position untill the first cluster
+ * start position that is NOT unsafe-to-concat, 2.
+ * shape the segment from beginning of the line to
+ * that position, 3. check whether the resulting
+ * glyph-run also is clear of the unsafe-to-concat
+ * at its end-of-text position; if it is, just splice
+ * it into place and the beginning is shaped; If not,
+ * move on to a position further forward that is clear
+ * of unsafe-to-concat and retry up to there, and repeat.
+ * A slight complication will arise in the
+ * implementation of the algorithm above,
+ * because while our buffer API has a way to
+ * return flags for position corresponding to
+ * start-of-text, there is currently no position
+ * corresponding to end-of-text. This limitation
+ * can be alleviated by shaping more text than needed
+ * and looking for unsafe-to-concat flag within text
+ * clusters.
+ * The #HB_GLYPH_FLAG_UNSAFE_TO_BREAK flag will
+ * always imply this flag.
+ * To use this flag, you must enable the buffer flag
+ * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT during
+ * shaping, otherwise the buffer flag will not be
+ * reliably produced.
+ * Since: 4.0.0
* @HB_GLYPH_FLAG_DEFINED: All the currently defined flags.
*
* Flags for #hb_glyph_info_t.
@@ -96,8 +150,9 @@ typedef struct hb_glyph_info_t {
*/
typedef enum { /*< flags >*/
HB_GLYPH_FLAG_UNSAFE_TO_BREAK = 0x00000001,
+ HB_GLYPH_FLAG_UNSAFE_TO_CONCAT = 0x00000002,
- HB_GLYPH_FLAG_DEFINED = 0x00000001 /* OR of all defined flags */
+ HB_GLYPH_FLAG_DEFINED = 0x00000003 /* OR of all defined flags */
} hb_glyph_flags_t;
HB_EXTERN hb_glyph_flags_t
@@ -170,6 +225,9 @@ hb_segment_properties_equal (const hb_segment_properties_t *a,
HB_EXTERN unsigned int
hb_segment_properties_hash (const hb_segment_properties_t *p);
+HB_EXTERN void
+hb_segment_properties_overlay (hb_segment_properties_t *p,
+ const hb_segment_properties_t *src);
/**
@@ -185,6 +243,13 @@ HB_EXTERN hb_buffer_t *
hb_buffer_create (void);
HB_EXTERN hb_buffer_t *
+hb_buffer_create_similar (const hb_buffer_t *src);
+
+HB_EXTERN void
+hb_buffer_reset (hb_buffer_t *buffer);
+
+
+HB_EXTERN hb_buffer_t *
hb_buffer_get_empty (void);
HB_EXTERN hb_buffer_t *
@@ -295,7 +360,19 @@ hb_buffer_guess_segment_properties (hb_buffer_t *buffer);
* @HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE:
* flag indicating that a dotted circle should
* not be inserted in the rendering of incorrect
- * character sequences (such at <0905 093E>). Since: 2.4
+ * character sequences (such at <0905 093E>). Since: 2.4.0
+ * @HB_BUFFER_FLAG_VERIFY:
+ * flag indicating that the hb_shape() call and its variants
+ * should perform various verification processes on the results
+ * of the shaping operation on the buffer. If the verification
+ * fails, then either a buffer message is sent, if a message
+ * handler is installed on the buffer, or a message is written
+ * to standard error. In either case, the shaping result might
+ * be modified to show the failed output. Since: 3.4.0
+ * @HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT:
+ * flag indicating that the @HB_GLYPH_FLAG_UNSAFE_TO_CONCAT
+ * glyph-flag should be produced by the shaper. By default
+ * it will not be produced since it incurs a cost. Since: 4.0.0
*
* Flags for #hb_buffer_t.
*
@@ -307,7 +384,9 @@ typedef enum { /*< flags >*/
HB_BUFFER_FLAG_EOT = 0x00000002u, /* End-of-text */
HB_BUFFER_FLAG_PRESERVE_DEFAULT_IGNORABLES = 0x00000004u,
HB_BUFFER_FLAG_REMOVE_DEFAULT_IGNORABLES = 0x00000008u,
- HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE = 0x00000010u
+ HB_BUFFER_FLAG_DO_NOT_INSERT_DOTTED_CIRCLE = 0x00000010u,
+ HB_BUFFER_FLAG_VERIFY = 0x00000020u,
+ HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT = 0x00000040u
} hb_buffer_flags_t;
HB_EXTERN void
@@ -391,8 +470,9 @@ HB_EXTERN hb_codepoint_t
hb_buffer_get_not_found_glyph (hb_buffer_t *buffer);
-HB_EXTERN void
-hb_buffer_reset (hb_buffer_t *buffer);
+/*
+ * Content API.
+ */
HB_EXTERN void
hb_buffer_clear_contents (hb_buffer_t *buffer);
@@ -460,7 +540,7 @@ hb_buffer_add_codepoints (hb_buffer_t *buffer,
HB_EXTERN void
hb_buffer_append (hb_buffer_t *buffer,
- hb_buffer_t *source,
+ const hb_buffer_t *source,
unsigned int start,
unsigned int end);
@@ -557,24 +637,24 @@ hb_buffer_serialize_glyphs (hb_buffer_t *buffer,
HB_EXTERN unsigned int
hb_buffer_serialize_unicode (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_buffer_serialize_format_t format,
- hb_buffer_serialize_flags_t flags);
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed,
+ hb_buffer_serialize_format_t format,
+ hb_buffer_serialize_flags_t flags);
HB_EXTERN unsigned int
hb_buffer_serialize (hb_buffer_t *buffer,
- unsigned int start,
- unsigned int end,
- char *buf,
- unsigned int buf_size,
- unsigned int *buf_consumed,
- hb_font_t *font,
- hb_buffer_serialize_format_t format,
- hb_buffer_serialize_flags_t flags);
+ unsigned int start,
+ unsigned int end,
+ char *buf,
+ unsigned int buf_size,
+ unsigned int *buf_consumed,
+ hb_font_t *font,
+ hb_buffer_serialize_format_t format,
+ hb_buffer_serialize_flags_t flags);
HB_EXTERN hb_bool_t
hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
@@ -586,10 +666,10 @@ hb_buffer_deserialize_glyphs (hb_buffer_t *buffer,
HB_EXTERN hb_bool_t
hb_buffer_deserialize_unicode (hb_buffer_t *buffer,
- const char *buf,
- int buf_len,
- const char **end_ptr,
- hb_buffer_serialize_format_t format);
+ const char *buf,
+ int buf_len,
+ const char **end_ptr,
+ hb_buffer_serialize_format_t format);
diff --git a/thirdparty/harfbuzz/src/hb-buffer.hh b/thirdparty/harfbuzz/src/hb-buffer.hh
index 0f8140f1b3..bc6992905e 100644
--- a/thirdparty/harfbuzz/src/hb-buffer.hh
+++ b/thirdparty/harfbuzz/src/hb-buffer.hh
@@ -67,8 +67,8 @@ enum hb_buffer_scratch_flags_t {
HB_BUFFER_SCRATCH_FLAG_HAS_DEFAULT_IGNORABLES = 0x00000002u,
HB_BUFFER_SCRATCH_FLAG_HAS_SPACE_FALLBACK = 0x00000004u,
HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT = 0x00000008u,
- HB_BUFFER_SCRATCH_FLAG_HAS_UNSAFE_TO_BREAK = 0x00000010u,
- HB_BUFFER_SCRATCH_FLAG_HAS_CGJ = 0x00000020u,
+ HB_BUFFER_SCRATCH_FLAG_HAS_CGJ = 0x00000010u,
+ HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS = 0x00000020u,
/* Reserved for complex shapers' internal use. */
HB_BUFFER_SCRATCH_FLAG_COMPLEX0 = 0x01000000u,
@@ -87,18 +87,21 @@ struct hb_buffer_t
{
hb_object_header_t header;
- /* Information about how the text in the buffer should be treated */
+ /*
+ * Information about how the text in the buffer should be treated.
+ */
+
hb_unicode_funcs_t *unicode; /* Unicode functions */
hb_buffer_flags_t flags; /* BOT / EOT / etc. */
hb_buffer_cluster_level_t cluster_level;
hb_codepoint_t replacement; /* U+FFFD or something else. */
hb_codepoint_t invisible; /* 0 or something else. */
hb_codepoint_t not_found; /* 0 or something else. */
- hb_buffer_scratch_flags_t scratch_flags; /* Have space-fallback, etc. */
- unsigned int max_len; /* Maximum allowed len. */
- int max_ops; /* Maximum allowed operations. */
- /* Buffer contents */
+ /*
+ * Buffer contents
+ */
+
hb_buffer_content_type_t content_type;
hb_segment_properties_t props; /* Script, language, direction */
@@ -115,8 +118,6 @@ struct hb_buffer_t
hb_glyph_info_t *out_info;
hb_glyph_position_t *pos;
- unsigned int serial;
-
/* Text before / after the main buffer contents.
* Always in Unicode, and ordered outward.
* Index 0 is for "pre-context", 1 for "post-context". */
@@ -124,7 +125,25 @@ struct hb_buffer_t
hb_codepoint_t context[2][CONTEXT_LENGTH];
unsigned int context_len[2];
- /* Debugging API */
+
+ /*
+ * Managed by enter / leave
+ */
+
+#ifndef HB_NDEBUG
+ uint8_t allocated_var_bits;
+#endif
+ uint8_t serial;
+ hb_buffer_scratch_flags_t scratch_flags; /* Have space-fallback, etc. */
+ unsigned int max_len; /* Maximum allowed len. */
+ int max_ops; /* Maximum allowed operations. */
+ /* The bits here reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
+
+
+ /*
+ * Messaging callback
+ */
+
#ifndef HB_NO_BUFFER_MESSAGE
hb_buffer_message_func_t message_func;
void *message_data;
@@ -134,11 +153,6 @@ struct hb_buffer_t
static constexpr unsigned message_depth = 0u;
#endif
- /* Internal debugging. */
- /* The bits here reflect current allocations of the bytes in glyph_info_t's var1 and var2. */
-#ifndef HB_NDEBUG
- uint8_t allocated_var_bits;
-#endif
/* Methods */
@@ -190,12 +204,31 @@ struct hb_buffer_t
hb_glyph_info_t &prev () { return out_info[out_len ? out_len - 1 : 0]; }
hb_glyph_info_t prev () const { return out_info[out_len ? out_len - 1 : 0]; }
+ HB_INTERNAL void similar (const hb_buffer_t &src);
HB_INTERNAL void reset ();
HB_INTERNAL void clear ();
+ /* Called around shape() */
+ HB_INTERNAL void enter ();
+ HB_INTERNAL void leave ();
+
+#ifndef HB_NO_BUFFER_VERIFY
+ HB_INTERNAL
+#endif
+ bool verify (hb_buffer_t *text_buffer,
+ hb_font_t *font,
+ const hb_feature_t *features,
+ unsigned int num_features,
+ const char * const *shapers)
+#ifndef HB_NO_BUFFER_VERIFY
+ ;
+#else
+ { return true; }
+#endif
+
unsigned int backtrack_len () const { return have_output ? out_len : idx; }
unsigned int lookahead_len () const { return len - idx; }
- unsigned int next_serial () { return serial++; }
+ uint8_t next_serial () { return ++serial ? serial : ++serial; }
HB_INTERNAL void add (hb_codepoint_t codepoint,
unsigned int cluster);
@@ -252,7 +285,7 @@ struct hb_buffer_t
HB_INTERNAL void guess_segment_properties ();
- HB_INTERNAL void swap_buffers ();
+ HB_INTERNAL void sync ();
HB_INTERNAL void clear_output ();
HB_INTERNAL void clear_positions ();
@@ -366,15 +399,87 @@ struct hb_buffer_t
/* Merge clusters for deleting current glyph, and skip it. */
HB_INTERNAL void delete_glyph ();
- void unsafe_to_break (unsigned int start,
- unsigned int end)
+
+ /* Adds glyph flags in mask to infos with clusters between start and end.
+ * The start index will be from out-buffer if from_out_buffer is true.
+ * If interior is true, then the cluster having the minimum value is skipped. */
+ void _set_glyph_flags (hb_mask_t mask,
+ unsigned start = 0,
+ unsigned end = (unsigned) -1,
+ bool interior = false,
+ bool from_out_buffer = false)
{
- if (end - start < 2)
+ end = hb_min (end, len);
+
+ if (interior && !from_out_buffer && end - start < 2)
return;
- unsafe_to_break_impl (start, end);
+
+ scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
+
+ if (!from_out_buffer || !have_output)
+ {
+ if (!interior)
+ {
+ for (unsigned i = start; i < end; i++)
+ info[i].mask |= mask;
+ }
+ else
+ {
+ unsigned cluster = _infos_find_min_cluster (info, start, end);
+ _infos_set_glyph_flags (info, start, end, cluster, mask);
+ }
+ }
+ else
+ {
+ assert (start <= out_len);
+ assert (idx <= end);
+
+ if (!interior)
+ {
+ for (unsigned i = start; i < out_len; i++)
+ out_info[i].mask |= mask;
+ for (unsigned i = idx; i < end; i++)
+ info[i].mask |= mask;
+ }
+ else
+ {
+ unsigned cluster = _infos_find_min_cluster (info, idx, end);
+ cluster = _infos_find_min_cluster (out_info, start, out_len, cluster);
+
+ _infos_set_glyph_flags (out_info, start, out_len, cluster, mask);
+ _infos_set_glyph_flags (info, idx, end, cluster, mask);
+ }
+ }
+ }
+
+ void unsafe_to_break (unsigned int start = 0, unsigned int end = -1)
+ {
+ _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
+ start, end,
+ true);
+ }
+ void unsafe_to_concat (unsigned int start = 0, unsigned int end = -1)
+ {
+ if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0))
+ return;
+ _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
+ start, end,
+ true);
+ }
+ void unsafe_to_break_from_outbuffer (unsigned int start = 0, unsigned int end = -1)
+ {
+ _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK | HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
+ start, end,
+ true, true);
+ }
+ void unsafe_to_concat_from_outbuffer (unsigned int start = 0, unsigned int end = -1)
+ {
+ if (likely ((flags & HB_BUFFER_FLAG_PRODUCE_UNSAFE_TO_CONCAT) == 0))
+ return;
+ _set_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_CONCAT,
+ start, end,
+ false, true);
}
- HB_INTERNAL void unsafe_to_break_impl (unsigned int start, unsigned int end);
- HB_INTERNAL void unsafe_to_break_from_outbuffer (unsigned int start, unsigned int end);
/* Internal methods */
@@ -465,36 +570,31 @@ struct hb_buffer_t
set_cluster (hb_glyph_info_t &inf, unsigned int cluster, unsigned int mask = 0)
{
if (inf.cluster != cluster)
- {
- if (mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK)
- inf.mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
- else
- inf.mask &= ~HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
- }
+ inf.mask = (inf.mask & ~HB_GLYPH_FLAG_DEFINED) | (mask & HB_GLYPH_FLAG_DEFINED);
inf.cluster = cluster;
}
-
+ void
+ _infos_set_glyph_flags (hb_glyph_info_t *infos,
+ unsigned int start, unsigned int end,
+ unsigned int cluster,
+ hb_mask_t mask)
+ {
+ for (unsigned int i = start; i < end; i++)
+ if (cluster != infos[i].cluster)
+ {
+ scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS;
+ infos[i].mask |= mask;
+ }
+ }
static unsigned
_infos_find_min_cluster (const hb_glyph_info_t *infos,
unsigned start, unsigned end,
- unsigned cluster)
+ unsigned cluster = UINT_MAX)
{
for (unsigned int i = start; i < end; i++)
cluster = hb_min (cluster, infos[i].cluster);
return cluster;
}
- void
- _unsafe_to_break_set_mask (hb_glyph_info_t *infos,
- unsigned int start, unsigned int end,
- unsigned int cluster)
- {
- for (unsigned int i = start; i < end; i++)
- if (cluster != infos[i].cluster)
- {
- scratch_flags |= HB_BUFFER_SCRATCH_FLAG_HAS_UNSAFE_TO_BREAK;
- infos[i].mask |= HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
- }
- }
void clear_glyph_flags (hb_mask_t mask = 0)
{
diff --git a/thirdparty/harfbuzz/src/hb-cff-interp-common.hh b/thirdparty/harfbuzz/src/hb-cff-interp-common.hh
index c251e2d0ed..641de0eff2 100644
--- a/thirdparty/harfbuzz/src/hb-cff-interp-common.hh
+++ b/thirdparty/harfbuzz/src/hb-cff-interp-common.hh
@@ -217,9 +217,6 @@ inline unsigned int OpCode_Size (op_code_t op) { return Is_OpCode_ESC (op) ? 2:
struct number_t
{
- void init () { set_real (0.0); }
- void fini () {}
-
void set_int (int v) { value = v; }
int to_int () const { return value; }
@@ -245,7 +242,7 @@ struct number_t
}
protected:
- double value;
+ double value = 0.;
};
/* byte string */
@@ -380,10 +377,8 @@ struct cff_stack_t
count = 0;
elements.init ();
elements.resize (kSizeLimit);
- for (unsigned int i = 0; i < elements.length; i++)
- elements[i].init ();
}
- void fini () { elements.fini_deep (); }
+ void fini () { elements.fini (); }
ELEM& operator [] (unsigned int i)
{
@@ -523,9 +518,6 @@ struct arg_stack_t : cff_stack_t<ARG, 513>
/* an operator prefixed by its operands in a byte string */
struct op_str_t
{
- void init () {}
- void fini () {}
-
op_code_t op;
byte_str_t str;
};
@@ -553,7 +545,7 @@ struct parsed_values_t
opStart = 0;
values.init ();
}
- void fini () { values.fini_deep (); }
+ void fini () { values.fini (); }
void add_op (op_code_t op, const byte_str_ref_t& str_ref = byte_str_ref_t ())
{
diff --git a/thirdparty/harfbuzz/src/hb-cff-interp-cs-common.hh b/thirdparty/harfbuzz/src/hb-cff-interp-cs-common.hh
index 52d778ffe2..ef299369b5 100644
--- a/thirdparty/harfbuzz/src/hb-cff-interp-cs-common.hh
+++ b/thirdparty/harfbuzz/src/hb-cff-interp-cs-common.hh
@@ -94,12 +94,6 @@ struct biased_subrs_t
struct point_t
{
- void init ()
- {
- x.init ();
- y.init ();
- }
-
void set_int (int _x, int _y)
{
x.set_int (_x);
@@ -128,7 +122,7 @@ struct cs_interp_env_t : interp_env_t<ARG>
hstem_count = 0;
vstem_count = 0;
hintmask_size = 0;
- pt.init ();
+ pt.set_int (0, 0);
callStack.init ();
globalSubrs.init (globalSubrs_);
localSubrs.init (localSubrs_);
@@ -841,7 +835,6 @@ struct path_procs_t
if (likely (env.argStack.get_count () == 11))
{
point_t d;
- d.init ();
for (unsigned int i = 0; i < 10; i += 2)
d.move (env.eval_arg (i), env.eval_arg (i+1));
diff --git a/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh b/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh
index d961566447..766183760e 100644
--- a/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh
+++ b/thirdparty/harfbuzz/src/hb-cff2-interp-cs.hh
@@ -35,18 +35,6 @@ using namespace OT;
struct blend_arg_t : number_t
{
- void init ()
- {
- number_t::init ();
- deltas.init ();
- }
-
- void fini ()
- {
- number_t::fini ();
- deltas.fini_deep ();
- }
-
void set_int (int v) { reset_blends (); number_t::set_int (v); }
void set_fixed (int32_t v) { reset_blends (); number_t::set_fixed (v); }
void set_real (double v) { reset_blends (); number_t::set_real (v); }
@@ -202,7 +190,7 @@ struct cff2_cs_opset_t : cs_opset_t<blend_arg_t, OPSET, cff2_cs_interp_env_t, PA
switch (op) {
case OpCode_callsubr:
case OpCode_callgsubr:
- /* a subroutine number shoudln't be a blended value */
+ /* a subroutine number shouldn't be a blended value */
if (unlikely (env.argStack.peek ().blending ()))
{
env.set_error ();
diff --git a/thirdparty/harfbuzz/src/hb-common.cc b/thirdparty/harfbuzz/src/hb-common.cc
index 26c8ad0f49..41229b9183 100644
--- a/thirdparty/harfbuzz/src/hb-common.cc
+++ b/thirdparty/harfbuzz/src/hb-common.cc
@@ -29,10 +29,31 @@
#include "hb.hh"
#include "hb-machinery.hh"
+#if !defined(HB_NO_SETLOCALE) && (!defined(HAVE_NEWLOCALE) || !defined(HAVE_USELOCALE))
+#define HB_NO_SETLOCALE 1
+#endif
+
+#ifndef HB_NO_SETLOCALE
+
#include <locale.h>
+#ifdef HAVE_XLOCALE_H
+#include <xlocale.h> // Needed on BSD/OS X for uselocale
+#endif
+
+#ifdef WIN32
+#define hb_locale_t _locale_t
+#else
+#define hb_locale_t locale_t
+#endif
+#define hb_setlocale setlocale
+#define hb_uselocale uselocale
+
+#else
+
+#define hb_locale_t void *
+#define hb_setlocale(Category, Locale) "C"
+#define hb_uselocale(Locale) ((hb_locale_t) 0)
-#ifdef HB_NO_SETLOCALE
-#define setlocale(Category, Locale) "C"
#endif
/**
@@ -122,7 +143,7 @@ hb_tag_from_string (const char *str, int len)
* @tag: #hb_tag_t to convert
* @buf: (out caller-allocates) (array fixed-size=4) (element-type uint8_t): Converted string
*
- * Converts an #hb_tag_t to a string and returns it in @buf.
+ * Converts an #hb_tag_t to a string and returns it in @buf.
* Strings will be four characters long.
*
* Since: 0.9.5
@@ -151,13 +172,13 @@ const char direction_strings[][4] = {
* @str: (array length=len) (element-type uint8_t): String to convert
* @len: Length of @str, or -1 if it is %NULL-terminated
*
- * Converts a string to an #hb_direction_t.
+ * Converts a string to an #hb_direction_t.
*
* Matching is loose and applies only to the first letter. For
* examples, "LTR" and "left-to-right" will both return #HB_DIRECTION_LTR.
*
* Unmatched strings will return #HB_DIRECTION_INVALID.
- *
+ *
* Return value: The #hb_direction_t matching @str
*
* Since: 0.9.2
@@ -413,7 +434,7 @@ hb_language_get_default ()
hb_language_t language = default_language;
if (unlikely (language == HB_LANGUAGE_INVALID))
{
- language = hb_language_from_string (setlocale (LC_CTYPE, nullptr), -1);
+ language = hb_language_from_string (hb_setlocale (LC_CTYPE, nullptr), -1);
(void) default_language.cmpexch (HB_LANGUAGE_INVALID, language);
}
@@ -1039,6 +1060,47 @@ hb_variation_from_string (const char *str, int len,
return false;
}
+#ifndef HB_NO_SETLOCALE
+
+static inline void free_static_C_locale ();
+
+static struct hb_C_locale_lazy_loader_t : hb_lazy_loader_t<hb_remove_pointer<hb_locale_t>,
+ hb_C_locale_lazy_loader_t>
+{
+ static hb_locale_t create ()
+ {
+ hb_locale_t l = newlocale (LC_ALL_MASK, "C", NULL);
+ if (!l)
+ return l;
+
+ hb_atexit (free_static_C_locale);
+
+ return l;
+ }
+ static void destroy (hb_locale_t l)
+ {
+ freelocale (l);
+ }
+ static hb_locale_t get_null ()
+ {
+ return (hb_locale_t) 0;
+ }
+} static_C_locale;
+
+static inline
+void free_static_C_locale ()
+{
+ static_C_locale.free_instance ();
+}
+
+static hb_locale_t
+get_C_locale ()
+{
+ return static_C_locale.get_unconst ();
+}
+
+#endif
+
/**
* hb_variation_to_string:
* @variation: an #hb_variation_t to convert
@@ -1064,7 +1126,11 @@ hb_variation_to_string (hb_variation_t *variation,
while (len && s[len - 1] == ' ')
len--;
s[len++] = '=';
+
+ hb_locale_t oldlocale HB_UNUSED;
+ oldlocale = hb_uselocale (get_C_locale ());
len += hb_max (0, snprintf (s + len, ARRAY_LENGTH (s) - len, "%g", (double) variation->value));
+ (void) hb_uselocale (oldlocale);
assert (len < ARRAY_LENGTH (s));
len = hb_min (len, size - 1);
diff --git a/thirdparty/harfbuzz/src/hb-common.h b/thirdparty/harfbuzz/src/hb-common.h
index 0384117a4d..7b897a6c51 100644
--- a/thirdparty/harfbuzz/src/hb-common.h
+++ b/thirdparty/harfbuzz/src/hb-common.h
@@ -130,6 +130,16 @@ typedef union _hb_var_int_t {
int8_t i8[4];
} hb_var_int_t;
+typedef union _hb_var_num_t {
+ float f;
+ uint32_t u32;
+ int32_t i32;
+ uint16_t u16[2];
+ int16_t i16[2];
+ uint8_t u8[4];
+ int8_t i8[4];
+} hb_var_num_t;
+
/* hb_tag_t */
@@ -481,6 +491,7 @@ hb_language_get_default (void);
* @HB_SCRIPT_TANGSA: `Tnsa`, Since: 3.0.0
* @HB_SCRIPT_TOTO: `Toto`, Since: 3.0.0
* @HB_SCRIPT_VITHKUQI: `Vith`, Since: 3.0.0
+ * @HB_SCRIPT_MATH: `Zmth`, Since: 3.4.0
* @HB_SCRIPT_INVALID: No script set
*
* Data type for scripts. Each #hb_script_t's value is an #hb_tag_t corresponding
@@ -697,6 +708,11 @@ typedef enum
HB_SCRIPT_TOTO = HB_TAG ('T','o','t','o'), /*14.0*/
HB_SCRIPT_VITHKUQI = HB_TAG ('V','i','t','h'), /*14.0*/
+ /*
+ * Since 3.4.0
+ */
+ HB_SCRIPT_MATH = HB_TAG ('Z','m','t','h'),
+
/* No script set. */
HB_SCRIPT_INVALID = HB_TAG_NONE,
diff --git a/thirdparty/harfbuzz/src/hb-config.hh b/thirdparty/harfbuzz/src/hb-config.hh
index 7d00d9088a..4b46dea938 100644
--- a/thirdparty/harfbuzz/src/hb-config.hh
+++ b/thirdparty/harfbuzz/src/hb-config.hh
@@ -55,6 +55,7 @@
#define HB_NO_ATEXIT
#define HB_NO_BUFFER_MESSAGE
#define HB_NO_BUFFER_SERIALIZE
+#define HB_NO_BUFFER_VERIFY
#define HB_NO_BITMAP
#define HB_NO_CFF
#define HB_NO_COLOR
@@ -84,6 +85,7 @@
#ifdef HB_MINI
#define HB_NO_AAT
#define HB_NO_LEGACY
+#define HB_NO_BORING_EXPANSION
#endif
#if defined(HAVE_CONFIG_OVERRIDE_H) || defined(HB_CONFIG_OVERRIDE_H)
diff --git a/thirdparty/harfbuzz/src/hb-coretext.cc b/thirdparty/harfbuzz/src/hb-coretext.cc
index a512f3b8b7..5f383064c4 100644
--- a/thirdparty/harfbuzz/src/hb-coretext.cc
+++ b/thirdparty/harfbuzz/src/hb-coretext.cc
@@ -481,8 +481,8 @@ struct active_feature_t {
a->rec.setting < b->rec.setting ? -1 : a->rec.setting > b->rec.setting ? 1 :
0;
}
- bool operator== (const active_feature_t *f) {
- return cmp (this, f) == 0;
+ bool operator== (const active_feature_t& f) const {
+ return cmp (this, &f) == 0;
}
};
@@ -677,7 +677,7 @@ _hb_coretext_shape (hb_shape_plan_t *shape_plan,
{
active_features.push (event->feature);
} else {
- active_feature_t *feature = active_features.find (&event->feature);
+ active_feature_t *feature = active_features.lsearch (event->feature);
if (feature)
active_features.remove (feature - active_features.arrayZ);
}
@@ -1213,7 +1213,8 @@ resize_and_retry:
}
}
- buffer->clear_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK);
+ buffer->clear_glyph_flags ();
+ buffer->unsafe_to_break ();
#undef FAIL
diff --git a/thirdparty/harfbuzz/src/hb-directwrite.cc b/thirdparty/harfbuzz/src/hb-directwrite.cc
index dea87b8cd0..f177ff31c0 100644
--- a/thirdparty/harfbuzz/src/hb-directwrite.cc
+++ b/thirdparty/harfbuzz/src/hb-directwrite.cc
@@ -762,7 +762,8 @@ retry_getglyphs:
if (isRightToLeft) hb_buffer_reverse (buffer);
- buffer->clear_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK);
+ buffer->clear_glyph_flags ();
+ buffer->unsafe_to_break ();
delete [] clusterMap;
delete [] glyphIndices;
diff --git a/thirdparty/harfbuzz/src/hb-draw.cc b/thirdparty/harfbuzz/src/hb-draw.cc
index c0af6ce013..b31019b07e 100644
--- a/thirdparty/harfbuzz/src/hb-draw.cc
+++ b/thirdparty/harfbuzz/src/hb-draw.cc
@@ -25,237 +25,313 @@
#include "hb.hh"
#ifndef HB_NO_DRAW
-#ifdef HB_EXPERIMENTAL_API
#include "hb-draw.hh"
-#include "hb-ot.h"
-#include "hb-ot-glyf-table.hh"
-#include "hb-ot-cff1-table.hh"
-#include "hb-ot-cff2-table.hh"
/**
- * hb_draw_funcs_set_move_to_func:
- * @funcs: draw functions object
- * @move_to: move-to callback
+ * SECTION:hb-draw
+ * @title: hb-draw
+ * @short_description: Glyph drawing
+ * @include: hb.h
*
- * Sets move-to callback to the draw functions object.
- *
- * Since: EXPERIMENTAL
+ * Functions for drawing (extracting) glyph shapes.
**/
-void
-hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *funcs,
- hb_draw_move_to_func_t move_to)
+
+static void
+hb_draw_move_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ float to_x HB_UNUSED, float to_y HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+static void
+hb_draw_line_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ float to_x HB_UNUSED, float to_y HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+static void
+hb_draw_quadratic_to_nil (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->move_to = move_to;
+ dfuncs->emit_cubic_to (draw_data, *st,
+ (st->current_x + 2.f * control_x) / 3.f,
+ (st->current_y + 2.f * control_y) / 3.f,
+ (to_x + 2.f * control_x) / 3.f,
+ (to_y + 2.f * control_y) / 3.f,
+ to_x, to_y);
+}
+
+static void
+hb_draw_cubic_to_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ float control1_x HB_UNUSED, float control1_y HB_UNUSED,
+ float control2_x HB_UNUSED, float control2_y HB_UNUSED,
+ float to_x HB_UNUSED, float to_y HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+static void
+hb_draw_close_path_nil (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data HB_UNUSED,
+ hb_draw_state_t *st HB_UNUSED,
+ void *user_data HB_UNUSED) {}
+
+
+#define HB_DRAW_FUNC_IMPLEMENT(name) \
+ \
+void \
+hb_draw_funcs_set_##name##_func (hb_draw_funcs_t *dfuncs, \
+ hb_draw_##name##_func_t func, \
+ void *user_data, \
+ hb_destroy_func_t destroy) \
+{ \
+ if (hb_object_is_immutable (dfuncs)) \
+ return; \
+ \
+ if (dfuncs->destroy.name) \
+ dfuncs->destroy.name (dfuncs->user_data.name); \
+ \
+ if (func) { \
+ dfuncs->func.name = func; \
+ dfuncs->user_data.name = user_data; \
+ dfuncs->destroy.name = destroy; \
+ } else { \
+ dfuncs->func.name = hb_draw_##name##_nil; \
+ dfuncs->user_data.name = nullptr; \
+ dfuncs->destroy.name = nullptr; \
+ } \
}
+HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+
/**
- * hb_draw_funcs_set_line_to_func:
- * @funcs: draw functions object
- * @line_to: line-to callback
+ * hb_draw_funcs_create: (Xconstructor)
+ *
+ * Creates a new draw callbacks object.
*
- * Sets line-to callback to the draw functions object.
+ * Return value: (transfer full):
+ * A newly allocated #hb_draw_funcs_t with a reference count of 1. The initial
+ * reference count should be released with hb_draw_funcs_destroy when you are
+ * done using the #hb_draw_funcs_t. This function never returns %NULL. If
+ * memory cannot be allocated, a special singleton #hb_draw_funcs_t object will
+ * be returned.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-void
-hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *funcs,
- hb_draw_line_to_func_t line_to)
+hb_draw_funcs_t *
+hb_draw_funcs_create ()
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->line_to = line_to;
+ hb_draw_funcs_t *dfuncs;
+ if (unlikely (!(dfuncs = hb_object_create<hb_draw_funcs_t> ())))
+ return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
+
+ dfuncs->func = Null (hb_draw_funcs_t).func;
+
+ return dfuncs;
}
+DEFINE_NULL_INSTANCE (hb_draw_funcs_t) =
+{
+ HB_OBJECT_HEADER_STATIC,
+
+ {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_nil,
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ }
+};
+
+
/**
- * hb_draw_funcs_set_quadratic_to_func:
- * @funcs: draw functions object
- * @move_to: quadratic-to callback
+ * hb_draw_funcs_reference: (skip)
+ * @dfuncs: draw functions
+ *
+ * Increases the reference count on @dfuncs by one. This prevents @buffer from
+ * being destroyed until a matching call to hb_draw_funcs_destroy() is made.
*
- * Sets quadratic-to callback to the draw functions object.
+ * Return value: (transfer full):
+ * The referenced #hb_draw_funcs_t.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-void
-hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_quadratic_to_func_t quadratic_to)
+hb_draw_funcs_t *
+hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->quadratic_to = quadratic_to;
- funcs->is_quadratic_to_set = true;
+ return hb_object_reference (dfuncs);
}
/**
- * hb_draw_funcs_set_cubic_to_func:
- * @funcs: draw functions
- * @cubic_to: cubic-to callback
+ * hb_draw_funcs_destroy: (skip)
+ * @dfuncs: draw functions
*
- * Sets cubic-to callback to the draw functions object.
+ * Deallocate the @dfuncs.
+ * Decreases the reference count on @dfuncs by one. If the result is zero, then
+ * @dfuncs and all associated resources are freed. See hb_draw_funcs_reference().
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_cubic_to_func_t cubic_to)
+hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->cubic_to = cubic_to;
+ if (!hb_object_destroy (dfuncs)) return;
+
+#define HB_DRAW_FUNC_IMPLEMENT(name) \
+ if (dfuncs->destroy.name) dfuncs->destroy.name (dfuncs->user_data.name);
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+
+
+ hb_free (dfuncs);
}
/**
- * hb_draw_funcs_set_close_path_func:
- * @funcs: draw functions object
- * @close_path: close-path callback
+ * hb_draw_funcs_make_immutable:
+ * @dfuncs: draw functions
*
- * Sets close-path callback to the draw functions object.
+ * Makes @dfuncs object immutable.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *funcs,
- hb_draw_close_path_func_t close_path)
+hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs)
{
- if (unlikely (hb_object_is_immutable (funcs))) return;
- funcs->close_path = close_path;
-}
-
-static void
-_move_to_nil (hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED, void *user_data HB_UNUSED) {}
-
-static void
-_line_to_nil (hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED, void *user_data HB_UNUSED) {}
-
-static void
-_quadratic_to_nil (hb_position_t control_x HB_UNUSED, hb_position_t control_y HB_UNUSED,
- hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
- void *user_data HB_UNUSED) {}
-
-static void
-_cubic_to_nil (hb_position_t control1_x HB_UNUSED, hb_position_t control1_y HB_UNUSED,
- hb_position_t control2_x HB_UNUSED, hb_position_t control2_y HB_UNUSED,
- hb_position_t to_x HB_UNUSED, hb_position_t to_y HB_UNUSED,
- void *user_data HB_UNUSED) {}
+ if (hb_object_is_immutable (dfuncs))
+ return;
-static void
-_close_path_nil (void *user_data HB_UNUSED) {}
+ hb_object_make_immutable (dfuncs);
+}
/**
- * hb_draw_funcs_create:
+ * hb_draw_funcs_is_immutable:
+ * @dfuncs: draw functions
*
- * Creates a new draw callbacks object.
+ * Checks whether @dfuncs is immutable.
+ *
+ * Return value: %true if @dfuncs is immutable, %false otherwise
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_draw_funcs_t *
-hb_draw_funcs_create ()
+hb_bool_t
+hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs)
{
- hb_draw_funcs_t *funcs;
- if (unlikely (!(funcs = hb_object_create<hb_draw_funcs_t> ())))
- return const_cast<hb_draw_funcs_t *> (&Null (hb_draw_funcs_t));
-
- funcs->move_to = (hb_draw_move_to_func_t) _move_to_nil;
- funcs->line_to = (hb_draw_line_to_func_t) _line_to_nil;
- funcs->quadratic_to = (hb_draw_quadratic_to_func_t) _quadratic_to_nil;
- funcs->is_quadratic_to_set = false;
- funcs->cubic_to = (hb_draw_cubic_to_func_t) _cubic_to_nil;
- funcs->close_path = (hb_draw_close_path_func_t) _close_path_nil;
- return funcs;
+ return hb_object_is_immutable (dfuncs);
}
+
/**
- * hb_draw_funcs_reference:
- * @funcs: draw functions
+ * hb_draw_move_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Add to callbacks object refcount.
+ * Perform a "move-to" draw operation.
*
- * Returns: The same object.
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_draw_funcs_t *
-hb_draw_funcs_reference (hb_draw_funcs_t *funcs)
+void
+hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y)
{
- return hb_object_reference (funcs);
+ dfuncs->move_to (draw_data, *st,
+ to_x, to_y);
}
/**
- * hb_draw_funcs_destroy:
- * @funcs: draw functions
+ * hb_draw_line_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Decreases refcount of callbacks object and deletes the object if it reaches
- * to zero.
+ * Perform a "line-to" draw operation.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_destroy (hb_draw_funcs_t *funcs)
+hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y)
{
- if (!hb_object_destroy (funcs)) return;
-
- hb_free (funcs);
+ dfuncs->line_to (draw_data, *st,
+ to_x, to_y);
}
/**
- * hb_draw_funcs_make_immutable:
- * @funcs: draw functions
+ * hb_draw_quadratic_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @control_x: X component of control point
+ * @control_y: Y component of control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Makes funcs object immutable.
+ * Perform a "quadratic-to" draw operation.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
void
-hb_draw_funcs_make_immutable (hb_draw_funcs_t *funcs)
+hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y)
{
- if (hb_object_is_immutable (funcs))
- return;
-
- hb_object_make_immutable (funcs);
+ dfuncs->quadratic_to (draw_data, *st,
+ control_x, control_y,
+ to_x, to_y);
}
/**
- * hb_draw_funcs_is_immutable:
- * @funcs: draw functions
+ * hb_draw_cubic_to:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
+ * @control1_x: X component of first control point
+ * @control1_y: Y component of first control point
+ * @control2_x: X component of second control point
+ * @control2_y: Y component of second control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
*
- * Checks whether funcs is immutable.
+ * Perform a "cubic-to" draw operation.
*
- * Returns: If is immutable.
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_bool_t
-hb_draw_funcs_is_immutable (hb_draw_funcs_t *funcs)
+void
+hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
{
- return hb_object_is_immutable (funcs);
+ dfuncs->cubic_to (draw_data, *st,
+ control1_x, control1_y,
+ control2_x, control2_y,
+ to_x, to_y);
}
/**
- * hb_font_draw_glyph:
- * @font: a font object
- * @glyph: a glyph id
- * @funcs: draw callbacks object
- * @user_data: parameter you like be passed to the callbacks when are called
+ * hb_draw_close_path:
+ * @dfuncs: draw functions
+ * @draw_data: associated draw data passed by the caller
+ * @st: current draw state
*
- * Draw a glyph.
+ * Perform a "close-path" draw operation.
*
- * Returns: Whether the font had the glyph and the operation completed successfully.
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
-hb_bool_t
-hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
- const hb_draw_funcs_t *funcs,
- void *user_data)
+void
+hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st)
{
- if (unlikely (funcs == &Null (hb_draw_funcs_t) ||
- glyph >= font->face->get_num_glyphs ()))
- return false;
-
- draw_helper_t draw_helper (funcs, user_data);
- if (font->face->table.glyf->get_path (font, glyph, draw_helper)) return true;
-#ifndef HB_NO_CFF
- if (font->face->table.cff1->get_path (font, glyph, draw_helper)) return true;
- if (font->face->table.cff2->get_path (font, glyph, draw_helper)) return true;
-#endif
-
- return false;
+ dfuncs->close_path (draw_data, *st);
}
-#endif
+
#endif
diff --git a/thirdparty/harfbuzz/src/hb-draw.h b/thirdparty/harfbuzz/src/hb-draw.h
index bddc876399..c45a53212a 100644
--- a/thirdparty/harfbuzz/src/hb-draw.h
+++ b/thirdparty/harfbuzz/src/hb-draw.h
@@ -33,65 +33,292 @@
HB_BEGIN_DECLS
-#ifdef HB_EXPERIMENTAL_API
-typedef void (*hb_draw_move_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
-typedef void (*hb_draw_line_to_func_t) (hb_position_t to_x, hb_position_t to_y, void *user_data);
-typedef void (*hb_draw_quadratic_to_func_t) (hb_position_t control_x, hb_position_t control_y,
- hb_position_t to_x, hb_position_t to_y,
- void *user_data);
-typedef void (*hb_draw_cubic_to_func_t) (hb_position_t control1_x, hb_position_t control1_y,
- hb_position_t control2_x, hb_position_t control2_y,
- hb_position_t to_x, hb_position_t to_y,
- void *user_data);
-typedef void (*hb_draw_close_path_func_t) (void *user_data);
+
+/**
+ * hb_draw_state_t
+ * @path_open: Whether there is an open path
+ * @path_start_x: X component of the start of current path
+ * @path_start_y: Y component of the start of current path
+ * @current_x: X component of current point
+ * @current_y: Y component of current point
+ *
+ * Current drawing state.
+ *
+ * Since: 4.0.0
+ **/
+typedef struct hb_draw_state_t {
+ hb_bool_t path_open;
+
+ float path_start_x;
+ float path_start_y;
+
+ float current_x;
+ float current_y;
+
+ /*< private >*/
+ hb_var_num_t reserved1;
+ hb_var_num_t reserved2;
+ hb_var_num_t reserved3;
+ hb_var_num_t reserved4;
+ hb_var_num_t reserved5;
+ hb_var_num_t reserved6;
+ hb_var_num_t reserved7;
+} hb_draw_state_t;
+
+/**
+ * HB_DRAW_STATE_DEFAULT:
+ *
+ * The default #hb_draw_state_t at the start of glyph drawing.
+ */
+#define HB_DRAW_STATE_DEFAULT {0, 0.f, 0.f, 0.f, 0.f, {0.}, {0.}, {0.}}
+
/**
* hb_draw_funcs_t:
*
* Glyph draw callbacks.
*
- * _move_to, _line_to and _cubic_to calls are nessecary to be defined but we
- * translate _quadratic_to calls to _cubic_to if the callback isn't defined.
+ * #hb_draw_move_to_func_t, #hb_draw_line_to_func_t and
+ * #hb_draw_cubic_to_func_t calls are necessary to be defined but we translate
+ * #hb_draw_quadratic_to_func_t calls to #hb_draw_cubic_to_func_t if the
+ * callback isn't defined.
*
- * Since: EXPERIMENTAL
+ * Since: 4.0.0
**/
+
typedef struct hb_draw_funcs_t hb_draw_funcs_t;
+
+/**
+ * hb_draw_move_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "move-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_move_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_line_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "line-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_line_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_quadratic_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @control_x: X component of control point
+ * @control_y: Y component of control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "quadratic-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_quadratic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_cubic_to_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @control1_x: X component of first control point
+ * @control1_y: Y component of first control point
+ * @control2_x: X component of second control point
+ * @control2_y: Y component of second control point
+ * @to_x: X component of target point
+ * @to_y: Y component of target point
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "cubic-to" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_cubic_to_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y,
+ void *user_data);
+
+/**
+ * hb_draw_close_path_func_t:
+ * @dfuncs: draw functions object
+ * @draw_data: The data accompanying the draw functions
+ * @st: current draw state
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_draw_funcs_t to perform a "close-path" draw
+ * operation.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_draw_close_path_func_t) (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ void *user_data);
+
+/**
+ * hb_draw_funcs_set_move_to_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): move-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets move-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *funcs,
- hb_draw_move_to_func_t move_to);
+hb_draw_funcs_set_move_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_move_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_line_to_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): line-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets line-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *funcs,
- hb_draw_line_to_func_t line_to);
+hb_draw_funcs_set_line_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_line_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_quadratic_to_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): quadratic-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets quadratic-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_quadratic_to_func_t quadratic_to);
+hb_draw_funcs_set_quadratic_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_quadratic_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_cubic_to_func:
+ * @dfuncs: draw functions
+ * @func: (closure user_data) (destroy destroy) (scope notified): cubic-to callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets cubic-to callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *funcs,
- hb_draw_cubic_to_func_t cubic_to);
+hb_draw_funcs_set_cubic_to_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_cubic_to_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_draw_funcs_set_close_path_func:
+ * @dfuncs: draw functions object
+ * @func: (closure user_data) (destroy destroy) (scope notified): close-path callback
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets close-path callback to the draw functions object.
+ *
+ * Since: 4.0.0
+ **/
HB_EXTERN void
-hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *funcs,
- hb_draw_close_path_func_t close_path);
+hb_draw_funcs_set_close_path_func (hb_draw_funcs_t *dfuncs,
+ hb_draw_close_path_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+
HB_EXTERN hb_draw_funcs_t *
hb_draw_funcs_create (void);
HB_EXTERN hb_draw_funcs_t *
-hb_draw_funcs_reference (hb_draw_funcs_t *funcs);
+hb_draw_funcs_reference (hb_draw_funcs_t *dfuncs);
HB_EXTERN void
-hb_draw_funcs_destroy (hb_draw_funcs_t *funcs);
+hb_draw_funcs_destroy (hb_draw_funcs_t *dfuncs);
HB_EXTERN void
-hb_draw_funcs_make_immutable (hb_draw_funcs_t *funcs);
+hb_draw_funcs_make_immutable (hb_draw_funcs_t *dfuncs);
HB_EXTERN hb_bool_t
-hb_draw_funcs_is_immutable (hb_draw_funcs_t *funcs);
-#endif
+hb_draw_funcs_is_immutable (hb_draw_funcs_t *dfuncs);
+
+
+HB_EXTERN void
+hb_draw_move_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_line_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_quadratic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_cubic_to (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y);
+
+HB_EXTERN void
+hb_draw_close_path (hb_draw_funcs_t *dfuncs, void *draw_data,
+ hb_draw_state_t *st);
+
HB_END_DECLS
diff --git a/thirdparty/harfbuzz/src/hb-draw.hh b/thirdparty/harfbuzz/src/hb-draw.hh
index 2aa0a5b4db..28bc9218e1 100644
--- a/thirdparty/harfbuzz/src/hb-draw.hh
+++ b/thirdparty/harfbuzz/src/hb-draw.hh
@@ -27,113 +27,205 @@
#include "hb.hh"
-#ifdef HB_EXPERIMENTAL_API
-struct hb_draw_funcs_t
-{
- hb_object_header_t header;
- hb_draw_move_to_func_t move_to;
- hb_draw_line_to_func_t line_to;
- hb_draw_quadratic_to_func_t quadratic_to;
- bool is_quadratic_to_set;
- hb_draw_cubic_to_func_t cubic_to;
- hb_draw_close_path_func_t close_path;
-};
+/*
+ * hb_draw_funcs_t
+ */
+
+#define HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS \
+ HB_DRAW_FUNC_IMPLEMENT (move_to) \
+ HB_DRAW_FUNC_IMPLEMENT (line_to) \
+ HB_DRAW_FUNC_IMPLEMENT (quadratic_to) \
+ HB_DRAW_FUNC_IMPLEMENT (cubic_to) \
+ HB_DRAW_FUNC_IMPLEMENT (close_path) \
+ /* ^--- Add new callbacks here */
-struct draw_helper_t
+struct hb_draw_funcs_t
{
- draw_helper_t (const hb_draw_funcs_t *funcs_, void *user_data_)
- {
- funcs = funcs_;
- user_data = user_data_;
- path_open = false;
- path_start_x = current_x = path_start_y = current_y = 0;
- }
- ~draw_helper_t () { end_path (); }
+ hb_object_header_t header;
- void move_to (hb_position_t x, hb_position_t y)
+ struct {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_func_t name;
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ } func;
+
+ struct {
+#define HB_DRAW_FUNC_IMPLEMENT(name) void *name;
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ } user_data;
+
+ struct {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_destroy_func_t name;
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ } destroy;
+
+ void emit_move_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
+ { func.move_to (this, draw_data, &st,
+ to_x, to_y,
+ user_data.move_to); }
+ void emit_line_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
+ { func.line_to (this, draw_data, &st,
+ to_x, to_y,
+ user_data.line_to); }
+ void emit_quadratic_to (void *draw_data, hb_draw_state_t &st,
+ float control_x, float control_y,
+ float to_x, float to_y)
+ { func.quadratic_to (this, draw_data, &st,
+ control_x, control_y,
+ to_x, to_y,
+ user_data.quadratic_to); }
+ void emit_cubic_to (void *draw_data, hb_draw_state_t &st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
+ { func.cubic_to (this, draw_data, &st,
+ control1_x, control1_y,
+ control2_x, control2_y,
+ to_x, to_y,
+ user_data.cubic_to); }
+ void emit_close_path (void *draw_data, hb_draw_state_t &st)
+ { func.close_path (this, draw_data, &st,
+ user_data.close_path); }
+
+
+ void move_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
{
- if (path_open) end_path ();
- current_x = path_start_x = x;
- current_y = path_start_y = y;
+ if (st.path_open) close_path (draw_data, st);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
- void line_to (hb_position_t x, hb_position_t y)
+ void line_to (void *draw_data, hb_draw_state_t &st,
+ float to_x, float to_y)
{
- if (equal_to_current (x, y)) return;
- if (!path_open) start_path ();
- funcs->line_to (x, y, user_data);
- current_x = x;
- current_y = y;
+ if (!st.path_open) start_path (draw_data, st);
+ emit_line_to (draw_data, st, to_x, to_y);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
void
- quadratic_to (hb_position_t control_x, hb_position_t control_y,
- hb_position_t to_x, hb_position_t to_y)
+ quadratic_to (void *draw_data, hb_draw_state_t &st,
+ float control_x, float control_y,
+ float to_x, float to_y)
{
- if (equal_to_current (control_x, control_y) && equal_to_current (to_x, to_y))
- return;
- if (!path_open) start_path ();
- if (funcs->is_quadratic_to_set)
- funcs->quadratic_to (control_x, control_y, to_x, to_y, user_data);
- else
- funcs->cubic_to (roundf ((current_x + 2.f * control_x) / 3.f),
- roundf ((current_y + 2.f * control_y) / 3.f),
- roundf ((to_x + 2.f * control_x) / 3.f),
- roundf ((to_y + 2.f * control_y) / 3.f),
- to_x, to_y, user_data);
- current_x = to_x;
- current_y = to_y;
+ if (!st.path_open) start_path (draw_data, st);
+ emit_quadratic_to (draw_data, st, control_x, control_y, to_x, to_y);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
void
- cubic_to (hb_position_t control1_x, hb_position_t control1_y,
- hb_position_t control2_x, hb_position_t control2_y,
- hb_position_t to_x, hb_position_t to_y)
+ cubic_to (void *draw_data, hb_draw_state_t &st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
{
- if (equal_to_current (control1_x, control1_y) &&
- equal_to_current (control2_x, control2_y) &&
- equal_to_current (to_x, to_y))
- return;
- if (!path_open) start_path ();
- funcs->cubic_to (control1_x, control1_y, control2_x, control2_y, to_x, to_y, user_data);
- current_x = to_x;
- current_y = to_y;
+ if (!st.path_open) start_path (draw_data, st);
+ emit_cubic_to (draw_data, st, control1_x, control1_y, control2_x, control2_y, to_x, to_y);
+ st.current_x = to_x;
+ st.current_y = to_y;
}
- void end_path ()
+ void
+ close_path (void *draw_data, hb_draw_state_t &st)
{
- if (path_open)
+ if (st.path_open)
{
- if ((path_start_x != current_x) || (path_start_y != current_y))
- funcs->line_to (path_start_x, path_start_y, user_data);
- funcs->close_path (user_data);
+ if ((st.path_start_x != st.current_x) || (st.path_start_y != st.current_y))
+ emit_line_to (draw_data, st, st.path_start_x, st.path_start_y);
+ emit_close_path (draw_data, st);
}
- path_open = false;
- path_start_x = current_x = path_start_y = current_y = 0;
+ st.path_open = false;
+ st.path_start_x = st.current_x = st.path_start_y = st.current_y = 0;
}
protected:
- bool equal_to_current (hb_position_t x, hb_position_t y)
- { return current_x == x && current_y == y; }
- void start_path ()
+ void start_path (void *draw_data, hb_draw_state_t &st)
{
- if (path_open) end_path ();
- path_open = true;
- funcs->move_to (path_start_x, path_start_y, user_data);
+ assert (!st.path_open);
+ emit_move_to (draw_data, st, st.current_x, st.current_y);
+ st.path_open = true;
+ st.path_start_x = st.current_x;
+ st.path_start_y = st.current_y;
}
+};
+DECLARE_NULL_INSTANCE (hb_draw_funcs_t);
- hb_position_t path_start_x;
- hb_position_t path_start_y;
+struct hb_draw_session_t
+{
+ hb_draw_session_t (hb_draw_funcs_t *funcs_, void *draw_data_, float slant_ = 0.f)
+ : slant {slant_}, not_slanted {slant == 0.f},
+ funcs {funcs_}, draw_data {draw_data_}, st HB_DRAW_STATE_DEFAULT
+ {}
- hb_position_t current_x;
- hb_position_t current_y;
+ ~hb_draw_session_t () { close_path (); }
- bool path_open;
- const hb_draw_funcs_t *funcs;
- void *user_data;
+ void move_to (float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->move_to (draw_data, st,
+ to_x, to_y);
+ else
+ funcs->move_to (draw_data, st,
+ to_x + to_y * slant, to_y);
+ }
+ void line_to (float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->line_to (draw_data, st,
+ to_x, to_y);
+ else
+ funcs->line_to (draw_data, st,
+ to_x + to_y * slant, to_y);
+ }
+ void
+ quadratic_to (float control_x, float control_y,
+ float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->quadratic_to (draw_data, st,
+ control_x, control_y,
+ to_x, to_y);
+ else
+ funcs->quadratic_to (draw_data, st,
+ control_x + control_y * slant, control_y,
+ to_x + to_y * slant, to_y);
+ }
+ void
+ cubic_to (float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y)
+ {
+ if (likely (not_slanted))
+ funcs->cubic_to (draw_data, st,
+ control1_x, control1_y,
+ control2_x, control2_y,
+ to_x, to_y);
+ else
+ funcs->cubic_to (draw_data, st,
+ control1_x + control1_y * slant, control1_y,
+ control2_x + control2_y * slant, control2_y,
+ to_x + to_y * slant, to_y);
+ }
+ void close_path ()
+ {
+ funcs->close_path (draw_data, st);
+ }
+
+ protected:
+ float slant;
+ bool not_slanted;
+ hb_draw_funcs_t *funcs;
+ void *draw_data;
+ hb_draw_state_t st;
};
-#endif
#endif /* HB_DRAW_HH */
diff --git a/thirdparty/harfbuzz/src/hb-face.cc b/thirdparty/harfbuzz/src/hb-face.cc
index 2c0087370c..5365598636 100644
--- a/thirdparty/harfbuzz/src/hb-face.cc
+++ b/thirdparty/harfbuzz/src/hb-face.cc
@@ -143,7 +143,7 @@ hb_face_create_for_tables (hb_reference_table_func_t reference_table_func,
typedef struct hb_face_for_data_closure_t {
hb_blob_t *blob;
- unsigned int index;
+ uint16_t index;
} hb_face_for_data_closure_t;
static hb_face_for_data_closure_t *
@@ -156,7 +156,7 @@ _hb_face_for_data_closure_create (hb_blob_t *blob, unsigned int index)
return nullptr;
closure->blob = blob;
- closure->index = index;
+ closure->index = (uint16_t) (index & 0xFFFFu);
return closure;
}
@@ -195,9 +195,19 @@ _hb_face_for_data_reference_table (hb_face_t *face HB_UNUSED, hb_tag_t tag, void
* @index: The index of the face within @blob
*
* Constructs a new face object from the specified blob and
- * a face index into that blob. This is used for blobs of
- * file formats such as Dfont and TTC that can contain more
- * than one face.
+ * a face index into that blob.
+ *
+ * The face index is used for blobs of file formats such as TTC and
+ * and DFont that can contain more than one face. Face indices within
+ * such collections are zero-based.
+ *
+ * <note>Note: If the blob font format is not a collection, @index
+ * is ignored. Otherwise, only the lower 16-bits of @index are used.
+ * The unmodified @index can be accessed via hb_face_get_index().</note>
+ *
+ * <note>Note: The high 16-bits of @index, if non-zero, are used by
+ * hb_font_create() to load named-instances in variable fonts. See
+ * hb_font_create() for details.</note>
*
* Return value: (transfer full): The new face object
*
@@ -420,7 +430,8 @@ hb_face_reference_blob (hb_face_t *face)
* Assigns the specified face-index to @face. Fails if the
* face is immutable.
*
- * <note>Note: face indices within a collection are zero-based.</note>
+ * <note>Note: changing the index has no effect on the face itself
+ * This only changes the value returned by hb_face_get_index().</note>
*
* Since: 0.9.2
**/
diff --git a/thirdparty/harfbuzz/src/hb-font.cc b/thirdparty/harfbuzz/src/hb-font.cc
index fa8da96395..db05f017a5 100644
--- a/thirdparty/harfbuzz/src/hb-font.cc
+++ b/thirdparty/harfbuzz/src/hb-font.cc
@@ -29,6 +29,7 @@
#include "hb.hh"
#include "hb-font.hh"
+#include "hb-draw.hh"
#include "hb-machinery.hh"
#include "hb-ot.h"
@@ -501,6 +502,136 @@ hb_font_get_glyph_from_name_default (hb_font_t *font,
return font->parent->get_glyph_from_name (name, len, glyph);
}
+static void
+hb_font_get_glyph_shape_nil (hb_font_t *font HB_UNUSED,
+ void *font_data HB_UNUSED,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs,
+ void *draw_data,
+ void *user_data HB_UNUSED)
+{
+}
+
+
+typedef struct hb_font_get_glyph_shape_default_adaptor_t {
+ hb_draw_funcs_t *draw_funcs;
+ void *draw_data;
+ float x_scale;
+ float y_scale;
+} hb_font_get_glyph_shape_default_adaptor_t;
+
+static void
+hb_draw_move_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED,
+ void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ adaptor->draw_funcs->emit_move_to (adaptor->draw_data, *st,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_line_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ st->current_x *= x_scale;
+ st->current_y *= y_scale;
+
+ adaptor->draw_funcs->emit_line_to (adaptor->draw_data, *st,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_quadratic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ float control_x, float control_y,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ st->current_x *= x_scale;
+ st->current_y *= y_scale;
+
+ adaptor->draw_funcs->emit_quadratic_to (adaptor->draw_data, *st,
+ x_scale * control_x, y_scale * control_y,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_cubic_to_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ float control1_x, float control1_y,
+ float control2_x, float control2_y,
+ float to_x, float to_y,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+ float x_scale = adaptor->x_scale;
+ float y_scale = adaptor->y_scale;
+
+ st->current_x *= x_scale;
+ st->current_y *= y_scale;
+
+ adaptor->draw_funcs->emit_cubic_to (adaptor->draw_data, *st,
+ x_scale * control1_x, y_scale * control1_y,
+ x_scale * control2_x, y_scale * control2_y,
+ x_scale * to_x, y_scale * to_y);
+}
+
+static void
+hb_draw_close_path_default (hb_draw_funcs_t *dfuncs HB_UNUSED, void *draw_data,
+ hb_draw_state_t *st,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t *adaptor = (hb_font_get_glyph_shape_default_adaptor_t *) draw_data;
+
+ adaptor->draw_funcs->emit_close_path (adaptor->draw_data, *st);
+}
+
+static const hb_draw_funcs_t _hb_draw_funcs_default = {
+ HB_OBJECT_HEADER_STATIC,
+
+ {
+#define HB_DRAW_FUNC_IMPLEMENT(name) hb_draw_##name##_default,
+ HB_DRAW_FUNCS_IMPLEMENT_CALLBACKS
+#undef HB_DRAW_FUNC_IMPLEMENT
+ }
+};
+
+static void
+hb_font_get_glyph_shape_default (hb_font_t *font,
+ void *font_data HB_UNUSED,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs,
+ void *draw_data,
+ void *user_data HB_UNUSED)
+{
+ hb_font_get_glyph_shape_default_adaptor_t adaptor = {
+ draw_funcs,
+ draw_data,
+ (float) font->x_scale / (float) font->parent->x_scale,
+ (float) font->y_scale / (float) font->parent->y_scale
+ };
+
+ font->parent->get_glyph_shape (glyph,
+ const_cast<hb_draw_funcs_t *> (&_hb_draw_funcs_default),
+ &adaptor);
+}
+
DEFINE_NULL_INSTANCE (hb_font_funcs_t) =
{
HB_OBJECT_HEADER_STATIC,
@@ -631,7 +762,7 @@ hb_font_funcs_destroy (hb_font_funcs_t *ffuncs)
* @destroy: (nullable): A callback to call when @data is not needed anymore
* @replace: Whether to replace an existing data with the same key
*
- * Attaches a user-data key/data pair to the specified font-functions structure.
+ * Attaches a user-data key/data pair to the specified font-functions structure.
*
* Return value: %true if success, %false otherwise
*
@@ -821,7 +952,7 @@ hb_font_get_glyph (hb_font_t *font,
* @glyph: (out): The glyph ID retrieved
*
* Fetches the nominal glyph ID for a Unicode code point in the
- * specified font.
+ * specified font.
*
* This version of the function should not be used to fetch glyph IDs
* for code points modified by variation selectors. For variation-selector
@@ -940,7 +1071,7 @@ hb_font_get_glyph_v_advance (hb_font_t *font,
* @advance_stride: The stride between successive advances
*
* Fetches the advances for a sequence of glyph IDs in the specified
- * font, for horizontal text segments.
+ * font, for horizontal text segments.
*
* Since: 1.8.6
**/
@@ -964,7 +1095,7 @@ hb_font_get_glyph_h_advances (hb_font_t* font,
* @advance_stride: (out): The stride between successive advances
*
* Fetches the advances for a sequence of glyph IDs in the specified
- * font, for vertical text segments.
+ * font, for vertical text segments.
*
* Since: 1.8.6
**/
@@ -1168,6 +1299,26 @@ hb_font_get_glyph_from_name (hb_font_t *font,
return font->get_glyph_from_name (name, len, glyph);
}
+/**
+ * hb_font_get_glyph_shape:
+ * @font: #hb_font_t to work upon
+ * @glyph: : The glyph ID
+ * @dfuncs: #hb_draw_funcs_t to draw to
+ * @draw_data: User data to pass to draw callbacks
+ *
+ * Fetches the glyph shape that corresponds to a glyph in the specified @font.
+ * The shape is returned by way of calls to the callsbacks of the @dfuncs
+ * objects, with @draw_data passed to them.
+ *
+ * Since: 4.0.0
+ **/
+void
+hb_font_get_glyph_shape (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *dfuncs, void *draw_data)
+{
+ font->get_glyph_shape (glyph, dfuncs, draw_data);
+}
/* A bit higher-level, and with fallback */
@@ -1190,7 +1341,7 @@ hb_font_get_extents_for_direction (hb_font_t *font,
hb_direction_t direction,
hb_font_extents_t *extents)
{
- return font->get_extents_for_direction (direction, extents);
+ font->get_extents_for_direction (direction, extents);
}
/**
* hb_font_get_glyph_advance_for_direction:
@@ -1215,7 +1366,7 @@ hb_font_get_glyph_advance_for_direction (hb_font_t *font,
hb_position_t *x,
hb_position_t *y)
{
- return font->get_glyph_advance_for_direction (glyph, direction, x, y);
+ font->get_glyph_advance_for_direction (glyph, direction, x, y);
}
/**
* hb_font_get_glyph_advances_for_direction:
@@ -1278,7 +1429,7 @@ hb_font_get_glyph_origin_for_direction (hb_font_t *font,
* @font: #hb_font_t to work upon
* @glyph: The glyph ID to query
* @direction: The direction of the text segment
- * @x: (inout): Input = The original X coordinate
+ * @x: (inout): Input = The original X coordinate
* Output = The X coordinate plus the X-coordinate of the origin
* @y: (inout): Input = The original Y coordinate
* Output = The Y coordinate plus the Y-coordinate of the origin
@@ -1306,7 +1457,7 @@ hb_font_add_glyph_origin_for_direction (hb_font_t *font,
* @font: #hb_font_t to work upon
* @glyph: The glyph ID to query
* @direction: The direction of the text segment
- * @x: (inout): Input = The original X coordinate
+ * @x: (inout): Input = The original X coordinate
* Output = The X coordinate minus the X-coordinate of the origin
* @y: (inout): Input = The original Y coordinate
* Output = The Y coordinate minus the Y-coordinate of the origin
@@ -1477,6 +1628,8 @@ DEFINE_NULL_INSTANCE (hb_font_t) =
1000, /* x_scale */
1000, /* y_scale */
+ 0., /* slant */
+ 0., /* slant_xy; */
1<<16, /* x_mult */
1<<16, /* y_mult */
@@ -1521,6 +1674,13 @@ _hb_font_create (hb_face_t *face)
*
* Constructs a new font object from the specified face.
*
+ * <note>Note: If @face's index value (as passed to hb_face_create()
+ * has non-zero top 16-bits, those bits minus one are passed to
+ * hb_font_set_var_named_instance(), effectively loading a named-instance
+ * of a variable font, instead of the default-instance. This allows
+ * specifying which named-instance to load by default when creating the
+ * face.</note>
+ *
* Return value: (transfer full): The new font object
*
* Since: 0.9.2
@@ -1535,6 +1695,11 @@ hb_font_create (hb_face_t *face)
hb_ot_font_set_funcs (font);
#endif
+#ifndef HB_NO_VAR
+ if (face && face->index >> 16)
+ hb_font_set_var_named_instance (font, (face->index >> 16) - 1);
+#endif
+
return font;
}
@@ -1578,6 +1743,7 @@ hb_font_create_sub_font (hb_font_t *parent)
font->x_scale = parent->x_scale;
font->y_scale = parent->y_scale;
+ font->slant = parent->slant;
font->mults_changed ();
font->x_ppem = parent->x_ppem;
font->y_ppem = parent->y_ppem;
@@ -1668,12 +1834,12 @@ hb_font_destroy (hb_font_t *font)
/**
* hb_font_set_user_data: (skip)
* @font: #hb_font_t to work upon
- * @key: The user-data key
+ * @key: The user-data key
* @data: A pointer to the user data
* @destroy: (nullable): A callback to call when @data is not needed anymore
* @replace: Whether to replace an existing data with the same key
*
- * Attaches a user-data key/data pair to the specified font object.
+ * Attaches a user-data key/data pair to the specified font object.
*
* Return value: %true if success, %false otherwise
*
@@ -1875,7 +2041,7 @@ hb_font_set_funcs (hb_font_t *font,
* @font_data: (destroy destroy) (scope notified): Data to attach to @font
* @destroy: (nullable): The function to call when @font_data is not needed anymore
*
- * Replaces the user data attached to a font, updating the font's
+ * Replaces the user data attached to a font, updating the font's
* @destroy callback.
*
* Since: 0.9.2
@@ -1949,7 +2115,7 @@ hb_font_get_scale (hb_font_t *font,
* @x_ppem: Horizontal ppem value to assign
* @y_ppem: Vertical ppem value to assign
*
- * Sets the horizontal and vertical pixels-per-em (ppem) of a font.
+ * Sets the horizontal and vertical pixels-per-em (ppem) of a font.
*
* Since: 0.9.2
**/
@@ -1971,7 +2137,7 @@ hb_font_set_ppem (hb_font_t *font,
* @x_ppem: (out): Horizontal ppem value
* @y_ppem: (out): Vertical ppem value
*
- * Fetches the horizontal and vertical points-per-em (ppem) of a font.
+ * Fetches the horizontal and vertical points-per-em (ppem) of a font.
*
* Since: 0.9.2
**/
@@ -2015,7 +2181,7 @@ hb_font_set_ptem (hb_font_t *font,
*
* Return value: Point size. A value of zero means "not set."
*
- * Since: 0.9.2
+ * Since: 1.6.0
**/
float
hb_font_get_ptem (hb_font_t *font)
@@ -2023,6 +2189,53 @@ hb_font_get_ptem (hb_font_t *font)
return font->ptem;
}
+/**
+ * hb_font_set_synthetic_slant:
+ * @font: #hb_font_t to work upon
+ * @slant: synthetic slant value.
+ *
+ * Sets the "synthetic slant" of a font. By default is zero.
+ * Synthetic slant is the graphical skew applied to the font
+ * at rendering time.
+ *
+ * HarfBuzz needs to know this value to adjust shaping results,
+ * metrics, and style values to match the slanted rendering.
+ *
+ * <note>Note: The glyph shape fetched via the
+ * hb_font_get_glyph_shape() is slanted to reflect this value
+ * as well.</note>
+ *
+ * <note>Note: The slant value is a ratio. For example, a
+ * 20% slant would be represented as a 0.2 value.</note>
+ *
+ * Since: 3.3.0
+ **/
+HB_EXTERN void
+hb_font_set_synthetic_slant (hb_font_t *font, float slant)
+{
+ if (hb_object_is_immutable (font))
+ return;
+
+ font->slant = slant;
+ font->mults_changed ();
+}
+
+/**
+ * hb_font_get_synthetic_slant:
+ * @font: #hb_font_t to work upon
+ *
+ * Fetches the "synthetic slant" of a font.
+ *
+ * Return value: Synthetic slant. By default is zero.
+ *
+ * Since: 3.3.0
+ **/
+HB_EXTERN float
+hb_font_get_synthetic_slant (hb_font_t *font)
+{
+ return font->slant;
+}
+
#ifndef HB_NO_VAR
/*
* Variations
@@ -2036,6 +2249,10 @@ hb_font_get_ptem (hb_font_t *font)
*
* Applies a list of font-variation settings to a font.
*
+ * Note that this overrides all existing variations set on @font.
+ * Axes not included in @variations will be effectively set to their
+ * default values.
+ *
* Since: 1.4.2
*/
void
@@ -2091,6 +2308,10 @@ hb_font_set_variations (hb_font_t *font,
* Applies a list of variation coordinates (in design-space units)
* to a font.
*
+ * Note that this overrides all existing variations set on @font.
+ * Axes not included in @coords will be effectively set to their
+ * default values.
+ *
* Since: 1.4.2
*/
void
@@ -2154,6 +2375,10 @@ hb_font_set_var_named_instance (hb_font_t *font,
* Applies a list of variation coordinates (in normalized units)
* to a font.
*
+ * Note that this overrides all existing variations set on @font.
+ * Axes not included in @coords will be effectively set to their
+ * default values.
+ *
* <note>Note: Coordinates should be normalized to 2.14.</note>
*
* Since: 1.4.2
@@ -2196,14 +2421,19 @@ hb_font_set_var_coords_normalized (hb_font_t *font,
/**
* hb_font_get_var_coords_normalized:
* @font: #hb_font_t to work upon
- * @length: Number of coordinates retrieved
+ * @length: (out): Number of coordinates retrieved
*
* Fetches the list of normalized variation coordinates currently
* set on a font.
*
+ * Note that this returned array may only contain values for some
+ * (or none) of the axes; omitted axes effectively have zero values.
+ *
* Return value is valid as long as variation coordinates of the font
* are not modified.
*
+ * Return value: coordinates array
+ *
* Since: 1.4.2
*/
const int *
@@ -2216,18 +2446,24 @@ hb_font_get_var_coords_normalized (hb_font_t *font,
return font->coords;
}
-#ifdef HB_EXPERIMENTAL_API
/**
* hb_font_get_var_coords_design:
* @font: #hb_font_t to work upon
- * @length: (out): number of coordinates
+ * @length: (out): Number of coordinates retrieved
+ *
+ * Fetches the list of variation coordinates (in design-space units) currently
+ * set on a font.
+ *
+ * Note that this returned array may only contain values for some
+ * (or none) of the axes; omitted axes effectively have their default
+ * values.
*
* Return value is valid as long as variation coordinates of the font
* are not modified.
*
* Return value: coordinates array
*
- * Since: EXPERIMENTAL
+ * Since: 3.3.0
*/
const float *
hb_font_get_var_coords_design (hb_font_t *font,
@@ -2239,7 +2475,6 @@ hb_font_get_var_coords_design (hb_font_t *font,
return font->design_coords;
}
#endif
-#endif
#ifndef HB_DISABLE_DEPRECATED
/*
diff --git a/thirdparty/harfbuzz/src/hb-font.h b/thirdparty/harfbuzz/src/hb-font.h
index 15dc126523..9548857535 100644
--- a/thirdparty/harfbuzz/src/hb-font.h
+++ b/thirdparty/harfbuzz/src/hb-font.h
@@ -511,6 +511,25 @@ typedef hb_bool_t (*hb_font_get_glyph_from_name_func_t) (hb_font_t *font, void *
hb_codepoint_t *glyph,
void *user_data);
+/**
+ * hb_font_get_glyph_shape_func_t:
+ * @font: #hb_font_t to work upon
+ * @font_data: @font user data pointer
+ * @glyph: The glyph ID to query
+ * @draw_funcs: The draw functions to send the shape data to
+ * @draw_data: The data accompanying the draw functions
+ * @user_data: User data pointer passed by the caller
+ *
+ * A virtual method for the #hb_font_funcs_t of an #hb_font_t object.
+ *
+ * Since: 4.0.0
+ *
+ **/
+typedef void (*hb_font_get_glyph_shape_func_t) (hb_font_t *font, void *font_data,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data,
+ void *user_data);
+
/* func setters */
@@ -770,6 +789,22 @@ hb_font_funcs_set_glyph_from_name_func (hb_font_funcs_t *ffuncs,
hb_font_get_glyph_from_name_func_t func,
void *user_data, hb_destroy_func_t destroy);
+/**
+ * hb_font_funcs_set_glyph_shape_func:
+ * @ffuncs: A font-function structure
+ * @func: (closure user_data) (destroy destroy) (scope notified): The callback function to assign
+ * @user_data: Data to pass to @func
+ * @destroy: (nullable): The function to call when @user_data is not needed anymore
+ *
+ * Sets the implementation function for #hb_font_get_glyph_shape_func_t.
+ *
+ * Since: 4.0.0
+ **/
+HB_EXTERN void
+hb_font_funcs_set_glyph_shape_func (hb_font_funcs_t *ffuncs,
+ hb_font_get_glyph_shape_func_t func,
+ void *user_data, hb_destroy_func_t destroy);
+
/* func dispatch */
HB_EXTERN hb_bool_t
@@ -850,6 +885,11 @@ hb_font_get_glyph_from_name (hb_font_t *font,
const char *name, int len, /* -1 means nul-terminated */
hb_codepoint_t *glyph);
+HB_EXTERN void
+hb_font_get_glyph_shape (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *dfuncs, void *draw_data);
+
/* high-level funcs, with fallback */
@@ -1024,6 +1064,12 @@ HB_EXTERN float
hb_font_get_ptem (hb_font_t *font);
HB_EXTERN void
+hb_font_set_synthetic_slant (hb_font_t *font, float slant);
+
+HB_EXTERN float
+hb_font_get_synthetic_slant (hb_font_t *font);
+
+HB_EXTERN void
hb_font_set_variations (hb_font_t *font,
const hb_variation_t *variations,
unsigned int variations_length);
@@ -1033,11 +1079,9 @@ hb_font_set_var_coords_design (hb_font_t *font,
const float *coords,
unsigned int coords_length);
-#ifdef HB_EXPERIMENTAL_API
HB_EXTERN const float *
hb_font_get_var_coords_design (hb_font_t *font,
unsigned int *length);
-#endif
HB_EXTERN void
hb_font_set_var_coords_normalized (hb_font_t *font,
@@ -1052,11 +1096,6 @@ HB_EXTERN void
hb_font_set_var_named_instance (hb_font_t *font,
unsigned instance_index);
-#ifdef HB_EXPERIMENTAL_API
-HB_EXTERN hb_bool_t
-hb_font_draw_glyph (hb_font_t *font, hb_codepoint_t glyph,
- const hb_draw_funcs_t *funcs, void *user_data);
-#endif
HB_END_DECLS
diff --git a/thirdparty/harfbuzz/src/hb-font.hh b/thirdparty/harfbuzz/src/hb-font.hh
index 1b7f445e8b..70311b4a85 100644
--- a/thirdparty/harfbuzz/src/hb-font.hh
+++ b/thirdparty/harfbuzz/src/hb-font.hh
@@ -57,6 +57,7 @@
HB_FONT_FUNC_IMPLEMENT (glyph_contour_point) \
HB_FONT_FUNC_IMPLEMENT (glyph_name) \
HB_FONT_FUNC_IMPLEMENT (glyph_from_name) \
+ HB_FONT_FUNC_IMPLEMENT (glyph_shape) \
/* ^--- Add new callbacks here */
struct hb_font_funcs_t
@@ -109,6 +110,8 @@ struct hb_font_t
int32_t x_scale;
int32_t y_scale;
+ float slant;
+ float slant_xy;
int64_t x_mult;
int64_t y_mult;
@@ -138,6 +141,8 @@ struct hb_font_t
hb_position_t em_scalef_y (float v) { return em_scalef (v, y_scale); }
float em_fscale_x (int16_t v) { return em_fscale (v, x_scale); }
float em_fscale_y (int16_t v) { return em_fscale (v, y_scale); }
+ float em_fscalef_x (float v) { return em_fscalef (v, x_scale); }
+ float em_fscalef_y (float v) { return em_fscalef (v, y_scale); }
hb_position_t em_scale_dir (int16_t v, hb_direction_t direction)
{ return em_mult (v, dir_mult (direction)); }
@@ -371,6 +376,15 @@ struct hb_font_t
klass->user_data.glyph_from_name);
}
+ void get_glyph_shape (hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data)
+ {
+ klass->get.f.glyph_shape (this, user_data,
+ glyph,
+ draw_funcs, draw_data,
+ klass->user_data.glyph_shape);
+ }
+
/* A bit higher-level, and with fallback */
@@ -617,12 +631,15 @@ struct hb_font_t
signed upem = face->get_upem ();
x_mult = ((int64_t) x_scale << 16) / upem;
y_mult = ((int64_t) y_scale << 16) / upem;
+ slant_xy = y_scale ? slant * x_scale / y_scale : 0.f;
}
hb_position_t em_mult (int16_t v, int64_t mult)
{ return (hb_position_t) ((v * mult + 32768) >> 16); }
hb_position_t em_scalef (float v, int scale)
- { return (hb_position_t) roundf (v * scale / face->get_upem ()); }
+ { return (hb_position_t) roundf (em_fscalef (v, scale)); }
+ float em_fscalef (float v, int scale)
+ { return v * scale / face->get_upem (); }
float em_fscale (int16_t v, int scale)
{ return (float) v * scale / face->get_upem (); }
};
diff --git a/thirdparty/harfbuzz/src/hb-ft.cc b/thirdparty/harfbuzz/src/hb-ft.cc
index 67691e3ff3..40311e1b91 100644
--- a/thirdparty/harfbuzz/src/hb-ft.cc
+++ b/thirdparty/harfbuzz/src/hb-ft.cc
@@ -33,12 +33,14 @@
#include "hb-ft.h"
+#include "hb-draw.hh"
#include "hb-font.hh"
#include "hb-machinery.hh"
#include "hb-cache.hh"
#include FT_ADVANCES_H
#include FT_MULTIPLE_MASTERS_H
+#include FT_OUTLINE_H
#include FT_TRUETYPE_TABLES_H
@@ -565,6 +567,82 @@ hb_ft_get_font_h_extents (hb_font_t *font HB_UNUSED,
return true;
}
+#ifndef HB_NO_DRAW
+
+static int
+_hb_ft_move_to (const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->move_to (to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static int
+_hb_ft_line_to (const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->line_to (to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static int
+_hb_ft_conic_to (const FT_Vector *control,
+ const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->quadratic_to (control->x, control->y,
+ to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static int
+_hb_ft_cubic_to (const FT_Vector *control1,
+ const FT_Vector *control2,
+ const FT_Vector *to,
+ hb_draw_session_t *drawing)
+{
+ drawing->cubic_to (control1->x, control1->y,
+ control2->x, control2->y,
+ to->x, to->y);
+ return FT_Err_Ok;
+}
+
+static void
+hb_ft_get_glyph_shape (hb_font_t *font HB_UNUSED,
+ void *font_data,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data,
+ void *user_data HB_UNUSED)
+{
+ const hb_ft_font_t *ft_font = (const hb_ft_font_t *) font_data;
+ hb_lock_t lock (ft_font->lock);
+ FT_Face ft_face = ft_font->ft_face;
+
+ if (unlikely (FT_Load_Glyph (ft_face, glyph,
+ FT_LOAD_NO_BITMAP | ft_font->load_flags)))
+ return;
+
+ if (ft_face->glyph->format != FT_GLYPH_FORMAT_OUTLINE)
+ return;
+
+ const FT_Outline_Funcs outline_funcs = {
+ (FT_Outline_MoveToFunc) _hb_ft_move_to,
+ (FT_Outline_LineToFunc) _hb_ft_line_to,
+ (FT_Outline_ConicToFunc) _hb_ft_conic_to,
+ (FT_Outline_CubicToFunc) _hb_ft_cubic_to,
+ 0, /* shift */
+ 0, /* delta */
+ };
+
+ hb_draw_session_t draw_session (draw_funcs, draw_data, font->slant_xy);
+
+ FT_Outline_Decompose (&ft_face->glyph->outline,
+ &outline_funcs,
+ &draw_session);
+}
+#endif
+
+
static inline void free_static_ft_funcs ();
static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft_font_funcs_lazy_loader_t>
@@ -596,6 +674,10 @@ static struct hb_ft_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ft
hb_font_funcs_set_glyph_name_func (funcs, hb_ft_get_glyph_name, nullptr, nullptr);
hb_font_funcs_set_glyph_from_name_func (funcs, hb_ft_get_glyph_from_name, nullptr, nullptr);
+#ifndef HB_NO_DRAW
+ hb_font_funcs_set_glyph_shape_func (funcs, hb_ft_get_glyph_shape, nullptr, nullptr);
+#endif
+
hb_font_funcs_make_immutable (funcs);
hb_atexit (free_static_ft_funcs);
diff --git a/thirdparty/harfbuzz/src/hb-gobject-structs.cc b/thirdparty/harfbuzz/src/hb-gobject-structs.cc
index 540b11f911..ef13f1e966 100644
--- a/thirdparty/harfbuzz/src/hb-gobject-structs.cc
+++ b/thirdparty/harfbuzz/src/hb-gobject-structs.cc
@@ -90,6 +90,7 @@ hb_gobject_##name##_get_type () \
HB_DEFINE_OBJECT_TYPE (buffer)
HB_DEFINE_OBJECT_TYPE (blob)
+HB_DEFINE_OBJECT_TYPE (draw_funcs)
HB_DEFINE_OBJECT_TYPE (face)
HB_DEFINE_OBJECT_TYPE (font)
HB_DEFINE_OBJECT_TYPE (font_funcs)
diff --git a/thirdparty/harfbuzz/src/hb-gobject-structs.h b/thirdparty/harfbuzz/src/hb-gobject-structs.h
index 63467f80df..3914a2431a 100644
--- a/thirdparty/harfbuzz/src/hb-gobject-structs.h
+++ b/thirdparty/harfbuzz/src/hb-gobject-structs.h
@@ -49,6 +49,10 @@ hb_gobject_buffer_get_type (void);
#define HB_GOBJECT_TYPE_BUFFER (hb_gobject_buffer_get_type ())
HB_EXTERN GType
+hb_gobject_draw_funcs_get_type (void);
+#define HB_GOBJECT_TYPE_DRAW_FUNCS (hb_gobject_draw_funcs_get_type ())
+
+HB_EXTERN GType
hb_gobject_face_get_type (void);
#define HB_GOBJECT_TYPE_FACE (hb_gobject_face_get_type ())
diff --git a/thirdparty/harfbuzz/src/hb-graphite2.cc b/thirdparty/harfbuzz/src/hb-graphite2.cc
index 42420ac0b0..63dc18b466 100644
--- a/thirdparty/harfbuzz/src/hb-graphite2.cc
+++ b/thirdparty/harfbuzz/src/hb-graphite2.cc
@@ -439,7 +439,8 @@ _hb_graphite2_shape (hb_shape_plan_t *shape_plan HB_UNUSED,
if (feats) gr_featureval_destroy (feats);
gr_seg_destroy (seg);
- buffer->clear_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK);
+ buffer->clear_glyph_flags ();
+ buffer->unsafe_to_break ();
return true;
}
diff --git a/thirdparty/harfbuzz/src/hb-iter.hh b/thirdparty/harfbuzz/src/hb-iter.hh
index ad2e45e3c5..43a3098f65 100644
--- a/thirdparty/harfbuzz/src/hb-iter.hh
+++ b/thirdparty/harfbuzz/src/hb-iter.hh
@@ -90,8 +90,8 @@ struct hb_iter_t
* it will be returning pointer to temporary rvalue.
* TODO Use a wrapper return type to fix for non-reference type. */
template <typename T = item_t,
- hb_enable_if (hb_is_reference (T))>
- hb_remove_reference<item_t>* operator -> () const { return hb_addressof (**thiz()); }
+ hb_enable_if (std::is_reference<T>::value)>
+ hb_remove_reference<item_t>* operator -> () const { return std::addressof (**thiz()); }
item_t operator * () const { return thiz()->__item__ (); }
item_t operator * () { return thiz()->__item__ (); }
item_t operator [] (unsigned i) const { return thiz()->__item_at__ (i); }
@@ -289,7 +289,7 @@ struct hb_is_source_of
{
private:
template <typename Iter2 = Iter,
- hb_enable_if (hb_is_convertible (typename Iter2::item_t, hb_add_lvalue_reference<hb_add_const<Item>>))>
+ hb_enable_if (hb_is_convertible (typename Iter2::item_t, hb_add_lvalue_reference<const Item>))>
static hb_true_type impl (hb_priority<2>);
template <typename Iter2 = Iter>
static auto impl (hb_priority<1>) -> decltype (hb_declval (Iter2) >> hb_declval (Item &), hb_true_type ());
diff --git a/thirdparty/harfbuzz/src/hb-kern.hh b/thirdparty/harfbuzz/src/hb-kern.hh
index 3f952fe7fc..9ea945caed 100644
--- a/thirdparty/harfbuzz/src/hb-kern.hh
+++ b/thirdparty/harfbuzz/src/hb-kern.hh
@@ -49,6 +49,10 @@ struct hb_kern_machine_t
hb_mask_t kern_mask,
bool scale = true) const
{
+ if (!buffer->message (font, "start kern"))
+ return;
+
+ buffer->unsafe_to_concat ();
OT::hb_ot_apply_context_t c (1, font, buffer);
c.set_lookup_mask (kern_mask);
c.set_lookup_props (OT::LookupFlag::IgnoreMarks);
@@ -67,7 +71,8 @@ struct hb_kern_machine_t
}
skippy_iter.reset (idx, 1);
- if (!skippy_iter.next ())
+ unsigned unsafe_to;
+ if (!skippy_iter.next (&unsafe_to))
{
idx++;
continue;
@@ -125,6 +130,8 @@ struct hb_kern_machine_t
skip:
idx = skippy_iter.idx;
}
+
+ (void) buffer->message (font, "end kern");
}
const Driver &driver;
diff --git a/thirdparty/harfbuzz/src/hb-machinery.hh b/thirdparty/harfbuzz/src/hb-machinery.hh
index 010c2570d7..e52a6a4124 100644
--- a/thirdparty/harfbuzz/src/hb-machinery.hh
+++ b/thirdparty/harfbuzz/src/hb-machinery.hh
@@ -194,7 +194,8 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
}
const Returned * operator -> () const { return get (); }
- const Returned & operator * () const { return *get (); }
+ template <typename U = Returned, hb_enable_if (!hb_is_same (U, void))>
+ const U & operator * () const { return *get (); }
explicit operator bool () const
{ return get_stored () != Funcs::get_null (); }
template <typename C> operator const C * () const { return get (); }
@@ -244,19 +245,19 @@ struct hb_lazy_loader_t : hb_data_wrapper_t<Data, WheresData>
{
Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
if (likely (p))
- p->init (data);
+ p = new (p) Stored (data);
return p;
}
static Stored *create ()
{
Stored *p = (Stored *) hb_calloc (1, sizeof (Stored));
if (likely (p))
- p->init ();
+ p = new (p) Stored ();
return p;
}
static void destroy (Stored *p)
{
- p->fini ();
+ p->~Stored ();
hb_free (p);
}
@@ -272,14 +273,19 @@ struct hb_face_lazy_loader_t : hb_lazy_loader_t<T,
hb_face_lazy_loader_t<T, WheresFace>,
hb_face_t, WheresFace> {};
-template <typename T, unsigned int WheresFace>
+template <typename T, unsigned int WheresFace, bool core=false>
struct hb_table_lazy_loader_t : hb_lazy_loader_t<T,
- hb_table_lazy_loader_t<T, WheresFace>,
+ hb_table_lazy_loader_t<T, WheresFace, core>,
hb_face_t, WheresFace,
hb_blob_t>
{
static hb_blob_t *create (hb_face_t *face)
- { return hb_sanitize_context_t ().reference_table<T> (face); }
+ {
+ auto c = hb_sanitize_context_t ();
+ if (core)
+ c.set_num_glyphs (0); // So we don't recurse ad infinitum...
+ return c.reference_table<T> (face);
+ }
static void destroy (hb_blob_t *p) { hb_blob_destroy (p); }
static const hb_blob_t *get_null ()
diff --git a/thirdparty/harfbuzz/src/hb-map.hh b/thirdparty/harfbuzz/src/hb-map.hh
index 793dcf22ca..9341637eac 100644
--- a/thirdparty/harfbuzz/src/hb-map.hh
+++ b/thirdparty/harfbuzz/src/hb-map.hh
@@ -37,13 +37,10 @@
template <typename K, typename V,
typename k_invalid_t = K,
typename v_invalid_t = V,
- k_invalid_t kINVALID = hb_is_pointer (K) ? 0 : std::is_signed<K>::value ? hb_int_min (K) : (K) -1,
- v_invalid_t vINVALID = hb_is_pointer (V) ? 0 : std::is_signed<V>::value ? hb_int_min (V) : (V) -1>
+ k_invalid_t kINVALID = std::is_pointer<K>::value ? 0 : std::is_signed<K>::value ? hb_int_min (K) : (K) -1,
+ v_invalid_t vINVALID = std::is_pointer<V>::value ? 0 : std::is_signed<V>::value ? hb_int_min (V) : (V) -1>
struct hb_hashmap_t
{
- static constexpr K INVALID_KEY = kINVALID;
- static constexpr V INVALID_VALUE = vINVALID;
-
hb_hashmap_t () { init (); }
~hb_hashmap_t () { fini (); }
@@ -64,24 +61,40 @@ struct hb_hashmap_t
hb_copy (o, *this);
}
- static_assert (std::is_trivially_copyable<K>::value, "");
- static_assert (std::is_trivially_copyable<V>::value, "");
- static_assert (std::is_trivially_destructible<K>::value, "");
- static_assert (std::is_trivially_destructible<V>::value, "");
-
struct item_t
{
K key;
V value;
uint32_t hash;
- void clear () { key = kINVALID; value = vINVALID; hash = 0; }
+ void clear ()
+ {
+ new (std::addressof (key)) K ();
+ key = hb_coerce<K> (kINVALID);
+ new (std::addressof (value)) V ();
+ value = hb_coerce<V> (vINVALID);
+ hash = 0;
+ }
bool operator == (const K &o) { return hb_deref (key) == hb_deref (o); }
bool operator == (const item_t &o) { return *this == o.key; }
- bool is_unused () const { return key == kINVALID; }
- bool is_tombstone () const { return key != kINVALID && value == vINVALID; }
- bool is_real () const { return key != kINVALID && value != vINVALID; }
+ bool is_unused () const
+ {
+ const K inv = hb_coerce<K> (kINVALID);
+ return key == inv;
+ }
+ bool is_tombstone () const
+ {
+ const K kinv = hb_coerce<K> (kINVALID);
+ const V vinv = hb_coerce<V> (vINVALID);
+ return key != kinv && value == vinv;
+ }
+ bool is_real () const
+ {
+ const K kinv = hb_coerce<K> (kINVALID);
+ const V vinv = hb_coerce<V> (vINVALID);
+ return key != kinv && value != vinv;
+ }
hb_pair_t<K, V> get_pair() const { return hb_pair_t<K, V> (key, value); }
};
@@ -118,8 +131,13 @@ struct hb_hashmap_t
}
void fini_shallow ()
{
- hb_free (items);
- items = nullptr;
+ if (likely (items)) {
+ unsigned size = mask + 1;
+ for (unsigned i = 0; i < size; i++)
+ items[i].~item_t ();
+ hb_free (items);
+ items = nullptr;
+ }
population = occupancy = 0;
}
void fini ()
@@ -163,10 +181,15 @@ struct hb_hashmap_t
/* Insert back old items. */
if (old_items)
for (unsigned int i = 0; i < old_size; i++)
+ {
if (old_items[i].is_real ())
+ {
set_with_hash (old_items[i].key,
old_items[i].hash,
std::move (old_items[i].value));
+ }
+ old_items[i].~item_t ();
+ }
hb_free (old_items);
@@ -178,22 +201,22 @@ struct hb_hashmap_t
V get (K key) const
{
- if (unlikely (!items)) return vINVALID;
+ if (unlikely (!items)) return hb_coerce<V> (vINVALID);
unsigned int i = bucket_for (key);
- return items[i].is_real () && items[i] == key ? items[i].value : vINVALID;
+ return items[i].is_real () && items[i] == key ? items[i].value : hb_coerce<V> (vINVALID);
}
- void del (K key) { set (key, vINVALID); }
+ void del (K key) { set (key, hb_coerce<V> (vINVALID)); }
/* Has interface. */
- static constexpr V SENTINEL = vINVALID;
typedef V value_t;
value_t operator [] (K k) const { return get (k); }
bool has (K k, V *vp = nullptr) const
{
V v = (*this)[k];
if (vp) *vp = v;
- return v != SENTINEL;
+ const V vinv = hb_coerce<V> (vINVALID);
+ return v != vinv;
}
/* Projection. */
V operator () (K k) const { return get (k); }
@@ -248,11 +271,13 @@ struct hb_hashmap_t
bool set_with_hash (K key, uint32_t hash, VV&& value)
{
if (unlikely (!successful)) return false;
- if (unlikely (key == kINVALID)) return true;
+ const K kinv = hb_coerce<K> (kINVALID);
+ if (unlikely (key == kinv)) return true;
if (unlikely ((occupancy + occupancy / 2) >= mask && !resize ())) return false;
unsigned int i = bucket_for_hash (key, hash);
- if (value == vINVALID && items[i].key != key)
+ const V vinv = hb_coerce<V> (vINVALID);
+ if (value == vinv && items[i].key != key)
return true; /* Trying to delete non-existent key. */
if (!items[i].is_unused ())
diff --git a/thirdparty/harfbuzz/src/hb-meta.hh b/thirdparty/harfbuzz/src/hb-meta.hh
index 0ea5774a9f..3fea5d995e 100644
--- a/thirdparty/harfbuzz/src/hb-meta.hh
+++ b/thirdparty/harfbuzz/src/hb-meta.hh
@@ -29,6 +29,7 @@
#include "hb.hh"
+#include <memory>
#include <type_traits>
#include <utility>
@@ -85,30 +86,13 @@ template <> struct hb_priority<0> {};
template <typename T> struct hb_type_identity_t { typedef T type; };
template <typename T> using hb_type_identity = typename hb_type_identity_t<T>::type;
-struct
-{
- template <typename T> constexpr T*
- operator () (T& arg) const
- {
-#pragma GCC diagnostic push
-#pragma GCC diagnostic ignored "-Wcast-align"
- /* https://en.cppreference.com/w/cpp/memory/addressof */
- return reinterpret_cast<T*> (
- &const_cast<char&> (
- reinterpret_cast<const volatile char&> (arg)));
-#pragma GCC diagnostic pop
- }
-}
-HB_FUNCOBJ (hb_addressof);
-
template <typename T> static inline T hb_declval ();
#define hb_declval(T) (hb_declval<T> ())
template <typename T> struct hb_match_const : hb_type_identity_t<T>, hb_false_type {};
template <typename T> struct hb_match_const<const T> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_const = typename hb_match_const<T>::type;
-template <typename T> using hb_add_const = const T;
-#define hb_is_const(T) hb_match_const<T>::value
+
template <typename T> struct hb_match_reference : hb_type_identity_t<T>, hb_false_type {};
template <typename T> struct hb_match_reference<T &> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> struct hb_match_reference<T &&> : hb_type_identity_t<T>, hb_true_type {};
@@ -119,14 +103,13 @@ template <typename T> using hb_add_lvalue_reference = decltype (_hb_try_add_lval
template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<1>) -> hb_type_identity<T&&>;
template <typename T> auto _hb_try_add_rvalue_reference (hb_priority<0>) -> hb_type_identity<T>;
template <typename T> using hb_add_rvalue_reference = decltype (_hb_try_add_rvalue_reference<T> (hb_prioritize));
-#define hb_is_reference(T) hb_match_reference<T>::value
+
template <typename T> struct hb_match_pointer : hb_type_identity_t<T>, hb_false_type {};
template <typename T> struct hb_match_pointer<T *> : hb_type_identity_t<T>, hb_true_type {};
template <typename T> using hb_remove_pointer = typename hb_match_pointer<T>::type;
template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<hb_remove_reference<T>*>;
template <typename T> auto _hb_try_add_pointer (hb_priority<1>) -> hb_type_identity<T>;
template <typename T> using hb_add_pointer = decltype (_hb_try_add_pointer<T> (hb_prioritize));
-#define hb_is_pointer(T) hb_match_pointer<T>::value
/* TODO Add feature-parity to std::decay. */
@@ -137,8 +120,8 @@ template <typename T> using hb_decay = hb_remove_const<hb_remove_reference<T>>;
template <typename From, typename To>
using hb_is_cr_convertible = hb_bool_constant<
hb_is_same (hb_decay<From>, hb_decay<To>) &&
- (!hb_is_const (From) || hb_is_const (To)) &&
- (!hb_is_reference (To) || hb_is_const (To) || hb_is_reference (To))
+ (!std::is_const<From>::value || std::is_const<To>::value) &&
+ (!std::is_reference<To>::value || std::is_const<To>::value || std::is_reference<To>::value)
>;
#define hb_is_cr_convertible(From,To) hb_is_cr_convertible<From, To>::value
@@ -153,16 +136,6 @@ struct
}
HB_FUNCOBJ (hb_deref);
-struct
-{
- template <typename T> constexpr auto
- operator () (T&& v) const HB_AUTO_RETURN (std::forward<T> (v))
-
- template <typename T> constexpr auto
- operator () (T& v) const HB_AUTO_RETURN (hb_addressof (v))
-}
-HB_FUNCOBJ (hb_ref);
-
template <typename T>
struct hb_reference_wrapper
{
@@ -176,7 +149,7 @@ struct hb_reference_wrapper
template <typename T>
struct hb_reference_wrapper<T&>
{
- hb_reference_wrapper (T& v) : v (hb_addressof (v)) {}
+ hb_reference_wrapper (T& v) : v (std::addressof (v)) {}
bool operator == (const hb_reference_wrapper& o) const { return v == o.v; }
bool operator != (const hb_reference_wrapper& o) const { return v != o.v; }
operator T& () const { return *v; }
diff --git a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc
deleted file mode 100644
index 6d09b252d8..0000000000
--- a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.cc
+++ /dev/null
@@ -1,177 +0,0 @@
-/*
- * Copyright © 2011,2012,2013 Google, Inc.
- * Copyright © 2021 Khaled Hosny
- *
- * This is part of HarfBuzz, a text shaping library.
- *
- * Permission is hereby granted, without written agreement and without
- * license or royalty fees, to use, copy, modify, and distribute this
- * software and its documentation for any purpose, provided that the
- * above copyright notice and the following two paragraphs appear in
- * all copies of this software.
- *
- * IN NO EVENT SHALL THE COPYRIGHT HOLDER BE LIABLE TO ANY PARTY FOR
- * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
- * ARISING OUT OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN
- * IF THE COPYRIGHT HOLDER HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH
- * DAMAGE.
- *
- * THE COPYRIGHT HOLDER SPECIFICALLY DISCLAIMS ANY WARRANTIES, INCLUDING,
- * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
- * FITNESS FOR A PARTICULAR PURPOSE. THE SOFTWARE PROVIDED HEREUNDER IS
- * ON AN "AS IS" BASIS, AND THE COPYRIGHT HOLDER HAS NO OBLIGATION TO
- * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS.
- *
- * Google Author(s): Behdad Esfahbod
- */
-
-#include "hb-ms-feature-ranges.hh"
-
-bool
-hb_ms_setup_features (const hb_feature_t *features,
- unsigned int num_features,
- hb_vector_t<hb_ms_feature_t> &feature_records, /* OUT */
- hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */)
-{
- feature_records.shrink(0);
- range_records.shrink(0);
-
- /* Sort features by start/end events. */
- hb_vector_t<hb_ms_feature_event_t> feature_events;
- for (unsigned int i = 0; i < num_features; i++)
- {
- hb_ms_active_feature_t feature;
- feature.fea.tag_le = hb_uint32_swap (features[i].tag);
- feature.fea.value = features[i].value;
- feature.order = i;
-
- hb_ms_feature_event_t *event;
-
- event = feature_events.push ();
- event->index = features[i].start;
- event->start = true;
- event->feature = feature;
-
- event = feature_events.push ();
- event->index = features[i].end;
- event->start = false;
- event->feature = feature;
- }
- feature_events.qsort ();
- /* Add a strategic final event. */
- {
- hb_ms_active_feature_t feature;
- feature.fea.tag_le = 0;
- feature.fea.value = 0;
- feature.order = num_features + 1;
-
- auto *event = feature_events.push ();
- event->index = 0; /* This value does magic. */
- event->start = false;
- event->feature = feature;
- }
-
- /* Scan events and save features for each range. */
- hb_vector_t<hb_ms_active_feature_t> active_features;
- unsigned int last_index = 0;
- for (unsigned int i = 0; i < feature_events.length; i++)
- {
- auto *event = &feature_events[i];
-
- if (event->index != last_index)
- {
- /* Save a snapshot of active features and the range. */
- auto *range = range_records.push ();
- auto offset = feature_records.length;
-
- active_features.qsort ();
- for (unsigned int j = 0; j < active_features.length; j++)
- {
- if (!j || active_features[j].fea.tag_le != feature_records[feature_records.length - 1].tag_le)
- {
- feature_records.push (active_features[j].fea);
- }
- else
- {
- /* Overrides value for existing feature. */
- feature_records[feature_records.length - 1].value = active_features[j].fea.value;
- }
- }
-
- /* Will convert to pointer after all is ready, since feature_records.array
- * may move as we grow it. */
- range->features.features = reinterpret_cast<hb_ms_feature_t *> (offset);
- range->features.num_features = feature_records.length - offset;
- range->index_first = last_index;
- range->index_last = event->index - 1;
-
- last_index = event->index;
- }
-
- if (event->start)
- {
- active_features.push (event->feature);
- }
- else
- {
- auto *feature = active_features.find (&event->feature);
- if (feature)
- active_features.remove (feature - active_features.arrayZ);
- }
- }
-
- if (!range_records.length) /* No active feature found. */
- num_features = 0;
-
- /* Fixup the pointers. */
- for (unsigned int i = 0; i < range_records.length; i++)
- {
- auto *range = &range_records[i];
- range->features.features = (hb_ms_feature_t *) feature_records + reinterpret_cast<uintptr_t> (range->features.features);
- }
-
- return !!num_features;
-}
-
-void
-hb_ms_make_feature_ranges (hb_vector_t<hb_ms_feature_t> &feature_records,
- hb_vector_t<hb_ms_range_record_t> &range_records,
- unsigned int chars_offset,
- unsigned int chars_len,
- uint16_t *log_clusters,
- hb_vector_t<hb_ms_features_t*> &range_features, /* OUT */
- hb_vector_t<uint32_t> &range_counts /* OUT */)
-{
- range_features.shrink (0);
- range_counts.shrink (0);
-
- auto *last_range = &range_records[0];
- for (unsigned int i = chars_offset; i < chars_len; i++)
- {
- auto *range = last_range;
- while (log_clusters[i] < range->index_first)
- range--;
- while (log_clusters[i] > range->index_last)
- range++;
- if (!range_features.length ||
- &range->features != range_features[range_features.length - 1])
- {
- auto **features = range_features.push ();
- auto *c = range_counts.push ();
- if (unlikely (!features || !c))
- {
- range_features.shrink (0);
- range_counts.shrink (0);
- break;
- }
- *features = &range->features;
- *c = 1;
- }
- else
- {
- range_counts[range_counts.length - 1]++;
- }
-
- last_range = range;
- }
-}
diff --git a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh
index 401d1e1d97..d40fdeaa82 100644
--- a/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh
+++ b/thirdparty/harfbuzz/src/hb-ms-feature-ranges.hh
@@ -52,8 +52,8 @@ struct hb_ms_active_feature_t {
a->fea.value < b->fea.value ? -1 : a->fea.value > b->fea.value ? 1 :
0;
}
- bool operator== (const hb_ms_active_feature_t *f)
- { return cmp (this, f) == 0; }
+ bool operator== (const hb_ms_active_feature_t& f) const
+ { return cmp (this, &f) == 0; }
};
struct hb_ms_feature_event_t {
@@ -77,20 +77,153 @@ struct hb_ms_range_record_t {
unsigned int index_last; /* == end - 1 */
};
-HB_INTERNAL bool
+static inline bool
hb_ms_setup_features (const hb_feature_t *features,
unsigned int num_features,
hb_vector_t<hb_ms_feature_t> &feature_records, /* OUT */
- hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */);
+ hb_vector_t<hb_ms_range_record_t> &range_records /* OUT */)
+{
+ feature_records.shrink(0);
+ range_records.shrink(0);
+ /* Sort features by start/end events. */
+ hb_vector_t<hb_ms_feature_event_t> feature_events;
+ for (unsigned int i = 0; i < num_features; i++)
+ {
+ hb_ms_active_feature_t feature;
+ feature.fea.tag_le = hb_uint32_swap (features[i].tag);
+ feature.fea.value = features[i].value;
+ feature.order = i;
+
+ hb_ms_feature_event_t *event;
+
+ event = feature_events.push ();
+ event->index = features[i].start;
+ event->start = true;
+ event->feature = feature;
+
+ event = feature_events.push ();
+ event->index = features[i].end;
+ event->start = false;
+ event->feature = feature;
+ }
+ feature_events.qsort ();
+ /* Add a strategic final event. */
+ {
+ hb_ms_active_feature_t feature;
+ feature.fea.tag_le = 0;
+ feature.fea.value = 0;
+ feature.order = num_features + 1;
+
+ auto *event = feature_events.push ();
+ event->index = 0; /* This value does magic. */
+ event->start = false;
+ event->feature = feature;
+ }
+
+ /* Scan events and save features for each range. */
+ hb_vector_t<hb_ms_active_feature_t> active_features;
+ unsigned int last_index = 0;
+ for (unsigned int i = 0; i < feature_events.length; i++)
+ {
+ auto *event = &feature_events[i];
+
+ if (event->index != last_index)
+ {
+ /* Save a snapshot of active features and the range. */
+ auto *range = range_records.push ();
+ auto offset = feature_records.length;
+
+ active_features.qsort ();
+ for (unsigned int j = 0; j < active_features.length; j++)
+ {
+ if (!j || active_features[j].fea.tag_le != feature_records[feature_records.length - 1].tag_le)
+ {
+ feature_records.push (active_features[j].fea);
+ }
+ else
+ {
+ /* Overrides value for existing feature. */
+ feature_records[feature_records.length - 1].value = active_features[j].fea.value;
+ }
+ }
+
+ /* Will convert to pointer after all is ready, since feature_records.array
+ * may move as we grow it. */
+ range->features.features = reinterpret_cast<hb_ms_feature_t *> (offset);
+ range->features.num_features = feature_records.length - offset;
+ range->index_first = last_index;
+ range->index_last = event->index - 1;
-HB_INTERNAL void
+ last_index = event->index;
+ }
+
+ if (event->start)
+ {
+ active_features.push (event->feature);
+ }
+ else
+ {
+ auto *feature = active_features.lsearch (event->feature);
+ if (feature)
+ active_features.remove (feature - active_features.arrayZ);
+ }
+ }
+
+ if (!range_records.length) /* No active feature found. */
+ num_features = 0;
+
+ /* Fixup the pointers. */
+ for (unsigned int i = 0; i < range_records.length; i++)
+ {
+ auto *range = &range_records[i];
+ range->features.features = (hb_ms_feature_t *) feature_records + reinterpret_cast<uintptr_t> (range->features.features);
+ }
+
+ return !!num_features;
+}
+
+static inline void
hb_ms_make_feature_ranges (hb_vector_t<hb_ms_feature_t> &feature_records,
hb_vector_t<hb_ms_range_record_t> &range_records,
unsigned int chars_offset,
unsigned int chars_len,
uint16_t *log_clusters,
hb_vector_t<hb_ms_features_t*> &range_features, /* OUT */
- hb_vector_t<uint32_t> &range_counts /* OUT */);
+ hb_vector_t<uint32_t> &range_counts /* OUT */)
+{
+ range_features.shrink (0);
+ range_counts.shrink (0);
+
+ auto *last_range = &range_records[0];
+ for (unsigned int i = chars_offset; i < chars_len; i++)
+ {
+ auto *range = last_range;
+ while (log_clusters[i] < range->index_first)
+ range--;
+ while (log_clusters[i] > range->index_last)
+ range++;
+ if (!range_features.length ||
+ &range->features != range_features[range_features.length - 1])
+ {
+ auto **features = range_features.push ();
+ auto *c = range_counts.push ();
+ if (unlikely (!features || !c))
+ {
+ range_features.shrink (0);
+ range_counts.shrink (0);
+ break;
+ }
+ *features = &range->features;
+ *c = 1;
+ }
+ else
+ {
+ range_counts[range_counts.length - 1]++;
+ }
+
+ last_range = range;
+ }
+}
#endif /* HB_MS_FEATURE_RANGES_HH */
diff --git a/thirdparty/harfbuzz/src/hb-object.hh b/thirdparty/harfbuzz/src/hb-object.hh
index 0e15cb12c4..4b5bc32ade 100644
--- a/thirdparty/harfbuzz/src/hb-object.hh
+++ b/thirdparty/harfbuzz/src/hb-object.hh
@@ -53,7 +53,7 @@ struct hb_lockable_set_t
item_t *replace_or_insert (T v, lock_t &l, bool replace)
{
l.lock ();
- item_t *item = items.find (v);
+ item_t *item = items.lsearch (v);
if (item) {
if (replace) {
item_t old = *item;
@@ -76,7 +76,7 @@ struct hb_lockable_set_t
void remove (T v, lock_t &l)
{
l.lock ();
- item_t *item = items.find (v);
+ item_t *item = items.lsearch (v);
if (item)
{
item_t old = *item;
@@ -93,7 +93,7 @@ struct hb_lockable_set_t
bool find (T v, item_t *i, lock_t &l)
{
l.lock ();
- item_t *item = items.find (v);
+ item_t *item = items.lsearch (v);
if (item)
*i = *item;
l.unlock ();
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
index 180c87cb89..c102c15173 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff-common.hh
@@ -68,8 +68,6 @@ struct code_pair_t
typedef hb_vector_t<unsigned char> str_buff_t;
struct str_buff_vec_t : hb_vector_t<str_buff_t>
{
- void fini () { SUPER::fini_deep (); }
-
unsigned int total_size () const
{
unsigned int size = 0;
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc b/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc
index 3298fa35ae..df4554ac00 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-cff1-table.cc
@@ -442,13 +442,12 @@ bool OT::cff1::accelerator_t::get_extents (hb_font_t *font, hb_codepoint_t glyph
return true;
}
-#ifdef HB_EXPERIMENTAL_API
struct cff1_path_param_t
{
cff1_path_param_t (const OT::cff1::accelerator_t *cff_, hb_font_t *font_,
- draw_helper_t &draw_helper_, point_t *delta_)
+ hb_draw_session_t &draw_session_, point_t *delta_)
{
- draw_helper = &draw_helper_;
+ draw_session = &draw_session_;
cff = cff_;
font = font_;
delta = delta_;
@@ -458,14 +457,14 @@ struct cff1_path_param_t
{
point_t point = p;
if (delta) point.move (*delta);
- draw_helper->move_to (font->em_scalef_x (point.x.to_real ()), font->em_scalef_y (point.y.to_real ()));
+ draw_session->move_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
}
void line_to (const point_t &p)
{
point_t point = p;
if (delta) point.move (*delta);
- draw_helper->line_to (font->em_scalef_x (point.x.to_real ()), font->em_scalef_y (point.y.to_real ()));
+ draw_session->line_to (font->em_fscalef_x (point.x.to_real ()), font->em_fscalef_y (point.y.to_real ()));
}
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
@@ -477,15 +476,15 @@ struct cff1_path_param_t
point2.move (*delta);
point3.move (*delta);
}
- draw_helper->cubic_to (font->em_scalef_x (point1.x.to_real ()), font->em_scalef_y (point1.y.to_real ()),
- font->em_scalef_x (point2.x.to_real ()), font->em_scalef_y (point2.y.to_real ()),
- font->em_scalef_x (point3.x.to_real ()), font->em_scalef_y (point3.y.to_real ()));
+ draw_session->cubic_to (font->em_fscalef_x (point1.x.to_real ()), font->em_fscalef_y (point1.y.to_real ()),
+ font->em_fscalef_x (point2.x.to_real ()), font->em_fscalef_y (point2.y.to_real ()),
+ font->em_fscalef_x (point3.x.to_real ()), font->em_fscalef_y (point3.y.to_real ()));
}
- void end_path () { draw_helper->end_path (); }
+ void end_path () { draw_session->close_path (); }
hb_font_t *font;
- draw_helper_t *draw_helper;
+ hb_draw_session_t *draw_session;
point_t *delta;
const OT::cff1::accelerator_t *cff;
@@ -513,7 +512,7 @@ struct cff1_path_procs_path_t : path_procs_t<cff1_path_procs_path_t, cff1_cs_int
};
static bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
- draw_helper_t &draw_helper, bool in_seac = false, point_t *delta = nullptr);
+ hb_draw_session_t &draw_session, bool in_seac = false, point_t *delta = nullptr);
struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_param_t, cff1_path_procs_path_t>
{
@@ -530,14 +529,14 @@ struct cff1_cs_opset_path_t : cff1_cs_opset_t<cff1_cs_opset_path_t, cff1_path_pa
hb_codepoint_t accent = param.cff->std_code_to_glyph (env.argStack[n-1].to_int ());
if (unlikely (!(!env.in_seac && base && accent
- && _get_path (param.cff, param.font, base, *param.draw_helper, true)
- && _get_path (param.cff, param.font, accent, *param.draw_helper, true, &delta))))
+ && _get_path (param.cff, param.font, base, *param.draw_session, true)
+ && _get_path (param.cff, param.font, accent, *param.draw_session, true, &delta))))
env.set_error ();
}
};
bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoint_t glyph,
- draw_helper_t &draw_helper, bool in_seac, point_t *delta)
+ hb_draw_session_t &draw_session, bool in_seac, point_t *delta)
{
if (unlikely (!cff->is_valid () || (glyph >= cff->num_glyphs))) return false;
@@ -546,7 +545,7 @@ bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoin
const byte_str_t str = (*cff->charStrings)[glyph];
interp.env.init (str, *cff, fd);
interp.env.set_in_seac (in_seac);
- cff1_path_param_t param (cff, font, draw_helper, delta);
+ cff1_path_param_t param (cff, font, draw_session, delta);
if (unlikely (!interp.interpret (param))) return false;
/* Let's end the path specially since it is called inside seac also */
@@ -555,16 +554,15 @@ bool _get_path (const OT::cff1::accelerator_t *cff, hb_font_t *font, hb_codepoin
return true;
}
-bool OT::cff1::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const
+bool OT::cff1::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const
{
#ifdef HB_NO_OT_FONT_CFF
/* XXX Remove check when this code moves to .hh file. */
return true;
#endif
- return _get_path (this, font, glyph, draw_helper);
+ return _get_path (this, font, glyph, draw_session);
}
-#endif
struct get_seac_param_t
{
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
index 5dd183e3a0..542e3f4de3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff1-table.hh
@@ -1144,8 +1144,8 @@ struct cff1
{
sc.end_processing ();
topDict.fini ();
- fontDicts.fini_deep ();
- privateDicts.fini_deep ();
+ fontDicts.fini ();
+ privateDicts.fini ();
hb_blob_destroy (blob);
blob = nullptr;
}
@@ -1245,32 +1245,32 @@ struct cff1
}
protected:
- hb_blob_t *blob;
+ hb_blob_t *blob = nullptr;
hb_sanitize_context_t sc;
public:
- const Encoding *encoding;
- const Charset *charset;
- const CFF1NameIndex *nameIndex;
- const CFF1TopDictIndex *topDictIndex;
- const CFF1StringIndex *stringIndex;
- const CFF1Subrs *globalSubrs;
- const CFF1CharStrings *charStrings;
- const CFF1FDArray *fdArray;
- const CFF1FDSelect *fdSelect;
- unsigned int fdCount;
+ const Encoding *encoding = nullptr;
+ const Charset *charset = nullptr;
+ const CFF1NameIndex *nameIndex = nullptr;
+ const CFF1TopDictIndex *topDictIndex = nullptr;
+ const CFF1StringIndex *stringIndex = nullptr;
+ const CFF1Subrs *globalSubrs = nullptr;
+ const CFF1CharStrings *charStrings = nullptr;
+ const CFF1FDArray *fdArray = nullptr;
+ const CFF1FDSelect *fdSelect = nullptr;
+ unsigned int fdCount = 0;
cff1_top_dict_values_t topDict;
hb_vector_t<cff1_font_dict_values_t>
fontDicts;
hb_vector_t<PRIVDICTVAL> privateDicts;
- unsigned int num_glyphs;
+ unsigned int num_glyphs = 0;
};
struct accelerator_t : accelerator_templ_t<cff1_private_dict_opset_t, cff1_private_dict_values_t>
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
SUPER::init (face);
@@ -1295,8 +1295,7 @@ struct cff1
}
glyph_names.qsort ();
}
-
- void fini ()
+ ~accelerator_t ()
{
glyph_names.fini ();
@@ -1348,9 +1347,7 @@ struct cff1
HB_INTERNAL bool get_extents (hb_font_t *font, hb_codepoint_t glyph, hb_glyph_extents_t *extents) const;
HB_INTERNAL bool get_seac_components (hb_codepoint_t glyph, hb_codepoint_t *base, hb_codepoint_t *accent) const;
-#ifdef HB_EXPERIMENTAL_API
- HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const;
-#endif
+ HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const;
private:
struct gname_t
@@ -1398,7 +1395,10 @@ struct cff1
DEFINE_SIZE_STATIC (4);
};
-struct cff1_accelerator_t : cff1::accelerator_t {};
+struct cff1_accelerator_t : cff1::accelerator_t {
+ cff1_accelerator_t (hb_face_t *face) : cff1::accelerator_t (face) {}
+};
+
} /* namespace OT */
#endif /* HB_OT_CFF1_TABLE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc b/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc
index 879b7cdb23..817fe064ce 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-cff2-table.cc
@@ -143,30 +143,29 @@ bool OT::cff2::accelerator_t::get_extents (hb_font_t *font,
return true;
}
-#ifdef HB_EXPERIMENTAL_API
struct cff2_path_param_t
{
- cff2_path_param_t (hb_font_t *font_, draw_helper_t &draw_helper_)
+ cff2_path_param_t (hb_font_t *font_, hb_draw_session_t &draw_session_)
{
- draw_helper = &draw_helper_;
+ draw_session = &draw_session_;
font = font_;
}
void move_to (const point_t &p)
- { draw_helper->move_to (font->em_scalef_x (p.x.to_real ()), font->em_scalef_y (p.y.to_real ())); }
+ { draw_session->move_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
void line_to (const point_t &p)
- { draw_helper->line_to (font->em_scalef_x (p.x.to_real ()), font->em_scalef_y (p.y.to_real ())); }
+ { draw_session->line_to (font->em_fscalef_x (p.x.to_real ()), font->em_fscalef_y (p.y.to_real ())); }
void cubic_to (const point_t &p1, const point_t &p2, const point_t &p3)
{
- draw_helper->cubic_to (font->em_scalef_x (p1.x.to_real ()), font->em_scalef_y (p1.y.to_real ()),
- font->em_scalef_x (p2.x.to_real ()), font->em_scalef_y (p2.y.to_real ()),
- font->em_scalef_x (p3.x.to_real ()), font->em_scalef_y (p3.y.to_real ()));
+ draw_session->cubic_to (font->em_fscalef_x (p1.x.to_real ()), font->em_fscalef_y (p1.y.to_real ()),
+ font->em_fscalef_x (p2.x.to_real ()), font->em_fscalef_y (p2.y.to_real ()),
+ font->em_fscalef_x (p3.x.to_real ()), font->em_fscalef_y (p3.y.to_real ()));
}
protected:
- draw_helper_t *draw_helper;
+ hb_draw_session_t *draw_session;
hb_font_t *font;
};
@@ -193,7 +192,7 @@ struct cff2_path_procs_path_t : path_procs_t<cff2_path_procs_path_t, cff2_cs_int
struct cff2_cs_opset_path_t : cff2_cs_opset_t<cff2_cs_opset_path_t, cff2_path_param_t, cff2_path_procs_path_t> {};
-bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const
+bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const
{
#ifdef HB_NO_OT_FONT_CFF
/* XXX Remove check when this code moves to .hh file. */
@@ -206,10 +205,9 @@ bool OT::cff2::accelerator_t::get_path (hb_font_t *font, hb_codepoint_t glyph, d
cff2_cs_interpreter_t<cff2_cs_opset_path_t, cff2_path_param_t> interp;
const byte_str_t str = (*charStrings)[glyph];
interp.env.init (str, *this, fd, font->coords, font->num_coords);
- cff2_path_param_t param (font, draw_helper);
+ cff2_path_param_t param (font, draw_session);
if (unlikely (!interp.interpret (param))) return false;
return true;
}
-#endif
#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh b/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh
index 829217feaa..b77e7f53fa 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cff2-table.hh
@@ -397,7 +397,7 @@ struct cff2
template <typename PRIVOPSET, typename PRIVDICTVAL>
struct accelerator_templ_t
{
- void init (hb_face_t *face)
+ accelerator_templ_t (hb_face_t *face)
{
topDict.init ();
fontDicts.init ();
@@ -412,15 +412,15 @@ struct cff2
const OT::cff2 *cff2 = this->blob->template as<OT::cff2> ();
if (cff2 == &Null (OT::cff2))
- { fini (); return; }
+ goto fail;
{ /* parse top dict */
byte_str_t topDictStr (cff2 + cff2->topDict, cff2->topDictSize);
- if (unlikely (!topDictStr.sanitize (&sc))) { fini (); return; }
+ if (unlikely (!topDictStr.sanitize (&sc))) goto fail;
cff2_top_dict_interpreter_t top_interp;
top_interp.env.init (topDictStr);
topDict.init ();
- if (unlikely (!top_interp.interpret (topDict))) { fini (); return; }
+ if (unlikely (!top_interp.interpret (topDict))) goto fail;
}
globalSubrs = &StructAtOffset<CFF2Subrs> (cff2, cff2->topDict + cff2->topDictSize);
@@ -434,49 +434,55 @@ struct cff2
(globalSubrs == &Null (CFF2Subrs)) || unlikely (!globalSubrs->sanitize (&sc)) ||
(fdArray == &Null (CFF2FDArray)) || unlikely (!fdArray->sanitize (&sc)) ||
(((fdSelect != &Null (CFF2FDSelect)) && unlikely (!fdSelect->sanitize (&sc, fdArray->count)))))
- { fini (); return; }
+ goto fail;
num_glyphs = charStrings->count;
if (num_glyphs != sc.get_num_glyphs ())
- { fini (); return; }
+ goto fail;
fdCount = fdArray->count;
if (!privateDicts.resize (fdCount))
- { fini (); return; }
+ goto fail;
/* parse font dicts and gather private dicts */
for (unsigned int i = 0; i < fdCount; i++)
{
const byte_str_t fontDictStr = (*fdArray)[i];
- if (unlikely (!fontDictStr.sanitize (&sc))) { fini (); return; }
+ if (unlikely (!fontDictStr.sanitize (&sc))) goto fail;
cff2_font_dict_values_t *font;
cff2_font_dict_interpreter_t font_interp;
font_interp.env.init (fontDictStr);
font = fontDicts.push ();
- if (unlikely (font == &Crap (cff2_font_dict_values_t))) { fini (); return; }
+ if (unlikely (font == &Crap (cff2_font_dict_values_t))) goto fail;
font->init ();
- if (unlikely (!font_interp.interpret (*font))) { fini (); return; }
+ if (unlikely (!font_interp.interpret (*font))) goto fail;
const byte_str_t privDictStr (StructAtOffsetOrNull<UnsizedByteStr> (cff2, font->privateDictInfo.offset), font->privateDictInfo.size);
- if (unlikely (!privDictStr.sanitize (&sc))) { fini (); return; }
+ if (unlikely (!privDictStr.sanitize (&sc))) goto fail;
dict_interpreter_t<PRIVOPSET, PRIVDICTVAL, cff2_priv_dict_interp_env_t> priv_interp;
priv_interp.env.init(privDictStr);
privateDicts[i].init ();
- if (unlikely (!priv_interp.interpret (privateDicts[i]))) { fini (); return; }
+ if (unlikely (!priv_interp.interpret (privateDicts[i]))) goto fail;
privateDicts[i].localSubrs = &StructAtOffsetOrNull<CFF2Subrs> (&privDictStr[0], privateDicts[i].subrsOffset);
if (privateDicts[i].localSubrs != &Null (CFF2Subrs) &&
unlikely (!privateDicts[i].localSubrs->sanitize (&sc)))
- { fini (); return; }
+ goto fail;
}
- }
- void fini ()
+
+ return;
+
+ fail:
+ _fini ();
+ }
+ ~accelerator_templ_t () { _fini (); }
+ void _fini ()
{
sc.end_processing ();
topDict.fini ();
- fontDicts.fini_deep ();
- privateDicts.fini_deep ();
+ fontDicts.fini ();
+ privateDicts.fini ();
hb_blob_destroy (blob);
blob = nullptr;
}
@@ -484,32 +490,32 @@ struct cff2
bool is_valid () const { return blob; }
protected:
- hb_blob_t *blob;
+ hb_blob_t *blob = nullptr;
hb_sanitize_context_t sc;
public:
cff2_top_dict_values_t topDict;
- const CFF2Subrs *globalSubrs;
- const CFF2VariationStore *varStore;
- const CFF2CharStrings *charStrings;
- const CFF2FDArray *fdArray;
- const CFF2FDSelect *fdSelect;
- unsigned int fdCount;
+ const CFF2Subrs *globalSubrs = nullptr;
+ const CFF2VariationStore *varStore = nullptr;
+ const CFF2CharStrings *charStrings = nullptr;
+ const CFF2FDArray *fdArray = nullptr;
+ const CFF2FDSelect *fdSelect = nullptr;
+ unsigned int fdCount = 0;
hb_vector_t<cff2_font_dict_values_t> fontDicts;
hb_vector_t<PRIVDICTVAL> privateDicts;
- unsigned int num_glyphs;
+ unsigned int num_glyphs = 0;
};
struct accelerator_t : accelerator_templ_t<cff2_private_dict_opset_t, cff2_private_dict_values_t>
{
+ accelerator_t (hb_face_t *face) : accelerator_templ_t (face) {}
+
HB_INTERNAL bool get_extents (hb_font_t *font,
hb_codepoint_t glyph,
hb_glyph_extents_t *extents) const;
-#ifdef HB_EXPERIMENTAL_API
- HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, draw_helper_t &draw_helper) const;
-#endif
+ HB_INTERNAL bool get_path (hb_font_t *font, hb_codepoint_t glyph, hb_draw_session_t &draw_session) const;
};
typedef accelerator_templ_t<cff2_private_dict_opset_subset_t, cff2_private_dict_values_subset_t> accelerator_subset_t;
@@ -525,7 +531,10 @@ struct cff2
DEFINE_SIZE_STATIC (5);
};
-struct cff2_accelerator_t : cff2::accelerator_t {};
+struct cff2_accelerator_t : cff2::accelerator_t {
+ cff2_accelerator_t (hb_face_t *face) : cff2::accelerator_t (face) {}
+};
+
} /* namespace OT */
#endif /* HB_OT_CFF2_TABLE_HH */
diff --git a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
index d837adc788..fde57cdc5b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-cmap-table.hh
@@ -369,7 +369,6 @@ struct CmapSubtableFormat4
{
accelerator_t () {}
accelerator_t (const CmapSubtableFormat4 *subtable) { init (subtable); }
- ~accelerator_t () { fini (); }
void init (const CmapSubtableFormat4 *subtable)
{
@@ -381,7 +380,6 @@ struct CmapSubtableFormat4
glyphIdArray = idRangeOffset + segCount;
glyphIdArrayLength = (subtable->length - 16 - 8 * segCount) / 2;
}
- void fini () {}
bool get_glyph (hb_codepoint_t codepoint, hb_codepoint_t *glyph) const
{
@@ -1607,7 +1605,7 @@ struct cmap
unsigned format = (this + _.subtable).u.format;
if (format == 12) has_format12 = true;
- const EncodingRecord *table = hb_addressof (_);
+ const EncodingRecord *table = std::addressof (_);
if (_.platformID == 0 && _.encodingID == 3) unicode_bmp = table;
else if (_.platformID == 0 && _.encodingID == 4) unicode_ucs4 = table;
else if (_.platformID == 3 && _.encodingID == 1) ms_bmp = table;
@@ -1665,7 +1663,7 @@ struct cmap
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
this->table = hb_sanitize_context_t ().reference_table<cmap> (face);
bool symbol;
@@ -1700,8 +1698,7 @@ struct cmap
}
}
}
-
- void fini () { this->table.destroy (); }
+ ~accelerator_t () { this->table.destroy (); }
bool get_nominal_glyph (hb_codepoint_t unicode,
hb_codepoint_t *glyph) const
@@ -1863,7 +1860,9 @@ struct cmap
DEFINE_SIZE_ARRAY (4, encodingRecord);
};
-struct cmap_accelerator_t : cmap::accelerator_t {};
+struct cmap_accelerator_t : cmap::accelerator_t {
+ cmap_accelerator_t (hb_face_t *face) : cmap::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
index 14459914ee..23fa56c4f6 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-cbdt-table.hh
@@ -360,6 +360,16 @@ struct IndexSubtable
struct IndexSubtableRecord
{
+ /* XXX Remove this and fix by not inserting it into vector. */
+ IndexSubtableRecord& operator = (const IndexSubtableRecord &o)
+ {
+ firstGlyphIndex = o.firstGlyphIndex;
+ lastGlyphIndex = o.lastGlyphIndex;
+ offsetToSubtable = (unsigned) o.offsetToSubtable;
+ assert (offsetToSubtable.is_null ());
+ return *this;
+ }
+
bool sanitize (hb_sanitize_context_t *c, const void *base) const
{
TRACE_SANITIZE (this);
@@ -809,15 +819,14 @@ struct CBDT
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
- cblc = hb_sanitize_context_t ().reference_table<CBLC> (face);
- cbdt = hb_sanitize_context_t ().reference_table<CBDT> (face);
+ this->cblc = hb_sanitize_context_t ().reference_table<CBLC> (face);
+ this->cbdt = hb_sanitize_context_t ().reference_table<CBDT> (face);
upem = hb_face_get_upem (face);
}
-
- void fini ()
+ ~accelerator_t ()
{
this->cblc.destroy ();
this->cbdt.destroy ();
@@ -978,7 +987,10 @@ CBLC::subset (hb_subset_context_t *c) const
return_trace (CBLC::sink_cbdt (c, &cbdt_prime));
}
-struct CBDT_accelerator_t : CBDT::accelerator_t {};
+struct CBDT_accelerator_t : CBDT::accelerator_t {
+ CBDT_accelerator_t (hb_face_t *face) : CBDT::accelerator_t (face) {}
+};
+
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
index 008422d089..dac755c02c 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-colr-table.hh
@@ -71,7 +71,7 @@ struct hb_colrv1_closure_context_t :
bool paint_visited (const void *paint)
{
hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) paint - (uintptr_t) base);
- if (visited_paint.has (delta))
+ if (visited_paint.in_error() || visited_paint.has (delta))
return true;
visited_paint.add (delta);
@@ -1270,13 +1270,9 @@ struct COLR
struct accelerator_t
{
- accelerator_t () {}
- ~accelerator_t () { fini (); }
-
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{ colr = hb_sanitize_context_t ().reference_table<COLR> (face); }
-
- void fini () { this->colr.destroy (); }
+ ~accelerator_t () { this->colr.destroy (); }
bool is_valid () { return colr.get_blob ()->length; }
@@ -1535,6 +1531,10 @@ struct COLR
DEFINE_SIZE_MIN (14);
};
+struct COLR_accelerator_t : COLR::accelerator_t {
+ COLR_accelerator_t (hb_face_t *face) : COLR::accelerator_t (face) {}
+};
+
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
index ca85ba6ad6..fbaf2ec26b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-colrv1-closure.hh
@@ -43,7 +43,7 @@ HB_INTERNAL void PaintColrLayers::closurev1 (hb_colrv1_closure_context_t* c) con
const LayerList &paint_offset_lists = c->get_colr_table ()->get_layerList ();
for (unsigned i = firstLayerIndex; i < firstLayerIndex + numLayers; i++)
{
- const Paint &paint = hb_addressof (paint_offset_lists) + paint_offset_lists[i];
+ const Paint &paint = std::addressof (paint_offset_lists) + paint_offset_lists[i];
paint.dispatch (c);
}
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh
index d2911f19e6..9741ebd450 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-sbix-table.hh
@@ -202,12 +202,12 @@ struct sbix
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
table = hb_sanitize_context_t ().reference_table<sbix> (face);
num_glyphs = face->get_num_glyphs ();
}
- void fini () { table.destroy (); }
+ ~accelerator_t () { table.destroy (); }
bool has_data () const { return table->has_data (); }
@@ -407,7 +407,10 @@ struct sbix
DEFINE_SIZE_ARRAY (8, strikes);
};
-struct sbix_accelerator_t : sbix::accelerator_t {};
+struct sbix_accelerator_t : sbix::accelerator_t {
+ sbix_accelerator_t (hb_face_t *face) : sbix::accelerator_t (face) {}
+};
+
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh b/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh
index e022ef43b7..fc649f1006 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-color-svg-table.hh
@@ -79,9 +79,9 @@ struct SVG
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{ table = hb_sanitize_context_t ().reference_table<SVG> (face); }
- void fini () { table.destroy (); }
+ ~accelerator_t () { table.destroy (); }
hb_blob_t *reference_blob_for_glyph (hb_codepoint_t glyph_id) const
{
@@ -116,7 +116,9 @@ struct SVG
DEFINE_SIZE_STATIC (10);
};
-struct SVG_accelerator_t : SVG::accelerator_t {};
+struct SVG_accelerator_t : SVG::accelerator_t {
+ SVG_accelerator_t (hb_face_t *face) : SVG::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-color.cc b/thirdparty/harfbuzz/src/hb-ot-color.cc
index 4170b71317..16077765bd 100644
--- a/thirdparty/harfbuzz/src/hb-ot-color.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-color.cc
@@ -90,15 +90,15 @@ hb_ot_color_palette_get_count (hb_face_t *face)
/**
* hb_ot_color_palette_get_name_id:
* @face: #hb_face_t to work upon
- * @palette_index: The index of the color palette
+ * @palette_index: The index of the color palette
*
* Fetches the `name` table Name ID that provides display names for
- * a `CPAL` color palette.
+ * a `CPAL` color palette.
*
* Palette display names can be generic (e.g., "Default") or provide
* specific, themed names (e.g., "Spring", "Summer", "Fall", and "Winter").
*
- * Return value: the Named ID found for the palette.
+ * Return value: the Named ID found for the palette.
* If the requested palette has no name the result is #HB_OT_NAME_ID_INVALID.
*
* Since: 2.1.0
@@ -116,7 +116,7 @@ hb_ot_color_palette_get_name_id (hb_face_t *face,
* @color_index: The index of the color
*
* Fetches the `name` table Name ID that provides display names for
- * the specificed color in a face's `CPAL` color palette.
+ * the specified color in a face's `CPAL` color palette.
*
* Display names can be generic (e.g., "Background") or specific
* (e.g., "Eye color").
@@ -256,6 +256,8 @@ hb_ot_color_has_svg (hb_face_t *face)
*
* Fetches the SVG document for a glyph. The blob may be either plain text or gzip-encoded.
*
+ * If the glyph has no SVG document, the singleton empty blob is returned.
+ *
* Return value: (transfer full): An #hb_blob_t containing the SVG document of the glyph, if available
*
* Since: 2.1.0
@@ -296,6 +298,8 @@ hb_ot_color_has_png (hb_face_t *face)
* as input. To get an optimally sized PNG blob, the UPEM value must be set on the @font
* object. If UPEM is unset, the blob returned will be the largest PNG available.
*
+ * If the glyph has no PNG image, the singleton empty blob is returned.
+ *
* Return value: (transfer full): An #hb_blob_t containing the PNG image for the glyph, if available
*
* Since: 2.1.0
diff --git a/thirdparty/harfbuzz/src/hb-ot-deprecated.h b/thirdparty/harfbuzz/src/hb-ot-deprecated.h
index ce6b6fef11..5192ff73e3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-deprecated.h
+++ b/thirdparty/harfbuzz/src/hb-ot-deprecated.h
@@ -50,6 +50,21 @@ HB_BEGIN_DECLS
*/
#define HB_MATH_GLYPH_PART_FLAG_EXTENDER HB_OT_MATH_GLYPH_PART_FLAG_EXTENDER
+/* https://github.com/harfbuzz/harfbuzz/pull/3417 */
+/**
+ * HB_OT_MATH_SCRIPT:
+ *
+ * Use #HB_SCRIPT_MATH or #HB_OT_TAG_MATH_SCRIPT instead.
+ *
+ * <note>Previous versions of this documentation recommended passing
+ * #HB_OT_MATH_SCRIPT to hb_buffer_set_script() to enable math shaping, but this
+ * usage is no longer supported. Use #HB_SCRIPT_MATH instead.</note>
+ *
+ * Since: 1.3.3
+ * Deprecated: 3.4.0
+ */
+#define HB_OT_MATH_SCRIPT HB_OT_TAG_MATH_SCRIPT
+
/* Like hb_ot_layout_table_find_script, but takes zero-terminated array of scripts to test */
HB_EXTERN HB_DEPRECATED_FOR (hb_ot_layout_table_select_script) hb_bool_t
diff --git a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
index eff09838af..c05034b3bb 100644
--- a/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-face-table-list.hh
@@ -32,6 +32,11 @@
#define HB_OT_FACE_TABLE_LIST_HH
#endif /* HB_OT_FACE_TABLE_LIST_HH */ /* Dummy header guards */
+#ifndef HB_OT_CORE_TABLE
+#define HB_OT_CORE_TABLE(Namespace, Type) HB_OT_TABLE (Namespace, Type)
+#define _HB_OT_CORE_TABLE_UNDEF
+#endif
+
#ifndef HB_OT_ACCELERATOR
#define HB_OT_ACCELERATOR(Namespace, Type) HB_OT_TABLE (Namespace, Type)
#define _HB_OT_ACCELERATOR_UNDEF
@@ -46,7 +51,8 @@
/* OpenType fundamentals. */
-HB_OT_TABLE (OT, head)
+HB_OT_CORE_TABLE (OT, head)
+HB_OT_CORE_TABLE (OT, maxp)
#if !defined(HB_NO_FACE_COLLECT_UNICODES) || !defined(HB_NO_OT_FONT)
HB_OT_ACCELERATOR (OT, cmap)
#endif
@@ -74,6 +80,7 @@ HB_OT_TABLE (OT, VORG)
#endif
/* TrueType outlines. */
+HB_OT_CORE_TABLE (OT, loca) // Also used to determine number of glyphs
HB_OT_ACCELERATOR (OT, glyf)
/* CFF outlines. */
@@ -138,3 +145,7 @@ HB_OT_TABLE (OT, MATH)
#ifdef _HB_OT_ACCELERATOR_UNDEF
#undef HB_OT_ACCELERATOR
#endif
+
+#ifdef _HB_OT_CORE_TABLE_UNDEF
+#undef HB_OT_CORE_TABLE
+#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-face.hh b/thirdparty/harfbuzz/src/hb-ot-face.hh
index e24d380bca..415dae8e20 100644
--- a/thirdparty/harfbuzz/src/hb-ot-face.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-face.hh
@@ -63,10 +63,13 @@ struct hb_ot_face_t
hb_face_t *face; /* MUST be JUST before the lazy loaders. */
#define HB_OT_TABLE(Namespace, Type) \
hb_table_lazy_loader_t<Namespace::Type, HB_OT_TABLE_ORDER (Namespace, Type)> Type;
+#define HB_OT_CORE_TABLE(Namespace, Type) \
+ hb_table_lazy_loader_t<Namespace::Type, HB_OT_TABLE_ORDER (Namespace, Type), true> Type;
#define HB_OT_ACCELERATOR(Namespace, Type) \
hb_face_lazy_loader_t<Namespace::Type##_accelerator_t, HB_OT_TABLE_ORDER (Namespace, Type)> Type;
#include "hb-ot-face-table-list.hh"
#undef HB_OT_ACCELERATOR
+#undef HB_OT_CORE_TABLE
#undef HB_OT_TABLE
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-font.cc b/thirdparty/harfbuzz/src/hb-ot-font.cc
index 9f0359a773..77d3f639db 100644
--- a/thirdparty/harfbuzz/src/hb-ot-font.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-font.cc
@@ -257,6 +257,23 @@ hb_ot_get_font_v_extents (hb_font_t *font,
}
#endif
+#ifndef HB_NO_DRAW
+static void
+hb_ot_get_glyph_shape (hb_font_t *font,
+ void *font_data HB_UNUSED,
+ hb_codepoint_t glyph,
+ hb_draw_funcs_t *draw_funcs, void *draw_data,
+ void *user_data)
+{
+ hb_draw_session_t draw_session (draw_funcs, draw_data, font->slant_xy);
+ if (font->face->table.glyf->get_path (font, glyph, draw_session)) return;
+#ifndef HB_NO_CFF
+ if (font->face->table.cff1->get_path (font, glyph, draw_session)) return;
+ if (font->face->table.cff2->get_path (font, glyph, draw_session)) return;
+#endif
+}
+#endif
+
static inline void free_static_ot_funcs ();
static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot_font_funcs_lazy_loader_t>
@@ -279,6 +296,10 @@ static struct hb_ot_font_funcs_lazy_loader_t : hb_font_funcs_lazy_loader_t<hb_ot
hb_font_funcs_set_glyph_v_origin_func (funcs, hb_ot_get_glyph_v_origin, nullptr, nullptr);
#endif
+#ifndef HB_NO_DRAW
+ hb_font_funcs_set_glyph_shape_func (funcs, hb_ot_get_glyph_shape, nullptr, nullptr);
+#endif
+
hb_font_funcs_set_glyph_extents_func (funcs, hb_ot_get_glyph_extents, nullptr, nullptr);
//hb_font_funcs_set_glyph_contour_point_func (funcs, hb_ot_get_glyph_contour_point, nullptr, nullptr);
diff --git a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
index 6aa34295c7..066e152da3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-glyf-table.hh
@@ -207,8 +207,7 @@ struct glyf
_populate_subset_glyphs (const hb_subset_plan_t *plan,
hb_vector_t<SubsetGlyph> *glyphs /* OUT */) const
{
- OT::glyf::accelerator_t glyf;
- glyf.init (plan->source);
+ OT::glyf::accelerator_t glyf (plan->source);
+ hb_range (plan->num_output_glyphs ())
| hb_map ([&] (hb_codepoint_t new_gid)
@@ -233,8 +232,6 @@ struct glyf
})
| hb_sink (glyphs)
;
-
- glyf.fini ();
}
static bool
@@ -595,7 +592,7 @@ struct glyf
if (unlikely (!header.numberOfContours)) return;
unsigned flags_offset = length (instructions_length ());
- if (unlikely (length (flags_offset + 1) > bytes.length)) return;
+ if (unlikely (flags_offset + 1 > bytes.length)) return;
HBUINT8 &first_flag = (HBUINT8 &) StructAtOffset<HBUINT16> (&bytes, flags_offset);
first_flag = (uint8_t) first_flag | FLAG_OVERLAP_SIMPLE;
@@ -920,7 +917,7 @@ struct glyf
struct accelerator_t
{
- void init (hb_face_t *face_)
+ accelerator_t (hb_face_t *face)
{
short_offset = false;
num_glyphs = 0;
@@ -933,14 +930,13 @@ struct glyf
#ifndef HB_NO_VERTICAL
vmtx = nullptr;
#endif
- face = face_;
const OT::head &head = *face->table.head;
if (head.indexToLocFormat > 1 || head.glyphDataFormat > 0)
/* Unknown format. Leave num_glyphs=0, that takes care of disabling us. */
return;
short_offset = 0 == head.indexToLocFormat;
- loca_table = hb_sanitize_context_t ().reference_table<loca> (face);
+ loca_table = face->table.loca.get_blob (); // Needs no destruct!
glyf_table = hb_sanitize_context_t ().reference_table<glyf> (face);
#ifndef HB_NO_VAR
gvar = face->table.gvar;
@@ -953,10 +949,8 @@ struct glyf
num_glyphs = hb_max (1u, loca_table.get_length () / (short_offset ? 2 : 4)) - 1;
num_glyphs = hb_min (num_glyphs, face->get_num_glyphs ());
}
-
- void fini ()
+ ~accelerator_t ()
{
- loca_table.destroy ();
glyf_table.destroy ();
}
@@ -1157,11 +1151,10 @@ struct glyf
return operation_count;
}
-#ifdef HB_EXPERIMENTAL_API
struct path_builder_t
{
hb_font_t *font;
- draw_helper_t *draw_helper;
+ hb_draw_session_t *draw_session;
struct optional_point_t
{
@@ -1176,10 +1169,10 @@ struct glyf
{ return optional_point_t (x + t * (p.x - x), y + t * (p.y - y)); }
} first_oncurve, first_offcurve, last_offcurve;
- path_builder_t (hb_font_t *font_, draw_helper_t &draw_helper_)
+ path_builder_t (hb_font_t *font_, hb_draw_session_t &draw_session_)
{
font = font_;
- draw_helper = &draw_helper_;
+ draw_session = &draw_session_;
first_oncurve = first_offcurve = last_offcurve = optional_point_t ();
}
@@ -1189,10 +1182,6 @@ struct glyf
* https://stackoverflow.com/a/20772557 */
void consume_point (const contour_point_t &point)
{
- /* Skip empty contours */
- if (unlikely (point.is_end_point && !first_oncurve.has_data && !first_offcurve.has_data))
- return;
-
bool is_on_curve = point.flag & Glyph::FLAG_ON_CURVE;
optional_point_t p (point.x, point.y);
if (!first_oncurve.has_data)
@@ -1200,7 +1189,7 @@ struct glyf
if (is_on_curve)
{
first_oncurve = p;
- draw_helper->move_to (font->em_scalef_x (p.x), font->em_scalef_y (p.y));
+ draw_session->move_to (font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
}
else
{
@@ -1209,7 +1198,7 @@ struct glyf
optional_point_t mid = first_offcurve.lerp (p, .5f);
first_oncurve = mid;
last_offcurve = p;
- draw_helper->move_to (font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
+ draw_session->move_to (font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
}
else
first_offcurve = p;
@@ -1221,22 +1210,22 @@ struct glyf
{
if (is_on_curve)
{
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (p.x), font->em_scalef_y (p.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
last_offcurve = optional_point_t ();
}
else
{
optional_point_t mid = last_offcurve.lerp (p, .5f);
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
last_offcurve = p;
}
}
else
{
if (is_on_curve)
- draw_helper->line_to (font->em_scalef_x (p.x), font->em_scalef_y (p.y));
+ draw_session->line_to (font->em_fscalef_x (p.x), font->em_fscalef_y (p.y));
else
last_offcurve = p;
}
@@ -1247,24 +1236,30 @@ struct glyf
if (first_offcurve.has_data && last_offcurve.has_data)
{
optional_point_t mid = last_offcurve.lerp (first_offcurve, .5f);
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (mid.x), font->em_scalef_y (mid.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (mid.x), font->em_fscalef_y (mid.y));
last_offcurve = optional_point_t ();
/* now check the rest */
}
if (first_offcurve.has_data && first_oncurve.has_data)
- draw_helper->quadratic_to (font->em_scalef_x (first_offcurve.x), font->em_scalef_y (first_offcurve.y),
- font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
+ draw_session->quadratic_to (font->em_fscalef_x (first_offcurve.x), font->em_fscalef_y (first_offcurve.y),
+ font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
else if (last_offcurve.has_data && first_oncurve.has_data)
- draw_helper->quadratic_to (font->em_scalef_x (last_offcurve.x), font->em_scalef_y (last_offcurve.y),
- font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
+ draw_session->quadratic_to (font->em_fscalef_x (last_offcurve.x), font->em_fscalef_y (last_offcurve.y),
+ font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
else if (first_oncurve.has_data)
- draw_helper->line_to (font->em_scalef_x (first_oncurve.x), font->em_scalef_y (first_oncurve.y));
+ draw_session->line_to (font->em_fscalef_x (first_oncurve.x), font->em_fscalef_y (first_oncurve.y));
+ else if (first_offcurve.has_data)
+ {
+ float x = font->em_fscalef_x (first_offcurve.x), y = font->em_fscalef_x (first_offcurve.y);
+ draw_session->move_to (x, y);
+ draw_session->quadratic_to (x, y, x, y);
+ }
/* Getting ready for the next contour */
first_oncurve = first_offcurve = last_offcurve = optional_point_t ();
- draw_helper->end_path ();
+ draw_session->close_path ();
}
}
void points_end () {}
@@ -1274,9 +1269,8 @@ struct glyf
};
bool
- get_path (hb_font_t *font, hb_codepoint_t gid, draw_helper_t &draw_helper) const
- { return get_points (font, gid, path_builder_t (font, draw_helper)); }
-#endif
+ get_path (hb_font_t *font, hb_codepoint_t gid, hb_draw_session_t &draw_session) const
+ { return get_points (font, gid, path_builder_t (font, draw_session)); }
#ifndef HB_NO_VAR
const gvar_accelerator_t *gvar;
@@ -1291,7 +1285,6 @@ struct glyf
unsigned int num_glyphs;
hb_blob_ptr_t<loca> loca_table;
hb_blob_ptr_t<glyf> glyf_table;
- hb_face_t *face;
};
struct SubsetGlyph
@@ -1358,7 +1351,10 @@ struct glyf
* defining it _MIN instead. */
};
-struct glyf_accelerator_t : glyf::accelerator_t {};
+struct glyf_accelerator_t : glyf::accelerator_t {
+ glyf_accelerator_t (hb_face_t *face) : glyf::accelerator_t (face) {}
+};
+
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
index 7d2d2d3eb8..7487e40e6d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-hmtx-table.hh
@@ -28,6 +28,7 @@
#define HB_OT_HMTX_TABLE_HH
#include "hb-open-type.hh"
+#include "hb-ot-maxp-table.hh"
#include "hb-ot-hhea-table.hh"
#include "hb-ot-var-hvar-table.hh"
#include "hb-ot-metrics.hh"
@@ -98,12 +99,12 @@ struct hmtxvmtx
hb_requires (hb_is_iterator (Iterator))>
void serialize (hb_serialize_context_t *c,
Iterator it,
- unsigned num_advances)
+ unsigned num_long_metrics)
{
unsigned idx = 0;
for (auto _ : it)
{
- if (idx < num_advances)
+ if (idx < num_long_metrics)
{
LongMetric lm;
lm.advance = _.first;
@@ -127,9 +128,20 @@ struct hmtxvmtx
T *table_prime = c->serializer->start_embed <T> ();
if (unlikely (!table_prime)) return_trace (false);
- accelerator_t _mtx;
- _mtx.init (c->plan->source);
- unsigned num_advances = _mtx.num_advances_for_subset (c->plan);
+ accelerator_t _mtx (c->plan->source);
+ unsigned num_long_metrics;
+ {
+ /* Determine num_long_metrics to encode. */
+ auto& plan = c->plan;
+ num_long_metrics = plan->num_output_glyphs ();
+ hb_codepoint_t old_gid = 0;
+ unsigned int last_advance = plan->old_gid_for_new_gid (num_long_metrics - 1, &old_gid) ? _mtx.get_advance (old_gid) : 0;
+ while (num_long_metrics > 1 &&
+ last_advance == (plan->old_gid_for_new_gid (num_long_metrics - 2, &old_gid) ? _mtx.get_advance (old_gid) : 0))
+ {
+ num_long_metrics--;
+ }
+ }
auto it =
+ hb_range (c->plan->num_output_glyphs ())
@@ -142,15 +154,13 @@ struct hmtxvmtx
})
;
- table_prime->serialize (c->serializer, it, num_advances);
-
- _mtx.fini ();
+ table_prime->serialize (c->serializer, it, num_long_metrics);
if (unlikely (c->serializer->in_error ()))
return_trace (false);
// Amend header num hmetrics
- if (unlikely (!subset_update_header (c->plan, num_advances)))
+ if (unlikely (!subset_update_header (c->plan, num_long_metrics)))
return_trace (false);
return_trace (true);
@@ -160,41 +170,51 @@ struct hmtxvmtx
{
friend struct hmtxvmtx;
- void init (hb_face_t *face,
- unsigned int default_advance_ = 0)
+ accelerator_t (hb_face_t *face,
+ unsigned int default_advance_ = 0)
{
+ table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
+ var_table = hb_sanitize_context_t ().reference_table<HVARVVAR> (face, T::variationsTag);
+
default_advance = default_advance_ ? default_advance_ : hb_face_get_upem (face);
- num_advances = T::is_horizontal ?
- face->table.hhea->numberOfLongMetrics :
+ /* Populate count variables and sort them out as we go */
+
+ unsigned int len = table.get_length ();
+ if (len & 1)
+ len--;
+
+ num_long_metrics = T::is_horizontal ?
+ face->table.hhea->numberOfLongMetrics :
#ifndef HB_NO_VERTICAL
- face->table.vhea->numberOfLongMetrics
+ face->table.vhea->numberOfLongMetrics
#else
- 0
+ 0
#endif
- ;
+ ;
+ if (unlikely (num_long_metrics * 4 > len))
+ num_long_metrics = len / 4;
+ len -= num_long_metrics * 4;
- table = hb_sanitize_context_t ().reference_table<hmtxvmtx> (face, T::tableTag);
+ num_bearings = face->table.maxp->get_num_glyphs ();
- /* Cap num_metrics() and num_advances() based on table length. */
- unsigned int len = table.get_length ();
- if (unlikely (num_advances * 4 > len))
- num_advances = len / 4;
- num_metrics = num_advances + (len - 4 * num_advances) / 2;
+ if (unlikely (num_bearings < num_long_metrics))
+ num_bearings = num_long_metrics;
+ if (unlikely ((num_bearings - num_long_metrics) * 2 > len))
+ num_bearings = num_long_metrics + len / 2;
+ len -= (num_bearings - num_long_metrics) * 2;
- /* We MUST set num_metrics to zero if num_advances is zero.
+ /* We MUST set num_bearings to zero if num_long_metrics is zero.
* Our get_advance() depends on that. */
- if (unlikely (!num_advances))
- {
- num_metrics = num_advances = 0;
- table.destroy ();
- table = hb_blob_get_empty ();
- }
+ if (unlikely (!num_long_metrics))
+ num_bearings = num_long_metrics = 0;
- var_table = hb_sanitize_context_t ().reference_table<HVARVVAR> (face, T::variationsTag);
+ num_advances = num_bearings + len / 2;
+ num_glyphs = face->get_num_glyphs ();
+ if (num_glyphs < num_advances)
+ num_glyphs = num_advances;
}
-
- void fini ()
+ ~accelerator_t ()
{
table.destroy ();
var_table.destroy ();
@@ -202,14 +222,14 @@ struct hmtxvmtx
int get_side_bearing (hb_codepoint_t glyph) const
{
- if (glyph < num_advances)
+ if (glyph < num_long_metrics)
return table->longMetricZ[glyph].sb;
- if (unlikely (glyph >= num_metrics))
+ if (unlikely (glyph >= num_bearings))
return 0;
- const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_advances];
- return bearings[glyph - num_advances];
+ const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
+ return bearings[glyph - num_long_metrics];
}
int get_side_bearing (hb_font_t *font, hb_codepoint_t glyph) const
@@ -217,7 +237,7 @@ struct hmtxvmtx
int side_bearing = get_side_bearing (glyph);
#ifndef HB_NO_VAR
- if (unlikely (glyph >= num_metrics) || !font->num_coords)
+ if (unlikely (glyph >= num_bearings) || !font->num_coords)
return side_bearing;
if (var_table.get_length ())
@@ -231,18 +251,35 @@ struct hmtxvmtx
unsigned int get_advance (hb_codepoint_t glyph) const
{
- if (unlikely (glyph >= num_metrics))
- {
- /* If num_metrics is zero, it means we don't have the metrics table
- * for this direction: return default advance. Otherwise, it means that the
- * glyph index is out of bound: return zero. */
- if (num_metrics)
- return 0;
- else
- return default_advance;
- }
+ /* OpenType case. */
+ if (glyph < num_bearings)
+ return table->longMetricZ[hb_min (glyph, (uint32_t) num_long_metrics - 1)].advance;
+
+ /* If num_advances is zero, it means we don't have the metrics table
+ * for this direction: return default advance. Otherwise, there's a
+ * well-defined answer. */
+ if (unlikely (!num_advances))
+ return default_advance;
- return table->longMetricZ[hb_min (glyph, (uint32_t) num_advances - 1)].advance;
+#ifdef HB_NO_BORING_EXPANSION
+ return 0;
+#endif
+
+ if (unlikely (glyph >= num_glyphs))
+ return 0;
+
+ /* num_bearings <= glyph < num_glyphs;
+ * num_bearings <= num_advances */
+
+ /* TODO Optimize */
+
+ if (num_bearings == num_advances)
+ return get_advance (num_bearings - 1);
+
+ const FWORD *bearings = (const FWORD *) &table->longMetricZ[num_long_metrics];
+ const UFWORD *advances = (const UFWORD *) &bearings[num_bearings - num_long_metrics];
+
+ return advances[hb_min (glyph - num_bearings, num_advances - num_bearings - 1)];
}
unsigned int get_advance (hb_codepoint_t glyph,
@@ -251,7 +288,7 @@ struct hmtxvmtx
unsigned int advance = get_advance (glyph);
#ifndef HB_NO_VAR
- if (unlikely (glyph >= num_metrics) || !font->num_coords)
+ if (unlikely (glyph >= num_bearings) || !font->num_coords)
return advance;
if (var_table.get_length ())
@@ -263,35 +300,13 @@ struct hmtxvmtx
#endif
}
- unsigned int num_advances_for_subset (const hb_subset_plan_t *plan) const
- {
- unsigned int num_advances = plan->num_output_glyphs ();
- unsigned int last_advance = _advance_for_new_gid (plan,
- num_advances - 1);
- while (num_advances > 1 &&
- last_advance == _advance_for_new_gid (plan,
- num_advances - 2))
- {
- num_advances--;
- }
-
- return num_advances;
- }
-
- private:
- unsigned int _advance_for_new_gid (const hb_subset_plan_t *plan,
- hb_codepoint_t new_gid) const
- {
- hb_codepoint_t old_gid;
- if (!plan->old_gid_for_new_gid (new_gid, &old_gid))
- return 0;
-
- return get_advance (old_gid);
- }
-
protected:
- unsigned int num_metrics;
- unsigned int num_advances;
+ // 0 <= num_long_metrics <= num_bearings <= num_advances <= num_glyphs
+ unsigned num_long_metrics;
+ unsigned num_bearings;
+ unsigned num_advances;
+ unsigned num_glyphs;
+
unsigned int default_advance;
private:
@@ -323,6 +338,8 @@ struct hmtxvmtx
* the end. This allows a monospaced
* font to vary the side bearing
* values for each glyph. */
+/*UnsizedArrayOf<UFWORD>advancesX;*/
+ /* TODO Document. */
public:
DEFINE_SIZE_ARRAY (0, longMetricZ);
};
@@ -338,8 +355,12 @@ struct vmtx : hmtxvmtx<vmtx, vhea> {
static constexpr bool is_horizontal = false;
};
-struct hmtx_accelerator_t : hmtx::accelerator_t {};
-struct vmtx_accelerator_t : vmtx::accelerator_t {};
+struct hmtx_accelerator_t : hmtx::accelerator_t {
+ hmtx_accelerator_t (hb_face_t *face) : hmtx::accelerator_t (face) {}
+};
+struct vmtx_accelerator_t : vmtx::accelerator_t {
+ vmtx_accelerator_t (hb_face_t *face) : vmtx::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
index 4fb1893435..60a1906155 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-common.hh
@@ -128,7 +128,7 @@ struct hb_prune_langsys_context_t
bool visited (const T *p, hb_set_t &visited_set)
{
hb_codepoint_t delta = (hb_codepoint_t) ((uintptr_t) p - (uintptr_t) table);
- if (visited_set.has (delta))
+ if (visited_set.in_error () || visited_set.has (delta))
return true;
visited_set.add (delta);
@@ -655,7 +655,6 @@ struct LangSys
void collect_features (hb_prune_langsys_context_t *c) const
{
if (!has_required_feature () && !get_feature_count ()) return;
- if (c->visitedLangsys (this)) return;
if (has_required_feature () &&
c->duplicate_feature_map->has (reqFeatureIndex))
c->new_feature_indexes->add (get_required_feature_index ());
@@ -750,11 +749,15 @@ struct Script
{
//only collect features from non-redundant langsys
const LangSys& d = get_default_lang_sys ();
- d.collect_features (c);
+ if (!c->visitedLangsys (&d)) {
+ d.collect_features (c);
+ }
for (auto _ : + hb_zip (langSys, hb_range (langsys_count)))
{
+
const LangSys& l = this+_.first.offset;
+ if (c->visitedLangsys (&l)) continue;
if (l.compare (d, c->duplicate_feature_map)) continue;
l.collect_features (c);
@@ -766,6 +769,7 @@ struct Script
for (auto _ : + hb_zip (langSys, hb_range (langsys_count)))
{
const LangSys& l = this+_.first.offset;
+ if (c->visitedLangsys (&l)) continue;
l.collect_features (c);
c->script_langsys_map->get (script_index)->add (_.second);
}
@@ -845,7 +849,7 @@ struct FeatureParamsSize
if (unlikely (!c->check_struct (this))) return_trace (false);
/* This subtable has some "history", if you will. Some earlier versions of
- * Adobe tools calculated the offset of the FeatureParams sutable from the
+ * Adobe tools calculated the offset of the FeatureParams subtable from the
* beginning of the FeatureList table! Now, that is dealt with in the
* Feature implementation. But we still need to be able to tell junk from
* real data. Note: We don't check that the nameID actually exists.
@@ -2926,8 +2930,6 @@ struct VariationStore
hb_vector_t<hb_inc_bimap_t> inner_maps;
inner_maps.resize ((unsigned) dataSets.len);
- for (unsigned i = 0; i < inner_maps.length; i++)
- inner_maps[i].init ();
for (unsigned idx : c->plan->layout_variation_indices->iter ())
{
@@ -2935,18 +2937,11 @@ struct VariationStore
uint16_t minor = idx & 0xFFFF;
if (major >= inner_maps.length)
- {
- for (unsigned i = 0; i < inner_maps.length; i++)
- inner_maps[i].fini ();
return_trace (false);
- }
inner_maps[major].add (minor);
}
varstore_prime->serialize (c->serializer, this, inner_maps.as_array ());
- for (unsigned i = 0; i < inner_maps.length; i++)
- inner_maps[i].fini ();
-
return_trace (
!c->serializer->in_error()
&& varstore_prime->dataSets);
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
index aea644f3e1..a76d644c4b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gdef-table.hh
@@ -585,17 +585,16 @@ struct GDEF
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
- this->table = hb_sanitize_context_t ().reference_table<GDEF> (face);
- if (unlikely (this->table->is_blocklisted (this->table.get_blob (), face)))
+ table = hb_sanitize_context_t ().reference_table<GDEF> (face);
+ if (unlikely (table->is_blocklisted (table.get_blob (), face)))
{
- hb_blob_destroy (this->table.get_blob ());
- this->table = hb_blob_get_empty ();
+ hb_blob_destroy (table.get_blob ());
+ table = hb_blob_get_empty ();
}
}
-
- void fini () { this->table.destroy (); }
+ ~accelerator_t () { table.destroy (); }
hb_blob_ptr_t<GDEF> table;
};
@@ -715,7 +714,9 @@ struct GDEF
DEFINE_SIZE_MIN (12);
};
-struct GDEF_accelerator_t : GDEF::accelerator_t {};
+struct GDEF_accelerator_t : GDEF::accelerator_t {
+ GDEF_accelerator_t (hb_face_t *face) : GDEF::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
index 6db3e08940..2f9186a2a7 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gpos-table.hh
@@ -706,7 +706,7 @@ struct MarkArray : Array16Of<MarkRecord> /* Array of MarkRecords--in Coverage or
float mark_x, mark_y, base_x, base_y;
- buffer->unsafe_to_break (glyph_pos, buffer->idx);
+ buffer->unsafe_to_break (glyph_pos, buffer->idx + 1);
mark_anchor.get_anchor (c, buffer->cur().codepoint, &mark_x, &mark_y);
glyph_anchor.get_anchor (c, buffer->info[glyph_pos].codepoint, &base_x, &base_y);
@@ -1235,6 +1235,7 @@ struct PairSet
buffer->idx = pos;
return_trace (true);
}
+ buffer->unsafe_to_concat (buffer->idx, pos + 1);
return_trace (false);
}
@@ -1362,7 +1363,12 @@ struct PairPosFormat1
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
skippy_iter.reset (buffer->idx, 1);
- if (!skippy_iter.next ()) return_trace (false);
+ unsigned unsafe_to;
+ if (!skippy_iter.next (&unsafe_to))
+ {
+ buffer->unsafe_to_concat (buffer->idx, unsafe_to);
+ return_trace (false);
+ }
return_trace ((this+pairSet[index]).apply (c, valueFormat, skippy_iter.idx));
}
@@ -1555,7 +1561,12 @@ struct PairPosFormat2
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
skippy_iter.reset (buffer->idx, 1);
- if (!skippy_iter.next ()) return_trace (false);
+ unsigned unsafe_to;
+ if (!skippy_iter.next (&unsafe_to))
+ {
+ buffer->unsafe_to_concat (buffer->idx, unsafe_to);
+ return_trace (false);
+ }
unsigned int len1 = valueFormat1.get_len ();
unsigned int len2 = valueFormat2.get_len ();
@@ -1563,13 +1574,89 @@ struct PairPosFormat2
unsigned int klass1 = (this+classDef1).get_class (buffer->cur().codepoint);
unsigned int klass2 = (this+classDef2).get_class (buffer->info[skippy_iter.idx].codepoint);
- if (unlikely (klass1 >= class1Count || klass2 >= class2Count)) return_trace (false);
+ if (unlikely (klass1 >= class1Count || klass2 >= class2Count))
+ {
+ buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
+ return_trace (false);
+ }
const Value *v = &values[record_len * (klass1 * class2Count + klass2)];
- bool applied_first = valueFormat1.apply_value (c, this, v, buffer->cur_pos());
- bool applied_second = valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
+
+ bool applied_first = false, applied_second = false;
+
+
+ /* Isolate simple kerning and apply it half to each side.
+ * Results in better cursor positinoing / underline drawing.
+ *
+ * Disabled, because causes issues... :-(
+ * https://github.com/harfbuzz/harfbuzz/issues/3408
+ * https://github.com/harfbuzz/harfbuzz/pull/3235#issuecomment-1029814978
+ */
+#ifndef HB_SPLIT_KERN
+ if (0)
+#endif
+ {
+ if (!len2)
+ {
+ const hb_direction_t dir = buffer->props.direction;
+ const bool horizontal = HB_DIRECTION_IS_HORIZONTAL (dir);
+ const bool backward = HB_DIRECTION_IS_BACKWARD (dir);
+ unsigned mask = horizontal ? ValueFormat::xAdvance : ValueFormat::yAdvance;
+ if (backward)
+ mask |= mask >> 2; /* Add eg. xPlacement in RTL. */
+ /* Add Devices. */
+ mask |= mask << 4;
+
+ if (valueFormat1 & ~mask)
+ goto bail;
+
+ /* Is simple kern. Apply value on an empty position slot,
+ * then split it between sides. */
+
+ hb_glyph_position_t pos{};
+ if (valueFormat1.apply_value (c, this, v, pos))
+ {
+ hb_position_t *src = &pos.x_advance;
+ hb_position_t *dst1 = &buffer->cur_pos().x_advance;
+ hb_position_t *dst2 = &buffer->pos[skippy_iter.idx].x_advance;
+ unsigned i = horizontal ? 0 : 1;
+
+ hb_position_t kern = src[i];
+ hb_position_t kern1 = kern >> 1;
+ hb_position_t kern2 = kern - kern1;
+
+ if (!backward)
+ {
+ dst1[i] += kern1;
+ dst2[i] += kern2;
+ dst2[i + 2] += kern2;
+ }
+ else
+ {
+ dst1[i] += kern1;
+ dst1[i + 2] += src[i + 2] - kern2;
+ dst2[i] += kern2;
+ }
+
+ applied_first = applied_second = kern != 0;
+ goto success;
+ }
+ goto boring;
+ }
+ }
+ bail:
+
+
+ applied_first = valueFormat1.apply_value (c, this, v, buffer->cur_pos());
+ applied_second = valueFormat2.apply_value (c, this, v + len1, buffer->pos[skippy_iter.idx]);
+
+ success:
if (applied_first || applied_second)
buffer->unsafe_to_break (buffer->idx, skippy_iter.idx + 1);
+ else
+ boring:
+ buffer->unsafe_to_concat (buffer->idx, skippy_iter.idx + 1);
+
buffer->idx = skippy_iter.idx;
if (len2)
@@ -1799,10 +1886,19 @@ struct CursivePosFormat1
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
skippy_iter.reset (buffer->idx, 1);
- if (!skippy_iter.prev ()) return_trace (false);
+ unsigned unsafe_from;
+ if (!skippy_iter.prev (&unsafe_from))
+ {
+ buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
+ return_trace (false);
+ }
const EntryExitRecord &prev_record = entryExitRecord[(this+coverage).get_coverage (buffer->info[skippy_iter.idx].codepoint)];
- if (!prev_record.exitAnchor) return_trace (false);
+ if (!prev_record.exitAnchor)
+ {
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
+ return_trace (false);
+ }
unsigned int i = skippy_iter.idx;
unsigned int j = buffer->idx;
@@ -2066,7 +2162,13 @@ struct MarkBasePosFormat1
skippy_iter.reset (buffer->idx, 1);
skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
do {
- if (!skippy_iter.prev ()) return_trace (false);
+ unsigned unsafe_from;
+ if (!skippy_iter.prev (&unsafe_from))
+ {
+ buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
+ return_trace (false);
+ }
+
/* We only want to attach to the first of a MultipleSubst sequence.
* https://github.com/harfbuzz/harfbuzz/issues/740
* Reject others...
@@ -2089,7 +2191,11 @@ struct MarkBasePosFormat1
//if (!_hb_glyph_info_is_base_glyph (&buffer->info[skippy_iter.idx])) { return_trace (false); }
unsigned int base_index = (this+baseCoverage).get_coverage (buffer->info[skippy_iter.idx].codepoint);
- if (base_index == NOT_COVERED) return_trace (false);
+ if (base_index == NOT_COVERED)
+ {
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
+ return_trace (false);
+ }
return_trace ((this+markArray).apply (c, mark_index, base_index, this+baseArray, classCount, skippy_iter.idx));
}
@@ -2320,21 +2426,34 @@ struct MarkLigPosFormat1
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
skippy_iter.reset (buffer->idx, 1);
skippy_iter.set_lookup_props (LookupFlag::IgnoreMarks);
- if (!skippy_iter.prev ()) return_trace (false);
+ unsigned unsafe_from;
+ if (!skippy_iter.prev (&unsafe_from))
+ {
+ buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
+ return_trace (false);
+ }
/* Checking that matched glyph is actually a ligature by GDEF is too strong; disabled */
//if (!_hb_glyph_info_is_ligature (&buffer->info[skippy_iter.idx])) { return_trace (false); }
unsigned int j = skippy_iter.idx;
unsigned int lig_index = (this+ligatureCoverage).get_coverage (buffer->info[j].codepoint);
- if (lig_index == NOT_COVERED) return_trace (false);
+ if (lig_index == NOT_COVERED)
+ {
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
+ return_trace (false);
+ }
const LigatureArray& lig_array = this+ligatureArray;
const LigatureAttach& lig_attach = lig_array[lig_index];
/* Find component to attach to */
unsigned int comp_count = lig_attach.rows;
- if (unlikely (!comp_count)) return_trace (false);
+ if (unlikely (!comp_count))
+ {
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
+ return_trace (false);
+ }
/* We must now check whether the ligature ID of the current mark glyph
* is identical to the ligature ID of the found ligature. If yes, we
@@ -2517,9 +2636,18 @@ struct MarkMarkPosFormat1
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_input;
skippy_iter.reset (buffer->idx, 1);
skippy_iter.set_lookup_props (c->lookup_props & ~LookupFlag::IgnoreFlags);
- if (!skippy_iter.prev ()) return_trace (false);
+ unsigned unsafe_from;
+ if (!skippy_iter.prev (&unsafe_from))
+ {
+ buffer->unsafe_to_concat_from_outbuffer (unsafe_from, buffer->idx + 1);
+ return_trace (false);
+ }
- if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx])) { return_trace (false); }
+ if (!_hb_glyph_info_is_mark (&buffer->info[skippy_iter.idx]))
+ {
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
+ return_trace (false);
+ }
unsigned int j = skippy_iter.idx;
@@ -2544,11 +2672,16 @@ struct MarkMarkPosFormat1
}
/* Didn't match. */
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
return_trace (false);
good:
unsigned int mark2_index = (this+mark2Coverage).get_coverage (buffer->info[j].codepoint);
- if (mark2_index == NOT_COVERED) return_trace (false);
+ if (mark2_index == NOT_COVERED)
+ {
+ buffer->unsafe_to_concat_from_outbuffer (skippy_iter.idx, buffer->idx + 1);
+ return_trace (false);
+ }
return_trace ((this+mark1Array).apply (c, mark1_index, mark2_index, this+mark2Array, classCount, j));
}
@@ -2951,7 +3084,7 @@ GPOS::position_finish_advances (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer H
}
void
-GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
+GPOS::position_finish_offsets (hb_font_t *font, hb_buffer_t *buffer)
{
_hb_buffer_assert_gsubgpos_vars (buffer);
@@ -2961,12 +3094,21 @@ GPOS::position_finish_offsets (hb_font_t *font HB_UNUSED, hb_buffer_t *buffer)
/* Handle attachments */
if (buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GPOS_ATTACHMENT)
- for (unsigned int i = 0; i < len; i++)
+ for (unsigned i = 0; i < len; i++)
propagate_attachment_offsets (pos, len, i, direction);
+
+ if (unlikely (font->slant))
+ {
+ for (unsigned i = 0; i < len; i++)
+ if (unlikely (pos[i].y_offset))
+ pos[i].x_offset += _hb_roundf (font->slant_xy * pos[i].y_offset);
+ }
}
-struct GPOS_accelerator_t : GPOS::accelerator_t {};
+struct GPOS_accelerator_t : GPOS::accelerator_t {
+ GPOS_accelerator_t (hb_face_t *face) : GPOS::accelerator_t (face) {}
+};
/* Out-of-class implementation for methods recursing */
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
index b7ce30135e..0b0bc547bd 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsub-table.hh
@@ -826,22 +826,25 @@ struct Ligature
unsigned int total_component_count = 0;
- unsigned int match_length = 0;
+ unsigned int match_end = 0;
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
if (likely (!match_input (c, count,
&component[1],
match_glyph,
nullptr,
- &match_length,
+ &match_end,
match_positions,
&total_component_count)))
+ {
+ c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
return_trace (false);
+ }
ligate_input (c,
count,
match_positions,
- match_length,
+ match_end,
ligGlyph,
total_component_count);
@@ -1296,7 +1299,7 @@ struct ReverseChainSingleSubstFormat1
match_lookahead (c,
lookahead.len, (HBUINT16 *) lookahead.arrayZ,
match_coverage, this,
- 1, &end_index))
+ c->buffer->idx + 1, &end_index))
{
c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
c->replace_glyph_inplace (substitute[index]);
@@ -1305,8 +1308,11 @@ struct ReverseChainSingleSubstFormat1
* calls us through a Context lookup. */
return_trace (true);
}
-
- return_trace (false);
+ else
+ {
+ c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
+ return_trace (false);
+ }
}
template<typename Iterator,
@@ -1739,7 +1745,9 @@ struct GSUB : GSUBGPOS
};
-struct GSUB_accelerator_t : GSUB::accelerator_t {};
+struct GSUB_accelerator_t : GSUB::accelerator_t {
+ GSUB_accelerator_t (hb_face_t *face) : GSUB::accelerator_t (face) {}
+};
/* Out-of-class implementation for methods recursing */
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
index 191d3bebc5..65de131f85 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout-gsubgpos.hh
@@ -125,24 +125,31 @@ struct hb_closure_context_t :
hb_set_t *covered_glyph_set = done_lookups_glyph_set->get (lookup_index);
if (unlikely (covered_glyph_set->in_error ()))
return true;
- if (parent_active_glyphs ()->is_subset (*covered_glyph_set))
+ if (parent_active_glyphs ().is_subset (*covered_glyph_set))
return true;
- hb_set_union (covered_glyph_set, parent_active_glyphs ());
+ covered_glyph_set->union_ (parent_active_glyphs ());
return false;
}
- hb_set_t* parent_active_glyphs ()
+ const hb_set_t& previous_parent_active_glyphs () {
+ if (active_glyphs_stack.length <= 1)
+ return *glyphs;
+
+ return active_glyphs_stack[active_glyphs_stack.length - 2];
+ }
+
+ const hb_set_t& parent_active_glyphs ()
{
- if (active_glyphs_stack.length < 1)
- return glyphs;
+ if (!active_glyphs_stack)
+ return *glyphs;
return active_glyphs_stack.tail ();
}
- void push_cur_active_glyphs (hb_set_t* cur_active_glyph_set)
+ hb_set_t& push_cur_active_glyphs ()
{
- active_glyphs_stack.push (cur_active_glyph_set);
+ return *active_glyphs_stack.push ();
}
bool pop_cur_done_glyphs ()
@@ -156,29 +163,24 @@ struct hb_closure_context_t :
hb_face_t *face;
hb_set_t *glyphs;
- hb_set_t *cur_intersected_glyphs;
hb_set_t output[1];
- hb_vector_t<hb_set_t *> active_glyphs_stack;
+ hb_vector_t<hb_set_t> active_glyphs_stack;
recurse_func_t recurse_func;
unsigned int nesting_level_left;
hb_closure_context_t (hb_face_t *face_,
hb_set_t *glyphs_,
- hb_set_t *cur_intersected_glyphs_,
hb_map_t *done_lookups_glyph_count_,
hb_hashmap_t<unsigned, hb_set_t *> *done_lookups_glyph_set_,
unsigned int nesting_level_left_ = HB_MAX_NESTING_LEVEL) :
face (face_),
glyphs (glyphs_),
- cur_intersected_glyphs (cur_intersected_glyphs_),
recurse_func (nullptr),
nesting_level_left (nesting_level_left_),
done_lookups_glyph_count (done_lookups_glyph_count_),
done_lookups_glyph_set (done_lookups_glyph_set_),
lookup_count (0)
- {
- push_cur_active_glyphs (glyphs_);
- }
+ {}
~hb_closure_context_t () { flush (); }
@@ -186,11 +188,11 @@ struct hb_closure_context_t :
void flush ()
{
- hb_set_del_range (output, face->get_num_glyphs (), HB_SET_VALUE_INVALID); /* Remove invalid glyphs. */
- hb_set_union (glyphs, output);
- hb_set_clear (output);
+ output->del_range (face->get_num_glyphs (), HB_SET_VALUE_INVALID); /* Remove invalid glyphs. */
+ glyphs->union_ (*output);
+ output->clear ();
active_glyphs_stack.pop ();
- active_glyphs_stack.fini ();
+ active_glyphs_stack.reset ();
}
private:
@@ -520,7 +522,7 @@ struct hb_ot_apply_context_t :
may_skip (const hb_glyph_info_t &info) const
{ return matcher.may_skip (c, info); }
- bool next ()
+ bool next (unsigned *unsafe_to = nullptr)
{
assert (num_items > 0);
while (idx + num_items < end)
@@ -543,11 +545,17 @@ struct hb_ot_apply_context_t :
}
if (skip == matcher_t::SKIP_NO)
+ {
+ if (unsafe_to)
+ *unsafe_to = idx + 1;
return false;
+ }
}
+ if (unsafe_to)
+ *unsafe_to = end;
return false;
}
- bool prev ()
+ bool prev (unsigned *unsafe_from = nullptr)
{
assert (num_items > 0);
while (idx > num_items - 1)
@@ -570,8 +578,14 @@ struct hb_ot_apply_context_t :
}
if (skip == matcher_t::SKIP_NO)
+ {
+ if (unsafe_from)
+ *unsafe_from = hb_max (1u, idx) - 1u;
return false;
+ }
}
+ if (unsafe_from)
+ *unsafe_from = 0;
return false;
}
@@ -712,53 +726,60 @@ struct hb_ot_apply_context_t :
return true;
}
- void _set_glyph_props (hb_codepoint_t glyph_index,
+ void _set_glyph_class (hb_codepoint_t glyph_index,
unsigned int class_guess = 0,
bool ligature = false,
bool component = false) const
{
- unsigned int add_in = _hb_glyph_info_get_glyph_props (&buffer->cur()) &
- HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
- add_in |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
+ unsigned int props = _hb_glyph_info_get_glyph_props (&buffer->cur());
+ props |= HB_OT_LAYOUT_GLYPH_PROPS_SUBSTITUTED;
if (ligature)
{
- add_in |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
+ props |= HB_OT_LAYOUT_GLYPH_PROPS_LIGATED;
/* In the only place that the MULTIPLIED bit is used, Uniscribe
* seems to only care about the "last" transformation between
* Ligature and Multiple substitutions. Ie. if you ligate, expand,
* and ligate again, it forgives the multiplication and acts as
* if only ligation happened. As such, clear MULTIPLIED bit.
*/
- add_in &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
+ props &= ~HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
}
if (component)
- add_in |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
+ props |= HB_OT_LAYOUT_GLYPH_PROPS_MULTIPLIED;
if (likely (has_glyph_classes))
- _hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | gdef.get_glyph_props (glyph_index));
+ {
+ props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
+ _hb_glyph_info_set_glyph_props (&buffer->cur(), props | gdef.get_glyph_props (glyph_index));
+ }
else if (class_guess)
- _hb_glyph_info_set_glyph_props (&buffer->cur(), add_in | class_guess);
+ {
+ props &= HB_OT_LAYOUT_GLYPH_PROPS_PRESERVE;
+ _hb_glyph_info_set_glyph_props (&buffer->cur(), props | class_guess);
+ }
+ else
+ _hb_glyph_info_set_glyph_props (&buffer->cur(), props);
}
void replace_glyph (hb_codepoint_t glyph_index) const
{
- _set_glyph_props (glyph_index);
+ _set_glyph_class (glyph_index);
(void) buffer->replace_glyph (glyph_index);
}
void replace_glyph_inplace (hb_codepoint_t glyph_index) const
{
- _set_glyph_props (glyph_index);
+ _set_glyph_class (glyph_index);
buffer->cur().codepoint = glyph_index;
}
void replace_glyph_with_ligature (hb_codepoint_t glyph_index,
unsigned int class_guess) const
{
- _set_glyph_props (glyph_index, class_guess, true);
+ _set_glyph_class (glyph_index, class_guess, true);
(void) buffer->replace_glyph (glyph_index);
}
void output_glyph_for_component (hb_codepoint_t glyph_index,
unsigned int class_guess) const
{
- _set_glyph_props (glyph_index, class_guess, false, true);
+ _set_glyph_class (glyph_index, class_guess, false, true);
(void) buffer->output_glyph (glyph_index);
}
};
@@ -948,7 +969,7 @@ static inline bool match_input (hb_ot_apply_context_t *c,
const HBUINT16 input[], /* Array of input values--start with second glyph */
match_func_t match_func,
const void *match_data,
- unsigned int *end_offset,
+ unsigned int *end_position,
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH],
unsigned int *p_total_component_count = nullptr)
{
@@ -1001,7 +1022,12 @@ static inline bool match_input (hb_ot_apply_context_t *c,
match_positions[0] = buffer->idx;
for (unsigned int i = 1; i < count; i++)
{
- if (!skippy_iter.next ()) return_trace (false);
+ unsigned unsafe_to;
+ if (!skippy_iter.next (&unsafe_to))
+ {
+ *end_position = unsafe_to;
+ return_trace (false);
+ }
match_positions[i] = skippy_iter.idx;
@@ -1055,7 +1081,7 @@ static inline bool match_input (hb_ot_apply_context_t *c,
total_component_count += _hb_glyph_info_get_lig_num_comps (&buffer->info[skippy_iter.idx]);
}
- *end_offset = skippy_iter.idx - buffer->idx + 1;
+ *end_position = skippy_iter.idx + 1;
if (p_total_component_count)
*p_total_component_count = total_component_count;
@@ -1065,7 +1091,7 @@ static inline bool match_input (hb_ot_apply_context_t *c,
static inline bool ligate_input (hb_ot_apply_context_t *c,
unsigned int count, /* Including the first glyph */
const unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
- unsigned int match_length,
+ unsigned int match_end,
hb_codepoint_t lig_glyph,
unsigned int total_component_count)
{
@@ -1073,7 +1099,7 @@ static inline bool ligate_input (hb_ot_apply_context_t *c,
hb_buffer_t *buffer = c->buffer;
- buffer->merge_clusters (buffer->idx, buffer->idx + match_length);
+ buffer->merge_clusters (buffer->idx, match_end);
/* - If a base and one or more marks ligate, consider that as a base, NOT
* ligature, such that all following marks can still attach to it.
@@ -1190,11 +1216,16 @@ static inline bool match_backtrack (hb_ot_apply_context_t *c,
skippy_iter.set_match_func (match_func, match_data, backtrack);
for (unsigned int i = 0; i < count; i++)
- if (!skippy_iter.prev ())
+ {
+ unsigned unsafe_from;
+ if (!skippy_iter.prev (&unsafe_from))
+ {
+ *match_start = unsafe_from;
return_trace (false);
+ }
+ }
*match_start = skippy_iter.idx;
-
return_trace (true);
}
@@ -1203,21 +1234,26 @@ static inline bool match_lookahead (hb_ot_apply_context_t *c,
const HBUINT16 lookahead[],
match_func_t match_func,
const void *match_data,
- unsigned int offset,
+ unsigned int start_index,
unsigned int *end_index)
{
TRACE_APPLY (nullptr);
hb_ot_apply_context_t::skipping_iterator_t &skippy_iter = c->iter_context;
- skippy_iter.reset (c->buffer->idx + offset - 1, count);
+ skippy_iter.reset (start_index - 1, count);
skippy_iter.set_match_func (match_func, match_data, lookahead);
for (unsigned int i = 0; i < count; i++)
- if (!skippy_iter.next ())
+ {
+ unsigned unsafe_to;
+ if (!skippy_iter.next (&unsafe_to))
+ {
+ *end_index = unsafe_to;
return_trace (false);
+ }
+ }
*end_index = skippy_iter.idx + 1;
-
return_trace (true);
}
@@ -1284,22 +1320,23 @@ static void context_closure_recurse_lookups (hb_closure_context_t *c,
unsigned seqIndex = lookupRecord[i].sequenceIndex;
if (seqIndex >= inputCount) continue;
- hb_set_t *pos_glyphs = nullptr;
+ bool has_pos_glyphs = false;
+ hb_set_t pos_glyphs;
if (hb_set_is_empty (covered_seq_indicies) || !hb_set_has (covered_seq_indicies, seqIndex))
{
- pos_glyphs = hb_set_create ();
+ has_pos_glyphs = true;
if (seqIndex == 0)
{
switch (context_format) {
case ContextFormat::SimpleContext:
- pos_glyphs->add (value);
+ pos_glyphs.add (value);
break;
case ContextFormat::ClassBasedContext:
- intersected_glyphs_func (c->cur_intersected_glyphs, data, value, pos_glyphs);
+ intersected_glyphs_func (&c->parent_active_glyphs (), data, value, &pos_glyphs);
break;
case ContextFormat::CoverageBasedContext:
- hb_set_set (pos_glyphs, c->cur_intersected_glyphs);
+ pos_glyphs.set (c->parent_active_glyphs ());
break;
}
}
@@ -1313,12 +1350,16 @@ static void context_closure_recurse_lookups (hb_closure_context_t *c,
input_value = input[seqIndex - 1];
}
- intersected_glyphs_func (c->glyphs, input_data, input_value, pos_glyphs);
+ intersected_glyphs_func (c->glyphs, input_data, input_value, &pos_glyphs);
}
}
- hb_set_add (covered_seq_indicies, seqIndex);
- c->push_cur_active_glyphs (pos_glyphs ? pos_glyphs : c->glyphs);
+ covered_seq_indicies->add (seqIndex);
+ if (has_pos_glyphs) {
+ c->push_cur_active_glyphs () = pos_glyphs;
+ } else {
+ c->push_cur_active_glyphs ().set (*c->glyphs);
+ }
unsigned endIndex = inputCount;
if (context_format == ContextFormat::CoverageBasedContext)
@@ -1327,8 +1368,6 @@ static void context_closure_recurse_lookups (hb_closure_context_t *c,
c->recurse (lookupRecord[i].lookupListIndex, covered_seq_indicies, seqIndex, endIndex);
c->pop_cur_done_glyphs ();
- if (pos_glyphs)
- hb_set_destroy (pos_glyphs);
}
hb_set_destroy (covered_seq_indicies);
@@ -1343,15 +1382,13 @@ static inline void recurse_lookups (context_t *c,
c->recurse (lookupRecord[i].lookupListIndex);
}
-static inline bool apply_lookup (hb_ot_apply_context_t *c,
+static inline void apply_lookup (hb_ot_apply_context_t *c,
unsigned int count, /* Including the first glyph */
unsigned int match_positions[HB_MAX_CONTEXT_LENGTH], /* Including the first glyph */
unsigned int lookupCount,
const LookupRecord lookupRecord[], /* Array of LookupRecords--in design order */
- unsigned int match_length)
+ unsigned int match_end)
{
- TRACE_APPLY (nullptr);
-
hb_buffer_t *buffer = c->buffer;
int end;
@@ -1359,7 +1396,7 @@ static inline bool apply_lookup (hb_ot_apply_context_t *c,
* Adjust. */
{
unsigned int bl = buffer->backtrack_len ();
- end = bl + match_length;
+ end = bl + match_end - buffer->idx;
int delta = bl - buffer->idx;
/* Convert positions to new indexing. */
@@ -1461,8 +1498,6 @@ static inline bool apply_lookup (hb_ot_apply_context_t *c,
}
(void) buffer->move_to (end);
-
- return_trace (true);
}
@@ -1550,17 +1585,25 @@ static inline bool context_apply_lookup (hb_ot_apply_context_t *c,
const LookupRecord lookupRecord[],
ContextApplyLookupContext &lookup_context)
{
- unsigned int match_length = 0;
- unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
- return match_input (c,
- inputCount, input,
- lookup_context.funcs.match, lookup_context.match_data,
- &match_length, match_positions)
- && (c->buffer->unsafe_to_break (c->buffer->idx, c->buffer->idx + match_length),
- apply_lookup (c,
- inputCount, match_positions,
- lookupCount, lookupRecord,
- match_length));
+ unsigned match_end = 0;
+ unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
+ if (match_input (c,
+ inputCount, input,
+ lookup_context.funcs.match, lookup_context.match_data,
+ &match_end, match_positions))
+ {
+ c->buffer->unsafe_to_break (c->buffer->idx, match_end);
+ apply_lookup (c,
+ inputCount, match_positions,
+ lookupCount, lookupRecord,
+ match_end);
+ return true;
+ }
+ else
+ {
+ c->buffer->unsafe_to_concat (c->buffer->idx, match_end);
+ return false;
+ }
}
struct Rule
@@ -1828,8 +1871,9 @@ struct ContextFormat1
void closure (hb_closure_context_t *c) const
{
- c->cur_intersected_glyphs->clear ();
- get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+ hb_set_t* cur_active_glyphs = &c->push_cur_active_glyphs ();
+ get_coverage ().intersected_coverage_glyphs (&c->previous_parent_active_glyphs (),
+ cur_active_glyphs);
struct ContextClosureLookupContext lookup_context = {
{intersects_glyph, intersected_glyph},
@@ -1838,10 +1882,14 @@ struct ContextFormat1
};
+ hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len))
- | hb_filter (c->parent_active_glyphs (), hb_first)
+ | hb_filter ([&] (hb_codepoint_t _) {
+ return c->previous_parent_active_glyphs ().has (_);
+ }, hb_first)
| hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const RuleSet&> (_.first, this+ruleSet[_.second]); })
| hb_apply ([&] (const hb_pair_t<unsigned, const RuleSet&>& _) { _.second.closure (c, _.first, lookup_context); })
;
+
+ c->pop_cur_done_glyphs ();
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -1989,8 +2037,9 @@ struct ContextFormat2
if (!(this+coverage).intersects (c->glyphs))
return;
- c->cur_intersected_glyphs->clear ();
- get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+ hb_set_t* cur_active_glyphs = &c->push_cur_active_glyphs ();
+ get_coverage ().intersected_coverage_glyphs (&c->previous_parent_active_glyphs (),
+ cur_active_glyphs);
const ClassDef &class_def = this+classDef;
@@ -2000,10 +2049,9 @@ struct ContextFormat2
&class_def
};
- return
+ hb_enumerate (ruleSet)
| hb_filter ([&] (unsigned _)
- { return class_def.intersects_class (c->cur_intersected_glyphs, _); },
+ { return class_def.intersects_class (&c->parent_active_glyphs (), _); },
hb_first)
| hb_apply ([&] (const hb_pair_t<unsigned, const Offset16To<RuleSet>&> _)
{
@@ -2011,6 +2059,8 @@ struct ContextFormat2
rule_set.closure (c, _.first, lookup_context);
})
;
+
+ c->pop_cur_done_glyphs ();
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -2183,8 +2233,10 @@ struct ContextFormat3
if (!(this+coverageZ[0]).intersects (c->glyphs))
return;
- c->cur_intersected_glyphs->clear ();
- get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+ hb_set_t* cur_active_glyphs = &c->push_cur_active_glyphs ();
+ get_coverage ().intersected_coverage_glyphs (&c->previous_parent_active_glyphs (),
+ cur_active_glyphs);
+
const LookupRecord *lookupRecord = &StructAfter<LookupRecord> (coverageZ.as_array (glyphCount));
struct ContextClosureLookupContext lookup_context = {
@@ -2196,6 +2248,8 @@ struct ContextFormat3
glyphCount, (const HBUINT16 *) (coverageZ.arrayZ + 1),
lookupCount, lookupRecord,
0, lookup_context);
+
+ c->pop_cur_done_glyphs ();
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -2452,25 +2506,38 @@ static inline bool chain_context_apply_lookup (hb_ot_apply_context_t *c,
const LookupRecord lookupRecord[],
ChainContextApplyLookupContext &lookup_context)
{
- unsigned int start_index = 0, match_length = 0, end_index = 0;
- unsigned int match_positions[HB_MAX_CONTEXT_LENGTH];
- return match_input (c,
- inputCount, input,
- lookup_context.funcs.match, lookup_context.match_data[1],
- &match_length, match_positions)
- && match_backtrack (c,
- backtrackCount, backtrack,
- lookup_context.funcs.match, lookup_context.match_data[0],
- &start_index)
- && match_lookahead (c,
- lookaheadCount, lookahead,
- lookup_context.funcs.match, lookup_context.match_data[2],
- match_length, &end_index)
- && (c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index),
- apply_lookup (c,
- inputCount, match_positions,
- lookupCount, lookupRecord,
- match_length));
+ unsigned end_index = c->buffer->idx;
+ unsigned match_end = 0;
+ unsigned match_positions[HB_MAX_CONTEXT_LENGTH];
+ if (!(match_input (c,
+ inputCount, input,
+ lookup_context.funcs.match, lookup_context.match_data[1],
+ &match_end, match_positions) && (end_index = match_end)
+ && match_lookahead (c,
+ lookaheadCount, lookahead,
+ lookup_context.funcs.match, lookup_context.match_data[2],
+ match_end, &end_index)))
+ {
+ c->buffer->unsafe_to_concat (c->buffer->idx, end_index);
+ return false;
+ }
+
+ unsigned start_index = c->buffer->out_len;
+ if (!match_backtrack (c,
+ backtrackCount, backtrack,
+ lookup_context.funcs.match, lookup_context.match_data[0],
+ &start_index))
+ {
+ c->buffer->unsafe_to_concat_from_outbuffer (start_index, end_index);
+ return false;
+ }
+
+ c->buffer->unsafe_to_break_from_outbuffer (start_index, end_index);
+ apply_lookup (c,
+ inputCount, match_positions,
+ lookupCount, lookupRecord,
+ match_end);
+ return true;
}
struct ChainRule
@@ -2802,8 +2869,9 @@ struct ChainContextFormat1
void closure (hb_closure_context_t *c) const
{
- c->cur_intersected_glyphs->clear ();
- get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+ hb_set_t* cur_active_glyphs = &c->push_cur_active_glyphs ();
+ get_coverage ().intersected_coverage_glyphs (&c->previous_parent_active_glyphs (),
+ cur_active_glyphs);
struct ChainContextClosureLookupContext lookup_context = {
{intersects_glyph, intersected_glyph},
@@ -2812,10 +2880,14 @@ struct ChainContextFormat1
};
+ hb_zip (this+coverage, hb_range ((unsigned) ruleSet.len))
- | hb_filter (c->parent_active_glyphs (), hb_first)
+ | hb_filter ([&] (hb_codepoint_t _) {
+ return c->previous_parent_active_glyphs ().has (_);
+ }, hb_first)
| hb_map ([&](const hb_pair_t<hb_codepoint_t, unsigned> _) { return hb_pair_t<unsigned, const ChainRuleSet&> (_.first, this+ruleSet[_.second]); })
| hb_apply ([&] (const hb_pair_t<unsigned, const ChainRuleSet&>& _) { _.second.closure (c, _.first, lookup_context); })
;
+
+ c->pop_cur_done_glyphs ();
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -2964,8 +3036,10 @@ struct ChainContextFormat2
if (!(this+coverage).intersects (c->glyphs))
return;
- c->cur_intersected_glyphs->clear ();
- get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+ hb_set_t* cur_active_glyphs = &c->push_cur_active_glyphs ();
+ get_coverage ().intersected_coverage_glyphs (&c->previous_parent_active_glyphs (),
+ cur_active_glyphs);
+
const ClassDef &backtrack_class_def = this+backtrackClassDef;
const ClassDef &input_class_def = this+inputClassDef;
@@ -2979,10 +3053,9 @@ struct ChainContextFormat2
&lookahead_class_def}
};
- return
+ hb_enumerate (ruleSet)
| hb_filter ([&] (unsigned _)
- { return input_class_def.intersects_class (c->cur_intersected_glyphs, _); },
+ { return input_class_def.intersects_class (&c->parent_active_glyphs (), _); },
hb_first)
| hb_apply ([&] (const hb_pair_t<unsigned, const Offset16To<ChainRuleSet>&> _)
{
@@ -2990,6 +3063,8 @@ struct ChainContextFormat2
chainrule_set.closure (c, _.first, lookup_context);
})
;
+
+ c->pop_cur_done_glyphs ();
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -3216,8 +3291,10 @@ struct ChainContextFormat3
if (!(this+input[0]).intersects (c->glyphs))
return;
- c->cur_intersected_glyphs->clear ();
- get_coverage ().intersected_coverage_glyphs (c->parent_active_glyphs (), c->cur_intersected_glyphs);
+ hb_set_t* cur_active_glyphs = &c->push_cur_active_glyphs ();
+ get_coverage ().intersected_coverage_glyphs (&c->previous_parent_active_glyphs (),
+ cur_active_glyphs);
+
const Array16OfOffset16To<Coverage> &lookahead = StructAfter<Array16OfOffset16To<Coverage>> (input);
const Array16Of<LookupRecord> &lookup = StructAfter<Array16Of<LookupRecord>> (lookahead);
@@ -3232,6 +3309,8 @@ struct ChainContextFormat3
lookahead.len, (const HBUINT16 *) lookahead.arrayZ,
lookup.len, lookup.arrayZ,
0, lookup_context);
+
+ c->pop_cur_done_glyphs ();
}
void closure_lookups (hb_closure_lookups_context_t *c) const
@@ -3706,7 +3785,7 @@ struct GSUBGPOS
for (unsigned i : feature_indices->iter ())
{
hb_tag_t t = get_feature_tag (i);
- if (t == unique_features.INVALID_KEY) continue;
+ if (t == HB_MAP_VALUE_INVALID) continue;
if (!unique_features.has (t))
{
hb_set_t* indices = hb_set_create ();
@@ -3839,7 +3918,7 @@ struct GSUBGPOS
template <typename T>
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
this->table = hb_sanitize_context_t ().reference_table<T> (face);
if (unlikely (this->table->is_blocklisted (this->table.get_blob (), face)))
@@ -3861,8 +3940,7 @@ struct GSUBGPOS
for (unsigned int i = 0; i < this->lookup_count; i++)
this->accels[i].init (table->get_lookup (i));
}
-
- void fini ()
+ ~accelerator_t ()
{
for (unsigned int i = 0; i < this->lookup_count; i++)
this->accels[i].fini ();
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.cc b/thirdparty/harfbuzz/src/hb-ot-layout.cc
index 60733648c1..07bbe3bc84 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.cc
@@ -361,6 +361,13 @@ hb_ot_layout_get_attach_points (hb_face_t *face,
* Fetches a list of the caret positions defined for a ligature glyph in the GDEF
* table of the font. The list returned will begin at the offset provided.
*
+ * Note that a ligature that is formed from n characters will have n-1
+ * caret positions. The first character is not represented in the array,
+ * since its caret position is the glyph position.
+ *
+ * The positions returned by this function are 'unshaped', and will have to
+ * be fixed up for kerning that may be applied to the ligature glyph.
+ *
* Return value: Total number of ligature caret positions for @glyph.
*
**/
@@ -1491,10 +1498,9 @@ hb_ot_layout_lookup_substitute_closure (hb_face_t *face,
unsigned int lookup_index,
hb_set_t *glyphs /* OUT */)
{
- hb_set_t cur_intersected_glyphs;
hb_map_t done_lookups_glyph_count;
hb_hashmap_t<unsigned, hb_set_t *> done_lookups_glyph_set;
- OT::hb_closure_context_t c (face, glyphs, &cur_intersected_glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
+ OT::hb_closure_context_t c (face, glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
const OT::SubstLookup& l = face->table.GSUB->table->get_lookup (lookup_index);
@@ -1520,10 +1526,9 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
const hb_set_t *lookups,
hb_set_t *glyphs /* OUT */)
{
- hb_set_t cur_intersected_glyphs;
hb_map_t done_lookups_glyph_count;
hb_hashmap_t<unsigned, hb_set_t *> done_lookups_glyph_set;
- OT::hb_closure_context_t c (face, glyphs, &cur_intersected_glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
+ OT::hb_closure_context_t c (face, glyphs, &done_lookups_glyph_count, &done_lookups_glyph_set);
const OT::GSUB& gsub = *face->table.GSUB->table;
unsigned int iteration_count = 0;
@@ -1890,7 +1895,7 @@ apply_string (OT::hb_ot_apply_context_t *c,
apply_forward (c, accel);
if (!Proxy::inplace)
- buffer->swap_buffers ();
+ buffer->sync ();
}
else
{
@@ -1962,13 +1967,84 @@ hb_ot_layout_substitute_lookup (OT::hb_ot_apply_context_t *c,
#ifndef HB_NO_BASE
/**
+ * hb_ot_layout_get_horizontal_baseline_tag_for_script:
+ * @script: a script tag.
+ *
+ * Fetches the dominant horizontal baseline tag used by @script.
+ *
+ * Return value: dominant baseline tag for the @script.
+ *
+ * Since: 4.0.0
+ **/
+hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script)
+{
+ /* Keep in sync with hb_ot_layout_get_baseline_with_fallback */
+ switch ((int) script)
+ {
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_BENGALI:
+ case HB_SCRIPT_DEVANAGARI:
+ case HB_SCRIPT_GUJARATI:
+ case HB_SCRIPT_GURMUKHI:
+ /* Unicode-2.0 additions */
+ case HB_SCRIPT_TIBETAN:
+ /* Unicode-4.0 additions */
+ case HB_SCRIPT_LIMBU:
+ /* Unicode-4.1 additions */
+ case HB_SCRIPT_SYLOTI_NAGRI:
+ /* Unicode-5.0 additions */
+ case HB_SCRIPT_PHAGS_PA:
+ /* Unicode-5.2 additions */
+ case HB_SCRIPT_MEETEI_MAYEK:
+ /* Unicode-6.1 additions */
+ case HB_SCRIPT_SHARADA:
+ case HB_SCRIPT_TAKRI:
+ /* Unicode-7.0 additions */
+ case HB_SCRIPT_MODI:
+ case HB_SCRIPT_SIDDHAM:
+ case HB_SCRIPT_TIRHUTA:
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_MARCHEN:
+ case HB_SCRIPT_NEWA:
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_SOYOMBO:
+ case HB_SCRIPT_ZANABAZAR_SQUARE:
+ /* Unicode-11.0 additions */
+ case HB_SCRIPT_DOGRA:
+ case HB_SCRIPT_GUNJALA_GONDI:
+ /* Unicode-12.0 additions */
+ case HB_SCRIPT_NANDINAGARI:
+ return HB_OT_LAYOUT_BASELINE_TAG_HANGING;
+
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_HANGUL:
+ case HB_SCRIPT_HAN:
+ case HB_SCRIPT_HIRAGANA:
+ case HB_SCRIPT_KATAKANA:
+ /* Unicode-3.0 additions */
+ case HB_SCRIPT_BOPOMOFO:
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_TANGUT:
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_NUSHU:
+ /* Unicode-13.0 additions */
+ case HB_SCRIPT_KHITAN_SMALL_SCRIPT:
+ return HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT;
+
+ default:
+ return HB_OT_LAYOUT_BASELINE_TAG_ROMAN;
+ }
+}
+
+/**
* hb_ot_layout_get_baseline:
* @font: a font
* @baseline_tag: a baseline tag
* @direction: text direction.
* @script_tag: script tag.
* @language_tag: language tag, currently unused.
- * @coord: (out): baseline value if found.
+ * @coord: (out) (nullable): baseline value if found.
*
* Fetches a baseline value from the face.
*
@@ -1991,6 +2067,227 @@ hb_ot_layout_get_baseline (hb_font_t *font,
return result;
}
+
+/**
+ * hb_ot_layout_get_baseline_with_fallback:
+ * @font: a font
+ * @baseline_tag: a baseline tag
+ * @direction: text direction.
+ * @script_tag: script tag.
+ * @language_tag: language tag, currently unused.
+ * @coord: (out): baseline value if found.
+ *
+ * Fetches a baseline value from the face, and synthesizes
+ * it if the font does not have it.
+ *
+ * Since: 4.0.0
+ **/
+void
+hb_ot_layout_get_baseline_with_fallback (hb_font_t *font,
+ hb_ot_layout_baseline_tag_t baseline_tag,
+ hb_direction_t direction,
+ hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_position_t *coord /* OUT */)
+{
+ if (hb_ot_layout_get_baseline (font,
+ baseline_tag,
+ direction,
+ script_tag,
+ language_tag,
+ coord))
+ return;
+
+ /* Synthesize missing baselines.
+ * See https://www.w3.org/TR/css-inline-3/#baseline-synthesis-fonts
+ */
+ switch (baseline_tag)
+ {
+ case HB_OT_LAYOUT_BASELINE_TAG_ROMAN:
+ *coord = 0; // FIXME origin ?
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_MATH:
+ {
+ hb_codepoint_t glyph;
+ hb_glyph_extents_t extents;
+ if (HB_DIRECTION_IS_HORIZONTAL (direction) &&
+ (hb_font_get_nominal_glyph (font, 0x2212u, &glyph) ||
+ hb_font_get_nominal_glyph (font, '-', &glyph)) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ {
+ *coord = extents.y_bearing + extents.height / 2;
+ }
+ else
+ {
+ hb_position_t x_height = 0;
+ hb_ot_metrics_get_position (font, HB_OT_METRICS_TAG_X_HEIGHT, &x_height);
+ *coord = x_height / 2;
+ }
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT:
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT:
+ {
+ hb_position_t embox_top, embox_bottom;
+
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ &embox_top);
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ &embox_bottom);
+
+ if (baseline_tag == HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT)
+ *coord = embox_top + (embox_bottom - embox_top) / 10;
+ else
+ *coord = embox_bottom + (embox_top - embox_bottom) / 10;
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT:
+ if (hb_ot_layout_get_baseline (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ coord))
+ *coord += HB_DIRECTION_IS_HORIZONTAL (direction) ? font->y_scale : font->x_scale;
+ else
+ {
+ hb_font_extents_t font_extents;
+ hb_font_get_extents_for_direction (font, direction, &font_extents);
+ *coord = font_extents.ascender;
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT:
+ if (hb_ot_layout_get_baseline (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ coord))
+ *coord -= HB_DIRECTION_IS_HORIZONTAL (direction) ? font->y_scale : font->x_scale;
+ else
+ {
+ hb_font_extents_t font_extents;
+ hb_font_get_extents_for_direction (font, direction, &font_extents);
+ *coord = font_extents.descender;
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_HANGING:
+ if (HB_DIRECTION_IS_HORIZONTAL (direction))
+ {
+ hb_codepoint_t ch;
+ hb_codepoint_t glyph;
+ hb_glyph_extents_t extents;
+
+ /* Keep in sync with hb_ot_layout_get_horizontal_baseline_for_script */
+ switch ((int) script_tag)
+ {
+ /* Unicode-1.1 additions */
+ case HB_SCRIPT_BENGALI: ch = 0x0995u; break;
+ case HB_SCRIPT_DEVANAGARI: ch = 0x0915u; break;
+ case HB_SCRIPT_GUJARATI: ch = 0x0a95u; break;
+ case HB_SCRIPT_GURMUKHI: ch = 0x0a15u; break;
+ /* Unicode-2.0 additions */
+ case HB_SCRIPT_TIBETAN: ch = 0x0f40u; break;
+ /* Unicode-4.0 additions */
+ case HB_SCRIPT_LIMBU: ch = 0x1901u; break;
+ /* Unicode-4.1 additions */
+ case HB_SCRIPT_SYLOTI_NAGRI: ch = 0xa807u; break;
+ /* Unicode-5.0 additions */
+ case HB_SCRIPT_PHAGS_PA: ch = 0xa840u; break;
+ /* Unicode-5.2 additions */
+ case HB_SCRIPT_MEETEI_MAYEK: ch = 0xabc0u; break;
+ /* Unicode-6.1 additions */
+ case HB_SCRIPT_SHARADA: ch = 0x11191u; break;
+ case HB_SCRIPT_TAKRI: ch = 0x1168cu; break;
+ /* Unicode-7.0 additions */
+ case HB_SCRIPT_MODI: ch = 0x1160eu;break;
+ case HB_SCRIPT_SIDDHAM: ch = 0x11590u; break;
+ case HB_SCRIPT_TIRHUTA: ch = 0x1148fu; break;
+ /* Unicode-9.0 additions */
+ case HB_SCRIPT_MARCHEN: ch = 0x11c72u; break;
+ case HB_SCRIPT_NEWA: ch = 0x1140eu; break;
+ /* Unicode-10.0 additions */
+ case HB_SCRIPT_SOYOMBO: ch = 0x11a5cu; break;
+ case HB_SCRIPT_ZANABAZAR_SQUARE: ch = 0x11a0bu; break;
+ /* Unicode-11.0 additions */
+ case HB_SCRIPT_DOGRA: ch = 0x1180au; break;
+ case HB_SCRIPT_GUNJALA_GONDI: ch = 0x11d6cu; break;
+ /* Unicode-12.0 additions */
+ case HB_SCRIPT_NANDINAGARI: ch = 0x119b0u; break;
+ default: ch = 0; break;
+ }
+
+ if (ch &&
+ hb_font_get_nominal_glyph (font, ch, &glyph) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ *coord = extents.y_bearing;
+ else
+ *coord = font->y_scale * 6 / 10; // FIXME makes assumptions about origin
+ }
+ else
+ *coord = font->x_scale * 6 / 10; // FIXME makes assumptions about origin
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL:
+ {
+ hb_position_t top, bottom;
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ &top);
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ &bottom);
+ *coord = (top + bottom) / 2;
+
+ }
+ break;
+
+ case HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL:
+ {
+ hb_position_t top, bottom;
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT,
+ direction,
+ script_tag,
+ language_tag,
+ &top);
+ hb_ot_layout_get_baseline_with_fallback (font,
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT,
+ direction,
+ script_tag,
+ language_tag,
+ &bottom);
+ *coord = (top + bottom) / 2;
+
+ }
+ break;
+
+ case _HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE:
+ default:
+ *coord = 0;
+ break;
+ }
+}
+
#endif
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.h b/thirdparty/harfbuzz/src/hb-ot-layout.h
index d47ba0fc92..4edddd9e0d 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.h
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.h
@@ -332,31 +332,6 @@ hb_ot_layout_lookup_collect_glyphs (hb_face_t *face,
hb_set_t *glyphs_after, /* OUT. May be NULL */
hb_set_t *glyphs_output /* OUT. May be NULL */);
-#ifdef HB_NOT_IMPLEMENTED
-typedef struct
-{
- const hb_codepoint_t *before,
- unsigned int before_length,
- const hb_codepoint_t *input,
- unsigned int input_length,
- const hb_codepoint_t *after,
- unsigned int after_length,
-} hb_ot_layout_glyph_sequence_t;
-
-typedef hb_bool_t
-(*hb_ot_layout_glyph_sequence_func_t) (hb_font_t *font,
- hb_tag_t table_tag,
- unsigned int lookup_index,
- const hb_ot_layout_glyph_sequence_t *sequence,
- void *user_data);
-
-HB_EXTERN void
-Xhb_ot_layout_lookup_enumerate_sequences (hb_face_t *face,
- hb_tag_t table_tag,
- unsigned int lookup_index,
- hb_ot_layout_glyph_sequence_func_t callback,
- void *user_data);
-#endif
/* Variations support */
@@ -411,19 +386,6 @@ hb_ot_layout_lookups_substitute_closure (hb_face_t *face,
hb_set_t *glyphs);
-#ifdef HB_NOT_IMPLEMENTED
-/* Note: You better have GDEF when using this API, or marks won't do much. */
-HB_EXTERN hb_bool_t
-Xhb_ot_layout_lookup_substitute (hb_font_t *font,
- unsigned int lookup_index,
- const hb_ot_layout_glyph_sequence_t *sequence,
- unsigned int out_size,
- hb_codepoint_t *glyphs_out, /* OUT */
- unsigned int *clusters_out, /* OUT */
- unsigned int *out_length /* OUT */);
-#endif
-
-
/*
* GPOS
*/
@@ -431,15 +393,6 @@ Xhb_ot_layout_lookup_substitute (hb_font_t *font,
HB_EXTERN hb_bool_t
hb_ot_layout_has_positioning (hb_face_t *face);
-#ifdef HB_NOT_IMPLEMENTED
-/* Note: You better have GDEF when using this API, or marks won't do much. */
-HB_EXTERN hb_bool_t
-Xhb_ot_layout_lookup_position (hb_font_t *font,
- unsigned int lookup_index,
- const hb_ot_layout_glyph_sequence_t *sequence,
- hb_glyph_position_t *positions /* IN / OUT */);
-#endif
-
/* Optical 'size' feature info. Returns true if found.
* https://docs.microsoft.com/en-us/typography/opentype/spec/features_pt#size */
HB_EXTERN hb_bool_t
@@ -487,9 +440,11 @@ hb_ot_layout_feature_get_characters (hb_face_t *face,
* if the direction is horizontal or vertical, respectively.
* @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT: Ideographic character face top or right edge,
* if the direction is horizontal or vertical, respectively.
+ * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL: The center of the ideographic character face. Since: 4.0.0
* @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT: Ideographic em-box bottom or left edge,
* if the direction is horizontal or vertical, respectively.
* @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT: Ideographic em-box top or right edge baseline,
+ * @HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL: The center of the ideographic em-box. Since: 4.0.0
* if the direction is horizontal or vertical, respectively.
* @HB_OT_LAYOUT_BASELINE_TAG_MATH: The baseline about which mathematical characters are centered.
* In vertical writing mode when mathematical characters rotated 90 degrees clockwise, are centered.
@@ -503,14 +458,19 @@ typedef enum {
HB_OT_LAYOUT_BASELINE_TAG_HANGING = HB_TAG ('h','a','n','g'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_BOTTOM_OR_LEFT = HB_TAG ('i','c','f','b'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_TOP_OR_RIGHT = HB_TAG ('i','c','f','t'),
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_FACE_CENTRAL = HB_TAG ('I','c','f','c'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_BOTTOM_OR_LEFT = HB_TAG ('i','d','e','o'),
HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_TOP_OR_RIGHT = HB_TAG ('i','d','t','p'),
+ HB_OT_LAYOUT_BASELINE_TAG_IDEO_EMBOX_CENTRAL = HB_TAG ('I','d','c','e'),
HB_OT_LAYOUT_BASELINE_TAG_MATH = HB_TAG ('m','a','t','h'),
/*< private >*/
_HB_OT_LAYOUT_BASELINE_TAG_MAX_VALUE = HB_TAG_MAX_SIGNED /*< skip >*/
} hb_ot_layout_baseline_tag_t;
+HB_EXTERN hb_ot_layout_baseline_tag_t
+hb_ot_layout_get_horizontal_baseline_tag_for_script (hb_script_t script);
+
HB_EXTERN hb_bool_t
hb_ot_layout_get_baseline (hb_font_t *font,
hb_ot_layout_baseline_tag_t baseline_tag,
@@ -519,6 +479,14 @@ hb_ot_layout_get_baseline (hb_font_t *font,
hb_tag_t language_tag,
hb_position_t *coord /* OUT. May be NULL. */);
+HB_EXTERN void
+hb_ot_layout_get_baseline_with_fallback (hb_font_t *font,
+ hb_ot_layout_baseline_tag_t baseline_tag,
+ hb_direction_t direction,
+ hb_tag_t script_tag,
+ hb_tag_t language_tag,
+ hb_position_t *coord /* OUT */);
+
HB_END_DECLS
#endif /* HB_OT_LAYOUT_H */
diff --git a/thirdparty/harfbuzz/src/hb-ot-layout.hh b/thirdparty/harfbuzz/src/hb-ot-layout.hh
index 2c825e0c81..ede8f007db 100644
--- a/thirdparty/harfbuzz/src/hb-ot-layout.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-layout.hh
@@ -482,10 +482,9 @@ _hb_glyph_info_get_lig_num_comps (const hb_glyph_info_t *info)
}
static inline uint8_t
-_hb_allocate_lig_id (hb_buffer_t *buffer) {
+_hb_allocate_lig_id (hb_buffer_t *buffer)
+{
uint8_t lig_id = buffer->next_serial () & 0x07;
- if (unlikely (!lig_id))
- lig_id = _hb_allocate_lig_id (buffer); /* in case of overflow */
return lig_id;
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-math-table.hh b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
index 8d0b4317c3..d834d94371 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-math-table.hh
@@ -369,6 +369,37 @@ struct MathKern
return kernValue[i].get_x_value (font, this);
}
+ unsigned int get_entries (unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font) const
+ {
+ const MathValueRecord* correctionHeight = mathValueRecordsZ.arrayZ;
+ const MathValueRecord* kernValue = mathValueRecordsZ.arrayZ + heightCount;
+ const unsigned int entriesCount = heightCount + 1;
+
+ if (entries_count)
+ {
+ unsigned int start = hb_min (start_offset, entriesCount);
+ unsigned int end = hb_min (start + *entries_count, entriesCount);
+ *entries_count = end - start;
+
+ for (unsigned int i = 0; i < *entries_count; i++) {
+ unsigned int j = start + i;
+
+ hb_position_t max_height;
+ if (j == heightCount) {
+ max_height = INT32_MAX;
+ } else {
+ max_height = correctionHeight[j].get_y_value (font, this);
+ }
+
+ kern_entries[i] = {max_height, kernValue[j].get_x_value (font, this)};
+ }
+ }
+ return entriesCount;
+ }
+
protected:
HBUINT16 heightCount;
UnsizedArrayOf<MathValueRecord>
@@ -423,6 +454,24 @@ struct MathKernInfoRecord
return (base+mathKern[idx]).get_value (correction_height, font);
}
+ unsigned int get_kernings (hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font,
+ const void *base) const
+ {
+ unsigned int idx = kern;
+ if (unlikely (idx >= ARRAY_LENGTH (mathKern)) || !mathKern[idx]) {
+ if (entries_count) *entries_count = 0;
+ return 0;
+ }
+ return (base+mathKern[idx]).get_entries (start_offset,
+ entries_count,
+ kern_entries,
+ font);
+ }
+
protected:
/* Offset to MathKern table for each corner -
* from the beginning of MathKernInfo table. May be NULL. */
@@ -473,6 +522,22 @@ struct MathKernInfo
return mathKernInfoRecords[index].get_kerning (kern, correction_height, font, this);
}
+ unsigned int get_kernings (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font) const
+ {
+ unsigned int index = (this+mathKernCoverage).get_coverage (glyph);
+ return mathKernInfoRecords[index].get_kernings (kern,
+ start_offset,
+ entries_count,
+ kern_entries,
+ font,
+ this);
+ }
+
protected:
Offset16To<Coverage>
mathKernCoverage;
@@ -545,6 +610,19 @@ struct MathGlyphInfo
hb_font_t *font) const
{ return (this+mathKernInfo).get_kerning (glyph, kern, correction_height, font); }
+ hb_position_t get_kernings (hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries, /* OUT */
+ hb_font_t *font) const
+ { return (this+mathKernInfo).get_kernings (glyph,
+ kern,
+ start_offset,
+ entries_count,
+ kern_entries,
+ font); }
+
protected:
/* Offset to MathItalicsCorrectionInfo table -
* from the beginning of MathGlyphInfo table. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-math.cc b/thirdparty/harfbuzz/src/hb-ot-math.cc
index 5781d25f2a..f44ac35849 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-math.cc
@@ -185,6 +185,51 @@ hb_ot_math_get_glyph_kerning (hb_font_t *font,
}
/**
+ * hb_ot_math_get_glyph_kernings:
+ * @font: #hb_font_t to work upon
+ * @glyph: The glyph index from which to retrieve the kernings
+ * @kern: The #hb_ot_math_kern_t from which to retrieve the kernings
+ * @start_offset: offset of the first kern entry to retrieve
+ * @entries_count: (inout) (optional): Input = the maximum number of kern entries to return;
+ * Output = the actual number of kern entries returned
+ * @kern_entries: (out caller-allocates) (array length=entries_count): array of kern entries returned
+ *
+ * Fetches the raw MathKern (cut-in) data for the specified font, glyph index,
+ * and @kern. The corresponding list of kern values and correction heights is
+ * returned as a list of #hb_ot_math_kern_entry_t structs.
+ *
+ * See also #hb_ot_math_get_glyph_kerning, which handles selecting the
+ * appropriate kern value for a given correction height.
+ *
+ * <note>For a glyph with @n defined kern values (where @n > 0), there are only
+ * @n−1 defined correction heights, as each correction height defines a boundary
+ * past which the next kern value should be selected. Therefore, only the
+ * #hb_ot_math_kern_entry_t.kern_value of the uppermost #hb_ot_math_kern_entry_t
+ * actually comes from the font; its corresponding
+ * #hb_ot_math_kern_entry_t.max_correction_height is always set to
+ * <code>INT32_MAX</code>.</note>
+ *
+ * Return value: the total number of kern values available or zero
+ *
+ * Since: 3.4.0
+ **/
+unsigned int
+hb_ot_math_get_glyph_kernings (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries /* OUT */)
+{
+ return font->face->table.MATH->get_glyph_info().get_kernings (glyph,
+ kern,
+ start_offset,
+ entries_count,
+ kern_entries,
+ font);
+}
+
+/**
* hb_ot_math_get_glyph_variants:
* @font: #hb_font_t to work upon
* @glyph: The index of the glyph to stretch
diff --git a/thirdparty/harfbuzz/src/hb-ot-math.h b/thirdparty/harfbuzz/src/hb-ot-math.h
index d3ffa19d85..1378a0639a 100644
--- a/thirdparty/harfbuzz/src/hb-ot-math.h
+++ b/thirdparty/harfbuzz/src/hb-ot-math.h
@@ -50,14 +50,18 @@ HB_BEGIN_DECLS
#define HB_OT_TAG_MATH HB_TAG('M','A','T','H')
/**
- * HB_OT_MATH_SCRIPT:
+ * HB_OT_TAG_MATH_SCRIPT:
*
- * OpenType script tag for math shaping, for use with
- * Use with hb_buffer_set_script().
+ * OpenType script tag, `math`, for features specific to math shaping.
*
- * Since: 1.3.3
+ * <note>#HB_OT_TAG_MATH_SCRIPT is not a valid #hb_script_t and should only be
+ * used with functions that accept raw OpenType script tags, such as
+ * #hb_ot_layout_collect_features. In other cases, #HB_SCRIPT_MATH should be
+ * used instead.</note>
+ *
+ * Since: 3.4.0
*/
-#define HB_OT_MATH_SCRIPT HB_TAG('m','a','t','h')
+#define HB_OT_TAG_MATH_SCRIPT HB_TAG('m','a','t','h')
/* Types */
@@ -205,6 +209,20 @@ typedef enum {
} hb_ot_math_kern_t;
/**
+ * hb_ot_math_kern_entry_t:
+ * @max_correction_height: The maximum height at which this entry should be used
+ * @kern_value: The kern value of the entry
+ *
+ * Data type to hold math kerning (cut-in) information for a glyph.
+ *
+ * Since: 3.4.0
+ */
+typedef struct {
+ hb_position_t max_correction_height;
+ hb_position_t kern_value;
+} hb_ot_math_kern_entry_t;
+
+/**
* hb_ot_math_glyph_variant_t:
* @glyph: The glyph index of the variant
* @advance: The advance width of the variant
@@ -281,6 +299,14 @@ hb_ot_math_get_glyph_kerning (hb_font_t *font,
hb_position_t correction_height);
HB_EXTERN unsigned int
+hb_ot_math_get_glyph_kernings (hb_font_t *font,
+ hb_codepoint_t glyph,
+ hb_ot_math_kern_t kern,
+ unsigned int start_offset,
+ unsigned int *entries_count, /* IN/OUT */
+ hb_ot_math_kern_entry_t *kern_entries /* OUT */);
+
+HB_EXTERN unsigned int
hb_ot_math_get_glyph_variants (hb_font_t *font,
hb_codepoint_t glyph,
hb_direction_t direction,
diff --git a/thirdparty/harfbuzz/src/hb-ot-meta-table.hh b/thirdparty/harfbuzz/src/hb-ot-meta-table.hh
index e31447f8fc..93e64c5327 100644
--- a/thirdparty/harfbuzz/src/hb-ot-meta-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-meta-table.hh
@@ -71,9 +71,9 @@ struct meta
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{ table = hb_sanitize_context_t ().reference_table<meta> (face); }
- void fini () { table.destroy (); }
+ ~accelerator_t () { table.destroy (); }
hb_blob_t *reference_entry (hb_tag_t tag) const
{ return table->dataMaps.lsearch (tag).reference_entry (table.get_blob ()); }
@@ -119,7 +119,9 @@ struct meta
DEFINE_SIZE_ARRAY (16, dataMaps);
};
-struct meta_accelerator_t : meta::accelerator_t {};
+struct meta_accelerator_t : meta::accelerator_t {
+ meta_accelerator_t (hb_face_t *face) : meta::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-metrics.cc b/thirdparty/harfbuzz/src/hb-ot-metrics.cc
index dbd4a1ffbe..43c3cbd41f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-metrics.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-metrics.cc
@@ -160,9 +160,50 @@ hb_ot_metrics_get_position (hb_font_t *font,
(position && (*position = font->em_scalef_y (face->table.TABLE->ATTR + GET_VAR)), true))
case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT: return GET_METRIC_Y (OS2, usWinAscent);
case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT: return GET_METRIC_Y (OS2, usWinDescent);
- case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE: return GET_METRIC_Y (hhea, caretSlopeRise);
- case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN: return GET_METRIC_X (hhea, caretSlopeRun);
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE:
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN:
+ {
+ unsigned mult = 1u;
+
+ if (font->slant)
+ {
+ unsigned rise = face->table.hhea->caretSlopeRise;
+ unsigned upem = face->get_upem ();
+ mult = (rise && rise < upem) ? hb_min (upem / rise, 256u) : 1u;
+ }
+
+ if (metrics_tag == HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE)
+ {
+ bool ret = GET_METRIC_Y (hhea, caretSlopeRise);
+
+ if (position)
+ *position *= mult;
+
+ return ret;
+ }
+ else
+ {
+ hb_position_t rise = 0;
+
+ if (font->slant && position && GET_METRIC_Y (hhea, caretSlopeRise))
+ rise = *position;
+
+ bool ret = GET_METRIC_X (hhea, caretSlopeRun);
+
+ if (position)
+ {
+ *position *= mult;
+
+ if (font->slant)
+ *position += _hb_roundf (mult * font->slant_xy * rise);
+ }
+
+ return ret;
+ }
+ }
case HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET: return GET_METRIC_X (hhea, caretOffset);
+
#ifndef HB_NO_VERTICAL
case HB_OT_METRICS_TAG_VERTICAL_CARET_RISE: return GET_METRIC_X (vhea, caretSlopeRise);
case HB_OT_METRICS_TAG_VERTICAL_CARET_RUN: return GET_METRIC_Y (vhea, caretSlopeRun);
@@ -197,6 +238,145 @@ hb_ot_metrics_get_position (hb_font_t *font,
}
}
+/**
+ * hb_ot_metrics_get_position_with_fallback:
+ * @font: an #hb_font_t object.
+ * @metrics_tag: tag of metrics value you like to fetch.
+ * @position: (out) (optional): result of metrics value from the font.
+ *
+ * Fetches metrics value corresponding to @metrics_tag from @font,
+ * and synthesizes a value if it the value is missing in the font.
+ *
+ * Since: 4.0.0
+ **/
+void
+hb_ot_metrics_get_position_with_fallback (hb_font_t *font,
+ hb_ot_metrics_tag_t metrics_tag,
+ hb_position_t *position /* OUT */)
+{
+ hb_font_extents_t font_extents;
+ hb_codepoint_t glyph;
+ hb_glyph_extents_t extents;
+
+ if (hb_ot_metrics_get_position (font, metrics_tag, position))
+ {
+ if ((metrics_tag != HB_OT_METRICS_TAG_STRIKEOUT_SIZE &&
+ metrics_tag != HB_OT_METRICS_TAG_UNDERLINE_SIZE) ||
+ *position != 0)
+ return;
+ }
+
+ switch (metrics_tag)
+ {
+ case HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER:
+ case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_ASCENT:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
+ *position = font_extents.ascender;
+ break;
+
+ case HB_OT_METRICS_TAG_VERTICAL_ASCENDER:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
+ *position = font_extents.ascender;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_DESCENDER:
+ case HB_OT_METRICS_TAG_HORIZONTAL_CLIPPING_DESCENT:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
+ *position = font_extents.descender;
+ break;
+
+ case HB_OT_METRICS_TAG_VERTICAL_DESCENDER:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
+ *position = font_extents.ascender;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_LINE_GAP:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_LTR, &font_extents);
+ *position = font_extents.line_gap;
+ break;
+
+ case HB_OT_METRICS_TAG_VERTICAL_LINE_GAP:
+ hb_font_get_extents_for_direction (font, HB_DIRECTION_TTB, &font_extents);
+ *position = font_extents.line_gap;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RISE:
+ case HB_OT_METRICS_TAG_VERTICAL_CARET_RISE:
+ *position = 1;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_RUN:
+ case HB_OT_METRICS_TAG_VERTICAL_CARET_RUN:
+ *position = 0;
+ break;
+
+ case HB_OT_METRICS_TAG_HORIZONTAL_CARET_OFFSET:
+ case HB_OT_METRICS_TAG_VERTICAL_CARET_OFFSET:
+ *position = 0;
+ break;
+
+ case HB_OT_METRICS_TAG_X_HEIGHT:
+ if (hb_font_get_nominal_glyph (font, 'o', &glyph) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ *position = extents.height + 2 * extents.y_bearing;
+ else
+ *position = font->y_scale / 2;
+ break;
+
+ case HB_OT_METRICS_TAG_CAP_HEIGHT:
+ if (hb_font_get_nominal_glyph (font, 'O', &glyph) &&
+ hb_font_get_glyph_extents (font, glyph, &extents))
+ *position = extents.height + 2 * extents.y_bearing;
+ else
+ *position = font->y_scale * 2 / 3;
+ break;
+
+ case HB_OT_METRICS_TAG_STRIKEOUT_SIZE:
+ case HB_OT_METRICS_TAG_UNDERLINE_SIZE:
+ *position = font->y_scale / 18;
+ break;
+
+ case HB_OT_METRICS_TAG_STRIKEOUT_OFFSET:
+ {
+ hb_position_t ascender;
+ hb_ot_metrics_get_position_with_fallback (font,
+ HB_OT_METRICS_TAG_HORIZONTAL_ASCENDER,
+ &ascender);
+ *position = ascender / 2;
+ }
+ break;
+
+ case HB_OT_METRICS_TAG_UNDERLINE_OFFSET:
+ *position = - font->y_scale / 18;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_SIZE:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_SIZE:
+ *position = font->x_scale * 10 / 12;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_SIZE:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_SIZE:
+ *position = font->y_scale * 10 / 12;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_X_OFFSET:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_X_OFFSET:
+ *position = 0;
+ break;
+
+ case HB_OT_METRICS_TAG_SUBSCRIPT_EM_Y_OFFSET:
+ case HB_OT_METRICS_TAG_SUPERSCRIPT_EM_Y_OFFSET:
+ *position = font->y_scale / 5;
+ break;
+
+ case _HB_OT_METRICS_TAG_MAX_VALUE:
+ default:
+ *position = 0;
+ break;
+ }
+}
+
#ifndef HB_NO_VAR
/**
* hb_ot_metrics_get_variation:
diff --git a/thirdparty/harfbuzz/src/hb-ot-metrics.h b/thirdparty/harfbuzz/src/hb-ot-metrics.h
index 5841fc8b0f..30de500088 100644
--- a/thirdparty/harfbuzz/src/hb-ot-metrics.h
+++ b/thirdparty/harfbuzz/src/hb-ot-metrics.h
@@ -110,6 +110,11 @@ hb_ot_metrics_get_position (hb_font_t *font,
hb_ot_metrics_tag_t metrics_tag,
hb_position_t *position /* OUT. May be NULL. */);
+HB_EXTERN void
+hb_ot_metrics_get_position_with_fallback (hb_font_t *font,
+ hb_ot_metrics_tag_t metrics_tag,
+ hb_position_t *position /* OUT */);
+
HB_EXTERN float
hb_ot_metrics_get_variation (hb_font_t *font, hb_ot_metrics_tag_t metrics_tag);
diff --git a/thirdparty/harfbuzz/src/hb-ot-name-table.hh b/thirdparty/harfbuzz/src/hb-ot-name-table.hh
index c17bb4abb8..d52367e9b1 100644
--- a/thirdparty/harfbuzz/src/hb-ot-name-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-name-table.hh
@@ -256,7 +256,7 @@ struct name
})
;
- name_prime->serialize (c->serializer, it, hb_addressof (this + stringOffset));
+ name_prime->serialize (c->serializer, it, std::addressof (this + stringOffset));
return_trace (name_prime->count);
}
@@ -279,7 +279,7 @@ struct name
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{
this->table = hb_sanitize_context_t ().reference_table<name> (face);
assert (this->table.get_length () >= this->table->stringOffset);
@@ -288,7 +288,6 @@ struct name
const hb_array_t<const NameRecord> all_names (this->table->nameRecordZ.arrayZ,
this->table->count);
- this->names.init ();
this->names.alloc (all_names.length);
for (unsigned int i = 0; i < all_names.length; i++)
@@ -318,10 +317,8 @@ struct name
}
this->names.resize (j);
}
-
- void fini ()
+ ~accelerator_t ()
{
- this->names.fini ();
this->table.destroy ();
}
@@ -373,7 +370,9 @@ struct name
#undef entry_index
#undef entry_score
-struct name_accelerator_t : name::accelerator_t {};
+struct name_accelerator_t : name::accelerator_t {
+ name_accelerator_t (hb_face_t *face) : name::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-name.cc b/thirdparty/harfbuzz/src/hb-ot-name.cc
index eff46ef227..c35ac5b3dc 100644
--- a/thirdparty/harfbuzz/src/hb-ot-name.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-name.cc
@@ -52,7 +52,7 @@
* array is owned by the @face and should not be modified. It can be
* used as long as @face is alive.
*
- * Returns: (out) (transfer none) (array length=num_entries): Array of available name entries.
+ * Returns: (transfer none) (array length=num_entries): Array of available name entries.
* Since: 2.1.0
**/
const hb_ot_name_entry_t *
diff --git a/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh b/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh
index 504de2de74..0f3cd8e24f 100644
--- a/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-post-table-v2subset.hh
@@ -76,8 +76,7 @@ HB_INTERNAL bool postV2Tail::subset (hb_subset_context_t *c) const
hb_map_t old_new_index_map, old_gid_new_index_map;
unsigned i = 0;
- post::accelerator_t _post;
- _post.init (c->plan->source);
+ post::accelerator_t _post (c->plan->source);
hb_hashmap_t<hb_bytes_t, unsigned, std::nullptr_t, unsigned, nullptr, (unsigned)-1> glyph_name_to_new_index;
for (hb_codepoint_t new_gid = 0; new_gid < num_glyphs; new_gid++)
@@ -128,9 +127,7 @@ HB_INTERNAL bool postV2Tail::subset (hb_subset_context_t *c) const
})
;
- bool ret = serialize (c->serializer, index_iter, &_post);
- _post.fini ();
- return_trace (ret);
+ return_trace (serialize (c->serializer, index_iter, &_post));
}
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-post-table.hh b/thirdparty/harfbuzz/src/hb-ot-post-table.hh
index 39de671707..a4844e94bc 100644
--- a/thirdparty/harfbuzz/src/hb-ot-post-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-post-table.hh
@@ -111,10 +111,9 @@ struct post
struct accelerator_t
{
friend struct postV2Tail;
- void init (hb_face_t *face)
- {
- index_to_offset.init ();
+ accelerator_t (hb_face_t *face)
+ {
table = hb_sanitize_context_t ().reference_table<post> (face);
unsigned int table_length = table.get_length ();
@@ -132,9 +131,8 @@ struct post
data += 1 + *data)
index_to_offset.push (data - pool);
}
- void fini ()
+ ~accelerator_t ()
{
- index_to_offset.fini ();
hb_free (gids_sorted_by_name.get ());
table.destroy ();
}
@@ -254,9 +252,9 @@ struct post
private:
uint32_t version;
- const Array16Of<HBUINT16> *glyphNameIndex;
+ const Array16Of<HBUINT16> *glyphNameIndex = nullptr;
hb_vector_t<uint32_t> index_to_offset;
- const uint8_t *pool;
+ const uint8_t *pool = nullptr;
hb_atomic_ptr_t<uint16_t *> gids_sorted_by_name;
};
@@ -307,7 +305,10 @@ struct post
DEFINE_SIZE_MIN (32);
};
-struct post_accelerator_t : post::accelerator_t {};
+struct post_accelerator_t : post::accelerator_t {
+ post_accelerator_t (hb_face_t *face) : post::accelerator_t (face) {}
+};
+
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh
index 41e3dd38ab..429974d05b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic-win1256.hh
@@ -87,6 +87,8 @@
#define OT_GLYPHID /* GlyphID */ \
OT_UINT16
+/* Shorthand. */
+#define G OT_GLYPHID
#define OT_UARRAY(Name, Items) \
OT_LABEL_START(Name) \
@@ -183,8 +185,6 @@
Tag \
OT_OFFSET(manifest, Name)
-/* Shorthand. */
-#define G OT_GLYPHID
/*
* Table Start
@@ -300,14 +300,40 @@ OT_TABLE_END
/*
* Clean up
*/
+
+#undef MANIFEST
+#undef MANIFEST_LOOKUP
+
#undef OT_TABLE_START
#undef OT_TABLE_END
#undef OT_LABEL_START
#undef OT_LABEL_END
#undef OT_UINT8
#undef OT_UINT16
-#undef OT_DISTANCE
#undef OT_COUNT
+#undef OT_DISTANCE
+
+#undef OT_LABEL
+#undef OT_LIST
+
+#undef OT_TAG
+#undef OT_OFFSET
+#undef OT_GLYPHID
+#undef G
+#undef OT_UARRAY
+#undef OT_UHEADLESSARRAY
+
+#undef OT_LOOKUP_FLAG_IGNORE_MARKS
+#undef OT_LOOKUP
+#undef OT_SUBLOOKUP
+#undef OT_COVERAGE1
+#undef OT_LOOKUP_TYPE_SUBST_SINGLE
+#undef OT_LOOKUP_TYPE_SUBST_LIGATURE
+#undef OT_SUBLOOKUP_SINGLE_SUBST_FORMAT2
+#undef OT_SUBLOOKUP_LIGATURE_SUBST_FORMAT1
+#undef OT_LIGATURE_SET
+#undef OT_LIGATURE
+
/*
* Include a second time to get the table data...
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
index 222c5d6b71..224f8b842e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-arabic.cc
@@ -321,6 +321,20 @@ arabic_joining (hb_buffer_t *buffer)
info[prev].arabic_shaping_action() = entry->prev_action;
buffer->unsafe_to_break (prev, i + 1);
}
+ else
+ {
+ if (prev == UINT_MAX)
+ {
+ if (this_type >= JOINING_TYPE_R)
+ buffer->unsafe_to_concat_from_outbuffer (0, i + 1);
+ }
+ else
+ {
+ if (this_type >= JOINING_TYPE_R ||
+ (2 <= state && state <= 5) /* States that have a possible prev_action. */)
+ buffer->unsafe_to_concat (prev, i + 1);
+ }
+ }
info[i].arabic_shaping_action() = entry->curr_action;
@@ -337,7 +351,14 @@ arabic_joining (hb_buffer_t *buffer)
const arabic_state_table_entry *entry = &arabic_state_table[state][this_type];
if (entry->prev_action != NONE && prev != UINT_MAX)
+ {
info[prev].arabic_shaping_action() = entry->prev_action;
+ buffer->unsafe_to_break (prev, buffer->len);
+ }
+ else if (2 <= state && state <= 5) /* States that have a possible prev_action. */
+ {
+ buffer->unsafe_to_concat (prev, buffer->len);
+ }
break;
}
}
@@ -614,6 +635,11 @@ modifier_combining_marks[] =
0x06E3u, /* ARABIC SMALL LOW SEEN */
0x06E7u, /* ARABIC SMALL HIGH YEH */
0x06E8u, /* ARABIC SMALL HIGH NOON */
+ 0x08CAu, /* ARABIC SMALL HIGH FARSI YEH */
+ 0x08CBu, /* ARABIC SMALL HIGH YEH BARREE WITH TWO DOTS BELOW */
+ 0x08CDu, /* ARABIC SMALL HIGH ZAH */
+ 0x08CEu, /* ARABIC LARGE ROUND DOT ABOVE */
+ 0x08CFu, /* ARABIC LARGE ROUND DOT BELOW */
0x08D3u, /* ARABIC SMALL LOW WAW */
0x08F3u, /* ARABIC SMALL HIGH WAW */
};
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc
index 0d84a76b85..3bc9e9b961 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-hangul.cc
@@ -140,7 +140,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan HB_UNUSED,
*
* - LV can be precomposed, or decomposed. Lets call those
* <LV> and <L,V>,
- * - LVT can be fully precomposed, partically precomposed, or
+ * - LVT can be fully precomposed, partially precomposed, or
* fully decomposed. Ie. <LVT>, <LV,T>, or <L,V,T>.
*
* The composition / decomposition is mechanical. However, not
@@ -392,7 +392,7 @@ preprocess_text_hangul (const hb_ot_shape_plan_t *plan HB_UNUSED,
*/
(void) buffer->next_glyph ();
}
- buffer->swap_buffers ();
+ buffer->sync ();
}
static void
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc
index 5a08f878dc..76092c7f38 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-syllabic.cc
@@ -96,7 +96,7 @@ hb_syllabic_insert_dotted_circles (hb_font_t *font,
else
(void) buffer->next_glyph ();
}
- buffer->swap_buffers ();
+ buffer->sync ();
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-thai.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-thai.cc
index 4c3068173b..a1e27a83be 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-thai.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-thai.cc
@@ -364,7 +364,7 @@ preprocess_text_thai (const hb_ot_shape_plan_t *plan,
buffer->merge_out_clusters (start - 1, end);
}
}
- buffer->swap_buffers ();
+ buffer->sync ();
/* If font has Thai GSUB, we are done. */
if (plan->props.script == HB_SCRIPT_THAI && !plan->map.found_script[0])
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
index c3920b2cc6..fb9c60cce9 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-use-machine.hh
@@ -385,7 +385,9 @@ struct machine_index_t :
typename Iter::item_t>
{
machine_index_t (const Iter& it) : it (it) {}
- machine_index_t (const machine_index_t& o) : it (o.it) {}
+ machine_index_t (const machine_index_t& o) : hb_iter_with_fallback_t<machine_index_t<Iter>,
+ typename Iter::item_t> (),
+ it (o.it) {}
static constexpr bool is_random_access_iterator = Iter::is_random_access_iterator;
static constexpr bool is_sorted_iterator = Iter::is_sorted_iterator;
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc b/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc
index 045731dfb4..d2cca105a4 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-complex-vowel-constraints.cc
@@ -435,7 +435,7 @@ _hb_preprocess_text_vowel_constraints (const hb_ot_shape_plan_t *plan HB_UNUSED,
default:
break;
}
- buffer->swap_buffers ();
+ buffer->sync ();
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
index eb1bc79768..b2eedb027b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-fallback.cc
@@ -446,6 +446,9 @@ _hb_ot_shape_fallback_mark_position (const hb_ot_shape_plan_t *plan,
return;
#endif
+ if (!buffer->message (font, "start fallback mark"))
+ return;
+
_hb_buffer_assert_gsubgpos_vars (buffer);
unsigned int start = 0;
@@ -457,6 +460,8 @@ _hb_ot_shape_fallback_mark_position (const hb_ot_shape_plan_t *plan,
start = i;
}
position_cluster (plan, font, buffer, start, count, adjust_offsets_when_zeroing);
+
+ (void) buffer->message (font, "end fallback mark");
}
@@ -497,6 +502,9 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
!font->has_glyph_v_kerning_func ())
return;
+ if (!buffer->message (font, "start fallback kern"))
+ return;
+
bool reverse = HB_DIRECTION_IS_BACKWARD (buffer->props.direction);
if (reverse)
@@ -508,6 +516,8 @@ _hb_ot_shape_fallback_kern (const hb_ot_shape_plan_t *plan,
if (reverse)
buffer->reverse ();
+
+ (void) buffer->message (font, "end fallback kern");
#endif
}
@@ -525,6 +535,15 @@ _hb_ot_shape_fallback_spaces (const hb_ot_shape_plan_t *plan HB_UNUSED,
for (unsigned int i = 0; i < count; i++)
if (_hb_glyph_info_is_unicode_space (&info[i]) && !_hb_glyph_info_ligated (&info[i]))
{
+ /* If font had no ASCII space and we used the invisible glyph, give it a 1/4 EM default advance. */
+ if (buffer->invisible && info[i].codepoint == buffer->invisible)
+ {
+ if (horizontal)
+ pos[i].x_advance = +font->x_scale / 4;
+ else
+ pos[i].y_advance = -font->y_scale / 4;
+ }
+
hb_unicode_funcs_t::space_t space_type = _hb_glyph_info_get_unicode_space_fallback_type (&info[i]);
hb_codepoint_t glyph;
typedef hb_unicode_funcs_t t;
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc b/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc
index 839cc9122c..aa5a8eeaa3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape-normalize.cc
@@ -193,7 +193,8 @@ decompose_current_character (const hb_ot_shape_normalize_context_t *c, bool shor
{
hb_codepoint_t space_glyph;
hb_unicode_funcs_t::space_t space_type = buffer->unicode->space_fallback_type (u);
- if (space_type != hb_unicode_funcs_t::NOT_SPACE && c->font->get_nominal_glyph (0x0020u, &space_glyph))
+ if (space_type != hb_unicode_funcs_t::NOT_SPACE &&
+ (c->font->get_nominal_glyph (0x0020, &space_glyph) || (space_glyph = buffer->invisible)))
{
_hb_glyph_info_set_unicode_space_fallback_type (&buffer->cur(), space_type);
next_char (buffer, space_glyph);
@@ -374,7 +375,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
decompose_multi_char_cluster (&c, end, always_short_circuit);
}
while (buffer->idx < count && buffer->successful);
- buffer->swap_buffers ();
+ buffer->sync ();
}
@@ -477,7 +478,7 @@ _hb_ot_shape_normalize (const hb_ot_shape_plan_t *plan,
if (info_cc (buffer->prev()) == 0)
starter = buffer->out_len - 1;
}
- buffer->swap_buffers ();
+ buffer->sync ();
}
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-shape.cc b/thirdparty/harfbuzz/src/hb-ot-shape.cc
index 4dde3520d8..4bd8aaf03b 100644
--- a/thirdparty/harfbuzz/src/hb-ot-shape.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-shape.cc
@@ -566,7 +566,7 @@ hb_insert_dotted_circle (hb_buffer_t *buffer, hb_font_t *font)
info.mask = buffer->cur().mask;
(void) buffer->output_info (info);
- buffer->swap_buffers ();
+ buffer->sync ();
}
static void
@@ -1034,7 +1034,7 @@ hb_ot_position_complex (const hb_ot_shape_context_t *c)
* hanging over the next glyph after the final reordering.
*
* Note: If fallback positinoing happens, we don't care about
- * this as it will be overriden.
+ * this as it will be overridden.
*/
bool adjust_offsets_when_zeroing = c->plan->adjust_mark_positioning_when_zeroing &&
HB_DIRECTION_IS_FORWARD (c->buffer->props.direction);
@@ -1120,7 +1120,7 @@ hb_propagate_flags (hb_buffer_t *buffer)
/* Propagate cluster-level glyph flags to be the same on all cluster glyphs.
* Simplifies using them. */
- if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_UNSAFE_TO_BREAK))
+ if (!(buffer->scratch_flags & HB_BUFFER_SCRATCH_FLAG_HAS_GLYPH_FLAGS))
return;
hb_glyph_info_t *info = buffer->info;
@@ -1129,11 +1129,7 @@ hb_propagate_flags (hb_buffer_t *buffer)
{
unsigned int mask = 0;
for (unsigned int i = start; i < end; i++)
- if (info[i].mask & HB_GLYPH_FLAG_UNSAFE_TO_BREAK)
- {
- mask = HB_GLYPH_FLAG_UNSAFE_TO_BREAK;
- break;
- }
+ mask |= info[i].mask & HB_GLYPH_FLAG_DEFINED;
if (mask)
for (unsigned int i = start; i < end; i++)
info[i].mask |= mask;
@@ -1145,18 +1141,7 @@ hb_propagate_flags (hb_buffer_t *buffer)
static void
hb_ot_shape_internal (hb_ot_shape_context_t *c)
{
- c->buffer->deallocate_var_all ();
- c->buffer->scratch_flags = HB_BUFFER_SCRATCH_FLAG_DEFAULT;
- if (likely (!hb_unsigned_mul_overflows (c->buffer->len, HB_BUFFER_MAX_LEN_FACTOR)))
- {
- c->buffer->max_len = hb_max (c->buffer->len * HB_BUFFER_MAX_LEN_FACTOR,
- (unsigned) HB_BUFFER_MAX_LEN_MIN);
- }
- if (likely (!hb_unsigned_mul_overflows (c->buffer->len, HB_BUFFER_MAX_OPS_FACTOR)))
- {
- c->buffer->max_ops = hb_max (c->buffer->len * HB_BUFFER_MAX_OPS_FACTOR,
- (unsigned) HB_BUFFER_MAX_OPS_MIN);
- }
+ c->buffer->enter ();
/* Save the original direction, we use it later. */
c->target_direction = c->buffer->props.direction;
@@ -1188,9 +1173,7 @@ hb_ot_shape_internal (hb_ot_shape_context_t *c)
c->buffer->props.direction = c->target_direction;
- c->buffer->max_len = HB_BUFFER_MAX_LEN_DEFAULT;
- c->buffer->max_ops = HB_BUFFER_MAX_OPS_DEFAULT;
- c->buffer->deallocate_var_all ();
+ c->buffer->leave ();
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-tag-table.hh b/thirdparty/harfbuzz/src/hb-ot-tag-table.hh
index 2c6316df4f..61d2814e93 100644
--- a/thirdparty/harfbuzz/src/hb-ot-tag-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-tag-table.hh
@@ -6,8 +6,8 @@
*
* on files with these headers:
*
- * <meta name="updated_at" content="2021-12-09 12:01 AM" />
- * File-Date: 2021-08-06
+ * <meta name="updated_at" content="2022-01-28 10:00 PM" />
+ * File-Date: 2021-12-29
*/
#ifndef HB_OT_TAG_TABLE_HH
@@ -66,7 +66,7 @@ static const LangTag ot_languages[] = {
{"an", HB_TAG('A','R','G',' ')}, /* Aragonese */
/*{"ang", HB_TAG('A','N','G',' ')},*/ /* Old English (ca. 450-1100) -> Anglo-Saxon */
{"aoa", HB_TAG('C','P','P',' ')}, /* Angolar -> Creoles */
- {"apa", HB_TAG('A','T','H',' ')}, /* Apache [family] -> Athapaskan */
+ {"apa", HB_TAG('A','T','H',' ')}, /* Apache [collection] -> Athapaskan */
{"apc", HB_TAG('A','R','A',' ')}, /* North Levantine Arabic -> Arabic */
{"apd", HB_TAG('A','R','A',' ')}, /* Sudanese Arabic -> Arabic */
{"apj", HB_TAG('A','T','H',' ')}, /* Jicarilla Apache -> Athapaskan */
@@ -86,7 +86,7 @@ static const LangTag ot_languages[] = {
{"arz", HB_TAG('A','R','A',' ')}, /* Egyptian Arabic -> Arabic */
{"as", HB_TAG('A','S','M',' ')}, /* Assamese */
/*{"ast", HB_TAG('A','S','T',' ')},*/ /* Asturian */
-/*{"ath", HB_TAG('A','T','H',' ')},*/ /* Athapascan [family] -> Athapaskan */
+/*{"ath", HB_TAG('A','T','H',' ')},*/ /* Athapascan [collection] -> Athapaskan */
{"atj", HB_TAG('R','C','R',' ')}, /* Atikamekw -> R-Cree */
{"atv", HB_TAG('A','L','T',' ')}, /* Northern Altai -> Altai */
{"auj", HB_TAG('B','B','R',' ')}, /* Awjilah -> Berber */
@@ -110,10 +110,10 @@ static const LangTag ot_languages[] = {
{"azn", HB_TAG('N','A','H',' ')}, /* Western Durango Nahuatl -> Nahuatl */
{"azz", HB_TAG('N','A','H',' ')}, /* Highland Puebla Nahuatl -> Nahuatl */
{"ba", HB_TAG('B','S','H',' ')}, /* Bashkir */
- {"bad", HB_TAG('B','A','D','0')}, /* Banda [family] */
+ {"bad", HB_TAG('B','A','D','0')}, /* Banda [collection] */
{"bag", HB_TAG_NONE }, /* Tuki != Baghelkhandi */
{"bah", HB_TAG('C','P','P',' ')}, /* Bahamas Creole English -> Creoles */
- {"bai", HB_TAG('B','M','L',' ')}, /* Bamileke [family] */
+ {"bai", HB_TAG('B','M','L',' ')}, /* Bamileke [collection] */
{"bal", HB_TAG('B','L','I',' ')}, /* Baluchi [macrolanguage] */
/*{"ban", HB_TAG('B','A','N',' ')},*/ /* Balinese */
/*{"bar", HB_TAG('B','A','R',' ')},*/ /* Bavarian */
@@ -135,7 +135,7 @@ static const LangTag ot_languages[] = {
{"bea", HB_TAG('A','T','H',' ')}, /* Beaver -> Athapaskan */
{"beb", HB_TAG('B','T','I',' ')}, /* Bebele -> Beti */
/*{"bem", HB_TAG('B','E','M',' ')},*/ /* Bemba (Zambia) */
- {"ber", HB_TAG('B','B','R',' ')}, /* Berber [family] */
+ {"ber", HB_TAG('B','B','R',' ')}, /* Berber [collection] */
{"bew", HB_TAG('C','P','P',' ')}, /* Betawi -> Creoles */
{"bfl", HB_TAG('B','A','D','0')}, /* Banda-Ndélé -> Banda */
{"bfq", HB_TAG('B','A','D',' ')}, /* Badaga */
@@ -203,7 +203,7 @@ static const LangTag ot_languages[] = {
{"btd", HB_TAG('B','T','K',' ')}, /* Batak Dairi -> Batak */
{"bti", HB_TAG_NONE }, /* Burate != Beti */
{"btj", HB_TAG('M','L','Y',' ')}, /* Bacanese Malay -> Malay */
-/*{"btk", HB_TAG('B','T','K',' ')},*/ /* Batak [family] */
+/*{"btk", HB_TAG('B','T','K',' ')},*/ /* Batak [collection] */
{"btm", HB_TAG('B','T','M',' ')}, /* Batak Mandailing */
{"btm", HB_TAG('B','T','K',' ')}, /* Batak Mandailing -> Batak */
{"bto", HB_TAG('B','I','K',' ')}, /* Rinconada Bikol -> Bikol */
@@ -256,6 +256,8 @@ static const LangTag ot_languages[] = {
{"chh", HB_TAG_NONE }, /* Chinook != Chattisgarhi */
{"chj", HB_TAG('C','C','H','N')}, /* Ojitlán Chinantec -> Chinantec */
{"chk", HB_TAG('C','H','K','0')}, /* Chuukese */
+ {"chm", HB_TAG('H','M','A',' ')}, /* Mari (Russia) [macrolanguage] -> High Mari */
+ {"chm", HB_TAG('L','M','A',' ')}, /* Mari (Russia) [macrolanguage] -> Low Mari */
{"chn", HB_TAG('C','P','P',' ')}, /* Chinook jargon -> Creoles */
/*{"cho", HB_TAG('C','H','O',' ')},*/ /* Choctaw */
{"chp", HB_TAG('C','H','P',' ')}, /* Chipewyan */
@@ -297,10 +299,10 @@ static const LangTag ot_languages[] = {
/*{"cop", HB_TAG('C','O','P',' ')},*/ /* Coptic */
{"coq", HB_TAG('A','T','H',' ')}, /* Coquille -> Athapaskan */
{"cpa", HB_TAG('C','C','H','N')}, /* Palantla Chinantec -> Chinantec */
- {"cpe", HB_TAG('C','P','P',' ')}, /* English-based creoles and pidgins [family] -> Creoles */
- {"cpf", HB_TAG('C','P','P',' ')}, /* French-based creoles and pidgins [family] -> Creoles */
+ {"cpe", HB_TAG('C','P','P',' ')}, /* English-based creoles and pidgins [collection] -> Creoles */
+ {"cpf", HB_TAG('C','P','P',' ')}, /* French-based creoles and pidgins [collection] -> Creoles */
{"cpi", HB_TAG('C','P','P',' ')}, /* Chinese Pidgin English -> Creoles */
-/*{"cpp", HB_TAG('C','P','P',' ')},*/ /* Portuguese-based creoles and pidgins [family] -> Creoles */
+/*{"cpp", HB_TAG('C','P','P',' ')},*/ /* Portuguese-based creoles and pidgins [collection] -> Creoles */
{"cpx", HB_TAG('Z','H','S',' ')}, /* Pu-Xian Chinese -> Chinese, Simplified */
{"cqd", HB_TAG('H','M','N',' ')}, /* Chuanqiandian Cluster Miao -> Hmong */
{"cqu", HB_TAG('Q','U','H',' ')}, /* Chilean Quechua (retired code) -> Quechua (Bolivia) */
@@ -320,7 +322,7 @@ static const LangTag ot_languages[] = {
{"crm", HB_TAG('M','C','R',' ')}, /* Moose Cree */
{"crm", HB_TAG('L','C','R',' ')}, /* Moose Cree -> L-Cree */
{"crm", HB_TAG('C','R','E',' ')}, /* Moose Cree -> Cree */
- {"crp", HB_TAG('C','P','P',' ')}, /* Creoles and pidgins [family] -> Creoles */
+ {"crp", HB_TAG('C','P','P',' ')}, /* Creoles and pidgins [collection] -> Creoles */
{"crr", HB_TAG_NONE }, /* Carolina Algonquian != Carrier */
{"crs", HB_TAG('C','P','P',' ')}, /* Seselwa Creole French -> Creoles */
{"crt", HB_TAG_NONE }, /* Iyojwa'ja Chorote != Crimean Tatar */
@@ -431,7 +433,7 @@ static const LangTag ot_languages[] = {
{"et", HB_TAG('E','T','I',' ')}, /* Estonian [macrolanguage] */
{"eto", HB_TAG('B','T','I',' ')}, /* Eton (Cameroon) -> Beti */
{"eu", HB_TAG('E','U','Q',' ')}, /* Basque */
- {"euq", HB_TAG_NONE }, /* Basque [family] != Basque */
+ {"euq", HB_TAG_NONE }, /* Basque [collection] != Basque */
{"eve", HB_TAG('E','V','N',' ')}, /* Even */
{"evn", HB_TAG('E','V','K',' ')}, /* Evenki */
{"ewo", HB_TAG('B','T','I',' ')}, /* Ewondo -> Beti */
@@ -620,10 +622,11 @@ static const LangTag ot_languages[] = {
{"ijc", HB_TAG('I','J','O',' ')}, /* Izon -> Ijo */
{"ije", HB_TAG('I','J','O',' ')}, /* Biseni -> Ijo */
{"ijn", HB_TAG('I','J','O',' ')}, /* Kalabari -> Ijo */
-/*{"ijo", HB_TAG('I','J','O',' ')},*/ /* Ijo [family] */
+/*{"ijo", HB_TAG('I','J','O',' ')},*/ /* Ijo [collection] */
{"ijs", HB_TAG('I','J','O',' ')}, /* Southeast Ijo -> Ijo */
{"ik", HB_TAG('I','P','K',' ')}, /* Inupiaq [macrolanguage] -> Inupiat */
{"ike", HB_TAG('I','N','U',' ')}, /* Eastern Canadian Inuktitut -> Inuktitut */
+ {"ike", HB_TAG('I','N','U','K')}, /* Eastern Canadian Inuktitut -> Nunavik Inuktitut */
{"ikt", HB_TAG('I','N','U',' ')}, /* Inuinnaqtun -> Inuktitut */
/*{"ilo", HB_TAG('I','L','O',' ')},*/ /* Iloko -> Ilokano */
{"in", HB_TAG('I','N','D',' ')}, /* Indonesian (retired code) */
@@ -638,6 +641,7 @@ static const LangTag ot_languages[] = {
{"it", HB_TAG('I','T','A',' ')}, /* Italian */
{"itz", HB_TAG('M','Y','N',' ')}, /* Itzá -> Mayan */
{"iu", HB_TAG('I','N','U',' ')}, /* Inuktitut [macrolanguage] */
+ {"iu", HB_TAG('I','N','U','K')}, /* Inuktitut [macrolanguage] -> Nunavik Inuktitut */
{"iw", HB_TAG('I','W','R',' ')}, /* Hebrew (retired code) */
{"ixl", HB_TAG('M','Y','N',' ')}, /* Ixil -> Mayan */
{"ja", HB_TAG('J','A','N',' ')}, /* Japanese */
@@ -667,7 +671,7 @@ static const LangTag ot_languages[] = {
{"kab", HB_TAG('B','B','R',' ')}, /* Kabyle -> Berber */
{"kac", HB_TAG_NONE }, /* Kachin != Kachchi */
{"kam", HB_TAG('K','M','B',' ')}, /* Kamba (Kenya) */
- {"kar", HB_TAG('K','R','N',' ')}, /* Karen [family] */
+ {"kar", HB_TAG('K','R','N',' ')}, /* Karen [collection] */
/*{"kaw", HB_TAG('K','A','W',' ')},*/ /* Kawi (Old Javanese) */
{"kbd", HB_TAG('K','A','B',' ')}, /* Kabardian */
{"kby", HB_TAG('K','N','R',' ')}, /* Manga Kanuri -> Kanuri */
@@ -876,7 +880,7 @@ static const LangTag ot_languages[] = {
{"mam", HB_TAG('M','A','M',' ')}, /* Mam */
{"mam", HB_TAG('M','Y','N',' ')}, /* Mam -> Mayan */
{"man", HB_TAG('M','N','K',' ')}, /* Mandingo [macrolanguage] -> Maninka */
- {"map", HB_TAG_NONE }, /* Austronesian [family] != Mapudungun */
+ {"map", HB_TAG_NONE }, /* Austronesian [collection] != Mapudungun */
{"maw", HB_TAG_NONE }, /* Mampruli != Marwari */
{"max", HB_TAG('M','L','Y',' ')}, /* North Moluccan Malay -> Malay */
{"max", HB_TAG('C','P','P',' ')}, /* North Moluccan Malay -> Creoles */
@@ -936,6 +940,7 @@ static const LangTag ot_languages[] = {
{"mnw", HB_TAG('M','O','N','T')}, /* Mon -> Thailand Mon */
{"mnx", HB_TAG_NONE }, /* Manikion != Manx */
{"mo", HB_TAG('M','O','L',' ')}, /* Moldavian (retired code) */
+ {"mo", HB_TAG('R','O','M',' ')}, /* Moldavian (retired code) -> Romanian */
{"mod", HB_TAG('C','P','P',' ')}, /* Mobilian -> Creoles */
/*{"moh", HB_TAG('M','O','H',' ')},*/ /* Mohawk */
{"mok", HB_TAG_NONE }, /* Morori != Moksha */
@@ -958,7 +963,7 @@ static const LangTag ot_languages[] = {
{"mts", HB_TAG_NONE }, /* Yora != Maltese */
{"mud", HB_TAG('C','P','P',' ')}, /* Mednyj Aleut -> Creoles */
{"mui", HB_TAG('M','L','Y',' ')}, /* Musi -> Malay */
- {"mun", HB_TAG_NONE }, /* Munda [family] != Mundari */
+ {"mun", HB_TAG_NONE }, /* Munda [collection] != Mundari */
{"mup", HB_TAG('R','A','J',' ')}, /* Malvi -> Rajasthani */
{"muq", HB_TAG('H','M','N',' ')}, /* Eastern Xiangxi Miao -> Hmong */
/*{"mus", HB_TAG('M','U','S',' ')},*/ /* Creek -> Muscogee */
@@ -973,7 +978,7 @@ static const LangTag ot_languages[] = {
{"mww", HB_TAG('H','M','N',' ')}, /* Hmong Daw -> Hmong */
{"my", HB_TAG('B','R','M',' ')}, /* Burmese */
{"mym", HB_TAG('M','E','N',' ')}, /* Me’en */
-/*{"myn", HB_TAG('M','Y','N',' ')},*/ /* Mayan [family] */
+/*{"myn", HB_TAG('M','Y','N',' ')},*/ /* Mayan [collection] */
{"myq", HB_TAG('M','N','K',' ')}, /* Forest Maninka (retired code) -> Maninka */
{"myv", HB_TAG('E','R','Z',' ')}, /* Erzya */
{"mzb", HB_TAG('B','B','R',' ')}, /* Tumzabt -> Berber */
@@ -982,7 +987,7 @@ static const LangTag ot_languages[] = {
{"na", HB_TAG('N','A','U',' ')}, /* Nauru -> Nauruan */
{"nag", HB_TAG('N','A','G',' ')}, /* Naga Pidgin -> Naga-Assamese */
{"nag", HB_TAG('C','P','P',' ')}, /* Naga Pidgin -> Creoles */
-/*{"nah", HB_TAG('N','A','H',' ')},*/ /* Nahuatl [family] */
+/*{"nah", HB_TAG('N','A','H',' ')},*/ /* Nahuatl [collection] */
{"nan", HB_TAG('Z','H','S',' ')}, /* Min Nan Chinese -> Chinese, Simplified */
/*{"nap", HB_TAG('N','A','P',' ')},*/ /* Neapolitan */
{"nas", HB_TAG_NONE }, /* Naasioi != Naskapi */
@@ -1039,7 +1044,6 @@ static const LangTag ot_languages[] = {
{"nln", HB_TAG('N','A','H',' ')}, /* Durango Nahuatl (retired code) -> Nahuatl */
{"nlv", HB_TAG('N','A','H',' ')}, /* Orizaba Nahuatl -> Nahuatl */
{"nn", HB_TAG('N','Y','N',' ')}, /* Norwegian Nynorsk (Nynorsk, Norwegian) */
- {"nn", HB_TAG('N','O','R',' ')}, /* Norwegian Nynorsk -> Norwegian */
{"nnh", HB_TAG('B','M','L',' ')}, /* Ngiemboon -> Bamileke */
{"nnz", HB_TAG('B','M','L',' ')}, /* Nda'nda' -> Bamileke */
{"no", HB_TAG('N','O','R',' ')}, /* Norwegian [macrolanguage] */
@@ -1093,7 +1097,7 @@ static const LangTag ot_languages[] = {
{"otw", HB_TAG('O','J','B',' ')}, /* Ottawa -> Ojibway */
{"oua", HB_TAG('B','B','R',' ')}, /* Tagargrent -> Berber */
{"pa", HB_TAG('P','A','N',' ')}, /* Punjabi */
- {"paa", HB_TAG_NONE }, /* Papuan [family] != Palestinian Aramaic */
+ {"paa", HB_TAG_NONE }, /* Papuan [collection] != Palestinian Aramaic */
/*{"pag", HB_TAG('P','A','G',' ')},*/ /* Pangasinan */
{"pal", HB_TAG_NONE }, /* Pahlavi != Pali */
/*{"pam", HB_TAG('P','A','M',' ')},*/ /* Pampanga -> Pampangan */
@@ -1308,6 +1312,9 @@ static const LangTag ot_languages[] = {
{"sgo", HB_TAG_NONE }, /* Songa (retired code) != Sango */
/*{"sgs", HB_TAG('S','G','S',' ')},*/ /* Samogitian */
{"sgw", HB_TAG('C','H','G',' ')}, /* Sebat Bet Gurage -> Chaha Gurage */
+ {"sh", HB_TAG('B','O','S',' ')}, /* Serbo-Croatian [macrolanguage] -> Bosnian */
+ {"sh", HB_TAG('H','R','V',' ')}, /* Serbo-Croatian [macrolanguage] -> Croatian */
+ {"sh", HB_TAG('S','R','B',' ')}, /* Serbo-Croatian [macrolanguage] -> Serbian */
{"shi", HB_TAG('S','H','I',' ')}, /* Tachelhit */
{"shi", HB_TAG('B','B','R',' ')}, /* Tachelhit -> Berber */
{"shl", HB_TAG('Q','I','N',' ')}, /* Shendu -> Chin */
@@ -1329,7 +1336,7 @@ static const LangTag ot_languages[] = {
{"skw", HB_TAG('C','P','P',' ')}, /* Skepi Creole Dutch -> Creoles */
{"sky", HB_TAG_NONE }, /* Sikaiana != Slovak */
{"sl", HB_TAG('S','L','V',' ')}, /* Slovenian */
- {"sla", HB_TAG_NONE }, /* Slavic [family] != Slavey */
+ {"sla", HB_TAG_NONE }, /* Slavic [collection] != Slavey */
{"sm", HB_TAG('S','M','O',' ')}, /* Samoan */
{"sma", HB_TAG('S','S','M',' ')}, /* Southern Sami */
{"smj", HB_TAG('L','S','M',' ')}, /* Lule Sami */
@@ -1451,7 +1458,7 @@ static const LangTag ot_languages[] = {
{"tpi", HB_TAG('C','P','P',' ')}, /* Tok Pisin -> Creoles */
{"tr", HB_TAG('T','R','K',' ')}, /* Turkish */
{"trf", HB_TAG('C','P','P',' ')}, /* Trinidadian Creole English -> Creoles */
- {"trk", HB_TAG_NONE }, /* Turkic [family] != Turkish */
+ {"trk", HB_TAG_NONE }, /* Turkic [collection] != Turkish */
{"tru", HB_TAG('T','U','A',' ')}, /* Turoyo -> Turoyo Aramaic */
{"tru", HB_TAG('S','Y','R',' ')}, /* Turoyo -> Syriac */
{"ts", HB_TAG('T','S','G',' ')}, /* Tsonga */
@@ -1593,7 +1600,7 @@ static const LangTag ot_languages[] = {
{"zlq", HB_TAG('Z','H','A',' ')}, /* Liuqian Zhuang -> Zhuang */
{"zmi", HB_TAG('M','L','Y',' ')}, /* Negeri Sembilan Malay -> Malay */
{"zmz", HB_TAG('B','A','D','0')}, /* Mbandja -> Banda */
- {"znd", HB_TAG_NONE }, /* Zande [family] != Zande */
+ {"znd", HB_TAG_NONE }, /* Zande [collection] != Zande */
{"zne", HB_TAG('Z','N','D',' ')}, /* Zande */
{"zom", HB_TAG('Q','I','N',' ')}, /* Zou -> Chin */
{"zqe", HB_TAG('Z','H','A',' ')}, /* Qiubei Zhuang -> Zhuang */
@@ -2607,14 +2614,8 @@ hb_ot_tags_from_complex_language (const char *lang_str,
if (0 == strcmp (&lang_str[1], "o-nyn"))
{
/* Norwegian Nynorsk (retired code) */
- unsigned int i;
- hb_tag_t possible_tags[] = {
- HB_TAG('N','Y','N',' '), /* Norwegian Nynorsk (Nynorsk, Norwegian) */
- HB_TAG('N','O','R',' '), /* Norwegian */
- };
- for (i = 0; i < 2 && i < *count; i++)
- tags[i] = possible_tags[i];
- *count = i;
+ tags[0] = HB_TAG('N','Y','N',' '); /* Norwegian Nynorsk (Nynorsk, Norwegian) */
+ *count = 1;
return true;
}
break;
@@ -2623,8 +2624,14 @@ hb_ot_tags_from_complex_language (const char *lang_str,
&& subtag_matches (lang_str, limit, "-md"))
{
/* Romanian; Moldova */
- tags[0] = HB_TAG('M','O','L',' '); /* Moldavian */
- *count = 1;
+ unsigned int i;
+ hb_tag_t possible_tags[] = {
+ HB_TAG('M','O','L',' '), /* Moldavian */
+ HB_TAG('R','O','M',' '), /* Romanian */
+ };
+ for (i = 0; i < 2 && i < *count; i++)
+ tags[i] = possible_tags[i];
+ *count = i;
return true;
}
break;
@@ -2813,15 +2820,15 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
case HB_TAG('A','R','K',' '): /* Rakhine */
return hb_language_from_string ("rki", -1); /* Rakhine */
case HB_TAG('A','T','H',' '): /* Athapaskan */
- return hb_language_from_string ("ath", -1); /* Athapascan [family] */
+ return hb_language_from_string ("ath", -1); /* Athapascan [collection] */
case HB_TAG('B','B','R',' '): /* Berber */
- return hb_language_from_string ("ber", -1); /* Berber [family] */
+ return hb_language_from_string ("ber", -1); /* Berber [collection] */
case HB_TAG('B','I','K',' '): /* Bikol */
return hb_language_from_string ("bik", -1); /* Bikol [macrolanguage] */
case HB_TAG('B','T','K',' '): /* Batak */
- return hb_language_from_string ("btk", -1); /* Batak [family] */
+ return hb_language_from_string ("btk", -1); /* Batak [collection] */
case HB_TAG('C','P','P',' '): /* Creoles */
- return hb_language_from_string ("crp", -1); /* Creoles and pidgins [family] */
+ return hb_language_from_string ("crp", -1); /* Creoles and pidgins [collection] */
case HB_TAG('C','R','R',' '): /* Carrier */
return hb_language_from_string ("crx", -1); /* Carrier */
case HB_TAG('D','G','R',' '): /* Dogri (macrolanguage) */
@@ -2838,6 +2845,8 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("fa", -1); /* Persian [macrolanguage] */
case HB_TAG('G','O','N',' '): /* Gondi */
return hb_language_from_string ("gon", -1); /* Gondi [macrolanguage] */
+ case HB_TAG('H','M','A',' '): /* High Mari */
+ return hb_language_from_string ("mrj", -1); /* Western Mari */
case HB_TAG('H','M','N',' '): /* Hmong */
return hb_language_from_string ("hmn", -1); /* Hmong [macrolanguage] */
case HB_TAG('H','N','D',' '): /* Hindko */
@@ -2847,7 +2856,7 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
case HB_TAG('I','B','A',' '): /* Iban */
return hb_language_from_string ("iba", -1); /* Iban */
case HB_TAG('I','J','O',' '): /* Ijo */
- return hb_language_from_string ("ijo", -1); /* Ijo [family] */
+ return hb_language_from_string ("ijo", -1); /* Ijo [collection] */
case HB_TAG('I','N','U',' '): /* Inuktitut */
return hb_language_from_string ("iu", -1); /* Inuktitut [macrolanguage] */
case HB_TAG('I','P','K',' '): /* Inupiat */
@@ -2873,11 +2882,13 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
case HB_TAG('K','P','L',' '): /* Kpelle */
return hb_language_from_string ("kpe", -1); /* Kpelle [macrolanguage] */
case HB_TAG('K','R','N',' '): /* Karen */
- return hb_language_from_string ("kar", -1); /* Karen [family] */
+ return hb_language_from_string ("kar", -1); /* Karen [collection] */
case HB_TAG('K','U','I',' '): /* Kui */
return hb_language_from_string ("uki", -1); /* Kui (India) */
case HB_TAG('K','U','R',' '): /* Kurdish */
return hb_language_from_string ("ku", -1); /* Kurdish [macrolanguage] */
+ case HB_TAG('L','M','A',' '): /* Low Mari */
+ return hb_language_from_string ("mhr", -1); /* Eastern Mari */
case HB_TAG('L','U','H',' '): /* Luyia */
return hb_language_from_string ("luy", -1); /* Luyia [macrolanguage] */
case HB_TAG('L','V','I',' '): /* Latvian */
@@ -2897,9 +2908,9 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
case HB_TAG('M','O','N','T'): /* Thailand Mon */
return hb_language_from_string ("mnw-TH", -1); /* Mon; Thailand */
case HB_TAG('M','Y','N',' '): /* Mayan */
- return hb_language_from_string ("myn", -1); /* Mayan [family] */
+ return hb_language_from_string ("myn", -1); /* Mayan [collection] */
case HB_TAG('N','A','H',' '): /* Nahuatl */
- return hb_language_from_string ("nah", -1); /* Nahuatl [family] */
+ return hb_language_from_string ("nah", -1); /* Nahuatl [collection] */
case HB_TAG('N','E','P',' '): /* Nepali */
return hb_language_from_string ("ne", -1); /* Nepali [macrolanguage] */
case HB_TAG('N','I','S',' '): /* Nisi */
@@ -2926,6 +2937,8 @@ hb_ot_ambiguous_tag_to_language (hb_tag_t tag)
return hb_language_from_string ("qwh", -1); /* Huaylas Ancash Quechua */
case HB_TAG('R','A','J',' '): /* Rajasthani */
return hb_language_from_string ("raj", -1); /* Rajasthani [macrolanguage] */
+ case HB_TAG('R','O','M',' '): /* Romanian */
+ return hb_language_from_string ("ro", -1); /* Romanian */
case HB_TAG('R','O','Y',' '): /* Romany */
return hb_language_from_string ("rom", -1); /* Romany [macrolanguage] */
case HB_TAG('S','Q','I',' '): /* Albanian */
diff --git a/thirdparty/harfbuzz/src/hb-ot-tag.cc b/thirdparty/harfbuzz/src/hb-ot-tag.cc
index 1837063af8..f50be97ad3 100644
--- a/thirdparty/harfbuzz/src/hb-ot-tag.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-tag.cc
@@ -41,6 +41,7 @@ hb_ot_old_tag_from_script (hb_script_t script)
switch ((hb_tag_t) script)
{
case HB_SCRIPT_INVALID: return HB_OT_TAG_DEFAULT_SCRIPT;
+ case HB_SCRIPT_MATH: return HB_OT_TAG_MATH_SCRIPT;
/* KATAKANA and HIRAGANA both map to 'kana' */
case HB_SCRIPT_HIRAGANA: return HB_TAG('k','a','n','a');
@@ -63,6 +64,8 @@ hb_ot_old_tag_to_script (hb_tag_t tag)
{
if (unlikely (tag == HB_OT_TAG_DEFAULT_SCRIPT))
return HB_SCRIPT_INVALID;
+ if (unlikely (tag == HB_OT_TAG_MATH_SCRIPT))
+ return HB_SCRIPT_MATH;
/* This side of the conversion is fully algorithmic. */
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh
index 05f289db26..e066558683 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-fvar-table.hh
@@ -263,7 +263,7 @@ struct fvar
if (coords_length && *coords_length)
{
hb_array_t<const HBFixed> instanceCoords = instance->get_coordinates (axisCount)
- .sub_array (0, *coords_length);
+ .sub_array (0, coords_length);
for (unsigned int i = 0; i < instanceCoords.length; i++)
coords[i] = instanceCoords.arrayZ[i].to_float ();
}
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh
index 49b5532d40..539213c339 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-gvar-table.hh
@@ -399,7 +399,7 @@ struct gvar
get_offset (glyphCount) - get_offset (0)));
}
- /* GlyphVariationData not sanitized here; must be checked while accessing each glyph varation data */
+ /* GlyphVariationData not sanitized here; must be checked while accessing each glyph variation data */
bool sanitize (hb_sanitize_context_t *c) const
{ return sanitize_shallow (c); }
@@ -498,9 +498,9 @@ struct gvar
public:
struct accelerator_t
{
- void init (hb_face_t *face)
+ accelerator_t (hb_face_t *face)
{ table = hb_sanitize_context_t ().reference_table<gvar> (face); }
- void fini () { table.destroy (); }
+ ~accelerator_t () { table.destroy (); }
private:
struct x_getter { static float get (const contour_point_t &p) { return p.x; } };
@@ -698,7 +698,9 @@ no_more_gaps:
DEFINE_SIZE_MIN (20);
};
-struct gvar_accelerator_t : gvar::accelerator_t {};
+struct gvar_accelerator_t : gvar::accelerator_t {
+ gvar_accelerator_t (hb_face_t *face) : gvar::accelerator_t (face) {}
+};
} /* namespace OT */
diff --git a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
index 074b6a3785..e9d90352f0 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
+++ b/thirdparty/harfbuzz/src/hb-ot-var-hvar-table.hh
@@ -177,9 +177,6 @@ struct hvarvvar_subset_plan_t
inner_maps.resize (var_store->get_sub_table_count ());
- for (unsigned int i = 0; i < inner_maps.length; i++)
- inner_maps[i].init ();
-
if (unlikely (!index_map_plans.length || !inner_sets.length || !inner_maps.length)) return;
bool retain_adv_map = false;
@@ -229,8 +226,8 @@ struct hvarvvar_subset_plan_t
for (unsigned int i = 0; i < inner_sets.length; i++)
hb_set_destroy (inner_sets[i]);
hb_set_destroy (adv_set);
- inner_maps.fini_deep ();
- index_map_plans.fini_deep ();
+ inner_maps.fini ();
+ index_map_plans.fini ();
}
hb_inc_bimap_t outer_map;
diff --git a/thirdparty/harfbuzz/src/hb-ot-var.cc b/thirdparty/harfbuzz/src/hb-ot-var.cc
index 6b42b45cd9..0376e26b4a 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var.cc
+++ b/thirdparty/harfbuzz/src/hb-ot-var.cc
@@ -303,6 +303,9 @@ hb_ot_var_normalize_variations (hb_face_t *face,
* values for the axis are mapped to the interval [-1,1], with the default
* axis value mapped to 0.
*
+ * The normalized values have 14 bits of fixed-point sub-integer precision as per
+ * OpenType specification.
+ *
* Any additional scaling defined in the face's `avar` table is also
* applied, as described at https://docs.microsoft.com/en-us/typography/opentype/spec/avar
*
diff --git a/thirdparty/harfbuzz/src/hb-ot-var.h b/thirdparty/harfbuzz/src/hb-ot-var.h
index ce201d3b4f..05147cc25e 100644
--- a/thirdparty/harfbuzz/src/hb-ot-var.h
+++ b/thirdparty/harfbuzz/src/hb-ot-var.h
@@ -109,7 +109,7 @@ typedef enum { /*< flags >*/
* @tag: The #hb_tag_t tag identifying the design variation of the axis
* @name_id: The `name` table Name ID that provides display names for the axis
* @flags: The #hb_ot_var_axis_flags_t flags for the axis
- * @min_value: The mininum value on the variation axis that the font covers
+ * @min_value: The minimum value on the variation axis that the font covers
* @default_value: The position on the variation axis corresponding to the font's defaults
* @max_value: The maximum value on the variation axis that the font covers
*
diff --git a/thirdparty/harfbuzz/src/hb-repacker.hh b/thirdparty/harfbuzz/src/hb-repacker.hh
index 5c46b4cccc..b1726d8beb 100644
--- a/thirdparty/harfbuzz/src/hb-repacker.hh
+++ b/thirdparty/harfbuzz/src/hb-repacker.hh
@@ -42,26 +42,13 @@ struct graph_t
{
struct vertex_t
{
- vertex_t () :
- distance (0),
- space (0),
- parents (),
- start (0),
- end (0),
- priority(0) {}
-
- void fini () {
- obj.fini ();
- parents.fini ();
- }
-
hb_serialize_context_t::object_t obj;
- int64_t distance;
- int64_t space;
+ int64_t distance = 0 ;
+ int64_t space = 0 ;
hb_vector_t<unsigned> parents;
- unsigned start;
- unsigned end;
- unsigned priority;
+ unsigned start = 0;
+ unsigned end = 0;
+ unsigned priority = 0;
bool is_shared () const
{
@@ -186,7 +173,7 @@ struct graph_t
~graph_t ()
{
- vertices_.fini_deep ();
+ vertices_.fini ();
}
bool in_error () const
@@ -309,7 +296,7 @@ struct graph_t
remap_all_obj_indices (id_map, &sorted_graph);
hb_swap (vertices_, sorted_graph);
- sorted_graph.fini_deep ();
+ sorted_graph.fini ();
}
/*
@@ -369,7 +356,7 @@ struct graph_t
remap_all_obj_indices (id_map, &sorted_graph);
hb_swap (vertices_, sorted_graph);
- sorted_graph.fini_deep ();
+ sorted_graph.fini ();
}
/*
@@ -402,11 +389,15 @@ struct graph_t
while (roots)
{
unsigned next = HB_SET_VALUE_INVALID;
+ if (unlikely (!check_success (!roots.in_error ()))) break;
if (!roots.next (&next)) break;
hb_set_t connected_roots;
find_connected_nodes (next, roots, visited, connected_roots);
+ if (unlikely (!check_success (!connected_roots.in_error ()))) break;
+
isolate_subgraph (connected_roots);
+ if (unlikely (!check_success (!connected_roots.in_error ()))) break;
unsigned next_space = this->next_space ();
num_roots_for_space_.push (0);
@@ -423,6 +414,8 @@ struct graph_t
// into the 32 bit space as needed, instead of using isolation.
}
+
+
return true;
}
@@ -865,7 +858,7 @@ struct graph_t
// Redundant ones are filtered out later on by the visited set.
// According to https://www3.cs.stonybrook.edu/~rezaul/papers/TR-07-54.pdf
// for practical performance this is faster then using a more advanced queue
- // (such as a fibonaacci queue) with a fast decrease priority.
+ // (such as a fibonacci queue) with a fast decrease priority.
for (unsigned i = 0; i < vertices_.length; i++)
{
if (i == vertices_.length - 1)
@@ -1074,6 +1067,7 @@ struct graph_t
hb_set_t& visited,
hb_set_t& connected)
{
+ if (unlikely (!check_success (!visited.in_error ()))) return;
if (visited.has (start_idx)) return;
visited.add (start_idx);
diff --git a/thirdparty/harfbuzz/src/hb-serialize.hh b/thirdparty/harfbuzz/src/hb-serialize.hh
index 823c0be8b5..6615f033c5 100644
--- a/thirdparty/harfbuzz/src/hb-serialize.hh
+++ b/thirdparty/harfbuzz/src/hb-serialize.hh
@@ -279,7 +279,7 @@ struct hb_serialize_context_t
object_pool.release (obj);
}
- /* Set share to false when an object is unlikely sharable with others
+ /* Set share to false when an object is unlikely shareable with others
* so not worth an attempt, or a contiguous table is serialized as
* multiple consecutive objects in the reverse order so can't be shared.
*/
@@ -381,7 +381,7 @@ struct hb_serialize_context_t
// Adding a virtual link from object a to object b will ensure that object b is always packed after
// object a in the final serialized order.
//
- // This is useful in certain situtations where there needs to be a specific ordering in the
+ // This is useful in certain situations where there needs to be a specific ordering in the
// final serialization. Such as when platform bugs require certain orderings, or to provide
// guidance to the repacker for better offset overflow resolution.
void add_virtual_link (objidx_t objidx)
@@ -510,7 +510,7 @@ struct hb_serialize_context_t
{ return reinterpret_cast<Type *> (this->head); }
template <typename Type>
Type *start_embed (const Type &obj) const
- { return start_embed (hb_addressof (obj)); }
+ { return start_embed (std::addressof (obj)); }
bool err (hb_serialize_error_t err_type)
{
@@ -548,7 +548,7 @@ struct hb_serialize_context_t
}
template <typename Type>
Type *embed (const Type &obj)
- { return embed (hb_addressof (obj)); }
+ { return embed (std::addressof (obj)); }
template <typename Type, typename ...Ts> auto
_copy (const Type &src, hb_priority<1>, Ts&&... ds) HB_RETURN
@@ -595,19 +595,19 @@ struct hb_serialize_context_t
}
template <typename Type>
Type *extend_size (Type &obj, size_t size)
- { return extend_size (hb_addressof (obj), size); }
+ { return extend_size (std::addressof (obj), size); }
template <typename Type>
Type *extend_min (Type *obj) { return extend_size (obj, obj->min_size); }
template <typename Type>
- Type *extend_min (Type &obj) { return extend_min (hb_addressof (obj)); }
+ Type *extend_min (Type &obj) { return extend_min (std::addressof (obj)); }
template <typename Type, typename ...Ts>
Type *extend (Type *obj, Ts&&... ds)
{ return extend_size (obj, obj->get_size (std::forward<Ts> (ds)...)); }
template <typename Type, typename ...Ts>
Type *extend (Type &obj, Ts&&... ds)
- { return extend (hb_addressof (obj), std::forward<Ts> (ds)...); }
+ { return extend (std::addressof (obj), std::forward<Ts> (ds)...); }
/* Output routines. */
hb_bytes_t copy_bytes () const
diff --git a/thirdparty/harfbuzz/src/hb-shape.cc b/thirdparty/harfbuzz/src/hb-shape.cc
index c1f619c81c..3407e1af42 100644
--- a/thirdparty/harfbuzz/src/hb-shape.cc
+++ b/thirdparty/harfbuzz/src/hb-shape.cc
@@ -126,6 +126,13 @@ hb_shape_full (hb_font_t *font,
unsigned int num_features,
const char * const *shaper_list)
{
+ hb_buffer_t *text_buffer = nullptr;
+ if (buffer->flags & HB_BUFFER_FLAG_VERIFY)
+ {
+ text_buffer = hb_buffer_create ();
+ hb_buffer_append (text_buffer, buffer, 0, -1);
+ }
+
hb_shape_plan_t *shape_plan = hb_shape_plan_create_cached2 (font->face, &buffer->props,
features, num_features,
font->coords, font->num_coords,
@@ -133,6 +140,17 @@ hb_shape_full (hb_font_t *font,
hb_bool_t res = hb_shape_plan_execute (shape_plan, font, buffer, features, num_features);
hb_shape_plan_destroy (shape_plan);
+ if (text_buffer)
+ {
+ if (res && !buffer->verify (text_buffer,
+ font,
+ features,
+ num_features,
+ shaper_list))
+ res = false;
+ hb_buffer_destroy (text_buffer);
+ }
+
return res;
}
diff --git a/thirdparty/harfbuzz/src/hb-static.cc b/thirdparty/harfbuzz/src/hb-static.cc
index ec4b241470..bd698814e8 100644
--- a/thirdparty/harfbuzz/src/hb-static.cc
+++ b/thirdparty/harfbuzz/src/hb-static.cc
@@ -33,6 +33,7 @@
#include "hb-aat-layout-feat-table.hh"
#include "hb-ot-layout-common.hh"
#include "hb-ot-cmap-table.hh"
+#include "hb-ot-glyf-table.hh"
#include "hb-ot-head-table.hh"
#include "hb-ot-maxp-table.hh"
@@ -55,17 +56,41 @@ const unsigned char _hb_Null_AAT_Lookup[2] = {0xFF, 0xFF};
/* hb_face_t */
+static inline unsigned
+load_num_glyphs_from_loca (const hb_face_t *face)
+{
+ unsigned ret = 0;
+
+ unsigned indexToLocFormat = face->table.head->indexToLocFormat;
+
+ if (indexToLocFormat <= 1)
+ {
+ bool short_offset = 0 == indexToLocFormat;
+ hb_blob_t *loca_blob = face->table.loca.get_blob ();
+ ret = hb_max (1u, loca_blob->length / (short_offset ? 2 : 4)) - 1;
+ }
+
+ return ret;
+}
+
+static inline unsigned
+load_num_glyphs_from_maxp (const hb_face_t *face)
+{
+ return face->table.maxp->get_num_glyphs ();
+}
+
unsigned int
hb_face_t::load_num_glyphs () const
{
- hb_sanitize_context_t c = hb_sanitize_context_t ();
- c.set_num_glyphs (0); /* So we don't recurse ad infinitum. */
- hb_blob_t *maxp_blob = c.reference_table<OT::maxp> (this);
- const OT::maxp *maxp_table = maxp_blob->as<OT::maxp> ();
+ unsigned ret = 0;
+
+#ifndef HB_NO_BORING_EXPANSION
+ ret = hb_max (ret, load_num_glyphs_from_loca (this));
+#endif
+
+ ret = hb_max (ret, load_num_glyphs_from_maxp (this));
- unsigned int ret = maxp_table->get_num_glyphs ();
num_glyphs.set_relaxed (ret);
- hb_blob_destroy (maxp_blob);
return ret;
}
diff --git a/thirdparty/harfbuzz/src/hb-style.cc b/thirdparty/harfbuzz/src/hb-style.cc
index f1b44cea53..c7d7d713c2 100644
--- a/thirdparty/harfbuzz/src/hb-style.cc
+++ b/thirdparty/harfbuzz/src/hb-style.cc
@@ -46,15 +46,14 @@
static inline float
_hb_angle_to_ratio (float a)
{
- return tanf (a * float (M_PI / 180.));
+ return tanf (a * float (-M_PI / 180.));
}
-#if 0
+
static inline float
_hb_ratio_to_angle (float r)
{
- return atanf (r) * float (180. / M_PI);
+ return atanf (r) * float (-180. / M_PI);
}
-#endif
/**
* hb_style_get_value:
@@ -109,7 +108,14 @@ hb_style_get_value (hb_font_t *font, hb_style_tag_t style_tag)
: 12.f;
}
case HB_STYLE_TAG_SLANT_ANGLE:
- return face->table.post->table->italicAngle.to_float ();
+ {
+ float angle = face->table.post->table->italicAngle.to_float ();
+
+ if (font->slant)
+ angle = _hb_ratio_to_angle (font->slant + _hb_angle_to_ratio (angle));
+
+ return angle;
+ }
case HB_STYLE_TAG_WIDTH:
return face->table.OS2->has_data ()
? face->table.OS2->get_width ()
diff --git a/thirdparty/harfbuzz/src/hb-style.h b/thirdparty/harfbuzz/src/hb-style.h
index 30a6f2b878..d17d2daa5f 100644
--- a/thirdparty/harfbuzz/src/hb-style.h
+++ b/thirdparty/harfbuzz/src/hb-style.h
@@ -43,8 +43,10 @@ HB_BEGIN_DECLS
* @HB_STYLE_TAG_SLANT_ANGLE: Used to vary between upright and slanted text. Values
* must be greater than -90 and less than +90. Values can be interpreted as
* the angle, in counter-clockwise degrees, of oblique slant from whatever the
- * designer considers to be upright for that font design.
+ * designer considers to be upright for that font design. Typical right-leaning
+ * Italic fonts have a negative slant angle (typically around -12)
* @HB_STYLE_TAG_SLANT_RATIO: same as @HB_STYLE_TAG_SLANT_ANGLE expression as ratio.
+ * Typical right-leaning Italic fonts have a positive slant ratio (typically around 0.2)
* @HB_STYLE_TAG_WIDTH: Used to vary width of text from narrower to wider.
* Non-zero. Values can be interpreted as a percentage of whatever the font
* designer considers “normal width†for that font design.
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff-common.hh b/thirdparty/harfbuzz/src/hb-subset-cff-common.hh
index 7fd96ca86d..18657705fa 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff-common.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-cff-common.hh
@@ -275,60 +275,36 @@ struct subr_flattener_t
struct subr_closures_t
{
- subr_closures_t () : valid (false), global_closure (nullptr)
- { local_closures.init (); }
-
- void init (unsigned int fd_count)
+ subr_closures_t (unsigned int fd_count) : valid (false), global_closure (), local_closures ()
{
valid = true;
- global_closure = hb_set_create ();
- if (global_closure == hb_set_get_empty ())
- valid = false;
if (!local_closures.resize (fd_count))
valid = false;
-
- for (unsigned int i = 0; i < local_closures.length; i++)
- {
- local_closures[i] = hb_set_create ();
- if (local_closures[i] == hb_set_get_empty ())
- valid = false;
- }
- }
-
- void fini ()
- {
- hb_set_destroy (global_closure);
- for (unsigned int i = 0; i < local_closures.length; i++)
- hb_set_destroy (local_closures[i]);
- local_closures.fini ();
}
void reset ()
{
- hb_set_clear (global_closure);
+ global_closure.clear();
for (unsigned int i = 0; i < local_closures.length; i++)
- hb_set_clear (local_closures[i]);
+ local_closures[i].clear();
}
bool is_valid () const { return valid; }
bool valid;
- hb_set_t *global_closure;
- hb_vector_t<hb_set_t *> local_closures;
+ hb_set_t global_closure;
+ hb_vector_t<hb_set_t> local_closures;
};
struct parsed_cs_op_t : op_str_t
{
void init (unsigned int subr_num_ = 0)
{
- op_str_t::init ();
subr_num = subr_num_;
drop_flag = false;
keep_flag = false;
skip_flag = false;
}
- void fini () { op_str_t::fini (); }
-
bool for_drop () const { return drop_flag; }
void set_drop () { if (!for_keep ()) drop_flag = true; }
@@ -416,16 +392,6 @@ struct parsed_cs_str_t : parsed_values_t<parsed_cs_op_t>
struct parsed_cs_str_vec_t : hb_vector_t<parsed_cs_str_t>
{
- void init (unsigned int len_ = 0)
- {
- SUPER::init ();
- if (unlikely (!resize (len_)))
- return;
- for (unsigned int i = 0; i < length; i++)
- (*this)[i].init ();
- }
- void fini () { SUPER::fini_deep (); }
-
private:
typedef hb_vector_t<parsed_cs_str_t> SUPER;
};
@@ -496,7 +462,7 @@ struct subr_subset_param_t
struct subr_remap_t : hb_inc_bimap_t
{
- void create (hb_set_t *closure)
+ void create (const hb_set_t *closure)
{
/* create a remapping of subroutine numbers from old to new.
* no optimization based on usage counts. fonttools doesn't appear doing that either.
@@ -526,19 +492,9 @@ struct subr_remap_t : hb_inc_bimap_t
struct subr_remaps_t
{
- subr_remaps_t ()
+ subr_remaps_t (unsigned int fdCount)
{
- global_remap.init ();
- local_remaps.init ();
- }
-
- ~subr_remaps_t () { fini (); }
-
- void init (unsigned int fdCount)
- {
- if (unlikely (!local_remaps.resize (fdCount))) return;
- for (unsigned int i = 0; i < fdCount; i++)
- local_remaps[i].init ();
+ local_remaps.resize (fdCount);
}
bool in_error()
@@ -548,15 +504,9 @@ struct subr_remaps_t
void create (subr_closures_t& closures)
{
- global_remap.create (closures.global_closure);
+ global_remap.create (&closures.global_closure);
for (unsigned int i = 0; i < local_remaps.length; i++)
- local_remaps[i].create (closures.local_closures[i]);
- }
-
- void fini ()
- {
- global_remap.fini ();
- local_remaps.fini_deep ();
+ local_remaps[i].create (&closures.local_closures[i]);
}
subr_remap_t global_remap;
@@ -567,21 +517,8 @@ template <typename SUBSETTER, typename SUBRS, typename ACC, typename ENV, typena
struct subr_subsetter_t
{
subr_subsetter_t (ACC &acc_, const hb_subset_plan_t *plan_)
- : acc (acc_), plan (plan_)
- {
- parsed_charstrings.init ();
- parsed_global_subrs.init ();
- parsed_local_subrs.init ();
- }
-
- ~subr_subsetter_t ()
- {
- closures.fini ();
- remaps.fini ();
- parsed_charstrings.fini_deep ();
- parsed_global_subrs.fini_deep ();
- parsed_local_subrs.fini_deep ();
- }
+ : acc (acc_), plan (plan_), closures(acc_.fdCount), remaps(acc_.fdCount)
+ {}
/* Subroutine subsetting with --no-desubroutinize runs in phases:
*
@@ -599,11 +536,8 @@ struct subr_subsetter_t
*/
bool subset (void)
{
- closures.init (acc.fdCount);
- remaps.init (acc.fdCount);
-
- parsed_charstrings.init (plan->num_output_glyphs ());
- parsed_global_subrs.init (acc.globalSubrs->count);
+ parsed_charstrings.resize (plan->num_output_glyphs ());
+ parsed_global_subrs.resize (acc.globalSubrs->count);
if (unlikely (remaps.in_error()
|| parsed_charstrings.in_error ()
@@ -615,7 +549,7 @@ struct subr_subsetter_t
for (unsigned int i = 0; i < acc.fdCount; i++)
{
- parsed_local_subrs[i].init (acc.privateDicts[i].localSubrs->count);
+ parsed_local_subrs[i].resize (acc.privateDicts[i].localSubrs->count);
if (unlikely (parsed_local_subrs[i].in_error ())) return false;
}
if (unlikely (!closures.valid))
@@ -638,7 +572,7 @@ struct subr_subsetter_t
subr_subset_param_t param;
param.init (&parsed_charstrings[i],
&parsed_global_subrs, &parsed_local_subrs[fd],
- closures.global_closure, closures.local_closures[fd],
+ &closures.global_closure, &closures.local_closures[fd],
plan->flags & HB_SUBSET_FLAGS_NO_HINTING);
if (unlikely (!interp.interpret (param)))
@@ -662,7 +596,7 @@ struct subr_subsetter_t
subr_subset_param_t param;
param.init (&parsed_charstrings[i],
&parsed_global_subrs, &parsed_local_subrs[fd],
- closures.global_closure, closures.local_closures[fd],
+ &closures.global_closure, &closures.local_closures[fd],
plan->flags & HB_SUBSET_FLAGS_NO_HINTING);
drop_hints_param_t drop;
@@ -687,7 +621,7 @@ struct subr_subsetter_t
subr_subset_param_t param;
param.init (&parsed_charstrings[i],
&parsed_global_subrs, &parsed_local_subrs[fd],
- closures.global_closure, closures.local_closures[fd],
+ &closures.global_closure, &closures.local_closures[fd],
plan->flags & HB_SUBSET_FLAGS_NO_HINTING);
collect_subr_refs_in_str (parsed_charstrings[i], param);
}
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff1.cc b/thirdparty/harfbuzz/src/hb-subset-cff1.cc
index b4e24122c9..35fecd67bc 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff1.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-cff1.cc
@@ -362,43 +362,11 @@ struct cff1_subr_subsetter_t : subr_subsetter_t<cff1_subr_subsetter_t, CFF1Subrs
struct cff_subset_plan {
cff_subset_plan ()
- : info (),
- orig_fdcount (0),
- subset_fdcount (1),
- subset_fdselect_format (0),
- drop_hints (false),
- desubroutinize(false)
{
- topdict_mod.init ();
- subset_fdselect_ranges.init ();
- fdmap.init ();
- subset_charstrings.init ();
- subset_globalsubrs.init ();
- subset_localsubrs.init ();
- fontdicts_mod.init ();
- subset_enc_code_ranges.init ();
- subset_enc_supp_codes.init ();
- subset_charset_ranges.init ();
- sidmap.init ();
for (unsigned int i = 0; i < name_dict_values_t::ValCount; i++)
topDictModSIDs[i] = CFF_UNDEF_SID;
}
- ~cff_subset_plan ()
- {
- topdict_mod.fini ();
- subset_fdselect_ranges.fini ();
- fdmap.fini ();
- subset_charstrings.fini_deep ();
- subset_globalsubrs.fini_deep ();
- subset_localsubrs.fini_deep ();
- fontdicts_mod.fini ();
- subset_enc_code_ranges.fini ();
- subset_enc_supp_codes.fini ();
- subset_charset_ranges.fini ();
- sidmap.fini ();
- }
-
void plan_subset_encoding (const OT::cff1::accelerator_subset_t &acc, hb_subset_plan_t *plan)
{
const Encoding *encoding = acc.encoding;
@@ -672,9 +640,9 @@ struct cff_subset_plan {
cff1_sub_table_info_t info;
unsigned int num_glyphs;
- unsigned int orig_fdcount;
- unsigned int subset_fdcount;
- unsigned int subset_fdselect_format;
+ unsigned int orig_fdcount = 0;
+ unsigned int subset_fdcount = 1;
+ unsigned int subset_fdselect_format = 0;
hb_vector_t<code_pair_t> subset_fdselect_ranges;
/* font dict index remap table from fullset FDArray to subset FDArray.
@@ -686,7 +654,7 @@ struct cff_subset_plan {
hb_vector_t<str_buff_vec_t> subset_localsubrs;
hb_vector_t<cff1_font_dict_values_mod_t> fontdicts_mod;
- bool drop_hints;
+ bool drop_hints = false;
bool gid_renum;
bool subset_encoding;
@@ -702,7 +670,7 @@ struct cff_subset_plan {
remap_sid_t sidmap;
unsigned int topDictModSIDs[name_dict_values_t::ValCount];
- bool desubroutinize;
+ bool desubroutinize = false;
};
static bool _serialize_cff1 (hb_serialize_context_t *c,
diff --git a/thirdparty/harfbuzz/src/hb-subset-cff2.cc b/thirdparty/harfbuzz/src/hb-subset-cff2.cc
index 896ae64016..92dd6b1d2c 100644
--- a/thirdparty/harfbuzz/src/hb-subset-cff2.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-cff2.cc
@@ -233,29 +233,6 @@ struct cff2_subr_subsetter_t : subr_subsetter_t<cff2_subr_subsetter_t, CFF2Subrs
};
struct cff2_subset_plan {
- cff2_subset_plan ()
- : orig_fdcount (0),
- subset_fdcount(1),
- subset_fdselect_size (0),
- subset_fdselect_format (0),
- drop_hints (false),
- desubroutinize (false)
- {
- subset_fdselect_ranges.init ();
- fdmap.init ();
- subset_charstrings.init ();
- subset_globalsubrs.init ();
- subset_localsubrs.init ();
- }
-
- ~cff2_subset_plan ()
- {
- subset_fdselect_ranges.fini ();
- fdmap.fini ();
- subset_charstrings.fini_deep ();
- subset_globalsubrs.fini_deep ();
- subset_localsubrs.fini_deep ();
- }
bool create (const OT::cff2::accelerator_subset_t &acc,
hb_subset_plan_t *plan)
@@ -320,10 +297,10 @@ struct cff2_subset_plan {
cff2_sub_table_info_t info;
- unsigned int orig_fdcount;
- unsigned int subset_fdcount;
- unsigned int subset_fdselect_size;
- unsigned int subset_fdselect_format;
+ unsigned int orig_fdcount = 0;
+ unsigned int subset_fdcount = 1;
+ unsigned int subset_fdselect_size = 0;
+ unsigned int subset_fdselect_format = 0;
hb_vector_t<code_pair_t> subset_fdselect_ranges;
hb_inc_bimap_t fdmap;
@@ -332,8 +309,8 @@ struct cff2_subset_plan {
str_buff_vec_t subset_globalsubrs;
hb_vector_t<str_buff_vec_t> subset_localsubrs;
- bool drop_hints;
- bool desubroutinize;
+ bool drop_hints = false;
+ bool desubroutinize = false;
};
static bool _serialize_cff2 (hb_serialize_context_t *c,
@@ -473,12 +450,8 @@ _hb_subset_cff2 (const OT::cff2::accelerator_subset_t &acc,
bool
hb_subset_cff2 (hb_subset_context_t *c)
{
- OT::cff2::accelerator_subset_t acc;
- acc.init (c->plan->source);
- bool result = likely (acc.is_valid ()) && _hb_subset_cff2 (acc, c);
- acc.fini ();
-
- return result;
+ OT::cff2::accelerator_subset_t acc (c->plan->source);
+ return acc.is_valid () && _hb_subset_cff2 (acc, c);
}
#endif
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.cc b/thirdparty/harfbuzz/src/hb-subset-plan.cc
index 883ab82093..4481758415 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.cc
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.cc
@@ -111,7 +111,7 @@ static void _collect_layout_indices (hb_face_t *face,
retain_all_features = false;
continue;
}
-
+
if (visited_features.has (tag))
continue;
@@ -228,10 +228,8 @@ _cmap_closure (hb_face_t *face,
const hb_set_t *unicodes,
hb_set_t *glyphset)
{
- OT::cmap::accelerator_t cmap;
- cmap.init (face);
+ OT::cmap::accelerator_t cmap (face);
cmap.table->closure_glyphs (unicodes, glyphset);
- cmap.fini ();
}
static void _colr_closure (hb_face_t *face,
@@ -239,8 +237,7 @@ static void _colr_closure (hb_face_t *face,
hb_map_t *palettes_map,
hb_set_t *glyphs_colred)
{
- OT::COLR::accelerator_t colr;
- colr.init (face);
+ OT::COLR::accelerator_t colr (face);
if (!colr.is_valid ()) return;
unsigned iteration_count = 0;
@@ -252,9 +249,9 @@ static void _colr_closure (hb_face_t *face,
hb_set_t glyphset_colrv0;
for (hb_codepoint_t gid : glyphs_colred->iter ())
colr.closure_glyphs (gid, &glyphset_colrv0);
-
+
glyphs_colred->union_ (glyphset_colrv0);
-
+
//closure for COLRv1
colr.closure_forV1 (glyphs_colred, &layer_indices, &palette_indices);
} while (iteration_count++ <= HB_CLOSURE_MAX_STAGES &&
@@ -263,7 +260,6 @@ static void _colr_closure (hb_face_t *face,
colr.closure_V0palette_indices (glyphs_colred, &palette_indices);
_remap_indexes (&layer_indices, layers_map);
_remap_palette_indexes (&palette_indices, palettes_map);
- colr.fini ();
}
static inline void
@@ -294,8 +290,7 @@ _populate_unicodes_to_retain (const hb_set_t *unicodes,
const hb_set_t *glyphs,
hb_subset_plan_t *plan)
{
- OT::cmap::accelerator_t cmap;
- cmap.init (plan->source);
+ OT::cmap::accelerator_t cmap (plan->source);
constexpr static const int size_threshold = 4096;
@@ -343,8 +338,6 @@ _populate_unicodes_to_retain (const hb_set_t *unicodes,
+ plan->codepoint_to_glyph->keys () | hb_sink (plan->unicodes);
+ plan->codepoint_to_glyph->values () | hb_sink (plan->_glyphset_gsub);
-
- cmap.fini ();
}
static void
@@ -353,13 +346,9 @@ _populate_gids_to_retain (hb_subset_plan_t* plan,
bool close_over_gpos,
bool close_over_gdef)
{
- OT::glyf::accelerator_t glyf;
+ OT::glyf::accelerator_t glyf (plan->source);
#ifndef HB_NO_SUBSET_CFF
- OT::cff1::accelerator_t cff;
-#endif
- glyf.init (plan->source);
-#ifndef HB_NO_SUBSET_CFF
- cff.init (plan->source);
+ OT::cff1::accelerator_t cff (plan->source);
#endif
plan->_glyphset_gsub->add (0); // Not-def
@@ -419,11 +408,6 @@ _populate_gids_to_retain (hb_subset_plan_t* plan,
plan->layout_variation_indices,
plan->layout_variation_idx_map);
#endif
-
-#ifndef HB_NO_SUBSET_CFF
- cff.fini ();
-#endif
- glyf.fini ();
}
static void
@@ -474,7 +458,7 @@ _nameid_closure (hb_face_t *face,
}
/**
- * hb_subset_plan_create:
+ * hb_subset_plan_create_or_fail:
* @face: font face to create the plan for.
* @input: a #hb_subset_input_t input.
*
@@ -483,17 +467,18 @@ _nameid_closure (hb_face_t *face,
* which tables and glyphs should be retained.
*
* Return value: (transfer full): New subset plan. Destroy with
- * hb_subset_plan_destroy().
+ * hb_subset_plan_destroy(). If there is a failure creating the plan
+ * nullptr will be returned.
*
- * Since: 1.7.5
+ * Since: 4.0.0
**/
hb_subset_plan_t *
-hb_subset_plan_create (hb_face_t *face,
- const hb_subset_input_t *input)
+hb_subset_plan_create_or_fail (hb_face_t *face,
+ const hb_subset_input_t *input)
{
hb_subset_plan_t *plan;
if (unlikely (!(plan = hb_object_create<hb_subset_plan_t> ())))
- return const_cast<hb_subset_plan_t *> (&Null (hb_subset_plan_t));
+ return nullptr;
plan->successful = true;
plan->flags = input->flags;
@@ -530,8 +515,9 @@ hb_subset_plan_create (hb_face_t *face,
plan->layout_variation_indices = hb_set_create ();
plan->layout_variation_idx_map = hb_map_create ();
- if (plan->in_error ()) {
- return plan;
+ if (unlikely (plan->in_error ())) {
+ hb_subset_plan_destroy (plan);
+ return nullptr;
}
_populate_unicodes_to_retain (input->sets.unicodes, input->sets.glyphs, plan);
@@ -548,6 +534,10 @@ hb_subset_plan_create (hb_face_t *face,
plan->reverse_glyph_map,
&plan->_num_output_glyphs);
+ if (unlikely (plan->in_error ())) {
+ hb_subset_plan_destroy (plan);
+ return nullptr;
+ }
return plan;
}
@@ -558,7 +548,7 @@ hb_subset_plan_create (hb_face_t *face,
* Decreases the reference count on @plan, and if it reaches zero, destroys
* @plan, freeing all memory.
*
- * Since: 1.7.5
+ * Since: 4.0.0
**/
void
hb_subset_plan_destroy (hb_subset_plan_t *plan)
@@ -612,3 +602,116 @@ hb_subset_plan_destroy (hb_subset_plan_t *plan)
hb_free (plan);
}
+
+/**
+ * hb_subset_plan_old_to_new_glyph_mapping:
+ * @plan: a subsetting plan.
+ *
+ * Returns the mapping between glyphs in the original font to glyphs in the
+ * subset that will be produced by @plan
+ *
+ * Return value: (transfer none):
+ * A pointer to the #hb_map_t of the mapping.
+ *
+ * Since: 4.0.0
+ **/
+const hb_map_t*
+hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan)
+{
+ return plan->glyph_map;
+}
+
+/**
+ * hb_subset_plan_new_to_old_glyph_mapping:
+ * @plan: a subsetting plan.
+ *
+ * Returns the mapping between glyphs in the subset that will be produced by
+ * @plan and the glyph in the original font.
+ *
+ * Return value: (transfer none):
+ * A pointer to the #hb_map_t of the mapping.
+ *
+ * Since: 4.0.0
+ **/
+const hb_map_t*
+hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan)
+{
+ return plan->reverse_glyph_map;
+}
+
+/**
+ * hb_subset_plan_unicode_to_old_glyph_mapping:
+ * @plan: a subsetting plan.
+ *
+ * Returns the mapping between codepoints in the original font and the
+ * associated glyph id in the original font.
+ *
+ * Return value: (transfer none):
+ * A pointer to the #hb_map_t of the mapping.
+ *
+ * Since: 4.0.0
+ **/
+const hb_map_t*
+hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan)
+{
+ return plan->codepoint_to_glyph;
+}
+
+/**
+ * hb_subset_plan_reference: (skip)
+ * @plan: a #hb_subset_plan_t object.
+ *
+ * Increases the reference count on @plan.
+ *
+ * Return value: @plan.
+ *
+ * Since: 4.0.0
+ **/
+hb_subset_plan_t *
+hb_subset_plan_reference (hb_subset_plan_t *plan)
+{
+ return hb_object_reference (plan);
+}
+
+/**
+ * hb_subset_plan_set_user_data: (skip)
+ * @plan: a #hb_subset_plan_t object.
+ * @key: The user-data key to set
+ * @data: A pointer to the user data
+ * @destroy: (nullable): A callback to call when @data is not needed anymore
+ * @replace: Whether to replace an existing data with the same key
+ *
+ * Attaches a user-data key/data pair to the given subset plan object.
+ *
+ * Return value: %true if success, %false otherwise
+ *
+ * Since: 4.0.0
+ **/
+hb_bool_t
+hb_subset_plan_set_user_data (hb_subset_plan_t *plan,
+ hb_user_data_key_t *key,
+ void *data,
+ hb_destroy_func_t destroy,
+ hb_bool_t replace)
+{
+ return hb_object_set_user_data (plan, key, data, destroy, replace);
+}
+
+/**
+ * hb_subset_plan_get_user_data: (skip)
+ * @plan: a #hb_subset_plan_t object.
+ * @key: The user-data key to query
+ *
+ * Fetches the user data associated with the specified key,
+ * attached to the specified subset plan object.
+ *
+ * Return value: (transfer none): A pointer to the user data
+ *
+ * Since: 4.0.0
+ **/
+void *
+hb_subset_plan_get_user_data (const hb_subset_plan_t *plan,
+ hb_user_data_key_t *key)
+{
+ return hb_object_get_user_data (plan, key);
+}
diff --git a/thirdparty/harfbuzz/src/hb-subset-plan.hh b/thirdparty/harfbuzz/src/hb-subset-plan.hh
index b9244e5cb2..ab2c4c302c 100644
--- a/thirdparty/harfbuzz/src/hb-subset-plan.hh
+++ b/thirdparty/harfbuzz/src/hb-subset-plan.hh
@@ -198,13 +198,4 @@ struct hb_subset_plan_t
}
};
-typedef struct hb_subset_plan_t hb_subset_plan_t;
-
-HB_INTERNAL hb_subset_plan_t *
-hb_subset_plan_create (hb_face_t *face,
- const hb_subset_input_t *input);
-
-HB_INTERNAL void
-hb_subset_plan_destroy (hb_subset_plan_t *plan);
-
#endif /* HB_SUBSET_PLAN_HH */
diff --git a/thirdparty/harfbuzz/src/hb-subset.cc b/thirdparty/harfbuzz/src/hb-subset.cc
index bb46e5b97f..aa8f2c6fb0 100644
--- a/thirdparty/harfbuzz/src/hb-subset.cc
+++ b/thirdparty/harfbuzz/src/hb-subset.cc
@@ -343,9 +343,33 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
{
if (unlikely (!input || !source)) return hb_face_get_empty ();
- hb_subset_plan_t *plan = hb_subset_plan_create (source, input);
- if (unlikely (plan->in_error ())) {
- hb_subset_plan_destroy (plan);
+ hb_subset_plan_t *plan = hb_subset_plan_create_or_fail (source, input);
+ if (unlikely (!plan)) {
+ return nullptr;
+ }
+
+ hb_face_t * result = hb_subset_plan_execute_or_fail (plan);
+ hb_subset_plan_destroy (plan);
+ return result;
+}
+
+
+/**
+ * hb_subset_plan_execute_or_fail:
+ * @plan: a subsetting plan.
+ *
+ * Executes the provided subsetting @plan.
+ *
+ * Return value:
+ * on success returns a reference to generated font subset. If the subsetting operation fails
+ * returns nullptr.
+ *
+ * Since: 4.0.0
+ **/
+hb_face_t *
+hb_subset_plan_execute_or_fail (hb_subset_plan_t *plan)
+{
+ if (unlikely (!plan || plan->in_error ())) {
return nullptr;
}
@@ -353,7 +377,7 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
bool success = true;
hb_tag_t table_tags[32];
unsigned offset = 0, num_tables = ARRAY_LENGTH (table_tags);
- while ((hb_face_get_table_tags (source, offset, &num_tables, table_tags), num_tables))
+ while ((hb_face_get_table_tags (plan->source, offset, &num_tables, table_tags), num_tables))
{
for (unsigned i = 0; i < num_tables; ++i)
{
@@ -367,8 +391,5 @@ hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input)
}
end:
- hb_face_t *result = success ? hb_face_reference (plan->dest) : nullptr;
-
- hb_subset_plan_destroy (plan);
- return result;
+ return success ? hb_face_reference (plan->dest) : nullptr;
}
diff --git a/thirdparty/harfbuzz/src/hb-subset.h b/thirdparty/harfbuzz/src/hb-subset.h
index 1c65a4da1c..a2799d91e8 100644
--- a/thirdparty/harfbuzz/src/hb-subset.h
+++ b/thirdparty/harfbuzz/src/hb-subset.h
@@ -40,6 +40,15 @@ HB_BEGIN_DECLS
typedef struct hb_subset_input_t hb_subset_input_t;
/**
+ * hb_subset_plan_t:
+ *
+ * Contains information about how the subset operation will be executed.
+ * Such as mappings from the old glyph ids to the new ones in the subset.
+ */
+
+typedef struct hb_subset_plan_t hb_subset_plan_t;
+
+/**
* hb_subset_flags_t:
* @HB_SUBSET_FLAGS_DEFAULT: all flags at their default value of false.
* @HB_SUBSET_FLAGS_NO_HINTING: If set hinting instructions will be dropped in
@@ -124,7 +133,7 @@ hb_subset_input_set_user_data (hb_subset_input_t *input,
HB_EXTERN void *
hb_subset_input_get_user_data (const hb_subset_input_t *input,
- hb_user_data_key_t *key);
+ hb_user_data_key_t *key);
HB_EXTERN hb_set_t *
hb_subset_input_unicode_set (hb_subset_input_t *input);
@@ -145,6 +154,41 @@ hb_subset_input_set_flags (hb_subset_input_t *input,
HB_EXTERN hb_face_t *
hb_subset_or_fail (hb_face_t *source, const hb_subset_input_t *input);
+HB_EXTERN hb_face_t *
+hb_subset_plan_execute_or_fail (hb_subset_plan_t *plan);
+
+HB_EXTERN hb_subset_plan_t *
+hb_subset_plan_create_or_fail (hb_face_t *face,
+ const hb_subset_input_t *input);
+
+HB_EXTERN void
+hb_subset_plan_destroy (hb_subset_plan_t *plan);
+
+HB_EXTERN const hb_map_t*
+hb_subset_plan_old_to_new_glyph_mapping (const hb_subset_plan_t *plan);
+
+HB_EXTERN const hb_map_t*
+hb_subset_plan_new_to_old_glyph_mapping (const hb_subset_plan_t *plan);
+
+HB_EXTERN const hb_map_t*
+hb_subset_plan_unicode_to_old_glyph_mapping (const hb_subset_plan_t *plan);
+
+
+HB_EXTERN hb_subset_plan_t *
+hb_subset_plan_reference (hb_subset_plan_t *plan);
+
+HB_EXTERN hb_bool_t
+hb_subset_plan_set_user_data (hb_subset_plan_t *plan,
+ hb_user_data_key_t *key,
+ void *data,
+ hb_destroy_func_t destroy,
+ hb_bool_t replace);
+
+HB_EXTERN void *
+hb_subset_plan_get_user_data (const hb_subset_plan_t *plan,
+ hb_user_data_key_t *key);
+
+
HB_END_DECLS
#endif /* HB_SUBSET_H */
diff --git a/thirdparty/harfbuzz/src/hb-uniscribe.cc b/thirdparty/harfbuzz/src/hb-uniscribe.cc
index 0e5a114f7d..50f71ce9ce 100644
--- a/thirdparty/harfbuzz/src/hb-uniscribe.cc
+++ b/thirdparty/harfbuzz/src/hb-uniscribe.cc
@@ -878,7 +878,8 @@ retry:
if (backward)
hb_buffer_reverse (buffer);
- buffer->clear_glyph_flags (HB_GLYPH_FLAG_UNSAFE_TO_BREAK);
+ buffer->clear_glyph_flags ();
+ buffer->unsafe_to_break ();
/* Wow, done! */
return true;
diff --git a/thirdparty/harfbuzz/src/hb-vector.hh b/thirdparty/harfbuzz/src/hb-vector.hh
index b0a1e5e966..6c7d32e49d 100644
--- a/thirdparty/harfbuzz/src/hb-vector.hh
+++ b/thirdparty/harfbuzz/src/hb-vector.hh
@@ -32,11 +32,14 @@
#include "hb-null.hh"
-template <typename Type>
-struct hb_vector_t
+template <typename Type,
+ bool sorted=false>
+struct hb_vector_t : std::conditional<sorted, hb_vector_t<Type, false>, hb_empty_t>::type
{
typedef Type item_t;
static constexpr unsigned item_size = hb_static_size (Type);
+ using array_t = typename std::conditional<sorted, hb_sorted_array_t<Type>, hb_array_t<Type>>::type;
+ using c_array_t = typename std::conditional<sorted, hb_sorted_array_t<const Type>, hb_array_t<const Type>>::type;
hb_vector_t () = default;
hb_vector_t (std::initializer_list<Type> lst) : hb_vector_t ()
@@ -82,16 +85,10 @@ struct hb_vector_t
void fini ()
{
+ shrink_vector (0);
hb_free (arrayZ);
init ();
}
- void fini_deep ()
- {
- unsigned int count = length;
- for (unsigned int i = 0; i < count; i++)
- arrayZ[i].fini ();
- fini ();
- }
void reset ()
{
@@ -152,24 +149,24 @@ struct hb_vector_t
template <typename T>
hb_vector_t& operator << (T&& v) { push (std::forward<T> (v)); return *this; }
- hb_array_t< Type> as_array () { return hb_array (arrayZ, length); }
- hb_array_t<const Type> as_array () const { return hb_array (arrayZ, length); }
+ array_t as_array () { return hb_array (arrayZ, length); }
+ c_array_t as_array () const { return hb_array (arrayZ, length); }
/* Iterator. */
- typedef hb_array_t<const Type> iter_t;
- typedef hb_array_t< Type> writer_t;
+ typedef c_array_t iter_t;
+ typedef array_t writer_t;
iter_t iter () const { return as_array (); }
writer_t writer () { return as_array (); }
operator iter_t () const { return iter (); }
operator writer_t () { return writer (); }
- hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int count) const
+ c_array_t sub_array (unsigned int start_offset, unsigned int count) const
{ return as_array ().sub_array (start_offset, count); }
- hb_array_t<const Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const
+ c_array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */) const
{ return as_array ().sub_array (start_offset, count); }
- hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int count)
+ array_t sub_array (unsigned int start_offset, unsigned int count)
{ return as_array ().sub_array (start_offset, count); }
- hb_array_t<Type> sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
+ array_t sub_array (unsigned int start_offset, unsigned int *count = nullptr /* IN/OUT */)
{ return as_array ().sub_array (start_offset, count); }
hb_sorted_array_t<Type> as_sorted_array ()
@@ -192,6 +189,7 @@ struct hb_vector_t
template <typename T>
Type *push (T&& v)
{
+ /* TODO Emplace? */
Type *p = push ();
if (p == &Crap (Type))
// If push failed to allocate then don't copy v, since this may cause
@@ -204,6 +202,92 @@ struct hb_vector_t
bool in_error () const { return allocated < 0; }
+ template <typename T = Type,
+ hb_enable_if (std::is_trivially_copy_assignable<T>::value)>
+ Type *
+ realloc_vector (unsigned new_allocated)
+ {
+ return (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
+ }
+ template <typename T = Type,
+ hb_enable_if (!std::is_trivially_copy_assignable<T>::value)>
+ Type *
+ realloc_vector (unsigned new_allocated)
+ {
+ Type *new_array = (Type *) hb_malloc (new_allocated * sizeof (Type));
+ if (likely (new_array))
+ {
+ for (unsigned i = 0; i < length; i++)
+ new (std::addressof (new_array[i])) Type ();
+ for (unsigned i = 0; i < (unsigned) length; i++)
+ new_array[i] = std::move (arrayZ[i]);
+ unsigned old_length = length;
+ shrink_vector (0);
+ length = old_length;
+ hb_free (arrayZ);
+ }
+ return new_array;
+ }
+
+ template <typename T = Type,
+ hb_enable_if (std::is_trivially_constructible<T>::value ||
+ !std::is_default_constructible<T>::value)>
+ void
+ grow_vector (unsigned size)
+ {
+ memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
+ length = size;
+ }
+ template <typename T = Type,
+ hb_enable_if (!std::is_trivially_constructible<T>::value &&
+ std::is_default_constructible<T>::value)>
+ void
+ grow_vector (unsigned size)
+ {
+ while (length < size)
+ {
+ length++;
+ new (std::addressof (arrayZ[length - 1])) Type ();
+ }
+ }
+
+ template <typename T = Type,
+ hb_enable_if (std::is_trivially_destructible<T>::value)>
+ void
+ shrink_vector (unsigned size)
+ {
+ length = size;
+ }
+ template <typename T = Type,
+ hb_enable_if (!std::is_trivially_destructible<T>::value)>
+ void
+ shrink_vector (unsigned size)
+ {
+ while ((unsigned) length > size)
+ {
+ arrayZ[(unsigned) length - 1].~Type ();
+ length--;
+ }
+ }
+
+ template <typename T = Type,
+ hb_enable_if (std::is_trivially_copy_assignable<T>::value)>
+ void
+ shift_down_vector (unsigned i)
+ {
+ memmove (static_cast<void *> (&arrayZ[i - 1]),
+ static_cast<void *> (&arrayZ[i]),
+ (length - i) * sizeof (Type));
+ }
+ template <typename T = Type,
+ hb_enable_if (!std::is_trivially_copy_assignable<T>::value)>
+ void
+ shift_down_vector (unsigned i)
+ {
+ for (; i < length; i++)
+ arrayZ[i - 1] = std::move (arrayZ[i]);
+ }
+
/* Allocate for size but don't adjust length. */
bool alloc (unsigned int size)
{
@@ -225,7 +309,7 @@ struct hb_vector_t
(new_allocated < (unsigned) allocated) ||
hb_unsigned_mul_overflows (new_allocated, sizeof (Type));
if (likely (!overflows))
- new_array = (Type *) hb_realloc (arrayZ, new_allocated * sizeof (Type));
+ new_array = realloc_vector (new_allocated);
if (unlikely (!new_array))
{
@@ -246,7 +330,9 @@ struct hb_vector_t
return false;
if (size > length)
- memset (arrayZ + length, 0, (size - length) * sizeof (*arrayZ));
+ grow_vector (size);
+ else if (size < length)
+ shrink_vector (size);
length = size;
return true;
@@ -255,48 +341,38 @@ struct hb_vector_t
Type pop ()
{
if (!length) return Null (Type);
- return std::move (arrayZ[--length]); /* Does this move actually work? */
+ Type v = std::move (arrayZ[length - 1]);
+ arrayZ[length - 1].~Type ();
+ length--;
+ return v;
}
void remove (unsigned int i)
{
if (unlikely (i >= length))
return;
- memmove (static_cast<void *> (&arrayZ[i]),
- static_cast<void *> (&arrayZ[i + 1]),
- (length - i - 1) * sizeof (Type));
+ arrayZ[i].~Type ();
+ shift_down_vector (i + 1);
length--;
}
void shrink (int size_)
{
unsigned int size = size_ < 0 ? 0u : (unsigned int) size_;
- if (size < length)
- length = size;
- }
+ if (size >= length)
+ return;
- template <typename T>
- Type *find (T v)
- {
- for (unsigned int i = 0; i < length; i++)
- if (arrayZ[i] == v)
- return &arrayZ[i];
- return nullptr;
- }
- template <typename T>
- const Type *find (T v) const
- {
- for (unsigned int i = 0; i < length; i++)
- if (arrayZ[i] == v)
- return &arrayZ[i];
- return nullptr;
+ shrink_vector (size);
}
+
+ /* Sorting API. */
void qsort (int (*cmp)(const void*, const void*))
{ as_array ().qsort (cmp); }
void qsort (unsigned int start = 0, unsigned int end = (unsigned int) -1)
{ as_array ().qsort (start, end); }
+ /* Unsorted search API. */
template <typename T>
Type *lsearch (const T &x, Type *not_found = nullptr)
{ return as_array ().lsearch (x, not_found); }
@@ -306,47 +382,25 @@ struct hb_vector_t
template <typename T>
bool lfind (const T &x, unsigned *pos = nullptr) const
{ return as_array ().lfind (x, pos); }
-};
-template <typename Type>
-struct hb_sorted_vector_t : hb_vector_t<Type>
-{
- hb_sorted_vector_t () = default;
- ~hb_sorted_vector_t () = default;
- hb_sorted_vector_t (hb_sorted_vector_t& o) = default;
- hb_sorted_vector_t (hb_sorted_vector_t &&o) = default;
- hb_sorted_vector_t (std::initializer_list<Type> lst) : hb_vector_t<Type> (lst) {}
- template <typename Iterable,
- hb_requires (hb_is_iterable (Iterable))>
- hb_sorted_vector_t (const Iterable &o) : hb_vector_t<Type> (o) {}
- hb_sorted_vector_t& operator = (const hb_sorted_vector_t &o) = default;
- hb_sorted_vector_t& operator = (hb_sorted_vector_t &&o) = default;
- friend void swap (hb_sorted_vector_t& a, hb_sorted_vector_t& b)
- { hb_swap ((hb_vector_t<Type>&) (a), (hb_vector_t<Type>&) (b)); }
-
- hb_sorted_array_t< Type> as_array () { return hb_sorted_array (this->arrayZ, this->length); }
- hb_sorted_array_t<const Type> as_array () const { return hb_sorted_array (this->arrayZ, this->length); }
-
- /* Iterator. */
- typedef hb_sorted_array_t<const Type> const_iter_t;
- typedef hb_sorted_array_t< Type> iter_t;
- const_iter_t iter () const { return as_array (); }
- const_iter_t citer () const { return as_array (); }
- iter_t iter () { return as_array (); }
- operator iter_t () { return iter (); }
- operator const_iter_t () const { return iter (); }
-
- template <typename T>
+ /* Sorted search API. */
+ template <typename T,
+ bool Sorted=sorted, hb_enable_if (Sorted)>
Type *bsearch (const T &x, Type *not_found = nullptr)
{ return as_array ().bsearch (x, not_found); }
- template <typename T>
+ template <typename T,
+ bool Sorted=sorted, hb_enable_if (Sorted)>
const Type *bsearch (const T &x, const Type *not_found = nullptr) const
{ return as_array ().bsearch (x, not_found); }
- template <typename T>
+ template <typename T,
+ bool Sorted=sorted, hb_enable_if (Sorted)>
bool bfind (const T &x, unsigned int *i = nullptr,
hb_not_found_t not_found = HB_NOT_FOUND_DONT_STORE,
unsigned int to_store = (unsigned int) -1) const
{ return as_array ().bfind (x, i, not_found, to_store); }
};
+template <typename Type>
+using hb_sorted_vector_t = hb_vector_t<Type, true>;
+
#endif /* HB_VECTOR_HH */
diff --git a/thirdparty/harfbuzz/src/hb-version.h b/thirdparty/harfbuzz/src/hb-version.h
index 52b124b745..dd2c5288cc 100644
--- a/thirdparty/harfbuzz/src/hb-version.h
+++ b/thirdparty/harfbuzz/src/hb-version.h
@@ -41,13 +41,13 @@ HB_BEGIN_DECLS
*
* The major component of the library version available at compile-time.
*/
-#define HB_VERSION_MAJOR 3
+#define HB_VERSION_MAJOR 4
/**
* HB_VERSION_MINOR:
*
* The minor component of the library version available at compile-time.
*/
-#define HB_VERSION_MINOR 2
+#define HB_VERSION_MINOR 0
/**
* HB_VERSION_MICRO:
*
@@ -60,7 +60,7 @@ HB_BEGIN_DECLS
*
* A string literal containing the library version available at compile-time.
*/
-#define HB_VERSION_STRING "3.2.0"
+#define HB_VERSION_STRING "4.0.0"
/**
* HB_VERSION_ATLEAST:
diff --git a/thirdparty/harfbuzz/src/hb.hh b/thirdparty/harfbuzz/src/hb.hh
index 1f14267525..b9f5f71415 100644
--- a/thirdparty/harfbuzz/src/hb.hh
+++ b/thirdparty/harfbuzz/src/hb.hh
@@ -447,6 +447,7 @@ static int HB_UNUSED _hb_errno = 0;
#ifndef HB_USE_ATEXIT
# define HB_USE_ATEXIT 0
#endif
+#ifndef hb_atexit
#if !HB_USE_ATEXIT
# define hb_atexit(_) HB_STMT_START { if (0) (_) (); } HB_STMT_END
#else /* HB_USE_ATEXIT */
@@ -457,6 +458,7 @@ static int HB_UNUSED _hb_errno = 0;
# define hb_atexit(f) static hb_atexit_t<f> _hb_atexit_##__LINE__;
# endif
#endif
+#endif
/* Lets assert int types. Saves trouble down the road. */
static_assert ((sizeof (hb_codepoint_t) == 4), "");
diff --git a/thirdparty/libwebp/AUTHORS b/thirdparty/libwebp/AUTHORS
index 30abde0326..8307c2099d 100644
--- a/thirdparty/libwebp/AUTHORS
+++ b/thirdparty/libwebp/AUTHORS
@@ -32,6 +32,7 @@ Contributors:
- Pascal Massimino (pascal dot massimino at gmail dot com)
- Paweł Hajdan, Jr (phajdan dot jr at chromium dot org)
- Pierre Joye (pierre dot php at gmail dot com)
+- Roberto Alanis (alanisbaez at google dot com)
- Sam Clegg (sbc at chromium dot org)
- Scott Hancher (seh at google dot com)
- Scott LaVarnway (slavarnway at google dot com)
diff --git a/thirdparty/libwebp/src/dec/vp8_dec.c b/thirdparty/libwebp/src/dec/vp8_dec.c
index 5f405e4c2a..2003935ec4 100644
--- a/thirdparty/libwebp/src/dec/vp8_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8_dec.c
@@ -403,7 +403,7 @@ static const uint8_t kZigzag[16] = {
0, 1, 4, 8, 5, 2, 3, 6, 9, 12, 13, 10, 7, 11, 14, 15
};
-// See section 13-2: http://tools.ietf.org/html/rfc6386#section-13.2
+// See section 13-2: https://datatracker.ietf.org/doc/html/rfc6386#section-13.2
static int GetLargeValue(VP8BitReader* const br, const uint8_t* const p) {
int v;
if (!VP8GetBit(br, p[3], "coeffs")) {
diff --git a/thirdparty/libwebp/src/dec/vp8i_dec.h b/thirdparty/libwebp/src/dec/vp8i_dec.h
index 20526a87c4..9af22f8cc6 100644
--- a/thirdparty/libwebp/src/dec/vp8i_dec.h
+++ b/thirdparty/libwebp/src/dec/vp8i_dec.h
@@ -32,7 +32,7 @@ extern "C" {
// version numbers
#define DEC_MAJ_VERSION 1
#define DEC_MIN_VERSION 2
-#define DEC_REV_VERSION 1
+#define DEC_REV_VERSION 2
// YUV-cache parameters. Cache is 32-bytes wide (= one cacheline).
// Constraints are: We need to store one 16x16 block of luma samples (y),
diff --git a/thirdparty/libwebp/src/dec/vp8l_dec.c b/thirdparty/libwebp/src/dec/vp8l_dec.c
index 73c3b54fff..78db014030 100644
--- a/thirdparty/libwebp/src/dec/vp8l_dec.c
+++ b/thirdparty/libwebp/src/dec/vp8l_dec.c
@@ -84,7 +84,7 @@ static const uint8_t kCodeToPlane[CODE_TO_PLANE_CODES] = {
// to 256 (green component values) + 24 (length prefix values)
// + color_cache_size (between 0 and 2048).
// All values computed for 8-bit first level lookup with Mark Adler's tool:
-// http://www.hdfgroup.org/ftp/lib-external/zlib/zlib-1.2.5/examples/enough.c
+// https://github.com/madler/zlib/blob/v1.2.5/examples/enough.c
#define FIXED_TABLE_SIZE (630 * 3 + 410)
static const uint16_t kTableSize[12] = {
FIXED_TABLE_SIZE + 654,
diff --git a/thirdparty/libwebp/src/demux/anim_decode.c b/thirdparty/libwebp/src/demux/anim_decode.c
index 2bf4dcffe0..e077ffb536 100644
--- a/thirdparty/libwebp/src/demux/anim_decode.c
+++ b/thirdparty/libwebp/src/demux/anim_decode.c
@@ -23,6 +23,14 @@
#define NUM_CHANNELS 4
+// Channel extraction from a uint32_t representation of a uint8_t RGBA/BGRA
+// buffer.
+#ifdef WORDS_BIGENDIAN
+#define CHANNEL_SHIFT(i) (24 - (i) * 8)
+#else
+#define CHANNEL_SHIFT(i) ((i) * 8)
+#endif
+
typedef void (*BlendRowFunc)(uint32_t* const, const uint32_t* const, int);
static void BlendPixelRowNonPremult(uint32_t* const src,
const uint32_t* const dst, int num_pixels);
@@ -209,35 +217,35 @@ static uint8_t BlendChannelNonPremult(uint32_t src, uint8_t src_a,
const uint8_t dst_channel = (dst >> shift) & 0xff;
const uint32_t blend_unscaled = src_channel * src_a + dst_channel * dst_a;
assert(blend_unscaled < (1ULL << 32) / scale);
- return (blend_unscaled * scale) >> 24;
+ return (blend_unscaled * scale) >> CHANNEL_SHIFT(3);
}
// Blend 'src' over 'dst' assuming they are NOT pre-multiplied by alpha.
static uint32_t BlendPixelNonPremult(uint32_t src, uint32_t dst) {
- const uint8_t src_a = (src >> 24) & 0xff;
+ const uint8_t src_a = (src >> CHANNEL_SHIFT(3)) & 0xff;
if (src_a == 0) {
return dst;
} else {
- const uint8_t dst_a = (dst >> 24) & 0xff;
+ const uint8_t dst_a = (dst >> CHANNEL_SHIFT(3)) & 0xff;
// This is the approximate integer arithmetic for the actual formula:
// dst_factor_a = (dst_a * (255 - src_a)) / 255.
const uint8_t dst_factor_a = (dst_a * (256 - src_a)) >> 8;
const uint8_t blend_a = src_a + dst_factor_a;
const uint32_t scale = (1UL << 24) / blend_a;
- const uint8_t blend_r =
- BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 0);
- const uint8_t blend_g =
- BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 8);
- const uint8_t blend_b =
- BlendChannelNonPremult(src, src_a, dst, dst_factor_a, scale, 16);
+ const uint8_t blend_r = BlendChannelNonPremult(
+ src, src_a, dst, dst_factor_a, scale, CHANNEL_SHIFT(0));
+ const uint8_t blend_g = BlendChannelNonPremult(
+ src, src_a, dst, dst_factor_a, scale, CHANNEL_SHIFT(1));
+ const uint8_t blend_b = BlendChannelNonPremult(
+ src, src_a, dst, dst_factor_a, scale, CHANNEL_SHIFT(2));
assert(src_a + dst_factor_a < 256);
- return (blend_r << 0) |
- (blend_g << 8) |
- (blend_b << 16) |
- ((uint32_t)blend_a << 24);
+ return ((uint32_t)blend_r << CHANNEL_SHIFT(0)) |
+ ((uint32_t)blend_g << CHANNEL_SHIFT(1)) |
+ ((uint32_t)blend_b << CHANNEL_SHIFT(2)) |
+ ((uint32_t)blend_a << CHANNEL_SHIFT(3));
}
}
@@ -247,7 +255,7 @@ static void BlendPixelRowNonPremult(uint32_t* const src,
const uint32_t* const dst, int num_pixels) {
int i;
for (i = 0; i < num_pixels; ++i) {
- const uint8_t src_alpha = (src[i] >> 24) & 0xff;
+ const uint8_t src_alpha = (src[i] >> CHANNEL_SHIFT(3)) & 0xff;
if (src_alpha != 0xff) {
src[i] = BlendPixelNonPremult(src[i], dst[i]);
}
@@ -264,7 +272,7 @@ static WEBP_INLINE uint32_t ChannelwiseMultiply(uint32_t pix, uint32_t scale) {
// Blend 'src' over 'dst' assuming they are pre-multiplied by alpha.
static uint32_t BlendPixelPremult(uint32_t src, uint32_t dst) {
- const uint8_t src_a = (src >> 24) & 0xff;
+ const uint8_t src_a = (src >> CHANNEL_SHIFT(3)) & 0xff;
return src + ChannelwiseMultiply(dst, 256 - src_a);
}
@@ -274,7 +282,7 @@ static void BlendPixelRowPremult(uint32_t* const src, const uint32_t* const dst,
int num_pixels) {
int i;
for (i = 0; i < num_pixels; ++i) {
- const uint8_t src_alpha = (src[i] >> 24) & 0xff;
+ const uint8_t src_alpha = (src[i] >> CHANNEL_SHIFT(3)) & 0xff;
if (src_alpha != 0xff) {
src[i] = BlendPixelPremult(src[i], dst[i]);
}
diff --git a/thirdparty/libwebp/src/demux/demux.c b/thirdparty/libwebp/src/demux/demux.c
index 547a7725de..f04a2b8450 100644
--- a/thirdparty/libwebp/src/demux/demux.c
+++ b/thirdparty/libwebp/src/demux/demux.c
@@ -25,7 +25,7 @@
#define DMUX_MAJ_VERSION 1
#define DMUX_MIN_VERSION 2
-#define DMUX_REV_VERSION 1
+#define DMUX_REV_VERSION 2
typedef struct {
size_t start_; // start location of the data
diff --git a/thirdparty/libwebp/src/dsp/dsp.h b/thirdparty/libwebp/src/dsp/dsp.h
index 513e159bb3..c4f57e4d5b 100644
--- a/thirdparty/libwebp/src/dsp/dsp.h
+++ b/thirdparty/libwebp/src/dsp/dsp.h
@@ -119,7 +119,12 @@ extern "C" {
#define WEBP_USE_NEON
#endif
-#if defined(_MSC_VER) && _MSC_VER >= 1700 && defined(_M_ARM)
+// Note: ARM64 is supported in Visual Studio 2017, but requires the direct
+// inclusion of arm64_neon.h; Visual Studio 2019 includes this file in
+// arm_neon.h.
+#if defined(_MSC_VER) && \
+ ((_MSC_VER >= 1700 && defined(_M_ARM)) || \
+ (_MSC_VER >= 1920 && defined(_M_ARM64)))
#define WEBP_USE_NEON
#define WEBP_USE_INTRINSICS
#endif
diff --git a/thirdparty/libwebp/src/dsp/enc_neon.c b/thirdparty/libwebp/src/dsp/enc_neon.c
index 43bf1245c5..601962ba76 100644
--- a/thirdparty/libwebp/src/dsp/enc_neon.c
+++ b/thirdparty/libwebp/src/dsp/enc_neon.c
@@ -9,7 +9,7 @@
//
// ARM NEON version of speed-critical encoding functions.
//
-// adapted from libvpx (http://www.webmproject.org/code/)
+// adapted from libvpx (https://www.webmproject.org/code/)
#include "src/dsp/dsp.h"
diff --git a/thirdparty/libwebp/src/dsp/lossless.c b/thirdparty/libwebp/src/dsp/lossless.c
index d8bbb02b35..84a54296fd 100644
--- a/thirdparty/libwebp/src/dsp/lossless.c
+++ b/thirdparty/libwebp/src/dsp/lossless.c
@@ -107,63 +107,77 @@ static WEBP_INLINE uint32_t Select(uint32_t a, uint32_t b, uint32_t c) {
//------------------------------------------------------------------------------
// Predictors
-uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor0_C(const uint32_t* const left,
+ const uint32_t* const top) {
(void)top;
(void)left;
return ARGB_BLACK;
}
-uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor1_C(const uint32_t* const left,
+ const uint32_t* const top) {
(void)top;
- return left;
+ return *left;
}
-uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor2_C(const uint32_t* const left,
+ const uint32_t* const top) {
(void)left;
return top[0];
}
-uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor3_C(const uint32_t* const left,
+ const uint32_t* const top) {
(void)left;
return top[1];
}
-uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor4_C(const uint32_t* const left,
+ const uint32_t* const top) {
(void)left;
return top[-1];
}
-uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average3(left, top[0], top[1]);
+uint32_t VP8LPredictor5_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average3(*left, top[0], top[1]);
return pred;
}
-uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(left, top[-1]);
+uint32_t VP8LPredictor6_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average2(*left, top[-1]);
return pred;
}
-uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2(left, top[0]);
+uint32_t VP8LPredictor7_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average2(*left, top[0]);
return pred;
}
-uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor8_C(const uint32_t* const left,
+ const uint32_t* const top) {
const uint32_t pred = Average2(top[-1], top[0]);
(void)left;
return pred;
}
-uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top) {
+uint32_t VP8LPredictor9_C(const uint32_t* const left,
+ const uint32_t* const top) {
const uint32_t pred = Average2(top[0], top[1]);
(void)left;
return pred;
}
-uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average4(left, top[-1], top[0], top[1]);
+uint32_t VP8LPredictor10_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average4(*left, top[-1], top[0], top[1]);
return pred;
}
-uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Select(top[0], left, top[-1]);
+uint32_t VP8LPredictor11_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Select(top[0], *left, top[-1]);
return pred;
}
-uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractFull(left, top[0], top[-1]);
+uint32_t VP8LPredictor12_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = ClampedAddSubtractFull(*left, top[0], top[-1]);
return pred;
}
-uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractHalf(left, top[0], top[-1]);
+uint32_t VP8LPredictor13_C(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = ClampedAddSubtractHalf(*left, top[0], top[-1]);
return pred;
}
diff --git a/thirdparty/libwebp/src/dsp/lossless.h b/thirdparty/libwebp/src/dsp/lossless.h
index ebd316d1ed..c26c6bca07 100644
--- a/thirdparty/libwebp/src/dsp/lossless.h
+++ b/thirdparty/libwebp/src/dsp/lossless.h
@@ -28,23 +28,38 @@ extern "C" {
//------------------------------------------------------------------------------
// Decoding
-typedef uint32_t (*VP8LPredictorFunc)(uint32_t left, const uint32_t* const top);
+typedef uint32_t (*VP8LPredictorFunc)(const uint32_t* const left,
+ const uint32_t* const top);
extern VP8LPredictorFunc VP8LPredictors[16];
-uint32_t VP8LPredictor0_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor1_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor2_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor3_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor4_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor5_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor6_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor7_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor8_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor9_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor10_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor11_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor12_C(uint32_t left, const uint32_t* const top);
-uint32_t VP8LPredictor13_C(uint32_t left, const uint32_t* const top);
+uint32_t VP8LPredictor0_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor1_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor2_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor3_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor4_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor5_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor6_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor7_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor8_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor9_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor10_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor11_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor12_C(const uint32_t* const left,
+ const uint32_t* const top);
+uint32_t VP8LPredictor13_C(const uint32_t* const left,
+ const uint32_t* const top);
// These Add/Sub function expects upper[-1] and out[-1] to be readable.
typedef void (*VP8LPredictorAddSubFunc)(const uint32_t* in,
diff --git a/thirdparty/libwebp/src/dsp/lossless_common.h b/thirdparty/libwebp/src/dsp/lossless_common.h
index 96a106f9ee..6a2f736b5e 100644
--- a/thirdparty/libwebp/src/dsp/lossless_common.h
+++ b/thirdparty/libwebp/src/dsp/lossless_common.h
@@ -179,7 +179,7 @@ static void PREDICTOR_ADD(const uint32_t* in, const uint32_t* upper, \
int x; \
assert(upper != NULL); \
for (x = 0; x < num_pixels; ++x) { \
- const uint32_t pred = (PREDICTOR)(out[x - 1], upper + x); \
+ const uint32_t pred = (PREDICTOR)(&out[x - 1], upper + x); \
out[x] = VP8LAddPixels(in[x], pred); \
} \
}
diff --git a/thirdparty/libwebp/src/dsp/lossless_enc.c b/thirdparty/libwebp/src/dsp/lossless_enc.c
index c3e8537ade..1580631e38 100644
--- a/thirdparty/libwebp/src/dsp/lossless_enc.c
+++ b/thirdparty/libwebp/src/dsp/lossless_enc.c
@@ -745,7 +745,7 @@ static void PredictorSub##PREDICTOR_I##_C(const uint32_t* in, \
assert(upper != NULL); \
for (x = 0; x < num_pixels; ++x) { \
const uint32_t pred = \
- VP8LPredictor##PREDICTOR_I##_C(in[x - 1], upper + x); \
+ VP8LPredictor##PREDICTOR_I##_C(&in[x - 1], upper + x); \
out[x] = VP8LSubPixels(in[x], pred); \
} \
}
diff --git a/thirdparty/libwebp/src/dsp/lossless_mips_dsp_r2.c b/thirdparty/libwebp/src/dsp/lossless_mips_dsp_r2.c
index 9888854d57..bfe5ea6b38 100644
--- a/thirdparty/libwebp/src/dsp/lossless_mips_dsp_r2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_mips_dsp_r2.c
@@ -188,46 +188,51 @@ static WEBP_INLINE uint32_t Average4(uint32_t a0, uint32_t a1,
return Average2(Average2(a0, a1), Average2(a2, a3));
}
-static uint32_t Predictor5_MIPSdspR2(uint32_t left, const uint32_t* const top) {
- return Average3(left, top[0], top[1]);
+static uint32_t Predictor5_MIPSdspR2(const uint32_t* const left,
+ const uint32_t* const top) {
+ return Average3(*left, top[0], top[1]);
}
-static uint32_t Predictor6_MIPSdspR2(uint32_t left, const uint32_t* const top) {
- return Average2(left, top[-1]);
+static uint32_t Predictor6_MIPSdspR2(const uint32_t* const left,
+ const uint32_t* const top) {
+ return Average2(*left, top[-1]);
}
-static uint32_t Predictor7_MIPSdspR2(uint32_t left, const uint32_t* const top) {
- return Average2(left, top[0]);
+static uint32_t Predictor7_MIPSdspR2(const uint32_t* const left,
+ const uint32_t* const top) {
+ return Average2(*left, top[0]);
}
-static uint32_t Predictor8_MIPSdspR2(uint32_t left, const uint32_t* const top) {
+static uint32_t Predictor8_MIPSdspR2(const uint32_t* const left,
+ const uint32_t* const top) {
(void)left;
return Average2(top[-1], top[0]);
}
-static uint32_t Predictor9_MIPSdspR2(uint32_t left, const uint32_t* const top) {
+static uint32_t Predictor9_MIPSdspR2(const uint32_t* const left,
+ const uint32_t* const top) {
(void)left;
return Average2(top[0], top[1]);
}
-static uint32_t Predictor10_MIPSdspR2(uint32_t left,
+static uint32_t Predictor10_MIPSdspR2(const uint32_t* const left,
const uint32_t* const top) {
- return Average4(left, top[-1], top[0], top[1]);
+ return Average4(*left, top[-1], top[0], top[1]);
}
-static uint32_t Predictor11_MIPSdspR2(uint32_t left,
+static uint32_t Predictor11_MIPSdspR2(const uint32_t* const left,
const uint32_t* const top) {
- return Select(top[0], left, top[-1]);
+ return Select(top[0], *left, top[-1]);
}
-static uint32_t Predictor12_MIPSdspR2(uint32_t left,
+static uint32_t Predictor12_MIPSdspR2(const uint32_t* const left,
const uint32_t* const top) {
- return ClampedAddSubtractFull(left, top[0], top[-1]);
+ return ClampedAddSubtractFull(*left, top[0], top[-1]);
}
-static uint32_t Predictor13_MIPSdspR2(uint32_t left,
+static uint32_t Predictor13_MIPSdspR2(const uint32_t* const left,
const uint32_t* const top) {
- return ClampedAddSubtractHalf(left, top[0], top[-1]);
+ return ClampedAddSubtractHalf(*left, top[0], top[-1]);
}
// Add green to blue and red channels (i.e. perform the inverse transform of
diff --git a/thirdparty/libwebp/src/dsp/lossless_neon.c b/thirdparty/libwebp/src/dsp/lossless_neon.c
index 76a1b6f873..89e3e013a0 100644
--- a/thirdparty/libwebp/src/dsp/lossless_neon.c
+++ b/thirdparty/libwebp/src/dsp/lossless_neon.c
@@ -188,17 +188,21 @@ static WEBP_INLINE uint32_t Average3_NEON(uint32_t a0, uint32_t a1,
return avg;
}
-static uint32_t Predictor5_NEON(uint32_t left, const uint32_t* const top) {
- return Average3_NEON(left, top[0], top[1]);
+static uint32_t Predictor5_NEON(const uint32_t* const left,
+ const uint32_t* const top) {
+ return Average3_NEON(*left, top[0], top[1]);
}
-static uint32_t Predictor6_NEON(uint32_t left, const uint32_t* const top) {
- return Average2_NEON(left, top[-1]);
+static uint32_t Predictor6_NEON(const uint32_t* const left,
+ const uint32_t* const top) {
+ return Average2_NEON(*left, top[-1]);
}
-static uint32_t Predictor7_NEON(uint32_t left, const uint32_t* const top) {
- return Average2_NEON(left, top[0]);
+static uint32_t Predictor7_NEON(const uint32_t* const left,
+ const uint32_t* const top) {
+ return Average2_NEON(*left, top[0]);
}
-static uint32_t Predictor13_NEON(uint32_t left, const uint32_t* const top) {
- return ClampedAddSubtractHalf_NEON(left, top[0], top[-1]);
+static uint32_t Predictor13_NEON(const uint32_t* const left,
+ const uint32_t* const top) {
+ return ClampedAddSubtractHalf_NEON(*left, top[0], top[-1]);
}
// Batch versions of those functions.
diff --git a/thirdparty/libwebp/src/dsp/lossless_sse2.c b/thirdparty/libwebp/src/dsp/lossless_sse2.c
index 3a0eb440db..396cb0bdfc 100644
--- a/thirdparty/libwebp/src/dsp/lossless_sse2.c
+++ b/thirdparty/libwebp/src/dsp/lossless_sse2.c
@@ -138,42 +138,51 @@ static WEBP_INLINE uint32_t Average4_SSE2(uint32_t a0, uint32_t a1,
return output;
}
-static uint32_t Predictor5_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average3_SSE2(left, top[0], top[1]);
+static uint32_t Predictor5_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average3_SSE2(*left, top[0], top[1]);
return pred;
}
-static uint32_t Predictor6_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2_SSE2(left, top[-1]);
+static uint32_t Predictor6_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average2_SSE2(*left, top[-1]);
return pred;
}
-static uint32_t Predictor7_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average2_SSE2(left, top[0]);
+static uint32_t Predictor7_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average2_SSE2(*left, top[0]);
return pred;
}
-static uint32_t Predictor8_SSE2(uint32_t left, const uint32_t* const top) {
+static uint32_t Predictor8_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
const uint32_t pred = Average2_SSE2(top[-1], top[0]);
(void)left;
return pred;
}
-static uint32_t Predictor9_SSE2(uint32_t left, const uint32_t* const top) {
+static uint32_t Predictor9_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
const uint32_t pred = Average2_SSE2(top[0], top[1]);
(void)left;
return pred;
}
-static uint32_t Predictor10_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Average4_SSE2(left, top[-1], top[0], top[1]);
+static uint32_t Predictor10_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Average4_SSE2(*left, top[-1], top[0], top[1]);
return pred;
}
-static uint32_t Predictor11_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = Select_SSE2(top[0], left, top[-1]);
+static uint32_t Predictor11_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = Select_SSE2(top[0], *left, top[-1]);
return pred;
}
-static uint32_t Predictor12_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractFull_SSE2(left, top[0], top[-1]);
+static uint32_t Predictor12_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = ClampedAddSubtractFull_SSE2(*left, top[0], top[-1]);
return pred;
}
-static uint32_t Predictor13_SSE2(uint32_t left, const uint32_t* const top) {
- const uint32_t pred = ClampedAddSubtractHalf_SSE2(left, top[0], top[-1]);
+static uint32_t Predictor13_SSE2(const uint32_t* const left,
+ const uint32_t* const top) {
+ const uint32_t pred = ClampedAddSubtractHalf_SSE2(*left, top[0], top[-1]);
return pred;
}
diff --git a/thirdparty/libwebp/src/dsp/msa_macro.h b/thirdparty/libwebp/src/dsp/msa_macro.h
index de026a1d9e..51f6c643ab 100644
--- a/thirdparty/libwebp/src/dsp/msa_macro.h
+++ b/thirdparty/libwebp/src/dsp/msa_macro.h
@@ -14,6 +14,10 @@
#ifndef WEBP_DSP_MSA_MACRO_H_
#define WEBP_DSP_MSA_MACRO_H_
+#include "src/dsp/dsp.h"
+
+#if defined(WEBP_USE_MSA)
+
#include <stdint.h>
#include <msa.h>
@@ -1389,4 +1393,5 @@ static WEBP_INLINE uint32_t func_hadd_uh_u32(v8u16 in) {
} while (0)
#define AVER_UB2_UB(...) AVER_UB2(v16u8, __VA_ARGS__)
+#endif // WEBP_USE_MSA
#endif // WEBP_DSP_MSA_MACRO_H_
diff --git a/thirdparty/libwebp/src/dsp/neon.h b/thirdparty/libwebp/src/dsp/neon.h
index aa1dea1301..c591f9b9a7 100644
--- a/thirdparty/libwebp/src/dsp/neon.h
+++ b/thirdparty/libwebp/src/dsp/neon.h
@@ -12,10 +12,12 @@
#ifndef WEBP_DSP_NEON_H_
#define WEBP_DSP_NEON_H_
-#include <arm_neon.h>
-
#include "src/dsp/dsp.h"
+#if defined(WEBP_USE_NEON)
+
+#include <arm_neon.h>
+
// Right now, some intrinsics functions seem slower, so we disable them
// everywhere except newer clang/gcc or aarch64 where the inline assembly is
// incompatible.
@@ -98,4 +100,5 @@ static WEBP_INLINE int32x4x4_t Transpose4x4_NEON(const int32x4x4_t rows) {
} while (0)
#endif
+#endif // WEBP_USE_NEON
#endif // WEBP_DSP_NEON_H_
diff --git a/thirdparty/libwebp/src/dsp/yuv.h b/thirdparty/libwebp/src/dsp/yuv.h
index c12be1d094..66a397d117 100644
--- a/thirdparty/libwebp/src/dsp/yuv.h
+++ b/thirdparty/libwebp/src/dsp/yuv.h
@@ -10,7 +10,7 @@
// inline YUV<->RGB conversion function
//
// The exact naming is Y'CbCr, following the ITU-R BT.601 standard.
-// More information at: http://en.wikipedia.org/wiki/YCbCr
+// More information at: https://en.wikipedia.org/wiki/YCbCr
// Y = 0.2569 * R + 0.5044 * G + 0.0979 * B + 16
// U = -0.1483 * R - 0.2911 * G + 0.4394 * B + 128
// V = 0.4394 * R - 0.3679 * G - 0.0715 * B + 128
diff --git a/thirdparty/libwebp/src/enc/frame_enc.c b/thirdparty/libwebp/src/enc/frame_enc.c
index af538d83ba..b93d9e5b99 100644
--- a/thirdparty/libwebp/src/enc/frame_enc.c
+++ b/thirdparty/libwebp/src/enc/frame_enc.c
@@ -778,6 +778,7 @@ int VP8EncTokenLoop(VP8Encoder* const enc) {
// Roughly refresh the proba eight times per pass
int max_count = (enc->mb_w_ * enc->mb_h_) >> 3;
int num_pass_left = enc->config_->pass;
+ int remaining_progress = 40; // percents
const int do_search = enc->do_search_;
VP8EncIterator it;
VP8EncProba* const proba = &enc->proba_;
@@ -805,6 +806,9 @@ int VP8EncTokenLoop(VP8Encoder* const enc) {
uint64_t size_p0 = 0;
uint64_t distortion = 0;
int cnt = max_count;
+ // The final number of passes is not trivial to know in advance.
+ const int pass_progress = remaining_progress / (2 + num_pass_left);
+ remaining_progress -= pass_progress;
VP8IteratorInit(enc, &it);
SetLoopParams(enc, stats.q);
if (is_last_pass) {
@@ -832,7 +836,7 @@ int VP8EncTokenLoop(VP8Encoder* const enc) {
StoreSideInfo(&it);
VP8StoreFilterStats(&it);
VP8IteratorExport(&it);
- ok = VP8IteratorProgress(&it, 20);
+ ok = VP8IteratorProgress(&it, pass_progress);
}
VP8IteratorSaveBoundary(&it);
} while (ok && VP8IteratorNext(&it));
@@ -878,7 +882,8 @@ int VP8EncTokenLoop(VP8Encoder* const enc) {
ok = VP8EmitTokens(&enc->tokens_, enc->parts_ + 0,
(const uint8_t*)proba->coeffs_, 1);
}
- ok = ok && WebPReportProgress(enc->pic_, enc->percent_ + 20, &enc->percent_);
+ ok = ok && WebPReportProgress(enc->pic_, enc->percent_ + remaining_progress,
+ &enc->percent_);
return PostLoopFinalize(&it, ok);
}
diff --git a/thirdparty/libwebp/src/enc/predictor_enc.c b/thirdparty/libwebp/src/enc/predictor_enc.c
index 2e6762ea0d..2b5c767280 100644
--- a/thirdparty/libwebp/src/enc/predictor_enc.c
+++ b/thirdparty/libwebp/src/enc/predictor_enc.c
@@ -249,7 +249,7 @@ static WEBP_INLINE void GetResidual(
} else if (x == 0) {
predict = upper_row[x]; // Top.
} else {
- predict = pred_func(current_row[x - 1], upper_row + x);
+ predict = pred_func(&current_row[x - 1], upper_row + x);
}
#if (WEBP_NEAR_LOSSLESS == 1)
if (max_quantization == 1 || mode == 0 || y == 0 || y == height - 1 ||
diff --git a/thirdparty/libwebp/src/enc/quant_enc.c b/thirdparty/libwebp/src/enc/quant_enc.c
index 01eb565c7f..6cede28ab4 100644
--- a/thirdparty/libwebp/src/enc/quant_enc.c
+++ b/thirdparty/libwebp/src/enc/quant_enc.c
@@ -585,6 +585,9 @@ static WEBP_INLINE score_t RDScoreTrellis(int lambda, score_t rate,
return rate * lambda + RD_DISTO_MULT * distortion;
}
+// Coefficient type.
+enum { TYPE_I16_AC = 0, TYPE_I16_DC = 1, TYPE_CHROMA_A = 2, TYPE_I4_AC = 3 };
+
static int TrellisQuantizeBlock(const VP8Encoder* const enc,
int16_t in[16], int16_t out[16],
int ctx0, int coeff_type,
@@ -593,7 +596,7 @@ static int TrellisQuantizeBlock(const VP8Encoder* const enc,
const ProbaArray* const probas = enc->proba_.coeffs_[coeff_type];
CostArrayPtr const costs =
(CostArrayPtr)enc->proba_.remapped_costs_[coeff_type];
- const int first = (coeff_type == 0) ? 1 : 0;
+ const int first = (coeff_type == TYPE_I16_AC) ? 1 : 0;
Node nodes[16][NUM_NODES];
ScoreState score_states[2][NUM_NODES];
ScoreState* ss_cur = &SCORE_STATE(0, MIN_DELTA);
@@ -657,16 +660,17 @@ static int TrellisQuantizeBlock(const VP8Encoder* const enc,
// test all alternate level values around level0.
for (m = -MIN_DELTA; m <= MAX_DELTA; ++m) {
Node* const cur = &NODE(n, m);
- int level = level0 + m;
+ const int level = level0 + m;
const int ctx = (level > 2) ? 2 : level;
const int band = VP8EncBands[n + 1];
score_t base_score;
- score_t best_cur_score = MAX_COST;
- int best_prev = 0; // default, in case
+ score_t best_cur_score;
+ int best_prev;
+ score_t cost, score;
- ss_cur[m].score = MAX_COST;
ss_cur[m].costs = costs[n + 1][ctx];
if (level < 0 || level > thresh_level) {
+ ss_cur[m].score = MAX_COST;
// Node is dead.
continue;
}
@@ -682,18 +686,24 @@ static int TrellisQuantizeBlock(const VP8Encoder* const enc,
}
// Inspect all possible non-dead predecessors. Retain only the best one.
- for (p = -MIN_DELTA; p <= MAX_DELTA; ++p) {
+ // The base_score is added to all scores so it is only added for the final
+ // value after the loop.
+ cost = VP8LevelCost(ss_prev[-MIN_DELTA].costs, level);
+ best_cur_score =
+ ss_prev[-MIN_DELTA].score + RDScoreTrellis(lambda, cost, 0);
+ best_prev = -MIN_DELTA;
+ for (p = -MIN_DELTA + 1; p <= MAX_DELTA; ++p) {
// Dead nodes (with ss_prev[p].score >= MAX_COST) are automatically
// eliminated since their score can't be better than the current best.
- const score_t cost = VP8LevelCost(ss_prev[p].costs, level);
+ cost = VP8LevelCost(ss_prev[p].costs, level);
// Examine node assuming it's a non-terminal one.
- const score_t score =
- base_score + ss_prev[p].score + RDScoreTrellis(lambda, cost, 0);
+ score = ss_prev[p].score + RDScoreTrellis(lambda, cost, 0);
if (score < best_cur_score) {
best_cur_score = score;
best_prev = p;
}
}
+ best_cur_score += base_score;
// Store best finding in current node.
cur->sign = sign;
cur->level = level;
@@ -701,11 +711,11 @@ static int TrellisQuantizeBlock(const VP8Encoder* const enc,
ss_cur[m].score = best_cur_score;
// Now, record best terminal node (and thus best entry in the graph).
- if (level != 0) {
+ if (level != 0 && best_cur_score < best_score) {
const score_t last_pos_cost =
(n < 15) ? VP8BitCost(0, probas[band][ctx][0]) : 0;
const score_t last_pos_score = RDScoreTrellis(lambda, last_pos_cost, 0);
- const score_t score = best_cur_score + last_pos_score;
+ score = best_cur_score + last_pos_score;
if (score < best_score) {
best_score = score;
best_path[0] = n; // best eob position
@@ -717,10 +727,16 @@ static int TrellisQuantizeBlock(const VP8Encoder* const enc,
}
// Fresh start
- memset(in + first, 0, (16 - first) * sizeof(*in));
- memset(out + first, 0, (16 - first) * sizeof(*out));
+ // Beware! We must preserve in[0]/out[0] value for TYPE_I16_AC case.
+ if (coeff_type == TYPE_I16_AC) {
+ memset(in + 1, 0, 15 * sizeof(*in));
+ memset(out + 1, 0, 15 * sizeof(*out));
+ } else {
+ memset(in, 0, 16 * sizeof(*in));
+ memset(out, 0, 16 * sizeof(*out));
+ }
if (best_path[0] == -1) {
- return 0; // skip!
+ return 0; // skip!
}
{
@@ -775,9 +791,9 @@ static int ReconstructIntra16(VP8EncIterator* const it,
for (y = 0, n = 0; y < 4; ++y) {
for (x = 0; x < 4; ++x, ++n) {
const int ctx = it->top_nz_[x] + it->left_nz_[y];
- const int non_zero =
- TrellisQuantizeBlock(enc, tmp[n], rd->y_ac_levels[n], ctx, 0,
- &dqm->y1_, dqm->lambda_trellis_i16_);
+ const int non_zero = TrellisQuantizeBlock(
+ enc, tmp[n], rd->y_ac_levels[n], ctx, TYPE_I16_AC, &dqm->y1_,
+ dqm->lambda_trellis_i16_);
it->top_nz_[x] = it->left_nz_[y] = non_zero;
rd->y_ac_levels[n][0] = 0;
nz |= non_zero << n;
@@ -818,7 +834,7 @@ static int ReconstructIntra4(VP8EncIterator* const it,
if (DO_TRELLIS_I4 && it->do_trellis_) {
const int x = it->i4_ & 3, y = it->i4_ >> 2;
const int ctx = it->top_nz_[x] + it->left_nz_[y];
- nz = TrellisQuantizeBlock(enc, tmp, levels, ctx, 3, &dqm->y1_,
+ nz = TrellisQuantizeBlock(enc, tmp, levels, ctx, TYPE_I4_AC, &dqm->y1_,
dqm->lambda_trellis_i4_);
} else {
nz = VP8EncQuantizeBlock(tmp, levels, &dqm->y1_);
@@ -927,9 +943,9 @@ static int ReconstructUV(VP8EncIterator* const it, VP8ModeScore* const rd,
for (y = 0; y < 2; ++y) {
for (x = 0; x < 2; ++x, ++n) {
const int ctx = it->top_nz_[4 + ch + x] + it->left_nz_[4 + ch + y];
- const int non_zero =
- TrellisQuantizeBlock(enc, tmp[n], rd->uv_levels[n], ctx, 2,
- &dqm->uv_, dqm->lambda_trellis_uv_);
+ const int non_zero = TrellisQuantizeBlock(
+ enc, tmp[n], rd->uv_levels[n], ctx, TYPE_CHROMA_A, &dqm->uv_,
+ dqm->lambda_trellis_uv_);
it->top_nz_[4 + ch + x] = it->left_nz_[4 + ch + y] = non_zero;
nz |= non_zero << n;
}
diff --git a/thirdparty/libwebp/src/enc/vp8i_enc.h b/thirdparty/libwebp/src/enc/vp8i_enc.h
index 67e9509367..b4bba08f27 100644
--- a/thirdparty/libwebp/src/enc/vp8i_enc.h
+++ b/thirdparty/libwebp/src/enc/vp8i_enc.h
@@ -32,7 +32,7 @@ extern "C" {
// version numbers
#define ENC_MAJ_VERSION 1
#define ENC_MIN_VERSION 2
-#define ENC_REV_VERSION 1
+#define ENC_REV_VERSION 2
enum { MAX_LF_LEVELS = 64, // Maximum loop filter level
MAX_VARIABLE_LEVEL = 67, // last (inclusive) level with variable cost
diff --git a/thirdparty/libwebp/src/mux/muxi.h b/thirdparty/libwebp/src/mux/muxi.h
index 330da66754..d9bf9b3770 100644
--- a/thirdparty/libwebp/src/mux/muxi.h
+++ b/thirdparty/libwebp/src/mux/muxi.h
@@ -29,7 +29,7 @@ extern "C" {
#define MUX_MAJ_VERSION 1
#define MUX_MIN_VERSION 2
-#define MUX_REV_VERSION 1
+#define MUX_REV_VERSION 2
// Chunk object.
typedef struct WebPChunk WebPChunk;
diff --git a/thirdparty/libwebp/src/utils/huffman_encode_utils.c b/thirdparty/libwebp/src/utils/huffman_encode_utils.c
index fd7a47d8f7..585db91951 100644
--- a/thirdparty/libwebp/src/utils/huffman_encode_utils.c
+++ b/thirdparty/libwebp/src/utils/huffman_encode_utils.c
@@ -161,7 +161,7 @@ static void SetBitDepths(const HuffmanTree* const tree,
// especially when population counts are longer than 2**tree_limit, but
// we are not planning to use this with extremely long blocks.
//
-// See http://en.wikipedia.org/wiki/Huffman_coding
+// See https://en.wikipedia.org/wiki/Huffman_coding
static void GenerateOptimalTree(const uint32_t* const histogram,
int histogram_size,
HuffmanTree* tree, int tree_depth_limit,
diff --git a/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c b/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c
index f65b6cdbb6..97e7893704 100644
--- a/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c
+++ b/thirdparty/libwebp/src/utils/quant_levels_dec_utils.c
@@ -30,7 +30,7 @@
#define DFIX 4 // extra precision for ordered dithering
#define DSIZE 4 // dithering size (must be a power of two)
-// cf. http://en.wikipedia.org/wiki/Ordered_dithering
+// cf. https://en.wikipedia.org/wiki/Ordered_dithering
static const uint8_t kOrderedDither[DSIZE][DSIZE] = {
{ 0, 8, 2, 10 }, // coefficients are in DFIX fixed-point precision
{ 12, 4, 14, 6 },
diff --git a/thirdparty/libwebp/src/utils/utils.c b/thirdparty/libwebp/src/utils/utils.c
index 9e464c16ce..a7c3a70fef 100644
--- a/thirdparty/libwebp/src/utils/utils.c
+++ b/thirdparty/libwebp/src/utils/utils.c
@@ -23,7 +23,7 @@
// alloc/free etc) is printed. For debugging/tuning purpose only (it's slow,
// and not multi-thread safe!).
// An interesting alternative is valgrind's 'massif' tool:
-// http://valgrind.org/docs/manual/ms-manual.html
+// https://valgrind.org/docs/manual/ms-manual.html
// Here is an example command line:
/* valgrind --tool=massif --massif-out-file=massif.out \
--stacks=yes --alloc-fn=WebPSafeMalloc --alloc-fn=WebPSafeCalloc
diff --git a/thirdparty/libwebp/src/webp/decode.h b/thirdparty/libwebp/src/webp/decode.h
index 44fcd64a84..d98247509a 100644
--- a/thirdparty/libwebp/src/webp/decode.h
+++ b/thirdparty/libwebp/src/webp/decode.h
@@ -85,7 +85,7 @@ WEBP_EXTERN uint8_t* WebPDecodeBGR(const uint8_t* data, size_t data_size,
// Upon return, the Y buffer has a stride returned as '*stride', while U and V
// have a common stride returned as '*uv_stride'.
// Return NULL in case of error.
-// (*) Also named Y'CbCr. See: http://en.wikipedia.org/wiki/YCbCr
+// (*) Also named Y'CbCr. See: https://en.wikipedia.org/wiki/YCbCr
WEBP_EXTERN uint8_t* WebPDecodeYUV(const uint8_t* data, size_t data_size,
int* width, int* height,
uint8_t** u, uint8_t** v,
diff --git a/thirdparty/mbedtls/include/godot_core_mbedtls_config.h b/thirdparty/mbedtls/include/godot_core_mbedtls_config.h
index 0e90a98886..9e7b2742a7 100644
--- a/thirdparty/mbedtls/include/godot_core_mbedtls_config.h
+++ b/thirdparty/mbedtls/include/godot_core_mbedtls_config.h
@@ -7,7 +7,12 @@
#define MBEDTLS_AES_C
#define MBEDTLS_BASE64_C
+#define MBEDTLS_CTR_DRBG_C
+#define MBEDTLS_ENTROPY_C
#define MBEDTLS_MD5_C
#define MBEDTLS_SHA1_C
#define MBEDTLS_SHA256_C
#define MBEDTLS_PLATFORM_ZEROIZE_ALT
+#define MBEDTLS_NO_DEFAULT_ENTROPY_SOURCES
+
+#include <limits.h>
diff --git a/thirdparty/misc/patches/polypartition-godot-types.patch b/thirdparty/misc/patches/polypartition-godot-types.patch
index 782f02e8dc..5d8aba3437 100644
--- a/thirdparty/misc/patches/polypartition-godot-types.patch
+++ b/thirdparty/misc/patches/polypartition-godot-types.patch
@@ -1,19 +1,16 @@
diff --git a/thirdparty/misc/polypartition.cpp b/thirdparty/misc/polypartition.cpp
-index 3a8a6efa83..5e94793b79 100644
+index 3a8a6efa83..8c5409bf24 100644
--- a/thirdparty/misc/polypartition.cpp
+++ b/thirdparty/misc/polypartition.cpp
-@@ -23,10 +23,7 @@
-
- #include "polypartition.h"
-
--#include <math.h>
--#include <string.h>
+@@ -26,7 +26,6 @@
+ #include <math.h>
+ #include <string.h>
#include <algorithm>
-#include <vector>
TPPLPoly::TPPLPoly() {
hole = false;
-@@ -186,7 +183,7 @@ int TPPLPartition::Intersects(TPPLPoint &p11, TPPLPoint &p12, TPPLPoint &p21, TP
+@@ -186,7 +185,7 @@ int TPPLPartition::Intersects(TPPLPoint &p11, TPPLPoint &p12, TPPLPoint &p21, TP
// Removes holes from inpolys by merging them with non-holes.
int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
TPPLPolyList polys;
@@ -22,7 +19,7 @@ index 3a8a6efa83..5e94793b79 100644
long i, i2, holepointindex, polypointindex;
TPPLPoint holepoint, polypoint, bestpolypoint;
TPPLPoint linep1, linep2;
-@@ -198,15 +195,15 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -198,15 +197,15 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
// Check for the trivial case of no holes.
hasholes = false;
@@ -42,7 +39,7 @@ index 3a8a6efa83..5e94793b79 100644
}
return 1;
}
-@@ -216,8 +213,8 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -216,8 +215,8 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
while (1) {
// Find the hole point with the largest x.
hasholes = false;
@@ -53,7 +50,7 @@ index 3a8a6efa83..5e94793b79 100644
continue;
}
-@@ -227,8 +224,8 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -227,8 +226,8 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
holepointindex = 0;
}
@@ -64,7 +61,7 @@ index 3a8a6efa83..5e94793b79 100644
holeiter = iter;
holepointindex = i;
}
-@@ -237,24 +234,24 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -237,24 +236,24 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
if (!hasholes) {
break;
}
@@ -98,13 +95,13 @@ index 3a8a6efa83..5e94793b79 100644
if (pointfound) {
v1 = Normalize(polypoint - holepoint);
v2 = Normalize(bestpolypoint - holepoint);
-@@ -263,13 +260,13 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -263,13 +262,13 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
}
}
pointvisible = true;
- for (iter2 = polys.begin(); iter2 != polys.end(); iter2++) {
- if (iter2->IsHole()) {
-+ for (iter2 = polys.front(); iter2; iter2->next()) {
++ for (iter2 = polys.front(); iter2; iter2 = iter2->next()) {
+ if (iter2->get().IsHole()) {
continue;
}
@@ -117,7 +114,7 @@ index 3a8a6efa83..5e94793b79 100644
if (Intersects(holepoint, polypoint, linep1, linep2)) {
pointvisible = false;
break;
-@@ -292,18 +289,18 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -292,18 +291,18 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
return 0;
}
@@ -142,7 +139,7 @@ index 3a8a6efa83..5e94793b79 100644
i2++;
}
-@@ -312,8 +309,8 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
+@@ -312,8 +311,8 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
polys.push_back(newpoly);
}
@@ -153,7 +150,7 @@ index 3a8a6efa83..5e94793b79 100644
}
return 1;
-@@ -524,13 +521,13 @@ int TPPLPartition::Triangulate_EC(TPPLPoly *poly, TPPLPolyList *triangles) {
+@@ -524,13 +523,13 @@ int TPPLPartition::Triangulate_EC(TPPLPoly *poly, TPPLPolyList *triangles) {
int TPPLPartition::Triangulate_EC(TPPLPolyList *inpolys, TPPLPolyList *triangles) {
TPPLPolyList outpolys;
@@ -170,7 +167,7 @@ index 3a8a6efa83..5e94793b79 100644
return 0;
}
}
-@@ -543,7 +540,7 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -543,7 +542,7 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
}
TPPLPolyList triangles;
@@ -179,7 +176,7 @@ index 3a8a6efa83..5e94793b79 100644
TPPLPoly *poly1 = NULL, *poly2 = NULL;
TPPLPoly newpoly;
TPPLPoint d1, d2, p1, p2, p3;
-@@ -578,19 +575,19 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -578,19 +577,19 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
return 0;
}
@@ -203,7 +200,7 @@ index 3a8a6efa83..5e94793b79 100644
for (i21 = 0; i21 < poly2->GetNumPoints(); i21++) {
if ((d2.x != poly2->GetPoint(i21).x) || (d2.y != poly2->GetPoint(i21).y)) {
-@@ -660,16 +657,16 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -660,16 +659,16 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
}
triangles.erase(iter2);
@@ -224,7 +221,7 @@ index 3a8a6efa83..5e94793b79 100644
}
return 1;
-@@ -677,13 +674,13 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -677,13 +676,13 @@ int TPPLPartition::ConvexPartition_HM(TPPLPoly *poly, TPPLPolyList *parts) {
int TPPLPartition::ConvexPartition_HM(TPPLPolyList *inpolys, TPPLPolyList *parts) {
TPPLPolyList outpolys;
@@ -241,7 +238,7 @@ index 3a8a6efa83..5e94793b79 100644
return 0;
}
}
-@@ -824,8 +821,8 @@ int TPPLPartition::Triangulate_OPT(TPPLPoly *poly, TPPLPolyList *triangles) {
+@@ -824,8 +823,8 @@ int TPPLPartition::Triangulate_OPT(TPPLPoly *poly, TPPLPolyList *triangles) {
newdiagonal.index1 = 0;
newdiagonal.index2 = n - 1;
diagonals.push_back(newdiagonal);
@@ -252,7 +249,7 @@ index 3a8a6efa83..5e94793b79 100644
diagonals.pop_front();
bestvertex = dpstates[diagonal.index2][diagonal.index1].bestvertex;
if (bestvertex == -1) {
-@@ -873,10 +870,10 @@ void TPPLPartition::UpdateState(long a, long b, long w, long i, long j, DPState2
+@@ -873,10 +872,10 @@ void TPPLPartition::UpdateState(long a, long b, long w, long i, long j, DPState2
pairs->push_front(newdiagonal);
dpstates[a][b].weight = w;
} else {
@@ -265,7 +262,7 @@ index 3a8a6efa83..5e94793b79 100644
pairs->pop_front();
}
pairs->push_front(newdiagonal);
-@@ -885,7 +882,7 @@ void TPPLPartition::UpdateState(long a, long b, long w, long i, long j, DPState2
+@@ -885,7 +884,7 @@ void TPPLPartition::UpdateState(long a, long b, long w, long i, long j, DPState2
void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates) {
DiagonalList *pairs = NULL;
@@ -274,7 +271,7 @@ index 3a8a6efa83..5e94793b79 100644
long top;
long w;
-@@ -902,23 +899,23 @@ void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPS
+@@ -902,23 +901,23 @@ void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPS
}
if (j - i > 1) {
pairs = &(dpstates[i][j].pairs);
@@ -305,7 +302,7 @@ index 3a8a6efa83..5e94793b79 100644
}
}
}
-@@ -927,7 +924,7 @@ void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPS
+@@ -927,7 +926,7 @@ void TPPLPartition::TypeA(long i, long j, long k, PartitionVertex *vertices, DPS
void TPPLPartition::TypeB(long i, long j, long k, PartitionVertex *vertices, DPState2 **dpstates) {
DiagonalList *pairs = NULL;
@@ -314,7 +311,7 @@ index 3a8a6efa83..5e94793b79 100644
long top;
long w;
-@@ -946,21 +943,21 @@ void TPPLPartition::TypeB(long i, long j, long k, PartitionVertex *vertices, DPS
+@@ -946,21 +945,21 @@ void TPPLPartition::TypeB(long i, long j, long k, PartitionVertex *vertices, DPS
if (k - j > 1) {
pairs = &(dpstates[j][k].pairs);
@@ -343,7 +340,7 @@ index 3a8a6efa83..5e94793b79 100644
}
} else {
w++;
-@@ -981,11 +978,11 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -981,11 +980,11 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
DiagonalList diagonals, diagonals2;
Diagonal diagonal, newdiagonal;
DiagonalList *pairs = NULL, *pairs2 = NULL;
@@ -358,7 +355,7 @@ index 3a8a6efa83..5e94793b79 100644
bool ijreal, jkreal;
n = poly->GetNumPoints();
-@@ -1110,35 +1107,35 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1110,35 +1109,35 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
newdiagonal.index1 = 0;
newdiagonal.index2 = n - 1;
diagonals.push_front(newdiagonal);
@@ -403,7 +400,7 @@ index 3a8a6efa83..5e94793b79 100644
pairs2->pop_back();
} else {
break;
-@@ -1153,21 +1150,21 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1153,21 +1152,21 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
diagonals.push_front(newdiagonal);
}
} else {
@@ -431,7 +428,7 @@ index 3a8a6efa83..5e94793b79 100644
pairs2->pop_front();
} else {
break;
-@@ -1197,8 +1194,8 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1197,8 +1196,8 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
newdiagonal.index1 = 0;
newdiagonal.index2 = n - 1;
diagonals.push_front(newdiagonal);
@@ -442,7 +439,7 @@ index 3a8a6efa83..5e94793b79 100644
diagonals.pop_front();
if ((diagonal.index2 - diagonal.index1) <= 1) {
continue;
-@@ -1210,8 +1207,8 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1210,8 +1209,8 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
indices.push_back(diagonal.index2);
diagonals2.push_front(diagonal);
@@ -453,7 +450,7 @@ index 3a8a6efa83..5e94793b79 100644
diagonals2.pop_front();
if ((diagonal.index2 - diagonal.index1) <= 1) {
continue;
-@@ -1220,16 +1217,16 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1220,16 +1219,16 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
jkreal = true;
pairs = &(dpstates[diagonal.index1][diagonal.index2].pairs);
if (!vertices[diagonal.index1].isConvex) {
@@ -476,7 +473,7 @@ index 3a8a6efa83..5e94793b79 100644
jkreal = false;
}
}
-@@ -1253,11 +1250,12 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1253,11 +1252,12 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
indices.push_back(j);
}
@@ -492,7 +489,7 @@ index 3a8a6efa83..5e94793b79 100644
k++;
}
parts->push_back(newpoly);
-@@ -1281,7 +1279,7 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
+@@ -1281,7 +1281,7 @@ int TPPLPartition::ConvexPartition_OPT(TPPLPoly *poly, TPPLPolyList *parts) {
// "Computational Geometry: Algorithms and Applications"
// by Mark de Berg, Otfried Cheong, Marc van Kreveld, and Mark Overmars.
int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monotonePolys) {
@@ -501,7 +498,7 @@ index 3a8a6efa83..5e94793b79 100644
MonotoneVertex *vertices = NULL;
long i, numvertices, vindex, vindex2, newnumvertices, maxnumvertices;
long polystartindex, polyendindex;
-@@ -1291,11 +1289,8 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1291,11 +1291,8 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
bool error = false;
numvertices = 0;
@@ -515,7 +512,7 @@ index 3a8a6efa83..5e94793b79 100644
}
maxnumvertices = numvertices * 3;
-@@ -1303,8 +1298,8 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1303,8 +1300,8 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
newnumvertices = numvertices;
polystartindex = 0;
@@ -526,7 +523,7 @@ index 3a8a6efa83..5e94793b79 100644
polyendindex = polystartindex + poly->GetNumPoints() - 1;
for (i = 0; i < poly->GetNumPoints(); i++) {
vertices[i + polystartindex].p = poly->GetPoint(i);
-@@ -1360,14 +1355,14 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1360,14 +1357,14 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
// Note that while set doesn't actually have to be implemented as
// a tree, complexity requirements for operations are the same as
// for the balanced binary search tree.
@@ -546,7 +543,7 @@ index 3a8a6efa83..5e94793b79 100644
}
// For each vertex.
-@@ -1387,13 +1382,14 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1387,13 +1384,14 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
newedge.p1 = v->p;
newedge.p2 = vertices[v->next].p;
newedge.index = vindex;
@@ -564,7 +561,7 @@ index 3a8a6efa83..5e94793b79 100644
error = true;
break;
}
-@@ -1412,29 +1408,30 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1412,29 +1410,30 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
newedge.p1 = v->p;
newedge.p2 = v->p;
edgeIter = edgeTree.lower_bound(newedge);
@@ -601,7 +598,7 @@ index 3a8a6efa83..5e94793b79 100644
error = true;
break;
}
-@@ -1452,25 +1449,25 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1452,25 +1451,25 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
newedge.p1 = v->p;
newedge.p2 = v->p;
edgeIter = edgeTree.lower_bound(newedge);
@@ -632,7 +629,7 @@ index 3a8a6efa83..5e94793b79 100644
error = true;
break;
}
-@@ -1488,27 +1485,28 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1488,27 +1487,28 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
newedge.p1 = v2->p;
newedge.p2 = vertices[v2->next].p;
newedge.index = vindex2;
@@ -668,7 +665,7 @@ index 3a8a6efa83..5e94793b79 100644
}
break;
}
-@@ -1569,8 +1567,8 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
+@@ -1569,8 +1569,8 @@ int TPPLPartition::MonotonePartition(TPPLPolyList *inpolys, TPPLPolyList *monoto
// Adds a diagonal to the doubly-connected list of vertices.
void TPPLPartition::AddDiagonal(MonotoneVertex *vertices, long *numvertices, long index1, long index2,
@@ -679,7 +676,7 @@ index 3a8a6efa83..5e94793b79 100644
long newindex1, newindex2;
newindex1 = *numvertices;
-@@ -1597,14 +1595,14 @@ void TPPLPartition::AddDiagonal(MonotoneVertex *vertices, long *numvertices, lon
+@@ -1597,14 +1597,14 @@ void TPPLPartition::AddDiagonal(MonotoneVertex *vertices, long *numvertices, lon
vertextypes[newindex1] = vertextypes[index1];
edgeTreeIterators[newindex1] = edgeTreeIterators[index1];
helpers[newindex1] = helpers[index1];
@@ -698,7 +695,7 @@ index 3a8a6efa83..5e94793b79 100644
}
}
-@@ -1830,13 +1828,13 @@ int TPPLPartition::TriangulateMonotone(TPPLPoly *inPoly, TPPLPolyList *triangles
+@@ -1830,13 +1830,13 @@ int TPPLPartition::TriangulateMonotone(TPPLPoly *inPoly, TPPLPolyList *triangles
int TPPLPartition::Triangulate_MONO(TPPLPolyList *inpolys, TPPLPolyList *triangles) {
TPPLPolyList monotone;
diff --git a/thirdparty/misc/polypartition.cpp b/thirdparty/misc/polypartition.cpp
index 5e94793b79..df144c57a6 100644
--- a/thirdparty/misc/polypartition.cpp
+++ b/thirdparty/misc/polypartition.cpp
@@ -23,6 +23,8 @@
#include "polypartition.h"
+#include <math.h>
+#include <string.h>
#include <algorithm>
TPPLPoly::TPPLPoly() {
@@ -260,7 +262,7 @@ int TPPLPartition::RemoveHoles(TPPLPolyList *inpolys, TPPLPolyList *outpolys) {
}
}
pointvisible = true;
- for (iter2 = polys.front(); iter2; iter2->next()) {
+ for (iter2 = polys.front(); iter2; iter2 = iter2->next()) {
if (iter2->get().IsHole()) {
continue;
}
diff --git a/thirdparty/misc/stb_rect_pack.h b/thirdparty/misc/stb_rect_pack.h
index 5c848de0e7..6a633ce666 100644
--- a/thirdparty/misc/stb_rect_pack.h
+++ b/thirdparty/misc/stb_rect_pack.h
@@ -1,9 +1,15 @@
-// stb_rect_pack.h - v1.00 - public domain - rectangle packing
+// stb_rect_pack.h - v1.01 - public domain - rectangle packing
// Sean Barrett 2014
//
// Useful for e.g. packing rectangular textures into an atlas.
// Does not do rotation.
//
+// Before #including,
+//
+// #define STB_RECT_PACK_IMPLEMENTATION
+//
+// in the file that you want to have the implementation.
+//
// Not necessarily the awesomest packing method, but better than
// the totally naive one in stb_truetype (which is primarily what
// this is meant to replace).
@@ -35,6 +41,7 @@
//
// Version history:
//
+// 1.01 (2021-07-11) always use large rect mode, expose STBRP__MAXVAL in public section
// 1.00 (2019-02-25) avoid small space waste; gracefully fail too-wide rectangles
// 0.99 (2019-02-07) warning fixes
// 0.11 (2017-03-03) return packing success/fail result
@@ -75,11 +82,10 @@ typedef struct stbrp_context stbrp_context;
typedef struct stbrp_node stbrp_node;
typedef struct stbrp_rect stbrp_rect;
-#ifdef STBRP_LARGE_RECTS
typedef int stbrp_coord;
-#else
-typedef unsigned short stbrp_coord;
-#endif
+
+#define STBRP__MAXVAL 0x7fffffff
+// Mostly for internal use, but this is the maximum supported coordinate value.
STBRP_DEF int stbrp_pack_rects (stbrp_context *context, stbrp_rect *rects, int num_rects);
// Assign packed locations to rectangles. The rectangles are of type
@@ -209,8 +215,10 @@ struct stbrp_context
#ifdef _MSC_VER
#define STBRP__NOTUSED(v) (void)(v)
+#define STBRP__CDECL __cdecl
#else
#define STBRP__NOTUSED(v) (void)sizeof(v)
+#define STBRP__CDECL
#endif
enum
@@ -253,9 +261,6 @@ STBRP_DEF void stbrp_setup_allow_out_of_mem(stbrp_context *context, int allow_ou
STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height, stbrp_node *nodes, int num_nodes)
{
int i;
-#ifndef STBRP_LARGE_RECTS
- STBRP_ASSERT(width <= 0xffff && height <= 0xffff);
-#endif
for (i=0; i < num_nodes-1; ++i)
nodes[i].next = &nodes[i+1];
@@ -274,11 +279,7 @@ STBRP_DEF void stbrp_init_target(stbrp_context *context, int width, int height,
context->extra[0].y = 0;
context->extra[0].next = &context->extra[1];
context->extra[1].x = (stbrp_coord) width;
-#ifdef STBRP_LARGE_RECTS
context->extra[1].y = (1<<30);
-#else
- context->extra[1].y = 65535;
-#endif
context->extra[1].next = NULL;
}
@@ -520,7 +521,7 @@ static stbrp__findresult stbrp__skyline_pack_rectangle(stbrp_context *context, i
return res;
}
-static int rect_height_compare(const void *a, const void *b)
+static int STBRP__CDECL rect_height_compare(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
@@ -531,19 +532,13 @@ static int rect_height_compare(const void *a, const void *b)
return (p->w > q->w) ? -1 : (p->w < q->w);
}
-static int rect_original_order(const void *a, const void *b)
+static int STBRP__CDECL rect_original_order(const void *a, const void *b)
{
const stbrp_rect *p = (const stbrp_rect *) a;
const stbrp_rect *q = (const stbrp_rect *) b;
return (p->was_packed < q->was_packed) ? -1 : (p->was_packed > q->was_packed);
}
-#ifdef STBRP_LARGE_RECTS
-#define STBRP__MAXVAL 0xffffffff
-#else
-#define STBRP__MAXVAL 0xffff
-#endif
-
STBRP_DEF int stbrp_pack_rects(stbrp_context *context, stbrp_rect *rects, int num_rects)
{
int i, all_rects_packed = 1;
diff --git a/thirdparty/msdfgen/core/edge-coloring.cpp b/thirdparty/msdfgen/core/edge-coloring.cpp
index 370f9aa38d..914f1769fd 100644
--- a/thirdparty/msdfgen/core/edge-coloring.cpp
+++ b/thirdparty/msdfgen/core/edge-coloring.cpp
@@ -473,7 +473,7 @@ void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long l
edgeMatrix[i] = &edgeMatrixStorage[i*splineCount];
int nextEdge = 0;
for (; nextEdge < graphEdgeCount && !*graphEdgeDistances[nextEdge]; ++nextEdge) {
- int elem = graphEdgeDistances[nextEdge]-distanceMatrixBase;
+ int elem = (int) (graphEdgeDistances[nextEdge]-distanceMatrixBase);
int row = elem/splineCount;
int col = elem%splineCount;
edgeMatrix[row][col] = 1;
@@ -483,7 +483,7 @@ void edgeColoringByDistance(Shape &shape, double angleThreshold, unsigned long l
std::vector<int> coloring(2*splineCount);
colorSecondDegreeGraph(&coloring[0], &edgeMatrix[0], splineCount, seed);
for (; nextEdge < graphEdgeCount; ++nextEdge) {
- int elem = graphEdgeDistances[nextEdge]-distanceMatrixBase;
+ int elem = (int) (graphEdgeDistances[nextEdge]-distanceMatrixBase);
tryAddEdge(&coloring[0], &edgeMatrix[0], splineCount, elem/splineCount, elem%splineCount, &coloring[splineCount]);
}
diff --git a/thirdparty/msdfgen/core/equation-solver.cpp b/thirdparty/msdfgen/core/equation-solver.cpp
index fbe906428b..4144fa3340 100644
--- a/thirdparty/msdfgen/core/equation-solver.cpp
+++ b/thirdparty/msdfgen/core/equation-solver.cpp
@@ -4,17 +4,15 @@
#define _USE_MATH_DEFINES
#include <cmath>
-#define TOO_LARGE_RATIO 1e12
-
namespace msdfgen {
int solveQuadratic(double x[2], double a, double b, double c) {
- // a = 0 -> linear equation
- if (a == 0 || fabs(b)+fabs(c) > TOO_LARGE_RATIO*fabs(a)) {
- // a, b = 0 -> no solution
- if (b == 0 || fabs(c) > TOO_LARGE_RATIO*fabs(b)) {
+ // a == 0 -> linear equation
+ if (a == 0 || fabs(b) > 1e12*fabs(a)) {
+ // a == 0, b == 0 -> no solution
+ if (b == 0) {
if (c == 0)
- return -1; // 0 = 0
+ return -1; // 0 == 0
return 0;
}
x[0] = -c/b;
@@ -35,41 +33,38 @@ int solveQuadratic(double x[2], double a, double b, double c) {
static int solveCubicNormed(double x[3], double a, double b, double c) {
double a2 = a*a;
- double q = (a2 - 3*b)/9;
- double r = (a*(2*a2-9*b) + 27*c)/54;
+ double q = 1/9.*(a2-3*b);
+ double r = 1/54.*(a*(2*a2-9*b)+27*c);
double r2 = r*r;
double q3 = q*q*q;
- double A, B;
+ a *= 1/3.;
if (r2 < q3) {
double t = r/sqrt(q3);
if (t < -1) t = -1;
if (t > 1) t = 1;
t = acos(t);
- a /= 3; q = -2*sqrt(q);
- x[0] = q*cos(t/3)-a;
- x[1] = q*cos((t+2*M_PI)/3)-a;
- x[2] = q*cos((t-2*M_PI)/3)-a;
+ q = -2*sqrt(q);
+ x[0] = q*cos(1/3.*t)-a;
+ x[1] = q*cos(1/3.*(t+2*M_PI))-a;
+ x[2] = q*cos(1/3.*(t-2*M_PI))-a;
return 3;
} else {
- A = -pow(fabs(r)+sqrt(r2-q3), 1/3.);
- if (r < 0) A = -A;
- B = A == 0 ? 0 : q/A;
- a /= 3;
- x[0] = (A+B)-a;
- x[1] = -0.5*(A+B)-a;
- x[2] = 0.5*sqrt(3.)*(A-B);
- if (fabs(x[2]) < 1e-14)
+ double u = (r < 0 ? 1 : -1)*pow(fabs(r)+sqrt(r2-q3), 1/3.);
+ double v = u == 0 ? 0 : q/u;
+ x[0] = (u+v)-a;
+ if (u == v || fabs(u-v) < 1e-12*fabs(u+v)) {
+ x[1] = -.5*(u+v)-a;
return 2;
+ }
return 1;
}
}
int solveCubic(double x[3], double a, double b, double c, double d) {
if (a != 0) {
- double bn = b/a, cn = c/a, dn = d/a;
- // Check that a isn't "almost zero"
- if (fabs(bn) < TOO_LARGE_RATIO && fabs(cn) < TOO_LARGE_RATIO && fabs(dn) < TOO_LARGE_RATIO)
- return solveCubicNormed(x, bn, cn, dn);
+ double bn = b/a;
+ if (fabs(bn) < 1e6) // Above this ratio, the numerical error gets larger than if we treated a as zero
+ return solveCubicNormed(x, bn, c/a, d/a);
}
return solveQuadratic(x, b, c, d);
}
diff --git a/thirdparty/openxr/COPYING.adoc b/thirdparty/openxr/COPYING.adoc
new file mode 100644
index 0000000000..3a31362acb
--- /dev/null
+++ b/thirdparty/openxr/COPYING.adoc
@@ -0,0 +1,123 @@
+= COPYING.adoc for the Khronos Group OpenXR projects
+
+// Copyright (c) 2020-2022, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: CC-BY-4.0
+
+This document is shared across a number of OpenXR GitHub projects, as the
+set of files in those projects is partially overlapping.
+(There is a single "source of truth" internal Khronos GitLab repo these
+GitHub repositories interact with.)
+
+== Licenses
+
+The OpenXR GitHub projects use several licenses.
+In general, we work to maintain compliance with the
+https://reuse.software/spec/[REUSE 3.0 specification] with clear copyright
+holders and license identifier listed for each file, preferably in each
+file.
+Where this is not possible, or e.g. when we are using files unmodified from
+other open-source projects, license data is listed:
+
+* in an adjacent file of the same name, with the additional extension
+ "`.license`"
+* in the repository-wide "`.reuse/dep5`" copyright description
+ https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/["DEP5"
+ machine-readable copyright data] file.
+
+The https://github.com/fsfe/reuse-tool["`reuse`" command line tool] can be
+used to create a software bill of materials in SPDX format from this data.
+Note that this tool will typically exclude the generated files, so if the
+BOM is important to you, you may consider using the
+https://github.com/KhronosGroup/OpenXR-SDK[OpenXR-SDK] repository that
+contains the API headers and the loader source with all generated files
+pre-generated.
+
+The data in/adjacent to each file is the authoritative license and copyright
+data.
+However, for ease of understanding, the following general practices can be
+observed.
+(If in doubt, or if the following summary conflicts with the per-file data,
+the per-file data remains authoritative.)
+
+* The source files (in asciidoctor and other formats) for the OpenXR
+ Specification, reference pages, and supporting documentation are licensed
+ under the Creative Commons Attribution 4.0 International License (SPDX
+ license identifier "`CC-BY-4.0`").
+* Header files, scripts, programs, XML files, and other tooling used or
+ generated as part of the build process is licensed under the Apache
+ License, Version 2.0.
+* For compatibility with external developers working in GPLed projects who
+ have requested it, the main OpenXR headers, XML registry, and loader
+ source are licensed under a dual license with the SPDX license identifier
+ "`Apache-2.0 OR MIT`" .
+ Relevant files include:
+** "`specification/registry/xr.xml`"
+** "`include/openxr/openxr_platform_defines.h`"
+** The generated OpenXR headers "`openxr.h`", "`openxr_platform.h`", and
+ "`openxr_reflection.h`".
+** Source files in "`src/loader/`", and a few files in "`src/common/`".
+** Generated source files used by the loader (including pre-generated in
+ OpenXR-SDK): "`common_config.h`", "`xr_generated_loader.cpp`", and
+ "`xr_generated_loader.hpp`".
+* There are a few files adopted from other open source projects.
+ Such files continue under their original licenses, and appropriately
+ annotated in accordance with REUSE.
+* Some generated, transient files produced during the course of building the
+ specification, headers, or other targets may not have copyrights.
+ These are typically very short asciidoc fragments describing parts of the
+ OpenXR API, and are incorporated by reference into specification or
+ reference page builds.
+
+Users outside Khronos who create and post OpenXR Specifications, whether
+modified or not, should use the CC-BY-4.0 license on the output documents
+(HTML, PDF, etc.) they generate.
+
+
+== Frequently Asked Questions
+
+Q: Why are the HTML and PDF Specifications posted on Khronos' website under
+a license which is neither CC-BY-4.0 nor Apache 2.0?
+
+A: The Specifications posted by Khronos in the OpenXR Registry are licensed
+under the proprietary Khronos Specification License.
+Only these Specifications are Ratified by the Khronos Board of Promoters,
+and therefore they are the only Specifications covered by the Khronos
+Intellectual Property Rights Policy.
+
+
+Q: Does Khronos allow the creation and distribution of modified versions of
+the OpenXR Specification, such as translations to other languages?
+
+A: Yes.
+Such modified Specifications, since they are not created by Khronos, should
+be placed under the CC-BY-4.0 license.
+If you believe your modifications are of general interest, consider
+contributing them back by making a pull request (PR) on the OpenXR-Docs
+project.
+
+
+Q: Can I contribute changes to the OpenXR Specification?
+
+A: Yes, by opening an Issue or Pull Request (PR) on the
+link:https://github.com/KhronosGroup/OpenXR-Docs/[OpenXR-Docs] GitHub
+project.
+You must execute a click-through Contributor License Agreement, which brings
+your changes under the umbrella of the Khronos IP policy.
+
+
+Q: Can you change the license on your files so they're compatible with my
+license?
+
+A: We are using a dual license license on `xr.xml`, the main API headers,
+and the loader source files, to make them compatible with GPL-2.0- and
+LGPL-2.0/2.1-licensed projects.
+This replaces earlier approaches of an MIT-like license on the XML and
+Apache 2.0 on all headers, and allows use of the SPDX license identifier
+"`Apache-2.0 OR MIT`" to denote the license.
+
+If you *require* this same compatibility for use of other Apache-2.0
+licensed files in our repository, please raise an issue identifying the
+files and we will consider changing those specific files to the dual license
+as well.
+
diff --git a/thirdparty/openxr/LICENSE b/thirdparty/openxr/LICENSE
new file mode 100644
index 0000000000..d645695673
--- /dev/null
+++ b/thirdparty/openxr/LICENSE
@@ -0,0 +1,202 @@
+
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
diff --git a/thirdparty/openxr/include/openxr/openxr.h b/thirdparty/openxr/include/openxr/openxr.h
new file mode 100644
index 0000000000..8798e5a6e0
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr.h
@@ -0,0 +1,3925 @@
+#ifndef OPENXR_H_
+#define OPENXR_H_ 1
+
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+/*
+** This header is generated from the Khronos OpenXR XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define XR_VERSION_1_0 1
+#include "openxr_platform_defines.h"
+#define XR_MAKE_VERSION(major, minor, patch) \
+ ((((major) & 0xffffULL) << 48) | (((minor) & 0xffffULL) << 32) | ((patch) & 0xffffffffULL))
+
+// OpenXR current version number.
+#define XR_CURRENT_API_VERSION XR_MAKE_VERSION(1, 0, 22)
+
+#define XR_VERSION_MAJOR(version) (uint16_t)(((uint64_t)(version) >> 48)& 0xffffULL)
+#define XR_VERSION_MINOR(version) (uint16_t)(((uint64_t)(version) >> 32) & 0xffffULL)
+#define XR_VERSION_PATCH(version) (uint32_t)((uint64_t)(version) & 0xffffffffULL)
+
+#if !defined(XR_NULL_HANDLE)
+#if (XR_PTR_SIZE == 8) && XR_CPP_NULLPTR_SUPPORTED
+ #define XR_NULL_HANDLE nullptr
+#else
+ #define XR_NULL_HANDLE 0
+#endif
+#endif
+
+
+
+#define XR_NULL_SYSTEM_ID 0
+
+
+#define XR_NULL_PATH 0
+
+
+#define XR_SUCCEEDED(result) ((result) >= 0)
+
+
+#define XR_FAILED(result) ((result) < 0)
+
+
+#define XR_UNQUALIFIED_SUCCESS(result) ((result) == 0)
+
+
+#define XR_NO_DURATION 0
+
+
+#define XR_INFINITE_DURATION 0x7fffffffffffffffLL
+
+
+#define XR_MIN_HAPTIC_DURATION -1
+
+
+#define XR_FREQUENCY_UNSPECIFIED 0
+
+
+#define XR_MAX_EVENT_DATA_SIZE sizeof(XrEventDataBuffer)
+
+
+#if !defined(XR_MAY_ALIAS)
+#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ > 4))
+#define XR_MAY_ALIAS __attribute__((__may_alias__))
+#else
+#define XR_MAY_ALIAS
+#endif
+#endif
+
+
+#if !defined(XR_DEFINE_HANDLE)
+#if (XR_PTR_SIZE == 8)
+ #define XR_DEFINE_HANDLE(object) typedef struct object##_T* object;
+#else
+ #define XR_DEFINE_HANDLE(object) typedef uint64_t object;
+#endif
+#endif
+
+
+
+#if !defined(XR_DEFINE_ATOM)
+ #define XR_DEFINE_ATOM(object) typedef uint64_t object;
+#endif
+
+
+typedef uint64_t XrVersion;
+typedef uint64_t XrFlags64;
+XR_DEFINE_ATOM(XrSystemId)
+typedef uint32_t XrBool32;
+XR_DEFINE_ATOM(XrPath)
+typedef int64_t XrTime;
+typedef int64_t XrDuration;
+XR_DEFINE_HANDLE(XrInstance)
+XR_DEFINE_HANDLE(XrSession)
+XR_DEFINE_HANDLE(XrSpace)
+XR_DEFINE_HANDLE(XrAction)
+XR_DEFINE_HANDLE(XrSwapchain)
+XR_DEFINE_HANDLE(XrActionSet)
+#define XR_TRUE 1
+#define XR_FALSE 0
+#define XR_MAX_EXTENSION_NAME_SIZE 128
+#define XR_MAX_API_LAYER_NAME_SIZE 256
+#define XR_MAX_API_LAYER_DESCRIPTION_SIZE 256
+#define XR_MAX_SYSTEM_NAME_SIZE 256
+#define XR_MAX_APPLICATION_NAME_SIZE 128
+#define XR_MAX_ENGINE_NAME_SIZE 128
+#define XR_MAX_RUNTIME_NAME_SIZE 128
+#define XR_MAX_PATH_LENGTH 256
+#define XR_MAX_STRUCTURE_NAME_SIZE 64
+#define XR_MAX_RESULT_STRING_SIZE 64
+#define XR_MIN_COMPOSITION_LAYERS_SUPPORTED 16
+#define XR_MAX_ACTION_SET_NAME_SIZE 64
+#define XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE 128
+#define XR_MAX_ACTION_NAME_SIZE 64
+#define XR_MAX_LOCALIZED_ACTION_NAME_SIZE 128
+
+typedef enum XrResult {
+ XR_SUCCESS = 0,
+ XR_TIMEOUT_EXPIRED = 1,
+ XR_SESSION_LOSS_PENDING = 3,
+ XR_EVENT_UNAVAILABLE = 4,
+ XR_SPACE_BOUNDS_UNAVAILABLE = 7,
+ XR_SESSION_NOT_FOCUSED = 8,
+ XR_FRAME_DISCARDED = 9,
+ XR_ERROR_VALIDATION_FAILURE = -1,
+ XR_ERROR_RUNTIME_FAILURE = -2,
+ XR_ERROR_OUT_OF_MEMORY = -3,
+ XR_ERROR_API_VERSION_UNSUPPORTED = -4,
+ XR_ERROR_INITIALIZATION_FAILED = -6,
+ XR_ERROR_FUNCTION_UNSUPPORTED = -7,
+ XR_ERROR_FEATURE_UNSUPPORTED = -8,
+ XR_ERROR_EXTENSION_NOT_PRESENT = -9,
+ XR_ERROR_LIMIT_REACHED = -10,
+ XR_ERROR_SIZE_INSUFFICIENT = -11,
+ XR_ERROR_HANDLE_INVALID = -12,
+ XR_ERROR_INSTANCE_LOST = -13,
+ XR_ERROR_SESSION_RUNNING = -14,
+ XR_ERROR_SESSION_NOT_RUNNING = -16,
+ XR_ERROR_SESSION_LOST = -17,
+ XR_ERROR_SYSTEM_INVALID = -18,
+ XR_ERROR_PATH_INVALID = -19,
+ XR_ERROR_PATH_COUNT_EXCEEDED = -20,
+ XR_ERROR_PATH_FORMAT_INVALID = -21,
+ XR_ERROR_PATH_UNSUPPORTED = -22,
+ XR_ERROR_LAYER_INVALID = -23,
+ XR_ERROR_LAYER_LIMIT_EXCEEDED = -24,
+ XR_ERROR_SWAPCHAIN_RECT_INVALID = -25,
+ XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED = -26,
+ XR_ERROR_ACTION_TYPE_MISMATCH = -27,
+ XR_ERROR_SESSION_NOT_READY = -28,
+ XR_ERROR_SESSION_NOT_STOPPING = -29,
+ XR_ERROR_TIME_INVALID = -30,
+ XR_ERROR_REFERENCE_SPACE_UNSUPPORTED = -31,
+ XR_ERROR_FILE_ACCESS_ERROR = -32,
+ XR_ERROR_FILE_CONTENTS_INVALID = -33,
+ XR_ERROR_FORM_FACTOR_UNSUPPORTED = -34,
+ XR_ERROR_FORM_FACTOR_UNAVAILABLE = -35,
+ XR_ERROR_API_LAYER_NOT_PRESENT = -36,
+ XR_ERROR_CALL_ORDER_INVALID = -37,
+ XR_ERROR_GRAPHICS_DEVICE_INVALID = -38,
+ XR_ERROR_POSE_INVALID = -39,
+ XR_ERROR_INDEX_OUT_OF_RANGE = -40,
+ XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED = -41,
+ XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED = -42,
+ XR_ERROR_NAME_DUPLICATED = -44,
+ XR_ERROR_NAME_INVALID = -45,
+ XR_ERROR_ACTIONSET_NOT_ATTACHED = -46,
+ XR_ERROR_ACTIONSETS_ALREADY_ATTACHED = -47,
+ XR_ERROR_LOCALIZED_NAME_DUPLICATED = -48,
+ XR_ERROR_LOCALIZED_NAME_INVALID = -49,
+ XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING = -50,
+ XR_ERROR_RUNTIME_UNAVAILABLE = -51,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR = -1000003000,
+ XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR = -1000003001,
+ XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT = -1000039001,
+ XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT = -1000053000,
+ XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT = -1000055000,
+ XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT = -1000066000,
+ XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT = -1000097000,
+ XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT = -1000097001,
+ XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT = -1000097002,
+ XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT = -1000097003,
+ XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT = -1000097004,
+ XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT = -1000097005,
+ XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB = -1000101000,
+ XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB = -1000108000,
+ XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB = -1000118000,
+ XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB = -1000118001,
+ XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB = -1000118002,
+ XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB = -1000118003,
+ XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB = -1000118004,
+ XR_ERROR_UNKNOWN_PASSTHROUGH_FB = -1000118050,
+ XR_ERROR_RENDER_MODEL_KEY_INVALID_FB = -1000119000,
+ XR_RENDER_MODEL_UNAVAILABLE_FB = 1000119020,
+ XR_ERROR_MARKER_NOT_TRACKED_VARJO = -1000124000,
+ XR_ERROR_MARKER_ID_INVALID_VARJO = -1000124001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT = -1000142001,
+ XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT = -1000142002,
+ XR_RESULT_MAX_ENUM = 0x7FFFFFFF
+} XrResult;
+
+typedef enum XrStructureType {
+ XR_TYPE_UNKNOWN = 0,
+ XR_TYPE_API_LAYER_PROPERTIES = 1,
+ XR_TYPE_EXTENSION_PROPERTIES = 2,
+ XR_TYPE_INSTANCE_CREATE_INFO = 3,
+ XR_TYPE_SYSTEM_GET_INFO = 4,
+ XR_TYPE_SYSTEM_PROPERTIES = 5,
+ XR_TYPE_VIEW_LOCATE_INFO = 6,
+ XR_TYPE_VIEW = 7,
+ XR_TYPE_SESSION_CREATE_INFO = 8,
+ XR_TYPE_SWAPCHAIN_CREATE_INFO = 9,
+ XR_TYPE_SESSION_BEGIN_INFO = 10,
+ XR_TYPE_VIEW_STATE = 11,
+ XR_TYPE_FRAME_END_INFO = 12,
+ XR_TYPE_HAPTIC_VIBRATION = 13,
+ XR_TYPE_EVENT_DATA_BUFFER = 16,
+ XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING = 17,
+ XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED = 18,
+ XR_TYPE_ACTION_STATE_BOOLEAN = 23,
+ XR_TYPE_ACTION_STATE_FLOAT = 24,
+ XR_TYPE_ACTION_STATE_VECTOR2F = 25,
+ XR_TYPE_ACTION_STATE_POSE = 27,
+ XR_TYPE_ACTION_SET_CREATE_INFO = 28,
+ XR_TYPE_ACTION_CREATE_INFO = 29,
+ XR_TYPE_INSTANCE_PROPERTIES = 32,
+ XR_TYPE_FRAME_WAIT_INFO = 33,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION = 35,
+ XR_TYPE_COMPOSITION_LAYER_QUAD = 36,
+ XR_TYPE_REFERENCE_SPACE_CREATE_INFO = 37,
+ XR_TYPE_ACTION_SPACE_CREATE_INFO = 38,
+ XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING = 40,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW = 41,
+ XR_TYPE_SPACE_LOCATION = 42,
+ XR_TYPE_SPACE_VELOCITY = 43,
+ XR_TYPE_FRAME_STATE = 44,
+ XR_TYPE_VIEW_CONFIGURATION_PROPERTIES = 45,
+ XR_TYPE_FRAME_BEGIN_INFO = 46,
+ XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW = 48,
+ XR_TYPE_EVENT_DATA_EVENTS_LOST = 49,
+ XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING = 51,
+ XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED = 52,
+ XR_TYPE_INTERACTION_PROFILE_STATE = 53,
+ XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO = 55,
+ XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO = 56,
+ XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO = 57,
+ XR_TYPE_ACTION_STATE_GET_INFO = 58,
+ XR_TYPE_HAPTIC_ACTION_INFO = 59,
+ XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO = 60,
+ XR_TYPE_ACTIONS_SYNC_INFO = 61,
+ XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO = 62,
+ XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO = 63,
+ XR_TYPE_COMPOSITION_LAYER_CUBE_KHR = 1000006000,
+ XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR = 1000008000,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR = 1000010000,
+ XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR = 1000014000,
+ XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT = 1000015000,
+ XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR = 1000017000,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR = 1000018000,
+ XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT = 1000019000,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT = 1000019001,
+ XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT = 1000019002,
+ XR_TYPE_DEBUG_UTILS_LABEL_EXT = 1000019003,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR = 1000023000,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR = 1000023001,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR = 1000023002,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR = 1000023003,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR = 1000023004,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR = 1000023005,
+ XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR = 1000024001,
+ XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR = 1000024002,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR = 1000024003,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR = 1000025000,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR = 1000025001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR = 1000025002,
+ XR_TYPE_GRAPHICS_BINDING_D3D11_KHR = 1000027000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR = 1000027001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR = 1000027002,
+ XR_TYPE_GRAPHICS_BINDING_D3D12_KHR = 1000028000,
+ XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR = 1000028001,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR = 1000028002,
+ XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT = 1000030000,
+ XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT = 1000030001,
+ XR_TYPE_VISIBILITY_MASK_KHR = 1000031000,
+ XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR = 1000031001,
+ XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX = 1000033000,
+ XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX = 1000033003,
+ XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR = 1000034000,
+ XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT = 1000039000,
+ XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT = 1000039001,
+ XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB = 1000040000,
+ XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB = 1000041001,
+ XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT = 1000046000,
+ XR_TYPE_GRAPHICS_BINDING_EGL_MNDX = 1000048004,
+ XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT = 1000049000,
+ XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT = 1000051000,
+ XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT = 1000051001,
+ XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT = 1000051002,
+ XR_TYPE_HAND_JOINT_LOCATIONS_EXT = 1000051003,
+ XR_TYPE_HAND_JOINT_VELOCITIES_EXT = 1000051004,
+ XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT = 1000052000,
+ XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT = 1000052001,
+ XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT = 1000052002,
+ XR_TYPE_HAND_MESH_MSFT = 1000052003,
+ XR_TYPE_HAND_POSE_TYPE_INFO_MSFT = 1000052004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT = 1000053000,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT = 1000053001,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT = 1000053002,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT = 1000053003,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT = 1000053004,
+ XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT = 1000053005,
+ XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT = 1000055000,
+ XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT = 1000055001,
+ XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT = 1000055002,
+ XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT = 1000055003,
+ XR_TYPE_CONTROLLER_MODEL_STATE_MSFT = 1000055004,
+ XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC = 1000059000,
+ XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT = 1000063000,
+ XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT = 1000066000,
+ XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT = 1000066001,
+ XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB = 1000070000,
+ XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB = 1000072000,
+ XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE = 1000079000,
+ XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT = 1000080000,
+ XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR = 1000089000,
+ XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR = 1000090000,
+ XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR = 1000090001,
+ XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR = 1000090003,
+ XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR = 1000091000,
+ XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT = 1000097000,
+ XR_TYPE_SCENE_CREATE_INFO_MSFT = 1000097001,
+ XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT = 1000097002,
+ XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT = 1000097003,
+ XR_TYPE_SCENE_COMPONENTS_MSFT = 1000097004,
+ XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT = 1000097005,
+ XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT = 1000097006,
+ XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT = 1000097007,
+ XR_TYPE_SCENE_OBJECTS_MSFT = 1000097008,
+ XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT = 1000097009,
+ XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT = 1000097010,
+ XR_TYPE_SCENE_PLANES_MSFT = 1000097011,
+ XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT = 1000097012,
+ XR_TYPE_SCENE_MESHES_MSFT = 1000097013,
+ XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT = 1000097014,
+ XR_TYPE_SCENE_MESH_BUFFERS_MSFT = 1000097015,
+ XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT = 1000097016,
+ XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT = 1000097017,
+ XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT = 1000097018,
+ XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT = 1000098000,
+ XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT = 1000098001,
+ XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB = 1000101000,
+ XR_TYPE_VIVE_TRACKER_PATHS_HTCX = 1000103000,
+ XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX = 1000103001,
+ XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC = 1000104000,
+ XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC = 1000104001,
+ XR_TYPE_FACIAL_EXPRESSIONS_HTC = 1000104002,
+ XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB = 1000108000,
+ XR_TYPE_HAND_TRACKING_MESH_FB = 1000110001,
+ XR_TYPE_HAND_TRACKING_SCALE_FB = 1000110003,
+ XR_TYPE_HAND_TRACKING_AIM_STATE_FB = 1000111001,
+ XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB = 1000112000,
+ XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB = 1000114000,
+ XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB = 1000114001,
+ XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB = 1000114002,
+ XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB = 1000115000,
+ XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB = 1000116009,
+ XR_TYPE_KEYBOARD_TRACKING_QUERY_FB = 1000116004,
+ XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB = 1000116002,
+ XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB = 1000117001,
+ XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB = 1000118000,
+ XR_TYPE_PASSTHROUGH_CREATE_INFO_FB = 1000118001,
+ XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB = 1000118002,
+ XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB = 1000118003,
+ XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB = 1000118004,
+ XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB = 1000118005,
+ XR_TYPE_PASSTHROUGH_STYLE_FB = 1000118020,
+ XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB = 1000118021,
+ XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB = 1000118022,
+ XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB = 1000118030,
+ XR_TYPE_RENDER_MODEL_PATH_INFO_FB = 1000119000,
+ XR_TYPE_RENDER_MODEL_PROPERTIES_FB = 1000119001,
+ XR_TYPE_RENDER_MODEL_BUFFER_FB = 1000119002,
+ XR_TYPE_RENDER_MODEL_LOAD_INFO_FB = 1000119003,
+ XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB = 1000119004,
+ XR_TYPE_BINDING_MODIFICATIONS_KHR = 1000120000,
+ XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO = 1000121000,
+ XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO = 1000121001,
+ XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO = 1000121002,
+ XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO = 1000122000,
+ XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO = 1000124000,
+ XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO = 1000124001,
+ XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO = 1000124002,
+ XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT = 1000142000,
+ XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT = 1000142001,
+ XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB = 1000160000,
+ XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB = 1000161000,
+ XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB = 1000162000,
+ XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB = 1000163000,
+ XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB = 1000171000,
+ XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB = 1000171001,
+ XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE = 1000196000,
+ XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB = 1000203002,
+ XR_TYPE_GRAPHICS_BINDING_VULKAN2_KHR = XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR,
+ XR_TYPE_SWAPCHAIN_IMAGE_VULKAN2_KHR = XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR,
+ XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN2_KHR = XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR,
+ XR_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrStructureType;
+
+typedef enum XrFormFactor {
+ XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY = 1,
+ XR_FORM_FACTOR_HANDHELD_DISPLAY = 2,
+ XR_FORM_FACTOR_MAX_ENUM = 0x7FFFFFFF
+} XrFormFactor;
+
+typedef enum XrViewConfigurationType {
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO = 1,
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO = 2,
+ XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO = 1000037000,
+ XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT = 1000054000,
+ XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrViewConfigurationType;
+
+typedef enum XrEnvironmentBlendMode {
+ XR_ENVIRONMENT_BLEND_MODE_OPAQUE = 1,
+ XR_ENVIRONMENT_BLEND_MODE_ADDITIVE = 2,
+ XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND = 3,
+ XR_ENVIRONMENT_BLEND_MODE_MAX_ENUM = 0x7FFFFFFF
+} XrEnvironmentBlendMode;
+
+typedef enum XrReferenceSpaceType {
+ XR_REFERENCE_SPACE_TYPE_VIEW = 1,
+ XR_REFERENCE_SPACE_TYPE_LOCAL = 2,
+ XR_REFERENCE_SPACE_TYPE_STAGE = 3,
+ XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT = 1000038000,
+ XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO = 1000121000,
+ XR_REFERENCE_SPACE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrReferenceSpaceType;
+
+typedef enum XrActionType {
+ XR_ACTION_TYPE_BOOLEAN_INPUT = 1,
+ XR_ACTION_TYPE_FLOAT_INPUT = 2,
+ XR_ACTION_TYPE_VECTOR2F_INPUT = 3,
+ XR_ACTION_TYPE_POSE_INPUT = 4,
+ XR_ACTION_TYPE_VIBRATION_OUTPUT = 100,
+ XR_ACTION_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrActionType;
+
+typedef enum XrEyeVisibility {
+ XR_EYE_VISIBILITY_BOTH = 0,
+ XR_EYE_VISIBILITY_LEFT = 1,
+ XR_EYE_VISIBILITY_RIGHT = 2,
+ XR_EYE_VISIBILITY_MAX_ENUM = 0x7FFFFFFF
+} XrEyeVisibility;
+
+typedef enum XrSessionState {
+ XR_SESSION_STATE_UNKNOWN = 0,
+ XR_SESSION_STATE_IDLE = 1,
+ XR_SESSION_STATE_READY = 2,
+ XR_SESSION_STATE_SYNCHRONIZED = 3,
+ XR_SESSION_STATE_VISIBLE = 4,
+ XR_SESSION_STATE_FOCUSED = 5,
+ XR_SESSION_STATE_STOPPING = 6,
+ XR_SESSION_STATE_LOSS_PENDING = 7,
+ XR_SESSION_STATE_EXITING = 8,
+ XR_SESSION_STATE_MAX_ENUM = 0x7FFFFFFF
+} XrSessionState;
+
+typedef enum XrObjectType {
+ XR_OBJECT_TYPE_UNKNOWN = 0,
+ XR_OBJECT_TYPE_INSTANCE = 1,
+ XR_OBJECT_TYPE_SESSION = 2,
+ XR_OBJECT_TYPE_SWAPCHAIN = 3,
+ XR_OBJECT_TYPE_SPACE = 4,
+ XR_OBJECT_TYPE_ACTION_SET = 5,
+ XR_OBJECT_TYPE_ACTION = 6,
+ XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT = 1000019000,
+ XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT = 1000039000,
+ XR_OBJECT_TYPE_HAND_TRACKER_EXT = 1000051000,
+ XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT = 1000097000,
+ XR_OBJECT_TYPE_SCENE_MSFT = 1000097001,
+ XR_OBJECT_TYPE_FACIAL_TRACKER_HTC = 1000104000,
+ XR_OBJECT_TYPE_FOVEATION_PROFILE_FB = 1000114000,
+ XR_OBJECT_TYPE_TRIANGLE_MESH_FB = 1000117000,
+ XR_OBJECT_TYPE_PASSTHROUGH_FB = 1000118000,
+ XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB = 1000118002,
+ XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB = 1000118004,
+ XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT = 1000142000,
+ XR_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
+} XrObjectType;
+typedef XrFlags64 XrInstanceCreateFlags;
+
+// Flag bits for XrInstanceCreateFlags
+
+typedef XrFlags64 XrSessionCreateFlags;
+
+// Flag bits for XrSessionCreateFlags
+
+typedef XrFlags64 XrSpaceVelocityFlags;
+
+// Flag bits for XrSpaceVelocityFlags
+static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_LINEAR_VALID_BIT = 0x00000001;
+static const XrSpaceVelocityFlags XR_SPACE_VELOCITY_ANGULAR_VALID_BIT = 0x00000002;
+
+typedef XrFlags64 XrSpaceLocationFlags;
+
+// Flag bits for XrSpaceLocationFlags
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_VALID_BIT = 0x00000001;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_VALID_BIT = 0x00000002;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT = 0x00000004;
+static const XrSpaceLocationFlags XR_SPACE_LOCATION_POSITION_TRACKED_BIT = 0x00000008;
+
+typedef XrFlags64 XrSwapchainCreateFlags;
+
+// Flag bits for XrSwapchainCreateFlags
+static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT = 0x00000001;
+static const XrSwapchainCreateFlags XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT = 0x00000002;
+
+typedef XrFlags64 XrSwapchainUsageFlags;
+
+// Flag bits for XrSwapchainUsageFlags
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT = 0x00000001;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000002;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT = 0x00000004;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT = 0x00000008;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT = 0x00000010;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_SAMPLED_BIT = 0x00000020;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT = 0x00000040;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND = 0x00000080;
+static const XrSwapchainUsageFlags XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR = 0x00000080; // alias of XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND
+
+typedef XrFlags64 XrCompositionLayerFlags;
+
+// Flag bits for XrCompositionLayerFlags
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT = 0x00000001;
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT = 0x00000002;
+static const XrCompositionLayerFlags XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT = 0x00000004;
+
+typedef XrFlags64 XrViewStateFlags;
+
+// Flag bits for XrViewStateFlags
+static const XrViewStateFlags XR_VIEW_STATE_ORIENTATION_VALID_BIT = 0x00000001;
+static const XrViewStateFlags XR_VIEW_STATE_POSITION_VALID_BIT = 0x00000002;
+static const XrViewStateFlags XR_VIEW_STATE_ORIENTATION_TRACKED_BIT = 0x00000004;
+static const XrViewStateFlags XR_VIEW_STATE_POSITION_TRACKED_BIT = 0x00000008;
+
+typedef XrFlags64 XrInputSourceLocalizedNameFlags;
+
+// Flag bits for XrInputSourceLocalizedNameFlags
+static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT = 0x00000001;
+static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT = 0x00000002;
+static const XrInputSourceLocalizedNameFlags XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT = 0x00000004;
+
+typedef void (XRAPI_PTR *PFN_xrVoidFunction)(void);
+typedef struct XrApiLayerProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ char layerName[XR_MAX_API_LAYER_NAME_SIZE];
+ XrVersion specVersion;
+ uint32_t layerVersion;
+ char description[XR_MAX_API_LAYER_DESCRIPTION_SIZE];
+} XrApiLayerProperties;
+
+typedef struct XrExtensionProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ char extensionName[XR_MAX_EXTENSION_NAME_SIZE];
+ uint32_t extensionVersion;
+} XrExtensionProperties;
+
+typedef struct XrApplicationInfo {
+ char applicationName[XR_MAX_APPLICATION_NAME_SIZE];
+ uint32_t applicationVersion;
+ char engineName[XR_MAX_ENGINE_NAME_SIZE];
+ uint32_t engineVersion;
+ XrVersion apiVersion;
+} XrApplicationInfo;
+
+typedef struct XrInstanceCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrInstanceCreateFlags createFlags;
+ XrApplicationInfo applicationInfo;
+ uint32_t enabledApiLayerCount;
+ const char* const* enabledApiLayerNames;
+ uint32_t enabledExtensionCount;
+ const char* const* enabledExtensionNames;
+} XrInstanceCreateInfo;
+
+typedef struct XrInstanceProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion runtimeVersion;
+ char runtimeName[XR_MAX_RUNTIME_NAME_SIZE];
+} XrInstanceProperties;
+
+typedef struct XrEventDataBuffer {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint8_t varying[4000];
+} XrEventDataBuffer;
+
+typedef struct XrSystemGetInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrFormFactor formFactor;
+} XrSystemGetInfo;
+
+typedef struct XrSystemGraphicsProperties {
+ uint32_t maxSwapchainImageHeight;
+ uint32_t maxSwapchainImageWidth;
+ uint32_t maxLayerCount;
+} XrSystemGraphicsProperties;
+
+typedef struct XrSystemTrackingProperties {
+ XrBool32 orientationTracking;
+ XrBool32 positionTracking;
+} XrSystemTrackingProperties;
+
+typedef struct XrSystemProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ uint32_t vendorId;
+ char systemName[XR_MAX_SYSTEM_NAME_SIZE];
+ XrSystemGraphicsProperties graphicsProperties;
+ XrSystemTrackingProperties trackingProperties;
+} XrSystemProperties;
+
+typedef struct XrSessionCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSessionCreateFlags createFlags;
+ XrSystemId systemId;
+} XrSessionCreateInfo;
+
+typedef struct XrVector3f {
+ float x;
+ float y;
+ float z;
+} XrVector3f;
+
+// XrSpaceVelocity extends XrSpaceLocation
+typedef struct XrSpaceVelocity {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSpaceVelocityFlags velocityFlags;
+ XrVector3f linearVelocity;
+ XrVector3f angularVelocity;
+} XrSpaceVelocity;
+
+typedef struct XrQuaternionf {
+ float x;
+ float y;
+ float z;
+ float w;
+} XrQuaternionf;
+
+typedef struct XrPosef {
+ XrQuaternionf orientation;
+ XrVector3f position;
+} XrPosef;
+
+typedef struct XrReferenceSpaceCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrReferenceSpaceType referenceSpaceType;
+ XrPosef poseInReferenceSpace;
+} XrReferenceSpaceCreateInfo;
+
+typedef struct XrExtent2Df {
+ float width;
+ float height;
+} XrExtent2Df;
+
+typedef struct XrActionSpaceCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath subactionPath;
+ XrPosef poseInActionSpace;
+} XrActionSpaceCreateInfo;
+
+typedef struct XrSpaceLocation {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSpaceLocationFlags locationFlags;
+ XrPosef pose;
+} XrSpaceLocation;
+
+typedef struct XrViewConfigurationProperties {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrBool32 fovMutable;
+} XrViewConfigurationProperties;
+
+typedef struct XrViewConfigurationView {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t recommendedImageRectWidth;
+ uint32_t maxImageRectWidth;
+ uint32_t recommendedImageRectHeight;
+ uint32_t maxImageRectHeight;
+ uint32_t recommendedSwapchainSampleCount;
+ uint32_t maxSwapchainSampleCount;
+} XrViewConfigurationView;
+
+typedef struct XrSwapchainCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSwapchainCreateFlags createFlags;
+ XrSwapchainUsageFlags usageFlags;
+ int64_t format;
+ uint32_t sampleCount;
+ uint32_t width;
+ uint32_t height;
+ uint32_t faceCount;
+ uint32_t arraySize;
+ uint32_t mipCount;
+} XrSwapchainCreateInfo;
+
+typedef struct XR_MAY_ALIAS XrSwapchainImageBaseHeader {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrSwapchainImageBaseHeader;
+
+typedef struct XrSwapchainImageAcquireInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSwapchainImageAcquireInfo;
+
+typedef struct XrSwapchainImageWaitInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDuration timeout;
+} XrSwapchainImageWaitInfo;
+
+typedef struct XrSwapchainImageReleaseInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSwapchainImageReleaseInfo;
+
+typedef struct XrSessionBeginInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType primaryViewConfigurationType;
+} XrSessionBeginInfo;
+
+typedef struct XrFrameWaitInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrFrameWaitInfo;
+
+typedef struct XrFrameState {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrTime predictedDisplayTime;
+ XrDuration predictedDisplayPeriod;
+ XrBool32 shouldRender;
+} XrFrameState;
+
+typedef struct XrFrameBeginInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrFrameBeginInfo;
+
+typedef struct XR_MAY_ALIAS XrCompositionLayerBaseHeader {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+} XrCompositionLayerBaseHeader;
+
+typedef struct XrFrameEndInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTime displayTime;
+ XrEnvironmentBlendMode environmentBlendMode;
+ uint32_t layerCount;
+ const XrCompositionLayerBaseHeader* const* layers;
+} XrFrameEndInfo;
+
+typedef struct XrViewLocateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrTime displayTime;
+ XrSpace space;
+} XrViewLocateInfo;
+
+typedef struct XrViewState {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrViewStateFlags viewStateFlags;
+} XrViewState;
+
+typedef struct XrFovf {
+ float angleLeft;
+ float angleRight;
+ float angleUp;
+ float angleDown;
+} XrFovf;
+
+typedef struct XrView {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPosef pose;
+ XrFovf fov;
+} XrView;
+
+typedef struct XrActionSetCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ char actionSetName[XR_MAX_ACTION_SET_NAME_SIZE];
+ char localizedActionSetName[XR_MAX_LOCALIZED_ACTION_SET_NAME_SIZE];
+ uint32_t priority;
+} XrActionSetCreateInfo;
+
+typedef struct XrActionCreateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ char actionName[XR_MAX_ACTION_NAME_SIZE];
+ XrActionType actionType;
+ uint32_t countSubactionPaths;
+ const XrPath* subactionPaths;
+ char localizedActionName[XR_MAX_LOCALIZED_ACTION_NAME_SIZE];
+} XrActionCreateInfo;
+
+typedef struct XrActionSuggestedBinding {
+ XrAction action;
+ XrPath binding;
+} XrActionSuggestedBinding;
+
+typedef struct XrInteractionProfileSuggestedBinding {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPath interactionProfile;
+ uint32_t countSuggestedBindings;
+ const XrActionSuggestedBinding* suggestedBindings;
+} XrInteractionProfileSuggestedBinding;
+
+typedef struct XrSessionActionSetsAttachInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t countActionSets;
+ const XrActionSet* actionSets;
+} XrSessionActionSetsAttachInfo;
+
+typedef struct XrInteractionProfileState {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPath interactionProfile;
+} XrInteractionProfileState;
+
+typedef struct XrActionStateGetInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath subactionPath;
+} XrActionStateGetInfo;
+
+typedef struct XrActionStateBoolean {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateBoolean;
+
+typedef struct XrActionStateFloat {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ float currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateFloat;
+
+typedef struct XrVector2f {
+ float x;
+ float y;
+} XrVector2f;
+
+typedef struct XrActionStateVector2f {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVector2f currentState;
+ XrBool32 changedSinceLastSync;
+ XrTime lastChangeTime;
+ XrBool32 isActive;
+} XrActionStateVector2f;
+
+typedef struct XrActionStatePose {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+} XrActionStatePose;
+
+typedef struct XrActiveActionSet {
+ XrActionSet actionSet;
+ XrPath subactionPath;
+} XrActiveActionSet;
+
+typedef struct XrActionsSyncInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t countActiveActionSets;
+ const XrActiveActionSet* activeActionSets;
+} XrActionsSyncInfo;
+
+typedef struct XrBoundSourcesForActionEnumerateInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+} XrBoundSourcesForActionEnumerateInfo;
+
+typedef struct XrInputSourceLocalizedNameGetInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPath sourcePath;
+ XrInputSourceLocalizedNameFlags whichComponents;
+} XrInputSourceLocalizedNameGetInfo;
+
+typedef struct XrHapticActionInfo {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath subactionPath;
+} XrHapticActionInfo;
+
+typedef struct XR_MAY_ALIAS XrHapticBaseHeader {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrHapticBaseHeader;
+
+typedef struct XR_MAY_ALIAS XrBaseInStructure {
+ XrStructureType type;
+ const struct XrBaseInStructure* next;
+} XrBaseInStructure;
+
+typedef struct XR_MAY_ALIAS XrBaseOutStructure {
+ XrStructureType type;
+ struct XrBaseOutStructure* next;
+} XrBaseOutStructure;
+
+typedef struct XrOffset2Di {
+ int32_t x;
+ int32_t y;
+} XrOffset2Di;
+
+typedef struct XrExtent2Di {
+ int32_t width;
+ int32_t height;
+} XrExtent2Di;
+
+typedef struct XrRect2Di {
+ XrOffset2Di offset;
+ XrExtent2Di extent;
+} XrRect2Di;
+
+typedef struct XrSwapchainSubImage {
+ XrSwapchain swapchain;
+ XrRect2Di imageRect;
+ uint32_t imageArrayIndex;
+} XrSwapchainSubImage;
+
+typedef struct XrCompositionLayerProjectionView {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPosef pose;
+ XrFovf fov;
+ XrSwapchainSubImage subImage;
+} XrCompositionLayerProjectionView;
+
+typedef struct XrCompositionLayerProjection {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ uint32_t viewCount;
+ const XrCompositionLayerProjectionView* views;
+} XrCompositionLayerProjection;
+
+typedef struct XrCompositionLayerQuad {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ XrExtent2Df size;
+} XrCompositionLayerQuad;
+
+typedef struct XR_MAY_ALIAS XrEventDataBaseHeader {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrEventDataBaseHeader;
+
+typedef struct XrEventDataEventsLost {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t lostEventCount;
+} XrEventDataEventsLost;
+
+typedef struct XrEventDataInstanceLossPending {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTime lossTime;
+} XrEventDataInstanceLossPending;
+
+typedef struct XrEventDataSessionStateChanged {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+ XrSessionState state;
+ XrTime time;
+} XrEventDataSessionStateChanged;
+
+typedef struct XrEventDataReferenceSpaceChangePending {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+ XrReferenceSpaceType referenceSpaceType;
+ XrTime changeTime;
+ XrBool32 poseValid;
+ XrPosef poseInPreviousSpace;
+} XrEventDataReferenceSpaceChangePending;
+
+typedef struct XrEventDataInteractionProfileChanged {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+} XrEventDataInteractionProfileChanged;
+
+typedef struct XrHapticVibration {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDuration duration;
+ float frequency;
+ float amplitude;
+} XrHapticVibration;
+
+typedef struct XrOffset2Df {
+ float x;
+ float y;
+} XrOffset2Df;
+
+typedef struct XrRect2Df {
+ XrOffset2Df offset;
+ XrExtent2Df extent;
+} XrRect2Df;
+
+typedef struct XrVector4f {
+ float x;
+ float y;
+ float z;
+ float w;
+} XrVector4f;
+
+typedef struct XrColor4f {
+ float r;
+ float g;
+ float b;
+ float a;
+} XrColor4f;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetInstanceProcAddr)(XrInstance instance, const char* name, PFN_xrVoidFunction* function);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateApiLayerProperties)(uint32_t propertyCapacityInput, uint32_t* propertyCountOutput, XrApiLayerProperties* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateInstanceExtensionProperties)(const char* layerName, uint32_t propertyCapacityInput, uint32_t* propertyCountOutput, XrExtensionProperties* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateInstance)(const XrInstanceCreateInfo* createInfo, XrInstance* instance);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyInstance)(XrInstance instance);
+typedef XrResult (XRAPI_PTR *PFN_xrGetInstanceProperties)(XrInstance instance, XrInstanceProperties* instanceProperties);
+typedef XrResult (XRAPI_PTR *PFN_xrPollEvent)(XrInstance instance, XrEventDataBuffer* eventData);
+typedef XrResult (XRAPI_PTR *PFN_xrResultToString)(XrInstance instance, XrResult value, char buffer[XR_MAX_RESULT_STRING_SIZE]);
+typedef XrResult (XRAPI_PTR *PFN_xrStructureTypeToString)(XrInstance instance, XrStructureType value, char buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSystem)(XrInstance instance, const XrSystemGetInfo* getInfo, XrSystemId* systemId);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSystemProperties)(XrInstance instance, XrSystemId systemId, XrSystemProperties* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateEnvironmentBlendModes)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t environmentBlendModeCapacityInput, uint32_t* environmentBlendModeCountOutput, XrEnvironmentBlendMode* environmentBlendModes);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSession)(XrInstance instance, const XrSessionCreateInfo* createInfo, XrSession* session);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySession)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReferenceSpaces)(XrSession session, uint32_t spaceCapacityInput, uint32_t* spaceCountOutput, XrReferenceSpaceType* spaces);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateReferenceSpace)(XrSession session, const XrReferenceSpaceCreateInfo* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrGetReferenceSpaceBoundsRect)(XrSession session, XrReferenceSpaceType referenceSpaceType, XrExtent2Df* bounds);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateActionSpace)(XrSession session, const XrActionSpaceCreateInfo* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateSpace)(XrSpace space, XrSpace baseSpace, XrTime time, XrSpaceLocation* location);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpace)(XrSpace space);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViewConfigurations)(XrInstance instance, XrSystemId systemId, uint32_t viewConfigurationTypeCapacityInput, uint32_t* viewConfigurationTypeCountOutput, XrViewConfigurationType* viewConfigurationTypes);
+typedef XrResult (XRAPI_PTR *PFN_xrGetViewConfigurationProperties)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, XrViewConfigurationProperties* configurationProperties);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViewConfigurationViews)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t viewCapacityInput, uint32_t* viewCountOutput, XrViewConfigurationView* views);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSwapchainFormats)(XrSession session, uint32_t formatCapacityInput, uint32_t* formatCountOutput, int64_t* formats);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchain)(XrSession session, const XrSwapchainCreateInfo* createInfo, XrSwapchain* swapchain);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySwapchain)(XrSwapchain swapchain);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSwapchainImages)(XrSwapchain swapchain, uint32_t imageCapacityInput, uint32_t* imageCountOutput, XrSwapchainImageBaseHeader* images);
+typedef XrResult (XRAPI_PTR *PFN_xrAcquireSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageAcquireInfo* acquireInfo, uint32_t* index);
+typedef XrResult (XRAPI_PTR *PFN_xrWaitSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageWaitInfo* waitInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrReleaseSwapchainImage)(XrSwapchain swapchain, const XrSwapchainImageReleaseInfo* releaseInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrBeginSession)(XrSession session, const XrSessionBeginInfo* beginInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEndSession)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrRequestExitSession)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrWaitFrame)(XrSession session, const XrFrameWaitInfo* frameWaitInfo, XrFrameState* frameState);
+typedef XrResult (XRAPI_PTR *PFN_xrBeginFrame)(XrSession session, const XrFrameBeginInfo* frameBeginInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEndFrame)(XrSession session, const XrFrameEndInfo* frameEndInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateViews)(XrSession session, const XrViewLocateInfo* viewLocateInfo, XrViewState* viewState, uint32_t viewCapacityInput, uint32_t* viewCountOutput, XrView* views);
+typedef XrResult (XRAPI_PTR *PFN_xrStringToPath)(XrInstance instance, const char* pathString, XrPath* path);
+typedef XrResult (XRAPI_PTR *PFN_xrPathToString)(XrInstance instance, XrPath path, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateActionSet)(XrInstance instance, const XrActionSetCreateInfo* createInfo, XrActionSet* actionSet);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyActionSet)(XrActionSet actionSet);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateAction)(XrActionSet actionSet, const XrActionCreateInfo* createInfo, XrAction* action);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyAction)(XrAction action);
+typedef XrResult (XRAPI_PTR *PFN_xrSuggestInteractionProfileBindings)(XrInstance instance, const XrInteractionProfileSuggestedBinding* suggestedBindings);
+typedef XrResult (XRAPI_PTR *PFN_xrAttachSessionActionSets)(XrSession session, const XrSessionActionSetsAttachInfo* attachInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrGetCurrentInteractionProfile)(XrSession session, XrPath topLevelUserPath, XrInteractionProfileState* interactionProfile);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateBoolean)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateBoolean* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateFloat)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateFloat* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStateVector2f)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStateVector2f* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetActionStatePose)(XrSession session, const XrActionStateGetInfo* getInfo, XrActionStatePose* state);
+typedef XrResult (XRAPI_PTR *PFN_xrSyncActions)(XrSession session, const XrActionsSyncInfo* syncInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateBoundSourcesForAction)(XrSession session, const XrBoundSourcesForActionEnumerateInfo* enumerateInfo, uint32_t sourceCapacityInput, uint32_t* sourceCountOutput, XrPath* sources);
+typedef XrResult (XRAPI_PTR *PFN_xrGetInputSourceLocalizedName)(XrSession session, const XrInputSourceLocalizedNameGetInfo* getInfo, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrApplyHapticFeedback)(XrSession session, const XrHapticActionInfo* hapticActionInfo, const XrHapticBaseHeader* hapticFeedback);
+typedef XrResult (XRAPI_PTR *PFN_xrStopHapticFeedback)(XrSession session, const XrHapticActionInfo* hapticActionInfo);
+
+#ifndef XR_NO_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProcAddr(
+ XrInstance instance,
+ const char* name,
+ PFN_xrVoidFunction* function);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateApiLayerProperties(
+ uint32_t propertyCapacityInput,
+ uint32_t* propertyCountOutput,
+ XrApiLayerProperties* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateInstanceExtensionProperties(
+ const char* layerName,
+ uint32_t propertyCapacityInput,
+ uint32_t* propertyCountOutput,
+ XrExtensionProperties* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateInstance(
+ const XrInstanceCreateInfo* createInfo,
+ XrInstance* instance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyInstance(
+ XrInstance instance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties(
+ XrInstance instance,
+ XrInstanceProperties* instanceProperties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent(
+ XrInstance instance,
+ XrEventDataBuffer* eventData);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrResultToString(
+ XrInstance instance,
+ XrResult value,
+ char buffer[XR_MAX_RESULT_STRING_SIZE]);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString(
+ XrInstance instance,
+ XrStructureType value,
+ char buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem(
+ XrInstance instance,
+ const XrSystemGetInfo* getInfo,
+ XrSystemId* systemId);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrSystemProperties* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t environmentBlendModeCapacityInput,
+ uint32_t* environmentBlendModeCountOutput,
+ XrEnvironmentBlendMode* environmentBlendModes);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession(
+ XrInstance instance,
+ const XrSessionCreateInfo* createInfo,
+ XrSession* session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces(
+ XrSession session,
+ uint32_t spaceCapacityInput,
+ uint32_t* spaceCountOutput,
+ XrReferenceSpaceType* spaces);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace(
+ XrSession session,
+ const XrReferenceSpaceCreateInfo* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect(
+ XrSession session,
+ XrReferenceSpaceType referenceSpaceType,
+ XrExtent2Df* bounds);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace(
+ XrSession session,
+ const XrActionSpaceCreateInfo* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace(
+ XrSpace space,
+ XrSpace baseSpace,
+ XrTime time,
+ XrSpaceLocation* location);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace(
+ XrSpace space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t viewConfigurationTypeCapacityInput,
+ uint32_t* viewConfigurationTypeCountOutput,
+ XrViewConfigurationType* viewConfigurationTypes);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ XrViewConfigurationProperties* configurationProperties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrViewConfigurationView* views);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats(
+ XrSession session,
+ uint32_t formatCapacityInput,
+ uint32_t* formatCountOutput,
+ int64_t* formats);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain(
+ XrSession session,
+ const XrSwapchainCreateInfo* createInfo,
+ XrSwapchain* swapchain);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain(
+ XrSwapchain swapchain);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages(
+ XrSwapchain swapchain,
+ uint32_t imageCapacityInput,
+ uint32_t* imageCountOutput,
+ XrSwapchainImageBaseHeader* images);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageAcquireInfo* acquireInfo,
+ uint32_t* index);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageWaitInfo* waitInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageReleaseInfo* releaseInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession(
+ XrSession session,
+ const XrSessionBeginInfo* beginInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEndSession(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame(
+ XrSession session,
+ const XrFrameWaitInfo* frameWaitInfo,
+ XrFrameState* frameState);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame(
+ XrSession session,
+ const XrFrameBeginInfo* frameBeginInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame(
+ XrSession session,
+ const XrFrameEndInfo* frameEndInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews(
+ XrSession session,
+ const XrViewLocateInfo* viewLocateInfo,
+ XrViewState* viewState,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrView* views);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath(
+ XrInstance instance,
+ const char* pathString,
+ XrPath* path);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPathToString(
+ XrInstance instance,
+ XrPath path,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet(
+ XrInstance instance,
+ const XrActionSetCreateInfo* createInfo,
+ XrActionSet* actionSet);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet(
+ XrActionSet actionSet);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction(
+ XrActionSet actionSet,
+ const XrActionCreateInfo* createInfo,
+ XrAction* action);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction(
+ XrAction action);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings(
+ XrInstance instance,
+ const XrInteractionProfileSuggestedBinding* suggestedBindings);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrInteractionProfileState* interactionProfile);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions(
+ XrSession session,
+ const XrActionsSyncInfo* syncInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
+ uint32_t sourceCapacityInput,
+ uint32_t* sourceCountOutput,
+ XrPath* sources);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName(
+ XrSession session,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo);
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_KHR_composition_layer_cube 1
+#define XR_KHR_composition_layer_cube_SPEC_VERSION 8
+#define XR_KHR_COMPOSITION_LAYER_CUBE_EXTENSION_NAME "XR_KHR_composition_layer_cube"
+typedef struct XrCompositionLayerCubeKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchain swapchain;
+ uint32_t imageArrayIndex;
+ XrQuaternionf orientation;
+} XrCompositionLayerCubeKHR;
+
+
+
+#define XR_KHR_composition_layer_depth 1
+#define XR_KHR_composition_layer_depth_SPEC_VERSION 5
+#define XR_KHR_COMPOSITION_LAYER_DEPTH_EXTENSION_NAME "XR_KHR_composition_layer_depth"
+// XrCompositionLayerDepthInfoKHR extends XrCompositionLayerProjectionView
+typedef struct XrCompositionLayerDepthInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSwapchainSubImage subImage;
+ float minDepth;
+ float maxDepth;
+ float nearZ;
+ float farZ;
+} XrCompositionLayerDepthInfoKHR;
+
+
+
+#define XR_KHR_composition_layer_cylinder 1
+#define XR_KHR_composition_layer_cylinder_SPEC_VERSION 4
+#define XR_KHR_COMPOSITION_LAYER_CYLINDER_EXTENSION_NAME "XR_KHR_composition_layer_cylinder"
+typedef struct XrCompositionLayerCylinderKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ float centralAngle;
+ float aspectRatio;
+} XrCompositionLayerCylinderKHR;
+
+
+
+#define XR_KHR_composition_layer_equirect 1
+#define XR_KHR_composition_layer_equirect_SPEC_VERSION 3
+#define XR_KHR_COMPOSITION_LAYER_EQUIRECT_EXTENSION_NAME "XR_KHR_composition_layer_equirect"
+typedef struct XrCompositionLayerEquirectKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ XrVector2f scale;
+ XrVector2f bias;
+} XrCompositionLayerEquirectKHR;
+
+
+
+#define XR_KHR_visibility_mask 1
+#define XR_KHR_visibility_mask_SPEC_VERSION 2
+#define XR_KHR_VISIBILITY_MASK_EXTENSION_NAME "XR_KHR_visibility_mask"
+
+typedef enum XrVisibilityMaskTypeKHR {
+ XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR = 1,
+ XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR = 2,
+ XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR = 3,
+ XR_VISIBILITY_MASK_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
+} XrVisibilityMaskTypeKHR;
+typedef struct XrVisibilityMaskKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector2f* vertices;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
+} XrVisibilityMaskKHR;
+
+typedef struct XrEventDataVisibilityMaskChangedKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSession session;
+ XrViewConfigurationType viewConfigurationType;
+ uint32_t viewIndex;
+} XrEventDataVisibilityMaskChangedKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetVisibilityMaskKHR)(XrSession session, XrViewConfigurationType viewConfigurationType, uint32_t viewIndex, XrVisibilityMaskTypeKHR visibilityMaskType, XrVisibilityMaskKHR* visibilityMask);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVisibilityMaskKHR(
+ XrSession session,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewIndex,
+ XrVisibilityMaskTypeKHR visibilityMaskType,
+ XrVisibilityMaskKHR* visibilityMask);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_KHR_composition_layer_color_scale_bias 1
+#define XR_KHR_composition_layer_color_scale_bias_SPEC_VERSION 5
+#define XR_KHR_COMPOSITION_LAYER_COLOR_SCALE_BIAS_EXTENSION_NAME "XR_KHR_composition_layer_color_scale_bias"
+// XrCompositionLayerColorScaleBiasKHR extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerColorScaleBiasKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrColor4f colorScale;
+ XrColor4f colorBias;
+} XrCompositionLayerColorScaleBiasKHR;
+
+
+
+#define XR_KHR_loader_init 1
+#define XR_KHR_loader_init_SPEC_VERSION 1
+#define XR_KHR_LOADER_INIT_EXTENSION_NAME "XR_KHR_loader_init"
+typedef struct XR_MAY_ALIAS XrLoaderInitInfoBaseHeaderKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrLoaderInitInfoBaseHeaderKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrInitializeLoaderKHR)(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrInitializeLoaderKHR(
+ const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_KHR_composition_layer_equirect2 1
+#define XR_KHR_composition_layer_equirect2_SPEC_VERSION 1
+#define XR_KHR_COMPOSITION_LAYER_EQUIRECT2_EXTENSION_NAME "XR_KHR_composition_layer_equirect2"
+typedef struct XrCompositionLayerEquirect2KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags layerFlags;
+ XrSpace space;
+ XrEyeVisibility eyeVisibility;
+ XrSwapchainSubImage subImage;
+ XrPosef pose;
+ float radius;
+ float centralHorizontalAngle;
+ float upperVerticalAngle;
+ float lowerVerticalAngle;
+} XrCompositionLayerEquirect2KHR;
+
+
+
+#define XR_KHR_binding_modification 1
+#define XR_KHR_binding_modification_SPEC_VERSION 1
+#define XR_KHR_BINDING_MODIFICATION_EXTENSION_NAME "XR_KHR_binding_modification"
+typedef struct XR_MAY_ALIAS XrBindingModificationBaseHeaderKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrBindingModificationBaseHeaderKHR;
+
+// XrBindingModificationsKHR extends XrInteractionProfileSuggestedBinding
+typedef struct XrBindingModificationsKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t bindingModificationCount;
+ const XrBindingModificationBaseHeaderKHR* const* bindingModifications;
+} XrBindingModificationsKHR;
+
+
+
+#define XR_KHR_swapchain_usage_input_attachment_bit 1
+#define XR_KHR_swapchain_usage_input_attachment_bit_SPEC_VERSION 3
+#define XR_KHR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_KHR_swapchain_usage_input_attachment_bit"
+
+
+#define XR_EXT_performance_settings 1
+#define XR_EXT_performance_settings_SPEC_VERSION 3
+#define XR_EXT_PERFORMANCE_SETTINGS_EXTENSION_NAME "XR_EXT_performance_settings"
+
+typedef enum XrPerfSettingsDomainEXT {
+ XR_PERF_SETTINGS_DOMAIN_CPU_EXT = 1,
+ XR_PERF_SETTINGS_DOMAIN_GPU_EXT = 2,
+ XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsDomainEXT;
+
+typedef enum XrPerfSettingsSubDomainEXT {
+ XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT = 1,
+ XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT = 2,
+ XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT = 3,
+ XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsSubDomainEXT;
+
+typedef enum XrPerfSettingsLevelEXT {
+ XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT = 0,
+ XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT = 25,
+ XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT = 50,
+ XR_PERF_SETTINGS_LEVEL_BOOST_EXT = 75,
+ XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsLevelEXT;
+
+typedef enum XrPerfSettingsNotificationLevelEXT {
+ XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT = 0,
+ XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT = 25,
+ XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT = 75,
+ XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrPerfSettingsNotificationLevelEXT;
+typedef struct XrEventDataPerfSettingsEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPerfSettingsDomainEXT domain;
+ XrPerfSettingsSubDomainEXT subDomain;
+ XrPerfSettingsNotificationLevelEXT fromLevel;
+ XrPerfSettingsNotificationLevelEXT toLevel;
+} XrEventDataPerfSettingsEXT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrPerfSettingsSetPerformanceLevelEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsLevelEXT level);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrPerfSettingsSetPerformanceLevelEXT(
+ XrSession session,
+ XrPerfSettingsDomainEXT domain,
+ XrPerfSettingsLevelEXT level);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_thermal_query 1
+#define XR_EXT_thermal_query_SPEC_VERSION 2
+#define XR_EXT_THERMAL_QUERY_EXTENSION_NAME "XR_EXT_thermal_query"
+typedef XrResult (XRAPI_PTR *PFN_xrThermalGetTemperatureTrendEXT)(XrSession session, XrPerfSettingsDomainEXT domain, XrPerfSettingsNotificationLevelEXT* notificationLevel, float* tempHeadroom, float* tempSlope);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrThermalGetTemperatureTrendEXT(
+ XrSession session,
+ XrPerfSettingsDomainEXT domain,
+ XrPerfSettingsNotificationLevelEXT* notificationLevel,
+ float* tempHeadroom,
+ float* tempSlope);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_debug_utils 1
+XR_DEFINE_HANDLE(XrDebugUtilsMessengerEXT)
+#define XR_EXT_debug_utils_SPEC_VERSION 4
+#define XR_EXT_DEBUG_UTILS_EXTENSION_NAME "XR_EXT_debug_utils"
+typedef XrFlags64 XrDebugUtilsMessageSeverityFlagsEXT;
+
+// Flag bits for XrDebugUtilsMessageSeverityFlagsEXT
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT = 0x00000001;
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT = 0x00000010;
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT = 0x00000100;
+static const XrDebugUtilsMessageSeverityFlagsEXT XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT = 0x00001000;
+
+typedef XrFlags64 XrDebugUtilsMessageTypeFlagsEXT;
+
+// Flag bits for XrDebugUtilsMessageTypeFlagsEXT
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT = 0x00000001;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT = 0x00000002;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT = 0x00000004;
+static const XrDebugUtilsMessageTypeFlagsEXT XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT = 0x00000008;
+
+typedef struct XrDebugUtilsObjectNameInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrObjectType objectType;
+ uint64_t objectHandle;
+ const char* objectName;
+} XrDebugUtilsObjectNameInfoEXT;
+
+typedef struct XrDebugUtilsLabelEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ const char* labelName;
+} XrDebugUtilsLabelEXT;
+
+typedef struct XrDebugUtilsMessengerCallbackDataEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ const char* messageId;
+ const char* functionName;
+ const char* message;
+ uint32_t objectCount;
+ XrDebugUtilsObjectNameInfoEXT* objects;
+ uint32_t sessionLabelCount;
+ XrDebugUtilsLabelEXT* sessionLabels;
+} XrDebugUtilsMessengerCallbackDataEXT;
+
+typedef XrBool32 (XRAPI_PTR *PFN_xrDebugUtilsMessengerCallbackEXT)(
+ XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
+ XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT* callbackData,
+ void* userData);
+
+
+// XrDebugUtilsMessengerCreateInfoEXT extends XrInstanceCreateInfo
+typedef struct XrDebugUtilsMessengerCreateInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDebugUtilsMessageSeverityFlagsEXT messageSeverities;
+ XrDebugUtilsMessageTypeFlagsEXT messageTypes;
+ PFN_xrDebugUtilsMessengerCallbackEXT userCallback;
+ void* XR_MAY_ALIAS userData;
+} XrDebugUtilsMessengerCreateInfoEXT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSetDebugUtilsObjectNameEXT)(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT* nameInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateDebugUtilsMessengerEXT)(XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT* createInfo, XrDebugUtilsMessengerEXT* messenger);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyDebugUtilsMessengerEXT)(XrDebugUtilsMessengerEXT messenger);
+typedef XrResult (XRAPI_PTR *PFN_xrSubmitDebugUtilsMessageEXT)(XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes, const XrDebugUtilsMessengerCallbackDataEXT* callbackData);
+typedef XrResult (XRAPI_PTR *PFN_xrSessionBeginDebugUtilsLabelRegionEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrSessionEndDebugUtilsLabelRegionEXT)(XrSession session);
+typedef XrResult (XRAPI_PTR *PFN_xrSessionInsertDebugUtilsLabelEXT)(XrSession session, const XrDebugUtilsLabelEXT* labelInfo);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetDebugUtilsObjectNameEXT(
+ XrInstance instance,
+ const XrDebugUtilsObjectNameInfoEXT* nameInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateDebugUtilsMessengerEXT(
+ XrInstance instance,
+ const XrDebugUtilsMessengerCreateInfoEXT* createInfo,
+ XrDebugUtilsMessengerEXT* messenger);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyDebugUtilsMessengerEXT(
+ XrDebugUtilsMessengerEXT messenger);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSubmitDebugUtilsMessageEXT(
+ XrInstance instance,
+ XrDebugUtilsMessageSeverityFlagsEXT messageSeverity,
+ XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT* callbackData);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSessionBeginDebugUtilsLabelRegionEXT(
+ XrSession session,
+ const XrDebugUtilsLabelEXT* labelInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSessionEndDebugUtilsLabelRegionEXT(
+ XrSession session);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSessionInsertDebugUtilsLabelEXT(
+ XrSession session,
+ const XrDebugUtilsLabelEXT* labelInfo);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_eye_gaze_interaction 1
+#define XR_EXT_eye_gaze_interaction_SPEC_VERSION 1
+#define XR_EXT_EYE_GAZE_INTERACTION_EXTENSION_NAME "XR_EXT_eye_gaze_interaction"
+// XrSystemEyeGazeInteractionPropertiesEXT extends XrSystemProperties
+typedef struct XrSystemEyeGazeInteractionPropertiesEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsEyeGazeInteraction;
+} XrSystemEyeGazeInteractionPropertiesEXT;
+
+// XrEyeGazeSampleTimeEXT extends XrSpaceLocation
+typedef struct XrEyeGazeSampleTimeEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrTime time;
+} XrEyeGazeSampleTimeEXT;
+
+
+
+#define XR_EXTX_overlay 1
+#define XR_EXTX_overlay_SPEC_VERSION 5
+#define XR_EXTX_OVERLAY_EXTENSION_NAME "XR_EXTX_overlay"
+typedef XrFlags64 XrOverlaySessionCreateFlagsEXTX;
+
+// Flag bits for XrOverlaySessionCreateFlagsEXTX
+
+typedef XrFlags64 XrOverlayMainSessionFlagsEXTX;
+
+// Flag bits for XrOverlayMainSessionFlagsEXTX
+static const XrOverlayMainSessionFlagsEXTX XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX = 0x00000001;
+
+// XrSessionCreateInfoOverlayEXTX extends XrSessionCreateInfo
+typedef struct XrSessionCreateInfoOverlayEXTX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrOverlaySessionCreateFlagsEXTX createFlags;
+ uint32_t sessionLayersPlacement;
+} XrSessionCreateInfoOverlayEXTX;
+
+typedef struct XrEventDataMainSessionVisibilityChangedEXTX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 visible;
+ XrOverlayMainSessionFlagsEXTX flags;
+} XrEventDataMainSessionVisibilityChangedEXTX;
+
+
+
+#define XR_VARJO_quad_views 1
+#define XR_VARJO_quad_views_SPEC_VERSION 1
+#define XR_VARJO_QUAD_VIEWS_EXTENSION_NAME "XR_VARJO_quad_views"
+
+
+#define XR_MSFT_unbounded_reference_space 1
+#define XR_MSFT_unbounded_reference_space_SPEC_VERSION 1
+#define XR_MSFT_UNBOUNDED_REFERENCE_SPACE_EXTENSION_NAME "XR_MSFT_unbounded_reference_space"
+
+
+#define XR_MSFT_spatial_anchor 1
+XR_DEFINE_HANDLE(XrSpatialAnchorMSFT)
+#define XR_MSFT_spatial_anchor_SPEC_VERSION 2
+#define XR_MSFT_SPATIAL_ANCHOR_EXTENSION_NAME "XR_MSFT_spatial_anchor"
+typedef struct XrSpatialAnchorCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace space;
+ XrPosef pose;
+ XrTime time;
+} XrSpatialAnchorCreateInfoMSFT;
+
+typedef struct XrSpatialAnchorSpaceCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialAnchorMSFT anchor;
+ XrPosef poseInAnchorSpace;
+} XrSpatialAnchorSpaceCreateInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorMSFT)(XrSession session, const XrSpatialAnchorCreateInfoMSFT* createInfo, XrSpatialAnchorMSFT* anchor);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorSpaceMSFT)(XrSession session, const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorMSFT)(XrSpatialAnchorMSFT anchor);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorMSFT(
+ XrSession session,
+ const XrSpatialAnchorCreateInfoMSFT* createInfo,
+ XrSpatialAnchorMSFT* anchor);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorSpaceMSFT(
+ XrSession session,
+ const XrSpatialAnchorSpaceCreateInfoMSFT* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorMSFT(
+ XrSpatialAnchorMSFT anchor);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_composition_layer_image_layout 1
+#define XR_FB_composition_layer_image_layout_SPEC_VERSION 1
+#define XR_FB_COMPOSITION_LAYER_IMAGE_LAYOUT_EXTENSION_NAME "XR_FB_composition_layer_image_layout"
+typedef XrFlags64 XrCompositionLayerImageLayoutFlagsFB;
+
+// Flag bits for XrCompositionLayerImageLayoutFlagsFB
+static const XrCompositionLayerImageLayoutFlagsFB XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB = 0x00000001;
+
+// XrCompositionLayerImageLayoutFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerImageLayoutFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrCompositionLayerImageLayoutFlagsFB flags;
+} XrCompositionLayerImageLayoutFB;
+
+
+
+#define XR_FB_composition_layer_alpha_blend 1
+#define XR_FB_composition_layer_alpha_blend_SPEC_VERSION 2
+#define XR_FB_COMPOSITION_LAYER_ALPHA_BLEND_EXTENSION_NAME "XR_FB_composition_layer_alpha_blend"
+
+typedef enum XrBlendFactorFB {
+ XR_BLEND_FACTOR_ZERO_FB = 0,
+ XR_BLEND_FACTOR_ONE_FB = 1,
+ XR_BLEND_FACTOR_SRC_ALPHA_FB = 2,
+ XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB = 3,
+ XR_BLEND_FACTOR_DST_ALPHA_FB = 4,
+ XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB = 5,
+ XR_BLEND_FACTOR_MAX_ENUM_FB = 0x7FFFFFFF
+} XrBlendFactorFB;
+// XrCompositionLayerAlphaBlendFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerAlphaBlendFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBlendFactorFB srcFactorColor;
+ XrBlendFactorFB dstFactorColor;
+ XrBlendFactorFB srcFactorAlpha;
+ XrBlendFactorFB dstFactorAlpha;
+} XrCompositionLayerAlphaBlendFB;
+
+
+
+#define XR_MND_headless 1
+#define XR_MND_headless_SPEC_VERSION 2
+#define XR_MND_HEADLESS_EXTENSION_NAME "XR_MND_headless"
+
+
+#define XR_OCULUS_android_session_state_enable 1
+#define XR_OCULUS_android_session_state_enable_SPEC_VERSION 1
+#define XR_OCULUS_ANDROID_SESSION_STATE_ENABLE_EXTENSION_NAME "XR_OCULUS_android_session_state_enable"
+
+
+#define XR_EXT_view_configuration_depth_range 1
+#define XR_EXT_view_configuration_depth_range_SPEC_VERSION 1
+#define XR_EXT_VIEW_CONFIGURATION_DEPTH_RANGE_EXTENSION_NAME "XR_EXT_view_configuration_depth_range"
+// XrViewConfigurationDepthRangeEXT extends XrViewConfigurationView
+typedef struct XrViewConfigurationDepthRangeEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ float recommendedNearZ;
+ float minNearZ;
+ float recommendedFarZ;
+ float maxFarZ;
+} XrViewConfigurationDepthRangeEXT;
+
+
+
+#define XR_EXT_conformance_automation 1
+#define XR_EXT_conformance_automation_SPEC_VERSION 3
+#define XR_EXT_CONFORMANCE_AUTOMATION_EXTENSION_NAME "XR_EXT_conformance_automation"
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceActiveEXT)(XrSession session, XrPath interactionProfile, XrPath topLevelPath, XrBool32 isActive);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateBoolEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrBool32 state);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateFloatEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, float state);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceStateVector2fEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrVector2f state);
+typedef XrResult (XRAPI_PTR *PFN_xrSetInputDeviceLocationEXT)(XrSession session, XrPath topLevelPath, XrPath inputSourcePath, XrSpace space, XrPosef pose);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceActiveEXT(
+ XrSession session,
+ XrPath interactionProfile,
+ XrPath topLevelPath,
+ XrBool32 isActive);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateBoolEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ XrBool32 state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateFloatEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ float state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceStateVector2fEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ XrVector2f state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetInputDeviceLocationEXT(
+ XrSession session,
+ XrPath topLevelPath,
+ XrPath inputSourcePath,
+ XrSpace space,
+ XrPosef pose);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_spatial_graph_bridge 1
+#define XR_MSFT_spatial_graph_bridge_SPEC_VERSION 1
+#define XR_MSFT_SPATIAL_GRAPH_BRIDGE_EXTENSION_NAME "XR_MSFT_spatial_graph_bridge"
+
+typedef enum XrSpatialGraphNodeTypeMSFT {
+ XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT = 1,
+ XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT = 2,
+ XR_SPATIAL_GRAPH_NODE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSpatialGraphNodeTypeMSFT;
+typedef struct XrSpatialGraphNodeSpaceCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialGraphNodeTypeMSFT nodeType;
+ uint8_t nodeId[16];
+ XrPosef pose;
+} XrSpatialGraphNodeSpaceCreateInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialGraphNodeSpaceMSFT)(XrSession session, const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialGraphNodeSpaceMSFT(
+ XrSession session,
+ const XrSpatialGraphNodeSpaceCreateInfoMSFT* createInfo,
+ XrSpace* space);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_hand_interaction 1
+#define XR_MSFT_hand_interaction_SPEC_VERSION 1
+#define XR_MSFT_HAND_INTERACTION_EXTENSION_NAME "XR_MSFT_hand_interaction"
+
+
+#define XR_EXT_hand_tracking 1
+
+#define XR_HAND_JOINT_COUNT_EXT 26
+
+XR_DEFINE_HANDLE(XrHandTrackerEXT)
+#define XR_EXT_hand_tracking_SPEC_VERSION 4
+#define XR_EXT_HAND_TRACKING_EXTENSION_NAME "XR_EXT_hand_tracking"
+
+typedef enum XrHandEXT {
+ XR_HAND_LEFT_EXT = 1,
+ XR_HAND_RIGHT_EXT = 2,
+ XR_HAND_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandEXT;
+
+typedef enum XrHandJointEXT {
+ XR_HAND_JOINT_PALM_EXT = 0,
+ XR_HAND_JOINT_WRIST_EXT = 1,
+ XR_HAND_JOINT_THUMB_METACARPAL_EXT = 2,
+ XR_HAND_JOINT_THUMB_PROXIMAL_EXT = 3,
+ XR_HAND_JOINT_THUMB_DISTAL_EXT = 4,
+ XR_HAND_JOINT_THUMB_TIP_EXT = 5,
+ XR_HAND_JOINT_INDEX_METACARPAL_EXT = 6,
+ XR_HAND_JOINT_INDEX_PROXIMAL_EXT = 7,
+ XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT = 8,
+ XR_HAND_JOINT_INDEX_DISTAL_EXT = 9,
+ XR_HAND_JOINT_INDEX_TIP_EXT = 10,
+ XR_HAND_JOINT_MIDDLE_METACARPAL_EXT = 11,
+ XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT = 12,
+ XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT = 13,
+ XR_HAND_JOINT_MIDDLE_DISTAL_EXT = 14,
+ XR_HAND_JOINT_MIDDLE_TIP_EXT = 15,
+ XR_HAND_JOINT_RING_METACARPAL_EXT = 16,
+ XR_HAND_JOINT_RING_PROXIMAL_EXT = 17,
+ XR_HAND_JOINT_RING_INTERMEDIATE_EXT = 18,
+ XR_HAND_JOINT_RING_DISTAL_EXT = 19,
+ XR_HAND_JOINT_RING_TIP_EXT = 20,
+ XR_HAND_JOINT_LITTLE_METACARPAL_EXT = 21,
+ XR_HAND_JOINT_LITTLE_PROXIMAL_EXT = 22,
+ XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT = 23,
+ XR_HAND_JOINT_LITTLE_DISTAL_EXT = 24,
+ XR_HAND_JOINT_LITTLE_TIP_EXT = 25,
+ XR_HAND_JOINT_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandJointEXT;
+
+typedef enum XrHandJointSetEXT {
+ XR_HAND_JOINT_SET_DEFAULT_EXT = 0,
+ XR_HAND_JOINT_SET_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandJointSetEXT;
+// XrSystemHandTrackingPropertiesEXT extends XrSystemProperties
+typedef struct XrSystemHandTrackingPropertiesEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsHandTracking;
+} XrSystemHandTrackingPropertiesEXT;
+
+typedef struct XrHandTrackerCreateInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandEXT hand;
+ XrHandJointSetEXT handJointSet;
+} XrHandTrackerCreateInfoEXT;
+
+typedef struct XrHandJointsLocateInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace baseSpace;
+ XrTime time;
+} XrHandJointsLocateInfoEXT;
+
+typedef struct XrHandJointLocationEXT {
+ XrSpaceLocationFlags locationFlags;
+ XrPosef pose;
+ float radius;
+} XrHandJointLocationEXT;
+
+typedef struct XrHandJointVelocityEXT {
+ XrSpaceVelocityFlags velocityFlags;
+ XrVector3f linearVelocity;
+ XrVector3f angularVelocity;
+} XrHandJointVelocityEXT;
+
+typedef struct XrHandJointLocationsEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+ uint32_t jointCount;
+ XrHandJointLocationEXT* jointLocations;
+} XrHandJointLocationsEXT;
+
+// XrHandJointVelocitiesEXT extends XrHandJointLocationsEXT
+typedef struct XrHandJointVelocitiesEXT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t jointCount;
+ XrHandJointVelocityEXT* jointVelocities;
+} XrHandJointVelocitiesEXT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateHandTrackerEXT)(XrSession session, const XrHandTrackerCreateInfoEXT* createInfo, XrHandTrackerEXT* handTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyHandTrackerEXT)(XrHandTrackerEXT handTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateHandJointsEXT)(XrHandTrackerEXT handTracker, const XrHandJointsLocateInfoEXT* locateInfo, XrHandJointLocationsEXT* locations);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandTrackerEXT(
+ XrSession session,
+ const XrHandTrackerCreateInfoEXT* createInfo,
+ XrHandTrackerEXT* handTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyHandTrackerEXT(
+ XrHandTrackerEXT handTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateHandJointsEXT(
+ XrHandTrackerEXT handTracker,
+ const XrHandJointsLocateInfoEXT* locateInfo,
+ XrHandJointLocationsEXT* locations);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_hand_tracking_mesh 1
+#define XR_MSFT_hand_tracking_mesh_SPEC_VERSION 4
+#define XR_MSFT_HAND_TRACKING_MESH_EXTENSION_NAME "XR_MSFT_hand_tracking_mesh"
+
+typedef enum XrHandPoseTypeMSFT {
+ XR_HAND_POSE_TYPE_TRACKED_MSFT = 0,
+ XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT = 1,
+ XR_HAND_POSE_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrHandPoseTypeMSFT;
+// XrSystemHandTrackingMeshPropertiesMSFT extends XrSystemProperties
+typedef struct XrSystemHandTrackingMeshPropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsHandTrackingMesh;
+ uint32_t maxHandMeshIndexCount;
+ uint32_t maxHandMeshVertexCount;
+} XrSystemHandTrackingMeshPropertiesMSFT;
+
+typedef struct XrHandMeshSpaceCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandPoseTypeMSFT handPoseType;
+ XrPosef poseInHandMeshSpace;
+} XrHandMeshSpaceCreateInfoMSFT;
+
+typedef struct XrHandMeshUpdateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTime time;
+ XrHandPoseTypeMSFT handPoseType;
+} XrHandMeshUpdateInfoMSFT;
+
+typedef struct XrHandMeshIndexBufferMSFT {
+ uint32_t indexBufferKey;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
+} XrHandMeshIndexBufferMSFT;
+
+typedef struct XrHandMeshVertexMSFT {
+ XrVector3f position;
+ XrVector3f normal;
+} XrHandMeshVertexMSFT;
+
+typedef struct XrHandMeshVertexBufferMSFT {
+ XrTime vertexUpdateTime;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrHandMeshVertexMSFT* vertices;
+} XrHandMeshVertexBufferMSFT;
+
+typedef struct XrHandMeshMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+ XrBool32 indexBufferChanged;
+ XrBool32 vertexBufferChanged;
+ XrHandMeshIndexBufferMSFT indexBuffer;
+ XrHandMeshVertexBufferMSFT vertexBuffer;
+} XrHandMeshMSFT;
+
+// XrHandPoseTypeInfoMSFT extends XrHandTrackerCreateInfoEXT
+typedef struct XrHandPoseTypeInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandPoseTypeMSFT handPoseType;
+} XrHandPoseTypeInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateHandMeshSpaceMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshSpaceCreateInfoMSFT* createInfo, XrSpace* space);
+typedef XrResult (XRAPI_PTR *PFN_xrUpdateHandMeshMSFT)(XrHandTrackerEXT handTracker, const XrHandMeshUpdateInfoMSFT* updateInfo, XrHandMeshMSFT* handMesh);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateHandMeshSpaceMSFT(
+ XrHandTrackerEXT handTracker,
+ const XrHandMeshSpaceCreateInfoMSFT* createInfo,
+ XrSpace* space);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrUpdateHandMeshMSFT(
+ XrHandTrackerEXT handTracker,
+ const XrHandMeshUpdateInfoMSFT* updateInfo,
+ XrHandMeshMSFT* handMesh);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_secondary_view_configuration 1
+#define XR_MSFT_secondary_view_configuration_SPEC_VERSION 1
+#define XR_MSFT_SECONDARY_VIEW_CONFIGURATION_EXTENSION_NAME "XR_MSFT_secondary_view_configuration"
+// XrSecondaryViewConfigurationSessionBeginInfoMSFT extends XrSessionBeginInfo
+typedef struct XrSecondaryViewConfigurationSessionBeginInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t viewConfigurationCount;
+ const XrViewConfigurationType* enabledViewConfigurationTypes;
+} XrSecondaryViewConfigurationSessionBeginInfoMSFT;
+
+typedef struct XrSecondaryViewConfigurationStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrBool32 active;
+} XrSecondaryViewConfigurationStateMSFT;
+
+// XrSecondaryViewConfigurationFrameStateMSFT extends XrFrameState
+typedef struct XrSecondaryViewConfigurationFrameStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t viewConfigurationCount;
+ XrSecondaryViewConfigurationStateMSFT* viewConfigurationStates;
+} XrSecondaryViewConfigurationFrameStateMSFT;
+
+typedef struct XrSecondaryViewConfigurationLayerInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+ XrEnvironmentBlendMode environmentBlendMode;
+ uint32_t layerCount;
+ const XrCompositionLayerBaseHeader* const* layers;
+} XrSecondaryViewConfigurationLayerInfoMSFT;
+
+// XrSecondaryViewConfigurationFrameEndInfoMSFT extends XrFrameEndInfo
+typedef struct XrSecondaryViewConfigurationFrameEndInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t viewConfigurationCount;
+ const XrSecondaryViewConfigurationLayerInfoMSFT* viewConfigurationLayersInfo;
+} XrSecondaryViewConfigurationFrameEndInfoMSFT;
+
+// XrSecondaryViewConfigurationSwapchainCreateInfoMSFT extends XrSwapchainCreateInfo
+typedef struct XrSecondaryViewConfigurationSwapchainCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViewConfigurationType viewConfigurationType;
+} XrSecondaryViewConfigurationSwapchainCreateInfoMSFT;
+
+
+
+#define XR_MSFT_first_person_observer 1
+#define XR_MSFT_first_person_observer_SPEC_VERSION 1
+#define XR_MSFT_FIRST_PERSON_OBSERVER_EXTENSION_NAME "XR_MSFT_first_person_observer"
+
+
+#define XR_MSFT_controller_model 1
+
+#define XR_NULL_CONTROLLER_MODEL_KEY_MSFT 0
+
+XR_DEFINE_ATOM(XrControllerModelKeyMSFT)
+#define XR_MSFT_controller_model_SPEC_VERSION 2
+#define XR_MSFT_CONTROLLER_MODEL_EXTENSION_NAME "XR_MSFT_controller_model"
+#define XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT 64
+typedef struct XrControllerModelKeyStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrControllerModelKeyMSFT modelKey;
+} XrControllerModelKeyStateMSFT;
+
+typedef struct XrControllerModelNodePropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ char parentNodeName[XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT];
+ char nodeName[XR_MAX_CONTROLLER_MODEL_NODE_NAME_SIZE_MSFT];
+} XrControllerModelNodePropertiesMSFT;
+
+typedef struct XrControllerModelPropertiesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t nodeCapacityInput;
+ uint32_t nodeCountOutput;
+ XrControllerModelNodePropertiesMSFT* nodeProperties;
+} XrControllerModelPropertiesMSFT;
+
+typedef struct XrControllerModelNodeStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPosef nodePose;
+} XrControllerModelNodeStateMSFT;
+
+typedef struct XrControllerModelStateMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t nodeCapacityInput;
+ uint32_t nodeCountOutput;
+ XrControllerModelNodeStateMSFT* nodeStates;
+} XrControllerModelStateMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelKeyMSFT)(XrSession session, XrPath topLevelUserPath, XrControllerModelKeyStateMSFT* controllerModelKeyState);
+typedef XrResult (XRAPI_PTR *PFN_xrLoadControllerModelMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, uint8_t* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelPropertiesMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelPropertiesMSFT* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrGetControllerModelStateMSFT)(XrSession session, XrControllerModelKeyMSFT modelKey, XrControllerModelStateMSFT* state);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelKeyMSFT(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrControllerModelKeyStateMSFT* controllerModelKeyState);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLoadControllerModelMSFT(
+ XrSession session,
+ XrControllerModelKeyMSFT modelKey,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ uint8_t* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelPropertiesMSFT(
+ XrSession session,
+ XrControllerModelKeyMSFT modelKey,
+ XrControllerModelPropertiesMSFT* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetControllerModelStateMSFT(
+ XrSession session,
+ XrControllerModelKeyMSFT modelKey,
+ XrControllerModelStateMSFT* state);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_win32_appcontainer_compatible 1
+#define XR_EXT_win32_appcontainer_compatible_SPEC_VERSION 1
+#define XR_EXT_WIN32_APPCONTAINER_COMPATIBLE_EXTENSION_NAME "XR_EXT_win32_appcontainer_compatible"
+
+
+#define XR_EPIC_view_configuration_fov 1
+#define XR_EPIC_view_configuration_fov_SPEC_VERSION 2
+#define XR_EPIC_VIEW_CONFIGURATION_FOV_EXTENSION_NAME "XR_EPIC_view_configuration_fov"
+// XrViewConfigurationViewFovEPIC extends XrViewConfigurationView
+typedef struct XrViewConfigurationViewFovEPIC {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrFovf recommendedFov;
+ XrFovf maxMutableFov;
+} XrViewConfigurationViewFovEPIC;
+
+
+
+#define XR_MSFT_composition_layer_reprojection 1
+#define XR_MSFT_composition_layer_reprojection_SPEC_VERSION 1
+#define XR_MSFT_COMPOSITION_LAYER_REPROJECTION_EXTENSION_NAME "XR_MSFT_composition_layer_reprojection"
+
+typedef enum XrReprojectionModeMSFT {
+ XR_REPROJECTION_MODE_DEPTH_MSFT = 1,
+ XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT = 2,
+ XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT = 3,
+ XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT = 4,
+ XR_REPROJECTION_MODE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrReprojectionModeMSFT;
+// XrCompositionLayerReprojectionInfoMSFT extends XrCompositionLayerProjection
+typedef struct XrCompositionLayerReprojectionInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrReprojectionModeMSFT reprojectionMode;
+} XrCompositionLayerReprojectionInfoMSFT;
+
+// XrCompositionLayerReprojectionPlaneOverrideMSFT extends XrCompositionLayerProjection
+typedef struct XrCompositionLayerReprojectionPlaneOverrideMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrVector3f position;
+ XrVector3f normal;
+ XrVector3f velocity;
+} XrCompositionLayerReprojectionPlaneOverrideMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateReprojectionModesMSFT)(XrInstance instance, XrSystemId systemId, XrViewConfigurationType viewConfigurationType, uint32_t modeCapacityInput, uint32_t* modeCountOutput, XrReprojectionModeMSFT* modes);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReprojectionModesMSFT(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t modeCapacityInput,
+ uint32_t* modeCountOutput,
+ XrReprojectionModeMSFT* modes);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HUAWEI_controller_interaction 1
+#define XR_HUAWEI_controller_interaction_SPEC_VERSION 1
+#define XR_HUAWEI_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HUAWEI_controller_interaction"
+
+
+#define XR_FB_swapchain_update_state 1
+#define XR_FB_swapchain_update_state_SPEC_VERSION 3
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_EXTENSION_NAME "XR_FB_swapchain_update_state"
+typedef struct XR_MAY_ALIAS XrSwapchainStateBaseHeaderFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrSwapchainStateBaseHeaderFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrUpdateSwapchainFB)(XrSwapchain swapchain, const XrSwapchainStateBaseHeaderFB* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSwapchainStateFB)(XrSwapchain swapchain, XrSwapchainStateBaseHeaderFB* state);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrUpdateSwapchainFB(
+ XrSwapchain swapchain,
+ const XrSwapchainStateBaseHeaderFB* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSwapchainStateFB(
+ XrSwapchain swapchain,
+ XrSwapchainStateBaseHeaderFB* state);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_composition_layer_secure_content 1
+#define XR_FB_composition_layer_secure_content_SPEC_VERSION 1
+#define XR_FB_COMPOSITION_LAYER_SECURE_CONTENT_EXTENSION_NAME "XR_FB_composition_layer_secure_content"
+typedef XrFlags64 XrCompositionLayerSecureContentFlagsFB;
+
+// Flag bits for XrCompositionLayerSecureContentFlagsFB
+static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB = 0x00000001;
+static const XrCompositionLayerSecureContentFlagsFB XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB = 0x00000002;
+
+// XrCompositionLayerSecureContentFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerSecureContentFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerSecureContentFlagsFB flags;
+} XrCompositionLayerSecureContentFB;
+
+
+
+#define XR_VALVE_analog_threshold 1
+#define XR_VALVE_analog_threshold_SPEC_VERSION 2
+#define XR_VALVE_ANALOG_THRESHOLD_EXTENSION_NAME "XR_VALVE_analog_threshold"
+typedef struct XrInteractionProfileAnalogThresholdVALVE {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAction action;
+ XrPath binding;
+ float onThreshold;
+ float offThreshold;
+ const XrHapticBaseHeader* onHaptic;
+ const XrHapticBaseHeader* offHaptic;
+} XrInteractionProfileAnalogThresholdVALVE;
+
+
+
+#define XR_EXT_hand_joints_motion_range 1
+#define XR_EXT_hand_joints_motion_range_SPEC_VERSION 1
+#define XR_EXT_HAND_JOINTS_MOTION_RANGE_EXTENSION_NAME "XR_EXT_hand_joints_motion_range"
+
+typedef enum XrHandJointsMotionRangeEXT {
+ XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT = 1,
+ XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT = 2,
+ XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT = 0x7FFFFFFF
+} XrHandJointsMotionRangeEXT;
+// XrHandJointsMotionRangeInfoEXT extends XrHandJointsLocateInfoEXT
+typedef struct XrHandJointsMotionRangeInfoEXT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrHandJointsMotionRangeEXT handJointsMotionRange;
+} XrHandJointsMotionRangeInfoEXT;
+
+
+
+#define XR_EXT_samsung_odyssey_controller 1
+#define XR_EXT_samsung_odyssey_controller_SPEC_VERSION 1
+#define XR_EXT_SAMSUNG_ODYSSEY_CONTROLLER_EXTENSION_NAME "XR_EXT_samsung_odyssey_controller"
+
+
+#define XR_EXT_hp_mixed_reality_controller 1
+#define XR_EXT_hp_mixed_reality_controller_SPEC_VERSION 1
+#define XR_EXT_HP_MIXED_REALITY_CONTROLLER_EXTENSION_NAME "XR_EXT_hp_mixed_reality_controller"
+
+
+#define XR_MND_swapchain_usage_input_attachment_bit 1
+#define XR_MND_swapchain_usage_input_attachment_bit_SPEC_VERSION 2
+#define XR_MND_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_EXTENSION_NAME "XR_MND_swapchain_usage_input_attachment_bit"
+
+
+#define XR_MSFT_scene_understanding 1
+
+ XR_DEFINE_HANDLE(XrSceneObserverMSFT)
+
+
+ XR_DEFINE_HANDLE(XrSceneMSFT)
+
+#define XR_MSFT_scene_understanding_SPEC_VERSION 1
+#define XR_MSFT_SCENE_UNDERSTANDING_EXTENSION_NAME "XR_MSFT_scene_understanding"
+
+typedef enum XrSceneComputeFeatureMSFT {
+ XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT = 1,
+ XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT = 2,
+ XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT = 3,
+ XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT = 4,
+ XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT = 1000098000,
+ XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComputeFeatureMSFT;
+
+typedef enum XrSceneComputeConsistencyMSFT {
+ XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT = 1,
+ XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT = 2,
+ XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT = 3,
+ XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComputeConsistencyMSFT;
+
+typedef enum XrMeshComputeLodMSFT {
+ XR_MESH_COMPUTE_LOD_COARSE_MSFT = 1,
+ XR_MESH_COMPUTE_LOD_MEDIUM_MSFT = 2,
+ XR_MESH_COMPUTE_LOD_FINE_MSFT = 3,
+ XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT = 4,
+ XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrMeshComputeLodMSFT;
+
+typedef enum XrSceneComponentTypeMSFT {
+ XR_SCENE_COMPONENT_TYPE_INVALID_MSFT = -1,
+ XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT = 1,
+ XR_SCENE_COMPONENT_TYPE_PLANE_MSFT = 2,
+ XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT = 3,
+ XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT = 4,
+ XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT = 1000098000,
+ XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComponentTypeMSFT;
+
+typedef enum XrSceneObjectTypeMSFT {
+ XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT = -1,
+ XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT = 1,
+ XR_SCENE_OBJECT_TYPE_WALL_MSFT = 2,
+ XR_SCENE_OBJECT_TYPE_FLOOR_MSFT = 3,
+ XR_SCENE_OBJECT_TYPE_CEILING_MSFT = 4,
+ XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT = 5,
+ XR_SCENE_OBJECT_TYPE_INFERRED_MSFT = 6,
+ XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneObjectTypeMSFT;
+
+typedef enum XrScenePlaneAlignmentTypeMSFT {
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT = 0,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT = 1,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT = 2,
+ XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrScenePlaneAlignmentTypeMSFT;
+
+typedef enum XrSceneComputeStateMSFT {
+ XR_SCENE_COMPUTE_STATE_NONE_MSFT = 0,
+ XR_SCENE_COMPUTE_STATE_UPDATING_MSFT = 1,
+ XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT = 2,
+ XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT = 3,
+ XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT = 0x7FFFFFFF
+} XrSceneComputeStateMSFT;
+typedef struct XrUuidMSFT {
+ uint8_t bytes[16];
+} XrUuidMSFT;
+
+typedef struct XrSceneObserverCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSceneObserverCreateInfoMSFT;
+
+typedef struct XrSceneCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+} XrSceneCreateInfoMSFT;
+
+typedef struct XrSceneSphereBoundMSFT {
+ XrVector3f center;
+ float radius;
+} XrSceneSphereBoundMSFT;
+
+typedef struct XrSceneOrientedBoxBoundMSFT {
+ XrPosef pose;
+ XrVector3f extents;
+} XrSceneOrientedBoxBoundMSFT;
+
+typedef struct XrSceneFrustumBoundMSFT {
+ XrPosef pose;
+ XrFovf fov;
+ float farDistance;
+} XrSceneFrustumBoundMSFT;
+
+typedef struct XrSceneBoundsMSFT {
+ XrSpace space;
+ XrTime time;
+ uint32_t sphereCount;
+ const XrSceneSphereBoundMSFT* spheres;
+ uint32_t boxCount;
+ const XrSceneOrientedBoxBoundMSFT* boxes;
+ uint32_t frustumCount;
+ const XrSceneFrustumBoundMSFT* frustums;
+} XrSceneBoundsMSFT;
+
+typedef struct XrNewSceneComputeInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t requestedFeatureCount;
+ const XrSceneComputeFeatureMSFT* requestedFeatures;
+ XrSceneComputeConsistencyMSFT consistency;
+ XrSceneBoundsMSFT bounds;
+} XrNewSceneComputeInfoMSFT;
+
+// XrVisualMeshComputeLodInfoMSFT extends XrNewSceneComputeInfoMSFT
+typedef struct XrVisualMeshComputeLodInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrMeshComputeLodMSFT lod;
+} XrVisualMeshComputeLodInfoMSFT;
+
+typedef struct XrSceneComponentMSFT {
+ XrSceneComponentTypeMSFT componentType;
+ XrUuidMSFT id;
+ XrUuidMSFT parentId;
+ XrTime updateTime;
+} XrSceneComponentMSFT;
+
+typedef struct XrSceneComponentsMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t componentCapacityInput;
+ uint32_t componentCountOutput;
+ XrSceneComponentMSFT* components;
+} XrSceneComponentsMSFT;
+
+typedef struct XrSceneComponentsGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSceneComponentTypeMSFT componentType;
+} XrSceneComponentsGetInfoMSFT;
+
+typedef struct XrSceneComponentLocationMSFT {
+ XrSpaceLocationFlags flags;
+ XrPosef pose;
+} XrSceneComponentLocationMSFT;
+
+typedef struct XrSceneComponentLocationsMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t locationCount;
+ XrSceneComponentLocationMSFT* locations;
+} XrSceneComponentLocationsMSFT;
+
+typedef struct XrSceneComponentsLocateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace baseSpace;
+ XrTime time;
+ uint32_t componentIdCount;
+ const XrUuidMSFT* componentIds;
+} XrSceneComponentsLocateInfoMSFT;
+
+typedef struct XrSceneObjectMSFT {
+ XrSceneObjectTypeMSFT objectType;
+} XrSceneObjectMSFT;
+
+// XrSceneObjectsMSFT extends XrSceneComponentsMSFT
+typedef struct XrSceneObjectsMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t sceneObjectCount;
+ XrSceneObjectMSFT* sceneObjects;
+} XrSceneObjectsMSFT;
+
+// XrSceneComponentParentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+typedef struct XrSceneComponentParentFilterInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrUuidMSFT parentId;
+} XrSceneComponentParentFilterInfoMSFT;
+
+// XrSceneObjectTypesFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+typedef struct XrSceneObjectTypesFilterInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t objectTypeCount;
+ const XrSceneObjectTypeMSFT* objectTypes;
+} XrSceneObjectTypesFilterInfoMSFT;
+
+typedef struct XrScenePlaneMSFT {
+ XrScenePlaneAlignmentTypeMSFT alignment;
+ XrExtent2Df size;
+ uint64_t meshBufferId;
+ XrBool32 supportsIndicesUint16;
+} XrScenePlaneMSFT;
+
+// XrScenePlanesMSFT extends XrSceneComponentsMSFT
+typedef struct XrScenePlanesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t scenePlaneCount;
+ XrScenePlaneMSFT* scenePlanes;
+} XrScenePlanesMSFT;
+
+// XrScenePlaneAlignmentFilterInfoMSFT extends XrSceneComponentsGetInfoMSFT
+typedef struct XrScenePlaneAlignmentFilterInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t alignmentCount;
+ const XrScenePlaneAlignmentTypeMSFT* alignments;
+} XrScenePlaneAlignmentFilterInfoMSFT;
+
+typedef struct XrSceneMeshMSFT {
+ uint64_t meshBufferId;
+ XrBool32 supportsIndicesUint16;
+} XrSceneMeshMSFT;
+
+// XrSceneMeshesMSFT extends XrSceneComponentsMSFT
+typedef struct XrSceneMeshesMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t sceneMeshCount;
+ XrSceneMeshMSFT* sceneMeshes;
+} XrSceneMeshesMSFT;
+
+typedef struct XrSceneMeshBuffersGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint64_t meshBufferId;
+} XrSceneMeshBuffersGetInfoMSFT;
+
+typedef struct XrSceneMeshBuffersMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrSceneMeshBuffersMSFT;
+
+typedef struct XrSceneMeshVertexBufferMSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector3f* vertices;
+} XrSceneMeshVertexBufferMSFT;
+
+typedef struct XrSceneMeshIndicesUint32MSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint32_t* indices;
+} XrSceneMeshIndicesUint32MSFT;
+
+typedef struct XrSceneMeshIndicesUint16MSFT {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ uint16_t* indices;
+} XrSceneMeshIndicesUint16MSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateSceneComputeFeaturesMSFT)(XrInstance instance, XrSystemId systemId, uint32_t featureCapacityInput, uint32_t* featureCountOutput, XrSceneComputeFeatureMSFT* features);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneObserverMSFT)(XrSession session, const XrSceneObserverCreateInfoMSFT* createInfo, XrSceneObserverMSFT* sceneObserver);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneObserverMSFT)(XrSceneObserverMSFT sceneObserver);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneCreateInfoMSFT* createInfo, XrSceneMSFT* scene);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySceneMSFT)(XrSceneMSFT scene);
+typedef XrResult (XRAPI_PTR *PFN_xrComputeNewSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrNewSceneComputeInfoMSFT* computeInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComputeStateMSFT)(XrSceneObserverMSFT sceneObserver, XrSceneComputeStateMSFT* state);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsGetInfoMSFT* getInfo, XrSceneComponentsMSFT* components);
+typedef XrResult (XRAPI_PTR *PFN_xrLocateSceneComponentsMSFT)(XrSceneMSFT scene, const XrSceneComponentsLocateInfoMSFT* locateInfo, XrSceneComponentLocationsMSFT* locations);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSceneMeshBuffersMSFT)(XrSceneMSFT scene, const XrSceneMeshBuffersGetInfoMSFT* getInfo, XrSceneMeshBuffersMSFT* buffers);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSceneComputeFeaturesMSFT(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t featureCapacityInput,
+ uint32_t* featureCountOutput,
+ XrSceneComputeFeatureMSFT* features);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneObserverMSFT(
+ XrSession session,
+ const XrSceneObserverCreateInfoMSFT* createInfo,
+ XrSceneObserverMSFT* sceneObserver);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneObserverMSFT(
+ XrSceneObserverMSFT sceneObserver);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSceneMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ const XrSceneCreateInfoMSFT* createInfo,
+ XrSceneMSFT* scene);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySceneMSFT(
+ XrSceneMSFT scene);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrComputeNewSceneMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ const XrNewSceneComputeInfoMSFT* computeInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComputeStateMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ XrSceneComputeStateMSFT* state);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneComponentsMSFT(
+ XrSceneMSFT scene,
+ const XrSceneComponentsGetInfoMSFT* getInfo,
+ XrSceneComponentsMSFT* components);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLocateSceneComponentsMSFT(
+ XrSceneMSFT scene,
+ const XrSceneComponentsLocateInfoMSFT* locateInfo,
+ XrSceneComponentLocationsMSFT* locations);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSceneMeshBuffersMSFT(
+ XrSceneMSFT scene,
+ const XrSceneMeshBuffersGetInfoMSFT* getInfo,
+ XrSceneMeshBuffersMSFT* buffers);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_scene_understanding_serialization 1
+#define XR_MSFT_scene_understanding_serialization_SPEC_VERSION 1
+#define XR_MSFT_SCENE_UNDERSTANDING_SERIALIZATION_EXTENSION_NAME "XR_MSFT_scene_understanding_serialization"
+typedef struct XrSerializedSceneFragmentDataGetInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrUuidMSFT sceneFragmentId;
+} XrSerializedSceneFragmentDataGetInfoMSFT;
+
+typedef struct XrDeserializeSceneFragmentMSFT {
+ uint32_t bufferSize;
+ const uint8_t* buffer;
+} XrDeserializeSceneFragmentMSFT;
+
+typedef struct XrSceneDeserializeInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t fragmentCount;
+ const XrDeserializeSceneFragmentMSFT* fragments;
+} XrSceneDeserializeInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrDeserializeSceneMSFT)(XrSceneObserverMSFT sceneObserver, const XrSceneDeserializeInfoMSFT* deserializeInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrGetSerializedSceneFragmentDataMSFT)(XrSceneMSFT scene, const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo, uint32_t countInput, uint32_t* readOutput, uint8_t* buffer);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrDeserializeSceneMSFT(
+ XrSceneObserverMSFT sceneObserver,
+ const XrSceneDeserializeInfoMSFT* deserializeInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetSerializedSceneFragmentDataMSFT(
+ XrSceneMSFT scene,
+ const XrSerializedSceneFragmentDataGetInfoMSFT* getInfo,
+ uint32_t countInput,
+ uint32_t* readOutput,
+ uint8_t* buffer);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_display_refresh_rate 1
+#define XR_FB_display_refresh_rate_SPEC_VERSION 1
+#define XR_FB_DISPLAY_REFRESH_RATE_EXTENSION_NAME "XR_FB_display_refresh_rate"
+typedef struct XrEventDataDisplayRefreshRateChangedFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float fromDisplayRefreshRate;
+ float toDisplayRefreshRate;
+} XrEventDataDisplayRefreshRateChangedFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateDisplayRefreshRatesFB)(XrSession session, uint32_t displayRefreshRateCapacityInput, uint32_t* displayRefreshRateCountOutput, float* displayRefreshRates);
+typedef XrResult (XRAPI_PTR *PFN_xrGetDisplayRefreshRateFB)(XrSession session, float* displayRefreshRate);
+typedef XrResult (XRAPI_PTR *PFN_xrRequestDisplayRefreshRateFB)(XrSession session, float displayRefreshRate);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateDisplayRefreshRatesFB(
+ XrSession session,
+ uint32_t displayRefreshRateCapacityInput,
+ uint32_t* displayRefreshRateCountOutput,
+ float* displayRefreshRates);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetDisplayRefreshRateFB(
+ XrSession session,
+ float* displayRefreshRate);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrRequestDisplayRefreshRateFB(
+ XrSession session,
+ float displayRefreshRate);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HTC_vive_cosmos_controller_interaction 1
+#define XR_HTC_vive_cosmos_controller_interaction_SPEC_VERSION 1
+#define XR_HTC_VIVE_COSMOS_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_cosmos_controller_interaction"
+
+
+#define XR_HTCX_vive_tracker_interaction 1
+#define XR_HTCX_vive_tracker_interaction_SPEC_VERSION 1
+#define XR_HTCX_VIVE_TRACKER_INTERACTION_EXTENSION_NAME "XR_HTCX_vive_tracker_interaction"
+typedef struct XrViveTrackerPathsHTCX {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPath persistentPath;
+ XrPath rolePath;
+} XrViveTrackerPathsHTCX;
+
+typedef struct XrEventDataViveTrackerConnectedHTCX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrViveTrackerPathsHTCX* paths;
+} XrEventDataViveTrackerConnectedHTCX;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateViveTrackerPathsHTCX)(XrInstance instance, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrViveTrackerPathsHTCX* paths);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViveTrackerPathsHTCX(
+ XrInstance instance,
+ uint32_t pathCapacityInput,
+ uint32_t* pathCountOutput,
+ XrViveTrackerPathsHTCX* paths);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HTC_facial_tracking 1
+
+#define XR_FACIAL_EXPRESSION_EYE_COUNT_HTC 14
+
+
+#define XR_FACIAL_EXPRESSION_LIP_COUNT_HTC 37
+
+XR_DEFINE_HANDLE(XrFacialTrackerHTC)
+#define XR_HTC_facial_tracking_SPEC_VERSION 1
+#define XR_HTC_FACIAL_TRACKING_EXTENSION_NAME "XR_HTC_facial_tracking"
+
+typedef enum XrEyeExpressionHTC {
+ XR_EYE_EXPRESSION_LEFT_BLINK_HTC = 0,
+ XR_EYE_EXPRESSION_LEFT_WIDE_HTC = 1,
+ XR_EYE_EXPRESSION_RIGHT_BLINK_HTC = 2,
+ XR_EYE_EXPRESSION_RIGHT_WIDE_HTC = 3,
+ XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC = 4,
+ XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC = 5,
+ XR_EYE_EXPRESSION_LEFT_DOWN_HTC = 6,
+ XR_EYE_EXPRESSION_RIGHT_DOWN_HTC = 7,
+ XR_EYE_EXPRESSION_LEFT_OUT_HTC = 8,
+ XR_EYE_EXPRESSION_RIGHT_IN_HTC = 9,
+ XR_EYE_EXPRESSION_LEFT_IN_HTC = 10,
+ XR_EYE_EXPRESSION_RIGHT_OUT_HTC = 11,
+ XR_EYE_EXPRESSION_LEFT_UP_HTC = 12,
+ XR_EYE_EXPRESSION_RIGHT_UP_HTC = 13,
+ XR_EYE_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF
+} XrEyeExpressionHTC;
+
+typedef enum XrLipExpressionHTC {
+ XR_LIP_EXPRESSION_JAW_RIGHT_HTC = 0,
+ XR_LIP_EXPRESSION_JAW_LEFT_HTC = 1,
+ XR_LIP_EXPRESSION_JAW_FORWARD_HTC = 2,
+ XR_LIP_EXPRESSION_JAW_OPEN_HTC = 3,
+ XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC = 4,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC = 5,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC = 6,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC = 7,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC = 8,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC = 9,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC = 10,
+ XR_LIP_EXPRESSION_MOUTH_POUT_HTC = 11,
+ XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC = 12,
+ XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC = 13,
+ XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC = 14,
+ XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC = 15,
+ XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC = 16,
+ XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC = 17,
+ XR_LIP_EXPRESSION_CHEEK_SUCK_HTC = 18,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC = 19,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC = 20,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC = 21,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC = 22,
+ XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC = 23,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC = 24,
+ XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC = 25,
+ XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC = 26,
+ XR_LIP_EXPRESSION_TONGUE_LEFT_HTC = 27,
+ XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC = 28,
+ XR_LIP_EXPRESSION_TONGUE_UP_HTC = 29,
+ XR_LIP_EXPRESSION_TONGUE_DOWN_HTC = 30,
+ XR_LIP_EXPRESSION_TONGUE_ROLL_HTC = 31,
+ XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC = 32,
+ XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC = 33,
+ XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC = 34,
+ XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC = 35,
+ XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC = 36,
+ XR_LIP_EXPRESSION_MAX_ENUM_HTC = 0x7FFFFFFF
+} XrLipExpressionHTC;
+
+typedef enum XrFacialTrackingTypeHTC {
+ XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC = 1,
+ XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC = 2,
+ XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC = 0x7FFFFFFF
+} XrFacialTrackingTypeHTC;
+// XrSystemFacialTrackingPropertiesHTC extends XrSystemProperties
+typedef struct XrSystemFacialTrackingPropertiesHTC {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportEyeFacialTracking;
+ XrBool32 supportLipFacialTracking;
+} XrSystemFacialTrackingPropertiesHTC;
+
+typedef struct XrFacialExpressionsHTC {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 isActive;
+ XrTime sampleTime;
+ uint32_t expressionCount;
+ float* expressionWeightings;
+} XrFacialExpressionsHTC;
+
+typedef struct XrFacialTrackerCreateInfoHTC {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrFacialTrackingTypeHTC facialTrackingType;
+} XrFacialTrackerCreateInfoHTC;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateFacialTrackerHTC)(XrSession session, const XrFacialTrackerCreateInfoHTC* createInfo, XrFacialTrackerHTC* facialTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyFacialTrackerHTC)(XrFacialTrackerHTC facialTracker);
+typedef XrResult (XRAPI_PTR *PFN_xrGetFacialExpressionsHTC)(XrFacialTrackerHTC facialTracker, XrFacialExpressionsHTC* facialExpressions);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateFacialTrackerHTC(
+ XrSession session,
+ const XrFacialTrackerCreateInfoHTC* createInfo,
+ XrFacialTrackerHTC* facialTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFacialTrackerHTC(
+ XrFacialTrackerHTC facialTracker);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetFacialExpressionsHTC(
+ XrFacialTrackerHTC facialTracker,
+ XrFacialExpressionsHTC* facialExpressions);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_HTC_vive_focus3_controller_interaction 1
+#define XR_HTC_vive_focus3_controller_interaction_SPEC_VERSION 1
+#define XR_HTC_VIVE_FOCUS3_CONTROLLER_INTERACTION_EXTENSION_NAME "XR_HTC_vive_focus3_controller_interaction"
+
+
+#define XR_FB_color_space 1
+#define XR_FB_color_space_SPEC_VERSION 2
+#define XR_FB_COLOR_SPACE_EXTENSION_NAME "XR_FB_color_space"
+
+typedef enum XrColorSpaceFB {
+ XR_COLOR_SPACE_UNMANAGED_FB = 0,
+ XR_COLOR_SPACE_REC2020_FB = 1,
+ XR_COLOR_SPACE_REC709_FB = 2,
+ XR_COLOR_SPACE_RIFT_CV1_FB = 3,
+ XR_COLOR_SPACE_RIFT_S_FB = 4,
+ XR_COLOR_SPACE_QUEST_FB = 5,
+ XR_COLOR_SPACE_P3_FB = 6,
+ XR_COLOR_SPACE_ADOBE_RGB_FB = 7,
+ XR_COLOR_SPACE_MAX_ENUM_FB = 0x7FFFFFFF
+} XrColorSpaceFB;
+// XrSystemColorSpacePropertiesFB extends XrSystemProperties
+typedef struct XrSystemColorSpacePropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrColorSpaceFB colorSpace;
+} XrSystemColorSpacePropertiesFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateColorSpacesFB)(XrSession session, uint32_t colorSpaceCapacityInput, uint32_t* colorSpaceCountOutput, XrColorSpaceFB* colorSpaces);
+typedef XrResult (XRAPI_PTR *PFN_xrSetColorSpaceFB)(XrSession session, const XrColorSpaceFB colorspace);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateColorSpacesFB(
+ XrSession session,
+ uint32_t colorSpaceCapacityInput,
+ uint32_t* colorSpaceCountOutput,
+ XrColorSpaceFB* colorSpaces);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetColorSpaceFB(
+ XrSession session,
+ const XrColorSpaceFB colorspace);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_hand_tracking_mesh 1
+#define XR_FB_hand_tracking_mesh_SPEC_VERSION 1
+#define XR_FB_HAND_TRACKING_MESH_EXTENSION_NAME "XR_FB_hand_tracking_mesh"
+typedef struct XrVector4sFB {
+ int16_t x;
+ int16_t y;
+ int16_t z;
+ int16_t w;
+} XrVector4sFB;
+
+typedef struct XrHandTrackingMeshFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t jointCapacityInput;
+ uint32_t jointCountOutput;
+ XrPosef* jointBindPoses;
+ float* jointRadii;
+ XrHandJointEXT* jointParents;
+ uint32_t vertexCapacityInput;
+ uint32_t vertexCountOutput;
+ XrVector3f* vertexPositions;
+ XrVector3f* vertexNormals;
+ XrVector2f* vertexUVs;
+ XrVector4sFB* vertexBlendIndices;
+ XrVector4f* vertexBlendWeights;
+ uint32_t indexCapacityInput;
+ uint32_t indexCountOutput;
+ int16_t* indices;
+} XrHandTrackingMeshFB;
+
+// XrHandTrackingScaleFB extends XrHandJointsLocateInfoEXT
+typedef struct XrHandTrackingScaleFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ float sensorOutput;
+ float currentOutput;
+ XrBool32 overrideHandScale;
+ float overrideValueInput;
+} XrHandTrackingScaleFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetHandMeshFB)(XrHandTrackerEXT handTracker, XrHandTrackingMeshFB* mesh);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetHandMeshFB(
+ XrHandTrackerEXT handTracker,
+ XrHandTrackingMeshFB* mesh);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_hand_tracking_aim 1
+#define XR_FB_hand_tracking_aim_SPEC_VERSION 1
+#define XR_FB_HAND_TRACKING_AIM_EXTENSION_NAME "XR_FB_hand_tracking_aim"
+typedef XrFlags64 XrHandTrackingAimFlagsFB;
+
+// Flag bits for XrHandTrackingAimFlagsFB
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB = 0x00000001;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_VALID_BIT_FB = 0x00000002;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB = 0x00000004;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB = 0x00000008;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB = 0x00000010;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB = 0x00000020;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB = 0x00000040;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB = 0x00000080;
+static const XrHandTrackingAimFlagsFB XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB = 0x00000100;
+
+// XrHandTrackingAimStateFB extends XrHandJointsLocateInfoEXT
+typedef struct XrHandTrackingAimStateFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrHandTrackingAimFlagsFB status;
+ XrPosef aimPose;
+ float pinchStrengthIndex;
+ float pinchStrengthMiddle;
+ float pinchStrengthRing;
+ float pinchStrengthLittle;
+} XrHandTrackingAimStateFB;
+
+
+
+#define XR_FB_hand_tracking_capsules 1
+#define XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB 2
+#define XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT XR_HAND_TRACKING_CAPSULE_POINT_COUNT_FB
+#define XR_HAND_TRACKING_CAPSULE_COUNT_FB 19
+#define XR_FB_HAND_TRACKING_CAPSULE_COUNT XR_HAND_TRACKING_CAPSULE_COUNT_FB
+#define XR_FB_hand_tracking_capsules_SPEC_VERSION 2
+#define XR_FB_HAND_TRACKING_CAPSULES_EXTENSION_NAME "XR_FB_hand_tracking_capsules"
+typedef struct XrHandCapsuleFB {
+ XrVector3f points[XR_FB_HAND_TRACKING_CAPSULE_POINT_COUNT];
+ float radius;
+ XrHandJointEXT joint;
+} XrHandCapsuleFB;
+
+// XrHandTrackingCapsulesStateFB extends XrHandJointsLocateInfoEXT
+typedef struct XrHandTrackingCapsulesStateFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrHandCapsuleFB capsules[XR_FB_HAND_TRACKING_CAPSULE_COUNT];
+} XrHandTrackingCapsulesStateFB;
+
+
+
+#define XR_FB_foveation 1
+XR_DEFINE_HANDLE(XrFoveationProfileFB)
+#define XR_FB_foveation_SPEC_VERSION 1
+#define XR_FB_FOVEATION_EXTENSION_NAME "XR_FB_foveation"
+typedef XrFlags64 XrSwapchainCreateFoveationFlagsFB;
+
+// Flag bits for XrSwapchainCreateFoveationFlagsFB
+static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB = 0x00000001;
+static const XrSwapchainCreateFoveationFlagsFB XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB = 0x00000002;
+
+typedef XrFlags64 XrSwapchainStateFoveationFlagsFB;
+
+// Flag bits for XrSwapchainStateFoveationFlagsFB
+
+typedef struct XrFoveationProfileCreateInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+} XrFoveationProfileCreateInfoFB;
+
+// XrSwapchainCreateInfoFoveationFB extends XrSwapchainCreateInfo
+typedef struct XrSwapchainCreateInfoFoveationFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSwapchainCreateFoveationFlagsFB flags;
+} XrSwapchainCreateInfoFoveationFB;
+
+typedef struct XrSwapchainStateFoveationFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrSwapchainStateFoveationFlagsFB flags;
+ XrFoveationProfileFB profile;
+} XrSwapchainStateFoveationFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateFoveationProfileFB)(XrSession session, const XrFoveationProfileCreateInfoFB* createInfo, XrFoveationProfileFB* profile);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyFoveationProfileFB)(XrFoveationProfileFB profile);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateFoveationProfileFB(
+ XrSession session,
+ const XrFoveationProfileCreateInfoFB* createInfo,
+ XrFoveationProfileFB* profile);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyFoveationProfileFB(
+ XrFoveationProfileFB profile);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_foveation_configuration 1
+#define XR_FB_foveation_configuration_SPEC_VERSION 1
+#define XR_FB_FOVEATION_CONFIGURATION_EXTENSION_NAME "XR_FB_foveation_configuration"
+
+typedef enum XrFoveationLevelFB {
+ XR_FOVEATION_LEVEL_NONE_FB = 0,
+ XR_FOVEATION_LEVEL_LOW_FB = 1,
+ XR_FOVEATION_LEVEL_MEDIUM_FB = 2,
+ XR_FOVEATION_LEVEL_HIGH_FB = 3,
+ XR_FOVEATION_LEVEL_MAX_ENUM_FB = 0x7FFFFFFF
+} XrFoveationLevelFB;
+
+typedef enum XrFoveationDynamicFB {
+ XR_FOVEATION_DYNAMIC_DISABLED_FB = 0,
+ XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB = 1,
+ XR_FOVEATION_DYNAMIC_MAX_ENUM_FB = 0x7FFFFFFF
+} XrFoveationDynamicFB;
+// XrFoveationLevelProfileCreateInfoFB extends XrFoveationProfileCreateInfoFB
+typedef struct XrFoveationLevelProfileCreateInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrFoveationLevelFB level;
+ float verticalOffset;
+ XrFoveationDynamicFB dynamic;
+} XrFoveationLevelProfileCreateInfoFB;
+
+
+
+#define XR_FB_keyboard_tracking 1
+#define XR_FB_keyboard_tracking_SPEC_VERSION 1
+#define XR_FB_KEYBOARD_TRACKING_EXTENSION_NAME "XR_FB_keyboard_tracking"
+#define XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB 128
+typedef XrFlags64 XrKeyboardTrackingFlagsFB;
+
+// Flag bits for XrKeyboardTrackingFlagsFB
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_EXISTS_BIT_FB = 0x00000001;
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_LOCAL_BIT_FB = 0x00000002;
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_REMOTE_BIT_FB = 0x00000004;
+static const XrKeyboardTrackingFlagsFB XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB = 0x00000008;
+
+typedef XrFlags64 XrKeyboardTrackingQueryFlagsFB;
+
+// Flag bits for XrKeyboardTrackingQueryFlagsFB
+static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB = 0x00000002;
+static const XrKeyboardTrackingQueryFlagsFB XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB = 0x00000004;
+
+// XrSystemKeyboardTrackingPropertiesFB extends XrSystemProperties
+typedef struct XrSystemKeyboardTrackingPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsKeyboardTracking;
+} XrSystemKeyboardTrackingPropertiesFB;
+
+typedef struct XrKeyboardTrackingDescriptionFB {
+ uint64_t trackedKeyboardId;
+ XrVector3f size;
+ XrKeyboardTrackingFlagsFB flags;
+ char name[XR_MAX_KEYBOARD_TRACKING_NAME_SIZE_FB];
+} XrKeyboardTrackingDescriptionFB;
+
+typedef struct XrKeyboardSpaceCreateInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint64_t trackedKeyboardId;
+} XrKeyboardSpaceCreateInfoFB;
+
+typedef struct XrKeyboardTrackingQueryFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrKeyboardTrackingQueryFlagsFB flags;
+} XrKeyboardTrackingQueryFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrQuerySystemTrackedKeyboardFB)(XrSession session, const XrKeyboardTrackingQueryFB* queryInfo, XrKeyboardTrackingDescriptionFB* keyboard);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateKeyboardSpaceFB)(XrSession session, const XrKeyboardSpaceCreateInfoFB* createInfo, XrSpace* keyboardSpace);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrQuerySystemTrackedKeyboardFB(
+ XrSession session,
+ const XrKeyboardTrackingQueryFB* queryInfo,
+ XrKeyboardTrackingDescriptionFB* keyboard);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateKeyboardSpaceFB(
+ XrSession session,
+ const XrKeyboardSpaceCreateInfoFB* createInfo,
+ XrSpace* keyboardSpace);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_triangle_mesh 1
+XR_DEFINE_HANDLE(XrTriangleMeshFB)
+#define XR_FB_triangle_mesh_SPEC_VERSION 1
+#define XR_FB_TRIANGLE_MESH_EXTENSION_NAME "XR_FB_triangle_mesh"
+
+typedef enum XrWindingOrderFB {
+ XR_WINDING_ORDER_UNKNOWN_FB = 0,
+ XR_WINDING_ORDER_CW_FB = 1,
+ XR_WINDING_ORDER_CCW_FB = 2,
+ XR_WINDING_ORDER_MAX_ENUM_FB = 0x7FFFFFFF
+} XrWindingOrderFB;
+typedef XrFlags64 XrTriangleMeshFlagsFB;
+
+// Flag bits for XrTriangleMeshFlagsFB
+static const XrTriangleMeshFlagsFB XR_TRIANGLE_MESH_MUTABLE_BIT_FB = 0x00000001;
+
+typedef struct XrTriangleMeshCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrTriangleMeshFlagsFB flags;
+ XrWindingOrderFB windingOrder;
+ uint32_t vertexCount;
+ const XrVector3f* vertexBuffer;
+ uint32_t triangleCount;
+ const uint32_t* indexBuffer;
+} XrTriangleMeshCreateInfoFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateTriangleMeshFB)(XrSession session, const XrTriangleMeshCreateInfoFB* createInfo, XrTriangleMeshFB* outTriangleMesh);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyTriangleMeshFB)(XrTriangleMeshFB mesh);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetVertexBufferFB)(XrTriangleMeshFB mesh, XrVector3f** outVertexBuffer);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshGetIndexBufferFB)(XrTriangleMeshFB mesh, uint32_t** outIndexBuffer);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginUpdateFB)(XrTriangleMeshFB mesh);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndUpdateFB)(XrTriangleMeshFB mesh, uint32_t vertexCount, uint32_t triangleCount);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshBeginVertexBufferUpdateFB)(XrTriangleMeshFB mesh, uint32_t* outVertexCount);
+typedef XrResult (XRAPI_PTR *PFN_xrTriangleMeshEndVertexBufferUpdateFB)(XrTriangleMeshFB mesh);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateTriangleMeshFB(
+ XrSession session,
+ const XrTriangleMeshCreateInfoFB* createInfo,
+ XrTriangleMeshFB* outTriangleMesh);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyTriangleMeshFB(
+ XrTriangleMeshFB mesh);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetVertexBufferFB(
+ XrTriangleMeshFB mesh,
+ XrVector3f** outVertexBuffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshGetIndexBufferFB(
+ XrTriangleMeshFB mesh,
+ uint32_t** outIndexBuffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginUpdateFB(
+ XrTriangleMeshFB mesh);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndUpdateFB(
+ XrTriangleMeshFB mesh,
+ uint32_t vertexCount,
+ uint32_t triangleCount);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshBeginVertexBufferUpdateFB(
+ XrTriangleMeshFB mesh,
+ uint32_t* outVertexCount);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTriangleMeshEndVertexBufferUpdateFB(
+ XrTriangleMeshFB mesh);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_passthrough 1
+XR_DEFINE_HANDLE(XrPassthroughFB)
+XR_DEFINE_HANDLE(XrPassthroughLayerFB)
+XR_DEFINE_HANDLE(XrGeometryInstanceFB)
+#define XR_FB_passthrough_SPEC_VERSION 1
+#define XR_FB_PASSTHROUGH_EXTENSION_NAME "XR_FB_passthrough"
+#define XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB 256
+
+typedef enum XrPassthroughLayerPurposeFB {
+ XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB = 0,
+ XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB = 1,
+ XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB = 1000203001,
+ XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB = 0x7FFFFFFF
+} XrPassthroughLayerPurposeFB;
+typedef XrFlags64 XrPassthroughFlagsFB;
+
+// Flag bits for XrPassthroughFlagsFB
+static const XrPassthroughFlagsFB XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB = 0x00000001;
+
+typedef XrFlags64 XrPassthroughStateChangedFlagsFB;
+
+// Flag bits for XrPassthroughStateChangedFlagsFB
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB = 0x00000001;
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB = 0x00000002;
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB = 0x00000004;
+static const XrPassthroughStateChangedFlagsFB XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB = 0x00000008;
+
+// XrSystemPassthroughPropertiesFB extends XrSystemProperties
+typedef struct XrSystemPassthroughPropertiesFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 supportsPassthrough;
+} XrSystemPassthroughPropertiesFB;
+
+typedef struct XrPassthroughCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughFlagsFB flags;
+} XrPassthroughCreateInfoFB;
+
+typedef struct XrPassthroughLayerCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughFB passthrough;
+ XrPassthroughFlagsFB flags;
+ XrPassthroughLayerPurposeFB purpose;
+} XrPassthroughLayerCreateInfoFB;
+
+// XrCompositionLayerPassthroughFB extends XrCompositionLayerBaseHeader
+typedef struct XrCompositionLayerPassthroughFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerFlags flags;
+ XrSpace space;
+ XrPassthroughLayerFB layerHandle;
+} XrCompositionLayerPassthroughFB;
+
+typedef struct XrGeometryInstanceCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughLayerFB layer;
+ XrTriangleMeshFB mesh;
+ XrSpace baseSpace;
+ XrPosef pose;
+ XrVector3f scale;
+} XrGeometryInstanceCreateInfoFB;
+
+typedef struct XrGeometryInstanceTransformFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpace baseSpace;
+ XrTime time;
+ XrPosef pose;
+ XrVector3f scale;
+} XrGeometryInstanceTransformFB;
+
+typedef struct XrPassthroughStyleFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float textureOpacityFactor;
+ XrColor4f edgeColor;
+} XrPassthroughStyleFB;
+
+typedef struct XrPassthroughColorMapMonoToRgbaFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrColor4f textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
+} XrPassthroughColorMapMonoToRgbaFB;
+
+typedef struct XrPassthroughColorMapMonoToMonoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint8_t textureColorMap[XR_PASSTHROUGH_COLOR_MAP_MONO_SIZE_FB];
+} XrPassthroughColorMapMonoToMonoFB;
+
+typedef struct XrEventDataPassthroughStateChangedFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrPassthroughStateChangedFlagsFB flags;
+} XrEventDataPassthroughStateChangedFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughFB)(XrSession session, const XrPassthroughCreateInfoFB* createInfo, XrPassthroughFB* outPassthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughFB)(XrPassthroughFB passthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughStartFB)(XrPassthroughFB passthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughPauseFB)(XrPassthroughFB passthrough);
+typedef XrResult (XRAPI_PTR *PFN_xrCreatePassthroughLayerFB)(XrSession session, const XrPassthroughLayerCreateInfoFB* createInfo, XrPassthroughLayerFB* outLayer);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyPassthroughLayerFB)(XrPassthroughLayerFB layer);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerPauseFB)(XrPassthroughLayerFB layer);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerResumeFB)(XrPassthroughLayerFB layer);
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetStyleFB)(XrPassthroughLayerFB layer, const XrPassthroughStyleFB* style);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateGeometryInstanceFB)(XrSession session, const XrGeometryInstanceCreateInfoFB* createInfo, XrGeometryInstanceFB* outGeometryInstance);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroyGeometryInstanceFB)(XrGeometryInstanceFB instance);
+typedef XrResult (XRAPI_PTR *PFN_xrGeometryInstanceSetTransformFB)(XrGeometryInstanceFB instance, const XrGeometryInstanceTransformFB* transformation);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughFB(
+ XrSession session,
+ const XrPassthroughCreateInfoFB* createInfo,
+ XrPassthroughFB* outPassthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughFB(
+ XrPassthroughFB passthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughStartFB(
+ XrPassthroughFB passthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughPauseFB(
+ XrPassthroughFB passthrough);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreatePassthroughLayerFB(
+ XrSession session,
+ const XrPassthroughLayerCreateInfoFB* createInfo,
+ XrPassthroughLayerFB* outLayer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyPassthroughLayerFB(
+ XrPassthroughLayerFB layer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerPauseFB(
+ XrPassthroughLayerFB layer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerResumeFB(
+ XrPassthroughLayerFB layer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetStyleFB(
+ XrPassthroughLayerFB layer,
+ const XrPassthroughStyleFB* style);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateGeometryInstanceFB(
+ XrSession session,
+ const XrGeometryInstanceCreateInfoFB* createInfo,
+ XrGeometryInstanceFB* outGeometryInstance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroyGeometryInstanceFB(
+ XrGeometryInstanceFB instance);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGeometryInstanceSetTransformFB(
+ XrGeometryInstanceFB instance,
+ const XrGeometryInstanceTransformFB* transformation);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_render_model 1
+
+#define XR_NULL_RENDER_MODEL_KEY_FB 0
+
+XR_DEFINE_ATOM(XrRenderModelKeyFB)
+#define XR_FB_render_model_SPEC_VERSION 1
+#define XR_FB_RENDER_MODEL_EXTENSION_NAME "XR_FB_render_model"
+#define XR_MAX_RENDER_MODEL_NAME_SIZE_FB 64
+typedef XrFlags64 XrRenderModelFlagsFB;
+
+// Flag bits for XrRenderModelFlagsFB
+
+typedef struct XrRenderModelPathInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrPath path;
+} XrRenderModelPathInfoFB;
+
+typedef struct XrRenderModelPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t vendorId;
+ char modelName[XR_MAX_RENDER_MODEL_NAME_SIZE_FB];
+ XrRenderModelKeyFB modelKey;
+ uint32_t modelVersion;
+ XrRenderModelFlagsFB flags;
+} XrRenderModelPropertiesFB;
+
+typedef struct XrRenderModelBufferFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t bufferCapacityInput;
+ uint32_t bufferCountOutput;
+ uint8_t* buffer;
+} XrRenderModelBufferFB;
+
+typedef struct XrRenderModelLoadInfoFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrRenderModelKeyFB modelKey;
+} XrRenderModelLoadInfoFB;
+
+// XrSystemRenderModelPropertiesFB extends XrSystemProperties
+typedef struct XrSystemRenderModelPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsRenderModelLoading;
+} XrSystemRenderModelPropertiesFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrEnumerateRenderModelPathsFB)(XrSession session, uint32_t pathCapacityInput, uint32_t* pathCountOutput, XrRenderModelPathInfoFB* paths);
+typedef XrResult (XRAPI_PTR *PFN_xrGetRenderModelPropertiesFB)(XrSession session, XrPath path, XrRenderModelPropertiesFB* properties);
+typedef XrResult (XRAPI_PTR *PFN_xrLoadRenderModelFB)(XrSession session, const XrRenderModelLoadInfoFB* info, XrRenderModelBufferFB* buffer);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateRenderModelPathsFB(
+ XrSession session,
+ uint32_t pathCapacityInput,
+ uint32_t* pathCountOutput,
+ XrRenderModelPathInfoFB* paths);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetRenderModelPropertiesFB(
+ XrSession session,
+ XrPath path,
+ XrRenderModelPropertiesFB* properties);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrLoadRenderModelFB(
+ XrSession session,
+ const XrRenderModelLoadInfoFB* info,
+ XrRenderModelBufferFB* buffer);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_VARJO_foveated_rendering 1
+#define XR_VARJO_foveated_rendering_SPEC_VERSION 2
+#define XR_VARJO_FOVEATED_RENDERING_EXTENSION_NAME "XR_VARJO_foveated_rendering"
+// XrViewLocateFoveatedRenderingVARJO extends XrViewLocateInfo
+typedef struct XrViewLocateFoveatedRenderingVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrBool32 foveatedRenderingActive;
+} XrViewLocateFoveatedRenderingVARJO;
+
+// XrFoveatedViewConfigurationViewVARJO extends XrViewConfigurationView
+typedef struct XrFoveatedViewConfigurationViewVARJO {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 foveatedRenderingActive;
+} XrFoveatedViewConfigurationViewVARJO;
+
+// XrSystemFoveatedRenderingPropertiesVARJO extends XrSystemProperties
+typedef struct XrSystemFoveatedRenderingPropertiesVARJO {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsFoveatedRendering;
+} XrSystemFoveatedRenderingPropertiesVARJO;
+
+
+
+#define XR_VARJO_composition_layer_depth_test 1
+#define XR_VARJO_composition_layer_depth_test_SPEC_VERSION 2
+#define XR_VARJO_COMPOSITION_LAYER_DEPTH_TEST_EXTENSION_NAME "XR_VARJO_composition_layer_depth_test"
+// XrCompositionLayerDepthTestVARJO extends XrCompositionLayerProjection
+typedef struct XrCompositionLayerDepthTestVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float depthTestRangeNearZ;
+ float depthTestRangeFarZ;
+} XrCompositionLayerDepthTestVARJO;
+
+
+
+#define XR_VARJO_environment_depth_estimation 1
+#define XR_VARJO_environment_depth_estimation_SPEC_VERSION 1
+#define XR_VARJO_ENVIRONMENT_DEPTH_ESTIMATION_EXTENSION_NAME "XR_VARJO_environment_depth_estimation"
+typedef XrResult (XRAPI_PTR *PFN_xrSetEnvironmentDepthEstimationVARJO)(XrSession session, XrBool32 enabled);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetEnvironmentDepthEstimationVARJO(
+ XrSession session,
+ XrBool32 enabled);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_VARJO_marker_tracking 1
+#define XR_VARJO_marker_tracking_SPEC_VERSION 1
+#define XR_VARJO_MARKER_TRACKING_EXTENSION_NAME "XR_VARJO_marker_tracking"
+// XrSystemMarkerTrackingPropertiesVARJO extends XrSystemProperties
+typedef struct XrSystemMarkerTrackingPropertiesVARJO {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrBool32 supportsMarkerTracking;
+} XrSystemMarkerTrackingPropertiesVARJO;
+
+typedef struct XrEventDataMarkerTrackingUpdateVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint64_t markerId;
+ XrBool32 isActive;
+ XrBool32 isPredicted;
+ XrTime time;
+} XrEventDataMarkerTrackingUpdateVARJO;
+
+typedef struct XrMarkerSpaceCreateInfoVARJO {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint64_t markerId;
+ XrPosef poseInMarkerSpace;
+} XrMarkerSpaceCreateInfoVARJO;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingVARJO)(XrSession session, XrBool32 enabled);
+typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingTimeoutVARJO)(XrSession session, uint64_t markerId, XrDuration timeout);
+typedef XrResult (XRAPI_PTR *PFN_xrSetMarkerTrackingPredictionVARJO)(XrSession session, uint64_t markerId, XrBool32 enabled);
+typedef XrResult (XRAPI_PTR *PFN_xrGetMarkerSizeVARJO)(XrSession session, uint64_t markerId, XrExtent2Df* size);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateMarkerSpaceVARJO)(XrSession session, const XrMarkerSpaceCreateInfoVARJO* createInfo, XrSpace* space);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingVARJO(
+ XrSession session,
+ XrBool32 enabled);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingTimeoutVARJO(
+ XrSession session,
+ uint64_t markerId,
+ XrDuration timeout);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrSetMarkerTrackingPredictionVARJO(
+ XrSession session,
+ uint64_t markerId,
+ XrBool32 enabled);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetMarkerSizeVARJO(
+ XrSession session,
+ uint64_t markerId,
+ XrExtent2Df* size);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateMarkerSpaceVARJO(
+ XrSession session,
+ const XrMarkerSpaceCreateInfoVARJO* createInfo,
+ XrSpace* space);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_MSFT_spatial_anchor_persistence 1
+XR_DEFINE_HANDLE(XrSpatialAnchorStoreConnectionMSFT)
+#define XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT 256
+#define XR_MSFT_spatial_anchor_persistence_SPEC_VERSION 2
+#define XR_MSFT_SPATIAL_ANCHOR_PERSISTENCE_EXTENSION_NAME "XR_MSFT_spatial_anchor_persistence"
+typedef struct XrSpatialAnchorPersistenceNameMSFT {
+ char name[XR_MAX_SPATIAL_ANCHOR_NAME_SIZE_MSFT];
+} XrSpatialAnchorPersistenceNameMSFT;
+
+typedef struct XrSpatialAnchorPersistenceInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName;
+ XrSpatialAnchorMSFT spatialAnchor;
+} XrSpatialAnchorPersistenceInfoMSFT;
+
+typedef struct XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore;
+ XrSpatialAnchorPersistenceNameMSFT spatialAnchorPersistenceName;
+} XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorStoreConnectionMSFT)(XrSession session, XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore);
+typedef XrResult (XRAPI_PTR *PFN_xrDestroySpatialAnchorStoreConnectionMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+typedef XrResult (XRAPI_PTR *PFN_xrPersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo);
+typedef XrResult (XRAPI_PTR *PFN_xrEnumeratePersistedSpatialAnchorNamesMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, uint32_t spatialAnchorNamesCapacityInput, uint32_t* spatialAnchorNamesCountOutput, XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPersistedNameMSFT)(XrSession session, const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo, XrSpatialAnchorMSFT* spatialAnchor);
+typedef XrResult (XRAPI_PTR *PFN_xrUnpersistSpatialAnchorMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore, const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName);
+typedef XrResult (XRAPI_PTR *PFN_xrClearSpatialAnchorStoreMSFT)(XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorStoreConnectionMSFT(
+ XrSession session,
+ XrSpatialAnchorStoreConnectionMSFT* spatialAnchorStore);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpatialAnchorStoreConnectionMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrPersistSpatialAnchorMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
+ const XrSpatialAnchorPersistenceInfoMSFT* spatialAnchorPersistenceInfo);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrEnumeratePersistedSpatialAnchorNamesMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
+ uint32_t spatialAnchorNamesCapacityInput,
+ uint32_t* spatialAnchorNamesCountOutput,
+ XrSpatialAnchorPersistenceNameMSFT* persistedAnchorNames);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPersistedNameMSFT(
+ XrSession session,
+ const XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT* spatialAnchorCreateInfo,
+ XrSpatialAnchorMSFT* spatialAnchor);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrUnpersistSpatialAnchorMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore,
+ const XrSpatialAnchorPersistenceNameMSFT* spatialAnchorPersistenceName);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrClearSpatialAnchorStoreMSFT(
+ XrSpatialAnchorStoreConnectionMSFT spatialAnchorStore);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_space_warp 1
+#define XR_FB_space_warp_SPEC_VERSION 1
+#define XR_FB_SPACE_WARP_EXTENSION_NAME "XR_FB_space_warp"
+typedef XrFlags64 XrCompositionLayerSpaceWarpInfoFlagsFB;
+
+// Flag bits for XrCompositionLayerSpaceWarpInfoFlagsFB
+
+// XrCompositionLayerSpaceWarpInfoFB extends XrCompositionLayerProjectionView
+typedef struct XrCompositionLayerSpaceWarpInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrCompositionLayerSpaceWarpInfoFlagsFB layerFlags;
+ XrSwapchainSubImage motionVectorSubImage;
+ XrPosef appSpaceDeltaPose;
+ XrSwapchainSubImage depthSubImage;
+ float minDepth;
+ float maxDepth;
+ float nearZ;
+ float farZ;
+} XrCompositionLayerSpaceWarpInfoFB;
+
+// XrSystemSpaceWarpPropertiesFB extends XrSystemProperties
+typedef struct XrSystemSpaceWarpPropertiesFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t recommendedMotionVectorImageRectWidth;
+ uint32_t recommendedMotionVectorImageRectHeight;
+} XrSystemSpaceWarpPropertiesFB;
+
+
+
+#define XR_ALMALENCE_digital_lens_control 1
+#define XR_ALMALENCE_digital_lens_control_SPEC_VERSION 1
+#define XR_ALMALENCE_DIGITAL_LENS_CONTROL_EXTENSION_NAME "XR_ALMALENCE_digital_lens_control"
+typedef XrFlags64 XrDigitalLensControlFlagsALMALENCE;
+
+// Flag bits for XrDigitalLensControlFlagsALMALENCE
+static const XrDigitalLensControlFlagsALMALENCE XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE = 0x00000001;
+
+typedef struct XrDigitalLensControlALMALENCE {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrDigitalLensControlFlagsALMALENCE flags;
+} XrDigitalLensControlALMALENCE;
+
+typedef XrResult (XRAPI_PTR *PFN_xrSetDigitalLensControlALMALENCE)(XrSession session, const XrDigitalLensControlALMALENCE* digitalLensControl);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetDigitalLensControlALMALENCE(
+ XrSession session,
+ const XrDigitalLensControlALMALENCE* digitalLensControl);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_FB_passthrough_keyboard_hands 1
+#define XR_FB_passthrough_keyboard_hands_SPEC_VERSION 1
+#define XR_FB_PASSTHROUGH_KEYBOARD_HANDS_EXTENSION_NAME "XR_FB_passthrough_keyboard_hands"
+typedef struct XrPassthroughKeyboardHandsIntensityFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ float leftHandIntensity;
+ float rightHandIntensity;
+} XrPassthroughKeyboardHandsIntensityFB;
+
+typedef XrResult (XRAPI_PTR *PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB)(XrPassthroughLayerFB layer, const XrPassthroughKeyboardHandsIntensityFB* intensity);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrPassthroughLayerSetKeyboardHandsIntensityFB(
+ XrPassthroughLayerFB layer,
+ const XrPassthroughKeyboardHandsIntensityFB* intensity);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+
+
+#define XR_EXT_uuid 1
+#define XR_EXT_uuid_SPEC_VERSION 1
+#define XR_EXT_UUID_EXTENSION_NAME "XR_EXT_uuid"
+#define XR_UUID_SIZE_EXT 16
+typedef struct XrUuidEXT {
+ uint8_t data[XR_UUID_SIZE_EXT];
+} XrUuidEXT;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_platform.h b/thirdparty/openxr/include/openxr/openxr_platform.h
new file mode 100644
index 0000000000..eb5e5f8c4b
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr_platform.h
@@ -0,0 +1,675 @@
+#ifndef OPENXR_PLATFORM_H_
+#define OPENXR_PLATFORM_H_ 1
+
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+/*
+** This header is generated from the Khronos OpenXR XML API Registry.
+**
+*/
+
+#include "openxr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_android_thread_settings 1
+#define XR_KHR_android_thread_settings_SPEC_VERSION 5
+#define XR_KHR_ANDROID_THREAD_SETTINGS_EXTENSION_NAME "XR_KHR_android_thread_settings"
+
+typedef enum XrAndroidThreadTypeKHR {
+ XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR = 1,
+ XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR = 2,
+ XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR = 3,
+ XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR = 4,
+ XR_ANDROID_THREAD_TYPE_MAX_ENUM_KHR = 0x7FFFFFFF
+} XrAndroidThreadTypeKHR;
+typedef XrResult (XRAPI_PTR *PFN_xrSetAndroidApplicationThreadKHR)(XrSession session, XrAndroidThreadTypeKHR threadType, uint32_t threadId);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrSetAndroidApplicationThreadKHR(
+ XrSession session,
+ XrAndroidThreadTypeKHR threadType,
+ uint32_t threadId);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_android_surface_swapchain 1
+#define XR_KHR_android_surface_swapchain_SPEC_VERSION 4
+#define XR_KHR_ANDROID_SURFACE_SWAPCHAIN_EXTENSION_NAME "XR_KHR_android_surface_swapchain"
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSwapchainAndroidSurfaceKHR)(XrSession session, const XrSwapchainCreateInfo* info, XrSwapchain* swapchain, jobject* surface);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchainAndroidSurfaceKHR(
+ XrSession session,
+ const XrSwapchainCreateInfo* info,
+ XrSwapchain* swapchain,
+ jobject* surface);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_android_create_instance 1
+#define XR_KHR_android_create_instance_SPEC_VERSION 3
+#define XR_KHR_ANDROID_CREATE_INSTANCE_EXTENSION_NAME "XR_KHR_android_create_instance"
+// XrInstanceCreateInfoAndroidKHR extends XrInstanceCreateInfo
+typedef struct XrInstanceCreateInfoAndroidKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ void* XR_MAY_ALIAS applicationVM;
+ void* XR_MAY_ALIAS applicationActivity;
+} XrInstanceCreateInfoAndroidKHR;
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_KHR_vulkan_swapchain_format_list 1
+#define XR_KHR_vulkan_swapchain_format_list_SPEC_VERSION 4
+#define XR_KHR_VULKAN_SWAPCHAIN_FORMAT_LIST_EXTENSION_NAME "XR_KHR_vulkan_swapchain_format_list"
+typedef struct XrVulkanSwapchainFormatListCreateInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ uint32_t viewFormatCount;
+ const VkFormat* viewFormats;
+} XrVulkanSwapchainFormatListCreateInfoKHR;
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL
+
+#define XR_KHR_opengl_enable 1
+#define XR_KHR_opengl_enable_SPEC_VERSION 10
+#define XR_KHR_OPENGL_ENABLE_EXTENSION_NAME "XR_KHR_opengl_enable"
+#ifdef XR_USE_PLATFORM_WIN32
+// XrGraphicsBindingOpenGLWin32KHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLWin32KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ HDC hDC;
+ HGLRC hGLRC;
+} XrGraphicsBindingOpenGLWin32KHR;
+#endif // XR_USE_PLATFORM_WIN32
+
+#ifdef XR_USE_PLATFORM_XLIB
+// XrGraphicsBindingOpenGLXlibKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLXlibKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ Display* xDisplay;
+ uint32_t visualid;
+ GLXFBConfig glxFBConfig;
+ GLXDrawable glxDrawable;
+ GLXContext glxContext;
+} XrGraphicsBindingOpenGLXlibKHR;
+#endif // XR_USE_PLATFORM_XLIB
+
+#ifdef XR_USE_PLATFORM_XCB
+// XrGraphicsBindingOpenGLXcbKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLXcbKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ xcb_connection_t* connection;
+ uint32_t screenNumber;
+ xcb_glx_fbconfig_t fbconfigid;
+ xcb_visualid_t visualid;
+ xcb_glx_drawable_t glxDrawable;
+ xcb_glx_context_t glxContext;
+} XrGraphicsBindingOpenGLXcbKHR;
+#endif // XR_USE_PLATFORM_XCB
+
+#ifdef XR_USE_PLATFORM_WAYLAND
+// XrGraphicsBindingOpenGLWaylandKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLWaylandKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ struct wl_display* display;
+} XrGraphicsBindingOpenGLWaylandKHR;
+#endif // XR_USE_PLATFORM_WAYLAND
+
+typedef struct XrSwapchainImageOpenGLKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t image;
+} XrSwapchainImageOpenGLKHR;
+
+typedef struct XrGraphicsRequirementsOpenGLKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
+} XrGraphicsRequirementsOpenGLKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLGraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsOpenGLKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_OPENGL */
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+
+#define XR_KHR_opengl_es_enable 1
+#define XR_KHR_opengl_es_enable_SPEC_VERSION 8
+#define XR_KHR_OPENGL_ES_ENABLE_EXTENSION_NAME "XR_KHR_opengl_es_enable"
+#ifdef XR_USE_PLATFORM_ANDROID
+// XrGraphicsBindingOpenGLESAndroidKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingOpenGLESAndroidKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ EGLDisplay display;
+ EGLConfig config;
+ EGLContext context;
+} XrGraphicsBindingOpenGLESAndroidKHR;
+#endif // XR_USE_PLATFORM_ANDROID
+
+typedef struct XrSwapchainImageOpenGLESKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t image;
+} XrSwapchainImageOpenGLESKHR;
+
+typedef struct XrGraphicsRequirementsOpenGLESKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
+} XrGraphicsRequirementsOpenGLESKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetOpenGLESGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetOpenGLESGraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsOpenGLESKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_KHR_vulkan_enable 1
+#define XR_KHR_vulkan_enable_SPEC_VERSION 8
+#define XR_KHR_VULKAN_ENABLE_EXTENSION_NAME "XR_KHR_vulkan_enable"
+// XrGraphicsBindingVulkanKHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingVulkanKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ VkInstance instance;
+ VkPhysicalDevice physicalDevice;
+ VkDevice device;
+ uint32_t queueFamilyIndex;
+ uint32_t queueIndex;
+} XrGraphicsBindingVulkanKHR;
+
+typedef struct XrSwapchainImageVulkanKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ VkImage image;
+} XrSwapchainImageVulkanKHR;
+
+typedef struct XrGraphicsRequirementsVulkanKHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ XrVersion minApiVersionSupported;
+ XrVersion maxApiVersionSupported;
+} XrGraphicsRequirementsVulkanKHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanInstanceExtensionsKHR)(XrInstance instance, XrSystemId systemId, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanDeviceExtensionsKHR)(XrInstance instance, XrSystemId systemId, uint32_t bufferCapacityInput, uint32_t* bufferCountOutput, char* buffer);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDeviceKHR)(XrInstance instance, XrSystemId systemId, VkInstance vkInstance, VkPhysicalDevice* vkPhysicalDevice);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanInstanceExtensionsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanDeviceExtensionsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsDeviceKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ VkInstance vkInstance,
+ VkPhysicalDevice* vkPhysicalDevice);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_GRAPHICS_API_D3D11
+
+#define XR_KHR_D3D11_enable 1
+#define XR_KHR_D3D11_enable_SPEC_VERSION 8
+#define XR_KHR_D3D11_ENABLE_EXTENSION_NAME "XR_KHR_D3D11_enable"
+// XrGraphicsBindingD3D11KHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingD3D11KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ ID3D11Device* device;
+} XrGraphicsBindingD3D11KHR;
+
+typedef struct XrSwapchainImageD3D11KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ ID3D11Texture2D* texture;
+} XrSwapchainImageD3D11KHR;
+
+typedef struct XrGraphicsRequirementsD3D11KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ LUID adapterLuid;
+ D3D_FEATURE_LEVEL minFeatureLevel;
+} XrGraphicsRequirementsD3D11KHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetD3D11GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D11KHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D11GraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsD3D11KHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_D3D11 */
+
+#ifdef XR_USE_GRAPHICS_API_D3D12
+
+#define XR_KHR_D3D12_enable 1
+#define XR_KHR_D3D12_enable_SPEC_VERSION 8
+#define XR_KHR_D3D12_ENABLE_EXTENSION_NAME "XR_KHR_D3D12_enable"
+// XrGraphicsBindingD3D12KHR extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingD3D12KHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ ID3D12Device* device;
+ ID3D12CommandQueue* queue;
+} XrGraphicsBindingD3D12KHR;
+
+typedef struct XrSwapchainImageD3D12KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ ID3D12Resource* texture;
+} XrSwapchainImageD3D12KHR;
+
+typedef struct XrGraphicsRequirementsD3D12KHR {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ LUID adapterLuid;
+ D3D_FEATURE_LEVEL minFeatureLevel;
+} XrGraphicsRequirementsD3D12KHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrGetD3D12GraphicsRequirementsKHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsD3D12KHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetD3D12GraphicsRequirementsKHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsD3D12KHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_D3D12 */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_KHR_win32_convert_performance_counter_time 1
+#define XR_KHR_win32_convert_performance_counter_time_SPEC_VERSION 1
+#define XR_KHR_WIN32_CONVERT_PERFORMANCE_COUNTER_TIME_EXTENSION_NAME "XR_KHR_win32_convert_performance_counter_time"
+typedef XrResult (XRAPI_PTR *PFN_xrConvertWin32PerformanceCounterToTimeKHR)(XrInstance instance, const LARGE_INTEGER* performanceCounter, XrTime* time);
+typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToWin32PerformanceCounterKHR)(XrInstance instance, XrTime time, LARGE_INTEGER* performanceCounter);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertWin32PerformanceCounterToTimeKHR(
+ XrInstance instance,
+ const LARGE_INTEGER* performanceCounter,
+ XrTime* time);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToWin32PerformanceCounterKHR(
+ XrInstance instance,
+ XrTime time,
+ LARGE_INTEGER* performanceCounter);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_TIMESPEC
+
+#define XR_KHR_convert_timespec_time 1
+#define XR_KHR_convert_timespec_time_SPEC_VERSION 1
+#define XR_KHR_CONVERT_TIMESPEC_TIME_EXTENSION_NAME "XR_KHR_convert_timespec_time"
+typedef XrResult (XRAPI_PTR *PFN_xrConvertTimespecTimeToTimeKHR)(XrInstance instance, const struct timespec* timespecTime, XrTime* time);
+typedef XrResult (XRAPI_PTR *PFN_xrConvertTimeToTimespecTimeKHR)(XrInstance instance, XrTime time, struct timespec* timespecTime);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimespecTimeToTimeKHR(
+ XrInstance instance,
+ const struct timespec* timespecTime,
+ XrTime* time);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrConvertTimeToTimespecTimeKHR(
+ XrInstance instance,
+ XrTime time,
+ struct timespec* timespecTime);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_TIMESPEC */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_KHR_loader_init_android 1
+#define XR_KHR_loader_init_android_SPEC_VERSION 1
+#define XR_KHR_LOADER_INIT_ANDROID_EXTENSION_NAME "XR_KHR_loader_init_android"
+typedef struct XrLoaderInitInfoAndroidKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ void* XR_MAY_ALIAS applicationVM;
+ void* XR_MAY_ALIAS applicationContext;
+} XrLoaderInitInfoAndroidKHR;
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_KHR_vulkan_enable2 1
+#define XR_KHR_vulkan_enable2_SPEC_VERSION 2
+#define XR_KHR_VULKAN_ENABLE2_EXTENSION_NAME "XR_KHR_vulkan_enable2"
+typedef XrFlags64 XrVulkanInstanceCreateFlagsKHR;
+
+// Flag bits for XrVulkanInstanceCreateFlagsKHR
+
+typedef XrFlags64 XrVulkanDeviceCreateFlagsKHR;
+
+// Flag bits for XrVulkanDeviceCreateFlagsKHR
+
+typedef struct XrVulkanInstanceCreateInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ XrVulkanInstanceCreateFlagsKHR createFlags;
+ PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
+ const VkInstanceCreateInfo* vulkanCreateInfo;
+ const VkAllocationCallbacks* vulkanAllocator;
+} XrVulkanInstanceCreateInfoKHR;
+
+typedef struct XrVulkanDeviceCreateInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ XrVulkanDeviceCreateFlagsKHR createFlags;
+ PFN_vkGetInstanceProcAddr pfnGetInstanceProcAddr;
+ VkPhysicalDevice vulkanPhysicalDevice;
+ const VkDeviceCreateInfo* vulkanCreateInfo;
+ const VkAllocationCallbacks* vulkanAllocator;
+} XrVulkanDeviceCreateInfoKHR;
+
+typedef XrGraphicsBindingVulkanKHR XrGraphicsBindingVulkan2KHR;
+
+typedef struct XrVulkanGraphicsDeviceGetInfoKHR {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrSystemId systemId;
+ VkInstance vulkanInstance;
+} XrVulkanGraphicsDeviceGetInfoKHR;
+
+typedef XrSwapchainImageVulkanKHR XrSwapchainImageVulkan2KHR;
+
+typedef XrGraphicsRequirementsVulkanKHR XrGraphicsRequirementsVulkan2KHR;
+
+typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanInstanceKHR)(XrInstance instance, const XrVulkanInstanceCreateInfoKHR* createInfo, VkInstance* vulkanInstance, VkResult* vulkanResult);
+typedef XrResult (XRAPI_PTR *PFN_xrCreateVulkanDeviceKHR)(XrInstance instance, const XrVulkanDeviceCreateInfoKHR* createInfo, VkDevice* vulkanDevice, VkResult* vulkanResult);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsDevice2KHR)(XrInstance instance, const XrVulkanGraphicsDeviceGetInfoKHR* getInfo, VkPhysicalDevice* vulkanPhysicalDevice);
+typedef XrResult (XRAPI_PTR *PFN_xrGetVulkanGraphicsRequirements2KHR)(XrInstance instance, XrSystemId systemId, XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanInstanceKHR(
+ XrInstance instance,
+ const XrVulkanInstanceCreateInfoKHR* createInfo,
+ VkInstance* vulkanInstance,
+ VkResult* vulkanResult);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateVulkanDeviceKHR(
+ XrInstance instance,
+ const XrVulkanDeviceCreateInfoKHR* createInfo,
+ VkDevice* vulkanDevice,
+ VkResult* vulkanResult);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsDevice2KHR(
+ XrInstance instance,
+ const XrVulkanGraphicsDeviceGetInfoKHR* getInfo,
+ VkPhysicalDevice* vulkanPhysicalDevice);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetVulkanGraphicsRequirements2KHR(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrGraphicsRequirementsVulkanKHR* graphicsRequirements);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_PLATFORM_EGL
+
+#define XR_MNDX_egl_enable 1
+#define XR_MNDX_egl_enable_SPEC_VERSION 1
+#define XR_MNDX_EGL_ENABLE_EXTENSION_NAME "XR_MNDX_egl_enable"
+// XrGraphicsBindingEGLMNDX extends XrSessionCreateInfo
+typedef struct XrGraphicsBindingEGLMNDX {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ PFNEGLGETPROCADDRESSPROC getProcAddress;
+ EGLDisplay display;
+ EGLConfig config;
+ EGLContext context;
+} XrGraphicsBindingEGLMNDX;
+
+#endif /* XR_USE_PLATFORM_EGL */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_MSFT_perception_anchor_interop 1
+#define XR_MSFT_perception_anchor_interop_SPEC_VERSION 1
+#define XR_MSFT_PERCEPTION_ANCHOR_INTEROP_EXTENSION_NAME "XR_MSFT_perception_anchor_interop"
+typedef XrResult (XRAPI_PTR *PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT)(XrSession session, IUnknown* perceptionAnchor, XrSpatialAnchorMSFT* anchor);
+typedef XrResult (XRAPI_PTR *PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT)(XrSession session, XrSpatialAnchorMSFT anchor, IUnknown** perceptionAnchor);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrCreateSpatialAnchorFromPerceptionAnchorMSFT(
+ XrSession session,
+ IUnknown* perceptionAnchor,
+ XrSpatialAnchorMSFT* anchor);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrTryGetPerceptionAnchorFromSpatialAnchorMSFT(
+ XrSession session,
+ XrSpatialAnchorMSFT anchor,
+ IUnknown** perceptionAnchor);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_MSFT_holographic_window_attachment 1
+#define XR_MSFT_holographic_window_attachment_SPEC_VERSION 1
+#define XR_MSFT_HOLOGRAPHIC_WINDOW_ATTACHMENT_EXTENSION_NAME "XR_MSFT_holographic_window_attachment"
+#ifdef XR_USE_PLATFORM_WIN32
+// XrHolographicWindowAttachmentMSFT extends XrSessionCreateInfo
+typedef struct XrHolographicWindowAttachmentMSFT {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ IUnknown* holographicSpace;
+ IUnknown* coreWindow;
+} XrHolographicWindowAttachmentMSFT;
+#endif // XR_USE_PLATFORM_WIN32
+
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_FB_android_surface_swapchain_create 1
+#define XR_FB_android_surface_swapchain_create_SPEC_VERSION 1
+#define XR_FB_ANDROID_SURFACE_SWAPCHAIN_CREATE_EXTENSION_NAME "XR_FB_android_surface_swapchain_create"
+typedef XrFlags64 XrAndroidSurfaceSwapchainFlagsFB;
+
+// Flag bits for XrAndroidSurfaceSwapchainFlagsFB
+static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB = 0x00000001;
+static const XrAndroidSurfaceSwapchainFlagsFB XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB = 0x00000002;
+
+#ifdef XR_USE_PLATFORM_ANDROID
+// XrAndroidSurfaceSwapchainCreateInfoFB extends XrSwapchainCreateInfo
+typedef struct XrAndroidSurfaceSwapchainCreateInfoFB {
+ XrStructureType type;
+ const void* XR_MAY_ALIAS next;
+ XrAndroidSurfaceSwapchainFlagsFB createFlags;
+} XrAndroidSurfaceSwapchainCreateInfoFB;
+#endif // XR_USE_PLATFORM_ANDROID
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#define XR_OCULUS_audio_device_guid 1
+#define XR_OCULUS_audio_device_guid_SPEC_VERSION 1
+#define XR_OCULUS_AUDIO_DEVICE_GUID_EXTENSION_NAME "XR_OCULUS_audio_device_guid"
+#define XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS 128
+typedef XrResult (XRAPI_PTR *PFN_xrGetAudioOutputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+typedef XrResult (XRAPI_PTR *PFN_xrGetAudioInputDeviceGuidOculus)(XrInstance instance, wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+
+#ifndef XR_NO_PROTOTYPES
+#ifdef XR_EXTENSION_PROTOTYPES
+XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioOutputDeviceGuidOculus(
+ XrInstance instance,
+ wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+
+XRAPI_ATTR XrResult XRAPI_CALL xrGetAudioInputDeviceGuidOculus(
+ XrInstance instance,
+ wchar_t buffer[XR_MAX_AUDIO_DEVICE_STR_SIZE_OCULUS]);
+#endif /* XR_EXTENSION_PROTOTYPES */
+#endif /* !XR_NO_PROTOTYPES */
+#endif /* XR_USE_PLATFORM_WIN32 */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_FB_foveation_vulkan 1
+#define XR_FB_foveation_vulkan_SPEC_VERSION 1
+#define XR_FB_FOVEATION_VULKAN_EXTENSION_NAME "XR_FB_foveation_vulkan"
+// XrSwapchainImageFoveationVulkanFB extends XrSwapchainImageVulkanKHR
+typedef struct XrSwapchainImageFoveationVulkanFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ VkImage image;
+ uint32_t width;
+ uint32_t height;
+} XrSwapchainImageFoveationVulkanFB;
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef XR_USE_PLATFORM_ANDROID
+
+#define XR_FB_swapchain_update_state_android_surface 1
+#define XR_FB_swapchain_update_state_android_surface_SPEC_VERSION 1
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_ANDROID_SURFACE_EXTENSION_NAME "XR_FB_swapchain_update_state_android_surface"
+#ifdef XR_USE_PLATFORM_ANDROID
+typedef struct XrSwapchainStateAndroidSurfaceDimensionsFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ uint32_t width;
+ uint32_t height;
+} XrSwapchainStateAndroidSurfaceDimensionsFB;
+#endif // XR_USE_PLATFORM_ANDROID
+
+#endif /* XR_USE_PLATFORM_ANDROID */
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+
+#define XR_FB_swapchain_update_state_opengl_es 1
+#define XR_FB_swapchain_update_state_opengl_es_SPEC_VERSION 1
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_OPENGL_ES_EXTENSION_NAME "XR_FB_swapchain_update_state_opengl_es"
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+typedef struct XrSwapchainStateSamplerOpenGLESFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ EGLenum minFilter;
+ EGLenum magFilter;
+ EGLenum wrapModeS;
+ EGLenum wrapModeT;
+ EGLenum swizzleRed;
+ EGLenum swizzleGreen;
+ EGLenum swizzleBlue;
+ EGLenum swizzleAlpha;
+ float maxAnisotropy;
+ XrColor4f borderColor;
+} XrSwapchainStateSamplerOpenGLESFB;
+#endif // XR_USE_GRAPHICS_API_OPENGL_ES
+
+#endif /* XR_USE_GRAPHICS_API_OPENGL_ES */
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+
+#define XR_FB_swapchain_update_state_vulkan 1
+#define XR_FB_swapchain_update_state_vulkan_SPEC_VERSION 1
+#define XR_FB_SWAPCHAIN_UPDATE_STATE_VULKAN_EXTENSION_NAME "XR_FB_swapchain_update_state_vulkan"
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+typedef struct XrSwapchainStateSamplerVulkanFB {
+ XrStructureType type;
+ void* XR_MAY_ALIAS next;
+ VkFilter minFilter;
+ VkFilter magFilter;
+ VkSamplerMipmapMode mipmapMode;
+ VkSamplerAddressMode wrapModeS;
+ VkSamplerAddressMode wrapModeT;
+ VkComponentSwizzle swizzleRed;
+ VkComponentSwizzle swizzleGreen;
+ VkComponentSwizzle swizzleBlue;
+ VkComponentSwizzle swizzleAlpha;
+ float maxAnisotropy;
+ XrColor4f borderColor;
+} XrSwapchainStateSamplerVulkanFB;
+#endif // XR_USE_GRAPHICS_API_VULKAN
+
+#endif /* XR_USE_GRAPHICS_API_VULKAN */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_platform_defines.h b/thirdparty/openxr/include/openxr/openxr_platform_defines.h
new file mode 100644
index 0000000000..31fa05a0c8
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr_platform_defines.h
@@ -0,0 +1,110 @@
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+#ifndef OPENXR_PLATFORM_DEFINES_H_
+#define OPENXR_PLATFORM_DEFINES_H_ 1
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Platform-specific calling convention macros.
+ *
+ * Platforms should define these so that OpenXR clients call OpenXR functions
+ * with the same calling conventions that the OpenXR implementation expects.
+ *
+ * XRAPI_ATTR - Placed before the return type in function declarations.
+ * Useful for C++11 and GCC/Clang-style function attribute syntax.
+ * XRAPI_CALL - Placed after the return type in function declarations.
+ * Useful for MSVC-style calling convention syntax.
+ * XRAPI_PTR - Placed between the '(' and '*' in function pointer types.
+ *
+ * Function declaration: XRAPI_ATTR void XRAPI_CALL xrFunction(void);
+ * Function pointer type: typedef void (XRAPI_PTR *PFN_xrFunction)(void);
+ */
+#if defined(_WIN32)
+#define XRAPI_ATTR
+// On Windows, functions use the stdcall convention
+#define XRAPI_CALL __stdcall
+#define XRAPI_PTR XRAPI_CALL
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
+#error "API not supported for the 'armeabi' NDK ABI"
+#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
+// On Android 32-bit ARM targets, functions use the "hardfloat"
+// calling convention, i.e. float parameters are passed in registers. This
+// is true even if the rest of the application passes floats on the stack,
+// as it does by default when compiling for the armeabi-v7a NDK ABI.
+#define XRAPI_ATTR __attribute__((pcs("aapcs-vfp")))
+#define XRAPI_CALL
+#define XRAPI_PTR XRAPI_ATTR
+#else
+// On other platforms, use the default calling convention
+#define XRAPI_ATTR
+#define XRAPI_CALL
+#define XRAPI_PTR
+#endif
+
+#include <stddef.h>
+
+#if !defined(XR_NO_STDINT_H)
+#if defined(_MSC_VER) && (_MSC_VER < 1600)
+typedef signed __int8 int8_t;
+typedef unsigned __int8 uint8_t;
+typedef signed __int16 int16_t;
+typedef unsigned __int16 uint16_t;
+typedef signed __int32 int32_t;
+typedef unsigned __int32 uint32_t;
+typedef signed __int64 int64_t;
+typedef unsigned __int64 uint64_t;
+#else
+#include <stdint.h>
+#endif
+#endif // !defined( XR_NO_STDINT_H )
+
+// XR_PTR_SIZE (in bytes)
+#if (defined(__LP64__) || defined(_WIN64) || (defined(__x86_64__) && !defined(__ILP32__) ) || defined(_M_X64) || defined(__ia64) || defined (_M_IA64) || defined(__aarch64__) || defined(__powerpc64__))
+#define XR_PTR_SIZE 8
+#else
+#define XR_PTR_SIZE 4
+#endif
+
+// Needed so we can use clang __has_feature portably.
+#if !defined(XR_COMPILER_HAS_FEATURE)
+#if defined(__clang__)
+#define XR_COMPILER_HAS_FEATURE(x) __has_feature(x)
+#else
+#define XR_COMPILER_HAS_FEATURE(x) 0
+#endif
+#endif
+
+// Identifies if the current compiler has C++11 support enabled.
+// Does not by itself identify if any given C++11 feature is present.
+#if !defined(XR_CPP11_ENABLED) && defined(__cplusplus)
+#if defined(__GNUC__) && defined(__GXX_EXPERIMENTAL_CXX0X__)
+#define XR_CPP11_ENABLED 1
+#elif defined(_MSC_VER) && (_MSC_VER >= 1600)
+#define XR_CPP11_ENABLED 1
+#elif (__cplusplus >= 201103L) // 201103 is the first C++11 version.
+#define XR_CPP11_ENABLED 1
+#endif
+#endif
+
+// Identifies if the current compiler supports C++11 nullptr.
+#if !defined(XR_CPP_NULLPTR_SUPPORTED)
+#if defined(XR_CPP11_ENABLED) && \
+ ((defined(__clang__) && XR_COMPILER_HAS_FEATURE(cxx_nullptr)) || \
+ (defined(__GNUC__) && (((__GNUC__ * 1000) + __GNUC_MINOR__) >= 4006)) || \
+ (defined(_MSC_VER) && (_MSC_VER >= 1600)) || \
+ (defined(__EDG_VERSION__) && (__EDG_VERSION__ >= 403)))
+#define XR_CPP_NULLPTR_SUPPORTED 1
+#endif
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/openxr/include/openxr/openxr_reflection.h b/thirdparty/openxr/include/openxr/openxr_reflection.h
new file mode 100644
index 0000000000..2bc14be600
--- /dev/null
+++ b/thirdparty/openxr/include/openxr/openxr_reflection.h
@@ -0,0 +1,2746 @@
+#ifndef OPENXR_REFLECTION_H_
+#define OPENXR_REFLECTION_H_ 1
+
+/*
+** Copyright (c) 2017-2022, The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0 OR MIT
+*/
+
+/*
+** This header is generated from the Khronos OpenXR XML API Registry.
+**
+*/
+
+#include "openxr.h"
+
+/*
+This file contains expansion macros (X Macros) for OpenXR enumerations and structures.
+Example of how to use expansion macros to make an enum-to-string function:
+
+#define XR_ENUM_CASE_STR(name, val) case name: return #name;
+#define XR_ENUM_STR(enumType) \
+ constexpr const char* XrEnumStr(enumType e) { \
+ switch (e) { \
+ XR_LIST_ENUM_##enumType(XR_ENUM_CASE_STR) \
+ default: return "Unknown"; \
+ } \
+ } \
+
+XR_ENUM_STR(XrResult);
+*/
+
+#define XR_LIST_ENUM_XrResult(_) \
+ _(XR_SUCCESS, 0) \
+ _(XR_TIMEOUT_EXPIRED, 1) \
+ _(XR_SESSION_LOSS_PENDING, 3) \
+ _(XR_EVENT_UNAVAILABLE, 4) \
+ _(XR_SPACE_BOUNDS_UNAVAILABLE, 7) \
+ _(XR_SESSION_NOT_FOCUSED, 8) \
+ _(XR_FRAME_DISCARDED, 9) \
+ _(XR_ERROR_VALIDATION_FAILURE, -1) \
+ _(XR_ERROR_RUNTIME_FAILURE, -2) \
+ _(XR_ERROR_OUT_OF_MEMORY, -3) \
+ _(XR_ERROR_API_VERSION_UNSUPPORTED, -4) \
+ _(XR_ERROR_INITIALIZATION_FAILED, -6) \
+ _(XR_ERROR_FUNCTION_UNSUPPORTED, -7) \
+ _(XR_ERROR_FEATURE_UNSUPPORTED, -8) \
+ _(XR_ERROR_EXTENSION_NOT_PRESENT, -9) \
+ _(XR_ERROR_LIMIT_REACHED, -10) \
+ _(XR_ERROR_SIZE_INSUFFICIENT, -11) \
+ _(XR_ERROR_HANDLE_INVALID, -12) \
+ _(XR_ERROR_INSTANCE_LOST, -13) \
+ _(XR_ERROR_SESSION_RUNNING, -14) \
+ _(XR_ERROR_SESSION_NOT_RUNNING, -16) \
+ _(XR_ERROR_SESSION_LOST, -17) \
+ _(XR_ERROR_SYSTEM_INVALID, -18) \
+ _(XR_ERROR_PATH_INVALID, -19) \
+ _(XR_ERROR_PATH_COUNT_EXCEEDED, -20) \
+ _(XR_ERROR_PATH_FORMAT_INVALID, -21) \
+ _(XR_ERROR_PATH_UNSUPPORTED, -22) \
+ _(XR_ERROR_LAYER_INVALID, -23) \
+ _(XR_ERROR_LAYER_LIMIT_EXCEEDED, -24) \
+ _(XR_ERROR_SWAPCHAIN_RECT_INVALID, -25) \
+ _(XR_ERROR_SWAPCHAIN_FORMAT_UNSUPPORTED, -26) \
+ _(XR_ERROR_ACTION_TYPE_MISMATCH, -27) \
+ _(XR_ERROR_SESSION_NOT_READY, -28) \
+ _(XR_ERROR_SESSION_NOT_STOPPING, -29) \
+ _(XR_ERROR_TIME_INVALID, -30) \
+ _(XR_ERROR_REFERENCE_SPACE_UNSUPPORTED, -31) \
+ _(XR_ERROR_FILE_ACCESS_ERROR, -32) \
+ _(XR_ERROR_FILE_CONTENTS_INVALID, -33) \
+ _(XR_ERROR_FORM_FACTOR_UNSUPPORTED, -34) \
+ _(XR_ERROR_FORM_FACTOR_UNAVAILABLE, -35) \
+ _(XR_ERROR_API_LAYER_NOT_PRESENT, -36) \
+ _(XR_ERROR_CALL_ORDER_INVALID, -37) \
+ _(XR_ERROR_GRAPHICS_DEVICE_INVALID, -38) \
+ _(XR_ERROR_POSE_INVALID, -39) \
+ _(XR_ERROR_INDEX_OUT_OF_RANGE, -40) \
+ _(XR_ERROR_VIEW_CONFIGURATION_TYPE_UNSUPPORTED, -41) \
+ _(XR_ERROR_ENVIRONMENT_BLEND_MODE_UNSUPPORTED, -42) \
+ _(XR_ERROR_NAME_DUPLICATED, -44) \
+ _(XR_ERROR_NAME_INVALID, -45) \
+ _(XR_ERROR_ACTIONSET_NOT_ATTACHED, -46) \
+ _(XR_ERROR_ACTIONSETS_ALREADY_ATTACHED, -47) \
+ _(XR_ERROR_LOCALIZED_NAME_DUPLICATED, -48) \
+ _(XR_ERROR_LOCALIZED_NAME_INVALID, -49) \
+ _(XR_ERROR_GRAPHICS_REQUIREMENTS_CALL_MISSING, -50) \
+ _(XR_ERROR_RUNTIME_UNAVAILABLE, -51) \
+ _(XR_ERROR_ANDROID_THREAD_SETTINGS_ID_INVALID_KHR, -1000003000) \
+ _(XR_ERROR_ANDROID_THREAD_SETTINGS_FAILURE_KHR, -1000003001) \
+ _(XR_ERROR_CREATE_SPATIAL_ANCHOR_FAILED_MSFT, -1000039001) \
+ _(XR_ERROR_SECONDARY_VIEW_CONFIGURATION_TYPE_NOT_ENABLED_MSFT, -1000053000) \
+ _(XR_ERROR_CONTROLLER_MODEL_KEY_INVALID_MSFT, -1000055000) \
+ _(XR_ERROR_REPROJECTION_MODE_UNSUPPORTED_MSFT, -1000066000) \
+ _(XR_ERROR_COMPUTE_NEW_SCENE_NOT_COMPLETED_MSFT, -1000097000) \
+ _(XR_ERROR_SCENE_COMPONENT_ID_INVALID_MSFT, -1000097001) \
+ _(XR_ERROR_SCENE_COMPONENT_TYPE_MISMATCH_MSFT, -1000097002) \
+ _(XR_ERROR_SCENE_MESH_BUFFER_ID_INVALID_MSFT, -1000097003) \
+ _(XR_ERROR_SCENE_COMPUTE_FEATURE_INCOMPATIBLE_MSFT, -1000097004) \
+ _(XR_ERROR_SCENE_COMPUTE_CONSISTENCY_MISMATCH_MSFT, -1000097005) \
+ _(XR_ERROR_DISPLAY_REFRESH_RATE_UNSUPPORTED_FB, -1000101000) \
+ _(XR_ERROR_COLOR_SPACE_UNSUPPORTED_FB, -1000108000) \
+ _(XR_ERROR_UNEXPECTED_STATE_PASSTHROUGH_FB, -1000118000) \
+ _(XR_ERROR_FEATURE_ALREADY_CREATED_PASSTHROUGH_FB, -1000118001) \
+ _(XR_ERROR_FEATURE_REQUIRED_PASSTHROUGH_FB, -1000118002) \
+ _(XR_ERROR_NOT_PERMITTED_PASSTHROUGH_FB, -1000118003) \
+ _(XR_ERROR_INSUFFICIENT_RESOURCES_PASSTHROUGH_FB, -1000118004) \
+ _(XR_ERROR_UNKNOWN_PASSTHROUGH_FB, -1000118050) \
+ _(XR_ERROR_RENDER_MODEL_KEY_INVALID_FB, -1000119000) \
+ _(XR_RENDER_MODEL_UNAVAILABLE_FB, 1000119020) \
+ _(XR_ERROR_MARKER_NOT_TRACKED_VARJO, -1000124000) \
+ _(XR_ERROR_MARKER_ID_INVALID_VARJO, -1000124001) \
+ _(XR_ERROR_SPATIAL_ANCHOR_NAME_NOT_FOUND_MSFT, -1000142001) \
+ _(XR_ERROR_SPATIAL_ANCHOR_NAME_INVALID_MSFT, -1000142002) \
+ _(XR_RESULT_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrStructureType(_) \
+ _(XR_TYPE_UNKNOWN, 0) \
+ _(XR_TYPE_API_LAYER_PROPERTIES, 1) \
+ _(XR_TYPE_EXTENSION_PROPERTIES, 2) \
+ _(XR_TYPE_INSTANCE_CREATE_INFO, 3) \
+ _(XR_TYPE_SYSTEM_GET_INFO, 4) \
+ _(XR_TYPE_SYSTEM_PROPERTIES, 5) \
+ _(XR_TYPE_VIEW_LOCATE_INFO, 6) \
+ _(XR_TYPE_VIEW, 7) \
+ _(XR_TYPE_SESSION_CREATE_INFO, 8) \
+ _(XR_TYPE_SWAPCHAIN_CREATE_INFO, 9) \
+ _(XR_TYPE_SESSION_BEGIN_INFO, 10) \
+ _(XR_TYPE_VIEW_STATE, 11) \
+ _(XR_TYPE_FRAME_END_INFO, 12) \
+ _(XR_TYPE_HAPTIC_VIBRATION, 13) \
+ _(XR_TYPE_EVENT_DATA_BUFFER, 16) \
+ _(XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING, 17) \
+ _(XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED, 18) \
+ _(XR_TYPE_ACTION_STATE_BOOLEAN, 23) \
+ _(XR_TYPE_ACTION_STATE_FLOAT, 24) \
+ _(XR_TYPE_ACTION_STATE_VECTOR2F, 25) \
+ _(XR_TYPE_ACTION_STATE_POSE, 27) \
+ _(XR_TYPE_ACTION_SET_CREATE_INFO, 28) \
+ _(XR_TYPE_ACTION_CREATE_INFO, 29) \
+ _(XR_TYPE_INSTANCE_PROPERTIES, 32) \
+ _(XR_TYPE_FRAME_WAIT_INFO, 33) \
+ _(XR_TYPE_COMPOSITION_LAYER_PROJECTION, 35) \
+ _(XR_TYPE_COMPOSITION_LAYER_QUAD, 36) \
+ _(XR_TYPE_REFERENCE_SPACE_CREATE_INFO, 37) \
+ _(XR_TYPE_ACTION_SPACE_CREATE_INFO, 38) \
+ _(XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING, 40) \
+ _(XR_TYPE_VIEW_CONFIGURATION_VIEW, 41) \
+ _(XR_TYPE_SPACE_LOCATION, 42) \
+ _(XR_TYPE_SPACE_VELOCITY, 43) \
+ _(XR_TYPE_FRAME_STATE, 44) \
+ _(XR_TYPE_VIEW_CONFIGURATION_PROPERTIES, 45) \
+ _(XR_TYPE_FRAME_BEGIN_INFO, 46) \
+ _(XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW, 48) \
+ _(XR_TYPE_EVENT_DATA_EVENTS_LOST, 49) \
+ _(XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING, 51) \
+ _(XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED, 52) \
+ _(XR_TYPE_INTERACTION_PROFILE_STATE, 53) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO, 55) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO, 56) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO, 57) \
+ _(XR_TYPE_ACTION_STATE_GET_INFO, 58) \
+ _(XR_TYPE_HAPTIC_ACTION_INFO, 59) \
+ _(XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO, 60) \
+ _(XR_TYPE_ACTIONS_SYNC_INFO, 61) \
+ _(XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO, 62) \
+ _(XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO, 63) \
+ _(XR_TYPE_COMPOSITION_LAYER_CUBE_KHR, 1000006000) \
+ _(XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR, 1000008000) \
+ _(XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR, 1000010000) \
+ _(XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR, 1000014000) \
+ _(XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT, 1000015000) \
+ _(XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR, 1000017000) \
+ _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR, 1000018000) \
+ _(XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, 1000019000) \
+ _(XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT, 1000019001) \
+ _(XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT, 1000019002) \
+ _(XR_TYPE_DEBUG_UTILS_LABEL_EXT, 1000019003) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR, 1000023000) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR, 1000023001) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR, 1000023002) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR, 1000023003) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR, 1000023004) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR, 1000023005) \
+ _(XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR, 1000024001) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR, 1000024002) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR, 1000024003) \
+ _(XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR, 1000025000) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR, 1000025001) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR, 1000025002) \
+ _(XR_TYPE_GRAPHICS_BINDING_D3D11_KHR, 1000027000) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR, 1000027001) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR, 1000027002) \
+ _(XR_TYPE_GRAPHICS_BINDING_D3D12_KHR, 1000028000) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR, 1000028001) \
+ _(XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR, 1000028002) \
+ _(XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT, 1000030000) \
+ _(XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT, 1000030001) \
+ _(XR_TYPE_VISIBILITY_MASK_KHR, 1000031000) \
+ _(XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR, 1000031001) \
+ _(XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX, 1000033000) \
+ _(XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX, 1000033003) \
+ _(XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR, 1000034000) \
+ _(XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT, 1000039000) \
+ _(XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT, 1000039001) \
+ _(XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB, 1000040000) \
+ _(XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB, 1000041001) \
+ _(XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT, 1000046000) \
+ _(XR_TYPE_GRAPHICS_BINDING_EGL_MNDX, 1000048004) \
+ _(XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT, 1000049000) \
+ _(XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT, 1000051000) \
+ _(XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT, 1000051001) \
+ _(XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT, 1000051002) \
+ _(XR_TYPE_HAND_JOINT_LOCATIONS_EXT, 1000051003) \
+ _(XR_TYPE_HAND_JOINT_VELOCITIES_EXT, 1000051004) \
+ _(XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT, 1000052000) \
+ _(XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT, 1000052001) \
+ _(XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT, 1000052002) \
+ _(XR_TYPE_HAND_MESH_MSFT, 1000052003) \
+ _(XR_TYPE_HAND_POSE_TYPE_INFO_MSFT, 1000052004) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT, 1000053000) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT, 1000053001) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT, 1000053002) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT, 1000053003) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT, 1000053004) \
+ _(XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT, 1000053005) \
+ _(XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT, 1000055000) \
+ _(XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT, 1000055001) \
+ _(XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT, 1000055002) \
+ _(XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT, 1000055003) \
+ _(XR_TYPE_CONTROLLER_MODEL_STATE_MSFT, 1000055004) \
+ _(XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC, 1000059000) \
+ _(XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT, 1000063000) \
+ _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT, 1000066000) \
+ _(XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT, 1000066001) \
+ _(XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB, 1000070000) \
+ _(XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB, 1000072000) \
+ _(XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE, 1000079000) \
+ _(XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT, 1000080000) \
+ _(XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR, 1000089000) \
+ _(XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR, 1000090000) \
+ _(XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR, 1000090001) \
+ _(XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR, 1000090003) \
+ _(XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR, 1000091000) \
+ _(XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT, 1000097000) \
+ _(XR_TYPE_SCENE_CREATE_INFO_MSFT, 1000097001) \
+ _(XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT, 1000097002) \
+ _(XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT, 1000097003) \
+ _(XR_TYPE_SCENE_COMPONENTS_MSFT, 1000097004) \
+ _(XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT, 1000097005) \
+ _(XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT, 1000097006) \
+ _(XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT, 1000097007) \
+ _(XR_TYPE_SCENE_OBJECTS_MSFT, 1000097008) \
+ _(XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT, 1000097009) \
+ _(XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT, 1000097010) \
+ _(XR_TYPE_SCENE_PLANES_MSFT, 1000097011) \
+ _(XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT, 1000097012) \
+ _(XR_TYPE_SCENE_MESHES_MSFT, 1000097013) \
+ _(XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT, 1000097014) \
+ _(XR_TYPE_SCENE_MESH_BUFFERS_MSFT, 1000097015) \
+ _(XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT, 1000097016) \
+ _(XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT, 1000097017) \
+ _(XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT, 1000097018) \
+ _(XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT, 1000098000) \
+ _(XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT, 1000098001) \
+ _(XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB, 1000101000) \
+ _(XR_TYPE_VIVE_TRACKER_PATHS_HTCX, 1000103000) \
+ _(XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX, 1000103001) \
+ _(XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC, 1000104000) \
+ _(XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC, 1000104001) \
+ _(XR_TYPE_FACIAL_EXPRESSIONS_HTC, 1000104002) \
+ _(XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB, 1000108000) \
+ _(XR_TYPE_HAND_TRACKING_MESH_FB, 1000110001) \
+ _(XR_TYPE_HAND_TRACKING_SCALE_FB, 1000110003) \
+ _(XR_TYPE_HAND_TRACKING_AIM_STATE_FB, 1000111001) \
+ _(XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB, 1000112000) \
+ _(XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB, 1000114000) \
+ _(XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB, 1000114001) \
+ _(XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB, 1000114002) \
+ _(XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB, 1000115000) \
+ _(XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB, 1000116009) \
+ _(XR_TYPE_KEYBOARD_TRACKING_QUERY_FB, 1000116004) \
+ _(XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB, 1000116002) \
+ _(XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB, 1000117001) \
+ _(XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB, 1000118000) \
+ _(XR_TYPE_PASSTHROUGH_CREATE_INFO_FB, 1000118001) \
+ _(XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB, 1000118002) \
+ _(XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB, 1000118003) \
+ _(XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB, 1000118004) \
+ _(XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB, 1000118005) \
+ _(XR_TYPE_PASSTHROUGH_STYLE_FB, 1000118020) \
+ _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB, 1000118021) \
+ _(XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB, 1000118022) \
+ _(XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB, 1000118030) \
+ _(XR_TYPE_RENDER_MODEL_PATH_INFO_FB, 1000119000) \
+ _(XR_TYPE_RENDER_MODEL_PROPERTIES_FB, 1000119001) \
+ _(XR_TYPE_RENDER_MODEL_BUFFER_FB, 1000119002) \
+ _(XR_TYPE_RENDER_MODEL_LOAD_INFO_FB, 1000119003) \
+ _(XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB, 1000119004) \
+ _(XR_TYPE_BINDING_MODIFICATIONS_KHR, 1000120000) \
+ _(XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO, 1000121000) \
+ _(XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO, 1000121001) \
+ _(XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO, 1000121002) \
+ _(XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO, 1000122000) \
+ _(XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO, 1000124000) \
+ _(XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO, 1000124001) \
+ _(XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO, 1000124002) \
+ _(XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT, 1000142000) \
+ _(XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT, 1000142001) \
+ _(XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB, 1000160000) \
+ _(XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB, 1000161000) \
+ _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB, 1000162000) \
+ _(XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB, 1000163000) \
+ _(XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB, 1000171000) \
+ _(XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB, 1000171001) \
+ _(XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE, 1000196000) \
+ _(XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB, 1000203002) \
+ _(XR_STRUCTURE_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFormFactor(_) \
+ _(XR_FORM_FACTOR_HEAD_MOUNTED_DISPLAY, 1) \
+ _(XR_FORM_FACTOR_HANDHELD_DISPLAY, 2) \
+ _(XR_FORM_FACTOR_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrViewConfigurationType(_) \
+ _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_MONO, 1) \
+ _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_STEREO, 2) \
+ _(XR_VIEW_CONFIGURATION_TYPE_PRIMARY_QUAD_VARJO, 1000037000) \
+ _(XR_VIEW_CONFIGURATION_TYPE_SECONDARY_MONO_FIRST_PERSON_OBSERVER_MSFT, 1000054000) \
+ _(XR_VIEW_CONFIGURATION_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrEnvironmentBlendMode(_) \
+ _(XR_ENVIRONMENT_BLEND_MODE_OPAQUE, 1) \
+ _(XR_ENVIRONMENT_BLEND_MODE_ADDITIVE, 2) \
+ _(XR_ENVIRONMENT_BLEND_MODE_ALPHA_BLEND, 3) \
+ _(XR_ENVIRONMENT_BLEND_MODE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrReferenceSpaceType(_) \
+ _(XR_REFERENCE_SPACE_TYPE_VIEW, 1) \
+ _(XR_REFERENCE_SPACE_TYPE_LOCAL, 2) \
+ _(XR_REFERENCE_SPACE_TYPE_STAGE, 3) \
+ _(XR_REFERENCE_SPACE_TYPE_UNBOUNDED_MSFT, 1000038000) \
+ _(XR_REFERENCE_SPACE_TYPE_COMBINED_EYE_VARJO, 1000121000) \
+ _(XR_REFERENCE_SPACE_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrActionType(_) \
+ _(XR_ACTION_TYPE_BOOLEAN_INPUT, 1) \
+ _(XR_ACTION_TYPE_FLOAT_INPUT, 2) \
+ _(XR_ACTION_TYPE_VECTOR2F_INPUT, 3) \
+ _(XR_ACTION_TYPE_POSE_INPUT, 4) \
+ _(XR_ACTION_TYPE_VIBRATION_OUTPUT, 100) \
+ _(XR_ACTION_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrEyeVisibility(_) \
+ _(XR_EYE_VISIBILITY_BOTH, 0) \
+ _(XR_EYE_VISIBILITY_LEFT, 1) \
+ _(XR_EYE_VISIBILITY_RIGHT, 2) \
+ _(XR_EYE_VISIBILITY_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSessionState(_) \
+ _(XR_SESSION_STATE_UNKNOWN, 0) \
+ _(XR_SESSION_STATE_IDLE, 1) \
+ _(XR_SESSION_STATE_READY, 2) \
+ _(XR_SESSION_STATE_SYNCHRONIZED, 3) \
+ _(XR_SESSION_STATE_VISIBLE, 4) \
+ _(XR_SESSION_STATE_FOCUSED, 5) \
+ _(XR_SESSION_STATE_STOPPING, 6) \
+ _(XR_SESSION_STATE_LOSS_PENDING, 7) \
+ _(XR_SESSION_STATE_EXITING, 8) \
+ _(XR_SESSION_STATE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrObjectType(_) \
+ _(XR_OBJECT_TYPE_UNKNOWN, 0) \
+ _(XR_OBJECT_TYPE_INSTANCE, 1) \
+ _(XR_OBJECT_TYPE_SESSION, 2) \
+ _(XR_OBJECT_TYPE_SWAPCHAIN, 3) \
+ _(XR_OBJECT_TYPE_SPACE, 4) \
+ _(XR_OBJECT_TYPE_ACTION_SET, 5) \
+ _(XR_OBJECT_TYPE_ACTION, 6) \
+ _(XR_OBJECT_TYPE_DEBUG_UTILS_MESSENGER_EXT, 1000019000) \
+ _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_MSFT, 1000039000) \
+ _(XR_OBJECT_TYPE_HAND_TRACKER_EXT, 1000051000) \
+ _(XR_OBJECT_TYPE_SCENE_OBSERVER_MSFT, 1000097000) \
+ _(XR_OBJECT_TYPE_SCENE_MSFT, 1000097001) \
+ _(XR_OBJECT_TYPE_FACIAL_TRACKER_HTC, 1000104000) \
+ _(XR_OBJECT_TYPE_FOVEATION_PROFILE_FB, 1000114000) \
+ _(XR_OBJECT_TYPE_TRIANGLE_MESH_FB, 1000117000) \
+ _(XR_OBJECT_TYPE_PASSTHROUGH_FB, 1000118000) \
+ _(XR_OBJECT_TYPE_PASSTHROUGH_LAYER_FB, 1000118002) \
+ _(XR_OBJECT_TYPE_GEOMETRY_INSTANCE_FB, 1000118004) \
+ _(XR_OBJECT_TYPE_SPATIAL_ANCHOR_STORE_CONNECTION_MSFT, 1000142000) \
+ _(XR_OBJECT_TYPE_MAX_ENUM, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrAndroidThreadTypeKHR(_) \
+ _(XR_ANDROID_THREAD_TYPE_APPLICATION_MAIN_KHR, 1) \
+ _(XR_ANDROID_THREAD_TYPE_APPLICATION_WORKER_KHR, 2) \
+ _(XR_ANDROID_THREAD_TYPE_RENDERER_MAIN_KHR, 3) \
+ _(XR_ANDROID_THREAD_TYPE_RENDERER_WORKER_KHR, 4) \
+ _(XR_ANDROID_THREAD_TYPE_MAX_ENUM_KHR, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrVisibilityMaskTypeKHR(_) \
+ _(XR_VISIBILITY_MASK_TYPE_HIDDEN_TRIANGLE_MESH_KHR, 1) \
+ _(XR_VISIBILITY_MASK_TYPE_VISIBLE_TRIANGLE_MESH_KHR, 2) \
+ _(XR_VISIBILITY_MASK_TYPE_LINE_LOOP_KHR, 3) \
+ _(XR_VISIBILITY_MASK_TYPE_MAX_ENUM_KHR, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsDomainEXT(_) \
+ _(XR_PERF_SETTINGS_DOMAIN_CPU_EXT, 1) \
+ _(XR_PERF_SETTINGS_DOMAIN_GPU_EXT, 2) \
+ _(XR_PERF_SETTINGS_DOMAIN_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsSubDomainEXT(_) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_COMPOSITING_EXT, 1) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_RENDERING_EXT, 2) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_THERMAL_EXT, 3) \
+ _(XR_PERF_SETTINGS_SUB_DOMAIN_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsLevelEXT(_) \
+ _(XR_PERF_SETTINGS_LEVEL_POWER_SAVINGS_EXT, 0) \
+ _(XR_PERF_SETTINGS_LEVEL_SUSTAINED_LOW_EXT, 25) \
+ _(XR_PERF_SETTINGS_LEVEL_SUSTAINED_HIGH_EXT, 50) \
+ _(XR_PERF_SETTINGS_LEVEL_BOOST_EXT, 75) \
+ _(XR_PERF_SETTINGS_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPerfSettingsNotificationLevelEXT(_) \
+ _(XR_PERF_SETTINGS_NOTIF_LEVEL_NORMAL_EXT, 0) \
+ _(XR_PERF_SETTINGS_NOTIF_LEVEL_WARNING_EXT, 25) \
+ _(XR_PERF_SETTINGS_NOTIF_LEVEL_IMPAIRED_EXT, 75) \
+ _(XR_PERF_SETTINGS_NOTIFICATION_LEVEL_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrBlendFactorFB(_) \
+ _(XR_BLEND_FACTOR_ZERO_FB, 0) \
+ _(XR_BLEND_FACTOR_ONE_FB, 1) \
+ _(XR_BLEND_FACTOR_SRC_ALPHA_FB, 2) \
+ _(XR_BLEND_FACTOR_ONE_MINUS_SRC_ALPHA_FB, 3) \
+ _(XR_BLEND_FACTOR_DST_ALPHA_FB, 4) \
+ _(XR_BLEND_FACTOR_ONE_MINUS_DST_ALPHA_FB, 5) \
+ _(XR_BLEND_FACTOR_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSpatialGraphNodeTypeMSFT(_) \
+ _(XR_SPATIAL_GRAPH_NODE_TYPE_STATIC_MSFT, 1) \
+ _(XR_SPATIAL_GRAPH_NODE_TYPE_DYNAMIC_MSFT, 2) \
+ _(XR_SPATIAL_GRAPH_NODE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandEXT(_) \
+ _(XR_HAND_LEFT_EXT, 1) \
+ _(XR_HAND_RIGHT_EXT, 2) \
+ _(XR_HAND_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandJointEXT(_) \
+ _(XR_HAND_JOINT_PALM_EXT, 0) \
+ _(XR_HAND_JOINT_WRIST_EXT, 1) \
+ _(XR_HAND_JOINT_THUMB_METACARPAL_EXT, 2) \
+ _(XR_HAND_JOINT_THUMB_PROXIMAL_EXT, 3) \
+ _(XR_HAND_JOINT_THUMB_DISTAL_EXT, 4) \
+ _(XR_HAND_JOINT_THUMB_TIP_EXT, 5) \
+ _(XR_HAND_JOINT_INDEX_METACARPAL_EXT, 6) \
+ _(XR_HAND_JOINT_INDEX_PROXIMAL_EXT, 7) \
+ _(XR_HAND_JOINT_INDEX_INTERMEDIATE_EXT, 8) \
+ _(XR_HAND_JOINT_INDEX_DISTAL_EXT, 9) \
+ _(XR_HAND_JOINT_INDEX_TIP_EXT, 10) \
+ _(XR_HAND_JOINT_MIDDLE_METACARPAL_EXT, 11) \
+ _(XR_HAND_JOINT_MIDDLE_PROXIMAL_EXT, 12) \
+ _(XR_HAND_JOINT_MIDDLE_INTERMEDIATE_EXT, 13) \
+ _(XR_HAND_JOINT_MIDDLE_DISTAL_EXT, 14) \
+ _(XR_HAND_JOINT_MIDDLE_TIP_EXT, 15) \
+ _(XR_HAND_JOINT_RING_METACARPAL_EXT, 16) \
+ _(XR_HAND_JOINT_RING_PROXIMAL_EXT, 17) \
+ _(XR_HAND_JOINT_RING_INTERMEDIATE_EXT, 18) \
+ _(XR_HAND_JOINT_RING_DISTAL_EXT, 19) \
+ _(XR_HAND_JOINT_RING_TIP_EXT, 20) \
+ _(XR_HAND_JOINT_LITTLE_METACARPAL_EXT, 21) \
+ _(XR_HAND_JOINT_LITTLE_PROXIMAL_EXT, 22) \
+ _(XR_HAND_JOINT_LITTLE_INTERMEDIATE_EXT, 23) \
+ _(XR_HAND_JOINT_LITTLE_DISTAL_EXT, 24) \
+ _(XR_HAND_JOINT_LITTLE_TIP_EXT, 25) \
+ _(XR_HAND_JOINT_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandJointSetEXT(_) \
+ _(XR_HAND_JOINT_SET_DEFAULT_EXT, 0) \
+ _(XR_HAND_JOINT_SET_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandPoseTypeMSFT(_) \
+ _(XR_HAND_POSE_TYPE_TRACKED_MSFT, 0) \
+ _(XR_HAND_POSE_TYPE_REFERENCE_OPEN_PALM_MSFT, 1) \
+ _(XR_HAND_POSE_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrReprojectionModeMSFT(_) \
+ _(XR_REPROJECTION_MODE_DEPTH_MSFT, 1) \
+ _(XR_REPROJECTION_MODE_PLANAR_FROM_DEPTH_MSFT, 2) \
+ _(XR_REPROJECTION_MODE_PLANAR_MANUAL_MSFT, 3) \
+ _(XR_REPROJECTION_MODE_ORIENTATION_ONLY_MSFT, 4) \
+ _(XR_REPROJECTION_MODE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrHandJointsMotionRangeEXT(_) \
+ _(XR_HAND_JOINTS_MOTION_RANGE_UNOBSTRUCTED_EXT, 1) \
+ _(XR_HAND_JOINTS_MOTION_RANGE_CONFORMING_TO_CONTROLLER_EXT, 2) \
+ _(XR_HAND_JOINTS_MOTION_RANGE_MAX_ENUM_EXT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComputeFeatureMSFT(_) \
+ _(XR_SCENE_COMPUTE_FEATURE_PLANE_MSFT, 1) \
+ _(XR_SCENE_COMPUTE_FEATURE_PLANE_MESH_MSFT, 2) \
+ _(XR_SCENE_COMPUTE_FEATURE_VISUAL_MESH_MSFT, 3) \
+ _(XR_SCENE_COMPUTE_FEATURE_COLLIDER_MESH_MSFT, 4) \
+ _(XR_SCENE_COMPUTE_FEATURE_SERIALIZE_SCENE_MSFT, 1000098000) \
+ _(XR_SCENE_COMPUTE_FEATURE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComputeConsistencyMSFT(_) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_COMPLETE_MSFT, 1) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_SNAPSHOT_INCOMPLETE_FAST_MSFT, 2) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_OCCLUSION_OPTIMIZED_MSFT, 3) \
+ _(XR_SCENE_COMPUTE_CONSISTENCY_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrMeshComputeLodMSFT(_) \
+ _(XR_MESH_COMPUTE_LOD_COARSE_MSFT, 1) \
+ _(XR_MESH_COMPUTE_LOD_MEDIUM_MSFT, 2) \
+ _(XR_MESH_COMPUTE_LOD_FINE_MSFT, 3) \
+ _(XR_MESH_COMPUTE_LOD_UNLIMITED_MSFT, 4) \
+ _(XR_MESH_COMPUTE_LOD_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComponentTypeMSFT(_) \
+ _(XR_SCENE_COMPONENT_TYPE_INVALID_MSFT, -1) \
+ _(XR_SCENE_COMPONENT_TYPE_OBJECT_MSFT, 1) \
+ _(XR_SCENE_COMPONENT_TYPE_PLANE_MSFT, 2) \
+ _(XR_SCENE_COMPONENT_TYPE_VISUAL_MESH_MSFT, 3) \
+ _(XR_SCENE_COMPONENT_TYPE_COLLIDER_MESH_MSFT, 4) \
+ _(XR_SCENE_COMPONENT_TYPE_SERIALIZED_SCENE_FRAGMENT_MSFT, 1000098000) \
+ _(XR_SCENE_COMPONENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneObjectTypeMSFT(_) \
+ _(XR_SCENE_OBJECT_TYPE_UNCATEGORIZED_MSFT, -1) \
+ _(XR_SCENE_OBJECT_TYPE_BACKGROUND_MSFT, 1) \
+ _(XR_SCENE_OBJECT_TYPE_WALL_MSFT, 2) \
+ _(XR_SCENE_OBJECT_TYPE_FLOOR_MSFT, 3) \
+ _(XR_SCENE_OBJECT_TYPE_CEILING_MSFT, 4) \
+ _(XR_SCENE_OBJECT_TYPE_PLATFORM_MSFT, 5) \
+ _(XR_SCENE_OBJECT_TYPE_INFERRED_MSFT, 6) \
+ _(XR_SCENE_OBJECT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrScenePlaneAlignmentTypeMSFT(_) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_NON_ORTHOGONAL_MSFT, 0) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_HORIZONTAL_MSFT, 1) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_VERTICAL_MSFT, 2) \
+ _(XR_SCENE_PLANE_ALIGNMENT_TYPE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrSceneComputeStateMSFT(_) \
+ _(XR_SCENE_COMPUTE_STATE_NONE_MSFT, 0) \
+ _(XR_SCENE_COMPUTE_STATE_UPDATING_MSFT, 1) \
+ _(XR_SCENE_COMPUTE_STATE_COMPLETED_MSFT, 2) \
+ _(XR_SCENE_COMPUTE_STATE_COMPLETED_WITH_ERROR_MSFT, 3) \
+ _(XR_SCENE_COMPUTE_STATE_MAX_ENUM_MSFT, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrEyeExpressionHTC(_) \
+ _(XR_EYE_EXPRESSION_LEFT_BLINK_HTC, 0) \
+ _(XR_EYE_EXPRESSION_LEFT_WIDE_HTC, 1) \
+ _(XR_EYE_EXPRESSION_RIGHT_BLINK_HTC, 2) \
+ _(XR_EYE_EXPRESSION_RIGHT_WIDE_HTC, 3) \
+ _(XR_EYE_EXPRESSION_LEFT_SQUEEZE_HTC, 4) \
+ _(XR_EYE_EXPRESSION_RIGHT_SQUEEZE_HTC, 5) \
+ _(XR_EYE_EXPRESSION_LEFT_DOWN_HTC, 6) \
+ _(XR_EYE_EXPRESSION_RIGHT_DOWN_HTC, 7) \
+ _(XR_EYE_EXPRESSION_LEFT_OUT_HTC, 8) \
+ _(XR_EYE_EXPRESSION_RIGHT_IN_HTC, 9) \
+ _(XR_EYE_EXPRESSION_LEFT_IN_HTC, 10) \
+ _(XR_EYE_EXPRESSION_RIGHT_OUT_HTC, 11) \
+ _(XR_EYE_EXPRESSION_LEFT_UP_HTC, 12) \
+ _(XR_EYE_EXPRESSION_RIGHT_UP_HTC, 13) \
+ _(XR_EYE_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrLipExpressionHTC(_) \
+ _(XR_LIP_EXPRESSION_JAW_RIGHT_HTC, 0) \
+ _(XR_LIP_EXPRESSION_JAW_LEFT_HTC, 1) \
+ _(XR_LIP_EXPRESSION_JAW_FORWARD_HTC, 2) \
+ _(XR_LIP_EXPRESSION_JAW_OPEN_HTC, 3) \
+ _(XR_LIP_EXPRESSION_MOUTH_APE_SHAPE_HTC, 4) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_RIGHT_HTC, 5) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_LEFT_HTC, 6) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_RIGHT_HTC, 7) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_LEFT_HTC, 8) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_OVERTURN_HTC, 9) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERTURN_HTC, 10) \
+ _(XR_LIP_EXPRESSION_MOUTH_POUT_HTC, 11) \
+ _(XR_LIP_EXPRESSION_MOUTH_SMILE_RIGHT_HTC, 12) \
+ _(XR_LIP_EXPRESSION_MOUTH_SMILE_LEFT_HTC, 13) \
+ _(XR_LIP_EXPRESSION_MOUTH_SAD_RIGHT_HTC, 14) \
+ _(XR_LIP_EXPRESSION_MOUTH_SAD_LEFT_HTC, 15) \
+ _(XR_LIP_EXPRESSION_CHEEK_PUFF_RIGHT_HTC, 16) \
+ _(XR_LIP_EXPRESSION_CHEEK_PUFF_LEFT_HTC, 17) \
+ _(XR_LIP_EXPRESSION_CHEEK_SUCK_HTC, 18) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPRIGHT_HTC, 19) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_UPLEFT_HTC, 20) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNRIGHT_HTC, 21) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_DOWNLEFT_HTC, 22) \
+ _(XR_LIP_EXPRESSION_MOUTH_UPPER_INSIDE_HTC, 23) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_INSIDE_HTC, 24) \
+ _(XR_LIP_EXPRESSION_MOUTH_LOWER_OVERLAY_HTC, 25) \
+ _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP1_HTC, 26) \
+ _(XR_LIP_EXPRESSION_TONGUE_LEFT_HTC, 27) \
+ _(XR_LIP_EXPRESSION_TONGUE_RIGHT_HTC, 28) \
+ _(XR_LIP_EXPRESSION_TONGUE_UP_HTC, 29) \
+ _(XR_LIP_EXPRESSION_TONGUE_DOWN_HTC, 30) \
+ _(XR_LIP_EXPRESSION_TONGUE_ROLL_HTC, 31) \
+ _(XR_LIP_EXPRESSION_TONGUE_LONGSTEP2_HTC, 32) \
+ _(XR_LIP_EXPRESSION_TONGUE_UPRIGHT_MORPH_HTC, 33) \
+ _(XR_LIP_EXPRESSION_TONGUE_UPLEFT_MORPH_HTC, 34) \
+ _(XR_LIP_EXPRESSION_TONGUE_DOWNRIGHT_MORPH_HTC, 35) \
+ _(XR_LIP_EXPRESSION_TONGUE_DOWNLEFT_MORPH_HTC, 36) \
+ _(XR_LIP_EXPRESSION_MAX_ENUM_HTC, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFacialTrackingTypeHTC(_) \
+ _(XR_FACIAL_TRACKING_TYPE_EYE_DEFAULT_HTC, 1) \
+ _(XR_FACIAL_TRACKING_TYPE_LIP_DEFAULT_HTC, 2) \
+ _(XR_FACIAL_TRACKING_TYPE_MAX_ENUM_HTC, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrColorSpaceFB(_) \
+ _(XR_COLOR_SPACE_UNMANAGED_FB, 0) \
+ _(XR_COLOR_SPACE_REC2020_FB, 1) \
+ _(XR_COLOR_SPACE_REC709_FB, 2) \
+ _(XR_COLOR_SPACE_RIFT_CV1_FB, 3) \
+ _(XR_COLOR_SPACE_RIFT_S_FB, 4) \
+ _(XR_COLOR_SPACE_QUEST_FB, 5) \
+ _(XR_COLOR_SPACE_P3_FB, 6) \
+ _(XR_COLOR_SPACE_ADOBE_RGB_FB, 7) \
+ _(XR_COLOR_SPACE_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFoveationLevelFB(_) \
+ _(XR_FOVEATION_LEVEL_NONE_FB, 0) \
+ _(XR_FOVEATION_LEVEL_LOW_FB, 1) \
+ _(XR_FOVEATION_LEVEL_MEDIUM_FB, 2) \
+ _(XR_FOVEATION_LEVEL_HIGH_FB, 3) \
+ _(XR_FOVEATION_LEVEL_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrFoveationDynamicFB(_) \
+ _(XR_FOVEATION_DYNAMIC_DISABLED_FB, 0) \
+ _(XR_FOVEATION_DYNAMIC_LEVEL_ENABLED_FB, 1) \
+ _(XR_FOVEATION_DYNAMIC_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrWindingOrderFB(_) \
+ _(XR_WINDING_ORDER_UNKNOWN_FB, 0) \
+ _(XR_WINDING_ORDER_CW_FB, 1) \
+ _(XR_WINDING_ORDER_CCW_FB, 2) \
+ _(XR_WINDING_ORDER_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_ENUM_XrPassthroughLayerPurposeFB(_) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_RECONSTRUCTION_FB, 0) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_PROJECTED_FB, 1) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_TRACKED_KEYBOARD_HANDS_FB, 1000203001) \
+ _(XR_PASSTHROUGH_LAYER_PURPOSE_MAX_ENUM_FB, 0x7FFFFFFF)
+
+#define XR_LIST_BITS_XrInstanceCreateFlags(_)
+
+#define XR_LIST_BITS_XrSessionCreateFlags(_)
+
+#define XR_LIST_BITS_XrSpaceVelocityFlags(_) \
+ _(XR_SPACE_VELOCITY_LINEAR_VALID_BIT, 0x00000001) \
+ _(XR_SPACE_VELOCITY_ANGULAR_VALID_BIT, 0x00000002) \
+
+#define XR_LIST_BITS_XrSpaceLocationFlags(_) \
+ _(XR_SPACE_LOCATION_ORIENTATION_VALID_BIT, 0x00000001) \
+ _(XR_SPACE_LOCATION_POSITION_VALID_BIT, 0x00000002) \
+ _(XR_SPACE_LOCATION_ORIENTATION_TRACKED_BIT, 0x00000004) \
+ _(XR_SPACE_LOCATION_POSITION_TRACKED_BIT, 0x00000008) \
+
+#define XR_LIST_BITS_XrSwapchainCreateFlags(_) \
+ _(XR_SWAPCHAIN_CREATE_PROTECTED_CONTENT_BIT, 0x00000001) \
+ _(XR_SWAPCHAIN_CREATE_STATIC_IMAGE_BIT, 0x00000002) \
+
+#define XR_LIST_BITS_XrSwapchainUsageFlags(_) \
+ _(XR_SWAPCHAIN_USAGE_COLOR_ATTACHMENT_BIT, 0x00000001) \
+ _(XR_SWAPCHAIN_USAGE_DEPTH_STENCIL_ATTACHMENT_BIT, 0x00000002) \
+ _(XR_SWAPCHAIN_USAGE_UNORDERED_ACCESS_BIT, 0x00000004) \
+ _(XR_SWAPCHAIN_USAGE_TRANSFER_SRC_BIT, 0x00000008) \
+ _(XR_SWAPCHAIN_USAGE_TRANSFER_DST_BIT, 0x00000010) \
+ _(XR_SWAPCHAIN_USAGE_SAMPLED_BIT, 0x00000020) \
+ _(XR_SWAPCHAIN_USAGE_MUTABLE_FORMAT_BIT, 0x00000040) \
+ _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND, 0x00000080) \
+ _(XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_KHR, XR_SWAPCHAIN_USAGE_INPUT_ATTACHMENT_BIT_MND) \
+
+#define XR_LIST_BITS_XrCompositionLayerFlags(_) \
+ _(XR_COMPOSITION_LAYER_CORRECT_CHROMATIC_ABERRATION_BIT, 0x00000001) \
+ _(XR_COMPOSITION_LAYER_BLEND_TEXTURE_SOURCE_ALPHA_BIT, 0x00000002) \
+ _(XR_COMPOSITION_LAYER_UNPREMULTIPLIED_ALPHA_BIT, 0x00000004) \
+
+#define XR_LIST_BITS_XrViewStateFlags(_) \
+ _(XR_VIEW_STATE_ORIENTATION_VALID_BIT, 0x00000001) \
+ _(XR_VIEW_STATE_POSITION_VALID_BIT, 0x00000002) \
+ _(XR_VIEW_STATE_ORIENTATION_TRACKED_BIT, 0x00000004) \
+ _(XR_VIEW_STATE_POSITION_TRACKED_BIT, 0x00000008) \
+
+#define XR_LIST_BITS_XrInputSourceLocalizedNameFlags(_) \
+ _(XR_INPUT_SOURCE_LOCALIZED_NAME_USER_PATH_BIT, 0x00000001) \
+ _(XR_INPUT_SOURCE_LOCALIZED_NAME_INTERACTION_PROFILE_BIT, 0x00000002) \
+ _(XR_INPUT_SOURCE_LOCALIZED_NAME_COMPONENT_BIT, 0x00000004) \
+
+#define XR_LIST_BITS_XrVulkanInstanceCreateFlagsKHR(_)
+
+#define XR_LIST_BITS_XrVulkanDeviceCreateFlagsKHR(_)
+
+#define XR_LIST_BITS_XrDebugUtilsMessageSeverityFlagsEXT(_) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT, 0x00000001) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT, 0x00000010) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT, 0x00000100) \
+ _(XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT, 0x00001000) \
+
+#define XR_LIST_BITS_XrDebugUtilsMessageTypeFlagsEXT(_) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT, 0x00000001) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT, 0x00000002) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT, 0x00000004) \
+ _(XR_DEBUG_UTILS_MESSAGE_TYPE_CONFORMANCE_BIT_EXT, 0x00000008) \
+
+#define XR_LIST_BITS_XrOverlaySessionCreateFlagsEXTX(_)
+
+#define XR_LIST_BITS_XrOverlayMainSessionFlagsEXTX(_) \
+ _(XR_OVERLAY_MAIN_SESSION_ENABLED_COMPOSITION_LAYER_INFO_DEPTH_BIT_EXTX, 0x00000001) \
+
+#define XR_LIST_BITS_XrCompositionLayerImageLayoutFlagsFB(_) \
+ _(XR_COMPOSITION_LAYER_IMAGE_LAYOUT_VERTICAL_FLIP_BIT_FB, 0x00000001) \
+
+#define XR_LIST_BITS_XrAndroidSurfaceSwapchainFlagsFB(_) \
+ _(XR_ANDROID_SURFACE_SWAPCHAIN_SYNCHRONOUS_BIT_FB, 0x00000001) \
+ _(XR_ANDROID_SURFACE_SWAPCHAIN_USE_TIMESTAMPS_BIT_FB, 0x00000002) \
+
+#define XR_LIST_BITS_XrCompositionLayerSecureContentFlagsFB(_) \
+ _(XR_COMPOSITION_LAYER_SECURE_CONTENT_EXCLUDE_LAYER_BIT_FB, 0x00000001) \
+ _(XR_COMPOSITION_LAYER_SECURE_CONTENT_REPLACE_LAYER_BIT_FB, 0x00000002) \
+
+#define XR_LIST_BITS_XrHandTrackingAimFlagsFB(_) \
+ _(XR_HAND_TRACKING_AIM_COMPUTED_BIT_FB, 0x00000001) \
+ _(XR_HAND_TRACKING_AIM_VALID_BIT_FB, 0x00000002) \
+ _(XR_HAND_TRACKING_AIM_INDEX_PINCHING_BIT_FB, 0x00000004) \
+ _(XR_HAND_TRACKING_AIM_MIDDLE_PINCHING_BIT_FB, 0x00000008) \
+ _(XR_HAND_TRACKING_AIM_RING_PINCHING_BIT_FB, 0x00000010) \
+ _(XR_HAND_TRACKING_AIM_LITTLE_PINCHING_BIT_FB, 0x00000020) \
+ _(XR_HAND_TRACKING_AIM_SYSTEM_GESTURE_BIT_FB, 0x00000040) \
+ _(XR_HAND_TRACKING_AIM_DOMINANT_HAND_BIT_FB, 0x00000080) \
+ _(XR_HAND_TRACKING_AIM_MENU_PRESSED_BIT_FB, 0x00000100) \
+
+#define XR_LIST_BITS_XrSwapchainCreateFoveationFlagsFB(_) \
+ _(XR_SWAPCHAIN_CREATE_FOVEATION_SCALED_BIN_BIT_FB, 0x00000001) \
+ _(XR_SWAPCHAIN_CREATE_FOVEATION_FRAGMENT_DENSITY_MAP_BIT_FB, 0x00000002) \
+
+#define XR_LIST_BITS_XrSwapchainStateFoveationFlagsFB(_)
+
+#define XR_LIST_BITS_XrKeyboardTrackingFlagsFB(_) \
+ _(XR_KEYBOARD_TRACKING_EXISTS_BIT_FB, 0x00000001) \
+ _(XR_KEYBOARD_TRACKING_LOCAL_BIT_FB, 0x00000002) \
+ _(XR_KEYBOARD_TRACKING_REMOTE_BIT_FB, 0x00000004) \
+ _(XR_KEYBOARD_TRACKING_CONNECTED_BIT_FB, 0x00000008) \
+
+#define XR_LIST_BITS_XrKeyboardTrackingQueryFlagsFB(_) \
+ _(XR_KEYBOARD_TRACKING_QUERY_LOCAL_BIT_FB, 0x00000002) \
+ _(XR_KEYBOARD_TRACKING_QUERY_REMOTE_BIT_FB, 0x00000004) \
+
+#define XR_LIST_BITS_XrTriangleMeshFlagsFB(_) \
+ _(XR_TRIANGLE_MESH_MUTABLE_BIT_FB, 0x00000001) \
+
+#define XR_LIST_BITS_XrPassthroughFlagsFB(_) \
+ _(XR_PASSTHROUGH_IS_RUNNING_AT_CREATION_BIT_FB, 0x00000001) \
+
+#define XR_LIST_BITS_XrPassthroughStateChangedFlagsFB(_) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_REINIT_REQUIRED_BIT_FB, 0x00000001) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_NON_RECOVERABLE_ERROR_BIT_FB, 0x00000002) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_RECOVERABLE_ERROR_BIT_FB, 0x00000004) \
+ _(XR_PASSTHROUGH_STATE_CHANGED_RESTORED_ERROR_BIT_FB, 0x00000008) \
+
+#define XR_LIST_BITS_XrRenderModelFlagsFB(_)
+
+#define XR_LIST_BITS_XrCompositionLayerSpaceWarpInfoFlagsFB(_)
+
+#define XR_LIST_BITS_XrDigitalLensControlFlagsALMALENCE(_) \
+ _(XR_DIGITAL_LENS_CONTROL_PROCESSING_DISABLE_BIT_ALMALENCE, 0x00000001) \
+
+#define XR_LIST_STRUCT_XrApiLayerProperties(_) \
+ _(type) \
+ _(next) \
+ _(layerName) \
+ _(specVersion) \
+ _(layerVersion) \
+ _(description) \
+
+#define XR_LIST_STRUCT_XrExtensionProperties(_) \
+ _(type) \
+ _(next) \
+ _(extensionName) \
+ _(extensionVersion) \
+
+#define XR_LIST_STRUCT_XrApplicationInfo(_) \
+ _(applicationName) \
+ _(applicationVersion) \
+ _(engineName) \
+ _(engineVersion) \
+ _(apiVersion) \
+
+#define XR_LIST_STRUCT_XrInstanceCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(applicationInfo) \
+ _(enabledApiLayerCount) \
+ _(enabledApiLayerNames) \
+ _(enabledExtensionCount) \
+ _(enabledExtensionNames) \
+
+#define XR_LIST_STRUCT_XrInstanceProperties(_) \
+ _(type) \
+ _(next) \
+ _(runtimeVersion) \
+ _(runtimeName) \
+
+#define XR_LIST_STRUCT_XrEventDataBuffer(_) \
+ _(type) \
+ _(next) \
+ _(varying) \
+
+#define XR_LIST_STRUCT_XrSystemGetInfo(_) \
+ _(type) \
+ _(next) \
+ _(formFactor) \
+
+#define XR_LIST_STRUCT_XrSystemGraphicsProperties(_) \
+ _(maxSwapchainImageHeight) \
+ _(maxSwapchainImageWidth) \
+ _(maxLayerCount) \
+
+#define XR_LIST_STRUCT_XrSystemTrackingProperties(_) \
+ _(orientationTracking) \
+ _(positionTracking) \
+
+#define XR_LIST_STRUCT_XrSystemProperties(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(vendorId) \
+ _(systemName) \
+ _(graphicsProperties) \
+ _(trackingProperties) \
+
+#define XR_LIST_STRUCT_XrSessionCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(systemId) \
+
+#define XR_LIST_STRUCT_XrVector3f(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+
+#define XR_LIST_STRUCT_XrSpaceVelocity(_) \
+ _(type) \
+ _(next) \
+ _(velocityFlags) \
+ _(linearVelocity) \
+ _(angularVelocity) \
+
+#define XR_LIST_STRUCT_XrQuaternionf(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+ _(w) \
+
+#define XR_LIST_STRUCT_XrPosef(_) \
+ _(orientation) \
+ _(position) \
+
+#define XR_LIST_STRUCT_XrReferenceSpaceCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(referenceSpaceType) \
+ _(poseInReferenceSpace) \
+
+#define XR_LIST_STRUCT_XrExtent2Df(_) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrActionSpaceCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(subactionPath) \
+ _(poseInActionSpace) \
+
+#define XR_LIST_STRUCT_XrSpaceLocation(_) \
+ _(type) \
+ _(next) \
+ _(locationFlags) \
+ _(pose) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationProperties(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(fovMutable) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationView(_) \
+ _(type) \
+ _(next) \
+ _(recommendedImageRectWidth) \
+ _(maxImageRectWidth) \
+ _(recommendedImageRectHeight) \
+ _(maxImageRectHeight) \
+ _(recommendedSwapchainSampleCount) \
+ _(maxSwapchainSampleCount) \
+
+#define XR_LIST_STRUCT_XrSwapchainCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(usageFlags) \
+ _(format) \
+ _(sampleCount) \
+ _(width) \
+ _(height) \
+ _(faceCount) \
+ _(arraySize) \
+ _(mipCount) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageBaseHeader(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageAcquireInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageWaitInfo(_) \
+ _(type) \
+ _(next) \
+ _(timeout) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageReleaseInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSessionBeginInfo(_) \
+ _(type) \
+ _(next) \
+ _(primaryViewConfigurationType) \
+
+#define XR_LIST_STRUCT_XrFrameWaitInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrFrameState(_) \
+ _(type) \
+ _(next) \
+ _(predictedDisplayTime) \
+ _(predictedDisplayPeriod) \
+ _(shouldRender) \
+
+#define XR_LIST_STRUCT_XrFrameBeginInfo(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerBaseHeader(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+
+#define XR_LIST_STRUCT_XrFrameEndInfo(_) \
+ _(type) \
+ _(next) \
+ _(displayTime) \
+ _(environmentBlendMode) \
+ _(layerCount) \
+ _(layers) \
+
+#define XR_LIST_STRUCT_XrViewLocateInfo(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(displayTime) \
+ _(space) \
+
+#define XR_LIST_STRUCT_XrViewState(_) \
+ _(type) \
+ _(next) \
+ _(viewStateFlags) \
+
+#define XR_LIST_STRUCT_XrFovf(_) \
+ _(angleLeft) \
+ _(angleRight) \
+ _(angleUp) \
+ _(angleDown) \
+
+#define XR_LIST_STRUCT_XrView(_) \
+ _(type) \
+ _(next) \
+ _(pose) \
+ _(fov) \
+
+#define XR_LIST_STRUCT_XrActionSetCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(actionSetName) \
+ _(localizedActionSetName) \
+ _(priority) \
+
+#define XR_LIST_STRUCT_XrActionCreateInfo(_) \
+ _(type) \
+ _(next) \
+ _(actionName) \
+ _(actionType) \
+ _(countSubactionPaths) \
+ _(subactionPaths) \
+ _(localizedActionName) \
+
+#define XR_LIST_STRUCT_XrActionSuggestedBinding(_) \
+ _(action) \
+ _(binding) \
+
+#define XR_LIST_STRUCT_XrInteractionProfileSuggestedBinding(_) \
+ _(type) \
+ _(next) \
+ _(interactionProfile) \
+ _(countSuggestedBindings) \
+ _(suggestedBindings) \
+
+#define XR_LIST_STRUCT_XrSessionActionSetsAttachInfo(_) \
+ _(type) \
+ _(next) \
+ _(countActionSets) \
+ _(actionSets) \
+
+#define XR_LIST_STRUCT_XrInteractionProfileState(_) \
+ _(type) \
+ _(next) \
+ _(interactionProfile) \
+
+#define XR_LIST_STRUCT_XrActionStateGetInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(subactionPath) \
+
+#define XR_LIST_STRUCT_XrActionStateBoolean(_) \
+ _(type) \
+ _(next) \
+ _(currentState) \
+ _(changedSinceLastSync) \
+ _(lastChangeTime) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrActionStateFloat(_) \
+ _(type) \
+ _(next) \
+ _(currentState) \
+ _(changedSinceLastSync) \
+ _(lastChangeTime) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrVector2f(_) \
+ _(x) \
+ _(y) \
+
+#define XR_LIST_STRUCT_XrActionStateVector2f(_) \
+ _(type) \
+ _(next) \
+ _(currentState) \
+ _(changedSinceLastSync) \
+ _(lastChangeTime) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrActionStatePose(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+
+#define XR_LIST_STRUCT_XrActiveActionSet(_) \
+ _(actionSet) \
+ _(subactionPath) \
+
+#define XR_LIST_STRUCT_XrActionsSyncInfo(_) \
+ _(type) \
+ _(next) \
+ _(countActiveActionSets) \
+ _(activeActionSets) \
+
+#define XR_LIST_STRUCT_XrBoundSourcesForActionEnumerateInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+
+#define XR_LIST_STRUCT_XrInputSourceLocalizedNameGetInfo(_) \
+ _(type) \
+ _(next) \
+ _(sourcePath) \
+ _(whichComponents) \
+
+#define XR_LIST_STRUCT_XrHapticActionInfo(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(subactionPath) \
+
+#define XR_LIST_STRUCT_XrHapticBaseHeader(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrBaseInStructure(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrBaseOutStructure(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrOffset2Di(_) \
+ _(x) \
+ _(y) \
+
+#define XR_LIST_STRUCT_XrExtent2Di(_) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrRect2Di(_) \
+ _(offset) \
+ _(extent) \
+
+#define XR_LIST_STRUCT_XrSwapchainSubImage(_) \
+ _(swapchain) \
+ _(imageRect) \
+ _(imageArrayIndex) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerProjectionView(_) \
+ _(type) \
+ _(next) \
+ _(pose) \
+ _(fov) \
+ _(subImage) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerProjection(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(viewCount) \
+ _(views) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerQuad(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(size) \
+
+#define XR_LIST_STRUCT_XrEventDataBaseHeader(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrEventDataEventsLost(_) \
+ _(type) \
+ _(next) \
+ _(lostEventCount) \
+
+#define XR_LIST_STRUCT_XrEventDataInstanceLossPending(_) \
+ _(type) \
+ _(next) \
+ _(lossTime) \
+
+#define XR_LIST_STRUCT_XrEventDataSessionStateChanged(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+ _(state) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrEventDataReferenceSpaceChangePending(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+ _(referenceSpaceType) \
+ _(changeTime) \
+ _(poseValid) \
+ _(poseInPreviousSpace) \
+
+#define XR_LIST_STRUCT_XrEventDataInteractionProfileChanged(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+
+#define XR_LIST_STRUCT_XrHapticVibration(_) \
+ _(type) \
+ _(next) \
+ _(duration) \
+ _(frequency) \
+ _(amplitude) \
+
+#define XR_LIST_STRUCT_XrOffset2Df(_) \
+ _(x) \
+ _(y) \
+
+#define XR_LIST_STRUCT_XrRect2Df(_) \
+ _(offset) \
+ _(extent) \
+
+#define XR_LIST_STRUCT_XrVector4f(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+ _(w) \
+
+#define XR_LIST_STRUCT_XrColor4f(_) \
+ _(r) \
+ _(g) \
+ _(b) \
+ _(a) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerCubeKHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(swapchain) \
+ _(imageArrayIndex) \
+ _(orientation) \
+
+#define XR_LIST_STRUCT_XrInstanceCreateInfoAndroidKHR(_) \
+ _(type) \
+ _(next) \
+ _(applicationVM) \
+ _(applicationActivity) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerDepthInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(subImage) \
+ _(minDepth) \
+ _(maxDepth) \
+ _(nearZ) \
+ _(farZ) \
+
+#define XR_LIST_STRUCT_XrVulkanSwapchainFormatListCreateInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(viewFormatCount) \
+ _(viewFormats) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerCylinderKHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(radius) \
+ _(centralAngle) \
+ _(aspectRatio) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerEquirectKHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(radius) \
+ _(scale) \
+ _(bias) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLWin32KHR(_) \
+ _(type) \
+ _(next) \
+ _(hDC) \
+ _(hGLRC) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLXlibKHR(_) \
+ _(type) \
+ _(next) \
+ _(xDisplay) \
+ _(visualid) \
+ _(glxFBConfig) \
+ _(glxDrawable) \
+ _(glxContext) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLXcbKHR(_) \
+ _(type) \
+ _(next) \
+ _(connection) \
+ _(screenNumber) \
+ _(fbconfigid) \
+ _(visualid) \
+ _(glxDrawable) \
+ _(glxContext) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLWaylandKHR(_) \
+ _(type) \
+ _(next) \
+ _(display) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageOpenGLKHR(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsOpenGLKHR(_) \
+ _(type) \
+ _(next) \
+ _(minApiVersionSupported) \
+ _(maxApiVersionSupported) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingOpenGLESAndroidKHR(_) \
+ _(type) \
+ _(next) \
+ _(display) \
+ _(config) \
+ _(context) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageOpenGLESKHR(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsOpenGLESKHR(_) \
+ _(type) \
+ _(next) \
+ _(minApiVersionSupported) \
+ _(maxApiVersionSupported) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingVulkanKHR(_) \
+ _(type) \
+ _(next) \
+ _(instance) \
+ _(physicalDevice) \
+ _(device) \
+ _(queueFamilyIndex) \
+ _(queueIndex) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageVulkanKHR(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsVulkanKHR(_) \
+ _(type) \
+ _(next) \
+ _(minApiVersionSupported) \
+ _(maxApiVersionSupported) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingD3D11KHR(_) \
+ _(type) \
+ _(next) \
+ _(device) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageD3D11KHR(_) \
+ _(type) \
+ _(next) \
+ _(texture) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsD3D11KHR(_) \
+ _(type) \
+ _(next) \
+ _(adapterLuid) \
+ _(minFeatureLevel) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingD3D12KHR(_) \
+ _(type) \
+ _(next) \
+ _(device) \
+ _(queue) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageD3D12KHR(_) \
+ _(type) \
+ _(next) \
+ _(texture) \
+
+#define XR_LIST_STRUCT_XrGraphicsRequirementsD3D12KHR(_) \
+ _(type) \
+ _(next) \
+ _(adapterLuid) \
+ _(minFeatureLevel) \
+
+#define XR_LIST_STRUCT_XrVisibilityMaskKHR(_) \
+ _(type) \
+ _(next) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertices) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrEventDataVisibilityMaskChangedKHR(_) \
+ _(type) \
+ _(next) \
+ _(session) \
+ _(viewConfigurationType) \
+ _(viewIndex) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerColorScaleBiasKHR(_) \
+ _(type) \
+ _(next) \
+ _(colorScale) \
+ _(colorBias) \
+
+#define XR_LIST_STRUCT_XrLoaderInitInfoBaseHeaderKHR(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrLoaderInitInfoAndroidKHR(_) \
+ _(type) \
+ _(next) \
+ _(applicationVM) \
+ _(applicationContext) \
+
+#define XR_LIST_STRUCT_XrVulkanInstanceCreateInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(createFlags) \
+ _(pfnGetInstanceProcAddr) \
+ _(vulkanCreateInfo) \
+ _(vulkanAllocator) \
+
+#define XR_LIST_STRUCT_XrVulkanDeviceCreateInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(createFlags) \
+ _(pfnGetInstanceProcAddr) \
+ _(vulkanPhysicalDevice) \
+ _(vulkanCreateInfo) \
+ _(vulkanAllocator) \
+
+#define XR_LIST_STRUCT_XrVulkanGraphicsDeviceGetInfoKHR(_) \
+ _(type) \
+ _(next) \
+ _(systemId) \
+ _(vulkanInstance) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerEquirect2KHR(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(space) \
+ _(eyeVisibility) \
+ _(subImage) \
+ _(pose) \
+ _(radius) \
+ _(centralHorizontalAngle) \
+ _(upperVerticalAngle) \
+ _(lowerVerticalAngle) \
+
+#define XR_LIST_STRUCT_XrBindingModificationBaseHeaderKHR(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrBindingModificationsKHR(_) \
+ _(type) \
+ _(next) \
+ _(bindingModificationCount) \
+ _(bindingModifications) \
+
+#define XR_LIST_STRUCT_XrEventDataPerfSettingsEXT(_) \
+ _(type) \
+ _(next) \
+ _(domain) \
+ _(subDomain) \
+ _(fromLevel) \
+ _(toLevel) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsObjectNameInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(objectType) \
+ _(objectHandle) \
+ _(objectName) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsLabelEXT(_) \
+ _(type) \
+ _(next) \
+ _(labelName) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsMessengerCallbackDataEXT(_) \
+ _(type) \
+ _(next) \
+ _(messageId) \
+ _(functionName) \
+ _(message) \
+ _(objectCount) \
+ _(objects) \
+ _(sessionLabelCount) \
+ _(sessionLabels) \
+
+#define XR_LIST_STRUCT_XrDebugUtilsMessengerCreateInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(messageSeverities) \
+ _(messageTypes) \
+ _(userCallback) \
+ _(userData) \
+
+#define XR_LIST_STRUCT_XrSystemEyeGazeInteractionPropertiesEXT(_) \
+ _(type) \
+ _(next) \
+ _(supportsEyeGazeInteraction) \
+
+#define XR_LIST_STRUCT_XrEyeGazeSampleTimeEXT(_) \
+ _(type) \
+ _(next) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrSessionCreateInfoOverlayEXTX(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+ _(sessionLayersPlacement) \
+
+#define XR_LIST_STRUCT_XrEventDataMainSessionVisibilityChangedEXTX(_) \
+ _(type) \
+ _(next) \
+ _(visible) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(space) \
+ _(pose) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorSpaceCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(anchor) \
+ _(poseInAnchorSpace) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerImageLayoutFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerAlphaBlendFB(_) \
+ _(type) \
+ _(next) \
+ _(srcFactorColor) \
+ _(dstFactorColor) \
+ _(srcFactorAlpha) \
+ _(dstFactorAlpha) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationDepthRangeEXT(_) \
+ _(type) \
+ _(next) \
+ _(recommendedNearZ) \
+ _(minNearZ) \
+ _(recommendedFarZ) \
+ _(maxFarZ) \
+
+#define XR_LIST_STRUCT_XrGraphicsBindingEGLMNDX(_) \
+ _(type) \
+ _(next) \
+ _(getProcAddress) \
+ _(display) \
+ _(config) \
+ _(context) \
+
+#define XR_LIST_STRUCT_XrSpatialGraphNodeSpaceCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeType) \
+ _(nodeId) \
+ _(pose) \
+
+#define XR_LIST_STRUCT_XrSystemHandTrackingPropertiesEXT(_) \
+ _(type) \
+ _(next) \
+ _(supportsHandTracking) \
+
+#define XR_LIST_STRUCT_XrHandTrackerCreateInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(hand) \
+ _(handJointSet) \
+
+#define XR_LIST_STRUCT_XrHandJointsLocateInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(baseSpace) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrHandJointLocationEXT(_) \
+ _(locationFlags) \
+ _(pose) \
+ _(radius) \
+
+#define XR_LIST_STRUCT_XrHandJointVelocityEXT(_) \
+ _(velocityFlags) \
+ _(linearVelocity) \
+ _(angularVelocity) \
+
+#define XR_LIST_STRUCT_XrHandJointLocationsEXT(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+ _(jointCount) \
+ _(jointLocations) \
+
+#define XR_LIST_STRUCT_XrHandJointVelocitiesEXT(_) \
+ _(type) \
+ _(next) \
+ _(jointCount) \
+ _(jointVelocities) \
+
+#define XR_LIST_STRUCT_XrSystemHandTrackingMeshPropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(supportsHandTrackingMesh) \
+ _(maxHandMeshIndexCount) \
+ _(maxHandMeshVertexCount) \
+
+#define XR_LIST_STRUCT_XrHandMeshSpaceCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(handPoseType) \
+ _(poseInHandMeshSpace) \
+
+#define XR_LIST_STRUCT_XrHandMeshUpdateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(time) \
+ _(handPoseType) \
+
+#define XR_LIST_STRUCT_XrHandMeshIndexBufferMSFT(_) \
+ _(indexBufferKey) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrHandMeshVertexMSFT(_) \
+ _(position) \
+ _(normal) \
+
+#define XR_LIST_STRUCT_XrHandMeshVertexBufferMSFT(_) \
+ _(vertexUpdateTime) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertices) \
+
+#define XR_LIST_STRUCT_XrHandMeshMSFT(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+ _(indexBufferChanged) \
+ _(vertexBufferChanged) \
+ _(indexBuffer) \
+ _(vertexBuffer) \
+
+#define XR_LIST_STRUCT_XrHandPoseTypeInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(handPoseType) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationSessionBeginInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationCount) \
+ _(enabledViewConfigurationTypes) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(active) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationFrameStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationCount) \
+ _(viewConfigurationStates) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationLayerInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+ _(environmentBlendMode) \
+ _(layerCount) \
+ _(layers) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationFrameEndInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationCount) \
+ _(viewConfigurationLayersInfo) \
+
+#define XR_LIST_STRUCT_XrSecondaryViewConfigurationSwapchainCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(viewConfigurationType) \
+
+#define XR_LIST_STRUCT_XrControllerModelKeyStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(modelKey) \
+
+#define XR_LIST_STRUCT_XrControllerModelNodePropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(parentNodeName) \
+ _(nodeName) \
+
+#define XR_LIST_STRUCT_XrControllerModelPropertiesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeCapacityInput) \
+ _(nodeCountOutput) \
+ _(nodeProperties) \
+
+#define XR_LIST_STRUCT_XrControllerModelNodeStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodePose) \
+
+#define XR_LIST_STRUCT_XrControllerModelStateMSFT(_) \
+ _(type) \
+ _(next) \
+ _(nodeCapacityInput) \
+ _(nodeCountOutput) \
+ _(nodeStates) \
+
+#define XR_LIST_STRUCT_XrViewConfigurationViewFovEPIC(_) \
+ _(type) \
+ _(next) \
+ _(recommendedFov) \
+ _(maxMutableFov) \
+
+#define XR_LIST_STRUCT_XrHolographicWindowAttachmentMSFT(_) \
+ _(type) \
+ _(next) \
+ _(holographicSpace) \
+ _(coreWindow) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerReprojectionInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(reprojectionMode) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerReprojectionPlaneOverrideMSFT(_) \
+ _(type) \
+ _(next) \
+ _(position) \
+ _(normal) \
+ _(velocity) \
+
+#define XR_LIST_STRUCT_XrAndroidSurfaceSwapchainCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(createFlags) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateBaseHeaderFB(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerSecureContentFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrInteractionProfileAnalogThresholdVALVE(_) \
+ _(type) \
+ _(next) \
+ _(action) \
+ _(binding) \
+ _(onThreshold) \
+ _(offThreshold) \
+ _(onHaptic) \
+ _(offHaptic) \
+
+#define XR_LIST_STRUCT_XrHandJointsMotionRangeInfoEXT(_) \
+ _(type) \
+ _(next) \
+ _(handJointsMotionRange) \
+
+#define XR_LIST_STRUCT_XrUuidMSFT(_) \
+ _(bytes) \
+
+#define XR_LIST_STRUCT_XrSceneObserverCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSceneCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSceneSphereBoundMSFT(_) \
+ _(center) \
+ _(radius) \
+
+#define XR_LIST_STRUCT_XrSceneOrientedBoxBoundMSFT(_) \
+ _(pose) \
+ _(extents) \
+
+#define XR_LIST_STRUCT_XrSceneFrustumBoundMSFT(_) \
+ _(pose) \
+ _(fov) \
+ _(farDistance) \
+
+#define XR_LIST_STRUCT_XrSceneBoundsMSFT(_) \
+ _(space) \
+ _(time) \
+ _(sphereCount) \
+ _(spheres) \
+ _(boxCount) \
+ _(boxes) \
+ _(frustumCount) \
+ _(frustums) \
+
+#define XR_LIST_STRUCT_XrNewSceneComputeInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(requestedFeatureCount) \
+ _(requestedFeatures) \
+ _(consistency) \
+ _(bounds) \
+
+#define XR_LIST_STRUCT_XrVisualMeshComputeLodInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(lod) \
+
+#define XR_LIST_STRUCT_XrSceneComponentMSFT(_) \
+ _(componentType) \
+ _(id) \
+ _(parentId) \
+ _(updateTime) \
+
+#define XR_LIST_STRUCT_XrSceneComponentsMSFT(_) \
+ _(type) \
+ _(next) \
+ _(componentCapacityInput) \
+ _(componentCountOutput) \
+ _(components) \
+
+#define XR_LIST_STRUCT_XrSceneComponentsGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(componentType) \
+
+#define XR_LIST_STRUCT_XrSceneComponentLocationMSFT(_) \
+ _(flags) \
+ _(pose) \
+
+#define XR_LIST_STRUCT_XrSceneComponentLocationsMSFT(_) \
+ _(type) \
+ _(next) \
+ _(locationCount) \
+ _(locations) \
+
+#define XR_LIST_STRUCT_XrSceneComponentsLocateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(baseSpace) \
+ _(time) \
+ _(componentIdCount) \
+ _(componentIds) \
+
+#define XR_LIST_STRUCT_XrSceneObjectMSFT(_) \
+ _(objectType) \
+
+#define XR_LIST_STRUCT_XrSceneObjectsMSFT(_) \
+ _(type) \
+ _(next) \
+ _(sceneObjectCount) \
+ _(sceneObjects) \
+
+#define XR_LIST_STRUCT_XrSceneComponentParentFilterInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(parentId) \
+
+#define XR_LIST_STRUCT_XrSceneObjectTypesFilterInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(objectTypeCount) \
+ _(objectTypes) \
+
+#define XR_LIST_STRUCT_XrScenePlaneMSFT(_) \
+ _(alignment) \
+ _(size) \
+ _(meshBufferId) \
+ _(supportsIndicesUint16) \
+
+#define XR_LIST_STRUCT_XrScenePlanesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(scenePlaneCount) \
+ _(scenePlanes) \
+
+#define XR_LIST_STRUCT_XrScenePlaneAlignmentFilterInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(alignmentCount) \
+ _(alignments) \
+
+#define XR_LIST_STRUCT_XrSceneMeshMSFT(_) \
+ _(meshBufferId) \
+ _(supportsIndicesUint16) \
+
+#define XR_LIST_STRUCT_XrSceneMeshesMSFT(_) \
+ _(type) \
+ _(next) \
+ _(sceneMeshCount) \
+ _(sceneMeshes) \
+
+#define XR_LIST_STRUCT_XrSceneMeshBuffersGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(meshBufferId) \
+
+#define XR_LIST_STRUCT_XrSceneMeshBuffersMSFT(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSceneMeshVertexBufferMSFT(_) \
+ _(type) \
+ _(next) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertices) \
+
+#define XR_LIST_STRUCT_XrSceneMeshIndicesUint32MSFT(_) \
+ _(type) \
+ _(next) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrSceneMeshIndicesUint16MSFT(_) \
+ _(type) \
+ _(next) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrSerializedSceneFragmentDataGetInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(sceneFragmentId) \
+
+#define XR_LIST_STRUCT_XrDeserializeSceneFragmentMSFT(_) \
+ _(bufferSize) \
+ _(buffer) \
+
+#define XR_LIST_STRUCT_XrSceneDeserializeInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(fragmentCount) \
+ _(fragments) \
+
+#define XR_LIST_STRUCT_XrEventDataDisplayRefreshRateChangedFB(_) \
+ _(type) \
+ _(next) \
+ _(fromDisplayRefreshRate) \
+ _(toDisplayRefreshRate) \
+
+#define XR_LIST_STRUCT_XrViveTrackerPathsHTCX(_) \
+ _(type) \
+ _(next) \
+ _(persistentPath) \
+ _(rolePath) \
+
+#define XR_LIST_STRUCT_XrEventDataViveTrackerConnectedHTCX(_) \
+ _(type) \
+ _(next) \
+ _(paths) \
+
+#define XR_LIST_STRUCT_XrSystemFacialTrackingPropertiesHTC(_) \
+ _(type) \
+ _(next) \
+ _(supportEyeFacialTracking) \
+ _(supportLipFacialTracking) \
+
+#define XR_LIST_STRUCT_XrFacialExpressionsHTC(_) \
+ _(type) \
+ _(next) \
+ _(isActive) \
+ _(sampleTime) \
+ _(expressionCount) \
+ _(expressionWeightings) \
+
+#define XR_LIST_STRUCT_XrFacialTrackerCreateInfoHTC(_) \
+ _(type) \
+ _(next) \
+ _(facialTrackingType) \
+
+#define XR_LIST_STRUCT_XrSystemColorSpacePropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(colorSpace) \
+
+#define XR_LIST_STRUCT_XrVector4sFB(_) \
+ _(x) \
+ _(y) \
+ _(z) \
+ _(w) \
+
+#define XR_LIST_STRUCT_XrHandTrackingMeshFB(_) \
+ _(type) \
+ _(next) \
+ _(jointCapacityInput) \
+ _(jointCountOutput) \
+ _(jointBindPoses) \
+ _(jointRadii) \
+ _(jointParents) \
+ _(vertexCapacityInput) \
+ _(vertexCountOutput) \
+ _(vertexPositions) \
+ _(vertexNormals) \
+ _(vertexUVs) \
+ _(vertexBlendIndices) \
+ _(vertexBlendWeights) \
+ _(indexCapacityInput) \
+ _(indexCountOutput) \
+ _(indices) \
+
+#define XR_LIST_STRUCT_XrHandTrackingScaleFB(_) \
+ _(type) \
+ _(next) \
+ _(sensorOutput) \
+ _(currentOutput) \
+ _(overrideHandScale) \
+ _(overrideValueInput) \
+
+#define XR_LIST_STRUCT_XrHandTrackingAimStateFB(_) \
+ _(type) \
+ _(next) \
+ _(status) \
+ _(aimPose) \
+ _(pinchStrengthIndex) \
+ _(pinchStrengthMiddle) \
+ _(pinchStrengthRing) \
+ _(pinchStrengthLittle) \
+
+#define XR_LIST_STRUCT_XrHandCapsuleFB(_) \
+ _(points) \
+ _(radius) \
+ _(joint) \
+
+#define XR_LIST_STRUCT_XrHandTrackingCapsulesStateFB(_) \
+ _(type) \
+ _(next) \
+ _(capsules) \
+
+#define XR_LIST_STRUCT_XrFoveationProfileCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+
+#define XR_LIST_STRUCT_XrSwapchainCreateInfoFoveationFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateFoveationFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+ _(profile) \
+
+#define XR_LIST_STRUCT_XrFoveationLevelProfileCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(level) \
+ _(verticalOffset) \
+ _(dynamic) \
+
+#define XR_LIST_STRUCT_XrSystemKeyboardTrackingPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsKeyboardTracking) \
+
+#define XR_LIST_STRUCT_XrKeyboardTrackingDescriptionFB(_) \
+ _(trackedKeyboardId) \
+ _(size) \
+ _(flags) \
+ _(name) \
+
+#define XR_LIST_STRUCT_XrKeyboardSpaceCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(trackedKeyboardId) \
+
+#define XR_LIST_STRUCT_XrKeyboardTrackingQueryFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrTriangleMeshCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+ _(windingOrder) \
+ _(vertexCount) \
+ _(vertexBuffer) \
+ _(triangleCount) \
+ _(indexBuffer) \
+
+#define XR_LIST_STRUCT_XrSystemPassthroughPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsPassthrough) \
+
+#define XR_LIST_STRUCT_XrPassthroughCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrPassthroughLayerCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(passthrough) \
+ _(flags) \
+ _(purpose) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerPassthroughFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+ _(space) \
+ _(layerHandle) \
+
+#define XR_LIST_STRUCT_XrGeometryInstanceCreateInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(layer) \
+ _(mesh) \
+ _(baseSpace) \
+ _(pose) \
+ _(scale) \
+
+#define XR_LIST_STRUCT_XrGeometryInstanceTransformFB(_) \
+ _(type) \
+ _(next) \
+ _(baseSpace) \
+ _(time) \
+ _(pose) \
+ _(scale) \
+
+#define XR_LIST_STRUCT_XrPassthroughStyleFB(_) \
+ _(type) \
+ _(next) \
+ _(textureOpacityFactor) \
+ _(edgeColor) \
+
+#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToRgbaFB(_) \
+ _(type) \
+ _(next) \
+ _(textureColorMap) \
+
+#define XR_LIST_STRUCT_XrPassthroughColorMapMonoToMonoFB(_) \
+ _(type) \
+ _(next) \
+ _(textureColorMap) \
+
+#define XR_LIST_STRUCT_XrEventDataPassthroughStateChangedFB(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrRenderModelPathInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(path) \
+
+#define XR_LIST_STRUCT_XrRenderModelPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(vendorId) \
+ _(modelName) \
+ _(modelKey) \
+ _(modelVersion) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrRenderModelBufferFB(_) \
+ _(type) \
+ _(next) \
+ _(bufferCapacityInput) \
+ _(bufferCountOutput) \
+ _(buffer) \
+
+#define XR_LIST_STRUCT_XrRenderModelLoadInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(modelKey) \
+
+#define XR_LIST_STRUCT_XrSystemRenderModelPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(supportsRenderModelLoading) \
+
+#define XR_LIST_STRUCT_XrViewLocateFoveatedRenderingVARJO(_) \
+ _(type) \
+ _(next) \
+ _(foveatedRenderingActive) \
+
+#define XR_LIST_STRUCT_XrFoveatedViewConfigurationViewVARJO(_) \
+ _(type) \
+ _(next) \
+ _(foveatedRenderingActive) \
+
+#define XR_LIST_STRUCT_XrSystemFoveatedRenderingPropertiesVARJO(_) \
+ _(type) \
+ _(next) \
+ _(supportsFoveatedRendering) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerDepthTestVARJO(_) \
+ _(type) \
+ _(next) \
+ _(depthTestRangeNearZ) \
+ _(depthTestRangeFarZ) \
+
+#define XR_LIST_STRUCT_XrSystemMarkerTrackingPropertiesVARJO(_) \
+ _(type) \
+ _(next) \
+ _(supportsMarkerTracking) \
+
+#define XR_LIST_STRUCT_XrEventDataMarkerTrackingUpdateVARJO(_) \
+ _(type) \
+ _(next) \
+ _(markerId) \
+ _(isActive) \
+ _(isPredicted) \
+ _(time) \
+
+#define XR_LIST_STRUCT_XrMarkerSpaceCreateInfoVARJO(_) \
+ _(type) \
+ _(next) \
+ _(markerId) \
+ _(poseInMarkerSpace) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceNameMSFT(_) \
+ _(name) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorPersistenceInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(spatialAnchorPersistenceName) \
+ _(spatialAnchor) \
+
+#define XR_LIST_STRUCT_XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT(_) \
+ _(type) \
+ _(next) \
+ _(spatialAnchorStore) \
+ _(spatialAnchorPersistenceName) \
+
+#define XR_LIST_STRUCT_XrSwapchainImageFoveationVulkanFB(_) \
+ _(type) \
+ _(next) \
+ _(image) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateAndroidSurfaceDimensionsFB(_) \
+ _(type) \
+ _(next) \
+ _(width) \
+ _(height) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateSamplerOpenGLESFB(_) \
+ _(type) \
+ _(next) \
+ _(minFilter) \
+ _(magFilter) \
+ _(wrapModeS) \
+ _(wrapModeT) \
+ _(swizzleRed) \
+ _(swizzleGreen) \
+ _(swizzleBlue) \
+ _(swizzleAlpha) \
+ _(maxAnisotropy) \
+ _(borderColor) \
+
+#define XR_LIST_STRUCT_XrSwapchainStateSamplerVulkanFB(_) \
+ _(type) \
+ _(next) \
+ _(minFilter) \
+ _(magFilter) \
+ _(mipmapMode) \
+ _(wrapModeS) \
+ _(wrapModeT) \
+ _(swizzleRed) \
+ _(swizzleGreen) \
+ _(swizzleBlue) \
+ _(swizzleAlpha) \
+ _(maxAnisotropy) \
+ _(borderColor) \
+
+#define XR_LIST_STRUCT_XrCompositionLayerSpaceWarpInfoFB(_) \
+ _(type) \
+ _(next) \
+ _(layerFlags) \
+ _(motionVectorSubImage) \
+ _(appSpaceDeltaPose) \
+ _(depthSubImage) \
+ _(minDepth) \
+ _(maxDepth) \
+ _(nearZ) \
+ _(farZ) \
+
+#define XR_LIST_STRUCT_XrSystemSpaceWarpPropertiesFB(_) \
+ _(type) \
+ _(next) \
+ _(recommendedMotionVectorImageRectWidth) \
+ _(recommendedMotionVectorImageRectHeight) \
+
+#define XR_LIST_STRUCT_XrDigitalLensControlALMALENCE(_) \
+ _(type) \
+ _(next) \
+ _(flags) \
+
+#define XR_LIST_STRUCT_XrPassthroughKeyboardHandsIntensityFB(_) \
+ _(type) \
+ _(next) \
+ _(leftHandIntensity) \
+ _(rightHandIntensity) \
+
+#define XR_LIST_STRUCT_XrUuidEXT(_) \
+ _(data) \
+
+
+
+#define XR_LIST_STRUCTURE_TYPES_CORE(_) \
+ _(XrApiLayerProperties, XR_TYPE_API_LAYER_PROPERTIES) \
+ _(XrExtensionProperties, XR_TYPE_EXTENSION_PROPERTIES) \
+ _(XrInstanceCreateInfo, XR_TYPE_INSTANCE_CREATE_INFO) \
+ _(XrInstanceProperties, XR_TYPE_INSTANCE_PROPERTIES) \
+ _(XrEventDataBuffer, XR_TYPE_EVENT_DATA_BUFFER) \
+ _(XrSystemGetInfo, XR_TYPE_SYSTEM_GET_INFO) \
+ _(XrSystemProperties, XR_TYPE_SYSTEM_PROPERTIES) \
+ _(XrSessionCreateInfo, XR_TYPE_SESSION_CREATE_INFO) \
+ _(XrSpaceVelocity, XR_TYPE_SPACE_VELOCITY) \
+ _(XrReferenceSpaceCreateInfo, XR_TYPE_REFERENCE_SPACE_CREATE_INFO) \
+ _(XrActionSpaceCreateInfo, XR_TYPE_ACTION_SPACE_CREATE_INFO) \
+ _(XrSpaceLocation, XR_TYPE_SPACE_LOCATION) \
+ _(XrViewConfigurationProperties, XR_TYPE_VIEW_CONFIGURATION_PROPERTIES) \
+ _(XrViewConfigurationView, XR_TYPE_VIEW_CONFIGURATION_VIEW) \
+ _(XrSwapchainCreateInfo, XR_TYPE_SWAPCHAIN_CREATE_INFO) \
+ _(XrSwapchainImageAcquireInfo, XR_TYPE_SWAPCHAIN_IMAGE_ACQUIRE_INFO) \
+ _(XrSwapchainImageWaitInfo, XR_TYPE_SWAPCHAIN_IMAGE_WAIT_INFO) \
+ _(XrSwapchainImageReleaseInfo, XR_TYPE_SWAPCHAIN_IMAGE_RELEASE_INFO) \
+ _(XrSessionBeginInfo, XR_TYPE_SESSION_BEGIN_INFO) \
+ _(XrFrameWaitInfo, XR_TYPE_FRAME_WAIT_INFO) \
+ _(XrFrameState, XR_TYPE_FRAME_STATE) \
+ _(XrFrameBeginInfo, XR_TYPE_FRAME_BEGIN_INFO) \
+ _(XrFrameEndInfo, XR_TYPE_FRAME_END_INFO) \
+ _(XrViewLocateInfo, XR_TYPE_VIEW_LOCATE_INFO) \
+ _(XrViewState, XR_TYPE_VIEW_STATE) \
+ _(XrView, XR_TYPE_VIEW) \
+ _(XrActionSetCreateInfo, XR_TYPE_ACTION_SET_CREATE_INFO) \
+ _(XrActionCreateInfo, XR_TYPE_ACTION_CREATE_INFO) \
+ _(XrInteractionProfileSuggestedBinding, XR_TYPE_INTERACTION_PROFILE_SUGGESTED_BINDING) \
+ _(XrSessionActionSetsAttachInfo, XR_TYPE_SESSION_ACTION_SETS_ATTACH_INFO) \
+ _(XrInteractionProfileState, XR_TYPE_INTERACTION_PROFILE_STATE) \
+ _(XrActionStateGetInfo, XR_TYPE_ACTION_STATE_GET_INFO) \
+ _(XrActionStateBoolean, XR_TYPE_ACTION_STATE_BOOLEAN) \
+ _(XrActionStateFloat, XR_TYPE_ACTION_STATE_FLOAT) \
+ _(XrActionStateVector2f, XR_TYPE_ACTION_STATE_VECTOR2F) \
+ _(XrActionStatePose, XR_TYPE_ACTION_STATE_POSE) \
+ _(XrActionsSyncInfo, XR_TYPE_ACTIONS_SYNC_INFO) \
+ _(XrBoundSourcesForActionEnumerateInfo, XR_TYPE_BOUND_SOURCES_FOR_ACTION_ENUMERATE_INFO) \
+ _(XrInputSourceLocalizedNameGetInfo, XR_TYPE_INPUT_SOURCE_LOCALIZED_NAME_GET_INFO) \
+ _(XrHapticActionInfo, XR_TYPE_HAPTIC_ACTION_INFO) \
+ _(XrCompositionLayerProjectionView, XR_TYPE_COMPOSITION_LAYER_PROJECTION_VIEW) \
+ _(XrCompositionLayerProjection, XR_TYPE_COMPOSITION_LAYER_PROJECTION) \
+ _(XrCompositionLayerQuad, XR_TYPE_COMPOSITION_LAYER_QUAD) \
+ _(XrEventDataEventsLost, XR_TYPE_EVENT_DATA_EVENTS_LOST) \
+ _(XrEventDataInstanceLossPending, XR_TYPE_EVENT_DATA_INSTANCE_LOSS_PENDING) \
+ _(XrEventDataSessionStateChanged, XR_TYPE_EVENT_DATA_SESSION_STATE_CHANGED) \
+ _(XrEventDataReferenceSpaceChangePending, XR_TYPE_EVENT_DATA_REFERENCE_SPACE_CHANGE_PENDING) \
+ _(XrEventDataInteractionProfileChanged, XR_TYPE_EVENT_DATA_INTERACTION_PROFILE_CHANGED) \
+ _(XrHapticVibration, XR_TYPE_HAPTIC_VIBRATION) \
+ _(XrCompositionLayerCubeKHR, XR_TYPE_COMPOSITION_LAYER_CUBE_KHR) \
+ _(XrCompositionLayerDepthInfoKHR, XR_TYPE_COMPOSITION_LAYER_DEPTH_INFO_KHR) \
+ _(XrCompositionLayerCylinderKHR, XR_TYPE_COMPOSITION_LAYER_CYLINDER_KHR) \
+ _(XrCompositionLayerEquirectKHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT_KHR) \
+ _(XrVisibilityMaskKHR, XR_TYPE_VISIBILITY_MASK_KHR) \
+ _(XrEventDataVisibilityMaskChangedKHR, XR_TYPE_EVENT_DATA_VISIBILITY_MASK_CHANGED_KHR) \
+ _(XrCompositionLayerColorScaleBiasKHR, XR_TYPE_COMPOSITION_LAYER_COLOR_SCALE_BIAS_KHR) \
+ _(XrCompositionLayerEquirect2KHR, XR_TYPE_COMPOSITION_LAYER_EQUIRECT2_KHR) \
+ _(XrBindingModificationsKHR, XR_TYPE_BINDING_MODIFICATIONS_KHR) \
+ _(XrEventDataPerfSettingsEXT, XR_TYPE_EVENT_DATA_PERF_SETTINGS_EXT) \
+ _(XrDebugUtilsObjectNameInfoEXT, XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT) \
+ _(XrDebugUtilsLabelEXT, XR_TYPE_DEBUG_UTILS_LABEL_EXT) \
+ _(XrDebugUtilsMessengerCallbackDataEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT) \
+ _(XrDebugUtilsMessengerCreateInfoEXT, XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) \
+ _(XrSystemEyeGazeInteractionPropertiesEXT, XR_TYPE_SYSTEM_EYE_GAZE_INTERACTION_PROPERTIES_EXT) \
+ _(XrEyeGazeSampleTimeEXT, XR_TYPE_EYE_GAZE_SAMPLE_TIME_EXT) \
+ _(XrSessionCreateInfoOverlayEXTX, XR_TYPE_SESSION_CREATE_INFO_OVERLAY_EXTX) \
+ _(XrEventDataMainSessionVisibilityChangedEXTX, XR_TYPE_EVENT_DATA_MAIN_SESSION_VISIBILITY_CHANGED_EXTX) \
+ _(XrSpatialAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_CREATE_INFO_MSFT) \
+ _(XrSpatialAnchorSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_SPACE_CREATE_INFO_MSFT) \
+ _(XrCompositionLayerImageLayoutFB, XR_TYPE_COMPOSITION_LAYER_IMAGE_LAYOUT_FB) \
+ _(XrCompositionLayerAlphaBlendFB, XR_TYPE_COMPOSITION_LAYER_ALPHA_BLEND_FB) \
+ _(XrViewConfigurationDepthRangeEXT, XR_TYPE_VIEW_CONFIGURATION_DEPTH_RANGE_EXT) \
+ _(XrSpatialGraphNodeSpaceCreateInfoMSFT, XR_TYPE_SPATIAL_GRAPH_NODE_SPACE_CREATE_INFO_MSFT) \
+ _(XrSystemHandTrackingPropertiesEXT, XR_TYPE_SYSTEM_HAND_TRACKING_PROPERTIES_EXT) \
+ _(XrHandTrackerCreateInfoEXT, XR_TYPE_HAND_TRACKER_CREATE_INFO_EXT) \
+ _(XrHandJointsLocateInfoEXT, XR_TYPE_HAND_JOINTS_LOCATE_INFO_EXT) \
+ _(XrHandJointLocationsEXT, XR_TYPE_HAND_JOINT_LOCATIONS_EXT) \
+ _(XrHandJointVelocitiesEXT, XR_TYPE_HAND_JOINT_VELOCITIES_EXT) \
+ _(XrSystemHandTrackingMeshPropertiesMSFT, XR_TYPE_SYSTEM_HAND_TRACKING_MESH_PROPERTIES_MSFT) \
+ _(XrHandMeshSpaceCreateInfoMSFT, XR_TYPE_HAND_MESH_SPACE_CREATE_INFO_MSFT) \
+ _(XrHandMeshUpdateInfoMSFT, XR_TYPE_HAND_MESH_UPDATE_INFO_MSFT) \
+ _(XrHandMeshMSFT, XR_TYPE_HAND_MESH_MSFT) \
+ _(XrHandPoseTypeInfoMSFT, XR_TYPE_HAND_POSE_TYPE_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationSessionBeginInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SESSION_BEGIN_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_STATE_MSFT) \
+ _(XrSecondaryViewConfigurationFrameStateMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_STATE_MSFT) \
+ _(XrSecondaryViewConfigurationLayerInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_LAYER_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationFrameEndInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_FRAME_END_INFO_MSFT) \
+ _(XrSecondaryViewConfigurationSwapchainCreateInfoMSFT, XR_TYPE_SECONDARY_VIEW_CONFIGURATION_SWAPCHAIN_CREATE_INFO_MSFT) \
+ _(XrControllerModelKeyStateMSFT, XR_TYPE_CONTROLLER_MODEL_KEY_STATE_MSFT) \
+ _(XrControllerModelNodePropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_PROPERTIES_MSFT) \
+ _(XrControllerModelPropertiesMSFT, XR_TYPE_CONTROLLER_MODEL_PROPERTIES_MSFT) \
+ _(XrControllerModelNodeStateMSFT, XR_TYPE_CONTROLLER_MODEL_NODE_STATE_MSFT) \
+ _(XrControllerModelStateMSFT, XR_TYPE_CONTROLLER_MODEL_STATE_MSFT) \
+ _(XrViewConfigurationViewFovEPIC, XR_TYPE_VIEW_CONFIGURATION_VIEW_FOV_EPIC) \
+ _(XrCompositionLayerReprojectionInfoMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_INFO_MSFT) \
+ _(XrCompositionLayerReprojectionPlaneOverrideMSFT, XR_TYPE_COMPOSITION_LAYER_REPROJECTION_PLANE_OVERRIDE_MSFT) \
+ _(XrCompositionLayerSecureContentFB, XR_TYPE_COMPOSITION_LAYER_SECURE_CONTENT_FB) \
+ _(XrInteractionProfileAnalogThresholdVALVE, XR_TYPE_INTERACTION_PROFILE_ANALOG_THRESHOLD_VALVE) \
+ _(XrHandJointsMotionRangeInfoEXT, XR_TYPE_HAND_JOINTS_MOTION_RANGE_INFO_EXT) \
+ _(XrSceneObserverCreateInfoMSFT, XR_TYPE_SCENE_OBSERVER_CREATE_INFO_MSFT) \
+ _(XrSceneCreateInfoMSFT, XR_TYPE_SCENE_CREATE_INFO_MSFT) \
+ _(XrNewSceneComputeInfoMSFT, XR_TYPE_NEW_SCENE_COMPUTE_INFO_MSFT) \
+ _(XrVisualMeshComputeLodInfoMSFT, XR_TYPE_VISUAL_MESH_COMPUTE_LOD_INFO_MSFT) \
+ _(XrSceneComponentsMSFT, XR_TYPE_SCENE_COMPONENTS_MSFT) \
+ _(XrSceneComponentsGetInfoMSFT, XR_TYPE_SCENE_COMPONENTS_GET_INFO_MSFT) \
+ _(XrSceneComponentLocationsMSFT, XR_TYPE_SCENE_COMPONENT_LOCATIONS_MSFT) \
+ _(XrSceneComponentsLocateInfoMSFT, XR_TYPE_SCENE_COMPONENTS_LOCATE_INFO_MSFT) \
+ _(XrSceneObjectsMSFT, XR_TYPE_SCENE_OBJECTS_MSFT) \
+ _(XrSceneComponentParentFilterInfoMSFT, XR_TYPE_SCENE_COMPONENT_PARENT_FILTER_INFO_MSFT) \
+ _(XrSceneObjectTypesFilterInfoMSFT, XR_TYPE_SCENE_OBJECT_TYPES_FILTER_INFO_MSFT) \
+ _(XrScenePlanesMSFT, XR_TYPE_SCENE_PLANES_MSFT) \
+ _(XrScenePlaneAlignmentFilterInfoMSFT, XR_TYPE_SCENE_PLANE_ALIGNMENT_FILTER_INFO_MSFT) \
+ _(XrSceneMeshesMSFT, XR_TYPE_SCENE_MESHES_MSFT) \
+ _(XrSceneMeshBuffersGetInfoMSFT, XR_TYPE_SCENE_MESH_BUFFERS_GET_INFO_MSFT) \
+ _(XrSceneMeshBuffersMSFT, XR_TYPE_SCENE_MESH_BUFFERS_MSFT) \
+ _(XrSceneMeshVertexBufferMSFT, XR_TYPE_SCENE_MESH_VERTEX_BUFFER_MSFT) \
+ _(XrSceneMeshIndicesUint32MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT32_MSFT) \
+ _(XrSceneMeshIndicesUint16MSFT, XR_TYPE_SCENE_MESH_INDICES_UINT16_MSFT) \
+ _(XrSerializedSceneFragmentDataGetInfoMSFT, XR_TYPE_SERIALIZED_SCENE_FRAGMENT_DATA_GET_INFO_MSFT) \
+ _(XrSceneDeserializeInfoMSFT, XR_TYPE_SCENE_DESERIALIZE_INFO_MSFT) \
+ _(XrEventDataDisplayRefreshRateChangedFB, XR_TYPE_EVENT_DATA_DISPLAY_REFRESH_RATE_CHANGED_FB) \
+ _(XrViveTrackerPathsHTCX, XR_TYPE_VIVE_TRACKER_PATHS_HTCX) \
+ _(XrEventDataViveTrackerConnectedHTCX, XR_TYPE_EVENT_DATA_VIVE_TRACKER_CONNECTED_HTCX) \
+ _(XrSystemFacialTrackingPropertiesHTC, XR_TYPE_SYSTEM_FACIAL_TRACKING_PROPERTIES_HTC) \
+ _(XrFacialExpressionsHTC, XR_TYPE_FACIAL_EXPRESSIONS_HTC) \
+ _(XrFacialTrackerCreateInfoHTC, XR_TYPE_FACIAL_TRACKER_CREATE_INFO_HTC) \
+ _(XrSystemColorSpacePropertiesFB, XR_TYPE_SYSTEM_COLOR_SPACE_PROPERTIES_FB) \
+ _(XrHandTrackingMeshFB, XR_TYPE_HAND_TRACKING_MESH_FB) \
+ _(XrHandTrackingScaleFB, XR_TYPE_HAND_TRACKING_SCALE_FB) \
+ _(XrHandTrackingAimStateFB, XR_TYPE_HAND_TRACKING_AIM_STATE_FB) \
+ _(XrHandTrackingCapsulesStateFB, XR_TYPE_HAND_TRACKING_CAPSULES_STATE_FB) \
+ _(XrFoveationProfileCreateInfoFB, XR_TYPE_FOVEATION_PROFILE_CREATE_INFO_FB) \
+ _(XrSwapchainCreateInfoFoveationFB, XR_TYPE_SWAPCHAIN_CREATE_INFO_FOVEATION_FB) \
+ _(XrSwapchainStateFoveationFB, XR_TYPE_SWAPCHAIN_STATE_FOVEATION_FB) \
+ _(XrFoveationLevelProfileCreateInfoFB, XR_TYPE_FOVEATION_LEVEL_PROFILE_CREATE_INFO_FB) \
+ _(XrSystemKeyboardTrackingPropertiesFB, XR_TYPE_SYSTEM_KEYBOARD_TRACKING_PROPERTIES_FB) \
+ _(XrKeyboardSpaceCreateInfoFB, XR_TYPE_KEYBOARD_SPACE_CREATE_INFO_FB) \
+ _(XrKeyboardTrackingQueryFB, XR_TYPE_KEYBOARD_TRACKING_QUERY_FB) \
+ _(XrTriangleMeshCreateInfoFB, XR_TYPE_TRIANGLE_MESH_CREATE_INFO_FB) \
+ _(XrSystemPassthroughPropertiesFB, XR_TYPE_SYSTEM_PASSTHROUGH_PROPERTIES_FB) \
+ _(XrPassthroughCreateInfoFB, XR_TYPE_PASSTHROUGH_CREATE_INFO_FB) \
+ _(XrPassthroughLayerCreateInfoFB, XR_TYPE_PASSTHROUGH_LAYER_CREATE_INFO_FB) \
+ _(XrCompositionLayerPassthroughFB, XR_TYPE_COMPOSITION_LAYER_PASSTHROUGH_FB) \
+ _(XrGeometryInstanceCreateInfoFB, XR_TYPE_GEOMETRY_INSTANCE_CREATE_INFO_FB) \
+ _(XrGeometryInstanceTransformFB, XR_TYPE_GEOMETRY_INSTANCE_TRANSFORM_FB) \
+ _(XrPassthroughStyleFB, XR_TYPE_PASSTHROUGH_STYLE_FB) \
+ _(XrPassthroughColorMapMonoToRgbaFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_RGBA_FB) \
+ _(XrPassthroughColorMapMonoToMonoFB, XR_TYPE_PASSTHROUGH_COLOR_MAP_MONO_TO_MONO_FB) \
+ _(XrEventDataPassthroughStateChangedFB, XR_TYPE_EVENT_DATA_PASSTHROUGH_STATE_CHANGED_FB) \
+ _(XrRenderModelPathInfoFB, XR_TYPE_RENDER_MODEL_PATH_INFO_FB) \
+ _(XrRenderModelPropertiesFB, XR_TYPE_RENDER_MODEL_PROPERTIES_FB) \
+ _(XrRenderModelBufferFB, XR_TYPE_RENDER_MODEL_BUFFER_FB) \
+ _(XrRenderModelLoadInfoFB, XR_TYPE_RENDER_MODEL_LOAD_INFO_FB) \
+ _(XrSystemRenderModelPropertiesFB, XR_TYPE_SYSTEM_RENDER_MODEL_PROPERTIES_FB) \
+ _(XrViewLocateFoveatedRenderingVARJO, XR_TYPE_VIEW_LOCATE_FOVEATED_RENDERING_VARJO) \
+ _(XrFoveatedViewConfigurationViewVARJO, XR_TYPE_FOVEATED_VIEW_CONFIGURATION_VIEW_VARJO) \
+ _(XrSystemFoveatedRenderingPropertiesVARJO, XR_TYPE_SYSTEM_FOVEATED_RENDERING_PROPERTIES_VARJO) \
+ _(XrCompositionLayerDepthTestVARJO, XR_TYPE_COMPOSITION_LAYER_DEPTH_TEST_VARJO) \
+ _(XrSystemMarkerTrackingPropertiesVARJO, XR_TYPE_SYSTEM_MARKER_TRACKING_PROPERTIES_VARJO) \
+ _(XrEventDataMarkerTrackingUpdateVARJO, XR_TYPE_EVENT_DATA_MARKER_TRACKING_UPDATE_VARJO) \
+ _(XrMarkerSpaceCreateInfoVARJO, XR_TYPE_MARKER_SPACE_CREATE_INFO_VARJO) \
+ _(XrSpatialAnchorPersistenceInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_PERSISTENCE_INFO_MSFT) \
+ _(XrSpatialAnchorFromPersistedAnchorCreateInfoMSFT, XR_TYPE_SPATIAL_ANCHOR_FROM_PERSISTED_ANCHOR_CREATE_INFO_MSFT) \
+ _(XrCompositionLayerSpaceWarpInfoFB, XR_TYPE_COMPOSITION_LAYER_SPACE_WARP_INFO_FB) \
+ _(XrSystemSpaceWarpPropertiesFB, XR_TYPE_SYSTEM_SPACE_WARP_PROPERTIES_FB) \
+ _(XrDigitalLensControlALMALENCE, XR_TYPE_DIGITAL_LENS_CONTROL_ALMALENCE) \
+ _(XrPassthroughKeyboardHandsIntensityFB, XR_TYPE_PASSTHROUGH_KEYBOARD_HANDS_INTENSITY_FB) \
+
+
+
+
+#if defined(XR_USE_GRAPHICS_API_D3D11)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) \
+ _(XrGraphicsBindingD3D11KHR, XR_TYPE_GRAPHICS_BINDING_D3D11_KHR) \
+ _(XrSwapchainImageD3D11KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D11_KHR) \
+ _(XrGraphicsRequirementsD3D11KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D11_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_D3D12)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) \
+ _(XrGraphicsBindingD3D12KHR, XR_TYPE_GRAPHICS_BINDING_D3D12_KHR) \
+ _(XrSwapchainImageD3D12KHR, XR_TYPE_SWAPCHAIN_IMAGE_D3D12_KHR) \
+ _(XrGraphicsRequirementsD3D12KHR, XR_TYPE_GRAPHICS_REQUIREMENTS_D3D12_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) \
+ _(XrSwapchainImageOpenGLKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_KHR) \
+ _(XrGraphicsRequirementsOpenGLKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WAYLAND)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) \
+ _(XrGraphicsBindingOpenGLWaylandKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WAYLAND_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_WIN32)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) \
+ _(XrGraphicsBindingOpenGLWin32KHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_WIN32_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XCB)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \
+ _(XrGraphicsBindingOpenGLXcbKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XCB_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL) && defined(XR_USE_PLATFORM_XLIB)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \
+ _(XrGraphicsBindingOpenGLXlibKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_XLIB_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \
+ _(XrSwapchainImageOpenGLESKHR, XR_TYPE_SWAPCHAIN_IMAGE_OPENGL_ES_KHR) \
+ _(XrGraphicsRequirementsOpenGLESKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_OPENGL_ES_KHR) \
+ _(XrSwapchainStateSamplerOpenGLESFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_OPENGL_ES_FB) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES) && defined(XR_USE_PLATFORM_ANDROID)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \
+ _(XrGraphicsBindingOpenGLESAndroidKHR, XR_TYPE_GRAPHICS_BINDING_OPENGL_ES_ANDROID_KHR) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_)
+#endif
+
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \
+ _(XrVulkanSwapchainFormatListCreateInfoKHR, XR_TYPE_VULKAN_SWAPCHAIN_FORMAT_LIST_CREATE_INFO_KHR) \
+ _(XrGraphicsBindingVulkanKHR, XR_TYPE_GRAPHICS_BINDING_VULKAN_KHR) \
+ _(XrSwapchainImageVulkanKHR, XR_TYPE_SWAPCHAIN_IMAGE_VULKAN_KHR) \
+ _(XrGraphicsRequirementsVulkanKHR, XR_TYPE_GRAPHICS_REQUIREMENTS_VULKAN_KHR) \
+ _(XrVulkanInstanceCreateInfoKHR, XR_TYPE_VULKAN_INSTANCE_CREATE_INFO_KHR) \
+ _(XrVulkanDeviceCreateInfoKHR, XR_TYPE_VULKAN_DEVICE_CREATE_INFO_KHR) \
+ _(XrVulkanGraphicsDeviceGetInfoKHR, XR_TYPE_VULKAN_GRAPHICS_DEVICE_GET_INFO_KHR) \
+ _(XrSwapchainImageFoveationVulkanFB, XR_TYPE_SWAPCHAIN_IMAGE_FOVEATION_VULKAN_FB) \
+ _(XrSwapchainStateSamplerVulkanFB, XR_TYPE_SWAPCHAIN_STATE_SAMPLER_VULKAN_FB) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_)
+#endif
+
+#if defined(XR_USE_PLATFORM_ANDROID)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \
+ _(XrInstanceCreateInfoAndroidKHR, XR_TYPE_INSTANCE_CREATE_INFO_ANDROID_KHR) \
+ _(XrLoaderInitInfoAndroidKHR, XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) \
+ _(XrAndroidSurfaceSwapchainCreateInfoFB, XR_TYPE_ANDROID_SURFACE_SWAPCHAIN_CREATE_INFO_FB) \
+ _(XrSwapchainStateAndroidSurfaceDimensionsFB, XR_TYPE_SWAPCHAIN_STATE_ANDROID_SURFACE_DIMENSIONS_FB) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_)
+#endif
+
+#if defined(XR_USE_PLATFORM_EGL)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \
+ _(XrGraphicsBindingEGLMNDX, XR_TYPE_GRAPHICS_BINDING_EGL_MNDX) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_)
+#endif
+
+#if defined(XR_USE_PLATFORM_WIN32)
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \
+ _(XrHolographicWindowAttachmentMSFT, XR_TYPE_HOLOGRAPHIC_WINDOW_ATTACHMENT_MSFT) \
+
+
+#else
+#define XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_)
+#endif
+
+#define XR_LIST_STRUCTURE_TYPES(_) \
+ XR_LIST_STRUCTURE_TYPES_CORE(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D11(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_D3D12(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WAYLAND(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_WIN32(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XCB(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_XR_USE_PLATFORM_XLIB(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_OPENGL_ES_XR_USE_PLATFORM_ANDROID(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_GRAPHICS_API_VULKAN(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_ANDROID(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_EGL(_) \
+ XR_LIST_STRUCTURE_TYPES_XR_USE_PLATFORM_WIN32(_) \
+
+
+#define XR_LIST_EXTENSIONS(_) \
+ _(XR_KHR_android_thread_settings, 4) \
+ _(XR_KHR_android_surface_swapchain, 5) \
+ _(XR_KHR_composition_layer_cube, 7) \
+ _(XR_KHR_android_create_instance, 9) \
+ _(XR_KHR_composition_layer_depth, 11) \
+ _(XR_KHR_vulkan_swapchain_format_list, 15) \
+ _(XR_EXT_performance_settings, 16) \
+ _(XR_EXT_thermal_query, 17) \
+ _(XR_KHR_composition_layer_cylinder, 18) \
+ _(XR_KHR_composition_layer_equirect, 19) \
+ _(XR_EXT_debug_utils, 20) \
+ _(XR_KHR_opengl_enable, 24) \
+ _(XR_KHR_opengl_es_enable, 25) \
+ _(XR_KHR_vulkan_enable, 26) \
+ _(XR_KHR_D3D11_enable, 28) \
+ _(XR_KHR_D3D12_enable, 29) \
+ _(XR_EXT_eye_gaze_interaction, 31) \
+ _(XR_KHR_visibility_mask, 32) \
+ _(XR_EXTX_overlay, 34) \
+ _(XR_KHR_composition_layer_color_scale_bias, 35) \
+ _(XR_KHR_win32_convert_performance_counter_time, 36) \
+ _(XR_KHR_convert_timespec_time, 37) \
+ _(XR_VARJO_quad_views, 38) \
+ _(XR_MSFT_unbounded_reference_space, 39) \
+ _(XR_MSFT_spatial_anchor, 40) \
+ _(XR_FB_composition_layer_image_layout, 41) \
+ _(XR_FB_composition_layer_alpha_blend, 42) \
+ _(XR_MND_headless, 43) \
+ _(XR_OCULUS_android_session_state_enable, 45) \
+ _(XR_EXT_view_configuration_depth_range, 47) \
+ _(XR_EXT_conformance_automation, 48) \
+ _(XR_MNDX_egl_enable, 49) \
+ _(XR_MSFT_spatial_graph_bridge, 50) \
+ _(XR_MSFT_hand_interaction, 51) \
+ _(XR_EXT_hand_tracking, 52) \
+ _(XR_MSFT_hand_tracking_mesh, 53) \
+ _(XR_MSFT_secondary_view_configuration, 54) \
+ _(XR_MSFT_first_person_observer, 55) \
+ _(XR_MSFT_controller_model, 56) \
+ _(XR_MSFT_perception_anchor_interop, 57) \
+ _(XR_EXT_win32_appcontainer_compatible, 58) \
+ _(XR_EPIC_view_configuration_fov, 60) \
+ _(XR_MSFT_holographic_window_attachment, 64) \
+ _(XR_MSFT_composition_layer_reprojection, 67) \
+ _(XR_HUAWEI_controller_interaction, 70) \
+ _(XR_FB_android_surface_swapchain_create, 71) \
+ _(XR_FB_swapchain_update_state, 72) \
+ _(XR_FB_composition_layer_secure_content, 73) \
+ _(XR_VALVE_analog_threshold, 80) \
+ _(XR_EXT_hand_joints_motion_range, 81) \
+ _(XR_KHR_loader_init, 89) \
+ _(XR_KHR_loader_init_android, 90) \
+ _(XR_KHR_vulkan_enable2, 91) \
+ _(XR_KHR_composition_layer_equirect2, 92) \
+ _(XR_EXT_samsung_odyssey_controller, 95) \
+ _(XR_EXT_hp_mixed_reality_controller, 96) \
+ _(XR_MND_swapchain_usage_input_attachment_bit, 97) \
+ _(XR_MSFT_scene_understanding, 98) \
+ _(XR_MSFT_scene_understanding_serialization, 99) \
+ _(XR_FB_display_refresh_rate, 102) \
+ _(XR_HTC_vive_cosmos_controller_interaction, 103) \
+ _(XR_HTCX_vive_tracker_interaction, 104) \
+ _(XR_HTC_facial_tracking, 105) \
+ _(XR_HTC_vive_focus3_controller_interaction, 106) \
+ _(XR_FB_color_space, 109) \
+ _(XR_FB_hand_tracking_mesh, 111) \
+ _(XR_FB_hand_tracking_aim, 112) \
+ _(XR_FB_hand_tracking_capsules, 113) \
+ _(XR_FB_foveation, 115) \
+ _(XR_FB_foveation_configuration, 116) \
+ _(XR_FB_keyboard_tracking, 117) \
+ _(XR_FB_triangle_mesh, 118) \
+ _(XR_FB_passthrough, 119) \
+ _(XR_FB_render_model, 120) \
+ _(XR_KHR_binding_modification, 121) \
+ _(XR_VARJO_foveated_rendering, 122) \
+ _(XR_VARJO_composition_layer_depth_test, 123) \
+ _(XR_VARJO_environment_depth_estimation, 124) \
+ _(XR_VARJO_marker_tracking, 125) \
+ _(XR_MSFT_spatial_anchor_persistence, 143) \
+ _(XR_OCULUS_audio_device_guid, 160) \
+ _(XR_FB_foveation_vulkan, 161) \
+ _(XR_FB_swapchain_update_state_android_surface, 162) \
+ _(XR_FB_swapchain_update_state_opengl_es, 163) \
+ _(XR_FB_swapchain_update_state_vulkan, 164) \
+ _(XR_KHR_swapchain_usage_input_attachment_bit, 166) \
+ _(XR_FB_space_warp, 172) \
+ _(XR_ALMALENCE_digital_lens_control, 197) \
+ _(XR_FB_passthrough_keyboard_hands, 204) \
+ _(XR_EXT_uuid, 300) \
+
+
+#endif
+
diff --git a/thirdparty/openxr/src/.clang-format b/thirdparty/openxr/src/.clang-format
new file mode 100644
index 0000000000..36546cab92
--- /dev/null
+++ b/thirdparty/openxr/src/.clang-format
@@ -0,0 +1,10 @@
+---
+# Copyright (c) 2017-2022, The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+# Use defaults from the Google style with the following exceptions:
+BasedOnStyle: Google
+IndentWidth: 4
+ColumnLimit: 132
+SortIncludes: false
+...
diff --git a/thirdparty/openxr/src/common/extra_algorithms.h b/thirdparty/openxr/src/common/extra_algorithms.h
new file mode 100644
index 0000000000..64af4d08ff
--- /dev/null
+++ b/thirdparty/openxr/src/common/extra_algorithms.h
@@ -0,0 +1,47 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+
+/*!
+ * @file
+ *
+ * Additional functions along the lines of the standard library algorithms.
+ */
+
+#pragma once
+
+#include <algorithm>
+#include <vector>
+
+/// Like std::remove_if, except it works on associative containers and it actually removes this.
+///
+/// The iterator stuff in here is subtle - .erase() invalidates only that iterator, but it returns a non-invalidated iterator to the
+/// next valid element which we can use instead of incrementing.
+template <typename T, typename Pred>
+static inline void map_erase_if(T &container, Pred &&predicate) {
+ for (auto it = container.begin(); it != container.end();) {
+ if (predicate(*it)) {
+ it = container.erase(it);
+ } else {
+ ++it;
+ }
+ }
+}
+
+/*!
+ * Moves all elements matching the predicate to the end of the vector then erases them.
+ *
+ * Combines the two parts of the erase-remove idiom to simplify things and avoid accidentally using the wrong erase overload.
+ */
+template <typename T, typename Alloc, typename Pred>
+static inline void vector_remove_if_and_erase(std::vector<T, Alloc> &vec, Pred &&predicate) {
+ auto b = vec.begin();
+ auto e = vec.end();
+ vec.erase(std::remove_if(b, e, std::forward<Pred>(predicate)), e);
+}
diff --git a/thirdparty/openxr/src/common/filesystem_utils.cpp b/thirdparty/openxr/src/common/filesystem_utils.cpp
new file mode 100644
index 0000000000..d3d4182fb9
--- /dev/null
+++ b/thirdparty/openxr/src/common/filesystem_utils.cpp
@@ -0,0 +1,322 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>
+// Nat Brown <natb@valvesoftware.com>
+//
+
+#include "filesystem_utils.hpp"
+
+#include "platform_utils.hpp"
+
+#include <cstring>
+#include <string>
+
+#if defined DISABLE_STD_FILESYSTEM
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 0
+
+#else
+#include "stdfs_conditions.h"
+#endif
+
+#if USE_FINAL_FS == 1
+#include <filesystem>
+#define FS_PREFIX std::filesystem
+#elif USE_EXPERIMENTAL_FS == 1
+#include <experimental/filesystem>
+#define FS_PREFIX std::experimental::filesystem
+#elif defined(XR_USE_PLATFORM_WIN32)
+// Windows fallback includes
+#include <stdint.h>
+#include <direct.h>
+#else
+// Linux/Apple fallback includes
+#include <sys/stat.h>
+#include <unistd.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <dirent.h>
+#endif
+
+#if defined(XR_USE_PLATFORM_WIN32)
+#define PATH_SEPARATOR ';'
+#define DIRECTORY_SYMBOL '\\'
+#define ALTERNATE_DIRECTORY_SYMBOL '/'
+#else
+#define PATH_SEPARATOR ':'
+#define DIRECTORY_SYMBOL '/'
+#endif
+
+#if (USE_FINAL_FS == 1) || (USE_EXPERIMENTAL_FS == 1)
+// We can use one of the C++ filesystem packages
+
+bool FileSysUtilsIsRegularFile(const std::string& path) { return FS_PREFIX::is_regular_file(path); }
+
+bool FileSysUtilsIsDirectory(const std::string& path) { return FS_PREFIX::is_directory(path); }
+
+bool FileSysUtilsPathExists(const std::string& path) { return FS_PREFIX::exists(path); }
+
+bool FileSysUtilsIsAbsolutePath(const std::string& path) {
+ FS_PREFIX::path file_path(path);
+ return file_path.is_absolute();
+}
+
+bool FileSysUtilsGetCurrentPath(std::string& path) {
+ FS_PREFIX::path cur_path = FS_PREFIX::current_path();
+ path = cur_path.string();
+ return true;
+}
+
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) {
+ FS_PREFIX::path path_var(file_path);
+ parent_path = path_var.parent_path().string();
+ return true;
+}
+
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) {
+ absolute = FS_PREFIX::absolute(path).string();
+ return true;
+}
+
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical) {
+#if defined(XR_USE_PLATFORM_WIN32)
+ // std::filesystem::canonical fails on UWP and must be avoided. Further, PathCchCanonicalize is not available on Windows 7 and
+ // PathCanonicalizeW is not available on UWP. However, symbolic links are not important on Windows since the loader uses the
+ // registry for indirection instead, and so this function can be a no-op on Windows.
+ canonical = path;
+#else
+ canonical = FS_PREFIX::canonical(path).string();
+#endif
+ return true;
+}
+
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) {
+ FS_PREFIX::path parent_path(parent);
+ FS_PREFIX::path child_path(child);
+ FS_PREFIX::path full_path = parent_path / child_path;
+ combined = full_path.string();
+ return true;
+}
+
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths) {
+ std::string::size_type start = 0;
+ std::string::size_type location = path_list.find(PATH_SEPARATOR);
+ while (location != std::string::npos) {
+ paths.push_back(path_list.substr(start, location));
+ start = location + 1;
+ location = path_list.find(PATH_SEPARATOR, start);
+ }
+ paths.push_back(path_list.substr(start, location));
+ return true;
+}
+
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files) {
+ for (auto& dir_iter : FS_PREFIX::directory_iterator(path)) {
+ files.push_back(dir_iter.path().filename().string());
+ }
+ return true;
+}
+
+#elif defined(XR_OS_WINDOWS)
+
+// For pre C++17 compiler that doesn't support experimental filesystem
+
+bool FileSysUtilsIsRegularFile(const std::string& path) {
+ const DWORD attr = GetFileAttributesW(utf8_to_wide(path).c_str());
+ return attr != INVALID_FILE_ATTRIBUTES && !(attr & FILE_ATTRIBUTE_DIRECTORY);
+}
+
+bool FileSysUtilsIsDirectory(const std::string& path) {
+ const DWORD attr = GetFileAttributesW(utf8_to_wide(path).c_str());
+ return attr != INVALID_FILE_ATTRIBUTES && (attr & FILE_ATTRIBUTE_DIRECTORY);
+}
+
+bool FileSysUtilsPathExists(const std::string& path) {
+ return (GetFileAttributesW(utf8_to_wide(path).c_str()) != INVALID_FILE_ATTRIBUTES);
+}
+
+bool FileSysUtilsIsAbsolutePath(const std::string& path) {
+ bool pathStartsWithDir = (path.size() >= 1) && ((path[0] == DIRECTORY_SYMBOL) || (path[0] == ALTERNATE_DIRECTORY_SYMBOL));
+
+ bool pathStartsWithDrive =
+ (path.size() >= 3) && (path[1] == ':' && (path[2] == DIRECTORY_SYMBOL || path[2] == ALTERNATE_DIRECTORY_SYMBOL));
+
+ return pathStartsWithDir || pathStartsWithDrive;
+}
+
+bool FileSysUtilsGetCurrentPath(std::string& path) {
+ wchar_t tmp_path[MAX_PATH];
+ if (nullptr != _wgetcwd(tmp_path, MAX_PATH - 1)) {
+ path = wide_to_utf8(tmp_path);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) {
+ std::string full_path;
+ if (FileSysUtilsGetAbsolutePath(file_path, full_path)) {
+ std::string::size_type lastSeparator = full_path.find_last_of(DIRECTORY_SYMBOL);
+ parent_path = (lastSeparator == 0) ? full_path : full_path.substr(0, lastSeparator);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) {
+ wchar_t tmp_path[MAX_PATH];
+ if (0 != GetFullPathNameW(utf8_to_wide(path).c_str(), MAX_PATH, tmp_path, NULL)) {
+ absolute = wide_to_utf8(tmp_path);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& absolute) {
+ // PathCchCanonicalize is not available on Windows 7 and PathCanonicalizeW is not available on UWP. However, symbolic links are
+ // not important on Windows since the loader uses the registry for indirection instead, and so this function can be a no-op on
+ // Windows.
+ absolute = path;
+ return true;
+}
+
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) {
+ std::string::size_type parent_len = parent.length();
+ if (0 == parent_len || "." == parent || ".\\" == parent || "./" == parent) {
+ combined = child;
+ return true;
+ }
+ char last_char = parent[parent_len - 1];
+ if ((last_char == DIRECTORY_SYMBOL) || (last_char == ALTERNATE_DIRECTORY_SYMBOL)) {
+ parent_len--;
+ }
+ combined = parent.substr(0, parent_len) + DIRECTORY_SYMBOL + child;
+ return true;
+}
+
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths) {
+ std::string::size_type start = 0;
+ std::string::size_type location = path_list.find(PATH_SEPARATOR);
+ while (location != std::string::npos) {
+ paths.push_back(path_list.substr(start, location));
+ start = location + 1;
+ location = path_list.find(PATH_SEPARATOR, start);
+ }
+ paths.push_back(path_list.substr(start, location));
+ return true;
+}
+
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files) {
+ std::string searchPath;
+ FileSysUtilsCombinePaths(path, "*", searchPath);
+
+ WIN32_FIND_DATAW file_data;
+ HANDLE file_handle = FindFirstFileW(utf8_to_wide(searchPath).c_str(), &file_data);
+ if (file_handle != INVALID_HANDLE_VALUE) {
+ do {
+ if (!(file_data.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) {
+ files.push_back(wide_to_utf8(file_data.cFileName));
+ }
+ } while (FindNextFileW(file_handle, &file_data));
+ return true;
+ }
+ return false;
+}
+
+#else // XR_OS_LINUX/XR_OS_APPLE fallback
+
+// simple POSIX-compatible implementation of the <filesystem> pieces used by OpenXR
+
+bool FileSysUtilsIsRegularFile(const std::string& path) {
+ struct stat path_stat;
+ stat(path.c_str(), &path_stat);
+ return S_ISREG(path_stat.st_mode);
+}
+
+bool FileSysUtilsIsDirectory(const std::string& path) {
+ struct stat path_stat;
+ stat(path.c_str(), &path_stat);
+ return S_ISDIR(path_stat.st_mode);
+}
+
+bool FileSysUtilsPathExists(const std::string& path) { return (access(path.c_str(), F_OK) != -1); }
+
+bool FileSysUtilsIsAbsolutePath(const std::string& path) { return (path[0] == DIRECTORY_SYMBOL); }
+
+bool FileSysUtilsGetCurrentPath(std::string& path) {
+ char tmp_path[PATH_MAX];
+ if (nullptr != getcwd(tmp_path, PATH_MAX - 1)) {
+ path = tmp_path;
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path) {
+ std::string full_path;
+ if (FileSysUtilsGetAbsolutePath(file_path, full_path)) {
+ std::string::size_type lastSeparator = full_path.find_last_of(DIRECTORY_SYMBOL);
+ parent_path = (lastSeparator == 0) ? full_path : full_path.substr(0, lastSeparator);
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute) {
+ // canonical path is absolute
+ return FileSysUtilsGetCanonicalPath(path, absolute);
+}
+
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical) {
+ char buf[PATH_MAX];
+ if (nullptr != realpath(path.c_str(), buf)) {
+ canonical = buf;
+ return true;
+ }
+ return false;
+}
+
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined) {
+ std::string::size_type parent_len = parent.length();
+ if (0 == parent_len || "." == parent || "./" == parent) {
+ combined = child;
+ return true;
+ }
+ char last_char = parent[parent_len - 1];
+ if (last_char == DIRECTORY_SYMBOL) {
+ parent_len--;
+ }
+ combined = parent.substr(0, parent_len) + DIRECTORY_SYMBOL + child;
+ return true;
+}
+
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths) {
+ std::string::size_type start = 0;
+ std::string::size_type location = path_list.find(PATH_SEPARATOR);
+ while (location != std::string::npos) {
+ paths.push_back(path_list.substr(start, location));
+ start = location + 1;
+ location = path_list.find(PATH_SEPARATOR, start);
+ }
+ paths.push_back(path_list.substr(start, location));
+ return true;
+}
+
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files) {
+ DIR* dir = opendir(path.c_str());
+ if (dir == nullptr) {
+ return false;
+ }
+ struct dirent* entry;
+ while ((entry = readdir(dir)) != nullptr) {
+ files.emplace_back(entry->d_name);
+ }
+ closedir(dir);
+ return true;
+}
+
+#endif
diff --git a/thirdparty/openxr/src/common/filesystem_utils.hpp b/thirdparty/openxr/src/common/filesystem_utils.hpp
new file mode 100644
index 0000000000..4a5c987e7b
--- /dev/null
+++ b/thirdparty/openxr/src/common/filesystem_utils.hpp
@@ -0,0 +1,46 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <string>
+#include <vector>
+
+// Determine if the path indicates a regular file (not a directory or symbolic link)
+bool FileSysUtilsIsRegularFile(const std::string& path);
+
+// Determine if the path indicates a directory
+bool FileSysUtilsIsDirectory(const std::string& path);
+
+// Determine if the provided path exists on the filesystem
+bool FileSysUtilsPathExists(const std::string& path);
+
+// Get the current directory
+bool FileSysUtilsGetCurrentPath(std::string& path);
+
+// Get the parent path of a file
+bool FileSysUtilsGetParentPath(const std::string& file_path, std::string& parent_path);
+
+// Determine if the provided path is an absolute path
+bool FileSysUtilsIsAbsolutePath(const std::string& path);
+
+// Get the absolute path for a provided file
+bool FileSysUtilsGetAbsolutePath(const std::string& path, std::string& absolute);
+
+// Get the absolute path for a provided file
+bool FileSysUtilsGetCanonicalPath(const std::string& path, std::string& canonical);
+
+// Combine a parent and child directory
+bool FileSysUtilsCombinePaths(const std::string& parent, const std::string& child, std::string& combined);
+
+// Parse out individual paths in a path list
+bool FileSysUtilsParsePathList(std::string& path_list, std::vector<std::string>& paths);
+
+// Record all the filenames for files found in the provided path.
+bool FileSysUtilsFindFilesInPath(const std::string& path, std::vector<std::string>& files);
diff --git a/thirdparty/openxr/src/common/hex_and_handles.h b/thirdparty/openxr/src/common/hex_and_handles.h
new file mode 100644
index 0000000000..341013d32b
--- /dev/null
+++ b/thirdparty/openxr/src/common/hex_and_handles.h
@@ -0,0 +1,108 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+
+/*!
+ * @file
+ *
+ * Some utilities, primarily for working with OpenXR handles in a generic way.
+ */
+
+#pragma once
+
+#include <openxr/openxr.h>
+
+#include <string>
+#include <stdint.h>
+
+inline std::string to_hex(const uint8_t* const data, size_t bytes) {
+ std::string out(2 + bytes * 2, '?');
+ out[0] = '0';
+ out[1] = 'x';
+ static const char* hex = "0123456789abcdef";
+ auto ch = out.end();
+ for (size_t i = 0; i < bytes; ++i) {
+ auto b = data[i];
+ *--ch = hex[(b >> 0) & 0xf];
+ *--ch = hex[(b >> 4) & 0xf];
+ }
+ return out;
+}
+
+template <typename T>
+inline std::string to_hex(const T& data) {
+ return to_hex(reinterpret_cast<const uint8_t* const>(&data), sizeof(data));
+}
+
+#if XR_PTR_SIZE == 8
+/// Convert a handle into a same-sized integer.
+template <typename T>
+static inline uint64_t MakeHandleGeneric(T handle) {
+ return reinterpret_cast<uint64_t>(handle);
+}
+
+/// Treat an integer as a handle
+template <typename T>
+static inline T& TreatIntegerAsHandle(uint64_t& handle) {
+ return reinterpret_cast<T&>(handle);
+}
+
+/// @overload
+template <typename T>
+static inline T const& TreatIntegerAsHandle(uint64_t const& handle) {
+ return reinterpret_cast<T const&>(handle);
+}
+
+/// Does a correctly-sized integer represent a null handle?
+static inline bool IsIntegerNullHandle(uint64_t handle) { return XR_NULL_HANDLE == reinterpret_cast<void*>(handle); }
+
+#else
+
+/// Convert a handle into a same-sized integer: no-op on 32-bit systems
+static inline uint64_t MakeHandleGeneric(uint64_t handle) { return handle; }
+
+/// Treat an integer as a handle: no-op on 32-bit systems
+template <typename T>
+static inline T& TreatIntegerAsHandle(uint64_t& handle) {
+ return handle;
+}
+
+/// @overload
+template <typename T>
+static inline T const& TreatIntegerAsHandle(uint64_t const& handle) {
+ return handle;
+}
+
+/// Does a correctly-sized integer represent a null handle?
+static inline bool IsIntegerNullHandle(uint64_t handle) { return XR_NULL_HANDLE == handle; }
+
+#endif
+
+/// Turns a uint64_t into a string formatted as hex.
+///
+/// The core of the HandleToHexString implementation is in here.
+inline std::string Uint64ToHexString(uint64_t val) { return to_hex(val); }
+
+/// Turns a uint32_t into a string formatted as hex.
+inline std::string Uint32ToHexString(uint32_t val) { return to_hex(val); }
+
+/// Turns an OpenXR handle into a string formatted as hex.
+template <typename T>
+inline std::string HandleToHexString(T handle) {
+ return to_hex(handle);
+}
+
+/// Turns a pointer-sized integer into a string formatted as hex.
+inline std::string UintptrToHexString(uintptr_t val) { return to_hex(val); }
+
+/// Convert a pointer to a string formatted as hex.
+template <typename T>
+inline std::string PointerToHexString(T const* ptr) {
+ return to_hex(ptr);
+}
diff --git a/thirdparty/openxr/src/common/loader_interfaces.h b/thirdparty/openxr/src/common/loader_interfaces.h
new file mode 100644
index 0000000000..9c74ed16f3
--- /dev/null
+++ b/thirdparty/openxr/src/common/loader_interfaces.h
@@ -0,0 +1,114 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <openxr/openxr.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Forward declare.
+typedef struct XrApiLayerCreateInfo XrApiLayerCreateInfo;
+
+// Function pointer prototype for the xrCreateApiLayerInstance function used in place of xrCreateInstance.
+// This function allows us to pass special API layer information to each layer during the process of creating an Instance.
+typedef XrResult(XRAPI_PTR *PFN_xrCreateApiLayerInstance)(const XrInstanceCreateInfo *info,
+ const XrApiLayerCreateInfo *apiLayerInfo, XrInstance *instance);
+
+// Loader/API Layer Interface versions
+// 1 - First version, introduces negotiation structure and functions
+#define XR_CURRENT_LOADER_API_LAYER_VERSION 1
+
+// Loader/Runtime Interface versions
+// 1 - First version, introduces negotiation structure and functions
+#define XR_CURRENT_LOADER_RUNTIME_VERSION 1
+
+// Version negotiation values
+typedef enum XrLoaderInterfaceStructs {
+ XR_LOADER_INTERFACE_STRUCT_UNINTIALIZED = 0,
+ XR_LOADER_INTERFACE_STRUCT_LOADER_INFO,
+ XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST,
+ XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST,
+ XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO,
+ XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO,
+} XrLoaderInterfaceStructs;
+
+#define XR_LOADER_INFO_STRUCT_VERSION 1
+typedef struct XrNegotiateLoaderInfo {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_LOADER_INFO
+ uint32_t structVersion; // XR_LOADER_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrNegotiateLoaderInfo)
+ uint32_t minInterfaceVersion;
+ uint32_t maxInterfaceVersion;
+ XrVersion minApiVersion;
+ XrVersion maxApiVersion;
+} XrNegotiateLoaderInfo;
+
+#define XR_API_LAYER_INFO_STRUCT_VERSION 1
+typedef struct XrNegotiateApiLayerRequest {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST
+ uint32_t structVersion; // XR_API_LAYER_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrNegotiateApiLayerRequest)
+ uint32_t layerInterfaceVersion; // CURRENT_LOADER_API_LAYER_VERSION
+ XrVersion layerApiVersion;
+ PFN_xrGetInstanceProcAddr getInstanceProcAddr;
+ PFN_xrCreateApiLayerInstance createApiLayerInstance;
+} XrNegotiateApiLayerRequest;
+
+#define XR_RUNTIME_INFO_STRUCT_VERSION 1
+typedef struct XrNegotiateRuntimeRequest {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST
+ uint32_t structVersion; // XR_RUNTIME_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrNegotiateRuntimeRequest)
+ uint32_t runtimeInterfaceVersion; // CURRENT_LOADER_RUNTIME_VERSION
+ XrVersion runtimeApiVersion;
+ PFN_xrGetInstanceProcAddr getInstanceProcAddr;
+} XrNegotiateRuntimeRequest;
+
+// Function used to negotiate an interface betewen the loader and an API layer. Each library exposing one or
+// more API layers needs to expose at least this function.
+typedef XrResult(XRAPI_PTR *PFN_xrNegotiateLoaderApiLayerInterface)(const XrNegotiateLoaderInfo *loaderInfo,
+ const char *apiLayerName,
+ XrNegotiateApiLayerRequest *apiLayerRequest);
+
+// Function used to negotiate an interface betewen the loader and a runtime. Each runtime should expose
+// at least this function.
+typedef XrResult(XRAPI_PTR *PFN_xrNegotiateLoaderRuntimeInterface)(const XrNegotiateLoaderInfo *loaderInfo,
+ XrNegotiateRuntimeRequest *runtimeRequest);
+
+// Forward declare.
+typedef struct XrApiLayerNextInfo XrApiLayerNextInfo;
+
+#define XR_API_LAYER_NEXT_INFO_STRUCT_VERSION 1
+struct XrApiLayerNextInfo {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO
+ uint32_t structVersion; // XR_API_LAYER_NEXT_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrApiLayerNextInfo)
+ char layerName[XR_MAX_API_LAYER_NAME_SIZE]; // Name of API layer which should receive this info
+ PFN_xrGetInstanceProcAddr nextGetInstanceProcAddr; // Pointer to next API layer's xrGetInstanceProcAddr
+ PFN_xrCreateApiLayerInstance nextCreateApiLayerInstance; // Pointer to next API layer's xrCreateApiLayerInstance
+ XrApiLayerNextInfo *next; // Pointer to the next API layer info in the sequence
+};
+
+#define XR_API_LAYER_MAX_SETTINGS_PATH_SIZE 512
+#define XR_API_LAYER_CREATE_INFO_STRUCT_VERSION 1
+typedef struct XrApiLayerCreateInfo {
+ XrLoaderInterfaceStructs structType; // XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO
+ uint32_t structVersion; // XR_API_LAYER_CREATE_INFO_STRUCT_VERSION
+ size_t structSize; // sizeof(XrApiLayerCreateInfo)
+ void *loaderInstance; // Pointer to the LoaderInstance class
+ char settings_file_location[XR_API_LAYER_MAX_SETTINGS_PATH_SIZE]; // Location to the found settings file (or empty '\0')
+ XrApiLayerNextInfo *nextInfo; // Pointer to the next API layer's Info
+} XrApiLayerCreateInfo;
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/thirdparty/openxr/src/common/object_info.cpp b/thirdparty/openxr/src/common/object_info.cpp
new file mode 100644
index 0000000000..95b5aaf404
--- /dev/null
+++ b/thirdparty/openxr/src/common/object_info.cpp
@@ -0,0 +1,276 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>
+// Ryan Pavlik <ryan.pavlik@collabora.com>
+// Dave Houlton <daveh@lunarg.com>
+//
+
+#include "object_info.h"
+
+#include "extra_algorithms.h"
+#include "hex_and_handles.h"
+
+#include <openxr/openxr.h>
+
+#include <algorithm>
+#include <iterator>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <vector>
+
+#include "memory.h"
+
+std::string XrSdkLogObjectInfo::ToString() const {
+ std::ostringstream oss;
+ oss << Uint64ToHexString(handle);
+ if (!name.empty()) {
+ oss << " (" << name << ")";
+ }
+ return oss.str();
+}
+
+void ObjectInfoCollection::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) {
+ // If name is empty, we should erase it
+ if (object_name.empty()) {
+ RemoveObject(object_handle, object_type);
+ return;
+ }
+
+ // Otherwise, add it or update the name
+ XrSdkLogObjectInfo new_obj = {object_handle, object_type};
+
+ // If it already exists, update the name
+ auto lookup_info = LookUpStoredObjectInfo(new_obj);
+ if (lookup_info != nullptr) {
+ lookup_info->name = object_name;
+ return;
+ }
+
+ // It doesn't exist, so add a new info block
+ new_obj.name = object_name;
+ object_info_.push_back(new_obj);
+}
+
+void ObjectInfoCollection::RemoveObject(uint64_t object_handle, XrObjectType object_type) {
+ vector_remove_if_and_erase(
+ object_info_, [=](XrSdkLogObjectInfo const& info) { return info.handle == object_handle && info.type == object_type; });
+}
+
+XrSdkLogObjectInfo const* ObjectInfoCollection::LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) const {
+ auto e = object_info_.end();
+ auto it = std::find_if(object_info_.begin(), e, [&](XrSdkLogObjectInfo const& stored) { return Equivalent(stored, info); });
+ if (it != e) {
+ return &(*it);
+ }
+ return nullptr;
+}
+
+XrSdkLogObjectInfo* ObjectInfoCollection::LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) {
+ auto e = object_info_.end();
+ auto it = std::find_if(object_info_.begin(), e, [&](XrSdkLogObjectInfo const& stored) { return Equivalent(stored, info); });
+ if (it != e) {
+ return &(*it);
+ }
+ return nullptr;
+}
+
+bool ObjectInfoCollection::LookUpObjectName(XrDebugUtilsObjectNameInfoEXT& info) const {
+ auto info_lookup = LookUpStoredObjectInfo(info.objectHandle, info.objectType);
+ if (info_lookup != nullptr) {
+ info.objectName = info_lookup->name.c_str();
+ return true;
+ }
+ return false;
+}
+
+bool ObjectInfoCollection::LookUpObjectName(XrSdkLogObjectInfo& info) const {
+ auto info_lookup = LookUpStoredObjectInfo(info);
+ if (info_lookup != nullptr) {
+ info.name = info_lookup->name;
+ return true;
+ }
+ return false;
+}
+
+static std::vector<XrDebugUtilsObjectNameInfoEXT> PopulateObjectNameInfo(std::vector<XrSdkLogObjectInfo> const& obj) {
+ std::vector<XrDebugUtilsObjectNameInfoEXT> ret;
+ ret.reserve(obj.size());
+ std::transform(obj.begin(), obj.end(), std::back_inserter(ret), [](XrSdkLogObjectInfo const& info) {
+ return XrDebugUtilsObjectNameInfoEXT{XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT, nullptr, info.type, info.handle,
+ info.name.c_str()};
+ });
+ return ret;
+}
+
+NamesAndLabels::NamesAndLabels(std::vector<XrSdkLogObjectInfo> obj, std::vector<XrDebugUtilsLabelEXT> lab)
+ : sdk_objects(std::move(obj)), objects(PopulateObjectNameInfo(sdk_objects)), labels(std::move(lab)) {}
+
+void NamesAndLabels::PopulateCallbackData(XrDebugUtilsMessengerCallbackDataEXT& callback_data) const {
+ callback_data.objects = objects.empty() ? nullptr : const_cast<XrDebugUtilsObjectNameInfoEXT*>(objects.data());
+ callback_data.objectCount = static_cast<uint32_t>(objects.size());
+ callback_data.sessionLabels = labels.empty() ? nullptr : const_cast<XrDebugUtilsLabelEXT*>(labels.data());
+ callback_data.sessionLabelCount = static_cast<uint32_t>(labels.size());
+}
+
+void DebugUtilsData::LookUpSessionLabels(XrSession session, std::vector<XrDebugUtilsLabelEXT>& labels) const {
+ auto session_label_iterator = session_labels_.find(session);
+ if (session_label_iterator != session_labels_.end()) {
+ auto& XrSdkSessionLabels = *session_label_iterator->second;
+ // Copy the debug utils labels in reverse order in the the labels vector.
+ std::transform(XrSdkSessionLabels.rbegin(), XrSdkSessionLabels.rend(), std::back_inserter(labels),
+ [](XrSdkSessionLabelPtr const& label) { return label->debug_utils_label; });
+ }
+}
+
+XrSdkSessionLabel::XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, bool individual)
+ : label_name(label_info.labelName), debug_utils_label(label_info), is_individual_label(individual) {
+ // Update the c string pointer to the one we hold.
+ debug_utils_label.labelName = label_name.c_str();
+}
+
+XrSdkSessionLabelPtr XrSdkSessionLabel::make(const XrDebugUtilsLabelEXT& label_info, bool individual) {
+ XrSdkSessionLabelPtr ret(new XrSdkSessionLabel(label_info, individual));
+ return ret;
+}
+void DebugUtilsData::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) {
+ object_info_.AddObjectName(object_handle, object_type, object_name);
+}
+
+// We always want to remove the old individual label before we do anything else.
+// So, do that in it's own method
+void DebugUtilsData::RemoveIndividualLabel(XrSdkSessionLabelList& label_vec) {
+ if (!label_vec.empty() && label_vec.back()->is_individual_label) {
+ label_vec.pop_back();
+ }
+}
+
+XrSdkSessionLabelList* DebugUtilsData::GetSessionLabelList(XrSession session) {
+ auto session_label_iterator = session_labels_.find(session);
+ if (session_label_iterator == session_labels_.end()) {
+ return nullptr;
+ }
+ return session_label_iterator->second.get();
+}
+
+XrSdkSessionLabelList& DebugUtilsData::GetOrCreateSessionLabelList(XrSession session) {
+ XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session);
+ if (vec_ptr == nullptr) {
+ std::unique_ptr<XrSdkSessionLabelList> vec(new XrSdkSessionLabelList);
+ vec_ptr = vec.get();
+ session_labels_[session] = std::move(vec);
+ }
+ return *vec_ptr;
+}
+
+void DebugUtilsData::BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT& label_info) {
+ auto& vec = GetOrCreateSessionLabelList(session);
+
+ // Individual labels do not stay around in the transition into a new label region
+ RemoveIndividualLabel(vec);
+
+ // Start the new label region
+ vec.emplace_back(XrSdkSessionLabel::make(label_info, false));
+}
+
+void DebugUtilsData::EndLabelRegion(XrSession session) {
+ XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session);
+ if (vec_ptr == nullptr) {
+ return;
+ }
+
+ // Individual labels do not stay around in the transition out of label region
+ RemoveIndividualLabel(*vec_ptr);
+
+ // Remove the last label region
+ if (!vec_ptr->empty()) {
+ vec_ptr->pop_back();
+ }
+}
+
+void DebugUtilsData::InsertLabel(XrSession session, const XrDebugUtilsLabelEXT& label_info) {
+ auto& vec = GetOrCreateSessionLabelList(session);
+
+ // Remove any individual layer that might already be there
+ RemoveIndividualLabel(vec);
+
+ // Insert a new individual label
+ vec.emplace_back(XrSdkSessionLabel::make(label_info, true));
+}
+
+void DebugUtilsData::DeleteObject(uint64_t object_handle, XrObjectType object_type) {
+ object_info_.RemoveObject(object_handle, object_type);
+
+ if (object_type == XR_OBJECT_TYPE_SESSION) {
+ auto session = TreatIntegerAsHandle<XrSession>(object_handle);
+ XrSdkSessionLabelList* vec_ptr = GetSessionLabelList(session);
+ if (vec_ptr != nullptr) {
+ session_labels_.erase(session);
+ }
+ }
+}
+
+void DebugUtilsData::DeleteSessionLabels(XrSession session) { session_labels_.erase(session); }
+
+NamesAndLabels DebugUtilsData::PopulateNamesAndLabels(std::vector<XrSdkLogObjectInfo> objects) const {
+ std::vector<XrDebugUtilsLabelEXT> labels;
+ for (auto& obj : objects) {
+ // Check for any names that have been associated with the objects and set them up here
+ object_info_.LookUpObjectName(obj);
+ // If this is a session, see if there are any labels associated with it for us to add
+ // to the callback content.
+ if (XR_OBJECT_TYPE_SESSION == obj.type) {
+ LookUpSessionLabels(obj.GetTypedHandle<XrSession>(), labels);
+ }
+ }
+
+ return {objects, labels};
+}
+
+void DebugUtilsData::WrapCallbackData(AugmentedCallbackData* aug_data,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) const {
+ // If there's nothing to add, just return the original data as the augmented copy
+ aug_data->exported_data = callback_data;
+ if (object_info_.Empty() || callback_data->objectCount == 0) {
+ return;
+ }
+
+ // Inspect each of the callback objects
+ bool name_found = false;
+ for (uint32_t obj = 0; obj < callback_data->objectCount; ++obj) {
+ auto& current_obj = callback_data->objects[obj];
+ name_found |= (nullptr != object_info_.LookUpStoredObjectInfo(current_obj.objectHandle, current_obj.objectType));
+
+ // If this is a session, record any labels associated with it
+ if (XR_OBJECT_TYPE_SESSION == current_obj.objectType) {
+ XrSession session = TreatIntegerAsHandle<XrSession>(current_obj.objectHandle);
+ LookUpSessionLabels(session, aug_data->labels);
+ }
+ }
+
+ // If we found nothing to add, return the original data
+ if (!name_found && aug_data->labels.empty()) {
+ return;
+ }
+
+ // Found additional data - modify an internal copy and return that as the exported data
+ memcpy(&aug_data->modified_data, callback_data, sizeof(XrDebugUtilsMessengerCallbackDataEXT));
+ aug_data->new_objects.assign(callback_data->objects, callback_data->objects + callback_data->objectCount);
+
+ // Record (overwrite) the names of all incoming objects provided in our internal list
+ for (auto& obj : aug_data->new_objects) {
+ object_info_.LookUpObjectName(obj);
+ }
+
+ // Update local copy & point export to it
+ aug_data->modified_data.objects = aug_data->new_objects.data();
+ aug_data->modified_data.sessionLabelCount = static_cast<uint32_t>(aug_data->labels.size());
+ aug_data->modified_data.sessionLabels = aug_data->labels.empty() ? nullptr : aug_data->labels.data();
+ aug_data->exported_data = &aug_data->modified_data;
+ return;
+}
diff --git a/thirdparty/openxr/src/common/object_info.h b/thirdparty/openxr/src/common/object_info.h
new file mode 100644
index 0000000000..8e9742b605
--- /dev/null
+++ b/thirdparty/openxr/src/common/object_info.h
@@ -0,0 +1,229 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// Copyright (c) 2019 Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Ryan Pavlik <ryan.pavlik@collabora.com
+//
+/*!
+ * @file
+ *
+ * The core of an XR_EXT_debug_utils implementation, used/shared by the loader and several SDK layers.
+ */
+
+#pragma once
+
+#include "hex_and_handles.h"
+
+#include <openxr/openxr.h>
+
+#include <memory>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+struct XrSdkGenericObject {
+ //! Type-erased handle value
+ uint64_t handle;
+
+ //! Kind of object this handle refers to
+ XrObjectType type;
+ /// Un-erase the type of the handle and get it properly typed again.
+ ///
+ /// Note: Does not check the type before doing it!
+ template <typename HandleType>
+ HandleType& GetTypedHandle() {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ //! @overload
+ template <typename HandleType>
+ HandleType const& GetTypedHandle() const {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ //! Create from a typed handle and object type
+ template <typename T>
+ XrSdkGenericObject(T h, XrObjectType t) : handle(MakeHandleGeneric(h)), type(t) {}
+
+ //! Create from an untyped handle value (integer) and object type
+ XrSdkGenericObject(uint64_t h, XrObjectType t) : handle(h), type(t) {}
+};
+
+struct XrSdkLogObjectInfo {
+ //! Type-erased handle value
+ uint64_t handle;
+
+ //! Kind of object this handle refers to
+ XrObjectType type;
+
+ //! To be assigned by the application - not part of this object's identity
+ std::string name;
+
+ /// Un-erase the type of the handle and get it properly typed again.
+ ///
+ /// Note: Does not check the type before doing it!
+ template <typename HandleType>
+ HandleType& GetTypedHandle() {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ //! @overload
+ template <typename HandleType>
+ HandleType const& GetTypedHandle() const {
+ return TreatIntegerAsHandle<HandleType&>(handle);
+ }
+
+ XrSdkLogObjectInfo() = default;
+
+ //! Create from a typed handle and object type
+ template <typename T>
+ XrSdkLogObjectInfo(T h, XrObjectType t) : handle(MakeHandleGeneric(h)), type(t) {}
+
+ //! Create from an untyped handle value (integer) and object type
+ XrSdkLogObjectInfo(uint64_t h, XrObjectType t) : handle(h), type(t) {}
+ //! Create from an untyped handle value (integer), object type, and name
+ XrSdkLogObjectInfo(uint64_t h, XrObjectType t, const char* n) : handle(h), type(t), name(n == nullptr ? "" : n) {}
+
+ std::string ToString() const;
+};
+
+//! True if the two object infos have the same handle value and handle type
+static inline bool Equivalent(XrSdkLogObjectInfo const& a, XrSdkLogObjectInfo const& b) {
+ return a.handle == b.handle && a.type == b.type;
+}
+
+//! @overload
+static inline bool Equivalent(XrDebugUtilsObjectNameInfoEXT const& a, XrSdkLogObjectInfo const& b) {
+ return a.objectHandle == b.handle && a.objectType == b.type;
+}
+
+//! @overload
+static inline bool Equivalent(XrSdkLogObjectInfo const& a, XrDebugUtilsObjectNameInfoEXT const& b) { return Equivalent(b, a); }
+
+/// Object info registered with calls to xrSetDebugUtilsObjectNameEXT
+class ObjectInfoCollection {
+ public:
+ void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name);
+
+ void RemoveObject(uint64_t object_handle, XrObjectType object_type);
+
+ //! Find the stored object info, if any, matching handle and type.
+ //! Return nullptr if not found.
+ XrSdkLogObjectInfo const* LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info) const;
+
+ //! Find the stored object info, if any, matching handle and type.
+ //! Return nullptr if not found.
+ XrSdkLogObjectInfo* LookUpStoredObjectInfo(XrSdkLogObjectInfo const& info);
+
+ //! Find the stored object info, if any.
+ //! Return nullptr if not found.
+ XrSdkLogObjectInfo const* LookUpStoredObjectInfo(uint64_t handle, XrObjectType type) const {
+ return LookUpStoredObjectInfo({handle, type});
+ }
+
+ //! Find the object name, if any, and update debug utils info accordingly.
+ //! Return true if found and updated.
+ bool LookUpObjectName(XrDebugUtilsObjectNameInfoEXT& info) const;
+
+ //! Find the object name, if any, and update logging info accordingly.
+ //! Return true if found and updated.
+ bool LookUpObjectName(XrSdkLogObjectInfo& info) const;
+
+ //! Is the collection empty?
+ bool Empty() const { return object_info_.empty(); }
+
+ private:
+ // Object names that have been set for given objects
+ std::vector<XrSdkLogObjectInfo> object_info_;
+};
+
+struct XrSdkSessionLabel;
+using XrSdkSessionLabelPtr = std::unique_ptr<XrSdkSessionLabel>;
+using XrSdkSessionLabelList = std::vector<XrSdkSessionLabelPtr>;
+
+struct XrSdkSessionLabel {
+ static XrSdkSessionLabelPtr make(const XrDebugUtilsLabelEXT& label_info, bool individual);
+
+ std::string label_name;
+ XrDebugUtilsLabelEXT debug_utils_label;
+ bool is_individual_label;
+
+ private:
+ XrSdkSessionLabel(const XrDebugUtilsLabelEXT& label_info, bool individual);
+};
+
+/// The metadata for a collection of objects. Must persist unmodified during the entire debug messenger call!
+struct NamesAndLabels {
+ NamesAndLabels() = default;
+ NamesAndLabels(std::vector<XrSdkLogObjectInfo> obj, std::vector<XrDebugUtilsLabelEXT> lab);
+ /// C++ structure owning the data (strings) backing the objects vector.
+ std::vector<XrSdkLogObjectInfo> sdk_objects;
+
+ std::vector<XrDebugUtilsObjectNameInfoEXT> objects;
+ std::vector<XrDebugUtilsLabelEXT> labels;
+
+ /// Populate the debug utils callback data structure.
+ void PopulateCallbackData(XrDebugUtilsMessengerCallbackDataEXT& data) const;
+ // XrDebugUtilsMessengerCallbackDataEXT MakeCallbackData() const;
+};
+
+struct AugmentedCallbackData {
+ std::vector<XrDebugUtilsLabelEXT> labels;
+ std::vector<XrDebugUtilsObjectNameInfoEXT> new_objects;
+ XrDebugUtilsMessengerCallbackDataEXT modified_data;
+ const XrDebugUtilsMessengerCallbackDataEXT* exported_data;
+};
+
+/// Tracks all the data (handle names and session labels) required to fully augment XR_EXT_debug_utils-related calls.
+class DebugUtilsData {
+ public:
+ DebugUtilsData() = default;
+
+ DebugUtilsData(const DebugUtilsData&) = delete;
+ DebugUtilsData& operator=(const DebugUtilsData&) = delete;
+
+ bool Empty() const { return object_info_.Empty() && session_labels_.empty(); }
+
+ //! Core of implementation for xrSetDebugUtilsObjectNameEXT
+ void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name);
+
+ /// Core of implementation for xrSessionBeginDebugUtilsLabelRegionEXT
+ void BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT& label_info);
+
+ /// Core of implementation for xrSessionEndDebugUtilsLabelRegionEXT
+ void EndLabelRegion(XrSession session);
+
+ /// Core of implementation for xrSessionInsertDebugUtilsLabelEXT
+ void InsertLabel(XrSession session, const XrDebugUtilsLabelEXT& label_info);
+
+ /// Removes all labels associated with a session - call in xrDestroySession and xrDestroyInstance (for all child sessions)
+ void DeleteSessionLabels(XrSession session);
+
+ /// Retrieve labels for the given session, if any, and push them in reverse order on the vector.
+ void LookUpSessionLabels(XrSession session, std::vector<XrDebugUtilsLabelEXT>& labels) const;
+
+ /// Removes all data related to this object - including session labels if it's a session.
+ ///
+ /// Does not take care of handling child objects - you must do this yourself.
+ void DeleteObject(uint64_t object_handle, XrObjectType object_type);
+
+ /// Given the collection of objects, populate their names and list of labels
+ NamesAndLabels PopulateNamesAndLabels(std::vector<XrSdkLogObjectInfo> objects) const;
+
+ void WrapCallbackData(AugmentedCallbackData* aug_data,
+ const XrDebugUtilsMessengerCallbackDataEXT* provided_callback_data) const;
+
+ private:
+ void RemoveIndividualLabel(XrSdkSessionLabelList& label_vec);
+ XrSdkSessionLabelList* GetSessionLabelList(XrSession session);
+ XrSdkSessionLabelList& GetOrCreateSessionLabelList(XrSession session);
+
+ // Session labels: one vector of them per session.
+ std::unordered_map<XrSession, std::unique_ptr<XrSdkSessionLabelList>> session_labels_;
+
+ // Names for objects.
+ ObjectInfoCollection object_info_;
+};
diff --git a/thirdparty/openxr/src/common/platform_utils.hpp b/thirdparty/openxr/src/common/platform_utils.hpp
new file mode 100644
index 0000000000..85d5cdab10
--- /dev/null
+++ b/thirdparty/openxr/src/common/platform_utils.hpp
@@ -0,0 +1,345 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#pragma once
+
+#include "xr_dependencies.h"
+#include <string>
+#include <stdlib.h>
+
+// OpenXR paths and registry key locations
+#define OPENXR_RELATIVE_PATH "openxr/"
+#define OPENXR_IMPLICIT_API_LAYER_RELATIVE_PATH "/api_layers/implicit.d"
+#define OPENXR_EXPLICIT_API_LAYER_RELATIVE_PATH "/api_layers/explicit.d"
+#ifdef XR_OS_WINDOWS
+#define OPENXR_REGISTRY_LOCATION "SOFTWARE\\Khronos\\OpenXR\\"
+#define OPENXR_IMPLICIT_API_LAYER_REGISTRY_LOCATION "\\ApiLayers\\Implicit"
+#define OPENXR_EXPLICIT_API_LAYER_REGISTRY_LOCATION "\\ApiLayers\\Explicit"
+#endif
+
+// OpenXR Loader environment variables of interest
+#define OPENXR_RUNTIME_JSON_ENV_VAR "XR_RUNTIME_JSON"
+#define OPENXR_API_LAYER_PATH_ENV_VAR "XR_API_LAYER_PATH"
+
+// This is a CMake generated file with #defines for any functions/includes
+// that it found present and build-time configuration.
+// If you don't have this file, on non-Windows you'll need to define
+// one of HAVE_SECURE_GETENV or HAVE___SECURE_GETENV depending on which
+// of secure_getenv or __secure_getenv are present
+#ifdef OPENXR_HAVE_COMMON_CONFIG
+#include "common_config.h"
+#endif // OPENXR_HAVE_COMMON_CONFIG
+
+// Environment variables
+#if defined(XR_OS_LINUX) || defined(XR_OS_APPLE)
+
+#include <unistd.h>
+#include <fcntl.h>
+#include <iostream>
+
+namespace detail {
+
+static inline char* ImplGetEnv(const char* name) { return getenv(name); }
+
+static inline int ImplSetEnv(const char* name, const char* value, int overwrite) { return setenv(name, value, overwrite); }
+
+static inline char* ImplGetSecureEnv(const char* name) {
+#ifdef HAVE_SECURE_GETENV
+ return secure_getenv(name);
+#elif defined(HAVE___SECURE_GETENV)
+ return __secure_getenv(name);
+#else
+#pragma message( \
+ "Warning: Falling back to non-secure getenv for environmental" \
+ "lookups! Consider updating to a different libc.")
+
+ return ImplGetEnv(name);
+#endif
+}
+} // namespace detail
+
+#endif // defined(XR_OS_LINUX) || defined(XR_OS_APPLE)
+#if defined(XR_OS_LINUX)
+
+static inline std::string PlatformUtilsGetEnv(const char* name) {
+ auto str = detail::ImplGetEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+ auto str = detail::ImplGetSecureEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; }
+
+static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
+ const int shouldOverwrite = 1;
+ int result = detail::ImplSetEnv(name, value, shouldOverwrite);
+ return (result == 0);
+}
+
+#elif defined(XR_OS_APPLE)
+
+static inline std::string PlatformUtilsGetEnv(const char* name) {
+ auto str = detail::ImplGetEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+ auto str = detail::ImplGetSecureEnv(name);
+ if (str == nullptr) {
+ return {};
+ }
+ return str;
+}
+
+static inline bool PlatformUtilsGetEnvSet(const char* name) { return detail::ImplGetEnv(name) != nullptr; }
+
+static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
+ const int shouldOverwrite = 1;
+ int result = detail::ImplSetEnv(name, value, shouldOverwrite);
+ return (result == 0);
+}
+
+// Prefix for the Apple global runtime JSON file name
+static const std::string rt_dir_prefix = "/usr/local/share/openxr/";
+static const std::string rt_filename = "/active_runtime.json";
+
+static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) {
+ file_name = rt_dir_prefix;
+ file_name += std::to_string(major_version);
+ file_name += rt_filename;
+ return true;
+}
+
+#elif defined(XR_OS_WINDOWS)
+
+#if !defined(NDEBUG)
+inline void LogError(const std::string& error) { OutputDebugStringA(error.c_str()); }
+#else
+#define LogError(x)
+#endif
+
+inline std::wstring utf8_to_wide(const std::string& utf8Text) {
+ if (utf8Text.empty()) {
+ return {};
+ }
+
+ std::wstring wideText;
+ const int wideLength = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), nullptr, 0);
+ if (wideLength == 0) {
+ LogError("utf8_to_wide get size error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ // MultiByteToWideChar returns number of chars of the input buffer, regardless of null terminitor
+ wideText.resize(wideLength, 0);
+ wchar_t* wideString = const_cast<wchar_t*>(wideText.data()); // mutable data() only exists in c++17
+ const int length = ::MultiByteToWideChar(CP_UTF8, 0, utf8Text.data(), (int)utf8Text.size(), wideString, wideLength);
+ if (length != wideLength) {
+ LogError("utf8_to_wide convert string error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ return wideText;
+}
+
+inline std::string wide_to_utf8(const std::wstring& wideText) {
+ if (wideText.empty()) {
+ return {};
+ }
+
+ std::string narrowText;
+ int narrowLength = ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), nullptr, 0, nullptr, nullptr);
+ if (narrowLength == 0) {
+ LogError("wide_to_utf8 get size error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ // WideCharToMultiByte returns number of chars of the input buffer, regardless of null terminitor
+ narrowText.resize(narrowLength, 0);
+ char* narrowString = const_cast<char*>(narrowText.data()); // mutable data() only exists in c++17
+ const int length =
+ ::WideCharToMultiByte(CP_UTF8, 0, wideText.data(), (int)wideText.size(), narrowString, narrowLength, nullptr, nullptr);
+ if (length != narrowLength) {
+ LogError("wide_to_utf8 convert string error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ return narrowText;
+}
+
+// Returns true if the current process has an integrity level > SECURITY_MANDATORY_MEDIUM_RID.
+static inline bool IsHighIntegrityLevel() {
+ // Execute this check once and save the value as a static bool.
+ static bool isHighIntegrityLevel = ([] {
+ HANDLE processToken;
+ if (OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY | TOKEN_QUERY_SOURCE, &processToken)) {
+ // Maximum possible size of SID_AND_ATTRIBUTES is maximum size of a SID + size of attributes DWORD.
+ uint8_t mandatoryLabelBuffer[SECURITY_MAX_SID_SIZE + sizeof(DWORD)]{};
+ DWORD bufferSize;
+ if (GetTokenInformation(processToken, TokenIntegrityLevel, mandatoryLabelBuffer, sizeof(mandatoryLabelBuffer),
+ &bufferSize) != 0) {
+ const auto mandatoryLabel = reinterpret_cast<const TOKEN_MANDATORY_LABEL*>(mandatoryLabelBuffer);
+ if (mandatoryLabel->Label.Sid != 0) {
+ const DWORD subAuthorityCount = *GetSidSubAuthorityCount(mandatoryLabel->Label.Sid);
+ const DWORD integrityLevel = *GetSidSubAuthority(mandatoryLabel->Label.Sid, subAuthorityCount - 1);
+ CloseHandle(processToken);
+ return integrityLevel > SECURITY_MANDATORY_MEDIUM_RID;
+ }
+ }
+
+ CloseHandle(processToken);
+ }
+
+ return false;
+ })();
+
+ return isHighIntegrityLevel;
+}
+
+// Returns true if the given environment variable exists.
+// The name is a case-sensitive UTF8 string.
+static inline bool PlatformUtilsGetEnvSet(const char* name) {
+ const std::wstring wname = utf8_to_wide(name);
+ const DWORD valSize = ::GetEnvironmentVariableW(wname.c_str(), nullptr, 0);
+ // GetEnvironmentVariable returns 0 when environment variable does not exist or there is an error.
+ return 0 != valSize;
+}
+
+// Returns the environment variable value for the given name.
+// Returns an empty string if the environment variable doesn't exist or if it exists but is empty.
+// Use PlatformUtilsGetEnvSet to tell if it exists.
+// The name is a case-sensitive UTF8 string.
+static inline std::string PlatformUtilsGetEnv(const char* name) {
+ const std::wstring wname = utf8_to_wide(name);
+ const DWORD valSize = ::GetEnvironmentVariableW(wname.c_str(), nullptr, 0);
+ // GetEnvironmentVariable returns 0 when environment variable does not exist or there is an error.
+ // The size includes the null-terminator, so a size of 1 is means the variable was explicitly set to empty.
+ if (valSize == 0 || valSize == 1) {
+ return {};
+ }
+
+ // GetEnvironmentVariable returns size including null terminator for "query size" call.
+ std::wstring wValue(valSize, 0);
+ wchar_t* wValueData = &wValue[0];
+
+ // GetEnvironmentVariable returns string length, excluding null terminator for "get value"
+ // call if there was enough capacity. Else it returns the required capacity (including null terminator).
+ const DWORD length = ::GetEnvironmentVariableW(wname.c_str(), wValueData, (DWORD)wValue.size());
+ if ((length == 0) || (length >= wValue.size())) { // If error or the variable increased length between calls...
+ LogError("GetEnvironmentVariable get value error: " + std::to_string(::GetLastError()));
+ return {};
+ }
+
+ wValue.resize(length); // Strip the null terminator.
+
+ return wide_to_utf8(wValue);
+}
+
+// Acts the same as PlatformUtilsGetEnv except returns an empty string if IsHighIntegrityLevel.
+static inline std::string PlatformUtilsGetSecureEnv(const char* name) {
+ // Do not allow high integrity processes to act on data that can be controlled by medium integrity processes.
+ if (IsHighIntegrityLevel()) {
+ return {};
+ }
+
+ // No secure version for Windows so the above integrity check is needed.
+ return PlatformUtilsGetEnv(name);
+}
+
+// Sets an environment variable via UTF8 strings.
+// The name is case-sensitive.
+// Overwrites the variable if it already exists.
+// Returns true if it could be set.
+static inline bool PlatformUtilsSetEnv(const char* name, const char* value) {
+ const std::wstring wname = utf8_to_wide(name);
+ const std::wstring wvalue = utf8_to_wide(value);
+ BOOL result = ::SetEnvironmentVariableW(wname.c_str(), wvalue.c_str());
+ return (result != 0);
+}
+
+#elif defined(XR_OS_ANDROID)
+
+static inline bool PlatformUtilsGetEnvSet(const char* /* name */) {
+ // Stub func
+ return false;
+}
+
+static inline std::string PlatformUtilsGetEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) {
+ // Stub func
+ return false;
+}
+
+#include <sys/stat.h>
+
+// Intended to be only used as a fallback on Android, with a more open, "native" technique used in most cases
+static inline bool PlatformGetGlobalRuntimeFileName(uint16_t major_version, std::string& file_name) {
+ // Prefix for the runtime JSON file name
+ static const char* rt_dir_prefixes[] = {"/oem", "/vendor", "/system"};
+ static const std::string rt_filename = "/active_runtime.json";
+ static const std::string subdir = "/etc/openxr/";
+ for (const auto prefix : rt_dir_prefixes) {
+ auto path = prefix + subdir + std::to_string(major_version) + rt_filename;
+ struct stat buf;
+ if (0 == stat(path.c_str(), &buf)) {
+ file_name = path;
+ return true;
+ }
+ }
+ return false;
+}
+#else // Not Linux, Apple, nor Windows
+
+static inline bool PlatformUtilsGetEnvSet(const char* /* name */) {
+ // Stub func
+ return false;
+}
+
+static inline std::string PlatformUtilsGetEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline std::string PlatformUtilsGetSecureEnv(const char* /* name */) {
+ // Stub func
+ return {};
+}
+
+static inline bool PlatformUtilsSetEnv(const char* /* name */, const char* /* value */) {
+ // Stub func
+ return false;
+}
+
+static inline bool PlatformGetGlobalRuntimeFileName(uint16_t /* major_version */, std::string const& /* file_name */) {
+ // Stub func
+ return false;
+}
+
+#endif
diff --git a/thirdparty/openxr/src/common/stdfs_conditions.h b/thirdparty/openxr/src/common/stdfs_conditions.h
new file mode 100644
index 0000000000..6dc18cc620
--- /dev/null
+++ b/thirdparty/openxr/src/common/stdfs_conditions.h
@@ -0,0 +1,45 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+
+#ifndef _STDFS_CONDITIONS_H
+#define _STDFS_CONDITIONS_H
+
+// If the C++ macro is set to the version containing C++17, it must support
+// the final C++17 package
+#if __cplusplus >= 201703L
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+
+#elif defined(_MSC_VER) && _MSC_VER >= 1900
+
+#if defined(_HAS_CXX17) && _HAS_CXX17
+// When MSC supports c++17 use <filesystem> package.
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+#endif // !_HAS_CXX17
+
+// GCC supports the experimental filesystem items starting in GCC 6
+#elif (__GNUC__ >= 6)
+#define USE_EXPERIMENTAL_FS 1
+#define USE_FINAL_FS 0
+
+// If Clang, check for feature support
+#elif defined(__clang__) && (__cpp_lib_filesystem || __cpp_lib_experimental_filesystem)
+#if __cpp_lib_filesystem
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 1
+#else
+#define USE_EXPERIMENTAL_FS 1
+#define USE_FINAL_FS 0
+#endif
+
+// If all above fails, fall back to standard C++ and OS-specific items
+#else
+#define USE_EXPERIMENTAL_FS 0
+#define USE_FINAL_FS 0
+#endif
+
+#endif // !_STDFS_CONDITIONS_H
diff --git a/thirdparty/openxr/src/common/xr_dependencies.h b/thirdparty/openxr/src/common/xr_dependencies.h
new file mode 100644
index 0000000000..e34527abc3
--- /dev/null
+++ b/thirdparty/openxr/src/common/xr_dependencies.h
@@ -0,0 +1,89 @@
+// Copyright (c) 2018-2022, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// This file includes headers with types which openxr.h depends on in order
+// to compile when platforms, graphics apis, and the like are enabled.
+
+#pragma once
+
+#ifdef XR_USE_PLATFORM_ANDROID
+#include <android/native_window.h>
+#include <android/window.h>
+#include <android/native_window_jni.h>
+#endif // XR_USE_PLATFORM_ANDROID
+
+#ifdef XR_USE_PLATFORM_WIN32
+
+#include <winapifamily.h>
+#if !(WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM))
+// Enable desktop partition APIs, such as RegOpenKeyEx, LoadLibraryEx, PathFileExists etc.
+#undef WINAPI_PARTITION_DESKTOP
+#define WINAPI_PARTITION_DESKTOP 1
+#endif
+
+#ifndef NOMINMAX
+#define NOMINMAX
+#endif // !NOMINMAX
+
+#ifndef WIN32_LEAN_AND_MEAN
+#define WIN32_LEAN_AND_MEAN
+#endif // !WIN32_LEAN_AND_MEAN
+
+#include <windows.h>
+#include <unknwn.h>
+
+#endif // XR_USE_PLATFORM_WIN32
+
+#ifdef XR_USE_GRAPHICS_API_D3D11
+#include <d3d11.h>
+#endif // XR_USE_GRAPHICS_API_D3D11
+
+#ifdef XR_USE_GRAPHICS_API_D3D12
+#include <d3d12.h>
+#endif // XR_USE_GRAPHICS_API_D3D12
+
+#ifdef XR_USE_PLATFORM_XLIB
+#include <X11/Xlib.h>
+#include <X11/Xutil.h>
+
+#ifdef Success
+#undef Success
+#endif // Success
+
+#ifdef Always
+#undef Always
+#endif // Always
+
+#ifdef None
+#undef None
+#endif // None
+#endif // XR_USE_PLATFORM_XLIB
+
+#ifdef XR_USE_PLATFORM_XCB
+#include <xcb/xcb.h>
+#endif // XR_USE_PLATFORM_XCB
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL
+#if defined(XR_USE_PLATFORM_XLIB) || defined(XR_USE_PLATFORM_XCB)
+#include <GL/glx.h>
+#endif // (XR_USE_PLATFORM_XLIB || XR_USE_PLATFORM_XCB)
+#ifdef XR_USE_PLATFORM_XCB
+#include <xcb/glx.h>
+#endif // XR_USE_PLATFORM_XCB
+#ifdef XR_USE_PLATFORM_MACOS
+#include <CL/cl_gl_ext.h>
+#endif // XR_USE_PLATFORM_MACOS
+#endif // XR_USE_GRAPHICS_API_OPENGL
+
+#ifdef XR_USE_GRAPHICS_API_OPENGL_ES
+#include <EGL/egl.h>
+#endif // XR_USE_GRAPHICS_API_OPENGL_ES
+
+#ifdef XR_USE_GRAPHICS_API_VULKAN
+#include <vulkan/vulkan.h>
+#endif // XR_USE_GRAPHICS_API_VULKAN
+
+#ifdef XR_USE_PLATFORM_WAYLAND
+#include "wayland-client.h"
+#endif // XR_USE_PLATFORM_WAYLAND
diff --git a/thirdparty/openxr/src/common/xr_linear.h b/thirdparty/openxr/src/common/xr_linear.h
new file mode 100644
index 0000000000..9ffb49a4b6
--- /dev/null
+++ b/thirdparty/openxr/src/common/xr_linear.h
@@ -0,0 +1,787 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2016 Oculus VR, LLC.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: J.M.P. van Waveren
+//
+
+#ifndef XR_LINEAR_H_
+#define XR_LINEAR_H_
+
+#if defined(OS_LINUX_XCB) || defined(OS_LINUX_XCB_GLX) || defined(OS_LINUX_WAYLAND)
+#pragma GCC diagnostic ignored "-Wunused-function"
+#pragma clang diagnostic ignored "-Wunused-function"
+#endif
+
+#include <openxr/openxr.h>
+
+/*
+================================================================================================
+
+Description : Vector, matrix and quaternion math.
+Author : J.M.P. van Waveren
+Date : 12/10/2016
+Language : C99
+Format : Indent 4 spaces - no tabs.
+Copyright : Copyright (c) 2016 Oculus VR, LLC. All Rights reserved.
+
+
+DESCRIPTION
+===========
+
+All matrices are column-major.
+
+INTERFACE
+=========
+
+XrVector2f
+XrVector3f
+XrVector4f
+XrQuaternionf
+XrMatrix4x4f
+
+inline static void XrVector3f_Set(XrVector3f* v, const float value);
+inline static void XrVector3f_Add(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Sub(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Min(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Max(XrVector3f* result, const XrVector3f* a, const XrVector3f* b);
+inline static void XrVector3f_Decay(XrVector3f* result, const XrVector3f* a, const float value);
+inline static void XrVector3f_Lerp(XrVector3f* result, const XrVector3f* a, const XrVector3f* b, const float fraction);
+inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, const float scaleFactor);
+inline static void XrVector3f_Normalize(XrVector3f* v);
+inline static float XrVector3f_Length(const XrVector3f* v);
+
+inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction);
+inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b;
+
+inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result);
+inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z);
+inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY,
+ const float degreesZ);
+inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z);
+inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation,
+ const XrQuaternionf* rotation, const XrVector3f* scale);
+inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, const float tanAngleLeft, const float tanAngleRight,
+ const float tanAngleUp, float const tanAngleDown, const float nearZ,
+ const float farZ);
+inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, const float fovDegreesLeft, const float fovDegreesRight,
+ const float fovDegreeUp, const float fovDegreesDown, const float nearZ,
+ const float farZ);
+inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* src);
+inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins,
+ const XrVector3f* maxs);
+
+inline static bool XrMatrix4x4f_IsAffine(const XrMatrix4x4f* matrix, const float epsilon);
+inline static bool XrMatrix4x4f_IsOrthogonal(const XrMatrix4x4f* matrix, const float epsilon);
+inline static bool XrMatrix4x4f_IsOrthonormal(const XrMatrix4x4f* matrix, const float epsilon);
+inline static bool XrMatrix4x4f_IsRigidBody(const XrMatrix4x4f* matrix, const float epsilon);
+
+inline static void XrMatrix4x4f_GetTranslation(XrVector3f* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_GetRotation(XrQuaternionf* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_GetScale(XrVector3f* result, const XrMatrix4x4f* src);
+
+inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b);
+inline static void XrMatrix4x4f_Transpose(XrMatrix4x4f* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_Invert(XrMatrix4x4f* result, const XrMatrix4x4f* src);
+inline static void XrMatrix4x4f_InvertRigidBody(XrMatrix4x4f* result, const XrMatrix4x4f* src);
+
+inline static void XrMatrix4x4f_TransformVector3f(XrVector3f* result, const XrMatrix4x4f* m, const XrVector3f* v);
+inline static void XrMatrix4x4f_TransformVector4f(XrVector4f* result, const XrMatrix4x4f* m, const XrVector4f* v);
+
+inline static void XrMatrix4x4f_TransformBounds(XrVector3f* resultMins, XrVector3f* resultMaxs, const XrMatrix4x4f* matrix,
+ const XrVector3f* mins, const XrVector3f* maxs);
+inline static bool XrMatrix4x4f_CullBounds(const XrMatrix4x4f* mvp, const XrVector3f* mins, const XrVector3f* maxs);
+
+================================================================================================
+*/
+
+#include <assert.h>
+#include <math.h>
+#include <stdbool.h>
+
+#define MATH_PI 3.14159265358979323846f
+
+#define DEFAULT_NEAR_Z 0.015625f // exact floating point representation
+#define INFINITE_FAR_Z 0.0f
+
+static const XrColor4f XrColorRed = {1.0f, 0.0f, 0.0f, 1.0f};
+static const XrColor4f XrColorGreen = {0.0f, 1.0f, 0.0f, 1.0f};
+static const XrColor4f XrColorBlue = {0.0f, 0.0f, 1.0f, 1.0f};
+static const XrColor4f XrColorYellow = {1.0f, 1.0f, 0.0f, 1.0f};
+static const XrColor4f XrColorPurple = {1.0f, 0.0f, 1.0f, 1.0f};
+static const XrColor4f XrColorCyan = {0.0f, 1.0f, 1.0f, 1.0f};
+static const XrColor4f XrColorLightGrey = {0.7f, 0.7f, 0.7f, 1.0f};
+static const XrColor4f XrColorDarkGrey = {0.3f, 0.3f, 0.3f, 1.0f};
+
+enum GraphicsAPI { GRAPHICS_VULKAN, GRAPHICS_OPENGL, GRAPHICS_OPENGL_ES, GRAPHICS_D3D };
+
+// Column-major, pre-multiplied. This type does not exist in the OpenXR API and is provided for convenience.
+struct XrMatrix4x4f {
+ float m[16];
+};
+
+inline static float XrRcpSqrt(const float x) {
+ const float SMALLEST_NON_DENORMAL = 1.1754943508222875e-038f; // ( 1U << 23 )
+ const float rcp = (x >= SMALLEST_NON_DENORMAL) ? 1.0f / sqrtf(x) : 1.0f;
+ return rcp;
+}
+
+inline static void XrVector3f_Set(XrVector3f* v, const float value) {
+ v->x = value;
+ v->y = value;
+ v->z = value;
+}
+
+inline static void XrVector3f_Add(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = a->x + b->x;
+ result->y = a->y + b->y;
+ result->z = a->z + b->z;
+}
+
+inline static void XrVector3f_Sub(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = a->x - b->x;
+ result->y = a->y - b->y;
+ result->z = a->z - b->z;
+}
+
+inline static void XrVector3f_Min(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = (a->x < b->x) ? a->x : b->x;
+ result->y = (a->y < b->y) ? a->y : b->y;
+ result->z = (a->z < b->z) ? a->z : b->z;
+}
+
+inline static void XrVector3f_Max(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = (a->x > b->x) ? a->x : b->x;
+ result->y = (a->y > b->y) ? a->y : b->y;
+ result->z = (a->z > b->z) ? a->z : b->z;
+}
+
+inline static void XrVector3f_Decay(XrVector3f* result, const XrVector3f* a, const float value) {
+ result->x = (fabsf(a->x) > value) ? ((a->x > 0.0f) ? (a->x - value) : (a->x + value)) : 0.0f;
+ result->y = (fabsf(a->y) > value) ? ((a->y > 0.0f) ? (a->y - value) : (a->y + value)) : 0.0f;
+ result->z = (fabsf(a->z) > value) ? ((a->z > 0.0f) ? (a->z - value) : (a->z + value)) : 0.0f;
+}
+
+inline static void XrVector3f_Lerp(XrVector3f* result, const XrVector3f* a, const XrVector3f* b, const float fraction) {
+ result->x = a->x + fraction * (b->x - a->x);
+ result->y = a->y + fraction * (b->y - a->y);
+ result->z = a->z + fraction * (b->z - a->z);
+}
+
+inline static void XrVector3f_Scale(XrVector3f* result, const XrVector3f* a, const float scaleFactor) {
+ result->x = a->x * scaleFactor;
+ result->y = a->y * scaleFactor;
+ result->z = a->z * scaleFactor;
+}
+
+inline static float XrVector3f_Dot(const XrVector3f* a, const XrVector3f* b) { return a->x * b->x + a->y * b->y + a->z * b->z; }
+
+// Compute cross product, which generates a normal vector.
+// Direction vector can be determined by right-hand rule: Pointing index finder in
+// direction a and middle finger in direction b, thumb will point in Cross(a, b).
+inline static void XrVector3f_Cross(XrVector3f* result, const XrVector3f* a, const XrVector3f* b) {
+ result->x = a->y * b->z - a->z * b->y;
+ result->y = a->z * b->x - a->x * b->z;
+ result->z = a->x * b->y - a->y * b->x;
+}
+
+inline static void XrVector3f_Normalize(XrVector3f* v) {
+ const float lengthRcp = XrRcpSqrt(v->x * v->x + v->y * v->y + v->z * v->z);
+ v->x *= lengthRcp;
+ v->y *= lengthRcp;
+ v->z *= lengthRcp;
+}
+
+inline static float XrVector3f_Length(const XrVector3f* v) { return sqrtf(v->x * v->x + v->y * v->y + v->z * v->z); }
+
+inline static void XrQuaternionf_CreateFromAxisAngle(XrQuaternionf* result, const XrVector3f* axis, const float angleInRadians) {
+ float s = sinf(angleInRadians / 2.0f);
+ float lengthRcp = XrRcpSqrt(axis->x * axis->x + axis->y * axis->y + axis->z * axis->z);
+ result->x = s * axis->x * lengthRcp;
+ result->y = s * axis->y * lengthRcp;
+ result->z = s * axis->z * lengthRcp;
+ result->w = cosf(angleInRadians / 2.0f);
+}
+
+inline static void XrQuaternionf_Lerp(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b, const float fraction) {
+ const float s = a->x * b->x + a->y * b->y + a->z * b->z + a->w * b->w;
+ const float fa = 1.0f - fraction;
+ const float fb = (s < 0.0f) ? -fraction : fraction;
+ const float x = a->x * fa + b->x * fb;
+ const float y = a->y * fa + b->y * fb;
+ const float z = a->z * fa + b->z * fb;
+ const float w = a->w * fa + b->w * fb;
+ const float lengthRcp = XrRcpSqrt(x * x + y * y + z * z + w * w);
+ result->x = x * lengthRcp;
+ result->y = y * lengthRcp;
+ result->z = z * lengthRcp;
+ result->w = w * lengthRcp;
+}
+
+inline static void XrQuaternionf_Multiply(XrQuaternionf* result, const XrQuaternionf* a, const XrQuaternionf* b) {
+ result->x = (b->w * a->x) + (b->x * a->w) + (b->y * a->z) - (b->z * a->y);
+ result->y = (b->w * a->y) - (b->x * a->z) + (b->y * a->w) + (b->z * a->x);
+ result->z = (b->w * a->z) + (b->x * a->y) - (b->y * a->x) + (b->z * a->w);
+ result->w = (b->w * a->w) - (b->x * a->x) - (b->y * a->y) - (b->z * a->z);
+}
+
+// Use left-multiplication to accumulate transformations.
+inline static void XrMatrix4x4f_Multiply(XrMatrix4x4f* result, const XrMatrix4x4f* a, const XrMatrix4x4f* b) {
+ result->m[0] = a->m[0] * b->m[0] + a->m[4] * b->m[1] + a->m[8] * b->m[2] + a->m[12] * b->m[3];
+ result->m[1] = a->m[1] * b->m[0] + a->m[5] * b->m[1] + a->m[9] * b->m[2] + a->m[13] * b->m[3];
+ result->m[2] = a->m[2] * b->m[0] + a->m[6] * b->m[1] + a->m[10] * b->m[2] + a->m[14] * b->m[3];
+ result->m[3] = a->m[3] * b->m[0] + a->m[7] * b->m[1] + a->m[11] * b->m[2] + a->m[15] * b->m[3];
+
+ result->m[4] = a->m[0] * b->m[4] + a->m[4] * b->m[5] + a->m[8] * b->m[6] + a->m[12] * b->m[7];
+ result->m[5] = a->m[1] * b->m[4] + a->m[5] * b->m[5] + a->m[9] * b->m[6] + a->m[13] * b->m[7];
+ result->m[6] = a->m[2] * b->m[4] + a->m[6] * b->m[5] + a->m[10] * b->m[6] + a->m[14] * b->m[7];
+ result->m[7] = a->m[3] * b->m[4] + a->m[7] * b->m[5] + a->m[11] * b->m[6] + a->m[15] * b->m[7];
+
+ result->m[8] = a->m[0] * b->m[8] + a->m[4] * b->m[9] + a->m[8] * b->m[10] + a->m[12] * b->m[11];
+ result->m[9] = a->m[1] * b->m[8] + a->m[5] * b->m[9] + a->m[9] * b->m[10] + a->m[13] * b->m[11];
+ result->m[10] = a->m[2] * b->m[8] + a->m[6] * b->m[9] + a->m[10] * b->m[10] + a->m[14] * b->m[11];
+ result->m[11] = a->m[3] * b->m[8] + a->m[7] * b->m[9] + a->m[11] * b->m[10] + a->m[15] * b->m[11];
+
+ result->m[12] = a->m[0] * b->m[12] + a->m[4] * b->m[13] + a->m[8] * b->m[14] + a->m[12] * b->m[15];
+ result->m[13] = a->m[1] * b->m[12] + a->m[5] * b->m[13] + a->m[9] * b->m[14] + a->m[13] * b->m[15];
+ result->m[14] = a->m[2] * b->m[12] + a->m[6] * b->m[13] + a->m[10] * b->m[14] + a->m[14] * b->m[15];
+ result->m[15] = a->m[3] * b->m[12] + a->m[7] * b->m[13] + a->m[11] * b->m[14] + a->m[15] * b->m[15];
+}
+
+// Creates the transpose of the given matrix.
+inline static void XrMatrix4x4f_Transpose(XrMatrix4x4f* result, const XrMatrix4x4f* src) {
+ result->m[0] = src->m[0];
+ result->m[1] = src->m[4];
+ result->m[2] = src->m[8];
+ result->m[3] = src->m[12];
+
+ result->m[4] = src->m[1];
+ result->m[5] = src->m[5];
+ result->m[6] = src->m[9];
+ result->m[7] = src->m[13];
+
+ result->m[8] = src->m[2];
+ result->m[9] = src->m[6];
+ result->m[10] = src->m[10];
+ result->m[11] = src->m[14];
+
+ result->m[12] = src->m[3];
+ result->m[13] = src->m[7];
+ result->m[14] = src->m[11];
+ result->m[15] = src->m[15];
+}
+
+// Returns a 3x3 minor of a 4x4 matrix.
+inline static float XrMatrix4x4f_Minor(const XrMatrix4x4f* matrix, int r0, int r1, int r2, int c0, int c1, int c2) {
+ return matrix->m[4 * r0 + c0] *
+ (matrix->m[4 * r1 + c1] * matrix->m[4 * r2 + c2] - matrix->m[4 * r2 + c1] * matrix->m[4 * r1 + c2]) -
+ matrix->m[4 * r0 + c1] *
+ (matrix->m[4 * r1 + c0] * matrix->m[4 * r2 + c2] - matrix->m[4 * r2 + c0] * matrix->m[4 * r1 + c2]) +
+ matrix->m[4 * r0 + c2] *
+ (matrix->m[4 * r1 + c0] * matrix->m[4 * r2 + c1] - matrix->m[4 * r2 + c0] * matrix->m[4 * r1 + c1]);
+}
+
+// Calculates the inverse of a 4x4 matrix.
+inline static void XrMatrix4x4f_Invert(XrMatrix4x4f* result, const XrMatrix4x4f* src) {
+ const float rcpDet =
+ 1.0f / (src->m[0] * XrMatrix4x4f_Minor(src, 1, 2, 3, 1, 2, 3) - src->m[1] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 2, 3) +
+ src->m[2] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 3) - src->m[3] * XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 2));
+
+ result->m[0] = XrMatrix4x4f_Minor(src, 1, 2, 3, 1, 2, 3) * rcpDet;
+ result->m[1] = -XrMatrix4x4f_Minor(src, 0, 2, 3, 1, 2, 3) * rcpDet;
+ result->m[2] = XrMatrix4x4f_Minor(src, 0, 1, 3, 1, 2, 3) * rcpDet;
+ result->m[3] = -XrMatrix4x4f_Minor(src, 0, 1, 2, 1, 2, 3) * rcpDet;
+ result->m[4] = -XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 2, 3) * rcpDet;
+ result->m[5] = XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 2, 3) * rcpDet;
+ result->m[6] = -XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 2, 3) * rcpDet;
+ result->m[7] = XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 2, 3) * rcpDet;
+ result->m[8] = XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 3) * rcpDet;
+ result->m[9] = -XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 1, 3) * rcpDet;
+ result->m[10] = XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 1, 3) * rcpDet;
+ result->m[11] = -XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 1, 3) * rcpDet;
+ result->m[12] = -XrMatrix4x4f_Minor(src, 1, 2, 3, 0, 1, 2) * rcpDet;
+ result->m[13] = XrMatrix4x4f_Minor(src, 0, 2, 3, 0, 1, 2) * rcpDet;
+ result->m[14] = -XrMatrix4x4f_Minor(src, 0, 1, 3, 0, 1, 2) * rcpDet;
+ result->m[15] = XrMatrix4x4f_Minor(src, 0, 1, 2, 0, 1, 2) * rcpDet;
+}
+
+// Calculates the inverse of a rigid body transform.
+inline static void XrMatrix4x4f_InvertRigidBody(XrMatrix4x4f* result, const XrMatrix4x4f* src) {
+ result->m[0] = src->m[0];
+ result->m[1] = src->m[4];
+ result->m[2] = src->m[8];
+ result->m[3] = 0.0f;
+ result->m[4] = src->m[1];
+ result->m[5] = src->m[5];
+ result->m[6] = src->m[9];
+ result->m[7] = 0.0f;
+ result->m[8] = src->m[2];
+ result->m[9] = src->m[6];
+ result->m[10] = src->m[10];
+ result->m[11] = 0.0f;
+ result->m[12] = -(src->m[0] * src->m[12] + src->m[1] * src->m[13] + src->m[2] * src->m[14]);
+ result->m[13] = -(src->m[4] * src->m[12] + src->m[5] * src->m[13] + src->m[6] * src->m[14]);
+ result->m[14] = -(src->m[8] * src->m[12] + src->m[9] * src->m[13] + src->m[10] * src->m[14]);
+ result->m[15] = 1.0f;
+}
+
+// Creates an identity matrix.
+inline static void XrMatrix4x4f_CreateIdentity(XrMatrix4x4f* result) {
+ result->m[0] = 1.0f;
+ result->m[1] = 0.0f;
+ result->m[2] = 0.0f;
+ result->m[3] = 0.0f;
+ result->m[4] = 0.0f;
+ result->m[5] = 1.0f;
+ result->m[6] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[8] = 0.0f;
+ result->m[9] = 0.0f;
+ result->m[10] = 1.0f;
+ result->m[11] = 0.0f;
+ result->m[12] = 0.0f;
+ result->m[13] = 0.0f;
+ result->m[14] = 0.0f;
+ result->m[15] = 1.0f;
+}
+
+// Creates a translation matrix.
+inline static void XrMatrix4x4f_CreateTranslation(XrMatrix4x4f* result, const float x, const float y, const float z) {
+ result->m[0] = 1.0f;
+ result->m[1] = 0.0f;
+ result->m[2] = 0.0f;
+ result->m[3] = 0.0f;
+ result->m[4] = 0.0f;
+ result->m[5] = 1.0f;
+ result->m[6] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[8] = 0.0f;
+ result->m[9] = 0.0f;
+ result->m[10] = 1.0f;
+ result->m[11] = 0.0f;
+ result->m[12] = x;
+ result->m[13] = y;
+ result->m[14] = z;
+ result->m[15] = 1.0f;
+}
+
+// Creates a rotation matrix.
+// If -Z=forward, +Y=up, +X=right, then degreesX=pitch, degreesY=yaw, degreesZ=roll.
+inline static void XrMatrix4x4f_CreateRotation(XrMatrix4x4f* result, const float degreesX, const float degreesY,
+ const float degreesZ) {
+ const float sinX = sinf(degreesX * (MATH_PI / 180.0f));
+ const float cosX = cosf(degreesX * (MATH_PI / 180.0f));
+ const XrMatrix4x4f rotationX = {{1, 0, 0, 0, 0, cosX, sinX, 0, 0, -sinX, cosX, 0, 0, 0, 0, 1}};
+ const float sinY = sinf(degreesY * (MATH_PI / 180.0f));
+ const float cosY = cosf(degreesY * (MATH_PI / 180.0f));
+ const XrMatrix4x4f rotationY = {{cosY, 0, -sinY, 0, 0, 1, 0, 0, sinY, 0, cosY, 0, 0, 0, 0, 1}};
+ const float sinZ = sinf(degreesZ * (MATH_PI / 180.0f));
+ const float cosZ = cosf(degreesZ * (MATH_PI / 180.0f));
+ const XrMatrix4x4f rotationZ = {{cosZ, sinZ, 0, 0, -sinZ, cosZ, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1}};
+ XrMatrix4x4f rotationXY;
+ XrMatrix4x4f_Multiply(&rotationXY, &rotationY, &rotationX);
+ XrMatrix4x4f_Multiply(result, &rotationZ, &rotationXY);
+}
+
+// Creates a scale matrix.
+inline static void XrMatrix4x4f_CreateScale(XrMatrix4x4f* result, const float x, const float y, const float z) {
+ result->m[0] = x;
+ result->m[1] = 0.0f;
+ result->m[2] = 0.0f;
+ result->m[3] = 0.0f;
+ result->m[4] = 0.0f;
+ result->m[5] = y;
+ result->m[6] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[8] = 0.0f;
+ result->m[9] = 0.0f;
+ result->m[10] = z;
+ result->m[11] = 0.0f;
+ result->m[12] = 0.0f;
+ result->m[13] = 0.0f;
+ result->m[14] = 0.0f;
+ result->m[15] = 1.0f;
+}
+
+// Creates a matrix from a quaternion.
+inline static void XrMatrix4x4f_CreateFromQuaternion(XrMatrix4x4f* result, const XrQuaternionf* quat) {
+ const float x2 = quat->x + quat->x;
+ const float y2 = quat->y + quat->y;
+ const float z2 = quat->z + quat->z;
+
+ const float xx2 = quat->x * x2;
+ const float yy2 = quat->y * y2;
+ const float zz2 = quat->z * z2;
+
+ const float yz2 = quat->y * z2;
+ const float wx2 = quat->w * x2;
+ const float xy2 = quat->x * y2;
+ const float wz2 = quat->w * z2;
+ const float xz2 = quat->x * z2;
+ const float wy2 = quat->w * y2;
+
+ result->m[0] = 1.0f - yy2 - zz2;
+ result->m[1] = xy2 + wz2;
+ result->m[2] = xz2 - wy2;
+ result->m[3] = 0.0f;
+
+ result->m[4] = xy2 - wz2;
+ result->m[5] = 1.0f - xx2 - zz2;
+ result->m[6] = yz2 + wx2;
+ result->m[7] = 0.0f;
+
+ result->m[8] = xz2 + wy2;
+ result->m[9] = yz2 - wx2;
+ result->m[10] = 1.0f - xx2 - yy2;
+ result->m[11] = 0.0f;
+
+ result->m[12] = 0.0f;
+ result->m[13] = 0.0f;
+ result->m[14] = 0.0f;
+ result->m[15] = 1.0f;
+}
+
+// Creates a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_CreateTranslationRotationScale(XrMatrix4x4f* result, const XrVector3f* translation,
+ const XrQuaternionf* rotation, const XrVector3f* scale) {
+ XrMatrix4x4f scaleMatrix;
+ XrMatrix4x4f_CreateScale(&scaleMatrix, scale->x, scale->y, scale->z);
+
+ XrMatrix4x4f rotationMatrix;
+ XrMatrix4x4f_CreateFromQuaternion(&rotationMatrix, rotation);
+
+ XrMatrix4x4f translationMatrix;
+ XrMatrix4x4f_CreateTranslation(&translationMatrix, translation->x, translation->y, translation->z);
+
+ XrMatrix4x4f combinedMatrix;
+ XrMatrix4x4f_Multiply(&combinedMatrix, &rotationMatrix, &scaleMatrix);
+ XrMatrix4x4f_Multiply(result, &translationMatrix, &combinedMatrix);
+}
+
+// Creates a projection matrix based on the specified dimensions.
+// The projection matrix transforms -Z=forward, +Y=up, +X=right to the appropriate clip space for the graphics API.
+// The far plane is placed at infinity if farZ <= nearZ.
+// An infinite projection matrix is preferred for rasterization because, except for
+// things *right* up against the near plane, it always provides better precision:
+// "Tightening the Precision of Perspective Rendering"
+// Paul Upchurch, Mathieu Desbrun
+// Journal of Graphics Tools, Volume 16, Issue 1, 2012
+inline static void XrMatrix4x4f_CreateProjection(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const float tanAngleLeft,
+ const float tanAngleRight, const float tanAngleUp, float const tanAngleDown,
+ const float nearZ, const float farZ) {
+ const float tanAngleWidth = tanAngleRight - tanAngleLeft;
+
+ // Set to tanAngleDown - tanAngleUp for a clip space with positive Y down (Vulkan).
+ // Set to tanAngleUp - tanAngleDown for a clip space with positive Y up (OpenGL / D3D / Metal).
+ const float tanAngleHeight = graphicsApi == GRAPHICS_VULKAN ? (tanAngleDown - tanAngleUp) : (tanAngleUp - tanAngleDown);
+
+ // Set to nearZ for a [-1,1] Z clip space (OpenGL / OpenGL ES).
+ // Set to zero for a [0,1] Z clip space (Vulkan / D3D / Metal).
+ const float offsetZ = (graphicsApi == GRAPHICS_OPENGL || graphicsApi == GRAPHICS_OPENGL_ES) ? nearZ : 0;
+
+ if (farZ <= nearZ) {
+ // place the far plane at infinity
+ result->m[0] = 2.0f / tanAngleWidth;
+ result->m[4] = 0.0f;
+ result->m[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
+ result->m[12] = 0.0f;
+
+ result->m[1] = 0.0f;
+ result->m[5] = 2.0f / tanAngleHeight;
+ result->m[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
+ result->m[13] = 0.0f;
+
+ result->m[2] = 0.0f;
+ result->m[6] = 0.0f;
+ result->m[10] = -1.0f;
+ result->m[14] = -(nearZ + offsetZ);
+
+ result->m[3] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[11] = -1.0f;
+ result->m[15] = 0.0f;
+ } else {
+ // normal projection
+ result->m[0] = 2.0f / tanAngleWidth;
+ result->m[4] = 0.0f;
+ result->m[8] = (tanAngleRight + tanAngleLeft) / tanAngleWidth;
+ result->m[12] = 0.0f;
+
+ result->m[1] = 0.0f;
+ result->m[5] = 2.0f / tanAngleHeight;
+ result->m[9] = (tanAngleUp + tanAngleDown) / tanAngleHeight;
+ result->m[13] = 0.0f;
+
+ result->m[2] = 0.0f;
+ result->m[6] = 0.0f;
+ result->m[10] = -(farZ + offsetZ) / (farZ - nearZ);
+ result->m[14] = -(farZ * (nearZ + offsetZ)) / (farZ - nearZ);
+
+ result->m[3] = 0.0f;
+ result->m[7] = 0.0f;
+ result->m[11] = -1.0f;
+ result->m[15] = 0.0f;
+ }
+}
+
+// Creates a projection matrix based on the specified FOV.
+inline static void XrMatrix4x4f_CreateProjectionFov(XrMatrix4x4f* result, GraphicsAPI graphicsApi, const XrFovf fov,
+ const float nearZ, const float farZ) {
+ const float tanLeft = tanf(fov.angleLeft);
+ const float tanRight = tanf(fov.angleRight);
+
+ const float tanDown = tanf(fov.angleDown);
+ const float tanUp = tanf(fov.angleUp);
+
+ XrMatrix4x4f_CreateProjection(result, graphicsApi, tanLeft, tanRight, tanUp, tanDown, nearZ, farZ);
+}
+
+// Creates a matrix that transforms the -1 to 1 cube to cover the given 'mins' and 'maxs' transformed with the given 'matrix'.
+inline static void XrMatrix4x4f_CreateOffsetScaleForBounds(XrMatrix4x4f* result, const XrMatrix4x4f* matrix, const XrVector3f* mins,
+ const XrVector3f* maxs) {
+ const XrVector3f offset = {(maxs->x + mins->x) * 0.5f, (maxs->y + mins->y) * 0.5f, (maxs->z + mins->z) * 0.5f};
+ const XrVector3f scale = {(maxs->x - mins->x) * 0.5f, (maxs->y - mins->y) * 0.5f, (maxs->z - mins->z) * 0.5f};
+
+ result->m[0] = matrix->m[0] * scale.x;
+ result->m[1] = matrix->m[1] * scale.x;
+ result->m[2] = matrix->m[2] * scale.x;
+ result->m[3] = matrix->m[3] * scale.x;
+
+ result->m[4] = matrix->m[4] * scale.y;
+ result->m[5] = matrix->m[5] * scale.y;
+ result->m[6] = matrix->m[6] * scale.y;
+ result->m[7] = matrix->m[7] * scale.y;
+
+ result->m[8] = matrix->m[8] * scale.z;
+ result->m[9] = matrix->m[9] * scale.z;
+ result->m[10] = matrix->m[10] * scale.z;
+ result->m[11] = matrix->m[11] * scale.z;
+
+ result->m[12] = matrix->m[12] + matrix->m[0] * offset.x + matrix->m[4] * offset.y + matrix->m[8] * offset.z;
+ result->m[13] = matrix->m[13] + matrix->m[1] * offset.x + matrix->m[5] * offset.y + matrix->m[9] * offset.z;
+ result->m[14] = matrix->m[14] + matrix->m[2] * offset.x + matrix->m[6] * offset.y + matrix->m[10] * offset.z;
+ result->m[15] = matrix->m[15] + matrix->m[3] * offset.x + matrix->m[7] * offset.y + matrix->m[11] * offset.z;
+}
+
+// Returns true if the given matrix is affine.
+inline static bool XrMatrix4x4f_IsAffine(const XrMatrix4x4f* matrix, const float epsilon) {
+ return fabsf(matrix->m[3]) <= epsilon && fabsf(matrix->m[7]) <= epsilon && fabsf(matrix->m[11]) <= epsilon &&
+ fabsf(matrix->m[15] - 1.0f) <= epsilon;
+}
+
+// Returns true if the given matrix is orthogonal.
+inline static bool XrMatrix4x4f_IsOrthogonal(const XrMatrix4x4f* matrix, const float epsilon) {
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 3; j++) {
+ if (i != j) {
+ if (fabsf(matrix->m[4 * i + 0] * matrix->m[4 * j + 0] + matrix->m[4 * i + 1] * matrix->m[4 * j + 1] +
+ matrix->m[4 * i + 2] * matrix->m[4 * j + 2]) > epsilon) {
+ return false;
+ }
+ if (fabsf(matrix->m[4 * 0 + i] * matrix->m[4 * 0 + j] + matrix->m[4 * 1 + i] * matrix->m[4 * 1 + j] +
+ matrix->m[4 * 2 + i] * matrix->m[4 * 2 + j]) > epsilon) {
+ return false;
+ }
+ }
+ }
+ }
+ return true;
+}
+
+// Returns true if the given matrix is orthonormal.
+inline static bool XrMatrix4x4f_IsOrthonormal(const XrMatrix4x4f* matrix, const float epsilon) {
+ for (int i = 0; i < 3; i++) {
+ for (int j = 0; j < 3; j++) {
+ const float kd = (i == j) ? 1.0f : 0.0f; // Kronecker delta
+ if (fabsf(kd - (matrix->m[4 * i + 0] * matrix->m[4 * j + 0] + matrix->m[4 * i + 1] * matrix->m[4 * j + 1] +
+ matrix->m[4 * i + 2] * matrix->m[4 * j + 2])) > epsilon) {
+ return false;
+ }
+ if (fabsf(kd - (matrix->m[4 * 0 + i] * matrix->m[4 * 0 + j] + matrix->m[4 * 1 + i] * matrix->m[4 * 1 + j] +
+ matrix->m[4 * 2 + i] * matrix->m[4 * 2 + j])) > epsilon) {
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+// Returns true if the given matrix is a rigid body transform.
+inline static bool XrMatrix4x4f_IsRigidBody(const XrMatrix4x4f* matrix, const float epsilon) {
+ return XrMatrix4x4f_IsAffine(matrix, epsilon) && XrMatrix4x4f_IsOrthonormal(matrix, epsilon);
+}
+
+// Get the translation from a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_GetTranslation(XrVector3f* result, const XrMatrix4x4f* src) {
+ assert(XrMatrix4x4f_IsAffine(src, 1e-4f));
+ assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f));
+
+ result->x = src->m[12];
+ result->y = src->m[13];
+ result->z = src->m[14];
+}
+
+// Get the rotation from a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_GetRotation(XrQuaternionf* result, const XrMatrix4x4f* src) {
+ assert(XrMatrix4x4f_IsAffine(src, 1e-4f));
+ assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f));
+
+ const float rcpScaleX = XrRcpSqrt(src->m[0] * src->m[0] + src->m[1] * src->m[1] + src->m[2] * src->m[2]);
+ const float rcpScaleY = XrRcpSqrt(src->m[4] * src->m[4] + src->m[5] * src->m[5] + src->m[6] * src->m[6]);
+ const float rcpScaleZ = XrRcpSqrt(src->m[8] * src->m[8] + src->m[9] * src->m[9] + src->m[10] * src->m[10]);
+ const float m[9] = {src->m[0] * rcpScaleX, src->m[1] * rcpScaleX, src->m[2] * rcpScaleX,
+ src->m[4] * rcpScaleY, src->m[5] * rcpScaleY, src->m[6] * rcpScaleY,
+ src->m[8] * rcpScaleZ, src->m[9] * rcpScaleZ, src->m[10] * rcpScaleZ};
+ if (m[0 * 3 + 0] + m[1 * 3 + 1] + m[2 * 3 + 2] > 0.0f) {
+ float t = +m[0 * 3 + 0] + m[1 * 3 + 1] + m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->w = s * t;
+ result->z = (m[0 * 3 + 1] - m[1 * 3 + 0]) * s;
+ result->y = (m[2 * 3 + 0] - m[0 * 3 + 2]) * s;
+ result->x = (m[1 * 3 + 2] - m[2 * 3 + 1]) * s;
+ } else if (m[0 * 3 + 0] > m[1 * 3 + 1] && m[0 * 3 + 0] > m[2 * 3 + 2]) {
+ float t = +m[0 * 3 + 0] - m[1 * 3 + 1] - m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->x = s * t;
+ result->y = (m[0 * 3 + 1] + m[1 * 3 + 0]) * s;
+ result->z = (m[2 * 3 + 0] + m[0 * 3 + 2]) * s;
+ result->w = (m[1 * 3 + 2] - m[2 * 3 + 1]) * s;
+ } else if (m[1 * 3 + 1] > m[2 * 3 + 2]) {
+ float t = -m[0 * 3 + 0] + m[1 * 3 + 1] - m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->y = s * t;
+ result->x = (m[0 * 3 + 1] + m[1 * 3 + 0]) * s;
+ result->w = (m[2 * 3 + 0] - m[0 * 3 + 2]) * s;
+ result->z = (m[1 * 3 + 2] + m[2 * 3 + 1]) * s;
+ } else {
+ float t = -m[0 * 3 + 0] - m[1 * 3 + 1] + m[2 * 3 + 2] + 1.0f;
+ float s = XrRcpSqrt(t) * 0.5f;
+ result->z = s * t;
+ result->w = (m[0 * 3 + 1] - m[1 * 3 + 0]) * s;
+ result->x = (m[2 * 3 + 0] + m[0 * 3 + 2]) * s;
+ result->y = (m[1 * 3 + 2] + m[2 * 3 + 1]) * s;
+ }
+}
+
+// Get the scale from a combined translation(rotation(scale(object))) matrix.
+inline static void XrMatrix4x4f_GetScale(XrVector3f* result, const XrMatrix4x4f* src) {
+ assert(XrMatrix4x4f_IsAffine(src, 1e-4f));
+ assert(XrMatrix4x4f_IsOrthogonal(src, 1e-4f));
+
+ result->x = sqrtf(src->m[0] * src->m[0] + src->m[1] * src->m[1] + src->m[2] * src->m[2]);
+ result->y = sqrtf(src->m[4] * src->m[4] + src->m[5] * src->m[5] + src->m[6] * src->m[6]);
+ result->z = sqrtf(src->m[8] * src->m[8] + src->m[9] * src->m[9] + src->m[10] * src->m[10]);
+}
+
+// Transforms a 3D vector.
+inline static void XrMatrix4x4f_TransformVector3f(XrVector3f* result, const XrMatrix4x4f* m, const XrVector3f* v) {
+ const float w = m->m[3] * v->x + m->m[7] * v->y + m->m[11] * v->z + m->m[15];
+ const float rcpW = 1.0f / w;
+ result->x = (m->m[0] * v->x + m->m[4] * v->y + m->m[8] * v->z + m->m[12]) * rcpW;
+ result->y = (m->m[1] * v->x + m->m[5] * v->y + m->m[9] * v->z + m->m[13]) * rcpW;
+ result->z = (m->m[2] * v->x + m->m[6] * v->y + m->m[10] * v->z + m->m[14]) * rcpW;
+}
+
+// Transforms a 4D vector.
+inline static void XrMatrix4x4f_TransformVector4f(XrVector4f* result, const XrMatrix4x4f* m, const XrVector4f* v) {
+ result->x = m->m[0] * v->x + m->m[4] * v->y + m->m[8] * v->z + m->m[12] * v->w;
+ result->y = m->m[1] * v->x + m->m[5] * v->y + m->m[9] * v->z + m->m[13] * v->w;
+ result->z = m->m[2] * v->x + m->m[6] * v->y + m->m[10] * v->z + m->m[14] * v->w;
+ result->w = m->m[3] * v->x + m->m[7] * v->y + m->m[11] * v->z + m->m[15] * v->w;
+}
+
+// Transforms the 'mins' and 'maxs' bounds with the given 'matrix'.
+inline static void XrMatrix4x4f_TransformBounds(XrVector3f* resultMins, XrVector3f* resultMaxs, const XrMatrix4x4f* matrix,
+ const XrVector3f* mins, const XrVector3f* maxs) {
+ assert(XrMatrix4x4f_IsAffine(matrix, 1e-4f));
+
+ const XrVector3f center = {(mins->x + maxs->x) * 0.5f, (mins->y + maxs->y) * 0.5f, (mins->z + maxs->z) * 0.5f};
+ const XrVector3f extents = {maxs->x - center.x, maxs->y - center.y, maxs->z - center.z};
+ const XrVector3f newCenter = {matrix->m[0] * center.x + matrix->m[4] * center.y + matrix->m[8] * center.z + matrix->m[12],
+ matrix->m[1] * center.x + matrix->m[5] * center.y + matrix->m[9] * center.z + matrix->m[13],
+ matrix->m[2] * center.x + matrix->m[6] * center.y + matrix->m[10] * center.z + matrix->m[14]};
+ const XrVector3f newExtents = {
+ fabsf(extents.x * matrix->m[0]) + fabsf(extents.y * matrix->m[4]) + fabsf(extents.z * matrix->m[8]),
+ fabsf(extents.x * matrix->m[1]) + fabsf(extents.y * matrix->m[5]) + fabsf(extents.z * matrix->m[9]),
+ fabsf(extents.x * matrix->m[2]) + fabsf(extents.y * matrix->m[6]) + fabsf(extents.z * matrix->m[10])};
+ XrVector3f_Sub(resultMins, &newCenter, &newExtents);
+ XrVector3f_Add(resultMaxs, &newCenter, &newExtents);
+}
+
+// Returns true if the 'mins' and 'maxs' bounds is completely off to one side of the projection matrix.
+inline static bool XrMatrix4x4f_CullBounds(const XrMatrix4x4f* mvp, const XrVector3f* mins, const XrVector3f* maxs) {
+ if (maxs->x <= mins->x && maxs->y <= mins->y && maxs->z <= mins->z) {
+ return false;
+ }
+
+ XrVector4f c[8];
+ for (int i = 0; i < 8; i++) {
+ const XrVector4f corner = {(i & 1) != 0 ? maxs->x : mins->x, (i & 2) != 0 ? maxs->y : mins->y,
+ (i & 4) != 0 ? maxs->z : mins->z, 1.0f};
+ XrMatrix4x4f_TransformVector4f(&c[i], mvp, &corner);
+ }
+
+ int i;
+ for (i = 0; i < 8; i++) {
+ if (c[i].x > -c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].x < c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+
+ for (i = 0; i < 8; i++) {
+ if (c[i].y > -c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].y < c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].z > -c[i].w) {
+ break;
+ }
+ }
+ if (i == 8) {
+ return true;
+ }
+ for (i = 0; i < 8; i++) {
+ if (c[i].z < c[i].w) {
+ break;
+ }
+ }
+ return i == 8;
+}
+
+#endif // XR_LINEAR_H_
diff --git a/thirdparty/openxr/src/external/jsoncpp/AUTHORS b/thirdparty/openxr/src/external/jsoncpp/AUTHORS
new file mode 100644
index 0000000000..e1fa0fc3ad
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/AUTHORS
@@ -0,0 +1,115 @@
+Baptiste Lepilleur <blep@users.sourceforge.net>
+
+Aaron Jacobs <aaronjjacobs@gmail.com>
+Aaron Jacobs <jacobsa@google.com>
+Adam Boseley <ABoseley@agjunction.com>
+Adam Boseley <adam.boseley@gmail.com>
+Aleksandr Derbenev <13alexac@gmail.com>
+Alexander Gazarov <DrMetallius@users.noreply.github.com>
+Alexander V. Brezgin <abrezgin@appliedtech.ru>
+Alexandr Brezgin <albrezgin@mail.ru>
+Alexey Kruchinin <alexey@mopals.com>
+Anton Indrawan <anton.indrawan@gmail.com>
+Baptiste Jonglez <git@bitsofnetworks.org>
+Baptiste Lepilleur <baptiste.lepilleur@gmail.com>
+Baruch Siach <baruch@tkos.co.il>
+Ben Boeckel <mathstuf@gmail.com>
+Benjamin Knecht <bknecht@logitech.com>
+Bernd Kuhls <bernd.kuhls@t-online.de>
+Billy Donahue <billydonahue@google.com>
+Braden McDorman <bmcdorman@gmail.com>
+Brandon Myers <bmyers1788@gmail.com>
+Brendan Drew <brendan.drew@daqri.com>
+chason <cxchao802@gmail.com>
+chenguoping <chenguopingdota@163.com>
+Chris Gilling <cgilling@iparadigms.com>
+Christopher Dawes <christopher.dawes.1981@googlemail.com>
+Christopher Dunn <cdunn2001@gmail.com>
+Chuck Atkins <chuck.atkins@kitware.com>
+Cody P Schafer <dev@codyps.com>
+Connor Manning <connor@hobu.co>
+Cory Quammen <cory.quammen@kitware.com>
+CristoÌvão B da Cruz e Silva <CrisXed@gmail.com>
+Daniel Krügler <daniel.kruegler@gmail.com>
+Dani-Hub <daniel.kruegler@googlemail.com>
+Dan Liu <gzliudan>
+datadiode <datadiode@users.noreply.github.com>
+datadiode <jochen.neubeck@vodafone.de>
+David Seifert <soap@gentoo.org>
+David West <david-west@idexx.com>
+dawesc <chris.dawes@eftlab.co.uk>
+Devin Jeanpierre <jeanpierreda@google.com>
+Dmitry Marakasov <amdmi3@amdmi3.ru>
+dominicpezzuto <dom@dompezzuto.com>
+Don Milham <dmilham@gmail.com>
+drgler <daniel.kruegler@gmail.com>
+ds283 <D.Seery@sussex.ac.uk>
+Egor Tensin <Egor.Tensin@gmail.com>
+eightnoteight <mr.eightnoteight@gmail.com>
+Evince <baneyue@gmail.com>
+filipjs <filipjs@users.noreply.github.com>
+findblar <ft@finbarr.ca>
+Florian Meier <florian.meier@koalo.de>
+Gaëtan Lehmann <gaetan.lehmann@gmail.com>
+Gaurav <g.gupta@samsung.com>
+Gergely Nagy <ngg@ngg.hu>
+Gida Pataki <gida.pataki@prezi.com>
+I3ck <buckmartin@buckmartin.de>
+Iñaki Baz Castillo <ibc@aliax.net>
+Jacco <jacco@geul.net>
+Jean-Christophe Fillion-Robin <jchris.fillionr@kitware.com>
+Jonas Platte <mail@jonasplatte.de>
+Jordan Bayles <bayles.jordan@gmail.com>
+Jörg Krause <joerg.krause@embedded.rocks>
+Keith Lea <keith@whamcitylights.com>
+Kevin Grant <kbradleygrant@gmail.com>
+Kirill V. Lyadvinsky <jia3ep@gmail.com>
+Kirill V. Lyadvinsky <mail@codeatcpp.com>
+Kobi Gurkan <kobigurk@gmail.com>
+Magnus Bjerke Vik <mbvett@gmail.com>
+Malay Shah <malays@users.sourceforge.net>
+Mara Kim <hacker.root@gmail.com>
+Marek Kotewicz <marek.kotewicz@gmail.com>
+Mark Lakata <mark@lakata.org>
+Mark Zeren <mzeren@vmware.com>
+Martin Buck <buckmartin@buckmartin.de>
+Martyn Gigg <martyn.gigg@gmail.com>
+Mattes D <github@xoft.cz>
+Matthias Loy <matthias.loy@hbm.com>
+Merlyn Morgan-Graham <kavika@gmail.com>
+Michael Shields <mshields@google.com>
+Michał Górny <mgorny@gentoo.org>
+Mike Naberezny <mike@naberezny.com>
+mloy <matthias.loy@googlemail.com>
+Motti <lanzkron@gmail.com>
+nnkur <nnkur@mail.ru>
+Omkar Wagh <owagh@owaghlinux.ny.tower-research.com>
+paulo <paulobrizolara@users.noreply.github.com>
+pavel.pimenov <pavel.pimenov@gmail.com>
+Paweł Bylica <chfast@gmail.com>
+Péricles Lopes Machado <pericles.raskolnikoff@gmail.com>
+Peter Spiess-Knafl <psk@autistici.org>
+pffang <pffang@vip.qq.com>
+Rémi Verschelde <remi@verschelde.fr>
+renu555 <renu.tyagi@samsung.com>
+Robert Dailey <rcdailey@gmail.com>
+Sam Clegg <sbc@chromium.org>
+selaselah <selah@outlook.com>
+Sergiy80 <sil2004@gmail.com>
+sergzub <sergzub@gmail.com>
+Stefan Schweter <stefan@schweter.it>
+Stefano Fiorentino <stefano.fiore84@gmail.com>
+Steffen Kieß <Steffen.Kiess@ipvs.uni-stuttgart.de>
+Steven Hahn <hahnse@ornl.gov>
+Stuart Eichert <stuart@fivemicro.com>
+SuperManitu <supermanitu@gmail.com>
+Techwolf <dring@g33kworld.net>
+Tengiz Sharafiev <btolfa+github@gmail.com>
+Tomasz Maciejewski <tmaciejewsk@gmail.com>
+Vicente Olivert Riera <Vincent.Riera@imgtec.com>
+xiaoyur347 <xiaoyur347@gmail.com>
+ycqiu <429148848@qq.com>
+yiqiju <fred_ju@selinc.com>
+Yu Xiaolei <dreifachstein@gmail.com>
+
+Google Inc.
diff --git a/thirdparty/openxr/src/external/jsoncpp/LICENSE b/thirdparty/openxr/src/external/jsoncpp/LICENSE
new file mode 100644
index 0000000000..c41a1d1c77
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/LICENSE
@@ -0,0 +1,55 @@
+The JsonCpp library's source code, including accompanying documentation,
+tests and demonstration applications, are licensed under the following
+conditions...
+
+Baptiste Lepilleur and The JsonCpp Authors explicitly disclaim copyright in all
+jurisdictions which recognize such a disclaimer. In such jurisdictions,
+this software is released into the Public Domain.
+
+In jurisdictions which do not recognize Public Domain property (e.g. Germany as of
+2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur and
+The JsonCpp Authors, and is released under the terms of the MIT License (see below).
+
+In jurisdictions which recognize Public Domain property, the user of this
+software may choose to accept it either as 1) Public Domain, 2) under the
+conditions of the MIT License (see below), or 3) under the terms of dual
+Public Domain/MIT License conditions described here, as they choose.
+
+The MIT License is about as close to Public Domain as a license can get, and is
+described in clear, concise terms at:
+
+ http://en.wikipedia.org/wiki/MIT_License
+
+The full text of the MIT License follows:
+
+========================================================================
+Copyright (c) 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use, copy,
+modify, merge, publish, distribute, sublicense, and/or sell copies
+of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS
+BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
+ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+========================================================================
+(END LICENSE TEXT)
+
+The MIT license is compatible with both the GPL and commercial
+software, affording one all of the rights of Public Domain with the
+minor nuisance of being required to keep the above copyright notice
+and license text in the source code. Note also that by accepting the
+Public Domain "license" you can re-license your copy using whatever
+license you like.
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h b/thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h
new file mode 100644
index 0000000000..95ef8a5ec4
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/allocator.h
@@ -0,0 +1,88 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_ALLOCATOR_H_INCLUDED
+#define JSON_ALLOCATOR_H_INCLUDED
+
+#include <cstring>
+#include <memory>
+
+#pragma pack(push, 8)
+
+namespace Json {
+template <typename T> class SecureAllocator {
+public:
+ // Type definitions
+ using value_type = T;
+ using pointer = T*;
+ using const_pointer = const T*;
+ using reference = T&;
+ using const_reference = const T&;
+ using size_type = std::size_t;
+ using difference_type = std::ptrdiff_t;
+
+ /**
+ * Allocate memory for N items using the standard allocator.
+ */
+ pointer allocate(size_type n) {
+ // allocate using "global operator new"
+ return static_cast<pointer>(::operator new(n * sizeof(T)));
+ }
+
+ /**
+ * Release memory which was allocated for N items at pointer P.
+ *
+ * The memory block is filled with zeroes before being released.
+ */
+ void deallocate(pointer p, size_type n) {
+ // memset_s is used because memset may be optimized away by the compiler
+ memset_s(p, n * sizeof(T), 0, n * sizeof(T));
+ // free using "global operator delete"
+ ::operator delete(p);
+ }
+
+ /**
+ * Construct an item in-place at pointer P.
+ */
+ template <typename... Args> void construct(pointer p, Args&&... args) {
+ // construct using "placement new" and "perfect forwarding"
+ ::new (static_cast<void*>(p)) T(std::forward<Args>(args)...);
+ }
+
+ size_type max_size() const { return size_t(-1) / sizeof(T); }
+
+ pointer address(reference x) const { return std::addressof(x); }
+
+ const_pointer address(const_reference x) const { return std::addressof(x); }
+
+ /**
+ * Destroy an item in-place at pointer P.
+ */
+ void destroy(pointer p) {
+ // destroy using "explicit destructor"
+ p->~T();
+ }
+
+ // Boilerplate
+ SecureAllocator() {}
+ template <typename U> SecureAllocator(const SecureAllocator<U>&) {}
+ template <typename U> struct rebind { using other = SecureAllocator<U>; };
+};
+
+template <typename T, typename U>
+bool operator==(const SecureAllocator<T>&, const SecureAllocator<U>&) {
+ return true;
+}
+
+template <typename T, typename U>
+bool operator!=(const SecureAllocator<T>&, const SecureAllocator<U>&) {
+ return false;
+}
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#endif // JSON_ALLOCATOR_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h b/thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h
new file mode 100644
index 0000000000..666fa7f542
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/assertions.h
@@ -0,0 +1,61 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_ASSERTIONS_H_INCLUDED
+#define JSON_ASSERTIONS_H_INCLUDED
+
+#include <cstdlib>
+#include <sstream>
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+/** It should not be possible for a maliciously designed file to
+ * cause an abort() or seg-fault, so these macros are used only
+ * for pre-condition violations and internal logic errors.
+ */
+#if JSON_USE_EXCEPTION
+
+// @todo <= add detail about condition in exception
+#define JSON_ASSERT(condition) \
+ do { \
+ if (!(condition)) { \
+ Json::throwLogicError("assert json failed"); \
+ } \
+ } while (0)
+
+#define JSON_FAIL_MESSAGE(message) \
+ do { \
+ OStringStream oss; \
+ oss << message; \
+ Json::throwLogicError(oss.str()); \
+ abort(); \
+ } while (0)
+
+#else // JSON_USE_EXCEPTION
+
+#define JSON_ASSERT(condition) assert(condition)
+
+// The call to assert() will show the failure message in debug builds. In
+// release builds we abort, for a core-dump or debugger.
+#define JSON_FAIL_MESSAGE(message) \
+ { \
+ OStringStream oss; \
+ oss << message; \
+ assert(false && oss.str().c_str()); \
+ abort(); \
+ }
+
+#endif
+
+#define JSON_ASSERT_MESSAGE(condition, message) \
+ do { \
+ if (!(condition)) { \
+ JSON_FAIL_MESSAGE(message); \
+ } \
+ } while (0)
+
+#endif // JSON_ASSERTIONS_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/config.h b/thirdparty/openxr/src/external/jsoncpp/include/json/config.h
new file mode 100644
index 0000000000..6359273a22
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/config.h
@@ -0,0 +1,150 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_CONFIG_H_INCLUDED
+#define JSON_CONFIG_H_INCLUDED
+#include <cstddef>
+#include <cstdint>
+#include <istream>
+#include <memory>
+#include <ostream>
+#include <sstream>
+#include <string>
+#include <type_traits>
+
+// If non-zero, the library uses exceptions to report bad input instead of C
+// assertion macros. The default is to use exceptions.
+#ifndef JSON_USE_EXCEPTION
+#define JSON_USE_EXCEPTION 1
+#endif
+
+// Temporary, tracked for removal with issue #982.
+#ifndef JSON_USE_NULLREF
+#define JSON_USE_NULLREF 1
+#endif
+
+/// If defined, indicates that the source file is amalgamated
+/// to prevent private header inclusion.
+/// Remarks: it is automatically defined in the generated amalgamated header.
+// #define JSON_IS_AMALGAMATION
+
+// Export macros for DLL visibility
+#if defined(JSON_DLL_BUILD)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllexport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#elif defined(__GNUC__) || defined(__clang__)
+#define JSON_API __attribute__((visibility("default")))
+#endif // if defined(_MSC_VER)
+
+#elif defined(JSON_DLL)
+#if defined(_MSC_VER) || defined(__MINGW32__)
+#define JSON_API __declspec(dllimport)
+#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING
+#endif // if defined(_MSC_VER)
+#endif // ifdef JSON_DLL_BUILD
+
+#if !defined(JSON_API)
+#define JSON_API
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1800
+#error \
+ "ERROR: Visual Studio 12 (2013) with _MSC_VER=1800 is the oldest supported compiler with sufficient C++11 capabilities"
+#endif
+
+#if defined(_MSC_VER) && _MSC_VER < 1900
+// As recommended at
+// https://stackoverflow.com/questions/2915672/snprintf-and-visual-studio-2010
+extern JSON_API int msvc_pre1900_c99_snprintf(char* outBuf, size_t size,
+ const char* format, ...);
+#define jsoncpp_snprintf msvc_pre1900_c99_snprintf
+#else
+#define jsoncpp_snprintf std::snprintf
+#endif
+
+// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for
+// integer
+// Storages, and 64 bits integer support is disabled.
+// #define JSON_NO_INT64 1
+
+// JSONCPP_OVERRIDE is maintained for backwards compatibility of external tools.
+// C++11 should be used directly in JSONCPP.
+#define JSONCPP_OVERRIDE override
+
+#ifdef __clang__
+#if __has_extension(attribute_deprecated_with_message)
+#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
+#endif
+#elif defined(__GNUC__) // not clang (gcc comes later since clang emulates gcc)
+#if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5))
+#define JSONCPP_DEPRECATED(message) __attribute__((deprecated(message)))
+#elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1))
+#define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__))
+#endif // GNUC version
+#elif defined(_MSC_VER) // MSVC (after clang because clang on Windows emulates
+ // MSVC)
+#define JSONCPP_DEPRECATED(message) __declspec(deprecated(message))
+#endif // __clang__ || __GNUC__ || _MSC_VER
+
+#if !defined(JSONCPP_DEPRECATED)
+#define JSONCPP_DEPRECATED(message)
+#endif // if !defined(JSONCPP_DEPRECATED)
+
+#if defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 6))
+#define JSON_USE_INT64_DOUBLE_CONVERSION 1
+#endif
+
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "allocator.h"
+#include "version.h"
+
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+using Int = int;
+using UInt = unsigned int;
+#if defined(JSON_NO_INT64)
+using LargestInt = int;
+using LargestUInt = unsigned int;
+#undef JSON_HAS_INT64
+#else // if defined(JSON_NO_INT64)
+// For Microsoft Visual use specific types as long long is not supported
+#if defined(_MSC_VER) // Microsoft Visual Studio
+using Int64 = __int64;
+using UInt64 = unsigned __int64;
+#else // if defined(_MSC_VER) // Other platforms, use long long
+using Int64 = int64_t;
+using UInt64 = uint64_t;
+#endif // if defined(_MSC_VER)
+using LargestInt = Int64;
+using LargestUInt = UInt64;
+#define JSON_HAS_INT64
+#endif // if defined(JSON_NO_INT64)
+
+template <typename T>
+using Allocator =
+ typename std::conditional<JSONCPP_USING_SECURE_MEMORY, SecureAllocator<T>,
+ std::allocator<T>>::type;
+using String = std::basic_string<char, std::char_traits<char>, Allocator<char>>;
+using IStringStream =
+ std::basic_istringstream<String::value_type, String::traits_type,
+ String::allocator_type>;
+using OStringStream =
+ std::basic_ostringstream<String::value_type, String::traits_type,
+ String::allocator_type>;
+using IStream = std::istream;
+using OStream = std::ostream;
+} // namespace Json
+
+// Legacy names (formerly macros).
+using JSONCPP_STRING = Json::String;
+using JSONCPP_ISTRINGSTREAM = Json::IStringStream;
+using JSONCPP_OSTRINGSTREAM = Json::OStringStream;
+using JSONCPP_ISTREAM = Json::IStream;
+using JSONCPP_OSTREAM = Json::OStream;
+
+#endif // JSON_CONFIG_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h b/thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h
new file mode 100644
index 0000000000..affe33a7f9
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/forwards.h
@@ -0,0 +1,43 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FORWARDS_H_INCLUDED
+#define JSON_FORWARDS_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "config.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+// writer.h
+class StreamWriter;
+class StreamWriterBuilder;
+class Writer;
+class FastWriter;
+class StyledWriter;
+class StyledStreamWriter;
+
+// reader.h
+class Reader;
+class CharReader;
+class CharReaderBuilder;
+
+// json_features.h
+class Features;
+
+// value.h
+using ArrayIndex = unsigned int;
+class StaticString;
+class Path;
+class PathArgument;
+class Value;
+class ValueIteratorBase;
+class ValueIterator;
+class ValueConstIterator;
+
+} // namespace Json
+
+#endif // JSON_FORWARDS_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/json.h b/thirdparty/openxr/src/external/jsoncpp/include/json/json.h
new file mode 100644
index 0000000000..5c776a1609
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/json.h
@@ -0,0 +1,15 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_JSON_H_INCLUDED
+#define JSON_JSON_H_INCLUDED
+
+#include "config.h"
+#include "json_features.h"
+#include "reader.h"
+#include "value.h"
+#include "writer.h"
+
+#endif // JSON_JSON_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h b/thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h
new file mode 100644
index 0000000000..7c7e9f5de1
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/json_features.h
@@ -0,0 +1,61 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_FEATURES_H_INCLUDED
+#define JSON_FEATURES_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+/** \brief Configuration passed to reader and writer.
+ * This configuration object can be used to force the Reader or Writer
+ * to behave in a standard conforming way.
+ */
+class JSON_API Features {
+public:
+ /** \brief A configuration that allows all features and assumes all strings
+ * are UTF-8.
+ * - C & C++ comments are allowed
+ * - Root object can be any JSON value
+ * - Assumes Value strings are encoded in UTF-8
+ */
+ static Features all();
+
+ /** \brief A configuration that is strictly compatible with the JSON
+ * specification.
+ * - Comments are forbidden.
+ * - Root object must be either an array or an object value.
+ * - Assumes Value strings are encoded in UTF-8
+ */
+ static Features strictMode();
+
+ /** \brief Initialize the configuration like JsonConfig::allFeatures;
+ */
+ Features();
+
+ /// \c true if comments are allowed. Default: \c true.
+ bool allowComments_{true};
+
+ /// \c true if root must be either an array or an object value. Default: \c
+ /// false.
+ bool strictRoot_{false};
+
+ /// \c true if dropped null placeholders are allowed. Default: \c false.
+ bool allowDroppedNullPlaceholders_{false};
+
+ /// \c true if numeric object key are allowed. Default: \c false.
+ bool allowNumericKeys_{false};
+};
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#endif // JSON_FEATURES_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/reader.h b/thirdparty/openxr/src/external/jsoncpp/include/json/reader.h
new file mode 100644
index 0000000000..be0d7676ab
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/reader.h
@@ -0,0 +1,405 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_READER_H_INCLUDED
+#define JSON_READER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_features.h"
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <deque>
+#include <iosfwd>
+#include <istream>
+#include <stack>
+#include <string>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a
+ * Value.
+ *
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+
+class JSON_API Reader {
+public:
+ using Char = char;
+ using Location = const Char*;
+
+ /** \brief An error tagged with where in the JSON text it was encountered.
+ *
+ * The offsets give the [start, limit) range of bytes within the text. Note
+ * that this is bytes, not codepoints.
+ */
+ struct StructuredError {
+ ptrdiff_t offset_start;
+ ptrdiff_t offset_limit;
+ String message;
+ };
+
+ /** \brief Constructs a Reader allowing all features for parsing.
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+ Reader();
+
+ /** \brief Constructs a Reader allowing the specified feature set for parsing.
+ * \deprecated Use CharReader and CharReaderBuilder.
+ */
+ Reader(const Features& features);
+
+ /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+ * document.
+ *
+ * \param document UTF-8 encoded string containing the document
+ * to read.
+ * \param[out] root Contains the root value of the document if it
+ * was successfully parsed.
+ * \param collectComments \c true to collect comment and allow writing
+ * them back during serialization, \c false to
+ * discard comments. This parameter is ignored
+ * if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ bool parse(const std::string& document, Value& root,
+ bool collectComments = true);
+
+ /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+ * document.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8 encoded
+ * string of the document to read.
+ * \param endDoc Pointer on the end of the UTF-8 encoded string
+ * of the document to read. Must be >= beginDoc.
+ * \param[out] root Contains the root value of the document if it
+ * was successfully parsed.
+ * \param collectComments \c true to collect comment and allow writing
+ * them back during serialization, \c false to
+ * discard comments. This parameter is ignored
+ * if Features::allowComments_ is \c false.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ bool parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments = true);
+
+ /// \brief Parse from input stream.
+ /// \see Json::operator>>(std::istream&, Json::Value&).
+ bool parse(IStream& is, Value& root, bool collectComments = true);
+
+ /** \brief Returns a user friendly string that list errors in the parsed
+ * document.
+ *
+ * \return Formatted error message with the list of errors with their
+ * location in the parsed document. An empty string is returned if no error
+ * occurred during parsing.
+ * \deprecated Use getFormattedErrorMessages() instead (typo fix).
+ */
+ JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.")
+ String getFormatedErrorMessages() const;
+
+ /** \brief Returns a user friendly string that list errors in the parsed
+ * document.
+ *
+ * \return Formatted error message with the list of errors with their
+ * location in the parsed document. An empty string is returned if no error
+ * occurred during parsing.
+ */
+ String getFormattedErrorMessages() const;
+
+ /** \brief Returns a vector of structured errors encountered while parsing.
+ *
+ * \return A (possibly empty) vector of StructuredError objects. Currently
+ * only one error can be returned, but the caller should tolerate multiple
+ * errors. This can occur if the parser recovers from a non-fatal parse
+ * error and then encounters additional errors.
+ */
+ std::vector<StructuredError> getStructuredErrors() const;
+
+ /** \brief Add a semantic error message.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \return \c true if the error was successfully added, \c false if the Value
+ * offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message);
+
+ /** \brief Add a semantic error message with extra context.
+ *
+ * \param value JSON Value location associated with the error
+ * \param message The error message.
+ * \param extra Additional JSON Value location to contextualize the error
+ * \return \c true if the error was successfully added, \c false if either
+ * Value offset exceeds the document size.
+ */
+ bool pushError(const Value& value, const String& message, const Value& extra);
+
+ /** \brief Return whether there are any errors.
+ *
+ * \return \c true if there are no errors to report \c false if errors have
+ * occurred.
+ */
+ bool good() const;
+
+private:
+ enum TokenType {
+ tokenEndOfStream = 0,
+ tokenObjectBegin,
+ tokenObjectEnd,
+ tokenArrayBegin,
+ tokenArrayEnd,
+ tokenString,
+ tokenNumber,
+ tokenTrue,
+ tokenFalse,
+ tokenNull,
+ tokenArraySeparator,
+ tokenMemberSeparator,
+ tokenComment,
+ tokenError
+ };
+
+ class Token {
+ public:
+ TokenType type_;
+ Location start_;
+ Location end_;
+ };
+
+ class ErrorInfo {
+ public:
+ Token token_;
+ String message_;
+ Location extra_;
+ };
+
+ using Errors = std::deque<ErrorInfo>;
+
+ bool readToken(Token& token);
+ void skipSpaces();
+ bool match(const Char* pattern, int patternLength);
+ bool readComment();
+ bool readCStyleComment();
+ bool readCppStyleComment();
+ bool readString();
+ void readNumber();
+ bool readValue();
+ bool readObject(Token& token);
+ bool readArray(Token& token);
+ bool decodeNumber(Token& token);
+ bool decodeNumber(Token& token, Value& decoded);
+ bool decodeString(Token& token);
+ bool decodeString(Token& token, String& decoded);
+ bool decodeDouble(Token& token);
+ bool decodeDouble(Token& token, Value& decoded);
+ bool decodeUnicodeCodePoint(Token& token, Location& current, Location end,
+ unsigned int& unicode);
+ bool decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end, unsigned int& unicode);
+ bool addError(const String& message, Token& token, Location extra = nullptr);
+ bool recoverFromError(TokenType skipUntilToken);
+ bool addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken);
+ void skipUntilSpace();
+ Value& currentValue();
+ Char getNextChar();
+ void getLocationLineAndColumn(Location location, int& line,
+ int& column) const;
+ String getLocationLineAndColumn(Location location) const;
+ void addComment(Location begin, Location end, CommentPlacement placement);
+ void skipCommentTokens(Token& token);
+
+ static bool containsNewLine(Location begin, Location end);
+ static String normalizeEOL(Location begin, Location end);
+
+ using Nodes = std::stack<Value*>;
+ Nodes nodes_;
+ Errors errors_;
+ String document_;
+ Location begin_{};
+ Location end_{};
+ Location current_{};
+ Location lastValueEnd_{};
+ Value* lastValue_{};
+ String commentsBefore_;
+ Features features_;
+ bool collectComments_{};
+}; // Reader
+
+/** Interface for reading JSON from a char array.
+ */
+class JSON_API CharReader {
+public:
+ virtual ~CharReader() = default;
+ /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a>
+ * document. The document must be a UTF-8 encoded string containing the
+ * document to read.
+ *
+ * \param beginDoc Pointer on the beginning of the UTF-8 encoded string
+ * of the document to read.
+ * \param endDoc Pointer on the end of the UTF-8 encoded string of the
+ * document to read. Must be >= beginDoc.
+ * \param[out] root Contains the root value of the document if it was
+ * successfully parsed.
+ * \param[out] errs Formatted error messages (if not NULL) a user
+ * friendly string that lists errors in the parsed
+ * document.
+ * \return \c true if the document was successfully parsed, \c false if an
+ * error occurred.
+ */
+ virtual bool parse(char const* beginDoc, char const* endDoc, Value* root,
+ String* errs) = 0;
+
+ class JSON_API Factory {
+ public:
+ virtual ~Factory() = default;
+ /** \brief Allocate a CharReader via operator new().
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ virtual CharReader* newCharReader() const = 0;
+ }; // Factory
+}; // CharReader
+
+/** \brief Build a CharReader implementation.
+ *
+ * Usage:
+ * \code
+ * using namespace Json;
+ * CharReaderBuilder builder;
+ * builder["collectComments"] = false;
+ * Value value;
+ * String errs;
+ * bool ok = parseFromStream(builder, std::cin, &value, &errs);
+ * \endcode
+ */
+class JSON_API CharReaderBuilder : public CharReader::Factory {
+public:
+ // Note: We use a Json::Value so that we can add data-members to this class
+ // without a major version bump.
+ /** Configuration of this builder.
+ * These are case-sensitive.
+ * Available settings (case-sensitive):
+ * - `"collectComments": false or true`
+ * - true to collect comment and allow writing them back during
+ * serialization, false to discard comments. This parameter is ignored
+ * if allowComments is false.
+ * - `"allowComments": false or true`
+ * - true if comments are allowed.
+ * - `"allowTrailingCommas": false or true`
+ * - true if trailing commas in objects and arrays are allowed.
+ * - `"strictRoot": false or true`
+ * - true if root must be either an array or an object value
+ * - `"allowDroppedNullPlaceholders": false or true`
+ * - true if dropped null placeholders are allowed. (See
+ * StreamWriterBuilder.)
+ * - `"allowNumericKeys": false or true`
+ * - true if numeric object keys are allowed.
+ * - `"allowSingleQuotes": false or true`
+ * - true if '' are allowed for strings (both keys and values)
+ * - `"stackLimit": integer`
+ * - Exceeding stackLimit (recursive depth of `readValue()`) will cause an
+ * exception.
+ * - This is a security issue (seg-faults caused by deeply nested JSON), so
+ * the default is low.
+ * - `"failIfExtra": false or true`
+ * - If true, `parse()` returns false when extra non-whitespace trails the
+ * JSON value in the input string.
+ * - `"rejectDupKeys": false or true`
+ * - If true, `parse()` returns false when a key is duplicated within an
+ * object.
+ * - `"allowSpecialFloats": false or true`
+ * - If true, special float values (NaNs and infinities) are allowed and
+ * their values are lossfree restorable.
+ * - `"skipBom": false or true`
+ * - If true, if the input starts with the Unicode byte order mark (BOM),
+ * it is skipped.
+ *
+ * You can examine 'settings_` yourself to see the defaults. You can also
+ * write and read them just like any JSON Value.
+ * \sa setDefaults()
+ */
+ Json::Value settings_;
+
+ CharReaderBuilder();
+ ~CharReaderBuilder() override;
+
+ CharReader* newCharReader() const override;
+
+ /** \return true if 'settings' are legal and consistent;
+ * otherwise, indicate bad settings via 'invalid'.
+ */
+ bool validate(Json::Value* invalid) const;
+
+ /** A simple way to update a specific setting.
+ */
+ Value& operator[](const String& key);
+
+ /** Called by ctor, but you can use this to reset settings_.
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults
+ */
+ static void setDefaults(Json::Value* settings);
+ /** Same as old Features::strictMode().
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode
+ */
+ static void strictMode(Json::Value* settings);
+};
+
+/** Consume entire stream and use its begin/end.
+ * Someday we might have a real StreamReader, but for now this
+ * is convenient.
+ */
+bool JSON_API parseFromStream(CharReader::Factory const&, IStream&, Value* root,
+ String* errs);
+
+/** \brief Read from 'sin' into 'root'.
+ *
+ * Always keep comments from the input JSON.
+ *
+ * This can be used to read a file into a particular sub-object.
+ * For example:
+ * \code
+ * Json::Value root;
+ * cin >> root["dir"]["file"];
+ * cout << root;
+ * \endcode
+ * Result:
+ * \verbatim
+ * {
+ * "dir": {
+ * "file": {
+ * // The input stream JSON would be nested here.
+ * }
+ * }
+ * }
+ * \endverbatim
+ * \throw std::exception on parse error.
+ * \see Json::operator<<()
+ */
+JSON_API IStream& operator>>(IStream&, Value&);
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_READER_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/value.h b/thirdparty/openxr/src/external/jsoncpp/include/json/value.h
new file mode 100644
index 0000000000..0edeb050ca
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/value.h
@@ -0,0 +1,935 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_H_INCLUDED
+#define JSON_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "forwards.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+// Conditional NORETURN attribute on the throw functions would:
+// a) suppress false positives from static code analysis
+// b) possibly improve optimization opportunities.
+#if !defined(JSONCPP_NORETURN)
+#if defined(_MSC_VER) && _MSC_VER == 1800
+#define JSONCPP_NORETURN __declspec(noreturn)
+#else
+#define JSONCPP_NORETURN [[noreturn]]
+#endif
+#endif
+
+// Support for '= delete' with template declarations was a late addition
+// to the c++11 standard and is rejected by clang 3.8 and Apple clang 8.2
+// even though these declare themselves to be c++11 compilers.
+#if !defined(JSONCPP_TEMPLATE_DELETE)
+#if defined(__clang__) && defined(__apple_build_version__)
+#if __apple_build_version__ <= 8000042
+#define JSONCPP_TEMPLATE_DELETE
+#endif
+#elif defined(__clang__)
+#if __clang_major__ == 3 && __clang_minor__ <= 8
+#define JSONCPP_TEMPLATE_DELETE
+#endif
+#endif
+#if !defined(JSONCPP_TEMPLATE_DELETE)
+#define JSONCPP_TEMPLATE_DELETE = delete
+#endif
+#endif
+
+#include <array>
+#include <exception>
+#include <map>
+#include <memory>
+#include <string>
+#include <vector>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(push)
+#pragma warning(disable : 4251 4275)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+/** \brief JSON (JavaScript Object Notation).
+ */
+namespace Json {
+
+#if JSON_USE_EXCEPTION
+/** Base class for all exceptions we throw.
+ *
+ * We use nothing but these internally. Of course, STL can throw others.
+ */
+class JSON_API Exception : public std::exception {
+public:
+ Exception(String msg);
+ ~Exception() noexcept override;
+ char const* what() const noexcept override;
+
+protected:
+ String msg_;
+};
+
+/** Exceptions which the user cannot easily avoid.
+ *
+ * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input
+ *
+ * \remark derived from Json::Exception
+ */
+class JSON_API RuntimeError : public Exception {
+public:
+ RuntimeError(String const& msg);
+};
+
+/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros.
+ *
+ * These are precondition-violations (user bugs) and internal errors (our bugs).
+ *
+ * \remark derived from Json::Exception
+ */
+class JSON_API LogicError : public Exception {
+public:
+ LogicError(String const& msg);
+};
+#endif
+
+/// used internally
+JSONCPP_NORETURN void throwRuntimeError(String const& msg);
+/// used internally
+JSONCPP_NORETURN void throwLogicError(String const& msg);
+
+/** \brief Type of the value held by a Value object.
+ */
+enum ValueType {
+ nullValue = 0, ///< 'null' value
+ intValue, ///< signed integer value
+ uintValue, ///< unsigned integer value
+ realValue, ///< double value
+ stringValue, ///< UTF-8 string value
+ booleanValue, ///< bool value
+ arrayValue, ///< array value (ordered list)
+ objectValue ///< object value (collection of name/value pairs).
+};
+
+enum CommentPlacement {
+ commentBefore = 0, ///< a comment placed on the line before a value
+ commentAfterOnSameLine, ///< a comment just after a value on the same line
+ commentAfter, ///< a comment on the line after a value (only make sense for
+ /// root value)
+ numberOfCommentPlacement
+};
+
+/** \brief Type of precision for formatting of real values.
+ */
+enum PrecisionType {
+ significantDigits = 0, ///< we set max number of significant digits in string
+ decimalPlaces ///< we set max number of digits after "." in string
+};
+
+/** \brief Lightweight wrapper to tag static string.
+ *
+ * Value constructor and objectValue member assignment takes advantage of the
+ * StaticString and avoid the cost of string duplication when storing the
+ * string or the member name.
+ *
+ * Example of usage:
+ * \code
+ * Json::Value aValue( StaticString("some text") );
+ * Json::Value object;
+ * static const StaticString code("code");
+ * object[code] = 1234;
+ * \endcode
+ */
+class JSON_API StaticString {
+public:
+ explicit StaticString(const char* czstring) : c_str_(czstring) {}
+
+ operator const char*() const { return c_str_; }
+
+ const char* c_str() const { return c_str_; }
+
+private:
+ const char* c_str_;
+};
+
+/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value.
+ *
+ * This class is a discriminated union wrapper that can represents a:
+ * - signed integer [range: Value::minInt - Value::maxInt]
+ * - unsigned integer (range: 0 - Value::maxUInt)
+ * - double
+ * - UTF-8 string
+ * - boolean
+ * - 'null'
+ * - an ordered list of Value
+ * - collection of name/value pairs (javascript object)
+ *
+ * The type of the held value is represented by a #ValueType and
+ * can be obtained using type().
+ *
+ * Values of an #objectValue or #arrayValue can be accessed using operator[]()
+ * methods.
+ * Non-const methods will automatically create the a #nullValue element
+ * if it does not exist.
+ * The sequence of an #arrayValue will be automatically resized and initialized
+ * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue.
+ *
+ * The get() methods can be used to obtain default value in the case the
+ * required element does not exist.
+ *
+ * It is possible to iterate over the list of member keys of an object using
+ * the getMemberNames() method.
+ *
+ * \note #Value string-length fit in size_t, but keys must be < 2^30.
+ * (The reason is an implementation detail.) A #CharReader will raise an
+ * exception if a bound is exceeded to avoid security holes in your app,
+ * but the Value API does *not* check bounds. That is the responsibility
+ * of the caller.
+ */
+class JSON_API Value {
+ friend class ValueIteratorBase;
+
+public:
+ using Members = std::vector<String>;
+ using iterator = ValueIterator;
+ using const_iterator = ValueConstIterator;
+ using UInt = Json::UInt;
+ using Int = Json::Int;
+#if defined(JSON_HAS_INT64)
+ using UInt64 = Json::UInt64;
+ using Int64 = Json::Int64;
+#endif // defined(JSON_HAS_INT64)
+ using LargestInt = Json::LargestInt;
+ using LargestUInt = Json::LargestUInt;
+ using ArrayIndex = Json::ArrayIndex;
+
+ // Required for boost integration, e. g. BOOST_TEST
+ using value_type = std::string;
+
+#if JSON_USE_NULLREF
+ // Binary compatibility kludges, do not use.
+ static const Value& null;
+ static const Value& nullRef;
+#endif
+
+ // null and nullRef are deprecated, use this instead.
+ static Value const& nullSingleton();
+
+ /// Minimum signed integer value that can be stored in a Json::Value.
+ static constexpr LargestInt minLargestInt =
+ LargestInt(~(LargestUInt(-1) / 2));
+ /// Maximum signed integer value that can be stored in a Json::Value.
+ static constexpr LargestInt maxLargestInt = LargestInt(LargestUInt(-1) / 2);
+ /// Maximum unsigned integer value that can be stored in a Json::Value.
+ static constexpr LargestUInt maxLargestUInt = LargestUInt(-1);
+
+ /// Minimum signed int value that can be stored in a Json::Value.
+ static constexpr Int minInt = Int(~(UInt(-1) / 2));
+ /// Maximum signed int value that can be stored in a Json::Value.
+ static constexpr Int maxInt = Int(UInt(-1) / 2);
+ /// Maximum unsigned int value that can be stored in a Json::Value.
+ static constexpr UInt maxUInt = UInt(-1);
+
+#if defined(JSON_HAS_INT64)
+ /// Minimum signed 64 bits int value that can be stored in a Json::Value.
+ static constexpr Int64 minInt64 = Int64(~(UInt64(-1) / 2));
+ /// Maximum signed 64 bits int value that can be stored in a Json::Value.
+ static constexpr Int64 maxInt64 = Int64(UInt64(-1) / 2);
+ /// Maximum unsigned 64 bits int value that can be stored in a Json::Value.
+ static constexpr UInt64 maxUInt64 = UInt64(-1);
+#endif // defined(JSON_HAS_INT64)
+ /// Default precision for real value for string representation.
+ static constexpr UInt defaultRealPrecision = 17;
+ // The constant is hard-coded because some compiler have trouble
+ // converting Value::maxUInt64 to a double correctly (AIX/xlC).
+ // Assumes that UInt64 is a 64 bits integer.
+ static constexpr double maxUInt64AsDouble = 18446744073709551615.0;
+// Workaround for bug in the NVIDIAs CUDA 9.1 nvcc compiler
+// when using gcc and clang backend compilers. CZString
+// cannot be defined as private. See issue #486
+#ifdef __NVCC__
+public:
+#else
+private:
+#endif
+#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+ class CZString {
+ public:
+ enum DuplicationPolicy { noDuplication = 0, duplicate, duplicateOnCopy };
+ CZString(ArrayIndex index);
+ CZString(char const* str, unsigned length, DuplicationPolicy allocate);
+ CZString(CZString const& other);
+ CZString(CZString&& other) noexcept;
+ ~CZString();
+ CZString& operator=(const CZString& other);
+ CZString& operator=(CZString&& other) noexcept;
+
+ bool operator<(CZString const& other) const;
+ bool operator==(CZString const& other) const;
+ ArrayIndex index() const;
+ // const char* c_str() const; ///< \deprecated
+ char const* data() const;
+ unsigned length() const;
+ bool isStaticString() const;
+
+ private:
+ void swap(CZString& other);
+
+ struct StringStorage {
+ unsigned policy_ : 2;
+ unsigned length_ : 30; // 1GB max
+ };
+
+ char const* cstr_; // actually, a prefixed string, unless policy is noDup
+ union {
+ ArrayIndex index_;
+ StringStorage storage_;
+ };
+ };
+
+public:
+ typedef std::map<CZString, Value> ObjectValues;
+#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION
+
+public:
+ /**
+ * \brief Create a default Value of the given type.
+ *
+ * This is a very useful constructor.
+ * To create an empty array, pass arrayValue.
+ * To create an empty object, pass objectValue.
+ * Another Value can then be set to this one by assignment.
+ * This is useful since clear() and resize() will not alter types.
+ *
+ * Examples:
+ * \code
+ * Json::Value null_value; // null
+ * Json::Value arr_value(Json::arrayValue); // []
+ * Json::Value obj_value(Json::objectValue); // {}
+ * \endcode
+ */
+ Value(ValueType type = nullValue);
+ Value(Int value);
+ Value(UInt value);
+#if defined(JSON_HAS_INT64)
+ Value(Int64 value);
+ Value(UInt64 value);
+#endif // if defined(JSON_HAS_INT64)
+ Value(double value);
+ Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.)
+ Value(const char* begin, const char* end); ///< Copy all, incl zeroes.
+ /**
+ * \brief Constructs a value from a static string.
+ *
+ * Like other value string constructor but do not duplicate the string for
+ * internal storage. The given string must remain alive after the call to
+ * this constructor.
+ *
+ * \note This works only for null-terminated strings. (We cannot change the
+ * size of this class, so we have nowhere to store the length, which might be
+ * computed later for various operations.)
+ *
+ * Example of usage:
+ * \code
+ * static StaticString foo("some text");
+ * Json::Value aValue(foo);
+ * \endcode
+ */
+ Value(const StaticString& value);
+ Value(const String& value);
+ Value(bool value);
+ Value(std::nullptr_t ptr) = delete;
+ Value(const Value& other);
+ Value(Value&& other) noexcept;
+ ~Value();
+
+ /// \note Overwrite existing comments. To preserve comments, use
+ /// #swapPayload().
+ Value& operator=(const Value& other);
+ Value& operator=(Value&& other) noexcept;
+
+ /// Swap everything.
+ void swap(Value& other);
+ /// Swap values but leave comments and source offsets in place.
+ void swapPayload(Value& other);
+
+ /// copy everything.
+ void copy(const Value& other);
+ /// copy values but leave comments and source offsets in place.
+ void copyPayload(const Value& other);
+
+ ValueType type() const;
+
+ /// Compare payload only, not comments etc.
+ bool operator<(const Value& other) const;
+ bool operator<=(const Value& other) const;
+ bool operator>=(const Value& other) const;
+ bool operator>(const Value& other) const;
+ bool operator==(const Value& other) const;
+ bool operator!=(const Value& other) const;
+ int compare(const Value& other) const;
+
+ const char* asCString() const; ///< Embedded zeroes could cause you trouble!
+#if JSONCPP_USING_SECURE_MEMORY
+ unsigned getCStringLength() const; // Allows you to understand the length of
+ // the CString
+#endif
+ String asString() const; ///< Embedded zeroes are possible.
+ /** Get raw char* of string-value.
+ * \return false if !string. (Seg-fault if str or end are NULL.)
+ */
+ bool getString(char const** begin, char const** end) const;
+ Int asInt() const;
+ UInt asUInt() const;
+#if defined(JSON_HAS_INT64)
+ Int64 asInt64() const;
+ UInt64 asUInt64() const;
+#endif // if defined(JSON_HAS_INT64)
+ LargestInt asLargestInt() const;
+ LargestUInt asLargestUInt() const;
+ float asFloat() const;
+ double asDouble() const;
+ bool asBool() const;
+
+ bool isNull() const;
+ bool isBool() const;
+ bool isInt() const;
+ bool isInt64() const;
+ bool isUInt() const;
+ bool isUInt64() const;
+ bool isIntegral() const;
+ bool isDouble() const;
+ bool isNumeric() const;
+ bool isString() const;
+ bool isArray() const;
+ bool isObject() const;
+
+ /// The `as<T>` and `is<T>` member function templates and specializations.
+ template <typename T> T as() const JSONCPP_TEMPLATE_DELETE;
+ template <typename T> bool is() const JSONCPP_TEMPLATE_DELETE;
+
+ bool isConvertibleTo(ValueType other) const;
+
+ /// Number of values in array or object
+ ArrayIndex size() const;
+
+ /// \brief Return true if empty array, empty object, or null;
+ /// otherwise, false.
+ bool empty() const;
+
+ /// Return !isNull()
+ explicit operator bool() const;
+
+ /// Remove all object members and array elements.
+ /// \pre type() is arrayValue, objectValue, or nullValue
+ /// \post type() is unchanged
+ void clear();
+
+ /// Resize the array to newSize elements.
+ /// New elements are initialized to null.
+ /// May only be called on nullValue or arrayValue.
+ /// \pre type() is arrayValue or nullValue
+ /// \post type() is arrayValue
+ void resize(ArrayIndex newSize);
+
+ //@{
+ /// Access an array element (zero based index). If the array contains less
+ /// than index element, then null value are inserted in the array so that
+ /// its size is index+1.
+ /// (You may need to say 'value[0u]' to get your compiler to distinguish
+ /// this from the operator[] which takes a string.)
+ Value& operator[](ArrayIndex index);
+ Value& operator[](int index);
+ //@}
+
+ //@{
+ /// Access an array element (zero based index).
+ /// (You may need to say 'value[0u]' to get your compiler to distinguish
+ /// this from the operator[] which takes a string.)
+ const Value& operator[](ArrayIndex index) const;
+ const Value& operator[](int index) const;
+ //@}
+
+ /// If the array contains at least index+1 elements, returns the element
+ /// value, otherwise returns defaultValue.
+ Value get(ArrayIndex index, const Value& defaultValue) const;
+ /// Return true if index < size().
+ bool isValidIndex(ArrayIndex index) const;
+ /// \brief Append value to array at the end.
+ ///
+ /// Equivalent to jsonvalue[jsonvalue.size()] = value;
+ Value& append(const Value& value);
+ Value& append(Value&& value);
+
+ /// \brief Insert value in array at specific index
+ bool insert(ArrayIndex index, const Value& newValue);
+ bool insert(ArrayIndex index, Value&& newValue);
+
+ /// Access an object value by name, create a null member if it does not exist.
+ /// \note Because of our implementation, keys are limited to 2^30 -1 chars.
+ /// Exceeding that will cause an exception.
+ Value& operator[](const char* key);
+ /// Access an object value by name, returns null if there is no member with
+ /// that name.
+ const Value& operator[](const char* key) const;
+ /// Access an object value by name, create a null member if it does not exist.
+ /// \param key may contain embedded nulls.
+ Value& operator[](const String& key);
+ /// Access an object value by name, returns null if there is no member with
+ /// that name.
+ /// \param key may contain embedded nulls.
+ const Value& operator[](const String& key) const;
+ /** \brief Access an object value by name, create a null member if it does not
+ * exist.
+ *
+ * If the object has no entry for that name, then the member name used to
+ * store the new entry is not duplicated.
+ * Example of use:
+ * \code
+ * Json::Value object;
+ * static const StaticString code("code");
+ * object[code] = 1234;
+ * \endcode
+ */
+ Value& operator[](const StaticString& key);
+ /// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
+ Value get(const char* key, const Value& defaultValue) const;
+ /// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
+ /// \note key may contain embedded nulls.
+ Value get(const char* begin, const char* end,
+ const Value& defaultValue) const;
+ /// Return the member named key if it exist, defaultValue otherwise.
+ /// \note deep copy
+ /// \param key may contain embedded nulls.
+ Value get(const String& key, const Value& defaultValue) const;
+ /// Most general and efficient version of isMember()const, get()const,
+ /// and operator[]const
+ /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
+ Value const* find(char const* begin, char const* end) const;
+ /// Most general and efficient version of object-mutators.
+ /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30
+ /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue.
+ Value* demand(char const* begin, char const* end);
+ /// \brief Remove and return the named member.
+ ///
+ /// Do nothing if it did not exist.
+ /// \pre type() is objectValue or nullValue
+ /// \post type() is unchanged
+ void removeMember(const char* key);
+ /// Same as removeMember(const char*)
+ /// \param key may contain embedded nulls.
+ void removeMember(const String& key);
+ /// Same as removeMember(const char* begin, const char* end, Value* removed),
+ /// but 'key' is null-terminated.
+ bool removeMember(const char* key, Value* removed);
+ /** \brief Remove the named map member.
+ *
+ * Update 'removed' iff removed.
+ * \param key may contain embedded nulls.
+ * \return true iff removed (no exceptions)
+ */
+ bool removeMember(String const& key, Value* removed);
+ /// Same as removeMember(String const& key, Value* removed)
+ bool removeMember(const char* begin, const char* end, Value* removed);
+ /** \brief Remove the indexed array element.
+ *
+ * O(n) expensive operations.
+ * Update 'removed' iff removed.
+ * \return true if removed (no exceptions)
+ */
+ bool removeIndex(ArrayIndex index, Value* removed);
+
+ /// Return true if the object has a member named key.
+ /// \note 'key' must be null-terminated.
+ bool isMember(const char* key) const;
+ /// Return true if the object has a member named key.
+ /// \param key may contain embedded nulls.
+ bool isMember(const String& key) const;
+ /// Same as isMember(String const& key)const
+ bool isMember(const char* begin, const char* end) const;
+
+ /// \brief Return a list of the member names.
+ ///
+ /// If null, return an empty list.
+ /// \pre type() is objectValue or nullValue
+ /// \post if type() was nullValue, it remains nullValue
+ Members getMemberNames() const;
+
+ /// \deprecated Always pass len.
+ JSONCPP_DEPRECATED("Use setComment(String const&) instead.")
+ void setComment(const char* comment, CommentPlacement placement) {
+ setComment(String(comment, strlen(comment)), placement);
+ }
+ /// Comments must be //... or /* ... */
+ void setComment(const char* comment, size_t len, CommentPlacement placement) {
+ setComment(String(comment, len), placement);
+ }
+ /// Comments must be //... or /* ... */
+ void setComment(String comment, CommentPlacement placement);
+ bool hasComment(CommentPlacement placement) const;
+ /// Include delimiters and embedded newlines.
+ String getComment(CommentPlacement placement) const;
+
+ String toStyledString() const;
+
+ const_iterator begin() const;
+ const_iterator end() const;
+
+ iterator begin();
+ iterator end();
+
+ // Accessors for the [start, limit) range of bytes within the JSON text from
+ // which this value was parsed, if any.
+ void setOffsetStart(ptrdiff_t start);
+ void setOffsetLimit(ptrdiff_t limit);
+ ptrdiff_t getOffsetStart() const;
+ ptrdiff_t getOffsetLimit() const;
+
+private:
+ void setType(ValueType v) {
+ bits_.value_type_ = static_cast<unsigned char>(v);
+ }
+ bool isAllocated() const { return bits_.allocated_; }
+ void setIsAllocated(bool v) { bits_.allocated_ = v; }
+
+ void initBasic(ValueType type, bool allocated = false);
+ void dupPayload(const Value& other);
+ void releasePayload();
+ void dupMeta(const Value& other);
+
+ Value& resolveReference(const char* key);
+ Value& resolveReference(const char* key, const char* end);
+
+ // struct MemberNamesTransform
+ //{
+ // typedef const char *result_type;
+ // const char *operator()( const CZString &name ) const
+ // {
+ // return name.c_str();
+ // }
+ //};
+
+ union ValueHolder {
+ LargestInt int_;
+ LargestUInt uint_;
+ double real_;
+ bool bool_;
+ char* string_; // if allocated_, ptr to { unsigned, char[] }.
+ ObjectValues* map_;
+ } value_;
+
+ struct {
+ // Really a ValueType, but types should agree for bitfield packing.
+ unsigned int value_type_ : 8;
+ // Unless allocated_, string_ must be null-terminated.
+ unsigned int allocated_ : 1;
+ } bits_;
+
+ class Comments {
+ public:
+ Comments() = default;
+ Comments(const Comments& that);
+ Comments(Comments&& that) noexcept;
+ Comments& operator=(const Comments& that);
+ Comments& operator=(Comments&& that) noexcept;
+ bool has(CommentPlacement slot) const;
+ String get(CommentPlacement slot) const;
+ void set(CommentPlacement slot, String comment);
+
+ private:
+ using Array = std::array<String, numberOfCommentPlacement>;
+ std::unique_ptr<Array> ptr_;
+ };
+ Comments comments_;
+
+ // [start, limit) byte offsets in the source JSON text from which this Value
+ // was extracted.
+ ptrdiff_t start_;
+ ptrdiff_t limit_;
+};
+
+template <> inline bool Value::as<bool>() const { return asBool(); }
+template <> inline bool Value::is<bool>() const { return isBool(); }
+
+template <> inline Int Value::as<Int>() const { return asInt(); }
+template <> inline bool Value::is<Int>() const { return isInt(); }
+
+template <> inline UInt Value::as<UInt>() const { return asUInt(); }
+template <> inline bool Value::is<UInt>() const { return isUInt(); }
+
+#if defined(JSON_HAS_INT64)
+template <> inline Int64 Value::as<Int64>() const { return asInt64(); }
+template <> inline bool Value::is<Int64>() const { return isInt64(); }
+
+template <> inline UInt64 Value::as<UInt64>() const { return asUInt64(); }
+template <> inline bool Value::is<UInt64>() const { return isUInt64(); }
+#endif
+
+template <> inline double Value::as<double>() const { return asDouble(); }
+template <> inline bool Value::is<double>() const { return isDouble(); }
+
+template <> inline String Value::as<String>() const { return asString(); }
+template <> inline bool Value::is<String>() const { return isString(); }
+
+/// These `as` specializations are type conversions, and do not have a
+/// corresponding `is`.
+template <> inline float Value::as<float>() const { return asFloat(); }
+template <> inline const char* Value::as<const char*>() const {
+ return asCString();
+}
+
+/** \brief Experimental and untested: represents an element of the "path" to
+ * access a node.
+ */
+class JSON_API PathArgument {
+public:
+ friend class Path;
+
+ PathArgument();
+ PathArgument(ArrayIndex index);
+ PathArgument(const char* key);
+ PathArgument(String key);
+
+private:
+ enum Kind { kindNone = 0, kindIndex, kindKey };
+ String key_;
+ ArrayIndex index_{};
+ Kind kind_{kindNone};
+};
+
+/** \brief Experimental and untested: represents a "path" to access a node.
+ *
+ * Syntax:
+ * - "." => root node
+ * - ".[n]" => elements at index 'n' of root node (an array value)
+ * - ".name" => member named 'name' of root node (an object value)
+ * - ".name1.name2.name3"
+ * - ".[0][1][2].name1[3]"
+ * - ".%" => member name is provided as parameter
+ * - ".[%]" => index is provided as parameter
+ */
+class JSON_API Path {
+public:
+ Path(const String& path, const PathArgument& a1 = PathArgument(),
+ const PathArgument& a2 = PathArgument(),
+ const PathArgument& a3 = PathArgument(),
+ const PathArgument& a4 = PathArgument(),
+ const PathArgument& a5 = PathArgument());
+
+ const Value& resolve(const Value& root) const;
+ Value resolve(const Value& root, const Value& defaultValue) const;
+ /// Creates the "path" to access the specified node and returns a reference on
+ /// the node.
+ Value& make(Value& root) const;
+
+private:
+ using InArgs = std::vector<const PathArgument*>;
+ using Args = std::vector<PathArgument>;
+
+ void makePath(const String& path, const InArgs& in);
+ void addPathInArg(const String& path, const InArgs& in,
+ InArgs::const_iterator& itInArg, PathArgument::Kind kind);
+ static void invalidPath(const String& path, int location);
+
+ Args args_;
+};
+
+/** \brief base class for Value iterators.
+ *
+ */
+class JSON_API ValueIteratorBase {
+public:
+ using iterator_category = std::bidirectional_iterator_tag;
+ using size_t = unsigned int;
+ using difference_type = int;
+ using SelfType = ValueIteratorBase;
+
+ bool operator==(const SelfType& other) const { return isEqual(other); }
+
+ bool operator!=(const SelfType& other) const { return !isEqual(other); }
+
+ difference_type operator-(const SelfType& other) const {
+ return other.computeDistance(*this);
+ }
+
+ /// Return either the index or the member name of the referenced value as a
+ /// Value.
+ Value key() const;
+
+ /// Return the index of the referenced Value, or -1 if it is not an
+ /// arrayValue.
+ UInt index() const;
+
+ /// Return the member name of the referenced Value, or "" if it is not an
+ /// objectValue.
+ /// \note Avoid `c_str()` on result, as embedded zeroes are possible.
+ String name() const;
+
+ /// Return the member name of the referenced Value. "" if it is not an
+ /// objectValue.
+ /// \deprecated This cannot be used for UTF-8 strings, since there can be
+ /// embedded nulls.
+ JSONCPP_DEPRECATED("Use `key = name();` instead.")
+ char const* memberName() const;
+ /// Return the member name of the referenced Value, or NULL if it is not an
+ /// objectValue.
+ /// \note Better version than memberName(). Allows embedded nulls.
+ char const* memberName(char const** end) const;
+
+protected:
+ /*! Internal utility functions to assist with implementing
+ * other iterator functions. The const and non-const versions
+ * of the "deref" protected methods expose the protected
+ * current_ member variable in a way that can often be
+ * optimized away by the compiler.
+ */
+ const Value& deref() const;
+ Value& deref();
+
+ void increment();
+
+ void decrement();
+
+ difference_type computeDistance(const SelfType& other) const;
+
+ bool isEqual(const SelfType& other) const;
+
+ void copy(const SelfType& other);
+
+private:
+ Value::ObjectValues::iterator current_;
+ // Indicates that iterator is for a null value.
+ bool isNull_{true};
+
+public:
+ // For some reason, BORLAND needs these at the end, rather
+ // than earlier. No idea why.
+ ValueIteratorBase();
+ explicit ValueIteratorBase(const Value::ObjectValues::iterator& current);
+};
+
+/** \brief const iterator for object and array value.
+ *
+ */
+class JSON_API ValueConstIterator : public ValueIteratorBase {
+ friend class Value;
+
+public:
+ using value_type = const Value;
+ // typedef unsigned int size_t;
+ // typedef int difference_type;
+ using reference = const Value&;
+ using pointer = const Value*;
+ using SelfType = ValueConstIterator;
+
+ ValueConstIterator();
+ ValueConstIterator(ValueIterator const& other);
+
+private:
+ /*! \internal Use by Value to create an iterator.
+ */
+ explicit ValueConstIterator(const Value::ObjectValues::iterator& current);
+
+public:
+ SelfType& operator=(const ValueIteratorBase& other);
+
+ SelfType operator++(int) {
+ SelfType temp(*this);
+ ++*this;
+ return temp;
+ }
+
+ SelfType operator--(int) {
+ SelfType temp(*this);
+ --*this;
+ return temp;
+ }
+
+ SelfType& operator--() {
+ decrement();
+ return *this;
+ }
+
+ SelfType& operator++() {
+ increment();
+ return *this;
+ }
+
+ reference operator*() const { return deref(); }
+
+ pointer operator->() const { return &deref(); }
+};
+
+/** \brief Iterator for object and array value.
+ */
+class JSON_API ValueIterator : public ValueIteratorBase {
+ friend class Value;
+
+public:
+ using value_type = Value;
+ using size_t = unsigned int;
+ using difference_type = int;
+ using reference = Value&;
+ using pointer = Value*;
+ using SelfType = ValueIterator;
+
+ ValueIterator();
+ explicit ValueIterator(const ValueConstIterator& other);
+ ValueIterator(const ValueIterator& other);
+
+private:
+ /*! \internal Use by Value to create an iterator.
+ */
+ explicit ValueIterator(const Value::ObjectValues::iterator& current);
+
+public:
+ SelfType& operator=(const SelfType& other);
+
+ SelfType operator++(int) {
+ SelfType temp(*this);
+ ++*this;
+ return temp;
+ }
+
+ SelfType operator--(int) {
+ SelfType temp(*this);
+ --*this;
+ return temp;
+ }
+
+ SelfType& operator--() {
+ decrement();
+ return *this;
+ }
+
+ SelfType& operator++() {
+ increment();
+ return *this;
+ }
+
+ /*! The return value of non-const iterators can be
+ * changed, so the these functions are not const
+ * because the returned references/pointers can be used
+ * to change state of the base class.
+ */
+ reference operator*() const { return const_cast<reference>(deref()); }
+ pointer operator->() const { return const_cast<pointer>(&deref()); }
+};
+
+inline void swap(Value& a, Value& b) { a.swap(b); }
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/version.h b/thirdparty/openxr/src/external/jsoncpp/include/json/version.h
new file mode 100644
index 0000000000..e931d0383e
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/version.h
@@ -0,0 +1,28 @@
+#ifndef JSON_VERSION_H_INCLUDED
+#define JSON_VERSION_H_INCLUDED
+
+// Note: version must be updated in three places when doing a release. This
+// annoying process ensures that amalgamate, CMake, and meson all report the
+// correct version.
+// 1. /meson.build
+// 2. /include/json/version.h
+// 3. /CMakeLists.txt
+// IMPORTANT: also update the SOVERSION!!
+
+#define JSONCPP_VERSION_STRING "1.9.5"
+#define JSONCPP_VERSION_MAJOR 1
+#define JSONCPP_VERSION_MINOR 9
+#define JSONCPP_VERSION_PATCH 5
+#define JSONCPP_VERSION_QUALIFIER
+#define JSONCPP_VERSION_HEXA \
+ ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | \
+ (JSONCPP_VERSION_PATCH << 8))
+
+#ifdef JSONCPP_USING_SECURE_MEMORY
+#undef JSONCPP_USING_SECURE_MEMORY
+#endif
+#define JSONCPP_USING_SECURE_MEMORY 0
+// If non-zero, the library zeroes any memory that it has allocated before
+// it frees its memory.
+
+#endif // JSON_VERSION_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/include/json/writer.h b/thirdparty/openxr/src/external/jsoncpp/include/json/writer.h
new file mode 100644
index 0000000000..88a3b12e9d
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/include/json/writer.h
@@ -0,0 +1,369 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef JSON_WRITER_H_INCLUDED
+#define JSON_WRITER_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "value.h"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <ostream>
+#include <string>
+#include <vector>
+
+// Disable warning C4251: <data member>: <type> needs to have dll-interface to
+// be used by...
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) && defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4251)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#pragma pack(push, 8)
+
+namespace Json {
+
+class Value;
+
+/**
+ *
+ * Usage:
+ * \code
+ * using namespace Json;
+ * void writeToStdout(StreamWriter::Factory const& factory, Value const& value)
+ * { std::unique_ptr<StreamWriter> const writer( factory.newStreamWriter());
+ * writer->write(value, &std::cout);
+ * std::cout << std::endl; // add lf and flush
+ * }
+ * \endcode
+ */
+class JSON_API StreamWriter {
+protected:
+ OStream* sout_; // not owned; will not delete
+public:
+ StreamWriter();
+ virtual ~StreamWriter();
+ /** Write Value into document as configured in sub-class.
+ * Do not take ownership of sout, but maintain a reference during function.
+ * \pre sout != NULL
+ * \return zero on success (For now, we always return zero, so check the
+ * stream instead.) \throw std::exception possibly, depending on
+ * configuration
+ */
+ virtual int write(Value const& root, OStream* sout) = 0;
+
+ /** \brief A simple abstract factory.
+ */
+ class JSON_API Factory {
+ public:
+ virtual ~Factory();
+ /** \brief Allocate a CharReader via operator new().
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ virtual StreamWriter* newStreamWriter() const = 0;
+ }; // Factory
+}; // StreamWriter
+
+/** \brief Write into stringstream, then return string, for convenience.
+ * A StreamWriter will be created from the factory, used, and then deleted.
+ */
+String JSON_API writeString(StreamWriter::Factory const& factory,
+ Value const& root);
+
+/** \brief Build a StreamWriter implementation.
+
+* Usage:
+* \code
+* using namespace Json;
+* Value value = ...;
+* StreamWriterBuilder builder;
+* builder["commentStyle"] = "None";
+* builder["indentation"] = " "; // or whatever you like
+* std::unique_ptr<Json::StreamWriter> writer(
+* builder.newStreamWriter());
+* writer->write(value, &std::cout);
+* std::cout << std::endl; // add lf and flush
+* \endcode
+*/
+class JSON_API StreamWriterBuilder : public StreamWriter::Factory {
+public:
+ // Note: We use a Json::Value so that we can add data-members to this class
+ // without a major version bump.
+ /** Configuration of this builder.
+ * Available settings (case-sensitive):
+ * - "commentStyle": "None" or "All"
+ * - "indentation": "<anything>".
+ * - Setting this to an empty string also omits newline characters.
+ * - "enableYAMLCompatibility": false or true
+ * - slightly change the whitespace around colons
+ * - "dropNullPlaceholders": false or true
+ * - Drop the "null" string from the writer's output for nullValues.
+ * Strictly speaking, this is not valid JSON. But when the output is being
+ * fed to a browser's JavaScript, it makes for smaller output and the
+ * browser can handle the output just fine.
+ * - "useSpecialFloats": false or true
+ * - If true, outputs non-finite floating point values in the following way:
+ * NaN values as "NaN", positive infinity as "Infinity", and negative
+ * infinity as "-Infinity".
+ * - "precision": int
+ * - Number of precision digits for formatting of real values.
+ * - "precisionType": "significant"(default) or "decimal"
+ * - Type of precision for formatting of real values.
+ * - "emitUTF8": false or true
+ * - If true, outputs raw UTF8 strings instead of escaping them.
+
+ * You can examine 'settings_` yourself
+ * to see the defaults. You can also write and read them just like any
+ * JSON Value.
+ * \sa setDefaults()
+ */
+ Json::Value settings_;
+
+ StreamWriterBuilder();
+ ~StreamWriterBuilder() override;
+
+ /**
+ * \throw std::exception if something goes wrong (e.g. invalid settings)
+ */
+ StreamWriter* newStreamWriter() const override;
+
+ /** \return true if 'settings' are legal and consistent;
+ * otherwise, indicate bad settings via 'invalid'.
+ */
+ bool validate(Json::Value* invalid) const;
+ /** A simple way to update a specific setting.
+ */
+ Value& operator[](const String& key);
+
+ /** Called by ctor, but you can use this to reset settings_.
+ * \pre 'settings' != NULL (but Json::null is fine)
+ * \remark Defaults:
+ * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults
+ */
+ static void setDefaults(Json::Value* settings);
+};
+
+/** \brief Abstract class for writers.
+ * \deprecated Use StreamWriter. (And really, this is an implementation detail.)
+ */
+class JSON_API Writer {
+public:
+ virtual ~Writer();
+
+ virtual String write(const Value& root) = 0;
+};
+
+/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format
+ *without formatting (not human friendly).
+ *
+ * The JSON document is written in a single line. It is not intended for 'human'
+ *consumption,
+ * but may be useful to support feature such as RPC where bandwidth is limited.
+ * \sa Reader, Value
+ * \deprecated Use StreamWriterBuilder.
+ */
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996) // Deriving from deprecated class
+#endif
+class JSON_API FastWriter
+ : public Writer {
+public:
+ FastWriter();
+ ~FastWriter() override = default;
+
+ void enableYAMLCompatibility();
+
+ /** \brief Drop the "null" string from the writer's output for nullValues.
+ * Strictly speaking, this is not valid JSON. But when the output is being
+ * fed to a browser's JavaScript, it makes for smaller output and the
+ * browser can handle the output just fine.
+ */
+ void dropNullPlaceholders();
+
+ void omitEndingLineFeed();
+
+public: // overridden from Writer
+ String write(const Value& root) override;
+
+private:
+ void writeValue(const Value& value);
+
+ String document_;
+ bool yamlCompatibilityEnabled_{false};
+ bool dropNullPlaceholders_{false};
+ bool omitEndingLineFeed_{false};
+};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ *human friendly way.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ * - if empty then print {} without indent and line break
+ * - if not empty the print '{', line break & indent, print one value per
+ *line
+ * and then unindent and line break and print '}'.
+ * - Array value:
+ * - if empty then print [] without indent and line break
+ * - if the array contains no object value, empty array or some other value
+ *types,
+ * and all the values fit on one lines, then print the array on a single
+ *line.
+ * - otherwise, it the values do not fit on one line, or the array contains
+ * object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ *#CommentPlacement.
+ *
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996) // Deriving from deprecated class
+#endif
+class JSON_API
+ StyledWriter : public Writer {
+public:
+ StyledWriter();
+ ~StyledWriter() override = default;
+
+public: // overridden from Writer
+ /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+ * \param root Value to serialize.
+ * \return String containing the JSON document that represents the root value.
+ */
+ String write(const Value& root) override;
+
+private:
+ void writeValue(const Value& value);
+ void writeArrayValue(const Value& value);
+ bool isMultilineArray(const Value& value);
+ void pushValue(const String& value);
+ void writeIndent();
+ void writeWithIndent(const String& value);
+ void indent();
+ void unindent();
+ void writeCommentBeforeValue(const Value& root);
+ void writeCommentAfterValueOnSameLine(const Value& root);
+ static bool hasCommentForValue(const Value& value);
+ static String normalizeEOL(const String& text);
+
+ using ChildValues = std::vector<String>;
+
+ ChildValues childValues_;
+ String document_;
+ String indentString_;
+ unsigned int rightMargin_{74};
+ unsigned int indentSize_{3};
+ bool addChildValues_{false};
+};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a
+ human friendly way,
+ to a stream rather than to a string.
+ *
+ * The rules for line break and indent are as follow:
+ * - Object value:
+ * - if empty then print {} without indent and line break
+ * - if not empty the print '{', line break & indent, print one value per
+ line
+ * and then unindent and line break and print '}'.
+ * - Array value:
+ * - if empty then print [] without indent and line break
+ * - if the array contains no object value, empty array or some other value
+ types,
+ * and all the values fit on one lines, then print the array on a single
+ line.
+ * - otherwise, it the values do not fit on one line, or the array contains
+ * object or non empty array, then print one value per line.
+ *
+ * If the Value have comments then they are outputed according to their
+ #CommentPlacement.
+ *
+ * \sa Reader, Value, Value::setComment()
+ * \deprecated Use StreamWriterBuilder.
+ */
+#if defined(_MSC_VER)
+#pragma warning(push)
+#pragma warning(disable : 4996) // Deriving from deprecated class
+#endif
+class JSON_API
+ StyledStreamWriter {
+public:
+ /**
+ * \param indentation Each level will be indented by this amount extra.
+ */
+ StyledStreamWriter(String indentation = "\t");
+ ~StyledStreamWriter() = default;
+
+public:
+ /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format.
+ * \param out Stream to write to. (Can be ostringstream, e.g.)
+ * \param root Value to serialize.
+ * \note There is no point in deriving from Writer, since write() should not
+ * return a value.
+ */
+ void write(OStream& out, const Value& root);
+
+private:
+ void writeValue(const Value& value);
+ void writeArrayValue(const Value& value);
+ bool isMultilineArray(const Value& value);
+ void pushValue(const String& value);
+ void writeIndent();
+ void writeWithIndent(const String& value);
+ void indent();
+ void unindent();
+ void writeCommentBeforeValue(const Value& root);
+ void writeCommentAfterValueOnSameLine(const Value& root);
+ static bool hasCommentForValue(const Value& value);
+ static String normalizeEOL(const String& text);
+
+ using ChildValues = std::vector<String>;
+
+ ChildValues childValues_;
+ OStream* document_;
+ String indentString_;
+ unsigned int rightMargin_{74};
+ String indentation_;
+ bool addChildValues_ : 1;
+ bool indented_ : 1;
+};
+#if defined(_MSC_VER)
+#pragma warning(pop)
+#endif
+
+#if defined(JSON_HAS_INT64)
+String JSON_API valueToString(Int value);
+String JSON_API valueToString(UInt value);
+#endif // if defined(JSON_HAS_INT64)
+String JSON_API valueToString(LargestInt value);
+String JSON_API valueToString(LargestUInt value);
+String JSON_API valueToString(
+ double value, unsigned int precision = Value::defaultRealPrecision,
+ PrecisionType precisionType = PrecisionType::significantDigits);
+String JSON_API valueToString(bool value);
+String JSON_API valueToQuotedString(const char* value);
+
+/// \brief Output using the StyledStreamWriter.
+/// \see Json::operator>>()
+JSON_API OStream& operator<<(OStream&, const Value& root);
+
+} // namespace Json
+
+#pragma pack(pop)
+
+#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+#pragma warning(pop)
+#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING)
+
+#endif // JSON_WRITER_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp
new file mode 100644
index 0000000000..a6a3f4e30d
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_reader.cpp
@@ -0,0 +1,1992 @@
+// Copyright 2007-2011 Baptiste Lepilleur and The JsonCpp Authors
+// Copyright (C) 2016 InfoTeCS JSC. All rights reserved.
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_tool.h"
+#include <json/assertions.h>
+#include <json/reader.h>
+#include <json/value.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <algorithm>
+#include <cassert>
+#include <cstring>
+#include <iostream>
+#include <istream>
+#include <limits>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <utility>
+
+#include <cstdio>
+#if __cplusplus >= 201103L
+
+#if !defined(sscanf)
+#define sscanf std::sscanf
+#endif
+
+#endif //__cplusplus
+
+#if defined(_MSC_VER)
+#if !defined(_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES)
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
+#endif //_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
+#endif //_MSC_VER
+
+#if defined(_MSC_VER)
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+// Define JSONCPP_DEPRECATED_STACK_LIMIT as an appropriate integer at compile
+// time to change the stack limit
+#if !defined(JSONCPP_DEPRECATED_STACK_LIMIT)
+#define JSONCPP_DEPRECATED_STACK_LIMIT 1000
+#endif
+
+static size_t const stackLimit_g =
+ JSONCPP_DEPRECATED_STACK_LIMIT; // see readValue()
+
+namespace Json {
+
+#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
+using CharReaderPtr = std::unique_ptr<CharReader>;
+#else
+using CharReaderPtr = std::auto_ptr<CharReader>;
+#endif
+
+// Implementation of class Features
+// ////////////////////////////////
+
+Features::Features() = default;
+
+Features Features::all() { return {}; }
+
+Features Features::strictMode() {
+ Features features;
+ features.allowComments_ = false;
+ features.strictRoot_ = true;
+ features.allowDroppedNullPlaceholders_ = false;
+ features.allowNumericKeys_ = false;
+ return features;
+}
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+bool Reader::containsNewLine(Reader::Location begin, Reader::Location end) {
+ return std::any_of(begin, end, [](char b) { return b == '\n' || b == '\r'; });
+}
+
+// Class Reader
+// //////////////////////////////////////////////////////////////////
+
+Reader::Reader() : features_(Features::all()) {}
+
+Reader::Reader(const Features& features) : features_(features) {}
+
+bool Reader::parse(const std::string& document, Value& root,
+ bool collectComments) {
+ document_.assign(document.begin(), document.end());
+ const char* begin = document_.c_str();
+ const char* end = begin + document_.length();
+ return parse(begin, end, root, collectComments);
+}
+
+bool Reader::parse(std::istream& is, Value& root, bool collectComments) {
+ // std::istream_iterator<char> begin(is);
+ // std::istream_iterator<char> end;
+ // Those would allow streamed input from a file, if parse() were a
+ // template function.
+
+ // Since String is reference-counted, this at least does not
+ // create an extra copy.
+ String doc(std::istreambuf_iterator<char>(is), {});
+ return parse(doc.data(), doc.data() + doc.size(), root, collectComments);
+}
+
+bool Reader::parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments) {
+ if (!features_.allowComments_) {
+ collectComments = false;
+ }
+
+ begin_ = beginDoc;
+ end_ = endDoc;
+ collectComments_ = collectComments;
+ current_ = begin_;
+ lastValueEnd_ = nullptr;
+ lastValue_ = nullptr;
+ commentsBefore_.clear();
+ errors_.clear();
+ while (!nodes_.empty())
+ nodes_.pop();
+ nodes_.push(&root);
+
+ bool successful = readValue();
+ Token token;
+ skipCommentTokens(token);
+ if (collectComments_ && !commentsBefore_.empty())
+ root.setComment(commentsBefore_, commentAfter);
+ if (features_.strictRoot_) {
+ if (!root.isArray() && !root.isObject()) {
+ // Set error location to start of doc, ideally should be first token found
+ // in doc
+ token.type_ = tokenError;
+ token.start_ = beginDoc;
+ token.end_ = endDoc;
+ addError(
+ "A valid JSON document must be either an array or an object value.",
+ token);
+ return false;
+ }
+ }
+ return successful;
+}
+
+bool Reader::readValue() {
+ // readValue() may call itself only if it calls readObject() or ReadArray().
+ // These methods execute nodes_.push() just before and nodes_.pop)() just
+ // after calling readValue(). parse() executes one nodes_.push(), so > instead
+ // of >=.
+ if (nodes_.size() > stackLimit_g)
+ throwRuntimeError("Exceeded stackLimit in readValue().");
+
+ Token token;
+ skipCommentTokens(token);
+ bool successful = true;
+
+ if (collectComments_ && !commentsBefore_.empty()) {
+ currentValue().setComment(commentsBefore_, commentBefore);
+ commentsBefore_.clear();
+ }
+
+ switch (token.type_) {
+ case tokenObjectBegin:
+ successful = readObject(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenArrayBegin:
+ successful = readArray(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenNumber:
+ successful = decodeNumber(token);
+ break;
+ case tokenString:
+ successful = decodeString(token);
+ break;
+ case tokenTrue: {
+ Value v(true);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenFalse: {
+ Value v(false);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNull: {
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenArraySeparator:
+ case tokenObjectEnd:
+ case tokenArrayEnd:
+ if (features_.allowDroppedNullPlaceholders_) {
+ // "Un-read" the current token and mark the current value as a null
+ // token.
+ current_--;
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(current_ - begin_ - 1);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ } // Else, fall through...
+ default:
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return addError("Syntax error: value, object or array expected.", token);
+ }
+
+ if (collectComments_) {
+ lastValueEnd_ = current_;
+ lastValue_ = &currentValue();
+ }
+
+ return successful;
+}
+
+void Reader::skipCommentTokens(Token& token) {
+ if (features_.allowComments_) {
+ do {
+ readToken(token);
+ } while (token.type_ == tokenComment);
+ } else {
+ readToken(token);
+ }
+}
+
+bool Reader::readToken(Token& token) {
+ skipSpaces();
+ token.start_ = current_;
+ Char c = getNextChar();
+ bool ok = true;
+ switch (c) {
+ case '{':
+ token.type_ = tokenObjectBegin;
+ break;
+ case '}':
+ token.type_ = tokenObjectEnd;
+ break;
+ case '[':
+ token.type_ = tokenArrayBegin;
+ break;
+ case ']':
+ token.type_ = tokenArrayEnd;
+ break;
+ case '"':
+ token.type_ = tokenString;
+ ok = readString();
+ break;
+ case '/':
+ token.type_ = tokenComment;
+ ok = readComment();
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ case '-':
+ token.type_ = tokenNumber;
+ readNumber();
+ break;
+ case 't':
+ token.type_ = tokenTrue;
+ ok = match("rue", 3);
+ break;
+ case 'f':
+ token.type_ = tokenFalse;
+ ok = match("alse", 4);
+ break;
+ case 'n':
+ token.type_ = tokenNull;
+ ok = match("ull", 3);
+ break;
+ case ',':
+ token.type_ = tokenArraySeparator;
+ break;
+ case ':':
+ token.type_ = tokenMemberSeparator;
+ break;
+ case 0:
+ token.type_ = tokenEndOfStream;
+ break;
+ default:
+ ok = false;
+ break;
+ }
+ if (!ok)
+ token.type_ = tokenError;
+ token.end_ = current_;
+ return ok;
+}
+
+void Reader::skipSpaces() {
+ while (current_ != end_) {
+ Char c = *current_;
+ if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+ ++current_;
+ else
+ break;
+ }
+}
+
+bool Reader::match(const Char* pattern, int patternLength) {
+ if (end_ - current_ < patternLength)
+ return false;
+ int index = patternLength;
+ while (index--)
+ if (current_[index] != pattern[index])
+ return false;
+ current_ += patternLength;
+ return true;
+}
+
+bool Reader::readComment() {
+ Location commentBegin = current_ - 1;
+ Char c = getNextChar();
+ bool successful = false;
+ if (c == '*')
+ successful = readCStyleComment();
+ else if (c == '/')
+ successful = readCppStyleComment();
+ if (!successful)
+ return false;
+
+ if (collectComments_) {
+ CommentPlacement placement = commentBefore;
+ if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+ if (c != '*' || !containsNewLine(commentBegin, current_))
+ placement = commentAfterOnSameLine;
+ }
+
+ addComment(commentBegin, current_, placement);
+ }
+ return true;
+}
+
+String Reader::normalizeEOL(Reader::Location begin, Reader::Location end) {
+ String normalized;
+ normalized.reserve(static_cast<size_t>(end - begin));
+ Reader::Location current = begin;
+ while (current != end) {
+ char c = *current++;
+ if (c == '\r') {
+ if (current != end && *current == '\n')
+ // convert dos EOL
+ ++current;
+ // convert Mac EOL
+ normalized += '\n';
+ } else {
+ normalized += c;
+ }
+ }
+ return normalized;
+}
+
+void Reader::addComment(Location begin, Location end,
+ CommentPlacement placement) {
+ assert(collectComments_);
+ const String& normalized = normalizeEOL(begin, end);
+ if (placement == commentAfterOnSameLine) {
+ assert(lastValue_ != nullptr);
+ lastValue_->setComment(normalized, placement);
+ } else {
+ commentsBefore_ += normalized;
+ }
+}
+
+bool Reader::readCStyleComment() {
+ while ((current_ + 1) < end_) {
+ Char c = getNextChar();
+ if (c == '*' && *current_ == '/')
+ break;
+ }
+ return getNextChar() == '/';
+}
+
+bool Reader::readCppStyleComment() {
+ while (current_ != end_) {
+ Char c = getNextChar();
+ if (c == '\n')
+ break;
+ if (c == '\r') {
+ // Consume DOS EOL. It will be normalized in addComment.
+ if (current_ != end_ && *current_ == '\n')
+ getNextChar();
+ // Break on Moc OS 9 EOL.
+ break;
+ }
+ }
+ return true;
+}
+
+void Reader::readNumber() {
+ Location p = current_;
+ char c = '0'; // stopgap for already consumed character
+ // integral part
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ // fractional part
+ if (c == '.') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+ // exponential part
+ if (c == 'e' || c == 'E') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ if (c == '+' || c == '-')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+}
+
+bool Reader::readString() {
+ Char c = '\0';
+ while (current_ != end_) {
+ c = getNextChar();
+ if (c == '\\')
+ getNextChar();
+ else if (c == '"')
+ break;
+ }
+ return c == '"';
+}
+
+bool Reader::readObject(Token& token) {
+ Token tokenName;
+ String name;
+ Value init(objectValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ while (readToken(tokenName)) {
+ bool initialTokenOk = true;
+ while (tokenName.type_ == tokenComment && initialTokenOk)
+ initialTokenOk = readToken(tokenName);
+ if (!initialTokenOk)
+ break;
+ if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object
+ return true;
+ name.clear();
+ if (tokenName.type_ == tokenString) {
+ if (!decodeString(tokenName, name))
+ return recoverFromError(tokenObjectEnd);
+ } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+ Value numberName;
+ if (!decodeNumber(tokenName, numberName))
+ return recoverFromError(tokenObjectEnd);
+ name = numberName.asString();
+ } else {
+ break;
+ }
+
+ Token colon;
+ if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+ return addErrorAndRecover("Missing ':' after object member name", colon,
+ tokenObjectEnd);
+ }
+ Value& value = currentValue()[name];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenObjectEnd);
+
+ Token comma;
+ if (!readToken(comma) ||
+ (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+ comma.type_ != tokenComment)) {
+ return addErrorAndRecover("Missing ',' or '}' in object declaration",
+ comma, tokenObjectEnd);
+ }
+ bool finalizeTokenOk = true;
+ while (comma.type_ == tokenComment && finalizeTokenOk)
+ finalizeTokenOk = readToken(comma);
+ if (comma.type_ == tokenObjectEnd)
+ return true;
+ }
+ return addErrorAndRecover("Missing '}' or object member name", tokenName,
+ tokenObjectEnd);
+}
+
+bool Reader::readArray(Token& token) {
+ Value init(arrayValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ skipSpaces();
+ if (current_ != end_ && *current_ == ']') // empty array
+ {
+ Token endArray;
+ readToken(endArray);
+ return true;
+ }
+ int index = 0;
+ for (;;) {
+ Value& value = currentValue()[index++];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenArrayEnd);
+
+ Token currentToken;
+ // Accept Comment after last item in the array.
+ ok = readToken(currentToken);
+ while (currentToken.type_ == tokenComment && ok) {
+ ok = readToken(currentToken);
+ }
+ bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
+ currentToken.type_ != tokenArrayEnd);
+ if (!ok || badTokenType) {
+ return addErrorAndRecover("Missing ',' or ']' in array declaration",
+ currentToken, tokenArrayEnd);
+ }
+ if (currentToken.type_ == tokenArrayEnd)
+ break;
+ }
+ return true;
+}
+
+bool Reader::decodeNumber(Token& token) {
+ Value decoded;
+ if (!decodeNumber(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool Reader::decodeNumber(Token& token, Value& decoded) {
+ // Attempts to parse the number as an integer. If the number is
+ // larger than the maximum supported value of an integer then
+ // we decode the number as a double.
+ Location current = token.start_;
+ bool isNegative = *current == '-';
+ if (isNegative)
+ ++current;
+ // TODO: Help the compiler do the div and mod at compile time or get rid of
+ // them.
+ Value::LargestUInt maxIntegerValue =
+ isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1
+ : Value::maxLargestUInt;
+ Value::LargestUInt threshold = maxIntegerValue / 10;
+ Value::LargestUInt value = 0;
+ while (current < token.end_) {
+ Char c = *current++;
+ if (c < '0' || c > '9')
+ return decodeDouble(token, decoded);
+ auto digit(static_cast<Value::UInt>(c - '0'));
+ if (value >= threshold) {
+ // We've hit or exceeded the max value divided by 10 (rounded down). If
+ // a) we've only just touched the limit, b) this is the last digit, and
+ // c) it's small enough to fit in that rounding delta, we're okay.
+ // Otherwise treat this number as a double to avoid overflow.
+ if (value > threshold || current != token.end_ ||
+ digit > maxIntegerValue % 10) {
+ return decodeDouble(token, decoded);
+ }
+ }
+ value = value * 10 + digit;
+ }
+ if (isNegative && value == maxIntegerValue)
+ decoded = Value::minLargestInt;
+ else if (isNegative)
+ decoded = -Value::LargestInt(value);
+ else if (value <= Value::LargestUInt(Value::maxInt))
+ decoded = Value::LargestInt(value);
+ else
+ decoded = value;
+ return true;
+}
+
+bool Reader::decodeDouble(Token& token) {
+ Value decoded;
+ if (!decodeDouble(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool Reader::decodeDouble(Token& token, Value& decoded) {
+ double value = 0;
+ String buffer(token.start_, token.end_);
+ IStringStream is(buffer);
+ if (!(is >> value))
+ return addError(
+ "'" + String(token.start_, token.end_) + "' is not a number.", token);
+ decoded = value;
+ return true;
+}
+
+bool Reader::decodeString(Token& token) {
+ String decoded_string;
+ if (!decodeString(token, decoded_string))
+ return false;
+ Value decoded(decoded_string);
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool Reader::decodeString(Token& token, String& decoded) {
+ decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
+ Location current = token.start_ + 1; // skip '"'
+ Location end = token.end_ - 1; // do not include '"'
+ while (current != end) {
+ Char c = *current++;
+ if (c == '"')
+ break;
+ if (c == '\\') {
+ if (current == end)
+ return addError("Empty escape sequence in string", token, current);
+ Char escape = *current++;
+ switch (escape) {
+ case '"':
+ decoded += '"';
+ break;
+ case '/':
+ decoded += '/';
+ break;
+ case '\\':
+ decoded += '\\';
+ break;
+ case 'b':
+ decoded += '\b';
+ break;
+ case 'f':
+ decoded += '\f';
+ break;
+ case 'n':
+ decoded += '\n';
+ break;
+ case 'r':
+ decoded += '\r';
+ break;
+ case 't':
+ decoded += '\t';
+ break;
+ case 'u': {
+ unsigned int unicode;
+ if (!decodeUnicodeCodePoint(token, current, end, unicode))
+ return false;
+ decoded += codePointToUTF8(unicode);
+ } break;
+ default:
+ return addError("Bad escape sequence in string", token, current);
+ }
+ } else {
+ decoded += c;
+ }
+ }
+ return true;
+}
+
+bool Reader::decodeUnicodeCodePoint(Token& token, Location& current,
+ Location end, unsigned int& unicode) {
+
+ if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+ return false;
+ if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+ // surrogate pairs
+ if (end - current < 6)
+ return addError(
+ "additional six characters expected to parse unicode surrogate pair.",
+ token, current);
+ if (*(current++) == '\\' && *(current++) == 'u') {
+ unsigned int surrogatePair;
+ if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+ unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+ } else
+ return false;
+ } else
+ return addError("expecting another \\u token to begin the second half of "
+ "a unicode surrogate pair",
+ token, current);
+ }
+ return true;
+}
+
+bool Reader::decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end,
+ unsigned int& ret_unicode) {
+ if (end - current < 4)
+ return addError(
+ "Bad unicode escape sequence in string: four digits expected.", token,
+ current);
+ int unicode = 0;
+ for (int index = 0; index < 4; ++index) {
+ Char c = *current++;
+ unicode *= 16;
+ if (c >= '0' && c <= '9')
+ unicode += c - '0';
+ else if (c >= 'a' && c <= 'f')
+ unicode += c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ unicode += c - 'A' + 10;
+ else
+ return addError(
+ "Bad unicode escape sequence in string: hexadecimal digit expected.",
+ token, current);
+ }
+ ret_unicode = static_cast<unsigned int>(unicode);
+ return true;
+}
+
+bool Reader::addError(const String& message, Token& token, Location extra) {
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = extra;
+ errors_.push_back(info);
+ return false;
+}
+
+bool Reader::recoverFromError(TokenType skipUntilToken) {
+ size_t const errorCount = errors_.size();
+ Token skip;
+ for (;;) {
+ if (!readToken(skip))
+ errors_.resize(errorCount); // discard errors caused by recovery
+ if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+ break;
+ }
+ errors_.resize(errorCount);
+ return false;
+}
+
+bool Reader::addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken) {
+ addError(message, token);
+ return recoverFromError(skipUntilToken);
+}
+
+Value& Reader::currentValue() { return *(nodes_.top()); }
+
+Reader::Char Reader::getNextChar() {
+ if (current_ == end_)
+ return 0;
+ return *current_++;
+}
+
+void Reader::getLocationLineAndColumn(Location location, int& line,
+ int& column) const {
+ Location current = begin_;
+ Location lastLineStart = current;
+ line = 0;
+ while (current < location && current != end_) {
+ Char c = *current++;
+ if (c == '\r') {
+ if (*current == '\n')
+ ++current;
+ lastLineStart = current;
+ ++line;
+ } else if (c == '\n') {
+ lastLineStart = current;
+ ++line;
+ }
+ }
+ // column & line start at 1
+ column = int(location - lastLineStart) + 1;
+ ++line;
+}
+
+String Reader::getLocationLineAndColumn(Location location) const {
+ int line, column;
+ getLocationLineAndColumn(location, line, column);
+ char buffer[18 + 16 + 16 + 1];
+ jsoncpp_snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+ return buffer;
+}
+
+// Deprecated. Preserved for backward compatibility
+String Reader::getFormatedErrorMessages() const {
+ return getFormattedErrorMessages();
+}
+
+String Reader::getFormattedErrorMessages() const {
+ String formattedMessage;
+ for (const auto& error : errors_) {
+ formattedMessage +=
+ "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+ formattedMessage += " " + error.message_ + "\n";
+ if (error.extra_)
+ formattedMessage +=
+ "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+ }
+ return formattedMessage;
+}
+
+std::vector<Reader::StructuredError> Reader::getStructuredErrors() const {
+ std::vector<Reader::StructuredError> allErrors;
+ for (const auto& error : errors_) {
+ Reader::StructuredError structured;
+ structured.offset_start = error.token_.start_ - begin_;
+ structured.offset_limit = error.token_.end_ - begin_;
+ structured.message = error.message_;
+ allErrors.push_back(structured);
+ }
+ return allErrors;
+}
+
+bool Reader::pushError(const Value& value, const String& message) {
+ ptrdiff_t const length = end_ - begin_;
+ if (value.getOffsetStart() > length || value.getOffsetLimit() > length)
+ return false;
+ Token token;
+ token.type_ = tokenError;
+ token.start_ = begin_ + value.getOffsetStart();
+ token.end_ = begin_ + value.getOffsetLimit();
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = nullptr;
+ errors_.push_back(info);
+ return true;
+}
+
+bool Reader::pushError(const Value& value, const String& message,
+ const Value& extra) {
+ ptrdiff_t const length = end_ - begin_;
+ if (value.getOffsetStart() > length || value.getOffsetLimit() > length ||
+ extra.getOffsetLimit() > length)
+ return false;
+ Token token;
+ token.type_ = tokenError;
+ token.start_ = begin_ + value.getOffsetStart();
+ token.end_ = begin_ + value.getOffsetLimit();
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = begin_ + extra.getOffsetStart();
+ errors_.push_back(info);
+ return true;
+}
+
+bool Reader::good() const { return errors_.empty(); }
+
+// Originally copied from the Features class (now deprecated), used internally
+// for features implementation.
+class OurFeatures {
+public:
+ static OurFeatures all();
+ bool allowComments_;
+ bool allowTrailingCommas_;
+ bool strictRoot_;
+ bool allowDroppedNullPlaceholders_;
+ bool allowNumericKeys_;
+ bool allowSingleQuotes_;
+ bool failIfExtra_;
+ bool rejectDupKeys_;
+ bool allowSpecialFloats_;
+ bool skipBom_;
+ size_t stackLimit_;
+}; // OurFeatures
+
+OurFeatures OurFeatures::all() { return {}; }
+
+// Implementation of class Reader
+// ////////////////////////////////
+
+// Originally copied from the Reader class (now deprecated), used internally
+// for implementing JSON reading.
+class OurReader {
+public:
+ using Char = char;
+ using Location = const Char*;
+ struct StructuredError {
+ ptrdiff_t offset_start;
+ ptrdiff_t offset_limit;
+ String message;
+ };
+
+ explicit OurReader(OurFeatures const& features);
+ bool parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments = true);
+ String getFormattedErrorMessages() const;
+ std::vector<StructuredError> getStructuredErrors() const;
+
+private:
+ OurReader(OurReader const&); // no impl
+ void operator=(OurReader const&); // no impl
+
+ enum TokenType {
+ tokenEndOfStream = 0,
+ tokenObjectBegin,
+ tokenObjectEnd,
+ tokenArrayBegin,
+ tokenArrayEnd,
+ tokenString,
+ tokenNumber,
+ tokenTrue,
+ tokenFalse,
+ tokenNull,
+ tokenNaN,
+ tokenPosInf,
+ tokenNegInf,
+ tokenArraySeparator,
+ tokenMemberSeparator,
+ tokenComment,
+ tokenError
+ };
+
+ class Token {
+ public:
+ TokenType type_;
+ Location start_;
+ Location end_;
+ };
+
+ class ErrorInfo {
+ public:
+ Token token_;
+ String message_;
+ Location extra_;
+ };
+
+ using Errors = std::deque<ErrorInfo>;
+
+ bool readToken(Token& token);
+ void skipSpaces();
+ void skipBom(bool skipBom);
+ bool match(const Char* pattern, int patternLength);
+ bool readComment();
+ bool readCStyleComment(bool* containsNewLineResult);
+ bool readCppStyleComment();
+ bool readString();
+ bool readStringSingleQuote();
+ bool readNumber(bool checkInf);
+ bool readValue();
+ bool readObject(Token& token);
+ bool readArray(Token& token);
+ bool decodeNumber(Token& token);
+ bool decodeNumber(Token& token, Value& decoded);
+ bool decodeString(Token& token);
+ bool decodeString(Token& token, String& decoded);
+ bool decodeDouble(Token& token);
+ bool decodeDouble(Token& token, Value& decoded);
+ bool decodeUnicodeCodePoint(Token& token, Location& current, Location end,
+ unsigned int& unicode);
+ bool decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end, unsigned int& unicode);
+ bool addError(const String& message, Token& token, Location extra = nullptr);
+ bool recoverFromError(TokenType skipUntilToken);
+ bool addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken);
+ void skipUntilSpace();
+ Value& currentValue();
+ Char getNextChar();
+ void getLocationLineAndColumn(Location location, int& line,
+ int& column) const;
+ String getLocationLineAndColumn(Location location) const;
+ void addComment(Location begin, Location end, CommentPlacement placement);
+ void skipCommentTokens(Token& token);
+
+ static String normalizeEOL(Location begin, Location end);
+ static bool containsNewLine(Location begin, Location end);
+
+ using Nodes = std::stack<Value*>;
+
+ Nodes nodes_{};
+ Errors errors_{};
+ String document_{};
+ Location begin_ = nullptr;
+ Location end_ = nullptr;
+ Location current_ = nullptr;
+ Location lastValueEnd_ = nullptr;
+ Value* lastValue_ = nullptr;
+ bool lastValueHasAComment_ = false;
+ String commentsBefore_{};
+
+ OurFeatures const features_;
+ bool collectComments_ = false;
+}; // OurReader
+
+// complete copy of Read impl, for OurReader
+
+bool OurReader::containsNewLine(OurReader::Location begin,
+ OurReader::Location end) {
+ return std::any_of(begin, end, [](char b) { return b == '\n' || b == '\r'; });
+}
+
+OurReader::OurReader(OurFeatures const& features) : features_(features) {}
+
+bool OurReader::parse(const char* beginDoc, const char* endDoc, Value& root,
+ bool collectComments) {
+ if (!features_.allowComments_) {
+ collectComments = false;
+ }
+
+ begin_ = beginDoc;
+ end_ = endDoc;
+ collectComments_ = collectComments;
+ current_ = begin_;
+ lastValueEnd_ = nullptr;
+ lastValue_ = nullptr;
+ commentsBefore_.clear();
+ errors_.clear();
+ while (!nodes_.empty())
+ nodes_.pop();
+ nodes_.push(&root);
+
+ // skip byte order mark if it exists at the beginning of the UTF-8 text.
+ skipBom(features_.skipBom_);
+ bool successful = readValue();
+ nodes_.pop();
+ Token token;
+ skipCommentTokens(token);
+ if (features_.failIfExtra_ && (token.type_ != tokenEndOfStream)) {
+ addError("Extra non-whitespace after JSON value.", token);
+ return false;
+ }
+ if (collectComments_ && !commentsBefore_.empty())
+ root.setComment(commentsBefore_, commentAfter);
+ if (features_.strictRoot_) {
+ if (!root.isArray() && !root.isObject()) {
+ // Set error location to start of doc, ideally should be first token found
+ // in doc
+ token.type_ = tokenError;
+ token.start_ = beginDoc;
+ token.end_ = endDoc;
+ addError(
+ "A valid JSON document must be either an array or an object value.",
+ token);
+ return false;
+ }
+ }
+ return successful;
+}
+
+bool OurReader::readValue() {
+ // To preserve the old behaviour we cast size_t to int.
+ if (nodes_.size() > features_.stackLimit_)
+ throwRuntimeError("Exceeded stackLimit in readValue().");
+ Token token;
+ skipCommentTokens(token);
+ bool successful = true;
+
+ if (collectComments_ && !commentsBefore_.empty()) {
+ currentValue().setComment(commentsBefore_, commentBefore);
+ commentsBefore_.clear();
+ }
+
+ switch (token.type_) {
+ case tokenObjectBegin:
+ successful = readObject(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenArrayBegin:
+ successful = readArray(token);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ case tokenNumber:
+ successful = decodeNumber(token);
+ break;
+ case tokenString:
+ successful = decodeString(token);
+ break;
+ case tokenTrue: {
+ Value v(true);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenFalse: {
+ Value v(false);
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNull: {
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNaN: {
+ Value v(std::numeric_limits<double>::quiet_NaN());
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenPosInf: {
+ Value v(std::numeric_limits<double>::infinity());
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenNegInf: {
+ Value v(-std::numeric_limits<double>::infinity());
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ } break;
+ case tokenArraySeparator:
+ case tokenObjectEnd:
+ case tokenArrayEnd:
+ if (features_.allowDroppedNullPlaceholders_) {
+ // "Un-read" the current token and mark the current value as a null
+ // token.
+ current_--;
+ Value v;
+ currentValue().swapPayload(v);
+ currentValue().setOffsetStart(current_ - begin_ - 1);
+ currentValue().setOffsetLimit(current_ - begin_);
+ break;
+ } // else, fall through ...
+ default:
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return addError("Syntax error: value, object or array expected.", token);
+ }
+
+ if (collectComments_) {
+ lastValueEnd_ = current_;
+ lastValueHasAComment_ = false;
+ lastValue_ = &currentValue();
+ }
+
+ return successful;
+}
+
+void OurReader::skipCommentTokens(Token& token) {
+ if (features_.allowComments_) {
+ do {
+ readToken(token);
+ } while (token.type_ == tokenComment);
+ } else {
+ readToken(token);
+ }
+}
+
+bool OurReader::readToken(Token& token) {
+ skipSpaces();
+ token.start_ = current_;
+ Char c = getNextChar();
+ bool ok = true;
+ switch (c) {
+ case '{':
+ token.type_ = tokenObjectBegin;
+ break;
+ case '}':
+ token.type_ = tokenObjectEnd;
+ break;
+ case '[':
+ token.type_ = tokenArrayBegin;
+ break;
+ case ']':
+ token.type_ = tokenArrayEnd;
+ break;
+ case '"':
+ token.type_ = tokenString;
+ ok = readString();
+ break;
+ case '\'':
+ if (features_.allowSingleQuotes_) {
+ token.type_ = tokenString;
+ ok = readStringSingleQuote();
+ } else {
+ // If we don't allow single quotes, this is a failure case.
+ ok = false;
+ }
+ break;
+ case '/':
+ token.type_ = tokenComment;
+ ok = readComment();
+ break;
+ case '0':
+ case '1':
+ case '2':
+ case '3':
+ case '4':
+ case '5':
+ case '6':
+ case '7':
+ case '8':
+ case '9':
+ token.type_ = tokenNumber;
+ readNumber(false);
+ break;
+ case '-':
+ if (readNumber(true)) {
+ token.type_ = tokenNumber;
+ } else {
+ token.type_ = tokenNegInf;
+ ok = features_.allowSpecialFloats_ && match("nfinity", 7);
+ }
+ break;
+ case '+':
+ if (readNumber(true)) {
+ token.type_ = tokenNumber;
+ } else {
+ token.type_ = tokenPosInf;
+ ok = features_.allowSpecialFloats_ && match("nfinity", 7);
+ }
+ break;
+ case 't':
+ token.type_ = tokenTrue;
+ ok = match("rue", 3);
+ break;
+ case 'f':
+ token.type_ = tokenFalse;
+ ok = match("alse", 4);
+ break;
+ case 'n':
+ token.type_ = tokenNull;
+ ok = match("ull", 3);
+ break;
+ case 'N':
+ if (features_.allowSpecialFloats_) {
+ token.type_ = tokenNaN;
+ ok = match("aN", 2);
+ } else {
+ ok = false;
+ }
+ break;
+ case 'I':
+ if (features_.allowSpecialFloats_) {
+ token.type_ = tokenPosInf;
+ ok = match("nfinity", 7);
+ } else {
+ ok = false;
+ }
+ break;
+ case ',':
+ token.type_ = tokenArraySeparator;
+ break;
+ case ':':
+ token.type_ = tokenMemberSeparator;
+ break;
+ case 0:
+ token.type_ = tokenEndOfStream;
+ break;
+ default:
+ ok = false;
+ break;
+ }
+ if (!ok)
+ token.type_ = tokenError;
+ token.end_ = current_;
+ return ok;
+}
+
+void OurReader::skipSpaces() {
+ while (current_ != end_) {
+ Char c = *current_;
+ if (c == ' ' || c == '\t' || c == '\r' || c == '\n')
+ ++current_;
+ else
+ break;
+ }
+}
+
+void OurReader::skipBom(bool skipBom) {
+ // The default behavior is to skip BOM.
+ if (skipBom) {
+ if ((end_ - begin_) >= 3 && strncmp(begin_, "\xEF\xBB\xBF", 3) == 0) {
+ begin_ += 3;
+ current_ = begin_;
+ }
+ }
+}
+
+bool OurReader::match(const Char* pattern, int patternLength) {
+ if (end_ - current_ < patternLength)
+ return false;
+ int index = patternLength;
+ while (index--)
+ if (current_[index] != pattern[index])
+ return false;
+ current_ += patternLength;
+ return true;
+}
+
+bool OurReader::readComment() {
+ const Location commentBegin = current_ - 1;
+ const Char c = getNextChar();
+ bool successful = false;
+ bool cStyleWithEmbeddedNewline = false;
+
+ const bool isCStyleComment = (c == '*');
+ const bool isCppStyleComment = (c == '/');
+ if (isCStyleComment) {
+ successful = readCStyleComment(&cStyleWithEmbeddedNewline);
+ } else if (isCppStyleComment) {
+ successful = readCppStyleComment();
+ }
+
+ if (!successful)
+ return false;
+
+ if (collectComments_) {
+ CommentPlacement placement = commentBefore;
+
+ if (!lastValueHasAComment_) {
+ if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) {
+ if (isCppStyleComment || !cStyleWithEmbeddedNewline) {
+ placement = commentAfterOnSameLine;
+ lastValueHasAComment_ = true;
+ }
+ }
+ }
+
+ addComment(commentBegin, current_, placement);
+ }
+ return true;
+}
+
+String OurReader::normalizeEOL(OurReader::Location begin,
+ OurReader::Location end) {
+ String normalized;
+ normalized.reserve(static_cast<size_t>(end - begin));
+ OurReader::Location current = begin;
+ while (current != end) {
+ char c = *current++;
+ if (c == '\r') {
+ if (current != end && *current == '\n')
+ // convert dos EOL
+ ++current;
+ // convert Mac EOL
+ normalized += '\n';
+ } else {
+ normalized += c;
+ }
+ }
+ return normalized;
+}
+
+void OurReader::addComment(Location begin, Location end,
+ CommentPlacement placement) {
+ assert(collectComments_);
+ const String& normalized = normalizeEOL(begin, end);
+ if (placement == commentAfterOnSameLine) {
+ assert(lastValue_ != nullptr);
+ lastValue_->setComment(normalized, placement);
+ } else {
+ commentsBefore_ += normalized;
+ }
+}
+
+bool OurReader::readCStyleComment(bool* containsNewLineResult) {
+ *containsNewLineResult = false;
+
+ while ((current_ + 1) < end_) {
+ Char c = getNextChar();
+ if (c == '*' && *current_ == '/')
+ break;
+ if (c == '\n')
+ *containsNewLineResult = true;
+ }
+
+ return getNextChar() == '/';
+}
+
+bool OurReader::readCppStyleComment() {
+ while (current_ != end_) {
+ Char c = getNextChar();
+ if (c == '\n')
+ break;
+ if (c == '\r') {
+ // Consume DOS EOL. It will be normalized in addComment.
+ if (current_ != end_ && *current_ == '\n')
+ getNextChar();
+ // Break on Moc OS 9 EOL.
+ break;
+ }
+ }
+ return true;
+}
+
+bool OurReader::readNumber(bool checkInf) {
+ Location p = current_;
+ if (checkInf && p != end_ && *p == 'I') {
+ current_ = ++p;
+ return false;
+ }
+ char c = '0'; // stopgap for already consumed character
+ // integral part
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ // fractional part
+ if (c == '.') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+ // exponential part
+ if (c == 'e' || c == 'E') {
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ if (c == '+' || c == '-')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ while (c >= '0' && c <= '9')
+ c = (current_ = p) < end_ ? *p++ : '\0';
+ }
+ return true;
+}
+bool OurReader::readString() {
+ Char c = 0;
+ while (current_ != end_) {
+ c = getNextChar();
+ if (c == '\\')
+ getNextChar();
+ else if (c == '"')
+ break;
+ }
+ return c == '"';
+}
+
+bool OurReader::readStringSingleQuote() {
+ Char c = 0;
+ while (current_ != end_) {
+ c = getNextChar();
+ if (c == '\\')
+ getNextChar();
+ else if (c == '\'')
+ break;
+ }
+ return c == '\'';
+}
+
+bool OurReader::readObject(Token& token) {
+ Token tokenName;
+ String name;
+ Value init(objectValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ while (readToken(tokenName)) {
+ bool initialTokenOk = true;
+ while (tokenName.type_ == tokenComment && initialTokenOk)
+ initialTokenOk = readToken(tokenName);
+ if (!initialTokenOk)
+ break;
+ if (tokenName.type_ == tokenObjectEnd &&
+ (name.empty() ||
+ features_.allowTrailingCommas_)) // empty object or trailing comma
+ return true;
+ name.clear();
+ if (tokenName.type_ == tokenString) {
+ if (!decodeString(tokenName, name))
+ return recoverFromError(tokenObjectEnd);
+ } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) {
+ Value numberName;
+ if (!decodeNumber(tokenName, numberName))
+ return recoverFromError(tokenObjectEnd);
+ name = numberName.asString();
+ } else {
+ break;
+ }
+ if (name.length() >= (1U << 30))
+ throwRuntimeError("keylength >= 2^30");
+ if (features_.rejectDupKeys_ && currentValue().isMember(name)) {
+ String msg = "Duplicate key: '" + name + "'";
+ return addErrorAndRecover(msg, tokenName, tokenObjectEnd);
+ }
+
+ Token colon;
+ if (!readToken(colon) || colon.type_ != tokenMemberSeparator) {
+ return addErrorAndRecover("Missing ':' after object member name", colon,
+ tokenObjectEnd);
+ }
+ Value& value = currentValue()[name];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenObjectEnd);
+
+ Token comma;
+ if (!readToken(comma) ||
+ (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator &&
+ comma.type_ != tokenComment)) {
+ return addErrorAndRecover("Missing ',' or '}' in object declaration",
+ comma, tokenObjectEnd);
+ }
+ bool finalizeTokenOk = true;
+ while (comma.type_ == tokenComment && finalizeTokenOk)
+ finalizeTokenOk = readToken(comma);
+ if (comma.type_ == tokenObjectEnd)
+ return true;
+ }
+ return addErrorAndRecover("Missing '}' or object member name", tokenName,
+ tokenObjectEnd);
+}
+
+bool OurReader::readArray(Token& token) {
+ Value init(arrayValue);
+ currentValue().swapPayload(init);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ int index = 0;
+ for (;;) {
+ skipSpaces();
+ if (current_ != end_ && *current_ == ']' &&
+ (index == 0 ||
+ (features_.allowTrailingCommas_ &&
+ !features_.allowDroppedNullPlaceholders_))) // empty array or trailing
+ // comma
+ {
+ Token endArray;
+ readToken(endArray);
+ return true;
+ }
+ Value& value = currentValue()[index++];
+ nodes_.push(&value);
+ bool ok = readValue();
+ nodes_.pop();
+ if (!ok) // error already set
+ return recoverFromError(tokenArrayEnd);
+
+ Token currentToken;
+ // Accept Comment after last item in the array.
+ ok = readToken(currentToken);
+ while (currentToken.type_ == tokenComment && ok) {
+ ok = readToken(currentToken);
+ }
+ bool badTokenType = (currentToken.type_ != tokenArraySeparator &&
+ currentToken.type_ != tokenArrayEnd);
+ if (!ok || badTokenType) {
+ return addErrorAndRecover("Missing ',' or ']' in array declaration",
+ currentToken, tokenArrayEnd);
+ }
+ if (currentToken.type_ == tokenArrayEnd)
+ break;
+ }
+ return true;
+}
+
+bool OurReader::decodeNumber(Token& token) {
+ Value decoded;
+ if (!decodeNumber(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool OurReader::decodeNumber(Token& token, Value& decoded) {
+ // Attempts to parse the number as an integer. If the number is
+ // larger than the maximum supported value of an integer then
+ // we decode the number as a double.
+ Location current = token.start_;
+ const bool isNegative = *current == '-';
+ if (isNegative) {
+ ++current;
+ }
+
+ // We assume we can represent the largest and smallest integer types as
+ // unsigned integers with separate sign. This is only true if they can fit
+ // into an unsigned integer.
+ static_assert(Value::maxLargestInt <= Value::maxLargestUInt,
+ "Int must be smaller than UInt");
+
+ // We need to convert minLargestInt into a positive number. The easiest way
+ // to do this conversion is to assume our "threshold" value of minLargestInt
+ // divided by 10 can fit in maxLargestInt when absolute valued. This should
+ // be a safe assumption.
+ static_assert(Value::minLargestInt <= -Value::maxLargestInt,
+ "The absolute value of minLargestInt must be greater than or "
+ "equal to maxLargestInt");
+ static_assert(Value::minLargestInt / 10 >= -Value::maxLargestInt,
+ "The absolute value of minLargestInt must be only 1 magnitude "
+ "larger than maxLargest Int");
+
+ static constexpr Value::LargestUInt positive_threshold =
+ Value::maxLargestUInt / 10;
+ static constexpr Value::UInt positive_last_digit = Value::maxLargestUInt % 10;
+
+ // For the negative values, we have to be more careful. Since typically
+ // -Value::minLargestInt will cause an overflow, we first divide by 10 and
+ // then take the inverse. This assumes that minLargestInt is only a single
+ // power of 10 different in magnitude, which we check above. For the last
+ // digit, we take the modulus before negating for the same reason.
+ static constexpr auto negative_threshold =
+ Value::LargestUInt(-(Value::minLargestInt / 10));
+ static constexpr auto negative_last_digit =
+ Value::UInt(-(Value::minLargestInt % 10));
+
+ const Value::LargestUInt threshold =
+ isNegative ? negative_threshold : positive_threshold;
+ const Value::UInt max_last_digit =
+ isNegative ? negative_last_digit : positive_last_digit;
+
+ Value::LargestUInt value = 0;
+ while (current < token.end_) {
+ Char c = *current++;
+ if (c < '0' || c > '9')
+ return decodeDouble(token, decoded);
+
+ const auto digit(static_cast<Value::UInt>(c - '0'));
+ if (value >= threshold) {
+ // We've hit or exceeded the max value divided by 10 (rounded down). If
+ // a) we've only just touched the limit, meaing value == threshold,
+ // b) this is the last digit, or
+ // c) it's small enough to fit in that rounding delta, we're okay.
+ // Otherwise treat this number as a double to avoid overflow.
+ if (value > threshold || current != token.end_ ||
+ digit > max_last_digit) {
+ return decodeDouble(token, decoded);
+ }
+ }
+ value = value * 10 + digit;
+ }
+
+ if (isNegative) {
+ // We use the same magnitude assumption here, just in case.
+ const auto last_digit = static_cast<Value::UInt>(value % 10);
+ decoded = -Value::LargestInt(value / 10) * 10 - last_digit;
+ } else if (value <= Value::LargestUInt(Value::maxLargestInt)) {
+ decoded = Value::LargestInt(value);
+ } else {
+ decoded = value;
+ }
+
+ return true;
+}
+
+bool OurReader::decodeDouble(Token& token) {
+ Value decoded;
+ if (!decodeDouble(token, decoded))
+ return false;
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool OurReader::decodeDouble(Token& token, Value& decoded) {
+ double value = 0;
+ const String buffer(token.start_, token.end_);
+ IStringStream is(buffer);
+ if (!(is >> value)) {
+ return addError(
+ "'" + String(token.start_, token.end_) + "' is not a number.", token);
+ }
+ decoded = value;
+ return true;
+}
+
+bool OurReader::decodeString(Token& token) {
+ String decoded_string;
+ if (!decodeString(token, decoded_string))
+ return false;
+ Value decoded(decoded_string);
+ currentValue().swapPayload(decoded);
+ currentValue().setOffsetStart(token.start_ - begin_);
+ currentValue().setOffsetLimit(token.end_ - begin_);
+ return true;
+}
+
+bool OurReader::decodeString(Token& token, String& decoded) {
+ decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2));
+ Location current = token.start_ + 1; // skip '"'
+ Location end = token.end_ - 1; // do not include '"'
+ while (current != end) {
+ Char c = *current++;
+ if (c == '"')
+ break;
+ if (c == '\\') {
+ if (current == end)
+ return addError("Empty escape sequence in string", token, current);
+ Char escape = *current++;
+ switch (escape) {
+ case '"':
+ decoded += '"';
+ break;
+ case '/':
+ decoded += '/';
+ break;
+ case '\\':
+ decoded += '\\';
+ break;
+ case 'b':
+ decoded += '\b';
+ break;
+ case 'f':
+ decoded += '\f';
+ break;
+ case 'n':
+ decoded += '\n';
+ break;
+ case 'r':
+ decoded += '\r';
+ break;
+ case 't':
+ decoded += '\t';
+ break;
+ case 'u': {
+ unsigned int unicode;
+ if (!decodeUnicodeCodePoint(token, current, end, unicode))
+ return false;
+ decoded += codePointToUTF8(unicode);
+ } break;
+ default:
+ return addError("Bad escape sequence in string", token, current);
+ }
+ } else {
+ decoded += c;
+ }
+ }
+ return true;
+}
+
+bool OurReader::decodeUnicodeCodePoint(Token& token, Location& current,
+ Location end, unsigned int& unicode) {
+
+ if (!decodeUnicodeEscapeSequence(token, current, end, unicode))
+ return false;
+ if (unicode >= 0xD800 && unicode <= 0xDBFF) {
+ // surrogate pairs
+ if (end - current < 6)
+ return addError(
+ "additional six characters expected to parse unicode surrogate pair.",
+ token, current);
+ if (*(current++) == '\\' && *(current++) == 'u') {
+ unsigned int surrogatePair;
+ if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) {
+ unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF);
+ } else
+ return false;
+ } else
+ return addError("expecting another \\u token to begin the second half of "
+ "a unicode surrogate pair",
+ token, current);
+ }
+ return true;
+}
+
+bool OurReader::decodeUnicodeEscapeSequence(Token& token, Location& current,
+ Location end,
+ unsigned int& ret_unicode) {
+ if (end - current < 4)
+ return addError(
+ "Bad unicode escape sequence in string: four digits expected.", token,
+ current);
+ int unicode = 0;
+ for (int index = 0; index < 4; ++index) {
+ Char c = *current++;
+ unicode *= 16;
+ if (c >= '0' && c <= '9')
+ unicode += c - '0';
+ else if (c >= 'a' && c <= 'f')
+ unicode += c - 'a' + 10;
+ else if (c >= 'A' && c <= 'F')
+ unicode += c - 'A' + 10;
+ else
+ return addError(
+ "Bad unicode escape sequence in string: hexadecimal digit expected.",
+ token, current);
+ }
+ ret_unicode = static_cast<unsigned int>(unicode);
+ return true;
+}
+
+bool OurReader::addError(const String& message, Token& token, Location extra) {
+ ErrorInfo info;
+ info.token_ = token;
+ info.message_ = message;
+ info.extra_ = extra;
+ errors_.push_back(info);
+ return false;
+}
+
+bool OurReader::recoverFromError(TokenType skipUntilToken) {
+ size_t errorCount = errors_.size();
+ Token skip;
+ for (;;) {
+ if (!readToken(skip))
+ errors_.resize(errorCount); // discard errors caused by recovery
+ if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream)
+ break;
+ }
+ errors_.resize(errorCount);
+ return false;
+}
+
+bool OurReader::addErrorAndRecover(const String& message, Token& token,
+ TokenType skipUntilToken) {
+ addError(message, token);
+ return recoverFromError(skipUntilToken);
+}
+
+Value& OurReader::currentValue() { return *(nodes_.top()); }
+
+OurReader::Char OurReader::getNextChar() {
+ if (current_ == end_)
+ return 0;
+ return *current_++;
+}
+
+void OurReader::getLocationLineAndColumn(Location location, int& line,
+ int& column) const {
+ Location current = begin_;
+ Location lastLineStart = current;
+ line = 0;
+ while (current < location && current != end_) {
+ Char c = *current++;
+ if (c == '\r') {
+ if (*current == '\n')
+ ++current;
+ lastLineStart = current;
+ ++line;
+ } else if (c == '\n') {
+ lastLineStart = current;
+ ++line;
+ }
+ }
+ // column & line start at 1
+ column = int(location - lastLineStart) + 1;
+ ++line;
+}
+
+String OurReader::getLocationLineAndColumn(Location location) const {
+ int line, column;
+ getLocationLineAndColumn(location, line, column);
+ char buffer[18 + 16 + 16 + 1];
+ jsoncpp_snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column);
+ return buffer;
+}
+
+String OurReader::getFormattedErrorMessages() const {
+ String formattedMessage;
+ for (const auto& error : errors_) {
+ formattedMessage +=
+ "* " + getLocationLineAndColumn(error.token_.start_) + "\n";
+ formattedMessage += " " + error.message_ + "\n";
+ if (error.extra_)
+ formattedMessage +=
+ "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n";
+ }
+ return formattedMessage;
+}
+
+std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const {
+ std::vector<OurReader::StructuredError> allErrors;
+ for (const auto& error : errors_) {
+ OurReader::StructuredError structured;
+ structured.offset_start = error.token_.start_ - begin_;
+ structured.offset_limit = error.token_.end_ - begin_;
+ structured.message = error.message_;
+ allErrors.push_back(structured);
+ }
+ return allErrors;
+}
+
+class OurCharReader : public CharReader {
+ bool const collectComments_;
+ OurReader reader_;
+
+public:
+ OurCharReader(bool collectComments, OurFeatures const& features)
+ : collectComments_(collectComments), reader_(features) {}
+ bool parse(char const* beginDoc, char const* endDoc, Value* root,
+ String* errs) override {
+ bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_);
+ if (errs) {
+ *errs = reader_.getFormattedErrorMessages();
+ }
+ return ok;
+ }
+};
+
+CharReaderBuilder::CharReaderBuilder() { setDefaults(&settings_); }
+CharReaderBuilder::~CharReaderBuilder() = default;
+CharReader* CharReaderBuilder::newCharReader() const {
+ bool collectComments = settings_["collectComments"].asBool();
+ OurFeatures features = OurFeatures::all();
+ features.allowComments_ = settings_["allowComments"].asBool();
+ features.allowTrailingCommas_ = settings_["allowTrailingCommas"].asBool();
+ features.strictRoot_ = settings_["strictRoot"].asBool();
+ features.allowDroppedNullPlaceholders_ =
+ settings_["allowDroppedNullPlaceholders"].asBool();
+ features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool();
+ features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool();
+
+ // Stack limit is always a size_t, so we get this as an unsigned int
+ // regardless of it we have 64-bit integer support enabled.
+ features.stackLimit_ = static_cast<size_t>(settings_["stackLimit"].asUInt());
+ features.failIfExtra_ = settings_["failIfExtra"].asBool();
+ features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool();
+ features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool();
+ features.skipBom_ = settings_["skipBom"].asBool();
+ return new OurCharReader(collectComments, features);
+}
+
+bool CharReaderBuilder::validate(Json::Value* invalid) const {
+ static const auto& valid_keys = *new std::set<String>{
+ "collectComments",
+ "allowComments",
+ "allowTrailingCommas",
+ "strictRoot",
+ "allowDroppedNullPlaceholders",
+ "allowNumericKeys",
+ "allowSingleQuotes",
+ "stackLimit",
+ "failIfExtra",
+ "rejectDupKeys",
+ "allowSpecialFloats",
+ "skipBom",
+ };
+ for (auto si = settings_.begin(); si != settings_.end(); ++si) {
+ auto key = si.name();
+ if (valid_keys.count(key))
+ continue;
+ if (invalid)
+ (*invalid)[key] = *si;
+ else
+ return false;
+ }
+ return invalid ? invalid->empty() : true;
+}
+
+Value& CharReaderBuilder::operator[](const String& key) {
+ return settings_[key];
+}
+// static
+void CharReaderBuilder::strictMode(Json::Value* settings) {
+ //! [CharReaderBuilderStrictMode]
+ (*settings)["allowComments"] = false;
+ (*settings)["allowTrailingCommas"] = false;
+ (*settings)["strictRoot"] = true;
+ (*settings)["allowDroppedNullPlaceholders"] = false;
+ (*settings)["allowNumericKeys"] = false;
+ (*settings)["allowSingleQuotes"] = false;
+ (*settings)["stackLimit"] = 1000;
+ (*settings)["failIfExtra"] = true;
+ (*settings)["rejectDupKeys"] = true;
+ (*settings)["allowSpecialFloats"] = false;
+ (*settings)["skipBom"] = true;
+ //! [CharReaderBuilderStrictMode]
+}
+// static
+void CharReaderBuilder::setDefaults(Json::Value* settings) {
+ //! [CharReaderBuilderDefaults]
+ (*settings)["collectComments"] = true;
+ (*settings)["allowComments"] = true;
+ (*settings)["allowTrailingCommas"] = true;
+ (*settings)["strictRoot"] = false;
+ (*settings)["allowDroppedNullPlaceholders"] = false;
+ (*settings)["allowNumericKeys"] = false;
+ (*settings)["allowSingleQuotes"] = false;
+ (*settings)["stackLimit"] = 1000;
+ (*settings)["failIfExtra"] = false;
+ (*settings)["rejectDupKeys"] = false;
+ (*settings)["allowSpecialFloats"] = false;
+ (*settings)["skipBom"] = true;
+ //! [CharReaderBuilderDefaults]
+}
+
+//////////////////////////////////
+// global functions
+
+bool parseFromStream(CharReader::Factory const& fact, IStream& sin, Value* root,
+ String* errs) {
+ OStringStream ssin;
+ ssin << sin.rdbuf();
+ String doc = ssin.str();
+ char const* begin = doc.data();
+ char const* end = begin + doc.size();
+ // Note that we do not actually need a null-terminator.
+ CharReaderPtr const reader(fact.newCharReader());
+ return reader->parse(begin, end, root, errs);
+}
+
+IStream& operator>>(IStream& sin, Value& root) {
+ CharReaderBuilder b;
+ String errs;
+ bool ok = parseFromStream(b, sin, &root, &errs);
+ if (!ok) {
+ throwRuntimeError(errs);
+ }
+ return sin;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h
new file mode 100644
index 0000000000..b952c19167
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_tool.h
@@ -0,0 +1,138 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/config.h>
+#endif
+
+// Also support old flag NO_LOCALE_SUPPORT
+#ifdef NO_LOCALE_SUPPORT
+#define JSONCPP_NO_LOCALE_SUPPORT
+#endif
+
+#ifndef JSONCPP_NO_LOCALE_SUPPORT
+#include <clocale>
+#endif
+
+/* This header provides common string manipulation support, such as UTF-8,
+ * portable conversion from/to string...
+ *
+ * It is an internal header that must not be exposed.
+ */
+
+namespace Json {
+static inline char getDecimalPoint() {
+#ifdef JSONCPP_NO_LOCALE_SUPPORT
+ return '\0';
+#else
+ struct lconv* lc = localeconv();
+ return lc ? *(lc->decimal_point) : '\0';
+#endif
+}
+
+/// Converts a unicode code-point to UTF-8.
+static inline String codePointToUTF8(unsigned int cp) {
+ String result;
+
+ // based on description from http://en.wikipedia.org/wiki/UTF-8
+
+ if (cp <= 0x7f) {
+ result.resize(1);
+ result[0] = static_cast<char>(cp);
+ } else if (cp <= 0x7FF) {
+ result.resize(2);
+ result[1] = static_cast<char>(0x80 | (0x3f & cp));
+ result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6)));
+ } else if (cp <= 0xFFFF) {
+ result.resize(3);
+ result[2] = static_cast<char>(0x80 | (0x3f & cp));
+ result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+ result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12)));
+ } else if (cp <= 0x10FFFF) {
+ result.resize(4);
+ result[3] = static_cast<char>(0x80 | (0x3f & cp));
+ result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6)));
+ result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12)));
+ result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18)));
+ }
+
+ return result;
+}
+
+enum {
+ /// Constant that specify the size of the buffer that must be passed to
+ /// uintToString.
+ uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1
+};
+
+// Defines a char buffer for use with uintToString().
+using UIntToStringBuffer = char[uintToStringBufferSize];
+
+/** Converts an unsigned integer to string.
+ * @param value Unsigned integer to convert to string
+ * @param current Input/Output string buffer.
+ * Must have at least uintToStringBufferSize chars free.
+ */
+static inline void uintToString(LargestUInt value, char*& current) {
+ *--current = 0;
+ do {
+ *--current = static_cast<char>(value % 10U + static_cast<unsigned>('0'));
+ value /= 10;
+ } while (value != 0);
+}
+
+/** Change ',' to '.' everywhere in buffer.
+ *
+ * We had a sophisticated way, but it did not work in WinCE.
+ * @see https://github.com/open-source-parsers/jsoncpp/pull/9
+ */
+template <typename Iter> Iter fixNumericLocale(Iter begin, Iter end) {
+ for (; begin != end; ++begin) {
+ if (*begin == ',') {
+ *begin = '.';
+ }
+ }
+ return begin;
+}
+
+template <typename Iter> void fixNumericLocaleInput(Iter begin, Iter end) {
+ char decimalPoint = getDecimalPoint();
+ if (decimalPoint == '\0' || decimalPoint == '.') {
+ return;
+ }
+ for (; begin != end; ++begin) {
+ if (*begin == '.') {
+ *begin = decimalPoint;
+ }
+ }
+}
+
+/**
+ * Return iterator that would be the new end of the range [begin,end), if we
+ * were to delete zeros in the end of string, but not the last zero before '.'.
+ */
+template <typename Iter>
+Iter fixZerosInTheEnd(Iter begin, Iter end, unsigned int precision) {
+ for (; begin != end; --end) {
+ if (*(end - 1) != '0') {
+ return end;
+ }
+ // Don't delete the last zero before the decimal point.
+ if (begin != (end - 1) && begin != (end - 2) && *(end - 2) == '.') {
+ if (precision) {
+ return end;
+ }
+ return end - 2;
+ }
+ }
+ return end;
+}
+
+} // namespace Json
+
+#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp
new file mode 100644
index 0000000000..aa2b744ca8
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_value.cpp
@@ -0,0 +1,1634 @@
+// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include <json/assertions.h>
+#include <json/value.h>
+#include <json/writer.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <algorithm>
+#include <cassert>
+#include <cmath>
+#include <cstddef>
+#include <cstring>
+#include <iostream>
+#include <sstream>
+#include <utility>
+
+// Provide implementation equivalent of std::snprintf for older _MSC compilers
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#include <stdarg.h>
+static int msvc_pre1900_c99_vsnprintf(char* outBuf, size_t size,
+ const char* format, va_list ap) {
+ int count = -1;
+ if (size != 0)
+ count = _vsnprintf_s(outBuf, size, _TRUNCATE, format, ap);
+ if (count == -1)
+ count = _vscprintf(format, ap);
+ return count;
+}
+
+int JSON_API msvc_pre1900_c99_snprintf(char* outBuf, size_t size,
+ const char* format, ...) {
+ va_list ap;
+ va_start(ap, format);
+ const int count = msvc_pre1900_c99_vsnprintf(outBuf, size, format, ap);
+ va_end(ap);
+ return count;
+}
+#endif
+
+// Disable warning C4702 : unreachable code
+#if defined(_MSC_VER)
+#pragma warning(disable : 4702)
+#endif
+
+#define JSON_ASSERT_UNREACHABLE assert(false)
+
+namespace Json {
+template <typename T>
+static std::unique_ptr<T> cloneUnique(const std::unique_ptr<T>& p) {
+ std::unique_ptr<T> r;
+ if (p) {
+ r = std::unique_ptr<T>(new T(*p));
+ }
+ return r;
+}
+
+// This is a walkaround to avoid the static initialization of Value::null.
+// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of
+// 8 (instead of 4) as a bit of future-proofing.
+#if defined(__ARMEL__)
+#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment)))
+#else
+#define ALIGNAS(byte_alignment)
+#endif
+
+// static
+Value const& Value::nullSingleton() {
+ static Value const nullStatic;
+ return nullStatic;
+}
+
+#if JSON_USE_NULLREF
+// for backwards compatibility, we'll leave these global references around, but
+// DO NOT use them in JSONCPP library code any more!
+// static
+Value const& Value::null = Value::nullSingleton();
+
+// static
+Value const& Value::nullRef = Value::nullSingleton();
+#endif
+
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+ // The casts can lose precision, but we are looking only for
+ // an approximate range. Might fail on edge cases though. ~cdunn
+ return d >= static_cast<double>(min) && d <= static_cast<double>(max);
+}
+#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+static inline double integerToDouble(Json::UInt64 value) {
+ return static_cast<double>(Int64(value / 2)) * 2.0 +
+ static_cast<double>(Int64(value & 1));
+}
+
+template <typename T> static inline double integerToDouble(T value) {
+ return static_cast<double>(value);
+}
+
+template <typename T, typename U>
+static inline bool InRange(double d, T min, U max) {
+ return d >= integerToDouble(min) && d <= integerToDouble(max);
+}
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+
+/** Duplicates the specified string value.
+ * @param value Pointer to the string to duplicate. Must be zero-terminated if
+ * length is "unknown".
+ * @param length Length of the value. if equals to unknown, then it will be
+ * computed using strlen(value).
+ * @return Pointer on the duplicate instance of string.
+ */
+static inline char* duplicateStringValue(const char* value, size_t length) {
+ // Avoid an integer overflow in the call to malloc below by limiting length
+ // to a sane value.
+ if (length >= static_cast<size_t>(Value::maxInt))
+ length = Value::maxInt - 1;
+
+ auto newString = static_cast<char*>(malloc(length + 1));
+ if (newString == nullptr) {
+ throwRuntimeError("in Json::Value::duplicateStringValue(): "
+ "Failed to allocate string value buffer");
+ }
+ memcpy(newString, value, length);
+ newString[length] = 0;
+ return newString;
+}
+
+/* Record the length as a prefix.
+ */
+static inline char* duplicateAndPrefixStringValue(const char* value,
+ unsigned int length) {
+ // Avoid an integer overflow in the call to malloc below by limiting length
+ // to a sane value.
+ JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) -
+ sizeof(unsigned) - 1U,
+ "in Json::Value::duplicateAndPrefixStringValue(): "
+ "length too big for prefixing");
+ size_t actualLength = sizeof(length) + length + 1;
+ auto newString = static_cast<char*>(malloc(actualLength));
+ if (newString == nullptr) {
+ throwRuntimeError("in Json::Value::duplicateAndPrefixStringValue(): "
+ "Failed to allocate string value buffer");
+ }
+ *reinterpret_cast<unsigned*>(newString) = length;
+ memcpy(newString + sizeof(unsigned), value, length);
+ newString[actualLength - 1U] =
+ 0; // to avoid buffer over-run accidents by users later
+ return newString;
+}
+inline static void decodePrefixedString(bool isPrefixed, char const* prefixed,
+ unsigned* length, char const** value) {
+ if (!isPrefixed) {
+ *length = static_cast<unsigned>(strlen(prefixed));
+ *value = prefixed;
+ } else {
+ *length = *reinterpret_cast<unsigned const*>(prefixed);
+ *value = prefixed + sizeof(unsigned);
+ }
+}
+/** Free the string duplicated by
+ * duplicateStringValue()/duplicateAndPrefixStringValue().
+ */
+#if JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) {
+ unsigned length = 0;
+ char const* valueDecoded;
+ decodePrefixedString(true, value, &length, &valueDecoded);
+ size_t const size = sizeof(unsigned) + length + 1U;
+ memset(value, 0, size);
+ free(value);
+}
+static inline void releaseStringValue(char* value, unsigned length) {
+ // length==0 => we allocated the strings memory
+ size_t size = (length == 0) ? strlen(value) : length;
+ memset(value, 0, size);
+ free(value);
+}
+#else // !JSONCPP_USING_SECURE_MEMORY
+static inline void releasePrefixedStringValue(char* value) { free(value); }
+static inline void releaseStringValue(char* value, unsigned) { free(value); }
+#endif // JSONCPP_USING_SECURE_MEMORY
+
+} // namespace Json
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// ValueInternals...
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+#if !defined(JSON_IS_AMALGAMATION)
+
+#include "json_valueiterator.inl"
+#endif // if !defined(JSON_IS_AMALGAMATION)
+
+namespace Json {
+
+#if JSON_USE_EXCEPTION
+Exception::Exception(String msg) : msg_(std::move(msg)) {}
+Exception::~Exception() noexcept = default;
+char const* Exception::what() const noexcept { return msg_.c_str(); }
+RuntimeError::RuntimeError(String const& msg) : Exception(msg) {}
+LogicError::LogicError(String const& msg) : Exception(msg) {}
+JSONCPP_NORETURN void throwRuntimeError(String const& msg) {
+ throw RuntimeError(msg);
+}
+JSONCPP_NORETURN void throwLogicError(String const& msg) {
+ throw LogicError(msg);
+}
+#else // !JSON_USE_EXCEPTION
+JSONCPP_NORETURN void throwRuntimeError(String const& msg) {
+ std::cerr << msg << std::endl;
+ abort();
+}
+JSONCPP_NORETURN void throwLogicError(String const& msg) {
+ std::cerr << msg << std::endl;
+ abort();
+}
+#endif
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::CZString
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+// Notes: policy_ indicates if the string was allocated when
+// a string is stored.
+
+Value::CZString::CZString(ArrayIndex index) : cstr_(nullptr), index_(index) {}
+
+Value::CZString::CZString(char const* str, unsigned length,
+ DuplicationPolicy allocate)
+ : cstr_(str) {
+ // allocate != duplicate
+ storage_.policy_ = allocate & 0x3;
+ storage_.length_ = length & 0x3FFFFFFF;
+}
+
+Value::CZString::CZString(const CZString& other) {
+ cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != nullptr
+ ? duplicateStringValue(other.cstr_, other.storage_.length_)
+ : other.cstr_);
+ storage_.policy_ =
+ static_cast<unsigned>(
+ other.cstr_
+ ? (static_cast<DuplicationPolicy>(other.storage_.policy_) ==
+ noDuplication
+ ? noDuplication
+ : duplicate)
+ : static_cast<DuplicationPolicy>(other.storage_.policy_)) &
+ 3U;
+ storage_.length_ = other.storage_.length_;
+}
+
+Value::CZString::CZString(CZString&& other) noexcept
+ : cstr_(other.cstr_), index_(other.index_) {
+ other.cstr_ = nullptr;
+}
+
+Value::CZString::~CZString() {
+ if (cstr_ && storage_.policy_ == duplicate) {
+ releaseStringValue(const_cast<char*>(cstr_),
+ storage_.length_ + 1U); // +1 for null terminating
+ // character for sake of
+ // completeness but not actually
+ // necessary
+ }
+}
+
+void Value::CZString::swap(CZString& other) {
+ std::swap(cstr_, other.cstr_);
+ std::swap(index_, other.index_);
+}
+
+Value::CZString& Value::CZString::operator=(const CZString& other) {
+ cstr_ = other.cstr_;
+ index_ = other.index_;
+ return *this;
+}
+
+Value::CZString& Value::CZString::operator=(CZString&& other) noexcept {
+ cstr_ = other.cstr_;
+ index_ = other.index_;
+ other.cstr_ = nullptr;
+ return *this;
+}
+
+bool Value::CZString::operator<(const CZString& other) const {
+ if (!cstr_)
+ return index_ < other.index_;
+ // return strcmp(cstr_, other.cstr_) < 0;
+ // Assume both are strings.
+ unsigned this_len = this->storage_.length_;
+ unsigned other_len = other.storage_.length_;
+ unsigned min_len = std::min<unsigned>(this_len, other_len);
+ JSON_ASSERT(this->cstr_ && other.cstr_);
+ int comp = memcmp(this->cstr_, other.cstr_, min_len);
+ if (comp < 0)
+ return true;
+ if (comp > 0)
+ return false;
+ return (this_len < other_len);
+}
+
+bool Value::CZString::operator==(const CZString& other) const {
+ if (!cstr_)
+ return index_ == other.index_;
+ // return strcmp(cstr_, other.cstr_) == 0;
+ // Assume both are strings.
+ unsigned this_len = this->storage_.length_;
+ unsigned other_len = other.storage_.length_;
+ if (this_len != other_len)
+ return false;
+ JSON_ASSERT(this->cstr_ && other.cstr_);
+ int comp = memcmp(this->cstr_, other.cstr_, this_len);
+ return comp == 0;
+}
+
+ArrayIndex Value::CZString::index() const { return index_; }
+
+// const char* Value::CZString::c_str() const { return cstr_; }
+const char* Value::CZString::data() const { return cstr_; }
+unsigned Value::CZString::length() const { return storage_.length_; }
+bool Value::CZString::isStaticString() const {
+ return storage_.policy_ == noDuplication;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class Value::Value
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+/*! \internal Default constructor initialization must be equivalent to:
+ * memset( this, 0, sizeof(Value) )
+ * This optimization is used in ValueInternalMap fast allocator.
+ */
+Value::Value(ValueType type) {
+ static char const emptyString[] = "";
+ initBasic(type);
+ switch (type) {
+ case nullValue:
+ break;
+ case intValue:
+ case uintValue:
+ value_.int_ = 0;
+ break;
+ case realValue:
+ value_.real_ = 0.0;
+ break;
+ case stringValue:
+ // allocated_ == false, so this is safe.
+ value_.string_ = const_cast<char*>(static_cast<char const*>(emptyString));
+ break;
+ case arrayValue:
+ case objectValue:
+ value_.map_ = new ObjectValues();
+ break;
+ case booleanValue:
+ value_.bool_ = false;
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+}
+
+Value::Value(Int value) {
+ initBasic(intValue);
+ value_.int_ = value;
+}
+
+Value::Value(UInt value) {
+ initBasic(uintValue);
+ value_.uint_ = value;
+}
+#if defined(JSON_HAS_INT64)
+Value::Value(Int64 value) {
+ initBasic(intValue);
+ value_.int_ = value;
+}
+Value::Value(UInt64 value) {
+ initBasic(uintValue);
+ value_.uint_ = value;
+}
+#endif // defined(JSON_HAS_INT64)
+
+Value::Value(double value) {
+ initBasic(realValue);
+ value_.real_ = value;
+}
+
+Value::Value(const char* value) {
+ initBasic(stringValue, true);
+ JSON_ASSERT_MESSAGE(value != nullptr,
+ "Null Value Passed to Value Constructor");
+ value_.string_ = duplicateAndPrefixStringValue(
+ value, static_cast<unsigned>(strlen(value)));
+}
+
+Value::Value(const char* begin, const char* end) {
+ initBasic(stringValue, true);
+ value_.string_ =
+ duplicateAndPrefixStringValue(begin, static_cast<unsigned>(end - begin));
+}
+
+Value::Value(const String& value) {
+ initBasic(stringValue, true);
+ value_.string_ = duplicateAndPrefixStringValue(
+ value.data(), static_cast<unsigned>(value.length()));
+}
+
+Value::Value(const StaticString& value) {
+ initBasic(stringValue);
+ value_.string_ = const_cast<char*>(value.c_str());
+}
+
+Value::Value(bool value) {
+ initBasic(booleanValue);
+ value_.bool_ = value;
+}
+
+Value::Value(const Value& other) {
+ dupPayload(other);
+ dupMeta(other);
+}
+
+Value::Value(Value&& other) noexcept {
+ initBasic(nullValue);
+ swap(other);
+}
+
+Value::~Value() {
+ releasePayload();
+ value_.uint_ = 0;
+}
+
+Value& Value::operator=(const Value& other) {
+ Value(other).swap(*this);
+ return *this;
+}
+
+Value& Value::operator=(Value&& other) noexcept {
+ other.swap(*this);
+ return *this;
+}
+
+void Value::swapPayload(Value& other) {
+ std::swap(bits_, other.bits_);
+ std::swap(value_, other.value_);
+}
+
+void Value::copyPayload(const Value& other) {
+ releasePayload();
+ dupPayload(other);
+}
+
+void Value::swap(Value& other) {
+ swapPayload(other);
+ std::swap(comments_, other.comments_);
+ std::swap(start_, other.start_);
+ std::swap(limit_, other.limit_);
+}
+
+void Value::copy(const Value& other) {
+ copyPayload(other);
+ dupMeta(other);
+}
+
+ValueType Value::type() const {
+ return static_cast<ValueType>(bits_.value_type_);
+}
+
+int Value::compare(const Value& other) const {
+ if (*this < other)
+ return -1;
+ if (*this > other)
+ return 1;
+ return 0;
+}
+
+bool Value::operator<(const Value& other) const {
+ int typeDelta = type() - other.type();
+ if (typeDelta)
+ return typeDelta < 0;
+ switch (type()) {
+ case nullValue:
+ return false;
+ case intValue:
+ return value_.int_ < other.value_.int_;
+ case uintValue:
+ return value_.uint_ < other.value_.uint_;
+ case realValue:
+ return value_.real_ < other.value_.real_;
+ case booleanValue:
+ return value_.bool_ < other.value_.bool_;
+ case stringValue: {
+ if ((value_.string_ == nullptr) || (other.value_.string_ == nullptr)) {
+ return other.value_.string_ != nullptr;
+ }
+ unsigned this_len;
+ unsigned other_len;
+ char const* this_str;
+ char const* other_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ decodePrefixedString(other.isAllocated(), other.value_.string_, &other_len,
+ &other_str);
+ unsigned min_len = std::min<unsigned>(this_len, other_len);
+ JSON_ASSERT(this_str && other_str);
+ int comp = memcmp(this_str, other_str, min_len);
+ if (comp < 0)
+ return true;
+ if (comp > 0)
+ return false;
+ return (this_len < other_len);
+ }
+ case arrayValue:
+ case objectValue: {
+ auto thisSize = value_.map_->size();
+ auto otherSize = other.value_.map_->size();
+ if (thisSize != otherSize)
+ return thisSize < otherSize;
+ return (*value_.map_) < (*other.value_.map_);
+ }
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+ return false; // unreachable
+}
+
+bool Value::operator<=(const Value& other) const { return !(other < *this); }
+
+bool Value::operator>=(const Value& other) const { return !(*this < other); }
+
+bool Value::operator>(const Value& other) const { return other < *this; }
+
+bool Value::operator==(const Value& other) const {
+ if (type() != other.type())
+ return false;
+ switch (type()) {
+ case nullValue:
+ return true;
+ case intValue:
+ return value_.int_ == other.value_.int_;
+ case uintValue:
+ return value_.uint_ == other.value_.uint_;
+ case realValue:
+ return value_.real_ == other.value_.real_;
+ case booleanValue:
+ return value_.bool_ == other.value_.bool_;
+ case stringValue: {
+ if ((value_.string_ == nullptr) || (other.value_.string_ == nullptr)) {
+ return (value_.string_ == other.value_.string_);
+ }
+ unsigned this_len;
+ unsigned other_len;
+ char const* this_str;
+ char const* other_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ decodePrefixedString(other.isAllocated(), other.value_.string_, &other_len,
+ &other_str);
+ if (this_len != other_len)
+ return false;
+ JSON_ASSERT(this_str && other_str);
+ int comp = memcmp(this_str, other_str, this_len);
+ return comp == 0;
+ }
+ case arrayValue:
+ case objectValue:
+ return value_.map_->size() == other.value_.map_->size() &&
+ (*value_.map_) == (*other.value_.map_);
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+ return false; // unreachable
+}
+
+bool Value::operator!=(const Value& other) const { return !(*this == other); }
+
+const char* Value::asCString() const {
+ JSON_ASSERT_MESSAGE(type() == stringValue,
+ "in Json::Value::asCString(): requires stringValue");
+ if (value_.string_ == nullptr)
+ return nullptr;
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ return this_str;
+}
+
+#if JSONCPP_USING_SECURE_MEMORY
+unsigned Value::getCStringLength() const {
+ JSON_ASSERT_MESSAGE(type() == stringValue,
+ "in Json::Value::asCString(): requires stringValue");
+ if (value_.string_ == 0)
+ return 0;
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ return this_len;
+}
+#endif
+
+bool Value::getString(char const** begin, char const** end) const {
+ if (type() != stringValue)
+ return false;
+ if (value_.string_ == nullptr)
+ return false;
+ unsigned length;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &length,
+ begin);
+ *end = *begin + length;
+ return true;
+}
+
+String Value::asString() const {
+ switch (type()) {
+ case nullValue:
+ return "";
+ case stringValue: {
+ if (value_.string_ == nullptr)
+ return "";
+ unsigned this_len;
+ char const* this_str;
+ decodePrefixedString(this->isAllocated(), this->value_.string_, &this_len,
+ &this_str);
+ return String(this_str, this_len);
+ }
+ case booleanValue:
+ return value_.bool_ ? "true" : "false";
+ case intValue:
+ return valueToString(value_.int_);
+ case uintValue:
+ return valueToString(value_.uint_);
+ case realValue:
+ return valueToString(value_.real_);
+ default:
+ JSON_FAIL_MESSAGE("Type is not convertible to string");
+ }
+}
+
+Value::Int Value::asInt() const {
+ switch (type()) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range");
+ return Int(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range");
+ return Int(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt),
+ "double out of Int range");
+ return Int(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to Int.");
+}
+
+Value::UInt Value::asUInt() const {
+ switch (type()) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range");
+ return UInt(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range");
+ return UInt(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt),
+ "double out of UInt range");
+ return UInt(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to UInt.");
+}
+
+#if defined(JSON_HAS_INT64)
+
+Value::Int64 Value::asInt64() const {
+ switch (type()) {
+ case intValue:
+ return Int64(value_.int_);
+ case uintValue:
+ JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range");
+ return Int64(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64),
+ "double out of Int64 range");
+ return Int64(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to Int64.");
+}
+
+Value::UInt64 Value::asUInt64() const {
+ switch (type()) {
+ case intValue:
+ JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range");
+ return UInt64(value_.int_);
+ case uintValue:
+ return UInt64(value_.uint_);
+ case realValue:
+ JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64),
+ "double out of UInt64 range");
+ return UInt64(value_.real_);
+ case nullValue:
+ return 0;
+ case booleanValue:
+ return value_.bool_ ? 1 : 0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to UInt64.");
+}
+#endif // if defined(JSON_HAS_INT64)
+
+LargestInt Value::asLargestInt() const {
+#if defined(JSON_NO_INT64)
+ return asInt();
+#else
+ return asInt64();
+#endif
+}
+
+LargestUInt Value::asLargestUInt() const {
+#if defined(JSON_NO_INT64)
+ return asUInt();
+#else
+ return asUInt64();
+#endif
+}
+
+double Value::asDouble() const {
+ switch (type()) {
+ case intValue:
+ return static_cast<double>(value_.int_);
+ case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ return static_cast<double>(value_.uint_);
+#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ return integerToDouble(value_.uint_);
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ case realValue:
+ return value_.real_;
+ case nullValue:
+ return 0.0;
+ case booleanValue:
+ return value_.bool_ ? 1.0 : 0.0;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to double.");
+}
+
+float Value::asFloat() const {
+ switch (type()) {
+ case intValue:
+ return static_cast<float>(value_.int_);
+ case uintValue:
+#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ return static_cast<float>(value_.uint_);
+#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ // This can fail (silently?) if the value is bigger than MAX_FLOAT.
+ return static_cast<float>(integerToDouble(value_.uint_));
+#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION)
+ case realValue:
+ return static_cast<float>(value_.real_);
+ case nullValue:
+ return 0.0;
+ case booleanValue:
+ return value_.bool_ ? 1.0F : 0.0F;
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to float.");
+}
+
+bool Value::asBool() const {
+ switch (type()) {
+ case booleanValue:
+ return value_.bool_;
+ case nullValue:
+ return false;
+ case intValue:
+ return value_.int_ != 0;
+ case uintValue:
+ return value_.uint_ != 0;
+ case realValue: {
+ // According to JavaScript language zero or NaN is regarded as false
+ const auto value_classification = std::fpclassify(value_.real_);
+ return value_classification != FP_ZERO && value_classification != FP_NAN;
+ }
+ default:
+ break;
+ }
+ JSON_FAIL_MESSAGE("Value is not convertible to bool.");
+}
+
+bool Value::isConvertibleTo(ValueType other) const {
+ switch (other) {
+ case nullValue:
+ return (isNumeric() && asDouble() == 0.0) ||
+ (type() == booleanValue && !value_.bool_) ||
+ (type() == stringValue && asString().empty()) ||
+ (type() == arrayValue && value_.map_->empty()) ||
+ (type() == objectValue && value_.map_->empty()) ||
+ type() == nullValue;
+ case intValue:
+ return isInt() ||
+ (type() == realValue && InRange(value_.real_, minInt, maxInt)) ||
+ type() == booleanValue || type() == nullValue;
+ case uintValue:
+ return isUInt() ||
+ (type() == realValue && InRange(value_.real_, 0, maxUInt)) ||
+ type() == booleanValue || type() == nullValue;
+ case realValue:
+ return isNumeric() || type() == booleanValue || type() == nullValue;
+ case booleanValue:
+ return isNumeric() || type() == booleanValue || type() == nullValue;
+ case stringValue:
+ return isNumeric() || type() == booleanValue || type() == stringValue ||
+ type() == nullValue;
+ case arrayValue:
+ return type() == arrayValue || type() == nullValue;
+ case objectValue:
+ return type() == objectValue || type() == nullValue;
+ }
+ JSON_ASSERT_UNREACHABLE;
+ return false;
+}
+
+/// Number of values in array or object
+ArrayIndex Value::size() const {
+ switch (type()) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ case stringValue:
+ return 0;
+ case arrayValue: // size of the array is highest index + 1
+ if (!value_.map_->empty()) {
+ ObjectValues::const_iterator itLast = value_.map_->end();
+ --itLast;
+ return (*itLast).first.index() + 1;
+ }
+ return 0;
+ case objectValue:
+ return ArrayIndex(value_.map_->size());
+ }
+ JSON_ASSERT_UNREACHABLE;
+ return 0; // unreachable;
+}
+
+bool Value::empty() const {
+ if (isNull() || isArray() || isObject())
+ return size() == 0U;
+ return false;
+}
+
+Value::operator bool() const { return !isNull(); }
+
+void Value::clear() {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue ||
+ type() == objectValue,
+ "in Json::Value::clear(): requires complex value");
+ start_ = 0;
+ limit_ = 0;
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ value_.map_->clear();
+ break;
+ default:
+ break;
+ }
+}
+
+void Value::resize(ArrayIndex newSize) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue,
+ "in Json::Value::resize(): requires arrayValue");
+ if (type() == nullValue)
+ *this = Value(arrayValue);
+ ArrayIndex oldSize = size();
+ if (newSize == 0)
+ clear();
+ else if (newSize > oldSize)
+ for (ArrayIndex i = oldSize; i < newSize; ++i)
+ (*this)[i];
+ else {
+ for (ArrayIndex index = newSize; index < oldSize; ++index) {
+ value_.map_->erase(index);
+ }
+ JSON_ASSERT(size() == newSize);
+ }
+}
+
+Value& Value::operator[](ArrayIndex index) {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == arrayValue,
+ "in Json::Value::operator[](ArrayIndex): requires arrayValue");
+ if (type() == nullValue)
+ *this = Value(arrayValue);
+ CZString key(index);
+ auto it = value_.map_->lower_bound(key);
+ if (it != value_.map_->end() && (*it).first == key)
+ return (*it).second;
+
+ ObjectValues::value_type defaultValue(key, nullSingleton());
+ it = value_.map_->insert(it, defaultValue);
+ return (*it).second;
+}
+
+Value& Value::operator[](int index) {
+ JSON_ASSERT_MESSAGE(
+ index >= 0,
+ "in Json::Value::operator[](int index): index cannot be negative");
+ return (*this)[ArrayIndex(index)];
+}
+
+const Value& Value::operator[](ArrayIndex index) const {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == arrayValue,
+ "in Json::Value::operator[](ArrayIndex)const: requires arrayValue");
+ if (type() == nullValue)
+ return nullSingleton();
+ CZString key(index);
+ ObjectValues::const_iterator it = value_.map_->find(key);
+ if (it == value_.map_->end())
+ return nullSingleton();
+ return (*it).second;
+}
+
+const Value& Value::operator[](int index) const {
+ JSON_ASSERT_MESSAGE(
+ index >= 0,
+ "in Json::Value::operator[](int index) const: index cannot be negative");
+ return (*this)[ArrayIndex(index)];
+}
+
+void Value::initBasic(ValueType type, bool allocated) {
+ setType(type);
+ setIsAllocated(allocated);
+ comments_ = Comments{};
+ start_ = 0;
+ limit_ = 0;
+}
+
+void Value::dupPayload(const Value& other) {
+ setType(other.type());
+ setIsAllocated(false);
+ switch (type()) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ value_ = other.value_;
+ break;
+ case stringValue:
+ if (other.value_.string_ && other.isAllocated()) {
+ unsigned len;
+ char const* str;
+ decodePrefixedString(other.isAllocated(), other.value_.string_, &len,
+ &str);
+ value_.string_ = duplicateAndPrefixStringValue(str, len);
+ setIsAllocated(true);
+ } else {
+ value_.string_ = other.value_.string_;
+ }
+ break;
+ case arrayValue:
+ case objectValue:
+ value_.map_ = new ObjectValues(*other.value_.map_);
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+}
+
+void Value::releasePayload() {
+ switch (type()) {
+ case nullValue:
+ case intValue:
+ case uintValue:
+ case realValue:
+ case booleanValue:
+ break;
+ case stringValue:
+ if (isAllocated())
+ releasePrefixedStringValue(value_.string_);
+ break;
+ case arrayValue:
+ case objectValue:
+ delete value_.map_;
+ break;
+ default:
+ JSON_ASSERT_UNREACHABLE;
+ }
+}
+
+void Value::dupMeta(const Value& other) {
+ comments_ = other.comments_;
+ start_ = other.start_;
+ limit_ = other.limit_;
+}
+
+// Access an object value by name, create a null member if it does not exist.
+// @pre Type of '*this' is object or null.
+// @param key is null-terminated.
+Value& Value::resolveReference(const char* key) {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == objectValue,
+ "in Json::Value::resolveReference(): requires objectValue");
+ if (type() == nullValue)
+ *this = Value(objectValue);
+ CZString actualKey(key, static_cast<unsigned>(strlen(key)),
+ CZString::noDuplication); // NOTE!
+ auto it = value_.map_->lower_bound(actualKey);
+ if (it != value_.map_->end() && (*it).first == actualKey)
+ return (*it).second;
+
+ ObjectValues::value_type defaultValue(actualKey, nullSingleton());
+ it = value_.map_->insert(it, defaultValue);
+ Value& value = (*it).second;
+ return value;
+}
+
+// @param key is not null-terminated.
+Value& Value::resolveReference(char const* key, char const* end) {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == objectValue,
+ "in Json::Value::resolveReference(key, end): requires objectValue");
+ if (type() == nullValue)
+ *this = Value(objectValue);
+ CZString actualKey(key, static_cast<unsigned>(end - key),
+ CZString::duplicateOnCopy);
+ auto it = value_.map_->lower_bound(actualKey);
+ if (it != value_.map_->end() && (*it).first == actualKey)
+ return (*it).second;
+
+ ObjectValues::value_type defaultValue(actualKey, nullSingleton());
+ it = value_.map_->insert(it, defaultValue);
+ Value& value = (*it).second;
+ return value;
+}
+
+Value Value::get(ArrayIndex index, const Value& defaultValue) const {
+ const Value* value = &((*this)[index]);
+ return value == &nullSingleton() ? defaultValue : *value;
+}
+
+bool Value::isValidIndex(ArrayIndex index) const { return index < size(); }
+
+Value const* Value::find(char const* begin, char const* end) const {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
+ "in Json::Value::find(begin, end): requires "
+ "objectValue or nullValue");
+ if (type() == nullValue)
+ return nullptr;
+ CZString actualKey(begin, static_cast<unsigned>(end - begin),
+ CZString::noDuplication);
+ ObjectValues::const_iterator it = value_.map_->find(actualKey);
+ if (it == value_.map_->end())
+ return nullptr;
+ return &(*it).second;
+}
+Value* Value::demand(char const* begin, char const* end) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
+ "in Json::Value::demand(begin, end): requires "
+ "objectValue or nullValue");
+ return &resolveReference(begin, end);
+}
+const Value& Value::operator[](const char* key) const {
+ Value const* found = find(key, key + strlen(key));
+ if (!found)
+ return nullSingleton();
+ return *found;
+}
+Value const& Value::operator[](const String& key) const {
+ Value const* found = find(key.data(), key.data() + key.length());
+ if (!found)
+ return nullSingleton();
+ return *found;
+}
+
+Value& Value::operator[](const char* key) {
+ return resolveReference(key, key + strlen(key));
+}
+
+Value& Value::operator[](const String& key) {
+ return resolveReference(key.data(), key.data() + key.length());
+}
+
+Value& Value::operator[](const StaticString& key) {
+ return resolveReference(key.c_str());
+}
+
+Value& Value::append(const Value& value) { return append(Value(value)); }
+
+Value& Value::append(Value&& value) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue,
+ "in Json::Value::append: requires arrayValue");
+ if (type() == nullValue) {
+ *this = Value(arrayValue);
+ }
+ return this->value_.map_->emplace(size(), std::move(value)).first->second;
+}
+
+bool Value::insert(ArrayIndex index, const Value& newValue) {
+ return insert(index, Value(newValue));
+}
+
+bool Value::insert(ArrayIndex index, Value&& newValue) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == arrayValue,
+ "in Json::Value::insert: requires arrayValue");
+ ArrayIndex length = size();
+ if (index > length) {
+ return false;
+ }
+ for (ArrayIndex i = length; i > index; i--) {
+ (*this)[i] = std::move((*this)[i - 1]);
+ }
+ (*this)[index] = std::move(newValue);
+ return true;
+}
+
+Value Value::get(char const* begin, char const* end,
+ Value const& defaultValue) const {
+ Value const* found = find(begin, end);
+ return !found ? defaultValue : *found;
+}
+Value Value::get(char const* key, Value const& defaultValue) const {
+ return get(key, key + strlen(key), defaultValue);
+}
+Value Value::get(String const& key, Value const& defaultValue) const {
+ return get(key.data(), key.data() + key.length(), defaultValue);
+}
+
+bool Value::removeMember(const char* begin, const char* end, Value* removed) {
+ if (type() != objectValue) {
+ return false;
+ }
+ CZString actualKey(begin, static_cast<unsigned>(end - begin),
+ CZString::noDuplication);
+ auto it = value_.map_->find(actualKey);
+ if (it == value_.map_->end())
+ return false;
+ if (removed)
+ *removed = std::move(it->second);
+ value_.map_->erase(it);
+ return true;
+}
+bool Value::removeMember(const char* key, Value* removed) {
+ return removeMember(key, key + strlen(key), removed);
+}
+bool Value::removeMember(String const& key, Value* removed) {
+ return removeMember(key.data(), key.data() + key.length(), removed);
+}
+void Value::removeMember(const char* key) {
+ JSON_ASSERT_MESSAGE(type() == nullValue || type() == objectValue,
+ "in Json::Value::removeMember(): requires objectValue");
+ if (type() == nullValue)
+ return;
+
+ CZString actualKey(key, unsigned(strlen(key)), CZString::noDuplication);
+ value_.map_->erase(actualKey);
+}
+void Value::removeMember(const String& key) { removeMember(key.c_str()); }
+
+bool Value::removeIndex(ArrayIndex index, Value* removed) {
+ if (type() != arrayValue) {
+ return false;
+ }
+ CZString key(index);
+ auto it = value_.map_->find(key);
+ if (it == value_.map_->end()) {
+ return false;
+ }
+ if (removed)
+ *removed = it->second;
+ ArrayIndex oldSize = size();
+ // shift left all items left, into the place of the "removed"
+ for (ArrayIndex i = index; i < (oldSize - 1); ++i) {
+ CZString keey(i);
+ (*value_.map_)[keey] = (*this)[i + 1];
+ }
+ // erase the last one ("leftover")
+ CZString keyLast(oldSize - 1);
+ auto itLast = value_.map_->find(keyLast);
+ value_.map_->erase(itLast);
+ return true;
+}
+
+bool Value::isMember(char const* begin, char const* end) const {
+ Value const* value = find(begin, end);
+ return nullptr != value;
+}
+bool Value::isMember(char const* key) const {
+ return isMember(key, key + strlen(key));
+}
+bool Value::isMember(String const& key) const {
+ return isMember(key.data(), key.data() + key.length());
+}
+
+Value::Members Value::getMemberNames() const {
+ JSON_ASSERT_MESSAGE(
+ type() == nullValue || type() == objectValue,
+ "in Json::Value::getMemberNames(), value must be objectValue");
+ if (type() == nullValue)
+ return Value::Members();
+ Members members;
+ members.reserve(value_.map_->size());
+ ObjectValues::const_iterator it = value_.map_->begin();
+ ObjectValues::const_iterator itEnd = value_.map_->end();
+ for (; it != itEnd; ++it) {
+ members.push_back(String((*it).first.data(), (*it).first.length()));
+ }
+ return members;
+}
+
+static bool IsIntegral(double d) {
+ double integral_part;
+ return modf(d, &integral_part) == 0.0;
+}
+
+bool Value::isNull() const { return type() == nullValue; }
+
+bool Value::isBool() const { return type() == booleanValue; }
+
+bool Value::isInt() const {
+ switch (type()) {
+ case intValue:
+#if defined(JSON_HAS_INT64)
+ return value_.int_ >= minInt && value_.int_ <= maxInt;
+#else
+ return true;
+#endif
+ case uintValue:
+ return value_.uint_ <= UInt(maxInt);
+ case realValue:
+ return value_.real_ >= minInt && value_.real_ <= maxInt &&
+ IsIntegral(value_.real_);
+ default:
+ break;
+ }
+ return false;
+}
+
+bool Value::isUInt() const {
+ switch (type()) {
+ case intValue:
+#if defined(JSON_HAS_INT64)
+ return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt);
+#else
+ return value_.int_ >= 0;
+#endif
+ case uintValue:
+#if defined(JSON_HAS_INT64)
+ return value_.uint_ <= maxUInt;
+#else
+ return true;
+#endif
+ case realValue:
+ return value_.real_ >= 0 && value_.real_ <= maxUInt &&
+ IsIntegral(value_.real_);
+ default:
+ break;
+ }
+ return false;
+}
+
+bool Value::isInt64() const {
+#if defined(JSON_HAS_INT64)
+ switch (type()) {
+ case intValue:
+ return true;
+ case uintValue:
+ return value_.uint_ <= UInt64(maxInt64);
+ case realValue:
+ // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a
+ // double, so double(maxInt64) will be rounded up to 2^63. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= double(minInt64) &&
+ value_.real_ < double(maxInt64) && IsIntegral(value_.real_);
+ default:
+ break;
+ }
+#endif // JSON_HAS_INT64
+ return false;
+}
+
+bool Value::isUInt64() const {
+#if defined(JSON_HAS_INT64)
+ switch (type()) {
+ case intValue:
+ return value_.int_ >= 0;
+ case uintValue:
+ return true;
+ case realValue:
+ // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+ // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble &&
+ IsIntegral(value_.real_);
+ default:
+ break;
+ }
+#endif // JSON_HAS_INT64
+ return false;
+}
+
+bool Value::isIntegral() const {
+ switch (type()) {
+ case intValue:
+ case uintValue:
+ return true;
+ case realValue:
+#if defined(JSON_HAS_INT64)
+ // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a
+ // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we
+ // require the value to be strictly less than the limit.
+ return value_.real_ >= double(minInt64) &&
+ value_.real_ < maxUInt64AsDouble && IsIntegral(value_.real_);
+#else
+ return value_.real_ >= minInt && value_.real_ <= maxUInt &&
+ IsIntegral(value_.real_);
+#endif // JSON_HAS_INT64
+ default:
+ break;
+ }
+ return false;
+}
+
+bool Value::isDouble() const {
+ return type() == intValue || type() == uintValue || type() == realValue;
+}
+
+bool Value::isNumeric() const { return isDouble(); }
+
+bool Value::isString() const { return type() == stringValue; }
+
+bool Value::isArray() const { return type() == arrayValue; }
+
+bool Value::isObject() const { return type() == objectValue; }
+
+Value::Comments::Comments(const Comments& that)
+ : ptr_{cloneUnique(that.ptr_)} {}
+
+Value::Comments::Comments(Comments&& that) noexcept
+ : ptr_{std::move(that.ptr_)} {}
+
+Value::Comments& Value::Comments::operator=(const Comments& that) {
+ ptr_ = cloneUnique(that.ptr_);
+ return *this;
+}
+
+Value::Comments& Value::Comments::operator=(Comments&& that) noexcept {
+ ptr_ = std::move(that.ptr_);
+ return *this;
+}
+
+bool Value::Comments::has(CommentPlacement slot) const {
+ return ptr_ && !(*ptr_)[slot].empty();
+}
+
+String Value::Comments::get(CommentPlacement slot) const {
+ if (!ptr_)
+ return {};
+ return (*ptr_)[slot];
+}
+
+void Value::Comments::set(CommentPlacement slot, String comment) {
+ if (slot >= CommentPlacement::numberOfCommentPlacement)
+ return;
+ if (!ptr_)
+ ptr_ = std::unique_ptr<Array>(new Array());
+ (*ptr_)[slot] = std::move(comment);
+}
+
+void Value::setComment(String comment, CommentPlacement placement) {
+ if (!comment.empty() && (comment.back() == '\n')) {
+ // Always discard trailing newline, to aid indentation.
+ comment.pop_back();
+ }
+ JSON_ASSERT(!comment.empty());
+ JSON_ASSERT_MESSAGE(
+ comment[0] == '\0' || comment[0] == '/',
+ "in Json::Value::setComment(): Comments must start with /");
+ comments_.set(placement, std::move(comment));
+}
+
+bool Value::hasComment(CommentPlacement placement) const {
+ return comments_.has(placement);
+}
+
+String Value::getComment(CommentPlacement placement) const {
+ return comments_.get(placement);
+}
+
+void Value::setOffsetStart(ptrdiff_t start) { start_ = start; }
+
+void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; }
+
+ptrdiff_t Value::getOffsetStart() const { return start_; }
+
+ptrdiff_t Value::getOffsetLimit() const { return limit_; }
+
+String Value::toStyledString() const {
+ StreamWriterBuilder builder;
+
+ String out = this->hasComment(commentBefore) ? "\n" : "";
+ out += Json::writeString(builder, *this);
+ out += '\n';
+
+ return out;
+}
+
+Value::const_iterator Value::begin() const {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return const_iterator(value_.map_->begin());
+ break;
+ default:
+ break;
+ }
+ return {};
+}
+
+Value::const_iterator Value::end() const {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return const_iterator(value_.map_->end());
+ break;
+ default:
+ break;
+ }
+ return {};
+}
+
+Value::iterator Value::begin() {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return iterator(value_.map_->begin());
+ break;
+ default:
+ break;
+ }
+ return iterator();
+}
+
+Value::iterator Value::end() {
+ switch (type()) {
+ case arrayValue:
+ case objectValue:
+ if (value_.map_)
+ return iterator(value_.map_->end());
+ break;
+ default:
+ break;
+ }
+ return iterator();
+}
+
+// class PathArgument
+// //////////////////////////////////////////////////////////////////
+
+PathArgument::PathArgument() = default;
+
+PathArgument::PathArgument(ArrayIndex index)
+ : index_(index), kind_(kindIndex) {}
+
+PathArgument::PathArgument(const char* key) : key_(key), kind_(kindKey) {}
+
+PathArgument::PathArgument(String key) : key_(std::move(key)), kind_(kindKey) {}
+
+// class Path
+// //////////////////////////////////////////////////////////////////
+
+Path::Path(const String& path, const PathArgument& a1, const PathArgument& a2,
+ const PathArgument& a3, const PathArgument& a4,
+ const PathArgument& a5) {
+ InArgs in;
+ in.reserve(5);
+ in.push_back(&a1);
+ in.push_back(&a2);
+ in.push_back(&a3);
+ in.push_back(&a4);
+ in.push_back(&a5);
+ makePath(path, in);
+}
+
+void Path::makePath(const String& path, const InArgs& in) {
+ const char* current = path.c_str();
+ const char* end = current + path.length();
+ auto itInArg = in.begin();
+ while (current != end) {
+ if (*current == '[') {
+ ++current;
+ if (*current == '%')
+ addPathInArg(path, in, itInArg, PathArgument::kindIndex);
+ else {
+ ArrayIndex index = 0;
+ for (; current != end && *current >= '0' && *current <= '9'; ++current)
+ index = index * 10 + ArrayIndex(*current - '0');
+ args_.push_back(index);
+ }
+ if (current == end || *++current != ']')
+ invalidPath(path, int(current - path.c_str()));
+ } else if (*current == '%') {
+ addPathInArg(path, in, itInArg, PathArgument::kindKey);
+ ++current;
+ } else if (*current == '.' || *current == ']') {
+ ++current;
+ } else {
+ const char* beginName = current;
+ while (current != end && !strchr("[.", *current))
+ ++current;
+ args_.push_back(String(beginName, current));
+ }
+ }
+}
+
+void Path::addPathInArg(const String& /*path*/, const InArgs& in,
+ InArgs::const_iterator& itInArg,
+ PathArgument::Kind kind) {
+ if (itInArg == in.end()) {
+ // Error: missing argument %d
+ } else if ((*itInArg)->kind_ != kind) {
+ // Error: bad argument type
+ } else {
+ args_.push_back(**itInArg++);
+ }
+}
+
+void Path::invalidPath(const String& /*path*/, int /*location*/) {
+ // Error: invalid path.
+}
+
+const Value& Path::resolve(const Value& root) const {
+ const Value* node = &root;
+ for (const auto& arg : args_) {
+ if (arg.kind_ == PathArgument::kindIndex) {
+ if (!node->isArray() || !node->isValidIndex(arg.index_)) {
+ // Error: unable to resolve path (array value expected at position... )
+ return Value::nullSingleton();
+ }
+ node = &((*node)[arg.index_]);
+ } else if (arg.kind_ == PathArgument::kindKey) {
+ if (!node->isObject()) {
+ // Error: unable to resolve path (object value expected at position...)
+ return Value::nullSingleton();
+ }
+ node = &((*node)[arg.key_]);
+ if (node == &Value::nullSingleton()) {
+ // Error: unable to resolve path (object has no member named '' at
+ // position...)
+ return Value::nullSingleton();
+ }
+ }
+ }
+ return *node;
+}
+
+Value Path::resolve(const Value& root, const Value& defaultValue) const {
+ const Value* node = &root;
+ for (const auto& arg : args_) {
+ if (arg.kind_ == PathArgument::kindIndex) {
+ if (!node->isArray() || !node->isValidIndex(arg.index_))
+ return defaultValue;
+ node = &((*node)[arg.index_]);
+ } else if (arg.kind_ == PathArgument::kindKey) {
+ if (!node->isObject())
+ return defaultValue;
+ node = &((*node)[arg.key_]);
+ if (node == &Value::nullSingleton())
+ return defaultValue;
+ }
+ }
+ return *node;
+}
+
+Value& Path::make(Value& root) const {
+ Value* node = &root;
+ for (const auto& arg : args_) {
+ if (arg.kind_ == PathArgument::kindIndex) {
+ if (!node->isArray()) {
+ // Error: node is not an array at position ...
+ }
+ node = &((*node)[arg.index_]);
+ } else if (arg.kind_ == PathArgument::kindKey) {
+ if (!node->isObject()) {
+ // Error: node is not an object at position...
+ }
+ node = &((*node)[arg.key_]);
+ }
+ }
+ return *node;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl
new file mode 100644
index 0000000000..d6128b8edf
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_valueiterator.inl
@@ -0,0 +1,156 @@
+// Copyright 2007-2010 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+// included by json_value.cpp
+
+namespace Json {
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIteratorBase
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIteratorBase::ValueIteratorBase() : current_() {}
+
+ValueIteratorBase::ValueIteratorBase(
+ const Value::ObjectValues::iterator& current)
+ : current_(current), isNull_(false) {}
+
+Value& ValueIteratorBase::deref() { return current_->second; }
+const Value& ValueIteratorBase::deref() const { return current_->second; }
+
+void ValueIteratorBase::increment() { ++current_; }
+
+void ValueIteratorBase::decrement() { --current_; }
+
+ValueIteratorBase::difference_type
+ValueIteratorBase::computeDistance(const SelfType& other) const {
+ // Iterator for null value are initialized using the default
+ // constructor, which initialize current_ to the default
+ // std::map::iterator. As begin() and end() are two instance
+ // of the default std::map::iterator, they can not be compared.
+ // To allow this, we handle this comparison specifically.
+ if (isNull_ && other.isNull_) {
+ return 0;
+ }
+
+ // Usage of std::distance is not portable (does not compile with Sun Studio 12
+ // RogueWave STL,
+ // which is the one used by default).
+ // Using a portable hand-made version for non random iterator instead:
+ // return difference_type( std::distance( current_, other.current_ ) );
+ difference_type myDistance = 0;
+ for (Value::ObjectValues::iterator it = current_; it != other.current_;
+ ++it) {
+ ++myDistance;
+ }
+ return myDistance;
+}
+
+bool ValueIteratorBase::isEqual(const SelfType& other) const {
+ if (isNull_) {
+ return other.isNull_;
+ }
+ return current_ == other.current_;
+}
+
+void ValueIteratorBase::copy(const SelfType& other) {
+ current_ = other.current_;
+ isNull_ = other.isNull_;
+}
+
+Value ValueIteratorBase::key() const {
+ const Value::CZString czstring = (*current_).first;
+ if (czstring.data()) {
+ if (czstring.isStaticString())
+ return Value(StaticString(czstring.data()));
+ return Value(czstring.data(), czstring.data() + czstring.length());
+ }
+ return Value(czstring.index());
+}
+
+UInt ValueIteratorBase::index() const {
+ const Value::CZString czstring = (*current_).first;
+ if (!czstring.data())
+ return czstring.index();
+ return Value::UInt(-1);
+}
+
+String ValueIteratorBase::name() const {
+ char const* keey;
+ char const* end;
+ keey = memberName(&end);
+ if (!keey)
+ return String();
+ return String(keey, end);
+}
+
+char const* ValueIteratorBase::memberName() const {
+ const char* cname = (*current_).first.data();
+ return cname ? cname : "";
+}
+
+char const* ValueIteratorBase::memberName(char const** end) const {
+ const char* cname = (*current_).first.data();
+ if (!cname) {
+ *end = nullptr;
+ return nullptr;
+ }
+ *end = cname + (*current_).first.length();
+ return cname;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueConstIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueConstIterator::ValueConstIterator() = default;
+
+ValueConstIterator::ValueConstIterator(
+ const Value::ObjectValues::iterator& current)
+ : ValueIteratorBase(current) {}
+
+ValueConstIterator::ValueConstIterator(ValueIterator const& other)
+ : ValueIteratorBase(other) {}
+
+ValueConstIterator& ValueConstIterator::
+operator=(const ValueIteratorBase& other) {
+ copy(other);
+ return *this;
+}
+
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// class ValueIterator
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+// //////////////////////////////////////////////////////////////////
+
+ValueIterator::ValueIterator() = default;
+
+ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current)
+ : ValueIteratorBase(current) {}
+
+ValueIterator::ValueIterator(const ValueConstIterator& other)
+ : ValueIteratorBase(other) {
+ throwRuntimeError("ConstIterator to Iterator should never be allowed.");
+}
+
+ValueIterator::ValueIterator(const ValueIterator& other) = default;
+
+ValueIterator& ValueIterator::operator=(const SelfType& other) {
+ copy(other);
+ return *this;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp
new file mode 100644
index 0000000000..0dd160e452
--- /dev/null
+++ b/thirdparty/openxr/src/external/jsoncpp/src/lib_json/json_writer.cpp
@@ -0,0 +1,1259 @@
+// Copyright 2011 Baptiste Lepilleur and The JsonCpp Authors
+// Distributed under MIT license, or public domain if desired and
+// recognized in your jurisdiction.
+// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE
+
+#if !defined(JSON_IS_AMALGAMATION)
+#include "json_tool.h"
+#include <json/writer.h>
+#endif // if !defined(JSON_IS_AMALGAMATION)
+#include <algorithm>
+#include <cassert>
+#include <cctype>
+#include <cstring>
+#include <iomanip>
+#include <memory>
+#include <set>
+#include <sstream>
+#include <utility>
+
+#if __cplusplus >= 201103L
+#include <cmath>
+#include <cstdio>
+
+#if !defined(isnan)
+#define isnan std::isnan
+#endif
+
+#if !defined(isfinite)
+#define isfinite std::isfinite
+#endif
+
+#else
+#include <cmath>
+#include <cstdio>
+
+#if defined(_MSC_VER)
+#if !defined(isnan)
+#include <float.h>
+#define isnan _isnan
+#endif
+
+#if !defined(isfinite)
+#include <float.h>
+#define isfinite _finite
+#endif
+
+#if !defined(_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES)
+#define _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES 1
+#endif //_CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES
+
+#endif //_MSC_VER
+
+#if defined(__sun) && defined(__SVR4) // Solaris
+#if !defined(isfinite)
+#include <ieeefp.h>
+#define isfinite finite
+#endif
+#endif
+
+#if defined(__hpux)
+#if !defined(isfinite)
+#if defined(__ia64) && !defined(finite)
+#define isfinite(x) \
+ ((sizeof(x) == sizeof(float) ? _Isfinitef(x) : _IsFinite(x)))
+#endif
+#endif
+#endif
+
+#if !defined(isnan)
+// IEEE standard states that NaN values will not compare to themselves
+#define isnan(x) ((x) != (x))
+#endif
+
+#if !defined(__APPLE__)
+#if !defined(isfinite)
+#define isfinite finite
+#endif
+#endif
+#endif
+
+#if defined(_MSC_VER)
+// Disable warning about strdup being deprecated.
+#pragma warning(disable : 4996)
+#endif
+
+namespace Json {
+
+#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520)
+using StreamWriterPtr = std::unique_ptr<StreamWriter>;
+#else
+using StreamWriterPtr = std::auto_ptr<StreamWriter>;
+#endif
+
+String valueToString(LargestInt value) {
+ UIntToStringBuffer buffer;
+ char* current = buffer + sizeof(buffer);
+ if (value == Value::minLargestInt) {
+ uintToString(LargestUInt(Value::maxLargestInt) + 1, current);
+ *--current = '-';
+ } else if (value < 0) {
+ uintToString(LargestUInt(-value), current);
+ *--current = '-';
+ } else {
+ uintToString(LargestUInt(value), current);
+ }
+ assert(current >= buffer);
+ return current;
+}
+
+String valueToString(LargestUInt value) {
+ UIntToStringBuffer buffer;
+ char* current = buffer + sizeof(buffer);
+ uintToString(value, current);
+ assert(current >= buffer);
+ return current;
+}
+
+#if defined(JSON_HAS_INT64)
+
+String valueToString(Int value) { return valueToString(LargestInt(value)); }
+
+String valueToString(UInt value) { return valueToString(LargestUInt(value)); }
+
+#endif // # if defined(JSON_HAS_INT64)
+
+namespace {
+String valueToString(double value, bool useSpecialFloats,
+ unsigned int precision, PrecisionType precisionType) {
+ // Print into the buffer. We need not request the alternative representation
+ // that always has a decimal point because JSON doesn't distinguish the
+ // concepts of reals and integers.
+ if (!isfinite(value)) {
+ static const char* const reps[2][3] = {{"NaN", "-Infinity", "Infinity"},
+ {"null", "-1e+9999", "1e+9999"}};
+ return reps[useSpecialFloats ? 0 : 1]
+ [isnan(value) ? 0 : (value < 0) ? 1 : 2];
+ }
+
+ String buffer(size_t(36), '\0');
+ while (true) {
+ int len = jsoncpp_snprintf(
+ &*buffer.begin(), buffer.size(),
+ (precisionType == PrecisionType::significantDigits) ? "%.*g" : "%.*f",
+ precision, value);
+ assert(len >= 0);
+ auto wouldPrint = static_cast<size_t>(len);
+ if (wouldPrint >= buffer.size()) {
+ buffer.resize(wouldPrint + 1);
+ continue;
+ }
+ buffer.resize(wouldPrint);
+ break;
+ }
+
+ buffer.erase(fixNumericLocale(buffer.begin(), buffer.end()), buffer.end());
+
+ // try to ensure we preserve the fact that this was given to us as a double on
+ // input
+ if (buffer.find('.') == buffer.npos && buffer.find('e') == buffer.npos) {
+ buffer += ".0";
+ }
+
+ // strip the zero padding from the right
+ if (precisionType == PrecisionType::decimalPlaces) {
+ buffer.erase(fixZerosInTheEnd(buffer.begin(), buffer.end(), precision),
+ buffer.end());
+ }
+
+ return buffer;
+}
+} // namespace
+
+String valueToString(double value, unsigned int precision,
+ PrecisionType precisionType) {
+ return valueToString(value, false, precision, precisionType);
+}
+
+String valueToString(bool value) { return value ? "true" : "false"; }
+
+static bool doesAnyCharRequireEscaping(char const* s, size_t n) {
+ assert(s || !n);
+
+ return std::any_of(s, s + n, [](unsigned char c) {
+ return c == '\\' || c == '"' || c < 0x20 || c > 0x7F;
+ });
+}
+
+static unsigned int utf8ToCodepoint(const char*& s, const char* e) {
+ const unsigned int REPLACEMENT_CHARACTER = 0xFFFD;
+
+ unsigned int firstByte = static_cast<unsigned char>(*s);
+
+ if (firstByte < 0x80)
+ return firstByte;
+
+ if (firstByte < 0xE0) {
+ if (e - s < 2)
+ return REPLACEMENT_CHARACTER;
+
+ unsigned int calculated =
+ ((firstByte & 0x1F) << 6) | (static_cast<unsigned int>(s[1]) & 0x3F);
+ s += 1;
+ // oversized encoded characters are invalid
+ return calculated < 0x80 ? REPLACEMENT_CHARACTER : calculated;
+ }
+
+ if (firstByte < 0xF0) {
+ if (e - s < 3)
+ return REPLACEMENT_CHARACTER;
+
+ unsigned int calculated = ((firstByte & 0x0F) << 12) |
+ ((static_cast<unsigned int>(s[1]) & 0x3F) << 6) |
+ (static_cast<unsigned int>(s[2]) & 0x3F);
+ s += 2;
+ // surrogates aren't valid codepoints itself
+ // shouldn't be UTF-8 encoded
+ if (calculated >= 0xD800 && calculated <= 0xDFFF)
+ return REPLACEMENT_CHARACTER;
+ // oversized encoded characters are invalid
+ return calculated < 0x800 ? REPLACEMENT_CHARACTER : calculated;
+ }
+
+ if (firstByte < 0xF8) {
+ if (e - s < 4)
+ return REPLACEMENT_CHARACTER;
+
+ unsigned int calculated = ((firstByte & 0x07) << 18) |
+ ((static_cast<unsigned int>(s[1]) & 0x3F) << 12) |
+ ((static_cast<unsigned int>(s[2]) & 0x3F) << 6) |
+ (static_cast<unsigned int>(s[3]) & 0x3F);
+ s += 3;
+ // oversized encoded characters are invalid
+ return calculated < 0x10000 ? REPLACEMENT_CHARACTER : calculated;
+ }
+
+ return REPLACEMENT_CHARACTER;
+}
+
+static const char hex2[] = "000102030405060708090a0b0c0d0e0f"
+ "101112131415161718191a1b1c1d1e1f"
+ "202122232425262728292a2b2c2d2e2f"
+ "303132333435363738393a3b3c3d3e3f"
+ "404142434445464748494a4b4c4d4e4f"
+ "505152535455565758595a5b5c5d5e5f"
+ "606162636465666768696a6b6c6d6e6f"
+ "707172737475767778797a7b7c7d7e7f"
+ "808182838485868788898a8b8c8d8e8f"
+ "909192939495969798999a9b9c9d9e9f"
+ "a0a1a2a3a4a5a6a7a8a9aaabacadaeaf"
+ "b0b1b2b3b4b5b6b7b8b9babbbcbdbebf"
+ "c0c1c2c3c4c5c6c7c8c9cacbcccdcecf"
+ "d0d1d2d3d4d5d6d7d8d9dadbdcdddedf"
+ "e0e1e2e3e4e5e6e7e8e9eaebecedeeef"
+ "f0f1f2f3f4f5f6f7f8f9fafbfcfdfeff";
+
+static String toHex16Bit(unsigned int x) {
+ const unsigned int hi = (x >> 8) & 0xff;
+ const unsigned int lo = x & 0xff;
+ String result(4, ' ');
+ result[0] = hex2[2 * hi];
+ result[1] = hex2[2 * hi + 1];
+ result[2] = hex2[2 * lo];
+ result[3] = hex2[2 * lo + 1];
+ return result;
+}
+
+static void appendRaw(String& result, unsigned ch) {
+ result += static_cast<char>(ch);
+}
+
+static void appendHex(String& result, unsigned ch) {
+ result.append("\\u").append(toHex16Bit(ch));
+}
+
+static String valueToQuotedStringN(const char* value, size_t length,
+ bool emitUTF8 = false) {
+ if (value == nullptr)
+ return "";
+
+ if (!doesAnyCharRequireEscaping(value, length))
+ return String("\"") + value + "\"";
+ // We have to walk value and escape any special characters.
+ // Appending to String is not efficient, but this should be rare.
+ // (Note: forward slashes are *not* rare, but I am not escaping them.)
+ String::size_type maxsize = length * 2 + 3; // allescaped+quotes+NULL
+ String result;
+ result.reserve(maxsize); // to avoid lots of mallocs
+ result += "\"";
+ char const* end = value + length;
+ for (const char* c = value; c != end; ++c) {
+ switch (*c) {
+ case '\"':
+ result += "\\\"";
+ break;
+ case '\\':
+ result += "\\\\";
+ break;
+ case '\b':
+ result += "\\b";
+ break;
+ case '\f':
+ result += "\\f";
+ break;
+ case '\n':
+ result += "\\n";
+ break;
+ case '\r':
+ result += "\\r";
+ break;
+ case '\t':
+ result += "\\t";
+ break;
+ // case '/':
+ // Even though \/ is considered a legal escape in JSON, a bare
+ // slash is also legal, so I see no reason to escape it.
+ // (I hope I am not misunderstanding something.)
+ // blep notes: actually escaping \/ may be useful in javascript to avoid </
+ // sequence.
+ // Should add a flag to allow this compatibility mode and prevent this
+ // sequence from occurring.
+ default: {
+ if (emitUTF8) {
+ unsigned codepoint = static_cast<unsigned char>(*c);
+ if (codepoint < 0x20) {
+ appendHex(result, codepoint);
+ } else {
+ appendRaw(result, codepoint);
+ }
+ } else {
+ unsigned codepoint = utf8ToCodepoint(c, end); // modifies `c`
+ if (codepoint < 0x20) {
+ appendHex(result, codepoint);
+ } else if (codepoint < 0x80) {
+ appendRaw(result, codepoint);
+ } else if (codepoint < 0x10000) {
+ // Basic Multilingual Plane
+ appendHex(result, codepoint);
+ } else {
+ // Extended Unicode. Encode 20 bits as a surrogate pair.
+ codepoint -= 0x10000;
+ appendHex(result, 0xd800 + ((codepoint >> 10) & 0x3ff));
+ appendHex(result, 0xdc00 + (codepoint & 0x3ff));
+ }
+ }
+ } break;
+ }
+ }
+ result += "\"";
+ return result;
+}
+
+String valueToQuotedString(const char* value) {
+ return valueToQuotedStringN(value, strlen(value));
+}
+
+// Class Writer
+// //////////////////////////////////////////////////////////////////
+Writer::~Writer() = default;
+
+// Class FastWriter
+// //////////////////////////////////////////////////////////////////
+
+FastWriter::FastWriter()
+
+ = default;
+
+void FastWriter::enableYAMLCompatibility() { yamlCompatibilityEnabled_ = true; }
+
+void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; }
+
+void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; }
+
+String FastWriter::write(const Value& root) {
+ document_.clear();
+ writeValue(root);
+ if (!omitEndingLineFeed_)
+ document_ += '\n';
+ return document_;
+}
+
+void FastWriter::writeValue(const Value& value) {
+ switch (value.type()) {
+ case nullValue:
+ if (!dropNullPlaceholders_)
+ document_ += "null";
+ break;
+ case intValue:
+ document_ += valueToString(value.asLargestInt());
+ break;
+ case uintValue:
+ document_ += valueToString(value.asLargestUInt());
+ break;
+ case realValue:
+ document_ += valueToString(value.asDouble());
+ break;
+ case stringValue: {
+ // Is NULL possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ document_ += valueToQuotedStringN(str, static_cast<size_t>(end - str));
+ break;
+ }
+ case booleanValue:
+ document_ += valueToString(value.asBool());
+ break;
+ case arrayValue: {
+ document_ += '[';
+ ArrayIndex size = value.size();
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (index > 0)
+ document_ += ',';
+ writeValue(value[index]);
+ }
+ document_ += ']';
+ } break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ document_ += '{';
+ for (auto it = members.begin(); it != members.end(); ++it) {
+ const String& name = *it;
+ if (it != members.begin())
+ document_ += ',';
+ document_ += valueToQuotedStringN(name.data(), name.length());
+ document_ += yamlCompatibilityEnabled_ ? ": " : ":";
+ writeValue(value[name]);
+ }
+ document_ += '}';
+ } break;
+ }
+}
+
+// Class StyledWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledWriter::StyledWriter() = default;
+
+String StyledWriter::write(const Value& root) {
+ document_.clear();
+ addChildValues_ = false;
+ indentString_.clear();
+ writeCommentBeforeValue(root);
+ writeValue(root);
+ writeCommentAfterValueOnSameLine(root);
+ document_ += '\n';
+ return document_;
+}
+
+void StyledWriter::writeValue(const Value& value) {
+ switch (value.type()) {
+ case nullValue:
+ pushValue("null");
+ break;
+ case intValue:
+ pushValue(valueToString(value.asLargestInt()));
+ break;
+ case uintValue:
+ pushValue(valueToString(value.asLargestUInt()));
+ break;
+ case realValue:
+ pushValue(valueToString(value.asDouble()));
+ break;
+ case stringValue: {
+ // Is NULL possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ pushValue(valueToQuotedStringN(str, static_cast<size_t>(end - str)));
+ else
+ pushValue("");
+ break;
+ }
+ case booleanValue:
+ pushValue(valueToString(value.asBool()));
+ break;
+ case arrayValue:
+ writeArrayValue(value);
+ break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ if (members.empty())
+ pushValue("{}");
+ else {
+ writeWithIndent("{");
+ indent();
+ auto it = members.begin();
+ for (;;) {
+ const String& name = *it;
+ const Value& childValue = value[name];
+ writeCommentBeforeValue(childValue);
+ writeWithIndent(valueToQuotedString(name.c_str()));
+ document_ += " : ";
+ writeValue(childValue);
+ if (++it == members.end()) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ document_ += ',';
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("}");
+ }
+ } break;
+ }
+}
+
+void StyledWriter::writeArrayValue(const Value& value) {
+ size_t size = value.size();
+ if (size == 0)
+ pushValue("[]");
+ else {
+ bool isArrayMultiLine = isMultilineArray(value);
+ if (isArrayMultiLine) {
+ writeWithIndent("[");
+ indent();
+ bool hasChildValue = !childValues_.empty();
+ ArrayIndex index = 0;
+ for (;;) {
+ const Value& childValue = value[index];
+ writeCommentBeforeValue(childValue);
+ if (hasChildValue)
+ writeWithIndent(childValues_[index]);
+ else {
+ writeIndent();
+ writeValue(childValue);
+ }
+ if (++index == size) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ document_ += ',';
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("]");
+ } else // output on a single line
+ {
+ assert(childValues_.size() == size);
+ document_ += "[ ";
+ for (size_t index = 0; index < size; ++index) {
+ if (index > 0)
+ document_ += ", ";
+ document_ += childValues_[index];
+ }
+ document_ += " ]";
+ }
+ }
+}
+
+bool StyledWriter::isMultilineArray(const Value& value) {
+ ArrayIndex const size = value.size();
+ bool isMultiLine = size * 3 >= rightMargin_;
+ childValues_.clear();
+ for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+ const Value& childValue = value[index];
+ isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+ !childValue.empty());
+ }
+ if (!isMultiLine) // check if line length > max line length
+ {
+ childValues_.reserve(size);
+ addChildValues_ = true;
+ ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (hasCommentForValue(value[index])) {
+ isMultiLine = true;
+ }
+ writeValue(value[index]);
+ lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+ }
+ addChildValues_ = false;
+ isMultiLine = isMultiLine || lineLength >= rightMargin_;
+ }
+ return isMultiLine;
+}
+
+void StyledWriter::pushValue(const String& value) {
+ if (addChildValues_)
+ childValues_.push_back(value);
+ else
+ document_ += value;
+}
+
+void StyledWriter::writeIndent() {
+ if (!document_.empty()) {
+ char last = document_[document_.length() - 1];
+ if (last == ' ') // already indented
+ return;
+ if (last != '\n') // Comments may add new-line
+ document_ += '\n';
+ }
+ document_ += indentString_;
+}
+
+void StyledWriter::writeWithIndent(const String& value) {
+ writeIndent();
+ document_ += value;
+}
+
+void StyledWriter::indent() { indentString_ += String(indentSize_, ' '); }
+
+void StyledWriter::unindent() {
+ assert(indentString_.size() >= indentSize_);
+ indentString_.resize(indentString_.size() - indentSize_);
+}
+
+void StyledWriter::writeCommentBeforeValue(const Value& root) {
+ if (!root.hasComment(commentBefore))
+ return;
+
+ document_ += '\n';
+ writeIndent();
+ const String& comment = root.getComment(commentBefore);
+ String::const_iterator iter = comment.begin();
+ while (iter != comment.end()) {
+ document_ += *iter;
+ if (*iter == '\n' && ((iter + 1) != comment.end() && *(iter + 1) == '/'))
+ writeIndent();
+ ++iter;
+ }
+
+ // Comments are stripped of trailing newlines, so add one here
+ document_ += '\n';
+}
+
+void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+ if (root.hasComment(commentAfterOnSameLine))
+ document_ += " " + root.getComment(commentAfterOnSameLine);
+
+ if (root.hasComment(commentAfter)) {
+ document_ += '\n';
+ document_ += root.getComment(commentAfter);
+ document_ += '\n';
+ }
+}
+
+bool StyledWriter::hasCommentForValue(const Value& value) {
+ return value.hasComment(commentBefore) ||
+ value.hasComment(commentAfterOnSameLine) ||
+ value.hasComment(commentAfter);
+}
+
+// Class StyledStreamWriter
+// //////////////////////////////////////////////////////////////////
+
+StyledStreamWriter::StyledStreamWriter(String indentation)
+ : document_(nullptr), indentation_(std::move(indentation)),
+ addChildValues_(), indented_(false) {}
+
+void StyledStreamWriter::write(OStream& out, const Value& root) {
+ document_ = &out;
+ addChildValues_ = false;
+ indentString_.clear();
+ indented_ = true;
+ writeCommentBeforeValue(root);
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(root);
+ writeCommentAfterValueOnSameLine(root);
+ *document_ << "\n";
+ document_ = nullptr; // Forget the stream, for safety.
+}
+
+void StyledStreamWriter::writeValue(const Value& value) {
+ switch (value.type()) {
+ case nullValue:
+ pushValue("null");
+ break;
+ case intValue:
+ pushValue(valueToString(value.asLargestInt()));
+ break;
+ case uintValue:
+ pushValue(valueToString(value.asLargestUInt()));
+ break;
+ case realValue:
+ pushValue(valueToString(value.asDouble()));
+ break;
+ case stringValue: {
+ // Is NULL possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ pushValue(valueToQuotedStringN(str, static_cast<size_t>(end - str)));
+ else
+ pushValue("");
+ break;
+ }
+ case booleanValue:
+ pushValue(valueToString(value.asBool()));
+ break;
+ case arrayValue:
+ writeArrayValue(value);
+ break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ if (members.empty())
+ pushValue("{}");
+ else {
+ writeWithIndent("{");
+ indent();
+ auto it = members.begin();
+ for (;;) {
+ const String& name = *it;
+ const Value& childValue = value[name];
+ writeCommentBeforeValue(childValue);
+ writeWithIndent(valueToQuotedString(name.c_str()));
+ *document_ << " : ";
+ writeValue(childValue);
+ if (++it == members.end()) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *document_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("}");
+ }
+ } break;
+ }
+}
+
+void StyledStreamWriter::writeArrayValue(const Value& value) {
+ unsigned size = value.size();
+ if (size == 0)
+ pushValue("[]");
+ else {
+ bool isArrayMultiLine = isMultilineArray(value);
+ if (isArrayMultiLine) {
+ writeWithIndent("[");
+ indent();
+ bool hasChildValue = !childValues_.empty();
+ unsigned index = 0;
+ for (;;) {
+ const Value& childValue = value[index];
+ writeCommentBeforeValue(childValue);
+ if (hasChildValue)
+ writeWithIndent(childValues_[index]);
+ else {
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(childValue);
+ indented_ = false;
+ }
+ if (++index == size) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *document_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("]");
+ } else // output on a single line
+ {
+ assert(childValues_.size() == size);
+ *document_ << "[ ";
+ for (unsigned index = 0; index < size; ++index) {
+ if (index > 0)
+ *document_ << ", ";
+ *document_ << childValues_[index];
+ }
+ *document_ << " ]";
+ }
+ }
+}
+
+bool StyledStreamWriter::isMultilineArray(const Value& value) {
+ ArrayIndex const size = value.size();
+ bool isMultiLine = size * 3 >= rightMargin_;
+ childValues_.clear();
+ for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+ const Value& childValue = value[index];
+ isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+ !childValue.empty());
+ }
+ if (!isMultiLine) // check if line length > max line length
+ {
+ childValues_.reserve(size);
+ addChildValues_ = true;
+ ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (hasCommentForValue(value[index])) {
+ isMultiLine = true;
+ }
+ writeValue(value[index]);
+ lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+ }
+ addChildValues_ = false;
+ isMultiLine = isMultiLine || lineLength >= rightMargin_;
+ }
+ return isMultiLine;
+}
+
+void StyledStreamWriter::pushValue(const String& value) {
+ if (addChildValues_)
+ childValues_.push_back(value);
+ else
+ *document_ << value;
+}
+
+void StyledStreamWriter::writeIndent() {
+ // blep intended this to look at the so-far-written string
+ // to determine whether we are already indented, but
+ // with a stream we cannot do that. So we rely on some saved state.
+ // The caller checks indented_.
+ *document_ << '\n' << indentString_;
+}
+
+void StyledStreamWriter::writeWithIndent(const String& value) {
+ if (!indented_)
+ writeIndent();
+ *document_ << value;
+ indented_ = false;
+}
+
+void StyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void StyledStreamWriter::unindent() {
+ assert(indentString_.size() >= indentation_.size());
+ indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void StyledStreamWriter::writeCommentBeforeValue(const Value& root) {
+ if (!root.hasComment(commentBefore))
+ return;
+
+ if (!indented_)
+ writeIndent();
+ const String& comment = root.getComment(commentBefore);
+ String::const_iterator iter = comment.begin();
+ while (iter != comment.end()) {
+ *document_ << *iter;
+ if (*iter == '\n' && ((iter + 1) != comment.end() && *(iter + 1) == '/'))
+ // writeIndent(); // would include newline
+ *document_ << indentString_;
+ ++iter;
+ }
+ indented_ = false;
+}
+
+void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) {
+ if (root.hasComment(commentAfterOnSameLine))
+ *document_ << ' ' << root.getComment(commentAfterOnSameLine);
+
+ if (root.hasComment(commentAfter)) {
+ writeIndent();
+ *document_ << root.getComment(commentAfter);
+ }
+ indented_ = false;
+}
+
+bool StyledStreamWriter::hasCommentForValue(const Value& value) {
+ return value.hasComment(commentBefore) ||
+ value.hasComment(commentAfterOnSameLine) ||
+ value.hasComment(commentAfter);
+}
+
+//////////////////////////
+// BuiltStyledStreamWriter
+
+/// Scoped enums are not available until C++11.
+struct CommentStyle {
+ /// Decide whether to write comments.
+ enum Enum {
+ None, ///< Drop all comments.
+ Most, ///< Recover odd behavior of previous versions (not implemented yet).
+ All ///< Keep all comments.
+ };
+};
+
+struct BuiltStyledStreamWriter : public StreamWriter {
+ BuiltStyledStreamWriter(String indentation, CommentStyle::Enum cs,
+ String colonSymbol, String nullSymbol,
+ String endingLineFeedSymbol, bool useSpecialFloats,
+ bool emitUTF8, unsigned int precision,
+ PrecisionType precisionType);
+ int write(Value const& root, OStream* sout) override;
+
+private:
+ void writeValue(Value const& value);
+ void writeArrayValue(Value const& value);
+ bool isMultilineArray(Value const& value);
+ void pushValue(String const& value);
+ void writeIndent();
+ void writeWithIndent(String const& value);
+ void indent();
+ void unindent();
+ void writeCommentBeforeValue(Value const& root);
+ void writeCommentAfterValueOnSameLine(Value const& root);
+ static bool hasCommentForValue(const Value& value);
+
+ using ChildValues = std::vector<String>;
+
+ ChildValues childValues_;
+ String indentString_;
+ unsigned int rightMargin_;
+ String indentation_;
+ CommentStyle::Enum cs_;
+ String colonSymbol_;
+ String nullSymbol_;
+ String endingLineFeedSymbol_;
+ bool addChildValues_ : 1;
+ bool indented_ : 1;
+ bool useSpecialFloats_ : 1;
+ bool emitUTF8_ : 1;
+ unsigned int precision_;
+ PrecisionType precisionType_;
+};
+BuiltStyledStreamWriter::BuiltStyledStreamWriter(
+ String indentation, CommentStyle::Enum cs, String colonSymbol,
+ String nullSymbol, String endingLineFeedSymbol, bool useSpecialFloats,
+ bool emitUTF8, unsigned int precision, PrecisionType precisionType)
+ : rightMargin_(74), indentation_(std::move(indentation)), cs_(cs),
+ colonSymbol_(std::move(colonSymbol)), nullSymbol_(std::move(nullSymbol)),
+ endingLineFeedSymbol_(std::move(endingLineFeedSymbol)),
+ addChildValues_(false), indented_(false),
+ useSpecialFloats_(useSpecialFloats), emitUTF8_(emitUTF8),
+ precision_(precision), precisionType_(precisionType) {}
+int BuiltStyledStreamWriter::write(Value const& root, OStream* sout) {
+ sout_ = sout;
+ addChildValues_ = false;
+ indented_ = true;
+ indentString_.clear();
+ writeCommentBeforeValue(root);
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(root);
+ writeCommentAfterValueOnSameLine(root);
+ *sout_ << endingLineFeedSymbol_;
+ sout_ = nullptr;
+ return 0;
+}
+void BuiltStyledStreamWriter::writeValue(Value const& value) {
+ switch (value.type()) {
+ case nullValue:
+ pushValue(nullSymbol_);
+ break;
+ case intValue:
+ pushValue(valueToString(value.asLargestInt()));
+ break;
+ case uintValue:
+ pushValue(valueToString(value.asLargestUInt()));
+ break;
+ case realValue:
+ pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_,
+ precisionType_));
+ break;
+ case stringValue: {
+ // Is NULL is possible for value.string_? No.
+ char const* str;
+ char const* end;
+ bool ok = value.getString(&str, &end);
+ if (ok)
+ pushValue(
+ valueToQuotedStringN(str, static_cast<size_t>(end - str), emitUTF8_));
+ else
+ pushValue("");
+ break;
+ }
+ case booleanValue:
+ pushValue(valueToString(value.asBool()));
+ break;
+ case arrayValue:
+ writeArrayValue(value);
+ break;
+ case objectValue: {
+ Value::Members members(value.getMemberNames());
+ if (members.empty())
+ pushValue("{}");
+ else {
+ writeWithIndent("{");
+ indent();
+ auto it = members.begin();
+ for (;;) {
+ String const& name = *it;
+ Value const& childValue = value[name];
+ writeCommentBeforeValue(childValue);
+ writeWithIndent(
+ valueToQuotedStringN(name.data(), name.length(), emitUTF8_));
+ *sout_ << colonSymbol_;
+ writeValue(childValue);
+ if (++it == members.end()) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *sout_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("}");
+ }
+ } break;
+ }
+}
+
+void BuiltStyledStreamWriter::writeArrayValue(Value const& value) {
+ unsigned size = value.size();
+ if (size == 0)
+ pushValue("[]");
+ else {
+ bool isMultiLine = (cs_ == CommentStyle::All) || isMultilineArray(value);
+ if (isMultiLine) {
+ writeWithIndent("[");
+ indent();
+ bool hasChildValue = !childValues_.empty();
+ unsigned index = 0;
+ for (;;) {
+ Value const& childValue = value[index];
+ writeCommentBeforeValue(childValue);
+ if (hasChildValue)
+ writeWithIndent(childValues_[index]);
+ else {
+ if (!indented_)
+ writeIndent();
+ indented_ = true;
+ writeValue(childValue);
+ indented_ = false;
+ }
+ if (++index == size) {
+ writeCommentAfterValueOnSameLine(childValue);
+ break;
+ }
+ *sout_ << ",";
+ writeCommentAfterValueOnSameLine(childValue);
+ }
+ unindent();
+ writeWithIndent("]");
+ } else // output on a single line
+ {
+ assert(childValues_.size() == size);
+ *sout_ << "[";
+ if (!indentation_.empty())
+ *sout_ << " ";
+ for (unsigned index = 0; index < size; ++index) {
+ if (index > 0)
+ *sout_ << ((!indentation_.empty()) ? ", " : ",");
+ *sout_ << childValues_[index];
+ }
+ if (!indentation_.empty())
+ *sout_ << " ";
+ *sout_ << "]";
+ }
+ }
+}
+
+bool BuiltStyledStreamWriter::isMultilineArray(Value const& value) {
+ ArrayIndex const size = value.size();
+ bool isMultiLine = size * 3 >= rightMargin_;
+ childValues_.clear();
+ for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) {
+ Value const& childValue = value[index];
+ isMultiLine = ((childValue.isArray() || childValue.isObject()) &&
+ !childValue.empty());
+ }
+ if (!isMultiLine) // check if line length > max line length
+ {
+ childValues_.reserve(size);
+ addChildValues_ = true;
+ ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]'
+ for (ArrayIndex index = 0; index < size; ++index) {
+ if (hasCommentForValue(value[index])) {
+ isMultiLine = true;
+ }
+ writeValue(value[index]);
+ lineLength += static_cast<ArrayIndex>(childValues_[index].length());
+ }
+ addChildValues_ = false;
+ isMultiLine = isMultiLine || lineLength >= rightMargin_;
+ }
+ return isMultiLine;
+}
+
+void BuiltStyledStreamWriter::pushValue(String const& value) {
+ if (addChildValues_)
+ childValues_.push_back(value);
+ else
+ *sout_ << value;
+}
+
+void BuiltStyledStreamWriter::writeIndent() {
+ // blep intended this to look at the so-far-written string
+ // to determine whether we are already indented, but
+ // with a stream we cannot do that. So we rely on some saved state.
+ // The caller checks indented_.
+
+ if (!indentation_.empty()) {
+ // In this case, drop newlines too.
+ *sout_ << '\n' << indentString_;
+ }
+}
+
+void BuiltStyledStreamWriter::writeWithIndent(String const& value) {
+ if (!indented_)
+ writeIndent();
+ *sout_ << value;
+ indented_ = false;
+}
+
+void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; }
+
+void BuiltStyledStreamWriter::unindent() {
+ assert(indentString_.size() >= indentation_.size());
+ indentString_.resize(indentString_.size() - indentation_.size());
+}
+
+void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) {
+ if (cs_ == CommentStyle::None)
+ return;
+ if (!root.hasComment(commentBefore))
+ return;
+
+ if (!indented_)
+ writeIndent();
+ const String& comment = root.getComment(commentBefore);
+ String::const_iterator iter = comment.begin();
+ while (iter != comment.end()) {
+ *sout_ << *iter;
+ if (*iter == '\n' && ((iter + 1) != comment.end() && *(iter + 1) == '/'))
+ // writeIndent(); // would write extra newline
+ *sout_ << indentString_;
+ ++iter;
+ }
+ indented_ = false;
+}
+
+void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(
+ Value const& root) {
+ if (cs_ == CommentStyle::None)
+ return;
+ if (root.hasComment(commentAfterOnSameLine))
+ *sout_ << " " + root.getComment(commentAfterOnSameLine);
+
+ if (root.hasComment(commentAfter)) {
+ writeIndent();
+ *sout_ << root.getComment(commentAfter);
+ }
+}
+
+// static
+bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) {
+ return value.hasComment(commentBefore) ||
+ value.hasComment(commentAfterOnSameLine) ||
+ value.hasComment(commentAfter);
+}
+
+///////////////
+// StreamWriter
+
+StreamWriter::StreamWriter() : sout_(nullptr) {}
+StreamWriter::~StreamWriter() = default;
+StreamWriter::Factory::~Factory() = default;
+StreamWriterBuilder::StreamWriterBuilder() { setDefaults(&settings_); }
+StreamWriterBuilder::~StreamWriterBuilder() = default;
+StreamWriter* StreamWriterBuilder::newStreamWriter() const {
+ const String indentation = settings_["indentation"].asString();
+ const String cs_str = settings_["commentStyle"].asString();
+ const String pt_str = settings_["precisionType"].asString();
+ const bool eyc = settings_["enableYAMLCompatibility"].asBool();
+ const bool dnp = settings_["dropNullPlaceholders"].asBool();
+ const bool usf = settings_["useSpecialFloats"].asBool();
+ const bool emitUTF8 = settings_["emitUTF8"].asBool();
+ unsigned int pre = settings_["precision"].asUInt();
+ CommentStyle::Enum cs = CommentStyle::All;
+ if (cs_str == "All") {
+ cs = CommentStyle::All;
+ } else if (cs_str == "None") {
+ cs = CommentStyle::None;
+ } else {
+ throwRuntimeError("commentStyle must be 'All' or 'None'");
+ }
+ PrecisionType precisionType(significantDigits);
+ if (pt_str == "significant") {
+ precisionType = PrecisionType::significantDigits;
+ } else if (pt_str == "decimal") {
+ precisionType = PrecisionType::decimalPlaces;
+ } else {
+ throwRuntimeError("precisionType must be 'significant' or 'decimal'");
+ }
+ String colonSymbol = " : ";
+ if (eyc) {
+ colonSymbol = ": ";
+ } else if (indentation.empty()) {
+ colonSymbol = ":";
+ }
+ String nullSymbol = "null";
+ if (dnp) {
+ nullSymbol.clear();
+ }
+ if (pre > 17)
+ pre = 17;
+ String endingLineFeedSymbol;
+ return new BuiltStyledStreamWriter(indentation, cs, colonSymbol, nullSymbol,
+ endingLineFeedSymbol, usf, emitUTF8, pre,
+ precisionType);
+}
+
+bool StreamWriterBuilder::validate(Json::Value* invalid) const {
+ static const auto& valid_keys = *new std::set<String>{
+ "indentation",
+ "commentStyle",
+ "enableYAMLCompatibility",
+ "dropNullPlaceholders",
+ "useSpecialFloats",
+ "emitUTF8",
+ "precision",
+ "precisionType",
+ };
+ for (auto si = settings_.begin(); si != settings_.end(); ++si) {
+ auto key = si.name();
+ if (valid_keys.count(key))
+ continue;
+ if (invalid)
+ (*invalid)[key] = *si;
+ else
+ return false;
+ }
+ return invalid ? invalid->empty() : true;
+}
+
+Value& StreamWriterBuilder::operator[](const String& key) {
+ return settings_[key];
+}
+// static
+void StreamWriterBuilder::setDefaults(Json::Value* settings) {
+ //! [StreamWriterBuilderDefaults]
+ (*settings)["commentStyle"] = "All";
+ (*settings)["indentation"] = "\t";
+ (*settings)["enableYAMLCompatibility"] = false;
+ (*settings)["dropNullPlaceholders"] = false;
+ (*settings)["useSpecialFloats"] = false;
+ (*settings)["emitUTF8"] = false;
+ (*settings)["precision"] = 17;
+ (*settings)["precisionType"] = "significant";
+ //! [StreamWriterBuilderDefaults]
+}
+
+String writeString(StreamWriter::Factory const& factory, Value const& root) {
+ OStringStream sout;
+ StreamWriterPtr const writer(factory.newStreamWriter());
+ writer->write(root, &sout);
+ return sout.str();
+}
+
+OStream& operator<<(OStream& sout, Value const& root) {
+ StreamWriterBuilder builder;
+ StreamWriterPtr const writer(builder.newStreamWriter());
+ writer->write(root, &sout);
+ return sout;
+}
+
+} // namespace Json
diff --git a/thirdparty/openxr/src/loader/.gitignore b/thirdparty/openxr/src/loader/.gitignore
new file mode 100644
index 0000000000..5e8e0ba3a4
--- /dev/null
+++ b/thirdparty/openxr/src/loader/.gitignore
@@ -0,0 +1,5 @@
+# Copyright (c) 2020 The Khronos Group Inc.
+#
+# SPDX-License-Identifier: Apache-2.0
+
+!openxr_loader_for_android.pom
diff --git a/thirdparty/openxr/src/loader/android_utilities.cpp b/thirdparty/openxr/src/loader/android_utilities.cpp
new file mode 100644
index 0000000000..807a775820
--- /dev/null
+++ b/thirdparty/openxr/src/loader/android_utilities.cpp
@@ -0,0 +1,319 @@
+// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2021, Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+
+#include "android_utilities.h"
+
+#ifdef __ANDROID__
+#include <wrap/android.net.h>
+#include <wrap/android.content.h>
+#include <wrap/android.database.h>
+#include <json/value.h>
+
+#include <openxr/openxr.h>
+
+#include <sstream>
+#include <vector>
+#include <android/log.h>
+
+#define ALOGE(...) __android_log_print(ANDROID_LOG_ERROR, "openxr_loader", __VA_ARGS__)
+#define ALOGW(...) __android_log_print(ANDROID_LOG_WARN, "openxr_loader", __VA_ARGS__)
+#define ALOGV(...) __android_log_print(ANDROID_LOG_VERBOSE, "openxr_loader", __VA_ARGS__)
+#define ALOGI(...) __android_log_print(ANDROID_LOG_INFO, "openxr_loader", __VA_ARGS__)
+
+namespace openxr_android {
+using wrap::android::content::ContentUris;
+using wrap::android::content::Context;
+using wrap::android::database::Cursor;
+using wrap::android::net::Uri;
+using wrap::android::net::Uri_Builder;
+
+// Code in here corresponds roughly to the Java "BrokerContract" class and subclasses.
+namespace {
+constexpr auto AUTHORITY = "org.khronos.openxr.runtime_broker";
+constexpr auto SYSTEM_AUTHORITY = "org.khronos.openxr.system_runtime_broker";
+constexpr auto BASE_PATH = "openxr";
+constexpr auto ABI_PATH = "abi";
+constexpr auto RUNTIMES_PATH = "runtimes";
+
+constexpr const char *getBrokerAuthority(bool systemBroker) { return systemBroker ? SYSTEM_AUTHORITY : AUTHORITY; }
+
+struct BaseColumns {
+ /**
+ * The unique ID for a row.
+ */
+ [[maybe_unused]] static constexpr auto ID = "_id";
+};
+
+/**
+ * Contains details for the /openxr/[major_ver]/abi/[abi]/runtimes/active URI.
+ * <p>
+ * This URI represents a "table" containing at most one item, the currently active runtime. The
+ * policy of which runtime is chosen to be active (if more than one is installed) is left to the
+ * content provider.
+ * <p>
+ * No sort order is required to be honored by the content provider.
+ */
+namespace active_runtime {
+/**
+ * Final path component to this URI.
+ */
+static constexpr auto TABLE_PATH = "active";
+
+/**
+ * Create a content URI for querying the data on the active runtime for a
+ * given major version of OpenXR.
+ *
+ * @param systemBroker If the system runtime broker (instead of the installable one) should be queried.
+ * @param majorVer The major version of OpenXR.
+ * @param abi The Android ABI name in use.
+ * @return A content URI for a single item: the active runtime.
+ */
+static Uri makeContentUri(bool systemBroker, int majorVersion, const char *abi) {
+ auto builder = Uri_Builder::construct();
+ builder.scheme("content")
+ .authority(getBrokerAuthority(systemBroker))
+ .appendPath(BASE_PATH)
+ .appendPath(std::to_string(majorVersion))
+ .appendPath(ABI_PATH)
+ .appendPath(abi)
+ .appendPath(RUNTIMES_PATH)
+ .appendPath(TABLE_PATH);
+ ContentUris::appendId(builder, 0);
+ return builder.build();
+}
+
+struct Columns : BaseColumns {
+ /**
+ * Constant for the PACKAGE_NAME column name
+ */
+ static constexpr auto PACKAGE_NAME = "package_name";
+
+ /**
+ * Constant for the NATIVE_LIB_DIR column name
+ */
+ static constexpr auto NATIVE_LIB_DIR = "native_lib_dir";
+
+ /**
+ * Constant for the SO_FILENAME column name
+ */
+ static constexpr auto SO_FILENAME = "so_filename";
+
+ /**
+ * Constant for the HAS_FUNCTIONS column name.
+ * <p>
+ * If this column contains true, you should check the /functions/ URI for that runtime.
+ */
+ static constexpr auto HAS_FUNCTIONS = "has_functions";
+};
+} // namespace active_runtime
+
+/**
+ * Contains details for the /openxr/[major_ver]/abi/[abi]/runtimes/[package]/functions URI.
+ * <p>
+ * This URI is for package-specific function name remapping. Since this is an optional field in
+ * the corresponding JSON manifests for OpenXR, it is optional here as well. If the active
+ * runtime contains "true" in its "has_functions" column, then this table must exist and be
+ * queryable.
+ * <p>
+ * No sort order is required to be honored by the content provider.
+ */
+namespace functions {
+/**
+ * Final path component to this URI.
+ */
+static constexpr auto TABLE_PATH = "functions";
+
+/**
+ * Create a content URI for querying all rows of the function remapping data for a given
+ * runtime package and major version of OpenXR.
+ *
+ * @param systemBroker If the system runtime broker (instead of the installable one) should be queried.
+ * @param majorVer The major version of OpenXR.
+ * @param packageName The package name of the runtime.
+ * @param abi The Android ABI name in use.
+ * @return A content URI for the entire table: the function remapping for that runtime.
+ */
+static Uri makeContentUri(bool systemBroker, int majorVersion, std::string const &packageName, const char *abi) {
+ auto builder = Uri_Builder::construct();
+ builder.scheme("content")
+ .authority(getBrokerAuthority(systemBroker))
+ .appendPath(BASE_PATH)
+ .appendPath(std::to_string(majorVersion))
+ .appendPath(ABI_PATH)
+ .appendPath(abi)
+ .appendPath(RUNTIMES_PATH)
+ .appendPath(packageName)
+ .appendPath(TABLE_PATH);
+ return builder.build();
+}
+
+struct Columns : BaseColumns {
+ /**
+ * Constant for the FUNCTION_NAME column name
+ */
+ static constexpr auto FUNCTION_NAME = "function_name";
+
+ /**
+ * Constant for the SYMBOL_NAME column name
+ */
+ static constexpr auto SYMBOL_NAME = "symbol_name";
+};
+} // namespace functions
+
+} // namespace
+
+static inline jni::Array<std::string> makeArray(std::initializer_list<const char *> &&list) {
+ auto ret = jni::Array<std::string>{(long)list.size()};
+ long i = 0;
+ for (auto &&elt : list) {
+ ret.setElement(i, elt);
+ ++i;
+ }
+ return ret;
+}
+static constexpr auto TAG = "OpenXR-Loader";
+
+#if defined(__arm__)
+static constexpr auto ABI = "armeabi-v7l";
+#elif defined(__aarch64__)
+static constexpr auto ABI = "arm64-v8a";
+#elif defined(__i386__)
+static constexpr auto ABI = "x86";
+#elif defined(__x86_64__)
+static constexpr auto ABI = "x86_64";
+#else
+#error "Unknown ABI!"
+#endif
+
+/// Helper class to generate the jsoncpp object corresponding to a synthetic runtime manifest.
+class JsonManifestBuilder {
+ public:
+ JsonManifestBuilder(const std::string &libraryPathParent, const std::string &libraryPath);
+ JsonManifestBuilder &function(const std::string &functionName, const std::string &symbolName);
+
+ Json::Value build() const { return root_node; }
+
+ private:
+ Json::Value root_node;
+};
+
+inline JsonManifestBuilder::JsonManifestBuilder(const std::string &libraryPathParent, const std::string &libraryPath)
+ : root_node(Json::objectValue) {
+ root_node["file_format_version"] = "1.0.0";
+ root_node["instance_extensions"] = Json::Value(Json::arrayValue);
+ root_node["functions"] = Json::Value(Json::objectValue);
+ root_node[libraryPathParent] = Json::objectValue;
+ root_node[libraryPathParent]["library_path"] = libraryPath;
+}
+
+inline JsonManifestBuilder &JsonManifestBuilder::function(const std::string &functionName, const std::string &symbolName) {
+ root_node["functions"][functionName] = symbolName;
+ return *this;
+}
+
+static constexpr const char *getBrokerTypeName(bool systemBroker) { return systemBroker ? "system" : "installable"; }
+
+static int populateFunctions(wrap::android::content::Context const &context, bool systemBroker, const std::string &packageName,
+ JsonManifestBuilder &builder) {
+ jni::Array<std::string> projection = makeArray({functions::Columns::FUNCTION_NAME, functions::Columns::SYMBOL_NAME});
+
+ auto uri = functions::makeContentUri(systemBroker, XR_VERSION_MAJOR(XR_CURRENT_API_VERSION), packageName, ABI);
+ ALOGI("populateFunctions: Querying URI: %s", uri.toString().c_str());
+
+ Cursor cursor = context.getContentResolver().query(uri, projection);
+
+ if (cursor.isNull()) {
+ ALOGE("Null cursor when querying content resolver for functions.");
+ return -1;
+ }
+ if (cursor.getCount() < 1) {
+ ALOGE("Non-null but empty cursor when querying content resolver for functions.");
+ cursor.close();
+ return -1;
+ }
+ auto functionIndex = cursor.getColumnIndex(functions::Columns::FUNCTION_NAME);
+ auto symbolIndex = cursor.getColumnIndex(functions::Columns::SYMBOL_NAME);
+ while (cursor.moveToNext()) {
+ builder.function(cursor.getString(functionIndex), cursor.getString(symbolIndex));
+ }
+
+ cursor.close();
+ return 0;
+}
+
+/// Get cursor for active runtime, parameterized by whether or not we use the system broker
+static bool getActiveRuntimeCursor(wrap::android::content::Context const &context, jni::Array<std::string> const &projection,
+ bool systemBroker, Cursor &cursor) {
+ auto uri = active_runtime::makeContentUri(systemBroker, XR_VERSION_MAJOR(XR_CURRENT_API_VERSION), ABI);
+ ALOGI("getActiveRuntimeCursor: Querying URI: %s", uri.toString().c_str());
+ try {
+ cursor = context.getContentResolver().query(uri, projection);
+ } catch (const std::exception &e) {
+ ALOGW("Exception when querying %s content resolver: %s", getBrokerTypeName(systemBroker), e.what());
+ cursor = {};
+ return false;
+ }
+
+ if (cursor.isNull()) {
+ ALOGW("Null cursor when querying %s content resolver.", getBrokerTypeName(systemBroker));
+ cursor = {};
+ return false;
+ }
+ if (cursor.getCount() < 1) {
+ ALOGW("Non-null but empty cursor when querying %s content resolver.", getBrokerTypeName(systemBroker));
+ cursor.close();
+ cursor = {};
+ return false;
+ }
+ return true;
+}
+
+int getActiveRuntimeVirtualManifest(wrap::android::content::Context const &context, Json::Value &virtualManifest) {
+ jni::Array<std::string> projection = makeArray({active_runtime::Columns::PACKAGE_NAME, active_runtime::Columns::NATIVE_LIB_DIR,
+ active_runtime::Columns::SO_FILENAME, active_runtime::Columns::HAS_FUNCTIONS});
+
+ // First, try getting the installable broker's provider
+ bool systemBroker = false;
+ Cursor cursor;
+ if (!getActiveRuntimeCursor(context, projection, systemBroker, cursor)) {
+ // OK, try the system broker as a fallback.
+ systemBroker = true;
+ getActiveRuntimeCursor(context, projection, systemBroker, cursor);
+ }
+
+ if (cursor.isNull()) {
+ // Couldn't find either broker
+ ALOGE("Could access neither the installable nor system runtime broker.");
+ return -1;
+ }
+
+ cursor.moveToFirst();
+
+ auto filename = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::SO_FILENAME));
+ auto libDir = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::NATIVE_LIB_DIR));
+ auto packageName = cursor.getString(cursor.getColumnIndex(active_runtime::Columns::PACKAGE_NAME));
+
+ auto hasFunctions = cursor.getInt(cursor.getColumnIndex(active_runtime::Columns::HAS_FUNCTIONS)) == 1;
+ __android_log_print(ANDROID_LOG_INFO, TAG, "Got runtime: package: %s, so filename: %s, native lib dir: %s, has functions: %s",
+ packageName.c_str(), libDir.c_str(), filename.c_str(), (hasFunctions ? "yes" : "no"));
+
+ auto lib_path = libDir + "/" + filename;
+ cursor.close();
+
+ JsonManifestBuilder builder{"runtime", lib_path};
+ if (hasFunctions) {
+ int result = populateFunctions(context, systemBroker, packageName, builder);
+ if (result != 0) {
+ return result;
+ }
+ }
+ virtualManifest = builder.build();
+ return 0;
+}
+} // namespace openxr_android
+
+#endif // __ANDROID__
diff --git a/thirdparty/openxr/src/loader/android_utilities.h b/thirdparty/openxr/src/loader/android_utilities.h
new file mode 100644
index 0000000000..adb8abaf1f
--- /dev/null
+++ b/thirdparty/openxr/src/loader/android_utilities.h
@@ -0,0 +1,32 @@
+// Copyright (c) 2020-2022, The Khronos Group Inc.
+// Copyright (c) 2020-2021, Collabora, Ltd.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+
+#pragma once
+#ifdef __ANDROID__
+
+#include "wrap/android.content.h"
+
+#include <string>
+namespace Json {
+class Value;
+} // namespace Json
+
+namespace openxr_android {
+using wrap::android::content::Context;
+
+/*!
+ * Find the single active OpenXR runtime on the system, and return a constructed JSON object representing it.
+ *
+ * @param context An Android context, preferably an Activity Context.
+ * @param[out] virtualManifest The Json::Value to fill with the virtual manifest.
+ *
+ * @return 0 on success, something else on failure.
+ */
+int getActiveRuntimeVirtualManifest(wrap::android::content::Context const &context, Json::Value &virtualManifest);
+} // namespace openxr_android
+
+#endif // __ANDROID__
diff --git a/thirdparty/openxr/src/loader/api_layer_interface.cpp b/thirdparty/openxr/src/loader/api_layer_interface.cpp
new file mode 100644
index 0000000000..c3fd5bb7f1
--- /dev/null
+++ b/thirdparty/openxr/src/loader/api_layer_interface.cpp
@@ -0,0 +1,399 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "api_layer_interface.hpp"
+
+#include "loader_interfaces.h"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "manifest_file.hpp"
+#include "platform_utils.hpp"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+#define OPENXR_ENABLE_LAYERS_ENV_VAR "XR_ENABLE_API_LAYERS"
+
+// Add any layers defined in the loader layer environment variable.
+static void AddEnvironmentApiLayers(std::vector<std::string>& enabled_layers) {
+ std::string layers = PlatformUtilsGetEnv(OPENXR_ENABLE_LAYERS_ENV_VAR);
+
+ std::size_t last_found = 0;
+ std::size_t found = layers.find_first_of(PATH_SEPARATOR);
+ std::string cur_search;
+
+ // Handle any path listings in the string (separated by the appropriate path separator)
+ while (found != std::string::npos) {
+ cur_search = layers.substr(last_found, found - last_found);
+ enabled_layers.push_back(cur_search);
+ last_found = found + 1;
+ found = layers.find_first_of(PATH_SEPARATOR, last_found);
+ }
+
+ // If there's something remaining in the string, copy it over
+ if (last_found < layers.size()) {
+ cur_search = layers.substr(last_found);
+ enabled_layers.push_back(cur_search);
+ }
+}
+
+XrResult ApiLayerInterface::GetApiLayerProperties(const std::string& openxr_command, uint32_t incoming_count,
+ uint32_t* outgoing_count, XrApiLayerProperties* api_layer_properties) {
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> manifest_files;
+ uint32_t manifest_count = 0;
+
+ // Validate props struct before proceeding
+ if (0 < incoming_count && nullptr != api_layer_properties) {
+ for (uint32_t i = 0; i < incoming_count; i++) {
+ if (XR_TYPE_API_LAYER_PROPERTIES != api_layer_properties[i].type) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "VUID-XrApiLayerProperties-type-type: unknown type in api_layer_properties");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ }
+ }
+
+ // "Independent of elementCapacityInput or elements parameters, elementCountOutput must be a valid pointer,
+ // and the function sets elementCountOutput." - 2.11
+ if (nullptr == outgoing_count) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ // Find any implicit layers which we may need to report information for.
+ XrResult result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, manifest_files);
+ if (XR_SUCCEEDED(result)) {
+ // Find any explicit layers which we may need to report information for.
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, manifest_files);
+ }
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "ApiLayerInterface::GetApiLayerProperties - failed searching for API layer manifest files");
+ return result;
+ }
+
+ manifest_count = static_cast<uint32_t>(manifest_files.size());
+ if (nullptr == outgoing_count) {
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
+ "VUID-xrEnumerateApiLayerProperties-propertyCountOutput-parameter: null propertyCountOutput");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ *outgoing_count = manifest_count;
+ if (0 == incoming_count) {
+ // capacity check only
+ return XR_SUCCESS;
+ }
+ if (nullptr == api_layer_properties) {
+ // incoming_count is not 0 BUT the api_layer_properties is NULL
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
+ "VUID-xrEnumerateApiLayerProperties-properties-parameter: non-zero capacity but null array");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ if (incoming_count < manifest_count) {
+ LoaderLogger::LogErrorMessage(
+ "xrEnumerateInstanceExtensionProperties",
+ "VUID-xrEnumerateApiLayerProperties-propertyCapacityInput-parameter: insufficient space in array");
+ return XR_ERROR_SIZE_INSUFFICIENT;
+ }
+
+ for (uint32_t prop = 0; prop < incoming_count && prop < manifest_count; ++prop) {
+ manifest_files[prop]->PopulateApiLayerProperties(api_layer_properties[prop]);
+ }
+ return XR_SUCCESS;
+}
+
+XrResult ApiLayerInterface::GetInstanceExtensionProperties(const std::string& openxr_command, const char* layer_name,
+ std::vector<XrExtensionProperties>& extension_properties) {
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> manifest_files;
+
+ // If a layer name is supplied, only use the information out of that one layer
+ if (nullptr != layer_name && 0 != strlen(layer_name)) {
+ XrResult result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, manifest_files);
+ if (XR_SUCCEEDED(result)) {
+ // Find any explicit layers which we may need to report information for.
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, manifest_files);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage(
+ openxr_command,
+ "ApiLayerInterface::GetInstanceExtensionProperties - failed searching for API layer manifest files");
+ return result;
+ }
+
+ bool found = false;
+ auto num_files = static_cast<uint32_t>(manifest_files.size());
+ for (uint32_t man_file = 0; man_file < num_files; ++man_file) {
+ // If a layer with the provided name exists, get it's instance extension information.
+ if (manifest_files[man_file]->LayerName() == layer_name) {
+ manifest_files[man_file]->GetInstanceExtensionProperties(extension_properties);
+ found = true;
+ break;
+ }
+ }
+
+ // If nothing found, report 0
+ if (!found) {
+ return XR_ERROR_API_LAYER_NOT_PRESENT;
+ }
+ }
+ // Otherwise, we want to add only implicit API layers and explicit API layers enabled using the environment variables
+ } else {
+ XrResult result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, manifest_files);
+ if (XR_SUCCEEDED(result)) {
+ // Find any environmentally enabled explicit layers. If they're present, treat them like implicit layers
+ // since we know that they're going to be enabled.
+ std::vector<std::string> env_enabled_layers;
+ AddEnvironmentApiLayers(env_enabled_layers);
+ if (!env_enabled_layers.empty()) {
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> exp_layer_man_files = {};
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, exp_layer_man_files);
+ if (XR_SUCCEEDED(result)) {
+ for (auto& exp_layer_man_file : exp_layer_man_files) {
+ for (std::string& enabled_layer : env_enabled_layers) {
+ // If this is an enabled layer, transfer it over to the manifest list.
+ if (enabled_layer == exp_layer_man_file->LayerName()) {
+ manifest_files.push_back(std::move(exp_layer_man_file));
+ break;
+ }
+ }
+ }
+ }
+ }
+ }
+
+ // Grab the layer instance extensions information
+ auto num_files = static_cast<uint32_t>(manifest_files.size());
+ for (uint32_t man_file = 0; man_file < num_files; ++man_file) {
+ manifest_files[man_file]->GetInstanceExtensionProperties(extension_properties);
+ }
+ }
+ return XR_SUCCESS;
+}
+
+XrResult ApiLayerInterface::LoadApiLayers(const std::string& openxr_command, uint32_t enabled_api_layer_count,
+ const char* const* enabled_api_layer_names,
+ std::vector<std::unique_ptr<ApiLayerInterface>>& api_layer_interfaces) {
+ XrResult last_error = XR_SUCCESS;
+ std::unordered_set<std::string> layers_already_found;
+
+ bool any_loaded = false;
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> enabled_layer_manifest_files_in_init_order = {};
+
+ // Find any implicit layers.
+ XrResult result =
+ ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_IMPLICIT_API_LAYER, enabled_layer_manifest_files_in_init_order);
+
+ for (const auto& enabled_layer_manifest_file : enabled_layer_manifest_files_in_init_order) {
+ layers_already_found.insert(enabled_layer_manifest_file->LayerName());
+ }
+
+ // Find any explicit layers.
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> explicit_layer_manifest_files = {};
+
+ if (XR_SUCCEEDED(result)) {
+ result = ApiLayerManifestFile::FindManifestFiles(MANIFEST_TYPE_EXPLICIT_API_LAYER, explicit_layer_manifest_files);
+ }
+
+ bool found_all_layers = true;
+
+ if (XR_SUCCEEDED(result)) {
+ // Put all explicit and then xrCreateInstance enabled layers into a string vector
+
+ std::vector<std::string> enabled_explicit_api_layer_names = {};
+
+ AddEnvironmentApiLayers(enabled_explicit_api_layer_names);
+
+ if (enabled_api_layer_count > 0) {
+ if (nullptr == enabled_api_layer_names) {
+ LoaderLogger::LogErrorMessage(
+ "xrCreateInstance",
+ "VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter: enabledApiLayerCount is non-0 but array is NULL");
+ LoaderLogger::LogErrorMessage(
+ "xrCreateInstance", "VUID-xrCreateInstance-info-parameter: something wrong with XrInstanceCreateInfo contents");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ std::copy(enabled_api_layer_names, enabled_api_layer_names + enabled_api_layer_count,
+ std::back_inserter(enabled_explicit_api_layer_names));
+ }
+
+ // add explicit layers to list of layers to enable
+ for (const auto& layer_name : enabled_explicit_api_layer_names) {
+ bool found_this_layer = false;
+
+ for (auto it = explicit_layer_manifest_files.begin(); it != explicit_layer_manifest_files.end();) {
+ bool erased_layer_manifest_file = false;
+
+ if (layers_already_found.count(layer_name) > 0) {
+ found_this_layer = true;
+ } else if (layer_name == (*it)->LayerName()) {
+ found_this_layer = true;
+ layers_already_found.insert(layer_name);
+ enabled_layer_manifest_files_in_init_order.push_back(std::move(*it));
+ it = explicit_layer_manifest_files.erase(it);
+ erased_layer_manifest_file = true;
+ }
+
+ if (!erased_layer_manifest_file) {
+ it++;
+ }
+ }
+
+ // If even one of the layers wasn't found, we want to return an error
+ if (!found_this_layer) {
+ found_all_layers = false;
+ std::string error_message = "ApiLayerInterface::LoadApiLayers - failed to find layer ";
+ error_message += layer_name;
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ }
+ }
+ }
+
+ for (std::unique_ptr<ApiLayerManifestFile>& manifest_file : enabled_layer_manifest_files_in_init_order) {
+ LoaderPlatformLibraryHandle layer_library = LoaderPlatformLibraryOpen(manifest_file->LibraryPath());
+ if (nullptr == layer_library) {
+ if (!any_loaded) {
+ last_error = XR_ERROR_FILE_ACCESS_ERROR;
+ }
+ std::string library_message = LoaderPlatformLibraryOpenError(manifest_file->LibraryPath());
+ std::string warning_message = "ApiLayerInterface::LoadApiLayers skipping layer ";
+ warning_message += manifest_file->LayerName();
+ warning_message += ", failed to load with message \"";
+ warning_message += library_message;
+ warning_message += "\"";
+ LoaderLogger::LogWarningMessage(openxr_command, warning_message);
+ continue;
+ }
+
+ // Get and settle on an layer interface version (using any provided name if required).
+ std::string function_name = manifest_file->GetFunctionName("xrNegotiateLoaderApiLayerInterface");
+ auto negotiate = reinterpret_cast<PFN_xrNegotiateLoaderApiLayerInterface>(
+ LoaderPlatformLibraryGetProcAddr(layer_library, function_name));
+
+ if (nullptr == negotiate) {
+ std::ostringstream oss;
+ oss << "ApiLayerInterface::LoadApiLayers skipping layer " << manifest_file->LayerName()
+ << " because negotiation function " << function_name << " was not found";
+ LoaderLogger::LogErrorMessage(openxr_command, oss.str());
+ LoaderPlatformLibraryClose(layer_library);
+ last_error = XR_ERROR_API_LAYER_NOT_PRESENT;
+ continue;
+ }
+
+ // Loader info for negotiation
+ XrNegotiateLoaderInfo loader_info = {};
+ loader_info.structType = XR_LOADER_INTERFACE_STRUCT_LOADER_INFO;
+ loader_info.structVersion = XR_LOADER_INFO_STRUCT_VERSION;
+ loader_info.structSize = sizeof(XrNegotiateLoaderInfo);
+ loader_info.minInterfaceVersion = 1;
+ loader_info.maxInterfaceVersion = XR_CURRENT_LOADER_API_LAYER_VERSION;
+ loader_info.minApiVersion = XR_MAKE_VERSION(1, 0, 0);
+ loader_info.maxApiVersion = XR_MAKE_VERSION(1, 0x3ff, 0xfff); // Maximum allowed version for this major version.
+
+ // Set up the layer return structure
+ XrNegotiateApiLayerRequest api_layer_info = {};
+ api_layer_info.structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_REQUEST;
+ api_layer_info.structVersion = XR_API_LAYER_INFO_STRUCT_VERSION;
+ api_layer_info.structSize = sizeof(XrNegotiateApiLayerRequest);
+
+ XrResult res = negotiate(&loader_info, manifest_file->LayerName().c_str(), &api_layer_info);
+ // If we supposedly succeeded, but got a nullptr for getInstanceProcAddr
+ // then something still went wrong, so return with an error.
+ if (XR_SUCCEEDED(res) && nullptr == api_layer_info.getInstanceProcAddr) {
+ std::string warning_message = "ApiLayerInterface::LoadApiLayers skipping layer ";
+ warning_message += manifest_file->LayerName();
+ warning_message += ", negotiation did not return a valid getInstanceProcAddr";
+ LoaderLogger::LogWarningMessage(openxr_command, warning_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ }
+ if (XR_FAILED(res)) {
+ if (!any_loaded) {
+ last_error = res;
+ }
+ std::ostringstream oss;
+ oss << "ApiLayerInterface::LoadApiLayers skipping layer " << manifest_file->LayerName()
+ << " due to failed negotiation with error " << res;
+ LoaderLogger::LogWarningMessage(openxr_command, oss.str());
+ LoaderPlatformLibraryClose(layer_library);
+ continue;
+ }
+
+ {
+ std::ostringstream oss;
+ oss << "ApiLayerInterface::LoadApiLayers succeeded loading layer " << manifest_file->LayerName()
+ << " using interface version " << api_layer_info.layerInterfaceVersion << " and OpenXR API version "
+ << XR_VERSION_MAJOR(api_layer_info.layerApiVersion) << "." << XR_VERSION_MINOR(api_layer_info.layerApiVersion);
+ LoaderLogger::LogInfoMessage(openxr_command, oss.str());
+ }
+
+ // Grab the list of extensions this layer supports for easy filtering after the
+ // xrCreateInstance call
+ std::vector<std::string> supported_extensions;
+ std::vector<XrExtensionProperties> extension_properties;
+ manifest_file->GetInstanceExtensionProperties(extension_properties);
+ supported_extensions.reserve(extension_properties.size());
+ for (XrExtensionProperties& ext_prop : extension_properties) {
+ supported_extensions.emplace_back(ext_prop.extensionName);
+ }
+
+ // Add this API layer to the vector
+ api_layer_interfaces.emplace_back(new ApiLayerInterface(manifest_file->LayerName(), layer_library, supported_extensions,
+ api_layer_info.getInstanceProcAddr,
+ api_layer_info.createApiLayerInstance));
+
+ // If we load one, clear all errors.
+ any_loaded = true;
+ last_error = XR_SUCCESS;
+ }
+
+ // Set error here to preserve prior error behavior
+ if (!found_all_layers) {
+ last_error = XR_ERROR_API_LAYER_NOT_PRESENT;
+ }
+
+ // If we failed catastrophically for some reason, clean up everything.
+ if (XR_FAILED(last_error)) {
+ api_layer_interfaces.clear();
+ }
+
+ return last_error;
+}
+
+ApiLayerInterface::ApiLayerInterface(const std::string& layer_name, LoaderPlatformLibraryHandle layer_library,
+ std::vector<std::string>& supported_extensions,
+ PFN_xrGetInstanceProcAddr get_instance_proc_addr,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance)
+ : _layer_name(layer_name),
+ _layer_library(layer_library),
+ _get_instance_proc_addr(get_instance_proc_addr),
+ _create_api_layer_instance(create_api_layer_instance),
+ _supported_extensions(supported_extensions) {}
+
+ApiLayerInterface::~ApiLayerInterface() {
+ std::string info_message = "ApiLayerInterface being destroyed for layer ";
+ info_message += _layer_name;
+ LoaderLogger::LogInfoMessage("", info_message);
+ LoaderPlatformLibraryClose(_layer_library);
+}
+
+bool ApiLayerInterface::SupportsExtension(const std::string& extension_name) const {
+ bool found_prop = false;
+ for (const std::string& supported_extension : _supported_extensions) {
+ if (supported_extension == extension_name) {
+ found_prop = true;
+ break;
+ }
+ }
+ return found_prop;
+}
diff --git a/thirdparty/openxr/src/loader/api_layer_interface.hpp b/thirdparty/openxr/src/loader/api_layer_interface.hpp
new file mode 100644
index 0000000000..b93e44584e
--- /dev/null
+++ b/thirdparty/openxr/src/loader/api_layer_interface.hpp
@@ -0,0 +1,54 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <string>
+#include <vector>
+#include <memory>
+
+#include <openxr/openxr.h>
+
+#include "loader_platform.hpp"
+#include "loader_interfaces.h"
+
+struct XrGeneratedDispatchTable;
+
+class ApiLayerInterface {
+ public:
+ // Factory method
+ static XrResult LoadApiLayers(const std::string& openxr_command, uint32_t enabled_api_layer_count,
+ const char* const* enabled_api_layer_names,
+ std::vector<std::unique_ptr<ApiLayerInterface>>& api_layer_interfaces);
+ // Static queries
+ static XrResult GetApiLayerProperties(const std::string& openxr_command, uint32_t incoming_count, uint32_t* outgoing_count,
+ XrApiLayerProperties* api_layer_properties);
+ static XrResult GetInstanceExtensionProperties(const std::string& openxr_command, const char* layer_name,
+ std::vector<XrExtensionProperties>& extension_properties);
+
+ ApiLayerInterface(const std::string& layer_name, LoaderPlatformLibraryHandle layer_library,
+ std::vector<std::string>& supported_extensions, PFN_xrGetInstanceProcAddr get_instance_proc_addr,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance);
+ virtual ~ApiLayerInterface();
+
+ PFN_xrGetInstanceProcAddr GetInstanceProcAddrFuncPointer() { return _get_instance_proc_addr; }
+ PFN_xrCreateApiLayerInstance GetCreateApiLayerInstanceFuncPointer() { return _create_api_layer_instance; }
+
+ std::string LayerName() { return _layer_name; }
+
+ // Generated methods
+ bool SupportsExtension(const std::string& extension_name) const;
+
+ private:
+ std::string _layer_name;
+ LoaderPlatformLibraryHandle _layer_library;
+ PFN_xrGetInstanceProcAddr _get_instance_proc_addr;
+ PFN_xrCreateApiLayerInstance _create_api_layer_instance;
+ std::vector<std::string> _supported_extensions;
+};
diff --git a/thirdparty/openxr/src/loader/exception_handling.hpp b/thirdparty/openxr/src/loader/exception_handling.hpp
new file mode 100644
index 0000000000..428dd00279
--- /dev/null
+++ b/thirdparty/openxr/src/loader/exception_handling.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2019-2022, The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+// Provides protection for C ABI functions if standard library functions may throw.
+
+#pragma once
+
+#ifdef OPENXR_HAVE_COMMON_CONFIG
+#include "common_config.h"
+#endif // OPENXR_HAVE_COMMON_CONFIG
+
+#ifdef XRLOADER_DISABLE_EXCEPTION_HANDLING
+
+#define XRLOADER_ABI_TRY
+#define XRLOADER_ABI_CATCH_BAD_ALLOC_OOM
+#define XRLOADER_ABI_CATCH_FALLBACK
+
+#else
+
+#include <stdexcept>
+#define XRLOADER_ABI_TRY try
+#define XRLOADER_ABI_CATCH_BAD_ALLOC_OOM \
+ catch (const std::bad_alloc&) { \
+ LoaderLogger::LogErrorMessage("", "failed allocating memory"); \
+ return XR_ERROR_OUT_OF_MEMORY; \
+ }
+#define XRLOADER_ABI_CATCH_FALLBACK \
+ catch (const std::exception& e) { \
+ LoaderLogger::LogErrorMessage("", "Unknown failure: " + std::string(e.what())); \
+ return XR_ERROR_RUNTIME_FAILURE; \
+ } \
+ catch (...) { \
+ LoaderLogger::LogErrorMessage("", "Unknown failure"); \
+ return XR_ERROR_RUNTIME_FAILURE; \
+ }
+
+#endif
diff --git a/thirdparty/openxr/src/loader/loader_core.cpp b/thirdparty/openxr/src/loader/loader_core.cpp
new file mode 100644
index 0000000000..375f1c93ba
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_core.cpp
@@ -0,0 +1,847 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif // defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+
+#include "api_layer_interface.hpp"
+#include "exception_handling.hpp"
+#include "hex_and_handles.h"
+#include "loader_instance.hpp"
+#include "loader_logger_recorders.hpp"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "runtime_interface.hpp"
+#include "xr_generated_dispatch_table.h"
+#include "xr_generated_loader.hpp"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <mutex>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+// Global loader lock to:
+// 1. Ensure ActiveLoaderInstance get and set operations are done atomically.
+// 2. Ensure RuntimeInterface isn't used to unload the runtime while the runtime is in use.
+std::mutex &GetGlobalLoaderMutex() {
+ static std::mutex loader_mutex;
+ return loader_mutex;
+}
+
+// Prototypes for the debug utils calls used internally.
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineCreateDebugUtilsMessengerEXT(
+ XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT *createInfo, XrDebugUtilsMessengerEXT *messenger);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger);
+
+// Terminal functions needed by xrCreateInstance.
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermGetInstanceProcAddr(XrInstance, const char *, PFN_xrVoidFunction *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateInstance(const XrInstanceCreateInfo *, XrInstance *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateApiLayerInstance(const XrInstanceCreateInfo *,
+ const struct XrApiLayerCreateInfo *, XrInstance *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSetDebugUtilsObjectNameEXT(XrInstance, const XrDebugUtilsObjectNameInfoEXT *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateDebugUtilsMessengerEXT(XrInstance,
+ const XrDebugUtilsMessengerCreateInfoEXT *,
+ XrDebugUtilsMessengerEXT *);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT);
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSubmitDebugUtilsMessageEXT(
+ XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT *callbackData);
+
+// Utility template function meant to validate if a fixed size string contains
+// a null-terminator.
+template <size_t max_length>
+inline bool IsMissingNullTerminator(const char (&str)[max_length]) {
+ for (size_t index = 0; index < max_length; ++index) {
+ if (str[index] == '\0') {
+ return false;
+ }
+ }
+ return true;
+}
+
+// ---- Core 1.0 manual loader trampoline functions
+#ifdef XR_KHR_LOADER_INIT_SUPPORT // platforms that support XR_KHR_loader_init.
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrInitializeLoaderKHR(const XrLoaderInitInfoBaseHeaderKHR *loaderInitInfo) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrInitializeLoaderKHR", "Entering loader trampoline");
+ return InitializeLoader(loaderInitInfo);
+}
+XRLOADER_ABI_CATCH_FALLBACK
+#endif
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrEnumerateApiLayerProperties(uint32_t propertyCapacityInput,
+ uint32_t *propertyCountOutput,
+ XrApiLayerProperties *properties) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrEnumerateApiLayerProperties", "Entering loader trampoline");
+
+ // Make sure only one thread is attempting to read the JSON files at a time.
+ std::unique_lock<std::mutex> loader_lock(GetGlobalLoaderMutex());
+
+ XrResult result = ApiLayerInterface::GetApiLayerProperties("xrEnumerateApiLayerProperties", propertyCapacityInput,
+ propertyCountOutput, properties);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrEnumerateApiLayerProperties", "Failed ApiLayerInterface::GetApiLayerProperties");
+ }
+
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderXrEnumerateInstanceExtensionProperties(const char *layerName, uint32_t propertyCapacityInput, uint32_t *propertyCountOutput,
+ XrExtensionProperties *properties) XRLOADER_ABI_TRY {
+ bool just_layer_properties = false;
+ LoaderLogger::LogVerboseMessage("xrEnumerateInstanceExtensionProperties", "Entering loader trampoline");
+
+ // "Independent of elementCapacityInput or elements parameters, elementCountOutput must be a valid pointer,
+ // and the function sets elementCountOutput." - 2.11
+ if (nullptr == propertyCountOutput) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ if (nullptr != layerName && 0 != strlen(layerName)) {
+ // Application is only interested in layer's properties, not all of them.
+ just_layer_properties = true;
+ }
+
+ std::vector<XrExtensionProperties> extension_properties = {};
+ XrResult result;
+
+ {
+ // Make sure the runtime isn't unloaded while this call is in progress.
+ std::unique_lock<std::mutex> loader_lock(GetGlobalLoaderMutex());
+
+ // Get the layer extension properties
+ result = ApiLayerInterface::GetInstanceExtensionProperties("xrEnumerateInstanceExtensionProperties", layerName,
+ extension_properties);
+ if (XR_SUCCEEDED(result) && !just_layer_properties) {
+ // If not specific to a layer, get the runtime extension properties
+ result = RuntimeInterface::LoadRuntime("xrEnumerateInstanceExtensionProperties");
+ if (XR_SUCCEEDED(result)) {
+ RuntimeInterface::GetRuntime().GetInstanceExtensionProperties(extension_properties);
+ } else {
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties",
+ "Failed to find default runtime with RuntimeInterface::LoadRuntime()");
+ }
+ }
+ }
+
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrEnumerateInstanceExtensionProperties", "Failed querying extension properties");
+ return result;
+ }
+
+ // If this is not in reference to a specific layer, then add the loader-specific extension properties as well.
+ // These are extensions that the loader directly supports.
+ if (!just_layer_properties) {
+ for (const XrExtensionProperties &loader_prop : LoaderInstance::LoaderSpecificExtensions()) {
+ bool found_prop = false;
+ for (XrExtensionProperties &existing_prop : extension_properties) {
+ if (0 == strcmp(existing_prop.extensionName, loader_prop.extensionName)) {
+ found_prop = true;
+ // Use the loader version if it is newer
+ if (existing_prop.extensionVersion < loader_prop.extensionVersion) {
+ existing_prop.extensionVersion = loader_prop.extensionVersion;
+ }
+ break;
+ }
+ }
+ // Only add extensions not supported by the loader
+ if (!found_prop) {
+ extension_properties.push_back(loader_prop);
+ }
+ }
+ }
+
+ auto num_extension_properties = static_cast<uint32_t>(extension_properties.size());
+ if (propertyCapacityInput == 0) {
+ *propertyCountOutput = num_extension_properties;
+ } else if (nullptr != properties) {
+ if (propertyCapacityInput < num_extension_properties) {
+ *propertyCountOutput = num_extension_properties;
+ LoaderLogger::LogValidationErrorMessage("VUID-xrEnumerateInstanceExtensionProperties-propertyCountOutput-parameter",
+ "xrEnumerateInstanceExtensionProperties", "insufficient space in array");
+ return XR_ERROR_SIZE_INSUFFICIENT;
+ }
+
+ uint32_t num_to_copy = num_extension_properties;
+ // Determine how many extension properties we can copy over
+ if (propertyCapacityInput < num_to_copy) {
+ num_to_copy = propertyCapacityInput;
+ }
+ bool properties_valid = true;
+ for (uint32_t prop = 0; prop < propertyCapacityInput && prop < extension_properties.size(); ++prop) {
+ if (XR_TYPE_EXTENSION_PROPERTIES != properties[prop].type) {
+ properties_valid = false;
+ LoaderLogger::LogValidationErrorMessage("VUID-XrExtensionProperties-type-type",
+ "xrEnumerateInstanceExtensionProperties", "unknown type in properties");
+ }
+ if (properties_valid) {
+ properties[prop] = extension_properties[prop];
+ }
+ }
+ if (!properties_valid) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrEnumerateInstanceExtensionProperties-properties-parameter",
+ "xrEnumerateInstanceExtensionProperties", "invalid properties");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ if (nullptr != propertyCountOutput) {
+ *propertyCountOutput = num_to_copy;
+ }
+ } else {
+ // incoming_count is not 0 BUT the properties is NULL
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ LoaderLogger::LogVerboseMessage("xrEnumerateInstanceExtensionProperties", "Completed loader trampoline");
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrCreateInstance(const XrInstanceCreateInfo *info,
+ XrInstance *instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Entering loader trampoline");
+ if (nullptr == info) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateInstance-info-parameter", "xrCreateInstance", "must be non-NULL");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ // If application requested OpenXR API version is higher than the loader version, then we need to throw
+ // an error.
+ uint16_t app_major = XR_VERSION_MAJOR(info->applicationInfo.apiVersion); // NOLINT
+ uint16_t app_minor = XR_VERSION_MINOR(info->applicationInfo.apiVersion); // NOLINT
+ uint16_t loader_major = XR_VERSION_MAJOR(XR_CURRENT_API_VERSION); // NOLINT
+ uint16_t loader_minor = XR_VERSION_MINOR(XR_CURRENT_API_VERSION); // NOLINT
+ if (app_major > loader_major || (app_major == loader_major && app_minor > loader_minor)) {
+ std::ostringstream oss;
+ oss << "xrCreateInstance called with invalid API version " << app_major << "." << app_minor
+ << ". Max supported version is " << loader_major << "." << loader_minor;
+ LoaderLogger::LogErrorMessage("xrCreateInstance", oss.str());
+ return XR_ERROR_API_VERSION_UNSUPPORTED;
+ }
+
+ if (nullptr == instance) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateInstance-instance-parameter", "xrCreateInstance", "must be non-NULL");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ // Make sure the ActiveLoaderInstance::IsAvailable check is done atomically with RuntimeInterface::LoadRuntime.
+ std::unique_lock<std::mutex> instance_lock(GetGlobalLoaderMutex());
+
+ // Check if there is already an XrInstance that is alive. If so, another instance cannot be created.
+ // The loader does not support multiple simultaneous instances because the loader is intended to be
+ // usable by apps using future OpenXR APIs (through xrGetInstanceProcAddr). Because the loader would
+ // not be aware of new handle types, it would not be able to look up the appropriate dispatch table
+ // in some cases.
+ if (ActiveLoaderInstance::IsAvailable()) { // If there is an XrInstance already alive.
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "Loader does not support simultaneous XrInstances");
+ return XR_ERROR_LIMIT_REACHED;
+ }
+
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces;
+ XrResult result;
+
+ // Make sure only one thread is attempting to read the JSON files and use the instance.
+ {
+ // Load the available runtime
+ result = RuntimeInterface::LoadRuntime("xrCreateInstance");
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "Failed loading runtime information");
+ } else {
+ // Load the appropriate layers
+ result = ApiLayerInterface::LoadApiLayers("xrCreateInstance", info->enabledApiLayerCount, info->enabledApiLayerNames,
+ api_layer_interfaces);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "Failed loading layer information");
+ }
+ }
+ }
+
+ // Create the loader instance (only send down first runtime interface)
+ LoaderInstance *loader_instance = nullptr;
+ if (XR_SUCCEEDED(result)) {
+ std::unique_ptr<LoaderInstance> owned_loader_instance;
+ result = LoaderInstance::CreateInstance(LoaderXrTermGetInstanceProcAddr, LoaderXrTermCreateInstance,
+ LoaderXrTermCreateApiLayerInstance, std::move(api_layer_interfaces), info,
+ &owned_loader_instance);
+ if (XR_SUCCEEDED(result)) {
+ loader_instance = owned_loader_instance.get();
+ result = ActiveLoaderInstance::Set(std::move(owned_loader_instance), "xrCreateInstance");
+ }
+ }
+
+ if (XR_SUCCEEDED(result)) {
+ // Create a debug utils messenger if the create structure is in the "next" chain
+ const auto *next_header = reinterpret_cast<const XrBaseInStructure *>(info->next);
+ const XrDebugUtilsMessengerCreateInfoEXT *dbg_utils_create_info = nullptr;
+ while (next_header != nullptr) {
+ if (next_header->type == XR_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT) {
+ LoaderLogger::LogInfoMessage("xrCreateInstance", "Found XrDebugUtilsMessengerCreateInfoEXT in \'next\' chain.");
+ dbg_utils_create_info = reinterpret_cast<const XrDebugUtilsMessengerCreateInfoEXT *>(next_header);
+ XrDebugUtilsMessengerEXT messenger;
+ result = LoaderTrampolineCreateDebugUtilsMessengerEXT(loader_instance->GetInstanceHandle(), dbg_utils_create_info,
+ &messenger);
+ if (XR_FAILED(result)) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ loader_instance->SetDefaultDebugUtilsMessenger(messenger);
+ break;
+ }
+ next_header = reinterpret_cast<const XrBaseInStructure *>(next_header->next);
+ }
+ }
+
+ if (XR_FAILED(result)) {
+ // Ensure the global loader instance and runtime are destroyed if something went wrong.
+ ActiveLoaderInstance::Remove();
+ RuntimeInterface::UnloadRuntime("xrCreateInstance");
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "xrCreateInstance failed");
+ } else {
+ *instance = loader_instance->GetInstanceHandle();
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Completed loader trampoline");
+ }
+
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrDestroyInstance(XrInstance instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Entering loader trampoline");
+ // Runtimes may detect XR_NULL_HANDLE provided as a required handle parameter and return XR_ERROR_HANDLE_INVALID. - 2.9
+ if (XR_NULL_HANDLE == instance) {
+ LoaderLogger::LogErrorMessage("xrDestroyInstance", "Instance handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ // Make sure the runtime isn't unloaded while it is being used by xrEnumerateInstanceExtensionProperties.
+ std::unique_lock<std::mutex> loader_lock(GetGlobalLoaderMutex());
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyInstance");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+
+ // If we allocated a default debug utils messenger, free it
+ XrDebugUtilsMessengerEXT messenger = loader_instance->DefaultDebugUtilsMessenger();
+ if (messenger != XR_NULL_HANDLE) {
+ LoaderTrampolineDestroyDebugUtilsMessengerEXT(messenger);
+ }
+
+ // Now destroy the instance
+ if (XR_FAILED(dispatch_table->DestroyInstance(instance))) {
+ LoaderLogger::LogErrorMessage("xrDestroyInstance", "Unknown error occurred calling down chain");
+ }
+
+ // Get rid of the loader instance. This will make it possible to create another instance in the future.
+ ActiveLoaderInstance::Remove();
+
+ // Lock the instance create/destroy mutex
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Completed loader trampoline");
+
+ // Finally, unload the runtime if necessary
+ RuntimeInterface::UnloadRuntime("xrDestroyInstance");
+
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// ---- Core 1.0 manual loader terminator functions
+
+// Validate that the applicationInfo structure in the XrInstanceCreateInfo is valid.
+static XrResult ValidateApplicationInfo(const XrApplicationInfo &info) {
+ if (IsMissingNullTerminator<XR_MAX_APPLICATION_NAME_SIZE>(info.applicationName)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrApplicationInfo-applicationName-parameter", "xrCreateInstance",
+ "application name missing NULL terminator.");
+ return XR_ERROR_NAME_INVALID;
+ }
+ if (IsMissingNullTerminator<XR_MAX_ENGINE_NAME_SIZE>(info.engineName)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrApplicationInfo-engineName-parameter", "xrCreateInstance",
+ "engine name missing NULL terminator.");
+ return XR_ERROR_NAME_INVALID;
+ }
+ if (strlen(info.applicationName) == 0) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance",
+ "VUID-XrApplicationInfo-engineName-parameter: application name can not be empty.");
+ return XR_ERROR_NAME_INVALID;
+ }
+ return XR_SUCCESS;
+}
+
+// Validate that the XrInstanceCreateInfo is valid
+static XrResult ValidateInstanceCreateInfo(const XrInstanceCreateInfo *info) {
+ // Should have a valid 'type'
+ if (XR_TYPE_INSTANCE_CREATE_INFO != info->type) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-type-type", "xrCreateInstance",
+ "expected XR_TYPE_INSTANCE_CREATE_INFO.");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ // Flags must be 0
+ if (0 != info->createFlags) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-createFlags-zerobitmask", "xrCreateInstance",
+ "flags must be 0.");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ // ApplicationInfo struct must be valid
+ XrResult result = ValidateApplicationInfo(info->applicationInfo);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-applicationInfo-parameter", "xrCreateInstance",
+ "info->applicationInfo is not valid.");
+ return result;
+ }
+ // VUID-XrInstanceCreateInfo-enabledApiLayerNames-parameter already tested in LoadApiLayers()
+ if ((info->enabledExtensionCount != 0u) && nullptr == info->enabledExtensionNames) {
+ LoaderLogger::LogValidationErrorMessage("VUID-XrInstanceCreateInfo-enabledExtensionNames-parameter", "xrCreateInstance",
+ "enabledExtensionCount is non-0 but array is NULL");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ return XR_SUCCESS;
+}
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateInstance(const XrInstanceCreateInfo *createInfo,
+ XrInstance *instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Entering loader terminator");
+ XrResult result = ValidateInstanceCreateInfo(createInfo);
+ if (XR_FAILED(result)) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateInstance-info-parameter", "xrCreateInstance",
+ "something wrong with XrInstanceCreateInfo contents");
+ return result;
+ }
+ result = RuntimeInterface::GetRuntime().CreateInstance(createInfo, instance);
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateApiLayerInstance(const XrInstanceCreateInfo *info,
+ const struct XrApiLayerCreateInfo * /*apiLayerInfo*/,
+ XrInstance *instance) {
+ return LoaderXrTermCreateInstance(info, instance);
+}
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyInstance(XrInstance instance) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Entering loader terminator");
+ LoaderLogger::GetInstance().RemoveLogRecordersForXrInstance(instance);
+ XrResult result = RuntimeInterface::GetRuntime().DestroyInstance(instance);
+ LoaderLogger::LogVerboseMessage("xrDestroyInstance", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermGetInstanceProcAddr(XrInstance instance, const char *name,
+ PFN_xrVoidFunction *function) XRLOADER_ABI_TRY {
+ // A few instance commands need to go through a loader terminator.
+ // Otherwise, go directly to the runtime version of the command if it exists.
+ // But first set the function pointer to NULL so that the fall-through below actually works.
+ *function = nullptr;
+
+ // NOTE: ActiveLoaderInstance cannot be used in this function because it is called before an instance is made active.
+
+ if (0 == strcmp(name, "xrGetInstanceProcAddr")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermGetInstanceProcAddr);
+ } else if (0 == strcmp(name, "xrCreateInstance")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermCreateInstance);
+ } else if (0 == strcmp(name, "xrDestroyInstance")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermDestroyInstance);
+ } else if (0 == strcmp(name, "xrSetDebugUtilsObjectNameEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermSetDebugUtilsObjectNameEXT);
+ } else if (0 == strcmp(name, "xrCreateDebugUtilsMessengerEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermCreateDebugUtilsMessengerEXT);
+ } else if (0 == strcmp(name, "xrDestroyDebugUtilsMessengerEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermDestroyDebugUtilsMessengerEXT);
+ } else if (0 == strcmp(name, "xrSubmitDebugUtilsMessageEXT")) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermSubmitDebugUtilsMessageEXT);
+ } else if (0 == strcmp(name, "xrCreateApiLayerInstance")) {
+ // Special layer version of xrCreateInstance terminator. If we get called this by a layer,
+ // we simply re-direct the information back into the standard xrCreateInstance terminator.
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrTermCreateApiLayerInstance);
+ }
+
+ if (nullptr != *function) {
+ return XR_SUCCESS;
+ }
+
+ return RuntimeInterface::GetInstanceProcAddr(instance, name, function);
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// ---- Extension manual loader trampoline functions
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineCreateDebugUtilsMessengerEXT(XrInstance instance, const XrDebugUtilsMessengerCreateInfoEXT *createInfo,
+ XrDebugUtilsMessengerEXT *messenger) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Entering loader trampoline");
+
+ if (instance == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrCreateDebugUtilsMessengerEXT", "Instance handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateDebugUtilsMessengerEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ result = loader_instance->DispatchTable()->CreateDebugUtilsMessengerEXT(instance, createInfo, messenger);
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Completed loader trampoline");
+ return result;
+}
+XRLOADER_ABI_CATCH_BAD_ALLOC_OOM XRLOADER_ABI_CATCH_FALLBACK
+
+ static XRAPI_ATTR XrResult XRAPI_CALL
+ LoaderTrampolineDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger) XRLOADER_ABI_TRY {
+ // TODO: get instance from messenger in loader
+ // Also, is the loader really doing all this every call?
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Entering loader trampoline");
+
+ if (messenger == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrDestroyDebugUtilsMessengerEXT", "Messenger handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyDebugUtilsMessengerEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ result = loader_instance->DispatchTable()->DestroyDebugUtilsMessengerEXT(messenger);
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Completed loader trampoline");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineSessionBeginDebugUtilsLabelRegionEXT(XrSession session, const XrDebugUtilsLabelEXT *labelInfo) XRLOADER_ABI_TRY {
+ if (session == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrSessionBeginDebugUtilsLabelRegionEXT", "Session handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ if (nullptr == labelInfo) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrSessionBeginDebugUtilsLabelRegionEXT-labelInfo-parameter",
+ "xrSessionBeginDebugUtilsLabelRegionEXT", "labelInfo must be non-NULL",
+ {XrSdkLogObjectInfo{session, XR_OBJECT_TYPE_SESSION}});
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSessionBeginDebugUtilsLabelRegionEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+ LoaderLogger::GetInstance().BeginLabelRegion(session, labelInfo);
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+ if (nullptr != dispatch_table->SessionBeginDebugUtilsLabelRegionEXT) {
+ return dispatch_table->SessionBeginDebugUtilsLabelRegionEXT(session, labelInfo);
+ }
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineSessionEndDebugUtilsLabelRegionEXT(XrSession session) XRLOADER_ABI_TRY {
+ if (session == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrSessionEndDebugUtilsLabelRegionEXT", "Session handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSessionEndDebugUtilsLabelRegionEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ LoaderLogger::GetInstance().EndLabelRegion(session);
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+ if (nullptr != dispatch_table->SessionEndDebugUtilsLabelRegionEXT) {
+ return dispatch_table->SessionEndDebugUtilsLabelRegionEXT(session);
+ }
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineSessionInsertDebugUtilsLabelEXT(XrSession session, const XrDebugUtilsLabelEXT *labelInfo) XRLOADER_ABI_TRY {
+ if (session == XR_NULL_HANDLE) {
+ LoaderLogger::LogErrorMessage("xrSessionInsertDebugUtilsLabelEXT", "Session handle is XR_NULL_HANDLE.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSessionInsertDebugUtilsLabelEXT");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+
+ if (nullptr == labelInfo) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrSessionInsertDebugUtilsLabelEXT-labelInfo-parameter",
+ "xrSessionInsertDebugUtilsLabelEXT", "labelInfo must be non-NULL",
+ {XrSdkLogObjectInfo{session, XR_OBJECT_TYPE_SESSION}});
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ LoaderLogger::GetInstance().InsertLabel(session, labelInfo);
+
+ const std::unique_ptr<XrGeneratedDispatchTable> &dispatch_table = loader_instance->DispatchTable();
+ if (nullptr != dispatch_table->SessionInsertDebugUtilsLabelEXT) {
+ return dispatch_table->SessionInsertDebugUtilsLabelEXT(session, labelInfo);
+ }
+
+ return XR_SUCCESS;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// No-op trampoline needed for xrGetInstanceProcAddr. Work done in terminator.
+static XRAPI_ATTR XrResult XRAPI_CALL
+LoaderTrampolineSetDebugUtilsObjectNameEXT(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT *nameInfo) XRLOADER_ABI_TRY {
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSetDebugUtilsObjectNameEXT");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->SetDebugUtilsObjectNameEXT(instance, nameInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// No-op trampoline needed for xrGetInstanceProcAddr. Work done in terminator.
+static XRAPI_ATTR XrResult XRAPI_CALL LoaderTrampolineSubmitDebugUtilsMessageEXT(
+ XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT *callbackData) XRLOADER_ABI_TRY {
+ LoaderInstance *loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSubmitDebugUtilsMessageEXT");
+ if (XR_SUCCEEDED(result)) {
+ result =
+ loader_instance->DispatchTable()->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// ---- Extension manual loader terminator functions
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermCreateDebugUtilsMessengerEXT(XrInstance instance,
+ const XrDebugUtilsMessengerCreateInfoEXT *createInfo,
+ XrDebugUtilsMessengerEXT *messenger) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Entering loader terminator");
+ if (nullptr == messenger) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrCreateDebugUtilsMessengerEXT-messenger-parameter",
+ "xrCreateDebugUtilsMessengerEXT", "invalid messenger pointer");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
+ XrResult result = XR_SUCCESS;
+ // This extension is supported entirely by the loader which means the runtime may or may not support it.
+ if (nullptr != dispatch_table->CreateDebugUtilsMessengerEXT) {
+ result = dispatch_table->CreateDebugUtilsMessengerEXT(instance, createInfo, messenger);
+ } else {
+ // Just allocate a character so we have a unique value
+ char *temp_mess_ptr = new char;
+ *messenger = reinterpret_cast<XrDebugUtilsMessengerEXT>(temp_mess_ptr);
+ }
+ if (XR_SUCCEEDED(result)) {
+ LoaderLogger::GetInstance().AddLogRecorderForXrInstance(instance, MakeDebugUtilsLoaderLogRecorder(createInfo, *messenger));
+ RuntimeInterface::GetRuntime().TrackDebugMessenger(instance, *messenger);
+ }
+ LoaderLogger::LogVerboseMessage("xrCreateDebugUtilsMessengerEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermDestroyDebugUtilsMessengerEXT(XrDebugUtilsMessengerEXT messenger) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Entering loader terminator");
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDebugUtilsMessengerDispatchTable(messenger);
+ XrResult result = XR_SUCCESS;
+ LoaderLogger::GetInstance().RemoveLogRecorder(MakeHandleGeneric(messenger));
+ RuntimeInterface::GetRuntime().ForgetDebugMessenger(messenger);
+ // This extension is supported entirely by the loader which means the runtime may or may not support it.
+ if (nullptr != dispatch_table->DestroyDebugUtilsMessengerEXT) {
+ result = dispatch_table->DestroyDebugUtilsMessengerEXT(messenger);
+ } else {
+ // Delete the character we would've created
+ delete (reinterpret_cast<char *>(MakeHandleGeneric(messenger)));
+ }
+ LoaderLogger::LogVerboseMessage("xrDestroyDebugUtilsMessengerEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrTermSubmitDebugUtilsMessageEXT(
+ XrInstance instance, XrDebugUtilsMessageSeverityFlagsEXT messageSeverity, XrDebugUtilsMessageTypeFlagsEXT messageTypes,
+ const XrDebugUtilsMessengerCallbackDataEXT *callbackData) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrSubmitDebugUtilsMessageEXT", "Entering loader terminator");
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
+ XrResult result = XR_SUCCESS;
+ if (nullptr != dispatch_table->SubmitDebugUtilsMessageEXT) {
+ result = dispatch_table->SubmitDebugUtilsMessageEXT(instance, messageSeverity, messageTypes, callbackData);
+ } else {
+ // Only log the message from the loader if the runtime doesn't support this extension. If we did,
+ // then the user would receive multiple instances of the same message.
+ LoaderLogger::GetInstance().LogDebugUtilsMessage(messageSeverity, messageTypes, callbackData);
+ }
+ LoaderLogger::LogVerboseMessage("xrSubmitDebugUtilsMessageEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL
+LoaderXrTermSetDebugUtilsObjectNameEXT(XrInstance instance, const XrDebugUtilsObjectNameInfoEXT *nameInfo) XRLOADER_ABI_TRY {
+ LoaderLogger::LogVerboseMessage("xrSetDebugUtilsObjectNameEXT", "Entering loader terminator");
+ const XrGeneratedDispatchTable *dispatch_table = RuntimeInterface::GetDispatchTable(instance);
+ XrResult result = XR_SUCCESS;
+ if (nullptr != dispatch_table->SetDebugUtilsObjectNameEXT) {
+ result = dispatch_table->SetDebugUtilsObjectNameEXT(instance, nameInfo);
+ }
+ LoaderLogger::GetInstance().AddObjectName(nameInfo->objectHandle, nameInfo->objectType, nameInfo->objectName);
+ LoaderLogger::LogVerboseMessage("xrSetDebugUtilsObjectNameEXT", "Completed loader terminator");
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+XRAPI_ATTR XrResult XRAPI_CALL LoaderXrGetInstanceProcAddr(XrInstance instance, const char *name,
+ PFN_xrVoidFunction *function) XRLOADER_ABI_TRY {
+ // Initialize the function to nullptr in case it does not get caught in a known case
+ *function = nullptr;
+
+ if (nullptr == function) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrGetInstanceProcAddr-function-parameter", "xrGetInstanceProcAddr",
+ "Invalid Function pointer");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ if (nullptr == name) {
+ LoaderLogger::LogValidationErrorMessage("VUID-xrGetInstanceProcAddr-function-parameter", "xrGetInstanceProcAddr",
+ "Invalid Name pointer");
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+
+ LoaderInstance *loader_instance = nullptr;
+ if (instance == XR_NULL_HANDLE) {
+ // Null instance is allowed for a few specific API entry points, otherwise return error
+ if (strcmp(name, "xrCreateInstance") != 0 && strcmp(name, "xrEnumerateApiLayerProperties") != 0 &&
+ strcmp(name, "xrEnumerateInstanceExtensionProperties") != 0 && strcmp(name, "xrInitializeLoaderKHR") != 0) {
+ // TODO why is xrGetInstanceProcAddr not listed in here?
+ std::string error_str = "XR_NULL_HANDLE for instance but query for ";
+ error_str += name;
+ error_str += " requires a valid instance";
+ LoaderLogger::LogValidationErrorMessage("VUID-xrGetInstanceProcAddr-instance-parameter", "xrGetInstanceProcAddr",
+ error_str);
+ return XR_ERROR_HANDLE_INVALID;
+ }
+ } else {
+ // non null instance passed in, it should be our current instance
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetInstanceProcAddr");
+ if (XR_FAILED(result)) {
+ return result;
+ }
+ if (loader_instance->GetInstanceHandle() != instance) {
+ return XR_ERROR_HANDLE_INVALID;
+ }
+ }
+
+ // These functions must always go through the loader's implementation (trampoline).
+ if (strcmp(name, "xrGetInstanceProcAddr") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrGetInstanceProcAddr);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrInitializeLoaderKHR") == 0) {
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrInitializeLoaderKHR);
+ return XR_SUCCESS;
+#else
+ return XR_ERROR_FUNCTION_UNSUPPORTED;
+#endif
+ } else if (strcmp(name, "xrEnumerateApiLayerProperties") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrEnumerateApiLayerProperties);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrEnumerateInstanceExtensionProperties") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrEnumerateInstanceExtensionProperties);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrCreateInstance") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrCreateInstance);
+ return XR_SUCCESS;
+ } else if (strcmp(name, "xrDestroyInstance") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderXrDestroyInstance);
+ return XR_SUCCESS;
+ }
+
+ // XR_EXT_debug_utils is built into the loader and handled partly through the xrGetInstanceProcAddress terminator,
+ // but the check to see if the extension is enabled must be done here where ActiveLoaderInstance is safe to use.
+ if (*function == nullptr) {
+ if (strcmp(name, "xrCreateDebugUtilsMessengerEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineCreateDebugUtilsMessengerEXT);
+ } else if (strcmp(name, "xrDestroyDebugUtilsMessengerEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineDestroyDebugUtilsMessengerEXT);
+ } else if (strcmp(name, "xrSessionBeginDebugUtilsLabelRegionEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSessionBeginDebugUtilsLabelRegionEXT);
+ } else if (strcmp(name, "xrSessionEndDebugUtilsLabelRegionEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSessionEndDebugUtilsLabelRegionEXT);
+ } else if (strcmp(name, "xrSessionInsertDebugUtilsLabelEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSessionInsertDebugUtilsLabelEXT);
+ } else if (strcmp(name, "xrSetDebugUtilsObjectNameEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSetDebugUtilsObjectNameEXT);
+ } else if (strcmp(name, "xrSubmitDebugUtilsMessageEXT") == 0) {
+ *function = reinterpret_cast<PFN_xrVoidFunction>(LoaderTrampolineSubmitDebugUtilsMessageEXT);
+ }
+
+ if (*function != nullptr && !loader_instance->ExtensionIsEnabled("XR_EXT_debug_utils")) {
+ // The function matches one of the XR_EXT_debug_utils functions but the extension is not enabled.
+ *function = nullptr;
+ return XR_ERROR_FUNCTION_UNSUPPORTED;
+ }
+ }
+
+ if (*function != nullptr) {
+ // The loader has a trampoline or implementation of this function.
+ return XR_SUCCESS;
+ }
+
+ // If the function is not supported by the loader, call down to the next layer.
+ return loader_instance->GetInstanceProcAddr(name, function);
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+// Exported loader functions
+//
+// The application might override these by exporting the same symbols and so we can't use these
+// symbols anywhere in the loader code, and instead the internal non exported functions that these
+// stubs call should be used internally.
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateApiLayerProperties(uint32_t propertyCapacityInput,
+ uint32_t *propertyCountOutput,
+ XrApiLayerProperties *properties) {
+ return LoaderXrEnumerateApiLayerProperties(propertyCapacityInput, propertyCountOutput, properties);
+}
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateInstanceExtensionProperties(const char *layerName,
+ uint32_t propertyCapacityInput,
+ uint32_t *propertyCountOutput,
+ XrExtensionProperties *properties) {
+ return LoaderXrEnumerateInstanceExtensionProperties(layerName, propertyCapacityInput, propertyCountOutput, properties);
+}
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateInstance(const XrInstanceCreateInfo *info, XrInstance *instance) {
+ return LoaderXrCreateInstance(info, instance);
+}
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyInstance(XrInstance instance) { return LoaderXrDestroyInstance(instance); }
+
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProcAddr(XrInstance instance, const char *name,
+ PFN_xrVoidFunction *function) {
+ return LoaderXrGetInstanceProcAddr(instance, name, function);
+}
+
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrInitializeLoaderKHR(const XrLoaderInitInfoBaseHeaderKHR *loaderInitInfo) {
+ return LoaderXrInitializeLoaderKHR(loaderInitInfo);
+}
+#endif
diff --git a/thirdparty/openxr/src/loader/loader_instance.cpp b/thirdparty/openxr/src/loader/loader_instance.cpp
new file mode 100644
index 0000000000..b24c8de53b
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_instance.cpp
@@ -0,0 +1,303 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif // defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+
+#include "loader_instance.hpp"
+
+#include "api_layer_interface.hpp"
+#include "hex_and_handles.h"
+#include "loader_interfaces.h"
+#include "loader_logger.hpp"
+#include "runtime_interface.hpp"
+#include "xr_generated_dispatch_table.h"
+#include "xr_generated_loader.hpp"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <sstream>
+#include <string>
+#include <utility>
+#include <vector>
+
+namespace {
+std::unique_ptr<LoaderInstance>& GetSetCurrentLoaderInstance() {
+ static std::unique_ptr<LoaderInstance> current_loader_instance;
+ return current_loader_instance;
+}
+} // namespace
+
+namespace ActiveLoaderInstance {
+XrResult Set(std::unique_ptr<LoaderInstance> loader_instance, const char* log_function_name) {
+ if (GetSetCurrentLoaderInstance() != nullptr) {
+ LoaderLogger::LogErrorMessage(log_function_name, "Active XrInstance handle already exists");
+ return XR_ERROR_LIMIT_REACHED;
+ }
+
+ GetSetCurrentLoaderInstance() = std::move(loader_instance);
+ return XR_SUCCESS;
+}
+
+XrResult Get(LoaderInstance** loader_instance, const char* log_function_name) {
+ *loader_instance = GetSetCurrentLoaderInstance().get();
+ if (*loader_instance == nullptr) {
+ LoaderLogger::LogErrorMessage(log_function_name, "No active XrInstance handle.");
+ return XR_ERROR_HANDLE_INVALID;
+ }
+
+ return XR_SUCCESS;
+}
+
+bool IsAvailable() { return GetSetCurrentLoaderInstance() != nullptr; }
+
+void Remove() { GetSetCurrentLoaderInstance().release(); }
+} // namespace ActiveLoaderInstance
+
+// Extensions that are supported by the loader, but may not be supported
+// the the runtime.
+const std::array<XrExtensionProperties, 1>& LoaderInstance::LoaderSpecificExtensions() {
+ static const std::array<XrExtensionProperties, 1> extensions = {XrExtensionProperties{
+ XR_TYPE_EXTENSION_PROPERTIES, nullptr, XR_EXT_DEBUG_UTILS_EXTENSION_NAME, XR_EXT_debug_utils_SPEC_VERSION}};
+ return extensions;
+}
+
+namespace {
+class InstanceCreateInfoManager {
+ public:
+ explicit InstanceCreateInfoManager(const XrInstanceCreateInfo* info) : original_create_info(info), modified_create_info(*info) {
+ Reset();
+ }
+
+ // Reset the "modified" state to match the original state.
+ void Reset() {
+ enabled_extensions_cstr.clear();
+ enabled_extensions_cstr.reserve(original_create_info->enabledExtensionCount);
+
+ for (uint32_t i = 0; i < original_create_info->enabledExtensionCount; ++i) {
+ enabled_extensions_cstr.push_back(original_create_info->enabledExtensionNames[i]);
+ }
+ Update();
+ }
+
+ // Remove extensions named in the parameter and return a pointer to the current state.
+ const XrInstanceCreateInfo* FilterOutExtensions(const std::vector<const char*>& extensions_to_skip) {
+ if (enabled_extensions_cstr.empty()) {
+ return Get();
+ }
+ if (extensions_to_skip.empty()) {
+ return Get();
+ }
+ for (auto& ext : extensions_to_skip) {
+ FilterOutExtension(ext);
+ }
+ return Update();
+ }
+ // Remove the extension named in the parameter and return a pointer to the current state.
+ const XrInstanceCreateInfo* FilterOutExtension(const char* extension_to_skip) {
+ if (enabled_extensions_cstr.empty()) {
+ return &modified_create_info;
+ }
+ auto b = enabled_extensions_cstr.begin();
+ auto e = enabled_extensions_cstr.end();
+ auto it = std::find_if(b, e, [&](const char* extension) { return strcmp(extension_to_skip, extension) == 0; });
+ if (it != e) {
+ // Just that one element goes away
+ enabled_extensions_cstr.erase(it);
+ }
+ return Update();
+ }
+
+ // Get the current modified XrInstanceCreateInfo
+ const XrInstanceCreateInfo* Get() const { return &modified_create_info; }
+
+ private:
+ const XrInstanceCreateInfo* Update() {
+ modified_create_info.enabledExtensionCount = static_cast<uint32_t>(enabled_extensions_cstr.size());
+ modified_create_info.enabledExtensionNames = enabled_extensions_cstr.empty() ? nullptr : enabled_extensions_cstr.data();
+ return &modified_create_info;
+ }
+ const XrInstanceCreateInfo* original_create_info;
+
+ XrInstanceCreateInfo modified_create_info;
+ std::vector<const char*> enabled_extensions_cstr;
+};
+} // namespace
+
+// Factory method
+XrResult LoaderInstance::CreateInstance(PFN_xrGetInstanceProcAddr get_instance_proc_addr_term,
+ PFN_xrCreateInstance create_instance_term,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance_term,
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces,
+ const XrInstanceCreateInfo* info, std::unique_ptr<LoaderInstance>* loader_instance) {
+ LoaderLogger::LogVerboseMessage("xrCreateInstance", "Entering LoaderInstance::CreateInstance");
+
+ // Check the list of enabled extensions to make sure something supports them, and, if we do,
+ // add it to the list of enabled extensions
+ XrResult last_error = XR_SUCCESS;
+ for (uint32_t ext = 0; ext < info->enabledExtensionCount; ++ext) {
+ bool found = false;
+ // First check the runtime
+ if (RuntimeInterface::GetRuntime().SupportsExtension(info->enabledExtensionNames[ext])) {
+ found = true;
+ }
+ // Next check the loader
+ if (!found) {
+ for (auto& loader_extension : LoaderInstance::LoaderSpecificExtensions()) {
+ if (strcmp(loader_extension.extensionName, info->enabledExtensionNames[ext]) == 0) {
+ found = true;
+ break;
+ }
+ }
+ }
+ // Finally, check the enabled layers
+ if (!found) {
+ for (auto& layer_interface : api_layer_interfaces) {
+ if (layer_interface->SupportsExtension(info->enabledExtensionNames[ext])) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ std::string msg = "LoaderInstance::CreateInstance, no support found for requested extension: ";
+ msg += info->enabledExtensionNames[ext];
+ LoaderLogger::LogErrorMessage("xrCreateInstance", msg);
+ last_error = XR_ERROR_EXTENSION_NOT_PRESENT;
+ break;
+ }
+ }
+
+ // Topmost means "closest to the application"
+ PFN_xrGetInstanceProcAddr topmost_gipa = get_instance_proc_addr_term;
+ XrInstance instance{XR_NULL_HANDLE};
+
+ if (XR_SUCCEEDED(last_error)) {
+ // Remove the loader-supported-extensions (debug utils), if it's in the list of enabled extensions but not supported by
+ // the runtime.
+ InstanceCreateInfoManager create_info_manager{info};
+ const XrInstanceCreateInfo* modified_create_info = info;
+ if (info->enabledExtensionCount > 0) {
+ std::vector<const char*> extensions_to_skip;
+ for (const auto& ext : LoaderInstance::LoaderSpecificExtensions()) {
+ if (!RuntimeInterface::GetRuntime().SupportsExtension(ext.extensionName)) {
+ extensions_to_skip.emplace_back(ext.extensionName);
+ }
+ }
+ modified_create_info = create_info_manager.FilterOutExtensions(extensions_to_skip);
+ }
+
+ // Only start the xrCreateApiLayerInstance stack if we have layers.
+ if (!api_layer_interfaces.empty()) {
+ // Initialize an array of ApiLayerNextInfo structs
+ std::unique_ptr<XrApiLayerNextInfo[]> next_info_list(new XrApiLayerNextInfo[api_layer_interfaces.size()]);
+ auto ni_index = static_cast<uint32_t>(api_layer_interfaces.size() - 1);
+ for (uint32_t i = 0; i <= ni_index; i++) {
+ next_info_list[i].structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_NEXT_INFO;
+ next_info_list[i].structVersion = XR_API_LAYER_NEXT_INFO_STRUCT_VERSION;
+ next_info_list[i].structSize = sizeof(XrApiLayerNextInfo);
+ }
+
+ // Go through all layers, and override the instance pointers with the layer version. However,
+ // go backwards through the layer list so we replace in reverse order so the layers can call their next function
+ // appropriately.
+ PFN_xrCreateApiLayerInstance topmost_cali_fp = create_api_layer_instance_term;
+ XrApiLayerNextInfo* topmost_nextinfo = nullptr;
+ for (auto layer_interface = api_layer_interfaces.rbegin(); layer_interface != api_layer_interfaces.rend();
+ ++layer_interface) {
+ // Collect current layer's function pointers
+ PFN_xrGetInstanceProcAddr cur_gipa_fp = (*layer_interface)->GetInstanceProcAddrFuncPointer();
+ PFN_xrCreateApiLayerInstance cur_cali_fp = (*layer_interface)->GetCreateApiLayerInstanceFuncPointer();
+
+ // Fill in layer info and link previous (lower) layer fxn pointers
+ strncpy(next_info_list[ni_index].layerName, (*layer_interface)->LayerName().c_str(),
+ XR_MAX_API_LAYER_NAME_SIZE - 1);
+ next_info_list[ni_index].layerName[XR_MAX_API_LAYER_NAME_SIZE - 1] = '\0';
+ next_info_list[ni_index].next = topmost_nextinfo;
+ next_info_list[ni_index].nextGetInstanceProcAddr = topmost_gipa;
+ next_info_list[ni_index].nextCreateApiLayerInstance = topmost_cali_fp;
+
+ // Update saved pointers for next iteration
+ topmost_nextinfo = &next_info_list[ni_index];
+ topmost_gipa = cur_gipa_fp;
+ topmost_cali_fp = cur_cali_fp;
+ ni_index--;
+ }
+
+ // Populate the ApiLayerCreateInfo struct and pass to topmost CreateApiLayerInstance()
+ XrApiLayerCreateInfo api_layer_ci = {};
+ api_layer_ci.structType = XR_LOADER_INTERFACE_STRUCT_API_LAYER_CREATE_INFO;
+ api_layer_ci.structVersion = XR_API_LAYER_CREATE_INFO_STRUCT_VERSION;
+ api_layer_ci.structSize = sizeof(XrApiLayerCreateInfo);
+ api_layer_ci.loaderInstance = nullptr; // Not used.
+ api_layer_ci.settings_file_location[0] = '\0';
+ api_layer_ci.nextInfo = next_info_list.get();
+ //! @todo do we filter our create info extension list here?
+ //! Think that actually each layer might need to filter...
+ last_error = topmost_cali_fp(modified_create_info, &api_layer_ci, &instance);
+
+ } else {
+ // The loader's terminator is the topmost CreateInstance if there are no layers.
+ last_error = create_instance_term(modified_create_info, &instance);
+ }
+
+ if (XR_FAILED(last_error)) {
+ LoaderLogger::LogErrorMessage("xrCreateInstance", "LoaderInstance::CreateInstance chained CreateInstance call failed");
+ }
+ }
+
+ if (XR_SUCCEEDED(last_error)) {
+ loader_instance->reset(new LoaderInstance(instance, info, topmost_gipa, std::move(api_layer_interfaces)));
+
+ std::ostringstream oss;
+ oss << "LoaderInstance::CreateInstance succeeded with ";
+ oss << (*loader_instance)->LayerInterfaces().size();
+ oss << " layers enabled and runtime interface - created instance = ";
+ oss << HandleToHexString((*loader_instance)->GetInstanceHandle());
+ LoaderLogger::LogInfoMessage("xrCreateInstance", oss.str());
+ }
+
+ return last_error;
+}
+
+XrResult LoaderInstance::GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* function) {
+ return _topmost_gipa(_runtime_instance, name, function);
+}
+
+LoaderInstance::LoaderInstance(XrInstance instance, const XrInstanceCreateInfo* create_info, PFN_xrGetInstanceProcAddr topmost_gipa,
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces)
+ : _runtime_instance(instance),
+ _topmost_gipa(topmost_gipa),
+ _api_layer_interfaces(std::move(api_layer_interfaces)),
+ _dispatch_table(new XrGeneratedDispatchTable{}) {
+ for (uint32_t ext = 0; ext < create_info->enabledExtensionCount; ++ext) {
+ _enabled_extensions.push_back(create_info->enabledExtensionNames[ext]);
+ }
+
+ GeneratedXrPopulateDispatchTable(_dispatch_table.get(), instance, topmost_gipa);
+}
+
+LoaderInstance::~LoaderInstance() {
+ std::ostringstream oss;
+ oss << "Destroying LoaderInstance = ";
+ oss << PointerToHexString(this);
+ LoaderLogger::LogInfoMessage("xrDestroyInstance", oss.str());
+}
+
+bool LoaderInstance::ExtensionIsEnabled(const std::string& extension) {
+ for (std::string& cur_enabled : _enabled_extensions) {
+ if (cur_enabled == extension) {
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/thirdparty/openxr/src/loader/loader_instance.hpp b/thirdparty/openxr/src/loader/loader_instance.hpp
new file mode 100644
index 0000000000..1d43ed758d
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_instance.hpp
@@ -0,0 +1,77 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include "extra_algorithms.h"
+#include "loader_interfaces.h"
+
+#include <openxr/openxr.h>
+
+#include <array>
+#include <cmath>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_map>
+#include <vector>
+
+class ApiLayerInterface;
+struct XrGeneratedDispatchTable;
+class LoaderInstance;
+
+// Manage the single loader instance that is available.
+namespace ActiveLoaderInstance {
+// Set the active loader instance. This will fail if there is already an active loader instance.
+XrResult Set(std::unique_ptr<LoaderInstance> loader_instance, const char* log_function_name);
+
+// Returns true if there is an active loader instance.
+bool IsAvailable();
+
+// Get the active LoaderInstance.
+XrResult Get(LoaderInstance** loader_instance, const char* log_function_name);
+
+// Destroy the currently active LoaderInstance if there is one. This will make the loader able to create a new XrInstance if needed.
+void Remove();
+}; // namespace ActiveLoaderInstance
+
+// Manages information needed by the loader for an XrInstance, such as what extensions are available and the dispatch table.
+class LoaderInstance {
+ public:
+ // Factory method
+ static XrResult CreateInstance(PFN_xrGetInstanceProcAddr get_instance_proc_addr_term, PFN_xrCreateInstance create_instance_term,
+ PFN_xrCreateApiLayerInstance create_api_layer_instance_term,
+ std::vector<std::unique_ptr<ApiLayerInterface>> layer_interfaces,
+ const XrInstanceCreateInfo* createInfo, std::unique_ptr<LoaderInstance>* loader_instance);
+ static const std::array<XrExtensionProperties, 1>& LoaderSpecificExtensions();
+
+ virtual ~LoaderInstance();
+
+ XrInstance GetInstanceHandle() { return _runtime_instance; }
+ const std::unique_ptr<XrGeneratedDispatchTable>& DispatchTable() { return _dispatch_table; }
+ std::vector<std::unique_ptr<ApiLayerInterface>>& LayerInterfaces() { return _api_layer_interfaces; }
+ bool ExtensionIsEnabled(const std::string& extension);
+ XrDebugUtilsMessengerEXT DefaultDebugUtilsMessenger() { return _messenger; }
+ void SetDefaultDebugUtilsMessenger(XrDebugUtilsMessengerEXT messenger) { _messenger = messenger; }
+ XrResult GetInstanceProcAddr(const char* name, PFN_xrVoidFunction* function);
+
+ private:
+ LoaderInstance(XrInstance instance, const XrInstanceCreateInfo* createInfo, PFN_xrGetInstanceProcAddr topmost_gipa,
+ std::vector<std::unique_ptr<ApiLayerInterface>> api_layer_interfaces);
+
+ private:
+ XrInstance _runtime_instance{XR_NULL_HANDLE};
+ PFN_xrGetInstanceProcAddr _topmost_gipa{nullptr};
+ std::vector<std::string> _enabled_extensions;
+ std::vector<std::unique_ptr<ApiLayerInterface>> _api_layer_interfaces;
+
+ std::unique_ptr<XrGeneratedDispatchTable> _dispatch_table;
+ // Internal debug messenger created during xrCreateInstance
+ XrDebugUtilsMessengerEXT _messenger{XR_NULL_HANDLE};
+};
diff --git a/thirdparty/openxr/src/loader/loader_logger.cpp b/thirdparty/openxr/src/loader/loader_logger.cpp
new file mode 100644
index 0000000000..dba46aa92d
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger.cpp
@@ -0,0 +1,239 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "loader_logger.hpp"
+
+#include "extra_algorithms.h"
+#include "hex_and_handles.h"
+#include "loader_logger_recorders.hpp"
+#include "platform_utils.hpp"
+
+#include <openxr/openxr.h>
+
+#include <algorithm>
+#include <iterator>
+#include <memory>
+#include <mutex>
+#include <sstream>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+bool LoaderLogRecorder::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT /*message_severity*/,
+ XrDebugUtilsMessageTypeFlagsEXT /*message_type*/,
+ const XrDebugUtilsMessengerCallbackDataEXT* /*callback_data*/) {
+ return false;
+}
+
+// Utility functions for converting to/from XR_EXT_debug_utils values
+
+XrLoaderLogMessageSeverityFlags DebugUtilsSeveritiesToLoaderLogMessageSeverities(
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severities) {
+ XrLoaderLogMessageSeverityFlags log_severities = 0UL;
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT;
+ }
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT;
+ }
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT;
+ }
+ if ((utils_severities & XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT) != 0u) {
+ log_severities |= XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT;
+ }
+ return log_severities;
+}
+
+XrDebugUtilsMessageSeverityFlagsEXT LoaderLogMessageSeveritiesToDebugUtilsMessageSeverities(
+ XrLoaderLogMessageSeverityFlags log_severities) {
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severities = 0UL;
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_VERBOSE_BIT_EXT;
+ }
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_INFO_BIT_EXT;
+ }
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_WARNING_BIT_EXT;
+ }
+ if ((log_severities & XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT) != 0u) {
+ utils_severities |= XR_DEBUG_UTILS_MESSAGE_SEVERITY_ERROR_BIT_EXT;
+ }
+ return utils_severities;
+}
+
+XrLoaderLogMessageTypeFlagBits DebugUtilsMessageTypesToLoaderLogMessageTypes(XrDebugUtilsMessageTypeFlagsEXT utils_types) {
+ XrLoaderLogMessageTypeFlagBits log_types = 0UL;
+ if ((utils_types & XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT) != 0u) {
+ log_types |= XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT;
+ }
+ if ((utils_types & XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT) != 0u) {
+ log_types |= XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT;
+ }
+ if ((utils_types & XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT) != 0u) {
+ log_types |= XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT;
+ }
+ return log_types;
+}
+
+XrDebugUtilsMessageTypeFlagsEXT LoaderLogMessageTypesToDebugUtilsMessageTypes(XrLoaderLogMessageTypeFlagBits log_types) {
+ XrDebugUtilsMessageTypeFlagsEXT utils_types = 0UL;
+ if ((log_types & XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT) != 0u) {
+ utils_types |= XR_DEBUG_UTILS_MESSAGE_TYPE_GENERAL_BIT_EXT;
+ }
+ if ((log_types & XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT) != 0u) {
+ utils_types |= XR_DEBUG_UTILS_MESSAGE_TYPE_VALIDATION_BIT_EXT;
+ }
+ if ((log_types & XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT) != 0u) {
+ utils_types |= XR_DEBUG_UTILS_MESSAGE_TYPE_PERFORMANCE_BIT_EXT;
+ }
+ return utils_types;
+}
+
+LoaderLogger::LoaderLogger() {
+ std::string debug_string = PlatformUtilsGetEnv("XR_LOADER_DEBUG");
+
+ // Add an error logger by default so that we at least get errors out to std::cerr.
+ // Normally we enable stderr output. But if the XR_LOADER_DEBUG environment variable is
+ // present as "none" then we don't.
+ if (debug_string != "none") {
+ AddLogRecorder(MakeStdErrLoaderLogRecorder(nullptr));
+#ifdef __ANDROID__
+ // Add a logcat logger by default.
+ AddLogRecorder(MakeLogcatLoaderLogRecorder());
+#endif // __ANDROID__
+ }
+
+#ifdef _WIN32
+ // Add an debugger logger by default so that we at least get errors out to the debugger.
+ AddLogRecorder(MakeDebuggerLoaderLogRecorder(nullptr));
+#endif
+
+ // If the environment variable to enable loader debugging is set, then enable the
+ // appropriate logging out to std::cout.
+ if (!debug_string.empty()) {
+ XrLoaderLogMessageSeverityFlags debug_flags = {};
+ if (debug_string == "error") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT;
+ } else if (debug_string == "warn") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT;
+ } else if (debug_string == "info") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT |
+ XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT;
+ } else if (debug_string == "all" || debug_string == "verbose") {
+ debug_flags = XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT |
+ XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT;
+ }
+ AddLogRecorder(MakeStdOutLoaderLogRecorder(nullptr, debug_flags));
+ }
+}
+
+void LoaderLogger::AddLogRecorder(std::unique_ptr<LoaderLogRecorder>&& recorder) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ _recorders.push_back(std::move(recorder));
+}
+
+void LoaderLogger::AddLogRecorderForXrInstance(XrInstance instance, std::unique_ptr<LoaderLogRecorder>&& recorder) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ _recordersByInstance[instance].insert(recorder->UniqueId());
+ _recorders.emplace_back(std::move(recorder));
+}
+
+void LoaderLogger::RemoveLogRecorder(uint64_t unique_id) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ vector_remove_if_and_erase(
+ _recorders, [=](std::unique_ptr<LoaderLogRecorder> const& recorder) { return recorder->UniqueId() == unique_id; });
+ for (auto& recorders : _recordersByInstance) {
+ auto& messengersForInstance = recorders.second;
+ if (messengersForInstance.count(unique_id) > 0) {
+ messengersForInstance.erase(unique_id);
+ }
+ }
+}
+
+void LoaderLogger::RemoveLogRecordersForXrInstance(XrInstance instance) {
+ std::unique_lock<std::shared_timed_mutex> lock(_mutex);
+ if (_recordersByInstance.find(instance) != _recordersByInstance.end()) {
+ auto recorders = _recordersByInstance[instance];
+ vector_remove_if_and_erase(_recorders, [=](std::unique_ptr<LoaderLogRecorder> const& recorder) {
+ return recorders.find(recorder->UniqueId()) != recorders.end();
+ });
+ _recordersByInstance.erase(instance);
+ }
+}
+
+bool LoaderLogger::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const std::string& message_id, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects) {
+ XrLoaderLogMessengerCallbackData callback_data = {};
+ callback_data.message_id = message_id.c_str();
+ callback_data.command_name = command_name.c_str();
+ callback_data.message = message.c_str();
+
+ auto names_and_labels = data_.PopulateNamesAndLabels(objects);
+ callback_data.objects = names_and_labels.sdk_objects.empty() ? nullptr : names_and_labels.sdk_objects.data();
+ callback_data.object_count = static_cast<uint8_t>(names_and_labels.objects.size());
+
+ callback_data.session_labels = names_and_labels.labels.empty() ? nullptr : names_and_labels.labels.data();
+ callback_data.session_labels_count = static_cast<uint8_t>(names_and_labels.labels.size());
+
+ std::shared_lock<std::shared_timed_mutex> lock(_mutex);
+ bool exit_app = false;
+ for (std::unique_ptr<LoaderLogRecorder>& recorder : _recorders) {
+ if ((recorder->MessageSeverities() & message_severity) == message_severity &&
+ (recorder->MessageTypes() & message_type) == message_type) {
+ exit_app |= recorder->LogMessage(message_severity, message_type, &callback_data);
+ }
+ }
+ return exit_app;
+}
+
+// Extension-specific logging functions
+bool LoaderLogger::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity,
+ XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) {
+ bool exit_app = false;
+ XrLoaderLogMessageSeverityFlags log_message_severity = DebugUtilsSeveritiesToLoaderLogMessageSeverities(message_severity);
+ XrLoaderLogMessageTypeFlags log_message_type = DebugUtilsMessageTypesToLoaderLogMessageTypes(message_type);
+
+ AugmentedCallbackData augmented_data;
+ data_.WrapCallbackData(&augmented_data, callback_data);
+
+ // Loop through the recorders
+ std::shared_lock<std::shared_timed_mutex> lock(_mutex);
+ for (std::unique_ptr<LoaderLogRecorder>& recorder : _recorders) {
+ // Only send the message if it's a debug utils recorder and of the type the recorder cares about.
+ if (recorder->Type() != XR_LOADER_LOG_DEBUG_UTILS ||
+ (recorder->MessageSeverities() & log_message_severity) != log_message_severity ||
+ (recorder->MessageTypes() & log_message_type) != log_message_type) {
+ continue;
+ }
+
+ exit_app |= recorder->LogDebugUtilsMessage(message_severity, message_type, augmented_data.exported_data);
+ }
+ return exit_app;
+}
+
+void LoaderLogger::AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name) {
+ data_.AddObjectName(object_handle, object_type, object_name);
+}
+
+void LoaderLogger::BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT* label_info) {
+ data_.BeginLabelRegion(session, *label_info);
+}
+
+void LoaderLogger::EndLabelRegion(XrSession session) { data_.EndLabelRegion(session); }
+
+void LoaderLogger::InsertLabel(XrSession session, const XrDebugUtilsLabelEXT* label_info) {
+ data_.InsertLabel(session, *label_info);
+}
+
+void LoaderLogger::DeleteSessionLabels(XrSession session) { data_.DeleteSessionLabels(session); }
diff --git a/thirdparty/openxr/src/loader/loader_logger.hpp b/thirdparty/openxr/src/loader/loader_logger.hpp
new file mode 100644
index 0000000000..260ebe354a
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger.hpp
@@ -0,0 +1,194 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_map>
+#include <unordered_set>
+#include <vector>
+#include <set>
+#include <map>
+#include <shared_mutex>
+
+#include <openxr/openxr.h>
+
+#include "hex_and_handles.h"
+#include "object_info.h"
+
+// Use internal versions of flags similar to XR_EXT_debug_utils so that
+// we're not tightly coupled to that extension. This way, if the extension
+// changes or gets replaced, we can be flexible in the loader.
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT 0x00000001
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT 0x00000010
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT 0x00000100
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT 0x00001000
+#define XR_LOADER_LOG_MESSAGE_SEVERITY_DEFAULT_BITS 0x00000000
+typedef XrFlags64 XrLoaderLogMessageSeverityFlagBits;
+typedef XrFlags64 XrLoaderLogMessageSeverityFlags;
+
+#define XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT 0x00000001
+#define XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT 0x00000002
+#define XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT 0x00000004
+#define XR_LOADER_LOG_MESSAGE_TYPE_DEFAULT_BITS 0xffffffff
+typedef XrFlags64 XrLoaderLogMessageTypeFlagBits;
+typedef XrFlags64 XrLoaderLogMessageTypeFlags;
+
+struct XrLoaderLogMessengerCallbackData {
+ const char* message_id;
+ const char* command_name;
+ const char* message;
+ uint8_t object_count;
+ XrSdkLogObjectInfo* objects;
+ uint8_t session_labels_count;
+ XrDebugUtilsLabelEXT* session_labels;
+};
+
+enum XrLoaderLogType {
+ XR_LOADER_LOG_UNKNOWN = 0,
+ XR_LOADER_LOG_STDERR,
+ XR_LOADER_LOG_STDOUT,
+ XR_LOADER_LOG_DEBUG_UTILS,
+ XR_LOADER_LOG_DEBUGGER,
+ XR_LOADER_LOG_LOGCAT,
+};
+
+class LoaderLogRecorder {
+ public:
+ LoaderLogRecorder(XrLoaderLogType type, void* user_data, XrLoaderLogMessageSeverityFlags message_severities,
+ XrLoaderLogMessageTypeFlags message_types) {
+ _active = false;
+ _user_data = user_data;
+ _type = type;
+ _unique_id = 0;
+ _message_severities = message_severities;
+ _message_types = message_types;
+ }
+ virtual ~LoaderLogRecorder() = default;
+
+ XrLoaderLogType Type() { return _type; }
+
+ uint64_t UniqueId() { return _unique_id; }
+
+ XrLoaderLogMessageSeverityFlags MessageSeverities() { return _message_severities; }
+
+ XrLoaderLogMessageTypeFlags MessageTypes() { return _message_types; }
+
+ virtual void Start() { _active = true; }
+
+ bool IsPaused() { return _active; }
+
+ virtual void Pause() { _active = false; }
+
+ virtual void Resume() { _active = true; }
+
+ virtual void Stop() { _active = false; }
+
+ virtual bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) = 0;
+
+ // Extension-specific logging functions - defaults to do nothing.
+ virtual bool LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity,
+ XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data);
+
+ protected:
+ bool _active;
+ XrLoaderLogType _type;
+ uint64_t _unique_id;
+ void* _user_data;
+ XrLoaderLogMessageSeverityFlags _message_severities;
+ XrLoaderLogMessageTypeFlags _message_types;
+};
+
+class LoaderLogger {
+ public:
+ static LoaderLogger& GetInstance() {
+ static LoaderLogger instance;
+ return instance;
+ }
+
+ void AddLogRecorder(std::unique_ptr<LoaderLogRecorder>&& recorder);
+ void RemoveLogRecorder(uint64_t unique_id);
+
+ void AddLogRecorderForXrInstance(XrInstance instance, std::unique_ptr<LoaderLogRecorder>&& recorder);
+ void RemoveLogRecordersForXrInstance(XrInstance instance);
+
+ //! Called from LoaderXrTermSetDebugUtilsObjectNameEXT - an empty name means remove
+ void AddObjectName(uint64_t object_handle, XrObjectType object_type, const std::string& object_name);
+ void BeginLabelRegion(XrSession session, const XrDebugUtilsLabelEXT* label_info);
+ void EndLabelRegion(XrSession session);
+ void InsertLabel(XrSession session, const XrDebugUtilsLabelEXT* label_info);
+ void DeleteSessionLabels(XrSession session);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const std::string& message_id, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {});
+ static bool LogErrorMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogWarningMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogInfoMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogVerboseMessage(const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT, XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT,
+ "OpenXR-Loader", command_name, message, objects);
+ }
+ static bool LogValidationErrorMessage(const std::string& vuid, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT, XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT,
+ vuid, command_name, message, objects);
+ }
+ static bool LogValidationWarningMessage(const std::string& vuid, const std::string& command_name, const std::string& message,
+ const std::vector<XrSdkLogObjectInfo>& objects = {}) {
+ return GetInstance().LogMessage(XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT, XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT,
+ vuid, command_name, message, objects);
+ }
+
+ // Extension-specific logging functions
+ bool LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity, XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data);
+
+ // Non-copyable
+ LoaderLogger(const LoaderLogger&) = delete;
+ LoaderLogger& operator=(const LoaderLogger&) = delete;
+
+ private:
+ LoaderLogger();
+
+ std::shared_timed_mutex _mutex;
+
+ // List of *all* available recorder objects (including created specifically for an Instance)
+ std::vector<std::unique_ptr<LoaderLogRecorder>> _recorders;
+
+ // List of recorder objects only created specifically for an XrInstance
+ std::unordered_map<XrInstance, std::unordered_set<uint64_t>> _recordersByInstance;
+
+ DebugUtilsData data_;
+};
+
+// Utility functions for converting to/from XR_EXT_debug_utils values
+XrLoaderLogMessageSeverityFlags DebugUtilsSeveritiesToLoaderLogMessageSeverities(
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severities);
+XrDebugUtilsMessageSeverityFlagsEXT LoaderLogMessageSeveritiesToDebugUtilsMessageSeverities(
+ XrLoaderLogMessageSeverityFlags log_severities);
+XrLoaderLogMessageTypeFlagBits DebugUtilsMessageTypesToLoaderLogMessageTypes(XrDebugUtilsMessageTypeFlagsEXT utils_types);
+XrDebugUtilsMessageTypeFlagsEXT LoaderLogMessageTypesToDebugUtilsMessageTypes(XrLoaderLogMessageTypeFlagBits log_types);
diff --git a/thirdparty/openxr/src/loader/loader_logger_recorders.cpp b/thirdparty/openxr/src/loader/loader_logger_recorders.cpp
new file mode 100644
index 0000000000..7673678c60
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger_recorders.cpp
@@ -0,0 +1,291 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "loader_logger_recorders.hpp"
+
+#include "hex_and_handles.h"
+#include "loader_logger.hpp"
+
+#include <openxr/openxr.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <iostream>
+#include <sstream>
+
+#ifdef __ANDROID__
+#include "android/log.h"
+#endif
+
+#ifdef _WIN32
+#include <windows.h>
+#endif
+
+// Anonymous namespace to keep these types private
+namespace {
+void OutputMessageToStream(std::ostream& os, XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type, const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT > message_severity) {
+ os << "Verbose [";
+ } else if (XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT > message_severity) {
+ os << "Info [";
+ } else if (XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT > message_severity) {
+ os << "Warning [";
+ } else {
+ os << "Error [";
+ }
+ switch (message_type) {
+ case XR_LOADER_LOG_MESSAGE_TYPE_GENERAL_BIT:
+ os << "GENERAL";
+ break;
+ case XR_LOADER_LOG_MESSAGE_TYPE_SPECIFICATION_BIT:
+ os << "SPEC";
+ break;
+ case XR_LOADER_LOG_MESSAGE_TYPE_PERFORMANCE_BIT:
+ os << "PERF";
+ break;
+ default:
+ os << "UNKNOWN";
+ break;
+ }
+ os << " | " << callback_data->command_name << " | " << callback_data->message_id << "] : " << callback_data->message
+ << std::endl;
+
+ for (uint32_t obj = 0; obj < callback_data->object_count; ++obj) {
+ os << " Object[" << obj << "] = " << callback_data->objects[obj].ToString();
+ os << std::endl;
+ }
+ for (uint32_t label = 0; label < callback_data->session_labels_count; ++label) {
+ os << " SessionLabel[" << std::to_string(label) << "] = " << callback_data->session_labels[label].labelName;
+ os << std::endl;
+ }
+}
+
+// With std::cerr: Standard Error logger, always on for now
+// With std::cout: Standard Output logger used with XR_LOADER_DEBUG
+class OstreamLoaderLogRecorder : public LoaderLogRecorder {
+ public:
+ OstreamLoaderLogRecorder(std::ostream& os, void* user_data, XrLoaderLogMessageSeverityFlags flags);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+
+ private:
+ std::ostream& os_;
+};
+
+// Debug Utils logger used with XR_EXT_debug_utils
+class DebugUtilsLogRecorder : public LoaderLogRecorder {
+ public:
+ DebugUtilsLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info, XrDebugUtilsMessengerEXT debug_messenger);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+
+ // Extension-specific logging functions
+ bool LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity, XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) override;
+
+ private:
+ PFN_xrDebugUtilsMessengerCallbackEXT _user_callback;
+};
+#ifdef __ANDROID__
+
+class LogcatLoaderLogRecorder : public LoaderLogRecorder {
+ public:
+ LogcatLoaderLogRecorder();
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+};
+#endif
+
+#ifdef _WIN32
+// Output to debugger
+class DebuggerLoaderLogRecorder : public LoaderLogRecorder {
+ public:
+ DebuggerLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags);
+
+ bool LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity, XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) override;
+};
+#endif
+
+// Unified stdout/stderr logger
+OstreamLoaderLogRecorder::OstreamLoaderLogRecorder(std::ostream& os, void* user_data, XrLoaderLogMessageSeverityFlags flags)
+ : LoaderLogRecorder(XR_LOADER_LOG_STDOUT, user_data, flags, 0xFFFFFFFFUL), os_(os) {
+ // Automatically start
+ Start();
+}
+
+bool OstreamLoaderLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ OutputMessageToStream(os_, message_severity, message_type, callback_data);
+ }
+
+ // Return of "true" means that we should exit the application after the logged message. We
+ // don't want to do that for our internal logging. Only let a user return true.
+ return false;
+}
+
+// A logger associated with the XR_EXT_debug_utils extension
+
+DebugUtilsLogRecorder::DebugUtilsLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info,
+ XrDebugUtilsMessengerEXT debug_messenger)
+ : LoaderLogRecorder(XR_LOADER_LOG_DEBUG_UTILS, static_cast<void*>(create_info->userData),
+ DebugUtilsSeveritiesToLoaderLogMessageSeverities(create_info->messageSeverities),
+ DebugUtilsMessageTypesToLoaderLogMessageTypes(create_info->messageTypes)),
+ _user_callback(create_info->userCallback) {
+ // Use the debug messenger value to uniquely identify this logger with that messenger
+ _unique_id = MakeHandleGeneric(debug_messenger);
+ Start();
+}
+
+// Extension-specific logging functions
+bool DebugUtilsLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ bool should_exit = false;
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ XrDebugUtilsMessageSeverityFlagsEXT utils_severity = DebugUtilsSeveritiesToLoaderLogMessageSeverities(message_severity);
+ XrDebugUtilsMessageTypeFlagsEXT utils_type = LoaderLogMessageTypesToDebugUtilsMessageTypes(message_type);
+
+ // Convert the loader log message into the debug utils log message information
+ XrDebugUtilsMessengerCallbackDataEXT utils_callback_data = {};
+ utils_callback_data.type = XR_TYPE_DEBUG_UTILS_MESSENGER_CALLBACK_DATA_EXT;
+ utils_callback_data.messageId = callback_data->message_id;
+ utils_callback_data.functionName = callback_data->command_name;
+ utils_callback_data.message = callback_data->message;
+ std::vector<XrDebugUtilsObjectNameInfoEXT> utils_objects;
+ utils_objects.resize(callback_data->object_count);
+ for (uint8_t object = 0; object < callback_data->object_count; ++object) {
+ utils_objects[object].type = XR_TYPE_DEBUG_UTILS_OBJECT_NAME_INFO_EXT;
+ utils_objects[object].next = nullptr;
+ utils_objects[object].objectHandle = callback_data->objects[object].handle;
+ utils_objects[object].objectType = callback_data->objects[object].type;
+ utils_objects[object].objectName = callback_data->objects[object].name.c_str();
+ }
+ utils_callback_data.objectCount = callback_data->object_count;
+ utils_callback_data.objects = utils_objects.data();
+ utils_callback_data.sessionLabelCount = callback_data->session_labels_count;
+ utils_callback_data.sessionLabels = callback_data->session_labels;
+
+ // Call the user callback with the appropriate info
+ // Return of "true" means that we should exit the application after the logged message.
+ should_exit = (_user_callback(utils_severity, utils_type, &utils_callback_data, _user_data) == XR_TRUE);
+ }
+
+ return should_exit;
+}
+
+bool DebugUtilsLogRecorder::LogDebugUtilsMessage(XrDebugUtilsMessageSeverityFlagsEXT message_severity,
+ XrDebugUtilsMessageTypeFlagsEXT message_type,
+ const XrDebugUtilsMessengerCallbackDataEXT* callback_data) {
+ // Call the user callback with the appropriate info
+ // Return of "true" means that we should exit the application after the logged message.
+ return (_user_callback(message_severity, message_type, callback_data, _user_data) == XR_TRUE);
+}
+
+#ifdef __ANDROID__
+
+static inline android_LogPriority LoaderToAndroidLogPriority(XrLoaderLogMessageSeverityFlags message_severity) {
+ if (0 != (message_severity & XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT)) {
+ return ANDROID_LOG_ERROR;
+ }
+ if (0 != (message_severity & XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT)) {
+ return ANDROID_LOG_WARN;
+ }
+ if (0 != (message_severity & XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT)) {
+ return ANDROID_LOG_INFO;
+ }
+ return ANDROID_LOG_VERBOSE;
+}
+
+LogcatLoaderLogRecorder::LogcatLoaderLogRecorder()
+ : LoaderLogRecorder(XR_LOADER_LOG_LOGCAT, nullptr,
+ XR_LOADER_LOG_MESSAGE_SEVERITY_VERBOSE_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_INFO_BIT |
+ XR_LOADER_LOG_MESSAGE_SEVERITY_WARNING_BIT | XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT,
+ 0xFFFFFFFFUL) {
+ // Automatically start
+ Start();
+}
+
+bool LogcatLoaderLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ std::stringstream ss;
+ OutputMessageToStream(ss, message_severity, message_type, callback_data);
+ __android_log_write(LoaderToAndroidLogPriority(message_severity), "OpenXR-Loader", ss.str().c_str());
+ }
+
+ // Return of "true" means that we should exit the application after the logged message. We
+ // don't want to do that for our internal logging. Only let a user return true.
+ return false;
+}
+#endif // __ANDROID__
+
+#ifdef _WIN32
+// Unified stdout/stderr logger
+DebuggerLoaderLogRecorder::DebuggerLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags)
+ : LoaderLogRecorder(XR_LOADER_LOG_DEBUGGER, user_data, flags, 0xFFFFFFFFUL) {
+ // Automatically start
+ Start();
+}
+
+bool DebuggerLoaderLogRecorder::LogMessage(XrLoaderLogMessageSeverityFlagBits message_severity,
+ XrLoaderLogMessageTypeFlags message_type,
+ const XrLoaderLogMessengerCallbackData* callback_data) {
+ if (_active && 0 != (_message_severities & message_severity) && 0 != (_message_types & message_type)) {
+ std::stringstream ss;
+ OutputMessageToStream(ss, message_severity, message_type, callback_data);
+
+ OutputDebugStringA(ss.str().c_str());
+ }
+
+ // Return of "true" means that we should exit the application after the logged message. We
+ // don't want to do that for our internal logging. Only let a user return true.
+ return false;
+}
+#endif
+} // namespace
+
+std::unique_ptr<LoaderLogRecorder> MakeStdOutLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags) {
+ std::unique_ptr<LoaderLogRecorder> recorder(new OstreamLoaderLogRecorder(std::cout, user_data, flags));
+ return recorder;
+}
+
+std::unique_ptr<LoaderLogRecorder> MakeStdErrLoaderLogRecorder(void* user_data) {
+ std::unique_ptr<LoaderLogRecorder> recorder(
+ new OstreamLoaderLogRecorder(std::cerr, user_data, XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT));
+ return recorder;
+}
+
+std::unique_ptr<LoaderLogRecorder> MakeDebugUtilsLoaderLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info,
+ XrDebugUtilsMessengerEXT debug_messenger) {
+ std::unique_ptr<LoaderLogRecorder> recorder(new DebugUtilsLogRecorder(create_info, debug_messenger));
+ return recorder;
+}
+
+#ifdef __ANDROID__
+std::unique_ptr<LoaderLogRecorder> MakeLogcatLoaderLogRecorder() {
+ std::unique_ptr<LoaderLogRecorder> recorder(new LogcatLoaderLogRecorder());
+ return recorder;
+}
+#endif
+
+#ifdef _WIN32
+std::unique_ptr<LoaderLogRecorder> MakeDebuggerLoaderLogRecorder(void* user_data) {
+ std::unique_ptr<LoaderLogRecorder> recorder(new DebuggerLoaderLogRecorder(user_data, XR_LOADER_LOG_MESSAGE_SEVERITY_ERROR_BIT));
+ return recorder;
+}
+#endif
diff --git a/thirdparty/openxr/src/loader/loader_logger_recorders.hpp b/thirdparty/openxr/src/loader/loader_logger_recorders.hpp
new file mode 100644
index 0000000000..31e5243c45
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_logger_recorders.hpp
@@ -0,0 +1,40 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Ryan Pavlik <ryan.pavlik@collabora.com>
+//
+
+#pragma once
+
+#include "loader_logger.hpp"
+
+#include <openxr/openxr.h>
+
+#include <memory>
+
+//! Standard Error logger, on by default. Disabled with environment variable XR_LOADER_DEBUG = "none".
+std::unique_ptr<LoaderLogRecorder> MakeStdErrLoaderLogRecorder(void* user_data);
+
+//! Standard Output logger used with XR_LOADER_DEBUG environment variable.
+std::unique_ptr<LoaderLogRecorder> MakeStdOutLoaderLogRecorder(void* user_data, XrLoaderLogMessageSeverityFlags flags);
+
+#ifdef __ANDROID__
+//! Android liblog ("logcat") logger
+std::unique_ptr<LoaderLogRecorder> MakeLogcatLoaderLogRecorder();
+#endif
+
+// Debug Utils logger used with XR_EXT_debug_utils
+std::unique_ptr<LoaderLogRecorder> MakeDebugUtilsLoaderLogRecorder(const XrDebugUtilsMessengerCreateInfoEXT* create_info,
+ XrDebugUtilsMessengerEXT debug_messenger);
+
+#ifdef _WIN32
+//! Win32 debugger output
+std::unique_ptr<LoaderLogRecorder> MakeDebuggerLoaderLogRecorder(void* user_data);
+#endif
+
+// TODO: Add other Derived classes:
+// - FileLoaderLogRecorder - During/after xrCreateInstance
+// - PipeLoaderLogRecorder? - During/after xrCreateInstance
diff --git a/thirdparty/openxr/src/loader/loader_platform.hpp b/thirdparty/openxr/src/loader/loader_platform.hpp
new file mode 100644
index 0000000000..e2757fffb9
--- /dev/null
+++ b/thirdparty/openxr/src/loader/loader_platform.hpp
@@ -0,0 +1,204 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#pragma once
+
+#include <cassert>
+#include <sstream>
+#include <string>
+
+#include "xr_dependencies.h"
+#include "platform_utils.hpp"
+
+#if defined(__GNUC__) && __GNUC__ >= 4
+#define LOADER_EXPORT __attribute__((visibility("default")))
+#elif defined(__SUNPRO_C) && (__SUNPRO_C >= 0x590)
+#define LOADER_EXPORT __attribute__((visibility("default")))
+#else
+#define LOADER_EXPORT
+#endif
+
+// Environment variables
+#if defined(XR_OS_LINUX) || defined(XR_OS_APPLE) || defined(XR_OS_ANDROID)
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <dirent.h>
+
+#ifndef PATH_MAX
+#define PATH_MAX 1024
+#endif
+
+#define PATH_SEPARATOR ':'
+#define DIRECTORY_SYMBOL '/'
+
+// Dynamic Loading of libraries:
+typedef void *LoaderPlatformLibraryHandle;
+static inline LoaderPlatformLibraryHandle LoaderPlatformLibraryOpen(const std::string &path) {
+ // When loading the library, we use RTLD_LAZY so that not all symbols have to be
+ // resolved at this time (which improves performance). Note that if not all symbols
+ // can be resolved, this could cause crashes later.
+ // For experimenting/debugging: Define the LD_BIND_NOW environment variable to force all
+ // symbols to be resolved here.
+ return dlopen(path.c_str(), RTLD_LAZY | RTLD_LOCAL);
+}
+
+static inline const char *LoaderPlatformLibraryOpenError(const std::string &path) {
+ (void)path;
+ return dlerror();
+}
+
+static inline void LoaderPlatformLibraryClose(LoaderPlatformLibraryHandle library) { dlclose(library); }
+
+static inline void *LoaderPlatformLibraryGetProcAddr(LoaderPlatformLibraryHandle library, const std::string &name) {
+ assert(library);
+ assert(!name.empty());
+ return dlsym(library, name.c_str());
+}
+
+static inline const char *LoaderPlatformLibraryGetProcAddrError(const std::string &name) {
+ (void)name;
+ return dlerror();
+}
+
+#elif defined(XR_OS_WINDOWS)
+
+#define PATH_SEPARATOR ';'
+#define DIRECTORY_SYMBOL '\\'
+
+// Workaround for MS VS 2010/2013 missing snprintf and vsnprintf
+#if defined(_MSC_VER) && _MSC_VER < 1900
+#include <stdint.h>
+
+static inline int32_t xr_vsnprintf(char *result_buffer, size_t buffer_size, const char *print_format, va_list varying_list) {
+ int32_t copy_count = -1;
+ if (buffer_size != 0) {
+ copy_count = _vsnprintf_s(result_buffer, buffer_size, _TRUNCATE, print_format, varying_list);
+ }
+ if (copy_count == -1) {
+ copy_count = _vscprintf(print_format, varying_list);
+ }
+ return copy_count;
+}
+
+static inline int32_t xr_snprintf(char *result_buffer, size_t buffer_size, const char *print_format, ...) {
+ va_list varying_list;
+ va_start(varying_list, print_format);
+ int32_t copy_count = xr_vsnprintf(result_buffer, buffer_size, print_format, varying_list);
+ va_end(varying_list);
+ return copy_count;
+}
+
+#define snprintf xr_snprintf
+#define vsnprintf xr_vsnprintf
+
+#endif
+
+static inline std::string DescribeError(uint32_t code, bool prefixErrorCode = true) {
+ std::string str;
+
+ if (prefixErrorCode) {
+ char prefixBuffer[64];
+ snprintf(prefixBuffer, sizeof(prefixBuffer), "0x%llx (%lld): ", (uint64_t)code, (int64_t)code);
+ str = prefixBuffer;
+ }
+
+ // Could use FORMAT_MESSAGE_FROM_HMODULE to specify an error source.
+ WCHAR errorBufferW[1024]{};
+ const DWORD errorBufferWCapacity = sizeof(errorBufferW) / sizeof(errorBufferW[0]);
+ const DWORD length = FormatMessageW(FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, nullptr, (DWORD)code,
+ MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), errorBufferW, errorBufferWCapacity, nullptr);
+
+ if (length) { // If errorBufferW contains what we are looking for...
+ str += wide_to_utf8(errorBufferW);
+ } else {
+ str = "(unknown)";
+ }
+
+ return str;
+}
+
+// Dynamic Loading:
+typedef HMODULE LoaderPlatformLibraryHandle;
+static inline LoaderPlatformLibraryHandle LoaderPlatformLibraryOpen(const std::string &path) {
+ const std::wstring pathW = utf8_to_wide(path);
+
+ // Try loading the library the original way first.
+ LoaderPlatformLibraryHandle handle = LoadLibraryW(pathW.c_str());
+
+ if (handle == NULL && GetLastError() == ERROR_MOD_NOT_FOUND) {
+ const DWORD dwAttrib = GetFileAttributesW(pathW.c_str());
+ const bool fileExists = (dwAttrib != INVALID_FILE_ATTRIBUTES && !(dwAttrib & FILE_ATTRIBUTE_DIRECTORY));
+ if (fileExists) {
+ // If that failed, then try loading it with broader search folders.
+ handle = LoadLibraryExW(pathW.c_str(), NULL, LOAD_LIBRARY_SEARCH_DEFAULT_DIRS | LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR);
+ }
+ }
+
+ return handle;
+}
+
+static inline std::string LoaderPlatformLibraryOpenError(const std::string &path) {
+ std::stringstream ss;
+ const DWORD dwLastError = GetLastError();
+ const std::string strError = DescribeError(dwLastError);
+ ss << "Failed to open dynamic library " << path << " with error " << dwLastError << ": " << strError;
+ return ss.str();
+}
+
+static inline void LoaderPlatformLibraryClose(LoaderPlatformLibraryHandle library) { FreeLibrary(library); }
+
+static inline void *LoaderPlatformLibraryGetProcAddr(LoaderPlatformLibraryHandle library, const std::string &name) {
+ assert(library);
+ assert(name.size() > 0);
+ return reinterpret_cast<void *>(GetProcAddress(library, name.c_str()));
+}
+
+static inline std::string LoaderPlatformLibraryGetProcAddrAddrError(const std::string &name) {
+ std::stringstream ss;
+ ss << "Failed to find function " << name << " in dynamic library";
+ return ss.str();
+}
+
+#else // Not Linux or Windows
+
+#define PATH_SEPARATOR ':'
+#define DIRECTORY_SYMBOL '/'
+
+static inline LoaderPlatformLibraryHandle LoaderPlatformLibraryOpen(const std::string &path) {
+// Stub func
+#error("Unknown platform, undefined dynamic library routines resulting");
+ (void)path;
+}
+
+static inline const char *LoaderPlatformLibraryOpenError(const std::string &path) {
+ // Stub func
+ (void)path;
+}
+
+static inline void LoaderPlatformLibraryClose(LoaderPlatformLibraryHandle library) {
+ // Stub func
+ (void)library;
+}
+
+static inline void *LoaderPlatformLibraryGetProcAddr(LoaderPlatformLibraryHandle library, const std::string &name) {
+ // Stub func
+ void(library);
+ void(name);
+}
+
+static inline const char *LoaderPlatformLibraryGetProcAddrError(const std::string &name) {
+ // Stub func
+ (void)name;
+}
+
+#endif
diff --git a/thirdparty/openxr/src/loader/manifest_file.cpp b/thirdparty/openxr/src/loader/manifest_file.cpp
new file mode 100644
index 0000000000..e4eab3949e
--- /dev/null
+++ b/thirdparty/openxr/src/loader/manifest_file.cpp
@@ -0,0 +1,845 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Authors: Mark Young <marky@lunarg.com>, Dave Houlton <daveh@lunarg.com>
+//
+
+#if defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+#define _CRT_SECURE_NO_WARNINGS
+#endif // defined(_MSC_VER) && !defined(_CRT_SECURE_NO_WARNINGS)
+
+#include "manifest_file.hpp"
+
+#ifdef OPENXR_HAVE_COMMON_CONFIG
+#include "common_config.h"
+#endif // OPENXR_HAVE_COMMON_CONFIG
+
+#include "filesystem_utils.hpp"
+#include "loader_platform.hpp"
+#include "platform_utils.hpp"
+#include "loader_logger.hpp"
+
+#include <json/json.h>
+#include <openxr/openxr.h>
+
+#include <algorithm>
+#include <cstring>
+#include <fstream>
+#include <memory>
+#include <sstream>
+#include <stdexcept>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+#ifndef FALLBACK_CONFIG_DIRS
+#define FALLBACK_CONFIG_DIRS "/etc/xdg"
+#endif // !FALLBACK_CONFIG_DIRS
+
+#ifndef FALLBACK_DATA_DIRS
+#define FALLBACK_DATA_DIRS "/usr/local/share:/usr/share"
+#endif // !FALLBACK_DATA_DIRS
+
+#ifndef SYSCONFDIR
+#define SYSCONFDIR "/etc"
+#endif // !SYSCONFDIR
+
+#ifdef XRLOADER_DISABLE_EXCEPTION_HANDLING
+#if JSON_USE_EXCEPTIONS
+#error \
+ "Loader is configured to not catch exceptions, but jsoncpp was built with exception-throwing enabled, which could violate the C ABI. One of those two things needs to change."
+#endif // JSON_USE_EXCEPTIONS
+#endif // !XRLOADER_DISABLE_EXCEPTION_HANDLING
+
+#include "runtime_interface.hpp"
+
+// Utility functions for finding files in the appropriate paths
+
+static inline bool StringEndsWith(const std::string &value, const std::string &ending) {
+ if (ending.size() > value.size()) {
+ return false;
+ }
+ return std::equal(ending.rbegin(), ending.rend(), value.rbegin());
+}
+
+// If the file found is a manifest file name, add it to the out_files manifest list.
+static void AddIfJson(const std::string &full_file, std::vector<std::string> &manifest_files) {
+ if (full_file.empty() || !StringEndsWith(full_file, ".json")) {
+ return;
+ }
+ manifest_files.push_back(full_file);
+}
+
+// Check the current path for any manifest files. If the provided search_path is a directory, look for
+// all included JSON files in that directory. Otherwise, just check the provided search_path which should
+// be a single filename.
+static void CheckAllFilesInThePath(const std::string &search_path, bool is_directory_list,
+ std::vector<std::string> &manifest_files) {
+ if (FileSysUtilsPathExists(search_path)) {
+ std::string absolute_path;
+ if (!is_directory_list) {
+ // If the file exists, try to add it
+ if (FileSysUtilsIsRegularFile(search_path)) {
+ FileSysUtilsGetAbsolutePath(search_path, absolute_path);
+ AddIfJson(absolute_path, manifest_files);
+ }
+ } else {
+ std::vector<std::string> files;
+ if (FileSysUtilsFindFilesInPath(search_path, files)) {
+ for (std::string &cur_file : files) {
+ std::string relative_path;
+ FileSysUtilsCombinePaths(search_path, cur_file, relative_path);
+ if (!FileSysUtilsGetAbsolutePath(relative_path, absolute_path)) {
+ continue;
+ }
+ AddIfJson(absolute_path, manifest_files);
+ }
+ }
+ }
+ }
+}
+
+// Add all manifest files in the provided paths to the manifest_files list. If search_path
+// is made up of directory listings (versus direct manifest file names) search each path for
+// any manifest files.
+static void AddFilesInPath(const std::string &search_path, bool is_directory_list, std::vector<std::string> &manifest_files) {
+ std::size_t last_found = 0;
+ std::size_t found = search_path.find_first_of(PATH_SEPARATOR);
+ std::string cur_search;
+
+ // Handle any path listings in the string (separated by the appropriate path separator)
+ while (found != std::string::npos) {
+ // substr takes a start index and length.
+ std::size_t length = found - last_found;
+ cur_search = search_path.substr(last_found, length);
+
+ CheckAllFilesInThePath(cur_search, is_directory_list, manifest_files);
+
+ // This works around issue if multiple path separator follow each other directly.
+ last_found = found;
+ while (found == last_found) {
+ last_found = found + 1;
+ found = search_path.find_first_of(PATH_SEPARATOR, last_found);
+ }
+ }
+
+ // If there's something remaining in the string, copy it over
+ if (last_found < search_path.size()) {
+ cur_search = search_path.substr(last_found);
+ CheckAllFilesInThePath(cur_search, is_directory_list, manifest_files);
+ }
+}
+
+// Copy all paths listed in the cur_path string into output_path and append the appropriate relative_path onto the end of each.
+static void CopyIncludedPaths(bool is_directory_list, const std::string &cur_path, const std::string &relative_path,
+ std::string &output_path) {
+ if (!cur_path.empty()) {
+ std::size_t last_found = 0;
+ std::size_t found = cur_path.find_first_of(PATH_SEPARATOR);
+
+ // Handle any path listings in the string (separated by the appropriate path separator)
+ while (found != std::string::npos) {
+ std::size_t length = found - last_found;
+ output_path += cur_path.substr(last_found, length);
+ if (is_directory_list && (cur_path[found - 1] != '\\' && cur_path[found - 1] != '/')) {
+ output_path += DIRECTORY_SYMBOL;
+ }
+ output_path += relative_path;
+ output_path += PATH_SEPARATOR;
+
+ last_found = found;
+ found = cur_path.find_first_of(PATH_SEPARATOR, found + 1);
+ }
+
+ // If there's something remaining in the string, copy it over
+ size_t last_char = cur_path.size() - 1;
+ if (last_found != last_char) {
+ output_path += cur_path.substr(last_found);
+ if (is_directory_list && (cur_path[last_char] != '\\' && cur_path[last_char] != '/')) {
+ output_path += DIRECTORY_SYMBOL;
+ }
+ output_path += relative_path;
+ output_path += PATH_SEPARATOR;
+ }
+ }
+}
+
+// Look for data files in the provided paths, but first check the environment override to determine if we should use that instead.
+static void ReadDataFilesInSearchPaths(const std::string &override_env_var, const std::string &relative_path, bool &override_active,
+ std::vector<std::string> &manifest_files) {
+ std::string override_path;
+ std::string search_path;
+
+ if (!override_env_var.empty()) {
+ bool permit_override = true;
+#ifndef XR_OS_WINDOWS
+ if (geteuid() != getuid() || getegid() != getgid()) {
+ // Don't allow setuid apps to use the env var
+ permit_override = false;
+ }
+#endif
+ if (permit_override) {
+ override_path = PlatformUtilsGetSecureEnv(override_env_var.c_str());
+ }
+ }
+
+ if (!override_path.empty()) {
+ CopyIncludedPaths(true, override_path, "", search_path);
+ override_active = true;
+ } else {
+ override_active = false;
+#if !defined(XR_OS_WINDOWS) && !defined(XR_OS_ANDROID)
+ const char home_additional[] = ".local/share/";
+
+ // Determine how much space is needed to generate the full search path
+ // for the current manifest files.
+ std::string xdg_conf_dirs = PlatformUtilsGetSecureEnv("XDG_CONFIG_DIRS");
+ std::string xdg_data_dirs = PlatformUtilsGetSecureEnv("XDG_DATA_DIRS");
+ std::string xdg_data_home = PlatformUtilsGetSecureEnv("XDG_DATA_HOME");
+ std::string home = PlatformUtilsGetSecureEnv("HOME");
+
+ if (xdg_conf_dirs.empty()) {
+ CopyIncludedPaths(true, FALLBACK_CONFIG_DIRS, relative_path, search_path);
+ } else {
+ CopyIncludedPaths(true, xdg_conf_dirs, relative_path, search_path);
+ }
+
+ CopyIncludedPaths(true, SYSCONFDIR, relative_path, search_path);
+#if defined(EXTRASYSCONFDIR)
+ CopyIncludedPaths(true, EXTRASYSCONFDIR, relative_path, search_path);
+#endif
+
+ if (xdg_data_dirs.empty()) {
+ CopyIncludedPaths(true, FALLBACK_DATA_DIRS, relative_path, search_path);
+ } else {
+ CopyIncludedPaths(true, xdg_data_dirs, relative_path, search_path);
+ }
+
+ if (!xdg_data_home.empty()) {
+ CopyIncludedPaths(true, xdg_data_home, relative_path, search_path);
+ } else if (!home.empty()) {
+ std::string relative_home_path = home_additional;
+ relative_home_path += relative_path;
+ CopyIncludedPaths(true, home, relative_home_path, search_path);
+ }
+#else
+ (void)relative_path;
+#endif
+ }
+
+ // Now, parse the paths and add any manifest files found in them.
+ AddFilesInPath(search_path, true, manifest_files);
+}
+
+#ifdef XR_OS_LINUX
+
+// Get an XDG environment variable with a $HOME-relative default
+static std::string GetXDGEnvHome(const char *name, const char *fallback_path) {
+ std::string result = PlatformUtilsGetSecureEnv(name);
+ if (!result.empty()) {
+ return result;
+ }
+ result = PlatformUtilsGetSecureEnv("HOME");
+ if (result.empty()) {
+ return result;
+ }
+ result += "/";
+ result += fallback_path;
+ return result;
+}
+
+// Get an XDG environment variable with absolute defaults
+static std::string GetXDGEnvAbsolute(const char *name, const char *fallback_paths) {
+ std::string result = PlatformUtilsGetSecureEnv(name);
+ if (!result.empty()) {
+ return result;
+ }
+ return fallback_paths;
+}
+
+// Return the first instance of relative_path occurring in an XDG config dir according to standard
+// precedence order.
+static bool FindXDGConfigFile(const std::string &relative_path, std::string &out) {
+ out = GetXDGEnvHome("XDG_CONFIG_HOME", ".config");
+ if (!out.empty()) {
+ out += "/";
+ out += relative_path;
+
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in XDG_CONFIG_HOME: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+ }
+
+ std::istringstream iss(GetXDGEnvAbsolute("XDG_CONFIG_DIRS", FALLBACK_CONFIG_DIRS));
+ std::string path;
+ while (std::getline(iss, path, PATH_SEPARATOR)) {
+ if (path.empty()) {
+ continue;
+ }
+ out = path;
+ out += "/";
+ out += relative_path;
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in an entry of XDG_CONFIG_DIRS: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+ }
+
+ out = SYSCONFDIR;
+ out += "/";
+ out += relative_path;
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in compiled-in SYSCONFDIR: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+
+#if defined(EXTRASYSCONFDIR)
+ out = EXTRASYSCONFDIR;
+ out += "/";
+ out += relative_path;
+ LoaderLogger::LogInfoMessage("", "Looking for " + relative_path + " in compiled-in EXTRASYSCONFDIR: " + out);
+ if (FileSysUtilsPathExists(out)) {
+ return true;
+ }
+#endif
+
+ out.clear();
+ return false;
+}
+
+#endif
+
+#ifdef XR_OS_WINDOWS
+
+// Look for runtime data files in the provided paths, but first check the environment override to determine
+// if we should use that instead.
+static void ReadRuntimeDataFilesInRegistry(const std::string &runtime_registry_location,
+ const std::string &default_runtime_value_name,
+ std::vector<std::string> &manifest_files) {
+ HKEY hkey;
+ DWORD access_flags;
+ wchar_t value_w[1024];
+ DWORD value_size_w = sizeof(value_w); // byte size of the buffer.
+
+ // Generate the full registry location for the registry information
+ std::string full_registry_location = OPENXR_REGISTRY_LOCATION;
+ full_registry_location += std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION));
+ full_registry_location += runtime_registry_location;
+
+ const std::wstring full_registry_location_w = utf8_to_wide(full_registry_location);
+ const std::wstring default_runtime_value_name_w = utf8_to_wide(default_runtime_value_name);
+
+ // Use 64 bit regkey for 64bit application, and use 32 bit regkey in WOW for 32bit application.
+ access_flags = KEY_QUERY_VALUE;
+ LONG open_value = RegOpenKeyExW(HKEY_LOCAL_MACHINE, full_registry_location_w.c_str(), 0, access_flags, &hkey);
+
+ if (ERROR_SUCCESS != open_value) {
+ LoaderLogger::LogWarningMessage("",
+ "ReadRuntimeDataFilesInRegistry - failed to open registry key " + full_registry_location);
+ } else if (ERROR_SUCCESS != RegGetValueW(hkey, nullptr, default_runtime_value_name_w.c_str(),
+ RRF_RT_REG_SZ | REG_EXPAND_SZ | RRF_ZEROONFAILURE, NULL,
+ reinterpret_cast<LPBYTE>(&value_w), &value_size_w)) {
+ LoaderLogger::LogWarningMessage(
+ "", "ReadRuntimeDataFilesInRegistry - failed to read registry value " + default_runtime_value_name);
+ } else {
+ AddFilesInPath(wide_to_utf8(value_w), false, manifest_files);
+ }
+}
+
+// Look for layer data files in the provided paths, but first check the environment override to determine
+// if we should use that instead.
+static void ReadLayerDataFilesInRegistry(const std::string &registry_location, std::vector<std::string> &manifest_files) {
+ const std::wstring full_registry_location_w =
+ utf8_to_wide(OPENXR_REGISTRY_LOCATION + std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION)) + registry_location);
+
+ auto ReadLayerDataFilesInHive = [&](HKEY hive) {
+ HKEY hkey;
+ LONG open_value = RegOpenKeyExW(hive, full_registry_location_w.c_str(), 0, KEY_QUERY_VALUE, &hkey);
+ if (ERROR_SUCCESS != open_value) {
+ return false;
+ }
+
+ wchar_t name_w[1024]{};
+ LONG rtn_value;
+ DWORD name_size = 1023;
+ DWORD value;
+ DWORD value_size = sizeof(value);
+ DWORD key_index = 0;
+ while (ERROR_SUCCESS ==
+ (rtn_value = RegEnumValueW(hkey, key_index++, name_w, &name_size, NULL, NULL, (LPBYTE)&value, &value_size))) {
+ if (value_size == sizeof(value) && value == 0) {
+ const std::string filename = wide_to_utf8(name_w);
+ AddFilesInPath(filename, false, manifest_files);
+ }
+ // Reset some items for the next loop
+ name_size = 1023;
+ }
+
+ RegCloseKey(hkey);
+
+ return true;
+ };
+
+ // Do not allow high integrity processes to act on data that can be controlled by medium integrity processes.
+ const bool readFromCurrentUser = !IsHighIntegrityLevel();
+
+ bool found = ReadLayerDataFilesInHive(HKEY_LOCAL_MACHINE);
+ if (readFromCurrentUser) {
+ found |= ReadLayerDataFilesInHive(HKEY_CURRENT_USER);
+ }
+
+ if (!found) {
+ std::string warning_message = "ReadLayerDataFilesInRegistry - failed to read registry location ";
+ warning_message += registry_location;
+ warning_message += (readFromCurrentUser ? " in either HKEY_LOCAL_MACHINE or HKEY_CURRENT_USER" : " in HKEY_LOCAL_MACHINE");
+ LoaderLogger::LogWarningMessage("", warning_message);
+ }
+}
+
+#endif // XR_OS_WINDOWS
+
+ManifestFile::ManifestFile(ManifestFileType type, const std::string &filename, const std::string &library_path)
+ : _filename(filename), _type(type), _library_path(library_path) {}
+
+bool ManifestFile::IsValidJson(const Json::Value &root_node, JsonVersion &version) {
+ if (root_node["file_format_version"].isNull() || !root_node["file_format_version"].isString()) {
+ LoaderLogger::LogErrorMessage("", "ManifestFile::IsValidJson - JSON file missing \"file_format_version\"");
+ return false;
+ }
+ std::string file_format = root_node["file_format_version"].asString();
+ const int num_fields = sscanf(file_format.c_str(), "%u.%u.%u", &version.major, &version.minor, &version.patch);
+
+ // Only version 1.0.0 is defined currently. Eventually we may have more version, but
+ // some of the versions may only be valid for layers or runtimes specifically.
+ if (num_fields != 3 || version.major != 1 || version.minor != 0 || version.patch != 0) {
+ std::ostringstream error_ss;
+ error_ss << "ManifestFile::IsValidJson - JSON \"file_format_version\" " << version.major << "." << version.minor << "."
+ << version.patch << " is not supported";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return false;
+ }
+
+ return true;
+}
+
+static void GetExtensionProperties(const std::vector<ExtensionListing> &extensions, std::vector<XrExtensionProperties> &props) {
+ for (const auto &ext : extensions) {
+ auto it =
+ std::find_if(props.begin(), props.end(), [&](XrExtensionProperties &prop) { return prop.extensionName == ext.name; });
+ if (it != props.end()) {
+ it->extensionVersion = std::max(it->extensionVersion, ext.extension_version);
+ } else {
+ XrExtensionProperties prop = {};
+ prop.type = XR_TYPE_EXTENSION_PROPERTIES;
+ prop.next = nullptr;
+ strncpy(prop.extensionName, ext.name.c_str(), XR_MAX_EXTENSION_NAME_SIZE - 1);
+ prop.extensionName[XR_MAX_EXTENSION_NAME_SIZE - 1] = '\0';
+ prop.extensionVersion = ext.extension_version;
+ props.push_back(prop);
+ }
+ }
+}
+
+// Return any instance extensions found in the manifest files in the proper form for
+// OpenXR (XrExtensionProperties).
+void ManifestFile::GetInstanceExtensionProperties(std::vector<XrExtensionProperties> &props) {
+ GetExtensionProperties(_instance_extensions, props);
+}
+
+const std::string &ManifestFile::GetFunctionName(const std::string &func_name) const {
+ if (!_functions_renamed.empty()) {
+ auto found = _functions_renamed.find(func_name);
+ if (found != _functions_renamed.end()) {
+ return found->second;
+ }
+ }
+ return func_name;
+}
+
+RuntimeManifestFile::RuntimeManifestFile(const std::string &filename, const std::string &library_path)
+ : ManifestFile(MANIFEST_TYPE_RUNTIME, filename, library_path) {}
+
+static void ParseExtension(Json::Value const &ext, std::vector<ExtensionListing> &extensions) {
+ Json::Value ext_name = ext["name"];
+ Json::Value ext_version = ext["extension_version"];
+
+ // Allow "extension_version" as a String or a UInt to maintain backwards compatibility, even though it should be a String.
+ // Internal Issue 1411: https://gitlab.khronos.org/openxr/openxr/-/issues/1411
+ // Internal MR !1867: https://gitlab.khronos.org/openxr/openxr/-/merge_requests/1867
+ if (ext_name.isString() && (ext_version.isString() || ext_version.isUInt())) {
+ ExtensionListing ext_listing = {};
+ ext_listing.name = ext_name.asString();
+ if (ext_version.isUInt()) {
+ ext_listing.extension_version = ext_version.asUInt();
+ } else {
+ ext_listing.extension_version = atoi(ext_version.asString().c_str());
+ }
+ extensions.push_back(ext_listing);
+ }
+}
+
+void ManifestFile::ParseCommon(Json::Value const &root_node) {
+ const Json::Value &inst_exts = root_node["instance_extensions"];
+ if (!inst_exts.isNull() && inst_exts.isArray()) {
+ for (const auto &ext : inst_exts) {
+ ParseExtension(ext, _instance_extensions);
+ }
+ }
+ const Json::Value &funcs_renamed = root_node["functions"];
+ if (!funcs_renamed.isNull() && !funcs_renamed.empty()) {
+ for (Json::ValueConstIterator func_it = funcs_renamed.begin(); func_it != funcs_renamed.end(); ++func_it) {
+ if (!(*func_it).isString()) {
+ LoaderLogger::LogWarningMessage(
+ "", "ManifestFile::ParseCommon " + _filename + " \"functions\" section contains non-string values.");
+ continue;
+ }
+ std::string original_name = func_it.key().asString();
+ std::string new_name = (*func_it).asString();
+ _functions_renamed.emplace(original_name, new_name);
+ }
+ }
+}
+
+void RuntimeManifestFile::CreateIfValid(std::string const &filename,
+ std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files) {
+ std::ifstream json_stream(filename, std::ifstream::in);
+
+ LoaderLogger::LogInfoMessage("", "RuntimeManifestFile::CreateIfValid - attempting to load " + filename);
+ std::ostringstream error_ss("RuntimeManifestFile::CreateIfValid ");
+ if (!json_stream.is_open()) {
+ error_ss << "failed to open " << filename << ". Does it exist?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ Json::CharReaderBuilder builder;
+ std::string errors;
+ Json::Value root_node = Json::nullValue;
+ if (!Json::parseFromStream(builder, json_stream, &root_node, &errors) || !root_node.isObject()) {
+ error_ss << "failed to parse " << filename << ".";
+ if (!errors.empty()) {
+ error_ss << " (Error message: " << errors << ")";
+ }
+ error_ss << " Is it a valid runtime manifest file?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ CreateIfValid(root_node, filename, manifest_files);
+}
+
+void RuntimeManifestFile::CreateIfValid(const Json::Value &root_node, const std::string &filename,
+ std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files) {
+ std::ostringstream error_ss("RuntimeManifestFile::CreateIfValid ");
+ JsonVersion file_version = {};
+ if (!ManifestFile::IsValidJson(root_node, file_version)) {
+ error_ss << "isValidJson indicates " << filename << " is not a valid manifest file.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ const Json::Value &runtime_root_node = root_node["runtime"];
+ // The Runtime manifest file needs the "runtime" root as well as a sub-node for "library_path". If any of those aren't there,
+ // fail.
+ if (runtime_root_node.isNull() || runtime_root_node["library_path"].isNull() || !runtime_root_node["library_path"].isString()) {
+ error_ss << filename << " is missing required fields. Verify all proper fields exist.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ std::string lib_path = runtime_root_node["library_path"].asString();
+
+ // If the library_path variable has no directory symbol, it's just a file name and should be accessible on the
+ // global library path.
+ if (lib_path.find('\\') != std::string::npos || lib_path.find('/') != std::string::npos) {
+ // If the library_path is an absolute path, just use that if it exists
+ if (FileSysUtilsIsAbsolutePath(lib_path)) {
+ if (!FileSysUtilsPathExists(lib_path)) {
+ error_ss << filename << " library " << lib_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ } else {
+ // Otherwise, treat the library path as a relative path based on the JSON file.
+ std::string canonical_path;
+ std::string combined_path;
+ std::string file_parent;
+ // Search relative to the real manifest file, not relative to the symlink
+ if (!FileSysUtilsGetCanonicalPath(filename, canonical_path)) {
+ // Give relative to the non-canonical path a chance
+ canonical_path = filename;
+ }
+ if (!FileSysUtilsGetParentPath(canonical_path, file_parent) ||
+ !FileSysUtilsCombinePaths(file_parent, lib_path, combined_path) || !FileSysUtilsPathExists(combined_path)) {
+ error_ss << filename << " library " << combined_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ lib_path = combined_path;
+ }
+ }
+
+ // Add this runtime manifest file
+ manifest_files.emplace_back(new RuntimeManifestFile(filename, lib_path));
+
+ // Add any extensions to it after the fact.
+ // Handle any renamed functions
+ manifest_files.back()->ParseCommon(runtime_root_node);
+}
+
+// Find all manifest files in the appropriate search paths/registries for the given type.
+XrResult RuntimeManifestFile::FindManifestFiles(std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files) {
+ XrResult result = XR_SUCCESS;
+ std::string filename = PlatformUtilsGetSecureEnv(OPENXR_RUNTIME_JSON_ENV_VAR);
+ if (!filename.empty()) {
+ LoaderLogger::LogInfoMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - using environment variable override runtime file " + filename);
+ } else {
+#ifdef XR_OS_WINDOWS
+ std::vector<std::string> filenames;
+ ReadRuntimeDataFilesInRegistry("", "ActiveRuntime", filenames);
+ if (filenames.size() == 0) {
+ LoaderLogger::LogErrorMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - failed to find active runtime file in registry");
+ return XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+ if (filenames.size() > 1) {
+ LoaderLogger::LogWarningMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - found too many default runtime files in registry");
+ }
+ filename = filenames[0];
+ LoaderLogger::LogInfoMessage("",
+ "RuntimeManifestFile::FindManifestFiles - using registry-specified runtime file " + filename);
+#elif defined(XR_OS_LINUX)
+ const std::string relative_path =
+ "openxr/" + std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION)) + "/active_runtime.json";
+ if (!FindXDGConfigFile(relative_path, filename)) {
+ LoaderLogger::LogErrorMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - failed to determine active runtime file path for this environment");
+ return XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+#else
+
+#if defined(XR_KHR_LOADER_INIT_SUPPORT)
+ Json::Value virtualManifest;
+ result = GetPlatformRuntimeVirtualManifest(virtualManifest);
+ if (XR_SUCCESS == result) {
+ RuntimeManifestFile::CreateIfValid(virtualManifest, "", manifest_files);
+ return result;
+ }
+#endif // defined(XR_KHR_LOADER_INIT_SUPPORT)
+ if (!PlatformGetGlobalRuntimeFileName(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION), filename)) {
+ LoaderLogger::LogErrorMessage(
+ "", "RuntimeManifestFile::FindManifestFiles - failed to determine active runtime file path for this environment");
+ return XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+ result = XR_SUCCESS;
+ LoaderLogger::LogInfoMessage("", "RuntimeManifestFile::FindManifestFiles - using global runtime file " + filename);
+#endif
+ }
+ RuntimeManifestFile::CreateIfValid(filename, manifest_files);
+
+ return result;
+}
+
+ApiLayerManifestFile::ApiLayerManifestFile(ManifestFileType type, const std::string &filename, const std::string &layer_name,
+ const std::string &description, const JsonVersion &api_version,
+ const uint32_t &implementation_version, const std::string &library_path)
+ : ManifestFile(type, filename, library_path),
+ _api_version(api_version),
+ _layer_name(layer_name),
+ _description(description),
+ _implementation_version(implementation_version) {}
+
+void ApiLayerManifestFile::CreateIfValid(ManifestFileType type, const std::string &filename,
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files) {
+ std::ifstream json_stream(filename, std::ifstream::in);
+
+ std::ostringstream error_ss("ApiLayerManifestFile::CreateIfValid ");
+ if (!json_stream.is_open()) {
+ error_ss << "failed to open " << filename << ". Does it exist?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ Json::CharReaderBuilder builder;
+ std::string errors;
+ Json::Value root_node = Json::nullValue;
+ if (!Json::parseFromStream(builder, json_stream, &root_node, &errors) || !root_node.isObject()) {
+ error_ss << "failed to parse " << filename << ".";
+ if (!errors.empty()) {
+ error_ss << " (Error message: " << errors << ")";
+ }
+ error_ss << " Is it a valid layer manifest file?";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ JsonVersion file_version = {};
+ if (!ManifestFile::IsValidJson(root_node, file_version)) {
+ error_ss << "isValidJson indicates " << filename << " is not a valid manifest file.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+
+ Json::Value layer_root_node = root_node["api_layer"];
+
+ // The API Layer manifest file needs the "api_layer" root as well as other sub-nodes.
+ // If any of those aren't there, fail.
+ if (layer_root_node.isNull() || layer_root_node["name"].isNull() || !layer_root_node["name"].isString() ||
+ layer_root_node["api_version"].isNull() || !layer_root_node["api_version"].isString() ||
+ layer_root_node["library_path"].isNull() || !layer_root_node["library_path"].isString() ||
+ layer_root_node["implementation_version"].isNull() || !layer_root_node["implementation_version"].isString()) {
+ error_ss << filename << " is missing required fields. Verify all proper fields exist.";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ if (MANIFEST_TYPE_IMPLICIT_API_LAYER == type) {
+ bool enabled = true;
+ // Implicit layers require the disable environment variable.
+ if (layer_root_node["disable_environment"].isNull() || !layer_root_node["disable_environment"].isString()) {
+ error_ss << "Implicit layer " << filename << " is missing \"disable_environment\"";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ // Check if there's an enable environment variable provided
+ if (!layer_root_node["enable_environment"].isNull() && layer_root_node["enable_environment"].isString()) {
+ std::string env_var = layer_root_node["enable_environment"].asString();
+ // If it's not set in the environment, disable the layer
+ if (!PlatformUtilsGetEnvSet(env_var.c_str())) {
+ enabled = false;
+ }
+ }
+ // Check for the disable environment variable, which must be provided in the JSON
+ std::string env_var = layer_root_node["disable_environment"].asString();
+ // If the env var is set, disable the layer. Disable env var overrides enable above
+ if (PlatformUtilsGetEnvSet(env_var.c_str())) {
+ enabled = false;
+ }
+
+ // Not enabled, so pretend like it isn't even there.
+ if (!enabled) {
+ error_ss << "Implicit layer " << filename << " is disabled";
+ LoaderLogger::LogInfoMessage("", error_ss.str());
+ return;
+ }
+ }
+ std::string layer_name = layer_root_node["name"].asString();
+ std::string api_version_string = layer_root_node["api_version"].asString();
+ JsonVersion api_version = {};
+ const int num_fields = sscanf(api_version_string.c_str(), "%u.%u", &api_version.major, &api_version.minor);
+ api_version.patch = 0;
+
+ if ((num_fields != 2) || (api_version.major == 0 && api_version.minor == 0) ||
+ api_version.major > XR_VERSION_MAJOR(XR_CURRENT_API_VERSION)) {
+ error_ss << "layer " << filename << " has invalid API Version. Skipping layer.";
+ LoaderLogger::LogWarningMessage("", error_ss.str());
+ return;
+ }
+
+ uint32_t implementation_version = atoi(layer_root_node["implementation_version"].asString().c_str());
+ std::string library_path = layer_root_node["library_path"].asString();
+
+ // If the library_path variable has no directory symbol, it's just a file name and should be accessible on the
+ // global library path.
+ if (library_path.find('\\') != std::string::npos || library_path.find('/') != std::string::npos) {
+ // If the library_path is an absolute path, just use that if it exists
+ if (FileSysUtilsIsAbsolutePath(library_path)) {
+ if (!FileSysUtilsPathExists(library_path)) {
+ error_ss << filename << " library " << library_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ } else {
+ // Otherwise, treat the library path as a relative path based on the JSON file.
+ std::string combined_path;
+ std::string file_parent;
+ if (!FileSysUtilsGetParentPath(filename, file_parent) ||
+ !FileSysUtilsCombinePaths(file_parent, library_path, combined_path) || !FileSysUtilsPathExists(combined_path)) {
+ error_ss << filename << " library " << combined_path << " does not appear to exist";
+ LoaderLogger::LogErrorMessage("", error_ss.str());
+ return;
+ }
+ library_path = combined_path;
+ }
+ }
+
+ std::string description;
+ if (!layer_root_node["description"].isNull() && layer_root_node["description"].isString()) {
+ description = layer_root_node["description"].asString();
+ }
+
+ // Add this layer manifest file
+ manifest_files.emplace_back(
+ new ApiLayerManifestFile(type, filename, layer_name, description, api_version, implementation_version, library_path));
+
+ // Add any extensions to it after the fact.
+ manifest_files.back()->ParseCommon(layer_root_node);
+}
+
+void ApiLayerManifestFile::PopulateApiLayerProperties(XrApiLayerProperties &props) const {
+ props.layerVersion = _implementation_version;
+ props.specVersion = XR_MAKE_VERSION(_api_version.major, _api_version.minor, _api_version.patch);
+ strncpy(props.layerName, _layer_name.c_str(), XR_MAX_API_LAYER_NAME_SIZE - 1);
+ if (_layer_name.size() >= XR_MAX_API_LAYER_NAME_SIZE - 1) {
+ props.layerName[XR_MAX_API_LAYER_NAME_SIZE - 1] = '\0';
+ }
+ strncpy(props.description, _description.c_str(), XR_MAX_API_LAYER_DESCRIPTION_SIZE - 1);
+ if (_description.size() >= XR_MAX_API_LAYER_DESCRIPTION_SIZE - 1) {
+ props.description[XR_MAX_API_LAYER_DESCRIPTION_SIZE - 1] = '\0';
+ }
+}
+
+// Find all layer manifest files in the appropriate search paths/registries for the given type.
+XrResult ApiLayerManifestFile::FindManifestFiles(ManifestFileType type,
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files) {
+ std::string relative_path;
+ std::string override_env_var;
+ std::string registry_location;
+
+ // Add the appropriate top-level folders for the relative path. These should be
+ // the string "openxr/" followed by the API major version as a string.
+ relative_path = OPENXR_RELATIVE_PATH;
+ relative_path += std::to_string(XR_VERSION_MAJOR(XR_CURRENT_API_VERSION));
+
+ switch (type) {
+ case MANIFEST_TYPE_IMPLICIT_API_LAYER:
+ relative_path += OPENXR_IMPLICIT_API_LAYER_RELATIVE_PATH;
+ override_env_var = "";
+#ifdef XR_OS_WINDOWS
+ registry_location = OPENXR_IMPLICIT_API_LAYER_REGISTRY_LOCATION;
+#endif
+ break;
+ case MANIFEST_TYPE_EXPLICIT_API_LAYER:
+ relative_path += OPENXR_EXPLICIT_API_LAYER_RELATIVE_PATH;
+ override_env_var = OPENXR_API_LAYER_PATH_ENV_VAR;
+#ifdef XR_OS_WINDOWS
+ registry_location = OPENXR_EXPLICIT_API_LAYER_REGISTRY_LOCATION;
+#endif
+ break;
+ default:
+ LoaderLogger::LogErrorMessage("", "ApiLayerManifestFile::FindManifestFiles - unknown manifest file requested");
+ return XR_ERROR_FILE_ACCESS_ERROR;
+ }
+
+ bool override_active = false;
+ std::vector<std::string> filenames;
+ ReadDataFilesInSearchPaths(override_env_var, relative_path, override_active, filenames);
+
+#ifdef XR_OS_WINDOWS
+ // Read the registry if the override wasn't active.
+ if (!override_active) {
+ ReadLayerDataFilesInRegistry(registry_location, filenames);
+ }
+#endif
+
+ for (std::string &cur_file : filenames) {
+ ApiLayerManifestFile::CreateIfValid(type, cur_file, manifest_files);
+ }
+
+ return XR_SUCCESS;
+}
diff --git a/thirdparty/openxr/src/loader/manifest_file.hpp b/thirdparty/openxr/src/loader/manifest_file.hpp
new file mode 100644
index 0000000000..0d04886d84
--- /dev/null
+++ b/thirdparty/openxr/src/loader/manifest_file.hpp
@@ -0,0 +1,103 @@
+// Copyright (c) 2017 The Khronos Group Inc.
+// Copyright (c) 2017 Valve Corporation
+// Copyright (c) 2017 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include <openxr/openxr.h>
+
+#include <memory>
+#include <string>
+#include <vector>
+#include <unordered_map>
+
+namespace Json {
+class Value;
+}
+
+enum ManifestFileType {
+ MANIFEST_TYPE_UNDEFINED = 0,
+ MANIFEST_TYPE_RUNTIME,
+ MANIFEST_TYPE_IMPLICIT_API_LAYER,
+ MANIFEST_TYPE_EXPLICIT_API_LAYER,
+};
+
+struct JsonVersion {
+ uint32_t major;
+ uint32_t minor;
+ uint32_t patch;
+};
+
+struct ExtensionListing {
+ std::string name;
+ uint32_t extension_version;
+};
+
+// ManifestFile class -
+// Base class responsible for finding and parsing manifest files.
+class ManifestFile {
+ public:
+ // Non-copyable
+ ManifestFile(const ManifestFile &) = delete;
+ ManifestFile &operator=(const ManifestFile &) = delete;
+
+ ManifestFileType Type() const { return _type; }
+ const std::string &Filename() const { return _filename; }
+ const std::string &LibraryPath() const { return _library_path; }
+ void GetInstanceExtensionProperties(std::vector<XrExtensionProperties> &props);
+ const std::string &GetFunctionName(const std::string &func_name) const;
+
+ protected:
+ ManifestFile(ManifestFileType type, const std::string &filename, const std::string &library_path);
+ void ParseCommon(Json::Value const &root_node);
+ static bool IsValidJson(const Json::Value &root, JsonVersion &version);
+
+ private:
+ std::string _filename;
+ ManifestFileType _type;
+ std::string _library_path;
+ std::vector<ExtensionListing> _instance_extensions;
+ std::unordered_map<std::string, std::string> _functions_renamed;
+};
+
+// RuntimeManifestFile class -
+// Responsible for finding and parsing Runtime-specific manifest files.
+class RuntimeManifestFile : public ManifestFile {
+ public:
+ // Factory method
+ static XrResult FindManifestFiles(std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files);
+
+ private:
+ RuntimeManifestFile(const std::string &filename, const std::string &library_path);
+ static void CreateIfValid(const std::string &filename, std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files);
+ static void CreateIfValid(const Json::Value &root_node, const std::string &filename,
+ std::vector<std::unique_ptr<RuntimeManifestFile>> &manifest_files);
+};
+
+// ApiLayerManifestFile class -
+// Responsible for finding and parsing API Layer-specific manifest files.
+class ApiLayerManifestFile : public ManifestFile {
+ public:
+ // Factory method
+ static XrResult FindManifestFiles(ManifestFileType type, std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files);
+
+ const std::string &LayerName() const { return _layer_name; }
+ void PopulateApiLayerProperties(XrApiLayerProperties &props) const;
+
+ private:
+ ApiLayerManifestFile(ManifestFileType type, const std::string &filename, const std::string &layer_name,
+ const std::string &description, const JsonVersion &api_version, const uint32_t &implementation_version,
+ const std::string &library_path);
+ static void CreateIfValid(ManifestFileType type, const std::string &filename,
+ std::vector<std::unique_ptr<ApiLayerManifestFile>> &manifest_files);
+
+ JsonVersion _api_version;
+ std::string _layer_name;
+ std::string _description;
+ uint32_t _implementation_version;
+};
diff --git a/thirdparty/openxr/src/loader/runtime_interface.cpp b/thirdparty/openxr/src/loader/runtime_interface.cpp
new file mode 100644
index 0000000000..1a35ba013a
--- /dev/null
+++ b/thirdparty/openxr/src/loader/runtime_interface.cpp
@@ -0,0 +1,493 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#include "runtime_interface.hpp"
+
+#include "manifest_file.hpp"
+#include "loader_interfaces.h"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "xr_generated_dispatch_table.h"
+
+#include <openxr/openxr.h>
+
+#include <cstring>
+#include <memory>
+#include <mutex>
+#include <string>
+#include <unordered_map>
+#include <utility>
+#include <vector>
+
+#ifdef XR_USE_PLATFORM_ANDROID
+#include "android_utilities.h"
+#include <json/value.h>
+#endif // XR_USE_PLATFORM_ANDROID
+
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+namespace {
+/*!
+ * Stores a copy of the data passed to the xrInitializeLoaderKHR function in a singleton.
+ */
+class LoaderInitData {
+ public:
+ /*!
+ * Singleton accessor.
+ */
+ static LoaderInitData& instance() {
+ static LoaderInitData obj;
+ return obj;
+ }
+
+#ifdef XR_USE_PLATFORM_ANDROID
+ /*!
+ * Type alias for the platform-specific structure type.
+ */
+ using StructType = XrLoaderInitInfoAndroidKHR;
+#endif
+
+ /*!
+ * Get our copy of the data, casted to pass to the runtime's matching method.
+ */
+ const XrLoaderInitInfoBaseHeaderKHR* getParam() const { return reinterpret_cast<const XrLoaderInitInfoBaseHeaderKHR*>(&_data); }
+
+ /*!
+ * Get the data via its real structure type.
+ */
+ const StructType& getData() const { return _data; }
+
+ /*!
+ * Has this been correctly initialized?
+ */
+ bool initialized() const noexcept { return _initialized; }
+
+ /*!
+ * Initialize loader data - called by InitializeLoader() and thus ultimately by the loader's xrInitializeLoaderKHR
+ * implementation. Each platform that needs this extension will provide an implementation of this.
+ */
+ XrResult initialize(const XrLoaderInitInfoBaseHeaderKHR* info);
+
+ private:
+ //! Private constructor, forces use of singleton accessor.
+ LoaderInitData() = default;
+ //! Platform-specific init data
+ StructType _data = {};
+ //! Flag for indicating whether _data is valid.
+ bool _initialized = false;
+};
+
+#ifdef XR_USE_PLATFORM_ANDROID
+// Check and copy the Android-specific init data.
+XrResult LoaderInitData::initialize(const XrLoaderInitInfoBaseHeaderKHR* info) {
+ if (info->type != XR_TYPE_LOADER_INIT_INFO_ANDROID_KHR) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ auto cast_info = reinterpret_cast<XrLoaderInitInfoAndroidKHR const*>(info);
+
+ if (cast_info->applicationVM == nullptr) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ if (cast_info->applicationContext == nullptr) {
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ _data = *cast_info;
+ jni::init((jni::JavaVM*)_data.applicationVM);
+ _data.next = nullptr;
+ _initialized = true;
+ return XR_SUCCESS;
+}
+#endif // XR_USE_PLATFORM_ANDROID
+} // namespace
+
+XrResult InitializeLoader(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo) {
+ return LoaderInitData::instance().initialize(loaderInitInfo);
+}
+
+#endif // XR_KHR_LOADER_INIT_SUPPORT
+
+#ifdef XR_USE_PLATFORM_ANDROID
+XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest) {
+ using wrap::android::content::Context;
+ auto& initData = LoaderInitData::instance();
+ if (!initData.initialized()) {
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+ auto context = Context(reinterpret_cast<jobject>(initData.getData().applicationContext));
+ if (context.isNull()) {
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+ Json::Value virtualManifest;
+ if (0 != openxr_android::getActiveRuntimeVirtualManifest(context, virtualManifest)) {
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+ out_manifest = virtualManifest;
+ return XR_SUCCESS;
+}
+#endif // XR_USE_PLATFORM_ANDROID
+
+XrResult RuntimeInterface::TryLoadingSingleRuntime(const std::string& openxr_command,
+ std::unique_ptr<RuntimeManifestFile>& manifest_file) {
+ LoaderPlatformLibraryHandle runtime_library = LoaderPlatformLibraryOpen(manifest_file->LibraryPath());
+ if (nullptr == runtime_library) {
+ std::string library_message = LoaderPlatformLibraryOpenError(manifest_file->LibraryPath());
+ std::string warning_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ warning_message += manifest_file->Filename();
+ warning_message += ", failed to load with message \"";
+ warning_message += library_message;
+ warning_message += "\"";
+ LoaderLogger::LogErrorMessage(openxr_command, warning_message);
+ return XR_ERROR_FILE_ACCESS_ERROR;
+ }
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+ if (!LoaderInitData::instance().initialized()) {
+ LoaderLogger::LogErrorMessage(openxr_command, "RuntimeInterface::LoadRuntime skipping manifest file " +
+ manifest_file->Filename() +
+ " because xrInitializeLoaderKHR was not yet called.");
+
+ LoaderPlatformLibraryClose(runtime_library);
+ return XR_ERROR_VALIDATION_FAILURE;
+ }
+ bool forwardedInitLoader = false;
+ {
+ // If we have xrInitializeLoaderKHR exposed as an export, forward call to it.
+ const auto function_name = manifest_file->GetFunctionName("xrInitializeLoaderKHR");
+ auto initLoader =
+ reinterpret_cast<PFN_xrInitializeLoaderKHR>(LoaderPlatformLibraryGetProcAddr(runtime_library, function_name));
+ if (initLoader != nullptr) {
+ // we found the entry point one way or another.
+ LoaderLogger::LogInfoMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarding xrInitializeLoaderKHR call to runtime before "
+ "calling xrNegotiateLoaderRuntimeInterface.");
+ XrResult res = initLoader(LoaderInitData::instance().getParam());
+ if (!XR_SUCCEEDED(res)) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarded call to xrInitializeLoaderKHR failed.");
+
+ LoaderPlatformLibraryClose(runtime_library);
+ return res;
+ }
+ forwardedInitLoader = true;
+ }
+ }
+#endif
+
+ // Get and settle on an runtime interface version (using any provided name if required).
+ std::string function_name = manifest_file->GetFunctionName("xrNegotiateLoaderRuntimeInterface");
+ auto negotiate =
+ reinterpret_cast<PFN_xrNegotiateLoaderRuntimeInterface>(LoaderPlatformLibraryGetProcAddr(runtime_library, function_name));
+
+ // Loader info for negotiation
+ XrNegotiateLoaderInfo loader_info = {};
+ loader_info.structType = XR_LOADER_INTERFACE_STRUCT_LOADER_INFO;
+ loader_info.structVersion = XR_LOADER_INFO_STRUCT_VERSION;
+ loader_info.structSize = sizeof(XrNegotiateLoaderInfo);
+ loader_info.minInterfaceVersion = 1;
+ loader_info.maxInterfaceVersion = XR_CURRENT_LOADER_RUNTIME_VERSION;
+ loader_info.minApiVersion = XR_MAKE_VERSION(1, 0, 0);
+ loader_info.maxApiVersion = XR_MAKE_VERSION(1, 0x3ff, 0xfff); // Maximum allowed version for this major version.
+
+ // Set up the runtime return structure
+ XrNegotiateRuntimeRequest runtime_info = {};
+ runtime_info.structType = XR_LOADER_INTERFACE_STRUCT_RUNTIME_REQUEST;
+ runtime_info.structVersion = XR_RUNTIME_INFO_STRUCT_VERSION;
+ runtime_info.structSize = sizeof(XrNegotiateRuntimeRequest);
+
+ // Skip calling the negotiate function and fail if the function pointer
+ // could not get loaded
+ XrResult res = XR_ERROR_RUNTIME_FAILURE;
+ if (nullptr != negotiate) {
+ res = negotiate(&loader_info, &runtime_info);
+ }
+ // If we supposedly succeeded, but got a nullptr for GetInstanceProcAddr
+ // then something still went wrong, so return with an error.
+ if (XR_SUCCEEDED(res)) {
+ uint32_t runtime_major = XR_VERSION_MAJOR(runtime_info.runtimeApiVersion);
+ uint32_t runtime_minor = XR_VERSION_MINOR(runtime_info.runtimeApiVersion);
+ uint32_t loader_major = XR_VERSION_MAJOR(XR_CURRENT_API_VERSION);
+ if (nullptr == runtime_info.getInstanceProcAddr) {
+ std::string error_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ error_message += manifest_file->Filename();
+ error_message += ", negotiation succeeded but returned NULL getInstanceProcAddr";
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ } else if (0 >= runtime_info.runtimeInterfaceVersion ||
+ XR_CURRENT_LOADER_RUNTIME_VERSION < runtime_info.runtimeInterfaceVersion) {
+ std::string error_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ error_message += manifest_file->Filename();
+ error_message += ", negotiation succeeded but returned invalid interface version";
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ } else if (runtime_major != loader_major || (runtime_major == 0 && runtime_minor == 0)) {
+ std::string error_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ error_message += manifest_file->Filename();
+ error_message += ", OpenXR version returned not compatible with this loader";
+ LoaderLogger::LogErrorMessage(openxr_command, error_message);
+ res = XR_ERROR_FILE_CONTENTS_INVALID;
+ }
+ }
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+ if (XR_SUCCEEDED(res) && !forwardedInitLoader) {
+ // Forward initialize loader call, where possible and if we did not do so before.
+ PFN_xrVoidFunction initializeVoid = nullptr;
+ PFN_xrInitializeLoaderKHR initialize = nullptr;
+
+ // Now we may try asking xrGetInstanceProcAddr
+ if (XR_SUCCEEDED(runtime_info.getInstanceProcAddr(XR_NULL_HANDLE, "xrInitializeLoaderKHR", &initializeVoid))) {
+ if (initializeVoid == nullptr) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime got success from xrGetInstanceProcAddr "
+ "for xrInitializeLoaderKHR, but output a null pointer.");
+ res = XR_ERROR_RUNTIME_FAILURE;
+ } else {
+ initialize = reinterpret_cast<PFN_xrInitializeLoaderKHR>(initializeVoid);
+ }
+ }
+ if (initialize != nullptr) {
+ // we found the entry point one way or another.
+ LoaderLogger::LogInfoMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarding xrInitializeLoaderKHR call to runtime after "
+ "calling xrNegotiateLoaderRuntimeInterface.");
+ res = initialize(LoaderInitData::instance().getParam());
+ if (!XR_SUCCEEDED(res)) {
+ LoaderLogger::LogErrorMessage(openxr_command,
+ "RuntimeInterface::LoadRuntime forwarded call to xrInitializeLoaderKHR failed.");
+ }
+ }
+ }
+#endif
+ if (XR_FAILED(res)) {
+ std::string warning_message = "RuntimeInterface::LoadRuntime skipping manifest file ";
+ warning_message += manifest_file->Filename();
+ warning_message += ", negotiation failed with error ";
+ warning_message += std::to_string(res);
+ LoaderLogger::LogErrorMessage(openxr_command, warning_message);
+ LoaderPlatformLibraryClose(runtime_library);
+ return res;
+ }
+
+ std::string info_message = "RuntimeInterface::LoadRuntime succeeded loading runtime defined in manifest file ";
+ info_message += manifest_file->Filename();
+ info_message += " using interface version ";
+ info_message += std::to_string(runtime_info.runtimeInterfaceVersion);
+ info_message += " and OpenXR API version ";
+ info_message += std::to_string(XR_VERSION_MAJOR(runtime_info.runtimeApiVersion));
+ info_message += ".";
+ info_message += std::to_string(XR_VERSION_MINOR(runtime_info.runtimeApiVersion));
+ LoaderLogger::LogInfoMessage(openxr_command, info_message);
+
+ // Use this runtime
+ GetInstance().reset(new RuntimeInterface(runtime_library, runtime_info.getInstanceProcAddr));
+
+ // Grab the list of extensions this runtime supports for easy filtering after the
+ // xrCreateInstance call
+ std::vector<std::string> supported_extensions;
+ std::vector<XrExtensionProperties> extension_properties;
+ GetInstance()->GetInstanceExtensionProperties(extension_properties);
+ supported_extensions.reserve(extension_properties.size());
+ for (XrExtensionProperties ext_prop : extension_properties) {
+ supported_extensions.emplace_back(ext_prop.extensionName);
+ }
+ GetInstance()->SetSupportedExtensions(supported_extensions);
+
+ return XR_SUCCESS;
+}
+
+XrResult RuntimeInterface::LoadRuntime(const std::string& openxr_command) {
+ // If something's already loaded, we're done here.
+ if (GetInstance() != nullptr) {
+ return XR_SUCCESS;
+ }
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+
+ if (!LoaderInitData::instance().initialized()) {
+ LoaderLogger::LogErrorMessage(
+ openxr_command, "RuntimeInterface::LoadRuntime cannot run because xrInitializeLoaderKHR was not successfully called.");
+ return XR_ERROR_INITIALIZATION_FAILED;
+ }
+#endif // XR_KHR_LOADER_INIT_SUPPORT
+
+ std::vector<std::unique_ptr<RuntimeManifestFile>> runtime_manifest_files = {};
+
+ // Find the available runtimes which we may need to report information for.
+ XrResult last_error = RuntimeManifestFile::FindManifestFiles(runtime_manifest_files);
+ if (XR_FAILED(last_error)) {
+ LoaderLogger::LogErrorMessage(openxr_command, "RuntimeInterface::LoadRuntimes - unknown error");
+ } else {
+ last_error = XR_ERROR_RUNTIME_UNAVAILABLE;
+ for (std::unique_ptr<RuntimeManifestFile>& manifest_file : runtime_manifest_files) {
+ last_error = RuntimeInterface::TryLoadingSingleRuntime(openxr_command, manifest_file);
+ if (XR_SUCCEEDED(last_error)) {
+ break;
+ }
+ }
+ }
+
+ // Unsuccessful in loading any runtime, throw the runtime unavailable message.
+ if (XR_FAILED(last_error)) {
+ LoaderLogger::LogErrorMessage(openxr_command, "RuntimeInterface::LoadRuntimes - failed to load a runtime");
+ last_error = XR_ERROR_RUNTIME_UNAVAILABLE;
+ }
+
+ return last_error;
+}
+
+void RuntimeInterface::UnloadRuntime(const std::string& openxr_command) {
+ if (GetInstance()) {
+ LoaderLogger::LogInfoMessage(openxr_command, "RuntimeInterface::UnloadRuntime - Unloading RuntimeInterface");
+ GetInstance().reset();
+ }
+}
+
+XrResult RuntimeInterface::GetInstanceProcAddr(XrInstance instance, const char* name, PFN_xrVoidFunction* function) {
+ return GetInstance()->_get_instance_proc_addr(instance, name, function);
+}
+
+const XrGeneratedDispatchTable* RuntimeInterface::GetDispatchTable(XrInstance instance) {
+ XrGeneratedDispatchTable* table = nullptr;
+ std::lock_guard<std::mutex> mlock(GetInstance()->_dispatch_table_mutex);
+ auto it = GetInstance()->_dispatch_table_map.find(instance);
+ if (it != GetInstance()->_dispatch_table_map.end()) {
+ table = it->second.get();
+ }
+ return table;
+}
+
+const XrGeneratedDispatchTable* RuntimeInterface::GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger) {
+ XrInstance runtime_instance = XR_NULL_HANDLE;
+ {
+ std::lock_guard<std::mutex> mlock(GetInstance()->_messenger_to_instance_mutex);
+ auto it = GetInstance()->_messenger_to_instance_map.find(messenger);
+ if (it != GetInstance()->_messenger_to_instance_map.end()) {
+ runtime_instance = it->second;
+ }
+ }
+ return GetDispatchTable(runtime_instance);
+}
+
+RuntimeInterface::RuntimeInterface(LoaderPlatformLibraryHandle runtime_library, PFN_xrGetInstanceProcAddr get_instance_proc_addr)
+ : _runtime_library(runtime_library), _get_instance_proc_addr(get_instance_proc_addr) {}
+
+RuntimeInterface::~RuntimeInterface() {
+ std::string info_message = "RuntimeInterface being destroyed.";
+ LoaderLogger::LogInfoMessage("", info_message);
+ {
+ std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
+ _dispatch_table_map.clear();
+ }
+ LoaderPlatformLibraryClose(_runtime_library);
+}
+
+void RuntimeInterface::GetInstanceExtensionProperties(std::vector<XrExtensionProperties>& extension_properties) {
+ std::vector<XrExtensionProperties> runtime_extension_properties;
+ PFN_xrEnumerateInstanceExtensionProperties rt_xrEnumerateInstanceExtensionProperties;
+ _get_instance_proc_addr(XR_NULL_HANDLE, "xrEnumerateInstanceExtensionProperties",
+ reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrEnumerateInstanceExtensionProperties));
+ uint32_t count = 0;
+ uint32_t count_output = 0;
+ // Get the count from the runtime
+ rt_xrEnumerateInstanceExtensionProperties(nullptr, count, &count_output, nullptr);
+ if (count_output > 0) {
+ runtime_extension_properties.resize(count_output);
+ count = count_output;
+ for (XrExtensionProperties& ext_prop : runtime_extension_properties) {
+ ext_prop.type = XR_TYPE_EXTENSION_PROPERTIES;
+ ext_prop.next = nullptr;
+ }
+ rt_xrEnumerateInstanceExtensionProperties(nullptr, count, &count_output, runtime_extension_properties.data());
+ }
+ size_t ext_count = runtime_extension_properties.size();
+ size_t props_count = extension_properties.size();
+ for (size_t ext = 0; ext < ext_count; ++ext) {
+ bool found = false;
+ for (size_t prop = 0; prop < props_count; ++prop) {
+ // If we find it, then make sure the spec version matches that of the runtime instead of the
+ // layer.
+ if (strcmp(extension_properties[prop].extensionName, runtime_extension_properties[ext].extensionName) == 0) {
+ // Make sure the spec version used is the runtime's
+ extension_properties[prop].extensionVersion = runtime_extension_properties[ext].extensionVersion;
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ extension_properties.push_back(runtime_extension_properties[ext]);
+ }
+ }
+}
+
+XrResult RuntimeInterface::CreateInstance(const XrInstanceCreateInfo* info, XrInstance* instance) {
+ XrResult res = XR_SUCCESS;
+ bool create_succeeded = false;
+ PFN_xrCreateInstance rt_xrCreateInstance;
+ _get_instance_proc_addr(XR_NULL_HANDLE, "xrCreateInstance", reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrCreateInstance));
+ res = rt_xrCreateInstance(info, instance);
+ if (XR_SUCCEEDED(res)) {
+ create_succeeded = true;
+ std::unique_ptr<XrGeneratedDispatchTable> dispatch_table(new XrGeneratedDispatchTable());
+ GeneratedXrPopulateDispatchTable(dispatch_table.get(), *instance, _get_instance_proc_addr);
+ std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
+ _dispatch_table_map[*instance] = std::move(dispatch_table);
+ }
+
+ // If the failure occurred during the populate, clean up the instance we had picked up from the runtime
+ if (XR_FAILED(res) && create_succeeded) {
+ PFN_xrDestroyInstance rt_xrDestroyInstance;
+ _get_instance_proc_addr(*instance, "xrDestroyInstance", reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrDestroyInstance));
+ rt_xrDestroyInstance(*instance);
+ *instance = XR_NULL_HANDLE;
+ }
+
+ return res;
+}
+
+XrResult RuntimeInterface::DestroyInstance(XrInstance instance) {
+ if (XR_NULL_HANDLE != instance) {
+ // Destroy the dispatch table for this instance first
+ {
+ std::lock_guard<std::mutex> mlock(_dispatch_table_mutex);
+ auto map_iter = _dispatch_table_map.find(instance);
+ if (map_iter != _dispatch_table_map.end()) {
+ _dispatch_table_map.erase(map_iter);
+ }
+ }
+ // Now delete the instance
+ PFN_xrDestroyInstance rt_xrDestroyInstance;
+ _get_instance_proc_addr(instance, "xrDestroyInstance", reinterpret_cast<PFN_xrVoidFunction*>(&rt_xrDestroyInstance));
+ rt_xrDestroyInstance(instance);
+ }
+ return XR_SUCCESS;
+}
+
+bool RuntimeInterface::TrackDebugMessenger(XrInstance instance, XrDebugUtilsMessengerEXT messenger) {
+ std::lock_guard<std::mutex> mlock(_messenger_to_instance_mutex);
+ _messenger_to_instance_map[messenger] = instance;
+ return true;
+}
+
+void RuntimeInterface::ForgetDebugMessenger(XrDebugUtilsMessengerEXT messenger) {
+ if (XR_NULL_HANDLE != messenger) {
+ std::lock_guard<std::mutex> mlock(_messenger_to_instance_mutex);
+ _messenger_to_instance_map.erase(messenger);
+ }
+}
+
+void RuntimeInterface::SetSupportedExtensions(std::vector<std::string>& supported_extensions) {
+ _supported_extensions = supported_extensions;
+}
+
+bool RuntimeInterface::SupportsExtension(const std::string& extension_name) {
+ bool found_prop = false;
+ for (const std::string& supported_extension : _supported_extensions) {
+ if (supported_extension == extension_name) {
+ found_prop = true;
+ break;
+ }
+ }
+ return found_prop;
+}
diff --git a/thirdparty/openxr/src/loader/runtime_interface.hpp b/thirdparty/openxr/src/loader/runtime_interface.hpp
new file mode 100644
index 0000000000..5f49b28abe
--- /dev/null
+++ b/thirdparty/openxr/src/loader/runtime_interface.hpp
@@ -0,0 +1,84 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+// Initial Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+
+#include "loader_platform.hpp"
+
+#include <openxr/openxr.h>
+
+#include <string>
+#include <vector>
+#include <unordered_map>
+#include <mutex>
+#include <memory>
+
+#ifdef XR_USE_PLATFORM_ANDROID
+#define XR_KHR_LOADER_INIT_SUPPORT
+#endif
+
+namespace Json {
+class Value;
+}
+
+#ifdef XR_KHR_LOADER_INIT_SUPPORT
+//! Initialize loader, where required.
+XrResult InitializeLoader(const XrLoaderInitInfoBaseHeaderKHR* loaderInitInfo);
+XrResult GetPlatformRuntimeVirtualManifest(Json::Value& out_manifest);
+#endif
+
+class RuntimeManifestFile;
+struct XrGeneratedDispatchTable;
+
+class RuntimeInterface {
+ public:
+ virtual ~RuntimeInterface();
+
+ // Helper functions for loading and unloading the runtime (but only when necessary)
+ static XrResult LoadRuntime(const std::string& openxr_command);
+ static void UnloadRuntime(const std::string& openxr_command);
+ static RuntimeInterface& GetRuntime() { return *(GetInstance().get()); }
+ static XrResult GetInstanceProcAddr(XrInstance instance, const char* name, PFN_xrVoidFunction* function);
+
+ // Get the direct dispatch table to this runtime, without API layers or loader terminators.
+ static const XrGeneratedDispatchTable* GetDispatchTable(XrInstance instance);
+ static const XrGeneratedDispatchTable* GetDebugUtilsMessengerDispatchTable(XrDebugUtilsMessengerEXT messenger);
+
+ void GetInstanceExtensionProperties(std::vector<XrExtensionProperties>& extension_properties);
+ bool SupportsExtension(const std::string& extension_name);
+ XrResult CreateInstance(const XrInstanceCreateInfo* info, XrInstance* instance);
+ XrResult DestroyInstance(XrInstance instance);
+ bool TrackDebugMessenger(XrInstance instance, XrDebugUtilsMessengerEXT messenger);
+ void ForgetDebugMessenger(XrDebugUtilsMessengerEXT messenger);
+
+ // No default construction
+ RuntimeInterface() = delete;
+
+ // Non-copyable
+ RuntimeInterface(const RuntimeInterface&) = delete;
+ RuntimeInterface& operator=(const RuntimeInterface&) = delete;
+
+ private:
+ RuntimeInterface(LoaderPlatformLibraryHandle runtime_library, PFN_xrGetInstanceProcAddr get_instance_proc_addr);
+ void SetSupportedExtensions(std::vector<std::string>& supported_extensions);
+ static XrResult TryLoadingSingleRuntime(const std::string& openxr_command, std::unique_ptr<RuntimeManifestFile>& manifest_file);
+
+ static std::unique_ptr<RuntimeInterface>& GetInstance() {
+ static std::unique_ptr<RuntimeInterface> instance;
+ return instance;
+ }
+
+ LoaderPlatformLibraryHandle _runtime_library;
+ PFN_xrGetInstanceProcAddr _get_instance_proc_addr;
+ std::unordered_map<XrInstance, std::unique_ptr<XrGeneratedDispatchTable>> _dispatch_table_map;
+ std::mutex _dispatch_table_mutex;
+ std::unordered_map<XrDebugUtilsMessengerEXT, XrInstance> _messenger_to_instance_map;
+ std::mutex _messenger_to_instance_mutex;
+ std::vector<std::string> _supported_extensions;
+};
diff --git a/thirdparty/openxr/src/loader/xr_generated_loader.cpp b/thirdparty/openxr/src/loader/xr_generated_loader.cpp
new file mode 100644
index 0000000000..2ce323e51f
--- /dev/null
+++ b/thirdparty/openxr/src/loader/xr_generated_loader.cpp
@@ -0,0 +1,700 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See loader_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#include "xr_generated_loader.hpp"
+
+#include "api_layer_interface.hpp"
+#include "exception_handling.hpp"
+#include "hex_and_handles.h"
+#include "loader_instance.hpp"
+#include "loader_logger.hpp"
+#include "loader_platform.hpp"
+#include "runtime_interface.hpp"
+#include "xr_generated_dispatch_table.h"
+
+#include "xr_dependencies.h"
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+#include <cstring>
+#include <memory>
+#include <new>
+#include <string>
+#include <unordered_map>
+
+
+// Automatically generated instance trampolines and terminators
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties(
+ XrInstance instance,
+ XrInstanceProperties* instanceProperties) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetInstanceProperties");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetInstanceProperties(instance, instanceProperties);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent(
+ XrInstance instance,
+ XrEventDataBuffer* eventData) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrPollEvent");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->PollEvent(instance, eventData);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrResultToString(
+ XrInstance instance,
+ XrResult value,
+ char buffer[XR_MAX_RESULT_STRING_SIZE]) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrResultToString");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->ResultToString(instance, value, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString(
+ XrInstance instance,
+ XrStructureType value,
+ char buffer[XR_MAX_STRUCTURE_NAME_SIZE]) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrStructureTypeToString");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->StructureTypeToString(instance, value, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem(
+ XrInstance instance,
+ const XrSystemGetInfo* getInfo,
+ XrSystemId* systemId) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetSystem");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetSystem(instance, getInfo, systemId);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrSystemProperties* properties) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetSystemProperties");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetSystemProperties(instance, systemId, properties);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t environmentBlendModeCapacityInput,
+ uint32_t* environmentBlendModeCountOutput,
+ XrEnvironmentBlendMode* environmentBlendModes) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateEnvironmentBlendModes");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateEnvironmentBlendModes(instance, systemId, viewConfigurationType, environmentBlendModeCapacityInput, environmentBlendModeCountOutput, environmentBlendModes);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession(
+ XrInstance instance,
+ const XrSessionCreateInfo* createInfo,
+ XrSession* session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateSession(instance, createInfo, session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession(
+ XrSession session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroySession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroySession(session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces(
+ XrSession session,
+ uint32_t spaceCapacityInput,
+ uint32_t* spaceCountOutput,
+ XrReferenceSpaceType* spaces) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateReferenceSpaces");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateReferenceSpaces(session, spaceCapacityInput, spaceCountOutput, spaces);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace(
+ XrSession session,
+ const XrReferenceSpaceCreateInfo* createInfo,
+ XrSpace* space) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateReferenceSpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateReferenceSpace(session, createInfo, space);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect(
+ XrSession session,
+ XrReferenceSpaceType referenceSpaceType,
+ XrExtent2Df* bounds) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetReferenceSpaceBoundsRect");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetReferenceSpaceBoundsRect(session, referenceSpaceType, bounds);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace(
+ XrSession session,
+ const XrActionSpaceCreateInfo* createInfo,
+ XrSpace* space) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateActionSpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateActionSpace(session, createInfo, space);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace(
+ XrSpace space,
+ XrSpace baseSpace,
+ XrTime time,
+ XrSpaceLocation* location) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrLocateSpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->LocateSpace(space, baseSpace, time, location);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace(
+ XrSpace space) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroySpace");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroySpace(space);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t viewConfigurationTypeCapacityInput,
+ uint32_t* viewConfigurationTypeCountOutput,
+ XrViewConfigurationType* viewConfigurationTypes) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateViewConfigurations");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateViewConfigurations(instance, systemId, viewConfigurationTypeCapacityInput, viewConfigurationTypeCountOutput, viewConfigurationTypes);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ XrViewConfigurationProperties* configurationProperties) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetViewConfigurationProperties");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetViewConfigurationProperties(instance, systemId, viewConfigurationType, configurationProperties);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrViewConfigurationView* views) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateViewConfigurationViews");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateViewConfigurationViews(instance, systemId, viewConfigurationType, viewCapacityInput, viewCountOutput, views);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats(
+ XrSession session,
+ uint32_t formatCapacityInput,
+ uint32_t* formatCountOutput,
+ int64_t* formats) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateSwapchainFormats");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateSwapchainFormats(session, formatCapacityInput, formatCountOutput, formats);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain(
+ XrSession session,
+ const XrSwapchainCreateInfo* createInfo,
+ XrSwapchain* swapchain) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateSwapchain");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateSwapchain(session, createInfo, swapchain);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain(
+ XrSwapchain swapchain) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroySwapchain");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroySwapchain(swapchain);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages(
+ XrSwapchain swapchain,
+ uint32_t imageCapacityInput,
+ uint32_t* imageCountOutput,
+ XrSwapchainImageBaseHeader* images) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateSwapchainImages");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateSwapchainImages(swapchain, imageCapacityInput, imageCountOutput, images);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageAcquireInfo* acquireInfo,
+ uint32_t* index) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrAcquireSwapchainImage");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->AcquireSwapchainImage(swapchain, acquireInfo, index);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageWaitInfo* waitInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrWaitSwapchainImage");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->WaitSwapchainImage(swapchain, waitInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageReleaseInfo* releaseInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrReleaseSwapchainImage");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->ReleaseSwapchainImage(swapchain, releaseInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession(
+ XrSession session,
+ const XrSessionBeginInfo* beginInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrBeginSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->BeginSession(session, beginInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndSession(
+ XrSession session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEndSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EndSession(session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession(
+ XrSession session) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrRequestExitSession");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->RequestExitSession(session);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame(
+ XrSession session,
+ const XrFrameWaitInfo* frameWaitInfo,
+ XrFrameState* frameState) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrWaitFrame");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->WaitFrame(session, frameWaitInfo, frameState);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame(
+ XrSession session,
+ const XrFrameBeginInfo* frameBeginInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrBeginFrame");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->BeginFrame(session, frameBeginInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame(
+ XrSession session,
+ const XrFrameEndInfo* frameEndInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEndFrame");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EndFrame(session, frameEndInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews(
+ XrSession session,
+ const XrViewLocateInfo* viewLocateInfo,
+ XrViewState* viewState,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrView* views) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrLocateViews");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->LocateViews(session, viewLocateInfo, viewState, viewCapacityInput, viewCountOutput, views);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath(
+ XrInstance instance,
+ const char* pathString,
+ XrPath* path) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrStringToPath");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->StringToPath(instance, pathString, path);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPathToString(
+ XrInstance instance,
+ XrPath path,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrPathToString");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->PathToString(instance, path, bufferCapacityInput, bufferCountOutput, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet(
+ XrInstance instance,
+ const XrActionSetCreateInfo* createInfo,
+ XrActionSet* actionSet) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateActionSet");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateActionSet(instance, createInfo, actionSet);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet(
+ XrActionSet actionSet) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyActionSet");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroyActionSet(actionSet);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction(
+ XrActionSet actionSet,
+ const XrActionCreateInfo* createInfo,
+ XrAction* action) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrCreateAction");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->CreateAction(actionSet, createInfo, action);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction(
+ XrAction action) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrDestroyAction");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->DestroyAction(action);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings(
+ XrInstance instance,
+ const XrInteractionProfileSuggestedBinding* suggestedBindings) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSuggestInteractionProfileBindings");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->SuggestInteractionProfileBindings(instance, suggestedBindings);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrAttachSessionActionSets");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->AttachSessionActionSets(session, attachInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrInteractionProfileState* interactionProfile) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetCurrentInteractionProfile");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetCurrentInteractionProfile(session, topLevelUserPath, interactionProfile);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStateBoolean");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStateBoolean(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStateFloat");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStateFloat(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStateVector2f");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStateVector2f(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetActionStatePose");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetActionStatePose(session, getInfo, state);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions(
+ XrSession session,
+ const XrActionsSyncInfo* syncInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrSyncActions");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->SyncActions(session, syncInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
+ uint32_t sourceCapacityInput,
+ uint32_t* sourceCountOutput,
+ XrPath* sources) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrEnumerateBoundSourcesForAction");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->EnumerateBoundSourcesForAction(session, enumerateInfo, sourceCapacityInput, sourceCountOutput, sources);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName(
+ XrSession session,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrGetInputSourceLocalizedName");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->GetInputSourceLocalizedName(session, getInfo, bufferCapacityInput, bufferCountOutput, buffer);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrApplyHapticFeedback");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->ApplyHapticFeedback(session, hapticActionInfo, hapticFeedback);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo) XRLOADER_ABI_TRY {
+ LoaderInstance* loader_instance;
+ XrResult result = ActiveLoaderInstance::Get(&loader_instance, "xrStopHapticFeedback");
+ if (XR_SUCCEEDED(result)) {
+ result = loader_instance->DispatchTable()->StopHapticFeedback(session, hapticActionInfo);
+ }
+ return result;
+}
+XRLOADER_ABI_CATCH_FALLBACK
+
+
diff --git a/thirdparty/openxr/src/loader/xr_generated_loader.hpp b/thirdparty/openxr/src/loader/xr_generated_loader.hpp
new file mode 100644
index 0000000000..482cf1e83e
--- /dev/null
+++ b/thirdparty/openxr/src/loader/xr_generated_loader.hpp
@@ -0,0 +1,252 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See loader_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+#include <unordered_map>
+#include <thread>
+#include <mutex>
+
+#include "xr_dependencies.h"
+#include "openxr/openxr.h"
+#include "openxr/openxr_platform.h"
+
+#include "loader_interfaces.h"
+
+#include "loader_instance.hpp"
+
+#include "loader_platform.hpp"
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+// Loader manually generated function prototypes
+
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInstanceProperties(
+ XrInstance instance,
+ XrInstanceProperties* instanceProperties);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPollEvent(
+ XrInstance instance,
+ XrEventDataBuffer* eventData);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrResultToString(
+ XrInstance instance,
+ XrResult value,
+ char buffer[XR_MAX_RESULT_STRING_SIZE]);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStructureTypeToString(
+ XrInstance instance,
+ XrStructureType value,
+ char buffer[XR_MAX_STRUCTURE_NAME_SIZE]);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystem(
+ XrInstance instance,
+ const XrSystemGetInfo* getInfo,
+ XrSystemId* systemId);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetSystemProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrSystemProperties* properties);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateEnvironmentBlendModes(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t environmentBlendModeCapacityInput,
+ uint32_t* environmentBlendModeCountOutput,
+ XrEnvironmentBlendMode* environmentBlendModes);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSession(
+ XrInstance instance,
+ const XrSessionCreateInfo* createInfo,
+ XrSession* session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySession(
+ XrSession session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateReferenceSpaces(
+ XrSession session,
+ uint32_t spaceCapacityInput,
+ uint32_t* spaceCountOutput,
+ XrReferenceSpaceType* spaces);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateReferenceSpace(
+ XrSession session,
+ const XrReferenceSpaceCreateInfo* createInfo,
+ XrSpace* space);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetReferenceSpaceBoundsRect(
+ XrSession session,
+ XrReferenceSpaceType referenceSpaceType,
+ XrExtent2Df* bounds);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSpace(
+ XrSession session,
+ const XrActionSpaceCreateInfo* createInfo,
+ XrSpace* space);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateSpace(
+ XrSpace space,
+ XrSpace baseSpace,
+ XrTime time,
+ XrSpaceLocation* location);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySpace(
+ XrSpace space);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurations(
+ XrInstance instance,
+ XrSystemId systemId,
+ uint32_t viewConfigurationTypeCapacityInput,
+ uint32_t* viewConfigurationTypeCountOutput,
+ XrViewConfigurationType* viewConfigurationTypes);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetViewConfigurationProperties(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ XrViewConfigurationProperties* configurationProperties);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateViewConfigurationViews(
+ XrInstance instance,
+ XrSystemId systemId,
+ XrViewConfigurationType viewConfigurationType,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrViewConfigurationView* views);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainFormats(
+ XrSession session,
+ uint32_t formatCapacityInput,
+ uint32_t* formatCountOutput,
+ int64_t* formats);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateSwapchain(
+ XrSession session,
+ const XrSwapchainCreateInfo* createInfo,
+ XrSwapchain* swapchain);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroySwapchain(
+ XrSwapchain swapchain);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateSwapchainImages(
+ XrSwapchain swapchain,
+ uint32_t imageCapacityInput,
+ uint32_t* imageCountOutput,
+ XrSwapchainImageBaseHeader* images);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAcquireSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageAcquireInfo* acquireInfo,
+ uint32_t* index);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageWaitInfo* waitInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrReleaseSwapchainImage(
+ XrSwapchain swapchain,
+ const XrSwapchainImageReleaseInfo* releaseInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginSession(
+ XrSession session,
+ const XrSessionBeginInfo* beginInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndSession(
+ XrSession session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrRequestExitSession(
+ XrSession session);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrWaitFrame(
+ XrSession session,
+ const XrFrameWaitInfo* frameWaitInfo,
+ XrFrameState* frameState);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrBeginFrame(
+ XrSession session,
+ const XrFrameBeginInfo* frameBeginInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEndFrame(
+ XrSession session,
+ const XrFrameEndInfo* frameEndInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrLocateViews(
+ XrSession session,
+ const XrViewLocateInfo* viewLocateInfo,
+ XrViewState* viewState,
+ uint32_t viewCapacityInput,
+ uint32_t* viewCountOutput,
+ XrView* views);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStringToPath(
+ XrInstance instance,
+ const char* pathString,
+ XrPath* path);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrPathToString(
+ XrInstance instance,
+ XrPath path,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateActionSet(
+ XrInstance instance,
+ const XrActionSetCreateInfo* createInfo,
+ XrActionSet* actionSet);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyActionSet(
+ XrActionSet actionSet);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrCreateAction(
+ XrActionSet actionSet,
+ const XrActionCreateInfo* createInfo,
+ XrAction* action);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrDestroyAction(
+ XrAction action);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSuggestInteractionProfileBindings(
+ XrInstance instance,
+ const XrInteractionProfileSuggestedBinding* suggestedBindings);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrAttachSessionActionSets(
+ XrSession session,
+ const XrSessionActionSetsAttachInfo* attachInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetCurrentInteractionProfile(
+ XrSession session,
+ XrPath topLevelUserPath,
+ XrInteractionProfileState* interactionProfile);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateBoolean(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateBoolean* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateFloat(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateFloat* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStateVector2f(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStateVector2f* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetActionStatePose(
+ XrSession session,
+ const XrActionStateGetInfo* getInfo,
+ XrActionStatePose* state);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrSyncActions(
+ XrSession session,
+ const XrActionsSyncInfo* syncInfo);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrEnumerateBoundSourcesForAction(
+ XrSession session,
+ const XrBoundSourcesForActionEnumerateInfo* enumerateInfo,
+ uint32_t sourceCapacityInput,
+ uint32_t* sourceCountOutput,
+ XrPath* sources);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrGetInputSourceLocalizedName(
+ XrSession session,
+ const XrInputSourceLocalizedNameGetInfo* getInfo,
+ uint32_t bufferCapacityInput,
+ uint32_t* bufferCountOutput,
+ char* buffer);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrApplyHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo,
+ const XrHapticBaseHeader* hapticFeedback);
+extern "C" LOADER_EXPORT XRAPI_ATTR XrResult XRAPI_CALL xrStopHapticFeedback(
+ XrSession session,
+ const XrHapticActionInfo* hapticActionInfo);
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.c b/thirdparty/openxr/src/xr_generated_dispatch_table.c
new file mode 100644
index 0000000000..79fbefc52a
--- /dev/null
+++ b/thirdparty/openxr/src/xr_generated_dispatch_table.c
@@ -0,0 +1,347 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See utility_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#include "xr_generated_dispatch_table.h"
+#include "xr_dependencies.h"
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+// Helper function to populate an instance dispatch table
+void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
+ XrInstance instance,
+ PFN_xrGetInstanceProcAddr get_inst_proc_addr) {
+
+ // ---- Core 1.0 commands
+ table->GetInstanceProcAddr = get_inst_proc_addr;
+ (get_inst_proc_addr(instance, "xrCreateInstance", (PFN_xrVoidFunction*)&table->CreateInstance));
+ (get_inst_proc_addr(instance, "xrDestroyInstance", (PFN_xrVoidFunction*)&table->DestroyInstance));
+ (get_inst_proc_addr(instance, "xrGetInstanceProperties", (PFN_xrVoidFunction*)&table->GetInstanceProperties));
+ (get_inst_proc_addr(instance, "xrPollEvent", (PFN_xrVoidFunction*)&table->PollEvent));
+ (get_inst_proc_addr(instance, "xrResultToString", (PFN_xrVoidFunction*)&table->ResultToString));
+ (get_inst_proc_addr(instance, "xrStructureTypeToString", (PFN_xrVoidFunction*)&table->StructureTypeToString));
+ (get_inst_proc_addr(instance, "xrGetSystem", (PFN_xrVoidFunction*)&table->GetSystem));
+ (get_inst_proc_addr(instance, "xrGetSystemProperties", (PFN_xrVoidFunction*)&table->GetSystemProperties));
+ (get_inst_proc_addr(instance, "xrEnumerateEnvironmentBlendModes", (PFN_xrVoidFunction*)&table->EnumerateEnvironmentBlendModes));
+ (get_inst_proc_addr(instance, "xrCreateSession", (PFN_xrVoidFunction*)&table->CreateSession));
+ (get_inst_proc_addr(instance, "xrDestroySession", (PFN_xrVoidFunction*)&table->DestroySession));
+ (get_inst_proc_addr(instance, "xrEnumerateReferenceSpaces", (PFN_xrVoidFunction*)&table->EnumerateReferenceSpaces));
+ (get_inst_proc_addr(instance, "xrCreateReferenceSpace", (PFN_xrVoidFunction*)&table->CreateReferenceSpace));
+ (get_inst_proc_addr(instance, "xrGetReferenceSpaceBoundsRect", (PFN_xrVoidFunction*)&table->GetReferenceSpaceBoundsRect));
+ (get_inst_proc_addr(instance, "xrCreateActionSpace", (PFN_xrVoidFunction*)&table->CreateActionSpace));
+ (get_inst_proc_addr(instance, "xrLocateSpace", (PFN_xrVoidFunction*)&table->LocateSpace));
+ (get_inst_proc_addr(instance, "xrDestroySpace", (PFN_xrVoidFunction*)&table->DestroySpace));
+ (get_inst_proc_addr(instance, "xrEnumerateViewConfigurations", (PFN_xrVoidFunction*)&table->EnumerateViewConfigurations));
+ (get_inst_proc_addr(instance, "xrGetViewConfigurationProperties", (PFN_xrVoidFunction*)&table->GetViewConfigurationProperties));
+ (get_inst_proc_addr(instance, "xrEnumerateViewConfigurationViews", (PFN_xrVoidFunction*)&table->EnumerateViewConfigurationViews));
+ (get_inst_proc_addr(instance, "xrEnumerateSwapchainFormats", (PFN_xrVoidFunction*)&table->EnumerateSwapchainFormats));
+ (get_inst_proc_addr(instance, "xrCreateSwapchain", (PFN_xrVoidFunction*)&table->CreateSwapchain));
+ (get_inst_proc_addr(instance, "xrDestroySwapchain", (PFN_xrVoidFunction*)&table->DestroySwapchain));
+ (get_inst_proc_addr(instance, "xrEnumerateSwapchainImages", (PFN_xrVoidFunction*)&table->EnumerateSwapchainImages));
+ (get_inst_proc_addr(instance, "xrAcquireSwapchainImage", (PFN_xrVoidFunction*)&table->AcquireSwapchainImage));
+ (get_inst_proc_addr(instance, "xrWaitSwapchainImage", (PFN_xrVoidFunction*)&table->WaitSwapchainImage));
+ (get_inst_proc_addr(instance, "xrReleaseSwapchainImage", (PFN_xrVoidFunction*)&table->ReleaseSwapchainImage));
+ (get_inst_proc_addr(instance, "xrBeginSession", (PFN_xrVoidFunction*)&table->BeginSession));
+ (get_inst_proc_addr(instance, "xrEndSession", (PFN_xrVoidFunction*)&table->EndSession));
+ (get_inst_proc_addr(instance, "xrRequestExitSession", (PFN_xrVoidFunction*)&table->RequestExitSession));
+ (get_inst_proc_addr(instance, "xrWaitFrame", (PFN_xrVoidFunction*)&table->WaitFrame));
+ (get_inst_proc_addr(instance, "xrBeginFrame", (PFN_xrVoidFunction*)&table->BeginFrame));
+ (get_inst_proc_addr(instance, "xrEndFrame", (PFN_xrVoidFunction*)&table->EndFrame));
+ (get_inst_proc_addr(instance, "xrLocateViews", (PFN_xrVoidFunction*)&table->LocateViews));
+ (get_inst_proc_addr(instance, "xrStringToPath", (PFN_xrVoidFunction*)&table->StringToPath));
+ (get_inst_proc_addr(instance, "xrPathToString", (PFN_xrVoidFunction*)&table->PathToString));
+ (get_inst_proc_addr(instance, "xrCreateActionSet", (PFN_xrVoidFunction*)&table->CreateActionSet));
+ (get_inst_proc_addr(instance, "xrDestroyActionSet", (PFN_xrVoidFunction*)&table->DestroyActionSet));
+ (get_inst_proc_addr(instance, "xrCreateAction", (PFN_xrVoidFunction*)&table->CreateAction));
+ (get_inst_proc_addr(instance, "xrDestroyAction", (PFN_xrVoidFunction*)&table->DestroyAction));
+ (get_inst_proc_addr(instance, "xrSuggestInteractionProfileBindings", (PFN_xrVoidFunction*)&table->SuggestInteractionProfileBindings));
+ (get_inst_proc_addr(instance, "xrAttachSessionActionSets", (PFN_xrVoidFunction*)&table->AttachSessionActionSets));
+ (get_inst_proc_addr(instance, "xrGetCurrentInteractionProfile", (PFN_xrVoidFunction*)&table->GetCurrentInteractionProfile));
+ (get_inst_proc_addr(instance, "xrGetActionStateBoolean", (PFN_xrVoidFunction*)&table->GetActionStateBoolean));
+ (get_inst_proc_addr(instance, "xrGetActionStateFloat", (PFN_xrVoidFunction*)&table->GetActionStateFloat));
+ (get_inst_proc_addr(instance, "xrGetActionStateVector2f", (PFN_xrVoidFunction*)&table->GetActionStateVector2f));
+ (get_inst_proc_addr(instance, "xrGetActionStatePose", (PFN_xrVoidFunction*)&table->GetActionStatePose));
+ (get_inst_proc_addr(instance, "xrSyncActions", (PFN_xrVoidFunction*)&table->SyncActions));
+ (get_inst_proc_addr(instance, "xrEnumerateBoundSourcesForAction", (PFN_xrVoidFunction*)&table->EnumerateBoundSourcesForAction));
+ (get_inst_proc_addr(instance, "xrGetInputSourceLocalizedName", (PFN_xrVoidFunction*)&table->GetInputSourceLocalizedName));
+ (get_inst_proc_addr(instance, "xrApplyHapticFeedback", (PFN_xrVoidFunction*)&table->ApplyHapticFeedback));
+ (get_inst_proc_addr(instance, "xrStopHapticFeedback", (PFN_xrVoidFunction*)&table->StopHapticFeedback));
+
+ // ---- XR_KHR_android_thread_settings extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ (get_inst_proc_addr(instance, "xrSetAndroidApplicationThreadKHR", (PFN_xrVoidFunction*)&table->SetAndroidApplicationThreadKHR));
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_android_surface_swapchain extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ (get_inst_proc_addr(instance, "xrCreateSwapchainAndroidSurfaceKHR", (PFN_xrVoidFunction*)&table->CreateSwapchainAndroidSurfaceKHR));
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_opengl_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL)
+ (get_inst_proc_addr(instance, "xrGetOpenGLGraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetOpenGLGraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
+
+ // ---- XR_KHR_opengl_es_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+ (get_inst_proc_addr(instance, "xrGetOpenGLESGraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetOpenGLESGraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+
+ // ---- XR_KHR_vulkan_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanInstanceExtensionsKHR", (PFN_xrVoidFunction*)&table->GetVulkanInstanceExtensionsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanDeviceExtensionsKHR", (PFN_xrVoidFunction*)&table->GetVulkanDeviceExtensionsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsDeviceKHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsDeviceKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_KHR_D3D11_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D11)
+ (get_inst_proc_addr(instance, "xrGetD3D11GraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetD3D11GraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_D3D11)
+
+ // ---- XR_KHR_D3D12_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D12)
+ (get_inst_proc_addr(instance, "xrGetD3D12GraphicsRequirementsKHR", (PFN_xrVoidFunction*)&table->GetD3D12GraphicsRequirementsKHR));
+#endif // defined(XR_USE_GRAPHICS_API_D3D12)
+
+ // ---- XR_KHR_visibility_mask extension commands
+ (get_inst_proc_addr(instance, "xrGetVisibilityMaskKHR", (PFN_xrVoidFunction*)&table->GetVisibilityMaskKHR));
+
+ // ---- XR_KHR_win32_convert_performance_counter_time extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrConvertWin32PerformanceCounterToTimeKHR", (PFN_xrVoidFunction*)&table->ConvertWin32PerformanceCounterToTimeKHR));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrConvertTimeToWin32PerformanceCounterKHR", (PFN_xrVoidFunction*)&table->ConvertTimeToWin32PerformanceCounterKHR));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_KHR_convert_timespec_time extension commands
+#if defined(XR_USE_TIMESPEC)
+ (get_inst_proc_addr(instance, "xrConvertTimespecTimeToTimeKHR", (PFN_xrVoidFunction*)&table->ConvertTimespecTimeToTimeKHR));
+#endif // defined(XR_USE_TIMESPEC)
+#if defined(XR_USE_TIMESPEC)
+ (get_inst_proc_addr(instance, "xrConvertTimeToTimespecTimeKHR", (PFN_xrVoidFunction*)&table->ConvertTimeToTimespecTimeKHR));
+#endif // defined(XR_USE_TIMESPEC)
+
+ // ---- XR_KHR_vulkan_enable2 extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrCreateVulkanInstanceKHR", (PFN_xrVoidFunction*)&table->CreateVulkanInstanceKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrCreateVulkanDeviceKHR", (PFN_xrVoidFunction*)&table->CreateVulkanDeviceKHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsDevice2KHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsDevice2KHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ (get_inst_proc_addr(instance, "xrGetVulkanGraphicsRequirements2KHR", (PFN_xrVoidFunction*)&table->GetVulkanGraphicsRequirements2KHR));
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_EXT_performance_settings extension commands
+ (get_inst_proc_addr(instance, "xrPerfSettingsSetPerformanceLevelEXT", (PFN_xrVoidFunction*)&table->PerfSettingsSetPerformanceLevelEXT));
+
+ // ---- XR_EXT_thermal_query extension commands
+ (get_inst_proc_addr(instance, "xrThermalGetTemperatureTrendEXT", (PFN_xrVoidFunction*)&table->ThermalGetTemperatureTrendEXT));
+
+ // ---- XR_EXT_debug_utils extension commands
+ (get_inst_proc_addr(instance, "xrSetDebugUtilsObjectNameEXT", (PFN_xrVoidFunction*)&table->SetDebugUtilsObjectNameEXT));
+ (get_inst_proc_addr(instance, "xrCreateDebugUtilsMessengerEXT", (PFN_xrVoidFunction*)&table->CreateDebugUtilsMessengerEXT));
+ (get_inst_proc_addr(instance, "xrDestroyDebugUtilsMessengerEXT", (PFN_xrVoidFunction*)&table->DestroyDebugUtilsMessengerEXT));
+ (get_inst_proc_addr(instance, "xrSubmitDebugUtilsMessageEXT", (PFN_xrVoidFunction*)&table->SubmitDebugUtilsMessageEXT));
+ (get_inst_proc_addr(instance, "xrSessionBeginDebugUtilsLabelRegionEXT", (PFN_xrVoidFunction*)&table->SessionBeginDebugUtilsLabelRegionEXT));
+ (get_inst_proc_addr(instance, "xrSessionEndDebugUtilsLabelRegionEXT", (PFN_xrVoidFunction*)&table->SessionEndDebugUtilsLabelRegionEXT));
+ (get_inst_proc_addr(instance, "xrSessionInsertDebugUtilsLabelEXT", (PFN_xrVoidFunction*)&table->SessionInsertDebugUtilsLabelEXT));
+
+ // ---- XR_MSFT_spatial_anchor extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorSpaceMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorMSFT));
+
+ // ---- XR_EXT_conformance_automation extension commands
+ (get_inst_proc_addr(instance, "xrSetInputDeviceActiveEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceActiveEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceStateBoolEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceStateBoolEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceStateFloatEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceStateFloatEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceStateVector2fEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceStateVector2fEXT));
+ (get_inst_proc_addr(instance, "xrSetInputDeviceLocationEXT", (PFN_xrVoidFunction*)&table->SetInputDeviceLocationEXT));
+
+ // ---- XR_MSFT_spatial_graph_bridge extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialGraphNodeSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialGraphNodeSpaceMSFT));
+
+ // ---- XR_EXT_hand_tracking extension commands
+ (get_inst_proc_addr(instance, "xrCreateHandTrackerEXT", (PFN_xrVoidFunction*)&table->CreateHandTrackerEXT));
+ (get_inst_proc_addr(instance, "xrDestroyHandTrackerEXT", (PFN_xrVoidFunction*)&table->DestroyHandTrackerEXT));
+ (get_inst_proc_addr(instance, "xrLocateHandJointsEXT", (PFN_xrVoidFunction*)&table->LocateHandJointsEXT));
+
+ // ---- XR_MSFT_hand_tracking_mesh extension commands
+ (get_inst_proc_addr(instance, "xrCreateHandMeshSpaceMSFT", (PFN_xrVoidFunction*)&table->CreateHandMeshSpaceMSFT));
+ (get_inst_proc_addr(instance, "xrUpdateHandMeshMSFT", (PFN_xrVoidFunction*)&table->UpdateHandMeshMSFT));
+
+ // ---- XR_MSFT_controller_model extension commands
+ (get_inst_proc_addr(instance, "xrGetControllerModelKeyMSFT", (PFN_xrVoidFunction*)&table->GetControllerModelKeyMSFT));
+ (get_inst_proc_addr(instance, "xrLoadControllerModelMSFT", (PFN_xrVoidFunction*)&table->LoadControllerModelMSFT));
+ (get_inst_proc_addr(instance, "xrGetControllerModelPropertiesMSFT", (PFN_xrVoidFunction*)&table->GetControllerModelPropertiesMSFT));
+ (get_inst_proc_addr(instance, "xrGetControllerModelStateMSFT", (PFN_xrVoidFunction*)&table->GetControllerModelStateMSFT));
+
+ // ---- XR_MSFT_perception_anchor_interop extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorFromPerceptionAnchorMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorFromPerceptionAnchorMSFT));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrTryGetPerceptionAnchorFromSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->TryGetPerceptionAnchorFromSpatialAnchorMSFT));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_MSFT_composition_layer_reprojection extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateReprojectionModesMSFT", (PFN_xrVoidFunction*)&table->EnumerateReprojectionModesMSFT));
+
+ // ---- XR_FB_swapchain_update_state extension commands
+ (get_inst_proc_addr(instance, "xrUpdateSwapchainFB", (PFN_xrVoidFunction*)&table->UpdateSwapchainFB));
+ (get_inst_proc_addr(instance, "xrGetSwapchainStateFB", (PFN_xrVoidFunction*)&table->GetSwapchainStateFB));
+
+ // ---- XR_MSFT_scene_understanding extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateSceneComputeFeaturesMSFT", (PFN_xrVoidFunction*)&table->EnumerateSceneComputeFeaturesMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSceneObserverMSFT", (PFN_xrVoidFunction*)&table->CreateSceneObserverMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySceneObserverMSFT", (PFN_xrVoidFunction*)&table->DestroySceneObserverMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSceneMSFT", (PFN_xrVoidFunction*)&table->CreateSceneMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySceneMSFT", (PFN_xrVoidFunction*)&table->DestroySceneMSFT));
+ (get_inst_proc_addr(instance, "xrComputeNewSceneMSFT", (PFN_xrVoidFunction*)&table->ComputeNewSceneMSFT));
+ (get_inst_proc_addr(instance, "xrGetSceneComputeStateMSFT", (PFN_xrVoidFunction*)&table->GetSceneComputeStateMSFT));
+ (get_inst_proc_addr(instance, "xrGetSceneComponentsMSFT", (PFN_xrVoidFunction*)&table->GetSceneComponentsMSFT));
+ (get_inst_proc_addr(instance, "xrLocateSceneComponentsMSFT", (PFN_xrVoidFunction*)&table->LocateSceneComponentsMSFT));
+ (get_inst_proc_addr(instance, "xrGetSceneMeshBuffersMSFT", (PFN_xrVoidFunction*)&table->GetSceneMeshBuffersMSFT));
+
+ // ---- XR_MSFT_scene_understanding_serialization extension commands
+ (get_inst_proc_addr(instance, "xrDeserializeSceneMSFT", (PFN_xrVoidFunction*)&table->DeserializeSceneMSFT));
+ (get_inst_proc_addr(instance, "xrGetSerializedSceneFragmentDataMSFT", (PFN_xrVoidFunction*)&table->GetSerializedSceneFragmentDataMSFT));
+
+ // ---- XR_FB_display_refresh_rate extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateDisplayRefreshRatesFB", (PFN_xrVoidFunction*)&table->EnumerateDisplayRefreshRatesFB));
+ (get_inst_proc_addr(instance, "xrGetDisplayRefreshRateFB", (PFN_xrVoidFunction*)&table->GetDisplayRefreshRateFB));
+ (get_inst_proc_addr(instance, "xrRequestDisplayRefreshRateFB", (PFN_xrVoidFunction*)&table->RequestDisplayRefreshRateFB));
+
+ // ---- XR_HTCX_vive_tracker_interaction extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateViveTrackerPathsHTCX", (PFN_xrVoidFunction*)&table->EnumerateViveTrackerPathsHTCX));
+
+ // ---- XR_HTC_facial_tracking extension commands
+ (get_inst_proc_addr(instance, "xrCreateFacialTrackerHTC", (PFN_xrVoidFunction*)&table->CreateFacialTrackerHTC));
+ (get_inst_proc_addr(instance, "xrDestroyFacialTrackerHTC", (PFN_xrVoidFunction*)&table->DestroyFacialTrackerHTC));
+ (get_inst_proc_addr(instance, "xrGetFacialExpressionsHTC", (PFN_xrVoidFunction*)&table->GetFacialExpressionsHTC));
+
+ // ---- XR_FB_color_space extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateColorSpacesFB", (PFN_xrVoidFunction*)&table->EnumerateColorSpacesFB));
+ (get_inst_proc_addr(instance, "xrSetColorSpaceFB", (PFN_xrVoidFunction*)&table->SetColorSpaceFB));
+
+ // ---- XR_FB_hand_tracking_mesh extension commands
+ (get_inst_proc_addr(instance, "xrGetHandMeshFB", (PFN_xrVoidFunction*)&table->GetHandMeshFB));
+
+ // ---- XR_FB_foveation extension commands
+ (get_inst_proc_addr(instance, "xrCreateFoveationProfileFB", (PFN_xrVoidFunction*)&table->CreateFoveationProfileFB));
+ (get_inst_proc_addr(instance, "xrDestroyFoveationProfileFB", (PFN_xrVoidFunction*)&table->DestroyFoveationProfileFB));
+
+ // ---- XR_FB_keyboard_tracking extension commands
+ (get_inst_proc_addr(instance, "xrQuerySystemTrackedKeyboardFB", (PFN_xrVoidFunction*)&table->QuerySystemTrackedKeyboardFB));
+ (get_inst_proc_addr(instance, "xrCreateKeyboardSpaceFB", (PFN_xrVoidFunction*)&table->CreateKeyboardSpaceFB));
+
+ // ---- XR_FB_triangle_mesh extension commands
+ (get_inst_proc_addr(instance, "xrCreateTriangleMeshFB", (PFN_xrVoidFunction*)&table->CreateTriangleMeshFB));
+ (get_inst_proc_addr(instance, "xrDestroyTriangleMeshFB", (PFN_xrVoidFunction*)&table->DestroyTriangleMeshFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshGetVertexBufferFB", (PFN_xrVoidFunction*)&table->TriangleMeshGetVertexBufferFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshGetIndexBufferFB", (PFN_xrVoidFunction*)&table->TriangleMeshGetIndexBufferFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshBeginUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshBeginUpdateFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshEndUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshEndUpdateFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshBeginVertexBufferUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshBeginVertexBufferUpdateFB));
+ (get_inst_proc_addr(instance, "xrTriangleMeshEndVertexBufferUpdateFB", (PFN_xrVoidFunction*)&table->TriangleMeshEndVertexBufferUpdateFB));
+
+ // ---- XR_FB_passthrough extension commands
+ (get_inst_proc_addr(instance, "xrCreatePassthroughFB", (PFN_xrVoidFunction*)&table->CreatePassthroughFB));
+ (get_inst_proc_addr(instance, "xrDestroyPassthroughFB", (PFN_xrVoidFunction*)&table->DestroyPassthroughFB));
+ (get_inst_proc_addr(instance, "xrPassthroughStartFB", (PFN_xrVoidFunction*)&table->PassthroughStartFB));
+ (get_inst_proc_addr(instance, "xrPassthroughPauseFB", (PFN_xrVoidFunction*)&table->PassthroughPauseFB));
+ (get_inst_proc_addr(instance, "xrCreatePassthroughLayerFB", (PFN_xrVoidFunction*)&table->CreatePassthroughLayerFB));
+ (get_inst_proc_addr(instance, "xrDestroyPassthroughLayerFB", (PFN_xrVoidFunction*)&table->DestroyPassthroughLayerFB));
+ (get_inst_proc_addr(instance, "xrPassthroughLayerPauseFB", (PFN_xrVoidFunction*)&table->PassthroughLayerPauseFB));
+ (get_inst_proc_addr(instance, "xrPassthroughLayerResumeFB", (PFN_xrVoidFunction*)&table->PassthroughLayerResumeFB));
+ (get_inst_proc_addr(instance, "xrPassthroughLayerSetStyleFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetStyleFB));
+ (get_inst_proc_addr(instance, "xrCreateGeometryInstanceFB", (PFN_xrVoidFunction*)&table->CreateGeometryInstanceFB));
+ (get_inst_proc_addr(instance, "xrDestroyGeometryInstanceFB", (PFN_xrVoidFunction*)&table->DestroyGeometryInstanceFB));
+ (get_inst_proc_addr(instance, "xrGeometryInstanceSetTransformFB", (PFN_xrVoidFunction*)&table->GeometryInstanceSetTransformFB));
+
+ // ---- XR_FB_render_model extension commands
+ (get_inst_proc_addr(instance, "xrEnumerateRenderModelPathsFB", (PFN_xrVoidFunction*)&table->EnumerateRenderModelPathsFB));
+ (get_inst_proc_addr(instance, "xrGetRenderModelPropertiesFB", (PFN_xrVoidFunction*)&table->GetRenderModelPropertiesFB));
+ (get_inst_proc_addr(instance, "xrLoadRenderModelFB", (PFN_xrVoidFunction*)&table->LoadRenderModelFB));
+
+ // ---- XR_VARJO_environment_depth_estimation extension commands
+ (get_inst_proc_addr(instance, "xrSetEnvironmentDepthEstimationVARJO", (PFN_xrVoidFunction*)&table->SetEnvironmentDepthEstimationVARJO));
+
+ // ---- XR_VARJO_marker_tracking extension commands
+ (get_inst_proc_addr(instance, "xrSetMarkerTrackingVARJO", (PFN_xrVoidFunction*)&table->SetMarkerTrackingVARJO));
+ (get_inst_proc_addr(instance, "xrSetMarkerTrackingTimeoutVARJO", (PFN_xrVoidFunction*)&table->SetMarkerTrackingTimeoutVARJO));
+ (get_inst_proc_addr(instance, "xrSetMarkerTrackingPredictionVARJO", (PFN_xrVoidFunction*)&table->SetMarkerTrackingPredictionVARJO));
+ (get_inst_proc_addr(instance, "xrGetMarkerSizeVARJO", (PFN_xrVoidFunction*)&table->GetMarkerSizeVARJO));
+ (get_inst_proc_addr(instance, "xrCreateMarkerSpaceVARJO", (PFN_xrVoidFunction*)&table->CreateMarkerSpaceVARJO));
+
+ // ---- XR_MSFT_spatial_anchor_persistence extension commands
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorStoreConnectionMSFT));
+ (get_inst_proc_addr(instance, "xrDestroySpatialAnchorStoreConnectionMSFT", (PFN_xrVoidFunction*)&table->DestroySpatialAnchorStoreConnectionMSFT));
+ (get_inst_proc_addr(instance, "xrPersistSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->PersistSpatialAnchorMSFT));
+ (get_inst_proc_addr(instance, "xrEnumeratePersistedSpatialAnchorNamesMSFT", (PFN_xrVoidFunction*)&table->EnumeratePersistedSpatialAnchorNamesMSFT));
+ (get_inst_proc_addr(instance, "xrCreateSpatialAnchorFromPersistedNameMSFT", (PFN_xrVoidFunction*)&table->CreateSpatialAnchorFromPersistedNameMSFT));
+ (get_inst_proc_addr(instance, "xrUnpersistSpatialAnchorMSFT", (PFN_xrVoidFunction*)&table->UnpersistSpatialAnchorMSFT));
+ (get_inst_proc_addr(instance, "xrClearSpatialAnchorStoreMSFT", (PFN_xrVoidFunction*)&table->ClearSpatialAnchorStoreMSFT));
+
+ // ---- XR_OCULUS_audio_device_guid extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrGetAudioOutputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioOutputDeviceGuidOculus));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ (get_inst_proc_addr(instance, "xrGetAudioInputDeviceGuidOculus", (PFN_xrVoidFunction*)&table->GetAudioInputDeviceGuidOculus));
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_ALMALENCE_digital_lens_control extension commands
+ (get_inst_proc_addr(instance, "xrSetDigitalLensControlALMALENCE", (PFN_xrVoidFunction*)&table->SetDigitalLensControlALMALENCE));
+
+ // ---- XR_FB_passthrough_keyboard_hands extension commands
+ (get_inst_proc_addr(instance, "xrPassthroughLayerSetKeyboardHandsIntensityFB", (PFN_xrVoidFunction*)&table->PassthroughLayerSetKeyboardHandsIntensityFB));
+}
+
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
diff --git a/thirdparty/openxr/src/xr_generated_dispatch_table.h b/thirdparty/openxr/src/xr_generated_dispatch_table.h
new file mode 100644
index 0000000000..34e0de93f5
--- /dev/null
+++ b/thirdparty/openxr/src/xr_generated_dispatch_table.h
@@ -0,0 +1,355 @@
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+// *********** THIS FILE IS GENERATED - DO NOT EDIT ***********
+// See utility_source_generator.py for modifications
+// ************************************************************
+
+// Copyright (c) 2017-2022, The Khronos Group Inc.
+// Copyright (c) 2017-2019 Valve Corporation
+// Copyright (c) 2017-2019 LunarG, Inc.
+//
+// SPDX-License-Identifier: Apache-2.0
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+// Author: Mark Young <marky@lunarg.com>
+//
+
+#pragma once
+#include "xr_dependencies.h"
+#include <openxr/openxr.h>
+#include <openxr/openxr_platform.h>
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+// Generated dispatch table
+struct XrGeneratedDispatchTable {
+
+ // ---- Core 1.0 commands
+ PFN_xrGetInstanceProcAddr GetInstanceProcAddr;
+ PFN_xrEnumerateApiLayerProperties EnumerateApiLayerProperties;
+ PFN_xrEnumerateInstanceExtensionProperties EnumerateInstanceExtensionProperties;
+ PFN_xrCreateInstance CreateInstance;
+ PFN_xrDestroyInstance DestroyInstance;
+ PFN_xrGetInstanceProperties GetInstanceProperties;
+ PFN_xrPollEvent PollEvent;
+ PFN_xrResultToString ResultToString;
+ PFN_xrStructureTypeToString StructureTypeToString;
+ PFN_xrGetSystem GetSystem;
+ PFN_xrGetSystemProperties GetSystemProperties;
+ PFN_xrEnumerateEnvironmentBlendModes EnumerateEnvironmentBlendModes;
+ PFN_xrCreateSession CreateSession;
+ PFN_xrDestroySession DestroySession;
+ PFN_xrEnumerateReferenceSpaces EnumerateReferenceSpaces;
+ PFN_xrCreateReferenceSpace CreateReferenceSpace;
+ PFN_xrGetReferenceSpaceBoundsRect GetReferenceSpaceBoundsRect;
+ PFN_xrCreateActionSpace CreateActionSpace;
+ PFN_xrLocateSpace LocateSpace;
+ PFN_xrDestroySpace DestroySpace;
+ PFN_xrEnumerateViewConfigurations EnumerateViewConfigurations;
+ PFN_xrGetViewConfigurationProperties GetViewConfigurationProperties;
+ PFN_xrEnumerateViewConfigurationViews EnumerateViewConfigurationViews;
+ PFN_xrEnumerateSwapchainFormats EnumerateSwapchainFormats;
+ PFN_xrCreateSwapchain CreateSwapchain;
+ PFN_xrDestroySwapchain DestroySwapchain;
+ PFN_xrEnumerateSwapchainImages EnumerateSwapchainImages;
+ PFN_xrAcquireSwapchainImage AcquireSwapchainImage;
+ PFN_xrWaitSwapchainImage WaitSwapchainImage;
+ PFN_xrReleaseSwapchainImage ReleaseSwapchainImage;
+ PFN_xrBeginSession BeginSession;
+ PFN_xrEndSession EndSession;
+ PFN_xrRequestExitSession RequestExitSession;
+ PFN_xrWaitFrame WaitFrame;
+ PFN_xrBeginFrame BeginFrame;
+ PFN_xrEndFrame EndFrame;
+ PFN_xrLocateViews LocateViews;
+ PFN_xrStringToPath StringToPath;
+ PFN_xrPathToString PathToString;
+ PFN_xrCreateActionSet CreateActionSet;
+ PFN_xrDestroyActionSet DestroyActionSet;
+ PFN_xrCreateAction CreateAction;
+ PFN_xrDestroyAction DestroyAction;
+ PFN_xrSuggestInteractionProfileBindings SuggestInteractionProfileBindings;
+ PFN_xrAttachSessionActionSets AttachSessionActionSets;
+ PFN_xrGetCurrentInteractionProfile GetCurrentInteractionProfile;
+ PFN_xrGetActionStateBoolean GetActionStateBoolean;
+ PFN_xrGetActionStateFloat GetActionStateFloat;
+ PFN_xrGetActionStateVector2f GetActionStateVector2f;
+ PFN_xrGetActionStatePose GetActionStatePose;
+ PFN_xrSyncActions SyncActions;
+ PFN_xrEnumerateBoundSourcesForAction EnumerateBoundSourcesForAction;
+ PFN_xrGetInputSourceLocalizedName GetInputSourceLocalizedName;
+ PFN_xrApplyHapticFeedback ApplyHapticFeedback;
+ PFN_xrStopHapticFeedback StopHapticFeedback;
+
+ // ---- XR_KHR_android_thread_settings extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ PFN_xrSetAndroidApplicationThreadKHR SetAndroidApplicationThreadKHR;
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_android_surface_swapchain extension commands
+#if defined(XR_USE_PLATFORM_ANDROID)
+ PFN_xrCreateSwapchainAndroidSurfaceKHR CreateSwapchainAndroidSurfaceKHR;
+#endif // defined(XR_USE_PLATFORM_ANDROID)
+
+ // ---- XR_KHR_opengl_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL)
+ PFN_xrGetOpenGLGraphicsRequirementsKHR GetOpenGLGraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL)
+
+ // ---- XR_KHR_opengl_es_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+ PFN_xrGetOpenGLESGraphicsRequirementsKHR GetOpenGLESGraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_OPENGL_ES)
+
+ // ---- XR_KHR_vulkan_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanInstanceExtensionsKHR GetVulkanInstanceExtensionsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanDeviceExtensionsKHR GetVulkanDeviceExtensionsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsDeviceKHR GetVulkanGraphicsDeviceKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsRequirementsKHR GetVulkanGraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_KHR_D3D11_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D11)
+ PFN_xrGetD3D11GraphicsRequirementsKHR GetD3D11GraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_D3D11)
+
+ // ---- XR_KHR_D3D12_enable extension commands
+#if defined(XR_USE_GRAPHICS_API_D3D12)
+ PFN_xrGetD3D12GraphicsRequirementsKHR GetD3D12GraphicsRequirementsKHR;
+#endif // defined(XR_USE_GRAPHICS_API_D3D12)
+
+ // ---- XR_KHR_visibility_mask extension commands
+ PFN_xrGetVisibilityMaskKHR GetVisibilityMaskKHR;
+
+ // ---- XR_KHR_win32_convert_performance_counter_time extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrConvertWin32PerformanceCounterToTimeKHR ConvertWin32PerformanceCounterToTimeKHR;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrConvertTimeToWin32PerformanceCounterKHR ConvertTimeToWin32PerformanceCounterKHR;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_KHR_convert_timespec_time extension commands
+#if defined(XR_USE_TIMESPEC)
+ PFN_xrConvertTimespecTimeToTimeKHR ConvertTimespecTimeToTimeKHR;
+#endif // defined(XR_USE_TIMESPEC)
+#if defined(XR_USE_TIMESPEC)
+ PFN_xrConvertTimeToTimespecTimeKHR ConvertTimeToTimespecTimeKHR;
+#endif // defined(XR_USE_TIMESPEC)
+
+ // ---- XR_KHR_loader_init extension commands
+ PFN_xrInitializeLoaderKHR InitializeLoaderKHR;
+
+ // ---- XR_KHR_vulkan_enable2 extension commands
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrCreateVulkanInstanceKHR CreateVulkanInstanceKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrCreateVulkanDeviceKHR CreateVulkanDeviceKHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsDevice2KHR GetVulkanGraphicsDevice2KHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+#if defined(XR_USE_GRAPHICS_API_VULKAN)
+ PFN_xrGetVulkanGraphicsRequirements2KHR GetVulkanGraphicsRequirements2KHR;
+#endif // defined(XR_USE_GRAPHICS_API_VULKAN)
+
+ // ---- XR_EXT_performance_settings extension commands
+ PFN_xrPerfSettingsSetPerformanceLevelEXT PerfSettingsSetPerformanceLevelEXT;
+
+ // ---- XR_EXT_thermal_query extension commands
+ PFN_xrThermalGetTemperatureTrendEXT ThermalGetTemperatureTrendEXT;
+
+ // ---- XR_EXT_debug_utils extension commands
+ PFN_xrSetDebugUtilsObjectNameEXT SetDebugUtilsObjectNameEXT;
+ PFN_xrCreateDebugUtilsMessengerEXT CreateDebugUtilsMessengerEXT;
+ PFN_xrDestroyDebugUtilsMessengerEXT DestroyDebugUtilsMessengerEXT;
+ PFN_xrSubmitDebugUtilsMessageEXT SubmitDebugUtilsMessageEXT;
+ PFN_xrSessionBeginDebugUtilsLabelRegionEXT SessionBeginDebugUtilsLabelRegionEXT;
+ PFN_xrSessionEndDebugUtilsLabelRegionEXT SessionEndDebugUtilsLabelRegionEXT;
+ PFN_xrSessionInsertDebugUtilsLabelEXT SessionInsertDebugUtilsLabelEXT;
+
+ // ---- XR_MSFT_spatial_anchor extension commands
+ PFN_xrCreateSpatialAnchorMSFT CreateSpatialAnchorMSFT;
+ PFN_xrCreateSpatialAnchorSpaceMSFT CreateSpatialAnchorSpaceMSFT;
+ PFN_xrDestroySpatialAnchorMSFT DestroySpatialAnchorMSFT;
+
+ // ---- XR_EXT_conformance_automation extension commands
+ PFN_xrSetInputDeviceActiveEXT SetInputDeviceActiveEXT;
+ PFN_xrSetInputDeviceStateBoolEXT SetInputDeviceStateBoolEXT;
+ PFN_xrSetInputDeviceStateFloatEXT SetInputDeviceStateFloatEXT;
+ PFN_xrSetInputDeviceStateVector2fEXT SetInputDeviceStateVector2fEXT;
+ PFN_xrSetInputDeviceLocationEXT SetInputDeviceLocationEXT;
+
+ // ---- XR_MSFT_spatial_graph_bridge extension commands
+ PFN_xrCreateSpatialGraphNodeSpaceMSFT CreateSpatialGraphNodeSpaceMSFT;
+
+ // ---- XR_EXT_hand_tracking extension commands
+ PFN_xrCreateHandTrackerEXT CreateHandTrackerEXT;
+ PFN_xrDestroyHandTrackerEXT DestroyHandTrackerEXT;
+ PFN_xrLocateHandJointsEXT LocateHandJointsEXT;
+
+ // ---- XR_MSFT_hand_tracking_mesh extension commands
+ PFN_xrCreateHandMeshSpaceMSFT CreateHandMeshSpaceMSFT;
+ PFN_xrUpdateHandMeshMSFT UpdateHandMeshMSFT;
+
+ // ---- XR_MSFT_controller_model extension commands
+ PFN_xrGetControllerModelKeyMSFT GetControllerModelKeyMSFT;
+ PFN_xrLoadControllerModelMSFT LoadControllerModelMSFT;
+ PFN_xrGetControllerModelPropertiesMSFT GetControllerModelPropertiesMSFT;
+ PFN_xrGetControllerModelStateMSFT GetControllerModelStateMSFT;
+
+ // ---- XR_MSFT_perception_anchor_interop extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrCreateSpatialAnchorFromPerceptionAnchorMSFT CreateSpatialAnchorFromPerceptionAnchorMSFT;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrTryGetPerceptionAnchorFromSpatialAnchorMSFT TryGetPerceptionAnchorFromSpatialAnchorMSFT;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_MSFT_composition_layer_reprojection extension commands
+ PFN_xrEnumerateReprojectionModesMSFT EnumerateReprojectionModesMSFT;
+
+ // ---- XR_FB_swapchain_update_state extension commands
+ PFN_xrUpdateSwapchainFB UpdateSwapchainFB;
+ PFN_xrGetSwapchainStateFB GetSwapchainStateFB;
+
+ // ---- XR_MSFT_scene_understanding extension commands
+ PFN_xrEnumerateSceneComputeFeaturesMSFT EnumerateSceneComputeFeaturesMSFT;
+ PFN_xrCreateSceneObserverMSFT CreateSceneObserverMSFT;
+ PFN_xrDestroySceneObserverMSFT DestroySceneObserverMSFT;
+ PFN_xrCreateSceneMSFT CreateSceneMSFT;
+ PFN_xrDestroySceneMSFT DestroySceneMSFT;
+ PFN_xrComputeNewSceneMSFT ComputeNewSceneMSFT;
+ PFN_xrGetSceneComputeStateMSFT GetSceneComputeStateMSFT;
+ PFN_xrGetSceneComponentsMSFT GetSceneComponentsMSFT;
+ PFN_xrLocateSceneComponentsMSFT LocateSceneComponentsMSFT;
+ PFN_xrGetSceneMeshBuffersMSFT GetSceneMeshBuffersMSFT;
+
+ // ---- XR_MSFT_scene_understanding_serialization extension commands
+ PFN_xrDeserializeSceneMSFT DeserializeSceneMSFT;
+ PFN_xrGetSerializedSceneFragmentDataMSFT GetSerializedSceneFragmentDataMSFT;
+
+ // ---- XR_FB_display_refresh_rate extension commands
+ PFN_xrEnumerateDisplayRefreshRatesFB EnumerateDisplayRefreshRatesFB;
+ PFN_xrGetDisplayRefreshRateFB GetDisplayRefreshRateFB;
+ PFN_xrRequestDisplayRefreshRateFB RequestDisplayRefreshRateFB;
+
+ // ---- XR_HTCX_vive_tracker_interaction extension commands
+ PFN_xrEnumerateViveTrackerPathsHTCX EnumerateViveTrackerPathsHTCX;
+
+ // ---- XR_HTC_facial_tracking extension commands
+ PFN_xrCreateFacialTrackerHTC CreateFacialTrackerHTC;
+ PFN_xrDestroyFacialTrackerHTC DestroyFacialTrackerHTC;
+ PFN_xrGetFacialExpressionsHTC GetFacialExpressionsHTC;
+
+ // ---- XR_FB_color_space extension commands
+ PFN_xrEnumerateColorSpacesFB EnumerateColorSpacesFB;
+ PFN_xrSetColorSpaceFB SetColorSpaceFB;
+
+ // ---- XR_FB_hand_tracking_mesh extension commands
+ PFN_xrGetHandMeshFB GetHandMeshFB;
+
+ // ---- XR_FB_foveation extension commands
+ PFN_xrCreateFoveationProfileFB CreateFoveationProfileFB;
+ PFN_xrDestroyFoveationProfileFB DestroyFoveationProfileFB;
+
+ // ---- XR_FB_keyboard_tracking extension commands
+ PFN_xrQuerySystemTrackedKeyboardFB QuerySystemTrackedKeyboardFB;
+ PFN_xrCreateKeyboardSpaceFB CreateKeyboardSpaceFB;
+
+ // ---- XR_FB_triangle_mesh extension commands
+ PFN_xrCreateTriangleMeshFB CreateTriangleMeshFB;
+ PFN_xrDestroyTriangleMeshFB DestroyTriangleMeshFB;
+ PFN_xrTriangleMeshGetVertexBufferFB TriangleMeshGetVertexBufferFB;
+ PFN_xrTriangleMeshGetIndexBufferFB TriangleMeshGetIndexBufferFB;
+ PFN_xrTriangleMeshBeginUpdateFB TriangleMeshBeginUpdateFB;
+ PFN_xrTriangleMeshEndUpdateFB TriangleMeshEndUpdateFB;
+ PFN_xrTriangleMeshBeginVertexBufferUpdateFB TriangleMeshBeginVertexBufferUpdateFB;
+ PFN_xrTriangleMeshEndVertexBufferUpdateFB TriangleMeshEndVertexBufferUpdateFB;
+
+ // ---- XR_FB_passthrough extension commands
+ PFN_xrCreatePassthroughFB CreatePassthroughFB;
+ PFN_xrDestroyPassthroughFB DestroyPassthroughFB;
+ PFN_xrPassthroughStartFB PassthroughStartFB;
+ PFN_xrPassthroughPauseFB PassthroughPauseFB;
+ PFN_xrCreatePassthroughLayerFB CreatePassthroughLayerFB;
+ PFN_xrDestroyPassthroughLayerFB DestroyPassthroughLayerFB;
+ PFN_xrPassthroughLayerPauseFB PassthroughLayerPauseFB;
+ PFN_xrPassthroughLayerResumeFB PassthroughLayerResumeFB;
+ PFN_xrPassthroughLayerSetStyleFB PassthroughLayerSetStyleFB;
+ PFN_xrCreateGeometryInstanceFB CreateGeometryInstanceFB;
+ PFN_xrDestroyGeometryInstanceFB DestroyGeometryInstanceFB;
+ PFN_xrGeometryInstanceSetTransformFB GeometryInstanceSetTransformFB;
+
+ // ---- XR_FB_render_model extension commands
+ PFN_xrEnumerateRenderModelPathsFB EnumerateRenderModelPathsFB;
+ PFN_xrGetRenderModelPropertiesFB GetRenderModelPropertiesFB;
+ PFN_xrLoadRenderModelFB LoadRenderModelFB;
+
+ // ---- XR_VARJO_environment_depth_estimation extension commands
+ PFN_xrSetEnvironmentDepthEstimationVARJO SetEnvironmentDepthEstimationVARJO;
+
+ // ---- XR_VARJO_marker_tracking extension commands
+ PFN_xrSetMarkerTrackingVARJO SetMarkerTrackingVARJO;
+ PFN_xrSetMarkerTrackingTimeoutVARJO SetMarkerTrackingTimeoutVARJO;
+ PFN_xrSetMarkerTrackingPredictionVARJO SetMarkerTrackingPredictionVARJO;
+ PFN_xrGetMarkerSizeVARJO GetMarkerSizeVARJO;
+ PFN_xrCreateMarkerSpaceVARJO CreateMarkerSpaceVARJO;
+
+ // ---- XR_MSFT_spatial_anchor_persistence extension commands
+ PFN_xrCreateSpatialAnchorStoreConnectionMSFT CreateSpatialAnchorStoreConnectionMSFT;
+ PFN_xrDestroySpatialAnchorStoreConnectionMSFT DestroySpatialAnchorStoreConnectionMSFT;
+ PFN_xrPersistSpatialAnchorMSFT PersistSpatialAnchorMSFT;
+ PFN_xrEnumeratePersistedSpatialAnchorNamesMSFT EnumeratePersistedSpatialAnchorNamesMSFT;
+ PFN_xrCreateSpatialAnchorFromPersistedNameMSFT CreateSpatialAnchorFromPersistedNameMSFT;
+ PFN_xrUnpersistSpatialAnchorMSFT UnpersistSpatialAnchorMSFT;
+ PFN_xrClearSpatialAnchorStoreMSFT ClearSpatialAnchorStoreMSFT;
+
+ // ---- XR_OCULUS_audio_device_guid extension commands
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrGetAudioOutputDeviceGuidOculus GetAudioOutputDeviceGuidOculus;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+#if defined(XR_USE_PLATFORM_WIN32)
+ PFN_xrGetAudioInputDeviceGuidOculus GetAudioInputDeviceGuidOculus;
+#endif // defined(XR_USE_PLATFORM_WIN32)
+
+ // ---- XR_ALMALENCE_digital_lens_control extension commands
+ PFN_xrSetDigitalLensControlALMALENCE SetDigitalLensControlALMALENCE;
+
+ // ---- XR_FB_passthrough_keyboard_hands extension commands
+ PFN_xrPassthroughLayerSetKeyboardHandsIntensityFB PassthroughLayerSetKeyboardHandsIntensityFB;
+};
+
+
+// Prototype for dispatch table helper function
+void GeneratedXrPopulateDispatchTable(struct XrGeneratedDispatchTable *table,
+ XrInstance instance,
+ PFN_xrGetInstanceProcAddr get_inst_proc_addr);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
diff --git a/thirdparty/spirv-reflect/include/spirv/unified1/spirv.h b/thirdparty/spirv-reflect/include/spirv/unified1/spirv.h
index 949f1980e7..c15736e255 100644
--- a/thirdparty/spirv-reflect/include/spirv/unified1/spirv.h
+++ b/thirdparty/spirv-reflect/include/spirv/unified1/spirv.h
@@ -53,12 +53,12 @@
typedef unsigned int SpvId;
-#define SPV_VERSION 0x10500
-#define SPV_REVISION 4
+#define SPV_VERSION 0x10600
+#define SPV_REVISION 1
static const unsigned int SpvMagicNumber = 0x07230203;
-static const unsigned int SpvVersion = 0x00010500;
-static const unsigned int SpvRevision = 4;
+static const unsigned int SpvVersion = 0x00010600;
+static const unsigned int SpvRevision = 1;
static const unsigned int SpvOpCodeMask = 0xffff;
static const unsigned int SpvWordCountShift = 16;
@@ -69,6 +69,7 @@ typedef enum SpvSourceLanguage_ {
SpvSourceLanguageOpenCL_C = 3,
SpvSourceLanguageOpenCL_CPP = 4,
SpvSourceLanguageHLSL = 5,
+ SpvSourceLanguageCPP_for_OpenCL = 6,
SpvSourceLanguageMax = 0x7fffffff,
} SpvSourceLanguage;
@@ -154,6 +155,7 @@ typedef enum SpvExecutionMode_ {
SpvExecutionModeSubgroupsPerWorkgroupId = 37,
SpvExecutionModeLocalSizeId = 38,
SpvExecutionModeLocalSizeHintId = 39,
+ SpvExecutionModeSubgroupUniformControlFlowKHR = 4421,
SpvExecutionModePostDepthCoverage = 4446,
SpvExecutionModeDenormPreserve = 4459,
SpvExecutionModeDenormFlushToZero = 4460,
@@ -172,10 +174,16 @@ typedef enum SpvExecutionMode_ {
SpvExecutionModeSampleInterlockUnorderedEXT = 5369,
SpvExecutionModeShadingRateInterlockOrderedEXT = 5370,
SpvExecutionModeShadingRateInterlockUnorderedEXT = 5371,
+ SpvExecutionModeSharedLocalMemorySizeINTEL = 5618,
+ SpvExecutionModeRoundingModeRTPINTEL = 5620,
+ SpvExecutionModeRoundingModeRTNINTEL = 5621,
+ SpvExecutionModeFloatingPointModeALTINTEL = 5622,
+ SpvExecutionModeFloatingPointModeIEEEINTEL = 5623,
SpvExecutionModeMaxWorkgroupSizeINTEL = 5893,
SpvExecutionModeMaxWorkDimINTEL = 5894,
SpvExecutionModeNoGlobalOffsetINTEL = 5895,
SpvExecutionModeNumSIMDWorkitemsINTEL = 5896,
+ SpvExecutionModeSchedulerTargetFmaxMhzINTEL = 5903,
SpvExecutionModeMax = 0x7fffffff,
} SpvExecutionMode;
@@ -208,6 +216,8 @@ typedef enum SpvStorageClass_ {
SpvStorageClassPhysicalStorageBuffer = 5349,
SpvStorageClassPhysicalStorageBufferEXT = 5349,
SpvStorageClassCodeSectionINTEL = 5605,
+ SpvStorageClassDeviceOnlyINTEL = 5936,
+ SpvStorageClassHostOnlyINTEL = 5937,
SpvStorageClassMax = 0x7fffffff,
} SpvStorageClass;
@@ -347,6 +357,8 @@ typedef enum SpvImageOperandsShift_ {
SpvImageOperandsVolatileTexelKHRShift = 11,
SpvImageOperandsSignExtendShift = 12,
SpvImageOperandsZeroExtendShift = 13,
+ SpvImageOperandsNontemporalShift = 14,
+ SpvImageOperandsOffsetsShift = 16,
SpvImageOperandsMax = 0x7fffffff,
} SpvImageOperandsShift;
@@ -370,6 +382,8 @@ typedef enum SpvImageOperandsMask_ {
SpvImageOperandsVolatileTexelKHRMask = 0x00000800,
SpvImageOperandsSignExtendMask = 0x00001000,
SpvImageOperandsZeroExtendMask = 0x00002000,
+ SpvImageOperandsNontemporalMask = 0x00004000,
+ SpvImageOperandsOffsetsMask = 0x00010000,
} SpvImageOperandsMask;
typedef enum SpvFPFastMathModeShift_ {
@@ -378,6 +392,8 @@ typedef enum SpvFPFastMathModeShift_ {
SpvFPFastMathModeNSZShift = 2,
SpvFPFastMathModeAllowRecipShift = 3,
SpvFPFastMathModeFastShift = 4,
+ SpvFPFastMathModeAllowContractFastINTELShift = 16,
+ SpvFPFastMathModeAllowReassocINTELShift = 17,
SpvFPFastMathModeMax = 0x7fffffff,
} SpvFPFastMathModeShift;
@@ -388,6 +404,8 @@ typedef enum SpvFPFastMathModeMask_ {
SpvFPFastMathModeNSZMask = 0x00000004,
SpvFPFastMathModeAllowRecipMask = 0x00000008,
SpvFPFastMathModeFastMask = 0x00000010,
+ SpvFPFastMathModeAllowContractFastINTELMask = 0x00010000,
+ SpvFPFastMathModeAllowReassocINTELMask = 0x00020000,
} SpvFPFastMathModeMask;
typedef enum SpvFPRoundingMode_ {
@@ -401,6 +419,7 @@ typedef enum SpvFPRoundingMode_ {
typedef enum SpvLinkageType_ {
SpvLinkageTypeExport = 0,
SpvLinkageTypeImport = 1,
+ SpvLinkageTypeLinkOnceODR = 2,
SpvLinkageTypeMax = 0x7fffffff,
} SpvLinkageType;
@@ -481,6 +500,7 @@ typedef enum SpvDecoration_ {
SpvDecorationPerPrimitiveNV = 5271,
SpvDecorationPerViewNV = 5272,
SpvDecorationPerTaskNV = 5273,
+ SpvDecorationPerVertexKHR = 5285,
SpvDecorationPerVertexNV = 5285,
SpvDecorationNonUniform = 5300,
SpvDecorationNonUniformEXT = 5300,
@@ -488,12 +508,26 @@ typedef enum SpvDecoration_ {
SpvDecorationRestrictPointerEXT = 5355,
SpvDecorationAliasedPointer = 5356,
SpvDecorationAliasedPointerEXT = 5356,
+ SpvDecorationBindlessSamplerNV = 5398,
+ SpvDecorationBindlessImageNV = 5399,
+ SpvDecorationBoundSamplerNV = 5400,
+ SpvDecorationBoundImageNV = 5401,
+ SpvDecorationSIMTCallINTEL = 5599,
SpvDecorationReferencedIndirectlyINTEL = 5602,
+ SpvDecorationClobberINTEL = 5607,
+ SpvDecorationSideEffectsINTEL = 5608,
+ SpvDecorationVectorComputeVariableINTEL = 5624,
+ SpvDecorationFuncParamIOKindINTEL = 5625,
+ SpvDecorationVectorComputeFunctionINTEL = 5626,
+ SpvDecorationStackCallINTEL = 5627,
+ SpvDecorationGlobalVariableOffsetINTEL = 5628,
SpvDecorationCounterBuffer = 5634,
SpvDecorationHlslCounterBufferGOOGLE = 5634,
SpvDecorationHlslSemanticGOOGLE = 5635,
SpvDecorationUserSemantic = 5635,
SpvDecorationUserTypeGOOGLE = 5636,
+ SpvDecorationFunctionRoundingModeINTEL = 5822,
+ SpvDecorationFunctionDenormModeINTEL = 5823,
SpvDecorationRegisterINTEL = 5825,
SpvDecorationMemoryINTEL = 5826,
SpvDecorationNumbanksINTEL = 5827,
@@ -506,6 +540,18 @@ typedef enum SpvDecoration_ {
SpvDecorationMergeINTEL = 5834,
SpvDecorationBankBitsINTEL = 5835,
SpvDecorationForcePow2DepthINTEL = 5836,
+ SpvDecorationBurstCoalesceINTEL = 5899,
+ SpvDecorationCacheSizeINTEL = 5900,
+ SpvDecorationDontStaticallyCoalesceINTEL = 5901,
+ SpvDecorationPrefetchINTEL = 5902,
+ SpvDecorationStallEnableINTEL = 5905,
+ SpvDecorationFuseLoopsInFunctionINTEL = 5907,
+ SpvDecorationBufferLocationINTEL = 5921,
+ SpvDecorationIOPipeStorageINTEL = 5944,
+ SpvDecorationFunctionFloatingPointModeINTEL = 6080,
+ SpvDecorationSingleElementVectorINTEL = 6085,
+ SpvDecorationVectorComputeCallableFunctionINTEL = 6087,
+ SpvDecorationMediaBlockIOINTEL = 6140,
SpvDecorationMax = 0x7fffffff,
} SpvDecoration;
@@ -590,7 +636,9 @@ typedef enum SpvBuiltIn_ {
SpvBuiltInLayerPerViewNV = 5279,
SpvBuiltInMeshViewCountNV = 5280,
SpvBuiltInMeshViewIndicesNV = 5281,
+ SpvBuiltInBaryCoordKHR = 5286,
SpvBuiltInBaryCoordNV = 5286,
+ SpvBuiltInBaryCoordNoPerspKHR = 5287,
SpvBuiltInBaryCoordNoPerspNV = 5287,
SpvBuiltInFragSizeEXT = 5292,
SpvBuiltInFragmentSizeNV = 5292,
@@ -621,6 +669,7 @@ typedef enum SpvBuiltIn_ {
SpvBuiltInHitTNV = 5332,
SpvBuiltInHitKindKHR = 5333,
SpvBuiltInHitKindNV = 5333,
+ SpvBuiltInCurrentRayTimeNV = 5334,
SpvBuiltInIncomingRayFlagsKHR = 5351,
SpvBuiltInIncomingRayFlagsNV = 5351,
SpvBuiltInRayGeometryIndexKHR = 5352,
@@ -660,6 +709,7 @@ typedef enum SpvLoopControlShift_ {
SpvLoopControlLoopCoalesceINTELShift = 20,
SpvLoopControlMaxInterleavingINTELShift = 21,
SpvLoopControlSpeculatedIterationsINTELShift = 22,
+ SpvLoopControlNoFusionINTELShift = 23,
SpvLoopControlMax = 0x7fffffff,
} SpvLoopControlShift;
@@ -681,6 +731,7 @@ typedef enum SpvLoopControlMask_ {
SpvLoopControlLoopCoalesceINTELMask = 0x00100000,
SpvLoopControlMaxInterleavingINTELMask = 0x00200000,
SpvLoopControlSpeculatedIterationsINTELMask = 0x00400000,
+ SpvLoopControlNoFusionINTELMask = 0x00800000,
} SpvLoopControlMask;
typedef enum SpvFunctionControlShift_ {
@@ -688,6 +739,7 @@ typedef enum SpvFunctionControlShift_ {
SpvFunctionControlDontInlineShift = 1,
SpvFunctionControlPureShift = 2,
SpvFunctionControlConstShift = 3,
+ SpvFunctionControlOptNoneINTELShift = 16,
SpvFunctionControlMax = 0x7fffffff,
} SpvFunctionControlShift;
@@ -697,6 +749,7 @@ typedef enum SpvFunctionControlMask_ {
SpvFunctionControlDontInlineMask = 0x00000002,
SpvFunctionControlPureMask = 0x00000004,
SpvFunctionControlConstMask = 0x00000008,
+ SpvFunctionControlOptNoneINTELMask = 0x00010000,
} SpvFunctionControlMask;
typedef enum SpvMemorySemanticsShift_ {
@@ -877,9 +930,13 @@ typedef enum SpvCapability_ {
SpvCapabilityGroupNonUniformQuad = 68,
SpvCapabilityShaderLayer = 69,
SpvCapabilityShaderViewportIndex = 70,
+ SpvCapabilityUniformDecoration = 71,
SpvCapabilityFragmentShadingRateKHR = 4422,
SpvCapabilitySubgroupBallotKHR = 4423,
SpvCapabilityDrawParameters = 4427,
+ SpvCapabilityWorkgroupMemoryExplicitLayoutKHR = 4428,
+ SpvCapabilityWorkgroupMemoryExplicitLayout8BitAccessKHR = 4429,
+ SpvCapabilityWorkgroupMemoryExplicitLayout16BitAccessKHR = 4430,
SpvCapabilitySubgroupVoteKHR = 4431,
SpvCapabilityStorageBuffer16BitAccess = 4433,
SpvCapabilityStorageUniformBufferBlock16 = 4433,
@@ -922,6 +979,7 @@ typedef enum SpvCapability_ {
SpvCapabilityFragmentFullyCoveredEXT = 5265,
SpvCapabilityMeshShadingNV = 5266,
SpvCapabilityImageFootprintNV = 5282,
+ SpvCapabilityFragmentBarycentricKHR = 5284,
SpvCapabilityFragmentBarycentricNV = 5284,
SpvCapabilityComputeDerivativeGroupQuadsNV = 5288,
SpvCapabilityFragmentDensityEXT = 5291,
@@ -952,6 +1010,7 @@ typedef enum SpvCapability_ {
SpvCapabilityStorageTexelBufferArrayNonUniformIndexing = 5312,
SpvCapabilityStorageTexelBufferArrayNonUniformIndexingEXT = 5312,
SpvCapabilityRayTracingNV = 5340,
+ SpvCapabilityRayTracingMotionBlurNV = 5341,
SpvCapabilityVulkanMemoryModel = 5345,
SpvCapabilityVulkanMemoryModelKHR = 5345,
SpvCapabilityVulkanMemoryModelDeviceScope = 5346,
@@ -965,26 +1024,62 @@ typedef enum SpvCapability_ {
SpvCapabilityFragmentShaderShadingRateInterlockEXT = 5372,
SpvCapabilityShaderSMBuiltinsNV = 5373,
SpvCapabilityFragmentShaderPixelInterlockEXT = 5378,
+ SpvCapabilityDemoteToHelperInvocation = 5379,
SpvCapabilityDemoteToHelperInvocationEXT = 5379,
+ SpvCapabilityBindlessTextureNV = 5390,
SpvCapabilitySubgroupShuffleINTEL = 5568,
SpvCapabilitySubgroupBufferBlockIOINTEL = 5569,
SpvCapabilitySubgroupImageBlockIOINTEL = 5570,
SpvCapabilitySubgroupImageMediaBlockIOINTEL = 5579,
+ SpvCapabilityRoundToInfinityINTEL = 5582,
+ SpvCapabilityFloatingPointModeINTEL = 5583,
SpvCapabilityIntegerFunctions2INTEL = 5584,
SpvCapabilityFunctionPointersINTEL = 5603,
SpvCapabilityIndirectReferencesINTEL = 5604,
+ SpvCapabilityAsmINTEL = 5606,
+ SpvCapabilityAtomicFloat32MinMaxEXT = 5612,
+ SpvCapabilityAtomicFloat64MinMaxEXT = 5613,
+ SpvCapabilityAtomicFloat16MinMaxEXT = 5616,
+ SpvCapabilityVectorComputeINTEL = 5617,
+ SpvCapabilityVectorAnyINTEL = 5619,
+ SpvCapabilityExpectAssumeKHR = 5629,
SpvCapabilitySubgroupAvcMotionEstimationINTEL = 5696,
SpvCapabilitySubgroupAvcMotionEstimationIntraINTEL = 5697,
SpvCapabilitySubgroupAvcMotionEstimationChromaINTEL = 5698,
+ SpvCapabilityVariableLengthArrayINTEL = 5817,
+ SpvCapabilityFunctionFloatControlINTEL = 5821,
SpvCapabilityFPGAMemoryAttributesINTEL = 5824,
+ SpvCapabilityFPFastMathModeINTEL = 5837,
+ SpvCapabilityArbitraryPrecisionIntegersINTEL = 5844,
+ SpvCapabilityArbitraryPrecisionFloatingPointINTEL = 5845,
SpvCapabilityUnstructuredLoopControlsINTEL = 5886,
SpvCapabilityFPGALoopControlsINTEL = 5888,
SpvCapabilityKernelAttributesINTEL = 5892,
SpvCapabilityFPGAKernelAttributesINTEL = 5897,
+ SpvCapabilityFPGAMemoryAccessesINTEL = 5898,
+ SpvCapabilityFPGAClusterAttributesINTEL = 5904,
+ SpvCapabilityLoopFuseINTEL = 5906,
+ SpvCapabilityFPGABufferLocationINTEL = 5920,
+ SpvCapabilityArbitraryPrecisionFixedPointINTEL = 5922,
+ SpvCapabilityUSMStorageClassesINTEL = 5935,
+ SpvCapabilityIOPipesINTEL = 5943,
SpvCapabilityBlockingPipesINTEL = 5945,
SpvCapabilityFPGARegINTEL = 5948,
+ SpvCapabilityDotProductInputAll = 6016,
+ SpvCapabilityDotProductInputAllKHR = 6016,
+ SpvCapabilityDotProductInput4x8Bit = 6017,
+ SpvCapabilityDotProductInput4x8BitKHR = 6017,
+ SpvCapabilityDotProductInput4x8BitPacked = 6018,
+ SpvCapabilityDotProductInput4x8BitPackedKHR = 6018,
+ SpvCapabilityDotProduct = 6019,
+ SpvCapabilityDotProductKHR = 6019,
+ SpvCapabilityBitInstructions = 6025,
SpvCapabilityAtomicFloat32AddEXT = 6033,
SpvCapabilityAtomicFloat64AddEXT = 6034,
+ SpvCapabilityLongConstantCompositeINTEL = 6089,
+ SpvCapabilityOptNoneINTEL = 6094,
+ SpvCapabilityAtomicFloat16AddEXT = 6095,
+ SpvCapabilityDebugInfoModuleINTEL = 6114,
SpvCapabilityMax = 0x7fffffff,
} SpvCapability;
@@ -1051,6 +1146,44 @@ typedef enum SpvFragmentShadingRateMask_ {
SpvFragmentShadingRateHorizontal4PixelsMask = 0x00000008,
} SpvFragmentShadingRateMask;
+typedef enum SpvFPDenormMode_ {
+ SpvFPDenormModePreserve = 0,
+ SpvFPDenormModeFlushToZero = 1,
+ SpvFPDenormModeMax = 0x7fffffff,
+} SpvFPDenormMode;
+
+typedef enum SpvFPOperationMode_ {
+ SpvFPOperationModeIEEE = 0,
+ SpvFPOperationModeALT = 1,
+ SpvFPOperationModeMax = 0x7fffffff,
+} SpvFPOperationMode;
+
+typedef enum SpvQuantizationModes_ {
+ SpvQuantizationModesTRN = 0,
+ SpvQuantizationModesTRN_ZERO = 1,
+ SpvQuantizationModesRND = 2,
+ SpvQuantizationModesRND_ZERO = 3,
+ SpvQuantizationModesRND_INF = 4,
+ SpvQuantizationModesRND_MIN_INF = 5,
+ SpvQuantizationModesRND_CONV = 6,
+ SpvQuantizationModesRND_CONV_ODD = 7,
+ SpvQuantizationModesMax = 0x7fffffff,
+} SpvQuantizationModes;
+
+typedef enum SpvOverflowModes_ {
+ SpvOverflowModesWRAP = 0,
+ SpvOverflowModesSAT = 1,
+ SpvOverflowModesSAT_ZERO = 2,
+ SpvOverflowModesSAT_SYM = 3,
+ SpvOverflowModesMax = 0x7fffffff,
+} SpvOverflowModes;
+
+typedef enum SpvPackedVectorFormat_ {
+ SpvPackedVectorFormatPackedVectorFormat4x8Bit = 0,
+ SpvPackedVectorFormatPackedVectorFormat4x8BitKHR = 0,
+ SpvPackedVectorFormatMax = 0x7fffffff,
+} SpvPackedVectorFormat;
+
typedef enum SpvOp_ {
SpvOpNop = 0,
SpvOpUndef = 1,
@@ -1408,6 +1541,18 @@ typedef enum SpvOp_ {
SpvOpConvertUToAccelerationStructureKHR = 4447,
SpvOpIgnoreIntersectionKHR = 4448,
SpvOpTerminateRayKHR = 4449,
+ SpvOpSDot = 4450,
+ SpvOpSDotKHR = 4450,
+ SpvOpUDot = 4451,
+ SpvOpUDotKHR = 4451,
+ SpvOpSUDot = 4452,
+ SpvOpSUDotKHR = 4452,
+ SpvOpSDotAccSat = 4453,
+ SpvOpSDotAccSatKHR = 4453,
+ SpvOpUDotAccSat = 4454,
+ SpvOpUDotAccSatKHR = 4454,
+ SpvOpSUDotAccSat = 4455,
+ SpvOpSUDotAccSatKHR = 4455,
SpvOpTypeRayQueryKHR = 4472,
SpvOpRayQueryInitializeKHR = 4473,
SpvOpRayQueryTerminateKHR = 4474,
@@ -1434,6 +1579,8 @@ typedef enum SpvOp_ {
SpvOpIgnoreIntersectionNV = 5335,
SpvOpTerminateRayNV = 5336,
SpvOpTraceNV = 5337,
+ SpvOpTraceMotionNV = 5338,
+ SpvOpTraceRayMotionNV = 5339,
SpvOpTypeAccelerationStructureKHR = 5341,
SpvOpTypeAccelerationStructureNV = 5341,
SpvOpExecuteCallableNV = 5344,
@@ -1444,8 +1591,16 @@ typedef enum SpvOp_ {
SpvOpCooperativeMatrixLengthNV = 5362,
SpvOpBeginInvocationInterlockEXT = 5364,
SpvOpEndInvocationInterlockEXT = 5365,
+ SpvOpDemoteToHelperInvocation = 5380,
SpvOpDemoteToHelperInvocationEXT = 5380,
SpvOpIsHelperInvocationEXT = 5381,
+ SpvOpConvertUToImageNV = 5391,
+ SpvOpConvertUToSamplerNV = 5392,
+ SpvOpConvertImageToUNV = 5393,
+ SpvOpConvertSamplerToUNV = 5394,
+ SpvOpConvertUToSampledImageNV = 5395,
+ SpvOpConvertSampledImageToUNV = 5396,
+ SpvOpSamplerImageAddressingModeNV = 5397,
SpvOpSubgroupShuffleINTEL = 5571,
SpvOpSubgroupShuffleDownINTEL = 5572,
SpvOpSubgroupShuffleUpINTEL = 5573,
@@ -1470,8 +1625,15 @@ typedef enum SpvOp_ {
SpvOpUSubSatINTEL = 5596,
SpvOpIMul32x16INTEL = 5597,
SpvOpUMul32x16INTEL = 5598,
- SpvOpFunctionPointerINTEL = 5600,
+ SpvOpConstantFunctionPointerINTEL = 5600,
SpvOpFunctionPointerCallINTEL = 5601,
+ SpvOpAsmTargetINTEL = 5609,
+ SpvOpAsmINTEL = 5610,
+ SpvOpAsmCallINTEL = 5611,
+ SpvOpAtomicFMinEXT = 5614,
+ SpvOpAtomicFMaxEXT = 5615,
+ SpvOpAssumeTrueKHR = 5630,
+ SpvOpExpectKHR = 5631,
SpvOpDecorateString = 5632,
SpvOpDecorateStringGOOGLE = 5632,
SpvOpMemberDecorateString = 5633,
@@ -1594,7 +1756,64 @@ typedef enum SpvOp_ {
SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL = 5814,
SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL = 5815,
SpvOpSubgroupAvcSicGetInterRawSadsINTEL = 5816,
+ SpvOpVariableLengthArrayINTEL = 5818,
+ SpvOpSaveMemoryINTEL = 5819,
+ SpvOpRestoreMemoryINTEL = 5820,
+ SpvOpArbitraryFloatSinCosPiINTEL = 5840,
+ SpvOpArbitraryFloatCastINTEL = 5841,
+ SpvOpArbitraryFloatCastFromIntINTEL = 5842,
+ SpvOpArbitraryFloatCastToIntINTEL = 5843,
+ SpvOpArbitraryFloatAddINTEL = 5846,
+ SpvOpArbitraryFloatSubINTEL = 5847,
+ SpvOpArbitraryFloatMulINTEL = 5848,
+ SpvOpArbitraryFloatDivINTEL = 5849,
+ SpvOpArbitraryFloatGTINTEL = 5850,
+ SpvOpArbitraryFloatGEINTEL = 5851,
+ SpvOpArbitraryFloatLTINTEL = 5852,
+ SpvOpArbitraryFloatLEINTEL = 5853,
+ SpvOpArbitraryFloatEQINTEL = 5854,
+ SpvOpArbitraryFloatRecipINTEL = 5855,
+ SpvOpArbitraryFloatRSqrtINTEL = 5856,
+ SpvOpArbitraryFloatCbrtINTEL = 5857,
+ SpvOpArbitraryFloatHypotINTEL = 5858,
+ SpvOpArbitraryFloatSqrtINTEL = 5859,
+ SpvOpArbitraryFloatLogINTEL = 5860,
+ SpvOpArbitraryFloatLog2INTEL = 5861,
+ SpvOpArbitraryFloatLog10INTEL = 5862,
+ SpvOpArbitraryFloatLog1pINTEL = 5863,
+ SpvOpArbitraryFloatExpINTEL = 5864,
+ SpvOpArbitraryFloatExp2INTEL = 5865,
+ SpvOpArbitraryFloatExp10INTEL = 5866,
+ SpvOpArbitraryFloatExpm1INTEL = 5867,
+ SpvOpArbitraryFloatSinINTEL = 5868,
+ SpvOpArbitraryFloatCosINTEL = 5869,
+ SpvOpArbitraryFloatSinCosINTEL = 5870,
+ SpvOpArbitraryFloatSinPiINTEL = 5871,
+ SpvOpArbitraryFloatCosPiINTEL = 5872,
+ SpvOpArbitraryFloatASinINTEL = 5873,
+ SpvOpArbitraryFloatASinPiINTEL = 5874,
+ SpvOpArbitraryFloatACosINTEL = 5875,
+ SpvOpArbitraryFloatACosPiINTEL = 5876,
+ SpvOpArbitraryFloatATanINTEL = 5877,
+ SpvOpArbitraryFloatATanPiINTEL = 5878,
+ SpvOpArbitraryFloatATan2INTEL = 5879,
+ SpvOpArbitraryFloatPowINTEL = 5880,
+ SpvOpArbitraryFloatPowRINTEL = 5881,
+ SpvOpArbitraryFloatPowNINTEL = 5882,
SpvOpLoopControlINTEL = 5887,
+ SpvOpFixedSqrtINTEL = 5923,
+ SpvOpFixedRecipINTEL = 5924,
+ SpvOpFixedRsqrtINTEL = 5925,
+ SpvOpFixedSinINTEL = 5926,
+ SpvOpFixedCosINTEL = 5927,
+ SpvOpFixedSinCosINTEL = 5928,
+ SpvOpFixedSinPiINTEL = 5929,
+ SpvOpFixedCosPiINTEL = 5930,
+ SpvOpFixedSinCosPiINTEL = 5931,
+ SpvOpFixedLogINTEL = 5932,
+ SpvOpFixedExpINTEL = 5933,
+ SpvOpPtrCastToCrossWorkgroupINTEL = 5934,
+ SpvOpCrossWorkgroupCastToPtrINTEL = 5938,
SpvOpReadPipeBlockingINTEL = 5946,
SpvOpWritePipeBlockingINTEL = 5947,
SpvOpFPGARegINTEL = 5949,
@@ -1616,6 +1835,10 @@ typedef enum SpvOp_ {
SpvOpRayQueryGetIntersectionObjectToWorldKHR = 6031,
SpvOpRayQueryGetIntersectionWorldToObjectKHR = 6032,
SpvOpAtomicFAddEXT = 6035,
+ SpvOpTypeBufferSurfaceINTEL = 6086,
+ SpvOpTypeStructContinuedINTEL = 6090,
+ SpvOpConstantCompositeContinuedINTEL = 6091,
+ SpvOpSpecConstantCompositeContinuedINTEL = 6092,
SpvOpMax = 0x7fffffff,
} SpvOp;
@@ -1980,6 +2203,12 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
case SpvOpConvertUToAccelerationStructureKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpIgnoreIntersectionKHR: *hasResult = false; *hasResultType = false; break;
case SpvOpTerminateRayKHR: *hasResult = false; *hasResultType = false; break;
+ case SpvOpSDot: *hasResult = true; *hasResultType = true; break;
+ case SpvOpUDot: *hasResult = true; *hasResultType = true; break;
+ case SpvOpSUDot: *hasResult = true; *hasResultType = true; break;
+ case SpvOpSDotAccSat: *hasResult = true; *hasResultType = true; break;
+ case SpvOpUDotAccSat: *hasResult = true; *hasResultType = true; break;
+ case SpvOpSUDotAccSat: *hasResult = true; *hasResultType = true; break;
case SpvOpTypeRayQueryKHR: *hasResult = true; *hasResultType = false; break;
case SpvOpRayQueryInitializeKHR: *hasResult = false; *hasResultType = false; break;
case SpvOpRayQueryTerminateKHR: *hasResult = false; *hasResultType = false; break;
@@ -2005,6 +2234,8 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
case SpvOpIgnoreIntersectionNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTerminateRayNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTraceNV: *hasResult = false; *hasResultType = false; break;
+ case SpvOpTraceMotionNV: *hasResult = false; *hasResultType = false; break;
+ case SpvOpTraceRayMotionNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTypeAccelerationStructureNV: *hasResult = true; *hasResultType = false; break;
case SpvOpExecuteCallableNV: *hasResult = false; *hasResultType = false; break;
case SpvOpTypeCooperativeMatrixNV: *hasResult = true; *hasResultType = false; break;
@@ -2014,8 +2245,15 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
case SpvOpCooperativeMatrixLengthNV: *hasResult = true; *hasResultType = true; break;
case SpvOpBeginInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
case SpvOpEndInvocationInterlockEXT: *hasResult = false; *hasResultType = false; break;
- case SpvOpDemoteToHelperInvocationEXT: *hasResult = false; *hasResultType = false; break;
+ case SpvOpDemoteToHelperInvocation: *hasResult = false; *hasResultType = false; break;
case SpvOpIsHelperInvocationEXT: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConvertUToImageNV: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConvertUToSamplerNV: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConvertImageToUNV: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConvertSamplerToUNV: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConvertUToSampledImageNV: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConvertSampledImageToUNV: *hasResult = true; *hasResultType = true; break;
+ case SpvOpSamplerImageAddressingModeNV: *hasResult = false; *hasResultType = false; break;
case SpvOpSubgroupShuffleINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupShuffleDownINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupShuffleUpINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2040,8 +2278,15 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
case SpvOpUSubSatINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpIMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpUMul32x16INTEL: *hasResult = true; *hasResultType = true; break;
- case SpvOpFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpConstantFunctionPointerINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpFunctionPointerCallINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpAsmTargetINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpAsmINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpAsmCallINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpAtomicFMinEXT: *hasResult = true; *hasResultType = true; break;
+ case SpvOpAtomicFMaxEXT: *hasResult = true; *hasResultType = true; break;
+ case SpvOpAssumeTrueKHR: *hasResult = false; *hasResultType = false; break;
+ case SpvOpExpectKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpDecorateString: *hasResult = false; *hasResultType = false; break;
case SpvOpMemberDecorateString: *hasResult = false; *hasResultType = false; break;
case SpvOpVmeImageINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2162,7 +2407,64 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
case SpvOpSubgroupAvcSicGetPackedSkcLumaCountThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetPackedSkcLumaSumThresholdINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpSubgroupAvcSicGetInterRawSadsINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpVariableLengthArrayINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpSaveMemoryINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpRestoreMemoryINTEL: *hasResult = false; *hasResultType = false; break;
+ case SpvOpArbitraryFloatSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatCastINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatCastFromIntINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatCastToIntINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatAddINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatSubINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatMulINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatDivINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatGTINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatGEINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatLTINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatLEINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatEQINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatRecipINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatRSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatCbrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatHypotINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatLogINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatLog2INTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatLog10INTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatLog1pINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatExpINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatExp2INTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatExp10INTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatExpm1INTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatSinINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatSinCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatSinPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatASinINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatASinPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatACosINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatACosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatATanINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatATanPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatATan2INTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatPowINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatPowRINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpArbitraryFloatPowNINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpLoopControlINTEL: *hasResult = false; *hasResultType = false; break;
+ case SpvOpFixedSqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedRecipINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedRsqrtINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedSinINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedSinCosINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedSinPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedSinCosPiINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedLogINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpFixedExpINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpPtrCastToCrossWorkgroupINTEL: *hasResult = true; *hasResultType = true; break;
+ case SpvOpCrossWorkgroupCastToPtrINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpReadPipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpWritePipeBlockingINTEL: *hasResult = true; *hasResultType = true; break;
case SpvOpFPGARegINTEL: *hasResult = true; *hasResultType = true; break;
@@ -2184,6 +2486,10 @@ inline void SpvHasResultAndType(SpvOp opcode, bool *hasResult, bool *hasResultTy
case SpvOpRayQueryGetIntersectionObjectToWorldKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpRayQueryGetIntersectionWorldToObjectKHR: *hasResult = true; *hasResultType = true; break;
case SpvOpAtomicFAddEXT: *hasResult = true; *hasResultType = true; break;
+ case SpvOpTypeBufferSurfaceINTEL: *hasResult = true; *hasResultType = false; break;
+ case SpvOpTypeStructContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+ case SpvOpConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
+ case SpvOpSpecConstantCompositeContinuedINTEL: *hasResult = false; *hasResultType = false; break;
}
}
#endif /* SPV_ENABLE_UTILITY_CODE */
diff --git a/thirdparty/spirv-reflect/patches/specialization-constants.patch b/thirdparty/spirv-reflect/patches/specialization-constants.patch
index efd89a76af..9bb5f97cd3 100644
--- a/thirdparty/spirv-reflect/patches/specialization-constants.patch
+++ b/thirdparty/spirv-reflect/patches/specialization-constants.patch
@@ -1,8 +1,8 @@
diff --git a/thirdparty/spirv-reflect/spirv_reflect.c b/thirdparty/spirv-reflect/spirv_reflect.c
-index 1c94a2e00e..2786a7f3ad 100644
+index e9b11bf495..f181df5fa2 100644
--- a/thirdparty/spirv-reflect/spirv_reflect.c
+++ b/thirdparty/spirv-reflect/spirv_reflect.c
-@@ -124,6 +124,9 @@ typedef struct SpvReflectPrvDecorations {
+@@ -125,6 +125,9 @@ typedef struct SpvReflectPrvDecorations {
SpvReflectPrvNumberDecoration location;
SpvReflectPrvNumberDecoration offset;
SpvReflectPrvNumberDecoration uav_counter_buffer;
@@ -12,7 +12,7 @@ index 1c94a2e00e..2786a7f3ad 100644
SpvReflectPrvStringDecoration semantic;
uint32_t array_stride;
uint32_t matrix_stride;
-@@ -629,6 +632,9 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
+@@ -631,6 +634,9 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
p_parser->nodes[i].decorations.offset.value = (uint32_t)INVALID_VALUE;
p_parser->nodes[i].decorations.uav_counter_buffer.value = (uint32_t)INVALID_VALUE;
p_parser->nodes[i].decorations.built_in = (SpvBuiltIn)INVALID_VALUE;
@@ -22,7 +22,7 @@ index 1c94a2e00e..2786a7f3ad 100644
}
// Mark source file id node
p_parser->source_file_id = (uint32_t)INVALID_VALUE;
-@@ -819,10 +825,16 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
+@@ -821,10 +827,16 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
CHECKED_READU32(p_parser, p_node->word_offset + 2, p_node->result_id);
}
break;
@@ -41,7 +41,7 @@ index 1c94a2e00e..2786a7f3ad 100644
case SpvOpSpecConstantComposite:
case SpvOpSpecConstantOp: {
CHECKED_READU32(p_parser, p_node->word_offset + 1, p_node->result_type_id);
-@@ -854,7 +866,7 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
+@@ -856,7 +868,7 @@ static SpvReflectResult ParseNodes(SpvReflectPrvParser* p_parser)
CHECKED_READU32(p_parser, p_node->word_offset + 3, p_access_chain->base_id);
//
// SPIRV_ACCESS_CHAIN_INDEX_OFFSET (4) is the number of words up until the first index:
@@ -50,17 +50,17 @@ index 1c94a2e00e..2786a7f3ad 100644
//
p_access_chain->index_count = (node_word_count - SPIRV_ACCESS_CHAIN_INDEX_OFFSET);
if (p_access_chain->index_count > 0) {
-@@ -1334,6 +1346,9 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
+@@ -1338,6 +1350,9 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
skip = true;
}
- break;
+ break;
+// -- GODOT begin --
+ case SpvDecorationSpecId:
+// -- GODOT end --
+ case SpvDecorationRelaxedPrecision:
case SpvDecorationBlock:
case SpvDecorationBufferBlock:
- case SpvDecorationColMajor:
-@@ -1466,7 +1481,14 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
+@@ -1481,7 +1496,14 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
p_target_decorations->input_attachment_index.word_offset = word_offset;
}
break;
@@ -76,7 +76,7 @@ index 1c94a2e00e..2786a7f3ad 100644
case SpvReflectDecorationHlslCounterBufferGOOGLE: {
uint32_t word_offset = p_node->word_offset + member_offset+ 3;
CHECKED_READU32(p_parser, word_offset, p_target_decorations->uav_counter_buffer.value);
-@@ -1766,6 +1788,13 @@ static SpvReflectResult ParseType(
+@@ -1789,6 +1811,13 @@ static SpvReflectResult ParseType(
p_type->type_flags |= SPV_REFLECT_TYPE_FLAG_EXTERNAL_ACCELERATION_STRUCTURE;
}
break;
@@ -90,7 +90,7 @@ index 1c94a2e00e..2786a7f3ad 100644
}
if (result == SPV_REFLECT_RESULT_SUCCESS) {
-@@ -3236,6 +3265,69 @@ static SpvReflectResult ParseExecutionModes(
+@@ -3269,6 +3298,69 @@ static SpvReflectResult ParseExecutionModes(
return SPV_REFLECT_RESULT_SUCCESS;
}
@@ -160,7 +160,7 @@ index 1c94a2e00e..2786a7f3ad 100644
static SpvReflectResult ParsePushConstantBlocks(
SpvReflectPrvParser* p_parser,
SpvReflectShaderModule* p_module)
-@@ -3613,6 +3705,12 @@ SpvReflectResult spvReflectCreateShaderModule(
+@@ -3650,6 +3742,12 @@ static SpvReflectResult CreateShaderModule(
result = ParsePushConstantBlocks(&parser, p_module);
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
}
@@ -173,7 +173,7 @@ index 1c94a2e00e..2786a7f3ad 100644
if (result == SPV_REFLECT_RESULT_SUCCESS) {
result = ParseEntryPoints(&parser, p_module);
SPV_REFLECT_ASSERT(result == SPV_REFLECT_RESULT_SUCCESS);
-@@ -3742,6 +3840,9 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
+@@ -3807,6 +3905,9 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
SafeFree(p_entry->used_push_constants);
}
SafeFree(p_module->entry_points);
@@ -183,7 +183,7 @@ index 1c94a2e00e..2786a7f3ad 100644
// Push constants
for (size_t i = 0; i < p_module->push_constant_block_count; ++i) {
-@@ -4010,6 +4111,38 @@ SpvReflectResult spvReflectEnumerateEntryPointInterfaceVariables(
+@@ -4077,6 +4178,38 @@ SpvReflectResult spvReflectEnumerateEntryPointInterfaceVariables(
return SPV_REFLECT_RESULT_SUCCESS;
}
@@ -223,10 +223,10 @@ index 1c94a2e00e..2786a7f3ad 100644
const SpvReflectShaderModule* p_module,
uint32_t* p_count,
diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h
-index da05400973..50cc65222b 100644
+index e9e4c40755..948533d3c0 100644
--- a/thirdparty/spirv-reflect/spirv_reflect.h
+++ b/thirdparty/spirv-reflect/spirv_reflect.h
-@@ -292,6 +292,28 @@ typedef struct SpvReflectTypeDescription {
+@@ -323,6 +323,28 @@ typedef struct SpvReflectTypeDescription {
struct SpvReflectTypeDescription* members;
} SpvReflectTypeDescription;
@@ -255,7 +255,7 @@ index da05400973..50cc65222b 100644
/*! @struct SpvReflectInterfaceVariable
-@@ -439,6 +461,10 @@ typedef struct SpvReflectShaderModule {
+@@ -472,6 +494,10 @@ typedef struct SpvReflectShaderModule {
SpvReflectInterfaceVariable* interface_variables; // Uses value(s) from first entry point
uint32_t push_constant_block_count; // Uses value(s) from first entry point
SpvReflectBlockVariable* push_constant_blocks; // Uses value(s) from first entry point
@@ -265,8 +265,8 @@ index da05400973..50cc65222b 100644
+ // -- GODOT end --
struct Internal {
- size_t spirv_size;
-@@ -694,6 +720,33 @@ SpvReflectResult spvReflectEnumerateInputVariables(
+ SpvReflectModuleFlags module_flags;
+@@ -744,6 +770,33 @@ SpvReflectResult spvReflectEnumerateInputVariables(
SpvReflectInterfaceVariable** pp_variables
);
diff --git a/thirdparty/spirv-reflect/spirv_reflect.c b/thirdparty/spirv-reflect/spirv_reflect.c
index 2786a7f3ad..f181df5fa2 100644
--- a/thirdparty/spirv-reflect/spirv_reflect.c
+++ b/thirdparty/spirv-reflect/spirv_reflect.c
@@ -1,5 +1,5 @@
/*
- Copyright 2017-2018 Google Inc.
+ Copyright 2017-2022 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -110,6 +110,7 @@ typedef struct SpvReflectPrvStringDecoration {
// clang-format off
typedef struct SpvReflectPrvDecorations {
+ bool is_relaxed_precision;
bool is_block;
bool is_buffer_block;
bool is_row_major;
@@ -238,12 +239,10 @@ static uint32_t RoundUp(
#define IsNotNull(ptr) \
(ptr != NULL)
-#define SafeFree(ptr) \
- { \
- if (ptr != NULL) { \
- free((void*)ptr); \
- ptr = NULL; \
- } \
+#define SafeFree(ptr) \
+ { \
+ free((void*)ptr); \
+ ptr = NULL; \
}
static int SortCompareUint32(
@@ -462,6 +461,9 @@ static SpvReflectResult ReadStr(
static SpvReflectDecorationFlags ApplyDecorations(const SpvReflectPrvDecorations* p_decoration_fields)
{
SpvReflectDecorationFlags decorations = SPV_REFLECT_DECORATION_NONE;
+ if (p_decoration_fields->is_relaxed_precision) {
+ decorations |= SPV_REFLECT_DECORATION_RELAXED_PRECISION;
+ }
if (p_decoration_fields->is_block) {
decorations |= SPV_REFLECT_DECORATION_BLOCK;
}
@@ -1046,6 +1048,7 @@ static SpvReflectResult ParseFunction(
case SpvOpGenericPtrMemSemantics:
case SpvOpInBoundsPtrAccessChain:
case SpvOpStore:
+ case SpvOpImageTexelPointer:
{
++(p_func->accessed_ptr_count);
}
@@ -1097,6 +1100,7 @@ static SpvReflectResult ParseFunction(
case SpvOpArrayLength:
case SpvOpGenericPtrMemSemantics:
case SpvOpInBoundsPtrAccessChain:
+ case SpvOpImageTexelPointer:
{
CHECKED_READU32(p_parser, p_node->word_offset + 3,
p_func->accessed_ptrs[p_func->accessed_ptr_count]);
@@ -1345,10 +1349,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
default: {
skip = true;
}
- break;
+ break;
// -- GODOT begin --
case SpvDecorationSpecId:
// -- GODOT end --
+ case SpvDecorationRelaxedPrecision:
case SpvDecorationBlock:
case SpvDecorationBufferBlock:
case SpvDecorationColMajor:
@@ -1379,6 +1384,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
CHECKED_READU32(p_parser, p_node->word_offset + 1, target_id);
SpvReflectPrvNode* p_target_node = FindNode(p_parser, target_id);
if (IsNull(p_target_node)) {
+ if ((p_node->op == (uint32_t)SpvOpDecorate) && (decoration == SpvDecorationRelaxedPrecision)) {
+ // Many OPs can be decorated that we don't care about. Ignore those.
+ // See https://github.com/KhronosGroup/SPIRV-Reflect/issues/134
+ continue;
+ }
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
}
// Get decorations
@@ -1393,6 +1403,11 @@ static SpvReflectResult ParseDecorations(SpvReflectPrvParser* p_parser)
switch (decoration) {
default: break;
+ case SpvDecorationRelaxedPrecision: {
+ p_target_decorations->is_relaxed_precision = true;
+ }
+ break;
+
case SpvDecorationBlock: {
p_target_decorations->is_block = true;
}
@@ -1685,16 +1700,19 @@ static SpvReflectResult ParseType(
// Get length for current dimension
SpvReflectPrvNode* p_length_node = FindNode(p_parser, length_id);
if (IsNotNull(p_length_node)) {
+ uint32_t dim_index = p_type->traits.array.dims_count;
if (p_length_node->op == SpvOpSpecConstant ||
p_length_node->op == SpvOpSpecConstantOp) {
- p_type->traits.array.dims[p_type->traits.array.dims_count] = 0xFFFFFFFF;
+ p_type->traits.array.dims[dim_index] = 0xFFFFFFFF;
+ p_type->traits.array.spec_constant_op_ids[dim_index] = length_id;
p_type->traits.array.dims_count += 1;
} else {
uint32_t length = 0;
IF_READU32(result, p_parser, p_length_node->word_offset + 3, length);
if (result == SPV_REFLECT_RESULT_SUCCESS) {
// Write the array dim and increment the count and offset
- p_type->traits.array.dims[p_type->traits.array.dims_count] = length;
+ p_type->traits.array.dims[dim_index] = length;
+ p_type->traits.array.spec_constant_op_ids[dim_index] = 0xFFFFFFFF;
p_type->traits.array.dims_count += 1;
} else {
result = SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
@@ -1719,6 +1737,11 @@ static SpvReflectResult ParseType(
p_type->type_flags |= SPV_REFLECT_TYPE_FLAG_ARRAY;
uint32_t element_type_id = (uint32_t)INVALID_VALUE;
IF_READU32(result, p_parser, p_node->word_offset + 2, element_type_id);
+ p_type->traits.array.stride = p_node->decorations.array_stride;
+ uint32_t dim_index = p_type->traits.array.dims_count;
+ p_type->traits.array.dims[dim_index] = 0;
+ p_type->traits.array.spec_constant_op_ids[dim_index] = 0;
+ p_type->traits.array.dims_count += 1;
// Parse next dimension or element type
SpvReflectPrvNode* p_next_node = FindNode(p_parser, element_type_id);
if (IsNotNull(p_next_node)) {
@@ -2175,22 +2198,19 @@ static SpvReflectResult ParseDescriptorBlockVariable(
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
}
// Resolve to element type if current type is array or run time array
- if (p_type_node->op == SpvOpTypeArray) {
- while (p_type_node->op == SpvOpTypeArray) {
+ while (p_type_node->op == SpvOpTypeArray || p_type_node->op == SpvOpTypeRuntimeArray) {
+ if (p_type_node->op == SpvOpTypeArray) {
p_type_node = FindNode(p_parser, p_type_node->array_traits.element_type_id);
- if (IsNull(p_type_node)) {
+ }
+ else {
+ // Element type description
+ SpvReflectTypeDescription* p_type_temp = FindType(p_module, p_type_node->array_traits.element_type_id);
+ if (IsNull(p_type_temp)) {
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
}
+ // Element type node
+ p_type_node = FindNode(p_parser, p_type_temp->id);
}
- }
- else if(p_type_node->op == SpvOpTypeRuntimeArray) {
- // Element type description
- p_type = FindType(p_module, p_type_node->array_traits.element_type_id);
- if (IsNull(p_type)) {
- return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
- }
- // Element type node
- p_type_node = FindNode(p_parser, p_type->id);
if (IsNull(p_type_node)) {
return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
}
@@ -2662,6 +2682,7 @@ static SpvReflectResult ParseFormat(
static SpvReflectResult ParseInterfaceVariable(
SpvReflectPrvParser* p_parser,
+ const SpvReflectPrvDecorations* p_var_node_decorations,
const SpvReflectPrvDecorations* p_type_node_decorations,
SpvReflectShaderModule* p_module,
SpvReflectTypeDescription* p_type,
@@ -2685,7 +2706,7 @@ static SpvReflectResult ParseInterfaceVariable(
SpvReflectPrvDecorations* p_member_decorations = &p_type_node->member_decorations[member_index];
SpvReflectTypeDescription* p_member_type = &p_type->members[member_index];
SpvReflectInterfaceVariable* p_member_var = &p_var->members[member_index];
- SpvReflectResult result = ParseInterfaceVariable(p_parser, p_member_decorations, p_module, p_member_type, p_member_var, p_has_built_in);
+ SpvReflectResult result = ParseInterfaceVariable(p_parser, NULL, p_member_decorations, p_module, p_member_type, p_member_var, p_has_built_in);
if (result != SPV_REFLECT_RESULT_SUCCESS) {
SPV_REFLECT_ASSERT(false);
return result;
@@ -2695,6 +2716,9 @@ static SpvReflectResult ParseInterfaceVariable(
p_var->name = p_type_node->name;
p_var->decoration_flags = ApplyDecorations(p_type_node_decorations);
+ if (p_var_node_decorations != NULL) {
+ p_var->decoration_flags |= ApplyDecorations(p_var_node_decorations);
+ }
p_var->built_in = p_type_node_decorations->built_in;
ApplyNumericTraits(p_type, &p_var->numeric);
if (p_type->op == SpvOpTypeArray) {
@@ -2730,21 +2754,21 @@ static SpvReflectResult ParseInterfaceVariables(
}
p_entry->interface_variable_count = interface_variable_count;
- p_entry->input_variable_count = 0;
- p_entry->output_variable_count = 0;
- for (size_t i = 0; i < interface_variable_count; ++i) {
- uint32_t var_result_id = *(p_interface_variable_ids + i);
- SpvReflectPrvNode* p_node = FindNode(p_parser, var_result_id);
- if (IsNull(p_node)) {
- return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
- }
+ p_entry->input_variable_count = 0;
+ p_entry->output_variable_count = 0;
+ for (size_t i = 0; i < interface_variable_count; ++i) {
+ uint32_t var_result_id = *(p_interface_variable_ids + i);
+ SpvReflectPrvNode* p_node = FindNode(p_parser, var_result_id);
+ if (IsNull(p_node)) {
+ return SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_ID_REFERENCE;
+ }
- if (p_node->storage_class == SpvStorageClassInput) {
- p_entry->input_variable_count += 1;
- }
- else if (p_node->storage_class == SpvStorageClassOutput) {
- p_entry->output_variable_count += 1;
- }
+ if (p_node->storage_class == SpvStorageClassInput) {
+ p_entry->input_variable_count += 1;
+ }
+ else if (p_node->storage_class == SpvStorageClassOutput) {
+ p_entry->output_variable_count += 1;
+ }
}
if (p_entry->input_variable_count > 0) {
@@ -2806,6 +2830,7 @@ static SpvReflectResult ParseInterfaceVariables(
bool has_built_in = p_node->decorations.is_built_in;
SpvReflectResult result = ParseInterfaceVariable(
p_parser,
+ &p_node->decorations,
&p_type_node->decorations,
p_module,
p_type,
@@ -3208,7 +3233,11 @@ static SpvReflectResult ParseExecutionModes(
}
break;
- case SpvExecutionModeInvocations:
+ case SpvExecutionModeInvocations: {
+ CHECKED_READU32(p_parser, p_node->word_offset + 3, p_entry_point->invocations);
+ }
+ break;
+
case SpvExecutionModeSpacingEqual:
case SpvExecutionModeSpacingFractionalEven:
case SpvExecutionModeSpacingFractionalOdd:
@@ -3231,7 +3260,7 @@ static SpvReflectResult ParseExecutionModes(
CHECKED_READU32(p_parser, p_node->word_offset + 4, p_entry_point->local_size.y);
CHECKED_READU32(p_parser, p_node->word_offset + 5, p_entry_point->local_size.z);
}
- break;
+ break;
case SpvExecutionModeLocalSizeHint:
case SpvExecutionModeInputPoints:
@@ -3241,7 +3270,11 @@ static SpvReflectResult ParseExecutionModes(
case SpvExecutionModeInputTrianglesAdjacency:
case SpvExecutionModeQuads:
case SpvExecutionModeIsolines:
- case SpvExecutionModeOutputVertices:
+ case SpvExecutionModeOutputVertices: {
+ CHECKED_READU32(p_parser, p_node->word_offset + 3, p_entry_point->output_vertices);
+ }
+ break;
+
case SpvExecutionModeOutputPoints:
case SpvExecutionModeOutputLineStrip:
case SpvExecutionModeOutputTriangleStrip:
@@ -3591,16 +3624,8 @@ static SpvReflectResult SynchronizeDescriptorSets(SpvReflectShaderModule* p_modu
return result;
}
-SpvReflectResult spvReflectGetShaderModule(
- size_t size,
- const void* p_code,
- SpvReflectShaderModule* p_module
-)
-{
- return spvReflectCreateShaderModule(size, p_code, p_module);
-}
-
-SpvReflectResult spvReflectCreateShaderModule(
+static SpvReflectResult CreateShaderModule(
+ uint32_t flags,
size_t size,
const void* p_code,
SpvReflectShaderModule* p_module
@@ -3618,15 +3643,27 @@ SpvReflectResult spvReflectCreateShaderModule(
if (IsNull(p_module->_internal)) {
return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
}
- // Allocate SPIR-V code storage
- p_module->_internal->spirv_size = size;
- p_module->_internal->spirv_code = (uint32_t*)calloc(1, p_module->_internal->spirv_size);
- p_module->_internal->spirv_word_count = (uint32_t)(size / SPIRV_WORD_SIZE);
- if (IsNull(p_module->_internal->spirv_code)) {
- SafeFree(p_module->_internal);
- return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
+ // Copy flags
+ p_module->_internal->module_flags = flags;
+ // Figure out if we need to copy the SPIR-V code or not
+ if (flags & SPV_REFLECT_MODULE_FLAG_NO_COPY) {
+ // Set internal size and pointer to args passed in
+ p_module->_internal->spirv_size = size;
+ p_module->_internal->spirv_code = (void*)p_code; // cast that const away
+ p_module->_internal->spirv_word_count = (uint32_t)(size / SPIRV_WORD_SIZE);
+ }
+ else {
+ // Allocate SPIR-V code storage
+ p_module->_internal->spirv_size = size;
+ p_module->_internal->spirv_code = (uint32_t*)calloc(1, p_module->_internal->spirv_size);
+ p_module->_internal->spirv_word_count = (uint32_t)(size / SPIRV_WORD_SIZE);
+ if (IsNull(p_module->_internal->spirv_code)) {
+ SafeFree(p_module->_internal);
+ return SPV_REFLECT_RESULT_ERROR_ALLOC_FAILED;
+ }
+ // Copy SPIR-V to code storage
+ memcpy(p_module->_internal->spirv_code, p_code, size);
}
- memcpy(p_module->_internal->spirv_code, p_code, size);
SpvReflectPrvParser parser = { 0 };
SpvReflectResult result = CreateParser(p_module->_internal->spirv_size,
@@ -3751,6 +3788,34 @@ SpvReflectResult spvReflectCreateShaderModule(
return result;
}
+SpvReflectResult spvReflectCreateShaderModule(
+ size_t size,
+ const void* p_code,
+ SpvReflectShaderModule* p_module
+)
+{
+ return CreateShaderModule(0, size, p_code, p_module);
+}
+
+SpvReflectResult spvReflectCreateShaderModule2(
+ uint32_t flags,
+ size_t size,
+ const void* p_code,
+ SpvReflectShaderModule* p_module
+)
+{
+ return CreateShaderModule(flags, size, p_code, p_module);
+}
+
+SpvReflectResult spvReflectGetShaderModule(
+ size_t size,
+ const void* p_code,
+ SpvReflectShaderModule* p_module
+)
+{
+ return spvReflectCreateShaderModule(size, p_code, p_module);
+}
+
static void SafeFreeTypes(SpvReflectTypeDescription* p_type)
{
if (IsNull(p_type)) {
@@ -3860,8 +3925,10 @@ void spvReflectDestroyShaderModule(SpvReflectShaderModule* p_module)
}
SafeFree(p_module->_internal->type_descriptions);
- // Free SPIR-V code
- SafeFree(p_module->_internal->spirv_code);
+ // Free SPIR-V code if there was a copy
+ if ((p_module->_internal->module_flags & SPV_REFLECT_MODULE_FLAG_NO_COPY) == 0) {
+ SafeFree(p_module->_internal->spirv_code);
+ }
// Free internal
SafeFree(p_module->_internal);
}
@@ -5019,15 +5086,25 @@ SpvReflectResult spvReflectChangeOutputVariableLocation(
const char* spvReflectSourceLanguage(SpvSourceLanguage source_lang)
{
switch (source_lang) {
- case SpvSourceLanguageUnknown : return "Unknown";
- case SpvSourceLanguageESSL : return "ESSL";
- case SpvSourceLanguageGLSL : return "GLSL";
- case SpvSourceLanguageOpenCL_C : return "OpenCL_C";
- case SpvSourceLanguageOpenCL_CPP : return "OpenCL_CPP";
- case SpvSourceLanguageHLSL : return "HLSL";
-
+ case SpvSourceLanguageUnknown : return "Unknown";
+ case SpvSourceLanguageESSL : return "ESSL";
+ case SpvSourceLanguageGLSL : return "GLSL";
+ case SpvSourceLanguageOpenCL_C : return "OpenCL_C";
+ case SpvSourceLanguageOpenCL_CPP : return "OpenCL_CPP";
+ case SpvSourceLanguageHLSL : return "HLSL";
+ case SpvSourceLanguageCPP_for_OpenCL : return "CPP_for_OpenCL";
case SpvSourceLanguageMax:
break;
}
return "";
}
+
+const char* spvReflectBlockVariableTypeName(
+ const SpvReflectBlockVariable* p_var
+)
+{
+ if (p_var == NULL) {
+ return NULL;
+ }
+ return p_var->type_description->type_name;
+}
diff --git a/thirdparty/spirv-reflect/spirv_reflect.h b/thirdparty/spirv-reflect/spirv_reflect.h
index 50cc65222b..948533d3c0 100644
--- a/thirdparty/spirv-reflect/spirv_reflect.h
+++ b/thirdparty/spirv-reflect/spirv_reflect.h
@@ -1,5 +1,5 @@
/*
- Copyright 2017-2018 Google Inc.
+ Copyright 2017-2022 Google Inc.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@@ -76,6 +76,25 @@ typedef enum SpvReflectResult {
SPV_REFLECT_RESULT_ERROR_SPIRV_INVALID_EXECUTION_MODE,
} SpvReflectResult;
+/*! @enum SpvReflectModuleFlagBits
+
+SPV_REFLECT_MODULE_FLAG_NO_COPY - Disables copying of SPIR-V code
+ when a SPIRV-Reflect shader module is created. It is the
+ responsibility of the calling program to ensure that the pointer
+ remains valid and the memory it's pointing to is not freed while
+ SPIRV-Reflect operations are taking place. Freeing the backing
+ memory will cause undefined behavior or most likely a crash.
+ This is flag is intended for cases where the memory overhead of
+ storing the copied SPIR-V is undesirable.
+
+*/
+typedef enum SpvReflectModuleFlagBits {
+ SPV_REFLECT_MODULE_FLAG_NONE = 0x00000000,
+ SPV_REFLECT_MODULE_FLAG_NO_COPY = 0x00000001,
+} SpvReflectModuleFlagBits;
+
+typedef uint32_t SpvReflectModuleFlags;
+
/*! @enum SpvReflectTypeFlagBits
*/
@@ -101,6 +120,13 @@ typedef uint32_t SpvReflectTypeFlags;
/*! @enum SpvReflectDecorationBits
+NOTE: HLSL row_major and column_major decorations are reversed
+ in SPIR-V. Meaning that matrices declrations with row_major
+ will get reflected as column_major and vice versa. The
+ row and column decorations get appied during the compilation.
+ SPIRV-Reflect reads the data as is and does not make any
+ attempt to correct it to match what's in the source.
+
*/
typedef enum SpvReflectDecorationFlagBits {
SPV_REFLECT_DECORATION_NONE = 0x00000000,
@@ -112,6 +138,7 @@ typedef enum SpvReflectDecorationFlagBits {
SPV_REFLECT_DECORATION_NOPERSPECTIVE = 0x00000020,
SPV_REFLECT_DECORATION_FLAT = 0x00000040,
SPV_REFLECT_DECORATION_NON_WRITABLE = 0x00000080,
+ SPV_REFLECT_DECORATION_RELAXED_PRECISION = 0x00000100,
} SpvReflectDecorationFlagBits;
typedef uint32_t SpvReflectDecorationFlags;
@@ -198,12 +225,12 @@ typedef enum SpvReflectShaderStageFlagBits {
SPV_REFLECT_SHADER_STAGE_COMPUTE_BIT = 0x00000020, // = VK_SHADER_STAGE_COMPUTE_BIT
SPV_REFLECT_SHADER_STAGE_TASK_BIT_NV = 0x00000040, // = VK_SHADER_STAGE_TASK_BIT_NV
SPV_REFLECT_SHADER_STAGE_MESH_BIT_NV = 0x00000080, // = VK_SHADER_STAGE_MESH_BIT_NV
- SPV_REFLECT_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, // VK_SHADER_STAGE_RAYGEN_BIT_KHR
- SPV_REFLECT_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, // VK_SHADER_STAGE_ANY_HIT_BIT_KHR
- SPV_REFLECT_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, // VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
- SPV_REFLECT_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, // VK_SHADER_STAGE_MISS_BIT_KHR
- SPV_REFLECT_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, // VK_SHADER_STAGE_INTERSECTION_BIT_KHR
- SPV_REFLECT_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, // VK_SHADER_STAGE_CALLABLE_BIT_KHR
+ SPV_REFLECT_SHADER_STAGE_RAYGEN_BIT_KHR = 0x00000100, // = VK_SHADER_STAGE_RAYGEN_BIT_KHR
+ SPV_REFLECT_SHADER_STAGE_ANY_HIT_BIT_KHR = 0x00000200, // = VK_SHADER_STAGE_ANY_HIT_BIT_KHR
+ SPV_REFLECT_SHADER_STAGE_CLOSEST_HIT_BIT_KHR = 0x00000400, // = VK_SHADER_STAGE_CLOSEST_HIT_BIT_KHR
+ SPV_REFLECT_SHADER_STAGE_MISS_BIT_KHR = 0x00000800, // = VK_SHADER_STAGE_MISS_BIT_KHR
+ SPV_REFLECT_SHADER_STAGE_INTERSECTION_BIT_KHR = 0x00001000, // = VK_SHADER_STAGE_INTERSECTION_BIT_KHR
+ SPV_REFLECT_SHADER_STAGE_CALLABLE_BIT_KHR = 0x00002000, // = VK_SHADER_STAGE_CALLABLE_BIT_KHR
} SpvReflectShaderStageFlagBits;
@@ -261,7 +288,11 @@ typedef struct SpvReflectImageTraits {
typedef struct SpvReflectArrayTraits {
uint32_t dims_count;
+ // Each entry is: 0xFFFFFFFF for a specialization constant dimension,
+ // 0 for a runtime array dimension, and the array length otherwise.
uint32_t dims[SPV_REFLECT_MAX_ARRAY_DIMS];
+ // Stores Ids for dimensions that are specialization constants
+ uint32_t spec_constant_op_ids[SPV_REFLECT_MAX_ARRAY_DIMS];
uint32_t stride; // Measured in bytes
} SpvReflectArrayTraits;
@@ -432,6 +463,8 @@ typedef struct SpvReflectEntryPoint {
uint32_t y;
uint32_t z;
} local_size;
+ uint32_t invocations; // valid for geometry
+ uint32_t output_vertices; // valid for geometry, tesselation
} SpvReflectEntryPoint;
/*! @struct SpvReflectShaderModule
@@ -467,6 +500,7 @@ typedef struct SpvReflectShaderModule {
// -- GODOT end --
struct Internal {
+ SpvReflectModuleFlags module_flags;
size_t spirv_size;
uint32_t* spirv_code;
uint32_t spirv_word_count;
@@ -495,6 +529,22 @@ SpvReflectResult spvReflectCreateShaderModule(
SpvReflectShaderModule* p_module
);
+/*! @fn spvReflectCreateShaderModule2
+
+ @param flags Flags for module creations.
+ @param size Size in bytes of SPIR-V code.
+ @param p_code Pointer to SPIR-V code.
+ @param p_module Pointer to an instance of SpvReflectShaderModule.
+ @return SPV_REFLECT_RESULT_SUCCESS on success.
+
+*/
+SpvReflectResult spvReflectCreateShaderModule2(
+ SpvReflectModuleFlags flags,
+ size_t size,
+ const void* p_code,
+ SpvReflectShaderModule* p_module
+);
+
SPV_REFLECT_DEPRECATED("renamed to spvReflectCreateShaderModule")
SpvReflectResult spvReflectGetShaderModule(
size_t size,
@@ -1382,7 +1432,7 @@ SpvReflectResult spvReflectChangeInputVariableLocation(
by multiple entry points in the module, it will be changed in all of
them.
@param p_module Pointer to an instance of SpvReflectShaderModule.
- @param p_output_variable Pointer to the output variable to update.
+ @param p_output_variable Pointer to the output variable to update.
@param new_location The new location to assign to p_output_variable.
@return If successful, returns SPV_REFLECT_RESULT_SUCCESS.
Otherwise, the error code indicates the cause of
@@ -1404,6 +1454,16 @@ SpvReflectResult spvReflectChangeOutputVariableLocation(
*/
const char* spvReflectSourceLanguage(SpvSourceLanguage source_lang);
+/*! @fn spvReflectBlockVariableTypeName
+
+ @param p_var Pointer to block variable.
+ @return Returns string of block variable's type description type name
+ or NULL if p_var is NULL.
+*/
+const char* spvReflectBlockVariableTypeName(
+ const SpvReflectBlockVariable* p_var
+);
+
#if defined(__cplusplus)
};
#endif
@@ -1421,9 +1481,9 @@ namespace spv_reflect {
class ShaderModule {
public:
ShaderModule();
- ShaderModule(size_t size, const void* p_code);
- ShaderModule(const std::vector<uint8_t>& code);
- ShaderModule(const std::vector<uint32_t>& code);
+ ShaderModule(size_t size, const void* p_code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
+ ShaderModule(const std::vector<uint8_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
+ ShaderModule(const std::vector<uint32_t>& code, SpvReflectModuleFlags flags = SPV_REFLECT_MODULE_FLAG_NONE);
~ShaderModule();
ShaderModule(ShaderModule&& other);
@@ -1533,8 +1593,9 @@ inline ShaderModule::ShaderModule() {}
@param p_code
*/
-inline ShaderModule::ShaderModule(size_t size, const void* p_code) {
- m_result = spvReflectCreateShaderModule(
+inline ShaderModule::ShaderModule(size_t size, const void* p_code, SpvReflectModuleFlags flags) {
+ m_result = spvReflectCreateShaderModule2(
+ flags,
size,
p_code,
&m_module);
@@ -1545,8 +1606,9 @@ inline ShaderModule::ShaderModule(size_t size, const void* p_code) {
@param code
*/
-inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code) {
- m_result = spvReflectCreateShaderModule(
+inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code, SpvReflectModuleFlags flags) {
+ m_result = spvReflectCreateShaderModule2(
+ flags,
code.size(),
code.data(),
&m_module);
@@ -1557,8 +1619,9 @@ inline ShaderModule::ShaderModule(const std::vector<uint8_t>& code) {
@param code
*/
-inline ShaderModule::ShaderModule(const std::vector<uint32_t>& code) {
- m_result = spvReflectCreateShaderModule(
+inline ShaderModule::ShaderModule(const std::vector<uint32_t>& code, SpvReflectModuleFlags flags) {
+ m_result = spvReflectCreateShaderModule2(
+ flags,
code.size() * sizeof(uint32_t),
code.data(),
&m_module);
diff --git a/thirdparty/thorvg/AUTHORS b/thirdparty/thorvg/AUTHORS
index 66057232b6..0f8ba2dd7d 100644
--- a/thirdparty/thorvg/AUTHORS
+++ b/thirdparty/thorvg/AUTHORS
@@ -1,4 +1,4 @@
-Hermet Park <chuneon.park@samsung.com>
+Hermet Park <hermetpark@gmail.com>
Prudhvi Raj Vasireddi <prudhvi.raj@samsung.com>
Junsu Choi <jsuya.choi@samsung.com>
Pranay Samanta <pranay.ks@samsung.com>
@@ -13,3 +13,5 @@ Pankaj Kumar <pankaj.m1@samsung.com>
Patryk Kaczmarek <patryk.k@partner.samsung.com>
Michal Maciola <m.maciola@samsung.com>
Peter Vullings <peter@projectitis.com>
+K. S. Ernest (iFire) Lee <ernest.lee@chibifire.com>
+Rémi Verschelde <rverschelde@gmail.com>
diff --git a/thirdparty/thorvg/LICENSE b/thirdparty/thorvg/LICENSE
index b096b0888e..2f0361a864 100644
--- a/thirdparty/thorvg/LICENSE
+++ b/thirdparty/thorvg/LICENSE
@@ -1,4 +1,4 @@
-Copyright (c) 2020 - 2021 notice for the ThorVG Project (see AUTHORS)
+Copyright (c) 2020 - 2022 notice for the ThorVG Project (see AUTHORS)
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
diff --git a/thirdparty/thorvg/inc/config.h b/thirdparty/thorvg/inc/config.h
index 04a450b1bb..d72574bc65 100644
--- a/thirdparty/thorvg/inc/config.h
+++ b/thirdparty/thorvg/inc/config.h
@@ -13,5 +13,5 @@
#define THORVG_JPG_LOADER_SUPPORT 1
-#define THORVG_VERSION_STRING "0.7.0"
+#define THORVG_VERSION_STRING "0.8.0"
#endif
diff --git a/thirdparty/thorvg/inc/thorvg.h b/thirdparty/thorvg/inc/thorvg.h
index e542d36555..b08356d9d5 100644
--- a/thirdparty/thorvg/inc/thorvg.h
+++ b/thirdparty/thorvg/inc/thorvg.h
@@ -145,8 +145,9 @@ enum class TVG_EXPORT CompositeMethod
{
None = 0, ///< No composition is applied.
ClipPath, ///< The intersection of the source and the target is determined and only the resulting pixels from the source are rendered.
- AlphaMask, ///< The pixels of the source and the target are alpha blended. As a result, only the part of the source, which intersects with the target is visible.
- InvAlphaMask ///< The pixels of the source and the complement to the target's pixels are alpha blended. As a result, only the part of the source which is not covered by the target is visible.
+ AlphaMask, ///< The pixels of the source and the target are alpha blended. As a result, only the part of the source, which alpha intersects with the target is visible.
+ InvAlphaMask, ///< The pixels of the source and the complement to the target's pixels are alpha blended. As a result, only the part of the source which alpha is not covered by the target is visible.
+ LumaMask ///< @BETA_API The source pixels are converted to the grayscale (luma value) and alpha blended with the target. As a result, only the part of the source, which intersects with the target is visible.
};
/**
diff --git a/thirdparty/thorvg/patches/thorvg-pr1159-mingw-fix.patch b/thirdparty/thorvg/patches/thorvg-pr1159-mingw-fix.patch
deleted file mode 100644
index a174880306..0000000000
--- a/thirdparty/thorvg/patches/thorvg-pr1159-mingw-fix.patch
+++ /dev/null
@@ -1,73 +0,0 @@
-diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
-index def8ae169a..cf103774c5 100644
---- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
-+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
-@@ -51,6 +51,7 @@
-
- #define _USE_MATH_DEFINES //Math Constants are not defined in Standard C/C++.
-
-+#include <cstring>
- #include <fstream>
- #include <float.h>
- #include <math.h>
-diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
-index 2b62315de8..32685ee620 100644
---- a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
-+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
-@@ -50,6 +50,7 @@
-
- #define _USE_MATH_DEFINES //Math Constants are not defined in Standard C/C++.
-
-+#include <cstring>
- #include <math.h>
- #include <clocale>
- #include <ctype.h>
-diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
-index 8701fe32b1..ae17634f31 100644
---- a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
-+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
-@@ -49,6 +49,7 @@
- */
-
-
-+#include <cstring>
- #include <string>
- #include "tvgMath.h"
- #include "tvgSvgLoaderCommon.h"
-diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
-index d5b9cdcf7b..9f269b29a2 100644
---- a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
-+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
-@@ -20,6 +20,7 @@
- * SOFTWARE.
- */
-
-+#include <cstring>
- #include <math.h>
- #include <memory.h>
- #include "tvgSvgUtil.h"
-diff --git a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
-index 2e3d5928d9..1571aa4e25 100644
---- a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
-+++ b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
-@@ -20,6 +20,7 @@
- * SOFTWARE.
- */
-
-+#include <cstring>
- #include <ctype.h>
- #include <string>
-
-diff --git a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
-index 9450d80e88..9dd57e5a89 100644
---- a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
-+++ b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
-@@ -24,6 +24,8 @@
- #include "tvgTvgSaver.h"
- #include "tvgLzw.h"
-
-+#include <cstring>
-+
- #ifdef _WIN32
- #include <malloc.h>
- #else
diff --git a/thirdparty/thorvg/patches/thorvg-pr1166-vs2017-minmax.patch b/thirdparty/thorvg/patches/thorvg-pr1166-vs2017-minmax.patch
deleted file mode 100644
index 0b045bd05a..0000000000
--- a/thirdparty/thorvg/patches/thorvg-pr1166-vs2017-minmax.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp
-index 78537e7726..c75e73760e 100644
---- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp
-+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp
-@@ -23,6 +23,7 @@
- #include "tvgSwCommon.h"
- #include "tvgTaskScheduler.h"
- #include "tvgSwRenderer.h"
-+#include "tvgMath.h"
-
- /************************************************************************/
- /* Internal Class Implementation */
-@@ -594,10 +595,10 @@ void* SwRenderer::prepareCommon(SwTask* task, const RenderTransform* transform,
- task->surface = surface;
- task->mpool = mpool;
- task->flags = flags;
-- task->bbox.min.x = max(static_cast<SwCoord>(0), static_cast<SwCoord>(vport.x));
-- task->bbox.min.y = max(static_cast<SwCoord>(0), static_cast<SwCoord>(vport.y));
-- task->bbox.max.x = min(static_cast<SwCoord>(surface->w), static_cast<SwCoord>(vport.x + vport.w));
-- task->bbox.max.y = min(static_cast<SwCoord>(surface->h), static_cast<SwCoord>(vport.y + vport.h));
-+ task->bbox.min.x = mathMax(static_cast<SwCoord>(0), static_cast<SwCoord>(vport.x));
-+ task->bbox.min.y = mathMax(static_cast<SwCoord>(0), static_cast<SwCoord>(vport.y));
-+ task->bbox.max.x = mathMin(static_cast<SwCoord>(surface->w), static_cast<SwCoord>(vport.x + vport.w));
-+ task->bbox.max.y = mathMin(static_cast<SwCoord>(surface->h), static_cast<SwCoord>(vport.y + vport.h));
-
- if (!task->pushed) {
- task->pushed = true;
-diff --git a/thirdparty/thorvg/src/lib/tvgMath.h b/thirdparty/thorvg/src/lib/tvgMath.h
-index 9e5c915fc3..94b4fe1cf1 100644
---- a/thirdparty/thorvg/src/lib/tvgMath.h
-+++ b/thirdparty/thorvg/src/lib/tvgMath.h
-@@ -29,6 +29,10 @@
- #include "tvgCommon.h"
-
-
-+#define mathMin(x, y) (((x) < (y)) ? (x) : (y))
-+#define mathMax(x, y) (((x) > (y)) ? (x) : (y))
-+
-+
- static inline bool mathZero(float a)
- {
- return (fabsf(a) < FLT_EPSILON) ? true : false;
-@@ -154,4 +158,4 @@ static inline Matrix mathMultiply(const Matrix* lhs, const Matrix* rhs)
- }
-
-
--#endif //_TVG_MATH_H_
-\ No newline at end of file
-+#endif //_TVG_MATH_H_
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwCommon.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwCommon.h
index e0ffc1fb97..be7042d6de 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwCommon.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwCommon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -235,6 +235,7 @@ struct SwImage
struct SwBlender
{
uint32_t (*join)(uint8_t r, uint8_t g, uint8_t b, uint8_t a);
+ uint32_t (*lumaValue)(uint32_t c);
};
struct SwCompositor;
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwFill.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwFill.cpp
index 0bf051c17f..04014a9ec3 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwFill.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwFill.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwImage.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwImage.cpp
index fe22fce017..f24d2d6f27 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwImage.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwImage.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -84,8 +84,8 @@ bool imagePrepare(SwImage* image, const Matrix* transform, const SwBBox& clipReg
//Fast track: Non-transformed image but just shifted.
if (image->direct) {
- image->ox = -static_cast<uint32_t>(round(transform->e13));
- image->oy = -static_cast<uint32_t>(round(transform->e23));
+ image->ox = -static_cast<int32_t>(round(transform->e13));
+ image->oy = -static_cast<int32_t>(round(transform->e23));
//Figure out the scale factor by transform matrix
} else {
auto scaleX = sqrtf((transform->e11 * transform->e11) + (transform->e21 * transform->e21));
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwMath.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwMath.cpp
index 7a3529bd69..7f13609525 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwMath.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwMath.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwMemPool.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwMemPool.cpp
index a44be85bbb..3ab0b6069e 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwMemPool.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwMemPool.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRaster.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRaster.cpp
index deebed16ee..e3deebe24f 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRaster.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRaster.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -47,6 +47,18 @@ static inline uint32_t _ialpha(uint32_t c)
}
+static inline uint32_t _abgrLumaValue(uint32_t c)
+{
+ return ((((c&0xff)*54) + (((c>>8)&0xff)*183) + (((c>>16)&0xff)*19))) >> 8; //0.2125*R + 0.7154*G + 0.0721*B
+}
+
+
+static inline uint32_t _argbLumaValue(uint32_t c)
+{
+ return ((((c&0xff)*19) + (((c>>8)&0xff)*183) + (((c>>16)&0xff)*54))) >> 8; //0.0721*B + 0.7154*G + 0.2125*R
+}
+
+
static inline uint32_t _abgrJoin(uint8_t r, uint8_t g, uint8_t b, uint8_t a)
{
return (a << 24 | b << 16 | g << 8 | r);
@@ -139,7 +151,7 @@ static bool _rasterMaskedRect(SwSurface* surface, const SwBBox& region, uint32_t
auto w = static_cast<uint32_t>(region.max.x - region.min.x);
auto h = static_cast<uint32_t>(region.max.y - region.min.y);
- auto cbuffer = surface->compositor->image.data + (region.min.y * surface->compositor->image.stride) + region.min.x; //compositor buffer
+ auto cbuffer = surface->compositor->image.data + (region.min.y * surface->compositor->image.stride) + region.min.x; //compositor buffer
for (uint32_t y = 0; y < h; ++y) {
auto dst = &buffer[y * surface->stride];
@@ -173,6 +185,8 @@ static bool _rasterRect(SwSurface* surface, const SwBBox& region, uint32_t color
return _rasterMaskedRect(surface, region, color, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterMaskedRect(surface, region, color, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterMaskedRect(surface, region, color, surface->blender.lumaValue);
}
} else {
if (opacity == 255) {
@@ -246,6 +260,8 @@ static bool _rasterRle(SwSurface* surface, SwRleData* rle, uint32_t color, uint8
return _rasterMaskedRle(surface, rle, color, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterMaskedRle(surface, rle, color, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterMaskedRle(surface, rle, color, surface->blender.lumaValue);
}
} else {
if (opacity == 255) {
@@ -275,6 +291,8 @@ static bool _transformedRleRGBAImage(SwSurface* surface, const SwImage* image, c
return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, surface->blender.lumaValue);
}
} else {
return _rasterTexmapPolygon(surface, image, transform, nullptr, opacity, nullptr);
@@ -481,7 +499,10 @@ static bool _rasterScaledRleRGBAImage(SwSurface* surface, const SwImage* image,
static bool _scaledRleRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox& region, uint32_t opacity)
{
Matrix itransform;
- if (transform && !mathInverse(transform, &itransform)) return false;
+
+ if (transform) {
+ if (!mathInverse(transform, &itransform)) return false;
+ } else mathIdentity(&itransform);
auto halfScale = _halfScale(image->scale);
@@ -491,12 +512,16 @@ static bool _scaledRleRGBAImage(SwSurface* surface, const SwImage* image, const
return _rasterScaledMaskedRleRGBAImage(surface, image, &itransform, region, halfScale, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterScaledMaskedRleRGBAImage(surface, image, &itransform, region, halfScale, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterScaledMaskedRleRGBAImage(surface, image, &itransform, region, halfScale, surface->blender.lumaValue);
}
} else {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
return _rasterScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, region, opacity, halfScale, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, region, opacity, halfScale, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterScaledMaskedTranslucentRleRGBAImage(surface, image, &itransform, region, opacity, halfScale, surface->blender.lumaValue);
}
}
} else {
@@ -613,12 +638,16 @@ static bool _directRleRGBAImage(SwSurface* surface, const SwImage* image, uint32
return _rasterDirectMaskedRleRGBAImage(surface, image, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterDirectMaskedRleRGBAImage(surface, image, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterDirectMaskedRleRGBAImage(surface, image, surface->blender.lumaValue);
}
} else {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
return _rasterDirectMaskedTranslucentRleRGBAImage(surface, image, opacity, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterDirectMaskedTranslucentRleRGBAImage(surface, image, opacity, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterDirectMaskedTranslucentRleRGBAImage(surface, image, opacity, surface->blender.lumaValue);
}
}
} else {
@@ -640,6 +669,8 @@ static bool _transformedRGBAImage(SwSurface* surface, const SwImage* image, cons
return _rasterTexmapPolygon(surface, image, transform, &region, opacity, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterTexmapPolygon(surface, image, transform, &region, opacity, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterTexmapPolygon(surface, image, transform, &region, opacity, surface->blender.lumaValue);
}
} else {
return _rasterTexmapPolygon(surface, image, transform, &region, opacity, nullptr);
@@ -816,7 +847,10 @@ static bool _rasterScaledRGBAImage(SwSurface* surface, const SwImage* image, con
static bool _scaledRGBAImage(SwSurface* surface, const SwImage* image, const Matrix* transform, const SwBBox& region, uint32_t opacity)
{
Matrix itransform;
- if (transform && !mathInverse(transform, &itransform)) return false;
+
+ if (transform) {
+ if (!mathInverse(transform, &itransform)) return false;
+ } else mathIdentity(&itransform);
auto halfScale = _halfScale(image->scale);
@@ -826,12 +860,16 @@ static bool _scaledRGBAImage(SwSurface* surface, const SwImage* image, const Mat
return _rasterScaledMaskedRGBAImage(surface, image, &itransform, region, halfScale, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterScaledMaskedRGBAImage(surface, image, &itransform, region, halfScale, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterScaledMaskedRGBAImage(surface, image, &itransform, region, halfScale, surface->blender.lumaValue);
}
} else {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
return _rasterScaledMaskedTranslucentRGBAImage(surface, image, &itransform, region, opacity, halfScale, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterScaledMaskedTranslucentRGBAImage(surface, image, &itransform, region, opacity, halfScale, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterScaledMaskedTranslucentRGBAImage(surface, image, &itransform, region, opacity, halfScale, surface->blender.lumaValue);
}
}
} else {
@@ -855,7 +893,7 @@ static bool _rasterDirectMaskedRGBAImage(SwSurface* surface, const SwImage* imag
auto w2 = static_cast<uint32_t>(region.max.x - region.min.x);
auto sbuffer = image->data + (region.min.y + image->oy) * image->stride + (region.min.x + image->ox);
- auto cbuffer = surface->compositor->image.data + (region.min.y * surface->compositor->image.stride) + region.min.x; //compositor buffer
+ auto cbuffer = surface->compositor->image.data + (region.min.y * surface->compositor->image.stride) + region.min.x; //compositor buffer
for (uint32_t y = 0; y < h2; ++y) {
auto dst = buffer;
@@ -882,7 +920,7 @@ static bool _rasterDirectMaskedTranslucentRGBAImage(SwSurface* surface, const Sw
auto w2 = static_cast<uint32_t>(region.max.x - region.min.x);
auto sbuffer = image->data + (region.min.y + image->oy) * image->stride + (region.min.x + image->ox);
- auto cbuffer = surface->compositor->image.data + (region.min.y * surface->compositor->image.stride) + region.min.x; //compositor buffer
+ auto cbuffer = surface->compositor->image.data + (region.min.y * surface->compositor->image.stride) + region.min.x; //compositor buffer
for (uint32_t y = 0; y < h2; ++y) {
auto dst = buffer;
@@ -946,12 +984,16 @@ static bool _directRGBAImage(SwSurface* surface, const SwImage* image, const SwB
return _rasterDirectMaskedRGBAImage(surface, image, region, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterDirectMaskedRGBAImage(surface, image, region, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterDirectMaskedRGBAImage(surface, image, region, surface->blender.lumaValue);
}
} else {
if (surface->compositor->method == CompositeMethod::AlphaMask) {
return _rasterDirectMaskedTranslucentRGBAImage(surface, image, region, opacity, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterDirectMaskedTranslucentRGBAImage(surface, image, region, opacity, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterDirectMaskedTranslucentRGBAImage(surface, image, region, opacity, surface->blender.lumaValue);
}
}
} else {
@@ -1056,6 +1098,8 @@ static bool _rasterLinearGradientRect(SwSurface* surface, const SwBBox& region,
return _rasterLinearGradientMaskedRect(surface, region, fill, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterLinearGradientMaskedRect(surface, region, fill, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterLinearGradientMaskedRect(surface, region, fill, surface->blender.lumaValue);
}
} else {
if (fill->translucent) return _rasterTranslucentLinearGradientRect(surface, region, fill);
@@ -1113,12 +1157,12 @@ static bool _rasterTranslucentLinearGradientRle(SwSurface* surface, const SwRleD
auto dst = &surface->buffer[span->y * surface->stride + span->x];
fillFetchLinear(fill, buffer, span->y, span->x, span->len);
if (span->coverage == 255) {
- for (uint32_t i = 0; i < span->len; ++i, ++dst) {
- *dst = buffer[i] + ALPHA_BLEND(*dst, _ialpha(buffer[i]));
+ for (uint32_t x = 0; x < span->len; ++x, ++dst) {
+ *dst = buffer[x] + ALPHA_BLEND(*dst, _ialpha(buffer[x]));
}
} else {
- for (uint32_t i = 0; i < span->len; ++i, ++dst) {
- auto tmp = ALPHA_BLEND(buffer[i], span->coverage);
+ for (uint32_t x = 0; x < span->len; ++x, ++dst) {
+ auto tmp = ALPHA_BLEND(buffer[x], span->coverage);
*dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp));
}
}
@@ -1142,8 +1186,8 @@ static bool _rasterSolidLinearGradientRle(SwSurface* surface, const SwRleData* r
} else {
fillFetchLinear(fill, buf, span->y, span->x, span->len);
auto dst = &surface->buffer[span->y * surface->stride + span->x];
- for (uint32_t i = 0; i < span->len; ++i) {
- dst[i] = INTERPOLATE(span->coverage, buf[i], dst[i]);
+ for (uint32_t x = 0; x < span->len; ++x) {
+ dst[x] = INTERPOLATE(span->coverage, buf[x], dst[x]);
}
}
}
@@ -1160,6 +1204,8 @@ static bool _rasterLinearGradientRle(SwSurface* surface, const SwRleData* rle, c
return _rasterLinearGradientMaskedRle(surface, rle, fill, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterLinearGradientMaskedRle(surface, rle, fill, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterLinearGradientMaskedRle(surface, rle, fill, surface->blender.lumaValue);
}
} else {
if (fill->translucent) return _rasterTranslucentLinearGradientRle(surface, rle, fill);
@@ -1247,6 +1293,8 @@ static bool _rasterRadialGradientRect(SwSurface* surface, const SwBBox& region,
return _rasterRadialGradientMaskedRect(surface, region, fill, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterRadialGradientMaskedRect(surface, region, fill, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterRadialGradientMaskedRect(surface, region, fill, surface->blender.lumaValue);
}
} else {
if (fill->translucent) return _rasterTranslucentRadialGradientRect(surface, region, fill);
@@ -1302,12 +1350,12 @@ static bool _rasterTranslucentRadialGradientRle(SwSurface* surface, const SwRleD
auto dst = &surface->buffer[span->y * surface->stride + span->x];
fillFetchRadial(fill, buffer, span->y, span->x, span->len);
if (span->coverage == 255) {
- for (uint32_t i = 0; i < span->len; ++i, ++dst) {
- *dst = buffer[i] + ALPHA_BLEND(*dst, _ialpha(buffer[i]));
+ for (uint32_t x = 0; x < span->len; ++x, ++dst) {
+ *dst = buffer[x] + ALPHA_BLEND(*dst, _ialpha(buffer[x]));
}
} else {
- for (uint32_t i = 0; i < span->len; ++i, ++dst) {
- auto tmp = ALPHA_BLEND(buffer[i], span->coverage);
+ for (uint32_t x = 0; x < span->len; ++x, ++dst) {
+ auto tmp = ALPHA_BLEND(buffer[x], span->coverage);
*dst = tmp + ALPHA_BLEND(*dst, _ialpha(tmp));
}
}
@@ -1332,8 +1380,8 @@ static bool _rasterSolidRadialGradientRle(SwSurface* surface, const SwRleData* r
} else {
fillFetchRadial(fill, buf, span->y, span->x, span->len);
auto ialpha = 255 - span->coverage;
- for (uint32_t i = 0; i < span->len; ++i, ++dst) {
- *dst = ALPHA_BLEND(buf[i], span->coverage) + ALPHA_BLEND(*dst, ialpha);
+ for (uint32_t x = 0; x < span->len; ++x, ++dst) {
+ *dst = ALPHA_BLEND(buf[x], span->coverage) + ALPHA_BLEND(*dst, ialpha);
}
}
}
@@ -1350,6 +1398,8 @@ static bool _rasterRadialGradientRle(SwSurface* surface, const SwRleData* rle, c
return _rasterRadialGradientMaskedRle(surface, rle, fill, _alpha);
} else if (surface->compositor->method == CompositeMethod::InvAlphaMask) {
return _rasterRadialGradientMaskedRle(surface, rle, fill, _ialpha);
+ } else if (surface->compositor->method == CompositeMethod::LumaMask) {
+ return _rasterRadialGradientMaskedRle(surface, rle, fill, surface->blender.lumaValue);
}
} else {
if (fill->translucent) _rasterTranslucentRadialGradientRle(surface, rle, fill);
@@ -1379,8 +1429,10 @@ bool rasterCompositor(SwSurface* surface)
{
if (surface->cs == SwCanvas::ABGR8888 || surface->cs == SwCanvas::ABGR8888_STRAIGHT) {
surface->blender.join = _abgrJoin;
+ surface->blender.lumaValue = _abgrLumaValue;
} else if (surface->cs == SwCanvas::ARGB8888 || surface->cs == SwCanvas::ARGB8888_STRAIGHT) {
surface->blender.join = _argbJoin;
+ surface->blender.lumaValue = _argbLumaValue;
} else {
//What Color Space ???
return false;
@@ -1487,11 +1539,11 @@ bool rasterStroke(SwSurface* surface, SwShape* shape, uint8_t r, uint8_t g, uint
bool rasterImage(SwSurface* surface, SwImage* image, const Matrix* transform, const SwBBox& bbox, uint32_t opacity)
{
//Verify Boundary
- if (bbox.max.x < 0 || bbox.max.y < 0 || bbox.min.x >= surface->w || bbox.min.y >= surface->h) return false;
+ if (bbox.max.x < 0 || bbox.max.y < 0 || bbox.min.x >= static_cast<SwCoord>(surface->w) || bbox.min.y >= static_cast<SwCoord>(surface->h)) return false;
//TOOD: switch (image->format)
//TODO: case: _rasterRGBImage()
//TODO: case: _rasterGrayscaleImage()
//TODO: case: _rasterAlphaImage()
return _rasterRGBAImage(surface, image, transform, bbox, opacity);
-} \ No newline at end of file
+}
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterAvx.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterAvx.h
index 1d6552f3e9..7a129a3a80 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterAvx.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterAvx.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterC.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterC.h
index 6d60957eb9..d479ede15f 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterC.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterC.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterNeon.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterNeon.h
index c74a6b309c..a4b3cdaeb2 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterNeon.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterNeon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -26,8 +26,8 @@
static inline uint8x8_t ALPHA_BLEND(uint8x8_t c, uint8x8_t a)
{
- uint16x8_t t = vmull_u8(c, a);
- return vshrn_n_u16(t, 8);
+ uint16x8_t t = vmull_u8(c, a);
+ return vshrn_n_u16(t, 8);
}
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmap.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmap.h
index 2cf9fb4e93..1faedd60aa 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmap.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmap.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmapInternal.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmapInternal.h
index 4e8d342137..f31ea1eb97 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmapInternal.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRasterTexmapInternal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -58,8 +58,8 @@
y = yStart;
while (y < yEnd) {
- x1 = _xa;
- x2 = _xb;
+ x1 = (int32_t)_xa;
+ x2 = (int32_t)_xb;
if (!region) {
minx = INT32_MAX;
@@ -160,4 +160,4 @@ next:
xb = _xb;
ua = _ua;
va = _va;
-} \ No newline at end of file
+}
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp
index c75e73760e..c3872f3207 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -19,11 +19,10 @@
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
-#include <math.h>
+#include "tvgMath.h"
#include "tvgSwCommon.h"
#include "tvgTaskScheduler.h"
#include "tvgSwRenderer.h"
-#include "tvgMath.h"
/************************************************************************/
/* Internal Class Implementation */
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.h b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.h
index 3f883ac409..574d9d488f 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.h
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRenderer.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRle.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRle.cpp
index b41e48b7ca..aa975869e0 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwRle.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwRle.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwShape.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwShape.cpp
index 7b49c232b1..2a2c6a1da3 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwShape.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwShape.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/sw_engine/tvgSwStroke.cpp b/thirdparty/thorvg/src/lib/sw_engine/tvgSwStroke.cpp
index c0cfc1be26..04aa9a36ec 100644
--- a/thirdparty/thorvg/src/lib/sw_engine/tvgSwStroke.cpp
+++ b/thirdparty/thorvg/src/lib/sw_engine/tvgSwStroke.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgAccessor.cpp b/thirdparty/thorvg/src/lib/tvgAccessor.cpp
index 085c8a3cbc..9fd564dd23 100644
--- a/thirdparty/thorvg/src/lib/tvgAccessor.cpp
+++ b/thirdparty/thorvg/src/lib/tvgAccessor.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
diff --git a/thirdparty/thorvg/src/lib/tvgArray.h b/thirdparty/thorvg/src/lib/tvgArray.h
index d04e68e73c..04ddbaee2b 100644
--- a/thirdparty/thorvg/src/lib/tvgArray.h
+++ b/thirdparty/thorvg/src/lib/tvgArray.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgBezier.cpp b/thirdparty/thorvg/src/lib/tvgBezier.cpp
index 2290afa728..95e2055943 100644
--- a/thirdparty/thorvg/src/lib/tvgBezier.cpp
+++ b/thirdparty/thorvg/src/lib/tvgBezier.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgBezier.h b/thirdparty/thorvg/src/lib/tvgBezier.h
index 866e39148e..7d7c84e34e 100644
--- a/thirdparty/thorvg/src/lib/tvgBezier.h
+++ b/thirdparty/thorvg/src/lib/tvgBezier.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgBinaryDesc.h b/thirdparty/thorvg/src/lib/tvgBinaryDesc.h
index 30ba2d5a29..f139def470 100644
--- a/thirdparty/thorvg/src/lib/tvgBinaryDesc.h
+++ b/thirdparty/thorvg/src/lib/tvgBinaryDesc.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgCanvas.cpp b/thirdparty/thorvg/src/lib/tvgCanvas.cpp
index bb42441c62..e8529e47c2 100644
--- a/thirdparty/thorvg/src/lib/tvgCanvas.cpp
+++ b/thirdparty/thorvg/src/lib/tvgCanvas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgCanvasImpl.h b/thirdparty/thorvg/src/lib/tvgCanvasImpl.h
index 848c03aaed..0adec8fa52 100644
--- a/thirdparty/thorvg/src/lib/tvgCanvasImpl.h
+++ b/thirdparty/thorvg/src/lib/tvgCanvasImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgCommon.h b/thirdparty/thorvg/src/lib/tvgCommon.h
index b1c586188c..1d66f2e1a2 100644
--- a/thirdparty/thorvg/src/lib/tvgCommon.h
+++ b/thirdparty/thorvg/src/lib/tvgCommon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgFill.cpp b/thirdparty/thorvg/src/lib/tvgFill.cpp
index 4bfb93c102..0c0581a180 100644
--- a/thirdparty/thorvg/src/lib/tvgFill.cpp
+++ b/thirdparty/thorvg/src/lib/tvgFill.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgFill.h b/thirdparty/thorvg/src/lib/tvgFill.h
index 912091f8cb..fff2475c4f 100644
--- a/thirdparty/thorvg/src/lib/tvgFill.h
+++ b/thirdparty/thorvg/src/lib/tvgFill.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgGlCanvas.cpp b/thirdparty/thorvg/src/lib/tvgGlCanvas.cpp
index 3a88b6d799..56feb69541 100644
--- a/thirdparty/thorvg/src/lib/tvgGlCanvas.cpp
+++ b/thirdparty/thorvg/src/lib/tvgGlCanvas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgInitializer.cpp b/thirdparty/thorvg/src/lib/tvgInitializer.cpp
index 83ec50be95..42997c3493 100644
--- a/thirdparty/thorvg/src/lib/tvgInitializer.cpp
+++ b/thirdparty/thorvg/src/lib/tvgInitializer.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgIteratorAccessor.h b/thirdparty/thorvg/src/lib/tvgIteratorAccessor.h
index 10b55a536d..8e566acb72 100644
--- a/thirdparty/thorvg/src/lib/tvgIteratorAccessor.h
+++ b/thirdparty/thorvg/src/lib/tvgIteratorAccessor.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgLinearGradient.cpp b/thirdparty/thorvg/src/lib/tvgLinearGradient.cpp
index 6ec7ddab20..df34af3aa1 100644
--- a/thirdparty/thorvg/src/lib/tvgLinearGradient.cpp
+++ b/thirdparty/thorvg/src/lib/tvgLinearGradient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgLoadModule.h b/thirdparty/thorvg/src/lib/tvgLoadModule.h
index 0c34ecbf6a..bfcc165f31 100644
--- a/thirdparty/thorvg/src/lib/tvgLoadModule.h
+++ b/thirdparty/thorvg/src/lib/tvgLoadModule.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgLoader.cpp b/thirdparty/thorvg/src/lib/tvgLoader.cpp
index fb93e0faec..991c260159 100644
--- a/thirdparty/thorvg/src/lib/tvgLoader.cpp
+++ b/thirdparty/thorvg/src/lib/tvgLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgLoader.h b/thirdparty/thorvg/src/lib/tvgLoader.h
index 8ba3c139fa..ab32f89a2f 100644
--- a/thirdparty/thorvg/src/lib/tvgLoader.h
+++ b/thirdparty/thorvg/src/lib/tvgLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgLzw.cpp b/thirdparty/thorvg/src/lib/tvgLzw.cpp
index 0049c89962..1aaf37831a 100644
--- a/thirdparty/thorvg/src/lib/tvgLzw.cpp
+++ b/thirdparty/thorvg/src/lib/tvgLzw.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgLzw.h b/thirdparty/thorvg/src/lib/tvgLzw.h
index 3fdb439a02..1bd5c61fac 100644
--- a/thirdparty/thorvg/src/lib/tvgLzw.h
+++ b/thirdparty/thorvg/src/lib/tvgLzw.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgMath.h b/thirdparty/thorvg/src/lib/tvgMath.h
index 94b4fe1cf1..6120216d74 100644
--- a/thirdparty/thorvg/src/lib/tvgMath.h
+++ b/thirdparty/thorvg/src/lib/tvgMath.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -47,7 +47,7 @@ static inline bool mathEqual(float a, float b)
static inline bool mathRightAngle(const Matrix* m)
{
- auto radian = fabsf(atan2(m->e21, m->e11));
+ auto radian = fabsf(atan2f(m->e21, m->e11));
if (radian < FLT_EPSILON || mathEqual(radian, float(M_PI_2)) || mathEqual(radian, float(M_PI))) return true;
return false;
}
diff --git a/thirdparty/thorvg/src/lib/tvgPaint.cpp b/thirdparty/thorvg/src/lib/tvgPaint.cpp
index 30e82fbc60..d0e908ddf2 100644
--- a/thirdparty/thorvg/src/lib/tvgPaint.cpp
+++ b/thirdparty/thorvg/src/lib/tvgPaint.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -79,8 +79,8 @@ static bool _compFastTrack(Paint* cmpTarget, const RenderTransform* pTransform,
viewport.x = static_cast<int32_t>(v1.x);
viewport.y = static_cast<int32_t>(v1.y);
- viewport.w = static_cast<int32_t>(v2.x - v1.x + 0.5f);
- viewport.h = static_cast<int32_t>(v2.y - v1.y + 0.5f);
+ viewport.w = static_cast<int32_t>(ceil(v2.x - viewport.x));
+ viewport.h = static_cast<int32_t>(ceil(v2.y - viewport.y));
if (viewport.w < 0) viewport.w = 0;
if (viewport.h < 0) viewport.h = 0;
@@ -404,4 +404,4 @@ uint8_t Paint::opacity() const noexcept
uint32_t Paint::identifier() const noexcept
{
return pImpl->id;
-} \ No newline at end of file
+}
diff --git a/thirdparty/thorvg/src/lib/tvgPaint.h b/thirdparty/thorvg/src/lib/tvgPaint.h
index 4003bdbeac..c170559a37 100644
--- a/thirdparty/thorvg/src/lib/tvgPaint.h
+++ b/thirdparty/thorvg/src/lib/tvgPaint.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgPicture.cpp b/thirdparty/thorvg/src/lib/tvgPicture.cpp
index 1d9776363c..1125b1eb58 100644
--- a/thirdparty/thorvg/src/lib/tvgPicture.cpp
+++ b/thirdparty/thorvg/src/lib/tvgPicture.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgPictureImpl.h b/thirdparty/thorvg/src/lib/tvgPictureImpl.h
index 00e8aa6dd9..b2e097d400 100644
--- a/thirdparty/thorvg/src/lib/tvgPictureImpl.h
+++ b/thirdparty/thorvg/src/lib/tvgPictureImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgRadialGradient.cpp b/thirdparty/thorvg/src/lib/tvgRadialGradient.cpp
index 42a83461e3..7aba550e48 100644
--- a/thirdparty/thorvg/src/lib/tvgRadialGradient.cpp
+++ b/thirdparty/thorvg/src/lib/tvgRadialGradient.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgRender.cpp b/thirdparty/thorvg/src/lib/tvgRender.cpp
index a48075dd04..145f974cee 100644
--- a/thirdparty/thorvg/src/lib/tvgRender.cpp
+++ b/thirdparty/thorvg/src/lib/tvgRender.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgRender.h b/thirdparty/thorvg/src/lib/tvgRender.h
index f927947aa6..ed66f393da 100644
--- a/thirdparty/thorvg/src/lib/tvgRender.h
+++ b/thirdparty/thorvg/src/lib/tvgRender.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgSaveModule.h b/thirdparty/thorvg/src/lib/tvgSaveModule.h
index 2a0f427f11..3531662fdd 100644
--- a/thirdparty/thorvg/src/lib/tvgSaveModule.h
+++ b/thirdparty/thorvg/src/lib/tvgSaveModule.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgSaver.cpp b/thirdparty/thorvg/src/lib/tvgSaver.cpp
index 1a3e8614a6..e71953700c 100644
--- a/thirdparty/thorvg/src/lib/tvgSaver.cpp
+++ b/thirdparty/thorvg/src/lib/tvgSaver.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgScene.cpp b/thirdparty/thorvg/src/lib/tvgScene.cpp
index 4b2f77dde9..ff43d3c881 100644
--- a/thirdparty/thorvg/src/lib/tvgScene.cpp
+++ b/thirdparty/thorvg/src/lib/tvgScene.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgSceneImpl.h b/thirdparty/thorvg/src/lib/tvgSceneImpl.h
index de94a66e2f..6a7614c667 100644
--- a/thirdparty/thorvg/src/lib/tvgSceneImpl.h
+++ b/thirdparty/thorvg/src/lib/tvgSceneImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgShape.cpp b/thirdparty/thorvg/src/lib/tvgShape.cpp
index 8db5635932..3a3af5f76e 100644
--- a/thirdparty/thorvg/src/lib/tvgShape.cpp
+++ b/thirdparty/thorvg/src/lib/tvgShape.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgShapeImpl.h b/thirdparty/thorvg/src/lib/tvgShapeImpl.h
index dcf4e6e954..738b21ed70 100644
--- a/thirdparty/thorvg/src/lib/tvgShapeImpl.h
+++ b/thirdparty/thorvg/src/lib/tvgShapeImpl.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgSwCanvas.cpp b/thirdparty/thorvg/src/lib/tvgSwCanvas.cpp
index f7a03b819c..8c9de8cb51 100644
--- a/thirdparty/thorvg/src/lib/tvgSwCanvas.cpp
+++ b/thirdparty/thorvg/src/lib/tvgSwCanvas.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgTaskScheduler.cpp b/thirdparty/thorvg/src/lib/tvgTaskScheduler.cpp
index 780127b87b..8c07dc3859 100644
--- a/thirdparty/thorvg/src/lib/tvgTaskScheduler.cpp
+++ b/thirdparty/thorvg/src/lib/tvgTaskScheduler.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/lib/tvgTaskScheduler.h b/thirdparty/thorvg/src/lib/tvgTaskScheduler.h
index f30bdf9a8f..163e387f29 100644
--- a/thirdparty/thorvg/src/lib/tvgTaskScheduler.h
+++ b/thirdparty/thorvg/src/lib/tvgTaskScheduler.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.cpp b/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.cpp
index 6f9416b69c..522c3c71a6 100644
--- a/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.h b/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.h
index 7d35e57d72..3f82af8003 100644
--- a/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.h
+++ b/thirdparty/thorvg/src/loaders/external_jpg/tvgJpgLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.cpp b/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.cpp
index c3d281482a..05db65cb23 100644
--- a/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -93,7 +93,10 @@ bool PngLoader::read()
png_image_free(image);
return false;
}
- if (!png_image_finish_read(image, NULL, buffer, 0, NULL)) return false;
+ if (!png_image_finish_read(image, NULL, buffer, 0, NULL)) {
+ free(buffer);
+ return false;
+ }
content = reinterpret_cast<uint32_t*>(buffer);
_premultiply(reinterpret_cast<uint32_t*>(buffer), image->width, image->height);
diff --git a/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.h b/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.h
index b42537c73f..8beff0a3b3 100644
--- a/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.h
+++ b/thirdparty/thorvg/src/loaders/external_png/tvgPngLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.cpp b/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.cpp
index 8846613c6b..7b90b4aef9 100644
--- a/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -47,6 +47,7 @@ JpgLoader::~JpgLoader()
{
jpgdDelete(decoder);
if (freeData) free(data);
+ free(image);
}
@@ -128,5 +129,9 @@ unique_ptr<Surface> JpgLoader::bitmap()
void JpgLoader::run(unsigned tid)
{
+ if (image) {
+ free(image);
+ image = nullptr;
+ }
image = jpgdDecompress(decoder);
} \ No newline at end of file
diff --git a/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.h b/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.h
index 39732dbc3a..d6b886cb29 100644
--- a/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.h
+++ b/thirdparty/thorvg/src/loaders/jpg/tvgJpgLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.cpp b/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.cpp
index fa72734ec4..dacd45ed03 100644
--- a/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.cpp
+++ b/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -382,8 +382,8 @@ struct Row
const int tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065);
const int tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865);
- const int tmp0 = (ACCESS_COL(0) + ACCESS_COL(4)) << CONST_BITS;
- const int tmp1 = (ACCESS_COL(0) - ACCESS_COL(4)) << CONST_BITS;
+ const int tmp0 = static_cast<unsigned int>(ACCESS_COL(0) + ACCESS_COL(4)) << CONST_BITS;
+ const int tmp1 = static_cast<unsigned int>(ACCESS_COL(0) - ACCESS_COL(4)) << CONST_BITS;
const int tmp10 = tmp0 + tmp3, tmp13 = tmp0 - tmp3, tmp11 = tmp1 + tmp2, tmp12 = tmp1 - tmp2;
@@ -461,8 +461,8 @@ struct Col
const int tmp2 = z1 + MULTIPLY(z3, - FIX_1_847759065);
const int tmp3 = z1 + MULTIPLY(z2, FIX_0_765366865);
- const int tmp0 = (ACCESS_ROW(0) + ACCESS_ROW(4)) << CONST_BITS;
- const int tmp1 = (ACCESS_ROW(0) - ACCESS_ROW(4)) << CONST_BITS;
+ const int tmp0 = static_cast<unsigned int>(ACCESS_ROW(0) + ACCESS_ROW(4)) << CONST_BITS;
+ const int tmp1 = static_cast<unsigned int>(ACCESS_ROW(0) - ACCESS_ROW(4)) << CONST_BITS;
const int tmp10 = tmp0 + tmp3, tmp13 = tmp0 - tmp3, tmp11 = tmp1 + tmp2, tmp12 = tmp1 - tmp2;
@@ -1080,7 +1080,9 @@ namespace DCT_Upsample
// Unconditionally frees all allocated m_blocks.
void jpeg_decoder::free_all_blocks()
{
+ delete(m_pStream);
m_pStream = nullptr;
+
for (mem_block *b = m_pMem_blocks; b; ) {
mem_block *n = b->m_pNext;
free(b);
@@ -2555,7 +2557,7 @@ void jpeg_decoder::decode_block_dc_first(jpeg_decoder *pD, int component_id, int
s = JPGD_HUFF_EXTEND(r, s);
}
pD->m_last_dc_val[component_id] = (s += pD->m_last_dc_val[component_id]);
- p[0] = static_cast<jpgd_block_t>(s << pD->m_successive_low);
+ p[0] = static_cast<jpgd_block_t>(static_cast<unsigned int>(s) << pD->m_successive_low);
}
@@ -2586,7 +2588,7 @@ void jpeg_decoder::decode_block_ac_first(jpeg_decoder *pD, int component_id, int
if ((k += r) > 63) pD->stop_decoding(JPGD_DECODE_ERROR);
r = pD->get_bits_no_markers(s);
s = JPGD_HUFF_EXTEND(r, s);
- p[g_ZAG[k]] = static_cast<jpgd_block_t>(s << pD->m_successive_low);
+ p[g_ZAG[k]] = static_cast<jpgd_block_t>(static_cast<unsigned int>(s) << pD->m_successive_low);
} else {
if (r == 15) {
if ((k += 15) > 63) pD->stop_decoding(JPGD_DECODE_ERROR);
@@ -2605,7 +2607,7 @@ void jpeg_decoder::decode_block_ac_refine(jpeg_decoder *pD, int component_id, in
{
int s, k, r;
int p1 = 1 << pD->m_successive_low;
- int m1 = (-1) << pD->m_successive_low;
+ int m1 = static_cast<unsigned int>(-1) << pD->m_successive_low;
jpgd_block_t *p = pD->coeff_buf_getp(pD->m_ac_coeffs[component_id], block_x, block_y);
JPGD_ASSERT(pD->m_spectral_end <= 63);
@@ -2815,7 +2817,6 @@ int jpeg_decoder::begin_decoding()
jpeg_decoder::~jpeg_decoder()
{
free_all_blocks();
- delete(m_pStream);
}
@@ -3025,4 +3026,4 @@ unsigned char* jpgdDecompress(jpeg_decoder* decoder)
}
}
return pImage_data;
-} \ No newline at end of file
+}
diff --git a/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.h b/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.h
index d32ffd99d4..ca9cb35c32 100644
--- a/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.h
+++ b/thirdparty/thorvg/src/loaders/jpg/tvgJpgd.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/png/tvgLodePng.cpp b/thirdparty/thorvg/src/loaders/png/tvgLodePng.cpp
index f2dfa02875..5c01c5a1e2 100644
--- a/thirdparty/thorvg/src/loaders/png/tvgLodePng.cpp
+++ b/thirdparty/thorvg/src/loaders/png/tvgLodePng.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/png/tvgLodePng.h b/thirdparty/thorvg/src/loaders/png/tvgLodePng.h
index 02e1feeec5..c9f0e56ab6 100644
--- a/thirdparty/thorvg/src/loaders/png/tvgLodePng.h
+++ b/thirdparty/thorvg/src/loaders/png/tvgLodePng.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/png/tvgPngLoader.cpp b/thirdparty/thorvg/src/loaders/png/tvgPngLoader.cpp
index c6d95be5ba..3e293176b7 100644
--- a/thirdparty/thorvg/src/loaders/png/tvgPngLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/png/tvgPngLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -72,6 +72,7 @@ PngLoader::PngLoader()
PngLoader::~PngLoader()
{
if (freeData) free(data);
+ free(image);
}
@@ -121,7 +122,7 @@ bool PngLoader::open(const char* data, uint32_t size, bool copy)
clear();
lodepng_state_init(&state);
-
+
unsigned int width, height;
if (lodepng_inspect(&width, &height, &state, (unsigned char*)(data), size) > 0) return false;
@@ -180,10 +181,14 @@ unique_ptr<Surface> PngLoader::bitmap()
void PngLoader::run(unsigned tid)
{
+ if (image) {
+ free(image);
+ image = nullptr;
+ }
auto width = static_cast<unsigned>(w);
auto height = static_cast<unsigned>(h);
lodepng_decode(&image, &width, &height, &state, data, size);
_premultiply((uint32_t*)(image), width, height);
-} \ No newline at end of file
+}
diff --git a/thirdparty/thorvg/src/loaders/png/tvgPngLoader.h b/thirdparty/thorvg/src/loaders/png/tvgPngLoader.h
index 34dbeed012..8f07f6418f 100644
--- a/thirdparty/thorvg/src/loaders/png/tvgPngLoader.h
+++ b/thirdparty/thorvg/src/loaders/png/tvgPngLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.cpp b/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.cpp
index d7d425b119..2da399d8c3 100644
--- a/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.h b/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.h
index 20fa332981..e4f3423b41 100644
--- a/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.h
+++ b/thirdparty/thorvg/src/loaders/raw/tvgRawLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp
new file mode 100644
index 0000000000..e537cfa27f
--- /dev/null
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.cpp
@@ -0,0 +1,186 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#include "tvgSvgCssStyle.h"
+
+/************************************************************************/
+/* Internal Class Implementation */
+/************************************************************************/
+
+static void _copyStyle(SvgStyleProperty* to, const SvgStyleProperty* from)
+{
+ if (from == nullptr) return;
+ //Copy the properties of 'from' only if they were explicitly set (not the default ones).
+ if (from->curColorSet && !((int)to->flags & (int)SvgStyleFlags::Color)) {
+ to->color = from->color;
+ to->curColorSet = true;
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::Color);
+ }
+ //Fill
+ if (((int)from->fill.flags & (int)SvgFillFlags::Paint) && !((int)to->flags & (int)SvgStyleFlags::Fill)) {
+ to->fill.paint.color = from->fill.paint.color;
+ to->fill.paint.none = from->fill.paint.none;
+ to->fill.paint.curColor = from->fill.paint.curColor;
+ if (from->fill.paint.url) to->fill.paint.url = strdup(from->fill.paint.url);
+ to->fill.flags = (SvgFillFlags)((int)to->fill.flags | (int)SvgFillFlags::Paint);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::Fill);
+ }
+ if (((int)from->fill.flags & (int)SvgFillFlags::Opacity) && !((int)to->flags & (int)SvgStyleFlags::FillOpacity)) {
+ to->fill.opacity = from->fill.opacity;
+ to->fill.flags = (SvgFillFlags)((int)to->fill.flags | (int)SvgFillFlags::Opacity);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::FillOpacity);
+ }
+ if (((int)from->fill.flags & (int)SvgFillFlags::FillRule) && !((int)to->flags & (int)SvgStyleFlags::FillRule)) {
+ to->fill.fillRule = from->fill.fillRule;
+ to->fill.flags = (SvgFillFlags)((int)to->fill.flags | (int)SvgFillFlags::FillRule);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::FillRule);
+ }
+ //Stroke
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Paint) && !((int)to->flags & (int)SvgStyleFlags::Stroke)) {
+ to->stroke.paint.color = from->stroke.paint.color;
+ to->stroke.paint.none = from->stroke.paint.none;
+ to->stroke.paint.curColor = from->stroke.paint.curColor;
+ if (from->stroke.paint.url) to->stroke.paint.url = strdup(from->stroke.paint.url);
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)SvgStrokeFlags::Paint);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::Stroke);
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Opacity) && !((int)to->flags & (int)SvgStyleFlags::StrokeOpacity)) {
+ to->stroke.opacity = from->stroke.opacity;
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)SvgStrokeFlags::Opacity);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::StrokeOpacity);
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Width) && !((int)to->flags & (int)SvgStyleFlags::StrokeWidth)) {
+ to->stroke.width = from->stroke.width;
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)SvgStrokeFlags::Width);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::StrokeWidth);
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Dash) && !((int)to->flags & (int)SvgStyleFlags::StrokeDashArray)) {
+ if (from->stroke.dash.array.count > 0) {
+ to->stroke.dash.array.clear();
+ to->stroke.dash.array.reserve(from->stroke.dash.array.count);
+ for (uint32_t i = 0; i < from->stroke.dash.array.count; ++i) {
+ to->stroke.dash.array.push(from->stroke.dash.array.data[i]);
+ }
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)SvgStrokeFlags::Dash);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::StrokeDashArray);
+ }
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Cap) && !((int)to->flags & (int)SvgStyleFlags::StrokeLineCap)) {
+ to->stroke.cap = from->stroke.cap;
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)SvgStrokeFlags::Cap);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::StrokeLineCap);
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Join) && !((int)to->flags & (int)SvgStyleFlags::StrokeLineJoin)) {
+ to->stroke.join = from->stroke.join;
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)SvgStrokeFlags::Join);
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::StrokeLineJoin);
+ }
+ //Opacity
+ //TODO: it can be set to be 255 and shouldn't be changed by attribute 'opacity'
+ if (from->opacity < 255 && !((int)to->flags & (int)SvgStyleFlags::Opacity)) {
+ to->opacity = from->opacity;
+ to->flags = (SvgStyleFlags)((int)to->flags | (int)SvgStyleFlags::Opacity);
+ }
+}
+
+
+/************************************************************************/
+/* External Class Implementation */
+/************************************************************************/
+
+void cssCopyStyleAttr(SvgNode* to, const SvgNode* from)
+{
+ //Copy matrix attribute
+ if (from->transform && !((int)to->style->flags & (int)SvgStyleFlags::Transform)) {
+ to->transform = (Matrix*)malloc(sizeof(Matrix));
+ if (to->transform) {
+ *to->transform = *from->transform;
+ to->style->flags = (SvgStyleFlags)((int)to->style->flags | (int)SvgStyleFlags::Transform);
+ }
+ }
+ //Copy style attribute
+ _copyStyle(to->style, from->style);
+
+ if (from->style->clipPath.url) to->style->clipPath.url = strdup(from->style->clipPath.url);
+ if (from->style->mask.url) to->style->mask.url = strdup(from->style->mask.url);
+}
+
+
+SvgNode* cssFindStyleNode(const SvgNode* style, const char* title, SvgNodeType type)
+{
+ if (!style) return nullptr;
+
+ auto child = style->child.data;
+ for (uint32_t i = 0; i < style->child.count; ++i, ++child) {
+ if ((*child)->type == type) {
+ if ((!title && !(*child)->id) || (title && (*child)->id && !strcmp((*child)->id, title))) return (*child);
+ }
+ }
+ return nullptr;
+}
+
+
+SvgNode* cssFindStyleNode(const SvgNode* style, const char* title)
+{
+ if (!style) return nullptr;
+
+ auto child = style->child.data;
+ for (uint32_t i = 0; i < style->child.count; ++i, ++child) {
+ if ((*child)->type == SvgNodeType::CssStyle) {
+ if ((title && (*child)->id && !strcmp((*child)->id, title))) return (*child);
+ }
+ }
+ return nullptr;
+}
+
+
+void cssUpdateStyle(SvgNode* doc, SvgNode* style)
+{
+ if (doc->child.count > 0) {
+ auto child = doc->child.data;
+ for (uint32_t i = 0; i < doc->child.count; ++i, ++child) {
+ if (auto cssNode = cssFindStyleNode(style, nullptr, (*child)->type)) {
+ cssCopyStyleAttr(*child, cssNode);
+ }
+ if (auto cssNode = cssFindStyleNode(style, nullptr)) {
+ cssCopyStyleAttr(*child, cssNode);
+ }
+ cssUpdateStyle(*child, style);
+ }
+ }
+}
+
+
+void cssApplyStyleToPostponeds(Array<SvgNodeIdPair>& postponeds, SvgNode* style)
+{
+ for (uint32_t i = 0; i < postponeds.count; ++i) {
+ auto nodeIdPair = postponeds.data[i];
+
+ //css styling: tag.name has higher priority than .name
+ if (auto cssNode = cssFindStyleNode(style, nodeIdPair.id, nodeIdPair.node->type)) {
+ cssCopyStyleAttr(nodeIdPair.node, cssNode);
+ }
+ if (auto cssNode = cssFindStyleNode(style, nodeIdPair.id)) {
+ cssCopyStyleAttr(nodeIdPair.node, cssNode);
+ }
+ }
+} \ No newline at end of file
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.h
new file mode 100644
index 0000000000..66477c1a32
--- /dev/null
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgCssStyle.h
@@ -0,0 +1,34 @@
+/*
+ * Copyright (c) 2022 Samsung Electronics Co., Ltd. All rights reserved.
+
+ * Permission is hereby granted, free of charge, to any person obtaining a copy
+ * of this software and associated documentation files (the "Software"), to deal
+ * in the Software without restriction, including without limitation the rights
+ * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+ * copies of the Software, and to permit persons to whom the Software is
+ * furnished to do so, subject to the following conditions:
+
+ * The above copyright notice and this permission notice shall be included in all
+ * copies or substantial portions of the Software.
+
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+ * SOFTWARE.
+ */
+
+#ifndef _TVG_SVG_CSS_STYLE_H_
+#define _TVG_SVG_CSS_STYLE_H_
+
+#include "tvgSvgLoaderCommon.h"
+
+void cssCopyStyleAttr(SvgNode* to, const SvgNode* from);
+SvgNode* cssFindStyleNode(const SvgNode* style, const char* title, SvgNodeType type);
+SvgNode* cssFindStyleNode(const SvgNode* style, const char* title);
+void cssUpdateStyle(SvgNode* doc, SvgNode* style);
+void cssApplyStyleToPostponeds(Array<SvgNodeIdPair>& postponeds, SvgNode* style);
+
+#endif //_TVG_SVG_CSS_STYLE_H_
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
index cf103774c5..a842b7fa8b 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -60,6 +60,8 @@
#include "tvgSvgLoader.h"
#include "tvgSvgSceneBuilder.h"
#include "tvgSvgUtil.h"
+#include "tvgSvgCssStyle.h"
+#include "tvgMath.h"
/************************************************************************/
/* Internal Class Implementation */
@@ -75,11 +77,10 @@
#define PX_PER_MM 3.779528f //1 in = 25.4 mm -> PX_PER_IN/25.4
#define PX_PER_CM 37.79528f //1 in = 2.54 cm -> PX_PER_IN/2.54
-
-typedef SvgNode* (*FactoryMethod)(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength);
+typedef bool (*parseAttributes)(const char* buf, unsigned bufLength, simpleXMLAttributeCb func, const void* data);
+typedef SvgNode* (*FactoryMethod)(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func);
typedef SvgStyleGradient* (*GradientFactoryMethod)(SvgLoaderData* loader, const char* buf, unsigned bufLength);
-
static char* _skipSpace(const char* str, const char* end)
{
while (((end && str < end) || (!end && *str != '\0')) && isspace(*str)) {
@@ -200,6 +201,14 @@ static int _toOpacity(const char* str)
}
+static SvgMaskType _toMaskType(const char* str)
+{
+ if (!strcmp(str, "Alpha")) return SvgMaskType::Alpha;
+
+ return SvgMaskType::Luminance;
+}
+
+
#define _PARSE_TAG(Type, Name, Name1, Tags_Array, Default) \
static Type _to##Name1(const char* str) \
{ \
@@ -541,7 +550,7 @@ static void _toColor(const char* str, uint8_t* r, uint8_t* g, uint8_t* b, char**
}
}
}
- } else if (len >= 3 && !strncmp(str, "url", 3)) {
+ } else if (ref && len >= 3 && !strncmp(str, "url", 3)) {
*ref = _idFromUrl((const char*)(str + 3));
} else {
//Handle named color
@@ -726,6 +735,12 @@ error:
}
+static void _postpone(Array<SvgNodeIdPair>& nodes, SvgNode *node, char* id)
+{
+ nodes.push({node, id});
+}
+
+
/*
// TODO - remove?
static constexpr struct
@@ -786,14 +801,12 @@ static bool _attrParseSvgNode(void* data, const char* key, const char* value)
} else if (!strcmp(key, "preserveAspectRatio")) {
if (!strcmp(value, "none")) doc->preserveAspect = false;
} else if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
- }
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
#ifdef THORVG_LOG_ENABLED
- else if ((!strcmp(key, "x") || !strcmp(key, "y")) && fabsf(svgUtilStrtof(value, nullptr)) > FLT_EPSILON ) {
+ } else if ((!strcmp(key, "x") || !strcmp(key, "y")) && fabsf(svgUtilStrtof(value, nullptr)) > FLT_EPSILON) {
TVGLOG("SVG", "Unsupported attributes used [Elements type: Svg][Attribute: %s][Value: %s]", key, value);
- }
#endif
- else {
+ } else {
return _parseStyleAttr(loader, key, value, false);
}
return true;
@@ -922,6 +935,12 @@ static void _handleMaskAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node, con
}
+static void _handleMaskTypeAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node, const char* value)
+{
+ node->node.mask.type = _toMaskType(value);
+}
+
+
static void _handleDisplayAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node, const char* value)
{
//TODO : The display attribute can have various values as well as "none".
@@ -933,6 +952,29 @@ static void _handleDisplayAttr(TVG_UNUSED SvgLoaderData* loader, SvgNode* node,
}
+static void _handleCssClassAttr(SvgLoaderData* loader, SvgNode* node, const char* value)
+{
+ auto cssClass = &node->style->cssClass;
+
+ if (*cssClass && value) free(*cssClass);
+ *cssClass = _copyId(value);
+
+ bool cssClassFound = false;
+
+ //css styling: tag.name has higher priority than .name
+ if (auto cssNode = cssFindStyleNode(loader->cssStyle, *cssClass, node->type)) {
+ cssClassFound = true;
+ cssCopyStyleAttr(node, cssNode);
+ }
+ if (auto cssNode = cssFindStyleNode(loader->cssStyle, *cssClass)) {
+ cssClassFound = true;
+ cssCopyStyleAttr(node, cssNode);
+ }
+
+ if (!cssClassFound) _postpone(loader->nodesToStyle, node, *cssClass);
+}
+
+
typedef void (*styleMethod)(SvgLoaderData* loader, SvgNode* node, const char* value);
#define STYLE_DEF(Name, Name1, Flag) { #Name, sizeof(#Name), _handle##Name1##Attr, Flag }
@@ -959,6 +1001,7 @@ static constexpr struct
STYLE_DEF(transform, Transform, SvgStyleFlags::Transform),
STYLE_DEF(clip-path, ClipPath, SvgStyleFlags::ClipPath),
STYLE_DEF(mask, Mask, SvgStyleFlags::Mask),
+ STYLE_DEF(mask-type, MaskType, SvgStyleFlags::MaskType),
STYLE_DEF(display, Display, SvgStyleFlags::Display)
};
@@ -1006,12 +1049,14 @@ static bool _attrParseGNode(void* data, const char* key, const char* value)
SvgNode* node = loader->svgParse->node;
if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "transform")) {
node->transform = _parseTransformationMatrix(value);
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1030,17 +1075,19 @@ static bool _attrParseClipPathNode(void* data, const char* key, const char* valu
{
SvgLoaderData* loader = (SvgLoaderData*)data;
SvgNode* node = loader->svgParse->node;
- SvgCompositeNode* comp = &(node->node.comp);
+ SvgClipNode* clip = &(node->node.clip);
if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "transform")) {
node->transform = _parseTransformationMatrix(value);
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "clipPathUnits")) {
- if (!strcmp(value, "objectBoundingBox")) comp->userSpace = false;
+ if (!strcmp(value, "objectBoundingBox")) clip->userSpace = false;
} else {
return _parseStyleAttr(loader, key, value, false);
}
@@ -1052,17 +1099,36 @@ static bool _attrParseMaskNode(void* data, const char* key, const char* value)
{
SvgLoaderData* loader = (SvgLoaderData*)data;
SvgNode* node = loader->svgParse->node;
- SvgCompositeNode* comp = &(node->node.comp);
+ SvgMaskNode* mask = &(node->node.mask);
if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "transform")) {
node->transform = _parseTransformationMatrix(value);
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "maskContentUnits")) {
- if (!strcmp(value, "objectBoundingBox")) comp->userSpace = false;
+ if (!strcmp(value, "objectBoundingBox")) mask->userSpace = false;
+ } else if (!strcmp(key, "mask-type")) {
+ mask->type = _toMaskType(value);
+ } else {
+ return _parseStyleAttr(loader, key, value, false);
+ }
+ return true;
+}
+
+
+static bool _attrParseCssStyleNode(void* data, const char* key, const char* value)
+{
+ SvgLoaderData* loader = (SvgLoaderData*)data;
+ SvgNode* node = loader->svgParse->node;
+
+ if (!strcmp(key, "id")) {
+ if (node->id && value) free(node->id);
+ node->id = _copyId(value);
} else {
return _parseStyleAttr(loader, key, value, false);
}
@@ -1070,6 +1136,31 @@ static bool _attrParseMaskNode(void* data, const char* key, const char* value)
}
+static bool _attrParseSymbolNode(void* data, const char* key, const char* value)
+{
+ SvgLoaderData* loader = (SvgLoaderData*)data;
+ SvgNode* node = loader->svgParse->node;
+ SvgSymbolNode* symbol = &(node->node.symbol);
+
+ if (!strcmp(key, "viewBox")) {
+ if (!_parseNumber(&value, &symbol->vx) || !_parseNumber(&value, &symbol->vy)) return false;
+ if (!_parseNumber(&value, &symbol->vw) || !_parseNumber(&value, &symbol->vh)) return false;
+ } else if (!strcmp(key, "width")) {
+ symbol->w = _toFloat(loader->svgParse, value, SvgParserLengthType::Horizontal);
+ } else if (!strcmp(key, "height")) {
+ symbol->h = _toFloat(loader->svgParse, value, SvgParserLengthType::Vertical);
+ } else if (!strcmp(key, "preserveAspectRatio")) {
+ if (!strcmp(value, "none")) symbol->preserveAspect = false;
+ } else if (!strcmp(key, "overflow")) {
+ if (!strcmp(value, "visible")) symbol->overflowVisible = true;
+ } else {
+ return _attrParseGNode(data, key, value);
+ }
+
+ return true;
+}
+
+
static SvgNode* _createNode(SvgNode* parent, SvgNodeType type)
{
SvgNode* node = (SvgNode*)calloc(1, sizeof(SvgNode));
@@ -1121,7 +1212,7 @@ static SvgNode* _createNode(SvgNode* parent, SvgNodeType type)
}
-static SvgNode* _createDefsNode(TVG_UNUSED SvgLoaderData* loader, TVG_UNUSED SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createDefsNode(TVG_UNUSED SvgLoaderData* loader, TVG_UNUSED SvgNode* parent, const char* buf, unsigned bufLength, TVG_UNUSED parseAttributes func)
{
if (loader->def && loader->doc->node.doc.defs) return loader->def;
SvgNode* node = _createNode(nullptr, SvgNodeType::Defs);
@@ -1132,17 +1223,17 @@ static SvgNode* _createDefsNode(TVG_UNUSED SvgLoaderData* loader, TVG_UNUSED Svg
}
-static SvgNode* _createGNode(TVG_UNUSED SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createGNode(TVG_UNUSED SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::G);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParseGNode, loader);
+ func(buf, bufLength, _attrParseGNode, loader);
return loader->svgParse->node;
}
-static SvgNode* _createSvgNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createSvgNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Doc);
if (!loader->svgParse->node) return nullptr;
@@ -1152,7 +1243,7 @@ static SvgNode* _createSvgNode(SvgLoaderData* loader, SvgNode* parent, const cha
loader->svgParse->global.h = 0;
doc->preserveAspect = true;
- simpleXmlParseAttributes(buf, bufLength, _attrParseSvgNode, loader);
+ func(buf, bufLength, _attrParseSvgNode, loader);
if (loader->svgParse->global.w == 0) {
if (doc->w < FLT_EPSILON) loader->svgParse->global.w = 1;
@@ -1167,32 +1258,60 @@ static SvgNode* _createSvgNode(SvgLoaderData* loader, SvgNode* parent, const cha
}
-static SvgNode* _createMaskNode(SvgLoaderData* loader, SvgNode* parent, TVG_UNUSED const char* buf, TVG_UNUSED unsigned bufLength)
+static SvgNode* _createMaskNode(SvgLoaderData* loader, SvgNode* parent, TVG_UNUSED const char* buf, TVG_UNUSED unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Mask);
if (!loader->svgParse->node) return nullptr;
- loader->svgParse->node->node.comp.userSpace = true;
+ loader->svgParse->node->node.mask.userSpace = true;
+ loader->svgParse->node->node.mask.type = SvgMaskType::Luminance;
- simpleXmlParseAttributes(buf, bufLength, _attrParseMaskNode, loader);
+ func(buf, bufLength, _attrParseMaskNode, loader);
return loader->svgParse->node;
}
-static SvgNode* _createClipPathNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createClipPathNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::ClipPath);
if (!loader->svgParse->node) return nullptr;
loader->svgParse->node->display = false;
- loader->svgParse->node->node.comp.userSpace = true;
+ loader->svgParse->node->node.clip.userSpace = true;
+
+ func(buf, bufLength, _attrParseClipPathNode, loader);
+
+ return loader->svgParse->node;
+}
+
+
+static SvgNode* _createCssStyleNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
+{
+ loader->svgParse->node = _createNode(parent, SvgNodeType::CssStyle);
+ if (!loader->svgParse->node) return nullptr;
+
+ func(buf, bufLength, _attrParseCssStyleNode, loader);
+
+ return loader->svgParse->node;
+}
+
+
+static SvgNode* _createSymbolNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
+{
+ loader->svgParse->node = _createNode(parent, SvgNodeType::Symbol);
+ if (!loader->svgParse->node) return nullptr;
+
+ loader->svgParse->node->display = false;
+ loader->svgParse->node->node.symbol.preserveAspect = true;
+ loader->svgParse->node->node.symbol.overflowVisible = false;
- simpleXmlParseAttributes(buf, bufLength, _attrParseClipPathNode, loader);
+ func(buf, bufLength, _attrParseSymbolNode, loader);
return loader->svgParse->node;
}
+
static bool _attrParsePathNode(void* data, const char* key, const char* value)
{
SvgLoaderData* loader = (SvgLoaderData*)data;
@@ -1203,7 +1322,7 @@ static bool _attrParsePathNode(void* data, const char* key, const char* value)
//Temporary: need to copy
path->path = _copyId(value);
} else if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1211,6 +1330,8 @@ static bool _attrParsePathNode(void* data, const char* key, const char* value)
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else {
return _parseStyleAttr(loader, key, value, false);
}
@@ -1218,13 +1339,13 @@ static bool _attrParsePathNode(void* data, const char* key, const char* value)
}
-static SvgNode* _createPathNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createPathNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Path);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParsePathNode, loader);
+ func(buf, bufLength, _attrParsePathNode, loader);
return loader->svgParse->node;
}
@@ -1263,7 +1384,7 @@ static bool _attrParseCircleNode(void* data, const char* key, const char* value)
}
if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1271,6 +1392,8 @@ static bool _attrParseCircleNode(void* data, const char* key, const char* value)
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else {
return _parseStyleAttr(loader, key, value, false);
}
@@ -1278,13 +1401,13 @@ static bool _attrParseCircleNode(void* data, const char* key, const char* value)
}
-static SvgNode* _createCircleNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createCircleNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Circle);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParseCircleNode, loader);
+ func(buf, bufLength, _attrParseCircleNode, loader);
return loader->svgParse->node;
}
@@ -1325,8 +1448,10 @@ static bool _attrParseEllipseNode(void* data, const char* key, const char* value
if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1338,13 +1463,13 @@ static bool _attrParseEllipseNode(void* data, const char* key, const char* value
}
-static SvgNode* _createEllipseNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createEllipseNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Ellipse);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParseEllipseNode, loader);
+ func(buf, bufLength, _attrParseEllipseNode, loader);
return loader->svgParse->node;
}
@@ -1400,7 +1525,7 @@ static bool _attrParsePolygonNode(void* data, const char* key, const char* value
if (!strcmp(key, "points")) {
return _attrParsePolygonPoints(value, &polygon->points, &polygon->pointsCount);
} else if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1408,6 +1533,8 @@ static bool _attrParsePolygonNode(void* data, const char* key, const char* value
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else {
return _parseStyleAttr(loader, key, value, false);
}
@@ -1415,24 +1542,24 @@ static bool _attrParsePolygonNode(void* data, const char* key, const char* value
}
-static SvgNode* _createPolygonNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createPolygonNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Polygon);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParsePolygonNode, loader);
+ func(buf, bufLength, _attrParsePolygonNode, loader);
return loader->svgParse->node;
}
-static SvgNode* _createPolylineNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createPolylineNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Polyline);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParsePolygonNode, loader);
+ func(buf, bufLength, _attrParsePolygonNode, loader);
return loader->svgParse->node;
}
@@ -1482,8 +1609,10 @@ static bool _attrParseRectNode(void* data, const char* key, const char* value)
if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "style")) {
- ret = simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ ret = simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1496,7 +1625,7 @@ static bool _attrParseRectNode(void* data, const char* key, const char* value)
}
-static SvgNode* _createRectNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createRectNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Rect);
@@ -1504,7 +1633,7 @@ static SvgNode* _createRectNode(SvgLoaderData* loader, SvgNode* parent, const ch
loader->svgParse->node->node.rect.hasRx = loader->svgParse->node->node.rect.hasRy = false;
- simpleXmlParseAttributes(buf, bufLength, _attrParseRectNode, loader);
+ func(buf, bufLength, _attrParseRectNode, loader);
return loader->svgParse->node;
}
@@ -1545,8 +1674,10 @@ static bool _attrParseLineNode(void* data, const char* key, const char* value)
if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
@@ -1558,13 +1689,13 @@ static bool _attrParseLineNode(void* data, const char* key, const char* value)
}
-static SvgNode* _createLineNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createLineNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Line);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParseLineNode, loader);
+ func(buf, bufLength, _attrParseLineNode, loader);
return loader->svgParse->node;
}
@@ -1611,16 +1742,21 @@ static bool _attrParseImageNode(void* data, const char* key, const char* value)
}
if (!strcmp(key, "href") || !strcmp(key, "xlink:href")) {
+ if (image->href && value) free(image->href);
image->href = _idFromHref(value);
} else if (!strcmp(key, "id")) {
if (node->id && value) free(node->id);
node->id = _copyId(value);
+ } else if (!strcmp(key, "class")) {
+ _handleCssClassAttr(loader, node, value);
} else if (!strcmp(key, "style")) {
- return simpleXmlParseW3CAttribute(value, _parseStyleAttr, loader);
+ return simpleXmlParseW3CAttribute(value, strlen(value), _parseStyleAttr, loader);
} else if (!strcmp(key, "clip-path")) {
_handleClipPathAttr(loader, node, value);
} else if (!strcmp(key, "mask")) {
_handleMaskAttr(loader, node, value);
+ } else if (!strcmp(key, "transform")) {
+ node->transform = _parseTransformationMatrix(value);
} else {
return _parseStyleAttr(loader, key, value);
}
@@ -1628,13 +1764,13 @@ static bool _attrParseImageNode(void* data, const char* key, const char* value)
}
-static SvgNode* _createImageNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createImageNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Image);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParseImageNode, loader);
+ func(buf, bufLength, _attrParseImageNode, loader);
return loader->svgParse->node;
}
@@ -1728,6 +1864,112 @@ error_grad_alloc:
}
+static void _styleInherit(SvgStyleProperty* child, const SvgStyleProperty* parent)
+{
+ if (parent == nullptr) return;
+ //Inherit the property of parent if not present in child.
+ if (!child->curColorSet) {
+ child->color = parent->color;
+ child->curColorSet = parent->curColorSet;
+ }
+ //Fill
+ if (!((int)child->fill.flags & (int)SvgFillFlags::Paint)) {
+ child->fill.paint.color = parent->fill.paint.color;
+ child->fill.paint.none = parent->fill.paint.none;
+ child->fill.paint.curColor = parent->fill.paint.curColor;
+ if (parent->fill.paint.url) child->fill.paint.url = _copyId(parent->fill.paint.url);
+ }
+ if (!((int)child->fill.flags & (int)SvgFillFlags::Opacity)) {
+ child->fill.opacity = parent->fill.opacity;
+ }
+ if (!((int)child->fill.flags & (int)SvgFillFlags::FillRule)) {
+ child->fill.fillRule = parent->fill.fillRule;
+ }
+ //Stroke
+ if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Paint)) {
+ child->stroke.paint.color = parent->stroke.paint.color;
+ child->stroke.paint.none = parent->stroke.paint.none;
+ child->stroke.paint.curColor = parent->stroke.paint.curColor;
+ child->stroke.paint.url = parent->stroke.paint.url ? _copyId(parent->stroke.paint.url) : nullptr;
+ }
+ if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Opacity)) {
+ child->stroke.opacity = parent->stroke.opacity;
+ }
+ if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Width)) {
+ child->stroke.width = parent->stroke.width;
+ }
+ if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Dash)) {
+ if (parent->stroke.dash.array.count > 0) {
+ child->stroke.dash.array.clear();
+ child->stroke.dash.array.reserve(parent->stroke.dash.array.count);
+ for (uint32_t i = 0; i < parent->stroke.dash.array.count; ++i) {
+ child->stroke.dash.array.push(parent->stroke.dash.array.data[i]);
+ }
+ }
+ }
+ if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Cap)) {
+ child->stroke.cap = parent->stroke.cap;
+ }
+ if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Join)) {
+ child->stroke.join = parent->stroke.join;
+ }
+}
+
+
+static void _styleCopy(SvgStyleProperty* to, const SvgStyleProperty* from)
+{
+ if (from == nullptr) return;
+ //Copy the properties of 'from' only if they were explicitly set (not the default ones).
+ if (from->curColorSet) {
+ to->color = from->color;
+ to->curColorSet = true;
+ }
+ //Fill
+ to->fill.flags = (SvgFillFlags)((int)to->fill.flags | (int)from->fill.flags);
+ if (((int)from->fill.flags & (int)SvgFillFlags::Paint)) {
+ to->fill.paint.color = from->fill.paint.color;
+ to->fill.paint.none = from->fill.paint.none;
+ to->fill.paint.curColor = from->fill.paint.curColor;
+ if (from->fill.paint.url) to->fill.paint.url = _copyId(from->fill.paint.url);
+ }
+ if (((int)from->fill.flags & (int)SvgFillFlags::Opacity)) {
+ to->fill.opacity = from->fill.opacity;
+ }
+ if (((int)from->fill.flags & (int)SvgFillFlags::FillRule)) {
+ to->fill.fillRule = from->fill.fillRule;
+ }
+ //Stroke
+ to->stroke.flags = (SvgStrokeFlags)((int)to->stroke.flags | (int)from->stroke.flags);
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Paint)) {
+ to->stroke.paint.color = from->stroke.paint.color;
+ to->stroke.paint.none = from->stroke.paint.none;
+ to->stroke.paint.curColor = from->stroke.paint.curColor;
+ to->stroke.paint.url = from->stroke.paint.url ? _copyId(from->stroke.paint.url) : nullptr;
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Opacity)) {
+ to->stroke.opacity = from->stroke.opacity;
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Width)) {
+ to->stroke.width = from->stroke.width;
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Dash)) {
+ if (from->stroke.dash.array.count > 0) {
+ to->stroke.dash.array.clear();
+ to->stroke.dash.array.reserve(from->stroke.dash.array.count);
+ for (uint32_t i = 0; i < from->stroke.dash.array.count; ++i) {
+ to->stroke.dash.array.push(from->stroke.dash.array.data[i]);
+ }
+ }
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Cap)) {
+ to->stroke.cap = from->stroke.cap;
+ }
+ if (((int)from->stroke.flags & (int)SvgStrokeFlags::Join)) {
+ to->stroke.join = from->stroke.join;
+ }
+}
+
+
static void _copyAttr(SvgNode* to, const SvgNode* from)
{
//Copy matrix attribute
@@ -1736,7 +1978,8 @@ static void _copyAttr(SvgNode* to, const SvgNode* from)
if (to->transform) *to->transform = *from->transform;
}
//Copy style attribute
- *to->style = *from->style;
+ _styleCopy(to->style, from->style);
+ to->style->flags = (SvgStyleFlags)((int)to->style->flags | (int)from->style->flags);
if (from->style->fill.paint.url) to->style->fill.paint.url = strdup(from->style->fill.paint.url);
if (from->style->stroke.paint.url) to->style->stroke.paint.url = strdup(from->style->stroke.paint.url);
if (from->style->clipPath.url) to->style->clipPath.url = strdup(from->style->clipPath.url);
@@ -1780,15 +2023,17 @@ static void _copyAttr(SvgNode* to, const SvgNode* from)
break;
}
case SvgNodeType::Polygon: {
- to->node.polygon.pointsCount = from->node.polygon.pointsCount;
- to->node.polygon.points = (float*)malloc(to->node.polygon.pointsCount * sizeof(float));
- memcpy(to->node.polygon.points, from->node.polygon.points, to->node.polygon.pointsCount * sizeof(float));
+ if ((to->node.polygon.pointsCount = from->node.polygon.pointsCount)) {
+ to->node.polygon.points = (float*)malloc(to->node.polygon.pointsCount * sizeof(float));
+ memcpy(to->node.polygon.points, from->node.polygon.points, to->node.polygon.pointsCount * sizeof(float));
+ }
break;
}
case SvgNodeType::Polyline: {
- to->node.polyline.pointsCount = from->node.polyline.pointsCount;
- to->node.polyline.points = (float*)malloc(to->node.polyline.pointsCount * sizeof(float));
- memcpy(to->node.polyline.points, from->node.polyline.points, to->node.polyline.pointsCount * sizeof(float));
+ if ((to->node.polyline.pointsCount = from->node.polyline.pointsCount)) {
+ to->node.polyline.points = (float*)malloc(to->node.polyline.pointsCount * sizeof(float));
+ memcpy(to->node.polyline.points, from->node.polyline.points, to->node.polyline.pointsCount * sizeof(float));
+ }
break;
}
case SvgNodeType::Image: {
@@ -1806,35 +2051,42 @@ static void _copyAttr(SvgNode* to, const SvgNode* from)
}
-static void _cloneNode(SvgNode* from, SvgNode* parent)
+static void _cloneNode(SvgNode* from, SvgNode* parent, int depth)
{
+ /* Exception handling: Prevent invalid SVG data input.
+ The size is the arbitrary value, we need an experimental size. */
+ if (depth == 8192) {
+ TVGERR("SVG", "Infinite recursive call - stopped after %d calls! Svg file may be incorrectly formatted.", depth);
+ return;
+ }
+
SvgNode* newNode;
- if (!from || !parent) return;
+ if (!from || !parent || from == parent) return;
newNode = _createNode(parent, from->type);
-
if (!newNode) return;
+ _styleInherit(newNode->style, parent->style);
_copyAttr(newNode, from);
auto child = from->child.data;
for (uint32_t i = 0; i < from->child.count; ++i, ++child) {
- _cloneNode(*child, newNode);
+ _cloneNode(*child, newNode, depth + 1);
}
}
-static void _postponeCloneNode(SvgLoaderData* loader, SvgNode *node, char* id) {
- loader->cloneNodes.push({node, id});
-}
-
-
-static void _clonePostponedNodes(Array<SvgNodeIdPair>* cloneNodes) {
+static void _clonePostponedNodes(Array<SvgNodeIdPair>* cloneNodes, SvgNode* doc)
+{
for (uint32_t i = 0; i < cloneNodes->count; ++i) {
auto nodeIdPair = cloneNodes->data[i];
auto defs = _getDefsNode(nodeIdPair.node);
auto nodeFrom = _findChildById(defs, nodeIdPair.id);
- _cloneNode(nodeFrom, nodeIdPair.node);
+ if (!nodeFrom) nodeFrom = _findChildById(doc, nodeIdPair.id);
+ _cloneNode(nodeFrom, nodeIdPair.node, 0);
+ if (nodeFrom && nodeFrom->type == SvgNodeType::Symbol && nodeIdPair.node->type == SvgNodeType::Use) {
+ nodeIdPair.node->node.use.symbol = nodeFrom;
+ }
free(nodeIdPair.id);
}
}
@@ -1847,10 +2099,10 @@ static constexpr struct
int sz;
size_t offset;
} useTags[] = {
- {"x", SvgParserLengthType::Horizontal, sizeof("x"), offsetof(SvgRectNode, x)},
- {"y", SvgParserLengthType::Vertical, sizeof("y"), offsetof(SvgRectNode, y)},
- {"width", SvgParserLengthType::Horizontal, sizeof("width"), offsetof(SvgRectNode, w)},
- {"height", SvgParserLengthType::Vertical, sizeof("height"), offsetof(SvgRectNode, h)}
+ {"x", SvgParserLengthType::Horizontal, sizeof("x"), offsetof(SvgUseNode, x)},
+ {"y", SvgParserLengthType::Vertical, sizeof("y"), offsetof(SvgUseNode, y)},
+ {"width", SvgParserLengthType::Horizontal, sizeof("width"), offsetof(SvgUseNode, w)},
+ {"height", SvgParserLengthType::Vertical, sizeof("height"), offsetof(SvgUseNode, h)}
};
@@ -1866,6 +2118,10 @@ static bool _attrParseUseNode(void* data, const char* key, const char* value)
for (unsigned int i = 0; i < sizeof(useTags) / sizeof(useTags[0]); i++) {
if (useTags[i].sz - 1 == sz && !strncmp(useTags[i].tag, key, sz)) {
*((float*)(array + useTags[i].offset)) = _toFloat(loader->svgParse, value, useTags[i].type);
+
+ if (useTags[i].offset == offsetof(SvgUseNode, w)) use->isWidthSet = true;
+ else if (useTags[i].offset == offsetof(SvgUseNode, h)) use->isHeightSet = true;
+
return true;
}
}
@@ -1875,18 +2131,15 @@ static bool _attrParseUseNode(void* data, const char* key, const char* value)
defs = _getDefsNode(node);
nodeFrom = _findChildById(defs, id);
if (nodeFrom) {
- _cloneNode(nodeFrom, node);
+ _cloneNode(nodeFrom, node, 0);
+ if (nodeFrom->type == SvgNodeType::Symbol) use->symbol = nodeFrom;
free(id);
} else {
//some svg export software include <defs> element at the end of the file
//if so the 'from' element won't be found now and we have to repeat finding
//after the whole file is parsed
- _postponeCloneNode(loader, node, id);
+ _postpone(loader->cloneNodes, node, id);
}
- } else if (!strcmp(key, "clip-path")) {
- _handleClipPathAttr(loader, node, value);
- } else if (!strcmp(key, "mask")) {
- _handleMaskAttr(loader, node, value);
} else {
return _attrParseGNode(data, key, value);
}
@@ -1894,16 +2147,20 @@ static bool _attrParseUseNode(void* data, const char* key, const char* value)
}
-static SvgNode* _createUseNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength)
+static SvgNode* _createUseNode(SvgLoaderData* loader, SvgNode* parent, const char* buf, unsigned bufLength, parseAttributes func)
{
loader->svgParse->node = _createNode(parent, SvgNodeType::Use);
if (!loader->svgParse->node) return nullptr;
- simpleXmlParseAttributes(buf, bufLength, _attrParseUseNode, loader);
+ loader->svgParse->node->node.use.isWidthSet = false;
+ loader->svgParse->node->node.use.isHeightSet = false;
+
+ func(buf, bufLength, _attrParseUseNode, loader);
return loader->svgParse->node;
}
+
//TODO: Implement 'text' primitive
static constexpr struct
{
@@ -1933,7 +2190,9 @@ static constexpr struct
{"g", sizeof("g"), _createGNode},
{"svg", sizeof("svg"), _createSvgNode},
{"mask", sizeof("mask"), _createMaskNode},
- {"clipPath", sizeof("clipPath"), _createClipPathNode}
+ {"clipPath", sizeof("clipPath"), _createClipPathNode},
+ {"style", sizeof("style"), _createCssStyleNode},
+ {"symbol", sizeof("symbol"), _createSymbolNode}
};
@@ -2081,13 +2340,15 @@ static bool _attrParseRadialGradientNode(void* data, const char* key, const char
}
if (!strcmp(key, "id")) {
+ if (grad->id && value) free(grad->id);
grad->id = _copyId(value);
} else if (!strcmp(key, "spreadMethod")) {
grad->spread = _parseSpreadValue(value);
} else if (!strcmp(key, "href") || !strcmp(key, "xlink:href")) {
+ if (grad->ref && value) free(grad->ref);
grad->ref = _idFromHref(value);
- } else if (!strcmp(key, "gradientUnits") && !strcmp(value, "userSpaceOnUse")) {
- grad->userSpace = true;
+ } else if (!strcmp(key, "gradientUnits")) {
+ if (!strcmp(value, "userSpaceOnUse")) grad->userSpace = true;
} else if (!strcmp(key, "gradientTransform")) {
grad->transform = _parseTransformationMatrix(value);
} else {
@@ -2173,7 +2434,7 @@ static bool _attrParseStops(void* data, const char* key, const char* value)
_toColor(value, &stop->r, &stop->g, &stop->b, nullptr);
}
} else if (!strcmp(key, "style")) {
- simpleXmlParseW3CAttribute(value, _attrParseStopsStyle, data);
+ simpleXmlParseW3CAttribute(value, strlen(value), _attrParseStopsStyle, data);
} else {
return false;
}
@@ -2269,13 +2530,15 @@ static bool _attrParseLinearGradientNode(void* data, const char* key, const char
}
if (!strcmp(key, "id")) {
+ if (grad->id && value) free(grad->id);
grad->id = _copyId(value);
} else if (!strcmp(key, "spreadMethod")) {
grad->spread = _parseSpreadValue(value);
} else if (!strcmp(key, "href") || !strcmp(key, "xlink:href")) {
+ if (grad->ref && value) free(grad->ref);
grad->ref = _idFromHref(value);
- } else if (!strcmp(key, "gradientUnits") && !strcmp(value, "userSpaceOnUse")) {
- grad->userSpace = true;
+ } else if (!strcmp(key, "gradientUnits")) {
+ if (!strcmp(value, "userSpaceOnUse")) grad->userSpace = true;
} else if (!strcmp(key, "gradientTransform")) {
grad->transform = _parseTransformationMatrix(value);
} else {
@@ -2359,11 +2622,13 @@ static constexpr struct
{"svg", sizeof("svg")},
{"defs", sizeof("defs")},
{"mask", sizeof("mask")},
- {"clipPath", sizeof("clipPath")}
+ {"clipPath", sizeof("clipPath")},
+ {"style", sizeof("style")},
+ {"symbol", sizeof("symbol")}
};
-static void _svgLoaderParerXmlClose(SvgLoaderData* loader, const char* content)
+static void _svgLoaderParserXmlClose(SvgLoaderData* loader, const char* content)
{
content = _skipSpace(content, nullptr);
@@ -2408,15 +2673,23 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content,
if ((method = _findGroupFactory(tagName))) {
//Group
+ if (empty) return;
if (!loader->doc) {
if (strcmp(tagName, "svg")) return; //Not a valid svg document
- node = method(loader, nullptr, attrs, attrsLength);
+ node = method(loader, nullptr, attrs, attrsLength, simpleXmlParseAttributes);
loader->doc = node;
} else {
if (!strcmp(tagName, "svg")) return; //Already loaded <svg>(SvgNodeType::Doc) tag
if (loader->stack.count > 0) parent = loader->stack.data[loader->stack.count - 1];
else parent = loader->doc;
- node = method(loader, parent, attrs, attrsLength);
+ if (!strcmp(tagName, "style")) {
+ node = method(loader, nullptr, attrs, attrsLength, simpleXmlParseAttributes);
+ loader->cssStyle = node;
+ loader->doc->node.doc.style = node;
+ loader->style = true;
+ } else {
+ node = method(loader, parent, attrs, attrsLength, simpleXmlParseAttributes);
+ }
}
if (!node) return;
@@ -2426,7 +2699,7 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content,
} else if ((method = _findGraphicsFactory(tagName))) {
if (loader->stack.count > 0) parent = loader->stack.data[loader->stack.count - 1];
else parent = loader->doc;
- node = method(loader, parent, attrs, attrsLength);
+ node = method(loader, parent, attrs, attrsLength, simpleXmlParseAttributes);
} else if ((gradientMethod = _findGradientFactory(tagName))) {
SvgStyleGradient* gradient;
gradient = gradientMethod(loader, attrs, attrsLength);
@@ -2457,6 +2730,42 @@ static void _svgLoaderParserXmlOpen(SvgLoaderData* loader, const char* content,
}
+static void _svgLoaderParserXmlCssStyle(SvgLoaderData* loader, const char* content, unsigned int length)
+{
+ char* tag;
+ char* name;
+ const char* attrs = nullptr;
+ unsigned int attrsLength = 0;
+
+ FactoryMethod method;
+ GradientFactoryMethod gradientMethod;
+ SvgNode *node = nullptr;
+
+ while (auto next = simpleXmlParseCSSAttribute(content, length, &tag, &name, &attrs, &attrsLength)) {
+ if ((method = _findGroupFactory(tag))) {
+ if ((node = method(loader, loader->cssStyle, attrs, attrsLength, simpleXmlParseW3CAttribute))) node->id = _copyId(name);
+ } else if ((method = _findGraphicsFactory(tag))) {
+ if ((node = method(loader, loader->cssStyle, attrs, attrsLength, simpleXmlParseW3CAttribute))) node->id = _copyId(name);
+ } else if ((gradientMethod = _findGradientFactory(tag))) {
+ TVGLOG("SVG", "Unsupported elements used in the internal CSS style sheets [Elements: %s]", tag);
+ } else if (!strcmp(tag, "stop")) {
+ TVGLOG("SVG", "Unsupported elements used in the internal CSS style sheets [Elements: %s]", tag);
+ } else if (!strcmp(tag, "all")) {
+ if ((node = _createCssStyleNode(loader, loader->cssStyle, attrs, attrsLength, simpleXmlParseW3CAttribute))) node->id = _copyId(name);
+ } else if (!isIgnoreUnsupportedLogElements(tag)) {
+ TVGLOG("SVG", "Unsupported elements used in the internal CSS style sheets [Elements: %s]", tag);
+ }
+
+ length -= next - content;
+ content = next;
+
+ free(tag);
+ free(name);
+ }
+ loader->style = false;
+}
+
+
static bool _svgLoaderParser(void* data, SimpleXMLType type, const char* content, unsigned int length)
{
SvgLoaderData* loader = (SvgLoaderData*)data;
@@ -2471,11 +2780,14 @@ static bool _svgLoaderParser(void* data, SimpleXMLType type, const char* content
break;
}
case SimpleXMLType::Close: {
- _svgLoaderParerXmlClose(loader, content);
+ _svgLoaderParserXmlClose(loader, content);
break;
}
case SimpleXMLType::Data:
- case SimpleXMLType::CData:
+ case SimpleXMLType::CData: {
+ if (loader->style) _svgLoaderParserXmlCssStyle(loader, content, length);
+ break;
+ }
case SimpleXMLType::DoctypeChild: {
break;
}
@@ -2493,63 +2805,12 @@ static bool _svgLoaderParser(void* data, SimpleXMLType type, const char* content
}
-static void _styleInherit(SvgStyleProperty* child, const SvgStyleProperty* parent)
+static void _inefficientNodeCheck(TVG_UNUSED SvgNode* node)
{
- if (parent == nullptr) return;
- //Inherit the property of parent if not present in child.
- //Fill
- if (!((int)child->fill.flags & (int)SvgFillFlags::Paint)) {
- child->fill.paint.color = parent->fill.paint.color;
- child->fill.paint.none = parent->fill.paint.none;
- child->fill.paint.curColor = parent->fill.paint.curColor;
- if (parent->fill.paint.url) child->fill.paint.url = _copyId(parent->fill.paint.url);
- } else if (child->fill.paint.curColor && !child->curColorSet) {
- child->color = parent->color;
- }
- if (!((int)child->fill.flags & (int)SvgFillFlags::Opacity)) {
- child->fill.opacity = parent->fill.opacity;
- }
- if (!((int)child->fill.flags & (int)SvgFillFlags::FillRule)) {
- child->fill.fillRule = parent->fill.fillRule;
- }
- //Stroke
- if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Paint)) {
- child->stroke.paint.color = parent->stroke.paint.color;
- child->stroke.paint.none = parent->stroke.paint.none;
- child->stroke.paint.curColor = parent->stroke.paint.curColor;
- child->stroke.paint.url = parent->stroke.paint.url ? _copyId(parent->stroke.paint.url) : nullptr;
- } else if (child->stroke.paint.curColor && !child->curColorSet) {
- child->color = parent->color;
- }
- if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Opacity)) {
- child->stroke.opacity = parent->stroke.opacity;
- }
- if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Width)) {
- child->stroke.width = parent->stroke.width;
- }
- if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Dash)) {
- if (parent->stroke.dash.array.count > 0) {
- child->stroke.dash.array.clear();
- child->stroke.dash.array.reserve(parent->stroke.dash.array.count);
- for (uint32_t i = 0; i < parent->stroke.dash.array.count; ++i) {
- child->stroke.dash.array.push(parent->stroke.dash.array.data[i]);
- }
- }
- }
- if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Cap)) {
- child->stroke.cap = parent->stroke.cap;
- }
- if (!((int)child->stroke.flags & (int)SvgStrokeFlags::Join)) {
- child->stroke.join = parent->stroke.join;
- }
-}
-
-
-static void _inefficientNodeCheck(TVG_UNUSED SvgNode* node){
#ifdef THORVG_LOG_ENABLED
auto type = simpleXmlNodeTypeToString(node->type);
- if (!node->display && node->type != SvgNodeType::ClipPath) TVGLOG("SVG", "Inefficient elements used [Display is none][Node Type : %s]", type);
+ if (!node->display && node->type != SvgNodeType::ClipPath && node->type != SvgNodeType::Symbol) TVGLOG("SVG", "Inefficient elements used [Display is none][Node Type : %s]", type);
if (node->style->opacity == 0) TVGLOG("SVG", "Inefficient elements used [Opacity is zero][Node Type : %s]", type);
if (node->style->fill.opacity == 0 && node->style->stroke.opacity == 0) TVGLOG("SVG", "Inefficient elements used [Fill opacity and stroke opacity are zero][Node Type : %s]", type);
@@ -2679,6 +2940,7 @@ static void _freeNodeStyle(SvgStyleProperty* style)
//style->clipPath.node and style->mask.node has only the addresses of node. Therefore, node is released from _freeNode.
free(style->clipPath.url);
free(style->mask.url);
+ free(style->cssClass);
if (style->fill.paint.gradient) {
style->fill.paint.gradient->clear();
@@ -2723,6 +2985,7 @@ static void _freeNode(SvgNode* node)
}
case SvgNodeType::Doc: {
_freeNode(node->node.doc.defs);
+ _freeNode(node->node.doc.style);
break;
}
case SvgNodeType::Defs: {
@@ -2776,7 +3039,7 @@ static bool _svgLoaderParserForValidCheckXmlOpen(SvgLoaderData* loader, const ch
if ((method = _findGroupFactory(tagName))) {
if (!loader->doc) {
if (strcmp(tagName, "svg")) return true; //Not a valid svg document
- node = method(loader, nullptr, attrs, attrsLength);
+ node = method(loader, nullptr, attrs, attrsLength, simpleXmlParseAttributes);
loader->doc = node;
loader->stack.push(node);
return false;
@@ -2836,16 +3099,20 @@ void SvgLoader::run(unsigned tid)
if (!simpleXmlParse(content, size, true, _svgLoaderParser, &(loaderData))) return;
if (loaderData.doc) {
- _updateStyle(loaderData.doc, nullptr);
auto defs = loaderData.doc->node.doc.defs;
- if (defs) _updateGradient(loaderData.doc, &defs->node.defs.gradients);
- if (loaderData.gradients.count > 0) _updateGradient(loaderData.doc, &loaderData.gradients);
+ if (loaderData.nodesToStyle.count > 0) cssApplyStyleToPostponeds(loaderData.nodesToStyle, loaderData.cssStyle);
+ if (loaderData.cssStyle) cssUpdateStyle(loaderData.doc, loaderData.cssStyle);
+
+ if (loaderData.cloneNodes.count > 0) _clonePostponedNodes(&loaderData.cloneNodes, loaderData.doc);
_updateComposite(loaderData.doc, loaderData.doc);
if (defs) _updateComposite(loaderData.doc, defs);
- if (loaderData.cloneNodes.count > 0) _clonePostponedNodes(&loaderData.cloneNodes);
+ if (loaderData.gradients.count > 0) _updateGradient(loaderData.doc, &loaderData.gradients);
+ if (defs) _updateGradient(loaderData.doc, &defs->node.defs.gradients);
+
+ _updateStyle(loaderData.doc, nullptr);
}
root = svgSceneBuild(loaderData.doc, vx, vy, vw, vh, w, h, preserveAspect, svgPath);
}
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.h
index 468f05801d..093fb671b3 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.h
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h
index cceef915f0..1f25e82adc 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgLoaderCommon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -51,6 +51,8 @@ enum class SvgNodeType
Video,
ClipPath,
Mask,
+ CssStyle,
+ Symbol,
Unknown
};
@@ -111,7 +113,8 @@ enum class SvgStyleFlags
Transform = 0x800,
ClipPath = 0x1000,
Mask = 0x2000,
- Display = 0x4000
+ MaskType = 0x4000,
+ Display = 0x8000
};
enum class SvgStopStyleFlags
@@ -127,6 +130,12 @@ enum class SvgFillRule
OddEven = 1
};
+enum class SvgMaskType
+{
+ Luminance = 0,
+ Alpha
+};
+
//Length type to recalculate %, pt, pc, mm, cm etc
enum class SvgParserLengthType
{
@@ -145,6 +154,7 @@ struct SvgDocNode
float vw;
float vh;
SvgNode* defs;
+ SvgNode* style;
bool preserveAspect;
};
@@ -157,12 +167,22 @@ struct SvgDefsNode
Array<SvgStyleGradient*> gradients;
};
+struct SvgSymbolNode
+{
+ float w, h;
+ float vx, vy, vw, vh;
+ bool preserveAspect;
+ bool overflowVisible;
+};
+
struct SvgUseNode
{
float x, y, w, h;
+ bool isWidthSet;
+ bool isHeightSet;
+ SvgNode* symbol;
};
-
struct SvgEllipseNode
{
float cx;
@@ -215,11 +235,21 @@ struct SvgPolygonNode
float* points;
};
-struct SvgCompositeNode
+struct SvgClipNode
{
bool userSpace;
};
+struct SvgMaskNode
+{
+ SvgMaskType type;
+ bool userSpace;
+};
+
+struct SvgCssStyleNode
+{
+};
+
struct SvgLinearGradient
{
float x1;
@@ -328,6 +358,7 @@ struct SvgStyleProperty
int opacity;
SvgColor color;
bool curColorSet;
+ char* cssClass;
SvgStyleFlags flags;
};
@@ -352,7 +383,10 @@ struct SvgNode
SvgPathNode path;
SvgLineNode line;
SvgImageNode image;
- SvgCompositeNode comp;
+ SvgMaskNode mask;
+ SvgClipNode clip;
+ SvgCssStyleNode cssStyle;
+ SvgSymbolNode symbol;
} node;
bool display;
~SvgNode();
@@ -384,15 +418,18 @@ struct SvgNodeIdPair
struct SvgLoaderData
{
- Array<SvgNode *> stack = {nullptr, 0, 0};
+ Array<SvgNode*> stack = {nullptr, 0, 0};
SvgNode* doc = nullptr;
SvgNode* def = nullptr;
+ SvgNode* cssStyle = nullptr;
Array<SvgStyleGradient*> gradients;
SvgStyleGradient* latestGradient = nullptr; //For stops
SvgParser* svgParse = nullptr;
Array<SvgNodeIdPair> cloneNodes;
+ Array<SvgNodeIdPair> nodesToStyle;
int level = 0;
bool result = false;
+ bool style = false;
};
/*
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
index 32685ee620..a09a2797d0 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.h
index 7f26c4a213..8f5f9035dc 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.h
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgPath.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
index ae17634f31..90705f2523 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -68,12 +68,12 @@ struct Box
static bool _appendShape(SvgNode* node, Shape* shape, const Box& vBox, const string& svgPath);
-static unique_ptr<Scene> _sceneBuildHelper(const SvgNode* node, const Box& vBox, const string& svgPath, bool mask);
+static unique_ptr<Scene> _sceneBuildHelper(const SvgNode* node, const Box& vBox, const string& svgPath, bool mask, bool* isMaskWhite = nullptr);
static inline bool _isGroupType(SvgNodeType type)
{
- if (type == SvgNodeType::Doc || type == SvgNodeType::G || type == SvgNodeType::Use || type == SvgNodeType::ClipPath) return true;
+ if (type == SvgNodeType::Doc || type == SvgNodeType::G || type == SvgNodeType::Use || type == SvgNodeType::ClipPath || type == SvgNodeType::Symbol) return true;
return false;
}
@@ -276,15 +276,21 @@ static void _applyComposition(Paint* paint, const SvgNode* node, const Box& vBox
Composition can be applied recursively if its children nodes have composition target to this one. */
if (node->style->mask.applying) {
TVGLOG("SVG", "Multiple Composition Tried! Check out Circular dependency?");
- } else {
+ } else {
auto compNode = node->style->mask.node;
if (compNode && compNode->child.count > 0) {
node->style->mask.applying = true;
- auto comp = _sceneBuildHelper(compNode, vBox, svgPath, true);
+ bool isMaskWhite = true;
+ auto comp = _sceneBuildHelper(compNode, vBox, svgPath, true, &isMaskWhite);
if (comp) {
if (node->transform) comp->transform(*node->transform);
- paint->composite(move(comp), CompositeMethod::AlphaMask);
+
+ if (compNode->node.mask.type == SvgMaskType::Luminance && !isMaskWhite) {
+ paint->composite(move(comp), CompositeMethod::LumaMask);
+ } else {
+ paint->composite(move(comp), CompositeMethod::AlphaMask);
+ }
}
node->style->mask.applying = false;
@@ -534,57 +540,137 @@ static unique_ptr<Picture> _imageBuildHelper(SvgNode* node, const Box& vBox, con
string imagePath = href;
if (strncmp(href, "/", 1)) {
auto last = svgPath.find_last_of("/");
- imagePath = svgPath.substr(0, (last == string::npos ? 0 : last + 1 )) + imagePath;
+ imagePath = svgPath.substr(0, (last == string::npos ? 0 : last + 1)) + imagePath;
}
if (picture->load(imagePath) != Result::Success) return nullptr;
}
float w, h;
+ Matrix m = {1, 0, 0, 0, 1, 0, 0, 0, 1};
if (picture->size(&w, &h) == Result::Success && w > 0 && h > 0) {
auto sx = node->node.image.w / w;
auto sy = node->node.image.h / h;
- Matrix m = {sx, 0, node->node.image.x, 0, sy, node->node.image.y, 0, 0, 1};
- picture->transform(m);
+ m = {sx, 0, node->node.image.x, 0, sy, node->node.image.y, 0, 0, 1};
}
+ if (node->transform) m = mathMultiply(node->transform, &m);
+ picture->transform(m);
_applyComposition(picture.get(), node, vBox, svgPath);
return picture;
}
-static unique_ptr<Scene> _useBuildHelper(const SvgNode* node, const Box& vBox, const string& svgPath)
+static unique_ptr<Scene> _useBuildHelper(const SvgNode* node, const Box& vBox, const string& svgPath, bool* isMaskWhite)
{
- auto scene = _sceneBuildHelper(node, vBox, svgPath, false);
+ unique_ptr<Scene> finalScene;
+ auto scene = _sceneBuildHelper(node, vBox, svgPath, false, isMaskWhite);
+
+ // mUseTransform = mUseTransform * mTranslate
+ Matrix mUseTransform = {1, 0, 0, 0, 1, 0, 0, 0, 1};
+ if (node->transform) mUseTransform = *node->transform;
if (node->node.use.x != 0.0f || node->node.use.y != 0.0f) {
- scene->translate(node->node.use.x, node->node.use.y);
+ Matrix mTranslate = {1, 0, node->node.use.x, 0, 1, node->node.use.y, 0, 0, 1};
+ mUseTransform = mathMultiply(&mUseTransform, &mTranslate);
}
- if (node->node.use.w > 0.0f && node->node.use.h > 0.0f) {
- //TODO: handle width/height properties
+
+ if (node->node.use.symbol) {
+ auto symbol = node->node.use.symbol->node.symbol;
+
+ auto width = symbol.w;
+ if (node->node.use.isWidthSet) width = node->node.use.w;
+ auto height = symbol.h;
+ if (node->node.use.isHeightSet) height = node->node.use.h;
+
+ Matrix mViewBox = {1, 0, 0, 0, 1, 0, 0, 0, 1};
+ if ((!mathEqual(width, symbol.vw) || !mathEqual(height, symbol.vh)) && symbol.vw > 0 && symbol.vh > 0) {
+ auto sx = width / symbol.vw;
+ auto sy = height / symbol.vh;
+ if (symbol.preserveAspect) {
+ if (sx < sy) sy = sx;
+ else sx = sy;
+ }
+
+ auto tvx = symbol.vx * sx;
+ auto tvy = symbol.vy * sy;
+ auto tvw = symbol.vw * sx;
+ auto tvh = symbol.vh * sy;
+ tvy -= (symbol.h - tvh) * 0.5f;
+ tvx -= (symbol.w - tvw) * 0.5f;
+ mViewBox = {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1};
+ } else if (!mathZero(symbol.vx) || !mathZero(symbol.vy)) {
+ mViewBox = {1, 0, -symbol.vx, 0, 1, -symbol.vy, 0, 0, 1};
+ }
+
+ // mSceneTransform = mUseTransform * mSymbolTransform * mViewBox
+ Matrix mSceneTransform = mViewBox;
+ if (node->node.use.symbol->transform) {
+ mSceneTransform = mathMultiply(node->node.use.symbol->transform, &mViewBox);
+ }
+ mSceneTransform = mathMultiply(&mUseTransform, &mSceneTransform);
+ scene->transform(mSceneTransform);
+
+ if (node->node.use.symbol->node.symbol.overflowVisible) {
+ finalScene = move(scene);
+ } else {
+ auto viewBoxClip = Shape::gen();
+ viewBoxClip->appendRect(0, 0, width, height, 0, 0);
+
+ // mClipTransform = mUseTransform * mSymbolTransform
+ Matrix mClipTransform = mUseTransform;
+ if (node->node.use.symbol->transform) {
+ mClipTransform = mathMultiply(&mUseTransform, node->node.use.symbol->transform);
+ }
+ viewBoxClip->transform(mClipTransform);
+
+ auto compositeLayer = Scene::gen();
+ compositeLayer->composite(move(viewBoxClip), CompositeMethod::ClipPath);
+ compositeLayer->push(move(scene));
+
+ auto root = Scene::gen();
+ root->push(move(compositeLayer));
+
+ finalScene = move(root);
+ }
+ } else {
+ if (!mathIdentity((const Matrix*)(&mUseTransform))) scene->transform(mUseTransform);
+ finalScene = move(scene);
}
- return scene;
+
+ return finalScene;
}
-static unique_ptr<Scene> _sceneBuildHelper(const SvgNode* node, const Box& vBox, const string& svgPath, bool mask)
+static unique_ptr<Scene> _sceneBuildHelper(const SvgNode* node, const Box& vBox, const string& svgPath, bool mask, bool* isMaskWhite)
{
if (_isGroupType(node->type) || mask) {
auto scene = Scene::gen();
- if (!mask && node->transform) scene->transform(*node->transform);
+ // For a Symbol node, the viewBox transformation has to be applied first - see _useBuildHelper()
+ if (!mask && node->transform && node->type != SvgNodeType::Symbol) scene->transform(*node->transform);
if (node->display && node->style->opacity != 0) {
auto child = node->child.data;
for (uint32_t i = 0; i < node->child.count; ++i, ++child) {
if (_isGroupType((*child)->type)) {
if ((*child)->type == SvgNodeType::Use)
- scene->push(_useBuildHelper(*child, vBox, svgPath));
+ scene->push(_useBuildHelper(*child, vBox, svgPath, isMaskWhite));
else
- scene->push(_sceneBuildHelper(*child, vBox, svgPath, false));
+ scene->push(_sceneBuildHelper(*child, vBox, svgPath, false, isMaskWhite));
} else if ((*child)->type == SvgNodeType::Image) {
auto image = _imageBuildHelper(*child, vBox, svgPath);
if (image) scene->push(move(image));
} else if ((*child)->type != SvgNodeType::Mask) {
auto shape = _shapeBuildHelper(*child, vBox, svgPath);
- if (shape) scene->push(move(shape));
+ if (shape) {
+ if (isMaskWhite) {
+ uint8_t r, g, b;
+ shape->fillColor(&r, &g, &b, nullptr);
+ if (shape->fill() || r < 255 || g < 255 || b < 255 || shape->strokeFill() ||
+ (shape->strokeColor(&r, &g, &b, nullptr) == Result::Success && (r < 255 || g < 255 || b < 255))) {
+ *isMaskWhite = false;
+ }
+ }
+ scene->push(move(shape));
+ }
}
}
_applyComposition(scene.get(), node, vBox, svgPath);
@@ -620,17 +706,13 @@ unique_ptr<Scene> svgSceneBuild(SvgNode* node, float vx, float vy, float vw, flo
auto tvy = vy * scale;
auto tvw = vw * scale;
auto tvh = vh * scale;
- if (vw > vh) tvy -= (h - tvh) * 0.5f;
- else tvx -= (w - tvw) * 0.5f;
+ tvx -= (w - tvw) * 0.5f;
+ tvy -= (h - tvh) * 0.5f;
docNode->translate(-tvx, -tvy);
} else {
//Align
auto tvx = vx * sx;
auto tvy = vy * sy;
- auto tvw = vw * sx;
- auto tvh = vh * sy;
- if (tvw > tvh) tvy -= (h - tvh) * 0.5f;
- else tvx -= (w - tvw) * 0.5f;
Matrix m = {sx, 0, -tvx, 0, sy, -tvy, 0, 0, 1};
docNode->transform(m);
}
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.h
index 4232aca612..cecbbf02a8 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.h
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgSceneBuilder.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
index 9f269b29a2..1f1fe2a718 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.h b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.h
index 4320cfed4e..b5e6e1bdb2 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.h
+++ b/thirdparty/thorvg/src/loaders/svg/tvgSvgUtil.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
index 1571aa4e25..a12689c7dd 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
+++ b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -220,15 +220,15 @@ static SimpleXMLType _getXMLType(const char* itr, const char* itrEnd, size_t &to
if ((itr + sizeof("<!DOCTYPE>") - 1 < itrEnd) && (!memcmp(itr + 2, "DOCTYPE", sizeof("DOCTYPE") - 1)) && ((itr[2 + sizeof("DOCTYPE") - 1] == '>') || (isspace((unsigned char)itr[2 + sizeof("DOCTYPE") - 1])))) {
toff = sizeof("!DOCTYPE") - 1;
return SimpleXMLType::Doctype;
- } else if (itr + sizeof("<!>") - 1 < itrEnd) {
- toff = sizeof("!") - 1;
- return SimpleXMLType::DoctypeChild;
} else if ((itr + sizeof("<![CDATA[]]>") - 1 < itrEnd) && (!memcmp(itr + 2, "[CDATA[", sizeof("[CDATA[") - 1))) {
toff = sizeof("![CDATA[") - 1;
return SimpleXMLType::CData;
} else if ((itr + sizeof("<!---->") - 1 < itrEnd) && (!memcmp(itr + 2, "--", sizeof("--") - 1))) {
toff = sizeof("!--") - 1;
return SimpleXMLType::Comment;
+ } else if (itr + sizeof("<!>") - 1 < itrEnd) {
+ toff = sizeof("!") - 1;
+ return SimpleXMLType::DoctypeChild;
}
return SimpleXMLType::Open;
}
@@ -236,6 +236,14 @@ static SimpleXMLType _getXMLType(const char* itr, const char* itrEnd, size_t &to
}
+static char* _strndup(const char* src, unsigned len)
+{
+ auto ret = (char*)malloc(len + 1);
+ if (!ret) return nullptr;
+ ret[len] = '\0';
+ return (char*)memcpy(ret, src, len);
+}
+
/************************************************************************/
/* External Class Implementation */
/************************************************************************/
@@ -264,6 +272,7 @@ const char* simpleXmlNodeTypeToString(TVG_UNUSED SvgNodeType type)
"Video",
"ClipPath",
"Mask",
+ "Symbol",
"Unknown",
};
return TYPE_NAMES[(int) type];
@@ -450,7 +459,7 @@ bool simpleXmlParse(const char* buf, unsigned bufLength, bool strip, simpleXMLCb
}
-bool simpleXmlParseW3CAttribute(const char* buf, simpleXMLAttributeCb func, const void* data)
+bool simpleXmlParseW3CAttribute(const char* buf, unsigned bufLength, simpleXMLAttributeCb func, const void* data)
{
const char* end;
char* key;
@@ -459,7 +468,7 @@ bool simpleXmlParseW3CAttribute(const char* buf, simpleXMLAttributeCb func, cons
if (!buf) return false;
- end = buf + strlen(buf);
+ end = buf + bufLength;
key = (char*)alloca(end - buf + 1);
val = (char*)alloca(end - buf + 1);
@@ -468,6 +477,11 @@ bool simpleXmlParseW3CAttribute(const char* buf, simpleXMLAttributeCb func, cons
do {
char* sep = (char*)strchr(buf, ':');
next = (char*)strchr(buf, ';');
+ if (sep >= end) {
+ next = nullptr;
+ sep = nullptr;
+ }
+ if (next >= end) next = nullptr;
key[0] = '\0';
val[0] = '\0';
@@ -509,6 +523,47 @@ bool simpleXmlParseW3CAttribute(const char* buf, simpleXMLAttributeCb func, cons
}
+/*
+ * Supported formats:
+ * tag {}, .name {}, tag.name{}
+ */
+const char* simpleXmlParseCSSAttribute(const char* buf, unsigned bufLength, char** tag, char** name, const char** attrs, unsigned* attrsLength)
+{
+ if (!buf) return nullptr;
+
+ *tag = *name = nullptr;
+ *attrsLength = 0;
+
+ auto itr = _simpleXmlSkipWhiteSpace(buf, buf + bufLength);
+ auto itrEnd = (const char*)memchr(buf, '{', bufLength);
+
+ if (!itrEnd || itr == itrEnd) return nullptr;
+
+ auto nextElement = (const char*)memchr(itrEnd, '}', bufLength - (itrEnd - buf));
+ if (!nextElement) return nullptr;
+
+ *attrs = itrEnd + 1;
+ *attrsLength = nextElement - *attrs;
+
+ const char *p;
+
+ itrEnd = _simpleXmlUnskipWhiteSpace(itrEnd, itr);
+ if (*(itrEnd - 1) == '.') return nullptr;
+
+ for (p = itr; p < itrEnd; p++) {
+ if (*p == '.') break;
+ }
+
+ if (p == itr) *tag = strdup("all");
+ else *tag = _strndup(itr, p - itr);
+
+ if (p == itrEnd) *name = nullptr;
+ else *name = _strndup(p + 1, itrEnd - p - 1);
+
+ return (nextElement ? nextElement + 1 : nullptr);
+}
+
+
const char* simpleXmlFindAttributesTag(const char* buf, unsigned bufLength)
{
const char *itr = buf, *itrEnd = buf + bufLength;
diff --git a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.h b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.h
index d96a631528..e2761ca8da 100644
--- a/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.h
+++ b/thirdparty/thorvg/src/loaders/svg/tvgXmlParser.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2020-2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2020 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@@ -32,7 +32,7 @@ const int xmlEntityLength[] = {6, 6, 6, 5, 4, 4, 6, 6};
enum class SimpleXMLType
{
Open = 0, //!< \<tag attribute="value"\>
- OpenEmpty, //!< \<tag attribute="value" /\>
+ OpenEmpty, //!< \<tag attribute="value" /\>
Close, //!< \</tag\>
Data, //!< tag text data
CData, //!< \<![cdata[something]]\>
@@ -41,16 +41,17 @@ enum class SimpleXMLType
Doctype, //!< \<!doctype html
Comment, //!< \<!-- something --\>
Ignored, //!< whatever is ignored by parser, like whitespace
- DoctypeChild //!< \<!doctype_child
+ DoctypeChild //!< \<!doctype_child
};
typedef bool (*simpleXMLCb)(void* data, SimpleXMLType type, const char* content, unsigned int length);
typedef bool (*simpleXMLAttributeCb)(void* data, const char* key, const char* value);
-bool simpleXmlParseAttributes(const char* buf, unsigned buflen, simpleXMLAttributeCb func, const void* data);
-bool simpleXmlParse(const char* buf, unsigned buflen, bool strip, simpleXMLCb func, const void* data);
-bool simpleXmlParseW3CAttribute(const char* buf, simpleXMLAttributeCb func, const void* data);
-const char *simpleXmlFindAttributesTag(const char* buf, unsigned buflen);
+bool simpleXmlParseAttributes(const char* buf, unsigned bufLength, simpleXMLAttributeCb func, const void* data);
+bool simpleXmlParse(const char* buf, unsigned bufLength, bool strip, simpleXMLCb func, const void* data);
+bool simpleXmlParseW3CAttribute(const char* buf, unsigned bufLength, simpleXMLAttributeCb func, const void* data);
+const char* simpleXmlParseCSSAttribute(const char* buf, unsigned bufLength, char** tag, char** name, const char** attrs, unsigned* attrsLength);
+const char* simpleXmlFindAttributesTag(const char* buf, unsigned bufLength);
bool isIgnoreUnsupportedLogElements(const char* tagName);
const char* simpleXmlNodeTypeToString(SvgNodeType type);
diff --git a/thirdparty/thorvg/src/loaders/tvg/tvgTvgBinInterpreter.cpp b/thirdparty/thorvg/src/loaders/tvg/tvgTvgBinInterpreter.cpp
index b0364b1055..2b85342b2c 100644
--- a/thirdparty/thorvg/src/loaders/tvg/tvgTvgBinInterpreter.cpp
+++ b/thirdparty/thorvg/src/loaders/tvg/tvgTvgBinInterpreter.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/tvg/tvgTvgCommon.h b/thirdparty/thorvg/src/loaders/tvg/tvgTvgCommon.h
index e7c3eba488..62181605a2 100644
--- a/thirdparty/thorvg/src/loaders/tvg/tvgTvgCommon.h
+++ b/thirdparty/thorvg/src/loaders/tvg/tvgTvgCommon.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.cpp b/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.cpp
index d7f3184435..95d629d1f6 100644
--- a/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.cpp
+++ b/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.h b/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.h
index d276ded33a..3ae841aa85 100644
--- a/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.h
+++ b/thirdparty/thorvg/src/loaders/tvg/tvgTvgLoader.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
index 9dd57e5a89..aa54d21342 100644
--- a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
+++ b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.h b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.h
index 27186b5d4a..4acb35e76a 100644
--- a/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.h
+++ b/thirdparty/thorvg/src/savers/tvg/tvgTvgSaver.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021 Samsung Electronics Co., Ltd. All rights reserved.
+ * Copyright (c) 2021 - 2022 Samsung Electronics Co., Ltd. All rights reserved.
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
diff --git a/thirdparty/thorvg/update-thorvg.sh b/thirdparty/thorvg/update-thorvg.sh
index c200131eba..29b5677983 100755
--- a/thirdparty/thorvg/update-thorvg.sh
+++ b/thirdparty/thorvg/update-thorvg.sh
@@ -1,4 +1,4 @@
-VERSION=0.7.0
+VERSION=0.8.0
rm -rf AUTHORS inc LICENSE src *.zip
curl -L -O https://github.com/Samsung/thorvg/archive/refs/tags/v$VERSION.zip
bsdtar --strip-components=1 -xvf *.zip
diff --git a/thirdparty/volk/volk.c b/thirdparty/volk/volk.c
index bb8b928326..c3383ee41d 100644
--- a/thirdparty/volk/volk.c
+++ b/thirdparty/volk/volk.c
@@ -176,6 +176,9 @@ static void volkGenLoadInstance(void* context, PFN_vkVoidFunction (*load)(void*,
vkGetPhysicalDeviceQueueFamilyProperties2 = (PFN_vkGetPhysicalDeviceQueueFamilyProperties2)load(context, "vkGetPhysicalDeviceQueueFamilyProperties2");
vkGetPhysicalDeviceSparseImageFormatProperties2 = (PFN_vkGetPhysicalDeviceSparseImageFormatProperties2)load(context, "vkGetPhysicalDeviceSparseImageFormatProperties2");
#endif /* defined(VK_VERSION_1_1) */
+#if defined(VK_VERSION_1_3)
+ vkGetPhysicalDeviceToolProperties = (PFN_vkGetPhysicalDeviceToolProperties)load(context, "vkGetPhysicalDeviceToolProperties");
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_EXT_acquire_drm_display)
vkAcquireDrmDisplayEXT = (PFN_vkAcquireDrmDisplayEXT)load(context, "vkAcquireDrmDisplayEXT");
vkGetDrmDisplayEXT = (PFN_vkGetDrmDisplayEXT)load(context, "vkGetDrmDisplayEXT");
@@ -503,6 +506,44 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore");
vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores");
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+ vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering");
+ vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2");
+ vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2");
+ vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2");
+ vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2");
+ vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2");
+ vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2");
+ vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering");
+ vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2");
+ vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2");
+ vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2");
+ vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode");
+ vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable");
+ vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable");
+ vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp");
+ vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable");
+ vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable");
+ vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2");
+ vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace");
+ vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable");
+ vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology");
+ vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable");
+ vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount");
+ vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp");
+ vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable");
+ vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount");
+ vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2");
+ vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2");
+ vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot");
+ vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot");
+ vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements");
+ vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements");
+ vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements");
+ vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData");
+ vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2");
+ vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData");
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD");
#endif /* defined(VK_AMD_buffer_marker) */
@@ -593,6 +634,9 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT");
vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT");
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+ vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT");
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT");
vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT");
@@ -619,6 +663,13 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
#if defined(VK_EXT_vertex_input_dynamic_state)
vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT");
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+ vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA");
+ vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA");
+ vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA");
+ vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
+ vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA");
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA");
vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA");
@@ -714,6 +765,10 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR");
vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR");
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+ vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR");
+ vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR");
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_fd)
vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR");
vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR");
@@ -752,6 +807,11 @@ static void volkGenLoadDevice(void* context, PFN_vkVoidFunction (*load)(void*, c
#if defined(VK_KHR_maintenance3)
vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR");
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+ vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR");
+ vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR");
+ vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR");
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR");
vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR");
@@ -1063,6 +1123,44 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
table->vkSignalSemaphore = (PFN_vkSignalSemaphore)load(context, "vkSignalSemaphore");
table->vkWaitSemaphores = (PFN_vkWaitSemaphores)load(context, "vkWaitSemaphores");
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+ table->vkCmdBeginRendering = (PFN_vkCmdBeginRendering)load(context, "vkCmdBeginRendering");
+ table->vkCmdBindVertexBuffers2 = (PFN_vkCmdBindVertexBuffers2)load(context, "vkCmdBindVertexBuffers2");
+ table->vkCmdBlitImage2 = (PFN_vkCmdBlitImage2)load(context, "vkCmdBlitImage2");
+ table->vkCmdCopyBuffer2 = (PFN_vkCmdCopyBuffer2)load(context, "vkCmdCopyBuffer2");
+ table->vkCmdCopyBufferToImage2 = (PFN_vkCmdCopyBufferToImage2)load(context, "vkCmdCopyBufferToImage2");
+ table->vkCmdCopyImage2 = (PFN_vkCmdCopyImage2)load(context, "vkCmdCopyImage2");
+ table->vkCmdCopyImageToBuffer2 = (PFN_vkCmdCopyImageToBuffer2)load(context, "vkCmdCopyImageToBuffer2");
+ table->vkCmdEndRendering = (PFN_vkCmdEndRendering)load(context, "vkCmdEndRendering");
+ table->vkCmdPipelineBarrier2 = (PFN_vkCmdPipelineBarrier2)load(context, "vkCmdPipelineBarrier2");
+ table->vkCmdResetEvent2 = (PFN_vkCmdResetEvent2)load(context, "vkCmdResetEvent2");
+ table->vkCmdResolveImage2 = (PFN_vkCmdResolveImage2)load(context, "vkCmdResolveImage2");
+ table->vkCmdSetCullMode = (PFN_vkCmdSetCullMode)load(context, "vkCmdSetCullMode");
+ table->vkCmdSetDepthBiasEnable = (PFN_vkCmdSetDepthBiasEnable)load(context, "vkCmdSetDepthBiasEnable");
+ table->vkCmdSetDepthBoundsTestEnable = (PFN_vkCmdSetDepthBoundsTestEnable)load(context, "vkCmdSetDepthBoundsTestEnable");
+ table->vkCmdSetDepthCompareOp = (PFN_vkCmdSetDepthCompareOp)load(context, "vkCmdSetDepthCompareOp");
+ table->vkCmdSetDepthTestEnable = (PFN_vkCmdSetDepthTestEnable)load(context, "vkCmdSetDepthTestEnable");
+ table->vkCmdSetDepthWriteEnable = (PFN_vkCmdSetDepthWriteEnable)load(context, "vkCmdSetDepthWriteEnable");
+ table->vkCmdSetEvent2 = (PFN_vkCmdSetEvent2)load(context, "vkCmdSetEvent2");
+ table->vkCmdSetFrontFace = (PFN_vkCmdSetFrontFace)load(context, "vkCmdSetFrontFace");
+ table->vkCmdSetPrimitiveRestartEnable = (PFN_vkCmdSetPrimitiveRestartEnable)load(context, "vkCmdSetPrimitiveRestartEnable");
+ table->vkCmdSetPrimitiveTopology = (PFN_vkCmdSetPrimitiveTopology)load(context, "vkCmdSetPrimitiveTopology");
+ table->vkCmdSetRasterizerDiscardEnable = (PFN_vkCmdSetRasterizerDiscardEnable)load(context, "vkCmdSetRasterizerDiscardEnable");
+ table->vkCmdSetScissorWithCount = (PFN_vkCmdSetScissorWithCount)load(context, "vkCmdSetScissorWithCount");
+ table->vkCmdSetStencilOp = (PFN_vkCmdSetStencilOp)load(context, "vkCmdSetStencilOp");
+ table->vkCmdSetStencilTestEnable = (PFN_vkCmdSetStencilTestEnable)load(context, "vkCmdSetStencilTestEnable");
+ table->vkCmdSetViewportWithCount = (PFN_vkCmdSetViewportWithCount)load(context, "vkCmdSetViewportWithCount");
+ table->vkCmdWaitEvents2 = (PFN_vkCmdWaitEvents2)load(context, "vkCmdWaitEvents2");
+ table->vkCmdWriteTimestamp2 = (PFN_vkCmdWriteTimestamp2)load(context, "vkCmdWriteTimestamp2");
+ table->vkCreatePrivateDataSlot = (PFN_vkCreatePrivateDataSlot)load(context, "vkCreatePrivateDataSlot");
+ table->vkDestroyPrivateDataSlot = (PFN_vkDestroyPrivateDataSlot)load(context, "vkDestroyPrivateDataSlot");
+ table->vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)load(context, "vkGetDeviceBufferMemoryRequirements");
+ table->vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)load(context, "vkGetDeviceImageMemoryRequirements");
+ table->vkGetDeviceImageSparseMemoryRequirements = (PFN_vkGetDeviceImageSparseMemoryRequirements)load(context, "vkGetDeviceImageSparseMemoryRequirements");
+ table->vkGetPrivateData = (PFN_vkGetPrivateData)load(context, "vkGetPrivateData");
+ table->vkQueueSubmit2 = (PFN_vkQueueSubmit2)load(context, "vkQueueSubmit2");
+ table->vkSetPrivateData = (PFN_vkSetPrivateData)load(context, "vkSetPrivateData");
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
table->vkCmdWriteBufferMarkerAMD = (PFN_vkCmdWriteBufferMarkerAMD)load(context, "vkCmdWriteBufferMarkerAMD");
#endif /* defined(VK_AMD_buffer_marker) */
@@ -1153,6 +1251,9 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
table->vkCmdDrawMultiEXT = (PFN_vkCmdDrawMultiEXT)load(context, "vkCmdDrawMultiEXT");
table->vkCmdDrawMultiIndexedEXT = (PFN_vkCmdDrawMultiIndexedEXT)load(context, "vkCmdDrawMultiIndexedEXT");
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+ table->vkSetDeviceMemoryPriorityEXT = (PFN_vkSetDeviceMemoryPriorityEXT)load(context, "vkSetDeviceMemoryPriorityEXT");
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
table->vkCreatePrivateDataSlotEXT = (PFN_vkCreatePrivateDataSlotEXT)load(context, "vkCreatePrivateDataSlotEXT");
table->vkDestroyPrivateDataSlotEXT = (PFN_vkDestroyPrivateDataSlotEXT)load(context, "vkDestroyPrivateDataSlotEXT");
@@ -1179,6 +1280,13 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
#if defined(VK_EXT_vertex_input_dynamic_state)
table->vkCmdSetVertexInputEXT = (PFN_vkCmdSetVertexInputEXT)load(context, "vkCmdSetVertexInputEXT");
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+ table->vkCreateBufferCollectionFUCHSIA = (PFN_vkCreateBufferCollectionFUCHSIA)load(context, "vkCreateBufferCollectionFUCHSIA");
+ table->vkDestroyBufferCollectionFUCHSIA = (PFN_vkDestroyBufferCollectionFUCHSIA)load(context, "vkDestroyBufferCollectionFUCHSIA");
+ table->vkGetBufferCollectionPropertiesFUCHSIA = (PFN_vkGetBufferCollectionPropertiesFUCHSIA)load(context, "vkGetBufferCollectionPropertiesFUCHSIA");
+ table->vkSetBufferCollectionBufferConstraintsFUCHSIA = (PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)load(context, "vkSetBufferCollectionBufferConstraintsFUCHSIA");
+ table->vkSetBufferCollectionImageConstraintsFUCHSIA = (PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)load(context, "vkSetBufferCollectionImageConstraintsFUCHSIA");
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
table->vkGetMemoryZirconHandleFUCHSIA = (PFN_vkGetMemoryZirconHandleFUCHSIA)load(context, "vkGetMemoryZirconHandleFUCHSIA");
table->vkGetMemoryZirconHandlePropertiesFUCHSIA = (PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA)load(context, "vkGetMemoryZirconHandlePropertiesFUCHSIA");
@@ -1274,6 +1382,10 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
table->vkCmdDrawIndexedIndirectCountKHR = (PFN_vkCmdDrawIndexedIndirectCountKHR)load(context, "vkCmdDrawIndexedIndirectCountKHR");
table->vkCmdDrawIndirectCountKHR = (PFN_vkCmdDrawIndirectCountKHR)load(context, "vkCmdDrawIndirectCountKHR");
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+ table->vkCmdBeginRenderingKHR = (PFN_vkCmdBeginRenderingKHR)load(context, "vkCmdBeginRenderingKHR");
+ table->vkCmdEndRenderingKHR = (PFN_vkCmdEndRenderingKHR)load(context, "vkCmdEndRenderingKHR");
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_fd)
table->vkGetFenceFdKHR = (PFN_vkGetFenceFdKHR)load(context, "vkGetFenceFdKHR");
table->vkImportFenceFdKHR = (PFN_vkImportFenceFdKHR)load(context, "vkImportFenceFdKHR");
@@ -1312,6 +1424,11 @@ static void volkGenLoadDeviceTable(struct VolkDeviceTable* table, void* context,
#if defined(VK_KHR_maintenance3)
table->vkGetDescriptorSetLayoutSupportKHR = (PFN_vkGetDescriptorSetLayoutSupportKHR)load(context, "vkGetDescriptorSetLayoutSupportKHR");
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+ table->vkGetDeviceBufferMemoryRequirementsKHR = (PFN_vkGetDeviceBufferMemoryRequirementsKHR)load(context, "vkGetDeviceBufferMemoryRequirementsKHR");
+ table->vkGetDeviceImageMemoryRequirementsKHR = (PFN_vkGetDeviceImageMemoryRequirementsKHR)load(context, "vkGetDeviceImageMemoryRequirementsKHR");
+ table->vkGetDeviceImageSparseMemoryRequirementsKHR = (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)load(context, "vkGetDeviceImageSparseMemoryRequirementsKHR");
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
table->vkAcquireProfilingLockKHR = (PFN_vkAcquireProfilingLockKHR)load(context, "vkAcquireProfilingLockKHR");
table->vkReleaseProfilingLockKHR = (PFN_vkReleaseProfilingLockKHR)load(context, "vkReleaseProfilingLockKHR");
@@ -1658,6 +1775,45 @@ PFN_vkResetQueryPool vkResetQueryPool;
PFN_vkSignalSemaphore vkSignalSemaphore;
PFN_vkWaitSemaphores vkWaitSemaphores;
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+PFN_vkCmdBeginRendering vkCmdBeginRendering;
+PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
+PFN_vkCmdBlitImage2 vkCmdBlitImage2;
+PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
+PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
+PFN_vkCmdCopyImage2 vkCmdCopyImage2;
+PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
+PFN_vkCmdEndRendering vkCmdEndRendering;
+PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
+PFN_vkCmdResetEvent2 vkCmdResetEvent2;
+PFN_vkCmdResolveImage2 vkCmdResolveImage2;
+PFN_vkCmdSetCullMode vkCmdSetCullMode;
+PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
+PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
+PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
+PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
+PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
+PFN_vkCmdSetEvent2 vkCmdSetEvent2;
+PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
+PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
+PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
+PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
+PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
+PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
+PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
+PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
+PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
+PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
+PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
+PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
+PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
+PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
+PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
+PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;
+PFN_vkGetPrivateData vkGetPrivateData;
+PFN_vkQueueSubmit2 vkQueueSubmit2;
+PFN_vkSetPrivateData vkSetPrivateData;
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
#endif /* defined(VK_AMD_buffer_marker) */
@@ -1792,6 +1948,9 @@ PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
@@ -1822,6 +1981,13 @@ PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
#if defined(VK_EXT_vertex_input_dynamic_state)
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
+PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
+PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
+PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
+PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
@@ -1938,6 +2104,10 @@ PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
+PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_capabilities)
PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
#endif /* defined(VK_KHR_external_fence_capabilities) */
@@ -2005,6 +2175,11 @@ PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
#if defined(VK_KHR_maintenance3)
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
+PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
+PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
diff --git a/thirdparty/volk/volk.h b/thirdparty/volk/volk.h
index 2e292ca114..cdeedfc5ff 100644
--- a/thirdparty/volk/volk.h
+++ b/thirdparty/volk/volk.h
@@ -15,7 +15,7 @@
#endif
/* VOLK_GENERATE_VERSION_DEFINE */
-#define VOLK_HEADER_VERSION 190
+#define VOLK_HEADER_VERSION 204
/* VOLK_GENERATE_VERSION_DEFINE */
#ifndef VK_NO_PROTOTYPES
@@ -285,6 +285,44 @@ struct VolkDeviceTable
PFN_vkSignalSemaphore vkSignalSemaphore;
PFN_vkWaitSemaphores vkWaitSemaphores;
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+ PFN_vkCmdBeginRendering vkCmdBeginRendering;
+ PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
+ PFN_vkCmdBlitImage2 vkCmdBlitImage2;
+ PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
+ PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
+ PFN_vkCmdCopyImage2 vkCmdCopyImage2;
+ PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
+ PFN_vkCmdEndRendering vkCmdEndRendering;
+ PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
+ PFN_vkCmdResetEvent2 vkCmdResetEvent2;
+ PFN_vkCmdResolveImage2 vkCmdResolveImage2;
+ PFN_vkCmdSetCullMode vkCmdSetCullMode;
+ PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
+ PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
+ PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
+ PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
+ PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
+ PFN_vkCmdSetEvent2 vkCmdSetEvent2;
+ PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
+ PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
+ PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
+ PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
+ PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
+ PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
+ PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
+ PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
+ PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
+ PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
+ PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
+ PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
+ PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
+ PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
+ PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
+ PFN_vkGetPrivateData vkGetPrivateData;
+ PFN_vkQueueSubmit2 vkQueueSubmit2;
+ PFN_vkSetPrivateData vkSetPrivateData;
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
#endif /* defined(VK_AMD_buffer_marker) */
@@ -375,6 +413,9 @@ struct VolkDeviceTable
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+ PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
@@ -401,6 +442,13 @@ struct VolkDeviceTable
#if defined(VK_EXT_vertex_input_dynamic_state)
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+ PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
+ PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
+ PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
+ PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
+ PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
@@ -496,6 +544,10 @@ struct VolkDeviceTable
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+ PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
+ PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_fd)
PFN_vkGetFenceFdKHR vkGetFenceFdKHR;
PFN_vkImportFenceFdKHR vkImportFenceFdKHR;
@@ -534,6 +586,11 @@ struct VolkDeviceTable
#if defined(VK_KHR_maintenance3)
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+ PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
+ PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
+ PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR;
@@ -872,6 +929,45 @@ extern PFN_vkResetQueryPool vkResetQueryPool;
extern PFN_vkSignalSemaphore vkSignalSemaphore;
extern PFN_vkWaitSemaphores vkWaitSemaphores;
#endif /* defined(VK_VERSION_1_2) */
+#if defined(VK_VERSION_1_3)
+extern PFN_vkCmdBeginRendering vkCmdBeginRendering;
+extern PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2;
+extern PFN_vkCmdBlitImage2 vkCmdBlitImage2;
+extern PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2;
+extern PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2;
+extern PFN_vkCmdCopyImage2 vkCmdCopyImage2;
+extern PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2;
+extern PFN_vkCmdEndRendering vkCmdEndRendering;
+extern PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2;
+extern PFN_vkCmdResetEvent2 vkCmdResetEvent2;
+extern PFN_vkCmdResolveImage2 vkCmdResolveImage2;
+extern PFN_vkCmdSetCullMode vkCmdSetCullMode;
+extern PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable;
+extern PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable;
+extern PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp;
+extern PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable;
+extern PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable;
+extern PFN_vkCmdSetEvent2 vkCmdSetEvent2;
+extern PFN_vkCmdSetFrontFace vkCmdSetFrontFace;
+extern PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable;
+extern PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology;
+extern PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable;
+extern PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount;
+extern PFN_vkCmdSetStencilOp vkCmdSetStencilOp;
+extern PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable;
+extern PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount;
+extern PFN_vkCmdWaitEvents2 vkCmdWaitEvents2;
+extern PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2;
+extern PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot;
+extern PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot;
+extern PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements;
+extern PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements;
+extern PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements;
+extern PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties;
+extern PFN_vkGetPrivateData vkGetPrivateData;
+extern PFN_vkQueueSubmit2 vkQueueSubmit2;
+extern PFN_vkSetPrivateData vkSetPrivateData;
+#endif /* defined(VK_VERSION_1_3) */
#if defined(VK_AMD_buffer_marker)
extern PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD;
#endif /* defined(VK_AMD_buffer_marker) */
@@ -1006,6 +1102,9 @@ extern PFN_vkCreateMetalSurfaceEXT vkCreateMetalSurfaceEXT;
extern PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT;
extern PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT;
#endif /* defined(VK_EXT_multi_draw) */
+#if defined(VK_EXT_pageable_device_local_memory)
+extern PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT;
+#endif /* defined(VK_EXT_pageable_device_local_memory) */
#if defined(VK_EXT_private_data)
extern PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT;
extern PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT;
@@ -1036,6 +1135,13 @@ extern PFN_vkMergeValidationCachesEXT vkMergeValidationCachesEXT;
#if defined(VK_EXT_vertex_input_dynamic_state)
extern PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT;
#endif /* defined(VK_EXT_vertex_input_dynamic_state) */
+#if defined(VK_FUCHSIA_buffer_collection)
+extern PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA;
+extern PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA;
+extern PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA;
+extern PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA;
+extern PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA;
+#endif /* defined(VK_FUCHSIA_buffer_collection) */
#if defined(VK_FUCHSIA_external_memory)
extern PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA;
extern PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA;
@@ -1152,6 +1258,10 @@ extern PFN_vkCreateSharedSwapchainsKHR vkCreateSharedSwapchainsKHR;
extern PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR;
extern PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR;
#endif /* defined(VK_KHR_draw_indirect_count) */
+#if defined(VK_KHR_dynamic_rendering)
+extern PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR;
+extern PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR;
+#endif /* defined(VK_KHR_dynamic_rendering) */
#if defined(VK_KHR_external_fence_capabilities)
extern PFN_vkGetPhysicalDeviceExternalFencePropertiesKHR vkGetPhysicalDeviceExternalFencePropertiesKHR;
#endif /* defined(VK_KHR_external_fence_capabilities) */
@@ -1219,6 +1329,11 @@ extern PFN_vkTrimCommandPoolKHR vkTrimCommandPoolKHR;
#if defined(VK_KHR_maintenance3)
extern PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR;
#endif /* defined(VK_KHR_maintenance3) */
+#if defined(VK_KHR_maintenance4)
+extern PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR;
+extern PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
+extern PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
+#endif /* defined(VK_KHR_maintenance4) */
#if defined(VK_KHR_performance_query)
extern PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR;
extern PFN_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR;
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std.h
index f8c0cef49a..05956989b4 100644
--- a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std.h
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std.h
@@ -1,299 +1,308 @@
+#ifndef VULKAN_VIDEO_CODEC_H264STD_H_
+#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
+
/*
-** Copyright (c) 2019-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
-#ifndef VULKAN_VIDEO_CODEC_H264STD_H_
-#define VULKAN_VIDEO_CODEC_H264STD_H_ 1
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
#ifdef __cplusplus
extern "C" {
#endif
-#include "vk_video/vulkan_video_codecs_common.h"
+
+#define vulkan_video_codec_h264std 1
+#include <stdint.h>
// Vulkan 0.9 provisional Vulkan video H.264 encode and decode std specification version number
-#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9 VK_MAKE_VIDEO_STD_VERSION(0, 9, 0) // Patch version should always be set to 0
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9_5 VK_MAKE_VIDEO_STD_VERSION(0, 9, 5) // Patch version should always be set to 0
-// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
-#define VK_STD_VULKAN_VIDEO_CODEC_H264_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9
+#define STD_VIDEO_H264_CPB_CNT_LIST_SIZE 32
+#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS 6
+#define STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS 16
+#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS 2
+#define STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS 64
+#define VK_STD_VULKAN_VIDEO_CODEC_H264_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H264_API_VERSION_0_9_5
#define VK_STD_VULKAN_VIDEO_CODEC_H264_EXTENSION_NAME "VK_STD_vulkan_video_codec_h264"
-// *************************************************
-// Video H.264 common definitions:
-// *************************************************
-
typedef enum StdVideoH264ChromaFormatIdc {
- std_video_h264_chroma_format_idc_monochrome = 0,
- std_video_h264_chroma_format_idc_420 = 1,
- std_video_h264_chroma_format_idc_422 = 2,
- std_video_h264_chroma_format_idc_444 = 3,
+ STD_VIDEO_H264_CHROMA_FORMAT_IDC_MONOCHROME = 0,
+ STD_VIDEO_H264_CHROMA_FORMAT_IDC_420 = 1,
+ STD_VIDEO_H264_CHROMA_FORMAT_IDC_422 = 2,
+ STD_VIDEO_H264_CHROMA_FORMAT_IDC_444 = 3,
+ STD_VIDEO_H264_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264ChromaFormatIdc;
typedef enum StdVideoH264ProfileIdc {
- std_video_h264_profile_idc_baseline = 66, /* Only constrained baseline is supported */
- std_video_h264_profile_idc_main = 77,
- std_video_h264_profile_idc_high = 100,
- std_video_h264_profile_idc_high_444_predictive = 244,
- std_video_h264_profile_idc_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_PROFILE_IDC_BASELINE = 66,
+ STD_VIDEO_H264_PROFILE_IDC_MAIN = 77,
+ STD_VIDEO_H264_PROFILE_IDC_HIGH = 100,
+ STD_VIDEO_H264_PROFILE_IDC_HIGH_444_PREDICTIVE = 244,
+ STD_VIDEO_H264_PROFILE_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264ProfileIdc;
typedef enum StdVideoH264Level {
- std_video_h264_level_1_0 = 0,
- std_video_h264_level_1_1 = 1,
- std_video_h264_level_1_2 = 2,
- std_video_h264_level_1_3 = 3,
- std_video_h264_level_2_0 = 4,
- std_video_h264_level_2_1 = 5,
- std_video_h264_level_2_2 = 6,
- std_video_h264_level_3_0 = 7,
- std_video_h264_level_3_1 = 8,
- std_video_h264_level_3_2 = 9,
- std_video_h264_level_4_0 = 10,
- std_video_h264_level_4_1 = 11,
- std_video_h264_level_4_2 = 12,
- std_video_h264_level_5_0 = 13,
- std_video_h264_level_5_1 = 14,
- std_video_h264_level_5_2 = 15,
- std_video_h264_level_6_0 = 16,
- std_video_h264_level_6_1 = 17,
- std_video_h264_level_6_2 = 18,
- std_video_h264_level_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_LEVEL_1_0 = 0,
+ STD_VIDEO_H264_LEVEL_1_1 = 1,
+ STD_VIDEO_H264_LEVEL_1_2 = 2,
+ STD_VIDEO_H264_LEVEL_1_3 = 3,
+ STD_VIDEO_H264_LEVEL_2_0 = 4,
+ STD_VIDEO_H264_LEVEL_2_1 = 5,
+ STD_VIDEO_H264_LEVEL_2_2 = 6,
+ STD_VIDEO_H264_LEVEL_3_0 = 7,
+ STD_VIDEO_H264_LEVEL_3_1 = 8,
+ STD_VIDEO_H264_LEVEL_3_2 = 9,
+ STD_VIDEO_H264_LEVEL_4_0 = 10,
+ STD_VIDEO_H264_LEVEL_4_1 = 11,
+ STD_VIDEO_H264_LEVEL_4_2 = 12,
+ STD_VIDEO_H264_LEVEL_5_0 = 13,
+ STD_VIDEO_H264_LEVEL_5_1 = 14,
+ STD_VIDEO_H264_LEVEL_5_2 = 15,
+ STD_VIDEO_H264_LEVEL_6_0 = 16,
+ STD_VIDEO_H264_LEVEL_6_1 = 17,
+ STD_VIDEO_H264_LEVEL_6_2 = 18,
+ STD_VIDEO_H264_LEVEL_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_LEVEL_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264Level;
typedef enum StdVideoH264PocType {
- std_video_h264_poc_type_0 = 0,
- std_video_h264_poc_type_1 = 1,
- std_video_h264_poc_type_2 = 2,
- std_video_h264_poc_type_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_POC_TYPE_0 = 0,
+ STD_VIDEO_H264_POC_TYPE_1 = 1,
+ STD_VIDEO_H264_POC_TYPE_2 = 2,
+ STD_VIDEO_H264_POC_TYPE_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_POC_TYPE_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264PocType;
typedef enum StdVideoH264AspectRatioIdc {
- std_video_h264_aspect_ratio_idc_unspecified = 0,
- std_video_h264_aspect_ratio_idc_square = 1,
- std_video_h264_aspect_ratio_idc_12_11 = 2,
- std_video_h264_aspect_ratio_idc_10_11 = 3,
- std_video_h264_aspect_ratio_idc_16_11 = 4,
- std_video_h264_aspect_ratio_idc_40_33 = 5,
- std_video_h264_aspect_ratio_idc_24_11 = 6,
- std_video_h264_aspect_ratio_idc_20_11 = 7,
- std_video_h264_aspect_ratio_idc_32_11 = 8,
- std_video_h264_aspect_ratio_idc_80_33 = 9,
- std_video_h264_aspect_ratio_idc_18_11 = 10,
- std_video_h264_aspect_ratio_idc_15_11 = 11,
- std_video_h264_aspect_ratio_idc_64_33 = 12,
- std_video_h264_aspect_ratio_idc_160_99 = 13,
- std_video_h264_aspect_ratio_idc_4_3 = 14,
- std_video_h264_aspect_ratio_idc_3_2 = 15,
- std_video_h264_aspect_ratio_idc_2_1 = 16,
- std_video_h264_aspect_ratio_idc_extended_sar = 255,
- std_video_h264_aspect_ratio_idc_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_UNSPECIFIED = 0,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_SQUARE = 1,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_12_11 = 2,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_10_11 = 3,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_16_11 = 4,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_40_33 = 5,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_24_11 = 6,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_20_11 = 7,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_32_11 = 8,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_80_33 = 9,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_18_11 = 10,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_15_11 = 11,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_64_33 = 12,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_160_99 = 13,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_4_3 = 14,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_3_2 = 15,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_2_1 = 16,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_EXTENDED_SAR = 255,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_ASPECT_RATIO_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264AspectRatioIdc;
-typedef enum StdVideoH264WeightedBiPredIdc {
- std_video_h264_default_weighted_b_slices_prediction_idc = 0,
- std_video_h264_explicit_weighted_b_slices_prediction_idc = 1,
- std_video_h264_implicit_weighted_b_slices_prediction_idc = 2,
- std_video_h264_invalid_weighted_b_slices_prediction_idc = 0x7FFFFFFF
-} StdVideoH264WeightedBiPredIdc;
+typedef enum StdVideoH264WeightedBipredIdc {
+ STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_DEFAULT = 0,
+ STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_EXPLICIT = 1,
+ STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_IMPLICIT = 2,
+ STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_WEIGHTED_BIPRED_IDC_MAX_ENUM = 0x7FFFFFFF
+} StdVideoH264WeightedBipredIdc;
typedef enum StdVideoH264ModificationOfPicNumsIdc {
- std_video_h264_modification_of_pic_nums_idc_short_term_subtract = 0,
- std_video_h264_modification_of_pic_nums_idc_short_term_add = 1,
- std_video_h264_modification_of_pic_nums_idc_long_term = 2,
- std_video_h264_modification_of_pic_nums_idc_end = 3,
- std_video_h264_modification_of_pic_nums_idc_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_SUBTRACT = 0,
+ STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_SHORT_TERM_ADD = 1,
+ STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_LONG_TERM = 2,
+ STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_END = 3,
+ STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_MODIFICATION_OF_PIC_NUMS_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264ModificationOfPicNumsIdc;
typedef enum StdVideoH264MemMgmtControlOp {
- std_video_h264_mem_mgmt_control_op_end = 0,
- std_video_h264_mem_mgmt_control_op_unmark_short_term = 1,
- std_video_h264_mem_mgmt_control_op_unmark_long_term = 2,
- std_video_h264_mem_mgmt_control_op_mark_long_term = 3,
- std_video_h264_mem_mgmt_control_op_set_max_long_term_index = 4,
- std_video_h264_mem_mgmt_control_op_unmark_all = 5,
- std_video_h264_mem_mgmt_control_op_mark_current_as_long_term = 6,
- std_video_h264_mem_mgmt_control_op_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_END = 0,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_SHORT_TERM = 1,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_LONG_TERM = 2,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_LONG_TERM = 3,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_SET_MAX_LONG_TERM_INDEX = 4,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_UNMARK_ALL = 5,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MARK_CURRENT_AS_LONG_TERM = 6,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_MEM_MGMT_CONTROL_OP_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264MemMgmtControlOp;
typedef enum StdVideoH264CabacInitIdc {
- std_video_h264_cabac_init_idc_0 = 0,
- std_video_h264_cabac_init_idc_1 = 1,
- std_video_h264_cabac_init_idc_2 = 2,
- std_video_h264_cabac_init_idc_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_CABAC_INIT_IDC_0 = 0,
+ STD_VIDEO_H264_CABAC_INIT_IDC_1 = 1,
+ STD_VIDEO_H264_CABAC_INIT_IDC_2 = 2,
+ STD_VIDEO_H264_CABAC_INIT_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_CABAC_INIT_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264CabacInitIdc;
typedef enum StdVideoH264DisableDeblockingFilterIdc {
- std_video_h264_disable_deblocking_filter_idc_disabled = 0,
- std_video_h264_disable_deblocking_filter_idc_enabled = 1,
- std_video_h264_disable_deblocking_filter_idc_partial = 2,
- std_video_h264_disable_deblocking_filter_idc_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_DISABLED = 0,
+ STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_ENABLED = 1,
+ STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_PARTIAL = 2,
+ STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_DISABLE_DEBLOCKING_FILTER_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264DisableDeblockingFilterIdc;
-typedef enum StdVideoH264PictureType {
- std_video_h264_picture_type_i = 0,
- std_video_h264_picture_type_p = 1,
- std_video_h264_picture_type_b = 2,
- std_video_h264_picture_type_invalid = 0x7FFFFFFF
-} StdVideoH264PictureType;
-
typedef enum StdVideoH264SliceType {
- std_video_h264_slice_type_i = 0,
- std_video_h264_slice_type_p = 1,
- std_video_h264_slice_type_b = 2,
- std_video_h264_slice_type_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_SLICE_TYPE_P = 0,
+ STD_VIDEO_H264_SLICE_TYPE_B = 1,
+ STD_VIDEO_H264_SLICE_TYPE_I = 2,
+ STD_VIDEO_H264_SLICE_TYPE_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264SliceType;
+typedef enum StdVideoH264PictureType {
+ STD_VIDEO_H264_PICTURE_TYPE_P = 0,
+ STD_VIDEO_H264_PICTURE_TYPE_B = 1,
+ STD_VIDEO_H264_PICTURE_TYPE_I = 2,
+ STD_VIDEO_H264_PICTURE_TYPE_IDR = 5,
+ STD_VIDEO_H264_PICTURE_TYPE_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} StdVideoH264PictureType;
+
typedef enum StdVideoH264NonVclNaluType {
- std_video_h264_non_vcl_nalu_type_sps = 0,
- std_video_h264_non_vcl_nalu_type_pps = 1,
- std_video_h264_non_vcl_nalu_type_aud = 2,
- std_video_h264_non_vcl_nalu_type_prefix = 3,
- std_video_h264_non_vcl_nalu_type_end_of_sequence = 4,
- std_video_h264_non_vcl_nalu_type_end_of_stream = 5,
- std_video_h264_non_vcl_nalu_type_precoded = 6,
- std_video_h264_non_vcl_nalu_type_invalid = 0x7FFFFFFF
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_SPS = 0,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_PPS = 1,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_AUD = 2,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_PREFIX = 3,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_SEQUENCE = 4,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_END_OF_STREAM = 5,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_PRECODED = 6,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H264_NON_VCL_NALU_TYPE_MAX_ENUM = 0x7FFFFFFF
} StdVideoH264NonVclNaluType;
-
typedef struct StdVideoH264SpsVuiFlags {
- uint32_t aspect_ratio_info_present_flag:1;
- uint32_t overscan_info_present_flag:1;
- uint32_t overscan_appropriate_flag:1;
- uint32_t video_signal_type_present_flag:1;
- uint32_t video_full_range_flag:1;
- uint32_t color_description_present_flag:1;
- uint32_t chroma_loc_info_present_flag:1;
- uint32_t timing_info_present_flag:1;
- uint32_t fixed_frame_rate_flag:1;
- uint32_t bitstream_restriction_flag:1;
- uint32_t nal_hrd_parameters_present_flag:1;
- uint32_t vcl_hrd_parameters_present_flag:1;
+ uint32_t aspect_ratio_info_present_flag : 1;
+ uint32_t overscan_info_present_flag : 1;
+ uint32_t overscan_appropriate_flag : 1;
+ uint32_t video_signal_type_present_flag : 1;
+ uint32_t video_full_range_flag : 1;
+ uint32_t color_description_present_flag : 1;
+ uint32_t chroma_loc_info_present_flag : 1;
+ uint32_t timing_info_present_flag : 1;
+ uint32_t fixed_frame_rate_flag : 1;
+ uint32_t bitstream_restriction_flag : 1;
+ uint32_t nal_hrd_parameters_present_flag : 1;
+ uint32_t vcl_hrd_parameters_present_flag : 1;
} StdVideoH264SpsVuiFlags;
typedef struct StdVideoH264HrdParameters {
- uint8_t cpb_cnt_minus1;
- uint8_t bit_rate_scale;
- uint8_t cpb_size_scale;
- uint32_t bit_rate_value_minus1[32];
- uint32_t cpb_size_value_minus1[32];
- uint8_t cbr_flag[32];
- uint32_t initial_cpb_removal_delay_length_minus1;
- uint32_t cpb_removal_delay_length_minus1;
- uint32_t dpb_output_delay_length_minus1;
- uint32_t time_offset_length;
+ uint8_t cpb_cnt_minus1;
+ uint8_t bit_rate_scale;
+ uint8_t cpb_size_scale;
+ uint32_t bit_rate_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE];
+ uint32_t cpb_size_value_minus1[STD_VIDEO_H264_CPB_CNT_LIST_SIZE];
+ uint8_t cbr_flag[STD_VIDEO_H264_CPB_CNT_LIST_SIZE];
+ uint32_t initial_cpb_removal_delay_length_minus1;
+ uint32_t cpb_removal_delay_length_minus1;
+ uint32_t dpb_output_delay_length_minus1;
+ uint32_t time_offset_length;
} StdVideoH264HrdParameters;
typedef struct StdVideoH264SequenceParameterSetVui {
- StdVideoH264AspectRatioIdc aspect_ratio_idc;
- uint16_t sar_width;
- uint16_t sar_height;
- uint8_t video_format;
- uint8_t color_primaries;
- uint8_t transfer_characteristics;
- uint8_t matrix_coefficients;
- uint32_t num_units_in_tick;
- uint32_t time_scale;
- StdVideoH264HrdParameters hrd_parameters;
- uint8_t num_reorder_frames;
- uint8_t max_dec_frame_buffering;
- StdVideoH264SpsVuiFlags flags;
+ StdVideoH264AspectRatioIdc aspect_ratio_idc;
+ uint16_t sar_width;
+ uint16_t sar_height;
+ uint8_t video_format;
+ uint8_t color_primaries;
+ uint8_t transfer_characteristics;
+ uint8_t matrix_coefficients;
+ uint32_t num_units_in_tick;
+ uint32_t time_scale;
+ StdVideoH264HrdParameters* pHrdParameters;
+ uint8_t max_num_reorder_frames;
+ uint8_t max_dec_frame_buffering;
+ StdVideoH264SpsVuiFlags flags;
} StdVideoH264SequenceParameterSetVui;
typedef struct StdVideoH264SpsFlags {
- uint32_t constraint_set0_flag:1;
- uint32_t constraint_set1_flag:1;
- uint32_t constraint_set2_flag:1;
- uint32_t constraint_set3_flag:1;
- uint32_t constraint_set4_flag:1;
- uint32_t constraint_set5_flag:1;
- uint32_t direct_8x8_inference_flag:1;
- uint32_t mb_adaptive_frame_field_flag:1;
- uint32_t frame_mbs_only_flag:1;
- uint32_t delta_pic_order_always_zero_flag:1;
- uint32_t residual_colour_transform_flag:1;
- uint32_t gaps_in_frame_num_value_allowed_flag:1;
- uint32_t first_picture_after_seek_flag:1; // where is this being documented?
- uint32_t qpprime_y_zero_transform_bypass_flag:1;
- uint32_t frame_cropping_flag:1;
- uint32_t scaling_matrix_present_flag:1;
- uint32_t vui_parameters_present_flag:1;
+ uint32_t constraint_set0_flag : 1;
+ uint32_t constraint_set1_flag : 1;
+ uint32_t constraint_set2_flag : 1;
+ uint32_t constraint_set3_flag : 1;
+ uint32_t constraint_set4_flag : 1;
+ uint32_t constraint_set5_flag : 1;
+ uint32_t direct_8x8_inference_flag : 1;
+ uint32_t mb_adaptive_frame_field_flag : 1;
+ uint32_t frame_mbs_only_flag : 1;
+ uint32_t delta_pic_order_always_zero_flag : 1;
+ uint32_t separate_colour_plane_flag : 1;
+ uint32_t gaps_in_frame_num_value_allowed_flag : 1;
+ uint32_t qpprime_y_zero_transform_bypass_flag : 1;
+ uint32_t frame_cropping_flag : 1;
+ uint32_t seq_scaling_matrix_present_flag : 1;
+ uint32_t vui_parameters_present_flag : 1;
} StdVideoH264SpsFlags;
-typedef struct StdVideoH264ScalingLists
-{
- // scaling_list_present_mask has one bit for each
- // seq_scaling_list_present_flag[i] for SPS OR
- // pic_scaling_list_present_flag[i] for PPS,
- // bit 0 - 5 are for each entry of ScalingList4x4
- // bit 6 - 7 are for each entry plus 6 for ScalingList8x8
- uint8_t scaling_list_present_mask;
- // use_default_scaling_matrix_mask has one bit for each
- // UseDefaultScalingMatrix4x4Flag[ i ] and
- // UseDefaultScalingMatrix8x8Flag[ i - 6 ] for SPS OR PPS
- // bit 0 - 5 are for each entry of ScalingList4x4
- // bit 6 - 7 are for each entry plus 6 for ScalingList8x8
- uint8_t use_default_scaling_matrix_mask;
- uint8_t ScalingList4x4[6][16];
- uint8_t ScalingList8x8[2][64];
+typedef struct StdVideoH264ScalingLists {
+ uint8_t scaling_list_present_mask;
+ uint8_t use_default_scaling_matrix_mask;
+ uint8_t ScalingList4x4[STD_VIDEO_H264_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_4X4_NUM_ELEMENTS];
+ uint8_t ScalingList8x8[STD_VIDEO_H264_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H264_SCALING_LIST_8X8_NUM_ELEMENTS];
} StdVideoH264ScalingLists;
-typedef struct StdVideoH264SequenceParameterSet
-{
- StdVideoH264ProfileIdc profile_idc;
- StdVideoH264Level level_idc;
- uint8_t seq_parameter_set_id;
- StdVideoH264ChromaFormatIdc chroma_format_idc;
- uint8_t bit_depth_luma_minus8;
- uint8_t bit_depth_chroma_minus8;
- uint8_t log2_max_frame_num_minus4;
- StdVideoH264PocType pic_order_cnt_type;
- uint8_t log2_max_pic_order_cnt_lsb_minus4;
- int32_t offset_for_non_ref_pic;
- int32_t offset_for_top_to_bottom_field;
- uint8_t num_ref_frames_in_pic_order_cnt_cycle;
- uint8_t max_num_ref_frames;
- uint32_t pic_width_in_mbs_minus1;
- uint32_t pic_height_in_map_units_minus1;
- uint32_t frame_crop_left_offset;
- uint32_t frame_crop_right_offset;
- uint32_t frame_crop_top_offset;
- uint32_t frame_crop_bottom_offset;
- StdVideoH264SpsFlags flags;
- int32_t offset_for_ref_frame[255]; // The number of valid values are defined by the num_ref_frames_in_pic_order_cnt_cycle
- StdVideoH264ScalingLists* pScalingLists; // Must be a valid pointer if scaling_matrix_present_flag is set
- StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui; // Must be a valid pointer if StdVideoH264SpsFlags:vui_parameters_present_flag is set
+typedef struct StdVideoH264SequenceParameterSet {
+ StdVideoH264ProfileIdc profile_idc;
+ StdVideoH264Level level_idc;
+ uint8_t seq_parameter_set_id;
+ StdVideoH264ChromaFormatIdc chroma_format_idc;
+ uint8_t bit_depth_luma_minus8;
+ uint8_t bit_depth_chroma_minus8;
+ uint8_t log2_max_frame_num_minus4;
+ StdVideoH264PocType pic_order_cnt_type;
+ uint8_t log2_max_pic_order_cnt_lsb_minus4;
+ int32_t offset_for_non_ref_pic;
+ int32_t offset_for_top_to_bottom_field;
+ uint8_t num_ref_frames_in_pic_order_cnt_cycle;
+ uint8_t max_num_ref_frames;
+ uint32_t pic_width_in_mbs_minus1;
+ uint32_t pic_height_in_map_units_minus1;
+ uint32_t frame_crop_left_offset;
+ uint32_t frame_crop_right_offset;
+ uint32_t frame_crop_top_offset;
+ uint32_t frame_crop_bottom_offset;
+ StdVideoH264SpsFlags flags;
+ int32_t* pOffsetForRefFrame;
+ StdVideoH264ScalingLists* pScalingLists;
+ StdVideoH264SequenceParameterSetVui* pSequenceParameterSetVui;
} StdVideoH264SequenceParameterSet;
typedef struct StdVideoH264PpsFlags {
- uint32_t transform_8x8_mode_flag:1;
- uint32_t redundant_pic_cnt_present_flag:1;
- uint32_t constrained_intra_pred_flag:1;
- uint32_t deblocking_filter_control_present_flag:1;
- uint32_t weighted_bipred_idc_flag:1;
- uint32_t weighted_pred_flag:1;
- uint32_t pic_order_present_flag:1;
- uint32_t entropy_coding_mode_flag:1;
- uint32_t scaling_matrix_present_flag:1;
+ uint32_t transform_8x8_mode_flag : 1;
+ uint32_t redundant_pic_cnt_present_flag : 1;
+ uint32_t constrained_intra_pred_flag : 1;
+ uint32_t deblocking_filter_control_present_flag : 1;
+ uint32_t weighted_bipred_idc_flag : 1;
+ uint32_t weighted_pred_flag : 1;
+ uint32_t pic_order_present_flag : 1;
+ uint32_t entropy_coding_mode_flag : 1;
+ uint32_t pic_scaling_matrix_present_flag : 1;
} StdVideoH264PpsFlags;
-typedef struct StdVideoH264PictureParameterSet
-{
- uint8_t seq_parameter_set_id;
- uint8_t pic_parameter_set_id;
- uint8_t num_ref_idx_l0_default_active_minus1;
- uint8_t num_ref_idx_l1_default_active_minus1;
- StdVideoH264WeightedBiPredIdc weighted_bipred_idc;
- int8_t pic_init_qp_minus26;
- int8_t pic_init_qs_minus26;
- int8_t chroma_qp_index_offset;
- int8_t second_chroma_qp_index_offset;
- StdVideoH264PpsFlags flags;
- StdVideoH264ScalingLists* pScalingLists; // Must be a valid pointer if StdVideoH264PpsFlags::scaling_matrix_present_flag is set.
+typedef struct StdVideoH264PictureParameterSet {
+ uint8_t seq_parameter_set_id;
+ uint8_t pic_parameter_set_id;
+ uint8_t num_ref_idx_l0_default_active_minus1;
+ uint8_t num_ref_idx_l1_default_active_minus1;
+ StdVideoH264WeightedBipredIdc weighted_bipred_idc;
+ int8_t pic_init_qp_minus26;
+ int8_t pic_init_qs_minus26;
+ int8_t chroma_qp_index_offset;
+ int8_t second_chroma_qp_index_offset;
+ StdVideoH264PpsFlags flags;
+ StdVideoH264ScalingLists* pScalingLists;
} StdVideoH264PictureParameterSet;
+
#ifdef __cplusplus
}
#endif
-#endif // VULKAN_VIDEO_CODEC_H264STD_H_
+#endif
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
index 2b4fc64699..8e3b05c02e 100644
--- a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_decode.h
@@ -1,82 +1,93 @@
+#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
+
/*
-** Copyright (c) 2019-2020 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
-#ifndef VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
-#define VULKAN_VIDEO_CODEC_H264STD_DECODE_H_ 1
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
#ifdef __cplusplus
extern "C" {
#endif
-#include "vk_video/vulkan_video_codec_h264std.h"
-// *************************************************
-// Video H.264 Decode related parameters:
-// *************************************************
+#define vulkan_video_codec_h264std_decode 1
+#define STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE 2
+#define STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE 15
+
+typedef enum StdVideoDecodeH264FieldOrderCount {
+ STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_TOP = 0,
+ STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_BOTTOM = 1,
+ STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_MAX_ENUM = 0x7FFFFFFF
+} StdVideoDecodeH264FieldOrderCount;
typedef struct StdVideoDecodeH264PictureInfoFlags {
- uint32_t field_pic_flag:1; // Is field picture
- uint32_t is_intra:1; // Is intra picture
- uint32_t bottom_field_flag:1; // bottom (true) or top (false) field if field_pic_flag is set.
- uint32_t is_reference:1; // This only applies to picture info, and not to the DPB lists.
- uint32_t complementary_field_pair:1; // complementary field pair, complementary non-reference field pair, complementary reference field pair
+ uint32_t field_pic_flag : 1;
+ uint32_t is_intra : 1;
+ uint32_t IdrPicFlag : 1;
+ uint32_t bottom_field_flag : 1;
+ uint32_t is_reference : 1;
+ uint32_t complementary_field_pair : 1;
} StdVideoDecodeH264PictureInfoFlags;
typedef struct StdVideoDecodeH264PictureInfo {
- uint8_t seq_parameter_set_id; // Selecting SPS from the Picture Parameters
- uint8_t pic_parameter_set_id; // Selecting PPS from the Picture Parameters and the SPS
- uint16_t reserved; // for structure members 32-bit packing/alignment
- uint16_t frame_num; // 7.4.3 Slice header semantics
- uint16_t idr_pic_id; // 7.4.3 Slice header semantics
- // PicOrderCnt is based on TopFieldOrderCnt and BottomFieldOrderCnt. See 8.2.1 Decoding process for picture order count type 0 - 2
- int32_t PicOrderCnt[2]; // TopFieldOrderCnt and BottomFieldOrderCnt fields.
- StdVideoDecodeH264PictureInfoFlags flags;
+ uint8_t seq_parameter_set_id;
+ uint8_t pic_parameter_set_id;
+ uint16_t reserved;
+ uint16_t frame_num;
+ uint16_t idr_pic_id;
+ int32_t PicOrderCnt[STD_VIDEO_DECODE_H264_FIELD_ORDER_COUNT_LIST_SIZE];
+ StdVideoDecodeH264PictureInfoFlags flags;
} StdVideoDecodeH264PictureInfo;
typedef struct StdVideoDecodeH264ReferenceInfoFlags {
- uint32_t top_field_flag:1; // Reference is used for top field reference.
- uint32_t bottom_field_flag:1; // Reference is used for bottom field reference.
- uint32_t is_long_term:1; // this is a long term reference
- uint32_t is_non_existing:1; // Must be handled in accordance with 8.2.5.2: Decoding process for gaps in frame_num
+ uint32_t top_field_flag : 1;
+ uint32_t bottom_field_flag : 1;
+ uint32_t is_long_term : 1;
+ uint32_t is_non_existing : 1;
} StdVideoDecodeH264ReferenceInfoFlags;
typedef struct StdVideoDecodeH264ReferenceInfo {
- // FrameNum = is_long_term ? long_term_frame_idx : frame_num
- uint16_t FrameNum; // 7.4.3.3 Decoded reference picture marking semantics
- uint16_t reserved; // for structure members 32-bit packing/alignment
- int32_t PicOrderCnt[2]; // TopFieldOrderCnt and BottomFieldOrderCnt fields.
- StdVideoDecodeH264ReferenceInfoFlags flags;
+ uint16_t FrameNum;
+ uint16_t reserved;
+ int32_t PicOrderCnt[2];
+ StdVideoDecodeH264ReferenceInfoFlags flags;
} StdVideoDecodeH264ReferenceInfo;
typedef struct StdVideoDecodeH264MvcElementFlags {
- uint32_t non_idr:1;
- uint32_t anchor_pic:1;
- uint32_t inter_view:1;
+ uint32_t non_idr : 1;
+ uint32_t anchor_pic : 1;
+ uint32_t inter_view : 1;
} StdVideoDecodeH264MvcElementFlags;
typedef struct StdVideoDecodeH264MvcElement {
- StdVideoDecodeH264MvcElementFlags flags;
- uint16_t viewOrderIndex;
- uint16_t viewId;
- uint16_t temporalId; // move out?
- uint16_t priorityId; // move out?
- uint16_t numOfAnchorRefsInL0;
- uint16_t viewIdOfAnchorRefsInL0[15];
- uint16_t numOfAnchorRefsInL1;
- uint16_t viewIdOfAnchorRefsInL1[15];
- uint16_t numOfNonAnchorRefsInL0;
- uint16_t viewIdOfNonAnchorRefsInL0[15];
- uint16_t numOfNonAnchorRefsInL1;
- uint16_t viewIdOfNonAnchorRefsInL1[15];
+ StdVideoDecodeH264MvcElementFlags flags;
+ uint16_t viewOrderIndex;
+ uint16_t viewId;
+ uint16_t temporalId;
+ uint16_t priorityId;
+ uint16_t numOfAnchorRefsInL0;
+ uint16_t viewIdOfAnchorRefsInL0[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+ uint16_t numOfAnchorRefsInL1;
+ uint16_t viewIdOfAnchorRefsInL1[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+ uint16_t numOfNonAnchorRefsInL0;
+ uint16_t viewIdOfNonAnchorRefsInL0[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
+ uint16_t numOfNonAnchorRefsInL1;
+ uint16_t viewIdOfNonAnchorRefsInL1[STD_VIDEO_DECODE_H264_MVC_REF_LIST_SIZE];
} StdVideoDecodeH264MvcElement;
typedef struct StdVideoDecodeH264Mvc {
- uint32_t viewId0;
- uint32_t mvcElementCount;
- StdVideoDecodeH264MvcElement* pMvcElements;
+ uint32_t viewId0;
+ uint32_t mvcElementCount;
+ StdVideoDecodeH264MvcElement* pMvcElements;
} StdVideoDecodeH264Mvc;
@@ -84,4 +95,4 @@ typedef struct StdVideoDecodeH264Mvc {
}
#endif
-#endif // VULKAN_VIDEO_CODEC_H264STD_DECODE_H_
+#endif
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
index 718456203a..7079aeddfb 100644
--- a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h264std_encode.h
@@ -1,89 +1,92 @@
+#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
+#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
+
/*
-** Copyright (c) 2019-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
-#ifndef VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
-#define VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_ 1
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
#ifdef __cplusplus
extern "C" {
#endif
-#include "vk_video/vulkan_video_codec_h264std.h"
-// *************************************************
-// Video H.264 Encode related parameters:
-// *************************************************
+#define vulkan_video_codec_h264std_encode 1
typedef struct StdVideoEncodeH264SliceHeaderFlags {
- uint32_t idr_flag:1;
- uint32_t is_reference_flag:1;
- uint32_t num_ref_idx_active_override_flag:1;
- uint32_t no_output_of_prior_pics_flag:1;
- uint32_t long_term_reference_flag:1;
- uint32_t adaptive_ref_pic_marking_mode_flag:1;
- uint32_t no_prior_references_available_flag:1;
+ uint32_t idr_flag : 1;
+ uint32_t is_reference_flag : 1;
+ uint32_t num_ref_idx_active_override_flag : 1;
+ uint32_t no_output_of_prior_pics_flag : 1;
+ uint32_t long_term_reference_flag : 1;
+ uint32_t adaptive_ref_pic_marking_mode_flag : 1;
+ uint32_t no_prior_references_available_flag : 1;
} StdVideoEncodeH264SliceHeaderFlags;
typedef struct StdVideoEncodeH264PictureInfoFlags {
- uint32_t idr_flag:1;
- uint32_t is_reference_flag:1;
- uint32_t long_term_reference_flag:1;
+ uint32_t idr_flag : 1;
+ uint32_t is_reference_flag : 1;
+ uint32_t long_term_reference_flag : 1;
} StdVideoEncodeH264PictureInfoFlags;
typedef struct StdVideoEncodeH264RefMgmtFlags {
- uint32_t ref_pic_list_modification_l0_flag:1;
- uint32_t ref_pic_list_modification_l1_flag:1;
+ uint32_t ref_pic_list_modification_l0_flag : 1;
+ uint32_t ref_pic_list_modification_l1_flag : 1;
} StdVideoEncodeH264RefMgmtFlags;
typedef struct StdVideoEncodeH264RefListModEntry {
- StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc;
- uint16_t abs_diff_pic_num_minus1;
- uint16_t long_term_pic_num;
+ StdVideoH264ModificationOfPicNumsIdc modification_of_pic_nums_idc;
+ uint16_t abs_diff_pic_num_minus1;
+ uint16_t long_term_pic_num;
} StdVideoEncodeH264RefListModEntry;
typedef struct StdVideoEncodeH264RefPicMarkingEntry {
- StdVideoH264MemMgmtControlOp operation;
- uint16_t difference_of_pic_nums_minus1;
- uint16_t long_term_pic_num;
- uint16_t long_term_frame_idx;
- uint16_t max_long_term_frame_idx_plus1;
+ StdVideoH264MemMgmtControlOp operation;
+ uint16_t difference_of_pic_nums_minus1;
+ uint16_t long_term_pic_num;
+ uint16_t long_term_frame_idx;
+ uint16_t max_long_term_frame_idx_plus1;
} StdVideoEncodeH264RefPicMarkingEntry;
typedef struct StdVideoEncodeH264RefMemMgmtCtrlOperations {
- StdVideoEncodeH264RefMgmtFlags flags;
- uint8_t refList0ModOpCount;
- StdVideoEncodeH264RefListModEntry* pRefList0ModOperations;
- uint8_t refList1ModOpCount;
- StdVideoEncodeH264RefListModEntry* pRefList1ModOperations;
- uint8_t refPicMarkingOpCount;
- StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations;
+ StdVideoEncodeH264RefMgmtFlags flags;
+ uint8_t refList0ModOpCount;
+ StdVideoEncodeH264RefListModEntry* pRefList0ModOperations;
+ uint8_t refList1ModOpCount;
+ StdVideoEncodeH264RefListModEntry* pRefList1ModOperations;
+ uint8_t refPicMarkingOpCount;
+ StdVideoEncodeH264RefPicMarkingEntry* pRefPicMarkingOperations;
} StdVideoEncodeH264RefMemMgmtCtrlOperations;
typedef struct StdVideoEncodeH264PictureInfo {
- StdVideoEncodeH264PictureInfoFlags flags;
- StdVideoH264PictureType pictureType;
- uint32_t frameNum;
- uint32_t pictureOrderCount;
- uint16_t long_term_pic_num;
- uint16_t long_term_frame_idx;
+ StdVideoEncodeH264PictureInfoFlags flags;
+ StdVideoH264PictureType pictureType;
+ uint32_t frameNum;
+ uint32_t pictureOrderCount;
+ uint16_t long_term_pic_num;
+ uint16_t long_term_frame_idx;
} StdVideoEncodeH264PictureInfo;
typedef struct StdVideoEncodeH264SliceHeader {
- StdVideoEncodeH264SliceHeaderFlags flags;
- StdVideoH264SliceType slice_type;
- uint8_t seq_parameter_set_id;
- uint8_t pic_parameter_set_id;
- uint16_t idr_pic_id;
- uint8_t num_ref_idx_l0_active_minus1;
- uint8_t num_ref_idx_l1_active_minus1;
- StdVideoH264CabacInitIdc cabac_init_idc;
- StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc;
- int8_t slice_alpha_c0_offset_div2;
- int8_t slice_beta_offset_div2;
- StdVideoEncodeH264RefMemMgmtCtrlOperations* pMemMgmtCtrlOperations;
+ StdVideoEncodeH264SliceHeaderFlags flags;
+ StdVideoH264SliceType slice_type;
+ uint8_t seq_parameter_set_id;
+ uint8_t pic_parameter_set_id;
+ uint16_t idr_pic_id;
+ uint8_t num_ref_idx_l0_active_minus1;
+ uint8_t num_ref_idx_l1_active_minus1;
+ StdVideoH264CabacInitIdc cabac_init_idc;
+ StdVideoH264DisableDeblockingFilterIdc disable_deblocking_filter_idc;
+ int8_t slice_alpha_c0_offset_div2;
+ int8_t slice_beta_offset_div2;
+ StdVideoEncodeH264RefMemMgmtCtrlOperations* pMemMgmtCtrlOperations;
} StdVideoEncodeH264SliceHeader;
@@ -91,4 +94,4 @@ typedef struct StdVideoEncodeH264SliceHeader {
}
#endif
-#endif // VULKAN_VIDEO_CODEC_H264STD_ENCODE_H_
+#endif
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std.h
index 185b550412..009133abfd 100644
--- a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std.h
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std.h
@@ -1,341 +1,360 @@
+#ifndef VULKAN_VIDEO_CODEC_H265STD_H_
+#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
+
/*
-** Copyright (c) 2019-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
-#ifndef VULKAN_VIDEO_CODEC_H265STD_H_
-#define VULKAN_VIDEO_CODEC_H265STD_H_ 1
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
#ifdef __cplusplus
extern "C" {
#endif
-#include "vk_video/vulkan_video_codecs_common.h"
-// Vulkan 0.5 version number WIP
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5 VK_MAKE_VIDEO_STD_VERSION(0, 5, 0) // Patch version should always be set to 0
-// Format must be in the form XX.XX where the first two digits are the major and the second two, the minor.
-#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_5
+#define vulkan_video_codec_h265std 1
+// Vulkan 0.5 version number WIP
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_9_5 VK_MAKE_VIDEO_STD_VERSION(0, 9, 5) // Patch version should always be set to 0
+
+#define STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE 7
+#define STD_VIDEO_H265_CPB_CNT_LIST_SIZE 32
+#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS 6
+#define STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS 16
+#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS 6
+#define STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS 64
+#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS 6
+#define STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS 64
+#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS 2
+#define STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS 64
+#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE 3
+#define STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE 128
+#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE 19
+#define STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE 21
+#define STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE 6
+#define VK_STD_VULKAN_VIDEO_CODEC_H265_SPEC_VERSION VK_STD_VULKAN_VIDEO_CODEC_H265_API_VERSION_0_9_5
#define VK_STD_VULKAN_VIDEO_CODEC_H265_EXTENSION_NAME "VK_STD_vulkan_video_codec_h265"
typedef enum StdVideoH265ChromaFormatIdc {
- std_video_h265_chroma_format_idc_monochrome = 0,
- std_video_h265_chroma_format_idc_420 = 1,
- std_video_h265_chroma_format_idc_422 = 2,
- std_video_h265_chroma_format_idc_444 = 3,
+ STD_VIDEO_H265_CHROMA_FORMAT_IDC_MONOCHROME = 0,
+ STD_VIDEO_H265_CHROMA_FORMAT_IDC_420 = 1,
+ STD_VIDEO_H265_CHROMA_FORMAT_IDC_422 = 2,
+ STD_VIDEO_H265_CHROMA_FORMAT_IDC_444 = 3,
+ STD_VIDEO_H265_CHROMA_FORMAT_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H265_CHROMA_FORMAT_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH265ChromaFormatIdc;
typedef enum StdVideoH265ProfileIdc {
- std_video_h265_profile_idc_main = 1,
- std_video_h265_profile_idc_main_10 = 2,
- std_video_h265_profile_idc_main_still_picture = 3,
- std_video_h265_profile_idc_format_range_extensions = 4,
- std_video_h265_profile_idc_scc_extensions = 9,
- std_video_h265_profile_idc_invalid = 0x7FFFFFFF
+ STD_VIDEO_H265_PROFILE_IDC_MAIN = 1,
+ STD_VIDEO_H265_PROFILE_IDC_MAIN_10 = 2,
+ STD_VIDEO_H265_PROFILE_IDC_MAIN_STILL_PICTURE = 3,
+ STD_VIDEO_H265_PROFILE_IDC_FORMAT_RANGE_EXTENSIONS = 4,
+ STD_VIDEO_H265_PROFILE_IDC_SCC_EXTENSIONS = 9,
+ STD_VIDEO_H265_PROFILE_IDC_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H265_PROFILE_IDC_MAX_ENUM = 0x7FFFFFFF
} StdVideoH265ProfileIdc;
typedef enum StdVideoH265Level {
- std_video_h265_level_1_0 = 0,
- std_video_h265_level_2_0 = 1,
- std_video_h265_level_2_1 = 2,
- std_video_h265_level_3_0 = 3,
- std_video_h265_level_3_1 = 4,
- std_video_h265_level_4_0 = 5,
- std_video_h265_level_4_1 = 6,
- std_video_h265_level_5_0 = 7,
- std_video_h265_level_5_1 = 8,
- std_video_h265_level_5_2 = 9,
- std_video_h265_level_6_0 = 10,
- std_video_h265_level_6_1 = 11,
- std_video_h265_level_6_2 = 12,
- std_video_h265_level_invalid = 0x7FFFFFFF
+ STD_VIDEO_H265_LEVEL_1_0 = 0,
+ STD_VIDEO_H265_LEVEL_2_0 = 1,
+ STD_VIDEO_H265_LEVEL_2_1 = 2,
+ STD_VIDEO_H265_LEVEL_3_0 = 3,
+ STD_VIDEO_H265_LEVEL_3_1 = 4,
+ STD_VIDEO_H265_LEVEL_4_0 = 5,
+ STD_VIDEO_H265_LEVEL_4_1 = 6,
+ STD_VIDEO_H265_LEVEL_5_0 = 7,
+ STD_VIDEO_H265_LEVEL_5_1 = 8,
+ STD_VIDEO_H265_LEVEL_5_2 = 9,
+ STD_VIDEO_H265_LEVEL_6_0 = 10,
+ STD_VIDEO_H265_LEVEL_6_1 = 11,
+ STD_VIDEO_H265_LEVEL_6_2 = 12,
+ STD_VIDEO_H265_LEVEL_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H265_LEVEL_MAX_ENUM = 0x7FFFFFFF
} StdVideoH265Level;
-
-typedef struct StdVideoH265DecPicBufMgr
-{
- uint32_t max_latency_increase_plus1[7];
- uint8_t max_dec_pic_buffering_minus1[7];
- uint8_t max_num_reorder_pics[7];
+typedef enum StdVideoH265SliceType {
+ STD_VIDEO_H265_SLICE_TYPE_B = 0,
+ STD_VIDEO_H265_SLICE_TYPE_P = 1,
+ STD_VIDEO_H265_SLICE_TYPE_I = 2,
+ STD_VIDEO_H265_SLICE_TYPE_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H265_SLICE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} StdVideoH265SliceType;
+
+typedef enum StdVideoH265PictureType {
+ STD_VIDEO_H265_PICTURE_TYPE_P = 0,
+ STD_VIDEO_H265_PICTURE_TYPE_B = 1,
+ STD_VIDEO_H265_PICTURE_TYPE_I = 2,
+ STD_VIDEO_H265_PICTURE_TYPE_IDR = 3,
+ STD_VIDEO_H265_PICTURE_TYPE_INVALID = 0x7FFFFFFF,
+ STD_VIDEO_H265_PICTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
+} StdVideoH265PictureType;
+typedef struct StdVideoH265DecPicBufMgr {
+ uint32_t max_latency_increase_plus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+ uint8_t max_dec_pic_buffering_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+ uint8_t max_num_reorder_pics[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
} StdVideoH265DecPicBufMgr;
typedef struct StdVideoH265SubLayerHrdParameters {
- uint32_t bit_rate_value_minus1[32];
- uint32_t cpb_size_value_minus1[32];
- uint32_t cpb_size_du_value_minus1[32];
- uint32_t bit_rate_du_value_minus1[32];
- uint32_t cbr_flag; // each bit represents a range of CpbCounts (bit 0 - cpb_cnt_minus1) per sub-layer
+ uint32_t bit_rate_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+ uint32_t cpb_size_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+ uint32_t cpb_size_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+ uint32_t bit_rate_du_value_minus1[STD_VIDEO_H265_CPB_CNT_LIST_SIZE];
+ uint32_t cbr_flag;
} StdVideoH265SubLayerHrdParameters;
typedef struct StdVideoH265HrdFlags {
- uint32_t nal_hrd_parameters_present_flag : 1;
- uint32_t vcl_hrd_parameters_present_flag : 1;
- uint32_t sub_pic_hrd_params_present_flag : 1;
- uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
- uint8_t fixed_pic_rate_general_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
- uint8_t fixed_pic_rate_within_cvs_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
- uint8_t low_delay_hrd_flag; // each bit represents a sublayer, bit 0 - vps_max_sub_layers_minus1
+ uint32_t nal_hrd_parameters_present_flag : 1;
+ uint32_t vcl_hrd_parameters_present_flag : 1;
+ uint32_t sub_pic_hrd_params_present_flag : 1;
+ uint32_t sub_pic_cpb_params_in_pic_timing_sei_flag : 1;
+ uint32_t fixed_pic_rate_general_flag : 8;
+ uint32_t fixed_pic_rate_within_cvs_flag : 8;
+ uint32_t low_delay_hrd_flag : 8;
} StdVideoH265HrdFlags;
typedef struct StdVideoH265HrdParameters {
- uint8_t tick_divisor_minus2;
- uint8_t du_cpb_removal_delay_increment_length_minus1;
- uint8_t dpb_output_delay_du_length_minus1;
- uint8_t bit_rate_scale;
- uint8_t cpb_size_scale;
- uint8_t cpb_size_du_scale;
- uint8_t initial_cpb_removal_delay_length_minus1;
- uint8_t au_cpb_removal_delay_length_minus1;
- uint8_t dpb_output_delay_length_minus1;
- uint8_t cpb_cnt_minus1[7];
- uint16_t elemental_duration_in_tc_minus1[7];
- StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersNal[7];
- StdVideoH265SubLayerHrdParameters* SubLayerHrdParametersVcl[7];
- StdVideoH265HrdFlags flags;
+ uint8_t tick_divisor_minus2;
+ uint8_t du_cpb_removal_delay_increment_length_minus1;
+ uint8_t dpb_output_delay_du_length_minus1;
+ uint8_t bit_rate_scale;
+ uint8_t cpb_size_scale;
+ uint8_t cpb_size_du_scale;
+ uint8_t initial_cpb_removal_delay_length_minus1;
+ uint8_t au_cpb_removal_delay_length_minus1;
+ uint8_t dpb_output_delay_length_minus1;
+ uint8_t cpb_cnt_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+ uint16_t elemental_duration_in_tc_minus1[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+ StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersNal[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+ StdVideoH265SubLayerHrdParameters* pSubLayerHrdParametersVcl[STD_VIDEO_H265_SUBLAYERS_MINUS1_LIST_SIZE];
+ StdVideoH265HrdFlags flags;
} StdVideoH265HrdParameters;
typedef struct StdVideoH265VpsFlags {
- uint32_t vps_temporal_id_nesting_flag : 1;
- uint32_t vps_sub_layer_ordering_info_present_flag : 1;
- uint32_t vps_timing_info_present_flag : 1;
- uint32_t vps_poc_proportional_to_timing_flag : 1;
+ uint32_t vps_temporal_id_nesting_flag : 1;
+ uint32_t vps_sub_layer_ordering_info_present_flag : 1;
+ uint32_t vps_timing_info_present_flag : 1;
+ uint32_t vps_poc_proportional_to_timing_flag : 1;
} StdVideoH265VpsFlags;
-typedef struct StdVideoH265VideoParameterSet
-{
- uint8_t vps_video_parameter_set_id;
- uint8_t vps_max_sub_layers_minus1;
- uint32_t vps_num_units_in_tick;
- uint32_t vps_time_scale;
- uint32_t vps_num_ticks_poc_diff_one_minus1;
- StdVideoH265DecPicBufMgr* pDecPicBufMgr;
- StdVideoH265HrdParameters* hrd_parameters;
- StdVideoH265VpsFlags flags;
+typedef struct StdVideoH265VideoParameterSet {
+ uint8_t vps_video_parameter_set_id;
+ uint8_t vps_max_sub_layers_minus1;
+ uint32_t vps_num_units_in_tick;
+ uint32_t vps_time_scale;
+ uint32_t vps_num_ticks_poc_diff_one_minus1;
+ StdVideoH265DecPicBufMgr* pDecPicBufMgr;
+ StdVideoH265HrdParameters* pHrdParameters;
+ StdVideoH265VpsFlags flags;
} StdVideoH265VideoParameterSet;
-typedef struct StdVideoH265ScalingLists
-{
- uint8_t ScalingList4x4[6][16]; // ScalingList[ 0 ][ MatrixID ][ i ] (sizeID = 0)
- uint8_t ScalingList8x8[6][64]; // ScalingList[ 1 ][ MatrixID ][ i ] (sizeID = 1)
- uint8_t ScalingList16x16[6][64]; // ScalingList[ 2 ][ MatrixID ][ i ] (sizeID = 2)
- uint8_t ScalingList32x32[2][64]; // ScalingList[ 3 ][ MatrixID ][ i ] (sizeID = 3)
- uint8_t ScalingListDCCoef16x16[6]; // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8, sizeID = 2
- uint8_t ScalingListDCCoef32x32[2]; // scaling_list_dc_coef_minus8[ sizeID - 2 ][ matrixID ] + 8. sizeID = 3
+typedef struct StdVideoH265ScalingLists {
+ uint8_t ScalingList4x4[STD_VIDEO_H265_SCALING_LIST_4X4_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_4X4_NUM_ELEMENTS];
+ uint8_t ScalingList8x8[STD_VIDEO_H265_SCALING_LIST_8X8_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_8X8_NUM_ELEMENTS];
+ uint8_t ScalingList16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_16X16_NUM_ELEMENTS];
+ uint8_t ScalingList32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS][STD_VIDEO_H265_SCALING_LIST_32X32_NUM_ELEMENTS];
+ uint8_t ScalingListDCCoef16x16[STD_VIDEO_H265_SCALING_LIST_16X16_NUM_LISTS];
+ uint8_t ScalingListDCCoef32x32[STD_VIDEO_H265_SCALING_LIST_32X32_NUM_LISTS];
} StdVideoH265ScalingLists;
typedef struct StdVideoH265SpsVuiFlags {
- uint32_t aspect_ratio_info_present_flag : 1;
- uint32_t overscan_info_present_flag : 1;
- uint32_t overscan_appropriate_flag : 1;
- uint32_t video_signal_type_present_flag : 1;
- uint32_t video_full_range_flag : 1;
- uint32_t colour_description_present_flag : 1;
- uint32_t chroma_loc_info_present_flag : 1;
- uint32_t neutral_chroma_indication_flag : 1;
- uint32_t field_seq_flag : 1;
- uint32_t frame_field_info_present_flag : 1;
- uint32_t default_display_window_flag : 1;
- uint32_t vui_timing_info_present_flag : 1;
- uint32_t vui_poc_proportional_to_timing_flag : 1;
- uint32_t vui_hrd_parameters_present_flag : 1;
- uint32_t bitstream_restriction_flag : 1;
- uint32_t tiles_fixed_structure_flag : 1;
- uint32_t motion_vectors_over_pic_boundaries_flag : 1;
- uint32_t restricted_ref_pic_lists_flag : 1;
+ uint32_t aspect_ratio_info_present_flag : 1;
+ uint32_t overscan_info_present_flag : 1;
+ uint32_t overscan_appropriate_flag : 1;
+ uint32_t video_signal_type_present_flag : 1;
+ uint32_t video_full_range_flag : 1;
+ uint32_t colour_description_present_flag : 1;
+ uint32_t chroma_loc_info_present_flag : 1;
+ uint32_t neutral_chroma_indication_flag : 1;
+ uint32_t field_seq_flag : 1;
+ uint32_t frame_field_info_present_flag : 1;
+ uint32_t default_display_window_flag : 1;
+ uint32_t vui_timing_info_present_flag : 1;
+ uint32_t vui_poc_proportional_to_timing_flag : 1;
+ uint32_t vui_hrd_parameters_present_flag : 1;
+ uint32_t bitstream_restriction_flag : 1;
+ uint32_t tiles_fixed_structure_flag : 1;
+ uint32_t motion_vectors_over_pic_boundaries_flag : 1;
+ uint32_t restricted_ref_pic_lists_flag : 1;
} StdVideoH265SpsVuiFlags;
typedef struct StdVideoH265SequenceParameterSetVui {
- uint8_t aspect_ratio_idc;
- uint16_t sar_width;
- uint16_t sar_height;
- uint8_t video_format;
- uint8_t colour_primaries;
- uint8_t transfer_characteristics;
- uint8_t matrix_coeffs;
- uint8_t chroma_sample_loc_type_top_field;
- uint8_t chroma_sample_loc_type_bottom_field;
- uint16_t def_disp_win_left_offset;
- uint16_t def_disp_win_right_offset;
- uint16_t def_disp_win_top_offset;
- uint16_t def_disp_win_bottom_offset;
- uint32_t vui_num_units_in_tick;
- uint32_t vui_time_scale;
- uint32_t vui_num_ticks_poc_diff_one_minus1;
- StdVideoH265HrdParameters* hrd_parameters;
- uint16_t min_spatial_segmentation_idc;
- uint8_t max_bytes_per_pic_denom;
- uint8_t max_bits_per_min_cu_denom;
- uint8_t log2_max_mv_length_horizontal;
- uint8_t log2_max_mv_length_vertical;
- StdVideoH265SpsVuiFlags flags;
+ uint8_t aspect_ratio_idc;
+ uint16_t sar_width;
+ uint16_t sar_height;
+ uint8_t video_format;
+ uint8_t colour_primaries;
+ uint8_t transfer_characteristics;
+ uint8_t matrix_coeffs;
+ uint8_t chroma_sample_loc_type_top_field;
+ uint8_t chroma_sample_loc_type_bottom_field;
+ uint16_t def_disp_win_left_offset;
+ uint16_t def_disp_win_right_offset;
+ uint16_t def_disp_win_top_offset;
+ uint16_t def_disp_win_bottom_offset;
+ uint32_t vui_num_units_in_tick;
+ uint32_t vui_time_scale;
+ uint32_t vui_num_ticks_poc_diff_one_minus1;
+ StdVideoH265HrdParameters* pHrdParameters;
+ uint16_t min_spatial_segmentation_idc;
+ uint8_t max_bytes_per_pic_denom;
+ uint8_t max_bits_per_min_cu_denom;
+ uint8_t log2_max_mv_length_horizontal;
+ uint8_t log2_max_mv_length_vertical;
+ StdVideoH265SpsVuiFlags flags;
} StdVideoH265SequenceParameterSetVui;
-typedef struct StdVideoH265PredictorPaletteEntries
-{
- uint16_t PredictorPaletteEntries[3][128];
+typedef struct StdVideoH265PredictorPaletteEntries {
+ uint16_t PredictorPaletteEntries[STD_VIDEO_H265_PREDICTOR_PALETTE_COMPONENTS_LIST_SIZE][STD_VIDEO_H265_PREDICTOR_PALETTE_COMP_ENTRIES_LIST_SIZE];
} StdVideoH265PredictorPaletteEntries;
-
typedef struct StdVideoH265SpsFlags {
- uint32_t sps_temporal_id_nesting_flag : 1;
- uint32_t separate_colour_plane_flag : 1;
- uint32_t scaling_list_enabled_flag : 1;
- uint32_t sps_scaling_list_data_present_flag : 1;
- uint32_t amp_enabled_flag : 1;
- uint32_t sample_adaptive_offset_enabled_flag : 1;
- uint32_t pcm_enabled_flag : 1;
- uint32_t pcm_loop_filter_disabled_flag : 1;
- uint32_t long_term_ref_pics_present_flag : 1;
- uint32_t sps_temporal_mvp_enabled_flag : 1;
- uint32_t strong_intra_smoothing_enabled_flag : 1;
- uint32_t vui_parameters_present_flag : 1;
- uint32_t sps_extension_present_flag : 1;
- uint32_t sps_range_extension_flag : 1;
-
- // extension SPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set
- uint32_t transform_skip_rotation_enabled_flag : 1;
- uint32_t transform_skip_context_enabled_flag : 1;
- uint32_t implicit_rdpcm_enabled_flag : 1;
- uint32_t explicit_rdpcm_enabled_flag : 1;
- uint32_t extended_precision_processing_flag : 1;
- uint32_t intra_smoothing_disabled_flag : 1;
- uint32_t high_precision_offsets_enabled_flag : 1;
- uint32_t persistent_rice_adaptation_enabled_flag : 1;
- uint32_t cabac_bypass_alignment_enabled_flag : 1;
-
- // extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
- uint32_t sps_curr_pic_ref_enabled_flag : 1;
- uint32_t palette_mode_enabled_flag : 1;
- uint32_t sps_palette_predictor_initializer_present_flag : 1;
- uint32_t intra_boundary_filtering_disabled_flag : 1;
+ uint32_t sps_temporal_id_nesting_flag : 1;
+ uint32_t separate_colour_plane_flag : 1;
+ uint32_t scaling_list_enabled_flag : 1;
+ uint32_t sps_scaling_list_data_present_flag : 1;
+ uint32_t amp_enabled_flag : 1;
+ uint32_t sample_adaptive_offset_enabled_flag : 1;
+ uint32_t pcm_enabled_flag : 1;
+ uint32_t pcm_loop_filter_disabled_flag : 1;
+ uint32_t long_term_ref_pics_present_flag : 1;
+ uint32_t sps_temporal_mvp_enabled_flag : 1;
+ uint32_t strong_intra_smoothing_enabled_flag : 1;
+ uint32_t vui_parameters_present_flag : 1;
+ uint32_t sps_extension_present_flag : 1;
+ uint32_t sps_range_extension_flag : 1;
+ uint32_t transform_skip_rotation_enabled_flag : 1;
+ uint32_t transform_skip_context_enabled_flag : 1;
+ uint32_t implicit_rdpcm_enabled_flag : 1;
+ uint32_t explicit_rdpcm_enabled_flag : 1;
+ uint32_t extended_precision_processing_flag : 1;
+ uint32_t intra_smoothing_disabled_flag : 1;
+ uint32_t high_precision_offsets_enabled_flag : 1;
+ uint32_t persistent_rice_adaptation_enabled_flag : 1;
+ uint32_t cabac_bypass_alignment_enabled_flag : 1;
+ uint32_t sps_curr_pic_ref_enabled_flag : 1;
+ uint32_t palette_mode_enabled_flag : 1;
+ uint32_t sps_palette_predictor_initializer_present_flag : 1;
+ uint32_t intra_boundary_filtering_disabled_flag : 1;
} StdVideoH265SpsFlags;
-typedef struct StdVideoH265SequenceParameterSet
-{
- StdVideoH265ProfileIdc profile_idc;
- StdVideoH265Level level_idc;
- uint32_t pic_width_in_luma_samples;
- uint32_t pic_height_in_luma_samples;
- uint8_t sps_video_parameter_set_id;
- uint8_t sps_max_sub_layers_minus1;
- uint8_t sps_seq_parameter_set_id;
- uint8_t chroma_format_idc;
- uint8_t bit_depth_luma_minus8;
- uint8_t bit_depth_chroma_minus8;
- uint8_t log2_max_pic_order_cnt_lsb_minus4;
- uint8_t sps_max_dec_pic_buffering_minus1;
- uint8_t log2_min_luma_coding_block_size_minus3;
- uint8_t log2_diff_max_min_luma_coding_block_size;
- uint8_t log2_min_luma_transform_block_size_minus2;
- uint8_t log2_diff_max_min_luma_transform_block_size;
- uint8_t max_transform_hierarchy_depth_inter;
- uint8_t max_transform_hierarchy_depth_intra;
- uint8_t num_short_term_ref_pic_sets;
- uint8_t num_long_term_ref_pics_sps;
- uint8_t pcm_sample_bit_depth_luma_minus1;
- uint8_t pcm_sample_bit_depth_chroma_minus1;
- uint8_t log2_min_pcm_luma_coding_block_size_minus3;
- uint8_t log2_diff_max_min_pcm_luma_coding_block_size;
- uint32_t conf_win_left_offset;
- uint32_t conf_win_right_offset;
- uint32_t conf_win_top_offset;
- uint32_t conf_win_bottom_offset;
- StdVideoH265DecPicBufMgr* pDecPicBufMgr;
- StdVideoH265SpsFlags flags;
- StdVideoH265ScalingLists* pScalingLists; // Must be a valid pointer if sps_scaling_list_data_present_flag is set
- StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui; // Must be a valid pointer if StdVideoH265SpsFlags:vui_parameters_present_flag is set palette_max_size;
-
- // extension SPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
- uint8_t palette_max_size;
- uint8_t delta_palette_max_predictor_size;
- uint8_t motion_vector_resolution_control_idc;
- uint8_t sps_num_palette_predictor_initializer_minus1;
- StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; // Must be a valid pointer if sps_palette_predictor_initializer_present_flag is set
+typedef struct StdVideoH265SequenceParameterSet {
+ StdVideoH265ProfileIdc profile_idc;
+ StdVideoH265Level level_idc;
+ uint32_t pic_width_in_luma_samples;
+ uint32_t pic_height_in_luma_samples;
+ uint8_t sps_video_parameter_set_id;
+ uint8_t sps_max_sub_layers_minus1;
+ uint8_t sps_seq_parameter_set_id;
+ uint8_t chroma_format_idc;
+ uint8_t bit_depth_luma_minus8;
+ uint8_t bit_depth_chroma_minus8;
+ uint8_t log2_max_pic_order_cnt_lsb_minus4;
+ uint8_t sps_max_dec_pic_buffering_minus1;
+ uint8_t log2_min_luma_coding_block_size_minus3;
+ uint8_t log2_diff_max_min_luma_coding_block_size;
+ uint8_t log2_min_luma_transform_block_size_minus2;
+ uint8_t log2_diff_max_min_luma_transform_block_size;
+ uint8_t max_transform_hierarchy_depth_inter;
+ uint8_t max_transform_hierarchy_depth_intra;
+ uint8_t num_short_term_ref_pic_sets;
+ uint8_t num_long_term_ref_pics_sps;
+ uint8_t pcm_sample_bit_depth_luma_minus1;
+ uint8_t pcm_sample_bit_depth_chroma_minus1;
+ uint8_t log2_min_pcm_luma_coding_block_size_minus3;
+ uint8_t log2_diff_max_min_pcm_luma_coding_block_size;
+ uint32_t conf_win_left_offset;
+ uint32_t conf_win_right_offset;
+ uint32_t conf_win_top_offset;
+ uint32_t conf_win_bottom_offset;
+ StdVideoH265DecPicBufMgr* pDecPicBufMgr;
+ StdVideoH265SpsFlags flags;
+ StdVideoH265ScalingLists* pScalingLists;
+ StdVideoH265SequenceParameterSetVui* pSequenceParameterSetVui;
+ uint8_t palette_max_size;
+ uint8_t delta_palette_max_predictor_size;
+ uint8_t motion_vector_resolution_control_idc;
+ uint8_t sps_num_palette_predictor_initializer_minus1;
+ StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;
} StdVideoH265SequenceParameterSet;
-
typedef struct StdVideoH265PpsFlags {
- uint32_t dependent_slice_segments_enabled_flag : 1;
- uint32_t output_flag_present_flag : 1;
- uint32_t sign_data_hiding_enabled_flag : 1;
- uint32_t cabac_init_present_flag : 1;
- uint32_t constrained_intra_pred_flag : 1;
- uint32_t transform_skip_enabled_flag : 1;
- uint32_t cu_qp_delta_enabled_flag : 1;
- uint32_t pps_slice_chroma_qp_offsets_present_flag : 1;
- uint32_t weighted_pred_flag : 1;
- uint32_t weighted_bipred_flag : 1;
- uint32_t transquant_bypass_enabled_flag : 1;
- uint32_t tiles_enabled_flag : 1;
- uint32_t entropy_coding_sync_enabled_flag : 1;
- uint32_t uniform_spacing_flag : 1;
- uint32_t loop_filter_across_tiles_enabled_flag : 1;
- uint32_t pps_loop_filter_across_slices_enabled_flag : 1;
- uint32_t deblocking_filter_control_present_flag : 1;
- uint32_t deblocking_filter_override_enabled_flag : 1;
- uint32_t pps_deblocking_filter_disabled_flag : 1;
- uint32_t pps_scaling_list_data_present_flag : 1;
- uint32_t lists_modification_present_flag : 1;
- uint32_t slice_segment_header_extension_present_flag : 1;
- uint32_t pps_extension_present_flag : 1;
-
- // extension PPS flags, valid when std_video_h265_profile_idc_format_range_extensions is set
- uint32_t cross_component_prediction_enabled_flag : 1;
- uint32_t chroma_qp_offset_list_enabled_flag : 1;
-
- // extension PPS flags, valid when std_video_h265_profile_idc_scc_extensions is set
- uint32_t pps_curr_pic_ref_enabled_flag : 1;
- uint32_t residual_adaptive_colour_transform_enabled_flag : 1;
- uint32_t pps_slice_act_qp_offsets_present_flag : 1;
- uint32_t pps_palette_predictor_initializer_present_flag : 1;
- uint32_t monochrome_palette_flag : 1;
- uint32_t pps_range_extension_flag : 1;
+ uint32_t dependent_slice_segments_enabled_flag : 1;
+ uint32_t output_flag_present_flag : 1;
+ uint32_t sign_data_hiding_enabled_flag : 1;
+ uint32_t cabac_init_present_flag : 1;
+ uint32_t constrained_intra_pred_flag : 1;
+ uint32_t transform_skip_enabled_flag : 1;
+ uint32_t cu_qp_delta_enabled_flag : 1;
+ uint32_t pps_slice_chroma_qp_offsets_present_flag : 1;
+ uint32_t weighted_pred_flag : 1;
+ uint32_t weighted_bipred_flag : 1;
+ uint32_t transquant_bypass_enabled_flag : 1;
+ uint32_t tiles_enabled_flag : 1;
+ uint32_t entropy_coding_sync_enabled_flag : 1;
+ uint32_t uniform_spacing_flag : 1;
+ uint32_t loop_filter_across_tiles_enabled_flag : 1;
+ uint32_t pps_loop_filter_across_slices_enabled_flag : 1;
+ uint32_t deblocking_filter_control_present_flag : 1;
+ uint32_t deblocking_filter_override_enabled_flag : 1;
+ uint32_t pps_deblocking_filter_disabled_flag : 1;
+ uint32_t pps_scaling_list_data_present_flag : 1;
+ uint32_t lists_modification_present_flag : 1;
+ uint32_t slice_segment_header_extension_present_flag : 1;
+ uint32_t pps_extension_present_flag : 1;
+ uint32_t cross_component_prediction_enabled_flag : 1;
+ uint32_t chroma_qp_offset_list_enabled_flag : 1;
+ uint32_t pps_curr_pic_ref_enabled_flag : 1;
+ uint32_t residual_adaptive_colour_transform_enabled_flag : 1;
+ uint32_t pps_slice_act_qp_offsets_present_flag : 1;
+ uint32_t pps_palette_predictor_initializer_present_flag : 1;
+ uint32_t monochrome_palette_flag : 1;
+ uint32_t pps_range_extension_flag : 1;
} StdVideoH265PpsFlags;
-typedef struct StdVideoH265PictureParameterSet
-{
- uint8_t pps_pic_parameter_set_id;
- uint8_t pps_seq_parameter_set_id;
- uint8_t num_extra_slice_header_bits;
- uint8_t num_ref_idx_l0_default_active_minus1;
- uint8_t num_ref_idx_l1_default_active_minus1;
- int8_t init_qp_minus26;
- uint8_t diff_cu_qp_delta_depth;
- int8_t pps_cb_qp_offset;
- int8_t pps_cr_qp_offset;
- uint8_t num_tile_columns_minus1;
- uint8_t num_tile_rows_minus1;
- uint16_t column_width_minus1[19];
- uint16_t row_height_minus1[21];
- int8_t pps_beta_offset_div2;
- int8_t pps_tc_offset_div2;
- uint8_t log2_parallel_merge_level_minus2;
- StdVideoH265PpsFlags flags;
- StdVideoH265ScalingLists* pScalingLists; // Must be a valid pointer if pps_scaling_list_data_present_flag is set
-
- // extension PPS, valid when std_video_h265_profile_idc_format_range_extensions is set
- uint8_t log2_max_transform_skip_block_size_minus2;
- uint8_t diff_cu_chroma_qp_offset_depth;
- uint8_t chroma_qp_offset_list_len_minus1;
- int8_t cb_qp_offset_list[6];
- int8_t cr_qp_offset_list[6];
- uint8_t log2_sao_offset_scale_luma;
- uint8_t log2_sao_offset_scale_chroma;
-
- // extension PPS, valid when std_video_h265_profile_idc_scc_extensions is set
- int8_t pps_act_y_qp_offset_plus5;
- int8_t pps_act_cb_qp_offset_plus5;
- int8_t pps_act_cr_qp_offset_plus5;
- uint8_t pps_num_palette_predictor_initializer;
- uint8_t luma_bit_depth_entry_minus8;
- uint8_t chroma_bit_depth_entry_minus8;
- StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries; // Must be a valid pointer if pps_palette_predictor_initializer_present_flag is set
+typedef struct StdVideoH265PictureParameterSet {
+ uint8_t pps_pic_parameter_set_id;
+ uint8_t pps_seq_parameter_set_id;
+ uint8_t num_extra_slice_header_bits;
+ uint8_t num_ref_idx_l0_default_active_minus1;
+ uint8_t num_ref_idx_l1_default_active_minus1;
+ int8_t init_qp_minus26;
+ uint8_t diff_cu_qp_delta_depth;
+ int8_t pps_cb_qp_offset;
+ int8_t pps_cr_qp_offset;
+ uint8_t num_tile_columns_minus1;
+ uint8_t num_tile_rows_minus1;
+ uint16_t column_width_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_COLS_LIST_SIZE];
+ uint16_t row_height_minus1[STD_VIDEO_H265_CHROMA_QP_OFFSET_TILE_ROWS_LIST_SIZE];
+ int8_t pps_beta_offset_div2;
+ int8_t pps_tc_offset_div2;
+ uint8_t log2_parallel_merge_level_minus2;
+ StdVideoH265PpsFlags flags;
+ StdVideoH265ScalingLists* pScalingLists;
+ uint8_t log2_max_transform_skip_block_size_minus2;
+ uint8_t diff_cu_chroma_qp_offset_depth;
+ uint8_t chroma_qp_offset_list_len_minus1;
+ int8_t cb_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE];
+ int8_t cr_qp_offset_list[STD_VIDEO_H265_CHROMA_QP_OFFSET_LIST_SIZE];
+ uint8_t log2_sao_offset_scale_luma;
+ uint8_t log2_sao_offset_scale_chroma;
+ int8_t pps_act_y_qp_offset_plus5;
+ int8_t pps_act_cb_qp_offset_plus5;
+ int8_t pps_act_cr_qp_offset_plus5;
+ uint8_t pps_num_palette_predictor_initializer;
+ uint8_t luma_bit_depth_entry_minus8;
+ uint8_t chroma_bit_depth_entry_minus8;
+ StdVideoH265PredictorPaletteEntries* pPredictorPaletteEntries;
} StdVideoH265PictureParameterSet;
+
#ifdef __cplusplus
}
#endif
-#endif // VULKAN_VIDEO_CODEC_H265STD_H_
+#endif
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
index 4be8b5f1c8..0867952f31 100644
--- a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_decode.h
@@ -1,59 +1,60 @@
+#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
+#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
+
/*
-** Copyright (c) 2019-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
-#ifndef VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
-#define VULKAN_VIDEO_CODEC_H265STD_DECODE_H_ 1
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
#ifdef __cplusplus
extern "C" {
#endif
-#include "vk_video/vulkan_video_codec_h265std.h"
-// *************************************************
-// Video h265 Decode related parameters:
-// *************************************************
+#define vulkan_video_codec_h265std_decode 1
+#define STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE 8
typedef struct StdVideoDecodeH265PictureInfoFlags {
- uint32_t IrapPicFlag : 1;
- uint32_t IdrPicFlag : 1;
- uint32_t IsReference : 1;
- uint32_t short_term_ref_pic_set_sps_flag : 1;
+ uint32_t IrapPicFlag : 1;
+ uint32_t IdrPicFlag : 1;
+ uint32_t IsReference : 1;
+ uint32_t short_term_ref_pic_set_sps_flag : 1;
} StdVideoDecodeH265PictureInfoFlags;
typedef struct StdVideoDecodeH265PictureInfo {
- uint8_t vps_video_parameter_set_id;
- uint8_t sps_seq_parameter_set_id;
- uint8_t pps_pic_parameter_set_id;
- uint8_t num_short_term_ref_pic_sets;
- int32_t PicOrderCntVal;
- uint16_t NumBitsForSTRefPicSetInSlice; // number of bits used in st_ref_pic_set()
- //when short_term_ref_pic_set_sps_flag is 0; otherwise set to 0.
- uint8_t NumDeltaPocsOfRefRpsIdx; // NumDeltaPocs[ RefRpsIdx ] when short_term_ref_pic_set_sps_flag = 1, otherwise 0
- uint8_t RefPicSetStCurrBefore[8]; // slotIndex as used in VkVideoReferenceSlotKHR structures representing
- //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
- uint8_t RefPicSetStCurrAfter[8]; // slotIndex as used in VkVideoReferenceSlotKHR structures representing
- //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
- uint8_t RefPicSetLtCurr[8]; // slotIndex as used in VkVideoReferenceSlotKHR structures representing
- //pReferenceSlots in VkVideoDecodeInfoKHR, 0xff for invalid slotIndex
- StdVideoDecodeH265PictureInfoFlags flags;
+ uint8_t vps_video_parameter_set_id;
+ uint8_t sps_seq_parameter_set_id;
+ uint8_t pps_pic_parameter_set_id;
+ uint8_t num_short_term_ref_pic_sets;
+ int32_t PicOrderCntVal;
+ uint16_t NumBitsForSTRefPicSetInSlice;
+ uint8_t NumDeltaPocsOfRefRpsIdx;
+ uint8_t RefPicSetStCurrBefore[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE];
+ uint8_t RefPicSetStCurrAfter[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE];
+ uint8_t RefPicSetLtCurr[STD_VIDEO_DECODE_H265_REF_PIC_SET_LIST_SIZE];
+ StdVideoDecodeH265PictureInfoFlags flags;
} StdVideoDecodeH265PictureInfo;
typedef struct StdVideoDecodeH265ReferenceInfoFlags {
- uint32_t is_long_term : 1;
- uint32_t is_non_existing : 1;
+ uint32_t is_long_term : 1;
+ uint32_t is_non_existing : 1;
} StdVideoDecodeH265ReferenceInfoFlags;
typedef struct StdVideoDecodeH265ReferenceInfo {
- int32_t PicOrderCntVal;
- StdVideoDecodeH265ReferenceInfoFlags flags;
+ int32_t PicOrderCntVal;
+ StdVideoDecodeH265ReferenceInfoFlags flags;
} StdVideoDecodeH265ReferenceInfo;
+
#ifdef __cplusplus
}
#endif
-#endif // VULKAN_VIDEO_CODEC_H265STD_DECODE_H_
+#endif
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
new file mode 100644
index 0000000000..2a1fed1e56
--- /dev/null
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codec_h265std_encode.h
@@ -0,0 +1,125 @@
+#ifndef VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_
+#define VULKAN_VIDEO_CODEC_H265STD_ENCODE_H_ 1
+
+/*
+** Copyright 2015-2022 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+
+#define vulkan_video_codec_h265std_encode 1
+#define STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE 15
+#define STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE 15
+#define STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM 2
+typedef struct StdVideoEncodeH265SliceSegmentHeaderFlags {
+ uint32_t first_slice_segment_in_pic_flag : 1;
+ uint32_t no_output_of_prior_pics_flag : 1;
+ uint32_t dependent_slice_segment_flag : 1;
+ uint32_t short_term_ref_pic_set_sps_flag : 1;
+ uint32_t slice_temporal_mvp_enable_flag : 1;
+ uint32_t slice_sao_luma_flag : 1;
+ uint32_t slice_sao_chroma_flag : 1;
+ uint32_t num_ref_idx_active_override_flag : 1;
+ uint32_t mvd_l1_zero_flag : 1;
+ uint32_t cabac_init_flag : 1;
+ uint32_t slice_deblocking_filter_disable_flag : 1;
+ uint32_t collocated_from_l0_flag : 1;
+ uint32_t slice_loop_filter_across_slices_enabled_flag : 1;
+ uint32_t bLastSliceInPic : 1;
+ uint32_t reservedBits : 18;
+ uint16_t luma_weight_l0_flag;
+ uint16_t chroma_weight_l0_flag;
+ uint16_t luma_weight_l1_flag;
+ uint16_t chroma_weight_l1_flag;
+} StdVideoEncodeH265SliceSegmentHeaderFlags;
+
+typedef struct StdVideoEncodeH265SliceSegmentHeader {
+ StdVideoH265SliceType slice_type;
+ uint8_t slice_pic_parameter_set_id;
+ uint8_t num_short_term_ref_pic_sets;
+ uint32_t slice_segment_address;
+ uint8_t short_term_ref_pic_set_idx;
+ uint8_t num_long_term_sps;
+ uint8_t num_long_term_pics;
+ uint8_t collocated_ref_idx;
+ uint8_t num_ref_idx_l0_active_minus1;
+ uint8_t num_ref_idx_l1_active_minus1;
+ uint8_t luma_log2_weight_denom;
+ int8_t delta_chroma_log2_weight_denom;
+ int8_t delta_luma_weight_l0[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+ int8_t luma_offset_l0[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+ int8_t delta_chroma_weight_l0[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+ int8_t delta_chroma_offset_l0[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+ int8_t delta_luma_weight_l1[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+ int8_t luma_offset_l1[STD_VIDEO_ENCODE_H265_LUMA_LIST_SIZE];
+ int8_t delta_chroma_weight_l1[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+ int8_t delta_chroma_offset_l1[STD_VIDEO_ENCODE_H265_CHROMA_LIST_SIZE][STD_VIDEO_ENCODE_H265_CHROMA_LISTS_NUM];
+ uint8_t MaxNumMergeCand;
+ int8_t slice_qp_delta;
+ int8_t slice_cb_qp_offset;
+ int8_t slice_cr_qp_offset;
+ int8_t slice_beta_offset_div2;
+ int8_t slice_tc_offset_div2;
+ int8_t slice_act_y_qp_offset;
+ int8_t slice_act_cb_qp_offset;
+ int8_t slice_act_cr_qp_offset;
+ StdVideoEncodeH265SliceSegmentHeaderFlags flags;
+} StdVideoEncodeH265SliceSegmentHeader;
+
+typedef struct StdVideoEncodeH265ReferenceModificationFlags {
+ uint32_t ref_pic_list_modification_flag_l0 : 1;
+ uint32_t ref_pic_list_modification_flag_l1 : 1;
+} StdVideoEncodeH265ReferenceModificationFlags;
+
+typedef struct StdVideoEncodeH265ReferenceModifications {
+ StdVideoEncodeH265ReferenceModificationFlags flags;
+ uint8_t referenceList0ModificationsCount;
+ uint8_t* pReferenceList0Modifications;
+ uint8_t referenceList1ModificationsCount;
+ uint8_t* pReferenceList1Modifications;
+} StdVideoEncodeH265ReferenceModifications;
+
+typedef struct StdVideoEncodeH265PictureInfoFlags {
+ uint32_t is_reference_flag : 1;
+ uint32_t IrapPicFlag : 1;
+ uint32_t long_term_flag : 1;
+} StdVideoEncodeH265PictureInfoFlags;
+
+typedef struct StdVideoEncodeH265PictureInfo {
+ StdVideoH265PictureType PictureType;
+ uint8_t sps_video_parameter_set_id;
+ uint8_t pps_seq_parameter_set_id;
+ int32_t PicOrderCntVal;
+ uint8_t TemporalId;
+ StdVideoEncodeH265PictureInfoFlags flags;
+} StdVideoEncodeH265PictureInfo;
+
+typedef struct StdVideoEncodeH265ReferenceInfoFlags {
+ uint32_t is_long_term : 1;
+ uint32_t isUsedFlag : 1;
+} StdVideoEncodeH265ReferenceInfoFlags;
+
+typedef struct StdVideoEncodeH265ReferenceInfo {
+ int32_t PicOrderCntVal;
+ uint8_t TemporalId;
+ StdVideoEncodeH265ReferenceInfoFlags flags;
+} StdVideoEncodeH265ReferenceInfo;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
diff --git a/thirdparty/vulkan/include/vk_video/vulkan_video_codecs_common.h b/thirdparty/vulkan/include/vk_video/vulkan_video_codecs_common.h
index 8cc227a636..1e498265e1 100644
--- a/thirdparty/vulkan/include/vk_video/vulkan_video_codecs_common.h
+++ b/thirdparty/vulkan/include/vk_video/vulkan_video_codecs_common.h
@@ -1,21 +1,31 @@
+#ifndef VULKAN_VIDEO_CODECS_COMMON_H_
+#define VULKAN_VIDEO_CODECS_COMMON_H_ 1
+
/*
-** Copyright (c) 2019-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
-#ifndef VULKAN_VIDEO_CODEC_COMMON_H_
-#define VULKAN_VIDEO_CODEC_COMMON_H_ 1
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
+
#ifdef __cplusplus
extern "C" {
#endif
+
+
+#define vulkan_video_codecs_common 1
#define VK_MAKE_VIDEO_STD_VERSION(major, minor, patch) \
((((uint32_t)(major)) << 22) | (((uint32_t)(minor)) << 12) | ((uint32_t)(patch)))
+
#ifdef __cplusplus
}
#endif
-#endif // VULKAN_VIDEO_CODEC_COMMON_H_
+#endif
diff --git a/thirdparty/vulkan/include/vulkan/vk_icd.h b/thirdparty/vulkan/include/vulkan/vk_icd.h
index ae006d06d1..41989ee354 100644
--- a/thirdparty/vulkan/include/vulkan/vk_icd.h
+++ b/thirdparty/vulkan/include/vulkan/vk_icd.h
@@ -33,7 +33,7 @@
// Version 2 - Add Loader/ICD Interface version negotiation
// via vk_icdNegotiateLoaderICDInterfaceVersion.
// Version 3 - Add ICD creation/destruction of KHR_surface objects.
-// Version 4 - Add unknown physical device extension qyering via
+// Version 4 - Add unknown physical device extension querying via
// vk_icdGetPhysicalDeviceProcAddr.
// Version 5 - Tells ICDs that the loader is now paying attention to the
// application version of Vulkan passed into the ApplicationInfo
diff --git a/thirdparty/vulkan/include/vulkan/vk_platform.h b/thirdparty/vulkan/include/vulkan/vk_platform.h
index 18b913abc6..3ff8c5d146 100644
--- a/thirdparty/vulkan/include/vulkan/vk_platform.h
+++ b/thirdparty/vulkan/include/vulkan/vk_platform.h
@@ -2,7 +2,7 @@
// File: vk_platform.h
//
/*
-** Copyright 2014-2021 The Khronos Group Inc.
+** Copyright 2014-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
@@ -42,7 +42,7 @@ extern "C"
#define VKAPI_CALL __stdcall
#define VKAPI_PTR VKAPI_CALL
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH < 7
- #error "Vulkan isn't supported for the 'armeabi' NDK ABI"
+ #error "Vulkan is not supported for the 'armeabi' NDK ABI"
#elif defined(__ANDROID__) && defined(__ARM_ARCH) && __ARM_ARCH >= 7 && defined(__ARM_32BIT_STATE)
// On Android 32-bit ARM targets, Vulkan functions use the "hardfloat"
// calling convention, i.e. float parameters are passed in registers. This
diff --git a/thirdparty/vulkan/include/vulkan/vulkan.h b/thirdparty/vulkan/include/vulkan/vulkan.h
index 3f7cdba584..004fa70952 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan.h
@@ -2,7 +2,7 @@
#define VULKAN_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan.hpp b/thirdparty/vulkan/include/vulkan/vulkan.hpp
index 63d72f4660..c67ba81d1c 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan.hpp
+++ b/thirdparty/vulkan/include/vulkan/vulkan.hpp
@@ -1,4 +1,4 @@
-// Copyright 2015-2021 The Khronos Group Inc.
+// Copyright 2015-2022 The Khronos Group Inc.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
@@ -79,6 +79,10 @@
# define VULKAN_HPP_ASSERT_ON_RESULT VULKAN_HPP_ASSERT
#endif
+#if !defined( VULKAN_HPP_STATIC_ASSERT )
+# define VULKAN_HPP_STATIC_ASSERT static_assert
+#endif
+
#if !defined( VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL )
# define VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL 1
#endif
@@ -115,7 +119,7 @@ extern "C" __declspec( dllimport ) FARPROC __stdcall GetProcAddress( HINSTANCE h
# include <span>
#endif
-static_assert( VK_HEADER_VERSION == 190, "Wrong VK_HEADER_VERSION!" );
+static_assert( VK_HEADER_VERSION == 205, "Wrong VK_HEADER_VERSION!" );
// 32-bit vulkan is not typesafe for handles, so don't allow copy constructors on this platform by default.
// To enable this feature on 32-bit platforms please define VULKAN_HPP_TYPESAFE_CONVERSION
@@ -198,7 +202,7 @@ static_assert( VK_HEADER_VERSION == 190, "Wrong VK_HEADER_VERSION!" );
# if defined( _MSC_VER ) && ( _MSC_VER <= 1800 )
# define VULKAN_HPP_NOEXCEPT
# else
-# define VULKAN_HPP_NOEXCEPT noexcept
+# define VULKAN_HPP_NOEXCEPT noexcept
# define VULKAN_HPP_HAS_NOEXCEPT 1
# if defined( VULKAN_HPP_NO_EXCEPTIONS )
# define VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS noexcept
@@ -231,8 +235,8 @@ static_assert( VK_HEADER_VERSION == 190, "Wrong VK_HEADER_VERSION!" );
#endif
#define VULKAN_HPP_STRINGIFY2( text ) #text
-#define VULKAN_HPP_STRINGIFY( text ) VULKAN_HPP_STRINGIFY2( text )
-#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE )
+#define VULKAN_HPP_STRINGIFY( text ) VULKAN_HPP_STRINGIFY2( text )
+#define VULKAN_HPP_NAMESPACE_STRING VULKAN_HPP_STRINGIFY( VULKAN_HPP_NAMESPACE )
namespace VULKAN_HPP_NAMESPACE
{
@@ -304,88 +308,26 @@ namespace VULKAN_HPP_NAMESPACE
# pragma GCC diagnostic pop
# endif
- template <size_t N>
- ArrayProxy( std::array<T, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
- {}
-
- template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxy( std::array<typename std::remove_const<T>::type, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
+ // Any type with a .data() return type implicitly convertible to T*, and a .size() return type implicitly
+ // convertible to size_t. The const version can capture temporaries, with lifetime ending at end of statement.
+ template <typename V,
+ typename std::enable_if<
+ std::is_convertible<decltype( std::declval<V>().data() ), T *>::value &&
+ std::is_convertible<decltype( std::declval<V>().size() ), std::size_t>::value>::type * = nullptr>
+ ArrayProxy( V const & v ) VULKAN_HPP_NOEXCEPT
+ : m_count( static_cast<uint32_t>( v.size() ) )
+ , m_ptr( v.data() )
{}
- template <size_t N>
- ArrayProxy( std::array<T, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
+ template <typename V,
+ typename std::enable_if<
+ std::is_convertible<decltype( std::declval<V>().data() ), T *>::value &&
+ std::is_convertible<decltype( std::declval<V>().size() ), std::size_t>::value>::type * = nullptr>
+ ArrayProxy( V & v ) VULKAN_HPP_NOEXCEPT
+ : m_count( static_cast<uint32_t>( v.size() ) )
+ , m_ptr( v.data() )
{}
- template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxy( std::array<typename std::remove_const<T>::type, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
- ArrayProxy( std::vector<T, Allocator> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxy( std::vector<typename std::remove_const<T>::type, Allocator> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
- ArrayProxy( std::vector<T, Allocator> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxy( std::vector<typename std::remove_const<T>::type, Allocator> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
-# if defined( VULKAN_HPP_SUPPORT_SPAN )
- template <size_t N = std::dynamic_extent>
- ArrayProxy( std::span<T, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <size_t N = std::dynamic_extent,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxy( std::span<typename std::remove_const<T>::type, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <size_t N = std::dynamic_extent>
- ArrayProxy( std::span<T, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <size_t N = std::dynamic_extent,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxy( std::span<typename std::remove_const<T>::type, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-# endif
-
const T * begin() const VULKAN_HPP_NOEXCEPT
{
return m_ptr;
@@ -447,7 +389,8 @@ namespace VULKAN_HPP_NAMESPACE
, m_ptr( &value )
{}
- ArrayProxyNoTemporaries( T && value ) = delete;
+ template <typename V>
+ ArrayProxyNoTemporaries( V && value ) = delete;
template <typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
ArrayProxyNoTemporaries( typename std::remove_const<T>::type & value ) VULKAN_HPP_NOEXCEPT
@@ -502,117 +445,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
ArrayProxyNoTemporaries( std::initializer_list<typename std::remove_const<T>::type> && list ) = delete;
- template <size_t N>
- ArrayProxyNoTemporaries( std::array<T, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
- {}
-
- template <size_t N>
- ArrayProxyNoTemporaries( std::array<T, N> const && data ) = delete;
-
- template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::array<typename std::remove_const<T>::type, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
- {}
-
- template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::array<typename std::remove_const<T>::type, N> const && data ) = delete;
-
- template <size_t N>
- ArrayProxyNoTemporaries( std::array<T, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
- {}
-
- template <size_t N>
- ArrayProxyNoTemporaries( std::array<T, N> && data ) = delete;
-
- template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::array<typename std::remove_const<T>::type, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( N )
- , m_ptr( data.data() )
- {}
-
- template <size_t N, typename B = T, typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::array<typename std::remove_const<T>::type, N> && data ) = delete;
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
- ArrayProxyNoTemporaries( std::vector<T, Allocator> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
- ArrayProxyNoTemporaries( std::vector<T, Allocator> const && data ) = delete;
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::vector<typename std::remove_const<T>::type, Allocator> const & data )
- VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::vector<typename std::remove_const<T>::type, Allocator> const && data ) = delete;
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
- ArrayProxyNoTemporaries( std::vector<T, Allocator> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>>
- ArrayProxyNoTemporaries( std::vector<T, Allocator> && data ) = delete;
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::vector<typename std::remove_const<T>::type, Allocator> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <class Allocator = std::allocator<typename std::remove_const<T>::type>,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::vector<typename std::remove_const<T>::type, Allocator> && data ) = delete;
-
-# if defined( VULKAN_HPP_SUPPORT_SPAN )
- template <size_t N = std::dynamic_extent>
- ArrayProxyNoTemporaries( std::span<T, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <size_t N = std::dynamic_extent,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::span<typename std::remove_const<T>::type, N> const & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
+ // Any type with a .data() return type implicitly convertible to T*, and a // .size() return type implicitly
+ // convertible to size_t.
+ template <typename V,
+ typename std::enable_if<
+ std::is_convertible<decltype( std::declval<V>().data() ), T *>::value &&
+ std::is_convertible<decltype( std::declval<V>().size() ), std::size_t>::value>::type * = nullptr>
+ ArrayProxyNoTemporaries( V & v ) VULKAN_HPP_NOEXCEPT
+ : m_count( static_cast<uint32_t>( v.size() ) )
+ , m_ptr( v.data() )
{}
- template <size_t N = std::dynamic_extent>
- ArrayProxyNoTemporaries( std::span<T, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-
- template <size_t N = std::dynamic_extent,
- typename B = T,
- typename std::enable_if<std::is_const<B>::value, int>::type = 0>
- ArrayProxyNoTemporaries( std::span<typename std::remove_const<T>::type, N> & data ) VULKAN_HPP_NOEXCEPT
- : m_count( static_cast<uint32_t>( data.size() ) )
- , m_ptr( data.data() )
- {}
-# endif
-
const T * begin() const VULKAN_HPP_NOEXCEPT
{
return m_ptr;
@@ -665,7 +508,8 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_CONSTEXPR ArrayWrapper1D( std::array<T, N> const & data ) VULKAN_HPP_NOEXCEPT : std::array<T, N>( data )
{}
-#if defined( _WIN32 ) && !defined( _WIN64 )
+#if ( VK_USE_64_BIT_PTR_DEFINES == 0 )
+ // on 32 bit compiles, needs overloads on index type int to resolve ambiguities
VULKAN_HPP_CONSTEXPR T const & operator[]( int index ) const VULKAN_HPP_NOEXCEPT
{
return std::array<T, N>::operator[]( index );
@@ -701,6 +545,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
+ std::strong_ordering operator<=>( ArrayWrapper1D<char, N> const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return *static_cast<std::array<char, N> const *>( this ) <=> *static_cast<std::array<char, N> const *>( &rhs );
+ }
+#else
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
bool operator<( ArrayWrapper1D<char, N> const & rhs ) const VULKAN_HPP_NOEXCEPT
{
@@ -724,6 +575,7 @@ namespace VULKAN_HPP_NAMESPACE
{
return *static_cast<std::array<char, N> const *>( this ) >= *static_cast<std::array<char, N> const *>( &rhs );
}
+#endif
template <typename B = T, typename std::enable_if<std::is_same<B, char>::value, int>::type = 0>
bool operator==( ArrayWrapper1D<char, N> const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -953,7 +805,7 @@ namespace VULKAN_HPP_NAMESPACE
// bitwise operators
template <typename BitType>
- VULKAN_HPP_CONSTEXPR Flags<BitType> operator&(BitType bit, Flags<BitType> const & flags)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR Flags<BitType> operator&( BitType bit, Flags<BitType> const & flags ) VULKAN_HPP_NOEXCEPT
{
return flags.operator&( bit );
}
@@ -1071,7 +923,10 @@ namespace VULKAN_HPP_NAMESPACE
{
static_assert( StructureChainValidation<sizeof...( ChainElements ) - 1, ChainElements...>::valid,
"The structure chain is not valid!" );
- link<sizeof...( ChainElements ) - 1>();
+ link( &std::get<0>( *this ),
+ &std::get<0>( rhs ),
+ reinterpret_cast<VkBaseOutStructure *>( &std::get<0>( *this ) ),
+ reinterpret_cast<VkBaseInStructure const *>( &std::get<0>( rhs ) ) );
}
StructureChain( StructureChain && rhs ) VULKAN_HPP_NOEXCEPT
@@ -1079,7 +934,10 @@ namespace VULKAN_HPP_NAMESPACE
{
static_assert( StructureChainValidation<sizeof...( ChainElements ) - 1, ChainElements...>::valid,
"The structure chain is not valid!" );
- link<sizeof...( ChainElements ) - 1>();
+ link( &std::get<0>( *this ),
+ &std::get<0>( rhs ),
+ reinterpret_cast<VkBaseOutStructure *>( &std::get<0>( *this ) ),
+ reinterpret_cast<VkBaseInStructure const *>( &std::get<0>( rhs ) ) );
}
StructureChain( ChainElements const &... elems ) VULKAN_HPP_NOEXCEPT : std::tuple<ChainElements...>( elems... )
@@ -1092,7 +950,10 @@ namespace VULKAN_HPP_NAMESPACE
StructureChain & operator=( StructureChain const & rhs ) VULKAN_HPP_NOEXCEPT
{
std::tuple<ChainElements...>::operator=( rhs );
- link<sizeof...( ChainElements ) - 1>();
+ link( &std::get<0>( *this ),
+ &std::get<0>( rhs ),
+ reinterpret_cast<VkBaseOutStructure *>( &std::get<0>( *this ) ),
+ reinterpret_cast<VkBaseInStructure const *>( &std::get<0>( rhs ) ) );
return *this;
}
@@ -1233,6 +1094,19 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<Index == 0, void>::type link() VULKAN_HPP_NOEXCEPT
{}
+ void link( void * dstBase, void const * srcBase, VkBaseOutStructure * dst, VkBaseInStructure const * src )
+ {
+ while ( src->pNext )
+ {
+ std::ptrdiff_t offset =
+ reinterpret_cast<char const *>( src->pNext ) - reinterpret_cast<char const *>( srcBase );
+ dst->pNext = reinterpret_cast<VkBaseOutStructure *>( reinterpret_cast<char *>( dstBase ) + offset );
+ dst = dst->pNext;
+ src = src->pNext;
+ }
+ dst->pNext = nullptr;
+ }
+
void unlink( VkBaseOutStructure const * pNext ) VULKAN_HPP_NOEXCEPT
{
VkBaseOutStructure * elementPtr =
@@ -1380,15 +1254,24 @@ namespace VULKAN_HPP_NAMESPACE
class DispatchLoaderBase
{
-#if !defined( NDEBUG )
public:
+ DispatchLoaderBase() = default;
+ DispatchLoaderBase( std::nullptr_t )
+#if !defined( NDEBUG )
+ : m_valid( false )
+#endif
+ {}
+
+#if !defined( NDEBUG )
size_t getVkHeaderVersion() const
{
+ VULKAN_HPP_ASSERT( m_valid );
return vkHeaderVersion;
}
private:
size_t vkHeaderVersion = VK_HEADER_VERSION;
+ bool m_valid = true;
#endif
};
@@ -2811,6 +2694,260 @@ namespace VULKAN_HPP_NAMESPACE
return ::vkGetDeviceMemoryOpaqueCaptureAddress( device, pInfo );
}
+ //=== VK_VERSION_1_3 ===
+
+ VkResult
+ vkGetPhysicalDeviceToolProperties( VkPhysicalDevice physicalDevice,
+ uint32_t * pToolCount,
+ VkPhysicalDeviceToolProperties * pToolProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetPhysicalDeviceToolProperties( physicalDevice, pToolCount, pToolProperties );
+ }
+
+ VkResult vkCreatePrivateDataSlot( VkDevice device,
+ const VkPrivateDataSlotCreateInfo * pCreateInfo,
+ const VkAllocationCallbacks * pAllocator,
+ VkPrivateDataSlot * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCreatePrivateDataSlot( device, pCreateInfo, pAllocator, pPrivateDataSlot );
+ }
+
+ void vkDestroyPrivateDataSlot( VkDevice device,
+ VkPrivateDataSlot privateDataSlot,
+ const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkDestroyPrivateDataSlot( device, privateDataSlot, pAllocator );
+ }
+
+ VkResult vkSetPrivateData( VkDevice device,
+ VkObjectType objectType,
+ uint64_t objectHandle,
+ VkPrivateDataSlot privateDataSlot,
+ uint64_t data ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkSetPrivateData( device, objectType, objectHandle, privateDataSlot, data );
+ }
+
+ void vkGetPrivateData( VkDevice device,
+ VkObjectType objectType,
+ uint64_t objectHandle,
+ VkPrivateDataSlot privateDataSlot,
+ uint64_t * pData ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetPrivateData( device, objectType, objectHandle, privateDataSlot, pData );
+ }
+
+ void vkCmdSetEvent2( VkCommandBuffer commandBuffer,
+ VkEvent event,
+ const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetEvent2( commandBuffer, event, pDependencyInfo );
+ }
+
+ void vkCmdResetEvent2( VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdResetEvent2( commandBuffer, event, stageMask );
+ }
+
+ void vkCmdWaitEvents2( VkCommandBuffer commandBuffer,
+ uint32_t eventCount,
+ const VkEvent * pEvents,
+ const VkDependencyInfo * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdWaitEvents2( commandBuffer, eventCount, pEvents, pDependencyInfos );
+ }
+
+ void vkCmdPipelineBarrier2( VkCommandBuffer commandBuffer,
+ const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdPipelineBarrier2( commandBuffer, pDependencyInfo );
+ }
+
+ void vkCmdWriteTimestamp2( VkCommandBuffer commandBuffer,
+ VkPipelineStageFlags2 stage,
+ VkQueryPool queryPool,
+ uint32_t query ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdWriteTimestamp2( commandBuffer, stage, queryPool, query );
+ }
+
+ VkResult vkQueueSubmit2( VkQueue queue,
+ uint32_t submitCount,
+ const VkSubmitInfo2 * pSubmits,
+ VkFence fence ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkQueueSubmit2( queue, submitCount, pSubmits, fence );
+ }
+
+ void vkCmdCopyBuffer2( VkCommandBuffer commandBuffer,
+ const VkCopyBufferInfo2 * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdCopyBuffer2( commandBuffer, pCopyBufferInfo );
+ }
+
+ void vkCmdCopyImage2( VkCommandBuffer commandBuffer,
+ const VkCopyImageInfo2 * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdCopyImage2( commandBuffer, pCopyImageInfo );
+ }
+
+ void vkCmdCopyBufferToImage2( VkCommandBuffer commandBuffer,
+ const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdCopyBufferToImage2( commandBuffer, pCopyBufferToImageInfo );
+ }
+
+ void vkCmdCopyImageToBuffer2( VkCommandBuffer commandBuffer,
+ const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdCopyImageToBuffer2( commandBuffer, pCopyImageToBufferInfo );
+ }
+
+ void vkCmdBlitImage2( VkCommandBuffer commandBuffer,
+ const VkBlitImageInfo2 * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdBlitImage2( commandBuffer, pBlitImageInfo );
+ }
+
+ void vkCmdResolveImage2( VkCommandBuffer commandBuffer,
+ const VkResolveImageInfo2 * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdResolveImage2( commandBuffer, pResolveImageInfo );
+ }
+
+ void vkCmdBeginRendering( VkCommandBuffer commandBuffer,
+ const VkRenderingInfo * pRenderingInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdBeginRendering( commandBuffer, pRenderingInfo );
+ }
+
+ void vkCmdEndRendering( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdEndRendering( commandBuffer );
+ }
+
+ void vkCmdSetCullMode( VkCommandBuffer commandBuffer, VkCullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetCullMode( commandBuffer, cullMode );
+ }
+
+ void vkCmdSetFrontFace( VkCommandBuffer commandBuffer, VkFrontFace frontFace ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetFrontFace( commandBuffer, frontFace );
+ }
+
+ void vkCmdSetPrimitiveTopology( VkCommandBuffer commandBuffer,
+ VkPrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetPrimitiveTopology( commandBuffer, primitiveTopology );
+ }
+
+ void vkCmdSetViewportWithCount( VkCommandBuffer commandBuffer,
+ uint32_t viewportCount,
+ const VkViewport * pViewports ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetViewportWithCount( commandBuffer, viewportCount, pViewports );
+ }
+
+ void vkCmdSetScissorWithCount( VkCommandBuffer commandBuffer,
+ uint32_t scissorCount,
+ const VkRect2D * pScissors ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetScissorWithCount( commandBuffer, scissorCount, pScissors );
+ }
+
+ void vkCmdBindVertexBuffers2( VkCommandBuffer commandBuffer,
+ uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VkBuffer * pBuffers,
+ const VkDeviceSize * pOffsets,
+ const VkDeviceSize * pSizes,
+ const VkDeviceSize * pStrides ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdBindVertexBuffers2(
+ commandBuffer, firstBinding, bindingCount, pBuffers, pOffsets, pSizes, pStrides );
+ }
+
+ void vkCmdSetDepthTestEnable( VkCommandBuffer commandBuffer, VkBool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetDepthTestEnable( commandBuffer, depthTestEnable );
+ }
+
+ void vkCmdSetDepthWriteEnable( VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetDepthWriteEnable( commandBuffer, depthWriteEnable );
+ }
+
+ void vkCmdSetDepthCompareOp( VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetDepthCompareOp( commandBuffer, depthCompareOp );
+ }
+
+ void vkCmdSetDepthBoundsTestEnable( VkCommandBuffer commandBuffer,
+ VkBool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetDepthBoundsTestEnable( commandBuffer, depthBoundsTestEnable );
+ }
+
+ void vkCmdSetStencilTestEnable( VkCommandBuffer commandBuffer,
+ VkBool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetStencilTestEnable( commandBuffer, stencilTestEnable );
+ }
+
+ void vkCmdSetStencilOp( VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ VkStencilOp failOp,
+ VkStencilOp passOp,
+ VkStencilOp depthFailOp,
+ VkCompareOp compareOp ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetStencilOp( commandBuffer, faceMask, failOp, passOp, depthFailOp, compareOp );
+ }
+
+ void vkCmdSetRasterizerDiscardEnable( VkCommandBuffer commandBuffer,
+ VkBool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetRasterizerDiscardEnable( commandBuffer, rasterizerDiscardEnable );
+ }
+
+ void vkCmdSetDepthBiasEnable( VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetDepthBiasEnable( commandBuffer, depthBiasEnable );
+ }
+
+ void vkCmdSetPrimitiveRestartEnable( VkCommandBuffer commandBuffer,
+ VkBool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdSetPrimitiveRestartEnable( commandBuffer, primitiveRestartEnable );
+ }
+
+ void vkGetDeviceBufferMemoryRequirements( VkDevice device,
+ const VkDeviceBufferMemoryRequirements * pInfo,
+ VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetDeviceBufferMemoryRequirements( device, pInfo, pMemoryRequirements );
+ }
+
+ void vkGetDeviceImageMemoryRequirements( VkDevice device,
+ const VkDeviceImageMemoryRequirements * pInfo,
+ VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetDeviceImageMemoryRequirements( device, pInfo, pMemoryRequirements );
+ }
+
+ void vkGetDeviceImageSparseMemoryRequirements( VkDevice device,
+ const VkDeviceImageMemoryRequirements * pInfo,
+ uint32_t * pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetDeviceImageSparseMemoryRequirements(
+ device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements );
+ }
+
//=== VK_KHR_surface ===
void vkDestroySurfaceKHR( VkInstance instance,
@@ -3399,6 +3536,19 @@ namespace VULKAN_HPP_NAMESPACE
return ::vkGetShaderInfoAMD( device, pipeline, shaderStage, infoType, pInfoSize, pInfo );
}
+ //=== VK_KHR_dynamic_rendering ===
+
+ void vkCmdBeginRenderingKHR( VkCommandBuffer commandBuffer,
+ const VkRenderingInfo * pRenderingInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdBeginRenderingKHR( commandBuffer, pRenderingInfo );
+ }
+
+ void vkCmdEndRenderingKHR( VkCommandBuffer commandBuffer ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCmdEndRenderingKHR( commandBuffer );
+ }
+
# if defined( VK_USE_PLATFORM_GGP )
//=== VK_GGP_stream_descriptor_surface ===
@@ -4803,10 +4953,10 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_tooling_info ===
- VkResult vkGetPhysicalDeviceToolPropertiesEXT( VkPhysicalDevice physicalDevice,
- uint32_t * pToolCount,
- VkPhysicalDeviceToolPropertiesEXT * pToolProperties ) const
- VULKAN_HPP_NOEXCEPT
+ VkResult
+ vkGetPhysicalDeviceToolPropertiesEXT( VkPhysicalDevice physicalDevice,
+ uint32_t * pToolCount,
+ VkPhysicalDeviceToolProperties * pToolProperties ) const VULKAN_HPP_NOEXCEPT
{
return ::vkGetPhysicalDeviceToolPropertiesEXT( physicalDevice, pToolCount, pToolProperties );
}
@@ -5136,35 +5286,35 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_private_data ===
- VkResult vkCreatePrivateDataSlotEXT( VkDevice device,
- const VkPrivateDataSlotCreateInfoEXT * pCreateInfo,
- const VkAllocationCallbacks * pAllocator,
- VkPrivateDataSlotEXT * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT
+ VkResult vkCreatePrivateDataSlotEXT( VkDevice device,
+ const VkPrivateDataSlotCreateInfo * pCreateInfo,
+ const VkAllocationCallbacks * pAllocator,
+ VkPrivateDataSlot * pPrivateDataSlot ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCreatePrivateDataSlotEXT( device, pCreateInfo, pAllocator, pPrivateDataSlot );
}
void vkDestroyPrivateDataSlotEXT( VkDevice device,
- VkPrivateDataSlotEXT privateDataSlot,
+ VkPrivateDataSlot privateDataSlot,
const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT
{
return ::vkDestroyPrivateDataSlotEXT( device, privateDataSlot, pAllocator );
}
- VkResult vkSetPrivateDataEXT( VkDevice device,
- VkObjectType objectType,
- uint64_t objectHandle,
- VkPrivateDataSlotEXT privateDataSlot,
- uint64_t data ) const VULKAN_HPP_NOEXCEPT
+ VkResult vkSetPrivateDataEXT( VkDevice device,
+ VkObjectType objectType,
+ uint64_t objectHandle,
+ VkPrivateDataSlot privateDataSlot,
+ uint64_t data ) const VULKAN_HPP_NOEXCEPT
{
return ::vkSetPrivateDataEXT( device, objectType, objectHandle, privateDataSlot, data );
}
- void vkGetPrivateDataEXT( VkDevice device,
- VkObjectType objectType,
- uint64_t objectHandle,
- VkPrivateDataSlotEXT privateDataSlot,
- uint64_t * pData ) const VULKAN_HPP_NOEXCEPT
+ void vkGetPrivateDataEXT( VkDevice device,
+ VkObjectType objectType,
+ uint64_t objectHandle,
+ VkPrivateDataSlot privateDataSlot,
+ uint64_t * pData ) const VULKAN_HPP_NOEXCEPT
{
return ::vkGetPrivateDataEXT( device, objectType, objectHandle, privateDataSlot, pData );
}
@@ -5181,55 +5331,55 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_synchronization2 ===
- void vkCmdSetEvent2KHR( VkCommandBuffer commandBuffer,
- VkEvent event,
- const VkDependencyInfoKHR * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdSetEvent2KHR( VkCommandBuffer commandBuffer,
+ VkEvent event,
+ const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdSetEvent2KHR( commandBuffer, event, pDependencyInfo );
}
- void vkCmdResetEvent2KHR( VkCommandBuffer commandBuffer,
- VkEvent event,
- VkPipelineStageFlags2KHR stageMask ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdResetEvent2KHR( VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdResetEvent2KHR( commandBuffer, event, stageMask );
}
- void vkCmdWaitEvents2KHR( VkCommandBuffer commandBuffer,
- uint32_t eventCount,
- const VkEvent * pEvents,
- const VkDependencyInfoKHR * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdWaitEvents2KHR( VkCommandBuffer commandBuffer,
+ uint32_t eventCount,
+ const VkEvent * pEvents,
+ const VkDependencyInfo * pDependencyInfos ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdWaitEvents2KHR( commandBuffer, eventCount, pEvents, pDependencyInfos );
}
- void vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer,
- const VkDependencyInfoKHR * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdPipelineBarrier2KHR( VkCommandBuffer commandBuffer,
+ const VkDependencyInfo * pDependencyInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdPipelineBarrier2KHR( commandBuffer, pDependencyInfo );
}
- void vkCmdWriteTimestamp2KHR( VkCommandBuffer commandBuffer,
- VkPipelineStageFlags2KHR stage,
- VkQueryPool queryPool,
- uint32_t query ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdWriteTimestamp2KHR( VkCommandBuffer commandBuffer,
+ VkPipelineStageFlags2 stage,
+ VkQueryPool queryPool,
+ uint32_t query ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdWriteTimestamp2KHR( commandBuffer, stage, queryPool, query );
}
- VkResult vkQueueSubmit2KHR( VkQueue queue,
- uint32_t submitCount,
- const VkSubmitInfo2KHR * pSubmits,
- VkFence fence ) const VULKAN_HPP_NOEXCEPT
+ VkResult vkQueueSubmit2KHR( VkQueue queue,
+ uint32_t submitCount,
+ const VkSubmitInfo2 * pSubmits,
+ VkFence fence ) const VULKAN_HPP_NOEXCEPT
{
return ::vkQueueSubmit2KHR( queue, submitCount, pSubmits, fence );
}
- void vkCmdWriteBufferMarker2AMD( VkCommandBuffer commandBuffer,
- VkPipelineStageFlags2KHR stage,
- VkBuffer dstBuffer,
- VkDeviceSize dstOffset,
- uint32_t marker ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdWriteBufferMarker2AMD( VkCommandBuffer commandBuffer,
+ VkPipelineStageFlags2 stage,
+ VkBuffer dstBuffer,
+ VkDeviceSize dstOffset,
+ uint32_t marker ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdWriteBufferMarker2AMD( commandBuffer, stage, dstBuffer, dstOffset, marker );
}
@@ -5253,40 +5403,38 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
- void vkCmdCopyBuffer2KHR( VkCommandBuffer commandBuffer,
- const VkCopyBufferInfo2KHR * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdCopyBuffer2KHR( VkCommandBuffer commandBuffer,
+ const VkCopyBufferInfo2 * pCopyBufferInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdCopyBuffer2KHR( commandBuffer, pCopyBufferInfo );
}
- void vkCmdCopyImage2KHR( VkCommandBuffer commandBuffer,
- const VkCopyImageInfo2KHR * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdCopyImage2KHR( VkCommandBuffer commandBuffer,
+ const VkCopyImageInfo2 * pCopyImageInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdCopyImage2KHR( commandBuffer, pCopyImageInfo );
}
- void
- vkCmdCopyBufferToImage2KHR( VkCommandBuffer commandBuffer,
- const VkCopyBufferToImageInfo2KHR * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdCopyBufferToImage2KHR( VkCommandBuffer commandBuffer,
+ const VkCopyBufferToImageInfo2 * pCopyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdCopyBufferToImage2KHR( commandBuffer, pCopyBufferToImageInfo );
}
- void
- vkCmdCopyImageToBuffer2KHR( VkCommandBuffer commandBuffer,
- const VkCopyImageToBufferInfo2KHR * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdCopyImageToBuffer2KHR( VkCommandBuffer commandBuffer,
+ const VkCopyImageToBufferInfo2 * pCopyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdCopyImageToBuffer2KHR( commandBuffer, pCopyImageToBufferInfo );
}
- void vkCmdBlitImage2KHR( VkCommandBuffer commandBuffer,
- const VkBlitImageInfo2KHR * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdBlitImage2KHR( VkCommandBuffer commandBuffer,
+ const VkBlitImageInfo2 * pBlitImageInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdBlitImage2KHR( commandBuffer, pBlitImageInfo );
}
- void vkCmdResolveImage2KHR( VkCommandBuffer commandBuffer,
- const VkResolveImageInfo2KHR * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT
+ void vkCmdResolveImage2KHR( VkCommandBuffer commandBuffer,
+ const VkResolveImageInfo2 * pResolveImageInfo ) const VULKAN_HPP_NOEXCEPT
{
return ::vkCmdResolveImage2KHR( commandBuffer, pResolveImageInfo );
}
@@ -5464,6 +5612,49 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VK_USE_PLATFORM_FUCHSIA*/
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ VkResult vkCreateBufferCollectionFUCHSIA( VkDevice device,
+ const VkBufferCollectionCreateInfoFUCHSIA * pCreateInfo,
+ const VkAllocationCallbacks * pAllocator,
+ VkBufferCollectionFUCHSIA * pCollection ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkCreateBufferCollectionFUCHSIA( device, pCreateInfo, pAllocator, pCollection );
+ }
+
+ VkResult vkSetBufferCollectionImageConstraintsFUCHSIA(
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkImageConstraintsInfoFUCHSIA * pImageConstraintsInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkSetBufferCollectionImageConstraintsFUCHSIA( device, collection, pImageConstraintsInfo );
+ }
+
+ VkResult vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkBufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkSetBufferCollectionBufferConstraintsFUCHSIA( device, collection, pBufferConstraintsInfo );
+ }
+
+ void vkDestroyBufferCollectionFUCHSIA( VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkAllocationCallbacks * pAllocator ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkDestroyBufferCollectionFUCHSIA( device, collection, pAllocator );
+ }
+
+ VkResult vkGetBufferCollectionPropertiesFUCHSIA( VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ VkBufferCollectionPropertiesFUCHSIA * pProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetBufferCollectionPropertiesFUCHSIA( device, collection, pProperties );
+ }
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
VkResult vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI( VkDevice device,
@@ -5577,6 +5768,40 @@ namespace VULKAN_HPP_NAMESPACE
return ::vkCmdDrawMultiIndexedEXT(
commandBuffer, drawCount, pIndexInfo, instanceCount, firstInstance, stride, pVertexOffset );
}
+
+ //=== VK_EXT_pageable_device_local_memory ===
+
+ void
+ vkSetDeviceMemoryPriorityEXT( VkDevice device, VkDeviceMemory memory, float priority ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkSetDeviceMemoryPriorityEXT( device, memory, priority );
+ }
+
+ //=== VK_KHR_maintenance4 ===
+
+ void vkGetDeviceBufferMemoryRequirementsKHR( VkDevice device,
+ const VkDeviceBufferMemoryRequirements * pInfo,
+ VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetDeviceBufferMemoryRequirementsKHR( device, pInfo, pMemoryRequirements );
+ }
+
+ void vkGetDeviceImageMemoryRequirementsKHR( VkDevice device,
+ const VkDeviceImageMemoryRequirements * pInfo,
+ VkMemoryRequirements2 * pMemoryRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetDeviceImageMemoryRequirementsKHR( device, pInfo, pMemoryRequirements );
+ }
+
+ void vkGetDeviceImageSparseMemoryRequirementsKHR(
+ VkDevice device,
+ const VkDeviceImageMemoryRequirements * pInfo,
+ uint32_t * pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements2 * pSparseMemoryRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ::vkGetDeviceImageSparseMemoryRequirementsKHR(
+ device, pInfo, pSparseMemoryRequirementCount, pSparseMemoryRequirements );
+ }
};
#endif
@@ -5622,7 +5847,12 @@ namespace VULKAN_HPP_NAMESPACE
}
extern VULKAN_HPP_STORAGE_API DispatchLoaderDynamic defaultDispatchLoaderDynamic;
# else
-# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic()
+ static inline ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic & getDispatchLoaderStatic()
+ {
+ static ::VULKAN_HPP_NAMESPACE::DispatchLoaderStatic dls;
+ return dls;
+ }
+# define VULKAN_HPP_DEFAULT_DISPATCHER ::VULKAN_HPP_NAMESPACE::getDispatchLoaderStatic()
# define VULKAN_HPP_DEFAULT_DISPATCH_LOADER_DYNAMIC_STORAGE
# endif
#endif
@@ -5640,9 +5870,9 @@ namespace VULKAN_HPP_NAMESPACE
# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT
# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT
#else
-# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT = {}
+# define VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT = {}
# define VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT = nullptr
-# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT = VULKAN_HPP_DEFAULT_DISPATCHER
+# define VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT = VULKAN_HPP_DEFAULT_DISPATCHER
#endif
struct AllocationCallbacks;
@@ -5653,9 +5883,9 @@ namespace VULKAN_HPP_NAMESPACE
public:
ObjectDestroy() = default;
- ObjectDestroy( OwnerType owner,
+ ObjectDestroy( OwnerType owner,
Optional<const AllocationCallbacks> allocationCallbacks
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT
: m_owner( owner )
, m_allocationCallbacks( allocationCallbacks )
@@ -5694,7 +5924,7 @@ namespace VULKAN_HPP_NAMESPACE
ObjectDestroy() = default;
ObjectDestroy( Optional<const AllocationCallbacks> allocationCallbacks,
- Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT
+ Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT
: m_allocationCallbacks( allocationCallbacks )
, m_dispatch( &dispatch )
{}
@@ -5723,7 +5953,7 @@ namespace VULKAN_HPP_NAMESPACE
public:
ObjectFree() = default;
- ObjectFree( OwnerType owner,
+ ObjectFree( OwnerType owner,
Optional<const AllocationCallbacks> allocationCallbacks VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT
: m_owner( owner )
@@ -5761,7 +5991,7 @@ namespace VULKAN_HPP_NAMESPACE
public:
ObjectRelease() = default;
- ObjectRelease( OwnerType owner,
+ ObjectRelease( OwnerType owner,
Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT
: m_owner( owner )
, m_dispatch( &dispatch )
@@ -5791,8 +6021,8 @@ namespace VULKAN_HPP_NAMESPACE
public:
PoolFree() = default;
- PoolFree( OwnerType owner,
- PoolType pool,
+ PoolFree( OwnerType owner,
+ PoolType pool,
Dispatch const & dispatch VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT
: m_owner( owner )
, m_pool( pool )
@@ -6177,14 +6407,14 @@ namespace VULKAN_HPP_NAMESPACE
{}
};
- class NotPermittedEXTError : public SystemError
+ class NotPermittedKHRError : public SystemError
{
public:
- NotPermittedEXTError( std::string const & message )
- : SystemError( make_error_code( Result::eErrorNotPermittedEXT ), message )
+ NotPermittedKHRError( std::string const & message )
+ : SystemError( make_error_code( Result::eErrorNotPermittedKHR ), message )
{}
- NotPermittedEXTError( char const * message )
- : SystemError( make_error_code( Result::eErrorNotPermittedEXT ), message )
+ NotPermittedKHRError( char const * message )
+ : SystemError( make_error_code( Result::eErrorNotPermittedKHR ), message )
{}
};
@@ -6201,42 +6431,45 @@ namespace VULKAN_HPP_NAMESPACE
};
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
- [[noreturn]] static void throwResultException( Result result, char const * message )
- {
- switch ( result )
- {
- case Result::eErrorOutOfHostMemory: throw OutOfHostMemoryError( message );
- case Result::eErrorOutOfDeviceMemory: throw OutOfDeviceMemoryError( message );
- case Result::eErrorInitializationFailed: throw InitializationFailedError( message );
- case Result::eErrorDeviceLost: throw DeviceLostError( message );
- case Result::eErrorMemoryMapFailed: throw MemoryMapFailedError( message );
- case Result::eErrorLayerNotPresent: throw LayerNotPresentError( message );
- case Result::eErrorExtensionNotPresent: throw ExtensionNotPresentError( message );
- case Result::eErrorFeatureNotPresent: throw FeatureNotPresentError( message );
- case Result::eErrorIncompatibleDriver: throw IncompatibleDriverError( message );
- case Result::eErrorTooManyObjects: throw TooManyObjectsError( message );
- case Result::eErrorFormatNotSupported: throw FormatNotSupportedError( message );
- case Result::eErrorFragmentedPool: throw FragmentedPoolError( message );
- case Result::eErrorUnknown: throw UnknownError( message );
- case Result::eErrorOutOfPoolMemory: throw OutOfPoolMemoryError( message );
- case Result::eErrorInvalidExternalHandle: throw InvalidExternalHandleError( message );
- case Result::eErrorFragmentation: throw FragmentationError( message );
- case Result::eErrorInvalidOpaqueCaptureAddress: throw InvalidOpaqueCaptureAddressError( message );
- case Result::eErrorSurfaceLostKHR: throw SurfaceLostKHRError( message );
- case Result::eErrorNativeWindowInUseKHR: throw NativeWindowInUseKHRError( message );
- case Result::eErrorOutOfDateKHR: throw OutOfDateKHRError( message );
- case Result::eErrorIncompatibleDisplayKHR: throw IncompatibleDisplayKHRError( message );
- case Result::eErrorValidationFailedEXT: throw ValidationFailedEXTError( message );
- case Result::eErrorInvalidShaderNV: throw InvalidShaderNVError( message );
- case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT:
- throw InvalidDrmFormatModifierPlaneLayoutEXTError( message );
- case Result::eErrorNotPermittedEXT: throw NotPermittedEXTError( message );
+ namespace
+ {
+ [[noreturn]] void throwResultException( Result result, char const * message )
+ {
+ switch ( result )
+ {
+ case Result::eErrorOutOfHostMemory: throw OutOfHostMemoryError( message );
+ case Result::eErrorOutOfDeviceMemory: throw OutOfDeviceMemoryError( message );
+ case Result::eErrorInitializationFailed: throw InitializationFailedError( message );
+ case Result::eErrorDeviceLost: throw DeviceLostError( message );
+ case Result::eErrorMemoryMapFailed: throw MemoryMapFailedError( message );
+ case Result::eErrorLayerNotPresent: throw LayerNotPresentError( message );
+ case Result::eErrorExtensionNotPresent: throw ExtensionNotPresentError( message );
+ case Result::eErrorFeatureNotPresent: throw FeatureNotPresentError( message );
+ case Result::eErrorIncompatibleDriver: throw IncompatibleDriverError( message );
+ case Result::eErrorTooManyObjects: throw TooManyObjectsError( message );
+ case Result::eErrorFormatNotSupported: throw FormatNotSupportedError( message );
+ case Result::eErrorFragmentedPool: throw FragmentedPoolError( message );
+ case Result::eErrorUnknown: throw UnknownError( message );
+ case Result::eErrorOutOfPoolMemory: throw OutOfPoolMemoryError( message );
+ case Result::eErrorInvalidExternalHandle: throw InvalidExternalHandleError( message );
+ case Result::eErrorFragmentation: throw FragmentationError( message );
+ case Result::eErrorInvalidOpaqueCaptureAddress: throw InvalidOpaqueCaptureAddressError( message );
+ case Result::eErrorSurfaceLostKHR: throw SurfaceLostKHRError( message );
+ case Result::eErrorNativeWindowInUseKHR: throw NativeWindowInUseKHRError( message );
+ case Result::eErrorOutOfDateKHR: throw OutOfDateKHRError( message );
+ case Result::eErrorIncompatibleDisplayKHR: throw IncompatibleDisplayKHRError( message );
+ case Result::eErrorValidationFailedEXT: throw ValidationFailedEXTError( message );
+ case Result::eErrorInvalidShaderNV: throw InvalidShaderNVError( message );
+ case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT:
+ throw InvalidDrmFormatModifierPlaneLayoutEXTError( message );
+ case Result::eErrorNotPermittedKHR: throw NotPermittedKHRError( message );
# if defined( VK_USE_PLATFORM_WIN32_KHR )
- case Result::eErrorFullScreenExclusiveModeLostEXT: throw FullScreenExclusiveModeLostEXTError( message );
+ case Result::eErrorFullScreenExclusiveModeLostEXT: throw FullScreenExclusiveModeLostEXTError( message );
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
- default: throw SystemError( make_error_code( result ) );
+ default: throw SystemError( make_error_code( result ) );
+ }
}
- }
+ } // namespace
#endif
template <typename T>
@@ -6439,7 +6672,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename T>
VULKAN_HPP_INLINE ResultValue<T>
- createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
+ createResultValue( Result result, T & data, char const * message, std::initializer_list<Result> successCodes )
{
#ifdef VULKAN_HPP_NO_EXCEPTIONS
ignore( message );
@@ -6602,6 +6835,14 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
+ struct StructExtends<DeviceGroupRenderPassBeginInfo, RenderingInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
struct StructExtends<DeviceGroupCommandBufferBeginInfo, CommandBufferBeginInfo>
{
enum
@@ -7380,6 +7621,376 @@ namespace VULKAN_HPP_NAMESPACE
};
};
+ //=== VK_VERSION_1_3 ===
+ template <>
+ struct StructExtends<PhysicalDeviceVulkan13Features, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceVulkan13Features, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceVulkan13Properties, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineCreationFeedbackCreateInfo, GraphicsPipelineCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineCreationFeedbackCreateInfo, ComputePipelineCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineCreationFeedbackCreateInfo, RayTracingPipelineCreateInfoNV>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineCreationFeedbackCreateInfo, RayTracingPipelineCreateInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderTerminateInvocationFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderTerminateInvocationFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderDemoteToHelperInvocationFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderDemoteToHelperInvocationFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDevicePrivateDataFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDevicePrivateDataFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<DevicePrivateDataCreateInfo, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDevicePipelineCreationCacheControlFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDevicePipelineCreationCacheControlFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<MemoryBarrier2, SubpassDependency2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceSynchronization2Features, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceSynchronization2Features, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceImageRobustnessFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceImageRobustnessFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceSubgroupSizeControlFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceSubgroupSizeControlFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceSubgroupSizeControlProperties, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineShaderStageRequiredSubgroupSizeCreateInfo, PipelineShaderStageCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceInlineUniformBlockFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceInlineUniformBlockFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceInlineUniformBlockProperties, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<WriteDescriptorSetInlineUniformBlock, WriteDescriptorSet>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<DescriptorPoolInlineUniformBlockCreateInfo, DescriptorPoolCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceTextureCompressionASTCHDRFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceTextureCompressionASTCHDRFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineRenderingCreateInfo, GraphicsPipelineCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceDynamicRenderingFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceDynamicRenderingFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<CommandBufferInheritanceRenderingInfo, CommandBufferInheritanceInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderIntegerDotProductFeatures, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderIntegerDotProductFeatures, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceShaderIntegerDotProductProperties, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceTexelBufferAlignmentProperties, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<FormatProperties3, FormatProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceMaintenance4Features, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceMaintenance4Features, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceMaintenance4Properties, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
//=== VK_KHR_swapchain ===
template <>
struct StructExtends<ImageSwapchainCreateInfoKHR, ImageCreateInfo>
@@ -7447,6 +8058,14 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_queue ===
template <>
+ struct StructExtends<QueueFamilyQueryResultStatusProperties2KHR, QueueFamilyProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
struct StructExtends<VideoQueueFamilyProperties2KHR, QueueFamilyProperties2>
{
enum
@@ -7646,6 +8265,178 @@ namespace VULKAN_HPP_NAMESPACE
value = true
};
};
+ template <>
+ struct StructExtends<VideoEncodeH264ProfileEXT, QueryPoolCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH264ProfileEXT, FormatProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH264ProfileEXT, ImageCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH264ProfileEXT, ImageViewCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH264ProfileEXT, BufferCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH264RateControlInfoEXT, VideoEncodeRateControlInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH264RateControlLayerInfoEXT, VideoEncodeRateControlLayerInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_EXT_video_encode_h265 ===
+ template <>
+ struct StructExtends<VideoEncodeH265CapabilitiesEXT, VideoCapabilitiesKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265SessionCreateInfoEXT, VideoSessionCreateInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265SessionParametersCreateInfoEXT, VideoSessionParametersCreateInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265SessionParametersAddInfoEXT, VideoSessionParametersUpdateInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265VclFrameInfoEXT, VideoEncodeInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265EmitPictureParametersEXT, VideoEncodeInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265ProfileEXT, VideoProfileKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265ProfileEXT, QueryPoolCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265ProfileEXT, FormatProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265ProfileEXT, ImageCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265ProfileEXT, ImageViewCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265ProfileEXT, BufferCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265RateControlInfoEXT, VideoEncodeRateControlInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoEncodeH265RateControlLayerInfoEXT, VideoEncodeRateControlLayerInfoKHR>
+ {
+ enum
+ {
+ value = true
+ };
+ };
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -7659,6 +8450,46 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
+ struct StructExtends<VideoDecodeH264ProfileEXT, QueryPoolCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH264ProfileEXT, FormatProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH264ProfileEXT, ImageCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH264ProfileEXT, ImageViewCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH264ProfileEXT, BufferCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
struct StructExtends<VideoDecodeH264CapabilitiesEXT, VideoCapabilitiesKHR>
{
enum
@@ -7726,6 +8557,64 @@ namespace VULKAN_HPP_NAMESPACE
};
};
+ //=== VK_KHR_dynamic_rendering ===
+ template <>
+ struct StructExtends<RenderingFragmentShadingRateAttachmentInfoKHR, RenderingInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<RenderingFragmentDensityMapAttachmentInfoEXT, RenderingInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<AttachmentSampleCountInfoAMD, CommandBufferInheritanceInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<AttachmentSampleCountInfoAMD, GraphicsPipelineCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<MultiviewPerViewAttributesInfoNVX, CommandBufferInheritanceInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<MultiviewPerViewAttributesInfoNVX, GraphicsPipelineCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<MultiviewPerViewAttributesInfoNVX, RenderingInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
//=== VK_NV_corner_sampled_image ===
template <>
struct StructExtends<PhysicalDeviceCornerSampledImageFeaturesNV, PhysicalDeviceFeatures2>
@@ -7793,7 +8682,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<Win32KeyedMutexAcquireReleaseInfoNV, SubmitInfo2KHR>
+ struct StructExtends<Win32KeyedMutexAcquireReleaseInfoNV, SubmitInfo2>
{
enum
{
@@ -7812,24 +8701,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_texture_compression_astc_hdr ===
- template <>
- struct StructExtends<PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_EXT_astc_decode_mode ===
template <>
struct StructExtends<ImageViewASTCDecodeModeEXT, ImageViewCreateInfo>
@@ -7897,7 +8768,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<Win32KeyedMutexAcquireReleaseInfoKHR, SubmitInfo2KHR>
+ struct StructExtends<Win32KeyedMutexAcquireReleaseInfoKHR, SubmitInfo2>
{
enum
{
@@ -8148,7 +9019,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PerformanceQuerySubmitInfoKHR, SubmitInfo2KHR>
+ struct StructExtends<PerformanceQuerySubmitInfoKHR, SubmitInfo2>
{
enum
{
@@ -8208,49 +9079,15 @@ namespace VULKAN_HPP_NAMESPACE
value = true
};
};
-#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
-
- //=== VK_EXT_inline_uniform_block ===
- template <>
- struct StructExtends<PhysicalDeviceInlineUniformBlockFeaturesEXT, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
template <>
- struct StructExtends<PhysicalDeviceInlineUniformBlockFeaturesEXT, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceInlineUniformBlockPropertiesEXT, PhysicalDeviceProperties2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<WriteDescriptorSetInlineUniformBlockEXT, WriteDescriptorSet>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<DescriptorPoolInlineUniformBlockCreateInfoEXT, DescriptorPoolCreateInfo>
+ struct StructExtends<AndroidHardwareBufferFormatProperties2ANDROID, AndroidHardwareBufferPropertiesANDROID>
{
enum
{
value = true
};
};
+#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
//=== VK_EXT_sample_locations ===
template <>
@@ -8262,7 +9099,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<SampleLocationsInfoEXT, ImageMemoryBarrier2KHR>
+ struct StructExtends<SampleLocationsInfoEXT, ImageMemoryBarrier2>
{
enum
{
@@ -8441,6 +9278,14 @@ namespace VULKAN_HPP_NAMESPACE
value = true
};
};
+ template <>
+ struct StructExtends<DrmFormatModifierPropertiesList2EXT, FormatProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
//=== VK_EXT_validation_cache ===
template <>
@@ -8584,16 +9429,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_global_priority ===
- template <>
- struct StructExtends<DeviceQueueGlobalPriorityCreateInfoEXT, DeviceQueueCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_EXT_external_memory_host ===
template <>
struct StructExtends<ImportMemoryHostPointerInfoEXT, MemoryAllocateInfo>
@@ -8669,6 +9504,46 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
+ struct StructExtends<VideoDecodeH265ProfileEXT, QueryPoolCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH265ProfileEXT, FormatProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH265ProfileEXT, ImageCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH265ProfileEXT, ImageViewCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<VideoDecodeH265ProfileEXT, BufferCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
struct StructExtends<VideoDecodeH265CapabilitiesEXT, VideoCapabilitiesKHR>
{
enum
@@ -8718,19 +9593,17 @@ namespace VULKAN_HPP_NAMESPACE
};
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- //=== VK_AMD_memory_overallocation_behavior ===
+ //=== VK_KHR_global_priority ===
template <>
- struct StructExtends<DeviceMemoryOverallocationCreateInfoAMD, DeviceCreateInfo>
+ struct StructExtends<DeviceQueueGlobalPriorityCreateInfoKHR, DeviceQueueCreateInfo>
{
enum
{
value = true
};
};
-
- //=== VK_EXT_vertex_attribute_divisor ===
template <>
- struct StructExtends<PhysicalDeviceVertexAttributeDivisorPropertiesEXT, PhysicalDeviceProperties2>
+ struct StructExtends<PhysicalDeviceGlobalPriorityQueryFeaturesKHR, PhysicalDeviceFeatures2>
{
enum
{
@@ -8738,7 +9611,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PipelineVertexInputDivisorStateCreateInfoEXT, PipelineVertexInputStateCreateInfo>
+ struct StructExtends<PhysicalDeviceGlobalPriorityQueryFeaturesKHR, DeviceCreateInfo>
{
enum
{
@@ -8746,15 +9619,17 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PhysicalDeviceVertexAttributeDivisorFeaturesEXT, PhysicalDeviceFeatures2>
+ struct StructExtends<QueueFamilyGlobalPriorityPropertiesKHR, QueueFamilyProperties2>
{
enum
{
value = true
};
};
+
+ //=== VK_AMD_memory_overallocation_behavior ===
template <>
- struct StructExtends<PhysicalDeviceVertexAttributeDivisorFeaturesEXT, DeviceCreateInfo>
+ struct StructExtends<DeviceMemoryOverallocationCreateInfoAMD, DeviceCreateInfo>
{
enum
{
@@ -8762,21 +9637,17 @@ namespace VULKAN_HPP_NAMESPACE
};
};
-#if defined( VK_USE_PLATFORM_GGP )
- //=== VK_GGP_frame_token ===
+ //=== VK_EXT_vertex_attribute_divisor ===
template <>
- struct StructExtends<PresentFrameTokenGGP, PresentInfoKHR>
+ struct StructExtends<PhysicalDeviceVertexAttributeDivisorPropertiesEXT, PhysicalDeviceProperties2>
{
enum
{
value = true
};
};
-#endif /*VK_USE_PLATFORM_GGP*/
-
- //=== VK_EXT_pipeline_creation_feedback ===
template <>
- struct StructExtends<PipelineCreationFeedbackCreateInfoEXT, GraphicsPipelineCreateInfo>
+ struct StructExtends<PipelineVertexInputDivisorStateCreateInfoEXT, PipelineVertexInputStateCreateInfo>
{
enum
{
@@ -8784,7 +9655,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PipelineCreationFeedbackCreateInfoEXT, ComputePipelineCreateInfo>
+ struct StructExtends<PhysicalDeviceVertexAttributeDivisorFeaturesEXT, PhysicalDeviceFeatures2>
{
enum
{
@@ -8792,21 +9663,25 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PipelineCreationFeedbackCreateInfoEXT, RayTracingPipelineCreateInfoNV>
+ struct StructExtends<PhysicalDeviceVertexAttributeDivisorFeaturesEXT, DeviceCreateInfo>
{
enum
{
value = true
};
};
+
+#if defined( VK_USE_PLATFORM_GGP )
+ //=== VK_GGP_frame_token ===
template <>
- struct StructExtends<PipelineCreationFeedbackCreateInfoEXT, RayTracingPipelineCreateInfoKHR>
+ struct StructExtends<PresentFrameTokenGGP, PresentInfoKHR>
{
enum
{
value = true
};
};
+#endif /*VK_USE_PLATFORM_GGP*/
//=== VK_NV_compute_shader_derivatives ===
template <>
@@ -8980,24 +9855,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_KHR_shader_terminate_invocation ===
- template <>
- struct StructExtends<PhysicalDeviceShaderTerminateInvocationFeaturesKHR, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceShaderTerminateInvocationFeaturesKHR, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_EXT_fragment_density_map ===
template <>
struct StructExtends<PhysicalDeviceFragmentDensityMapFeaturesEXT, PhysicalDeviceFeatures2>
@@ -9040,40 +9897,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_subgroup_size_control ===
- template <>
- struct StructExtends<PhysicalDeviceSubgroupSizeControlFeaturesEXT, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceSubgroupSizeControlFeaturesEXT, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceSubgroupSizeControlPropertiesEXT, PhysicalDeviceProperties2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT, PipelineShaderStageCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_KHR_fragment_shading_rate ===
template <>
struct StructExtends<FragmentShadingRateAttachmentInfoKHR, SubpassDescription2>
@@ -9570,24 +10393,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_shader_demote_to_helper_invocation ===
- template <>
- struct StructExtends<PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_NV_device_generated_commands ===
template <>
struct StructExtends<PhysicalDeviceDeviceGeneratedCommandsPropertiesNV, PhysicalDeviceProperties2>
@@ -9648,32 +10453,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_KHR_shader_integer_dot_product ===
- template <>
- struct StructExtends<PhysicalDeviceShaderIntegerDotProductFeaturesKHR, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceShaderIntegerDotProductFeaturesKHR, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceShaderIntegerDotProductPropertiesKHR, PhysicalDeviceProperties2>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_EXT_texel_buffer_alignment ===
template <>
struct StructExtends<PhysicalDeviceTexelBufferAlignmentFeaturesEXT, PhysicalDeviceFeatures2>
@@ -9691,14 +10470,6 @@ namespace VULKAN_HPP_NAMESPACE
value = true
};
};
- template <>
- struct StructExtends<PhysicalDeviceTexelBufferAlignmentPropertiesEXT, PhysicalDeviceProperties2>
- {
- enum
- {
- value = true
- };
- };
//=== VK_QCOM_render_pass_transform ===
template <>
@@ -9830,54 +10601,18 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_private_data ===
- template <>
- struct StructExtends<PhysicalDevicePrivateDataFeaturesEXT, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDevicePrivateDataFeaturesEXT, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<DevicePrivateDataCreateInfoEXT, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
- //=== VK_EXT_pipeline_creation_cache_control ===
- template <>
- struct StructExtends<PhysicalDevicePipelineCreationCacheControlFeaturesEXT, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_KHR_video_encode_queue ===
template <>
- struct StructExtends<PhysicalDevicePipelineCreationCacheControlFeaturesEXT, DeviceCreateInfo>
+ struct StructExtends<VideoEncodeRateControlInfoKHR, VideoCodingControlInfoKHR>
{
enum
{
value = true
};
};
-
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- //=== VK_KHR_video_encode_queue ===
template <>
- struct StructExtends<VideoEncodeRateControlInfoKHR, VideoCodingControlInfoKHR>
+ struct StructExtends<VideoEncodeRateControlLayerInfoKHR, VideoCodingControlInfoKHR>
{
enum
{
@@ -9914,30 +10649,6 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_synchronization2 ===
template <>
- struct StructExtends<MemoryBarrier2KHR, SubpassDependency2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceSynchronization2FeaturesKHR, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceSynchronization2FeaturesKHR, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
- template <>
struct StructExtends<QueueFamilyCheckpointProperties2NV, QueueFamilyProperties2>
{
enum
@@ -9964,24 +10675,6 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_KHR_zero_initialize_workgroup_memory ===
- template <>
- struct StructExtends<PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR, PhysicalDeviceFeatures2>
- {
- enum
- {
- value = true
- };
- };
- template <>
- struct StructExtends<PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR, DeviceCreateInfo>
- {
- enum
- {
- value = true
- };
- };
-
//=== VK_NV_fragment_shading_rate_enums ===
template <>
struct StructExtends<PhysicalDeviceFragmentShadingRateEnumsFeaturesNV, PhysicalDeviceFeatures2>
@@ -10097,7 +10790,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_QCOM_rotated_copy_commands ===
template <>
- struct StructExtends<CopyCommandTransformInfoQCOM, BufferImageCopy2KHR>
+ struct StructExtends<CopyCommandTransformInfoQCOM, BufferImageCopy2>
{
enum
{
@@ -10105,7 +10798,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<CopyCommandTransformInfoQCOM, ImageBlit2KHR>
+ struct StructExtends<CopyCommandTransformInfoQCOM, ImageBlit2>
{
enum
{
@@ -10113,9 +10806,9 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_image_robustness ===
+ //=== VK_KHR_workgroup_memory_explicit_layout ===
template <>
- struct StructExtends<PhysicalDeviceImageRobustnessFeaturesEXT, PhysicalDeviceFeatures2>
+ struct StructExtends<PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, PhysicalDeviceFeatures2>
{
enum
{
@@ -10123,7 +10816,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PhysicalDeviceImageRobustnessFeaturesEXT, DeviceCreateInfo>
+ struct StructExtends<PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, DeviceCreateInfo>
{
enum
{
@@ -10131,9 +10824,9 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_KHR_workgroup_memory_explicit_layout ===
+ //=== VK_EXT_4444_formats ===
template <>
- struct StructExtends<PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, PhysicalDeviceFeatures2>
+ struct StructExtends<PhysicalDevice4444FormatsFeaturesEXT, PhysicalDeviceFeatures2>
{
enum
{
@@ -10141,7 +10834,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR, DeviceCreateInfo>
+ struct StructExtends<PhysicalDevice4444FormatsFeaturesEXT, DeviceCreateInfo>
{
enum
{
@@ -10149,9 +10842,9 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_4444_formats ===
+ //=== VK_ARM_rasterization_order_attachment_access ===
template <>
- struct StructExtends<PhysicalDevice4444FormatsFeaturesEXT, PhysicalDeviceFeatures2>
+ struct StructExtends<PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM, PhysicalDeviceFeatures2>
{
enum
{
@@ -10159,7 +10852,25 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PhysicalDevice4444FormatsFeaturesEXT, DeviceCreateInfo>
+ struct StructExtends<PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
+ //=== VK_EXT_rgba10x6_formats ===
+ template <>
+ struct StructExtends<PhysicalDeviceRGBA10X6FormatsFeaturesEXT, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceRGBA10X6FormatsFeaturesEXT, DeviceCreateInfo>
{
enum
{
@@ -10273,6 +10984,32 @@ namespace VULKAN_HPP_NAMESPACE
};
};
+ //=== VK_EXT_depth_clip_control ===
+ template <>
+ struct StructExtends<PhysicalDeviceDepthClipControlFeaturesEXT, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceDepthClipControlFeaturesEXT, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PipelineViewportDepthClipControlCreateInfoEXT, PipelineViewportStateCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
//=== VK_EXT_primitive_topology_list_restart ===
template <>
struct StructExtends<PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT, PhysicalDeviceFeatures2>
@@ -10303,6 +11040,34 @@ namespace VULKAN_HPP_NAMESPACE
};
#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ template <>
+ struct StructExtends<ImportMemoryBufferCollectionFUCHSIA, MemoryAllocateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<BufferCollectionImageCreateInfoFUCHSIA, ImageCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<BufferCollectionBufferCreateInfoFUCHSIA, BufferCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
template <>
struct StructExtends<SubpassShadingPipelineCreateInfoHUAWEI, ComputePipelineCreateInfo>
@@ -10417,9 +11182,9 @@ namespace VULKAN_HPP_NAMESPACE
};
};
- //=== VK_EXT_global_priority_query ===
+ //=== VK_EXT_image_view_min_lod ===
template <>
- struct StructExtends<PhysicalDeviceGlobalPriorityQueryFeaturesEXT, PhysicalDeviceFeatures2>
+ struct StructExtends<PhysicalDeviceImageViewMinLodFeaturesEXT, PhysicalDeviceFeatures2>
{
enum
{
@@ -10427,7 +11192,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<PhysicalDeviceGlobalPriorityQueryFeaturesEXT, DeviceCreateInfo>
+ struct StructExtends<PhysicalDeviceImageViewMinLodFeaturesEXT, DeviceCreateInfo>
{
enum
{
@@ -10435,7 +11200,7 @@ namespace VULKAN_HPP_NAMESPACE
};
};
template <>
- struct StructExtends<QueueFamilyGlobalPriorityPropertiesEXT, QueueFamilyProperties2>
+ struct StructExtends<ImageViewMinLodCreateInfoEXT, ImageViewCreateInfo>
{
enum
{
@@ -10469,6 +11234,102 @@ namespace VULKAN_HPP_NAMESPACE
};
};
+ //=== VK_EXT_border_color_swizzle ===
+ template <>
+ struct StructExtends<PhysicalDeviceBorderColorSwizzleFeaturesEXT, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceBorderColorSwizzleFeaturesEXT, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<SamplerBorderColorComponentMappingCreateInfoEXT, SamplerCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
+ //=== VK_EXT_pageable_device_local_memory ===
+ template <>
+ struct StructExtends<PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
+ //=== VK_QCOM_fragment_density_map_offset ===
+ template <>
+ struct StructExtends<PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM, PhysicalDeviceProperties2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<SubpassFragmentDensityMapOffsetEndInfoQCOM, SubpassEndInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
+ //=== VK_NV_linear_color_attachment ===
+ template <>
+ struct StructExtends<PhysicalDeviceLinearColorAttachmentFeaturesNV, PhysicalDeviceFeatures2>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+ template <>
+ struct StructExtends<PhysicalDeviceLinearColorAttachmentFeaturesNV, DeviceCreateInfo>
+ {
+ enum
+ {
+ value = true
+ };
+ };
+
#if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL
class DynamicLoader
{
@@ -10762,6 +11623,45 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0;
PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0;
+ //=== VK_VERSION_1_3 ===
+ PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties = 0;
+ PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot = 0;
+ PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot = 0;
+ PFN_vkSetPrivateData vkSetPrivateData = 0;
+ PFN_vkGetPrivateData vkGetPrivateData = 0;
+ PFN_vkCmdSetEvent2 vkCmdSetEvent2 = 0;
+ PFN_vkCmdResetEvent2 vkCmdResetEvent2 = 0;
+ PFN_vkCmdWaitEvents2 vkCmdWaitEvents2 = 0;
+ PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = 0;
+ PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2 = 0;
+ PFN_vkQueueSubmit2 vkQueueSubmit2 = 0;
+ PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2 = 0;
+ PFN_vkCmdCopyImage2 vkCmdCopyImage2 = 0;
+ PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2 = 0;
+ PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2 = 0;
+ PFN_vkCmdBlitImage2 vkCmdBlitImage2 = 0;
+ PFN_vkCmdResolveImage2 vkCmdResolveImage2 = 0;
+ PFN_vkCmdBeginRendering vkCmdBeginRendering = 0;
+ PFN_vkCmdEndRendering vkCmdEndRendering = 0;
+ PFN_vkCmdSetCullMode vkCmdSetCullMode = 0;
+ PFN_vkCmdSetFrontFace vkCmdSetFrontFace = 0;
+ PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology = 0;
+ PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount = 0;
+ PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount = 0;
+ PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2 = 0;
+ PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable = 0;
+ PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable = 0;
+ PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp = 0;
+ PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable = 0;
+ PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable = 0;
+ PFN_vkCmdSetStencilOp vkCmdSetStencilOp = 0;
+ PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable = 0;
+ PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable = 0;
+ PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable = 0;
+ PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements = 0;
+ PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements = 0;
+ PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements = 0;
+
//=== VK_KHR_surface ===
PFN_vkDestroySurfaceKHR vkDestroySurfaceKHR = 0;
PFN_vkGetPhysicalDeviceSurfaceSupportKHR vkGetPhysicalDeviceSurfaceSupportKHR = 0;
@@ -10909,6 +11809,10 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_AMD_shader_info ===
PFN_vkGetShaderInfoAMD vkGetShaderInfoAMD = 0;
+ //=== VK_KHR_dynamic_rendering ===
+ PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = 0;
+ PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR = 0;
+
#if defined( VK_USE_PLATFORM_GGP )
//=== VK_GGP_stream_descriptor_surface ===
PFN_vkCreateStreamDescriptorSurfaceGGP vkCreateStreamDescriptorSurfaceGGP = 0;
@@ -11403,6 +12307,21 @@ namespace VULKAN_HPP_NAMESPACE
PFN_dummy vkGetSemaphoreZirconHandleFUCHSIA_placeholder = 0;
#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA = 0;
+ PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA = 0;
+ PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0;
+ PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA = 0;
+ PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA = 0;
+#else
+ PFN_dummy vkCreateBufferCollectionFUCHSIA_placeholder = 0;
+ PFN_dummy vkSetBufferCollectionImageConstraintsFUCHSIA_placeholder = 0;
+ PFN_dummy vkSetBufferCollectionBufferConstraintsFUCHSIA_placeholder = 0;
+ PFN_dummy vkDestroyBufferCollectionFUCHSIA_placeholder = 0;
+ PFN_dummy vkGetBufferCollectionPropertiesFUCHSIA_placeholder = 0;
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = 0;
PFN_vkCmdSubpassShadingHUAWEI vkCmdSubpassShadingHUAWEI = 0;
@@ -11436,6 +12355,14 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0;
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0;
+ //=== VK_EXT_pageable_device_local_memory ===
+ PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT = 0;
+
+ //=== VK_KHR_maintenance4 ===
+ PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR = 0;
+ PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR = 0;
+ PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR = 0;
+
public:
DispatchLoaderDynamic() VULKAN_HPP_NOEXCEPT = default;
DispatchLoaderDynamic( DispatchLoaderDynamic const & rhs ) VULKAN_HPP_NOEXCEPT = default;
@@ -11540,10 +12467,9 @@ namespace VULKAN_HPP_NAMESPACE
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) );
vkGetPhysicalDeviceMemoryProperties = PFN_vkGetPhysicalDeviceMemoryProperties(
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) );
- vkGetInstanceProcAddr = PFN_vkGetInstanceProcAddr( vkGetInstanceProcAddr( instance, "vkGetInstanceProcAddr" ) );
- vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) );
- vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) );
- vkDestroyDevice = PFN_vkDestroyDevice( vkGetInstanceProcAddr( instance, "vkDestroyDevice" ) );
+ vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetInstanceProcAddr( instance, "vkGetDeviceProcAddr" ) );
+ vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) );
+ vkDestroyDevice = PFN_vkDestroyDevice( vkGetInstanceProcAddr( instance, "vkDestroyDevice" ) );
vkEnumerateDeviceExtensionProperties = PFN_vkEnumerateDeviceExtensionProperties(
vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) );
vkEnumerateDeviceLayerProperties =
@@ -11773,6 +12699,65 @@ namespace VULKAN_HPP_NAMESPACE
vkGetDeviceMemoryOpaqueCaptureAddress = PFN_vkGetDeviceMemoryOpaqueCaptureAddress(
vkGetInstanceProcAddr( instance, "vkGetDeviceMemoryOpaqueCaptureAddress" ) );
+ //=== VK_VERSION_1_3 ===
+ vkGetPhysicalDeviceToolProperties =
+ PFN_vkGetPhysicalDeviceToolProperties( vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolProperties" ) );
+ vkCreatePrivateDataSlot =
+ PFN_vkCreatePrivateDataSlot( vkGetInstanceProcAddr( instance, "vkCreatePrivateDataSlot" ) );
+ vkDestroyPrivateDataSlot =
+ PFN_vkDestroyPrivateDataSlot( vkGetInstanceProcAddr( instance, "vkDestroyPrivateDataSlot" ) );
+ vkSetPrivateData = PFN_vkSetPrivateData( vkGetInstanceProcAddr( instance, "vkSetPrivateData" ) );
+ vkGetPrivateData = PFN_vkGetPrivateData( vkGetInstanceProcAddr( instance, "vkGetPrivateData" ) );
+ vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2" ) );
+ vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetInstanceProcAddr( instance, "vkCmdResetEvent2" ) );
+ vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents2" ) );
+ vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier2" ) );
+ vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp2" ) );
+ vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetInstanceProcAddr( instance, "vkQueueSubmit2" ) );
+ vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer2" ) );
+ vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2" ) );
+ vkCmdCopyBufferToImage2 =
+ PFN_vkCmdCopyBufferToImage2( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage2" ) );
+ vkCmdCopyImageToBuffer2 =
+ PFN_vkCmdCopyImageToBuffer2( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer2" ) );
+ vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2" ) );
+ vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetInstanceProcAddr( instance, "vkCmdResolveImage2" ) );
+ vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetInstanceProcAddr( instance, "vkCmdBeginRendering" ) );
+ vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetInstanceProcAddr( instance, "vkCmdEndRendering" ) );
+ vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetInstanceProcAddr( instance, "vkCmdSetCullMode" ) );
+ vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetInstanceProcAddr( instance, "vkCmdSetFrontFace" ) );
+ vkCmdSetPrimitiveTopology =
+ PFN_vkCmdSetPrimitiveTopology( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveTopology" ) );
+ vkCmdSetViewportWithCount =
+ PFN_vkCmdSetViewportWithCount( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWithCount" ) );
+ vkCmdSetScissorWithCount =
+ PFN_vkCmdSetScissorWithCount( vkGetInstanceProcAddr( instance, "vkCmdSetScissorWithCount" ) );
+ vkCmdBindVertexBuffers2 =
+ PFN_vkCmdBindVertexBuffers2( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers2" ) );
+ vkCmdSetDepthTestEnable =
+ PFN_vkCmdSetDepthTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthTestEnable" ) );
+ vkCmdSetDepthWriteEnable =
+ PFN_vkCmdSetDepthWriteEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthWriteEnable" ) );
+ vkCmdSetDepthCompareOp =
+ PFN_vkCmdSetDepthCompareOp( vkGetInstanceProcAddr( instance, "vkCmdSetDepthCompareOp" ) );
+ vkCmdSetDepthBoundsTestEnable =
+ PFN_vkCmdSetDepthBoundsTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBoundsTestEnable" ) );
+ vkCmdSetStencilTestEnable =
+ PFN_vkCmdSetStencilTestEnable( vkGetInstanceProcAddr( instance, "vkCmdSetStencilTestEnable" ) );
+ vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetInstanceProcAddr( instance, "vkCmdSetStencilOp" ) );
+ vkCmdSetRasterizerDiscardEnable =
+ PFN_vkCmdSetRasterizerDiscardEnable( vkGetInstanceProcAddr( instance, "vkCmdSetRasterizerDiscardEnable" ) );
+ vkCmdSetDepthBiasEnable =
+ PFN_vkCmdSetDepthBiasEnable( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBiasEnable" ) );
+ vkCmdSetPrimitiveRestartEnable =
+ PFN_vkCmdSetPrimitiveRestartEnable( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveRestartEnable" ) );
+ vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements(
+ vkGetInstanceProcAddr( instance, "vkGetDeviceBufferMemoryRequirements" ) );
+ vkGetDeviceImageMemoryRequirements = PFN_vkGetDeviceImageMemoryRequirements(
+ vkGetInstanceProcAddr( instance, "vkGetDeviceImageMemoryRequirements" ) );
+ vkGetDeviceImageSparseMemoryRequirements = PFN_vkGetDeviceImageSparseMemoryRequirements(
+ vkGetInstanceProcAddr( instance, "vkGetDeviceImageSparseMemoryRequirements" ) );
+
//=== VK_KHR_surface ===
vkDestroySurfaceKHR = PFN_vkDestroySurfaceKHR( vkGetInstanceProcAddr( instance, "vkDestroySurfaceKHR" ) );
vkGetPhysicalDeviceSurfaceSupportKHR = PFN_vkGetPhysicalDeviceSurfaceSupportKHR(
@@ -11952,6 +12937,15 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_AMD_shader_info ===
vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetInstanceProcAddr( instance, "vkGetShaderInfoAMD" ) );
+ //=== VK_KHR_dynamic_rendering ===
+ vkCmdBeginRenderingKHR =
+ PFN_vkCmdBeginRenderingKHR( vkGetInstanceProcAddr( instance, "vkCmdBeginRenderingKHR" ) );
+ if ( !vkCmdBeginRendering )
+ vkCmdBeginRendering = vkCmdBeginRenderingKHR;
+ vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetInstanceProcAddr( instance, "vkCmdEndRenderingKHR" ) );
+ if ( !vkCmdEndRendering )
+ vkCmdEndRendering = vkCmdEndRenderingKHR;
+
#if defined( VK_USE_PLATFORM_GGP )
//=== VK_GGP_stream_descriptor_surface ===
vkCreateStreamDescriptorSurfaceGGP = PFN_vkCreateStreamDescriptorSurfaceGGP(
@@ -12471,6 +13465,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_tooling_info ===
vkGetPhysicalDeviceToolPropertiesEXT = PFN_vkGetPhysicalDeviceToolPropertiesEXT(
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) );
+ if ( !vkGetPhysicalDeviceToolProperties )
+ vkGetPhysicalDeviceToolProperties = vkGetPhysicalDeviceToolPropertiesEXT;
//=== VK_KHR_present_wait ===
vkWaitForPresentKHR = PFN_vkWaitForPresentKHR( vkGetInstanceProcAddr( instance, "vkWaitForPresentKHR" ) );
@@ -12524,27 +13520,51 @@ namespace VULKAN_HPP_NAMESPACE
vkResetQueryPool = vkResetQueryPoolEXT;
//=== VK_EXT_extended_dynamic_state ===
- vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetCullModeEXT" ) );
+ vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetInstanceProcAddr( instance, "vkCmdSetCullModeEXT" ) );
+ if ( !vkCmdSetCullMode )
+ vkCmdSetCullMode = vkCmdSetCullModeEXT;
vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetInstanceProcAddr( instance, "vkCmdSetFrontFaceEXT" ) );
+ if ( !vkCmdSetFrontFace )
+ vkCmdSetFrontFace = vkCmdSetFrontFaceEXT;
vkCmdSetPrimitiveTopologyEXT =
PFN_vkCmdSetPrimitiveTopologyEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveTopologyEXT" ) );
+ if ( !vkCmdSetPrimitiveTopology )
+ vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT;
vkCmdSetViewportWithCountEXT =
PFN_vkCmdSetViewportWithCountEXT( vkGetInstanceProcAddr( instance, "vkCmdSetViewportWithCountEXT" ) );
+ if ( !vkCmdSetViewportWithCount )
+ vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT;
vkCmdSetScissorWithCountEXT =
PFN_vkCmdSetScissorWithCountEXT( vkGetInstanceProcAddr( instance, "vkCmdSetScissorWithCountEXT" ) );
+ if ( !vkCmdSetScissorWithCount )
+ vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT;
vkCmdBindVertexBuffers2EXT =
PFN_vkCmdBindVertexBuffers2EXT( vkGetInstanceProcAddr( instance, "vkCmdBindVertexBuffers2EXT" ) );
+ if ( !vkCmdBindVertexBuffers2 )
+ vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT;
vkCmdSetDepthTestEnableEXT =
PFN_vkCmdSetDepthTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthTestEnableEXT" ) );
+ if ( !vkCmdSetDepthTestEnable )
+ vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT;
vkCmdSetDepthWriteEnableEXT =
PFN_vkCmdSetDepthWriteEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthWriteEnableEXT" ) );
+ if ( !vkCmdSetDepthWriteEnable )
+ vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT;
vkCmdSetDepthCompareOpEXT =
PFN_vkCmdSetDepthCompareOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthCompareOpEXT" ) );
+ if ( !vkCmdSetDepthCompareOp )
+ vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT;
vkCmdSetDepthBoundsTestEnableEXT =
PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBoundsTestEnableEXT" ) );
+ if ( !vkCmdSetDepthBoundsTestEnable )
+ vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT;
vkCmdSetStencilTestEnableEXT =
PFN_vkCmdSetStencilTestEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetStencilTestEnableEXT" ) );
+ if ( !vkCmdSetStencilTestEnable )
+ vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT;
vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetStencilOpEXT" ) );
+ if ( !vkCmdSetStencilOp )
+ vkCmdSetStencilOp = vkCmdSetStencilOpEXT;
//=== VK_KHR_deferred_host_operations ===
vkCreateDeferredOperationKHR =
@@ -12588,10 +13608,18 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_private_data ===
vkCreatePrivateDataSlotEXT =
PFN_vkCreatePrivateDataSlotEXT( vkGetInstanceProcAddr( instance, "vkCreatePrivateDataSlotEXT" ) );
+ if ( !vkCreatePrivateDataSlot )
+ vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT;
vkDestroyPrivateDataSlotEXT =
PFN_vkDestroyPrivateDataSlotEXT( vkGetInstanceProcAddr( instance, "vkDestroyPrivateDataSlotEXT" ) );
+ if ( !vkDestroyPrivateDataSlot )
+ vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT;
vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetInstanceProcAddr( instance, "vkSetPrivateDataEXT" ) );
+ if ( !vkSetPrivateData )
+ vkSetPrivateData = vkSetPrivateDataEXT;
vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetInstanceProcAddr( instance, "vkGetPrivateDataEXT" ) );
+ if ( !vkGetPrivateData )
+ vkGetPrivateData = vkGetPrivateDataEXT;
#if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_encode_queue ===
@@ -12599,14 +13627,26 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
//=== VK_KHR_synchronization2 ===
- vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2KHR" ) );
+ vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdSetEvent2KHR" ) );
+ if ( !vkCmdSetEvent2 )
+ vkCmdSetEvent2 = vkCmdSetEvent2KHR;
vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetInstanceProcAddr( instance, "vkCmdResetEvent2KHR" ) );
+ if ( !vkCmdResetEvent2 )
+ vkCmdResetEvent2 = vkCmdResetEvent2KHR;
vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetInstanceProcAddr( instance, "vkCmdWaitEvents2KHR" ) );
+ if ( !vkCmdWaitEvents2 )
+ vkCmdWaitEvents2 = vkCmdWaitEvents2KHR;
vkCmdPipelineBarrier2KHR =
PFN_vkCmdPipelineBarrier2KHR( vkGetInstanceProcAddr( instance, "vkCmdPipelineBarrier2KHR" ) );
+ if ( !vkCmdPipelineBarrier2 )
+ vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR;
vkCmdWriteTimestamp2KHR =
PFN_vkCmdWriteTimestamp2KHR( vkGetInstanceProcAddr( instance, "vkCmdWriteTimestamp2KHR" ) );
+ if ( !vkCmdWriteTimestamp2 )
+ vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR;
vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetInstanceProcAddr( instance, "vkQueueSubmit2KHR" ) );
+ if ( !vkQueueSubmit2 )
+ vkQueueSubmit2 = vkQueueSubmit2KHR;
vkCmdWriteBufferMarker2AMD =
PFN_vkCmdWriteBufferMarker2AMD( vkGetInstanceProcAddr( instance, "vkCmdWriteBufferMarker2AMD" ) );
vkGetQueueCheckpointData2NV =
@@ -12618,13 +13658,25 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyBuffer2KHR" ) );
- vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2KHR" ) );
+ if ( !vkCmdCopyBuffer2 )
+ vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR;
+ vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImage2KHR" ) );
+ if ( !vkCmdCopyImage2 )
+ vkCmdCopyImage2 = vkCmdCopyImage2KHR;
vkCmdCopyBufferToImage2KHR =
PFN_vkCmdCopyBufferToImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyBufferToImage2KHR" ) );
+ if ( !vkCmdCopyBufferToImage2 )
+ vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR;
vkCmdCopyImageToBuffer2KHR =
PFN_vkCmdCopyImageToBuffer2KHR( vkGetInstanceProcAddr( instance, "vkCmdCopyImageToBuffer2KHR" ) );
- vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2KHR" ) );
+ if ( !vkCmdCopyImageToBuffer2 )
+ vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR;
+ vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdBlitImage2KHR" ) );
+ if ( !vkCmdBlitImage2 )
+ vkCmdBlitImage2 = vkCmdBlitImage2KHR;
vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetInstanceProcAddr( instance, "vkCmdResolveImage2KHR" ) );
+ if ( !vkCmdResolveImage2 )
+ vkCmdResolveImage2 = vkCmdResolveImage2KHR;
#if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_NV_acquire_winrt_display ===
@@ -12676,6 +13728,20 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetInstanceProcAddr( instance, "vkGetSemaphoreZirconHandleFUCHSIA" ) );
#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ vkCreateBufferCollectionFUCHSIA =
+ PFN_vkCreateBufferCollectionFUCHSIA( vkGetInstanceProcAddr( instance, "vkCreateBufferCollectionFUCHSIA" ) );
+ vkSetBufferCollectionImageConstraintsFUCHSIA = PFN_vkSetBufferCollectionImageConstraintsFUCHSIA(
+ vkGetInstanceProcAddr( instance, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) );
+ vkSetBufferCollectionBufferConstraintsFUCHSIA = PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ vkGetInstanceProcAddr( instance, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) );
+ vkDestroyBufferCollectionFUCHSIA =
+ PFN_vkDestroyBufferCollectionFUCHSIA( vkGetInstanceProcAddr( instance, "vkDestroyBufferCollectionFUCHSIA" ) );
+ vkGetBufferCollectionPropertiesFUCHSIA = PFN_vkGetBufferCollectionPropertiesFUCHSIA(
+ vkGetInstanceProcAddr( instance, "vkGetBufferCollectionPropertiesFUCHSIA" ) );
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
vkGetInstanceProcAddr( instance, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) );
@@ -12695,11 +13761,17 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdSetPatchControlPointsEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPatchControlPointsEXT" ) );
vkCmdSetRasterizerDiscardEnableEXT = PFN_vkCmdSetRasterizerDiscardEnableEXT(
vkGetInstanceProcAddr( instance, "vkCmdSetRasterizerDiscardEnableEXT" ) );
+ if ( !vkCmdSetRasterizerDiscardEnable )
+ vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT;
vkCmdSetDepthBiasEnableEXT =
PFN_vkCmdSetDepthBiasEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetDepthBiasEnableEXT" ) );
+ if ( !vkCmdSetDepthBiasEnable )
+ vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT;
vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetInstanceProcAddr( instance, "vkCmdSetLogicOpEXT" ) );
vkCmdSetPrimitiveRestartEnableEXT =
PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetInstanceProcAddr( instance, "vkCmdSetPrimitiveRestartEnableEXT" ) );
+ if ( !vkCmdSetPrimitiveRestartEnable )
+ vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT;
#if defined( VK_USE_PLATFORM_SCREEN_QNX )
//=== VK_QNX_screen_surface ===
@@ -12717,6 +13789,24 @@ namespace VULKAN_HPP_NAMESPACE
vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMultiEXT" ) );
vkCmdDrawMultiIndexedEXT =
PFN_vkCmdDrawMultiIndexedEXT( vkGetInstanceProcAddr( instance, "vkCmdDrawMultiIndexedEXT" ) );
+
+ //=== VK_EXT_pageable_device_local_memory ===
+ vkSetDeviceMemoryPriorityEXT =
+ PFN_vkSetDeviceMemoryPriorityEXT( vkGetInstanceProcAddr( instance, "vkSetDeviceMemoryPriorityEXT" ) );
+
+ //=== VK_KHR_maintenance4 ===
+ vkGetDeviceBufferMemoryRequirementsKHR = PFN_vkGetDeviceBufferMemoryRequirementsKHR(
+ vkGetInstanceProcAddr( instance, "vkGetDeviceBufferMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceBufferMemoryRequirements )
+ vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR;
+ vkGetDeviceImageMemoryRequirementsKHR = PFN_vkGetDeviceImageMemoryRequirementsKHR(
+ vkGetInstanceProcAddr( instance, "vkGetDeviceImageMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceImageMemoryRequirements )
+ vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR;
+ vkGetDeviceImageSparseMemoryRequirementsKHR = PFN_vkGetDeviceImageSparseMemoryRequirementsKHR(
+ vkGetInstanceProcAddr( instance, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceImageSparseMemoryRequirements )
+ vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR;
}
void init( VULKAN_HPP_NAMESPACE::Device deviceCpp ) VULKAN_HPP_NOEXCEPT
@@ -12914,6 +14004,56 @@ namespace VULKAN_HPP_NAMESPACE
vkGetDeviceMemoryOpaqueCaptureAddress = PFN_vkGetDeviceMemoryOpaqueCaptureAddress(
vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) );
+ //=== VK_VERSION_1_3 ===
+ vkCreatePrivateDataSlot = PFN_vkCreatePrivateDataSlot( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlot" ) );
+ vkDestroyPrivateDataSlot =
+ PFN_vkDestroyPrivateDataSlot( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlot" ) );
+ vkSetPrivateData = PFN_vkSetPrivateData( vkGetDeviceProcAddr( device, "vkSetPrivateData" ) );
+ vkGetPrivateData = PFN_vkGetPrivateData( vkGetDeviceProcAddr( device, "vkGetPrivateData" ) );
+ vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetDeviceProcAddr( device, "vkCmdSetEvent2" ) );
+ vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetDeviceProcAddr( device, "vkCmdResetEvent2" ) );
+ vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2" ) );
+ vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2" ) );
+ vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2" ) );
+ vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetDeviceProcAddr( device, "vkQueueSubmit2" ) );
+ vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2" ) );
+ vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetDeviceProcAddr( device, "vkCmdCopyImage2" ) );
+ vkCmdCopyBufferToImage2 = PFN_vkCmdCopyBufferToImage2( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2" ) );
+ vkCmdCopyImageToBuffer2 = PFN_vkCmdCopyImageToBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2" ) );
+ vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetDeviceProcAddr( device, "vkCmdBlitImage2" ) );
+ vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetDeviceProcAddr( device, "vkCmdResolveImage2" ) );
+ vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetDeviceProcAddr( device, "vkCmdBeginRendering" ) );
+ vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetDeviceProcAddr( device, "vkCmdEndRendering" ) );
+ vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetDeviceProcAddr( device, "vkCmdSetCullMode" ) );
+ vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetDeviceProcAddr( device, "vkCmdSetFrontFace" ) );
+ vkCmdSetPrimitiveTopology =
+ PFN_vkCmdSetPrimitiveTopology( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopology" ) );
+ vkCmdSetViewportWithCount =
+ PFN_vkCmdSetViewportWithCount( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCount" ) );
+ vkCmdSetScissorWithCount =
+ PFN_vkCmdSetScissorWithCount( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCount" ) );
+ vkCmdBindVertexBuffers2 = PFN_vkCmdBindVertexBuffers2( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2" ) );
+ vkCmdSetDepthTestEnable = PFN_vkCmdSetDepthTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnable" ) );
+ vkCmdSetDepthWriteEnable =
+ PFN_vkCmdSetDepthWriteEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnable" ) );
+ vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOp" ) );
+ vkCmdSetDepthBoundsTestEnable =
+ PFN_vkCmdSetDepthBoundsTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnable" ) );
+ vkCmdSetStencilTestEnable =
+ PFN_vkCmdSetStencilTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnable" ) );
+ vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetDeviceProcAddr( device, "vkCmdSetStencilOp" ) );
+ vkCmdSetRasterizerDiscardEnable =
+ PFN_vkCmdSetRasterizerDiscardEnable( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnable" ) );
+ vkCmdSetDepthBiasEnable = PFN_vkCmdSetDepthBiasEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnable" ) );
+ vkCmdSetPrimitiveRestartEnable =
+ PFN_vkCmdSetPrimitiveRestartEnable( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnable" ) );
+ vkGetDeviceBufferMemoryRequirements =
+ PFN_vkGetDeviceBufferMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirements" ) );
+ vkGetDeviceImageMemoryRequirements =
+ PFN_vkGetDeviceImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirements" ) );
+ vkGetDeviceImageSparseMemoryRequirements = PFN_vkGetDeviceImageSparseMemoryRequirements(
+ vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirements" ) );
+
//=== VK_KHR_swapchain ===
vkCreateSwapchainKHR = PFN_vkCreateSwapchainKHR( vkGetDeviceProcAddr( device, "vkCreateSwapchainKHR" ) );
vkDestroySwapchainKHR = PFN_vkDestroySwapchainKHR( vkGetDeviceProcAddr( device, "vkDestroySwapchainKHR" ) );
@@ -13006,6 +14146,14 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_AMD_shader_info ===
vkGetShaderInfoAMD = PFN_vkGetShaderInfoAMD( vkGetDeviceProcAddr( device, "vkGetShaderInfoAMD" ) );
+ //=== VK_KHR_dynamic_rendering ===
+ vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderingKHR" ) );
+ if ( !vkCmdBeginRendering )
+ vkCmdBeginRendering = vkCmdBeginRenderingKHR;
+ vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderingKHR" ) );
+ if ( !vkCmdEndRendering )
+ vkCmdEndRendering = vkCmdEndRenderingKHR;
+
#if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_NV_external_memory_win32 ===
vkGetMemoryWin32HandleNV =
@@ -13412,27 +14560,51 @@ namespace VULKAN_HPP_NAMESPACE
vkResetQueryPool = vkResetQueryPoolEXT;
//=== VK_EXT_extended_dynamic_state ===
- vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) );
+ vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) );
+ if ( !vkCmdSetCullMode )
+ vkCmdSetCullMode = vkCmdSetCullModeEXT;
vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) );
+ if ( !vkCmdSetFrontFace )
+ vkCmdSetFrontFace = vkCmdSetFrontFaceEXT;
vkCmdSetPrimitiveTopologyEXT =
PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) );
+ if ( !vkCmdSetPrimitiveTopology )
+ vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT;
vkCmdSetViewportWithCountEXT =
PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) );
+ if ( !vkCmdSetViewportWithCount )
+ vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT;
vkCmdSetScissorWithCountEXT =
PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) );
+ if ( !vkCmdSetScissorWithCount )
+ vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT;
vkCmdBindVertexBuffers2EXT =
PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) );
+ if ( !vkCmdBindVertexBuffers2 )
+ vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT;
vkCmdSetDepthTestEnableEXT =
PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) );
+ if ( !vkCmdSetDepthTestEnable )
+ vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT;
vkCmdSetDepthWriteEnableEXT =
PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) );
+ if ( !vkCmdSetDepthWriteEnable )
+ vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT;
vkCmdSetDepthCompareOpEXT =
PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) );
+ if ( !vkCmdSetDepthCompareOp )
+ vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT;
vkCmdSetDepthBoundsTestEnableEXT =
PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) );
+ if ( !vkCmdSetDepthBoundsTestEnable )
+ vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT;
vkCmdSetStencilTestEnableEXT =
PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) );
+ if ( !vkCmdSetStencilTestEnable )
+ vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT;
vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) );
+ if ( !vkCmdSetStencilOp )
+ vkCmdSetStencilOp = vkCmdSetStencilOpEXT;
//=== VK_KHR_deferred_host_operations ===
vkCreateDeferredOperationKHR =
@@ -13471,10 +14643,18 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_private_data ===
vkCreatePrivateDataSlotEXT =
PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) );
+ if ( !vkCreatePrivateDataSlot )
+ vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT;
vkDestroyPrivateDataSlotEXT =
PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) );
+ if ( !vkDestroyPrivateDataSlot )
+ vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT;
vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) );
+ if ( !vkSetPrivateData )
+ vkSetPrivateData = vkSetPrivateDataEXT;
vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) );
+ if ( !vkGetPrivateData )
+ vkGetPrivateData = vkGetPrivateDataEXT;
#if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_encode_queue ===
@@ -13482,13 +14662,25 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
//=== VK_KHR_synchronization2 ===
- vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) );
+ vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) );
+ if ( !vkCmdSetEvent2 )
+ vkCmdSetEvent2 = vkCmdSetEvent2KHR;
vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) );
+ if ( !vkCmdResetEvent2 )
+ vkCmdResetEvent2 = vkCmdResetEvent2KHR;
vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) );
+ if ( !vkCmdWaitEvents2 )
+ vkCmdWaitEvents2 = vkCmdWaitEvents2KHR;
vkCmdPipelineBarrier2KHR =
PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) );
+ if ( !vkCmdPipelineBarrier2 )
+ vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR;
vkCmdWriteTimestamp2KHR = PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) );
- vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) );
+ if ( !vkCmdWriteTimestamp2 )
+ vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR;
+ vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) );
+ if ( !vkQueueSubmit2 )
+ vkQueueSubmit2 = vkQueueSubmit2KHR;
vkCmdWriteBufferMarker2AMD =
PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) );
vkGetQueueCheckpointData2NV =
@@ -13500,13 +14692,25 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) );
- vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) );
+ if ( !vkCmdCopyBuffer2 )
+ vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR;
+ vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) );
+ if ( !vkCmdCopyImage2 )
+ vkCmdCopyImage2 = vkCmdCopyImage2KHR;
vkCmdCopyBufferToImage2KHR =
PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) );
+ if ( !vkCmdCopyBufferToImage2 )
+ vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR;
vkCmdCopyImageToBuffer2KHR =
PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) );
- vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) );
+ if ( !vkCmdCopyImageToBuffer2 )
+ vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR;
+ vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) );
+ if ( !vkCmdBlitImage2 )
+ vkCmdBlitImage2 = vkCmdBlitImage2KHR;
vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) );
+ if ( !vkCmdResolveImage2 )
+ vkCmdResolveImage2 = vkCmdResolveImage2KHR;
//=== VK_KHR_ray_tracing_pipeline ===
vkCmdTraceRaysKHR = PFN_vkCmdTraceRaysKHR( vkGetDeviceProcAddr( device, "vkCmdTraceRaysKHR" ) );
@@ -13542,6 +14746,20 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkGetSemaphoreZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetSemaphoreZirconHandleFUCHSIA" ) );
#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ vkCreateBufferCollectionFUCHSIA =
+ PFN_vkCreateBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkCreateBufferCollectionFUCHSIA" ) );
+ vkSetBufferCollectionImageConstraintsFUCHSIA = PFN_vkSetBufferCollectionImageConstraintsFUCHSIA(
+ vkGetDeviceProcAddr( device, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) );
+ vkSetBufferCollectionBufferConstraintsFUCHSIA = PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ vkGetDeviceProcAddr( device, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) );
+ vkDestroyBufferCollectionFUCHSIA =
+ PFN_vkDestroyBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkDestroyBufferCollectionFUCHSIA" ) );
+ vkGetBufferCollectionPropertiesFUCHSIA = PFN_vkGetBufferCollectionPropertiesFUCHSIA(
+ vkGetDeviceProcAddr( device, "vkGetBufferCollectionPropertiesFUCHSIA" ) );
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI = PFN_vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI(
vkGetDeviceProcAddr( device, "vkGetDeviceSubpassShadingMaxWorkgroupSizeHUAWEI" ) );
@@ -13561,11 +14779,17 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) );
vkCmdSetRasterizerDiscardEnableEXT =
PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) );
+ if ( !vkCmdSetRasterizerDiscardEnable )
+ vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT;
vkCmdSetDepthBiasEnableEXT =
PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) );
+ if ( !vkCmdSetDepthBiasEnable )
+ vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT;
vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) );
vkCmdSetPrimitiveRestartEnableEXT =
PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) );
+ if ( !vkCmdSetPrimitiveRestartEnable )
+ vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT;
//=== VK_EXT_color_write_enable ===
vkCmdSetColorWriteEnableEXT =
@@ -13575,474 +14799,25 @@ namespace VULKAN_HPP_NAMESPACE
vkCmdDrawMultiEXT = PFN_vkCmdDrawMultiEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiEXT" ) );
vkCmdDrawMultiIndexedEXT =
PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) );
- }
- };
-} // namespace VULKAN_HPP_NAMESPACE
-
-namespace std
-{
- //=======================
- //=== HASH structures ===
- //=======================
-
- template <typename BitType>
- struct hash<VULKAN_HPP_NAMESPACE::Flags<BitType>>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Flags<BitType> const & flags ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<typename std::underlying_type<BitType>::type>{}(
- static_cast<typename std::underlying_type<BitType>::type>( flags ) );
- }
- };
-
- //=== VK_VERSION_1_0 ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Instance>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Instance const & instance ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkInstance>{}( static_cast<VkInstance>( instance ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevice>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice const & physicalDevice ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkPhysicalDevice>{}( static_cast<VkPhysicalDevice>( physicalDevice ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Device>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Device const & device ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDevice>{}( static_cast<VkDevice>( device ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Queue>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Queue const & queue ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkQueue>{}( static_cast<VkQueue>( queue ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DeviceMemory>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemory const & deviceMemory ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDeviceMemory>{}( static_cast<VkDeviceMemory>( deviceMemory ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Fence>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Fence const & fence ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkFence>{}( static_cast<VkFence>( fence ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Semaphore>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Semaphore const & semaphore ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkSemaphore>{}( static_cast<VkSemaphore>( semaphore ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Event>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Event const & event ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkEvent>{}( static_cast<VkEvent>( event ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::QueryPool>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPool const & queryPool ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkQueryPool>{}( static_cast<VkQueryPool>( queryPool ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Buffer>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Buffer const & buffer ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkBuffer>{}( static_cast<VkBuffer>( buffer ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::BufferView>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferView const & bufferView ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkBufferView>{}( static_cast<VkBufferView>( bufferView ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Image>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Image const & image ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkImage>{}( static_cast<VkImage>( image ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::ImageView>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageView const & imageView ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkImageView>{}( static_cast<VkImageView>( imageView ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::ShaderModule>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModule const & shaderModule ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkShaderModule>{}( static_cast<VkShaderModule>( shaderModule ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::PipelineCache>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCache const & pipelineCache ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkPipelineCache>{}( static_cast<VkPipelineCache>( pipelineCache ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Pipeline>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Pipeline const & pipeline ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkPipeline>{}( static_cast<VkPipeline>( pipeline ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::PipelineLayout>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayout const & pipelineLayout ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkPipelineLayout>{}( static_cast<VkPipelineLayout>( pipelineLayout ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Sampler>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Sampler const & sampler ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkSampler>{}( static_cast<VkSampler>( sampler ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DescriptorPool>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPool const & descriptorPool ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDescriptorPool>{}( static_cast<VkDescriptorPool>( descriptorPool ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DescriptorSet>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSet const & descriptorSet ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDescriptorSet>{}( static_cast<VkDescriptorSet>( descriptorSet ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetLayout>
- {
- std::size_t
- operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayout const & descriptorSetLayout ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDescriptorSetLayout>{}( static_cast<VkDescriptorSetLayout>( descriptorSetLayout ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::Framebuffer>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::Framebuffer const & framebuffer ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkFramebuffer>{}( static_cast<VkFramebuffer>( framebuffer ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::RenderPass>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPass const & renderPass ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkRenderPass>{}( static_cast<VkRenderPass>( renderPass ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::CommandPool>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandPool const & commandPool ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkCommandPool>{}( static_cast<VkCommandPool>( commandPool ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::CommandBuffer>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBuffer const & commandBuffer ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkCommandBuffer>{}( static_cast<VkCommandBuffer>( commandBuffer ) );
- }
- };
- //=== VK_VERSION_1_1 ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & samplerYcbcrConversion ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkSamplerYcbcrConversion>{}( static_cast<VkSamplerYcbcrConversion>( samplerYcbcrConversion ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const & descriptorUpdateTemplate ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDescriptorUpdateTemplate>{}(
- static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ) );
- }
- };
-
- //=== VK_KHR_surface ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::SurfaceKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceKHR const & surfaceKHR ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkSurfaceKHR>{}( static_cast<VkSurfaceKHR>( surfaceKHR ) );
- }
- };
-
- //=== VK_KHR_swapchain ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::SwapchainKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainKHR const & swapchainKHR ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkSwapchainKHR>{}( static_cast<VkSwapchainKHR>( swapchainKHR ) );
- }
- };
-
- //=== VK_KHR_display ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DisplayKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayKHR const & displayKHR ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDisplayKHR>{}( static_cast<VkDisplayKHR>( displayKHR ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DisplayModeKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeKHR const & displayModeKHR ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDisplayModeKHR>{}( static_cast<VkDisplayModeKHR>( displayModeKHR ) );
- }
- };
-
- //=== VK_EXT_debug_report ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & debugReportCallbackEXT ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDebugReportCallbackEXT>{}( static_cast<VkDebugReportCallbackEXT>( debugReportCallbackEXT ) );
+ //=== VK_EXT_pageable_device_local_memory ===
+ vkSetDeviceMemoryPriorityEXT =
+ PFN_vkSetDeviceMemoryPriorityEXT( vkGetDeviceProcAddr( device, "vkSetDeviceMemoryPriorityEXT" ) );
+
+ //=== VK_KHR_maintenance4 ===
+ vkGetDeviceBufferMemoryRequirementsKHR = PFN_vkGetDeviceBufferMemoryRequirementsKHR(
+ vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceBufferMemoryRequirements )
+ vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR;
+ vkGetDeviceImageMemoryRequirementsKHR = PFN_vkGetDeviceImageMemoryRequirementsKHR(
+ vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceImageMemoryRequirements )
+ vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR;
+ vkGetDeviceImageSparseMemoryRequirementsKHR = PFN_vkGetDeviceImageSparseMemoryRequirementsKHR(
+ vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceImageSparseMemoryRequirements )
+ vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR;
}
};
-
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- //=== VK_KHR_video_queue ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::VideoSessionKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionKHR const & videoSessionKHR ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkVideoSessionKHR>{}( static_cast<VkVideoSessionKHR>( videoSessionKHR ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & videoSessionParametersKHR ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkVideoSessionParametersKHR>{}(
- static_cast<VkVideoSessionParametersKHR>( videoSessionParametersKHR ) );
- }
- };
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
-
- //=== VK_NVX_binary_import ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::CuModuleNVX>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleNVX const & cuModuleNVX ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkCuModuleNVX>{}( static_cast<VkCuModuleNVX>( cuModuleNVX ) );
- }
- };
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::CuFunctionNVX>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionNVX const & cuFunctionNVX ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkCuFunctionNVX>{}( static_cast<VkCuFunctionNVX>( cuFunctionNVX ) );
- }
- };
-
- //=== VK_EXT_debug_utils ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & debugUtilsMessengerEXT ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDebugUtilsMessengerEXT>{}( static_cast<VkDebugUtilsMessengerEXT>( debugUtilsMessengerEXT ) );
- }
- };
-
- //=== VK_KHR_acceleration_structure ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & accelerationStructureKHR ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkAccelerationStructureKHR>{}(
- static_cast<VkAccelerationStructureKHR>( accelerationStructureKHR ) );
- }
- };
-
- //=== VK_EXT_validation_cache ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::ValidationCacheEXT>
- {
- std::size_t
- operator()( VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & validationCacheEXT ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkValidationCacheEXT>{}( static_cast<VkValidationCacheEXT>( validationCacheEXT ) );
- }
- };
-
- //=== VK_NV_ray_tracing ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureNV>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & accelerationStructureNV ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkAccelerationStructureNV>{}(
- static_cast<VkAccelerationStructureNV>( accelerationStructureNV ) );
- }
- };
-
- //=== VK_INTEL_performance_query ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & performanceConfigurationINTEL )
- const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkPerformanceConfigurationINTEL>{}(
- static_cast<VkPerformanceConfigurationINTEL>( performanceConfigurationINTEL ) );
- }
- };
-
- //=== VK_KHR_deferred_host_operations ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::DeferredOperationKHR>
- {
- std::size_t
- operator()( VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & deferredOperationKHR ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkDeferredOperationKHR>{}( static_cast<VkDeferredOperationKHR>( deferredOperationKHR ) );
- }
- };
-
- //=== VK_NV_device_generated_commands ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV>
- {
- std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & indirectCommandsLayoutNV ) const
- VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkIndirectCommandsLayoutNV>{}(
- static_cast<VkIndirectCommandsLayoutNV>( indirectCommandsLayoutNV ) );
- }
- };
-
- //=== VK_EXT_private_data ===
-
- template <>
- struct hash<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT>
- {
- std::size_t
- operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT const & privateDataSlotEXT ) const VULKAN_HPP_NOEXCEPT
- {
- return std::hash<VkPrivateDataSlotEXT>{}( static_cast<VkPrivateDataSlotEXT>( privateDataSlotEXT ) );
- }
- };
-
-} // namespace std
+} // namespace VULKAN_HPP_NAMESPACE
#endif
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_android.h b/thirdparty/vulkan/include/vulkan/vulkan_android.h
index 2160e3e7c6..de79d382f2 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_android.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_android.h
@@ -2,7 +2,7 @@
#define VULKAN_ANDROID_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
@@ -44,7 +44,7 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateAndroidSurfaceKHR(
#define VK_ANDROID_external_memory_android_hardware_buffer 1
struct AHardwareBuffer;
-#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 3
+#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_SPEC_VERSION 4
#define VK_ANDROID_EXTERNAL_MEMORY_ANDROID_HARDWARE_BUFFER_EXTENSION_NAME "VK_ANDROID_external_memory_android_hardware_buffer"
typedef struct VkAndroidHardwareBufferUsageANDROID {
VkStructureType sType;
@@ -90,6 +90,19 @@ typedef struct VkExternalFormatANDROID {
uint64_t externalFormat;
} VkExternalFormatANDROID;
+typedef struct VkAndroidHardwareBufferFormatProperties2ANDROID {
+ VkStructureType sType;
+ void* pNext;
+ VkFormat format;
+ uint64_t externalFormat;
+ VkFormatFeatureFlags2 formatFeatures;
+ VkComponentMapping samplerYcbcrConversionComponents;
+ VkSamplerYcbcrModelConversion suggestedYcbcrModel;
+ VkSamplerYcbcrRange suggestedYcbcrRange;
+ VkChromaLocation suggestedXChromaOffset;
+ VkChromaLocation suggestedYChromaOffset;
+} VkAndroidHardwareBufferFormatProperties2ANDROID;
+
typedef VkResult (VKAPI_PTR *PFN_vkGetAndroidHardwareBufferPropertiesANDROID)(VkDevice device, const struct AHardwareBuffer* buffer, VkAndroidHardwareBufferPropertiesANDROID* pProperties);
typedef VkResult (VKAPI_PTR *PFN_vkGetMemoryAndroidHardwareBufferANDROID)(VkDevice device, const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo, struct AHardwareBuffer** pBuffer);
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_beta.h b/thirdparty/vulkan/include/vulkan/vulkan_beta.h
index e2337adfde..53294f8b90 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_beta.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_beta.h
@@ -2,7 +2,7 @@
#define VULKAN_BETA_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
@@ -38,6 +38,9 @@ typedef enum VkVideoCodecOperationFlagBitsKHR {
VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT = 0x00010000,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT = 0x00020000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT = 0x00000001,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
@@ -90,13 +93,18 @@ typedef enum VkVideoCodingControlFlagBitsKHR {
typedef VkFlags VkVideoCodingControlFlagsKHR;
typedef enum VkVideoCodingQualityPresetFlagBitsKHR {
- VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR = 0,
VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR = 0x00000001,
VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR = 0x00000002,
VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR = 0x00000004,
VK_VIDEO_CODING_QUALITY_PRESET_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoCodingQualityPresetFlagBitsKHR;
typedef VkFlags VkVideoCodingQualityPresetFlagsKHR;
+typedef struct VkQueueFamilyQueryResultStatusProperties2KHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 supported;
+} VkQueueFamilyQueryResultStatusProperties2KHR;
+
typedef struct VkVideoQueueFamilyProperties2KHR {
VkStructureType sType;
void* pNext;
@@ -305,7 +313,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdControlVideoCodingKHR(
#define VK_KHR_video_decode_queue 1
-#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 1
+#define VK_KHR_VIDEO_DECODE_QUEUE_SPEC_VERSION 2
#define VK_KHR_VIDEO_DECODE_QUEUE_EXTENSION_NAME "VK_KHR_video_decode_queue"
typedef enum VkVideoDecodeFlagBitsKHR {
@@ -370,7 +378,7 @@ typedef struct VkPhysicalDevicePortabilitySubsetPropertiesKHR {
#define VK_KHR_video_encode_queue 1
-#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 2
+#define VK_KHR_VIDEO_ENCODE_QUEUE_SPEC_VERSION 3
#define VK_KHR_VIDEO_ENCODE_QUEUE_EXTENSION_NAME "VK_KHR_video_encode_queue"
typedef enum VkVideoEncodeFlagBitsKHR {
@@ -382,7 +390,7 @@ typedef VkFlags VkVideoEncodeFlagsKHR;
typedef enum VkVideoEncodeRateControlFlagBitsKHR {
VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR = 0,
- VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR = 0x00000001,
+ VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR = 0x00000001,
VK_VIDEO_ENCODE_RATE_CONTROL_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
} VkVideoEncodeRateControlFlagBitsKHR;
typedef VkFlags VkVideoEncodeRateControlFlagsKHR;
@@ -407,18 +415,27 @@ typedef struct VkVideoEncodeInfoKHR {
const VkVideoReferenceSlotKHR* pSetupReferenceSlot;
uint32_t referenceSlotCount;
const VkVideoReferenceSlotKHR* pReferenceSlots;
+ uint32_t precedingExternallyEncodedBytes;
} VkVideoEncodeInfoKHR;
+typedef struct VkVideoEncodeRateControlLayerInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t averageBitrate;
+ uint32_t maxBitrate;
+ uint32_t frameRateNumerator;
+ uint32_t frameRateDenominator;
+ uint32_t virtualBufferSizeInMs;
+ uint32_t initialVirtualBufferSizeInMs;
+} VkVideoEncodeRateControlLayerInfoKHR;
+
typedef struct VkVideoEncodeRateControlInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkVideoEncodeRateControlFlagsKHR flags;
- VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode;
- uint32_t averageBitrate;
- uint16_t peakToAverageBitrateRatio;
- uint16_t frameRateNumerator;
- uint16_t frameRateDenominator;
- uint32_t virtualBufferSizeInMs;
+ VkStructureType sType;
+ const void* pNext;
+ VkVideoEncodeRateControlFlagsKHR flags;
+ VkVideoEncodeRateControlModeFlagBitsKHR rateControlMode;
+ uint8_t layerCount;
+ const VkVideoEncodeRateControlLayerInfoKHR* pLayerConfigs;
} VkVideoEncodeRateControlInfoKHR;
typedef void (VKAPI_PTR *PFN_vkCmdEncodeVideoKHR)(VkCommandBuffer commandBuffer, const VkVideoEncodeInfoKHR* pEncodeInfo);
@@ -433,7 +450,7 @@ VKAPI_ATTR void VKAPI_CALL vkCmdEncodeVideoKHR(
#define VK_EXT_video_encode_h264 1
#include "vk_video/vulkan_video_codec_h264std.h"
#include "vk_video/vulkan_video_codec_h264std_encode.h"
-#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 2
+#define VK_EXT_VIDEO_ENCODE_H264_SPEC_VERSION 3
#define VK_EXT_VIDEO_ENCODE_H264_EXTENSION_NAME "VK_EXT_video_encode_h264"
typedef enum VkVideoEncodeH264CapabilityFlagBitsEXT {
@@ -474,6 +491,14 @@ typedef enum VkVideoEncodeH264CreateFlagBitsEXT {
VK_VIDEO_ENCODE_H264_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
} VkVideoEncodeH264CreateFlagBitsEXT;
typedef VkFlags VkVideoEncodeH264CreateFlagsEXT;
+
+typedef enum VkVideoEncodeH264RateControlStructureFlagBitsEXT {
+ VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
+ VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001,
+ VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002,
+ VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH264RateControlStructureFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH264RateControlStructureFlagsEXT;
typedef struct VkVideoEncodeH264CapabilitiesEXT {
VkStructureType sType;
const void* pNext;
@@ -531,9 +556,6 @@ typedef struct VkVideoEncodeH264NaluSliceEXT {
const VkVideoEncodeH264DpbSlotInfoEXT* pRefFinalList0Entries;
uint8_t refFinalList1EntryCount;
const VkVideoEncodeH264DpbSlotInfoEXT* pRefFinalList1Entries;
- uint32_t precedingNaluBytes;
- uint8_t minQp;
- uint8_t maxQp;
} VkVideoEncodeH264NaluSliceEXT;
typedef struct VkVideoEncodeH264VclFrameInfoEXT {
@@ -563,6 +585,214 @@ typedef struct VkVideoEncodeH264ProfileEXT {
StdVideoH264ProfileIdc stdProfileIdc;
} VkVideoEncodeH264ProfileEXT;
+typedef struct VkVideoEncodeH264RateControlInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t gopFrameCount;
+ uint32_t idrPeriod;
+ uint32_t consecutiveBFrameCount;
+ VkVideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure;
+ uint8_t temporalLayerCount;
+} VkVideoEncodeH264RateControlInfoEXT;
+
+typedef struct VkVideoEncodeH264QpEXT {
+ int32_t qpI;
+ int32_t qpP;
+ int32_t qpB;
+} VkVideoEncodeH264QpEXT;
+
+typedef struct VkVideoEncodeH264FrameSizeEXT {
+ uint32_t frameISize;
+ uint32_t framePSize;
+ uint32_t frameBSize;
+} VkVideoEncodeH264FrameSizeEXT;
+
+typedef struct VkVideoEncodeH264RateControlLayerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint8_t temporalLayerId;
+ VkBool32 useInitialRcQp;
+ VkVideoEncodeH264QpEXT initialRcQp;
+ VkBool32 useMinQp;
+ VkVideoEncodeH264QpEXT minQp;
+ VkBool32 useMaxQp;
+ VkVideoEncodeH264QpEXT maxQp;
+ VkBool32 useMaxFrameSize;
+ VkVideoEncodeH264FrameSizeEXT maxFrameSize;
+} VkVideoEncodeH264RateControlLayerInfoEXT;
+
+
+
+#define VK_EXT_video_encode_h265 1
+#include "vk_video/vulkan_video_codec_h265std.h"
+#include "vk_video/vulkan_video_codec_h265std_encode.h"
+#define VK_EXT_VIDEO_ENCODE_H265_SPEC_VERSION 4
+#define VK_EXT_VIDEO_ENCODE_H265_EXTENSION_NAME "VK_EXT_video_encode_h265"
+typedef VkFlags VkVideoEncodeH265CapabilityFlagsEXT;
+
+typedef enum VkVideoEncodeH265InputModeFlagBitsEXT {
+ VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT = 0x00000001,
+ VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
+ VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
+ VK_VIDEO_ENCODE_H265_INPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH265InputModeFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH265InputModeFlagsEXT;
+
+typedef enum VkVideoEncodeH265OutputModeFlagBitsEXT {
+ VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT = 0x00000001,
+ VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT = 0x00000002,
+ VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT = 0x00000004,
+ VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH265OutputModeFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH265OutputModeFlagsEXT;
+typedef VkFlags VkVideoEncodeH265CreateFlagsEXT;
+
+typedef enum VkVideoEncodeH265CtbSizeFlagBitsEXT {
+ VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT = 0x00000001,
+ VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT = 0x00000002,
+ VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT = 0x00000004,
+ VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT = 0x00000008,
+ VK_VIDEO_ENCODE_H265_CTB_SIZE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH265CtbSizeFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH265CtbSizeFlagsEXT;
+
+typedef enum VkVideoEncodeH265RateControlStructureFlagBitsEXT {
+ VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT = 0,
+ VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT = 0x00000001,
+ VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT = 0x00000002,
+ VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
+} VkVideoEncodeH265RateControlStructureFlagBitsEXT;
+typedef VkFlags VkVideoEncodeH265RateControlStructureFlagsEXT;
+typedef struct VkVideoEncodeH265CapabilitiesEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkVideoEncodeH265CapabilityFlagsEXT flags;
+ VkVideoEncodeH265InputModeFlagsEXT inputModeFlags;
+ VkVideoEncodeH265OutputModeFlagsEXT outputModeFlags;
+ VkVideoEncodeH265CtbSizeFlagsEXT ctbSizes;
+ VkExtent2D inputImageDataAlignment;
+ uint8_t maxNumL0ReferenceForP;
+ uint8_t maxNumL0ReferenceForB;
+ uint8_t maxNumL1Reference;
+ uint8_t maxNumSubLayers;
+ uint8_t qualityLevelCount;
+ VkExtensionProperties stdExtensionVersion;
+} VkVideoEncodeH265CapabilitiesEXT;
+
+typedef struct VkVideoEncodeH265SessionCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkVideoEncodeH265CreateFlagsEXT flags;
+ const VkExtensionProperties* pStdExtensionVersion;
+} VkVideoEncodeH265SessionCreateInfoEXT;
+
+typedef struct VkVideoEncodeH265SessionParametersAddInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t vpsStdCount;
+ const StdVideoH265VideoParameterSet* pVpsStd;
+ uint32_t spsStdCount;
+ const StdVideoH265SequenceParameterSet* pSpsStd;
+ uint32_t ppsStdCount;
+ const StdVideoH265PictureParameterSet* pPpsStd;
+} VkVideoEncodeH265SessionParametersAddInfoEXT;
+
+typedef struct VkVideoEncodeH265SessionParametersCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t maxVpsStdCount;
+ uint32_t maxSpsStdCount;
+ uint32_t maxPpsStdCount;
+ const VkVideoEncodeH265SessionParametersAddInfoEXT* pParametersAddInfo;
+} VkVideoEncodeH265SessionParametersCreateInfoEXT;
+
+typedef struct VkVideoEncodeH265DpbSlotInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ int8_t slotIndex;
+ const StdVideoEncodeH265ReferenceInfo* pStdReferenceInfo;
+} VkVideoEncodeH265DpbSlotInfoEXT;
+
+typedef struct VkVideoEncodeH265ReferenceListsEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint8_t referenceList0EntryCount;
+ const VkVideoEncodeH265DpbSlotInfoEXT* pReferenceList0Entries;
+ uint8_t referenceList1EntryCount;
+ const VkVideoEncodeH265DpbSlotInfoEXT* pReferenceList1Entries;
+ const StdVideoEncodeH265ReferenceModifications* pReferenceModifications;
+} VkVideoEncodeH265ReferenceListsEXT;
+
+typedef struct VkVideoEncodeH265NaluSliceSegmentEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t ctbCount;
+ const VkVideoEncodeH265ReferenceListsEXT* pReferenceFinalLists;
+ const StdVideoEncodeH265SliceSegmentHeader* pSliceSegmentHeaderStd;
+} VkVideoEncodeH265NaluSliceSegmentEXT;
+
+typedef struct VkVideoEncodeH265VclFrameInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ const VkVideoEncodeH265ReferenceListsEXT* pReferenceFinalLists;
+ uint32_t naluSliceSegmentEntryCount;
+ const VkVideoEncodeH265NaluSliceSegmentEXT* pNaluSliceSegmentEntries;
+ const StdVideoEncodeH265PictureInfo* pCurrentPictureInfo;
+} VkVideoEncodeH265VclFrameInfoEXT;
+
+typedef struct VkVideoEncodeH265EmitPictureParametersEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint8_t vpsId;
+ uint8_t spsId;
+ VkBool32 emitVpsEnable;
+ VkBool32 emitSpsEnable;
+ uint32_t ppsIdEntryCount;
+ const uint8_t* ppsIdEntries;
+} VkVideoEncodeH265EmitPictureParametersEXT;
+
+typedef struct VkVideoEncodeH265ProfileEXT {
+ VkStructureType sType;
+ const void* pNext;
+ StdVideoH265ProfileIdc stdProfileIdc;
+} VkVideoEncodeH265ProfileEXT;
+
+typedef struct VkVideoEncodeH265RateControlInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t gopFrameCount;
+ uint32_t idrPeriod;
+ uint32_t consecutiveBFrameCount;
+ VkVideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure;
+ uint8_t subLayerCount;
+} VkVideoEncodeH265RateControlInfoEXT;
+
+typedef struct VkVideoEncodeH265QpEXT {
+ int32_t qpI;
+ int32_t qpP;
+ int32_t qpB;
+} VkVideoEncodeH265QpEXT;
+
+typedef struct VkVideoEncodeH265FrameSizeEXT {
+ uint32_t frameISize;
+ uint32_t framePSize;
+ uint32_t frameBSize;
+} VkVideoEncodeH265FrameSizeEXT;
+
+typedef struct VkVideoEncodeH265RateControlLayerInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ uint8_t temporalId;
+ VkBool32 useInitialRcQp;
+ VkVideoEncodeH265QpEXT initialRcQp;
+ VkBool32 useMinQp;
+ VkVideoEncodeH265QpEXT minQp;
+ VkBool32 useMaxQp;
+ VkVideoEncodeH265QpEXT maxQp;
+ VkBool32 useMaxFrameSize;
+ VkVideoEncodeH265FrameSizeEXT maxFrameSize;
+} VkVideoEncodeH265RateControlLayerInfoEXT;
+
#define VK_EXT_video_decode_h264 1
@@ -640,7 +870,6 @@ typedef struct VkVideoDecodeH264DpbSlotInfoEXT {
#define VK_EXT_video_decode_h265 1
-#include "vk_video/vulkan_video_codec_h265std.h"
#include "vk_video/vulkan_video_codec_h265std_decode.h"
#define VK_EXT_VIDEO_DECODE_H265_SPEC_VERSION 1
#define VK_EXT_VIDEO_DECODE_H265_EXTENSION_NAME "VK_EXT_video_decode_h265"
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_core.h b/thirdparty/vulkan/include/vulkan/vulkan_core.h
index 36013cbed7..2771094554 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_core.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_core.h
@@ -2,7 +2,7 @@
#define VULKAN_CORE_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
@@ -72,10 +72,10 @@ extern "C" {
#define VK_API_VERSION_1_0 VK_MAKE_API_VERSION(0, 1, 0, 0)// Patch version should always be set to 0
// Version of this file
-#define VK_HEADER_VERSION 190
+#define VK_HEADER_VERSION 205
// Complete version of this file
-#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 2, VK_HEADER_VERSION)
+#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 3, VK_HEADER_VERSION)
// DEPRECATED: This define is deprecated. VK_API_VERSION_MAJOR should be used instead.
#define VK_VERSION_MAJOR(version) ((uint32_t)(version) >> 22)
@@ -160,6 +160,7 @@ typedef enum VkResult {
VK_ERROR_INVALID_EXTERNAL_HANDLE = -1000072003,
VK_ERROR_FRAGMENTATION = -1000161000,
VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS = -1000257000,
+ VK_PIPELINE_COMPILE_REQUIRED = 1000297000,
VK_ERROR_SURFACE_LOST_KHR = -1000000000,
VK_ERROR_NATIVE_WINDOW_IN_USE_KHR = -1000000001,
VK_SUBOPTIMAL_KHR = 1000001003,
@@ -168,19 +169,20 @@ typedef enum VkResult {
VK_ERROR_VALIDATION_FAILED_EXT = -1000011001,
VK_ERROR_INVALID_SHADER_NV = -1000012000,
VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT = -1000158000,
- VK_ERROR_NOT_PERMITTED_EXT = -1000174001,
+ VK_ERROR_NOT_PERMITTED_KHR = -1000174001,
VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT = -1000255000,
VK_THREAD_IDLE_KHR = 1000268000,
VK_THREAD_DONE_KHR = 1000268001,
VK_OPERATION_DEFERRED_KHR = 1000268002,
VK_OPERATION_NOT_DEFERRED_KHR = 1000268003,
- VK_PIPELINE_COMPILE_REQUIRED_EXT = 1000297000,
VK_ERROR_OUT_OF_POOL_MEMORY_KHR = VK_ERROR_OUT_OF_POOL_MEMORY,
VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR = VK_ERROR_INVALID_EXTERNAL_HANDLE,
VK_ERROR_FRAGMENTATION_EXT = VK_ERROR_FRAGMENTATION,
+ VK_ERROR_NOT_PERMITTED_EXT = VK_ERROR_NOT_PERMITTED_KHR,
VK_ERROR_INVALID_DEVICE_ADDRESS_EXT = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
- VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED_EXT,
+ VK_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED,
+ VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT = VK_PIPELINE_COMPILE_REQUIRED,
VK_RESULT_MAX_ENUM = 0x7FFFFFFF
} VkResult;
@@ -349,6 +351,58 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO = 1000257002,
VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO = 1000257003,
VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO = 1000257004,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES = 53,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES = 54,
+ VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO = 1000192000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES = 1000215000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES = 1000245000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES = 1000276000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES = 1000295000,
+ VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO = 1000295001,
+ VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO = 1000295002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES = 1000297000,
+ VK_STRUCTURE_TYPE_MEMORY_BARRIER_2 = 1000314000,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2 = 1000314001,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2 = 1000314002,
+ VK_STRUCTURE_TYPE_DEPENDENCY_INFO = 1000314003,
+ VK_STRUCTURE_TYPE_SUBMIT_INFO_2 = 1000314004,
+ VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO = 1000314005,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO = 1000314006,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES = 1000314007,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES = 1000325000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES = 1000335000,
+ VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2 = 1000337000,
+ VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2 = 1000337001,
+ VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2 = 1000337002,
+ VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2 = 1000337003,
+ VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2 = 1000337004,
+ VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2 = 1000337005,
+ VK_STRUCTURE_TYPE_BUFFER_COPY_2 = 1000337006,
+ VK_STRUCTURE_TYPE_IMAGE_COPY_2 = 1000337007,
+ VK_STRUCTURE_TYPE_IMAGE_BLIT_2 = 1000337008,
+ VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2 = 1000337009,
+ VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2 = 1000337010,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES = 1000225000,
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO = 1000225001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES = 1000225002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES = 1000138000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES = 1000138001,
+ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK = 1000138002,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO = 1000138003,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES = 1000066000,
+ VK_STRUCTURE_TYPE_RENDERING_INFO = 1000044000,
+ VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO = 1000044001,
+ VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO = 1000044002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES = 1000044003,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO = 1000044004,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES = 1000280000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES = 1000280001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES = 1000281001,
+ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3 = 1000360000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES = 1000413000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES = 1000413001,
+ VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS = 1000413002,
+ VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS = 1000413003,
VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR = 1000001000,
VK_STRUCTURE_TYPE_PRESENT_INFO_KHR = 1000001001,
VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR = 1000060007,
@@ -419,6 +473,9 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR = 1000023015,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR = 1000023016,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR = 1000024000,
#endif
VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV = 1000026000,
@@ -460,6 +517,48 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT = 1000038008,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT = 1000038009,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT = 1000038010,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT = 1000039000,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT = 1000039001,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT = 1000039002,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT = 1000039003,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT = 1000039004,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT = 1000039005,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_EXT = 1000039006,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT = 1000039007,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT = 1000039008,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT = 1000039009,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT = 1000039010,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT = 1000039011,
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT = 1000040000,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
@@ -484,6 +583,10 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT = 1000040007,
#endif
VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD = 1000041000,
+ VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000044006,
+ VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT = 1000044007,
+ VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD = 1000044008,
+ VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX = 1000044009,
VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP = 1000049000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV = 1000050000,
VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV = 1000056000,
@@ -493,7 +596,6 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV = 1000058000,
VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT = 1000061000,
VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN = 1000062000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = 1000066000,
VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT = 1000067000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT = 1000067001,
VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR = 1000073000,
@@ -565,10 +667,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129003,
VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID = 1000129004,
VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID = 1000129005,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = 1000138000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = 1000138001,
- VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = 1000138002,
- VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = 1000138003,
+ VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID = 1000129006,
VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT = 1000143000,
VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT = 1000143001,
VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT = 1000143002,
@@ -607,6 +706,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT = 1000158003,
VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT = 1000158004,
VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT = 1000158005,
+ VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT = 1000158006,
VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160000,
VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT = 1000160001,
#ifdef VK_ENABLE_BETA_EXTENSIONS
@@ -634,7 +734,6 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV = 1000166001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT = 1000170000,
VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT = 1000170001,
- VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = 1000174000,
VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT = 1000178000,
VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT = 1000178001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT = 1000178002,
@@ -663,12 +762,14 @@ typedef enum VkStructureType {
#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT = 1000187006,
#endif
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR = 1000174000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR = 1000388000,
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR = 1000388001,
VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD = 1000189000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT = 1000190000,
VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT = 1000190001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT = 1000190002,
VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP = 1000191000,
- VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = 1000192000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV = 1000201000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV = 1000202000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV = 1000202001,
@@ -689,14 +790,10 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD = 1000213000,
VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD = 1000213001,
VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA = 1000214000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = 1000215000,
VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT = 1000217000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT = 1000218000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT = 1000218001,
VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT = 1000218002,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = 1000225000,
- VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = 1000225001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = 1000225002,
VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR = 1000226000,
VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR = 1000226001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR = 1000226002,
@@ -712,7 +809,6 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV = 1000240000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT = 1000244000,
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT = 1000244002,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = 1000245000,
VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT = 1000247000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR = 1000248000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV = 1000249000,
@@ -743,7 +839,6 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR = 1000269004,
VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR = 1000269005,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT = 1000273000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = 1000276000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV = 1000277000,
VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV = 1000277001,
VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV = 1000277002,
@@ -754,10 +849,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV = 1000277007,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV = 1000278000,
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV = 1000278001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = 1000280000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = 1000280001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT = 1000281000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = 1000281001,
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM = 1000282000,
VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM = 1000282001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT = 1000284000,
@@ -771,30 +863,20 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR = 1000290000,
VK_STRUCTURE_TYPE_PRESENT_ID_KHR = 1000294000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR = 1000294001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = 1000295000,
- VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = 1000295001,
- VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = 1000295002,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = 1000297000,
#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR = 1000299000,
#endif
#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR = 1000299001,
#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR = 1000299002,
+#endif
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV = 1000300000,
VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV = 1000300001,
- VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = 1000314000,
- VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = 1000314001,
- VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = 1000314002,
- VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = 1000314003,
- VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = 1000314004,
- VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = 1000314005,
- VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = 1000314006,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = 1000314007,
VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV = 1000314008,
VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV = 1000314009,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR = 1000323000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = 1000325000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV = 1000326000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV = 1000326001,
VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV = 1000326002,
@@ -805,20 +887,10 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT = 1000332000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT = 1000332001,
VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM = 1000333000,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = 1000335000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR = 1000336000,
- VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = 1000337000,
- VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = 1000337001,
- VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = 1000337002,
- VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = 1000337003,
- VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = 1000337004,
- VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = 1000337005,
- VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = 1000337006,
- VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = 1000337007,
- VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = 1000337008,
- VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = 1000337009,
- VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = 1000337010,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT = 1000340000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM = 1000342000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT = 1000344000,
VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT = 1000346000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE = 1000351000,
VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE = 1000351002,
@@ -826,12 +898,24 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT = 1000352001,
VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT = 1000352002,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT = 1000353000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT = 1000355000,
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT = 1000355001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT = 1000356000,
VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364000,
VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA = 1000364001,
VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000364002,
VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365000,
VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA = 1000365001,
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA = 1000366000,
+ VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA = 1000366001,
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA = 1000366002,
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA = 1000366003,
+ VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA = 1000366004,
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA = 1000366005,
+ VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA = 1000366006,
+ VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA = 1000366007,
+ VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA = 1000366008,
+ VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA = 1000366009,
VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI = 1000369000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI = 1000369001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI = 1000369002,
@@ -842,13 +926,26 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX = 1000378000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT = 1000381000,
VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT = 1000381001,
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = 1000388000,
- VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = 1000388001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT = 1000391000,
+ VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT = 1000391001,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT = 1000392000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT = 1000392001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT = 1000411000,
+ VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT = 1000411001,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT = 1000412000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM = 1000425000,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM = 1000425001,
+ VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM = 1000425002,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV = 1000430000,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES,
VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT,
+ VK_STRUCTURE_TYPE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_INFO,
+ VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
+ VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO,
+ VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD,
VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES,
@@ -868,6 +965,7 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO,
VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO,
VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES,
VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO,
@@ -910,6 +1008,10 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES,
VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES,
+ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK,
+ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO,
VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2,
VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2,
VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2,
@@ -931,9 +1033,11 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES,
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT,
+ VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES,
+ VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES,
@@ -946,12 +1050,17 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO,
VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL = VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES,
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES,
VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT,
VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_ADDRESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES,
VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES,
@@ -960,6 +1069,42 @@ typedef enum VkStructureType {
VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO,
VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO,
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES,
+ VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES,
+ VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2,
+ VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
+ VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2,
+ VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
+ VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2,
+ VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO,
+ VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES,
+ VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2,
+ VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2,
+ VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2,
+ VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2,
+ VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2,
+ VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2,
+ VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2,
+ VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2,
+ VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2,
+ VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
+ VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2,
+ VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR,
+ VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES,
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES,
+ VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS,
+ VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS,
VK_STRUCTURE_TYPE_MAX_ENUM = 0x7FFFFFFF
} VkStructureType;
@@ -979,6 +1124,8 @@ typedef enum VkImageLayout {
VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL = 1000241001,
VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL = 1000241002,
VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL = 1000241003,
+ VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL = 1000314000,
+ VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL = 1000314001,
VK_IMAGE_LAYOUT_PRESENT_SRC_KHR = 1000001002,
#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR = 1000024000,
@@ -1001,8 +1148,6 @@ typedef enum VkImageLayout {
#ifdef VK_ENABLE_BETA_EXTENSIONS
VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR = 1000299002,
#endif
- VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = 1000314000,
- VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = 1000314001,
VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL,
VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL,
VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV = VK_IMAGE_LAYOUT_FRAGMENT_SHADING_RATE_ATTACHMENT_OPTIMAL_KHR,
@@ -1010,6 +1155,8 @@ typedef enum VkImageLayout {
VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+ VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL,
+ VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
VK_IMAGE_LAYOUT_MAX_ENUM = 0x7FFFFFFF
} VkImageLayout;
@@ -1042,6 +1189,7 @@ typedef enum VkObjectType {
VK_OBJECT_TYPE_COMMAND_POOL = 25,
VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION = 1000156000,
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE = 1000085000,
+ VK_OBJECT_TYPE_PRIVATE_DATA_SLOT = 1000295000,
VK_OBJECT_TYPE_SURFACE_KHR = 1000000000,
VK_OBJECT_TYPE_SWAPCHAIN_KHR = 1000001000,
VK_OBJECT_TYPE_DISPLAY_KHR = 1000002000,
@@ -1062,9 +1210,10 @@ typedef enum VkObjectType {
VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL = 1000210000,
VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR = 1000268000,
VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV = 1000277000,
- VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = 1000295000,
+ VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA = 1000366000,
VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION,
+ VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT,
VK_OBJECT_TYPE_MAX_ENUM = 0x7FFFFFFF
} VkObjectType;
@@ -1317,6 +1466,26 @@ typedef enum VkFormat {
VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM = 1000156031,
VK_FORMAT_G16_B16R16_2PLANE_422_UNORM = 1000156032,
VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM = 1000156033,
+ VK_FORMAT_G8_B8R8_2PLANE_444_UNORM = 1000330000,
+ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16 = 1000330001,
+ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16 = 1000330002,
+ VK_FORMAT_G16_B16R16_2PLANE_444_UNORM = 1000330003,
+ VK_FORMAT_A4R4G4B4_UNORM_PACK16 = 1000340000,
+ VK_FORMAT_A4B4G4R4_UNORM_PACK16 = 1000340001,
+ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK = 1000066000,
+ VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK = 1000066001,
+ VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK = 1000066002,
+ VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK = 1000066003,
+ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK = 1000066004,
+ VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK = 1000066005,
+ VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK = 1000066006,
+ VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK = 1000066007,
+ VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK = 1000066008,
+ VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK = 1000066009,
+ VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK = 1000066010,
+ VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK = 1000066011,
+ VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK = 1000066012,
+ VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK = 1000066013,
VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG = 1000054000,
VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG = 1000054001,
VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG = 1000054002,
@@ -1325,26 +1494,20 @@ typedef enum VkFormat {
VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG = 1000054005,
VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG = 1000054006,
VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG = 1000054007,
- VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = 1000066000,
- VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = 1000066001,
- VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = 1000066002,
- VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = 1000066003,
- VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = 1000066004,
- VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = 1000066005,
- VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = 1000066006,
- VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = 1000066007,
- VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = 1000066008,
- VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = 1000066009,
- VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = 1000066010,
- VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = 1000066011,
- VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = 1000066012,
- VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = 1000066013,
- VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = 1000330000,
- VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = 1000330001,
- VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = 1000330002,
- VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = 1000330003,
- VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = 1000340000,
- VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = 1000340001,
+ VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK,
+ VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK,
VK_FORMAT_G8B8G8R8_422_UNORM_KHR = VK_FORMAT_G8B8G8R8_422_UNORM,
VK_FORMAT_B8G8R8G8_422_UNORM_KHR = VK_FORMAT_B8G8R8G8_422_UNORM,
VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM,
@@ -1379,6 +1542,12 @@ typedef enum VkFormat {
VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+ VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM,
+ VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16,
+ VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16,
+ VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM,
+ VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16,
+ VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16,
VK_FORMAT_MAX_ENUM = 0x7FFFFFFF
} VkFormat;
@@ -1552,6 +1721,21 @@ typedef enum VkDynamicState {
VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK = 6,
VK_DYNAMIC_STATE_STENCIL_WRITE_MASK = 7,
VK_DYNAMIC_STATE_STENCIL_REFERENCE = 8,
+ VK_DYNAMIC_STATE_CULL_MODE = 1000267000,
+ VK_DYNAMIC_STATE_FRONT_FACE = 1000267001,
+ VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY = 1000267002,
+ VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT = 1000267003,
+ VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT = 1000267004,
+ VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE = 1000267005,
+ VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE = 1000267006,
+ VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE = 1000267007,
+ VK_DYNAMIC_STATE_DEPTH_COMPARE_OP = 1000267008,
+ VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE = 1000267009,
+ VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE = 1000267010,
+ VK_DYNAMIC_STATE_STENCIL_OP = 1000267011,
+ VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE = 1000377001,
+ VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE = 1000377002,
+ VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE = 1000377004,
VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV = 1000087000,
VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT = 1000099000,
VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT = 1000143000,
@@ -1561,25 +1745,25 @@ typedef enum VkDynamicState {
VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV = 1000205001,
VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR = 1000226000,
VK_DYNAMIC_STATE_LINE_STIPPLE_EXT = 1000259000,
- VK_DYNAMIC_STATE_CULL_MODE_EXT = 1000267000,
- VK_DYNAMIC_STATE_FRONT_FACE_EXT = 1000267001,
- VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = 1000267002,
- VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = 1000267003,
- VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = 1000267004,
- VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = 1000267005,
- VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = 1000267006,
- VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = 1000267007,
- VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = 1000267008,
- VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = 1000267009,
- VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = 1000267010,
- VK_DYNAMIC_STATE_STENCIL_OP_EXT = 1000267011,
VK_DYNAMIC_STATE_VERTEX_INPUT_EXT = 1000352000,
VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT = 1000377000,
- VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = 1000377001,
- VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = 1000377002,
VK_DYNAMIC_STATE_LOGIC_OP_EXT = 1000377003,
- VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = 1000377004,
VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT = 1000381000,
+ VK_DYNAMIC_STATE_CULL_MODE_EXT = VK_DYNAMIC_STATE_CULL_MODE,
+ VK_DYNAMIC_STATE_FRONT_FACE_EXT = VK_DYNAMIC_STATE_FRONT_FACE,
+ VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY,
+ VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
+ VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
+ VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE,
+ VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+ VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+ VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+ VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+ VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
+ VK_DYNAMIC_STATE_STENCIL_OP_EXT = VK_DYNAMIC_STATE_STENCIL_OP,
+ VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE,
+ VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE,
+ VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE,
VK_DYNAMIC_STATE_MAX_ENUM = 0x7FFFFFFF
} VkDynamicState;
@@ -1698,10 +1882,11 @@ typedef enum VkDescriptorType {
VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC = 8,
VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC = 9,
VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT = 10,
- VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = 1000138000,
+ VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK = 1000138000,
VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR = 1000150000,
VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV = 1000165000,
VK_DESCRIPTOR_TYPE_MUTABLE_VALVE = 1000351000,
+ VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
VK_DESCRIPTOR_TYPE_MAX_ENUM = 0x7FFFFFFF
} VkDescriptorType;
@@ -1716,8 +1901,10 @@ typedef enum VkAttachmentLoadOp {
typedef enum VkAttachmentStoreOp {
VK_ATTACHMENT_STORE_OP_STORE = 0,
VK_ATTACHMENT_STORE_OP_DONT_CARE = 1,
- VK_ATTACHMENT_STORE_OP_NONE_EXT = 1000301000,
- VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE_EXT,
+ VK_ATTACHMENT_STORE_OP_NONE = 1000301000,
+ VK_ATTACHMENT_STORE_OP_NONE_KHR = VK_ATTACHMENT_STORE_OP_NONE,
+ VK_ATTACHMENT_STORE_OP_NONE_QCOM = VK_ATTACHMENT_STORE_OP_NONE,
+ VK_ATTACHMENT_STORE_OP_NONE_EXT = VK_ATTACHMENT_STORE_OP_NONE,
VK_ATTACHMENT_STORE_OP_MAX_ENUM = 0x7FFFFFFF
} VkAttachmentStoreOp;
@@ -1769,6 +1956,7 @@ typedef enum VkAccessFlagBits {
VK_ACCESS_HOST_WRITE_BIT = 0x00004000,
VK_ACCESS_MEMORY_READ_BIT = 0x00008000,
VK_ACCESS_MEMORY_WRITE_BIT = 0x00010000,
+ VK_ACCESS_NONE = 0,
VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000,
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000,
VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000,
@@ -1780,10 +1968,10 @@ typedef enum VkAccessFlagBits {
VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000,
VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000,
VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000,
- VK_ACCESS_NONE_KHR = 0,
VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR,
VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_KHR,
VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
+ VK_ACCESS_NONE_KHR = VK_ACCESS_NONE,
VK_ACCESS_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkAccessFlagBits;
typedef VkFlags VkAccessFlags;
@@ -1796,6 +1984,7 @@ typedef enum VkImageAspectFlagBits {
VK_IMAGE_ASPECT_PLANE_0_BIT = 0x00000010,
VK_IMAGE_ASPECT_PLANE_1_BIT = 0x00000020,
VK_IMAGE_ASPECT_PLANE_2_BIT = 0x00000040,
+ VK_IMAGE_ASPECT_NONE = 0,
VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT = 0x00000080,
VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT = 0x00000100,
VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT = 0x00000200,
@@ -1803,6 +1992,7 @@ typedef enum VkImageAspectFlagBits {
VK_IMAGE_ASPECT_PLANE_0_BIT_KHR = VK_IMAGE_ASPECT_PLANE_0_BIT,
VK_IMAGE_ASPECT_PLANE_1_BIT_KHR = VK_IMAGE_ASPECT_PLANE_1_BIT,
VK_IMAGE_ASPECT_PLANE_2_BIT_KHR = VK_IMAGE_ASPECT_PLANE_2_BIT,
+ VK_IMAGE_ASPECT_NONE_KHR = VK_IMAGE_ASPECT_NONE,
VK_IMAGE_ASPECT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkImageAspectFlagBits;
typedef VkFlags VkImageAspectFlags;
@@ -1878,6 +2068,7 @@ typedef enum VkImageCreateFlagBits {
VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV = 0x00002000,
VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT = 0x00001000,
VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT = 0x00004000,
+ VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM = 0x00008000,
VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT_KHR = VK_IMAGE_CREATE_SPLIT_INSTANCE_BIND_REGIONS_BIT,
VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT,
VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT,
@@ -1999,6 +2190,7 @@ typedef enum VkPipelineStageFlagBits {
VK_PIPELINE_STAGE_HOST_BIT = 0x00004000,
VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT = 0x00008000,
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT = 0x00010000,
+ VK_PIPELINE_STAGE_NONE = 0,
VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000,
VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000,
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000,
@@ -2008,10 +2200,10 @@ typedef enum VkPipelineStageFlagBits {
VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000,
VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000,
VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV = 0x00020000,
- VK_PIPELINE_STAGE_NONE_KHR = 0,
VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR,
VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+ VK_PIPELINE_STAGE_NONE_KHR = VK_PIPELINE_STAGE_NONE,
VK_PIPELINE_STAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkPipelineStageFlagBits;
typedef VkFlags VkPipelineStageFlags;
@@ -2039,7 +2231,8 @@ typedef VkFlags VkFenceCreateFlags;
typedef VkFlags VkSemaphoreCreateFlags;
typedef enum VkEventCreateFlagBits {
- VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = 0x00000001,
+ VK_EVENT_CREATE_DEVICE_ONLY_BIT = 0x00000001,
+ VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT,
VK_EVENT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkEventCreateFlagBits;
typedef VkFlags VkEventCreateFlags;
@@ -2131,7 +2324,8 @@ typedef VkFlags VkImageViewCreateFlags;
typedef VkFlags VkShaderModuleCreateFlags;
typedef enum VkPipelineCacheCreateFlagBits {
- VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = 0x00000001,
+ VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT = 0x00000001,
+ VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT,
VK_PIPELINE_CACHE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkPipelineCacheCreateFlagBits;
typedef VkFlags VkPipelineCacheCreateFlags;
@@ -2151,6 +2345,10 @@ typedef enum VkPipelineCreateFlagBits {
VK_PIPELINE_CREATE_DERIVATIVE_BIT = 0x00000004,
VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT = 0x00000008,
VK_PIPELINE_CREATE_DISPATCH_BASE_BIT = 0x00000010,
+ VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT = 0x00000100,
+ VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT = 0x00000200,
+ VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00200000,
+ VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = 0x00400000,
VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR = 0x00004000,
VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR = 0x00008000,
VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR = 0x00010000,
@@ -2163,19 +2361,23 @@ typedef enum VkPipelineCreateFlagBits {
VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR = 0x00000080,
VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV = 0x00040000,
VK_PIPELINE_CREATE_LIBRARY_BIT_KHR = 0x00000800,
- VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = 0x00000100,
- VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = 0x00000200,
VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV = 0x00100000,
VK_PIPELINE_CREATE_DISPATCH_BASE = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
+ VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+ VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT,
VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
VK_PIPELINE_CREATE_DISPATCH_BASE_KHR = VK_PIPELINE_CREATE_DISPATCH_BASE,
+ VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT,
+ VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT,
VK_PIPELINE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkPipelineCreateFlagBits;
typedef VkFlags VkPipelineCreateFlags;
typedef enum VkPipelineShaderStageCreateFlagBits {
- VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = 0x00000001,
- VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = 0x00000002,
+ VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT = 0x00000001,
+ VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT = 0x00000002,
+ VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT,
+ VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT,
VK_PIPELINE_SHADER_STAGE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkPipelineShaderStageCreateFlagBits;
typedef VkFlags VkPipelineShaderStageCreateFlags;
@@ -2221,7 +2423,18 @@ typedef VkFlags VkPipelineTessellationStateCreateFlags;
typedef VkFlags VkPipelineViewportStateCreateFlags;
typedef VkFlags VkPipelineRasterizationStateCreateFlags;
typedef VkFlags VkPipelineMultisampleStateCreateFlags;
+
+typedef enum VkPipelineDepthStencilStateCreateFlagBits {
+ VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = 0x00000001,
+ VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = 0x00000002,
+ VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineDepthStencilStateCreateFlagBits;
typedef VkFlags VkPipelineDepthStencilStateCreateFlags;
+
+typedef enum VkPipelineColorBlendStateCreateFlagBits {
+ VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM = 0x00000001,
+ VK_PIPELINE_COLOR_BLEND_STATE_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineColorBlendStateCreateFlagBits;
typedef VkFlags VkPipelineColorBlendStateCreateFlags;
typedef VkFlags VkPipelineDynamicStateCreateFlags;
typedef VkFlags VkPipelineLayoutCreateFlags;
@@ -2287,6 +2500,9 @@ typedef enum VkSubpassDescriptionFlagBits {
VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX = 0x00000002,
VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM = 0x00000004,
VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM = 0x00000008,
+ VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM = 0x00000010,
+ VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM = 0x00000020,
+ VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM = 0x00000040,
VK_SUBPASS_DESCRIPTION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
} VkSubpassDescriptionFlagBits;
typedef VkFlags VkSubpassDescriptionFlags;
@@ -5284,6 +5500,11 @@ typedef enum VkDriverId {
VK_DRIVER_ID_COREAVI_PROPRIETARY = 15,
VK_DRIVER_ID_JUICE_PROPRIETARY = 16,
VK_DRIVER_ID_VERISILICON_PROPRIETARY = 17,
+ VK_DRIVER_ID_MESA_TURNIP = 18,
+ VK_DRIVER_ID_MESA_V3DV = 19,
+ VK_DRIVER_ID_MESA_PANVK = 20,
+ VK_DRIVER_ID_SAMSUNG_PROPRIETARY = 21,
+ VK_DRIVER_ID_MESA_VENUS = 22,
VK_DRIVER_ID_AMD_PROPRIETARY_KHR = VK_DRIVER_ID_AMD_PROPRIETARY,
VK_DRIVER_ID_AMD_OPEN_SOURCE_KHR = VK_DRIVER_ID_AMD_OPEN_SOURCE,
VK_DRIVER_ID_MESA_RADV_KHR = VK_DRIVER_ID_MESA_RADV,
@@ -6005,6 +6226,1041 @@ VKAPI_ATTR uint64_t VKAPI_CALL vkGetDeviceMemoryOpaqueCaptureAddress(
#endif
+#define VK_VERSION_1_3 1
+// Vulkan 1.3 version number
+#define VK_API_VERSION_1_3 VK_MAKE_API_VERSION(0, 1, 3, 0)// Patch version should always be set to 0
+
+typedef uint64_t VkFlags64;
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlot)
+
+typedef enum VkPipelineCreationFeedbackFlagBits {
+ VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT = 0x00000001,
+ VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT = 0x00000002,
+ VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT = 0x00000004,
+ VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT,
+ VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT,
+ VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT,
+ VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPipelineCreationFeedbackFlagBits;
+typedef VkFlags VkPipelineCreationFeedbackFlags;
+
+typedef enum VkToolPurposeFlagBits {
+ VK_TOOL_PURPOSE_VALIDATION_BIT = 0x00000001,
+ VK_TOOL_PURPOSE_PROFILING_BIT = 0x00000002,
+ VK_TOOL_PURPOSE_TRACING_BIT = 0x00000004,
+ VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT = 0x00000008,
+ VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT = 0x00000010,
+ VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020,
+ VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040,
+ VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = VK_TOOL_PURPOSE_VALIDATION_BIT,
+ VK_TOOL_PURPOSE_PROFILING_BIT_EXT = VK_TOOL_PURPOSE_PROFILING_BIT,
+ VK_TOOL_PURPOSE_TRACING_BIT_EXT = VK_TOOL_PURPOSE_TRACING_BIT,
+ VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT,
+ VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT,
+ VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkToolPurposeFlagBits;
+typedef VkFlags VkToolPurposeFlags;
+
+typedef enum VkPrivateDataSlotCreateFlagBits {
+ VK_PRIVATE_DATA_SLOT_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkPrivateDataSlotCreateFlagBits;
+typedef VkFlags VkPrivateDataSlotCreateFlags;
+typedef VkFlags64 VkPipelineStageFlags2;
+
+// Flag bits for VkPipelineStageFlagBits2
+typedef VkFlags64 VkPipelineStageFlagBits2;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE = 0ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT = 0x00000001ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT = 0x00000002ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT = 0x00000004ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT = 0x00000008ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT = 0x00000010ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT = 0x00000020ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT = 0x00000040ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT = 0x00000080ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT = 0x00000100ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT = 0x00000200ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT = 0x00000400ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT = 0x00000800ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT = 0x00001000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT = 0x00001000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT = 0x00002000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT = 0x00004000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT = 0x00008000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT = 0x00010000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT = 0x100000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT = 0x200000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT = 0x400000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT = 0x800000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT = 0x1000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT = 0x2000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT = 0x4000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL;
+#endif
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL;
+static const VkPipelineStageFlagBits2 VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL;
+
+typedef VkFlags64 VkAccessFlags2;
+
+// Flag bits for VkAccessFlagBits2
+typedef VkFlags64 VkAccessFlagBits2;
+static const VkAccessFlagBits2 VK_ACCESS_2_NONE = 0ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_NONE_KHR = 0ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT = 0x00000001ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT = 0x00000002ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT = 0x00000004ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT = 0x00000008ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT = 0x00000010ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT = 0x00000020ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT = 0x00000040ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT = 0x00000080ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT = 0x00000100ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT = 0x00000200ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT = 0x00000400ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT = 0x00000800ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT = 0x00001000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT = 0x00002000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT = 0x00004000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT = 0x00008000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT = 0x00010000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT = 0x100000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT = 0x200000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT = 0x400000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkAccessFlagBits2 VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL;
+#endif
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
+static const VkAccessFlagBits2 VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL;
+
+
+typedef enum VkSubmitFlagBits {
+ VK_SUBMIT_PROTECTED_BIT = 0x00000001,
+ VK_SUBMIT_PROTECTED_BIT_KHR = VK_SUBMIT_PROTECTED_BIT,
+ VK_SUBMIT_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSubmitFlagBits;
+typedef VkFlags VkSubmitFlags;
+
+typedef enum VkRenderingFlagBits {
+ VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT = 0x00000001,
+ VK_RENDERING_SUSPENDING_BIT = 0x00000002,
+ VK_RENDERING_RESUMING_BIT = 0x00000004,
+ VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT_KHR = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT,
+ VK_RENDERING_SUSPENDING_BIT_KHR = VK_RENDERING_SUSPENDING_BIT,
+ VK_RENDERING_RESUMING_BIT_KHR = VK_RENDERING_RESUMING_BIT,
+ VK_RENDERING_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkRenderingFlagBits;
+typedef VkFlags VkRenderingFlags;
+typedef VkFlags64 VkFormatFeatureFlags2;
+
+// Flag bits for VkFormatFeatureFlagBits2
+typedef VkFlags64 VkFormatFeatureFlagBits2;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT = 0x00000001ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT_KHR = 0x00000001ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT = 0x00000002ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT_KHR = 0x00000002ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT = 0x00000004ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT_KHR = 0x00000004ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT = 0x00000008ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT_KHR = 0x00000008ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT = 0x00000010ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT_KHR = 0x00000010ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT = 0x00000020ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT_KHR = 0x00000020ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT = 0x00000040ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT_KHR = 0x00000040ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT = 0x00000080ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT_KHR = 0x00000080ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT = 0x00000100ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT_KHR = 0x00000100ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT = 0x00000200ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT_KHR = 0x00000200ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT = 0x00000400ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_SRC_BIT_KHR = 0x00000400ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT = 0x00000800ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_BLIT_DST_BIT_KHR = 0x00000800ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT = 0x00001000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT_KHR = 0x00001000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT = 0x00002000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT = 0x00002000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT = 0x00004000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT_KHR = 0x00004000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT = 0x00008000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT_KHR = 0x00008000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT = 0x00010000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT_KHR = 0x00010000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT = 0x00020000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT_KHR = 0x00020000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT = 0x00040000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT_KHR = 0x00040000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT = 0x00080000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT_KHR = 0x00080000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT = 0x00100000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT_KHR = 0x00100000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT = 0x00200000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT_KHR = 0x00200000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT = 0x00400000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_DISJOINT_BIT_KHR = 0x00400000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT = 0x00800000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT_KHR = 0x00800000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT = 0x80000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT_KHR = 0x80000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT = 0x100000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT_KHR = 0x100000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT = 0x200000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT_KHR = 0x200000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR = 0x02000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR = 0x04000000ULL;
+#endif
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR = 0x20000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT = 0x01000000ULL;
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x40000000ULL;
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR = 0x08000000ULL;
+#endif
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR = 0x10000000ULL;
+#endif
+static const VkFormatFeatureFlagBits2 VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV = 0x4000000000ULL;
+
+typedef struct VkPhysicalDeviceVulkan13Features {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 robustImageAccess;
+ VkBool32 inlineUniformBlock;
+ VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
+ VkBool32 pipelineCreationCacheControl;
+ VkBool32 privateData;
+ VkBool32 shaderDemoteToHelperInvocation;
+ VkBool32 shaderTerminateInvocation;
+ VkBool32 subgroupSizeControl;
+ VkBool32 computeFullSubgroups;
+ VkBool32 synchronization2;
+ VkBool32 textureCompressionASTC_HDR;
+ VkBool32 shaderZeroInitializeWorkgroupMemory;
+ VkBool32 dynamicRendering;
+ VkBool32 shaderIntegerDotProduct;
+ VkBool32 maintenance4;
+} VkPhysicalDeviceVulkan13Features;
+
+typedef struct VkPhysicalDeviceVulkan13Properties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t minSubgroupSize;
+ uint32_t maxSubgroupSize;
+ uint32_t maxComputeWorkgroupSubgroups;
+ VkShaderStageFlags requiredSubgroupSizeStages;
+ uint32_t maxInlineUniformBlockSize;
+ uint32_t maxPerStageDescriptorInlineUniformBlocks;
+ uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks;
+ uint32_t maxDescriptorSetInlineUniformBlocks;
+ uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks;
+ uint32_t maxInlineUniformTotalSize;
+ VkBool32 integerDotProduct8BitUnsignedAccelerated;
+ VkBool32 integerDotProduct8BitSignedAccelerated;
+ VkBool32 integerDotProduct8BitMixedSignednessAccelerated;
+ VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated;
+ VkBool32 integerDotProduct4x8BitPackedSignedAccelerated;
+ VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated;
+ VkBool32 integerDotProduct16BitUnsignedAccelerated;
+ VkBool32 integerDotProduct16BitSignedAccelerated;
+ VkBool32 integerDotProduct16BitMixedSignednessAccelerated;
+ VkBool32 integerDotProduct32BitUnsignedAccelerated;
+ VkBool32 integerDotProduct32BitSignedAccelerated;
+ VkBool32 integerDotProduct32BitMixedSignednessAccelerated;
+ VkBool32 integerDotProduct64BitUnsignedAccelerated;
+ VkBool32 integerDotProduct64BitSignedAccelerated;
+ VkBool32 integerDotProduct64BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
+ VkDeviceSize storageTexelBufferOffsetAlignmentBytes;
+ VkBool32 storageTexelBufferOffsetSingleTexelAlignment;
+ VkDeviceSize uniformTexelBufferOffsetAlignmentBytes;
+ VkBool32 uniformTexelBufferOffsetSingleTexelAlignment;
+ VkDeviceSize maxBufferSize;
+} VkPhysicalDeviceVulkan13Properties;
+
+typedef struct VkPipelineCreationFeedback {
+ VkPipelineCreationFeedbackFlags flags;
+ uint64_t duration;
+} VkPipelineCreationFeedback;
+
+typedef struct VkPipelineCreationFeedbackCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineCreationFeedback* pPipelineCreationFeedback;
+ uint32_t pipelineStageCreationFeedbackCount;
+ VkPipelineCreationFeedback* pPipelineStageCreationFeedbacks;
+} VkPipelineCreationFeedbackCreateInfo;
+
+typedef struct VkPhysicalDeviceShaderTerminateInvocationFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderTerminateInvocation;
+} VkPhysicalDeviceShaderTerminateInvocationFeatures;
+
+typedef struct VkPhysicalDeviceToolProperties {
+ VkStructureType sType;
+ void* pNext;
+ char name[VK_MAX_EXTENSION_NAME_SIZE];
+ char version[VK_MAX_EXTENSION_NAME_SIZE];
+ VkToolPurposeFlags purposes;
+ char description[VK_MAX_DESCRIPTION_SIZE];
+ char layer[VK_MAX_EXTENSION_NAME_SIZE];
+} VkPhysicalDeviceToolProperties;
+
+typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderDemoteToHelperInvocation;
+} VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures;
+
+typedef struct VkPhysicalDevicePrivateDataFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 privateData;
+} VkPhysicalDevicePrivateDataFeatures;
+
+typedef struct VkDevicePrivateDataCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t privateDataSlotRequestCount;
+} VkDevicePrivateDataCreateInfo;
+
+typedef struct VkPrivateDataSlotCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkPrivateDataSlotCreateFlags flags;
+} VkPrivateDataSlotCreateInfo;
+
+typedef struct VkPhysicalDevicePipelineCreationCacheControlFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 pipelineCreationCacheControl;
+} VkPhysicalDevicePipelineCreationCacheControlFeatures;
+
+typedef struct VkMemoryBarrier2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineStageFlags2 srcStageMask;
+ VkAccessFlags2 srcAccessMask;
+ VkPipelineStageFlags2 dstStageMask;
+ VkAccessFlags2 dstAccessMask;
+} VkMemoryBarrier2;
+
+typedef struct VkBufferMemoryBarrier2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineStageFlags2 srcStageMask;
+ VkAccessFlags2 srcAccessMask;
+ VkPipelineStageFlags2 dstStageMask;
+ VkAccessFlags2 dstAccessMask;
+ uint32_t srcQueueFamilyIndex;
+ uint32_t dstQueueFamilyIndex;
+ VkBuffer buffer;
+ VkDeviceSize offset;
+ VkDeviceSize size;
+} VkBufferMemoryBarrier2;
+
+typedef struct VkImageMemoryBarrier2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkPipelineStageFlags2 srcStageMask;
+ VkAccessFlags2 srcAccessMask;
+ VkPipelineStageFlags2 dstStageMask;
+ VkAccessFlags2 dstAccessMask;
+ VkImageLayout oldLayout;
+ VkImageLayout newLayout;
+ uint32_t srcQueueFamilyIndex;
+ uint32_t dstQueueFamilyIndex;
+ VkImage image;
+ VkImageSubresourceRange subresourceRange;
+} VkImageMemoryBarrier2;
+
+typedef struct VkDependencyInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkDependencyFlags dependencyFlags;
+ uint32_t memoryBarrierCount;
+ const VkMemoryBarrier2* pMemoryBarriers;
+ uint32_t bufferMemoryBarrierCount;
+ const VkBufferMemoryBarrier2* pBufferMemoryBarriers;
+ uint32_t imageMemoryBarrierCount;
+ const VkImageMemoryBarrier2* pImageMemoryBarriers;
+} VkDependencyInfo;
+
+typedef struct VkSemaphoreSubmitInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkSemaphore semaphore;
+ uint64_t value;
+ VkPipelineStageFlags2 stageMask;
+ uint32_t deviceIndex;
+} VkSemaphoreSubmitInfo;
+
+typedef struct VkCommandBufferSubmitInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkCommandBuffer commandBuffer;
+ uint32_t deviceMask;
+} VkCommandBufferSubmitInfo;
+
+typedef struct VkSubmitInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkSubmitFlags flags;
+ uint32_t waitSemaphoreInfoCount;
+ const VkSemaphoreSubmitInfo* pWaitSemaphoreInfos;
+ uint32_t commandBufferInfoCount;
+ const VkCommandBufferSubmitInfo* pCommandBufferInfos;
+ uint32_t signalSemaphoreInfoCount;
+ const VkSemaphoreSubmitInfo* pSignalSemaphoreInfos;
+} VkSubmitInfo2;
+
+typedef struct VkPhysicalDeviceSynchronization2Features {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 synchronization2;
+} VkPhysicalDeviceSynchronization2Features;
+
+typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderZeroInitializeWorkgroupMemory;
+} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
+
+typedef struct VkPhysicalDeviceImageRobustnessFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 robustImageAccess;
+} VkPhysicalDeviceImageRobustnessFeatures;
+
+typedef struct VkBufferCopy2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceSize srcOffset;
+ VkDeviceSize dstOffset;
+ VkDeviceSize size;
+} VkBufferCopy2;
+
+typedef struct VkCopyBufferInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer srcBuffer;
+ VkBuffer dstBuffer;
+ uint32_t regionCount;
+ const VkBufferCopy2* pRegions;
+} VkCopyBufferInfo2;
+
+typedef struct VkImageCopy2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffset;
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffset;
+ VkExtent3D extent;
+} VkImageCopy2;
+
+typedef struct VkCopyImageInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage srcImage;
+ VkImageLayout srcImageLayout;
+ VkImage dstImage;
+ VkImageLayout dstImageLayout;
+ uint32_t regionCount;
+ const VkImageCopy2* pRegions;
+} VkCopyImageInfo2;
+
+typedef struct VkBufferImageCopy2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkDeviceSize bufferOffset;
+ uint32_t bufferRowLength;
+ uint32_t bufferImageHeight;
+ VkImageSubresourceLayers imageSubresource;
+ VkOffset3D imageOffset;
+ VkExtent3D imageExtent;
+} VkBufferImageCopy2;
+
+typedef struct VkCopyBufferToImageInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkBuffer srcBuffer;
+ VkImage dstImage;
+ VkImageLayout dstImageLayout;
+ uint32_t regionCount;
+ const VkBufferImageCopy2* pRegions;
+} VkCopyBufferToImageInfo2;
+
+typedef struct VkCopyImageToBufferInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage srcImage;
+ VkImageLayout srcImageLayout;
+ VkBuffer dstBuffer;
+ uint32_t regionCount;
+ const VkBufferImageCopy2* pRegions;
+} VkCopyImageToBufferInfo2;
+
+typedef struct VkImageBlit2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffsets[2];
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffsets[2];
+} VkImageBlit2;
+
+typedef struct VkBlitImageInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage srcImage;
+ VkImageLayout srcImageLayout;
+ VkImage dstImage;
+ VkImageLayout dstImageLayout;
+ uint32_t regionCount;
+ const VkImageBlit2* pRegions;
+ VkFilter filter;
+} VkBlitImageInfo2;
+
+typedef struct VkImageResolve2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageSubresourceLayers srcSubresource;
+ VkOffset3D srcOffset;
+ VkImageSubresourceLayers dstSubresource;
+ VkOffset3D dstOffset;
+ VkExtent3D extent;
+} VkImageResolve2;
+
+typedef struct VkResolveImageInfo2 {
+ VkStructureType sType;
+ const void* pNext;
+ VkImage srcImage;
+ VkImageLayout srcImageLayout;
+ VkImage dstImage;
+ VkImageLayout dstImageLayout;
+ uint32_t regionCount;
+ const VkImageResolve2* pRegions;
+} VkResolveImageInfo2;
+
+typedef struct VkPhysicalDeviceSubgroupSizeControlFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 subgroupSizeControl;
+ VkBool32 computeFullSubgroups;
+} VkPhysicalDeviceSubgroupSizeControlFeatures;
+
+typedef struct VkPhysicalDeviceSubgroupSizeControlProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t minSubgroupSize;
+ uint32_t maxSubgroupSize;
+ uint32_t maxComputeWorkgroupSubgroups;
+ VkShaderStageFlags requiredSubgroupSizeStages;
+} VkPhysicalDeviceSubgroupSizeControlProperties;
+
+typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfo {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t requiredSubgroupSize;
+} VkPipelineShaderStageRequiredSubgroupSizeCreateInfo;
+
+typedef struct VkPhysicalDeviceInlineUniformBlockFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 inlineUniformBlock;
+ VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
+} VkPhysicalDeviceInlineUniformBlockFeatures;
+
+typedef struct VkPhysicalDeviceInlineUniformBlockProperties {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t maxInlineUniformBlockSize;
+ uint32_t maxPerStageDescriptorInlineUniformBlocks;
+ uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks;
+ uint32_t maxDescriptorSetInlineUniformBlocks;
+ uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks;
+} VkPhysicalDeviceInlineUniformBlockProperties;
+
+typedef struct VkWriteDescriptorSetInlineUniformBlock {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t dataSize;
+ const void* pData;
+} VkWriteDescriptorSetInlineUniformBlock;
+
+typedef struct VkDescriptorPoolInlineUniformBlockCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t maxInlineUniformBlockBindings;
+} VkDescriptorPoolInlineUniformBlockCreateInfo;
+
+typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 textureCompressionASTC_HDR;
+} VkPhysicalDeviceTextureCompressionASTCHDRFeatures;
+
+typedef struct VkRenderingAttachmentInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageView imageView;
+ VkImageLayout imageLayout;
+ VkResolveModeFlagBits resolveMode;
+ VkImageView resolveImageView;
+ VkImageLayout resolveImageLayout;
+ VkAttachmentLoadOp loadOp;
+ VkAttachmentStoreOp storeOp;
+ VkClearValue clearValue;
+} VkRenderingAttachmentInfo;
+
+typedef struct VkRenderingInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderingFlags flags;
+ VkRect2D renderArea;
+ uint32_t layerCount;
+ uint32_t viewMask;
+ uint32_t colorAttachmentCount;
+ const VkRenderingAttachmentInfo* pColorAttachments;
+ const VkRenderingAttachmentInfo* pDepthAttachment;
+ const VkRenderingAttachmentInfo* pStencilAttachment;
+} VkRenderingInfo;
+
+typedef struct VkPipelineRenderingCreateInfo {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t viewMask;
+ uint32_t colorAttachmentCount;
+ const VkFormat* pColorAttachmentFormats;
+ VkFormat depthAttachmentFormat;
+ VkFormat stencilAttachmentFormat;
+} VkPipelineRenderingCreateInfo;
+
+typedef struct VkPhysicalDeviceDynamicRenderingFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 dynamicRendering;
+} VkPhysicalDeviceDynamicRenderingFeatures;
+
+typedef struct VkCommandBufferInheritanceRenderingInfo {
+ VkStructureType sType;
+ const void* pNext;
+ VkRenderingFlags flags;
+ uint32_t viewMask;
+ uint32_t colorAttachmentCount;
+ const VkFormat* pColorAttachmentFormats;
+ VkFormat depthAttachmentFormat;
+ VkFormat stencilAttachmentFormat;
+ VkSampleCountFlagBits rasterizationSamples;
+} VkCommandBufferInheritanceRenderingInfo;
+
+typedef struct VkPhysicalDeviceShaderIntegerDotProductFeatures {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 shaderIntegerDotProduct;
+} VkPhysicalDeviceShaderIntegerDotProductFeatures;
+
+typedef struct VkPhysicalDeviceShaderIntegerDotProductProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 integerDotProduct8BitUnsignedAccelerated;
+ VkBool32 integerDotProduct8BitSignedAccelerated;
+ VkBool32 integerDotProduct8BitMixedSignednessAccelerated;
+ VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated;
+ VkBool32 integerDotProduct4x8BitPackedSignedAccelerated;
+ VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated;
+ VkBool32 integerDotProduct16BitUnsignedAccelerated;
+ VkBool32 integerDotProduct16BitSignedAccelerated;
+ VkBool32 integerDotProduct16BitMixedSignednessAccelerated;
+ VkBool32 integerDotProduct32BitUnsignedAccelerated;
+ VkBool32 integerDotProduct32BitSignedAccelerated;
+ VkBool32 integerDotProduct32BitMixedSignednessAccelerated;
+ VkBool32 integerDotProduct64BitUnsignedAccelerated;
+ VkBool32 integerDotProduct64BitSignedAccelerated;
+ VkBool32 integerDotProduct64BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated;
+ VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
+} VkPhysicalDeviceShaderIntegerDotProductProperties;
+
+typedef struct VkPhysicalDeviceTexelBufferAlignmentProperties {
+ VkStructureType sType;
+ void* pNext;
+ VkDeviceSize storageTexelBufferOffsetAlignmentBytes;
+ VkBool32 storageTexelBufferOffsetSingleTexelAlignment;
+ VkDeviceSize uniformTexelBufferOffsetAlignmentBytes;
+ VkBool32 uniformTexelBufferOffsetSingleTexelAlignment;
+} VkPhysicalDeviceTexelBufferAlignmentProperties;
+
+typedef struct VkFormatProperties3 {
+ VkStructureType sType;
+ void* pNext;
+ VkFormatFeatureFlags2 linearTilingFeatures;
+ VkFormatFeatureFlags2 optimalTilingFeatures;
+ VkFormatFeatureFlags2 bufferFeatures;
+} VkFormatProperties3;
+
+typedef struct VkPhysicalDeviceMaintenance4Features {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 maintenance4;
+} VkPhysicalDeviceMaintenance4Features;
+
+typedef struct VkPhysicalDeviceMaintenance4Properties {
+ VkStructureType sType;
+ void* pNext;
+ VkDeviceSize maxBufferSize;
+} VkPhysicalDeviceMaintenance4Properties;
+
+typedef struct VkDeviceBufferMemoryRequirements {
+ VkStructureType sType;
+ const void* pNext;
+ const VkBufferCreateInfo* pCreateInfo;
+} VkDeviceBufferMemoryRequirements;
+
+typedef struct VkDeviceImageMemoryRequirements {
+ VkStructureType sType;
+ const void* pNext;
+ const VkImageCreateInfo* pCreateInfo;
+ VkImageAspectFlagBits planeAspect;
+} VkDeviceImageMemoryRequirements;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolProperties)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties);
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlot)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot);
+typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlot)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data);
+typedef void (VKAPI_PTR *PFN_vkGetPrivateData)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData);
+typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos);
+typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRendering)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRendering)(VkCommandBuffer commandBuffer);
+typedef void (VKAPI_PTR *PFN_vkCmdSetCullMode)(VkCommandBuffer commandBuffer, VkCullModeFlags cullMode);
+typedef void (VKAPI_PTR *PFN_vkCmdSetFrontFace)(VkCommandBuffer commandBuffer, VkFrontFace frontFace);
+typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveTopology)(VkCommandBuffer commandBuffer, VkPrimitiveTopology primitiveTopology);
+typedef void (VKAPI_PTR *PFN_vkCmdSetViewportWithCount)(VkCommandBuffer commandBuffer, uint32_t viewportCount, const VkViewport* pViewports);
+typedef void (VKAPI_PTR *PFN_vkCmdSetScissorWithCount)(VkCommandBuffer commandBuffer, uint32_t scissorCount, const VkRect2D* pScissors);
+typedef void (VKAPI_PTR *PFN_vkCmdBindVertexBuffers2)(VkCommandBuffer commandBuffer, uint32_t firstBinding, uint32_t bindingCount, const VkBuffer* pBuffers, const VkDeviceSize* pOffsets, const VkDeviceSize* pSizes, const VkDeviceSize* pStrides);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthWriteEnable)(VkCommandBuffer commandBuffer, VkBool32 depthWriteEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthCompareOp)(VkCommandBuffer commandBuffer, VkCompareOp depthCompareOp);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBoundsTestEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBoundsTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilTestEnable)(VkCommandBuffer commandBuffer, VkBool32 stencilTestEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetStencilOp)(VkCommandBuffer commandBuffer, VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp, VkStencilOp depthFailOp, VkCompareOp compareOp);
+typedef void (VKAPI_PTR *PFN_vkCmdSetRasterizerDiscardEnable)(VkCommandBuffer commandBuffer, VkBool32 rasterizerDiscardEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetDepthBiasEnable)(VkCommandBuffer commandBuffer, VkBool32 depthBiasEnable);
+typedef void (VKAPI_PTR *PFN_vkCmdSetPrimitiveRestartEnable)(VkCommandBuffer commandBuffer, VkBool32 primitiveRestartEnable);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirements)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirements)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolProperties(
+ VkPhysicalDevice physicalDevice,
+ uint32_t* pToolCount,
+ VkPhysicalDeviceToolProperties* pToolProperties);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlot(
+ VkDevice device,
+ const VkPrivateDataSlotCreateInfo* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkPrivateDataSlot* pPrivateDataSlot);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlot(
+ VkDevice device,
+ VkPrivateDataSlot privateDataSlot,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateData(
+ VkDevice device,
+ VkObjectType objectType,
+ uint64_t objectHandle,
+ VkPrivateDataSlot privateDataSlot,
+ uint64_t data);
+
+VKAPI_ATTR void VKAPI_CALL vkGetPrivateData(
+ VkDevice device,
+ VkObjectType objectType,
+ uint64_t objectHandle,
+ VkPrivateDataSlot privateDataSlot,
+ uint64_t* pData);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2(
+ VkCommandBuffer commandBuffer,
+ VkEvent event,
+ const VkDependencyInfo* pDependencyInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2(
+ VkCommandBuffer commandBuffer,
+ VkEvent event,
+ VkPipelineStageFlags2 stageMask);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2(
+ VkCommandBuffer commandBuffer,
+ uint32_t eventCount,
+ const VkEvent* pEvents,
+ const VkDependencyInfo* pDependencyInfos);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2(
+ VkCommandBuffer commandBuffer,
+ const VkDependencyInfo* pDependencyInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2(
+ VkCommandBuffer commandBuffer,
+ VkPipelineStageFlags2 stage,
+ VkQueryPool queryPool,
+ uint32_t query);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2(
+ VkQueue queue,
+ uint32_t submitCount,
+ const VkSubmitInfo2* pSubmits,
+ VkFence fence);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2(
+ VkCommandBuffer commandBuffer,
+ const VkCopyBufferInfo2* pCopyBufferInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2(
+ VkCommandBuffer commandBuffer,
+ const VkCopyImageInfo2* pCopyImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2(
+ VkCommandBuffer commandBuffer,
+ const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2(
+ VkCommandBuffer commandBuffer,
+ const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2(
+ VkCommandBuffer commandBuffer,
+ const VkBlitImageInfo2* pBlitImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2(
+ VkCommandBuffer commandBuffer,
+ const VkResolveImageInfo2* pResolveImageInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRendering(
+ VkCommandBuffer commandBuffer,
+ const VkRenderingInfo* pRenderingInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRendering(
+ VkCommandBuffer commandBuffer);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetCullMode(
+ VkCommandBuffer commandBuffer,
+ VkCullModeFlags cullMode);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetFrontFace(
+ VkCommandBuffer commandBuffer,
+ VkFrontFace frontFace);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveTopology(
+ VkCommandBuffer commandBuffer,
+ VkPrimitiveTopology primitiveTopology);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetViewportWithCount(
+ VkCommandBuffer commandBuffer,
+ uint32_t viewportCount,
+ const VkViewport* pViewports);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetScissorWithCount(
+ VkCommandBuffer commandBuffer,
+ uint32_t scissorCount,
+ const VkRect2D* pScissors);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdBindVertexBuffers2(
+ VkCommandBuffer commandBuffer,
+ uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VkBuffer* pBuffers,
+ const VkDeviceSize* pOffsets,
+ const VkDeviceSize* pSizes,
+ const VkDeviceSize* pStrides);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthTestEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 depthTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthWriteEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 depthWriteEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthCompareOp(
+ VkCommandBuffer commandBuffer,
+ VkCompareOp depthCompareOp);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBoundsTestEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 depthBoundsTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilTestEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 stencilTestEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetStencilOp(
+ VkCommandBuffer commandBuffer,
+ VkStencilFaceFlags faceMask,
+ VkStencilOp failOp,
+ VkStencilOp passOp,
+ VkStencilOp depthFailOp,
+ VkCompareOp compareOp);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetRasterizerDiscardEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 rasterizerDiscardEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetDepthBiasEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 depthBiasEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdSetPrimitiveRestartEnable(
+ VkCommandBuffer commandBuffer,
+ VkBool32 primitiveRestartEnable);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirements(
+ VkDevice device,
+ const VkDeviceBufferMemoryRequirements* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirements(
+ VkDevice device,
+ const VkDeviceImageMemoryRequirements* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirements(
+ VkDevice device,
+ const VkDeviceImageMemoryRequirements* pInfo,
+ uint32_t* pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+#endif
+
+
#define VK_KHR_surface 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkSurfaceKHR)
#define VK_KHR_SURFACE_SPEC_VERSION 25
@@ -6431,6 +7687,68 @@ VKAPI_ATTR VkResult VKAPI_CALL vkCreateSharedSwapchainsKHR(
#define VK_KHR_SAMPLER_MIRROR_CLAMP_TO_EDGE_EXTENSION_NAME "VK_KHR_sampler_mirror_clamp_to_edge"
+#define VK_KHR_dynamic_rendering 1
+#define VK_KHR_DYNAMIC_RENDERING_SPEC_VERSION 1
+#define VK_KHR_DYNAMIC_RENDERING_EXTENSION_NAME "VK_KHR_dynamic_rendering"
+typedef VkRenderingFlags VkRenderingFlagsKHR;
+
+typedef VkRenderingFlagBits VkRenderingFlagBitsKHR;
+
+typedef VkRenderingInfo VkRenderingInfoKHR;
+
+typedef VkRenderingAttachmentInfo VkRenderingAttachmentInfoKHR;
+
+typedef VkPipelineRenderingCreateInfo VkPipelineRenderingCreateInfoKHR;
+
+typedef VkPhysicalDeviceDynamicRenderingFeatures VkPhysicalDeviceDynamicRenderingFeaturesKHR;
+
+typedef VkCommandBufferInheritanceRenderingInfo VkCommandBufferInheritanceRenderingInfoKHR;
+
+typedef struct VkRenderingFragmentShadingRateAttachmentInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageView imageView;
+ VkImageLayout imageLayout;
+ VkExtent2D shadingRateAttachmentTexelSize;
+} VkRenderingFragmentShadingRateAttachmentInfoKHR;
+
+typedef struct VkRenderingFragmentDensityMapAttachmentInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageView imageView;
+ VkImageLayout imageLayout;
+} VkRenderingFragmentDensityMapAttachmentInfoEXT;
+
+typedef struct VkAttachmentSampleCountInfoAMD {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t colorAttachmentCount;
+ const VkSampleCountFlagBits* pColorAttachmentSamples;
+ VkSampleCountFlagBits depthStencilAttachmentSamples;
+} VkAttachmentSampleCountInfoAMD;
+
+typedef VkAttachmentSampleCountInfoAMD VkAttachmentSampleCountInfoNV;
+
+typedef struct VkMultiviewPerViewAttributesInfoNVX {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 perViewAttributes;
+ VkBool32 perViewAttributesPositionXOnly;
+} VkMultiviewPerViewAttributesInfoNVX;
+
+typedef void (VKAPI_PTR *PFN_vkCmdBeginRenderingKHR)(VkCommandBuffer commandBuffer, const VkRenderingInfo* pRenderingInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdEndRenderingKHR)(VkCommandBuffer commandBuffer);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkCmdBeginRenderingKHR(
+ VkCommandBuffer commandBuffer,
+ const VkRenderingInfo* pRenderingInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkCmdEndRenderingKHR(
+ VkCommandBuffer commandBuffer);
+#endif
+
+
#define VK_KHR_multiview 1
#define VK_KHR_MULTIVIEW_SPEC_VERSION 1
#define VK_KHR_MULTIVIEW_EXTENSION_NAME "VK_KHR_multiview"
@@ -6565,8 +7883,10 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDispatchBaseKHR(
#define VK_KHR_maintenance1 1
-#define VK_KHR_MAINTENANCE1_SPEC_VERSION 2
-#define VK_KHR_MAINTENANCE1_EXTENSION_NAME "VK_KHR_maintenance1"
+#define VK_KHR_MAINTENANCE_1_SPEC_VERSION 2
+#define VK_KHR_MAINTENANCE_1_EXTENSION_NAME "VK_KHR_maintenance1"
+#define VK_KHR_MAINTENANCE1_SPEC_VERSION VK_KHR_MAINTENANCE_1_SPEC_VERSION
+#define VK_KHR_MAINTENANCE1_EXTENSION_NAME VK_KHR_MAINTENANCE_1_EXTENSION_NAME
typedef VkCommandPoolTrimFlags VkCommandPoolTrimFlagsKHR;
typedef void (VKAPI_PTR *PFN_vkTrimCommandPoolKHR)(VkDevice device, VkCommandPool commandPool, VkCommandPoolTrimFlags flags);
@@ -7146,8 +8466,10 @@ VKAPI_ATTR void VKAPI_CALL vkReleaseProfilingLockKHR(
#define VK_KHR_maintenance2 1
-#define VK_KHR_MAINTENANCE2_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE2_EXTENSION_NAME "VK_KHR_maintenance2"
+#define VK_KHR_MAINTENANCE_2_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE_2_EXTENSION_NAME "VK_KHR_maintenance2"
+#define VK_KHR_MAINTENANCE2_SPEC_VERSION VK_KHR_MAINTENANCE_2_SPEC_VERSION
+#define VK_KHR_MAINTENANCE2_EXTENSION_NAME VK_KHR_MAINTENANCE_2_EXTENSION_NAME
typedef VkPointClippingBehavior VkPointClippingBehaviorKHR;
typedef VkTessellationDomainOrigin VkTessellationDomainOriginKHR;
@@ -7400,8 +8722,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkBindImageMemory2KHR(
#define VK_KHR_maintenance3 1
-#define VK_KHR_MAINTENANCE3_SPEC_VERSION 1
-#define VK_KHR_MAINTENANCE3_EXTENSION_NAME "VK_KHR_maintenance3"
+#define VK_KHR_MAINTENANCE_3_SPEC_VERSION 1
+#define VK_KHR_MAINTENANCE_3_EXTENSION_NAME "VK_KHR_maintenance3"
+#define VK_KHR_MAINTENANCE3_SPEC_VERSION VK_KHR_MAINTENANCE_3_SPEC_VERSION
+#define VK_KHR_MAINTENANCE3_EXTENSION_NAME VK_KHR_MAINTENANCE_3_EXTENSION_NAME
typedef VkPhysicalDeviceMaintenance3Properties VkPhysicalDeviceMaintenance3PropertiesKHR;
typedef VkDescriptorSetLayoutSupport VkDescriptorSetLayoutSupportKHR;
@@ -7476,6 +8800,43 @@ typedef struct VkPhysicalDeviceShaderClockFeaturesKHR {
+#define VK_KHR_global_priority 1
+#define VK_MAX_GLOBAL_PRIORITY_SIZE_KHR 16U
+#define VK_KHR_GLOBAL_PRIORITY_SPEC_VERSION 1
+#define VK_KHR_GLOBAL_PRIORITY_EXTENSION_NAME "VK_KHR_global_priority"
+
+typedef enum VkQueueGlobalPriorityKHR {
+ VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR = 128,
+ VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR = 256,
+ VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR = 512,
+ VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR = 1024,
+ VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR,
+ VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR,
+ VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR,
+ VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR,
+ VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_KHR = 0x7FFFFFFF
+} VkQueueGlobalPriorityKHR;
+typedef struct VkDeviceQueueGlobalPriorityCreateInfoKHR {
+ VkStructureType sType;
+ const void* pNext;
+ VkQueueGlobalPriorityKHR globalPriority;
+} VkDeviceQueueGlobalPriorityCreateInfoKHR;
+
+typedef struct VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 globalPriorityQuery;
+} VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR;
+
+typedef struct VkQueueFamilyGlobalPriorityPropertiesKHR {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t priorityCount;
+ VkQueueGlobalPriorityKHR priorities[VK_MAX_GLOBAL_PRIORITY_SIZE_KHR];
+} VkQueueFamilyGlobalPriorityPropertiesKHR;
+
+
+
#define VK_KHR_driver_properties 1
#define VK_KHR_DRIVER_PROPERTIES_SPEC_VERSION 1
#define VK_KHR_DRIVER_PROPERTIES_EXTENSION_NAME "VK_KHR_driver_properties"
@@ -7568,16 +8929,12 @@ typedef VkPhysicalDeviceVulkanMemoryModelFeatures VkPhysicalDeviceVulkanMemoryMo
#define VK_KHR_shader_terminate_invocation 1
#define VK_KHR_SHADER_TERMINATE_INVOCATION_SPEC_VERSION 1
#define VK_KHR_SHADER_TERMINATE_INVOCATION_EXTENSION_NAME "VK_KHR_shader_terminate_invocation"
-typedef struct VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 shaderTerminateInvocation;
-} VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR;
+typedef VkPhysicalDeviceShaderTerminateInvocationFeatures VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR;
#define VK_KHR_fragment_shading_rate 1
-#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 1
+#define VK_KHR_FRAGMENT_SHADING_RATE_SPEC_VERSION 2
#define VK_KHR_FRAGMENT_SHADING_RATE_EXTENSION_NAME "VK_KHR_fragment_shading_rate"
typedef enum VkFragmentShadingRateCombinerOpKHR {
@@ -7869,46 +9226,9 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPipelineExecutableInternalRepresentationsKHR
#define VK_KHR_shader_integer_dot_product 1
#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_SPEC_VERSION 1
#define VK_KHR_SHADER_INTEGER_DOT_PRODUCT_EXTENSION_NAME "VK_KHR_shader_integer_dot_product"
-typedef struct VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 shaderIntegerDotProduct;
-} VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+typedef VkPhysicalDeviceShaderIntegerDotProductFeatures VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR;
-typedef struct VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 integerDotProduct8BitUnsignedAccelerated;
- VkBool32 integerDotProduct8BitSignedAccelerated;
- VkBool32 integerDotProduct8BitMixedSignednessAccelerated;
- VkBool32 integerDotProduct4x8BitPackedUnsignedAccelerated;
- VkBool32 integerDotProduct4x8BitPackedSignedAccelerated;
- VkBool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated;
- VkBool32 integerDotProduct16BitUnsignedAccelerated;
- VkBool32 integerDotProduct16BitSignedAccelerated;
- VkBool32 integerDotProduct16BitMixedSignednessAccelerated;
- VkBool32 integerDotProduct32BitUnsignedAccelerated;
- VkBool32 integerDotProduct32BitSignedAccelerated;
- VkBool32 integerDotProduct32BitMixedSignednessAccelerated;
- VkBool32 integerDotProduct64BitUnsignedAccelerated;
- VkBool32 integerDotProduct64BitSignedAccelerated;
- VkBool32 integerDotProduct64BitMixedSignednessAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated;
- VkBool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated;
-} VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+typedef VkPhysicalDeviceShaderIntegerDotProductProperties VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR;
@@ -7948,261 +9268,94 @@ typedef struct VkPhysicalDevicePresentIdFeaturesKHR {
#define VK_KHR_synchronization2 1
-typedef uint64_t VkFlags64;
#define VK_KHR_SYNCHRONIZATION_2_SPEC_VERSION 1
#define VK_KHR_SYNCHRONIZATION_2_EXTENSION_NAME "VK_KHR_synchronization2"
-typedef VkFlags64 VkPipelineStageFlags2KHR;
-
-// Flag bits for VkPipelineStageFlagBits2KHR
-typedef VkFlags64 VkPipelineStageFlagBits2KHR;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_NONE_KHR = 0ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR = 0x00000001ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR = 0x00000002ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR = 0x00000004ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR = 0x00000008ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR = 0x00000010ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR = 0x00000020ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR = 0x00000040ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR = 0x00000080ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR = 0x00000100ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR = 0x00000200ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR = 0x00000400ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR = 0x00000800ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR = 0x00001000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR = 0x00001000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR = 0x00002000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_HOST_BIT_KHR = 0x00004000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR = 0x00008000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR = 0x00010000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COPY_BIT_KHR = 0x100000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR = 0x200000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_BLIT_BIT_KHR = 0x400000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR = 0x800000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR = 0x1000000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR = 0x2000000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR = 0x4000000000ULL;
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR = 0x04000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR = 0x08000000ULL;
-#endif
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT = 0x01000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT = 0x00040000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV = 0x00020000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR = 0x00400000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV = 0x00400000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR = 0x02000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR = 0x00200000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV = 0x00200000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV = 0x02000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT = 0x00800000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV = 0x00080000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV = 0x00100000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI = 0x8000000000ULL;
-static const VkPipelineStageFlagBits2KHR VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI = 0x10000000000ULL;
-
-typedef VkFlags64 VkAccessFlags2KHR;
-
-// Flag bits for VkAccessFlagBits2KHR
-typedef VkFlags64 VkAccessFlagBits2KHR;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_NONE_KHR = 0ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR = 0x00000001ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INDEX_READ_BIT_KHR = 0x00000002ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR = 0x00000004ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_UNIFORM_READ_BIT_KHR = 0x00000008ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR = 0x00000010ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_READ_BIT_KHR = 0x00000020ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_WRITE_BIT_KHR = 0x00000040ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR = 0x00000080ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR = 0x00000100ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR = 0x00000200ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR = 0x00000400ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_READ_BIT_KHR = 0x00000800ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR = 0x00001000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_READ_BIT_KHR = 0x00002000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_HOST_WRITE_BIT_KHR = 0x00004000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_READ_BIT_KHR = 0x00008000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_MEMORY_WRITE_BIT_KHR = 0x00010000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR = 0x100000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR = 0x200000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR = 0x400000000ULL;
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR = 0x800000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR = 0x1000000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR = 0x2000000000ULL;
-#endif
-#ifdef VK_ENABLE_BETA_EXTENSIONS
-static const VkAccessFlagBits2KHR VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR = 0x4000000000ULL;
-#endif
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT = 0x02000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT = 0x04000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT = 0x08000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT = 0x00100000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV = 0x00020000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV = 0x00040000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR = 0x00800000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV = 0x00800000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR = 0x00200000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR = 0x00400000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV = 0x00200000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV = 0x00400000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT = 0x01000000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT = 0x00080000ULL;
-static const VkAccessFlagBits2KHR VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI = 0x8000000000ULL;
-
-
-typedef enum VkSubmitFlagBitsKHR {
- VK_SUBMIT_PROTECTED_BIT_KHR = 0x00000001,
- VK_SUBMIT_FLAG_BITS_MAX_ENUM_KHR = 0x7FFFFFFF
-} VkSubmitFlagBitsKHR;
-typedef VkFlags VkSubmitFlagsKHR;
-typedef struct VkMemoryBarrier2KHR {
- VkStructureType sType;
- const void* pNext;
- VkPipelineStageFlags2KHR srcStageMask;
- VkAccessFlags2KHR srcAccessMask;
- VkPipelineStageFlags2KHR dstStageMask;
- VkAccessFlags2KHR dstAccessMask;
-} VkMemoryBarrier2KHR;
+typedef VkPipelineStageFlags2 VkPipelineStageFlags2KHR;
-typedef struct VkBufferMemoryBarrier2KHR {
- VkStructureType sType;
- const void* pNext;
- VkPipelineStageFlags2KHR srcStageMask;
- VkAccessFlags2KHR srcAccessMask;
- VkPipelineStageFlags2KHR dstStageMask;
- VkAccessFlags2KHR dstAccessMask;
- uint32_t srcQueueFamilyIndex;
- uint32_t dstQueueFamilyIndex;
- VkBuffer buffer;
- VkDeviceSize offset;
- VkDeviceSize size;
-} VkBufferMemoryBarrier2KHR;
-
-typedef struct VkImageMemoryBarrier2KHR {
- VkStructureType sType;
- const void* pNext;
- VkPipelineStageFlags2KHR srcStageMask;
- VkAccessFlags2KHR srcAccessMask;
- VkPipelineStageFlags2KHR dstStageMask;
- VkAccessFlags2KHR dstAccessMask;
- VkImageLayout oldLayout;
- VkImageLayout newLayout;
- uint32_t srcQueueFamilyIndex;
- uint32_t dstQueueFamilyIndex;
- VkImage image;
- VkImageSubresourceRange subresourceRange;
-} VkImageMemoryBarrier2KHR;
-
-typedef struct VkDependencyInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkDependencyFlags dependencyFlags;
- uint32_t memoryBarrierCount;
- const VkMemoryBarrier2KHR* pMemoryBarriers;
- uint32_t bufferMemoryBarrierCount;
- const VkBufferMemoryBarrier2KHR* pBufferMemoryBarriers;
- uint32_t imageMemoryBarrierCount;
- const VkImageMemoryBarrier2KHR* pImageMemoryBarriers;
-} VkDependencyInfoKHR;
-
-typedef struct VkSemaphoreSubmitInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkSemaphore semaphore;
- uint64_t value;
- VkPipelineStageFlags2KHR stageMask;
- uint32_t deviceIndex;
-} VkSemaphoreSubmitInfoKHR;
+typedef VkPipelineStageFlagBits2 VkPipelineStageFlagBits2KHR;
-typedef struct VkCommandBufferSubmitInfoKHR {
- VkStructureType sType;
- const void* pNext;
- VkCommandBuffer commandBuffer;
- uint32_t deviceMask;
-} VkCommandBufferSubmitInfoKHR;
+typedef VkAccessFlags2 VkAccessFlags2KHR;
-typedef struct VkSubmitInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkSubmitFlagsKHR flags;
- uint32_t waitSemaphoreInfoCount;
- const VkSemaphoreSubmitInfoKHR* pWaitSemaphoreInfos;
- uint32_t commandBufferInfoCount;
- const VkCommandBufferSubmitInfoKHR* pCommandBufferInfos;
- uint32_t signalSemaphoreInfoCount;
- const VkSemaphoreSubmitInfoKHR* pSignalSemaphoreInfos;
-} VkSubmitInfo2KHR;
+typedef VkAccessFlagBits2 VkAccessFlagBits2KHR;
-typedef struct VkPhysicalDeviceSynchronization2FeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 synchronization2;
-} VkPhysicalDeviceSynchronization2FeaturesKHR;
+typedef VkSubmitFlagBits VkSubmitFlagBitsKHR;
+
+typedef VkSubmitFlags VkSubmitFlagsKHR;
+
+typedef VkMemoryBarrier2 VkMemoryBarrier2KHR;
+
+typedef VkBufferMemoryBarrier2 VkBufferMemoryBarrier2KHR;
+
+typedef VkImageMemoryBarrier2 VkImageMemoryBarrier2KHR;
+
+typedef VkDependencyInfo VkDependencyInfoKHR;
+
+typedef VkSubmitInfo2 VkSubmitInfo2KHR;
+
+typedef VkSemaphoreSubmitInfo VkSemaphoreSubmitInfoKHR;
+
+typedef VkCommandBufferSubmitInfo VkCommandBufferSubmitInfoKHR;
+
+typedef VkPhysicalDeviceSynchronization2Features VkPhysicalDeviceSynchronization2FeaturesKHR;
typedef struct VkQueueFamilyCheckpointProperties2NV {
- VkStructureType sType;
- void* pNext;
- VkPipelineStageFlags2KHR checkpointExecutionStageMask;
+ VkStructureType sType;
+ void* pNext;
+ VkPipelineStageFlags2 checkpointExecutionStageMask;
} VkQueueFamilyCheckpointProperties2NV;
typedef struct VkCheckpointData2NV {
- VkStructureType sType;
- void* pNext;
- VkPipelineStageFlags2KHR stage;
- void* pCheckpointMarker;
+ VkStructureType sType;
+ void* pNext;
+ VkPipelineStageFlags2 stage;
+ void* pCheckpointMarker;
} VkCheckpointData2NV;
-typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfoKHR* pDependencyInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2KHR stageMask);
-typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfoKHR* pDependencyInfos);
-typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfoKHR* pDependencyInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2KHR stage, VkQueryPool queryPool, uint32_t query);
-typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2KHR* pSubmits, VkFence fence);
-typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2KHR stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker);
+typedef void (VKAPI_PTR *PFN_vkCmdSetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, const VkDependencyInfo* pDependencyInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdResetEvent2KHR)(VkCommandBuffer commandBuffer, VkEvent event, VkPipelineStageFlags2 stageMask);
+typedef void (VKAPI_PTR *PFN_vkCmdWaitEvents2KHR)(VkCommandBuffer commandBuffer, uint32_t eventCount, const VkEvent* pEvents, const VkDependencyInfo* pDependencyInfos);
+typedef void (VKAPI_PTR *PFN_vkCmdPipelineBarrier2KHR)(VkCommandBuffer commandBuffer, const VkDependencyInfo* pDependencyInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteTimestamp2KHR)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkQueryPool queryPool, uint32_t query);
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSubmit2KHR)(VkQueue queue, uint32_t submitCount, const VkSubmitInfo2* pSubmits, VkFence fence);
+typedef void (VKAPI_PTR *PFN_vkCmdWriteBufferMarker2AMD)(VkCommandBuffer commandBuffer, VkPipelineStageFlags2 stage, VkBuffer dstBuffer, VkDeviceSize dstOffset, uint32_t marker);
typedef void (VKAPI_PTR *PFN_vkGetQueueCheckpointData2NV)(VkQueue queue, uint32_t* pCheckpointDataCount, VkCheckpointData2NV* pCheckpointData);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR void VKAPI_CALL vkCmdSetEvent2KHR(
VkCommandBuffer commandBuffer,
VkEvent event,
- const VkDependencyInfoKHR* pDependencyInfo);
+ const VkDependencyInfo* pDependencyInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdResetEvent2KHR(
VkCommandBuffer commandBuffer,
VkEvent event,
- VkPipelineStageFlags2KHR stageMask);
+ VkPipelineStageFlags2 stageMask);
VKAPI_ATTR void VKAPI_CALL vkCmdWaitEvents2KHR(
VkCommandBuffer commandBuffer,
uint32_t eventCount,
const VkEvent* pEvents,
- const VkDependencyInfoKHR* pDependencyInfos);
+ const VkDependencyInfo* pDependencyInfos);
VKAPI_ATTR void VKAPI_CALL vkCmdPipelineBarrier2KHR(
VkCommandBuffer commandBuffer,
- const VkDependencyInfoKHR* pDependencyInfo);
+ const VkDependencyInfo* pDependencyInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdWriteTimestamp2KHR(
VkCommandBuffer commandBuffer,
- VkPipelineStageFlags2KHR stage,
+ VkPipelineStageFlags2 stage,
VkQueryPool queryPool,
uint32_t query);
VKAPI_ATTR VkResult VKAPI_CALL vkQueueSubmit2KHR(
VkQueue queue,
uint32_t submitCount,
- const VkSubmitInfo2KHR* pSubmits,
+ const VkSubmitInfo2* pSubmits,
VkFence fence);
VKAPI_ATTR void VKAPI_CALL vkCmdWriteBufferMarker2AMD(
VkCommandBuffer commandBuffer,
- VkPipelineStageFlags2KHR stage,
+ VkPipelineStageFlags2 stage,
VkBuffer dstBuffer,
VkDeviceSize dstOffset,
uint32_t marker);
@@ -8228,11 +9381,7 @@ typedef struct VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR {
#define VK_KHR_zero_initialize_workgroup_memory 1
#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_SPEC_VERSION 1
#define VK_KHR_ZERO_INITIALIZE_WORKGROUP_MEMORY_EXTENSION_NAME "VK_KHR_zero_initialize_workgroup_memory"
-typedef struct VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR {
- VkStructureType sType;
- void* pNext;
- VkBool32 shaderZeroInitializeWorkgroupMemory;
-} VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
+typedef VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
@@ -8253,148 +9402,104 @@ typedef struct VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR {
#define VK_KHR_copy_commands2 1
#define VK_KHR_COPY_COMMANDS_2_SPEC_VERSION 1
#define VK_KHR_COPY_COMMANDS_2_EXTENSION_NAME "VK_KHR_copy_commands2"
-typedef struct VkBufferCopy2KHR {
- VkStructureType sType;
- const void* pNext;
- VkDeviceSize srcOffset;
- VkDeviceSize dstOffset;
- VkDeviceSize size;
-} VkBufferCopy2KHR;
+typedef VkCopyBufferInfo2 VkCopyBufferInfo2KHR;
-typedef struct VkCopyBufferInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkBuffer srcBuffer;
- VkBuffer dstBuffer;
- uint32_t regionCount;
- const VkBufferCopy2KHR* pRegions;
-} VkCopyBufferInfo2KHR;
+typedef VkCopyImageInfo2 VkCopyImageInfo2KHR;
-typedef struct VkImageCopy2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImageSubresourceLayers srcSubresource;
- VkOffset3D srcOffset;
- VkImageSubresourceLayers dstSubresource;
- VkOffset3D dstOffset;
- VkExtent3D extent;
-} VkImageCopy2KHR;
+typedef VkCopyBufferToImageInfo2 VkCopyBufferToImageInfo2KHR;
-typedef struct VkCopyImageInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImage srcImage;
- VkImageLayout srcImageLayout;
- VkImage dstImage;
- VkImageLayout dstImageLayout;
- uint32_t regionCount;
- const VkImageCopy2KHR* pRegions;
-} VkCopyImageInfo2KHR;
+typedef VkCopyImageToBufferInfo2 VkCopyImageToBufferInfo2KHR;
-typedef struct VkBufferImageCopy2KHR {
- VkStructureType sType;
- const void* pNext;
- VkDeviceSize bufferOffset;
- uint32_t bufferRowLength;
- uint32_t bufferImageHeight;
- VkImageSubresourceLayers imageSubresource;
- VkOffset3D imageOffset;
- VkExtent3D imageExtent;
-} VkBufferImageCopy2KHR;
+typedef VkBlitImageInfo2 VkBlitImageInfo2KHR;
-typedef struct VkCopyBufferToImageInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkBuffer srcBuffer;
- VkImage dstImage;
- VkImageLayout dstImageLayout;
- uint32_t regionCount;
- const VkBufferImageCopy2KHR* pRegions;
-} VkCopyBufferToImageInfo2KHR;
-
-typedef struct VkCopyImageToBufferInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImage srcImage;
- VkImageLayout srcImageLayout;
- VkBuffer dstBuffer;
- uint32_t regionCount;
- const VkBufferImageCopy2KHR* pRegions;
-} VkCopyImageToBufferInfo2KHR;
-
-typedef struct VkImageBlit2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImageSubresourceLayers srcSubresource;
- VkOffset3D srcOffsets[2];
- VkImageSubresourceLayers dstSubresource;
- VkOffset3D dstOffsets[2];
-} VkImageBlit2KHR;
+typedef VkResolveImageInfo2 VkResolveImageInfo2KHR;
-typedef struct VkBlitImageInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImage srcImage;
- VkImageLayout srcImageLayout;
- VkImage dstImage;
- VkImageLayout dstImageLayout;
- uint32_t regionCount;
- const VkImageBlit2KHR* pRegions;
- VkFilter filter;
-} VkBlitImageInfo2KHR;
+typedef VkBufferCopy2 VkBufferCopy2KHR;
-typedef struct VkImageResolve2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImageSubresourceLayers srcSubresource;
- VkOffset3D srcOffset;
- VkImageSubresourceLayers dstSubresource;
- VkOffset3D dstOffset;
- VkExtent3D extent;
-} VkImageResolve2KHR;
+typedef VkImageCopy2 VkImageCopy2KHR;
-typedef struct VkResolveImageInfo2KHR {
- VkStructureType sType;
- const void* pNext;
- VkImage srcImage;
- VkImageLayout srcImageLayout;
- VkImage dstImage;
- VkImageLayout dstImageLayout;
- uint32_t regionCount;
- const VkImageResolve2KHR* pRegions;
-} VkResolveImageInfo2KHR;
+typedef VkImageBlit2 VkImageBlit2KHR;
+
+typedef VkBufferImageCopy2 VkBufferImageCopy2KHR;
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2KHR* pCopyBufferInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2KHR* pCopyImageInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2KHR* pBlitImageInfo);
-typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2KHR* pResolveImageInfo);
+typedef VkImageResolve2 VkImageResolve2KHR;
+
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferInfo2* pCopyBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageInfo2* pCopyImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyBufferToImage2KHR)(VkCommandBuffer commandBuffer, const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdCopyImageToBuffer2KHR)(VkCommandBuffer commandBuffer, const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdBlitImage2KHR)(VkCommandBuffer commandBuffer, const VkBlitImageInfo2* pBlitImageInfo);
+typedef void (VKAPI_PTR *PFN_vkCmdResolveImage2KHR)(VkCommandBuffer commandBuffer, const VkResolveImageInfo2* pResolveImageInfo);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR void VKAPI_CALL vkCmdCopyBuffer2KHR(
VkCommandBuffer commandBuffer,
- const VkCopyBufferInfo2KHR* pCopyBufferInfo);
+ const VkCopyBufferInfo2* pCopyBufferInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdCopyImage2KHR(
VkCommandBuffer commandBuffer,
- const VkCopyImageInfo2KHR* pCopyImageInfo);
+ const VkCopyImageInfo2* pCopyImageInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdCopyBufferToImage2KHR(
VkCommandBuffer commandBuffer,
- const VkCopyBufferToImageInfo2KHR* pCopyBufferToImageInfo);
+ const VkCopyBufferToImageInfo2* pCopyBufferToImageInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdCopyImageToBuffer2KHR(
VkCommandBuffer commandBuffer,
- const VkCopyImageToBufferInfo2KHR* pCopyImageToBufferInfo);
+ const VkCopyImageToBufferInfo2* pCopyImageToBufferInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdBlitImage2KHR(
VkCommandBuffer commandBuffer,
- const VkBlitImageInfo2KHR* pBlitImageInfo);
+ const VkBlitImageInfo2* pBlitImageInfo);
VKAPI_ATTR void VKAPI_CALL vkCmdResolveImage2KHR(
VkCommandBuffer commandBuffer,
- const VkResolveImageInfo2KHR* pResolveImageInfo);
+ const VkResolveImageInfo2* pResolveImageInfo);
+#endif
+
+
+#define VK_KHR_format_feature_flags2 1
+#define VK_KHR_FORMAT_FEATURE_FLAGS_2_SPEC_VERSION 1
+#define VK_KHR_FORMAT_FEATURE_FLAGS_2_EXTENSION_NAME "VK_KHR_format_feature_flags2"
+typedef VkFormatFeatureFlags2 VkFormatFeatureFlags2KHR;
+
+typedef VkFormatFeatureFlagBits2 VkFormatFeatureFlagBits2KHR;
+
+typedef VkFormatProperties3 VkFormatProperties3KHR;
+
+
+
+#define VK_KHR_maintenance4 1
+#define VK_KHR_MAINTENANCE_4_SPEC_VERSION 2
+#define VK_KHR_MAINTENANCE_4_EXTENSION_NAME "VK_KHR_maintenance4"
+typedef VkPhysicalDeviceMaintenance4Features VkPhysicalDeviceMaintenance4FeaturesKHR;
+
+typedef VkPhysicalDeviceMaintenance4Properties VkPhysicalDeviceMaintenance4PropertiesKHR;
+
+typedef VkDeviceBufferMemoryRequirements VkDeviceBufferMemoryRequirementsKHR;
+
+typedef VkDeviceImageMemoryRequirements VkDeviceImageMemoryRequirementsKHR;
+
+typedef void (VKAPI_PTR *PFN_vkGetDeviceBufferMemoryRequirementsKHR)(VkDevice device, const VkDeviceBufferMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceImageMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, VkMemoryRequirements2* pMemoryRequirements);
+typedef void (VKAPI_PTR *PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)(VkDevice device, const VkDeviceImageMemoryRequirements* pInfo, uint32_t* pSparseMemoryRequirementCount, VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceBufferMemoryRequirementsKHR(
+ VkDevice device,
+ const VkDeviceBufferMemoryRequirements* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageMemoryRequirementsKHR(
+ VkDevice device,
+ const VkDeviceImageMemoryRequirements* pInfo,
+ VkMemoryRequirements2* pMemoryRequirements);
+
+VKAPI_ATTR void VKAPI_CALL vkGetDeviceImageSparseMemoryRequirementsKHR(
+ VkDevice device,
+ const VkDeviceImageMemoryRequirements* pInfo,
+ uint32_t* pSparseMemoryRequirementCount,
+ VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
#endif
@@ -8442,6 +9547,7 @@ typedef enum VkDebugReportObjectTypeEXT {
VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT = 1000029001,
VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT = 1000150000,
VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT = 1000165000,
+ VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT = 1000366000,
VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT,
@@ -9027,11 +10133,7 @@ typedef struct VkValidationFlagsEXT {
#define VK_EXT_texture_compression_astc_hdr 1
#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_SPEC_VERSION 1
#define VK_EXT_TEXTURE_COMPRESSION_ASTC_HDR_EXTENSION_NAME "VK_EXT_texture_compression_astc_hdr"
-typedef struct VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 textureCompressionASTC_HDR;
-} VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+typedef VkPhysicalDeviceTextureCompressionASTCHDRFeatures VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
@@ -9301,8 +10403,10 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetPastPresentationTimingGOOGLE(
#define VK_NV_viewport_array2 1
-#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION 1
-#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME "VK_NV_viewport_array2"
+#define VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION 1
+#define VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME "VK_NV_viewport_array2"
+#define VK_NV_VIEWPORT_ARRAY2_SPEC_VERSION VK_NV_VIEWPORT_ARRAY_2_SPEC_VERSION
+#define VK_NV_VIEWPORT_ARRAY2_EXTENSION_NAME VK_NV_VIEWPORT_ARRAY_2_EXTENSION_NAME
#define VK_NVX_multiview_per_view_attributes 1
@@ -9657,35 +10761,13 @@ typedef VkPhysicalDeviceSamplerFilterMinmaxProperties VkPhysicalDeviceSamplerFil
#define VK_EXT_inline_uniform_block 1
#define VK_EXT_INLINE_UNIFORM_BLOCK_SPEC_VERSION 1
#define VK_EXT_INLINE_UNIFORM_BLOCK_EXTENSION_NAME "VK_EXT_inline_uniform_block"
-typedef struct VkPhysicalDeviceInlineUniformBlockFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 inlineUniformBlock;
- VkBool32 descriptorBindingInlineUniformBlockUpdateAfterBind;
-} VkPhysicalDeviceInlineUniformBlockFeaturesEXT;
+typedef VkPhysicalDeviceInlineUniformBlockFeatures VkPhysicalDeviceInlineUniformBlockFeaturesEXT;
-typedef struct VkPhysicalDeviceInlineUniformBlockPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t maxInlineUniformBlockSize;
- uint32_t maxPerStageDescriptorInlineUniformBlocks;
- uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks;
- uint32_t maxDescriptorSetInlineUniformBlocks;
- uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks;
-} VkPhysicalDeviceInlineUniformBlockPropertiesEXT;
+typedef VkPhysicalDeviceInlineUniformBlockProperties VkPhysicalDeviceInlineUniformBlockPropertiesEXT;
-typedef struct VkWriteDescriptorSetInlineUniformBlockEXT {
- VkStructureType sType;
- const void* pNext;
- uint32_t dataSize;
- const void* pData;
-} VkWriteDescriptorSetInlineUniformBlockEXT;
+typedef VkWriteDescriptorSetInlineUniformBlock VkWriteDescriptorSetInlineUniformBlockEXT;
-typedef struct VkDescriptorPoolInlineUniformBlockCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- uint32_t maxInlineUniformBlockBindings;
-} VkDescriptorPoolInlineUniformBlockCreateInfoEXT;
+typedef VkDescriptorPoolInlineUniformBlockCreateInfo VkDescriptorPoolInlineUniformBlockCreateInfoEXT;
@@ -9872,7 +10954,7 @@ typedef struct VkPhysicalDeviceShaderSMBuiltinsFeaturesNV {
#define VK_EXT_image_drm_format_modifier 1
-#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 1
+#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_SPEC_VERSION 2
#define VK_EXT_IMAGE_DRM_FORMAT_MODIFIER_EXTENSION_NAME "VK_EXT_image_drm_format_modifier"
typedef struct VkDrmFormatModifierPropertiesEXT {
uint64_t drmFormatModifier;
@@ -9917,6 +10999,19 @@ typedef struct VkImageDrmFormatModifierPropertiesEXT {
uint64_t drmFormatModifier;
} VkImageDrmFormatModifierPropertiesEXT;
+typedef struct VkDrmFormatModifierProperties2EXT {
+ uint64_t drmFormatModifier;
+ uint32_t drmFormatModifierPlaneCount;
+ VkFormatFeatureFlags2 drmFormatModifierTilingFeatures;
+} VkDrmFormatModifierProperties2EXT;
+
+typedef struct VkDrmFormatModifierPropertiesList2EXT {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t drmFormatModifierCount;
+ VkDrmFormatModifierProperties2EXT* pDrmFormatModifierProperties;
+} VkDrmFormatModifierPropertiesList2EXT;
+
typedef VkResult (VKAPI_PTR *PFN_vkGetImageDrmFormatModifierPropertiesEXT)(VkDevice device, VkImage image, VkImageDrmFormatModifierPropertiesEXT* pProperties);
#ifndef VK_NO_PROTOTYPES
@@ -10518,19 +11613,9 @@ typedef struct VkFilterCubicImageViewImageFormatPropertiesEXT {
#define VK_EXT_global_priority 1
#define VK_EXT_GLOBAL_PRIORITY_SPEC_VERSION 2
#define VK_EXT_GLOBAL_PRIORITY_EXTENSION_NAME "VK_EXT_global_priority"
+typedef VkQueueGlobalPriorityKHR VkQueueGlobalPriorityEXT;
-typedef enum VkQueueGlobalPriorityEXT {
- VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT = 128,
- VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT = 256,
- VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT = 512,
- VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT = 1024,
- VK_QUEUE_GLOBAL_PRIORITY_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkQueueGlobalPriorityEXT;
-typedef struct VkDeviceQueueGlobalPriorityCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkQueueGlobalPriorityEXT globalPriority;
-} VkDeviceQueueGlobalPriorityCreateInfoEXT;
+typedef VkDeviceQueueGlobalPriorityCreateInfoKHR VkDeviceQueueGlobalPriorityCreateInfoEXT;
@@ -10708,26 +11793,13 @@ typedef struct VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT {
#define VK_EXT_pipeline_creation_feedback 1
#define VK_EXT_PIPELINE_CREATION_FEEDBACK_SPEC_VERSION 1
#define VK_EXT_PIPELINE_CREATION_FEEDBACK_EXTENSION_NAME "VK_EXT_pipeline_creation_feedback"
+typedef VkPipelineCreationFeedbackFlagBits VkPipelineCreationFeedbackFlagBitsEXT;
-typedef enum VkPipelineCreationFeedbackFlagBitsEXT {
- VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT = 0x00000001,
- VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT = 0x00000002,
- VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT = 0x00000004,
- VK_PIPELINE_CREATION_FEEDBACK_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkPipelineCreationFeedbackFlagBitsEXT;
-typedef VkFlags VkPipelineCreationFeedbackFlagsEXT;
-typedef struct VkPipelineCreationFeedbackEXT {
- VkPipelineCreationFeedbackFlagsEXT flags;
- uint64_t duration;
-} VkPipelineCreationFeedbackEXT;
-
-typedef struct VkPipelineCreationFeedbackCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkPipelineCreationFeedbackEXT* pPipelineCreationFeedback;
- uint32_t pipelineStageCreationFeedbackCount;
- VkPipelineCreationFeedbackEXT* pPipelineStageCreationFeedbacks;
-} VkPipelineCreationFeedbackCreateInfoEXT;
+typedef VkPipelineCreationFeedbackFlags VkPipelineCreationFeedbackFlagsEXT;
+
+typedef VkPipelineCreationFeedbackCreateInfo VkPipelineCreationFeedbackCreateInfoEXT;
+
+typedef VkPipelineCreationFeedback VkPipelineCreationFeedbackEXT;
@@ -11078,7 +12150,7 @@ VKAPI_ATTR void VKAPI_CALL vkSetLocalDimmingAMD(
#define VK_EXT_fragment_density_map 1
-#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 1
+#define VK_EXT_FRAGMENT_DENSITY_MAP_SPEC_VERSION 2
#define VK_EXT_FRAGMENT_DENSITY_MAP_EXTENSION_NAME "VK_EXT_fragment_density_map"
typedef struct VkPhysicalDeviceFragmentDensityMapFeaturesEXT {
VkStructureType sType;
@@ -11112,8 +12184,10 @@ typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLay
#define VK_GOOGLE_hlsl_functionality1 1
-#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION 1
-#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1"
+#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION 1
+#define VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME "VK_GOOGLE_hlsl_functionality1"
+#define VK_GOOGLE_HLSL_FUNCTIONALITY1_SPEC_VERSION VK_GOOGLE_HLSL_FUNCTIONALITY_1_SPEC_VERSION
+#define VK_GOOGLE_HLSL_FUNCTIONALITY1_EXTENSION_NAME VK_GOOGLE_HLSL_FUNCTIONALITY_1_EXTENSION_NAME
#define VK_GOOGLE_decorate_string 1
@@ -11124,27 +12198,11 @@ typedef VkPhysicalDeviceScalarBlockLayoutFeatures VkPhysicalDeviceScalarBlockLay
#define VK_EXT_subgroup_size_control 1
#define VK_EXT_SUBGROUP_SIZE_CONTROL_SPEC_VERSION 2
#define VK_EXT_SUBGROUP_SIZE_CONTROL_EXTENSION_NAME "VK_EXT_subgroup_size_control"
-typedef struct VkPhysicalDeviceSubgroupSizeControlFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 subgroupSizeControl;
- VkBool32 computeFullSubgroups;
-} VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
+typedef VkPhysicalDeviceSubgroupSizeControlFeatures VkPhysicalDeviceSubgroupSizeControlFeaturesEXT;
-typedef struct VkPhysicalDeviceSubgroupSizeControlPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t minSubgroupSize;
- uint32_t maxSubgroupSize;
- uint32_t maxComputeWorkgroupSubgroups;
- VkShaderStageFlags requiredSubgroupSizeStages;
-} VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
+typedef VkPhysicalDeviceSubgroupSizeControlProperties VkPhysicalDeviceSubgroupSizeControlPropertiesEXT;
-typedef struct VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t requiredSubgroupSize;
-} VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+typedef VkPipelineShaderStageRequiredSubgroupSizeCreateInfo VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
@@ -11261,35 +12319,19 @@ VKAPI_ATTR VkDeviceAddress VKAPI_CALL vkGetBufferDeviceAddressEXT(
#define VK_EXT_tooling_info 1
#define VK_EXT_TOOLING_INFO_SPEC_VERSION 1
#define VK_EXT_TOOLING_INFO_EXTENSION_NAME "VK_EXT_tooling_info"
+typedef VkToolPurposeFlagBits VkToolPurposeFlagBitsEXT;
-typedef enum VkToolPurposeFlagBitsEXT {
- VK_TOOL_PURPOSE_VALIDATION_BIT_EXT = 0x00000001,
- VK_TOOL_PURPOSE_PROFILING_BIT_EXT = 0x00000002,
- VK_TOOL_PURPOSE_TRACING_BIT_EXT = 0x00000004,
- VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT = 0x00000008,
- VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT = 0x00000010,
- VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT = 0x00000020,
- VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT = 0x00000040,
- VK_TOOL_PURPOSE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkToolPurposeFlagBitsEXT;
-typedef VkFlags VkToolPurposeFlagsEXT;
-typedef struct VkPhysicalDeviceToolPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- char name[VK_MAX_EXTENSION_NAME_SIZE];
- char version[VK_MAX_EXTENSION_NAME_SIZE];
- VkToolPurposeFlagsEXT purposes;
- char description[VK_MAX_DESCRIPTION_SIZE];
- char layer[VK_MAX_EXTENSION_NAME_SIZE];
-} VkPhysicalDeviceToolPropertiesEXT;
+typedef VkToolPurposeFlags VkToolPurposeFlagsEXT;
-typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
+typedef VkPhysicalDeviceToolProperties VkPhysicalDeviceToolPropertiesEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkGetPhysicalDeviceToolPropertiesEXT)(VkPhysicalDevice physicalDevice, uint32_t* pToolCount, VkPhysicalDeviceToolProperties* pToolProperties);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkGetPhysicalDeviceToolPropertiesEXT(
VkPhysicalDevice physicalDevice,
uint32_t* pToolCount,
- VkPhysicalDeviceToolPropertiesEXT* pToolProperties);
+ VkPhysicalDeviceToolProperties* pToolProperties);
#endif
@@ -11720,11 +12762,7 @@ typedef struct VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT {
#define VK_EXT_shader_demote_to_helper_invocation 1
#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_SPEC_VERSION 1
#define VK_EXT_SHADER_DEMOTE_TO_HELPER_INVOCATION_EXTENSION_NAME "VK_EXT_shader_demote_to_helper_invocation"
-typedef struct VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 shaderDemoteToHelperInvocation;
-} VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+typedef VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
@@ -11946,14 +12984,7 @@ typedef struct VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT {
VkBool32 texelBufferAlignment;
} VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
-typedef struct VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- VkDeviceSize storageTexelBufferOffsetAlignmentBytes;
- VkBool32 storageTexelBufferOffsetSingleTexelAlignment;
- VkDeviceSize uniformTexelBufferOffsetAlignmentBytes;
- VkBool32 uniformTexelBufferOffsetSingleTexelAlignment;
-} VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+typedef VkPhysicalDeviceTexelBufferAlignmentProperties VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT;
@@ -12091,61 +13122,49 @@ typedef struct VkPhysicalDeviceCustomBorderColorFeaturesEXT {
#define VK_EXT_private_data 1
-VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkPrivateDataSlotEXT)
+typedef VkPrivateDataSlot VkPrivateDataSlotEXT;
+
#define VK_EXT_PRIVATE_DATA_SPEC_VERSION 1
#define VK_EXT_PRIVATE_DATA_EXTENSION_NAME "VK_EXT_private_data"
+typedef VkPrivateDataSlotCreateFlags VkPrivateDataSlotCreateFlagsEXT;
-typedef enum VkPrivateDataSlotCreateFlagBitsEXT {
- VK_PRIVATE_DATA_SLOT_CREATE_FLAG_BITS_MAX_ENUM_EXT = 0x7FFFFFFF
-} VkPrivateDataSlotCreateFlagBitsEXT;
-typedef VkFlags VkPrivateDataSlotCreateFlagsEXT;
-typedef struct VkPhysicalDevicePrivateDataFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 privateData;
-} VkPhysicalDevicePrivateDataFeaturesEXT;
+typedef VkPrivateDataSlotCreateFlagBits VkPrivateDataSlotCreateFlagBitsEXT;
-typedef struct VkDevicePrivateDataCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- uint32_t privateDataSlotRequestCount;
-} VkDevicePrivateDataCreateInfoEXT;
+typedef VkPhysicalDevicePrivateDataFeatures VkPhysicalDevicePrivateDataFeaturesEXT;
-typedef struct VkPrivateDataSlotCreateInfoEXT {
- VkStructureType sType;
- const void* pNext;
- VkPrivateDataSlotCreateFlagsEXT flags;
-} VkPrivateDataSlotCreateInfoEXT;
+typedef VkDevicePrivateDataCreateInfo VkDevicePrivateDataCreateInfoEXT;
-typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfoEXT* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlotEXT* pPrivateDataSlot);
-typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlotEXT privateDataSlot, const VkAllocationCallbacks* pAllocator);
-typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t data);
-typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlotEXT privateDataSlot, uint64_t* pData);
+typedef VkPrivateDataSlotCreateInfo VkPrivateDataSlotCreateInfoEXT;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreatePrivateDataSlotEXT)(VkDevice device, const VkPrivateDataSlotCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkPrivateDataSlot* pPrivateDataSlot);
+typedef void (VKAPI_PTR *PFN_vkDestroyPrivateDataSlotEXT)(VkDevice device, VkPrivateDataSlot privateDataSlot, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkSetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t data);
+typedef void (VKAPI_PTR *PFN_vkGetPrivateDataEXT)(VkDevice device, VkObjectType objectType, uint64_t objectHandle, VkPrivateDataSlot privateDataSlot, uint64_t* pData);
#ifndef VK_NO_PROTOTYPES
VKAPI_ATTR VkResult VKAPI_CALL vkCreatePrivateDataSlotEXT(
VkDevice device,
- const VkPrivateDataSlotCreateInfoEXT* pCreateInfo,
+ const VkPrivateDataSlotCreateInfo* pCreateInfo,
const VkAllocationCallbacks* pAllocator,
- VkPrivateDataSlotEXT* pPrivateDataSlot);
+ VkPrivateDataSlot* pPrivateDataSlot);
VKAPI_ATTR void VKAPI_CALL vkDestroyPrivateDataSlotEXT(
VkDevice device,
- VkPrivateDataSlotEXT privateDataSlot,
+ VkPrivateDataSlot privateDataSlot,
const VkAllocationCallbacks* pAllocator);
VKAPI_ATTR VkResult VKAPI_CALL vkSetPrivateDataEXT(
VkDevice device,
VkObjectType objectType,
uint64_t objectHandle,
- VkPrivateDataSlotEXT privateDataSlot,
+ VkPrivateDataSlot privateDataSlot,
uint64_t data);
VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT(
VkDevice device,
VkObjectType objectType,
uint64_t objectHandle,
- VkPrivateDataSlotEXT privateDataSlot,
+ VkPrivateDataSlot privateDataSlot,
uint64_t* pData);
#endif
@@ -12153,11 +13172,7 @@ VKAPI_ATTR void VKAPI_CALL vkGetPrivateDataEXT(
#define VK_EXT_pipeline_creation_cache_control 1
#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_SPEC_VERSION 3
#define VK_EXT_PIPELINE_CREATION_CACHE_CONTROL_EXTENSION_NAME "VK_EXT_pipeline_creation_cache_control"
-typedef struct VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 pipelineCreationCacheControl;
-} VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT;
+typedef VkPhysicalDevicePipelineCreationCacheControlFeatures VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT;
@@ -12383,11 +13398,7 @@ typedef struct VkCopyCommandTransformInfoQCOM {
#define VK_EXT_image_robustness 1
#define VK_EXT_IMAGE_ROBUSTNESS_SPEC_VERSION 1
#define VK_EXT_IMAGE_ROBUSTNESS_EXTENSION_NAME "VK_EXT_image_robustness"
-typedef struct VkPhysicalDeviceImageRobustnessFeaturesEXT {
- VkStructureType sType;
- void* pNext;
- VkBool32 robustImageAccess;
-} VkPhysicalDeviceImageRobustnessFeaturesEXT;
+typedef VkPhysicalDeviceImageRobustnessFeatures VkPhysicalDeviceImageRobustnessFeaturesEXT;
@@ -12403,6 +13414,30 @@ typedef struct VkPhysicalDevice4444FormatsFeaturesEXT {
+#define VK_ARM_rasterization_order_attachment_access 1
+#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_SPEC_VERSION 1
+#define VK_ARM_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_EXTENSION_NAME "VK_ARM_rasterization_order_attachment_access"
+typedef struct VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 rasterizationOrderColorAttachmentAccess;
+ VkBool32 rasterizationOrderDepthAttachmentAccess;
+ VkBool32 rasterizationOrderStencilAttachmentAccess;
+} VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM;
+
+
+
+#define VK_EXT_rgba10x6_formats 1
+#define VK_EXT_RGBA10X6_FORMATS_SPEC_VERSION 1
+#define VK_EXT_RGBA10X6_FORMATS_EXTENSION_NAME "VK_EXT_rgba10x6_formats"
+typedef struct VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 formatRgba10x6WithoutYCbCrSampler;
+} VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT;
+
+
+
#define VK_NV_acquire_winrt_display 1
#define VK_NV_ACQUIRE_WINRT_DISPLAY_SPEC_VERSION 1
#define VK_NV_ACQUIRE_WINRT_DISPLAY_EXTENSION_NAME "VK_NV_acquire_winrt_display"
@@ -12499,6 +13534,23 @@ typedef struct VkPhysicalDeviceDrmPropertiesEXT {
+#define VK_EXT_depth_clip_control 1
+#define VK_EXT_DEPTH_CLIP_CONTROL_SPEC_VERSION 1
+#define VK_EXT_DEPTH_CLIP_CONTROL_EXTENSION_NAME "VK_EXT_depth_clip_control"
+typedef struct VkPhysicalDeviceDepthClipControlFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 depthClipControl;
+} VkPhysicalDeviceDepthClipControlFeaturesEXT;
+
+typedef struct VkPipelineViewportDepthClipControlCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkBool32 negativeOneToOne;
+} VkPipelineViewportDepthClipControlCreateInfoEXT;
+
+
+
#define VK_EXT_primitive_topology_list_restart 1
#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_SPEC_VERSION 1
#define VK_EXT_PRIMITIVE_TOPOLOGY_LIST_RESTART_EXTENSION_NAME "VK_EXT_primitive_topology_list_restart"
@@ -12660,21 +13712,29 @@ VKAPI_ATTR void VKAPI_CALL vkCmdSetColorWrite
#define VK_EXT_global_priority_query 1
-#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT 16U
#define VK_EXT_GLOBAL_PRIORITY_QUERY_SPEC_VERSION 1
#define VK_EXT_GLOBAL_PRIORITY_QUERY_EXTENSION_NAME "VK_EXT_global_priority_query"
-typedef struct VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT {
+#define VK_MAX_GLOBAL_PRIORITY_SIZE_EXT VK_MAX_GLOBAL_PRIORITY_SIZE_KHR
+typedef VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT;
+
+typedef VkQueueFamilyGlobalPriorityPropertiesKHR VkQueueFamilyGlobalPriorityPropertiesEXT;
+
+
+
+#define VK_EXT_image_view_min_lod 1
+#define VK_EXT_IMAGE_VIEW_MIN_LOD_SPEC_VERSION 1
+#define VK_EXT_IMAGE_VIEW_MIN_LOD_EXTENSION_NAME "VK_EXT_image_view_min_lod"
+typedef struct VkPhysicalDeviceImageViewMinLodFeaturesEXT {
VkStructureType sType;
void* pNext;
- VkBool32 globalPriorityQuery;
-} VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT;
+ VkBool32 minLod;
+} VkPhysicalDeviceImageViewMinLodFeaturesEXT;
-typedef struct VkQueueFamilyGlobalPriorityPropertiesEXT {
- VkStructureType sType;
- void* pNext;
- uint32_t priorityCount;
- VkQueueGlobalPriorityEXT priorities[VK_MAX_GLOBAL_PRIORITY_SIZE_EXT];
-} VkQueueFamilyGlobalPriorityPropertiesEXT;
+typedef struct VkImageViewMinLodCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ float minLod;
+} VkImageViewMinLodCreateInfoEXT;
@@ -12732,9 +13792,87 @@ VKAPI_ATTR void VKAPI_CALL vkCmdDrawMultiIndexedEXT(
#define VK_EXT_LOAD_STORE_OP_NONE_EXTENSION_NAME "VK_EXT_load_store_op_none"
+#define VK_EXT_border_color_swizzle 1
+#define VK_EXT_BORDER_COLOR_SWIZZLE_SPEC_VERSION 1
+#define VK_EXT_BORDER_COLOR_SWIZZLE_EXTENSION_NAME "VK_EXT_border_color_swizzle"
+typedef struct VkPhysicalDeviceBorderColorSwizzleFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 borderColorSwizzle;
+ VkBool32 borderColorSwizzleFromImage;
+} VkPhysicalDeviceBorderColorSwizzleFeaturesEXT;
+
+typedef struct VkSamplerBorderColorComponentMappingCreateInfoEXT {
+ VkStructureType sType;
+ const void* pNext;
+ VkComponentMapping components;
+ VkBool32 srgb;
+} VkSamplerBorderColorComponentMappingCreateInfoEXT;
+
+
+
+#define VK_EXT_pageable_device_local_memory 1
+#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_SPEC_VERSION 1
+#define VK_EXT_PAGEABLE_DEVICE_LOCAL_MEMORY_EXTENSION_NAME "VK_EXT_pageable_device_local_memory"
+typedef struct VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 pageableDeviceLocalMemory;
+} VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+
+typedef void (VKAPI_PTR *PFN_vkSetDeviceMemoryPriorityEXT)(VkDevice device, VkDeviceMemory memory, float priority);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR void VKAPI_CALL vkSetDeviceMemoryPriorityEXT(
+ VkDevice device,
+ VkDeviceMemory memory,
+ float priority);
+#endif
+
+
+#define VK_QCOM_fragment_density_map_offset 1
+#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_SPEC_VERSION 1
+#define VK_QCOM_FRAGMENT_DENSITY_MAP_OFFSET_EXTENSION_NAME "VK_QCOM_fragment_density_map_offset"
+typedef struct VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 fragmentDensityMapOffset;
+} VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
+
+typedef struct VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM {
+ VkStructureType sType;
+ void* pNext;
+ VkExtent2D fragmentDensityOffsetGranularity;
+} VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
+
+typedef struct VkSubpassFragmentDensityMapOffsetEndInfoQCOM {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t fragmentDensityOffsetCount;
+ const VkOffset2D* pFragmentDensityOffsets;
+} VkSubpassFragmentDensityMapOffsetEndInfoQCOM;
+
+
+
+#define VK_NV_linear_color_attachment 1
+#define VK_NV_LINEAR_COLOR_ATTACHMENT_SPEC_VERSION 1
+#define VK_NV_LINEAR_COLOR_ATTACHMENT_EXTENSION_NAME "VK_NV_linear_color_attachment"
+typedef struct VkPhysicalDeviceLinearColorAttachmentFeaturesNV {
+ VkStructureType sType;
+ void* pNext;
+ VkBool32 linearColorAttachment;
+} VkPhysicalDeviceLinearColorAttachmentFeaturesNV;
+
+
+
+#define VK_GOOGLE_surfaceless_query 1
+#define VK_GOOGLE_SURFACELESS_QUERY_SPEC_VERSION 1
+#define VK_GOOGLE_SURFACELESS_QUERY_EXTENSION_NAME "VK_GOOGLE_surfaceless_query"
+
+
#define VK_KHR_acceleration_structure 1
VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkAccelerationStructureKHR)
-#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 12
+#define VK_KHR_ACCELERATION_STRUCTURE_SPEC_VERSION 13
#define VK_KHR_ACCELERATION_STRUCTURE_EXTENSION_NAME "VK_KHR_acceleration_structure"
typedef enum VkBuildAccelerationStructureModeKHR {
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_directfb.h b/thirdparty/vulkan/include/vulkan/vulkan_directfb.h
index 8eaac6e48d..ab3504efaf 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_directfb.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_directfb.h
@@ -2,7 +2,7 @@
#define VULKAN_DIRECTFB_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_enums.hpp b/thirdparty/vulkan/include/vulkan/vulkan_enums.hpp
index ca535a1b9b..9066688702 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_enums.hpp
+++ b/thirdparty/vulkan/include/vulkan/vulkan_enums.hpp
@@ -1,4 +1,4 @@
-// Copyright 2015-2021 The Khronos Group Inc.
+// Copyright 2015-2022 The Khronos Group Inc.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
@@ -58,6 +58,7 @@ namespace VULKAN_HPP_NAMESPACE
eErrorInvalidExternalHandle = VK_ERROR_INVALID_EXTERNAL_HANDLE,
eErrorFragmentation = VK_ERROR_FRAGMENTATION,
eErrorInvalidOpaqueCaptureAddress = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS,
+ ePipelineCompileRequired = VK_PIPELINE_COMPILE_REQUIRED,
eErrorSurfaceLostKHR = VK_ERROR_SURFACE_LOST_KHR,
eErrorNativeWindowInUseKHR = VK_ERROR_NATIVE_WINDOW_IN_USE_KHR,
eSuboptimalKHR = VK_SUBOPTIMAL_KHR,
@@ -66,7 +67,7 @@ namespace VULKAN_HPP_NAMESPACE
eErrorValidationFailedEXT = VK_ERROR_VALIDATION_FAILED_EXT,
eErrorInvalidShaderNV = VK_ERROR_INVALID_SHADER_NV,
eErrorInvalidDrmFormatModifierPlaneLayoutEXT = VK_ERROR_INVALID_DRM_FORMAT_MODIFIER_PLANE_LAYOUT_EXT,
- eErrorNotPermittedEXT = VK_ERROR_NOT_PERMITTED_EXT,
+ eErrorNotPermittedKHR = VK_ERROR_NOT_PERMITTED_KHR,
#if defined( VK_USE_PLATFORM_WIN32_KHR )
eErrorFullScreenExclusiveModeLostEXT = VK_ERROR_FULL_SCREEN_EXCLUSIVE_MODE_LOST_EXT,
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -74,13 +75,14 @@ namespace VULKAN_HPP_NAMESPACE
eThreadDoneKHR = VK_THREAD_DONE_KHR,
eOperationDeferredKHR = VK_OPERATION_DEFERRED_KHR,
eOperationNotDeferredKHR = VK_OPERATION_NOT_DEFERRED_KHR,
- ePipelineCompileRequiredEXT = VK_PIPELINE_COMPILE_REQUIRED_EXT,
eErrorFragmentationEXT = VK_ERROR_FRAGMENTATION_EXT,
eErrorInvalidDeviceAddressEXT = VK_ERROR_INVALID_DEVICE_ADDRESS_EXT,
eErrorInvalidExternalHandleKHR = VK_ERROR_INVALID_EXTERNAL_HANDLE_KHR,
eErrorInvalidOpaqueCaptureAddressKHR = VK_ERROR_INVALID_OPAQUE_CAPTURE_ADDRESS_KHR,
+ eErrorNotPermittedEXT = VK_ERROR_NOT_PERMITTED_EXT,
eErrorOutOfPoolMemoryKHR = VK_ERROR_OUT_OF_POOL_MEMORY_KHR,
- eErrorPipelineCompileRequiredEXT = VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT
+ eErrorPipelineCompileRequiredEXT = VK_ERROR_PIPELINE_COMPILE_REQUIRED_EXT,
+ ePipelineCompileRequiredEXT = VK_PIPELINE_COMPILE_REQUIRED_EXT
};
VULKAN_HPP_INLINE std::string to_string( Result value )
@@ -110,6 +112,7 @@ namespace VULKAN_HPP_NAMESPACE
case Result::eErrorInvalidExternalHandle: return "ErrorInvalidExternalHandle";
case Result::eErrorFragmentation: return "ErrorFragmentation";
case Result::eErrorInvalidOpaqueCaptureAddress: return "ErrorInvalidOpaqueCaptureAddress";
+ case Result::ePipelineCompileRequired: return "PipelineCompileRequired";
case Result::eErrorSurfaceLostKHR: return "ErrorSurfaceLostKHR";
case Result::eErrorNativeWindowInUseKHR: return "ErrorNativeWindowInUseKHR";
case Result::eSuboptimalKHR: return "SuboptimalKHR";
@@ -118,7 +121,7 @@ namespace VULKAN_HPP_NAMESPACE
case Result::eErrorValidationFailedEXT: return "ErrorValidationFailedEXT";
case Result::eErrorInvalidShaderNV: return "ErrorInvalidShaderNV";
case Result::eErrorInvalidDrmFormatModifierPlaneLayoutEXT: return "ErrorInvalidDrmFormatModifierPlaneLayoutEXT";
- case Result::eErrorNotPermittedEXT: return "ErrorNotPermittedEXT";
+ case Result::eErrorNotPermittedKHR: return "ErrorNotPermittedKHR";
#if defined( VK_USE_PLATFORM_WIN32_KHR )
case Result::eErrorFullScreenExclusiveModeLostEXT: return "ErrorFullScreenExclusiveModeLostEXT";
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -126,7 +129,6 @@ namespace VULKAN_HPP_NAMESPACE
case Result::eThreadDoneKHR: return "ThreadDoneKHR";
case Result::eOperationDeferredKHR: return "OperationDeferredKHR";
case Result::eOperationNotDeferredKHR: return "OperationNotDeferredKHR";
- case Result::ePipelineCompileRequiredEXT: return "PipelineCompileRequiredEXT";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -303,17 +305,77 @@ namespace VULKAN_HPP_NAMESPACE
eBufferOpaqueCaptureAddressCreateInfo = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO,
eMemoryOpaqueCaptureAddressAllocateInfo = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO,
eDeviceMemoryOpaqueCaptureAddressInfo = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO,
- eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
- ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
- eDeviceGroupPresentCapabilitiesKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
- eImageSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR,
- eBindImageMemorySwapchainInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR,
- eAcquireNextImageInfoKHR = VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR,
- eDeviceGroupPresentInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR,
- eDeviceGroupSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR,
- eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
- eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
- eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
+ ePhysicalDeviceVulkan13Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES,
+ ePhysicalDeviceVulkan13Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES,
+ ePipelineCreationFeedbackCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO,
+ ePhysicalDeviceShaderTerminateInvocationFeatures =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES,
+ ePhysicalDeviceToolProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES,
+ ePhysicalDeviceShaderDemoteToHelperInvocationFeatures =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES,
+ ePhysicalDevicePrivateDataFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES,
+ eDevicePrivateDataCreateInfo = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO,
+ ePrivateDataSlotCreateInfo = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO,
+ ePhysicalDevicePipelineCreationCacheControlFeatures =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES,
+ eMemoryBarrier2 = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2,
+ eBufferMemoryBarrier2 = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2,
+ eImageMemoryBarrier2 = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2,
+ eDependencyInfo = VK_STRUCTURE_TYPE_DEPENDENCY_INFO,
+ eSubmitInfo2 = VK_STRUCTURE_TYPE_SUBMIT_INFO_2,
+ eSemaphoreSubmitInfo = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO,
+ eCommandBufferSubmitInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO,
+ ePhysicalDeviceSynchronization2Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES,
+ ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES,
+ ePhysicalDeviceImageRobustnessFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES,
+ eCopyBufferInfo2 = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2,
+ eCopyImageInfo2 = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2,
+ eCopyBufferToImageInfo2 = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2,
+ eCopyImageToBufferInfo2 = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2,
+ eBlitImageInfo2 = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2,
+ eResolveImageInfo2 = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2,
+ eBufferCopy2 = VK_STRUCTURE_TYPE_BUFFER_COPY_2,
+ eImageCopy2 = VK_STRUCTURE_TYPE_IMAGE_COPY_2,
+ eImageBlit2 = VK_STRUCTURE_TYPE_IMAGE_BLIT_2,
+ eBufferImageCopy2 = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2,
+ eImageResolve2 = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2,
+ ePhysicalDeviceSubgroupSizeControlProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES,
+ ePipelineShaderStageRequiredSubgroupSizeCreateInfo =
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO,
+ ePhysicalDeviceSubgroupSizeControlFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES,
+ ePhysicalDeviceInlineUniformBlockFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES,
+ ePhysicalDeviceInlineUniformBlockProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES,
+ eWriteDescriptorSetInlineUniformBlock = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK,
+ eDescriptorPoolInlineUniformBlockCreateInfo = VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO,
+ ePhysicalDeviceTextureCompressionAstcHdrFeatures =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES,
+ eRenderingInfo = VK_STRUCTURE_TYPE_RENDERING_INFO,
+ eRenderingAttachmentInfo = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO,
+ ePipelineRenderingCreateInfo = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO,
+ ePhysicalDeviceDynamicRenderingFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES,
+ eCommandBufferInheritanceRenderingInfo = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO,
+ ePhysicalDeviceShaderIntegerDotProductFeatures =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES,
+ ePhysicalDeviceShaderIntegerDotProductProperties =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES,
+ ePhysicalDeviceTexelBufferAlignmentProperties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES,
+ eFormatProperties3 = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3,
+ ePhysicalDeviceMaintenance4Features = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES,
+ ePhysicalDeviceMaintenance4Properties = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES,
+ eDeviceBufferMemoryRequirements = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS,
+ eDeviceImageMemoryRequirements = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS,
+ eSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR,
+ ePresentInfoKHR = VK_STRUCTURE_TYPE_PRESENT_INFO_KHR,
+ eDeviceGroupPresentCapabilitiesKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_CAPABILITIES_KHR,
+ eImageSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR,
+ eBindImageMemorySwapchainInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR,
+ eAcquireNextImageInfoKHR = VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR,
+ eDeviceGroupPresentInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR,
+ eDeviceGroupSwapchainCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR,
+ eDisplayModeCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_MODE_CREATE_INFO_KHR,
+ eDisplaySurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR,
+ eDisplayPresentInfoKHR = VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR,
#if defined( VK_USE_PLATFORM_XLIB_KHR )
eXlibSurfaceCreateInfoKHR = VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR,
#endif /*VK_USE_PLATFORM_XLIB_KHR*/
@@ -336,23 +398,24 @@ namespace VULKAN_HPP_NAMESPACE
eDebugMarkerObjectTagInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_OBJECT_TAG_INFO_EXT,
eDebugMarkerMarkerInfoEXT = VK_STRUCTURE_TYPE_DEBUG_MARKER_MARKER_INFO_EXT,
#if defined( VK_ENABLE_BETA_EXTENSIONS )
- eVideoProfileKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR,
- eVideoCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
- eVideoPictureResourceKHR = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR,
- eVideoGetMemoryPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR,
- eVideoBindMemoryKHR = VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR,
- eVideoSessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR,
- eVideoSessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
- eVideoSessionParametersUpdateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR,
- eVideoBeginCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR,
- eVideoEndCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR,
- eVideoCodingControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR,
- eVideoReferenceSlotKHR = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR,
- eVideoQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR,
- eVideoProfilesKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR,
- ePhysicalDeviceVideoFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR,
- eVideoFormatPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR,
- eVideoDecodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
+ eVideoProfileKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILE_KHR,
+ eVideoCapabilitiesKHR = VK_STRUCTURE_TYPE_VIDEO_CAPABILITIES_KHR,
+ eVideoPictureResourceKHR = VK_STRUCTURE_TYPE_VIDEO_PICTURE_RESOURCE_KHR,
+ eVideoGetMemoryPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_GET_MEMORY_PROPERTIES_KHR,
+ eVideoBindMemoryKHR = VK_STRUCTURE_TYPE_VIDEO_BIND_MEMORY_KHR,
+ eVideoSessionCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_CREATE_INFO_KHR,
+ eVideoSessionParametersCreateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_CREATE_INFO_KHR,
+ eVideoSessionParametersUpdateInfoKHR = VK_STRUCTURE_TYPE_VIDEO_SESSION_PARAMETERS_UPDATE_INFO_KHR,
+ eVideoBeginCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_BEGIN_CODING_INFO_KHR,
+ eVideoEndCodingInfoKHR = VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR,
+ eVideoCodingControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_CODING_CONTROL_INFO_KHR,
+ eVideoReferenceSlotKHR = VK_STRUCTURE_TYPE_VIDEO_REFERENCE_SLOT_KHR,
+ eVideoQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_VIDEO_QUEUE_FAMILY_PROPERTIES_2_KHR,
+ eVideoProfilesKHR = VK_STRUCTURE_TYPE_VIDEO_PROFILES_KHR,
+ ePhysicalDeviceVideoFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VIDEO_FORMAT_INFO_KHR,
+ eVideoFormatPropertiesKHR = VK_STRUCTURE_TYPE_VIDEO_FORMAT_PROPERTIES_KHR,
+ eQueueFamilyQueryResultStatusProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR,
+ eVideoDecodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_DECODE_INFO_KHR,
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
eDedicatedAllocationImageCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV,
eDedicatedAllocationBufferCreateInfoNV = VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV,
@@ -377,6 +440,21 @@ namespace VULKAN_HPP_NAMESPACE
eVideoEncodeH264NaluSliceEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_NALU_SLICE_EXT,
eVideoEncodeH264EmitPictureParametersEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_EMIT_PICTURE_PARAMETERS_EXT,
eVideoEncodeH264ProfileEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT,
+ eVideoEncodeH264RateControlInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT,
+ eVideoEncodeH264RateControlLayerInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT,
+ eVideoEncodeH265CapabilitiesEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT,
+ eVideoEncodeH265SessionCreateInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT,
+ eVideoEncodeH265SessionParametersCreateInfoEXT =
+ VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT,
+ eVideoEncodeH265SessionParametersAddInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT,
+ eVideoEncodeH265VclFrameInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT,
+ eVideoEncodeH265DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT,
+ eVideoEncodeH265NaluSliceSegmentEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_SEGMENT_EXT,
+ eVideoEncodeH265EmitPictureParametersEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT,
+ eVideoEncodeH265ProfileEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT,
+ eVideoEncodeH265ReferenceListsEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT,
+ eVideoEncodeH265RateControlInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT,
+ eVideoEncodeH265RateControlLayerInfoEXT = VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT,
eVideoDecodeH264CapabilitiesEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_CAPABILITIES_EXT,
eVideoDecodeH264SessionCreateInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_SESSION_CREATE_INFO_EXT,
eVideoDecodeH264PictureInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_PICTURE_INFO_EXT,
@@ -388,6 +466,12 @@ namespace VULKAN_HPP_NAMESPACE
eVideoDecodeH264DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H264_DPB_SLOT_INFO_EXT,
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
eTextureLodGatherFormatPropertiesAMD = VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD,
+ eRenderingFragmentShadingRateAttachmentInfoKHR =
+ VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR,
+ eRenderingFragmentDensityMapAttachmentInfoEXT =
+ VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT,
+ eAttachmentSampleCountInfoAMD = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD,
+ eMultiviewPerViewAttributesInfoNVX = VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX,
#if defined( VK_USE_PLATFORM_GGP )
eStreamDescriptorSurfaceCreateInfoGGP = VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP,
#endif /*VK_USE_PLATFORM_GGP*/
@@ -403,8 +487,6 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_VI_NN )
eViSurfaceCreateInfoNN = VK_STRUCTURE_TYPE_VI_SURFACE_CREATE_INFO_NN,
#endif /*VK_USE_PLATFORM_VI_NN*/
- ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT,
eImageViewAstcDecodeModeEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT,
ePhysicalDeviceAstcDecodeFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT,
#if defined( VK_USE_PLATFORM_WIN32_KHR )
@@ -493,13 +575,9 @@ namespace VULKAN_HPP_NAMESPACE
eImportAndroidHardwareBufferInfoANDROID = VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,
eMemoryGetAndroidHardwareBufferInfoANDROID = VK_STRUCTURE_TYPE_MEMORY_GET_ANDROID_HARDWARE_BUFFER_INFO_ANDROID,
eExternalFormatANDROID = VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID,
+ eAndroidHardwareBufferFormatProperties2ANDROID =
+ VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID,
#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
- ePhysicalDeviceInlineUniformBlockFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT,
- ePhysicalDeviceInlineUniformBlockPropertiesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT,
- eWriteDescriptorSetInlineUniformBlockEXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT,
- eDescriptorPoolInlineUniformBlockCreateInfoEXT =
- VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT,
eSampleLocationsInfoEXT = VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT,
eRenderPassSampleLocationsBeginInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT,
ePipelineSampleLocationsStateCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT,
@@ -546,6 +624,7 @@ namespace VULKAN_HPP_NAMESPACE
eImageDrmFormatModifierListCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT,
eImageDrmFormatModifierExplicitCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT,
eImageDrmFormatModifierPropertiesEXT = VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT,
+ eDrmFormatModifierPropertiesList2EXT = VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT,
eValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_VALIDATION_CACHE_CREATE_INFO_EXT,
eShaderModuleValidationCacheCreateInfoEXT = VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT,
#if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -577,9 +656,8 @@ namespace VULKAN_HPP_NAMESPACE
ePhysicalDeviceImageViewImageFormatInfoEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT,
eFilterCubicImageViewImageFormatPropertiesEXT =
VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT,
- eDeviceQueueGlobalPriorityCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT,
- eImportMemoryHostPointerInfoEXT = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
- eMemoryHostPointerPropertiesEXT = VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT,
+ eImportMemoryHostPointerInfoEXT = VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT,
+ eMemoryHostPointerPropertiesEXT = VK_STRUCTURE_TYPE_MEMORY_HOST_POINTER_PROPERTIES_EXT,
ePhysicalDeviceExternalMemoryHostPropertiesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT,
ePhysicalDeviceShaderClockFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR,
@@ -596,6 +674,10 @@ namespace VULKAN_HPP_NAMESPACE
eVideoDecodeH265PictureInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_PICTURE_INFO_EXT,
eVideoDecodeH265DpbSlotInfoEXT = VK_STRUCTURE_TYPE_VIDEO_DECODE_H265_DPB_SLOT_INFO_EXT,
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ eDeviceQueueGlobalPriorityCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR,
+ ePhysicalDeviceGlobalPriorityQueryFeaturesKHR =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR,
+ eQueueFamilyGlobalPriorityPropertiesKHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR,
eDeviceMemoryOverallocationCreateInfoAMD = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD,
ePhysicalDeviceVertexAttributeDivisorPropertiesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT,
@@ -606,7 +688,6 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_GGP )
ePresentFrameTokenGGP = VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP,
#endif /*VK_USE_PLATFORM_GGP*/
- ePipelineCreationFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT,
ePhysicalDeviceComputeShaderDerivativesFeaturesNV =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV,
ePhysicalDeviceMeshShaderFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV,
@@ -634,8 +715,6 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
eImagepipeSurfaceCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA,
#endif /*VK_USE_PLATFORM_FUCHSIA*/
- ePhysicalDeviceShaderTerminateInvocationFeaturesKHR =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR,
#if defined( VK_USE_PLATFORM_METAL_EXT )
eMetalSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT,
#endif /*VK_USE_PLATFORM_METAL_EXT*/
@@ -643,13 +722,7 @@ namespace VULKAN_HPP_NAMESPACE
ePhysicalDeviceFragmentDensityMapPropertiesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT,
eRenderPassFragmentDensityMapCreateInfoEXT = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT,
- ePhysicalDeviceSubgroupSizeControlPropertiesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT,
- ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT =
- VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT,
- ePhysicalDeviceSubgroupSizeControlFeaturesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT,
- eFragmentShadingRateAttachmentInfoKHR = VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR,
+ eFragmentShadingRateAttachmentInfoKHR = VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR,
ePipelineFragmentShadingRateStateCreateInfoKHR =
VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR,
ePhysicalDeviceFragmentShadingRatePropertiesKHR =
@@ -670,7 +743,6 @@ namespace VULKAN_HPP_NAMESPACE
ePhysicalDeviceBufferDeviceAddressFeaturesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT,
eBufferDeviceAddressCreateInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT,
- ePhysicalDeviceToolPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT,
eValidationFeaturesEXT = VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT,
ePhysicalDevicePresentWaitFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR,
ePhysicalDeviceCooperativeMatrixFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV,
@@ -708,8 +780,6 @@ namespace VULKAN_HPP_NAMESPACE
ePipelineExecutableStatisticKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_STATISTIC_KHR,
ePipelineExecutableInternalRepresentationKHR = VK_STRUCTURE_TYPE_PIPELINE_EXECUTABLE_INTERNAL_REPRESENTATION_KHR,
ePhysicalDeviceShaderAtomicFloat2FeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_2_FEATURES_EXT,
- ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT,
ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV,
eGraphicsShaderGroupCreateInfoNV = VK_STRUCTURE_TYPE_GRAPHICS_SHADER_GROUP_CREATE_INFO_NV,
@@ -724,14 +794,8 @@ namespace VULKAN_HPP_NAMESPACE
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV,
eCommandBufferInheritanceViewportScissorInfoNV =
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV,
- ePhysicalDeviceShaderIntegerDotProductFeaturesKHR =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR,
- ePhysicalDeviceShaderIntegerDotProductPropertiesKHR =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR,
ePhysicalDeviceTexelBufferAlignmentFeaturesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT,
- ePhysicalDeviceTexelBufferAlignmentPropertiesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT,
eCommandBufferInheritanceRenderPassTransformInfoQCOM =
VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM,
eRenderPassTransformBeginInfoQCOM = VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM,
@@ -747,31 +811,17 @@ namespace VULKAN_HPP_NAMESPACE
ePipelineLibraryCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_LIBRARY_CREATE_INFO_KHR,
ePresentIdKHR = VK_STRUCTURE_TYPE_PRESENT_ID_KHR,
ePhysicalDevicePresentIdFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_ID_FEATURES_KHR,
- ePhysicalDevicePrivateDataFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT,
- eDevicePrivateDataCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT,
- ePrivateDataSlotCreateInfoEXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT,
- ePhysicalDevicePipelineCreationCacheControlFeaturesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT,
#if defined( VK_ENABLE_BETA_EXTENSIONS )
- eVideoEncodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR,
- eVideoEncodeRateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR,
+ eVideoEncodeInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR,
+ eVideoEncodeRateControlInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR,
+ eVideoEncodeRateControlLayerInfoKHR = VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR,
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
ePhysicalDeviceDiagnosticsConfigFeaturesNV = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV,
eDeviceDiagnosticsConfigCreateInfoNV = VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV,
- eMemoryBarrier2KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR,
- eBufferMemoryBarrier2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR,
- eImageMemoryBarrier2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR,
- eDependencyInfoKHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,
- eSubmitInfo2KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR,
- eSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR,
- eCommandBufferSubmitInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR,
- ePhysicalDeviceSynchronization2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR,
eQueueFamilyCheckpointProperties2NV = VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV,
eCheckpointData2NV = VK_STRUCTURE_TYPE_CHECKPOINT_DATA_2_NV,
ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR,
- ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR,
ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV,
ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV =
@@ -789,22 +839,13 @@ namespace VULKAN_HPP_NAMESPACE
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT,
ePhysicalDeviceFragmentDensityMap2PropertiesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT,
- eCopyCommandTransformInfoQCOM = VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM,
- ePhysicalDeviceImageRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT,
+ eCopyCommandTransformInfoQCOM = VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM,
ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR,
- eCopyBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR,
- eCopyImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR,
- eCopyBufferToImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR,
- eCopyImageToBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR,
- eBlitImageInfo2KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR,
- eResolveImageInfo2KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR,
- eBufferCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
- eImageCopy2KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR,
- eImageBlit2KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
- eBufferImageCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
- eImageResolve2KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR,
ePhysicalDevice4444FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT,
+ ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM,
+ ePhysicalDeviceRgba10X6FormatsFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT,
#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
eDirectfbSurfaceCreateInfoEXT = VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT,
#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
@@ -813,17 +854,30 @@ namespace VULKAN_HPP_NAMESPACE
eMutableDescriptorTypeCreateInfoVALVE = VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE,
ePhysicalDeviceVertexInputDynamicStateFeaturesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_INPUT_DYNAMIC_STATE_FEATURES_EXT,
- eVertexInputBindingDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT,
- eVertexInputAttributeDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT,
- ePhysicalDeviceDrmPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT,
+ eVertexInputBindingDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_BINDING_DESCRIPTION_2_EXT,
+ eVertexInputAttributeDescription2EXT = VK_STRUCTURE_TYPE_VERTEX_INPUT_ATTRIBUTE_DESCRIPTION_2_EXT,
+ ePhysicalDeviceDrmPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT,
+ ePhysicalDeviceDepthClipControlFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT,
+ ePipelineViewportDepthClipControlCreateInfoEXT =
+ VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT,
ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT,
#if defined( VK_USE_PLATFORM_FUCHSIA )
- eImportMemoryZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA,
- eMemoryZirconHandlePropertiesFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA,
- eMemoryGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
- eImportSemaphoreZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA,
- eSemaphoreGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
+ eImportMemoryZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_ZIRCON_HANDLE_INFO_FUCHSIA,
+ eMemoryZirconHandlePropertiesFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_ZIRCON_HANDLE_PROPERTIES_FUCHSIA,
+ eMemoryGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_MEMORY_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
+ eImportSemaphoreZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_SEMAPHORE_ZIRCON_HANDLE_INFO_FUCHSIA,
+ eSemaphoreGetZirconHandleInfoFUCHSIA = VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA,
+ eBufferCollectionCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA,
+ eImportMemoryBufferCollectionFUCHSIA = VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA,
+ eBufferCollectionImageCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA,
+ eBufferCollectionPropertiesFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA,
+ eBufferConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA,
+ eBufferCollectionBufferCreateInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA,
+ eImageConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA,
+ eImageFormatConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA,
+ eSysmemColorSpaceFUCHSIA = VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA,
+ eBufferCollectionConstraintsInfoFUCHSIA = VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA,
#endif /*VK_USE_PLATFORM_FUCHSIA*/
eSubpassShadingPipelineCreateInfoHUAWEI = VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI,
ePhysicalDeviceSubpassShadingFeaturesHUAWEI = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI,
@@ -836,27 +890,52 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_SCREEN_QNX )
eScreenSurfaceCreateInfoQNX = VK_STRUCTURE_TYPE_SCREEN_SURFACE_CREATE_INFO_QNX,
#endif /*VK_USE_PLATFORM_SCREEN_QNX*/
- ePhysicalDeviceColorWriteEnableFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT,
- ePipelineColorWriteCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT,
- ePhysicalDeviceGlobalPriorityQueryFeaturesEXT =
- VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT,
- eQueueFamilyGlobalPriorityPropertiesEXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT,
- ePhysicalDeviceMultiDrawFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT,
- ePhysicalDeviceMultiDrawPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT,
- eAttachmentDescription2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR,
- eAttachmentDescriptionStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR,
- eAttachmentReference2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR,
- eAttachmentReferenceStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR,
- eBindBufferMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR,
- eBindBufferMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
- eBindImageMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR,
- eBindImageMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR,
- eBindImagePlaneMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR,
- eBufferDeviceAddressInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT,
- eBufferDeviceAddressInfoKHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR,
- eBufferMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR,
- eBufferOpaqueCaptureAddressCreateInfoKHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR,
- eDebugReportCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT,
+ ePhysicalDeviceColorWriteEnableFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COLOR_WRITE_ENABLE_FEATURES_EXT,
+ ePipelineColorWriteCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_COLOR_WRITE_CREATE_INFO_EXT,
+ ePhysicalDeviceImageViewMinLodFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT,
+ eImageViewMinLodCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT,
+ ePhysicalDeviceMultiDrawFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_FEATURES_EXT,
+ ePhysicalDeviceMultiDrawPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT,
+ ePhysicalDeviceBorderColorSwizzleFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT,
+ eSamplerBorderColorComponentMappingCreateInfoEXT =
+ VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT,
+ ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT,
+ ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM,
+ ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM,
+ eSubpassFragmentDensityMapOffsetEndInfoQCOM = VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM,
+ ePhysicalDeviceLinearColorAttachmentFeaturesNV =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV,
+ eAttachmentDescription2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_2_KHR,
+ eAttachmentDescriptionStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT_KHR,
+ eAttachmentReference2KHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2_KHR,
+ eAttachmentReferenceStencilLayoutKHR = VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT_KHR,
+ eAttachmentSampleCountInfoNV = VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_NV,
+ eBindBufferMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO_KHR,
+ eBindBufferMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_INFO_KHR,
+ eBindImageMemoryDeviceGroupInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO_KHR,
+ eBindImageMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_INFO_KHR,
+ eBindImagePlaneMemoryInfoKHR = VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO_KHR,
+ eBlitImageInfo2KHR = VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR,
+ eBufferCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR,
+ eBufferDeviceAddressInfoEXT = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_EXT,
+ eBufferDeviceAddressInfoKHR = VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO_KHR,
+ eBufferImageCopy2KHR = VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR,
+ eBufferMemoryBarrier2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR,
+ eBufferMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2_KHR,
+ eBufferOpaqueCaptureAddressCreateInfoKHR = VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO_KHR,
+ eCommandBufferInheritanceRenderingInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO_KHR,
+ eCommandBufferSubmitInfoKHR = VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR,
+ eCopyBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR,
+ eCopyBufferToImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR,
+ eCopyImageInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR,
+ eCopyImageToBufferInfo2KHR = VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR,
+ eDebugReportCreateInfoEXT = VK_STRUCTURE_TYPE_DEBUG_REPORT_CREATE_INFO_EXT,
+ eDependencyInfoKHR = VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR,
+ eDescriptorPoolInlineUniformBlockCreateInfoEXT =
+ VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT,
eDescriptorSetLayoutBindingFlagsCreateInfoEXT =
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT,
eDescriptorSetLayoutSupportKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_SUPPORT_KHR,
@@ -865,12 +944,16 @@ namespace VULKAN_HPP_NAMESPACE
eDescriptorSetVariableDescriptorCountLayoutSupportEXT =
VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT,
eDescriptorUpdateTemplateCreateInfoKHR = VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO_KHR,
+ eDeviceBufferMemoryRequirementsKHR = VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS_KHR,
eDeviceGroupBindSparseInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO_KHR,
eDeviceGroupCommandBufferBeginInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO_KHR,
eDeviceGroupDeviceCreateInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO_KHR,
eDeviceGroupRenderPassBeginInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO_KHR,
eDeviceGroupSubmitInfoKHR = VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO_KHR,
+ eDeviceImageMemoryRequirementsKHR = VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS_KHR,
eDeviceMemoryOpaqueCaptureAddressInfoKHR = VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO_KHR,
+ eDevicePrivateDataCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT,
+ eDeviceQueueGlobalPriorityCreateInfoEXT = VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT,
eExportFenceCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO_KHR,
eExportMemoryAllocateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR,
eExportSemaphoreCreateInfoKHR = VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO_KHR,
@@ -881,16 +964,22 @@ namespace VULKAN_HPP_NAMESPACE
eExternalMemoryImageCreateInfoKHR = VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_KHR,
eExternalSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_EXTERNAL_SEMAPHORE_PROPERTIES_KHR,
eFormatProperties2KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2_KHR,
+ eFormatProperties3KHR = VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3_KHR,
eFramebufferAttachmentsCreateInfoKHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO_KHR,
eFramebufferAttachmentImageInfoKHR = VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO_KHR,
+ eImageBlit2KHR = VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR,
+ eImageCopy2KHR = VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR,
eImageFormatListCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR,
eImageFormatProperties2KHR = VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2_KHR,
+ eImageMemoryBarrier2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR,
eImageMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2_KHR,
eImagePlaneMemoryRequirementsInfoKHR = VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO_KHR,
+ eImageResolve2KHR = VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR,
eImageSparseMemoryRequirementsInfo2KHR = VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2_KHR,
eImageStencilUsageCreateInfoEXT = VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO_EXT,
eImageViewUsageCreateInfoKHR = VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO_KHR,
eMemoryAllocateFlagsInfoKHR = VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR,
+ eMemoryBarrier2KHR = VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR,
eMemoryDedicatedAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR,
eMemoryDedicatedRequirementsKHR = VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS_KHR,
eMemoryOpaqueCaptureAddressAllocateInfoKHR = VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO_KHR,
@@ -905,25 +994,37 @@ namespace VULKAN_HPP_NAMESPACE
ePhysicalDeviceDescriptorIndexingFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT,
ePhysicalDeviceDescriptorIndexingPropertiesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT,
- ePhysicalDeviceDriverPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR,
- ePhysicalDeviceExternalBufferInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR,
- ePhysicalDeviceExternalFenceInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR,
- ePhysicalDeviceExternalImageFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR,
- ePhysicalDeviceExternalSemaphoreInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR,
- ePhysicalDeviceFeatures2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
- ePhysicalDeviceFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR,
- ePhysicalDeviceFloatControlsPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR,
- ePhysicalDeviceGroupPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR,
- ePhysicalDeviceHostQueryResetFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT,
- ePhysicalDeviceIdPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR,
+ ePhysicalDeviceDriverPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES_KHR,
+ ePhysicalDeviceDynamicRenderingFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES_KHR,
+ ePhysicalDeviceExternalBufferInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_BUFFER_INFO_KHR,
+ ePhysicalDeviceExternalFenceInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_FENCE_INFO_KHR,
+ ePhysicalDeviceExternalImageFormatInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO_KHR,
+ ePhysicalDeviceExternalSemaphoreInfoKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_SEMAPHORE_INFO_KHR,
+ ePhysicalDeviceFeatures2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2_KHR,
+ ePhysicalDeviceFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT16_INT8_FEATURES_KHR,
+ ePhysicalDeviceFloatControlsPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES_KHR,
+ ePhysicalDeviceGlobalPriorityQueryFeaturesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT,
+ ePhysicalDeviceGroupPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES_KHR,
+ ePhysicalDeviceHostQueryResetFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES_EXT,
+ ePhysicalDeviceIdPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES_KHR,
ePhysicalDeviceImagelessFramebufferFeaturesKHR =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES_KHR,
- ePhysicalDeviceImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR,
- ePhysicalDeviceMaintenance3PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR,
- ePhysicalDeviceMemoryProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR,
- ePhysicalDeviceMultiviewFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR,
- ePhysicalDeviceMultiviewPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR,
+ ePhysicalDeviceImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2_KHR,
+ ePhysicalDeviceImageRobustnessFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT,
+ ePhysicalDeviceInlineUniformBlockFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT,
+ ePhysicalDeviceInlineUniformBlockPropertiesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT,
+ ePhysicalDeviceMaintenance3PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES_KHR,
+ ePhysicalDeviceMaintenance4FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES_KHR,
+ ePhysicalDeviceMaintenance4PropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES_KHR,
+ ePhysicalDeviceMemoryProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PROPERTIES_2_KHR,
+ ePhysicalDeviceMultiviewFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES_KHR,
+ ePhysicalDeviceMultiviewPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES_KHR,
+ ePhysicalDevicePipelineCreationCacheControlFeaturesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT,
ePhysicalDevicePointClippingPropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES_KHR,
+ ePhysicalDevicePrivateDataFeaturesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT,
ePhysicalDeviceProperties2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2_KHR,
ePhysicalDeviceSamplerFilterMinmaxPropertiesEXT =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT,
@@ -933,44 +1034,76 @@ namespace VULKAN_HPP_NAMESPACE
ePhysicalDeviceSeparateDepthStencilLayoutsFeaturesKHR =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES_KHR,
ePhysicalDeviceShaderAtomicInt64FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES_KHR,
+ ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT,
ePhysicalDeviceShaderDrawParameterFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES,
ePhysicalDeviceShaderFloat16Int8FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES_KHR,
+ ePhysicalDeviceShaderIntegerDotProductFeaturesKHR =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR,
+ ePhysicalDeviceShaderIntegerDotProductPropertiesKHR =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR,
ePhysicalDeviceShaderSubgroupExtendedTypesFeaturesKHR =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES_KHR,
- ePhysicalDeviceSparseImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR,
+ ePhysicalDeviceShaderTerminateInvocationFeaturesKHR =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR,
+ ePhysicalDeviceSparseImageFormatInfo2KHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2_KHR,
+ ePhysicalDeviceSubgroupSizeControlFeaturesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT,
+ ePhysicalDeviceSubgroupSizeControlPropertiesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT,
+ ePhysicalDeviceSynchronization2FeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR,
+ ePhysicalDeviceTexelBufferAlignmentPropertiesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT,
+ ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT,
ePhysicalDeviceTimelineSemaphoreFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES_KHR,
ePhysicalDeviceTimelineSemaphorePropertiesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES_KHR,
+ ePhysicalDeviceToolPropertiesEXT = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT,
ePhysicalDeviceUniformBufferStandardLayoutFeaturesKHR =
VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES_KHR,
ePhysicalDeviceVariablePointersFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES_KHR,
ePhysicalDeviceVariablePointerFeatures = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES,
ePhysicalDeviceVariablePointerFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES_KHR,
ePhysicalDeviceVulkanMemoryModelFeaturesKHR = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES_KHR,
+ ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR =
+ VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR,
+ ePipelineCreationFeedbackCreateInfoEXT = VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT,
+ ePipelineRenderingCreateInfoKHR = VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO_KHR,
+ ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT =
+ VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT,
ePipelineTessellationDomainOriginStateCreateInfoKHR =
VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO_KHR,
- eQueryPoolCreateInfoINTEL = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL,
- eQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR,
- eRenderPassAttachmentBeginInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR,
- eRenderPassCreateInfo2KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR,
+ ePrivateDataSlotCreateInfoEXT = VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT,
+ eQueryPoolCreateInfoINTEL = VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO_INTEL,
+ eQueueFamilyGlobalPriorityPropertiesEXT = VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT,
+ eQueueFamilyProperties2KHR = VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2_KHR,
+ eRenderingAttachmentInfoKHR = VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO_KHR,
+ eRenderingInfoKHR = VK_STRUCTURE_TYPE_RENDERING_INFO_KHR,
+ eRenderPassAttachmentBeginInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO_KHR,
+ eRenderPassCreateInfo2KHR = VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2_KHR,
eRenderPassInputAttachmentAspectCreateInfoKHR =
VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO_KHR,
eRenderPassMultiviewCreateInfoKHR = VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO_KHR,
+ eResolveImageInfo2KHR = VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR,
eSamplerReductionModeCreateInfoEXT = VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT,
eSamplerYcbcrConversionCreateInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_CREATE_INFO_KHR,
eSamplerYcbcrConversionImageFormatPropertiesKHR =
VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES_KHR,
eSamplerYcbcrConversionInfoKHR = VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO_KHR,
eSemaphoreSignalInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO_KHR,
+ eSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR,
eSemaphoreTypeCreateInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO_KHR,
eSemaphoreWaitInfoKHR = VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO_KHR,
eSparseImageFormatProperties2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_FORMAT_PROPERTIES_2_KHR,
eSparseImageMemoryRequirements2KHR = VK_STRUCTURE_TYPE_SPARSE_IMAGE_MEMORY_REQUIREMENTS_2_KHR,
+ eSubmitInfo2KHR = VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR,
eSubpassBeginInfoKHR = VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO_KHR,
eSubpassDependency2KHR = VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2_KHR,
eSubpassDescription2KHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_2_KHR,
eSubpassDescriptionDepthStencilResolveKHR = VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE_KHR,
eSubpassEndInfoKHR = VK_STRUCTURE_TYPE_SUBPASS_END_INFO_KHR,
- eTimelineSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR
+ eTimelineSemaphoreSubmitInfoKHR = VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO_KHR,
+ eWriteDescriptorSetInlineUniformBlockEXT = VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT
};
VULKAN_HPP_INLINE std::string to_string( StructureType value )
@@ -1158,6 +1291,71 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eBufferOpaqueCaptureAddressCreateInfo: return "BufferOpaqueCaptureAddressCreateInfo";
case StructureType::eMemoryOpaqueCaptureAddressAllocateInfo: return "MemoryOpaqueCaptureAddressAllocateInfo";
case StructureType::eDeviceMemoryOpaqueCaptureAddressInfo: return "DeviceMemoryOpaqueCaptureAddressInfo";
+ case StructureType::ePhysicalDeviceVulkan13Features: return "PhysicalDeviceVulkan13Features";
+ case StructureType::ePhysicalDeviceVulkan13Properties: return "PhysicalDeviceVulkan13Properties";
+ case StructureType::ePipelineCreationFeedbackCreateInfo: return "PipelineCreationFeedbackCreateInfo";
+ case StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures:
+ return "PhysicalDeviceShaderTerminateInvocationFeatures";
+ case StructureType::ePhysicalDeviceToolProperties: return "PhysicalDeviceToolProperties";
+ case StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures:
+ return "PhysicalDeviceShaderDemoteToHelperInvocationFeatures";
+ case StructureType::ePhysicalDevicePrivateDataFeatures: return "PhysicalDevicePrivateDataFeatures";
+ case StructureType::eDevicePrivateDataCreateInfo: return "DevicePrivateDataCreateInfo";
+ case StructureType::ePrivateDataSlotCreateInfo: return "PrivateDataSlotCreateInfo";
+ case StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures:
+ return "PhysicalDevicePipelineCreationCacheControlFeatures";
+ case StructureType::eMemoryBarrier2: return "MemoryBarrier2";
+ case StructureType::eBufferMemoryBarrier2: return "BufferMemoryBarrier2";
+ case StructureType::eImageMemoryBarrier2: return "ImageMemoryBarrier2";
+ case StructureType::eDependencyInfo: return "DependencyInfo";
+ case StructureType::eSubmitInfo2: return "SubmitInfo2";
+ case StructureType::eSemaphoreSubmitInfo: return "SemaphoreSubmitInfo";
+ case StructureType::eCommandBufferSubmitInfo: return "CommandBufferSubmitInfo";
+ case StructureType::ePhysicalDeviceSynchronization2Features: return "PhysicalDeviceSynchronization2Features";
+ case StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures:
+ return "PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures";
+ case StructureType::ePhysicalDeviceImageRobustnessFeatures: return "PhysicalDeviceImageRobustnessFeatures";
+ case StructureType::eCopyBufferInfo2: return "CopyBufferInfo2";
+ case StructureType::eCopyImageInfo2: return "CopyImageInfo2";
+ case StructureType::eCopyBufferToImageInfo2: return "CopyBufferToImageInfo2";
+ case StructureType::eCopyImageToBufferInfo2: return "CopyImageToBufferInfo2";
+ case StructureType::eBlitImageInfo2: return "BlitImageInfo2";
+ case StructureType::eResolveImageInfo2: return "ResolveImageInfo2";
+ case StructureType::eBufferCopy2: return "BufferCopy2";
+ case StructureType::eImageCopy2: return "ImageCopy2";
+ case StructureType::eImageBlit2: return "ImageBlit2";
+ case StructureType::eBufferImageCopy2: return "BufferImageCopy2";
+ case StructureType::eImageResolve2: return "ImageResolve2";
+ case StructureType::ePhysicalDeviceSubgroupSizeControlProperties:
+ return "PhysicalDeviceSubgroupSizeControlProperties";
+ case StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo:
+ return "PipelineShaderStageRequiredSubgroupSizeCreateInfo";
+ case StructureType::ePhysicalDeviceSubgroupSizeControlFeatures:
+ return "PhysicalDeviceSubgroupSizeControlFeatures";
+ case StructureType::ePhysicalDeviceInlineUniformBlockFeatures: return "PhysicalDeviceInlineUniformBlockFeatures";
+ case StructureType::ePhysicalDeviceInlineUniformBlockProperties:
+ return "PhysicalDeviceInlineUniformBlockProperties";
+ case StructureType::eWriteDescriptorSetInlineUniformBlock: return "WriteDescriptorSetInlineUniformBlock";
+ case StructureType::eDescriptorPoolInlineUniformBlockCreateInfo:
+ return "DescriptorPoolInlineUniformBlockCreateInfo";
+ case StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures:
+ return "PhysicalDeviceTextureCompressionAstcHdrFeatures";
+ case StructureType::eRenderingInfo: return "RenderingInfo";
+ case StructureType::eRenderingAttachmentInfo: return "RenderingAttachmentInfo";
+ case StructureType::ePipelineRenderingCreateInfo: return "PipelineRenderingCreateInfo";
+ case StructureType::ePhysicalDeviceDynamicRenderingFeatures: return "PhysicalDeviceDynamicRenderingFeatures";
+ case StructureType::eCommandBufferInheritanceRenderingInfo: return "CommandBufferInheritanceRenderingInfo";
+ case StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures:
+ return "PhysicalDeviceShaderIntegerDotProductFeatures";
+ case StructureType::ePhysicalDeviceShaderIntegerDotProductProperties:
+ return "PhysicalDeviceShaderIntegerDotProductProperties";
+ case StructureType::ePhysicalDeviceTexelBufferAlignmentProperties:
+ return "PhysicalDeviceTexelBufferAlignmentProperties";
+ case StructureType::eFormatProperties3: return "FormatProperties3";
+ case StructureType::ePhysicalDeviceMaintenance4Features: return "PhysicalDeviceMaintenance4Features";
+ case StructureType::ePhysicalDeviceMaintenance4Properties: return "PhysicalDeviceMaintenance4Properties";
+ case StructureType::eDeviceBufferMemoryRequirements: return "DeviceBufferMemoryRequirements";
+ case StructureType::eDeviceImageMemoryRequirements: return "DeviceImageMemoryRequirements";
case StructureType::eSwapchainCreateInfoKHR: return "SwapchainCreateInfoKHR";
case StructureType::ePresentInfoKHR: return "PresentInfoKHR";
case StructureType::eDeviceGroupPresentCapabilitiesKHR: return "DeviceGroupPresentCapabilitiesKHR";
@@ -1207,6 +1405,8 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eVideoProfilesKHR: return "VideoProfilesKHR";
case StructureType::ePhysicalDeviceVideoFormatInfoKHR: return "PhysicalDeviceVideoFormatInfoKHR";
case StructureType::eVideoFormatPropertiesKHR: return "VideoFormatPropertiesKHR";
+ case StructureType::eQueueFamilyQueryResultStatusProperties2KHR:
+ return "QueueFamilyQueryResultStatusProperties2KHR";
case StructureType::eVideoDecodeInfoKHR: return "VideoDecodeInfoKHR";
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
case StructureType::eDedicatedAllocationImageCreateInfoNV: return "DedicatedAllocationImageCreateInfoNV";
@@ -1235,6 +1435,22 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eVideoEncodeH264NaluSliceEXT: return "VideoEncodeH264NaluSliceEXT";
case StructureType::eVideoEncodeH264EmitPictureParametersEXT: return "VideoEncodeH264EmitPictureParametersEXT";
case StructureType::eVideoEncodeH264ProfileEXT: return "VideoEncodeH264ProfileEXT";
+ case StructureType::eVideoEncodeH264RateControlInfoEXT: return "VideoEncodeH264RateControlInfoEXT";
+ case StructureType::eVideoEncodeH264RateControlLayerInfoEXT: return "VideoEncodeH264RateControlLayerInfoEXT";
+ case StructureType::eVideoEncodeH265CapabilitiesEXT: return "VideoEncodeH265CapabilitiesEXT";
+ case StructureType::eVideoEncodeH265SessionCreateInfoEXT: return "VideoEncodeH265SessionCreateInfoEXT";
+ case StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT:
+ return "VideoEncodeH265SessionParametersCreateInfoEXT";
+ case StructureType::eVideoEncodeH265SessionParametersAddInfoEXT:
+ return "VideoEncodeH265SessionParametersAddInfoEXT";
+ case StructureType::eVideoEncodeH265VclFrameInfoEXT: return "VideoEncodeH265VclFrameInfoEXT";
+ case StructureType::eVideoEncodeH265DpbSlotInfoEXT: return "VideoEncodeH265DpbSlotInfoEXT";
+ case StructureType::eVideoEncodeH265NaluSliceSegmentEXT: return "VideoEncodeH265NaluSliceSegmentEXT";
+ case StructureType::eVideoEncodeH265EmitPictureParametersEXT: return "VideoEncodeH265EmitPictureParametersEXT";
+ case StructureType::eVideoEncodeH265ProfileEXT: return "VideoEncodeH265ProfileEXT";
+ case StructureType::eVideoEncodeH265ReferenceListsEXT: return "VideoEncodeH265ReferenceListsEXT";
+ case StructureType::eVideoEncodeH265RateControlInfoEXT: return "VideoEncodeH265RateControlInfoEXT";
+ case StructureType::eVideoEncodeH265RateControlLayerInfoEXT: return "VideoEncodeH265RateControlLayerInfoEXT";
case StructureType::eVideoDecodeH264CapabilitiesEXT: return "VideoDecodeH264CapabilitiesEXT";
case StructureType::eVideoDecodeH264SessionCreateInfoEXT: return "VideoDecodeH264SessionCreateInfoEXT";
case StructureType::eVideoDecodeH264PictureInfoEXT: return "VideoDecodeH264PictureInfoEXT";
@@ -1247,6 +1463,12 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eVideoDecodeH264DpbSlotInfoEXT: return "VideoDecodeH264DpbSlotInfoEXT";
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
case StructureType::eTextureLodGatherFormatPropertiesAMD: return "TextureLodGatherFormatPropertiesAMD";
+ case StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR:
+ return "RenderingFragmentShadingRateAttachmentInfoKHR";
+ case StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT:
+ return "RenderingFragmentDensityMapAttachmentInfoEXT";
+ case StructureType::eAttachmentSampleCountInfoAMD: return "AttachmentSampleCountInfoAMD";
+ case StructureType::eMultiviewPerViewAttributesInfoNVX: return "MultiviewPerViewAttributesInfoNVX";
#if defined( VK_USE_PLATFORM_GGP )
case StructureType::eStreamDescriptorSurfaceCreateInfoGGP: return "StreamDescriptorSurfaceCreateInfoGGP";
#endif /*VK_USE_PLATFORM_GGP*/
@@ -1263,8 +1485,6 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_VI_NN )
case StructureType::eViSurfaceCreateInfoNN: return "ViSurfaceCreateInfoNN";
#endif /*VK_USE_PLATFORM_VI_NN*/
- case StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT:
- return "PhysicalDeviceTextureCompressionAstcHdrFeaturesEXT";
case StructureType::eImageViewAstcDecodeModeEXT: return "ImageViewAstcDecodeModeEXT";
case StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT: return "PhysicalDeviceAstcDecodeFeaturesEXT";
#if defined( VK_USE_PLATFORM_WIN32_KHR )
@@ -1361,14 +1581,9 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID:
return "MemoryGetAndroidHardwareBufferInfoANDROID";
case StructureType::eExternalFormatANDROID: return "ExternalFormatANDROID";
+ case StructureType::eAndroidHardwareBufferFormatProperties2ANDROID:
+ return "AndroidHardwareBufferFormatProperties2ANDROID";
#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
- case StructureType::ePhysicalDeviceInlineUniformBlockFeaturesEXT:
- return "PhysicalDeviceInlineUniformBlockFeaturesEXT";
- case StructureType::ePhysicalDeviceInlineUniformBlockPropertiesEXT:
- return "PhysicalDeviceInlineUniformBlockPropertiesEXT";
- case StructureType::eWriteDescriptorSetInlineUniformBlockEXT: return "WriteDescriptorSetInlineUniformBlockEXT";
- case StructureType::eDescriptorPoolInlineUniformBlockCreateInfoEXT:
- return "DescriptorPoolInlineUniformBlockCreateInfoEXT";
case StructureType::eSampleLocationsInfoEXT: return "SampleLocationsInfoEXT";
case StructureType::eRenderPassSampleLocationsBeginInfoEXT: return "RenderPassSampleLocationsBeginInfoEXT";
case StructureType::ePipelineSampleLocationsStateCreateInfoEXT:
@@ -1426,6 +1641,7 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT:
return "ImageDrmFormatModifierExplicitCreateInfoEXT";
case StructureType::eImageDrmFormatModifierPropertiesEXT: return "ImageDrmFormatModifierPropertiesEXT";
+ case StructureType::eDrmFormatModifierPropertiesList2EXT: return "DrmFormatModifierPropertiesList2EXT";
case StructureType::eValidationCacheCreateInfoEXT: return "ValidationCacheCreateInfoEXT";
case StructureType::eShaderModuleValidationCacheCreateInfoEXT: return "ShaderModuleValidationCacheCreateInfoEXT";
#if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -1462,7 +1678,6 @@ namespace VULKAN_HPP_NAMESPACE
return "PhysicalDeviceImageViewImageFormatInfoEXT";
case StructureType::eFilterCubicImageViewImageFormatPropertiesEXT:
return "FilterCubicImageViewImageFormatPropertiesEXT";
- case StructureType::eDeviceQueueGlobalPriorityCreateInfoEXT: return "DeviceQueueGlobalPriorityCreateInfoEXT";
case StructureType::eImportMemoryHostPointerInfoEXT: return "ImportMemoryHostPointerInfoEXT";
case StructureType::eMemoryHostPointerPropertiesEXT: return "MemoryHostPointerPropertiesEXT";
case StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT:
@@ -1482,6 +1697,10 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eVideoDecodeH265PictureInfoEXT: return "VideoDecodeH265PictureInfoEXT";
case StructureType::eVideoDecodeH265DpbSlotInfoEXT: return "VideoDecodeH265DpbSlotInfoEXT";
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ case StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR: return "DeviceQueueGlobalPriorityCreateInfoKHR";
+ case StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR:
+ return "PhysicalDeviceGlobalPriorityQueryFeaturesKHR";
+ case StructureType::eQueueFamilyGlobalPriorityPropertiesKHR: return "QueueFamilyGlobalPriorityPropertiesKHR";
case StructureType::eDeviceMemoryOverallocationCreateInfoAMD: return "DeviceMemoryOverallocationCreateInfoAMD";
case StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT:
return "PhysicalDeviceVertexAttributeDivisorPropertiesEXT";
@@ -1492,7 +1711,6 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_GGP )
case StructureType::ePresentFrameTokenGGP: return "PresentFrameTokenGGP";
#endif /*VK_USE_PLATFORM_GGP*/
- case StructureType::ePipelineCreationFeedbackCreateInfoEXT: return "PipelineCreationFeedbackCreateInfoEXT";
case StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesNV:
return "PhysicalDeviceComputeShaderDerivativesFeaturesNV";
case StructureType::ePhysicalDeviceMeshShaderFeaturesNV: return "PhysicalDeviceMeshShaderFeaturesNV";
@@ -1520,8 +1738,6 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
case StructureType::eImagepipeSurfaceCreateInfoFUCHSIA: return "ImagepipeSurfaceCreateInfoFUCHSIA";
#endif /*VK_USE_PLATFORM_FUCHSIA*/
- case StructureType::ePhysicalDeviceShaderTerminateInvocationFeaturesKHR:
- return "PhysicalDeviceShaderTerminateInvocationFeaturesKHR";
#if defined( VK_USE_PLATFORM_METAL_EXT )
case StructureType::eMetalSurfaceCreateInfoEXT: return "MetalSurfaceCreateInfoEXT";
#endif /*VK_USE_PLATFORM_METAL_EXT*/
@@ -1531,12 +1747,6 @@ namespace VULKAN_HPP_NAMESPACE
return "PhysicalDeviceFragmentDensityMapPropertiesEXT";
case StructureType::eRenderPassFragmentDensityMapCreateInfoEXT:
return "RenderPassFragmentDensityMapCreateInfoEXT";
- case StructureType::ePhysicalDeviceSubgroupSizeControlPropertiesEXT:
- return "PhysicalDeviceSubgroupSizeControlPropertiesEXT";
- case StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT:
- return "PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT";
- case StructureType::ePhysicalDeviceSubgroupSizeControlFeaturesEXT:
- return "PhysicalDeviceSubgroupSizeControlFeaturesEXT";
case StructureType::eFragmentShadingRateAttachmentInfoKHR: return "FragmentShadingRateAttachmentInfoKHR";
case StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR:
return "PipelineFragmentShadingRateStateCreateInfoKHR";
@@ -1558,7 +1768,6 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT:
return "PhysicalDeviceBufferDeviceAddressFeaturesEXT";
case StructureType::eBufferDeviceAddressCreateInfoEXT: return "BufferDeviceAddressCreateInfoEXT";
- case StructureType::ePhysicalDeviceToolPropertiesEXT: return "PhysicalDeviceToolPropertiesEXT";
case StructureType::eValidationFeaturesEXT: return "ValidationFeaturesEXT";
case StructureType::ePhysicalDevicePresentWaitFeaturesKHR: return "PhysicalDevicePresentWaitFeaturesKHR";
case StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV:
@@ -1608,8 +1817,6 @@ namespace VULKAN_HPP_NAMESPACE
return "PipelineExecutableInternalRepresentationKHR";
case StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT:
return "PhysicalDeviceShaderAtomicFloat2FeaturesEXT";
- case StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT:
- return "PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT";
case StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV:
return "PhysicalDeviceDeviceGeneratedCommandsPropertiesNV";
case StructureType::eGraphicsShaderGroupCreateInfoNV: return "GraphicsShaderGroupCreateInfoNV";
@@ -1625,14 +1832,8 @@ namespace VULKAN_HPP_NAMESPACE
return "PhysicalDeviceInheritedViewportScissorFeaturesNV";
case StructureType::eCommandBufferInheritanceViewportScissorInfoNV:
return "CommandBufferInheritanceViewportScissorInfoNV";
- case StructureType::ePhysicalDeviceShaderIntegerDotProductFeaturesKHR:
- return "PhysicalDeviceShaderIntegerDotProductFeaturesKHR";
- case StructureType::ePhysicalDeviceShaderIntegerDotProductPropertiesKHR:
- return "PhysicalDeviceShaderIntegerDotProductPropertiesKHR";
case StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT:
return "PhysicalDeviceTexelBufferAlignmentFeaturesEXT";
- case StructureType::ePhysicalDeviceTexelBufferAlignmentPropertiesEXT:
- return "PhysicalDeviceTexelBufferAlignmentPropertiesEXT";
case StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM:
return "CommandBufferInheritanceRenderPassTransformInfoQCOM";
case StructureType::eRenderPassTransformBeginInfoQCOM: return "RenderPassTransformBeginInfoQCOM";
@@ -1650,33 +1851,18 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::ePipelineLibraryCreateInfoKHR: return "PipelineLibraryCreateInfoKHR";
case StructureType::ePresentIdKHR: return "PresentIdKHR";
case StructureType::ePhysicalDevicePresentIdFeaturesKHR: return "PhysicalDevicePresentIdFeaturesKHR";
- case StructureType::ePhysicalDevicePrivateDataFeaturesEXT: return "PhysicalDevicePrivateDataFeaturesEXT";
- case StructureType::eDevicePrivateDataCreateInfoEXT: return "DevicePrivateDataCreateInfoEXT";
- case StructureType::ePrivateDataSlotCreateInfoEXT: return "PrivateDataSlotCreateInfoEXT";
- case StructureType::ePhysicalDevicePipelineCreationCacheControlFeaturesEXT:
- return "PhysicalDevicePipelineCreationCacheControlFeaturesEXT";
#if defined( VK_ENABLE_BETA_EXTENSIONS )
case StructureType::eVideoEncodeInfoKHR: return "VideoEncodeInfoKHR";
case StructureType::eVideoEncodeRateControlInfoKHR: return "VideoEncodeRateControlInfoKHR";
+ case StructureType::eVideoEncodeRateControlLayerInfoKHR: return "VideoEncodeRateControlLayerInfoKHR";
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
case StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV:
return "PhysicalDeviceDiagnosticsConfigFeaturesNV";
case StructureType::eDeviceDiagnosticsConfigCreateInfoNV: return "DeviceDiagnosticsConfigCreateInfoNV";
- case StructureType::eMemoryBarrier2KHR: return "MemoryBarrier2KHR";
- case StructureType::eBufferMemoryBarrier2KHR: return "BufferMemoryBarrier2KHR";
- case StructureType::eImageMemoryBarrier2KHR: return "ImageMemoryBarrier2KHR";
- case StructureType::eDependencyInfoKHR: return "DependencyInfoKHR";
- case StructureType::eSubmitInfo2KHR: return "SubmitInfo2KHR";
- case StructureType::eSemaphoreSubmitInfoKHR: return "SemaphoreSubmitInfoKHR";
- case StructureType::eCommandBufferSubmitInfoKHR: return "CommandBufferSubmitInfoKHR";
- case StructureType::ePhysicalDeviceSynchronization2FeaturesKHR:
- return "PhysicalDeviceSynchronization2FeaturesKHR";
case StructureType::eQueueFamilyCheckpointProperties2NV: return "QueueFamilyCheckpointProperties2NV";
case StructureType::eCheckpointData2NV: return "CheckpointData2NV";
case StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR:
return "PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR";
- case StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR:
- return "PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR";
case StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV:
return "PhysicalDeviceFragmentShadingRateEnumsPropertiesNV";
case StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV:
@@ -1695,21 +1881,12 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT:
return "PhysicalDeviceFragmentDensityMap2PropertiesEXT";
case StructureType::eCopyCommandTransformInfoQCOM: return "CopyCommandTransformInfoQCOM";
- case StructureType::ePhysicalDeviceImageRobustnessFeaturesEXT: return "PhysicalDeviceImageRobustnessFeaturesEXT";
case StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR:
return "PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR";
- case StructureType::eCopyBufferInfo2KHR: return "CopyBufferInfo2KHR";
- case StructureType::eCopyImageInfo2KHR: return "CopyImageInfo2KHR";
- case StructureType::eCopyBufferToImageInfo2KHR: return "CopyBufferToImageInfo2KHR";
- case StructureType::eCopyImageToBufferInfo2KHR: return "CopyImageToBufferInfo2KHR";
- case StructureType::eBlitImageInfo2KHR: return "BlitImageInfo2KHR";
- case StructureType::eResolveImageInfo2KHR: return "ResolveImageInfo2KHR";
- case StructureType::eBufferCopy2KHR: return "BufferCopy2KHR";
- case StructureType::eImageCopy2KHR: return "ImageCopy2KHR";
- case StructureType::eImageBlit2KHR: return "ImageBlit2KHR";
- case StructureType::eBufferImageCopy2KHR: return "BufferImageCopy2KHR";
- case StructureType::eImageResolve2KHR: return "ImageResolve2KHR";
case StructureType::ePhysicalDevice4444FormatsFeaturesEXT: return "PhysicalDevice4444FormatsFeaturesEXT";
+ case StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM:
+ return "PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM";
+ case StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT: return "PhysicalDeviceRgba10X6FormatsFeaturesEXT";
#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
case StructureType::eDirectfbSurfaceCreateInfoEXT: return "DirectfbSurfaceCreateInfoEXT";
#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
@@ -1721,6 +1898,10 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eVertexInputBindingDescription2EXT: return "VertexInputBindingDescription2EXT";
case StructureType::eVertexInputAttributeDescription2EXT: return "VertexInputAttributeDescription2EXT";
case StructureType::ePhysicalDeviceDrmPropertiesEXT: return "PhysicalDeviceDrmPropertiesEXT";
+ case StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT:
+ return "PhysicalDeviceDepthClipControlFeaturesEXT";
+ case StructureType::ePipelineViewportDepthClipControlCreateInfoEXT:
+ return "PipelineViewportDepthClipControlCreateInfoEXT";
case StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT:
return "PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT";
#if defined( VK_USE_PLATFORM_FUCHSIA )
@@ -1729,6 +1910,16 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::eMemoryGetZirconHandleInfoFUCHSIA: return "MemoryGetZirconHandleInfoFUCHSIA";
case StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA: return "ImportSemaphoreZirconHandleInfoFUCHSIA";
case StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA: return "SemaphoreGetZirconHandleInfoFUCHSIA";
+ case StructureType::eBufferCollectionCreateInfoFUCHSIA: return "BufferCollectionCreateInfoFUCHSIA";
+ case StructureType::eImportMemoryBufferCollectionFUCHSIA: return "ImportMemoryBufferCollectionFUCHSIA";
+ case StructureType::eBufferCollectionImageCreateInfoFUCHSIA: return "BufferCollectionImageCreateInfoFUCHSIA";
+ case StructureType::eBufferCollectionPropertiesFUCHSIA: return "BufferCollectionPropertiesFUCHSIA";
+ case StructureType::eBufferConstraintsInfoFUCHSIA: return "BufferConstraintsInfoFUCHSIA";
+ case StructureType::eBufferCollectionBufferCreateInfoFUCHSIA: return "BufferCollectionBufferCreateInfoFUCHSIA";
+ case StructureType::eImageConstraintsInfoFUCHSIA: return "ImageConstraintsInfoFUCHSIA";
+ case StructureType::eImageFormatConstraintsInfoFUCHSIA: return "ImageFormatConstraintsInfoFUCHSIA";
+ case StructureType::eSysmemColorSpaceFUCHSIA: return "SysmemColorSpaceFUCHSIA";
+ case StructureType::eBufferCollectionConstraintsInfoFUCHSIA: return "BufferCollectionConstraintsInfoFUCHSIA";
#endif /*VK_USE_PLATFORM_FUCHSIA*/
case StructureType::eSubpassShadingPipelineCreateInfoHUAWEI: return "SubpassShadingPipelineCreateInfoHUAWEI";
case StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI:
@@ -1748,11 +1939,24 @@ namespace VULKAN_HPP_NAMESPACE
case StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT:
return "PhysicalDeviceColorWriteEnableFeaturesEXT";
case StructureType::ePipelineColorWriteCreateInfoEXT: return "PipelineColorWriteCreateInfoEXT";
- case StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesEXT:
- return "PhysicalDeviceGlobalPriorityQueryFeaturesEXT";
- case StructureType::eQueueFamilyGlobalPriorityPropertiesEXT: return "QueueFamilyGlobalPriorityPropertiesEXT";
+ case StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT: return "PhysicalDeviceImageViewMinLodFeaturesEXT";
+ case StructureType::eImageViewMinLodCreateInfoEXT: return "ImageViewMinLodCreateInfoEXT";
case StructureType::ePhysicalDeviceMultiDrawFeaturesEXT: return "PhysicalDeviceMultiDrawFeaturesEXT";
case StructureType::ePhysicalDeviceMultiDrawPropertiesEXT: return "PhysicalDeviceMultiDrawPropertiesEXT";
+ case StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT:
+ return "PhysicalDeviceBorderColorSwizzleFeaturesEXT";
+ case StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT:
+ return "SamplerBorderColorComponentMappingCreateInfoEXT";
+ case StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT:
+ return "PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT";
+ case StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM:
+ return "PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM";
+ case StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM:
+ return "PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM";
+ case StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM:
+ return "SubpassFragmentDensityMapOffsetEndInfoQCOM";
+ case StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV:
+ return "PhysicalDeviceLinearColorAttachmentFeaturesNV";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -1787,6 +1991,7 @@ namespace VULKAN_HPP_NAMESPACE
eCommandPool = VK_OBJECT_TYPE_COMMAND_POOL,
eSamplerYcbcrConversion = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION,
eDescriptorUpdateTemplate = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE,
+ ePrivateDataSlot = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT,
eSurfaceKHR = VK_OBJECT_TYPE_SURFACE_KHR,
eSwapchainKHR = VK_OBJECT_TYPE_SWAPCHAIN_KHR,
eDisplayKHR = VK_OBJECT_TYPE_DISPLAY_KHR,
@@ -1805,9 +2010,12 @@ namespace VULKAN_HPP_NAMESPACE
ePerformanceConfigurationINTEL = VK_OBJECT_TYPE_PERFORMANCE_CONFIGURATION_INTEL,
eDeferredOperationKHR = VK_OBJECT_TYPE_DEFERRED_OPERATION_KHR,
eIndirectCommandsLayoutNV = VK_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NV,
- ePrivateDataSlotEXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT,
- eDescriptorUpdateTemplateKHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR,
- eSamplerYcbcrConversionKHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ eBufferCollectionFUCHSIA = VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA,
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+ eDescriptorUpdateTemplateKHR = VK_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR,
+ ePrivateDataSlotEXT = VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT,
+ eSamplerYcbcrConversionKHR = VK_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR
};
VULKAN_HPP_INLINE std::string to_string( ObjectType value )
@@ -1842,6 +2050,7 @@ namespace VULKAN_HPP_NAMESPACE
case ObjectType::eCommandPool: return "CommandPool";
case ObjectType::eSamplerYcbcrConversion: return "SamplerYcbcrConversion";
case ObjectType::eDescriptorUpdateTemplate: return "DescriptorUpdateTemplate";
+ case ObjectType::ePrivateDataSlot: return "PrivateDataSlot";
case ObjectType::eSurfaceKHR: return "SurfaceKHR";
case ObjectType::eSwapchainKHR: return "SwapchainKHR";
case ObjectType::eDisplayKHR: return "DisplayKHR";
@@ -1860,7 +2069,9 @@ namespace VULKAN_HPP_NAMESPACE
case ObjectType::ePerformanceConfigurationINTEL: return "PerformanceConfigurationINTEL";
case ObjectType::eDeferredOperationKHR: return "DeferredOperationKHR";
case ObjectType::eIndirectCommandsLayoutNV: return "IndirectCommandsLayoutNV";
- case ObjectType::ePrivateDataSlotEXT: return "PrivateDataSlotEXT";
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ case ObjectType::eBufferCollectionFUCHSIA: return "BufferCollectionFUCHSIA";
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -2124,6 +2335,26 @@ namespace VULKAN_HPP_NAMESPACE
eG16B16R163Plane422Unorm = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM,
eG16B16R162Plane422Unorm = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM,
eG16B16R163Plane444Unorm = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM,
+ eG8B8R82Plane444Unorm = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM,
+ eG10X6B10X6R10X62Plane444Unorm3Pack16 = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16,
+ eG12X4B12X4R12X42Plane444Unorm3Pack16 = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16,
+ eG16B16R162Plane444Unorm = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM,
+ eA4R4G4B4UnormPack16 = VK_FORMAT_A4R4G4B4_UNORM_PACK16,
+ eA4B4G4R4UnormPack16 = VK_FORMAT_A4B4G4R4_UNORM_PACK16,
+ eAstc4x4SfloatBlock = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK,
+ eAstc5x4SfloatBlock = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK,
+ eAstc5x5SfloatBlock = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK,
+ eAstc6x5SfloatBlock = VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK,
+ eAstc6x6SfloatBlock = VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK,
+ eAstc8x5SfloatBlock = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK,
+ eAstc8x6SfloatBlock = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK,
+ eAstc8x8SfloatBlock = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK,
+ eAstc10x5SfloatBlock = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK,
+ eAstc10x6SfloatBlock = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK,
+ eAstc10x8SfloatBlock = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK,
+ eAstc10x10SfloatBlock = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK,
+ eAstc12x10SfloatBlock = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK,
+ eAstc12x12SfloatBlock = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK,
ePvrtc12BppUnormBlockIMG = VK_FORMAT_PVRTC1_2BPP_UNORM_BLOCK_IMG,
ePvrtc14BppUnormBlockIMG = VK_FORMAT_PVRTC1_4BPP_UNORM_BLOCK_IMG,
ePvrtc22BppUnormBlockIMG = VK_FORMAT_PVRTC2_2BPP_UNORM_BLOCK_IMG,
@@ -2132,6 +2363,14 @@ namespace VULKAN_HPP_NAMESPACE
ePvrtc14BppSrgbBlockIMG = VK_FORMAT_PVRTC1_4BPP_SRGB_BLOCK_IMG,
ePvrtc22BppSrgbBlockIMG = VK_FORMAT_PVRTC2_2BPP_SRGB_BLOCK_IMG,
ePvrtc24BppSrgbBlockIMG = VK_FORMAT_PVRTC2_4BPP_SRGB_BLOCK_IMG,
+ eA4B4G4R4UnormPack16EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,
+ eA4R4G4B4UnormPack16EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
+ eAstc10x10SfloatBlockEXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT,
+ eAstc10x5SfloatBlockEXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,
+ eAstc10x6SfloatBlockEXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,
+ eAstc10x8SfloatBlockEXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,
+ eAstc12x10SfloatBlockEXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT,
+ eAstc12x12SfloatBlockEXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT,
eAstc4x4SfloatBlockEXT = VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT,
eAstc5x4SfloatBlockEXT = VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT,
eAstc5x5SfloatBlockEXT = VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT,
@@ -2140,18 +2379,6 @@ namespace VULKAN_HPP_NAMESPACE
eAstc8x5SfloatBlockEXT = VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT,
eAstc8x6SfloatBlockEXT = VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT,
eAstc8x8SfloatBlockEXT = VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT,
- eAstc10x5SfloatBlockEXT = VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT,
- eAstc10x6SfloatBlockEXT = VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT,
- eAstc10x8SfloatBlockEXT = VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT,
- eAstc10x10SfloatBlockEXT = VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT,
- eAstc12x10SfloatBlockEXT = VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT,
- eAstc12x12SfloatBlockEXT = VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT,
- eG8B8R82Plane444UnormEXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
- eG10X6B10X6R10X62Plane444Unorm3Pack16EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
- eG12X4B12X4R12X42Plane444Unorm3Pack16EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
- eG16B16R162Plane444UnormEXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
- eA4R4G4B4UnormPack16EXT = VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT,
- eA4B4G4R4UnormPack16EXT = VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT,
eB10X6G10X6R10X6G10X6422Unorm4Pack16KHR = VK_FORMAT_B10X6G10X6R10X6G10X6_422_UNORM_4PACK16_KHR,
eB12X4G12X4R12X4G12X4422Unorm4Pack16KHR = VK_FORMAT_B12X4G12X4R12X4G12X4_422_UNORM_4PACK16_KHR,
eB16G16R16G16422UnormKHR = VK_FORMAT_B16G16R16G16_422_UNORM_KHR,
@@ -2159,24 +2386,28 @@ namespace VULKAN_HPP_NAMESPACE
eG10X6B10X6G10X6R10X6422Unorm4Pack16KHR = VK_FORMAT_G10X6B10X6G10X6R10X6_422_UNORM_4PACK16_KHR,
eG10X6B10X6R10X62Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16_KHR,
eG10X6B10X6R10X62Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16_KHR,
+ eG10X6B10X6R10X62Plane444Unorm3Pack16EXT = VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT,
eG10X6B10X6R10X63Plane420Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16_KHR,
eG10X6B10X6R10X63Plane422Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16_KHR,
eG10X6B10X6R10X63Plane444Unorm3Pack16KHR = VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_444_UNORM_3PACK16_KHR,
eG12X4B12X4G12X4R12X4422Unorm4Pack16KHR = VK_FORMAT_G12X4B12X4G12X4R12X4_422_UNORM_4PACK16_KHR,
eG12X4B12X4R12X42Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16_KHR,
eG12X4B12X4R12X42Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16_KHR,
+ eG12X4B12X4R12X42Plane444Unorm3Pack16EXT = VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT,
eG12X4B12X4R12X43Plane420Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16_KHR,
eG12X4B12X4R12X43Plane422Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16_KHR,
eG12X4B12X4R12X43Plane444Unorm3Pack16KHR = VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_444_UNORM_3PACK16_KHR,
eG16B16G16R16422UnormKHR = VK_FORMAT_G16B16G16R16_422_UNORM_KHR,
eG16B16R162Plane420UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_420_UNORM_KHR,
eG16B16R162Plane422UnormKHR = VK_FORMAT_G16_B16R16_2PLANE_422_UNORM_KHR,
+ eG16B16R162Plane444UnormEXT = VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT,
eG16B16R163Plane420UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM_KHR,
eG16B16R163Plane422UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM_KHR,
eG16B16R163Plane444UnormKHR = VK_FORMAT_G16_B16_R16_3PLANE_444_UNORM_KHR,
eG8B8G8R8422UnormKHR = VK_FORMAT_G8B8G8R8_422_UNORM_KHR,
eG8B8R82Plane420UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_420_UNORM_KHR,
eG8B8R82Plane422UnormKHR = VK_FORMAT_G8_B8R8_2PLANE_422_UNORM_KHR,
+ eG8B8R82Plane444UnormEXT = VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT,
eG8B8R83Plane420UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM_KHR,
eG8B8R83Plane422UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM_KHR,
eG8B8R83Plane444UnormKHR = VK_FORMAT_G8_B8_R8_3PLANE_444_UNORM_KHR,
@@ -2411,6 +2642,26 @@ namespace VULKAN_HPP_NAMESPACE
case Format::eG16B16R163Plane422Unorm: return "G16B16R163Plane422Unorm";
case Format::eG16B16R162Plane422Unorm: return "G16B16R162Plane422Unorm";
case Format::eG16B16R163Plane444Unorm: return "G16B16R163Plane444Unorm";
+ case Format::eG8B8R82Plane444Unorm: return "G8B8R82Plane444Unorm";
+ case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return "G10X6B10X6R10X62Plane444Unorm3Pack16";
+ case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return "G12X4B12X4R12X42Plane444Unorm3Pack16";
+ case Format::eG16B16R162Plane444Unorm: return "G16B16R162Plane444Unorm";
+ case Format::eA4R4G4B4UnormPack16: return "A4R4G4B4UnormPack16";
+ case Format::eA4B4G4R4UnormPack16: return "A4B4G4R4UnormPack16";
+ case Format::eAstc4x4SfloatBlock: return "Astc4x4SfloatBlock";
+ case Format::eAstc5x4SfloatBlock: return "Astc5x4SfloatBlock";
+ case Format::eAstc5x5SfloatBlock: return "Astc5x5SfloatBlock";
+ case Format::eAstc6x5SfloatBlock: return "Astc6x5SfloatBlock";
+ case Format::eAstc6x6SfloatBlock: return "Astc6x6SfloatBlock";
+ case Format::eAstc8x5SfloatBlock: return "Astc8x5SfloatBlock";
+ case Format::eAstc8x6SfloatBlock: return "Astc8x6SfloatBlock";
+ case Format::eAstc8x8SfloatBlock: return "Astc8x8SfloatBlock";
+ case Format::eAstc10x5SfloatBlock: return "Astc10x5SfloatBlock";
+ case Format::eAstc10x6SfloatBlock: return "Astc10x6SfloatBlock";
+ case Format::eAstc10x8SfloatBlock: return "Astc10x8SfloatBlock";
+ case Format::eAstc10x10SfloatBlock: return "Astc10x10SfloatBlock";
+ case Format::eAstc12x10SfloatBlock: return "Astc12x10SfloatBlock";
+ case Format::eAstc12x12SfloatBlock: return "Astc12x12SfloatBlock";
case Format::ePvrtc12BppUnormBlockIMG: return "Pvrtc12BppUnormBlockIMG";
case Format::ePvrtc14BppUnormBlockIMG: return "Pvrtc14BppUnormBlockIMG";
case Format::ePvrtc22BppUnormBlockIMG: return "Pvrtc22BppUnormBlockIMG";
@@ -2419,26 +2670,6 @@ namespace VULKAN_HPP_NAMESPACE
case Format::ePvrtc14BppSrgbBlockIMG: return "Pvrtc14BppSrgbBlockIMG";
case Format::ePvrtc22BppSrgbBlockIMG: return "Pvrtc22BppSrgbBlockIMG";
case Format::ePvrtc24BppSrgbBlockIMG: return "Pvrtc24BppSrgbBlockIMG";
- case Format::eAstc4x4SfloatBlockEXT: return "Astc4x4SfloatBlockEXT";
- case Format::eAstc5x4SfloatBlockEXT: return "Astc5x4SfloatBlockEXT";
- case Format::eAstc5x5SfloatBlockEXT: return "Astc5x5SfloatBlockEXT";
- case Format::eAstc6x5SfloatBlockEXT: return "Astc6x5SfloatBlockEXT";
- case Format::eAstc6x6SfloatBlockEXT: return "Astc6x6SfloatBlockEXT";
- case Format::eAstc8x5SfloatBlockEXT: return "Astc8x5SfloatBlockEXT";
- case Format::eAstc8x6SfloatBlockEXT: return "Astc8x6SfloatBlockEXT";
- case Format::eAstc8x8SfloatBlockEXT: return "Astc8x8SfloatBlockEXT";
- case Format::eAstc10x5SfloatBlockEXT: return "Astc10x5SfloatBlockEXT";
- case Format::eAstc10x6SfloatBlockEXT: return "Astc10x6SfloatBlockEXT";
- case Format::eAstc10x8SfloatBlockEXT: return "Astc10x8SfloatBlockEXT";
- case Format::eAstc10x10SfloatBlockEXT: return "Astc10x10SfloatBlockEXT";
- case Format::eAstc12x10SfloatBlockEXT: return "Astc12x10SfloatBlockEXT";
- case Format::eAstc12x12SfloatBlockEXT: return "Astc12x12SfloatBlockEXT";
- case Format::eG8B8R82Plane444UnormEXT: return "G8B8R82Plane444UnormEXT";
- case Format::eG10X6B10X6R10X62Plane444Unorm3Pack16EXT: return "G10X6B10X6R10X62Plane444Unorm3Pack16EXT";
- case Format::eG12X4B12X4R12X42Plane444Unorm3Pack16EXT: return "G12X4B12X4R12X42Plane444Unorm3Pack16EXT";
- case Format::eG16B16R162Plane444UnormEXT: return "G16B16R162Plane444UnormEXT";
- case Format::eA4R4G4B4UnormPack16EXT: return "A4R4G4B4UnormPack16EXT";
- case Format::eA4B4G4R4UnormPack16EXT: return "A4B4G4R4UnormPack16EXT";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -2564,6 +2795,7 @@ namespace VULKAN_HPP_NAMESPACE
eCornerSampledNV = VK_IMAGE_CREATE_CORNER_SAMPLED_BIT_NV,
eSampleLocationsCompatibleDepthEXT = VK_IMAGE_CREATE_SAMPLE_LOCATIONS_COMPATIBLE_DEPTH_BIT_EXT,
eSubsampledEXT = VK_IMAGE_CREATE_SUBSAMPLED_BIT_EXT,
+ eFragmentDensityMapOffsetQCOM = VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM,
e2DArrayCompatibleKHR = VK_IMAGE_CREATE_2D_ARRAY_COMPATIBLE_BIT_KHR,
eAliasKHR = VK_IMAGE_CREATE_ALIAS_BIT_KHR,
eBlockTexelViewCompatibleKHR = VK_IMAGE_CREATE_BLOCK_TEXEL_VIEW_COMPATIBLE_BIT_KHR,
@@ -2591,6 +2823,7 @@ namespace VULKAN_HPP_NAMESPACE
case ImageCreateFlagBits::eCornerSampledNV: return "CornerSampledNV";
case ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT: return "SampleLocationsCompatibleDepthEXT";
case ImageCreateFlagBits::eSubsampledEXT: return "SubsampledEXT";
+ case ImageCreateFlagBits::eFragmentDensityMapOffsetQCOM: return "FragmentDensityMapOffsetQCOM";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -2884,6 +3117,7 @@ namespace VULKAN_HPP_NAMESPACE
eHost = VK_PIPELINE_STAGE_HOST_BIT,
eAllGraphics = VK_PIPELINE_STAGE_ALL_GRAPHICS_BIT,
eAllCommands = VK_PIPELINE_STAGE_ALL_COMMANDS_BIT,
+ eNone = VK_PIPELINE_STAGE_NONE,
eTransformFeedbackEXT = VK_PIPELINE_STAGE_TRANSFORM_FEEDBACK_BIT_EXT,
eConditionalRenderingEXT = VK_PIPELINE_STAGE_CONDITIONAL_RENDERING_BIT_EXT,
eAccelerationStructureBuildKHR = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
@@ -2893,8 +3127,8 @@ namespace VULKAN_HPP_NAMESPACE
eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
eFragmentShadingRateAttachmentKHR = VK_PIPELINE_STAGE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
eCommandPreprocessNV = VK_PIPELINE_STAGE_COMMAND_PREPROCESS_BIT_NV,
- eNoneKHR = VK_PIPELINE_STAGE_NONE_KHR,
eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_ACCELERATION_STRUCTURE_BUILD_BIT_NV,
+ eNoneKHR = VK_PIPELINE_STAGE_NONE_KHR,
eRayTracingShaderNV = VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_NV,
eShadingRateImageNV = VK_PIPELINE_STAGE_SHADING_RATE_IMAGE_BIT_NV
};
@@ -2920,6 +3154,7 @@ namespace VULKAN_HPP_NAMESPACE
case PipelineStageFlagBits::eHost: return "Host";
case PipelineStageFlagBits::eAllGraphics: return "AllGraphics";
case PipelineStageFlagBits::eAllCommands: return "AllCommands";
+ case PipelineStageFlagBits::eNone: return "None";
case PipelineStageFlagBits::eTransformFeedbackEXT: return "TransformFeedbackEXT";
case PipelineStageFlagBits::eConditionalRenderingEXT: return "ConditionalRenderingEXT";
case PipelineStageFlagBits::eAccelerationStructureBuildKHR: return "AccelerationStructureBuildKHR";
@@ -2929,7 +3164,6 @@ namespace VULKAN_HPP_NAMESPACE
case PipelineStageFlagBits::eFragmentDensityProcessEXT: return "FragmentDensityProcessEXT";
case PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR";
case PipelineStageFlagBits::eCommandPreprocessNV: return "CommandPreprocessNV";
- case PipelineStageFlagBits::eNoneKHR: return "NoneKHR";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -2952,10 +3186,12 @@ namespace VULKAN_HPP_NAMESPACE
ePlane0 = VK_IMAGE_ASPECT_PLANE_0_BIT,
ePlane1 = VK_IMAGE_ASPECT_PLANE_1_BIT,
ePlane2 = VK_IMAGE_ASPECT_PLANE_2_BIT,
+ eNone = VK_IMAGE_ASPECT_NONE,
eMemoryPlane0EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_0_BIT_EXT,
eMemoryPlane1EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_1_BIT_EXT,
eMemoryPlane2EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_2_BIT_EXT,
eMemoryPlane3EXT = VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT,
+ eNoneKHR = VK_IMAGE_ASPECT_NONE_KHR,
ePlane0KHR = VK_IMAGE_ASPECT_PLANE_0_BIT_KHR,
ePlane1KHR = VK_IMAGE_ASPECT_PLANE_1_BIT_KHR,
ePlane2KHR = VK_IMAGE_ASPECT_PLANE_2_BIT_KHR
@@ -2972,6 +3208,7 @@ namespace VULKAN_HPP_NAMESPACE
case ImageAspectFlagBits::ePlane0: return "Plane0";
case ImageAspectFlagBits::ePlane1: return "Plane1";
case ImageAspectFlagBits::ePlane2: return "Plane2";
+ case ImageAspectFlagBits::eNone: return "None";
case ImageAspectFlagBits::eMemoryPlane0EXT: return "MemoryPlane0EXT";
case ImageAspectFlagBits::eMemoryPlane1EXT: return "MemoryPlane1EXT";
case ImageAspectFlagBits::eMemoryPlane2EXT: return "MemoryPlane2EXT";
@@ -3037,6 +3274,7 @@ namespace VULKAN_HPP_NAMESPACE
enum class EventCreateFlagBits : VkEventCreateFlags
{
+ eDeviceOnly = VK_EVENT_CREATE_DEVICE_ONLY_BIT,
eDeviceOnlyKHR = VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR
};
@@ -3044,7 +3282,7 @@ namespace VULKAN_HPP_NAMESPACE
{
switch ( value )
{
- case EventCreateFlagBits::eDeviceOnlyKHR: return "DeviceOnlyKHR";
+ case EventCreateFlagBits::eDeviceOnly: return "DeviceOnly";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -3292,6 +3530,8 @@ namespace VULKAN_HPP_NAMESPACE
eDepthReadOnlyOptimal = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL,
eStencilAttachmentOptimal = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL,
eStencilReadOnlyOptimal = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL,
+ eReadOnlyOptimal = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL,
+ eAttachmentOptimal = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL,
ePresentSrcKHR = VK_IMAGE_LAYOUT_PRESENT_SRC_KHR,
#if defined( VK_ENABLE_BETA_EXTENSIONS )
eVideoDecodeDstKHR = VK_IMAGE_LAYOUT_VIDEO_DECODE_DST_KHR,
@@ -3306,12 +3546,12 @@ namespace VULKAN_HPP_NAMESPACE
eVideoEncodeSrcKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_SRC_KHR,
eVideoEncodeDpbKHR = VK_IMAGE_LAYOUT_VIDEO_ENCODE_DPB_KHR,
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- eReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR,
eAttachmentOptimalKHR = VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR,
eDepthAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL_KHR,
eDepthAttachmentStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_STENCIL_READ_ONLY_OPTIMAL_KHR,
eDepthReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_OPTIMAL_KHR,
eDepthReadOnlyStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_DEPTH_READ_ONLY_STENCIL_ATTACHMENT_OPTIMAL_KHR,
+ eReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR,
eShadingRateOptimalNV = VK_IMAGE_LAYOUT_SHADING_RATE_OPTIMAL_NV,
eStencilAttachmentOptimalKHR = VK_IMAGE_LAYOUT_STENCIL_ATTACHMENT_OPTIMAL_KHR,
eStencilReadOnlyOptimalKHR = VK_IMAGE_LAYOUT_STENCIL_READ_ONLY_OPTIMAL_KHR
@@ -3336,6 +3576,8 @@ namespace VULKAN_HPP_NAMESPACE
case ImageLayout::eDepthReadOnlyOptimal: return "DepthReadOnlyOptimal";
case ImageLayout::eStencilAttachmentOptimal: return "StencilAttachmentOptimal";
case ImageLayout::eStencilReadOnlyOptimal: return "StencilReadOnlyOptimal";
+ case ImageLayout::eReadOnlyOptimal: return "ReadOnlyOptimal";
+ case ImageLayout::eAttachmentOptimal: return "AttachmentOptimal";
case ImageLayout::ePresentSrcKHR: return "PresentSrcKHR";
#if defined( VK_ENABLE_BETA_EXTENSIONS )
case ImageLayout::eVideoDecodeDstKHR: return "VideoDecodeDstKHR";
@@ -3350,8 +3592,6 @@ namespace VULKAN_HPP_NAMESPACE
case ImageLayout::eVideoEncodeSrcKHR: return "VideoEncodeSrcKHR";
case ImageLayout::eVideoEncodeDpbKHR: return "VideoEncodeDpbKHR";
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- case ImageLayout::eReadOnlyOptimalKHR: return "ReadOnlyOptimalKHR";
- case ImageLayout::eAttachmentOptimalKHR: return "AttachmentOptimalKHR";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -3676,6 +3916,21 @@ namespace VULKAN_HPP_NAMESPACE
eStencilCompareMask = VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK,
eStencilWriteMask = VK_DYNAMIC_STATE_STENCIL_WRITE_MASK,
eStencilReference = VK_DYNAMIC_STATE_STENCIL_REFERENCE,
+ eCullMode = VK_DYNAMIC_STATE_CULL_MODE,
+ eFrontFace = VK_DYNAMIC_STATE_FRONT_FACE,
+ ePrimitiveTopology = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY,
+ eViewportWithCount = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT,
+ eScissorWithCount = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT,
+ eVertexInputBindingStride = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE,
+ eDepthTestEnable = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE,
+ eDepthWriteEnable = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE,
+ eDepthCompareOp = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP,
+ eDepthBoundsTestEnable = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE,
+ eStencilTestEnable = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE,
+ eStencilOp = VK_DYNAMIC_STATE_STENCIL_OP,
+ eRasterizerDiscardEnable = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE,
+ eDepthBiasEnable = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE,
+ ePrimitiveRestartEnable = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE,
eViewportWScalingNV = VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV,
eDiscardRectangleEXT = VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT,
eSampleLocationsEXT = VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT,
@@ -3685,25 +3940,25 @@ namespace VULKAN_HPP_NAMESPACE
eExclusiveScissorNV = VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV,
eFragmentShadingRateKHR = VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR,
eLineStippleEXT = VK_DYNAMIC_STATE_LINE_STIPPLE_EXT,
+ eVertexInputEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_EXT,
+ ePatchControlPointsEXT = VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT,
+ eLogicOpEXT = VK_DYNAMIC_STATE_LOGIC_OP_EXT,
+ eColorWriteEnableEXT = VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT,
eCullModeEXT = VK_DYNAMIC_STATE_CULL_MODE_EXT,
+ eDepthBiasEnableEXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT,
+ eDepthBoundsTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT,
+ eDepthCompareOpEXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT,
+ eDepthTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT,
+ eDepthWriteEnableEXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT,
eFrontFaceEXT = VK_DYNAMIC_STATE_FRONT_FACE_EXT,
+ ePrimitiveRestartEnableEXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT,
ePrimitiveTopologyEXT = VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT,
- eViewportWithCountEXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT,
+ eRasterizerDiscardEnableEXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT,
eScissorWithCountEXT = VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT,
- eVertexInputBindingStrideEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT,
- eDepthTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT,
- eDepthWriteEnableEXT = VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT,
- eDepthCompareOpEXT = VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT,
- eDepthBoundsTestEnableEXT = VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT,
- eStencilTestEnableEXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT,
eStencilOpEXT = VK_DYNAMIC_STATE_STENCIL_OP_EXT,
- eVertexInputEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_EXT,
- ePatchControlPointsEXT = VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT,
- eRasterizerDiscardEnableEXT = VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT,
- eDepthBiasEnableEXT = VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT,
- eLogicOpEXT = VK_DYNAMIC_STATE_LOGIC_OP_EXT,
- ePrimitiveRestartEnableEXT = VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT,
- eColorWriteEnableEXT = VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT
+ eStencilTestEnableEXT = VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT,
+ eVertexInputBindingStrideEXT = VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT,
+ eViewportWithCountEXT = VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT
};
VULKAN_HPP_INLINE std::string to_string( DynamicState value )
@@ -3719,6 +3974,21 @@ namespace VULKAN_HPP_NAMESPACE
case DynamicState::eStencilCompareMask: return "StencilCompareMask";
case DynamicState::eStencilWriteMask: return "StencilWriteMask";
case DynamicState::eStencilReference: return "StencilReference";
+ case DynamicState::eCullMode: return "CullMode";
+ case DynamicState::eFrontFace: return "FrontFace";
+ case DynamicState::ePrimitiveTopology: return "PrimitiveTopology";
+ case DynamicState::eViewportWithCount: return "ViewportWithCount";
+ case DynamicState::eScissorWithCount: return "ScissorWithCount";
+ case DynamicState::eVertexInputBindingStride: return "VertexInputBindingStride";
+ case DynamicState::eDepthTestEnable: return "DepthTestEnable";
+ case DynamicState::eDepthWriteEnable: return "DepthWriteEnable";
+ case DynamicState::eDepthCompareOp: return "DepthCompareOp";
+ case DynamicState::eDepthBoundsTestEnable: return "DepthBoundsTestEnable";
+ case DynamicState::eStencilTestEnable: return "StencilTestEnable";
+ case DynamicState::eStencilOp: return "StencilOp";
+ case DynamicState::eRasterizerDiscardEnable: return "RasterizerDiscardEnable";
+ case DynamicState::eDepthBiasEnable: return "DepthBiasEnable";
+ case DynamicState::ePrimitiveRestartEnable: return "PrimitiveRestartEnable";
case DynamicState::eViewportWScalingNV: return "ViewportWScalingNV";
case DynamicState::eDiscardRectangleEXT: return "DiscardRectangleEXT";
case DynamicState::eSampleLocationsEXT: return "SampleLocationsEXT";
@@ -3728,24 +3998,9 @@ namespace VULKAN_HPP_NAMESPACE
case DynamicState::eExclusiveScissorNV: return "ExclusiveScissorNV";
case DynamicState::eFragmentShadingRateKHR: return "FragmentShadingRateKHR";
case DynamicState::eLineStippleEXT: return "LineStippleEXT";
- case DynamicState::eCullModeEXT: return "CullModeEXT";
- case DynamicState::eFrontFaceEXT: return "FrontFaceEXT";
- case DynamicState::ePrimitiveTopologyEXT: return "PrimitiveTopologyEXT";
- case DynamicState::eViewportWithCountEXT: return "ViewportWithCountEXT";
- case DynamicState::eScissorWithCountEXT: return "ScissorWithCountEXT";
- case DynamicState::eVertexInputBindingStrideEXT: return "VertexInputBindingStrideEXT";
- case DynamicState::eDepthTestEnableEXT: return "DepthTestEnableEXT";
- case DynamicState::eDepthWriteEnableEXT: return "DepthWriteEnableEXT";
- case DynamicState::eDepthCompareOpEXT: return "DepthCompareOpEXT";
- case DynamicState::eDepthBoundsTestEnableEXT: return "DepthBoundsTestEnableEXT";
- case DynamicState::eStencilTestEnableEXT: return "StencilTestEnableEXT";
- case DynamicState::eStencilOpEXT: return "StencilOpEXT";
case DynamicState::eVertexInputEXT: return "VertexInputEXT";
case DynamicState::ePatchControlPointsEXT: return "PatchControlPointsEXT";
- case DynamicState::eRasterizerDiscardEnableEXT: return "RasterizerDiscardEnableEXT";
- case DynamicState::eDepthBiasEnableEXT: return "DepthBiasEnableEXT";
case DynamicState::eLogicOpEXT: return "LogicOpEXT";
- case DynamicState::ePrimitiveRestartEnableEXT: return "PrimitiveRestartEnableEXT";
case DynamicState::eColorWriteEnableEXT: return "ColorWriteEnableEXT";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
@@ -3813,17 +4068,21 @@ namespace VULKAN_HPP_NAMESPACE
enum class PipelineCreateFlagBits : VkPipelineCreateFlags
{
- eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
- eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
- eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT,
- eViewIndexFromDeviceIndex = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
- eDispatchBase = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
- eRayTracingNoNullAnyHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
- eRayTracingNoNullClosestHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
- eRayTracingNoNullMissShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR,
- eRayTracingNoNullIntersectionShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
- eRayTracingSkipTrianglesKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR,
- eRayTracingSkipAabbsKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR,
+ eDisableOptimization = VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT,
+ eAllowDerivatives = VK_PIPELINE_CREATE_ALLOW_DERIVATIVES_BIT,
+ eDerivative = VK_PIPELINE_CREATE_DERIVATIVE_BIT,
+ eViewIndexFromDeviceIndex = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT,
+ eDispatchBase = VK_PIPELINE_CREATE_DISPATCH_BASE_BIT,
+ eFailOnPipelineCompileRequired = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT,
+ eEarlyReturnOnFailure = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT,
+ eRenderingFragmentShadingRateAttachmentKHR = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+ eRenderingFragmentDensityMapAttachmentEXT = VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT,
+ eRayTracingNoNullAnyHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_ANY_HIT_SHADERS_BIT_KHR,
+ eRayTracingNoNullClosestHitShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_CLOSEST_HIT_SHADERS_BIT_KHR,
+ eRayTracingNoNullMissShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_MISS_SHADERS_BIT_KHR,
+ eRayTracingNoNullIntersectionShadersKHR = VK_PIPELINE_CREATE_RAY_TRACING_NO_NULL_INTERSECTION_SHADERS_BIT_KHR,
+ eRayTracingSkipTrianglesKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR,
+ eRayTracingSkipAabbsKHR = VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR,
eRayTracingShaderGroupHandleCaptureReplayKHR =
VK_PIPELINE_CREATE_RAY_TRACING_SHADER_GROUP_HANDLE_CAPTURE_REPLAY_BIT_KHR,
eDeferCompileNV = VK_PIPELINE_CREATE_DEFER_COMPILE_BIT_NV,
@@ -3831,11 +4090,15 @@ namespace VULKAN_HPP_NAMESPACE
eCaptureInternalRepresentationsKHR = VK_PIPELINE_CREATE_CAPTURE_INTERNAL_REPRESENTATIONS_BIT_KHR,
eIndirectBindableNV = VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV,
eLibraryKHR = VK_PIPELINE_CREATE_LIBRARY_BIT_KHR,
- eFailOnPipelineCompileRequiredEXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT,
- eEarlyReturnOnFailureEXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT,
eRayTracingAllowMotionNV = VK_PIPELINE_CREATE_RAY_TRACING_ALLOW_MOTION_BIT_NV,
eDispatchBaseKHR = VK_PIPELINE_CREATE_DISPATCH_BASE_KHR,
- eViewIndexFromDeviceIndexKHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR
+ eEarlyReturnOnFailureEXT = VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT,
+ eFailOnPipelineCompileRequiredEXT = VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT,
+ eViewIndexFromDeviceIndexKHR = VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT_KHR,
+ eVkPipelineRasterizationStateCreateFragmentDensityMapAttachmentEXT =
+ VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT,
+ eVkPipelineRasterizationStateCreateFragmentShadingRateAttachmentKHR =
+ VK_PIPELINE_RASTERIZATION_STATE_CREATE_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR
};
VULKAN_HPP_INLINE std::string to_string( PipelineCreateFlagBits value )
@@ -3847,6 +4110,12 @@ namespace VULKAN_HPP_NAMESPACE
case PipelineCreateFlagBits::eDerivative: return "Derivative";
case PipelineCreateFlagBits::eViewIndexFromDeviceIndex: return "ViewIndexFromDeviceIndex";
case PipelineCreateFlagBits::eDispatchBase: return "DispatchBase";
+ case PipelineCreateFlagBits::eFailOnPipelineCompileRequired: return "FailOnPipelineCompileRequired";
+ case PipelineCreateFlagBits::eEarlyReturnOnFailure: return "EarlyReturnOnFailure";
+ case PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR:
+ return "RenderingFragmentShadingRateAttachmentKHR";
+ case PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT:
+ return "RenderingFragmentDensityMapAttachmentEXT";
case PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR: return "RayTracingNoNullAnyHitShadersKHR";
case PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR: return "RayTracingNoNullClosestHitShadersKHR";
case PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR: return "RayTracingNoNullMissShadersKHR";
@@ -3861,8 +4130,6 @@ namespace VULKAN_HPP_NAMESPACE
case PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR: return "CaptureInternalRepresentationsKHR";
case PipelineCreateFlagBits::eIndirectBindableNV: return "IndirectBindableNV";
case PipelineCreateFlagBits::eLibraryKHR: return "LibraryKHR";
- case PipelineCreateFlagBits::eFailOnPipelineCompileRequiredEXT: return "FailOnPipelineCompileRequiredEXT";
- case PipelineCreateFlagBits::eEarlyReturnOnFailureEXT: return "EarlyReturnOnFailureEXT";
case PipelineCreateFlagBits::eRayTracingAllowMotionNV: return "RayTracingAllowMotionNV";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
@@ -3870,6 +4137,8 @@ namespace VULKAN_HPP_NAMESPACE
enum class PipelineShaderStageCreateFlagBits : VkPipelineShaderStageCreateFlags
{
+ eAllowVaryingSubgroupSize = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT,
+ eRequireFullSubgroups = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT,
eAllowVaryingSubgroupSizeEXT = VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT,
eRequireFullSubgroupsEXT = VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT
};
@@ -3878,8 +4147,8 @@ namespace VULKAN_HPP_NAMESPACE
{
switch ( value )
{
- case PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSizeEXT: return "AllowVaryingSubgroupSizeEXT";
- case PipelineShaderStageCreateFlagBits::eRequireFullSubgroupsEXT: return "RequireFullSubgroupsEXT";
+ case PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize: return "AllowVaryingSubgroupSize";
+ case PipelineShaderStageCreateFlagBits::eRequireFullSubgroups: return "RequireFullSubgroups";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -4034,24 +4303,6 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- enum class PipelineColorBlendStateCreateFlagBits : VkPipelineColorBlendStateCreateFlags
- {
- };
-
- VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlagBits )
- {
- return "(void)";
- }
-
- enum class PipelineDepthStencilStateCreateFlagBits : VkPipelineDepthStencilStateCreateFlags
- {
- };
-
- VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlagBits )
- {
- return "(void)";
- }
-
enum class PipelineDynamicStateCreateFlagBits : VkPipelineDynamicStateCreateFlags
{
};
@@ -4277,10 +4528,11 @@ namespace VULKAN_HPP_NAMESPACE
eUniformBufferDynamic = VK_DESCRIPTOR_TYPE_UNIFORM_BUFFER_DYNAMIC,
eStorageBufferDynamic = VK_DESCRIPTOR_TYPE_STORAGE_BUFFER_DYNAMIC,
eInputAttachment = VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT,
- eInlineUniformBlockEXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT,
+ eInlineUniformBlock = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK,
eAccelerationStructureKHR = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_KHR,
eAccelerationStructureNV = VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV,
- eMutableVALVE = VK_DESCRIPTOR_TYPE_MUTABLE_VALVE
+ eMutableVALVE = VK_DESCRIPTOR_TYPE_MUTABLE_VALVE,
+ eInlineUniformBlockEXT = VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT
};
VULKAN_HPP_INLINE std::string to_string( DescriptorType value )
@@ -4298,7 +4550,7 @@ namespace VULKAN_HPP_NAMESPACE
case DescriptorType::eUniformBufferDynamic: return "UniformBufferDynamic";
case DescriptorType::eStorageBufferDynamic: return "StorageBufferDynamic";
case DescriptorType::eInputAttachment: return "InputAttachment";
- case DescriptorType::eInlineUniformBlockEXT: return "InlineUniformBlockEXT";
+ case DescriptorType::eInlineUniformBlock: return "InlineUniformBlock";
case DescriptorType::eAccelerationStructureKHR: return "AccelerationStructureKHR";
case DescriptorType::eAccelerationStructureNV: return "AccelerationStructureNV";
case DescriptorType::eMutableVALVE: return "MutableVALVE";
@@ -4334,6 +4586,7 @@ namespace VULKAN_HPP_NAMESPACE
eHostWrite = VK_ACCESS_HOST_WRITE_BIT,
eMemoryRead = VK_ACCESS_MEMORY_READ_BIT,
eMemoryWrite = VK_ACCESS_MEMORY_WRITE_BIT,
+ eNone = VK_ACCESS_NONE,
eTransformFeedbackWriteEXT = VK_ACCESS_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
eTransformFeedbackCounterReadEXT = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
eTransformFeedbackCounterWriteEXT = VK_ACCESS_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
@@ -4345,9 +4598,9 @@ namespace VULKAN_HPP_NAMESPACE
eFragmentShadingRateAttachmentReadKHR = VK_ACCESS_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR,
eCommandPreprocessReadNV = VK_ACCESS_COMMAND_PREPROCESS_READ_BIT_NV,
eCommandPreprocessWriteNV = VK_ACCESS_COMMAND_PREPROCESS_WRITE_BIT_NV,
- eNoneKHR = VK_ACCESS_NONE_KHR,
eAccelerationStructureReadNV = VK_ACCESS_ACCELERATION_STRUCTURE_READ_BIT_NV,
eAccelerationStructureWriteNV = VK_ACCESS_ACCELERATION_STRUCTURE_WRITE_BIT_NV,
+ eNoneKHR = VK_ACCESS_NONE_KHR,
eShadingRateImageReadNV = VK_ACCESS_SHADING_RATE_IMAGE_READ_BIT_NV
};
@@ -4372,6 +4625,7 @@ namespace VULKAN_HPP_NAMESPACE
case AccessFlagBits::eHostWrite: return "HostWrite";
case AccessFlagBits::eMemoryRead: return "MemoryRead";
case AccessFlagBits::eMemoryWrite: return "MemoryWrite";
+ case AccessFlagBits::eNone: return "None";
case AccessFlagBits::eTransformFeedbackWriteEXT: return "TransformFeedbackWriteEXT";
case AccessFlagBits::eTransformFeedbackCounterReadEXT: return "TransformFeedbackCounterReadEXT";
case AccessFlagBits::eTransformFeedbackCounterWriteEXT: return "TransformFeedbackCounterWriteEXT";
@@ -4383,7 +4637,6 @@ namespace VULKAN_HPP_NAMESPACE
case AccessFlagBits::eFragmentShadingRateAttachmentReadKHR: return "FragmentShadingRateAttachmentReadKHR";
case AccessFlagBits::eCommandPreprocessReadNV: return "CommandPreprocessReadNV";
case AccessFlagBits::eCommandPreprocessWriteNV: return "CommandPreprocessWriteNV";
- case AccessFlagBits::eNoneKHR: return "NoneKHR";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -4426,7 +4679,9 @@ namespace VULKAN_HPP_NAMESPACE
{
eStore = VK_ATTACHMENT_STORE_OP_STORE,
eDontCare = VK_ATTACHMENT_STORE_OP_DONT_CARE,
+ eNone = VK_ATTACHMENT_STORE_OP_NONE,
eNoneEXT = VK_ATTACHMENT_STORE_OP_NONE_EXT,
+ eNoneKHR = VK_ATTACHMENT_STORE_OP_NONE_KHR,
eNoneQCOM = VK_ATTACHMENT_STORE_OP_NONE_QCOM
};
@@ -4436,7 +4691,7 @@ namespace VULKAN_HPP_NAMESPACE
{
case AttachmentStoreOp::eStore: return "Store";
case AttachmentStoreOp::eDontCare: return "DontCare";
- case AttachmentStoreOp::eNoneEXT: return "NoneEXT";
+ case AttachmentStoreOp::eNone: return "None";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -4516,7 +4771,13 @@ namespace VULKAN_HPP_NAMESPACE
ePerViewAttributesNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX,
ePerViewPositionXOnlyNVX = VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX,
eFragmentRegionQCOM = VK_SUBPASS_DESCRIPTION_FRAGMENT_REGION_BIT_QCOM,
- eShaderResolveQCOM = VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM
+ eShaderResolveQCOM = VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM,
+ eRasterizationOrderAttachmentColorAccessARM =
+ VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM,
+ eRasterizationOrderAttachmentDepthAccessARM =
+ VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM,
+ eRasterizationOrderAttachmentStencilAccessARM =
+ VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM
};
VULKAN_HPP_INLINE std::string to_string( SubpassDescriptionFlagBits value )
@@ -4527,6 +4788,12 @@ namespace VULKAN_HPP_NAMESPACE
case SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX: return "PerViewPositionXOnlyNVX";
case SubpassDescriptionFlagBits::eFragmentRegionQCOM: return "FragmentRegionQCOM";
case SubpassDescriptionFlagBits::eShaderResolveQCOM: return "ShaderResolveQCOM";
+ case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessARM:
+ return "RasterizationOrderAttachmentColorAccessARM";
+ case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessARM:
+ return "RasterizationOrderAttachmentDepthAccessARM";
+ case SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessARM:
+ return "RasterizationOrderAttachmentStencilAccessARM";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -5094,7 +5361,12 @@ namespace VULKAN_HPP_NAMESPACE
eMoltenvk = VK_DRIVER_ID_MOLTENVK,
eCoreaviProprietary = VK_DRIVER_ID_COREAVI_PROPRIETARY,
eJuiceProprietary = VK_DRIVER_ID_JUICE_PROPRIETARY,
- eVerisiliconProprietary = VK_DRIVER_ID_VERISILICON_PROPRIETARY
+ eVerisiliconProprietary = VK_DRIVER_ID_VERISILICON_PROPRIETARY,
+ eMesaTurnip = VK_DRIVER_ID_MESA_TURNIP,
+ eMesaV3Dv = VK_DRIVER_ID_MESA_V3DV,
+ eMesaPanvk = VK_DRIVER_ID_MESA_PANVK,
+ eSamsungProprietary = VK_DRIVER_ID_SAMSUNG_PROPRIETARY,
+ eMesaVenus = VK_DRIVER_ID_MESA_VENUS
};
using DriverIdKHR = DriverId;
@@ -5119,6 +5391,11 @@ namespace VULKAN_HPP_NAMESPACE
case DriverId::eCoreaviProprietary: return "CoreaviProprietary";
case DriverId::eJuiceProprietary: return "JuiceProprietary";
case DriverId::eVerisiliconProprietary: return "VerisiliconProprietary";
+ case DriverId::eMesaTurnip: return "MesaTurnip";
+ case DriverId::eMesaV3Dv: return "MesaV3Dv";
+ case DriverId::eMesaPanvk: return "MesaPanvk";
+ case DriverId::eSamsungProprietary: return "SamsungProprietary";
+ case DriverId::eMesaVenus: return "MesaVenus";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -5237,6 +5514,388 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ //=== VK_VERSION_1_3 ===
+
+ enum class PipelineCreationFeedbackFlagBits : VkPipelineCreationFeedbackFlags
+ {
+ eValid = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT,
+ eApplicationPipelineCacheHit = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT,
+ eBasePipelineAcceleration = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT
+ };
+ using PipelineCreationFeedbackFlagBitsEXT = PipelineCreationFeedbackFlagBits;
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlagBits value )
+ {
+ switch ( value )
+ {
+ case PipelineCreationFeedbackFlagBits::eValid: return "Valid";
+ case PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit: return "ApplicationPipelineCacheHit";
+ case PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration: return "BasePipelineAcceleration";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class ToolPurposeFlagBits : VkToolPurposeFlags
+ {
+ eValidation = VK_TOOL_PURPOSE_VALIDATION_BIT,
+ eProfiling = VK_TOOL_PURPOSE_PROFILING_BIT,
+ eTracing = VK_TOOL_PURPOSE_TRACING_BIT,
+ eAdditionalFeatures = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT,
+ eModifyingFeatures = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT,
+ eDebugReportingEXT = VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT,
+ eDebugMarkersEXT = VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT
+ };
+ using ToolPurposeFlagBitsEXT = ToolPurposeFlagBits;
+
+ VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlagBits value )
+ {
+ switch ( value )
+ {
+ case ToolPurposeFlagBits::eValidation: return "Validation";
+ case ToolPurposeFlagBits::eProfiling: return "Profiling";
+ case ToolPurposeFlagBits::eTracing: return "Tracing";
+ case ToolPurposeFlagBits::eAdditionalFeatures: return "AdditionalFeatures";
+ case ToolPurposeFlagBits::eModifyingFeatures: return "ModifyingFeatures";
+ case ToolPurposeFlagBits::eDebugReportingEXT: return "DebugReportingEXT";
+ case ToolPurposeFlagBits::eDebugMarkersEXT: return "DebugMarkersEXT";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class PrivateDataSlotCreateFlagBits : VkPrivateDataSlotCreateFlags
+ {
+ };
+ using PrivateDataSlotCreateFlagBitsEXT = PrivateDataSlotCreateFlagBits;
+
+ VULKAN_HPP_INLINE std::string to_string( PrivateDataSlotCreateFlagBits )
+ {
+ return "(void)";
+ }
+
+ enum class PipelineStageFlagBits2 : VkPipelineStageFlags2
+ {
+ eNone = VK_PIPELINE_STAGE_2_NONE,
+ eTopOfPipe = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT,
+ eDrawIndirect = VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT,
+ eVertexInput = VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT,
+ eVertexShader = VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT,
+ eTessellationControlShader = VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT,
+ eTessellationEvaluationShader = VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT,
+ eGeometryShader = VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT,
+ eFragmentShader = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT,
+ eEarlyFragmentTests = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT,
+ eLateFragmentTests = VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT,
+ eColorAttachmentOutput = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT,
+ eComputeShader = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT,
+ eAllTransfer = VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT,
+ eBottomOfPipe = VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT,
+ eHost = VK_PIPELINE_STAGE_2_HOST_BIT,
+ eAllGraphics = VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT,
+ eAllCommands = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT,
+ eCopy = VK_PIPELINE_STAGE_2_COPY_BIT,
+ eResolve = VK_PIPELINE_STAGE_2_RESOLVE_BIT,
+ eBlit = VK_PIPELINE_STAGE_2_BLIT_BIT,
+ eClear = VK_PIPELINE_STAGE_2_CLEAR_BIT,
+ eIndexInput = VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT,
+ eVertexAttributeInput = VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT,
+ ePreRasterizationShaders = VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT,
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ eVideoDecodeKHR = VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR,
+ eVideoEncodeKHR = VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR,
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ eTransformFeedbackEXT = VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
+ eConditionalRenderingEXT = VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT,
+ eCommandPreprocessNV = VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV,
+ eFragmentShadingRateAttachmentKHR = VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+ eAccelerationStructureBuildKHR = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
+ eRayTracingShaderKHR = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,
+ eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
+ eTaskShaderNV = VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV,
+ eMeshShaderNV = VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV,
+ eSubpassShadingHUAWEI = VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI,
+ eInvocationMaskHUAWEI = VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI,
+ eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV,
+ eRayTracingShaderNV = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV,
+ eShadingRateImageNV = VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV,
+ eTransfer = VK_PIPELINE_STAGE_2_TRANSFER_BIT
+ };
+ using PipelineStageFlagBits2KHR = PipelineStageFlagBits2;
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineStageFlagBits2 value )
+ {
+ switch ( value )
+ {
+ case PipelineStageFlagBits2::eNone: return "None";
+ case PipelineStageFlagBits2::eTopOfPipe: return "TopOfPipe";
+ case PipelineStageFlagBits2::eDrawIndirect: return "DrawIndirect";
+ case PipelineStageFlagBits2::eVertexInput: return "VertexInput";
+ case PipelineStageFlagBits2::eVertexShader: return "VertexShader";
+ case PipelineStageFlagBits2::eTessellationControlShader: return "TessellationControlShader";
+ case PipelineStageFlagBits2::eTessellationEvaluationShader: return "TessellationEvaluationShader";
+ case PipelineStageFlagBits2::eGeometryShader: return "GeometryShader";
+ case PipelineStageFlagBits2::eFragmentShader: return "FragmentShader";
+ case PipelineStageFlagBits2::eEarlyFragmentTests: return "EarlyFragmentTests";
+ case PipelineStageFlagBits2::eLateFragmentTests: return "LateFragmentTests";
+ case PipelineStageFlagBits2::eColorAttachmentOutput: return "ColorAttachmentOutput";
+ case PipelineStageFlagBits2::eComputeShader: return "ComputeShader";
+ case PipelineStageFlagBits2::eAllTransfer: return "AllTransfer";
+ case PipelineStageFlagBits2::eBottomOfPipe: return "BottomOfPipe";
+ case PipelineStageFlagBits2::eHost: return "Host";
+ case PipelineStageFlagBits2::eAllGraphics: return "AllGraphics";
+ case PipelineStageFlagBits2::eAllCommands: return "AllCommands";
+ case PipelineStageFlagBits2::eCopy: return "Copy";
+ case PipelineStageFlagBits2::eResolve: return "Resolve";
+ case PipelineStageFlagBits2::eBlit: return "Blit";
+ case PipelineStageFlagBits2::eClear: return "Clear";
+ case PipelineStageFlagBits2::eIndexInput: return "IndexInput";
+ case PipelineStageFlagBits2::eVertexAttributeInput: return "VertexAttributeInput";
+ case PipelineStageFlagBits2::ePreRasterizationShaders: return "PreRasterizationShaders";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ case PipelineStageFlagBits2::eVideoDecodeKHR: return "VideoDecodeKHR";
+ case PipelineStageFlagBits2::eVideoEncodeKHR: return "VideoEncodeKHR";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ case PipelineStageFlagBits2::eTransformFeedbackEXT: return "TransformFeedbackEXT";
+ case PipelineStageFlagBits2::eConditionalRenderingEXT: return "ConditionalRenderingEXT";
+ case PipelineStageFlagBits2::eCommandPreprocessNV: return "CommandPreprocessNV";
+ case PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR";
+ case PipelineStageFlagBits2::eAccelerationStructureBuildKHR: return "AccelerationStructureBuildKHR";
+ case PipelineStageFlagBits2::eRayTracingShaderKHR: return "RayTracingShaderKHR";
+ case PipelineStageFlagBits2::eFragmentDensityProcessEXT: return "FragmentDensityProcessEXT";
+ case PipelineStageFlagBits2::eTaskShaderNV: return "TaskShaderNV";
+ case PipelineStageFlagBits2::eMeshShaderNV: return "MeshShaderNV";
+ case PipelineStageFlagBits2::eSubpassShadingHUAWEI: return "SubpassShadingHUAWEI";
+ case PipelineStageFlagBits2::eInvocationMaskHUAWEI: return "InvocationMaskHUAWEI";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class AccessFlagBits2 : VkAccessFlags2
+ {
+ eNone = VK_ACCESS_2_NONE,
+ eIndirectCommandRead = VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT,
+ eIndexRead = VK_ACCESS_2_INDEX_READ_BIT,
+ eVertexAttributeRead = VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT,
+ eUniformRead = VK_ACCESS_2_UNIFORM_READ_BIT,
+ eInputAttachmentRead = VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT,
+ eShaderRead = VK_ACCESS_2_SHADER_READ_BIT,
+ eShaderWrite = VK_ACCESS_2_SHADER_WRITE_BIT,
+ eColorAttachmentRead = VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT,
+ eColorAttachmentWrite = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT,
+ eDepthStencilAttachmentRead = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT,
+ eDepthStencilAttachmentWrite = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT,
+ eTransferRead = VK_ACCESS_2_TRANSFER_READ_BIT,
+ eTransferWrite = VK_ACCESS_2_TRANSFER_WRITE_BIT,
+ eHostRead = VK_ACCESS_2_HOST_READ_BIT,
+ eHostWrite = VK_ACCESS_2_HOST_WRITE_BIT,
+ eMemoryRead = VK_ACCESS_2_MEMORY_READ_BIT,
+ eMemoryWrite = VK_ACCESS_2_MEMORY_WRITE_BIT,
+ eShaderSampledRead = VK_ACCESS_2_SHADER_SAMPLED_READ_BIT,
+ eShaderStorageRead = VK_ACCESS_2_SHADER_STORAGE_READ_BIT,
+ eShaderStorageWrite = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT,
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ eVideoDecodeReadKHR = VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR,
+ eVideoDecodeWriteKHR = VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR,
+ eVideoEncodeReadKHR = VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR,
+ eVideoEncodeWriteKHR = VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR,
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ eTransformFeedbackWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
+ eTransformFeedbackCounterReadEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
+ eTransformFeedbackCounterWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
+ eConditionalRenderingReadEXT = VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT,
+ eCommandPreprocessReadNV = VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV,
+ eCommandPreprocessWriteNV = VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV,
+ eFragmentShadingRateAttachmentReadKHR = VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR,
+ eAccelerationStructureReadKHR = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
+ eAccelerationStructureWriteKHR = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
+ eFragmentDensityMapReadEXT = VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,
+ eColorAttachmentReadNoncoherentEXT = VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,
+ eInvocationMaskReadHUAWEI = VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI,
+ eAccelerationStructureReadNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV,
+ eAccelerationStructureWriteNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV,
+ eShadingRateImageReadNV = VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV
+ };
+ using AccessFlagBits2KHR = AccessFlagBits2;
+
+ VULKAN_HPP_INLINE std::string to_string( AccessFlagBits2 value )
+ {
+ switch ( value )
+ {
+ case AccessFlagBits2::eNone: return "None";
+ case AccessFlagBits2::eIndirectCommandRead: return "IndirectCommandRead";
+ case AccessFlagBits2::eIndexRead: return "IndexRead";
+ case AccessFlagBits2::eVertexAttributeRead: return "VertexAttributeRead";
+ case AccessFlagBits2::eUniformRead: return "UniformRead";
+ case AccessFlagBits2::eInputAttachmentRead: return "InputAttachmentRead";
+ case AccessFlagBits2::eShaderRead: return "ShaderRead";
+ case AccessFlagBits2::eShaderWrite: return "ShaderWrite";
+ case AccessFlagBits2::eColorAttachmentRead: return "ColorAttachmentRead";
+ case AccessFlagBits2::eColorAttachmentWrite: return "ColorAttachmentWrite";
+ case AccessFlagBits2::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
+ case AccessFlagBits2::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
+ case AccessFlagBits2::eTransferRead: return "TransferRead";
+ case AccessFlagBits2::eTransferWrite: return "TransferWrite";
+ case AccessFlagBits2::eHostRead: return "HostRead";
+ case AccessFlagBits2::eHostWrite: return "HostWrite";
+ case AccessFlagBits2::eMemoryRead: return "MemoryRead";
+ case AccessFlagBits2::eMemoryWrite: return "MemoryWrite";
+ case AccessFlagBits2::eShaderSampledRead: return "ShaderSampledRead";
+ case AccessFlagBits2::eShaderStorageRead: return "ShaderStorageRead";
+ case AccessFlagBits2::eShaderStorageWrite: return "ShaderStorageWrite";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ case AccessFlagBits2::eVideoDecodeReadKHR: return "VideoDecodeReadKHR";
+ case AccessFlagBits2::eVideoDecodeWriteKHR: return "VideoDecodeWriteKHR";
+ case AccessFlagBits2::eVideoEncodeReadKHR: return "VideoEncodeReadKHR";
+ case AccessFlagBits2::eVideoEncodeWriteKHR: return "VideoEncodeWriteKHR";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ case AccessFlagBits2::eTransformFeedbackWriteEXT: return "TransformFeedbackWriteEXT";
+ case AccessFlagBits2::eTransformFeedbackCounterReadEXT: return "TransformFeedbackCounterReadEXT";
+ case AccessFlagBits2::eTransformFeedbackCounterWriteEXT: return "TransformFeedbackCounterWriteEXT";
+ case AccessFlagBits2::eConditionalRenderingReadEXT: return "ConditionalRenderingReadEXT";
+ case AccessFlagBits2::eCommandPreprocessReadNV: return "CommandPreprocessReadNV";
+ case AccessFlagBits2::eCommandPreprocessWriteNV: return "CommandPreprocessWriteNV";
+ case AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR: return "FragmentShadingRateAttachmentReadKHR";
+ case AccessFlagBits2::eAccelerationStructureReadKHR: return "AccelerationStructureReadKHR";
+ case AccessFlagBits2::eAccelerationStructureWriteKHR: return "AccelerationStructureWriteKHR";
+ case AccessFlagBits2::eFragmentDensityMapReadEXT: return "FragmentDensityMapReadEXT";
+ case AccessFlagBits2::eColorAttachmentReadNoncoherentEXT: return "ColorAttachmentReadNoncoherentEXT";
+ case AccessFlagBits2::eInvocationMaskReadHUAWEI: return "InvocationMaskReadHUAWEI";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class SubmitFlagBits : VkSubmitFlags
+ {
+ eProtected = VK_SUBMIT_PROTECTED_BIT
+ };
+ using SubmitFlagBitsKHR = SubmitFlagBits;
+
+ VULKAN_HPP_INLINE std::string to_string( SubmitFlagBits value )
+ {
+ switch ( value )
+ {
+ case SubmitFlagBits::eProtected: return "Protected";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class RenderingFlagBits : VkRenderingFlags
+ {
+ eContentsSecondaryCommandBuffers = VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT,
+ eSuspending = VK_RENDERING_SUSPENDING_BIT,
+ eResuming = VK_RENDERING_RESUMING_BIT
+ };
+ using RenderingFlagBitsKHR = RenderingFlagBits;
+
+ VULKAN_HPP_INLINE std::string to_string( RenderingFlagBits value )
+ {
+ switch ( value )
+ {
+ case RenderingFlagBits::eContentsSecondaryCommandBuffers: return "ContentsSecondaryCommandBuffers";
+ case RenderingFlagBits::eSuspending: return "Suspending";
+ case RenderingFlagBits::eResuming: return "Resuming";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class FormatFeatureFlagBits2 : VkFormatFeatureFlags2
+ {
+ eSampledImage = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT,
+ eStorageImage = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT,
+ eStorageImageAtomic = VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT,
+ eUniformTexelBuffer = VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT,
+ eStorageTexelBuffer = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT,
+ eStorageTexelBufferAtomic = VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT,
+ eVertexBuffer = VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT,
+ eColorAttachment = VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT,
+ eColorAttachmentBlend = VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT,
+ eDepthStencilAttachment = VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT,
+ eBlitSrc = VK_FORMAT_FEATURE_2_BLIT_SRC_BIT,
+ eBlitDst = VK_FORMAT_FEATURE_2_BLIT_DST_BIT,
+ eSampledImageFilterLinear = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT,
+ eSampledImageFilterCubic = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT,
+ eTransferSrc = VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT,
+ eTransferDst = VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT,
+ eSampledImageFilterMinmax = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT,
+ eMidpointChromaSamples = VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT,
+ eSampledImageYcbcrConversionLinearFilter = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT,
+ eSampledImageYcbcrConversionSeparateReconstructionFilter =
+ VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT,
+ eSampledImageYcbcrConversionChromaReconstructionExplicit =
+ VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT,
+ eSampledImageYcbcrConversionChromaReconstructionExplicitForceable =
+ VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT,
+ eDisjoint = VK_FORMAT_FEATURE_2_DISJOINT_BIT,
+ eCositedChromaSamples = VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT,
+ eStorageReadWithoutFormat = VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT,
+ eStorageWriteWithoutFormat = VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT,
+ eSampledImageDepthComparison = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT,
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ eVideoDecodeOutputKHR = VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR,
+ eVideoDecodeDpbKHR = VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR,
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ eAccelerationStructureVertexBufferKHR = VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR,
+ eFragmentDensityMapEXT = VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT,
+ eFragmentShadingRateAttachmentKHR = VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ eVideoEncodeInputKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR,
+ eVideoEncodeDpbKHR = VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR,
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ eLinearColorAttachmentNV = VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV,
+ eSampledImageFilterCubicEXT = VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT_EXT
+ };
+ using FormatFeatureFlagBits2KHR = FormatFeatureFlagBits2;
+
+ VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlagBits2 value )
+ {
+ switch ( value )
+ {
+ case FormatFeatureFlagBits2::eSampledImage: return "SampledImage";
+ case FormatFeatureFlagBits2::eStorageImage: return "StorageImage";
+ case FormatFeatureFlagBits2::eStorageImageAtomic: return "StorageImageAtomic";
+ case FormatFeatureFlagBits2::eUniformTexelBuffer: return "UniformTexelBuffer";
+ case FormatFeatureFlagBits2::eStorageTexelBuffer: return "StorageTexelBuffer";
+ case FormatFeatureFlagBits2::eStorageTexelBufferAtomic: return "StorageTexelBufferAtomic";
+ case FormatFeatureFlagBits2::eVertexBuffer: return "VertexBuffer";
+ case FormatFeatureFlagBits2::eColorAttachment: return "ColorAttachment";
+ case FormatFeatureFlagBits2::eColorAttachmentBlend: return "ColorAttachmentBlend";
+ case FormatFeatureFlagBits2::eDepthStencilAttachment: return "DepthStencilAttachment";
+ case FormatFeatureFlagBits2::eBlitSrc: return "BlitSrc";
+ case FormatFeatureFlagBits2::eBlitDst: return "BlitDst";
+ case FormatFeatureFlagBits2::eSampledImageFilterLinear: return "SampledImageFilterLinear";
+ case FormatFeatureFlagBits2::eSampledImageFilterCubic: return "SampledImageFilterCubic";
+ case FormatFeatureFlagBits2::eTransferSrc: return "TransferSrc";
+ case FormatFeatureFlagBits2::eTransferDst: return "TransferDst";
+ case FormatFeatureFlagBits2::eSampledImageFilterMinmax: return "SampledImageFilterMinmax";
+ case FormatFeatureFlagBits2::eMidpointChromaSamples: return "MidpointChromaSamples";
+ case FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter:
+ return "SampledImageYcbcrConversionLinearFilter";
+ case FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter:
+ return "SampledImageYcbcrConversionSeparateReconstructionFilter";
+ case FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit:
+ return "SampledImageYcbcrConversionChromaReconstructionExplicit";
+ case FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable:
+ return "SampledImageYcbcrConversionChromaReconstructionExplicitForceable";
+ case FormatFeatureFlagBits2::eDisjoint: return "Disjoint";
+ case FormatFeatureFlagBits2::eCositedChromaSamples: return "CositedChromaSamples";
+ case FormatFeatureFlagBits2::eStorageReadWithoutFormat: return "StorageReadWithoutFormat";
+ case FormatFeatureFlagBits2::eStorageWriteWithoutFormat: return "StorageWriteWithoutFormat";
+ case FormatFeatureFlagBits2::eSampledImageDepthComparison: return "SampledImageDepthComparison";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ case FormatFeatureFlagBits2::eVideoDecodeOutputKHR: return "VideoDecodeOutputKHR";
+ case FormatFeatureFlagBits2::eVideoDecodeDpbKHR: return "VideoDecodeDpbKHR";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ case FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR: return "AccelerationStructureVertexBufferKHR";
+ case FormatFeatureFlagBits2::eFragmentDensityMapEXT: return "FragmentDensityMapEXT";
+ case FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR: return "FragmentShadingRateAttachmentKHR";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ case FormatFeatureFlagBits2::eVideoEncodeInputKHR: return "VideoEncodeInputKHR";
+ case FormatFeatureFlagBits2::eVideoEncodeDpbKHR: return "VideoEncodeDpbKHR";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ case FormatFeatureFlagBits2::eLinearColorAttachmentNV: return "LinearColorAttachmentNV";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
//=== VK_KHR_surface ===
enum class SurfaceTransformFlagBitsKHR : VkSurfaceTransformFlagsKHR
@@ -5530,44 +6189,47 @@ namespace VULKAN_HPP_NAMESPACE
enum class DebugReportObjectTypeEXT
{
- eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
- eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
- ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
- eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
- eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
- eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
- eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
- eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
- eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
- eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
- eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
- eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
- eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
- eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
- eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
- eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
- ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
- ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
- eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
- ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
- eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
- eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
- eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
- eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
- eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
- eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
- eSurfaceKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
- eSwapchainKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
- eDebugReportCallbackEXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
- eDisplayKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT,
- eDisplayModeKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT,
- eValidationCacheEXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
- eSamplerYcbcrConversion = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT,
- eDescriptorUpdateTemplate = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT,
- eCuModuleNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT,
- eCuFunctionNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT,
- eAccelerationStructureKHR = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT,
- eAccelerationStructureNV = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT,
+ eUnknown = VK_DEBUG_REPORT_OBJECT_TYPE_UNKNOWN_EXT,
+ eInstance = VK_DEBUG_REPORT_OBJECT_TYPE_INSTANCE_EXT,
+ ePhysicalDevice = VK_DEBUG_REPORT_OBJECT_TYPE_PHYSICAL_DEVICE_EXT,
+ eDevice = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_EXT,
+ eQueue = VK_DEBUG_REPORT_OBJECT_TYPE_QUEUE_EXT,
+ eSemaphore = VK_DEBUG_REPORT_OBJECT_TYPE_SEMAPHORE_EXT,
+ eCommandBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_BUFFER_EXT,
+ eFence = VK_DEBUG_REPORT_OBJECT_TYPE_FENCE_EXT,
+ eDeviceMemory = VK_DEBUG_REPORT_OBJECT_TYPE_DEVICE_MEMORY_EXT,
+ eBuffer = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT,
+ eImage = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_EXT,
+ eEvent = VK_DEBUG_REPORT_OBJECT_TYPE_EVENT_EXT,
+ eQueryPool = VK_DEBUG_REPORT_OBJECT_TYPE_QUERY_POOL_EXT,
+ eBufferView = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT,
+ eImageView = VK_DEBUG_REPORT_OBJECT_TYPE_IMAGE_VIEW_EXT,
+ eShaderModule = VK_DEBUG_REPORT_OBJECT_TYPE_SHADER_MODULE_EXT,
+ ePipelineCache = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_CACHE_EXT,
+ ePipelineLayout = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_LAYOUT_EXT,
+ eRenderPass = VK_DEBUG_REPORT_OBJECT_TYPE_RENDER_PASS_EXT,
+ ePipeline = VK_DEBUG_REPORT_OBJECT_TYPE_PIPELINE_EXT,
+ eDescriptorSetLayout = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_LAYOUT_EXT,
+ eSampler = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_EXT,
+ eDescriptorPool = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_POOL_EXT,
+ eDescriptorSet = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_SET_EXT,
+ eFramebuffer = VK_DEBUG_REPORT_OBJECT_TYPE_FRAMEBUFFER_EXT,
+ eCommandPool = VK_DEBUG_REPORT_OBJECT_TYPE_COMMAND_POOL_EXT,
+ eSurfaceKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT,
+ eSwapchainKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT,
+ eDebugReportCallbackEXT = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_CALLBACK_EXT_EXT,
+ eDisplayKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT,
+ eDisplayModeKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT,
+ eValidationCacheEXT = VK_DEBUG_REPORT_OBJECT_TYPE_VALIDATION_CACHE_EXT_EXT,
+ eSamplerYcbcrConversion = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_EXT,
+ eDescriptorUpdateTemplate = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_EXT,
+ eCuModuleNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_MODULE_NVX_EXT,
+ eCuFunctionNVX = VK_DEBUG_REPORT_OBJECT_TYPE_CU_FUNCTION_NVX_EXT,
+ eAccelerationStructureKHR = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT,
+ eAccelerationStructureNV = VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT,
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ eBufferCollectionFUCHSIA = VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT,
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
eDebugReport = VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT,
eDescriptorUpdateTemplateKHR = VK_DEBUG_REPORT_OBJECT_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_KHR_EXT,
eSamplerYcbcrConversionKHR = VK_DEBUG_REPORT_OBJECT_TYPE_SAMPLER_YCBCR_CONVERSION_KHR_EXT,
@@ -5616,6 +6278,9 @@ namespace VULKAN_HPP_NAMESPACE
case DebugReportObjectTypeEXT::eCuFunctionNVX: return "CuFunctionNVX";
case DebugReportObjectTypeEXT::eAccelerationStructureKHR: return "AccelerationStructureKHR";
case DebugReportObjectTypeEXT::eAccelerationStructureNV: return "AccelerationStructureNV";
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ case DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA: return "BufferCollectionFUCHSIA";
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -5646,6 +6311,7 @@ namespace VULKAN_HPP_NAMESPACE
eInvalid = VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR,
# if defined( VK_ENABLE_BETA_EXTENSIONS )
eEncodeH264EXT = VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT,
+ eEncodeH265EXT = VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT,
eDecodeH264EXT = VK_VIDEO_CODEC_OPERATION_DECODE_H264_BIT_EXT,
eDecodeH265EXT = VK_VIDEO_CODEC_OPERATION_DECODE_H265_BIT_EXT
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -5658,6 +6324,7 @@ namespace VULKAN_HPP_NAMESPACE
case VideoCodecOperationFlagBitsKHR::eInvalid: return "Invalid";
# if defined( VK_ENABLE_BETA_EXTENSIONS )
case VideoCodecOperationFlagBitsKHR::eEncodeH264EXT: return "EncodeH264EXT";
+ case VideoCodecOperationFlagBitsKHR::eEncodeH265EXT: return "EncodeH265EXT";
case VideoCodecOperationFlagBitsKHR::eDecodeH264EXT: return "DecodeH264EXT";
case VideoCodecOperationFlagBitsKHR::eDecodeH265EXT: return "DecodeH265EXT";
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -5757,7 +6424,6 @@ namespace VULKAN_HPP_NAMESPACE
enum class VideoCodingQualityPresetFlagBitsKHR : VkVideoCodingQualityPresetFlagsKHR
{
- eDefault = VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR,
eNormal = VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR,
ePower = VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR,
eQuality = VK_VIDEO_CODING_QUALITY_PRESET_QUALITY_BIT_KHR
@@ -5767,7 +6433,6 @@ namespace VULKAN_HPP_NAMESPACE
{
switch ( value )
{
- case VideoCodingQualityPresetFlagBitsKHR::eDefault: return "Default";
case VideoCodingQualityPresetFlagBitsKHR::eNormal: return "Normal";
case VideoCodingQualityPresetFlagBitsKHR::ePower: return "Power";
case VideoCodingQualityPresetFlagBitsKHR::eQuality: return "Quality";
@@ -5931,6 +6596,120 @@ namespace VULKAN_HPP_NAMESPACE
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
+
+ enum class VideoEncodeH264RateControlStructureFlagBitsEXT : VkVideoEncodeH264RateControlStructureFlagsEXT
+ {
+ eUnknown = VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT,
+ eFlat = VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT,
+ eDyadic = VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264RateControlStructureFlagBitsEXT value )
+ {
+ switch ( value )
+ {
+ case VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown: return "Unknown";
+ case VideoEncodeH264RateControlStructureFlagBitsEXT::eFlat: return "Flat";
+ case VideoEncodeH264RateControlStructureFlagBitsEXT::eDyadic: return "Dyadic";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_EXT_video_encode_h265 ===
+
+ enum class VideoEncodeH265InputModeFlagBitsEXT : VkVideoEncodeH265InputModeFlagsEXT
+ {
+ eFrame = VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT,
+ eSliceSegment = VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_SEGMENT_BIT_EXT,
+ eNonVcl = VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265InputModeFlagBitsEXT value )
+ {
+ switch ( value )
+ {
+ case VideoEncodeH265InputModeFlagBitsEXT::eFrame: return "Frame";
+ case VideoEncodeH265InputModeFlagBitsEXT::eSliceSegment: return "SliceSegment";
+ case VideoEncodeH265InputModeFlagBitsEXT::eNonVcl: return "NonVcl";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class VideoEncodeH265OutputModeFlagBitsEXT : VkVideoEncodeH265OutputModeFlagsEXT
+ {
+ eFrame = VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT,
+ eSliceSegment = VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_SEGMENT_BIT_EXT,
+ eNonVcl = VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265OutputModeFlagBitsEXT value )
+ {
+ switch ( value )
+ {
+ case VideoEncodeH265OutputModeFlagBitsEXT::eFrame: return "Frame";
+ case VideoEncodeH265OutputModeFlagBitsEXT::eSliceSegment: return "SliceSegment";
+ case VideoEncodeH265OutputModeFlagBitsEXT::eNonVcl: return "NonVcl";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class VideoEncodeH265CtbSizeFlagBitsEXT : VkVideoEncodeH265CtbSizeFlagsEXT
+ {
+ e8 = VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT,
+ e16 = VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT,
+ e32 = VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT,
+ e64 = VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CtbSizeFlagBitsEXT value )
+ {
+ switch ( value )
+ {
+ case VideoEncodeH265CtbSizeFlagBitsEXT::e8: return "8";
+ case VideoEncodeH265CtbSizeFlagBitsEXT::e16: return "16";
+ case VideoEncodeH265CtbSizeFlagBitsEXT::e32: return "32";
+ case VideoEncodeH265CtbSizeFlagBitsEXT::e64: return "64";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class VideoEncodeH265RateControlStructureFlagBitsEXT : VkVideoEncodeH265RateControlStructureFlagsEXT
+ {
+ eUnknown = VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT,
+ eFlat = VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT,
+ eDyadic = VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265RateControlStructureFlagBitsEXT value )
+ {
+ switch ( value )
+ {
+ case VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown: return "Unknown";
+ case VideoEncodeH265RateControlStructureFlagBitsEXT::eFlat: return "Flat";
+ case VideoEncodeH265RateControlStructureFlagBitsEXT::eDyadic: return "Dyadic";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class VideoEncodeH265CapabilityFlagBitsEXT : VkVideoEncodeH265CapabilityFlagsEXT
+ {
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CapabilityFlagBitsEXT )
+ {
+ return "(void)";
+ }
+
+ enum class VideoEncodeH265CreateFlagBitsEXT : VkVideoEncodeH265CreateFlagsEXT
+ {
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CreateFlagBitsEXT )
+ {
+ return "(void)";
+ }
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -6803,28 +7582,6 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- //=== VK_EXT_global_priority ===
-
- enum class QueueGlobalPriorityEXT
- {
- eLow = VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT,
- eMedium = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT,
- eHigh = VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT,
- eRealtime = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT
- };
-
- VULKAN_HPP_INLINE std::string to_string( QueueGlobalPriorityEXT value )
- {
- switch ( value )
- {
- case QueueGlobalPriorityEXT::eLow: return "Low";
- case QueueGlobalPriorityEXT::eMedium: return "Medium";
- case QueueGlobalPriorityEXT::eHigh: return "High";
- case QueueGlobalPriorityEXT::eRealtime: return "Realtime";
- default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
- }
- }
-
//=== VK_AMD_pipeline_compiler_control ===
enum class PipelineCompilerControlFlagBitsAMD : VkPipelineCompilerControlFlagsAMD
@@ -6871,42 +7628,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- //=== VK_AMD_memory_overallocation_behavior ===
+ //=== VK_KHR_global_priority ===
- enum class MemoryOverallocationBehaviorAMD
+ enum class QueueGlobalPriorityKHR
{
- eDefault = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD,
- eAllowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD,
- eDisallowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD
+ eLow = VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR,
+ eMedium = VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR,
+ eHigh = VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR,
+ eRealtime = VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR
};
+ using QueueGlobalPriorityEXT = QueueGlobalPriorityKHR;
- VULKAN_HPP_INLINE std::string to_string( MemoryOverallocationBehaviorAMD value )
+ VULKAN_HPP_INLINE std::string to_string( QueueGlobalPriorityKHR value )
{
switch ( value )
{
- case MemoryOverallocationBehaviorAMD::eDefault: return "Default";
- case MemoryOverallocationBehaviorAMD::eAllowed: return "Allowed";
- case MemoryOverallocationBehaviorAMD::eDisallowed: return "Disallowed";
+ case QueueGlobalPriorityKHR::eLow: return "Low";
+ case QueueGlobalPriorityKHR::eMedium: return "Medium";
+ case QueueGlobalPriorityKHR::eHigh: return "High";
+ case QueueGlobalPriorityKHR::eRealtime: return "Realtime";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
- //=== VK_EXT_pipeline_creation_feedback ===
+ //=== VK_AMD_memory_overallocation_behavior ===
- enum class PipelineCreationFeedbackFlagBitsEXT : VkPipelineCreationFeedbackFlagsEXT
+ enum class MemoryOverallocationBehaviorAMD
{
- eValid = VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT,
- eApplicationPipelineCacheHit = VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT,
- eBasePipelineAcceleration = VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT
+ eDefault = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DEFAULT_AMD,
+ eAllowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_ALLOWED_AMD,
+ eDisallowed = VK_MEMORY_OVERALLOCATION_BEHAVIOR_DISALLOWED_AMD
};
- VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlagBitsEXT value )
+ VULKAN_HPP_INLINE std::string to_string( MemoryOverallocationBehaviorAMD value )
{
switch ( value )
{
- case PipelineCreationFeedbackFlagBitsEXT::eValid: return "Valid";
- case PipelineCreationFeedbackFlagBitsEXT::eApplicationPipelineCacheHit: return "ApplicationPipelineCacheHit";
- case PipelineCreationFeedbackFlagBitsEXT::eBasePipelineAcceleration: return "BasePipelineAcceleration";
+ case MemoryOverallocationBehaviorAMD::eDefault: return "Default";
+ case MemoryOverallocationBehaviorAMD::eAllowed: return "Allowed";
+ case MemoryOverallocationBehaviorAMD::eDisallowed: return "Disallowed";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -7058,34 +7818,6 @@ namespace VULKAN_HPP_NAMESPACE
return "(void)";
}
- //=== VK_EXT_tooling_info ===
-
- enum class ToolPurposeFlagBitsEXT : VkToolPurposeFlagsEXT
- {
- eValidation = VK_TOOL_PURPOSE_VALIDATION_BIT_EXT,
- eProfiling = VK_TOOL_PURPOSE_PROFILING_BIT_EXT,
- eTracing = VK_TOOL_PURPOSE_TRACING_BIT_EXT,
- eAdditionalFeatures = VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT,
- eModifyingFeatures = VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT,
- eDebugReporting = VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT,
- eDebugMarkers = VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT
- };
-
- VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlagBitsEXT value )
- {
- switch ( value )
- {
- case ToolPurposeFlagBitsEXT::eValidation: return "Validation";
- case ToolPurposeFlagBitsEXT::eProfiling: return "Profiling";
- case ToolPurposeFlagBitsEXT::eTracing: return "Tracing";
- case ToolPurposeFlagBitsEXT::eAdditionalFeatures: return "AdditionalFeatures";
- case ToolPurposeFlagBitsEXT::eModifyingFeatures: return "ModifyingFeatures";
- case ToolPurposeFlagBitsEXT::eDebugReporting: return "DebugReporting";
- case ToolPurposeFlagBitsEXT::eDebugMarkers: return "DebugMarkers";
- default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
- }
- }
-
//=== VK_EXT_validation_features ===
enum class ValidationFeatureEnableEXT
@@ -7413,21 +8145,11 @@ namespace VULKAN_HPP_NAMESPACE
return "(void)";
}
- //=== VK_EXT_private_data ===
-
- enum class PrivateDataSlotCreateFlagBitsEXT : VkPrivateDataSlotCreateFlagsEXT
- {
- };
-
- VULKAN_HPP_INLINE std::string to_string( PrivateDataSlotCreateFlagBitsEXT )
- {
- return "(void)";
- }
-
//=== VK_EXT_pipeline_creation_cache_control ===
enum class PipelineCacheCreateFlagBits : VkPipelineCacheCreateFlags
{
+ eExternallySynchronized = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT,
eExternallySynchronizedEXT = VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT
};
@@ -7435,7 +8157,7 @@ namespace VULKAN_HPP_NAMESPACE
{
switch ( value )
{
- case PipelineCacheCreateFlagBits::eExternallySynchronizedEXT: return "ExternallySynchronizedEXT";
+ case PipelineCacheCreateFlagBits::eExternallySynchronized: return "ExternallySynchronized";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -7461,8 +8183,8 @@ namespace VULKAN_HPP_NAMESPACE
enum class VideoEncodeRateControlFlagBitsKHR : VkVideoEncodeRateControlFlagsKHR
{
- eDefault = VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR,
- eReset = VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR
+ eDefault = VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR,
+ eReserved0 = VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR
};
VULKAN_HPP_INLINE std::string to_string( VideoEncodeRateControlFlagBitsKHR value )
@@ -7470,7 +8192,7 @@ namespace VULKAN_HPP_NAMESPACE
switch ( value )
{
case VideoEncodeRateControlFlagBitsKHR::eDefault: return "Default";
- case VideoEncodeRateControlFlagBitsKHR::eReset: return "Reset";
+ case VideoEncodeRateControlFlagBitsKHR::eReserved0: return "Reserved0";
default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
}
}
@@ -7514,211 +8236,6 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- //=== VK_KHR_synchronization2 ===
-
- enum class PipelineStageFlagBits2KHR : VkPipelineStageFlags2KHR
- {
- eNone = VK_PIPELINE_STAGE_2_NONE_KHR,
- eTopOfPipe = VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR,
- eDrawIndirect = VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR,
- eVertexInput = VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR,
- eVertexShader = VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR,
- eTessellationControlShader = VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR,
- eTessellationEvaluationShader = VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR,
- eGeometryShader = VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR,
- eFragmentShader = VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR,
- eEarlyFragmentTests = VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR,
- eLateFragmentTests = VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR,
- eColorAttachmentOutput = VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR,
- eComputeShader = VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR,
- eAllTransfer = VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR,
- eBottomOfPipe = VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR,
- eHost = VK_PIPELINE_STAGE_2_HOST_BIT_KHR,
- eAllGraphics = VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR,
- eAllCommands = VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR,
- eCopy = VK_PIPELINE_STAGE_2_COPY_BIT_KHR,
- eResolve = VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR,
- eBlit = VK_PIPELINE_STAGE_2_BLIT_BIT_KHR,
- eClear = VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR,
- eIndexInput = VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR,
- eVertexAttributeInput = VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR,
- ePreRasterizationShaders = VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR,
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- eVideoDecode = VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR,
- eVideoEncode = VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR,
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- eTransformFeedbackEXT = VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT,
- eConditionalRenderingEXT = VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT,
- eCommandPreprocessNV = VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV,
- eFragmentShadingRateAttachment = VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR,
- eAccelerationStructureBuild = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR,
- eRayTracingShader = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR,
- eFragmentDensityProcessEXT = VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT,
- eTaskShaderNV = VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV,
- eMeshShaderNV = VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV,
- eSubpassShadingHUAWEI = VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI,
- eInvocationMaskHUAWEI = VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI,
- eAccelerationStructureBuildNV = VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_NV,
- eRayTracingShaderNV = VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_NV,
- eShadingRateImageNV = VK_PIPELINE_STAGE_2_SHADING_RATE_IMAGE_BIT_NV,
- eTransfer = VK_PIPELINE_STAGE_2_TRANSFER_BIT_KHR
- };
-
- VULKAN_HPP_INLINE std::string to_string( PipelineStageFlagBits2KHR value )
- {
- switch ( value )
- {
- case PipelineStageFlagBits2KHR::eNone: return "None";
- case PipelineStageFlagBits2KHR::eTopOfPipe: return "TopOfPipe";
- case PipelineStageFlagBits2KHR::eDrawIndirect: return "DrawIndirect";
- case PipelineStageFlagBits2KHR::eVertexInput: return "VertexInput";
- case PipelineStageFlagBits2KHR::eVertexShader: return "VertexShader";
- case PipelineStageFlagBits2KHR::eTessellationControlShader: return "TessellationControlShader";
- case PipelineStageFlagBits2KHR::eTessellationEvaluationShader: return "TessellationEvaluationShader";
- case PipelineStageFlagBits2KHR::eGeometryShader: return "GeometryShader";
- case PipelineStageFlagBits2KHR::eFragmentShader: return "FragmentShader";
- case PipelineStageFlagBits2KHR::eEarlyFragmentTests: return "EarlyFragmentTests";
- case PipelineStageFlagBits2KHR::eLateFragmentTests: return "LateFragmentTests";
- case PipelineStageFlagBits2KHR::eColorAttachmentOutput: return "ColorAttachmentOutput";
- case PipelineStageFlagBits2KHR::eComputeShader: return "ComputeShader";
- case PipelineStageFlagBits2KHR::eAllTransfer: return "AllTransfer";
- case PipelineStageFlagBits2KHR::eBottomOfPipe: return "BottomOfPipe";
- case PipelineStageFlagBits2KHR::eHost: return "Host";
- case PipelineStageFlagBits2KHR::eAllGraphics: return "AllGraphics";
- case PipelineStageFlagBits2KHR::eAllCommands: return "AllCommands";
- case PipelineStageFlagBits2KHR::eCopy: return "Copy";
- case PipelineStageFlagBits2KHR::eResolve: return "Resolve";
- case PipelineStageFlagBits2KHR::eBlit: return "Blit";
- case PipelineStageFlagBits2KHR::eClear: return "Clear";
- case PipelineStageFlagBits2KHR::eIndexInput: return "IndexInput";
- case PipelineStageFlagBits2KHR::eVertexAttributeInput: return "VertexAttributeInput";
- case PipelineStageFlagBits2KHR::ePreRasterizationShaders: return "PreRasterizationShaders";
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- case PipelineStageFlagBits2KHR::eVideoDecode: return "VideoDecode";
- case PipelineStageFlagBits2KHR::eVideoEncode: return "VideoEncode";
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- case PipelineStageFlagBits2KHR::eTransformFeedbackEXT: return "TransformFeedbackEXT";
- case PipelineStageFlagBits2KHR::eConditionalRenderingEXT: return "ConditionalRenderingEXT";
- case PipelineStageFlagBits2KHR::eCommandPreprocessNV: return "CommandPreprocessNV";
- case PipelineStageFlagBits2KHR::eFragmentShadingRateAttachment: return "FragmentShadingRateAttachment";
- case PipelineStageFlagBits2KHR::eAccelerationStructureBuild: return "AccelerationStructureBuild";
- case PipelineStageFlagBits2KHR::eRayTracingShader: return "RayTracingShader";
- case PipelineStageFlagBits2KHR::eFragmentDensityProcessEXT: return "FragmentDensityProcessEXT";
- case PipelineStageFlagBits2KHR::eTaskShaderNV: return "TaskShaderNV";
- case PipelineStageFlagBits2KHR::eMeshShaderNV: return "MeshShaderNV";
- case PipelineStageFlagBits2KHR::eSubpassShadingHUAWEI: return "SubpassShadingHUAWEI";
- case PipelineStageFlagBits2KHR::eInvocationMaskHUAWEI: return "InvocationMaskHUAWEI";
- default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
- }
- }
-
- enum class AccessFlagBits2KHR : VkAccessFlags2KHR
- {
- eNone = VK_ACCESS_2_NONE_KHR,
- eIndirectCommandRead = VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR,
- eIndexRead = VK_ACCESS_2_INDEX_READ_BIT_KHR,
- eVertexAttributeRead = VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR,
- eUniformRead = VK_ACCESS_2_UNIFORM_READ_BIT_KHR,
- eInputAttachmentRead = VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR,
- eShaderRead = VK_ACCESS_2_SHADER_READ_BIT_KHR,
- eShaderWrite = VK_ACCESS_2_SHADER_WRITE_BIT_KHR,
- eColorAttachmentRead = VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR,
- eColorAttachmentWrite = VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR,
- eDepthStencilAttachmentRead = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR,
- eDepthStencilAttachmentWrite = VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR,
- eTransferRead = VK_ACCESS_2_TRANSFER_READ_BIT_KHR,
- eTransferWrite = VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR,
- eHostRead = VK_ACCESS_2_HOST_READ_BIT_KHR,
- eHostWrite = VK_ACCESS_2_HOST_WRITE_BIT_KHR,
- eMemoryRead = VK_ACCESS_2_MEMORY_READ_BIT_KHR,
- eMemoryWrite = VK_ACCESS_2_MEMORY_WRITE_BIT_KHR,
- eShaderSampledRead = VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR,
- eShaderStorageRead = VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR,
- eShaderStorageWrite = VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR,
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- eVideoDecodeRead = VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR,
- eVideoDecodeWrite = VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR,
- eVideoEncodeRead = VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR,
- eVideoEncodeWrite = VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR,
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- eTransformFeedbackWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT,
- eTransformFeedbackCounterReadEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT,
- eTransformFeedbackCounterWriteEXT = VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT,
- eConditionalRenderingReadEXT = VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT,
- eCommandPreprocessReadNV = VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV,
- eCommandPreprocessWriteNV = VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV,
- eFragmentShadingRateAttachmentRead = VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR,
- eAccelerationStructureRead = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR,
- eAccelerationStructureWrite = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR,
- eFragmentDensityMapReadEXT = VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT,
- eColorAttachmentReadNoncoherentEXT = VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT,
- eInvocationMaskReadHUAWEI = VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI,
- eAccelerationStructureReadNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_NV,
- eAccelerationStructureWriteNV = VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_NV,
- eShadingRateImageReadNV = VK_ACCESS_2_SHADING_RATE_IMAGE_READ_BIT_NV
- };
-
- VULKAN_HPP_INLINE std::string to_string( AccessFlagBits2KHR value )
- {
- switch ( value )
- {
- case AccessFlagBits2KHR::eNone: return "None";
- case AccessFlagBits2KHR::eIndirectCommandRead: return "IndirectCommandRead";
- case AccessFlagBits2KHR::eIndexRead: return "IndexRead";
- case AccessFlagBits2KHR::eVertexAttributeRead: return "VertexAttributeRead";
- case AccessFlagBits2KHR::eUniformRead: return "UniformRead";
- case AccessFlagBits2KHR::eInputAttachmentRead: return "InputAttachmentRead";
- case AccessFlagBits2KHR::eShaderRead: return "ShaderRead";
- case AccessFlagBits2KHR::eShaderWrite: return "ShaderWrite";
- case AccessFlagBits2KHR::eColorAttachmentRead: return "ColorAttachmentRead";
- case AccessFlagBits2KHR::eColorAttachmentWrite: return "ColorAttachmentWrite";
- case AccessFlagBits2KHR::eDepthStencilAttachmentRead: return "DepthStencilAttachmentRead";
- case AccessFlagBits2KHR::eDepthStencilAttachmentWrite: return "DepthStencilAttachmentWrite";
- case AccessFlagBits2KHR::eTransferRead: return "TransferRead";
- case AccessFlagBits2KHR::eTransferWrite: return "TransferWrite";
- case AccessFlagBits2KHR::eHostRead: return "HostRead";
- case AccessFlagBits2KHR::eHostWrite: return "HostWrite";
- case AccessFlagBits2KHR::eMemoryRead: return "MemoryRead";
- case AccessFlagBits2KHR::eMemoryWrite: return "MemoryWrite";
- case AccessFlagBits2KHR::eShaderSampledRead: return "ShaderSampledRead";
- case AccessFlagBits2KHR::eShaderStorageRead: return "ShaderStorageRead";
- case AccessFlagBits2KHR::eShaderStorageWrite: return "ShaderStorageWrite";
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- case AccessFlagBits2KHR::eVideoDecodeRead: return "VideoDecodeRead";
- case AccessFlagBits2KHR::eVideoDecodeWrite: return "VideoDecodeWrite";
- case AccessFlagBits2KHR::eVideoEncodeRead: return "VideoEncodeRead";
- case AccessFlagBits2KHR::eVideoEncodeWrite: return "VideoEncodeWrite";
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- case AccessFlagBits2KHR::eTransformFeedbackWriteEXT: return "TransformFeedbackWriteEXT";
- case AccessFlagBits2KHR::eTransformFeedbackCounterReadEXT: return "TransformFeedbackCounterReadEXT";
- case AccessFlagBits2KHR::eTransformFeedbackCounterWriteEXT: return "TransformFeedbackCounterWriteEXT";
- case AccessFlagBits2KHR::eConditionalRenderingReadEXT: return "ConditionalRenderingReadEXT";
- case AccessFlagBits2KHR::eCommandPreprocessReadNV: return "CommandPreprocessReadNV";
- case AccessFlagBits2KHR::eCommandPreprocessWriteNV: return "CommandPreprocessWriteNV";
- case AccessFlagBits2KHR::eFragmentShadingRateAttachmentRead: return "FragmentShadingRateAttachmentRead";
- case AccessFlagBits2KHR::eAccelerationStructureRead: return "AccelerationStructureRead";
- case AccessFlagBits2KHR::eAccelerationStructureWrite: return "AccelerationStructureWrite";
- case AccessFlagBits2KHR::eFragmentDensityMapReadEXT: return "FragmentDensityMapReadEXT";
- case AccessFlagBits2KHR::eColorAttachmentReadNoncoherentEXT: return "ColorAttachmentReadNoncoherentEXT";
- case AccessFlagBits2KHR::eInvocationMaskReadHUAWEI: return "InvocationMaskReadHUAWEI";
- default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
- }
- }
-
- enum class SubmitFlagBitsKHR : VkSubmitFlagsKHR
- {
- eProtected = VK_SUBMIT_PROTECTED_BIT_KHR
- };
-
- VULKAN_HPP_INLINE std::string to_string( SubmitFlagBitsKHR value )
- {
- switch ( value )
- {
- case SubmitFlagBitsKHR::eProtected: return "Protected";
- default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
- }
- }
-
//=== VK_NV_fragment_shading_rate_enums ===
enum class FragmentShadingRateNV
@@ -7811,6 +8328,44 @@ namespace VULKAN_HPP_NAMESPACE
return "(void)";
}
+ //=== VK_ARM_rasterization_order_attachment_access ===
+
+ enum class PipelineColorBlendStateCreateFlagBits : VkPipelineColorBlendStateCreateFlags
+ {
+ eRasterizationOrderAttachmentAccessARM =
+ VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlagBits value )
+ {
+ switch ( value )
+ {
+ case PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessARM:
+ return "RasterizationOrderAttachmentAccessARM";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class PipelineDepthStencilStateCreateFlagBits : VkPipelineDepthStencilStateCreateFlags
+ {
+ eRasterizationOrderAttachmentDepthAccessARM =
+ VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM,
+ eRasterizationOrderAttachmentStencilAccessARM =
+ VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlagBits value )
+ {
+ switch ( value )
+ {
+ case PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessARM:
+ return "RasterizationOrderAttachmentDepthAccessARM";
+ case PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessARM:
+ return "RasterizationOrderAttachmentStencilAccessARM";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
//=== VK_EXT_directfb_surface ===
@@ -7865,6 +8420,41 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ enum class ImageConstraintsInfoFlagBitsFUCHSIA : VkImageConstraintsInfoFlagsFUCHSIA
+ {
+ eCpuReadRarely = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA,
+ eCpuReadOften = VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA,
+ eCpuWriteRarely = VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA,
+ eCpuWriteOften = VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA,
+ eProtectedOptional = VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( ImageConstraintsInfoFlagBitsFUCHSIA value )
+ {
+ switch ( value )
+ {
+ case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely: return "CpuReadRarely";
+ case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften: return "CpuReadOften";
+ case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely: return "CpuWriteRarely";
+ case ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften: return "CpuWriteOften";
+ case ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional: return "ProtectedOptional";
+ default: return "invalid ( " + VULKAN_HPP_NAMESPACE::toHexString( static_cast<uint32_t>( value ) ) + " )";
+ }
+ }
+
+ enum class ImageFormatConstraintsFlagBitsFUCHSIA : VkImageFormatConstraintsFlagsFUCHSIA
+ {
+ };
+
+ VULKAN_HPP_INLINE std::string to_string( ImageFormatConstraintsFlagBitsFUCHSIA )
+ {
+ return "(void)";
+ }
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
#if defined( VK_USE_PLATFORM_SCREEN_QNX )
//=== VK_QNX_screen_surface ===
@@ -7882,6 +8472,3302 @@ namespace VULKAN_HPP_NAMESPACE
struct cpp_type
{};
+ //=====================
+ //=== Format Traits ===
+ //=====================
+
+ // The texel block size in bytes.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t blockSize( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: return 12;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: return 12;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: return 12;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Uint: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sint: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: return 24;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: return 24;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: return 24;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eS8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: return 5;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 6;
+ case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return 8;
+
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ }
+
+ // The number of texels in a texel block.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t texelsPerBlock( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eS8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return 20;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return 20;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return 25;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return 25;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return 30;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return 30;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return 36;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return 36;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return 40;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return 40;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return 48;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return 48;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return 64;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return 64;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return 50;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return 50;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return 60;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return 60;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return 80;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return 80;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return 100;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return 100;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return 120;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return 120;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return 144;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return 144;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return 20;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return 25;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return 30;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return 36;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return 40;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return 48;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return 64;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return 50;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return 60;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return 80;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return 100;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return 120;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return 144;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return 1;
+
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ }
+
+ // The three-dimensional extent of a texel block.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 std::array<uint8_t, 3> blockExtent( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return { { 5, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return { { 5, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return { { 5, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return { { 5, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return { { 6, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return { { 6, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return { { 6, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return { { 6, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return { { 8, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return { { 8, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return { { 8, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return { { 8, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return { { 8, 8, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return { { 8, 8, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return { { 10, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return { { 10, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return { { 10, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return { { 10, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return { { 10, 8, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return { { 10, 8, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return { { 10, 10, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return { { 10, 10, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return { { 12, 10, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return { { 12, 10, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return { { 12, 12, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return { { 12, 12, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return { { 2, 1, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return { { 5, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return { { 5, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return { { 6, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return { { 6, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return { { 8, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return { { 8, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return { { 8, 8, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return { { 10, 5, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return { { 10, 6, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return { { 10, 8, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return { { 10, 10, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return { { 12, 10, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return { { 12, 12, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return { { 8, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return { { 8, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return { { 8, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return { { 4, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return { { 8, 4, 1 } };
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return { { 4, 4, 1 } };
+
+ default: return { { 1, 1, 1 } };
+ }
+ }
+
+ // A textual description of the compression scheme, or an empty string if it is not compressed
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 char const * compressionScheme( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return "BC";
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return "ETC2";
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return "ETC2";
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return "ETC2";
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return "ETC2";
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return "ETC2";
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return "ETC2";
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return "EAC";
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return "EAC";
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return "EAC";
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return "EAC";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return "ASTC LDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return "ASTC HDR";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return "PVRTC";
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return "PVRTC";
+
+ default: return "";
+ }
+ }
+
+ // True, if this format is a compressed one.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool isCompressed( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ return ( *VULKAN_HPP_NAMESPACE::compressionScheme( format ) != 0 );
+ }
+
+ // The number of bits into which the format is packed. A single image element in this format
+ // can be stored in the same space as a scalar type of this bit width.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t packed( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 8;
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 32;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 16;
+ case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 16;
+
+ default: return 0;
+ }
+ }
+
+ // The number of components of this format.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentCount( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8Srgb: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Snorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eD16Unorm: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eS8Uint: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16: return 1;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG: return 4;
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return 4;
+
+ default: return 0;
+ }
+ }
+
+ // True, if the components of this format are compressed, otherwise false.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 bool componentsAreCompressed( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbUnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbSrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaUnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc1RgbaSrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc2UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc2SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc3UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc3SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc4UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc4SnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc5UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc5SnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HUfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc6HSfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc7UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eBc7SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A1SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eEtc2R8G8B8A8SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12UnormBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SrgbBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc4x4SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x4SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc5x5SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x5SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc6x6SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x5SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x6SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc8x8SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x5SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x6SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x8SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc10x10SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x10SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::eAstc12x12SfloatBlock:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppUnormBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppUnormBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppUnormBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppUnormBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc12BppSrgbBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc14BppSrgbBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc22BppSrgbBlockIMG:
+ case VULKAN_HPP_NAMESPACE::Format::ePvrtc24BppSrgbBlockIMG: return true;
+ default: return false;
+ }
+ }
+
+ // The number of bits in this component, if not compressed, otherwise 0.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentBits( VULKAN_HPP_NAMESPACE::Format format,
+ uint8_t component )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4UnormPack8:
+ switch ( component )
+ {
+ case 0: return 4;
+ case 1: return 4;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR4G4B4A4UnormPack16:
+ switch ( component )
+ {
+ case 0: return 4;
+ case 1: return 4;
+ case 2: return 4;
+ case 3: return 4;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB4G4R4A4UnormPack16:
+ switch ( component )
+ {
+ case 0: return 4;
+ case 1: return 4;
+ case 2: return 4;
+ case 3: return 4;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR5G6B5UnormPack16:
+ switch ( component )
+ {
+ case 0: return 5;
+ case 1: return 6;
+ case 2: return 5;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB5G6R5UnormPack16:
+ switch ( component )
+ {
+ case 0: return 5;
+ case 1: return 6;
+ case 2: return 5;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR5G5B5A1UnormPack16:
+ switch ( component )
+ {
+ case 0: return 5;
+ case 1: return 5;
+ case 2: return 5;
+ case 3: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB5G5R5A1UnormPack16:
+ switch ( component )
+ {
+ case 0: return 5;
+ case 1: return 5;
+ case 2: return 5;
+ case 3: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA1R5G5B5UnormPack16:
+ switch ( component )
+ {
+ case 0: return 1;
+ case 1: return 5;
+ case 2: return 5;
+ case 3: return 5;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Snorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Sint:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8Srgb:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Snorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Sint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8Srgb:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Snorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Sint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8Srgb:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Snorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Sint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8Srgb:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Snorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Sint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR8G8B8A8Srgb:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Snorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sscaled:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Sint:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8A8Srgb:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UnormPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SnormPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UscaledPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SscaledPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8UintPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SintPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA8B8G8R8SrgbPack32:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UnormPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SnormPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UscaledPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SscaledPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10UintPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2R10G10B10SintPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UnormPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SnormPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UscaledPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SscaledPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10UintPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA2B10G10R10SintPack32:
+ switch ( component )
+ {
+ case 0: return 2;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Snorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Uint:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sint:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16Sfloat:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Snorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Uint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16Sfloat:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Snorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Uint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16Sfloat:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Snorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sscaled:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Uint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR16G16B16A16Sfloat:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32Uint:
+ switch ( component )
+ {
+ case 0: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sint:
+ switch ( component )
+ {
+ case 0: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32Sfloat:
+ switch ( component )
+ {
+ case 0: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Uint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32Sfloat:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Uint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ case 2: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ case 2: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32Sfloat:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ case 2: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Uint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ case 2: return 32;
+ case 3: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ case 2: return 32;
+ case 3: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR32G32B32A32Sfloat:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 32;
+ case 2: return 32;
+ case 3: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64Uint:
+ switch ( component )
+ {
+ case 0: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sint:
+ switch ( component )
+ {
+ case 0: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64Sfloat:
+ switch ( component )
+ {
+ case 0: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Uint:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sint:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64Sfloat:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Uint:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ case 2: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sint:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ case 2: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64Sfloat:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ case 2: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Uint:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ case 2: return 64;
+ case 3: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sint:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ case 2: return 64;
+ case 3: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR64G64B64A64Sfloat:
+ switch ( component )
+ {
+ case 0: return 64;
+ case 1: return 64;
+ case 2: return 64;
+ case 3: return 64;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB10G11R11UfloatPack32:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 11;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eE5B9G9R9UfloatPack32:
+ switch ( component )
+ {
+ case 0: return 9;
+ case 1: return 9;
+ case 2: return 9;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eD16Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eX8D24UnormPack32:
+ switch ( component )
+ {
+ case 0: return 24;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eD32Sfloat:
+ switch ( component )
+ {
+ case 0: return 32;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eS8Uint:
+ switch ( component )
+ {
+ case 0: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eD16UnormS8Uint:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eD24UnormS8Uint:
+ switch ( component )
+ {
+ case 0: return 24;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eD32SfloatS8Uint:
+ switch ( component )
+ {
+ case 0: return 32;
+ case 1: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11UnormBlock:
+ switch ( component )
+ {
+ case 0: return 11;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11SnormBlock:
+ switch ( component )
+ {
+ case 0: return 11;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11UnormBlock:
+ switch ( component )
+ {
+ case 0: return 11;
+ case 1: return 11;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eEacR11G11SnormBlock:
+ switch ( component )
+ {
+ case 0: return 11;
+ case 1: return 11;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8G8R8422Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB8G8R8G8422Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ case 3: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6B10X6A10X6Unorm4Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6G10X6R10X6422Unorm4Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB10X6G10X6R10X6G10X6422Unorm4Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ case 3: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4B12X4A12X4Unorm4Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ case 3: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4G12X4R12X4422Unorm4Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ case 3: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB12X4G12X4R12X4G12X4422Unorm4Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ case 3: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16G16R16422Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eB16G16R16G16422Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ case 3: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 8;
+ case 1: return 8;
+ case 2: return 8;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 10;
+ case 1: return 10;
+ case 2: return 10;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 12;
+ case 1: return 12;
+ case 2: return 12;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 16;
+ case 1: return 16;
+ case 2: return 16;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA4R4G4B4UnormPack16:
+ switch ( component )
+ {
+ case 0: return 4;
+ case 1: return 4;
+ case 2: return 4;
+ case 3: return 4;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eA4B4G4R4UnormPack16:
+ switch ( component )
+ {
+ case 0: return 4;
+ case 1: return 4;
+ case 2: return 4;
+ case 3: return 4;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+
+ default: return 0;
+ }
+ }
+
+ // The plane this component lies in.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t componentPlaneIndex( VULKAN_HPP_NAMESPACE::Format format,
+ uint8_t component )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm:
+ switch ( component )
+ {
+ case 0: return 0;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 0;
+ }
+
+ default: return 0;
+ }
+ }
+
+ // The number of image planes of this format.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeCount( VULKAN_HPP_NAMESPACE::Format format )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm: return 3;
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16: return 2;
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm: return 2;
+
+ default: return 1;
+ }
+ }
+
+ // The single-plane format that this plane is compatible with.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 VULKAN_HPP_NAMESPACE::Format
+ planeCompatibleFormat( VULKAN_HPP_NAMESPACE::Format format, uint8_t plane )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 2: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR8Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR8G8Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR10X6UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR10X6G10X6Unorm2Pack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR12X4UnormPack16;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR12X4G12X4Unorm2Pack16;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return VULKAN_HPP_NAMESPACE::Format::eR16Unorm;
+ case 1: return VULKAN_HPP_NAMESPACE::Format::eR16G16Unorm;
+ default: VULKAN_HPP_ASSERT( false ); return VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ }
+
+ default: VULKAN_HPP_ASSERT( plane == 0 ); return format;
+ }
+ }
+
+ // The relative height of this plane. A value of k means that this plane is 1/k the height of the overall format.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeHeightDivisor( VULKAN_HPP_NAMESPACE::Format format,
+ uint8_t plane )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+
+ default: VULKAN_HPP_ASSERT( plane == 0 ); return 1;
+ }
+ }
+
+ // The relative width of this plane. A value of k means that this plane is 1/k the width of the overall format.
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR_14 uint8_t planeWidthDivisor( VULKAN_HPP_NAMESPACE::Format format,
+ uint8_t plane )
+ {
+ switch ( format )
+ {
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R83Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X63Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane420Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane422Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X43Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane420Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ case 2: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane422Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 2;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R163Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ case 2: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG8B8R82Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG10X6B10X6R10X62Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG12X4B12X4R12X42Plane444Unorm3Pack16:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+ case VULKAN_HPP_NAMESPACE::Format::eG16B16R162Plane444Unorm:
+ switch ( plane )
+ {
+ case 0: return 1;
+ case 1: return 1;
+ default: VULKAN_HPP_ASSERT( false ); return 1;
+ }
+
+ default: VULKAN_HPP_ASSERT( plane == 0 ); return 1;
+ }
+ }
+
template <typename T>
struct IndexTypeValue
{};
@@ -7970,8 +11856,8 @@ namespace VULKAN_HPP_NAMESPACE
return FormatFeatureFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags operator&(FormatFeatureFlagBits bit0,
- FormatFeatureFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags operator&( FormatFeatureFlagBits bit0,
+ FormatFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return FormatFeatureFlags( bit0 ) & bit1;
}
@@ -8070,16 +11956,16 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags = VkFlags( ImageCreateFlagBits::eSparseBinding ) | VkFlags( ImageCreateFlagBits::eSparseResidency ) |
- VkFlags( ImageCreateFlagBits::eSparseAliased ) | VkFlags( ImageCreateFlagBits::eMutableFormat ) |
- VkFlags( ImageCreateFlagBits::eCubeCompatible ) | VkFlags( ImageCreateFlagBits::eAlias ) |
- VkFlags( ImageCreateFlagBits::eSplitInstanceBindRegions ) |
- VkFlags( ImageCreateFlagBits::e2DArrayCompatible ) |
- VkFlags( ImageCreateFlagBits::eBlockTexelViewCompatible ) |
- VkFlags( ImageCreateFlagBits::eExtendedUsage ) | VkFlags( ImageCreateFlagBits::eProtected ) |
- VkFlags( ImageCreateFlagBits::eDisjoint ) | VkFlags( ImageCreateFlagBits::eCornerSampledNV ) |
- VkFlags( ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT ) |
- VkFlags( ImageCreateFlagBits::eSubsampledEXT )
+ allFlags =
+ VkFlags( ImageCreateFlagBits::eSparseBinding ) | VkFlags( ImageCreateFlagBits::eSparseResidency ) |
+ VkFlags( ImageCreateFlagBits::eSparseAliased ) | VkFlags( ImageCreateFlagBits::eMutableFormat ) |
+ VkFlags( ImageCreateFlagBits::eCubeCompatible ) | VkFlags( ImageCreateFlagBits::eAlias ) |
+ VkFlags( ImageCreateFlagBits::eSplitInstanceBindRegions ) | VkFlags( ImageCreateFlagBits::e2DArrayCompatible ) |
+ VkFlags( ImageCreateFlagBits::eBlockTexelViewCompatible ) | VkFlags( ImageCreateFlagBits::eExtendedUsage ) |
+ VkFlags( ImageCreateFlagBits::eProtected ) | VkFlags( ImageCreateFlagBits::eDisjoint ) |
+ VkFlags( ImageCreateFlagBits::eCornerSampledNV ) |
+ VkFlags( ImageCreateFlagBits::eSampleLocationsCompatibleDepthEXT ) |
+ VkFlags( ImageCreateFlagBits::eSubsampledEXT ) | VkFlags( ImageCreateFlagBits::eFragmentDensityMapOffsetQCOM )
};
};
@@ -8089,8 +11975,8 @@ namespace VULKAN_HPP_NAMESPACE
return ImageCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCreateFlags operator&(ImageCreateFlagBits bit0,
- ImageCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageCreateFlags operator&( ImageCreateFlagBits bit0,
+ ImageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ImageCreateFlags( bit0 ) & bit1;
}
@@ -8142,6 +12028,8 @@ namespace VULKAN_HPP_NAMESPACE
result += "SampleLocationsCompatibleDepthEXT | ";
if ( value & ImageCreateFlagBits::eSubsampledEXT )
result += "SubsampledEXT | ";
+ if ( value & ImageCreateFlagBits::eFragmentDensityMapOffsetQCOM )
+ result += "FragmentDensityMapOffsetQCOM | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
@@ -8178,8 +12066,8 @@ namespace VULKAN_HPP_NAMESPACE
return ImageUsageFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageUsageFlags operator&(ImageUsageFlagBits bit0,
- ImageUsageFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageUsageFlags operator&( ImageUsageFlagBits bit0,
+ ImageUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ImageUsageFlags( bit0 ) & bit1;
}
@@ -8267,8 +12155,8 @@ namespace VULKAN_HPP_NAMESPACE
return MemoryHeapFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryHeapFlags operator&(MemoryHeapFlagBits bit0,
- MemoryHeapFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryHeapFlags operator&( MemoryHeapFlagBits bit0,
+ MemoryHeapFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryHeapFlags( bit0 ) & bit1;
}
@@ -8315,19 +12203,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags
- operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryPropertyFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags operator&(MemoryPropertyFlagBits bit0,
- MemoryPropertyFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags
+ operator&( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryPropertyFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryPropertyFlags
- operator^( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( MemoryPropertyFlagBits bit0, MemoryPropertyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryPropertyFlags( bit0 ) ^ bit1;
}
@@ -8388,7 +12276,8 @@ namespace VULKAN_HPP_NAMESPACE
return QueueFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueueFlags operator&(QueueFlagBits bit0, QueueFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueueFlags operator&( QueueFlagBits bit0,
+ QueueFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return QueueFlags( bit0 ) & bit1;
}
@@ -8450,8 +12339,8 @@ namespace VULKAN_HPP_NAMESPACE
return SampleCountFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SampleCountFlags operator&(SampleCountFlagBits bit0,
- SampleCountFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SampleCountFlags operator&( SampleCountFlagBits bit0,
+ SampleCountFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SampleCountFlags( bit0 ) & bit1;
}
@@ -8510,19 +12399,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags
- operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceQueueCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags
- operator&(DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceQueueCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceQueueCreateFlags
- operator^( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DeviceQueueCreateFlagBits bit0, DeviceQueueCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceQueueCreateFlags( bit0 ) ^ bit1;
}
@@ -8562,13 +12451,14 @@ namespace VULKAN_HPP_NAMESPACE
VkFlags( PipelineStageFlagBits::eColorAttachmentOutput ) | VkFlags( PipelineStageFlagBits::eComputeShader ) |
VkFlags( PipelineStageFlagBits::eTransfer ) | VkFlags( PipelineStageFlagBits::eBottomOfPipe ) |
VkFlags( PipelineStageFlagBits::eHost ) | VkFlags( PipelineStageFlagBits::eAllGraphics ) |
- VkFlags( PipelineStageFlagBits::eAllCommands ) | VkFlags( PipelineStageFlagBits::eTransformFeedbackEXT ) |
+ VkFlags( PipelineStageFlagBits::eAllCommands ) | VkFlags( PipelineStageFlagBits::eNone ) |
+ VkFlags( PipelineStageFlagBits::eTransformFeedbackEXT ) |
VkFlags( PipelineStageFlagBits::eConditionalRenderingEXT ) |
VkFlags( PipelineStageFlagBits::eAccelerationStructureBuildKHR ) |
VkFlags( PipelineStageFlagBits::eRayTracingShaderKHR ) | VkFlags( PipelineStageFlagBits::eTaskShaderNV ) |
VkFlags( PipelineStageFlagBits::eMeshShaderNV ) | VkFlags( PipelineStageFlagBits::eFragmentDensityProcessEXT ) |
VkFlags( PipelineStageFlagBits::eFragmentShadingRateAttachmentKHR ) |
- VkFlags( PipelineStageFlagBits::eCommandPreprocessNV ) | VkFlags( PipelineStageFlagBits::eNoneKHR )
+ VkFlags( PipelineStageFlagBits::eCommandPreprocessNV )
};
};
@@ -8578,8 +12468,8 @@ namespace VULKAN_HPP_NAMESPACE
return PipelineStageFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags operator&(PipelineStageFlagBits bit0,
- PipelineStageFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags operator&( PipelineStageFlagBits bit0,
+ PipelineStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineStageFlags( bit0 ) & bit1;
}
@@ -8674,9 +12564,9 @@ namespace VULKAN_HPP_NAMESPACE
allFlags = VkFlags( ImageAspectFlagBits::eColor ) | VkFlags( ImageAspectFlagBits::eDepth ) |
VkFlags( ImageAspectFlagBits::eStencil ) | VkFlags( ImageAspectFlagBits::eMetadata ) |
VkFlags( ImageAspectFlagBits::ePlane0 ) | VkFlags( ImageAspectFlagBits::ePlane1 ) |
- VkFlags( ImageAspectFlagBits::ePlane2 ) | VkFlags( ImageAspectFlagBits::eMemoryPlane0EXT ) |
- VkFlags( ImageAspectFlagBits::eMemoryPlane1EXT ) | VkFlags( ImageAspectFlagBits::eMemoryPlane2EXT ) |
- VkFlags( ImageAspectFlagBits::eMemoryPlane3EXT )
+ VkFlags( ImageAspectFlagBits::ePlane2 ) | VkFlags( ImageAspectFlagBits::eNone ) |
+ VkFlags( ImageAspectFlagBits::eMemoryPlane0EXT ) | VkFlags( ImageAspectFlagBits::eMemoryPlane1EXT ) |
+ VkFlags( ImageAspectFlagBits::eMemoryPlane2EXT ) | VkFlags( ImageAspectFlagBits::eMemoryPlane3EXT )
};
};
@@ -8686,8 +12576,8 @@ namespace VULKAN_HPP_NAMESPACE
return ImageAspectFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageAspectFlags operator&(ImageAspectFlagBits bit0,
- ImageAspectFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageAspectFlags operator&( ImageAspectFlagBits bit0,
+ ImageAspectFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ImageAspectFlags( bit0 ) & bit1;
}
@@ -8749,19 +12639,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags
- operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SparseImageFormatFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags
- operator&(SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SparseImageFormatFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseImageFormatFlags
- operator^( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SparseImageFormatFlagBits bit0, SparseImageFormatFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SparseImageFormatFlags( bit0 ) ^ bit1;
}
@@ -8800,19 +12690,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags
- operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SparseMemoryBindFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags
- operator&(SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SparseMemoryBindFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SparseMemoryBindFlags
- operator^( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SparseMemoryBindFlagBits bit0, SparseMemoryBindFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SparseMemoryBindFlags( bit0 ) ^ bit1;
}
@@ -8852,8 +12742,8 @@ namespace VULKAN_HPP_NAMESPACE
return FenceCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceCreateFlags operator&(FenceCreateFlagBits bit0,
- FenceCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceCreateFlags operator&( FenceCreateFlagBits bit0,
+ FenceCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return FenceCreateFlags( bit0 ) & bit1;
}
@@ -8895,7 +12785,7 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags = VkFlags( EventCreateFlagBits::eDeviceOnlyKHR )
+ allFlags = VkFlags( EventCreateFlagBits::eDeviceOnly )
};
};
@@ -8905,8 +12795,8 @@ namespace VULKAN_HPP_NAMESPACE
return EventCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR EventCreateFlags operator&(EventCreateFlagBits bit0,
- EventCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR EventCreateFlags operator&( EventCreateFlagBits bit0,
+ EventCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return EventCreateFlags( bit0 ) & bit1;
}
@@ -8928,8 +12818,8 @@ namespace VULKAN_HPP_NAMESPACE
return "{}";
std::string result;
- if ( value & EventCreateFlagBits::eDeviceOnlyKHR )
- result += "DeviceOnlyKHR | ";
+ if ( value & EventCreateFlagBits::eDeviceOnly )
+ result += "DeviceOnly | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
@@ -8956,19 +12846,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags
- operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return QueryPipelineStatisticFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags
- operator&(QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return QueryPipelineStatisticFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryPipelineStatisticFlags
- operator^( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( QueryPipelineStatisticFlagBits bit0, QueryPipelineStatisticFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return QueryPipelineStatisticFlags( bit0 ) ^ bit1;
}
@@ -9039,8 +12929,8 @@ namespace VULKAN_HPP_NAMESPACE
return QueryResultFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryResultFlags operator&(QueryResultFlagBits bit0,
- QueryResultFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryResultFlags operator&( QueryResultFlagBits bit0,
+ QueryResultFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return QueryResultFlags( bit0 ) & bit1;
}
@@ -9097,8 +12987,8 @@ namespace VULKAN_HPP_NAMESPACE
return BufferCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferCreateFlags operator&(BufferCreateFlagBits bit0,
- BufferCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferCreateFlags operator&( BufferCreateFlagBits bit0,
+ BufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return BufferCreateFlags( bit0 ) & bit1;
}
@@ -9168,8 +13058,8 @@ namespace VULKAN_HPP_NAMESPACE
return BufferUsageFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferUsageFlags operator&(BufferUsageFlagBits bit0,
- BufferUsageFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BufferUsageFlags operator&( BufferUsageFlagBits bit0,
+ BufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return BufferUsageFlags( bit0 ) & bit1;
}
@@ -9259,19 +13149,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags
- operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ImageViewCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags operator&(ImageViewCreateFlagBits bit0,
- ImageViewCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags
+ operator&( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ImageViewCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageViewCreateFlags
- operator^( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ImageViewCreateFlagBits bit0, ImageViewCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ImageViewCreateFlags( bit0 ) ^ bit1;
}
@@ -9310,24 +13200,24 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags = VkFlags( PipelineCacheCreateFlagBits::eExternallySynchronizedEXT )
+ allFlags = VkFlags( PipelineCacheCreateFlagBits::eExternallySynchronized )
};
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags
- operator|( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineCacheCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags
- operator&(PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineCacheCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCacheCreateFlags
- operator^( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( PipelineCacheCreateFlagBits bit0, PipelineCacheCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineCacheCreateFlags( bit0 ) ^ bit1;
}
@@ -9344,8 +13234,8 @@ namespace VULKAN_HPP_NAMESPACE
return "{}";
std::string result;
- if ( value & PipelineCacheCreateFlagBits::eExternallySynchronizedEXT )
- result += "ExternallySynchronizedEXT | ";
+ if ( value & PipelineCacheCreateFlagBits::eExternallySynchronized )
+ result += "ExternallySynchronized | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
@@ -9363,19 +13253,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags
- operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ColorComponentFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags operator&(ColorComponentFlagBits bit0,
- ColorComponentFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags
+ operator&( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ColorComponentFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ColorComponentFlags
- operator^( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ColorComponentFlagBits bit0, ColorComponentFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ColorComponentFlags( bit0 ) ^ bit1;
}
@@ -9422,8 +13312,8 @@ namespace VULKAN_HPP_NAMESPACE
return CullModeFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CullModeFlags operator&(CullModeFlagBits bit0,
- CullModeFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CullModeFlags operator&( CullModeFlagBits bit0,
+ CullModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CullModeFlags( bit0 ) & bit1;
}
@@ -9455,9 +13345,49 @@ namespace VULKAN_HPP_NAMESPACE
using PipelineColorBlendStateCreateFlags = Flags<PipelineColorBlendStateCreateFlagBits>;
- VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlags )
+ template <>
+ struct FlagTraits<PipelineColorBlendStateCreateFlagBits>
{
- return "{}";
+ enum : VkFlags
+ {
+ allFlags = VkFlags( PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessARM )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator|(
+ PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineColorBlendStateCreateFlags( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator&(
+ PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineColorBlendStateCreateFlags( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags operator^(
+ PipelineColorBlendStateCreateFlagBits bit0, PipelineColorBlendStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineColorBlendStateCreateFlags( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineColorBlendStateCreateFlags
+ operator~( PipelineColorBlendStateCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( PipelineColorBlendStateCreateFlags( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineColorBlendStateCreateFlags value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & PipelineColorBlendStateCreateFlagBits::eRasterizationOrderAttachmentAccessARM )
+ result += "RasterizationOrderAttachmentAccessARM | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
using PipelineCreateFlags = Flags<PipelineCreateFlagBits>;
@@ -9471,6 +13401,10 @@ namespace VULKAN_HPP_NAMESPACE
VkFlags( PipelineCreateFlagBits::eDisableOptimization ) | VkFlags( PipelineCreateFlagBits::eAllowDerivatives ) |
VkFlags( PipelineCreateFlagBits::eDerivative ) | VkFlags( PipelineCreateFlagBits::eViewIndexFromDeviceIndex ) |
VkFlags( PipelineCreateFlagBits::eDispatchBase ) |
+ VkFlags( PipelineCreateFlagBits::eFailOnPipelineCompileRequired ) |
+ VkFlags( PipelineCreateFlagBits::eEarlyReturnOnFailure ) |
+ VkFlags( PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR ) |
+ VkFlags( PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT ) |
VkFlags( PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR ) |
VkFlags( PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR ) |
VkFlags( PipelineCreateFlagBits::eRayTracingNoNullMissShadersKHR ) |
@@ -9481,26 +13415,24 @@ namespace VULKAN_HPP_NAMESPACE
VkFlags( PipelineCreateFlagBits::eDeferCompileNV ) | VkFlags( PipelineCreateFlagBits::eCaptureStatisticsKHR ) |
VkFlags( PipelineCreateFlagBits::eCaptureInternalRepresentationsKHR ) |
VkFlags( PipelineCreateFlagBits::eIndirectBindableNV ) | VkFlags( PipelineCreateFlagBits::eLibraryKHR ) |
- VkFlags( PipelineCreateFlagBits::eFailOnPipelineCompileRequiredEXT ) |
- VkFlags( PipelineCreateFlagBits::eEarlyReturnOnFailureEXT ) |
VkFlags( PipelineCreateFlagBits::eRayTracingAllowMotionNV )
};
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags
- operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags operator&(PipelineCreateFlagBits bit0,
- PipelineCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags
+ operator&( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreateFlags
- operator^( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( PipelineCreateFlagBits bit0, PipelineCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineCreateFlags( bit0 ) ^ bit1;
}
@@ -9527,6 +13459,14 @@ namespace VULKAN_HPP_NAMESPACE
result += "ViewIndexFromDeviceIndex | ";
if ( value & PipelineCreateFlagBits::eDispatchBase )
result += "DispatchBase | ";
+ if ( value & PipelineCreateFlagBits::eFailOnPipelineCompileRequired )
+ result += "FailOnPipelineCompileRequired | ";
+ if ( value & PipelineCreateFlagBits::eEarlyReturnOnFailure )
+ result += "EarlyReturnOnFailure | ";
+ if ( value & PipelineCreateFlagBits::eRenderingFragmentShadingRateAttachmentKHR )
+ result += "RenderingFragmentShadingRateAttachmentKHR | ";
+ if ( value & PipelineCreateFlagBits::eRenderingFragmentDensityMapAttachmentEXT )
+ result += "RenderingFragmentDensityMapAttachmentEXT | ";
if ( value & PipelineCreateFlagBits::eRayTracingNoNullAnyHitShadersKHR )
result += "RayTracingNoNullAnyHitShadersKHR | ";
if ( value & PipelineCreateFlagBits::eRayTracingNoNullClosestHitShadersKHR )
@@ -9551,10 +13491,6 @@ namespace VULKAN_HPP_NAMESPACE
result += "IndirectBindableNV | ";
if ( value & PipelineCreateFlagBits::eLibraryKHR )
result += "LibraryKHR | ";
- if ( value & PipelineCreateFlagBits::eFailOnPipelineCompileRequiredEXT )
- result += "FailOnPipelineCompileRequiredEXT | ";
- if ( value & PipelineCreateFlagBits::eEarlyReturnOnFailureEXT )
- result += "EarlyReturnOnFailureEXT | ";
if ( value & PipelineCreateFlagBits::eRayTracingAllowMotionNV )
result += "RayTracingAllowMotionNV | ";
@@ -9563,9 +13499,52 @@ namespace VULKAN_HPP_NAMESPACE
using PipelineDepthStencilStateCreateFlags = Flags<PipelineDepthStencilStateCreateFlagBits>;
- VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlags )
+ template <>
+ struct FlagTraits<PipelineDepthStencilStateCreateFlagBits>
{
- return "{}";
+ enum : VkFlags
+ {
+ allFlags = VkFlags( PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessARM ) |
+ VkFlags( PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessARM )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator|(
+ PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineDepthStencilStateCreateFlags( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator&(
+ PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineDepthStencilStateCreateFlags( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags operator^(
+ PipelineDepthStencilStateCreateFlagBits bit0, PipelineDepthStencilStateCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineDepthStencilStateCreateFlags( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineDepthStencilStateCreateFlags
+ operator~( PipelineDepthStencilStateCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( PipelineDepthStencilStateCreateFlags( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineDepthStencilStateCreateFlags value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentDepthAccessARM )
+ result += "RasterizationOrderAttachmentDepthAccessARM | ";
+ if ( value & PipelineDepthStencilStateCreateFlagBits::eRasterizationOrderAttachmentStencilAccessARM )
+ result += "RasterizationOrderAttachmentStencilAccessARM | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
using PipelineDynamicStateCreateFlags = Flags<PipelineDynamicStateCreateFlagBits>;
@@ -9610,31 +13589,31 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags = VkFlags( PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSizeEXT ) |
- VkFlags( PipelineShaderStageCreateFlagBits::eRequireFullSubgroupsEXT )
+ allFlags = VkFlags( PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize ) |
+ VkFlags( PipelineShaderStageCreateFlagBits::eRequireFullSubgroups )
};
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags
- operator|( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineShaderStageCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags
- operator&(PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineShaderStageCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags
- operator^( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( PipelineShaderStageCreateFlagBits bit0, PipelineShaderStageCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PipelineShaderStageCreateFlags( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateFlags
- operator~( PipelineShaderStageCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ operator~( PipelineShaderStageCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT
{
return ~( PipelineShaderStageCreateFlags( bits ) );
}
@@ -9645,10 +13624,10 @@ namespace VULKAN_HPP_NAMESPACE
return "{}";
std::string result;
- if ( value & PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSizeEXT )
- result += "AllowVaryingSubgroupSizeEXT | ";
- if ( value & PipelineShaderStageCreateFlagBits::eRequireFullSubgroupsEXT )
- result += "RequireFullSubgroupsEXT | ";
+ if ( value & PipelineShaderStageCreateFlagBits::eAllowVaryingSubgroupSize )
+ result += "AllowVaryingSubgroupSize | ";
+ if ( value & PipelineShaderStageCreateFlagBits::eRequireFullSubgroups )
+ result += "RequireFullSubgroups | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
@@ -9699,8 +13678,8 @@ namespace VULKAN_HPP_NAMESPACE
return ShaderStageFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ShaderStageFlags operator&(ShaderStageFlagBits bit0,
- ShaderStageFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ShaderStageFlags operator&( ShaderStageFlagBits bit0,
+ ShaderStageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ShaderStageFlags( bit0 ) & bit1;
}
@@ -9774,8 +13753,8 @@ namespace VULKAN_HPP_NAMESPACE
return SamplerCreateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SamplerCreateFlags operator&(SamplerCreateFlagBits bit0,
- SamplerCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SamplerCreateFlags operator&( SamplerCreateFlagBits bit0,
+ SamplerCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SamplerCreateFlags( bit0 ) & bit1;
}
@@ -9819,19 +13798,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags
- operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorPoolCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags
- operator&(DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorPoolCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorPoolCreateFlags
- operator^( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DescriptorPoolCreateFlagBits bit0, DescriptorPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorPoolCreateFlags( bit0 ) ^ bit1;
}
@@ -9879,25 +13858,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags
- operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorSetLayoutCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags
- operator&(DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorSetLayoutCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags
- operator^( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DescriptorSetLayoutCreateFlagBits bit0, DescriptorSetLayoutCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorSetLayoutCreateFlags( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateFlags
- operator~( DescriptorSetLayoutCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ operator~( DescriptorSetLayoutCreateFlagBits bits ) VULKAN_HPP_NOEXCEPT
{
return ~( DescriptorSetLayoutCreateFlags( bits ) );
}
@@ -9925,26 +13904,26 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags = VkFlags( AccessFlagBits::eIndirectCommandRead ) | VkFlags( AccessFlagBits::eIndexRead ) |
- VkFlags( AccessFlagBits::eVertexAttributeRead ) | VkFlags( AccessFlagBits::eUniformRead ) |
- VkFlags( AccessFlagBits::eInputAttachmentRead ) | VkFlags( AccessFlagBits::eShaderRead ) |
- VkFlags( AccessFlagBits::eShaderWrite ) | VkFlags( AccessFlagBits::eColorAttachmentRead ) |
- VkFlags( AccessFlagBits::eColorAttachmentWrite ) |
- VkFlags( AccessFlagBits::eDepthStencilAttachmentRead ) |
- VkFlags( AccessFlagBits::eDepthStencilAttachmentWrite ) | VkFlags( AccessFlagBits::eTransferRead ) |
- VkFlags( AccessFlagBits::eTransferWrite ) | VkFlags( AccessFlagBits::eHostRead ) |
- VkFlags( AccessFlagBits::eHostWrite ) | VkFlags( AccessFlagBits::eMemoryRead ) |
- VkFlags( AccessFlagBits::eMemoryWrite ) | VkFlags( AccessFlagBits::eTransformFeedbackWriteEXT ) |
- VkFlags( AccessFlagBits::eTransformFeedbackCounterReadEXT ) |
- VkFlags( AccessFlagBits::eTransformFeedbackCounterWriteEXT ) |
- VkFlags( AccessFlagBits::eConditionalRenderingReadEXT ) |
- VkFlags( AccessFlagBits::eColorAttachmentReadNoncoherentEXT ) |
- VkFlags( AccessFlagBits::eAccelerationStructureReadKHR ) |
- VkFlags( AccessFlagBits::eAccelerationStructureWriteKHR ) |
- VkFlags( AccessFlagBits::eFragmentDensityMapReadEXT ) |
- VkFlags( AccessFlagBits::eFragmentShadingRateAttachmentReadKHR ) |
- VkFlags( AccessFlagBits::eCommandPreprocessReadNV ) |
- VkFlags( AccessFlagBits::eCommandPreprocessWriteNV ) | VkFlags( AccessFlagBits::eNoneKHR )
+ allFlags =
+ VkFlags( AccessFlagBits::eIndirectCommandRead ) | VkFlags( AccessFlagBits::eIndexRead ) |
+ VkFlags( AccessFlagBits::eVertexAttributeRead ) | VkFlags( AccessFlagBits::eUniformRead ) |
+ VkFlags( AccessFlagBits::eInputAttachmentRead ) | VkFlags( AccessFlagBits::eShaderRead ) |
+ VkFlags( AccessFlagBits::eShaderWrite ) | VkFlags( AccessFlagBits::eColorAttachmentRead ) |
+ VkFlags( AccessFlagBits::eColorAttachmentWrite ) | VkFlags( AccessFlagBits::eDepthStencilAttachmentRead ) |
+ VkFlags( AccessFlagBits::eDepthStencilAttachmentWrite ) | VkFlags( AccessFlagBits::eTransferRead ) |
+ VkFlags( AccessFlagBits::eTransferWrite ) | VkFlags( AccessFlagBits::eHostRead ) |
+ VkFlags( AccessFlagBits::eHostWrite ) | VkFlags( AccessFlagBits::eMemoryRead ) |
+ VkFlags( AccessFlagBits::eMemoryWrite ) | VkFlags( AccessFlagBits::eNone ) |
+ VkFlags( AccessFlagBits::eTransformFeedbackWriteEXT ) |
+ VkFlags( AccessFlagBits::eTransformFeedbackCounterReadEXT ) |
+ VkFlags( AccessFlagBits::eTransformFeedbackCounterWriteEXT ) |
+ VkFlags( AccessFlagBits::eConditionalRenderingReadEXT ) |
+ VkFlags( AccessFlagBits::eColorAttachmentReadNoncoherentEXT ) |
+ VkFlags( AccessFlagBits::eAccelerationStructureReadKHR ) |
+ VkFlags( AccessFlagBits::eAccelerationStructureWriteKHR ) |
+ VkFlags( AccessFlagBits::eFragmentDensityMapReadEXT ) |
+ VkFlags( AccessFlagBits::eFragmentShadingRateAttachmentReadKHR ) |
+ VkFlags( AccessFlagBits::eCommandPreprocessReadNV ) | VkFlags( AccessFlagBits::eCommandPreprocessWriteNV )
};
};
@@ -9954,8 +13933,8 @@ namespace VULKAN_HPP_NAMESPACE
return AccessFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags operator&(AccessFlagBits bit0,
- AccessFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags operator&( AccessFlagBits bit0,
+ AccessFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return AccessFlags( bit0 ) & bit1;
}
@@ -10049,19 +14028,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags
- operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return AttachmentDescriptionFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags
- operator&(AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return AttachmentDescriptionFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AttachmentDescriptionFlags
- operator^( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( AttachmentDescriptionFlagBits bit0, AttachmentDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return AttachmentDescriptionFlags( bit0 ) ^ bit1;
}
@@ -10102,8 +14081,8 @@ namespace VULKAN_HPP_NAMESPACE
return DependencyFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DependencyFlags operator&(DependencyFlagBits bit0,
- DependencyFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DependencyFlags operator&( DependencyFlagBits bit0,
+ DependencyFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DependencyFlags( bit0 ) & bit1;
}
@@ -10147,19 +14126,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags
- operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return FramebufferCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags
- operator&(FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return FramebufferCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FramebufferCreateFlags
- operator^( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( FramebufferCreateFlagBits bit0, FramebufferCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return FramebufferCreateFlags( bit0 ) ^ bit1;
}
@@ -10194,19 +14173,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags
- operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return RenderPassCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags
- operator&(RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return RenderPassCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderPassCreateFlags
- operator^( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( RenderPassCreateFlagBits bit0, RenderPassCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return RenderPassCreateFlags( bit0 ) ^ bit1;
}
@@ -10239,24 +14218,27 @@ namespace VULKAN_HPP_NAMESPACE
allFlags = VkFlags( SubpassDescriptionFlagBits::ePerViewAttributesNVX ) |
VkFlags( SubpassDescriptionFlagBits::ePerViewPositionXOnlyNVX ) |
VkFlags( SubpassDescriptionFlagBits::eFragmentRegionQCOM ) |
- VkFlags( SubpassDescriptionFlagBits::eShaderResolveQCOM )
+ VkFlags( SubpassDescriptionFlagBits::eShaderResolveQCOM ) |
+ VkFlags( SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessARM ) |
+ VkFlags( SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessARM ) |
+ VkFlags( SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessARM )
};
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags
- operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SubpassDescriptionFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags
- operator&(SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SubpassDescriptionFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubpassDescriptionFlags
- operator^( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SubpassDescriptionFlagBits bit0, SubpassDescriptionFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SubpassDescriptionFlags( bit0 ) ^ bit1;
}
@@ -10281,6 +14263,12 @@ namespace VULKAN_HPP_NAMESPACE
result += "FragmentRegionQCOM | ";
if ( value & SubpassDescriptionFlagBits::eShaderResolveQCOM )
result += "ShaderResolveQCOM | ";
+ if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentColorAccessARM )
+ result += "RasterizationOrderAttachmentColorAccessARM | ";
+ if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentDepthAccessARM )
+ result += "RasterizationOrderAttachmentDepthAccessARM | ";
+ if ( value & SubpassDescriptionFlagBits::eRasterizationOrderAttachmentStencilAccessARM )
+ result += "RasterizationOrderAttachmentStencilAccessARM | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
@@ -10299,19 +14287,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags
- operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandPoolCreateFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags
- operator&(CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandPoolCreateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolCreateFlags
- operator^( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( CommandPoolCreateFlagBits bit0, CommandPoolCreateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandPoolCreateFlags( bit0 ) ^ bit1;
}
@@ -10350,19 +14338,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags
- operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandPoolResetFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags
- operator&(CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandPoolResetFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandPoolResetFlags
- operator^( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( CommandPoolResetFlagBits bit0, CommandPoolResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandPoolResetFlags( bit0 ) ^ bit1;
}
@@ -10397,19 +14385,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags
- operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandBufferResetFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags
- operator&(CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandBufferResetFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferResetFlags
- operator^( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( CommandBufferResetFlagBits bit0, CommandBufferResetFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandBufferResetFlags( bit0 ) ^ bit1;
}
@@ -10446,19 +14434,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags
- operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandBufferUsageFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags
- operator&(CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandBufferUsageFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CommandBufferUsageFlags
- operator^( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( CommandBufferUsageFlagBits bit0, CommandBufferUsageFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return CommandBufferUsageFlags( bit0 ) ^ bit1;
}
@@ -10502,8 +14490,8 @@ namespace VULKAN_HPP_NAMESPACE
return QueryControlFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryControlFlags operator&(QueryControlFlagBits bit0,
- QueryControlFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR QueryControlFlags operator&( QueryControlFlagBits bit0,
+ QueryControlFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return QueryControlFlags( bit0 ) & bit1;
}
@@ -10549,8 +14537,8 @@ namespace VULKAN_HPP_NAMESPACE
return StencilFaceFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR StencilFaceFlags operator&(StencilFaceFlagBits bit0,
- StencilFaceFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR StencilFaceFlags operator&( StencilFaceFlagBits bit0,
+ StencilFaceFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return StencilFaceFlags( bit0 ) & bit1;
}
@@ -10598,19 +14586,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags
- operator|( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SubgroupFeatureFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags operator&(SubgroupFeatureFlagBits bit0,
- SubgroupFeatureFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags
+ operator&( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SubgroupFeatureFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubgroupFeatureFlags
- operator^( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SubgroupFeatureFlagBits bit0, SubgroupFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SubgroupFeatureFlags( bit0 ) ^ bit1;
}
@@ -10662,19 +14650,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags
- operator|( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PeerMemoryFeatureFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags
- operator&(PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PeerMemoryFeatureFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PeerMemoryFeatureFlags
- operator^( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( PeerMemoryFeatureFlagBits bit0, PeerMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return PeerMemoryFeatureFlags( bit0 ) ^ bit1;
}
@@ -10718,19 +14706,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags
- operator|( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryAllocateFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags operator&(MemoryAllocateFlagBits bit0,
- MemoryAllocateFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags
+ operator&( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryAllocateFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR MemoryAllocateFlags
- operator^( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( MemoryAllocateFlagBits bit0, MemoryAllocateFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return MemoryAllocateFlags( bit0 ) ^ bit1;
}
@@ -10805,25 +14793,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags
- operator|( ExternalMemoryHandleTypeFlagBits bit0, ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalMemoryHandleTypeFlagBits bit0, ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryHandleTypeFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags
- operator&(ExternalMemoryHandleTypeFlagBits bit0, ExternalMemoryHandleTypeFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalMemoryHandleTypeFlagBits bit0, ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryHandleTypeFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags
- operator^( ExternalMemoryHandleTypeFlagBits bit0, ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalMemoryHandleTypeFlagBits bit0, ExternalMemoryHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryHandleTypeFlags( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlags
- operator~( ExternalMemoryHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ operator~( ExternalMemoryHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT
{
return ~( ExternalMemoryHandleTypeFlags( bits ) );
}
@@ -10884,19 +14872,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags
- operator|( ExternalMemoryFeatureFlagBits bit0, ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalMemoryFeatureFlagBits bit0, ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryFeatureFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags
- operator&(ExternalMemoryFeatureFlagBits bit0, ExternalMemoryFeatureFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalMemoryFeatureFlagBits bit0, ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryFeatureFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlags
- operator^( ExternalMemoryFeatureFlagBits bit0, ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalMemoryFeatureFlagBits bit0, ExternalMemoryFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryFeatureFlags( bit0 ) ^ bit1;
}
@@ -10940,19 +14928,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags
- operator|( ExternalFenceHandleTypeFlagBits bit0, ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalFenceHandleTypeFlagBits bit0, ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalFenceHandleTypeFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags
- operator&(ExternalFenceHandleTypeFlagBits bit0, ExternalFenceHandleTypeFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalFenceHandleTypeFlagBits bit0, ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalFenceHandleTypeFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceHandleTypeFlags
- operator^( ExternalFenceHandleTypeFlagBits bit0, ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalFenceHandleTypeFlagBits bit0, ExternalFenceHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalFenceHandleTypeFlags( bit0 ) ^ bit1;
}
@@ -10996,19 +14984,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags
- operator|( ExternalFenceFeatureFlagBits bit0, ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalFenceFeatureFlagBits bit0, ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalFenceFeatureFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags
- operator&(ExternalFenceFeatureFlagBits bit0, ExternalFenceFeatureFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalFenceFeatureFlagBits bit0, ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalFenceFeatureFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalFenceFeatureFlags
- operator^( ExternalFenceFeatureFlagBits bit0, ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalFenceFeatureFlagBits bit0, ExternalFenceFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalFenceFeatureFlags( bit0 ) ^ bit1;
}
@@ -11052,8 +15040,8 @@ namespace VULKAN_HPP_NAMESPACE
return FenceImportFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceImportFlags operator&(FenceImportFlagBits bit0,
- FenceImportFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FenceImportFlags operator&( FenceImportFlagBits bit0,
+ FenceImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return FenceImportFlags( bit0 ) & bit1;
}
@@ -11095,19 +15083,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags
- operator|( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SemaphoreImportFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags operator&(SemaphoreImportFlagBits bit0,
- SemaphoreImportFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags
+ operator&( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SemaphoreImportFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreImportFlags
- operator^( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SemaphoreImportFlagBits bit0, SemaphoreImportFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SemaphoreImportFlags( bit0 ) ^ bit1;
}
@@ -11151,25 +15139,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags
- operator|( ExternalSemaphoreHandleTypeFlagBits bit0, ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalSemaphoreHandleTypeFlagBits bit0, ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalSemaphoreHandleTypeFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags
- operator&(ExternalSemaphoreHandleTypeFlagBits bit0, ExternalSemaphoreHandleTypeFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalSemaphoreHandleTypeFlagBits bit0, ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalSemaphoreHandleTypeFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags
- operator^( ExternalSemaphoreHandleTypeFlagBits bit0, ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalSemaphoreHandleTypeFlagBits bit0, ExternalSemaphoreHandleTypeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalSemaphoreHandleTypeFlags( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreHandleTypeFlags
- operator~( ExternalSemaphoreHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ operator~( ExternalSemaphoreHandleTypeFlagBits bits ) VULKAN_HPP_NOEXCEPT
{
return ~( ExternalSemaphoreHandleTypeFlags( bits ) );
}
@@ -11213,25 +15201,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags
- operator|( ExternalSemaphoreFeatureFlagBits bit0, ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalSemaphoreFeatureFlagBits bit0, ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalSemaphoreFeatureFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags
- operator&(ExternalSemaphoreFeatureFlagBits bit0, ExternalSemaphoreFeatureFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalSemaphoreFeatureFlagBits bit0, ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalSemaphoreFeatureFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags
- operator^( ExternalSemaphoreFeatureFlagBits bit0, ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalSemaphoreFeatureFlagBits bit0, ExternalSemaphoreFeatureFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalSemaphoreFeatureFlags( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalSemaphoreFeatureFlags
- operator~( ExternalSemaphoreFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ operator~( ExternalSemaphoreFeatureFlagBits bits ) VULKAN_HPP_NOEXCEPT
{
return ~( ExternalSemaphoreFeatureFlags( bits ) );
}
@@ -11269,19 +15257,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags
- operator|( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorBindingFlags( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags
- operator&(DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorBindingFlags( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DescriptorBindingFlags
- operator^( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DescriptorBindingFlagBits bit0, DescriptorBindingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return DescriptorBindingFlags( bit0 ) ^ bit1;
}
@@ -11331,8 +15319,8 @@ namespace VULKAN_HPP_NAMESPACE
return ResolveModeFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ResolveModeFlags operator&(ResolveModeFlagBits bit0,
- ResolveModeFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ResolveModeFlags operator&( ResolveModeFlagBits bit0,
+ ResolveModeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return ResolveModeFlags( bit0 ) & bit1;
}
@@ -11385,8 +15373,8 @@ namespace VULKAN_HPP_NAMESPACE
return SemaphoreWaitFlags( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreWaitFlags operator&(SemaphoreWaitFlagBits bit0,
- SemaphoreWaitFlagBits bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SemaphoreWaitFlags operator&( SemaphoreWaitFlagBits bit0,
+ SemaphoreWaitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
{
return SemaphoreWaitFlags( bit0 ) & bit1;
}
@@ -11416,6 +15404,689 @@ namespace VULKAN_HPP_NAMESPACE
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
+ //=== VK_VERSION_1_3 ===
+
+ using PipelineCreationFeedbackFlags = Flags<PipelineCreationFeedbackFlagBits>;
+
+ template <>
+ struct FlagTraits<PipelineCreationFeedbackFlagBits>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( PipelineCreationFeedbackFlagBits::eValid ) |
+ VkFlags( PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit ) |
+ VkFlags( PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags
+ operator|( PipelineCreationFeedbackFlagBits bit0, PipelineCreationFeedbackFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineCreationFeedbackFlags( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags
+ operator&( PipelineCreationFeedbackFlagBits bit0, PipelineCreationFeedbackFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineCreationFeedbackFlags( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags
+ operator^( PipelineCreationFeedbackFlagBits bit0, PipelineCreationFeedbackFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineCreationFeedbackFlags( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlags
+ operator~( PipelineCreationFeedbackFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( PipelineCreationFeedbackFlags( bits ) );
+ }
+
+ using PipelineCreationFeedbackFlagsEXT = PipelineCreationFeedbackFlags;
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlags value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & PipelineCreationFeedbackFlagBits::eValid )
+ result += "Valid | ";
+ if ( value & PipelineCreationFeedbackFlagBits::eApplicationPipelineCacheHit )
+ result += "ApplicationPipelineCacheHit | ";
+ if ( value & PipelineCreationFeedbackFlagBits::eBasePipelineAcceleration )
+ result += "BasePipelineAcceleration | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using ToolPurposeFlags = Flags<ToolPurposeFlagBits>;
+
+ template <>
+ struct FlagTraits<ToolPurposeFlagBits>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( ToolPurposeFlagBits::eValidation ) | VkFlags( ToolPurposeFlagBits::eProfiling ) |
+ VkFlags( ToolPurposeFlagBits::eTracing ) | VkFlags( ToolPurposeFlagBits::eAdditionalFeatures ) |
+ VkFlags( ToolPurposeFlagBits::eModifyingFeatures ) |
+ VkFlags( ToolPurposeFlagBits::eDebugReportingEXT ) | VkFlags( ToolPurposeFlagBits::eDebugMarkersEXT )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator|( ToolPurposeFlagBits bit0,
+ ToolPurposeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return ToolPurposeFlags( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator&( ToolPurposeFlagBits bit0,
+ ToolPurposeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return ToolPurposeFlags( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator^( ToolPurposeFlagBits bit0,
+ ToolPurposeFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return ToolPurposeFlags( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlags operator~( ToolPurposeFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( ToolPurposeFlags( bits ) );
+ }
+
+ using ToolPurposeFlagsEXT = ToolPurposeFlags;
+
+ VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlags value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & ToolPurposeFlagBits::eValidation )
+ result += "Validation | ";
+ if ( value & ToolPurposeFlagBits::eProfiling )
+ result += "Profiling | ";
+ if ( value & ToolPurposeFlagBits::eTracing )
+ result += "Tracing | ";
+ if ( value & ToolPurposeFlagBits::eAdditionalFeatures )
+ result += "AdditionalFeatures | ";
+ if ( value & ToolPurposeFlagBits::eModifyingFeatures )
+ result += "ModifyingFeatures | ";
+ if ( value & ToolPurposeFlagBits::eDebugReportingEXT )
+ result += "DebugReportingEXT | ";
+ if ( value & ToolPurposeFlagBits::eDebugMarkersEXT )
+ result += "DebugMarkersEXT | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using PrivateDataSlotCreateFlags = Flags<PrivateDataSlotCreateFlagBits>;
+
+ using PrivateDataSlotCreateFlagsEXT = PrivateDataSlotCreateFlags;
+
+ VULKAN_HPP_INLINE std::string to_string( PrivateDataSlotCreateFlags )
+ {
+ return "{}";
+ }
+
+ using PipelineStageFlags2 = Flags<PipelineStageFlagBits2>;
+
+ template <>
+ struct FlagTraits<PipelineStageFlagBits2>
+ {
+ enum : VkFlags64
+ {
+ allFlags =
+ VkFlags64( PipelineStageFlagBits2::eNone ) | VkFlags64( PipelineStageFlagBits2::eTopOfPipe ) |
+ VkFlags64( PipelineStageFlagBits2::eDrawIndirect ) | VkFlags64( PipelineStageFlagBits2::eVertexInput ) |
+ VkFlags64( PipelineStageFlagBits2::eVertexShader ) |
+ VkFlags64( PipelineStageFlagBits2::eTessellationControlShader ) |
+ VkFlags64( PipelineStageFlagBits2::eTessellationEvaluationShader ) |
+ VkFlags64( PipelineStageFlagBits2::eGeometryShader ) | VkFlags64( PipelineStageFlagBits2::eFragmentShader ) |
+ VkFlags64( PipelineStageFlagBits2::eEarlyFragmentTests ) |
+ VkFlags64( PipelineStageFlagBits2::eLateFragmentTests ) |
+ VkFlags64( PipelineStageFlagBits2::eColorAttachmentOutput ) |
+ VkFlags64( PipelineStageFlagBits2::eComputeShader ) | VkFlags64( PipelineStageFlagBits2::eAllTransfer ) |
+ VkFlags64( PipelineStageFlagBits2::eBottomOfPipe ) | VkFlags64( PipelineStageFlagBits2::eHost ) |
+ VkFlags64( PipelineStageFlagBits2::eAllGraphics ) | VkFlags64( PipelineStageFlagBits2::eAllCommands ) |
+ VkFlags64( PipelineStageFlagBits2::eCopy ) | VkFlags64( PipelineStageFlagBits2::eResolve ) |
+ VkFlags64( PipelineStageFlagBits2::eBlit ) | VkFlags64( PipelineStageFlagBits2::eClear ) |
+ VkFlags64( PipelineStageFlagBits2::eIndexInput ) | VkFlags64( PipelineStageFlagBits2::eVertexAttributeInput ) |
+ VkFlags64( PipelineStageFlagBits2::ePreRasterizationShaders )
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ | VkFlags64( PipelineStageFlagBits2::eVideoDecodeKHR ) | VkFlags64( PipelineStageFlagBits2::eVideoEncodeKHR )
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ | VkFlags64( PipelineStageFlagBits2::eTransformFeedbackEXT ) |
+ VkFlags64( PipelineStageFlagBits2::eConditionalRenderingEXT ) |
+ VkFlags64( PipelineStageFlagBits2::eCommandPreprocessNV ) |
+ VkFlags64( PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR ) |
+ VkFlags64( PipelineStageFlagBits2::eAccelerationStructureBuildKHR ) |
+ VkFlags64( PipelineStageFlagBits2::eRayTracingShaderKHR ) |
+ VkFlags64( PipelineStageFlagBits2::eFragmentDensityProcessEXT ) |
+ VkFlags64( PipelineStageFlagBits2::eTaskShaderNV ) | VkFlags64( PipelineStageFlagBits2::eMeshShaderNV ) |
+ VkFlags64( PipelineStageFlagBits2::eSubpassShadingHUAWEI ) |
+ VkFlags64( PipelineStageFlagBits2::eInvocationMaskHUAWEI )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2
+ operator|( PipelineStageFlagBits2 bit0, PipelineStageFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineStageFlags2( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2
+ operator&( PipelineStageFlagBits2 bit0, PipelineStageFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineStageFlags2( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2
+ operator^( PipelineStageFlagBits2 bit0, PipelineStageFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return PipelineStageFlags2( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2 operator~( PipelineStageFlagBits2 bits )
+ VULKAN_HPP_NOEXCEPT
+ {
+ return ~( PipelineStageFlags2( bits ) );
+ }
+
+ using PipelineStageFlags2KHR = PipelineStageFlags2;
+
+ VULKAN_HPP_INLINE std::string to_string( PipelineStageFlags2 value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & PipelineStageFlagBits2::eTopOfPipe )
+ result += "TopOfPipe | ";
+ if ( value & PipelineStageFlagBits2::eDrawIndirect )
+ result += "DrawIndirect | ";
+ if ( value & PipelineStageFlagBits2::eVertexInput )
+ result += "VertexInput | ";
+ if ( value & PipelineStageFlagBits2::eVertexShader )
+ result += "VertexShader | ";
+ if ( value & PipelineStageFlagBits2::eTessellationControlShader )
+ result += "TessellationControlShader | ";
+ if ( value & PipelineStageFlagBits2::eTessellationEvaluationShader )
+ result += "TessellationEvaluationShader | ";
+ if ( value & PipelineStageFlagBits2::eGeometryShader )
+ result += "GeometryShader | ";
+ if ( value & PipelineStageFlagBits2::eFragmentShader )
+ result += "FragmentShader | ";
+ if ( value & PipelineStageFlagBits2::eEarlyFragmentTests )
+ result += "EarlyFragmentTests | ";
+ if ( value & PipelineStageFlagBits2::eLateFragmentTests )
+ result += "LateFragmentTests | ";
+ if ( value & PipelineStageFlagBits2::eColorAttachmentOutput )
+ result += "ColorAttachmentOutput | ";
+ if ( value & PipelineStageFlagBits2::eComputeShader )
+ result += "ComputeShader | ";
+ if ( value & PipelineStageFlagBits2::eAllTransfer )
+ result += "AllTransfer | ";
+ if ( value & PipelineStageFlagBits2::eBottomOfPipe )
+ result += "BottomOfPipe | ";
+ if ( value & PipelineStageFlagBits2::eHost )
+ result += "Host | ";
+ if ( value & PipelineStageFlagBits2::eAllGraphics )
+ result += "AllGraphics | ";
+ if ( value & PipelineStageFlagBits2::eAllCommands )
+ result += "AllCommands | ";
+ if ( value & PipelineStageFlagBits2::eCopy )
+ result += "Copy | ";
+ if ( value & PipelineStageFlagBits2::eResolve )
+ result += "Resolve | ";
+ if ( value & PipelineStageFlagBits2::eBlit )
+ result += "Blit | ";
+ if ( value & PipelineStageFlagBits2::eClear )
+ result += "Clear | ";
+ if ( value & PipelineStageFlagBits2::eIndexInput )
+ result += "IndexInput | ";
+ if ( value & PipelineStageFlagBits2::eVertexAttributeInput )
+ result += "VertexAttributeInput | ";
+ if ( value & PipelineStageFlagBits2::ePreRasterizationShaders )
+ result += "PreRasterizationShaders | ";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ if ( value & PipelineStageFlagBits2::eVideoDecodeKHR )
+ result += "VideoDecodeKHR | ";
+ if ( value & PipelineStageFlagBits2::eVideoEncodeKHR )
+ result += "VideoEncodeKHR | ";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ if ( value & PipelineStageFlagBits2::eTransformFeedbackEXT )
+ result += "TransformFeedbackEXT | ";
+ if ( value & PipelineStageFlagBits2::eConditionalRenderingEXT )
+ result += "ConditionalRenderingEXT | ";
+ if ( value & PipelineStageFlagBits2::eCommandPreprocessNV )
+ result += "CommandPreprocessNV | ";
+ if ( value & PipelineStageFlagBits2::eFragmentShadingRateAttachmentKHR )
+ result += "FragmentShadingRateAttachmentKHR | ";
+ if ( value & PipelineStageFlagBits2::eAccelerationStructureBuildKHR )
+ result += "AccelerationStructureBuildKHR | ";
+ if ( value & PipelineStageFlagBits2::eRayTracingShaderKHR )
+ result += "RayTracingShaderKHR | ";
+ if ( value & PipelineStageFlagBits2::eFragmentDensityProcessEXT )
+ result += "FragmentDensityProcessEXT | ";
+ if ( value & PipelineStageFlagBits2::eTaskShaderNV )
+ result += "TaskShaderNV | ";
+ if ( value & PipelineStageFlagBits2::eMeshShaderNV )
+ result += "MeshShaderNV | ";
+ if ( value & PipelineStageFlagBits2::eSubpassShadingHUAWEI )
+ result += "SubpassShadingHUAWEI | ";
+ if ( value & PipelineStageFlagBits2::eInvocationMaskHUAWEI )
+ result += "InvocationMaskHUAWEI | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using AccessFlags2 = Flags<AccessFlagBits2>;
+
+ template <>
+ struct FlagTraits<AccessFlagBits2>
+ {
+ enum : VkFlags64
+ {
+ allFlags =
+ VkFlags64( AccessFlagBits2::eNone ) | VkFlags64( AccessFlagBits2::eIndirectCommandRead ) |
+ VkFlags64( AccessFlagBits2::eIndexRead ) | VkFlags64( AccessFlagBits2::eVertexAttributeRead ) |
+ VkFlags64( AccessFlagBits2::eUniformRead ) | VkFlags64( AccessFlagBits2::eInputAttachmentRead ) |
+ VkFlags64( AccessFlagBits2::eShaderRead ) | VkFlags64( AccessFlagBits2::eShaderWrite ) |
+ VkFlags64( AccessFlagBits2::eColorAttachmentRead ) | VkFlags64( AccessFlagBits2::eColorAttachmentWrite ) |
+ VkFlags64( AccessFlagBits2::eDepthStencilAttachmentRead ) |
+ VkFlags64( AccessFlagBits2::eDepthStencilAttachmentWrite ) | VkFlags64( AccessFlagBits2::eTransferRead ) |
+ VkFlags64( AccessFlagBits2::eTransferWrite ) | VkFlags64( AccessFlagBits2::eHostRead ) |
+ VkFlags64( AccessFlagBits2::eHostWrite ) | VkFlags64( AccessFlagBits2::eMemoryRead ) |
+ VkFlags64( AccessFlagBits2::eMemoryWrite ) | VkFlags64( AccessFlagBits2::eShaderSampledRead ) |
+ VkFlags64( AccessFlagBits2::eShaderStorageRead ) | VkFlags64( AccessFlagBits2::eShaderStorageWrite )
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ | VkFlags64( AccessFlagBits2::eVideoDecodeReadKHR ) | VkFlags64( AccessFlagBits2::eVideoDecodeWriteKHR ) |
+ VkFlags64( AccessFlagBits2::eVideoEncodeReadKHR ) | VkFlags64( AccessFlagBits2::eVideoEncodeWriteKHR )
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ | VkFlags64( AccessFlagBits2::eTransformFeedbackWriteEXT ) |
+ VkFlags64( AccessFlagBits2::eTransformFeedbackCounterReadEXT ) |
+ VkFlags64( AccessFlagBits2::eTransformFeedbackCounterWriteEXT ) |
+ VkFlags64( AccessFlagBits2::eConditionalRenderingReadEXT ) |
+ VkFlags64( AccessFlagBits2::eCommandPreprocessReadNV ) |
+ VkFlags64( AccessFlagBits2::eCommandPreprocessWriteNV ) |
+ VkFlags64( AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR ) |
+ VkFlags64( AccessFlagBits2::eAccelerationStructureReadKHR ) |
+ VkFlags64( AccessFlagBits2::eAccelerationStructureWriteKHR ) |
+ VkFlags64( AccessFlagBits2::eFragmentDensityMapReadEXT ) |
+ VkFlags64( AccessFlagBits2::eColorAttachmentReadNoncoherentEXT ) |
+ VkFlags64( AccessFlagBits2::eInvocationMaskReadHUAWEI )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator|( AccessFlagBits2 bit0,
+ AccessFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return AccessFlags2( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator&( AccessFlagBits2 bit0,
+ AccessFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return AccessFlags2( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator^( AccessFlagBits2 bit0,
+ AccessFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return AccessFlags2( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2 operator~( AccessFlagBits2 bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( AccessFlags2( bits ) );
+ }
+
+ using AccessFlags2KHR = AccessFlags2;
+
+ VULKAN_HPP_INLINE std::string to_string( AccessFlags2 value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & AccessFlagBits2::eIndirectCommandRead )
+ result += "IndirectCommandRead | ";
+ if ( value & AccessFlagBits2::eIndexRead )
+ result += "IndexRead | ";
+ if ( value & AccessFlagBits2::eVertexAttributeRead )
+ result += "VertexAttributeRead | ";
+ if ( value & AccessFlagBits2::eUniformRead )
+ result += "UniformRead | ";
+ if ( value & AccessFlagBits2::eInputAttachmentRead )
+ result += "InputAttachmentRead | ";
+ if ( value & AccessFlagBits2::eShaderRead )
+ result += "ShaderRead | ";
+ if ( value & AccessFlagBits2::eShaderWrite )
+ result += "ShaderWrite | ";
+ if ( value & AccessFlagBits2::eColorAttachmentRead )
+ result += "ColorAttachmentRead | ";
+ if ( value & AccessFlagBits2::eColorAttachmentWrite )
+ result += "ColorAttachmentWrite | ";
+ if ( value & AccessFlagBits2::eDepthStencilAttachmentRead )
+ result += "DepthStencilAttachmentRead | ";
+ if ( value & AccessFlagBits2::eDepthStencilAttachmentWrite )
+ result += "DepthStencilAttachmentWrite | ";
+ if ( value & AccessFlagBits2::eTransferRead )
+ result += "TransferRead | ";
+ if ( value & AccessFlagBits2::eTransferWrite )
+ result += "TransferWrite | ";
+ if ( value & AccessFlagBits2::eHostRead )
+ result += "HostRead | ";
+ if ( value & AccessFlagBits2::eHostWrite )
+ result += "HostWrite | ";
+ if ( value & AccessFlagBits2::eMemoryRead )
+ result += "MemoryRead | ";
+ if ( value & AccessFlagBits2::eMemoryWrite )
+ result += "MemoryWrite | ";
+ if ( value & AccessFlagBits2::eShaderSampledRead )
+ result += "ShaderSampledRead | ";
+ if ( value & AccessFlagBits2::eShaderStorageRead )
+ result += "ShaderStorageRead | ";
+ if ( value & AccessFlagBits2::eShaderStorageWrite )
+ result += "ShaderStorageWrite | ";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ if ( value & AccessFlagBits2::eVideoDecodeReadKHR )
+ result += "VideoDecodeReadKHR | ";
+ if ( value & AccessFlagBits2::eVideoDecodeWriteKHR )
+ result += "VideoDecodeWriteKHR | ";
+ if ( value & AccessFlagBits2::eVideoEncodeReadKHR )
+ result += "VideoEncodeReadKHR | ";
+ if ( value & AccessFlagBits2::eVideoEncodeWriteKHR )
+ result += "VideoEncodeWriteKHR | ";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ if ( value & AccessFlagBits2::eTransformFeedbackWriteEXT )
+ result += "TransformFeedbackWriteEXT | ";
+ if ( value & AccessFlagBits2::eTransformFeedbackCounterReadEXT )
+ result += "TransformFeedbackCounterReadEXT | ";
+ if ( value & AccessFlagBits2::eTransformFeedbackCounterWriteEXT )
+ result += "TransformFeedbackCounterWriteEXT | ";
+ if ( value & AccessFlagBits2::eConditionalRenderingReadEXT )
+ result += "ConditionalRenderingReadEXT | ";
+ if ( value & AccessFlagBits2::eCommandPreprocessReadNV )
+ result += "CommandPreprocessReadNV | ";
+ if ( value & AccessFlagBits2::eCommandPreprocessWriteNV )
+ result += "CommandPreprocessWriteNV | ";
+ if ( value & AccessFlagBits2::eFragmentShadingRateAttachmentReadKHR )
+ result += "FragmentShadingRateAttachmentReadKHR | ";
+ if ( value & AccessFlagBits2::eAccelerationStructureReadKHR )
+ result += "AccelerationStructureReadKHR | ";
+ if ( value & AccessFlagBits2::eAccelerationStructureWriteKHR )
+ result += "AccelerationStructureWriteKHR | ";
+ if ( value & AccessFlagBits2::eFragmentDensityMapReadEXT )
+ result += "FragmentDensityMapReadEXT | ";
+ if ( value & AccessFlagBits2::eColorAttachmentReadNoncoherentEXT )
+ result += "ColorAttachmentReadNoncoherentEXT | ";
+ if ( value & AccessFlagBits2::eInvocationMaskReadHUAWEI )
+ result += "InvocationMaskReadHUAWEI | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using SubmitFlags = Flags<SubmitFlagBits>;
+
+ template <>
+ struct FlagTraits<SubmitFlagBits>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( SubmitFlagBits::eProtected )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator|( SubmitFlagBits bit0,
+ SubmitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return SubmitFlags( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator&( SubmitFlagBits bit0,
+ SubmitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return SubmitFlags( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator^( SubmitFlagBits bit0,
+ SubmitFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return SubmitFlags( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlags operator~( SubmitFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( SubmitFlags( bits ) );
+ }
+
+ using SubmitFlagsKHR = SubmitFlags;
+
+ VULKAN_HPP_INLINE std::string to_string( SubmitFlags value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & SubmitFlagBits::eProtected )
+ result += "Protected | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using RenderingFlags = Flags<RenderingFlagBits>;
+
+ template <>
+ struct FlagTraits<RenderingFlagBits>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( RenderingFlagBits::eContentsSecondaryCommandBuffers ) |
+ VkFlags( RenderingFlagBits::eSuspending ) | VkFlags( RenderingFlagBits::eResuming )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator|( RenderingFlagBits bit0,
+ RenderingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return RenderingFlags( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator&( RenderingFlagBits bit0,
+ RenderingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return RenderingFlags( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator^( RenderingFlagBits bit0,
+ RenderingFlagBits bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return RenderingFlags( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR RenderingFlags operator~( RenderingFlagBits bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( RenderingFlags( bits ) );
+ }
+
+ using RenderingFlagsKHR = RenderingFlags;
+
+ VULKAN_HPP_INLINE std::string to_string( RenderingFlags value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & RenderingFlagBits::eContentsSecondaryCommandBuffers )
+ result += "ContentsSecondaryCommandBuffers | ";
+ if ( value & RenderingFlagBits::eSuspending )
+ result += "Suspending | ";
+ if ( value & RenderingFlagBits::eResuming )
+ result += "Resuming | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using FormatFeatureFlags2 = Flags<FormatFeatureFlagBits2>;
+
+ template <>
+ struct FlagTraits<FormatFeatureFlagBits2>
+ {
+ enum : VkFlags64
+ {
+ allFlags =
+ VkFlags64( FormatFeatureFlagBits2::eSampledImage ) | VkFlags64( FormatFeatureFlagBits2::eStorageImage ) |
+ VkFlags64( FormatFeatureFlagBits2::eStorageImageAtomic ) |
+ VkFlags64( FormatFeatureFlagBits2::eUniformTexelBuffer ) |
+ VkFlags64( FormatFeatureFlagBits2::eStorageTexelBuffer ) |
+ VkFlags64( FormatFeatureFlagBits2::eStorageTexelBufferAtomic ) |
+ VkFlags64( FormatFeatureFlagBits2::eVertexBuffer ) | VkFlags64( FormatFeatureFlagBits2::eColorAttachment ) |
+ VkFlags64( FormatFeatureFlagBits2::eColorAttachmentBlend ) |
+ VkFlags64( FormatFeatureFlagBits2::eDepthStencilAttachment ) | VkFlags64( FormatFeatureFlagBits2::eBlitSrc ) |
+ VkFlags64( FormatFeatureFlagBits2::eBlitDst ) | VkFlags64( FormatFeatureFlagBits2::eSampledImageFilterLinear ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageFilterCubic ) |
+ VkFlags64( FormatFeatureFlagBits2::eTransferSrc ) | VkFlags64( FormatFeatureFlagBits2::eTransferDst ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageFilterMinmax ) |
+ VkFlags64( FormatFeatureFlagBits2::eMidpointChromaSamples ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable ) |
+ VkFlags64( FormatFeatureFlagBits2::eDisjoint ) | VkFlags64( FormatFeatureFlagBits2::eCositedChromaSamples ) |
+ VkFlags64( FormatFeatureFlagBits2::eStorageReadWithoutFormat ) |
+ VkFlags64( FormatFeatureFlagBits2::eStorageWriteWithoutFormat ) |
+ VkFlags64( FormatFeatureFlagBits2::eSampledImageDepthComparison )
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ | VkFlags64( FormatFeatureFlagBits2::eVideoDecodeOutputKHR ) |
+ VkFlags64( FormatFeatureFlagBits2::eVideoDecodeDpbKHR )
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ | VkFlags64( FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR ) |
+ VkFlags64( FormatFeatureFlagBits2::eFragmentDensityMapEXT ) |
+ VkFlags64( FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR )
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ | VkFlags64( FormatFeatureFlagBits2::eVideoEncodeInputKHR ) |
+ VkFlags64( FormatFeatureFlagBits2::eVideoEncodeDpbKHR )
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ | VkFlags64( FormatFeatureFlagBits2::eLinearColorAttachmentNV )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2
+ operator|( FormatFeatureFlagBits2 bit0, FormatFeatureFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return FormatFeatureFlags2( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2
+ operator&( FormatFeatureFlagBits2 bit0, FormatFeatureFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return FormatFeatureFlags2( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2
+ operator^( FormatFeatureFlagBits2 bit0, FormatFeatureFlagBits2 bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return FormatFeatureFlags2( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR FormatFeatureFlags2 operator~( FormatFeatureFlagBits2 bits )
+ VULKAN_HPP_NOEXCEPT
+ {
+ return ~( FormatFeatureFlags2( bits ) );
+ }
+
+ using FormatFeatureFlags2KHR = FormatFeatureFlags2;
+
+ VULKAN_HPP_INLINE std::string to_string( FormatFeatureFlags2 value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & FormatFeatureFlagBits2::eSampledImage )
+ result += "SampledImage | ";
+ if ( value & FormatFeatureFlagBits2::eStorageImage )
+ result += "StorageImage | ";
+ if ( value & FormatFeatureFlagBits2::eStorageImageAtomic )
+ result += "StorageImageAtomic | ";
+ if ( value & FormatFeatureFlagBits2::eUniformTexelBuffer )
+ result += "UniformTexelBuffer | ";
+ if ( value & FormatFeatureFlagBits2::eStorageTexelBuffer )
+ result += "StorageTexelBuffer | ";
+ if ( value & FormatFeatureFlagBits2::eStorageTexelBufferAtomic )
+ result += "StorageTexelBufferAtomic | ";
+ if ( value & FormatFeatureFlagBits2::eVertexBuffer )
+ result += "VertexBuffer | ";
+ if ( value & FormatFeatureFlagBits2::eColorAttachment )
+ result += "ColorAttachment | ";
+ if ( value & FormatFeatureFlagBits2::eColorAttachmentBlend )
+ result += "ColorAttachmentBlend | ";
+ if ( value & FormatFeatureFlagBits2::eDepthStencilAttachment )
+ result += "DepthStencilAttachment | ";
+ if ( value & FormatFeatureFlagBits2::eBlitSrc )
+ result += "BlitSrc | ";
+ if ( value & FormatFeatureFlagBits2::eBlitDst )
+ result += "BlitDst | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageFilterLinear )
+ result += "SampledImageFilterLinear | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageFilterCubic )
+ result += "SampledImageFilterCubic | ";
+ if ( value & FormatFeatureFlagBits2::eTransferSrc )
+ result += "TransferSrc | ";
+ if ( value & FormatFeatureFlagBits2::eTransferDst )
+ result += "TransferDst | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageFilterMinmax )
+ result += "SampledImageFilterMinmax | ";
+ if ( value & FormatFeatureFlagBits2::eMidpointChromaSamples )
+ result += "MidpointChromaSamples | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionLinearFilter )
+ result += "SampledImageYcbcrConversionLinearFilter | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionSeparateReconstructionFilter )
+ result += "SampledImageYcbcrConversionSeparateReconstructionFilter | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicit )
+ result += "SampledImageYcbcrConversionChromaReconstructionExplicit | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageYcbcrConversionChromaReconstructionExplicitForceable )
+ result += "SampledImageYcbcrConversionChromaReconstructionExplicitForceable | ";
+ if ( value & FormatFeatureFlagBits2::eDisjoint )
+ result += "Disjoint | ";
+ if ( value & FormatFeatureFlagBits2::eCositedChromaSamples )
+ result += "CositedChromaSamples | ";
+ if ( value & FormatFeatureFlagBits2::eStorageReadWithoutFormat )
+ result += "StorageReadWithoutFormat | ";
+ if ( value & FormatFeatureFlagBits2::eStorageWriteWithoutFormat )
+ result += "StorageWriteWithoutFormat | ";
+ if ( value & FormatFeatureFlagBits2::eSampledImageDepthComparison )
+ result += "SampledImageDepthComparison | ";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ if ( value & FormatFeatureFlagBits2::eVideoDecodeOutputKHR )
+ result += "VideoDecodeOutputKHR | ";
+ if ( value & FormatFeatureFlagBits2::eVideoDecodeDpbKHR )
+ result += "VideoDecodeDpbKHR | ";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ if ( value & FormatFeatureFlagBits2::eAccelerationStructureVertexBufferKHR )
+ result += "AccelerationStructureVertexBufferKHR | ";
+ if ( value & FormatFeatureFlagBits2::eFragmentDensityMapEXT )
+ result += "FragmentDensityMapEXT | ";
+ if ( value & FormatFeatureFlagBits2::eFragmentShadingRateAttachmentKHR )
+ result += "FragmentShadingRateAttachmentKHR | ";
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ if ( value & FormatFeatureFlagBits2::eVideoEncodeInputKHR )
+ result += "VideoEncodeInputKHR | ";
+ if ( value & FormatFeatureFlagBits2::eVideoEncodeDpbKHR )
+ result += "VideoEncodeDpbKHR | ";
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ if ( value & FormatFeatureFlagBits2::eLinearColorAttachmentNV )
+ result += "LinearColorAttachmentNV | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
//=== VK_KHR_surface ===
using CompositeAlphaFlagsKHR = Flags<CompositeAlphaFlagBitsKHR>;
@@ -11431,19 +16102,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR
- operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return CompositeAlphaFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR
- operator&(CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return CompositeAlphaFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR CompositeAlphaFlagsKHR
- operator^( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( CompositeAlphaFlagBitsKHR bit0, CompositeAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return CompositeAlphaFlagsKHR( bit0 ) ^ bit1;
}
@@ -11488,19 +16159,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR
- operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return SwapchainCreateFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR
- operator&(SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return SwapchainCreateFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SwapchainCreateFlagsKHR
- operator^( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SwapchainCreateFlagBitsKHR bit0, SwapchainCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return SwapchainCreateFlagsKHR( bit0 ) ^ bit1;
}
@@ -11542,25 +16213,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR
- operator|( DeviceGroupPresentModeFlagBitsKHR bit0, DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DeviceGroupPresentModeFlagBitsKHR bit0, DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceGroupPresentModeFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR
- operator&(DeviceGroupPresentModeFlagBitsKHR bit0, DeviceGroupPresentModeFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DeviceGroupPresentModeFlagBitsKHR bit0, DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceGroupPresentModeFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR
- operator^( DeviceGroupPresentModeFlagBitsKHR bit0, DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DeviceGroupPresentModeFlagBitsKHR bit0, DeviceGroupPresentModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceGroupPresentModeFlagsKHR( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceGroupPresentModeFlagsKHR
- operator~( DeviceGroupPresentModeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( DeviceGroupPresentModeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( DeviceGroupPresentModeFlagsKHR( bits ) );
}
@@ -11606,19 +16277,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR
- operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return DisplayPlaneAlphaFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR
- operator&(DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return DisplayPlaneAlphaFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DisplayPlaneAlphaFlagsKHR
- operator^( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DisplayPlaneAlphaFlagBitsKHR bit0, DisplayPlaneAlphaFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return DisplayPlaneAlphaFlagsKHR( bit0 ) ^ bit1;
}
@@ -11673,19 +16344,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR
- operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return SurfaceTransformFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR
- operator&(SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return SurfaceTransformFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceTransformFlagsKHR
- operator^( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SurfaceTransformFlagBitsKHR bit0, SurfaceTransformFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return SurfaceTransformFlagsKHR( bit0 ) ^ bit1;
}
@@ -11795,19 +16466,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT
- operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugReportFlagsEXT( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT operator&(DebugReportFlagBitsEXT bit0,
- DebugReportFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT
+ operator&( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugReportFlagsEXT( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugReportFlagsEXT
- operator^( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DebugReportFlagBitsEXT bit0, DebugReportFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugReportFlagsEXT( bit0 ) ^ bit1;
}
@@ -11851,6 +16522,7 @@ namespace VULKAN_HPP_NAMESPACE
allFlags = VkFlags( VideoCodecOperationFlagBitsKHR::eInvalid )
# if defined( VK_ENABLE_BETA_EXTENSIONS )
| VkFlags( VideoCodecOperationFlagBitsKHR::eEncodeH264EXT ) |
+ VkFlags( VideoCodecOperationFlagBitsKHR::eEncodeH265EXT ) |
VkFlags( VideoCodecOperationFlagBitsKHR::eDecodeH264EXT ) |
VkFlags( VideoCodecOperationFlagBitsKHR::eDecodeH265EXT )
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -11858,19 +16530,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR
- operator|( VideoCodecOperationFlagBitsKHR bit0, VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoCodecOperationFlagBitsKHR bit0, VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodecOperationFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR
- operator&(VideoCodecOperationFlagBitsKHR bit0, VideoCodecOperationFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoCodecOperationFlagBitsKHR bit0, VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodecOperationFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodecOperationFlagsKHR
- operator^( VideoCodecOperationFlagBitsKHR bit0, VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoCodecOperationFlagBitsKHR bit0, VideoCodecOperationFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodecOperationFlagsKHR( bit0 ) ^ bit1;
}
@@ -11890,6 +16562,8 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_ENABLE_BETA_EXTENSIONS )
if ( value & VideoCodecOperationFlagBitsKHR::eEncodeH264EXT )
result += "EncodeH264EXT | ";
+ if ( value & VideoCodecOperationFlagBitsKHR::eEncodeH265EXT )
+ result += "EncodeH265EXT | ";
if ( value & VideoCodecOperationFlagBitsKHR::eDecodeH264EXT )
result += "DecodeH264EXT | ";
if ( value & VideoCodecOperationFlagBitsKHR::eDecodeH265EXT )
@@ -11914,25 +16588,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR
- operator|( VideoChromaSubsamplingFlagBitsKHR bit0, VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoChromaSubsamplingFlagBitsKHR bit0, VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoChromaSubsamplingFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR
- operator&(VideoChromaSubsamplingFlagBitsKHR bit0, VideoChromaSubsamplingFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoChromaSubsamplingFlagBitsKHR bit0, VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoChromaSubsamplingFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR
- operator^( VideoChromaSubsamplingFlagBitsKHR bit0, VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoChromaSubsamplingFlagBitsKHR bit0, VideoChromaSubsamplingFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoChromaSubsamplingFlagsKHR( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoChromaSubsamplingFlagsKHR
- operator~( VideoChromaSubsamplingFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoChromaSubsamplingFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoChromaSubsamplingFlagsKHR( bits ) );
}
@@ -11969,25 +16643,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR
- operator|( VideoComponentBitDepthFlagBitsKHR bit0, VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoComponentBitDepthFlagBitsKHR bit0, VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoComponentBitDepthFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR
- operator&(VideoComponentBitDepthFlagBitsKHR bit0, VideoComponentBitDepthFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoComponentBitDepthFlagBitsKHR bit0, VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoComponentBitDepthFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR
- operator^( VideoComponentBitDepthFlagBitsKHR bit0, VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoComponentBitDepthFlagBitsKHR bit0, VideoComponentBitDepthFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoComponentBitDepthFlagsKHR( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoComponentBitDepthFlagsKHR
- operator~( VideoComponentBitDepthFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoComponentBitDepthFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoComponentBitDepthFlagsKHR( bits ) );
}
@@ -12021,19 +16695,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR
- operator|( VideoCapabilityFlagBitsKHR bit0, VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoCapabilityFlagBitsKHR bit0, VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCapabilityFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR
- operator&(VideoCapabilityFlagBitsKHR bit0, VideoCapabilityFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoCapabilityFlagBitsKHR bit0, VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCapabilityFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCapabilityFlagsKHR
- operator^( VideoCapabilityFlagBitsKHR bit0, VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoCapabilityFlagBitsKHR bit0, VideoCapabilityFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCapabilityFlagsKHR( bit0 ) ^ bit1;
}
@@ -12071,19 +16745,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR
- operator|( VideoSessionCreateFlagBitsKHR bit0, VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoSessionCreateFlagBitsKHR bit0, VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoSessionCreateFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR
- operator&(VideoSessionCreateFlagBitsKHR bit0, VideoSessionCreateFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoSessionCreateFlagBitsKHR bit0, VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoSessionCreateFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoSessionCreateFlagsKHR
- operator^( VideoSessionCreateFlagBitsKHR bit0, VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoSessionCreateFlagBitsKHR bit0, VideoSessionCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoSessionCreateFlagsKHR( bit0 ) ^ bit1;
}
@@ -12132,19 +16806,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR
- operator|( VideoCodingControlFlagBitsKHR bit0, VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoCodingControlFlagBitsKHR bit0, VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodingControlFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR
- operator&(VideoCodingControlFlagBitsKHR bit0, VideoCodingControlFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoCodingControlFlagBitsKHR bit0, VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodingControlFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingControlFlagsKHR
- operator^( VideoCodingControlFlagBitsKHR bit0, VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoCodingControlFlagBitsKHR bit0, VideoCodingControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodingControlFlagsKHR( bit0 ) ^ bit1;
}
@@ -12174,33 +16848,32 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags = VkFlags( VideoCodingQualityPresetFlagBitsKHR::eDefault ) |
- VkFlags( VideoCodingQualityPresetFlagBitsKHR::eNormal ) |
+ allFlags = VkFlags( VideoCodingQualityPresetFlagBitsKHR::eNormal ) |
VkFlags( VideoCodingQualityPresetFlagBitsKHR::ePower ) |
VkFlags( VideoCodingQualityPresetFlagBitsKHR::eQuality )
};
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR
- operator|( VideoCodingQualityPresetFlagBitsKHR bit0, VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoCodingQualityPresetFlagBitsKHR bit0, VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodingQualityPresetFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR
- operator&(VideoCodingQualityPresetFlagBitsKHR bit0, VideoCodingQualityPresetFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoCodingQualityPresetFlagBitsKHR bit0, VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodingQualityPresetFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR
- operator^( VideoCodingQualityPresetFlagBitsKHR bit0, VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoCodingQualityPresetFlagBitsKHR bit0, VideoCodingQualityPresetFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoCodingQualityPresetFlagsKHR( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoCodingQualityPresetFlagsKHR
- operator~( VideoCodingQualityPresetFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoCodingQualityPresetFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoCodingQualityPresetFlagsKHR( bits ) );
}
@@ -12237,19 +16910,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR
- operator|( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoDecodeFlagsKHR( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR operator&(VideoDecodeFlagBitsKHR bit0,
- VideoDecodeFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR
+ operator&( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoDecodeFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeFlagsKHR
- operator^( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoDecodeFlagBitsKHR bit0, VideoDecodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoDecodeFlagsKHR( bit0 ) ^ bit1;
}
@@ -12312,8 +16985,8 @@ namespace VULKAN_HPP_NAMESPACE
return VideoEncodeH264CapabilityFlagsEXT( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT
- operator&(VideoEncodeH264CapabilityFlagBitsEXT bit0, VideoEncodeH264CapabilityFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT operator&(
+ VideoEncodeH264CapabilityFlagBitsEXT bit0, VideoEncodeH264CapabilityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264CapabilityFlagsEXT( bit0 ) & bit1;
}
@@ -12325,7 +16998,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CapabilityFlagsEXT
- operator~( VideoEncodeH264CapabilityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoEncodeH264CapabilityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoEncodeH264CapabilityFlagsEXT( bits ) );
}
@@ -12376,25 +17049,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT
- operator|( VideoEncodeH264InputModeFlagBitsEXT bit0, VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoEncodeH264InputModeFlagBitsEXT bit0, VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264InputModeFlagsEXT( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT
- operator&(VideoEncodeH264InputModeFlagBitsEXT bit0, VideoEncodeH264InputModeFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoEncodeH264InputModeFlagBitsEXT bit0, VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264InputModeFlagsEXT( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT
- operator^( VideoEncodeH264InputModeFlagBitsEXT bit0, VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoEncodeH264InputModeFlagBitsEXT bit0, VideoEncodeH264InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264InputModeFlagsEXT( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264InputModeFlagsEXT
- operator~( VideoEncodeH264InputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoEncodeH264InputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoEncodeH264InputModeFlagsEXT( bits ) );
}
@@ -12434,8 +17107,8 @@ namespace VULKAN_HPP_NAMESPACE
return VideoEncodeH264OutputModeFlagsEXT( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT
- operator&(VideoEncodeH264OutputModeFlagBitsEXT bit0, VideoEncodeH264OutputModeFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT operator&(
+ VideoEncodeH264OutputModeFlagBitsEXT bit0, VideoEncodeH264OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264OutputModeFlagsEXT( bit0 ) & bit1;
}
@@ -12447,7 +17120,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264OutputModeFlagsEXT
- operator~( VideoEncodeH264OutputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoEncodeH264OutputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoEncodeH264OutputModeFlagsEXT( bits ) );
}
@@ -12481,25 +17154,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CreateFlagsEXT
- operator|( VideoEncodeH264CreateFlagBitsEXT bit0, VideoEncodeH264CreateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoEncodeH264CreateFlagBitsEXT bit0, VideoEncodeH264CreateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264CreateFlagsEXT( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CreateFlagsEXT
- operator&(VideoEncodeH264CreateFlagBitsEXT bit0, VideoEncodeH264CreateFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoEncodeH264CreateFlagBitsEXT bit0, VideoEncodeH264CreateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264CreateFlagsEXT( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CreateFlagsEXT
- operator^( VideoEncodeH264CreateFlagBitsEXT bit0, VideoEncodeH264CreateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoEncodeH264CreateFlagBitsEXT bit0, VideoEncodeH264CreateFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeH264CreateFlagsEXT( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264CreateFlagsEXT
- operator~( VideoEncodeH264CreateFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoEncodeH264CreateFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoEncodeH264CreateFlagsEXT( bits ) );
}
@@ -12515,6 +17188,292 @@ namespace VULKAN_HPP_NAMESPACE
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
+
+ using VideoEncodeH264RateControlStructureFlagsEXT = Flags<VideoEncodeH264RateControlStructureFlagBitsEXT>;
+
+ template <>
+ struct FlagTraits<VideoEncodeH264RateControlStructureFlagBitsEXT>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown ) |
+ VkFlags( VideoEncodeH264RateControlStructureFlagBitsEXT::eFlat ) |
+ VkFlags( VideoEncodeH264RateControlStructureFlagBitsEXT::eDyadic )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT
+ operator|( VideoEncodeH264RateControlStructureFlagBitsEXT bit0,
+ VideoEncodeH264RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH264RateControlStructureFlagsEXT( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT
+ operator&( VideoEncodeH264RateControlStructureFlagBitsEXT bit0,
+ VideoEncodeH264RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH264RateControlStructureFlagsEXT( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT
+ operator^( VideoEncodeH264RateControlStructureFlagBitsEXT bit0,
+ VideoEncodeH264RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH264RateControlStructureFlagsEXT( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlStructureFlagsEXT
+ operator~( VideoEncodeH264RateControlStructureFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( VideoEncodeH264RateControlStructureFlagsEXT( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH264RateControlStructureFlagsEXT value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & VideoEncodeH264RateControlStructureFlagBitsEXT::eFlat )
+ result += "Flat | ";
+ if ( value & VideoEncodeH264RateControlStructureFlagBitsEXT::eDyadic )
+ result += "Dyadic | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_EXT_video_encode_h265 ===
+
+ using VideoEncodeH265CapabilityFlagsEXT = Flags<VideoEncodeH265CapabilityFlagBitsEXT>;
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CapabilityFlagsEXT )
+ {
+ return "{}";
+ }
+
+ using VideoEncodeH265InputModeFlagsEXT = Flags<VideoEncodeH265InputModeFlagBitsEXT>;
+
+ template <>
+ struct FlagTraits<VideoEncodeH265InputModeFlagBitsEXT>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( VideoEncodeH265InputModeFlagBitsEXT::eFrame ) |
+ VkFlags( VideoEncodeH265InputModeFlagBitsEXT::eSliceSegment ) |
+ VkFlags( VideoEncodeH265InputModeFlagBitsEXT::eNonVcl )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT
+ operator|( VideoEncodeH265InputModeFlagBitsEXT bit0, VideoEncodeH265InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265InputModeFlagsEXT( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT
+ operator&( VideoEncodeH265InputModeFlagBitsEXT bit0, VideoEncodeH265InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265InputModeFlagsEXT( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT
+ operator^( VideoEncodeH265InputModeFlagBitsEXT bit0, VideoEncodeH265InputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265InputModeFlagsEXT( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265InputModeFlagsEXT
+ operator~( VideoEncodeH265InputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( VideoEncodeH265InputModeFlagsEXT( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265InputModeFlagsEXT value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & VideoEncodeH265InputModeFlagBitsEXT::eFrame )
+ result += "Frame | ";
+ if ( value & VideoEncodeH265InputModeFlagBitsEXT::eSliceSegment )
+ result += "SliceSegment | ";
+ if ( value & VideoEncodeH265InputModeFlagBitsEXT::eNonVcl )
+ result += "NonVcl | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using VideoEncodeH265OutputModeFlagsEXT = Flags<VideoEncodeH265OutputModeFlagBitsEXT>;
+
+ template <>
+ struct FlagTraits<VideoEncodeH265OutputModeFlagBitsEXT>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( VideoEncodeH265OutputModeFlagBitsEXT::eFrame ) |
+ VkFlags( VideoEncodeH265OutputModeFlagBitsEXT::eSliceSegment ) |
+ VkFlags( VideoEncodeH265OutputModeFlagBitsEXT::eNonVcl )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator|(
+ VideoEncodeH265OutputModeFlagBitsEXT bit0, VideoEncodeH265OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265OutputModeFlagsEXT( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator&(
+ VideoEncodeH265OutputModeFlagBitsEXT bit0, VideoEncodeH265OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265OutputModeFlagsEXT( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT operator^(
+ VideoEncodeH265OutputModeFlagBitsEXT bit0, VideoEncodeH265OutputModeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265OutputModeFlagsEXT( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265OutputModeFlagsEXT
+ operator~( VideoEncodeH265OutputModeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( VideoEncodeH265OutputModeFlagsEXT( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265OutputModeFlagsEXT value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & VideoEncodeH265OutputModeFlagBitsEXT::eFrame )
+ result += "Frame | ";
+ if ( value & VideoEncodeH265OutputModeFlagBitsEXT::eSliceSegment )
+ result += "SliceSegment | ";
+ if ( value & VideoEncodeH265OutputModeFlagBitsEXT::eNonVcl )
+ result += "NonVcl | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using VideoEncodeH265CreateFlagsEXT = Flags<VideoEncodeH265CreateFlagBitsEXT>;
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CreateFlagsEXT )
+ {
+ return "{}";
+ }
+
+ using VideoEncodeH265CtbSizeFlagsEXT = Flags<VideoEncodeH265CtbSizeFlagBitsEXT>;
+
+ template <>
+ struct FlagTraits<VideoEncodeH265CtbSizeFlagBitsEXT>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e8 ) | VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e16 ) |
+ VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e32 ) | VkFlags( VideoEncodeH265CtbSizeFlagBitsEXT::e64 )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT
+ operator|( VideoEncodeH265CtbSizeFlagBitsEXT bit0, VideoEncodeH265CtbSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265CtbSizeFlagsEXT( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT
+ operator&( VideoEncodeH265CtbSizeFlagBitsEXT bit0, VideoEncodeH265CtbSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265CtbSizeFlagsEXT( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT
+ operator^( VideoEncodeH265CtbSizeFlagBitsEXT bit0, VideoEncodeH265CtbSizeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265CtbSizeFlagsEXT( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265CtbSizeFlagsEXT
+ operator~( VideoEncodeH265CtbSizeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( VideoEncodeH265CtbSizeFlagsEXT( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265CtbSizeFlagsEXT value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e8 )
+ result += "8 | ";
+ if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e16 )
+ result += "16 | ";
+ if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e32 )
+ result += "32 | ";
+ if ( value & VideoEncodeH265CtbSizeFlagBitsEXT::e64 )
+ result += "64 | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
+
+ using VideoEncodeH265RateControlStructureFlagsEXT = Flags<VideoEncodeH265RateControlStructureFlagBitsEXT>;
+
+ template <>
+ struct FlagTraits<VideoEncodeH265RateControlStructureFlagBitsEXT>
+ {
+ enum : VkFlags
+ {
+ allFlags = VkFlags( VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown ) |
+ VkFlags( VideoEncodeH265RateControlStructureFlagBitsEXT::eFlat ) |
+ VkFlags( VideoEncodeH265RateControlStructureFlagBitsEXT::eDyadic )
+ };
+ };
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT
+ operator|( VideoEncodeH265RateControlStructureFlagBitsEXT bit0,
+ VideoEncodeH265RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265RateControlStructureFlagsEXT( bit0 ) | bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT
+ operator&( VideoEncodeH265RateControlStructureFlagBitsEXT bit0,
+ VideoEncodeH265RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265RateControlStructureFlagsEXT( bit0 ) & bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT
+ operator^( VideoEncodeH265RateControlStructureFlagBitsEXT bit0,
+ VideoEncodeH265RateControlStructureFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ {
+ return VideoEncodeH265RateControlStructureFlagsEXT( bit0 ) ^ bit1;
+ }
+
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlStructureFlagsEXT
+ operator~( VideoEncodeH265RateControlStructureFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ {
+ return ~( VideoEncodeH265RateControlStructureFlagsEXT( bits ) );
+ }
+
+ VULKAN_HPP_INLINE std::string to_string( VideoEncodeH265RateControlStructureFlagsEXT value )
+ {
+ if ( !value )
+ return "{}";
+
+ std::string result;
+ if ( value & VideoEncodeH265RateControlStructureFlagBitsEXT::eFlat )
+ result += "Flat | ";
+ if ( value & VideoEncodeH265RateControlStructureFlagBitsEXT::eDyadic )
+ result += "Dyadic | ";
+
+ return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ }
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -12540,7 +17499,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureLayoutFlagsEXT operator&(
- VideoDecodeH264PictureLayoutFlagBitsEXT bit0, VideoDecodeH264PictureLayoutFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ VideoDecodeH264PictureLayoutFlagBitsEXT bit0, VideoDecodeH264PictureLayoutFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoDecodeH264PictureLayoutFlagsEXT( bit0 ) & bit1;
}
@@ -12552,7 +17511,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureLayoutFlagsEXT
- operator~( VideoDecodeH264PictureLayoutFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoDecodeH264PictureLayoutFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoDecodeH264PictureLayoutFlagsEXT( bits ) );
}
@@ -12607,25 +17566,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV
- operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryHandleTypeFlagsNV( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV
- operator&(ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryHandleTypeFlagsNV( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV
- operator^( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalMemoryHandleTypeFlagBitsNV bit0, ExternalMemoryHandleTypeFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryHandleTypeFlagsNV( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryHandleTypeFlagsNV
- operator~( ExternalMemoryHandleTypeFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT
+ operator~( ExternalMemoryHandleTypeFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT
{
return ~( ExternalMemoryHandleTypeFlagsNV( bits ) );
}
@@ -12662,19 +17621,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV
- operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryFeatureFlagsNV( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV
- operator&(ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryFeatureFlagsNV( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ExternalMemoryFeatureFlagsNV
- operator^( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ExternalMemoryFeatureFlagBitsNV bit0, ExternalMemoryFeatureFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return ExternalMemoryFeatureFlagsNV( bit0 ) ^ bit1;
}
@@ -12726,19 +17685,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT
- operator|( ConditionalRenderingFlagBitsEXT bit0, ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( ConditionalRenderingFlagBitsEXT bit0, ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return ConditionalRenderingFlagsEXT( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT
- operator&(ConditionalRenderingFlagBitsEXT bit0, ConditionalRenderingFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ operator&( ConditionalRenderingFlagBitsEXT bit0, ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return ConditionalRenderingFlagsEXT( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ConditionalRenderingFlagsEXT
- operator^( ConditionalRenderingFlagBitsEXT bit0, ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( ConditionalRenderingFlagBitsEXT bit0, ConditionalRenderingFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return ConditionalRenderingFlagsEXT( bit0 ) ^ bit1;
}
@@ -12775,19 +17734,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT
- operator|( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return SurfaceCounterFlagsEXT( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT
- operator&(SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ operator&( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return SurfaceCounterFlagsEXT( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SurfaceCounterFlagsEXT
- operator^( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( SurfaceCounterFlagBitsEXT bit0, SurfaceCounterFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return SurfaceCounterFlagsEXT( bit0 ) ^ bit1;
}
@@ -12868,7 +17827,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PerformanceCounterDescriptionFlagsKHR operator&(
- PerformanceCounterDescriptionFlagBitsKHR bit0, PerformanceCounterDescriptionFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ PerformanceCounterDescriptionFlagBitsKHR bit0, PerformanceCounterDescriptionFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return PerformanceCounterDescriptionFlagsKHR( bit0 ) & bit1;
}
@@ -12880,7 +17839,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PerformanceCounterDescriptionFlagsKHR
- operator~( PerformanceCounterDescriptionFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( PerformanceCounterDescriptionFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( PerformanceCounterDescriptionFlagsKHR( bits ) );
}
@@ -12950,8 +17909,8 @@ namespace VULKAN_HPP_NAMESPACE
return DebugUtilsMessageSeverityFlagsEXT( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT
- operator&(DebugUtilsMessageSeverityFlagBitsEXT bit0, DebugUtilsMessageSeverityFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT operator&(
+ DebugUtilsMessageSeverityFlagBitsEXT bit0, DebugUtilsMessageSeverityFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugUtilsMessageSeverityFlagsEXT( bit0 ) & bit1;
}
@@ -12963,7 +17922,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageSeverityFlagsEXT
- operator~( DebugUtilsMessageSeverityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( DebugUtilsMessageSeverityFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( DebugUtilsMessageSeverityFlagsEXT( bits ) );
}
@@ -13000,25 +17959,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT
- operator|( DebugUtilsMessageTypeFlagBitsEXT bit0, DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DebugUtilsMessageTypeFlagBitsEXT bit0, DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugUtilsMessageTypeFlagsEXT( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT
- operator&(DebugUtilsMessageTypeFlagBitsEXT bit0, DebugUtilsMessageTypeFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DebugUtilsMessageTypeFlagBitsEXT bit0, DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugUtilsMessageTypeFlagsEXT( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT
- operator^( DebugUtilsMessageTypeFlagBitsEXT bit0, DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DebugUtilsMessageTypeFlagBitsEXT bit0, DebugUtilsMessageTypeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
{
return DebugUtilsMessageTypeFlagsEXT( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DebugUtilsMessageTypeFlagsEXT
- operator~( DebugUtilsMessageTypeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
+ operator~( DebugUtilsMessageTypeFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
{
return ~( DebugUtilsMessageTypeFlagsEXT( bits ) );
}
@@ -13081,8 +18040,8 @@ namespace VULKAN_HPP_NAMESPACE
return GeometryFlagsKHR( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryFlagsKHR operator&(GeometryFlagBitsKHR bit0,
- GeometryFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryFlagsKHR operator&( GeometryFlagBitsKHR bit0,
+ GeometryFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return GeometryFlagsKHR( bit0 ) & bit1;
}
@@ -13129,19 +18088,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR
- operator|( GeometryInstanceFlagBitsKHR bit0, GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( GeometryInstanceFlagBitsKHR bit0, GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return GeometryInstanceFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR
- operator&(GeometryInstanceFlagBitsKHR bit0, GeometryInstanceFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( GeometryInstanceFlagBitsKHR bit0, GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return GeometryInstanceFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR GeometryInstanceFlagsKHR
- operator^( GeometryInstanceFlagBitsKHR bit0, GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( GeometryInstanceFlagBitsKHR bit0, GeometryInstanceFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return GeometryInstanceFlagsKHR( bit0 ) ^ bit1;
}
@@ -13194,8 +18153,8 @@ namespace VULKAN_HPP_NAMESPACE
return BuildAccelerationStructureFlagsKHR( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR
- operator&(BuildAccelerationStructureFlagBitsKHR bit0, BuildAccelerationStructureFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR operator&(
+ BuildAccelerationStructureFlagBitsKHR bit0, BuildAccelerationStructureFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return BuildAccelerationStructureFlagsKHR( bit0 ) & bit1;
}
@@ -13207,7 +18166,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR BuildAccelerationStructureFlagsKHR
- operator~( BuildAccelerationStructureFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( BuildAccelerationStructureFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( BuildAccelerationStructureFlagsKHR( bits ) );
}
@@ -13255,7 +18214,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccelerationStructureCreateFlagsKHR operator&(
- AccelerationStructureCreateFlagBitsKHR bit0, AccelerationStructureCreateFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ AccelerationStructureCreateFlagBitsKHR bit0, AccelerationStructureCreateFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return AccelerationStructureCreateFlagsKHR( bit0 ) & bit1;
}
@@ -13267,7 +18226,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccelerationStructureCreateFlagsKHR
- operator~( AccelerationStructureCreateFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( AccelerationStructureCreateFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( AccelerationStructureCreateFlagsKHR( bits ) );
}
@@ -13324,61 +18283,6 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- //=== VK_EXT_pipeline_creation_feedback ===
-
- using PipelineCreationFeedbackFlagsEXT = Flags<PipelineCreationFeedbackFlagBitsEXT>;
-
- template <>
- struct FlagTraits<PipelineCreationFeedbackFlagBitsEXT>
- {
- enum : VkFlags
- {
- allFlags = VkFlags( PipelineCreationFeedbackFlagBitsEXT::eValid ) |
- VkFlags( PipelineCreationFeedbackFlagBitsEXT::eApplicationPipelineCacheHit ) |
- VkFlags( PipelineCreationFeedbackFlagBitsEXT::eBasePipelineAcceleration )
- };
- };
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlagsEXT
- operator|( PipelineCreationFeedbackFlagBitsEXT bit0, PipelineCreationFeedbackFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return PipelineCreationFeedbackFlagsEXT( bit0 ) | bit1;
- }
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlagsEXT
- operator&(PipelineCreationFeedbackFlagBitsEXT bit0, PipelineCreationFeedbackFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
- {
- return PipelineCreationFeedbackFlagsEXT( bit0 ) & bit1;
- }
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlagsEXT
- operator^( PipelineCreationFeedbackFlagBitsEXT bit0, PipelineCreationFeedbackFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return PipelineCreationFeedbackFlagsEXT( bit0 ) ^ bit1;
- }
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackFlagsEXT
- operator~( PipelineCreationFeedbackFlagBitsEXT bits ) VULKAN_HPP_NOEXCEPT
- {
- return ~( PipelineCreationFeedbackFlagsEXT( bits ) );
- }
-
- VULKAN_HPP_INLINE std::string to_string( PipelineCreationFeedbackFlagsEXT value )
- {
- if ( !value )
- return "{}";
-
- std::string result;
- if ( value & PipelineCreationFeedbackFlagBitsEXT::eValid )
- result += "Valid | ";
- if ( value & PipelineCreationFeedbackFlagBitsEXT::eApplicationPipelineCacheHit )
- result += "ApplicationPipelineCacheHit | ";
- if ( value & PipelineCreationFeedbackFlagBitsEXT::eBasePipelineAcceleration )
- result += "BasePipelineAcceleration | ";
-
- return "{ " + result.substr( 0, result.size() - 3 ) + " }";
- }
-
#if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_imagepipe_surface ===
@@ -13410,70 +18314,6 @@ namespace VULKAN_HPP_NAMESPACE
return "{}";
}
- //=== VK_EXT_tooling_info ===
-
- using ToolPurposeFlagsEXT = Flags<ToolPurposeFlagBitsEXT>;
-
- template <>
- struct FlagTraits<ToolPurposeFlagBitsEXT>
- {
- enum : VkFlags
- {
- allFlags = VkFlags( ToolPurposeFlagBitsEXT::eValidation ) | VkFlags( ToolPurposeFlagBitsEXT::eProfiling ) |
- VkFlags( ToolPurposeFlagBitsEXT::eTracing ) | VkFlags( ToolPurposeFlagBitsEXT::eAdditionalFeatures ) |
- VkFlags( ToolPurposeFlagBitsEXT::eModifyingFeatures ) |
- VkFlags( ToolPurposeFlagBitsEXT::eDebugReporting ) | VkFlags( ToolPurposeFlagBitsEXT::eDebugMarkers )
- };
- };
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlagsEXT
- operator|( ToolPurposeFlagBitsEXT bit0, ToolPurposeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return ToolPurposeFlagsEXT( bit0 ) | bit1;
- }
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlagsEXT operator&(ToolPurposeFlagBitsEXT bit0,
- ToolPurposeFlagBitsEXT bit1)VULKAN_HPP_NOEXCEPT
- {
- return ToolPurposeFlagsEXT( bit0 ) & bit1;
- }
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlagsEXT
- operator^( ToolPurposeFlagBitsEXT bit0, ToolPurposeFlagBitsEXT bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return ToolPurposeFlagsEXT( bit0 ) ^ bit1;
- }
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ToolPurposeFlagsEXT operator~( ToolPurposeFlagBitsEXT bits )
- VULKAN_HPP_NOEXCEPT
- {
- return ~( ToolPurposeFlagsEXT( bits ) );
- }
-
- VULKAN_HPP_INLINE std::string to_string( ToolPurposeFlagsEXT value )
- {
- if ( !value )
- return "{}";
-
- std::string result;
- if ( value & ToolPurposeFlagBitsEXT::eValidation )
- result += "Validation | ";
- if ( value & ToolPurposeFlagBitsEXT::eProfiling )
- result += "Profiling | ";
- if ( value & ToolPurposeFlagBitsEXT::eTracing )
- result += "Tracing | ";
- if ( value & ToolPurposeFlagBitsEXT::eAdditionalFeatures )
- result += "AdditionalFeatures | ";
- if ( value & ToolPurposeFlagBitsEXT::eModifyingFeatures )
- result += "ModifyingFeatures | ";
- if ( value & ToolPurposeFlagBitsEXT::eDebugReporting )
- result += "DebugReporting | ";
- if ( value & ToolPurposeFlagBitsEXT::eDebugMarkers )
- result += "DebugMarkers | ";
-
- return "{ " + result.substr( 0, result.size() - 3 ) + " }";
- }
-
//=== VK_NV_coverage_reduction_mode ===
using PipelineCoverageReductionStateCreateFlagsNV = Flags<PipelineCoverageReductionStateCreateFlagBitsNV>;
@@ -13506,19 +18346,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV
- operator|( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return IndirectStateFlagsNV( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV operator&(IndirectStateFlagBitsNV bit0,
- IndirectStateFlagBitsNV bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV
+ operator&( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return IndirectStateFlagsNV( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectStateFlagsNV
- operator^( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( IndirectStateFlagBitsNV bit0, IndirectStateFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return IndirectStateFlagsNV( bit0 ) ^ bit1;
}
@@ -13560,8 +18400,8 @@ namespace VULKAN_HPP_NAMESPACE
return IndirectCommandsLayoutUsageFlagsNV( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV
- operator&(IndirectCommandsLayoutUsageFlagBitsNV bit0, IndirectCommandsLayoutUsageFlagBitsNV bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV operator&(
+ IndirectCommandsLayoutUsageFlagBitsNV bit0, IndirectCommandsLayoutUsageFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return IndirectCommandsLayoutUsageFlagsNV( bit0 ) & bit1;
}
@@ -13573,7 +18413,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR IndirectCommandsLayoutUsageFlagsNV
- operator~( IndirectCommandsLayoutUsageFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT
+ operator~( IndirectCommandsLayoutUsageFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT
{
return ~( IndirectCommandsLayoutUsageFlagsNV( bits ) );
}
@@ -13603,15 +18443,6 @@ namespace VULKAN_HPP_NAMESPACE
return "{}";
}
- //=== VK_EXT_private_data ===
-
- using PrivateDataSlotCreateFlagsEXT = Flags<PrivateDataSlotCreateFlagBitsEXT>;
-
- VULKAN_HPP_INLINE std::string to_string( PrivateDataSlotCreateFlagsEXT )
- {
- return "{}";
- }
-
#if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_encode_queue ===
@@ -13627,19 +18458,19 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR
- operator|( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeFlagsKHR( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR operator&(VideoEncodeFlagBitsKHR bit0,
- VideoEncodeFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR
+ operator&( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeFlagsKHR
- operator^( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoEncodeFlagBitsKHR bit0, VideoEncodeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeFlagsKHR( bit0 ) ^ bit1;
}
@@ -13669,31 +18500,31 @@ namespace VULKAN_HPP_NAMESPACE
{
enum : VkFlags
{
- allFlags =
- VkFlags( VideoEncodeRateControlFlagBitsKHR::eDefault ) | VkFlags( VideoEncodeRateControlFlagBitsKHR::eReset )
+ allFlags = VkFlags( VideoEncodeRateControlFlagBitsKHR::eDefault ) |
+ VkFlags( VideoEncodeRateControlFlagBitsKHR::eReserved0 )
};
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR
- operator|( VideoEncodeRateControlFlagBitsKHR bit0, VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( VideoEncodeRateControlFlagBitsKHR bit0, VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeRateControlFlagsKHR( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR
- operator&(VideoEncodeRateControlFlagBitsKHR bit0, VideoEncodeRateControlFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ operator&( VideoEncodeRateControlFlagBitsKHR bit0, VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeRateControlFlagsKHR( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR
- operator^( VideoEncodeRateControlFlagBitsKHR bit0, VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( VideoEncodeRateControlFlagBitsKHR bit0, VideoEncodeRateControlFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeRateControlFlagsKHR( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlFlagsKHR
- operator~( VideoEncodeRateControlFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoEncodeRateControlFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoEncodeRateControlFlagsKHR( bits ) );
}
@@ -13704,8 +18535,8 @@ namespace VULKAN_HPP_NAMESPACE
return "{}";
std::string result;
- if ( value & VideoEncodeRateControlFlagBitsKHR::eReset )
- result += "Reset | ";
+ if ( value & VideoEncodeRateControlFlagBitsKHR::eReserved0 )
+ result += "Reserved0 | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
@@ -13729,8 +18560,8 @@ namespace VULKAN_HPP_NAMESPACE
return VideoEncodeRateControlModeFlagsKHR( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR
- operator&(VideoEncodeRateControlModeFlagBitsKHR bit0, VideoEncodeRateControlModeFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR operator&(
+ VideoEncodeRateControlModeFlagBitsKHR bit0, VideoEncodeRateControlModeFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
{
return VideoEncodeRateControlModeFlagsKHR( bit0 ) & bit1;
}
@@ -13742,7 +18573,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR VideoEncodeRateControlModeFlagsKHR
- operator~( VideoEncodeRateControlModeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ operator~( VideoEncodeRateControlModeFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
{
return ~( VideoEncodeRateControlModeFlagsKHR( bits ) );
}
@@ -13774,25 +18605,25 @@ namespace VULKAN_HPP_NAMESPACE
};
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV
- operator|( DeviceDiagnosticsConfigFlagBitsNV bit0, DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator|( DeviceDiagnosticsConfigFlagBitsNV bit0, DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceDiagnosticsConfigFlagsNV( bit0 ) | bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV
- operator&(DeviceDiagnosticsConfigFlagBitsNV bit0, DeviceDiagnosticsConfigFlagBitsNV bit1)VULKAN_HPP_NOEXCEPT
+ operator&( DeviceDiagnosticsConfigFlagBitsNV bit0, DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceDiagnosticsConfigFlagsNV( bit0 ) & bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV
- operator^( DeviceDiagnosticsConfigFlagBitsNV bit0, DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
+ operator^( DeviceDiagnosticsConfigFlagBitsNV bit0, DeviceDiagnosticsConfigFlagBitsNV bit1 ) VULKAN_HPP_NOEXCEPT
{
return DeviceDiagnosticsConfigFlagsNV( bit0 ) ^ bit1;
}
VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR DeviceDiagnosticsConfigFlagsNV
- operator~( DeviceDiagnosticsConfigFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT
+ operator~( DeviceDiagnosticsConfigFlagBitsNV bits ) VULKAN_HPP_NOEXCEPT
{
return ~( DeviceDiagnosticsConfigFlagsNV( bits ) );
}
@@ -13813,377 +18644,102 @@ namespace VULKAN_HPP_NAMESPACE
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
- //=== VK_KHR_synchronization2 ===
-
- using PipelineStageFlags2KHR = Flags<PipelineStageFlagBits2KHR>;
-
- template <>
- struct FlagTraits<PipelineStageFlagBits2KHR>
- {
- enum : VkFlags64
- {
- allFlags =
- VkFlags64( PipelineStageFlagBits2KHR::eNone ) | VkFlags64( PipelineStageFlagBits2KHR::eTopOfPipe ) |
- VkFlags64( PipelineStageFlagBits2KHR::eDrawIndirect ) | VkFlags64( PipelineStageFlagBits2KHR::eVertexInput ) |
- VkFlags64( PipelineStageFlagBits2KHR::eVertexShader ) |
- VkFlags64( PipelineStageFlagBits2KHR::eTessellationControlShader ) |
- VkFlags64( PipelineStageFlagBits2KHR::eTessellationEvaluationShader ) |
- VkFlags64( PipelineStageFlagBits2KHR::eGeometryShader ) |
- VkFlags64( PipelineStageFlagBits2KHR::eFragmentShader ) |
- VkFlags64( PipelineStageFlagBits2KHR::eEarlyFragmentTests ) |
- VkFlags64( PipelineStageFlagBits2KHR::eLateFragmentTests ) |
- VkFlags64( PipelineStageFlagBits2KHR::eColorAttachmentOutput ) |
- VkFlags64( PipelineStageFlagBits2KHR::eComputeShader ) | VkFlags64( PipelineStageFlagBits2KHR::eAllTransfer ) |
- VkFlags64( PipelineStageFlagBits2KHR::eBottomOfPipe ) | VkFlags64( PipelineStageFlagBits2KHR::eHost ) |
- VkFlags64( PipelineStageFlagBits2KHR::eAllGraphics ) | VkFlags64( PipelineStageFlagBits2KHR::eAllCommands ) |
- VkFlags64( PipelineStageFlagBits2KHR::eCopy ) | VkFlags64( PipelineStageFlagBits2KHR::eResolve ) |
- VkFlags64( PipelineStageFlagBits2KHR::eBlit ) | VkFlags64( PipelineStageFlagBits2KHR::eClear ) |
- VkFlags64( PipelineStageFlagBits2KHR::eIndexInput ) |
- VkFlags64( PipelineStageFlagBits2KHR::eVertexAttributeInput ) |
- VkFlags64( PipelineStageFlagBits2KHR::ePreRasterizationShaders )
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- | VkFlags64( PipelineStageFlagBits2KHR::eVideoDecode ) | VkFlags64( PipelineStageFlagBits2KHR::eVideoEncode )
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- | VkFlags64( PipelineStageFlagBits2KHR::eTransformFeedbackEXT ) |
- VkFlags64( PipelineStageFlagBits2KHR::eConditionalRenderingEXT ) |
- VkFlags64( PipelineStageFlagBits2KHR::eCommandPreprocessNV ) |
- VkFlags64( PipelineStageFlagBits2KHR::eFragmentShadingRateAttachment ) |
- VkFlags64( PipelineStageFlagBits2KHR::eAccelerationStructureBuild ) |
- VkFlags64( PipelineStageFlagBits2KHR::eRayTracingShader ) |
- VkFlags64( PipelineStageFlagBits2KHR::eFragmentDensityProcessEXT ) |
- VkFlags64( PipelineStageFlagBits2KHR::eTaskShaderNV ) | VkFlags64( PipelineStageFlagBits2KHR::eMeshShaderNV ) |
- VkFlags64( PipelineStageFlagBits2KHR::eSubpassShadingHUAWEI ) |
- VkFlags64( PipelineStageFlagBits2KHR::eInvocationMaskHUAWEI )
- };
- };
-
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2KHR
- operator|( PipelineStageFlagBits2KHR bit0, PipelineStageFlagBits2KHR bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return PipelineStageFlags2KHR( bit0 ) | bit1;
- }
+ //=== VK_NV_ray_tracing_motion_blur ===
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2KHR
- operator&(PipelineStageFlagBits2KHR bit0, PipelineStageFlagBits2KHR bit1)VULKAN_HPP_NOEXCEPT
- {
- return PipelineStageFlags2KHR( bit0 ) & bit1;
- }
+ using AccelerationStructureMotionInfoFlagsNV = Flags<AccelerationStructureMotionInfoFlagBitsNV>;
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2KHR
- operator^( PipelineStageFlagBits2KHR bit0, PipelineStageFlagBits2KHR bit1 ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInfoFlagsNV )
{
- return PipelineStageFlags2KHR( bit0 ) ^ bit1;
+ return "{}";
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR PipelineStageFlags2KHR operator~( PipelineStageFlagBits2KHR bits )
- VULKAN_HPP_NOEXCEPT
- {
- return ~( PipelineStageFlags2KHR( bits ) );
- }
+ using AccelerationStructureMotionInstanceFlagsNV = Flags<AccelerationStructureMotionInstanceFlagBitsNV>;
- VULKAN_HPP_INLINE std::string to_string( PipelineStageFlags2KHR value )
+ VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInstanceFlagsNV )
{
- if ( !value )
- return "{}";
-
- std::string result;
- if ( value & PipelineStageFlagBits2KHR::eTopOfPipe )
- result += "TopOfPipe | ";
- if ( value & PipelineStageFlagBits2KHR::eDrawIndirect )
- result += "DrawIndirect | ";
- if ( value & PipelineStageFlagBits2KHR::eVertexInput )
- result += "VertexInput | ";
- if ( value & PipelineStageFlagBits2KHR::eVertexShader )
- result += "VertexShader | ";
- if ( value & PipelineStageFlagBits2KHR::eTessellationControlShader )
- result += "TessellationControlShader | ";
- if ( value & PipelineStageFlagBits2KHR::eTessellationEvaluationShader )
- result += "TessellationEvaluationShader | ";
- if ( value & PipelineStageFlagBits2KHR::eGeometryShader )
- result += "GeometryShader | ";
- if ( value & PipelineStageFlagBits2KHR::eFragmentShader )
- result += "FragmentShader | ";
- if ( value & PipelineStageFlagBits2KHR::eEarlyFragmentTests )
- result += "EarlyFragmentTests | ";
- if ( value & PipelineStageFlagBits2KHR::eLateFragmentTests )
- result += "LateFragmentTests | ";
- if ( value & PipelineStageFlagBits2KHR::eColorAttachmentOutput )
- result += "ColorAttachmentOutput | ";
- if ( value & PipelineStageFlagBits2KHR::eComputeShader )
- result += "ComputeShader | ";
- if ( value & PipelineStageFlagBits2KHR::eAllTransfer )
- result += "AllTransfer | ";
- if ( value & PipelineStageFlagBits2KHR::eBottomOfPipe )
- result += "BottomOfPipe | ";
- if ( value & PipelineStageFlagBits2KHR::eHost )
- result += "Host | ";
- if ( value & PipelineStageFlagBits2KHR::eAllGraphics )
- result += "AllGraphics | ";
- if ( value & PipelineStageFlagBits2KHR::eAllCommands )
- result += "AllCommands | ";
- if ( value & PipelineStageFlagBits2KHR::eCopy )
- result += "Copy | ";
- if ( value & PipelineStageFlagBits2KHR::eResolve )
- result += "Resolve | ";
- if ( value & PipelineStageFlagBits2KHR::eBlit )
- result += "Blit | ";
- if ( value & PipelineStageFlagBits2KHR::eClear )
- result += "Clear | ";
- if ( value & PipelineStageFlagBits2KHR::eIndexInput )
- result += "IndexInput | ";
- if ( value & PipelineStageFlagBits2KHR::eVertexAttributeInput )
- result += "VertexAttributeInput | ";
- if ( value & PipelineStageFlagBits2KHR::ePreRasterizationShaders )
- result += "PreRasterizationShaders | ";
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- if ( value & PipelineStageFlagBits2KHR::eVideoDecode )
- result += "VideoDecode | ";
- if ( value & PipelineStageFlagBits2KHR::eVideoEncode )
- result += "VideoEncode | ";
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- if ( value & PipelineStageFlagBits2KHR::eTransformFeedbackEXT )
- result += "TransformFeedbackEXT | ";
- if ( value & PipelineStageFlagBits2KHR::eConditionalRenderingEXT )
- result += "ConditionalRenderingEXT | ";
- if ( value & PipelineStageFlagBits2KHR::eCommandPreprocessNV )
- result += "CommandPreprocessNV | ";
- if ( value & PipelineStageFlagBits2KHR::eFragmentShadingRateAttachment )
- result += "FragmentShadingRateAttachment | ";
- if ( value & PipelineStageFlagBits2KHR::eAccelerationStructureBuild )
- result += "AccelerationStructureBuild | ";
- if ( value & PipelineStageFlagBits2KHR::eRayTracingShader )
- result += "RayTracingShader | ";
- if ( value & PipelineStageFlagBits2KHR::eFragmentDensityProcessEXT )
- result += "FragmentDensityProcessEXT | ";
- if ( value & PipelineStageFlagBits2KHR::eTaskShaderNV )
- result += "TaskShaderNV | ";
- if ( value & PipelineStageFlagBits2KHR::eMeshShaderNV )
- result += "MeshShaderNV | ";
- if ( value & PipelineStageFlagBits2KHR::eSubpassShadingHUAWEI )
- result += "SubpassShadingHUAWEI | ";
- if ( value & PipelineStageFlagBits2KHR::eInvocationMaskHUAWEI )
- result += "InvocationMaskHUAWEI | ";
-
- return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ return "{}";
}
- using AccessFlags2KHR = Flags<AccessFlagBits2KHR>;
-
- template <>
- struct FlagTraits<AccessFlagBits2KHR>
- {
- enum : VkFlags64
- {
- allFlags =
- VkFlags64( AccessFlagBits2KHR::eNone ) | VkFlags64( AccessFlagBits2KHR::eIndirectCommandRead ) |
- VkFlags64( AccessFlagBits2KHR::eIndexRead ) | VkFlags64( AccessFlagBits2KHR::eVertexAttributeRead ) |
- VkFlags64( AccessFlagBits2KHR::eUniformRead ) | VkFlags64( AccessFlagBits2KHR::eInputAttachmentRead ) |
- VkFlags64( AccessFlagBits2KHR::eShaderRead ) | VkFlags64( AccessFlagBits2KHR::eShaderWrite ) |
- VkFlags64( AccessFlagBits2KHR::eColorAttachmentRead ) | VkFlags64( AccessFlagBits2KHR::eColorAttachmentWrite ) |
- VkFlags64( AccessFlagBits2KHR::eDepthStencilAttachmentRead ) |
- VkFlags64( AccessFlagBits2KHR::eDepthStencilAttachmentWrite ) | VkFlags64( AccessFlagBits2KHR::eTransferRead ) |
- VkFlags64( AccessFlagBits2KHR::eTransferWrite ) | VkFlags64( AccessFlagBits2KHR::eHostRead ) |
- VkFlags64( AccessFlagBits2KHR::eHostWrite ) | VkFlags64( AccessFlagBits2KHR::eMemoryRead ) |
- VkFlags64( AccessFlagBits2KHR::eMemoryWrite ) | VkFlags64( AccessFlagBits2KHR::eShaderSampledRead ) |
- VkFlags64( AccessFlagBits2KHR::eShaderStorageRead ) | VkFlags64( AccessFlagBits2KHR::eShaderStorageWrite )
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- | VkFlags64( AccessFlagBits2KHR::eVideoDecodeRead ) | VkFlags64( AccessFlagBits2KHR::eVideoDecodeWrite ) |
- VkFlags64( AccessFlagBits2KHR::eVideoEncodeRead ) | VkFlags64( AccessFlagBits2KHR::eVideoEncodeWrite )
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- | VkFlags64( AccessFlagBits2KHR::eTransformFeedbackWriteEXT ) |
- VkFlags64( AccessFlagBits2KHR::eTransformFeedbackCounterReadEXT ) |
- VkFlags64( AccessFlagBits2KHR::eTransformFeedbackCounterWriteEXT ) |
- VkFlags64( AccessFlagBits2KHR::eConditionalRenderingReadEXT ) |
- VkFlags64( AccessFlagBits2KHR::eCommandPreprocessReadNV ) |
- VkFlags64( AccessFlagBits2KHR::eCommandPreprocessWriteNV ) |
- VkFlags64( AccessFlagBits2KHR::eFragmentShadingRateAttachmentRead ) |
- VkFlags64( AccessFlagBits2KHR::eAccelerationStructureRead ) |
- VkFlags64( AccessFlagBits2KHR::eAccelerationStructureWrite ) |
- VkFlags64( AccessFlagBits2KHR::eFragmentDensityMapReadEXT ) |
- VkFlags64( AccessFlagBits2KHR::eColorAttachmentReadNoncoherentEXT ) |
- VkFlags64( AccessFlagBits2KHR::eInvocationMaskReadHUAWEI )
- };
- };
+#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
+ //=== VK_EXT_directfb_surface ===
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2KHR operator|( AccessFlagBits2KHR bit0,
- AccessFlagBits2KHR bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return AccessFlags2KHR( bit0 ) | bit1;
- }
+ using DirectFBSurfaceCreateFlagsEXT = Flags<DirectFBSurfaceCreateFlagBitsEXT>;
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2KHR operator&(AccessFlagBits2KHR bit0,
- AccessFlagBits2KHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE std::string to_string( DirectFBSurfaceCreateFlagsEXT )
{
- return AccessFlags2KHR( bit0 ) & bit1;
+ return "{}";
}
+#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2KHR operator^( AccessFlagBits2KHR bit0,
- AccessFlagBits2KHR bit1 ) VULKAN_HPP_NOEXCEPT
- {
- return AccessFlags2KHR( bit0 ) ^ bit1;
- }
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR AccessFlags2KHR operator~( AccessFlagBits2KHR bits ) VULKAN_HPP_NOEXCEPT
- {
- return ~( AccessFlags2KHR( bits ) );
- }
+ using ImageFormatConstraintsFlagsFUCHSIA = Flags<ImageFormatConstraintsFlagBitsFUCHSIA>;
- VULKAN_HPP_INLINE std::string to_string( AccessFlags2KHR value )
+ VULKAN_HPP_INLINE std::string to_string( ImageFormatConstraintsFlagsFUCHSIA )
{
- if ( !value )
- return "{}";
-
- std::string result;
- if ( value & AccessFlagBits2KHR::eIndirectCommandRead )
- result += "IndirectCommandRead | ";
- if ( value & AccessFlagBits2KHR::eIndexRead )
- result += "IndexRead | ";
- if ( value & AccessFlagBits2KHR::eVertexAttributeRead )
- result += "VertexAttributeRead | ";
- if ( value & AccessFlagBits2KHR::eUniformRead )
- result += "UniformRead | ";
- if ( value & AccessFlagBits2KHR::eInputAttachmentRead )
- result += "InputAttachmentRead | ";
- if ( value & AccessFlagBits2KHR::eShaderRead )
- result += "ShaderRead | ";
- if ( value & AccessFlagBits2KHR::eShaderWrite )
- result += "ShaderWrite | ";
- if ( value & AccessFlagBits2KHR::eColorAttachmentRead )
- result += "ColorAttachmentRead | ";
- if ( value & AccessFlagBits2KHR::eColorAttachmentWrite )
- result += "ColorAttachmentWrite | ";
- if ( value & AccessFlagBits2KHR::eDepthStencilAttachmentRead )
- result += "DepthStencilAttachmentRead | ";
- if ( value & AccessFlagBits2KHR::eDepthStencilAttachmentWrite )
- result += "DepthStencilAttachmentWrite | ";
- if ( value & AccessFlagBits2KHR::eTransferRead )
- result += "TransferRead | ";
- if ( value & AccessFlagBits2KHR::eTransferWrite )
- result += "TransferWrite | ";
- if ( value & AccessFlagBits2KHR::eHostRead )
- result += "HostRead | ";
- if ( value & AccessFlagBits2KHR::eHostWrite )
- result += "HostWrite | ";
- if ( value & AccessFlagBits2KHR::eMemoryRead )
- result += "MemoryRead | ";
- if ( value & AccessFlagBits2KHR::eMemoryWrite )
- result += "MemoryWrite | ";
- if ( value & AccessFlagBits2KHR::eShaderSampledRead )
- result += "ShaderSampledRead | ";
- if ( value & AccessFlagBits2KHR::eShaderStorageRead )
- result += "ShaderStorageRead | ";
- if ( value & AccessFlagBits2KHR::eShaderStorageWrite )
- result += "ShaderStorageWrite | ";
-#if defined( VK_ENABLE_BETA_EXTENSIONS )
- if ( value & AccessFlagBits2KHR::eVideoDecodeRead )
- result += "VideoDecodeRead | ";
- if ( value & AccessFlagBits2KHR::eVideoDecodeWrite )
- result += "VideoDecodeWrite | ";
- if ( value & AccessFlagBits2KHR::eVideoEncodeRead )
- result += "VideoEncodeRead | ";
- if ( value & AccessFlagBits2KHR::eVideoEncodeWrite )
- result += "VideoEncodeWrite | ";
-#endif /*VK_ENABLE_BETA_EXTENSIONS*/
- if ( value & AccessFlagBits2KHR::eTransformFeedbackWriteEXT )
- result += "TransformFeedbackWriteEXT | ";
- if ( value & AccessFlagBits2KHR::eTransformFeedbackCounterReadEXT )
- result += "TransformFeedbackCounterReadEXT | ";
- if ( value & AccessFlagBits2KHR::eTransformFeedbackCounterWriteEXT )
- result += "TransformFeedbackCounterWriteEXT | ";
- if ( value & AccessFlagBits2KHR::eConditionalRenderingReadEXT )
- result += "ConditionalRenderingReadEXT | ";
- if ( value & AccessFlagBits2KHR::eCommandPreprocessReadNV )
- result += "CommandPreprocessReadNV | ";
- if ( value & AccessFlagBits2KHR::eCommandPreprocessWriteNV )
- result += "CommandPreprocessWriteNV | ";
- if ( value & AccessFlagBits2KHR::eFragmentShadingRateAttachmentRead )
- result += "FragmentShadingRateAttachmentRead | ";
- if ( value & AccessFlagBits2KHR::eAccelerationStructureRead )
- result += "AccelerationStructureRead | ";
- if ( value & AccessFlagBits2KHR::eAccelerationStructureWrite )
- result += "AccelerationStructureWrite | ";
- if ( value & AccessFlagBits2KHR::eFragmentDensityMapReadEXT )
- result += "FragmentDensityMapReadEXT | ";
- if ( value & AccessFlagBits2KHR::eColorAttachmentReadNoncoherentEXT )
- result += "ColorAttachmentReadNoncoherentEXT | ";
- if ( value & AccessFlagBits2KHR::eInvocationMaskReadHUAWEI )
- result += "InvocationMaskReadHUAWEI | ";
-
- return "{ " + result.substr( 0, result.size() - 3 ) + " }";
+ return "{}";
}
- using SubmitFlagsKHR = Flags<SubmitFlagBitsKHR>;
+ using ImageConstraintsInfoFlagsFUCHSIA = Flags<ImageConstraintsInfoFlagBitsFUCHSIA>;
template <>
- struct FlagTraits<SubmitFlagBitsKHR>
+ struct FlagTraits<ImageConstraintsInfoFlagBitsFUCHSIA>
{
enum : VkFlags
{
- allFlags = VkFlags( SubmitFlagBitsKHR::eProtected )
+ allFlags = VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely ) |
+ VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften ) |
+ VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely ) |
+ VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften ) |
+ VkFlags( ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional )
};
};
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlagsKHR operator|( SubmitFlagBitsKHR bit0,
- SubmitFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA
+ operator|( ImageConstraintsInfoFlagBitsFUCHSIA bit0, ImageConstraintsInfoFlagBitsFUCHSIA bit1 ) VULKAN_HPP_NOEXCEPT
{
- return SubmitFlagsKHR( bit0 ) | bit1;
+ return ImageConstraintsInfoFlagsFUCHSIA( bit0 ) | bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlagsKHR operator&(SubmitFlagBitsKHR bit0,
- SubmitFlagBitsKHR bit1)VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA
+ operator&( ImageConstraintsInfoFlagBitsFUCHSIA bit0, ImageConstraintsInfoFlagBitsFUCHSIA bit1 ) VULKAN_HPP_NOEXCEPT
{
- return SubmitFlagsKHR( bit0 ) & bit1;
+ return ImageConstraintsInfoFlagsFUCHSIA( bit0 ) & bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlagsKHR operator^( SubmitFlagBitsKHR bit0,
- SubmitFlagBitsKHR bit1 ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA
+ operator^( ImageConstraintsInfoFlagBitsFUCHSIA bit0, ImageConstraintsInfoFlagBitsFUCHSIA bit1 ) VULKAN_HPP_NOEXCEPT
{
- return SubmitFlagsKHR( bit0 ) ^ bit1;
+ return ImageConstraintsInfoFlagsFUCHSIA( bit0 ) ^ bit1;
}
- VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR SubmitFlagsKHR operator~( SubmitFlagBitsKHR bits ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFlagsFUCHSIA
+ operator~( ImageConstraintsInfoFlagBitsFUCHSIA bits ) VULKAN_HPP_NOEXCEPT
{
- return ~( SubmitFlagsKHR( bits ) );
+ return ~( ImageConstraintsInfoFlagsFUCHSIA( bits ) );
}
- VULKAN_HPP_INLINE std::string to_string( SubmitFlagsKHR value )
+ VULKAN_HPP_INLINE std::string to_string( ImageConstraintsInfoFlagsFUCHSIA value )
{
if ( !value )
return "{}";
std::string result;
- if ( value & SubmitFlagBitsKHR::eProtected )
- result += "Protected | ";
+ if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadRarely )
+ result += "CpuReadRarely | ";
+ if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuReadOften )
+ result += "CpuReadOften | ";
+ if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteRarely )
+ result += "CpuWriteRarely | ";
+ if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eCpuWriteOften )
+ result += "CpuWriteOften | ";
+ if ( value & ImageConstraintsInfoFlagBitsFUCHSIA::eProtectedOptional )
+ result += "ProtectedOptional | ";
return "{ " + result.substr( 0, result.size() - 3 ) + " }";
}
-
- //=== VK_NV_ray_tracing_motion_blur ===
-
- using AccelerationStructureMotionInfoFlagsNV = Flags<AccelerationStructureMotionInfoFlagBitsNV>;
-
- VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInfoFlagsNV )
- {
- return "{}";
- }
-
- using AccelerationStructureMotionInstanceFlagsNV = Flags<AccelerationStructureMotionInstanceFlagBitsNV>;
-
- VULKAN_HPP_INLINE std::string to_string( AccelerationStructureMotionInstanceFlagsNV )
- {
- return "{}";
- }
-
-#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
- //=== VK_EXT_directfb_surface ===
-
- using DirectFBSurfaceCreateFlagsEXT = Flags<DirectFBSurfaceCreateFlagBitsEXT>;
-
- VULKAN_HPP_INLINE std::string to_string( DirectFBSurfaceCreateFlagsEXT )
- {
- return "{}";
- }
-#endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
#if defined( VK_USE_PLATFORM_SCREEN_QNX )
//=== VK_QNX_screen_surface ===
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h b/thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h
index d558715738..61774ff9cb 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_fuchsia.h
@@ -2,7 +2,7 @@
#define VULKAN_FUCHSIA_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
@@ -114,6 +114,143 @@ VKAPI_ATTR VkResult VKAPI_CALL vkGetSemaphoreZirconHandleFUCHSIA(
zx_handle_t* pZirconHandle);
#endif
+
+#define VK_FUCHSIA_buffer_collection 1
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VkBufferCollectionFUCHSIA)
+#define VK_FUCHSIA_BUFFER_COLLECTION_SPEC_VERSION 2
+#define VK_FUCHSIA_BUFFER_COLLECTION_EXTENSION_NAME "VK_FUCHSIA_buffer_collection"
+typedef VkFlags VkImageFormatConstraintsFlagsFUCHSIA;
+
+typedef enum VkImageConstraintsInfoFlagBitsFUCHSIA {
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA = 0x00000001,
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA = 0x00000002,
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA = 0x00000004,
+ VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA = 0x00000008,
+ VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA = 0x00000010,
+ VK_IMAGE_CONSTRAINTS_INFO_FLAG_BITS_MAX_ENUM_FUCHSIA = 0x7FFFFFFF
+} VkImageConstraintsInfoFlagBitsFUCHSIA;
+typedef VkFlags VkImageConstraintsInfoFlagsFUCHSIA;
+typedef struct VkBufferCollectionCreateInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ zx_handle_t collectionToken;
+} VkBufferCollectionCreateInfoFUCHSIA;
+
+typedef struct VkImportMemoryBufferCollectionFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCollectionFUCHSIA collection;
+ uint32_t index;
+} VkImportMemoryBufferCollectionFUCHSIA;
+
+typedef struct VkBufferCollectionImageCreateInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCollectionFUCHSIA collection;
+ uint32_t index;
+} VkBufferCollectionImageCreateInfoFUCHSIA;
+
+typedef struct VkBufferCollectionConstraintsInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t minBufferCount;
+ uint32_t maxBufferCount;
+ uint32_t minBufferCountForCamping;
+ uint32_t minBufferCountForDedicatedSlack;
+ uint32_t minBufferCountForSharedSlack;
+} VkBufferCollectionConstraintsInfoFUCHSIA;
+
+typedef struct VkBufferConstraintsInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCreateInfo createInfo;
+ VkFormatFeatureFlags requiredFormatFeatures;
+ VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints;
+} VkBufferConstraintsInfoFUCHSIA;
+
+typedef struct VkBufferCollectionBufferCreateInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ VkBufferCollectionFUCHSIA collection;
+ uint32_t index;
+} VkBufferCollectionBufferCreateInfoFUCHSIA;
+
+typedef struct VkSysmemColorSpaceFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t colorSpace;
+} VkSysmemColorSpaceFUCHSIA;
+
+typedef struct VkBufferCollectionPropertiesFUCHSIA {
+ VkStructureType sType;
+ void* pNext;
+ uint32_t memoryTypeBits;
+ uint32_t bufferCount;
+ uint32_t createInfoIndex;
+ uint64_t sysmemPixelFormat;
+ VkFormatFeatureFlags formatFeatures;
+ VkSysmemColorSpaceFUCHSIA sysmemColorSpaceIndex;
+ VkComponentMapping samplerYcbcrConversionComponents;
+ VkSamplerYcbcrModelConversion suggestedYcbcrModel;
+ VkSamplerYcbcrRange suggestedYcbcrRange;
+ VkChromaLocation suggestedXChromaOffset;
+ VkChromaLocation suggestedYChromaOffset;
+} VkBufferCollectionPropertiesFUCHSIA;
+
+typedef struct VkImageFormatConstraintsInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ VkImageCreateInfo imageCreateInfo;
+ VkFormatFeatureFlags requiredFormatFeatures;
+ VkImageFormatConstraintsFlagsFUCHSIA flags;
+ uint64_t sysmemPixelFormat;
+ uint32_t colorSpaceCount;
+ const VkSysmemColorSpaceFUCHSIA* pColorSpaces;
+} VkImageFormatConstraintsInfoFUCHSIA;
+
+typedef struct VkImageConstraintsInfoFUCHSIA {
+ VkStructureType sType;
+ const void* pNext;
+ uint32_t formatConstraintsCount;
+ const VkImageFormatConstraintsInfoFUCHSIA* pFormatConstraints;
+ VkBufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints;
+ VkImageConstraintsInfoFlagsFUCHSIA flags;
+} VkImageConstraintsInfoFUCHSIA;
+
+typedef VkResult (VKAPI_PTR *PFN_vkCreateBufferCollectionFUCHSIA)(VkDevice device, const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkBufferCollectionFUCHSIA* pCollection);
+typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionImageConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
+typedef VkResult (VKAPI_PTR *PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
+typedef void (VKAPI_PTR *PFN_vkDestroyBufferCollectionFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, const VkAllocationCallbacks* pAllocator);
+typedef VkResult (VKAPI_PTR *PFN_vkGetBufferCollectionPropertiesFUCHSIA)(VkDevice device, VkBufferCollectionFUCHSIA collection, VkBufferCollectionPropertiesFUCHSIA* pProperties);
+
+#ifndef VK_NO_PROTOTYPES
+VKAPI_ATTR VkResult VKAPI_CALL vkCreateBufferCollectionFUCHSIA(
+ VkDevice device,
+ const VkBufferCollectionCreateInfoFUCHSIA* pCreateInfo,
+ const VkAllocationCallbacks* pAllocator,
+ VkBufferCollectionFUCHSIA* pCollection);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionImageConstraintsFUCHSIA(
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkImageConstraintsInfoFUCHSIA* pImageConstraintsInfo);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkBufferConstraintsInfoFUCHSIA* pBufferConstraintsInfo);
+
+VKAPI_ATTR void VKAPI_CALL vkDestroyBufferCollectionFUCHSIA(
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ const VkAllocationCallbacks* pAllocator);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkGetBufferCollectionPropertiesFUCHSIA(
+ VkDevice device,
+ VkBufferCollectionFUCHSIA collection,
+ VkBufferCollectionPropertiesFUCHSIA* pProperties);
+#endif
+
#ifdef __cplusplus
}
#endif
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_funcs.hpp b/thirdparty/vulkan/include/vulkan/vulkan_funcs.hpp
index d638fa774f..7a1a04c115 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_funcs.hpp
+++ b/thirdparty/vulkan/include/vulkan/vulkan_funcs.hpp
@@ -1,4 +1,4 @@
-// Copyright 2015-2021 The Khronos Group Inc.
+// Copyright 2015-2022 The Khronos Group Inc.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
@@ -18,10 +18,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- createInstance( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Instance * pInstance,
- Dispatch const & d ) VULKAN_HPP_NOEXCEPT
+ createInstance( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Instance * pInstance,
+ Dispatch const & d ) VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>( d.vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo *>( pCreateInfo ),
@@ -33,9 +33,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::Instance>::type
- createInstance( const InstanceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d )
+ createInstance( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d )
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Instance instance;
@@ -51,9 +51,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Instance, Dispatch>>::type
- createInstanceUnique( const InstanceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d )
+ createInstanceUnique( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d )
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Instance instance;
@@ -79,8 +79,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Instance::destroy( Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Instance::destroy( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyInstance( m_instance,
@@ -91,7 +91,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount,
+ Instance::enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount,
VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -118,12 +118,15 @@ namespace VULKAN_HPP_NAMESPACE
physicalDevices.resize( physicalDeviceCount );
result = static_cast<Result>( d.vkEnumeratePhysicalDevices(
m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice *>( physicalDevices.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( physicalDeviceCount < physicalDevices.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- physicalDevices.resize( physicalDeviceCount );
+ VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() );
+ if ( physicalDeviceCount < physicalDevices.size() )
+ {
+ physicalDevices.resize( physicalDeviceCount );
+ }
}
return createResultValue(
result, physicalDevices, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDevices" );
@@ -149,12 +152,15 @@ namespace VULKAN_HPP_NAMESPACE
physicalDevices.resize( physicalDeviceCount );
result = static_cast<Result>( d.vkEnumeratePhysicalDevices(
m_instance, &physicalDeviceCount, reinterpret_cast<VkPhysicalDevice *>( physicalDevices.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( physicalDeviceCount < physicalDevices.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- physicalDevices.resize( physicalDeviceCount );
+ VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() );
+ if ( physicalDeviceCount < physicalDevices.size() )
+ {
+ physicalDevices.resize( physicalDeviceCount );
+ }
}
return createResultValue(
result, physicalDevices, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDevices" );
@@ -208,7 +214,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
+ PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
VULKAN_HPP_NAMESPACE::ImageType type,
VULKAN_HPP_NAMESPACE::ImageTiling tiling,
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
@@ -308,7 +314,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, QueueFamilyProperties>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<QueueFamilyProperties, QueueFamilyPropertiesAllocator>
- PhysicalDevice::getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator,
+ PhysicalDevice::getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -339,7 +345,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties
- PhysicalDevice::getMemoryProperties( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getMemoryProperties( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties;
@@ -387,7 +393,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo * pCreateInfo,
+ PhysicalDevice::createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Device * pDevice,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -402,9 +408,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Device>::type
- PhysicalDevice::createDevice( const DeviceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ PhysicalDevice::createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Device device;
@@ -421,9 +427,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Device, Dispatch>>::type
- PhysicalDevice::createDeviceUnique( const DeviceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ PhysicalDevice::createDeviceUnique( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Device device;
@@ -450,8 +456,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDevice( m_device,
@@ -462,10 +468,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- enumerateInstanceExtensionProperties( const char * pLayerName,
- uint32_t * pPropertyCount,
- VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties,
- Dispatch const & d ) VULKAN_HPP_NOEXCEPT
+ enumerateInstanceExtensionProperties( const char * pLayerName,
+ uint32_t * pPropertyCount,
+ VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties,
+ Dispatch const & d ) VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>( d.vkEnumerateInstanceExtensionProperties(
@@ -493,12 +499,15 @@ namespace VULKAN_HPP_NAMESPACE
d.vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr,
&propertyCount,
reinterpret_cast<VkExtensionProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceExtensionProperties" );
@@ -529,12 +538,15 @@ namespace VULKAN_HPP_NAMESPACE
d.vkEnumerateInstanceExtensionProperties( layerName ? layerName->c_str() : nullptr,
&propertyCount,
reinterpret_cast<VkExtensionProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceExtensionProperties" );
@@ -543,7 +555,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::enumerateDeviceExtensionProperties( const char * pLayerName,
+ PhysicalDevice::enumerateDeviceExtensionProperties( const char * pLayerName,
uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -576,12 +588,15 @@ namespace VULKAN_HPP_NAMESPACE
layerName ? layerName->c_str() : nullptr,
&propertyCount,
reinterpret_cast<VkExtensionProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" );
@@ -613,12 +628,15 @@ namespace VULKAN_HPP_NAMESPACE
layerName ? layerName->c_str() : nullptr,
&propertyCount,
reinterpret_cast<VkExtensionProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" );
@@ -627,9 +645,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- enumerateInstanceLayerProperties( uint32_t * pPropertyCount,
- VULKAN_HPP_NAMESPACE::LayerProperties * pProperties,
- Dispatch const & d ) VULKAN_HPP_NOEXCEPT
+ enumerateInstanceLayerProperties( uint32_t * pPropertyCount,
+ VULKAN_HPP_NAMESPACE::LayerProperties * pProperties,
+ Dispatch const & d ) VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>(
@@ -654,12 +672,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkEnumerateInstanceLayerProperties(
&propertyCount, reinterpret_cast<VkLayerProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue( result, properties, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceLayerProperties" );
}
@@ -684,12 +705,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkEnumerateInstanceLayerProperties(
&propertyCount, reinterpret_cast<VkLayerProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue( result, properties, VULKAN_HPP_NAMESPACE_STRING "::enumerateInstanceLayerProperties" );
}
@@ -697,7 +721,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::enumerateDeviceLayerProperties( uint32_t * pPropertyCount,
+ PhysicalDevice::enumerateDeviceLayerProperties( uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::LayerProperties * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -724,12 +748,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkEnumerateDeviceLayerProperties(
m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" );
@@ -756,12 +783,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkEnumerateDeviceLayerProperties(
m_physicalDevice, &propertyCount, reinterpret_cast<VkLayerProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" );
@@ -781,7 +811,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Queue
- Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Queue queue;
@@ -804,7 +834,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Queue::submit( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo> const & submits,
+ Queue::submit( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo> const & submits,
VULKAN_HPP_NAMESPACE::Fence fence,
Dispatch const & d ) const
{
@@ -855,7 +885,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo * pAllocateInfo,
+ Device::allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo * pAllocateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DeviceMemory * pMemory,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -871,9 +901,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DeviceMemory>::type
- Device::allocateMemory( const MemoryAllocateInfo & allocateInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DeviceMemory memory;
@@ -890,9 +920,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DeviceMemory, Dispatch>>::type
- Device::allocateMemoryUnique( const MemoryAllocateInfo & allocateInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::allocateMemoryUnique( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DeviceMemory memory;
@@ -921,9 +951,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkFreeMemory( m_device,
@@ -945,9 +975,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::free( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::free( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkFreeMemory( m_device,
@@ -1005,7 +1035,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::flushMappedMemoryRanges( uint32_t memoryRangeCount,
+ Device::flushMappedMemoryRanges( uint32_t memoryRangeCount,
const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -1017,7 +1047,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::flushMappedMemoryRanges( ArrayProxy<const VULKAN_HPP_NAMESPACE::MappedMemoryRange> const & memoryRanges,
+ Device::flushMappedMemoryRanges( ArrayProxy<const VULKAN_HPP_NAMESPACE::MappedMemoryRange> const & memoryRanges,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -1029,7 +1059,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::invalidateMappedMemoryRanges( uint32_t memoryRangeCount,
+ Device::invalidateMappedMemoryRanges( uint32_t memoryRangeCount,
const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -1204,7 +1234,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageMemoryRequirementsAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements, SparseImageMemoryRequirementsAllocator>
- Device::getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d ) const
+ Device::getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageMemoryRequirements, SparseImageMemoryRequirementsAllocator> sparseMemoryRequirements;
@@ -1276,7 +1306,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename SparseImageFormatPropertiesAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties, SparseImageFormatPropertiesAllocator>
- PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
+ PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
VULKAN_HPP_NAMESPACE::ImageType type,
VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples,
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
@@ -1352,7 +1382,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Queue::bindSparse( uint32_t bindInfoCount,
+ Queue::bindSparse( uint32_t bindInfoCount,
const VULKAN_HPP_NAMESPACE::BindSparseInfo * pBindInfo,
VULKAN_HPP_NAMESPACE::Fence fence,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -1367,7 +1397,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Queue::bindSparse( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindSparseInfo> const & bindInfo,
+ Queue::bindSparse( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindSparseInfo> const & bindInfo,
VULKAN_HPP_NAMESPACE::Fence fence,
Dispatch const & d ) const
{
@@ -1383,7 +1413,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo * pCreateInfo,
+ Device::createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Fence * pFence,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -1398,9 +1428,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type
- Device::createFence( const FenceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Fence fence;
@@ -1417,9 +1447,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Fence, Dispatch>>::type
- Device::createFenceUnique( const FenceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createFenceUnique( const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Fence fence;
@@ -1448,9 +1478,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyFence( VULKAN_HPP_NAMESPACE::Fence fence,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyFence( VULKAN_HPP_NAMESPACE::Fence fence,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyFence( m_device,
@@ -1472,9 +1502,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Fence fence,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Fence fence,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyFence( m_device,
@@ -1541,7 +1571,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::waitForFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences,
+ Device::waitForFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences,
VULKAN_HPP_NAMESPACE::Bool32 waitAll,
uint64_t timeout,
Dispatch const & d ) const
@@ -1560,7 +1590,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo * pCreateInfo,
+ Device::createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Semaphore * pSemaphore,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -1576,9 +1606,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::Semaphore>::type
- Device::createSemaphore( const SemaphoreCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Semaphore semaphore;
@@ -1595,9 +1625,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Semaphore, Dispatch>>::type
- Device::createSemaphoreUnique( const SemaphoreCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSemaphoreUnique( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Semaphore semaphore;
@@ -1626,9 +1656,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySemaphore( m_device,
@@ -1650,9 +1680,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySemaphore( m_device,
@@ -1664,7 +1694,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo * pCreateInfo,
+ Device::createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Event * pEvent,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -1679,9 +1709,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Event>::type
- Device::createEvent( const EventCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Event event;
@@ -1698,9 +1728,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Event, Dispatch>>::type
- Device::createEventUnique( const EventCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createEventUnique( const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Event event;
@@ -1729,9 +1759,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyEvent( VULKAN_HPP_NAMESPACE::Event event,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyEvent( VULKAN_HPP_NAMESPACE::Event event,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyEvent( m_device,
@@ -1753,9 +1783,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Event event,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Event event,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyEvent( m_device,
@@ -1797,7 +1827,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::setEvent( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const
+ Device::setEvent( VULKAN_HPP_NAMESPACE::Event event, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkSetEvent( m_device, static_cast<VkEvent>( event ) ) );
@@ -1826,7 +1856,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo * pCreateInfo,
+ Device::createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::QueryPool * pQueryPool,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -1842,9 +1872,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::QueryPool>::type
- Device::createQueryPool( const QueryPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::QueryPool queryPool;
@@ -1861,9 +1891,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::QueryPool, Dispatch>>::type
- Device::createQueryPoolUnique( const QueryPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createQueryPoolUnique( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::QueryPool queryPool;
@@ -1892,9 +1922,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyQueryPool( m_device,
@@ -1916,9 +1946,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyQueryPool( m_device,
@@ -1930,7 +1960,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ Device::getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
uint32_t firstQuery,
uint32_t queryCount,
size_t dataSize,
@@ -1976,8 +2006,8 @@ namespace VULKAN_HPP_NAMESPACE
{ VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } );
}
- template <typename T, typename Allocator, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<T, Allocator>>
+ template <typename DataType, typename Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<DataType, Allocator>>
Device::getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
uint32_t firstQuery,
uint32_t queryCount,
@@ -1987,13 +2017,13 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T, Allocator> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>( d.vkGetQueryPoolResults( m_device,
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType, Allocator> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>( d.vkGetQueryPoolResults( m_device,
static_cast<VkQueryPool>( queryPool ),
firstQuery,
queryCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ),
static_cast<VkDeviceSize>( stride ),
static_cast<VkQueryResultFlags>( flags ) ) );
@@ -2003,8 +2033,8 @@ namespace VULKAN_HPP_NAMESPACE
{ VULKAN_HPP_NAMESPACE::Result::eSuccess, VULKAN_HPP_NAMESPACE::Result::eNotReady } );
}
- template <typename T, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<T>
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<DataType>
Device::getQueryPoolResult( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
uint32_t firstQuery,
uint32_t queryCount,
@@ -2013,12 +2043,12 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- T data;
- Result result = static_cast<Result>( d.vkGetQueryPoolResults( m_device,
+ DataType data;
+ Result result = static_cast<Result>( d.vkGetQueryPoolResults( m_device,
static_cast<VkQueryPool>( queryPool ),
firstQuery,
queryCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ),
static_cast<VkDeviceSize>( stride ),
static_cast<VkQueryResultFlags>( flags ) ) );
@@ -2031,7 +2061,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo,
+ Device::createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Buffer * pBuffer,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2046,9 +2076,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Buffer>::type
- Device::createBuffer( const BufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Buffer buffer;
@@ -2065,9 +2095,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Buffer, Dispatch>>::type
- Device::createBufferUnique( const BufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createBufferUnique( const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Buffer buffer;
@@ -2096,9 +2126,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyBuffer( m_device,
@@ -2120,9 +2150,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Buffer buffer,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Buffer buffer,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyBuffer( m_device,
@@ -2134,7 +2164,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo * pCreateInfo,
+ Device::createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::BufferView * pView,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2150,9 +2180,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::BufferView>::type
- Device::createBufferView( const BufferViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::BufferView view;
@@ -2169,9 +2199,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::BufferView, Dispatch>>::type
- Device::createBufferViewUnique( const BufferViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createBufferViewUnique( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::BufferView view;
@@ -2201,9 +2231,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyBufferView( m_device,
@@ -2226,9 +2256,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyBufferView( m_device,
@@ -2240,7 +2270,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo,
+ Device::createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Image * pImage,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2255,9 +2285,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Image>::type
- Device::createImage( const ImageCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Image image;
@@ -2274,9 +2304,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Image, Dispatch>>::type
- Device::createImageUnique( const ImageCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createImageUnique( const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Image image;
@@ -2305,9 +2335,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyImage( VULKAN_HPP_NAMESPACE::Image image,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyImage( VULKAN_HPP_NAMESPACE::Image image,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyImage( m_device,
@@ -2329,9 +2359,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Image image,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Image image,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyImage( m_device,
@@ -2357,9 +2387,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout
- Device::getImageSubresourceLayout( VULKAN_HPP_NAMESPACE::Image image,
- const ImageSubresource & subresource,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageSubresourceLayout( VULKAN_HPP_NAMESPACE::Image image,
+ const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SubresourceLayout layout;
@@ -2373,7 +2403,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo * pCreateInfo,
+ Device::createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::ImageView * pView,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2389,9 +2419,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageView>::type
- Device::createImageView( const ImageViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ImageView view;
@@ -2408,9 +2438,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::ImageView, Dispatch>>::type
- Device::createImageViewUnique( const ImageViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createImageViewUnique( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ImageView view;
@@ -2439,9 +2469,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyImageView( m_device,
@@ -2463,9 +2493,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ImageView imageView,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ImageView imageView,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyImageView( m_device,
@@ -2477,7 +2507,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo,
+ Device::createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::ShaderModule * pShaderModule,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2494,9 +2524,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::ShaderModule>::type
- Device::createShaderModule( const ShaderModuleCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ShaderModule shaderModule;
@@ -2513,9 +2543,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::ShaderModule, Dispatch>>::type
- Device::createShaderModuleUnique( const ShaderModuleCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createShaderModuleUnique( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ShaderModule shaderModule;
@@ -2545,9 +2575,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyShaderModule( m_device,
@@ -2570,9 +2601,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyShaderModule( m_device,
@@ -2584,7 +2615,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo * pCreateInfo,
+ Device::createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::PipelineCache * pPipelineCache,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2601,9 +2632,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::PipelineCache>::type
- Device::createPipelineCache( const PipelineCacheCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache;
@@ -2620,9 +2651,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PipelineCache, Dispatch>>::type
- Device::createPipelineCacheUnique( const PipelineCacheCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createPipelineCacheUnique( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache;
@@ -2652,9 +2683,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPipelineCache( m_device,
@@ -2677,9 +2709,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPipelineCache( m_device,
@@ -2691,7 +2723,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
size_t * pDataSize,
void * pData,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2704,7 +2736,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Uint8_tAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<std::vector<uint8_t, Uint8_tAllocator>>::type
- Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, Dispatch const & d ) const
+ Device::getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<uint8_t, Uint8_tAllocator> data;
@@ -2721,12 +2753,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPipelineCache>( pipelineCache ),
&dataSize,
reinterpret_cast<void *>( data.data() ) ) );
- VULKAN_HPP_ASSERT( dataSize <= data.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( dataSize < data.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- data.resize( dataSize );
+ VULKAN_HPP_ASSERT( dataSize <= data.size() );
+ if ( dataSize < data.size() )
+ {
+ data.resize( dataSize );
+ }
}
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineCacheData" );
}
@@ -2755,12 +2790,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPipelineCache>( pipelineCache ),
&dataSize,
reinterpret_cast<void *>( data.data() ) ) );
- VULKAN_HPP_ASSERT( dataSize <= data.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( dataSize < data.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- data.resize( dataSize );
+ VULKAN_HPP_ASSERT( dataSize <= data.size() );
+ if ( dataSize < data.size() )
+ {
+ data.resize( dataSize );
+ }
}
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineCacheData" );
}
@@ -2768,7 +2806,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache,
+ Device::mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache,
uint32_t srcCacheCount,
const VULKAN_HPP_NAMESPACE::PipelineCache * pSrcCaches,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -2799,7 +2837,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Device::createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
uint32_t createInfoCount,
const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo * pCreateInfos,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
@@ -2818,16 +2856,16 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createGraphicsPipelines(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size() );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size() );
+ Result result = static_cast<Result>(
d.vkCreateGraphicsPipelines( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
createInfos.size(),
@@ -2846,17 +2884,17 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch,
typename B,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createGraphicsPipelines(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
+ Result result = static_cast<Result>(
d.vkCreateGraphicsPipelines( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
createInfos.size(),
@@ -2872,15 +2910,15 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<Pipeline>
- Device::createGraphicsPipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ Device::createGraphicsPipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- Pipeline pipeline;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::Pipeline pipeline;
+ Result result = static_cast<Result>(
d.vkCreateGraphicsPipelines( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
1,
@@ -2901,7 +2939,7 @@ namespace VULKAN_HPP_NAMESPACE
Device::createGraphicsPipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -2941,7 +2979,7 @@ namespace VULKAN_HPP_NAMESPACE
Device::createGraphicsPipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
@@ -2975,10 +3013,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<UniqueHandle<Pipeline, Dispatch>>
- Device::createGraphicsPipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createGraphicsPipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Pipeline pipeline;
@@ -3003,7 +3041,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Device::createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
uint32_t createInfoCount,
const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo * pCreateInfos,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
@@ -3022,16 +3060,16 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createComputePipelines(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size() );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size() );
+ Result result = static_cast<Result>(
d.vkCreateComputePipelines( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
createInfos.size(),
@@ -3050,17 +3088,17 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch,
typename B,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createComputePipelines(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
+ Result result = static_cast<Result>(
d.vkCreateComputePipelines( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
createInfos.size(),
@@ -3076,15 +3114,15 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<Pipeline>
- Device::createComputePipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ Device::createComputePipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- Pipeline pipeline;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::Pipeline pipeline;
+ Result result = static_cast<Result>(
d.vkCreateComputePipelines( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
1,
@@ -3105,7 +3143,7 @@ namespace VULKAN_HPP_NAMESPACE
Device::createComputePipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -3145,7 +3183,7 @@ namespace VULKAN_HPP_NAMESPACE
Device::createComputePipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
@@ -3179,10 +3217,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<UniqueHandle<Pipeline, Dispatch>>
- Device::createComputePipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createComputePipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Pipeline pipeline;
@@ -3217,9 +3255,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPipeline( m_device,
@@ -3241,9 +3279,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPipeline( m_device,
@@ -3255,7 +3293,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo * pCreateInfo,
+ Device::createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::PipelineLayout * pPipelineLayout,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -3272,9 +3310,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::PipelineLayout>::type
- Device::createPipelineLayout( const PipelineLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout;
@@ -3291,9 +3329,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PipelineLayout, Dispatch>>::type
- Device::createPipelineLayoutUnique( const PipelineLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createPipelineLayoutUnique( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout;
@@ -3323,9 +3361,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPipelineLayout( m_device,
@@ -3348,9 +3387,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPipelineLayout( m_device,
@@ -3362,7 +3401,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo * pCreateInfo,
+ Device::createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Sampler * pSampler,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -3378,9 +3417,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::Sampler>::type
- Device::createSampler( const SamplerCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Sampler sampler;
@@ -3397,9 +3436,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Sampler, Dispatch>>::type
- Device::createSamplerUnique( const SamplerCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSamplerUnique( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Sampler sampler;
@@ -3428,9 +3467,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySampler( m_device,
@@ -3452,9 +3491,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Sampler sampler,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Sampler sampler,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySampler( m_device,
@@ -3466,7 +3505,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo,
+ Device::createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayout,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -3483,9 +3522,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorSetLayout>::type
- Device::createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorSetLayout setLayout;
@@ -3502,9 +3541,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorSetLayout, Dispatch>>::type
- Device::createDescriptorSetLayoutUnique( const DescriptorSetLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorSetLayoutUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorSetLayout setLayout;
@@ -3536,9 +3575,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- Device::destroyDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::destroyDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDescriptorSetLayout( m_device,
@@ -3561,9 +3600,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDescriptorSetLayout( m_device,
@@ -3575,7 +3614,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo * pCreateInfo,
+ Device::createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DescriptorPool * pDescriptorPool,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -3592,9 +3631,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorPool>::type
- Device::createDescriptorPool( const DescriptorPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool;
@@ -3611,9 +3650,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorPool, Dispatch>>::type
- Device::createDescriptorPoolUnique( const DescriptorPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorPoolUnique( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool;
@@ -3643,9 +3682,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDescriptorPool( m_device,
@@ -3668,9 +3708,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDescriptorPool( m_device,
@@ -3706,7 +3746,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo * pAllocateInfo,
+ Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo * pAllocateInfo,
VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -3720,12 +3760,14 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename DescriptorSetAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<DescriptorSet, DescriptorSetAllocator>>::type
- Device::allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d ) const
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::DescriptorSet, DescriptorSetAllocator>>::type
+ Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<DescriptorSet, DescriptorSetAllocator> descriptorSets( allocateInfo.descriptorSetCount );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::DescriptorSet, DescriptorSetAllocator> descriptorSets(
+ allocateInfo.descriptorSetCount );
+ Result result = static_cast<Result>(
d.vkAllocateDescriptorSets( m_device,
reinterpret_cast<const VkDescriptorSetAllocateInfo *>( &allocateInfo ),
reinterpret_cast<VkDescriptorSet *>( descriptorSets.data() ) ) );
@@ -3737,15 +3779,15 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, DescriptorSet>::value, int>::type>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<DescriptorSet, DescriptorSetAllocator>>::type
- Device::allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo,
- DescriptorSetAllocator & descriptorSetAllocator,
- Dispatch const & d ) const
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::DescriptorSet, DescriptorSetAllocator>>::type
+ Device::allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
+ DescriptorSetAllocator & descriptorSetAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<DescriptorSet, DescriptorSetAllocator> descriptorSets( allocateInfo.descriptorSetCount,
- descriptorSetAllocator );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::DescriptorSet, DescriptorSetAllocator> descriptorSets(
+ allocateInfo.descriptorSetCount, descriptorSetAllocator );
+ Result result = static_cast<Result>(
d.vkAllocateDescriptorSets( m_device,
reinterpret_cast<const VkDescriptorSetAllocateInfo *>( &allocateInfo ),
reinterpret_cast<VkDescriptorSet *>( descriptorSets.data() ) ) );
@@ -3756,7 +3798,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch, typename DescriptorSetAllocator>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<std::vector<UniqueHandle<DescriptorSet, Dispatch>, DescriptorSetAllocator>>::type
- Device::allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo, Dispatch const & d ) const
+ Device::allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<UniqueHandle<DescriptorSet, Dispatch>, DescriptorSetAllocator> uniqueDescriptorSets;
@@ -3785,9 +3828,9 @@ namespace VULKAN_HPP_NAMESPACE
int>::type>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<std::vector<UniqueHandle<DescriptorSet, Dispatch>, DescriptorSetAllocator>>::type
- Device::allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo,
- DescriptorSetAllocator & descriptorSetAllocator,
- Dispatch const & d ) const
+ Device::allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
+ DescriptorSetAllocator & descriptorSetAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<UniqueHandle<DescriptorSet, Dispatch>, DescriptorSetAllocator> uniqueDescriptorSets(
@@ -3908,7 +3951,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo * pCreateInfo,
+ Device::createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Framebuffer * pFramebuffer,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -3924,9 +3967,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::Framebuffer>::type
- Device::createFramebuffer( const FramebufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Framebuffer framebuffer;
@@ -3943,9 +3986,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Framebuffer, Dispatch>>::type
- Device::createFramebufferUnique( const FramebufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createFramebufferUnique( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Framebuffer framebuffer;
@@ -3975,9 +4018,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyFramebuffer( m_device,
@@ -4000,9 +4044,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyFramebuffer( m_device,
@@ -4014,7 +4058,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo * pCreateInfo,
+ Device::createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -4030,9 +4074,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::RenderPass>::type
- Device::createRenderPass( const RenderPassCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RenderPass renderPass;
@@ -4049,9 +4093,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::RenderPass, Dispatch>>::type
- Device::createRenderPassUnique( const RenderPassCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createRenderPassUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RenderPass renderPass;
@@ -4081,9 +4125,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyRenderPass( m_device,
@@ -4106,9 +4150,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyRenderPass( m_device,
@@ -4144,7 +4188,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo * pCreateInfo,
+ Device::createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::CommandPool * pCommandPool,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -4160,9 +4204,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::CommandPool>::type
- Device::createCommandPool( const CommandPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::CommandPool commandPool;
@@ -4179,9 +4223,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::CommandPool, Dispatch>>::type
- Device::createCommandPoolUnique( const CommandPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createCommandPoolUnique( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::CommandPool commandPool;
@@ -4211,9 +4255,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyCommandPool( m_device,
@@ -4236,9 +4281,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyCommandPool( m_device,
@@ -4251,7 +4296,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
+ Device::resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -4275,7 +4320,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo * pAllocateInfo,
+ Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo * pAllocateInfo,
VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -4289,12 +4334,14 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename CommandBufferAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<CommandBuffer, CommandBufferAllocator>>::type
- Device::allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo, Dispatch const & d ) const
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::CommandBuffer, CommandBufferAllocator>>::type
+ Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<CommandBuffer, CommandBufferAllocator> commandBuffers( allocateInfo.commandBufferCount );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::CommandBuffer, CommandBufferAllocator> commandBuffers(
+ allocateInfo.commandBufferCount );
+ Result result = static_cast<Result>(
d.vkAllocateCommandBuffers( m_device,
reinterpret_cast<const VkCommandBufferAllocateInfo *>( &allocateInfo ),
reinterpret_cast<VkCommandBuffer *>( commandBuffers.data() ) ) );
@@ -4306,15 +4353,15 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, CommandBuffer>::value, int>::type>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<CommandBuffer, CommandBufferAllocator>>::type
- Device::allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo,
- CommandBufferAllocator & commandBufferAllocator,
- Dispatch const & d ) const
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::CommandBuffer, CommandBufferAllocator>>::type
+ Device::allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
+ CommandBufferAllocator & commandBufferAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<CommandBuffer, CommandBufferAllocator> commandBuffers( allocateInfo.commandBufferCount,
- commandBufferAllocator );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::CommandBuffer, CommandBufferAllocator> commandBuffers(
+ allocateInfo.commandBufferCount, commandBufferAllocator );
+ Result result = static_cast<Result>(
d.vkAllocateCommandBuffers( m_device,
reinterpret_cast<const VkCommandBufferAllocateInfo *>( &allocateInfo ),
reinterpret_cast<VkCommandBuffer *>( commandBuffers.data() ) ) );
@@ -4325,7 +4372,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch, typename CommandBufferAllocator>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<std::vector<UniqueHandle<CommandBuffer, Dispatch>, CommandBufferAllocator>>::type
- Device::allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo, Dispatch const & d ) const
+ Device::allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<UniqueHandle<CommandBuffer, Dispatch>, CommandBufferAllocator> uniqueCommandBuffers;
@@ -4354,9 +4402,9 @@ namespace VULKAN_HPP_NAMESPACE
int>::type>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<std::vector<UniqueHandle<CommandBuffer, Dispatch>, CommandBufferAllocator>>::type
- Device::allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo,
- CommandBufferAllocator & commandBufferAllocator,
- Dispatch const & d ) const
+ Device::allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
+ CommandBufferAllocator & commandBufferAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<UniqueHandle<CommandBuffer, Dispatch>, CommandBufferAllocator> uniqueCommandBuffers(
@@ -4448,7 +4496,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- CommandBuffer::begin( const CommandBufferBeginInfo & beginInfo, Dispatch const & d ) const
+ CommandBuffer::begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -4977,17 +5025,17 @@ namespace VULKAN_HPP_NAMESPACE
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename T, typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- ArrayProxy<const T> const & data,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ ArrayProxy<const DataType> const & data,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdUpdateBuffer( m_commandBuffer,
static_cast<VkBuffer>( dstBuffer ),
static_cast<VkDeviceSize>( dstOffset ),
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<const void *>( data.data() ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -5029,7 +5077,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_INLINE void
CommandBuffer::clearColorImage( VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearColorValue & color,
+ const VULKAN_HPP_NAMESPACE::ClearColorValue & color,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -5064,9 +5112,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- CommandBuffer::clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image,
- VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearDepthStencilValue & depthStencil,
+ CommandBuffer::clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image,
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
+ const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -5356,11 +5404,11 @@ namespace VULKAN_HPP_NAMESPACE
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename T, typename Dispatch>
+ template <typename ValuesType, typename Dispatch>
VULKAN_HPP_INLINE void CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout,
VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags,
uint32_t offset,
- ArrayProxy<const T> const & values,
+ ArrayProxy<const ValuesType> const & values,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -5368,7 +5416,7 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPipelineLayout>( layout ),
static_cast<VkShaderStageFlags>( stageFlags ),
offset,
- values.size() * sizeof( T ),
+ values.size() * sizeof( ValuesType ),
reinterpret_cast<const void *>( values.data() ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -5387,9 +5435,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass( const RenderPassBeginInfo & renderPassBegin,
- VULKAN_HPP_NAMESPACE::SubpassContents contents,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ VULKAN_HPP_NAMESPACE::SubpassContents contents,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBeginRenderPass( m_commandBuffer,
@@ -5458,7 +5507,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::bindBufferMemory2( uint32_t bindInfoCount,
+ Device::bindBufferMemory2( uint32_t bindInfoCount,
const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -5470,7 +5519,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::bindBufferMemory2( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo> const & bindInfos,
+ Device::bindBufferMemory2( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo> const & bindInfos,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -5482,7 +5531,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::bindImageMemory2( uint32_t bindInfoCount,
+ Device::bindImageMemory2( uint32_t bindInfoCount,
const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -5494,7 +5543,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::bindImageMemory2( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo> const & bindInfos,
+ Device::bindImageMemory2( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo> const & bindInfos,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -5594,12 +5643,15 @@ namespace VULKAN_HPP_NAMESPACE
m_instance,
&physicalDeviceGroupCount,
reinterpret_cast<VkPhysicalDeviceGroupProperties *>( physicalDeviceGroupProperties.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
+ if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() )
+ {
+ physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ }
}
return createResultValue(
result, physicalDeviceGroupProperties, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" );
@@ -5631,12 +5683,15 @@ namespace VULKAN_HPP_NAMESPACE
m_instance,
&physicalDeviceGroupCount,
reinterpret_cast<VkPhysicalDeviceGroupProperties *>( physicalDeviceGroupProperties.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
+ if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() )
+ {
+ physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ }
}
return createResultValue(
result, physicalDeviceGroupProperties, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" );
@@ -5658,8 +5713,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
@@ -5671,8 +5726,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -5700,8 +5755,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
@@ -5713,8 +5768,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -5746,8 +5801,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageMemoryRequirements2Allocator, typename Dispatch>
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
- Device::getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const
+ Device::getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements;
@@ -5774,9 +5829,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
Device::getImageSparseMemoryRequirements2(
- const ImageSparseMemoryRequirementsInfo2 & info,
- SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements(
@@ -5920,8 +5975,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>::type
- PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties;
@@ -5935,8 +5990,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<StructureChain<X, Y, Z...>>::type
- PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -5987,7 +6042,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, QueueFamilyProperties2>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<QueueFamilyProperties2, QueueFamilyProperties2Allocator>
- PhysicalDevice::getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
+ PhysicalDevice::getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -6036,7 +6091,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, StructureChain>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<StructureChain, StructureChainAllocator>
- PhysicalDevice::getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator,
+ PhysicalDevice::getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -6076,7 +6131,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2
- PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties;
@@ -6087,7 +6142,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getMemoryProperties2( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -6118,8 +6173,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageFormatProperties2Allocator, typename Dispatch>
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
- PhysicalDevice::getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getSparseImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator> properties;
@@ -6147,9 +6202,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
PhysicalDevice::getSparseImageFormatProperties2(
- const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
+ SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator> properties(
@@ -6194,7 +6249,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Queue
- Device::getQueue2( const DeviceQueueInfo2 & queueInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getQueue2( const VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 & queueInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Queue queue;
@@ -6206,7 +6262,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo,
+ Device::createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion * pYcbcrConversion,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -6223,9 +6279,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>::type
- Device::createSamplerYcbcrConversion( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion;
@@ -6243,9 +6299,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion, Dispatch>>::type
- Device::createSamplerYcbcrConversionUnique( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSamplerYcbcrConversionUnique(
+ const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion;
@@ -6277,9 +6334,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- Device::destroySamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::destroySamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySamplerYcbcrConversion(
@@ -6303,9 +6360,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySamplerYcbcrConversion(
@@ -6335,9 +6392,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>::type
- Device::createDescriptorUpdateTemplate( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorUpdateTemplate( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate;
@@ -6355,9 +6412,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate, Dispatch>>::type
- Device::createDescriptorUpdateTemplateUnique( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorUpdateTemplateUnique(
+ const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate;
@@ -6393,7 +6451,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
Device::destroyDescriptorUpdateTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -6419,8 +6477,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDescriptorUpdateTemplate(
@@ -6445,6 +6503,22 @@ namespace VULKAN_HPP_NAMESPACE
pData );
}
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::updateDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet,
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ DataType const & data,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkUpdateDescriptorSetWithTemplate( m_device,
+ static_cast<VkDescriptorSet>( descriptorSet ),
+ static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ),
+ reinterpret_cast<const void *>( &data ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
template <typename Dispatch>
VULKAN_HPP_INLINE void PhysicalDevice::getExternalBufferProperties(
const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo * pExternalBufferInfo,
@@ -6461,8 +6535,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties
- PhysicalDevice::getExternalBufferProperties( const PhysicalDeviceExternalBufferInfo & externalBufferInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalBufferProperties(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties;
@@ -6490,8 +6565,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties
- PhysicalDevice::getExternalFenceProperties( const PhysicalDeviceExternalFenceInfo & externalFenceInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalFenceProperties(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties;
@@ -6519,8 +6595,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties
- PhysicalDevice::getExternalSemaphoreProperties( const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalSemaphoreProperties(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties;
@@ -6547,8 +6624,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport
- Device::getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support;
@@ -6560,8 +6637,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -6616,7 +6693,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
+ Device::createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -6632,9 +6709,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::RenderPass>::type
- Device::createRenderPass2( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RenderPass renderPass;
@@ -6651,9 +6728,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::RenderPass, Dispatch>>::type
- Device::createRenderPass2Unique( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createRenderPass2Unique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RenderPass renderPass;
@@ -6684,9 +6761,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBeginRenderPass2( m_commandBuffer,
@@ -6708,9 +6786,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdNextSubpass2( m_commandBuffer,
@@ -6729,8 +6807,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const SubpassEndInfo & subpassEndInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdEndRenderPass2( m_commandBuffer, reinterpret_cast<const VkSubpassEndInfo *>( &subpassEndInfo ) );
@@ -6759,7 +6837,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<uint64_t>::type
- Device::getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore, Dispatch const & d ) const
+ Device::getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
uint64_t value;
@@ -6771,7 +6849,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
+ Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
uint64_t timeout,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -6782,9 +6860,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphores( const SemaphoreWaitInfo & waitInfo,
- uint64_t timeout,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphores(
+ const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -6807,7 +6884,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::signalSemaphore( const SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const
+ Device::signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -6827,7 +6904,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddress( const BufferDeviceAddressInfo & info,
+ VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -6845,8 +6922,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetBufferOpaqueCaptureAddress( m_device, reinterpret_cast<const VkBufferDeviceAddressInfo *>( &info ) );
@@ -6855,7 +6932,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE uint64_t
- Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo,
+ Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -6865,8 +6942,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE uint64_t
+ Device::getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetDeviceMemoryOpaqueCaptureAddress(
@@ -6874,6 +6952,896 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_VERSION_1_3 ===
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
+ PhysicalDevice::getToolProperties( uint32_t * pToolCount,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>( d.vkGetPhysicalDeviceToolProperties(
+ m_physicalDevice, pToolCount, reinterpret_cast<VkPhysicalDeviceToolProperties *>( pToolProperties ) ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename PhysicalDeviceToolPropertiesAllocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
+ PhysicalDevice::getToolProperties( Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator> toolProperties;
+ uint32_t toolCount;
+ Result result;
+ do
+ {
+ result = static_cast<Result>( d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, nullptr ) );
+ if ( ( result == Result::eSuccess ) && toolCount )
+ {
+ toolProperties.resize( toolCount );
+ result = static_cast<Result>( d.vkGetPhysicalDeviceToolProperties(
+ m_physicalDevice, &toolCount, reinterpret_cast<VkPhysicalDeviceToolProperties *>( toolProperties.data() ) ) );
+ }
+ } while ( result == Result::eIncomplete );
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ if ( toolCount < toolProperties.size() )
+ {
+ toolProperties.resize( toolCount );
+ }
+ }
+ return createResultValue(
+ result, toolProperties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" );
+ }
+
+ template <
+ typename PhysicalDeviceToolPropertiesAllocator,
+ typename Dispatch,
+ typename B,
+ typename std::enable_if<std::is_same<typename B::value_type, PhysicalDeviceToolProperties>::value, int>::type>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
+ PhysicalDevice::getToolProperties( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator> toolProperties(
+ physicalDeviceToolPropertiesAllocator );
+ uint32_t toolCount;
+ Result result;
+ do
+ {
+ result = static_cast<Result>( d.vkGetPhysicalDeviceToolProperties( m_physicalDevice, &toolCount, nullptr ) );
+ if ( ( result == Result::eSuccess ) && toolCount )
+ {
+ toolProperties.resize( toolCount );
+ result = static_cast<Result>( d.vkGetPhysicalDeviceToolProperties(
+ m_physicalDevice, &toolCount, reinterpret_cast<VkPhysicalDeviceToolProperties *>( toolProperties.data() ) ) );
+ }
+ } while ( result == Result::eIncomplete );
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ if ( toolCount < toolProperties.size() )
+ {
+ toolProperties.resize( toolCount );
+ }
+ }
+ return createResultValue(
+ result, toolProperties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
+ Device::createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>(
+ d.vkCreatePrivateDataSlot( m_device,
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( pCreateInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ),
+ reinterpret_cast<VkPrivateDataSlot *>( pPrivateDataSlot ) ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::PrivateDataSlot>::type
+ Device::createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot;
+ Result result = static_cast<Result>(
+ d.vkCreatePrivateDataSlot( m_device,
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
+ reinterpret_cast<VkPrivateDataSlot *>( &privateDataSlot ) ) );
+ return createResultValue( result, privateDataSlot, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlot" );
+ }
+
+# ifndef VULKAN_HPP_NO_SMART_HANDLE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PrivateDataSlot, Dispatch>>::type
+ Device::createPrivateDataSlotUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot;
+ Result result = static_cast<Result>(
+ d.vkCreatePrivateDataSlot( m_device,
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
+ reinterpret_cast<VkPrivateDataSlot *>( &privateDataSlot ) ) );
+ ObjectDestroy<Device, Dispatch> deleter( *this, allocator, d );
+ return createResultValue<VULKAN_HPP_NAMESPACE::PrivateDataSlot, Dispatch>(
+ result, privateDataSlot, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotUnique", deleter );
+ }
+# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyPrivateDataSlot( m_device,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyPrivateDataSlot( m_device,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyPrivateDataSlot( m_device,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyPrivateDataSlot( m_device,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
+ Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>( d.vkSetPrivateData( m_device,
+ static_cast<VkObjectType>( objectType ),
+ objectHandle,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ data ) );
+ }
+#else
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE typename ResultValueType<void>::type
+ Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ Result result = static_cast<Result>( d.vkSetPrivateData( m_device,
+ static_cast<VkObjectType>( objectType ),
+ objectHandle,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ data ) );
+ return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateData" );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t * pData,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetPrivateData( m_device,
+ static_cast<VkObjectType>( objectType ),
+ objectHandle,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ pData );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
+ Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ uint64_t data;
+ d.vkGetPrivateData( m_device,
+ static_cast<VkObjectType>( objectType ),
+ objectHandle,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ &data );
+ return data;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetEvent2(
+ m_commandBuffer, static_cast<VkEvent>( event ), reinterpret_cast<const VkDependencyInfo *>( pDependencyInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetEvent2(
+ m_commandBuffer, static_cast<VkEvent>( event ), reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::resetEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdResetEvent2(
+ m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags2>( stageMask ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::waitEvents2( uint32_t eventCount,
+ const VULKAN_HPP_NAMESPACE::Event * pEvents,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdWaitEvents2( m_commandBuffer,
+ eventCount,
+ reinterpret_cast<const VkEvent *>( pEvents ),
+ reinterpret_cast<const VkDependencyInfo *>( pDependencyInfos ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::waitEvents2( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+# ifdef VULKAN_HPP_NO_EXCEPTIONS
+ VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() );
+# else
+ if ( events.size() != dependencyInfos.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::waitEvents2: events.size() != dependencyInfos.size()" );
+ }
+# endif /*VULKAN_HPP_NO_EXCEPTIONS*/
+
+ d.vkCmdWaitEvents2( m_commandBuffer,
+ events.size(),
+ reinterpret_cast<const VkEvent *>( events.data() ),
+ reinterpret_cast<const VkDependencyInfo *>( dependencyInfos.data() ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdPipelineBarrier2( m_commandBuffer, reinterpret_cast<const VkDependencyInfo *>( pDependencyInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdPipelineBarrier2( m_commandBuffer, reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdWriteTimestamp2(
+ m_commandBuffer, static_cast<VkPipelineStageFlags2>( stage ), static_cast<VkQueryPool>( queryPool ), query );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::submit2( uint32_t submitCount,
+ const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>( d.vkQueueSubmit2(
+ m_queue, submitCount, reinterpret_cast<const VkSubmitInfo2 *>( pSubmits ), static_cast<VkFence>( fence ) ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
+ Queue::submit2( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ Result result = static_cast<Result>( d.vkQueueSubmit2( m_queue,
+ submits.size(),
+ reinterpret_cast<const VkSubmitInfo2 *>( submits.data() ),
+ static_cast<VkFence>( fence ) ) );
+ return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2" );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyBuffer2( m_commandBuffer, reinterpret_cast<const VkCopyBufferInfo2 *>( pCopyBufferInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyBuffer2( m_commandBuffer, reinterpret_cast<const VkCopyBufferInfo2 *>( &copyBufferInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyImage2( m_commandBuffer, reinterpret_cast<const VkCopyImageInfo2 *>( pCopyImageInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyImage2( m_commandBuffer, reinterpret_cast<const VkCopyImageInfo2 *>( &copyImageInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyBufferToImage2( m_commandBuffer,
+ reinterpret_cast<const VkCopyBufferToImageInfo2 *>( pCopyBufferToImageInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyBufferToImage2( m_commandBuffer,
+ reinterpret_cast<const VkCopyBufferToImageInfo2 *>( &copyBufferToImageInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyImageToBuffer2( m_commandBuffer,
+ reinterpret_cast<const VkCopyImageToBufferInfo2 *>( pCopyImageToBufferInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdCopyImageToBuffer2( m_commandBuffer,
+ reinterpret_cast<const VkCopyImageToBufferInfo2 *>( &copyImageToBufferInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBlitImage2( m_commandBuffer, reinterpret_cast<const VkBlitImageInfo2 *>( pBlitImageInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBlitImage2( m_commandBuffer, reinterpret_cast<const VkBlitImageInfo2 *>( &blitImageInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdResolveImage2( m_commandBuffer, reinterpret_cast<const VkResolveImageInfo2 *>( pResolveImageInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdResolveImage2( m_commandBuffer, reinterpret_cast<const VkResolveImageInfo2 *>( &resolveImageInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBeginRendering( m_commandBuffer, reinterpret_cast<const VkRenderingInfo *>( pRenderingInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBeginRendering( m_commandBuffer, reinterpret_cast<const VkRenderingInfo *>( &renderingInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::endRendering( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdEndRendering( m_commandBuffer );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetCullMode( m_commandBuffer, static_cast<VkCullModeFlags>( cullMode ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetFrontFace( m_commandBuffer, static_cast<VkFrontFace>( frontFace ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetPrimitiveTopology( m_commandBuffer, static_cast<VkPrimitiveTopology>( primitiveTopology ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount( uint32_t viewportCount,
+ const VULKAN_HPP_NAMESPACE::Viewport * pViewports,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetViewportWithCount( m_commandBuffer, viewportCount, reinterpret_cast<const VkViewport *>( pViewports ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setViewportWithCount( ArrayProxy<const VULKAN_HPP_NAMESPACE::Viewport> const & viewports,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetViewportWithCount(
+ m_commandBuffer, viewports.size(), reinterpret_cast<const VkViewport *>( viewports.data() ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount( uint32_t scissorCount,
+ const VULKAN_HPP_NAMESPACE::Rect2D * pScissors,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetScissorWithCount( m_commandBuffer, scissorCount, reinterpret_cast<const VkRect2D *>( pScissors ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setScissorWithCount( ArrayProxy<const VULKAN_HPP_NAMESPACE::Rect2D> const & scissors,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetScissorWithCount(
+ m_commandBuffer, scissors.size(), reinterpret_cast<const VkRect2D *>( scissors.data() ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2( uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VULKAN_HPP_NAMESPACE::Buffer * pBuffers,
+ const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets,
+ const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes,
+ const VULKAN_HPP_NAMESPACE::DeviceSize * pStrides,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBindVertexBuffers2( m_commandBuffer,
+ firstBinding,
+ bindingCount,
+ reinterpret_cast<const VkBuffer *>( pBuffers ),
+ reinterpret_cast<const VkDeviceSize *>( pOffsets ),
+ reinterpret_cast<const VkDeviceSize *>( pSizes ),
+ reinterpret_cast<const VkDeviceSize *>( pStrides ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::bindVertexBuffers2( uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+# ifdef VULKAN_HPP_NO_EXCEPTIONS
+ VULKAN_HPP_ASSERT( buffers.size() == offsets.size() );
+ VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() );
+ VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() );
+# else
+ if ( buffers.size() != offsets.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::bindVertexBuffers2: buffers.size() != offsets.size()" );
+ }
+ if ( !sizes.empty() && buffers.size() != sizes.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::bindVertexBuffers2: buffers.size() != sizes.size()" );
+ }
+ if ( !strides.empty() && buffers.size() != strides.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::bindVertexBuffers2: buffers.size() != strides.size()" );
+ }
+# endif /*VULKAN_HPP_NO_EXCEPTIONS*/
+
+ d.vkCmdBindVertexBuffers2( m_commandBuffer,
+ firstBinding,
+ buffers.size(),
+ reinterpret_cast<const VkBuffer *>( buffers.data() ),
+ reinterpret_cast<const VkDeviceSize *>( offsets.data() ),
+ reinterpret_cast<const VkDeviceSize *>( sizes.data() ),
+ reinterpret_cast<const VkDeviceSize *>( strides.data() ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetDepthTestEnable( m_commandBuffer, static_cast<VkBool32>( depthTestEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetDepthWriteEnable( m_commandBuffer, static_cast<VkBool32>( depthWriteEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetDepthCompareOp( m_commandBuffer, static_cast<VkCompareOp>( depthCompareOp ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetDepthBoundsTestEnable( m_commandBuffer, static_cast<VkBool32>( depthBoundsTestEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetStencilTestEnable( m_commandBuffer, static_cast<VkBool32>( stencilTestEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask,
+ VULKAN_HPP_NAMESPACE::StencilOp failOp,
+ VULKAN_HPP_NAMESPACE::StencilOp passOp,
+ VULKAN_HPP_NAMESPACE::StencilOp depthFailOp,
+ VULKAN_HPP_NAMESPACE::CompareOp compareOp,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetStencilOp( m_commandBuffer,
+ static_cast<VkStencilFaceFlags>( faceMask ),
+ static_cast<VkStencilOp>( failOp ),
+ static_cast<VkStencilOp>( passOp ),
+ static_cast<VkStencilOp>( depthFailOp ),
+ static_cast<VkCompareOp>( compareOp ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetRasterizerDiscardEnable( m_commandBuffer, static_cast<VkBool32>( rasterizerDiscardEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetDepthBiasEnable( m_commandBuffer, static_cast<VkBool32>( depthBiasEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetPrimitiveRestartEnable( m_commandBuffer, static_cast<VkBool32>( primitiveRestartEnable ) );
+ }
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetDeviceBufferMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( pInfo ),
+ reinterpret_cast<VkMemoryRequirements2 *>( pMemoryRequirements ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ d.vkGetDeviceBufferMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
+ Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ d.vkGetDeviceBufferMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetDeviceImageMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( pInfo ),
+ reinterpret_cast<VkMemoryRequirements2 *>( pMemoryRequirements ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ d.vkGetDeviceImageMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
+ Device::getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ d.vkGetDeviceImageMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ uint32_t * pSparseMemoryRequirementCount,
+ VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetDeviceImageSparseMemoryRequirements(
+ m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( pInfo ),
+ pSparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( pSparseMemoryRequirements ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename SparseImageMemoryRequirements2Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD
+ VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements;
+ uint32_t sparseMemoryRequirementCount;
+ d.vkGetDeviceImageSparseMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ nullptr );
+ sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
+ d.vkGetDeviceImageSparseMemoryRequirements(
+ m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ return sparseMemoryRequirements;
+ }
+
+ template <
+ typename SparseImageMemoryRequirements2Allocator,
+ typename Dispatch,
+ typename B,
+ typename std::enable_if<std::is_same<typename B::value_type, SparseImageMemoryRequirements2>::value, int>::type>
+ VULKAN_HPP_NODISCARD
+ VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ Device::getImageSparseMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements(
+ sparseImageMemoryRequirements2Allocator );
+ uint32_t sparseMemoryRequirementCount;
+ d.vkGetDeviceImageSparseMemoryRequirements( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ nullptr );
+ sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
+ d.vkGetDeviceImageSparseMemoryRequirements(
+ m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ return sparseMemoryRequirements;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
//=== VK_KHR_surface ===
template <typename Dispatch>
@@ -6888,9 +7856,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Instance::destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Instance::destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySurfaceKHR( m_instance,
@@ -6912,9 +7881,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySurfaceKHR( m_instance,
@@ -6926,7 +7895,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex,
+ PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex,
VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
VULKAN_HPP_NAMESPACE::Bool32 * pSupported,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -6958,7 +7927,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR * pSurfaceCapabilities,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -6988,7 +7957,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
uint32_t * pSurfaceFormatCount,
VULKAN_HPP_NAMESPACE::SurfaceFormatKHR * pSurfaceFormats,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7023,12 +7992,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&surfaceFormatCount,
reinterpret_cast<VkSurfaceFormatKHR *>( surfaceFormats.data() ) ) );
- VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( surfaceFormatCount < surfaceFormats.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- surfaceFormats.resize( surfaceFormatCount );
+ VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
+ if ( surfaceFormatCount < surfaceFormats.size() )
+ {
+ surfaceFormats.resize( surfaceFormatCount );
+ }
}
return createResultValue(
result, surfaceFormats, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" );
@@ -7060,12 +8032,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&surfaceFormatCount,
reinterpret_cast<VkSurfaceFormatKHR *>( surfaceFormats.data() ) ) );
- VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( surfaceFormatCount < surfaceFormats.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- surfaceFormats.resize( surfaceFormatCount );
+ VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
+ if ( surfaceFormatCount < surfaceFormats.size() )
+ {
+ surfaceFormats.resize( surfaceFormatCount );
+ }
}
return createResultValue(
result, surfaceFormats, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" );
@@ -7074,7 +8049,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
uint32_t * pPresentModeCount,
VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7109,12 +8084,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&presentModeCount,
reinterpret_cast<VkPresentModeKHR *>( presentModes.data() ) ) );
- VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( presentModeCount < presentModes.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- presentModes.resize( presentModeCount );
+ VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
+ if ( presentModeCount < presentModes.size() )
+ {
+ presentModes.resize( presentModeCount );
+ }
}
return createResultValue(
result, presentModes, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" );
@@ -7146,12 +8124,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&presentModeCount,
reinterpret_cast<VkPresentModeKHR *>( presentModes.data() ) ) );
- VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( presentModeCount < presentModes.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- presentModes.resize( presentModeCount );
+ VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
+ if ( presentModeCount < presentModes.size() )
+ {
+ presentModes.resize( presentModeCount );
+ }
}
return createResultValue(
result, presentModes, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" );
@@ -7162,7 +8143,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfo,
+ Device::createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchain,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7179,9 +8160,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SwapchainKHR>::type
- Device::createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain;
@@ -7198,9 +8179,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SwapchainKHR, Dispatch>>::type
- Device::createSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain;
@@ -7230,9 +8211,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySwapchainKHR( m_device,
@@ -7255,9 +8237,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySwapchainKHR( m_device,
@@ -7269,7 +8251,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
uint32_t * pSwapchainImageCount,
VULKAN_HPP_NAMESPACE::Image * pSwapchainImages,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7284,7 +8266,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename ImageAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<std::vector<Image, ImageAllocator>>::type
- Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const
+ Device::getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<Image, ImageAllocator> swapchainImages;
@@ -7302,12 +8284,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSwapchainKHR>( swapchain ),
&swapchainImageCount,
reinterpret_cast<VkImage *>( swapchainImages.data() ) ) );
- VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( swapchainImageCount < swapchainImages.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- swapchainImages.resize( swapchainImageCount );
+ VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() );
+ if ( swapchainImageCount < swapchainImages.size() )
+ {
+ swapchainImages.resize( swapchainImageCount );
+ }
}
return createResultValue( result, swapchainImages, VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainImagesKHR" );
}
@@ -7337,12 +8322,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSwapchainKHR>( swapchain ),
&swapchainImageCount,
reinterpret_cast<VkImage *>( swapchainImages.data() ) ) );
- VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( swapchainImageCount < swapchainImages.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- swapchainImages.resize( swapchainImageCount );
+ VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() );
+ if ( swapchainImageCount < swapchainImages.size() )
+ {
+ swapchainImages.resize( swapchainImageCount );
+ }
}
return createResultValue( result, swapchainImages, VULKAN_HPP_NAMESPACE_STRING "::Device::getSwapchainImagesKHR" );
}
@@ -7350,7 +8338,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Device::acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
uint64_t timeout,
VULKAN_HPP_NAMESPACE::Semaphore semaphore,
VULKAN_HPP_NAMESPACE::Fence fence,
@@ -7404,8 +8392,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::presentKHR( const PresentInfoKHR & presentInfo,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
+ Queue::presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result =
@@ -7444,7 +8432,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR * pModes,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -7473,7 +8461,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
uint32_t * pRectCount,
VULKAN_HPP_NAMESPACE::Rect2D * pRects,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7486,7 +8474,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Rect2DAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<std::vector<Rect2D, Rect2DAllocator>>::type
- PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const
+ PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<Rect2D, Rect2DAllocator> rects;
@@ -7504,12 +8492,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&rectCount,
reinterpret_cast<VkRect2D *>( rects.data() ) ) );
- VULKAN_HPP_ASSERT( rectCount <= rects.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( rectCount < rects.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- rects.resize( rectCount );
+ VULKAN_HPP_ASSERT( rectCount <= rects.size() );
+ if ( rectCount < rects.size() )
+ {
+ rects.resize( rectCount );
+ }
}
return createResultValue( result, rects, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" );
}
@@ -7539,12 +8530,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&rectCount,
reinterpret_cast<VkRect2D *>( rects.data() ) ) );
- VULKAN_HPP_ASSERT( rectCount <= rects.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( rectCount < rects.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- rects.resize( rectCount );
+ VULKAN_HPP_ASSERT( rectCount <= rects.size() );
+ if ( rectCount < rects.size() )
+ {
+ rects.resize( rectCount );
+ }
}
return createResultValue( result, rects, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" );
}
@@ -7552,7 +8546,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR * pAcquireInfo,
+ Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR * pAcquireInfo,
uint32_t * pImageIndex,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -7564,7 +8558,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<uint32_t>
- Device::acquireNextImage2KHR( const AcquireNextImageInfoKHR & acquireInfo, Dispatch const & d ) const
+ Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
uint32_t imageIndex;
@@ -7584,7 +8579,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayPropertiesKHR( uint32_t * pPropertyCount,
+ PhysicalDevice::getDisplayPropertiesKHR( uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -7612,12 +8607,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayPropertiesKHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" );
@@ -7645,12 +8643,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayPropertiesKHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" );
@@ -7659,7 +8660,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayPlanePropertiesKHR( uint32_t * pPropertyCount,
+ PhysicalDevice::getDisplayPlanePropertiesKHR( uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -7687,12 +8688,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" );
@@ -7721,12 +8725,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlanePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" );
@@ -7735,7 +8742,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex,
+ PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex,
uint32_t * pDisplayCount,
VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplays,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7748,7 +8755,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename DisplayKHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<std::vector<DisplayKHR, DisplayKHRAllocator>>::type
- PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, Dispatch const & d ) const
+ PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<DisplayKHR, DisplayKHRAllocator> displays;
@@ -7763,12 +8770,15 @@ namespace VULKAN_HPP_NAMESPACE
displays.resize( displayCount );
result = static_cast<Result>( d.vkGetDisplayPlaneSupportedDisplaysKHR(
m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR *>( displays.data() ) ) );
- VULKAN_HPP_ASSERT( displayCount <= displays.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( displayCount < displays.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- displays.resize( displayCount );
+ VULKAN_HPP_ASSERT( displayCount <= displays.size() );
+ if ( displayCount < displays.size() )
+ {
+ displays.resize( displayCount );
+ }
}
return createResultValue(
result, displays, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
@@ -7796,12 +8806,15 @@ namespace VULKAN_HPP_NAMESPACE
displays.resize( displayCount );
result = static_cast<Result>( d.vkGetDisplayPlaneSupportedDisplaysKHR(
m_physicalDevice, planeIndex, &displayCount, reinterpret_cast<VkDisplayKHR *>( displays.data() ) ) );
- VULKAN_HPP_ASSERT( displayCount <= displays.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( displayCount < displays.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- displays.resize( displayCount );
+ VULKAN_HPP_ASSERT( displayCount <= displays.size() );
+ if ( displayCount < displays.size() )
+ {
+ displays.resize( displayCount );
+ }
}
return createResultValue(
result, displays, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR" );
@@ -7810,7 +8823,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ PhysicalDevice::getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7845,12 +8858,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDisplayKHR>( display ),
&propertyCount,
reinterpret_cast<VkDisplayModePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModePropertiesKHR" );
@@ -7883,12 +8899,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDisplayKHR>( display ),
&propertyCount,
reinterpret_cast<VkDisplayModePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModePropertiesKHR" );
@@ -7897,7 +8916,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ PhysicalDevice::createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DisplayModeKHR * pMode,
@@ -7916,10 +8935,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayModeKHR>::type
- PhysicalDevice::createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayModeCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ PhysicalDevice::createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DisplayModeKHR mode;
@@ -7937,10 +8956,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DisplayModeKHR, Dispatch>>::type
- PhysicalDevice::createDisplayModeKHRUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayModeCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ PhysicalDevice::createDisplayModeKHRUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DisplayModeKHR mode;
@@ -7960,7 +8979,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode,
+ PhysicalDevice::getDisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode,
uint32_t planeIndex,
VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR * pCapabilities,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -7995,7 +9014,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR * pCreateInfo,
+ Instance::createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8012,9 +9031,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8031,9 +9050,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createDisplayPlaneSurfaceKHRUnique( const DisplaySurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDisplayPlaneSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8054,7 +9073,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createSharedSwapchainsKHR( uint32_t swapchainCount,
+ Device::createSharedSwapchainsKHR( uint32_t swapchainCount,
const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfos,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains,
@@ -8072,15 +9091,15 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename SwapchainKHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<SwapchainKHR, SwapchainKHRAllocator>>::type
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainKHRAllocator>>::type
Device::createSharedSwapchainsKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<SwapchainKHR, SwapchainKHRAllocator> swapchains( createInfos.size() );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainKHRAllocator> swapchains( createInfos.size() );
+ Result result = static_cast<Result>(
d.vkCreateSharedSwapchainsKHR( m_device,
createInfos.size(),
reinterpret_cast<const VkSwapchainCreateInfoKHR *>( createInfos.data() ),
@@ -8095,16 +9114,17 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, SwapchainKHR>::value, int>::type>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<SwapchainKHR, SwapchainKHRAllocator>>::type
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainKHRAllocator>>::type
Device::createSharedSwapchainsKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
SwapchainKHRAllocator & swapchainKHRAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<SwapchainKHR, SwapchainKHRAllocator> swapchains( createInfos.size(), swapchainKHRAllocator );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainKHRAllocator> swapchains( createInfos.size(),
+ swapchainKHRAllocator );
+ Result result = static_cast<Result>(
d.vkCreateSharedSwapchainsKHR( m_device,
createInfos.size(),
reinterpret_cast<const VkSwapchainCreateInfoKHR *>( createInfos.data() ),
@@ -8115,14 +9135,15 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<SwapchainKHR>::type
- Device::createSharedSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::SwapchainKHR>::type
+ Device::createSharedSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- SwapchainKHR swapchain;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain;
+ Result result = static_cast<Result>(
d.vkCreateSharedSwapchainsKHR( m_device,
1,
reinterpret_cast<const VkSwapchainCreateInfoKHR *>( &createInfo ),
@@ -8138,7 +9159,7 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<UniqueHandle<SwapchainKHR, Dispatch>, SwapchainKHRAllocator>>::type
Device::createSharedSwapchainsKHRUnique(
ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -8173,7 +9194,7 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<UniqueHandle<SwapchainKHR, Dispatch>, SwapchainKHRAllocator>>::type
Device::createSharedSwapchainsKHRUnique(
ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
SwapchainKHRAllocator & swapchainKHRAllocator,
Dispatch const & d ) const
{
@@ -8203,9 +9224,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<SwapchainKHR, Dispatch>>::type
- Device::createSharedSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSharedSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
SwapchainKHR swapchain;
@@ -8228,7 +9249,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR * pCreateInfo,
+ Instance::createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8245,9 +9266,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8264,9 +9285,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createXlibSurfaceKHRUnique( const XlibSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createXlibSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8312,7 +9333,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR * pCreateInfo,
+ Instance::createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8329,9 +9350,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8348,9 +9369,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createXcbSurfaceKHRUnique( const XcbSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createXcbSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8396,7 +9417,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR * pCreateInfo,
+ Instance::createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8413,9 +9434,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8432,9 +9453,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createWaylandSurfaceKHRUnique( const WaylandSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createWaylandSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8476,7 +9497,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR * pCreateInfo,
+ Instance::createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8493,9 +9514,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8512,9 +9533,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createAndroidSurfaceKHRUnique( const AndroidSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createAndroidSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8537,7 +9558,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR * pCreateInfo,
+ Instance::createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8554,9 +9575,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8573,9 +9594,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createWin32SurfaceKHRUnique( const Win32SurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createWin32SurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -8606,7 +9627,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT * pCreateInfo,
+ Instance::createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT * pCallback,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -8622,9 +9643,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT>::type
- Instance::createDebugReportCallbackEXT( const DebugReportCallbackCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback;
@@ -8641,9 +9662,10 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT, Dispatch>>::type
- Instance::createDebugReportCallbackEXTUnique( const DebugReportCallbackCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDebugReportCallbackEXTUnique(
+ const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback;
@@ -8674,9 +9696,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Instance::destroyDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Instance::destroyDebugReportCallbackEXT( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDebugReportCallbackEXT(
@@ -8700,9 +9723,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDebugReportCallbackEXT(
@@ -8771,7 +9794,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo, Dispatch const & d ) const
+ Device::debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -8792,7 +9816,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo, Dispatch const & d ) const
+ Device::debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkDebugMarkerSetObjectNameEXT(
@@ -8812,8 +9837,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdDebugMarkerBeginEXT( m_commandBuffer, reinterpret_cast<const VkDebugMarkerMarkerInfoEXT *>( &markerInfo ) );
@@ -8838,8 +9864,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdDebugMarkerInsertEXT( m_commandBuffer, reinterpret_cast<const VkDebugMarkerMarkerInfoEXT *>( &markerInfo ) );
@@ -8851,7 +9878,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile,
+ PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile,
VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR * pCapabilities,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -8866,7 +9893,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR>::type
- PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile, Dispatch const & d ) const
+ PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR capabilities;
@@ -8880,7 +9908,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<StructureChain<X, Y, Z...>>::type
- PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile, Dispatch const & d ) const
+ PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -8914,8 +9943,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename VideoFormatPropertiesKHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<VideoFormatPropertiesKHR, VideoFormatPropertiesKHRAllocator>>::type
- PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getVideoFormatPropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<VideoFormatPropertiesKHR, VideoFormatPropertiesKHRAllocator> videoFormatProperties;
@@ -8936,12 +9965,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceVideoFormatInfoKHR *>( &videoFormatInfo ),
&videoFormatPropertyCount,
reinterpret_cast<VkVideoFormatPropertiesKHR *>( videoFormatProperties.data() ) ) );
- VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( videoFormatPropertyCount < videoFormatProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- videoFormatProperties.resize( videoFormatPropertyCount );
+ VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() );
+ if ( videoFormatPropertyCount < videoFormatProperties.size() )
+ {
+ videoFormatProperties.resize( videoFormatPropertyCount );
+ }
}
return createResultValue(
result, videoFormatProperties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" );
@@ -8953,9 +9985,10 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, VideoFormatPropertiesKHR>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<VideoFormatPropertiesKHR, VideoFormatPropertiesKHRAllocator>>::type
- PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
- VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator,
- Dispatch const & d ) const
+ PhysicalDevice::getVideoFormatPropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
+ VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<VideoFormatPropertiesKHR, VideoFormatPropertiesKHRAllocator> videoFormatProperties(
@@ -8977,12 +10010,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceVideoFormatInfoKHR *>( &videoFormatInfo ),
&videoFormatPropertyCount,
reinterpret_cast<VkVideoFormatPropertiesKHR *>( videoFormatProperties.data() ) ) );
- VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( videoFormatPropertyCount < videoFormatProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- videoFormatProperties.resize( videoFormatPropertyCount );
+ VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() );
+ if ( videoFormatPropertyCount < videoFormatProperties.size() )
+ {
+ videoFormatProperties.resize( videoFormatPropertyCount );
+ }
}
return createResultValue(
result, videoFormatProperties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" );
@@ -8991,7 +10027,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR * pCreateInfo,
+ Device::createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::VideoSessionKHR * pVideoSession,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -9008,9 +10044,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::VideoSessionKHR>::type
- Device::createVideoSessionKHR( const VideoSessionCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession;
@@ -9027,9 +10063,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::VideoSessionKHR, Dispatch>>::type
- Device::createVideoSessionKHRUnique( const VideoSessionCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createVideoSessionKHRUnique( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession;
@@ -9059,9 +10095,10 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyVideoSessionKHR( m_device,
@@ -9084,9 +10121,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyVideoSessionKHR( m_device,
@@ -9134,13 +10171,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkVideoSessionKHR>( videoSession ),
&videoSessionMemoryRequirementsCount,
reinterpret_cast<VkVideoGetMemoryPropertiesKHR *>( videoSessionMemoryRequirements.data() ) ) );
- VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) &&
- ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
+ VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() );
+ if ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() )
+ {
+ videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
+ }
}
return createResultValue( result,
videoSessionMemoryRequirements,
@@ -9176,13 +10215,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkVideoSessionKHR>( videoSession ),
&videoSessionMemoryRequirementsCount,
reinterpret_cast<VkVideoGetMemoryPropertiesKHR *>( videoSessionMemoryRequirements.data() ) ) );
- VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) &&
- ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
+ VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() );
+ if ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() )
+ {
+ videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
+ }
}
return createResultValue( result,
videoSessionMemoryRequirements,
@@ -9192,7 +10233,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::bindVideoSessionMemoryKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
+ Device::bindVideoSessionMemoryKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
uint32_t videoSessionBindMemoryCount,
const VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR * pVideoSessionBindMemories,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -9242,9 +10283,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR>::type
- Device::createVideoSessionParametersKHR( const VideoSessionParametersCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createVideoSessionParametersKHR(
+ const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters;
@@ -9262,9 +10304,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR, Dispatch>>::type
- Device::createVideoSessionParametersKHRUnique( const VideoSessionParametersCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createVideoSessionParametersKHRUnique(
+ const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters;
@@ -9300,9 +10343,10 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::updateVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
- const VideoSessionParametersUpdateInfoKHR & updateInfo,
- Dispatch const & d ) const
+ Device::updateVideoSessionParametersKHR(
+ VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
+ const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkUpdateVideoSessionParametersKHR(
@@ -9329,7 +10373,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
Device::destroyVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -9355,8 +10399,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyVideoSessionParametersKHR(
@@ -9378,8 +10422,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR( const VideoBeginCodingInfoKHR & beginInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBeginVideoCodingKHR( m_commandBuffer, reinterpret_cast<const VkVideoBeginCodingInfoKHR *>( &beginInfo ) );
@@ -9397,8 +10442,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR( const VideoEndCodingInfoKHR & endCodingInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdEndVideoCodingKHR( m_commandBuffer, reinterpret_cast<const VkVideoEndCodingInfoKHR *>( &endCodingInfo ) );
@@ -9417,8 +10463,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::controlVideoCodingKHR( const VideoCodingControlInfoKHR & codingControlInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdControlVideoCodingKHR( m_commandBuffer,
@@ -9440,8 +10487,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VideoDecodeInfoKHR & frameInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdDecodeVideoKHR( m_commandBuffer, reinterpret_cast<const VkVideoDecodeInfoKHR *>( &frameInfo ) );
@@ -9637,7 +10684,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX * pCreateInfo,
+ Device::createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::CuModuleNVX * pModule,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -9653,9 +10700,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::CuModuleNVX>::type
- Device::createCuModuleNVX( const CuModuleCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::CuModuleNVX module;
@@ -9672,9 +10719,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::CuModuleNVX, Dispatch>>::type
- Device::createCuModuleNVXUnique( const CuModuleCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createCuModuleNVXUnique( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::CuModuleNVX module;
@@ -9693,7 +10740,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX * pCreateInfo,
+ Device::createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::CuFunctionNVX * pFunction,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -9710,9 +10757,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::CuFunctionNVX>::type
- Device::createCuFunctionNVX( const CuFunctionCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::CuFunctionNVX function;
@@ -9729,9 +10776,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::CuFunctionNVX, Dispatch>>::type
- Device::createCuFunctionNVXUnique( const CuFunctionCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createCuFunctionNVXUnique( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::CuFunctionNVX function;
@@ -9760,9 +10807,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyCuModuleNVX( m_device,
@@ -9784,9 +10832,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyCuModuleNVX( m_device,
@@ -9809,9 +10857,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyCuFunctionNVX( m_device,
@@ -9834,9 +10883,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyCuFunctionNVX( m_device,
@@ -9856,8 +10905,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const CuLaunchInfoNVX & launchInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCuLaunchKernelNVX( m_commandBuffer, reinterpret_cast<const VkCuLaunchInfoNVX *>( &launchInfo ) );
@@ -9876,8 +10925,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX( const ImageViewHandleInfoNVX & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetImageViewHandleNVX( m_device, reinterpret_cast<const VkImageViewHandleInfoNVX *>( &info ) );
@@ -9886,7 +10935,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView,
+ Device::getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView,
VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -9957,7 +11006,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Device::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType,
size_t * pInfoSize,
@@ -10002,12 +11051,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkShaderInfoTypeAMD>( infoType ),
&infoSize,
reinterpret_cast<void *>( info.data() ) ) );
- VULKAN_HPP_ASSERT( infoSize <= info.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( infoSize < info.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- info.resize( infoSize );
+ VULKAN_HPP_ASSERT( infoSize <= info.size() );
+ if ( infoSize < info.size() )
+ {
+ info.resize( infoSize );
+ }
}
return createResultValue( result, info, VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderInfoAMD" );
}
@@ -10044,17 +11096,47 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkShaderInfoTypeAMD>( infoType ),
&infoSize,
reinterpret_cast<void *>( info.data() ) ) );
- VULKAN_HPP_ASSERT( infoSize <= info.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( infoSize < info.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- info.resize( infoSize );
+ VULKAN_HPP_ASSERT( infoSize <= info.size() );
+ if ( infoSize < info.size() )
+ {
+ info.resize( infoSize );
+ }
}
return createResultValue( result, info, VULKAN_HPP_NAMESPACE_STRING "::Device::getShaderInfoAMD" );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_KHR_dynamic_rendering ===
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBeginRenderingKHR( m_commandBuffer, reinterpret_cast<const VkRenderingInfo *>( pRenderingInfo ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdBeginRenderingKHR( m_commandBuffer, reinterpret_cast<const VkRenderingInfo *>( &renderingInfo ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::endRenderingKHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdEndRenderingKHR( m_commandBuffer );
+ }
+
#if defined( VK_USE_PLATFORM_GGP )
//=== VK_GGP_stream_descriptor_surface ===
@@ -10077,9 +11159,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createStreamDescriptorSurfaceGGP( const StreamDescriptorSurfaceCreateInfoGGP & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createStreamDescriptorSurfaceGGP(
+ const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -10097,9 +11180,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createStreamDescriptorSurfaceGGPUnique( const StreamDescriptorSurfaceCreateInfoGGP & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createStreamDescriptorSurfaceGGPUnique(
+ const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -10177,7 +11261,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ Device::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType,
HANDLE * pHandle,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -10256,7 +11340,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2
- PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 properties;
@@ -10267,7 +11351,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -10335,8 +11419,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>::type
- PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties;
@@ -10350,8 +11434,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<StructureChain<X, Y, Z...>>::type
- PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -10402,7 +11486,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, QueueFamilyProperties2>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<QueueFamilyProperties2, QueueFamilyProperties2Allocator>
- PhysicalDevice::getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
+ PhysicalDevice::getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -10451,7 +11535,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, StructureChain>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<StructureChain, StructureChainAllocator>
- PhysicalDevice::getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator,
+ PhysicalDevice::getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -10491,7 +11575,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2
- PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 memoryProperties;
@@ -10502,7 +11586,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getMemoryProperties2KHR( Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -10533,8 +11617,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageFormatProperties2Allocator, typename Dispatch>
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
- PhysicalDevice::getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getSparseImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator> properties;
@@ -10562,9 +11646,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
PhysicalDevice::getSparseImageFormatProperties2KHR(
- const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
+ SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator> properties(
@@ -10650,7 +11734,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN * pCreateInfo,
+ Instance::createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -10666,9 +11750,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createViSurfaceNN( const ViSurfaceCreateInfoNN & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -10685,9 +11769,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createViSurfaceNNUnique( const ViSurfaceCreateInfoNN & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createViSurfaceNNUnique( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -10753,12 +11837,15 @@ namespace VULKAN_HPP_NAMESPACE
m_instance,
&physicalDeviceGroupCount,
reinterpret_cast<VkPhysicalDeviceGroupProperties *>( physicalDeviceGroupProperties.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
+ if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() )
+ {
+ physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ }
}
return createResultValue( result,
physicalDeviceGroupProperties,
@@ -10791,12 +11878,15 @@ namespace VULKAN_HPP_NAMESPACE
m_instance,
&physicalDeviceGroupCount,
reinterpret_cast<VkPhysicalDeviceGroupProperties *>( physicalDeviceGroupProperties.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
+ if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() )
+ {
+ physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ }
}
return createResultValue( result,
physicalDeviceGroupProperties,
@@ -10822,8 +11912,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties
- PhysicalDevice::getExternalBufferPropertiesKHR( const PhysicalDeviceExternalBufferInfo & externalBufferInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalBufferPropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties;
@@ -10840,7 +11931,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo,
+ Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo,
HANDLE * pHandle,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -10852,7 +11943,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<HANDLE>::type
- Device::getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const
+ Device::getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
HANDLE handle;
@@ -10902,7 +11994,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR * pGetFdInfo,
+ Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR * pGetFdInfo,
int * pFd,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -10914,7 +12006,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<int>::type
- Device::getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo, Dispatch const & d ) const
+ Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
int fd;
@@ -10926,7 +12018,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
int fd,
VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR * pMemoryFdProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -10978,7 +12070,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties
PhysicalDevice::getExternalSemaphorePropertiesKHR(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties;
@@ -11006,8 +12099,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo,
- Dispatch const & d ) const
+ Device::importSemaphoreWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkImportSemaphoreWin32HandleKHR(
@@ -11030,8 +12124,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<HANDLE>::type
- Device::getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo,
- Dispatch const & d ) const
+ Device::getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
HANDLE handle;
@@ -11046,7 +12140,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo,
+ Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -11057,7 +12151,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo, Dispatch const & d ) const
+ Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkImportSemaphoreFdKHR(
@@ -11068,7 +12163,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR * pGetFdInfo,
+ Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR * pGetFdInfo,
int * pFd,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -11080,7 +12175,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<int>::type
- Device::getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo, Dispatch const & d ) const
+ Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
int fd;
@@ -11145,6 +12240,24 @@ namespace VULKAN_HPP_NAMESPACE
pData );
}
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR(
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ VULKAN_HPP_NAMESPACE::PipelineLayout layout,
+ uint32_t set,
+ DataType const & data,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdPushDescriptorSetWithTemplateKHR( m_commandBuffer,
+ static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ),
+ static_cast<VkPipelineLayout>( layout ),
+ set,
+ reinterpret_cast<const void *>( &data ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
//=== VK_EXT_conditional_rendering ===
template <typename Dispatch>
@@ -11159,9 +12272,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT(
+ const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBeginConditionalRenderingEXT(
@@ -11197,9 +12310,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>::type
- Device::createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorUpdateTemplateKHR(
+ const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate;
@@ -11217,9 +12331,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate, Dispatch>>::type
- Device::createDescriptorUpdateTemplateKHRUnique( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createDescriptorUpdateTemplateKHRUnique(
+ const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate;
@@ -11255,7 +12370,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
Device::destroyDescriptorUpdateTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -11281,6 +12396,22 @@ namespace VULKAN_HPP_NAMESPACE
pData );
}
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::updateDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet,
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ DataType const & data,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkUpdateDescriptorSetWithTemplateKHR( m_device,
+ static_cast<VkDescriptorSet>( descriptorSet ),
+ static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ),
+ reinterpret_cast<const void *>( &data ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
//=== VK_NV_clip_space_w_scaling ===
template <typename Dispatch>
@@ -11362,7 +12493,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getRandROutputDisplayEXT( Display * dpy,
+ PhysicalDevice::getRandROutputDisplayEXT( Display * dpy,
RROutput rrOutput,
VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -11406,7 +12537,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT * pSurfaceCapabilities,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -11438,7 +12569,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT * pDisplayPowerInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -11451,8 +12582,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE typename ResultValueType<void>::type Device::displayPowerControlEXT(
- VULKAN_HPP_NAMESPACE::DisplayKHR display, const DisplayPowerInfoEXT & displayPowerInfo, Dispatch const & d ) const
+ VULKAN_HPP_INLINE typename ResultValueType<void>::type
+ Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -11465,7 +12598,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT * pDeviceEventInfo,
+ Device::registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT * pDeviceEventInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Fence * pFence,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -11481,9 +12614,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type
- Device::registerEventEXT( const DeviceEventInfoEXT & deviceEventInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Fence fence;
@@ -11499,9 +12632,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Fence, Dispatch>>::type
- Device::registerEventEXTUnique( const DeviceEventInfoEXT & deviceEventInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::registerEventEXTUnique( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Fence fence;
@@ -11520,7 +12653,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT * pDisplayEventInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::Fence * pFence,
@@ -11538,10 +12671,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type
- Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayEventInfoEXT & displayEventInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Fence fence;
@@ -11558,10 +12691,10 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Fence, Dispatch>>::type
- Device::registerDisplayEventEXTUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayEventInfoEXT & displayEventInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::registerDisplayEventEXTUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::Fence fence;
@@ -11581,7 +12714,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Device::getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter,
uint64_t * pCounterValue,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -11615,7 +12748,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getRefreshCycleDurationGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Device::getRefreshCycleDurationGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE * pDisplayTimingProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -11645,7 +12778,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Device::getPastPresentationTimingGOOGLE( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
uint32_t * pPresentationTimingCount,
VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE * pPresentationTimings,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -11680,12 +12813,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSwapchainKHR>( swapchain ),
&presentationTimingCount,
reinterpret_cast<VkPastPresentationTimingGOOGLE *>( presentationTimings.data() ) ) );
- VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( presentationTimingCount < presentationTimings.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- presentationTimings.resize( presentationTimingCount );
+ VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() );
+ if ( presentationTimingCount < presentationTimings.size() )
+ {
+ presentationTimings.resize( presentationTimingCount );
+ }
}
return createResultValue(
result, presentationTimings, VULKAN_HPP_NAMESPACE_STRING "::Device::getPastPresentationTimingGOOGLE" );
@@ -11720,12 +12856,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSwapchainKHR>( swapchain ),
&presentationTimingCount,
reinterpret_cast<VkPastPresentationTimingGOOGLE *>( presentationTimings.data() ) ) );
- VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( presentationTimingCount < presentationTimings.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- presentationTimings.resize( presentationTimingCount );
+ VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() );
+ if ( presentationTimingCount < presentationTimings.size() )
+ {
+ presentationTimings.resize( presentationTimingCount );
+ }
}
return createResultValue(
result, presentationTimings, VULKAN_HPP_NAMESPACE_STRING "::Device::getPastPresentationTimingGOOGLE" );
@@ -11806,7 +12945,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
+ Device::createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -11823,9 +12962,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::RenderPass>::type
- Device::createRenderPass2KHR( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RenderPass renderPass;
@@ -11842,9 +12981,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::RenderPass, Dispatch>>::type
- Device::createRenderPass2KHRUnique( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createRenderPass2KHRUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RenderPass renderPass;
@@ -11875,9 +13014,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBeginRenderPass2KHR( m_commandBuffer,
@@ -11900,9 +13040,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdNextSubpass2KHR( m_commandBuffer,
@@ -11921,8 +13062,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const SubpassEndInfo & subpassEndInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdEndRenderPass2KHR( m_commandBuffer, reinterpret_cast<const VkSubpassEndInfo *>( &subpassEndInfo ) );
@@ -11942,7 +13083,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const
+ Device::getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result =
@@ -11972,8 +13113,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties
- PhysicalDevice::getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfo & externalFenceInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalFencePropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties;
@@ -12001,8 +13143,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo,
- Dispatch const & d ) const
+ Device::importFenceWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkImportFenceWin32HandleKHR(
@@ -12013,7 +13155,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo,
+ Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo,
HANDLE * pHandle,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -12025,7 +13167,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<HANDLE>::type
- Device::getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo, Dispatch const & d ) const
+ Device::getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
HANDLE handle;
@@ -12040,7 +13183,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR * pImportFenceFdInfo,
+ Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR * pImportFenceFdInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -12051,7 +13194,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo, Dispatch const & d ) const
+ Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -12062,7 +13206,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR * pGetFdInfo,
+ Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR * pGetFdInfo,
int * pFd,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -12074,7 +13218,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<int>::type
- Device::getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo, Dispatch const & d ) const
+ Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
int fd;
@@ -12104,97 +13248,6 @@ namespace VULKAN_HPP_NAMESPACE
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Allocator, typename Dispatch>
- VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it." )
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<PerformanceCounterDescriptionKHR, Allocator>>::type
- PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR(
- uint32_t queueFamilyIndex,
- ArrayProxy<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR> const & counters,
- Dispatch const & d ) const
- {
- VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<PerformanceCounterDescriptionKHR, Allocator> counterDescriptions;
- uint32_t counterCount;
- Result result;
- do
- {
- result = static_cast<Result>( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
- m_physicalDevice,
- queueFamilyIndex,
- counters.size(),
- reinterpret_cast<VkPerformanceCounterKHR *>( counters.data() ),
- nullptr ) );
- if ( ( result == Result::eSuccess ) && counterCount )
- {
- counterDescriptions.resize( counterCount );
- result = static_cast<Result>( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
- m_physicalDevice,
- queueFamilyIndex,
- counters.size(),
- reinterpret_cast<VkPerformanceCounterKHR *>( counters.data() ),
- reinterpret_cast<VkPerformanceCounterDescriptionKHR *>( counterDescriptions.data() ) ) );
- }
- } while ( result == Result::eIncomplete );
- if ( result == Result::eSuccess )
- {
- VULKAN_HPP_ASSERT( counterCount <= counterDescriptions.size() );
- counterDescriptions.resize( counterCount );
- }
- return createResultValue( result,
- counterDescriptions,
- VULKAN_HPP_NAMESPACE_STRING
- "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" );
- }
-
- template <
- typename Allocator,
- typename Dispatch,
- typename B,
- typename std::enable_if<std::is_same<typename B::value_type, PerformanceCounterDescriptionKHR>::value, int>::type>
- VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it." )
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
- typename ResultValueType<std::vector<PerformanceCounterDescriptionKHR, Allocator>>::type
- PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR(
- uint32_t queueFamilyIndex,
- ArrayProxy<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR> const & counters,
- Allocator const & vectorAllocator,
- Dispatch const & d ) const
- {
- VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<PerformanceCounterDescriptionKHR, Allocator> counterDescriptions( vectorAllocator );
- uint32_t counterCount;
- Result result;
- do
- {
- result = static_cast<Result>( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
- m_physicalDevice,
- queueFamilyIndex,
- counters.size(),
- reinterpret_cast<VkPerformanceCounterKHR *>( counters.data() ),
- nullptr ) );
- if ( ( result == Result::eSuccess ) && counterCount )
- {
- counterDescriptions.resize( counterCount );
- result = static_cast<Result>( d.vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR(
- m_physicalDevice,
- queueFamilyIndex,
- counters.size(),
- reinterpret_cast<VkPerformanceCounterKHR *>( counters.data() ),
- reinterpret_cast<VkPerformanceCounterDescriptionKHR *>( counterDescriptions.data() ) ) );
- }
- } while ( result == Result::eIncomplete );
- if ( result == Result::eSuccess )
- {
- VULKAN_HPP_ASSERT( counterCount <= counterDescriptions.size() );
- counterDescriptions.resize( counterCount );
- }
- return createResultValue( result,
- counterDescriptions,
- VULKAN_HPP_NAMESPACE_STRING
- "::PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR" );
- }
-
template <typename PerformanceCounterKHRAllocator,
typename PerformanceCounterDescriptionKHRAllocator,
typename Dispatch>
@@ -12259,10 +13312,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::pair<std::vector<PerformanceCounterKHR, PerformanceCounterKHRAllocator>,
std::vector<PerformanceCounterDescriptionKHR, PerformanceCounterDescriptionKHRAllocator>>
- data( std::piecewise_construct,
+ data( std::piecewise_construct,
std::forward_as_tuple( performanceCounterKHRAllocator ),
std::forward_as_tuple( performanceCounterDescriptionKHRAllocator ) );
- std::vector<PerformanceCounterKHR, PerformanceCounterKHRAllocator> & counters = data.first;
+ std::vector<PerformanceCounterKHR, PerformanceCounterKHRAllocator> & counters = data.first;
std::vector<PerformanceCounterDescriptionKHR, PerformanceCounterDescriptionKHRAllocator> & counterDescriptions =
data.second;
uint32_t counterCount;
@@ -12310,7 +13363,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR(
- const QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
uint32_t numPasses;
@@ -12334,7 +13388,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR & info, Dispatch const & d ) const
+ Device::acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -12369,8 +13424,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR>::type
- PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR surfaceCapabilities;
@@ -12384,8 +13439,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<StructureChain<X, Y, Z...>>::type
- PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -12402,7 +13457,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,
+ PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,
uint32_t * pSurfaceFormatCount,
VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR * pSurfaceFormats,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -12419,7 +13474,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SurfaceFormat2KHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<SurfaceFormat2KHR, SurfaceFormat2KHRAllocator>>::type
- PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo, Dispatch const & d ) const
+ PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SurfaceFormat2KHR, SurfaceFormat2KHRAllocator> surfaceFormats;
@@ -12440,12 +13496,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ),
&surfaceFormatCount,
reinterpret_cast<VkSurfaceFormat2KHR *>( surfaceFormats.data() ) ) );
- VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( surfaceFormatCount < surfaceFormats.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- surfaceFormats.resize( surfaceFormatCount );
+ VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
+ if ( surfaceFormatCount < surfaceFormats.size() )
+ {
+ surfaceFormats.resize( surfaceFormatCount );
+ }
}
return createResultValue(
result, surfaceFormats, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" );
@@ -12457,9 +13516,9 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, SurfaceFormat2KHR>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<SurfaceFormat2KHR, SurfaceFormat2KHRAllocator>>::type
- PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator,
- Dispatch const & d ) const
+ PhysicalDevice::getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SurfaceFormat2KHR, SurfaceFormat2KHRAllocator> surfaceFormats( surfaceFormat2KHRAllocator );
@@ -12480,12 +13539,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ),
&surfaceFormatCount,
reinterpret_cast<VkSurfaceFormat2KHR *>( surfaceFormats.data() ) ) );
- VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( surfaceFormatCount < surfaceFormats.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- surfaceFormats.resize( surfaceFormatCount );
+ VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
+ if ( surfaceFormatCount < surfaceFormats.size() )
+ {
+ surfaceFormats.resize( surfaceFormatCount );
+ }
}
return createResultValue(
result, surfaceFormats, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" );
@@ -12496,7 +13558,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayProperties2KHR( uint32_t * pPropertyCount,
+ PhysicalDevice::getDisplayProperties2KHR( uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::DisplayProperties2KHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -12524,12 +13586,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayProperties2KHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" );
@@ -12557,12 +13622,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayProperties2KHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" );
@@ -12571,7 +13639,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayPlaneProperties2KHR( uint32_t * pPropertyCount,
+ PhysicalDevice::getDisplayPlaneProperties2KHR( uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -12599,12 +13667,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlaneProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" );
@@ -12633,12 +13704,15 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
m_physicalDevice, &propertyCount, reinterpret_cast<VkDisplayPlaneProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" );
@@ -12647,7 +13721,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ PhysicalDevice::getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -12682,12 +13756,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDisplayKHR>( display ),
&propertyCount,
reinterpret_cast<VkDisplayModeProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" );
@@ -12721,12 +13798,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDisplayKHR>( display ),
&propertyCount,
reinterpret_cast<VkDisplayModeProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayModeProperties2KHR" );
@@ -12750,8 +13830,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR>::type
- PhysicalDevice::getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR & displayPlaneInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getDisplayPlaneCapabilities2KHR(
+ const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR capabilities;
@@ -12769,7 +13849,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK * pCreateInfo,
+ Instance::createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -12786,9 +13866,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -12805,9 +13885,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createIOSSurfaceMVKUnique( const IOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createIOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -12830,7 +13910,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK * pCreateInfo,
+ Instance::createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -12847,9 +13927,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -12866,9 +13946,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createMacOSSurfaceMVKUnique( const MacOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createMacOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -12900,7 +13980,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT & nameInfo, Dispatch const & d ) const
+ Device::setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkSetDebugUtilsObjectNameEXT(
@@ -12921,7 +14002,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT & tagInfo, Dispatch const & d ) const
+ Device::setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -12940,8 +14022,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkQueueBeginDebugUtilsLabelEXT( m_queue, reinterpret_cast<const VkDebugUtilsLabelEXT *>( &labelInfo ) );
@@ -12965,8 +14047,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkQueueInsertDebugUtilsLabelEXT( m_queue, reinterpret_cast<const VkDebugUtilsLabelEXT *>( &labelInfo ) );
@@ -12984,8 +14066,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBeginDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast<const VkDebugUtilsLabelEXT *>( &labelInfo ) );
@@ -13010,8 +14093,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdInsertDebugUtilsLabelEXT( m_commandBuffer, reinterpret_cast<const VkDebugUtilsLabelEXT *>( &labelInfo ) );
@@ -13020,7 +14104,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT * pCreateInfo,
+ Instance::createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT * pMessenger,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -13036,9 +14120,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT>::type
- Instance::createDebugUtilsMessengerEXT( const DebugUtilsMessengerCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger;
@@ -13055,9 +14139,10 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT, Dispatch>>::type
- Instance::createDebugUtilsMessengerEXTUnique( const DebugUtilsMessengerCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDebugUtilsMessengerEXTUnique(
+ const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger;
@@ -13089,9 +14174,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- Instance::destroyDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Instance::destroyDebugUtilsMessengerEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDebugUtilsMessengerEXT(
@@ -13115,9 +14200,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Instance::destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDebugUtilsMessengerEXT(
@@ -13147,7 +14232,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_INLINE void
Instance::submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
- const DebugUtilsMessengerCallbackDataEXT & callbackData,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -13188,7 +14273,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<StructureChain<X, Y, Z...>>::type
- Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d ) const
+ Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -13215,8 +14300,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<struct AHardwareBuffer *>::type
- Device::getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID & info,
- Dispatch const & d ) const
+ Device::getMemoryAndroidHardwareBufferANDROID(
+ const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
struct AHardwareBuffer * buffer;
@@ -13242,8 +14327,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdSetSampleLocationsEXT( m_commandBuffer,
@@ -13267,7 +14353,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT
- PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples,
+ PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -13297,8 +14383,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
@@ -13310,8 +14396,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -13339,8 +14425,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
@@ -13352,8 +14438,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -13385,8 +14471,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageMemoryRequirements2Allocator, typename Dispatch>
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
- Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info,
- Dispatch const & d ) const
+ Device::getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements;
@@ -13413,9 +14499,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
Device::getImageSparseMemoryRequirements2KHR(
- const ImageSparseMemoryRequirementsInfo2 & info,
- SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements(
@@ -13457,9 +14543,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR>::type
- Device::createAccelerationStructureKHR( const AccelerationStructureCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure;
@@ -13477,9 +14563,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR, Dispatch>>::type
- Device::createAccelerationStructureKHRUnique( const AccelerationStructureCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createAccelerationStructureKHRUnique(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure;
@@ -13515,7 +14602,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
Device::destroyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -13541,8 +14628,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyAccelerationStructureKHR(
@@ -13677,11 +14764,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE Result Device::buildAccelerationStructuresKHR(
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::buildAccelerationStructuresKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR> const & infos,
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const> const & pBuildRangeInfos,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
# ifdef VULKAN_HPP_NO_EXCEPTIONS
@@ -13710,7 +14797,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR * pInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -13724,9 +14811,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureInfoKHR & info,
- Dispatch const & d ) const
+ Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -13756,10 +14843,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureToMemoryInfoKHR & info,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyAccelerationStructureToMemoryKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkCopyAccelerationStructureToMemoryKHR(
@@ -13789,10 +14876,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyMemoryToAccelerationStructureInfoKHR & info,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::copyMemoryToAccelerationStructureKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkCopyMemoryToAccelerationStructureKHR(
@@ -13852,9 +14939,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertiesKHR" );
}
- template <typename T, typename Allocator, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<std::vector<T, Allocator>>::type
- Device::writeAccelerationStructuresPropertiesKHR(
+ template <typename DataType, typename Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<DataType, Allocator>>::type
+ Device::writeAccelerationStructuresPropertiesKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
size_t dataSize,
@@ -13862,22 +14950,22 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T, Allocator> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>( d.vkWriteAccelerationStructuresPropertiesKHR(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType, Allocator> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>( d.vkWriteAccelerationStructuresPropertiesKHR(
m_device,
accelerationStructures.size(),
reinterpret_cast<const VkAccelerationStructureKHR *>( accelerationStructures.data() ),
static_cast<VkQueryType>( queryType ),
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ),
stride ) );
return createResultValue(
result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::writeAccelerationStructuresPropertiesKHR" );
}
- template <typename T, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<T>::type
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<DataType>::type
Device::writeAccelerationStructuresPropertyKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
@@ -13885,13 +14973,13 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- T data;
- Result result = static_cast<Result>( d.vkWriteAccelerationStructuresPropertiesKHR(
+ DataType data;
+ Result result = static_cast<Result>( d.vkWriteAccelerationStructuresPropertiesKHR(
m_device,
accelerationStructures.size(),
reinterpret_cast<const VkAccelerationStructureKHR *>( accelerationStructures.data() ),
static_cast<VkQueryType>( queryType ),
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ),
stride ) );
return createResultValue(
@@ -13911,8 +14999,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyAccelerationStructureKHR( m_commandBuffer,
@@ -13932,9 +15021,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR(
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyAccelerationStructureToMemoryKHR(
@@ -13954,9 +15043,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR(
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyMemoryToAccelerationStructureKHR(
@@ -13977,7 +15066,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE DeviceAddress Device::getAccelerationStructureAddressKHR(
- const AccelerationStructureDeviceAddressInfoKHR & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetAccelerationStructureDeviceAddressKHR(
@@ -14040,8 +15130,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR
- Device::getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR & versionInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getAccelerationStructureCompatibilityKHR(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR compatibility;
@@ -14073,10 +15164,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR
- Device::getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
- const AccelerationStructureBuildGeometryInfoKHR & buildInfo,
- ArrayProxy<const uint32_t> const & maxPrimitiveCounts,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
+ Device::getAccelerationStructureBuildSizesKHR(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo,
+ ArrayProxy<const uint32_t> const & maxPrimitiveCounts,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
# ifdef VULKAN_HPP_NO_EXCEPTIONS
@@ -14104,7 +15196,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo,
+ Device::createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion * pYcbcrConversion,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -14121,9 +15213,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>::type
- Device::createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion;
@@ -14141,9 +15233,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion, Dispatch>>::type
- Device::createSamplerYcbcrConversionKHRUnique( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createSamplerYcbcrConversionKHRUnique(
+ const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion;
@@ -14175,9 +15268,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- Device::destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::destroySamplerYcbcrConversionKHR( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroySamplerYcbcrConversionKHR(
@@ -14192,7 +15285,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::bindBufferMemory2KHR( uint32_t bindInfoCount,
+ Device::bindBufferMemory2KHR( uint32_t bindInfoCount,
const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -14204,7 +15297,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::bindBufferMemory2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo> const & bindInfos,
+ Device::bindBufferMemory2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo> const & bindInfos,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -14216,7 +15309,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::bindImageMemory2KHR( uint32_t bindInfoCount,
+ Device::bindImageMemory2KHR( uint32_t bindInfoCount,
const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -14228,7 +15321,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::bindImageMemory2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo> const & bindInfos,
+ Device::bindImageMemory2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo> const & bindInfos,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -14273,7 +15366,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT * pCreateInfo,
+ Device::createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pValidationCache,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -14289,9 +15382,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::ValidationCacheEXT>::type
- Device::createValidationCacheEXT( const ValidationCacheCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache;
@@ -14308,9 +15401,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::ValidationCacheEXT, Dispatch>>::type
- Device::createValidationCacheEXTUnique( const ValidationCacheCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createValidationCacheEXTUnique( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache;
@@ -14341,9 +15434,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyValidationCacheEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyValidationCacheEXT( m_device,
@@ -14366,9 +15460,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyValidationCacheEXT( m_device,
@@ -14380,7 +15474,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache,
+ Device::mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache,
uint32_t srcCacheCount,
const VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pSrcCaches,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -14396,7 +15490,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache,
+ Device::mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ValidationCacheEXT> const & srcCaches,
Dispatch const & d ) const
{
@@ -14412,7 +15506,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
+ Device::getValidationCacheDataEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
size_t * pDataSize,
void * pData,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -14444,12 +15538,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkValidationCacheEXT>( validationCache ),
&dataSize,
reinterpret_cast<void *>( data.data() ) ) );
- VULKAN_HPP_ASSERT( dataSize <= data.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( dataSize < data.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- data.resize( dataSize );
+ VULKAN_HPP_ASSERT( dataSize <= data.size() );
+ if ( dataSize < data.size() )
+ {
+ data.resize( dataSize );
+ }
}
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getValidationCacheDataEXT" );
}
@@ -14479,12 +15576,15 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkValidationCacheEXT>( validationCache ),
&dataSize,
reinterpret_cast<void *>( data.data() ) ) );
- VULKAN_HPP_ASSERT( dataSize <= data.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( dataSize < data.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- data.resize( dataSize );
+ VULKAN_HPP_ASSERT( dataSize <= data.size() );
+ if ( dataSize < data.size() )
+ {
+ data.resize( dataSize );
+ }
}
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getValidationCacheDataEXT" );
}
@@ -14565,7 +15665,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV * pCreateInfo,
+ Device::createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructure,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -14581,9 +15681,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::AccelerationStructureNV>::type
- Device::createAccelerationStructureNV( const AccelerationStructureCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure;
@@ -14601,9 +15701,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::AccelerationStructureNV, Dispatch>>::type
- Device::createAccelerationStructureNVUnique( const AccelerationStructureCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createAccelerationStructureNVUnique(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure;
@@ -14639,8 +15740,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
Device::destroyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyAccelerationStructureNV(
@@ -14665,8 +15766,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyAccelerationStructureNV(
@@ -14693,8 +15794,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR
- Device::getAccelerationStructureMemoryRequirementsNV( const AccelerationStructureMemoryRequirementsInfoNV & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getAccelerationStructureMemoryRequirementsNV(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR memoryRequirements;
@@ -14707,8 +15809,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getAccelerationStructureMemoryRequirementsNV( const AccelerationStructureMemoryRequirementsInfoNV & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getAccelerationStructureMemoryRequirementsNV(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -14775,15 +15878,16 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV( const AccelerationStructureInfoNV & info,
- VULKAN_HPP_NAMESPACE::Buffer instanceData,
- VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
- VULKAN_HPP_NAMESPACE::Bool32 update,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
- VULKAN_HPP_NAMESPACE::Buffer scratch,
- VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info,
+ VULKAN_HPP_NAMESPACE::Buffer instanceData,
+ VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
+ VULKAN_HPP_NAMESPACE::Bool32 update,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
+ VULKAN_HPP_NAMESPACE::Buffer scratch,
+ VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdBuildAccelerationStructureNV( m_commandBuffer,
@@ -14849,7 +15953,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Device::createRayTracingPipelinesNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
uint32_t createInfoCount,
const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV * pCreateInfos,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
@@ -14868,16 +15972,16 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createRayTracingPipelinesNV(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size() );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size() );
+ Result result = static_cast<Result>(
d.vkCreateRayTracingPipelinesNV( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
createInfos.size(),
@@ -14896,17 +16000,17 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch,
typename B,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createRayTracingPipelinesNV(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
- Result result = static_cast<Result>(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
+ Result result = static_cast<Result>(
d.vkCreateRayTracingPipelinesNV( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
createInfos.size(),
@@ -14922,15 +16026,15 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<Pipeline>
- Device::createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ Device::createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- Pipeline pipeline;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::Pipeline pipeline;
+ Result result = static_cast<Result>(
d.vkCreateRayTracingPipelinesNV( m_device,
static_cast<VkPipelineCache>( pipelineCache ),
1,
@@ -14951,7 +16055,7 @@ namespace VULKAN_HPP_NAMESPACE
Device::createRayTracingPipelinesNVUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -14991,7 +16095,7 @@ namespace VULKAN_HPP_NAMESPACE
Device::createRayTracingPipelinesNVUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
@@ -15025,9 +16129,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<UniqueHandle<Pipeline, Dispatch>>
- Device::createRayTracingPipelineNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ Device::createRayTracingPipelineNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -15053,7 +16157,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Device::getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
@@ -15087,41 +16191,42 @@ namespace VULKAN_HPP_NAMESPACE
return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesNV" );
}
- template <typename T, typename Allocator, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<std::vector<T, Allocator>>::type
- Device::getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ template <typename DataType, typename Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<DataType, Allocator>>::type
+ Device::getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T, Allocator> data( dataSize / sizeof( T ) );
- Result result =
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType, Allocator> data( dataSize / sizeof( DataType ) );
+ Result result =
static_cast<Result>( d.vkGetRayTracingShaderGroupHandlesNV( m_device,
static_cast<VkPipeline>( pipeline ),
firstGroup,
groupCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesNV" );
}
- template <typename T, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<T>::type
- Device::getRayTracingShaderGroupHandleNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<DataType>::type
+ Device::getRayTracingShaderGroupHandleNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- T data;
- Result result = static_cast<Result>( d.vkGetRayTracingShaderGroupHandlesNV( m_device,
+ DataType data;
+ Result result = static_cast<Result>( d.vkGetRayTracingShaderGroupHandlesNV( m_device,
static_cast<VkPipeline>( pipeline ),
firstGroup,
groupCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandleNV" );
}
@@ -15129,7 +16234,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
+ Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
size_t dataSize,
void * pData,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -15157,34 +16262,35 @@ namespace VULKAN_HPP_NAMESPACE
return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" );
}
- template <typename T, typename Allocator, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<std::vector<T, Allocator>>::type
- Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
+ template <typename DataType, typename Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<DataType, Allocator>>::type
+ Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
size_t dataSize,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T, Allocator> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType, Allocator> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>(
d.vkGetAccelerationStructureHandleNV( m_device,
static_cast<VkAccelerationStructureNV>( accelerationStructure ),
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" );
}
- template <typename T, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<T>::type
- Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<DataType>::type
+ Device::getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- T data;
- Result result = static_cast<Result>(
+ DataType data;
+ Result result = static_cast<Result>(
d.vkGetAccelerationStructureHandleNV( m_device,
static_cast<VkAccelerationStructureNV>( accelerationStructure ),
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getAccelerationStructureHandleNV" );
}
@@ -15240,7 +16346,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t shader, Dispatch const & d ) const
+ Device::compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline, uint32_t shader, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result =
@@ -15266,8 +16372,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport
- Device::getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support;
@@ -15279,8 +16385,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getDescriptorSetLayoutSupportKHR( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -15391,7 +16497,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getCalibrateableTimeDomainsEXT( uint32_t * pTimeDomainCount,
+ PhysicalDevice::getCalibrateableTimeDomainsEXT( uint32_t * pTimeDomainCount,
VULKAN_HPP_NAMESPACE::TimeDomainEXT * pTimeDomains,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -15419,12 +16525,15 @@ namespace VULKAN_HPP_NAMESPACE
timeDomains.resize( timeDomainCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
m_physicalDevice, &timeDomainCount, reinterpret_cast<VkTimeDomainEXT *>( timeDomains.data() ) ) );
- VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( timeDomainCount < timeDomains.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- timeDomains.resize( timeDomainCount );
+ VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() );
+ if ( timeDomainCount < timeDomains.size() )
+ {
+ timeDomains.resize( timeDomainCount );
+ }
}
return createResultValue(
result, timeDomains, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" );
@@ -15452,12 +16561,15 @@ namespace VULKAN_HPP_NAMESPACE
timeDomains.resize( timeDomainCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceCalibrateableTimeDomainsEXT(
m_physicalDevice, &timeDomainCount, reinterpret_cast<VkTimeDomainEXT *>( timeDomains.data() ) ) );
- VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( timeDomainCount < timeDomains.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- timeDomains.resize( timeDomainCount );
+ VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() );
+ if ( timeDomainCount < timeDomains.size() )
+ {
+ timeDomains.resize( timeDomainCount );
+ }
}
return createResultValue(
result, timeDomains, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" );
@@ -15466,7 +16578,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getCalibratedTimestampsEXT( uint32_t timestampCount,
+ Device::getCalibratedTimestampsEXT( uint32_t timestampCount,
const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT * pTimestampInfos,
uint64_t * pTimestamps,
uint64_t * pMaxDeviation,
@@ -15482,35 +16594,6 @@ namespace VULKAN_HPP_NAMESPACE
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Dispatch>
- VULKAN_HPP_DEPRECATED( "This function is deprecated. Use one of the other flavours of it." )
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
- typename ResultValueType<uint64_t>::type Device::getCalibratedTimestampsEXT(
- ArrayProxy<const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT> const & timestampInfos,
- ArrayProxy<uint64_t> const & timestamps,
- Dispatch const & d ) const
- {
- VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
-# ifdef VULKAN_HPP_NO_EXCEPTIONS
- VULKAN_HPP_ASSERT( timestampInfos.size() == timestamps.size() );
-# else
- if ( timestampInfos.size() != timestamps.size() )
- {
- throw LogicError( VULKAN_HPP_NAMESPACE_STRING
- "::VkDevice::getCalibratedTimestampsEXT: timestampInfos.size() != timestamps.size()" );
- }
-# endif /*VULKAN_HPP_NO_EXCEPTIONS*/
- uint64_t maxDeviation;
- Result result = static_cast<Result>(
- d.vkGetCalibratedTimestampsEXT( m_device,
- timestampInfos.size(),
- reinterpret_cast<const VkCalibratedTimestampInfoEXT *>( timestampInfos.data() ),
- timestamps.data(),
- &maxDeviation ) );
- return createResultValue(
- result, maxDeviation, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" );
- }
-
template <typename Uint64_tAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<std::pair<std::vector<uint64_t, Uint64_tAllocator>, uint64_t>>::type
@@ -15558,6 +16641,25 @@ namespace VULKAN_HPP_NAMESPACE
&maxDeviation ) );
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampsEXT" );
}
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<std::pair<uint64_t, uint64_t>>::type
+ Device::getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::pair<uint64_t, uint64_t> data;
+ uint64_t & timestamp = data.first;
+ uint64_t & maxDeviation = data.second;
+ Result result = static_cast<Result>(
+ d.vkGetCalibratedTimestampsEXT( m_device,
+ 1,
+ reinterpret_cast<const VkCalibratedTimestampInfoEXT *>( &timestampInfo ),
+ &timestamp,
+ &maxDeviation ) );
+ return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampEXT" );
+ }
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_NV_mesh_shader ===
@@ -15643,6 +16745,16 @@ namespace VULKAN_HPP_NAMESPACE
d.vkCmdSetCheckpointNV( m_commandBuffer, pCheckpointMarker );
}
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename CheckpointMarkerType, typename Dispatch>
+ VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( CheckpointMarkerType const & checkpointMarker,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkCmdSetCheckpointNV( m_commandBuffer, reinterpret_cast<const void *>( &checkpointMarker ) );
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
template <typename Dispatch>
VULKAN_HPP_INLINE void Queue::getCheckpointDataNV( uint32_t * pCheckpointDataCount,
VULKAN_HPP_NAMESPACE::CheckpointDataNV * pCheckpointData,
@@ -15674,7 +16786,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, CheckpointDataNV>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<CheckpointDataNV, CheckpointDataNVAllocator>
- Queue::getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator, Dispatch const & d ) const
+ Queue::getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<CheckpointDataNV, CheckpointDataNVAllocator> checkpointData( checkpointDataNVAllocator );
@@ -15702,7 +16814,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<uint64_t>::type
- Device::getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore, Dispatch const & d ) const
+ Device::getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
uint64_t value;
@@ -15714,7 +16826,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
+ Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
uint64_t timeout,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -15725,9 +16837,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphoresKHR( const SemaphoreWaitInfo & waitInfo,
- uint64_t timeout,
- Dispatch const & d ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::waitSemaphoresKHR(
+ const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -15750,7 +16861,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::signalSemaphoreKHR( const SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const
+ Device::signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>(
@@ -15774,8 +16885,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL & initializeInfo,
- Dispatch const & d ) const
+ Device::initializePerformanceApiINTEL(
+ const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkInitializePerformanceApiINTEL(
@@ -15803,7 +16914,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- CommandBuffer::setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL & markerInfo, Dispatch const & d ) const
+ CommandBuffer::setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkCmdSetPerformanceMarkerINTEL(
@@ -15825,8 +16937,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- CommandBuffer::setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL & markerInfo,
- Dispatch const & d ) const
+ CommandBuffer::setPerformanceStreamMarkerINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkCmdSetPerformanceStreamMarkerINTEL(
@@ -15848,8 +16960,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- CommandBuffer::setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL & overrideInfo,
- Dispatch const & d ) const
+ CommandBuffer::setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkCmdSetPerformanceOverrideINTEL(
@@ -15875,8 +16987,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL>::type
- Device::acquirePerformanceConfigurationINTEL( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo,
- Dispatch const & d ) const
+ Device::acquirePerformanceConfigurationINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration;
@@ -15892,8 +17004,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL, Dispatch>>::type
- Device::acquirePerformanceConfigurationINTELUnique( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo,
- Dispatch const & d ) const
+ Device::acquirePerformanceConfigurationINTELUnique(
+ const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration;
@@ -15923,7 +17035,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::releasePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
+ Device::releasePerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -15945,7 +17057,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, Dispatch const & d ) const
+ Device::release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkReleasePerformanceConfigurationINTEL(
@@ -15966,7 +17078,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
+ Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -15978,7 +17090,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter,
+ Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter,
VULKAN_HPP_NAMESPACE::PerformanceValueINTEL * pValue,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -16040,9 +17152,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createImagePipeSurfaceFUCHSIA( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -16060,9 +17172,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createImagePipeSurfaceFUCHSIAUnique( const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createImagePipeSurfaceFUCHSIAUnique(
+ const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -16085,7 +17198,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT * pCreateInfo,
+ Instance::createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -16102,9 +17215,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createMetalSurfaceEXT( const MetalSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -16121,9 +17234,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createMetalSurfaceEXTUnique( const MetalSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createMetalSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -16178,12 +17291,15 @@ namespace VULKAN_HPP_NAMESPACE
m_physicalDevice,
&fragmentShadingRateCount,
reinterpret_cast<VkPhysicalDeviceFragmentShadingRateKHR *>( fragmentShadingRates.data() ) ) );
- VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( fragmentShadingRateCount < fragmentShadingRates.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- fragmentShadingRates.resize( fragmentShadingRateCount );
+ VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() );
+ if ( fragmentShadingRateCount < fragmentShadingRates.size() )
+ {
+ fragmentShadingRates.resize( fragmentShadingRateCount );
+ }
}
return createResultValue(
result, fragmentShadingRates, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" );
@@ -16216,12 +17332,15 @@ namespace VULKAN_HPP_NAMESPACE
m_physicalDevice,
&fragmentShadingRateCount,
reinterpret_cast<VkPhysicalDeviceFragmentShadingRateKHR *>( fragmentShadingRates.data() ) ) );
- VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( fragmentShadingRateCount < fragmentShadingRates.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- fragmentShadingRates.resize( fragmentShadingRateCount );
+ VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() );
+ if ( fragmentShadingRateCount < fragmentShadingRates.size() )
+ {
+ fragmentShadingRates.resize( fragmentShadingRateCount );
+ }
}
return createResultValue(
result, fragmentShadingRates, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" );
@@ -16243,7 +17362,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateKHR(
- const Extent2D & fragmentSize,
+ const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize,
const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2],
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -16267,8 +17386,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressEXT( const BufferDeviceAddressInfo & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressEXT(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetBufferDeviceAddressEXT( m_device, reinterpret_cast<const VkBufferDeviceAddressInfo *>( &info ) );
@@ -16279,25 +17398,25 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getToolPropertiesEXT( uint32_t * pToolCount,
- VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT * pToolProperties,
+ PhysicalDevice::getToolPropertiesEXT( uint32_t * pToolCount,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>( d.vkGetPhysicalDeviceToolPropertiesEXT(
- m_physicalDevice, pToolCount, reinterpret_cast<VkPhysicalDeviceToolPropertiesEXT *>( pToolProperties ) ) );
+ m_physicalDevice, pToolCount, reinterpret_cast<VkPhysicalDeviceToolProperties *>( pToolProperties ) ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename PhysicalDeviceToolPropertiesEXTAllocator, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<
- std::vector<PhysicalDeviceToolPropertiesEXT, PhysicalDeviceToolPropertiesEXTAllocator>>::type
+ template <typename PhysicalDeviceToolPropertiesAllocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
PhysicalDevice::getToolPropertiesEXT( Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<PhysicalDeviceToolPropertiesEXT, PhysicalDeviceToolPropertiesEXTAllocator> toolProperties;
- uint32_t toolCount;
- Result result;
+ std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator> toolProperties;
+ uint32_t toolCount;
+ Result result;
do
{
result = static_cast<Result>( d.vkGetPhysicalDeviceToolPropertiesEXT( m_physicalDevice, &toolCount, nullptr ) );
@@ -16305,33 +17424,34 @@ namespace VULKAN_HPP_NAMESPACE
{
toolProperties.resize( toolCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceToolPropertiesEXT(
- m_physicalDevice,
- &toolCount,
- reinterpret_cast<VkPhysicalDeviceToolPropertiesEXT *>( toolProperties.data() ) ) );
- VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ m_physicalDevice, &toolCount, reinterpret_cast<VkPhysicalDeviceToolProperties *>( toolProperties.data() ) ) );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( toolCount < toolProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- toolProperties.resize( toolCount );
+ VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ if ( toolCount < toolProperties.size() )
+ {
+ toolProperties.resize( toolCount );
+ }
}
return createResultValue(
result, toolProperties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" );
}
template <
- typename PhysicalDeviceToolPropertiesEXTAllocator,
+ typename PhysicalDeviceToolPropertiesAllocator,
typename Dispatch,
typename B,
- typename std::enable_if<std::is_same<typename B::value_type, PhysicalDeviceToolPropertiesEXT>::value, int>::type>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<
- std::vector<PhysicalDeviceToolPropertiesEXT, PhysicalDeviceToolPropertiesEXTAllocator>>::type
- PhysicalDevice::getToolPropertiesEXT(
- PhysicalDeviceToolPropertiesEXTAllocator & physicalDeviceToolPropertiesEXTAllocator, Dispatch const & d ) const
+ typename std::enable_if<std::is_same<typename B::value_type, PhysicalDeviceToolProperties>::value, int>::type>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
+ PhysicalDevice::getToolPropertiesEXT( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<PhysicalDeviceToolPropertiesEXT, PhysicalDeviceToolPropertiesEXTAllocator> toolProperties(
- physicalDeviceToolPropertiesEXTAllocator );
+ std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator> toolProperties(
+ physicalDeviceToolPropertiesAllocator );
uint32_t toolCount;
Result result;
do
@@ -16341,15 +17461,16 @@ namespace VULKAN_HPP_NAMESPACE
{
toolProperties.resize( toolCount );
result = static_cast<Result>( d.vkGetPhysicalDeviceToolPropertiesEXT(
- m_physicalDevice,
- &toolCount,
- reinterpret_cast<VkPhysicalDeviceToolPropertiesEXT *>( toolProperties.data() ) ) );
- VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ m_physicalDevice, &toolCount, reinterpret_cast<VkPhysicalDeviceToolProperties *>( toolProperties.data() ) ) );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( toolCount < toolProperties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- toolProperties.resize( toolCount );
+ VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ if ( toolCount < toolProperties.size() )
+ {
+ toolProperties.resize( toolCount );
+ }
}
return createResultValue(
result, toolProperties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" );
@@ -16361,7 +17482,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Device::waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
uint64_t presentId,
uint64_t timeout,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -16390,7 +17511,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getCooperativeMatrixPropertiesNV( uint32_t * pPropertyCount,
+ PhysicalDevice::getCooperativeMatrixPropertiesNV( uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -16420,12 +17541,15 @@ namespace VULKAN_HPP_NAMESPACE
m_physicalDevice,
&propertyCount,
reinterpret_cast<VkCooperativeMatrixPropertiesNV *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" );
@@ -16457,12 +17581,15 @@ namespace VULKAN_HPP_NAMESPACE
m_physicalDevice,
&propertyCount,
reinterpret_cast<VkCooperativeMatrixPropertiesNV *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( propertyCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( propertyCount );
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" );
@@ -16505,12 +17632,15 @@ namespace VULKAN_HPP_NAMESPACE
m_physicalDevice,
&combinationCount,
reinterpret_cast<VkFramebufferMixedSamplesCombinationNV *>( combinations.data() ) ) );
- VULKAN_HPP_ASSERT( combinationCount <= combinations.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( combinationCount < combinations.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- combinations.resize( combinationCount );
+ VULKAN_HPP_ASSERT( combinationCount <= combinations.size() );
+ if ( combinationCount < combinations.size() )
+ {
+ combinations.resize( combinationCount );
+ }
}
return createResultValue( result,
combinations,
@@ -16545,12 +17675,15 @@ namespace VULKAN_HPP_NAMESPACE
m_physicalDevice,
&combinationCount,
reinterpret_cast<VkFramebufferMixedSamplesCombinationNV *>( combinations.data() ) ) );
- VULKAN_HPP_ASSERT( combinationCount <= combinations.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( combinationCount < combinations.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- combinations.resize( combinationCount );
+ VULKAN_HPP_ASSERT( combinationCount <= combinations.size() );
+ if ( combinationCount < combinations.size() )
+ {
+ combinations.resize( combinationCount );
+ }
}
return createResultValue( result,
combinations,
@@ -16581,8 +17714,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename PresentModeKHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<PresentModeKHR, PresentModeKHRAllocator>>::type
- PhysicalDevice::getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- Dispatch const & d ) const
+ PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PresentModeKHR, PresentModeKHRAllocator> presentModes;
@@ -16603,12 +17736,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ),
&presentModeCount,
reinterpret_cast<VkPresentModeKHR *>( presentModes.data() ) ) );
- VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( presentModeCount < presentModes.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- presentModes.resize( presentModeCount );
+ VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
+ if ( presentModeCount < presentModes.size() )
+ {
+ presentModes.resize( presentModeCount );
+ }
}
return createResultValue(
result, presentModes, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" );
@@ -16620,9 +17756,9 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, PresentModeKHR>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<PresentModeKHR, PresentModeKHRAllocator>>::type
- PhysicalDevice::getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- PresentModeKHRAllocator & presentModeKHRAllocator,
- Dispatch const & d ) const
+ PhysicalDevice::getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ PresentModeKHRAllocator & presentModeKHRAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PresentModeKHR, PresentModeKHRAllocator> presentModes( presentModeKHRAllocator );
@@ -16643,12 +17779,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ),
&presentModeCount,
reinterpret_cast<VkPresentModeKHR *>( presentModes.data() ) ) );
- VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( presentModeCount < presentModes.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- presentModes.resize( presentModeCount );
+ VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
+ if ( presentModeCount < presentModes.size() )
+ {
+ presentModes.resize( presentModeCount );
+ }
}
return createResultValue(
result, presentModes, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" );
@@ -16699,7 +17838,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,
+ Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR * pModes,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -16714,8 +17853,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR>::type
- Device::getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- Dispatch const & d ) const
+ Device::getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes;
@@ -16732,7 +17871,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT * pCreateInfo,
+ Instance::createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -16749,9 +17888,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createHeadlessSurfaceEXT( const HeadlessSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -16768,9 +17907,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createHeadlessSurfaceEXTUnique( const HeadlessSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createHeadlessSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -16800,8 +17939,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressKHR( const BufferDeviceAddressInfo & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE DeviceAddress Device::getBufferAddressKHR(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetBufferDeviceAddressKHR( m_device, reinterpret_cast<const VkBufferDeviceAddressInfo *>( &info ) );
@@ -16819,8 +17958,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetBufferOpaqueCaptureAddressKHR( m_device,
@@ -16830,7 +17969,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE uint64_t
- Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo,
+ Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo * pInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -16840,8 +17979,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddressKHR(
- const DeviceMemoryOpaqueCaptureAddressInfo & info, Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE uint64_t
+ Device::getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return d.vkGetDeviceMemoryOpaqueCaptureAddressKHR(
@@ -17065,7 +18205,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createDeferredOperationKHR( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Device::createDeferredOperationKHR( const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::DeferredOperationKHR * pDeferredOperation,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -17079,7 +18219,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::DeferredOperationKHR>::type
- Device::createDeferredOperationKHR( Optional<const AllocationCallbacks> allocator, Dispatch const & d ) const
+ Device::createDeferredOperationKHR( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation;
@@ -17095,7 +18236,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DeferredOperationKHR, Dispatch>>::type
- Device::createDeferredOperationKHRUnique( Optional<const AllocationCallbacks> allocator, Dispatch const & d ) const
+ Device::createDeferredOperationKHRUnique( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation;
@@ -17125,9 +18267,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyDeferredOperationKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyDeferredOperationKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDeferredOperationKHR( m_device,
@@ -17150,9 +18293,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyDeferredOperationKHR( m_device,
@@ -17205,7 +18348,7 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, Dispatch const & d ) const
+ Device::deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result =
@@ -17222,7 +18365,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR * pPipelineInfo,
+ Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR * pPipelineInfo,
uint32_t * pExecutableCount,
VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR * pProperties,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -17239,7 +18382,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename PipelineExecutablePropertiesKHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<
std::vector<PipelineExecutablePropertiesKHR, PipelineExecutablePropertiesKHRAllocator>>::type
- Device::getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo, Dispatch const & d ) const
+ Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PipelineExecutablePropertiesKHR, PipelineExecutablePropertiesKHRAllocator> properties;
@@ -17257,12 +18401,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineInfoKHR *>( &pipelineInfo ),
&executableCount,
reinterpret_cast<VkPipelineExecutablePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( executableCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( executableCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( executableCount );
+ VULKAN_HPP_ASSERT( executableCount <= properties.size() );
+ if ( executableCount < properties.size() )
+ {
+ properties.resize( executableCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" );
@@ -17276,9 +18423,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE typename ResultValueType<
std::vector<PipelineExecutablePropertiesKHR, PipelineExecutablePropertiesKHRAllocator>>::type
Device::getPipelineExecutablePropertiesKHR(
- const PipelineInfoKHR & pipelineInfo,
- PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo,
+ PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PipelineExecutablePropertiesKHR, PipelineExecutablePropertiesKHRAllocator> properties(
@@ -17297,12 +18444,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineInfoKHR *>( &pipelineInfo ),
&executableCount,
reinterpret_cast<VkPipelineExecutablePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( executableCount <= properties.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( executableCount < properties.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- properties.resize( executableCount );
+ VULKAN_HPP_ASSERT( executableCount <= properties.size() );
+ if ( executableCount < properties.size() )
+ {
+ properties.resize( executableCount );
+ }
}
return createResultValue(
result, properties, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" );
@@ -17311,7 +18461,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR * pExecutableInfo,
+ Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR * pExecutableInfo,
uint32_t * pStatisticCount,
VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR * pStatistics,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -17328,8 +18478,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename PipelineExecutableStatisticKHRAllocator, typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<PipelineExecutableStatisticKHR, PipelineExecutableStatisticKHRAllocator>>::type
- Device::getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo,
- Dispatch const & d ) const
+ Device::getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PipelineExecutableStatisticKHR, PipelineExecutableStatisticKHRAllocator> statistics;
@@ -17350,12 +18500,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineExecutableInfoKHR *>( &executableInfo ),
&statisticCount,
reinterpret_cast<VkPipelineExecutableStatisticKHR *>( statistics.data() ) ) );
- VULKAN_HPP_ASSERT( statisticCount <= statistics.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( statisticCount < statistics.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- statistics.resize( statisticCount );
+ VULKAN_HPP_ASSERT( statisticCount <= statistics.size() );
+ if ( statisticCount < statistics.size() )
+ {
+ statistics.resize( statisticCount );
+ }
}
return createResultValue(
result, statistics, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" );
@@ -17369,9 +18522,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<PipelineExecutableStatisticKHR, PipelineExecutableStatisticKHRAllocator>>::type
Device::getPipelineExecutableStatisticsKHR(
- const PipelineExecutableInfoKHR & executableInfo,
- PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
+ PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PipelineExecutableStatisticKHR, PipelineExecutableStatisticKHRAllocator> statistics(
@@ -17393,12 +18546,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineExecutableInfoKHR *>( &executableInfo ),
&statisticCount,
reinterpret_cast<VkPipelineExecutableStatisticKHR *>( statistics.data() ) ) );
- VULKAN_HPP_ASSERT( statisticCount <= statistics.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( statisticCount < statistics.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- statistics.resize( statisticCount );
+ VULKAN_HPP_ASSERT( statisticCount <= statistics.size() );
+ if ( statisticCount < statistics.size() )
+ {
+ statistics.resize( statisticCount );
+ }
}
return createResultValue(
result, statistics, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" );
@@ -17425,8 +18581,8 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE
typename ResultValueType<std::vector<PipelineExecutableInternalRepresentationKHR,
PipelineExecutableInternalRepresentationKHRAllocator>>::type
- Device::getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR & executableInfo,
- Dispatch const & d ) const
+ Device::getPipelineExecutableInternalRepresentationsKHR(
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PipelineExecutableInternalRepresentationKHR, PipelineExecutableInternalRepresentationKHRAllocator>
@@ -17448,12 +18604,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineExecutableInfoKHR *>( &executableInfo ),
&internalRepresentationCount,
reinterpret_cast<VkPipelineExecutableInternalRepresentationKHR *>( internalRepresentations.data() ) ) );
- VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( internalRepresentationCount < internalRepresentations.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- internalRepresentations.resize( internalRepresentationCount );
+ VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() );
+ if ( internalRepresentationCount < internalRepresentations.size() )
+ {
+ internalRepresentations.resize( internalRepresentationCount );
+ }
}
return createResultValue( result,
internalRepresentations,
@@ -17470,9 +18629,9 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<PipelineExecutableInternalRepresentationKHR,
PipelineExecutableInternalRepresentationKHRAllocator>>::type
Device::getPipelineExecutableInternalRepresentationsKHR(
- const PipelineExecutableInfoKHR & executableInfo,
- PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator,
- Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
+ PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<PipelineExecutableInternalRepresentationKHR, PipelineExecutableInternalRepresentationKHRAllocator>
@@ -17494,12 +18653,15 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineExecutableInfoKHR *>( &executableInfo ),
&internalRepresentationCount,
reinterpret_cast<VkPipelineExecutableInternalRepresentationKHR *>( internalRepresentations.data() ) ) );
- VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() );
}
} while ( result == Result::eIncomplete );
- if ( ( result == Result::eSuccess ) && ( internalRepresentationCount < internalRepresentations.size() ) )
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- internalRepresentations.resize( internalRepresentationCount );
+ VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() );
+ if ( internalRepresentationCount < internalRepresentations.size() )
+ {
+ internalRepresentations.resize( internalRepresentationCount );
+ }
}
return createResultValue( result,
internalRepresentations,
@@ -17525,8 +18687,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getGeneratedCommandsMemoryRequirementsNV(
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
@@ -17538,9 +18701,9 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV & info,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getGeneratedCommandsMemoryRequirementsNV(
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
StructureChain<X, Y, Z...> structureChain;
@@ -17566,9 +18729,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV & generatedCommandsInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsNV(
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdPreprocessGeneratedCommandsNV(
@@ -17590,10 +18753,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
- const GeneratedCommandsInfoNV & generatedCommandsInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsNV(
+ VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdExecuteGeneratedCommandsNV( m_commandBuffer,
@@ -17635,9 +18798,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV>::type
- Device::createIndirectCommandsLayoutNV( const IndirectCommandsLayoutCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createIndirectCommandsLayoutNV( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout;
@@ -17655,9 +18818,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV, Dispatch>>::type
- Device::createIndirectCommandsLayoutNVUnique( const IndirectCommandsLayoutCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Device::createIndirectCommandsLayoutNVUnique(
+ const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout;
@@ -17693,7 +18857,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
Device::destroyIndirectCommandsLayoutNV( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -17719,8 +18883,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyIndirectCommandsLayoutNV(
@@ -17756,7 +18920,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getDrmDisplayEXT( int32_t drmFd,
+ PhysicalDevice::getDrmDisplayEXT( int32_t drmFd,
uint32_t connectorId,
VULKAN_HPP_NAMESPACE::DisplayKHR * display,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -17800,55 +18964,55 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfoEXT * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT * pPrivateDataSlot,
+ Device::createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>(
d.vkCreatePrivateDataSlotEXT( m_device,
- reinterpret_cast<const VkPrivateDataSlotCreateInfoEXT *>( pCreateInfo ),
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( pCreateInfo ),
reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ),
- reinterpret_cast<VkPrivateDataSlotEXT *>( pPrivateDataSlot ) ) );
+ reinterpret_cast<VkPrivateDataSlot *>( pPrivateDataSlot ) ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT>::type
- Device::createPrivateDataSlotEXT( const PrivateDataSlotCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::PrivateDataSlot>::type
+ Device::createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot;
+ Result result = static_cast<Result>(
d.vkCreatePrivateDataSlotEXT( m_device,
- reinterpret_cast<const VkPrivateDataSlotCreateInfoEXT *>( &createInfo ),
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( &createInfo ),
reinterpret_cast<const VkAllocationCallbacks *>(
static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- reinterpret_cast<VkPrivateDataSlotEXT *>( &privateDataSlot ) ) );
+ reinterpret_cast<VkPrivateDataSlot *>( &privateDataSlot ) ) );
return createResultValue(
result, privateDataSlot, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotEXT" );
}
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch>
- VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT, Dispatch>>::type
- Device::createPrivateDataSlotEXTUnique( const PrivateDataSlotCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PrivateDataSlot, Dispatch>>::type
+ Device::createPrivateDataSlotEXTUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot;
+ Result result = static_cast<Result>(
d.vkCreatePrivateDataSlotEXT( m_device,
- reinterpret_cast<const VkPrivateDataSlotCreateInfoEXT *>( &createInfo ),
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( &createInfo ),
reinterpret_cast<const VkAllocationCallbacks *>(
static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- reinterpret_cast<VkPrivateDataSlotEXT *>( &privateDataSlot ) ) );
+ reinterpret_cast<VkPrivateDataSlot *>( &privateDataSlot ) ) );
ObjectDestroy<Device, Dispatch> deleter( *this, allocator, d );
- return createResultValue<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT, Dispatch>(
+ return createResultValue<VULKAN_HPP_NAMESPACE::PrivateDataSlot, Dispatch>(
result, privateDataSlot, VULKAN_HPP_NAMESPACE_STRING "::Device::createPrivateDataSlotEXTUnique", deleter );
}
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
@@ -17856,50 +19020,26 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
+ Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPrivateDataSlotEXT( m_device,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
- {
- VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkDestroyPrivateDataSlotEXT( m_device,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
- reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
- }
-#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-
- template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
- {
- VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkDestroyPrivateDataSlotEXT( m_device,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
- reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ) );
- }
-
-#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ Device::destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkDestroyPrivateDataSlotEXT( m_device,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
reinterpret_cast<const VkAllocationCallbacks *>(
static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
}
@@ -17908,67 +19048,67 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t data,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>( d.vkSetPrivateDataEXT( m_device,
static_cast<VkObjectType>( objectType ),
objectHandle,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
data ) );
}
#else
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t data,
- Dispatch const & d ) const
+ Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkSetPrivateDataEXT( m_device,
static_cast<VkObjectType>( objectType ),
objectHandle,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
data ) );
return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateDataEXT" );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t * pData,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t * pData,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkGetPrivateDataEXT( m_device,
static_cast<VkObjectType>( objectType ),
objectHandle,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
pData );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
- Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
uint64_t data;
d.vkGetPrivateDataEXT( m_device,
static_cast<VkObjectType>( objectType ),
objectHandle,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
&data );
return data;
}
@@ -17987,8 +19127,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VideoEncodeInfoKHR & encodeInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdEncodeVideoKHR( m_commandBuffer, reinterpret_cast<const VkVideoEncodeInfoKHR *>( &encodeInfo ) );
@@ -17999,58 +19139,55 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_synchronization2 ===
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- const VULKAN_HPP_NAMESPACE::DependencyInfoKHR * pDependencyInfo,
+ VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdSetEvent2KHR( m_commandBuffer,
- static_cast<VkEvent>( event ),
- reinterpret_cast<const VkDependencyInfoKHR *>( pDependencyInfo ) );
+ d.vkCmdSetEvent2KHR(
+ m_commandBuffer, static_cast<VkEvent>( event ), reinterpret_cast<const VkDependencyInfo *>( pDependencyInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- const DependencyInfoKHR & dependencyInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdSetEvent2KHR( m_commandBuffer,
- static_cast<VkEvent>( event ),
- reinterpret_cast<const VkDependencyInfoKHR *>( &dependencyInfo ) );
+ d.vkCmdSetEvent2KHR(
+ m_commandBuffer, static_cast<VkEvent>( event ), reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask,
+ VULKAN_HPP_INLINE void CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdResetEvent2KHR(
- m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags2KHR>( stageMask ) );
+ m_commandBuffer, static_cast<VkEvent>( event ), static_cast<VkPipelineStageFlags2>( stageMask ) );
}
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::waitEvents2KHR( uint32_t eventCount,
- const VULKAN_HPP_NAMESPACE::Event * pEvents,
- const VULKAN_HPP_NAMESPACE::DependencyInfoKHR * pDependencyInfos,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::waitEvents2KHR( uint32_t eventCount,
+ const VULKAN_HPP_NAMESPACE::Event * pEvents,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdWaitEvents2KHR( m_commandBuffer,
eventCount,
reinterpret_cast<const VkEvent *>( pEvents ),
- reinterpret_cast<const VkDependencyInfoKHR *>( pDependencyInfos ) );
+ reinterpret_cast<const VkDependencyInfo *>( pDependencyInfos ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE void
- CommandBuffer::waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfoKHR> const & dependencyInfos,
+ CommandBuffer::waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -18067,79 +19204,78 @@ namespace VULKAN_HPP_NAMESPACE
d.vkCmdWaitEvents2KHR( m_commandBuffer,
events.size(),
reinterpret_cast<const VkEvent *>( events.data() ),
- reinterpret_cast<const VkDependencyInfoKHR *>( dependencyInfos.data() ) );
+ reinterpret_cast<const VkDependencyInfo *>( dependencyInfos.data() ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
VULKAN_HPP_INLINE void
- CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfoKHR * pDependencyInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast<const VkDependencyInfoKHR *>( pDependencyInfo ) );
+ d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast<const VkDependencyInfo *>( pDependencyInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR( const DependencyInfoKHR & dependencyInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast<const VkDependencyInfoKHR *>( &dependencyInfo ) );
+ d.vkCmdPipelineBarrier2KHR( m_commandBuffer, reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t query,
+ VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdWriteTimestamp2KHR(
- m_commandBuffer, static_cast<VkPipelineStageFlags2KHR>( stage ), static_cast<VkQueryPool>( queryPool ), query );
+ m_commandBuffer, static_cast<VkPipelineStageFlags2>( stage ), static_cast<VkQueryPool>( queryPool ), query );
}
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Queue::submit2KHR( uint32_t submitCount,
- const VULKAN_HPP_NAMESPACE::SubmitInfo2KHR * pSubmits,
- VULKAN_HPP_NAMESPACE::Fence fence,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Queue::submit2KHR( uint32_t submitCount,
+ const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
return static_cast<Result>( d.vkQueueSubmit2KHR(
- m_queue, submitCount, reinterpret_cast<const VkSubmitInfo2KHR *>( pSubmits ), static_cast<VkFence>( fence ) ) );
+ m_queue, submitCount, reinterpret_cast<const VkSubmitInfo2 *>( pSubmits ), static_cast<VkFence>( fence ) ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
- Queue::submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2KHR> const & submits,
- VULKAN_HPP_NAMESPACE::Fence fence,
- Dispatch const & d ) const
+ Queue::submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- Result result =
- static_cast<Result>( d.vkQueueSubmit2KHR( m_queue,
- submits.size(),
- reinterpret_cast<const VkSubmitInfo2KHR *>( submits.data() ),
- static_cast<VkFence>( fence ) ) );
+ Result result = static_cast<Result>( d.vkQueueSubmit2KHR( m_queue,
+ submits.size(),
+ reinterpret_cast<const VkSubmitInfo2 *>( submits.data() ),
+ static_cast<VkFence>( fence ) ) );
return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2KHR" );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- uint32_t marker,
+ VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ uint32_t marker,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdWriteBufferMarker2AMD( m_commandBuffer,
- static_cast<VkPipelineStageFlags2KHR>( stage ),
+ static_cast<VkPipelineStageFlags2>( stage ),
static_cast<VkBuffer>( dstBuffer ),
static_cast<VkDeviceSize>( dstOffset ),
marker );
@@ -18176,7 +19312,7 @@ namespace VULKAN_HPP_NAMESPACE
typename B,
typename std::enable_if<std::is_same<typename B::value_type, CheckpointData2NV>::value, int>::type>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<CheckpointData2NV, CheckpointData2NVAllocator>
- Queue::getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator, Dispatch const & d ) const
+ Queue::getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
std::vector<CheckpointData2NV, CheckpointData2NVAllocator> checkpointData( checkpointData2NVAllocator );
@@ -18207,118 +19343,120 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2KHR * pCopyBufferInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast<const VkCopyBufferInfo2KHR *>( pCopyBufferInfo ) );
+ d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast<const VkCopyBufferInfo2 *>( pCopyBufferInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const CopyBufferInfo2KHR & copyBufferInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast<const VkCopyBufferInfo2KHR *>( &copyBufferInfo ) );
+ d.vkCmdCopyBuffer2KHR( m_commandBuffer, reinterpret_cast<const VkCopyBufferInfo2 *>( &copyBufferInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2KHR * pCopyImageInfo,
+ VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast<const VkCopyImageInfo2KHR *>( pCopyImageInfo ) );
+ d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast<const VkCopyImageInfo2 *>( pCopyImageInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const CopyImageInfo2KHR & copyImageInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast<const VkCopyImageInfo2KHR *>( &copyImageInfo ) );
+ d.vkCmdCopyImage2KHR( m_commandBuffer, reinterpret_cast<const VkCopyImageInfo2 *>( &copyImageInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR(
- const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2KHR * pCopyBufferToImageInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyBufferToImage2KHR( m_commandBuffer,
- reinterpret_cast<const VkCopyBufferToImageInfo2KHR *>( pCopyBufferToImageInfo ) );
+ reinterpret_cast<const VkCopyBufferToImageInfo2 *>( pCopyBufferToImageInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR( const CopyBufferToImageInfo2KHR & copyBufferToImageInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyBufferToImage2KHR( m_commandBuffer,
- reinterpret_cast<const VkCopyBufferToImageInfo2KHR *>( &copyBufferToImageInfo ) );
+ reinterpret_cast<const VkCopyBufferToImageInfo2 *>( &copyBufferToImageInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR(
- const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2KHR * pCopyImageToBufferInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyImageToBuffer2KHR( m_commandBuffer,
- reinterpret_cast<const VkCopyImageToBufferInfo2KHR *>( pCopyImageToBufferInfo ) );
+ reinterpret_cast<const VkCopyImageToBufferInfo2 *>( pCopyImageToBufferInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR( const CopyImageToBufferInfo2KHR & copyImageToBufferInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdCopyImageToBuffer2KHR( m_commandBuffer,
- reinterpret_cast<const VkCopyImageToBufferInfo2KHR *>( &copyImageToBufferInfo ) );
+ reinterpret_cast<const VkCopyImageToBufferInfo2 *>( &copyImageToBufferInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2KHR * pBlitImageInfo,
+ VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast<const VkBlitImageInfo2KHR *>( pBlitImageInfo ) );
+ d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast<const VkBlitImageInfo2 *>( pBlitImageInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const BlitImageInfo2KHR & blitImageInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast<const VkBlitImageInfo2KHR *>( &blitImageInfo ) );
+ d.vkCmdBlitImage2KHR( m_commandBuffer, reinterpret_cast<const VkBlitImageInfo2 *>( &blitImageInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch>
VULKAN_HPP_INLINE void
- CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2KHR * pResolveImageInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast<const VkResolveImageInfo2KHR *>( pResolveImageInfo ) );
+ d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast<const VkResolveImageInfo2 *>( pResolveImageInfo ) );
}
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR( const ResolveImageInfo2KHR & resolveImageInfo,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast<const VkResolveImageInfo2KHR *>( &resolveImageInfo ) );
+ d.vkCmdResolveImage2KHR( m_commandBuffer, reinterpret_cast<const VkResolveImageInfo2 *>( &resolveImageInfo ) );
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -18347,7 +19485,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId,
+ PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId,
VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -18392,7 +19530,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT * pCreateInfo,
+ Instance::createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -18409,9 +19547,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createDirectFBSurfaceEXT( const DirectFBSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -18428,9 +19566,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createDirectFBSurfaceEXTUnique( const DirectFBSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createDirectFBSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -18493,14 +19631,15 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- uint32_t width,
- uint32_t height,
- uint32_t depth,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void
+ CommandBuffer::traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ uint32_t width,
+ uint32_t height,
+ uint32_t depth,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdTraceRaysKHR( m_commandBuffer,
@@ -18516,7 +19655,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ Device::createRayTracingPipelinesKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
uint32_t createInfoCount,
const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR * pCreateInfos,
@@ -18537,17 +19676,17 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator, typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createRayTracingPipelinesKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size() );
- Result result = static_cast<Result>( d.vkCreateRayTracingPipelinesKHR(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size() );
+ Result result = static_cast<Result>( d.vkCreateRayTracingPipelinesKHR(
m_device,
static_cast<VkDeferredOperationKHR>( deferredOperation ),
static_cast<VkPipelineCache>( pipelineCache ),
@@ -18569,18 +19708,18 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch,
typename B,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
Device::createRayTracingPipelinesKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- std::vector<Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
- Result result = static_cast<Result>( d.vkCreateRayTracingPipelinesKHR(
+ std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator> pipelines( createInfos.size(), pipelineAllocator );
+ Result result = static_cast<Result>( d.vkCreateRayTracingPipelinesKHR(
m_device,
static_cast<VkDeferredOperationKHR>( deferredOperation ),
static_cast<VkPipelineCache>( pipelineCache ),
@@ -18599,16 +19738,16 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename Dispatch>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<Pipeline>
- Device::createRayTracingPipelineKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ Device::createRayTracingPipelineKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- Pipeline pipeline;
- Result result = static_cast<Result>(
+ VULKAN_HPP_NAMESPACE::Pipeline pipeline;
+ Result result = static_cast<Result>(
d.vkCreateRayTracingPipelinesKHR( m_device,
static_cast<VkDeferredOperationKHR>( deferredOperation ),
static_cast<VkPipelineCache>( pipelineCache ),
@@ -18633,7 +19772,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -18679,7 +19818,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d ) const
{
@@ -18718,10 +19857,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<UniqueHandle<Pipeline, Dispatch>>
- Device::createRayTracingPipelineKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ Device::createRayTracingPipelineKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -18751,7 +19890,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Device::getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
@@ -18785,42 +19924,43 @@ namespace VULKAN_HPP_NAMESPACE
return createResultValue( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesKHR" );
}
- template <typename T, typename Allocator, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<std::vector<T, Allocator>>::type
- Device::getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ template <typename DataType, typename Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<DataType, Allocator>>::type
+ Device::getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T, Allocator> data( dataSize / sizeof( T ) );
- Result result =
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType, Allocator> data( dataSize / sizeof( DataType ) );
+ Result result =
static_cast<Result>( d.vkGetRayTracingShaderGroupHandlesKHR( m_device,
static_cast<VkPipeline>( pipeline ),
firstGroup,
groupCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
return createResultValue(
result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandlesKHR" );
}
- template <typename T, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<T>::type
- Device::getRayTracingShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<DataType>::type
+ Device::getRayTracingShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- T data;
- Result result = static_cast<Result>( d.vkGetRayTracingShaderGroupHandlesKHR( m_device,
+ DataType data;
+ Result result = static_cast<Result>( d.vkGetRayTracingShaderGroupHandlesKHR( m_device,
static_cast<VkPipeline>( pipeline ),
firstGroup,
groupCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
return createResultValue( result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingShaderGroupHandleKHR" );
}
@@ -18828,7 +19968,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
@@ -18863,43 +20003,44 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandlesKHR" );
}
- template <typename T, typename Allocator, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<std::vector<T, Allocator>>::type
- Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ template <typename DataType, typename Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<std::vector<DataType, Allocator>>::type
+ Device::getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T, Allocator> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType, Allocator> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>(
d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( m_device,
static_cast<VkPipeline>( pipeline ),
firstGroup,
groupCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
return createResultValue(
result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandlesKHR" );
}
- template <typename T, typename Dispatch>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<T>::type
- Device::getRayTracingCaptureReplayShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ template <typename DataType, typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<DataType>::type
+ Device::getRayTracingCaptureReplayShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
- T data;
- Result result =
+ DataType data;
+ Result result =
static_cast<Result>( d.vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( m_device,
static_cast<VkPipeline>( pipeline ),
firstGroup,
groupCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
return createResultValue(
result, data, VULKAN_HPP_NAMESPACE_STRING "::Device::getRayTracingCaptureReplayShaderGroupHandleKHR" );
@@ -18927,13 +20068,13 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
- VULKAN_HPP_INLINE void
- CommandBuffer::traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress,
- Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR(
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
d.vkCmdTraceRaysIndirectKHR(
@@ -18948,7 +20089,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_INLINE DeviceSize
- Device::getRayTracingShaderGroupStackSizeKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Device::getRayTracingShaderGroupStackSizeKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t group,
VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -19020,8 +20161,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<zx_handle_t>::type
- Device::getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo,
- Dispatch const & d ) const
+ Device::getMemoryZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
zx_handle_t zirconHandle;
@@ -19086,7 +20227,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
Device::importSemaphoreZirconHandleFUCHSIA(
- const ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo, Dispatch const & d ) const
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
Result result = static_cast<Result>( d.vkImportSemaphoreZirconHandleFUCHSIA(
@@ -19112,8 +20254,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<zx_handle_t>::type
- Device::getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo,
- Dispatch const & d ) const
+ Device::getSemaphoreZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
zx_handle_t zirconHandle;
@@ -19127,11 +20269,221 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
+ Device::createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA * pCollection,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>(
+ d.vkCreateBufferCollectionFUCHSIA( m_device,
+ reinterpret_cast<const VkBufferCollectionCreateInfoFUCHSIA *>( pCreateInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ),
+ reinterpret_cast<VkBufferCollectionFUCHSIA *>( pCollection ) ) );
+ }
+
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA>::type
+ Device::createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection;
+ Result result = static_cast<Result>( d.vkCreateBufferCollectionFUCHSIA(
+ m_device,
+ reinterpret_cast<const VkBufferCollectionCreateInfoFUCHSIA *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
+ reinterpret_cast<VkBufferCollectionFUCHSIA *>( &collection ) ) );
+ return createResultValue(
+ result, collection, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferCollectionFUCHSIA" );
+ }
+
+# ifndef VULKAN_HPP_NO_SMART_HANDLE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA, Dispatch>>::type
+ Device::createBufferCollectionFUCHSIAUnique(
+ const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection;
+ Result result = static_cast<Result>( d.vkCreateBufferCollectionFUCHSIA(
+ m_device,
+ reinterpret_cast<const VkBufferCollectionCreateInfoFUCHSIA *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
+ reinterpret_cast<VkBufferCollectionFUCHSIA *>( &collection ) ) );
+ ObjectDestroy<Device, Dispatch> deleter( *this, allocator, d );
+ return createResultValue<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA, Dispatch>(
+ result, collection, VULKAN_HPP_NAMESPACE_STRING "::Device::createBufferCollectionFUCHSIAUnique", deleter );
+ }
+# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setBufferCollectionImageConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA * pImageConstraintsInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>( d.vkSetBufferCollectionImageConstraintsFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkImageConstraintsInfoFUCHSIA *>( pImageConstraintsInfo ) ) );
+ }
+
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
+ Device::setBufferCollectionImageConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ Result result = static_cast<Result>( d.vkSetBufferCollectionImageConstraintsFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkImageConstraintsInfoFUCHSIA *>( &imageConstraintsInfo ) ) );
+ return createResultValue( result,
+ VULKAN_HPP_NAMESPACE_STRING "::Device::setBufferCollectionImageConstraintsFUCHSIA" );
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result Device::setBufferCollectionBufferConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>( d.vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA *>( pBufferConstraintsInfo ) ) );
+ }
+
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE typename ResultValueType<void>::type
+ Device::setBufferCollectionBufferConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ Result result = static_cast<Result>( d.vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA *>( &bufferConstraintsInfo ) ) );
+ return createResultValue( result,
+ VULKAN_HPP_NAMESPACE_STRING "::Device::setBufferCollectionBufferConstraintsFUCHSIA" );
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyBufferCollectionFUCHSIA( m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ) );
+ }
+
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyBufferCollectionFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyBufferCollectionFUCHSIA( m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkAllocationCallbacks *>( pAllocator ) );
+ }
+
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkDestroyBufferCollectionFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
+ Device::getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA * pProperties,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ return static_cast<Result>( d.vkGetBufferCollectionPropertiesFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<VkBufferCollectionPropertiesFUCHSIA *>( pProperties ) ) );
+ }
+
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA>::type
+ Device::getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA properties;
+ Result result = static_cast<Result>( d.vkGetBufferCollectionPropertiesFUCHSIA(
+ m_device,
+ static_cast<VkBufferCollectionFUCHSIA>( collection ),
+ reinterpret_cast<VkBufferCollectionPropertiesFUCHSIA *>( &properties ) ) );
+ return createResultValue(
+ result, properties, VULKAN_HPP_NAMESPACE_STRING "::Device::getBufferCollectionPropertiesFUCHSIA" );
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass,
+ Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass,
VULKAN_HPP_NAMESPACE::Extent2D * pMaxWorkgroupSize,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
{
@@ -19143,7 +20495,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE ResultValue<VULKAN_HPP_NAMESPACE::Extent2D>
- Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass,
+ Device::getSubpassShadingMaxWorkgroupSizeHUAWEI( VULKAN_HPP_NAMESPACE::RenderPass renderpass,
Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
@@ -19194,8 +20546,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch>
VULKAN_HPP_INLINE typename ResultValueType<VULKAN_HPP_NAMESPACE::RemoteAddressNV>::type
- Device::getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo,
- Dispatch const & d ) const
+ Device::getMemoryRemoteAddressNV(
+ const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo, Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::RemoteAddressNV address;
@@ -19256,7 +20608,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE Result
- Instance::createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX * pCreateInfo,
+ Instance::createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX * pCreateInfo,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
@@ -19273,9 +20625,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- Instance::createScreenSurfaceQNX( const ScreenSurfaceCreateInfoQNX & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -19292,9 +20644,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- Instance::createScreenSurfaceQNXUnique( const ScreenSurfaceCreateInfoQNX & createInfo,
- Optional<const AllocationCallbacks> allocator,
- Dispatch const & d ) const
+ Instance::createScreenSurfaceQNXUnique( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ Dispatch const & d ) const
{
VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
VULKAN_HPP_NAMESPACE::SurfaceKHR surface;
@@ -19434,5 +20786,172 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_EXT_pageable_device_local_memory ===
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::setMemoryPriorityEXT( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ float priority,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkSetDeviceMemoryPriorityEXT( m_device, static_cast<VkDeviceMemory>( memory ), priority );
+ }
+
+ //=== VK_KHR_maintenance4 ===
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetDeviceBufferMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( pInfo ),
+ reinterpret_cast<VkMemoryRequirements2 *>( pMemoryRequirements ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ d.vkGetDeviceBufferMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
+ Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ d.vkGetDeviceBufferMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void
+ Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetDeviceImageMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( pInfo ),
+ reinterpret_cast<VkMemoryRequirements2 *>( pMemoryRequirements ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ d.vkGetDeviceImageMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z, typename Dispatch>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
+ Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ d.vkGetDeviceImageMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch>
+ VULKAN_HPP_INLINE void Device::getImageSparseMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ uint32_t * pSparseMemoryRequirementCount,
+ VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements,
+ Dispatch const & d ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ d.vkGetDeviceImageSparseMemoryRequirementsKHR(
+ m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( pInfo ),
+ pSparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( pSparseMemoryRequirements ) );
+ }
+
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename SparseImageMemoryRequirements2Allocator, typename Dispatch>
+ VULKAN_HPP_NODISCARD
+ VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ Device::getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements;
+ uint32_t sparseMemoryRequirementCount;
+ d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ nullptr );
+ sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
+ d.vkGetDeviceImageSparseMemoryRequirementsKHR(
+ m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ return sparseMemoryRequirements;
+ }
+
+ template <
+ typename SparseImageMemoryRequirements2Allocator,
+ typename Dispatch,
+ typename B,
+ typename std::enable_if<std::is_same<typename B::value_type, SparseImageMemoryRequirements2>::value, int>::type>
+ VULKAN_HPP_NODISCARD
+ VULKAN_HPP_INLINE std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ Device::getImageSparseMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ Dispatch const & d ) const
+ {
+ VULKAN_HPP_ASSERT( d.getVkHeaderVersion() == VK_HEADER_VERSION );
+ std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator> sparseMemoryRequirements(
+ sparseImageMemoryRequirements2Allocator );
+ uint32_t sparseMemoryRequirementCount;
+ d.vkGetDeviceImageSparseMemoryRequirementsKHR( m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ nullptr );
+ sparseMemoryRequirements.resize( sparseMemoryRequirementCount );
+ d.vkGetDeviceImageSparseMemoryRequirementsKHR(
+ m_device,
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ return sparseMemoryRequirements;
+ }
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
} // namespace VULKAN_HPP_NAMESPACE
#endif
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_ggp.h b/thirdparty/vulkan/include/vulkan/vulkan_ggp.h
index 9a6a582c5b..19dfd22617 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_ggp.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_ggp.h
@@ -2,7 +2,7 @@
#define VULKAN_GGP_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_handles.hpp b/thirdparty/vulkan/include/vulkan/vulkan_handles.hpp
index a06156ec0a..1902318730 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_handles.hpp
+++ b/thirdparty/vulkan/include/vulkan/vulkan_handles.hpp
@@ -1,4 +1,4 @@
-// Copyright 2015-2021 The Khronos Group Inc.
+// Copyright 2015-2022 The Khronos Group Inc.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
@@ -363,6 +363,112 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceMemoryOpaqueCaptureAddressInfo;
using DeviceMemoryOpaqueCaptureAddressInfoKHR = DeviceMemoryOpaqueCaptureAddressInfo;
+ //=== VK_VERSION_1_3 ===
+ struct PhysicalDeviceVulkan13Features;
+ struct PhysicalDeviceVulkan13Properties;
+ struct PipelineCreationFeedbackCreateInfo;
+ using PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfo;
+ struct PipelineCreationFeedback;
+ using PipelineCreationFeedbackEXT = PipelineCreationFeedback;
+ struct PhysicalDeviceShaderTerminateInvocationFeatures;
+ using PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeatures;
+ struct PhysicalDeviceToolProperties;
+ using PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolProperties;
+ struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures;
+ using PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeatures;
+ struct PhysicalDevicePrivateDataFeatures;
+ using PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeatures;
+ struct DevicePrivateDataCreateInfo;
+ using DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfo;
+ struct PrivateDataSlotCreateInfo;
+ using PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfo;
+ struct PhysicalDevicePipelineCreationCacheControlFeatures;
+ using PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeatures;
+ struct MemoryBarrier2;
+ using MemoryBarrier2KHR = MemoryBarrier2;
+ struct BufferMemoryBarrier2;
+ using BufferMemoryBarrier2KHR = BufferMemoryBarrier2;
+ struct ImageMemoryBarrier2;
+ using ImageMemoryBarrier2KHR = ImageMemoryBarrier2;
+ struct DependencyInfo;
+ using DependencyInfoKHR = DependencyInfo;
+ struct SubmitInfo2;
+ using SubmitInfo2KHR = SubmitInfo2;
+ struct SemaphoreSubmitInfo;
+ using SemaphoreSubmitInfoKHR = SemaphoreSubmitInfo;
+ struct CommandBufferSubmitInfo;
+ using CommandBufferSubmitInfoKHR = CommandBufferSubmitInfo;
+ struct PhysicalDeviceSynchronization2Features;
+ using PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2Features;
+ struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
+ using PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
+ struct PhysicalDeviceImageRobustnessFeatures;
+ using PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeatures;
+ struct CopyBufferInfo2;
+ using CopyBufferInfo2KHR = CopyBufferInfo2;
+ struct CopyImageInfo2;
+ using CopyImageInfo2KHR = CopyImageInfo2;
+ struct CopyBufferToImageInfo2;
+ using CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2;
+ struct CopyImageToBufferInfo2;
+ using CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2;
+ struct BlitImageInfo2;
+ using BlitImageInfo2KHR = BlitImageInfo2;
+ struct ResolveImageInfo2;
+ using ResolveImageInfo2KHR = ResolveImageInfo2;
+ struct BufferCopy2;
+ using BufferCopy2KHR = BufferCopy2;
+ struct ImageCopy2;
+ using ImageCopy2KHR = ImageCopy2;
+ struct ImageBlit2;
+ using ImageBlit2KHR = ImageBlit2;
+ struct BufferImageCopy2;
+ using BufferImageCopy2KHR = BufferImageCopy2;
+ struct ImageResolve2;
+ using ImageResolve2KHR = ImageResolve2;
+ struct PhysicalDeviceSubgroupSizeControlFeatures;
+ using PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures;
+ struct PhysicalDeviceSubgroupSizeControlProperties;
+ using PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties;
+ struct PipelineShaderStageRequiredSubgroupSizeCreateInfo;
+ using PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo;
+ struct PhysicalDeviceInlineUniformBlockFeatures;
+ using PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeatures;
+ struct PhysicalDeviceInlineUniformBlockProperties;
+ using PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockProperties;
+ struct WriteDescriptorSetInlineUniformBlock;
+ using WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlock;
+ struct DescriptorPoolInlineUniformBlockCreateInfo;
+ using DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfo;
+ struct PhysicalDeviceTextureCompressionASTCHDRFeatures;
+ using PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeatures;
+ struct RenderingInfo;
+ using RenderingInfoKHR = RenderingInfo;
+ struct RenderingAttachmentInfo;
+ using RenderingAttachmentInfoKHR = RenderingAttachmentInfo;
+ struct PipelineRenderingCreateInfo;
+ using PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfo;
+ struct PhysicalDeviceDynamicRenderingFeatures;
+ using PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeatures;
+ struct CommandBufferInheritanceRenderingInfo;
+ using CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfo;
+ struct PhysicalDeviceShaderIntegerDotProductFeatures;
+ using PhysicalDeviceShaderIntegerDotProductFeaturesKHR = PhysicalDeviceShaderIntegerDotProductFeatures;
+ struct PhysicalDeviceShaderIntegerDotProductProperties;
+ using PhysicalDeviceShaderIntegerDotProductPropertiesKHR = PhysicalDeviceShaderIntegerDotProductProperties;
+ struct PhysicalDeviceTexelBufferAlignmentProperties;
+ using PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentProperties;
+ struct FormatProperties3;
+ using FormatProperties3KHR = FormatProperties3;
+ struct PhysicalDeviceMaintenance4Features;
+ using PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4Features;
+ struct PhysicalDeviceMaintenance4Properties;
+ using PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4Properties;
+ struct DeviceBufferMemoryRequirements;
+ using DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirements;
+ struct DeviceImageMemoryRequirements;
+ using DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirements;
+
//=== VK_KHR_surface ===
struct SurfaceCapabilitiesKHR;
struct SurfaceFormatKHR;
@@ -427,6 +533,7 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_queue ===
+ struct QueueFamilyQueryResultStatusProperties2KHR;
struct VideoQueueFamilyProperties2KHR;
struct VideoProfileKHR;
struct VideoProfilesKHR;
@@ -480,6 +587,28 @@ namespace VULKAN_HPP_NAMESPACE
struct VideoEncodeH264DpbSlotInfoEXT;
struct VideoEncodeH264NaluSliceEXT;
struct VideoEncodeH264ProfileEXT;
+ struct VideoEncodeH264RateControlInfoEXT;
+ struct VideoEncodeH264RateControlLayerInfoEXT;
+ struct VideoEncodeH264QpEXT;
+ struct VideoEncodeH264FrameSizeEXT;
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_EXT_video_encode_h265 ===
+ struct VideoEncodeH265CapabilitiesEXT;
+ struct VideoEncodeH265SessionCreateInfoEXT;
+ struct VideoEncodeH265SessionParametersCreateInfoEXT;
+ struct VideoEncodeH265SessionParametersAddInfoEXT;
+ struct VideoEncodeH265VclFrameInfoEXT;
+ struct VideoEncodeH265EmitPictureParametersEXT;
+ struct VideoEncodeH265DpbSlotInfoEXT;
+ struct VideoEncodeH265NaluSliceSegmentEXT;
+ struct VideoEncodeH265ProfileEXT;
+ struct VideoEncodeH265ReferenceListsEXT;
+ struct VideoEncodeH265RateControlInfoEXT;
+ struct VideoEncodeH265RateControlLayerInfoEXT;
+ struct VideoEncodeH265QpEXT;
+ struct VideoEncodeH265FrameSizeEXT;
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -501,6 +630,13 @@ namespace VULKAN_HPP_NAMESPACE
struct ShaderResourceUsageAMD;
struct ShaderStatisticsInfoAMD;
+ //=== VK_KHR_dynamic_rendering ===
+ struct RenderingFragmentShadingRateAttachmentInfoKHR;
+ struct RenderingFragmentDensityMapAttachmentInfoEXT;
+ struct AttachmentSampleCountInfoAMD;
+ using AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD;
+ struct MultiviewPerViewAttributesInfoNVX;
+
#if defined( VK_USE_PLATFORM_GGP )
//=== VK_GGP_stream_descriptor_surface ===
struct StreamDescriptorSurfaceCreateInfoGGP;
@@ -535,9 +671,6 @@ namespace VULKAN_HPP_NAMESPACE
struct ViSurfaceCreateInfoNN;
#endif /*VK_USE_PLATFORM_VI_NN*/
- //=== VK_EXT_texture_compression_astc_hdr ===
- struct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
-
//=== VK_EXT_astc_decode_mode ===
struct ImageViewASTCDecodeModeEXT;
struct PhysicalDeviceASTCDecodeFeaturesEXT;
@@ -688,14 +821,9 @@ namespace VULKAN_HPP_NAMESPACE
struct ImportAndroidHardwareBufferInfoANDROID;
struct MemoryGetAndroidHardwareBufferInfoANDROID;
struct ExternalFormatANDROID;
+ struct AndroidHardwareBufferFormatProperties2ANDROID;
#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
- //=== VK_EXT_inline_uniform_block ===
- struct PhysicalDeviceInlineUniformBlockFeaturesEXT;
- struct PhysicalDeviceInlineUniformBlockPropertiesEXT;
- struct WriteDescriptorSetInlineUniformBlockEXT;
- struct DescriptorPoolInlineUniformBlockCreateInfoEXT;
-
//=== VK_EXT_sample_locations ===
struct SampleLocationEXT;
struct SampleLocationsInfoEXT;
@@ -755,6 +883,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageDrmFormatModifierListCreateInfoEXT;
struct ImageDrmFormatModifierExplicitCreateInfoEXT;
struct ImageDrmFormatModifierPropertiesEXT;
+ struct DrmFormatModifierPropertiesList2EXT;
+ struct DrmFormatModifierProperties2EXT;
//=== VK_EXT_validation_cache ===
struct ValidationCacheCreateInfoEXT;
@@ -797,9 +927,6 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceImageViewImageFormatInfoEXT;
struct FilterCubicImageViewImageFormatPropertiesEXT;
- //=== VK_EXT_global_priority ===
- struct DeviceQueueGlobalPriorityCreateInfoEXT;
-
//=== VK_EXT_external_memory_host ===
struct ImportMemoryHostPointerInfoEXT;
struct MemoryHostPointerPropertiesEXT;
@@ -828,6 +955,14 @@ namespace VULKAN_HPP_NAMESPACE
struct VideoDecodeH265DpbSlotInfoEXT;
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+ //=== VK_KHR_global_priority ===
+ struct DeviceQueueGlobalPriorityCreateInfoKHR;
+ using DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfoKHR;
+ struct PhysicalDeviceGlobalPriorityQueryFeaturesKHR;
+ using PhysicalDeviceGlobalPriorityQueryFeaturesEXT = PhysicalDeviceGlobalPriorityQueryFeaturesKHR;
+ struct QueueFamilyGlobalPriorityPropertiesKHR;
+ using QueueFamilyGlobalPriorityPropertiesEXT = QueueFamilyGlobalPriorityPropertiesKHR;
+
//=== VK_AMD_memory_overallocation_behavior ===
struct DeviceMemoryOverallocationCreateInfoAMD;
@@ -842,10 +977,6 @@ namespace VULKAN_HPP_NAMESPACE
struct PresentFrameTokenGGP;
#endif /*VK_USE_PLATFORM_GGP*/
- //=== VK_EXT_pipeline_creation_feedback ===
- struct PipelineCreationFeedbackCreateInfoEXT;
- struct PipelineCreationFeedbackEXT;
-
//=== VK_NV_compute_shader_derivatives ===
struct PhysicalDeviceComputeShaderDerivativesFeaturesNV;
@@ -894,9 +1025,6 @@ namespace VULKAN_HPP_NAMESPACE
struct ImagePipeSurfaceCreateInfoFUCHSIA;
#endif /*VK_USE_PLATFORM_FUCHSIA*/
- //=== VK_KHR_shader_terminate_invocation ===
- struct PhysicalDeviceShaderTerminateInvocationFeaturesKHR;
-
#if defined( VK_USE_PLATFORM_METAL_EXT )
//=== VK_EXT_metal_surface ===
struct MetalSurfaceCreateInfoEXT;
@@ -907,11 +1035,6 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentDensityMapPropertiesEXT;
struct RenderPassFragmentDensityMapCreateInfoEXT;
- //=== VK_EXT_subgroup_size_control ===
- struct PhysicalDeviceSubgroupSizeControlFeaturesEXT;
- struct PhysicalDeviceSubgroupSizeControlPropertiesEXT;
- struct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
-
//=== VK_KHR_fragment_shading_rate ===
struct FragmentShadingRateAttachmentInfoKHR;
struct PipelineFragmentShadingRateStateCreateInfoKHR;
@@ -946,9 +1069,6 @@ namespace VULKAN_HPP_NAMESPACE
using PhysicalDeviceBufferAddressFeaturesEXT = PhysicalDeviceBufferDeviceAddressFeaturesEXT;
struct BufferDeviceAddressCreateInfoEXT;
- //=== VK_EXT_tooling_info ===
- struct PhysicalDeviceToolPropertiesEXT;
-
//=== VK_EXT_validation_features ===
struct ValidationFeaturesEXT;
@@ -1012,9 +1132,6 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_shader_atomic_float2 ===
struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT;
- //=== VK_EXT_shader_demote_to_helper_invocation ===
- struct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
-
//=== VK_NV_device_generated_commands ===
struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV;
struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
@@ -1034,13 +1151,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceInheritedViewportScissorFeaturesNV;
struct CommandBufferInheritanceViewportScissorInfoNV;
- //=== VK_KHR_shader_integer_dot_product ===
- struct PhysicalDeviceShaderIntegerDotProductFeaturesKHR;
- struct PhysicalDeviceShaderIntegerDotProductPropertiesKHR;
-
//=== VK_EXT_texel_buffer_alignment ===
struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT;
- struct PhysicalDeviceTexelBufferAlignmentPropertiesEXT;
//=== VK_QCOM_render_pass_transform ===
struct RenderPassTransformBeginInfoQCOM;
@@ -1067,18 +1179,11 @@ namespace VULKAN_HPP_NAMESPACE
struct PresentIdKHR;
struct PhysicalDevicePresentIdFeaturesKHR;
- //=== VK_EXT_private_data ===
- struct PhysicalDevicePrivateDataFeaturesEXT;
- struct DevicePrivateDataCreateInfoEXT;
- struct PrivateDataSlotCreateInfoEXT;
-
- //=== VK_EXT_pipeline_creation_cache_control ===
- struct PhysicalDevicePipelineCreationCacheControlFeaturesEXT;
-
#if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_encode_queue ===
struct VideoEncodeInfoKHR;
struct VideoEncodeRateControlInfoKHR;
+ struct VideoEncodeRateControlLayerInfoKHR;
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
//=== VK_NV_device_diagnostics_config ===
@@ -1086,23 +1191,12 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceDiagnosticsConfigCreateInfoNV;
//=== VK_KHR_synchronization2 ===
- struct MemoryBarrier2KHR;
- struct BufferMemoryBarrier2KHR;
- struct ImageMemoryBarrier2KHR;
- struct DependencyInfoKHR;
- struct SubmitInfo2KHR;
- struct SemaphoreSubmitInfoKHR;
- struct CommandBufferSubmitInfoKHR;
- struct PhysicalDeviceSynchronization2FeaturesKHR;
struct QueueFamilyCheckpointProperties2NV;
struct CheckpointData2NV;
//=== VK_KHR_shader_subgroup_uniform_control_flow ===
struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
- //=== VK_KHR_zero_initialize_workgroup_memory ===
- struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
-
//=== VK_NV_fragment_shading_rate_enums ===
struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV;
struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV;
@@ -1128,28 +1222,18 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_QCOM_rotated_copy_commands ===
struct CopyCommandTransformInfoQCOM;
- //=== VK_EXT_image_robustness ===
- struct PhysicalDeviceImageRobustnessFeaturesEXT;
-
//=== VK_KHR_workgroup_memory_explicit_layout ===
struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
- //=== VK_KHR_copy_commands2 ===
- struct CopyBufferInfo2KHR;
- struct CopyImageInfo2KHR;
- struct CopyBufferToImageInfo2KHR;
- struct CopyImageToBufferInfo2KHR;
- struct BlitImageInfo2KHR;
- struct ResolveImageInfo2KHR;
- struct BufferCopy2KHR;
- struct ImageCopy2KHR;
- struct ImageBlit2KHR;
- struct BufferImageCopy2KHR;
- struct ImageResolve2KHR;
-
//=== VK_EXT_4444_formats ===
struct PhysicalDevice4444FormatsFeaturesEXT;
+ //=== VK_ARM_rasterization_order_attachment_access ===
+ struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM;
+
+ //=== VK_EXT_rgba10x6_formats ===
+ struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT;
+
#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
//=== VK_EXT_directfb_surface ===
struct DirectFBSurfaceCreateInfoEXT;
@@ -1180,6 +1264,10 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_physical_device_drm ===
struct PhysicalDeviceDrmPropertiesEXT;
+ //=== VK_EXT_depth_clip_control ===
+ struct PhysicalDeviceDepthClipControlFeaturesEXT;
+ struct PipelineViewportDepthClipControlCreateInfoEXT;
+
//=== VK_EXT_primitive_topology_list_restart ===
struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
@@ -1196,6 +1284,20 @@ namespace VULKAN_HPP_NAMESPACE
struct SemaphoreGetZirconHandleInfoFUCHSIA;
#endif /*VK_USE_PLATFORM_FUCHSIA*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ struct BufferCollectionCreateInfoFUCHSIA;
+ struct ImportMemoryBufferCollectionFUCHSIA;
+ struct BufferCollectionImageCreateInfoFUCHSIA;
+ struct BufferConstraintsInfoFUCHSIA;
+ struct BufferCollectionBufferCreateInfoFUCHSIA;
+ struct BufferCollectionPropertiesFUCHSIA;
+ struct SysmemColorSpaceFUCHSIA;
+ struct ImageConstraintsInfoFUCHSIA;
+ struct ImageFormatConstraintsInfoFUCHSIA;
+ struct BufferCollectionConstraintsInfoFUCHSIA;
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
struct SubpassShadingPipelineCreateInfoHUAWEI;
struct PhysicalDeviceSubpassShadingFeaturesHUAWEI;
@@ -1220,9 +1322,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceColorWriteEnableFeaturesEXT;
struct PipelineColorWriteCreateInfoEXT;
- //=== VK_EXT_global_priority_query ===
- struct PhysicalDeviceGlobalPriorityQueryFeaturesEXT;
- struct QueueFamilyGlobalPriorityPropertiesEXT;
+ //=== VK_EXT_image_view_min_lod ===
+ struct PhysicalDeviceImageViewMinLodFeaturesEXT;
+ struct ImageViewMinLodCreateInfoEXT;
//=== VK_EXT_multi_draw ===
struct PhysicalDeviceMultiDrawFeaturesEXT;
@@ -1230,6 +1332,21 @@ namespace VULKAN_HPP_NAMESPACE
struct MultiDrawInfoEXT;
struct MultiDrawIndexedInfoEXT;
+ //=== VK_EXT_border_color_swizzle ===
+ struct PhysicalDeviceBorderColorSwizzleFeaturesEXT;
+ struct SamplerBorderColorComponentMappingCreateInfoEXT;
+
+ //=== VK_EXT_pageable_device_local_memory ===
+ struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+
+ //=== VK_QCOM_fragment_density_map_offset ===
+ struct PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
+ struct PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
+ struct SubpassFragmentDensityMapOffsetEndInfoQCOM;
+
+ //=== VK_NV_linear_color_attachment ===
+ struct PhysicalDeviceLinearColorAttachmentFeaturesNV;
+
//===============
//=== HANDLEs ===
//===============
@@ -1237,7 +1354,8 @@ namespace VULKAN_HPP_NAMESPACE
class SurfaceKHR
{
public:
- using CType = VkSurfaceKHR;
+ using CType = VkSurfaceKHR;
+ using NativeType = VkSurfaceKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eSurfaceKHR;
@@ -1301,8 +1419,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkSurfaceKHR m_surfaceKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::SurfaceKHR ) == sizeof( VkSurfaceKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceKHR ) == sizeof( VkSurfaceKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceKHR>::value,
+ "SurfaceKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1333,7 +1453,8 @@ namespace VULKAN_HPP_NAMESPACE
class DebugReportCallbackEXT
{
public:
- using CType = VkDebugReportCallbackEXT;
+ using CType = VkDebugReportCallbackEXT;
+ using NativeType = VkDebugReportCallbackEXT;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDebugReportCallbackEXT;
@@ -1399,8 +1520,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDebugReportCallbackEXT m_debugReportCallbackEXT = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT ) == sizeof( VkDebugReportCallbackEXT ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT ) ==
+ sizeof( VkDebugReportCallbackEXT ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT>::value,
+ "DebugReportCallbackEXT is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1431,7 +1555,8 @@ namespace VULKAN_HPP_NAMESPACE
class DebugUtilsMessengerEXT
{
public:
- using CType = VkDebugUtilsMessengerEXT;
+ using CType = VkDebugUtilsMessengerEXT;
+ using NativeType = VkDebugUtilsMessengerEXT;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDebugUtilsMessengerEXT;
@@ -1497,8 +1622,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDebugUtilsMessengerEXT m_debugUtilsMessengerEXT = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT ) == sizeof( VkDebugUtilsMessengerEXT ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT ) ==
+ sizeof( VkDebugUtilsMessengerEXT ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT>::value,
+ "DebugUtilsMessengerEXT is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1522,7 +1650,8 @@ namespace VULKAN_HPP_NAMESPACE
class DisplayKHR
{
public:
- using CType = VkDisplayKHR;
+ using CType = VkDisplayKHR;
+ using NativeType = VkDisplayKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDisplayKHR;
@@ -1586,8 +1715,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDisplayKHR m_displayKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DisplayKHR ) == sizeof( VkDisplayKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayKHR ) == sizeof( VkDisplayKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayKHR>::value,
+ "DisplayKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1618,7 +1749,8 @@ namespace VULKAN_HPP_NAMESPACE
class SwapchainKHR
{
public:
- using CType = VkSwapchainKHR;
+ using CType = VkSwapchainKHR;
+ using NativeType = VkSwapchainKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eSwapchainKHR;
@@ -1683,8 +1815,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkSwapchainKHR m_swapchainKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::SwapchainKHR ) == sizeof( VkSwapchainKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainKHR ) == sizeof( VkSwapchainKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SwapchainKHR>::value,
+ "SwapchainKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1715,7 +1849,8 @@ namespace VULKAN_HPP_NAMESPACE
class Semaphore
{
public:
- using CType = VkSemaphore;
+ using CType = VkSemaphore;
+ using NativeType = VkSemaphore;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eSemaphore;
@@ -1778,8 +1913,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkSemaphore m_semaphore = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Semaphore ) == sizeof( VkSemaphore ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Semaphore ) == sizeof( VkSemaphore ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Semaphore>::value,
+ "Semaphore is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1810,7 +1947,8 @@ namespace VULKAN_HPP_NAMESPACE
class Fence
{
public:
- using CType = VkFence;
+ using CType = VkFence;
+ using NativeType = VkFence;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eFence;
@@ -1873,8 +2011,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkFence m_fence = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Fence ) == sizeof( VkFence ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Fence ) == sizeof( VkFence ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Fence>::value,
+ "Fence is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eFence>
@@ -1903,7 +2043,8 @@ namespace VULKAN_HPP_NAMESPACE
class PerformanceConfigurationINTEL
{
public:
- using CType = VkPerformanceConfigurationINTEL;
+ using CType = VkPerformanceConfigurationINTEL;
+ using NativeType = VkPerformanceConfigurationINTEL;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::ePerformanceConfigurationINTEL;
@@ -1970,9 +2111,12 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkPerformanceConfigurationINTEL m_performanceConfigurationINTEL = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL ) ==
- sizeof( VkPerformanceConfigurationINTEL ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL ) ==
+ sizeof( VkPerformanceConfigurationINTEL ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL>::value,
+ "PerformanceConfigurationINTEL is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -1996,7 +2140,8 @@ namespace VULKAN_HPP_NAMESPACE
class QueryPool
{
public:
- using CType = VkQueryPool;
+ using CType = VkQueryPool;
+ using NativeType = VkQueryPool;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eQueryPool;
@@ -2059,8 +2204,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkQueryPool m_queryPool = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::QueryPool ) == sizeof( VkQueryPool ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPool ) == sizeof( VkQueryPool ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueryPool>::value,
+ "QueryPool is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -2091,7 +2238,8 @@ namespace VULKAN_HPP_NAMESPACE
class Buffer
{
public:
- using CType = VkBuffer;
+ using CType = VkBuffer;
+ using NativeType = VkBuffer;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eBuffer;
@@ -2154,8 +2302,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkBuffer m_buffer = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Buffer ) == sizeof( VkBuffer ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Buffer ) == sizeof( VkBuffer ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Buffer>::value,
+ "Buffer is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eBuffer>
@@ -2185,7 +2335,8 @@ namespace VULKAN_HPP_NAMESPACE
class PipelineLayout
{
public:
- using CType = VkPipelineLayout;
+ using CType = VkPipelineLayout;
+ using NativeType = VkPipelineLayout;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::ePipelineLayout;
@@ -2250,8 +2401,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkPipelineLayout m_pipelineLayout = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::PipelineLayout ) == sizeof( VkPipelineLayout ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineLayout ) == sizeof( VkPipelineLayout ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineLayout>::value,
+ "PipelineLayout is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -2282,7 +2435,8 @@ namespace VULKAN_HPP_NAMESPACE
class DescriptorSet
{
public:
- using CType = VkDescriptorSet;
+ using CType = VkDescriptorSet;
+ using NativeType = VkDescriptorSet;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSet;
@@ -2347,8 +2501,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDescriptorSet m_descriptorSet = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSet ) == sizeof( VkDescriptorSet ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSet ) == sizeof( VkDescriptorSet ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSet>::value,
+ "DescriptorSet is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -2379,7 +2535,8 @@ namespace VULKAN_HPP_NAMESPACE
class ImageView
{
public:
- using CType = VkImageView;
+ using CType = VkImageView;
+ using NativeType = VkImageView;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eImageView;
@@ -2442,8 +2599,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkImageView m_imageView = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::ImageView ) == sizeof( VkImageView ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageView ) == sizeof( VkImageView ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageView>::value,
+ "ImageView is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -2474,7 +2633,8 @@ namespace VULKAN_HPP_NAMESPACE
class Pipeline
{
public:
- using CType = VkPipeline;
+ using CType = VkPipeline;
+ using NativeType = VkPipeline;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::ePipeline;
@@ -2537,8 +2697,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkPipeline m_pipeline = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Pipeline ) == sizeof( VkPipeline ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Pipeline ) == sizeof( VkPipeline ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Pipeline>::value,
+ "Pipeline is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::ePipeline>
@@ -2568,7 +2730,8 @@ namespace VULKAN_HPP_NAMESPACE
class Image
{
public:
- using CType = VkImage;
+ using CType = VkImage;
+ using NativeType = VkImage;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eImage;
@@ -2631,8 +2794,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkImage m_image = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Image ) == sizeof( VkImage ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Image ) == sizeof( VkImage ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Image>::value,
+ "Image is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eImage>
@@ -2661,7 +2826,8 @@ namespace VULKAN_HPP_NAMESPACE
class AccelerationStructureNV
{
public:
- using CType = VkAccelerationStructureNV;
+ using CType = VkAccelerationStructureNV;
+ using NativeType = VkAccelerationStructureNV;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureNV;
@@ -2727,8 +2893,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkAccelerationStructureNV m_accelerationStructureNV = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureNV ) == sizeof( VkAccelerationStructureNV ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureNV ) ==
+ sizeof( VkAccelerationStructureNV ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureNV>::value,
+ "AccelerationStructureNV is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -2759,7 +2928,8 @@ namespace VULKAN_HPP_NAMESPACE
class DescriptorUpdateTemplate
{
public:
- using CType = VkDescriptorUpdateTemplate;
+ using CType = VkDescriptorUpdateTemplate;
+ using NativeType = VkDescriptorUpdateTemplate;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorUpdateTemplate;
@@ -2825,8 +2995,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDescriptorUpdateTemplate m_descriptorUpdateTemplate = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate ) == sizeof( VkDescriptorUpdateTemplate ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate ) ==
+ sizeof( VkDescriptorUpdateTemplate ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>::value,
+ "DescriptorUpdateTemplate is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -2858,7 +3031,8 @@ namespace VULKAN_HPP_NAMESPACE
class Event
{
public:
- using CType = VkEvent;
+ using CType = VkEvent;
+ using NativeType = VkEvent;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eEvent;
@@ -2921,8 +3095,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkEvent m_event = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Event ) == sizeof( VkEvent ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Event ) == sizeof( VkEvent ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Event>::value,
+ "Event is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eEvent>
@@ -2951,7 +3127,8 @@ namespace VULKAN_HPP_NAMESPACE
class AccelerationStructureKHR
{
public:
- using CType = VkAccelerationStructureKHR;
+ using CType = VkAccelerationStructureKHR;
+ using NativeType = VkAccelerationStructureKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eAccelerationStructureKHR;
@@ -3017,8 +3194,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkAccelerationStructureKHR m_accelerationStructureKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR ) == sizeof( VkAccelerationStructureKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR ) ==
+ sizeof( VkAccelerationStructureKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR>::value,
+ "AccelerationStructureKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -3049,7 +3229,8 @@ namespace VULKAN_HPP_NAMESPACE
class CommandBuffer
{
public:
- using CType = VkCommandBuffer;
+ using CType = VkCommandBuffer;
+ using NativeType = VkCommandBuffer;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eCommandBuffer;
@@ -3100,19 +3281,19 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo * pBeginInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo * pBeginInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- begin( const CommandBufferBeginInfo & beginInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- end( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ end( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -3122,13 +3303,13 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
reset( VULKAN_HPP_NAMESPACE::CommandBufferResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -3161,22 +3342,22 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setLineWidth( float lineWidth,
+ void setLineWidth( float lineWidth,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setDepthBias( float depthBiasConstantFactor,
- float depthBiasClamp,
- float depthBiasSlopeFactor,
+ void setDepthBias( float depthBiasConstantFactor,
+ float depthBiasClamp,
+ float depthBiasSlopeFactor,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setBlendConstants( const float blendConstants[4],
+ void setBlendConstants( const float blendConstants[4],
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setDepthBounds( float minDepthBounds,
- float maxDepthBounds,
+ void setDepthBounds( float minDepthBounds,
+ float maxDepthBounds,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -3235,18 +3416,18 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void draw( uint32_t vertexCount,
- uint32_t instanceCount,
- uint32_t firstVertex,
- uint32_t firstInstance,
+ void draw( uint32_t vertexCount,
+ uint32_t instanceCount,
+ uint32_t firstVertex,
+ uint32_t firstInstance,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void drawIndexed( uint32_t indexCount,
- uint32_t instanceCount,
- uint32_t firstIndex,
- int32_t vertexOffset,
- uint32_t firstInstance,
+ void drawIndexed( uint32_t indexCount,
+ uint32_t instanceCount,
+ uint32_t firstIndex,
+ int32_t vertexOffset,
+ uint32_t firstInstance,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -3264,9 +3445,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void dispatch( uint32_t groupCountX,
- uint32_t groupCountY,
- uint32_t groupCountZ,
+ void dispatch( uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -3365,10 +3546,10 @@ namespace VULKAN_HPP_NAMESPACE
const void * pData,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- ArrayProxy<const T> const & data,
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ ArrayProxy<const DataType> const & data,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3390,7 +3571,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void clearColorImage( VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearColorValue & color,
+ const VULKAN_HPP_NAMESPACE::ClearColorValue & color,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3408,7 +3589,7 @@ namespace VULKAN_HPP_NAMESPACE
void
clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearDepthStencilValue & depthStencil,
+ const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3508,7 +3689,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
uint32_t query,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void resetQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
@@ -3540,11 +3721,11 @@ namespace VULKAN_HPP_NAMESPACE
const void * pValues,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ template <typename ValuesType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout,
VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags,
uint32_t offset,
- ArrayProxy<const T> const & values,
+ ArrayProxy<const ValuesType> const & values,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3554,8 +3735,8 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void beginRenderPass( const RenderPassBeginInfo & renderPassBegin,
- VULKAN_HPP_NAMESPACE::SubpassContents contents,
+ void beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ VULKAN_HPP_NAMESPACE::SubpassContents contents,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3579,16 +3760,16 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_VERSION_1_1 ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setDeviceMask( uint32_t deviceMask,
+ void setDeviceMask( uint32_t deviceMask,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void dispatchBase( uint32_t baseGroupX,
- uint32_t baseGroupY,
- uint32_t baseGroupZ,
- uint32_t groupCountX,
- uint32_t groupCountY,
- uint32_t groupCountZ,
+ void dispatchBase( uint32_t baseGroupX,
+ uint32_t baseGroupY,
+ uint32_t baseGroupZ,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
//=== VK_VERSION_1_2 ===
@@ -3618,8 +3799,8 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void beginRenderPass2( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo,
+ void beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3629,8 +3810,8 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void nextSubpass2( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo,
+ void nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3639,10 +3820,216 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void endRenderPass2( const SubpassEndInfo & subpassEndInfo,
+ void endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_VERSION_1_3 ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void resetEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void waitEvents2( uint32_t eventCount,
+ const VULKAN_HPP_NAMESPACE::Event * pEvents,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void waitEvents2( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void endRendering( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setViewportWithCount( uint32_t viewportCount,
+ const VULKAN_HPP_NAMESPACE::Viewport * pViewports,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setViewportWithCount( ArrayProxy<const VULKAN_HPP_NAMESPACE::Viewport> const & viewports,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setScissorWithCount( uint32_t scissorCount,
+ const VULKAN_HPP_NAMESPACE::Rect2D * pScissors,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setScissorWithCount( ArrayProxy<const VULKAN_HPP_NAMESPACE::Rect2D> const & scissors,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void bindVertexBuffers2( uint32_t firstBinding,
+ uint32_t bindingCount,
+ const VULKAN_HPP_NAMESPACE::Buffer * pBuffers,
+ const VULKAN_HPP_NAMESPACE::DeviceSize * pOffsets,
+ const VULKAN_HPP_NAMESPACE::DeviceSize * pSizes,
+ const VULKAN_HPP_NAMESPACE::DeviceSize * pStrides,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void bindVertexBuffers2(
+ uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void
+ setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask,
+ VULKAN_HPP_NAMESPACE::StencilOp failOp,
+ VULKAN_HPP_NAMESPACE::StencilOp passOp,
+ VULKAN_HPP_NAMESPACE::StencilOp depthFailOp,
+ VULKAN_HPP_NAMESPACE::CompareOp compareOp,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+
//=== VK_EXT_debug_marker ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -3650,7 +4037,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo,
+ void debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3662,7 +4049,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo,
+ void debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3674,7 +4061,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void beginVideoCodingKHR( const VideoBeginCodingInfoKHR & beginInfo,
+ void beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3683,7 +4070,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void endVideoCodingKHR( const VideoEndCodingInfoKHR & endCodingInfo,
+ void endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3692,7 +4079,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void controlVideoCodingKHR( const VideoCodingControlInfoKHR & codingControlInfo,
+ void controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -3705,7 +4092,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void decodeVideoKHR( const VideoDecodeInfoKHR & frameInfo,
+ void decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -3723,9 +4110,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void bindTransformFeedbackBuffersEXT(
- uint32_t firstBinding,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3739,10 +4126,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void beginTransformFeedbackEXT( uint32_t firstCounterBuffer,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
+ void beginTransformFeedbackEXT( uint32_t firstCounterBuffer,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & counterBufferOffsets
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3756,10 +4143,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void endTransformFeedbackEXT( uint32_t firstCounterBuffer,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
+ void endTransformFeedbackEXT( uint32_t firstCounterBuffer,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & counterBufferOffsets
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3794,7 +4181,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void cuLaunchKernelNVX( const CuLaunchInfoNVX & launchInfo,
+ void cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3816,22 +4203,36 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
+ //=== VK_KHR_dynamic_rendering ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo * pRenderingInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void endRenderingKHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
//=== VK_KHR_device_group ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setDeviceMaskKHR( uint32_t deviceMask,
+ void setDeviceMaskKHR( uint32_t deviceMask,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void dispatchBaseKHR( uint32_t baseGroupX,
- uint32_t baseGroupY,
- uint32_t baseGroupZ,
- uint32_t groupCountX,
- uint32_t groupCountY,
- uint32_t groupCountZ,
+ void dispatchBaseKHR( uint32_t baseGroupX,
+ uint32_t baseGroupY,
+ uint32_t baseGroupZ,
+ uint32_t groupCountX,
+ uint32_t groupCountY,
+ uint32_t groupCountZ,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_push_descriptor ===
@@ -3859,6 +4260,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pData,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ VULKAN_HPP_NAMESPACE::PipelineLayout layout,
+ uint32_t set,
+ DataType const & data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_EXT_conditional_rendering ===
@@ -3868,9 +4278,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
- VULKAN_HPP_NOEXCEPT;
+ void beginConditionalRenderingEXT(
+ const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -3915,8 +4325,8 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void beginRenderPass2KHR( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo,
+ void beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3926,8 +4336,8 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void nextSubpass2KHR( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo,
+ void nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3936,7 +4346,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void endRenderPass2KHR( const SubpassEndInfo & subpassEndInfo,
+ void endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3949,7 +4359,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void
- beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
+ beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3963,7 +4373,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void
- insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
+ insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -3974,7 +4384,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo,
+ void setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4018,7 +4428,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR & info,
+ void copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4029,9 +4439,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
- VULKAN_HPP_NOEXCEPT;
+ void copyAccelerationStructureToMemoryKHR(
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -4040,9 +4450,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
- VULKAN_HPP_NOEXCEPT;
+ void copyMemoryToAccelerationStructureKHR(
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -4114,14 +4524,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void buildAccelerationStructureNV( const AccelerationStructureInfoNV & info,
- VULKAN_HPP_NAMESPACE::Buffer instanceData,
- VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
- VULKAN_HPP_NAMESPACE::Bool32 update,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
- VULKAN_HPP_NAMESPACE::Buffer scratch,
- VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset,
+ void buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info,
+ VULKAN_HPP_NAMESPACE::Buffer instanceData,
+ VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
+ VULKAN_HPP_NAMESPACE::Bool32 update,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
+ VULKAN_HPP_NAMESPACE::Buffer scratch,
+ VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4186,7 +4596,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
//=== VK_AMD_buffer_marker ===
@@ -4201,8 +4611,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_mesh_shader ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void drawMeshTasksNV( uint32_t taskCount,
- uint32_t firstTask,
+ void drawMeshTasksNV( uint32_t taskCount,
+ uint32_t firstTask,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -4220,7 +4630,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize countBufferOffset,
uint32_t maxDrawCount,
uint32_t stride,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
//=== VK_NV_scissor_exclusive ===
@@ -4240,8 +4650,13 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_device_diagnostic_checkpoints ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setCheckpointNV( const void * pCheckpointMarker,
+ void setCheckpointNV( const void * pCheckpointMarker,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename CheckpointMarkerType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setCheckpointNV( CheckpointMarkerType const & checkpointMarker,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_INTEL_performance_query ===
@@ -4252,7 +4667,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL & markerInfo,
+ setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4263,7 +4678,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL & markerInfo,
+ setPerformanceStreamMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4274,7 +4689,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL & overrideInfo,
+ setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4287,7 +4702,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setFragmentShadingRateKHR( const Extent2D & fragmentSize,
+ void setFragmentShadingRateKHR( const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize,
const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2],
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
@@ -4296,8 +4711,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_line_rasterization ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setLineStippleEXT( uint32_t lineStippleFactor,
- uint16_t lineStipplePattern,
+ void setLineStippleEXT( uint32_t lineStippleFactor,
+ uint16_t lineStipplePattern,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_extended_dynamic_state ===
@@ -4350,10 +4765,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void bindVertexBuffers2EXT(
- uint32_t firstBinding,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4373,7 +4788,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void setDepthBoundsTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -4397,7 +4812,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV & generatedCommandsInfo,
+ void preprocessGeneratedCommandsNV( const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4409,8 +4824,8 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
- const GeneratedCommandsInfoNV & generatedCommandsInfo,
+ void executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4430,7 +4845,7 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void encodeVideoKHR( const VideoEncodeInfoKHR & encodeInfo,
+ void encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -4438,54 +4853,54 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_synchronization2 ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- const VULKAN_HPP_NAMESPACE::DependencyInfoKHR * pDependencyInfo,
+ void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- const DependencyInfoKHR & dependencyInfo,
+ void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask,
+ void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void waitEvents2KHR( uint32_t eventCount,
- const VULKAN_HPP_NAMESPACE::Event * pEvents,
- const VULKAN_HPP_NAMESPACE::DependencyInfoKHR * pDependencyInfos,
+ void waitEvents2KHR( uint32_t eventCount,
+ const VULKAN_HPP_NAMESPACE::Event * pEvents,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfos,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfoKHR> const & dependencyInfos,
+ void waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfoKHR * pDependencyInfo,
+ void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo * pDependencyInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void pipelineBarrier2KHR( const DependencyInfoKHR & dependencyInfo,
+ void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t query,
+ void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- uint32_t marker,
+ void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ uint32_t marker,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
//=== VK_NV_fragment_shading_rate_enums ===
@@ -4499,56 +4914,56 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2KHR * pCopyBufferInfo,
+ void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 * pCopyBufferInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyBuffer2KHR( const CopyBufferInfo2KHR & copyBufferInfo,
+ void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2KHR * pCopyImageInfo,
+ void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 * pCopyImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyImage2KHR( const CopyImageInfo2KHR & copyImageInfo,
+ void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2KHR * pCopyBufferToImageInfo,
+ void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 * pCopyBufferToImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyBufferToImage2KHR( const CopyBufferToImageInfo2KHR & copyBufferToImageInfo,
+ void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2KHR * pCopyImageToBufferInfo,
+ void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 * pCopyImageToBufferInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void copyImageToBuffer2KHR( const CopyImageToBufferInfo2KHR & copyImageToBufferInfo,
+ void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2KHR * pBlitImageInfo,
+ void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 * pBlitImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void blitImage2KHR( const BlitImageInfo2KHR & blitImageInfo,
+ void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2KHR * pResolveImageInfo,
+ void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 * pResolveImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void resolveImage2KHR( const ResolveImageInfo2KHR & resolveImageInfo,
+ void resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4565,13 +4980,13 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void traceRaysKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- uint32_t width,
- uint32_t height,
- uint32_t depth,
+ void traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ uint32_t width,
+ uint32_t height,
+ uint32_t depth,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -4584,16 +4999,16 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress,
+ void traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize,
+ void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
@@ -4631,12 +5046,12 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void
- setPatchControlPointsEXT( uint32_t patchControlPoints,
+ setPatchControlPointsEXT( uint32_t patchControlPoints,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void setRasterizerDiscardEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -4649,7 +5064,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void setPrimitiveRestartEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_color_write_enable ===
@@ -4720,8 +5135,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkCommandBuffer m_commandBuffer = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::CommandBuffer ) == sizeof( VkCommandBuffer ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBuffer ) == sizeof( VkCommandBuffer ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBuffer>::value,
+ "CommandBuffer is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -4752,7 +5169,8 @@ namespace VULKAN_HPP_NAMESPACE
class DeviceMemory
{
public:
- using CType = VkDeviceMemory;
+ using CType = VkDeviceMemory;
+ using NativeType = VkDeviceMemory;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDeviceMemory;
@@ -4817,8 +5235,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDeviceMemory m_deviceMemory = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemory ) == sizeof( VkDeviceMemory ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemory ) == sizeof( VkDeviceMemory ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceMemory>::value,
+ "DeviceMemory is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -4850,7 +5270,8 @@ namespace VULKAN_HPP_NAMESPACE
class VideoSessionKHR
{
public:
- using CType = VkVideoSessionKHR;
+ using CType = VkVideoSessionKHR;
+ using NativeType = VkVideoSessionKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionKHR;
@@ -4915,8 +5336,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkVideoSessionKHR m_videoSessionKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionKHR ) == sizeof( VkVideoSessionKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionKHR ) == sizeof( VkVideoSessionKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoSessionKHR>::value,
+ "VideoSessionKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -4941,7 +5364,8 @@ namespace VULKAN_HPP_NAMESPACE
class DeferredOperationKHR
{
public:
- using CType = VkDeferredOperationKHR;
+ using CType = VkDeferredOperationKHR;
+ using NativeType = VkDeferredOperationKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDeferredOperationKHR;
@@ -5006,8 +5430,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDeferredOperationKHR m_deferredOperationKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DeferredOperationKHR ) == sizeof( VkDeferredOperationKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeferredOperationKHR ) == sizeof( VkDeferredOperationKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeferredOperationKHR>::value,
+ "DeferredOperationKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5028,10 +5454,115 @@ namespace VULKAN_HPP_NAMESPACE
static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true;
};
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ class BufferCollectionFUCHSIA
+ {
+ public:
+ using CType = VkBufferCollectionFUCHSIA;
+ using NativeType = VkBufferCollectionFUCHSIA;
+
+ static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
+ VULKAN_HPP_NAMESPACE::ObjectType::eBufferCollectionFUCHSIA;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType =
+ VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA;
+
+ public:
+ VULKAN_HPP_CONSTEXPR BufferCollectionFUCHSIA() = default;
+ VULKAN_HPP_CONSTEXPR BufferCollectionFUCHSIA( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {}
+ VULKAN_HPP_TYPESAFE_EXPLICIT
+ BufferCollectionFUCHSIA( VkBufferCollectionFUCHSIA bufferCollectionFUCHSIA ) VULKAN_HPP_NOEXCEPT
+ : m_bufferCollectionFUCHSIA( bufferCollectionFUCHSIA )
+ {}
+
+# if defined( VULKAN_HPP_TYPESAFE_CONVERSION )
+ BufferCollectionFUCHSIA & operator=( VkBufferCollectionFUCHSIA bufferCollectionFUCHSIA ) VULKAN_HPP_NOEXCEPT
+ {
+ m_bufferCollectionFUCHSIA = bufferCollectionFUCHSIA;
+ return *this;
+ }
+# endif
+
+ BufferCollectionFUCHSIA & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT
+ {
+ m_bufferCollectionFUCHSIA = {};
+ return *this;
+ }
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCollectionFUCHSIA const & ) const = default;
+# else
+ bool operator==( BufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return m_bufferCollectionFUCHSIA == rhs.m_bufferCollectionFUCHSIA;
+ }
+
+ bool operator!=( BufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return m_bufferCollectionFUCHSIA != rhs.m_bufferCollectionFUCHSIA;
+ }
+
+ bool operator<( BufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return m_bufferCollectionFUCHSIA < rhs.m_bufferCollectionFUCHSIA;
+ }
+# endif
+
+ VULKAN_HPP_TYPESAFE_EXPLICIT operator VkBufferCollectionFUCHSIA() const VULKAN_HPP_NOEXCEPT
+ {
+ return m_bufferCollectionFUCHSIA;
+ }
+
+ explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ {
+ return m_bufferCollectionFUCHSIA != VK_NULL_HANDLE;
+ }
+
+ bool operator!() const VULKAN_HPP_NOEXCEPT
+ {
+ return m_bufferCollectionFUCHSIA == VK_NULL_HANDLE;
+ }
+
+ private:
+ VkBufferCollectionFUCHSIA m_bufferCollectionFUCHSIA = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA ) ==
+ sizeof( VkBufferCollectionFUCHSIA ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA>::value,
+ "BufferCollectionFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct VULKAN_HPP_DEPRECATED(
+ "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eBufferCollectionFUCHSIA>
+ {
+ using type = VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA;
+ };
+
+ template <>
+ struct CppType<VULKAN_HPP_NAMESPACE::ObjectType, VULKAN_HPP_NAMESPACE::ObjectType::eBufferCollectionFUCHSIA>
+ {
+ using Type = VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA;
+ };
+
+ template <>
+ struct CppType<VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT,
+ VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA>
+ {
+ using Type = VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA;
+ };
+
+ template <>
+ struct isVulkanHandleType<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA>
+ {
+ static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
class BufferView
{
public:
- using CType = VkBufferView;
+ using CType = VkBufferView;
+ using NativeType = VkBufferView;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eBufferView;
@@ -5095,8 +5626,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkBufferView m_bufferView = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::BufferView ) == sizeof( VkBufferView ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferView ) == sizeof( VkBufferView ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferView>::value,
+ "BufferView is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5127,7 +5660,8 @@ namespace VULKAN_HPP_NAMESPACE
class CommandPool
{
public:
- using CType = VkCommandPool;
+ using CType = VkCommandPool;
+ using NativeType = VkCommandPool;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eCommandPool;
@@ -5192,8 +5726,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkCommandPool m_commandPool = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::CommandPool ) == sizeof( VkCommandPool ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandPool ) == sizeof( VkCommandPool ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandPool>::value,
+ "CommandPool is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5224,7 +5760,8 @@ namespace VULKAN_HPP_NAMESPACE
class PipelineCache
{
public:
- using CType = VkPipelineCache;
+ using CType = VkPipelineCache;
+ using NativeType = VkPipelineCache;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::ePipelineCache;
@@ -5289,8 +5826,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkPipelineCache m_pipelineCache = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::PipelineCache ) == sizeof( VkPipelineCache ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCache ) == sizeof( VkPipelineCache ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCache>::value,
+ "PipelineCache is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5321,7 +5860,8 @@ namespace VULKAN_HPP_NAMESPACE
class CuFunctionNVX
{
public:
- using CType = VkCuFunctionNVX;
+ using CType = VkCuFunctionNVX;
+ using NativeType = VkCuFunctionNVX;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eCuFunctionNVX;
@@ -5386,8 +5926,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkCuFunctionNVX m_cuFunctionNVX = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::CuFunctionNVX ) == sizeof( VkCuFunctionNVX ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuFunctionNVX ) == sizeof( VkCuFunctionNVX ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CuFunctionNVX>::value,
+ "CuFunctionNVX is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5418,7 +5960,8 @@ namespace VULKAN_HPP_NAMESPACE
class CuModuleNVX
{
public:
- using CType = VkCuModuleNVX;
+ using CType = VkCuModuleNVX;
+ using NativeType = VkCuModuleNVX;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eCuModuleNVX;
@@ -5483,8 +6026,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkCuModuleNVX m_cuModuleNVX = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::CuModuleNVX ) == sizeof( VkCuModuleNVX ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuModuleNVX ) == sizeof( VkCuModuleNVX ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CuModuleNVX>::value,
+ "CuModuleNVX is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5515,7 +6060,8 @@ namespace VULKAN_HPP_NAMESPACE
class DescriptorPool
{
public:
- using CType = VkDescriptorPool;
+ using CType = VkDescriptorPool;
+ using NativeType = VkDescriptorPool;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorPool;
@@ -5580,8 +6126,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDescriptorPool m_descriptorPool = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPool ) == sizeof( VkDescriptorPool ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPool ) == sizeof( VkDescriptorPool ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorPool>::value,
+ "DescriptorPool is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5612,7 +6160,8 @@ namespace VULKAN_HPP_NAMESPACE
class DescriptorSetLayout
{
public:
- using CType = VkDescriptorSetLayout;
+ using CType = VkDescriptorSetLayout;
+ using NativeType = VkDescriptorSetLayout;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDescriptorSetLayout;
@@ -5677,8 +6226,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDescriptorSetLayout m_descriptorSetLayout = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayout ) == sizeof( VkDescriptorSetLayout ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetLayout>::value,
+ "DescriptorSetLayout is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5709,7 +6260,8 @@ namespace VULKAN_HPP_NAMESPACE
class Framebuffer
{
public:
- using CType = VkFramebuffer;
+ using CType = VkFramebuffer;
+ using NativeType = VkFramebuffer;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eFramebuffer;
@@ -5774,8 +6326,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkFramebuffer m_framebuffer = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Framebuffer ) == sizeof( VkFramebuffer ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Framebuffer ) == sizeof( VkFramebuffer ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Framebuffer>::value,
+ "Framebuffer is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5806,7 +6360,8 @@ namespace VULKAN_HPP_NAMESPACE
class IndirectCommandsLayoutNV
{
public:
- using CType = VkIndirectCommandsLayoutNV;
+ using CType = VkIndirectCommandsLayoutNV;
+ using NativeType = VkIndirectCommandsLayoutNV;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eIndirectCommandsLayoutNV;
@@ -5872,8 +6427,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkIndirectCommandsLayoutNV m_indirectCommandsLayoutNV = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV ) == sizeof( VkIndirectCommandsLayoutNV ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV ) ==
+ sizeof( VkIndirectCommandsLayoutNV ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV>::value,
+ "IndirectCommandsLayoutNV is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -5894,100 +6452,105 @@ namespace VULKAN_HPP_NAMESPACE
static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true;
};
- class PrivateDataSlotEXT
+ class PrivateDataSlot
{
public:
- using CType = VkPrivateDataSlotEXT;
+ using CType = VkPrivateDataSlot;
+ using NativeType = VkPrivateDataSlot;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
- VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlotEXT;
+ VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlot;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType =
VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown;
public:
- VULKAN_HPP_CONSTEXPR PrivateDataSlotEXT() = default;
- VULKAN_HPP_CONSTEXPR PrivateDataSlotEXT( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {}
- VULKAN_HPP_TYPESAFE_EXPLICIT PrivateDataSlotEXT( VkPrivateDataSlotEXT privateDataSlotEXT ) VULKAN_HPP_NOEXCEPT
- : m_privateDataSlotEXT( privateDataSlotEXT )
+ VULKAN_HPP_CONSTEXPR PrivateDataSlot() = default;
+ VULKAN_HPP_CONSTEXPR PrivateDataSlot( std::nullptr_t ) VULKAN_HPP_NOEXCEPT {}
+ VULKAN_HPP_TYPESAFE_EXPLICIT PrivateDataSlot( VkPrivateDataSlot privateDataSlot ) VULKAN_HPP_NOEXCEPT
+ : m_privateDataSlot( privateDataSlot )
{}
#if defined( VULKAN_HPP_TYPESAFE_CONVERSION )
- PrivateDataSlotEXT & operator=( VkPrivateDataSlotEXT privateDataSlotEXT ) VULKAN_HPP_NOEXCEPT
+ PrivateDataSlot & operator=( VkPrivateDataSlot privateDataSlot ) VULKAN_HPP_NOEXCEPT
{
- m_privateDataSlotEXT = privateDataSlotEXT;
+ m_privateDataSlot = privateDataSlot;
return *this;
}
#endif
- PrivateDataSlotEXT & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT
+ PrivateDataSlot & operator=( std::nullptr_t ) VULKAN_HPP_NOEXCEPT
{
- m_privateDataSlotEXT = {};
+ m_privateDataSlot = {};
return *this;
}
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PrivateDataSlotEXT const & ) const = default;
+ auto operator<=>( PrivateDataSlot const & ) const = default;
#else
- bool operator==( PrivateDataSlotEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PrivateDataSlot const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT == rhs.m_privateDataSlotEXT;
+ return m_privateDataSlot == rhs.m_privateDataSlot;
}
- bool operator!=( PrivateDataSlotEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PrivateDataSlot const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT != rhs.m_privateDataSlotEXT;
+ return m_privateDataSlot != rhs.m_privateDataSlot;
}
- bool operator<( PrivateDataSlotEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator<( PrivateDataSlot const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT < rhs.m_privateDataSlotEXT;
+ return m_privateDataSlot < rhs.m_privateDataSlot;
}
#endif
- VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPrivateDataSlotEXT() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_TYPESAFE_EXPLICIT operator VkPrivateDataSlot() const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT;
+ return m_privateDataSlot;
}
explicit operator bool() const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT != VK_NULL_HANDLE;
+ return m_privateDataSlot != VK_NULL_HANDLE;
}
bool operator!() const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT == VK_NULL_HANDLE;
+ return m_privateDataSlot == VK_NULL_HANDLE;
}
private:
- VkPrivateDataSlotEXT m_privateDataSlotEXT = {};
+ VkPrivateDataSlot m_privateDataSlot = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT ) == sizeof( VkPrivateDataSlotEXT ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PrivateDataSlot ) == sizeof( VkPrivateDataSlot ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PrivateDataSlot>::value,
+ "PrivateDataSlot is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
- "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::ePrivateDataSlotEXT>
+ "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::ePrivateDataSlot>
{
- using type = VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT;
+ using type = VULKAN_HPP_NAMESPACE::PrivateDataSlot;
};
template <>
- struct CppType<VULKAN_HPP_NAMESPACE::ObjectType, VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlotEXT>
+ struct CppType<VULKAN_HPP_NAMESPACE::ObjectType, VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlot>
{
- using Type = VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT;
+ using Type = VULKAN_HPP_NAMESPACE::PrivateDataSlot;
};
template <>
- struct isVulkanHandleType<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT>
+ struct isVulkanHandleType<VULKAN_HPP_NAMESPACE::PrivateDataSlot>
{
static VULKAN_HPP_CONST_OR_CONSTEXPR bool value = true;
};
+ using PrivateDataSlotEXT = PrivateDataSlot;
class RenderPass
{
public:
- using CType = VkRenderPass;
+ using CType = VkRenderPass;
+ using NativeType = VkRenderPass;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eRenderPass;
@@ -6051,8 +6614,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkRenderPass m_renderPass = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::RenderPass ) == sizeof( VkRenderPass ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPass ) == sizeof( VkRenderPass ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPass>::value,
+ "RenderPass is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -6083,7 +6648,8 @@ namespace VULKAN_HPP_NAMESPACE
class Sampler
{
public:
- using CType = VkSampler;
+ using CType = VkSampler;
+ using NativeType = VkSampler;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eSampler;
@@ -6146,8 +6712,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkSampler m_sampler = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Sampler ) == sizeof( VkSampler ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Sampler ) == sizeof( VkSampler ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Sampler>::value,
+ "Sampler is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eSampler>
@@ -6177,7 +6745,8 @@ namespace VULKAN_HPP_NAMESPACE
class SamplerYcbcrConversion
{
public:
- using CType = VkSamplerYcbcrConversion;
+ using CType = VkSamplerYcbcrConversion;
+ using NativeType = VkSamplerYcbcrConversion;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eSamplerYcbcrConversion;
@@ -6243,8 +6812,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkSamplerYcbcrConversion m_samplerYcbcrConversion = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ) == sizeof( VkSamplerYcbcrConversion ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ) ==
+ sizeof( VkSamplerYcbcrConversion ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>::value,
+ "SamplerYcbcrConversion is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -6276,7 +6848,8 @@ namespace VULKAN_HPP_NAMESPACE
class ShaderModule
{
public:
- using CType = VkShaderModule;
+ using CType = VkShaderModule;
+ using NativeType = VkShaderModule;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eShaderModule;
@@ -6341,8 +6914,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkShaderModule m_shaderModule = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::ShaderModule ) == sizeof( VkShaderModule ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModule ) == sizeof( VkShaderModule ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ShaderModule>::value,
+ "ShaderModule is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -6373,7 +6948,8 @@ namespace VULKAN_HPP_NAMESPACE
class ValidationCacheEXT
{
public:
- using CType = VkValidationCacheEXT;
+ using CType = VkValidationCacheEXT;
+ using NativeType = VkValidationCacheEXT;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eValidationCacheEXT;
@@ -6438,8 +7014,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkValidationCacheEXT m_validationCacheEXT = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::ValidationCacheEXT ) == sizeof( VkValidationCacheEXT ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationCacheEXT ) == sizeof( VkValidationCacheEXT ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ValidationCacheEXT>::value,
+ "ValidationCacheEXT is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -6471,7 +7049,8 @@ namespace VULKAN_HPP_NAMESPACE
class VideoSessionParametersKHR
{
public:
- using CType = VkVideoSessionParametersKHR;
+ using CType = VkVideoSessionParametersKHR;
+ using NativeType = VkVideoSessionParametersKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eVideoSessionParametersKHR;
@@ -6537,8 +7116,11 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkVideoSessionParametersKHR m_videoSessionParametersKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR ) == sizeof( VkVideoSessionParametersKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR ) ==
+ sizeof( VkVideoSessionParametersKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR>::value,
+ "VideoSessionParametersKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -6563,7 +7145,8 @@ namespace VULKAN_HPP_NAMESPACE
class Queue
{
public:
- using CType = VkQueue;
+ using CType = VkQueue;
+ using NativeType = VkQueue;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eQueue;
@@ -6612,22 +7195,22 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- submit( uint32_t submitCount,
- const VULKAN_HPP_NAMESPACE::SubmitInfo * pSubmits,
- VULKAN_HPP_NAMESPACE::Fence fence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ submit( uint32_t submitCount,
+ const VULKAN_HPP_NAMESPACE::SubmitInfo * pSubmits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
submit( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo> const & submits,
- VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -6636,27 +7219,43 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindSparse( uint32_t bindInfoCount,
- const VULKAN_HPP_NAMESPACE::BindSparseInfo * pBindInfo,
- VULKAN_HPP_NAMESPACE::Fence fence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindSparse( uint32_t bindInfoCount,
+ const VULKAN_HPP_NAMESPACE::BindSparseInfo * pBindInfo,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
bindSparse( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindSparseInfo> const & bindInfo,
- VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_VERSION_1_3 ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result
+ submit2( uint32_t submitCount,
+ const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
+ submit2( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
//=== VK_KHR_swapchain ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR * pPresentInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR * pPresentInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD Result presentKHR( const PresentInfoKHR & presentInfo,
+ VULKAN_HPP_NODISCARD Result presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -6669,7 +7268,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void
- beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
+ beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -6683,7 +7282,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void
- insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo,
+ insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -6704,7 +7303,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, CheckpointDataNV>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<CheckpointDataNV, CheckpointDataNVAllocator>
getCheckpointDataNV( CheckpointDataNVAllocator & checkpointDataNVAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_INTEL_performance_query ===
@@ -6725,15 +7324,15 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- submit2KHR( uint32_t submitCount,
- const VULKAN_HPP_NAMESPACE::SubmitInfo2KHR * pSubmits,
- VULKAN_HPP_NAMESPACE::Fence fence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ submit2KHR( uint32_t submitCount,
+ const VULKAN_HPP_NAMESPACE::SubmitInfo2 * pSubmits,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2KHR> const & submits,
- VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -6752,7 +7351,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, CheckpointData2NV>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<CheckpointData2NV, CheckpointData2NVAllocator>
getCheckpointData2NV( CheckpointData2NVAllocator & checkpointData2NVAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
VULKAN_HPP_TYPESAFE_EXPLICIT operator VkQueue() const VULKAN_HPP_NOEXCEPT
@@ -6773,8 +7372,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkQueue m_queue = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Queue ) == sizeof( VkQueue ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Queue ) == sizeof( VkQueue ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Queue>::value,
+ "Queue is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eQueue>
@@ -6823,6 +7424,15 @@ namespace VULKAN_HPP_NAMESPACE
using deleter = ObjectDestroy<Device, Dispatch>;
};
using UniqueBuffer = UniqueHandle<Buffer, VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <typename Dispatch>
+ class UniqueHandleTraits<BufferCollectionFUCHSIA, Dispatch>
+ {
+ public:
+ using deleter = ObjectDestroy<Device, Dispatch>;
+ };
+ using UniqueBufferCollectionFUCHSIA = UniqueHandle<BufferCollectionFUCHSIA, VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
template <typename Dispatch>
class UniqueHandleTraits<BufferView, Dispatch>
{
@@ -6965,12 +7575,13 @@ namespace VULKAN_HPP_NAMESPACE
};
using UniquePipelineLayout = UniqueHandle<PipelineLayout, VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;
template <typename Dispatch>
- class UniqueHandleTraits<PrivateDataSlotEXT, Dispatch>
+ class UniqueHandleTraits<PrivateDataSlot, Dispatch>
{
public:
using deleter = ObjectDestroy<Device, Dispatch>;
};
- using UniquePrivateDataSlotEXT = UniqueHandle<PrivateDataSlotEXT, VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;
+ using UniquePrivateDataSlot = UniqueHandle<PrivateDataSlot, VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;
+ using UniquePrivateDataSlotEXT = UniqueHandle<PrivateDataSlot, VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>;
template <typename Dispatch>
class UniqueHandleTraits<QueryPool, Dispatch>
{
@@ -7051,7 +7662,8 @@ namespace VULKAN_HPP_NAMESPACE
class Device
{
public:
- using CType = VkDevice;
+ using CType = VkDevice;
+ using NativeType = VkDevice;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDevice;
@@ -7100,13 +7712,13 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
PFN_vkVoidFunction
- getProcAddr( const char * pName,
+ getProcAddr( const char * pName,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
PFN_vkVoidFunction
getProcAddr( const std::string & name,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7114,7 +7726,8 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7122,19 +7735,19 @@ namespace VULKAN_HPP_NAMESPACE
void getQueue( uint32_t queueFamilyIndex,
uint32_t queueIndex,
VULKAN_HPP_NAMESPACE::Queue * pQueue,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Queue
- getQueue( uint32_t queueFamilyIndex,
- uint32_t queueIndex,
+ getQueue( uint32_t queueFamilyIndex,
+ uint32_t queueIndex,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ waitIdle( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -7143,23 +7756,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo * pAllocateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::DeviceMemory * pMemory,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo * pAllocateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::DeviceMemory * pMemory,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::DeviceMemory>::type
- allocateMemory( const MemoryAllocateInfo & allocateInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ allocateMemory( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DeviceMemory, Dispatch>>::type
- allocateMemoryUnique( const MemoryAllocateInfo & allocateInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ allocateMemoryUnique( const VULKAN_HPP_NAMESPACE::MemoryAllocateInfo & allocateInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7171,7 +7785,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void freeMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7181,27 +7796,28 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void free( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void free( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- VULKAN_HPP_NAMESPACE::DeviceSize offset,
- VULKAN_HPP_NAMESPACE::DeviceSize size,
- VULKAN_HPP_NAMESPACE::MemoryMapFlags flags,
- void ** ppData,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
-#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void *>::type
mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
VULKAN_HPP_NAMESPACE::DeviceSize offset,
VULKAN_HPP_NAMESPACE::DeviceSize size,
+ VULKAN_HPP_NAMESPACE::MemoryMapFlags flags,
+ void ** ppData,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void *>::type
+ mapMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ VULKAN_HPP_NAMESPACE::DeviceSize offset,
+ VULKAN_HPP_NAMESPACE::DeviceSize size,
VULKAN_HPP_NAMESPACE::MemoryMapFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7210,9 +7826,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- flushMappedMemoryRanges( uint32_t memoryRangeCount,
- const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ flushMappedMemoryRanges( uint32_t memoryRangeCount,
+ const VULKAN_HPP_NAMESPACE::MappedMemoryRange * pMemoryRanges,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -7246,33 +7862,33 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindBufferMemory( VULKAN_HPP_NAMESPACE::Buffer buffer,
- VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindBufferMemory( VULKAN_HPP_NAMESPACE::Buffer buffer,
+ VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
bindBufferMemory( VULKAN_HPP_NAMESPACE::Buffer buffer,
VULKAN_HPP_NAMESPACE::DeviceMemory memory,
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindImageMemory( VULKAN_HPP_NAMESPACE::Image image,
- VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindImageMemory( VULKAN_HPP_NAMESPACE::Image image,
+ VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
bindImageMemory( VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::DeviceMemory memory,
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7284,7 +7900,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getBufferMemoryRequirements(
VULKAN_HPP_NAMESPACE::Buffer buffer,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7296,7 +7912,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getImageMemoryRequirements(
VULKAN_HPP_NAMESPACE::Image image,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7310,7 +7926,7 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements, SparseImageMemoryRequirementsAllocator>
getImageSparseMemoryRequirements( VULKAN_HPP_NAMESPACE::Image image,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename SparseImageMemoryRequirementsAllocator = std::allocator<SparseImageMemoryRequirements>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SparseImageMemoryRequirementsAllocator,
@@ -7324,22 +7940,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Fence * pFence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Fence * pFence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type
- createFence( const FenceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createFence( const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Fence, Dispatch>>::type
- createFenceUnique( const FenceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createFenceUnique( const VULKAN_HPP_NAMESPACE::FenceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7350,8 +7968,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyFence( VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroyFence( VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7361,16 +7980,17 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Fence fence,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Fence fence,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- resetFences( uint32_t fenceCount,
- const VULKAN_HPP_NAMESPACE::Fence * pFences,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ resetFences( uint32_t fenceCount,
+ const VULKAN_HPP_NAMESPACE::Fence * pFences,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
@@ -7381,8 +8001,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result getFenceStatus( VULKAN_HPP_NAMESPACE::Fence fence,
@@ -7391,11 +8011,11 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- waitForFences( uint32_t fenceCount,
- const VULKAN_HPP_NAMESPACE::Fence * pFences,
- VULKAN_HPP_NAMESPACE::Bool32 waitAll,
- uint64_t timeout,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ waitForFences( uint32_t fenceCount,
+ const VULKAN_HPP_NAMESPACE::Fence * pFences,
+ VULKAN_HPP_NAMESPACE::Bool32 waitAll,
+ uint64_t timeout,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result waitForFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences,
@@ -7406,23 +8026,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Semaphore * pSemaphore,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Semaphore * pSemaphore,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Semaphore>::type
- createSemaphore( const SemaphoreCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Semaphore, Dispatch>>::type
- createSemaphoreUnique( const SemaphoreCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSemaphoreUnique( const VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7434,7 +8055,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroySemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7444,29 +8066,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Event * pEvent,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Event * pEvent,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Event>::type
- createEvent( const EventCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createEvent( const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Event, Dispatch>>::type
- createEventUnique( const EventCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createEventUnique( const VULKAN_HPP_NAMESPACE::EventCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7477,8 +8102,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyEvent( VULKAN_HPP_NAMESPACE::Event event VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroyEvent( VULKAN_HPP_NAMESPACE::Event event VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7488,16 +8114,17 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Event event,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Event event,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getEventStatus( VULKAN_HPP_NAMESPACE::Event event,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getEventStatus( VULKAN_HPP_NAMESPACE::Event event,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result getEventStatus( VULKAN_HPP_NAMESPACE::Event event,
@@ -7507,8 +8134,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- setEvent( VULKAN_HPP_NAMESPACE::Event event,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ setEvent( VULKAN_HPP_NAMESPACE::Event event,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -7518,34 +8145,35 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- resetEvent( VULKAN_HPP_NAMESPACE::Event event,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ resetEvent( VULKAN_HPP_NAMESPACE::Event event,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
resetEvent( VULKAN_HPP_NAMESPACE::Event event,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::QueryPool * pQueryPool,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::QueryPool * pQueryPool,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::QueryPool>::type
- createQueryPool( const QueryPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createQueryPool( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::QueryPool, Dispatch>>::type
- createQueryPoolUnique( const QueryPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createQueryPoolUnique( const VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7557,7 +8185,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyQueryPool( VULKAN_HPP_NAMESPACE::QueryPool queryPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7567,70 +8196,73 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- size_t dataSize,
- void * pData,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
- VULKAN_HPP_NAMESPACE::QueryResultFlags flags,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ size_t dataSize,
+ void * pData,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ VULKAN_HPP_NAMESPACE::QueryResultFlags flags,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- ArrayProxy<T> const & data,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
- VULKAN_HPP_NAMESPACE::QueryResultFlags flags,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T,
- typename Allocator = std::allocator<T>,
+ getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ ArrayProxy<T> const & data,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ VULKAN_HPP_NAMESPACE::QueryResultFlags flags,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename DataType,
+ typename Allocator = std::allocator<DataType>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<T, Allocator>>
- getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- size_t dataSize,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<DataType, Allocator>>
+ getQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ size_t dataSize,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<T>
- getQueryPoolResult( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD ResultValue<DataType>
+ getQueryPoolResult( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Buffer * pBuffer,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Buffer * pBuffer,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Buffer>::type
- createBuffer( const BufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createBuffer( const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Buffer, Dispatch>>::type
- createBufferUnique( const BufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createBufferUnique( const VULKAN_HPP_NAMESPACE::BufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7642,7 +8274,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7652,30 +8285,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Buffer buffer,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Buffer buffer,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::BufferView * pView,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::BufferView * pView,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::BufferView>::type
- createBufferView( const BufferViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createBufferView( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::BufferView, Dispatch>>::type
- createBufferViewUnique( const BufferViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createBufferViewUnique( const VULKAN_HPP_NAMESPACE::BufferViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7686,10 +8321,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyBufferView( VULKAN_HPP_NAMESPACE::BufferView bufferView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7698,29 +8333,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::BufferView bufferView,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Image * pImage,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Image * pImage,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Image>::type
- createImage( const ImageCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createImage( const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Image, Dispatch>>::type
- createImageUnique( const ImageCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createImageUnique( const VULKAN_HPP_NAMESPACE::ImageCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7731,8 +8369,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyImage( VULKAN_HPP_NAMESPACE::Image image VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroyImage( VULKAN_HPP_NAMESPACE::Image image VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7742,8 +8381,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Image image,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Image image,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7756,30 +8396,31 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout getImageSubresourceLayout(
- VULKAN_HPP_NAMESPACE::Image image,
- const ImageSubresource & subresource,
+ VULKAN_HPP_NAMESPACE::Image image,
+ const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::ImageView * pView,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::ImageView * pView,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageView>::type
- createImageView( const ImageViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createImageView( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::ImageView, Dispatch>>::type
- createImageViewUnique( const ImageViewCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createImageViewUnique( const VULKAN_HPP_NAMESPACE::ImageViewCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7791,7 +8432,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyImageView( VULKAN_HPP_NAMESPACE::ImageView imageView VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7801,30 +8443,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::ImageView imageView,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::ImageView imageView,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::ShaderModule * pShaderModule,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::ShaderModule * pShaderModule,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::ShaderModule>::type
- createShaderModule( const ShaderModuleCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createShaderModule( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::ShaderModule, Dispatch>>::type
- createShaderModuleUnique( const ShaderModuleCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createShaderModuleUnique( const VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7835,10 +8479,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyShaderModule( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -7847,30 +8491,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::ShaderModule shaderModule,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::PipelineCache * pPipelineCache,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::PipelineCache * pPipelineCache,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::PipelineCache>::type
- createPipelineCache( const PipelineCacheCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createPipelineCache( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PipelineCache, Dispatch>>::type
- createPipelineCacheUnique( const PipelineCacheCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createPipelineCacheUnique( const VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7882,8 +8528,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyPipelineCache( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -7894,22 +8540,23 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- size_t * pDataSize,
- void * pData,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ size_t * pDataSize,
+ void * pData,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Uint8_tAllocator = std::allocator<uint8_t>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<uint8_t, Uint8_tAllocator>>::type
getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Uint8_tAllocator = std::allocator<uint8_t>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = Uint8_tAllocator,
@@ -7917,15 +8564,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<uint8_t, Uint8_tAllocator>>::type
getPipelineCacheData( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
Uint8_tAllocator & uint8_tAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache,
- uint32_t srcCacheCount,
- const VULKAN_HPP_NAMESPACE::PipelineCache * pSrcCaches,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ mergePipelineCaches( VULKAN_HPP_NAMESPACE::PipelineCache dstCache,
+ uint32_t srcCacheCount,
+ const VULKAN_HPP_NAMESPACE::PipelineCache * pSrcCaches,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -7936,36 +8583,38 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- uint32_t createInfoCount,
- const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo * pCreateInfos,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Pipeline * pPipelines,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo * pCreateInfos,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Pipeline * pPipelines,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>> createGraphicsPipelines(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
+ createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = PipelineAllocator,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type = 0>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
createGraphicsPipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<Pipeline> createGraphicsPipeline(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ createGraphicsPipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>>
@@ -7973,7 +8622,8 @@ namespace VULKAN_HPP_NAMESPACE
createGraphicsPipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>,
@@ -7984,50 +8634,53 @@ namespace VULKAN_HPP_NAMESPACE
createGraphicsPipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>> createGraphicsPipelineUnique(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>>
+ createGraphicsPipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- uint32_t createInfoCount,
- const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo * pCreateInfos,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Pipeline * pPipelines,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ uint32_t createInfoCount,
+ const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo * pCreateInfos,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Pipeline * pPipelines,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>> createComputePipelines(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
+ createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = PipelineAllocator,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type = 0>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>>
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
createComputePipelines( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<Pipeline> createComputePipeline(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ createComputePipeline( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>>
@@ -8035,7 +8688,8 @@ namespace VULKAN_HPP_NAMESPACE
createComputePipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>,
@@ -8046,15 +8700,16 @@ namespace VULKAN_HPP_NAMESPACE
createComputePipelinesUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>> createComputePipelineUnique(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>>
+ createComputePipelineUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8065,7 +8720,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8075,31 +8731,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::PipelineLayout * pPipelineLayout,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::PipelineLayout * pPipelineLayout,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::PipelineLayout>::type
- createPipelineLayout( const PipelineLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createPipelineLayout( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PipelineLayout, Dispatch>>::type
- createPipelineLayoutUnique( const PipelineLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createPipelineLayoutUnique( const VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8110,10 +8767,11 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyPipelineLayout(
- VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void
+ destroyPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -8123,28 +8781,31 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Sampler * pSampler,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Sampler * pSampler,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Sampler>::type
- createSampler( const SamplerCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSampler( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Sampler, Dispatch>>::type
- createSamplerUnique( const SamplerCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSamplerUnique( const VULKAN_HPP_NAMESPACE::SamplerCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8156,7 +8817,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroySampler( VULKAN_HPP_NAMESPACE::Sampler sampler VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8166,8 +8828,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Sampler sampler,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Sampler sampler,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8180,17 +8843,17 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorSetLayout>::type
- createDescriptorSetLayout( const DescriptorSetLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorSetLayout( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorSetLayout, Dispatch>>::type
- createDescriptorSetLayoutUnique( const DescriptorSetLayoutCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorSetLayoutUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8204,7 +8867,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyDescriptorSetLayout(
VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8215,30 +8879,31 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::DescriptorPool * pDescriptorPool,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::DescriptorPool * pDescriptorPool,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorPool>::type
- createDescriptorPool( const DescriptorPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorPool( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorPool, Dispatch>>::type
- createDescriptorPoolUnique( const DescriptorPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorPoolUnique( const VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8249,10 +8914,11 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyDescriptorPool(
- VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void
+ destroyDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -8262,7 +8928,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8274,38 +8941,38 @@ namespace VULKAN_HPP_NAMESPACE
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
- resetDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
+ resetDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool,
VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo * pAllocateInfo,
- VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo * pAllocateInfo,
+ VULKAN_HPP_NAMESPACE::DescriptorSet * pDescriptorSets,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename DescriptorSetAllocator = std::allocator<DescriptorSet>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
- typename ResultValueType<std::vector<DescriptorSet, DescriptorSetAllocator>>::type
- allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo,
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::DescriptorSet, DescriptorSetAllocator>>::type
+ allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename DescriptorSetAllocator = std::allocator<DescriptorSet>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = DescriptorSetAllocator,
typename std::enable_if<std::is_same<typename B::value_type, DescriptorSet>::value, int>::type = 0>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
- typename ResultValueType<std::vector<DescriptorSet, DescriptorSetAllocator>>::type
- allocateDescriptorSets( const DescriptorSetAllocateInfo & allocateInfo,
- DescriptorSetAllocator & descriptorSetAllocator,
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::DescriptorSet, DescriptorSetAllocator>>::type
+ allocateDescriptorSets( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
+ DescriptorSetAllocator & descriptorSetAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename DescriptorSetAllocator = std::allocator<UniqueHandle<DescriptorSet, Dispatch>>>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<std::vector<UniqueHandle<DescriptorSet, Dispatch>, DescriptorSetAllocator>>::type
- allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo,
+ allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -8315,8 +8982,8 @@ namespace VULKAN_HPP_NAMESPACE
int>::type = 0>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<std::vector<UniqueHandle<DescriptorSet, Dispatch>, DescriptorSetAllocator>>::type
- allocateDescriptorSetsUnique( const DescriptorSetAllocateInfo & allocateInfo,
- DescriptorSetAllocator & descriptorSetAllocator,
+ allocateDescriptorSetsUnique( const VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo & allocateInfo,
+ DescriptorSetAllocator & descriptorSetAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8362,23 +9029,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Framebuffer * pFramebuffer,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Framebuffer * pFramebuffer,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Framebuffer>::type
- createFramebuffer( const FramebufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createFramebuffer( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Framebuffer, Dispatch>>::type
- createFramebufferUnique( const FramebufferCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createFramebufferUnique( const VULKAN_HPP_NAMESPACE::FramebufferCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8389,10 +9057,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -8401,30 +9069,32 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::RenderPass>::type
- createRenderPass( const RenderPassCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::RenderPass, Dispatch>>::type
- createRenderPassUnique( const RenderPassCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createRenderPassUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8435,10 +9105,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -8447,8 +9117,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::RenderPass renderPass,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8466,23 +9137,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::CommandPool * pCommandPool,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::CommandPool * pCommandPool,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::CommandPool>::type
- createCommandPool( const CommandPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createCommandPool( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::CommandPool, Dispatch>>::type
- createCommandPoolUnique( const CommandPoolCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createCommandPoolUnique( const VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8493,10 +9165,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -8505,52 +9177,53 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
- VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
+ VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
- resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
+ resetCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool,
VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo * pAllocateInfo,
- VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo * pAllocateInfo,
+ VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename CommandBufferAllocator = std::allocator<CommandBuffer>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
- typename ResultValueType<std::vector<CommandBuffer, CommandBufferAllocator>>::type
- allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo,
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::CommandBuffer, CommandBufferAllocator>>::type
+ allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename CommandBufferAllocator = std::allocator<CommandBuffer>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = CommandBufferAllocator,
typename std::enable_if<std::is_same<typename B::value_type, CommandBuffer>::value, int>::type = 0>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
- typename ResultValueType<std::vector<CommandBuffer, CommandBufferAllocator>>::type
- allocateCommandBuffers( const CommandBufferAllocateInfo & allocateInfo,
- CommandBufferAllocator & commandBufferAllocator,
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::CommandBuffer, CommandBufferAllocator>>::type
+ allocateCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
+ CommandBufferAllocator & commandBufferAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename CommandBufferAllocator = std::allocator<UniqueHandle<CommandBuffer, Dispatch>>>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<std::vector<UniqueHandle<CommandBuffer, Dispatch>, CommandBufferAllocator>>::type
- allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo,
+ allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -8560,8 +9233,8 @@ namespace VULKAN_HPP_NAMESPACE
int>::type = 0>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<std::vector<UniqueHandle<CommandBuffer, Dispatch>, CommandBufferAllocator>>::type
- allocateCommandBuffersUnique( const CommandBufferAllocateInfo & allocateInfo,
- CommandBufferAllocator & commandBufferAllocator,
+ allocateCommandBuffersUnique( const VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo & allocateInfo,
+ CommandBufferAllocator & commandBufferAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8594,9 +9267,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindBufferMemory2( uint32_t bindInfoCount,
- const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindBufferMemory2( uint32_t bindInfoCount,
+ const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -8606,9 +9279,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindImageMemory2( uint32_t bindInfoCount,
- const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindImageMemory2( uint32_t bindInfoCount,
+ const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -8626,9 +9299,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags getGroupPeerMemoryFeatures(
- uint32_t heapIndex,
- uint32_t localDeviceIndex,
- uint32_t remoteDeviceIndex,
+ uint32_t heapIndex,
+ uint32_t localDeviceIndex,
+ uint32_t remoteDeviceIndex,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8640,11 +9313,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirements2(
- const ImageMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirements2(
- const ImageMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8656,11 +9329,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirements2(
- const BufferMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirements2(
- const BufferMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8674,8 +9347,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
- getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SparseImageMemoryRequirements2Allocator,
@@ -8683,8 +9356,8 @@ namespace VULKAN_HPP_NAMESPACE
int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
getImageSparseMemoryRequirements2(
- const ImageSparseMemoryRequirementsInfo2 & info,
- SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8700,7 +9373,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Queue
- getQueue2( const DeviceQueueInfo2 & queueInfo,
+ getQueue2( const VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 & queueInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8713,17 +9386,17 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>::type
- createSamplerYcbcrConversion( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSamplerYcbcrConversion( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion, Dispatch>>::type
- createSamplerYcbcrConversionUnique( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSamplerYcbcrConversionUnique( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8737,7 +9410,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroySamplerYcbcrConversion(
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8748,7 +9422,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8762,17 +9437,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>::type
- createDescriptorUpdateTemplate( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorUpdateTemplate( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate, Dispatch>>::type
- createDescriptorUpdateTemplateUnique( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorUpdateTemplateUnique( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8786,7 +9461,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyDescriptorUpdateTemplate(
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8797,7 +9473,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8807,6 +9484,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pData,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void updateDescriptorSetWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet,
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ DataType const & data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void getDescriptorSetLayoutSupport( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo * pCreateInfo,
@@ -8816,11 +9501,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport getDescriptorSetLayoutSupport(
- const DescriptorSetLayoutCreateInfo & createInfo,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getDescriptorSetLayoutSupport(
- const DescriptorSetLayoutCreateInfo & createInfo,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8828,23 +9513,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::RenderPass>::type
- createRenderPass2( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::RenderPass, Dispatch>>::type
- createRenderPass2Unique( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createRenderPass2Unique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8857,36 +9543,36 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- uint64_t * pValue,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
+ uint64_t * pValue,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<uint64_t>::type
getSemaphoreCounterValue( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
- uint64_t timeout,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
+ uint64_t timeout,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD Result waitSemaphores( const SemaphoreWaitInfo & waitInfo,
- uint64_t timeout,
+ VULKAN_HPP_NODISCARD Result waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo,
+ uint64_t timeout,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- signalSemaphore( const SemaphoreSignalInfo & signalInfo,
+ signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8897,7 +9583,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
DeviceAddress
- getBufferAddress( const BufferDeviceAddressInfo & info,
+ getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8907,7 +9593,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- uint64_t getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo & info,
+ uint64_t getBufferOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8918,32 +9604,173 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- uint64_t getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo & info,
+ uint64_t getMemoryOpaqueCaptureAddress( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_VERSION_1_3 ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result
+ createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::PrivateDataSlot>::type
+ createPrivateDataSlot( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# ifndef VULKAN_HPP_NO_SMART_HANDLE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PrivateDataSlot, Dispatch>>::type
+ createPrivateDataSlotUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void
+ destroyPrivateDataSlot( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroyPrivateDataSlot(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result
+ setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#else
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ typename ResultValueType<void>::type
+ setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t * pData,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD uint64_t
+ getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getImageSparseMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ uint32_t * pSparseMemoryRequirementCount,
+ VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
+ typename B = SparseImageMemoryRequirements2Allocator,
+ typename std::enable_if<std::is_same<typename B::value_type, SparseImageMemoryRequirements2>::value,
+ int>::type = 0>
+ VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ getImageSparseMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
//=== VK_KHR_swapchain ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchain,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchain,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SwapchainKHR>::type
- createSwapchainKHR( const SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SwapchainKHR, Dispatch>>::type
- createSwapchainKHRUnique( const SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -8954,10 +9781,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroySwapchainKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -8966,22 +9793,23 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- uint32_t * pSwapchainImageCount,
- VULKAN_HPP_NAMESPACE::Image * pSwapchainImages,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ uint32_t * pSwapchainImageCount,
+ VULKAN_HPP_NAMESPACE::Image * pSwapchainImages,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename ImageAllocator = std::allocator<Image>, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<Image, ImageAllocator>>::type
getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename ImageAllocator = std::allocator<Image>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = ImageAllocator,
@@ -8989,25 +9817,25 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<Image, ImageAllocator>>::type
getSwapchainImagesKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
ImageAllocator & imageAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- uint64_t timeout,
- VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- VULKAN_HPP_NAMESPACE::Fence fence,
- uint32_t * pImageIndex,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ uint64_t timeout,
+ VULKAN_HPP_NAMESPACE::Semaphore semaphore,
+ VULKAN_HPP_NAMESPACE::Fence fence,
+ uint32_t * pImageIndex,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD ResultValue<uint32_t>
- acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- uint64_t timeout,
+ acquireNextImageKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ uint64_t timeout,
VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -9031,18 +9859,18 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR>::type
getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR * pAcquireInfo,
- uint32_t * pImageIndex,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR * pAcquireInfo,
+ uint32_t * pImageIndex,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD ResultValue<uint32_t>
- acquireNextImage2KHR( const AcquireNextImageInfoKHR & acquireInfo,
+ acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9059,26 +9887,27 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SwapchainKHRAllocator = std::allocator<SwapchainKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
- typename ResultValueType<std::vector<SwapchainKHR, SwapchainKHRAllocator>>::type
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainKHRAllocator>>::type
createSharedSwapchainsKHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename SwapchainKHRAllocator = std::allocator<SwapchainKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SwapchainKHRAllocator,
typename std::enable_if<std::is_same<typename B::value_type, SwapchainKHR>::value, int>::type = 0>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
- typename ResultValueType<std::vector<SwapchainKHR, SwapchainKHRAllocator>>::type
+ typename ResultValueType<std::vector<VULKAN_HPP_NAMESPACE::SwapchainKHR, SwapchainKHRAllocator>>::type
createSharedSwapchainsKHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
SwapchainKHRAllocator & swapchainKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<SwapchainKHR>::type createSharedSwapchainKHR(
- const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SwapchainKHR>::type
+ createSharedSwapchainKHR( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename SwapchainKHRAllocator = std::allocator<UniqueHandle<SwapchainKHR, Dispatch>>>
@@ -9086,7 +9915,8 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<UniqueHandle<SwapchainKHR, Dispatch>, SwapchainKHRAllocator>>::type
createSharedSwapchainsKHRUnique(
ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename SwapchainKHRAllocator = std::allocator<UniqueHandle<SwapchainKHR, Dispatch>>,
@@ -9097,14 +9927,14 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<UniqueHandle<SwapchainKHR, Dispatch>, SwapchainKHRAllocator>>::type
createSharedSwapchainsKHRUnique(
ArrayProxy<const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
SwapchainKHRAllocator & swapchainKHRAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<UniqueHandle<SwapchainKHR, Dispatch>>::type
createSharedSwapchainKHRUnique( const VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9118,7 +9948,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo,
+ debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9129,7 +9959,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo,
+ debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9138,24 +9968,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::VideoSessionKHR * pVideoSession,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::VideoSessionKHR * pVideoSession,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::VideoSessionKHR>::type
- createVideoSessionKHR( const VideoSessionCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createVideoSessionKHR( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::VideoSessionKHR, Dispatch>>::type
- createVideoSessionKHRUnique( const VideoSessionCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createVideoSessionKHRUnique( const VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9167,10 +9997,11 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyVideoSessionKHR(
- VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void
+ destroyVideoSessionKHR( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -9180,7 +10011,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9233,18 +10065,19 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR>::type
- createVideoSessionParametersKHR( const VideoSessionParametersCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createVideoSessionParametersKHR( const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR, Dispatch>>::type
- createVideoSessionParametersKHRUnique( const VideoSessionParametersCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ createVideoSessionParametersKHRUnique(
+ const VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9257,7 +10090,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
updateVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
- const VideoSessionParametersUpdateInfoKHR & updateInfo,
+ const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9268,10 +10101,11 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyVideoSessionParametersKHR(
- VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyVideoSessionParametersKHR( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -9281,7 +10115,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -9290,46 +10125,48 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::CuModuleNVX * pModule,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::CuModuleNVX * pModule,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::CuModuleNVX>::type
- createCuModuleNVX( const CuModuleCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createCuModuleNVX( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::CuModuleNVX, Dispatch>>::type
- createCuModuleNVXUnique( const CuModuleCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createCuModuleNVXUnique( const VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::CuFunctionNVX * pFunction,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::CuFunctionNVX * pFunction,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::CuFunctionNVX>::type
- createCuFunctionNVX( const CuFunctionCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createCuFunctionNVX( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::CuFunctionNVX, Dispatch>>::type
- createCuFunctionNVXUnique( const CuFunctionCreateInfoNVX & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createCuFunctionNVXUnique( const VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9340,10 +10177,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroyCuModuleNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -9352,8 +10189,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::CuModuleNVX module,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9364,8 +10202,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyCuFunctionNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9376,7 +10214,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::CuFunctionNVX function,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9389,33 +10228,33 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
uint32_t
- getImageViewHandleNVX( const ImageViewHandleInfoNVX & info,
+ getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView,
- VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView,
+ VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX * pProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX>::type
getImageViewAddressNVX( VULKAN_HPP_NAMESPACE::ImageView imageView,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_AMD_shader_info ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
- VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
- VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType,
- size_t * pInfoSize,
- void * pInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
+ VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType,
+ size_t * pInfoSize,
+ void * pInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Uint8_tAllocator = std::allocator<uint8_t>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -9423,7 +10262,7 @@ namespace VULKAN_HPP_NAMESPACE
getShaderInfoAMD( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Uint8_tAllocator = std::allocator<uint8_t>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = Uint8_tAllocator,
@@ -9433,7 +10272,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType,
Uint8_tAllocator & uint8_tAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#if defined( VK_USE_PLATFORM_WIN32_KHR )
@@ -9441,10 +10280,10 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
- VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType,
- HANDLE * pHandle,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType,
+ HANDLE * pHandle,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<HANDLE>::type
@@ -9466,9 +10305,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags getGroupPeerMemoryFeaturesKHR(
- uint32_t heapIndex,
- uint32_t localDeviceIndex,
- uint32_t remoteDeviceIndex,
+ uint32_t heapIndex,
+ uint32_t localDeviceIndex,
+ uint32_t remoteDeviceIndex,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9484,13 +10323,13 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo,
- HANDLE * pHandle,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR * pGetWin32HandleInfo,
+ HANDLE * pHandle,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<HANDLE>::type
- getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo,
+ getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9514,22 +10353,22 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR * pGetFdInfo,
- int * pFd,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR * pGetFdInfo,
+ int * pFd,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<int>::type
- getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
- int fd,
- VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR * pMemoryFdProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ int fd,
+ VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR * pMemoryFdProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR>::type
@@ -9547,9 +10386,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type importSemaphoreWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -9560,7 +10399,7 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<HANDLE>::type
- getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo,
+ getSemaphoreWin32HandleKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -9569,24 +10408,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR * pImportSemaphoreFdInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo,
+ importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR * pGetFdInfo,
- int * pFd,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR * pGetFdInfo,
+ int * pFd,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<int>::type
- getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo,
+ getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9602,18 +10441,19 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>::type
- createDescriptorUpdateTemplateKHR( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDescriptorUpdateTemplateKHR( const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate, Dispatch>>::type
- createDescriptorUpdateTemplateKHRUnique( const DescriptorUpdateTemplateCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ createDescriptorUpdateTemplateKHRUnique(
+ const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9626,7 +10466,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyDescriptorUpdateTemplateKHR(
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9636,75 +10477,85 @@ namespace VULKAN_HPP_NAMESPACE
const void * pData,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void updateDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorSet descriptorSet,
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ DataType const & data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_EXT_display_control ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT * pDisplayPowerInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT * pDisplayPowerInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
- displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayPowerInfoEXT & displayPowerInfo,
+ displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT * pDeviceEventInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Fence * pFence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT * pDeviceEventInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Fence * pFence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type
- registerEventEXT( const DeviceEventInfoEXT & deviceEventInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ registerEventEXT( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Fence, Dispatch>>::type
- registerEventEXTUnique( const DeviceEventInfoEXT & deviceEventInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ registerEventEXTUnique( const VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT & deviceEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT * pDisplayEventInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Fence * pFence,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT * pDisplayEventInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Fence * pFence,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type registerDisplayEventEXT(
- VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayEventInfoEXT & displayEventInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::Fence>::type
+ registerDisplayEventEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Fence, Dispatch>>::type
- registerDisplayEventEXTUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayEventInfoEXT & displayEventInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ registerDisplayEventEXTUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT & displayEventInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter,
- uint64_t * pCounterValue,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSwapchainCounterEXT( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter,
+ uint64_t * pCounterValue,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<uint64_t>::type
@@ -9772,24 +10623,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::RenderPass * pRenderPass,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::RenderPass>::type
- createRenderPass2KHR( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::RenderPass, Dispatch>>::type
- createRenderPass2KHRUnique( const RenderPassCreateInfo2 & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createRenderPass2KHRUnique( const VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9799,8 +10650,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSwapchainStatusKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result getSwapchainStatusKHR(
@@ -9817,19 +10668,19 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo,
+ importFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo,
- HANDLE * pHandle,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR * pGetWin32HandleInfo,
+ HANDLE * pHandle,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<HANDLE>::type
- getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo,
+ getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -9838,37 +10689,37 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR * pImportFenceFdInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR * pImportFenceFdInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo,
+ importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR * pGetFdInfo,
- int * pFd,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR * pGetFdInfo,
+ int * pFd,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<int>::type
- getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_performance_query ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR * pInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR * pInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR & info,
+ acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9885,7 +10736,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT & nameInfo,
+ setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9896,7 +10747,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT & tagInfo,
+ setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9928,8 +10779,9 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<struct AHardwareBuffer *>::type
- getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getMemoryAndroidHardwareBufferANDROID(
+ const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
@@ -9943,11 +10795,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirements2KHR(
- const ImageMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirements2KHR(
- const ImageMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9959,11 +10811,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirements2KHR(
- const BufferMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirements2KHR(
- const BufferMemoryRequirementsInfo2 & info,
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -9977,8 +10829,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
- getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getImageSparseMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SparseImageMemoryRequirements2Allocator,
@@ -9986,8 +10838,8 @@ namespace VULKAN_HPP_NAMESPACE
int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
getImageSparseMemoryRequirements2KHR(
- const ImageSparseMemoryRequirementsInfo2 & info,
- SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10003,17 +10855,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR>::type
- createAccelerationStructureKHR( const AccelerationStructureCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR, Dispatch>>::type
- createAccelerationStructureKHRUnique( const AccelerationStructureCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createAccelerationStructureKHRUnique( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10027,7 +10879,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyAccelerationStructureKHR(
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10038,7 +10891,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10051,11 +10905,11 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- Result buildAccelerationStructuresKHR(
+ VULKAN_HPP_NODISCARD Result buildAccelerationStructuresKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR> const & infos,
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const> const & pBuildRangeInfos,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10066,9 +10920,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureInfoKHR & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10079,9 +10933,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureToMemoryInfoKHR & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10092,9 +10946,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyMemoryToAccelerationStructureInfoKHR & info,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10115,22 +10969,23 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<T> const & data,
size_t stride,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T,
- typename Allocator = std::allocator<T>,
+ template <typename DataType,
+ typename Allocator = std::allocator<DataType>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<T, Allocator>>::type
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<DataType, Allocator>>::type
writeAccelerationStructuresPropertiesKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
size_t dataSize,
size_t stride,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<T>::type writeAccelerationStructuresPropertyKHR(
- ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
- VULKAN_HPP_NAMESPACE::QueryType queryType,
- size_t stride,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<DataType>::type
+ writeAccelerationStructuresPropertyKHR(
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
+ VULKAN_HPP_NAMESPACE::QueryType queryType,
+ size_t stride,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10140,7 +10995,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
DeviceAddress getAccelerationStructureAddressKHR(
- const AccelerationStructureDeviceAddressInfoKHR & info,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10152,9 +11007,9 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR
- getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR & versionInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
- VULKAN_HPP_NOEXCEPT;
+ getAccelerationStructureCompatibilityKHR(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10168,8 +11023,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR
getAccelerationStructureBuildSizesKHR(
- VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
- const AccelerationStructureBuildGeometryInfoKHR & buildInfo,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo,
ArrayProxy<const uint32_t> const & maxPrimitiveCounts VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10185,17 +11040,17 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>::type
- createSamplerYcbcrConversionKHR( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSamplerYcbcrConversionKHR( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion, Dispatch>>::type
- createSamplerYcbcrConversionKHRUnique( const SamplerYcbcrConversionCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createSamplerYcbcrConversionKHRUnique( const VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10209,7 +11064,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroySamplerYcbcrConversionKHR(
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10217,9 +11073,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindBufferMemory2KHR( uint32_t bindInfoCount,
- const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindBufferMemory2KHR( uint32_t bindInfoCount,
+ const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo * pBindInfos,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -10229,9 +11085,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- bindImageMemory2KHR( uint32_t bindInfoCount,
- const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ bindImageMemory2KHR( uint32_t bindInfoCount,
+ const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo * pBindInfos,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -10257,22 +11113,23 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pValidationCache,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pValidationCache,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::ValidationCacheEXT>::type createValidationCacheEXT(
- const ValidationCacheCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::ValidationCacheEXT>::type
+ createValidationCacheEXT( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::ValidationCacheEXT, Dispatch>>::type
- createValidationCacheEXTUnique( const ValidationCacheCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createValidationCacheEXTUnique( const VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10286,7 +11143,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyValidationCacheEXT(
VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10297,16 +11155,17 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache,
- uint32_t srcCacheCount,
- const VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pSrcCaches,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ mergeValidationCachesEXT( VULKAN_HPP_NAMESPACE::ValidationCacheEXT dstCache,
+ uint32_t srcCacheCount,
+ const VULKAN_HPP_NAMESPACE::ValidationCacheEXT * pSrcCaches,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -10320,7 +11179,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache,
size_t * pDataSize,
void * pData,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Uint8_tAllocator = std::allocator<uint8_t>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10347,17 +11206,18 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::AccelerationStructureNV>::type createAccelerationStructureNV(
- const AccelerationStructureCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::AccelerationStructureNV>::type
+ createAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::AccelerationStructureNV, Dispatch>>::type
- createAccelerationStructureNVUnique( const AccelerationStructureCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createAccelerationStructureNVUnique( const VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10371,7 +11231,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyAccelerationStructureNV(
VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10382,7 +11243,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10394,11 +11256,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR getAccelerationStructureMemoryRequirementsNV(
- const AccelerationStructureMemoryRequirementsInfoNV & info,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getAccelerationStructureMemoryRequirementsNV(
- const AccelerationStructureMemoryRequirementsInfoNV & info,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10425,27 +11287,31 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>> createRayTracingPipelinesNV(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
+ createRayTracingPipelinesNV(
+ VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = PipelineAllocator,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type = 0>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>> createRayTracingPipelinesNV(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
- PipelineAllocator & pipelineAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
+ createRayTracingPipelinesNV(
+ VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ PipelineAllocator & pipelineAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<Pipeline> createRayTracingPipelineNV(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ createRayTracingPipelineNV( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>>
@@ -10453,7 +11319,8 @@ namespace VULKAN_HPP_NAMESPACE
createRayTracingPipelinesNVUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>,
@@ -10464,15 +11331,16 @@ namespace VULKAN_HPP_NAMESPACE
createRayTracingPipelinesNVUnique(
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>> createRayTracingPipelineNVUnique(
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>>
+ createRayTracingPipelineNVUnique( VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10483,7 +11351,7 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t groupCount,
size_t dataSize,
void * pData,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -10492,21 +11360,21 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t groupCount,
ArrayProxy<T> const & data,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T,
- typename Allocator = std::allocator<T>,
+ template <typename DataType,
+ typename Allocator = std::allocator<DataType>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<T, Allocator>>::type
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<DataType, Allocator>>::type
getRayTracingShaderGroupHandlesNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<T>::type
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<DataType>::type
getRayTracingShaderGroupHandleNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10521,15 +11389,15 @@ namespace VULKAN_HPP_NAMESPACE
getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
ArrayProxy<T> const & data,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T,
- typename Allocator = std::allocator<T>,
+ template <typename DataType,
+ typename Allocator = std::allocator<DataType>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<T, Allocator>>::type
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<DataType, Allocator>>::type
getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
size_t dataSize,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<T>::type
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<DataType>::type
getAccelerationStructureHandleNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10537,15 +11405,15 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
- uint32_t shader,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
+ uint32_t shader,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
compileDeferredNV( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t shader,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_maintenance3 ===
@@ -10558,11 +11426,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport getDescriptorSetLayoutSupportKHR(
- const DescriptorSetLayoutCreateInfo & createInfo,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getDescriptorSetLayoutSupportKHR(
- const DescriptorSetLayoutCreateInfo & createInfo,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10593,11 +11461,6 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t * pMaxDeviation,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<uint64_t>::type getCalibratedTimestampsEXT(
- ArrayProxy<const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT> const & timestampInfos,
- ArrayProxy<uint64_t> const & timestamps,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Uint64_tAllocator = std::allocator<uint64_t>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
@@ -10615,6 +11478,10 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT> const & timestampInfos,
Uint64_tAllocator & uint64_tAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::pair<uint64_t, uint64_t>>::type
+ getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_timeline_semaphore ===
@@ -10623,34 +11490,34 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD Result getSemaphoreCounterValueKHR(
VULKAN_HPP_NAMESPACE::Semaphore semaphore,
uint64_t * pValue,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<uint64_t>::type
getSemaphoreCounterValueKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
- uint64_t timeout,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo * pWaitInfo,
+ uint64_t timeout,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD Result waitSemaphoresKHR( const SemaphoreWaitInfo & waitInfo,
- uint64_t timeout,
+ VULKAN_HPP_NODISCARD Result waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo,
+ uint64_t timeout,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo * pSignalInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- signalSemaphoreKHR( const SemaphoreSignalInfo & signalInfo,
+ signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10663,7 +11530,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
- initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL & initializeInfo,
+ initializePerformanceApiINTEL( const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10680,14 +11547,16 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL>::type
- acquirePerformanceConfigurationINTEL( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ acquirePerformanceConfigurationINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL, Dispatch>>::type
- acquirePerformanceConfigurationINTELUnique( const PerformanceConfigurationAcquireInfoINTEL & acquireInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ acquirePerformanceConfigurationINTELUnique(
+ const VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL & acquireInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10706,13 +11575,13 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
release( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10743,7 +11612,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
DeviceAddress
- getBufferAddressEXT( const BufferDeviceAddressInfo & info,
+ getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10752,10 +11621,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- uint64_t presentId,
- uint64_t timeout,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
+ uint64_t presentId,
+ uint64_t timeout,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result waitForPresentKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
@@ -10771,7 +11640,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result acquireFullScreenExclusiveModeEXT(
VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -10783,7 +11652,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result releaseFullScreenExclusiveModeEXT(
VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -10800,7 +11669,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR>::type
- getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ getGroupSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -10814,7 +11683,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
DeviceAddress
- getBufferAddressKHR( const BufferDeviceAddressInfo & info,
+ getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10824,7 +11693,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- uint64_t getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo & info,
+ uint64_t getBufferOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10835,7 +11704,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- uint64_t getMemoryOpaqueCaptureAddressKHR( const DeviceMemoryOpaqueCaptureAddressInfo & info,
+ uint64_t getMemoryOpaqueCaptureAddressKHR( const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10857,14 +11726,15 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::DeferredOperationKHR>::type createDeferredOperationKHR(
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::DeferredOperationKHR>::type
+ createDeferredOperationKHR( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DeferredOperationKHR, Dispatch>>::type
- createDeferredOperationKHRUnique( Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDeferredOperationKHRUnique( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10878,7 +11748,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyDeferredOperationKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10889,7 +11760,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -10902,24 +11774,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result getDeferredOperationResultKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getDeferredOperationResultKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getDeferredOperationResultKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ deferredOperationJoinKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR operation,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_pipeline_executable_properties ===
@@ -10935,7 +11807,7 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<
std::vector<PipelineExecutablePropertiesKHR, PipelineExecutablePropertiesKHRAllocator>>::type
- getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo,
+ getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PipelineExecutablePropertiesKHRAllocator = std::allocator<PipelineExecutablePropertiesKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -10945,9 +11817,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<
std::vector<PipelineExecutablePropertiesKHR, PipelineExecutablePropertiesKHRAllocator>>::type
getPipelineExecutablePropertiesKHR(
- const PipelineInfoKHR & pipelineInfo,
- PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo,
+ PipelineExecutablePropertiesKHRAllocator & pipelineExecutablePropertiesKHRAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10961,7 +11833,7 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<
std::vector<PipelineExecutableStatisticKHR, PipelineExecutableStatisticKHRAllocator>>::type
- getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo,
+ getPipelineExecutableStatisticsKHR( const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PipelineExecutableStatisticKHRAllocator = std::allocator<PipelineExecutableStatisticKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -10971,9 +11843,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<
std::vector<PipelineExecutableStatisticKHR, PipelineExecutableStatisticKHRAllocator>>::type
getPipelineExecutableStatisticsKHR(
- const PipelineExecutableInfoKHR & executableInfo,
- PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
+ PipelineExecutableStatisticKHRAllocator & pipelineExecutableStatisticKHRAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -10989,9 +11861,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<PipelineExecutableInternalRepresentationKHR,
PipelineExecutableInternalRepresentationKHRAllocator>>::type
- getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR & executableInfo,
- Dispatch const & d
- VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getPipelineExecutableInternalRepresentationsKHR(
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename PipelineExecutableInternalRepresentationKHRAllocator =
std::allocator<PipelineExecutableInternalRepresentationKHR>,
@@ -11003,9 +11875,9 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<PipelineExecutableInternalRepresentationKHR,
PipelineExecutableInternalRepresentationKHRAllocator>>::type
getPipelineExecutableInternalRepresentationsKHR(
- const PipelineExecutableInfoKHR & executableInfo,
- PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo,
+ PipelineExecutableInternalRepresentationKHRAllocator & pipelineExecutableInternalRepresentationKHRAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_NV_device_generated_commands ===
@@ -11018,11 +11890,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getGeneratedCommandsMemoryRequirementsNV(
- const GeneratedCommandsMemoryRequirementsInfoNV & info,
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getGeneratedCommandsMemoryRequirementsNV(
- const GeneratedCommandsMemoryRequirementsInfoNV & info,
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11036,17 +11908,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV>::type
- createIndirectCommandsLayoutNV( const IndirectCommandsLayoutCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createIndirectCommandsLayoutNV( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV, Dispatch>>::type
- createIndirectCommandsLayoutNVUnique( const IndirectCommandsLayoutCreateInfoNV & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createIndirectCommandsLayoutNVUnique( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11060,7 +11932,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyIndirectCommandsLayoutNV(
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11071,7 +11944,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11079,81 +11953,72 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfoEXT * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT * pPrivateDataSlot,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot * pPrivateDataSlot,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT>::type createPrivateDataSlotEXT(
- const PrivateDataSlotCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::PrivateDataSlot>::type
+ createPrivateDataSlotEXT( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT, Dispatch>>::type
- createPrivateDataSlotEXTUnique( const PrivateDataSlotCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::PrivateDataSlot, Dispatch>>::type
+ createPrivateDataSlotEXTUnique( const VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
+ void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyPrivateDataSlotEXT(
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
-#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
-#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t data,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
- setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t data,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t * pData,
+ void getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t * pData,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD uint64_t
- getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_ray_tracing_pipeline ===
@@ -11170,30 +12035,34 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>> createRayTracingPipelinesKHR(
- VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
+ createRayTracingPipelinesKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PipelineAllocator = std::allocator<Pipeline>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = PipelineAllocator,
typename std::enable_if<std::is_same<typename B::value_type, Pipeline>::value, int>::type = 0>
- VULKAN_HPP_NODISCARD ResultValue<std::vector<Pipeline, PipelineAllocator>> createRayTracingPipelinesKHR(
- VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
- PipelineAllocator & pipelineAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<std::vector<VULKAN_HPP_NAMESPACE::Pipeline, PipelineAllocator>>
+ createRayTracingPipelinesKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
+ PipelineAllocator & pipelineAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<Pipeline> createRayTracingPipelineKHR(
- VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<VULKAN_HPP_NAMESPACE::Pipeline>
+ createRayTracingPipelineKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>>
@@ -11202,7 +12071,8 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename PipelineAllocator = std::allocator<UniqueHandle<Pipeline, Dispatch>>,
@@ -11214,16 +12084,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
ArrayProxy<const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
- Optional<const AllocationCallbacks> allocator,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator,
PipelineAllocator & pipelineAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>> createRayTracingPipelineKHRUnique(
- VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
- const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD ResultValue<UniqueHandle<Pipeline, Dispatch>>
+ createRayTracingPipelineKHRUnique( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ VULKAN_HPP_NAMESPACE::PipelineCache pipelineCache,
+ const VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11234,7 +12105,7 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t groupCount,
size_t dataSize,
void * pData,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -11243,17 +12114,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t groupCount,
ArrayProxy<T> const & data,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T,
- typename Allocator = std::allocator<T>,
+ template <typename DataType,
+ typename Allocator = std::allocator<DataType>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<T, Allocator>>::type
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<DataType, Allocator>>::type
getRayTracingShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<T>::type
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<DataType>::type
getRayTracingShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
@@ -11267,7 +12138,7 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t groupCount,
size_t dataSize,
void * pData,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
@@ -11275,25 +12146,25 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t firstGroup,
uint32_t groupCount,
ArrayProxy<T> const & data,
- Dispatch const & d
- VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T,
- typename Allocator = std::allocator<T>,
+ Dispatch const & d
+ VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename DataType,
+ typename Allocator = std::allocator<DataType>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<T, Allocator>>::type
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<std::vector<DataType, Allocator>>::type
getRayTracingCaptureReplayShaderGroupHandlesKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
size_t dataSize,
- Dispatch const & d
- VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename T, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<T>::type
+ Dispatch const & d
+ VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename DataType, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<DataType>::type
getRayTracingCaptureReplayShaderGroupHandleKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline,
uint32_t firstGroup,
uint32_t groupCount,
- Dispatch const & d
- VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d
+ VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11314,7 +12185,7 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<zx_handle_t>::type
- getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo,
+ getMemoryZirconHandleFUCHSIA( const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11343,7 +12214,7 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type importSemaphoreZirconHandleFUCHSIA(
- const ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo,
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11354,9 +12225,105 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<zx_handle_t>::type
- getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<zx_handle_t>::type getSemaphoreZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result createBufferCollectionFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA * pCollection,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA>::type
+ createBufferCollectionFUCHSIA( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# ifndef VULKAN_HPP_NO_SMART_HANDLE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
+ typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA, Dispatch>>::type
+ createBufferCollectionFUCHSIAUnique( const VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result setBufferCollectionImageConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA * pImageConstraintsInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
+ setBufferCollectionImageConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result setBufferCollectionBufferConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA * pBufferConstraintsInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
+ setBufferCollectionBufferConstraintsFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroyBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void destroy( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result getBufferCollectionPropertiesFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA * pProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA>::type
+ getBufferCollectionPropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_FUCHSIA*/
@@ -11366,7 +12333,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD Result getSubpassShadingMaxWorkgroupSizeHUAWEI(
VULKAN_HPP_NAMESPACE::RenderPass renderpass,
VULKAN_HPP_NAMESPACE::Extent2D * pMaxWorkgroupSize,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD ResultValue<VULKAN_HPP_NAMESPACE::Extent2D>
@@ -11378,16 +12345,81 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo,
- VULKAN_HPP_NAMESPACE::RemoteAddressNV * pAddress,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV * pMemoryGetRemoteAddressInfo,
+ VULKAN_HPP_NAMESPACE::RemoteAddressNV * pAddress,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<VULKAN_HPP_NAMESPACE::RemoteAddressNV>::type
- getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo,
+ getMemoryRemoteAddressNV( const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_EXT_pageable_device_local_memory ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void setMemoryPriorityEXT( VULKAN_HPP_NAMESPACE::DeviceMemory memory,
+ float priority,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ //=== VK_KHR_maintenance4 ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ void getImageSparseMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements * pInfo,
+ uint32_t * pSparseMemoryRequirementCount,
+ VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 * pSparseMemoryRequirements,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <typename SparseImageMemoryRequirements2Allocator = std::allocator<SparseImageMemoryRequirements2>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
+ typename B = SparseImageMemoryRequirements2Allocator,
+ typename std::enable_if<std::is_same<typename B::value_type, SparseImageMemoryRequirements2>::value,
+ int>::type = 0>
+ VULKAN_HPP_NODISCARD std::vector<SparseImageMemoryRequirements2, SparseImageMemoryRequirements2Allocator>
+ getImageSparseMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info,
+ SparseImageMemoryRequirements2Allocator & sparseImageMemoryRequirements2Allocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
VULKAN_HPP_TYPESAFE_EXPLICIT operator VkDevice() const VULKAN_HPP_NOEXCEPT
{
return m_device;
@@ -11406,8 +12438,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDevice m_device = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Device ) == sizeof( VkDevice ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Device ) == sizeof( VkDevice ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Device>::value,
+ "Device is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eDevice>
@@ -11437,7 +12471,8 @@ namespace VULKAN_HPP_NAMESPACE
class DisplayModeKHR
{
public:
- using CType = VkDisplayModeKHR;
+ using CType = VkDisplayModeKHR;
+ using NativeType = VkDisplayModeKHR;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eDisplayModeKHR;
@@ -11502,8 +12537,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkDisplayModeKHR m_displayModeKHR = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeKHR ) == sizeof( VkDisplayModeKHR ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeKHR ) == sizeof( VkDisplayModeKHR ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayModeKHR>::value,
+ "DisplayModeKHR is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -11544,7 +12581,8 @@ namespace VULKAN_HPP_NAMESPACE
class PhysicalDevice
{
public:
- using CType = VkPhysicalDevice;
+ using CType = VkPhysicalDevice;
+ using NativeType = VkPhysicalDevice;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::ePhysicalDevice;
@@ -11599,7 +12637,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures
- getFeatures( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFeatures( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11615,20 +12653,20 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
- VULKAN_HPP_NAMESPACE::ImageType type,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
- VULKAN_HPP_NAMESPACE::ImageCreateFlags flags,
- VULKAN_HPP_NAMESPACE::ImageFormatProperties * pImageFormatProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
+ VULKAN_HPP_NAMESPACE::ImageType type,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags flags,
+ VULKAN_HPP_NAMESPACE::ImageFormatProperties * pImageFormatProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageFormatProperties>::type
- getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
- VULKAN_HPP_NAMESPACE::ImageType type,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
+ getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
+ VULKAN_HPP_NAMESPACE::ImageType type,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11639,7 +12677,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties
- getProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11659,7 +12697,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, QueueFamilyProperties>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<QueueFamilyProperties, QueueFamilyPropertiesAllocator>
getQueueFamilyProperties( QueueFamilyPropertiesAllocator & queueFamilyPropertiesAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11668,27 +12706,29 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties
- getMemoryProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::Device * pDevice,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::Device * pDevice,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Device>::type
- createDevice( const DeviceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDevice( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Device, Dispatch>>::type
- createDeviceUnique( const DeviceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDeviceUnique( const VULKAN_HPP_NAMESPACE::DeviceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11698,13 +12738,13 @@ namespace VULKAN_HPP_NAMESPACE
const char * pLayerName,
uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename ExtensionPropertiesAllocator = std::allocator<ExtensionProperties>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<ExtensionProperties, ExtensionPropertiesAllocator>>::type
enumerateDeviceExtensionProperties( Optional<const std::string> layerName
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename ExtensionPropertiesAllocator = std::allocator<ExtensionProperties>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -11720,7 +12760,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD Result enumerateDeviceLayerProperties(
uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::LayerProperties * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename LayerPropertiesAllocator = std::allocator<LayerProperties>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11732,7 +12772,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, LayerProperties>::value, int>::type = 0>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<LayerProperties, LayerPropertiesAllocator>>::type
enumerateDeviceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11778,10 +12818,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2
- getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFeatures2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11790,10 +12830,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2
- getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11819,11 +12859,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>::type
- getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
+ getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<StructureChain<X, Y, Z...>>::type
- getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
+ getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11844,7 +12884,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, QueueFamilyProperties2>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<QueueFamilyProperties2, QueueFamilyProperties2Allocator>
getQueueFamilyProperties2( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename StructureChain,
typename StructureChainAllocator = std::allocator<StructureChain>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11857,7 +12897,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, StructureChain>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<StructureChain, StructureChainAllocator>
getQueueFamilyProperties2( StructureChainAllocator & structureChainAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11866,10 +12906,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2
- getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryProperties2( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11882,17 +12922,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageFormatProperties2Allocator = std::allocator<SparseImageFormatProperties2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
- getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename SparseImageFormatProperties2Allocator = std::allocator<SparseImageFormatProperties2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SparseImageFormatProperties2Allocator,
typename std::enable_if<std::is_same<typename B::value_type, SparseImageFormatProperties2>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
- getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getSparseImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
+ SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11903,7 +12943,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties getExternalBufferProperties(
- const PhysicalDeviceExternalBufferInfo & externalBufferInfo,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11915,7 +12955,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties getExternalFenceProperties(
- const PhysicalDeviceExternalFenceInfo & externalFenceInfo,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -11927,24 +12967,48 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties getExternalSemaphoreProperties(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+ //=== VK_VERSION_1_3 ===
+
+ template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD Result
+ getToolProperties( uint32_t * pToolCount,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
+ template <typename PhysicalDeviceToolPropertiesAllocator = std::allocator<PhysicalDeviceToolProperties>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
+ getToolProperties( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <
+ typename PhysicalDeviceToolPropertiesAllocator = std::allocator<PhysicalDeviceToolProperties>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
+ typename B = PhysicalDeviceToolPropertiesAllocator,
+ typename std::enable_if<std::is_same<typename B::value_type, PhysicalDeviceToolProperties>::value, int>::type = 0>
+ VULKAN_HPP_NODISCARD
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
+ getToolProperties( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
//=== VK_KHR_surface ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSurfaceSupportKHR( uint32_t queueFamilyIndex,
- VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- VULKAN_HPP_NAMESPACE::Bool32 * pSupported,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSurfaceSupportKHR( uint32_t queueFamilyIndex,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ VULKAN_HPP_NAMESPACE::Bool32 * pSupported,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Bool32>::type
getSurfaceSupportKHR( uint32_t queueFamilyIndex,
VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11956,21 +13020,21 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR>::type
getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- uint32_t * pSurfaceFormatCount,
- VULKAN_HPP_NAMESPACE::SurfaceFormatKHR * pSurfaceFormats,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ uint32_t * pSurfaceFormatCount,
+ VULKAN_HPP_NAMESPACE::SurfaceFormatKHR * pSurfaceFormats,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename SurfaceFormatKHRAllocator = std::allocator<SurfaceFormatKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<SurfaceFormatKHR, SurfaceFormatKHRAllocator>>::type
- getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename SurfaceFormatKHRAllocator = std::allocator<SurfaceFormatKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SurfaceFormatKHRAllocator,
@@ -11978,7 +13042,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<SurfaceFormatKHR, SurfaceFormatKHRAllocator>>::type
getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
SurfaceFormatKHRAllocator & surfaceFormatKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -11986,12 +13050,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
uint32_t * pPresentModeCount,
VULKAN_HPP_NAMESPACE::PresentModeKHR * pPresentModes,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PresentModeKHRAllocator = std::allocator<PresentModeKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PresentModeKHR, PresentModeKHRAllocator>>::type
- getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PresentModeKHRAllocator = std::allocator<PresentModeKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -12000,22 +13064,22 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PresentModeKHR, PresentModeKHRAllocator>>::type
getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
PresentModeKHRAllocator & presentModeKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_swapchain ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- uint32_t * pRectCount,
- VULKAN_HPP_NAMESPACE::Rect2D * pRects,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ uint32_t * pRectCount,
+ VULKAN_HPP_NAMESPACE::Rect2D * pRects,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Rect2DAllocator = std::allocator<Rect2D>, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<Rect2D, Rect2DAllocator>>::type
getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename Rect2DAllocator = std::allocator<Rect2D>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = Rect2DAllocator,
@@ -12023,16 +13087,16 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<Rect2D, Rect2DAllocator>>::type
getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
Rect2DAllocator & rect2DAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_display ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getDisplayPropertiesKHR( uint32_t * pPropertyCount,
- VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getDisplayPropertiesKHR( uint32_t * pPropertyCount,
+ VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR * pProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename DisplayPropertiesKHRAllocator = std::allocator<DisplayPropertiesKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12046,7 +13110,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<DisplayPropertiesKHR, DisplayPropertiesKHRAllocator>>::type
getDisplayPropertiesKHR( DisplayPropertiesKHRAllocator & displayPropertiesKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12076,12 +13140,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t planeIndex,
uint32_t * pDisplayCount,
VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplays,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename DisplayKHRAllocator = std::allocator<DisplayKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<DisplayKHR, DisplayKHRAllocator>>::type
- getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex,
+ getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename DisplayKHRAllocator = std::allocator<DisplayKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -12090,7 +13154,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<DisplayKHR, DisplayKHRAllocator>>::type
getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex,
DisplayKHRAllocator & displayKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12105,7 +13169,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<DisplayModePropertiesKHR, DisplayModePropertiesKHRAllocator>>::type
getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename DisplayModePropertiesKHRAllocator = std::allocator<DisplayModePropertiesKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -12115,32 +13179,32 @@ namespace VULKAN_HPP_NAMESPACE
typename ResultValueType<std::vector<DisplayModePropertiesKHR, DisplayModePropertiesKHRAllocator>>::type
getDisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
DisplayModePropertiesKHRAllocator & displayModePropertiesKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::DisplayModeKHR * pMode,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::DisplayModeKHR * pMode,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayModeKHR>::type
- createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayModeCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDisplayModeKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DisplayModeKHR, Dispatch>>::type
- createDisplayModeKHRUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayModeCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDisplayModeKHRUnique( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12164,16 +13228,16 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_xlib_surface ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex,
- Display * dpy,
- VisualID visualID,
+ Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex,
+ Display * dpy,
+ VisualID visualID,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex,
- Display & dpy,
- VisualID visualID,
+ Bool32 getXlibPresentationSupportKHR( uint32_t queueFamilyIndex,
+ Display & dpy,
+ VisualID visualID,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12204,13 +13268,13 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex,
struct wl_display * display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
Bool32 getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex,
struct wl_display & display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
@@ -12219,7 +13283,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_win32_surface ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex,
+ Bool32 getWin32PresentationSupportKHR( uint32_t queueFamilyIndex,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -12229,17 +13293,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile,
- VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR * pCapabilities,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile,
+ VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR * pCapabilities,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR>::type
- getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile,
+ getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<StructureChain<X, Y, Z...>>::type
- getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile,
+ getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12254,7 +13318,7 @@ namespace VULKAN_HPP_NAMESPACE
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<VideoFormatPropertiesKHR, VideoFormatPropertiesKHRAllocator>>::type
- getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
+ getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename VideoFormatPropertiesKHRAllocator = std::allocator<VideoFormatPropertiesKHR>,
@@ -12263,9 +13327,9 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, VideoFormatPropertiesKHR>::value, int>::type = 0>
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<VideoFormatPropertiesKHR, VideoFormatPropertiesKHRAllocator>>::type
- getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
- VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getVideoFormatPropertiesKHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo,
+ VideoFormatPropertiesKHRAllocator & videoFormatPropertiesKHRAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -12286,11 +13350,11 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV>::type
getExternalImageFormatPropertiesNV(
- VULKAN_HPP_NAMESPACE::Format format,
- VULKAN_HPP_NAMESPACE::ImageType type,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
- VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ VULKAN_HPP_NAMESPACE::Format format,
+ VULKAN_HPP_NAMESPACE::ImageType type,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12303,10 +13367,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2
- getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getFeatures2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12315,10 +13379,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2
- getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12345,11 +13409,11 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>::type
- getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
+ getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<StructureChain<X, Y, Z...>>::type
- getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
+ getImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12362,20 +13426,20 @@ namespace VULKAN_HPP_NAMESPACE
template <typename QueueFamilyProperties2Allocator = std::allocator<QueueFamilyProperties2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<QueueFamilyProperties2, QueueFamilyProperties2Allocator>
- getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename QueueFamilyProperties2Allocator = std::allocator<QueueFamilyProperties2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = QueueFamilyProperties2Allocator,
typename std::enable_if<std::is_same<typename B::value_type, QueueFamilyProperties2>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<QueueFamilyProperties2, QueueFamilyProperties2Allocator>
- getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getQueueFamilyProperties2KHR( QueueFamilyProperties2Allocator & queueFamilyProperties2Allocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename StructureChain,
typename StructureChainAllocator = std::allocator<StructureChain>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<StructureChain, StructureChainAllocator>
- getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getQueueFamilyProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename StructureChain,
typename StructureChainAllocator = std::allocator<StructureChain>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -12383,7 +13447,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, StructureChain>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<StructureChain, StructureChainAllocator>
getQueueFamilyProperties2KHR( StructureChainAllocator & structureChainAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12393,10 +13457,10 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2
- getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getMemoryProperties2KHR( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12409,17 +13473,17 @@ namespace VULKAN_HPP_NAMESPACE
template <typename SparseImageFormatProperties2Allocator = std::allocator<SparseImageFormatProperties2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
- getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename SparseImageFormatProperties2Allocator = std::allocator<SparseImageFormatProperties2>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SparseImageFormatProperties2Allocator,
typename std::enable_if<std::is_same<typename B::value_type, SparseImageFormatProperties2>::value, int>::type = 0>
VULKAN_HPP_NODISCARD std::vector<SparseImageFormatProperties2, SparseImageFormatProperties2Allocator>
- getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
- SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ getSparseImageFormatProperties2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo,
+ SparseImageFormatProperties2Allocator & sparseImageFormatProperties2Allocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_external_memory_capabilities ===
@@ -12432,7 +13496,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties getExternalBufferPropertiesKHR(
- const PhysicalDeviceExternalBufferInfo & externalBufferInfo,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12446,7 +13510,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties getExternalSemaphorePropertiesKHR(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12460,7 +13524,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
releaseDisplayEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT )
@@ -12468,23 +13532,23 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- acquireXlibDisplayEXT( Display * dpy,
- VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ acquireXlibDisplayEXT( Display * dpy,
+ VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
acquireXlibDisplayEXT( Display & dpy,
VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getRandROutputDisplayEXT( Display * dpy,
- RROutput rrOutput,
- VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getRandROutputDisplayEXT( Display * dpy,
+ RROutput rrOutput,
+ VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayKHR>::type getRandROutputDisplayEXT(
@@ -12492,8 +13556,8 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DisplayKHR, Dispatch>>::type
- getRandROutputDisplayEXTUnique( Display & dpy,
- RROutput rrOutput,
+ getRandROutputDisplayEXTUnique( Display & dpy,
+ RROutput rrOutput,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12511,7 +13575,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT>::type
getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_external_fence_capabilities ===
@@ -12524,7 +13588,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties getExternalFencePropertiesKHR(
- const PhysicalDeviceExternalFenceInfo & externalFenceInfo,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12538,24 +13602,6 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR * pCounterDescriptions,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename Allocator = std::allocator<PerformanceCounterDescriptionKHR>,
- typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PerformanceCounterDescriptionKHR, Allocator>>::type
- enumerateQueueFamilyPerformanceQueryCountersKHR(
- uint32_t queueFamilyIndex,
- ArrayProxy<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR> const & counters,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename Allocator = std::allocator<PerformanceCounterDescriptionKHR>,
- typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
- typename B = Allocator,
- typename std::enable_if<std::is_same<typename B::value_type, PerformanceCounterDescriptionKHR>::value,
- int>::type = 0>
- VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PerformanceCounterDescriptionKHR, Allocator>>::type
- enumerateQueueFamilyPerformanceQueryCountersKHR(
- uint32_t queueFamilyIndex,
- ArrayProxy<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR> const & counters,
- Allocator const & vectorAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PerformanceCounterKHRAllocator = std::allocator<PerformanceCounterKHR>,
typename PerformanceCounterDescriptionKHRAllocator = std::allocator<PerformanceCounterDescriptionKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12579,7 +13625,7 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t queueFamilyIndex,
PerformanceCounterKHRAllocator & performanceCounterKHRAllocator,
PerformanceCounterDescriptionKHRAllocator & performanceCounterDescriptionKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12590,7 +13636,7 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD uint32_t getQueueFamilyPerformanceQueryPassesKHR(
- const QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo,
+ const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12605,33 +13651,33 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR>::type
- getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename X, typename Y, typename... Z, typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<StructureChain<X, Y, Z...>>::type
- getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,
- uint32_t * pSurfaceFormatCount,
- VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR * pSurfaceFormats,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR * pSurfaceInfo,
+ uint32_t * pSurfaceFormatCount,
+ VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR * pSurfaceFormats,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename SurfaceFormat2KHRAllocator = std::allocator<SurfaceFormat2KHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<SurfaceFormat2KHR, SurfaceFormat2KHRAllocator>>::type
- getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename SurfaceFormat2KHRAllocator = std::allocator<SurfaceFormat2KHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = SurfaceFormat2KHRAllocator,
typename std::enable_if<std::is_same<typename B::value_type, SurfaceFormat2KHR>::value, int>::type = 0>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<SurfaceFormat2KHR, SurfaceFormat2KHRAllocator>>::type
- getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator,
+ getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ SurfaceFormat2KHRAllocator & surfaceFormat2KHRAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12639,9 +13685,9 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getDisplayProperties2KHR( uint32_t * pPropertyCount,
- VULKAN_HPP_NAMESPACE::DisplayProperties2KHR * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getDisplayProperties2KHR( uint32_t * pPropertyCount,
+ VULKAN_HPP_NAMESPACE::DisplayProperties2KHR * pProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename DisplayProperties2KHRAllocator = std::allocator<DisplayProperties2KHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12656,7 +13702,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<DisplayProperties2KHR, DisplayProperties2KHRAllocator>>::type
getDisplayProperties2KHR( DisplayProperties2KHRAllocator & displayProperties2KHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12693,7 +13739,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
typename ResultValueType<std::vector<DisplayModeProperties2KHR, DisplayModeProperties2KHRAllocator>>::type
getDisplayModeProperties2KHR( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <
typename DisplayModeProperties2KHRAllocator = std::allocator<DisplayModeProperties2KHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -12715,7 +13761,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS
typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR>::type
- getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR & displayPlaneInfo,
+ getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12730,7 +13776,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT getMultisamplePropertiesEXT(
VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_EXT_calibrated_timestamps ===
@@ -12739,7 +13785,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD Result getCalibrateableTimeDomainsEXT(
uint32_t * pTimeDomainCount,
VULKAN_HPP_NAMESPACE::TimeDomainEXT * pTimeDomains,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename TimeDomainEXTAllocator = std::allocator<TimeDomainEXT>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -12751,7 +13797,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, TimeDomainEXT>::value, int>::type = 0>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<TimeDomainEXT, TimeDomainEXTAllocator>>::type
getCalibrateableTimeDomainsEXT( TimeDomainEXTAllocator & timeDomainEXTAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_KHR_fragment_shading_rate ===
@@ -12778,31 +13824,31 @@ namespace VULKAN_HPP_NAMESPACE
std::vector<PhysicalDeviceFragmentShadingRateKHR, PhysicalDeviceFragmentShadingRateKHRAllocator>>::type
getFragmentShadingRatesKHR(
PhysicalDeviceFragmentShadingRateKHRAllocator & physicalDeviceFragmentShadingRateKHRAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_EXT_tooling_info ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getToolPropertiesEXT( uint32_t * pToolCount,
- VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT * pToolProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getToolPropertiesEXT( uint32_t * pToolCount,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties * pToolProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
- template <typename PhysicalDeviceToolPropertiesEXTAllocator = std::allocator<PhysicalDeviceToolPropertiesEXT>,
- typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD typename ResultValueType<
- std::vector<PhysicalDeviceToolPropertiesEXT, PhysicalDeviceToolPropertiesEXTAllocator>>::type
+ template <typename PhysicalDeviceToolPropertiesAllocator = std::allocator<PhysicalDeviceToolProperties>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
+ VULKAN_HPP_NODISCARD
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
getToolPropertiesEXT( Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
- template <typename PhysicalDeviceToolPropertiesEXTAllocator = std::allocator<PhysicalDeviceToolPropertiesEXT>,
- typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
- typename B = PhysicalDeviceToolPropertiesEXTAllocator,
- typename std::enable_if<std::is_same<typename B::value_type, PhysicalDeviceToolPropertiesEXT>::value,
- int>::type = 0>
- VULKAN_HPP_NODISCARD typename ResultValueType<
- std::vector<PhysicalDeviceToolPropertiesEXT, PhysicalDeviceToolPropertiesEXTAllocator>>::type
- getToolPropertiesEXT( PhysicalDeviceToolPropertiesEXTAllocator & physicalDeviceToolPropertiesEXTAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ template <
+ typename PhysicalDeviceToolPropertiesAllocator = std::allocator<PhysicalDeviceToolProperties>,
+ typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
+ typename B = PhysicalDeviceToolPropertiesAllocator,
+ typename std::enable_if<std::is_same<typename B::value_type, PhysicalDeviceToolProperties>::value, int>::type = 0>
+ VULKAN_HPP_NODISCARD
+ typename ResultValueType<std::vector<PhysicalDeviceToolProperties, PhysicalDeviceToolPropertiesAllocator>>::type
+ getToolPropertiesEXT( PhysicalDeviceToolPropertiesAllocator & physicalDeviceToolPropertiesAllocator,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_NV_cooperative_matrix ===
@@ -12854,7 +13900,7 @@ namespace VULKAN_HPP_NAMESPACE
std::vector<FramebufferMixedSamplesCombinationNV, FramebufferMixedSamplesCombinationNVAllocator>>::type
getSupportedFramebufferMixedSamplesCombinationsNV(
FramebufferMixedSamplesCombinationNVAllocator & framebufferMixedSamplesCombinationNVAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#if defined( VK_USE_PLATFORM_WIN32_KHR )
@@ -12870,15 +13916,15 @@ namespace VULKAN_HPP_NAMESPACE
template <typename PresentModeKHRAllocator = std::allocator<PresentModeKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PresentModeKHR, PresentModeKHRAllocator>>::type
- getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
template <typename PresentModeKHRAllocator = std::allocator<PresentModeKHR>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
typename B = PresentModeKHRAllocator,
typename std::enable_if<std::is_same<typename B::value_type, PresentModeKHR>::value, int>::type = 0>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PresentModeKHR, PresentModeKHRAllocator>>::type
- getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
- PresentModeKHRAllocator & presentModeKHRAllocator,
+ getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo,
+ PresentModeKHRAllocator & presentModeKHRAllocator,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
@@ -12888,35 +13934,35 @@ namespace VULKAN_HPP_NAMESPACE
#ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- acquireDrmDisplayEXT( int32_t drmFd,
- VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ acquireDrmDisplayEXT( int32_t drmFd,
+ VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
typename ResultValueType<void>::type
acquireDrmDisplayEXT( int32_t drmFd,
VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getDrmDisplayEXT( int32_t drmFd,
- uint32_t connectorId,
- VULKAN_HPP_NAMESPACE::DisplayKHR * display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getDrmDisplayEXT( int32_t drmFd,
+ uint32_t connectorId,
+ VULKAN_HPP_NAMESPACE::DisplayKHR * display,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayKHR>::type
- getDrmDisplayEXT( int32_t drmFd,
- uint32_t connectorId,
+ getDrmDisplayEXT( int32_t drmFd,
+ uint32_t connectorId,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DisplayKHR, Dispatch>>::type
- getDrmDisplayEXTUnique( int32_t drmFd,
- uint32_t connectorId,
+ getDrmDisplayEXTUnique( int32_t drmFd,
+ uint32_t connectorId,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12927,20 +13973,20 @@ namespace VULKAN_HPP_NAMESPACE
# ifdef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# else
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<void>::type
acquireWinrtDisplayNV( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- getWinrtDisplayNV( uint32_t deviceRelativeId,
- VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ getWinrtDisplayNV( uint32_t deviceRelativeId,
+ VULKAN_HPP_NAMESPACE::DisplayKHR * pDisplay,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::DisplayKHR>::type
@@ -12949,7 +13995,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DisplayKHR, Dispatch>>::type
- getWinrtDisplayNVUnique( uint32_t deviceRelativeId,
+ getWinrtDisplayNVUnique( uint32_t deviceRelativeId,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12959,14 +14005,14 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_directfb_surface ===
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex,
- IDirectFB * dfb,
+ Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex,
+ IDirectFB * dfb,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex,
- IDirectFB & dfb,
+ Bool32 getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex,
+ IDirectFB & dfb,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -12978,13 +14024,13 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex,
struct _screen_window * window,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
Bool32 getScreenPresentationSupportQNX( uint32_t queueFamilyIndex,
struct _screen_window & window,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_SCREEN_QNX*/
@@ -13007,8 +14053,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkPhysicalDevice m_physicalDevice = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice ) == sizeof( VkPhysicalDevice ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice ) == sizeof( VkPhysicalDevice ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevice>::value,
+ "PhysicalDevice is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED(
@@ -13064,7 +14112,8 @@ namespace VULKAN_HPP_NAMESPACE
class Instance
{
public:
- using CType = VkInstance;
+ using CType = VkInstance;
+ using NativeType = VkInstance;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
VULKAN_HPP_NAMESPACE::ObjectType::eInstance;
@@ -13116,15 +14165,16 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount,
- VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ enumeratePhysicalDevices( uint32_t * pPhysicalDeviceCount,
+ VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename PhysicalDeviceAllocator = std::allocator<PhysicalDevice>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -13136,18 +14186,18 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, PhysicalDevice>::value, int>::type = 0>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<PhysicalDevice, PhysicalDeviceAllocator>>::type
enumeratePhysicalDevices( PhysicalDeviceAllocator & physicalDeviceAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
PFN_vkVoidFunction
- getProcAddr( const char * pName,
+ getProcAddr( const char * pName,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
PFN_vkVoidFunction
getProcAddr( const std::string & name,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_VERSION_1_1 ===
@@ -13182,10 +14232,10 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void
- destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ void destroySurfaceKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -13194,8 +14244,9 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ void destroy( VULKAN_HPP_NAMESPACE::SurfaceKHR surface,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13210,17 +14261,17 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createDisplayPlaneSurfaceKHR( const DisplaySurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDisplayPlaneSurfaceKHR( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createDisplayPlaneSurfaceKHRUnique( const DisplaySurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDisplayPlaneSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13230,24 +14281,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createXlibSurfaceKHR( const XlibSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createXlibSurfaceKHR( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createXlibSurfaceKHRUnique( const XlibSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createXlibSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13258,23 +14309,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createXcbSurfaceKHR( const XcbSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createXcbSurfaceKHR( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createXcbSurfaceKHRUnique( const XcbSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createXcbSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13285,24 +14337,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createWaylandSurfaceKHR( const WaylandSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createWaylandSurfaceKHR( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createWaylandSurfaceKHRUnique( const WaylandSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createWaylandSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13313,24 +14365,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createAndroidSurfaceKHR( const AndroidSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createAndroidSurfaceKHR( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createAndroidSurfaceKHRUnique( const AndroidSurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createAndroidSurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13341,24 +14393,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createWin32SurfaceKHR( const Win32SurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createWin32SurfaceKHR( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createWin32SurfaceKHRUnique( const Win32SurfaceCreateInfoKHR & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createWin32SurfaceKHRUnique( const VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13374,17 +14426,18 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT>::type createDebugReportCallbackEXT(
- const DebugReportCallbackCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT>::type
+ createDebugReportCallbackEXT( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT, Dispatch>>::type
- createDebugReportCallbackEXTUnique( const DebugReportCallbackCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDebugReportCallbackEXTUnique( const VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13398,7 +14451,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyDebugReportCallbackEXT(
VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13409,7 +14463,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT callback,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13446,18 +14501,19 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createStreamDescriptorSurfaceGGP( const StreamDescriptorSurfaceCreateInfoGGP & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createStreamDescriptorSurfaceGGP( const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createStreamDescriptorSurfaceGGPUnique( const StreamDescriptorSurfaceCreateInfoGGP & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ createStreamDescriptorSurfaceGGPUnique(
+ const VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VK_USE_PLATFORM_GGP*/
@@ -13467,23 +14523,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createViSurfaceNN( const ViSurfaceCreateInfoNN & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createViSurfaceNN( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createViSurfaceNNUnique( const ViSurfaceCreateInfoNN & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createViSurfaceNNUnique( const VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13518,23 +14575,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createIOSSurfaceMVK( const IOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createIOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createIOSSurfaceMVKUnique( const IOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createIOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13545,24 +14603,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createMacOSSurfaceMVK( const MacOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createMacOSSurfaceMVK( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createMacOSSurfaceMVKUnique( const MacOSSurfaceCreateInfoMVK & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createMacOSSurfaceMVKUnique( const VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13578,17 +14636,18 @@ namespace VULKAN_HPP_NAMESPACE
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- typename ResultValueType<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT>::type createDebugUtilsMessengerEXT(
- const DebugUtilsMessengerCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
+ typename ResultValueType<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT>::type
+ createDebugUtilsMessengerEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT, Dispatch>>::type
- createDebugUtilsMessengerEXTUnique( const DebugUtilsMessengerCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDebugUtilsMessengerEXTUnique( const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13602,7 +14661,8 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroyDebugUtilsMessengerEXT(
VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13613,7 +14673,8 @@ namespace VULKAN_HPP_NAMESPACE
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
void destroy( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT messenger,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13625,9 +14686,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- void submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
- VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
- const DebugUtilsMessengerCallbackDataEXT & callbackData,
+ void submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13644,17 +14705,17 @@ namespace VULKAN_HPP_NAMESPACE
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createImagePipeSurfaceFUCHSIA( const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createImagePipeSurfaceFUCHSIA( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createImagePipeSurfaceFUCHSIAUnique( const ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createImagePipeSurfaceFUCHSIAUnique( const VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13665,24 +14726,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createMetalSurfaceEXT( const MetalSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createMetalSurfaceEXT( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createMetalSurfaceEXTUnique( const MetalSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createMetalSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13692,24 +14753,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createHeadlessSurfaceEXT( const HeadlessSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createHeadlessSurfaceEXT( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createHeadlessSurfaceEXTUnique( const HeadlessSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createHeadlessSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13719,24 +14780,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createDirectFBSurfaceEXT( const DirectFBSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDirectFBSurfaceEXT( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createDirectFBSurfaceEXTUnique( const DirectFBSurfaceCreateInfoEXT & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createDirectFBSurfaceEXTUnique( const VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13747,24 +14808,24 @@ namespace VULKAN_HPP_NAMESPACE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX * pCreateInfo,
- const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
- VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX * pCreateInfo,
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * pAllocator,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR * pSurface,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
# ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::SurfaceKHR>::type
- createScreenSurfaceQNX( const ScreenSurfaceCreateInfoQNX & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createScreenSurfaceQNX( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::SurfaceKHR, Dispatch>>::type
- createScreenSurfaceQNXUnique( const ScreenSurfaceCreateInfoQNX & createInfo,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createScreenSurfaceQNXUnique( const VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) const;
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13788,8 +14849,10 @@ namespace VULKAN_HPP_NAMESPACE
private:
VkInstance m_instance = {};
};
- static_assert( sizeof( VULKAN_HPP_NAMESPACE::Instance ) == sizeof( VkInstance ),
- "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Instance ) == sizeof( VkInstance ),
+ "handle and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Instance>::value,
+ "Instance is not nothrow_move_constructible!" );
template <>
struct VULKAN_HPP_DEPRECATED( "vk::cpp_type is deprecated. Use vk::CppType instead." ) cpp_type<ObjectType::eInstance>
@@ -13836,16 +14899,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
- VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Instance>::type
- createInstance( const InstanceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
+ VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS typename ResultValueType<VULKAN_HPP_NAMESPACE::Instance>::type createInstance(
+ const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
# ifndef VULKAN_HPP_NO_SMART_HANDLE
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD_WHEN_NO_EXCEPTIONS VULKAN_HPP_INLINE
typename ResultValueType<UniqueHandle<VULKAN_HPP_NAMESPACE::Instance, Dispatch>>::type
- createInstanceUnique( const InstanceCreateInfo & createInfo,
- Optional<const AllocationCallbacks> allocator VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ createInstanceUnique( const VULKAN_HPP_NAMESPACE::InstanceCreateInfo & createInfo,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
# endif /*VULKAN_HPP_NO_SMART_HANDLE*/
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
@@ -13855,13 +14919,13 @@ namespace VULKAN_HPP_NAMESPACE
const char * pLayerName,
uint32_t * pPropertyCount,
VULKAN_HPP_NAMESPACE::ExtensionProperties * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT;
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename ExtensionPropertiesAllocator = std::allocator<ExtensionProperties>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<ExtensionProperties, ExtensionPropertiesAllocator>>::type
enumerateInstanceExtensionProperties( Optional<const std::string> layerName
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
template <typename ExtensionPropertiesAllocator = std::allocator<ExtensionProperties>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE,
@@ -13870,14 +14934,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<ExtensionProperties, ExtensionPropertiesAllocator>>::type
enumerateInstanceExtensionProperties( Optional<const std::string> layerName,
ExtensionPropertiesAllocator & extensionPropertiesAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
template <typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
VULKAN_HPP_NODISCARD Result
- enumerateInstanceLayerProperties( uint32_t * pPropertyCount,
- VULKAN_HPP_NAMESPACE::LayerProperties * pProperties,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT;
+ enumerateInstanceLayerProperties( uint32_t * pPropertyCount,
+ VULKAN_HPP_NAMESPACE::LayerProperties * pProperties,
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT ) VULKAN_HPP_NOEXCEPT;
#ifndef VULKAN_HPP_DISABLE_ENHANCED_MODE
template <typename LayerPropertiesAllocator = std::allocator<LayerProperties>,
typename Dispatch = VULKAN_HPP_DEFAULT_DISPATCHER_TYPE>
@@ -13889,7 +14953,7 @@ namespace VULKAN_HPP_NAMESPACE
typename std::enable_if<std::is_same<typename B::value_type, LayerProperties>::value, int>::type = 0>
VULKAN_HPP_NODISCARD typename ResultValueType<std::vector<LayerProperties, LayerPropertiesAllocator>>::type
enumerateInstanceLayerProperties( LayerPropertiesAllocator & layerPropertiesAllocator,
- Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
+ Dispatch const & d VULKAN_HPP_DEFAULT_DISPATCHER_ASSIGNMENT );
#endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
//=== VK_VERSION_1_1 ===
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_hash.hpp b/thirdparty/vulkan/include/vulkan/vulkan_hash.hpp
new file mode 100644
index 0000000000..e1b22a9862
--- /dev/null
+++ b/thirdparty/vulkan/include/vulkan/vulkan_hash.hpp
@@ -0,0 +1,13191 @@
+// Copyright 2015-2022 The Khronos Group Inc.
+//
+// SPDX-License-Identifier: Apache-2.0 OR MIT
+//
+
+// This header is generated from the Khronos Vulkan XML API Registry.
+
+#ifndef VULKAN_HASH_HPP
+#define VULKAN_HASH_HPP
+
+#include <vulkan/vulkan.hpp>
+
+namespace std
+{
+ //=======================================
+ //=== HASH structures for Flags types ===
+ //=======================================
+
+ template <typename BitType>
+ struct hash<VULKAN_HPP_NAMESPACE::Flags<BitType>>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Flags<BitType> const & flags ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<typename std::underlying_type<BitType>::type>{}(
+ static_cast<typename std::underlying_type<BitType>::type>( flags ) );
+ }
+ };
+
+ //===================================
+ //=== HASH structures for handles ===
+ //===================================
+
+ //=== VK_VERSION_1_0 ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Instance>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Instance const & instance ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkInstance>{}( static_cast<VkInstance>( instance ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevice>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice const & physicalDevice ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkPhysicalDevice>{}( static_cast<VkPhysicalDevice>( physicalDevice ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Device>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Device const & device ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDevice>{}( static_cast<VkDevice>( device ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Queue>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Queue const & queue ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkQueue>{}( static_cast<VkQueue>( queue ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceMemory>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemory const & deviceMemory ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDeviceMemory>{}( static_cast<VkDeviceMemory>( deviceMemory ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Fence>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Fence const & fence ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkFence>{}( static_cast<VkFence>( fence ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Semaphore>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Semaphore const & semaphore ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkSemaphore>{}( static_cast<VkSemaphore>( semaphore ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Event>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Event const & event ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkEvent>{}( static_cast<VkEvent>( event ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueryPool>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPool const & queryPool ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkQueryPool>{}( static_cast<VkQueryPool>( queryPool ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Buffer>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Buffer const & buffer ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkBuffer>{}( static_cast<VkBuffer>( buffer ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferView>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferView const & bufferView ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkBufferView>{}( static_cast<VkBufferView>( bufferView ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Image>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Image const & image ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkImage>{}( static_cast<VkImage>( image ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageView>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageView const & imageView ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkImageView>{}( static_cast<VkImageView>( imageView ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ShaderModule>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModule const & shaderModule ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkShaderModule>{}( static_cast<VkShaderModule>( shaderModule ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCache>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCache const & pipelineCache ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkPipelineCache>{}( static_cast<VkPipelineCache>( pipelineCache ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Pipeline>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Pipeline const & pipeline ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkPipeline>{}( static_cast<VkPipeline>( pipeline ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineLayout>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayout const & pipelineLayout ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkPipelineLayout>{}( static_cast<VkPipelineLayout>( pipelineLayout ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Sampler>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Sampler const & sampler ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkSampler>{}( static_cast<VkSampler>( sampler ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorPool>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPool const & descriptorPool ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDescriptorPool>{}( static_cast<VkDescriptorPool>( descriptorPool ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSet>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSet const & descriptorSet ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDescriptorSet>{}( static_cast<VkDescriptorSet>( descriptorSet ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetLayout>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayout const & descriptorSetLayout ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDescriptorSetLayout>{}( static_cast<VkDescriptorSetLayout>( descriptorSetLayout ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Framebuffer>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Framebuffer const & framebuffer ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkFramebuffer>{}( static_cast<VkFramebuffer>( framebuffer ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPass>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPass const & renderPass ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkRenderPass>{}( static_cast<VkRenderPass>( renderPass ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandPool>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandPool const & commandPool ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkCommandPool>{}( static_cast<VkCommandPool>( commandPool ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBuffer>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBuffer const & commandBuffer ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkCommandBuffer>{}( static_cast<VkCommandBuffer>( commandBuffer ) );
+ }
+ };
+
+ //=== VK_VERSION_1_1 ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & samplerYcbcrConversion ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkSamplerYcbcrConversion>{}( static_cast<VkSamplerYcbcrConversion>( samplerYcbcrConversion ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate const & descriptorUpdateTemplate ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDescriptorUpdateTemplate>{}(
+ static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ) );
+ }
+ };
+
+ //=== VK_VERSION_1_3 ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PrivateDataSlot>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlot const & privateDataSlot ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkPrivateDataSlot>{}( static_cast<VkPrivateDataSlot>( privateDataSlot ) );
+ }
+ };
+
+ //=== VK_KHR_surface ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceKHR const & surfaceKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkSurfaceKHR>{}( static_cast<VkSurfaceKHR>( surfaceKHR ) );
+ }
+ };
+
+ //=== VK_KHR_swapchain ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SwapchainKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainKHR const & swapchainKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkSwapchainKHR>{}( static_cast<VkSwapchainKHR>( swapchainKHR ) );
+ }
+ };
+
+ //=== VK_KHR_display ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayKHR const & displayKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDisplayKHR>{}( static_cast<VkDisplayKHR>( displayKHR ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayModeKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeKHR const & displayModeKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDisplayModeKHR>{}( static_cast<VkDisplayModeKHR>( displayModeKHR ) );
+ }
+ };
+
+ //=== VK_EXT_debug_report ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & debugReportCallbackEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDebugReportCallbackEXT>{}( static_cast<VkDebugReportCallbackEXT>( debugReportCallbackEXT ) );
+ }
+ };
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_KHR_video_queue ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoSessionKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionKHR const & videoSessionKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkVideoSessionKHR>{}( static_cast<VkVideoSessionKHR>( videoSessionKHR ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & videoSessionParametersKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkVideoSessionParametersKHR>{}(
+ static_cast<VkVideoSessionParametersKHR>( videoSessionParametersKHR ) );
+ }
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+ //=== VK_NVX_binary_import ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CuModuleNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CuModuleNVX const & cuModuleNVX ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkCuModuleNVX>{}( static_cast<VkCuModuleNVX>( cuModuleNVX ) );
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CuFunctionNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionNVX const & cuFunctionNVX ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkCuFunctionNVX>{}( static_cast<VkCuFunctionNVX>( cuFunctionNVX ) );
+ }
+ };
+
+ //=== VK_EXT_debug_utils ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & debugUtilsMessengerEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDebugUtilsMessengerEXT>{}( static_cast<VkDebugUtilsMessengerEXT>( debugUtilsMessengerEXT ) );
+ }
+ };
+
+ //=== VK_KHR_acceleration_structure ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & accelerationStructureKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkAccelerationStructureKHR>{}(
+ static_cast<VkAccelerationStructureKHR>( accelerationStructureKHR ) );
+ }
+ };
+
+ //=== VK_EXT_validation_cache ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ValidationCacheEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & validationCacheEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkValidationCacheEXT>{}( static_cast<VkValidationCacheEXT>( validationCacheEXT ) );
+ }
+ };
+
+ //=== VK_NV_ray_tracing ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & accelerationStructureNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkAccelerationStructureNV>{}(
+ static_cast<VkAccelerationStructureNV>( accelerationStructureNV ) );
+ }
+ };
+
+ //=== VK_INTEL_performance_query ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & performanceConfigurationINTEL )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkPerformanceConfigurationINTEL>{}(
+ static_cast<VkPerformanceConfigurationINTEL>( performanceConfigurationINTEL ) );
+ }
+ };
+
+ //=== VK_KHR_deferred_host_operations ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeferredOperationKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & deferredOperationKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkDeferredOperationKHR>{}( static_cast<VkDeferredOperationKHR>( deferredOperationKHR ) );
+ }
+ };
+
+ //=== VK_NV_device_generated_commands ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & indirectCommandsLayoutNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkIndirectCommandsLayoutNV>{}(
+ static_cast<VkIndirectCommandsLayoutNV>( indirectCommandsLayoutNV ) );
+ }
+ };
+
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const & bufferCollectionFUCHSIA ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ return std::hash<VkBufferCollectionFUCHSIA>{}(
+ static_cast<VkBufferCollectionFUCHSIA>( bufferCollectionFUCHSIA ) );
+ }
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#if 14 <= VULKAN_HPP_CPP_VERSION
+ //======================================
+ //=== HASH structures for structures ===
+ //======================================
+
+# if !defined( VULKAN_HPP_HASH_COMBINE )
+# define VULKAN_HPP_HASH_COMBINE( seed, value ) \
+ seed ^= std::hash<std::decay<decltype( value )>::type>{}( value ) + 0x9e3779b9 + ( seed << 6 ) + ( seed >> 2 )
+# endif
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AabbPositionsKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AabbPositionsKHR const & aabbPositionsKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minX );
+ VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minY );
+ VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.minZ );
+ VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxX );
+ VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxY );
+ VULKAN_HPP_HASH_COMBINE( seed, aabbPositionsKHR.maxZ );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR const &
+ accelerationStructureBuildRangeInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.primitiveCount );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.primitiveOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.firstVertex );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildRangeInfoKHR.transformOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR const &
+ accelerationStructureBuildSizesInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.accelerationStructureSize );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.updateScratchSize );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureBuildSizesInfoKHR.buildScratchSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const &
+ accelerationStructureCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.createFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.size );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.type );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoKHR.deviceAddress );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GeometryTrianglesNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & geometryTrianglesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexData );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexStride );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.vertexFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexData );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.indexType );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.transformData );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryTrianglesNV.transformOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GeometryAABBNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & geometryAABBNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.aabbData );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.numAABBs );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.stride );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryAABBNV.offset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GeometryDataNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometryDataNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, geometryDataNV.triangles );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryDataNV.aabbs );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GeometryNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GeometryNV const & geometryNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, geometryNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryNV.geometryType );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryNV.geometry );
+ VULKAN_HPP_HASH_COMBINE( seed, geometryNV.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const & accelerationStructureInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.type );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.instanceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.geometryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInfoNV.pGeometries );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const &
+ accelerationStructureCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.compactedSize );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureCreateInfoNV.info );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR const &
+ accelerationStructureDeviceAddressInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureDeviceAddressInfoKHR.accelerationStructure );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::TransformMatrixKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformMatrixKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ for ( size_t i = 0; i < 3; ++i )
+ {
+ for ( size_t j = 0; j < 4; ++j )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, transformMatrixKHR.matrix[i][j] );
+ }
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR const &
+ accelerationStructureInstanceKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.transform );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.instanceCustomIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.mask );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.instanceShaderBindingTableRecordOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureInstanceKHR.accelerationStructureReference );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV const &
+ accelerationStructureMatrixMotionInstanceNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.transformT0 );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.transformT1 );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.instanceCustomIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.mask );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ accelerationStructureMatrixMotionInstanceNV.instanceShaderBindingTableRecordOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMatrixMotionInstanceNV.accelerationStructureReference );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV const &
+ accelerationStructureMemoryRequirementsInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.type );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMemoryRequirementsInfoNV.accelerationStructure );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV const &
+ accelerationStructureMotionInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.maxInstances );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureMotionInfoNV.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SRTDataNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SRTDataNV const & sRTDataNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sx );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.a );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.b );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvx );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sy );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.c );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvy );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.sz );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.pvz );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qx );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qy );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qz );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.qw );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.tx );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.ty );
+ VULKAN_HPP_HASH_COMBINE( seed, sRTDataNV.tz );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV const &
+ accelerationStructureSRTMotionInstanceNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.transformT0 );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.transformT1 );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.instanceCustomIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.mask );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.instanceShaderBindingTableRecordOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureSRTMotionInstanceNV.accelerationStructureReference );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR const &
+ accelerationStructureVersionInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, accelerationStructureVersionInfoKHR.pVersionData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR const & acquireNextImageInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.swapchain );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.timeout );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.fence );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireNextImageInfoKHR.deviceMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR const & acquireProfilingLockInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, acquireProfilingLockInfoKHR.timeout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AllocationCallbacks>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::AllocationCallbacks const & allocationCallbacks ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pUserData );
+ VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnReallocation );
+ VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnFree );
+ VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnInternalAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, allocationCallbacks.pfnInternalFree );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ComponentMapping>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ComponentMapping const & componentMapping ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, componentMapping.r );
+ VULKAN_HPP_HASH_COMBINE( seed, componentMapping.g );
+ VULKAN_HPP_HASH_COMBINE( seed, componentMapping.b );
+ VULKAN_HPP_HASH_COMBINE( seed, componentMapping.a );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID const &
+ androidHardwareBufferFormatProperties2ANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.format );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.externalFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.formatFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.samplerYcbcrConversionComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYcbcrModel );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYcbcrRange );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedXChromaOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatProperties2ANDROID.suggestedYChromaOffset );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID const &
+ androidHardwareBufferFormatPropertiesANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.format );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.externalFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.formatFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.samplerYcbcrConversionComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYcbcrModel );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYcbcrRange );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedXChromaOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferFormatPropertiesANDROID.suggestedYChromaOffset );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID const &
+ androidHardwareBufferPropertiesANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.allocationSize );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferPropertiesANDROID.memoryTypeBits );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID const &
+ androidHardwareBufferUsageANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, androidHardwareBufferUsageANDROID.androidHardwareBufferUsage );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & androidSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, androidSurfaceCreateInfoKHR.window );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ApplicationInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ApplicationInfo const & applicationInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.pNext );
+ for ( const char * p = applicationInfo.pApplicationName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.applicationVersion );
+ for ( const char * p = applicationInfo.pEngineName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.engineVersion );
+ VULKAN_HPP_HASH_COMBINE( seed, applicationInfo.apiVersion );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentDescription>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::AttachmentDescription const & attachmentDescription ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.format );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.samples );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.loadOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.storeOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.stencilLoadOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.stencilStoreOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.initialLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription.finalLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentDescription2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescription2 const & attachmentDescription2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.format );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.samples );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.loadOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.storeOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.stencilLoadOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.stencilStoreOp );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.initialLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescription2.finalLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout const &
+ attachmentDescriptionStencilLayout ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.stencilInitialLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentDescriptionStencilLayout.stencilFinalLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentReference>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::AttachmentReference const & attachmentReference ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference.attachment );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference.layout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentReference2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::AttachmentReference2 const & attachmentReference2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.attachment );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.layout );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReference2.aspectMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout const &
+ attachmentReferenceStencilLayout ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentReferenceStencilLayout.stencilLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD const & attachmentSampleCountInfoAMD )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.colorAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.pColorAttachmentSamples );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleCountInfoAMD.depthStencilAttachmentSamples );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Extent2D>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Extent2D const & extent2D ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, extent2D.width );
+ VULKAN_HPP_HASH_COMBINE( seed, extent2D.height );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SampleLocationEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SampleLocationEXT const & sampleLocationEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationEXT.x );
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationEXT.y );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationsPerPixel );
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationGridSize );
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.sampleLocationsCount );
+ VULKAN_HPP_HASH_COMBINE( seed, sampleLocationsInfoEXT.pSampleLocations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT const & attachmentSampleLocationsEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleLocationsEXT.attachmentIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, attachmentSampleLocationsEXT.sampleLocationsInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BaseInStructure>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BaseInStructure const & baseInStructure ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, baseInStructure.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, baseInStructure.pNext );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BaseOutStructure>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BaseOutStructure const & baseOutStructure ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, baseOutStructure.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, baseOutStructure.pNext );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV const &
+ bindAccelerationStructureMemoryInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.accelerationStructure );
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.memoryOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.deviceIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindAccelerationStructureMemoryInfoNV.pDeviceIndices );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo const & bindBufferMemoryDeviceGroupInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.deviceIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryDeviceGroupInfo.pDeviceIndices );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo const & bindBufferMemoryInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, bindBufferMemoryInfo.memoryOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Offset2D>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Offset2D const & offset2D ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, offset2D.x );
+ VULKAN_HPP_HASH_COMBINE( seed, offset2D.y );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Rect2D>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Rect2D const & rect2D ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rect2D.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, rect2D.extent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo const & bindImageMemoryDeviceGroupInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.deviceIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pDeviceIndices );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.splitInstanceBindRegionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryDeviceGroupInfo.pSplitInstanceBindRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindImageMemoryInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BindImageMemoryInfo const & bindImageMemoryInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.image );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemoryInfo.memoryOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR const & bindImageMemorySwapchainInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.swapchain );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImageMemorySwapchainInfoKHR.imageIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo const & bindImagePlaneMemoryInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindImagePlaneMemoryInfo.planeAspect );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV const &
+ bindIndexBufferIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.bufferAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.size );
+ VULKAN_HPP_HASH_COMBINE( seed, bindIndexBufferIndirectCommandNV.indexType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV const &
+ bindShaderGroupIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindShaderGroupIndirectCommandNV.groupIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseMemoryBind>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseMemoryBind const & sparseMemoryBind ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.resourceOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.size );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.memoryOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseMemoryBind.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo const & sparseBufferMemoryBindInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.bindCount );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseBufferMemoryBindInfo.pBinds );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo const & sparseImageOpaqueMemoryBindInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.image );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.bindCount );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageOpaqueMemoryBindInfo.pBinds );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageSubresource>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresource const & imageSubresource ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.aspectMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.mipLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresource.arrayLayer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Offset3D>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Offset3D const & offset3D ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, offset3D.x );
+ VULKAN_HPP_HASH_COMBINE( seed, offset3D.y );
+ VULKAN_HPP_HASH_COMBINE( seed, offset3D.z );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Extent3D>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Extent3D const & extent3D ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, extent3D.width );
+ VULKAN_HPP_HASH_COMBINE( seed, extent3D.height );
+ VULKAN_HPP_HASH_COMBINE( seed, extent3D.depth );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageMemoryBind>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryBind const & sparseImageMemoryBind ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.subresource );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.extent );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.memoryOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBind.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo const & sparseImageMemoryBindInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.image );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.bindCount );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryBindInfo.pBinds );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindSparseInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BindSparseInfo const & bindSparseInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.waitSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pWaitSemaphores );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.bufferBindCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pBufferBinds );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.imageOpaqueBindCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pImageOpaqueBinds );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.imageBindCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pImageBinds );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.signalSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bindSparseInfo.pSignalSemaphores );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV const &
+ bindVertexBufferIndirectCommandNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.bufferAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.size );
+ VULKAN_HPP_HASH_COMBINE( seed, bindVertexBufferIndirectCommandNV.stride );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageSubresourceLayers>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresourceLayers ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.aspectMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.mipLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.baseArrayLayer );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceLayers.layerCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageBlit2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageBlit2 const & imageBlit2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.srcSubresource );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.srcOffsets[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.dstSubresource );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit2.dstOffsets[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BlitImageInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BlitImageInfo2 const & blitImageInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.srcImage );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.srcImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.dstImage );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.dstImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.regionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.pRegions );
+ VULKAN_HPP_HASH_COMBINE( seed, blitImageInfo2.filter );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA const &
+ bufferCollectionBufferCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.collection );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionBufferCreateInfoFUCHSIA.index );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const &
+ bufferCollectionConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.maxBufferCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForCamping );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForDedicatedSlack );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionConstraintsInfoFUCHSIA.minBufferCountForSharedSlack );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const &
+ bufferCollectionCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionCreateInfoFUCHSIA.collectionToken );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA const &
+ bufferCollectionImageCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.collection );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionImageCreateInfoFUCHSIA.index );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const & sysmemColorSpaceFUCHSIA ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, sysmemColorSpaceFUCHSIA.colorSpace );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA const &
+ bufferCollectionPropertiesFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.memoryTypeBits );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.bufferCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.createInfoIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sysmemPixelFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.formatFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.sysmemColorSpaceIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.samplerYcbcrConversionComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYcbcrModel );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYcbcrRange );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedXChromaOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCollectionPropertiesFUCHSIA.suggestedYChromaOffset );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & bufferCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.size );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.usage );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.sharingMode );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.queueFamilyIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCreateInfo.pQueueFamilyIndices );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA const & bufferConstraintsInfoFUCHSIA )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.createInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.requiredFormatFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferConstraintsInfoFUCHSIA.bufferCollectionConstraints );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCopy>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCopy const & bufferCopy ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.srcOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.dstOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferCopy2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferCopy2 const & bufferCopy2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.srcOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.dstOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferCopy2.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT const &
+ bufferDeviceAddressCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressCreateInfoEXT.deviceAddress );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo const & bufferDeviceAddressInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferDeviceAddressInfo.buffer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferImageCopy>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferImageCopy const & bufferImageCopy ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferRowLength );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.bufferImageHeight );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy.imageExtent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferImageCopy2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferImageCopy2 const & bufferImageCopy2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferRowLength );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.bufferImageHeight );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferImageCopy2.imageExtent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier const & bufferMemoryBarrier ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.dstAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.srcQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.dstQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 const & bufferMemoryBarrier2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.srcQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.dstQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryBarrier2.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 const & bufferMemoryRequirementsInfo2 )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferMemoryRequirementsInfo2.buffer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo const &
+ bufferOpaqueCaptureAddressCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferOpaqueCaptureAddressCreateInfo.opaqueCaptureAddress );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::BufferViewCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & bufferViewCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.format );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, bufferViewCreateInfo.range );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT const & calibratedTimestampInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, calibratedTimestampInfoEXT.timeDomain );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CheckpointData2NV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::CheckpointData2NV const & checkpointData2NV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.stage );
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointData2NV.pCheckpointMarker );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CheckpointDataNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CheckpointDataNV const & checkpointDataNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.stage );
+ VULKAN_HPP_HASH_COMBINE( seed, checkpointDataNV.pCheckpointMarker );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ClearDepthStencilValue>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue const & clearDepthStencilValue ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, clearDepthStencilValue.depth );
+ VULKAN_HPP_HASH_COMBINE( seed, clearDepthStencilValue.stencil );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ClearRect>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ClearRect const & clearRect ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, clearRect.rect );
+ VULKAN_HPP_HASH_COMBINE( seed, clearRect.baseArrayLayer );
+ VULKAN_HPP_HASH_COMBINE( seed, clearRect.layerCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV const & coarseSampleLocationNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.pixelX );
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.pixelY );
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleLocationNV.sample );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV const & coarseSampleOrderCustomNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.shadingRate );
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.sampleCount );
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.sampleLocationCount );
+ VULKAN_HPP_HASH_COMBINE( seed, coarseSampleOrderCustomNV.pSampleLocations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & commandBufferAllocateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.commandPool );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.level );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferAllocateInfo.commandBufferCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo const & commandBufferInheritanceInfo )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.renderPass );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.subpass );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.framebuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.occlusionQueryEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.queryFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceInfo.pipelineStatistics );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo const & commandBufferBeginInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferBeginInfo.pInheritanceInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT const &
+ commandBufferInheritanceConditionalRenderingInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceConditionalRenderingInfoEXT.conditionalRenderingEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM const &
+ commandBufferInheritanceRenderPassTransformInfoQCOM ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.transform );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderPassTransformInfoQCOM.renderArea );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo const &
+ commandBufferInheritanceRenderingInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.viewMask );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.colorAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.pColorAttachmentFormats );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.depthAttachmentFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.stencilAttachmentFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceRenderingInfo.rasterizationSamples );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Viewport>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Viewport const & viewport ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, viewport.x );
+ VULKAN_HPP_HASH_COMBINE( seed, viewport.y );
+ VULKAN_HPP_HASH_COMBINE( seed, viewport.width );
+ VULKAN_HPP_HASH_COMBINE( seed, viewport.height );
+ VULKAN_HPP_HASH_COMBINE( seed, viewport.minDepth );
+ VULKAN_HPP_HASH_COMBINE( seed, viewport.maxDepth );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV const &
+ commandBufferInheritanceViewportScissorInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.viewportScissor2D );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.viewportDepthCount );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferInheritanceViewportScissorInfoNV.pViewportDepths );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo const & commandBufferSubmitInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.commandBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, commandBufferSubmitInfo.deviceMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & commandPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, commandPoolCreateInfo.queueFamilyIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SpecializationMapEntry>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SpecializationMapEntry const & specializationMapEntry ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.constantID );
+ VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, specializationMapEntry.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SpecializationInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SpecializationInfo const & specializationInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.mapEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.pMapEntries );
+ VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.dataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, specializationInfo.pData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const & pipelineShaderStageCreateInfo )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.stage );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.module );
+ for ( const char * p = pipelineShaderStageCreateInfo.pName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageCreateInfo.pSpecializationInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & computePipelineCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.stage );
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.layout );
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.basePipelineHandle );
+ VULKAN_HPP_HASH_COMBINE( seed, computePipelineCreateInfo.basePipelineIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT const &
+ conditionalRenderingBeginInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, conditionalRenderingBeginInfoEXT.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ConformanceVersion>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ConformanceVersion const & conformanceVersion ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.major );
+ VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.minor );
+ VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.subminor );
+ VULKAN_HPP_HASH_COMBINE( seed, conformanceVersion.patch );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV const & cooperativeMatrixPropertiesNV )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.MSize );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.NSize );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.KSize );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.AType );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.BType );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.CType );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.DType );
+ VULKAN_HPP_HASH_COMBINE( seed, cooperativeMatrixPropertiesNV.scope );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR const &
+ copyAccelerationStructureInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.src );
+ VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.dst );
+ VULKAN_HPP_HASH_COMBINE( seed, copyAccelerationStructureInfoKHR.mode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyBufferInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyBufferInfo2 const & copyBufferInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.srcBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.dstBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.regionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferInfo2.pRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 const & copyBufferToImageInfo2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.srcBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.dstImage );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.dstImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.regionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, copyBufferToImageInfo2.pRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM const & copyCommandTransformInfoQCOM )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyCommandTransformInfoQCOM.transform );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyDescriptorSet>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::CopyDescriptorSet const & copyDescriptorSet ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcSet );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcBinding );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.srcArrayElement );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstSet );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstBinding );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.dstArrayElement );
+ VULKAN_HPP_HASH_COMBINE( seed, copyDescriptorSet.descriptorCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageCopy2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCopy2 const & imageCopy2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.srcSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.srcOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.dstSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.dstOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy2.extent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyImageInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageInfo2 const & copyImageInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.srcImage );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.srcImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.dstImage );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.dstImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.regionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageInfo2.pRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 const & copyImageToBufferInfo2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.srcImage );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.srcImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.dstBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.regionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, copyImageToBufferInfo2.pRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & cuFunctionCreateInfoNVX ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, cuFunctionCreateInfoNVX.module );
+ for ( const char * p = cuFunctionCreateInfoNVX.pName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX const & cuLaunchInfoNVX ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.function );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimX );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimY );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.gridDimZ );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimX );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimY );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.blockDimZ );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.sharedMemBytes );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.paramCount );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pParams );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.extraCount );
+ VULKAN_HPP_HASH_COMBINE( seed, cuLaunchInfoNVX.pExtras );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & cuModuleCreateInfoNVX ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.dataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, cuModuleCreateInfoNVX.pData );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR const & d3D12FenceSubmitInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.waitSemaphoreValuesCount );
+ VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pWaitSemaphoreValues );
+ VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.signalSemaphoreValuesCount );
+ VULKAN_HPP_HASH_COMBINE( seed, d3D12FenceSubmitInfoKHR.pSignalSemaphoreValues );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT const & debugMarkerMarkerInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.pNext );
+ for ( const char * p = debugMarkerMarkerInfoEXT.pMarkerName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ for ( size_t i = 0; i < 4; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerMarkerInfoEXT.color[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT const & debugMarkerObjectNameInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.objectType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectNameInfoEXT.object );
+ for ( const char * p = debugMarkerObjectNameInfoEXT.pObjectName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT const & debugMarkerObjectTagInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.objectType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.object );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.tagName );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.tagSize );
+ VULKAN_HPP_HASH_COMBINE( seed, debugMarkerObjectTagInfoEXT.pTag );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const &
+ debugReportCallbackCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pfnCallback );
+ VULKAN_HPP_HASH_COMBINE( seed, debugReportCallbackCreateInfoEXT.pUserData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT const & debugUtilsLabelEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.pNext );
+ for ( const char * p = debugUtilsLabelEXT.pLabelName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ for ( size_t i = 0; i < 4; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsLabelEXT.color[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT const & debugUtilsObjectNameInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.objectType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectNameInfoEXT.objectHandle );
+ for ( const char * p = debugUtilsObjectNameInfoEXT.pObjectName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT const &
+ debugUtilsMessengerCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.flags );
+ for ( const char * p = debugUtilsMessengerCallbackDataEXT.pMessageIdName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.messageIdNumber );
+ for ( const char * p = debugUtilsMessengerCallbackDataEXT.pMessage; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.queueLabelCount );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pQueueLabels );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.cmdBufLabelCount );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pCmdBufLabels );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.objectCount );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCallbackDataEXT.pObjects );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const &
+ debugUtilsMessengerCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.messageSeverity );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.messageType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pfnUserCallback );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsMessengerCreateInfoEXT.pUserData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT const & debugUtilsObjectTagInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.objectType );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.objectHandle );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.tagName );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.tagSize );
+ VULKAN_HPP_HASH_COMBINE( seed, debugUtilsObjectTagInfoEXT.pTag );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV const &
+ dedicatedAllocationBufferCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationBufferCreateInfoNV.dedicatedAllocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV const &
+ dedicatedAllocationImageCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationImageCreateInfoNV.dedicatedAllocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV const &
+ dedicatedAllocationMemoryAllocateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.image );
+ VULKAN_HPP_HASH_COMBINE( seed, dedicatedAllocationMemoryAllocateInfoNV.buffer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryBarrier2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrier2 const & memoryBarrier2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.srcStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.dstStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier2.dstAccessMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageSubresourceRange>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & imageSubresourceRange ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.aspectMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.baseMipLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.levelCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.baseArrayLayer );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSubresourceRange.layerCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 const & imageMemoryBarrier2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.oldLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.newLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.srcQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.dstQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.image );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier2.subresourceRange );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DependencyInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DependencyInfo const & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.dependencyFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.memoryBarrierCount );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pMemoryBarriers );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.bufferMemoryBarrierCount );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pBufferMemoryBarriers );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.imageMemoryBarrierCount );
+ VULKAN_HPP_HASH_COMBINE( seed, dependencyInfo.pImageMemoryBarriers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorBufferInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DescriptorBufferInfo const & descriptorBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorBufferInfo.range );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorImageInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DescriptorImageInfo const & descriptorImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.sampler );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.imageView );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorImageInfo.imageLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorPoolSize>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolSize const & descriptorPoolSize ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolSize.type );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolSize.descriptorCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & descriptorPoolCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.maxSets );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.poolSizeCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolCreateInfo.pPoolSizes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo const &
+ descriptorPoolInlineUniformBlockCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorPoolInlineUniformBlockCreateInfo.maxInlineUniformBlockBindings );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & descriptorSetAllocateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.descriptorPool );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.descriptorSetCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetAllocateInfo.pSetLayouts );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding const & descriptorSetLayoutBinding ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.binding );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.descriptorType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.descriptorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.stageFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBinding.pImmutableSamplers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo const &
+ descriptorSetLayoutBindingFlagsCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.bindingCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutBindingFlagsCreateInfo.pBindingFlags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & descriptorSetLayoutCreateInfo )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.bindingCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutCreateInfo.pBindings );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport const & descriptorSetLayoutSupport ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetLayoutSupport.supported );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo const &
+ descriptorSetVariableDescriptorCountAllocateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.descriptorSetCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountAllocateInfo.pDescriptorCounts );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport const &
+ descriptorSetVariableDescriptorCountLayoutSupport ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorSetVariableDescriptorCountLayoutSupport.maxVariableDescriptorCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry const & descriptorUpdateTemplateEntry )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.dstBinding );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.dstArrayElement );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.descriptorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.descriptorType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateEntry.stride );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const &
+ descriptorUpdateTemplateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.descriptorUpdateEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pDescriptorUpdateEntries );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.templateType );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.descriptorSetLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pipelineBindPoint );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.pipelineLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, descriptorUpdateTemplateCreateInfo.set );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements const & deviceBufferMemoryRequirements ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceBufferMemoryRequirements.pCreateInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo const & deviceQueueCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.queueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.queueCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueCreateInfo.pQueuePriorities );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const & physicalDeviceFeatures ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.robustBufferAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fullDrawIndexUint32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.imageCubeArray );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.independentBlend );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.geometryShader );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.tessellationShader );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sampleRateShading );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.dualSrcBlend );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.logicOp );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.multiDrawIndirect );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.drawIndirectFirstInstance );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthClamp );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthBiasClamp );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fillModeNonSolid );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.depthBounds );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.wideLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.largePoints );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.alphaToOne );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.multiViewport );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.samplerAnisotropy );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionETC2 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionASTC_LDR );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.textureCompressionBC );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.occlusionQueryPrecise );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.pipelineStatisticsQuery );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.vertexPipelineStoresAndAtomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.fragmentStoresAndAtomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderTessellationAndGeometryPointSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderImageGatherExtended );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageExtendedFormats );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageMultisample );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageReadWithoutFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageWriteWithoutFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderUniformBufferArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderSampledImageArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageBufferArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderStorageImageArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderClipDistance );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderCullDistance );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderInt64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderInt16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderResourceResidency );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.shaderResourceMinLod );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseBinding );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyImage2D );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyImage3D );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency2Samples );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency4Samples );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency8Samples );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidency16Samples );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.sparseResidencyAliased );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.variableMultisampleRate );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures.inheritedQueries );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & deviceCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.queueCreateInfoCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pQueueCreateInfos );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.enabledLayerCount );
+ for ( size_t i = 0; i < deviceCreateInfo.enabledLayerCount; ++i )
+ {
+ for ( const char * p = deviceCreateInfo.ppEnabledLayerNames[i]; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.enabledExtensionCount );
+ for ( size_t i = 0; i < deviceCreateInfo.enabledExtensionCount; ++i )
+ {
+ for ( const char * p = deviceCreateInfo.ppEnabledExtensionNames[i]; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, deviceCreateInfo.pEnabledFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT const &
+ deviceDeviceMemoryReportCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pfnUserCallback );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDeviceMemoryReportCreateInfoEXT.pUserData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV const &
+ deviceDiagnosticsConfigCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceDiagnosticsConfigCreateInfoNV.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceEventInfoEXT.deviceEvent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo const & deviceGroupBindSparseInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.resourceDeviceIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupBindSparseInfo.memoryDeviceIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo const &
+ deviceGroupCommandBufferBeginInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupCommandBufferBeginInfo.deviceMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo const & deviceGroupDeviceCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.physicalDeviceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupDeviceCreateInfo.pPhysicalDevices );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR const &
+ deviceGroupPresentCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.pNext );
+ for ( size_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.presentMask[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentCapabilitiesKHR.modes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR const & deviceGroupPresentInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.swapchainCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.pDeviceMasks );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupPresentInfoKHR.mode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo const & deviceGroupRenderPassBeginInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.deviceMask );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.deviceRenderAreaCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupRenderPassBeginInfo.pDeviceRenderAreas );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo const & deviceGroupSubmitInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.waitSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pWaitSemaphoreDeviceIndices );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.commandBufferCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pCommandBufferDeviceMasks );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.signalSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSubmitInfo.pSignalSemaphoreDeviceIndices );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR const &
+ deviceGroupSwapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceGroupSwapchainCreateInfoKHR.modes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & imageCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.imageType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.format );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.extent );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.mipLevels );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.arrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.samples );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.tiling );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.usage );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.sharingMode );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.queueFamilyIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.pQueueFamilyIndices );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCreateInfo.initialLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements const & deviceImageMemoryRequirements )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.pCreateInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceImageMemoryRequirements.planeAspect );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo const &
+ deviceMemoryOpaqueCaptureAddressInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOpaqueCaptureAddressInfo.memory );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD const &
+ deviceMemoryOverallocationCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryOverallocationCreateInfoAMD.overallocationBehavior );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT const &
+ deviceMemoryReportCallbackDataEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.type );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.memoryObjectId );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.size );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.objectType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.objectHandle );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceMemoryReportCallbackDataEXT.heapIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo const & devicePrivateDataCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, devicePrivateDataCreateInfo.privateDataSlotRequestCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR const &
+ deviceQueueGlobalPriorityCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueGlobalPriorityCreateInfoKHR.globalPriority );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DeviceQueueInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & deviceQueueInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.queueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, deviceQueueInfo2.queueIndex );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & directFBSurfaceCreateInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.dfb );
+ VULKAN_HPP_HASH_COMBINE( seed, directFBSurfaceCreateInfoEXT.surface );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DispatchIndirectCommand>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DispatchIndirectCommand const & dispatchIndirectCommand ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.x );
+ VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.y );
+ VULKAN_HPP_HASH_COMBINE( seed, dispatchIndirectCommand.z );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayEventInfoEXT.displayEvent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const & displayModeParametersKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeParametersKHR.visibleRegion );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeParametersKHR.refreshRate );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & displayModeCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeCreateInfoKHR.parameters );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR const & displayModePropertiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayModePropertiesKHR.displayMode );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModePropertiesKHR.parameters );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR const & displayModeProperties2KHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayModeProperties2KHR.displayModeProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD const &
+ displayNativeHdrSurfaceCapabilitiesAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayNativeHdrSurfaceCapabilitiesAMD.localDimmingSupport );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR const & displayPlaneCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.supportedAlpha );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minSrcPosition );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxSrcPosition );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minSrcExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxSrcExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minDstPosition );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxDstPosition );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.minDstExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilitiesKHR.maxDstExtent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR const & displayPlaneCapabilities2KHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneCapabilities2KHR.capabilities );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR const & displayPlaneInfo2KHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.mode );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneInfo2KHR.planeIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR const & displayPlanePropertiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlanePropertiesKHR.currentDisplay );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlanePropertiesKHR.currentStackIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR const & displayPlaneProperties2KHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPlaneProperties2KHR.displayPlaneProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT const & displayPowerInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPowerInfoEXT.powerState );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR const & displayPresentInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.srcRect );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.dstRect );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPresentInfoKHR.persistent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR const & displayPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.display );
+ for ( const char * p = displayPropertiesKHR.displayName; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.physicalDimensions );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.physicalResolution );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.supportedTransforms );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.planeReorderPossible );
+ VULKAN_HPP_HASH_COMBINE( seed, displayPropertiesKHR.persistentContent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplayProperties2KHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DisplayProperties2KHR const & displayProperties2KHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displayProperties2KHR.displayProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & displaySurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.displayMode );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.planeIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.planeStackIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.transform );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.globalAlpha );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.alphaMode );
+ VULKAN_HPP_HASH_COMBINE( seed, displaySurfaceCreateInfoKHR.imageExtent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand const & drawIndexedIndirectCommand ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.indexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.instanceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.firstIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.vertexOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndexedIndirectCommand.firstInstance );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrawIndirectCommand>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DrawIndirectCommand const & drawIndirectCommand ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.vertexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.instanceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.firstVertex );
+ VULKAN_HPP_HASH_COMBINE( seed, drawIndirectCommand.firstInstance );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV const & drawMeshTasksIndirectCommandNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandNV.taskCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drawMeshTasksIndirectCommandNV.firstTask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT const & drmFormatModifierProperties2EXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifier );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifierPlaneCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierProperties2EXT.drmFormatModifierTilingFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT const & drmFormatModifierPropertiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifier );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifierPlaneCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesEXT.drmFormatModifierTilingFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT const &
+ drmFormatModifierPropertiesList2EXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.drmFormatModifierCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesList2EXT.pDrmFormatModifierProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT const &
+ drmFormatModifierPropertiesListEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.drmFormatModifierCount );
+ VULKAN_HPP_HASH_COMBINE( seed, drmFormatModifierPropertiesListEXT.pDrmFormatModifierProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::EventCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::EventCreateInfo const & eventCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, eventCreateInfo.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo const & exportFenceCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceCreateInfo.handleTypes );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR const & exportFenceWin32HandleInfoKHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.pAttributes );
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.dwAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, exportFenceWin32HandleInfoKHR.name );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo const & exportMemoryAllocateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfo.handleTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV const & exportMemoryAllocateInfoNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryAllocateInfoNV.handleTypes );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR const & exportMemoryWin32HandleInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.pAttributes );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.dwAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoKHR.name );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV const & exportMemoryWin32HandleInfoNV )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.pAttributes );
+ VULKAN_HPP_HASH_COMBINE( seed, exportMemoryWin32HandleInfoNV.dwAccess );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo const & exportSemaphoreCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreCreateInfo.handleTypes );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR const &
+ exportSemaphoreWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.pAttributes );
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.dwAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, exportSemaphoreWin32HandleInfoKHR.name );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExtensionProperties>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExtensionProperties const & extensionProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, extensionProperties.extensionName[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, extensionProperties.specVersion );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalMemoryProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties const & externalMemoryProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.externalMemoryFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.exportFromImportedHandleTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryProperties.compatibleHandleTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalBufferProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalBufferProperties const & externalBufferProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalBufferProperties.externalMemoryProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalFenceProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalFenceProperties const & externalFenceProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.exportFromImportedHandleTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.compatibleHandleTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, externalFenceProperties.externalFenceFeatures );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalFormatANDROID>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExternalFormatANDROID const & externalFormatANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalFormatANDROID.externalFormat );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties const & externalImageFormatProperties )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatProperties.externalMemoryProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageFormatProperties>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImageFormatProperties const & imageFormatProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxMipLevels );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxArrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.sampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties.maxResourceSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV const & externalImageFormatPropertiesNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.imageFormatProperties );
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.externalMemoryFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.exportFromImportedHandleTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, externalImageFormatPropertiesNV.compatibleHandleTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo const & externalMemoryBufferCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryBufferCreateInfo.handleTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo const & externalMemoryImageCreateInfo )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfo.handleTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV const & externalMemoryImageCreateInfoNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalMemoryImageCreateInfoNV.handleTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties const & externalSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.exportFromImportedHandleTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.compatibleHandleTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, externalSemaphoreProperties.externalSemaphoreFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FenceCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceCreateInfo const & fenceCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceCreateInfo.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR const & fenceGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.fence );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetFdInfoKHR.handleType );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR const & fenceGetWin32HandleInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.fence );
+ VULKAN_HPP_HASH_COMBINE( seed, fenceGetWin32HandleInfoKHR.handleType );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT const &
+ filterCubicImageViewImageFormatPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.filterCubic );
+ VULKAN_HPP_HASH_COMBINE( seed, filterCubicImageViewImageFormatPropertiesEXT.filterCubicMinmax );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FormatProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FormatProperties const & formatProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties.linearTilingFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties.optimalTilingFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties.bufferFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FormatProperties2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::FormatProperties2 const & formatProperties2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties2.formatProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FormatProperties3>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::FormatProperties3 const & formatProperties3 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.linearTilingFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.optimalTilingFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, formatProperties3.bufferFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR const &
+ fragmentShadingRateAttachmentInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.pFragmentShadingRateAttachment );
+ VULKAN_HPP_HASH_COMBINE( seed, fragmentShadingRateAttachmentInfoKHR.shadingRateAttachmentTexelSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo const & framebufferAttachmentImageInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.usage );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.width );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.height );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.layerCount );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.viewFormatCount );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentImageInfo.pViewFormats );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo const &
+ framebufferAttachmentsCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.attachmentImageInfoCount );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferAttachmentsCreateInfo.pAttachmentImageInfos );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FramebufferCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & framebufferCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.renderPass );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.attachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.pAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.width );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.height );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferCreateInfo.layers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV const &
+ framebufferMixedSamplesCombinationNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.coverageReductionMode );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.rasterizationSamples );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.depthStencilSamples );
+ VULKAN_HPP_HASH_COMBINE( seed, framebufferMixedSamplesCombinationNV.colorSamples );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV const & indirectCommandsStreamNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsStreamNV.buffer );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsStreamNV.offset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV const & generatedCommandsInfoNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pipelineBindPoint );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pipeline );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.indirectCommandsLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.streamCount );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.pStreams );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCount );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.preprocessSize );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCountBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesCountOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesIndexBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsInfoNV.sequencesIndexOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV const &
+ generatedCommandsMemoryRequirementsInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pipelineBindPoint );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.pipeline );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.indirectCommandsLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, generatedCommandsMemoryRequirementsInfoNV.maxSequencesCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VertexInputBindingDescription>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription const & vertexInputBindingDescription )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.binding );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.stride );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription.inputRate );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription const & vertexInputAttributeDescription ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.location );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.binding );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.format );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription.offset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo const &
+ pipelineVertexInputStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.vertexBindingDescriptionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pVertexBindingDescriptions );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.vertexAttributeDescriptionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputStateCreateInfo.pVertexAttributeDescriptions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo const &
+ pipelineInputAssemblyStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.topology );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInputAssemblyStateCreateInfo.primitiveRestartEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo const &
+ pipelineTessellationStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationStateCreateInfo.patchControlPoints );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo const & pipelineViewportStateCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.viewportCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pViewports );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.scissorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportStateCreateInfo.pScissors );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo const &
+ pipelineRasterizationStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthClampEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.rasterizerDiscardEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.polygonMode );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.cullMode );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.frontFace );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasConstantFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasClamp );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.depthBiasSlopeFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateCreateInfo.lineWidth );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo const &
+ pipelineMultisampleStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.rasterizationSamples );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.sampleShadingEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.minSampleShading );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.pSampleMask );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.alphaToCoverageEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineMultisampleStateCreateInfo.alphaToOneEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::StencilOpState>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::StencilOpState const & stencilOpState ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.failOp );
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.passOp );
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.depthFailOp );
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.compareOp );
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.compareMask );
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.writeMask );
+ VULKAN_HPP_HASH_COMBINE( seed, stencilOpState.reference );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo const &
+ pipelineDepthStencilStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthTestEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthWriteEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthCompareOp );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.depthBoundsTestEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.stencilTestEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.front );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.back );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.minDepthBounds );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDepthStencilStateCreateInfo.maxDepthBounds );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState const &
+ pipelineColorBlendAttachmentState ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.blendEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.srcColorBlendFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.dstColorBlendFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.colorBlendOp );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.srcAlphaBlendFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.dstAlphaBlendFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.alphaBlendOp );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAttachmentState.colorWriteMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo const &
+ pipelineColorBlendStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.logicOpEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.logicOp );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.attachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.pAttachments );
+ for ( size_t i = 0; i < 4; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendStateCreateInfo.blendConstants[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo const & pipelineDynamicStateCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.dynamicStateCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDynamicStateCreateInfo.pDynamicStates );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & graphicsPipelineCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.stageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pStages );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pVertexInputState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pInputAssemblyState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pTessellationState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pViewportState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pRasterizationState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pMultisampleState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pDepthStencilState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pColorBlendState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.pDynamicState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.layout );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.renderPass );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.subpass );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.basePipelineHandle );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineCreateInfo.basePipelineIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV const & graphicsShaderGroupCreateInfoNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.stageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pStages );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pVertexInputState );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsShaderGroupCreateInfoNV.pTessellationState );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV const &
+ graphicsPipelineShaderGroupsCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.groupCount );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pGroups );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pipelineCount );
+ VULKAN_HPP_HASH_COMBINE( seed, graphicsPipelineShaderGroupsCreateInfoNV.pPipelines );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::XYColorEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::XYColorEXT const & xYColorEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, xYColorEXT.x );
+ VULKAN_HPP_HASH_COMBINE( seed, xYColorEXT.y );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::HdrMetadataEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::HdrMetadataEXT const & hdrMetadataEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryRed );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryGreen );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.displayPrimaryBlue );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.whitePoint );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxLuminance );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.minLuminance );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxContentLightLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, hdrMetadataEXT.maxFrameAverageLightLevel );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & headlessSurfaceCreateInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, headlessSurfaceCreateInfoEXT.flags );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_IOS_MVK )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & iOSSurfaceCreateInfoMVK ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, iOSSurfaceCreateInfoMVK.pView );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_IOS_MVK*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageBlit>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageBlit const & imageBlit ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit.srcSubresource );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit.srcOffsets[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit.dstSubresource );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, imageBlit.dstOffsets[i] );
+ }
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA const &
+ imageFormatConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.imageCreateInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.requiredFormatFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.sysmemPixelFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.colorSpaceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatConstraintsInfoFUCHSIA.pColorSpaces );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA const & imageConstraintsInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.formatConstraintsCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.pFormatConstraints );
+ VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.bufferCollectionConstraints );
+ VULKAN_HPP_HASH_COMBINE( seed, imageConstraintsInfoFUCHSIA.flags );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageCopy>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageCopy const & imageCopy ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy.srcSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy.srcOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy.dstSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy.dstOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageCopy.extent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubresourceLayout>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SubresourceLayout const & subresourceLayout ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.size );
+ VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.rowPitch );
+ VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.arrayPitch );
+ VULKAN_HPP_HASH_COMBINE( seed, subresourceLayout.depthPitch );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT const &
+ imageDrmFormatModifierExplicitCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.drmFormatModifier );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.drmFormatModifierPlaneCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierExplicitCreateInfoEXT.pPlaneLayouts );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT const &
+ imageDrmFormatModifierListCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.drmFormatModifierCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierListCreateInfoEXT.pDrmFormatModifiers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT const &
+ imageDrmFormatModifierPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageDrmFormatModifierPropertiesEXT.drmFormatModifier );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo const & imageFormatListCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.viewFormatCount );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatListCreateInfo.pViewFormats );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageFormatProperties2 const & imageFormatProperties2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageFormatProperties2.imageFormatProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier const & imageMemoryBarrier ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.dstAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.oldLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.newLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.srcQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.dstQueueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.image );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryBarrier.subresourceRange );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 const & imageMemoryRequirementsInfo2 )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageMemoryRequirementsInfo2.image );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const &
+ imagePipeSurfaceCreateInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, imagePipeSurfaceCreateInfoFUCHSIA.imagePipeHandle );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo const &
+ imagePlaneMemoryRequirementsInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imagePlaneMemoryRequirementsInfo.planeAspect );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageResolve>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageResolve const & imageResolve ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve.srcSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve.srcOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve.dstSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve.dstOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve.extent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageResolve2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageResolve2 const & imageResolve2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.srcSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.srcOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.dstSubresource );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.dstOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, imageResolve2.extent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 const &
+ imageSparseMemoryRequirementsInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSparseMemoryRequirementsInfo2.image );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo const & imageStencilUsageCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageStencilUsageCreateInfo.stencilUsage );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR const & imageSwapchainCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageSwapchainCreateInfoKHR.swapchain );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT const & imageViewASTCDecodeModeEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewASTCDecodeModeEXT.decodeMode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX const & imageViewAddressPropertiesNVX )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.deviceAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewAddressPropertiesNVX.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageViewCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & imageViewCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.image );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.viewType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.format );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.components );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewCreateInfo.subresourceRange );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX const & imageViewHandleInfoNVX ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.imageView );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.descriptorType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewHandleInfoNVX.sampler );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT const & imageViewMinLodCreateInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewMinLodCreateInfoEXT.minLod );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo const & imageViewUsageCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, imageViewUsageCreateInfo.usage );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID const &
+ importAndroidHardwareBufferInfoANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importAndroidHardwareBufferInfoANDROID.buffer );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR const & importFenceFdInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.fence );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceFdInfoKHR.fd );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR const & importFenceWin32HandleInfoKHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.fence );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.handle );
+ VULKAN_HPP_HASH_COMBINE( seed, importFenceWin32HandleInfoKHR.name );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA const &
+ importMemoryBufferCollectionFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.collection );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryBufferCollectionFUCHSIA.index );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR const & importMemoryFdInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryFdInfoKHR.fd );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT const & importMemoryHostPointerInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryHostPointerInfoEXT.pHostPointer );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR const & importMemoryWin32HandleInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.handle );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoKHR.name );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV const & importMemoryWin32HandleInfoNV )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryWin32HandleInfoNV.handle );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA const &
+ importMemoryZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importMemoryZirconHandleInfoFUCHSIA.handle );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR const & importSemaphoreFdInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreFdInfoKHR.fd );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR const &
+ importSemaphoreWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.handle );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreWin32HandleInfoKHR.name );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA const &
+ importSemaphoreZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.handleType );
+ VULKAN_HPP_HASH_COMBINE( seed, importSemaphoreZirconHandleInfoFUCHSIA.zirconHandle );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV const & indirectCommandsLayoutTokenNV )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.tokenType );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.stream );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.vertexBindingUnit );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.vertexDynamicStride );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantPipelineLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantShaderStageFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pushconstantSize );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.indirectStateFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.indexTypeCount );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pIndexTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutTokenNV.pIndexTypeValues );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const &
+ indirectCommandsLayoutCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pipelineBindPoint );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.tokenCount );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pTokens );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.streamCount );
+ VULKAN_HPP_HASH_COMBINE( seed, indirectCommandsLayoutCreateInfoNV.pStreamStrides );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL const &
+ initializePerformanceApiInfoINTEL ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, initializePerformanceApiInfoINTEL.pUserData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference const & inputAttachmentAspectReference ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.subpass );
+ VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.inputAttachmentIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, inputAttachmentAspectReference.aspectMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::InstanceCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & instanceCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.pApplicationInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.enabledLayerCount );
+ for ( size_t i = 0; i < instanceCreateInfo.enabledLayerCount; ++i )
+ {
+ for ( const char * p = instanceCreateInfo.ppEnabledLayerNames[i]; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, instanceCreateInfo.enabledExtensionCount );
+ for ( size_t i = 0; i < instanceCreateInfo.enabledExtensionCount; ++i )
+ {
+ for ( const char * p = instanceCreateInfo.ppEnabledExtensionNames[i]; *p != '\0'; ++p )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, *p );
+ }
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::LayerProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::LayerProperties const & layerProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, layerProperties.layerName[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, layerProperties.specVersion );
+ VULKAN_HPP_HASH_COMBINE( seed, layerProperties.implementationVersion );
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, layerProperties.description[i] );
+ }
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_MACOS_MVK )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & macOSSurfaceCreateInfoMVK ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, macOSSurfaceCreateInfoMVK.pView );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_MACOS_MVK*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MappedMemoryRange>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MappedMemoryRange const & mappedMemoryRange ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, mappedMemoryRange.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo const & memoryAllocateFlagsInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateFlagsInfo.deviceMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryAllocateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & memoryAllocateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.allocationSize );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryAllocateInfo.memoryTypeIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryBarrier>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryBarrier const & memoryBarrier ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryBarrier.dstAccessMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo const & memoryDedicatedAllocateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.image );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedAllocateInfo.buffer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements const & memoryDedicatedRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.prefersDedicatedAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryDedicatedRequirements.requiresDedicatedAllocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR const & memoryFdPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryFdPropertiesKHR.memoryTypeBits );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID const &
+ memoryGetAndroidHardwareBufferInfoANDROID ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetAndroidHardwareBufferInfoANDROID.memory );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR const & memoryGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetFdInfoKHR.handleType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV const & memoryGetRemoteAddressInfoNV )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetRemoteAddressInfoNV.handleType );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR const & memoryGetWin32HandleInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetWin32HandleInfoKHR.handleType );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA const &
+ memoryGetZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryGetZirconHandleInfoFUCHSIA.handleType );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryHeap>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryHeap const & memoryHeap ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryHeap.size );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryHeap.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT const & memoryHostPointerPropertiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryHostPointerPropertiesEXT.memoryTypeBits );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo const &
+ memoryOpaqueCaptureAddressAllocateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryOpaqueCaptureAddressAllocateInfo.opaqueCaptureAddress );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT const & memoryPriorityAllocateInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryPriorityAllocateInfoEXT.priority );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryRequirements>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryRequirements const & memoryRequirements ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.size );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.alignment );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements.memoryTypeBits );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryRequirements2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryRequirements2 const & memoryRequirements2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryRequirements2.memoryRequirements );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryType>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryType const & memoryType ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryType.propertyFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryType.heapIndex );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR const & memoryWin32HandlePropertiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryWin32HandlePropertiesKHR.memoryTypeBits );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA const &
+ memoryZirconHandlePropertiesFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, memoryZirconHandlePropertiesFUCHSIA.memoryTypeBits );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_METAL_EXT )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & metalSurfaceCreateInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, metalSurfaceCreateInfoEXT.pLayer );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_METAL_EXT*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT const & multiDrawIndexedInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.firstIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.indexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, multiDrawIndexedInfoEXT.vertexOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT const & multiDrawInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, multiDrawInfoEXT.firstVertex );
+ VULKAN_HPP_HASH_COMBINE( seed, multiDrawInfoEXT.vertexCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT const & multisamplePropertiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, multisamplePropertiesEXT.maxSampleLocationGridSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX const &
+ multiviewPerViewAttributesInfoNVX ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.perViewAttributes );
+ VULKAN_HPP_HASH_COMBINE( seed, multiviewPerViewAttributesInfoNVX.perViewAttributesPositionXOnly );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE const & mutableDescriptorTypeListVALVE ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeListVALVE.descriptorTypeCount );
+ VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeListVALVE.pDescriptorTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE const &
+ mutableDescriptorTypeCreateInfoVALVE ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.mutableDescriptorTypeListCount );
+ VULKAN_HPP_HASH_COMBINE( seed, mutableDescriptorTypeCreateInfoVALVE.pMutableDescriptorTypeLists );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE const & pastPresentationTimingGOOGLE )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.presentID );
+ VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.desiredPresentTime );
+ VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.actualPresentTime );
+ VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.earliestPresentTime );
+ VULKAN_HPP_HASH_COMBINE( seed, pastPresentationTimingGOOGLE.presentMargin );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const &
+ performanceConfigurationAcquireInfoINTEL ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceConfigurationAcquireInfoINTEL.type );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR const &
+ performanceCounterDescriptionKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.flags );
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.name[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.category[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterDescriptionKHR.description[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PerformanceCounterKHR const & performanceCounterKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.unit );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.scope );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.storage );
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, performanceCounterKHR.uuid[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL const & performanceMarkerInfoINTEL ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceMarkerInfoINTEL.marker );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL const & performanceOverrideInfoINTEL )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.type );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.enable );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceOverrideInfoINTEL.parameter );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR const & performanceQuerySubmitInfoKHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceQuerySubmitInfoKHR.counterPassIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL const &
+ performanceStreamMarkerInfoINTEL ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, performanceStreamMarkerInfoINTEL.marker );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures const &
+ physicalDevice16BitStorageFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storageBuffer16BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.uniformAndStorageBuffer16BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storagePushConstant16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice16BitStorageFeatures.storageInputOutput16 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT const &
+ physicalDevice4444FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.formatA4R4G4B4 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice4444FormatsFeaturesEXT.formatA4B4G4R4 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures const &
+ physicalDevice8BitStorageFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.storageBuffer8BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.uniformAndStorageBuffer8BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevice8BitStorageFeatures.storagePushConstant8 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT const &
+ physicalDeviceASTCDecodeFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceASTCDecodeFeaturesEXT.decodeModeSharedExponent );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR const &
+ physicalDeviceAccelerationStructureFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructure );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureCaptureReplay );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureIndirectBuild );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructureFeaturesKHR.accelerationStructureHostCommands );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceAccelerationStructureFeaturesKHR.descriptorBindingAccelerationStructureUpdateAfterBind );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR const &
+ physicalDeviceAccelerationStructurePropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxGeometryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxInstanceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPrimitiveCount );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceAccelerationStructurePropertiesKHR.maxPerStageDescriptorAccelerationStructures );
+ VULKAN_HPP_HASH_COMBINE(
+ seed,
+ physicalDeviceAccelerationStructurePropertiesKHR.maxPerStageDescriptorUpdateAfterBindAccelerationStructures );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceAccelerationStructurePropertiesKHR.maxDescriptorSetAccelerationStructures );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceAccelerationStructurePropertiesKHR.maxDescriptorSetUpdateAfterBindAccelerationStructures );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceAccelerationStructurePropertiesKHR.minAccelerationStructureScratchOffsetAlignment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT const &
+ physicalDeviceBlendOperationAdvancedFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedFeaturesEXT.advancedBlendCoherentOperations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT const &
+ physicalDeviceBlendOperationAdvancedPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendMaxColorAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendIndependentBlend );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendNonPremultipliedSrcColor );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendNonPremultipliedDstColor );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendCorrelatedOverlap );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBlendOperationAdvancedPropertiesEXT.advancedBlendAllOperations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT const &
+ physicalDeviceBorderColorSwizzleFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzle );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBorderColorSwizzleFeaturesEXT.borderColorSwizzleFromImage );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures const &
+ physicalDeviceBufferDeviceAddressFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddressCaptureReplay );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeatures.bufferDeviceAddressMultiDevice );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT const &
+ physicalDeviceBufferDeviceAddressFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddressCaptureReplay );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceBufferDeviceAddressFeaturesEXT.bufferDeviceAddressMultiDevice );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD const &
+ physicalDeviceCoherentMemoryFeaturesAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoherentMemoryFeaturesAMD.deviceCoherentMemory );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT const &
+ physicalDeviceColorWriteEnableFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceColorWriteEnableFeaturesEXT.colorWriteEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV const &
+ physicalDeviceComputeShaderDerivativesFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.computeDerivativeGroupQuads );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceComputeShaderDerivativesFeaturesNV.computeDerivativeGroupLinear );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT const &
+ physicalDeviceConditionalRenderingFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.conditionalRendering );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConditionalRenderingFeaturesEXT.inheritedConditionalRendering );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT const &
+ physicalDeviceConservativeRasterizationPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.primitiveOverestimationSize );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceConservativeRasterizationPropertiesEXT.maxExtraPrimitiveOverestimationSize );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceConservativeRasterizationPropertiesEXT.extraPrimitiveOverestimationSizeGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.primitiveUnderestimation );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceConservativeRasterizationPropertiesEXT.conservativePointAndLineRasterization );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceConservativeRasterizationPropertiesEXT.degenerateTrianglesRasterized );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceConservativeRasterizationPropertiesEXT.degenerateLinesRasterized );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceConservativeRasterizationPropertiesEXT.fullyCoveredFragmentShaderInputVariable );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceConservativeRasterizationPropertiesEXT.conservativeRasterizationPostDepthCoverage );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV const &
+ physicalDeviceCooperativeMatrixFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.cooperativeMatrix );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixFeaturesNV.cooperativeMatrixRobustBufferAccess );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV const &
+ physicalDeviceCooperativeMatrixPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCooperativeMatrixPropertiesNV.cooperativeMatrixSupportedStages );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV const &
+ physicalDeviceCornerSampledImageFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCornerSampledImageFeaturesNV.cornerSampledImage );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV const &
+ physicalDeviceCoverageReductionModeFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCoverageReductionModeFeaturesNV.coverageReductionMode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT const &
+ physicalDeviceCustomBorderColorFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.customBorderColors );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorFeaturesEXT.customBorderColorWithoutFormat );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT const &
+ physicalDeviceCustomBorderColorPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceCustomBorderColorPropertiesEXT.maxCustomBorderColorSamplers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &
+ physicalDeviceDedicatedAllocationImageAliasingFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDedicatedAllocationImageAliasingFeaturesNV.dedicatedAllocationImageAliasing );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT const &
+ physicalDeviceDepthClipControlFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipControlFeaturesEXT.depthClipControl );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT const &
+ physicalDeviceDepthClipEnableFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthClipEnableFeaturesEXT.depthClipEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties const &
+ physicalDeviceDepthStencilResolveProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.supportedDepthResolveModes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.supportedStencilResolveModes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.independentResolveNone );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDepthStencilResolveProperties.independentResolve );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures const &
+ physicalDeviceDescriptorIndexingFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderUniformBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderSampledImageArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderStorageBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderStorageImageArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.shaderInputAttachmentArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingFeatures.shaderUniformTexelBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingFeatures.shaderStorageTexelBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.descriptorBindingSampledImageUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageImageUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingUniformTexelBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingStorageTexelBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.descriptorBindingUpdateUnusedWhilePending );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.descriptorBindingPartiallyBound );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingFeatures.descriptorBindingVariableDescriptorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingFeatures.runtimeDescriptorArray );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties const &
+ physicalDeviceDescriptorIndexingProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingProperties.maxUpdateAfterBindDescriptorsInAllPools );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.shaderUniformBufferArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.shaderSampledImageArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.shaderStorageBufferArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.shaderStorageImageArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.shaderInputAttachmentArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.robustBufferAccessUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.quadDivergentImplicitLod );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSamplers );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindUniformBuffers );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindStorageBuffers );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindSampledImages );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindStorageImages );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxPerStageDescriptorUpdateAfterBindInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDescriptorIndexingProperties.maxPerStageUpdateAfterBindResources );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindSamplers );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindUniformBuffers );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageBuffers );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindSampledImages );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindStorageImages );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDescriptorIndexingProperties.maxDescriptorSetUpdateAfterBindInputAttachments );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &
+ physicalDeviceDeviceGeneratedCommandsFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsFeaturesNV.deviceGeneratedCommands );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &
+ physicalDeviceDeviceGeneratedCommandsPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxGraphicsShaderGroupCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectSequenceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsTokenCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsStreamCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsTokenOffset );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceDeviceGeneratedCommandsPropertiesNV.maxIndirectCommandsStreamStride );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minSequencesCountBufferOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minSequencesIndexBufferOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceDeviceGeneratedCommandsPropertiesNV.minIndirectCommandsBufferOffsetAlignment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT const &
+ physicalDeviceDeviceMemoryReportFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDeviceMemoryReportFeaturesEXT.deviceMemoryReport );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV const &
+ physicalDeviceDiagnosticsConfigFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiagnosticsConfigFeaturesNV.diagnosticsConfig );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT const &
+ physicalDeviceDiscardRectanglePropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDiscardRectanglePropertiesEXT.maxDiscardRectangles );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties const & physicalDeviceDriverProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverID );
+ for ( size_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverName[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.driverInfo[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDriverProperties.conformanceVersion );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT const & physicalDeviceDrmPropertiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.hasPrimary );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.hasRender );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.primaryMajor );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.primaryMinor );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.renderMajor );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDrmPropertiesEXT.renderMinor );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures const &
+ physicalDeviceDynamicRenderingFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceDynamicRenderingFeatures.dynamicRendering );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV const &
+ physicalDeviceExclusiveScissorFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExclusiveScissorFeaturesNV.exclusiveScissor );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT const &
+ physicalDeviceExtendedDynamicState2FeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2LogicOp );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceExtendedDynamicState2FeaturesEXT.extendedDynamicState2PatchControlPoints );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT const &
+ physicalDeviceExtendedDynamicStateFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExtendedDynamicStateFeaturesEXT.extendedDynamicState );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo const &
+ physicalDeviceExternalBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.usage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalBufferInfo.handleType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo const & physicalDeviceExternalFenceInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalFenceInfo.handleType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo const &
+ physicalDeviceExternalImageFormatInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalImageFormatInfo.handleType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT const &
+ physicalDeviceExternalMemoryHostPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryHostPropertiesEXT.minImportedHostPointerAlignment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV const &
+ physicalDeviceExternalMemoryRDMAFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalMemoryRDMAFeaturesNV.externalMemoryRDMA );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo const &
+ physicalDeviceExternalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceExternalSemaphoreInfo.handleType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 const & physicalDeviceFeatures2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFeatures2.features );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties const &
+ physicalDeviceFloatControlsProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.denormBehaviorIndependence );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.roundingModeIndependence );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderSignedZeroInfNanPreserveFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormPreserveFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderDenormFlushToZeroFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTEFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFloatControlsProperties.shaderRoundingModeRTZFloat64 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT const &
+ physicalDeviceFragmentDensityMap2FeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2FeaturesEXT.fragmentDensityMapDeferred );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT const &
+ physicalDeviceFragmentDensityMap2PropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.subsampledLoads );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentDensityMap2PropertiesEXT.subsampledCoarseReconstructionEarlyAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMap2PropertiesEXT.maxSubsampledArrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentDensityMap2PropertiesEXT.maxDescriptorSetSubsampledSamplers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT const &
+ physicalDeviceFragmentDensityMapFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMap );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMapDynamic );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentDensityMapFeaturesEXT.fragmentDensityMapNonSubsampledImages );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const &
+ physicalDeviceFragmentDensityMapOffsetFeaturesQCOM ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetFeaturesQCOM.fragmentDensityMapOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const &
+ physicalDeviceFragmentDensityMapOffsetPropertiesQCOM ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesQCOM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapOffsetPropertiesQCOM.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentDensityMapOffsetPropertiesQCOM.fragmentDensityOffsetGranularity );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT const &
+ physicalDeviceFragmentDensityMapPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.minFragmentDensityTexelSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.maxFragmentDensityTexelSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentDensityMapPropertiesEXT.fragmentDensityInvocations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesNV const &
+ physicalDeviceFragmentShaderBarycentricFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderBarycentricFeaturesNV.fragmentShaderBarycentric );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT const &
+ physicalDeviceFragmentShaderInterlockFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderSampleInterlock );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderPixelInterlock );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentShaderInterlockFeaturesEXT.fragmentShaderShadingRateInterlock );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &
+ physicalDeviceFragmentShadingRateEnumsFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.fragmentShadingRateEnums );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsFeaturesNV.supersampleFragmentShadingRates );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentShadingRateEnumsFeaturesNV.noInvocationFragmentShadingRates );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &
+ physicalDeviceFragmentShadingRateEnumsPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRateEnumsPropertiesNV.maxFragmentShadingRateInvocationCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR const &
+ physicalDeviceFragmentShadingRateFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.pipelineFragmentShadingRate );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.primitiveFragmentShadingRate );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateFeaturesKHR.attachmentFragmentShadingRate );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR const &
+ physicalDeviceFragmentShadingRateKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.sampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRateKHR.fragmentSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR const &
+ physicalDeviceFragmentShadingRatePropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.minFragmentShadingRateAttachmentTexelSize );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateAttachmentTexelSize );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateAttachmentTexelSizeAspectRatio );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.primitiveFragmentShadingRateWithMultipleViewports );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.layeredShadingRateAttachments );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateNonTrivialCombinerOps );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentSizeAspectRatio );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateCoverageSamples );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.maxFragmentShadingRateRasterizationSamples );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithShaderDepthStencilWrites );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithSampleMask );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithShaderSampleMask );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithConservativeRasterization );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithFragmentShaderInterlock );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateWithCustomSampleLocations );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceFragmentShadingRatePropertiesKHR.fragmentShadingRateStrictMultiplyCombiner );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR const &
+ physicalDeviceGlobalPriorityQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGlobalPriorityQueryFeaturesKHR.globalPriorityQuery );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties const & physicalDeviceGroupProperties )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.physicalDeviceCount );
+ for ( size_t i = 0; i < VK_MAX_DEVICE_GROUP_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.physicalDevices[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceGroupProperties.subsetAllocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures const &
+ physicalDeviceHostQueryResetFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceHostQueryResetFeatures.hostQueryReset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties const & physicalDeviceIDProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.pNext );
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceUUID[i] );
+ }
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.driverUUID[i] );
+ }
+ for ( size_t i = 0; i < VK_LUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceLUID[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceNodeMask );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIDProperties.deviceLUIDValid );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT const &
+ physicalDeviceImageDrmFormatModifierInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.drmFormatModifier );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.sharingMode );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.queueFamilyIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageDrmFormatModifierInfoEXT.pQueueFamilyIndices );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 const & physicalDeviceImageFormatInfo2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.format );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.type );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.tiling );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.usage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageFormatInfo2.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures const &
+ physicalDeviceImageRobustnessFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageRobustnessFeatures.robustImageAccess );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT const &
+ physicalDeviceImageViewImageFormatInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewImageFormatInfoEXT.imageViewType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT const &
+ physicalDeviceImageViewMinLodFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImageViewMinLodFeaturesEXT.minLod );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures const &
+ physicalDeviceImagelessFramebufferFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceImagelessFramebufferFeatures.imagelessFramebuffer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT const &
+ physicalDeviceIndexTypeUint8FeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8FeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8FeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceIndexTypeUint8FeaturesEXT.indexTypeUint8 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV const &
+ physicalDeviceInheritedViewportScissorFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInheritedViewportScissorFeaturesNV.inheritedViewportScissor2D );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures const &
+ physicalDeviceInlineUniformBlockFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockFeatures.inlineUniformBlock );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceInlineUniformBlockFeatures.descriptorBindingInlineUniformBlockUpdateAfterBind );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties const &
+ physicalDeviceInlineUniformBlockProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxInlineUniformBlockSize );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceInlineUniformBlockProperties.maxPerStageDescriptorInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceInlineUniformBlockProperties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInlineUniformBlockProperties.maxDescriptorSetInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceInlineUniformBlockProperties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI const &
+ physicalDeviceInvocationMaskFeaturesHUAWEI ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceInvocationMaskFeaturesHUAWEI.invocationMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits const & physicalDeviceLimits ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension1D );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension2D );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimension3D );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageDimensionCube );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxImageArrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelBufferElements );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxUniformBufferRange );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxStorageBufferRange );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPushConstantsSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxMemoryAllocationCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerAllocationCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.bufferImageGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sparseAddressSpaceSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxBoundDescriptorSets );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorSamplers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorUniformBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorStorageBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorSampledImages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorStorageImages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageDescriptorInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxPerStageResources );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetSamplers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetUniformBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetUniformBuffersDynamic );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageBuffersDynamic );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetSampledImages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetStorageImages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDescriptorSetInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputAttributes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputBindings );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputAttributeOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexInputBindingStride );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxVertexOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationGenerationLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationPatchSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerVertexInputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerVertexOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlPerPatchOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationControlTotalOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationEvaluationInputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTessellationEvaluationOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryShaderInvocations );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryInputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryOutputVertices );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxGeometryTotalOutputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentInputComponents );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentOutputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentDualSrcAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFragmentCombinedOutputResources );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeSharedMemorySize );
+ for ( size_t i = 0; i < 3; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupCount[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupInvocations );
+ for ( size_t i = 0; i < 3; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxComputeWorkGroupSize[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subPixelPrecisionBits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subTexelPrecisionBits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.mipmapPrecisionBits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDrawIndexedIndexValue );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxDrawIndirectCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerLodBias );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSamplerAnisotropy );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxViewports );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxViewportDimensions[i] );
+ }
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.viewportBoundsRange[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.viewportSubPixelBits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minMemoryMapAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelBufferOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minUniformBufferOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minStorageBufferOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minTexelGatherOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxTexelGatherOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.minInterpolationOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxInterpolationOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.subPixelInterpolationOffsetBits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferWidth );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferHeight );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxFramebufferLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferColorSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferDepthSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferStencilSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.framebufferNoAttachmentsSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxColorAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageColorSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageIntegerSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageDepthSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.sampledImageStencilSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.storageImageSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxSampleMaskWords );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.timestampComputeAndGraphics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.timestampPeriod );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxClipDistances );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxCullDistances );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.maxCombinedClipAndCullDistances );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.discreteQueuePriorities );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.pointSizeRange[i] );
+ }
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.lineWidthRange[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.pointSizeGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.lineWidthGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.strictLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.standardSampleLocations );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.optimalBufferCopyOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.optimalBufferCopyRowPitchAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLimits.nonCoherentAtomSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT const &
+ physicalDeviceLineRasterizationFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.rectangularLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.bresenhamLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.smoothLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.stippledRectangularLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.stippledBresenhamLines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationFeaturesEXT.stippledSmoothLines );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT const &
+ physicalDeviceLineRasterizationPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLineRasterizationPropertiesEXT.lineSubPixelPrecisionBits );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV const &
+ physicalDeviceLinearColorAttachmentFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceLinearColorAttachmentFeaturesNV.linearColorAttachment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties const &
+ physicalDeviceMaintenance3Properties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.maxPerSetDescriptors );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance3Properties.maxMemoryAllocationSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features const &
+ physicalDeviceMaintenance4Features ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Features.maintenance4 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties const &
+ physicalDeviceMaintenance4Properties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMaintenance4Properties.maxBufferSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT const &
+ physicalDeviceMemoryBudgetPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.pNext );
+ for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.heapBudget[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryBudgetPropertiesEXT.heapUsage[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT const &
+ physicalDeviceMemoryPriorityFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryPriorityFeaturesEXT.memoryPriority );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties const & physicalDeviceMemoryProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryTypeCount );
+ for ( size_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryTypes[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryHeapCount );
+ for ( size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties.memoryHeaps[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 const & physicalDeviceMemoryProperties2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMemoryProperties2.memoryProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV const &
+ physicalDeviceMeshShaderFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.taskShader );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderFeaturesNV.meshShader );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV const &
+ physicalDeviceMeshShaderPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxDrawMeshTasksCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskWorkGroupInvocations );
+ for ( size_t i = 0; i < 3; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskWorkGroupSize[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskTotalMemorySize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxTaskOutputCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshWorkGroupInvocations );
+ for ( size_t i = 0; i < 3; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshWorkGroupSize[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshTotalMemorySize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshOutputVertices );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshOutputPrimitives );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.maxMeshMultiviewViewCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.meshOutputPerVertexGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMeshShaderPropertiesNV.meshOutputPerPrimitiveGranularity );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT const &
+ physicalDeviceMultiDrawFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawFeaturesEXT.multiDraw );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT const &
+ physicalDeviceMultiDrawPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiDrawPropertiesEXT.maxMultiDrawCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures const & physicalDeviceMultiviewFeatures ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiview );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiviewGeometryShader );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewFeatures.multiviewTessellationShader );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &
+ physicalDeviceMultiviewPerViewAttributesPropertiesNVX ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewPerViewAttributesPropertiesNVX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceMultiviewPerViewAttributesPropertiesNVX.perViewPositionAllComponents );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties const &
+ physicalDeviceMultiviewProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.maxMultiviewViewCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMultiviewProperties.maxMultiviewInstanceIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &
+ physicalDeviceMutableDescriptorTypeFeaturesVALVE ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesVALVE.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesVALVE.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceMutableDescriptorTypeFeaturesVALVE.mutableDescriptorType );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT const &
+ physicalDevicePCIBusInfoPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciDomain );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciBus );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciDevice );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePCIBusInfoPropertiesEXT.pciFunction );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &
+ physicalDevicePageableDeviceLocalMemoryFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePageableDeviceLocalMemoryFeaturesEXT.pageableDeviceLocalMemory );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR const &
+ physicalDevicePerformanceQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.performanceCounterQueryPools );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryFeaturesKHR.performanceCounterMultipleQueryPools );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR const &
+ physicalDevicePerformanceQueryPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePerformanceQueryPropertiesKHR.allowCommandBufferQueryCopies );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures const &
+ physicalDevicePipelineCreationCacheControlFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineCreationCacheControlFeatures.pipelineCreationCacheControl );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &
+ physicalDevicePipelineExecutablePropertiesFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePipelineExecutablePropertiesFeaturesKHR.pipelineExecutableInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties const &
+ physicalDevicePointClippingProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePointClippingProperties.pointClippingBehavior );
+ return seed;
+ }
+ };
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR const &
+ physicalDevicePortabilitySubsetFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.constantAlphaColorBlendFactors );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.events );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageViewFormatReinterpretation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageViewFormatSwizzle );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.imageView2DOn3DImage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.multisampleArrayImage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.mutableComparisonSamplers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.pointPolygons );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.samplerMipLodBias );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.separateStencilMaskRef );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDevicePortabilitySubsetFeaturesKHR.shaderSampleRateInterpolationFunctions );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.tessellationIsolines );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.tessellationPointMode );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.triangleFans );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetFeaturesKHR.vertexAttributeAccessBeyondStride );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR const &
+ physicalDevicePortabilitySubsetPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePortabilitySubsetPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDevicePortabilitySubsetPropertiesKHR.minVertexInputBindingStrideAlignment );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR const &
+ physicalDevicePresentIdFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentIdFeaturesKHR.presentId );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR const &
+ physicalDevicePresentWaitFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePresentWaitFeaturesKHR.presentWait );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &
+ physicalDevicePrimitiveTopologyListRestartFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyListRestart );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDevicePrimitiveTopologyListRestartFeaturesEXT.primitiveTopologyPatchListRestart );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures const &
+ physicalDevicePrivateDataFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePrivateDataFeatures.privateData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties const & physicalDeviceSparseProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard2DBlockShape );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard2DMultisampleBlockShape );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyStandard3DBlockShape );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyAlignedMipSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseProperties.residencyNonResidentStrict );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties const & physicalDeviceProperties ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.apiVersion );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.driverVersion );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.vendorID );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceID );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceType );
+ for ( size_t i = 0; i < VK_MAX_PHYSICAL_DEVICE_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.deviceName[i] );
+ }
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.pipelineCacheUUID[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.limits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties.sparseProperties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 const & physicalDeviceProperties2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProperties2.properties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures const &
+ physicalDeviceProtectedMemoryFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryFeatures.protectedMemory );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties const &
+ physicalDeviceProtectedMemoryProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProtectedMemoryProperties.protectedNoFault );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT const &
+ physicalDeviceProvokingVertexFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexFeaturesEXT.provokingVertexLast );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceProvokingVertexFeaturesEXT.transformFeedbackPreservesProvokingVertex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT const &
+ physicalDeviceProvokingVertexPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceProvokingVertexPropertiesEXT.provokingVertexModePerPipeline );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceProvokingVertexPropertiesEXT.transformFeedbackPreservesTriangleFanProvokingVertex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR const &
+ physicalDevicePushDescriptorPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDevicePushDescriptorPropertiesKHR.maxPushDescriptors );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT const &
+ physicalDeviceRGBA10X6FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRGBA10X6FormatsFeaturesEXT.formatRgba10x6WithoutYCbCrSampler );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const &
+ physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.rasterizationOrderColorAttachmentAccess );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.rasterizationOrderDepthAttachmentAccess );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceRasterizationOrderAttachmentAccessFeaturesARM.rasterizationOrderStencilAttachmentAccess );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR const &
+ physicalDeviceRayQueryFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayQueryFeaturesKHR.rayQuery );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV const &
+ physicalDeviceRayTracingMotionBlurFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingMotionBlurFeaturesNV.rayTracingMotionBlur );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceRayTracingMotionBlurFeaturesNV.rayTracingMotionBlurPipelineTraceRaysIndirect );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR const &
+ physicalDeviceRayTracingPipelineFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipeline );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineShaderGroupHandleCaptureReplay );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineShaderGroupHandleCaptureReplayMixed );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTracingPipelineTraceRaysIndirect );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelineFeaturesKHR.rayTraversalPrimitiveCulling );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR const &
+ physicalDeviceRayTracingPipelinePropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayRecursionDepth );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxShaderGroupStride );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupBaseAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleCaptureReplaySize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayDispatchInvocationCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.shaderGroupHandleAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPipelinePropertiesKHR.maxRayHitAttributeSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV const &
+ physicalDeviceRayTracingPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.shaderGroupHandleSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxRecursionDepth );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxShaderGroupStride );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.shaderGroupBaseAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxGeometryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxInstanceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxTriangleCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRayTracingPropertiesNV.maxDescriptorSetAccelerationStructures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV const &
+ physicalDeviceRepresentativeFragmentTestFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRepresentativeFragmentTestFeaturesNV.representativeFragmentTest );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT const &
+ physicalDeviceRobustness2FeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.robustBufferAccess2 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.robustImageAccess2 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2FeaturesEXT.nullDescriptor );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT const &
+ physicalDeviceRobustness2PropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.robustStorageBufferAccessSizeAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceRobustness2PropertiesEXT.robustUniformBufferAccessSizeAlignment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT const &
+ physicalDeviceSampleLocationsPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationSampleCounts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.maxSampleLocationGridSize );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationCoordinateRange[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.sampleLocationSubPixelBits );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSampleLocationsPropertiesEXT.variableSampleLocations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties const &
+ physicalDeviceSamplerFilterMinmaxProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.filterMinmaxSingleComponentFormats );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerFilterMinmaxProperties.filterMinmaxImageComponentMapping );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures const &
+ physicalDeviceSamplerYcbcrConversionFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSamplerYcbcrConversionFeatures.samplerYcbcrConversion );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures const &
+ physicalDeviceScalarBlockLayoutFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceScalarBlockLayoutFeatures.scalarBlockLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures const &
+ physicalDeviceSeparateDepthStencilLayoutsFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSeparateDepthStencilLayoutsFeatures.separateDepthStencilLayouts );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT const &
+ physicalDeviceShaderAtomicFloat2FeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat16AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat32AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderBufferFloat64AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat16AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat32AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderSharedFloat64AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.shaderImageFloat32AtomicMinMax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloat2FeaturesEXT.sparseImageFloat32AtomicMinMax );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT const &
+ physicalDeviceShaderAtomicFloatFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat32Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat32AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat64Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderBufferFloat64AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat32Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat32AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat64Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderSharedFloat64AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.shaderImageFloat32AtomicAdd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicFloatFeaturesEXT.sparseImageFloat32AtomicAdd );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features const &
+ physicalDeviceShaderAtomicInt64Features ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.shaderBufferInt64Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderAtomicInt64Features.shaderSharedInt64Atomics );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR const &
+ physicalDeviceShaderClockFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.shaderSubgroupClock );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderClockFeaturesKHR.shaderDeviceClock );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD const &
+ physicalDeviceShaderCoreProperties2AMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.shaderCoreFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCoreProperties2AMD.activeComputeUnitCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD const &
+ physicalDeviceShaderCorePropertiesAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.shaderEngineCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.shaderArraysPerEngineCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.computeUnitsPerShaderArray );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.simdPerComputeUnit );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.wavefrontsPerSimd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.wavefrontSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sgprsPerSimd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.minSgprAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.maxSgprAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.sgprAllocationGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.vgprsPerSimd );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.minVgprAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.maxVgprAllocation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderCorePropertiesAMD.vgprAllocationGranularity );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures const &
+ physicalDeviceShaderDemoteToHelperInvocationFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDemoteToHelperInvocationFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderDemoteToHelperInvocationFeatures.shaderDemoteToHelperInvocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures const &
+ physicalDeviceShaderDrawParametersFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderDrawParametersFeatures.shaderDrawParameters );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features const &
+ physicalDeviceShaderFloat16Int8Features ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.shaderFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderFloat16Int8Features.shaderInt8 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &
+ physicalDeviceShaderImageAtomicInt64FeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.shaderImageInt64Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageAtomicInt64FeaturesEXT.sparseImageInt64Atomics );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV const &
+ physicalDeviceShaderImageFootprintFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderImageFootprintFeaturesNV.imageFootprint );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures const &
+ physicalDeviceShaderIntegerDotProductFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductFeatures.shaderIntegerDotProduct );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties const &
+ physicalDeviceShaderIntegerDotProductProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerDotProductProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct8BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct4x8BitPackedMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct16BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct32BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderIntegerDotProductProperties.integerDotProduct64BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating8BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed,
+ physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating8BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating16BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed,
+ physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating16BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating32BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed,
+ physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating32BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating64BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed,
+ physicalDeviceShaderIntegerDotProductProperties.integerDotProductAccumulatingSaturating64BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceShaderIntegerDotProductProperties
+ .integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &
+ physicalDeviceShaderIntegerFunctions2FeaturesINTEL ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderIntegerFunctions2FeaturesINTEL.shaderIntegerFunctions2 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV const &
+ physicalDeviceShaderSMBuiltinsFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsFeaturesNV.shaderSMBuiltins );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV const &
+ physicalDeviceShaderSMBuiltinsPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.shaderSMCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSMBuiltinsPropertiesNV.shaderWarpsPerSM );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures const &
+ physicalDeviceShaderSubgroupExtendedTypesFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupExtendedTypesFeatures.shaderSubgroupExtendedTypes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &
+ physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR.shaderSubgroupUniformControlFlow );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures const &
+ physicalDeviceShaderTerminateInvocationFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShaderTerminateInvocationFeatures.shaderTerminateInvocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV const &
+ physicalDeviceShadingRateImageFeaturesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.shadingRateImage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImageFeaturesNV.shadingRateCoarseSampleOrder );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV const &
+ physicalDeviceShadingRateImagePropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRateTexelSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRatePaletteSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceShadingRateImagePropertiesNV.shadingRateMaxCoarseSamples );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 const &
+ physicalDeviceSparseImageFormatInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.format );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.type );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.samples );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.usage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSparseImageFormatInfo2.tiling );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties const &
+ physicalDeviceSubgroupProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.subgroupSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.supportedStages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.supportedOperations );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupProperties.quadOperationsInAllStages );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures const &
+ physicalDeviceSubgroupSizeControlFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.subgroupSizeControl );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlFeatures.computeFullSubgroups );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties const &
+ physicalDeviceSubgroupSizeControlProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.minSubgroupSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.maxSubgroupSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.maxComputeWorkgroupSubgroups );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubgroupSizeControlProperties.requiredSubgroupSizeStages );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI const &
+ physicalDeviceSubpassShadingFeaturesHUAWEI ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingFeaturesHUAWEI.subpassShading );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI const &
+ physicalDeviceSubpassShadingPropertiesHUAWEI ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSubpassShadingPropertiesHUAWEI.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceSubpassShadingPropertiesHUAWEI.maxSubpassShadingWorkgroupSizeAspectRatio );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR const & physicalDeviceSurfaceInfo2KHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSurfaceInfo2KHR.surface );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features const &
+ physicalDeviceSynchronization2Features ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceSynchronization2Features.synchronization2 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT const &
+ physicalDeviceTexelBufferAlignmentFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentFeaturesEXT.texelBufferAlignment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties const &
+ physicalDeviceTexelBufferAlignmentProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTexelBufferAlignmentProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceTexelBufferAlignmentProperties.storageTexelBufferOffsetAlignmentBytes );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceTexelBufferAlignmentProperties.storageTexelBufferOffsetSingleTexelAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceTexelBufferAlignmentProperties.uniformTexelBufferOffsetAlignmentBytes );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceTexelBufferAlignmentProperties.uniformTexelBufferOffsetSingleTexelAlignment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures const &
+ physicalDeviceTextureCompressionASTCHDRFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTextureCompressionASTCHDRFeatures.textureCompressionASTC_HDR );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures const &
+ physicalDeviceTimelineSemaphoreFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreFeatures.timelineSemaphore );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties const &
+ physicalDeviceTimelineSemaphoreProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTimelineSemaphoreProperties.maxTimelineSemaphoreValueDifference );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties const & physicalDeviceToolProperties )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.pNext );
+ for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.name[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.version[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.purposes );
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.description[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_EXTENSION_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceToolProperties.layer[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT const &
+ physicalDeviceTransformFeedbackFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.transformFeedback );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackFeaturesEXT.geometryStreams );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT const &
+ physicalDeviceTransformFeedbackPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackStreams );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackStreamDataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferDataSize );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceTransformFeedbackPropertiesEXT.maxTransformFeedbackBufferDataStride );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackQueries );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackStreamsLinesTriangles );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackRasterizationStreamSelect );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceTransformFeedbackPropertiesEXT.transformFeedbackDraw );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures const &
+ physicalDeviceUniformBufferStandardLayoutFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceUniformBufferStandardLayoutFeatures.uniformBufferStandardLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures const &
+ physicalDeviceVariablePointersFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.variablePointersStorageBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVariablePointersFeatures.variablePointers );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT const &
+ physicalDeviceVertexAttributeDivisorFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateDivisor );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVertexAttributeDivisorFeaturesEXT.vertexAttributeInstanceRateZeroDivisor );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT const &
+ physicalDeviceVertexAttributeDivisorPropertiesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexAttributeDivisorPropertiesEXT.maxVertexAttribDivisor );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT const &
+ physicalDeviceVertexInputDynamicStateFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVertexInputDynamicStateFeaturesEXT.vertexInputDynamicState );
+ return seed;
+ }
+ };
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoProfileKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoProfileKHR const & videoProfileKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.videoCodecOperation );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.chromaSubsampling );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.lumaBitDepth );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfileKHR.chromaBitDepth );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoProfilesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoProfilesKHR const & videoProfilesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.profileCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoProfilesKHR.pProfiles );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR const &
+ physicalDeviceVideoFormatInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.imageUsage );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVideoFormatInfoKHR.pVideoProfiles );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features const & physicalDeviceVulkan11Features ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storageBuffer16BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.uniformAndStorageBuffer16BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storagePushConstant16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.storageInputOutput16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiview );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiviewGeometryShader );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.multiviewTessellationShader );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.variablePointersStorageBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.variablePointers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.protectedMemory );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.samplerYcbcrConversion );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Features.shaderDrawParameters );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties const &
+ physicalDeviceVulkan11Properties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.pNext );
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceUUID[i] );
+ }
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.driverUUID[i] );
+ }
+ for ( size_t i = 0; i < VK_LUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceLUID[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceNodeMask );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.deviceLUIDValid );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSupportedStages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupSupportedOperations );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.subgroupQuadOperationsInAllStages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.pointClippingBehavior );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMultiviewViewCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMultiviewInstanceIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.protectedNoFault );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxPerSetDescriptors );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan11Properties.maxMemoryAllocationSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features const & physicalDeviceVulkan12Features ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.samplerMirrorClampToEdge );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.drawIndirectCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.storageBuffer8BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.uniformAndStorageBuffer8BitAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.storagePushConstant8 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderBufferInt64Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSharedInt64Atomics );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInt8 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInputAttachmentArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayDynamicIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSampledImageArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageImageArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderInputAttachmentArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderUniformTexelBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderStorageTexelBufferArrayNonUniformIndexing );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUniformBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingSampledImageUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageImageUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingStorageBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Features.descriptorBindingUniformTexelBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Features.descriptorBindingStorageTexelBufferUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingUpdateUnusedWhilePending );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingPartiallyBound );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.descriptorBindingVariableDescriptorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.runtimeDescriptorArray );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.samplerFilterMinmax );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.scalarBlockLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.imagelessFramebuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.uniformBufferStandardLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderSubgroupExtendedTypes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.separateDepthStencilLayouts );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.hostQueryReset );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.timelineSemaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddressCaptureReplay );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.bufferDeviceAddressMultiDevice );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModel );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModelDeviceScope );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.vulkanMemoryModelAvailabilityVisibilityChains );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderOutputViewportIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.shaderOutputLayer );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Features.subgroupBroadcastDynamicId );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties const &
+ physicalDeviceVulkan12Properties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverID );
+ for ( size_t i = 0; i < VK_MAX_DRIVER_NAME_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverName[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_DRIVER_INFO_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.driverInfo[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.conformanceVersion );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.denormBehaviorIndependence );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.roundingModeIndependence );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSignedZeroInfNanPreserveFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormPreserveFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderDenormFlushToZeroFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTEFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat16 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat32 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderRoundingModeRTZFloat64 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxUpdateAfterBindDescriptorsInAllPools );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.shaderUniformBufferArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderSampledImageArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.shaderStorageBufferArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.shaderStorageImageArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.shaderInputAttachmentArrayNonUniformIndexingNative );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.robustBufferAccessUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.quadDivergentImplicitLod );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSamplers );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindUniformBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindSampledImages );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindStorageImages );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxPerStageDescriptorUpdateAfterBindInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxPerStageUpdateAfterBindResources );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindSamplers );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindUniformBuffersDynamic );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageBuffersDynamic );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindSampledImages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindStorageImages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxDescriptorSetUpdateAfterBindInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.supportedDepthResolveModes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.supportedStencilResolveModes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.independentResolveNone );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.independentResolve );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.filterMinmaxSingleComponentFormats );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.filterMinmaxImageComponentMapping );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.maxTimelineSemaphoreValueDifference );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan12Properties.framebufferIntegerColorSampleCounts );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features const & physicalDeviceVulkan13Features ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.robustImageAccess );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.inlineUniformBlock );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Features.descriptorBindingInlineUniformBlockUpdateAfterBind );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.pipelineCreationCacheControl );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.privateData );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderDemoteToHelperInvocation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderTerminateInvocation );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.subgroupSizeControl );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.computeFullSubgroups );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.synchronization2 );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.textureCompressionASTC_HDR );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderZeroInitializeWorkgroupMemory );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.dynamicRendering );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.shaderIntegerDotProduct );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Features.maintenance4 );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties const &
+ physicalDeviceVulkan13Properties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.minSubgroupSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxSubgroupSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxComputeWorkgroupSubgroups );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.requiredSubgroupSizeStages );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxInlineUniformBlockSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxPerStageDescriptorInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxDescriptorSetInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Properties.maxDescriptorSetUpdateAfterBindInlineUniformBlocks );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxInlineUniformTotalSize );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct8BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProduct4x8BitPackedMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct16BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Properties.integerDotProduct16BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct32BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Properties.integerDotProduct32BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.integerDotProduct64BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Properties.integerDotProduct64BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkan13Properties
+ .integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitSignedAccelerated );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceVulkan13Properties.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.storageTexelBufferOffsetAlignmentBytes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.storageTexelBufferOffsetSingleTexelAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.uniformTexelBufferOffsetAlignmentBytes );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.uniformTexelBufferOffsetSingleTexelAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkan13Properties.maxBufferSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures const &
+ physicalDeviceVulkanMemoryModelFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModel );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModelDeviceScope );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceVulkanMemoryModelFeatures.vulkanMemoryModelAvailabilityVisibilityChains );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &
+ physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayoutScalarBlockLayout );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout8BitAccess );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR.workgroupMemoryExplicitLayout16BitAccess );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &
+ physicalDeviceYcbcr2Plane444FormatsFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcr2Plane444FormatsFeaturesEXT.ycbcr2plane444Formats );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT const &
+ physicalDeviceYcbcrImageArraysFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceYcbcrImageArraysFeaturesEXT.ycbcrImageArrays );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const &
+ physicalDeviceZeroInitializeWorkgroupMemoryFeatures ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.pNext );
+ VULKAN_HPP_HASH_COMBINE(
+ seed, physicalDeviceZeroInitializeWorkgroupMemoryFeatures.shaderZeroInitializeWorkgroupMemory );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & pipelineCacheCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.initialDataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheCreateInfo.pInitialData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne const & pipelineCacheHeaderVersionOne )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.headerSize );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.headerVersion );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.vendorID );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.deviceID );
+ for ( size_t i = 0; i < VK_UUID_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCacheHeaderVersionOne.pipelineCacheUUID[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT const &
+ pipelineColorBlendAdvancedStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.srcPremultiplied );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.dstPremultiplied );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorBlendAdvancedStateCreateInfoEXT.blendOverlap );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT const & pipelineColorWriteCreateInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.attachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineColorWriteCreateInfoEXT.pColorWriteEnables );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD const &
+ pipelineCompilerControlCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCompilerControlCreateInfoAMD.compilerControlFlags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV const &
+ pipelineCoverageModulationStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationMode );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationTableEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.coverageModulationTableCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageModulationStateCreateInfoNV.pCoverageModulationTable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV const &
+ pipelineCoverageReductionStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageReductionStateCreateInfoNV.coverageReductionMode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV const &
+ pipelineCoverageToColorStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.coverageToColorEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCoverageToColorStateCreateInfoNV.coverageToColorLocation );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCreationFeedback>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback const & pipelineCreationFeedback ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedback.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedback.duration );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo const &
+ pipelineCreationFeedbackCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pPipelineCreationFeedback );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pipelineStageCreationFeedbackCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineCreationFeedbackCreateInfo.pPipelineStageCreationFeedbacks );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT const &
+ pipelineDiscardRectangleStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.discardRectangleMode );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.discardRectangleCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineDiscardRectangleStateCreateInfoEXT.pDiscardRectangles );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR const & pipelineExecutableInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.pipeline );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInfoKHR.executableIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR const &
+ pipelineExecutableInternalRepresentationKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.pNext );
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.name[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.description[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.isText );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.dataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutableInternalRepresentationKHR.pData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR const & pipelineExecutablePropertiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.stages );
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.name[i] );
+ }
+ for ( size_t i = 0; i < VK_MAX_DESCRIPTION_SIZE; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.description[i] );
+ }
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineExecutablePropertiesKHR.subgroupSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV const &
+ pipelineFragmentShadingRateEnumStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.shadingRateType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.shadingRate );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateEnumStateCreateInfoNV.combinerOps[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR const &
+ pipelineFragmentShadingRateStateCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.fragmentSize );
+ for ( size_t i = 0; i < 2; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineFragmentShadingRateStateCreateInfoKHR.combinerOps[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineInfoKHR const & pipelineInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineInfoKHR.pipeline );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PushConstantRange>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PushConstantRange const & pushConstantRange ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.stageFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, pushConstantRange.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & pipelineLayoutCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.setLayoutCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pSetLayouts );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pushConstantRangeCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLayoutCreateInfo.pPushConstantRanges );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR const & pipelineLibraryCreateInfoKHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.libraryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineLibraryCreateInfoKHR.pLibraries );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT const &
+ pipelineRasterizationConservativeStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationConservativeStateCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ pipelineRasterizationConservativeStateCreateInfoEXT.conservativeRasterizationMode );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ pipelineRasterizationConservativeStateCreateInfoEXT.extraPrimitiveOverestimationSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT const &
+ pipelineRasterizationDepthClipStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationDepthClipStateCreateInfoEXT.depthClipEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT const &
+ pipelineRasterizationLineStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.lineRasterizationMode );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.stippledLineEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.lineStippleFactor );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationLineStateCreateInfoEXT.lineStipplePattern );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT const &
+ pipelineRasterizationProvokingVertexStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationProvokingVertexStateCreateInfoEXT.provokingVertexMode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD const &
+ pipelineRasterizationStateRasterizationOrderAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateRasterizationOrderAMD.rasterizationOrder );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT const &
+ pipelineRasterizationStateStreamCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRasterizationStateStreamCreateInfoEXT.rasterizationStream );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo const & pipelineRenderingCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.viewMask );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.colorAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.pColorAttachmentFormats );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.depthAttachmentFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRenderingCreateInfo.stencilAttachmentFormat );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV const &
+ pipelineRepresentativeFragmentTestStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineRepresentativeFragmentTestStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed,
+ pipelineRepresentativeFragmentTestStateCreateInfoNV.representativeFragmentTestEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT const &
+ pipelineSampleLocationsStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sampleLocationsEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineSampleLocationsStateCreateInfoEXT.sampleLocationsInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo const &
+ pipelineShaderStageRequiredSubgroupSizeCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineShaderStageRequiredSubgroupSizeCreateInfo.requiredSubgroupSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo const &
+ pipelineTessellationDomainOriginStateCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineTessellationDomainOriginStateCreateInfo.domainOrigin );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT const &
+ vertexInputBindingDivisorDescriptionEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDivisorDescriptionEXT.binding );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDivisorDescriptionEXT.divisor );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT const &
+ pipelineVertexInputDivisorStateCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.vertexBindingDivisorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineVertexInputDivisorStateCreateInfoEXT.pVertexBindingDivisors );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV const &
+ pipelineViewportCoarseSampleOrderStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.sampleOrderType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.customSampleOrderCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportCoarseSampleOrderStateCreateInfoNV.pCustomSampleOrders );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT const &
+ pipelineViewportDepthClipControlCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportDepthClipControlCreateInfoEXT.negativeOneToOne );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV const &
+ pipelineViewportExclusiveScissorStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.exclusiveScissorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportExclusiveScissorStateCreateInfoNV.pExclusiveScissors );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV const & shadingRatePaletteNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, shadingRatePaletteNV.shadingRatePaletteEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, shadingRatePaletteNV.pShadingRatePaletteEntries );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV const &
+ pipelineViewportShadingRateImageStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.shadingRateImageEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.viewportCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportShadingRateImageStateCreateInfoNV.pShadingRatePalettes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ViewportSwizzleNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ViewportSwizzleNV const & viewportSwizzleNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.x );
+ VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.y );
+ VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.z );
+ VULKAN_HPP_HASH_COMBINE( seed, viewportSwizzleNV.w );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV const &
+ pipelineViewportSwizzleStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.viewportCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportSwizzleStateCreateInfoNV.pViewportSwizzles );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ViewportWScalingNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ViewportWScalingNV const & viewportWScalingNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, viewportWScalingNV.xcoeff );
+ VULKAN_HPP_HASH_COMBINE( seed, viewportWScalingNV.ycoeff );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV const &
+ pipelineViewportWScalingStateCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.viewportWScalingEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.viewportCount );
+ VULKAN_HPP_HASH_COMBINE( seed, pipelineViewportWScalingStateCreateInfoNV.pViewportWScalings );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_GGP )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP const & presentFrameTokenGGP ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, presentFrameTokenGGP.frameToken );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_GGP*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentIdKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentIdKHR const & presentIdKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.swapchainCount );
+ VULKAN_HPP_HASH_COMBINE( seed, presentIdKHR.pPresentIds );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentInfoKHR const & presentInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.waitSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pWaitSemaphores );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.swapchainCount );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pSwapchains );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pImageIndices );
+ VULKAN_HPP_HASH_COMBINE( seed, presentInfoKHR.pResults );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RectLayerKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RectLayerKHR const & rectLayerKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.offset );
+ VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.extent );
+ VULKAN_HPP_HASH_COMBINE( seed, rectLayerKHR.layer );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentRegionKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentRegionKHR const & presentRegionKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentRegionKHR.rectangleCount );
+ VULKAN_HPP_HASH_COMBINE( seed, presentRegionKHR.pRectangles );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentRegionsKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PresentRegionsKHR const & presentRegionsKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.swapchainCount );
+ VULKAN_HPP_HASH_COMBINE( seed, presentRegionsKHR.pRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE const & presentTimeGOOGLE ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentTimeGOOGLE.presentID );
+ VULKAN_HPP_HASH_COMBINE( seed, presentTimeGOOGLE.desiredPresentTime );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE const & presentTimesInfoGOOGLE ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.swapchainCount );
+ VULKAN_HPP_HASH_COMBINE( seed, presentTimesInfoGOOGLE.pTimes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & privateDataSlotCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, privateDataSlotCreateInfo.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo const & protectedSubmitInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, protectedSubmitInfo.protectedSubmit );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & queryPoolCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.queryType );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.queryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolCreateInfo.pipelineStatistics );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR const &
+ queryPoolPerformanceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.queueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.counterIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceCreateInfoKHR.pCounterIndices );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL const &
+ queryPoolPerformanceQueryCreateInfoINTEL ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queryPoolPerformanceQueryCreateInfoINTEL.performanceCountersSampling );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV const &
+ queueFamilyCheckpointProperties2NV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointProperties2NV.checkpointExecutionStageMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV const &
+ queueFamilyCheckpointPropertiesNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyCheckpointPropertiesNV.checkpointExecutionStageMask );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR const &
+ queueFamilyGlobalPriorityPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.priorityCount );
+ for ( size_t i = 0; i < VK_MAX_GLOBAL_PRIORITY_SIZE_KHR; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyGlobalPriorityPropertiesKHR.priorities[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueueFamilyProperties>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::QueueFamilyProperties const & queueFamilyProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.queueFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.queueCount );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.timestampValidBits );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties.minImageTransferGranularity );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueueFamilyProperties2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 const & queueFamilyProperties2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyProperties2.queueFamilyProperties );
+ return seed;
+ }
+ };
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR const &
+ queueFamilyQueryResultStatusProperties2KHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusProperties2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusProperties2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, queueFamilyQueryResultStatusProperties2KHR.supported );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR const &
+ rayTracingShaderGroupCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.type );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.generalShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.closestHitShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.anyHitShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.intersectionShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoKHR.pShaderGroupCaptureReplayHandle );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR const &
+ rayTracingPipelineInterfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.maxPipelineRayPayloadSize );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineInterfaceCreateInfoKHR.maxPipelineRayHitAttributeSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & rayTracingPipelineCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.stageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pStages );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.groupCount );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pGroups );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.maxPipelineRayRecursionDepth );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pLibraryInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pLibraryInterface );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.pDynamicState );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.layout );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.basePipelineHandle );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoKHR.basePipelineIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV const &
+ rayTracingShaderGroupCreateInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.type );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.generalShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.closestHitShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.anyHitShader );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingShaderGroupCreateInfoNV.intersectionShader );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & rayTracingPipelineCreateInfoNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.stageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pStages );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.groupCount );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.pGroups );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.maxRecursionDepth );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.layout );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.basePipelineHandle );
+ VULKAN_HPP_HASH_COMBINE( seed, rayTracingPipelineCreateInfoNV.basePipelineIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE const & refreshCycleDurationGOOGLE ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, refreshCycleDurationGOOGLE.refreshDuration );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo const & renderPassAttachmentBeginInfo )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.attachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassAttachmentBeginInfo.pAttachments );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassBeginInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::RenderPassBeginInfo const & renderPassBeginInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.renderPass );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.framebuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.renderArea );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.clearValueCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassBeginInfo.pClearValues );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassDescription>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SubpassDescription const & subpassDescription ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pipelineBindPoint );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.inputAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.colorAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pColorAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pResolveAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pDepthStencilAttachment );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.preserveAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription.pPreserveAttachments );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassDependency>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SubpassDependency const & subpassDependency ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcSubpass );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstSubpass );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dstAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency.dependencyFlags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & renderPassCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.attachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.subpassCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pSubpasses );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.dependencyCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo.pDependencies );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassDescription2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SubpassDescription2 const & subpassDescription2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pipelineBindPoint );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.viewMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.inputAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pInputAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.colorAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pColorAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pResolveAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pDepthStencilAttachment );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.preserveAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescription2.pPreserveAttachments );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassDependency2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SubpassDependency2 const & subpassDependency2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcSubpass );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstSubpass );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.srcAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dstAccessMask );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.dependencyFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDependency2.viewOffset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & renderPassCreateInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.attachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.subpassCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pSubpasses );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.dependencyCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pDependencies );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.correlatedViewMaskCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassCreateInfo2.pCorrelatedViewMasks );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT const &
+ renderPassFragmentDensityMapCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassFragmentDensityMapCreateInfoEXT.fragmentDensityMapAttachment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo const &
+ renderPassInputAttachmentAspectCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.aspectReferenceCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassInputAttachmentAspectCreateInfo.pAspectReferences );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo const & renderPassMultiviewCreateInfo )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.subpassCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pViewMasks );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.dependencyCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pViewOffsets );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.correlationMaskCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassMultiviewCreateInfo.pCorrelationMasks );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT const & subpassSampleLocationsEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassSampleLocationsEXT.subpassIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassSampleLocationsEXT.sampleLocationsInfo );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT const &
+ renderPassSampleLocationsBeginInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.attachmentInitialSampleLocationsCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pAttachmentInitialSampleLocations );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.postSubpassSampleLocationsCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassSampleLocationsBeginInfoEXT.pPostSubpassSampleLocations );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM const &
+ renderPassTransformBeginInfoQCOM ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderPassTransformBeginInfoQCOM.transform );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT const &
+ renderingFragmentDensityMapAttachmentInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.imageView );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentDensityMapAttachmentInfoEXT.imageLayout );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR const &
+ renderingFragmentShadingRateAttachmentInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.imageView );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.imageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingFragmentShadingRateAttachmentInfoKHR.shadingRateAttachmentTexelSize );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::RenderingInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::RenderingInfo const & renderingInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.renderArea );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.layerCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.viewMask );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.colorAttachmentCount );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pColorAttachments );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pDepthAttachment );
+ VULKAN_HPP_HASH_COMBINE( seed, renderingInfo.pStencilAttachment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ResolveImageInfo2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ResolveImageInfo2 const & resolveImageInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.srcImage );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.srcImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.dstImage );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.dstImageLayout );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.regionCount );
+ VULKAN_HPP_HASH_COMBINE( seed, resolveImageInfo2.pRegions );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT const &
+ samplerBorderColorComponentMappingCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.components );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerBorderColorComponentMappingCreateInfoEXT.srgb );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & samplerCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.magFilter );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.minFilter );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.mipmapMode );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeU );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeV );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.addressModeW );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.mipLodBias );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.anisotropyEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.maxAnisotropy );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.compareEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.compareOp );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.minLod );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.maxLod );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.borderColor );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerCreateInfo.unnormalizedCoordinates );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo const & samplerReductionModeCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerReductionModeCreateInfo.reductionMode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const &
+ samplerYcbcrConversionCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.format );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.ycbcrModel );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.ycbcrRange );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.components );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.xChromaOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.yChromaOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.chromaFilter );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionCreateInfo.forceExplicitReconstruction );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties const &
+ samplerYcbcrConversionImageFormatProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionImageFormatProperties.combinedImageSamplerDescriptorCount );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo const & samplerYcbcrConversionInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, samplerYcbcrConversionInfo.conversion );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_SCREEN_QNX )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & screenSurfaceCreateInfoQNX ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.context );
+ VULKAN_HPP_HASH_COMBINE( seed, screenSurfaceCreateInfoQNX.window );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_SCREEN_QNX*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & semaphoreCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreCreateInfo.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR const & semaphoreGetFdInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetFdInfoKHR.handleType );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR const & semaphoreGetWin32HandleInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetWin32HandleInfoKHR.handleType );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA const &
+ semaphoreGetZirconHandleInfoFUCHSIA ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreGetZirconHandleInfoFUCHSIA.handleType );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo const & semaphoreSignalInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSignalInfo.value );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo const & semaphoreSubmitInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.semaphore );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.value );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.stageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreSubmitInfo.deviceIndex );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo const & semaphoreTypeCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.semaphoreType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreTypeCreateInfo.initialValue );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo const & semaphoreWaitInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.semaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pSemaphores );
+ VULKAN_HPP_HASH_COMBINE( seed, semaphoreWaitInfo.pValues );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV const & setStateFlagsIndirectCommandNV ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, setStateFlagsIndirectCommandNV.data );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & shaderModuleCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.codeSize );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleCreateInfo.pCode );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT const &
+ shaderModuleValidationCacheCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderModuleValidationCacheCreateInfoEXT.validationCache );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD const & shaderResourceUsageAMD ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.numUsedVgprs );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.numUsedSgprs );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.ldsSizePerLocalWorkGroup );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.ldsUsageSizeInBytes );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderResourceUsageAMD.scratchMemUsageInBytes );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD const & shaderStatisticsInfoAMD ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.shaderStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.resourceUsage );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numPhysicalVgprs );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numPhysicalSgprs );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numAvailableVgprs );
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.numAvailableSgprs );
+ for ( size_t i = 0; i < 3; ++i )
+ {
+ VULKAN_HPP_HASH_COMBINE( seed, shaderStatisticsInfoAMD.computeWorkGroupSize[i] );
+ }
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR const &
+ sharedPresentSurfaceCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, sharedPresentSurfaceCapabilitiesKHR.sharedPresentSupportedUsageFlags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::SparseImageFormatProperties const & sparseImageFormatProperties ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.aspectMask );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.imageGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties.flags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 const & sparseImageFormatProperties2 )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageFormatProperties2.properties );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements const & sparseImageMemoryRequirements )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.formatProperties );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailFirstLod );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailSize );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements.imageMipTailStride );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 const & sparseImageMemoryRequirements2 ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, sparseImageMemoryRequirements2.memoryRequirements );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_GGP )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const &
+ streamDescriptorSurfaceCreateInfoGGP ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, streamDescriptorSurfaceCreateInfoGGP.streamDescriptor );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_GGP*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR const & stridedDeviceAddressRegionKHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.deviceAddress );
+ VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.stride );
+ VULKAN_HPP_HASH_COMBINE( seed, stridedDeviceAddressRegionKHR.size );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubmitInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubmitInfo const & submitInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.waitSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pWaitSemaphores );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pWaitDstStageMask );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.commandBufferCount );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pCommandBuffers );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.signalSemaphoreCount );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo.pSignalSemaphores );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubmitInfo2>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubmitInfo2 const & submitInfo2 ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.waitSemaphoreInfoCount );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pWaitSemaphoreInfos );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.commandBufferInfoCount );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pCommandBufferInfos );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.signalSemaphoreInfoCount );
+ VULKAN_HPP_HASH_COMBINE( seed, submitInfo2.pSignalSemaphoreInfos );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassBeginInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassBeginInfo const & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassBeginInfo.contents );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve const &
+ subpassDescriptionDepthStencilResolve ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.depthResolveMode );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.stencilResolveMode );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassDescriptionDepthStencilResolve.pDepthStencilResolveAttachment );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassEndInfo>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassEndInfo const & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassEndInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassEndInfo.pNext );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM const &
+ subpassFragmentDensityMapOffsetEndInfoQCOM ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.fragmentDensityOffsetCount );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassFragmentDensityMapOffsetEndInfoQCOM.pFragmentDensityOffsets );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI const &
+ subpassShadingPipelineCreateInfoHUAWEI ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.renderPass );
+ VULKAN_HPP_HASH_COMBINE( seed, subpassShadingPipelineCreateInfoHUAWEI.subpass );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT const & surfaceCapabilities2EXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.minImageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.currentExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.minImageExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.maxImageArrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedTransforms );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.currentTransform );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedCompositeAlpha );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedUsageFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2EXT.supportedSurfaceCounters );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR const & surfaceCapabilitiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.minImageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.currentExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.minImageExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.maxImageArrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedTransforms );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.currentTransform );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedCompositeAlpha );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesKHR.supportedUsageFlags );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR const & surfaceCapabilities2KHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilities2KHR.surfaceCapabilities );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT const &
+ surfaceCapabilitiesFullScreenExclusiveEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceCapabilitiesFullScreenExclusiveEXT.fullScreenExclusiveSupported );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceFormatKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR const & surfaceFormatKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFormatKHR.format );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFormatKHR.colorSpace );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR const & surfaceFormat2KHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFormat2KHR.surfaceFormat );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT const &
+ surfaceFullScreenExclusiveInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveInfoEXT.fullScreenExclusive );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT const &
+ surfaceFullScreenExclusiveWin32InfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceFullScreenExclusiveWin32InfoEXT.hmonitor );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR const & surfaceProtectedCapabilitiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, surfaceProtectedCapabilitiesKHR.supportsProtected );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT const & swapchainCounterCreateInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCounterCreateInfoEXT.surfaceCounters );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & swapchainCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.surface );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.minImageCount );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageColorSpace );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageArrayLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageUsage );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.imageSharingMode );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.queueFamilyIndexCount );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.pQueueFamilyIndices );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.preTransform );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.compositeAlpha );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.presentMode );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.clipped );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainCreateInfoKHR.oldSwapchain );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD const &
+ swapchainDisplayNativeHdrCreateInfoAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, swapchainDisplayNativeHdrCreateInfoAMD.localDimmingEnable );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD const &
+ textureLODGatherFormatPropertiesAMD ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, textureLODGatherFormatPropertiesAMD.supportsTextureGatherLODBiasAMD );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo const & timelineSemaphoreSubmitInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.waitSemaphoreValueCount );
+ VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pWaitSemaphoreValues );
+ VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.signalSemaphoreValueCount );
+ VULKAN_HPP_HASH_COMBINE( seed, timelineSemaphoreSubmitInfo.pSignalSemaphoreValues );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR const & traceRaysIndirectCommandKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.width );
+ VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.height );
+ VULKAN_HPP_HASH_COMBINE( seed, traceRaysIndirectCommandKHR.depth );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & validationCacheCreateInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.initialDataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, validationCacheCreateInfoEXT.pInitialData );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT const & validationFeaturesEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.enabledValidationFeatureCount );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pEnabledValidationFeatures );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.disabledValidationFeatureCount );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFeaturesEXT.pDisabledValidationFeatures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ValidationFlagsEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ValidationFlagsEXT const & validationFlagsEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.disabledValidationCheckCount );
+ VULKAN_HPP_HASH_COMBINE( seed, validationFlagsEXT.pDisabledValidationChecks );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT const &
+ vertexInputAttributeDescription2EXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.location );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.binding );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.format );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputAttributeDescription2EXT.offset );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT const &
+ vertexInputBindingDescription2EXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.binding );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.stride );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.inputRate );
+ VULKAN_HPP_HASH_COMBINE( seed, vertexInputBindingDescription2EXT.divisor );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_VI_NN )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & viSurfaceCreateInfoNN ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, viSurfaceCreateInfoNN.window );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_VI_NN*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const & videoPictureResourceKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.codedOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.codedExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.baseArrayLayer );
+ VULKAN_HPP_HASH_COMBINE( seed, videoPictureResourceKHR.imageViewBinding );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR const & videoReferenceSlotKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.slotIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, videoReferenceSlotKHR.pPictureResource );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR const & videoBeginCodingInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.codecQualityPreset );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.videoSession );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.videoSessionParameters );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.referenceSlotCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBeginCodingInfoKHR.pReferenceSlots );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR const & videoBindMemoryKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memoryBindIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memory );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memoryOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, videoBindMemoryKHR.memorySize );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR const & videoCapabilitiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.capabilityFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minBitstreamBufferOffsetAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minBitstreamBufferSizeAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.videoPictureExtentGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.minExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxReferencePicturesSlotsCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCapabilitiesKHR.maxReferencePicturesActiveCount );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR const & videoCodingControlInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoCodingControlInfoKHR.flags );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesEXT const & videoDecodeH264CapabilitiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.maxLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.fieldOffsetGranularity );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264CapabilitiesEXT.stdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoEXT const & videoDecodeH264DpbSlotInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264DpbSlotInfoEXT.pStdReferenceInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264MvcEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264MvcEXT const & videoDecodeH264MvcEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264MvcEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264MvcEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264MvcEXT.pStdMvc );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoEXT const & videoDecodeH264PictureInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.pStdPictureInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.slicesCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264PictureInfoEXT.pSlicesDataOffsets );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileEXT const & videoDecodeH264ProfileEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.stdProfileIdc );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264ProfileEXT.pictureLayout );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionCreateInfoEXT const &
+ videoDecodeH264SessionCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionCreateInfoEXT.pStdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT const &
+ videoDecodeH264SessionParametersAddInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.spsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.pSpsStd );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.ppsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersAddInfoEXT.pPpsStd );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoEXT const &
+ videoDecodeH264SessionParametersCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.maxSpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.maxPpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH264SessionParametersCreateInfoEXT.pParametersAddInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesEXT const & videoDecodeH265CapabilitiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.maxLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265CapabilitiesEXT.stdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoEXT const & videoDecodeH265DpbSlotInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265DpbSlotInfoEXT.pStdReferenceInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoEXT const & videoDecodeH265PictureInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.pStdPictureInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.slicesCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265PictureInfoEXT.pSlicesDataOffsets );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileEXT const & videoDecodeH265ProfileEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265ProfileEXT.stdProfileIdc );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionCreateInfoEXT const &
+ videoDecodeH265SessionCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionCreateInfoEXT.pStdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT const &
+ videoDecodeH265SessionParametersAddInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.spsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pSpsStd );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.ppsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersAddInfoEXT.pPpsStd );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoEXT const &
+ videoDecodeH265SessionParametersCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.maxSpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.maxPpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeH265SessionParametersCreateInfoEXT.pParametersAddInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR const & videoDecodeInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.codedOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.codedExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBufferOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.srcBufferRange );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.dstPictureResource );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pSetupReferenceSlot );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.referenceSlotCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoDecodeInfoKHR.pReferenceSlots );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesEXT const & videoEncodeH264CapabilitiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.inputModeFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.outputModeFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.minPictureSizeInMbs );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxPictureSizeInMbs );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.inputImageDataAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxNumL0ReferenceForP );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxNumL0ReferenceForB );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.maxNumL1Reference );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.qualityLevelCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264CapabilitiesEXT.stdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT const & videoEncodeH264DpbSlotInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.slotIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264DpbSlotInfoEXT.pStdPictureInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264EmitPictureParametersEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264EmitPictureParametersEXT const &
+ videoEncodeH264EmitPictureParametersEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.spsId );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.emitSpsEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.ppsIdEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264EmitPictureParametersEXT.ppsIdEntries );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT const & videoEncodeH264FrameSizeEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeEXT.frameISize );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeEXT.framePSize );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264FrameSizeEXT.frameBSize );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT const & videoEncodeH264NaluSliceEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pSliceHeaderStd );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.mbCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.refFinalList0EntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pRefFinalList0Entries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.refFinalList1EntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264NaluSliceEXT.pRefFinalList1Entries );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileEXT const & videoEncodeH264ProfileEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264ProfileEXT.stdProfileIdc );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & videoEncodeH264QpEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpEXT.qpI );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpEXT.qpP );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264QpEXT.qpB );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT const &
+ videoEncodeH264RateControlInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.gopFrameCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.idrPeriod );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.consecutiveBFrameCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.rateControlStructure );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlInfoEXT.temporalLayerCount );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT const &
+ videoEncodeH264RateControlLayerInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.temporalLayerId );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useInitialRcQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.initialRcQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useMinQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.minQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useMaxQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.maxQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.useMaxFrameSize );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264RateControlLayerInfoEXT.maxFrameSize );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoEXT const &
+ videoEncodeH264SessionCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoEXT.maxPictureSizeInMbs );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionCreateInfoEXT.pStdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT const &
+ videoEncodeH264SessionParametersAddInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.spsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.pSpsStd );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.ppsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersAddInfoEXT.pPpsStd );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoEXT const &
+ videoEncodeH264SessionParametersCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.maxSpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.maxPpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264SessionParametersCreateInfoEXT.pParametersAddInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH264VclFrameInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH264VclFrameInfoEXT const & videoEncodeH264VclFrameInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.refDefaultFinalList0EntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pRefDefaultFinalList0Entries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.refDefaultFinalList1EntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pRefDefaultFinalList1Entries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.naluSliceEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pNaluSliceEntries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH264VclFrameInfoEXT.pCurrentPictureInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT const & videoEncodeH265CapabilitiesEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.inputModeFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.outputModeFlags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.ctbSizes );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.inputImageDataAlignment );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxNumL0ReferenceForP );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxNumL0ReferenceForB );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxNumL1Reference );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.maxNumSubLayers );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.qualityLevelCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265CapabilitiesEXT.stdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT const & videoEncodeH265DpbSlotInfoEXT )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.slotIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265DpbSlotInfoEXT.pStdReferenceInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT const &
+ videoEncodeH265EmitPictureParametersEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.vpsId );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.spsId );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.emitVpsEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.emitSpsEnable );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.ppsIdEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265EmitPictureParametersEXT.ppsIdEntries );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT const & videoEncodeH265FrameSizeEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeEXT.frameISize );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeEXT.framePSize );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265FrameSizeEXT.frameBSize );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT const &
+ videoEncodeH265ReferenceListsEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.referenceList0EntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pReferenceList0Entries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.referenceList1EntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pReferenceList1Entries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ReferenceListsEXT.pReferenceModifications );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT const &
+ videoEncodeH265NaluSliceSegmentEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.ctbCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.pReferenceFinalLists );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265NaluSliceSegmentEXT.pSliceSegmentHeaderStd );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT const & videoEncodeH265ProfileEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265ProfileEXT.stdProfileIdc );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & videoEncodeH265QpEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpEXT.qpI );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpEXT.qpP );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265QpEXT.qpB );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT const &
+ videoEncodeH265RateControlInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.gopFrameCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.idrPeriod );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.consecutiveBFrameCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.rateControlStructure );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlInfoEXT.subLayerCount );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT const &
+ videoEncodeH265RateControlLayerInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.temporalId );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useInitialRcQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.initialRcQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useMinQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.minQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useMaxQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.maxQp );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.useMaxFrameSize );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265RateControlLayerInfoEXT.maxFrameSize );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoEXT const &
+ videoEncodeH265SessionCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoEXT.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionCreateInfoEXT.pStdExtensionVersion );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT const &
+ videoEncodeH265SessionParametersAddInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.vpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pVpsStd );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.spsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pSpsStd );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.ppsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersAddInfoEXT.pPpsStd );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT const &
+ videoEncodeH265SessionParametersCreateInfoEXT ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.maxVpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.maxSpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.maxPpsStdCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265SessionParametersCreateInfoEXT.pParametersAddInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT const & videoEncodeH265VclFrameInfoEXT ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pReferenceFinalLists );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.naluSliceSegmentEntryCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pNaluSliceSegmentEntries );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeH265VclFrameInfoEXT.pCurrentPictureInfo );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR const & videoEncodeInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.qualityLevel );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.codedExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBitstreamBuffer );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBitstreamBufferOffset );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.dstBitstreamBufferMaxRange );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.srcPictureResource );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pSetupReferenceSlot );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.referenceSlotCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.pReferenceSlots );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeInfoKHR.precedingExternallyEncodedBytes );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR const &
+ videoEncodeRateControlLayerInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.averageBitrate );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.maxBitrate );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.frameRateNumerator );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.frameRateDenominator );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.virtualBufferSizeInMs );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlLayerInfoKHR.initialVirtualBufferSizeInMs );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR const & videoEncodeRateControlInfoKHR )
+ const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.rateControlMode );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.layerCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEncodeRateControlInfoKHR.pLayerConfigs );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR const & videoEndCodingInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoEndCodingInfoKHR.flags );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR const & videoFormatPropertiesKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoFormatPropertiesKHR.format );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR const & videoGetMemoryPropertiesKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.memoryBindIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, videoGetMemoryPropertiesKHR.pMemoryRequirements );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoQueueFamilyProperties2KHR>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::VideoQueueFamilyProperties2KHR const & videoQueueFamilyProperties2KHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoQueueFamilyProperties2KHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoQueueFamilyProperties2KHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoQueueFamilyProperties2KHR.videoCodecOperations );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & videoSessionCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.queueFamilyIndex );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pVideoProfile );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.pictureFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxCodedExtent );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.referencePicturesFormat );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxReferencePicturesSlotsCount );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionCreateInfoKHR.maxReferencePicturesActiveCount );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const &
+ videoSessionParametersCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.videoSessionParametersTemplate );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersCreateInfoKHR.videoSession );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR const &
+ videoSessionParametersUpdateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, videoSessionParametersUpdateInfoKHR.updateSequenceCount );
+ return seed;
+ }
+ };
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+# if defined( VK_USE_PLATFORM_WAYLAND_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR>
+ {
+ std::size_t operator()(
+ VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & waylandSurfaceCreateInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.display );
+ VULKAN_HPP_HASH_COMBINE( seed, waylandSurfaceCreateInfoKHR.surface );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR const &
+ win32KeyedMutexAcquireReleaseInfoKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.acquireCount );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireSyncs );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireKeys );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pAcquireTimeouts );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.releaseCount );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pReleaseSyncs );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoKHR.pReleaseKeys );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV const &
+ win32KeyedMutexAcquireReleaseInfoNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.acquireCount );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireSyncs );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireKeys );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pAcquireTimeoutMilliseconds );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.releaseCount );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pReleaseSyncs );
+ VULKAN_HPP_HASH_COMBINE( seed, win32KeyedMutexAcquireReleaseInfoNV.pReleaseKeys );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & win32SurfaceCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.hinstance );
+ VULKAN_HPP_HASH_COMBINE( seed, win32SurfaceCreateInfoKHR.hwnd );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::WriteDescriptorSet>
+ {
+ std::size_t
+ operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSet const & writeDescriptorSet ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstSet );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstBinding );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.dstArrayElement );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.descriptorCount );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.descriptorType );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pImageInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pBufferInfo );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSet.pTexelBufferView );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR const &
+ writeDescriptorSetAccelerationStructureKHR ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.accelerationStructureCount );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureKHR.pAccelerationStructures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV const &
+ writeDescriptorSetAccelerationStructureNV ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.accelerationStructureCount );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetAccelerationStructureNV.pAccelerationStructures );
+ return seed;
+ }
+ };
+
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock const &
+ writeDescriptorSetInlineUniformBlock ) const VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.dataSize );
+ VULKAN_HPP_HASH_COMBINE( seed, writeDescriptorSetInlineUniformBlock.pData );
+ return seed;
+ }
+ };
+
+# if defined( VK_USE_PLATFORM_XCB_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & xcbSurfaceCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.connection );
+ VULKAN_HPP_HASH_COMBINE( seed, xcbSurfaceCreateInfoKHR.window );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_XCB_KHR*/
+
+# if defined( VK_USE_PLATFORM_XLIB_KHR )
+ template <>
+ struct hash<VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR>
+ {
+ std::size_t operator()( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & xlibSurfaceCreateInfoKHR ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ std::size_t seed = 0;
+ VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.sType );
+ VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.pNext );
+ VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.flags );
+ VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.dpy );
+ VULKAN_HPP_HASH_COMBINE( seed, xlibSurfaceCreateInfoKHR.window );
+ return seed;
+ }
+ };
+# endif /*VK_USE_PLATFORM_XLIB_KHR*/
+
+#endif // 14 <= VULKAN_HPP_CPP_VERSION
+
+} // namespace std
+#endif // VULKAN_HASH_HPP
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_ios.h b/thirdparty/vulkan/include/vulkan/vulkan_ios.h
index 6e7e6afea6..5792205439 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_ios.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_ios.h
@@ -2,7 +2,7 @@
#define VULKAN_IOS_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_macos.h b/thirdparty/vulkan/include/vulkan/vulkan_macos.h
index c49b123d07..8e197c7cff 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_macos.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_macos.h
@@ -2,7 +2,7 @@
#define VULKAN_MACOS_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_metal.h b/thirdparty/vulkan/include/vulkan/vulkan_metal.h
index 5cf4a703ac..3631f1200a 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_metal.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_metal.h
@@ -2,7 +2,7 @@
#define VULKAN_METAL_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_raii.hpp b/thirdparty/vulkan/include/vulkan/vulkan_raii.hpp
index 390e527992..a5304301d7 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_raii.hpp
+++ b/thirdparty/vulkan/include/vulkan/vulkan_raii.hpp
@@ -1,4 +1,4 @@
-// Copyright 2015-2021 The Khronos Group Inc.
+// Copyright 2015-2022 The Khronos Group Inc.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
@@ -63,13 +63,8 @@ namespace VULKAN_HPP_NAMESPACE
class InstanceDispatcher : public DispatchLoaderBase
{
public:
- InstanceDispatcher( PFN_vkGetInstanceProcAddr getProcAddr ) : vkGetInstanceProcAddr( getProcAddr ) {}
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- InstanceDispatcher() = default;
-# endif
-
- void init( VkInstance instance )
+ InstanceDispatcher( PFN_vkGetInstanceProcAddr getProcAddr, VkInstance instance )
+ : vkGetInstanceProcAddr( getProcAddr )
{
//=== VK_VERSION_1_0 ===
vkDestroyInstance = PFN_vkDestroyInstance( vkGetInstanceProcAddr( instance, "vkDestroyInstance" ) );
@@ -87,8 +82,7 @@ namespace VULKAN_HPP_NAMESPACE
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceQueueFamilyProperties" ) );
vkGetPhysicalDeviceMemoryProperties = PFN_vkGetPhysicalDeviceMemoryProperties(
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceMemoryProperties" ) );
- vkGetInstanceProcAddr = PFN_vkGetInstanceProcAddr( vkGetInstanceProcAddr( instance, "vkGetInstanceProcAddr" ) );
- vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) );
+ vkCreateDevice = PFN_vkCreateDevice( vkGetInstanceProcAddr( instance, "vkCreateDevice" ) );
vkEnumerateDeviceExtensionProperties = PFN_vkEnumerateDeviceExtensionProperties(
vkGetInstanceProcAddr( instance, "vkEnumerateDeviceExtensionProperties" ) );
vkEnumerateDeviceLayerProperties =
@@ -120,6 +114,10 @@ namespace VULKAN_HPP_NAMESPACE
vkGetPhysicalDeviceExternalSemaphoreProperties = PFN_vkGetPhysicalDeviceExternalSemaphoreProperties(
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceExternalSemaphoreProperties" ) );
+ //=== VK_VERSION_1_3 ===
+ vkGetPhysicalDeviceToolProperties = PFN_vkGetPhysicalDeviceToolProperties(
+ vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolProperties" ) );
+
//=== VK_EXT_acquire_drm_display ===
vkAcquireDrmDisplayEXT =
PFN_vkAcquireDrmDisplayEXT( vkGetInstanceProcAddr( instance, "vkAcquireDrmDisplayEXT" ) );
@@ -191,6 +189,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_tooling_info ===
vkGetPhysicalDeviceToolPropertiesEXT = PFN_vkGetPhysicalDeviceToolPropertiesEXT(
vkGetInstanceProcAddr( instance, "vkGetPhysicalDeviceToolPropertiesEXT" ) );
+ if ( !vkGetPhysicalDeviceToolProperties )
+ vkGetPhysicalDeviceToolProperties = vkGetPhysicalDeviceToolPropertiesEXT;
# if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_imagepipe_surface ===
@@ -438,6 +438,9 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkGetPhysicalDeviceExternalFenceProperties vkGetPhysicalDeviceExternalFenceProperties = 0;
PFN_vkGetPhysicalDeviceExternalSemaphoreProperties vkGetPhysicalDeviceExternalSemaphoreProperties = 0;
+ //=== VK_VERSION_1_3 ===
+ PFN_vkGetPhysicalDeviceToolProperties vkGetPhysicalDeviceToolProperties = 0;
+
//=== VK_EXT_acquire_drm_display ===
PFN_vkAcquireDrmDisplayEXT vkAcquireDrmDisplayEXT = 0;
PFN_vkGetDrmDisplayEXT vkGetDrmDisplayEXT = 0;
@@ -682,13 +685,7 @@ namespace VULKAN_HPP_NAMESPACE
class DeviceDispatcher : public DispatchLoaderBase
{
public:
- DeviceDispatcher( PFN_vkGetDeviceProcAddr getProcAddr ) : vkGetDeviceProcAddr( getProcAddr ) {}
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DeviceDispatcher() = default;
-# endif
-
- void init( VkDevice device )
+ DeviceDispatcher( PFN_vkGetDeviceProcAddr getProcAddr, VkDevice device ) : vkGetDeviceProcAddr( getProcAddr )
{
//=== VK_VERSION_1_0 ===
vkGetDeviceProcAddr = PFN_vkGetDeviceProcAddr( vkGetDeviceProcAddr( device, "vkGetDeviceProcAddr" ) );
@@ -884,6 +881,62 @@ namespace VULKAN_HPP_NAMESPACE
vkGetDeviceMemoryOpaqueCaptureAddress = PFN_vkGetDeviceMemoryOpaqueCaptureAddress(
vkGetDeviceProcAddr( device, "vkGetDeviceMemoryOpaqueCaptureAddress" ) );
+ //=== VK_VERSION_1_3 ===
+ vkCreatePrivateDataSlot =
+ PFN_vkCreatePrivateDataSlot( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlot" ) );
+ vkDestroyPrivateDataSlot =
+ PFN_vkDestroyPrivateDataSlot( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlot" ) );
+ vkSetPrivateData = PFN_vkSetPrivateData( vkGetDeviceProcAddr( device, "vkSetPrivateData" ) );
+ vkGetPrivateData = PFN_vkGetPrivateData( vkGetDeviceProcAddr( device, "vkGetPrivateData" ) );
+ vkCmdSetEvent2 = PFN_vkCmdSetEvent2( vkGetDeviceProcAddr( device, "vkCmdSetEvent2" ) );
+ vkCmdResetEvent2 = PFN_vkCmdResetEvent2( vkGetDeviceProcAddr( device, "vkCmdResetEvent2" ) );
+ vkCmdWaitEvents2 = PFN_vkCmdWaitEvents2( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2" ) );
+ vkCmdPipelineBarrier2 = PFN_vkCmdPipelineBarrier2( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2" ) );
+ vkCmdWriteTimestamp2 = PFN_vkCmdWriteTimestamp2( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2" ) );
+ vkQueueSubmit2 = PFN_vkQueueSubmit2( vkGetDeviceProcAddr( device, "vkQueueSubmit2" ) );
+ vkCmdCopyBuffer2 = PFN_vkCmdCopyBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2" ) );
+ vkCmdCopyImage2 = PFN_vkCmdCopyImage2( vkGetDeviceProcAddr( device, "vkCmdCopyImage2" ) );
+ vkCmdCopyBufferToImage2 =
+ PFN_vkCmdCopyBufferToImage2( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2" ) );
+ vkCmdCopyImageToBuffer2 =
+ PFN_vkCmdCopyImageToBuffer2( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2" ) );
+ vkCmdBlitImage2 = PFN_vkCmdBlitImage2( vkGetDeviceProcAddr( device, "vkCmdBlitImage2" ) );
+ vkCmdResolveImage2 = PFN_vkCmdResolveImage2( vkGetDeviceProcAddr( device, "vkCmdResolveImage2" ) );
+ vkCmdBeginRendering = PFN_vkCmdBeginRendering( vkGetDeviceProcAddr( device, "vkCmdBeginRendering" ) );
+ vkCmdEndRendering = PFN_vkCmdEndRendering( vkGetDeviceProcAddr( device, "vkCmdEndRendering" ) );
+ vkCmdSetCullMode = PFN_vkCmdSetCullMode( vkGetDeviceProcAddr( device, "vkCmdSetCullMode" ) );
+ vkCmdSetFrontFace = PFN_vkCmdSetFrontFace( vkGetDeviceProcAddr( device, "vkCmdSetFrontFace" ) );
+ vkCmdSetPrimitiveTopology =
+ PFN_vkCmdSetPrimitiveTopology( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopology" ) );
+ vkCmdSetViewportWithCount =
+ PFN_vkCmdSetViewportWithCount( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCount" ) );
+ vkCmdSetScissorWithCount =
+ PFN_vkCmdSetScissorWithCount( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCount" ) );
+ vkCmdBindVertexBuffers2 =
+ PFN_vkCmdBindVertexBuffers2( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2" ) );
+ vkCmdSetDepthTestEnable =
+ PFN_vkCmdSetDepthTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnable" ) );
+ vkCmdSetDepthWriteEnable =
+ PFN_vkCmdSetDepthWriteEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnable" ) );
+ vkCmdSetDepthCompareOp = PFN_vkCmdSetDepthCompareOp( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOp" ) );
+ vkCmdSetDepthBoundsTestEnable =
+ PFN_vkCmdSetDepthBoundsTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnable" ) );
+ vkCmdSetStencilTestEnable =
+ PFN_vkCmdSetStencilTestEnable( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnable" ) );
+ vkCmdSetStencilOp = PFN_vkCmdSetStencilOp( vkGetDeviceProcAddr( device, "vkCmdSetStencilOp" ) );
+ vkCmdSetRasterizerDiscardEnable =
+ PFN_vkCmdSetRasterizerDiscardEnable( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnable" ) );
+ vkCmdSetDepthBiasEnable =
+ PFN_vkCmdSetDepthBiasEnable( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnable" ) );
+ vkCmdSetPrimitiveRestartEnable =
+ PFN_vkCmdSetPrimitiveRestartEnable( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnable" ) );
+ vkGetDeviceBufferMemoryRequirements = PFN_vkGetDeviceBufferMemoryRequirements(
+ vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirements" ) );
+ vkGetDeviceImageMemoryRequirements =
+ PFN_vkGetDeviceImageMemoryRequirements( vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirements" ) );
+ vkGetDeviceImageSparseMemoryRequirements = PFN_vkGetDeviceImageSparseMemoryRequirements(
+ vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirements" ) );
+
//=== VK_AMD_buffer_marker ===
vkCmdWriteBufferMarkerAMD =
PFN_vkCmdWriteBufferMarkerAMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarkerAMD" ) );
@@ -976,38 +1029,68 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkGetSwapchainCounterEXT( vkGetDeviceProcAddr( device, "vkGetSwapchainCounterEXT" ) );
//=== VK_EXT_extended_dynamic_state ===
- vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) );
+ vkCmdSetCullModeEXT = PFN_vkCmdSetCullModeEXT( vkGetDeviceProcAddr( device, "vkCmdSetCullModeEXT" ) );
+ if ( !vkCmdSetCullMode )
+ vkCmdSetCullMode = vkCmdSetCullModeEXT;
vkCmdSetFrontFaceEXT = PFN_vkCmdSetFrontFaceEXT( vkGetDeviceProcAddr( device, "vkCmdSetFrontFaceEXT" ) );
+ if ( !vkCmdSetFrontFace )
+ vkCmdSetFrontFace = vkCmdSetFrontFaceEXT;
vkCmdSetPrimitiveTopologyEXT =
PFN_vkCmdSetPrimitiveTopologyEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveTopologyEXT" ) );
+ if ( !vkCmdSetPrimitiveTopology )
+ vkCmdSetPrimitiveTopology = vkCmdSetPrimitiveTopologyEXT;
vkCmdSetViewportWithCountEXT =
PFN_vkCmdSetViewportWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetViewportWithCountEXT" ) );
+ if ( !vkCmdSetViewportWithCount )
+ vkCmdSetViewportWithCount = vkCmdSetViewportWithCountEXT;
vkCmdSetScissorWithCountEXT =
PFN_vkCmdSetScissorWithCountEXT( vkGetDeviceProcAddr( device, "vkCmdSetScissorWithCountEXT" ) );
+ if ( !vkCmdSetScissorWithCount )
+ vkCmdSetScissorWithCount = vkCmdSetScissorWithCountEXT;
vkCmdBindVertexBuffers2EXT =
PFN_vkCmdBindVertexBuffers2EXT( vkGetDeviceProcAddr( device, "vkCmdBindVertexBuffers2EXT" ) );
+ if ( !vkCmdBindVertexBuffers2 )
+ vkCmdBindVertexBuffers2 = vkCmdBindVertexBuffers2EXT;
vkCmdSetDepthTestEnableEXT =
PFN_vkCmdSetDepthTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthTestEnableEXT" ) );
+ if ( !vkCmdSetDepthTestEnable )
+ vkCmdSetDepthTestEnable = vkCmdSetDepthTestEnableEXT;
vkCmdSetDepthWriteEnableEXT =
PFN_vkCmdSetDepthWriteEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthWriteEnableEXT" ) );
+ if ( !vkCmdSetDepthWriteEnable )
+ vkCmdSetDepthWriteEnable = vkCmdSetDepthWriteEnableEXT;
vkCmdSetDepthCompareOpEXT =
PFN_vkCmdSetDepthCompareOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthCompareOpEXT" ) );
+ if ( !vkCmdSetDepthCompareOp )
+ vkCmdSetDepthCompareOp = vkCmdSetDepthCompareOpEXT;
vkCmdSetDepthBoundsTestEnableEXT =
PFN_vkCmdSetDepthBoundsTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBoundsTestEnableEXT" ) );
+ if ( !vkCmdSetDepthBoundsTestEnable )
+ vkCmdSetDepthBoundsTestEnable = vkCmdSetDepthBoundsTestEnableEXT;
vkCmdSetStencilTestEnableEXT =
PFN_vkCmdSetStencilTestEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilTestEnableEXT" ) );
+ if ( !vkCmdSetStencilTestEnable )
+ vkCmdSetStencilTestEnable = vkCmdSetStencilTestEnableEXT;
vkCmdSetStencilOpEXT = PFN_vkCmdSetStencilOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetStencilOpEXT" ) );
+ if ( !vkCmdSetStencilOp )
+ vkCmdSetStencilOp = vkCmdSetStencilOpEXT;
//=== VK_EXT_extended_dynamic_state2 ===
vkCmdSetPatchControlPointsEXT =
PFN_vkCmdSetPatchControlPointsEXT( vkGetDeviceProcAddr( device, "vkCmdSetPatchControlPointsEXT" ) );
vkCmdSetRasterizerDiscardEnableEXT =
PFN_vkCmdSetRasterizerDiscardEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetRasterizerDiscardEnableEXT" ) );
+ if ( !vkCmdSetRasterizerDiscardEnable )
+ vkCmdSetRasterizerDiscardEnable = vkCmdSetRasterizerDiscardEnableEXT;
vkCmdSetDepthBiasEnableEXT =
PFN_vkCmdSetDepthBiasEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetDepthBiasEnableEXT" ) );
+ if ( !vkCmdSetDepthBiasEnable )
+ vkCmdSetDepthBiasEnable = vkCmdSetDepthBiasEnableEXT;
vkCmdSetLogicOpEXT = PFN_vkCmdSetLogicOpEXT( vkGetDeviceProcAddr( device, "vkCmdSetLogicOpEXT" ) );
vkCmdSetPrimitiveRestartEnableEXT =
PFN_vkCmdSetPrimitiveRestartEnableEXT( vkGetDeviceProcAddr( device, "vkCmdSetPrimitiveRestartEnableEXT" ) );
+ if ( !vkCmdSetPrimitiveRestartEnable )
+ vkCmdSetPrimitiveRestartEnable = vkCmdSetPrimitiveRestartEnableEXT;
//=== VK_EXT_external_memory_host ===
vkGetMemoryHostPointerPropertiesEXT = PFN_vkGetMemoryHostPointerPropertiesEXT(
@@ -1043,13 +1126,25 @@ namespace VULKAN_HPP_NAMESPACE
vkCmdDrawMultiIndexedEXT =
PFN_vkCmdDrawMultiIndexedEXT( vkGetDeviceProcAddr( device, "vkCmdDrawMultiIndexedEXT" ) );
+ //=== VK_EXT_pageable_device_local_memory ===
+ vkSetDeviceMemoryPriorityEXT =
+ PFN_vkSetDeviceMemoryPriorityEXT( vkGetDeviceProcAddr( device, "vkSetDeviceMemoryPriorityEXT" ) );
+
//=== VK_EXT_private_data ===
vkCreatePrivateDataSlotEXT =
PFN_vkCreatePrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkCreatePrivateDataSlotEXT" ) );
+ if ( !vkCreatePrivateDataSlot )
+ vkCreatePrivateDataSlot = vkCreatePrivateDataSlotEXT;
vkDestroyPrivateDataSlotEXT =
PFN_vkDestroyPrivateDataSlotEXT( vkGetDeviceProcAddr( device, "vkDestroyPrivateDataSlotEXT" ) );
+ if ( !vkDestroyPrivateDataSlot )
+ vkDestroyPrivateDataSlot = vkDestroyPrivateDataSlotEXT;
vkSetPrivateDataEXT = PFN_vkSetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkSetPrivateDataEXT" ) );
+ if ( !vkSetPrivateData )
+ vkSetPrivateData = vkSetPrivateDataEXT;
vkGetPrivateDataEXT = PFN_vkGetPrivateDataEXT( vkGetDeviceProcAddr( device, "vkGetPrivateDataEXT" ) );
+ if ( !vkGetPrivateData )
+ vkGetPrivateData = vkGetPrivateDataEXT;
//=== VK_EXT_sample_locations ===
vkCmdSetSampleLocationsEXT =
@@ -1083,6 +1178,20 @@ namespace VULKAN_HPP_NAMESPACE
vkCmdSetVertexInputEXT = PFN_vkCmdSetVertexInputEXT( vkGetDeviceProcAddr( device, "vkCmdSetVertexInputEXT" ) );
# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ vkCreateBufferCollectionFUCHSIA =
+ PFN_vkCreateBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkCreateBufferCollectionFUCHSIA" ) );
+ vkSetBufferCollectionImageConstraintsFUCHSIA = PFN_vkSetBufferCollectionImageConstraintsFUCHSIA(
+ vkGetDeviceProcAddr( device, "vkSetBufferCollectionImageConstraintsFUCHSIA" ) );
+ vkSetBufferCollectionBufferConstraintsFUCHSIA = PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ vkGetDeviceProcAddr( device, "vkSetBufferCollectionBufferConstraintsFUCHSIA" ) );
+ vkDestroyBufferCollectionFUCHSIA =
+ PFN_vkDestroyBufferCollectionFUCHSIA( vkGetDeviceProcAddr( device, "vkDestroyBufferCollectionFUCHSIA" ) );
+ vkGetBufferCollectionPropertiesFUCHSIA = PFN_vkGetBufferCollectionPropertiesFUCHSIA(
+ vkGetDeviceProcAddr( device, "vkGetBufferCollectionPropertiesFUCHSIA" ) );
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_external_memory ===
vkGetMemoryZirconHandleFUCHSIA =
PFN_vkGetMemoryZirconHandleFUCHSIA( vkGetDeviceProcAddr( device, "vkGetMemoryZirconHandleFUCHSIA" ) );
@@ -1192,13 +1301,25 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
vkCmdCopyBuffer2KHR = PFN_vkCmdCopyBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBuffer2KHR" ) );
- vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) );
+ if ( !vkCmdCopyBuffer2 )
+ vkCmdCopyBuffer2 = vkCmdCopyBuffer2KHR;
+ vkCmdCopyImage2KHR = PFN_vkCmdCopyImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImage2KHR" ) );
+ if ( !vkCmdCopyImage2 )
+ vkCmdCopyImage2 = vkCmdCopyImage2KHR;
vkCmdCopyBufferToImage2KHR =
PFN_vkCmdCopyBufferToImage2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyBufferToImage2KHR" ) );
+ if ( !vkCmdCopyBufferToImage2 )
+ vkCmdCopyBufferToImage2 = vkCmdCopyBufferToImage2KHR;
vkCmdCopyImageToBuffer2KHR =
PFN_vkCmdCopyImageToBuffer2KHR( vkGetDeviceProcAddr( device, "vkCmdCopyImageToBuffer2KHR" ) );
- vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) );
+ if ( !vkCmdCopyImageToBuffer2 )
+ vkCmdCopyImageToBuffer2 = vkCmdCopyImageToBuffer2KHR;
+ vkCmdBlitImage2KHR = PFN_vkCmdBlitImage2KHR( vkGetDeviceProcAddr( device, "vkCmdBlitImage2KHR" ) );
+ if ( !vkCmdBlitImage2 )
+ vkCmdBlitImage2 = vkCmdBlitImage2KHR;
vkCmdResolveImage2KHR = PFN_vkCmdResolveImage2KHR( vkGetDeviceProcAddr( device, "vkCmdResolveImage2KHR" ) );
+ if ( !vkCmdResolveImage2 )
+ vkCmdResolveImage2 = vkCmdResolveImage2KHR;
//=== VK_KHR_create_renderpass2 ===
vkCreateRenderPass2KHR = PFN_vkCreateRenderPass2KHR( vkGetDeviceProcAddr( device, "vkCreateRenderPass2KHR" ) );
@@ -1274,6 +1395,14 @@ namespace VULKAN_HPP_NAMESPACE
if ( !vkCmdDrawIndexedIndirectCount )
vkCmdDrawIndexedIndirectCount = vkCmdDrawIndexedIndirectCountKHR;
+ //=== VK_KHR_dynamic_rendering ===
+ vkCmdBeginRenderingKHR = PFN_vkCmdBeginRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdBeginRenderingKHR" ) );
+ if ( !vkCmdBeginRendering )
+ vkCmdBeginRendering = vkCmdBeginRenderingKHR;
+ vkCmdEndRenderingKHR = PFN_vkCmdEndRenderingKHR( vkGetDeviceProcAddr( device, "vkCmdEndRenderingKHR" ) );
+ if ( !vkCmdEndRendering )
+ vkCmdEndRendering = vkCmdEndRenderingKHR;
+
//=== VK_KHR_external_fence_fd ===
vkImportFenceFdKHR = PFN_vkImportFenceFdKHR( vkGetDeviceProcAddr( device, "vkImportFenceFdKHR" ) );
vkGetFenceFdKHR = PFN_vkGetFenceFdKHR( vkGetDeviceProcAddr( device, "vkGetFenceFdKHR" ) );
@@ -1340,6 +1469,20 @@ namespace VULKAN_HPP_NAMESPACE
if ( !vkGetDescriptorSetLayoutSupport )
vkGetDescriptorSetLayoutSupport = vkGetDescriptorSetLayoutSupportKHR;
+ //=== VK_KHR_maintenance4 ===
+ vkGetDeviceBufferMemoryRequirementsKHR = PFN_vkGetDeviceBufferMemoryRequirementsKHR(
+ vkGetDeviceProcAddr( device, "vkGetDeviceBufferMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceBufferMemoryRequirements )
+ vkGetDeviceBufferMemoryRequirements = vkGetDeviceBufferMemoryRequirementsKHR;
+ vkGetDeviceImageMemoryRequirementsKHR = PFN_vkGetDeviceImageMemoryRequirementsKHR(
+ vkGetDeviceProcAddr( device, "vkGetDeviceImageMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceImageMemoryRequirements )
+ vkGetDeviceImageMemoryRequirements = vkGetDeviceImageMemoryRequirementsKHR;
+ vkGetDeviceImageSparseMemoryRequirementsKHR = PFN_vkGetDeviceImageSparseMemoryRequirementsKHR(
+ vkGetDeviceProcAddr( device, "vkGetDeviceImageSparseMemoryRequirementsKHR" ) );
+ if ( !vkGetDeviceImageSparseMemoryRequirements )
+ vkGetDeviceImageSparseMemoryRequirements = vkGetDeviceImageSparseMemoryRequirementsKHR;
+
//=== VK_KHR_performance_query ===
vkAcquireProfilingLockKHR =
PFN_vkAcquireProfilingLockKHR( vkGetDeviceProcAddr( device, "vkAcquireProfilingLockKHR" ) );
@@ -1399,14 +1542,26 @@ namespace VULKAN_HPP_NAMESPACE
vkQueuePresentKHR = PFN_vkQueuePresentKHR( vkGetDeviceProcAddr( device, "vkQueuePresentKHR" ) );
//=== VK_KHR_synchronization2 ===
- vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) );
+ vkCmdSetEvent2KHR = PFN_vkCmdSetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdSetEvent2KHR" ) );
+ if ( !vkCmdSetEvent2 )
+ vkCmdSetEvent2 = vkCmdSetEvent2KHR;
vkCmdResetEvent2KHR = PFN_vkCmdResetEvent2KHR( vkGetDeviceProcAddr( device, "vkCmdResetEvent2KHR" ) );
+ if ( !vkCmdResetEvent2 )
+ vkCmdResetEvent2 = vkCmdResetEvent2KHR;
vkCmdWaitEvents2KHR = PFN_vkCmdWaitEvents2KHR( vkGetDeviceProcAddr( device, "vkCmdWaitEvents2KHR" ) );
+ if ( !vkCmdWaitEvents2 )
+ vkCmdWaitEvents2 = vkCmdWaitEvents2KHR;
vkCmdPipelineBarrier2KHR =
PFN_vkCmdPipelineBarrier2KHR( vkGetDeviceProcAddr( device, "vkCmdPipelineBarrier2KHR" ) );
+ if ( !vkCmdPipelineBarrier2 )
+ vkCmdPipelineBarrier2 = vkCmdPipelineBarrier2KHR;
vkCmdWriteTimestamp2KHR =
PFN_vkCmdWriteTimestamp2KHR( vkGetDeviceProcAddr( device, "vkCmdWriteTimestamp2KHR" ) );
+ if ( !vkCmdWriteTimestamp2 )
+ vkCmdWriteTimestamp2 = vkCmdWriteTimestamp2KHR;
vkQueueSubmit2KHR = PFN_vkQueueSubmit2KHR( vkGetDeviceProcAddr( device, "vkQueueSubmit2KHR" ) );
+ if ( !vkQueueSubmit2 )
+ vkQueueSubmit2 = vkQueueSubmit2KHR;
vkCmdWriteBufferMarker2AMD =
PFN_vkCmdWriteBufferMarker2AMD( vkGetDeviceProcAddr( device, "vkCmdWriteBufferMarker2AMD" ) );
vkGetQueueCheckpointData2NV =
@@ -1710,6 +1865,44 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkGetBufferOpaqueCaptureAddress vkGetBufferOpaqueCaptureAddress = 0;
PFN_vkGetDeviceMemoryOpaqueCaptureAddress vkGetDeviceMemoryOpaqueCaptureAddress = 0;
+ //=== VK_VERSION_1_3 ===
+ PFN_vkCreatePrivateDataSlot vkCreatePrivateDataSlot = 0;
+ PFN_vkDestroyPrivateDataSlot vkDestroyPrivateDataSlot = 0;
+ PFN_vkSetPrivateData vkSetPrivateData = 0;
+ PFN_vkGetPrivateData vkGetPrivateData = 0;
+ PFN_vkCmdSetEvent2 vkCmdSetEvent2 = 0;
+ PFN_vkCmdResetEvent2 vkCmdResetEvent2 = 0;
+ PFN_vkCmdWaitEvents2 vkCmdWaitEvents2 = 0;
+ PFN_vkCmdPipelineBarrier2 vkCmdPipelineBarrier2 = 0;
+ PFN_vkCmdWriteTimestamp2 vkCmdWriteTimestamp2 = 0;
+ PFN_vkQueueSubmit2 vkQueueSubmit2 = 0;
+ PFN_vkCmdCopyBuffer2 vkCmdCopyBuffer2 = 0;
+ PFN_vkCmdCopyImage2 vkCmdCopyImage2 = 0;
+ PFN_vkCmdCopyBufferToImage2 vkCmdCopyBufferToImage2 = 0;
+ PFN_vkCmdCopyImageToBuffer2 vkCmdCopyImageToBuffer2 = 0;
+ PFN_vkCmdBlitImage2 vkCmdBlitImage2 = 0;
+ PFN_vkCmdResolveImage2 vkCmdResolveImage2 = 0;
+ PFN_vkCmdBeginRendering vkCmdBeginRendering = 0;
+ PFN_vkCmdEndRendering vkCmdEndRendering = 0;
+ PFN_vkCmdSetCullMode vkCmdSetCullMode = 0;
+ PFN_vkCmdSetFrontFace vkCmdSetFrontFace = 0;
+ PFN_vkCmdSetPrimitiveTopology vkCmdSetPrimitiveTopology = 0;
+ PFN_vkCmdSetViewportWithCount vkCmdSetViewportWithCount = 0;
+ PFN_vkCmdSetScissorWithCount vkCmdSetScissorWithCount = 0;
+ PFN_vkCmdBindVertexBuffers2 vkCmdBindVertexBuffers2 = 0;
+ PFN_vkCmdSetDepthTestEnable vkCmdSetDepthTestEnable = 0;
+ PFN_vkCmdSetDepthWriteEnable vkCmdSetDepthWriteEnable = 0;
+ PFN_vkCmdSetDepthCompareOp vkCmdSetDepthCompareOp = 0;
+ PFN_vkCmdSetDepthBoundsTestEnable vkCmdSetDepthBoundsTestEnable = 0;
+ PFN_vkCmdSetStencilTestEnable vkCmdSetStencilTestEnable = 0;
+ PFN_vkCmdSetStencilOp vkCmdSetStencilOp = 0;
+ PFN_vkCmdSetRasterizerDiscardEnable vkCmdSetRasterizerDiscardEnable = 0;
+ PFN_vkCmdSetDepthBiasEnable vkCmdSetDepthBiasEnable = 0;
+ PFN_vkCmdSetPrimitiveRestartEnable vkCmdSetPrimitiveRestartEnable = 0;
+ PFN_vkGetDeviceBufferMemoryRequirements vkGetDeviceBufferMemoryRequirements = 0;
+ PFN_vkGetDeviceImageMemoryRequirements vkGetDeviceImageMemoryRequirements = 0;
+ PFN_vkGetDeviceImageSparseMemoryRequirements vkGetDeviceImageSparseMemoryRequirements = 0;
+
//=== VK_AMD_buffer_marker ===
PFN_vkCmdWriteBufferMarkerAMD vkCmdWriteBufferMarkerAMD = 0;
@@ -1822,6 +2015,9 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdDrawMultiEXT vkCmdDrawMultiEXT = 0;
PFN_vkCmdDrawMultiIndexedEXT vkCmdDrawMultiIndexedEXT = 0;
+ //=== VK_EXT_pageable_device_local_memory ===
+ PFN_vkSetDeviceMemoryPriorityEXT vkSetDeviceMemoryPriorityEXT = 0;
+
//=== VK_EXT_private_data ===
PFN_vkCreatePrivateDataSlotEXT vkCreatePrivateDataSlotEXT = 0;
PFN_vkDestroyPrivateDataSlotEXT vkDestroyPrivateDataSlotEXT = 0;
@@ -1849,6 +2045,21 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdSetVertexInputEXT vkCmdSetVertexInputEXT = 0;
# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ PFN_vkCreateBufferCollectionFUCHSIA vkCreateBufferCollectionFUCHSIA = 0;
+ PFN_vkSetBufferCollectionImageConstraintsFUCHSIA vkSetBufferCollectionImageConstraintsFUCHSIA = 0;
+ PFN_vkSetBufferCollectionBufferConstraintsFUCHSIA vkSetBufferCollectionBufferConstraintsFUCHSIA = 0;
+ PFN_vkDestroyBufferCollectionFUCHSIA vkDestroyBufferCollectionFUCHSIA = 0;
+ PFN_vkGetBufferCollectionPropertiesFUCHSIA vkGetBufferCollectionPropertiesFUCHSIA = 0;
+# else
+ PFN_dummy vkCreateBufferCollectionFUCHSIA_placeholder = 0;
+ PFN_dummy vkSetBufferCollectionImageConstraintsFUCHSIA_placeholder = 0;
+ PFN_dummy vkSetBufferCollectionBufferConstraintsFUCHSIA_placeholder = 0;
+ PFN_dummy vkDestroyBufferCollectionFUCHSIA_placeholder = 0;
+ PFN_dummy vkGetBufferCollectionPropertiesFUCHSIA_placeholder = 0;
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_external_memory ===
PFN_vkGetMemoryZirconHandleFUCHSIA vkGetMemoryZirconHandleFUCHSIA = 0;
PFN_vkGetMemoryZirconHandlePropertiesFUCHSIA vkGetMemoryZirconHandlePropertiesFUCHSIA = 0;
@@ -1957,6 +2168,10 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdDrawIndirectCountKHR vkCmdDrawIndirectCountKHR = 0;
PFN_vkCmdDrawIndexedIndirectCountKHR vkCmdDrawIndexedIndirectCountKHR = 0;
+ //=== VK_KHR_dynamic_rendering ===
+ PFN_vkCmdBeginRenderingKHR vkCmdBeginRenderingKHR = 0;
+ PFN_vkCmdEndRenderingKHR vkCmdEndRenderingKHR = 0;
+
//=== VK_KHR_external_fence_fd ===
PFN_vkImportFenceFdKHR vkImportFenceFdKHR = 0;
PFN_vkGetFenceFdKHR vkGetFenceFdKHR = 0;
@@ -2010,6 +2225,11 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_maintenance3 ===
PFN_vkGetDescriptorSetLayoutSupportKHR vkGetDescriptorSetLayoutSupportKHR = 0;
+ //=== VK_KHR_maintenance4 ===
+ PFN_vkGetDeviceBufferMemoryRequirementsKHR vkGetDeviceBufferMemoryRequirementsKHR = 0;
+ PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR = 0;
+ PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR = 0;
+
//=== VK_KHR_performance_query ===
PFN_vkAcquireProfilingLockKHR vkAcquireProfilingLockKHR = 0;
PFN_vkReleaseProfilingLockKHR vkReleaseProfilingLockKHR = 0;
@@ -2169,6 +2389,93 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkCmdSetCoarseSampleOrderNV vkCmdSetCoarseSampleOrderNV = 0;
};
+ //========================================
+ //=== RAII HANDLE forward declarations ===
+ //========================================
+
+ //=== VK_VERSION_1_0 ===
+ class Instance;
+ class PhysicalDevice;
+ class Device;
+ class Queue;
+ class DeviceMemory;
+ class Fence;
+ class Semaphore;
+ class Event;
+ class QueryPool;
+ class Buffer;
+ class BufferView;
+ class Image;
+ class ImageView;
+ class ShaderModule;
+ class PipelineCache;
+ class Pipeline;
+ class PipelineLayout;
+ class Sampler;
+ class DescriptorPool;
+ class DescriptorSet;
+ class DescriptorSetLayout;
+ class Framebuffer;
+ class RenderPass;
+ class CommandPool;
+ class CommandBuffer;
+
+ //=== VK_VERSION_1_1 ===
+ class SamplerYcbcrConversion;
+ class DescriptorUpdateTemplate;
+
+ //=== VK_VERSION_1_3 ===
+ class PrivateDataSlot;
+
+ //=== VK_KHR_surface ===
+ class SurfaceKHR;
+
+ //=== VK_KHR_swapchain ===
+ class SwapchainKHR;
+
+ //=== VK_KHR_display ===
+ class DisplayKHR;
+ class DisplayModeKHR;
+
+ //=== VK_EXT_debug_report ===
+ class DebugReportCallbackEXT;
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_KHR_video_queue ===
+ class VideoSessionKHR;
+ class VideoSessionParametersKHR;
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+ //=== VK_NVX_binary_import ===
+ class CuModuleNVX;
+ class CuFunctionNVX;
+
+ //=== VK_EXT_debug_utils ===
+ class DebugUtilsMessengerEXT;
+
+ //=== VK_KHR_acceleration_structure ===
+ class AccelerationStructureKHR;
+
+ //=== VK_EXT_validation_cache ===
+ class ValidationCacheEXT;
+
+ //=== VK_NV_ray_tracing ===
+ class AccelerationStructureNV;
+
+ //=== VK_INTEL_performance_query ===
+ class PerformanceConfigurationINTEL;
+
+ //=== VK_KHR_deferred_host_operations ===
+ class DeferredOperationKHR;
+
+ //=== VK_NV_device_generated_commands ===
+ class IndirectCommandsLayoutNV;
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+ class BufferCollectionFUCHSIA;
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//====================
//=== RAII HANDLES ===
//====================
@@ -2176,29 +2483,46 @@ namespace VULKAN_HPP_NAMESPACE
class Context
{
public:
- Context() : m_dispatcher( m_dynamicLoader.getProcAddress<PFN_vkGetInstanceProcAddr>( "vkGetInstanceProcAddr" ) )
+# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL
+ Context()
+ : m_dispatcher( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher(
+ m_dynamicLoader.getProcAddress<PFN_vkGetInstanceProcAddr>( "vkGetInstanceProcAddr" ) ) )
+# else
+ Context( PFN_vkGetInstanceProcAddr getInstanceProcAddr )
+ : m_dispatcher( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher( getInstanceProcAddr ) )
+# endif
{}
~Context() = default;
Context( Context const & ) = delete;
Context( Context && rhs ) VULKAN_HPP_NOEXCEPT
+# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL
: m_dynamicLoader( std::move( rhs.m_dynamicLoader ) )
- , m_dispatcher( std::move( rhs.m_dispatcher ) )
+ , m_dispatcher( rhs.m_dispatcher.release() )
+# else
+ : m_dispatcher( rhs.m_dispatcher.release() )
+# endif
{}
Context & operator=( Context const & ) = delete;
Context & operator =( Context && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
+# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL
m_dynamicLoader = std::move( rhs.m_dynamicLoader );
- m_dispatcher = std::move( rhs.m_dispatcher );
+# endif
+ m_dispatcher.reset( rhs.m_dispatcher.release() );
}
return *this;
}
//=== VK_VERSION_1_0 ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Instance createInstance(
+ VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::ExtensionProperties> enumerateInstanceExtensionProperties(
Optional<const std::string> layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const;
@@ -2210,13 +2534,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher const * getDispatcher() const
{
- VULKAN_HPP_ASSERT( m_dispatcher.getVkHeaderVersion() == VK_HEADER_VERSION );
- return &m_dispatcher;
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return &*m_dispatcher;
}
private:
- VULKAN_HPP_NAMESPACE::DynamicLoader m_dynamicLoader;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher m_dispatcher;
+# if VULKAN_HPP_ENABLE_DYNAMIC_LOADER_TOOL
+ VULKAN_HPP_NAMESPACE::DynamicLoader m_dynamicLoader;
+# endif
+ std::unique_ptr<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::ContextDispatcher> m_dispatcher;
};
class Instance
@@ -2233,50 +2559,47 @@ namespace VULKAN_HPP_NAMESPACE
Instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context const & context,
VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
- , m_dispatcher( context.getDispatcher()->vkGetInstanceProcAddr )
+ : m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
context.getDispatcher()->vkCreateInstance( reinterpret_cast<const VkInstanceCreateInfo *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkInstance *>( &m_instance ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateInstance" );
}
- m_dispatcher.init( static_cast<VkInstance>( m_instance ) );
+ m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher(
+ context.getDispatcher()->vkGetInstanceProcAddr, static_cast<VkInstance>( m_instance ) ) );
}
Instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Context const & context,
VkInstance instance,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
- , m_dispatcher( context.getDispatcher()->vkGetInstanceProcAddr )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
{
- m_dispatcher.init( static_cast<VkInstance>( m_instance ) );
+ m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher(
+ context.getDispatcher()->vkGetInstanceProcAddr, static_cast<VkInstance>( m_instance ) ) );
}
+ Instance( std::nullptr_t ) {}
+
~Instance()
{
if ( m_instance )
{
- getDispatcher()->vkDestroyInstance( static_cast<VkInstance>( m_instance ), m_allocator );
+ getDispatcher()->vkDestroyInstance( static_cast<VkInstance>( m_instance ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Instance() = default;
-# else
- Instance() = delete;
-# endif
+ Instance() = delete;
Instance( Instance const & ) = delete;
Instance( Instance && rhs ) VULKAN_HPP_NOEXCEPT
: m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( rhs.m_dispatcher.release() )
{}
Instance & operator=( Instance const & ) = delete;
Instance & operator =( Instance && rhs ) VULKAN_HPP_NOEXCEPT
@@ -2285,11 +2608,12 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_instance )
{
- getDispatcher()->vkDestroyInstance( static_cast<VkInstance>( m_instance ), m_allocator );
+ getDispatcher()->vkDestroyInstance( static_cast<VkInstance>( m_instance ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} );
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher.reset( rhs.m_dispatcher.release() );
}
return *this;
}
@@ -2301,24 +2625,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
{
- VULKAN_HPP_ASSERT( m_dispatcher.getVkHeaderVersion() == VK_HEADER_VERSION );
- return &m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_instance.operator bool();
- }
-
- bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return m_instance.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return &*m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice> enumeratePhysicalDevices() const;
+
VULKAN_HPP_NODISCARD PFN_vkVoidFunction getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT;
//=== VK_VERSION_1_1 ===
@@ -2326,8 +2640,58 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties>
enumeratePhysicalDeviceGroups() const;
+ //=== VK_KHR_display ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createDisplayPlaneSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+# if defined( VK_USE_PLATFORM_XLIB_KHR )
+ //=== VK_KHR_xlib_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createXlibSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_XLIB_KHR*/
+
+# if defined( VK_USE_PLATFORM_XCB_KHR )
+ //=== VK_KHR_xcb_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createXcbSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_XCB_KHR*/
+
+# if defined( VK_USE_PLATFORM_WAYLAND_KHR )
+ //=== VK_KHR_wayland_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createWaylandSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
+
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ //=== VK_KHR_android_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createAndroidSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ //=== VK_KHR_win32_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createWin32SurfaceKHR(
+ VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
//=== VK_EXT_debug_report ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT createDebugReportCallbackEXT(
+ VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
void debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags,
VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_,
uint64_t object,
@@ -2336,22 +2700,96 @@ namespace VULKAN_HPP_NAMESPACE
const std::string & layerPrefix,
const std::string & message ) const VULKAN_HPP_NOEXCEPT;
+# if defined( VK_USE_PLATFORM_GGP )
+ //=== VK_GGP_stream_descriptor_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createStreamDescriptorSurfaceGGP(
+ VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_GGP*/
+
+# if defined( VK_USE_PLATFORM_VI_NN )
+ //=== VK_NN_vi_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createViSurfaceNN(
+ VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_VI_NN*/
+
//=== VK_KHR_device_group_creation ===
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties>
enumeratePhysicalDeviceGroupsKHR() const;
+# if defined( VK_USE_PLATFORM_IOS_MVK )
+ //=== VK_MVK_ios_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createIOSSurfaceMVK(
+ VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_IOS_MVK*/
+
+# if defined( VK_USE_PLATFORM_MACOS_MVK )
+ //=== VK_MVK_macos_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createMacOSSurfaceMVK(
+ VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_MACOS_MVK*/
+
//=== VK_EXT_debug_utils ===
- void
- submitDebugUtilsMessageEXT( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
- VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
- const DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT createDebugUtilsMessengerEXT(
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ void submitDebugUtilsMessageEXT(
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT;
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_imagepipe_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createImagePipeSurfaceFUCHSIA(
+ VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_METAL_EXT )
+ //=== VK_EXT_metal_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createMetalSurfaceEXT(
+ VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_METAL_EXT*/
+
+ //=== VK_EXT_headless_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createHeadlessSurfaceEXT(
+ VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+# if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
+ //=== VK_EXT_directfb_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createDirectFBSurfaceEXT(
+ VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
+
+# if defined( VK_USE_PLATFORM_SCREEN_QNX )
+ //=== VK_QNX_screen_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR createScreenSurfaceQNX(
+ VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_USE_PLATFORM_SCREEN_QNX*/
private:
- VULKAN_HPP_NAMESPACE::Instance m_instance;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Instance m_instance = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ std::unique_ptr<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher> m_dispatcher;
};
class PhysicalDevice
@@ -2370,20 +2808,13 @@ namespace VULKAN_HPP_NAMESPACE
: m_physicalDevice( physicalDevice ), m_dispatcher( instance.getDispatcher() )
{}
- PhysicalDevice( VkPhysicalDevice physicalDevice,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * dispatcher )
- : m_physicalDevice( physicalDevice ), m_dispatcher( dispatcher )
- {}
+ PhysicalDevice( std::nullptr_t ) {}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- PhysicalDevice() = default;
-# else
- PhysicalDevice() = delete;
-# endif
+ PhysicalDevice() = delete;
PhysicalDevice( PhysicalDevice const & ) = delete;
PhysicalDevice( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT
: m_physicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) )
- , m_dispatcher( rhs.m_dispatcher )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
PhysicalDevice & operator=( PhysicalDevice const & ) = delete;
PhysicalDevice & operator =( PhysicalDevice && rhs ) VULKAN_HPP_NOEXCEPT
@@ -2391,7 +2822,7 @@ namespace VULKAN_HPP_NAMESPACE
if ( this != &rhs )
{
m_physicalDevice = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} );
- m_dispatcher = rhs.m_dispatcher;
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -2407,18 +2838,6 @@ namespace VULKAN_HPP_NAMESPACE
return m_dispatcher;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_physicalDevice.operator bool();
- }
-
- bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return m_physicalDevice.operator!();
- }
-# endif
-
//=== VK_VERSION_1_0 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures getFeatures() const VULKAN_HPP_NOEXCEPT;
@@ -2427,10 +2846,10 @@ namespace VULKAN_HPP_NAMESPACE
getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties getImageFormatProperties(
- VULKAN_HPP_NAMESPACE::Format format,
- VULKAN_HPP_NAMESPACE::ImageType type,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
+ VULKAN_HPP_NAMESPACE::Format format,
+ VULKAN_HPP_NAMESPACE::ImageType type,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties getProperties() const VULKAN_HPP_NOEXCEPT;
@@ -2441,6 +2860,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties
getMemoryProperties() const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Device createDevice(
+ VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::ExtensionProperties> enumerateDeviceExtensionProperties(
Optional<const std::string> layerName VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const;
@@ -2473,11 +2896,11 @@ namespace VULKAN_HPP_NAMESPACE
getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2
- getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
+ getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
+ getImageFormatProperties2( const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::QueueFamilyProperties2>
getQueueFamilyProperties2() const VULKAN_HPP_NOEXCEPT;
@@ -2492,31 +2915,36 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getMemoryProperties2() const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>
- getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const
- VULKAN_HPP_NOEXCEPT;
+ getSparseImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties getExternalBufferProperties(
- const PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties getExternalFenceProperties(
- const PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties getExternalSemaphoreProperties(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ //=== VK_VERSION_1_3 ===
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties> getToolProperties() const;
//=== VK_KHR_surface ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32
- getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const;
+ getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR
getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SurfaceFormatKHR>
- getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const;
+ getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
- VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PresentModeKHR>
- getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const;
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PresentModeKHR> getSurfacePresentModesKHR(
+ VULKAN_HPP_NAMESPACE::SurfaceKHR surface VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
//=== VK_KHR_swapchain ===
@@ -2530,6 +2958,9 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR>
getDisplayPlanePropertiesKHR() const;
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::DisplayKHR>
+ getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const;
+
# if defined( VK_USE_PLATFORM_XLIB_KHR )
//=== VK_KHR_xlib_surface ===
@@ -2563,26 +2994,26 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_video_queue ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR
- getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile ) const;
+ getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const;
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile ) const;
+ getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const;
- VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR>
- getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const;
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR> getVideoFormatPropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const;
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
//=== VK_NV_external_memory_capabilities ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV getExternalImageFormatPropertiesNV(
- VULKAN_HPP_NAMESPACE::Format format,
- VULKAN_HPP_NAMESPACE::ImageType type,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
- VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ VULKAN_HPP_NAMESPACE::Format format,
+ VULKAN_HPP_NAMESPACE::ImageType type,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV externalHandleType
- VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
//=== VK_KHR_get_physical_device_properties2 ===
@@ -2604,12 +3035,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2
- getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageFormatProperties2 getImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::QueueFamilyProperties2>
getQueueFamilyProperties2KHR() const VULKAN_HPP_NOEXCEPT;
@@ -2624,23 +3055,27 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getMemoryProperties2KHR() const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>
- getSparseImageFormatProperties2KHR( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const
- VULKAN_HPP_NOEXCEPT;
+ getSparseImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_external_memory_capabilities ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalBufferProperties getExternalBufferPropertiesKHR(
- const PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_external_semaphore_capabilities ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties getExternalSemaphorePropertiesKHR(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const
+ VULKAN_HPP_NOEXCEPT;
# if defined( VK_USE_PLATFORM_XLIB_XRANDR_EXT )
//=== VK_EXT_acquire_xlib_display ===
void acquireXlibDisplayEXT( Display & dpy, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayKHR getRandROutputDisplayEXT( Display & dpy,
+ RROutput rrOutput ) const;
# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/
//=== VK_EXT_display_surface_counter ===
@@ -2651,7 +3086,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_fence_capabilities ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ExternalFenceProperties getExternalFencePropertiesKHR(
- const PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_performance_query ===
@@ -2659,19 +3094,20 @@ namespace VULKAN_HPP_NAMESPACE
enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const;
VULKAN_HPP_NODISCARD uint32_t getQueueFamilyPerformanceQueryPassesKHR(
- const QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_get_surface_capabilities2 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR
- getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
+ getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
+ getSurfaceCapabilities2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>
- getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
+ getSurfaceFormats2KHR( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
//=== VK_KHR_get_display_properties2 ===
@@ -2681,12 +3117,12 @@ namespace VULKAN_HPP_NAMESPACE
getDisplayPlaneProperties2KHR() const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR
- getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR & displayPlaneInfo ) const;
+ getDisplayPlaneCapabilities2KHR( const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo ) const;
//=== VK_EXT_sample_locations ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT
- getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const VULKAN_HPP_NOEXCEPT;
+ getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_calibrated_timestamps ===
@@ -2699,8 +3135,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_tooling_info ===
- VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT>
- getToolPropertiesEXT() const;
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties> getToolPropertiesEXT() const;
//=== VK_NV_cooperative_matrix ===
@@ -2716,18 +3151,27 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_full_screen_exclusive ===
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PresentModeKHR>
- getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
+ getSurfacePresentModes2EXT( const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
//=== VK_EXT_acquire_drm_display ===
void acquireDrmDisplayEXT( int32_t drmFd, VULKAN_HPP_NAMESPACE::DisplayKHR display ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayKHR getDrmDisplayEXT( int32_t drmFd,
+ uint32_t connectorId ) const;
+
+# if defined( VK_USE_PLATFORM_WIN32_KHR )
+ //=== VK_NV_acquire_winrt_display ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayKHR getWinrtDisplayNV( uint32_t deviceRelativeId ) const;
+# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+
# if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
//=== VK_EXT_directfb_surface ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Bool32
- getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT;
+ getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex, IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT;
# endif /*VK_USE_PLATFORM_DIRECTFB_EXT*/
# if defined( VK_USE_PLATFORM_SCREEN_QNX )
@@ -2739,8 +3183,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VK_USE_PLATFORM_SCREEN_QNX*/
private:
- VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr;
};
class PhysicalDevices : public std::vector<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice>
@@ -2762,15 +3206,15 @@ namespace VULKAN_HPP_NAMESPACE
physicalDevices.resize( physicalDeviceCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( dispatcher->vkEnumeratePhysicalDevices(
static_cast<VkInstance>( *instance ), &physicalDeviceCount, physicalDevices.data() ) );
- VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
+ VULKAN_HPP_ASSERT( physicalDeviceCount <= physicalDevices.size() );
this->reserve( physicalDeviceCount );
for ( auto const & physicalDevice : physicalDevices )
{
- this->emplace_back( physicalDevice, dispatcher );
+ this->emplace_back( instance, physicalDevice );
}
}
else
@@ -2779,11 +3223,7 @@ namespace VULKAN_HPP_NAMESPACE
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- PhysicalDevices() = default;
-# else
- PhysicalDevices() = delete;
-# endif
+ PhysicalDevices() = delete;
PhysicalDevices( PhysicalDevices const & ) = delete;
PhysicalDevices( PhysicalDevices && rhs ) = default;
PhysicalDevices & operator=( PhysicalDevices const & ) = delete;
@@ -2804,51 +3244,48 @@ namespace VULKAN_HPP_NAMESPACE
Device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice,
VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
- , m_dispatcher( physicalDevice.getDispatcher()->vkGetDeviceProcAddr )
+ : m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- physicalDevice.getDispatcher()->vkCreateDevice( static_cast<VkPhysicalDevice>( *physicalDevice ),
- reinterpret_cast<const VkDeviceCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkDevice *>( &m_device ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( physicalDevice.getDispatcher()->vkCreateDevice(
+ static_cast<VkPhysicalDevice>( *physicalDevice ),
+ reinterpret_cast<const VkDeviceCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkDevice *>( &m_device ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDevice" );
}
- m_dispatcher.init( static_cast<VkDevice>( m_device ) );
+ m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher(
+ physicalDevice.getDispatcher()->vkGetDeviceProcAddr, static_cast<VkDevice>( m_device ) ) );
}
Device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice,
VkDevice device,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_device( device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
- , m_dispatcher( physicalDevice.getDispatcher()->vkGetDeviceProcAddr )
+ : m_device( device ), m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
{
- m_dispatcher.init( static_cast<VkDevice>( m_device ) );
+ m_dispatcher.reset( new VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher(
+ physicalDevice.getDispatcher()->vkGetDeviceProcAddr, static_cast<VkDevice>( m_device ) ) );
}
+ Device( std::nullptr_t ) {}
+
~Device()
{
if ( m_device )
{
- getDispatcher()->vkDestroyDevice( static_cast<VkDevice>( m_device ), m_allocator );
+ getDispatcher()->vkDestroyDevice( static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Device() = default;
-# else
- Device() = delete;
-# endif
+ Device() = delete;
Device( Device const & ) = delete;
Device( Device && rhs ) VULKAN_HPP_NOEXCEPT
: m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( rhs.m_dispatcher.release() )
{}
Device & operator=( Device const & ) = delete;
Device & operator =( Device && rhs ) VULKAN_HPP_NOEXCEPT
@@ -2857,11 +3294,12 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_device )
{
- getDispatcher()->vkDestroyDevice( static_cast<VkDevice>( m_device ), m_allocator );
+ getDispatcher()->vkDestroyDevice( static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher.reset( rhs.m_dispatcher.release() );
}
return *this;
}
@@ -2873,34 +3311,33 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- VULKAN_HPP_ASSERT( m_dispatcher.getVkHeaderVersion() == VK_HEADER_VERSION );
- return &m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_device.operator bool();
- }
-
- bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return m_device.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return &*m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
VULKAN_HPP_NODISCARD PFN_vkVoidFunction getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Queue getQueue( uint32_t queueFamilyIndex,
+ uint32_t queueIndex ) const;
+
void waitIdle() const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DeviceMemory allocateMemory(
+ VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
void
flushMappedMemoryRanges( ArrayProxy<const VULKAN_HPP_NAMESPACE::MappedMemoryRange> const & memoryRanges ) const;
void invalidateMappedMemoryRanges(
ArrayProxy<const VULKAN_HPP_NAMESPACE::MappedMemoryRange> const & memoryRanges ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Fence createFence(
+ VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
void resetFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
@@ -2908,10 +3345,104 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 waitAll,
uint64_t timeout ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Semaphore createSemaphore(
+ VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Event createEvent(
+ VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::QueryPool createQueryPool(
+ VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Buffer createBuffer(
+ VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::BufferView createBufferView(
+ VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Image createImage(
+ VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::ImageView createImageView(
+ VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::ShaderModule createShaderModule(
+ VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PipelineCache createPipelineCache(
+ VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline> createGraphicsPipelines(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline createGraphicsPipeline(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline> createComputePipelines(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline createComputePipeline(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PipelineLayout createPipelineLayout(
+ VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Sampler createSampler(
+ VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout createDescriptorSetLayout(
+ VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorPool createDescriptorPool(
+ VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::DescriptorSet>
+ allocateDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) const;
+
void updateDescriptorSets(
ArrayProxy<const VULKAN_HPP_NAMESPACE::WriteDescriptorSet> const & descriptorWrites,
ArrayProxy<const VULKAN_HPP_NAMESPACE::CopyDescriptorSet> const & descriptorCopies ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Framebuffer createFramebuffer(
+ VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::RenderPass createRenderPass(
+ VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::CommandPool createCommandPool(
+ VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::CommandBuffer>
+ allocateCommandBuffers( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) const;
+
//=== VK_VERSION_1_1 ===
void bindBufferMemory2( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo> const & bindInfos ) const;
@@ -2921,48 +3452,102 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PeerMemoryFeatureFlags getGroupPeerMemoryFeatures(
uint32_t heapIndex, uint32_t localDeviceIndex, uint32_t remoteDeviceIndex ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2
- getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2
- getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
- getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ getImageSparseMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const
+ VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport
- getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Queue
+ getQueue2( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion createSamplerYcbcrConversion(
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate createDescriptorUpdateTemplate(
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport getDescriptorSetLayoutSupport(
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getDescriptorSetLayoutSupport(
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_VERSION_1_2 ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitSemaphores( const SemaphoreWaitInfo & waitInfo,
- uint64_t timeout ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::RenderPass createRenderPass2(
+ VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
+ waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const;
- void signalSemaphore( const SemaphoreSignalInfo & signalInfo ) const;
+ void signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress
- getBufferAddress( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD uint64_t
- getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD uint64_t getBufferOpaqueCaptureAddress(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD uint64_t getMemoryOpaqueCaptureAddress(
+ const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+
+ //=== VK_VERSION_1_3 ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot createPrivateDataSlot(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ void setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data ) const;
VULKAN_HPP_NODISCARD uint64_t
- getMemoryOpaqueCaptureAddress( const DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
+ getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const
+ VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_swapchain ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR createSwapchainKHR(
+ VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR
getGroupPresentCapabilitiesKHR() const;
@@ -2970,18 +3555,50 @@ namespace VULKAN_HPP_NAMESPACE
getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const;
VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, uint32_t>
- acquireNextImage2KHR( const AcquireNextImageInfoKHR & acquireInfo ) const;
+ acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo ) const;
+
+ //=== VK_KHR_display_swapchain ===
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR> createSharedSwapchainsKHR(
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR createSharedSwapchainKHR(
+ VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
//=== VK_EXT_debug_marker ===
- void debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo ) const;
+ void debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo ) const;
+
+ void debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo ) const;
+
+# if defined( VK_ENABLE_BETA_EXTENSIONS )
+ //=== VK_KHR_video_queue ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR createVideoSessionKHR(
+ VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR createVideoSessionParametersKHR(
+ VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+# endif /*VK_ENABLE_BETA_EXTENSIONS*/
- void debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo ) const;
+ //=== VK_NVX_binary_import ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX createCuModuleNVX(
+ VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX createCuFunctionNVX(
+ VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
//=== VK_NVX_image_view_handle ===
VULKAN_HPP_NODISCARD uint32_t
- getImageViewHandleNVX( const ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT;
+ getImageViewHandleNVX( const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_device_group ===
@@ -2992,47 +3609,60 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_memory_win32 ===
VULKAN_HPP_NODISCARD HANDLE
- getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
+ getMemoryWin32HandleKHR( const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR
- getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
- HANDLE handle ) const;
+ getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ HANDLE handle ) const;
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
//=== VK_KHR_external_memory_fd ===
- VULKAN_HPP_NODISCARD int getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo ) const;
+ VULKAN_HPP_NODISCARD int getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR
- getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd ) const;
+ getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType, int fd ) const;
# if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_KHR_external_semaphore_win32 ===
- void
- importSemaphoreWin32HandleKHR( const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const;
+ void importSemaphoreWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const;
- VULKAN_HPP_NODISCARD HANDLE
- getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
+ VULKAN_HPP_NODISCARD HANDLE getSemaphoreWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
//=== VK_KHR_external_semaphore_fd ===
- void importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const;
+ void importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const;
- VULKAN_HPP_NODISCARD int getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo ) const;
+ VULKAN_HPP_NODISCARD int getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo ) const;
//=== VK_KHR_descriptor_update_template ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate createDescriptorUpdateTemplateKHR(
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
void destroyDescriptorUpdateTemplateKHR(
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_display_control ===
- void displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayPowerInfoEXT & displayPowerInfo ) const;
+ void displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Fence registerEventEXT(
+ VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Fence registerDisplayEventEXT(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display,
+ VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
//=== VK_EXT_hdr_metadata ===
@@ -3040,31 +3670,39 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<const VULKAN_HPP_NAMESPACE::HdrMetadataEXT> const & metadata ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+ //=== VK_KHR_create_renderpass2 ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::RenderPass createRenderPass2KHR(
+ VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
# if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_KHR_external_fence_win32 ===
- void importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const;
+ void importFenceWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const;
- VULKAN_HPP_NODISCARD HANDLE getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
+ VULKAN_HPP_NODISCARD HANDLE
+ getFenceWin32HandleKHR( const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const;
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
//=== VK_KHR_external_fence_fd ===
- void importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo ) const;
+ void importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo ) const;
- VULKAN_HPP_NODISCARD int getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo ) const;
+ VULKAN_HPP_NODISCARD int getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo ) const;
//=== VK_KHR_performance_query ===
- void acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR & info ) const;
+ void acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info ) const;
void releaseProfilingLockKHR() const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_debug_utils ===
- void setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT & nameInfo ) const;
+ void setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo ) const;
- void setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT & tagInfo ) const;
+ void setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo ) const;
# if defined( VK_USE_PLATFORM_ANDROID_KHR )
//=== VK_ANDROID_external_memory_android_hardware_buffer ===
@@ -3076,32 +3714,36 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const;
- VULKAN_HPP_NODISCARD struct AHardwareBuffer *
- getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID & info ) const;
+ VULKAN_HPP_NODISCARD struct AHardwareBuffer * getMemoryAndroidHardwareBufferANDROID(
+ const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info ) const;
# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
//=== VK_KHR_get_memory_requirements2 ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2
- getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2
- getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
- getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info ) const
- VULKAN_HPP_NOEXCEPT;
+ getImageSparseMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_acceleration_structure ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR createAccelerationStructureKHR(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result buildAccelerationStructuresKHR(
VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR> const & infos,
@@ -3109,50 +3751,54 @@ namespace VULKAN_HPP_NAMESPACE
pBuildRangeInfos ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
- copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureInfoKHR & info ) const;
+ copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
- copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureToMemoryInfoKHR & info ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result copyAccelerationStructureToMemoryKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const;
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
- copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyMemoryToAccelerationStructureInfoKHR & info ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result copyMemoryToAccelerationStructureKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD std::vector<T> writeAccelerationStructuresPropertiesKHR(
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::vector<DataType> writeAccelerationStructuresPropertiesKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
size_t dataSize,
size_t stride ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD T writeAccelerationStructuresPropertyKHR(
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType writeAccelerationStructuresPropertyKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
size_t stride ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress getAccelerationStructureAddressKHR(
- const AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR
- getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR & versionInfo ) const
- VULKAN_HPP_NOEXCEPT;
+ getAccelerationStructureCompatibilityKHR(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo ) const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR
- getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
- const AccelerationStructureBuildGeometryInfoKHR & buildInfo,
- ArrayProxy<const uint32_t> const & maxPrimitiveCounts
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
+ getAccelerationStructureBuildSizesKHR(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo,
+ ArrayProxy<const uint32_t> const & maxPrimitiveCounts VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_sampler_ycbcr_conversion ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion createSamplerYcbcrConversionKHR(
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
void destroySamplerYcbcrConversionKHR(
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- Optional<const AllocationCallbacks> allocator
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_bind_memory2 ===
@@ -3160,139 +3806,235 @@ namespace VULKAN_HPP_NAMESPACE
void bindImageMemory2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindImageMemoryInfo> const & bindInfos ) const;
+ //=== VK_EXT_validation_cache ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT createValidationCacheEXT(
+ VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
//=== VK_NV_ray_tracing ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV createAccelerationStructureNV(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR getAccelerationStructureMemoryRequirementsNV(
- const AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getAccelerationStructureMemoryRequirementsNV(
- const AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
void bindAccelerationStructureMemoryNV(
ArrayProxy<const VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV> const & bindInfos ) const;
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline> createRayTracingPipelinesNV(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline createRayTracingPipelineNV(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
//=== VK_KHR_maintenance3 ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport
- getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport getDescriptorSetLayoutSupportKHR(
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getDescriptorSetLayoutSupportKHR(
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_external_memory_host ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT
- getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
- const void * pHostPointer ) const;
+ getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ const void * pHostPointer ) const;
//=== VK_EXT_calibrated_timestamps ===
VULKAN_HPP_NODISCARD std::pair<std::vector<uint64_t>, uint64_t> getCalibratedTimestampsEXT(
ArrayProxy<const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT> const & timestampInfos ) const;
+ VULKAN_HPP_NODISCARD std::pair<uint64_t, uint64_t>
+ getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo ) const;
+
//=== VK_KHR_timeline_semaphore ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result waitSemaphoresKHR( const SemaphoreWaitInfo & waitInfo,
- uint64_t timeout ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
+ waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const;
- void signalSemaphoreKHR( const SemaphoreSignalInfo & signalInfo ) const;
+ void signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const;
//=== VK_INTEL_performance_query ===
- void initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL & initializeInfo ) const;
+ void initializePerformanceApiINTEL(
+ const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo ) const;
void uninitializePerformanceApiINTEL() const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL
+ acquirePerformanceConfigurationINTEL(
+ VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) const;
+
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::PerformanceValueINTEL
- getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const;
+ getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const;
//=== VK_EXT_buffer_device_address ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress
- getBufferAddressEXT( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ getBufferAddressEXT( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
# if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_EXT_full_screen_exclusive ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR
- getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR getGroupSurfacePresentModes2EXT(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const;
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
//=== VK_KHR_buffer_device_address ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceAddress
- getBufferAddressKHR( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ getBufferAddressKHR( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD uint64_t
- getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD uint64_t getBufferOpaqueCaptureAddressKHR(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
- VULKAN_HPP_NODISCARD uint64_t
- getMemoryOpaqueCaptureAddressKHR( const DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NODISCARD uint64_t getMemoryOpaqueCaptureAddressKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT;
+
+ //=== VK_KHR_deferred_host_operations ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR createDeferredOperationKHR(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
//=== VK_KHR_pipeline_executable_properties ===
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR>
- getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo ) const;
+ getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR>
- getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo ) const;
+ getPipelineExecutableStatisticsKHR(
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR>
- getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR & executableInfo ) const;
+ getPipelineExecutableInternalRepresentationsKHR(
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const;
//=== VK_NV_device_generated_commands ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getGeneratedCommandsMemoryRequirementsNV(
- const GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getGeneratedCommandsMemoryRequirementsNV(
- const GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV createIndirectCommandsLayoutNV(
+ VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
//=== VK_EXT_private_data ===
- void setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t data ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot createPrivateDataSlotEXT(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ void destroyPrivateDataSlotEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ void setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data ) const;
VULKAN_HPP_NODISCARD uint64_t
- getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot ) const VULKAN_HPP_NOEXCEPT;
+ getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT;
+
+ //=== VK_KHR_ray_tracing_pipeline ===
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline> createRayTracingPipelinesKHR(
+ VULKAN_HPP_NAMESPACE::Optional<
+ const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR> const & deferredOperation,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::Pipeline createRayTracingPipelineKHR(
+ VULKAN_HPP_NAMESPACE::Optional<
+ const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR> const & deferredOperation,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
# if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_external_memory ===
- VULKAN_HPP_NODISCARD zx_handle_t
- getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const;
+ VULKAN_HPP_NODISCARD zx_handle_t getMemoryZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA
- getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
- zx_handle_t zirconHandle ) const;
+ getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ zx_handle_t zirconHandle ) const;
# endif /*VK_USE_PLATFORM_FUCHSIA*/
# if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_external_semaphore ===
void importSemaphoreZirconHandleFUCHSIA(
- const ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const;
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const;
- VULKAN_HPP_NODISCARD zx_handle_t
- getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const;
+ VULKAN_HPP_NODISCARD zx_handle_t getSemaphoreZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const;
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA createBufferCollectionFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
# endif /*VK_USE_PLATFORM_FUCHSIA*/
//=== VK_NV_external_memory_rdma ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::RemoteAddressNV
- getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::RemoteAddressNV getMemoryRemoteAddressNV(
+ const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const;
+
+ //=== VK_KHR_maintenance4 ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getBufferMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getBufferMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements2 getImageMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> getImageMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT;
+
+ VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
+ getImageSparseMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const
+ VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::Device m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ std::unique_ptr<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher> m_dispatcher;
};
class AccelerationStructureKHR
@@ -3311,16 +4053,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateAccelerationStructureKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateAccelerationStructureKHR(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkAccelerationStructureCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkAccelerationStructureKHR *>( &m_accelerationStructureKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkAccelerationStructureKHR *>( &m_accelerationStructure ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateAccelerationStructureKHR" );
@@ -3329,84 +4070,78 @@ namespace VULKAN_HPP_NAMESPACE
AccelerationStructureKHR(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkAccelerationStructureKHR accelerationStructureKHR,
+ VkAccelerationStructureKHR accelerationStructure,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_accelerationStructureKHR( accelerationStructureKHR )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_accelerationStructure( accelerationStructure )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ AccelerationStructureKHR( std::nullptr_t ) {}
+
~AccelerationStructureKHR()
{
- if ( m_accelerationStructureKHR )
+ if ( m_accelerationStructure )
{
getDispatcher()->vkDestroyAccelerationStructureKHR(
- m_device, static_cast<VkAccelerationStructureKHR>( m_accelerationStructureKHR ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkAccelerationStructureKHR>( m_accelerationStructure ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- AccelerationStructureKHR() = default;
-# else
- AccelerationStructureKHR() = delete;
-# endif
+ AccelerationStructureKHR() = delete;
AccelerationStructureKHR( AccelerationStructureKHR const & ) = delete;
AccelerationStructureKHR( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_accelerationStructureKHR(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructureKHR, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_accelerationStructure(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
AccelerationStructureKHR & operator=( AccelerationStructureKHR const & ) = delete;
AccelerationStructureKHR & operator=( AccelerationStructureKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_accelerationStructureKHR )
+ if ( m_accelerationStructure )
{
getDispatcher()->vkDestroyAccelerationStructureKHR(
- m_device, static_cast<VkAccelerationStructureKHR>( m_accelerationStructureKHR ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkAccelerationStructureKHR>( m_accelerationStructure ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_accelerationStructureKHR =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructureKHR, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_accelerationStructure =
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_accelerationStructureKHR;
+ return m_accelerationStructure;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_accelerationStructureKHR.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_accelerationStructureKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::AccelerationStructureKHR m_accelerationStructureKHR;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR m_accelerationStructure = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class AccelerationStructureNV
@@ -3425,16 +4160,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateAccelerationStructureNV(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateAccelerationStructureNV(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkAccelerationStructureCreateInfoNV *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkAccelerationStructureNV *>( &m_accelerationStructureNV ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkAccelerationStructureNV *>( &m_accelerationStructure ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateAccelerationStructureNV" );
@@ -3443,92 +4177,86 @@ namespace VULKAN_HPP_NAMESPACE
AccelerationStructureNV(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkAccelerationStructureNV accelerationStructureNV,
+ VkAccelerationStructureNV accelerationStructure,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_accelerationStructureNV( accelerationStructureNV )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_accelerationStructure( accelerationStructure )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ AccelerationStructureNV( std::nullptr_t ) {}
+
~AccelerationStructureNV()
{
- if ( m_accelerationStructureNV )
+ if ( m_accelerationStructure )
{
getDispatcher()->vkDestroyAccelerationStructureNV(
- m_device, static_cast<VkAccelerationStructureNV>( m_accelerationStructureNV ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkAccelerationStructureNV>( m_accelerationStructure ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- AccelerationStructureNV() = default;
-# else
- AccelerationStructureNV() = delete;
-# endif
+ AccelerationStructureNV() = delete;
AccelerationStructureNV( AccelerationStructureNV const & ) = delete;
AccelerationStructureNV( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT
- : m_accelerationStructureNV(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructureNV, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_accelerationStructure(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
AccelerationStructureNV & operator=( AccelerationStructureNV const & ) = delete;
AccelerationStructureNV & operator=( AccelerationStructureNV && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_accelerationStructureNV )
+ if ( m_accelerationStructure )
{
getDispatcher()->vkDestroyAccelerationStructureNV(
- m_device, static_cast<VkAccelerationStructureNV>( m_accelerationStructureNV ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkAccelerationStructureNV>( m_accelerationStructure ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_accelerationStructureNV =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructureNV, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_accelerationStructure =
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_accelerationStructure, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::AccelerationStructureNV const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_accelerationStructureNV;
- }
-
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
+ return m_accelerationStructure;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_accelerationStructureNV.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_accelerationStructureNV.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_NV_ray_tracing ===
- template <typename T>
- VULKAN_HPP_NODISCARD std::vector<T> getHandle( size_t dataSize ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::vector<DataType> getHandle( size_t dataSize ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD T getHandle() const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType getHandle() const;
private:
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV m_accelerationStructureNV;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV m_accelerationStructure = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Buffer
@@ -3546,15 +4274,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateBuffer( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkBufferCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkBuffer *>( &m_buffer ) ) );
+ device.getDispatcher()->vkCreateBuffer( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkBufferCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkBuffer *>( &m_buffer ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateBuffer" );
@@ -3564,32 +4291,31 @@ namespace VULKAN_HPP_NAMESPACE
Buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkBuffer buffer,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_buffer( buffer )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_buffer( buffer )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Buffer( std::nullptr_t ) {}
+
~Buffer()
{
if ( m_buffer )
{
- getDispatcher()->vkDestroyBuffer( m_device, static_cast<VkBuffer>( m_buffer ), m_allocator );
+ getDispatcher()->vkDestroyBuffer( static_cast<VkDevice>( m_device ),
+ static_cast<VkBuffer>( m_buffer ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Buffer() = default;
-# else
- Buffer() = delete;
-# endif
+ Buffer() = delete;
Buffer( Buffer const & ) = delete;
Buffer( Buffer && rhs ) VULKAN_HPP_NOEXCEPT
- : m_buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_buffer, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_buffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_buffer, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Buffer & operator=( Buffer const & ) = delete;
Buffer & operator =( Buffer && rhs ) VULKAN_HPP_NOEXCEPT
@@ -3598,12 +4324,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_buffer )
{
- getDispatcher()->vkDestroyBuffer( m_device, static_cast<VkBuffer>( m_buffer ), m_allocator );
+ getDispatcher()->vkDestroyBuffer( static_cast<VkDevice>( m_device ),
+ static_cast<VkBuffer>( m_buffer ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_buffer = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_buffer, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -3613,36 +4341,145 @@ namespace VULKAN_HPP_NAMESPACE
return m_buffer;
}
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
+ {
+ return m_device;
+ }
+
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
return m_dispatcher;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ //=== VK_VERSION_1_0 ===
+
+ void bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getMemoryRequirements() const VULKAN_HPP_NOEXCEPT;
+
+ private:
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Buffer m_buffer = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
+ };
+
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ class BufferCollectionFUCHSIA
+ {
+ public:
+ using CType = VkBufferCollectionFUCHSIA;
+
+ static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
+ VULKAN_HPP_NAMESPACE::ObjectType::eBufferCollectionFUCHSIA;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType =
+ VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eBufferCollectionFUCHSIA;
+
+ public:
+ BufferCollectionFUCHSIA(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
+ VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
+ : m_device( *device )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
+ , m_dispatcher( device.getDispatcher() )
{
- return m_buffer.operator bool();
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateBufferCollectionFUCHSIA(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkBufferCollectionCreateInfoFUCHSIA *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkBufferCollectionFUCHSIA *>( &m_collection ) ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, "vkCreateBufferCollectionFUCHSIA" );
+ }
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ BufferCollectionFUCHSIA(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
+ VkBufferCollectionFUCHSIA collection,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
+ : m_device( *device )
+ , m_collection( collection )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
+ , m_dispatcher( device.getDispatcher() )
+ {}
+
+ BufferCollectionFUCHSIA( std::nullptr_t ) {}
+
+ ~BufferCollectionFUCHSIA()
{
- return m_buffer.operator!();
+ if ( m_collection )
+ {
+ getDispatcher()->vkDestroyBufferCollectionFUCHSIA(
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferCollectionFUCHSIA>( m_collection ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
+ }
}
-# endif
- //=== VK_VERSION_1_0 ===
+ BufferCollectionFUCHSIA() = delete;
+ BufferCollectionFUCHSIA( BufferCollectionFUCHSIA const & ) = delete;
+ BufferCollectionFUCHSIA( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_collection( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_collection, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
+ {}
+ BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA const & ) = delete;
+ BufferCollectionFUCHSIA & operator=( BufferCollectionFUCHSIA && rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ if ( this != &rhs )
+ {
+ if ( m_collection )
+ {
+ getDispatcher()->vkDestroyBufferCollectionFUCHSIA(
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferCollectionFUCHSIA>( m_collection ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
+ }
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_collection = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_collection, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
+ }
+ return *this;
+ }
- void bindMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory, VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset ) const;
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const & operator*() const VULKAN_HPP_NOEXCEPT
+ {
+ return m_collection;
+ }
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::MemoryRequirements getMemoryRequirements() const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
+ {
+ return m_device;
+ }
+
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ {
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
+ }
+
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ void setImageConstraints( const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo ) const;
+
+ void
+ setBufferConstraints( const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo ) const;
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA getProperties() const;
private:
- VULKAN_HPP_NAMESPACE::Buffer m_buffer;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA m_collection = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
class BufferView
{
@@ -3659,15 +4496,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateBufferView( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkBufferViewCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkBufferView *>( &m_bufferView ) ) );
+ device.getDispatcher()->vkCreateBufferView( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkBufferViewCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkBufferView *>( &m_bufferView ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateBufferView" );
@@ -3677,32 +4513,31 @@ namespace VULKAN_HPP_NAMESPACE
BufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkBufferView bufferView,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_bufferView( bufferView )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_bufferView( bufferView )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ BufferView( std::nullptr_t ) {}
+
~BufferView()
{
if ( m_bufferView )
{
- getDispatcher()->vkDestroyBufferView( m_device, static_cast<VkBufferView>( m_bufferView ), m_allocator );
+ getDispatcher()->vkDestroyBufferView( static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferView>( m_bufferView ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- BufferView() = default;
-# else
- BufferView() = delete;
-# endif
+ BufferView() = delete;
BufferView( BufferView const & ) = delete;
BufferView( BufferView && rhs ) VULKAN_HPP_NOEXCEPT
- : m_bufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_bufferView, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_bufferView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_bufferView, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
BufferView & operator=( BufferView const & ) = delete;
BufferView & operator =( BufferView && rhs ) VULKAN_HPP_NOEXCEPT
@@ -3711,12 +4546,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_bufferView )
{
- getDispatcher()->vkDestroyBufferView( m_device, static_cast<VkBufferView>( m_bufferView ), m_allocator );
+ getDispatcher()->vkDestroyBufferView( static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferView>( m_bufferView ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_bufferView = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_bufferView, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -3726,29 +4563,22 @@ namespace VULKAN_HPP_NAMESPACE
return m_bufferView;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_bufferView.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_bufferView.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::BufferView m_bufferView;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::BufferView m_bufferView = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class CommandPool
@@ -3766,15 +4596,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateCommandPool( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkCommandPoolCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkCommandPool *>( &m_commandPool ) ) );
+ device.getDispatcher()->vkCreateCommandPool( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkCommandPoolCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkCommandPool *>( &m_commandPool ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateCommandPool" );
@@ -3784,32 +4613,31 @@ namespace VULKAN_HPP_NAMESPACE
CommandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkCommandPool commandPool,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_commandPool( commandPool )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_commandPool( commandPool )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ CommandPool( std::nullptr_t ) {}
+
~CommandPool()
{
if ( m_commandPool )
{
- getDispatcher()->vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( m_commandPool ), m_allocator );
+ getDispatcher()->vkDestroyCommandPool( static_cast<VkDevice>( m_device ),
+ static_cast<VkCommandPool>( m_commandPool ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- CommandPool() = default;
-# else
- CommandPool() = delete;
-# endif
+ CommandPool() = delete;
CommandPool( CommandPool const & ) = delete;
CommandPool( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT
- : m_commandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_commandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
CommandPool & operator=( CommandPool const & ) = delete;
CommandPool & operator =( CommandPool && rhs ) VULKAN_HPP_NOEXCEPT
@@ -3818,12 +4646,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_commandPool )
{
- getDispatcher()->vkDestroyCommandPool( m_device, static_cast<VkCommandPool>( m_commandPool ), m_allocator );
+ getDispatcher()->vkDestroyCommandPool( static_cast<VkDevice>( m_device ),
+ static_cast<VkCommandPool>( m_commandPool ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_commandPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -3833,23 +4663,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_commandPool;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_commandPool.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_commandPool.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
@@ -3866,10 +4689,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::CommandPool m_commandPool;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::CommandPool m_commandPool = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class CommandBuffer
@@ -3883,42 +4706,35 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eCommandBuffer;
public:
- CommandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkCommandBuffer commandBuffer,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandPool const & commandPool )
- : m_commandBuffer( commandBuffer )
- , m_device( *device )
- , m_commandPool( *commandPool )
+ CommandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
+ VkCommandBuffer commandBuffer,
+ VkCommandPool commandPool )
+ : m_device( *device )
+ , m_commandPool( commandPool )
+ , m_commandBuffer( commandBuffer )
, m_dispatcher( device.getDispatcher() )
{}
- CommandBuffer( VkCommandBuffer commandBuffer,
- VkDevice device,
- VkCommandPool commandPool,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher )
- : m_commandBuffer( commandBuffer ), m_device( device ), m_commandPool( commandPool ), m_dispatcher( dispatcher )
- {}
+ CommandBuffer( std::nullptr_t ) {}
~CommandBuffer()
{
if ( m_commandBuffer )
{
- getDispatcher()->vkFreeCommandBuffers(
- m_device, m_commandPool, 1, reinterpret_cast<VkCommandBuffer const *>( &m_commandBuffer ) );
+ getDispatcher()->vkFreeCommandBuffers( static_cast<VkDevice>( m_device ),
+ static_cast<VkCommandPool>( m_commandPool ),
+ 1,
+ reinterpret_cast<VkCommandBuffer const *>( &m_commandBuffer ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- CommandBuffer() = default;
-# else
- CommandBuffer() = delete;
-# endif
+ CommandBuffer() = delete;
CommandBuffer( CommandBuffer const & ) = delete;
CommandBuffer( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT
- : m_commandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandBuffer, {} ) )
- , m_device( rhs.m_device )
- , m_commandPool( rhs.m_commandPool )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_commandPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} ) )
+ , m_commandBuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandBuffer, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
CommandBuffer & operator=( CommandBuffer const & ) = delete;
CommandBuffer & operator =( CommandBuffer && rhs ) VULKAN_HPP_NOEXCEPT
@@ -3927,13 +4743,15 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_commandBuffer )
{
- getDispatcher()->vkFreeCommandBuffers(
- m_device, m_commandPool, 1, reinterpret_cast<VkCommandBuffer const *>( &m_commandBuffer ) );
+ getDispatcher()->vkFreeCommandBuffers( static_cast<VkDevice>( m_device ),
+ static_cast<VkCommandPool>( m_commandPool ),
+ 1,
+ reinterpret_cast<VkCommandBuffer const *>( &m_commandBuffer ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_commandPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandPool, {} );
m_commandBuffer = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_commandBuffer, {} );
- m_device = rhs.m_device;
- m_commandPool = rhs.m_commandPool;
- m_dispatcher = rhs.m_dispatcher;
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -3943,27 +4761,20 @@ namespace VULKAN_HPP_NAMESPACE
return m_commandBuffer;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_commandBuffer.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_commandBuffer.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
- void begin( const CommandBufferBeginInfo & beginInfo ) const;
+ void begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo ) const;
void end() const;
@@ -4067,10 +4878,10 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<const VULKAN_HPP_NAMESPACE::BufferImageCopy> const & regions ) const
VULKAN_HPP_NOEXCEPT;
- template <typename T>
- void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- ArrayProxy<const T> const & data ) const VULKAN_HPP_NOEXCEPT;
+ template <typename DataType>
+ void updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ ArrayProxy<const DataType> const & data ) const VULKAN_HPP_NOEXCEPT;
void fillBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
@@ -4079,13 +4890,13 @@ namespace VULKAN_HPP_NAMESPACE
void clearColorImage( VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearColorValue & color,
+ const VULKAN_HPP_NAMESPACE::ClearColorValue & color,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges ) const
VULKAN_HPP_NOEXCEPT;
void clearDepthStencilImage( VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearDepthStencilValue & depthStencil,
+ const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges ) const
VULKAN_HPP_NOEXCEPT;
@@ -4100,13 +4911,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageResolve> const & regions ) const VULKAN_HPP_NOEXCEPT;
- void setEvent( VULKAN_HPP_NAMESPACE::Event event,
+ void setEvent( VULKAN_HPP_NAMESPACE::Event event,
VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask
- VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
- void resetEvent( VULKAN_HPP_NAMESPACE::Event event,
+ void resetEvent( VULKAN_HPP_NAMESPACE::Event event,
VULKAN_HPP_NAMESPACE::PipelineStageFlags stageMask
- VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
void waitEvents( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask,
@@ -4124,10 +4935,10 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier> const & imageMemoryBarriers )
const VULKAN_HPP_NOEXCEPT;
- void beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t query,
+ void beginQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query,
VULKAN_HPP_NAMESPACE::QueryControlFlags flags
- VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
void endQuery( VULKAN_HPP_NAMESPACE::QueryPool queryPool, uint32_t query ) const VULKAN_HPP_NOEXCEPT;
@@ -4139,23 +4950,23 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::QueryPool queryPool,
uint32_t query ) const VULKAN_HPP_NOEXCEPT;
- void copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t firstQuery,
- uint32_t queryCount,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ void copyQueryPoolResults( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t firstQuery,
+ uint32_t queryCount,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags
- VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
- template <typename T>
+ template <typename ValuesType>
void pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout,
VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags,
uint32_t offset,
- ArrayProxy<const T> const & values ) const VULKAN_HPP_NOEXCEPT;
+ ArrayProxy<const ValuesType> const & values ) const VULKAN_HPP_NOEXCEPT;
- void beginRenderPass( const RenderPassBeginInfo & renderPassBegin,
- VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT;
+ void beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT;
void nextSubpass( VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT;
@@ -4191,36 +5002,122 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxDrawCount,
uint32_t stride ) const VULKAN_HPP_NOEXCEPT;
- void beginRenderPass2( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT;
+ void
+ beginRenderPass2( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void nextSubpass2( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void endRenderPass2( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ //=== VK_VERSION_1_3 ===
+
+ void setEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void resetEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+
+ void waitEvents2( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos ) const
+ VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+
+ void pipelineBarrier2( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query ) const VULKAN_HPP_NOEXCEPT;
+
+ void copyBuffer2( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void copyBufferToImage2( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ void copyImageToBuffer2( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ void blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void resolveImage2( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void beginRendering( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void endRendering() const VULKAN_HPP_NOEXCEPT;
+
+ void setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ void setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT;
+
+ void setPrimitiveTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT;
+
+ void setViewportWithCount( ArrayProxy<const VULKAN_HPP_NAMESPACE::Viewport> const & viewports ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ void setScissorWithCount( ArrayProxy<const VULKAN_HPP_NAMESPACE::Rect2D> const & scissors ) const
+ VULKAN_HPP_NOEXCEPT;
+
+ void bindVertexBuffers2(
+ uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+
+ void setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT;
+
+ void setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT;
+
+ void setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT;
+
+ void setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT;
- void nextSubpass2( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
+ void setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT;
- void endRenderPass2( const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
+ void setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask,
+ VULKAN_HPP_NAMESPACE::StencilOp failOp,
+ VULKAN_HPP_NAMESPACE::StencilOp passOp,
+ VULKAN_HPP_NAMESPACE::StencilOp depthFailOp,
+ VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT;
+
+ void setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT;
+
+ void setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT;
+
+ void setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_debug_marker ===
- void debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT;
+ void debugMarkerBeginEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const
+ VULKAN_HPP_NOEXCEPT;
void debugMarkerEndEXT() const VULKAN_HPP_NOEXCEPT;
- void debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT;
+ void debugMarkerInsertEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const
+ VULKAN_HPP_NOEXCEPT;
# if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_queue ===
- void beginVideoCodingKHR( const VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT;
+ void beginVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo ) const
+ VULKAN_HPP_NOEXCEPT;
- void endVideoCodingKHR( const VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT;
+ void endVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo ) const
+ VULKAN_HPP_NOEXCEPT;
- void controlVideoCodingKHR( const VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT;
+ void controlVideoCodingKHR( const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo ) const
+ VULKAN_HPP_NOEXCEPT;
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
# if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_decode_queue ===
- void decodeVideoKHR( const VideoDecodeInfoKHR & frameInfo ) const VULKAN_HPP_NOEXCEPT;
+ void decodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo ) const VULKAN_HPP_NOEXCEPT;
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
//=== VK_EXT_transform_feedback ===
@@ -4229,19 +5126,19 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
- void beginTransformFeedbackEXT( uint32_t firstCounterBuffer,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
+ void beginTransformFeedbackEXT( uint32_t firstCounterBuffer,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & counterBufferOffsets
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
- void endTransformFeedbackEXT( uint32_t firstCounterBuffer,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
+ void endTransformFeedbackEXT( uint32_t firstCounterBuffer,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & counterBuffers,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & counterBufferOffsets
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
void beginQueryIndexedEXT( VULKAN_HPP_NAMESPACE::QueryPool queryPool,
@@ -4262,7 +5159,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NVX_binary_import ===
- void cuLaunchKernelNVX( const CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT;
+ void cuLaunchKernelNVX( const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_AMD_draw_indirect_count ===
@@ -4280,6 +5177,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxDrawCount,
uint32_t stride ) const VULKAN_HPP_NOEXCEPT;
+ //=== VK_KHR_dynamic_rendering ===
+
+ void beginRenderingKHR( const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT;
+
+ void endRenderingKHR() const VULKAN_HPP_NOEXCEPT;
+
//=== VK_KHR_device_group ===
void setDeviceMaskKHR( uint32_t deviceMask ) const VULKAN_HPP_NOEXCEPT;
@@ -4299,15 +5202,16 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t set,
ArrayProxy<const VULKAN_HPP_NAMESPACE::WriteDescriptorSet> const & descriptorWrites ) const VULKAN_HPP_NOEXCEPT;
+ template <typename DataType>
void pushDescriptorSetWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
VULKAN_HPP_NAMESPACE::PipelineLayout layout,
uint32_t set,
- const void * pData ) const VULKAN_HPP_NOEXCEPT;
+ DataType const & data ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_conditional_rendering ===
- void beginConditionalRenderingEXT( const ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const
- VULKAN_HPP_NOEXCEPT;
+ void beginConditionalRenderingEXT( const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT &
+ conditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT;
void endConditionalRenderingEXT() const VULKAN_HPP_NOEXCEPT;
@@ -4325,25 +5229,29 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_create_renderpass2 ===
- void beginRenderPass2KHR( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT;
+ void beginRenderPass2KHR( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const
+ VULKAN_HPP_NOEXCEPT;
- void nextSubpass2KHR( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
+ void nextSubpass2KHR( const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
- void endRenderPass2KHR( const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
+ void endRenderPass2KHR( const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_debug_utils ===
- void beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT;
+ void
+ beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT;
void endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT;
- void insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT;
+ void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const
+ VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_sample_locations ===
- void setSampleLocationsEXT( const SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT;
+ void setSampleLocationsEXT( const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo ) const
+ VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_acceleration_structure ===
@@ -4358,13 +5266,14 @@ namespace VULKAN_HPP_NAMESPACE
ArrayProxy<const uint32_t> const & indirectStrides,
ArrayProxy<const uint32_t * const> const & pMaxPrimitiveCounts ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
- void copyAccelerationStructureKHR( const CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT;
-
- void copyAccelerationStructureToMemoryKHR( const CopyAccelerationStructureToMemoryInfoKHR & info ) const
+ void copyAccelerationStructureKHR( const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const
VULKAN_HPP_NOEXCEPT;
- void copyMemoryToAccelerationStructureKHR( const CopyMemoryToAccelerationStructureInfoKHR & info ) const
- VULKAN_HPP_NOEXCEPT;
+ void copyAccelerationStructureToMemoryKHR(
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT;
+
+ void copyMemoryToAccelerationStructureKHR(
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT;
void writeAccelerationStructuresPropertiesKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
@@ -4387,13 +5296,13 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_ray_tracing ===
- void buildAccelerationStructureNV( const AccelerationStructureInfoNV & info,
- VULKAN_HPP_NAMESPACE::Buffer instanceData,
- VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
- VULKAN_HPP_NAMESPACE::Bool32 update,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
- VULKAN_HPP_NAMESPACE::Buffer scratch,
+ void buildAccelerationStructureNV( const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info,
+ VULKAN_HPP_NAMESPACE::Buffer instanceData,
+ VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
+ VULKAN_HPP_NAMESPACE::Bool32 update,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
+ VULKAN_HPP_NAMESPACE::Buffer scratch,
VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT;
void copyAccelerationStructureNV( VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
@@ -4469,20 +5378,22 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_device_diagnostic_checkpoints ===
- void setCheckpointNV( const void * pCheckpointMarker ) const VULKAN_HPP_NOEXCEPT;
+ template <typename CheckpointMarkerType>
+ void setCheckpointNV( CheckpointMarkerType const & checkpointMarker ) const VULKAN_HPP_NOEXCEPT;
//=== VK_INTEL_performance_query ===
- void setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL & markerInfo ) const;
+ void setPerformanceMarkerINTEL( const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo ) const;
- void setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL & markerInfo ) const;
+ void setPerformanceStreamMarkerINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo ) const;
- void setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL & overrideInfo ) const;
+ void setPerformanceOverrideINTEL( const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo ) const;
//=== VK_KHR_fragment_shading_rate ===
void setFragmentShadingRateKHR(
- const Extent2D & fragmentSize,
+ const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize,
const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_line_rasterization ===
@@ -4506,12 +5417,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
void bindVertexBuffers2EXT(
- uint32_t firstBinding,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
void setDepthTestEnableEXT( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT;
@@ -4531,12 +5442,12 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_device_generated_commands ===
- void preprocessGeneratedCommandsNV( const GeneratedCommandsInfoNV & generatedCommandsInfo ) const
- VULKAN_HPP_NOEXCEPT;
+ void preprocessGeneratedCommandsNV(
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT;
- void
- executeGeneratedCommandsNV( VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
- const GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT;
+ void executeGeneratedCommandsNV(
+ VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT;
void bindPipelineShaderGroupNV( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint,
VULKAN_HPP_NAMESPACE::Pipeline pipeline,
@@ -4545,31 +5456,32 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_encode_queue ===
- void encodeVideoKHR( const VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT;
+ void encodeVideoKHR( const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT;
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
//=== VK_KHR_synchronization2 ===
- void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- const DependencyInfoKHR & dependencyInfo ) const VULKAN_HPP_NOEXCEPT;
+ void setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT;
- void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask ) const VULKAN_HPP_NOEXCEPT;
+ void resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask
+ VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
- void waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfoKHR> const & dependencyInfos ) const
+ void waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos ) const
VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS;
- void pipelineBarrier2KHR( const DependencyInfoKHR & dependencyInfo ) const VULKAN_HPP_NOEXCEPT;
+ void pipelineBarrier2KHR( const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT;
- void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::QueryPool queryPool,
- uint32_t query ) const VULKAN_HPP_NOEXCEPT;
+ void writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query ) const VULKAN_HPP_NOEXCEPT;
- void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- uint32_t marker ) const VULKAN_HPP_NOEXCEPT;
+ void writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ uint32_t marker ) const VULKAN_HPP_NOEXCEPT;
//=== VK_NV_fragment_shading_rate_enums ===
@@ -4579,32 +5491,35 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
- void copyBuffer2KHR( const CopyBufferInfo2KHR & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT;
+ void copyBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT;
- void copyImage2KHR( const CopyImageInfo2KHR & copyImageInfo ) const VULKAN_HPP_NOEXCEPT;
+ void copyImage2KHR( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT;
- void copyBufferToImage2KHR( const CopyBufferToImageInfo2KHR & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT;
+ void copyBufferToImage2KHR( const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const
+ VULKAN_HPP_NOEXCEPT;
- void copyImageToBuffer2KHR( const CopyImageToBufferInfo2KHR & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT;
+ void copyImageToBuffer2KHR( const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const
+ VULKAN_HPP_NOEXCEPT;
- void blitImage2KHR( const BlitImageInfo2KHR & blitImageInfo ) const VULKAN_HPP_NOEXCEPT;
+ void blitImage2KHR( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT;
- void resolveImage2KHR( const ResolveImageInfo2KHR & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT;
+ void
+ resolveImage2KHR( const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_ray_tracing_pipeline ===
- void traceRaysKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- uint32_t width,
- uint32_t height,
- uint32_t depth ) const VULKAN_HPP_NOEXCEPT;
-
- void traceRaysIndirectKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ void traceRaysKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ uint32_t width,
+ uint32_t height,
+ uint32_t depth ) const VULKAN_HPP_NOEXCEPT;
+
+ void traceRaysIndirectKHR( const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT;
void setRayTracingPipelineStackSizeKHR( uint32_t pipelineStackSize ) const VULKAN_HPP_NOEXCEPT;
@@ -4655,14 +5570,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t instanceCount,
uint32_t firstInstance,
uint32_t stride,
- Optional<const int32_t> vertexOffset
- VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
+ Optional<const int32_t> vertexOffset
+ VULKAN_HPP_DEFAULT_ARGUMENT_NULLPTR_ASSIGNMENT ) const VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::CommandBuffer m_commandBuffer;
- VkDevice m_device;
- VkCommandPool m_commandPool;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::CommandPool m_commandPool = {};
+ VULKAN_HPP_NAMESPACE::CommandBuffer m_commandBuffer = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class CommandBuffers : public std::vector<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::CommandBuffer>
@@ -4682,10 +5597,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( allocateInfo.commandBufferCount );
for ( auto const & commandBuffer : commandBuffers )
{
- this->emplace_back( commandBuffer,
- static_cast<VkDevice>( *device ),
- static_cast<VkCommandPool>( allocateInfo.commandPool ),
- dispatcher );
+ this->emplace_back( device, commandBuffer, static_cast<VkCommandPool>( allocateInfo.commandPool ) );
}
}
else
@@ -4694,11 +5606,7 @@ namespace VULKAN_HPP_NAMESPACE
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- CommandBuffers() = default;
-# else
- CommandBuffers() = delete;
-# endif
+ CommandBuffers() = delete;
CommandBuffers( CommandBuffers const & ) = delete;
CommandBuffers( CommandBuffers && rhs ) = default;
CommandBuffers & operator=( CommandBuffers const & ) = delete;
@@ -4721,15 +5629,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateCuFunctionNVX( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkCuFunctionCreateInfoNVX *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkCuFunctionNVX *>( &m_cuFunctionNVX ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateCuFunctionNVX(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkCuFunctionCreateInfoNVX *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkCuFunctionNVX *>( &m_function ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateCuFunctionNVX" );
@@ -4738,82 +5646,74 @@ namespace VULKAN_HPP_NAMESPACE
CuFunctionNVX(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkCuFunctionNVX cuFunctionNVX,
+ VkCuFunctionNVX function,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_cuFunctionNVX( cuFunctionNVX )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_function( function )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ CuFunctionNVX( std::nullptr_t ) {}
+
~CuFunctionNVX()
{
- if ( m_cuFunctionNVX )
+ if ( m_function )
{
- getDispatcher()->vkDestroyCuFunctionNVX(
- m_device, static_cast<VkCuFunctionNVX>( m_cuFunctionNVX ), m_allocator );
+ getDispatcher()->vkDestroyCuFunctionNVX( static_cast<VkDevice>( m_device ),
+ static_cast<VkCuFunctionNVX>( m_function ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- CuFunctionNVX() = default;
-# else
- CuFunctionNVX() = delete;
-# endif
+ CuFunctionNVX() = delete;
CuFunctionNVX( CuFunctionNVX const & ) = delete;
CuFunctionNVX( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT
- : m_cuFunctionNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_cuFunctionNVX, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_function( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_function, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
CuFunctionNVX & operator=( CuFunctionNVX const & ) = delete;
CuFunctionNVX & operator =( CuFunctionNVX && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_cuFunctionNVX )
+ if ( m_function )
{
- getDispatcher()->vkDestroyCuFunctionNVX(
- m_device, static_cast<VkCuFunctionNVX>( m_cuFunctionNVX ), m_allocator );
+ getDispatcher()->vkDestroyCuFunctionNVX( static_cast<VkDevice>( m_device ),
+ static_cast<VkCuFunctionNVX>( m_function ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_cuFunctionNVX = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_cuFunctionNVX, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_function = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_function, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::CuFunctionNVX const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_cuFunctionNVX;
+ return m_function;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_cuFunctionNVX.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_cuFunctionNVX.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::CuFunctionNVX m_cuFunctionNVX;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::CuFunctionNVX m_function = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class CuModuleNVX
@@ -4831,15 +5731,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateCuModuleNVX( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkCuModuleCreateInfoNVX *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkCuModuleNVX *>( &m_cuModuleNVX ) ) );
+ device.getDispatcher()->vkCreateCuModuleNVX( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkCuModuleCreateInfoNVX *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkCuModuleNVX *>( &m_module ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateCuModuleNVX" );
@@ -4847,80 +5746,74 @@ namespace VULKAN_HPP_NAMESPACE
}
CuModuleNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkCuModuleNVX cuModuleNVX,
+ VkCuModuleNVX module,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_cuModuleNVX( cuModuleNVX )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_module( module )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ CuModuleNVX( std::nullptr_t ) {}
+
~CuModuleNVX()
{
- if ( m_cuModuleNVX )
+ if ( m_module )
{
- getDispatcher()->vkDestroyCuModuleNVX( m_device, static_cast<VkCuModuleNVX>( m_cuModuleNVX ), m_allocator );
+ getDispatcher()->vkDestroyCuModuleNVX( static_cast<VkDevice>( m_device ),
+ static_cast<VkCuModuleNVX>( m_module ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- CuModuleNVX() = default;
-# else
- CuModuleNVX() = delete;
-# endif
+ CuModuleNVX() = delete;
CuModuleNVX( CuModuleNVX const & ) = delete;
CuModuleNVX( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT
- : m_cuModuleNVX( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_cuModuleNVX, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_module( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_module, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
CuModuleNVX & operator=( CuModuleNVX const & ) = delete;
CuModuleNVX & operator =( CuModuleNVX && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_cuModuleNVX )
+ if ( m_module )
{
- getDispatcher()->vkDestroyCuModuleNVX( m_device, static_cast<VkCuModuleNVX>( m_cuModuleNVX ), m_allocator );
+ getDispatcher()->vkDestroyCuModuleNVX( static_cast<VkDevice>( m_device ),
+ static_cast<VkCuModuleNVX>( m_module ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_cuModuleNVX = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_cuModuleNVX, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_module = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_module, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::CuModuleNVX const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_cuModuleNVX;
+ return m_module;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_cuModuleNVX.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_cuModuleNVX.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::CuModuleNVX m_cuModuleNVX;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::CuModuleNVX m_module = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DebugReportCallbackEXT
@@ -4939,16 +5832,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDebugReportCallbackEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateDebugReportCallbackEXT(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkDebugReportCallbackEXT *>( &m_debugReportCallbackEXT ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkDebugReportCallbackEXT *>( &m_callback ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDebugReportCallbackEXT" );
@@ -4957,84 +5849,76 @@ namespace VULKAN_HPP_NAMESPACE
DebugReportCallbackEXT(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance,
- VkDebugReportCallbackEXT debugReportCallbackEXT,
+ VkDebugReportCallbackEXT callback,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_debugReportCallbackEXT( debugReportCallbackEXT )
- , m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_instance( *instance )
+ , m_callback( callback )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{}
+ DebugReportCallbackEXT( std::nullptr_t ) {}
+
~DebugReportCallbackEXT()
{
- if ( m_debugReportCallbackEXT )
+ if ( m_callback )
{
getDispatcher()->vkDestroyDebugReportCallbackEXT(
- m_instance, static_cast<VkDebugReportCallbackEXT>( m_debugReportCallbackEXT ), m_allocator );
+ static_cast<VkInstance>( m_instance ),
+ static_cast<VkDebugReportCallbackEXT>( m_callback ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DebugReportCallbackEXT() = default;
-# else
- DebugReportCallbackEXT() = delete;
-# endif
+ DebugReportCallbackEXT() = delete;
DebugReportCallbackEXT( DebugReportCallbackEXT const & ) = delete;
DebugReportCallbackEXT( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT
- : m_debugReportCallbackEXT(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_debugReportCallbackEXT, {} ) )
- , m_instance( rhs.m_instance )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) )
+ , m_callback( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_callback, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DebugReportCallbackEXT & operator=( DebugReportCallbackEXT const & ) = delete;
DebugReportCallbackEXT & operator=( DebugReportCallbackEXT && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_debugReportCallbackEXT )
+ if ( m_callback )
{
getDispatcher()->vkDestroyDebugReportCallbackEXT(
- m_instance, static_cast<VkDebugReportCallbackEXT>( m_debugReportCallbackEXT ), m_allocator );
+ static_cast<VkInstance>( m_instance ),
+ static_cast<VkDebugReportCallbackEXT>( m_callback ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_debugReportCallbackEXT =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_debugReportCallbackEXT, {} );
- m_instance = rhs.m_instance;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} );
+ m_callback = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_callback, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_debugReportCallbackEXT;
+ return m_callback;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Instance getInstance() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_debugReportCallbackEXT.operator bool();
+ return m_instance;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
{
- return m_debugReportCallbackEXT.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT m_debugReportCallbackEXT;
- VkInstance m_instance;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Instance m_instance = {};
+ VULKAN_HPP_NAMESPACE::DebugReportCallbackEXT m_callback = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr;
};
class DebugUtilsMessengerEXT
@@ -5053,16 +5937,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDebugUtilsMessengerEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateDebugUtilsMessengerEXT(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkDebugUtilsMessengerEXT *>( &m_debugUtilsMessengerEXT ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkDebugUtilsMessengerEXT *>( &m_messenger ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDebugUtilsMessengerEXT" );
@@ -5071,84 +5954,76 @@ namespace VULKAN_HPP_NAMESPACE
DebugUtilsMessengerEXT(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance,
- VkDebugUtilsMessengerEXT debugUtilsMessengerEXT,
+ VkDebugUtilsMessengerEXT messenger,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_debugUtilsMessengerEXT( debugUtilsMessengerEXT )
- , m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_instance( *instance )
+ , m_messenger( messenger )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{}
+ DebugUtilsMessengerEXT( std::nullptr_t ) {}
+
~DebugUtilsMessengerEXT()
{
- if ( m_debugUtilsMessengerEXT )
+ if ( m_messenger )
{
getDispatcher()->vkDestroyDebugUtilsMessengerEXT(
- m_instance, static_cast<VkDebugUtilsMessengerEXT>( m_debugUtilsMessengerEXT ), m_allocator );
+ static_cast<VkInstance>( m_instance ),
+ static_cast<VkDebugUtilsMessengerEXT>( m_messenger ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DebugUtilsMessengerEXT() = default;
-# else
- DebugUtilsMessengerEXT() = delete;
-# endif
+ DebugUtilsMessengerEXT() = delete;
DebugUtilsMessengerEXT( DebugUtilsMessengerEXT const & ) = delete;
DebugUtilsMessengerEXT( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT
- : m_debugUtilsMessengerEXT(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_debugUtilsMessengerEXT, {} ) )
- , m_instance( rhs.m_instance )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) )
+ , m_messenger( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_messenger, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT const & ) = delete;
DebugUtilsMessengerEXT & operator=( DebugUtilsMessengerEXT && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_debugUtilsMessengerEXT )
+ if ( m_messenger )
{
getDispatcher()->vkDestroyDebugUtilsMessengerEXT(
- m_instance, static_cast<VkDebugUtilsMessengerEXT>( m_debugUtilsMessengerEXT ), m_allocator );
+ static_cast<VkInstance>( m_instance ),
+ static_cast<VkDebugUtilsMessengerEXT>( m_messenger ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_debugUtilsMessengerEXT =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_debugUtilsMessengerEXT, {} );
- m_instance = rhs.m_instance;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} );
+ m_messenger = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_messenger, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_debugUtilsMessengerEXT;
+ return m_messenger;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Instance getInstance() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_debugUtilsMessengerEXT.operator bool();
+ return m_instance;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
{
- return m_debugUtilsMessengerEXT.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT m_debugUtilsMessengerEXT;
- VkInstance m_instance;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Instance m_instance = {};
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessengerEXT m_messenger = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr;
};
class DeferredOperationKHR
@@ -5166,15 +6041,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDeferredOperationKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateDeferredOperationKHR(
static_cast<VkDevice>( *device ),
- m_allocator,
- reinterpret_cast<VkDeferredOperationKHR *>( &m_deferredOperationKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkDeferredOperationKHR *>( &m_operation ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDeferredOperationKHR" );
@@ -5183,78 +6057,70 @@ namespace VULKAN_HPP_NAMESPACE
DeferredOperationKHR(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkDeferredOperationKHR deferredOperationKHR,
+ VkDeferredOperationKHR operation,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_deferredOperationKHR( deferredOperationKHR )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_operation( operation )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ DeferredOperationKHR( std::nullptr_t ) {}
+
~DeferredOperationKHR()
{
- if ( m_deferredOperationKHR )
+ if ( m_operation )
{
getDispatcher()->vkDestroyDeferredOperationKHR(
- m_device, static_cast<VkDeferredOperationKHR>( m_deferredOperationKHR ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkDeferredOperationKHR>( m_operation ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DeferredOperationKHR() = default;
-# else
- DeferredOperationKHR() = delete;
-# endif
+ DeferredOperationKHR() = delete;
DeferredOperationKHR( DeferredOperationKHR const & ) = delete;
DeferredOperationKHR( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_deferredOperationKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_deferredOperationKHR,
- {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_operation( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_operation, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DeferredOperationKHR & operator=( DeferredOperationKHR const & ) = delete;
DeferredOperationKHR & operator=( DeferredOperationKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_deferredOperationKHR )
+ if ( m_operation )
{
getDispatcher()->vkDestroyDeferredOperationKHR(
- m_device, static_cast<VkDeferredOperationKHR>( m_deferredOperationKHR ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkDeferredOperationKHR>( m_operation ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_deferredOperationKHR =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_deferredOperationKHR, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_operation = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_operation, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::DeferredOperationKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_deferredOperationKHR;
+ return m_operation;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_deferredOperationKHR.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_deferredOperationKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_KHR_deferred_host_operations ===
@@ -5265,10 +6131,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result join() const;
private:
- VULKAN_HPP_NAMESPACE::DeferredOperationKHR m_deferredOperationKHR;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR m_operation = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DescriptorPool
@@ -5287,15 +6153,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateDescriptorPool( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkDescriptorPoolCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkDescriptorPool *>( &m_descriptorPool ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateDescriptorPool(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkDescriptorPoolCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkDescriptorPool *>( &m_descriptorPool ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDescriptorPool" );
@@ -5306,33 +6172,31 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkDescriptorPool descriptorPool,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_descriptorPool( descriptorPool )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_descriptorPool( descriptorPool )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ DescriptorPool( std::nullptr_t ) {}
+
~DescriptorPool()
{
if ( m_descriptorPool )
{
- getDispatcher()->vkDestroyDescriptorPool(
- m_device, static_cast<VkDescriptorPool>( m_descriptorPool ), m_allocator );
+ getDispatcher()->vkDestroyDescriptorPool( static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorPool>( m_descriptorPool ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DescriptorPool() = default;
-# else
- DescriptorPool() = delete;
-# endif
+ DescriptorPool() = delete;
DescriptorPool( DescriptorPool const & ) = delete;
DescriptorPool( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT
- : m_descriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_descriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DescriptorPool & operator=( DescriptorPool const & ) = delete;
DescriptorPool & operator =( DescriptorPool && rhs ) VULKAN_HPP_NOEXCEPT
@@ -5341,13 +6205,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_descriptorPool )
{
- getDispatcher()->vkDestroyDescriptorPool(
- m_device, static_cast<VkDescriptorPool>( m_descriptorPool ), m_allocator );
+ getDispatcher()->vkDestroyDescriptorPool( static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorPool>( m_descriptorPool ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_descriptorPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -5357,23 +6222,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_descriptorPool;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_descriptorPool.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_descriptorPool.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
@@ -5381,10 +6239,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DescriptorSet
@@ -5398,45 +6256,35 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eDescriptorSet;
public:
- DescriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkDescriptorSet descriptorSet,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorPool const & descriptorPool )
- : m_descriptorSet( descriptorSet )
- , m_device( *device )
- , m_descriptorPool( *descriptorPool )
+ DescriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
+ VkDescriptorSet descriptorSet,
+ VkDescriptorPool descriptorPool )
+ : m_device( *device )
+ , m_descriptorPool( descriptorPool )
+ , m_descriptorSet( descriptorSet )
, m_dispatcher( device.getDispatcher() )
{}
- DescriptorSet( VkDescriptorSet descriptorSet,
- VkDevice device,
- VkDescriptorPool descriptorPool,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher )
- : m_descriptorSet( descriptorSet )
- , m_device( device )
- , m_descriptorPool( descriptorPool )
- , m_dispatcher( dispatcher )
- {}
+ DescriptorSet( std::nullptr_t ) {}
~DescriptorSet()
{
if ( m_descriptorSet )
{
- getDispatcher()->vkFreeDescriptorSets(
- m_device, m_descriptorPool, 1, reinterpret_cast<VkDescriptorSet const *>( &m_descriptorSet ) );
+ getDispatcher()->vkFreeDescriptorSets( static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorPool>( m_descriptorPool ),
+ 1,
+ reinterpret_cast<VkDescriptorSet const *>( &m_descriptorSet ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DescriptorSet() = default;
-# else
- DescriptorSet() = delete;
-# endif
+ DescriptorSet() = delete;
DescriptorSet( DescriptorSet const & ) = delete;
DescriptorSet( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT
- : m_descriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSet, {} ) )
- , m_device( rhs.m_device )
- , m_descriptorPool( rhs.m_descriptorPool )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_descriptorPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} ) )
+ , m_descriptorSet( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSet, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DescriptorSet & operator=( DescriptorSet const & ) = delete;
DescriptorSet & operator =( DescriptorSet && rhs ) VULKAN_HPP_NOEXCEPT
@@ -5445,13 +6293,15 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_descriptorSet )
{
- getDispatcher()->vkFreeDescriptorSets(
- m_device, m_descriptorPool, 1, reinterpret_cast<VkDescriptorSet const *>( &m_descriptorSet ) );
+ getDispatcher()->vkFreeDescriptorSets( static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorPool>( m_descriptorPool ),
+ 1,
+ reinterpret_cast<VkDescriptorSet const *>( &m_descriptorSet ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_descriptorPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorPool, {} );
m_descriptorSet = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSet, {} );
- m_device = rhs.m_device;
- m_descriptorPool = rhs.m_descriptorPool;
- m_dispatcher = rhs.m_dispatcher;
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -5461,39 +6311,34 @@ namespace VULKAN_HPP_NAMESPACE
return m_descriptorSet;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_descriptorSet.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_descriptorSet.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_1 ===
+ template <typename DataType>
void updateWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- const void * pData ) const VULKAN_HPP_NOEXCEPT;
+ DataType const & data ) const VULKAN_HPP_NOEXCEPT;
//=== VK_KHR_descriptor_update_template ===
+ template <typename DataType>
void updateWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- const void * pData ) const VULKAN_HPP_NOEXCEPT;
+ DataType const & data ) const VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::DescriptorSet m_descriptorSet;
- VkDevice m_device;
- VkDescriptorPool m_descriptorPool;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::DescriptorPool m_descriptorPool = {};
+ VULKAN_HPP_NAMESPACE::DescriptorSet m_descriptorSet = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DescriptorSets : public std::vector<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DescriptorSet>
@@ -5513,10 +6358,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( allocateInfo.descriptorSetCount );
for ( auto const & descriptorSet : descriptorSets )
{
- this->emplace_back( descriptorSet,
- static_cast<VkDevice>( *device ),
- static_cast<VkDescriptorPool>( allocateInfo.descriptorPool ),
- dispatcher );
+ this->emplace_back( device, descriptorSet, static_cast<VkDescriptorPool>( allocateInfo.descriptorPool ) );
}
}
else
@@ -5525,11 +6367,7 @@ namespace VULKAN_HPP_NAMESPACE
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DescriptorSets() = default;
-# else
- DescriptorSets() = delete;
-# endif
+ DescriptorSets() = delete;
DescriptorSets( DescriptorSets const & ) = delete;
DescriptorSets( DescriptorSets && rhs ) = default;
DescriptorSets & operator=( DescriptorSets const & ) = delete;
@@ -5552,15 +6390,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDescriptorSetLayout(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateDescriptorSetLayout(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkDescriptorSetLayoutCreateInfo *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkDescriptorSetLayout *>( &m_descriptorSetLayout ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -5572,34 +6409,33 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkDescriptorSetLayout descriptorSetLayout,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_descriptorSetLayout( descriptorSetLayout )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_descriptorSetLayout( descriptorSetLayout )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ DescriptorSetLayout( std::nullptr_t ) {}
+
~DescriptorSetLayout()
{
if ( m_descriptorSetLayout )
{
getDispatcher()->vkDestroyDescriptorSetLayout(
- m_device, static_cast<VkDescriptorSetLayout>( m_descriptorSetLayout ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorSetLayout>( m_descriptorSetLayout ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DescriptorSetLayout() = default;
-# else
- DescriptorSetLayout() = delete;
-# endif
+ DescriptorSetLayout() = delete;
DescriptorSetLayout( DescriptorSetLayout const & ) = delete;
DescriptorSetLayout( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT
- : m_descriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSetLayout,
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_descriptorSetLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSetLayout,
{} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DescriptorSetLayout & operator=( DescriptorSetLayout const & ) = delete;
DescriptorSetLayout & operator =( DescriptorSetLayout && rhs ) VULKAN_HPP_NOEXCEPT
@@ -5609,13 +6445,15 @@ namespace VULKAN_HPP_NAMESPACE
if ( m_descriptorSetLayout )
{
getDispatcher()->vkDestroyDescriptorSetLayout(
- m_device, static_cast<VkDescriptorSetLayout>( m_descriptorSetLayout ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorSetLayout>( m_descriptorSetLayout ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_descriptorSetLayout =
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorSetLayout, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -5625,29 +6463,22 @@ namespace VULKAN_HPP_NAMESPACE
return m_descriptorSetLayout;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_descriptorSetLayout.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_descriptorSetLayout.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::DescriptorSetLayout m_descriptorSetLayout;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::DescriptorSetLayout m_descriptorSetLayout = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DescriptorUpdateTemplate
@@ -5666,15 +6497,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDescriptorUpdateTemplate(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateDescriptorUpdateTemplate(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkDescriptorUpdateTemplateCreateInfo *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkDescriptorUpdateTemplate *>( &m_descriptorUpdateTemplate ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -5686,34 +6516,33 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkDescriptorUpdateTemplate descriptorUpdateTemplate,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_descriptorUpdateTemplate( descriptorUpdateTemplate )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_descriptorUpdateTemplate( descriptorUpdateTemplate )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ DescriptorUpdateTemplate( std::nullptr_t ) {}
+
~DescriptorUpdateTemplate()
{
if ( m_descriptorUpdateTemplate )
{
getDispatcher()->vkDestroyDescriptorUpdateTemplate(
- m_device, static_cast<VkDescriptorUpdateTemplate>( m_descriptorUpdateTemplate ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorUpdateTemplate>( m_descriptorUpdateTemplate ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DescriptorUpdateTemplate() = default;
-# else
- DescriptorUpdateTemplate() = delete;
-# endif
+ DescriptorUpdateTemplate() = delete;
DescriptorUpdateTemplate( DescriptorUpdateTemplate const & ) = delete;
DescriptorUpdateTemplate( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT
- : m_descriptorUpdateTemplate(
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_descriptorUpdateTemplate(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorUpdateTemplate, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate const & ) = delete;
DescriptorUpdateTemplate & operator=( DescriptorUpdateTemplate && rhs ) VULKAN_HPP_NOEXCEPT
@@ -5723,13 +6552,15 @@ namespace VULKAN_HPP_NAMESPACE
if ( m_descriptorUpdateTemplate )
{
getDispatcher()->vkDestroyDescriptorUpdateTemplate(
- m_device, static_cast<VkDescriptorUpdateTemplate>( m_descriptorUpdateTemplate ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkDescriptorUpdateTemplate>( m_descriptorUpdateTemplate ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_descriptorUpdateTemplate =
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_descriptorUpdateTemplate, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -5739,29 +6570,22 @@ namespace VULKAN_HPP_NAMESPACE
return m_descriptorUpdateTemplate;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_descriptorUpdateTemplate.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_descriptorUpdateTemplate.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate m_descriptorUpdateTemplate;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate m_descriptorUpdateTemplate = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DeviceMemory
@@ -5780,15 +6604,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkAllocateMemory( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkMemoryAllocateInfo *>( &allocateInfo ),
- m_allocator,
- reinterpret_cast<VkDeviceMemory *>( &m_deviceMemory ) ) );
+ device.getDispatcher()->vkAllocateMemory( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkMemoryAllocateInfo *>( &allocateInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkDeviceMemory *>( &m_memory ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkAllocateMemory" );
@@ -5797,80 +6620,74 @@ namespace VULKAN_HPP_NAMESPACE
DeviceMemory(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkDeviceMemory deviceMemory,
+ VkDeviceMemory memory,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_deviceMemory( deviceMemory )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_memory( memory )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ DeviceMemory( std::nullptr_t ) {}
+
~DeviceMemory()
{
- if ( m_deviceMemory )
+ if ( m_memory )
{
- getDispatcher()->vkFreeMemory( m_device, static_cast<VkDeviceMemory>( m_deviceMemory ), m_allocator );
+ getDispatcher()->vkFreeMemory( static_cast<VkDevice>( m_device ),
+ static_cast<VkDeviceMemory>( m_memory ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DeviceMemory() = default;
-# else
- DeviceMemory() = delete;
-# endif
+ DeviceMemory() = delete;
DeviceMemory( DeviceMemory const & ) = delete;
DeviceMemory( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT
- : m_deviceMemory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_deviceMemory, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_memory( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_memory, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DeviceMemory & operator=( DeviceMemory const & ) = delete;
DeviceMemory & operator =( DeviceMemory && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_deviceMemory )
+ if ( m_memory )
{
- getDispatcher()->vkFreeMemory( m_device, static_cast<VkDeviceMemory>( m_deviceMemory ), m_allocator );
+ getDispatcher()->vkFreeMemory( static_cast<VkDevice>( m_device ),
+ static_cast<VkDeviceMemory>( m_memory ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_deviceMemory = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_deviceMemory, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_memory = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_memory, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::DeviceMemory const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_deviceMemory;
- }
-
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
+ return m_memory;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_deviceMemory.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_deviceMemory.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
VULKAN_HPP_NODISCARD void *
- mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset,
- VULKAN_HPP_NAMESPACE::DeviceSize size,
+ mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset,
+ VULKAN_HPP_NAMESPACE::DeviceSize size,
VULKAN_HPP_NAMESPACE::MemoryMapFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
void unmapMemory() const VULKAN_HPP_NOEXCEPT;
@@ -5881,14 +6698,18 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_external_memory_win32 ===
VULKAN_HPP_NODISCARD HANDLE
- getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const;
+ getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const;
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+ //=== VK_EXT_pageable_device_local_memory ===
+
+ void setPriorityEXT( float priority ) const VULKAN_HPP_NOEXCEPT;
+
private:
- VULKAN_HPP_NAMESPACE::DeviceMemory m_deviceMemory;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::DeviceMemory m_memory = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class DisplayKHR
@@ -5908,10 +6729,10 @@ namespace VULKAN_HPP_NAMESPACE
: m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkGetDrmDisplayEXT( static_cast<VkPhysicalDevice>( *physicalDevice ),
- drmFd,
- connectorId,
- reinterpret_cast<VkDisplayKHR *>( &m_displayKHR ) ) );
+ physicalDevice.getDispatcher()->vkGetDrmDisplayEXT( static_cast<VkPhysicalDevice>( *physicalDevice ),
+ drmFd,
+ connectorId,
+ reinterpret_cast<VkDisplayKHR *>( &m_display ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkGetDrmDisplayEXT" );
@@ -5924,11 +6745,12 @@ namespace VULKAN_HPP_NAMESPACE
RROutput rrOutput )
: m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkGetRandROutputDisplayEXT( static_cast<VkPhysicalDevice>( *physicalDevice ),
- &dpy,
- rrOutput,
- reinterpret_cast<VkDisplayKHR *>( &m_displayKHR ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( physicalDevice.getDispatcher()->vkGetRandROutputDisplayEXT(
+ static_cast<VkPhysicalDevice>( *physicalDevice ),
+ &dpy,
+ rrOutput,
+ reinterpret_cast<VkDisplayKHR *>( &m_display ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkGetRandROutputDisplayEXT" );
@@ -5942,9 +6764,9 @@ namespace VULKAN_HPP_NAMESPACE
: m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkGetWinrtDisplayNV( static_cast<VkPhysicalDevice>( *physicalDevice ),
- deviceRelativeId,
- reinterpret_cast<VkDisplayKHR *>( &m_displayKHR ) ) );
+ physicalDevice.getDispatcher()->vkGetWinrtDisplayNV( static_cast<VkPhysicalDevice>( *physicalDevice ),
+ deviceRelativeId,
+ reinterpret_cast<VkDisplayKHR *>( &m_display ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkGetWinrtDisplayNV" );
@@ -5953,80 +6775,69 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
DisplayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice,
- VkDisplayKHR displayKHR )
- : m_displayKHR( displayKHR )
- , m_physicalDevice( *physicalDevice )
- , m_dispatcher( physicalDevice.getDispatcher() )
+ VkDisplayKHR display )
+ : m_physicalDevice( *physicalDevice ), m_display( display ), m_dispatcher( physicalDevice.getDispatcher() )
{}
- DisplayKHR( VkDisplayKHR displayKHR,
- VkPhysicalDevice physicalDevice,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * dispatcher )
- : m_displayKHR( displayKHR ), m_physicalDevice( physicalDevice ), m_dispatcher( dispatcher )
- {}
+ DisplayKHR( std::nullptr_t ) {}
~DisplayKHR()
{
- if ( m_displayKHR )
+ if ( m_display )
{
- getDispatcher()->vkReleaseDisplayEXT( m_physicalDevice, static_cast<VkDisplayKHR>( m_displayKHR ) );
+ getDispatcher()->vkReleaseDisplayEXT( static_cast<VkPhysicalDevice>( m_physicalDevice ),
+ static_cast<VkDisplayKHR>( m_display ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DisplayKHR() = default;
-# else
- DisplayKHR() = delete;
-# endif
+ DisplayKHR() = delete;
DisplayKHR( DisplayKHR const & ) = delete;
DisplayKHR( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_displayKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayKHR, {} ) )
- , m_physicalDevice( rhs.m_physicalDevice )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_physicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) )
+ , m_display( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_display, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DisplayKHR & operator=( DisplayKHR const & ) = delete;
DisplayKHR & operator =( DisplayKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_displayKHR )
+ if ( m_display )
{
- getDispatcher()->vkReleaseDisplayEXT( m_physicalDevice, static_cast<VkDisplayKHR>( m_displayKHR ) );
+ getDispatcher()->vkReleaseDisplayEXT( static_cast<VkPhysicalDevice>( m_physicalDevice ),
+ static_cast<VkDisplayKHR>( m_display ) );
}
- m_displayKHR = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayKHR, {} );
- m_physicalDevice = rhs.m_physicalDevice;
- m_dispatcher = rhs.m_dispatcher;
+ m_physicalDevice = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} );
+ m_display = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_display, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::DisplayKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_displayKHR;
- }
-
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
+ return m_display;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::PhysicalDevice getPhysicalDevice() const
{
- return m_displayKHR.operator bool();
+ return m_physicalDevice;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
{
- return m_displayKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_KHR_display ===
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR> getModeProperties() const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR createMode(
+ VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr ) const;
+
//=== VK_KHR_get_display_properties2 ===
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR> getModeProperties2() const;
@@ -6038,9 +6849,9 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
private:
- VULKAN_HPP_NAMESPACE::DisplayKHR m_displayKHR;
- VkPhysicalDevice m_physicalDevice;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {};
+ VULKAN_HPP_NAMESPACE::DisplayKHR m_display = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr;
};
class DisplayKHRs : public std::vector<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR>
@@ -6063,15 +6874,15 @@ namespace VULKAN_HPP_NAMESPACE
displays.resize( displayCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( dispatcher->vkGetDisplayPlaneSupportedDisplaysKHR(
static_cast<VkPhysicalDevice>( *physicalDevice ), planeIndex, &displayCount, displays.data() ) );
- VULKAN_HPP_ASSERT( displayCount <= displays.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
+ VULKAN_HPP_ASSERT( displayCount <= displays.size() );
this->reserve( displayCount );
for ( auto const & displayKHR : displays )
{
- this->emplace_back( displayKHR, static_cast<VkPhysicalDevice>( *physicalDevice ), dispatcher );
+ this->emplace_back( physicalDevice, displayKHR );
}
}
else
@@ -6080,11 +6891,7 @@ namespace VULKAN_HPP_NAMESPACE
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DisplayKHRs() = default;
-# else
- DisplayKHRs() = delete;
-# endif
+ DisplayKHRs() = delete;
DisplayKHRs( DisplayKHRs const & ) = delete;
DisplayKHRs( DisplayKHRs && rhs ) = default;
DisplayKHRs & operator=( DisplayKHRs const & ) = delete;
@@ -6103,15 +6910,14 @@ namespace VULKAN_HPP_NAMESPACE
public:
DisplayModeKHR(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice,
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display,
VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_physicalDevice( *physicalDevice ), m_dispatcher( physicalDevice.getDispatcher() )
+ : m_physicalDevice( display.getPhysicalDevice() ), m_dispatcher( display.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDisplayModeKHR(
- static_cast<VkPhysicalDevice>( *physicalDevice ),
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( display.getDispatcher()->vkCreateDisplayModeKHR(
+ static_cast<VkPhysicalDevice>( display.getPhysicalDevice() ),
static_cast<VkDisplayKHR>( *display ),
reinterpret_cast<const VkDisplayModeCreateInfoKHR *>( &createInfo ),
reinterpret_cast<const VkAllocationCallbacks *>(
@@ -6123,30 +6929,30 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- DisplayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice const & physicalDevice,
- VkDisplayModeKHR displayModeKHR )
- : m_displayModeKHR( displayModeKHR )
- , m_physicalDevice( *physicalDevice )
- , m_dispatcher( physicalDevice.getDispatcher() )
+ DisplayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display,
+ VkDisplayModeKHR displayModeKHR )
+ : m_physicalDevice( display.getPhysicalDevice() )
+ , m_displayModeKHR( displayModeKHR )
+ , m_dispatcher( display.getDispatcher() )
{}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- DisplayModeKHR() = default;
-# else
- DisplayModeKHR() = delete;
-# endif
+ DisplayModeKHR( std::nullptr_t ) {}
+
+ DisplayModeKHR() = delete;
DisplayModeKHR( DisplayModeKHR const & ) = delete;
DisplayModeKHR( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_displayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayModeKHR, {} ) )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_physicalDevice( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} ) )
+ , m_displayModeKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayModeKHR, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
DisplayModeKHR & operator=( DisplayModeKHR const & ) = delete;
DisplayModeKHR & operator =( DisplayModeKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
+ m_physicalDevice = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_physicalDevice, {} );
m_displayModeKHR = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_displayModeKHR, {} );
- m_dispatcher = rhs.m_dispatcher;
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -6162,27 +6968,15 @@ namespace VULKAN_HPP_NAMESPACE
return m_dispatcher;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_displayModeKHR.operator bool();
- }
-
- bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return m_displayModeKHR.operator!();
- }
-# endif
-
//=== VK_KHR_display ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR
getDisplayPlaneCapabilities( uint32_t planeIndex ) const;
private:
- VULKAN_HPP_NAMESPACE::DisplayModeKHR m_displayModeKHR;
- VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::PhysicalDevice m_physicalDevice = {};
+ VULKAN_HPP_NAMESPACE::DisplayModeKHR m_displayModeKHR = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr;
};
class Event
@@ -6200,15 +6994,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateEvent( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkEventCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkEvent *>( &m_event ) ) );
+ device.getDispatcher()->vkCreateEvent( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkEventCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkEvent *>( &m_event ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateEvent" );
@@ -6218,32 +7011,31 @@ namespace VULKAN_HPP_NAMESPACE
Event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkEvent event,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_event( event )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_event( event )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Event( std::nullptr_t ) {}
+
~Event()
{
if ( m_event )
{
- getDispatcher()->vkDestroyEvent( m_device, static_cast<VkEvent>( m_event ), m_allocator );
+ getDispatcher()->vkDestroyEvent( static_cast<VkDevice>( m_device ),
+ static_cast<VkEvent>( m_event ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Event() = default;
-# else
- Event() = delete;
-# endif
+ Event() = delete;
Event( Event const & ) = delete;
Event( Event && rhs ) VULKAN_HPP_NOEXCEPT
- : m_event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_event, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_event( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_event, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Event & operator=( Event const & ) = delete;
Event & operator =( Event && rhs ) VULKAN_HPP_NOEXCEPT
@@ -6252,12 +7044,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_event )
{
- getDispatcher()->vkDestroyEvent( m_device, static_cast<VkEvent>( m_event ), m_allocator );
+ getDispatcher()->vkDestroyEvent( static_cast<VkDevice>( m_device ),
+ static_cast<VkEvent>( m_event ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_event = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_event, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -6267,23 +7061,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_event;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_event.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_event.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
@@ -6294,10 +7081,10 @@ namespace VULKAN_HPP_NAMESPACE
void reset() const;
private:
- VULKAN_HPP_NAMESPACE::Event m_event;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Event m_event = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Fence
@@ -6315,15 +7102,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateFence( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkFenceCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkFence *>( &m_fence ) ) );
+ device.getDispatcher()->vkCreateFence( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkFenceCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkFence *>( &m_fence ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateFence" );
@@ -6334,15 +7120,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkRegisterDeviceEventEXT( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkDeviceEventInfoEXT *>( &deviceEventInfo ),
- m_allocator,
- reinterpret_cast<VkFence *>( &m_fence ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkRegisterDeviceEventEXT(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkDeviceEventInfoEXT *>( &deviceEventInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkFence *>( &m_fence ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkRegisterDeviceEventEXT" );
@@ -6354,16 +7140,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkRegisterDisplayEventEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkRegisterDisplayEventEXT(
static_cast<VkDevice>( *device ),
static_cast<VkDisplayKHR>( *display ),
reinterpret_cast<const VkDisplayEventInfoEXT *>( &displayEventInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkFence *>( &m_fence ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -6374,32 +7159,31 @@ namespace VULKAN_HPP_NAMESPACE
Fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkFence fence,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_fence( fence )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_fence( fence )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Fence( std::nullptr_t ) {}
+
~Fence()
{
if ( m_fence )
{
- getDispatcher()->vkDestroyFence( m_device, static_cast<VkFence>( m_fence ), m_allocator );
+ getDispatcher()->vkDestroyFence( static_cast<VkDevice>( m_device ),
+ static_cast<VkFence>( m_fence ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Fence() = default;
-# else
- Fence() = delete;
-# endif
+ Fence() = delete;
Fence( Fence const & ) = delete;
Fence( Fence && rhs ) VULKAN_HPP_NOEXCEPT
- : m_fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_fence, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_fence( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_fence, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Fence & operator=( Fence const & ) = delete;
Fence & operator =( Fence && rhs ) VULKAN_HPP_NOEXCEPT
@@ -6408,12 +7192,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_fence )
{
- getDispatcher()->vkDestroyFence( m_device, static_cast<VkFence>( m_fence ), m_allocator );
+ getDispatcher()->vkDestroyFence( static_cast<VkDevice>( m_device ),
+ static_cast<VkFence>( m_fence ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_fence = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_fence, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -6423,33 +7209,26 @@ namespace VULKAN_HPP_NAMESPACE
return m_fence;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_fence.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_fence.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result getStatus() const;
private:
- VULKAN_HPP_NAMESPACE::Fence m_fence;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Fence m_fence = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Framebuffer
@@ -6467,15 +7246,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateFramebuffer( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkFramebufferCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkFramebuffer *>( &m_framebuffer ) ) );
+ device.getDispatcher()->vkCreateFramebuffer( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkFramebufferCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkFramebuffer *>( &m_framebuffer ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateFramebuffer" );
@@ -6485,32 +7263,31 @@ namespace VULKAN_HPP_NAMESPACE
Framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkFramebuffer framebuffer,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_framebuffer( framebuffer )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_framebuffer( framebuffer )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Framebuffer( std::nullptr_t ) {}
+
~Framebuffer()
{
if ( m_framebuffer )
{
- getDispatcher()->vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( m_framebuffer ), m_allocator );
+ getDispatcher()->vkDestroyFramebuffer( static_cast<VkDevice>( m_device ),
+ static_cast<VkFramebuffer>( m_framebuffer ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Framebuffer() = default;
-# else
- Framebuffer() = delete;
-# endif
+ Framebuffer() = delete;
Framebuffer( Framebuffer const & ) = delete;
Framebuffer( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT
- : m_framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_framebuffer, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_framebuffer( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_framebuffer, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Framebuffer & operator=( Framebuffer const & ) = delete;
Framebuffer & operator =( Framebuffer && rhs ) VULKAN_HPP_NOEXCEPT
@@ -6519,12 +7296,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_framebuffer )
{
- getDispatcher()->vkDestroyFramebuffer( m_device, static_cast<VkFramebuffer>( m_framebuffer ), m_allocator );
+ getDispatcher()->vkDestroyFramebuffer( static_cast<VkDevice>( m_device ),
+ static_cast<VkFramebuffer>( m_framebuffer ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_framebuffer = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_framebuffer, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -6534,29 +7313,22 @@ namespace VULKAN_HPP_NAMESPACE
return m_framebuffer;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_framebuffer.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_framebuffer.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::Framebuffer m_framebuffer;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Framebuffer m_framebuffer = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Image
@@ -6574,15 +7346,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateImage( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkImageCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkImage *>( &m_image ) ) );
+ device.getDispatcher()->vkCreateImage( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkImageCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkImage *>( &m_image ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateImage" );
@@ -6592,32 +7363,31 @@ namespace VULKAN_HPP_NAMESPACE
Image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkImage image,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_image( image )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_image( image )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Image( std::nullptr_t ) {}
+
~Image()
{
if ( m_image )
{
- getDispatcher()->vkDestroyImage( m_device, static_cast<VkImage>( m_image ), m_allocator );
+ getDispatcher()->vkDestroyImage( static_cast<VkDevice>( m_device ),
+ static_cast<VkImage>( m_image ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Image() = default;
-# else
- Image() = delete;
-# endif
+ Image() = delete;
Image( Image const & ) = delete;
Image( Image && rhs ) VULKAN_HPP_NOEXCEPT
- : m_image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_image, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_image( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_image, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Image & operator=( Image const & ) = delete;
Image & operator =( Image && rhs ) VULKAN_HPP_NOEXCEPT
@@ -6626,12 +7396,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_image )
{
- getDispatcher()->vkDestroyImage( m_device, static_cast<VkImage>( m_image ), m_allocator );
+ getDispatcher()->vkDestroyImage( static_cast<VkDevice>( m_device ),
+ static_cast<VkImage>( m_image ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_image = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_image, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -6641,23 +7413,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_image;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_image.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_image.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
@@ -6669,7 +7434,7 @@ namespace VULKAN_HPP_NAMESPACE
getSparseMemoryRequirements() const VULKAN_HPP_NOEXCEPT;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::SubresourceLayout
- getSubresourceLayout( const ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT;
+ getSubresourceLayout( const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT;
//=== VK_EXT_image_drm_format_modifier ===
@@ -6677,10 +7442,10 @@ namespace VULKAN_HPP_NAMESPACE
getDrmFormatModifierPropertiesEXT() const;
private:
- VULKAN_HPP_NAMESPACE::Image m_image;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Image m_image = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class ImageView
@@ -6698,15 +7463,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateImageView( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkImageViewCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkImageView *>( &m_imageView ) ) );
+ device.getDispatcher()->vkCreateImageView( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkImageViewCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkImageView *>( &m_imageView ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateImageView" );
@@ -6716,32 +7480,31 @@ namespace VULKAN_HPP_NAMESPACE
ImageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkImageView imageView,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_imageView( imageView )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_imageView( imageView )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ ImageView( std::nullptr_t ) {}
+
~ImageView()
{
if ( m_imageView )
{
- getDispatcher()->vkDestroyImageView( m_device, static_cast<VkImageView>( m_imageView ), m_allocator );
+ getDispatcher()->vkDestroyImageView( static_cast<VkDevice>( m_device ),
+ static_cast<VkImageView>( m_imageView ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- ImageView() = default;
-# else
- ImageView() = delete;
-# endif
+ ImageView() = delete;
ImageView( ImageView const & ) = delete;
ImageView( ImageView && rhs ) VULKAN_HPP_NOEXCEPT
- : m_imageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_imageView, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_imageView( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_imageView, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
ImageView & operator=( ImageView const & ) = delete;
ImageView & operator =( ImageView && rhs ) VULKAN_HPP_NOEXCEPT
@@ -6750,12 +7513,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_imageView )
{
- getDispatcher()->vkDestroyImageView( m_device, static_cast<VkImageView>( m_imageView ), m_allocator );
+ getDispatcher()->vkDestroyImageView( static_cast<VkDevice>( m_device ),
+ static_cast<VkImageView>( m_imageView ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_imageView = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_imageView, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -6765,33 +7530,26 @@ namespace VULKAN_HPP_NAMESPACE
return m_imageView;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_imageView.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_imageView.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_NVX_image_view_handle ===
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX getAddressNVX() const;
private:
- VULKAN_HPP_NAMESPACE::ImageView m_imageView;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::ImageView m_imageView = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class IndirectCommandsLayoutNV
@@ -6810,16 +7568,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateIndirectCommandsLayoutNV(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateIndirectCommandsLayoutNV(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkIndirectCommandsLayoutCreateInfoNV *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkIndirectCommandsLayoutNV *>( &m_indirectCommandsLayoutNV ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkIndirectCommandsLayoutNV *>( &m_indirectCommandsLayout ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateIndirectCommandsLayoutNV" );
@@ -6828,84 +7585,78 @@ namespace VULKAN_HPP_NAMESPACE
IndirectCommandsLayoutNV(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkIndirectCommandsLayoutNV indirectCommandsLayoutNV,
+ VkIndirectCommandsLayoutNV indirectCommandsLayout,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_indirectCommandsLayoutNV( indirectCommandsLayoutNV )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_indirectCommandsLayout( indirectCommandsLayout )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ IndirectCommandsLayoutNV( std::nullptr_t ) {}
+
~IndirectCommandsLayoutNV()
{
- if ( m_indirectCommandsLayoutNV )
+ if ( m_indirectCommandsLayout )
{
getDispatcher()->vkDestroyIndirectCommandsLayoutNV(
- m_device, static_cast<VkIndirectCommandsLayoutNV>( m_indirectCommandsLayoutNV ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkIndirectCommandsLayoutNV>( m_indirectCommandsLayout ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- IndirectCommandsLayoutNV() = default;
-# else
- IndirectCommandsLayoutNV() = delete;
-# endif
+ IndirectCommandsLayoutNV() = delete;
IndirectCommandsLayoutNV( IndirectCommandsLayoutNV const & ) = delete;
IndirectCommandsLayoutNV( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT
- : m_indirectCommandsLayoutNV(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_indirectCommandsLayoutNV, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_indirectCommandsLayout(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_indirectCommandsLayout, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV const & ) = delete;
IndirectCommandsLayoutNV & operator=( IndirectCommandsLayoutNV && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_indirectCommandsLayoutNV )
+ if ( m_indirectCommandsLayout )
{
getDispatcher()->vkDestroyIndirectCommandsLayoutNV(
- m_device, static_cast<VkIndirectCommandsLayoutNV>( m_indirectCommandsLayoutNV ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkIndirectCommandsLayoutNV>( m_indirectCommandsLayout ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_indirectCommandsLayoutNV =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_indirectCommandsLayoutNV, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_indirectCommandsLayout =
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_indirectCommandsLayout, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_indirectCommandsLayoutNV;
+ return m_indirectCommandsLayout;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_indirectCommandsLayoutNV.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_indirectCommandsLayoutNV.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV m_indirectCommandsLayoutNV;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV m_indirectCommandsLayout = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class PerformanceConfigurationINTEL
@@ -6925,10 +7676,10 @@ namespace VULKAN_HPP_NAMESPACE
: m_device( *device ), m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkAcquirePerformanceConfigurationINTEL(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkAcquirePerformanceConfigurationINTEL(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkPerformanceConfigurationAcquireInfoINTEL *>( &acquireInfo ),
- reinterpret_cast<VkPerformanceConfigurationINTEL *>( &m_performanceConfigurationINTEL ) ) );
+ reinterpret_cast<VkPerformanceConfigurationINTEL *>( &m_configuration ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkAcquirePerformanceConfigurationINTEL" );
@@ -6936,78 +7687,65 @@ namespace VULKAN_HPP_NAMESPACE
}
PerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkPerformanceConfigurationINTEL performanceConfigurationINTEL )
- : m_performanceConfigurationINTEL( performanceConfigurationINTEL )
- , m_device( *device )
- , m_dispatcher( device.getDispatcher() )
+ VkPerformanceConfigurationINTEL configuration )
+ : m_device( *device ), m_configuration( configuration ), m_dispatcher( device.getDispatcher() )
{}
+ PerformanceConfigurationINTEL( std::nullptr_t ) {}
+
~PerformanceConfigurationINTEL()
{
- if ( m_performanceConfigurationINTEL )
+ if ( m_configuration )
{
getDispatcher()->vkReleasePerformanceConfigurationINTEL(
- m_device, static_cast<VkPerformanceConfigurationINTEL>( m_performanceConfigurationINTEL ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkPerformanceConfigurationINTEL>( m_configuration ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- PerformanceConfigurationINTEL() = default;
-# else
- PerformanceConfigurationINTEL() = delete;
-# endif
+ PerformanceConfigurationINTEL() = delete;
PerformanceConfigurationINTEL( PerformanceConfigurationINTEL const & ) = delete;
PerformanceConfigurationINTEL( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT
- : m_performanceConfigurationINTEL(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_performanceConfigurationINTEL, {} ) )
- , m_device( rhs.m_device )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_configuration( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_configuration, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL const & ) = delete;
PerformanceConfigurationINTEL & operator=( PerformanceConfigurationINTEL && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_performanceConfigurationINTEL )
+ if ( m_configuration )
{
getDispatcher()->vkReleasePerformanceConfigurationINTEL(
- m_device, static_cast<VkPerformanceConfigurationINTEL>( m_performanceConfigurationINTEL ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkPerformanceConfigurationINTEL>( m_configuration ) );
}
- m_performanceConfigurationINTEL =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_performanceConfigurationINTEL, {} );
- m_device = rhs.m_device;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_configuration = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_configuration, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_performanceConfigurationINTEL;
+ return m_configuration;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_performanceConfigurationINTEL.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_performanceConfigurationINTEL.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL m_performanceConfigurationINTEL;
- VkDevice m_device;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL m_configuration = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class PipelineCache
@@ -7026,15 +7764,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreatePipelineCache( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkPipelineCacheCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkPipelineCache *>( &m_pipelineCache ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreatePipelineCache(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkPipelineCacheCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkPipelineCache *>( &m_pipelineCache ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreatePipelineCache" );
@@ -7045,33 +7783,31 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkPipelineCache pipelineCache,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_pipelineCache( pipelineCache )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_pipelineCache( pipelineCache )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ PipelineCache( std::nullptr_t ) {}
+
~PipelineCache()
{
if ( m_pipelineCache )
{
- getDispatcher()->vkDestroyPipelineCache(
- m_device, static_cast<VkPipelineCache>( m_pipelineCache ), m_allocator );
+ getDispatcher()->vkDestroyPipelineCache( static_cast<VkDevice>( m_device ),
+ static_cast<VkPipelineCache>( m_pipelineCache ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- PipelineCache() = default;
-# else
- PipelineCache() = delete;
-# endif
+ PipelineCache() = delete;
PipelineCache( PipelineCache const & ) = delete;
PipelineCache( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT
- : m_pipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineCache, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_pipelineCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineCache, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
PipelineCache & operator=( PipelineCache const & ) = delete;
PipelineCache & operator =( PipelineCache && rhs ) VULKAN_HPP_NOEXCEPT
@@ -7080,13 +7816,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_pipelineCache )
{
- getDispatcher()->vkDestroyPipelineCache(
- m_device, static_cast<VkPipelineCache>( m_pipelineCache ), m_allocator );
+ getDispatcher()->vkDestroyPipelineCache( static_cast<VkDevice>( m_device ),
+ static_cast<VkPipelineCache>( m_pipelineCache ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_pipelineCache = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineCache, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -7096,23 +7833,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_pipelineCache;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_pipelineCache.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_pipelineCache.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
@@ -7121,10 +7851,10 @@ namespace VULKAN_HPP_NAMESPACE
void merge( ArrayProxy<const VULKAN_HPP_NAMESPACE::PipelineCache> const & srcCaches ) const;
private:
- VULKAN_HPP_NAMESPACE::PipelineCache m_pipelineCache;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::PipelineCache m_pipelineCache = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Pipeline
@@ -7145,8 +7875,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
m_constructorSuccessCode = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateComputePipelines(
@@ -7154,7 +7883,7 @@ namespace VULKAN_HPP_NAMESPACE
pipelineCache ? static_cast<VkPipelineCache>( **pipelineCache ) : 0,
1,
reinterpret_cast<const VkComputePipelineCreateInfo *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkPipeline *>( &m_pipeline ) ) );
if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) )
@@ -7170,8 +7899,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
m_constructorSuccessCode =
@@ -7180,7 +7908,7 @@ namespace VULKAN_HPP_NAMESPACE
pipelineCache ? static_cast<VkPipelineCache>( **pipelineCache ) : 0,
1,
reinterpret_cast<const VkGraphicsPipelineCreateInfo *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkPipeline *>( &m_pipeline ) ) );
if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) )
@@ -7198,8 +7926,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
m_constructorSuccessCode =
@@ -7209,7 +7936,7 @@ namespace VULKAN_HPP_NAMESPACE
pipelineCache ? static_cast<VkPipelineCache>( **pipelineCache ) : 0,
1,
reinterpret_cast<const VkRayTracingPipelineCreateInfoKHR *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkPipeline *>( &m_pipeline ) ) );
if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eOperationDeferredKHR ) &&
@@ -7227,8 +7954,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
m_constructorSuccessCode =
@@ -7237,7 +7963,7 @@ namespace VULKAN_HPP_NAMESPACE
pipelineCache ? static_cast<VkPipelineCache>( **pipelineCache ) : 0,
1,
reinterpret_cast<const VkRayTracingPipelineCreateInfoNV *>( &createInfo ),
- m_allocator,
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
reinterpret_cast<VkPipeline *>( &m_pipeline ) ) );
if ( ( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( m_constructorSuccessCode != VULKAN_HPP_NAMESPACE::Result::ePipelineCompileRequiredEXT ) )
@@ -7248,45 +7974,34 @@ namespace VULKAN_HPP_NAMESPACE
Pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkPipeline pipeline,
- VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_pipeline( pipeline )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr,
+ VULKAN_HPP_NAMESPACE::Result successCode = VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ : m_device( *device )
+ , m_pipeline( pipeline )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
+ , m_constructorSuccessCode( successCode )
, m_dispatcher( device.getDispatcher() )
{}
- Pipeline( VkPipeline pipeline,
- VkDevice device,
- VkAllocationCallbacks const * allocator,
- VULKAN_HPP_NAMESPACE::Result successCode,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher )
- : m_pipeline( pipeline )
- , m_device( device )
- , m_allocator( allocator )
- , m_constructorSuccessCode( successCode )
- , m_dispatcher( dispatcher )
- {}
+ Pipeline( std::nullptr_t ) {}
~Pipeline()
{
if ( m_pipeline )
{
- getDispatcher()->vkDestroyPipeline( m_device, static_cast<VkPipeline>( m_pipeline ), m_allocator );
+ getDispatcher()->vkDestroyPipeline( static_cast<VkDevice>( m_device ),
+ static_cast<VkPipeline>( m_pipeline ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Pipeline() = default;
-# else
- Pipeline() = delete;
-# endif
+ Pipeline() = delete;
Pipeline( Pipeline const & ) = delete;
Pipeline( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT
- : m_pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipeline, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_pipeline( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipeline, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Pipeline & operator=( Pipeline const & ) = delete;
Pipeline & operator =( Pipeline && rhs ) VULKAN_HPP_NOEXCEPT
@@ -7295,12 +8010,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_pipeline )
{
- getDispatcher()->vkDestroyPipeline( m_device, static_cast<VkPipeline>( m_pipeline ), m_allocator );
+ getDispatcher()->vkDestroyPipeline( static_cast<VkDevice>( m_device ),
+ static_cast<VkPipeline>( m_pipeline ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_pipeline = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipeline, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -7315,23 +8032,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_constructorSuccessCode;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_pipeline.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_pipeline.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_AMD_shader_info ===
@@ -7341,42 +8051,41 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_ray_tracing ===
- template <typename T>
- VULKAN_HPP_NODISCARD std::vector<T>
- getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::vector<DataType>
+ getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD T getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const;
void compileDeferredNV( uint32_t shader ) const;
//=== VK_KHR_ray_tracing_pipeline ===
- template <typename T>
- VULKAN_HPP_NODISCARD std::vector<T>
- getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::vector<DataType>
+ getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD T getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD std::vector<T> getRayTracingCaptureReplayShaderGroupHandlesKHR( uint32_t firstGroup,
- uint32_t groupCount,
- size_t dataSize ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::vector<DataType> getRayTracingCaptureReplayShaderGroupHandlesKHR(
+ uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD T getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup,
- uint32_t groupCount ) const;
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup,
+ uint32_t groupCount ) const;
VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::DeviceSize getRayTracingShaderGroupStackSizeKHR(
uint32_t group, VULKAN_HPP_NAMESPACE::ShaderGroupShaderKHR groupShader ) const VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::Pipeline m_pipeline;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Pipeline m_pipeline = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
VULKAN_HPP_NAMESPACE::Result m_constructorSuccessCode;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Pipelines : public std::vector<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Pipeline>
@@ -7406,12 +8115,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( createInfos.size() );
for ( auto const & pipeline : pipelines )
{
- this->emplace_back( pipeline,
- static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- result,
- dispatcher );
+ this->emplace_back( device, pipeline, allocator, result );
}
}
else
@@ -7444,12 +8148,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( createInfos.size() );
for ( auto const & pipeline : pipelines )
{
- this->emplace_back( pipeline,
- static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- result,
- dispatcher );
+ this->emplace_back( device, pipeline, allocator, result );
}
}
else
@@ -7487,12 +8186,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( createInfos.size() );
for ( auto const & pipeline : pipelines )
{
- this->emplace_back( pipeline,
- static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- result,
- dispatcher );
+ this->emplace_back( device, pipeline, allocator, result );
}
}
else
@@ -7525,12 +8219,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( createInfos.size() );
for ( auto const & pipeline : pipelines )
{
- this->emplace_back( pipeline,
- static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- result,
- dispatcher );
+ this->emplace_back( device, pipeline, allocator, result );
}
}
else
@@ -7539,11 +8228,7 @@ namespace VULKAN_HPP_NAMESPACE
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Pipelines() = default;
-# else
- Pipelines() = delete;
-# endif
+ Pipelines() = delete;
Pipelines( Pipelines const & ) = delete;
Pipelines( Pipelines && rhs ) = default;
Pipelines & operator=( Pipelines const & ) = delete;
@@ -7566,15 +8251,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreatePipelineLayout( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkPipelineLayoutCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkPipelineLayout *>( &m_pipelineLayout ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreatePipelineLayout(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkPipelineLayoutCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkPipelineLayout *>( &m_pipelineLayout ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreatePipelineLayout" );
@@ -7585,33 +8270,31 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkPipelineLayout pipelineLayout,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_pipelineLayout( pipelineLayout )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_pipelineLayout( pipelineLayout )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ PipelineLayout( std::nullptr_t ) {}
+
~PipelineLayout()
{
if ( m_pipelineLayout )
{
- getDispatcher()->vkDestroyPipelineLayout(
- m_device, static_cast<VkPipelineLayout>( m_pipelineLayout ), m_allocator );
+ getDispatcher()->vkDestroyPipelineLayout( static_cast<VkDevice>( m_device ),
+ static_cast<VkPipelineLayout>( m_pipelineLayout ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- PipelineLayout() = default;
-# else
- PipelineLayout() = delete;
-# endif
+ PipelineLayout() = delete;
PipelineLayout( PipelineLayout const & ) = delete;
PipelineLayout( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT
- : m_pipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineLayout, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_pipelineLayout( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineLayout, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
PipelineLayout & operator=( PipelineLayout const & ) = delete;
PipelineLayout & operator =( PipelineLayout && rhs ) VULKAN_HPP_NOEXCEPT
@@ -7620,13 +8303,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_pipelineLayout )
{
- getDispatcher()->vkDestroyPipelineLayout(
- m_device, static_cast<VkPipelineLayout>( m_pipelineLayout ), m_allocator );
+ getDispatcher()->vkDestroyPipelineLayout( static_cast<VkDevice>( m_device ),
+ static_cast<VkPipelineLayout>( m_pipelineLayout ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_pipelineLayout = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_pipelineLayout, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -7636,143 +8320,125 @@ namespace VULKAN_HPP_NAMESPACE
return m_pipelineLayout;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_pipelineLayout.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_pipelineLayout.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::PipelineLayout m_pipelineLayout;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::PipelineLayout m_pipelineLayout = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
- class PrivateDataSlotEXT
+ class PrivateDataSlot
{
public:
- using CType = VkPrivateDataSlotEXT;
+ using CType = VkPrivateDataSlot;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::ObjectType objectType =
- VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlotEXT;
+ VULKAN_HPP_NAMESPACE::ObjectType::ePrivateDataSlot;
static VULKAN_HPP_CONST_OR_CONSTEXPR VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT debugReportObjectType =
VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT::eUnknown;
public:
- PrivateDataSlotEXT(
+ PrivateDataSlot(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreatePrivateDataSlotEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreatePrivateDataSlot(
static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkPrivateDataSlotCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkPrivateDataSlotEXT *>( &m_privateDataSlotEXT ) ) );
+ reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkPrivateDataSlot *>( &m_privateDataSlot ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
- throwResultException( result, "vkCreatePrivateDataSlotEXT" );
+ throwResultException( result, "vkCreatePrivateDataSlot" );
}
}
- PrivateDataSlotEXT(
+ PrivateDataSlot(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkPrivateDataSlotEXT privateDataSlotEXT,
+ VkPrivateDataSlot privateDataSlot,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_privateDataSlotEXT( privateDataSlotEXT )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_privateDataSlot( privateDataSlot )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
- ~PrivateDataSlotEXT()
+ PrivateDataSlot( std::nullptr_t ) {}
+
+ ~PrivateDataSlot()
{
- if ( m_privateDataSlotEXT )
+ if ( m_privateDataSlot )
{
- getDispatcher()->vkDestroyPrivateDataSlotEXT(
- m_device, static_cast<VkPrivateDataSlotEXT>( m_privateDataSlotEXT ), m_allocator );
+ getDispatcher()->vkDestroyPrivateDataSlot( static_cast<VkDevice>( m_device ),
+ static_cast<VkPrivateDataSlot>( m_privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- PrivateDataSlotEXT() = default;
-# else
- PrivateDataSlotEXT() = delete;
-# endif
- PrivateDataSlotEXT( PrivateDataSlotEXT const & ) = delete;
- PrivateDataSlotEXT( PrivateDataSlotEXT && rhs ) VULKAN_HPP_NOEXCEPT
- : m_privateDataSlotEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_privateDataSlotEXT,
- {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ PrivateDataSlot() = delete;
+ PrivateDataSlot( PrivateDataSlot const & ) = delete;
+ PrivateDataSlot( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_privateDataSlot( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_privateDataSlot, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
- PrivateDataSlotEXT & operator=( PrivateDataSlotEXT const & ) = delete;
- PrivateDataSlotEXT & operator =( PrivateDataSlotEXT && rhs ) VULKAN_HPP_NOEXCEPT
+ PrivateDataSlot & operator=( PrivateDataSlot const & ) = delete;
+ PrivateDataSlot & operator =( PrivateDataSlot && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_privateDataSlotEXT )
+ if ( m_privateDataSlot )
{
- getDispatcher()->vkDestroyPrivateDataSlotEXT(
- m_device, static_cast<VkPrivateDataSlotEXT>( m_privateDataSlotEXT ), m_allocator );
+ getDispatcher()->vkDestroyPrivateDataSlot( static_cast<VkDevice>( m_device ),
+ static_cast<VkPrivateDataSlot>( m_privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_privateDataSlotEXT =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_privateDataSlotEXT, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_privateDataSlot = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_privateDataSlot, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT const & operator*() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_privateDataSlotEXT;
+ return m_privateDataSlot;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_privateDataSlotEXT.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_privateDataSlotEXT.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT m_privateDataSlotEXT;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot m_privateDataSlot = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class QueryPool
@@ -7790,15 +8456,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateQueryPool( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkQueryPoolCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkQueryPool *>( &m_queryPool ) ) );
+ device.getDispatcher()->vkCreateQueryPool( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkQueryPoolCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkQueryPool *>( &m_queryPool ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateQueryPool" );
@@ -7808,32 +8473,31 @@ namespace VULKAN_HPP_NAMESPACE
QueryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkQueryPool queryPool,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_queryPool( queryPool )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_queryPool( queryPool )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ QueryPool( std::nullptr_t ) {}
+
~QueryPool()
{
if ( m_queryPool )
{
- getDispatcher()->vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( m_queryPool ), m_allocator );
+ getDispatcher()->vkDestroyQueryPool( static_cast<VkDevice>( m_device ),
+ static_cast<VkQueryPool>( m_queryPool ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- QueryPool() = default;
-# else
- QueryPool() = delete;
-# endif
+ QueryPool() = delete;
QueryPool( QueryPool const & ) = delete;
QueryPool( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT
- : m_queryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queryPool, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_queryPool( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queryPool, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
QueryPool & operator=( QueryPool const & ) = delete;
QueryPool & operator =( QueryPool && rhs ) VULKAN_HPP_NOEXCEPT
@@ -7842,12 +8506,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_queryPool )
{
- getDispatcher()->vkDestroyQueryPool( m_device, static_cast<VkQueryPool>( m_queryPool ), m_allocator );
+ getDispatcher()->vkDestroyQueryPool( static_cast<VkDevice>( m_device ),
+ static_cast<VkQueryPool>( m_queryPool ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_queryPool = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queryPool, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -7857,39 +8523,32 @@ namespace VULKAN_HPP_NAMESPACE
return m_queryPool;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_queryPool.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_queryPool.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
- template <typename T>
- VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, std::vector<T>>
- getResults( uint32_t firstQuery,
- uint32_t queryCount,
- size_t dataSize,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, std::vector<DataType>>
+ getResults( uint32_t firstQuery,
+ uint32_t queryCount,
+ size_t dataSize,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
- template <typename T>
- VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, T>
- getResult( uint32_t firstQuery,
- uint32_t queryCount,
- VULKAN_HPP_NAMESPACE::DeviceSize stride,
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, DataType>
+ getResult( uint32_t firstQuery,
+ uint32_t queryCount,
+ VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
//=== VK_VERSION_1_2 ===
@@ -7901,10 +8560,10 @@ namespace VULKAN_HPP_NAMESPACE
void resetEXT( uint32_t firstQuery, uint32_t queryCount ) const VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::QueryPool m_queryPool;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::QueryPool m_queryPool = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Queue
@@ -7940,15 +8599,13 @@ namespace VULKAN_HPP_NAMESPACE
: m_queue( queue ), m_dispatcher( device.getDispatcher() )
{}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Queue() = default;
-# else
- Queue() = delete;
-# endif
+ Queue( std::nullptr_t ) {}
+
+ Queue() = delete;
Queue( Queue const & ) = delete;
Queue( Queue && rhs ) VULKAN_HPP_NOEXCEPT
: m_queue( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queue, {} ) )
- , m_dispatcher( rhs.m_dispatcher )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Queue & operator=( Queue const & ) = delete;
Queue & operator =( Queue && rhs ) VULKAN_HPP_NOEXCEPT
@@ -7956,7 +8613,7 @@ namespace VULKAN_HPP_NAMESPACE
if ( this != &rhs )
{
m_queue = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_queue, {} );
- m_dispatcher = rhs.m_dispatcher;
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -7972,18 +8629,6 @@ namespace VULKAN_HPP_NAMESPACE
return m_dispatcher;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_queue.operator bool();
- }
-
- bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return m_queue.operator!();
- }
-# endif
-
//=== VK_VERSION_1_0 ===
void submit( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo> const & submits,
@@ -7994,17 +8639,25 @@ namespace VULKAN_HPP_NAMESPACE
void bindSparse( ArrayProxy<const VULKAN_HPP_NAMESPACE::BindSparseInfo> const & bindInfo,
VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
+ //=== VK_VERSION_1_3 ===
+
+ void submit2( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
+
//=== VK_KHR_swapchain ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result presentKHR( const PresentInfoKHR & presentInfo ) const;
+ VULKAN_HPP_NODISCARD VULKAN_HPP_NAMESPACE::Result
+ presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo ) const;
//=== VK_EXT_debug_utils ===
- void beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT;
+ void
+ beginDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT;
void endDebugUtilsLabelEXT() const VULKAN_HPP_NOEXCEPT;
- void insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT;
+ void insertDebugUtilsLabelEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const
+ VULKAN_HPP_NOEXCEPT;
//=== VK_NV_device_diagnostic_checkpoints ===
@@ -8017,15 +8670,15 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_synchronization2 ===
- void submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2KHR> const & submits,
+ void submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
VULKAN_HPP_NODISCARD std::vector<VULKAN_HPP_NAMESPACE::CheckpointData2NV>
getCheckpointData2NV() const VULKAN_HPP_NOEXCEPT;
private:
- VULKAN_HPP_NAMESPACE::Queue m_queue;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Queue m_queue = {};
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class RenderPass
@@ -8043,15 +8696,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateRenderPass( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkRenderPassCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkRenderPass *>( &m_renderPass ) ) );
+ device.getDispatcher()->vkCreateRenderPass( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkRenderPassCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkRenderPass *>( &m_renderPass ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateRenderPass" );
@@ -8062,15 +8714,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateRenderPass2( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkRenderPassCreateInfo2 *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkRenderPass *>( &m_renderPass ) ) );
+ device.getDispatcher()->vkCreateRenderPass2( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkRenderPassCreateInfo2 *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkRenderPass *>( &m_renderPass ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateRenderPass2" );
@@ -8080,32 +8731,31 @@ namespace VULKAN_HPP_NAMESPACE
RenderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkRenderPass renderPass,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_renderPass( renderPass )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_renderPass( renderPass )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ RenderPass( std::nullptr_t ) {}
+
~RenderPass()
{
if ( m_renderPass )
{
- getDispatcher()->vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( m_renderPass ), m_allocator );
+ getDispatcher()->vkDestroyRenderPass( static_cast<VkDevice>( m_device ),
+ static_cast<VkRenderPass>( m_renderPass ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- RenderPass() = default;
-# else
- RenderPass() = delete;
-# endif
+ RenderPass() = delete;
RenderPass( RenderPass const & ) = delete;
RenderPass( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT
- : m_renderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_renderPass, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_renderPass( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_renderPass, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
RenderPass & operator=( RenderPass const & ) = delete;
RenderPass & operator =( RenderPass && rhs ) VULKAN_HPP_NOEXCEPT
@@ -8114,12 +8764,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_renderPass )
{
- getDispatcher()->vkDestroyRenderPass( m_device, static_cast<VkRenderPass>( m_renderPass ), m_allocator );
+ getDispatcher()->vkDestroyRenderPass( static_cast<VkDevice>( m_device ),
+ static_cast<VkRenderPass>( m_renderPass ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_renderPass = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_renderPass, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -8129,23 +8781,16 @@ namespace VULKAN_HPP_NAMESPACE
return m_renderPass;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_renderPass.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_renderPass.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_VERSION_1_0 ===
@@ -8157,10 +8802,10 @@ namespace VULKAN_HPP_NAMESPACE
getSubpassShadingMaxWorkgroupSizeHUAWEI() const;
private:
- VULKAN_HPP_NAMESPACE::RenderPass m_renderPass;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::RenderPass m_renderPass = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Sampler
@@ -8178,15 +8823,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateSampler( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkSamplerCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSampler *>( &m_sampler ) ) );
+ device.getDispatcher()->vkCreateSampler( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkSamplerCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSampler *>( &m_sampler ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateSampler" );
@@ -8196,32 +8840,31 @@ namespace VULKAN_HPP_NAMESPACE
Sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkSampler sampler,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_sampler( sampler )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_sampler( sampler )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Sampler( std::nullptr_t ) {}
+
~Sampler()
{
if ( m_sampler )
{
- getDispatcher()->vkDestroySampler( m_device, static_cast<VkSampler>( m_sampler ), m_allocator );
+ getDispatcher()->vkDestroySampler( static_cast<VkDevice>( m_device ),
+ static_cast<VkSampler>( m_sampler ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Sampler() = default;
-# else
- Sampler() = delete;
-# endif
+ Sampler() = delete;
Sampler( Sampler const & ) = delete;
Sampler( Sampler && rhs ) VULKAN_HPP_NOEXCEPT
- : m_sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_sampler, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_sampler( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_sampler, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Sampler & operator=( Sampler const & ) = delete;
Sampler & operator =( Sampler && rhs ) VULKAN_HPP_NOEXCEPT
@@ -8230,12 +8873,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_sampler )
{
- getDispatcher()->vkDestroySampler( m_device, static_cast<VkSampler>( m_sampler ), m_allocator );
+ getDispatcher()->vkDestroySampler( static_cast<VkDevice>( m_device ),
+ static_cast<VkSampler>( m_sampler ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_sampler = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_sampler, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -8245,29 +8890,22 @@ namespace VULKAN_HPP_NAMESPACE
return m_sampler;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_sampler.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_sampler.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::Sampler m_sampler;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Sampler m_sampler = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class SamplerYcbcrConversion
@@ -8286,16 +8924,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateSamplerYcbcrConversion(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateSamplerYcbcrConversion(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkSamplerYcbcrConversionCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSamplerYcbcrConversion *>( &m_samplerYcbcrConversion ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSamplerYcbcrConversion *>( &m_ycbcrConversion ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateSamplerYcbcrConversion" );
@@ -8304,84 +8941,76 @@ namespace VULKAN_HPP_NAMESPACE
SamplerYcbcrConversion(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkSamplerYcbcrConversion samplerYcbcrConversion,
+ VkSamplerYcbcrConversion ycbcrConversion,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_samplerYcbcrConversion( samplerYcbcrConversion )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_ycbcrConversion( ycbcrConversion )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ SamplerYcbcrConversion( std::nullptr_t ) {}
+
~SamplerYcbcrConversion()
{
- if ( m_samplerYcbcrConversion )
+ if ( m_ycbcrConversion )
{
getDispatcher()->vkDestroySamplerYcbcrConversion(
- m_device, static_cast<VkSamplerYcbcrConversion>( m_samplerYcbcrConversion ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkSamplerYcbcrConversion>( m_ycbcrConversion ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- SamplerYcbcrConversion() = default;
-# else
- SamplerYcbcrConversion() = delete;
-# endif
+ SamplerYcbcrConversion() = delete;
SamplerYcbcrConversion( SamplerYcbcrConversion const & ) = delete;
SamplerYcbcrConversion( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT
- : m_samplerYcbcrConversion(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_samplerYcbcrConversion, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_ycbcrConversion( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_ycbcrConversion, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
SamplerYcbcrConversion & operator=( SamplerYcbcrConversion const & ) = delete;
SamplerYcbcrConversion & operator=( SamplerYcbcrConversion && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_samplerYcbcrConversion )
+ if ( m_ycbcrConversion )
{
getDispatcher()->vkDestroySamplerYcbcrConversion(
- m_device, static_cast<VkSamplerYcbcrConversion>( m_samplerYcbcrConversion ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkSamplerYcbcrConversion>( m_ycbcrConversion ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_samplerYcbcrConversion =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_samplerYcbcrConversion, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_ycbcrConversion = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_ycbcrConversion, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_samplerYcbcrConversion;
+ return m_ycbcrConversion;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_samplerYcbcrConversion.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_samplerYcbcrConversion.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion m_samplerYcbcrConversion;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion m_ycbcrConversion = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class Semaphore
@@ -8399,15 +9028,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateSemaphore( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkSemaphoreCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSemaphore *>( &m_semaphore ) ) );
+ device.getDispatcher()->vkCreateSemaphore( static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkSemaphoreCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSemaphore *>( &m_semaphore ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateSemaphore" );
@@ -8417,32 +9045,31 @@ namespace VULKAN_HPP_NAMESPACE
Semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkSemaphore semaphore,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_semaphore( semaphore )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_semaphore( semaphore )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ Semaphore( std::nullptr_t ) {}
+
~Semaphore()
{
if ( m_semaphore )
{
- getDispatcher()->vkDestroySemaphore( m_device, static_cast<VkSemaphore>( m_semaphore ), m_allocator );
+ getDispatcher()->vkDestroySemaphore( static_cast<VkDevice>( m_device ),
+ static_cast<VkSemaphore>( m_semaphore ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- Semaphore() = default;
-# else
- Semaphore() = delete;
-# endif
+ Semaphore() = delete;
Semaphore( Semaphore const & ) = delete;
Semaphore( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT
- : m_semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_semaphore, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_semaphore( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_semaphore, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
Semaphore & operator=( Semaphore const & ) = delete;
Semaphore & operator =( Semaphore && rhs ) VULKAN_HPP_NOEXCEPT
@@ -8451,12 +9078,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_semaphore )
{
- getDispatcher()->vkDestroySemaphore( m_device, static_cast<VkSemaphore>( m_semaphore ), m_allocator );
+ getDispatcher()->vkDestroySemaphore( static_cast<VkDevice>( m_device ),
+ static_cast<VkSemaphore>( m_semaphore ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_semaphore = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_semaphore, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -8466,24 +9095,17 @@ namespace VULKAN_HPP_NAMESPACE
return m_semaphore;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
+ return m_device;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_semaphore.operator bool();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
- {
- return m_semaphore.operator!();
- }
-# endif
-
//=== VK_VERSION_1_2 ===
VULKAN_HPP_NODISCARD uint64_t getCounterValue() const;
@@ -8493,10 +9115,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD uint64_t getCounterValueKHR() const;
private:
- VULKAN_HPP_NAMESPACE::Semaphore m_semaphore;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::Semaphore m_semaphore = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class ShaderModule
@@ -8515,15 +9137,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateShaderModule( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkShaderModuleCreateInfo *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkShaderModule *>( &m_shaderModule ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateShaderModule(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkShaderModuleCreateInfo *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkShaderModule *>( &m_shaderModule ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateShaderModule" );
@@ -8534,33 +9156,31 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
VkShaderModule shaderModule,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_shaderModule( shaderModule )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_shaderModule( shaderModule )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ ShaderModule( std::nullptr_t ) {}
+
~ShaderModule()
{
if ( m_shaderModule )
{
- getDispatcher()->vkDestroyShaderModule(
- m_device, static_cast<VkShaderModule>( m_shaderModule ), m_allocator );
+ getDispatcher()->vkDestroyShaderModule( static_cast<VkDevice>( m_device ),
+ static_cast<VkShaderModule>( m_shaderModule ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- ShaderModule() = default;
-# else
- ShaderModule() = delete;
-# endif
+ ShaderModule() = delete;
ShaderModule( ShaderModule const & ) = delete;
ShaderModule( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT
- : m_shaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_shaderModule, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_shaderModule( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_shaderModule, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
ShaderModule & operator=( ShaderModule const & ) = delete;
ShaderModule & operator =( ShaderModule && rhs ) VULKAN_HPP_NOEXCEPT
@@ -8569,13 +9189,14 @@ namespace VULKAN_HPP_NAMESPACE
{
if ( m_shaderModule )
{
- getDispatcher()->vkDestroyShaderModule(
- m_device, static_cast<VkShaderModule>( m_shaderModule ), m_allocator );
+ getDispatcher()->vkDestroyShaderModule( static_cast<VkDevice>( m_device ),
+ static_cast<VkShaderModule>( m_shaderModule ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
m_shaderModule = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_shaderModule, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
@@ -8585,29 +9206,22 @@ namespace VULKAN_HPP_NAMESPACE
return m_shaderModule;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_shaderModule.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_shaderModule.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::ShaderModule m_shaderModule;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::ShaderModule m_shaderModule = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class SurfaceKHR
@@ -8626,16 +9240,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateAndroidSurfaceKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateAndroidSurfaceKHR(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateAndroidSurfaceKHR" );
@@ -8648,16 +9261,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDirectFBSurfaceEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateDirectFBSurfaceEXT(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkDirectFBSurfaceCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDirectFBSurfaceEXT" );
@@ -8669,16 +9281,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateDisplayPlaneSurfaceKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateDisplayPlaneSurfaceKHR(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateDisplayPlaneSurfaceKHR" );
@@ -8689,16 +9300,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateHeadlessSurfaceEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateHeadlessSurfaceEXT(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkHeadlessSurfaceCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateHeadlessSurfaceEXT" );
@@ -8710,15 +9320,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateIOSSurfaceMVK( static_cast<VkInstance>( *instance ),
- reinterpret_cast<const VkIOSSurfaceCreateInfoMVK *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateIOSSurfaceMVK(
+ static_cast<VkInstance>( *instance ),
+ reinterpret_cast<const VkIOSSurfaceCreateInfoMVK *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateIOSSurfaceMVK" );
@@ -8731,16 +9341,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateImagePipeSurfaceFUCHSIA(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateImagePipeSurfaceFUCHSIA(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkImagePipeSurfaceCreateInfoFUCHSIA *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateImagePipeSurfaceFUCHSIA" );
@@ -8753,16 +9362,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateMacOSSurfaceMVK(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateMacOSSurfaceMVK(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkMacOSSurfaceCreateInfoMVK *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateMacOSSurfaceMVK" );
@@ -8775,16 +9383,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateMetalSurfaceEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateMetalSurfaceEXT(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkMetalSurfaceCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateMetalSurfaceEXT" );
@@ -8797,16 +9404,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateScreenSurfaceQNX(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateScreenSurfaceQNX(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkScreenSurfaceCreateInfoQNX *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateScreenSurfaceQNX" );
@@ -8819,16 +9425,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateStreamDescriptorSurfaceGGP(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateStreamDescriptorSurfaceGGP(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkStreamDescriptorSurfaceCreateInfoGGP *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateStreamDescriptorSurfaceGGP" );
@@ -8841,15 +9446,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateViSurfaceNN( static_cast<VkInstance>( *instance ),
- reinterpret_cast<const VkViSurfaceCreateInfoNN *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateViSurfaceNN(
+ static_cast<VkInstance>( *instance ),
+ reinterpret_cast<const VkViSurfaceCreateInfoNN *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateViSurfaceNN" );
@@ -8862,16 +9467,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateWaylandSurfaceKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateWaylandSurfaceKHR(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateWaylandSurfaceKHR" );
@@ -8884,16 +9488,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateWin32SurfaceKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateWin32SurfaceKHR(
static_cast<VkInstance>( *instance ),
reinterpret_cast<const VkWin32SurfaceCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateWin32SurfaceKHR" );
@@ -8906,15 +9509,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateXcbSurfaceKHR( static_cast<VkInstance>( *instance ),
- reinterpret_cast<const VkXcbSurfaceCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateXcbSurfaceKHR(
+ static_cast<VkInstance>( *instance ),
+ reinterpret_cast<const VkXcbSurfaceCreateInfoKHR *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateXcbSurfaceKHR" );
@@ -8927,15 +9530,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateXlibSurfaceKHR( static_cast<VkInstance>( *instance ),
- reinterpret_cast<const VkXlibSurfaceCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSurfaceKHR *>( &m_surfaceKHR ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( instance.getDispatcher()->vkCreateXlibSurfaceKHR(
+ static_cast<VkInstance>( *instance ),
+ reinterpret_cast<const VkXlibSurfaceCreateInfoKHR *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSurfaceKHR *>( &m_surface ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateXlibSurfaceKHR" );
@@ -8944,80 +9547,74 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VK_USE_PLATFORM_XLIB_KHR*/
SurfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Instance const & instance,
- VkSurfaceKHR surfaceKHR,
+ VkSurfaceKHR surface,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_surfaceKHR( surfaceKHR )
- , m_instance( *instance )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_instance( *instance )
+ , m_surface( surface )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( instance.getDispatcher() )
{}
+ SurfaceKHR( std::nullptr_t ) {}
+
~SurfaceKHR()
{
- if ( m_surfaceKHR )
+ if ( m_surface )
{
- getDispatcher()->vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( m_surfaceKHR ), m_allocator );
+ getDispatcher()->vkDestroySurfaceKHR( static_cast<VkInstance>( m_instance ),
+ static_cast<VkSurfaceKHR>( m_surface ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- SurfaceKHR() = default;
-# else
- SurfaceKHR() = delete;
-# endif
+ SurfaceKHR() = delete;
SurfaceKHR( SurfaceKHR const & ) = delete;
SurfaceKHR( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_surfaceKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_surfaceKHR, {} ) )
- , m_instance( rhs.m_instance )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_instance( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} ) )
+ , m_surface( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_surface, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
SurfaceKHR & operator=( SurfaceKHR const & ) = delete;
SurfaceKHR & operator =( SurfaceKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_surfaceKHR )
+ if ( m_surface )
{
- getDispatcher()->vkDestroySurfaceKHR( m_instance, static_cast<VkSurfaceKHR>( m_surfaceKHR ), m_allocator );
+ getDispatcher()->vkDestroySurfaceKHR( static_cast<VkInstance>( m_instance ),
+ static_cast<VkSurfaceKHR>( m_surface ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_surfaceKHR = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_surfaceKHR, {} );
- m_instance = rhs.m_instance;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_instance = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_instance, {} );
+ m_surface = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_surface, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::SurfaceKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_surfaceKHR;
+ return m_surface;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Instance getInstance() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_surfaceKHR.operator bool();
+ return m_instance;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * getDispatcher() const
{
- return m_surfaceKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
private:
- VULKAN_HPP_NAMESPACE::SurfaceKHR m_surfaceKHR;
- VkInstance m_instance;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Instance m_instance = {};
+ VULKAN_HPP_NAMESPACE::SurfaceKHR m_surface = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::InstanceDispatcher const * m_dispatcher = nullptr;
};
class SwapchainKHR
@@ -9036,15 +9633,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
- VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
- getDispatcher()->vkCreateSwapchainKHR( static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkSwapchainCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkSwapchainKHR *>( &m_swapchainKHR ) ) );
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateSwapchainKHR(
+ static_cast<VkDevice>( *device ),
+ reinterpret_cast<const VkSwapchainCreateInfoKHR *>( &createInfo ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkSwapchainKHR *>( &m_swapchain ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateSwapchainKHR" );
@@ -9053,92 +9650,77 @@ namespace VULKAN_HPP_NAMESPACE
SwapchainKHR(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkSwapchainKHR swapchainKHR,
+ VkSwapchainKHR swapchain,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_swapchainKHR( swapchainKHR )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_swapchain( swapchain )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
- SwapchainKHR( VkSwapchainKHR swapchainKHR,
- VkDevice device,
- VkAllocationCallbacks const * allocator,
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * dispatcher )
- : m_swapchainKHR( swapchainKHR ), m_device( device ), m_allocator( allocator ), m_dispatcher( dispatcher )
- {}
+ SwapchainKHR( std::nullptr_t ) {}
~SwapchainKHR()
{
- if ( m_swapchainKHR )
+ if ( m_swapchain )
{
- getDispatcher()->vkDestroySwapchainKHR(
- m_device, static_cast<VkSwapchainKHR>( m_swapchainKHR ), m_allocator );
+ getDispatcher()->vkDestroySwapchainKHR( static_cast<VkDevice>( m_device ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- SwapchainKHR() = default;
-# else
- SwapchainKHR() = delete;
-# endif
+ SwapchainKHR() = delete;
SwapchainKHR( SwapchainKHR const & ) = delete;
SwapchainKHR( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_swapchainKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_swapchainKHR, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_swapchain( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_swapchain, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
SwapchainKHR & operator=( SwapchainKHR const & ) = delete;
SwapchainKHR & operator =( SwapchainKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_swapchainKHR )
+ if ( m_swapchain )
{
- getDispatcher()->vkDestroySwapchainKHR(
- m_device, static_cast<VkSwapchainKHR>( m_swapchainKHR ), m_allocator );
+ getDispatcher()->vkDestroySwapchainKHR( static_cast<VkDevice>( m_device ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_swapchainKHR = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_swapchainKHR, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_swapchain = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_swapchain, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::SwapchainKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_swapchainKHR;
- }
-
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
+ return m_swapchain;
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_swapchainKHR.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_swapchainKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_KHR_swapchain ===
VULKAN_HPP_NODISCARD std::vector<VkImage> getImages() const;
VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, uint32_t>
- acquireNextImage( uint64_t timeout,
+ acquireNextImage( uint64_t timeout,
VULKAN_HPP_NAMESPACE::Semaphore semaphore VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT,
- VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
+ VULKAN_HPP_NAMESPACE::Fence fence VULKAN_HPP_DEFAULT_ARGUMENT_ASSIGNMENT ) const;
//=== VK_EXT_display_control ===
@@ -9172,10 +9754,10 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
private:
- VULKAN_HPP_NAMESPACE::SwapchainKHR m_swapchainKHR;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::SwapchainKHR m_swapchain = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
class SwapchainKHRs : public std::vector<VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR>
@@ -9201,11 +9783,7 @@ namespace VULKAN_HPP_NAMESPACE
this->reserve( createInfos.size() );
for ( auto const & swapchainKHR : swapchains )
{
- this->emplace_back( swapchainKHR,
- static_cast<VkDevice>( *device ),
- reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ),
- dispatcher );
+ this->emplace_back( device, swapchainKHR, allocator );
}
}
else
@@ -9214,11 +9792,7 @@ namespace VULKAN_HPP_NAMESPACE
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- SwapchainKHRs() = default;
-# else
- SwapchainKHRs() = delete;
-# endif
+ SwapchainKHRs() = delete;
SwapchainKHRs( SwapchainKHRs const & ) = delete;
SwapchainKHRs( SwapchainKHRs && rhs ) = default;
SwapchainKHRs & operator=( SwapchainKHRs const & ) = delete;
@@ -9241,16 +9815,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateValidationCacheEXT(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateValidationCacheEXT(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkValidationCacheCreateInfoEXT *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkValidationCacheEXT *>( &m_validationCacheEXT ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkValidationCacheEXT *>( &m_validationCache ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateValidationCacheEXT" );
@@ -9259,78 +9832,70 @@ namespace VULKAN_HPP_NAMESPACE
ValidationCacheEXT(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkValidationCacheEXT validationCacheEXT,
+ VkValidationCacheEXT validationCache,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_validationCacheEXT( validationCacheEXT )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_validationCache( validationCache )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ ValidationCacheEXT( std::nullptr_t ) {}
+
~ValidationCacheEXT()
{
- if ( m_validationCacheEXT )
+ if ( m_validationCache )
{
getDispatcher()->vkDestroyValidationCacheEXT(
- m_device, static_cast<VkValidationCacheEXT>( m_validationCacheEXT ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkValidationCacheEXT>( m_validationCache ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- ValidationCacheEXT() = default;
-# else
- ValidationCacheEXT() = delete;
-# endif
+ ValidationCacheEXT() = delete;
ValidationCacheEXT( ValidationCacheEXT const & ) = delete;
ValidationCacheEXT( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT
- : m_validationCacheEXT( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_validationCacheEXT,
- {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_validationCache( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_validationCache, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
ValidationCacheEXT & operator=( ValidationCacheEXT const & ) = delete;
ValidationCacheEXT & operator =( ValidationCacheEXT && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_validationCacheEXT )
+ if ( m_validationCache )
{
getDispatcher()->vkDestroyValidationCacheEXT(
- m_device, static_cast<VkValidationCacheEXT>( m_validationCacheEXT ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkValidationCacheEXT>( m_validationCache ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_validationCacheEXT =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_validationCacheEXT, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_validationCache = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_validationCache, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::ValidationCacheEXT const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_validationCacheEXT;
+ return m_validationCache;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
- {
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- return m_validationCacheEXT.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_validationCacheEXT.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_EXT_validation_cache ===
@@ -9339,10 +9904,10 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD std::vector<uint8_t> getData() const;
private:
- VULKAN_HPP_NAMESPACE::ValidationCacheEXT m_validationCacheEXT;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::ValidationCacheEXT m_validationCache = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
# if defined( VK_ENABLE_BETA_EXTENSIONS )
@@ -9362,16 +9927,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateVideoSessionKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateVideoSessionKHR(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkVideoSessionCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkVideoSessionKHR *>( &m_videoSessionKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkVideoSessionKHR *>( &m_videoSession ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateVideoSessionKHR" );
@@ -9380,76 +9944,68 @@ namespace VULKAN_HPP_NAMESPACE
VideoSessionKHR(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkVideoSessionKHR videoSessionKHR,
+ VkVideoSessionKHR videoSession,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_videoSessionKHR( videoSessionKHR )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_videoSession( videoSession )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ VideoSessionKHR( std::nullptr_t ) {}
+
~VideoSessionKHR()
{
- if ( m_videoSessionKHR )
+ if ( m_videoSession )
{
- getDispatcher()->vkDestroyVideoSessionKHR(
- m_device, static_cast<VkVideoSessionKHR>( m_videoSessionKHR ), m_allocator );
+ getDispatcher()->vkDestroyVideoSessionKHR( static_cast<VkDevice>( m_device ),
+ static_cast<VkVideoSessionKHR>( m_videoSession ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- VideoSessionKHR() = default;
-# else
- VideoSessionKHR() = delete;
-# endif
+ VideoSessionKHR() = delete;
VideoSessionKHR( VideoSessionKHR const & ) = delete;
VideoSessionKHR( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_videoSessionKHR( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionKHR, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_videoSession( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSession, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
VideoSessionKHR & operator=( VideoSessionKHR const & ) = delete;
VideoSessionKHR & operator =( VideoSessionKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_videoSessionKHR )
+ if ( m_videoSession )
{
- getDispatcher()->vkDestroyVideoSessionKHR(
- m_device, static_cast<VkVideoSessionKHR>( m_videoSessionKHR ), m_allocator );
+ getDispatcher()->vkDestroyVideoSessionKHR( static_cast<VkDevice>( m_device ),
+ static_cast<VkVideoSessionKHR>( m_videoSession ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_videoSessionKHR = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionKHR, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_videoSession = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSession, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::VideoSessionKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_videoSessionKHR;
+ return m_videoSession;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_videoSessionKHR.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_videoSessionKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_KHR_video_queue ===
@@ -9459,10 +10015,10 @@ namespace VULKAN_HPP_NAMESPACE
bindMemory( ArrayProxy<const VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR> const & videoSessionBindMemories ) const;
private:
- VULKAN_HPP_NAMESPACE::VideoSessionKHR m_videoSessionKHR;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::VideoSessionKHR m_videoSession = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -9483,16 +10039,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
: m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{
VULKAN_HPP_NAMESPACE::Result result =
- static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkCreateVideoSessionParametersKHR(
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( device.getDispatcher()->vkCreateVideoSessionParametersKHR(
static_cast<VkDevice>( *device ),
reinterpret_cast<const VkVideoSessionParametersCreateInfoKHR *>( &createInfo ),
- m_allocator,
- reinterpret_cast<VkVideoSessionParametersKHR *>( &m_videoSessionParametersKHR ) ) );
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ),
+ reinterpret_cast<VkVideoSessionParametersKHR *>( &m_videoSessionParameters ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, "vkCreateVideoSessionParametersKHR" );
@@ -9501,88 +10056,82 @@ namespace VULKAN_HPP_NAMESPACE
VideoSessionParametersKHR(
VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::Device const & device,
- VkVideoSessionParametersKHR videoSessionParametersKHR,
+ VkVideoSessionParametersKHR videoSessionParameters,
VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator = nullptr )
- : m_videoSessionParametersKHR( videoSessionParametersKHR )
- , m_device( *device )
- , m_allocator( reinterpret_cast<const VkAllocationCallbacks *>(
- static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) )
+ : m_device( *device )
+ , m_videoSessionParameters( videoSessionParameters )
+ , m_allocator( static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) )
, m_dispatcher( device.getDispatcher() )
{}
+ VideoSessionParametersKHR( std::nullptr_t ) {}
+
~VideoSessionParametersKHR()
{
- if ( m_videoSessionParametersKHR )
+ if ( m_videoSessionParameters )
{
getDispatcher()->vkDestroyVideoSessionParametersKHR(
- m_device, static_cast<VkVideoSessionParametersKHR>( m_videoSessionParametersKHR ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkVideoSessionParametersKHR>( m_videoSessionParameters ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
}
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- VideoSessionParametersKHR() = default;
-# else
- VideoSessionParametersKHR() = delete;
-# endif
+ VideoSessionParametersKHR() = delete;
VideoSessionParametersKHR( VideoSessionParametersKHR const & ) = delete;
VideoSessionParametersKHR( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT
- : m_videoSessionParametersKHR(
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionParametersKHR, {} ) )
- , m_device( rhs.m_device )
- , m_allocator( rhs.m_allocator )
- , m_dispatcher( rhs.m_dispatcher )
+ : m_device( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} ) )
+ , m_videoSessionParameters(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionParameters, {} ) )
+ , m_allocator( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} ) )
+ , m_dispatcher( VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr ) )
{}
VideoSessionParametersKHR & operator=( VideoSessionParametersKHR const & ) = delete;
VideoSessionParametersKHR & operator=( VideoSessionParametersKHR && rhs ) VULKAN_HPP_NOEXCEPT
{
if ( this != &rhs )
{
- if ( m_videoSessionParametersKHR )
+ if ( m_videoSessionParameters )
{
getDispatcher()->vkDestroyVideoSessionParametersKHR(
- m_device, static_cast<VkVideoSessionParametersKHR>( m_videoSessionParametersKHR ), m_allocator );
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkVideoSessionParametersKHR>( m_videoSessionParameters ),
+ reinterpret_cast<const VkAllocationCallbacks *>( m_allocator ) );
}
- m_videoSessionParametersKHR =
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionParametersKHR, {} );
- m_device = rhs.m_device;
- m_allocator = rhs.m_allocator;
- m_dispatcher = rhs.m_dispatcher;
+ m_device = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_device, {} );
+ m_videoSessionParameters =
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_videoSessionParameters, {} );
+ m_allocator = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_allocator, {} );
+ m_dispatcher = VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::exchange( rhs.m_dispatcher, nullptr );
}
return *this;
}
VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const & operator*() const VULKAN_HPP_NOEXCEPT
{
- return m_videoSessionParametersKHR;
+ return m_videoSessionParameters;
}
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
+ VULKAN_HPP_NAMESPACE::Device getDevice() const
{
- VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
- return m_dispatcher;
- }
-
-# if defined( VULKAN_HPP_RAII_ENABLE_DEFAULT_CONSTRUCTORS )
- explicit operator bool() const VULKAN_HPP_NOEXCEPT
- {
- return m_videoSessionParametersKHR.operator bool();
+ return m_device;
}
- bool operator!() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * getDispatcher() const
{
- return m_videoSessionParametersKHR.operator!();
+ VULKAN_HPP_ASSERT( m_dispatcher->getVkHeaderVersion() == VK_HEADER_VERSION );
+ return m_dispatcher;
}
-# endif
//=== VK_KHR_video_queue ===
- void update( const VideoSessionParametersUpdateInfoKHR & updateInfo ) const;
+ void update( const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo ) const;
private:
- VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR m_videoSessionParametersKHR;
- VkDevice m_device;
- const VkAllocationCallbacks * m_allocator;
- VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher;
+ VULKAN_HPP_NAMESPACE::Device m_device = {};
+ VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR m_videoSessionParameters = {};
+ const VULKAN_HPP_NAMESPACE::AllocationCallbacks * m_allocator = nullptr;
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeviceDispatcher const * m_dispatcher = nullptr;
};
# endif /*VK_ENABLE_BETA_EXTENSIONS*/
@@ -9592,6 +10141,19 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_VERSION_1_0 ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Instance Context::createInstance(
+ VULKAN_HPP_NAMESPACE::InstanceCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Instance( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::PhysicalDevice>
+ Instance::enumeratePhysicalDevices() const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::PhysicalDevices( *this );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures
PhysicalDevice::getFeatures() const VULKAN_HPP_NOEXCEPT
{
@@ -9602,7 +10164,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties
- PhysicalDevice::getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getFormatProperties( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::FormatProperties formatProperties;
getDispatcher()->vkGetPhysicalDeviceFormatProperties(
@@ -9613,7 +10175,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties
- PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
+ PhysicalDevice::getImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
VULKAN_HPP_NAMESPACE::ImageType type,
VULKAN_HPP_NAMESPACE::ImageTiling tiling,
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
@@ -9656,7 +10218,7 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&queueFamilyPropertyCount,
reinterpret_cast<VkQueueFamilyProperties *>( queueFamilyProperties.data() ) );
- VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() );
+ VULKAN_HPP_ASSERT( queueFamilyPropertyCount == queueFamilyProperties.size() );
return queueFamilyProperties;
}
@@ -9671,19 +10233,26 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PFN_vkVoidFunction
- Instance::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT
+ Instance::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT
{
return getDispatcher()->vkGetInstanceProcAddr( static_cast<VkInstance>( m_instance ), name.c_str() );
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE PFN_vkVoidFunction
- Device::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT
+ Device::getProcAddr( const std::string & name ) const VULKAN_HPP_NOEXCEPT
{
return getDispatcher()->vkGetDeviceProcAddr( static_cast<VkDevice>( m_device ), name.c_str() );
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Device PhysicalDevice::createDevice(
+ VULKAN_HPP_NAMESPACE::DeviceCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Device( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::ExtensionProperties>
- Context::enumerateInstanceExtensionProperties( Optional<const std::string> layerName ) const
+ Context::enumerateInstanceExtensionProperties( Optional<const std::string> layerName ) const
{
std::vector<VULKAN_HPP_NAMESPACE::ExtensionProperties> properties;
uint32_t propertyCount;
@@ -9699,22 +10268,25 @@ namespace VULKAN_HPP_NAMESPACE
layerName ? layerName->c_str() : nullptr,
&propertyCount,
reinterpret_cast<VkExtensionProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceExtensionProperties" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::ExtensionProperties>
- PhysicalDevice::enumerateDeviceExtensionProperties( Optional<const std::string> layerName ) const
+ PhysicalDevice::enumerateDeviceExtensionProperties( Optional<const std::string> layerName ) const
{
std::vector<VULKAN_HPP_NAMESPACE::ExtensionProperties> properties;
uint32_t propertyCount;
@@ -9734,18 +10306,21 @@ namespace VULKAN_HPP_NAMESPACE
layerName ? layerName->c_str() : nullptr,
&propertyCount,
reinterpret_cast<VkExtensionProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result,
VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceExtensionProperties" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
@@ -9764,17 +10339,20 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkEnumerateInstanceLayerProperties(
&propertyCount, reinterpret_cast<VkLayerProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Context::enumerateInstanceLayerProperties" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
@@ -9795,20 +10373,29 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&propertyCount,
reinterpret_cast<VkLayerProperties *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::enumerateDeviceLayerProperties" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Queue
+ Device::getQueue( uint32_t queueFamilyIndex, uint32_t queueIndex ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Queue( *this, queueFamilyIndex, queueIndex );
+ }
+
VULKAN_HPP_INLINE void Queue::submit( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo> const & submits,
VULKAN_HPP_NAMESPACE::Fence fence ) const
{
@@ -9843,6 +10430,13 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DeviceMemory Device::allocateMemory(
+ VULKAN_HPP_NAMESPACE::MemoryAllocateInfo const & allocateInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DeviceMemory( *this, allocateInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE void *
DeviceMemory::mapMemory( VULKAN_HPP_NAMESPACE::DeviceSize offset,
VULKAN_HPP_NAMESPACE::DeviceSize size,
@@ -9851,7 +10445,7 @@ namespace VULKAN_HPP_NAMESPACE
void * pData;
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkMapMemory( static_cast<VkDevice>( m_device ),
- static_cast<VkDeviceMemory>( m_deviceMemory ),
+ static_cast<VkDeviceMemory>( m_memory ),
static_cast<VkDeviceSize>( offset ),
static_cast<VkDeviceSize>( size ),
static_cast<VkMemoryMapFlags>( flags ),
@@ -9865,8 +10459,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_INLINE void DeviceMemory::unmapMemory() const VULKAN_HPP_NOEXCEPT
{
- getDispatcher()->vkUnmapMemory( static_cast<VkDevice>( m_device ),
- static_cast<VkDeviceMemory>( m_deviceMemory ) );
+ getDispatcher()->vkUnmapMemory( static_cast<VkDevice>( m_device ), static_cast<VkDeviceMemory>( m_memory ) );
}
VULKAN_HPP_INLINE void Device::flushMappedMemoryRanges(
@@ -9902,7 +10495,7 @@ namespace VULKAN_HPP_NAMESPACE
{
VULKAN_HPP_NAMESPACE::DeviceSize committedMemoryInBytes;
getDispatcher()->vkGetDeviceMemoryCommitment( static_cast<VkDevice>( m_device ),
- static_cast<VkDeviceMemory>( m_deviceMemory ),
+ static_cast<VkDeviceMemory>( m_memory ),
reinterpret_cast<VkDeviceSize *>( &committedMemoryInBytes ) );
return committedMemoryInBytes;
}
@@ -9968,12 +10561,12 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkImage>( m_image ),
&sparseMemoryRequirementCount,
reinterpret_cast<VkSparseImageMemoryRequirements *>( sparseMemoryRequirements.data() ) );
- VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount == sparseMemoryRequirements.size() );
return sparseMemoryRequirements;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties>
- PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
+ PhysicalDevice::getSparseImageFormatProperties( VULKAN_HPP_NAMESPACE::Format format,
VULKAN_HPP_NAMESPACE::ImageType type,
VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples,
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage,
@@ -10000,7 +10593,7 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkImageTiling>( tiling ),
&propertyCount,
reinterpret_cast<VkSparseImageFormatProperties *>( properties.data() ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ VULKAN_HPP_ASSERT( propertyCount == properties.size() );
return properties;
}
@@ -10018,6 +10611,13 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Fence Device::createFence(
+ VULKAN_HPP_NAMESPACE::FenceCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Fence( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void Device::resetFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences ) const
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkResetFences(
@@ -10041,7 +10641,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Device::waitForFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences,
+ Device::waitForFences( ArrayProxy<const VULKAN_HPP_NAMESPACE::Fence> const & fences,
VULKAN_HPP_NAMESPACE::Bool32 waitAll,
uint64_t timeout ) const
{
@@ -10059,6 +10659,20 @@ namespace VULKAN_HPP_NAMESPACE
return result;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Semaphore Device::createSemaphore(
+ VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Semaphore( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Event Device::createEvent(
+ VULKAN_HPP_NAMESPACE::EventCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Event( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Event::getStatus() const
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
@@ -10091,22 +10705,29 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- template <typename T>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair<VULKAN_HPP_NAMESPACE::Result, std::vector<T>>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::QueryPool Device::createQueryPool(
+ VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::QueryPool( *this, createInfo, allocator );
+ }
+
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair<VULKAN_HPP_NAMESPACE::Result, std::vector<DataType>>
QueryPool::getResults( uint32_t firstQuery,
uint32_t queryCount,
size_t dataSize,
VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const
{
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T> data( dataSize / sizeof( T ) );
- Result result =
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType> data( dataSize / sizeof( DataType ) );
+ Result result =
static_cast<Result>( getDispatcher()->vkGetQueryPoolResults( static_cast<VkDevice>( m_device ),
static_cast<VkQueryPool>( m_queryPool ),
firstQuery,
queryCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ),
static_cast<VkDeviceSize>( stride ),
static_cast<VkQueryResultFlags>( flags ) ) );
@@ -10118,20 +10739,20 @@ namespace VULKAN_HPP_NAMESPACE
return std::make_pair( result, data );
}
- template <typename T>
- VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, T>
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD std::pair<VULKAN_HPP_NAMESPACE::Result, DataType>
QueryPool::getResult( uint32_t firstQuery,
uint32_t queryCount,
VULKAN_HPP_NAMESPACE::DeviceSize stride,
VULKAN_HPP_NAMESPACE::QueryResultFlags flags ) const
{
- T data;
- Result result =
+ DataType data;
+ Result result =
static_cast<Result>( getDispatcher()->vkGetQueryPoolResults( static_cast<VkDevice>( m_device ),
static_cast<VkQueryPool>( m_queryPool ),
firstQuery,
queryCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ),
static_cast<VkDeviceSize>( stride ),
static_cast<VkQueryResultFlags>( flags ) ) );
@@ -10143,8 +10764,29 @@ namespace VULKAN_HPP_NAMESPACE
return std::make_pair( result, data );
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout
- Image::getSubresourceLayout( const ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Buffer Device::createBuffer(
+ VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Buffer( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::BufferView Device::createBufferView(
+ VULKAN_HPP_NAMESPACE::BufferViewCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::BufferView( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Image Device::createImage(
+ VULKAN_HPP_NAMESPACE::ImageCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Image( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SubresourceLayout Image::getSubresourceLayout(
+ const VULKAN_HPP_NAMESPACE::ImageSubresource & subresource ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::SubresourceLayout layout;
getDispatcher()->vkGetImageSubresourceLayout( static_cast<VkDevice>( m_device ),
@@ -10154,6 +10796,27 @@ namespace VULKAN_HPP_NAMESPACE
return layout;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::ImageView Device::createImageView(
+ VULKAN_HPP_NAMESPACE::ImageViewCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::ImageView( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::ShaderModule Device::createShaderModule(
+ VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::ShaderModule( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PipelineCache Device::createPipelineCache(
+ VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::PipelineCache( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<uint8_t> PipelineCache::getData() const
{
std::vector<uint8_t> data;
@@ -10171,17 +10834,20 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPipelineCache>( m_pipelineCache ),
&dataSize,
reinterpret_cast<void *>( data.data() ) ) );
- VULKAN_HPP_ASSERT( dataSize <= data.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( dataSize < data.size() ) )
- {
- data.resize( dataSize );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PipelineCache::getData" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( dataSize <= data.size() );
+ if ( dataSize < data.size() )
+ {
+ data.resize( dataSize );
+ }
+ }
return data;
}
@@ -10199,6 +10865,73 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline>
+ Device::createGraphicsPipelines(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, pipelineCache, createInfos, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createGraphicsPipeline(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, pipelineCache, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline>
+ Device::createComputePipelines(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, pipelineCache, createInfos, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createComputePipeline(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, pipelineCache, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PipelineLayout Device::createPipelineLayout(
+ VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::PipelineLayout( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Sampler Device::createSampler(
+ VULKAN_HPP_NAMESPACE::SamplerCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Sampler( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout
+ Device::createDescriptorSetLayout(
+ VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DescriptorSetLayout( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorPool Device::createDescriptorPool(
+ VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DescriptorPool( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void
DescriptorPool::reset( VULKAN_HPP_NAMESPACE::DescriptorPoolResetFlags flags ) const VULKAN_HPP_NOEXCEPT
{
@@ -10207,6 +10940,12 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDescriptorPoolResetFlags>( flags ) );
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::DescriptorSet>
+ Device::allocateDescriptorSets( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo const & allocateInfo ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DescriptorSets( *this, allocateInfo );
+ }
+
VULKAN_HPP_INLINE void Device::updateDescriptorSets(
ArrayProxy<const VULKAN_HPP_NAMESPACE::WriteDescriptorSet> const & descriptorWrites,
ArrayProxy<const VULKAN_HPP_NAMESPACE::CopyDescriptorSet> const & descriptorCopies ) const VULKAN_HPP_NOEXCEPT
@@ -10219,6 +10958,20 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkCopyDescriptorSet *>( descriptorCopies.data() ) );
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Framebuffer Device::createFramebuffer(
+ VULKAN_HPP_NAMESPACE::FramebufferCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Framebuffer( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::RenderPass Device::createRenderPass(
+ VULKAN_HPP_NAMESPACE::RenderPassCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Extent2D
RenderPass::getRenderAreaGranularity() const VULKAN_HPP_NOEXCEPT
{
@@ -10229,6 +10982,13 @@ namespace VULKAN_HPP_NAMESPACE
return granularity;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::CommandPool Device::createCommandPool(
+ VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::CommandPool( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void CommandPool::reset( VULKAN_HPP_NAMESPACE::CommandPoolResetFlags flags ) const
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
@@ -10241,7 +11001,13 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void CommandBuffer::begin( const CommandBufferBeginInfo & beginInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::CommandBuffer>
+ Device::allocateCommandBuffers( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo const & allocateInfo ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::CommandBuffers( *this, allocateInfo );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::begin( const VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo & beginInfo ) const
{
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkBeginCommandBuffer( static_cast<VkCommandBuffer>( m_commandBuffer ),
@@ -10536,15 +11302,16 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkBufferImageCopy *>( regions.data() ) );
}
- template <typename T>
- VULKAN_HPP_INLINE void CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
- ArrayProxy<const T> const & data ) const VULKAN_HPP_NOEXCEPT
+ template <typename DataType>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::updateBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ ArrayProxy<const DataType> const & data ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdUpdateBuffer( static_cast<VkCommandBuffer>( m_commandBuffer ),
static_cast<VkBuffer>( dstBuffer ),
static_cast<VkDeviceSize>( dstOffset ),
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<const void *>( data.data() ) );
}
@@ -10563,7 +11330,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_INLINE void CommandBuffer::clearColorImage(
VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearColorValue & color,
+ const VULKAN_HPP_NAMESPACE::ClearColorValue & color,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdClearColorImage( static_cast<VkCommandBuffer>( m_commandBuffer ),
@@ -10577,7 +11344,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_INLINE void CommandBuffer::clearDepthStencilImage(
VULKAN_HPP_NAMESPACE::Image image,
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout,
- const ClearDepthStencilValue & depthStencil,
+ const VULKAN_HPP_NAMESPACE::ClearDepthStencilValue & depthStencil,
ArrayProxy<const VULKAN_HPP_NAMESPACE::ImageSubresourceRange> const & ranges ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdClearDepthStencilImage(
@@ -10733,22 +11500,23 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkQueryResultFlags>( flags ) );
}
- template <typename T>
- VULKAN_HPP_INLINE void CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout,
- VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags,
- uint32_t offset,
- ArrayProxy<const T> const & values ) const VULKAN_HPP_NOEXCEPT
+ template <typename ValuesType>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::pushConstants( VULKAN_HPP_NAMESPACE::PipelineLayout layout,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags,
+ uint32_t offset,
+ ArrayProxy<const ValuesType> const & values ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdPushConstants( static_cast<VkCommandBuffer>( m_commandBuffer ),
static_cast<VkPipelineLayout>( layout ),
static_cast<VkShaderStageFlags>( stageFlags ),
offset,
- values.size() * sizeof( T ),
+ values.size() * sizeof( ValuesType ),
reinterpret_cast<const void *>( values.data() ) );
}
VULKAN_HPP_INLINE void
- CommandBuffer::beginRenderPass( const RenderPassBeginInfo & renderPassBegin,
+ CommandBuffer::beginRenderPass( const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
VULKAN_HPP_NAMESPACE::SubpassContents contents ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdBeginRenderPass( static_cast<VkCommandBuffer>( m_commandBuffer ),
@@ -10869,23 +11637,26 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkInstance>( m_instance ),
&physicalDeviceGroupCount,
reinterpret_cast<VkPhysicalDeviceGroupProperties *>( physicalDeviceGroupProperties.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) )
- {
- physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroups" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
+ if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() )
+ {
+ physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ }
+ }
return physicalDeviceGroupProperties;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageMemoryRequirements2( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
getDispatcher()->vkGetImageMemoryRequirements2(
@@ -10896,8 +11667,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getImageMemoryRequirements2( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getImageMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
@@ -10910,7 +11681,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferMemoryRequirements2( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
getDispatcher()->vkGetBufferMemoryRequirements2(
@@ -10921,8 +11693,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getBufferMemoryRequirements2( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getBufferMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
@@ -10935,8 +11707,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
- Device::getImageSparseMemoryRequirements2( const ImageSparseMemoryRequirementsInfo2 & info ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getImageSparseMemoryRequirements2(
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
{
uint32_t sparseMemoryRequirementCount;
getDispatcher()->vkGetImageSparseMemoryRequirements2(
@@ -10951,7 +11723,7 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2 *>( &info ),
&sparseMemoryRequirementCount,
reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
- VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount == sparseMemoryRequirements.size() );
return sparseMemoryRequirements;
}
@@ -10998,7 +11770,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2
- PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::FormatProperties2 formatProperties;
getDispatcher()->vkGetPhysicalDeviceFormatProperties2(
@@ -11010,7 +11782,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getFormatProperties2( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::FormatProperties2 & formatProperties =
@@ -11023,7 +11795,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties2
- PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
+ PhysicalDevice::getImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
{
VULKAN_HPP_NAMESPACE::ImageFormatProperties2 imageFormatProperties;
VULKAN_HPP_NAMESPACE::Result result =
@@ -11039,8 +11812,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- PhysicalDevice::getImageFormatProperties2( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> PhysicalDevice::getImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties =
@@ -11068,7 +11841,7 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&queueFamilyPropertyCount,
reinterpret_cast<VkQueueFamilyProperties2 *>( queueFamilyProperties.data() ) );
- VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() );
+ VULKAN_HPP_ASSERT( queueFamilyPropertyCount == queueFamilyProperties.size() );
return queueFamilyProperties;
}
@@ -11121,8 +11894,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>
- PhysicalDevice::getSparseImageFormatProperties2( const PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const
- VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getSparseImageFormatProperties2(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const VULKAN_HPP_NOEXCEPT
{
uint32_t propertyCount;
getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2(
@@ -11136,7 +11909,7 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2 *>( &formatInfo ),
&propertyCount,
reinterpret_cast<VkSparseImageFormatProperties2 *>( properties.data() ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ VULKAN_HPP_ASSERT( propertyCount == properties.size() );
return properties;
}
@@ -11148,20 +11921,43 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkCommandPoolTrimFlags>( flags ) );
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Queue
+ Device::getQueue2( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 const & queueInfo ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Queue( *this, queueInfo );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion
+ Device::createSamplerYcbcrConversion(
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate
+ Device::createDescriptorUpdateTemplate(
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate( *this, createInfo, allocator );
+ }
+
+ template <typename DataType>
VULKAN_HPP_INLINE void
DescriptorSet::updateWithTemplate( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- const void * pData ) const VULKAN_HPP_NOEXCEPT
+ DataType const & data ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkUpdateDescriptorSetWithTemplate(
static_cast<VkDevice>( m_device ),
static_cast<VkDescriptorSet>( m_descriptorSet ),
static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ),
- pData );
+ reinterpret_cast<const void *>( &data ) );
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties
- PhysicalDevice::getExternalBufferProperties( const PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const
- VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalBufferProperties(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::ExternalBufferProperties externalBufferProperties;
getDispatcher()->vkGetPhysicalDeviceExternalBufferProperties(
@@ -11172,8 +11968,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties
- PhysicalDevice::getExternalFenceProperties( const PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const
- VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalFenceProperties(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::ExternalFenceProperties externalFenceProperties;
getDispatcher()->vkGetPhysicalDeviceExternalFenceProperties(
@@ -11184,8 +11980,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties
- PhysicalDevice::getExternalSemaphoreProperties(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalSemaphoreProperties( const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo &
+ externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties externalSemaphoreProperties;
getDispatcher()->vkGetPhysicalDeviceExternalSemaphoreProperties(
@@ -11196,8 +11992,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport
- Device::getDescriptorSetLayoutSupport( const DescriptorSetLayoutCreateInfo & createInfo ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getDescriptorSetLayoutSupport(
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport support;
getDispatcher()->vkGetDescriptorSetLayoutSupport(
@@ -11209,7 +12005,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getDescriptorSetLayoutSupport(
- const DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport & support =
@@ -11255,26 +12051,33 @@ namespace VULKAN_HPP_NAMESPACE
stride );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::beginRenderPass2( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::RenderPass Device::createRenderPass2(
+ VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2(
+ const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdBeginRenderPass2( static_cast<VkCommandBuffer>( m_commandBuffer ),
reinterpret_cast<const VkRenderPassBeginInfo *>( &renderPassBegin ),
reinterpret_cast<const VkSubpassBeginInfo *>( &subpassBeginInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::nextSubpass2( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2(
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdNextSubpass2( static_cast<VkCommandBuffer>( m_commandBuffer ),
reinterpret_cast<const VkSubpassBeginInfo *>( &subpassBeginInfo ),
reinterpret_cast<const VkSubpassEndInfo *>( &subpassEndInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::endRenderPass2( const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2(
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
{
getDispatcher()->vkCmdEndRenderPass2( static_cast<VkCommandBuffer>( m_commandBuffer ),
reinterpret_cast<const VkSubpassEndInfo *>( &subpassEndInfo ) );
@@ -11300,7 +12103,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Device::waitSemaphores( const SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const
+ Device::waitSemaphores( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const
{
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkWaitSemaphores(
@@ -11313,7 +12116,7 @@ namespace VULKAN_HPP_NAMESPACE
return result;
}
- VULKAN_HPP_INLINE void Device::signalSemaphore( const SemaphoreSignalInfo & signalInfo ) const
+ VULKAN_HPP_INLINE void Device::signalSemaphore( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const
{
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkSignalSemaphore(
@@ -11325,30 +12128,448 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress
- Device::getBufferAddress( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferAddress( const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
return static_cast<VULKAN_HPP_NAMESPACE::DeviceAddress>( getDispatcher()->vkGetBufferDeviceAddress(
static_cast<VkDevice>( m_device ), reinterpret_cast<const VkBufferDeviceAddressInfo *>( &info ) ) );
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
- Device::getBufferOpaqueCaptureAddress( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddress(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
return getDispatcher()->vkGetBufferOpaqueCaptureAddress(
static_cast<VkDevice>( m_device ), reinterpret_cast<const VkBufferDeviceAddressInfo *>( &info ) );
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddress(
- const DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
return getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddress(
static_cast<VkDevice>( m_device ), reinterpret_cast<const VkDeviceMemoryOpaqueCaptureAddressInfo *>( &info ) );
}
+ //=== VK_VERSION_1_3 ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties>
+ PhysicalDevice::getToolProperties() const
+ {
+ std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties> toolProperties;
+ uint32_t toolCount;
+ VULKAN_HPP_NAMESPACE::Result result;
+ do
+ {
+ result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceToolProperties(
+ static_cast<VkPhysicalDevice>( m_physicalDevice ), &toolCount, nullptr ) );
+ if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && toolCount )
+ {
+ toolProperties.resize( toolCount );
+ result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceToolProperties(
+ static_cast<VkPhysicalDevice>( m_physicalDevice ),
+ &toolCount,
+ reinterpret_cast<VkPhysicalDeviceToolProperties *>( toolProperties.data() ) ) );
+ }
+ } while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolProperties" );
+ }
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ if ( toolCount < toolProperties.size() )
+ {
+ toolProperties.resize( toolCount );
+ }
+ }
+ return toolProperties;
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot Device::createPrivateDataSlot(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void Device::setPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data ) const
+ {
+ VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
+ getDispatcher()->vkSetPrivateData( static_cast<VkDevice>( m_device ),
+ static_cast<VkObjectType>( objectType_ ),
+ objectHandle,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ data ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Device::setPrivateData" );
+ }
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
+ Device::getPrivateData( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT
+ {
+ uint64_t data;
+ getDispatcher()->vkGetPrivateData( static_cast<VkDevice>( m_device ),
+ static_cast<VkObjectType>( objectType_ ),
+ objectHandle,
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ &data );
+ return data;
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetEvent2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkEvent>( event ),
+ reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::resetEvent2( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdResetEvent2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkEvent>( event ),
+ static_cast<VkPipelineStageFlags2>( stageMask ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::waitEvents2( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos ) const
+ VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
+ {
+# ifdef VULKAN_HPP_NO_EXCEPTIONS
+ VULKAN_HPP_ASSERT( events.size() == dependencyInfos.size() );
+# else
+ if ( events.size() != dependencyInfos.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::waitEvents2: events.size() != dependencyInfos.size()" );
+ }
+# endif /*VULKAN_HPP_NO_EXCEPTIONS*/
+
+ getDispatcher()->vkCmdWaitEvents2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ events.size(),
+ reinterpret_cast<const VkEvent *>( events.data() ),
+ reinterpret_cast<const VkDependencyInfo *>( dependencyInfos.data() ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2(
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdPipelineBarrier2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ uint32_t query ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdWriteTimestamp2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkPipelineStageFlags2>( stage ),
+ static_cast<VkQueryPool>( queryPool ),
+ query );
+ }
+
+ VULKAN_HPP_INLINE void Queue::submit2( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence ) const
+ {
+ VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
+ getDispatcher()->vkQueueSubmit2( static_cast<VkQueue>( m_queue ),
+ submits.size(),
+ reinterpret_cast<const VkSubmitInfo2 *>( submits.data() ),
+ static_cast<VkFence>( fence ) ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Queue::submit2" );
+ }
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2(
+ const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdCopyBuffer2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkCopyBufferInfo2 *>( &copyBufferInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::copyImage2( const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdCopyImage2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkCopyImageInfo2 *>( &copyImageInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2(
+ const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdCopyBufferToImage2(
+ static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkCopyBufferToImageInfo2 *>( &copyBufferToImageInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2(
+ const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdCopyImageToBuffer2(
+ static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkCopyImageToBufferInfo2 *>( &copyImageToBufferInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::blitImage2( const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdBlitImage2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkBlitImageInfo2 *>( &blitImageInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::resolveImage2(
+ const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdResolveImage2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkResolveImageInfo2 *>( &resolveImageInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::beginRendering(
+ const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdBeginRendering( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkRenderingInfo *>( &renderingInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::endRendering() const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdEndRendering( static_cast<VkCommandBuffer>( m_commandBuffer ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetCullMode( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkCullModeFlags>( cullMode ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetFrontFace( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkFrontFace>( frontFace ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveTopology(
+ VULKAN_HPP_NAMESPACE::PrimitiveTopology primitiveTopology ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetPrimitiveTopology( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkPrimitiveTopology>( primitiveTopology ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::setViewportWithCount(
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Viewport> const & viewports ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetViewportWithCount( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ viewports.size(),
+ reinterpret_cast<const VkViewport *>( viewports.data() ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::setScissorWithCount(
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Rect2D> const & scissors ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetScissorWithCount( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ scissors.size(),
+ reinterpret_cast<const VkRect2D *>( scissors.data() ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::bindVertexBuffers2(
+ uint32_t firstBinding,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::Buffer> const & buffers,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & offsets,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & sizes,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DeviceSize> const & strides ) const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
+ {
+# ifdef VULKAN_HPP_NO_EXCEPTIONS
+ VULKAN_HPP_ASSERT( buffers.size() == offsets.size() );
+ VULKAN_HPP_ASSERT( sizes.empty() || buffers.size() == sizes.size() );
+ VULKAN_HPP_ASSERT( strides.empty() || buffers.size() == strides.size() );
+# else
+ if ( buffers.size() != offsets.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::bindVertexBuffers2: buffers.size() != offsets.size()" );
+ }
+ if ( !sizes.empty() && buffers.size() != sizes.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::bindVertexBuffers2: buffers.size() != sizes.size()" );
+ }
+ if ( !strides.empty() && buffers.size() != strides.size() )
+ {
+ throw LogicError( VULKAN_HPP_NAMESPACE_STRING
+ "::CommandBuffer::bindVertexBuffers2: buffers.size() != strides.size()" );
+ }
+# endif /*VULKAN_HPP_NO_EXCEPTIONS*/
+
+ getDispatcher()->vkCmdBindVertexBuffers2( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ firstBinding,
+ buffers.size(),
+ reinterpret_cast<const VkBuffer *>( buffers.data() ),
+ reinterpret_cast<const VkDeviceSize *>( offsets.data() ),
+ reinterpret_cast<const VkDeviceSize *>( sizes.data() ),
+ reinterpret_cast<const VkDeviceSize *>( strides.data() ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetDepthTestEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( depthTestEnable ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetDepthWriteEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( depthWriteEnable ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetDepthCompareOp( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkCompareOp>( depthCompareOp ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::setDepthBoundsTestEnable(
+ VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetDepthBoundsTestEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( depthBoundsTestEnable ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetStencilTestEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( stencilTestEnable ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setStencilOp( VULKAN_HPP_NAMESPACE::StencilFaceFlags faceMask,
+ VULKAN_HPP_NAMESPACE::StencilOp failOp,
+ VULKAN_HPP_NAMESPACE::StencilOp passOp,
+ VULKAN_HPP_NAMESPACE::StencilOp depthFailOp,
+ VULKAN_HPP_NAMESPACE::CompareOp compareOp ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetStencilOp( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkStencilFaceFlags>( faceMask ),
+ static_cast<VkStencilOp>( failOp ),
+ static_cast<VkStencilOp>( passOp ),
+ static_cast<VkStencilOp>( depthFailOp ),
+ static_cast<VkCompareOp>( compareOp ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::setRasterizerDiscardEnable(
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetRasterizerDiscardEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( rasterizerDiscardEnable ) );
+ }
+
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetDepthBiasEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( depthBiasEnable ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::setPrimitiveRestartEnable(
+ VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable ) const VULKAN_HPP_NOEXCEPT
+ {
+ getDispatcher()->vkCmdSetPrimitiveRestartEnable( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ static_cast<VkBool32>( primitiveRestartEnable ) );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getBufferMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ getDispatcher()->vkGetDeviceBufferMemoryRequirements(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getBufferMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT
+ {
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ getDispatcher()->vkGetDeviceBufferMemoryRequirements(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2 Device::getImageMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ getDispatcher()->vkGetDeviceImageMemoryRequirements(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getImageMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT
+ {
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ getDispatcher()->vkGetDeviceImageMemoryRequirements(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
+ Device::getImageSparseMemoryRequirements( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ uint32_t sparseMemoryRequirementCount;
+ getDispatcher()->vkGetDeviceImageSparseMemoryRequirements(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ nullptr );
+ std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2> sparseMemoryRequirements(
+ sparseMemoryRequirementCount );
+ getDispatcher()->vkGetDeviceImageSparseMemoryRequirements(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount == sparseMemoryRequirements.size() );
+ return sparseMemoryRequirements;
+ }
+
//=== VK_KHR_surface ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32
- PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ PhysicalDevice::getSurfaceSupportKHR( uint32_t queueFamilyIndex, VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceSupportKHR &&
"Function <vkGetPhysicalDeviceSurfaceSupportKHR> needs extension <VK_KHR_surface> enabled!" );
@@ -11367,7 +12588,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR
- PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ PhysicalDevice::getSurfaceCapabilitiesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilitiesKHR &&
@@ -11387,7 +12608,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SurfaceFormatKHR>
- PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ PhysicalDevice::getSurfaceFormatsKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetPhysicalDeviceSurfaceFormatsKHR &&
"Function <vkGetPhysicalDeviceSurfaceFormatsKHR> needs extension <VK_KHR_surface> enabled!" );
@@ -11410,22 +12631,25 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&surfaceFormatCount,
reinterpret_cast<VkSurfaceFormatKHR *>( surfaceFormats.data() ) ) );
- VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( surfaceFormatCount < surfaceFormats.size() ) )
- {
- surfaceFormats.resize( surfaceFormatCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormatsKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
+ if ( surfaceFormatCount < surfaceFormats.size() )
+ {
+ surfaceFormats.resize( surfaceFormatCount );
+ }
+ }
return surfaceFormats;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PresentModeKHR>
- PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ PhysicalDevice::getSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSurfacePresentModesKHR &&
@@ -11450,22 +12674,32 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&presentModeCount,
reinterpret_cast<VkPresentModeKHR *>( presentModes.data() ) ) );
- VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( presentModeCount < presentModes.size() ) )
- {
- presentModes.resize( presentModeCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
+ if ( presentModeCount < presentModes.size() )
+ {
+ presentModes.resize( presentModeCount );
+ }
+ }
return presentModes;
}
//=== VK_KHR_swapchain ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR Device::createSwapchainKHR(
+ VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VkImage> SwapchainKHR::getImages() const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainImagesKHR &&
@@ -11478,7 +12712,7 @@ namespace VULKAN_HPP_NAMESPACE
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetSwapchainImagesKHR( static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
&swapchainImageCount,
nullptr ) );
if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && swapchainImageCount )
@@ -11486,20 +12720,23 @@ namespace VULKAN_HPP_NAMESPACE
swapchainImages.resize( swapchainImageCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetSwapchainImagesKHR( static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
&swapchainImageCount,
swapchainImages.data() ) );
- VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( swapchainImageCount < swapchainImages.size() ) )
- {
- swapchainImages.resize( swapchainImageCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getImages" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( swapchainImageCount <= swapchainImages.size() );
+ if ( swapchainImageCount < swapchainImages.size() )
+ {
+ swapchainImages.resize( swapchainImageCount );
+ }
+ }
return swapchainImages;
}
@@ -11514,7 +12751,7 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t imageIndex;
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkAcquireNextImageKHR( static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
timeout,
static_cast<VkSemaphore>( semaphore ),
static_cast<VkFence>( fence ),
@@ -11530,7 +12767,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Queue::presentKHR( const PresentInfoKHR & presentInfo ) const
+ Queue::presentKHR( const VULKAN_HPP_NAMESPACE::PresentInfoKHR & presentInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkQueuePresentKHR &&
"Function <vkQueuePresentKHR> needs extension <VK_KHR_swapchain> enabled!" );
@@ -11566,7 +12803,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR
- Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ Device::getGroupSurfacePresentModesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDeviceGroupSurfacePresentModesKHR &&
@@ -11586,7 +12823,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::Rect2D>
- PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ PhysicalDevice::getPresentRectanglesKHR( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDevicePresentRectanglesKHR &&
@@ -11610,22 +12847,25 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkSurfaceKHR>( surface ),
&rectCount,
reinterpret_cast<VkRect2D *>( rects.data() ) ) );
- VULKAN_HPP_ASSERT( rectCount <= rects.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( rectCount < rects.size() ) )
- {
- rects.resize( rectCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getPresentRectanglesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( rectCount <= rects.size() );
+ if ( rectCount < rects.size() )
+ {
+ rects.resize( rectCount );
+ }
+ }
return rects;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair<VULKAN_HPP_NAMESPACE::Result, uint32_t>
- Device::acquireNextImage2KHR( const AcquireNextImageInfoKHR & acquireInfo ) const
+ Device::acquireNextImage2KHR( const VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR & acquireInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireNextImage2KHR &&
"Function <vkAcquireNextImage2KHR> needs extension <VK_KHR_swapchain> enabled!" );
@@ -11668,17 +12908,20 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&propertyCount,
reinterpret_cast<VkDisplayPropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPropertiesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
@@ -11705,20 +12948,29 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&propertyCount,
reinterpret_cast<VkDisplayPlanePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlanePropertiesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::DisplayKHR>
+ PhysicalDevice::getDisplayPlaneSupportedDisplaysKHR( uint32_t planeIndex ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DisplayKHRs( *this, planeIndex );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR>
DisplayKHR::getModeProperties() const
{
@@ -11732,7 +12984,7 @@ namespace VULKAN_HPP_NAMESPACE
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetDisplayModePropertiesKHR( static_cast<VkPhysicalDevice>( m_physicalDevice ),
- static_cast<VkDisplayKHR>( m_displayKHR ),
+ static_cast<VkDisplayKHR>( m_display ),
&propertyCount,
nullptr ) );
if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && propertyCount )
@@ -11740,23 +12992,33 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetDisplayModePropertiesKHR(
static_cast<VkPhysicalDevice>( m_physicalDevice ),
- static_cast<VkDisplayKHR>( m_displayKHR ),
+ static_cast<VkDisplayKHR>( m_display ),
&propertyCount,
reinterpret_cast<VkDisplayModePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR DisplayKHR::createMode(
+ VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DisplayModeKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR
DisplayModeKHR::getDisplayPlaneCapabilities( uint32_t planeIndex ) const
{
@@ -11777,9 +13039,40 @@ namespace VULKAN_HPP_NAMESPACE
return capabilities;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createDisplayPlaneSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
+ //=== VK_KHR_display_swapchain ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR>
+ Device::createSharedSwapchainsKHR(
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SwapchainKHRs( *this, createInfos, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR Device::createSharedSwapchainKHR(
+ VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SwapchainKHR( *this, createInfo, allocator );
+ }
+
# if defined( VK_USE_PLATFORM_XLIB_KHR )
//=== VK_KHR_xlib_surface ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createXlibSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 PhysicalDevice::getXlibPresentationSupportKHR(
uint32_t queueFamilyIndex, Display & dpy, VisualID visualID ) const VULKAN_HPP_NOEXCEPT
{
@@ -11795,6 +13088,13 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_USE_PLATFORM_XCB_KHR )
//=== VK_KHR_xcb_surface ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createXcbSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32 PhysicalDevice::getXcbPresentationSupportKHR(
uint32_t queueFamilyIndex, xcb_connection_t & connection, xcb_visualid_t visual_id ) const VULKAN_HPP_NOEXCEPT
{
@@ -11810,6 +13110,13 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_USE_PLATFORM_WAYLAND_KHR )
//=== VK_KHR_wayland_surface ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createWaylandSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32
PhysicalDevice::getWaylandPresentationSupportKHR( uint32_t queueFamilyIndex,
struct wl_display & display ) const VULKAN_HPP_NOEXCEPT
@@ -11824,11 +13131,29 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VK_USE_PLATFORM_WAYLAND_KHR*/
+# if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ //=== VK_KHR_android_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createAndroidSurfaceKHR(
+ VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_ANDROID_KHR*/
+
# if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_KHR_win32_surface ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createWin32SurfaceKHR(
+ VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32
- PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getWin32PresentationSupportKHR( uint32_t queueFamilyIndex ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceWin32PresentationSupportKHR &&
@@ -11841,6 +13166,14 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_debug_report ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT
+ Instance::createDebugReportCallbackEXT(
+ VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DebugReportCallbackEXT( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void Instance::debugReportMessageEXT( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags,
VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_,
uint64_t object,
@@ -11864,7 +13197,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_debug_marker ===
- VULKAN_HPP_INLINE void Device::debugMarkerSetObjectTagEXT( const DebugMarkerObjectTagInfoEXT & tagInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::debugMarkerSetObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT & tagInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkDebugMarkerSetObjectTagEXT &&
"Function <vkDebugMarkerSetObjectTagEXT> needs extension <VK_EXT_debug_marker> enabled!" );
@@ -11878,7 +13212,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void Device::debugMarkerSetObjectNameEXT( const DebugMarkerObjectNameInfoEXT & nameInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::debugMarkerSetObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT & nameInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkDebugMarkerSetObjectNameEXT &&
"Function <vkDebugMarkerSetObjectNameEXT> needs extension <VK_EXT_debug_marker> enabled!" );
@@ -11892,8 +13227,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void
- CommandBuffer::debugMarkerBeginEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::debugMarkerBeginEXT(
+ const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerBeginEXT &&
"Function <vkCmdDebugMarkerBeginEXT> needs extension <VK_EXT_debug_marker> enabled!" );
@@ -11910,8 +13245,8 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkCmdDebugMarkerEndEXT( static_cast<VkCommandBuffer>( m_commandBuffer ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::debugMarkerInsertEXT( const DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::debugMarkerInsertEXT(
+ const VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT & markerInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDebugMarkerInsertEXT &&
"Function <vkCmdDebugMarkerInsertEXT> needs extension <VK_EXT_debug_marker> enabled!" );
@@ -11924,7 +13259,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_video_queue ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR
- PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile ) const
+ PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceVideoCapabilitiesKHR &&
@@ -11945,7 +13280,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- PhysicalDevice::getVideoCapabilitiesKHR( const VideoProfileKHR & videoProfile ) const
+ PhysicalDevice::getVideoCapabilitiesKHR( const VULKAN_HPP_NAMESPACE::VideoProfileKHR & videoProfile ) const
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR & capabilities =
@@ -11963,7 +13298,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR>
- PhysicalDevice::getVideoFormatPropertiesKHR( const PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const
+ PhysicalDevice::getVideoFormatPropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR & videoFormatInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceVideoFormatPropertiesKHR &&
@@ -11989,21 +13325,30 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceVideoFormatInfoKHR *>( &videoFormatInfo ),
&videoFormatPropertyCount,
reinterpret_cast<VkVideoFormatPropertiesKHR *>( videoFormatProperties.data() ) ) );
- VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( videoFormatPropertyCount < videoFormatProperties.size() ) )
- {
- videoFormatProperties.resize( videoFormatPropertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getVideoFormatPropertiesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( videoFormatPropertyCount <= videoFormatProperties.size() );
+ if ( videoFormatPropertyCount < videoFormatProperties.size() )
+ {
+ videoFormatProperties.resize( videoFormatPropertyCount );
+ }
+ }
return videoFormatProperties;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR Device::createVideoSessionKHR(
+ VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::VideoSessionKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR>
VideoSessionKHR::getMemoryRequirements() const
{
@@ -12018,7 +13363,7 @@ namespace VULKAN_HPP_NAMESPACE
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR( static_cast<VkDevice>( m_device ),
- static_cast<VkVideoSessionKHR>( m_videoSessionKHR ),
+ static_cast<VkVideoSessionKHR>( m_videoSession ),
&videoSessionMemoryRequirementsCount,
nullptr ) );
if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && videoSessionMemoryRequirementsCount )
@@ -12026,21 +13371,23 @@ namespace VULKAN_HPP_NAMESPACE
videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetVideoSessionMemoryRequirementsKHR(
static_cast<VkDevice>( m_device ),
- static_cast<VkVideoSessionKHR>( m_videoSessionKHR ),
+ static_cast<VkVideoSessionKHR>( m_videoSession ),
&videoSessionMemoryRequirementsCount,
reinterpret_cast<VkVideoGetMemoryPropertiesKHR *>( videoSessionMemoryRequirements.data() ) ) );
- VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() ) )
- {
- videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::VideoSessionKHR::getMemoryRequirements" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( videoSessionMemoryRequirementsCount <= videoSessionMemoryRequirements.size() );
+ if ( videoSessionMemoryRequirementsCount < videoSessionMemoryRequirements.size() )
+ {
+ videoSessionMemoryRequirements.resize( videoSessionMemoryRequirementsCount );
+ }
+ }
return videoSessionMemoryRequirements;
}
@@ -12053,7 +13400,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkBindVideoSessionMemoryKHR(
static_cast<VkDevice>( m_device ),
- static_cast<VkVideoSessionKHR>( m_videoSessionKHR ),
+ static_cast<VkVideoSessionKHR>( m_videoSession ),
videoSessionBindMemories.size(),
reinterpret_cast<const VkVideoBindMemoryKHR *>( videoSessionBindMemories.data() ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
@@ -12062,8 +13409,16 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void
- VideoSessionParametersKHR::update( const VideoSessionParametersUpdateInfoKHR & updateInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR
+ Device::createVideoSessionParametersKHR(
+ VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::VideoSessionParametersKHR( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void VideoSessionParametersKHR::update(
+ const VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR & updateInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkUpdateVideoSessionParametersKHR &&
"Function <vkUpdateVideoSessionParametersKHR> needs extension <VK_KHR_video_queue> enabled!" );
@@ -12071,7 +13426,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkUpdateVideoSessionParametersKHR(
static_cast<VkDevice>( m_device ),
- static_cast<VkVideoSessionParametersKHR>( m_videoSessionParametersKHR ),
+ static_cast<VkVideoSessionParametersKHR>( m_videoSessionParameters ),
reinterpret_cast<const VkVideoSessionParametersUpdateInfoKHR *>( &updateInfo ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -12079,8 +13434,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void
- CommandBuffer::beginVideoCodingKHR( const VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::beginVideoCodingKHR(
+ const VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR & beginInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginVideoCodingKHR &&
"Function <vkCmdBeginVideoCodingKHR> needs extension <VK_KHR_video_queue> enabled!" );
@@ -12089,8 +13444,8 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkVideoBeginCodingInfoKHR *>( &beginInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::endVideoCodingKHR( const VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::endVideoCodingKHR(
+ const VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR & endCodingInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndVideoCodingKHR &&
"Function <vkCmdEndVideoCodingKHR> needs extension <VK_KHR_video_queue> enabled!" );
@@ -12100,7 +13455,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::controlVideoCodingKHR(
- const VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR & codingControlInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdControlVideoCodingKHR &&
"Function <vkCmdControlVideoCodingKHR> needs extension <VK_KHR_video_queue> enabled!" );
@@ -12114,8 +13469,8 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_decode_queue ===
- VULKAN_HPP_INLINE void
- CommandBuffer::decodeVideoKHR( const VideoDecodeInfoKHR & frameInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::decodeVideoKHR(
+ const VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR & frameInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdDecodeVideoKHR &&
"Function <vkCmdDecodeVideoKHR> needs extension <VK_KHR_video_decode_queue> enabled!" );
@@ -12268,8 +13623,22 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NVX_binary_import ===
- VULKAN_HPP_INLINE void
- CommandBuffer::cuLaunchKernelNVX( const CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX Device::createCuModuleNVX(
+ VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::CuModuleNVX( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX Device::createCuFunctionNVX(
+ VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::CuFunctionNVX( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::cuLaunchKernelNVX(
+ const VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX & launchInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCuLaunchKernelNVX &&
"Function <vkCmdCuLaunchKernelNVX> needs extension <VK_NVX_binary_import> enabled!" );
@@ -12280,8 +13649,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NVX_image_view_handle ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t
- Device::getImageViewHandleNVX( const ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t Device::getImageViewHandleNVX(
+ const VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetImageViewHandleNVX &&
"Function <vkGetImageViewHandleNVX> needs extension <VK_NVX_image_view_handle> enabled!" );
@@ -12354,7 +13723,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_AMD_shader_info ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<uint8_t>
- Pipeline::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
+ Pipeline::getShaderInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits shaderStage,
VULKAN_HPP_NAMESPACE::ShaderInfoTypeAMD infoType ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetShaderInfoAMD &&
@@ -12382,20 +13751,55 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkShaderInfoTypeAMD>( infoType ),
&infoSize,
reinterpret_cast<void *>( info.data() ) ) );
- VULKAN_HPP_ASSERT( infoSize <= info.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( infoSize < info.size() ) )
- {
- info.resize( infoSize );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Pipeline::getShaderInfoAMD" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( infoSize <= info.size() );
+ if ( infoSize < info.size() )
+ {
+ info.resize( infoSize );
+ }
+ }
return info;
}
+ //=== VK_KHR_dynamic_rendering ===
+
+ VULKAN_HPP_INLINE void CommandBuffer::beginRenderingKHR(
+ const VULKAN_HPP_NAMESPACE::RenderingInfo & renderingInfo ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderingKHR &&
+ "Function <vkCmdBeginRenderingKHR> needs extension <VK_KHR_dynamic_rendering> enabled!" );
+
+ getDispatcher()->vkCmdBeginRenderingKHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const VkRenderingInfo *>( &renderingInfo ) );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::endRenderingKHR() const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderingKHR &&
+ "Function <vkCmdEndRenderingKHR> needs extension <VK_KHR_dynamic_rendering> enabled!" );
+
+ getDispatcher()->vkCmdEndRenderingKHR( static_cast<VkCommandBuffer>( m_commandBuffer ) );
+ }
+
+# if defined( VK_USE_PLATFORM_GGP )
+ //=== VK_GGP_stream_descriptor_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR
+ Instance::createStreamDescriptorSurfaceGGP(
+ VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_GGP*/
+
//=== VK_NV_external_memory_capabilities ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV
@@ -12434,7 +13838,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_external_memory_win32 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE
- DeviceMemory::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const
+ DeviceMemory::getMemoryWin32HandleNV( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryWin32HandleNV &&
"Function <vkGetMemoryWin32HandleNV> needs extension <VK_NV_external_memory_win32> enabled!" );
@@ -12442,7 +13846,7 @@ namespace VULKAN_HPP_NAMESPACE
HANDLE handle;
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetMemoryWin32HandleNV( static_cast<VkDevice>( m_device ),
- static_cast<VkDeviceMemory>( m_deviceMemory ),
+ static_cast<VkDeviceMemory>( m_memory ),
static_cast<VkExternalMemoryHandleTypeFlagsNV>( handleType ),
&handle ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
@@ -12516,7 +13920,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::FormatProperties2
- PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR &&
@@ -12532,7 +13936,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getFormatProperties2KHR( VULKAN_HPP_NAMESPACE::Format format ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceFormatProperties2KHR &&
@@ -12549,7 +13953,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ImageFormatProperties2
- PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
+ PhysicalDevice::getImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceImageFormatProperties2KHR &&
@@ -12569,8 +13974,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- PhysicalDevice::getImageFormatProperties2KHR( const PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> PhysicalDevice::getImageFormatProperties2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 & imageFormatInfo ) const
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::ImageFormatProperties2 & imageFormatProperties =
@@ -12602,7 +14007,7 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&queueFamilyPropertyCount,
reinterpret_cast<VkQueueFamilyProperties2 *>( queueFamilyProperties.data() ) );
- VULKAN_HPP_ASSERT( queueFamilyPropertyCount <= queueFamilyProperties.size() );
+ VULKAN_HPP_ASSERT( queueFamilyPropertyCount == queueFamilyProperties.size() );
return queueFamilyProperties;
}
@@ -12669,7 +14074,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>
PhysicalDevice::getSparseImageFormatProperties2KHR(
- const PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 & formatInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSparseImageFormatProperties2KHR &&
@@ -12687,7 +14092,7 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2 *>( &formatInfo ),
&propertyCount,
reinterpret_cast<VkSparseImageFormatProperties2 *>( properties.data() ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ VULKAN_HPP_ASSERT( propertyCount == properties.size() );
return properties;
}
@@ -12739,6 +14144,17 @@ namespace VULKAN_HPP_NAMESPACE
groupCountZ );
}
+# if defined( VK_USE_PLATFORM_VI_NN )
+ //=== VK_NN_vi_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createViSurfaceNN(
+ VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_VI_NN*/
+
//=== VK_KHR_maintenance1 ===
VULKAN_HPP_INLINE void
@@ -12775,18 +14191,20 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkInstance>( m_instance ),
&physicalDeviceGroupCount,
reinterpret_cast<VkPhysicalDeviceGroupProperties *>( physicalDeviceGroupProperties.data() ) ) );
- VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() ) )
- {
- physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Instance::enumeratePhysicalDeviceGroupsKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( physicalDeviceGroupCount <= physicalDeviceGroupProperties.size() );
+ if ( physicalDeviceGroupCount < physicalDeviceGroupProperties.size() )
+ {
+ physicalDeviceGroupProperties.resize( physicalDeviceGroupCount );
+ }
+ }
return physicalDeviceGroupProperties;
}
@@ -12794,7 +14212,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalBufferProperties
PhysicalDevice::getExternalBufferPropertiesKHR(
- const PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo & externalBufferInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceExternalBufferPropertiesKHR &&
@@ -12811,8 +14229,8 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_KHR_external_memory_win32 ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE
- Device::getMemoryWin32HandleKHR( const MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE Device::getMemoryWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR & getWin32HandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetMemoryWin32HandleKHR &&
@@ -12832,7 +14250,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR
- Device::getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ Device::getMemoryWin32HandlePropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
HANDLE handle ) const
{
VULKAN_HPP_ASSERT(
@@ -12856,7 +14274,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_memory_fd ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getMemoryFdKHR( const MemoryGetFdInfoKHR & getFdInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int
+ Device::getMemoryFdKHR( const VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR & getFdInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryFdKHR &&
"Function <vkGetMemoryFdKHR> needs extension <VK_KHR_external_memory_fd> enabled!" );
@@ -12873,7 +14292,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR
- Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ Device::getMemoryFdPropertiesKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
int fd ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetMemoryFdPropertiesKHR &&
@@ -12897,7 +14316,8 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties
PhysicalDevice::getExternalSemaphorePropertiesKHR(
- const PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo & externalSemaphoreInfo ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceExternalSemaphorePropertiesKHR &&
@@ -12915,7 +14335,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_semaphore_win32 ===
VULKAN_HPP_INLINE void Device::importSemaphoreWin32HandleKHR(
- const ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR & importSemaphoreWin32HandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkImportSemaphoreWin32HandleKHR &&
@@ -12931,8 +14351,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE
- Device::getSemaphoreWin32HandleKHR( const SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE Device::getSemaphoreWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR & getWin32HandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetSemaphoreWin32HandleKHR &&
@@ -12954,7 +14374,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_semaphore_fd ===
- VULKAN_HPP_INLINE void Device::importSemaphoreFdKHR( const ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::importSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR & importSemaphoreFdInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkImportSemaphoreFdKHR &&
"Function <vkImportSemaphoreFdKHR> needs extension <VK_KHR_external_semaphore_fd> enabled!" );
@@ -12970,7 +14391,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int
- Device::getSemaphoreFdKHR( const SemaphoreGetFdInfoKHR & getFdInfo ) const
+ Device::getSemaphoreFdKHR( const VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR & getFdInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetSemaphoreFdKHR &&
"Function <vkGetSemaphoreFdKHR> needs extension <VK_KHR_external_semaphore_fd> enabled!" );
@@ -13006,11 +14427,12 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkWriteDescriptorSet *>( descriptorWrites.data() ) );
}
+ template <typename DataType>
VULKAN_HPP_INLINE void CommandBuffer::pushDescriptorSetWithTemplateKHR(
VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
VULKAN_HPP_NAMESPACE::PipelineLayout layout,
uint32_t set,
- const void * pData ) const VULKAN_HPP_NOEXCEPT
+ DataType const & data ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdPushDescriptorSetWithTemplateKHR &&
@@ -13021,13 +14443,14 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ),
static_cast<VkPipelineLayout>( layout ),
set,
- pData );
+ reinterpret_cast<const void *>( &data ) );
}
//=== VK_EXT_conditional_rendering ===
VULKAN_HPP_INLINE void CommandBuffer::beginConditionalRenderingEXT(
- const ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT & conditionalRenderingBegin ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdBeginConditionalRenderingEXT &&
@@ -13049,9 +14472,17 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_descriptor_update_template ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate
+ Device::createDescriptorUpdateTemplateKHR(
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DescriptorUpdateTemplate( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void Device::destroyDescriptorUpdateTemplateKHR(
- VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- Optional<const AllocationCallbacks> allocator ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkDestroyDescriptorUpdateTemplateKHR &&
@@ -13064,9 +14495,10 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
}
+ template <typename DataType>
VULKAN_HPP_INLINE void
DescriptorSet::updateWithTemplateKHR( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplate descriptorUpdateTemplate,
- const void * pData ) const VULKAN_HPP_NOEXCEPT
+ DataType const & data ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkUpdateDescriptorSetWithTemplateKHR &&
@@ -13076,7 +14508,7 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDevice>( m_device ),
static_cast<VkDescriptorSet>( m_descriptorSet ),
static_cast<VkDescriptorUpdateTemplate>( descriptorUpdateTemplate ),
- pData );
+ reinterpret_cast<const void *>( &data ) );
}
//=== VK_NV_clip_space_w_scaling ===
@@ -13113,12 +14545,18 @@ namespace VULKAN_HPP_NAMESPACE
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::acquireXlibDisplayEXT" );
}
}
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayKHR
+ PhysicalDevice::getRandROutputDisplayEXT( Display & dpy, RROutput rrOutput ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, dpy, rrOutput );
+ }
# endif /*VK_USE_PLATFORM_XLIB_XRANDR_EXT*/
//=== VK_EXT_display_surface_counter ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT
- PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
+ PhysicalDevice::getSurfaceCapabilities2EXT( VULKAN_HPP_NAMESPACE::SurfaceKHR surface ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2EXT &&
@@ -13139,8 +14577,9 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_display_control ===
- VULKAN_HPP_INLINE void Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
- const DisplayPowerInfoEXT & displayPowerInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::displayPowerControlEXT( VULKAN_HPP_NAMESPACE::DisplayKHR display,
+ const VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT & displayPowerInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkDisplayPowerControlEXT &&
"Function <vkDisplayPowerControlEXT> needs extension <VK_EXT_display_control> enabled!" );
@@ -13156,8 +14595,23 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Fence Device::registerEventEXT(
+ VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT const & deviceEventInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Fence( *this, deviceEventInfo, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Fence Device::registerDisplayEventEXT(
+ VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DisplayKHR const & display,
+ VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT const & displayEventInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Fence( *this, display, displayEventInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
- SwapchainKHR::getCounterEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter ) const
+ SwapchainKHR::getCounterEXT( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagBitsEXT counter ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetSwapchainCounterEXT &&
"Function <vkGetSwapchainCounterEXT> needs extension <VK_EXT_display_control> enabled!" );
@@ -13165,7 +14619,7 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t counterValue;
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetSwapchainCounterEXT( static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
static_cast<VkSurfaceCounterFlagBitsEXT>( counter ),
&counterValue ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
@@ -13188,7 +14642,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetRefreshCycleDurationGOOGLE(
static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
reinterpret_cast<VkRefreshCycleDurationGOOGLE *>( &displayTimingProperties ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -13211,7 +14665,7 @@ namespace VULKAN_HPP_NAMESPACE
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetPastPresentationTimingGOOGLE( static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
&presentationTimingCount,
nullptr ) );
if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && presentationTimingCount )
@@ -13219,21 +14673,23 @@ namespace VULKAN_HPP_NAMESPACE
presentationTimings.resize( presentationTimingCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPastPresentationTimingGOOGLE(
static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
&presentationTimingCount,
reinterpret_cast<VkPastPresentationTimingGOOGLE *>( presentationTimings.data() ) ) );
- VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( presentationTimingCount < presentationTimings.size() ) )
- {
- presentationTimings.resize( presentationTimingCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::getPastPresentationTimingGOOGLE" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( presentationTimingCount <= presentationTimings.size() );
+ if ( presentationTimingCount < presentationTimings.size() )
+ {
+ presentationTimings.resize( presentationTimingCount );
+ }
+ }
return presentationTimings;
}
@@ -13281,9 +14737,16 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_create_renderpass2 ===
- VULKAN_HPP_INLINE void
- CommandBuffer::beginRenderPass2KHR( const RenderPassBeginInfo & renderPassBegin,
- const SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::RenderPass Device::createRenderPass2KHR(
+ VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::RenderPass( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void CommandBuffer::beginRenderPass2KHR(
+ const VULKAN_HPP_NAMESPACE::RenderPassBeginInfo & renderPassBegin,
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginRenderPass2KHR &&
"Function <vkCmdBeginRenderPass2KHR> needs extension <VK_KHR_create_renderpass2> enabled!" );
@@ -13293,9 +14756,9 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkSubpassBeginInfo *>( &subpassBeginInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::nextSubpass2KHR( const SubpassBeginInfo & subpassBeginInfo,
- const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::nextSubpass2KHR(
+ const VULKAN_HPP_NAMESPACE::SubpassBeginInfo & subpassBeginInfo,
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdNextSubpass2KHR &&
"Function <vkCmdNextSubpass2KHR> needs extension <VK_KHR_create_renderpass2> enabled!" );
@@ -13305,8 +14768,8 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkSubpassEndInfo *>( &subpassEndInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::endRenderPass2KHR( const SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::endRenderPass2KHR(
+ const VULKAN_HPP_NAMESPACE::SubpassEndInfo & subpassEndInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEndRenderPass2KHR &&
"Function <vkCmdEndRenderPass2KHR> needs extension <VK_KHR_create_renderpass2> enabled!" );
@@ -13325,7 +14788,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetSwapchainStatusKHR(
- static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchainKHR ) ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchain ) ) );
if ( ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( result != VULKAN_HPP_NAMESPACE::Result::eSuboptimalKHR ) )
{
@@ -13337,8 +14800,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_fence_capabilities ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::ExternalFenceProperties
- PhysicalDevice::getExternalFencePropertiesKHR( const PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const
- VULKAN_HPP_NOEXCEPT
+ PhysicalDevice::getExternalFencePropertiesKHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo & externalFenceInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceExternalFencePropertiesKHR &&
@@ -13355,8 +14818,8 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_USE_PLATFORM_WIN32_KHR )
//=== VK_KHR_external_fence_win32 ===
- VULKAN_HPP_INLINE void
- Device::importFenceWin32HandleKHR( const ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const
+ VULKAN_HPP_INLINE void Device::importFenceWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR & importFenceWin32HandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkImportFenceWin32HandleKHR &&
@@ -13372,8 +14835,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE
- Device::getFenceWin32HandleKHR( const FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE HANDLE Device::getFenceWin32HandleKHR(
+ const VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR & getWin32HandleInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceWin32HandleKHR &&
"Function <vkGetFenceWin32HandleKHR> needs extension <VK_KHR_external_fence_win32> enabled!" );
@@ -13394,7 +14857,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_external_fence_fd ===
- VULKAN_HPP_INLINE void Device::importFenceFdKHR( const ImportFenceFdInfoKHR & importFenceFdInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::importFenceFdKHR( const VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR & importFenceFdInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkImportFenceFdKHR &&
"Function <vkImportFenceFdKHR> needs extension <VK_KHR_external_fence_fd> enabled!" );
@@ -13408,7 +14872,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int Device::getFenceFdKHR( const FenceGetFdInfoKHR & getFdInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE int
+ Device::getFenceFdKHR( const VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR & getFdInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetFenceFdKHR &&
"Function <vkGetFenceFdKHR> needs extension <VK_KHR_external_fence_fd> enabled!" );
@@ -13427,7 +14892,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::pair<std::vector<PerformanceCounterKHR>, std::vector<PerformanceCounterDescriptionKHR>>
- PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const
+ PhysicalDevice::enumerateQueueFamilyPerformanceQueryCountersKHR( uint32_t queueFamilyIndex ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR &&
@@ -13471,7 +14936,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t PhysicalDevice::getQueueFamilyPerformanceQueryPassesKHR(
- const QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR & performanceQueryCreateInfo ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR &&
@@ -13485,7 +14951,8 @@ namespace VULKAN_HPP_NAMESPACE
return numPasses;
}
- VULKAN_HPP_INLINE void Device::acquireProfilingLockKHR( const AcquireProfilingLockInfoKHR & info ) const
+ VULKAN_HPP_INLINE void
+ Device::acquireProfilingLockKHR( const VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR & info ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkAcquireProfilingLockKHR &&
"Function <vkAcquireProfilingLockKHR> needs extension <VK_KHR_performance_query> enabled!" );
@@ -13510,7 +14977,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_get_surface_capabilities2 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR
- PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
+ PhysicalDevice::getSurfaceCapabilities2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSurfaceCapabilities2KHR &&
@@ -13530,8 +14998,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- PhysicalDevice::getSurfaceCapabilities2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
+ VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...> PhysicalDevice::getSurfaceCapabilities2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR & surfaceCapabilities =
@@ -13549,7 +15017,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>
- PhysicalDevice::getSurfaceFormats2KHR( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
+ PhysicalDevice::getSurfaceFormats2KHR(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSurfaceFormats2KHR &&
@@ -13573,17 +15042,20 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ),
&surfaceFormatCount,
reinterpret_cast<VkSurfaceFormat2KHR *>( surfaceFormats.data() ) ) );
- VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( surfaceFormatCount < surfaceFormats.size() ) )
- {
- surfaceFormats.resize( surfaceFormatCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfaceFormats2KHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( surfaceFormatCount <= surfaceFormats.size() );
+ if ( surfaceFormatCount < surfaceFormats.size() )
+ {
+ surfaceFormats.resize( surfaceFormatCount );
+ }
+ }
return surfaceFormats;
}
@@ -13610,17 +15082,20 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&propertyCount,
reinterpret_cast<VkDisplayProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayProperties2KHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
@@ -13647,17 +15122,20 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&propertyCount,
reinterpret_cast<VkDisplayPlaneProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getDisplayPlaneProperties2KHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
@@ -13675,7 +15153,7 @@ namespace VULKAN_HPP_NAMESPACE
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetDisplayModeProperties2KHR( static_cast<VkPhysicalDevice>( m_physicalDevice ),
- static_cast<VkDisplayKHR>( m_displayKHR ),
+ static_cast<VkDisplayKHR>( m_display ),
&propertyCount,
nullptr ) );
if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && propertyCount )
@@ -13683,25 +15161,29 @@ namespace VULKAN_HPP_NAMESPACE
properties.resize( propertyCount );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetDisplayModeProperties2KHR(
static_cast<VkPhysicalDevice>( m_physicalDevice ),
- static_cast<VkDisplayKHR>( m_displayKHR ),
+ static_cast<VkDisplayKHR>( m_display ),
&propertyCount,
reinterpret_cast<VkDisplayModeProperties2KHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::getModeProperties2" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR
- PhysicalDevice::getDisplayPlaneCapabilities2KHR( const DisplayPlaneInfo2KHR & displayPlaneInfo ) const
+ PhysicalDevice::getDisplayPlaneCapabilities2KHR(
+ const VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR & displayPlaneInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDisplayPlaneCapabilities2KHR &&
@@ -13720,9 +15202,32 @@ namespace VULKAN_HPP_NAMESPACE
return capabilities;
}
+# if defined( VK_USE_PLATFORM_IOS_MVK )
+ //=== VK_MVK_ios_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createIOSSurfaceMVK(
+ VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_IOS_MVK*/
+
+# if defined( VK_USE_PLATFORM_MACOS_MVK )
+ //=== VK_MVK_macos_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createMacOSSurfaceMVK(
+ VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_MACOS_MVK*/
+
//=== VK_EXT_debug_utils ===
- VULKAN_HPP_INLINE void Device::setDebugUtilsObjectNameEXT( const DebugUtilsObjectNameInfoEXT & nameInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::setDebugUtilsObjectNameEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT & nameInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkSetDebugUtilsObjectNameEXT &&
"Function <vkSetDebugUtilsObjectNameEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13736,7 +15241,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void Device::setDebugUtilsObjectTagEXT( const DebugUtilsObjectTagInfoEXT & tagInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::setDebugUtilsObjectTagEXT( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT & tagInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkSetDebugUtilsObjectTagEXT &&
"Function <vkSetDebugUtilsObjectTagEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13750,8 +15256,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void
- Queue::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Queue::beginDebugUtilsLabelEXT(
+ const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkQueueBeginDebugUtilsLabelEXT &&
"Function <vkQueueBeginDebugUtilsLabelEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13768,8 +15274,8 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkQueueEndDebugUtilsLabelEXT( static_cast<VkQueue>( m_queue ) );
}
- VULKAN_HPP_INLINE void
- Queue::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void Queue::insertDebugUtilsLabelEXT(
+ const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkQueueInsertDebugUtilsLabelEXT &&
"Function <vkQueueInsertDebugUtilsLabelEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13778,8 +15284,8 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkDebugUtilsLabelEXT *>( &labelInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::beginDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::beginDebugUtilsLabelEXT(
+ const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBeginDebugUtilsLabelEXT &&
"Function <vkCmdBeginDebugUtilsLabelEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13796,8 +15302,8 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkCmdEndDebugUtilsLabelEXT( static_cast<VkCommandBuffer>( m_commandBuffer ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::insertDebugUtilsLabelEXT( const DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::insertDebugUtilsLabelEXT(
+ const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT & labelInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdInsertDebugUtilsLabelEXT &&
"Function <vkCmdInsertDebugUtilsLabelEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13806,10 +15312,18 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkDebugUtilsLabelEXT *>( &labelInfo ) );
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT
+ Instance::createDebugUtilsMessengerEXT(
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DebugUtilsMessengerEXT( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void Instance::submitDebugUtilsMessageEXT(
- VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
- VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
- const DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageTypes,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT & callbackData ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkSubmitDebugUtilsMessageEXT &&
"Function <vkSubmitDebugUtilsMessageEXT> needs extension <VK_EXT_debug_utils> enabled!" );
@@ -13825,7 +15339,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_ANDROID_external_memory_android_hardware_buffer ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID
- Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const
+ Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetAndroidHardwareBufferPropertiesANDROID &&
@@ -13847,7 +15361,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD StructureChain<X, Y, Z...>
- Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const
+ Device::getAndroidHardwareBufferPropertiesANDROID( const struct AHardwareBuffer & buffer ) const
{
StructureChain<X, Y, Z...> structureChain;
VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID & properties =
@@ -13865,8 +15379,8 @@ namespace VULKAN_HPP_NAMESPACE
return structureChain;
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE struct AHardwareBuffer *
- Device::getMemoryAndroidHardwareBufferANDROID( const MemoryGetAndroidHardwareBufferInfoANDROID & info ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE struct AHardwareBuffer * Device::getMemoryAndroidHardwareBufferANDROID(
+ const VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID & info ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetMemoryAndroidHardwareBufferANDROID &&
@@ -13889,7 +15403,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_sample_locations ===
VULKAN_HPP_INLINE void CommandBuffer::setSampleLocationsEXT(
- const SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT & sampleLocationsInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetSampleLocationsEXT &&
"Function <vkCmdSetSampleLocationsEXT> needs extension <VK_EXT_sample_locations> enabled!" );
@@ -13900,7 +15414,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT
- PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const
+ PhysicalDevice::getMultisamplePropertiesEXT( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples ) const
VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
@@ -13918,7 +15432,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_get_memory_requirements2 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ Device::getImageMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetImageMemoryRequirements2KHR &&
@@ -13933,8 +15448,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getImageMemoryRequirements2KHR( const ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getImageMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetImageMemoryRequirements2KHR &&
@@ -13951,7 +15466,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ Device::getBufferMemoryRequirements2KHR( const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const
+ VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetBufferMemoryRequirements2KHR &&
@@ -13966,8 +15482,8 @@ namespace VULKAN_HPP_NAMESPACE
}
template <typename X, typename Y, typename... Z>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
- Device::getBufferMemoryRequirements2KHR( const BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getBufferMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetBufferMemoryRequirements2KHR &&
@@ -13984,8 +15500,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
- Device::getImageSparseMemoryRequirements2KHR( const ImageSparseMemoryRequirementsInfo2 & info ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getImageSparseMemoryRequirements2KHR(
+ const VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetImageSparseMemoryRequirements2KHR &&
@@ -14004,12 +15520,20 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2 *>( &info ),
&sparseMemoryRequirementCount,
reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
- VULKAN_HPP_ASSERT( sparseMemoryRequirementCount <= sparseMemoryRequirements.size() );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount == sparseMemoryRequirements.size() );
return sparseMemoryRequirements;
}
//=== VK_KHR_acceleration_structure ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR
+ Device::createAccelerationStructureKHR(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructuresKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR> const & infos,
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR * const> const & pBuildRangeInfos )
@@ -14112,8 +15636,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureInfoKHR & info ) const
+ Device::copyAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCopyAccelerationStructureKHR &&
@@ -14133,9 +15657,9 @@ namespace VULKAN_HPP_NAMESPACE
return result;
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Device::copyAccelerationStructureToMemoryKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyAccelerationStructureToMemoryInfoKHR & info ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::copyAccelerationStructureToMemoryKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCopyAccelerationStructureToMemoryKHR &&
@@ -14155,9 +15679,9 @@ namespace VULKAN_HPP_NAMESPACE
return result;
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Device::copyMemoryToAccelerationStructureKHR( VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
- const CopyMemoryToAccelerationStructureInfoKHR & info ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result Device::copyMemoryToAccelerationStructureKHR(
+ VULKAN_HPP_NAMESPACE::DeferredOperationKHR deferredOperation,
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCopyMemoryToAccelerationStructureKHR &&
@@ -14177,8 +15701,8 @@ namespace VULKAN_HPP_NAMESPACE
return result;
}
- template <typename T>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<T> Device::writeAccelerationStructuresPropertiesKHR(
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<DataType> Device::writeAccelerationStructuresPropertiesKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
size_t dataSize,
@@ -14188,14 +15712,14 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR &&
"Function <vkWriteAccelerationStructuresPropertiesKHR> needs extension <VK_KHR_acceleration_structure> enabled!" );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR(
static_cast<VkDevice>( m_device ),
accelerationStructures.size(),
reinterpret_cast<const VkAccelerationStructureKHR *>( accelerationStructures.data() ),
static_cast<VkQueryType>( queryType ),
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ),
stride ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
@@ -14206,19 +15730,19 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD T Device::writeAccelerationStructuresPropertyKHR(
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType Device::writeAccelerationStructuresPropertyKHR(
ArrayProxy<const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR> const & accelerationStructures,
VULKAN_HPP_NAMESPACE::QueryType queryType,
size_t stride ) const
{
- T data;
- Result result = static_cast<Result>( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR(
+ DataType data;
+ Result result = static_cast<Result>( getDispatcher()->vkWriteAccelerationStructuresPropertiesKHR(
static_cast<VkDevice>( m_device ),
accelerationStructures.size(),
reinterpret_cast<const VkAccelerationStructureKHR *>( accelerationStructures.data() ),
static_cast<VkQueryType>( queryType ),
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ),
stride ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
@@ -14229,7 +15753,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureKHR(
- const CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdCopyAccelerationStructureKHR &&
@@ -14241,7 +15765,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::copyAccelerationStructureToMemoryKHR(
- const CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdCopyAccelerationStructureToMemoryKHR &&
@@ -14253,7 +15777,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::copyMemoryToAccelerationStructureKHR(
- const CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdCopyMemoryToAccelerationStructureKHR &&
@@ -14265,8 +15789,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress
- Device::getAccelerationStructureAddressKHR( const AccelerationStructureDeviceAddressInfoKHR & info ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getAccelerationStructureAddressKHR(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetAccelerationStructureDeviceAddressKHR &&
@@ -14298,8 +15822,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureCompatibilityKHR
- Device::getAccelerationStructureCompatibilityKHR( const AccelerationStructureVersionInfoKHR & versionInfo ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getAccelerationStructureCompatibilityKHR(
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR & versionInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDeviceAccelerationStructureCompatibilityKHR &&
@@ -14314,10 +15838,10 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR
- Device::getAccelerationStructureBuildSizesKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
- const AccelerationStructureBuildGeometryInfoKHR & buildInfo,
- ArrayProxy<const uint32_t> const & maxPrimitiveCounts ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getAccelerationStructureBuildSizesKHR(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureBuildTypeKHR buildType,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR & buildInfo,
+ ArrayProxy<const uint32_t> const & maxPrimitiveCounts ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetAccelerationStructureBuildSizesKHR &&
@@ -14335,9 +15859,17 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_sampler_ycbcr_conversion ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion
+ Device::createSamplerYcbcrConversionKHR(
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SamplerYcbcrConversion( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void Device::destroySamplerYcbcrConversionKHR(
- VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
- Optional<const AllocationCallbacks> allocator ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion ycbcrConversion,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkDestroySamplerYcbcrConversionKHR &&
@@ -14409,6 +15941,14 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_validation_cache ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT
+ Device::createValidationCacheEXT(
+ VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::ValidationCacheEXT( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_INLINE void
ValidationCacheEXT::merge( ArrayProxy<const VULKAN_HPP_NAMESPACE::ValidationCacheEXT> const & srcCaches ) const
{
@@ -14418,7 +15958,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkMergeValidationCachesEXT(
static_cast<VkDevice>( m_device ),
- static_cast<VkValidationCacheEXT>( m_validationCacheEXT ),
+ static_cast<VkValidationCacheEXT>( m_validationCache ),
srcCaches.size(),
reinterpret_cast<const VkValidationCacheEXT *>( srcCaches.data() ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
@@ -14439,7 +15979,7 @@ namespace VULKAN_HPP_NAMESPACE
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetValidationCacheDataEXT( static_cast<VkDevice>( m_device ),
- static_cast<VkValidationCacheEXT>( m_validationCacheEXT ),
+ static_cast<VkValidationCacheEXT>( m_validationCache ),
&dataSize,
nullptr ) );
if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && dataSize )
@@ -14447,20 +15987,23 @@ namespace VULKAN_HPP_NAMESPACE
data.resize( dataSize );
result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkGetValidationCacheDataEXT( static_cast<VkDevice>( m_device ),
- static_cast<VkValidationCacheEXT>( m_validationCacheEXT ),
+ static_cast<VkValidationCacheEXT>( m_validationCache ),
&dataSize,
reinterpret_cast<void *>( data.data() ) ) );
- VULKAN_HPP_ASSERT( dataSize <= data.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( dataSize < data.size() ) )
- {
- data.resize( dataSize );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::ValidationCacheEXT::getData" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( dataSize <= data.size() );
+ if ( dataSize < data.size() )
+ {
+ data.resize( dataSize );
+ }
+ }
return data;
}
@@ -14510,9 +16053,17 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_ray_tracing ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV
+ Device::createAccelerationStructureNV(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::AccelerationStructureNV( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2KHR
Device::getAccelerationStructureMemoryRequirementsNV(
- const AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV &&
@@ -14529,7 +16080,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...>
Device::getAccelerationStructureMemoryRequirementsNV(
- const AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetAccelerationStructureMemoryRequirementsNV &&
@@ -14564,14 +16115,14 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::buildAccelerationStructureNV(
- const AccelerationStructureInfoNV & info,
- VULKAN_HPP_NAMESPACE::Buffer instanceData,
- VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
- VULKAN_HPP_NAMESPACE::Bool32 update,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
- VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
- VULKAN_HPP_NAMESPACE::Buffer scratch,
- VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV & info,
+ VULKAN_HPP_NAMESPACE::Buffer instanceData,
+ VULKAN_HPP_NAMESPACE::DeviceSize instanceOffset,
+ VULKAN_HPP_NAMESPACE::Bool32 update,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV dst,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV src,
+ VULKAN_HPP_NAMESPACE::Buffer scratch,
+ VULKAN_HPP_NAMESPACE::DeviceSize scratchOffset ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBuildAccelerationStructureNV &&
"Function <vkCmdBuildAccelerationStructureNV> needs extension <VK_NV_ray_tracing> enabled!" );
@@ -14637,22 +16188,41 @@ namespace VULKAN_HPP_NAMESPACE
depth );
}
- template <typename T>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<T>
- Pipeline::getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline>
+ Device::createRayTracingPipelinesNV(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, pipelineCache, createInfos, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createRayTracingPipelineNV(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, pipelineCache, createInfo, allocator );
+ }
+
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<DataType>
+ Pipeline::getRayTracingShaderGroupHandlesNV( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetRayTracingShaderGroupHandlesNV &&
"Function <vkGetRayTracingShaderGroupHandlesNV> needs extension <VK_NV_ray_tracing> enabled!" );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>(
getDispatcher()->vkGetRayTracingShaderGroupHandlesNV( static_cast<VkDevice>( m_device ),
static_cast<VkPipeline>( m_pipeline ),
firstGroup,
groupCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -14661,16 +16231,17 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD T Pipeline::getRayTracingShaderGroupHandleNV( uint32_t firstGroup, uint32_t groupCount ) const
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType Pipeline::getRayTracingShaderGroupHandleNV( uint32_t firstGroup,
+ uint32_t groupCount ) const
{
- T data;
- Result result = static_cast<Result>(
+ DataType data;
+ Result result = static_cast<Result>(
getDispatcher()->vkGetRayTracingShaderGroupHandlesNV( static_cast<VkDevice>( m_device ),
static_cast<VkPipeline>( m_pipeline ),
firstGroup,
groupCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -14679,18 +16250,19 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<T> AccelerationStructureNV::getHandle( size_t dataSize ) const
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<DataType>
+ AccelerationStructureNV::getHandle( size_t dataSize ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetAccelerationStructureHandleNV &&
"Function <vkGetAccelerationStructureHandleNV> needs extension <VK_NV_ray_tracing> enabled!" );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>( getDispatcher()->vkGetAccelerationStructureHandleNV(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>( getDispatcher()->vkGetAccelerationStructureHandleNV(
static_cast<VkDevice>( m_device ),
- static_cast<VkAccelerationStructureNV>( m_accelerationStructureNV ),
- data.size() * sizeof( T ),
+ static_cast<VkAccelerationStructureNV>( m_accelerationStructure ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -14699,14 +16271,14 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD T AccelerationStructureNV::getHandle() const
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType AccelerationStructureNV::getHandle() const
{
- T data;
- Result result = static_cast<Result>( getDispatcher()->vkGetAccelerationStructureHandleNV(
+ DataType data;
+ Result result = static_cast<Result>( getDispatcher()->vkGetAccelerationStructureHandleNV(
static_cast<VkDevice>( m_device ),
- static_cast<VkAccelerationStructureNV>( m_accelerationStructureNV ),
- sizeof( T ),
+ static_cast<VkAccelerationStructureNV>( m_accelerationStructure ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -14751,8 +16323,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_maintenance3 ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport
- Device::getDescriptorSetLayoutSupportKHR( const DescriptorSetLayoutCreateInfo & createInfo ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getDescriptorSetLayoutSupportKHR(
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDescriptorSetLayoutSupportKHR &&
@@ -14768,7 +16340,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getDescriptorSetLayoutSupportKHR(
- const DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo & createInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDescriptorSetLayoutSupportKHR &&
@@ -14829,7 +16401,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_external_memory_host ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT
- Device::getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ Device::getMemoryHostPointerPropertiesEXT( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
const void * pHostPointer ) const
{
VULKAN_HPP_ASSERT(
@@ -14893,17 +16465,20 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&timeDomainCount,
reinterpret_cast<VkTimeDomainEXT *>( timeDomains.data() ) ) );
- VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( timeDomainCount < timeDomains.size() ) )
- {
- timeDomains.resize( timeDomainCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCalibrateableTimeDomainsEXT" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( timeDomainCount <= timeDomains.size() );
+ if ( timeDomainCount < timeDomains.size() )
+ {
+ timeDomains.resize( timeDomainCount );
+ }
+ }
return timeDomains;
}
@@ -14933,6 +16508,30 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair<uint64_t, uint64_t>
+ Device::getCalibratedTimestampEXT( const VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT & timestampInfo ) const
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetCalibratedTimestampsEXT &&
+ "Function <vkGetCalibratedTimestampsEXT> needs extension <VK_EXT_calibrated_timestamps> enabled!" );
+
+ std::pair<uint64_t, uint64_t> data;
+ uint64_t & timestamp = data.first;
+ uint64_t & maxDeviation = data.second;
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetCalibratedTimestampsEXT(
+ static_cast<VkDevice>( m_device ),
+ 1,
+ reinterpret_cast<const VkCalibratedTimestampInfoEXT *>( &timestampInfo ),
+ &timestamp,
+ &maxDeviation ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getCalibratedTimestampEXT" );
+ }
+ return data;
+ }
+
//=== VK_NV_mesh_shader ===
VULKAN_HPP_INLINE void CommandBuffer::drawMeshTasksNV( uint32_t taskCount,
@@ -14996,13 +16595,16 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_device_diagnostic_checkpoints ===
- VULKAN_HPP_INLINE void CommandBuffer::setCheckpointNV( const void * pCheckpointMarker ) const VULKAN_HPP_NOEXCEPT
+ template <typename CheckpointMarkerType>
+ VULKAN_HPP_INLINE void
+ CommandBuffer::setCheckpointNV( CheckpointMarkerType const & checkpointMarker ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdSetCheckpointNV &&
"Function <vkCmdSetCheckpointNV> needs extension <VK_NV_device_diagnostic_checkpoints> enabled!" );
- getDispatcher()->vkCmdSetCheckpointNV( static_cast<VkCommandBuffer>( m_commandBuffer ), pCheckpointMarker );
+ getDispatcher()->vkCmdSetCheckpointNV( static_cast<VkCommandBuffer>( m_commandBuffer ),
+ reinterpret_cast<const void *>( &checkpointMarker ) );
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::CheckpointDataNV>
@@ -15018,7 +16620,7 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkGetQueueCheckpointDataNV( static_cast<VkQueue>( m_queue ),
&checkpointDataCount,
reinterpret_cast<VkCheckpointDataNV *>( checkpointData.data() ) );
- VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() );
+ VULKAN_HPP_ASSERT( checkpointDataCount == checkpointData.size() );
return checkpointData;
}
@@ -15042,7 +16644,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
- Device::waitSemaphoresKHR( const SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const
+ Device::waitSemaphoresKHR( const VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo & waitInfo, uint64_t timeout ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkWaitSemaphoresKHR &&
"Function <vkWaitSemaphoresKHR> needs extension <VK_KHR_timeline_semaphore> enabled!" );
@@ -15058,7 +16660,8 @@ namespace VULKAN_HPP_NAMESPACE
return result;
}
- VULKAN_HPP_INLINE void Device::signalSemaphoreKHR( const SemaphoreSignalInfo & signalInfo ) const
+ VULKAN_HPP_INLINE void
+ Device::signalSemaphoreKHR( const VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo & signalInfo ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkSignalSemaphoreKHR &&
"Function <vkSignalSemaphoreKHR> needs extension <VK_KHR_timeline_semaphore> enabled!" );
@@ -15074,8 +16677,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_INTEL_performance_query ===
- VULKAN_HPP_INLINE void
- Device::initializePerformanceApiINTEL( const InitializePerformanceApiInfoINTEL & initializeInfo ) const
+ VULKAN_HPP_INLINE void Device::initializePerformanceApiINTEL(
+ const VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL & initializeInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkInitializePerformanceApiINTEL &&
@@ -15100,8 +16703,8 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkUninitializePerformanceApiINTEL( static_cast<VkDevice>( m_device ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::setPerformanceMarkerINTEL( const PerformanceMarkerInfoINTEL & markerInfo ) const
+ VULKAN_HPP_INLINE void CommandBuffer::setPerformanceMarkerINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL & markerInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdSetPerformanceMarkerINTEL &&
@@ -15117,8 +16720,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void
- CommandBuffer::setPerformanceStreamMarkerINTEL( const PerformanceStreamMarkerInfoINTEL & markerInfo ) const
+ VULKAN_HPP_INLINE void CommandBuffer::setPerformanceStreamMarkerINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL & markerInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdSetPerformanceStreamMarkerINTEL &&
@@ -15134,8 +16737,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void
- CommandBuffer::setPerformanceOverrideINTEL( const PerformanceOverrideInfoINTEL & overrideInfo ) const
+ VULKAN_HPP_INLINE void CommandBuffer::setPerformanceOverrideINTEL(
+ const VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL & overrideInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdSetPerformanceOverrideINTEL &&
@@ -15151,6 +16754,13 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL
+ Device::acquirePerformanceConfigurationINTEL(
+ VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL const & acquireInfo ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::PerformanceConfigurationINTEL( *this, acquireInfo );
+ }
+
VULKAN_HPP_INLINE void
Queue::setPerformanceConfigurationINTEL( VULKAN_HPP_NAMESPACE::PerformanceConfigurationINTEL configuration ) const
{
@@ -15168,7 +16778,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::PerformanceValueINTEL
- Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const
+ Device::getPerformanceParameterINTEL( VULKAN_HPP_NAMESPACE::PerformanceParameterTypeINTEL parameter ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPerformanceParameterINTEL &&
@@ -15195,10 +16805,33 @@ namespace VULKAN_HPP_NAMESPACE
"Function <vkSetLocalDimmingAMD> needs extension <VK_AMD_display_native_hdr> enabled!" );
getDispatcher()->vkSetLocalDimmingAMD( static_cast<VkDevice>( m_device ),
- static_cast<VkSwapchainKHR>( m_swapchainKHR ),
+ static_cast<VkSwapchainKHR>( m_swapchain ),
static_cast<VkBool32>( localDimmingEnable ) );
}
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_imagepipe_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR
+ Instance::createImagePipeSurfaceFUCHSIA(
+ VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+# if defined( VK_USE_PLATFORM_METAL_EXT )
+ //=== VK_EXT_metal_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createMetalSurfaceEXT(
+ VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+# endif /*VK_USE_PLATFORM_METAL_EXT*/
+
//=== VK_KHR_fragment_shading_rate ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR>
@@ -15223,23 +16856,25 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&fragmentShadingRateCount,
reinterpret_cast<VkPhysicalDeviceFragmentShadingRateKHR *>( fragmentShadingRates.data() ) ) );
- VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( fragmentShadingRateCount < fragmentShadingRates.size() ) )
- {
- fragmentShadingRates.resize( fragmentShadingRateCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getFragmentShadingRatesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( fragmentShadingRateCount <= fragmentShadingRates.size() );
+ if ( fragmentShadingRateCount < fragmentShadingRates.size() )
+ {
+ fragmentShadingRates.resize( fragmentShadingRateCount );
+ }
+ }
return fragmentShadingRates;
}
VULKAN_HPP_INLINE void CommandBuffer::setFragmentShadingRateKHR(
- const Extent2D & fragmentSize,
+ const VULKAN_HPP_NAMESPACE::Extent2D & fragmentSize,
const VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR combinerOps[2] ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
@@ -15254,8 +16889,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_buffer_device_address ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress
- Device::getBufferAddressEXT( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress Device::getBufferAddressEXT(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetBufferDeviceAddressEXT &&
@@ -15267,16 +16902,16 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_tooling_info ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties>
PhysicalDevice::getToolPropertiesEXT() const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT &&
"Function <vkGetPhysicalDeviceToolPropertiesEXT> needs extension <VK_EXT_tooling_info> enabled!" );
- std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT> toolProperties;
- uint32_t toolCount;
- VULKAN_HPP_NAMESPACE::Result result;
+ std::vector<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties> toolProperties;
+ uint32_t toolCount;
+ VULKAN_HPP_NAMESPACE::Result result;
do
{
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT(
@@ -15287,18 +16922,21 @@ namespace VULKAN_HPP_NAMESPACE
result = static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetPhysicalDeviceToolPropertiesEXT(
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&toolCount,
- reinterpret_cast<VkPhysicalDeviceToolPropertiesEXT *>( toolProperties.data() ) ) );
- VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ reinterpret_cast<VkPhysicalDeviceToolProperties *>( toolProperties.data() ) ) );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( toolCount < toolProperties.size() ) )
- {
- toolProperties.resize( toolCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getToolPropertiesEXT" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( toolCount <= toolProperties.size() );
+ if ( toolCount < toolProperties.size() )
+ {
+ toolProperties.resize( toolCount );
+ }
+ }
return toolProperties;
}
@@ -15312,7 +16950,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkWaitForPresentKHR(
- static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchainKHR ), presentId, timeout ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchain ), presentId, timeout ) );
if ( ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( result != VULKAN_HPP_NAMESPACE::Result::eTimeout ) )
{
@@ -15346,18 +16984,21 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&propertyCount,
reinterpret_cast<VkCooperativeMatrixPropertiesNV *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( propertyCount < properties.size() ) )
- {
- properties.resize( propertyCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result,
VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getCooperativeMatrixPropertiesNV" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( propertyCount <= properties.size() );
+ if ( propertyCount < properties.size() )
+ {
+ properties.resize( propertyCount );
+ }
+ }
return properties;
}
@@ -15386,18 +17027,21 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkPhysicalDevice>( m_physicalDevice ),
&combinationCount,
reinterpret_cast<VkFramebufferMixedSamplesCombinationNV *>( combinations.data() ) ) );
- VULKAN_HPP_ASSERT( combinationCount <= combinations.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( combinationCount < combinations.size() ) )
- {
- combinations.resize( combinationCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException(
result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSupportedFramebufferMixedSamplesCombinationsNV" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( combinationCount <= combinations.size() );
+ if ( combinationCount < combinations.size() )
+ {
+ combinations.resize( combinationCount );
+ }
+ }
return combinations;
}
@@ -15405,7 +17049,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_EXT_full_screen_exclusive ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PresentModeKHR>
- PhysicalDevice::getSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
+ PhysicalDevice::getSurfacePresentModes2EXT(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPhysicalDeviceSurfacePresentModes2EXT &&
@@ -15430,17 +17075,20 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( &surfaceInfo ),
&presentModeCount,
reinterpret_cast<VkPresentModeKHR *>( presentModes.data() ) ) );
- VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( presentModeCount < presentModes.size() ) )
- {
- presentModes.resize( presentModeCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::PhysicalDevice::getSurfacePresentModes2EXT" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( presentModeCount <= presentModes.size() );
+ if ( presentModeCount < presentModes.size() )
+ {
+ presentModes.resize( presentModeCount );
+ }
+ }
return presentModes;
}
@@ -15452,7 +17100,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkAcquireFullScreenExclusiveModeEXT(
- static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchainKHR ) ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchain ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::acquireFullScreenExclusiveModeEXT" );
@@ -15467,7 +17115,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkReleaseFullScreenExclusiveModeEXT(
- static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchainKHR ) ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkSwapchainKHR>( m_swapchain ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::SwapchainKHR::releaseFullScreenExclusiveModeEXT" );
@@ -15475,7 +17123,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR
- Device::getGroupSurfacePresentModes2EXT( const PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
+ Device::getGroupSurfacePresentModes2EXT(
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR & surfaceInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDeviceGroupSurfacePresentModes2EXT &&
@@ -15495,10 +17144,19 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
+ //=== VK_EXT_headless_surface ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createHeadlessSurfaceEXT(
+ VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
//=== VK_KHR_buffer_device_address ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress
- Device::getBufferAddressKHR( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::DeviceAddress Device::getBufferAddressKHR(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetBufferDeviceAddressKHR &&
@@ -15508,8 +17166,8 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<VkDevice>( m_device ), reinterpret_cast<const VkBufferDeviceAddressInfo *>( &info ) ) );
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
- Device::getBufferOpaqueCaptureAddressKHR( const BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getBufferOpaqueCaptureAddressKHR(
+ const VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetBufferOpaqueCaptureAddressKHR &&
@@ -15520,7 +17178,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t Device::getMemoryOpaqueCaptureAddressKHR(
- const DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetDeviceMemoryOpaqueCaptureAddressKHR &&
@@ -15727,6 +17385,13 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_deferred_host_operations ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR
+ Device::createDeferredOperationKHR(
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR( *this, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint32_t DeferredOperationKHR::getMaxConcurrency() const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
@@ -15734,7 +17399,7 @@ namespace VULKAN_HPP_NAMESPACE
"Function <vkGetDeferredOperationMaxConcurrencyKHR> needs extension <VK_KHR_deferred_host_operations> enabled!" );
return getDispatcher()->vkGetDeferredOperationMaxConcurrencyKHR(
- static_cast<VkDevice>( m_device ), static_cast<VkDeferredOperationKHR>( m_deferredOperationKHR ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkDeferredOperationKHR>( m_operation ) );
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result
@@ -15745,7 +17410,7 @@ namespace VULKAN_HPP_NAMESPACE
"Function <vkGetDeferredOperationResultKHR> needs extension <VK_KHR_deferred_host_operations> enabled!" );
return static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetDeferredOperationResultKHR(
- static_cast<VkDevice>( m_device ), static_cast<VkDeferredOperationKHR>( m_deferredOperationKHR ) ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkDeferredOperationKHR>( m_operation ) ) );
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Result DeferredOperationKHR::join() const
@@ -15756,7 +17421,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkDeferredOperationJoinKHR(
- static_cast<VkDevice>( m_device ), static_cast<VkDeferredOperationKHR>( m_deferredOperationKHR ) ) );
+ static_cast<VkDevice>( m_device ), static_cast<VkDeferredOperationKHR>( m_operation ) ) );
if ( ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
( result != VULKAN_HPP_NAMESPACE::Result::eThreadDoneKHR ) &&
( result != VULKAN_HPP_NAMESPACE::Result::eThreadIdleKHR ) )
@@ -15769,7 +17434,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_pipeline_executable_properties ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR>
- Device::getPipelineExecutablePropertiesKHR( const PipelineInfoKHR & pipelineInfo ) const
+ Device::getPipelineExecutablePropertiesKHR( const VULKAN_HPP_NAMESPACE::PipelineInfoKHR & pipelineInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPipelineExecutablePropertiesKHR &&
@@ -15793,22 +17458,26 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineInfoKHR *>( &pipelineInfo ),
&executableCount,
reinterpret_cast<VkPipelineExecutablePropertiesKHR *>( properties.data() ) ) );
- VULKAN_HPP_ASSERT( executableCount <= properties.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( executableCount < properties.size() ) )
- {
- properties.resize( executableCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutablePropertiesKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( executableCount <= properties.size() );
+ if ( executableCount < properties.size() )
+ {
+ properties.resize( executableCount );
+ }
+ }
return properties;
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR>
- Device::getPipelineExecutableStatisticsKHR( const PipelineExecutableInfoKHR & executableInfo ) const
+ Device::getPipelineExecutableStatisticsKHR(
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPipelineExecutableStatisticsKHR &&
@@ -15832,23 +17501,27 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineExecutableInfoKHR *>( &executableInfo ),
&statisticCount,
reinterpret_cast<VkPipelineExecutableStatisticKHR *>( statistics.data() ) ) );
- VULKAN_HPP_ASSERT( statisticCount <= statistics.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) && ( statisticCount < statistics.size() ) )
- {
- statistics.resize( statisticCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableStatisticsKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( statisticCount <= statistics.size() );
+ if ( statisticCount < statistics.size() )
+ {
+ statistics.resize( statisticCount );
+ }
+ }
return statistics;
}
VULKAN_HPP_NODISCARD
VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR>
- Device::getPipelineExecutableInternalRepresentationsKHR( const PipelineExecutableInfoKHR & executableInfo ) const
+ Device::getPipelineExecutableInternalRepresentationsKHR(
+ const VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR & executableInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetPipelineExecutableInternalRepresentationsKHR &&
@@ -15874,27 +17547,29 @@ namespace VULKAN_HPP_NAMESPACE
reinterpret_cast<const VkPipelineExecutableInfoKHR *>( &executableInfo ),
&internalRepresentationCount,
reinterpret_cast<VkPipelineExecutableInternalRepresentationKHR *>( internalRepresentations.data() ) ) );
- VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() );
}
} while ( result == VULKAN_HPP_NAMESPACE::Result::eIncomplete );
- if ( ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess ) &&
- ( internalRepresentationCount < internalRepresentations.size() ) )
- {
- internalRepresentations.resize( internalRepresentationCount );
- }
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result,
VULKAN_HPP_NAMESPACE_STRING "::Device::getPipelineExecutableInternalRepresentationsKHR" );
}
+ if ( result == VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ VULKAN_HPP_ASSERT( internalRepresentationCount <= internalRepresentations.size() );
+ if ( internalRepresentationCount < internalRepresentations.size() )
+ {
+ internalRepresentations.resize( internalRepresentationCount );
+ }
+ }
return internalRepresentations;
}
//=== VK_NV_device_generated_commands ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
- Device::getGeneratedCommandsMemoryRequirementsNV( const GeneratedCommandsMemoryRequirementsInfoNV & info ) const
- VULKAN_HPP_NOEXCEPT
+ Device::getGeneratedCommandsMemoryRequirementsNV(
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV &&
@@ -15910,7 +17585,7 @@ namespace VULKAN_HPP_NAMESPACE
template <typename X, typename Y, typename... Z>
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getGeneratedCommandsMemoryRequirementsNV(
- const GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV & info ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetGeneratedCommandsMemoryRequirementsNV &&
@@ -15927,7 +17602,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::preprocessGeneratedCommandsNV(
- const GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdPreprocessGeneratedCommandsNV &&
@@ -15939,8 +17614,8 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::executeGeneratedCommandsNV(
- VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
- const GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::Bool32 isPreprocessed,
+ const VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV & generatedCommandsInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdExecuteGeneratedCommandsNV &&
@@ -15967,6 +17642,14 @@ namespace VULKAN_HPP_NAMESPACE
groupIndex );
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV
+ Device::createIndirectCommandsLayoutNV(
+ VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::IndirectCommandsLayoutNV( *this, createInfo, allocator );
+ }
+
//=== VK_EXT_acquire_drm_display ===
VULKAN_HPP_INLINE void PhysicalDevice::acquireDrmDisplayEXT( int32_t drmFd,
@@ -15984,12 +17667,39 @@ namespace VULKAN_HPP_NAMESPACE
}
}
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayKHR
+ PhysicalDevice::getDrmDisplayEXT( int32_t drmFd, uint32_t connectorId ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, drmFd, connectorId );
+ }
+
//=== VK_EXT_private_data ===
- VULKAN_HPP_INLINE void Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot,
- uint64_t data ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot Device::createPrivateDataSlotEXT(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::PrivateDataSlot( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void Device::destroyPrivateDataSlotEXT(
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT( getDispatcher()->vkDestroyPrivateDataSlotEXT &&
+ "Function <vkDestroyPrivateDataSlotEXT> needs extension <VK_EXT_private_data> enabled!" );
+
+ getDispatcher()->vkDestroyPrivateDataSlotEXT(
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
+ reinterpret_cast<const VkAllocationCallbacks *>(
+ static_cast<const VULKAN_HPP_NAMESPACE::AllocationCallbacks *>( allocator ) ) );
+ }
+
+ VULKAN_HPP_INLINE void Device::setPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot,
+ uint64_t data ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkSetPrivateDataEXT &&
"Function <vkSetPrivateDataEXT> needs extension <VK_EXT_private_data> enabled!" );
@@ -15998,7 +17708,7 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkSetPrivateDataEXT( static_cast<VkDevice>( m_device ),
static_cast<VkObjectType>( objectType_ ),
objectHandle,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
data ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -16007,9 +17717,9 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE uint64_t
- Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
- uint64_t objectHandle,
- VULKAN_HPP_NAMESPACE::PrivateDataSlotEXT privateDataSlot ) const VULKAN_HPP_NOEXCEPT
+ Device::getPrivateDataEXT( VULKAN_HPP_NAMESPACE::ObjectType objectType_,
+ uint64_t objectHandle,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlot privateDataSlot ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkGetPrivateDataEXT &&
"Function <vkGetPrivateDataEXT> needs extension <VK_EXT_private_data> enabled!" );
@@ -16018,7 +17728,7 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkGetPrivateDataEXT( static_cast<VkDevice>( m_device ),
static_cast<VkObjectType>( objectType_ ),
objectHandle,
- static_cast<VkPrivateDataSlotEXT>( privateDataSlot ),
+ static_cast<VkPrivateDataSlot>( privateDataSlot ),
&data );
return data;
}
@@ -16026,8 +17736,8 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_ENABLE_BETA_EXTENSIONS )
//=== VK_KHR_video_encode_queue ===
- VULKAN_HPP_INLINE void
- CommandBuffer::encodeVideoKHR( const VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::encodeVideoKHR(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR & encodeInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdEncodeVideoKHR &&
"Function <vkCmdEncodeVideoKHR> needs extension <VK_KHR_video_encode_queue> enabled!" );
@@ -16039,33 +17749,33 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_synchronization2 ===
- VULKAN_HPP_INLINE void
- CommandBuffer::setEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- const DependencyInfoKHR & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::setEvent2KHR(
+ VULKAN_HPP_NAMESPACE::Event event,
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdSetEvent2KHR &&
"Function <vkCmdSetEvent2KHR> needs extension <VK_KHR_synchronization2> enabled!" );
getDispatcher()->vkCmdSetEvent2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
static_cast<VkEvent>( event ),
- reinterpret_cast<const VkDependencyInfoKHR *>( &dependencyInfo ) );
+ reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
}
VULKAN_HPP_INLINE void
- CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask ) const VULKAN_HPP_NOEXCEPT
+ CommandBuffer::resetEvent2KHR( VULKAN_HPP_NAMESPACE::Event event,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResetEvent2KHR &&
"Function <vkCmdResetEvent2KHR> needs extension <VK_KHR_synchronization2> enabled!" );
getDispatcher()->vkCmdResetEvent2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
static_cast<VkEvent>( event ),
- static_cast<VkPipelineStageFlags2KHR>( stageMask ) );
+ static_cast<VkPipelineStageFlags2>( stageMask ) );
}
VULKAN_HPP_INLINE void
- CommandBuffer::waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
- ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfoKHR> const & dependencyInfos )
+ CommandBuffer::waitEvents2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::Event> const & events,
+ ArrayProxy<const VULKAN_HPP_NAMESPACE::DependencyInfo> const & dependencyInfos )
const VULKAN_HPP_NOEXCEPT_WHEN_NO_EXCEPTIONS
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWaitEvents2KHR &&
@@ -16084,34 +17794,34 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkCmdWaitEvents2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
events.size(),
reinterpret_cast<const VkEvent *>( events.data() ),
- reinterpret_cast<const VkDependencyInfoKHR *>( dependencyInfos.data() ) );
+ reinterpret_cast<const VkDependencyInfo *>( dependencyInfos.data() ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::pipelineBarrier2KHR( const DependencyInfoKHR & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::pipelineBarrier2KHR(
+ const VULKAN_HPP_NAMESPACE::DependencyInfo & dependencyInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdPipelineBarrier2KHR &&
"Function <vkCmdPipelineBarrier2KHR> needs extension <VK_KHR_synchronization2> enabled!" );
getDispatcher()->vkCmdPipelineBarrier2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkDependencyInfoKHR *>( &dependencyInfo ) );
+ reinterpret_cast<const VkDependencyInfo *>( &dependencyInfo ) );
}
- VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::QueryPool queryPool,
+ VULKAN_HPP_INLINE void CommandBuffer::writeTimestamp2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::QueryPool queryPool,
uint32_t query ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteTimestamp2KHR &&
"Function <vkCmdWriteTimestamp2KHR> needs extension <VK_KHR_synchronization2> enabled!" );
getDispatcher()->vkCmdWriteTimestamp2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
- static_cast<VkPipelineStageFlags2KHR>( stage ),
+ static_cast<VkPipelineStageFlags2>( stage ),
static_cast<VkQueryPool>( queryPool ),
query );
}
- VULKAN_HPP_INLINE void Queue::submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2KHR> const & submits,
- VULKAN_HPP_NAMESPACE::Fence fence ) const
+ VULKAN_HPP_INLINE void Queue::submit2KHR( ArrayProxy<const VULKAN_HPP_NAMESPACE::SubmitInfo2> const & submits,
+ VULKAN_HPP_NAMESPACE::Fence fence ) const
{
VULKAN_HPP_ASSERT( getDispatcher()->vkQueueSubmit2KHR &&
"Function <vkQueueSubmit2KHR> needs extension <VK_KHR_synchronization2> enabled!" );
@@ -16119,7 +17829,7 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result = static_cast<VULKAN_HPP_NAMESPACE::Result>(
getDispatcher()->vkQueueSubmit2KHR( static_cast<VkQueue>( m_queue ),
submits.size(),
- reinterpret_cast<const VkSubmitInfo2KHR *>( submits.data() ),
+ reinterpret_cast<const VkSubmitInfo2 *>( submits.data() ),
static_cast<VkFence>( fence ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -16127,16 +17837,16 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
+ VULKAN_HPP_INLINE void CommandBuffer::writeBufferMarker2AMD( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer,
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset,
uint32_t marker ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdWriteBufferMarker2AMD &&
"Function <vkCmdWriteBufferMarker2AMD> needs extension <VK_KHR_synchronization2> enabled!" );
getDispatcher()->vkCmdWriteBufferMarker2AMD( static_cast<VkCommandBuffer>( m_commandBuffer ),
- static_cast<VkPipelineStageFlags2KHR>( stage ),
+ static_cast<VkPipelineStageFlags2>( stage ),
static_cast<VkBuffer>( dstBuffer ),
static_cast<VkDeviceSize>( dstOffset ),
marker );
@@ -16154,7 +17864,7 @@ namespace VULKAN_HPP_NAMESPACE
getDispatcher()->vkGetQueueCheckpointData2NV( static_cast<VkQueue>( m_queue ),
&checkpointDataCount,
reinterpret_cast<VkCheckpointData2NV *>( checkpointData.data() ) );
- VULKAN_HPP_ASSERT( checkpointDataCount <= checkpointData.size() );
+ VULKAN_HPP_ASSERT( checkpointDataCount == checkpointData.size() );
return checkpointData;
}
@@ -16176,66 +17886,66 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_copy_commands2 ===
- VULKAN_HPP_INLINE void
- CommandBuffer::copyBuffer2KHR( const CopyBufferInfo2KHR & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyBuffer2KHR(
+ const VULKAN_HPP_NAMESPACE::CopyBufferInfo2 & copyBufferInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBuffer2KHR &&
"Function <vkCmdCopyBuffer2KHR> needs extension <VK_KHR_copy_commands2> enabled!" );
getDispatcher()->vkCmdCopyBuffer2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkCopyBufferInfo2KHR *>( &copyBufferInfo ) );
+ reinterpret_cast<const VkCopyBufferInfo2 *>( &copyBufferInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::copyImage2KHR( const CopyImageInfo2KHR & copyImageInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::copyImage2KHR(
+ const VULKAN_HPP_NAMESPACE::CopyImageInfo2 & copyImageInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImage2KHR &&
"Function <vkCmdCopyImage2KHR> needs extension <VK_KHR_copy_commands2> enabled!" );
getDispatcher()->vkCmdCopyImage2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkCopyImageInfo2KHR *>( &copyImageInfo ) );
+ reinterpret_cast<const VkCopyImageInfo2 *>( &copyImageInfo ) );
}
VULKAN_HPP_INLINE void CommandBuffer::copyBufferToImage2KHR(
- const CopyBufferToImageInfo2KHR & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 & copyBufferToImageInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyBufferToImage2KHR &&
"Function <vkCmdCopyBufferToImage2KHR> needs extension <VK_KHR_copy_commands2> enabled!" );
getDispatcher()->vkCmdCopyBufferToImage2KHR(
static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkCopyBufferToImageInfo2KHR *>( &copyBufferToImageInfo ) );
+ reinterpret_cast<const VkCopyBufferToImageInfo2 *>( &copyBufferToImageInfo ) );
}
VULKAN_HPP_INLINE void CommandBuffer::copyImageToBuffer2KHR(
- const CopyImageToBufferInfo2KHR & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 & copyImageToBufferInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdCopyImageToBuffer2KHR &&
"Function <vkCmdCopyImageToBuffer2KHR> needs extension <VK_KHR_copy_commands2> enabled!" );
getDispatcher()->vkCmdCopyImageToBuffer2KHR(
static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkCopyImageToBufferInfo2KHR *>( &copyImageToBufferInfo ) );
+ reinterpret_cast<const VkCopyImageToBufferInfo2 *>( &copyImageToBufferInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::blitImage2KHR( const BlitImageInfo2KHR & blitImageInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::blitImage2KHR(
+ const VULKAN_HPP_NAMESPACE::BlitImageInfo2 & blitImageInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdBlitImage2KHR &&
"Function <vkCmdBlitImage2KHR> needs extension <VK_KHR_copy_commands2> enabled!" );
getDispatcher()->vkCmdBlitImage2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkBlitImageInfo2KHR *>( &blitImageInfo ) );
+ reinterpret_cast<const VkBlitImageInfo2 *>( &blitImageInfo ) );
}
- VULKAN_HPP_INLINE void
- CommandBuffer::resolveImage2KHR( const ResolveImageInfo2KHR & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::resolveImage2KHR(
+ const VULKAN_HPP_NAMESPACE::ResolveImageInfo2 & resolveImageInfo ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdResolveImage2KHR &&
"Function <vkCmdResolveImage2KHR> needs extension <VK_KHR_copy_commands2> enabled!" );
getDispatcher()->vkCmdResolveImage2KHR( static_cast<VkCommandBuffer>( m_commandBuffer ),
- reinterpret_cast<const VkResolveImageInfo2KHR *>( &resolveImageInfo ) );
+ reinterpret_cast<const VkResolveImageInfo2 *>( &resolveImageInfo ) );
}
# if defined( VK_USE_PLATFORM_WIN32_KHR )
@@ -16248,17 +17958,30 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Result result =
static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkAcquireWinrtDisplayNV(
- static_cast<VkPhysicalDevice>( m_physicalDevice ), static_cast<VkDisplayKHR>( m_displayKHR ) ) );
+ static_cast<VkPhysicalDevice>( m_physicalDevice ), static_cast<VkDisplayKHR>( m_display ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::DisplayKHR::acquireWinrtNV" );
}
}
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::DisplayKHR
+ PhysicalDevice::getWinrtDisplayNV( uint32_t deviceRelativeId ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::DisplayKHR( *this, deviceRelativeId );
+ }
# endif /*VK_USE_PLATFORM_WIN32_KHR*/
# if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
//=== VK_EXT_directfb_surface ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createDirectFBSurfaceEXT(
+ VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32
PhysicalDevice::getDirectFBPresentationSupportEXT( uint32_t queueFamilyIndex,
IDirectFB & dfb ) const VULKAN_HPP_NOEXCEPT
@@ -16275,14 +17998,14 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_KHR_ray_tracing_pipeline ===
- VULKAN_HPP_INLINE void
- CommandBuffer::traceRaysKHR( const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- uint32_t width,
- uint32_t height,
- uint32_t depth ) const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_INLINE void CommandBuffer::traceRaysKHR(
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ uint32_t width,
+ uint32_t height,
+ uint32_t depth ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT( getDispatcher()->vkCmdTraceRaysKHR &&
"Function <vkCmdTraceRaysKHR> needs extension <VK_KHR_ray_tracing_pipeline> enabled!" );
@@ -16298,22 +18021,45 @@ namespace VULKAN_HPP_NAMESPACE
depth );
}
- template <typename T>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<T>
- Pipeline::getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_RAII_NAMESPACE::Pipeline>
+ Device::createRayTracingPipelinesKHR(
+ VULKAN_HPP_NAMESPACE::Optional<
+ const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR> const & deferredOperation,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::ArrayProxy<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR> const & createInfos,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipelines( *this, deferredOperation, pipelineCache, createInfos, allocator );
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::Pipeline Device::createRayTracingPipelineKHR(
+ VULKAN_HPP_NAMESPACE::Optional<
+ const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::DeferredOperationKHR> const & deferredOperation,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::VULKAN_HPP_RAII_NAMESPACE::PipelineCache> const &
+ pipelineCache,
+ VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::Pipeline( *this, deferredOperation, pipelineCache, createInfo, allocator );
+ }
+
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<DataType>
+ Pipeline::getRayTracingShaderGroupHandlesKHR( uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR &&
"Function <vkGetRayTracingShaderGroupHandlesKHR> needs extension <VK_KHR_ray_tracing_pipeline> enabled!" );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>(
getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR( static_cast<VkDevice>( m_device ),
static_cast<VkPipeline>( m_pipeline ),
firstGroup,
groupCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -16322,16 +18068,17 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD T Pipeline::getRayTracingShaderGroupHandleKHR( uint32_t firstGroup, uint32_t groupCount ) const
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType Pipeline::getRayTracingShaderGroupHandleKHR( uint32_t firstGroup,
+ uint32_t groupCount ) const
{
- T data;
- Result result = static_cast<Result>(
+ DataType data;
+ Result result = static_cast<Result>(
getDispatcher()->vkGetRayTracingShaderGroupHandlesKHR( static_cast<VkDevice>( m_device ),
static_cast<VkPipeline>( m_pipeline ),
firstGroup,
groupCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -16340,22 +18087,24 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<T> Pipeline::getRayTracingCaptureReplayShaderGroupHandlesKHR(
- uint32_t firstGroup, uint32_t groupCount, size_t dataSize ) const
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<DataType>
+ Pipeline::getRayTracingCaptureReplayShaderGroupHandlesKHR( uint32_t firstGroup,
+ uint32_t groupCount,
+ size_t dataSize ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR &&
"Function <vkGetRayTracingCaptureReplayShaderGroupHandlesKHR> needs extension <VK_KHR_ray_tracing_pipeline> enabled!" );
- VULKAN_HPP_ASSERT( dataSize % sizeof( T ) == 0 );
- std::vector<T> data( dataSize / sizeof( T ) );
- Result result = static_cast<Result>(
+ VULKAN_HPP_ASSERT( dataSize % sizeof( DataType ) == 0 );
+ std::vector<DataType> data( dataSize / sizeof( DataType ) );
+ Result result = static_cast<Result>(
getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( static_cast<VkDevice>( m_device ),
static_cast<VkPipeline>( m_pipeline ),
firstGroup,
groupCount,
- data.size() * sizeof( T ),
+ data.size() * sizeof( DataType ),
reinterpret_cast<void *>( data.data() ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -16365,17 +18114,17 @@ namespace VULKAN_HPP_NAMESPACE
return data;
}
- template <typename T>
- VULKAN_HPP_NODISCARD T Pipeline::getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup,
- uint32_t groupCount ) const
+ template <typename DataType>
+ VULKAN_HPP_NODISCARD DataType Pipeline::getRayTracingCaptureReplayShaderGroupHandleKHR( uint32_t firstGroup,
+ uint32_t groupCount ) const
{
- T data;
- Result result = static_cast<Result>(
+ DataType data;
+ Result result = static_cast<Result>(
getDispatcher()->vkGetRayTracingCaptureReplayShaderGroupHandlesKHR( static_cast<VkDevice>( m_device ),
static_cast<VkPipeline>( m_pipeline ),
firstGroup,
groupCount,
- sizeof( T ),
+ sizeof( DataType ),
reinterpret_cast<void *>( &data ) ) );
if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
{
@@ -16386,11 +18135,11 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_INLINE void CommandBuffer::traceRaysIndirectKHR(
- const StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
- const StridedDeviceAddressRegionKHR & missShaderBindingTable,
- const StridedDeviceAddressRegionKHR & hitShaderBindingTable,
- const StridedDeviceAddressRegionKHR & callableShaderBindingTable,
- VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & raygenShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & missShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & hitShaderBindingTable,
+ const VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR & callableShaderBindingTable,
+ VULKAN_HPP_NAMESPACE::DeviceAddress indirectDeviceAddress ) const VULKAN_HPP_NOEXCEPT
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkCmdTraceRaysIndirectKHR &&
@@ -16453,8 +18202,8 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_USE_PLATFORM_FUCHSIA )
//=== VK_FUCHSIA_external_memory ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t
- Device::getMemoryZirconHandleFUCHSIA( const MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t Device::getMemoryZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetMemoryZirconHandleFUCHSIA &&
@@ -16474,7 +18223,7 @@ namespace VULKAN_HPP_NAMESPACE
}
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA
- Device::getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
+ Device::getMemoryZirconHandlePropertiesFUCHSIA( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType,
zx_handle_t zirconHandle ) const
{
VULKAN_HPP_ASSERT(
@@ -16500,7 +18249,7 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_FUCHSIA_external_semaphore ===
VULKAN_HPP_INLINE void Device::importSemaphoreZirconHandleFUCHSIA(
- const ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const
+ const VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA & importSemaphoreZirconHandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkImportSemaphoreZirconHandleFUCHSIA &&
@@ -16516,8 +18265,8 @@ namespace VULKAN_HPP_NAMESPACE
}
}
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t
- Device::getSemaphoreZirconHandleFUCHSIA( const SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE zx_handle_t Device::getSemaphoreZirconHandleFUCHSIA(
+ const VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA & getZirconHandleInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetSemaphoreZirconHandleFUCHSIA &&
@@ -16537,6 +18286,74 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VK_USE_PLATFORM_FUCHSIA*/
+# if defined( VK_USE_PLATFORM_FUCHSIA )
+ //=== VK_FUCHSIA_buffer_collection ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA
+ Device::createBufferCollectionFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::BufferCollectionFUCHSIA( *this, createInfo, allocator );
+ }
+
+ VULKAN_HPP_INLINE void BufferCollectionFUCHSIA::setImageConstraints(
+ const VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA & imageConstraintsInfo ) const
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkSetBufferCollectionImageConstraintsFUCHSIA &&
+ "Function <vkSetBufferCollectionImageConstraintsFUCHSIA> needs extension <VK_FUCHSIA_buffer_collection> enabled!" );
+
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkSetBufferCollectionImageConstraintsFUCHSIA(
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferCollectionFUCHSIA>( m_collection ),
+ reinterpret_cast<const VkImageConstraintsInfoFUCHSIA *>( &imageConstraintsInfo ) ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::setImageConstraints" );
+ }
+ }
+
+ VULKAN_HPP_INLINE void BufferCollectionFUCHSIA::setBufferConstraints(
+ const VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA & bufferConstraintsInfo ) const
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkSetBufferCollectionBufferConstraintsFUCHSIA &&
+ "Function <vkSetBufferCollectionBufferConstraintsFUCHSIA> needs extension <VK_FUCHSIA_buffer_collection> enabled!" );
+
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkSetBufferCollectionBufferConstraintsFUCHSIA(
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferCollectionFUCHSIA>( m_collection ),
+ reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA *>( &bufferConstraintsInfo ) ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::setBufferConstraints" );
+ }
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA
+ BufferCollectionFUCHSIA::getProperties() const
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetBufferCollectionPropertiesFUCHSIA &&
+ "Function <vkGetBufferCollectionPropertiesFUCHSIA> needs extension <VK_FUCHSIA_buffer_collection> enabled!" );
+
+ VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA properties;
+ VULKAN_HPP_NAMESPACE::Result result =
+ static_cast<VULKAN_HPP_NAMESPACE::Result>( getDispatcher()->vkGetBufferCollectionPropertiesFUCHSIA(
+ static_cast<VkDevice>( m_device ),
+ static_cast<VkBufferCollectionFUCHSIA>( m_collection ),
+ reinterpret_cast<VkBufferCollectionPropertiesFUCHSIA *>( &properties ) ) );
+ if ( result != VULKAN_HPP_NAMESPACE::Result::eSuccess )
+ {
+ throwResultException( result, VULKAN_HPP_NAMESPACE_STRING "::BufferCollectionFUCHSIA::getProperties" );
+ }
+ return properties;
+ }
+# endif /*VK_USE_PLATFORM_FUCHSIA*/
+
//=== VK_HUAWEI_subpass_shading ===
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::pair<VULKAN_HPP_NAMESPACE::Result, VULKAN_HPP_NAMESPACE::Extent2D>
@@ -16586,8 +18403,8 @@ namespace VULKAN_HPP_NAMESPACE
//=== VK_NV_external_memory_rdma ===
- VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::RemoteAddressNV
- Device::getMemoryRemoteAddressNV( const MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::RemoteAddressNV Device::getMemoryRemoteAddressNV(
+ const VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV & memoryGetRemoteAddressInfo ) const
{
VULKAN_HPP_ASSERT(
getDispatcher()->vkGetMemoryRemoteAddressNV &&
@@ -16665,6 +18482,13 @@ namespace VULKAN_HPP_NAMESPACE
# if defined( VK_USE_PLATFORM_SCREEN_QNX )
//=== VK_QNX_screen_surface ===
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR Instance::createScreenSurfaceQNX(
+ VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX const & createInfo,
+ VULKAN_HPP_NAMESPACE::Optional<const VULKAN_HPP_NAMESPACE::AllocationCallbacks> allocator ) const
+ {
+ return VULKAN_HPP_RAII_NAMESPACE::SurfaceKHR( *this, createInfo, allocator );
+ }
+
VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::Bool32
PhysicalDevice::getScreenPresentationSupportQNX( uint32_t queueFamilyIndex,
struct _screen_window & window ) const VULKAN_HPP_NOEXCEPT
@@ -16732,6 +18556,113 @@ namespace VULKAN_HPP_NAMESPACE
static_cast<const int32_t *>( vertexOffset ) );
}
+ //=== VK_EXT_pageable_device_local_memory ===
+
+ VULKAN_HPP_INLINE void DeviceMemory::setPriorityEXT( float priority ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkSetDeviceMemoryPriorityEXT &&
+ "Function <vkSetDeviceMemoryPriorityEXT> needs extension <VK_EXT_pageable_device_local_memory> enabled!" );
+
+ getDispatcher()->vkSetDeviceMemoryPriorityEXT(
+ static_cast<VkDevice>( m_device ), static_cast<VkDeviceMemory>( m_memory ), priority );
+ }
+
+ //=== VK_KHR_maintenance4 ===
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getBufferMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR &&
+ "Function <vkGetDeviceBufferMemoryRequirementsKHR> needs extension <VK_KHR_maintenance4> enabled!" );
+
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getBufferMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR &&
+ "Function <vkGetDeviceBufferMemoryRequirementsKHR> needs extension <VK_KHR_maintenance4> enabled!" );
+
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ getDispatcher()->vkGetDeviceBufferMemoryRequirementsKHR(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE VULKAN_HPP_NAMESPACE::MemoryRequirements2
+ Device::getImageMemoryRequirementsKHR( const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const
+ VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR &&
+ "Function <vkGetDeviceImageMemoryRequirementsKHR> needs extension <VK_KHR_maintenance4> enabled!" );
+
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 memoryRequirements;
+ getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return memoryRequirements;
+ }
+
+ template <typename X, typename Y, typename... Z>
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE StructureChain<X, Y, Z...> Device::getImageMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR &&
+ "Function <vkGetDeviceImageMemoryRequirementsKHR> needs extension <VK_KHR_maintenance4> enabled!" );
+
+ StructureChain<X, Y, Z...> structureChain;
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 & memoryRequirements =
+ structureChain.template get<VULKAN_HPP_NAMESPACE::MemoryRequirements2>();
+ getDispatcher()->vkGetDeviceImageMemoryRequirementsKHR(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ reinterpret_cast<VkMemoryRequirements2 *>( &memoryRequirements ) );
+ return structureChain;
+ }
+
+ VULKAN_HPP_NODISCARD VULKAN_HPP_INLINE std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>
+ Device::getImageSparseMemoryRequirementsKHR(
+ const VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements & info ) const VULKAN_HPP_NOEXCEPT
+ {
+ VULKAN_HPP_ASSERT(
+ getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR &&
+ "Function <vkGetDeviceImageSparseMemoryRequirementsKHR> needs extension <VK_KHR_maintenance4> enabled!" );
+
+ uint32_t sparseMemoryRequirementCount;
+ getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ nullptr );
+ std::vector<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2> sparseMemoryRequirements(
+ sparseMemoryRequirementCount );
+ getDispatcher()->vkGetDeviceImageSparseMemoryRequirementsKHR(
+ static_cast<VkDevice>( m_device ),
+ reinterpret_cast<const VkDeviceImageMemoryRequirements *>( &info ),
+ &sparseMemoryRequirementCount,
+ reinterpret_cast<VkSparseImageMemoryRequirements2 *>( sparseMemoryRequirements.data() ) );
+ VULKAN_HPP_ASSERT( sparseMemoryRequirementCount == sparseMemoryRequirements.size() );
+ return sparseMemoryRequirements;
+ }
+
#endif
} // namespace VULKAN_HPP_RAII_NAMESPACE
} // namespace VULKAN_HPP_NAMESPACE
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_screen.h b/thirdparty/vulkan/include/vulkan/vulkan_screen.h
index 92ad9bfab4..f0ef40a6ca 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_screen.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_screen.h
@@ -2,7 +2,7 @@
#define VULKAN_SCREEN_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_structs.hpp b/thirdparty/vulkan/include/vulkan/vulkan_structs.hpp
index bb0332a741..9991330a3e 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_structs.hpp
+++ b/thirdparty/vulkan/include/vulkan/vulkan_structs.hpp
@@ -1,4 +1,4 @@
-// Copyright 2015-2021 The Khronos Group Inc.
+// Copyright 2015-2022 The Khronos Group Inc.
//
// SPDX-License-Identifier: Apache-2.0 OR MIT
//
@@ -16,6 +16,8 @@ namespace VULKAN_HPP_NAMESPACE
struct AabbPositionsKHR
{
+ using NativeType = VkAabbPositionsKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AabbPositionsKHR( float minX_ = {},
float minY_ = {},
@@ -38,7 +40,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & operator=( AabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AabbPositionsKHR & operator=( AabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AabbPositionsKHR & operator=( VkAabbPositionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -47,60 +49,76 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AabbPositionsKHR & setMinX( float minX_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinX( float minX_ ) VULKAN_HPP_NOEXCEPT
{
minX = minX_;
return *this;
}
- AabbPositionsKHR & setMinY( float minY_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinY( float minY_ ) VULKAN_HPP_NOEXCEPT
{
minY = minY_;
return *this;
}
- AabbPositionsKHR & setMinZ( float minZ_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMinZ( float minZ_ ) VULKAN_HPP_NOEXCEPT
{
minZ = minZ_;
return *this;
}
- AabbPositionsKHR & setMaxX( float maxX_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxX( float maxX_ ) VULKAN_HPP_NOEXCEPT
{
maxX = maxX_;
return *this;
}
- AabbPositionsKHR & setMaxY( float maxY_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxY( float maxY_ ) VULKAN_HPP_NOEXCEPT
{
maxY = maxY_;
return *this;
}
- AabbPositionsKHR & setMaxZ( float maxZ_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AabbPositionsKHR & setMaxZ( float maxZ_ ) VULKAN_HPP_NOEXCEPT
{
maxZ = maxZ_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAabbPositionsKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAabbPositionsKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAabbPositionsKHR *>( this );
}
- operator VkAabbPositionsKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAabbPositionsKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAabbPositionsKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &, float const &, float const &, float const &, float const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( minX, minY, minZ, maxX, maxY, maxZ );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AabbPositionsKHR const & ) const = default;
#else
bool operator==( AabbPositionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( minX == rhs.minX ) && ( minY == rhs.minY ) && ( minZ == rhs.minZ ) && ( maxX == rhs.maxX ) &&
( maxY == rhs.maxY ) && ( maxZ == rhs.maxZ );
+# endif
}
bool operator!=( AabbPositionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -117,48 +135,42 @@ namespace VULKAN_HPP_NAMESPACE
float maxY = {};
float maxZ = {};
};
- static_assert( sizeof( AabbPositionsKHR ) == sizeof( VkAabbPositionsKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AabbPositionsKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AabbPositionsKHR ) == sizeof( VkAabbPositionsKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AabbPositionsKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AabbPositionsKHR>::value,
+ "AabbPositionsKHR is not nothrow_move_constructible!" );
using AabbPositionsNV = AabbPositionsKHR;
union DeviceOrHostAddressConstKHR
{
+ using NativeType = VkDeviceOrHostAddressConstKHR;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- DeviceOrHostAddressConstKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR ) );
- }
- DeviceOrHostAddressConstKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} )
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} )
: deviceAddress( deviceAddress_ )
{}
- DeviceOrHostAddressConstKHR( const void * hostAddress_ ) : hostAddress( hostAddress_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR( const void * hostAddress_ ) : hostAddress( hostAddress_ ) {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- DeviceOrHostAddressConstKHR &
- setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR &
+ setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
deviceAddress = deviceAddress_;
return *this;
}
- DeviceOrHostAddressConstKHR & setHostAddress( const void * hostAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressConstKHR &
+ setHostAddress( const void * hostAddress_ ) VULKAN_HPP_NOEXCEPT
{
hostAddress = hostAddress_;
return *this;
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR &
- operator=( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR ) );
- return *this;
- }
-
operator VkDeviceOrHostAddressConstKHR const &() const
{
return *reinterpret_cast<const VkDeviceOrHostAddressConstKHR *>( this );
@@ -180,12 +192,14 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureGeometryTrianglesDataKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureGeometryTrianglesDataKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureGeometryTrianglesDataKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureGeometryTrianglesDataKHR(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR(
VULKAN_HPP_NAMESPACE::Format vertexFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ = {},
@@ -202,8 +216,8 @@ namespace VULKAN_HPP_NAMESPACE
, transformData( transformData_ )
{}
- AccelerationStructureGeometryTrianglesDataKHR( AccelerationStructureGeometryTrianglesDataKHR const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR(
+ AccelerationStructureGeometryTrianglesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureGeometryTrianglesDataKHR( VkAccelerationStructureGeometryTrianglesDataKHR const & rhs )
VULKAN_HPP_NOEXCEPT
@@ -223,54 +237,56 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureGeometryTrianglesDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR &
- setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
+ setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT
{
vertexFormat = vertexFormat_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT
{
vertexData = vertexData_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR &
- setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
+ setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT
{
vertexStride = vertexStride_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR & setMaxVertex( uint32_t maxVertex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
+ setMaxVertex( uint32_t maxVertex_ ) VULKAN_HPP_NOEXCEPT
{
maxVertex = maxVertex_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR &
- setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
+ setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT
{
indexType = indexType_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
setIndexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & indexData_ ) VULKAN_HPP_NOEXCEPT
{
indexData = indexData_;
return *this;
}
- AccelerationStructureGeometryTrianglesDataKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryTrianglesDataKHR &
setTransformData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & transformData_ ) VULKAN_HPP_NOEXCEPT
{
transformData = transformData_;
@@ -278,16 +294,37 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureGeometryTrianglesDataKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryTrianglesDataKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureGeometryTrianglesDataKHR *>( this );
}
- operator VkAccelerationStructureGeometryTrianglesDataKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryTrianglesDataKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureGeometryTrianglesDataKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::IndexType const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, vertexFormat, vertexData, vertexStride, maxVertex, indexType, indexData, transformData );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryTrianglesDataKHR;
const void * pNext = {};
@@ -299,11 +336,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR indexData = {};
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR transformData = {};
};
- static_assert( sizeof( AccelerationStructureGeometryTrianglesDataKHR ) ==
- sizeof( VkAccelerationStructureGeometryTrianglesDataKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureGeometryTrianglesDataKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR ) ==
+ sizeof( VkAccelerationStructureGeometryTrianglesDataKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR>::value,
+ "AccelerationStructureGeometryTrianglesDataKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureGeometryTrianglesDataKHR>
@@ -313,19 +354,22 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureGeometryAabbsDataKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureGeometryAabbsDataKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureGeometryAabbsDataKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureGeometryAabbsDataKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize stride_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14
+ AccelerationStructureGeometryAabbsDataKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize stride_ = {} ) VULKAN_HPP_NOEXCEPT
: data( data_ )
, stride( stride_ )
{}
- AccelerationStructureGeometryAabbsDataKHR( AccelerationStructureGeometryAabbsDataKHR const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR(
+ AccelerationStructureGeometryAabbsDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureGeometryAabbsDataKHR( VkAccelerationStructureGeometryAabbsDataKHR const & rhs )
VULKAN_HPP_NOEXCEPT
@@ -345,48 +389,68 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureGeometryAabbsDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureGeometryAabbsDataKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR &
setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT
{
data = data_;
return *this;
}
- AccelerationStructureGeometryAabbsDataKHR &
- setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryAabbsDataKHR &
+ setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureGeometryAabbsDataKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryAabbsDataKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureGeometryAabbsDataKHR *>( this );
}
- operator VkAccelerationStructureGeometryAabbsDataKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryAabbsDataKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureGeometryAabbsDataKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, data, stride );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryAabbsDataKHR;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {};
VULKAN_HPP_NAMESPACE::DeviceSize stride = {};
};
- static_assert( sizeof( AccelerationStructureGeometryAabbsDataKHR ) ==
- sizeof( VkAccelerationStructureGeometryAabbsDataKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureGeometryAabbsDataKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR ) ==
+ sizeof( VkAccelerationStructureGeometryAabbsDataKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR>::value,
+ "AccelerationStructureGeometryAabbsDataKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureGeometryAabbsDataKHR>
@@ -396,20 +460,22 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureGeometryInstancesDataKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureGeometryInstancesDataKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureGeometryInstancesDataKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureGeometryInstancesDataKHR( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ = {},
- VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {} )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR(
+ VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data_ = {} ) VULKAN_HPP_NOEXCEPT
: arrayOfPointers( arrayOfPointers_ )
, data( data_ )
{}
- AccelerationStructureGeometryInstancesDataKHR( AccelerationStructureGeometryInstancesDataKHR const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR(
+ AccelerationStructureGeometryInstancesDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureGeometryInstancesDataKHR( VkAccelerationStructureGeometryInstancesDataKHR const & rhs )
VULKAN_HPP_NOEXCEPT
@@ -429,20 +495,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureGeometryInstancesDataKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureGeometryInstancesDataKHR &
- setArrayOfPointers( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR &
+ setArrayOfPointers( VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers_ ) VULKAN_HPP_NOEXCEPT
{
arrayOfPointers = arrayOfPointers_;
return *this;
}
- AccelerationStructureGeometryInstancesDataKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryInstancesDataKHR &
setData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & data_ ) VULKAN_HPP_NOEXCEPT
{
data = data_;
@@ -450,27 +517,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureGeometryInstancesDataKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryInstancesDataKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureGeometryInstancesDataKHR *>( this );
}
- operator VkAccelerationStructureGeometryInstancesDataKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryInstancesDataKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureGeometryInstancesDataKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, arrayOfPointers, data );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryInstancesDataKHR;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 arrayOfPointers = {};
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR data = {};
};
- static_assert( sizeof( AccelerationStructureGeometryInstancesDataKHR ) ==
- sizeof( VkAccelerationStructureGeometryInstancesDataKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureGeometryInstancesDataKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR ) ==
+ sizeof( VkAccelerationStructureGeometryInstancesDataKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR>::value,
+ "AccelerationStructureGeometryInstancesDataKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureGeometryInstancesDataKHR>
@@ -480,44 +566,41 @@ namespace VULKAN_HPP_NAMESPACE
union AccelerationStructureGeometryDataKHR
{
+ using NativeType = VkAccelerationStructureGeometryDataKHR;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR const & rhs )
- VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR ) );
- }
- AccelerationStructureGeometryDataKHR(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR(
VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR triangles_ = {} )
: triangles( triangles_ )
{}
- AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR aabbs_ )
+ VULKAN_HPP_CONSTEXPR_14
+ AccelerationStructureGeometryDataKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR aabbs_ )
: aabbs( aabbs_ )
{}
- AccelerationStructureGeometryDataKHR(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR(
VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR instances_ )
: instances( instances_ )
{}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- AccelerationStructureGeometryDataKHR & setTriangles(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & setTriangles(
VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryTrianglesDataKHR const & triangles_ ) VULKAN_HPP_NOEXCEPT
{
triangles = triangles_;
return *this;
}
- AccelerationStructureGeometryDataKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR &
setAabbs( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryAabbsDataKHR const & aabbs_ ) VULKAN_HPP_NOEXCEPT
{
aabbs = aabbs_;
return *this;
}
- AccelerationStructureGeometryDataKHR & setInstances(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryDataKHR & setInstances(
VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryInstancesDataKHR const & instances_ ) VULKAN_HPP_NOEXCEPT
{
instances = instances_;
@@ -525,13 +608,6 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR &
- operator=( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR ) );
- return *this;
- }
-
operator VkAccelerationStructureGeometryDataKHR const &() const
{
return *reinterpret_cast<const VkAccelerationStructureGeometryDataKHR *>( this );
@@ -555,11 +631,13 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureGeometryKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureGeometryKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureGeometryKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureGeometryKHR(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR(
VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ = VULKAN_HPP_NAMESPACE::GeometryTypeKHR::eTriangles,
VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR geometry_ = {},
VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -568,7 +646,8 @@ namespace VULKAN_HPP_NAMESPACE
, flags( flags_ )
{}
- AccelerationStructureGeometryKHR( AccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14
+ AccelerationStructureGeometryKHR( AccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureGeometryKHR( VkAccelerationStructureGeometryKHR const & rhs ) VULKAN_HPP_NOEXCEPT
: AccelerationStructureGeometryKHR( *reinterpret_cast<AccelerationStructureGeometryKHR const *>( &rhs ) )
@@ -585,43 +664,60 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureGeometryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureGeometryKHR &
- setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR &
+ setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT
{
geometryType = geometryType_;
return *this;
}
- AccelerationStructureGeometryKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR &
setGeometry( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR const & geometry_ ) VULKAN_HPP_NOEXCEPT
{
geometry = geometry_;
return *this;
}
- AccelerationStructureGeometryKHR & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureGeometryKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureGeometryKHR *>( this );
}
- operator VkAccelerationStructureGeometryKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureGeometryKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::GeometryTypeKHR const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR const &,
+ VULKAN_HPP_NAMESPACE::GeometryFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, geometryType, geometry, flags );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryKHR;
const void * pNext = {};
@@ -629,10 +725,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryDataKHR geometry = {};
VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags = {};
};
- static_assert( sizeof( AccelerationStructureGeometryKHR ) == sizeof( VkAccelerationStructureGeometryKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureGeometryKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR ) ==
+ sizeof( VkAccelerationStructureGeometryKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR>::value,
+ "AccelerationStructureGeometryKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureGeometryKHR>
@@ -642,39 +742,31 @@ namespace VULKAN_HPP_NAMESPACE
union DeviceOrHostAddressKHR
{
+ using NativeType = VkDeviceOrHostAddressKHR;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- DeviceOrHostAddressKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR ) );
- }
- DeviceOrHostAddressKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} ) : deviceAddress( deviceAddress_ )
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {} )
+ : deviceAddress( deviceAddress_ )
{}
- DeviceOrHostAddressKHR( void * hostAddress_ ) : hostAddress( hostAddress_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR( void * hostAddress_ ) : hostAddress( hostAddress_ ) {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- DeviceOrHostAddressKHR & setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR &
+ setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
deviceAddress = deviceAddress_;
return *this;
}
- DeviceOrHostAddressKHR & setHostAddress( void * hostAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceOrHostAddressKHR & setHostAddress( void * hostAddress_ ) VULKAN_HPP_NOEXCEPT
{
hostAddress = hostAddress_;
return *this;
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR &
- operator=( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR ) );
- return *this;
- }
-
operator VkDeviceOrHostAddressKHR const &() const
{
return *reinterpret_cast<const VkDeviceOrHostAddressKHR *>( this );
@@ -696,12 +788,14 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureBuildGeometryInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureBuildGeometryInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureBuildGeometryInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureBuildGeometryInfoKHR(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR(
VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ =
VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel,
VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ = {},
@@ -724,8 +818,8 @@ namespace VULKAN_HPP_NAMESPACE
, scratchData( scratchData_ )
{}
- AccelerationStructureBuildGeometryInfoKHR( AccelerationStructureBuildGeometryInfoKHR const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR(
+ AccelerationStructureBuildGeometryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureBuildGeometryInfoKHR( VkAccelerationStructureBuildGeometryInfoKHR const & rhs )
VULKAN_HPP_NOEXCEPT
@@ -780,54 +874,56 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureBuildGeometryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR &
- setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
+ setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR &
- setMode( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
+ setMode( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
{
mode = mode_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR & setSrcAccelerationStructure(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setSrcAccelerationStructure(
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR srcAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT
{
srcAccelerationStructure = srcAccelerationStructure_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR & setDstAccelerationStructure(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setDstAccelerationStructure(
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dstAccelerationStructure_ ) VULKAN_HPP_NOEXCEPT
{
dstAccelerationStructure = dstAccelerationStructure_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR & setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
+ setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT
{
geometryCount = geometryCount_;
return *this;
}
- AccelerationStructureBuildGeometryInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
setPGeometries( const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * pGeometries_ ) VULKAN_HPP_NOEXCEPT
{
pGeometries = pGeometries_;
@@ -845,7 +941,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- AccelerationStructureBuildGeometryInfoKHR & setPpGeometries(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR & setPpGeometries(
const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries_ ) VULKAN_HPP_NOEXCEPT
{
ppGeometries = ppGeometries_;
@@ -863,7 +959,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- AccelerationStructureBuildGeometryInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildGeometryInfoKHR &
setScratchData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & scratchData_ ) VULKAN_HPP_NOEXCEPT
{
scratchData = scratchData_;
@@ -871,16 +967,48 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureBuildGeometryInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureBuildGeometryInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureBuildGeometryInfoKHR *>( this );
}
- operator VkAccelerationStructureBuildGeometryInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureBuildGeometryInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureBuildGeometryInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR const &,
+ VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::BuildAccelerationStructureModeKHR const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const &,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ type,
+ flags,
+ mode,
+ srcAccelerationStructure,
+ dstAccelerationStructure,
+ geometryCount,
+ pGeometries,
+ ppGeometries,
+ scratchData );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureBuildGeometryInfoKHR;
const void * pNext = {};
@@ -896,11 +1024,15 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryKHR * const * ppGeometries = {};
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR scratchData = {};
};
- static_assert( sizeof( AccelerationStructureBuildGeometryInfoKHR ) ==
- sizeof( VkAccelerationStructureBuildGeometryInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureBuildGeometryInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR ) ==
+ sizeof( VkAccelerationStructureBuildGeometryInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildGeometryInfoKHR>::value,
+ "AccelerationStructureBuildGeometryInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureBuildGeometryInfoKHR>
@@ -910,6 +1042,8 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureBuildRangeInfoKHR
{
+ using NativeType = VkAccelerationStructureBuildRangeInfoKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AccelerationStructureBuildRangeInfoKHR( uint32_t primitiveCount_ = {},
uint32_t primitiveOffset_ = {},
@@ -930,8 +1064,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR &
- operator=( AccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureBuildRangeInfoKHR &
+ operator=( AccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureBuildRangeInfoKHR &
operator=( VkAccelerationStructureBuildRangeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -941,48 +1075,68 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureBuildRangeInfoKHR & setPrimitiveCount( uint32_t primitiveCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR &
+ setPrimitiveCount( uint32_t primitiveCount_ ) VULKAN_HPP_NOEXCEPT
{
primitiveCount = primitiveCount_;
return *this;
}
- AccelerationStructureBuildRangeInfoKHR & setPrimitiveOffset( uint32_t primitiveOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR &
+ setPrimitiveOffset( uint32_t primitiveOffset_ ) VULKAN_HPP_NOEXCEPT
{
primitiveOffset = primitiveOffset_;
return *this;
}
- AccelerationStructureBuildRangeInfoKHR & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR &
+ setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT
{
firstVertex = firstVertex_;
return *this;
}
- AccelerationStructureBuildRangeInfoKHR & setTransformOffset( uint32_t transformOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildRangeInfoKHR &
+ setTransformOffset( uint32_t transformOffset_ ) VULKAN_HPP_NOEXCEPT
{
transformOffset = transformOffset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureBuildRangeInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureBuildRangeInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureBuildRangeInfoKHR *>( this );
}
- operator VkAccelerationStructureBuildRangeInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureBuildRangeInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureBuildRangeInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( primitiveCount, primitiveOffset, firstVertex, transformOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureBuildRangeInfoKHR const & ) const = default;
#else
bool operator==( AccelerationStructureBuildRangeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( primitiveCount == rhs.primitiveCount ) && ( primitiveOffset == rhs.primitiveOffset ) &&
( firstVertex == rhs.firstVertex ) && ( transformOffset == rhs.transformOffset );
+# endif
}
bool operator!=( AccelerationStructureBuildRangeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -997,14 +1151,21 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t firstVertex = {};
uint32_t transformOffset = {};
};
- static_assert( sizeof( AccelerationStructureBuildRangeInfoKHR ) == sizeof( VkAccelerationStructureBuildRangeInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureBuildRangeInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR ) ==
+ sizeof( VkAccelerationStructureBuildRangeInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildRangeInfoKHR>::value,
+ "AccelerationStructureBuildRangeInfoKHR is not nothrow_move_constructible!" );
struct AccelerationStructureBuildSizesInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureBuildSizesInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureBuildSizesInfoKHR;
@@ -1027,8 +1188,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR &
- operator=( AccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureBuildSizesInfoKHR &
+ operator=( AccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureBuildSizesInfoKHR &
operator=( VkAccelerationStructureBuildSizesInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -1038,27 +1199,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureBuildSizesInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureBuildSizesInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR &
setAccelerationStructureSize( VULKAN_HPP_NAMESPACE::DeviceSize accelerationStructureSize_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureSize = accelerationStructureSize_;
return *this;
}
- AccelerationStructureBuildSizesInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR &
setUpdateScratchSize( VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize_ ) VULKAN_HPP_NOEXCEPT
{
updateScratchSize = updateScratchSize_;
return *this;
}
- AccelerationStructureBuildSizesInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureBuildSizesInfoKHR &
setBuildScratchSize( VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize_ ) VULKAN_HPP_NOEXCEPT
{
buildScratchSize = buildScratchSize_;
@@ -1066,24 +1227,44 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureBuildSizesInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureBuildSizesInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureBuildSizesInfoKHR *>( this );
}
- operator VkAccelerationStructureBuildSizesInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureBuildSizesInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureBuildSizesInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, accelerationStructureSize, updateScratchSize, buildScratchSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureBuildSizesInfoKHR const & ) const = default;
#else
bool operator==( AccelerationStructureBuildSizesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( accelerationStructureSize == rhs.accelerationStructureSize ) &&
( updateScratchSize == rhs.updateScratchSize ) && ( buildScratchSize == rhs.buildScratchSize );
+# endif
}
bool operator!=( AccelerationStructureBuildSizesInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1099,10 +1280,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize updateScratchSize = {};
VULKAN_HPP_NAMESPACE::DeviceSize buildScratchSize = {};
};
- static_assert( sizeof( AccelerationStructureBuildSizesInfoKHR ) == sizeof( VkAccelerationStructureBuildSizesInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureBuildSizesInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR ) ==
+ sizeof( VkAccelerationStructureBuildSizesInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureBuildSizesInfoKHR>::value,
+ "AccelerationStructureBuildSizesInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureBuildSizesInfoKHR>
@@ -1112,7 +1298,9 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureCreateInfoKHR;
@@ -1141,8 +1329,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
- operator=( AccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureCreateInfoKHR &
+ operator=( AccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureCreateInfoKHR &
operator=( VkAccelerationStructureCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -1152,70 +1340,96 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
setCreateFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR createFlags_ ) VULKAN_HPP_NOEXCEPT
{
createFlags = createFlags_;
return *this;
}
- AccelerationStructureCreateInfoKHR & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- AccelerationStructureCreateInfoKHR & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- AccelerationStructureCreateInfoKHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
+ setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
- AccelerationStructureCreateInfoKHR &
- setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
+ setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- AccelerationStructureCreateInfoKHR &
- setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoKHR &
+ setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
deviceAddress = deviceAddress_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureCreateInfoKHR *>( this );
}
- operator VkAccelerationStructureCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureCreateFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR const &,
+ VULKAN_HPP_NAMESPACE::DeviceAddress const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, createFlags, buffer, offset, size, type, deviceAddress );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureCreateInfoKHR const & ) const = default;
#else
bool operator==( AccelerationStructureCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createFlags == rhs.createFlags ) &&
( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( size == rhs.size ) && ( type == rhs.type ) &&
( deviceAddress == rhs.deviceAddress );
+# endif
}
bool operator!=( AccelerationStructureCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1235,10 +1449,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccelerationStructureTypeKHR::eTopLevel;
VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {};
};
- static_assert( sizeof( AccelerationStructureCreateInfoKHR ) == sizeof( VkAccelerationStructureCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR ) ==
+ sizeof( VkAccelerationStructureCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoKHR>::value,
+ "AccelerationStructureCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureCreateInfoKHR>
@@ -1248,8 +1466,10 @@ namespace VULKAN_HPP_NAMESPACE
struct GeometryTrianglesNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryTrianglesNV;
+ using NativeType = VkGeometryTrianglesNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryTrianglesNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -1284,8 +1504,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
- operator=( GeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GeometryTrianglesNV & operator=( GeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GeometryTrianglesNV & operator=( VkGeometryTrianglesNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -1294,100 +1513,149 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GeometryTrianglesNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GeometryTrianglesNV & setVertexData( VULKAN_HPP_NAMESPACE::Buffer vertexData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setVertexData( VULKAN_HPP_NAMESPACE::Buffer vertexData_ ) VULKAN_HPP_NOEXCEPT
{
vertexData = vertexData_;
return *this;
}
- GeometryTrianglesNV & setVertexOffset( VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setVertexOffset( VULKAN_HPP_NAMESPACE::DeviceSize vertexOffset_ ) VULKAN_HPP_NOEXCEPT
{
vertexOffset = vertexOffset_;
return *this;
}
- GeometryTrianglesNV & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT
{
vertexCount = vertexCount_;
return *this;
}
- GeometryTrianglesNV & setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setVertexStride( VULKAN_HPP_NAMESPACE::DeviceSize vertexStride_ ) VULKAN_HPP_NOEXCEPT
{
vertexStride = vertexStride_;
return *this;
}
- GeometryTrianglesNV & setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setVertexFormat( VULKAN_HPP_NAMESPACE::Format vertexFormat_ ) VULKAN_HPP_NOEXCEPT
{
vertexFormat = vertexFormat_;
return *this;
}
- GeometryTrianglesNV & setIndexData( VULKAN_HPP_NAMESPACE::Buffer indexData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setIndexData( VULKAN_HPP_NAMESPACE::Buffer indexData_ ) VULKAN_HPP_NOEXCEPT
{
indexData = indexData_;
return *this;
}
- GeometryTrianglesNV & setIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize indexOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize indexOffset_ ) VULKAN_HPP_NOEXCEPT
{
indexOffset = indexOffset_;
return *this;
}
- GeometryTrianglesNV & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT
{
indexCount = indexCount_;
return *this;
}
- GeometryTrianglesNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT
{
indexType = indexType_;
return *this;
}
- GeometryTrianglesNV & setTransformData( VULKAN_HPP_NAMESPACE::Buffer transformData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setTransformData( VULKAN_HPP_NAMESPACE::Buffer transformData_ ) VULKAN_HPP_NOEXCEPT
{
transformData = transformData_;
return *this;
}
- GeometryTrianglesNV & setTransformOffset( VULKAN_HPP_NAMESPACE::DeviceSize transformOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryTrianglesNV &
+ setTransformOffset( VULKAN_HPP_NAMESPACE::DeviceSize transformOffset_ ) VULKAN_HPP_NOEXCEPT
{
transformOffset = transformOffset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGeometryTrianglesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryTrianglesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGeometryTrianglesNV *>( this );
}
- operator VkGeometryTrianglesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryTrianglesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGeometryTrianglesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::IndexType const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ vertexData,
+ vertexOffset,
+ vertexCount,
+ vertexStride,
+ vertexFormat,
+ indexData,
+ indexOffset,
+ indexCount,
+ indexType,
+ transformData,
+ transformOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GeometryTrianglesNV const & ) const = default;
#else
bool operator==( GeometryTrianglesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vertexData == rhs.vertexData ) &&
( vertexOffset == rhs.vertexOffset ) && ( vertexCount == rhs.vertexCount ) &&
( vertexStride == rhs.vertexStride ) && ( vertexFormat == rhs.vertexFormat ) &&
( indexData == rhs.indexData ) && ( indexOffset == rhs.indexOffset ) && ( indexCount == rhs.indexCount ) &&
( indexType == rhs.indexType ) && ( transformData == rhs.transformData ) &&
( transformOffset == rhs.transformOffset );
+# endif
}
bool operator!=( GeometryTrianglesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1411,9 +1679,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Buffer transformData = {};
VULKAN_HPP_NAMESPACE::DeviceSize transformOffset = {};
};
- static_assert( sizeof( GeometryTrianglesNV ) == sizeof( VkGeometryTrianglesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GeometryTrianglesNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV ) == sizeof( VkGeometryTrianglesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GeometryTrianglesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GeometryTrianglesNV>::value,
+ "GeometryTrianglesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGeometryTrianglesNV>
@@ -1423,8 +1694,10 @@ namespace VULKAN_HPP_NAMESPACE
struct GeometryAABBNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryAabbNV;
+ using NativeType = VkGeometryAABBNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryAabbNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR GeometryAABBNV( VULKAN_HPP_NAMESPACE::Buffer aabbData_ = {},
@@ -1444,7 +1717,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & operator=( GeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GeometryAABBNV & operator=( GeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GeometryAABBNV & operator=( VkGeometryAABBNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -1453,54 +1726,75 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GeometryAABBNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GeometryAABBNV & setAabbData( VULKAN_HPP_NAMESPACE::Buffer aabbData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setAabbData( VULKAN_HPP_NAMESPACE::Buffer aabbData_ ) VULKAN_HPP_NOEXCEPT
{
aabbData = aabbData_;
return *this;
}
- GeometryAABBNV & setNumAABBs( uint32_t numAABBs_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setNumAABBs( uint32_t numAABBs_ ) VULKAN_HPP_NOEXCEPT
{
numAABBs = numAABBs_;
return *this;
}
- GeometryAABBNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
- GeometryAABBNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryAABBNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGeometryAABBNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryAABBNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGeometryAABBNV *>( this );
}
- operator VkGeometryAABBNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryAABBNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGeometryAABBNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, aabbData, numAABBs, stride, offset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GeometryAABBNV const & ) const = default;
#else
bool operator==( GeometryAABBNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( aabbData == rhs.aabbData ) &&
( numAABBs == rhs.numAABBs ) && ( stride == rhs.stride ) && ( offset == rhs.offset );
+# endif
}
bool operator!=( GeometryAABBNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1517,8 +1811,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t stride = {};
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
};
- static_assert( sizeof( GeometryAABBNV ) == sizeof( VkGeometryAABBNV ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GeometryAABBNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryAABBNV ) == sizeof( VkGeometryAABBNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GeometryAABBNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GeometryAABBNV>::value,
+ "GeometryAABBNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGeometryAabbNV>
@@ -1528,6 +1826,8 @@ namespace VULKAN_HPP_NAMESPACE
struct GeometryDataNV
{
+ using NativeType = VkGeometryDataNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR GeometryDataNV( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV triangles_ = {},
VULKAN_HPP_NAMESPACE::GeometryAABBNV aabbs_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -1542,7 +1842,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GeometryDataNV & operator=( GeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GeometryDataNV & operator=( GeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GeometryDataNV & operator=( VkGeometryDataNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -1551,35 +1851,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GeometryDataNV & setTriangles( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & triangles_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryDataNV &
+ setTriangles( VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const & triangles_ ) VULKAN_HPP_NOEXCEPT
{
triangles = triangles_;
return *this;
}
- GeometryDataNV & setAabbs( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & aabbs_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryDataNV &
+ setAabbs( VULKAN_HPP_NAMESPACE::GeometryAABBNV const & aabbs_ ) VULKAN_HPP_NOEXCEPT
{
aabbs = aabbs_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGeometryDataNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryDataNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGeometryDataNV *>( this );
}
- operator VkGeometryDataNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryDataNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGeometryDataNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::GeometryTrianglesNV const &, VULKAN_HPP_NAMESPACE::GeometryAABBNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( triangles, aabbs );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GeometryDataNV const & ) const = default;
#else
bool operator==( GeometryDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( triangles == rhs.triangles ) && ( aabbs == rhs.aabbs );
+# endif
}
bool operator!=( GeometryDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1592,13 +1910,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::GeometryTrianglesNV triangles = {};
VULKAN_HPP_NAMESPACE::GeometryAABBNV aabbs = {};
};
- static_assert( sizeof( GeometryDataNV ) == sizeof( VkGeometryDataNV ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GeometryDataNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryDataNV ) == sizeof( VkGeometryDataNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GeometryDataNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GeometryDataNV>::value,
+ "GeometryDataNV is not nothrow_move_constructible!" );
struct GeometryNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryNV;
+ using NativeType = VkGeometryNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeometryNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR GeometryNV(
@@ -1617,7 +1941,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GeometryNV & operator=( GeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GeometryNV & operator=( GeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GeometryNV & operator=( VkGeometryNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -1626,48 +1950,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GeometryNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GeometryNV & setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryNV &
+ setGeometryType( VULKAN_HPP_NAMESPACE::GeometryTypeKHR geometryType_ ) VULKAN_HPP_NOEXCEPT
{
geometryType = geometryType_;
return *this;
}
- GeometryNV & setGeometry( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometry_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryNV &
+ setGeometry( VULKAN_HPP_NAMESPACE::GeometryDataNV const & geometry_ ) VULKAN_HPP_NOEXCEPT
{
geometry = geometry_;
return *this;
}
- GeometryNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeometryNV & setFlags( VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGeometryNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGeometryNV *>( this );
}
- operator VkGeometryNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeometryNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGeometryNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::GeometryTypeKHR const &,
+ VULKAN_HPP_NAMESPACE::GeometryDataNV const &,
+ VULKAN_HPP_NAMESPACE::GeometryFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, geometryType, geometry, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GeometryNV const & ) const = default;
#else
bool operator==( GeometryNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( geometryType == rhs.geometryType ) &&
( geometry == rhs.geometry ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( GeometryNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1683,8 +2029,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::GeometryDataNV geometry = {};
VULKAN_HPP_NAMESPACE::GeometryFlagsKHR flags = {};
};
- static_assert( sizeof( GeometryNV ) == sizeof( VkGeometryNV ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GeometryNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeometryNV ) == sizeof( VkGeometryNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GeometryNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GeometryNV>::value,
+ "GeometryNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGeometryNV>
@@ -1694,8 +2044,10 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureInfoNV;
+ using NativeType = VkAccelerationStructureInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAccelerationStructureInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -1733,8 +2085,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV &
- operator=( AccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureInfoNV & operator=( AccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureInfoNV & operator=( VkAccelerationStructureInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -1743,39 +2094,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureInfoNV & setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV &
+ setType( VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- AccelerationStructureInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AccelerationStructureInfoNV & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV &
+ setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT
{
instanceCount = instanceCount_;
return *this;
}
- AccelerationStructureInfoNV & setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV &
+ setGeometryCount( uint32_t geometryCount_ ) VULKAN_HPP_NOEXCEPT
{
geometryCount = geometryCount_;
return *this;
}
- AccelerationStructureInfoNV &
- setPGeometries( const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInfoNV &
+ setPGeometries( const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries_ ) VULKAN_HPP_NOEXCEPT
{
pGeometries = pGeometries_;
return *this;
@@ -1793,24 +2147,46 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureInfoNV *>( this );
}
- operator VkAccelerationStructureInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureTypeNV const &,
+ VULKAN_HPP_NAMESPACE::BuildAccelerationStructureFlagsNV const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::GeometryNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, type, flags, instanceCount, geometryCount, pGeometries );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureInfoNV const & ) const = default;
#else
bool operator==( AccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( flags == rhs.flags ) &&
( instanceCount == rhs.instanceCount ) && ( geometryCount == rhs.geometryCount ) &&
( pGeometries == rhs.pGeometries );
+# endif
}
bool operator!=( AccelerationStructureInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1828,10 +2204,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t geometryCount = {};
const VULKAN_HPP_NAMESPACE::GeometryNV * pGeometries = {};
};
- static_assert( sizeof( AccelerationStructureInfoNV ) == sizeof( VkAccelerationStructureInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV ) ==
+ sizeof( VkAccelerationStructureInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV>::value,
+ "AccelerationStructureInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureInfoNV>
@@ -1841,7 +2221,9 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureCreateInfoNV;
@@ -1861,8 +2243,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV &
- operator=( AccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureCreateInfoNV &
+ operator=( AccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureCreateInfoNV & operator=( VkAccelerationStructureCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -1871,20 +2253,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureCreateInfoNV &
- setCompactedSize( VULKAN_HPP_NAMESPACE::DeviceSize compactedSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV &
+ setCompactedSize( VULKAN_HPP_NAMESPACE::DeviceSize compactedSize_ ) VULKAN_HPP_NOEXCEPT
{
compactedSize = compactedSize_;
return *this;
}
- AccelerationStructureCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureCreateInfoNV &
setInfo( VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const & info_ ) VULKAN_HPP_NOEXCEPT
{
info = info_;
@@ -1892,23 +2274,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureCreateInfoNV *>( this );
}
- operator VkAccelerationStructureCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, compactedSize, info );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureCreateInfoNV const & ) const = default;
#else
bool operator==( AccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compactedSize == rhs.compactedSize ) &&
( info == rhs.info );
+# endif
}
bool operator!=( AccelerationStructureCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -1923,10 +2324,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize compactedSize = {};
VULKAN_HPP_NAMESPACE::AccelerationStructureInfoNV info = {};
};
- static_assert( sizeof( AccelerationStructureCreateInfoNV ) == sizeof( VkAccelerationStructureCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV ) ==
+ sizeof( VkAccelerationStructureCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureCreateInfoNV>::value,
+ "AccelerationStructureCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureCreateInfoNV>
@@ -1936,7 +2341,9 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureDeviceAddressInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureDeviceAddressInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureDeviceAddressInfoKHR;
@@ -1956,8 +2363,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR &
- operator=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureDeviceAddressInfoKHR &
+ operator=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureDeviceAddressInfoKHR &
operator=( VkAccelerationStructureDeviceAddressInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -1967,13 +2374,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureDeviceAddressInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureDeviceAddressInfoKHR & setAccelerationStructure(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureDeviceAddressInfoKHR & setAccelerationStructure(
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructure = accelerationStructure_;
@@ -1981,22 +2389,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureDeviceAddressInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureDeviceAddressInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureDeviceAddressInfoKHR *>( this );
}
- operator VkAccelerationStructureDeviceAddressInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureDeviceAddressInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureDeviceAddressInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, accelerationStructure );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureDeviceAddressInfoKHR const & ) const = default;
#else
bool operator==( AccelerationStructureDeviceAddressInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( accelerationStructure == rhs.accelerationStructure );
+# endif
}
bool operator!=( AccelerationStructureDeviceAddressInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2010,11 +2436,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::AccelerationStructureKHR accelerationStructure = {};
};
- static_assert( sizeof( AccelerationStructureDeviceAddressInfoKHR ) ==
- sizeof( VkAccelerationStructureDeviceAddressInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureDeviceAddressInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR ) ==
+ sizeof( VkAccelerationStructureDeviceAddressInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureDeviceAddressInfoKHR>::value,
+ "AccelerationStructureDeviceAddressInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureDeviceAddressInfoKHR>
@@ -2024,18 +2454,20 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureGeometryMotionTrianglesDataNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureGeometryMotionTrianglesDataNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureGeometryMotionTrianglesDataNV(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV(
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData_ = {} ) VULKAN_HPP_NOEXCEPT
: vertexData( vertexData_ )
{}
- AccelerationStructureGeometryMotionTrianglesDataNV( AccelerationStructureGeometryMotionTrianglesDataNV const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV(
+ AccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureGeometryMotionTrianglesDataNV(
VkAccelerationStructureGeometryMotionTrianglesDataNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -2056,13 +2488,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureGeometryMotionTrianglesDataNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureGeometryMotionTrianglesDataNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureGeometryMotionTrianglesDataNV &
setVertexData( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & vertexData_ ) VULKAN_HPP_NOEXCEPT
{
vertexData = vertexData_;
@@ -2070,26 +2503,44 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureGeometryMotionTrianglesDataNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryMotionTrianglesDataNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureGeometryMotionTrianglesDataNV *>( this );
}
- operator VkAccelerationStructureGeometryMotionTrianglesDataNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureGeometryMotionTrianglesDataNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureGeometryMotionTrianglesDataNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, vertexData );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR vertexData = {};
};
- static_assert( sizeof( AccelerationStructureGeometryMotionTrianglesDataNV ) ==
- sizeof( VkAccelerationStructureGeometryMotionTrianglesDataNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureGeometryMotionTrianglesDataNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryMotionTrianglesDataNV ) ==
+ sizeof( VkAccelerationStructureGeometryMotionTrianglesDataNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryMotionTrianglesDataNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureGeometryMotionTrianglesDataNV>::value,
+ "AccelerationStructureGeometryMotionTrianglesDataNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureGeometryMotionTrianglesDataNV>
@@ -2099,6 +2550,8 @@ namespace VULKAN_HPP_NAMESPACE
struct TransformMatrixKHR
{
+ using NativeType = VkTransformMatrixKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
TransformMatrixKHR( std::array<std::array<float, 4>, 3> const & matrix_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -2112,8 +2565,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR &
- operator=( TransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ TransformMatrixKHR & operator=( TransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
TransformMatrixKHR & operator=( VkTransformMatrixKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -2122,29 +2574,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- TransformMatrixKHR & setMatrix( std::array<std::array<float, 4>, 3> matrix_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TransformMatrixKHR &
+ setMatrix( std::array<std::array<float, 4>, 3> matrix_ ) VULKAN_HPP_NOEXCEPT
{
matrix = matrix_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkTransformMatrixKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkTransformMatrixKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkTransformMatrixKHR *>( this );
}
- operator VkTransformMatrixKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkTransformMatrixKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkTransformMatrixKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ArrayWrapper2D<float, 3, 4> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( matrix );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( TransformMatrixKHR const & ) const = default;
#else
bool operator==( TransformMatrixKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( matrix == rhs.matrix );
+# endif
}
bool operator!=( TransformMatrixKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2156,13 +2625,18 @@ namespace VULKAN_HPP_NAMESPACE
public:
VULKAN_HPP_NAMESPACE::ArrayWrapper2D<float, 3, 4> matrix = {};
};
- static_assert( sizeof( TransformMatrixKHR ) == sizeof( VkTransformMatrixKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<TransformMatrixKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TransformMatrixKHR ) == sizeof( VkTransformMatrixKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::TransformMatrixKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::TransformMatrixKHR>::value,
+ "TransformMatrixKHR is not nothrow_move_constructible!" );
using TransformMatrixNV = TransformMatrixKHR;
struct AccelerationStructureInstanceKHR
{
+ using NativeType = VkAccelerationStructureInstanceKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
AccelerationStructureInstanceKHR( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transform_ = {},
@@ -2187,8 +2661,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR &
- operator=( AccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureInstanceKHR &
+ operator=( AccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureInstanceKHR & operator=( VkAccelerationStructureInstanceKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -2197,26 +2671,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureInstanceKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR &
setTransform( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transform_ ) VULKAN_HPP_NOEXCEPT
{
transform = transform_;
return *this;
}
- AccelerationStructureInstanceKHR & setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR &
+ setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT
{
instanceCustomIndex = instanceCustomIndex_;
return *this;
}
- AccelerationStructureInstanceKHR & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT
{
mask = mask_;
return *this;
}
- AccelerationStructureInstanceKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR &
setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT
{
instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_;
@@ -2230,7 +2705,7 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- AccelerationStructureInstanceKHR &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureInstanceKHR &
setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureReference = accelerationStructureReference_;
@@ -2238,25 +2713,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureInstanceKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureInstanceKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureInstanceKHR *>( this );
}
- operator VkAccelerationStructureInstanceKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureInstanceKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureInstanceKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::TransformMatrixKHR const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VkGeometryInstanceFlagsKHR const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( transform,
+ instanceCustomIndex,
+ mask,
+ instanceShaderBindingTableRecordOffset,
+ flags,
+ accelerationStructureReference );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureInstanceKHR const & ) const = default;
#else
bool operator==( AccelerationStructureInstanceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( transform == rhs.transform ) && ( instanceCustomIndex == rhs.instanceCustomIndex ) &&
( mask == rhs.mask ) &&
( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) &&
( flags == rhs.flags ) && ( accelerationStructureReference == rhs.accelerationStructureReference );
+# endif
}
bool operator!=( AccelerationStructureInstanceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2273,14 +2774,20 @@ namespace VULKAN_HPP_NAMESPACE
VkGeometryInstanceFlagsKHR flags : 8;
uint64_t accelerationStructureReference = {};
};
- static_assert( sizeof( AccelerationStructureInstanceKHR ) == sizeof( VkAccelerationStructureInstanceKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureInstanceKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR ) ==
+ sizeof( VkAccelerationStructureInstanceKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR>::value,
+ "AccelerationStructureInstanceKHR is not nothrow_move_constructible!" );
using AccelerationStructureInstanceNV = AccelerationStructureInstanceKHR;
struct AccelerationStructureMatrixMotionInstanceNV
{
+ using NativeType = VkAccelerationStructureMatrixMotionInstanceNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
AccelerationStructureMatrixMotionInstanceNV( VULKAN_HPP_NAMESPACE::TransformMatrixKHR transformT0_ = {},
@@ -2309,8 +2816,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV &
- operator=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureMatrixMotionInstanceNV &
+ operator=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureMatrixMotionInstanceNV &
operator=( VkAccelerationStructureMatrixMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -2320,34 +2827,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureMatrixMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV &
setTransformT0( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformT0_ ) VULKAN_HPP_NOEXCEPT
{
transformT0 = transformT0_;
return *this;
}
- AccelerationStructureMatrixMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV &
setTransformT1( VULKAN_HPP_NAMESPACE::TransformMatrixKHR const & transformT1_ ) VULKAN_HPP_NOEXCEPT
{
transformT1 = transformT1_;
return *this;
}
- AccelerationStructureMatrixMotionInstanceNV &
- setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV &
+ setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT
{
instanceCustomIndex = instanceCustomIndex_;
return *this;
}
- AccelerationStructureMatrixMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT
{
mask = mask_;
return *this;
}
- AccelerationStructureMatrixMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV &
setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT
{
instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_;
@@ -2361,7 +2868,7 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- AccelerationStructureMatrixMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMatrixMotionInstanceNV &
setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureReference = accelerationStructureReference_;
@@ -2369,25 +2876,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureMatrixMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMatrixMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureMatrixMotionInstanceNV *>( this );
}
- operator VkAccelerationStructureMatrixMotionInstanceNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMatrixMotionInstanceNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureMatrixMotionInstanceNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::TransformMatrixKHR const &,
+ VULKAN_HPP_NAMESPACE::TransformMatrixKHR const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VkGeometryInstanceFlagsKHR const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( transformT0,
+ transformT1,
+ instanceCustomIndex,
+ mask,
+ instanceShaderBindingTableRecordOffset,
+ flags,
+ accelerationStructureReference );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureMatrixMotionInstanceNV const & ) const = default;
#else
bool operator==( AccelerationStructureMatrixMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( transformT0 == rhs.transformT0 ) && ( transformT1 == rhs.transformT1 ) &&
( instanceCustomIndex == rhs.instanceCustomIndex ) && ( mask == rhs.mask ) &&
( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) &&
( flags == rhs.flags ) && ( accelerationStructureReference == rhs.accelerationStructureReference );
+# endif
}
bool operator!=( AccelerationStructureMatrixMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2405,15 +2940,21 @@ namespace VULKAN_HPP_NAMESPACE
VkGeometryInstanceFlagsKHR flags : 8;
uint64_t accelerationStructureReference = {};
};
- static_assert( sizeof( AccelerationStructureMatrixMotionInstanceNV ) ==
- sizeof( VkAccelerationStructureMatrixMotionInstanceNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureMatrixMotionInstanceNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV ) ==
+ sizeof( VkAccelerationStructureMatrixMotionInstanceNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV>::value,
+ "AccelerationStructureMatrixMotionInstanceNV is not nothrow_move_constructible!" );
struct AccelerationStructureMemoryRequirementsInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureMemoryRequirementsInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureMemoryRequirementsInfoNV;
@@ -2436,8 +2977,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV &
- operator=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureMemoryRequirementsInfoNV &
+ operator=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureMemoryRequirementsInfoNV &
operator=( VkAccelerationStructureMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -2447,20 +2988,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureMemoryRequirementsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureMemoryRequirementsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV &
setType( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- AccelerationStructureMemoryRequirementsInfoNV & setAccelerationStructure(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMemoryRequirementsInfoNV & setAccelerationStructure(
VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructure = accelerationStructure_;
@@ -2468,23 +3010,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureMemoryRequirementsInfoNV *>( this );
}
- operator VkAccelerationStructureMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureMemoryRequirementsInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, type, accelerationStructure );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureMemoryRequirementsInfoNV const & ) const = default;
#else
bool operator==( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) &&
( accelerationStructure == rhs.accelerationStructure );
+# endif
}
bool operator!=( AccelerationStructureMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2500,11 +3061,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsTypeNV::eObject;
VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure = {};
};
- static_assert( sizeof( AccelerationStructureMemoryRequirementsInfoNV ) ==
- sizeof( VkAccelerationStructureMemoryRequirementsInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureMemoryRequirementsInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV ) ==
+ sizeof( VkAccelerationStructureMemoryRequirementsInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureMemoryRequirementsInfoNV>::value,
+ "AccelerationStructureMemoryRequirementsInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureMemoryRequirementsInfoNV>
@@ -2514,7 +3079,9 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureMotionInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureMotionInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureMotionInfoNV;
@@ -2534,8 +3101,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV &
- operator=( AccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureMotionInfoNV &
+ operator=( AccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureMotionInfoNV & operator=( VkAccelerationStructureMotionInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -2544,19 +3111,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureMotionInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureMotionInfoNV & setMaxInstances( uint32_t maxInstances_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV &
+ setMaxInstances( uint32_t maxInstances_ ) VULKAN_HPP_NOEXCEPT
{
maxInstances = maxInstances_;
return *this;
}
- AccelerationStructureMotionInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
@@ -2564,23 +3132,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureMotionInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMotionInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureMotionInfoNV *>( this );
}
- operator VkAccelerationStructureMotionInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMotionInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureMotionInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxInstances, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureMotionInfoNV const & ) const = default;
#else
bool operator==( AccelerationStructureMotionInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxInstances == rhs.maxInstances ) &&
( flags == rhs.flags );
+# endif
}
bool operator!=( AccelerationStructureMotionInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2595,10 +3182,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxInstances = {};
VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoFlagsNV flags = {};
};
- static_assert( sizeof( AccelerationStructureMotionInfoNV ) == sizeof( VkAccelerationStructureMotionInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureMotionInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV ) ==
+ sizeof( VkAccelerationStructureMotionInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInfoNV>::value,
+ "AccelerationStructureMotionInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureMotionInfoNV>
@@ -2608,6 +3199,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SRTDataNV
{
+ using NativeType = VkSRTDataNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SRTDataNV( float sx_ = {},
float a_ = {},
@@ -2649,7 +3242,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SRTDataNV & operator=( SRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SRTDataNV & operator=( SRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SRTDataNV & operator=( VkSRTDataNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -2658,122 +3251,153 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SRTDataNV & setSx( float sx_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSx( float sx_ ) VULKAN_HPP_NOEXCEPT
{
sx = sx_;
return *this;
}
- SRTDataNV & setA( float a_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setA( float a_ ) VULKAN_HPP_NOEXCEPT
{
a = a_;
return *this;
}
- SRTDataNV & setB( float b_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setB( float b_ ) VULKAN_HPP_NOEXCEPT
{
b = b_;
return *this;
}
- SRTDataNV & setPvx( float pvx_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvx( float pvx_ ) VULKAN_HPP_NOEXCEPT
{
pvx = pvx_;
return *this;
}
- SRTDataNV & setSy( float sy_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSy( float sy_ ) VULKAN_HPP_NOEXCEPT
{
sy = sy_;
return *this;
}
- SRTDataNV & setC( float c_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setC( float c_ ) VULKAN_HPP_NOEXCEPT
{
c = c_;
return *this;
}
- SRTDataNV & setPvy( float pvy_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvy( float pvy_ ) VULKAN_HPP_NOEXCEPT
{
pvy = pvy_;
return *this;
}
- SRTDataNV & setSz( float sz_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setSz( float sz_ ) VULKAN_HPP_NOEXCEPT
{
sz = sz_;
return *this;
}
- SRTDataNV & setPvz( float pvz_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setPvz( float pvz_ ) VULKAN_HPP_NOEXCEPT
{
pvz = pvz_;
return *this;
}
- SRTDataNV & setQx( float qx_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQx( float qx_ ) VULKAN_HPP_NOEXCEPT
{
qx = qx_;
return *this;
}
- SRTDataNV & setQy( float qy_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQy( float qy_ ) VULKAN_HPP_NOEXCEPT
{
qy = qy_;
return *this;
}
- SRTDataNV & setQz( float qz_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQz( float qz_ ) VULKAN_HPP_NOEXCEPT
{
qz = qz_;
return *this;
}
- SRTDataNV & setQw( float qw_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setQw( float qw_ ) VULKAN_HPP_NOEXCEPT
{
qw = qw_;
return *this;
}
- SRTDataNV & setTx( float tx_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTx( float tx_ ) VULKAN_HPP_NOEXCEPT
{
tx = tx_;
return *this;
}
- SRTDataNV & setTy( float ty_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTy( float ty_ ) VULKAN_HPP_NOEXCEPT
{
ty = ty_;
return *this;
}
- SRTDataNV & setTz( float tz_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SRTDataNV & setTz( float tz_ ) VULKAN_HPP_NOEXCEPT
{
tz = tz_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSRTDataNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSRTDataNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSRTDataNV *>( this );
}
- operator VkSRTDataNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSRTDataNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSRTDataNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sx, a, b, pvx, sy, c, pvy, sz, pvz, qx, qy, qz, qw, tx, ty, tz );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SRTDataNV const & ) const = default;
#else
bool operator==( SRTDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sx == rhs.sx ) && ( a == rhs.a ) && ( b == rhs.b ) && ( pvx == rhs.pvx ) && ( sy == rhs.sy ) &&
( c == rhs.c ) && ( pvy == rhs.pvy ) && ( sz == rhs.sz ) && ( pvz == rhs.pvz ) && ( qx == rhs.qx ) &&
( qy == rhs.qy ) && ( qz == rhs.qz ) && ( qw == rhs.qw ) && ( tx == rhs.tx ) && ( ty == rhs.ty ) &&
( tz == rhs.tz );
+# endif
}
bool operator!=( SRTDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2800,11 +3424,17 @@ namespace VULKAN_HPP_NAMESPACE
float ty = {};
float tz = {};
};
- static_assert( sizeof( SRTDataNV ) == sizeof( VkSRTDataNV ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SRTDataNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SRTDataNV ) == sizeof( VkSRTDataNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SRTDataNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SRTDataNV>::value,
+ "SRTDataNV is not nothrow_move_constructible!" );
struct AccelerationStructureSRTMotionInstanceNV
{
+ using NativeType = VkAccelerationStructureSRTMotionInstanceNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
AccelerationStructureSRTMotionInstanceNV( VULKAN_HPP_NAMESPACE::SRTDataNV transformT0_ = {},
@@ -2833,8 +3463,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV &
- operator=( AccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureSRTMotionInstanceNV &
+ operator=( AccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureSRTMotionInstanceNV &
operator=( VkAccelerationStructureSRTMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -2844,34 +3474,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureSRTMotionInstanceNV &
- setTransformT0( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT0_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV &
+ setTransformT0( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT0_ ) VULKAN_HPP_NOEXCEPT
{
transformT0 = transformT0_;
return *this;
}
- AccelerationStructureSRTMotionInstanceNV &
- setTransformT1( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT1_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV &
+ setTransformT1( VULKAN_HPP_NAMESPACE::SRTDataNV const & transformT1_ ) VULKAN_HPP_NOEXCEPT
{
transformT1 = transformT1_;
return *this;
}
- AccelerationStructureSRTMotionInstanceNV &
- setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV &
+ setInstanceCustomIndex( uint32_t instanceCustomIndex_ ) VULKAN_HPP_NOEXCEPT
{
instanceCustomIndex = instanceCustomIndex_;
return *this;
}
- AccelerationStructureSRTMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV & setMask( uint32_t mask_ ) VULKAN_HPP_NOEXCEPT
{
mask = mask_;
return *this;
}
- AccelerationStructureSRTMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV &
setInstanceShaderBindingTableRecordOffset( uint32_t instanceShaderBindingTableRecordOffset_ ) VULKAN_HPP_NOEXCEPT
{
instanceShaderBindingTableRecordOffset = instanceShaderBindingTableRecordOffset_;
@@ -2885,7 +3515,7 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- AccelerationStructureSRTMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureSRTMotionInstanceNV &
setAccelerationStructureReference( uint64_t accelerationStructureReference_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureReference = accelerationStructureReference_;
@@ -2893,25 +3523,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureSRTMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureSRTMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureSRTMotionInstanceNV *>( this );
}
- operator VkAccelerationStructureSRTMotionInstanceNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureSRTMotionInstanceNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureSRTMotionInstanceNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::SRTDataNV const &,
+ VULKAN_HPP_NAMESPACE::SRTDataNV const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VkGeometryInstanceFlagsKHR const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( transformT0,
+ transformT1,
+ instanceCustomIndex,
+ mask,
+ instanceShaderBindingTableRecordOffset,
+ flags,
+ accelerationStructureReference );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureSRTMotionInstanceNV const & ) const = default;
#else
bool operator==( AccelerationStructureSRTMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( transformT0 == rhs.transformT0 ) && ( transformT1 == rhs.transformT1 ) &&
( instanceCustomIndex == rhs.instanceCustomIndex ) && ( mask == rhs.mask ) &&
( instanceShaderBindingTableRecordOffset == rhs.instanceShaderBindingTableRecordOffset ) &&
( flags == rhs.flags ) && ( accelerationStructureReference == rhs.accelerationStructureReference );
+# endif
}
bool operator!=( AccelerationStructureSRTMotionInstanceNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -2929,47 +3587,46 @@ namespace VULKAN_HPP_NAMESPACE
VkGeometryInstanceFlagsKHR flags : 8;
uint64_t accelerationStructureReference = {};
};
- static_assert( sizeof( AccelerationStructureSRTMotionInstanceNV ) ==
- sizeof( VkAccelerationStructureSRTMotionInstanceNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureSRTMotionInstanceNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV ) ==
+ sizeof( VkAccelerationStructureSRTMotionInstanceNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV>::value,
+ "AccelerationStructureSRTMotionInstanceNV is not nothrow_move_constructible!" );
union AccelerationStructureMotionInstanceDataNV
{
+ using NativeType = VkAccelerationStructureMotionInstanceDataNV;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- AccelerationStructureMotionInstanceDataNV(
- VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy(
- static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV ) );
- }
- AccelerationStructureMotionInstanceDataNV(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV(
VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR staticInstance_ = {} )
: staticInstance( staticInstance_ )
{}
- AccelerationStructureMotionInstanceDataNV(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV(
VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV matrixMotionInstance_ )
: matrixMotionInstance( matrixMotionInstance_ )
{}
- AccelerationStructureMotionInstanceDataNV(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV(
VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV srtMotionInstance_ )
: srtMotionInstance( srtMotionInstance_ )
{}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- AccelerationStructureMotionInstanceDataNV & setStaticInstance(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & setStaticInstance(
VULKAN_HPP_NAMESPACE::AccelerationStructureInstanceKHR const & staticInstance_ ) VULKAN_HPP_NOEXCEPT
{
staticInstance = staticInstance_;
return *this;
}
- AccelerationStructureMotionInstanceDataNV & setMatrixMotionInstance(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & setMatrixMotionInstance(
VULKAN_HPP_NAMESPACE::AccelerationStructureMatrixMotionInstanceNV const & matrixMotionInstance_ )
VULKAN_HPP_NOEXCEPT
{
@@ -2977,7 +3634,7 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- AccelerationStructureMotionInstanceDataNV & setSrtMotionInstance(
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceDataNV & setSrtMotionInstance(
VULKAN_HPP_NAMESPACE::AccelerationStructureSRTMotionInstanceNV const & srtMotionInstance_ ) VULKAN_HPP_NOEXCEPT
{
srtMotionInstance = srtMotionInstance_;
@@ -2985,14 +3642,6 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV &
- operator=( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy(
- static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV ) );
- return *this;
- }
-
operator VkAccelerationStructureMotionInstanceDataNV const &() const
{
return *reinterpret_cast<const VkAccelerationStructureMotionInstanceDataNV *>( this );
@@ -3016,18 +3665,20 @@ namespace VULKAN_HPP_NAMESPACE
struct AccelerationStructureMotionInstanceNV
{
+ using NativeType = VkAccelerationStructureMotionInstanceNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- AccelerationStructureMotionInstanceNV( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ =
- VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic,
- VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ = {},
- VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data_ = {} )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ =
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ = {},
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data_ = {} ) VULKAN_HPP_NOEXCEPT
: type( type_ )
, flags( flags_ )
, data( data_ )
{}
- AccelerationStructureMotionInstanceNV( AccelerationStructureMotionInstanceNV const & rhs )
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV( AccelerationStructureMotionInstanceNV const & rhs )
VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureMotionInstanceNV( VkAccelerationStructureMotionInstanceNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -3047,21 +3698,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV &
setType( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- AccelerationStructureMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV &
setFlags( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AccelerationStructureMotionInstanceNV &
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureMotionInstanceNV &
setData( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV const & data_ ) VULKAN_HPP_NOEXCEPT
{
data = data_;
@@ -3069,30 +3720,50 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMotionInstanceNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureMotionInstanceNV *>( this );
}
- operator VkAccelerationStructureMotionInstanceNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureMotionInstanceNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureMotionInstanceNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( type, flags, data );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV type =
VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceTypeNV::eStatic;
VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceFlagsNV flags = {};
VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceDataNV data = {};
};
- static_assert( sizeof( AccelerationStructureMotionInstanceNV ) == sizeof( VkAccelerationStructureMotionInstanceNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureMotionInstanceNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceNV ) ==
+ sizeof( VkAccelerationStructureMotionInstanceNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureMotionInstanceNV>::value,
+ "AccelerationStructureMotionInstanceNV is not nothrow_move_constructible!" );
struct AccelerationStructureVersionInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAccelerationStructureVersionInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAccelerationStructureVersionInfoKHR;
@@ -3109,8 +3780,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR &
- operator=( AccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AccelerationStructureVersionInfoKHR &
+ operator=( AccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AccelerationStructureVersionInfoKHR &
operator=( VkAccelerationStructureVersionInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -3120,35 +3791,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AccelerationStructureVersionInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AccelerationStructureVersionInfoKHR & setPVersionData( const uint8_t * pVersionData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AccelerationStructureVersionInfoKHR &
+ setPVersionData( const uint8_t * pVersionData_ ) VULKAN_HPP_NOEXCEPT
{
pVersionData = pVersionData_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAccelerationStructureVersionInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureVersionInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAccelerationStructureVersionInfoKHR *>( this );
}
- operator VkAccelerationStructureVersionInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAccelerationStructureVersionInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAccelerationStructureVersionInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, const uint8_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pVersionData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AccelerationStructureVersionInfoKHR const & ) const = default;
#else
bool operator==( AccelerationStructureVersionInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pVersionData == rhs.pVersionData );
+# endif
}
bool operator!=( AccelerationStructureVersionInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3162,10 +3850,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
const uint8_t * pVersionData = {};
};
- static_assert( sizeof( AccelerationStructureVersionInfoKHR ) == sizeof( VkAccelerationStructureVersionInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AccelerationStructureVersionInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR ) ==
+ sizeof( VkAccelerationStructureVersionInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AccelerationStructureVersionInfoKHR>::value,
+ "AccelerationStructureVersionInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAccelerationStructureVersionInfoKHR>
@@ -3175,8 +3867,10 @@ namespace VULKAN_HPP_NAMESPACE
struct AcquireNextImageInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireNextImageInfoKHR;
+ using NativeType = VkAcquireNextImageInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireNextImageInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AcquireNextImageInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {},
@@ -3198,8 +3892,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR &
- operator=( AcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AcquireNextImageInfoKHR & operator=( AcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AcquireNextImageInfoKHR & operator=( VkAcquireNextImageInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3208,61 +3901,85 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AcquireNextImageInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AcquireNextImageInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR &
+ setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT
{
swapchain = swapchain_;
return *this;
}
- AcquireNextImageInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT
{
timeout = timeout_;
return *this;
}
- AcquireNextImageInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- AcquireNextImageInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
{
fence = fence_;
return *this;
}
- AcquireNextImageInfoKHR & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireNextImageInfoKHR & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
{
deviceMask = deviceMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAcquireNextImageInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAcquireNextImageInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAcquireNextImageInfoKHR *>( this );
}
- operator VkAcquireNextImageInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAcquireNextImageInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAcquireNextImageInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SwapchainKHR const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::Fence const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchain, timeout, semaphore, fence, deviceMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AcquireNextImageInfoKHR const & ) const = default;
#else
bool operator==( AcquireNextImageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) &&
( timeout == rhs.timeout ) && ( semaphore == rhs.semaphore ) && ( fence == rhs.fence ) &&
( deviceMask == rhs.deviceMask );
+# endif
}
bool operator!=( AcquireNextImageInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3280,9 +3997,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Fence fence = {};
uint32_t deviceMask = {};
};
- static_assert( sizeof( AcquireNextImageInfoKHR ) == sizeof( VkAcquireNextImageInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AcquireNextImageInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR ) ==
+ sizeof( VkAcquireNextImageInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AcquireNextImageInfoKHR>::value,
+ "AcquireNextImageInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAcquireNextImageInfoKHR>
@@ -3292,8 +4013,10 @@ namespace VULKAN_HPP_NAMESPACE
struct AcquireProfilingLockInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireProfilingLockInfoKHR;
+ using NativeType = VkAcquireProfilingLockInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAcquireProfilingLockInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AcquireProfilingLockInfoKHR( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ = {},
@@ -3310,8 +4033,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR &
- operator=( AcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AcquireProfilingLockInfoKHR & operator=( AcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AcquireProfilingLockInfoKHR & operator=( VkAcquireProfilingLockInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3320,42 +4042,61 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AcquireProfilingLockInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AcquireProfilingLockInfoKHR &
- setFlags( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AcquireProfilingLockInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AcquireProfilingLockInfoKHR & setTimeout( uint64_t timeout_ ) VULKAN_HPP_NOEXCEPT
{
timeout = timeout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAcquireProfilingLockInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAcquireProfilingLockInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAcquireProfilingLockInfoKHR *>( this );
}
- operator VkAcquireProfilingLockInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAcquireProfilingLockInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAcquireProfilingLockInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, timeout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AcquireProfilingLockInfoKHR const & ) const = default;
#else
bool operator==( AcquireProfilingLockInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( timeout == rhs.timeout );
+# endif
}
bool operator!=( AcquireProfilingLockInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3370,10 +4111,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AcquireProfilingLockFlagsKHR flags = {};
uint64_t timeout = {};
};
- static_assert( sizeof( AcquireProfilingLockInfoKHR ) == sizeof( VkAcquireProfilingLockInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AcquireProfilingLockInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR ) ==
+ sizeof( VkAcquireProfilingLockInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AcquireProfilingLockInfoKHR>::value,
+ "AcquireProfilingLockInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAcquireProfilingLockInfoKHR>
@@ -3383,6 +4128,8 @@ namespace VULKAN_HPP_NAMESPACE
struct AllocationCallbacks
{
+ using NativeType = VkAllocationCallbacks;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AllocationCallbacks( void * pUserData_ = {},
PFN_vkAllocationFunction pfnAllocation_ = {},
@@ -3405,8 +4152,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks &
- operator=( AllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AllocationCallbacks & operator=( AllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AllocationCallbacks & operator=( VkAllocationCallbacks const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3415,62 +4161,86 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AllocationCallbacks & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
{
pUserData = pUserData_;
return *this;
}
- AllocationCallbacks & setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks &
+ setPfnAllocation( PFN_vkAllocationFunction pfnAllocation_ ) VULKAN_HPP_NOEXCEPT
{
pfnAllocation = pfnAllocation_;
return *this;
}
- AllocationCallbacks & setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks &
+ setPfnReallocation( PFN_vkReallocationFunction pfnReallocation_ ) VULKAN_HPP_NOEXCEPT
{
pfnReallocation = pfnReallocation_;
return *this;
}
- AllocationCallbacks & setPfnFree( PFN_vkFreeFunction pfnFree_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks & setPfnFree( PFN_vkFreeFunction pfnFree_ ) VULKAN_HPP_NOEXCEPT
{
pfnFree = pfnFree_;
return *this;
}
- AllocationCallbacks &
+ VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks &
setPfnInternalAllocation( PFN_vkInternalAllocationNotification pfnInternalAllocation_ ) VULKAN_HPP_NOEXCEPT
{
pfnInternalAllocation = pfnInternalAllocation_;
return *this;
}
- AllocationCallbacks & setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AllocationCallbacks &
+ setPfnInternalFree( PFN_vkInternalFreeNotification pfnInternalFree_ ) VULKAN_HPP_NOEXCEPT
{
pfnInternalFree = pfnInternalFree_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAllocationCallbacks const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAllocationCallbacks const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAllocationCallbacks *>( this );
}
- operator VkAllocationCallbacks &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAllocationCallbacks &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAllocationCallbacks *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<void * const &,
+ PFN_vkAllocationFunction const &,
+ PFN_vkReallocationFunction const &,
+ PFN_vkFreeFunction const &,
+ PFN_vkInternalAllocationNotification const &,
+ PFN_vkInternalFreeNotification const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( pUserData, pfnAllocation, pfnReallocation, pfnFree, pfnInternalAllocation, pfnInternalFree );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AllocationCallbacks const & ) const = default;
#else
bool operator==( AllocationCallbacks const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( pUserData == rhs.pUserData ) && ( pfnAllocation == rhs.pfnAllocation ) &&
( pfnReallocation == rhs.pfnReallocation ) && ( pfnFree == rhs.pfnFree ) &&
( pfnInternalAllocation == rhs.pfnInternalAllocation ) && ( pfnInternalFree == rhs.pfnInternalFree );
+# endif
}
bool operator!=( AllocationCallbacks const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3487,12 +4257,17 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkInternalAllocationNotification pfnInternalAllocation = {};
PFN_vkInternalFreeNotification pfnInternalFree = {};
};
- static_assert( sizeof( AllocationCallbacks ) == sizeof( VkAllocationCallbacks ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AllocationCallbacks>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AllocationCallbacks ) == sizeof( VkAllocationCallbacks ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AllocationCallbacks>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AllocationCallbacks>::value,
+ "AllocationCallbacks is not nothrow_move_constructible!" );
struct ComponentMapping
{
+ using NativeType = VkComponentMapping;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
ComponentMapping( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity,
@@ -3513,7 +4288,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ComponentMapping & operator=( ComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ComponentMapping & operator=( ComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ComponentMapping & operator=( VkComponentMapping const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3522,47 +4297,66 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ComponentMapping & setR( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setR( VULKAN_HPP_NAMESPACE::ComponentSwizzle r_ ) VULKAN_HPP_NOEXCEPT
{
r = r_;
return *this;
}
- ComponentMapping & setG( VULKAN_HPP_NAMESPACE::ComponentSwizzle g_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setG( VULKAN_HPP_NAMESPACE::ComponentSwizzle g_ ) VULKAN_HPP_NOEXCEPT
{
g = g_;
return *this;
}
- ComponentMapping & setB( VULKAN_HPP_NAMESPACE::ComponentSwizzle b_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setB( VULKAN_HPP_NAMESPACE::ComponentSwizzle b_ ) VULKAN_HPP_NOEXCEPT
{
b = b_;
return *this;
}
- ComponentMapping & setA( VULKAN_HPP_NAMESPACE::ComponentSwizzle a_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComponentMapping & setA( VULKAN_HPP_NAMESPACE::ComponentSwizzle a_ ) VULKAN_HPP_NOEXCEPT
{
a = a_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkComponentMapping const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkComponentMapping const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkComponentMapping *>( this );
}
- operator VkComponentMapping &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkComponentMapping &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkComponentMapping *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ComponentSwizzle const &,
+ VULKAN_HPP_NAMESPACE::ComponentSwizzle const &,
+ VULKAN_HPP_NAMESPACE::ComponentSwizzle const &,
+ VULKAN_HPP_NAMESPACE::ComponentSwizzle const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( r, g, b, a );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ComponentMapping const & ) const = default;
#else
bool operator==( ComponentMapping const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( r == rhs.r ) && ( g == rhs.g ) && ( b == rhs.b ) && ( a == rhs.a );
+# endif
}
bool operator!=( ComponentMapping const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3577,14 +4371,163 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ComponentSwizzle b = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity;
VULKAN_HPP_NAMESPACE::ComponentSwizzle a = VULKAN_HPP_NAMESPACE::ComponentSwizzle::eIdentity;
};
- static_assert( sizeof( ComponentMapping ) == sizeof( VkComponentMapping ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ComponentMapping>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ComponentMapping ) == sizeof( VkComponentMapping ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ComponentMapping>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ComponentMapping>::value,
+ "ComponentMapping is not nothrow_move_constructible!" );
+
+#if defined( VK_USE_PLATFORM_ANDROID_KHR )
+ struct AndroidHardwareBufferFormatProperties2ANDROID
+ {
+ using NativeType = VkAndroidHardwareBufferFormatProperties2ANDROID;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eAndroidHardwareBufferFormatProperties2ANDROID;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatProperties2ANDROID(
+ VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ uint64_t externalFormat_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 formatFeatures_ = {},
+ VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {},
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ =
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull,
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven,
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ =
+ VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven ) VULKAN_HPP_NOEXCEPT
+ : format( format_ )
+ , externalFormat( externalFormat_ )
+ , formatFeatures( formatFeatures_ )
+ , samplerYcbcrConversionComponents( samplerYcbcrConversionComponents_ )
+ , suggestedYcbcrModel( suggestedYcbcrModel_ )
+ , suggestedYcbcrRange( suggestedYcbcrRange_ )
+ , suggestedXChromaOffset( suggestedXChromaOffset_ )
+ , suggestedYChromaOffset( suggestedYChromaOffset_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR AndroidHardwareBufferFormatProperties2ANDROID(
+ AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ AndroidHardwareBufferFormatProperties2ANDROID( VkAndroidHardwareBufferFormatProperties2ANDROID const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : AndroidHardwareBufferFormatProperties2ANDROID(
+ *reinterpret_cast<AndroidHardwareBufferFormatProperties2ANDROID const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ AndroidHardwareBufferFormatProperties2ANDROID &
+ operator=( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ AndroidHardwareBufferFormatProperties2ANDROID &
+ operator=( VkAndroidHardwareBufferFormatProperties2ANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkAndroidHardwareBufferFormatProperties2ANDROID const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkAndroidHardwareBufferFormatProperties2ANDROID *>( this );
+ }
+
+ explicit operator VkAndroidHardwareBufferFormatProperties2ANDROID &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkAndroidHardwareBufferFormatProperties2ANDROID *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 const &,
+ VULKAN_HPP_NAMESPACE::ComponentMapping const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ format,
+ externalFormat,
+ formatFeatures,
+ samplerYcbcrConversionComponents,
+ suggestedYcbcrModel,
+ suggestedYcbcrRange,
+ suggestedXChromaOffset,
+ suggestedYChromaOffset );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( AndroidHardwareBufferFormatProperties2ANDROID const & ) const = default;
+# else
+ bool operator==( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) &&
+ ( externalFormat == rhs.externalFormat ) && ( formatFeatures == rhs.formatFeatures ) &&
+ ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) &&
+ ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) &&
+ ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) &&
+ ( suggestedYChromaOffset == rhs.suggestedYChromaOffset );
+# endif
+ }
+
+ bool operator!=( AndroidHardwareBufferFormatProperties2ANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAndroidHardwareBufferFormatProperties2ANDROID;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ uint64_t externalFormat = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 formatFeatures = {};
+ VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {};
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel =
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity;
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull;
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven;
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID ) ==
+ sizeof( VkAndroidHardwareBufferFormatProperties2ANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatProperties2ANDROID>::value,
+ "AndroidHardwareBufferFormatProperties2ANDROID is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eAndroidHardwareBufferFormatProperties2ANDROID>
+ {
+ using Type = AndroidHardwareBufferFormatProperties2ANDROID;
+ };
+#endif /*VK_USE_PLATFORM_ANDROID_KHR*/
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct AndroidHardwareBufferFormatPropertiesANDROID
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAndroidHardwareBufferFormatPropertiesANDROID;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAndroidHardwareBufferFormatPropertiesANDROID;
@@ -3620,8 +4563,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AndroidHardwareBufferFormatPropertiesANDROID &
- operator=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AndroidHardwareBufferFormatPropertiesANDROID &
+ operator=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AndroidHardwareBufferFormatPropertiesANDROID &
operator=( VkAndroidHardwareBufferFormatPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -3630,27 +4573,61 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkAndroidHardwareBufferFormatPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidHardwareBufferFormatPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID *>( this );
}
- operator VkAndroidHardwareBufferFormatPropertiesANDROID &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidHardwareBufferFormatPropertiesANDROID &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::ComponentMapping const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ format,
+ externalFormat,
+ formatFeatures,
+ samplerYcbcrConversionComponents,
+ suggestedYcbcrModel,
+ suggestedYcbcrRange,
+ suggestedXChromaOffset,
+ suggestedYChromaOffset );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AndroidHardwareBufferFormatPropertiesANDROID const & ) const = default;
# else
bool operator==( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) &&
( externalFormat == rhs.externalFormat ) && ( formatFeatures == rhs.formatFeatures ) &&
( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) &&
( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) &&
( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) &&
( suggestedYChromaOffset == rhs.suggestedYChromaOffset );
+# endif
}
bool operator!=( AndroidHardwareBufferFormatPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3672,11 +4649,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven;
VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven;
};
- static_assert( sizeof( AndroidHardwareBufferFormatPropertiesANDROID ) ==
- sizeof( VkAndroidHardwareBufferFormatPropertiesANDROID ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AndroidHardwareBufferFormatPropertiesANDROID>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID ) ==
+ sizeof( VkAndroidHardwareBufferFormatPropertiesANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferFormatPropertiesANDROID>::value,
+ "AndroidHardwareBufferFormatPropertiesANDROID is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAndroidHardwareBufferFormatPropertiesANDROID>
@@ -3688,7 +4669,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct AndroidHardwareBufferPropertiesANDROID
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAndroidHardwareBufferPropertiesANDROID;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAndroidHardwareBufferPropertiesANDROID;
@@ -3708,8 +4691,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AndroidHardwareBufferPropertiesANDROID &
- operator=( AndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AndroidHardwareBufferPropertiesANDROID &
+ operator=( AndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AndroidHardwareBufferPropertiesANDROID &
operator=( VkAndroidHardwareBufferPropertiesANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -3718,23 +4701,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkAndroidHardwareBufferPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidHardwareBufferPropertiesANDROID const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAndroidHardwareBufferPropertiesANDROID *>( this );
}
- operator VkAndroidHardwareBufferPropertiesANDROID &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidHardwareBufferPropertiesANDROID &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAndroidHardwareBufferPropertiesANDROID *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, allocationSize, memoryTypeBits );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AndroidHardwareBufferPropertiesANDROID const & ) const = default;
# else
bool operator==( AndroidHardwareBufferPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) &&
( memoryTypeBits == rhs.memoryTypeBits );
+# endif
}
bool operator!=( AndroidHardwareBufferPropertiesANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3749,10 +4751,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {};
uint32_t memoryTypeBits = {};
};
- static_assert( sizeof( AndroidHardwareBufferPropertiesANDROID ) == sizeof( VkAndroidHardwareBufferPropertiesANDROID ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AndroidHardwareBufferPropertiesANDROID>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID ) ==
+ sizeof( VkAndroidHardwareBufferPropertiesANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferPropertiesANDROID>::value,
+ "AndroidHardwareBufferPropertiesANDROID is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAndroidHardwareBufferPropertiesANDROID>
@@ -3764,7 +4771,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct AndroidHardwareBufferUsageANDROID
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAndroidHardwareBufferUsageANDROID;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAndroidHardwareBufferUsageANDROID;
@@ -3782,8 +4791,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AndroidHardwareBufferUsageANDROID &
- operator=( AndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AndroidHardwareBufferUsageANDROID &
+ operator=( AndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AndroidHardwareBufferUsageANDROID & operator=( VkAndroidHardwareBufferUsageANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3791,23 +4800,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkAndroidHardwareBufferUsageANDROID const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidHardwareBufferUsageANDROID const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID *>( this );
}
- operator VkAndroidHardwareBufferUsageANDROID &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidHardwareBufferUsageANDROID &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAndroidHardwareBufferUsageANDROID *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, androidHardwareBufferUsage );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AndroidHardwareBufferUsageANDROID const & ) const = default;
# else
bool operator==( AndroidHardwareBufferUsageANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( androidHardwareBufferUsage == rhs.androidHardwareBufferUsage );
+# endif
}
bool operator!=( AndroidHardwareBufferUsageANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3821,10 +4846,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint64_t androidHardwareBufferUsage = {};
};
- static_assert( sizeof( AndroidHardwareBufferUsageANDROID ) == sizeof( VkAndroidHardwareBufferUsageANDROID ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AndroidHardwareBufferUsageANDROID>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID ) ==
+ sizeof( VkAndroidHardwareBufferUsageANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AndroidHardwareBufferUsageANDROID>::value,
+ "AndroidHardwareBufferUsageANDROID is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAndroidHardwareBufferUsageANDROID>
@@ -3836,8 +4865,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct AndroidSurfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidSurfaceCreateInfoKHR;
+ using NativeType = VkAndroidSurfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAndroidSurfaceCreateInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AndroidSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ = {},
@@ -3854,8 +4885,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR &
- operator=( AndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AndroidSurfaceCreateInfoKHR & operator=( AndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AndroidSurfaceCreateInfoKHR & operator=( VkAndroidSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3864,42 +4894,62 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AndroidSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AndroidSurfaceCreateInfoKHR &
- setFlags( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AndroidSurfaceCreateInfoKHR & setWindow( struct ANativeWindow * window_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AndroidSurfaceCreateInfoKHR &
+ setWindow( struct ANativeWindow * window_ ) VULKAN_HPP_NOEXCEPT
{
window = window_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAndroidSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAndroidSurfaceCreateInfoKHR *>( this );
}
- operator VkAndroidSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAndroidSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAndroidSurfaceCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR const &,
+ struct ANativeWindow * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, window );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AndroidSurfaceCreateInfoKHR const & ) const = default;
# else
bool operator==( AndroidSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window );
+# endif
}
bool operator!=( AndroidSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -3914,10 +4964,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateFlagsKHR flags = {};
struct ANativeWindow * window = {};
};
- static_assert( sizeof( AndroidSurfaceCreateInfoKHR ) == sizeof( VkAndroidSurfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AndroidSurfaceCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR ) ==
+ sizeof( VkAndroidSurfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AndroidSurfaceCreateInfoKHR>::value,
+ "AndroidSurfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAndroidSurfaceCreateInfoKHR>
@@ -3928,8 +4982,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ApplicationInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eApplicationInfo;
+ using NativeType = VkApplicationInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eApplicationInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ApplicationInfo( const char * pApplicationName_ = {},
@@ -3951,7 +5007,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & operator=( ApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ApplicationInfo & operator=( ApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ApplicationInfo & operator=( VkApplicationInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -3960,60 +5016,102 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ApplicationInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ApplicationInfo & setPApplicationName( const char * pApplicationName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPApplicationName( const char * pApplicationName_ ) VULKAN_HPP_NOEXCEPT
{
pApplicationName = pApplicationName_;
return *this;
}
- ApplicationInfo & setApplicationVersion( uint32_t applicationVersion_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setApplicationVersion( uint32_t applicationVersion_ ) VULKAN_HPP_NOEXCEPT
{
applicationVersion = applicationVersion_;
return *this;
}
- ApplicationInfo & setPEngineName( const char * pEngineName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setPEngineName( const char * pEngineName_ ) VULKAN_HPP_NOEXCEPT
{
pEngineName = pEngineName_;
return *this;
}
- ApplicationInfo & setEngineVersion( uint32_t engineVersion_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setEngineVersion( uint32_t engineVersion_ ) VULKAN_HPP_NOEXCEPT
{
engineVersion = engineVersion_;
return *this;
}
- ApplicationInfo & setApiVersion( uint32_t apiVersion_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ApplicationInfo & setApiVersion( uint32_t apiVersion_ ) VULKAN_HPP_NOEXCEPT
{
apiVersion = apiVersion_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkApplicationInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkApplicationInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkApplicationInfo *>( this );
}
- operator VkApplicationInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkApplicationInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkApplicationInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const char * const &,
+ uint32_t const &,
+ const char * const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pApplicationName, applicationVersion, pEngineName, engineVersion, apiVersion );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ApplicationInfo const & ) const = default;
-#else
+ std::strong_ordering operator<=>( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( pApplicationName != rhs.pApplicationName )
+ if ( auto cmp = strcmp( pApplicationName, rhs.pApplicationName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = applicationVersion <=> rhs.applicationVersion; cmp != 0 )
+ return cmp;
+ if ( pEngineName != rhs.pEngineName )
+ if ( auto cmp = strcmp( pEngineName, rhs.pEngineName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = engineVersion <=> rhs.engineVersion; cmp != 0 )
+ return cmp;
+ if ( auto cmp = apiVersion <=> rhs.apiVersion; cmp != 0 )
+ return cmp;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( ApplicationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pApplicationName == rhs.pApplicationName ) &&
- ( applicationVersion == rhs.applicationVersion ) && ( pEngineName == rhs.pEngineName ) &&
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( ( pApplicationName == rhs.pApplicationName ) ||
+ ( strcmp( pApplicationName, rhs.pApplicationName ) == 0 ) ) &&
+ ( applicationVersion == rhs.applicationVersion ) &&
+ ( ( pEngineName == rhs.pEngineName ) || ( strcmp( pEngineName, rhs.pEngineName ) == 0 ) ) &&
( engineVersion == rhs.engineVersion ) && ( apiVersion == rhs.apiVersion );
}
@@ -4021,7 +5119,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eApplicationInfo;
@@ -4032,8 +5129,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t engineVersion = {};
uint32_t apiVersion = {};
};
- static_assert( sizeof( ApplicationInfo ) == sizeof( VkApplicationInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ApplicationInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ApplicationInfo ) == sizeof( VkApplicationInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ApplicationInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ApplicationInfo>::value,
+ "ApplicationInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eApplicationInfo>
@@ -4043,6 +5144,8 @@ namespace VULKAN_HPP_NAMESPACE
struct AttachmentDescription
{
+ using NativeType = VkAttachmentDescription;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AttachmentDescription(
VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ = {},
@@ -4073,8 +5176,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
- operator=( AttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentDescription & operator=( AttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentDescription & operator=( VkAttachmentDescription const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4083,82 +5185,114 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentDescription & setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AttachmentDescription & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- AttachmentDescription & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
{
samples = samples_;
return *this;
}
- AttachmentDescription & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT
{
loadOp = loadOp_;
return *this;
}
- AttachmentDescription & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT
{
storeOp = storeOp_;
return *this;
}
- AttachmentDescription &
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
setStencilLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ ) VULKAN_HPP_NOEXCEPT
{
stencilLoadOp = stencilLoadOp_;
return *this;
}
- AttachmentDescription &
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
setStencilStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ ) VULKAN_HPP_NOEXCEPT
{
stencilStoreOp = stencilStoreOp_;
return *this;
}
- AttachmentDescription & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT
{
initialLayout = initialLayout_;
return *this;
}
- AttachmentDescription & setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription &
+ setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT
{
finalLayout = finalLayout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentDescription const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentDescription const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentDescription *>( this );
}
- operator VkAttachmentDescription &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentDescription &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentDescription *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ flags, format, samples, loadOp, storeOp, stencilLoadOp, stencilStoreOp, initialLayout, finalLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentDescription const & ) const = default;
#else
bool operator==( AttachmentDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( flags == rhs.flags ) && ( format == rhs.format ) && ( samples == rhs.samples ) &&
( loadOp == rhs.loadOp ) && ( storeOp == rhs.storeOp ) && ( stencilLoadOp == rhs.stencilLoadOp ) &&
( stencilStoreOp == rhs.stencilStoreOp ) && ( initialLayout == rhs.initialLayout ) &&
( finalLayout == rhs.finalLayout );
+# endif
}
bool operator!=( AttachmentDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4178,14 +5312,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
VULKAN_HPP_NAMESPACE::ImageLayout finalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
};
- static_assert( sizeof( AttachmentDescription ) == sizeof( VkAttachmentDescription ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentDescription>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentDescription ) == sizeof( VkAttachmentDescription ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentDescription>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentDescription>::value,
+ "AttachmentDescription is not nothrow_move_constructible!" );
struct AttachmentDescription2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentDescription2;
+ using NativeType = VkAttachmentDescription2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentDescription2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AttachmentDescription2(
@@ -4217,8 +5356,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
- operator=( AttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentDescription2 & operator=( AttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentDescription2 & operator=( VkAttachmentDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4227,88 +5365,131 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AttachmentDescription2 & setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setFlags( VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- AttachmentDescription2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- AttachmentDescription2 & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
{
samples = samples_;
return *this;
}
- AttachmentDescription2 & setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT
{
loadOp = loadOp_;
return *this;
}
- AttachmentDescription2 & setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT
{
storeOp = storeOp_;
return *this;
}
- AttachmentDescription2 &
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
setStencilLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp stencilLoadOp_ ) VULKAN_HPP_NOEXCEPT
{
stencilLoadOp = stencilLoadOp_;
return *this;
}
- AttachmentDescription2 &
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
setStencilStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp stencilStoreOp_ ) VULKAN_HPP_NOEXCEPT
{
stencilStoreOp = stencilStoreOp_;
return *this;
}
- AttachmentDescription2 & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT
{
initialLayout = initialLayout_;
return *this;
}
- AttachmentDescription2 & setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescription2 &
+ setFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout finalLayout_ ) VULKAN_HPP_NOEXCEPT
{
finalLayout = finalLayout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentDescription2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentDescription2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentDescription2 *>( this );
}
- operator VkAttachmentDescription2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentDescription2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentDescription2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AttachmentDescriptionFlags const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ format,
+ samples,
+ loadOp,
+ storeOp,
+ stencilLoadOp,
+ stencilStoreOp,
+ initialLayout,
+ finalLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentDescription2 const & ) const = default;
#else
bool operator==( AttachmentDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( format == rhs.format ) &&
( samples == rhs.samples ) && ( loadOp == rhs.loadOp ) && ( storeOp == rhs.storeOp ) &&
( stencilLoadOp == rhs.stencilLoadOp ) && ( stencilStoreOp == rhs.stencilStoreOp ) &&
( initialLayout == rhs.initialLayout ) && ( finalLayout == rhs.finalLayout );
+# endif
}
bool operator!=( AttachmentDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4330,9 +5511,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
VULKAN_HPP_NAMESPACE::ImageLayout finalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
};
- static_assert( sizeof( AttachmentDescription2 ) == sizeof( VkAttachmentDescription2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentDescription2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentDescription2 ) ==
+ sizeof( VkAttachmentDescription2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentDescription2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentDescription2>::value,
+ "AttachmentDescription2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAttachmentDescription2>
@@ -4343,7 +5528,9 @@ namespace VULKAN_HPP_NAMESPACE
struct AttachmentDescriptionStencilLayout
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAttachmentDescriptionStencilLayout;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eAttachmentDescriptionStencilLayout;
@@ -4364,8 +5551,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout &
- operator=( AttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentDescriptionStencilLayout &
+ operator=( AttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentDescriptionStencilLayout &
operator=( VkAttachmentDescriptionStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -4375,20 +5562,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentDescriptionStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AttachmentDescriptionStencilLayout &
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout &
setStencilInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout_ ) VULKAN_HPP_NOEXCEPT
{
stencilInitialLayout = stencilInitialLayout_;
return *this;
}
- AttachmentDescriptionStencilLayout &
+ VULKAN_HPP_CONSTEXPR_14 AttachmentDescriptionStencilLayout &
setStencilFinalLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout_ ) VULKAN_HPP_NOEXCEPT
{
stencilFinalLayout = stencilFinalLayout_;
@@ -4396,23 +5583,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentDescriptionStencilLayout const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentDescriptionStencilLayout const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentDescriptionStencilLayout *>( this );
}
- operator VkAttachmentDescriptionStencilLayout &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentDescriptionStencilLayout &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentDescriptionStencilLayout *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stencilInitialLayout, stencilFinalLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentDescriptionStencilLayout const & ) const = default;
#else
bool operator==( AttachmentDescriptionStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilInitialLayout == rhs.stencilInitialLayout ) &&
( stencilFinalLayout == rhs.stencilFinalLayout );
+# endif
}
bool operator!=( AttachmentDescriptionStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4427,10 +5633,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageLayout stencilInitialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
VULKAN_HPP_NAMESPACE::ImageLayout stencilFinalLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
};
- static_assert( sizeof( AttachmentDescriptionStencilLayout ) == sizeof( VkAttachmentDescriptionStencilLayout ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentDescriptionStencilLayout>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout ) ==
+ sizeof( VkAttachmentDescriptionStencilLayout ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentDescriptionStencilLayout>::value,
+ "AttachmentDescriptionStencilLayout is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAttachmentDescriptionStencilLayout>
@@ -4441,6 +5651,8 @@ namespace VULKAN_HPP_NAMESPACE
struct AttachmentReference
{
+ using NativeType = VkAttachmentReference;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AttachmentReference(
uint32_t attachment_ = {},
@@ -4456,8 +5668,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentReference &
- operator=( AttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentReference & operator=( AttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentReference & operator=( VkAttachmentReference const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4466,35 +5677,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentReference & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReference & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT
{
attachment = attachment_;
return *this;
}
- AttachmentReference & setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReference &
+ setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT
{
layout = layout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentReference const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentReference const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentReference *>( this );
}
- operator VkAttachmentReference &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentReference &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentReference *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( attachment, layout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentReference const & ) const = default;
#else
bool operator==( AttachmentReference const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( attachment == rhs.attachment ) && ( layout == rhs.layout );
+# endif
}
bool operator!=( AttachmentReference const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4507,14 +5735,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t attachment = {};
VULKAN_HPP_NAMESPACE::ImageLayout layout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
};
- static_assert( sizeof( AttachmentReference ) == sizeof( VkAttachmentReference ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentReference>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentReference ) == sizeof( VkAttachmentReference ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentReference>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentReference>::value,
+ "AttachmentReference is not nothrow_move_constructible!" );
struct AttachmentReference2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReference2;
+ using NativeType = VkAttachmentReference2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReference2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -4533,8 +5766,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 &
- operator=( AttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentReference2 & operator=( AttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentReference2 & operator=( VkAttachmentReference2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4543,48 +5775,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentReference2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AttachmentReference2 & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 & setAttachment( uint32_t attachment_ ) VULKAN_HPP_NOEXCEPT
{
attachment = attachment_;
return *this;
}
- AttachmentReference2 & setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 &
+ setLayout( VULKAN_HPP_NAMESPACE::ImageLayout layout_ ) VULKAN_HPP_NOEXCEPT
{
layout = layout_;
return *this;
}
- AttachmentReference2 & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReference2 &
+ setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
{
aspectMask = aspectMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentReference2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentReference2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentReference2 *>( this );
}
- operator VkAttachmentReference2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentReference2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentReference2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ImageAspectFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, attachment, layout, aspectMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentReference2 const & ) const = default;
#else
bool operator==( AttachmentReference2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachment == rhs.attachment ) &&
( layout == rhs.layout ) && ( aspectMask == rhs.aspectMask );
+# endif
}
bool operator!=( AttachmentReference2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4600,9 +5854,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageLayout layout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {};
};
- static_assert( sizeof( AttachmentReference2 ) == sizeof( VkAttachmentReference2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentReference2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentReference2 ) == sizeof( VkAttachmentReference2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentReference2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentReference2>::value,
+ "AttachmentReference2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAttachmentReference2>
@@ -4613,7 +5870,9 @@ namespace VULKAN_HPP_NAMESPACE
struct AttachmentReferenceStencilLayout
{
- static const bool allowDuplicate = false;
+ using NativeType = VkAttachmentReferenceStencilLayout;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentReferenceStencilLayout;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -4631,8 +5890,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout &
- operator=( AttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentReferenceStencilLayout &
+ operator=( AttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentReferenceStencilLayout & operator=( VkAttachmentReferenceStencilLayout const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4641,36 +5900,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentReferenceStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- AttachmentReferenceStencilLayout &
- setStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentReferenceStencilLayout &
+ setStencilLayout( VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout_ ) VULKAN_HPP_NOEXCEPT
{
stencilLayout = stencilLayout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentReferenceStencilLayout const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentReferenceStencilLayout const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentReferenceStencilLayout *>( this );
}
- operator VkAttachmentReferenceStencilLayout &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentReferenceStencilLayout &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentReferenceStencilLayout *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stencilLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentReferenceStencilLayout const & ) const = default;
#else
bool operator==( AttachmentReferenceStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilLayout == rhs.stencilLayout );
+# endif
}
bool operator!=( AttachmentReferenceStencilLayout const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4684,10 +5959,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageLayout stencilLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
};
- static_assert( sizeof( AttachmentReferenceStencilLayout ) == sizeof( VkAttachmentReferenceStencilLayout ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentReferenceStencilLayout>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout ) ==
+ sizeof( VkAttachmentReferenceStencilLayout ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentReferenceStencilLayout>::value,
+ "AttachmentReferenceStencilLayout is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eAttachmentReferenceStencilLayout>
@@ -4696,8 +5975,165 @@ namespace VULKAN_HPP_NAMESPACE
};
using AttachmentReferenceStencilLayoutKHR = AttachmentReferenceStencilLayout;
+ struct AttachmentSampleCountInfoAMD
+ {
+ using NativeType = VkAttachmentSampleCountInfoAMD;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eAttachmentSampleCountInfoAMD;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ AttachmentSampleCountInfoAMD( uint32_t colorAttachmentCount_ = {},
+ const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples_ = {},
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ =
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1 ) VULKAN_HPP_NOEXCEPT
+ : colorAttachmentCount( colorAttachmentCount_ )
+ , pColorAttachmentSamples( pColorAttachmentSamples_ )
+ , depthStencilAttachmentSamples( depthStencilAttachmentSamples_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ AttachmentSampleCountInfoAMD( AttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ AttachmentSampleCountInfoAMD( VkAttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT
+ : AttachmentSampleCountInfoAMD( *reinterpret_cast<AttachmentSampleCountInfoAMD const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ AttachmentSampleCountInfoAMD( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::SampleCountFlagBits> const & colorAttachmentSamples_,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ =
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1 )
+ : colorAttachmentCount( static_cast<uint32_t>( colorAttachmentSamples_.size() ) )
+ , pColorAttachmentSamples( colorAttachmentSamples_.data() )
+ , depthStencilAttachmentSamples( depthStencilAttachmentSamples_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ AttachmentSampleCountInfoAMD & operator=( AttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ AttachmentSampleCountInfoAMD & operator=( VkAttachmentSampleCountInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD &
+ setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = colorAttachmentCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setPColorAttachmentSamples(
+ const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pColorAttachmentSamples = pColorAttachmentSamples_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ AttachmentSampleCountInfoAMD & setColorAttachmentSamples(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SampleCountFlagBits> const &
+ colorAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = static_cast<uint32_t>( colorAttachmentSamples_.size() );
+ pColorAttachmentSamples = colorAttachmentSamples_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 AttachmentSampleCountInfoAMD & setDepthStencilAttachmentSamples(
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples_ ) VULKAN_HPP_NOEXCEPT
+ {
+ depthStencilAttachmentSamples = depthStencilAttachmentSamples_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkAttachmentSampleCountInfoAMD const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkAttachmentSampleCountInfoAMD *>( this );
+ }
+
+ explicit operator VkAttachmentSampleCountInfoAMD &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkAttachmentSampleCountInfoAMD *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, colorAttachmentCount, pColorAttachmentSamples, depthStencilAttachmentSamples );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( AttachmentSampleCountInfoAMD const & ) const = default;
+#else
+ bool operator==( AttachmentSampleCountInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) &&
+ ( pColorAttachmentSamples == rhs.pColorAttachmentSamples ) &&
+ ( depthStencilAttachmentSamples == rhs.depthStencilAttachmentSamples );
+# endif
+ }
+
+ bool operator!=( AttachmentSampleCountInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eAttachmentSampleCountInfoAMD;
+ const void * pNext = {};
+ uint32_t colorAttachmentCount = {};
+ const VULKAN_HPP_NAMESPACE::SampleCountFlagBits * pColorAttachmentSamples = {};
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits depthStencilAttachmentSamples =
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD ) ==
+ sizeof( VkAttachmentSampleCountInfoAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentSampleCountInfoAMD>::value,
+ "AttachmentSampleCountInfoAMD is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eAttachmentSampleCountInfoAMD>
+ {
+ using Type = AttachmentSampleCountInfoAMD;
+ };
+ using AttachmentSampleCountInfoNV = AttachmentSampleCountInfoAMD;
+
struct Extent2D
{
+ using NativeType = VkExtent2D;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR Extent2D( uint32_t width_ = {}, uint32_t height_ = {} ) VULKAN_HPP_NOEXCEPT
: width( width_ )
@@ -4709,7 +6145,7 @@ namespace VULKAN_HPP_NAMESPACE
Extent2D( VkExtent2D const & rhs ) VULKAN_HPP_NOEXCEPT : Extent2D( *reinterpret_cast<Extent2D const *>( &rhs ) ) {}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Extent2D & operator=( Extent2D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Extent2D & operator=( Extent2D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Extent2D & operator=( VkExtent2D const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4718,35 +6154,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Extent2D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Extent2D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
{
width = width_;
return *this;
}
- Extent2D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Extent2D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
{
height = height_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExtent2D const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExtent2D const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExtent2D *>( this );
}
- operator VkExtent2D &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExtent2D &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExtent2D *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( width, height );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Extent2D const & ) const = default;
#else
bool operator==( Extent2D const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( width == rhs.width ) && ( height == rhs.height );
+# endif
}
bool operator!=( Extent2D const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4759,11 +6211,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t width = {};
uint32_t height = {};
};
- static_assert( sizeof( Extent2D ) == sizeof( VkExtent2D ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Extent2D>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Extent2D ) == sizeof( VkExtent2D ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Extent2D>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Extent2D>::value,
+ "Extent2D is not nothrow_move_constructible!" );
struct SampleLocationEXT
{
+ using NativeType = VkSampleLocationEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SampleLocationEXT( float x_ = {}, float y_ = {} ) VULKAN_HPP_NOEXCEPT
: x( x_ )
@@ -4777,8 +6235,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT &
- operator=( SampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SampleLocationEXT & operator=( SampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SampleLocationEXT & operator=( VkSampleLocationEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4787,35 +6244,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SampleLocationEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- SampleLocationEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSampleLocationEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSampleLocationEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSampleLocationEXT *>( this );
}
- operator VkSampleLocationEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSampleLocationEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSampleLocationEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SampleLocationEXT const & ) const = default;
#else
bool operator==( SampleLocationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y );
+# endif
}
bool operator!=( SampleLocationEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4828,14 +6301,19 @@ namespace VULKAN_HPP_NAMESPACE
float x = {};
float y = {};
};
- static_assert( sizeof( SampleLocationEXT ) == sizeof( VkSampleLocationEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SampleLocationEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SampleLocationEXT ) == sizeof( VkSampleLocationEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SampleLocationEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SampleLocationEXT>::value,
+ "SampleLocationEXT is not nothrow_move_constructible!" );
struct SampleLocationsInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSampleLocationsInfoEXT;
+ using NativeType = VkSampleLocationsInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSampleLocationsInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SampleLocationsInfoEXT(
@@ -4870,8 +6348,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT &
- operator=( SampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SampleLocationsInfoEXT & operator=( SampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SampleLocationsInfoEXT & operator=( VkSampleLocationsInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4880,33 +6357,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SampleLocationsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SampleLocationsInfoEXT & setSampleLocationsPerPixel(
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT & setSampleLocationsPerPixel(
VULKAN_HPP_NAMESPACE::SampleCountFlagBits sampleLocationsPerPixel_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationsPerPixel = sampleLocationsPerPixel_;
return *this;
}
- SampleLocationsInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT &
setSampleLocationGridSize( VULKAN_HPP_NAMESPACE::Extent2D const & sampleLocationGridSize_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationGridSize = sampleLocationGridSize_;
return *this;
}
- SampleLocationsInfoEXT & setSampleLocationsCount( uint32_t sampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT &
+ setSampleLocationsCount( uint32_t sampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationsCount = sampleLocationsCount_;
return *this;
}
- SampleLocationsInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 SampleLocationsInfoEXT &
setPSampleLocations( const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations_ ) VULKAN_HPP_NOEXCEPT
{
pSampleLocations = pSampleLocations_;
@@ -4925,25 +6403,47 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSampleLocationsInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSampleLocationsInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSampleLocationsInfoEXT *>( this );
}
- operator VkSampleLocationsInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSampleLocationsInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSampleLocationsInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SampleLocationEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, sampleLocationsPerPixel, sampleLocationGridSize, sampleLocationsCount, pSampleLocations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SampleLocationsInfoEXT const & ) const = default;
#else
bool operator==( SampleLocationsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( sampleLocationsPerPixel == rhs.sampleLocationsPerPixel ) &&
( sampleLocationGridSize == rhs.sampleLocationGridSize ) &&
( sampleLocationsCount == rhs.sampleLocationsCount ) && ( pSampleLocations == rhs.pSampleLocations );
+# endif
}
bool operator!=( SampleLocationsInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -4960,9 +6460,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t sampleLocationsCount = {};
const VULKAN_HPP_NAMESPACE::SampleLocationEXT * pSampleLocations = {};
};
- static_assert( sizeof( SampleLocationsInfoEXT ) == sizeof( VkSampleLocationsInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SampleLocationsInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT ) ==
+ sizeof( VkSampleLocationsInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT>::value,
+ "SampleLocationsInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSampleLocationsInfoEXT>
@@ -4972,6 +6476,8 @@ namespace VULKAN_HPP_NAMESPACE
struct AttachmentSampleLocationsEXT
{
+ using NativeType = VkAttachmentSampleLocationsEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR AttachmentSampleLocationsEXT(
uint32_t attachmentIndex_ = {},
@@ -4988,8 +6494,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT &
- operator=( AttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ AttachmentSampleLocationsEXT & operator=( AttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
AttachmentSampleLocationsEXT & operator=( VkAttachmentSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -4998,13 +6503,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- AttachmentSampleLocationsEXT & setAttachmentIndex( uint32_t attachmentIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT &
+ setAttachmentIndex( uint32_t attachmentIndex_ ) VULKAN_HPP_NOEXCEPT
{
attachmentIndex = attachmentIndex_;
return *this;
}
- AttachmentSampleLocationsEXT & setSampleLocationsInfo(
+ VULKAN_HPP_CONSTEXPR_14 AttachmentSampleLocationsEXT & setSampleLocationsInfo(
VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationsInfo = sampleLocationsInfo_;
@@ -5012,22 +6518,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkAttachmentSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkAttachmentSampleLocationsEXT *>( this );
}
- operator VkAttachmentSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkAttachmentSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkAttachmentSampleLocationsEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( attachmentIndex, sampleLocationsInfo );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( AttachmentSampleLocationsEXT const & ) const = default;
#else
bool operator==( AttachmentSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( attachmentIndex == rhs.attachmentIndex ) && ( sampleLocationsInfo == rhs.sampleLocationsInfo );
+# endif
}
bool operator!=( AttachmentSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5040,13 +6562,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t attachmentIndex = {};
VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {};
};
- static_assert( sizeof( AttachmentSampleLocationsEXT ) == sizeof( VkAttachmentSampleLocationsEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<AttachmentSampleLocationsEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT ) ==
+ sizeof( VkAttachmentSampleLocationsEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT>::value,
+ "AttachmentSampleLocationsEXT is not nothrow_move_constructible!" );
struct BaseInStructure
{
+ using NativeType = VkBaseInStructure;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
BaseInStructure( VULKAN_HPP_NAMESPACE::StructureType sType_ =
VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo ) VULKAN_HPP_NOEXCEPT : sType( sType_ )
@@ -5068,29 +6596,47 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BaseInStructure & setPNext( const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BaseInStructure &
+ setPNext( const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBaseInStructure const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBaseInStructure const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBaseInStructure *>( this );
}
- operator VkBaseInStructure &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBaseInStructure &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBaseInStructure *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const struct VULKAN_HPP_NAMESPACE::BaseInStructure * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BaseInStructure const & ) const = default;
#else
bool operator==( BaseInStructure const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext );
+# endif
}
bool operator!=( BaseInStructure const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5103,11 +6649,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::StructureType sType = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo;
const struct VULKAN_HPP_NAMESPACE::BaseInStructure * pNext = {};
};
- static_assert( sizeof( BaseInStructure ) == sizeof( VkBaseInStructure ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BaseInStructure>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BaseInStructure ) == sizeof( VkBaseInStructure ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BaseInStructure>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BaseInStructure>::value,
+ "BaseInStructure is not nothrow_move_constructible!" );
struct BaseOutStructure
{
+ using NativeType = VkBaseOutStructure;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
BaseOutStructure( VULKAN_HPP_NAMESPACE::StructureType sType_ =
VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo ) VULKAN_HPP_NOEXCEPT : sType( sType_ )
@@ -5129,29 +6681,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BaseOutStructure & setPNext( struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BaseOutStructure &
+ setPNext( struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBaseOutStructure const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBaseOutStructure const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBaseOutStructure *>( this );
}
- operator VkBaseOutStructure &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBaseOutStructure &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBaseOutStructure *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, struct VULKAN_HPP_NAMESPACE::BaseOutStructure * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BaseOutStructure const & ) const = default;
#else
bool operator==( BaseOutStructure const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext );
+# endif
}
bool operator!=( BaseOutStructure const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5164,13 +6733,18 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::StructureType sType = VULKAN_HPP_NAMESPACE::StructureType::eApplicationInfo;
struct VULKAN_HPP_NAMESPACE::BaseOutStructure * pNext = {};
};
- static_assert( sizeof( BaseOutStructure ) == sizeof( VkBaseOutStructure ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BaseOutStructure>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BaseOutStructure ) == sizeof( VkBaseOutStructure ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BaseOutStructure>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BaseOutStructure>::value,
+ "BaseOutStructure is not nothrow_move_constructible!" );
struct BindAccelerationStructureMemoryInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkBindAccelerationStructureMemoryInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eBindAccelerationStructureMemoryInfoNV;
@@ -5211,8 +6785,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV &
- operator=( BindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindAccelerationStructureMemoryInfoNV &
+ operator=( BindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindAccelerationStructureMemoryInfoNV &
operator=( VkBindAccelerationStructureMemoryInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -5222,39 +6796,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindAccelerationStructureMemoryInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindAccelerationStructureMemoryInfoNV & setAccelerationStructure(
+ VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV & setAccelerationStructure(
VULKAN_HPP_NAMESPACE::AccelerationStructureNV accelerationStructure_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructure = accelerationStructure_;
return *this;
}
- BindAccelerationStructureMemoryInfoNV & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- BindAccelerationStructureMemoryInfoNV &
- setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV &
+ setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
{
memoryOffset = memoryOffset_;
return *this;
}
- BindAccelerationStructureMemoryInfoNV & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV &
+ setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
deviceIndexCount = deviceIndexCount_;
return *this;
}
- BindAccelerationStructureMemoryInfoNV & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindAccelerationStructureMemoryInfoNV &
+ setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
{
pDeviceIndices = pDeviceIndices_;
return *this;
@@ -5271,25 +6848,47 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindAccelerationStructureMemoryInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindAccelerationStructureMemoryInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindAccelerationStructureMemoryInfoNV *>( this );
}
- operator VkBindAccelerationStructureMemoryInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindAccelerationStructureMemoryInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindAccelerationStructureMemoryInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureNV const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, accelerationStructure, memory, memoryOffset, deviceIndexCount, pDeviceIndices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindAccelerationStructureMemoryInfoNV const & ) const = default;
#else
bool operator==( BindAccelerationStructureMemoryInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( accelerationStructure == rhs.accelerationStructure ) && ( memory == rhs.memory ) &&
( memoryOffset == rhs.memoryOffset ) && ( deviceIndexCount == rhs.deviceIndexCount ) &&
( pDeviceIndices == rhs.pDeviceIndices );
+# endif
}
bool operator!=( BindAccelerationStructureMemoryInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5307,10 +6906,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t deviceIndexCount = {};
const uint32_t * pDeviceIndices = {};
};
- static_assert( sizeof( BindAccelerationStructureMemoryInfoNV ) == sizeof( VkBindAccelerationStructureMemoryInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindAccelerationStructureMemoryInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV ) ==
+ sizeof( VkBindAccelerationStructureMemoryInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindAccelerationStructureMemoryInfoNV>::value,
+ "BindAccelerationStructureMemoryInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindAccelerationStructureMemoryInfoNV>
@@ -5320,8 +6923,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BindBufferMemoryDeviceGroupInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryDeviceGroupInfo;
+ using NativeType = VkBindBufferMemoryDeviceGroupInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryDeviceGroupInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindBufferMemoryDeviceGroupInfo( uint32_t deviceIndexCount_ = {},
@@ -5345,8 +6950,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo &
- operator=( BindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindBufferMemoryDeviceGroupInfo &
+ operator=( BindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindBufferMemoryDeviceGroupInfo & operator=( VkBindBufferMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5355,19 +6960,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindBufferMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindBufferMemoryDeviceGroupInfo & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo &
+ setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
deviceIndexCount = deviceIndexCount_;
return *this;
}
- BindBufferMemoryDeviceGroupInfo & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryDeviceGroupInfo &
+ setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
{
pDeviceIndices = pDeviceIndices_;
return *this;
@@ -5384,23 +6991,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindBufferMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindBufferMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo *>( this );
}
- operator VkBindBufferMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindBufferMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceIndexCount, pDeviceIndices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindBufferMemoryDeviceGroupInfo const & ) const = default;
#else
bool operator==( BindBufferMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndexCount == rhs.deviceIndexCount ) &&
( pDeviceIndices == rhs.pDeviceIndices );
+# endif
}
bool operator!=( BindBufferMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5415,10 +7041,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t deviceIndexCount = {};
const uint32_t * pDeviceIndices = {};
};
- static_assert( sizeof( BindBufferMemoryDeviceGroupInfo ) == sizeof( VkBindBufferMemoryDeviceGroupInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindBufferMemoryDeviceGroupInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo ) ==
+ sizeof( VkBindBufferMemoryDeviceGroupInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindBufferMemoryDeviceGroupInfo>::value,
+ "BindBufferMemoryDeviceGroupInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindBufferMemoryDeviceGroupInfo>
@@ -5429,8 +7059,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BindBufferMemoryInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryInfo;
+ using NativeType = VkBindBufferMemoryInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindBufferMemoryInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindBufferMemoryInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {},
@@ -5448,8 +7080,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo &
- operator=( BindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindBufferMemoryInfo & operator=( BindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindBufferMemoryInfo & operator=( VkBindBufferMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5458,48 +7089,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindBufferMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindBufferMemoryInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- BindBufferMemoryInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- BindBufferMemoryInfo & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindBufferMemoryInfo &
+ setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
{
memoryOffset = memoryOffset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindBufferMemoryInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindBufferMemoryInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindBufferMemoryInfo *>( this );
}
- operator VkBindBufferMemoryInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindBufferMemoryInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindBufferMemoryInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, buffer, memory, memoryOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindBufferMemoryInfo const & ) const = default;
#else
bool operator==( BindBufferMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ) && ( memory == rhs.memory ) &&
( memoryOffset == rhs.memoryOffset );
+# endif
}
bool operator!=( BindBufferMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5515,9 +7168,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceMemory memory = {};
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {};
};
- static_assert( sizeof( BindBufferMemoryInfo ) == sizeof( VkBindBufferMemoryInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindBufferMemoryInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo ) == sizeof( VkBindBufferMemoryInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindBufferMemoryInfo>::value,
+ "BindBufferMemoryInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindBufferMemoryInfo>
@@ -5528,6 +7184,8 @@ namespace VULKAN_HPP_NAMESPACE
struct Offset2D
{
+ using NativeType = VkOffset2D;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR Offset2D( int32_t x_ = {}, int32_t y_ = {} ) VULKAN_HPP_NOEXCEPT
: x( x_ )
@@ -5539,7 +7197,7 @@ namespace VULKAN_HPP_NAMESPACE
Offset2D( VkOffset2D const & rhs ) VULKAN_HPP_NOEXCEPT : Offset2D( *reinterpret_cast<Offset2D const *>( &rhs ) ) {}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Offset2D & operator=( Offset2D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Offset2D & operator=( Offset2D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Offset2D & operator=( VkOffset2D const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5548,35 +7206,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Offset2D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Offset2D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- Offset2D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Offset2D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkOffset2D const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkOffset2D const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkOffset2D *>( this );
}
- operator VkOffset2D &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkOffset2D &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkOffset2D *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<int32_t const &, int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Offset2D const & ) const = default;
#else
bool operator==( Offset2D const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y );
+# endif
}
bool operator!=( Offset2D const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5589,11 +7263,17 @@ namespace VULKAN_HPP_NAMESPACE
int32_t x = {};
int32_t y = {};
};
- static_assert( sizeof( Offset2D ) == sizeof( VkOffset2D ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Offset2D>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Offset2D ) == sizeof( VkOffset2D ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Offset2D>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Offset2D>::value,
+ "Offset2D is not nothrow_move_constructible!" );
struct Rect2D
{
+ using NativeType = VkRect2D;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR Rect2D( VULKAN_HPP_NAMESPACE::Offset2D offset_ = {},
VULKAN_HPP_NAMESPACE::Extent2D extent_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -5606,7 +7286,7 @@ namespace VULKAN_HPP_NAMESPACE
Rect2D( VkRect2D const & rhs ) VULKAN_HPP_NOEXCEPT : Rect2D( *reinterpret_cast<Rect2D const *>( &rhs ) ) {}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Rect2D & operator=( Rect2D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Rect2D & operator=( Rect2D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Rect2D & operator=( VkRect2D const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5615,35 +7295,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Rect2D & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Rect2D & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- Rect2D & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Rect2D & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
extent = extent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRect2D const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRect2D const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRect2D *>( this );
}
- operator VkRect2D &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRect2D &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRect2D *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Offset2D const &, VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( offset, extent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Rect2D const & ) const = default;
#else
bool operator==( Rect2D const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( offset == rhs.offset ) && ( extent == rhs.extent );
+# endif
}
bool operator!=( Rect2D const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5656,13 +7352,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset2D offset = {};
VULKAN_HPP_NAMESPACE::Extent2D extent = {};
};
- static_assert( sizeof( Rect2D ) == sizeof( VkRect2D ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Rect2D>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Rect2D ) == sizeof( VkRect2D ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Rect2D>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Rect2D>::value,
+ "Rect2D is not nothrow_move_constructible!" );
struct BindImageMemoryDeviceGroupInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryDeviceGroupInfo;
+ using NativeType = VkBindImageMemoryDeviceGroupInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryDeviceGroupInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindImageMemoryDeviceGroupInfo(
@@ -5696,8 +7398,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo &
- operator=( BindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindImageMemoryDeviceGroupInfo &
+ operator=( BindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindImageMemoryDeviceGroupInfo & operator=( VkBindImageMemoryDeviceGroupInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5706,19 +7408,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindImageMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindImageMemoryDeviceGroupInfo & setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo &
+ setDeviceIndexCount( uint32_t deviceIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
deviceIndexCount = deviceIndexCount_;
return *this;
}
- BindImageMemoryDeviceGroupInfo & setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo &
+ setPDeviceIndices( const uint32_t * pDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
{
pDeviceIndices = pDeviceIndices_;
return *this;
@@ -5734,14 +7438,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- BindImageMemoryDeviceGroupInfo &
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo &
setSplitInstanceBindRegionCount( uint32_t splitInstanceBindRegionCount_ ) VULKAN_HPP_NOEXCEPT
{
splitInstanceBindRegionCount = splitInstanceBindRegionCount_;
return *this;
}
- BindImageMemoryDeviceGroupInfo & setPSplitInstanceBindRegions(
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryDeviceGroupInfo & setPSplitInstanceBindRegions(
const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions_ ) VULKAN_HPP_NOEXCEPT
{
pSplitInstanceBindRegions = pSplitInstanceBindRegions_;
@@ -5760,25 +7464,47 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindImageMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImageMemoryDeviceGroupInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo *>( this );
}
- operator VkBindImageMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImageMemoryDeviceGroupInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindImageMemoryDeviceGroupInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Rect2D * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, deviceIndexCount, pDeviceIndices, splitInstanceBindRegionCount, pSplitInstanceBindRegions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindImageMemoryDeviceGroupInfo const & ) const = default;
#else
bool operator==( BindImageMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceIndexCount == rhs.deviceIndexCount ) &&
( pDeviceIndices == rhs.pDeviceIndices ) &&
( splitInstanceBindRegionCount == rhs.splitInstanceBindRegionCount ) &&
( pSplitInstanceBindRegions == rhs.pSplitInstanceBindRegions );
+# endif
}
bool operator!=( BindImageMemoryDeviceGroupInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5795,10 +7521,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t splitInstanceBindRegionCount = {};
const VULKAN_HPP_NAMESPACE::Rect2D * pSplitInstanceBindRegions = {};
};
- static_assert( sizeof( BindImageMemoryDeviceGroupInfo ) == sizeof( VkBindImageMemoryDeviceGroupInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindImageMemoryDeviceGroupInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo ) ==
+ sizeof( VkBindImageMemoryDeviceGroupInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindImageMemoryDeviceGroupInfo>::value,
+ "BindImageMemoryDeviceGroupInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindImageMemoryDeviceGroupInfo>
@@ -5809,8 +7539,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BindImageMemoryInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryInfo;
+ using NativeType = VkBindImageMemoryInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemoryInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindImageMemoryInfo( VULKAN_HPP_NAMESPACE::Image image_ = {},
@@ -5828,8 +7560,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo &
- operator=( BindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindImageMemoryInfo & operator=( BindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindImageMemoryInfo & operator=( VkBindImageMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5838,48 +7569,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindImageMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindImageMemoryInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- BindImageMemoryInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- BindImageMemoryInfo & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemoryInfo &
+ setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
{
memoryOffset = memoryOffset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindImageMemoryInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImageMemoryInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindImageMemoryInfo *>( this );
}
- operator VkBindImageMemoryInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImageMemoryInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindImageMemoryInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, image, memory, memoryOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindImageMemoryInfo const & ) const = default;
#else
bool operator==( BindImageMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( memory == rhs.memory ) &&
( memoryOffset == rhs.memoryOffset );
+# endif
}
bool operator!=( BindImageMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5895,9 +7648,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceMemory memory = {};
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {};
};
- static_assert( sizeof( BindImageMemoryInfo ) == sizeof( VkBindImageMemoryInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindImageMemoryInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImageMemoryInfo ) == sizeof( VkBindImageMemoryInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindImageMemoryInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindImageMemoryInfo>::value,
+ "BindImageMemoryInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindImageMemoryInfo>
@@ -5908,8 +7664,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BindImageMemorySwapchainInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemorySwapchainInfoKHR;
+ using NativeType = VkBindImageMemorySwapchainInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImageMemorySwapchainInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindImageMemorySwapchainInfoKHR( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ = {},
@@ -5926,8 +7684,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR &
- operator=( BindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindImageMemorySwapchainInfoKHR &
+ operator=( BindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindImageMemorySwapchainInfoKHR & operator=( VkBindImageMemorySwapchainInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -5936,42 +7694,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindImageMemorySwapchainInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindImageMemorySwapchainInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR &
+ setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT
{
swapchain = swapchain_;
return *this;
}
- BindImageMemorySwapchainInfoKHR & setImageIndex( uint32_t imageIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImageMemorySwapchainInfoKHR & setImageIndex( uint32_t imageIndex_ ) VULKAN_HPP_NOEXCEPT
{
imageIndex = imageIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindImageMemorySwapchainInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImageMemorySwapchainInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR *>( this );
}
- operator VkBindImageMemorySwapchainInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImageMemorySwapchainInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindImageMemorySwapchainInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SwapchainKHR const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchain, imageIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindImageMemorySwapchainInfoKHR const & ) const = default;
#else
bool operator==( BindImageMemorySwapchainInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain ) &&
( imageIndex == rhs.imageIndex );
+# endif
}
bool operator!=( BindImageMemorySwapchainInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -5986,10 +7764,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {};
uint32_t imageIndex = {};
};
- static_assert( sizeof( BindImageMemorySwapchainInfoKHR ) == sizeof( VkBindImageMemorySwapchainInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindImageMemorySwapchainInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR ) ==
+ sizeof( VkBindImageMemorySwapchainInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindImageMemorySwapchainInfoKHR>::value,
+ "BindImageMemorySwapchainInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindImageMemorySwapchainInfoKHR>
@@ -5999,8 +7781,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BindImagePlaneMemoryInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImagePlaneMemoryInfo;
+ using NativeType = VkBindImagePlaneMemoryInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindImagePlaneMemoryInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -6016,8 +7800,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo &
- operator=( BindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindImagePlaneMemoryInfo & operator=( BindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindImagePlaneMemoryInfo & operator=( VkBindImagePlaneMemoryInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6026,36 +7809,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindImagePlaneMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindImagePlaneMemoryInfo &
- setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindImagePlaneMemoryInfo &
+ setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT
{
planeAspect = planeAspect_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindImagePlaneMemoryInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImagePlaneMemoryInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindImagePlaneMemoryInfo *>( this );
}
- operator VkBindImagePlaneMemoryInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindImagePlaneMemoryInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindImagePlaneMemoryInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageAspectFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, planeAspect );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindImagePlaneMemoryInfo const & ) const = default;
#else
bool operator==( BindImagePlaneMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( planeAspect == rhs.planeAspect );
+# endif
}
bool operator!=( BindImagePlaneMemoryInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6069,9 +7870,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor;
};
- static_assert( sizeof( BindImagePlaneMemoryInfo ) == sizeof( VkBindImagePlaneMemoryInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindImagePlaneMemoryInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo ) ==
+ sizeof( VkBindImagePlaneMemoryInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindImagePlaneMemoryInfo>::value,
+ "BindImagePlaneMemoryInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindImagePlaneMemoryInfo>
@@ -6082,6 +7887,8 @@ namespace VULKAN_HPP_NAMESPACE
struct BindIndexBufferIndirectCommandNV
{
+ using NativeType = VkBindIndexBufferIndirectCommandNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindIndexBufferIndirectCommandNV(
VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {},
@@ -6100,8 +7907,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV &
- operator=( BindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindIndexBufferIndirectCommandNV &
+ operator=( BindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindIndexBufferIndirectCommandNV & operator=( VkBindIndexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6110,42 +7917,59 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindIndexBufferIndirectCommandNV &
- setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV &
+ setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT
{
bufferAddress = bufferAddress_;
return *this;
}
- BindIndexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
- BindIndexBufferIndirectCommandNV & setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindIndexBufferIndirectCommandNV &
+ setIndexType( VULKAN_HPP_NAMESPACE::IndexType indexType_ ) VULKAN_HPP_NOEXCEPT
{
indexType = indexType_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindIndexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindIndexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindIndexBufferIndirectCommandNV *>( this );
}
- operator VkBindIndexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindIndexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindIndexBufferIndirectCommandNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceAddress const &, uint32_t const &, VULKAN_HPP_NAMESPACE::IndexType const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( bufferAddress, size, indexType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindIndexBufferIndirectCommandNV const & ) const = default;
#else
bool operator==( BindIndexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( indexType == rhs.indexType );
+# endif
}
bool operator!=( BindIndexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6159,13 +7983,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t size = {};
VULKAN_HPP_NAMESPACE::IndexType indexType = VULKAN_HPP_NAMESPACE::IndexType::eUint16;
};
- static_assert( sizeof( BindIndexBufferIndirectCommandNV ) == sizeof( VkBindIndexBufferIndirectCommandNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindIndexBufferIndirectCommandNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV ) ==
+ sizeof( VkBindIndexBufferIndirectCommandNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindIndexBufferIndirectCommandNV>::value,
+ "BindIndexBufferIndirectCommandNV is not nothrow_move_constructible!" );
struct BindShaderGroupIndirectCommandNV
{
+ using NativeType = VkBindShaderGroupIndirectCommandNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindShaderGroupIndirectCommandNV( uint32_t groupIndex_ = {} ) VULKAN_HPP_NOEXCEPT
: groupIndex( groupIndex_ )
@@ -6179,8 +8009,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindShaderGroupIndirectCommandNV &
- operator=( BindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindShaderGroupIndirectCommandNV &
+ operator=( BindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindShaderGroupIndirectCommandNV & operator=( VkBindShaderGroupIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6189,29 +8019,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindShaderGroupIndirectCommandNV & setGroupIndex( uint32_t groupIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindShaderGroupIndirectCommandNV & setGroupIndex( uint32_t groupIndex_ ) VULKAN_HPP_NOEXCEPT
{
groupIndex = groupIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindShaderGroupIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindShaderGroupIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindShaderGroupIndirectCommandNV *>( this );
}
- operator VkBindShaderGroupIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindShaderGroupIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindShaderGroupIndirectCommandNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( groupIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindShaderGroupIndirectCommandNV const & ) const = default;
#else
bool operator==( BindShaderGroupIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( groupIndex == rhs.groupIndex );
+# endif
}
bool operator!=( BindShaderGroupIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6223,13 +8069,19 @@ namespace VULKAN_HPP_NAMESPACE
public:
uint32_t groupIndex = {};
};
- static_assert( sizeof( BindShaderGroupIndirectCommandNV ) == sizeof( VkBindShaderGroupIndirectCommandNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindShaderGroupIndirectCommandNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV ) ==
+ sizeof( VkBindShaderGroupIndirectCommandNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindShaderGroupIndirectCommandNV>::value,
+ "BindShaderGroupIndirectCommandNV is not nothrow_move_constructible!" );
struct SparseMemoryBind
{
+ using NativeType = VkSparseMemoryBind;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SparseMemoryBind( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize size_ = {},
@@ -6250,7 +8102,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & operator=( SparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseMemoryBind & operator=( SparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseMemoryBind & operator=( VkSparseMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6259,54 +8111,78 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SparseMemoryBind & setResourceOffset( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind &
+ setResourceOffset( VULKAN_HPP_NAMESPACE::DeviceSize resourceOffset_ ) VULKAN_HPP_NOEXCEPT
{
resourceOffset = resourceOffset_;
return *this;
}
- SparseMemoryBind & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
- SparseMemoryBind & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- SparseMemoryBind & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind &
+ setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
{
memoryOffset = memoryOffset_;
return *this;
}
- SparseMemoryBind & setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseMemoryBind &
+ setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSparseMemoryBind const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseMemoryBind const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseMemoryBind *>( this );
}
- operator VkSparseMemoryBind &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseMemoryBind &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseMemoryBind *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( resourceOffset, size, memory, memoryOffset, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseMemoryBind const & ) const = default;
#else
bool operator==( SparseMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( resourceOffset == rhs.resourceOffset ) && ( size == rhs.size ) && ( memory == rhs.memory ) &&
( memoryOffset == rhs.memoryOffset ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( SparseMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6322,12 +8198,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {};
VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags = {};
};
- static_assert( sizeof( SparseMemoryBind ) == sizeof( VkSparseMemoryBind ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseMemoryBind>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseMemoryBind ) == sizeof( VkSparseMemoryBind ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseMemoryBind>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseMemoryBind>::value,
+ "SparseMemoryBind is not nothrow_move_constructible!" );
struct SparseBufferMemoryBindInfo
{
+ using NativeType = VkSparseBufferMemoryBindInfo;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SparseBufferMemoryBindInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {},
@@ -6354,8 +8235,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo &
- operator=( SparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseBufferMemoryBindInfo & operator=( SparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseBufferMemoryBindInfo & operator=( VkSparseBufferMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6364,19 +8244,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SparseBufferMemoryBindInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- SparseBufferMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT
{
bindCount = bindCount_;
return *this;
}
- SparseBufferMemoryBindInfo & setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseBufferMemoryBindInfo &
+ setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT
{
pBinds = pBinds_;
return *this;
@@ -6394,22 +8276,40 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSparseBufferMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseBufferMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseBufferMemoryBindInfo *>( this );
}
- operator VkSparseBufferMemoryBindInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseBufferMemoryBindInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseBufferMemoryBindInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Buffer const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SparseMemoryBind * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( buffer, bindCount, pBinds );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseBufferMemoryBindInfo const & ) const = default;
#else
bool operator==( SparseBufferMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( buffer == rhs.buffer ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds );
+# endif
}
bool operator!=( SparseBufferMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6423,13 +8323,18 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t bindCount = {};
const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds = {};
};
- static_assert( sizeof( SparseBufferMemoryBindInfo ) == sizeof( VkSparseBufferMemoryBindInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseBufferMemoryBindInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo ) ==
+ sizeof( VkSparseBufferMemoryBindInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo>::value,
+ "SparseBufferMemoryBindInfo is not nothrow_move_constructible!" );
struct SparseImageOpaqueMemoryBindInfo
{
+ using NativeType = VkSparseImageOpaqueMemoryBindInfo;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SparseImageOpaqueMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_ = {},
@@ -6456,8 +8361,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo &
- operator=( SparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageOpaqueMemoryBindInfo &
+ operator=( SparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageOpaqueMemoryBindInfo & operator=( VkSparseImageOpaqueMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6466,20 +8371,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SparseImageOpaqueMemoryBindInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo &
+ setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- SparseImageOpaqueMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT
{
bindCount = bindCount_;
return *this;
}
- SparseImageOpaqueMemoryBindInfo &
- setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageOpaqueMemoryBindInfo &
+ setPBinds( const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT
{
pBinds = pBinds_;
return *this;
@@ -6497,22 +8403,40 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSparseImageOpaqueMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageOpaqueMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageOpaqueMemoryBindInfo *>( this );
}
- operator VkSparseImageOpaqueMemoryBindInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageOpaqueMemoryBindInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageOpaqueMemoryBindInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Image const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SparseMemoryBind * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( image, bindCount, pBinds );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageOpaqueMemoryBindInfo const & ) const = default;
#else
bool operator==( SparseImageOpaqueMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( image == rhs.image ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds );
+# endif
}
bool operator!=( SparseImageOpaqueMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6526,13 +8450,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t bindCount = {};
const VULKAN_HPP_NAMESPACE::SparseMemoryBind * pBinds = {};
};
- static_assert( sizeof( SparseImageOpaqueMemoryBindInfo ) == sizeof( VkSparseImageOpaqueMemoryBindInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageOpaqueMemoryBindInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo ) ==
+ sizeof( VkSparseImageOpaqueMemoryBindInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo>::value,
+ "SparseImageOpaqueMemoryBindInfo is not nothrow_move_constructible!" );
struct ImageSubresource
{
+ using NativeType = VkImageSubresource;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageSubresource( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {},
uint32_t mipLevel_ = {},
@@ -6549,7 +8479,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageSubresource & operator=( ImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageSubresource & operator=( ImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageSubresource & operator=( VkImageSubresource const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6558,41 +8488,58 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageSubresource & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresource &
+ setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
{
aspectMask = aspectMask_;
return *this;
}
- ImageSubresource & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT
{
mipLevel = mipLevel_;
return *this;
}
- ImageSubresource & setArrayLayer( uint32_t arrayLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresource & setArrayLayer( uint32_t arrayLayer_ ) VULKAN_HPP_NOEXCEPT
{
arrayLayer = arrayLayer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageSubresource const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSubresource const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageSubresource *>( this );
}
- operator VkImageSubresource &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSubresource &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageSubresource *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageAspectFlags const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( aspectMask, mipLevel, arrayLayer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageSubresource const & ) const = default;
#else
bool operator==( ImageSubresource const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( aspectMask == rhs.aspectMask ) && ( mipLevel == rhs.mipLevel ) && ( arrayLayer == rhs.arrayLayer );
+# endif
}
bool operator!=( ImageSubresource const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6606,12 +8553,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t mipLevel = {};
uint32_t arrayLayer = {};
};
- static_assert( sizeof( ImageSubresource ) == sizeof( VkImageSubresource ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageSubresource>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresource ) == sizeof( VkImageSubresource ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageSubresource>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageSubresource>::value,
+ "ImageSubresource is not nothrow_move_constructible!" );
struct Offset3D
{
+ using NativeType = VkOffset3D;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR Offset3D( int32_t x_ = {}, int32_t y_ = {}, int32_t z_ = {} ) VULKAN_HPP_NOEXCEPT
: x( x_ )
@@ -6626,7 +8578,7 @@ namespace VULKAN_HPP_NAMESPACE
explicit Offset3D( Offset2D const & offset2D, int32_t z_ = {} ) : x( offset2D.x ), y( offset2D.y ), z( z_ ) {}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Offset3D & operator=( Offset3D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Offset3D & operator=( Offset3D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Offset3D & operator=( VkOffset3D const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6635,41 +8587,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Offset3D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Offset3D & setX( int32_t x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- Offset3D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Offset3D & setY( int32_t y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
- Offset3D & setZ( int32_t z_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Offset3D & setZ( int32_t z_ ) VULKAN_HPP_NOEXCEPT
{
z = z_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkOffset3D const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkOffset3D const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkOffset3D *>( this );
}
- operator VkOffset3D &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkOffset3D &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkOffset3D *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<int32_t const &, int32_t const &, int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y, z );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Offset3D const & ) const = default;
#else
bool operator==( Offset3D const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z );
+# endif
}
bool operator!=( Offset3D const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6683,11 +8651,17 @@ namespace VULKAN_HPP_NAMESPACE
int32_t y = {};
int32_t z = {};
};
- static_assert( sizeof( Offset3D ) == sizeof( VkOffset3D ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Offset3D>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Offset3D ) == sizeof( VkOffset3D ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Offset3D>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Offset3D>::value,
+ "Offset3D is not nothrow_move_constructible!" );
struct Extent3D
{
+ using NativeType = VkExtent3D;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
Extent3D( uint32_t width_ = {}, uint32_t height_ = {}, uint32_t depth_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -6705,7 +8679,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Extent3D & operator=( Extent3D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Extent3D & operator=( Extent3D const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Extent3D & operator=( VkExtent3D const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6714,41 +8688,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Extent3D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Extent3D & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
{
width = width_;
return *this;
}
- Extent3D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Extent3D & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
{
height = height_;
return *this;
}
- Extent3D & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Extent3D & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT
{
depth = depth_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExtent3D const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExtent3D const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExtent3D *>( this );
}
- operator VkExtent3D &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExtent3D &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExtent3D *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( width, height, depth );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Extent3D const & ) const = default;
#else
bool operator==( Extent3D const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( width == rhs.width ) && ( height == rhs.height ) && ( depth == rhs.depth );
+# endif
}
bool operator!=( Extent3D const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6762,11 +8752,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t height = {};
uint32_t depth = {};
};
- static_assert( sizeof( Extent3D ) == sizeof( VkExtent3D ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Extent3D>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Extent3D ) == sizeof( VkExtent3D ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Extent3D>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Extent3D>::value,
+ "Extent3D is not nothrow_move_constructible!" );
struct SparseImageMemoryBind
{
+ using NativeType = VkSparseImageMemoryBind;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SparseImageMemoryBind( VULKAN_HPP_NAMESPACE::ImageSubresource subresource_ = {},
@@ -6790,8 +8786,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
- operator=( SparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageMemoryBind & operator=( SparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageMemoryBind & operator=( VkSparseImageMemoryBind const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6800,61 +8795,87 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SparseImageMemoryBind &
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
setSubresource( VULKAN_HPP_NAMESPACE::ImageSubresource const & subresource_ ) VULKAN_HPP_NOEXCEPT
{
subresource = subresource_;
return *this;
}
- SparseImageMemoryBind & setOffset( VULKAN_HPP_NAMESPACE::Offset3D const & offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
+ setOffset( VULKAN_HPP_NAMESPACE::Offset3D const & offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- SparseImageMemoryBind & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
+ setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
extent = extent_;
return *this;
}
- SparseImageMemoryBind & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- SparseImageMemoryBind & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
+ setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
{
memoryOffset = memoryOffset_;
return *this;
}
- SparseImageMemoryBind & setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBind &
+ setFlags( VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSparseImageMemoryBind const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryBind const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageMemoryBind *>( this );
}
- operator VkSparseImageMemoryBind &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryBind &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageMemoryBind *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageSubresource const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( subresource, offset, extent, memory, memoryOffset, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageMemoryBind const & ) const = default;
#else
bool operator==( SparseImageMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( subresource == rhs.subresource ) && ( offset == rhs.offset ) && ( extent == rhs.extent ) &&
( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( SparseImageMemoryBind const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6871,12 +8892,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {};
VULKAN_HPP_NAMESPACE::SparseMemoryBindFlags flags = {};
};
- static_assert( sizeof( SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageMemoryBind>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryBind ) == sizeof( VkSparseImageMemoryBind ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageMemoryBind>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageMemoryBind>::value,
+ "SparseImageMemoryBind is not nothrow_move_constructible!" );
struct SparseImageMemoryBindInfo
{
+ using NativeType = VkSparseImageMemoryBindInfo;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SparseImageMemoryBindInfo( VULKAN_HPP_NAMESPACE::Image image_ = {},
@@ -6903,8 +8929,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo &
- operator=( SparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageMemoryBindInfo & operator=( SparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageMemoryBindInfo & operator=( VkSparseImageMemoryBindInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -6913,20 +8938,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SparseImageMemoryBindInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo &
+ setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- SparseImageMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo & setBindCount( uint32_t bindCount_ ) VULKAN_HPP_NOEXCEPT
{
bindCount = bindCount_;
return *this;
}
- SparseImageMemoryBindInfo &
- setPBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryBindInfo &
+ setPBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds_ ) VULKAN_HPP_NOEXCEPT
{
pBinds = pBinds_;
return *this;
@@ -6944,22 +8970,40 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSparseImageMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryBindInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageMemoryBindInfo *>( this );
}
- operator VkSparseImageMemoryBindInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryBindInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageMemoryBindInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Image const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( image, bindCount, pBinds );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageMemoryBindInfo const & ) const = default;
#else
bool operator==( SparseImageMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( image == rhs.image ) && ( bindCount == rhs.bindCount ) && ( pBinds == rhs.pBinds );
+# endif
}
bool operator!=( SparseImageMemoryBindInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -6973,15 +9017,20 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t bindCount = {};
const VULKAN_HPP_NAMESPACE::SparseImageMemoryBind * pBinds = {};
};
- static_assert( sizeof( SparseImageMemoryBindInfo ) == sizeof( VkSparseImageMemoryBindInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageMemoryBindInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo ) ==
+ sizeof( VkSparseImageMemoryBindInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo>::value,
+ "SparseImageMemoryBindInfo is not nothrow_move_constructible!" );
struct BindSparseInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindSparseInfo;
+ using NativeType = VkBindSparseInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBindSparseInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -7038,7 +9087,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & operator=( BindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindSparseInfo & operator=( BindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindSparseInfo & operator=( VkBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -7047,19 +9096,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BindSparseInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreCount = waitSemaphoreCount_;
return *this;
}
- BindSparseInfo & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo &
+ setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphores = pWaitSemaphores_;
return *this;
@@ -7076,13 +9126,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- BindSparseInfo & setBufferBindCount( uint32_t bufferBindCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setBufferBindCount( uint32_t bufferBindCount_ ) VULKAN_HPP_NOEXCEPT
{
bufferBindCount = bufferBindCount_;
return *this;
}
- BindSparseInfo &
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo &
setPBufferBinds( const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * pBufferBinds_ ) VULKAN_HPP_NOEXCEPT
{
pBufferBinds = pBufferBinds_;
@@ -7100,13 +9150,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- BindSparseInfo & setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo &
+ setImageOpaqueBindCount( uint32_t imageOpaqueBindCount_ ) VULKAN_HPP_NOEXCEPT
{
imageOpaqueBindCount = imageOpaqueBindCount_;
return *this;
}
- BindSparseInfo & setPImageOpaqueBinds(
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setPImageOpaqueBinds(
const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * pImageOpaqueBinds_ ) VULKAN_HPP_NOEXCEPT
{
pImageOpaqueBinds = pImageOpaqueBinds_;
@@ -7124,13 +9175,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- BindSparseInfo & setImageBindCount( uint32_t imageBindCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo & setImageBindCount( uint32_t imageBindCount_ ) VULKAN_HPP_NOEXCEPT
{
imageBindCount = imageBindCount_;
return *this;
}
- BindSparseInfo &
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo &
setPImageBinds( const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * pImageBinds_ ) VULKAN_HPP_NOEXCEPT
{
pImageBinds = pImageBinds_;
@@ -7148,13 +9199,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- BindSparseInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo &
+ setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreCount = signalSemaphoreCount_;
return *this;
}
- BindSparseInfo &
+ VULKAN_HPP_CONSTEXPR_14 BindSparseInfo &
setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT
{
pSignalSemaphores = pSignalSemaphores_;
@@ -7173,27 +9225,65 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindSparseInfo *>( this );
}
- operator VkBindSparseInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindSparseInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindSparseInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Semaphore * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SparseBufferMemoryBindInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SparseImageOpaqueMemoryBindInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SparseImageMemoryBindInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Semaphore * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ waitSemaphoreCount,
+ pWaitSemaphores,
+ bufferBindCount,
+ pBufferBinds,
+ imageOpaqueBindCount,
+ pImageOpaqueBinds,
+ imageBindCount,
+ pImageBinds,
+ signalSemaphoreCount,
+ pSignalSemaphores );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindSparseInfo const & ) const = default;
#else
bool operator==( BindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) &&
( pWaitSemaphores == rhs.pWaitSemaphores ) && ( bufferBindCount == rhs.bufferBindCount ) &&
( pBufferBinds == rhs.pBufferBinds ) && ( imageOpaqueBindCount == rhs.imageOpaqueBindCount ) &&
( pImageOpaqueBinds == rhs.pImageOpaqueBinds ) && ( imageBindCount == rhs.imageBindCount ) &&
( pImageBinds == rhs.pImageBinds ) && ( signalSemaphoreCount == rhs.signalSemaphoreCount ) &&
( pSignalSemaphores == rhs.pSignalSemaphores );
+# endif
}
bool operator!=( BindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -7216,8 +9306,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t signalSemaphoreCount = {};
const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores = {};
};
- static_assert( sizeof( BindSparseInfo ) == sizeof( VkBindSparseInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindSparseInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindSparseInfo ) == sizeof( VkBindSparseInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindSparseInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindSparseInfo>::value,
+ "BindSparseInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBindSparseInfo>
@@ -7227,6 +9321,8 @@ namespace VULKAN_HPP_NAMESPACE
struct BindVertexBufferIndirectCommandNV
{
+ using NativeType = VkBindVertexBufferIndirectCommandNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BindVertexBufferIndirectCommandNV( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ = {},
uint32_t size_ = {},
@@ -7244,8 +9340,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV &
- operator=( BindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BindVertexBufferIndirectCommandNV &
+ operator=( BindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BindVertexBufferIndirectCommandNV & operator=( VkBindVertexBufferIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -7254,42 +9350,58 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BindVertexBufferIndirectCommandNV &
- setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV &
+ setBufferAddress( VULKAN_HPP_NAMESPACE::DeviceAddress bufferAddress_ ) VULKAN_HPP_NOEXCEPT
{
bufferAddress = bufferAddress_;
return *this;
}
- BindVertexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
- BindVertexBufferIndirectCommandNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BindVertexBufferIndirectCommandNV & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBindVertexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindVertexBufferIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBindVertexBufferIndirectCommandNV *>( this );
}
- operator VkBindVertexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBindVertexBufferIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBindVertexBufferIndirectCommandNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceAddress const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( bufferAddress, size, stride );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BindVertexBufferIndirectCommandNV const & ) const = default;
#else
bool operator==( BindVertexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( bufferAddress == rhs.bufferAddress ) && ( size == rhs.size ) && ( stride == rhs.stride );
+# endif
}
bool operator!=( BindVertexBufferIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -7303,13 +9415,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t size = {};
uint32_t stride = {};
};
- static_assert( sizeof( BindVertexBufferIndirectCommandNV ) == sizeof( VkBindVertexBufferIndirectCommandNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BindVertexBufferIndirectCommandNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV ) ==
+ sizeof( VkBindVertexBufferIndirectCommandNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BindVertexBufferIndirectCommandNV>::value,
+ "BindVertexBufferIndirectCommandNV is not nothrow_move_constructible!" );
struct ImageSubresourceLayers
{
+ using NativeType = VkImageSubresourceLayers;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageSubresourceLayers( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {},
uint32_t mipLevel_ = {},
@@ -7328,8 +9446,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers &
- operator=( ImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageSubresourceLayers & operator=( ImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageSubresourceLayers & operator=( VkImageSubresourceLayers const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -7338,48 +9455,65 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageSubresourceLayers & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers &
+ setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
{
aspectMask = aspectMask_;
return *this;
}
- ImageSubresourceLayers & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setMipLevel( uint32_t mipLevel_ ) VULKAN_HPP_NOEXCEPT
{
mipLevel = mipLevel_;
return *this;
}
- ImageSubresourceLayers & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
{
baseArrayLayer = baseArrayLayer_;
return *this;
}
- ImageSubresourceLayers & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceLayers & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
{
layerCount = layerCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageSubresourceLayers const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSubresourceLayers const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageSubresourceLayers *>( this );
}
- operator VkImageSubresourceLayers &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSubresourceLayers &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageSubresourceLayers *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageAspectFlags const &, uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( aspectMask, mipLevel, baseArrayLayer, layerCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageSubresourceLayers const & ) const = default;
#else
bool operator==( ImageSubresourceLayers const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( aspectMask == rhs.aspectMask ) && ( mipLevel == rhs.mipLevel ) &&
( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount );
+# endif
}
bool operator!=( ImageSubresourceLayers const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -7394,71 +9528,77 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t baseArrayLayer = {};
uint32_t layerCount = {};
};
- static_assert( sizeof( ImageSubresourceLayers ) == sizeof( VkImageSubresourceLayers ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageSubresourceLayers>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers ) ==
+ sizeof( VkImageSubresourceLayers ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageSubresourceLayers>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageSubresourceLayers>::value,
+ "ImageSubresourceLayers is not nothrow_move_constructible!" );
- struct ImageBlit2KHR
+ struct ImageBlit2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageBlit2KHR;
+ using NativeType = VkImageBlit2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageBlit2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
- ImageBlit2KHR( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
- std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & srcOffsets_ = {},
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
- std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & dstOffsets_ = {} ) VULKAN_HPP_NOEXCEPT
+ ImageBlit2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
+ std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & srcOffsets_ = {},
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
+ std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & dstOffsets_ = {} ) VULKAN_HPP_NOEXCEPT
: srcSubresource( srcSubresource_ )
, srcOffsets( srcOffsets_ )
, dstSubresource( dstSubresource_ )
, dstOffsets( dstOffsets_ )
{}
- VULKAN_HPP_CONSTEXPR_14 ImageBlit2KHR( ImageBlit2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit2( ImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageBlit2KHR( VkImageBlit2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : ImageBlit2KHR( *reinterpret_cast<ImageBlit2KHR const *>( &rhs ) )
+ ImageBlit2( VkImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageBlit2( *reinterpret_cast<ImageBlit2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageBlit2KHR & operator=( ImageBlit2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageBlit2 & operator=( ImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageBlit2KHR & operator=( VkImageBlit2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ ImageBlit2 & operator=( VkImageBlit2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageBlit2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageBlit2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageBlit2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageBlit2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit2 &
setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
{
srcSubresource = srcSubresource_;
return *this;
}
- ImageBlit2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit2 &
setSrcOffsets( std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT
{
srcOffsets = srcOffsets_;
return *this;
}
- ImageBlit2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit2 &
setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
{
dstSubresource = dstSubresource_;
return *this;
}
- ImageBlit2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit2 &
setDstOffsets( std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT
{
dstOffsets = dstOffsets_;
@@ -7466,63 +9606,91 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageBlit2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageBlit2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkImageBlit2KHR *>( this );
+ return *reinterpret_cast<const VkImageBlit2 *>( this );
}
- operator VkImageBlit2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageBlit2 &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkImageBlit2 *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkImageBlit2KHR *>( this );
+ return std::tie( sType, pNext, srcSubresource, srcOffsets, dstSubresource, dstOffsets );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImageBlit2KHR const & ) const = default;
+ auto operator<=>( ImageBlit2 const & ) const = default;
#else
- bool operator==( ImageBlit2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( ImageBlit2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) &&
( srcOffsets == rhs.srcOffsets ) && ( dstSubresource == rhs.dstSubresource ) &&
( dstOffsets == rhs.dstOffsets );
+# endif
}
- bool operator!=( ImageBlit2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( ImageBlit2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageBlit2KHR;
- const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageBlit2;
+ const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> srcOffsets = {};
VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> dstOffsets = {};
};
- static_assert( sizeof( ImageBlit2KHR ) == sizeof( VkImageBlit2KHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageBlit2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageBlit2 ) == sizeof( VkImageBlit2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageBlit2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageBlit2>::value,
+ "ImageBlit2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eImageBlit2KHR>
+ struct CppType<StructureType, StructureType::eImageBlit2>
{
- using Type = ImageBlit2KHR;
+ using Type = ImageBlit2;
};
+ using ImageBlit2KHR = ImageBlit2;
- struct BlitImageInfo2KHR
+ struct BlitImageInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBlitImageInfo2KHR;
+ using NativeType = VkBlitImageInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBlitImageInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- uint32_t regionCount_ = {},
- const VULKAN_HPP_NAMESPACE::ImageBlit2KHR * pRegions_ = {},
- VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2(
+ VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ uint32_t regionCount_ = {},
+ const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions_ = {},
+ VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest ) VULKAN_HPP_NOEXCEPT
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstImage( dstImage_ )
@@ -7532,19 +9700,19 @@ namespace VULKAN_HPP_NAMESPACE
, filter( filter_ )
{}
- VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2KHR( BlitImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2( BlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BlitImageInfo2KHR( VkBlitImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : BlitImageInfo2KHR( *reinterpret_cast<BlitImageInfo2KHR const *>( &rhs ) )
+ BlitImageInfo2( VkBlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BlitImageInfo2( *reinterpret_cast<BlitImageInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- BlitImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_,
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
- VULKAN_HPP_NAMESPACE::Image dstImage_,
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageBlit2KHR> const & regions_,
+ BlitImageInfo2(
+ VULKAN_HPP_NAMESPACE::Image srcImage_,
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
+ VULKAN_HPP_NAMESPACE::Image dstImage_,
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageBlit2> const & regions_,
VULKAN_HPP_NAMESPACE::Filter filter_ = VULKAN_HPP_NAMESPACE::Filter::eNearest )
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
@@ -7557,61 +9725,63 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2KHR &
- operator=( BlitImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BlitImageInfo2 & operator=( BlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BlitImageInfo2KHR & operator=( VkBlitImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ BlitImageInfo2 & operator=( VkBlitImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BlitImageInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BlitImageInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BlitImageInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BlitImageInfo2KHR & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
{
srcImage = srcImage_;
return *this;
}
- BlitImageInfo2KHR & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 &
+ setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
srcImageLayout = srcImageLayout_;
return *this;
}
- BlitImageInfo2KHR & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
{
dstImage = dstImage_;
return *this;
}
- BlitImageInfo2KHR & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 &
+ setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
dstImageLayout = dstImageLayout_;
return *this;
}
- BlitImageInfo2KHR & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
{
regionCount = regionCount_;
return *this;
}
- BlitImageInfo2KHR & setPRegions( const VULKAN_HPP_NAMESPACE::ImageBlit2KHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 &
+ setPRegions( const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- BlitImageInfo2KHR & setRegions(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageBlit2KHR> const & regions_ )
+ BlitImageInfo2 & setRegions(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageBlit2> const & regions_ )
VULKAN_HPP_NOEXCEPT
{
regionCount = static_cast<uint32_t>( regions_.size() );
@@ -7620,239 +9790,969 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- BlitImageInfo2KHR & setFilter( VULKAN_HPP_NAMESPACE::Filter filter_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BlitImageInfo2 & setFilter( VULKAN_HPP_NAMESPACE::Filter filter_ ) VULKAN_HPP_NOEXCEPT
{
filter = filter_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBlitImageInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBlitImageInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkBlitImageInfo2KHR *>( this );
+ return *reinterpret_cast<const VkBlitImageInfo2 *>( this );
}
- operator VkBlitImageInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBlitImageInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkBlitImageInfo2KHR *>( this );
+ return *reinterpret_cast<VkBlitImageInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageBlit2 * const &,
+ VULKAN_HPP_NAMESPACE::Filter const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions, filter );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( BlitImageInfo2KHR const & ) const = default;
+ auto operator<=>( BlitImageInfo2 const & ) const = default;
#else
- bool operator==( BlitImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( BlitImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) &&
( srcImageLayout == rhs.srcImageLayout ) && ( dstImage == rhs.dstImage ) &&
( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) &&
( pRegions == rhs.pRegions ) && ( filter == rhs.filter );
+# endif
}
- bool operator!=( BlitImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( BlitImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBlitImageInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Image srcImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- VULKAN_HPP_NAMESPACE::Image dstImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- uint32_t regionCount = {};
- const VULKAN_HPP_NAMESPACE::ImageBlit2KHR * pRegions = {};
- VULKAN_HPP_NAMESPACE::Filter filter = VULKAN_HPP_NAMESPACE::Filter::eNearest;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBlitImageInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Image srcImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::Image dstImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ uint32_t regionCount = {};
+ const VULKAN_HPP_NAMESPACE::ImageBlit2 * pRegions = {};
+ VULKAN_HPP_NAMESPACE::Filter filter = VULKAN_HPP_NAMESPACE::Filter::eNearest;
};
- static_assert( sizeof( BlitImageInfo2KHR ) == sizeof( VkBlitImageInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BlitImageInfo2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BlitImageInfo2 ) == sizeof( VkBlitImageInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BlitImageInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BlitImageInfo2>::value,
+ "BlitImageInfo2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eBlitImageInfo2KHR>
+ struct CppType<StructureType, StructureType::eBlitImageInfo2>
{
- using Type = BlitImageInfo2KHR;
+ using Type = BlitImageInfo2;
};
+ using BlitImageInfo2KHR = BlitImageInfo2;
- struct BufferCopy
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct BufferCollectionBufferCreateInfoFUCHSIA
{
-#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR BufferCopy( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT
- : srcOffset( srcOffset_ )
- , dstOffset( dstOffset_ )
- , size( size_ )
+ using NativeType = VkBufferCollectionBufferCreateInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eBufferCollectionBufferCreateInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ BufferCollectionBufferCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {},
+ uint32_t index_ = {} ) VULKAN_HPP_NOEXCEPT
+ : collection( collection_ )
+ , index( index_ )
{}
- VULKAN_HPP_CONSTEXPR BufferCopy( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR BufferCollectionBufferCreateInfoFUCHSIA( BufferCollectionBufferCreateInfoFUCHSIA const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
- BufferCopy( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT
- : BufferCopy( *reinterpret_cast<BufferCopy const *>( &rhs ) )
+ BufferCollectionBufferCreateInfoFUCHSIA( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCollectionBufferCreateInfoFUCHSIA(
+ *reinterpret_cast<BufferCollectionBufferCreateInfoFUCHSIA const *>( &rhs ) )
{}
-#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferCopy & operator=( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferCollectionBufferCreateInfoFUCHSIA &
+ operator=( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferCopy & operator=( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT
+ BufferCollectionBufferCreateInfoFUCHSIA &
+ operator=( VkBufferCollectionBufferCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCopy const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA const *>( &rhs );
return *this;
}
-#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
- srcOffset = srcOffset_;
+ pNext = pNext_;
return *this;
}
- BufferCopy & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA &
+ setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT
{
- dstOffset = dstOffset_;
+ collection = collection_;
return *this;
}
- BufferCopy & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionBufferCreateInfoFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT
{
- size = size_;
+ index = index_;
return *this;
}
-#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferCopy const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferCollectionBufferCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkBufferCopy *>( this );
+ return *reinterpret_cast<const VkBufferCollectionBufferCreateInfoFUCHSIA *>( this );
}
- operator VkBufferCopy &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferCollectionBufferCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkBufferCopy *>( this );
+ return *reinterpret_cast<VkBufferCollectionBufferCreateInfoFUCHSIA *>( this );
}
-#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( BufferCopy const & ) const = default;
-#else
- bool operator==( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return ( srcOffset == rhs.srcOffset ) && ( dstOffset == rhs.dstOffset ) && ( size == rhs.size );
+ return std::tie( sType, pNext, collection, index );
}
+# endif
- bool operator!=( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCollectionBufferCreateInfoFUCHSIA const & ) const = default;
+# else
+ bool operator==( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) &&
+ ( index == rhs.index );
+# endif
+ }
+
+ bool operator!=( BufferCollectionBufferCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
+# endif
public:
- VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {};
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {};
- VULKAN_HPP_NAMESPACE::DeviceSize size = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionBufferCreateInfoFUCHSIA;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {};
+ uint32_t index = {};
};
- static_assert( sizeof( BufferCopy ) == sizeof( VkBufferCopy ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferCopy>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA ) ==
+ sizeof( VkBufferCollectionBufferCreateInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCollectionBufferCreateInfoFUCHSIA>::value,
+ "BufferCollectionBufferCreateInfoFUCHSIA is not nothrow_move_constructible!" );
- struct BufferCopy2KHR
+ template <>
+ struct CppType<StructureType, StructureType::eBufferCollectionBufferCreateInfoFUCHSIA>
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCopy2KHR;
+ using Type = BufferCollectionBufferCreateInfoFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
-#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR BufferCopy2KHR( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT
- : srcOffset( srcOffset_ )
- , dstOffset( dstOffset_ )
- , size( size_ )
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct BufferCollectionConstraintsInfoFUCHSIA
+ {
+ using NativeType = VkBufferCollectionConstraintsInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eBufferCollectionConstraintsInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ BufferCollectionConstraintsInfoFUCHSIA( uint32_t minBufferCount_ = {},
+ uint32_t maxBufferCount_ = {},
+ uint32_t minBufferCountForCamping_ = {},
+ uint32_t minBufferCountForDedicatedSlack_ = {},
+ uint32_t minBufferCountForSharedSlack_ = {} ) VULKAN_HPP_NOEXCEPT
+ : minBufferCount( minBufferCount_ )
+ , maxBufferCount( maxBufferCount_ )
+ , minBufferCountForCamping( minBufferCountForCamping_ )
+ , minBufferCountForDedicatedSlack( minBufferCountForDedicatedSlack_ )
+ , minBufferCountForSharedSlack( minBufferCountForSharedSlack_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR BufferCollectionConstraintsInfoFUCHSIA( BufferCollectionConstraintsInfoFUCHSIA const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCollectionConstraintsInfoFUCHSIA( VkBufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCollectionConstraintsInfoFUCHSIA(
+ *reinterpret_cast<BufferCollectionConstraintsInfoFUCHSIA const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ BufferCollectionConstraintsInfoFUCHSIA &
+ operator=( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCollectionConstraintsInfoFUCHSIA &
+ operator=( VkBufferCollectionConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA &
+ setMinBufferCount( uint32_t minBufferCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minBufferCount = minBufferCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA &
+ setMaxBufferCount( uint32_t maxBufferCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxBufferCount = maxBufferCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA &
+ setMinBufferCountForCamping( uint32_t minBufferCountForCamping_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minBufferCountForCamping = minBufferCountForCamping_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA &
+ setMinBufferCountForDedicatedSlack( uint32_t minBufferCountForDedicatedSlack_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minBufferCountForDedicatedSlack = minBufferCountForDedicatedSlack_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionConstraintsInfoFUCHSIA &
+ setMinBufferCountForSharedSlack( uint32_t minBufferCountForSharedSlack_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minBufferCountForSharedSlack = minBufferCountForSharedSlack_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkBufferCollectionConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkBufferCollectionConstraintsInfoFUCHSIA *>( this );
+ }
+
+ explicit operator VkBufferCollectionConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferCollectionConstraintsInfoFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ minBufferCount,
+ maxBufferCount,
+ minBufferCountForCamping,
+ minBufferCountForDedicatedSlack,
+ minBufferCountForSharedSlack );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCollectionConstraintsInfoFUCHSIA const & ) const = default;
+# else
+ bool operator==( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minBufferCount == rhs.minBufferCount ) &&
+ ( maxBufferCount == rhs.maxBufferCount ) && ( minBufferCountForCamping == rhs.minBufferCountForCamping ) &&
+ ( minBufferCountForDedicatedSlack == rhs.minBufferCountForDedicatedSlack ) &&
+ ( minBufferCountForSharedSlack == rhs.minBufferCountForSharedSlack );
+# endif
+ }
+
+ bool operator!=( BufferCollectionConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionConstraintsInfoFUCHSIA;
+ const void * pNext = {};
+ uint32_t minBufferCount = {};
+ uint32_t maxBufferCount = {};
+ uint32_t minBufferCountForCamping = {};
+ uint32_t minBufferCountForDedicatedSlack = {};
+ uint32_t minBufferCountForSharedSlack = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA ) ==
+ sizeof( VkBufferCollectionConstraintsInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA>::value,
+ "BufferCollectionConstraintsInfoFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eBufferCollectionConstraintsInfoFUCHSIA>
+ {
+ using Type = BufferCollectionConstraintsInfoFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct BufferCollectionCreateInfoFUCHSIA
+ {
+ using NativeType = VkBufferCollectionCreateInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eBufferCollectionCreateInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR BufferCollectionCreateInfoFUCHSIA( zx_handle_t collectionToken_ = {} ) VULKAN_HPP_NOEXCEPT
+ : collectionToken( collectionToken_ )
{}
- VULKAN_HPP_CONSTEXPR BufferCopy2KHR( BufferCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR
+ BufferCollectionCreateInfoFUCHSIA( BufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferCopy2KHR( VkBufferCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : BufferCopy2KHR( *reinterpret_cast<BufferCopy2KHR const *>( &rhs ) )
+ BufferCollectionCreateInfoFUCHSIA( VkBufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCollectionCreateInfoFUCHSIA( *reinterpret_cast<BufferCollectionCreateInfoFUCHSIA const *>( &rhs ) )
{}
-#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferCopy2KHR & operator=( BufferCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferCollectionCreateInfoFUCHSIA &
+ operator=( BufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferCopy2KHR & operator=( VkBufferCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ BufferCollectionCreateInfoFUCHSIA & operator=( VkBufferCollectionCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCopy2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA const *>( &rhs );
return *this;
}
-#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferCopy2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferCopy2KHR & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionCreateInfoFUCHSIA &
+ setCollectionToken( zx_handle_t collectionToken_ ) VULKAN_HPP_NOEXCEPT
{
- srcOffset = srcOffset_;
+ collectionToken = collectionToken_;
return *this;
}
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- BufferCopy2KHR & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferCollectionCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
- dstOffset = dstOffset_;
+ return *reinterpret_cast<const VkBufferCollectionCreateInfoFUCHSIA *>( this );
+ }
+
+ explicit operator VkBufferCollectionCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferCollectionCreateInfoFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, zx_handle_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, collectionToken );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ std::strong_ordering operator<=>( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &collectionToken, &rhs.collectionToken, sizeof( zx_handle_t ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
+ bool operator==( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( memcmp( &collectionToken, &rhs.collectionToken, sizeof( zx_handle_t ) ) == 0 );
+ }
+
+ bool operator!=( BufferCollectionCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionCreateInfoFUCHSIA;
+ const void * pNext = {};
+ zx_handle_t collectionToken = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA ) ==
+ sizeof( VkBufferCollectionCreateInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCollectionCreateInfoFUCHSIA>::value,
+ "BufferCollectionCreateInfoFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eBufferCollectionCreateInfoFUCHSIA>
+ {
+ using Type = BufferCollectionCreateInfoFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct BufferCollectionImageCreateInfoFUCHSIA
+ {
+ using NativeType = VkBufferCollectionImageCreateInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eBufferCollectionImageCreateInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ BufferCollectionImageCreateInfoFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {},
+ uint32_t index_ = {} ) VULKAN_HPP_NOEXCEPT
+ : collection( collection_ )
+ , index( index_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR BufferCollectionImageCreateInfoFUCHSIA( BufferCollectionImageCreateInfoFUCHSIA const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCollectionImageCreateInfoFUCHSIA( VkBufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCollectionImageCreateInfoFUCHSIA(
+ *reinterpret_cast<BufferCollectionImageCreateInfoFUCHSIA const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ BufferCollectionImageCreateInfoFUCHSIA &
+ operator=( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCollectionImageCreateInfoFUCHSIA &
+ operator=( VkBufferCollectionImageCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA const *>( &rhs );
return *this;
}
- BufferCopy2KHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
- size = size_;
+ pNext = pNext_;
return *this;
}
-#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferCopy2KHR const &() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA &
+ setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkBufferCopy2KHR *>( this );
+ collection = collection_;
+ return *this;
}
- operator VkBufferCopy2KHR &() VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionImageCreateInfoFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkBufferCopy2KHR *>( this );
+ index = index_;
+ return *this;
}
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
-#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( BufferCopy2KHR const & ) const = default;
-#else
- bool operator==( BufferCopy2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferCollectionImageCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
- return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcOffset == rhs.srcOffset ) &&
- ( dstOffset == rhs.dstOffset ) && ( size == rhs.size );
+ return *reinterpret_cast<const VkBufferCollectionImageCreateInfoFUCHSIA *>( this );
+ }
+
+ explicit operator VkBufferCollectionImageCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferCollectionImageCreateInfoFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, collection, index );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCollectionImageCreateInfoFUCHSIA const & ) const = default;
+# else
+ bool operator==( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) &&
+ ( index == rhs.index );
+# endif
}
- bool operator!=( BufferCopy2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( BufferCollectionImageCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
+# endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCopy2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {};
- VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {};
- VULKAN_HPP_NAMESPACE::DeviceSize size = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionImageCreateInfoFUCHSIA;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {};
+ uint32_t index = {};
};
- static_assert( sizeof( BufferCopy2KHR ) == sizeof( VkBufferCopy2KHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferCopy2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA ) ==
+ sizeof( VkBufferCollectionImageCreateInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCollectionImageCreateInfoFUCHSIA>::value,
+ "BufferCollectionImageCreateInfoFUCHSIA is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eBufferCopy2KHR>
+ struct CppType<StructureType, StructureType::eBufferCollectionImageCreateInfoFUCHSIA>
{
- using Type = BufferCopy2KHR;
+ using Type = BufferCollectionImageCreateInfoFUCHSIA;
};
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct SysmemColorSpaceFUCHSIA
+ {
+ using NativeType = VkSysmemColorSpaceFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSysmemColorSpaceFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR SysmemColorSpaceFUCHSIA( uint32_t colorSpace_ = {} ) VULKAN_HPP_NOEXCEPT
+ : colorSpace( colorSpace_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR SysmemColorSpaceFUCHSIA( SysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ SysmemColorSpaceFUCHSIA( VkSysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : SysmemColorSpaceFUCHSIA( *reinterpret_cast<SysmemColorSpaceFUCHSIA const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ SysmemColorSpaceFUCHSIA & operator=( SysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ SysmemColorSpaceFUCHSIA & operator=( VkSysmemColorSpaceFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 SysmemColorSpaceFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 SysmemColorSpaceFUCHSIA & setColorSpace( uint32_t colorSpace_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorSpace = colorSpace_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkSysmemColorSpaceFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkSysmemColorSpaceFUCHSIA *>( this );
+ }
+
+ explicit operator VkSysmemColorSpaceFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkSysmemColorSpaceFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, colorSpace );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( SysmemColorSpaceFUCHSIA const & ) const = default;
+# else
+ bool operator==( SysmemColorSpaceFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorSpace == rhs.colorSpace );
+# endif
+ }
+
+ bool operator!=( SysmemColorSpaceFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSysmemColorSpaceFUCHSIA;
+ const void * pNext = {};
+ uint32_t colorSpace = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA ) ==
+ sizeof( VkSysmemColorSpaceFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA>::value,
+ "SysmemColorSpaceFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eSysmemColorSpaceFUCHSIA>
+ {
+ using Type = SysmemColorSpaceFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct BufferCollectionPropertiesFUCHSIA
+ {
+ using NativeType = VkBufferCollectionPropertiesFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eBufferCollectionPropertiesFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR BufferCollectionPropertiesFUCHSIA(
+ uint32_t memoryTypeBits_ = {},
+ uint32_t bufferCount_ = {},
+ uint32_t createInfoIndex_ = {},
+ uint64_t sysmemPixelFormat_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ = {},
+ VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA sysmemColorSpaceIndex_ = {},
+ VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents_ = {},
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ =
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull,
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven,
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ =
+ VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven ) VULKAN_HPP_NOEXCEPT
+ : memoryTypeBits( memoryTypeBits_ )
+ , bufferCount( bufferCount_ )
+ , createInfoIndex( createInfoIndex_ )
+ , sysmemPixelFormat( sysmemPixelFormat_ )
+ , formatFeatures( formatFeatures_ )
+ , sysmemColorSpaceIndex( sysmemColorSpaceIndex_ )
+ , samplerYcbcrConversionComponents( samplerYcbcrConversionComponents_ )
+ , suggestedYcbcrModel( suggestedYcbcrModel_ )
+ , suggestedYcbcrRange( suggestedYcbcrRange_ )
+ , suggestedXChromaOffset( suggestedXChromaOffset_ )
+ , suggestedYChromaOffset( suggestedYChromaOffset_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ BufferCollectionPropertiesFUCHSIA( BufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCollectionPropertiesFUCHSIA( VkBufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCollectionPropertiesFUCHSIA( *reinterpret_cast<BufferCollectionPropertiesFUCHSIA const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ BufferCollectionPropertiesFUCHSIA &
+ operator=( BufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCollectionPropertiesFUCHSIA & operator=( VkBufferCollectionPropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setMemoryTypeBits( uint32_t memoryTypeBits_ ) VULKAN_HPP_NOEXCEPT
+ {
+ memoryTypeBits = memoryTypeBits_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setBufferCount( uint32_t bufferCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ bufferCount = bufferCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setCreateInfoIndex( uint32_t createInfoIndex_ ) VULKAN_HPP_NOEXCEPT
+ {
+ createInfoIndex = createInfoIndex_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setSysmemPixelFormat( uint64_t sysmemPixelFormat_ ) VULKAN_HPP_NOEXCEPT
+ {
+ sysmemPixelFormat = sysmemPixelFormat_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures_ ) VULKAN_HPP_NOEXCEPT
+ {
+ formatFeatures = formatFeatures_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setSysmemColorSpaceIndex(
+ VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const & sysmemColorSpaceIndex_ ) VULKAN_HPP_NOEXCEPT
+ {
+ sysmemColorSpaceIndex = sysmemColorSpaceIndex_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setSamplerYcbcrConversionComponents(
+ VULKAN_HPP_NAMESPACE::ComponentMapping const & samplerYcbcrConversionComponents_ ) VULKAN_HPP_NOEXCEPT
+ {
+ samplerYcbcrConversionComponents = samplerYcbcrConversionComponents_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA & setSuggestedYcbcrModel(
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel_ ) VULKAN_HPP_NOEXCEPT
+ {
+ suggestedYcbcrModel = suggestedYcbcrModel_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setSuggestedYcbcrRange( VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange_ ) VULKAN_HPP_NOEXCEPT
+ {
+ suggestedYcbcrRange = suggestedYcbcrRange_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setSuggestedXChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ suggestedXChromaOffset = suggestedXChromaOffset_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCollectionPropertiesFUCHSIA &
+ setSuggestedYChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ suggestedYChromaOffset = suggestedYChromaOffset_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkBufferCollectionPropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkBufferCollectionPropertiesFUCHSIA *>( this );
+ }
+
+ explicit operator VkBufferCollectionPropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferCollectionPropertiesFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA const &,
+ VULKAN_HPP_NAMESPACE::ComponentMapping const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ memoryTypeBits,
+ bufferCount,
+ createInfoIndex,
+ sysmemPixelFormat,
+ formatFeatures,
+ sysmemColorSpaceIndex,
+ samplerYcbcrConversionComponents,
+ suggestedYcbcrModel,
+ suggestedYcbcrRange,
+ suggestedXChromaOffset,
+ suggestedYChromaOffset );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCollectionPropertiesFUCHSIA const & ) const = default;
+# else
+ bool operator==( BufferCollectionPropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits ) &&
+ ( bufferCount == rhs.bufferCount ) && ( createInfoIndex == rhs.createInfoIndex ) &&
+ ( sysmemPixelFormat == rhs.sysmemPixelFormat ) && ( formatFeatures == rhs.formatFeatures ) &&
+ ( sysmemColorSpaceIndex == rhs.sysmemColorSpaceIndex ) &&
+ ( samplerYcbcrConversionComponents == rhs.samplerYcbcrConversionComponents ) &&
+ ( suggestedYcbcrModel == rhs.suggestedYcbcrModel ) && ( suggestedYcbcrRange == rhs.suggestedYcbcrRange ) &&
+ ( suggestedXChromaOffset == rhs.suggestedXChromaOffset ) &&
+ ( suggestedYChromaOffset == rhs.suggestedYChromaOffset );
+# endif
+ }
+
+ bool operator!=( BufferCollectionPropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCollectionPropertiesFUCHSIA;
+ void * pNext = {};
+ uint32_t memoryTypeBits = {};
+ uint32_t bufferCount = {};
+ uint32_t createInfoIndex = {};
+ uint64_t sysmemPixelFormat = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags formatFeatures = {};
+ VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA sysmemColorSpaceIndex = {};
+ VULKAN_HPP_NAMESPACE::ComponentMapping samplerYcbcrConversionComponents = {};
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion suggestedYcbcrModel =
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion::eRgbIdentity;
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange suggestedYcbcrRange = VULKAN_HPP_NAMESPACE::SamplerYcbcrRange::eItuFull;
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedXChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven;
+ VULKAN_HPP_NAMESPACE::ChromaLocation suggestedYChromaOffset = VULKAN_HPP_NAMESPACE::ChromaLocation::eCositedEven;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA ) ==
+ sizeof( VkBufferCollectionPropertiesFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCollectionPropertiesFUCHSIA>::value,
+ "BufferCollectionPropertiesFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eBufferCollectionPropertiesFUCHSIA>
+ {
+ using Type = BufferCollectionPropertiesFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
struct BufferCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCreateInfo;
+ using NativeType = VkBufferCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -7892,7 +10792,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & operator=( BufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferCreateInfo & operator=( BufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferCreateInfo & operator=( VkBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -7901,43 +10801,48 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- BufferCreateInfo & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
- BufferCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo &
+ setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
{
usage = usage_;
return *this;
}
- BufferCreateInfo & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo &
+ setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT
{
sharingMode = sharingMode_;
return *this;
}
- BufferCreateInfo & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo &
+ setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndexCount = queueFamilyIndexCount_;
return *this;
}
- BufferCreateInfo & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferCreateInfo &
+ setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
{
pQueueFamilyIndices = pQueueFamilyIndices_;
return *this;
@@ -7954,25 +10859,48 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferCreateInfo *>( this );
}
- operator VkBufferCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::BufferUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::SharingMode const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, size, usage, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferCreateInfo const & ) const = default;
#else
bool operator==( BufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( size == rhs.size ) &&
( usage == rhs.usage ) && ( sharingMode == rhs.sharingMode ) &&
( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) &&
( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
+# endif
}
bool operator!=( BufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -7991,9 +10919,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t queueFamilyIndexCount = {};
const uint32_t * pQueueFamilyIndices = {};
};
- static_assert( sizeof( BufferCreateInfo ) == sizeof( VkBufferCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCreateInfo ) == sizeof( VkBufferCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCreateInfo>::value,
+ "BufferCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferCreateInfo>
@@ -8001,9 +10932,372 @@ namespace VULKAN_HPP_NAMESPACE
using Type = BufferCreateInfo;
};
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct BufferConstraintsInfoFUCHSIA
+ {
+ using NativeType = VkBufferConstraintsInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferConstraintsInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR BufferConstraintsInfoFUCHSIA(
+ VULKAN_HPP_NAMESPACE::BufferCreateInfo createInfo_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ = {},
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {} )
+ VULKAN_HPP_NOEXCEPT
+ : createInfo( createInfo_ )
+ , requiredFormatFeatures( requiredFormatFeatures_ )
+ , bufferCollectionConstraints( bufferCollectionConstraints_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ BufferConstraintsInfoFUCHSIA( BufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferConstraintsInfoFUCHSIA( VkBufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferConstraintsInfoFUCHSIA( *reinterpret_cast<BufferConstraintsInfoFUCHSIA const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ BufferConstraintsInfoFUCHSIA & operator=( BufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferConstraintsInfoFUCHSIA & operator=( VkBufferConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA &
+ setCreateInfo( VULKAN_HPP_NAMESPACE::BufferCreateInfo const & createInfo_ ) VULKAN_HPP_NOEXCEPT
+ {
+ createInfo = createInfo_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA &
+ setRequiredFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ ) VULKAN_HPP_NOEXCEPT
+ {
+ requiredFormatFeatures = requiredFormatFeatures_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferConstraintsInfoFUCHSIA & setBufferCollectionConstraints(
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraints_ )
+ VULKAN_HPP_NOEXCEPT
+ {
+ bufferCollectionConstraints = bufferCollectionConstraints_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkBufferConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkBufferConstraintsInfoFUCHSIA *>( this );
+ }
+
+ explicit operator VkBufferConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferConstraintsInfoFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferCreateInfo const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, createInfo, requiredFormatFeatures, bufferCollectionConstraints );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferConstraintsInfoFUCHSIA const & ) const = default;
+# else
+ bool operator==( BufferConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( createInfo == rhs.createInfo ) &&
+ ( requiredFormatFeatures == rhs.requiredFormatFeatures ) &&
+ ( bufferCollectionConstraints == rhs.bufferCollectionConstraints );
+# endif
+ }
+
+ bool operator!=( BufferConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferConstraintsInfoFUCHSIA;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::BufferCreateInfo createInfo = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures = {};
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA ) ==
+ sizeof( VkBufferConstraintsInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferConstraintsInfoFUCHSIA>::value,
+ "BufferConstraintsInfoFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eBufferConstraintsInfoFUCHSIA>
+ {
+ using Type = BufferConstraintsInfoFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ struct BufferCopy
+ {
+ using NativeType = VkBufferCopy;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR BufferCopy( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT
+ : srcOffset( srcOffset_ )
+ , dstOffset( dstOffset_ )
+ , size( size_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR BufferCopy( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCopy( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCopy( *reinterpret_cast<BufferCopy const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ BufferCopy & operator=( BufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCopy & operator=( VkBufferCopy const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCopy const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ srcOffset = srcOffset_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy & setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ dstOffset = dstOffset_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ {
+ size = size_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkBufferCopy const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkBufferCopy *>( this );
+ }
+
+ explicit operator VkBufferCopy &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferCopy *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( srcOffset, dstOffset, size );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCopy const & ) const = default;
+#else
+ bool operator==( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( srcOffset == rhs.srcOffset ) && ( dstOffset == rhs.dstOffset ) && ( size == rhs.size );
+# endif
+ }
+
+ bool operator!=( BufferCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize size = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCopy ) == sizeof( VkBufferCopy ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCopy>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCopy>::value,
+ "BufferCopy is not nothrow_move_constructible!" );
+
+ struct BufferCopy2
+ {
+ using NativeType = VkBufferCopy2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferCopy2;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR BufferCopy2( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT
+ : srcOffset( srcOffset_ )
+ , dstOffset( dstOffset_ )
+ , size( size_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR BufferCopy2( BufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCopy2( VkBufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferCopy2( *reinterpret_cast<BufferCopy2 const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ BufferCopy2 & operator=( BufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ BufferCopy2 & operator=( VkBufferCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferCopy2 const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy2 &
+ setSrcOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ srcOffset = srcOffset_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy2 &
+ setDstOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ dstOffset = dstOffset_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 BufferCopy2 & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ {
+ size = size_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkBufferCopy2 const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkBufferCopy2 *>( this );
+ }
+
+ explicit operator VkBufferCopy2 &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkBufferCopy2 *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcOffset, dstOffset, size );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( BufferCopy2 const & ) const = default;
+#else
+ bool operator==( BufferCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcOffset == rhs.srcOffset ) &&
+ ( dstOffset == rhs.dstOffset ) && ( size == rhs.size );
+# endif
+ }
+
+ bool operator!=( BufferCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferCopy2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize srcOffset = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize dstOffset = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize size = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferCopy2 ) == sizeof( VkBufferCopy2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferCopy2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferCopy2>::value,
+ "BufferCopy2 is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eBufferCopy2>
+ {
+ using Type = BufferCopy2;
+ };
+ using BufferCopy2KHR = BufferCopy2;
+
struct BufferDeviceAddressCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkBufferDeviceAddressCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -8020,8 +11314,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT &
- operator=( BufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferDeviceAddressCreateInfoEXT &
+ operator=( BufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferDeviceAddressCreateInfoEXT & operator=( VkBufferDeviceAddressCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -8030,36 +11324,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferDeviceAddressCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferDeviceAddressCreateInfoEXT &
- setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressCreateInfoEXT &
+ setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
deviceAddress = deviceAddress_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferDeviceAddressCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferDeviceAddressCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT *>( this );
}
- operator VkBufferDeviceAddressCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferDeviceAddressCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferDeviceAddressCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceAddress const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceAddress );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferDeviceAddressCreateInfoEXT const & ) const = default;
#else
bool operator==( BufferDeviceAddressCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress );
+# endif
}
bool operator!=( BufferDeviceAddressCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8073,10 +11385,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {};
};
- static_assert( sizeof( BufferDeviceAddressCreateInfoEXT ) == sizeof( VkBufferDeviceAddressCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferDeviceAddressCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT ) ==
+ sizeof( VkBufferDeviceAddressCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferDeviceAddressCreateInfoEXT>::value,
+ "BufferDeviceAddressCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferDeviceAddressCreateInfoEXT>
@@ -8086,8 +11402,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BufferDeviceAddressInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressInfo;
+ using NativeType = VkBufferDeviceAddressInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferDeviceAddressInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BufferDeviceAddressInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -8101,8 +11419,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo &
- operator=( BufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferDeviceAddressInfo & operator=( BufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferDeviceAddressInfo & operator=( VkBufferDeviceAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -8111,35 +11428,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferDeviceAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferDeviceAddressInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferDeviceAddressInfo &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferDeviceAddressInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferDeviceAddressInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferDeviceAddressInfo *>( this );
}
- operator VkBufferDeviceAddressInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferDeviceAddressInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferDeviceAddressInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Buffer const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, buffer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferDeviceAddressInfo const & ) const = default;
#else
bool operator==( BufferDeviceAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer );
+# endif
}
bool operator!=( BufferDeviceAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8153,9 +11487,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Buffer buffer = {};
};
- static_assert( sizeof( BufferDeviceAddressInfo ) == sizeof( VkBufferDeviceAddressInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferDeviceAddressInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo ) ==
+ sizeof( VkBufferDeviceAddressInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferDeviceAddressInfo>::value,
+ "BufferDeviceAddressInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferDeviceAddressInfo>
@@ -8167,6 +11505,8 @@ namespace VULKAN_HPP_NAMESPACE
struct BufferImageCopy
{
+ using NativeType = VkBufferImageCopy;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BufferImageCopy( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {},
uint32_t bufferRowLength_ = {},
@@ -8189,7 +11529,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & operator=( BufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferImageCopy & operator=( BufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferImageCopy & operator=( VkBufferImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -8198,62 +11538,86 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferImageCopy & setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy &
+ setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT
{
bufferOffset = bufferOffset_;
return *this;
}
- BufferImageCopy & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT
{
bufferRowLength = bufferRowLength_;
return *this;
}
- BufferImageCopy & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT
{
bufferImageHeight = bufferImageHeight_;
return *this;
}
- BufferImageCopy &
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy &
setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT
{
imageSubresource = imageSubresource_;
return *this;
}
- BufferImageCopy & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy &
+ setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT
{
imageOffset = imageOffset_;
return *this;
}
- BufferImageCopy & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy &
+ setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
{
imageExtent = imageExtent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferImageCopy const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferImageCopy const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferImageCopy *>( this );
}
- operator VkBufferImageCopy &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferImageCopy &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferImageCopy *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( bufferOffset, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferImageCopy const & ) const = default;
#else
bool operator==( BufferImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( bufferOffset == rhs.bufferOffset ) && ( bufferRowLength == rhs.bufferRowLength ) &&
( bufferImageHeight == rhs.bufferImageHeight ) && ( imageSubresource == rhs.imageSubresource ) &&
( imageOffset == rhs.imageOffset ) && ( imageExtent == rhs.imageExtent );
+# endif
}
bool operator!=( BufferImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8270,21 +11634,27 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {};
VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {};
};
- static_assert( sizeof( BufferImageCopy ) == sizeof( VkBufferImageCopy ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferImageCopy>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferImageCopy ) == sizeof( VkBufferImageCopy ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferImageCopy>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferImageCopy>::value,
+ "BufferImageCopy is not nothrow_move_constructible!" );
- struct BufferImageCopy2KHR
+ struct BufferImageCopy2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferImageCopy2KHR;
+ using NativeType = VkBufferImageCopy2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferImageCopy2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR BufferImageCopy2KHR( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {},
- uint32_t bufferRowLength_ = {},
- uint32_t bufferImageHeight_ = {},
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {},
- VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR BufferImageCopy2( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ = {},
+ uint32_t bufferRowLength_ = {},
+ uint32_t bufferImageHeight_ = {},
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers imageSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D imageOffset_ = {},
+ VULKAN_HPP_NAMESPACE::Extent3D imageExtent_ = {} ) VULKAN_HPP_NOEXCEPT
: bufferOffset( bufferOffset_ )
, bufferRowLength( bufferRowLength_ )
, bufferImageHeight( bufferImageHeight_ )
@@ -8293,96 +11663,122 @@ namespace VULKAN_HPP_NAMESPACE
, imageExtent( imageExtent_ )
{}
- VULKAN_HPP_CONSTEXPR BufferImageCopy2KHR( BufferImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR BufferImageCopy2( BufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferImageCopy2KHR( VkBufferImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : BufferImageCopy2KHR( *reinterpret_cast<BufferImageCopy2KHR const *>( &rhs ) )
+ BufferImageCopy2( VkBufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferImageCopy2( *reinterpret_cast<BufferImageCopy2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2KHR &
- operator=( BufferImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferImageCopy2 & operator=( BufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferImageCopy2KHR & operator=( VkBufferImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ BufferImageCopy2 & operator=( VkBufferImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferImageCopy2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferImageCopy2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferImageCopy2KHR & setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 &
+ setBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset_ ) VULKAN_HPP_NOEXCEPT
{
bufferOffset = bufferOffset_;
return *this;
}
- BufferImageCopy2KHR & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferRowLength( uint32_t bufferRowLength_ ) VULKAN_HPP_NOEXCEPT
{
bufferRowLength = bufferRowLength_;
return *this;
}
- BufferImageCopy2KHR & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 & setBufferImageHeight( uint32_t bufferImageHeight_ ) VULKAN_HPP_NOEXCEPT
{
bufferImageHeight = bufferImageHeight_;
return *this;
}
- BufferImageCopy2KHR &
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 &
setImageSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & imageSubresource_ ) VULKAN_HPP_NOEXCEPT
{
imageSubresource = imageSubresource_;
return *this;
}
- BufferImageCopy2KHR & setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 &
+ setImageOffset( VULKAN_HPP_NAMESPACE::Offset3D const & imageOffset_ ) VULKAN_HPP_NOEXCEPT
{
imageOffset = imageOffset_;
return *this;
}
- BufferImageCopy2KHR & setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferImageCopy2 &
+ setImageExtent( VULKAN_HPP_NAMESPACE::Extent3D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
{
imageExtent = imageExtent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferImageCopy2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferImageCopy2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkBufferImageCopy2KHR *>( this );
+ return *reinterpret_cast<const VkBufferImageCopy2 *>( this );
}
- operator VkBufferImageCopy2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferImageCopy2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkBufferImageCopy2KHR *>( this );
+ return *reinterpret_cast<VkBufferImageCopy2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, bufferOffset, bufferRowLength, bufferImageHeight, imageSubresource, imageOffset, imageExtent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( BufferImageCopy2KHR const & ) const = default;
+ auto operator<=>( BufferImageCopy2 const & ) const = default;
#else
- bool operator==( BufferImageCopy2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( BufferImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferOffset == rhs.bufferOffset ) &&
( bufferRowLength == rhs.bufferRowLength ) && ( bufferImageHeight == rhs.bufferImageHeight ) &&
( imageSubresource == rhs.imageSubresource ) && ( imageOffset == rhs.imageOffset ) &&
( imageExtent == rhs.imageExtent );
+# endif
}
- bool operator!=( BufferImageCopy2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( BufferImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferImageCopy2KHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferImageCopy2;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceSize bufferOffset = {};
uint32_t bufferRowLength = {};
@@ -8391,20 +11787,26 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset3D imageOffset = {};
VULKAN_HPP_NAMESPACE::Extent3D imageExtent = {};
};
- static_assert( sizeof( BufferImageCopy2KHR ) == sizeof( VkBufferImageCopy2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferImageCopy2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferImageCopy2 ) == sizeof( VkBufferImageCopy2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferImageCopy2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferImageCopy2>::value,
+ "BufferImageCopy2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eBufferImageCopy2KHR>
+ struct CppType<StructureType, StructureType::eBufferImageCopy2>
{
- using Type = BufferImageCopy2KHR;
+ using Type = BufferImageCopy2;
};
+ using BufferImageCopy2KHR = BufferImageCopy2;
struct BufferMemoryBarrier
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier;
+ using NativeType = VkBufferMemoryBarrier;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BufferMemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {},
@@ -8430,8 +11832,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier &
- operator=( BufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferMemoryBarrier & operator=( BufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferMemoryBarrier & operator=( VkBufferMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -8440,74 +11841,104 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferMemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- BufferMemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
- BufferMemoryBarrier & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier &
+ setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
srcQueueFamilyIndex = srcQueueFamilyIndex_;
return *this;
}
- BufferMemoryBarrier & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier &
+ setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
dstQueueFamilyIndex = dstQueueFamilyIndex_;
return *this;
}
- BufferMemoryBarrier & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- BufferMemoryBarrier & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- BufferMemoryBarrier & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferMemoryBarrier *>( this );
}
- operator VkBufferMemoryBarrier &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferMemoryBarrier &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferMemoryBarrier *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, srcAccessMask, dstAccessMask, srcQueueFamilyIndex, dstQueueFamilyIndex, buffer, offset, size );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferMemoryBarrier const & ) const = default;
#else
bool operator==( BufferMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) &&
( dstAccessMask == rhs.dstAccessMask ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) &&
( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( buffer == rhs.buffer ) &&
( offset == rhs.offset ) && ( size == rhs.size );
+# endif
}
bool operator!=( BufferMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8527,9 +11958,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
VULKAN_HPP_NAMESPACE::DeviceSize size = {};
};
- static_assert( sizeof( BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferMemoryBarrier>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier ) == sizeof( VkBufferMemoryBarrier ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier>::value,
+ "BufferMemoryBarrier is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferMemoryBarrier>
@@ -8537,21 +11971,23 @@ namespace VULKAN_HPP_NAMESPACE
using Type = BufferMemoryBarrier;
};
- struct BufferMemoryBarrier2KHR
+ struct BufferMemoryBarrier2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier2KHR;
+ using NativeType = VkBufferMemoryBarrier2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryBarrier2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask_ = {},
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask_ = {},
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask_ = {},
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask_ = {},
- uint32_t srcQueueFamilyIndex_ = {},
- uint32_t dstQueueFamilyIndex_ = {},
- VULKAN_HPP_NAMESPACE::Buffer buffer_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {},
+ VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {},
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {},
+ VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {},
+ uint32_t srcQueueFamilyIndex_ = {},
+ uint32_t dstQueueFamilyIndex_ = {},
+ VULKAN_HPP_NAMESPACE::Buffer buffer_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize size_ = {} ) VULKAN_HPP_NOEXCEPT
: srcStageMask( srcStageMask_ )
, srcAccessMask( srcAccessMask_ )
, dstStageMask( dstStageMask_ )
@@ -8563,143 +11999,187 @@ namespace VULKAN_HPP_NAMESPACE
, size( size_ )
{}
- VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2KHR( BufferMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR BufferMemoryBarrier2( BufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferMemoryBarrier2KHR( VkBufferMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : BufferMemoryBarrier2KHR( *reinterpret_cast<BufferMemoryBarrier2KHR const *>( &rhs ) )
+ BufferMemoryBarrier2( VkBufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : BufferMemoryBarrier2( *reinterpret_cast<BufferMemoryBarrier2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2KHR &
- operator=( BufferMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferMemoryBarrier2 & operator=( BufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- BufferMemoryBarrier2KHR & operator=( VkBufferMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ BufferMemoryBarrier2 & operator=( VkBufferMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferMemoryBarrier2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferMemoryBarrier2KHR &
- setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT
{
srcStageMask = srcStageMask_;
return *this;
}
- BufferMemoryBarrier2KHR &
- setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- BufferMemoryBarrier2KHR &
- setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT
{
dstStageMask = dstStageMask_;
return *this;
}
- BufferMemoryBarrier2KHR &
- setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
- BufferMemoryBarrier2KHR & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
srcQueueFamilyIndex = srcQueueFamilyIndex_;
return *this;
}
- BufferMemoryBarrier2KHR & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
dstQueueFamilyIndex = dstQueueFamilyIndex_;
return *this;
}
- BufferMemoryBarrier2KHR & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- BufferMemoryBarrier2KHR & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- BufferMemoryBarrier2KHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryBarrier2 & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferMemoryBarrier2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkBufferMemoryBarrier2 *>( this );
+ }
+
+ explicit operator VkBufferMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkBufferMemoryBarrier2KHR *>( this );
+ return *reinterpret_cast<VkBufferMemoryBarrier2 *>( this );
}
- operator VkBufferMemoryBarrier2KHR &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags2 const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags2 const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkBufferMemoryBarrier2KHR *>( this );
+ return std::tie( sType,
+ pNext,
+ srcStageMask,
+ srcAccessMask,
+ dstStageMask,
+ dstAccessMask,
+ srcQueueFamilyIndex,
+ dstQueueFamilyIndex,
+ buffer,
+ offset,
+ size );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( BufferMemoryBarrier2KHR const & ) const = default;
+ auto operator<=>( BufferMemoryBarrier2 const & ) const = default;
#else
- bool operator==( BufferMemoryBarrier2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( BufferMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) &&
( srcAccessMask == rhs.srcAccessMask ) && ( dstStageMask == rhs.dstStageMask ) &&
( dstAccessMask == rhs.dstAccessMask ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) &&
( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( buffer == rhs.buffer ) &&
( offset == rhs.offset ) && ( size == rhs.size );
+# endif
}
- bool operator!=( BufferMemoryBarrier2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( BufferMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryBarrier2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask = {};
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask = {};
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask = {};
- uint32_t srcQueueFamilyIndex = {};
- uint32_t dstQueueFamilyIndex = {};
- VULKAN_HPP_NAMESPACE::Buffer buffer = {};
- VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
- VULKAN_HPP_NAMESPACE::DeviceSize size = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eBufferMemoryBarrier2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {};
+ VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {};
+ VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {};
+ uint32_t srcQueueFamilyIndex = {};
+ uint32_t dstQueueFamilyIndex = {};
+ VULKAN_HPP_NAMESPACE::Buffer buffer = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize size = {};
};
- static_assert( sizeof( BufferMemoryBarrier2KHR ) == sizeof( VkBufferMemoryBarrier2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferMemoryBarrier2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 ) == sizeof( VkBufferMemoryBarrier2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2>::value,
+ "BufferMemoryBarrier2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eBufferMemoryBarrier2KHR>
+ struct CppType<StructureType, StructureType::eBufferMemoryBarrier2>
{
- using Type = BufferMemoryBarrier2KHR;
+ using Type = BufferMemoryBarrier2;
};
+ using BufferMemoryBarrier2KHR = BufferMemoryBarrier2;
struct BufferMemoryRequirementsInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryRequirementsInfo2;
+ using NativeType = VkBufferMemoryRequirementsInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferMemoryRequirementsInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR BufferMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -8714,8 +12194,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 &
- operator=( BufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferMemoryRequirementsInfo2 &
+ operator=( BufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferMemoryRequirementsInfo2 & operator=( VkBufferMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -8724,35 +12204,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferMemoryRequirementsInfo2 & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferMemoryRequirementsInfo2 &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferMemoryRequirementsInfo2 *>( this );
}
- operator VkBufferMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferMemoryRequirementsInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Buffer const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, buffer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferMemoryRequirementsInfo2 const & ) const = default;
#else
bool operator==( BufferMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer );
+# endif
}
bool operator!=( BufferMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8766,10 +12263,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Buffer buffer = {};
};
- static_assert( sizeof( BufferMemoryRequirementsInfo2 ) == sizeof( VkBufferMemoryRequirementsInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferMemoryRequirementsInfo2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2 ) ==
+ sizeof( VkBufferMemoryRequirementsInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferMemoryRequirementsInfo2>::value,
+ "BufferMemoryRequirementsInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferMemoryRequirementsInfo2>
@@ -8780,7 +12281,9 @@ namespace VULKAN_HPP_NAMESPACE
struct BufferOpaqueCaptureAddressCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkBufferOpaqueCaptureAddressCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eBufferOpaqueCaptureAddressCreateInfo;
@@ -8797,8 +12300,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo &
- operator=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferOpaqueCaptureAddressCreateInfo &
+ operator=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferOpaqueCaptureAddressCreateInfo &
operator=( VkBufferOpaqueCaptureAddressCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -8808,35 +12311,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferOpaqueCaptureAddressCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferOpaqueCaptureAddressCreateInfo & setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferOpaqueCaptureAddressCreateInfo &
+ setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT
{
opaqueCaptureAddress = opaqueCaptureAddress_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferOpaqueCaptureAddressCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferOpaqueCaptureAddressCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo *>( this );
}
- operator VkBufferOpaqueCaptureAddressCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferOpaqueCaptureAddressCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferOpaqueCaptureAddressCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, opaqueCaptureAddress );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferOpaqueCaptureAddressCreateInfo const & ) const = default;
#else
bool operator==( BufferOpaqueCaptureAddressCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureAddress == rhs.opaqueCaptureAddress );
+# endif
}
bool operator!=( BufferOpaqueCaptureAddressCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8850,10 +12370,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint64_t opaqueCaptureAddress = {};
};
- static_assert( sizeof( BufferOpaqueCaptureAddressCreateInfo ) == sizeof( VkBufferOpaqueCaptureAddressCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferOpaqueCaptureAddressCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo ) ==
+ sizeof( VkBufferOpaqueCaptureAddressCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferOpaqueCaptureAddressCreateInfo>::value,
+ "BufferOpaqueCaptureAddressCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferOpaqueCaptureAddressCreateInfo>
@@ -8864,8 +12388,10 @@ namespace VULKAN_HPP_NAMESPACE
struct BufferViewCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferViewCreateInfo;
+ using NativeType = VkBufferViewCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eBufferViewCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -8888,8 +12414,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo &
- operator=( BufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ BufferViewCreateInfo & operator=( BufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
BufferViewCreateInfo & operator=( VkBufferViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -8898,60 +12423,85 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- BufferViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- BufferViewCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::BufferViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- BufferViewCreateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- BufferViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- BufferViewCreateInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- BufferViewCreateInfo & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 BufferViewCreateInfo &
+ setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT
{
range = range_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkBufferViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkBufferViewCreateInfo *>( this );
}
- operator VkBufferViewCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkBufferViewCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkBufferViewCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferViewCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, buffer, format, offset, range );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( BufferViewCreateInfo const & ) const = default;
#else
bool operator==( BufferViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( buffer == rhs.buffer ) &&
( format == rhs.format ) && ( offset == rhs.offset ) && ( range == rhs.range );
+# endif
}
bool operator!=( BufferViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -8969,9 +12519,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
VULKAN_HPP_NAMESPACE::DeviceSize range = {};
};
- static_assert( sizeof( BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<BufferViewCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::BufferViewCreateInfo ) == sizeof( VkBufferViewCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::BufferViewCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::BufferViewCreateInfo>::value,
+ "BufferViewCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eBufferViewCreateInfo>
@@ -8981,8 +12534,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CalibratedTimestampInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCalibratedTimestampInfoEXT;
+ using NativeType = VkCalibratedTimestampInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCalibratedTimestampInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -8999,8 +12554,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoEXT &
- operator=( CalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CalibratedTimestampInfoEXT & operator=( CalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CalibratedTimestampInfoEXT & operator=( VkCalibratedTimestampInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9009,35 +12563,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CalibratedTimestampInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CalibratedTimestampInfoEXT & setTimeDomain( VULKAN_HPP_NAMESPACE::TimeDomainEXT timeDomain_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CalibratedTimestampInfoEXT &
+ setTimeDomain( VULKAN_HPP_NAMESPACE::TimeDomainEXT timeDomain_ ) VULKAN_HPP_NOEXCEPT
{
timeDomain = timeDomain_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCalibratedTimestampInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCalibratedTimestampInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCalibratedTimestampInfoEXT *>( this );
}
- operator VkCalibratedTimestampInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCalibratedTimestampInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCalibratedTimestampInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::TimeDomainEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, timeDomain );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CalibratedTimestampInfoEXT const & ) const = default;
#else
bool operator==( CalibratedTimestampInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timeDomain == rhs.timeDomain );
+# endif
}
bool operator!=( CalibratedTimestampInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9051,10 +12624,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::TimeDomainEXT timeDomain = VULKAN_HPP_NAMESPACE::TimeDomainEXT::eDevice;
};
- static_assert( sizeof( CalibratedTimestampInfoEXT ) == sizeof( VkCalibratedTimestampInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CalibratedTimestampInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT ) ==
+ sizeof( VkCalibratedTimestampInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CalibratedTimestampInfoEXT>::value,
+ "CalibratedTimestampInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCalibratedTimestampInfoEXT>
@@ -9064,12 +12640,14 @@ namespace VULKAN_HPP_NAMESPACE
struct CheckpointData2NV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointData2NV;
+ using NativeType = VkCheckpointData2NV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointData2NV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR CheckpointData2NV( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage_ = {},
- void * pCheckpointMarker_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR CheckpointData2NV( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage_ = {},
+ void * pCheckpointMarker_ = {} ) VULKAN_HPP_NOEXCEPT
: stage( stage_ )
, pCheckpointMarker( pCheckpointMarker_ )
{}
@@ -9081,8 +12659,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CheckpointData2NV &
- operator=( CheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CheckpointData2NV & operator=( CheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CheckpointData2NV & operator=( VkCheckpointData2NV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9090,23 +12667,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkCheckpointData2NV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCheckpointData2NV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCheckpointData2NV *>( this );
}
- operator VkCheckpointData2NV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCheckpointData2NV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCheckpointData2NV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stage, pCheckpointMarker );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CheckpointData2NV const & ) const = default;
#else
bool operator==( CheckpointData2NV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) &&
( pCheckpointMarker == rhs.pCheckpointMarker );
+# endif
}
bool operator!=( CheckpointData2NV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9116,14 +12712,17 @@ namespace VULKAN_HPP_NAMESPACE
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCheckpointData2NV;
- void * pNext = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stage = {};
- void * pCheckpointMarker = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCheckpointData2NV;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stage = {};
+ void * pCheckpointMarker = {};
};
- static_assert( sizeof( CheckpointData2NV ) == sizeof( VkCheckpointData2NV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CheckpointData2NV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CheckpointData2NV ) == sizeof( VkCheckpointData2NV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CheckpointData2NV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CheckpointData2NV>::value,
+ "CheckpointData2NV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCheckpointData2NV>
@@ -9133,8 +12732,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CheckpointDataNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointDataNV;
+ using NativeType = VkCheckpointDataNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCheckpointDataNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CheckpointDataNV(
@@ -9151,7 +12752,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CheckpointDataNV & operator=( CheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CheckpointDataNV & operator=( CheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CheckpointDataNV & operator=( VkCheckpointDataNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9159,23 +12760,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkCheckpointDataNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCheckpointDataNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCheckpointDataNV *>( this );
}
- operator VkCheckpointDataNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCheckpointDataNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCheckpointDataNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlagBits const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stage, pCheckpointMarker );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CheckpointDataNV const & ) const = default;
#else
bool operator==( CheckpointDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stage == rhs.stage ) &&
( pCheckpointMarker == rhs.pCheckpointMarker );
+# endif
}
bool operator!=( CheckpointDataNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9190,9 +12810,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineStageFlagBits stage = VULKAN_HPP_NAMESPACE::PipelineStageFlagBits::eTopOfPipe;
void * pCheckpointMarker = {};
};
- static_assert( sizeof( CheckpointDataNV ) == sizeof( VkCheckpointDataNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CheckpointDataNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CheckpointDataNV ) == sizeof( VkCheckpointDataNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CheckpointDataNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CheckpointDataNV>::value,
+ "CheckpointDataNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCheckpointDataNV>
@@ -9202,46 +12825,36 @@ namespace VULKAN_HPP_NAMESPACE
union ClearColorValue
{
+ using NativeType = VkClearColorValue;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- ClearColorValue( VULKAN_HPP_NAMESPACE::ClearColorValue const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::ClearColorValue ) );
- }
- ClearColorValue( const std::array<float, 4> & float32_ = {} ) : float32( float32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array<float, 4> & float32_ = {} ) : float32( float32_ ) {}
- ClearColorValue( const std::array<int32_t, 4> & int32_ ) : int32( int32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array<int32_t, 4> & int32_ ) : int32( int32_ ) {}
- ClearColorValue( const std::array<uint32_t, 4> & uint32_ ) : uint32( uint32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 ClearColorValue( const std::array<uint32_t, 4> & uint32_ ) : uint32( uint32_ ) {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- ClearColorValue & setFloat32( std::array<float, 4> float32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setFloat32( std::array<float, 4> float32_ ) VULKAN_HPP_NOEXCEPT
{
float32 = float32_;
return *this;
}
- ClearColorValue & setInt32( std::array<int32_t, 4> int32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setInt32( std::array<int32_t, 4> int32_ ) VULKAN_HPP_NOEXCEPT
{
int32 = int32_;
return *this;
}
- ClearColorValue & setUint32( std::array<uint32_t, 4> uint32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearColorValue & setUint32( std::array<uint32_t, 4> uint32_ ) VULKAN_HPP_NOEXCEPT
{
uint32 = uint32_;
return *this;
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::ClearColorValue &
- operator=( VULKAN_HPP_NAMESPACE::ClearColorValue const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::ClearColorValue ) );
- return *this;
- }
-
operator VkClearColorValue const &() const
{
return *reinterpret_cast<const VkClearColorValue *>( this );
@@ -9259,6 +12872,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ClearDepthStencilValue
{
+ using NativeType = VkClearDepthStencilValue;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ClearDepthStencilValue( float depth_ = {}, uint32_t stencil_ = {} ) VULKAN_HPP_NOEXCEPT
: depth( depth_ )
@@ -9272,8 +12887,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue &
- operator=( ClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ClearDepthStencilValue & operator=( ClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ClearDepthStencilValue & operator=( VkClearDepthStencilValue const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9282,35 +12896,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ClearDepthStencilValue & setDepth( float depth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue & setDepth( float depth_ ) VULKAN_HPP_NOEXCEPT
{
depth = depth_;
return *this;
}
- ClearDepthStencilValue & setStencil( uint32_t stencil_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearDepthStencilValue & setStencil( uint32_t stencil_ ) VULKAN_HPP_NOEXCEPT
{
stencil = stencil_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkClearDepthStencilValue const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkClearDepthStencilValue const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkClearDepthStencilValue *>( this );
}
- operator VkClearDepthStencilValue &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkClearDepthStencilValue &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkClearDepthStencilValue *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( depth, stencil );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ClearDepthStencilValue const & ) const = default;
#else
bool operator==( ClearDepthStencilValue const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( depth == rhs.depth ) && ( stencil == rhs.stencil );
+# endif
}
bool operator!=( ClearDepthStencilValue const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9323,31 +12953,35 @@ namespace VULKAN_HPP_NAMESPACE
float depth = {};
uint32_t stencil = {};
};
- static_assert( sizeof( ClearDepthStencilValue ) == sizeof( VkClearDepthStencilValue ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ClearDepthStencilValue>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue ) ==
+ sizeof( VkClearDepthStencilValue ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ClearDepthStencilValue>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ClearDepthStencilValue>::value,
+ "ClearDepthStencilValue is not nothrow_move_constructible!" );
union ClearValue
{
+ using NativeType = VkClearValue;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- ClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::ClearValue ) );
- }
- ClearValue( VULKAN_HPP_NAMESPACE::ClearColorValue color_ = {} ) : color( color_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 ClearValue( VULKAN_HPP_NAMESPACE::ClearColorValue color_ = {} ) : color( color_ ) {}
- ClearValue( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue depthStencil_ ) : depthStencil( depthStencil_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 ClearValue( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue depthStencil_ )
+ : depthStencil( depthStencil_ )
+ {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- ClearValue & setColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & color_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearValue &
+ setColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & color_ ) VULKAN_HPP_NOEXCEPT
{
color = color_;
return *this;
}
- ClearValue &
+ VULKAN_HPP_CONSTEXPR_14 ClearValue &
setDepthStencil( VULKAN_HPP_NAMESPACE::ClearDepthStencilValue const & depthStencil_ ) VULKAN_HPP_NOEXCEPT
{
depthStencil = depthStencil_;
@@ -9355,12 +12989,6 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::ClearValue & operator=( VULKAN_HPP_NAMESPACE::ClearValue const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::ClearValue ) );
- return *this;
- }
-
operator VkClearValue const &() const
{
return *reinterpret_cast<const VkClearValue *>( this );
@@ -9382,16 +13010,18 @@ namespace VULKAN_HPP_NAMESPACE
struct ClearAttachment
{
+ using NativeType = VkClearAttachment;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- ClearAttachment( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {},
- uint32_t colorAttachment_ = {},
- VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearAttachment( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {},
+ uint32_t colorAttachment_ = {},
+ VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {} ) VULKAN_HPP_NOEXCEPT
: aspectMask( aspectMask_ )
, colorAttachment( colorAttachment_ )
, clearValue( clearValue_ )
{}
- ClearAttachment( ClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 ClearAttachment( ClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ClearAttachment( VkClearAttachment const & rhs ) VULKAN_HPP_NOEXCEPT
: ClearAttachment( *reinterpret_cast<ClearAttachment const *>( &rhs ) )
@@ -9407,45 +13037,66 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ClearAttachment & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearAttachment &
+ setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
{
aspectMask = aspectMask_;
return *this;
}
- ClearAttachment & setColorAttachment( uint32_t colorAttachment_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearAttachment & setColorAttachment( uint32_t colorAttachment_ ) VULKAN_HPP_NOEXCEPT
{
colorAttachment = colorAttachment_;
return *this;
}
- ClearAttachment & setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearAttachment &
+ setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT
{
clearValue = clearValue_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkClearAttachment const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkClearAttachment const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkClearAttachment *>( this );
}
- operator VkClearAttachment &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkClearAttachment &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkClearAttachment *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::ImageAspectFlags const &, uint32_t const &, VULKAN_HPP_NAMESPACE::ClearValue const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( aspectMask, colorAttachment, clearValue );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {};
uint32_t colorAttachment = {};
VULKAN_HPP_NAMESPACE::ClearValue clearValue = {};
};
- static_assert( sizeof( ClearAttachment ) == sizeof( VkClearAttachment ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ClearAttachment>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearAttachment ) == sizeof( VkClearAttachment ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ClearAttachment>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ClearAttachment>::value,
+ "ClearAttachment is not nothrow_move_constructible!" );
struct ClearRect
{
+ using NativeType = VkClearRect;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ClearRect( VULKAN_HPP_NAMESPACE::Rect2D rect_ = {},
uint32_t baseArrayLayer_ = {},
@@ -9461,7 +13112,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ClearRect & operator=( ClearRect const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ClearRect & operator=( ClearRect const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ClearRect & operator=( VkClearRect const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9470,41 +13121,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ClearRect & setRect( VULKAN_HPP_NAMESPACE::Rect2D const & rect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearRect & setRect( VULKAN_HPP_NAMESPACE::Rect2D const & rect_ ) VULKAN_HPP_NOEXCEPT
{
rect = rect_;
return *this;
}
- ClearRect & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearRect & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
{
baseArrayLayer = baseArrayLayer_;
return *this;
}
- ClearRect & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ClearRect & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
{
layerCount = layerCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkClearRect const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkClearRect const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkClearRect *>( this );
}
- operator VkClearRect &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkClearRect &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkClearRect *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Rect2D const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( rect, baseArrayLayer, layerCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ClearRect const & ) const = default;
#else
bool operator==( ClearRect const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( rect == rhs.rect ) && ( baseArrayLayer == rhs.baseArrayLayer ) && ( layerCount == rhs.layerCount );
+# endif
}
bool operator!=( ClearRect const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9518,11 +13185,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t baseArrayLayer = {};
uint32_t layerCount = {};
};
- static_assert( sizeof( ClearRect ) == sizeof( VkClearRect ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ClearRect>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ClearRect ) == sizeof( VkClearRect ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ClearRect>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ClearRect>::value,
+ "ClearRect is not nothrow_move_constructible!" );
struct CoarseSampleLocationNV
{
+ using NativeType = VkCoarseSampleLocationNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
CoarseSampleLocationNV( uint32_t pixelX_ = {}, uint32_t pixelY_ = {}, uint32_t sample_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -9538,8 +13211,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV &
- operator=( CoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CoarseSampleLocationNV & operator=( CoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CoarseSampleLocationNV & operator=( VkCoarseSampleLocationNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9548,41 +13220,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CoarseSampleLocationNV & setPixelX( uint32_t pixelX_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setPixelX( uint32_t pixelX_ ) VULKAN_HPP_NOEXCEPT
{
pixelX = pixelX_;
return *this;
}
- CoarseSampleLocationNV & setPixelY( uint32_t pixelY_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setPixelY( uint32_t pixelY_ ) VULKAN_HPP_NOEXCEPT
{
pixelY = pixelY_;
return *this;
}
- CoarseSampleLocationNV & setSample( uint32_t sample_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleLocationNV & setSample( uint32_t sample_ ) VULKAN_HPP_NOEXCEPT
{
sample = sample_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCoarseSampleLocationNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCoarseSampleLocationNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCoarseSampleLocationNV *>( this );
}
- operator VkCoarseSampleLocationNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCoarseSampleLocationNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCoarseSampleLocationNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( pixelX, pixelY, sample );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CoarseSampleLocationNV const & ) const = default;
#else
bool operator==( CoarseSampleLocationNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( pixelX == rhs.pixelX ) && ( pixelY == rhs.pixelY ) && ( sample == rhs.sample );
+# endif
}
bool operator!=( CoarseSampleLocationNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9596,12 +13284,18 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t pixelY = {};
uint32_t sample = {};
};
- static_assert( sizeof( CoarseSampleLocationNV ) == sizeof( VkCoarseSampleLocationNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CoarseSampleLocationNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV ) ==
+ sizeof( VkCoarseSampleLocationNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV>::value,
+ "CoarseSampleLocationNV is not nothrow_move_constructible!" );
struct CoarseSampleOrderCustomNV
{
+ using NativeType = VkCoarseSampleOrderCustomNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CoarseSampleOrderCustomNV(
VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_ =
@@ -9636,8 +13330,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV &
- operator=( CoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CoarseSampleOrderCustomNV & operator=( CoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CoarseSampleOrderCustomNV & operator=( VkCoarseSampleOrderCustomNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9646,26 +13339,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CoarseSampleOrderCustomNV &
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV &
setShadingRate( VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV shadingRate_ ) VULKAN_HPP_NOEXCEPT
{
shadingRate = shadingRate_;
return *this;
}
- CoarseSampleOrderCustomNV & setSampleCount( uint32_t sampleCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV & setSampleCount( uint32_t sampleCount_ ) VULKAN_HPP_NOEXCEPT
{
sampleCount = sampleCount_;
return *this;
}
- CoarseSampleOrderCustomNV & setSampleLocationCount( uint32_t sampleLocationCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV &
+ setSampleLocationCount( uint32_t sampleLocationCount_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationCount = sampleLocationCount_;
return *this;
}
- CoarseSampleOrderCustomNV &
+ VULKAN_HPP_CONSTEXPR_14 CoarseSampleOrderCustomNV &
setPSampleLocations( const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations_ ) VULKAN_HPP_NOEXCEPT
{
pSampleLocations = pSampleLocations_;
@@ -9684,23 +13378,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCoarseSampleOrderCustomNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCoarseSampleOrderCustomNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCoarseSampleOrderCustomNV *>( this );
}
- operator VkCoarseSampleOrderCustomNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCoarseSampleOrderCustomNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCoarseSampleOrderCustomNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( shadingRate, sampleCount, sampleLocationCount, pSampleLocations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CoarseSampleOrderCustomNV const & ) const = default;
#else
bool operator==( CoarseSampleOrderCustomNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( shadingRate == rhs.shadingRate ) && ( sampleCount == rhs.sampleCount ) &&
( sampleLocationCount == rhs.sampleLocationCount ) && ( pSampleLocations == rhs.pSampleLocations );
+# endif
}
bool operator!=( CoarseSampleOrderCustomNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9716,15 +13429,20 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t sampleLocationCount = {};
const VULKAN_HPP_NAMESPACE::CoarseSampleLocationNV * pSampleLocations = {};
};
- static_assert( sizeof( CoarseSampleOrderCustomNV ) == sizeof( VkCoarseSampleOrderCustomNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CoarseSampleOrderCustomNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV ) ==
+ sizeof( VkCoarseSampleOrderCustomNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV>::value,
+ "CoarseSampleOrderCustomNV is not nothrow_move_constructible!" );
struct CommandBufferAllocateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferAllocateInfo;
+ using NativeType = VkCommandBufferAllocateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferAllocateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CommandBufferAllocateInfo(
@@ -9744,8 +13462,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo &
- operator=( CommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferAllocateInfo & operator=( CommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandBufferAllocateInfo & operator=( VkCommandBufferAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9754,48 +13471,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferAllocateInfo & setCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo &
+ setCommandPool( VULKAN_HPP_NAMESPACE::CommandPool commandPool_ ) VULKAN_HPP_NOEXCEPT
{
commandPool = commandPool_;
return *this;
}
- CommandBufferAllocateInfo & setLevel( VULKAN_HPP_NAMESPACE::CommandBufferLevel level_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo &
+ setLevel( VULKAN_HPP_NAMESPACE::CommandBufferLevel level_ ) VULKAN_HPP_NOEXCEPT
{
level = level_;
return *this;
}
- CommandBufferAllocateInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferAllocateInfo &
+ setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT
{
commandBufferCount = commandBufferCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandBufferAllocateInfo *>( this );
}
- operator VkCommandBufferAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandBufferAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CommandPool const &,
+ VULKAN_HPP_NAMESPACE::CommandBufferLevel const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, commandPool, level, commandBufferCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandBufferAllocateInfo const & ) const = default;
#else
bool operator==( CommandBufferAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandPool == rhs.commandPool ) &&
( level == rhs.level ) && ( commandBufferCount == rhs.commandBufferCount );
+# endif
}
bool operator!=( CommandBufferAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9811,10 +13551,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CommandBufferLevel level = VULKAN_HPP_NAMESPACE::CommandBufferLevel::ePrimary;
uint32_t commandBufferCount = {};
};
- static_assert( sizeof( CommandBufferAllocateInfo ) == sizeof( VkCommandBufferAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferAllocateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo ) ==
+ sizeof( VkCommandBufferAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBufferAllocateInfo>::value,
+ "CommandBufferAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandBufferAllocateInfo>
@@ -9824,8 +13567,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CommandBufferInheritanceInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceInfo;
+ using NativeType = VkCommandBufferInheritanceInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferInheritanceInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CommandBufferInheritanceInfo(
@@ -9851,8 +13596,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo &
- operator=( CommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferInheritanceInfo & operator=( CommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandBufferInheritanceInfo & operator=( VkCommandBufferInheritanceInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9861,45 +13605,47 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferInheritanceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferInheritanceInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo &
+ setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
{
renderPass = renderPass_;
return *this;
}
- CommandBufferInheritanceInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT
{
subpass = subpass_;
return *this;
}
- CommandBufferInheritanceInfo & setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo &
+ setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT
{
framebuffer = framebuffer_;
return *this;
}
- CommandBufferInheritanceInfo &
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo &
setOcclusionQueryEnable( VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryEnable_ ) VULKAN_HPP_NOEXCEPT
{
occlusionQueryEnable = occlusionQueryEnable_;
return *this;
}
- CommandBufferInheritanceInfo &
- setQueryFlags( VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo &
+ setQueryFlags( VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags_ ) VULKAN_HPP_NOEXCEPT
{
queryFlags = queryFlags_;
return *this;
}
- CommandBufferInheritanceInfo &
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceInfo &
setPipelineStatistics( VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ ) VULKAN_HPP_NOEXCEPT
{
pipelineStatistics = pipelineStatistics_;
@@ -9907,25 +13653,49 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferInheritanceInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandBufferInheritanceInfo *>( this );
}
- operator VkCommandBufferInheritanceInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandBufferInheritanceInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RenderPass const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Framebuffer const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::QueryControlFlags const &,
+ VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, renderPass, subpass, framebuffer, occlusionQueryEnable, queryFlags, pipelineStatistics );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandBufferInheritanceInfo const & ) const = default;
#else
bool operator==( CommandBufferInheritanceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) &&
( subpass == rhs.subpass ) && ( framebuffer == rhs.framebuffer ) &&
( occlusionQueryEnable == rhs.occlusionQueryEnable ) && ( queryFlags == rhs.queryFlags ) &&
( pipelineStatistics == rhs.pipelineStatistics );
+# endif
}
bool operator!=( CommandBufferInheritanceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -9944,10 +13714,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::QueryControlFlags queryFlags = {};
VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics = {};
};
- static_assert( sizeof( CommandBufferInheritanceInfo ) == sizeof( VkCommandBufferInheritanceInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferInheritanceInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo ) ==
+ sizeof( VkCommandBufferInheritanceInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo>::value,
+ "CommandBufferInheritanceInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandBufferInheritanceInfo>
@@ -9957,8 +13731,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CommandBufferBeginInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferBeginInfo;
+ using NativeType = VkCommandBufferBeginInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferBeginInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CommandBufferBeginInfo(
@@ -9975,8 +13751,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo &
- operator=( CommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferBeginInfo & operator=( CommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandBufferBeginInfo & operator=( VkCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -9985,19 +13760,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferBeginInfo & setFlags( VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- CommandBufferBeginInfo & setPInheritanceInfo(
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferBeginInfo & setPInheritanceInfo(
const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo_ ) VULKAN_HPP_NOEXCEPT
{
pInheritanceInfo = pInheritanceInfo_;
@@ -10005,23 +13781,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandBufferBeginInfo *>( this );
}
- operator VkCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandBufferBeginInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags const &,
+ const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pInheritanceInfo );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandBufferBeginInfo const & ) const = default;
#else
bool operator==( CommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pInheritanceInfo == rhs.pInheritanceInfo );
+# endif
}
bool operator!=( CommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10036,9 +13831,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CommandBufferUsageFlags flags = {};
const VULKAN_HPP_NAMESPACE::CommandBufferInheritanceInfo * pInheritanceInfo = {};
};
- static_assert( sizeof( CommandBufferBeginInfo ) == sizeof( VkCommandBufferBeginInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferBeginInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo ) ==
+ sizeof( VkCommandBufferBeginInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBufferBeginInfo>::value,
+ "CommandBufferBeginInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandBufferBeginInfo>
@@ -10048,7 +13847,9 @@ namespace VULKAN_HPP_NAMESPACE
struct CommandBufferInheritanceConditionalRenderingInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkCommandBufferInheritanceConditionalRenderingInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT;
@@ -10068,8 +13869,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT &
- operator=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferInheritanceConditionalRenderingInfoEXT &
+ operator=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandBufferInheritanceConditionalRenderingInfoEXT &
operator=( VkCommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -10080,13 +13881,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferInheritanceConditionalRenderingInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferInheritanceConditionalRenderingInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceConditionalRenderingInfoEXT &
setConditionalRenderingEnable( VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable_ ) VULKAN_HPP_NOEXCEPT
{
conditionalRenderingEnable = conditionalRenderingEnable_;
@@ -10094,23 +13896,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferInheritanceConditionalRenderingInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceConditionalRenderingInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT *>( this );
}
- operator VkCommandBufferInheritanceConditionalRenderingInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceConditionalRenderingInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, conditionalRenderingEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandBufferInheritanceConditionalRenderingInfoEXT const & ) const = default;
#else
bool operator==( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( conditionalRenderingEnable == rhs.conditionalRenderingEnable );
+# endif
}
bool operator!=( CommandBufferInheritanceConditionalRenderingInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10124,11 +13942,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 conditionalRenderingEnable = {};
};
- static_assert( sizeof( CommandBufferInheritanceConditionalRenderingInfoEXT ) ==
- sizeof( VkCommandBufferInheritanceConditionalRenderingInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferInheritanceConditionalRenderingInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT ) ==
+ sizeof( VkCommandBufferInheritanceConditionalRenderingInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::CommandBufferInheritanceConditionalRenderingInfoEXT>::value,
+ "CommandBufferInheritanceConditionalRenderingInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandBufferInheritanceConditionalRenderingInfoEXT>
@@ -10138,7 +13960,9 @@ namespace VULKAN_HPP_NAMESPACE
struct CommandBufferInheritanceRenderPassTransformInfoQCOM
{
- static const bool allowDuplicate = false;
+ using NativeType = VkCommandBufferInheritanceRenderPassTransformInfoQCOM;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM;
@@ -10161,8 +13985,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM &
- operator=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferInheritanceRenderPassTransformInfoQCOM &
+ operator=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandBufferInheritanceRenderPassTransformInfoQCOM &
operator=( VkCommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -10173,44 +13997,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferInheritanceRenderPassTransformInfoQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferInheritanceRenderPassTransformInfoQCOM &
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM &
setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT
{
transform = transform_;
return *this;
}
- CommandBufferInheritanceRenderPassTransformInfoQCOM &
- setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderPassTransformInfoQCOM &
+ setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT
{
renderArea = renderArea_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM *>( this );
}
- operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceRenderPassTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandBufferInheritanceRenderPassTransformInfoQCOM *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::Rect2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, transform, renderArea );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandBufferInheritanceRenderPassTransformInfoQCOM const & ) const = default;
#else
bool operator==( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform ) &&
( renderArea == rhs.renderArea );
+# endif
}
bool operator!=( CommandBufferInheritanceRenderPassTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10226,11 +14070,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity;
VULKAN_HPP_NAMESPACE::Rect2D renderArea = {};
};
- static_assert( sizeof( CommandBufferInheritanceRenderPassTransformInfoQCOM ) ==
- sizeof( VkCommandBufferInheritanceRenderPassTransformInfoQCOM ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferInheritanceRenderPassTransformInfoQCOM>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM ) ==
+ sizeof( VkCommandBufferInheritanceRenderPassTransformInfoQCOM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderPassTransformInfoQCOM>::value,
+ "CommandBufferInheritanceRenderPassTransformInfoQCOM is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandBufferInheritanceRenderPassTransformInfoQCOM>
@@ -10238,8 +14086,230 @@ namespace VULKAN_HPP_NAMESPACE
using Type = CommandBufferInheritanceRenderPassTransformInfoQCOM;
};
+ struct CommandBufferInheritanceRenderingInfo
+ {
+ using NativeType = VkCommandBufferInheritanceRenderingInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eCommandBufferInheritanceRenderingInfo;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR CommandBufferInheritanceRenderingInfo(
+ VULKAN_HPP_NAMESPACE::RenderingFlags flags_ = {},
+ uint32_t viewMask_ = {},
+ uint32_t colorAttachmentCount_ = {},
+ const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {},
+ VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1 )
+ VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
+ , viewMask( viewMask_ )
+ , colorAttachmentCount( colorAttachmentCount_ )
+ , pColorAttachmentFormats( pColorAttachmentFormats_ )
+ , depthAttachmentFormat( depthAttachmentFormat_ )
+ , stencilAttachmentFormat( stencilAttachmentFormat_ )
+ , rasterizationSamples( rasterizationSamples_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR CommandBufferInheritanceRenderingInfo( CommandBufferInheritanceRenderingInfo const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ CommandBufferInheritanceRenderingInfo( VkCommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : CommandBufferInheritanceRenderingInfo(
+ *reinterpret_cast<CommandBufferInheritanceRenderingInfo const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ CommandBufferInheritanceRenderingInfo(
+ VULKAN_HPP_NAMESPACE::RenderingFlags flags_,
+ uint32_t viewMask_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::Format> const & colorAttachmentFormats_,
+ VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1 )
+ : flags( flags_ )
+ , viewMask( viewMask_ )
+ , colorAttachmentCount( static_cast<uint32_t>( colorAttachmentFormats_.size() ) )
+ , pColorAttachmentFormats( colorAttachmentFormats_.data() )
+ , depthAttachmentFormat( depthAttachmentFormat_ )
+ , stencilAttachmentFormat( stencilAttachmentFormat_ )
+ , rasterizationSamples( rasterizationSamples_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ CommandBufferInheritanceRenderingInfo &
+ operator=( CommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ CommandBufferInheritanceRenderingInfo &
+ operator=( VkCommandBufferInheritanceRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ flags = flags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT
+ {
+ viewMask = viewMask_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = colorAttachmentCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pColorAttachmentFormats = pColorAttachmentFormats_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ CommandBufferInheritanceRenderingInfo & setColorAttachmentFormats(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::Format> const &
+ colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = static_cast<uint32_t>( colorAttachmentFormats_.size() );
+ pColorAttachmentFormats = colorAttachmentFormats_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT
+ {
+ depthAttachmentFormat = depthAttachmentFormat_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT
+ {
+ stencilAttachmentFormat = stencilAttachmentFormat_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceRenderingInfo &
+ setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT
+ {
+ rasterizationSamples = rasterizationSamples_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkCommandBufferInheritanceRenderingInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkCommandBufferInheritanceRenderingInfo *>( this );
+ }
+
+ explicit operator VkCommandBufferInheritanceRenderingInfo &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkCommandBufferInheritanceRenderingInfo *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RenderingFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Format * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ viewMask,
+ colorAttachmentCount,
+ pColorAttachmentFormats,
+ depthAttachmentFormat,
+ stencilAttachmentFormat,
+ rasterizationSamples );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( CommandBufferInheritanceRenderingInfo const & ) const = default;
+#else
+ bool operator==( CommandBufferInheritanceRenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
+ ( viewMask == rhs.viewMask ) && ( colorAttachmentCount == rhs.colorAttachmentCount ) &&
+ ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) &&
+ ( depthAttachmentFormat == rhs.depthAttachmentFormat ) &&
+ ( stencilAttachmentFormat == rhs.stencilAttachmentFormat ) &&
+ ( rasterizationSamples == rhs.rasterizationSamples );
+# endif
+ }
+
+ bool operator!=( CommandBufferInheritanceRenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferInheritanceRenderingInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::RenderingFlags flags = {};
+ uint32_t viewMask = {};
+ uint32_t colorAttachmentCount = {};
+ const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {};
+ VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo ) ==
+ sizeof( VkCommandBufferInheritanceRenderingInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceRenderingInfo>::value,
+ "CommandBufferInheritanceRenderingInfo is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eCommandBufferInheritanceRenderingInfo>
+ {
+ using Type = CommandBufferInheritanceRenderingInfo;
+ };
+ using CommandBufferInheritanceRenderingInfoKHR = CommandBufferInheritanceRenderingInfo;
+
struct Viewport
{
+ using NativeType = VkViewport;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR Viewport( float x_ = {},
float y_ = {},
@@ -10260,7 +14330,7 @@ namespace VULKAN_HPP_NAMESPACE
Viewport( VkViewport const & rhs ) VULKAN_HPP_NOEXCEPT : Viewport( *reinterpret_cast<Viewport const *>( &rhs ) ) {}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Viewport & operator=( Viewport const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Viewport & operator=( Viewport const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Viewport & operator=( VkViewport const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -10269,60 +14339,76 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Viewport & setX( float x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Viewport & setX( float x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- Viewport & setY( float y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Viewport & setY( float y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
- Viewport & setWidth( float width_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Viewport & setWidth( float width_ ) VULKAN_HPP_NOEXCEPT
{
width = width_;
return *this;
}
- Viewport & setHeight( float height_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Viewport & setHeight( float height_ ) VULKAN_HPP_NOEXCEPT
{
height = height_;
return *this;
}
- Viewport & setMinDepth( float minDepth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Viewport & setMinDepth( float minDepth_ ) VULKAN_HPP_NOEXCEPT
{
minDepth = minDepth_;
return *this;
}
- Viewport & setMaxDepth( float maxDepth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Viewport & setMaxDepth( float maxDepth_ ) VULKAN_HPP_NOEXCEPT
{
maxDepth = maxDepth_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkViewport const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkViewport const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkViewport *>( this );
}
- operator VkViewport &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkViewport &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkViewport *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &, float const &, float const &, float const &, float const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y, width, height, minDepth, maxDepth );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Viewport const & ) const = default;
#else
bool operator==( Viewport const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y ) && ( width == rhs.width ) && ( height == rhs.height ) &&
( minDepth == rhs.minDepth ) && ( maxDepth == rhs.maxDepth );
+# endif
}
bool operator!=( Viewport const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10339,12 +14425,18 @@ namespace VULKAN_HPP_NAMESPACE
float minDepth = {};
float maxDepth = {};
};
- static_assert( sizeof( Viewport ) == sizeof( VkViewport ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Viewport>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Viewport ) == sizeof( VkViewport ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Viewport>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Viewport>::value,
+ "Viewport is not nothrow_move_constructible!" );
struct CommandBufferInheritanceViewportScissorInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkCommandBufferInheritanceViewportScissorInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eCommandBufferInheritanceViewportScissorInfoNV;
@@ -10368,8 +14460,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV &
- operator=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferInheritanceViewportScissorInfoNV &
+ operator=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandBufferInheritanceViewportScissorInfoNV &
operator=( VkCommandBufferInheritanceViewportScissorInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -10379,27 +14471,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferInheritanceViewportScissorInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferInheritanceViewportScissorInfoNV &
- setViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV &
+ setViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 viewportScissor2D_ ) VULKAN_HPP_NOEXCEPT
{
viewportScissor2D = viewportScissor2D_;
return *this;
}
- CommandBufferInheritanceViewportScissorInfoNV &
- setViewportDepthCount( uint32_t viewportDepthCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV &
+ setViewportDepthCount( uint32_t viewportDepthCount_ ) VULKAN_HPP_NOEXCEPT
{
viewportDepthCount = viewportDepthCount_;
return *this;
}
- CommandBufferInheritanceViewportScissorInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferInheritanceViewportScissorInfoNV &
setPViewportDepths( const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths_ ) VULKAN_HPP_NOEXCEPT
{
pViewportDepths = pViewportDepths_;
@@ -10407,23 +14500,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferInheritanceViewportScissorInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceViewportScissorInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandBufferInheritanceViewportScissorInfoNV *>( this );
}
- operator VkCommandBufferInheritanceViewportScissorInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferInheritanceViewportScissorInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandBufferInheritanceViewportScissorInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Viewport * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, viewportScissor2D, viewportDepthCount, pViewportDepths );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandBufferInheritanceViewportScissorInfoNV const & ) const = default;
#else
bool operator==( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewportScissor2D == rhs.viewportScissor2D ) &&
( viewportDepthCount == rhs.viewportDepthCount ) && ( pViewportDepths == rhs.pViewportDepths );
+# endif
}
bool operator!=( CommandBufferInheritanceViewportScissorInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10439,11 +14552,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t viewportDepthCount = {};
const VULKAN_HPP_NAMESPACE::Viewport * pViewportDepths = {};
};
- static_assert( sizeof( CommandBufferInheritanceViewportScissorInfoNV ) ==
- sizeof( VkCommandBufferInheritanceViewportScissorInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferInheritanceViewportScissorInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV ) ==
+ sizeof( VkCommandBufferInheritanceViewportScissorInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBufferInheritanceViewportScissorInfoNV>::value,
+ "CommandBufferInheritanceViewportScissorInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandBufferInheritanceViewportScissorInfoNV>
@@ -10451,102 +14568,127 @@ namespace VULKAN_HPP_NAMESPACE
using Type = CommandBufferInheritanceViewportScissorInfoNV;
};
- struct CommandBufferSubmitInfoKHR
+ struct CommandBufferSubmitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferSubmitInfoKHR;
+ using NativeType = VkCommandBufferSubmitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandBufferSubmitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfoKHR( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ = {},
- uint32_t deviceMask_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfo( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ = {},
+ uint32_t deviceMask_ = {} ) VULKAN_HPP_NOEXCEPT
: commandBuffer( commandBuffer_ )
, deviceMask( deviceMask_ )
{}
- VULKAN_HPP_CONSTEXPR
- CommandBufferSubmitInfoKHR( CommandBufferSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR CommandBufferSubmitInfo( CommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CommandBufferSubmitInfoKHR( VkCommandBufferSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : CommandBufferSubmitInfoKHR( *reinterpret_cast<CommandBufferSubmitInfoKHR const *>( &rhs ) )
+ CommandBufferSubmitInfo( VkCommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : CommandBufferSubmitInfo( *reinterpret_cast<CommandBufferSubmitInfo const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfoKHR &
- operator=( CommandBufferSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandBufferSubmitInfo & operator=( CommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CommandBufferSubmitInfoKHR & operator=( VkCommandBufferSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ CommandBufferSubmitInfo & operator=( VkCommandBufferSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandBufferSubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandBufferSubmitInfoKHR &
- setCommandBuffer( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo &
+ setCommandBuffer( VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer_ ) VULKAN_HPP_NOEXCEPT
{
commandBuffer = commandBuffer_;
return *this;
}
- CommandBufferSubmitInfoKHR & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandBufferSubmitInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
{
deviceMask = deviceMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandBufferSubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandBufferSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkCommandBufferSubmitInfo *>( this );
+ }
+
+ explicit operator VkCommandBufferSubmitInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkCommandBufferSubmitInfoKHR *>( this );
+ return *reinterpret_cast<VkCommandBufferSubmitInfo *>( this );
}
- operator VkCommandBufferSubmitInfoKHR &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CommandBuffer const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkCommandBufferSubmitInfoKHR *>( this );
+ return std::tie( sType, pNext, commandBuffer, deviceMask );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( CommandBufferSubmitInfoKHR const & ) const = default;
+ auto operator<=>( CommandBufferSubmitInfo const & ) const = default;
#else
- bool operator==( CommandBufferSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( CommandBufferSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( commandBuffer == rhs.commandBuffer ) &&
( deviceMask == rhs.deviceMask );
+# endif
}
- bool operator!=( CommandBufferSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( CommandBufferSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferSubmitInfoKHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCommandBufferSubmitInfo;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::CommandBuffer commandBuffer = {};
uint32_t deviceMask = {};
};
- static_assert( sizeof( CommandBufferSubmitInfoKHR ) == sizeof( VkCommandBufferSubmitInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandBufferSubmitInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo ) ==
+ sizeof( VkCommandBufferSubmitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo>::value,
+ "CommandBufferSubmitInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eCommandBufferSubmitInfoKHR>
+ struct CppType<StructureType, StructureType::eCommandBufferSubmitInfo>
{
- using Type = CommandBufferSubmitInfoKHR;
+ using Type = CommandBufferSubmitInfo;
};
+ using CommandBufferSubmitInfoKHR = CommandBufferSubmitInfo;
struct CommandPoolCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandPoolCreateInfo;
+ using NativeType = VkCommandPoolCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCommandPoolCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CommandPoolCreateInfo( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ = {},
@@ -10562,8 +14704,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo &
- operator=( CommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CommandPoolCreateInfo & operator=( CommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CommandPoolCreateInfo & operator=( VkCommandPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -10572,42 +14713,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CommandPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CommandPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- CommandPoolCreateInfo & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CommandPoolCreateInfo &
+ setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndex = queueFamilyIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCommandPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCommandPoolCreateInfo *>( this );
}
- operator VkCommandPoolCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCommandPoolCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCommandPoolCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, queueFamilyIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CommandPoolCreateInfo const & ) const = default;
#else
bool operator==( CommandPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( queueFamilyIndex == rhs.queueFamilyIndex );
+# endif
}
bool operator!=( CommandPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10622,9 +14784,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CommandPoolCreateFlags flags = {};
uint32_t queueFamilyIndex = {};
};
- static_assert( sizeof( CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CommandPoolCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo ) == sizeof( VkCommandPoolCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CommandPoolCreateInfo>::value,
+ "CommandPoolCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCommandPoolCreateInfo>
@@ -10634,6 +14799,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SpecializationMapEntry
{
+ using NativeType = VkSpecializationMapEntry;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SpecializationMapEntry( uint32_t constantID_ = {}, uint32_t offset_ = {}, size_t size_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -10649,8 +14816,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry &
- operator=( SpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SpecializationMapEntry & operator=( SpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SpecializationMapEntry & operator=( VkSpecializationMapEntry const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -10659,41 +14825,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SpecializationMapEntry & setConstantID( uint32_t constantID_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setConstantID( uint32_t constantID_ ) VULKAN_HPP_NOEXCEPT
{
constantID = constantID_;
return *this;
}
- SpecializationMapEntry & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- SpecializationMapEntry & setSize( size_t size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SpecializationMapEntry & setSize( size_t size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSpecializationMapEntry const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSpecializationMapEntry const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSpecializationMapEntry *>( this );
}
- operator VkSpecializationMapEntry &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSpecializationMapEntry &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSpecializationMapEntry *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, size_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( constantID, offset, size );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SpecializationMapEntry const & ) const = default;
#else
bool operator==( SpecializationMapEntry const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( constantID == rhs.constantID ) && ( offset == rhs.offset ) && ( size == rhs.size );
+# endif
}
bool operator!=( SpecializationMapEntry const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10707,12 +14889,18 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t offset = {};
size_t size = {};
};
- static_assert( sizeof( SpecializationMapEntry ) == sizeof( VkSpecializationMapEntry ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SpecializationMapEntry>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SpecializationMapEntry ) ==
+ sizeof( VkSpecializationMapEntry ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SpecializationMapEntry>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SpecializationMapEntry>::value,
+ "SpecializationMapEntry is not nothrow_move_constructible!" );
struct SpecializationInfo
{
+ using NativeType = VkSpecializationInfo;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SpecializationInfo( uint32_t mapEntryCount_ = {},
const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries_ = {},
@@ -10743,8 +14931,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SpecializationInfo &
- operator=( SpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SpecializationInfo & operator=( SpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SpecializationInfo & operator=( VkSpecializationInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -10753,13 +14940,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SpecializationInfo & setMapEntryCount( uint32_t mapEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setMapEntryCount( uint32_t mapEntryCount_ ) VULKAN_HPP_NOEXCEPT
{
mapEntryCount = mapEntryCount_;
return *this;
}
- SpecializationInfo &
+ VULKAN_HPP_CONSTEXPR_14 SpecializationInfo &
setPMapEntries( const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * pMapEntries_ ) VULKAN_HPP_NOEXCEPT
{
pMapEntries = pMapEntries_;
@@ -10777,13 +14964,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SpecializationInfo & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT
{
dataSize = dataSize_;
return *this;
}
- SpecializationInfo & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SpecializationInfo & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT
{
pData = pData_;
return *this;
@@ -10801,23 +14988,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSpecializationInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSpecializationInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSpecializationInfo *>( this );
}
- operator VkSpecializationInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSpecializationInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSpecializationInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SpecializationMapEntry * const &,
+ size_t const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( mapEntryCount, pMapEntries, dataSize, pData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SpecializationInfo const & ) const = default;
#else
bool operator==( SpecializationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( mapEntryCount == rhs.mapEntryCount ) && ( pMapEntries == rhs.pMapEntries ) &&
( dataSize == rhs.dataSize ) && ( pData == rhs.pData );
+# endif
}
bool operator!=( SpecializationInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -10832,14 +15038,19 @@ namespace VULKAN_HPP_NAMESPACE
size_t dataSize = {};
const void * pData = {};
};
- static_assert( sizeof( SpecializationInfo ) == sizeof( VkSpecializationInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SpecializationInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SpecializationInfo ) == sizeof( VkSpecializationInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SpecializationInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SpecializationInfo>::value,
+ "SpecializationInfo is not nothrow_move_constructible!" );
struct PipelineShaderStageCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageCreateInfo;
+ using NativeType = VkPipelineShaderStageCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineShaderStageCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineShaderStageCreateInfo(
@@ -10863,8 +15074,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo &
- operator=( PipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineShaderStageCreateInfo &
+ operator=( PipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineShaderStageCreateInfo & operator=( VkPipelineShaderStageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -10873,38 +15084,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineShaderStageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineShaderStageCreateInfo &
- setFlags( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineShaderStageCreateInfo & setStage( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo &
+ setStage( VULKAN_HPP_NAMESPACE::ShaderStageFlagBits stage_ ) VULKAN_HPP_NOEXCEPT
{
stage = stage_;
return *this;
}
- PipelineShaderStageCreateInfo & setModule( VULKAN_HPP_NAMESPACE::ShaderModule module_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo &
+ setModule( VULKAN_HPP_NAMESPACE::ShaderModule module_ ) VULKAN_HPP_NOEXCEPT
{
module = module_;
return *this;
}
- PipelineShaderStageCreateInfo & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT
{
pName = pName_;
return *this;
}
- PipelineShaderStageCreateInfo & setPSpecializationInfo(
+ VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageCreateInfo & setPSpecializationInfo(
const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo_ ) VULKAN_HPP_NOEXCEPT
{
pSpecializationInfo = pSpecializationInfo_;
@@ -10912,30 +15125,68 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineShaderStageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineShaderStageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineShaderStageCreateInfo *>( this );
}
- operator VkPipelineShaderStageCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineShaderStageCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineShaderStageCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlagBits const &,
+ VULKAN_HPP_NAMESPACE::ShaderModule const &,
+ const char * const &,
+ const VULKAN_HPP_NAMESPACE::SpecializationInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, stage, module, pName, pSpecializationInfo );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PipelineShaderStageCreateInfo const & ) const = default;
-#else
+ std::strong_ordering operator<=>( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = stage <=> rhs.stage; cmp != 0 )
+ return cmp;
+ if ( auto cmp = module <=> rhs.module; cmp != 0 )
+ return cmp;
+ if ( pName != rhs.pName )
+ if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = pSpecializationInfo <=> rhs.pSpecializationInfo; cmp != 0 )
+ return cmp;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) &&
- ( module == rhs.module ) && ( pName == rhs.pName ) && ( pSpecializationInfo == rhs.pSpecializationInfo );
+ ( module == rhs.module ) && ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) ) &&
+ ( pSpecializationInfo == rhs.pSpecializationInfo );
}
bool operator!=( PipelineShaderStageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageCreateInfo;
@@ -10946,10 +15197,14 @@ namespace VULKAN_HPP_NAMESPACE
const char * pName = {};
const VULKAN_HPP_NAMESPACE::SpecializationInfo * pSpecializationInfo = {};
};
- static_assert( sizeof( PipelineShaderStageCreateInfo ) == sizeof( VkPipelineShaderStageCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineShaderStageCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo ) ==
+ sizeof( VkPipelineShaderStageCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo>::value,
+ "PipelineShaderStageCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineShaderStageCreateInfo>
@@ -10959,8 +15214,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ComputePipelineCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eComputePipelineCreateInfo;
+ using NativeType = VkComputePipelineCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eComputePipelineCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ComputePipelineCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ = {},
@@ -10983,8 +15240,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo &
- operator=( ComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ComputePipelineCreateInfo & operator=( ComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ComputePipelineCreateInfo & operator=( VkComputePipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -10993,63 +15249,88 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ComputePipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ComputePipelineCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ComputePipelineCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo &
setStage( VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const & stage_ ) VULKAN_HPP_NOEXCEPT
{
stage = stage_;
return *this;
}
- ComputePipelineCreateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo &
+ setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
{
layout = layout_;
return *this;
}
- ComputePipelineCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo &
setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineHandle = basePipelineHandle_;
return *this;
}
- ComputePipelineCreateInfo & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ComputePipelineCreateInfo &
+ setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineIndex = basePipelineIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkComputePipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkComputePipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkComputePipelineCreateInfo *>( this );
}
- operator VkComputePipelineCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkComputePipelineCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkComputePipelineCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayout const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, stage, layout, basePipelineHandle, basePipelineIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ComputePipelineCreateInfo const & ) const = default;
#else
bool operator==( ComputePipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( stage == rhs.stage ) &&
( layout == rhs.layout ) && ( basePipelineHandle == rhs.basePipelineHandle ) &&
( basePipelineIndex == rhs.basePipelineIndex );
+# endif
}
bool operator!=( ComputePipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -11067,10 +15348,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {};
int32_t basePipelineIndex = {};
};
- static_assert( sizeof( ComputePipelineCreateInfo ) == sizeof( VkComputePipelineCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ComputePipelineCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo ) ==
+ sizeof( VkComputePipelineCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ComputePipelineCreateInfo>::value,
+ "ComputePipelineCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eComputePipelineCreateInfo>
@@ -11080,7 +15364,9 @@ namespace VULKAN_HPP_NAMESPACE
struct ConditionalRenderingBeginInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkConditionalRenderingBeginInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eConditionalRenderingBeginInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -11101,8 +15387,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT &
- operator=( ConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ConditionalRenderingBeginInfoEXT &
+ operator=( ConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ConditionalRenderingBeginInfoEXT & operator=( VkConditionalRenderingBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -11111,49 +15397,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ConditionalRenderingBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ConditionalRenderingBeginInfoEXT & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- ConditionalRenderingBeginInfoEXT & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- ConditionalRenderingBeginInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConditionalRenderingBeginInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkConditionalRenderingBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkConditionalRenderingBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkConditionalRenderingBeginInfoEXT *>( this );
}
- operator VkConditionalRenderingBeginInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkConditionalRenderingBeginInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkConditionalRenderingBeginInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, buffer, offset, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ConditionalRenderingBeginInfoEXT const & ) const = default;
#else
bool operator==( ConditionalRenderingBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer ) && ( offset == rhs.offset ) &&
( flags == rhs.flags );
+# endif
}
bool operator!=( ConditionalRenderingBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -11169,10 +15477,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
VULKAN_HPP_NAMESPACE::ConditionalRenderingFlagsEXT flags = {};
};
- static_assert( sizeof( ConditionalRenderingBeginInfoEXT ) == sizeof( VkConditionalRenderingBeginInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ConditionalRenderingBeginInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT ) ==
+ sizeof( VkConditionalRenderingBeginInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ConditionalRenderingBeginInfoEXT>::value,
+ "ConditionalRenderingBeginInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eConditionalRenderingBeginInfoEXT>
@@ -11182,6 +15494,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ConformanceVersion
{
+ using NativeType = VkConformanceVersion;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ConformanceVersion( uint8_t major_ = {},
uint8_t minor_ = {},
@@ -11200,8 +15514,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ConformanceVersion &
- operator=( ConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ConformanceVersion & operator=( ConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ConformanceVersion & operator=( VkConformanceVersion const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -11210,47 +15523,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ConformanceVersion & setMajor( uint8_t major_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setMajor( uint8_t major_ ) VULKAN_HPP_NOEXCEPT
{
major = major_;
return *this;
}
- ConformanceVersion & setMinor( uint8_t minor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setMinor( uint8_t minor_ ) VULKAN_HPP_NOEXCEPT
{
minor = minor_;
return *this;
}
- ConformanceVersion & setSubminor( uint8_t subminor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setSubminor( uint8_t subminor_ ) VULKAN_HPP_NOEXCEPT
{
subminor = subminor_;
return *this;
}
- ConformanceVersion & setPatch( uint8_t patch_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ConformanceVersion & setPatch( uint8_t patch_ ) VULKAN_HPP_NOEXCEPT
{
patch = patch_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkConformanceVersion const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkConformanceVersion const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkConformanceVersion *>( this );
}
- operator VkConformanceVersion &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkConformanceVersion &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkConformanceVersion *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint8_t const &, uint8_t const &, uint8_t const &, uint8_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( major, minor, subminor, patch );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ConformanceVersion const & ) const = default;
#else
bool operator==( ConformanceVersion const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( major == rhs.major ) && ( minor == rhs.minor ) && ( subminor == rhs.subminor ) && ( patch == rhs.patch );
+# endif
}
bool operator!=( ConformanceVersion const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -11265,15 +15594,20 @@ namespace VULKAN_HPP_NAMESPACE
uint8_t subminor = {};
uint8_t patch = {};
};
- static_assert( sizeof( ConformanceVersion ) == sizeof( VkConformanceVersion ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ConformanceVersion>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ConformanceVersion ) == sizeof( VkConformanceVersion ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ConformanceVersion>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ConformanceVersion>::value,
+ "ConformanceVersion is not nothrow_move_constructible!" );
using ConformanceVersionKHR = ConformanceVersion;
struct CooperativeMatrixPropertiesNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeMatrixPropertiesNV;
+ using NativeType = VkCooperativeMatrixPropertiesNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCooperativeMatrixPropertiesNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CooperativeMatrixPropertiesNV(
@@ -11303,8 +15637,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV &
- operator=( CooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CooperativeMatrixPropertiesNV &
+ operator=( CooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CooperativeMatrixPropertiesNV & operator=( VkCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -11313,79 +15647,109 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CooperativeMatrixPropertiesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CooperativeMatrixPropertiesNV & setMSize( uint32_t MSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setMSize( uint32_t MSize_ ) VULKAN_HPP_NOEXCEPT
{
MSize = MSize_;
return *this;
}
- CooperativeMatrixPropertiesNV & setNSize( uint32_t NSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setNSize( uint32_t NSize_ ) VULKAN_HPP_NOEXCEPT
{
NSize = NSize_;
return *this;
}
- CooperativeMatrixPropertiesNV & setKSize( uint32_t KSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV & setKSize( uint32_t KSize_ ) VULKAN_HPP_NOEXCEPT
{
KSize = KSize_;
return *this;
}
- CooperativeMatrixPropertiesNV & setAType( VULKAN_HPP_NAMESPACE::ComponentTypeNV AType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV &
+ setAType( VULKAN_HPP_NAMESPACE::ComponentTypeNV AType_ ) VULKAN_HPP_NOEXCEPT
{
AType = AType_;
return *this;
}
- CooperativeMatrixPropertiesNV & setBType( VULKAN_HPP_NAMESPACE::ComponentTypeNV BType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV &
+ setBType( VULKAN_HPP_NAMESPACE::ComponentTypeNV BType_ ) VULKAN_HPP_NOEXCEPT
{
BType = BType_;
return *this;
}
- CooperativeMatrixPropertiesNV & setCType( VULKAN_HPP_NAMESPACE::ComponentTypeNV CType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV &
+ setCType( VULKAN_HPP_NAMESPACE::ComponentTypeNV CType_ ) VULKAN_HPP_NOEXCEPT
{
CType = CType_;
return *this;
}
- CooperativeMatrixPropertiesNV & setDType( VULKAN_HPP_NAMESPACE::ComponentTypeNV DType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV &
+ setDType( VULKAN_HPP_NAMESPACE::ComponentTypeNV DType_ ) VULKAN_HPP_NOEXCEPT
{
DType = DType_;
return *this;
}
- CooperativeMatrixPropertiesNV & setScope( VULKAN_HPP_NAMESPACE::ScopeNV scope_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CooperativeMatrixPropertiesNV &
+ setScope( VULKAN_HPP_NAMESPACE::ScopeNV scope_ ) VULKAN_HPP_NOEXCEPT
{
scope = scope_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCooperativeMatrixPropertiesNV *>( this );
}
- operator VkCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCooperativeMatrixPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ComponentTypeNV const &,
+ VULKAN_HPP_NAMESPACE::ComponentTypeNV const &,
+ VULKAN_HPP_NAMESPACE::ComponentTypeNV const &,
+ VULKAN_HPP_NAMESPACE::ComponentTypeNV const &,
+ VULKAN_HPP_NAMESPACE::ScopeNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, MSize, NSize, KSize, AType, BType, CType, DType, scope );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CooperativeMatrixPropertiesNV const & ) const = default;
#else
bool operator==( CooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( MSize == rhs.MSize ) && ( NSize == rhs.NSize ) &&
( KSize == rhs.KSize ) && ( AType == rhs.AType ) && ( BType == rhs.BType ) && ( CType == rhs.CType ) &&
( DType == rhs.DType ) && ( scope == rhs.scope );
+# endif
}
bool operator!=( CooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -11406,10 +15770,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ComponentTypeNV DType = VULKAN_HPP_NAMESPACE::ComponentTypeNV::eFloat16;
VULKAN_HPP_NAMESPACE::ScopeNV scope = VULKAN_HPP_NAMESPACE::ScopeNV::eDevice;
};
- static_assert( sizeof( CooperativeMatrixPropertiesNV ) == sizeof( VkCooperativeMatrixPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CooperativeMatrixPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV ) ==
+ sizeof( VkCooperativeMatrixPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CooperativeMatrixPropertiesNV>::value,
+ "CooperativeMatrixPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCooperativeMatrixPropertiesNV>
@@ -11419,7 +15787,9 @@ namespace VULKAN_HPP_NAMESPACE
struct CopyAccelerationStructureInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkCopyAccelerationStructureInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyAccelerationStructureInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -11441,8 +15811,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR &
- operator=( CopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyAccelerationStructureInfoKHR &
+ operator=( CopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CopyAccelerationStructureInfoKHR & operator=( VkCopyAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -11451,49 +15821,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyAccelerationStructureInfoKHR & setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR &
+ setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT
{
src = src_;
return *this;
}
- CopyAccelerationStructureInfoKHR & setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR &
+ setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT
{
dst = dst_;
return *this;
}
- CopyAccelerationStructureInfoKHR &
- setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureInfoKHR &
+ setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
{
mode = mode_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCopyAccelerationStructureInfoKHR *>( this );
}
- operator VkCopyAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCopyAccelerationStructureInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &,
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, src, dst, mode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CopyAccelerationStructureInfoKHR const & ) const = default;
#else
bool operator==( CopyAccelerationStructureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( src == rhs.src ) && ( dst == rhs.dst ) &&
( mode == rhs.mode );
+# endif
}
bool operator!=( CopyAccelerationStructureInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -11510,10 +15902,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode =
VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone;
};
- static_assert( sizeof( CopyAccelerationStructureInfoKHR ) == sizeof( VkCopyAccelerationStructureInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyAccelerationStructureInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR ) ==
+ sizeof( VkCopyAccelerationStructureInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyAccelerationStructureInfoKHR>::value,
+ "CopyAccelerationStructureInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCopyAccelerationStructureInfoKHR>
@@ -11523,23 +15919,25 @@ namespace VULKAN_HPP_NAMESPACE
struct CopyAccelerationStructureToMemoryInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkCopyAccelerationStructureToMemoryInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eCopyAccelerationStructureToMemoryInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- CopyAccelerationStructureToMemoryInfoKHR( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ = {},
- VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst_ = {},
- VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ =
- VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR(
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR dst_ = {},
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ =
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone ) VULKAN_HPP_NOEXCEPT
: src( src_ )
, dst( dst_ )
, mode( mode_ )
{}
- CopyAccelerationStructureToMemoryInfoKHR( CopyAccelerationStructureToMemoryInfoKHR const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR(
+ CopyAccelerationStructureToMemoryInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CopyAccelerationStructureToMemoryInfoKHR( VkCopyAccelerationStructureToMemoryInfoKHR const & rhs )
VULKAN_HPP_NOEXCEPT
@@ -11559,44 +15957,61 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyAccelerationStructureToMemoryInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyAccelerationStructureToMemoryInfoKHR &
- setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR &
+ setSrc( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR src_ ) VULKAN_HPP_NOEXCEPT
{
src = src_;
return *this;
}
- CopyAccelerationStructureToMemoryInfoKHR &
- setDst( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & dst_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR &
+ setDst( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const & dst_ ) VULKAN_HPP_NOEXCEPT
{
dst = dst_;
return *this;
}
- CopyAccelerationStructureToMemoryInfoKHR &
- setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyAccelerationStructureToMemoryInfoKHR &
+ setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
{
mode = mode_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyAccelerationStructureToMemoryInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyAccelerationStructureToMemoryInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCopyAccelerationStructureToMemoryInfoKHR *>( this );
}
- operator VkCopyAccelerationStructureToMemoryInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyAccelerationStructureToMemoryInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCopyAccelerationStructureToMemoryInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressKHR const &,
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, src, dst, mode );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyAccelerationStructureToMemoryInfoKHR;
const void * pNext = {};
@@ -11605,11 +16020,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode =
VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone;
};
- static_assert( sizeof( CopyAccelerationStructureToMemoryInfoKHR ) ==
- sizeof( VkCopyAccelerationStructureToMemoryInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyAccelerationStructureToMemoryInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR ) ==
+ sizeof( VkCopyAccelerationStructureToMemoryInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyAccelerationStructureToMemoryInfoKHR>::value,
+ "CopyAccelerationStructureToMemoryInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCopyAccelerationStructureToMemoryInfoKHR>
@@ -11617,34 +16036,35 @@ namespace VULKAN_HPP_NAMESPACE
using Type = CopyAccelerationStructureToMemoryInfoKHR;
};
- struct CopyBufferInfo2KHR
+ struct CopyBufferInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferInfo2KHR;
+ using NativeType = VkCopyBufferInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR
- CopyBufferInfo2KHR( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {},
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {},
- uint32_t regionCount_ = {},
- const VULKAN_HPP_NAMESPACE::BufferCopy2KHR * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR CopyBufferInfo2( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {},
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {},
+ uint32_t regionCount_ = {},
+ const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
: srcBuffer( srcBuffer_ )
, dstBuffer( dstBuffer_ )
, regionCount( regionCount_ )
, pRegions( pRegions_ )
{}
- VULKAN_HPP_CONSTEXPR CopyBufferInfo2KHR( CopyBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR CopyBufferInfo2( CopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyBufferInfo2KHR( VkCopyBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : CopyBufferInfo2KHR( *reinterpret_cast<CopyBufferInfo2KHR const *>( &rhs ) )
+ CopyBufferInfo2( VkCopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : CopyBufferInfo2( *reinterpret_cast<CopyBufferInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyBufferInfo2KHR(
- VULKAN_HPP_NAMESPACE::Buffer srcBuffer_,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferCopy2KHR> const & regions_ )
+ CopyBufferInfo2(
+ VULKAN_HPP_NAMESPACE::Buffer srcBuffer_,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferCopy2> const & regions_ )
: srcBuffer( srcBuffer_ )
, dstBuffer( dstBuffer_ )
, regionCount( static_cast<uint32_t>( regions_.size() ) )
@@ -11653,49 +16073,51 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2KHR &
- operator=( CopyBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyBufferInfo2 & operator=( CopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyBufferInfo2KHR & operator=( VkCopyBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ CopyBufferInfo2 & operator=( VkCopyBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyBufferInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyBufferInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyBufferInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyBufferInfo2KHR & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 &
+ setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT
{
srcBuffer = srcBuffer_;
return *this;
}
- CopyBufferInfo2KHR & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 &
+ setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT
{
dstBuffer = dstBuffer_;
return *this;
}
- CopyBufferInfo2KHR & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
{
regionCount = regionCount_;
return *this;
}
- CopyBufferInfo2KHR & setPRegions( const VULKAN_HPP_NAMESPACE::BufferCopy2KHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferInfo2 &
+ setPRegions( const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyBufferInfo2KHR & setRegions(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferCopy2KHR> const & regions_ )
+ CopyBufferInfo2 & setRegions(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferCopy2> const & regions_ )
VULKAN_HPP_NOEXCEPT
{
regionCount = static_cast<uint32_t>( regions_.size() );
@@ -11705,61 +16127,88 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyBufferInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyBufferInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkCopyBufferInfo2KHR *>( this );
+ return *reinterpret_cast<const VkCopyBufferInfo2 *>( this );
}
- operator VkCopyBufferInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyBufferInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkCopyBufferInfo2KHR *>( this );
+ return *reinterpret_cast<VkCopyBufferInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::BufferCopy2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcBuffer, dstBuffer, regionCount, pRegions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( CopyBufferInfo2KHR const & ) const = default;
+ auto operator<=>( CopyBufferInfo2 const & ) const = default;
#else
- bool operator==( CopyBufferInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( CopyBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcBuffer == rhs.srcBuffer ) &&
( dstBuffer == rhs.dstBuffer ) && ( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions );
+# endif
}
- bool operator!=( CopyBufferInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( CopyBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {};
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {};
- uint32_t regionCount = {};
- const VULKAN_HPP_NAMESPACE::BufferCopy2KHR * pRegions = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {};
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {};
+ uint32_t regionCount = {};
+ const VULKAN_HPP_NAMESPACE::BufferCopy2 * pRegions = {};
};
- static_assert( sizeof( CopyBufferInfo2KHR ) == sizeof( VkCopyBufferInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyBufferInfo2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyBufferInfo2 ) == sizeof( VkCopyBufferInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyBufferInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyBufferInfo2>::value,
+ "CopyBufferInfo2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eCopyBufferInfo2KHR>
+ struct CppType<StructureType, StructureType::eCopyBufferInfo2>
{
- using Type = CopyBufferInfo2KHR;
+ using Type = CopyBufferInfo2;
};
+ using CopyBufferInfo2KHR = CopyBufferInfo2;
- struct CopyBufferToImageInfo2KHR
+ struct CopyBufferToImageInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferToImageInfo2KHR;
+ using NativeType = VkCopyBufferToImageInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyBufferToImageInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {},
- VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- uint32_t regionCount_ = {},
- const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2(
+ VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ = {},
+ VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ uint32_t regionCount_ = {},
+ const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
: srcBuffer( srcBuffer_ )
, dstImage( dstImage_ )
, dstImageLayout( dstImageLayout_ )
@@ -11767,19 +16216,18 @@ namespace VULKAN_HPP_NAMESPACE
, pRegions( pRegions_ )
{}
- VULKAN_HPP_CONSTEXPR
- CopyBufferToImageInfo2KHR( CopyBufferToImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR CopyBufferToImageInfo2( CopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyBufferToImageInfo2KHR( VkCopyBufferToImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : CopyBufferToImageInfo2KHR( *reinterpret_cast<CopyBufferToImageInfo2KHR const *>( &rhs ) )
+ CopyBufferToImageInfo2( VkCopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : CopyBufferToImageInfo2( *reinterpret_cast<CopyBufferToImageInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyBufferToImageInfo2KHR(
+ CopyBufferToImageInfo2(
VULKAN_HPP_NAMESPACE::Buffer srcBuffer_,
VULKAN_HPP_NAMESPACE::Image dstImage_,
VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR> const & regions_ )
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2> const & regions_ )
: srcBuffer( srcBuffer_ )
, dstImage( dstImage_ )
, dstImageLayout( dstImageLayout_ )
@@ -11789,57 +16237,58 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2KHR &
- operator=( CopyBufferToImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyBufferToImageInfo2 & operator=( CopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyBufferToImageInfo2KHR & operator=( VkCopyBufferToImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ CopyBufferToImageInfo2 & operator=( VkCopyBufferToImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyBufferToImageInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyBufferToImageInfo2KHR & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 &
+ setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT
{
srcBuffer = srcBuffer_;
return *this;
}
- CopyBufferToImageInfo2KHR & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 &
+ setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
{
dstImage = dstImage_;
return *this;
}
- CopyBufferToImageInfo2KHR &
- setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 &
+ setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
dstImageLayout = dstImageLayout_;
return *this;
}
- CopyBufferToImageInfo2KHR & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
{
regionCount = regionCount_;
return *this;
}
- CopyBufferToImageInfo2KHR &
- setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyBufferToImageInfo2 &
+ setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyBufferToImageInfo2KHR & setRegions(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR> const & regions_ )
+ CopyBufferToImageInfo2 & setRegions(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2> const & regions_ )
VULKAN_HPP_NOEXCEPT
{
regionCount = static_cast<uint32_t>( regions_.size() );
@@ -11849,56 +16298,84 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyBufferToImageInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyBufferToImageInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkCopyBufferToImageInfo2KHR *>( this );
+ return *reinterpret_cast<const VkCopyBufferToImageInfo2 *>( this );
}
- operator VkCopyBufferToImageInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyBufferToImageInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkCopyBufferToImageInfo2KHR *>( this );
+ return *reinterpret_cast<VkCopyBufferToImageInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcBuffer, dstImage, dstImageLayout, regionCount, pRegions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( CopyBufferToImageInfo2KHR const & ) const = default;
+ auto operator<=>( CopyBufferToImageInfo2 const & ) const = default;
#else
- bool operator==( CopyBufferToImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( CopyBufferToImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcBuffer == rhs.srcBuffer ) &&
( dstImage == rhs.dstImage ) && ( dstImageLayout == rhs.dstImageLayout ) &&
( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions );
+# endif
}
- bool operator!=( CopyBufferToImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( CopyBufferToImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferToImageInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {};
- VULKAN_HPP_NAMESPACE::Image dstImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- uint32_t regionCount = {};
- const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR * pRegions = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyBufferToImageInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Buffer srcBuffer = {};
+ VULKAN_HPP_NAMESPACE::Image dstImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ uint32_t regionCount = {};
+ const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions = {};
};
- static_assert( sizeof( CopyBufferToImageInfo2KHR ) == sizeof( VkCopyBufferToImageInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyBufferToImageInfo2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2 ) ==
+ sizeof( VkCopyBufferToImageInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyBufferToImageInfo2>::value,
+ "CopyBufferToImageInfo2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eCopyBufferToImageInfo2KHR>
+ struct CppType<StructureType, StructureType::eCopyBufferToImageInfo2>
{
- using Type = CopyBufferToImageInfo2KHR;
+ using Type = CopyBufferToImageInfo2;
};
+ using CopyBufferToImageInfo2KHR = CopyBufferToImageInfo2;
struct CopyCommandTransformInfoQCOM
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyCommandTransformInfoQCOM;
+ using NativeType = VkCopyCommandTransformInfoQCOM;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyCommandTransformInfoQCOM;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -11915,8 +16392,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM &
- operator=( CopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyCommandTransformInfoQCOM & operator=( CopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CopyCommandTransformInfoQCOM & operator=( VkCopyCommandTransformInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -11925,13 +16401,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyCommandTransformInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyCommandTransformInfoQCOM &
+ VULKAN_HPP_CONSTEXPR_14 CopyCommandTransformInfoQCOM &
setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT
{
transform = transform_;
@@ -11939,22 +16415,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyCommandTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyCommandTransformInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCopyCommandTransformInfoQCOM *>( this );
}
- operator VkCopyCommandTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyCommandTransformInfoQCOM &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCopyCommandTransformInfoQCOM *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, transform );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CopyCommandTransformInfoQCOM const & ) const = default;
#else
bool operator==( CopyCommandTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform );
+# endif
}
bool operator!=( CopyCommandTransformInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -11969,10 +16463,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform =
VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity;
};
- static_assert( sizeof( CopyCommandTransformInfoQCOM ) == sizeof( VkCopyCommandTransformInfoQCOM ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyCommandTransformInfoQCOM>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM ) ==
+ sizeof( VkCopyCommandTransformInfoQCOM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyCommandTransformInfoQCOM>::value,
+ "CopyCommandTransformInfoQCOM is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCopyCommandTransformInfoQCOM>
@@ -11982,8 +16480,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CopyDescriptorSet
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyDescriptorSet;
+ using NativeType = VkCopyDescriptorSet;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyDescriptorSet;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CopyDescriptorSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ = {},
@@ -12009,8 +16509,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet &
- operator=( CopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyDescriptorSet & operator=( CopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CopyDescriptorSet & operator=( VkCopyDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -12019,74 +16518,101 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyDescriptorSet & setSrcSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet &
+ setSrcSet( VULKAN_HPP_NAMESPACE::DescriptorSet srcSet_ ) VULKAN_HPP_NOEXCEPT
{
srcSet = srcSet_;
return *this;
}
- CopyDescriptorSet & setSrcBinding( uint32_t srcBinding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcBinding( uint32_t srcBinding_ ) VULKAN_HPP_NOEXCEPT
{
srcBinding = srcBinding_;
return *this;
}
- CopyDescriptorSet & setSrcArrayElement( uint32_t srcArrayElement_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setSrcArrayElement( uint32_t srcArrayElement_ ) VULKAN_HPP_NOEXCEPT
{
srcArrayElement = srcArrayElement_;
return *this;
}
- CopyDescriptorSet & setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet &
+ setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT
{
dstSet = dstSet_;
return *this;
}
- CopyDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT
{
dstBinding = dstBinding_;
return *this;
}
- CopyDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT
{
dstArrayElement = dstArrayElement_;
return *this;
}
- CopyDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorCount = descriptorCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyDescriptorSet const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyDescriptorSet const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCopyDescriptorSet *>( this );
}
- operator VkCopyDescriptorSet &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyDescriptorSet &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCopyDescriptorSet *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorSet const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DescriptorSet const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, srcSet, srcBinding, srcArrayElement, dstSet, dstBinding, dstArrayElement, descriptorCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CopyDescriptorSet const & ) const = default;
#else
bool operator==( CopyDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSet == rhs.srcSet ) &&
( srcBinding == rhs.srcBinding ) && ( srcArrayElement == rhs.srcArrayElement ) &&
( dstSet == rhs.dstSet ) && ( dstBinding == rhs.dstBinding ) &&
( dstArrayElement == rhs.dstArrayElement ) && ( descriptorCount == rhs.descriptorCount );
+# endif
}
bool operator!=( CopyDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -12106,9 +16632,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t dstArrayElement = {};
uint32_t descriptorCount = {};
};
- static_assert( sizeof( CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyDescriptorSet>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyDescriptorSet ) == sizeof( VkCopyDescriptorSet ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyDescriptorSet>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyDescriptorSet>::value,
+ "CopyDescriptorSet is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCopyDescriptorSet>
@@ -12116,17 +16645,19 @@ namespace VULKAN_HPP_NAMESPACE
using Type = CopyDescriptorSet;
};
- struct ImageCopy2KHR
+ struct ImageCopy2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCopy2KHR;
+ using NativeType = VkImageCopy2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCopy2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR ImageCopy2KHR( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {},
- VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR ImageCopy2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {},
+ VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT
: srcSubresource( srcSubresource_ )
, srcOffset( srcOffset_ )
, dstSubresource( dstSubresource_ )
@@ -12134,89 +16665,113 @@ namespace VULKAN_HPP_NAMESPACE
, extent( extent_ )
{}
- VULKAN_HPP_CONSTEXPR ImageCopy2KHR( ImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR ImageCopy2( ImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageCopy2KHR( VkImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : ImageCopy2KHR( *reinterpret_cast<ImageCopy2KHR const *>( &rhs ) )
+ ImageCopy2( VkImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageCopy2( *reinterpret_cast<ImageCopy2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageCopy2KHR & operator=( ImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageCopy2 & operator=( ImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageCopy2KHR & operator=( VkImageCopy2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ ImageCopy2 & operator=( VkImageCopy2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageCopy2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageCopy2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageCopy2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageCopy2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy2 &
setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
{
srcSubresource = srcSubresource_;
return *this;
}
- ImageCopy2KHR & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy2 &
+ setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
{
srcOffset = srcOffset_;
return *this;
}
- ImageCopy2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy2 &
setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
{
dstSubresource = dstSubresource_;
return *this;
}
- ImageCopy2KHR & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy2 &
+ setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
{
dstOffset = dstOffset_;
return *this;
}
- ImageCopy2KHR & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy2 & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
extent = extent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageCopy2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageCopy2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkImageCopy2KHR *>( this );
+ return *reinterpret_cast<const VkImageCopy2 *>( this );
}
- operator VkImageCopy2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageCopy2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkImageCopy2KHR *>( this );
+ return *reinterpret_cast<VkImageCopy2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcSubresource, srcOffset, dstSubresource, dstOffset, extent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImageCopy2KHR const & ) const = default;
+ auto operator<=>( ImageCopy2 const & ) const = default;
#else
- bool operator==( ImageCopy2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( ImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) &&
( srcOffset == rhs.srcOffset ) && ( dstSubresource == rhs.dstSubresource ) &&
( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent );
+# endif
}
- bool operator!=( ImageCopy2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( ImageCopy2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCopy2KHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCopy2;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {};
VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {};
@@ -12224,28 +16779,35 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {};
VULKAN_HPP_NAMESPACE::Extent3D extent = {};
};
- static_assert( sizeof( ImageCopy2KHR ) == sizeof( VkImageCopy2KHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageCopy2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCopy2 ) == sizeof( VkImageCopy2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageCopy2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageCopy2>::value,
+ "ImageCopy2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eImageCopy2KHR>
+ struct CppType<StructureType, StructureType::eImageCopy2>
{
- using Type = ImageCopy2KHR;
+ using Type = ImageCopy2;
};
+ using ImageCopy2KHR = ImageCopy2;
- struct CopyImageInfo2KHR
+ struct CopyImageInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageInfo2KHR;
+ using NativeType = VkCopyImageInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR CopyImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- uint32_t regionCount_ = {},
- const VULKAN_HPP_NAMESPACE::ImageCopy2KHR * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR
+ CopyImageInfo2( VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ uint32_t regionCount_ = {},
+ const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstImage( dstImage_ )
@@ -12254,19 +16816,19 @@ namespace VULKAN_HPP_NAMESPACE
, pRegions( pRegions_ )
{}
- VULKAN_HPP_CONSTEXPR CopyImageInfo2KHR( CopyImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR CopyImageInfo2( CopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyImageInfo2KHR( VkCopyImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : CopyImageInfo2KHR( *reinterpret_cast<CopyImageInfo2KHR const *>( &rhs ) )
+ CopyImageInfo2( VkCopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : CopyImageInfo2( *reinterpret_cast<CopyImageInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_,
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
- VULKAN_HPP_NAMESPACE::Image dstImage_,
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageCopy2KHR> const & regions_ )
+ CopyImageInfo2(
+ VULKAN_HPP_NAMESPACE::Image srcImage_,
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
+ VULKAN_HPP_NAMESPACE::Image dstImage_,
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageCopy2> const & regions_ )
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstImage( dstImage_ )
@@ -12277,61 +16839,63 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2KHR &
- operator=( CopyImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyImageInfo2 & operator=( CopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyImageInfo2KHR & operator=( VkCopyImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ CopyImageInfo2 & operator=( VkCopyImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyImageInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyImageInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyImageInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyImageInfo2KHR & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
{
srcImage = srcImage_;
return *this;
}
- CopyImageInfo2KHR & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 &
+ setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
srcImageLayout = srcImageLayout_;
return *this;
}
- CopyImageInfo2KHR & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
{
dstImage = dstImage_;
return *this;
}
- CopyImageInfo2KHR & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 &
+ setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
dstImageLayout = dstImageLayout_;
return *this;
}
- CopyImageInfo2KHR & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
{
regionCount = regionCount_;
return *this;
}
- CopyImageInfo2KHR & setPRegions( const VULKAN_HPP_NAMESPACE::ImageCopy2KHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageInfo2 &
+ setPRegions( const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyImageInfo2KHR & setRegions(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageCopy2KHR> const & regions_ )
+ CopyImageInfo2 & setRegions(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageCopy2> const & regions_ )
VULKAN_HPP_NOEXCEPT
{
regionCount = static_cast<uint32_t>( regions_.size() );
@@ -12341,65 +16905,94 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyImageInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyImageInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkCopyImageInfo2 *>( this );
+ }
+
+ explicit operator VkCopyImageInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkCopyImageInfo2KHR *>( this );
+ return *reinterpret_cast<VkCopyImageInfo2 *>( this );
}
- operator VkCopyImageInfo2KHR &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageCopy2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkCopyImageInfo2KHR *>( this );
+ return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( CopyImageInfo2KHR const & ) const = default;
+ auto operator<=>( CopyImageInfo2 const & ) const = default;
#else
- bool operator==( CopyImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( CopyImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) &&
( srcImageLayout == rhs.srcImageLayout ) && ( dstImage == rhs.dstImage ) &&
( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) &&
( pRegions == rhs.pRegions );
+# endif
}
- bool operator!=( CopyImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( CopyImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Image srcImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- VULKAN_HPP_NAMESPACE::Image dstImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- uint32_t regionCount = {};
- const VULKAN_HPP_NAMESPACE::ImageCopy2KHR * pRegions = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Image srcImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::Image dstImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ uint32_t regionCount = {};
+ const VULKAN_HPP_NAMESPACE::ImageCopy2 * pRegions = {};
};
- static_assert( sizeof( CopyImageInfo2KHR ) == sizeof( VkCopyImageInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyImageInfo2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyImageInfo2 ) == sizeof( VkCopyImageInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyImageInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyImageInfo2>::value,
+ "CopyImageInfo2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eCopyImageInfo2KHR>
+ struct CppType<StructureType, StructureType::eCopyImageInfo2>
{
- using Type = CopyImageInfo2KHR;
+ using Type = CopyImageInfo2;
};
+ using CopyImageInfo2KHR = CopyImageInfo2;
- struct CopyImageToBufferInfo2KHR
+ struct CopyImageToBufferInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageToBufferInfo2KHR;
+ using NativeType = VkCopyImageToBufferInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCopyImageToBufferInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {},
- uint32_t regionCount_ = {},
- const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2(
+ VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ = {},
+ uint32_t regionCount_ = {},
+ const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstBuffer( dstBuffer_ )
@@ -12407,19 +17000,18 @@ namespace VULKAN_HPP_NAMESPACE
, pRegions( pRegions_ )
{}
- VULKAN_HPP_CONSTEXPR
- CopyImageToBufferInfo2KHR( CopyImageToBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR CopyImageToBufferInfo2( CopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyImageToBufferInfo2KHR( VkCopyImageToBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : CopyImageToBufferInfo2KHR( *reinterpret_cast<CopyImageToBufferInfo2KHR const *>( &rhs ) )
+ CopyImageToBufferInfo2( VkCopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : CopyImageToBufferInfo2( *reinterpret_cast<CopyImageToBufferInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyImageToBufferInfo2KHR(
+ CopyImageToBufferInfo2(
VULKAN_HPP_NAMESPACE::Image srcImage_,
VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
VULKAN_HPP_NAMESPACE::Buffer dstBuffer_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR> const & regions_ )
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2> const & regions_ )
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstBuffer( dstBuffer_ )
@@ -12429,57 +17021,58 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2KHR &
- operator=( CopyImageToBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CopyImageToBufferInfo2 & operator=( CopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- CopyImageToBufferInfo2KHR & operator=( VkCopyImageToBufferInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ CopyImageToBufferInfo2 & operator=( VkCopyImageToBufferInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyImageToBufferInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyImageToBufferInfo2KHR & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 &
+ setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
{
srcImage = srcImage_;
return *this;
}
- CopyImageToBufferInfo2KHR &
- setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 &
+ setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
srcImageLayout = srcImageLayout_;
return *this;
}
- CopyImageToBufferInfo2KHR & setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 &
+ setDstBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBuffer_ ) VULKAN_HPP_NOEXCEPT
{
dstBuffer = dstBuffer_;
return *this;
}
- CopyImageToBufferInfo2KHR & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
{
regionCount = regionCount_;
return *this;
}
- CopyImageToBufferInfo2KHR &
- setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyImageToBufferInfo2 &
+ setPRegions( const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- CopyImageToBufferInfo2KHR & setRegions(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR> const & regions_ )
+ CopyImageToBufferInfo2 & setRegions(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferImageCopy2> const & regions_ )
VULKAN_HPP_NOEXCEPT
{
regionCount = static_cast<uint32_t>( regions_.size() );
@@ -12489,71 +17082,99 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyImageToBufferInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyImageToBufferInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkCopyImageToBufferInfo2KHR *>( this );
+ return *reinterpret_cast<const VkCopyImageToBufferInfo2 *>( this );
}
- operator VkCopyImageToBufferInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyImageToBufferInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkCopyImageToBufferInfo2KHR *>( this );
+ return *reinterpret_cast<VkCopyImageToBufferInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcImage, srcImageLayout, dstBuffer, regionCount, pRegions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( CopyImageToBufferInfo2KHR const & ) const = default;
+ auto operator<=>( CopyImageToBufferInfo2 const & ) const = default;
#else
- bool operator==( CopyImageToBufferInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( CopyImageToBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) &&
( srcImageLayout == rhs.srcImageLayout ) && ( dstBuffer == rhs.dstBuffer ) &&
( regionCount == rhs.regionCount ) && ( pRegions == rhs.pRegions );
+# endif
}
- bool operator!=( CopyImageToBufferInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( CopyImageToBufferInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageToBufferInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Image srcImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {};
- uint32_t regionCount = {};
- const VULKAN_HPP_NAMESPACE::BufferImageCopy2KHR * pRegions = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyImageToBufferInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Image srcImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::Buffer dstBuffer = {};
+ uint32_t regionCount = {};
+ const VULKAN_HPP_NAMESPACE::BufferImageCopy2 * pRegions = {};
};
- static_assert( sizeof( CopyImageToBufferInfo2KHR ) == sizeof( VkCopyImageToBufferInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyImageToBufferInfo2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2 ) ==
+ sizeof( VkCopyImageToBufferInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyImageToBufferInfo2>::value,
+ "CopyImageToBufferInfo2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eCopyImageToBufferInfo2KHR>
+ struct CppType<StructureType, StructureType::eCopyImageToBufferInfo2>
{
- using Type = CopyImageToBufferInfo2KHR;
+ using Type = CopyImageToBufferInfo2;
};
+ using CopyImageToBufferInfo2KHR = CopyImageToBufferInfo2;
struct CopyMemoryToAccelerationStructureInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkCopyMemoryToAccelerationStructureInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eCopyMemoryToAccelerationStructureInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- CopyMemoryToAccelerationStructureInfoKHR( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src_ = {},
- VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ = {},
- VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ =
- VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR(
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR src_ = {},
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ = {},
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ =
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone ) VULKAN_HPP_NOEXCEPT
: src( src_ )
, dst( dst_ )
, mode( mode_ )
{}
- CopyMemoryToAccelerationStructureInfoKHR( CopyMemoryToAccelerationStructureInfoKHR const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR(
+ CopyMemoryToAccelerationStructureInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CopyMemoryToAccelerationStructureInfoKHR( VkCopyMemoryToAccelerationStructureInfoKHR const & rhs )
VULKAN_HPP_NOEXCEPT
@@ -12573,44 +17194,61 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CopyMemoryToAccelerationStructureInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CopyMemoryToAccelerationStructureInfoKHR &
- setSrc( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & src_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR &
+ setSrc( VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const & src_ ) VULKAN_HPP_NOEXCEPT
{
src = src_;
return *this;
}
- CopyMemoryToAccelerationStructureInfoKHR &
- setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR &
+ setDst( VULKAN_HPP_NAMESPACE::AccelerationStructureKHR dst_ ) VULKAN_HPP_NOEXCEPT
{
dst = dst_;
return *this;
}
- CopyMemoryToAccelerationStructureInfoKHR &
- setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CopyMemoryToAccelerationStructureInfoKHR &
+ setMode( VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
{
mode = mode_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCopyMemoryToAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyMemoryToAccelerationStructureInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCopyMemoryToAccelerationStructureInfoKHR *>( this );
}
- operator VkCopyMemoryToAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCopyMemoryToAccelerationStructureInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCopyMemoryToAccelerationStructureInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceOrHostAddressConstKHR const &,
+ VULKAN_HPP_NAMESPACE::AccelerationStructureKHR const &,
+ VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, src, dst, mode );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCopyMemoryToAccelerationStructureInfoKHR;
const void * pNext = {};
@@ -12619,11 +17257,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR mode =
VULKAN_HPP_NAMESPACE::CopyAccelerationStructureModeKHR::eClone;
};
- static_assert( sizeof( CopyMemoryToAccelerationStructureInfoKHR ) ==
- sizeof( VkCopyMemoryToAccelerationStructureInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CopyMemoryToAccelerationStructureInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR ) ==
+ sizeof( VkCopyMemoryToAccelerationStructureInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CopyMemoryToAccelerationStructureInfoKHR>::value,
+ "CopyMemoryToAccelerationStructureInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCopyMemoryToAccelerationStructureInfoKHR>
@@ -12633,8 +17275,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CuFunctionCreateInfoNVX
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuFunctionCreateInfoNVX;
+ using NativeType = VkCuFunctionCreateInfoNVX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuFunctionCreateInfoNVX;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CuFunctionCreateInfoNVX( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ = {},
@@ -12650,8 +17294,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX &
- operator=( CuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CuFunctionCreateInfoNVX & operator=( CuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CuFunctionCreateInfoNVX & operator=( VkCuFunctionCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -12660,48 +17303,78 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CuFunctionCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CuFunctionCreateInfoNVX & setModule( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX &
+ setModule( VULKAN_HPP_NAMESPACE::CuModuleNVX module_ ) VULKAN_HPP_NOEXCEPT
{
module = module_;
return *this;
}
- CuFunctionCreateInfoNVX & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuFunctionCreateInfoNVX & setPName( const char * pName_ ) VULKAN_HPP_NOEXCEPT
{
pName = pName_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCuFunctionCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCuFunctionCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCuFunctionCreateInfoNVX *>( this );
}
- operator VkCuFunctionCreateInfoNVX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCuFunctionCreateInfoNVX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCuFunctionCreateInfoNVX *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CuModuleNVX const &,
+ const char * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, module, pName );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( CuFunctionCreateInfoNVX const & ) const = default;
-#else
+ std::strong_ordering operator<=>( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = module <=> rhs.module; cmp != 0 )
+ return cmp;
+ if ( pName != rhs.pName )
+ if ( auto cmp = strcmp( pName, rhs.pName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( module == rhs.module ) && ( pName == rhs.pName );
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( module == rhs.module ) &&
+ ( ( pName == rhs.pName ) || ( strcmp( pName, rhs.pName ) == 0 ) );
}
bool operator!=( CuFunctionCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eCuFunctionCreateInfoNVX;
@@ -12709,9 +17382,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CuModuleNVX module = {};
const char * pName = {};
};
- static_assert( sizeof( CuFunctionCreateInfoNVX ) == sizeof( VkCuFunctionCreateInfoNVX ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CuFunctionCreateInfoNVX>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX ) ==
+ sizeof( VkCuFunctionCreateInfoNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CuFunctionCreateInfoNVX>::value,
+ "CuFunctionCreateInfoNVX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCuFunctionCreateInfoNVX>
@@ -12721,8 +17398,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CuLaunchInfoNVX
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuLaunchInfoNVX;
+ using NativeType = VkCuLaunchInfoNVX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuLaunchInfoNVX;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CuLaunchInfoNVX( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ = {},
@@ -12784,7 +17463,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & operator=( CuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ CuLaunchInfoNVX & operator=( CuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CuLaunchInfoNVX & operator=( VkCuLaunchInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -12793,67 +17472,68 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CuLaunchInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CuLaunchInfoNVX & setFunction( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX &
+ setFunction( VULKAN_HPP_NAMESPACE::CuFunctionNVX function_ ) VULKAN_HPP_NOEXCEPT
{
function = function_;
return *this;
}
- CuLaunchInfoNVX & setGridDimX( uint32_t gridDimX_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimX( uint32_t gridDimX_ ) VULKAN_HPP_NOEXCEPT
{
gridDimX = gridDimX_;
return *this;
}
- CuLaunchInfoNVX & setGridDimY( uint32_t gridDimY_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimY( uint32_t gridDimY_ ) VULKAN_HPP_NOEXCEPT
{
gridDimY = gridDimY_;
return *this;
}
- CuLaunchInfoNVX & setGridDimZ( uint32_t gridDimZ_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setGridDimZ( uint32_t gridDimZ_ ) VULKAN_HPP_NOEXCEPT
{
gridDimZ = gridDimZ_;
return *this;
}
- CuLaunchInfoNVX & setBlockDimX( uint32_t blockDimX_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimX( uint32_t blockDimX_ ) VULKAN_HPP_NOEXCEPT
{
blockDimX = blockDimX_;
return *this;
}
- CuLaunchInfoNVX & setBlockDimY( uint32_t blockDimY_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimY( uint32_t blockDimY_ ) VULKAN_HPP_NOEXCEPT
{
blockDimY = blockDimY_;
return *this;
}
- CuLaunchInfoNVX & setBlockDimZ( uint32_t blockDimZ_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setBlockDimZ( uint32_t blockDimZ_ ) VULKAN_HPP_NOEXCEPT
{
blockDimZ = blockDimZ_;
return *this;
}
- CuLaunchInfoNVX & setSharedMemBytes( uint32_t sharedMemBytes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setSharedMemBytes( uint32_t sharedMemBytes_ ) VULKAN_HPP_NOEXCEPT
{
sharedMemBytes = sharedMemBytes_;
return *this;
}
- CuLaunchInfoNVX & setParamCount( size_t paramCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setParamCount( size_t paramCount_ ) VULKAN_HPP_NOEXCEPT
{
paramCount = paramCount_;
return *this;
}
- CuLaunchInfoNVX & setPParams( const void * const * pParams_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPParams( const void * const * pParams_ ) VULKAN_HPP_NOEXCEPT
{
pParams = pParams_;
return *this;
@@ -12869,13 +17549,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- CuLaunchInfoNVX & setExtraCount( size_t extraCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setExtraCount( size_t extraCount_ ) VULKAN_HPP_NOEXCEPT
{
extraCount = extraCount_;
return *this;
}
- CuLaunchInfoNVX & setPExtras( const void * const * pExtras_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuLaunchInfoNVX & setPExtras( const void * const * pExtras_ ) VULKAN_HPP_NOEXCEPT
{
pExtras = pExtras_;
return *this;
@@ -12892,26 +17572,68 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCuLaunchInfoNVX const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkCuLaunchInfoNVX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCuLaunchInfoNVX *>( this );
}
- operator VkCuLaunchInfoNVX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCuLaunchInfoNVX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCuLaunchInfoNVX *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CuFunctionNVX const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ size_t const &,
+ const void * const * const &,
+ size_t const &,
+ const void * const * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ function,
+ gridDimX,
+ gridDimY,
+ gridDimZ,
+ blockDimX,
+ blockDimY,
+ blockDimZ,
+ sharedMemBytes,
+ paramCount,
+ pParams,
+ extraCount,
+ pExtras );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CuLaunchInfoNVX const & ) const = default;
#else
bool operator==( CuLaunchInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( function == rhs.function ) &&
( gridDimX == rhs.gridDimX ) && ( gridDimY == rhs.gridDimY ) && ( gridDimZ == rhs.gridDimZ ) &&
( blockDimX == rhs.blockDimX ) && ( blockDimY == rhs.blockDimY ) && ( blockDimZ == rhs.blockDimZ ) &&
( sharedMemBytes == rhs.sharedMemBytes ) && ( paramCount == rhs.paramCount ) &&
( pParams == rhs.pParams ) && ( extraCount == rhs.extraCount ) && ( pExtras == rhs.pExtras );
+# endif
}
bool operator!=( CuLaunchInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -12936,8 +17658,12 @@ namespace VULKAN_HPP_NAMESPACE
size_t extraCount = {};
const void * const * pExtras = {};
};
- static_assert( sizeof( CuLaunchInfoNVX ) == sizeof( VkCuLaunchInfoNVX ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CuLaunchInfoNVX>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX ) == sizeof( VkCuLaunchInfoNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CuLaunchInfoNVX>::value,
+ "CuLaunchInfoNVX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCuLaunchInfoNVX>
@@ -12947,8 +17673,10 @@ namespace VULKAN_HPP_NAMESPACE
struct CuModuleCreateInfoNVX
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuModuleCreateInfoNVX;
+ using NativeType = VkCuModuleCreateInfoNVX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eCuModuleCreateInfoNVX;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR CuModuleCreateInfoNVX( size_t dataSize_ = {}, const void * pData_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -12961,10 +17689,16 @@ namespace VULKAN_HPP_NAMESPACE
CuModuleCreateInfoNVX( VkCuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
: CuModuleCreateInfoNVX( *reinterpret_cast<CuModuleCreateInfoNVX const *>( &rhs ) )
{}
-#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX &
- operator=( CuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ template <typename T>
+ CuModuleCreateInfoNVX( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const T> const & data_ )
+ : dataSize( data_.size() * sizeof( T ) ), pData( data_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ CuModuleCreateInfoNVX & operator=( CuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
CuModuleCreateInfoNVX & operator=( VkCuModuleCreateInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -12973,41 +17707,68 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- CuModuleCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- CuModuleCreateInfoNVX & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setDataSize( size_t dataSize_ ) VULKAN_HPP_NOEXCEPT
{
dataSize = dataSize_;
return *this;
}
- CuModuleCreateInfoNVX & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 CuModuleCreateInfoNVX & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT
{
pData = pData_;
return *this;
}
-#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkCuModuleCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ template <typename T>
+ CuModuleCreateInfoNVX &
+ setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const T> const & data_ ) VULKAN_HPP_NOEXCEPT
+ {
+ dataSize = data_.size() * sizeof( T );
+ pData = data_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkCuModuleCreateInfoNVX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkCuModuleCreateInfoNVX *>( this );
}
- operator VkCuModuleCreateInfoNVX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkCuModuleCreateInfoNVX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkCuModuleCreateInfoNVX *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, size_t const &, const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, dataSize, pData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( CuModuleCreateInfoNVX const & ) const = default;
#else
bool operator==( CuModuleCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData );
+# endif
}
bool operator!=( CuModuleCreateInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -13022,9 +17783,12 @@ namespace VULKAN_HPP_NAMESPACE
size_t dataSize = {};
const void * pData = {};
};
- static_assert( sizeof( CuModuleCreateInfoNVX ) == sizeof( VkCuModuleCreateInfoNVX ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<CuModuleCreateInfoNVX>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX ) == sizeof( VkCuModuleCreateInfoNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::CuModuleCreateInfoNVX>::value,
+ "CuModuleCreateInfoNVX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eCuModuleCreateInfoNVX>
@@ -13035,8 +17799,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct D3D12FenceSubmitInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eD3D12FenceSubmitInfoKHR;
+ using NativeType = VkD3D12FenceSubmitInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eD3D12FenceSubmitInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR D3D12FenceSubmitInfoKHR( uint32_t waitSemaphoreValuesCount_ = {},
@@ -13067,8 +17833,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR &
- operator=( D3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ D3D12FenceSubmitInfoKHR & operator=( D3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
D3D12FenceSubmitInfoKHR & operator=( VkD3D12FenceSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13077,19 +17842,21 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- D3D12FenceSubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- D3D12FenceSubmitInfoKHR & setWaitSemaphoreValuesCount( uint32_t waitSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR &
+ setWaitSemaphoreValuesCount( uint32_t waitSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreValuesCount = waitSemaphoreValuesCount_;
return *this;
}
- D3D12FenceSubmitInfoKHR & setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR &
+ setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphoreValues = pWaitSemaphoreValues_;
return *this;
@@ -13105,13 +17872,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- D3D12FenceSubmitInfoKHR & setSignalSemaphoreValuesCount( uint32_t signalSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR &
+ setSignalSemaphoreValuesCount( uint32_t signalSemaphoreValuesCount_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreValuesCount = signalSemaphoreValuesCount_;
return *this;
}
- D3D12FenceSubmitInfoKHR & setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 D3D12FenceSubmitInfoKHR &
+ setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
{
pSignalSemaphoreValues = pSignalSemaphoreValues_;
return *this;
@@ -13128,26 +17897,52 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkD3D12FenceSubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkD3D12FenceSubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkD3D12FenceSubmitInfoKHR *>( this );
}
- operator VkD3D12FenceSubmitInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkD3D12FenceSubmitInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkD3D12FenceSubmitInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint64_t * const &,
+ uint32_t const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ waitSemaphoreValuesCount,
+ pWaitSemaphoreValues,
+ signalSemaphoreValuesCount,
+ pSignalSemaphoreValues );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( D3D12FenceSubmitInfoKHR const & ) const = default;
# else
bool operator==( D3D12FenceSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( waitSemaphoreValuesCount == rhs.waitSemaphoreValuesCount ) &&
( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues ) &&
( signalSemaphoreValuesCount == rhs.signalSemaphoreValuesCount ) &&
( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues );
+# endif
}
bool operator!=( D3D12FenceSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -13164,9 +17959,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t signalSemaphoreValuesCount = {};
const uint64_t * pSignalSemaphoreValues = {};
};
- static_assert( sizeof( D3D12FenceSubmitInfoKHR ) == sizeof( VkD3D12FenceSubmitInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<D3D12FenceSubmitInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR ) ==
+ sizeof( VkD3D12FenceSubmitInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::D3D12FenceSubmitInfoKHR>::value,
+ "D3D12FenceSubmitInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eD3D12FenceSubmitInfoKHR>
@@ -13177,8 +17976,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugMarkerMarkerInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerMarkerInfoEXT;
+ using NativeType = VkDebugMarkerMarkerInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerMarkerInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT( const char * pMarkerName_ = {},
@@ -13195,8 +17996,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT &
- operator=( DebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugMarkerMarkerInfoEXT & operator=( DebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugMarkerMarkerInfoEXT & operator=( VkDebugMarkerMarkerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13205,41 +18005,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugMarkerMarkerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugMarkerMarkerInfoEXT & setPMarkerName( const char * pMarkerName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setPMarkerName( const char * pMarkerName_ ) VULKAN_HPP_NOEXCEPT
{
pMarkerName = pMarkerName_;
return *this;
}
- DebugMarkerMarkerInfoEXT & setColor( std::array<float, 4> color_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerMarkerInfoEXT & setColor( std::array<float, 4> color_ ) VULKAN_HPP_NOEXCEPT
{
color = color_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugMarkerMarkerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugMarkerMarkerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugMarkerMarkerInfoEXT *>( this );
}
- operator VkDebugMarkerMarkerInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugMarkerMarkerInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugMarkerMarkerInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const char * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 4> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pMarkerName, color );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DebugMarkerMarkerInfoEXT const & ) const = default;
-#else
+ std::partial_ordering operator<=>( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( pMarkerName != rhs.pMarkerName )
+ if ( auto cmp = strcmp( pMarkerName, rhs.pMarkerName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater;
+ if ( auto cmp = color <=> rhs.color; cmp != 0 )
+ return cmp;
+
+ return std::partial_ordering::equivalent;
+ }
+#endif
+
bool operator==( DebugMarkerMarkerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pMarkerName == rhs.pMarkerName ) &&
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( ( pMarkerName == rhs.pMarkerName ) || ( strcmp( pMarkerName, rhs.pMarkerName ) == 0 ) ) &&
( color == rhs.color );
}
@@ -13247,7 +18077,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerMarkerInfoEXT;
@@ -13255,9 +18084,13 @@ namespace VULKAN_HPP_NAMESPACE
const char * pMarkerName = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 4> color = {};
};
- static_assert( sizeof( DebugMarkerMarkerInfoEXT ) == sizeof( VkDebugMarkerMarkerInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugMarkerMarkerInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT ) ==
+ sizeof( VkDebugMarkerMarkerInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugMarkerMarkerInfoEXT>::value,
+ "DebugMarkerMarkerInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugMarkerMarkerInfoEXT>
@@ -13267,8 +18100,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugMarkerObjectNameInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectNameInfoEXT;
+ using NativeType = VkDebugMarkerObjectNameInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectNameInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DebugMarkerObjectNameInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ =
@@ -13288,8 +18123,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT &
- operator=( DebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugMarkerObjectNameInfoEXT & operator=( DebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugMarkerObjectNameInfoEXT & operator=( VkDebugMarkerObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13298,56 +18132,89 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugMarkerObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugMarkerObjectNameInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT &
setObjectType( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ ) VULKAN_HPP_NOEXCEPT
{
objectType = objectType_;
return *this;
}
- DebugMarkerObjectNameInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT
{
object = object_;
return *this;
}
- DebugMarkerObjectNameInfoEXT & setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectNameInfoEXT &
+ setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT
{
pObjectName = pObjectName_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugMarkerObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugMarkerObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugMarkerObjectNameInfoEXT *>( this );
}
- operator VkDebugMarkerObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugMarkerObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugMarkerObjectNameInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT const &,
+ uint64_t const &,
+ const char * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, objectType, object, pObjectName );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DebugMarkerObjectNameInfoEXT const & ) const = default;
-#else
+ std::strong_ordering operator<=>( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = objectType <=> rhs.objectType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = object <=> rhs.object; cmp != 0 )
+ return cmp;
+ if ( pObjectName != rhs.pObjectName )
+ if ( auto cmp = strcmp( pObjectName, rhs.pObjectName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) &&
- ( object == rhs.object ) && ( pObjectName == rhs.pObjectName );
+ ( object == rhs.object ) &&
+ ( ( pObjectName == rhs.pObjectName ) || ( strcmp( pObjectName, rhs.pObjectName ) == 0 ) );
}
bool operator!=( DebugMarkerObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugMarkerObjectNameInfoEXT;
@@ -13357,10 +18224,14 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t object = {};
const char * pObjectName = {};
};
- static_assert( sizeof( DebugMarkerObjectNameInfoEXT ) == sizeof( VkDebugMarkerObjectNameInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugMarkerObjectNameInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT ) ==
+ sizeof( VkDebugMarkerObjectNameInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugMarkerObjectNameInfoEXT>::value,
+ "DebugMarkerObjectNameInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugMarkerObjectNameInfoEXT>
@@ -13370,8 +18241,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugMarkerObjectTagInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectTagInfoEXT;
+ using NativeType = VkDebugMarkerObjectTagInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugMarkerObjectTagInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DebugMarkerObjectTagInfoEXT( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ =
@@ -13409,8 +18282,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT &
- operator=( DebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugMarkerObjectTagInfoEXT & operator=( DebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugMarkerObjectTagInfoEXT & operator=( VkDebugMarkerObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13419,38 +18291,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugMarkerObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugMarkerObjectTagInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT &
setObjectType( VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT objectType_ ) VULKAN_HPP_NOEXCEPT
{
objectType = objectType_;
return *this;
}
- DebugMarkerObjectTagInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setObject( uint64_t object_ ) VULKAN_HPP_NOEXCEPT
{
object = object_;
return *this;
}
- DebugMarkerObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT
{
tagName = tagName_;
return *this;
}
- DebugMarkerObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT
{
tagSize = tagSize_;
return *this;
}
- DebugMarkerObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugMarkerObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT
{
pTag = pTag_;
return *this;
@@ -13468,24 +18340,46 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugMarkerObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugMarkerObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugMarkerObjectTagInfoEXT *>( this );
}
- operator VkDebugMarkerObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugMarkerObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugMarkerObjectTagInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DebugReportObjectTypeEXT const &,
+ uint64_t const &,
+ uint64_t const &,
+ size_t const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, objectType, object, tagName, tagSize, pTag );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DebugMarkerObjectTagInfoEXT const & ) const = default;
#else
bool operator==( DebugMarkerObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) &&
( object == rhs.object ) && ( tagName == rhs.tagName ) && ( tagSize == rhs.tagSize ) &&
( pTag == rhs.pTag );
+# endif
}
bool operator!=( DebugMarkerObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -13504,10 +18398,14 @@ namespace VULKAN_HPP_NAMESPACE
size_t tagSize = {};
const void * pTag = {};
};
- static_assert( sizeof( DebugMarkerObjectTagInfoEXT ) == sizeof( VkDebugMarkerObjectTagInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugMarkerObjectTagInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT ) ==
+ sizeof( VkDebugMarkerObjectTagInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugMarkerObjectTagInfoEXT>::value,
+ "DebugMarkerObjectTagInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugMarkerObjectTagInfoEXT>
@@ -13517,7 +18415,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugReportCallbackCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDebugReportCallbackCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugReportCallbackCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -13537,8 +18437,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT &
- operator=( DebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugReportCallbackCreateInfoEXT &
+ operator=( DebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugReportCallbackCreateInfoEXT & operator=( VkDebugReportCallbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13547,48 +18447,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugReportCallbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugReportCallbackCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DebugReportCallbackCreateInfoEXT & setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT &
+ setPfnCallback( PFN_vkDebugReportCallbackEXT pfnCallback_ ) VULKAN_HPP_NOEXCEPT
{
pfnCallback = pfnCallback_;
return *this;
}
- DebugReportCallbackCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugReportCallbackCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
{
pUserData = pUserData_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugReportCallbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugReportCallbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT *>( this );
}
- operator VkDebugReportCallbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugReportCallbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugReportCallbackCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DebugReportFlagsEXT const &,
+ PFN_vkDebugReportCallbackEXT const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pfnCallback, pUserData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DebugReportCallbackCreateInfoEXT const & ) const = default;
#else
bool operator==( DebugReportCallbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pfnCallback == rhs.pfnCallback ) && ( pUserData == rhs.pUserData );
+# endif
}
bool operator!=( DebugReportCallbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -13604,10 +18526,14 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkDebugReportCallbackEXT pfnCallback = {};
void * pUserData = {};
};
- static_assert( sizeof( DebugReportCallbackCreateInfoEXT ) == sizeof( VkDebugReportCallbackCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugReportCallbackCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT ) ==
+ sizeof( VkDebugReportCallbackCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugReportCallbackCreateInfoEXT>::value,
+ "DebugReportCallbackCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugReportCallbackCreateInfoEXT>
@@ -13617,8 +18543,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugUtilsLabelEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsLabelEXT;
+ using NativeType = VkDebugUtilsLabelEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsLabelEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT( const char * pLabelName_ = {},
@@ -13634,8 +18562,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT &
- operator=( DebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugUtilsLabelEXT & operator=( DebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugUtilsLabelEXT & operator=( VkDebugUtilsLabelEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13644,41 +18571,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugUtilsLabelEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugUtilsLabelEXT & setPLabelName( const char * pLabelName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setPLabelName( const char * pLabelName_ ) VULKAN_HPP_NOEXCEPT
{
pLabelName = pLabelName_;
return *this;
}
- DebugUtilsLabelEXT & setColor( std::array<float, 4> color_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsLabelEXT & setColor( std::array<float, 4> color_ ) VULKAN_HPP_NOEXCEPT
{
color = color_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugUtilsLabelEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsLabelEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugUtilsLabelEXT *>( this );
}
- operator VkDebugUtilsLabelEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsLabelEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugUtilsLabelEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const char * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 4> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pLabelName, color );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DebugUtilsLabelEXT const & ) const = default;
-#else
+ std::partial_ordering operator<=>( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( pLabelName != rhs.pLabelName )
+ if ( auto cmp = strcmp( pLabelName, rhs.pLabelName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::partial_ordering::less : std::partial_ordering::greater;
+ if ( auto cmp = color <=> rhs.color; cmp != 0 )
+ return cmp;
+
+ return std::partial_ordering::equivalent;
+ }
+#endif
+
bool operator==( DebugUtilsLabelEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pLabelName == rhs.pLabelName ) &&
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( ( pLabelName == rhs.pLabelName ) || ( strcmp( pLabelName, rhs.pLabelName ) == 0 ) ) &&
( color == rhs.color );
}
@@ -13686,7 +18643,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsLabelEXT;
@@ -13694,9 +18650,12 @@ namespace VULKAN_HPP_NAMESPACE
const char * pLabelName = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 4> color = {};
};
- static_assert( sizeof( DebugUtilsLabelEXT ) == sizeof( VkDebugUtilsLabelEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugUtilsLabelEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT ) == sizeof( VkDebugUtilsLabelEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT>::value,
+ "DebugUtilsLabelEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugUtilsLabelEXT>
@@ -13706,8 +18665,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugUtilsObjectNameInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectNameInfoEXT;
+ using NativeType = VkDebugUtilsObjectNameInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectNameInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DebugUtilsObjectNameInfoEXT(
@@ -13727,8 +18688,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT &
- operator=( DebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugUtilsObjectNameInfoEXT & operator=( DebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugUtilsObjectNameInfoEXT & operator=( VkDebugUtilsObjectNameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -13737,55 +18697,89 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugUtilsObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugUtilsObjectNameInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT &
+ setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT
{
objectType = objectType_;
return *this;
}
- DebugUtilsObjectNameInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT
{
objectHandle = objectHandle_;
return *this;
}
- DebugUtilsObjectNameInfoEXT & setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectNameInfoEXT &
+ setPObjectName( const char * pObjectName_ ) VULKAN_HPP_NOEXCEPT
{
pObjectName = pObjectName_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugUtilsObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsObjectNameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugUtilsObjectNameInfoEXT *>( this );
}
- operator VkDebugUtilsObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsObjectNameInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugUtilsObjectNameInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ObjectType const &,
+ uint64_t const &,
+ const char * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, objectType, objectHandle, pObjectName );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DebugUtilsObjectNameInfoEXT const & ) const = default;
-#else
+ std::strong_ordering operator<=>( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = objectType <=> rhs.objectType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = objectHandle <=> rhs.objectHandle; cmp != 0 )
+ return cmp;
+ if ( pObjectName != rhs.pObjectName )
+ if ( auto cmp = strcmp( pObjectName, rhs.pObjectName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) &&
- ( objectHandle == rhs.objectHandle ) && ( pObjectName == rhs.pObjectName );
+ ( objectHandle == rhs.objectHandle ) &&
+ ( ( pObjectName == rhs.pObjectName ) || ( strcmp( pObjectName, rhs.pObjectName ) == 0 ) );
}
bool operator!=( DebugUtilsObjectNameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsObjectNameInfoEXT;
@@ -13794,10 +18788,14 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t objectHandle = {};
const char * pObjectName = {};
};
- static_assert( sizeof( DebugUtilsObjectNameInfoEXT ) == sizeof( VkDebugUtilsObjectNameInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugUtilsObjectNameInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT ) ==
+ sizeof( VkDebugUtilsObjectNameInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT>::value,
+ "DebugUtilsObjectNameInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugUtilsObjectNameInfoEXT>
@@ -13807,7 +18805,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugUtilsMessengerCallbackDataEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDebugUtilsMessengerCallbackDataEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDebugUtilsMessengerCallbackDataEXT;
@@ -13868,8 +18868,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
- operator=( DebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugUtilsMessengerCallbackDataEXT &
+ operator=( DebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugUtilsMessengerCallbackDataEXT &
operator=( VkDebugUtilsMessengerCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -13879,44 +18879,48 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugUtilsMessengerCallbackDataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
setFlags( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT & setPMessageIdName( const char * pMessageIdName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
+ setPMessageIdName( const char * pMessageIdName_ ) VULKAN_HPP_NOEXCEPT
{
pMessageIdName = pMessageIdName_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT & setMessageIdNumber( int32_t messageIdNumber_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
+ setMessageIdNumber( int32_t messageIdNumber_ ) VULKAN_HPP_NOEXCEPT
{
messageIdNumber = messageIdNumber_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT & setPMessage( const char * pMessage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
+ setPMessage( const char * pMessage_ ) VULKAN_HPP_NOEXCEPT
{
pMessage = pMessage_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT & setQueueLabelCount( uint32_t queueLabelCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
+ setQueueLabelCount( uint32_t queueLabelCount_ ) VULKAN_HPP_NOEXCEPT
{
queueLabelCount = queueLabelCount_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
setPQueueLabels( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pQueueLabels_ ) VULKAN_HPP_NOEXCEPT
{
pQueueLabels = pQueueLabels_;
@@ -13934,13 +18938,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DebugUtilsMessengerCallbackDataEXT & setCmdBufLabelCount( uint32_t cmdBufLabelCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
+ setCmdBufLabelCount( uint32_t cmdBufLabelCount_ ) VULKAN_HPP_NOEXCEPT
{
cmdBufLabelCount = cmdBufLabelCount_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
setPCmdBufLabels( const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * pCmdBufLabels_ ) VULKAN_HPP_NOEXCEPT
{
pCmdBufLabels = pCmdBufLabels_;
@@ -13958,13 +18963,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DebugUtilsMessengerCallbackDataEXT & setObjectCount( uint32_t objectCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
+ setObjectCount( uint32_t objectCount_ ) VULKAN_HPP_NOEXCEPT
{
objectCount = objectCount_;
return *this;
}
- DebugUtilsMessengerCallbackDataEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCallbackDataEXT &
setPObjects( const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects_ ) VULKAN_HPP_NOEXCEPT
{
pObjects = pObjects_;
@@ -13983,34 +18989,99 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugUtilsMessengerCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsMessengerCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugUtilsMessengerCallbackDataEXT *>( this );
}
- operator VkDebugUtilsMessengerCallbackDataEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsMessengerCallbackDataEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugUtilsMessengerCallbackDataEXT *>( this );
}
-#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DebugUtilsMessengerCallbackDataEXT const & ) const = default;
-#else
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataFlagsEXT const &,
+ const char * const &,
+ int32_t const &,
+ const char * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsLabelEXT * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ pMessageIdName,
+ messageIdNumber,
+ pMessage,
+ queueLabelCount,
+ pQueueLabels,
+ cmdBufLabelCount,
+ pCmdBufLabels,
+ objectCount,
+ pObjects );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ std::strong_ordering operator<=>( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( pMessageIdName != rhs.pMessageIdName )
+ if ( auto cmp = strcmp( pMessageIdName, rhs.pMessageIdName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = messageIdNumber <=> rhs.messageIdNumber; cmp != 0 )
+ return cmp;
+ if ( pMessage != rhs.pMessage )
+ if ( auto cmp = strcmp( pMessage, rhs.pMessage ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = queueLabelCount <=> rhs.queueLabelCount; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pQueueLabels <=> rhs.pQueueLabels; cmp != 0 )
+ return cmp;
+ if ( auto cmp = cmdBufLabelCount <=> rhs.cmdBufLabelCount; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pCmdBufLabels <=> rhs.pCmdBufLabels; cmp != 0 )
+ return cmp;
+ if ( auto cmp = objectCount <=> rhs.objectCount; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pObjects <=> rhs.pObjects; cmp != 0 )
+ return cmp;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
- ( pMessageIdName == rhs.pMessageIdName ) && ( messageIdNumber == rhs.messageIdNumber ) &&
- ( pMessage == rhs.pMessage ) && ( queueLabelCount == rhs.queueLabelCount ) &&
- ( pQueueLabels == rhs.pQueueLabels ) && ( cmdBufLabelCount == rhs.cmdBufLabelCount ) &&
- ( pCmdBufLabels == rhs.pCmdBufLabels ) && ( objectCount == rhs.objectCount ) &&
- ( pObjects == rhs.pObjects );
+ ( ( pMessageIdName == rhs.pMessageIdName ) || ( strcmp( pMessageIdName, rhs.pMessageIdName ) == 0 ) ) &&
+ ( messageIdNumber == rhs.messageIdNumber ) &&
+ ( ( pMessage == rhs.pMessage ) || ( strcmp( pMessage, rhs.pMessage ) == 0 ) ) &&
+ ( queueLabelCount == rhs.queueLabelCount ) && ( pQueueLabels == rhs.pQueueLabels ) &&
+ ( cmdBufLabelCount == rhs.cmdBufLabelCount ) && ( pCmdBufLabels == rhs.pCmdBufLabels ) &&
+ ( objectCount == rhs.objectCount ) && ( pObjects == rhs.pObjects );
}
bool operator!=( DebugUtilsMessengerCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDebugUtilsMessengerCallbackDataEXT;
@@ -14026,10 +19097,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t objectCount = {};
const VULKAN_HPP_NAMESPACE::DebugUtilsObjectNameInfoEXT * pObjects = {};
};
- static_assert( sizeof( DebugUtilsMessengerCallbackDataEXT ) == sizeof( VkDebugUtilsMessengerCallbackDataEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugUtilsMessengerCallbackDataEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT ) ==
+ sizeof( VkDebugUtilsMessengerCallbackDataEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCallbackDataEXT>::value,
+ "DebugUtilsMessengerCallbackDataEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugUtilsMessengerCallbackDataEXT>
@@ -14039,7 +19114,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugUtilsMessengerCreateInfoEXT
{
- static const bool allowDuplicate = true;
+ using NativeType = VkDebugUtilsMessengerCreateInfoEXT;
+
+ static const bool allowDuplicate = true;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsMessengerCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -14064,8 +19141,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT &
- operator=( DebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugUtilsMessengerCreateInfoEXT &
+ operator=( DebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugUtilsMessengerCreateInfoEXT & operator=( VkDebugUtilsMessengerCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -14074,65 +19151,87 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugUtilsMessengerCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugUtilsMessengerCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT &
setFlags( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DebugUtilsMessengerCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT &
setMessageSeverity( VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT messageSeverity_ ) VULKAN_HPP_NOEXCEPT
{
messageSeverity = messageSeverity_;
return *this;
}
- DebugUtilsMessengerCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT &
setMessageType( VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT messageType_ ) VULKAN_HPP_NOEXCEPT
{
messageType = messageType_;
return *this;
}
- DebugUtilsMessengerCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT &
setPfnUserCallback( PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT
{
pfnUserCallback = pfnUserCallback_;
return *this;
}
- DebugUtilsMessengerCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsMessengerCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
{
pUserData = pUserData_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugUtilsMessengerCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsMessengerCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT *>( this );
}
- operator VkDebugUtilsMessengerCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsMessengerCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageSeverityFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::DebugUtilsMessageTypeFlagsEXT const &,
+ PFN_vkDebugUtilsMessengerCallbackEXT const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, messageSeverity, messageType, pfnUserCallback, pUserData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DebugUtilsMessengerCreateInfoEXT const & ) const = default;
#else
bool operator==( DebugUtilsMessengerCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( messageSeverity == rhs.messageSeverity ) && ( messageType == rhs.messageType ) &&
( pfnUserCallback == rhs.pfnUserCallback ) && ( pUserData == rhs.pUserData );
+# endif
}
bool operator!=( DebugUtilsMessengerCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -14150,10 +19249,14 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkDebugUtilsMessengerCallbackEXT pfnUserCallback = {};
void * pUserData = {};
};
- static_assert( sizeof( DebugUtilsMessengerCreateInfoEXT ) == sizeof( VkDebugUtilsMessengerCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugUtilsMessengerCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT ) ==
+ sizeof( VkDebugUtilsMessengerCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugUtilsMessengerCreateInfoEXT>::value,
+ "DebugUtilsMessengerCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugUtilsMessengerCreateInfoEXT>
@@ -14163,8 +19266,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DebugUtilsObjectTagInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectTagInfoEXT;
+ using NativeType = VkDebugUtilsObjectTagInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDebugUtilsObjectTagInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DebugUtilsObjectTagInfoEXT(
@@ -14202,8 +19307,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT &
- operator=( DebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DebugUtilsObjectTagInfoEXT & operator=( DebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DebugUtilsObjectTagInfoEXT & operator=( VkDebugUtilsObjectTagInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -14212,37 +19316,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DebugUtilsObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DebugUtilsObjectTagInfoEXT & setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT &
+ setObjectType( VULKAN_HPP_NAMESPACE::ObjectType objectType_ ) VULKAN_HPP_NOEXCEPT
{
objectType = objectType_;
return *this;
}
- DebugUtilsObjectTagInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setObjectHandle( uint64_t objectHandle_ ) VULKAN_HPP_NOEXCEPT
{
objectHandle = objectHandle_;
return *this;
}
- DebugUtilsObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setTagName( uint64_t tagName_ ) VULKAN_HPP_NOEXCEPT
{
tagName = tagName_;
return *this;
}
- DebugUtilsObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setTagSize( size_t tagSize_ ) VULKAN_HPP_NOEXCEPT
{
tagSize = tagSize_;
return *this;
}
- DebugUtilsObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DebugUtilsObjectTagInfoEXT & setPTag( const void * pTag_ ) VULKAN_HPP_NOEXCEPT
{
pTag = pTag_;
return *this;
@@ -14260,24 +19365,46 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDebugUtilsObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsObjectTagInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDebugUtilsObjectTagInfoEXT *>( this );
}
- operator VkDebugUtilsObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDebugUtilsObjectTagInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDebugUtilsObjectTagInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ObjectType const &,
+ uint64_t const &,
+ uint64_t const &,
+ size_t const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, objectType, objectHandle, tagName, tagSize, pTag );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DebugUtilsObjectTagInfoEXT const & ) const = default;
#else
bool operator==( DebugUtilsObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( objectType == rhs.objectType ) &&
( objectHandle == rhs.objectHandle ) && ( tagName == rhs.tagName ) && ( tagSize == rhs.tagSize ) &&
( pTag == rhs.pTag );
+# endif
}
bool operator!=( DebugUtilsObjectTagInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -14295,10 +19422,13 @@ namespace VULKAN_HPP_NAMESPACE
size_t tagSize = {};
const void * pTag = {};
};
- static_assert( sizeof( DebugUtilsObjectTagInfoEXT ) == sizeof( VkDebugUtilsObjectTagInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DebugUtilsObjectTagInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT ) ==
+ sizeof( VkDebugUtilsObjectTagInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DebugUtilsObjectTagInfoEXT>::value,
+ "DebugUtilsObjectTagInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDebugUtilsObjectTagInfoEXT>
@@ -14308,7 +19438,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DedicatedAllocationBufferCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDedicatedAllocationBufferCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDedicatedAllocationBufferCreateInfoNV;
@@ -14326,8 +19458,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV &
- operator=( DedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DedicatedAllocationBufferCreateInfoNV &
+ operator=( DedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DedicatedAllocationBufferCreateInfoNV &
operator=( VkDedicatedAllocationBufferCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -14337,13 +19469,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DedicatedAllocationBufferCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DedicatedAllocationBufferCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationBufferCreateInfoNV &
setDedicatedAllocation( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ ) VULKAN_HPP_NOEXCEPT
{
dedicatedAllocation = dedicatedAllocation_;
@@ -14351,22 +19483,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDedicatedAllocationBufferCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDedicatedAllocationBufferCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV *>( this );
}
- operator VkDedicatedAllocationBufferCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDedicatedAllocationBufferCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, dedicatedAllocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DedicatedAllocationBufferCreateInfoNV const & ) const = default;
#else
bool operator==( DedicatedAllocationBufferCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocation == rhs.dedicatedAllocation );
+# endif
}
bool operator!=( DedicatedAllocationBufferCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -14380,10 +19528,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation = {};
};
- static_assert( sizeof( DedicatedAllocationBufferCreateInfoNV ) == sizeof( VkDedicatedAllocationBufferCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DedicatedAllocationBufferCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV ) ==
+ sizeof( VkDedicatedAllocationBufferCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DedicatedAllocationBufferCreateInfoNV>::value,
+ "DedicatedAllocationBufferCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDedicatedAllocationBufferCreateInfoNV>
@@ -14393,7 +19545,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DedicatedAllocationImageCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDedicatedAllocationImageCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDedicatedAllocationImageCreateInfoNV;
@@ -14411,8 +19565,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV &
- operator=( DedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DedicatedAllocationImageCreateInfoNV &
+ operator=( DedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DedicatedAllocationImageCreateInfoNV &
operator=( VkDedicatedAllocationImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -14422,13 +19576,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DedicatedAllocationImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DedicatedAllocationImageCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationImageCreateInfoNV &
setDedicatedAllocation( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation_ ) VULKAN_HPP_NOEXCEPT
{
dedicatedAllocation = dedicatedAllocation_;
@@ -14436,22 +19590,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDedicatedAllocationImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDedicatedAllocationImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV *>( this );
}
- operator VkDedicatedAllocationImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDedicatedAllocationImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, dedicatedAllocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DedicatedAllocationImageCreateInfoNV const & ) const = default;
#else
bool operator==( DedicatedAllocationImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dedicatedAllocation == rhs.dedicatedAllocation );
+# endif
}
bool operator!=( DedicatedAllocationImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -14465,10 +19635,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocation = {};
};
- static_assert( sizeof( DedicatedAllocationImageCreateInfoNV ) == sizeof( VkDedicatedAllocationImageCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DedicatedAllocationImageCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV ) ==
+ sizeof( VkDedicatedAllocationImageCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DedicatedAllocationImageCreateInfoNV>::value,
+ "DedicatedAllocationImageCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDedicatedAllocationImageCreateInfoNV>
@@ -14478,7 +19652,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DedicatedAllocationMemoryAllocateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDedicatedAllocationMemoryAllocateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDedicatedAllocationMemoryAllocateInfoNV;
@@ -14499,8 +19675,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV &
- operator=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DedicatedAllocationMemoryAllocateInfoNV &
+ operator=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DedicatedAllocationMemoryAllocateInfoNV &
operator=( VkDedicatedAllocationMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -14510,41 +19686,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DedicatedAllocationMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DedicatedAllocationMemoryAllocateInfoNV & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV &
+ setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- DedicatedAllocationMemoryAllocateInfoNV & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DedicatedAllocationMemoryAllocateInfoNV &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDedicatedAllocationMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDedicatedAllocationMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV *>( this );
}
- operator VkDedicatedAllocationMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDedicatedAllocationMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, image, buffer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DedicatedAllocationMemoryAllocateInfoNV const & ) const = default;
#else
bool operator==( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( buffer == rhs.buffer );
+# endif
}
bool operator!=( DedicatedAllocationMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -14559,11 +19757,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Image image = {};
VULKAN_HPP_NAMESPACE::Buffer buffer = {};
};
- static_assert( sizeof( DedicatedAllocationMemoryAllocateInfoNV ) ==
- sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DedicatedAllocationMemoryAllocateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV ) ==
+ sizeof( VkDedicatedAllocationMemoryAllocateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DedicatedAllocationMemoryAllocateInfoNV>::value,
+ "DedicatedAllocationMemoryAllocateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDedicatedAllocationMemoryAllocateInfoNV>
@@ -14571,119 +19773,148 @@ namespace VULKAN_HPP_NAMESPACE
using Type = DedicatedAllocationMemoryAllocateInfoNV;
};
- struct MemoryBarrier2KHR
+ struct MemoryBarrier2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier2KHR;
+ using NativeType = VkMemoryBarrier2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR
- MemoryBarrier2KHR( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask_ = {},
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask_ = {},
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask_ = {},
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR MemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {},
+ VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {},
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {},
+ VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {} ) VULKAN_HPP_NOEXCEPT
: srcStageMask( srcStageMask_ )
, srcAccessMask( srcAccessMask_ )
, dstStageMask( dstStageMask_ )
, dstAccessMask( dstAccessMask_ )
{}
- VULKAN_HPP_CONSTEXPR MemoryBarrier2KHR( MemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR MemoryBarrier2( MemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- MemoryBarrier2KHR( VkMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : MemoryBarrier2KHR( *reinterpret_cast<MemoryBarrier2KHR const *>( &rhs ) )
+ MemoryBarrier2( VkMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : MemoryBarrier2( *reinterpret_cast<MemoryBarrier2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2KHR &
- operator=( MemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryBarrier2 & operator=( MemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- MemoryBarrier2KHR & operator=( VkMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ MemoryBarrier2 & operator=( VkMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::MemoryBarrier2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryBarrier2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryBarrier2KHR &
- setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 &
+ setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT
{
srcStageMask = srcStageMask_;
return *this;
}
- MemoryBarrier2KHR & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- MemoryBarrier2KHR &
- setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 &
+ setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT
{
dstStageMask = dstStageMask_;
return *this;
}
- MemoryBarrier2KHR & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier2 &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryBarrier2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkMemoryBarrier2 *>( this );
+ }
+
+ explicit operator VkMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkMemoryBarrier2KHR *>( this );
+ return *reinterpret_cast<VkMemoryBarrier2 *>( this );
}
- operator VkMemoryBarrier2KHR &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags2 const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags2 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkMemoryBarrier2KHR *>( this );
+ return std::tie( sType, pNext, srcStageMask, srcAccessMask, dstStageMask, dstAccessMask );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( MemoryBarrier2KHR const & ) const = default;
+ auto operator<=>( MemoryBarrier2 const & ) const = default;
#else
- bool operator==( MemoryBarrier2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( MemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) &&
( srcAccessMask == rhs.srcAccessMask ) && ( dstStageMask == rhs.dstStageMask ) &&
( dstAccessMask == rhs.dstAccessMask );
+# endif
}
- bool operator!=( MemoryBarrier2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( MemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrier2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask = {};
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask = {};
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMemoryBarrier2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {};
+ VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {};
+ VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {};
};
- static_assert( sizeof( MemoryBarrier2KHR ) == sizeof( VkMemoryBarrier2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryBarrier2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryBarrier2 ) == sizeof( VkMemoryBarrier2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryBarrier2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryBarrier2>::value,
+ "MemoryBarrier2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eMemoryBarrier2KHR>
+ struct CppType<StructureType, StructureType::eMemoryBarrier2>
{
- using Type = MemoryBarrier2KHR;
+ using Type = MemoryBarrier2;
};
+ using MemoryBarrier2KHR = MemoryBarrier2;
struct ImageSubresourceRange
{
+ using NativeType = VkImageSubresourceRange;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageSubresourceRange( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {},
uint32_t baseMipLevel_ = {},
@@ -14704,8 +19935,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange &
- operator=( ImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageSubresourceRange & operator=( ImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageSubresourceRange & operator=( VkImageSubresourceRange const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -14714,55 +19944,76 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageSubresourceRange & setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange &
+ setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
{
aspectMask = aspectMask_;
return *this;
}
- ImageSubresourceRange & setBaseMipLevel( uint32_t baseMipLevel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setBaseMipLevel( uint32_t baseMipLevel_ ) VULKAN_HPP_NOEXCEPT
{
baseMipLevel = baseMipLevel_;
return *this;
}
- ImageSubresourceRange & setLevelCount( uint32_t levelCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setLevelCount( uint32_t levelCount_ ) VULKAN_HPP_NOEXCEPT
{
levelCount = levelCount_;
return *this;
}
- ImageSubresourceRange & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
{
baseArrayLayer = baseArrayLayer_;
return *this;
}
- ImageSubresourceRange & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSubresourceRange & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
{
layerCount = layerCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageSubresourceRange const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSubresourceRange const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageSubresourceRange *>( this );
}
- operator VkImageSubresourceRange &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSubresourceRange &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageSubresourceRange *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageAspectFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( aspectMask, baseMipLevel, levelCount, baseArrayLayer, layerCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageSubresourceRange const & ) const = default;
#else
bool operator==( ImageSubresourceRange const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( aspectMask == rhs.aspectMask ) && ( baseMipLevel == rhs.baseMipLevel ) &&
( levelCount == rhs.levelCount ) && ( baseArrayLayer == rhs.baseArrayLayer ) &&
( layerCount == rhs.layerCount );
+# endif
}
bool operator!=( ImageSubresourceRange const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -14778,27 +20029,32 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t baseArrayLayer = {};
uint32_t layerCount = {};
};
- static_assert( sizeof( ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageSubresourceRange>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSubresourceRange ) == sizeof( VkImageSubresourceRange ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageSubresourceRange>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageSubresourceRange>::value,
+ "ImageSubresourceRange is not nothrow_move_constructible!" );
- struct ImageMemoryBarrier2KHR
+ struct ImageMemoryBarrier2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier2KHR;
+ using NativeType = VkImageMemoryBarrier2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2KHR(
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask_ = {},
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask_ = {},
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask_ = {},
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- uint32_t srcQueueFamilyIndex_ = {},
- uint32_t dstQueueFamilyIndex_ = {},
- VULKAN_HPP_NAMESPACE::Image image_ = {},
- VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR
+ ImageMemoryBarrier2( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ = {},
+ VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ = {},
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ = {},
+ VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ uint32_t srcQueueFamilyIndex_ = {},
+ uint32_t dstQueueFamilyIndex_ = {},
+ VULKAN_HPP_NAMESPACE::Image image_ = {},
+ VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange_ = {} ) VULKAN_HPP_NOEXCEPT
: srcStageMask( srcStageMask_ )
, srcAccessMask( srcAccessMask_ )
, dstStageMask( dstStageMask_ )
@@ -14811,88 +20067,91 @@ namespace VULKAN_HPP_NAMESPACE
, subresourceRange( subresourceRange_ )
{}
- VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2KHR( ImageMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR ImageMemoryBarrier2( ImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageMemoryBarrier2KHR( VkImageMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : ImageMemoryBarrier2KHR( *reinterpret_cast<ImageMemoryBarrier2KHR const *>( &rhs ) )
+ ImageMemoryBarrier2( VkImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageMemoryBarrier2( *reinterpret_cast<ImageMemoryBarrier2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2KHR &
- operator=( ImageMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageMemoryBarrier2 & operator=( ImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageMemoryBarrier2KHR & operator=( VkImageMemoryBarrier2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ ImageMemoryBarrier2 & operator=( VkImageMemoryBarrier2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageMemoryBarrier2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageMemoryBarrier2KHR &
- setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask_ ) VULKAN_HPP_NOEXCEPT
{
srcStageMask = srcStageMask_;
return *this;
}
- ImageMemoryBarrier2KHR &
- setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- ImageMemoryBarrier2KHR &
- setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask_ ) VULKAN_HPP_NOEXCEPT
{
dstStageMask = dstStageMask_;
return *this;
}
- ImageMemoryBarrier2KHR &
- setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
- ImageMemoryBarrier2KHR & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT
{
oldLayout = oldLayout_;
return *this;
}
- ImageMemoryBarrier2KHR & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT
{
newLayout = newLayout_;
return *this;
}
- ImageMemoryBarrier2KHR & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
srcQueueFamilyIndex = srcQueueFamilyIndex_;
return *this;
}
- ImageMemoryBarrier2KHR & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
+ setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
dstQueueFamilyIndex = dstQueueFamilyIndex_;
return *this;
}
- ImageMemoryBarrier2KHR & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- ImageMemoryBarrier2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier2 &
setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT
{
subresourceRange = subresourceRange_;
@@ -14900,73 +20159,117 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageMemoryBarrier2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageMemoryBarrier2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkImageMemoryBarrier2KHR *>( this );
+ return *reinterpret_cast<const VkImageMemoryBarrier2 *>( this );
}
- operator VkImageMemoryBarrier2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageMemoryBarrier2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkImageMemoryBarrier2KHR *>( this );
+ return *reinterpret_cast<VkImageMemoryBarrier2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags2 const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags2 const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceRange const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ srcStageMask,
+ srcAccessMask,
+ dstStageMask,
+ dstAccessMask,
+ oldLayout,
+ newLayout,
+ srcQueueFamilyIndex,
+ dstQueueFamilyIndex,
+ image,
+ subresourceRange );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImageMemoryBarrier2KHR const & ) const = default;
+ auto operator<=>( ImageMemoryBarrier2 const & ) const = default;
#else
- bool operator==( ImageMemoryBarrier2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( ImageMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcStageMask == rhs.srcStageMask ) &&
( srcAccessMask == rhs.srcAccessMask ) && ( dstStageMask == rhs.dstStageMask ) &&
( dstAccessMask == rhs.dstAccessMask ) && ( oldLayout == rhs.oldLayout ) &&
( newLayout == rhs.newLayout ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) &&
( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( image == rhs.image ) &&
( subresourceRange == rhs.subresourceRange );
+# endif
}
- bool operator!=( ImageMemoryBarrier2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( ImageMemoryBarrier2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryBarrier2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR srcStageMask = {};
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR srcAccessMask = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR dstStageMask = {};
- VULKAN_HPP_NAMESPACE::AccessFlags2KHR dstAccessMask = {};
- VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- uint32_t srcQueueFamilyIndex = {};
- uint32_t dstQueueFamilyIndex = {};
- VULKAN_HPP_NAMESPACE::Image image = {};
- VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageMemoryBarrier2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 srcStageMask = {};
+ VULKAN_HPP_NAMESPACE::AccessFlags2 srcAccessMask = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 dstStageMask = {};
+ VULKAN_HPP_NAMESPACE::AccessFlags2 dstAccessMask = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout oldLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::ImageLayout newLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ uint32_t srcQueueFamilyIndex = {};
+ uint32_t dstQueueFamilyIndex = {};
+ VULKAN_HPP_NAMESPACE::Image image = {};
+ VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {};
};
- static_assert( sizeof( ImageMemoryBarrier2KHR ) == sizeof( VkImageMemoryBarrier2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageMemoryBarrier2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 ) == sizeof( VkImageMemoryBarrier2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2>::value,
+ "ImageMemoryBarrier2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eImageMemoryBarrier2KHR>
+ struct CppType<StructureType, StructureType::eImageMemoryBarrier2>
{
- using Type = ImageMemoryBarrier2KHR;
+ using Type = ImageMemoryBarrier2;
};
+ using ImageMemoryBarrier2KHR = ImageMemoryBarrier2;
- struct DependencyInfoKHR
+ struct DependencyInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDependencyInfoKHR;
+ using NativeType = VkDependencyInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDependencyInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR DependencyInfoKHR(
- VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {},
- uint32_t memoryBarrierCount_ = {},
- const VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR * pMemoryBarriers_ = {},
- uint32_t bufferMemoryBarrierCount_ = {},
- const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR * pBufferMemoryBarriers_ = {},
- uint32_t imageMemoryBarrierCount_ = {},
- const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR * pImageMemoryBarriers_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR
+ DependencyInfo( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ = {},
+ uint32_t memoryBarrierCount_ = {},
+ const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers_ = {},
+ uint32_t bufferMemoryBarrierCount_ = {},
+ const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers_ = {},
+ uint32_t imageMemoryBarrierCount_ = {},
+ const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers_ = {} ) VULKAN_HPP_NOEXCEPT
: dependencyFlags( dependencyFlags_ )
, memoryBarrierCount( memoryBarrierCount_ )
, pMemoryBarriers( pMemoryBarriers_ )
@@ -14976,20 +20279,19 @@ namespace VULKAN_HPP_NAMESPACE
, pImageMemoryBarriers( pImageMemoryBarriers_ )
{}
- VULKAN_HPP_CONSTEXPR DependencyInfoKHR( DependencyInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR DependencyInfo( DependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DependencyInfoKHR( VkDependencyInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : DependencyInfoKHR( *reinterpret_cast<DependencyInfoKHR const *>( &rhs ) )
+ DependencyInfo( VkDependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DependencyInfo( *reinterpret_cast<DependencyInfo const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- DependencyInfoKHR(
+ DependencyInfo(
VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR> const &
- memoryBarriers_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR> const &
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::MemoryBarrier2> const & memoryBarriers_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2> const &
bufferMemoryBarriers_ = {},
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR> const &
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2> const &
imageMemoryBarriers_ = {} )
: dependencyFlags( dependencyFlags_ )
, memoryBarrierCount( static_cast<uint32_t>( memoryBarriers_.size() ) )
@@ -15002,44 +20304,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DependencyInfoKHR &
- operator=( DependencyInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DependencyInfo & operator=( DependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DependencyInfoKHR & operator=( VkDependencyInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ DependencyInfo & operator=( VkDependencyInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DependencyInfoKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DependencyInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DependencyInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DependencyInfoKHR & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo &
+ setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT
{
dependencyFlags = dependencyFlags_;
return *this;
}
- DependencyInfoKHR & setMemoryBarrierCount( uint32_t memoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setMemoryBarrierCount( uint32_t memoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT
{
memoryBarrierCount = memoryBarrierCount_;
return *this;
}
- DependencyInfoKHR &
- setPMemoryBarriers( const VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR * pMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo &
+ setPMemoryBarriers( const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
{
pMemoryBarriers = pMemoryBarriers_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- DependencyInfoKHR & setMemoryBarriers(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR> const &
+ DependencyInfo & setMemoryBarriers(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::MemoryBarrier2> const &
memoryBarriers_ ) VULKAN_HPP_NOEXCEPT
{
memoryBarrierCount = static_cast<uint32_t>( memoryBarriers_.size() );
@@ -15048,22 +20350,23 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DependencyInfoKHR & setBufferMemoryBarrierCount( uint32_t bufferMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo &
+ setBufferMemoryBarrierCount( uint32_t bufferMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT
{
bufferMemoryBarrierCount = bufferMemoryBarrierCount_;
return *this;
}
- DependencyInfoKHR & setPBufferMemoryBarriers(
- const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR * pBufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPBufferMemoryBarriers(
+ const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
{
pBufferMemoryBarriers = pBufferMemoryBarriers_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- DependencyInfoKHR & setBufferMemoryBarriers(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR> const &
+ DependencyInfo & setBufferMemoryBarriers(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2> const &
bufferMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
{
bufferMemoryBarrierCount = static_cast<uint32_t>( bufferMemoryBarriers_.size() );
@@ -15072,22 +20375,23 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DependencyInfoKHR & setImageMemoryBarrierCount( uint32_t imageMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo &
+ setImageMemoryBarrierCount( uint32_t imageMemoryBarrierCount_ ) VULKAN_HPP_NOEXCEPT
{
imageMemoryBarrierCount = imageMemoryBarrierCount_;
return *this;
}
- DependencyInfoKHR & setPImageMemoryBarriers(
- const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR * pImageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DependencyInfo & setPImageMemoryBarriers(
+ const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
{
pImageMemoryBarriers = pImageMemoryBarriers_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- DependencyInfoKHR & setImageMemoryBarriers(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR> const &
+ DependencyInfo & setImageMemoryBarriers(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2> const &
imageMemoryBarriers_ ) VULKAN_HPP_NOEXCEPT
{
imageMemoryBarrierCount = static_cast<uint32_t>( imageMemoryBarriers_.size() );
@@ -15097,58 +20401,96 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDependencyInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDependencyInfo const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkDependencyInfoKHR *>( this );
+ return *reinterpret_cast<const VkDependencyInfo *>( this );
}
- operator VkDependencyInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDependencyInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkDependencyInfoKHR *>( this );
+ return *reinterpret_cast<VkDependencyInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DependencyFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ dependencyFlags,
+ memoryBarrierCount,
+ pMemoryBarriers,
+ bufferMemoryBarrierCount,
+ pBufferMemoryBarriers,
+ imageMemoryBarrierCount,
+ pImageMemoryBarriers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DependencyInfoKHR const & ) const = default;
+ auto operator<=>( DependencyInfo const & ) const = default;
#else
- bool operator==( DependencyInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( DependencyInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dependencyFlags == rhs.dependencyFlags ) &&
( memoryBarrierCount == rhs.memoryBarrierCount ) && ( pMemoryBarriers == rhs.pMemoryBarriers ) &&
( bufferMemoryBarrierCount == rhs.bufferMemoryBarrierCount ) &&
( pBufferMemoryBarriers == rhs.pBufferMemoryBarriers ) &&
( imageMemoryBarrierCount == rhs.imageMemoryBarrierCount ) &&
( pImageMemoryBarriers == rhs.pImageMemoryBarriers );
+# endif
}
- bool operator!=( DependencyInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( DependencyInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDependencyInfoKHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {};
- uint32_t memoryBarrierCount = {};
- const VULKAN_HPP_NAMESPACE::MemoryBarrier2KHR * pMemoryBarriers = {};
- uint32_t bufferMemoryBarrierCount = {};
- const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2KHR * pBufferMemoryBarriers = {};
- uint32_t imageMemoryBarrierCount = {};
- const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2KHR * pImageMemoryBarriers = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDependencyInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {};
+ uint32_t memoryBarrierCount = {};
+ const VULKAN_HPP_NAMESPACE::MemoryBarrier2 * pMemoryBarriers = {};
+ uint32_t bufferMemoryBarrierCount = {};
+ const VULKAN_HPP_NAMESPACE::BufferMemoryBarrier2 * pBufferMemoryBarriers = {};
+ uint32_t imageMemoryBarrierCount = {};
+ const VULKAN_HPP_NAMESPACE::ImageMemoryBarrier2 * pImageMemoryBarriers = {};
};
- static_assert( sizeof( DependencyInfoKHR ) == sizeof( VkDependencyInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DependencyInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DependencyInfo ) == sizeof( VkDependencyInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DependencyInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DependencyInfo>::value,
+ "DependencyInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eDependencyInfoKHR>
+ struct CppType<StructureType, StructureType::eDependencyInfo>
{
- using Type = DependencyInfoKHR;
+ using Type = DependencyInfo;
};
+ using DependencyInfoKHR = DependencyInfo;
struct DescriptorBufferInfo
{
+ using NativeType = VkDescriptorBufferInfo;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorBufferInfo( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {},
@@ -15165,8 +20507,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo &
- operator=( DescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorBufferInfo & operator=( DescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorBufferInfo & operator=( VkDescriptorBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -15175,41 +20516,61 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorBufferInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- DescriptorBufferInfo & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- DescriptorBufferInfo & setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorBufferInfo &
+ setRange( VULKAN_HPP_NAMESPACE::DeviceSize range_ ) VULKAN_HPP_NOEXCEPT
{
range = range_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorBufferInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorBufferInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorBufferInfo *>( this );
}
- operator VkDescriptorBufferInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorBufferInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorBufferInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( buffer, offset, range );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorBufferInfo const & ) const = default;
#else
bool operator==( DescriptorBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( buffer == rhs.buffer ) && ( offset == rhs.offset ) && ( range == rhs.range );
+# endif
}
bool operator!=( DescriptorBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15223,12 +20584,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
VULKAN_HPP_NAMESPACE::DeviceSize range = {};
};
- static_assert( sizeof( DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorBufferInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorBufferInfo ) == sizeof( VkDescriptorBufferInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorBufferInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorBufferInfo>::value,
+ "DescriptorBufferInfo is not nothrow_move_constructible!" );
struct DescriptorImageInfo
{
+ using NativeType = VkDescriptorImageInfo;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorImageInfo( VULKAN_HPP_NAMESPACE::Sampler sampler_ = {},
VULKAN_HPP_NAMESPACE::ImageView imageView_ = {},
@@ -15246,8 +20612,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo &
- operator=( DescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorImageInfo & operator=( DescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorImageInfo & operator=( VkDescriptorImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -15256,41 +20621,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorImageInfo & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo &
+ setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT
{
sampler = sampler_;
return *this;
}
- DescriptorImageInfo & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo &
+ setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
{
imageView = imageView_;
return *this;
}
- DescriptorImageInfo & setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorImageInfo &
+ setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT
{
imageLayout = imageLayout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorImageInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorImageInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorImageInfo *>( this );
}
- operator VkDescriptorImageInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorImageInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorImageInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Sampler const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sampler, imageView, imageLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorImageInfo const & ) const = default;
#else
bool operator==( DescriptorImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sampler == rhs.sampler ) && ( imageView == rhs.imageView ) && ( imageLayout == rhs.imageLayout );
+# endif
}
bool operator!=( DescriptorImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15304,12 +20690,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageView imageView = {};
VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
};
- static_assert( sizeof( DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorImageInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorImageInfo ) == sizeof( VkDescriptorImageInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorImageInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorImageInfo>::value,
+ "DescriptorImageInfo is not nothrow_move_constructible!" );
struct DescriptorPoolSize
{
+ using NativeType = VkDescriptorPoolSize;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
DescriptorPoolSize( VULKAN_HPP_NAMESPACE::DescriptorType type_ = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler,
@@ -15325,8 +20716,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize &
- operator=( DescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorPoolSize & operator=( DescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorPoolSize & operator=( VkDescriptorPoolSize const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -15335,35 +20725,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorPoolSize & setType( VULKAN_HPP_NAMESPACE::DescriptorType type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize &
+ setType( VULKAN_HPP_NAMESPACE::DescriptorType type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- DescriptorPoolSize & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolSize & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorCount = descriptorCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorPoolSize const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorPoolSize const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorPoolSize *>( this );
}
- operator VkDescriptorPoolSize &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorPoolSize &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorPoolSize *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DescriptorType const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( type, descriptorCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorPoolSize const & ) const = default;
#else
bool operator==( DescriptorPoolSize const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( type == rhs.type ) && ( descriptorCount == rhs.descriptorCount );
+# endif
}
bool operator!=( DescriptorPoolSize const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15376,14 +20783,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DescriptorType type = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler;
uint32_t descriptorCount = {};
};
- static_assert( sizeof( DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorPoolSize>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPoolSize ) == sizeof( VkDescriptorPoolSize ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorPoolSize>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorPoolSize>::value,
+ "DescriptorPoolSize is not nothrow_move_constructible!" );
struct DescriptorPoolCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorPoolCreateInfo;
+ using NativeType = VkDescriptorPoolCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorPoolCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -15416,8 +20828,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo &
- operator=( DescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorPoolCreateInfo & operator=( DescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorPoolCreateInfo & operator=( VkDescriptorPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -15426,31 +20837,32 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DescriptorPoolCreateInfo & setMaxSets( uint32_t maxSets_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setMaxSets( uint32_t maxSets_ ) VULKAN_HPP_NOEXCEPT
{
maxSets = maxSets_;
return *this;
}
- DescriptorPoolCreateInfo & setPoolSizeCount( uint32_t poolSizeCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo & setPoolSizeCount( uint32_t poolSizeCount_ ) VULKAN_HPP_NOEXCEPT
{
poolSizeCount = poolSizeCount_;
return *this;
}
- DescriptorPoolCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolCreateInfo &
setPPoolSizes( const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes_ ) VULKAN_HPP_NOEXCEPT
{
pPoolSizes = pPoolSizes_;
@@ -15469,23 +20881,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorPoolCreateInfo *>( this );
}
- operator VkDescriptorPoolCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorPoolCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorPoolCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorPoolCreateFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, maxSets, poolSizeCount, pPoolSizes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorPoolCreateInfo const & ) const = default;
#else
bool operator==( DescriptorPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( maxSets == rhs.maxSets ) &&
( poolSizeCount == rhs.poolSizeCount ) && ( pPoolSizes == rhs.pPoolSizes );
+# endif
}
bool operator!=( DescriptorPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15502,9 +20935,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t poolSizeCount = {};
const VULKAN_HPP_NAMESPACE::DescriptorPoolSize * pPoolSizes = {};
};
- static_assert( sizeof( DescriptorPoolCreateInfo ) == sizeof( VkDescriptorPoolCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorPoolCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo ) ==
+ sizeof( VkDescriptorPoolCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorPoolCreateInfo>::value,
+ "DescriptorPoolCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorPoolCreateInfo>
@@ -15512,46 +20949,49 @@ namespace VULKAN_HPP_NAMESPACE
using Type = DescriptorPoolCreateInfo;
};
- struct DescriptorPoolInlineUniformBlockCreateInfoEXT
+ struct DescriptorPoolInlineUniformBlockCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDescriptorPoolInlineUniformBlockCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::eDescriptorPoolInlineUniformBlockCreateInfoEXT;
+ StructureType::eDescriptorPoolInlineUniformBlockCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
- DescriptorPoolInlineUniformBlockCreateInfoEXT( uint32_t maxInlineUniformBlockBindings_ = {} ) VULKAN_HPP_NOEXCEPT
+ DescriptorPoolInlineUniformBlockCreateInfo( uint32_t maxInlineUniformBlockBindings_ = {} ) VULKAN_HPP_NOEXCEPT
: maxInlineUniformBlockBindings( maxInlineUniformBlockBindings_ )
{}
- VULKAN_HPP_CONSTEXPR DescriptorPoolInlineUniformBlockCreateInfoEXT(
- DescriptorPoolInlineUniformBlockCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR DescriptorPoolInlineUniformBlockCreateInfo(
+ DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DescriptorPoolInlineUniformBlockCreateInfoEXT( VkDescriptorPoolInlineUniformBlockCreateInfoEXT const & rhs )
+ DescriptorPoolInlineUniformBlockCreateInfo( VkDescriptorPoolInlineUniformBlockCreateInfo const & rhs )
VULKAN_HPP_NOEXCEPT
- : DescriptorPoolInlineUniformBlockCreateInfoEXT(
- *reinterpret_cast<DescriptorPoolInlineUniformBlockCreateInfoEXT const *>( &rhs ) )
+ : DescriptorPoolInlineUniformBlockCreateInfo(
+ *reinterpret_cast<DescriptorPoolInlineUniformBlockCreateInfo const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfoEXT &
- operator=( DescriptorPoolInlineUniformBlockCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorPoolInlineUniformBlockCreateInfo &
+ operator=( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DescriptorPoolInlineUniformBlockCreateInfoEXT &
- operator=( VkDescriptorPoolInlineUniformBlockCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ DescriptorPoolInlineUniformBlockCreateInfo &
+ operator=( VkDescriptorPoolInlineUniformBlockCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfoEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorPoolInlineUniformBlockCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfo &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorPoolInlineUniformBlockCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorPoolInlineUniformBlockCreateInfo &
setMaxInlineUniformBlockBindings( uint32_t maxInlineUniformBlockBindings_ ) VULKAN_HPP_NOEXCEPT
{
maxInlineUniformBlockBindings = maxInlineUniformBlockBindings_;
@@ -15559,52 +20999,75 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorPoolInlineUniformBlockCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorPoolInlineUniformBlockCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT *>( this );
+ return *reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfo *>( this );
}
- operator VkDescriptorPoolInlineUniformBlockCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorPoolInlineUniformBlockCreateInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkDescriptorPoolInlineUniformBlockCreateInfoEXT *>( this );
+ return *reinterpret_cast<VkDescriptorPoolInlineUniformBlockCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxInlineUniformBlockBindings );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DescriptorPoolInlineUniformBlockCreateInfoEXT const & ) const = default;
+ auto operator<=>( DescriptorPoolInlineUniformBlockCreateInfo const & ) const = default;
#else
- bool operator==( DescriptorPoolInlineUniformBlockCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxInlineUniformBlockBindings == rhs.maxInlineUniformBlockBindings );
+# endif
}
- bool operator!=( DescriptorPoolInlineUniformBlockCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( DescriptorPoolInlineUniformBlockCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorPoolInlineUniformBlockCreateInfoEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDescriptorPoolInlineUniformBlockCreateInfo;
const void * pNext = {};
uint32_t maxInlineUniformBlockBindings = {};
};
- static_assert( sizeof( DescriptorPoolInlineUniformBlockCreateInfoEXT ) ==
- sizeof( VkDescriptorPoolInlineUniformBlockCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorPoolInlineUniformBlockCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo ) ==
+ sizeof( VkDescriptorPoolInlineUniformBlockCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorPoolInlineUniformBlockCreateInfo>::value,
+ "DescriptorPoolInlineUniformBlockCreateInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eDescriptorPoolInlineUniformBlockCreateInfoEXT>
+ struct CppType<StructureType, StructureType::eDescriptorPoolInlineUniformBlockCreateInfo>
{
- using Type = DescriptorPoolInlineUniformBlockCreateInfoEXT;
+ using Type = DescriptorPoolInlineUniformBlockCreateInfo;
};
+ using DescriptorPoolInlineUniformBlockCreateInfoEXT = DescriptorPoolInlineUniformBlockCreateInfo;
struct DescriptorSetAllocateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetAllocateInfo;
+ using NativeType = VkDescriptorSetAllocateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetAllocateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorSetAllocateInfo(
@@ -15635,8 +21098,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo &
- operator=( DescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetAllocateInfo & operator=( DescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetAllocateInfo & operator=( VkDescriptorSetAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -15645,26 +21107,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorSetAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorSetAllocateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo &
setDescriptorPool( VULKAN_HPP_NAMESPACE::DescriptorPool descriptorPool_ ) VULKAN_HPP_NOEXCEPT
{
descriptorPool = descriptorPool_;
return *this;
}
- DescriptorSetAllocateInfo & setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo &
+ setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorSetCount = descriptorSetCount_;
return *this;
}
- DescriptorSetAllocateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetAllocateInfo &
setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT
{
pSetLayouts = pSetLayouts_;
@@ -15683,23 +21146,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorSetAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetAllocateInfo *>( this );
}
- operator VkDescriptorSetAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorPool const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, descriptorPool, descriptorSetCount, pSetLayouts );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetAllocateInfo const & ) const = default;
#else
bool operator==( DescriptorSetAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorPool == rhs.descriptorPool ) &&
( descriptorSetCount == rhs.descriptorSetCount ) && ( pSetLayouts == rhs.pSetLayouts );
+# endif
}
bool operator!=( DescriptorSetAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15715,10 +21198,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t descriptorSetCount = {};
const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts = {};
};
- static_assert( sizeof( DescriptorSetAllocateInfo ) == sizeof( VkDescriptorSetAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetAllocateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo ) ==
+ sizeof( VkDescriptorSetAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetAllocateInfo>::value,
+ "DescriptorSetAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorSetAllocateInfo>
@@ -15728,6 +21214,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DescriptorSetLayoutBinding
{
+ using NativeType = VkDescriptorSetLayoutBinding;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorSetLayoutBinding(
uint32_t binding_ = {},
@@ -15764,8 +21252,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding &
- operator=( DescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetLayoutBinding & operator=( DescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetLayoutBinding & operator=( VkDescriptorSetLayoutBinding const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -15774,32 +21261,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorSetLayoutBinding & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
{
binding = binding_;
return *this;
}
- DescriptorSetLayoutBinding &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding &
setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT
{
descriptorType = descriptorType_;
return *this;
}
- DescriptorSetLayoutBinding & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding &
+ setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorCount = descriptorCount_;
return *this;
}
- DescriptorSetLayoutBinding & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding &
+ setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT
{
stageFlags = stageFlags_;
return *this;
}
- DescriptorSetLayoutBinding &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBinding &
setPImmutableSamplers( const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers_ ) VULKAN_HPP_NOEXCEPT
{
pImmutableSamplers = pImmutableSamplers_;
@@ -15818,24 +21307,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorSetLayoutBinding const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutBinding const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetLayoutBinding *>( this );
}
- operator VkDescriptorSetLayoutBinding &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutBinding &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetLayoutBinding *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DescriptorType const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ const VULKAN_HPP_NAMESPACE::Sampler * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( binding, descriptorType, descriptorCount, stageFlags, pImmutableSamplers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetLayoutBinding const & ) const = default;
#else
bool operator==( DescriptorSetLayoutBinding const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( binding == rhs.binding ) && ( descriptorType == rhs.descriptorType ) &&
( descriptorCount == rhs.descriptorCount ) && ( stageFlags == rhs.stageFlags ) &&
( pImmutableSamplers == rhs.pImmutableSamplers );
+# endif
}
bool operator!=( DescriptorSetLayoutBinding const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15851,14 +21360,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags = {};
const VULKAN_HPP_NAMESPACE::Sampler * pImmutableSamplers = {};
};
- static_assert( sizeof( DescriptorSetLayoutBinding ) == sizeof( VkDescriptorSetLayoutBinding ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetLayoutBinding>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding ) ==
+ sizeof( VkDescriptorSetLayoutBinding ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding>::value,
+ "DescriptorSetLayoutBinding is not nothrow_move_constructible!" );
struct DescriptorSetLayoutBindingFlagsCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDescriptorSetLayoutBindingFlagsCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo;
@@ -15888,8 +21402,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo &
- operator=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetLayoutBindingFlagsCreateInfo &
+ operator=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetLayoutBindingFlagsCreateInfo &
operator=( VkDescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -15899,19 +21413,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorSetLayoutBindingFlagsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorSetLayoutBindingFlagsCreateInfo & setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo &
+ setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT
{
bindingCount = bindingCount_;
return *this;
}
- DescriptorSetLayoutBindingFlagsCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutBindingFlagsCreateInfo &
setPBindingFlags( const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags_ ) VULKAN_HPP_NOEXCEPT
{
pBindingFlags = pBindingFlags_;
@@ -15930,23 +21446,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorSetLayoutBindingFlagsCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutBindingFlagsCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo *>( this );
}
- operator VkDescriptorSetLayoutBindingFlagsCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutBindingFlagsCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, bindingCount, pBindingFlags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetLayoutBindingFlagsCreateInfo const & ) const = default;
#else
bool operator==( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bindingCount == rhs.bindingCount ) &&
( pBindingFlags == rhs.pBindingFlags );
+# endif
}
bool operator!=( DescriptorSetLayoutBindingFlagsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -15961,11 +21496,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t bindingCount = {};
const VULKAN_HPP_NAMESPACE::DescriptorBindingFlags * pBindingFlags = {};
};
- static_assert( sizeof( DescriptorSetLayoutBindingFlagsCreateInfo ) ==
- sizeof( VkDescriptorSetLayoutBindingFlagsCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetLayoutBindingFlagsCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo ) ==
+ sizeof( VkDescriptorSetLayoutBindingFlagsCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBindingFlagsCreateInfo>::value,
+ "DescriptorSetLayoutBindingFlagsCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorSetLayoutBindingFlagsCreateInfo>
@@ -15976,8 +21515,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DescriptorSetLayoutCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutCreateInfo;
+ using NativeType = VkDescriptorSetLayoutCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorSetLayoutCreateInfo(
@@ -16006,8 +21547,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo &
- operator=( DescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetLayoutCreateInfo &
+ operator=( DescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetLayoutCreateInfo & operator=( VkDescriptorSetLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -16016,26 +21557,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorSetLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorSetLayoutCreateInfo &
- setFlags( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DescriptorSetLayoutCreateInfo & setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo &
+ setBindingCount( uint32_t bindingCount_ ) VULKAN_HPP_NOEXCEPT
{
bindingCount = bindingCount_;
return *this;
}
- DescriptorSetLayoutCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutCreateInfo &
setPBindings( const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings_ ) VULKAN_HPP_NOEXCEPT
{
pBindings = pBindings_;
@@ -16054,23 +21596,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorSetLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetLayoutCreateInfo *>( this );
}
- operator VkDescriptorSetLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetLayoutCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, bindingCount, pBindings );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetLayoutCreateInfo const & ) const = default;
#else
bool operator==( DescriptorSetLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( bindingCount == rhs.bindingCount ) && ( pBindings == rhs.pBindings );
+# endif
}
bool operator!=( DescriptorSetLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16086,10 +21648,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t bindingCount = {};
const VULKAN_HPP_NAMESPACE::DescriptorSetLayoutBinding * pBindings = {};
};
- static_assert( sizeof( DescriptorSetLayoutCreateInfo ) == sizeof( VkDescriptorSetLayoutCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetLayoutCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo ) ==
+ sizeof( VkDescriptorSetLayoutCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutCreateInfo>::value,
+ "DescriptorSetLayoutCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorSetLayoutCreateInfo>
@@ -16099,8 +21665,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DescriptorSetLayoutSupport
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutSupport;
+ using NativeType = VkDescriptorSetLayoutSupport;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDescriptorSetLayoutSupport;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorSetLayoutSupport( VULKAN_HPP_NAMESPACE::Bool32 supported_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -16115,8 +21683,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetLayoutSupport &
- operator=( DescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetLayoutSupport & operator=( DescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetLayoutSupport & operator=( VkDescriptorSetLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -16124,22 +21691,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDescriptorSetLayoutSupport const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutSupport const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetLayoutSupport *>( this );
}
- operator VkDescriptorSetLayoutSupport &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetLayoutSupport &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetLayoutSupport *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, supported );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetLayoutSupport const & ) const = default;
#else
bool operator==( DescriptorSetLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supported == rhs.supported );
+# endif
}
bool operator!=( DescriptorSetLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16153,10 +21736,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 supported = {};
};
- static_assert( sizeof( DescriptorSetLayoutSupport ) == sizeof( VkDescriptorSetLayoutSupport ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetLayoutSupport>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport ) ==
+ sizeof( VkDescriptorSetLayoutSupport ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetLayoutSupport>::value,
+ "DescriptorSetLayoutSupport is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorSetLayoutSupport>
@@ -16167,7 +21753,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DescriptorSetVariableDescriptorCountAllocateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDescriptorSetVariableDescriptorCountAllocateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo;
@@ -16197,8 +21785,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo &
- operator=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetVariableDescriptorCountAllocateInfo &
+ operator=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetVariableDescriptorCountAllocateInfo &
operator=( VkDescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -16208,21 +21796,22 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorSetVariableDescriptorCountAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorSetVariableDescriptorCountAllocateInfo &
- setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo &
+ setDescriptorSetCount( uint32_t descriptorSetCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorSetCount = descriptorSetCount_;
return *this;
}
- DescriptorSetVariableDescriptorCountAllocateInfo &
- setPDescriptorCounts( const uint32_t * pDescriptorCounts_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountAllocateInfo &
+ setPDescriptorCounts( const uint32_t * pDescriptorCounts_ ) VULKAN_HPP_NOEXCEPT
{
pDescriptorCounts = pDescriptorCounts_;
return *this;
@@ -16239,23 +21828,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorSetVariableDescriptorCountAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetVariableDescriptorCountAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo *>( this );
}
- operator VkDescriptorSetVariableDescriptorCountAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetVariableDescriptorCountAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, descriptorSetCount, pDescriptorCounts );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetVariableDescriptorCountAllocateInfo const & ) const = default;
#else
bool operator==( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( descriptorSetCount == rhs.descriptorSetCount ) &&
( pDescriptorCounts == rhs.pDescriptorCounts );
+# endif
}
bool operator!=( DescriptorSetVariableDescriptorCountAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16270,11 +21878,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t descriptorSetCount = {};
const uint32_t * pDescriptorCounts = {};
};
- static_assert( sizeof( DescriptorSetVariableDescriptorCountAllocateInfo ) ==
- sizeof( VkDescriptorSetVariableDescriptorCountAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetVariableDescriptorCountAllocateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo ) ==
+ sizeof( VkDescriptorSetVariableDescriptorCountAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountAllocateInfo>::value,
+ "DescriptorSetVariableDescriptorCountAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorSetVariableDescriptorCountAllocateInfo>
@@ -16285,7 +21897,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DescriptorSetVariableDescriptorCountLayoutSupport
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDescriptorSetVariableDescriptorCountLayoutSupport;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport;
@@ -16305,8 +21919,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorSetVariableDescriptorCountLayoutSupport &
- operator=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorSetVariableDescriptorCountLayoutSupport &
+ operator=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorSetVariableDescriptorCountLayoutSupport &
operator=( VkDescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -16316,23 +21930,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDescriptorSetVariableDescriptorCountLayoutSupport const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetVariableDescriptorCountLayoutSupport const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport *>( this );
}
- operator VkDescriptorSetVariableDescriptorCountLayoutSupport &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorSetVariableDescriptorCountLayoutSupport &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupport *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxVariableDescriptorCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorSetVariableDescriptorCountLayoutSupport const & ) const = default;
#else
bool operator==( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxVariableDescriptorCount == rhs.maxVariableDescriptorCount );
+# endif
}
bool operator!=( DescriptorSetVariableDescriptorCountLayoutSupport const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16346,11 +21976,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxVariableDescriptorCount = {};
};
- static_assert( sizeof( DescriptorSetVariableDescriptorCountLayoutSupport ) ==
- sizeof( VkDescriptorSetVariableDescriptorCountLayoutSupport ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorSetVariableDescriptorCountLayoutSupport>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport ) ==
+ sizeof( VkDescriptorSetVariableDescriptorCountLayoutSupport ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorSetVariableDescriptorCountLayoutSupport>::value,
+ "DescriptorSetVariableDescriptorCountLayoutSupport is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorSetVariableDescriptorCountLayoutSupport>
@@ -16361,6 +21995,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DescriptorUpdateTemplateEntry
{
+ using NativeType = VkDescriptorUpdateTemplateEntry;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DescriptorUpdateTemplateEntry(
uint32_t dstBinding_ = {},
@@ -16385,8 +22021,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry &
- operator=( DescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorUpdateTemplateEntry &
+ operator=( DescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorUpdateTemplateEntry & operator=( VkDescriptorUpdateTemplateEntry const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -16395,62 +22031,85 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorUpdateTemplateEntry & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT
{
dstBinding = dstBinding_;
return *this;
}
- DescriptorUpdateTemplateEntry & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry &
+ setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT
{
dstArrayElement = dstArrayElement_;
return *this;
}
- DescriptorUpdateTemplateEntry & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry &
+ setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorCount = descriptorCount_;
return *this;
}
- DescriptorUpdateTemplateEntry &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry &
setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT
{
descriptorType = descriptorType_;
return *this;
}
- DescriptorUpdateTemplateEntry & setOffset( size_t offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setOffset( size_t offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- DescriptorUpdateTemplateEntry & setStride( size_t stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateEntry & setStride( size_t stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorUpdateTemplateEntry const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorUpdateTemplateEntry const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorUpdateTemplateEntry *>( this );
}
- operator VkDescriptorUpdateTemplateEntry &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorUpdateTemplateEntry &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorUpdateTemplateEntry *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DescriptorType const &,
+ size_t const &,
+ size_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( dstBinding, dstArrayElement, descriptorCount, descriptorType, offset, stride );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorUpdateTemplateEntry const & ) const = default;
#else
bool operator==( DescriptorUpdateTemplateEntry const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( dstBinding == rhs.dstBinding ) && ( dstArrayElement == rhs.dstArrayElement ) &&
( descriptorCount == rhs.descriptorCount ) && ( descriptorType == rhs.descriptorType ) &&
( offset == rhs.offset ) && ( stride == rhs.stride );
+# endif
}
bool operator!=( DescriptorUpdateTemplateEntry const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16467,15 +22126,21 @@ namespace VULKAN_HPP_NAMESPACE
size_t offset = {};
size_t stride = {};
};
- static_assert( sizeof( DescriptorUpdateTemplateEntry ) == sizeof( VkDescriptorUpdateTemplateEntry ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorUpdateTemplateEntry>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry ) ==
+ sizeof( VkDescriptorUpdateTemplateEntry ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry>::value,
+ "DescriptorUpdateTemplateEntry is not nothrow_move_constructible!" );
using DescriptorUpdateTemplateEntryKHR = DescriptorUpdateTemplateEntry;
struct DescriptorUpdateTemplateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDescriptorUpdateTemplateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDescriptorUpdateTemplateCreateInfo;
@@ -16530,8 +22195,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
- operator=( DescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DescriptorUpdateTemplateCreateInfo &
+ operator=( DescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DescriptorUpdateTemplateCreateInfo &
operator=( VkDescriptorUpdateTemplateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -16541,27 +22206,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DescriptorUpdateTemplateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo &
- setDescriptorUpdateEntryCount( uint32_t descriptorUpdateEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
+ setDescriptorUpdateEntryCount( uint32_t descriptorUpdateEntryCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorUpdateEntryCount = descriptorUpdateEntryCount_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo & setPDescriptorUpdateEntries(
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setPDescriptorUpdateEntries(
const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * pDescriptorUpdateEntries_ ) VULKAN_HPP_NOEXCEPT
{
pDescriptorUpdateEntries = pDescriptorUpdateEntries_;
@@ -16579,61 +22244,95 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DescriptorUpdateTemplateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
setTemplateType( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType templateType_ ) VULKAN_HPP_NOEXCEPT
{
templateType = templateType_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
setDescriptorSetLayout( VULKAN_HPP_NAMESPACE::DescriptorSetLayout descriptorSetLayout_ ) VULKAN_HPP_NOEXCEPT
{
descriptorSetLayout = descriptorSetLayout_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT
{
pipelineBindPoint = pipelineBindPoint_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo &
setPipelineLayout( VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout_ ) VULKAN_HPP_NOEXCEPT
{
pipelineLayout = pipelineLayout_;
return *this;
}
- DescriptorUpdateTemplateCreateInfo & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DescriptorUpdateTemplateCreateInfo & setSet( uint32_t set_ ) VULKAN_HPP_NOEXCEPT
{
set = set_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDescriptorUpdateTemplateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorUpdateTemplateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDescriptorUpdateTemplateCreateInfo *>( this );
}
- operator VkDescriptorUpdateTemplateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDescriptorUpdateTemplateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDescriptorUpdateTemplateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateEntry * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateType const &,
+ VULKAN_HPP_NAMESPACE::DescriptorSetLayout const &,
+ VULKAN_HPP_NAMESPACE::PipelineBindPoint const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayout const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ descriptorUpdateEntryCount,
+ pDescriptorUpdateEntries,
+ templateType,
+ descriptorSetLayout,
+ pipelineBindPoint,
+ pipelineLayout,
+ set );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DescriptorUpdateTemplateCreateInfo const & ) const = default;
#else
bool operator==( DescriptorUpdateTemplateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( descriptorUpdateEntryCount == rhs.descriptorUpdateEntryCount ) &&
( pDescriptorUpdateEntries == rhs.pDescriptorUpdateEntries ) && ( templateType == rhs.templateType ) &&
( descriptorSetLayout == rhs.descriptorSetLayout ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) &&
( pipelineLayout == rhs.pipelineLayout ) && ( set == rhs.set );
+# endif
}
bool operator!=( DescriptorUpdateTemplateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16655,10 +22354,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineLayout pipelineLayout = {};
uint32_t set = {};
};
- static_assert( sizeof( DescriptorUpdateTemplateCreateInfo ) == sizeof( VkDescriptorUpdateTemplateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DescriptorUpdateTemplateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo ) ==
+ sizeof( VkDescriptorUpdateTemplateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DescriptorUpdateTemplateCreateInfo>::value,
+ "DescriptorUpdateTemplateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDescriptorUpdateTemplateCreateInfo>
@@ -16667,10 +22370,120 @@ namespace VULKAN_HPP_NAMESPACE
};
using DescriptorUpdateTemplateCreateInfoKHR = DescriptorUpdateTemplateCreateInfo;
+ struct DeviceBufferMemoryRequirements
+ {
+ using NativeType = VkDeviceBufferMemoryRequirements;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceBufferMemoryRequirements;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR DeviceBufferMemoryRequirements(
+ const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo_ = {} ) VULKAN_HPP_NOEXCEPT
+ : pCreateInfo( pCreateInfo_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ DeviceBufferMemoryRequirements( DeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DeviceBufferMemoryRequirements( VkDeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DeviceBufferMemoryRequirements( *reinterpret_cast<DeviceBufferMemoryRequirements const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ DeviceBufferMemoryRequirements &
+ operator=( DeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DeviceBufferMemoryRequirements & operator=( VkDeviceBufferMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 DeviceBufferMemoryRequirements & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 DeviceBufferMemoryRequirements &
+ setPCreateInfo( const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pCreateInfo = pCreateInfo_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkDeviceBufferMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkDeviceBufferMemoryRequirements *>( this );
+ }
+
+ explicit operator VkDeviceBufferMemoryRequirements &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkDeviceBufferMemoryRequirements *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const VULKAN_HPP_NAMESPACE::BufferCreateInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pCreateInfo );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( DeviceBufferMemoryRequirements const & ) const = default;
+#else
+ bool operator==( DeviceBufferMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo );
+# endif
+ }
+
+ bool operator!=( DeviceBufferMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceBufferMemoryRequirements;
+ const void * pNext = {};
+ const VULKAN_HPP_NAMESPACE::BufferCreateInfo * pCreateInfo = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements ) ==
+ sizeof( VkDeviceBufferMemoryRequirements ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceBufferMemoryRequirements>::value,
+ "DeviceBufferMemoryRequirements is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eDeviceBufferMemoryRequirements>
+ {
+ using Type = DeviceBufferMemoryRequirements;
+ };
+ using DeviceBufferMemoryRequirementsKHR = DeviceBufferMemoryRequirements;
+
struct DeviceQueueCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueCreateInfo;
+ using NativeType = VkDeviceQueueCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DeviceQueueCreateInfo( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ = {},
@@ -16701,8 +22514,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo &
- operator=( DeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceQueueCreateInfo & operator=( DeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceQueueCreateInfo & operator=( VkDeviceQueueCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -16711,31 +22523,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceQueueCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceQueueCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DeviceQueueCreateInfo & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo &
+ setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndex = queueFamilyIndex_;
return *this;
}
- DeviceQueueCreateInfo & setQueueCount( uint32_t queueCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo & setQueueCount( uint32_t queueCount_ ) VULKAN_HPP_NOEXCEPT
{
queueCount = queueCount_;
return *this;
}
- DeviceQueueCreateInfo & setPQueuePriorities( const float * pQueuePriorities_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueCreateInfo &
+ setPQueuePriorities( const float * pQueuePriorities_ ) VULKAN_HPP_NOEXCEPT
{
pQueuePriorities = pQueuePriorities_;
return *this;
@@ -16752,24 +22567,45 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceQueueCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceQueueCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceQueueCreateInfo *>( this );
}
- operator VkDeviceQueueCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceQueueCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceQueueCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ const float * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, queueFamilyIndex, queueCount, pQueuePriorities );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceQueueCreateInfo const & ) const = default;
#else
bool operator==( DeviceQueueCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( queueFamilyIndex == rhs.queueFamilyIndex ) && ( queueCount == rhs.queueCount ) &&
( pQueuePriorities == rhs.pQueuePriorities );
+# endif
}
bool operator!=( DeviceQueueCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -16786,9 +22622,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t queueCount = {};
const float * pQueuePriorities = {};
};
- static_assert( sizeof( DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceQueueCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo ) == sizeof( VkDeviceQueueCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo>::value,
+ "DeviceQueueCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceQueueCreateInfo>
@@ -16798,6 +22637,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFeatures
{
+ using NativeType = VkPhysicalDeviceFeatures;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
PhysicalDeviceFeatures( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess_ = {},
@@ -16919,8 +22760,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
- operator=( PhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFeatures & operator=( PhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFeatures & operator=( VkPhysicalDeviceFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -16929,386 +22769,530 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setRobustBufferAccess( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess_ ) VULKAN_HPP_NOEXCEPT
{
robustBufferAccess = robustBufferAccess_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setFullDrawIndexUint32( VULKAN_HPP_NAMESPACE::Bool32 fullDrawIndexUint32_ ) VULKAN_HPP_NOEXCEPT
{
fullDrawIndexUint32 = fullDrawIndexUint32_;
return *this;
}
- PhysicalDeviceFeatures & setImageCubeArray( VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setImageCubeArray( VULKAN_HPP_NAMESPACE::Bool32 imageCubeArray_ ) VULKAN_HPP_NOEXCEPT
{
imageCubeArray = imageCubeArray_;
return *this;
}
- PhysicalDeviceFeatures & setIndependentBlend( VULKAN_HPP_NAMESPACE::Bool32 independentBlend_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setIndependentBlend( VULKAN_HPP_NAMESPACE::Bool32 independentBlend_ ) VULKAN_HPP_NOEXCEPT
{
independentBlend = independentBlend_;
return *this;
}
- PhysicalDeviceFeatures & setGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 geometryShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 geometryShader_ ) VULKAN_HPP_NOEXCEPT
{
geometryShader = geometryShader_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 tessellationShader_ ) VULKAN_HPP_NOEXCEPT
{
tessellationShader = tessellationShader_;
return *this;
}
- PhysicalDeviceFeatures & setSampleRateShading( VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setSampleRateShading( VULKAN_HPP_NAMESPACE::Bool32 sampleRateShading_ ) VULKAN_HPP_NOEXCEPT
{
sampleRateShading = sampleRateShading_;
return *this;
}
- PhysicalDeviceFeatures & setDualSrcBlend( VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setDualSrcBlend( VULKAN_HPP_NAMESPACE::Bool32 dualSrcBlend_ ) VULKAN_HPP_NOEXCEPT
{
dualSrcBlend = dualSrcBlend_;
return *this;
}
- PhysicalDeviceFeatures & setLogicOp( VULKAN_HPP_NAMESPACE::Bool32 logicOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setLogicOp( VULKAN_HPP_NAMESPACE::Bool32 logicOp_ ) VULKAN_HPP_NOEXCEPT
{
logicOp = logicOp_;
return *this;
}
- PhysicalDeviceFeatures & setMultiDrawIndirect( VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setMultiDrawIndirect( VULKAN_HPP_NAMESPACE::Bool32 multiDrawIndirect_ ) VULKAN_HPP_NOEXCEPT
{
multiDrawIndirect = multiDrawIndirect_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setDrawIndirectFirstInstance( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectFirstInstance_ ) VULKAN_HPP_NOEXCEPT
{
drawIndirectFirstInstance = drawIndirectFirstInstance_;
return *this;
}
- PhysicalDeviceFeatures & setDepthClamp( VULKAN_HPP_NAMESPACE::Bool32 depthClamp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setDepthClamp( VULKAN_HPP_NAMESPACE::Bool32 depthClamp_ ) VULKAN_HPP_NOEXCEPT
{
depthClamp = depthClamp_;
return *this;
}
- PhysicalDeviceFeatures & setDepthBiasClamp( VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setDepthBiasClamp( VULKAN_HPP_NAMESPACE::Bool32 depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT
{
depthBiasClamp = depthBiasClamp_;
return *this;
}
- PhysicalDeviceFeatures & setFillModeNonSolid( VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setFillModeNonSolid( VULKAN_HPP_NAMESPACE::Bool32 fillModeNonSolid_ ) VULKAN_HPP_NOEXCEPT
{
fillModeNonSolid = fillModeNonSolid_;
return *this;
}
- PhysicalDeviceFeatures & setDepthBounds( VULKAN_HPP_NAMESPACE::Bool32 depthBounds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setDepthBounds( VULKAN_HPP_NAMESPACE::Bool32 depthBounds_ ) VULKAN_HPP_NOEXCEPT
{
depthBounds = depthBounds_;
return *this;
}
- PhysicalDeviceFeatures & setWideLines( VULKAN_HPP_NAMESPACE::Bool32 wideLines_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setWideLines( VULKAN_HPP_NAMESPACE::Bool32 wideLines_ ) VULKAN_HPP_NOEXCEPT
{
wideLines = wideLines_;
return *this;
}
- PhysicalDeviceFeatures & setLargePoints( VULKAN_HPP_NAMESPACE::Bool32 largePoints_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setLargePoints( VULKAN_HPP_NAMESPACE::Bool32 largePoints_ ) VULKAN_HPP_NOEXCEPT
{
largePoints = largePoints_;
return *this;
}
- PhysicalDeviceFeatures & setAlphaToOne( VULKAN_HPP_NAMESPACE::Bool32 alphaToOne_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setAlphaToOne( VULKAN_HPP_NAMESPACE::Bool32 alphaToOne_ ) VULKAN_HPP_NOEXCEPT
{
alphaToOne = alphaToOne_;
return *this;
}
- PhysicalDeviceFeatures & setMultiViewport( VULKAN_HPP_NAMESPACE::Bool32 multiViewport_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setMultiViewport( VULKAN_HPP_NAMESPACE::Bool32 multiViewport_ ) VULKAN_HPP_NOEXCEPT
{
multiViewport = multiViewport_;
return *this;
}
- PhysicalDeviceFeatures & setSamplerAnisotropy( VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setSamplerAnisotropy( VULKAN_HPP_NAMESPACE::Bool32 samplerAnisotropy_ ) VULKAN_HPP_NOEXCEPT
{
samplerAnisotropy = samplerAnisotropy_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setTextureCompressionETC2( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionETC2_ ) VULKAN_HPP_NOEXCEPT
{
textureCompressionETC2 = textureCompressionETC2_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setTextureCompressionASTC_LDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_LDR_ ) VULKAN_HPP_NOEXCEPT
{
textureCompressionASTC_LDR = textureCompressionASTC_LDR_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setTextureCompressionBC( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionBC_ ) VULKAN_HPP_NOEXCEPT
{
textureCompressionBC = textureCompressionBC_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setOcclusionQueryPrecise( VULKAN_HPP_NAMESPACE::Bool32 occlusionQueryPrecise_ ) VULKAN_HPP_NOEXCEPT
{
occlusionQueryPrecise = occlusionQueryPrecise_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setPipelineStatisticsQuery( VULKAN_HPP_NAMESPACE::Bool32 pipelineStatisticsQuery_ ) VULKAN_HPP_NOEXCEPT
{
pipelineStatisticsQuery = pipelineStatisticsQuery_;
return *this;
}
- PhysicalDeviceFeatures & setVertexPipelineStoresAndAtomics(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setVertexPipelineStoresAndAtomics(
VULKAN_HPP_NAMESPACE::Bool32 vertexPipelineStoresAndAtomics_ ) VULKAN_HPP_NOEXCEPT
{
vertexPipelineStoresAndAtomics = vertexPipelineStoresAndAtomics_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setFragmentStoresAndAtomics( VULKAN_HPP_NAMESPACE::Bool32 fragmentStoresAndAtomics_ ) VULKAN_HPP_NOEXCEPT
{
fragmentStoresAndAtomics = fragmentStoresAndAtomics_;
return *this;
}
- PhysicalDeviceFeatures & setShaderTessellationAndGeometryPointSize(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderTessellationAndGeometryPointSize(
VULKAN_HPP_NAMESPACE::Bool32 shaderTessellationAndGeometryPointSize_ ) VULKAN_HPP_NOEXCEPT
{
shaderTessellationAndGeometryPointSize = shaderTessellationAndGeometryPointSize_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setShaderImageGatherExtended( VULKAN_HPP_NAMESPACE::Bool32 shaderImageGatherExtended_ ) VULKAN_HPP_NOEXCEPT
{
shaderImageGatherExtended = shaderImageGatherExtended_;
return *this;
}
- PhysicalDeviceFeatures & setShaderStorageImageExtendedFormats(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderStorageImageExtendedFormats(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageExtendedFormats_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageExtendedFormats = shaderStorageImageExtendedFormats_;
return *this;
}
- PhysicalDeviceFeatures & setShaderStorageImageMultisample(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderStorageImageMultisample(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageMultisample_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageMultisample = shaderStorageImageMultisample_;
return *this;
}
- PhysicalDeviceFeatures & setShaderStorageImageReadWithoutFormat(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderStorageImageReadWithoutFormat(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageReadWithoutFormat_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageReadWithoutFormat = shaderStorageImageReadWithoutFormat_;
return *this;
}
- PhysicalDeviceFeatures & setShaderStorageImageWriteWithoutFormat(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderStorageImageWriteWithoutFormat(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageWriteWithoutFormat_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageWriteWithoutFormat = shaderStorageImageWriteWithoutFormat_;
return *this;
}
- PhysicalDeviceFeatures & setShaderUniformBufferArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderUniformBufferArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformBufferArrayDynamicIndexing = shaderUniformBufferArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceFeatures & setShaderSampledImageArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderSampledImageArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderSampledImageArrayDynamicIndexing = shaderSampledImageArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceFeatures & setShaderStorageBufferArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderStorageBufferArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageBufferArrayDynamicIndexing = shaderStorageBufferArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceFeatures & setShaderStorageImageArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures & setShaderStorageImageArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageArrayDynamicIndexing = shaderStorageImageArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setShaderClipDistance( VULKAN_HPP_NAMESPACE::Bool32 shaderClipDistance_ ) VULKAN_HPP_NOEXCEPT
{
shaderClipDistance = shaderClipDistance_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setShaderCullDistance( VULKAN_HPP_NAMESPACE::Bool32 shaderCullDistance_ ) VULKAN_HPP_NOEXCEPT
{
shaderCullDistance = shaderCullDistance_;
return *this;
}
- PhysicalDeviceFeatures & setShaderFloat64( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setShaderFloat64( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat64_ ) VULKAN_HPP_NOEXCEPT
{
shaderFloat64 = shaderFloat64_;
return *this;
}
- PhysicalDeviceFeatures & setShaderInt64( VULKAN_HPP_NAMESPACE::Bool32 shaderInt64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setShaderInt64( VULKAN_HPP_NAMESPACE::Bool32 shaderInt64_ ) VULKAN_HPP_NOEXCEPT
{
shaderInt64 = shaderInt64_;
return *this;
}
- PhysicalDeviceFeatures & setShaderInt16( VULKAN_HPP_NAMESPACE::Bool32 shaderInt16_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setShaderInt16( VULKAN_HPP_NAMESPACE::Bool32 shaderInt16_ ) VULKAN_HPP_NOEXCEPT
{
shaderInt16 = shaderInt16_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setShaderResourceResidency( VULKAN_HPP_NAMESPACE::Bool32 shaderResourceResidency_ ) VULKAN_HPP_NOEXCEPT
{
shaderResourceResidency = shaderResourceResidency_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setShaderResourceMinLod( VULKAN_HPP_NAMESPACE::Bool32 shaderResourceMinLod_ ) VULKAN_HPP_NOEXCEPT
{
shaderResourceMinLod = shaderResourceMinLod_;
return *this;
}
- PhysicalDeviceFeatures & setSparseBinding( VULKAN_HPP_NAMESPACE::Bool32 sparseBinding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setSparseBinding( VULKAN_HPP_NAMESPACE::Bool32 sparseBinding_ ) VULKAN_HPP_NOEXCEPT
{
sparseBinding = sparseBinding_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidencyBuffer( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyBuffer_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidencyBuffer = sparseResidencyBuffer_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidencyImage2D( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage2D_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidencyImage2D = sparseResidencyImage2D_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidencyImage3D( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyImage3D_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidencyImage3D = sparseResidencyImage3D_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidency2Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency2Samples_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidency2Samples = sparseResidency2Samples_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidency4Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency4Samples_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidency4Samples = sparseResidency4Samples_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidency8Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency8Samples_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidency8Samples = sparseResidency8Samples_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidency16Samples( VULKAN_HPP_NAMESPACE::Bool32 sparseResidency16Samples_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidency16Samples = sparseResidency16Samples_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setSparseResidencyAliased( VULKAN_HPP_NAMESPACE::Bool32 sparseResidencyAliased_ ) VULKAN_HPP_NOEXCEPT
{
sparseResidencyAliased = sparseResidencyAliased_;
return *this;
}
- PhysicalDeviceFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
setVariableMultisampleRate( VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate_ ) VULKAN_HPP_NOEXCEPT
{
variableMultisampleRate = variableMultisampleRate_;
return *this;
}
- PhysicalDeviceFeatures & setInheritedQueries( VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures &
+ setInheritedQueries( VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries_ ) VULKAN_HPP_NOEXCEPT
{
inheritedQueries = inheritedQueries_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFeatures *>( this );
}
- operator VkPhysicalDeviceFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( robustBufferAccess,
+ fullDrawIndexUint32,
+ imageCubeArray,
+ independentBlend,
+ geometryShader,
+ tessellationShader,
+ sampleRateShading,
+ dualSrcBlend,
+ logicOp,
+ multiDrawIndirect,
+ drawIndirectFirstInstance,
+ depthClamp,
+ depthBiasClamp,
+ fillModeNonSolid,
+ depthBounds,
+ wideLines,
+ largePoints,
+ alphaToOne,
+ multiViewport,
+ samplerAnisotropy,
+ textureCompressionETC2,
+ textureCompressionASTC_LDR,
+ textureCompressionBC,
+ occlusionQueryPrecise,
+ pipelineStatisticsQuery,
+ vertexPipelineStoresAndAtomics,
+ fragmentStoresAndAtomics,
+ shaderTessellationAndGeometryPointSize,
+ shaderImageGatherExtended,
+ shaderStorageImageExtendedFormats,
+ shaderStorageImageMultisample,
+ shaderStorageImageReadWithoutFormat,
+ shaderStorageImageWriteWithoutFormat,
+ shaderUniformBufferArrayDynamicIndexing,
+ shaderSampledImageArrayDynamicIndexing,
+ shaderStorageBufferArrayDynamicIndexing,
+ shaderStorageImageArrayDynamicIndexing,
+ shaderClipDistance,
+ shaderCullDistance,
+ shaderFloat64,
+ shaderInt64,
+ shaderInt16,
+ shaderResourceResidency,
+ shaderResourceMinLod,
+ sparseBinding,
+ sparseResidencyBuffer,
+ sparseResidencyImage2D,
+ sparseResidencyImage3D,
+ sparseResidency2Samples,
+ sparseResidency4Samples,
+ sparseResidency8Samples,
+ sparseResidency16Samples,
+ sparseResidencyAliased,
+ variableMultisampleRate,
+ inheritedQueries );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( robustBufferAccess == rhs.robustBufferAccess ) && ( fullDrawIndexUint32 == rhs.fullDrawIndexUint32 ) &&
( imageCubeArray == rhs.imageCubeArray ) && ( independentBlend == rhs.independentBlend ) &&
( geometryShader == rhs.geometryShader ) && ( tessellationShader == rhs.tessellationShader ) &&
@@ -17349,6 +23333,7 @@ namespace VULKAN_HPP_NAMESPACE
( sparseResidency16Samples == rhs.sparseResidency16Samples ) &&
( sparseResidencyAliased == rhs.sparseResidencyAliased ) &&
( variableMultisampleRate == rhs.variableMultisampleRate ) && ( inheritedQueries == rhs.inheritedQueries );
+# endif
}
bool operator!=( PhysicalDeviceFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -17414,14 +23399,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 variableMultisampleRate = {};
VULKAN_HPP_NAMESPACE::Bool32 inheritedQueries = {};
};
- static_assert( sizeof( PhysicalDeviceFeatures ) == sizeof( VkPhysicalDeviceFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFeatures>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures ) ==
+ sizeof( VkPhysicalDeviceFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures>::value,
+ "PhysicalDeviceFeatures is not nothrow_move_constructible!" );
struct DeviceCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceCreateInfo;
+ using NativeType = VkDeviceCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DeviceCreateInfo( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ = {},
@@ -17469,7 +23460,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & operator=( DeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceCreateInfo & operator=( DeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceCreateInfo & operator=( VkDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -17478,25 +23469,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::DeviceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DeviceCreateInfo & setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
+ setQueueCreateInfoCount( uint32_t queueCreateInfoCount_ ) VULKAN_HPP_NOEXCEPT
{
queueCreateInfoCount = queueCreateInfoCount_;
return *this;
}
- DeviceCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
setPQueueCreateInfos( const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * pQueueCreateInfos_ ) VULKAN_HPP_NOEXCEPT
{
pQueueCreateInfos = pQueueCreateInfos_;
@@ -17514,13 +23507,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DeviceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT
{
enabledLayerCount = enabledLayerCount_;
return *this;
}
- DeviceCreateInfo & setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
+ setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT
{
ppEnabledLayerNames = ppEnabledLayerNames_;
return *this;
@@ -17536,13 +23530,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DeviceCreateInfo & setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
+ setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT
{
enabledExtensionCount = enabledExtensionCount_;
return *this;
}
- DeviceCreateInfo & setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
+ setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT
{
ppEnabledExtensionNames = ppEnabledExtensionNames_;
return *this;
@@ -17559,7 +23555,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DeviceCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceCreateInfo &
setPEnabledFeatures( const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures_ ) VULKAN_HPP_NOEXCEPT
{
pEnabledFeatures = pEnabledFeatures_;
@@ -17567,33 +23563,113 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceCreateInfo *>( this );
}
- operator VkDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceCreateInfo *>( this );
}
-#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DeviceCreateInfo const & ) const = default;
-#else
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DeviceQueueCreateInfo * const &,
+ uint32_t const &,
+ const char * const * const &,
+ uint32_t const &,
+ const char * const * const &,
+ const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ queueCreateInfoCount,
+ pQueueCreateInfos,
+ enabledLayerCount,
+ ppEnabledLayerNames,
+ enabledExtensionCount,
+ ppEnabledExtensionNames,
+ pEnabledFeatures );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ std::strong_ordering operator<=>( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = queueCreateInfoCount <=> rhs.queueCreateInfoCount; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pQueueCreateInfos <=> rhs.pQueueCreateInfos; cmp != 0 )
+ return cmp;
+ if ( auto cmp = enabledLayerCount <=> rhs.enabledLayerCount; cmp != 0 )
+ return cmp;
+ for ( size_t i = 0; i < enabledLayerCount; ++i )
+ {
+ if ( ppEnabledLayerNames[i] != rhs.ppEnabledLayerNames[i] )
+ if ( auto cmp = strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ); cmp != 0 )
+ return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater;
+ }
+ if ( auto cmp = enabledExtensionCount <=> rhs.enabledExtensionCount; cmp != 0 )
+ return cmp;
+ for ( size_t i = 0; i < enabledExtensionCount; ++i )
+ {
+ if ( ppEnabledExtensionNames[i] != rhs.ppEnabledExtensionNames[i] )
+ if ( auto cmp = strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ); cmp != 0 )
+ return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater;
+ }
+ if ( auto cmp = pEnabledFeatures <=> rhs.pEnabledFeatures; cmp != 0 )
+ return cmp;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( queueCreateInfoCount == rhs.queueCreateInfoCount ) && ( pQueueCreateInfos == rhs.pQueueCreateInfos ) &&
- ( enabledLayerCount == rhs.enabledLayerCount ) && ( ppEnabledLayerNames == rhs.ppEnabledLayerNames ) &&
- ( enabledExtensionCount == rhs.enabledExtensionCount ) &&
- ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames ) && ( pEnabledFeatures == rhs.pEnabledFeatures );
+ ( enabledLayerCount == rhs.enabledLayerCount ) &&
+ [this, rhs]
+ {
+ bool equal = true;
+ for ( size_t i = 0; equal && ( i < enabledLayerCount ); ++i )
+ {
+ equal = ( ( ppEnabledLayerNames[i] == rhs.ppEnabledLayerNames[i] ) ||
+ ( strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ) == 0 ) );
+ }
+ return equal;
+ }() && ( enabledExtensionCount == rhs.enabledExtensionCount ) &&
+ [this, rhs]
+ {
+ bool equal = true;
+ for ( size_t i = 0; equal && ( i < enabledExtensionCount ); ++i )
+ {
+ equal = ( ( ppEnabledExtensionNames[i] == rhs.ppEnabledExtensionNames[i] ) ||
+ ( strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ) == 0 ) );
+ }
+ return equal;
+ }() && ( pEnabledFeatures == rhs.pEnabledFeatures );
}
bool operator!=( DeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceCreateInfo;
@@ -17607,9 +23683,12 @@ namespace VULKAN_HPP_NAMESPACE
const char * const * ppEnabledExtensionNames = {};
const VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures * pEnabledFeatures = {};
};
- static_assert( sizeof( DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceCreateInfo ) == sizeof( VkDeviceCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceCreateInfo>::value,
+ "DeviceCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceCreateInfo>
@@ -17619,7 +23698,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceDeviceMemoryReportCreateInfoEXT
{
- static const bool allowDuplicate = true;
+ using NativeType = VkDeviceDeviceMemoryReportCreateInfoEXT;
+
+ static const bool allowDuplicate = true;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceDeviceMemoryReportCreateInfoEXT;
@@ -17642,8 +23723,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT &
- operator=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceDeviceMemoryReportCreateInfoEXT &
+ operator=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceDeviceMemoryReportCreateInfoEXT &
operator=( VkDeviceDeviceMemoryReportCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -17653,50 +23734,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceDeviceMemoryReportCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceDeviceMemoryReportCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DeviceDeviceMemoryReportCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT &
setPfnUserCallback( PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback_ ) VULKAN_HPP_NOEXCEPT
{
pfnUserCallback = pfnUserCallback_;
return *this;
}
- DeviceDeviceMemoryReportCreateInfoEXT & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceDeviceMemoryReportCreateInfoEXT &
+ setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
{
pUserData = pUserData_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceDeviceMemoryReportCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceDeviceMemoryReportCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT *>( this );
}
- operator VkDeviceDeviceMemoryReportCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceDeviceMemoryReportCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceDeviceMemoryReportCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT const &,
+ PFN_vkDeviceMemoryReportCallbackEXT const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pfnUserCallback, pUserData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceDeviceMemoryReportCreateInfoEXT const & ) const = default;
#else
bool operator==( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pfnUserCallback == rhs.pfnUserCallback ) && ( pUserData == rhs.pUserData );
+# endif
}
bool operator!=( DeviceDeviceMemoryReportCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -17712,10 +23814,14 @@ namespace VULKAN_HPP_NAMESPACE
PFN_vkDeviceMemoryReportCallbackEXT pfnUserCallback = {};
void * pUserData = {};
};
- static_assert( sizeof( DeviceDeviceMemoryReportCreateInfoEXT ) == sizeof( VkDeviceDeviceMemoryReportCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceDeviceMemoryReportCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT ) ==
+ sizeof( VkDeviceDeviceMemoryReportCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceDeviceMemoryReportCreateInfoEXT>::value,
+ "DeviceDeviceMemoryReportCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceDeviceMemoryReportCreateInfoEXT>
@@ -17725,7 +23831,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceDiagnosticsConfigCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceDiagnosticsConfigCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceDiagnosticsConfigCreateInfoNV;
@@ -17742,8 +23850,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV &
- operator=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceDiagnosticsConfigCreateInfoNV &
+ operator=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceDiagnosticsConfigCreateInfoNV &
operator=( VkDeviceDiagnosticsConfigCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -17753,36 +23861,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceDiagnosticsConfigCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceDiagnosticsConfigCreateInfoNV &
- setFlags( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceDiagnosticsConfigCreateInfoNV &
+ setFlags( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceDiagnosticsConfigCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceDiagnosticsConfigCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV *>( this );
}
- operator VkDeviceDiagnosticsConfigCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceDiagnosticsConfigCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceDiagnosticsConfigCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceDiagnosticsConfigCreateInfoNV const & ) const = default;
#else
bool operator==( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( DeviceDiagnosticsConfigCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -17796,10 +23922,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigFlagsNV flags = {};
};
- static_assert( sizeof( DeviceDiagnosticsConfigCreateInfoNV ) == sizeof( VkDeviceDiagnosticsConfigCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceDiagnosticsConfigCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV ) ==
+ sizeof( VkDeviceDiagnosticsConfigCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceDiagnosticsConfigCreateInfoNV>::value,
+ "DeviceDiagnosticsConfigCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceDiagnosticsConfigCreateInfoNV>
@@ -17809,8 +23939,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceEventInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceEventInfoEXT;
+ using NativeType = VkDeviceEventInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceEventInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -17826,8 +23958,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT &
- operator=( DeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceEventInfoEXT & operator=( DeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceEventInfoEXT & operator=( VkDeviceEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -17836,35 +23967,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceEventInfoEXT & setDeviceEvent( VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceEventInfoEXT &
+ setDeviceEvent( VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent_ ) VULKAN_HPP_NOEXCEPT
{
deviceEvent = deviceEvent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceEventInfoEXT *>( this );
}
- operator VkDeviceEventInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceEventInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceEventInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceEvent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceEventInfoEXT const & ) const = default;
#else
bool operator==( DeviceEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceEvent == rhs.deviceEvent );
+# endif
}
bool operator!=( DeviceEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -17878,9 +24028,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT deviceEvent = VULKAN_HPP_NAMESPACE::DeviceEventTypeEXT::eDisplayHotplug;
};
- static_assert( sizeof( DeviceEventInfoEXT ) == sizeof( VkDeviceEventInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceEventInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT ) == sizeof( VkDeviceEventInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceEventInfoEXT>::value,
+ "DeviceEventInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceEventInfoEXT>
@@ -17890,8 +24043,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupBindSparseInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupBindSparseInfo;
+ using NativeType = VkDeviceGroupBindSparseInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupBindSparseInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DeviceGroupBindSparseInfo( uint32_t resourceDeviceIndex_ = {},
@@ -17908,8 +24063,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo &
- operator=( DeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupBindSparseInfo & operator=( DeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupBindSparseInfo & operator=( VkDeviceGroupBindSparseInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -17918,42 +24072,60 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupBindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupBindSparseInfo & setResourceDeviceIndex( uint32_t resourceDeviceIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo &
+ setResourceDeviceIndex( uint32_t resourceDeviceIndex_ ) VULKAN_HPP_NOEXCEPT
{
resourceDeviceIndex = resourceDeviceIndex_;
return *this;
}
- DeviceGroupBindSparseInfo & setMemoryDeviceIndex( uint32_t memoryDeviceIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupBindSparseInfo &
+ setMemoryDeviceIndex( uint32_t memoryDeviceIndex_ ) VULKAN_HPP_NOEXCEPT
{
memoryDeviceIndex = memoryDeviceIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupBindSparseInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupBindSparseInfo *>( this );
}
- operator VkDeviceGroupBindSparseInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupBindSparseInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupBindSparseInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, resourceDeviceIndex, memoryDeviceIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupBindSparseInfo const & ) const = default;
#else
bool operator==( DeviceGroupBindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( resourceDeviceIndex == rhs.resourceDeviceIndex ) &&
( memoryDeviceIndex == rhs.memoryDeviceIndex );
+# endif
}
bool operator!=( DeviceGroupBindSparseInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -17968,10 +24140,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t resourceDeviceIndex = {};
uint32_t memoryDeviceIndex = {};
};
- static_assert( sizeof( DeviceGroupBindSparseInfo ) == sizeof( VkDeviceGroupBindSparseInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupBindSparseInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo ) ==
+ sizeof( VkDeviceGroupBindSparseInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupBindSparseInfo>::value,
+ "DeviceGroupBindSparseInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupBindSparseInfo>
@@ -17982,7 +24157,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupCommandBufferBeginInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceGroupCommandBufferBeginInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceGroupCommandBufferBeginInfo;
@@ -17999,8 +24176,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo &
- operator=( DeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupCommandBufferBeginInfo &
+ operator=( DeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupCommandBufferBeginInfo & operator=( VkDeviceGroupCommandBufferBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18009,35 +24186,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupCommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupCommandBufferBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupCommandBufferBeginInfo &
+ setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
{
deviceMask = deviceMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupCommandBufferBeginInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo *>( this );
}
- operator VkDeviceGroupCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupCommandBufferBeginInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupCommandBufferBeginInfo const & ) const = default;
#else
bool operator==( DeviceGroupCommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMask == rhs.deviceMask );
+# endif
}
bool operator!=( DeviceGroupCommandBufferBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18051,10 +24245,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint32_t deviceMask = {};
};
- static_assert( sizeof( DeviceGroupCommandBufferBeginInfo ) == sizeof( VkDeviceGroupCommandBufferBeginInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupCommandBufferBeginInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo ) ==
+ sizeof( VkDeviceGroupCommandBufferBeginInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupCommandBufferBeginInfo>::value,
+ "DeviceGroupCommandBufferBeginInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupCommandBufferBeginInfo>
@@ -18065,8 +24263,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupDeviceCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupDeviceCreateInfo;
+ using NativeType = VkDeviceGroupDeviceCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupDeviceCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DeviceGroupDeviceCreateInfo(
@@ -18093,8 +24293,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo &
- operator=( DeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupDeviceCreateInfo & operator=( DeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupDeviceCreateInfo & operator=( VkDeviceGroupDeviceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18103,19 +24302,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupDeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupDeviceCreateInfo & setPhysicalDeviceCount( uint32_t physicalDeviceCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo &
+ setPhysicalDeviceCount( uint32_t physicalDeviceCount_ ) VULKAN_HPP_NOEXCEPT
{
physicalDeviceCount = physicalDeviceCount_;
return *this;
}
- DeviceGroupDeviceCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupDeviceCreateInfo &
setPPhysicalDevices( const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices_ ) VULKAN_HPP_NOEXCEPT
{
pPhysicalDevices = pPhysicalDevices_;
@@ -18134,23 +24334,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupDeviceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupDeviceCreateInfo *>( this );
}
- operator VkDeviceGroupDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupDeviceCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupDeviceCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PhysicalDevice * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, physicalDeviceCount, pPhysicalDevices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupDeviceCreateInfo const & ) const = default;
#else
bool operator==( DeviceGroupDeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( physicalDeviceCount == rhs.physicalDeviceCount ) &&
( pPhysicalDevices == rhs.pPhysicalDevices );
+# endif
}
bool operator!=( DeviceGroupDeviceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18165,10 +24384,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t physicalDeviceCount = {};
const VULKAN_HPP_NAMESPACE::PhysicalDevice * pPhysicalDevices = {};
};
- static_assert( sizeof( DeviceGroupDeviceCreateInfo ) == sizeof( VkDeviceGroupDeviceCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupDeviceCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo ) ==
+ sizeof( VkDeviceGroupDeviceCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupDeviceCreateInfo>::value,
+ "DeviceGroupDeviceCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupDeviceCreateInfo>
@@ -18179,7 +24402,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupPresentCapabilitiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceGroupPresentCapabilitiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceGroupPresentCapabilitiesKHR;
@@ -18199,8 +24424,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentCapabilitiesKHR &
- operator=( DeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupPresentCapabilitiesKHR &
+ operator=( DeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupPresentCapabilitiesKHR & operator=( VkDeviceGroupPresentCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18208,23 +24433,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDeviceGroupPresentCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupPresentCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupPresentCapabilitiesKHR *>( this );
}
- operator VkDeviceGroupPresentCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupPresentCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupPresentCapabilitiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, VK_MAX_DEVICE_GROUP_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, presentMask, modes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupPresentCapabilitiesKHR const & ) const = default;
#else
bool operator==( DeviceGroupPresentCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentMask == rhs.presentMask ) &&
( modes == rhs.modes );
+# endif
}
bool operator!=( DeviceGroupPresentCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18239,10 +24483,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, VK_MAX_DEVICE_GROUP_SIZE> presentMask = {};
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes = {};
};
- static_assert( sizeof( DeviceGroupPresentCapabilitiesKHR ) == sizeof( VkDeviceGroupPresentCapabilitiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupPresentCapabilitiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR ) ==
+ sizeof( VkDeviceGroupPresentCapabilitiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupPresentCapabilitiesKHR>::value,
+ "DeviceGroupPresentCapabilitiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupPresentCapabilitiesKHR>
@@ -18252,8 +24500,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupPresentInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupPresentInfoKHR;
+ using NativeType = VkDeviceGroupPresentInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupPresentInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -18284,8 +24534,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR &
- operator=( DeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupPresentInfoKHR & operator=( DeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupPresentInfoKHR & operator=( VkDeviceGroupPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18294,19 +24543,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupPresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR &
+ setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
{
swapchainCount = swapchainCount_;
return *this;
}
- DeviceGroupPresentInfoKHR & setPDeviceMasks( const uint32_t * pDeviceMasks_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR &
+ setPDeviceMasks( const uint32_t * pDeviceMasks_ ) VULKAN_HPP_NOEXCEPT
{
pDeviceMasks = pDeviceMasks_;
return *this;
@@ -18322,31 +24573,51 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DeviceGroupPresentInfoKHR &
- setMode( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupPresentInfoKHR &
+ setMode( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode_ ) VULKAN_HPP_NOEXCEPT
{
mode = mode_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupPresentInfoKHR *>( this );
}
- operator VkDeviceGroupPresentInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupPresentInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupPresentInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchainCount, pDeviceMasks, mode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupPresentInfoKHR const & ) const = default;
#else
bool operator==( DeviceGroupPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) &&
( pDeviceMasks == rhs.pDeviceMasks ) && ( mode == rhs.mode );
+# endif
}
bool operator!=( DeviceGroupPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18363,10 +24634,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR mode =
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagBitsKHR::eLocal;
};
- static_assert( sizeof( DeviceGroupPresentInfoKHR ) == sizeof( VkDeviceGroupPresentInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupPresentInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR ) ==
+ sizeof( VkDeviceGroupPresentInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupPresentInfoKHR>::value,
+ "DeviceGroupPresentInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupPresentInfoKHR>
@@ -18376,8 +24650,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupRenderPassBeginInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupRenderPassBeginInfo;
+ using NativeType = VkDeviceGroupRenderPassBeginInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupRenderPassBeginInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DeviceGroupRenderPassBeginInfo( uint32_t deviceMask_ = {},
@@ -18407,8 +24683,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo &
- operator=( DeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupRenderPassBeginInfo &
+ operator=( DeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupRenderPassBeginInfo & operator=( VkDeviceGroupRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18417,25 +24693,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupRenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupRenderPassBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
{
deviceMask = deviceMask_;
return *this;
}
- DeviceGroupRenderPassBeginInfo & setDeviceRenderAreaCount( uint32_t deviceRenderAreaCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo &
+ setDeviceRenderAreaCount( uint32_t deviceRenderAreaCount_ ) VULKAN_HPP_NOEXCEPT
{
deviceRenderAreaCount = deviceRenderAreaCount_;
return *this;
}
- DeviceGroupRenderPassBeginInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupRenderPassBeginInfo &
setPDeviceRenderAreas( const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas_ ) VULKAN_HPP_NOEXCEPT
{
pDeviceRenderAreas = pDeviceRenderAreas_;
@@ -18454,23 +24731,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo *>( this );
}
- operator VkDeviceGroupRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupRenderPassBeginInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Rect2D * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceMask, deviceRenderAreaCount, pDeviceRenderAreas );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupRenderPassBeginInfo const & ) const = default;
#else
bool operator==( DeviceGroupRenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMask == rhs.deviceMask ) &&
( deviceRenderAreaCount == rhs.deviceRenderAreaCount ) && ( pDeviceRenderAreas == rhs.pDeviceRenderAreas );
+# endif
}
bool operator!=( DeviceGroupRenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18486,10 +24783,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t deviceRenderAreaCount = {};
const VULKAN_HPP_NAMESPACE::Rect2D * pDeviceRenderAreas = {};
};
- static_assert( sizeof( DeviceGroupRenderPassBeginInfo ) == sizeof( VkDeviceGroupRenderPassBeginInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupRenderPassBeginInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo ) ==
+ sizeof( VkDeviceGroupRenderPassBeginInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupRenderPassBeginInfo>::value,
+ "DeviceGroupRenderPassBeginInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupRenderPassBeginInfo>
@@ -18500,8 +24801,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupSubmitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupSubmitInfo;
+ using NativeType = VkDeviceGroupSubmitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceGroupSubmitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -18540,8 +24843,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
- operator=( DeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupSubmitInfo & operator=( DeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupSubmitInfo & operator=( VkDeviceGroupSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18550,19 +24852,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupSubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
+ setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreCount = waitSemaphoreCount_;
return *this;
}
- DeviceGroupSubmitInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
setPWaitSemaphoreDeviceIndices( const uint32_t * pWaitSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphoreDeviceIndices = pWaitSemaphoreDeviceIndices_;
@@ -18580,13 +24883,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DeviceGroupSubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
+ setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT
{
commandBufferCount = commandBufferCount_;
return *this;
}
- DeviceGroupSubmitInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
setPCommandBufferDeviceMasks( const uint32_t * pCommandBufferDeviceMasks_ ) VULKAN_HPP_NOEXCEPT
{
pCommandBufferDeviceMasks = pCommandBufferDeviceMasks_;
@@ -18604,13 +24908,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- DeviceGroupSubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
+ setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreCount = signalSemaphoreCount_;
return *this;
}
- DeviceGroupSubmitInfo &
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSubmitInfo &
setPSignalSemaphoreDeviceIndices( const uint32_t * pSignalSemaphoreDeviceIndices_ ) VULKAN_HPP_NOEXCEPT
{
pSignalSemaphoreDeviceIndices = pSignalSemaphoreDeviceIndices_;
@@ -18629,27 +24934,57 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupSubmitInfo *>( this );
}
- operator VkDeviceGroupSubmitInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupSubmitInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupSubmitInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ waitSemaphoreCount,
+ pWaitSemaphoreDeviceIndices,
+ commandBufferCount,
+ pCommandBufferDeviceMasks,
+ signalSemaphoreCount,
+ pSignalSemaphoreDeviceIndices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupSubmitInfo const & ) const = default;
#else
bool operator==( DeviceGroupSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) &&
( pWaitSemaphoreDeviceIndices == rhs.pWaitSemaphoreDeviceIndices ) &&
( commandBufferCount == rhs.commandBufferCount ) &&
( pCommandBufferDeviceMasks == rhs.pCommandBufferDeviceMasks ) &&
( signalSemaphoreCount == rhs.signalSemaphoreCount ) &&
( pSignalSemaphoreDeviceIndices == rhs.pSignalSemaphoreDeviceIndices );
+# endif
}
bool operator!=( DeviceGroupSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18668,9 +25003,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t signalSemaphoreCount = {};
const uint32_t * pSignalSemaphoreDeviceIndices = {};
};
- static_assert( sizeof( DeviceGroupSubmitInfo ) == sizeof( VkDeviceGroupSubmitInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupSubmitInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo ) == sizeof( VkDeviceGroupSubmitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupSubmitInfo>::value,
+ "DeviceGroupSubmitInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupSubmitInfo>
@@ -18681,7 +25019,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceGroupSwapchainCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceGroupSwapchainCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceGroupSwapchainCreateInfoKHR;
@@ -18698,8 +25038,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR &
- operator=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceGroupSwapchainCreateInfoKHR &
+ operator=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceGroupSwapchainCreateInfoKHR & operator=( VkDeviceGroupSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18708,36 +25048,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceGroupSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceGroupSwapchainCreateInfoKHR &
- setModes( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceGroupSwapchainCreateInfoKHR &
+ setModes( VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes_ ) VULKAN_HPP_NOEXCEPT
{
modes = modes_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceGroupSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR *>( this );
}
- operator VkDeviceGroupSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceGroupSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, modes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceGroupSwapchainCreateInfoKHR const & ) const = default;
#else
bool operator==( DeviceGroupSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( modes == rhs.modes );
+# endif
}
bool operator!=( DeviceGroupSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18751,10 +25109,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceGroupPresentModeFlagsKHR modes = {};
};
- static_assert( sizeof( DeviceGroupSwapchainCreateInfoKHR ) == sizeof( VkDeviceGroupSwapchainCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceGroupSwapchainCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR ) ==
+ sizeof( VkDeviceGroupSwapchainCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceGroupSwapchainCreateInfoKHR>::value,
+ "DeviceGroupSwapchainCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceGroupSwapchainCreateInfoKHR>
@@ -18762,9 +25124,422 @@ namespace VULKAN_HPP_NAMESPACE
using Type = DeviceGroupSwapchainCreateInfoKHR;
};
+ struct ImageCreateInfo
+ {
+ using NativeType = VkImageCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCreateInfo;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR ImageCreateInfo(
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {},
+ VULKAN_HPP_NAMESPACE::ImageType imageType_ = VULKAN_HPP_NAMESPACE::ImageType::e1D,
+ VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::Extent3D extent_ = {},
+ uint32_t mipLevels_ = {},
+ uint32_t arrayLayers_ = {},
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {},
+ VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive,
+ uint32_t queueFamilyIndexCount_ = {},
+ const uint32_t * pQueueFamilyIndices_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined )
+ VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
+ , imageType( imageType_ )
+ , format( format_ )
+ , extent( extent_ )
+ , mipLevels( mipLevels_ )
+ , arrayLayers( arrayLayers_ )
+ , samples( samples_ )
+ , tiling( tiling_ )
+ , usage( usage_ )
+ , sharingMode( sharingMode_ )
+ , queueFamilyIndexCount( queueFamilyIndexCount_ )
+ , pQueueFamilyIndices( pQueueFamilyIndices_ )
+ , initialLayout( initialLayout_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR ImageCreateInfo( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageCreateInfo( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageCreateInfo( *reinterpret_cast<ImageCreateInfo const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ ImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_,
+ VULKAN_HPP_NAMESPACE::ImageType imageType_,
+ VULKAN_HPP_NAMESPACE::Format format_,
+ VULKAN_HPP_NAMESPACE::Extent3D extent_,
+ uint32_t mipLevels_,
+ uint32_t arrayLayers_,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_,
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling_,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_,
+ VULKAN_HPP_NAMESPACE::SharingMode sharingMode_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const uint32_t> const & queueFamilyIndices_,
+ VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined )
+ : flags( flags_ )
+ , imageType( imageType_ )
+ , format( format_ )
+ , extent( extent_ )
+ , mipLevels( mipLevels_ )
+ , arrayLayers( arrayLayers_ )
+ , samples( samples_ )
+ , tiling( tiling_ )
+ , usage( usage_ )
+ , sharingMode( sharingMode_ )
+ , queueFamilyIndexCount( static_cast<uint32_t>( queueFamilyIndices_.size() ) )
+ , pQueueFamilyIndices( queueFamilyIndices_.data() )
+ , initialLayout( initialLayout_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ ImageCreateInfo & operator=( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageCreateInfo & operator=( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageCreateInfo const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ flags = flags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setImageType( VULKAN_HPP_NAMESPACE::ImageType imageType_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageType = imageType_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ {
+ format = format_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ {
+ extent = extent_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setMipLevels( uint32_t mipLevels_ ) VULKAN_HPP_NOEXCEPT
+ {
+ mipLevels = mipLevels_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setArrayLayers( uint32_t arrayLayers_ ) VULKAN_HPP_NOEXCEPT
+ {
+ arrayLayers = arrayLayers_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
+ {
+ samples = samples_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT
+ {
+ tiling = tiling_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ {
+ usage = usage_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT
+ {
+ sharingMode = sharingMode_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ queueFamilyIndexCount = queueFamilyIndexCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pQueueFamilyIndices = pQueueFamilyIndices_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ ImageCreateInfo & setQueueFamilyIndices(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const uint32_t> const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ {
+ queueFamilyIndexCount = static_cast<uint32_t>( queueFamilyIndices_.size() );
+ pQueueFamilyIndices = queueFamilyIndices_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo &
+ setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT
+ {
+ initialLayout = initialLayout_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkImageCreateInfo *>( this );
+ }
+
+ explicit operator VkImageCreateInfo &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkImageCreateInfo *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::ImageType const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::ImageTiling const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::SharingMode const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ imageType,
+ format,
+ extent,
+ mipLevels,
+ arrayLayers,
+ samples,
+ tiling,
+ usage,
+ sharingMode,
+ queueFamilyIndexCount,
+ pQueueFamilyIndices,
+ initialLayout );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( ImageCreateInfo const & ) const = default;
+#else
+ bool operator==( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
+ ( imageType == rhs.imageType ) && ( format == rhs.format ) && ( extent == rhs.extent ) &&
+ ( mipLevels == rhs.mipLevels ) && ( arrayLayers == rhs.arrayLayers ) && ( samples == rhs.samples ) &&
+ ( tiling == rhs.tiling ) && ( usage == rhs.usage ) && ( sharingMode == rhs.sharingMode ) &&
+ ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) &&
+ ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && ( initialLayout == rhs.initialLayout );
+# endif
+ }
+
+ bool operator!=( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCreateInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {};
+ VULKAN_HPP_NAMESPACE::ImageType imageType = VULKAN_HPP_NAMESPACE::ImageType::e1D;
+ VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ VULKAN_HPP_NAMESPACE::Extent3D extent = {};
+ uint32_t mipLevels = {};
+ uint32_t arrayLayers = {};
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1;
+ VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal;
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {};
+ VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive;
+ uint32_t queueFamilyIndexCount = {};
+ const uint32_t * pQueueFamilyIndices = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCreateInfo ) == sizeof( VkImageCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageCreateInfo>::value,
+ "ImageCreateInfo is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eImageCreateInfo>
+ {
+ using Type = ImageCreateInfo;
+ };
+
+ struct DeviceImageMemoryRequirements
+ {
+ using NativeType = VkDeviceImageMemoryRequirements;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceImageMemoryRequirements;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ DeviceImageMemoryRequirements( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ = {},
+ VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ =
+ VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor ) VULKAN_HPP_NOEXCEPT
+ : pCreateInfo( pCreateInfo_ )
+ , planeAspect( planeAspect_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ DeviceImageMemoryRequirements( DeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DeviceImageMemoryRequirements( VkDeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DeviceImageMemoryRequirements( *reinterpret_cast<DeviceImageMemoryRequirements const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ DeviceImageMemoryRequirements &
+ operator=( DeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DeviceImageMemoryRequirements & operator=( VkDeviceImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements &
+ setPCreateInfo( const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pCreateInfo = pCreateInfo_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 DeviceImageMemoryRequirements &
+ setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT
+ {
+ planeAspect = planeAspect_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkDeviceImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkDeviceImageMemoryRequirements *>( this );
+ }
+
+ explicit operator VkDeviceImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkDeviceImageMemoryRequirements *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const VULKAN_HPP_NAMESPACE::ImageCreateInfo * const &,
+ VULKAN_HPP_NAMESPACE::ImageAspectFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pCreateInfo, planeAspect );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( DeviceImageMemoryRequirements const & ) const = default;
+#else
+ bool operator==( DeviceImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pCreateInfo == rhs.pCreateInfo ) &&
+ ( planeAspect == rhs.planeAspect );
+# endif
+ }
+
+ bool operator!=( DeviceImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceImageMemoryRequirements;
+ const void * pNext = {};
+ const VULKAN_HPP_NAMESPACE::ImageCreateInfo * pCreateInfo = {};
+ VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements ) ==
+ sizeof( VkDeviceImageMemoryRequirements ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceImageMemoryRequirements>::value,
+ "DeviceImageMemoryRequirements is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eDeviceImageMemoryRequirements>
+ {
+ using Type = DeviceImageMemoryRequirements;
+ };
+ using DeviceImageMemoryRequirementsKHR = DeviceImageMemoryRequirements;
+
struct DeviceMemoryOpaqueCaptureAddressInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceMemoryOpaqueCaptureAddressInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceMemoryOpaqueCaptureAddressInfo;
@@ -18782,8 +25557,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo &
- operator=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceMemoryOpaqueCaptureAddressInfo &
+ operator=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceMemoryOpaqueCaptureAddressInfo &
operator=( VkDeviceMemoryOpaqueCaptureAddressInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -18793,35 +25568,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceMemoryOpaqueCaptureAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceMemoryOpaqueCaptureAddressInfo & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOpaqueCaptureAddressInfo &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceMemoryOpaqueCaptureAddressInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceMemoryOpaqueCaptureAddressInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceMemoryOpaqueCaptureAddressInfo *>( this );
}
- operator VkDeviceMemoryOpaqueCaptureAddressInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceMemoryOpaqueCaptureAddressInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceMemoryOpaqueCaptureAddressInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceMemoryOpaqueCaptureAddressInfo const & ) const = default;
#else
bool operator==( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory );
+# endif
}
bool operator!=( DeviceMemoryOpaqueCaptureAddressInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18835,10 +25629,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceMemory memory = {};
};
- static_assert( sizeof( DeviceMemoryOpaqueCaptureAddressInfo ) == sizeof( VkDeviceMemoryOpaqueCaptureAddressInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceMemoryOpaqueCaptureAddressInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo ) ==
+ sizeof( VkDeviceMemoryOpaqueCaptureAddressInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceMemoryOpaqueCaptureAddressInfo>::value,
+ "DeviceMemoryOpaqueCaptureAddressInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceMemoryOpaqueCaptureAddressInfo>
@@ -18849,7 +25647,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceMemoryOverallocationCreateInfoAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceMemoryOverallocationCreateInfoAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceMemoryOverallocationCreateInfoAMD;
@@ -18869,8 +25669,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD &
- operator=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceMemoryOverallocationCreateInfoAMD &
+ operator=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceMemoryOverallocationCreateInfoAMD &
operator=( VkDeviceMemoryOverallocationCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -18880,13 +25680,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceMemoryOverallocationCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceMemoryOverallocationCreateInfoAMD & setOverallocationBehavior(
+ VULKAN_HPP_CONSTEXPR_14 DeviceMemoryOverallocationCreateInfoAMD & setOverallocationBehavior(
VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior_ ) VULKAN_HPP_NOEXCEPT
{
overallocationBehavior = overallocationBehavior_;
@@ -18894,23 +25695,41 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceMemoryOverallocationCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceMemoryOverallocationCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD *>( this );
}
- operator VkDeviceMemoryOverallocationCreateInfoAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceMemoryOverallocationCreateInfoAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceMemoryOverallocationCreateInfoAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, overallocationBehavior );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceMemoryOverallocationCreateInfoAMD const & ) const = default;
#else
bool operator==( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( overallocationBehavior == rhs.overallocationBehavior );
+# endif
}
bool operator!=( DeviceMemoryOverallocationCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -18925,11 +25744,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD overallocationBehavior =
VULKAN_HPP_NAMESPACE::MemoryOverallocationBehaviorAMD::eDefault;
};
- static_assert( sizeof( DeviceMemoryOverallocationCreateInfoAMD ) ==
- sizeof( VkDeviceMemoryOverallocationCreateInfoAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceMemoryOverallocationCreateInfoAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD ) ==
+ sizeof( VkDeviceMemoryOverallocationCreateInfoAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceMemoryOverallocationCreateInfoAMD>::value,
+ "DeviceMemoryOverallocationCreateInfoAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceMemoryOverallocationCreateInfoAMD>
@@ -18939,7 +25762,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DeviceMemoryReportCallbackDataEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceMemoryReportCallbackDataEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDeviceMemoryReportCallbackDataEXT;
@@ -18970,8 +25795,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceMemoryReportCallbackDataEXT &
- operator=( DeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceMemoryReportCallbackDataEXT &
+ operator=( DeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceMemoryReportCallbackDataEXT & operator=( VkDeviceMemoryReportCallbackDataEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -18979,24 +25804,48 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDeviceMemoryReportCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceMemoryReportCallbackDataEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceMemoryReportCallbackDataEXT *>( this );
}
- operator VkDeviceMemoryReportCallbackDataEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceMemoryReportCallbackDataEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceMemoryReportCallbackDataEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemoryReportFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemoryReportEventTypeEXT const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::ObjectType const &,
+ uint64_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, type, memoryObjectId, size, objectType, objectHandle, heapIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceMemoryReportCallbackDataEXT const & ) const = default;
#else
bool operator==( DeviceMemoryReportCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( type == rhs.type ) &&
( memoryObjectId == rhs.memoryObjectId ) && ( size == rhs.size ) && ( objectType == rhs.objectType ) &&
( objectHandle == rhs.objectHandle ) && ( heapIndex == rhs.heapIndex );
+# endif
}
bool operator!=( DeviceMemoryReportCallbackDataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19017,10 +25866,14 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t objectHandle = {};
uint32_t heapIndex = {};
};
- static_assert( sizeof( DeviceMemoryReportCallbackDataEXT ) == sizeof( VkDeviceMemoryReportCallbackDataEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceMemoryReportCallbackDataEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT ) ==
+ sizeof( VkDeviceMemoryReportCallbackDataEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceMemoryReportCallbackDataEXT>::value,
+ "DeviceMemoryReportCallbackDataEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceMemoryReportCallbackDataEXT>
@@ -19028,181 +25881,230 @@ namespace VULKAN_HPP_NAMESPACE
using Type = DeviceMemoryReportCallbackDataEXT;
};
- struct DevicePrivateDataCreateInfoEXT
+ struct DevicePrivateDataCreateInfo
{
- static const bool allowDuplicate = true;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDevicePrivateDataCreateInfoEXT;
+ using NativeType = VkDevicePrivateDataCreateInfo;
+
+ static const bool allowDuplicate = true;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDevicePrivateDataCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR
- DevicePrivateDataCreateInfoEXT( uint32_t privateDataSlotRequestCount_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR DevicePrivateDataCreateInfo( uint32_t privateDataSlotRequestCount_ = {} ) VULKAN_HPP_NOEXCEPT
: privateDataSlotRequestCount( privateDataSlotRequestCount_ )
{}
VULKAN_HPP_CONSTEXPR
- DevicePrivateDataCreateInfoEXT( DevicePrivateDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DevicePrivateDataCreateInfo( DevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DevicePrivateDataCreateInfoEXT( VkDevicePrivateDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : DevicePrivateDataCreateInfoEXT( *reinterpret_cast<DevicePrivateDataCreateInfoEXT const *>( &rhs ) )
+ DevicePrivateDataCreateInfo( VkDevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DevicePrivateDataCreateInfo( *reinterpret_cast<DevicePrivateDataCreateInfo const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfoEXT &
- operator=( DevicePrivateDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DevicePrivateDataCreateInfo & operator=( DevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DevicePrivateDataCreateInfoEXT & operator=( VkDevicePrivateDataCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ DevicePrivateDataCreateInfo & operator=( VkDevicePrivateDataCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfoEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DevicePrivateDataCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DevicePrivateDataCreateInfoEXT &
- setPrivateDataSlotRequestCount( uint32_t privateDataSlotRequestCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DevicePrivateDataCreateInfo &
+ setPrivateDataSlotRequestCount( uint32_t privateDataSlotRequestCount_ ) VULKAN_HPP_NOEXCEPT
{
privateDataSlotRequestCount = privateDataSlotRequestCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDevicePrivateDataCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDevicePrivateDataCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT *>( this );
+ return *reinterpret_cast<const VkDevicePrivateDataCreateInfo *>( this );
}
- operator VkDevicePrivateDataCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDevicePrivateDataCreateInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkDevicePrivateDataCreateInfoEXT *>( this );
+ return *reinterpret_cast<VkDevicePrivateDataCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, privateDataSlotRequestCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DevicePrivateDataCreateInfoEXT const & ) const = default;
+ auto operator<=>( DevicePrivateDataCreateInfo const & ) const = default;
#else
- bool operator==( DevicePrivateDataCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( DevicePrivateDataCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( privateDataSlotRequestCount == rhs.privateDataSlotRequestCount );
+# endif
}
- bool operator!=( DevicePrivateDataCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( DevicePrivateDataCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDevicePrivateDataCreateInfoEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDevicePrivateDataCreateInfo;
const void * pNext = {};
uint32_t privateDataSlotRequestCount = {};
};
- static_assert( sizeof( DevicePrivateDataCreateInfoEXT ) == sizeof( VkDevicePrivateDataCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DevicePrivateDataCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo ) ==
+ sizeof( VkDevicePrivateDataCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DevicePrivateDataCreateInfo>::value,
+ "DevicePrivateDataCreateInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eDevicePrivateDataCreateInfoEXT>
+ struct CppType<StructureType, StructureType::eDevicePrivateDataCreateInfo>
{
- using Type = DevicePrivateDataCreateInfoEXT;
+ using Type = DevicePrivateDataCreateInfo;
};
+ using DevicePrivateDataCreateInfoEXT = DevicePrivateDataCreateInfo;
- struct DeviceQueueGlobalPriorityCreateInfoEXT
+ struct DeviceQueueGlobalPriorityCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDeviceQueueGlobalPriorityCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::eDeviceQueueGlobalPriorityCreateInfoEXT;
+ StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
- DeviceQueueGlobalPriorityCreateInfoEXT( VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT globalPriority_ =
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow ) VULKAN_HPP_NOEXCEPT
+ DeviceQueueGlobalPriorityCreateInfoKHR( VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR globalPriority_ =
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow ) VULKAN_HPP_NOEXCEPT
: globalPriority( globalPriority_ )
{}
- VULKAN_HPP_CONSTEXPR DeviceQueueGlobalPriorityCreateInfoEXT( DeviceQueueGlobalPriorityCreateInfoEXT const & rhs )
+ VULKAN_HPP_CONSTEXPR DeviceQueueGlobalPriorityCreateInfoKHR( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs )
VULKAN_HPP_NOEXCEPT = default;
- DeviceQueueGlobalPriorityCreateInfoEXT( VkDeviceQueueGlobalPriorityCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : DeviceQueueGlobalPriorityCreateInfoEXT(
- *reinterpret_cast<DeviceQueueGlobalPriorityCreateInfoEXT const *>( &rhs ) )
+ DeviceQueueGlobalPriorityCreateInfoKHR( VkDeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DeviceQueueGlobalPriorityCreateInfoKHR(
+ *reinterpret_cast<DeviceQueueGlobalPriorityCreateInfoKHR const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfoEXT &
- operator=( DeviceQueueGlobalPriorityCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceQueueGlobalPriorityCreateInfoKHR &
+ operator=( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- DeviceQueueGlobalPriorityCreateInfoEXT &
- operator=( VkDeviceQueueGlobalPriorityCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ DeviceQueueGlobalPriorityCreateInfoKHR &
+ operator=( VkDeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceQueueGlobalPriorityCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceQueueGlobalPriorityCreateInfoEXT &
- setGlobalPriority( VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT globalPriority_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueGlobalPriorityCreateInfoKHR &
+ setGlobalPriority( VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR globalPriority_ ) VULKAN_HPP_NOEXCEPT
{
globalPriority = globalPriority_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceQueueGlobalPriorityCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceQueueGlobalPriorityCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT *>( this );
+ return *reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoKHR *>( this );
}
- operator VkDeviceQueueGlobalPriorityCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceQueueGlobalPriorityCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT *>( this );
+ return *reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, globalPriority );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DeviceQueueGlobalPriorityCreateInfoEXT const & ) const = default;
+ auto operator<=>( DeviceQueueGlobalPriorityCreateInfoKHR const & ) const = default;
#else
- bool operator==( DeviceQueueGlobalPriorityCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriority == rhs.globalPriority );
+# endif
}
- bool operator!=( DeviceQueueGlobalPriorityCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( DeviceQueueGlobalPriorityCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueGlobalPriorityCreateInfoEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR;
const void * pNext = {};
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT globalPriority = VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow;
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR globalPriority = VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow;
};
- static_assert( sizeof( DeviceQueueGlobalPriorityCreateInfoEXT ) == sizeof( VkDeviceQueueGlobalPriorityCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceQueueGlobalPriorityCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR ) ==
+ sizeof( VkDeviceQueueGlobalPriorityCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceQueueGlobalPriorityCreateInfoKHR>::value,
+ "DeviceQueueGlobalPriorityCreateInfoKHR is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eDeviceQueueGlobalPriorityCreateInfoEXT>
+ struct CppType<StructureType, StructureType::eDeviceQueueGlobalPriorityCreateInfoKHR>
{
- using Type = DeviceQueueGlobalPriorityCreateInfoEXT;
+ using Type = DeviceQueueGlobalPriorityCreateInfoKHR;
};
+ using DeviceQueueGlobalPriorityCreateInfoEXT = DeviceQueueGlobalPriorityCreateInfoKHR;
struct DeviceQueueInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueInfo2;
+ using NativeType = VkDeviceQueueInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDeviceQueueInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DeviceQueueInfo2( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ = {},
@@ -19220,7 +26122,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & operator=( DeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DeviceQueueInfo2 & operator=( DeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DeviceQueueInfo2 & operator=( VkDeviceQueueInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19229,48 +26131,69 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DeviceQueueInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DeviceQueueInfo2 & setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 &
+ setFlags( VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DeviceQueueInfo2 & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndex = queueFamilyIndex_;
return *this;
}
- DeviceQueueInfo2 & setQueueIndex( uint32_t queueIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DeviceQueueInfo2 & setQueueIndex( uint32_t queueIndex_ ) VULKAN_HPP_NOEXCEPT
{
queueIndex = queueIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDeviceQueueInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceQueueInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDeviceQueueInfo2 *>( this );
}
- operator VkDeviceQueueInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDeviceQueueInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDeviceQueueInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceQueueCreateFlags const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, queueFamilyIndex, queueIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DeviceQueueInfo2 const & ) const = default;
#else
bool operator==( DeviceQueueInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( queueFamilyIndex == rhs.queueFamilyIndex ) && ( queueIndex == rhs.queueIndex );
+# endif
}
bool operator!=( DeviceQueueInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19286,9 +26209,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t queueFamilyIndex = {};
uint32_t queueIndex = {};
};
- static_assert( sizeof( DeviceQueueInfo2 ) == sizeof( VkDeviceQueueInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DeviceQueueInfo2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DeviceQueueInfo2 ) == sizeof( VkDeviceQueueInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DeviceQueueInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DeviceQueueInfo2>::value,
+ "DeviceQueueInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDeviceQueueInfo2>
@@ -19299,8 +26225,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_DIRECTFB_EXT )
struct DirectFBSurfaceCreateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDirectfbSurfaceCreateInfoEXT;
+ using NativeType = VkDirectFBSurfaceCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDirectfbSurfaceCreateInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DirectFBSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ = {},
@@ -19319,8 +26247,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT &
- operator=( DirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DirectFBSurfaceCreateInfoEXT & operator=( DirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DirectFBSurfaceCreateInfoEXT & operator=( VkDirectFBSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19329,49 +26256,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DirectFBSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DirectFBSurfaceCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DirectFBSurfaceCreateInfoEXT & setDfb( IDirectFB * dfb_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setDfb( IDirectFB * dfb_ ) VULKAN_HPP_NOEXCEPT
{
dfb = dfb_;
return *this;
}
- DirectFBSurfaceCreateInfoEXT & setSurface( IDirectFBSurface * surface_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DirectFBSurfaceCreateInfoEXT & setSurface( IDirectFBSurface * surface_ ) VULKAN_HPP_NOEXCEPT
{
surface = surface_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDirectFBSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDirectFBSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDirectFBSurfaceCreateInfoEXT *>( this );
}
- operator VkDirectFBSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDirectFBSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDirectFBSurfaceCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateFlagsEXT const &,
+ IDirectFB * const &,
+ IDirectFBSurface * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, dfb, surface );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DirectFBSurfaceCreateInfoEXT const & ) const = default;
# else
bool operator==( DirectFBSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dfb == rhs.dfb ) &&
( surface == rhs.surface );
+# endif
}
bool operator!=( DirectFBSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19387,10 +26334,14 @@ namespace VULKAN_HPP_NAMESPACE
IDirectFB * dfb = {};
IDirectFBSurface * surface = {};
};
- static_assert( sizeof( DirectFBSurfaceCreateInfoEXT ) == sizeof( VkDirectFBSurfaceCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DirectFBSurfaceCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT ) ==
+ sizeof( VkDirectFBSurfaceCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DirectFBSurfaceCreateInfoEXT>::value,
+ "DirectFBSurfaceCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDirectfbSurfaceCreateInfoEXT>
@@ -19401,6 +26352,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DispatchIndirectCommand
{
+ using NativeType = VkDispatchIndirectCommand;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
DispatchIndirectCommand( uint32_t x_ = {}, uint32_t y_ = {}, uint32_t z_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -19416,8 +26369,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand &
- operator=( DispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DispatchIndirectCommand & operator=( DispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DispatchIndirectCommand & operator=( VkDispatchIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19426,41 +26378,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DispatchIndirectCommand & setX( uint32_t x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setX( uint32_t x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- DispatchIndirectCommand & setY( uint32_t y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setY( uint32_t y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
- DispatchIndirectCommand & setZ( uint32_t z_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DispatchIndirectCommand & setZ( uint32_t z_ ) VULKAN_HPP_NOEXCEPT
{
z = z_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDispatchIndirectCommand const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDispatchIndirectCommand const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDispatchIndirectCommand *>( this );
}
- operator VkDispatchIndirectCommand &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDispatchIndirectCommand &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDispatchIndirectCommand *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y, z );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DispatchIndirectCommand const & ) const = default;
#else
bool operator==( DispatchIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z );
+# endif
}
bool operator!=( DispatchIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19474,14 +26442,20 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t y = {};
uint32_t z = {};
};
- static_assert( sizeof( DispatchIndirectCommand ) == sizeof( VkDispatchIndirectCommand ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DispatchIndirectCommand>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DispatchIndirectCommand ) ==
+ sizeof( VkDispatchIndirectCommand ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DispatchIndirectCommand>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DispatchIndirectCommand>::value,
+ "DispatchIndirectCommand is not nothrow_move_constructible!" );
struct DisplayEventInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayEventInfoEXT;
+ using NativeType = VkDisplayEventInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayEventInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -19497,8 +26471,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT &
- operator=( DisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayEventInfoEXT & operator=( DisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayEventInfoEXT & operator=( VkDisplayEventInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19507,35 +26480,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplayEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DisplayEventInfoEXT & setDisplayEvent( VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayEventInfoEXT &
+ setDisplayEvent( VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent_ ) VULKAN_HPP_NOEXCEPT
{
displayEvent = displayEvent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplayEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayEventInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayEventInfoEXT *>( this );
}
- operator VkDisplayEventInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayEventInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayEventInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, displayEvent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayEventInfoEXT const & ) const = default;
#else
bool operator==( DisplayEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayEvent == rhs.displayEvent );
+# endif
}
bool operator!=( DisplayEventInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19549,9 +26541,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT displayEvent = VULKAN_HPP_NAMESPACE::DisplayEventTypeEXT::eFirstPixelOut;
};
- static_assert( sizeof( DisplayEventInfoEXT ) == sizeof( VkDisplayEventInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayEventInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT ) == sizeof( VkDisplayEventInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayEventInfoEXT>::value,
+ "DisplayEventInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayEventInfoEXT>
@@ -19561,6 +26556,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayModeParametersKHR
{
+ using NativeType = VkDisplayModeParametersKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayModeParametersKHR( VULKAN_HPP_NAMESPACE::Extent2D visibleRegion_ = {},
uint32_t refreshRate_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -19575,8 +26572,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR &
- operator=( DisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayModeParametersKHR & operator=( DisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayModeParametersKHR & operator=( VkDisplayModeParametersKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19585,36 +26581,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplayModeParametersKHR &
+ VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR &
setVisibleRegion( VULKAN_HPP_NAMESPACE::Extent2D const & visibleRegion_ ) VULKAN_HPP_NOEXCEPT
{
visibleRegion = visibleRegion_;
return *this;
}
- DisplayModeParametersKHR & setRefreshRate( uint32_t refreshRate_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayModeParametersKHR & setRefreshRate( uint32_t refreshRate_ ) VULKAN_HPP_NOEXCEPT
{
refreshRate = refreshRate_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplayModeParametersKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModeParametersKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayModeParametersKHR *>( this );
}
- operator VkDisplayModeParametersKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModeParametersKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayModeParametersKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Extent2D const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( visibleRegion, refreshRate );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayModeParametersKHR const & ) const = default;
#else
bool operator==( DisplayModeParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( visibleRegion == rhs.visibleRegion ) && ( refreshRate == rhs.refreshRate );
+# endif
}
bool operator!=( DisplayModeParametersKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19627,14 +26639,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent2D visibleRegion = {};
uint32_t refreshRate = {};
};
- static_assert( sizeof( DisplayModeParametersKHR ) == sizeof( VkDisplayModeParametersKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayModeParametersKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR ) ==
+ sizeof( VkDisplayModeParametersKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR>::value,
+ "DisplayModeParametersKHR is not nothrow_move_constructible!" );
struct DisplayModeCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeCreateInfoKHR;
+ using NativeType = VkDisplayModeCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -19651,8 +26669,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR &
- operator=( DisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayModeCreateInfoKHR & operator=( DisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayModeCreateInfoKHR & operator=( VkDisplayModeCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19661,19 +26678,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplayModeCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DisplayModeCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DisplayModeCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 DisplayModeCreateInfoKHR &
setParameters( VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const & parameters_ ) VULKAN_HPP_NOEXCEPT
{
parameters = parameters_;
@@ -19681,23 +26699,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplayModeCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModeCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayModeCreateInfoKHR *>( this );
}
- operator VkDisplayModeCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModeCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayModeCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, parameters );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayModeCreateInfoKHR const & ) const = default;
#else
bool operator==( DisplayModeCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( parameters == rhs.parameters );
+# endif
}
bool operator!=( DisplayModeCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19712,9 +26749,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplayModeCreateFlagsKHR flags = {};
VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters = {};
};
- static_assert( sizeof( DisplayModeCreateInfoKHR ) == sizeof( VkDisplayModeCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayModeCreateInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR ) ==
+ sizeof( VkDisplayModeCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayModeCreateInfoKHR>::value,
+ "DisplayModeCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayModeCreateInfoKHR>
@@ -19724,6 +26765,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayModePropertiesKHR
{
+ using NativeType = VkDisplayModePropertiesKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
DisplayModePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ = {},
@@ -19739,8 +26782,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayModePropertiesKHR &
- operator=( DisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayModePropertiesKHR & operator=( DisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayModePropertiesKHR & operator=( VkDisplayModePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19748,22 +26790,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayModePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayModePropertiesKHR *>( this );
}
- operator VkDisplayModePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayModePropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DisplayModeKHR const &, VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( displayMode, parameters );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayModePropertiesKHR const & ) const = default;
#else
bool operator==( DisplayModePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( displayMode == rhs.displayMode ) && ( parameters == rhs.parameters );
+# endif
}
bool operator!=( DisplayModePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19776,14 +26834,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode = {};
VULKAN_HPP_NAMESPACE::DisplayModeParametersKHR parameters = {};
};
- static_assert( sizeof( DisplayModePropertiesKHR ) == sizeof( VkDisplayModePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayModePropertiesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR ) ==
+ sizeof( VkDisplayModePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR>::value,
+ "DisplayModePropertiesKHR is not nothrow_move_constructible!" );
struct DisplayModeProperties2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeProperties2KHR;
+ using NativeType = VkDisplayModeProperties2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayModeProperties2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayModeProperties2KHR(
@@ -19799,8 +26863,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayModeProperties2KHR &
- operator=( DisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayModeProperties2KHR & operator=( DisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayModeProperties2KHR & operator=( VkDisplayModeProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19808,22 +26871,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayModeProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModeProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayModeProperties2KHR *>( this );
}
- operator VkDisplayModeProperties2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayModeProperties2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayModeProperties2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, displayModeProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayModeProperties2KHR const & ) const = default;
#else
bool operator==( DisplayModeProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayModeProperties == rhs.displayModeProperties );
+# endif
}
bool operator!=( DisplayModeProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19837,10 +26918,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::DisplayModePropertiesKHR displayModeProperties = {};
};
- static_assert( sizeof( DisplayModeProperties2KHR ) == sizeof( VkDisplayModeProperties2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayModeProperties2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR ) ==
+ sizeof( VkDisplayModeProperties2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayModeProperties2KHR>::value,
+ "DisplayModeProperties2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayModeProperties2KHR>
@@ -19850,7 +26934,9 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayNativeHdrSurfaceCapabilitiesAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDisplayNativeHdrSurfaceCapabilitiesAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD;
@@ -19869,8 +26955,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayNativeHdrSurfaceCapabilitiesAMD &
- operator=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayNativeHdrSurfaceCapabilitiesAMD &
+ operator=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayNativeHdrSurfaceCapabilitiesAMD &
operator=( VkDisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -19879,22 +26965,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayNativeHdrSurfaceCapabilitiesAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayNativeHdrSurfaceCapabilitiesAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD *>( this );
}
- operator VkDisplayNativeHdrSurfaceCapabilitiesAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayNativeHdrSurfaceCapabilitiesAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayNativeHdrSurfaceCapabilitiesAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, localDimmingSupport );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayNativeHdrSurfaceCapabilitiesAMD const & ) const = default;
#else
bool operator==( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( localDimmingSupport == rhs.localDimmingSupport );
+# endif
}
bool operator!=( DisplayNativeHdrSurfaceCapabilitiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19908,10 +27010,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 localDimmingSupport = {};
};
- static_assert( sizeof( DisplayNativeHdrSurfaceCapabilitiesAMD ) == sizeof( VkDisplayNativeHdrSurfaceCapabilitiesAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayNativeHdrSurfaceCapabilitiesAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD ) ==
+ sizeof( VkDisplayNativeHdrSurfaceCapabilitiesAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayNativeHdrSurfaceCapabilitiesAMD>::value,
+ "DisplayNativeHdrSurfaceCapabilitiesAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayNativeHdrSurfaceCapabilitiesAMD>
@@ -19921,6 +27028,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayPlaneCapabilitiesKHR
{
+ using NativeType = VkDisplayPlaneCapabilitiesKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
DisplayPlaneCapabilitiesKHR( VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR supportedAlpha_ = {},
@@ -19951,8 +27060,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPlaneCapabilitiesKHR &
- operator=( DisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPlaneCapabilitiesKHR & operator=( DisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPlaneCapabilitiesKHR & operator=( VkDisplayPlaneCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -19960,26 +27068,58 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayPlaneCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPlaneCapabilitiesKHR *>( this );
}
- operator VkDisplayPlaneCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPlaneCapabilitiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( supportedAlpha,
+ minSrcPosition,
+ maxSrcPosition,
+ minSrcExtent,
+ maxSrcExtent,
+ minDstPosition,
+ maxDstPosition,
+ minDstExtent,
+ maxDstExtent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPlaneCapabilitiesKHR const & ) const = default;
#else
bool operator==( DisplayPlaneCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( supportedAlpha == rhs.supportedAlpha ) && ( minSrcPosition == rhs.minSrcPosition ) &&
( maxSrcPosition == rhs.maxSrcPosition ) && ( minSrcExtent == rhs.minSrcExtent ) &&
( maxSrcExtent == rhs.maxSrcExtent ) && ( minDstPosition == rhs.minDstPosition ) &&
( maxDstPosition == rhs.maxDstPosition ) && ( minDstExtent == rhs.minDstExtent ) &&
( maxDstExtent == rhs.maxDstExtent );
+# endif
}
bool operator!=( DisplayPlaneCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -19999,15 +27139,21 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent2D minDstExtent = {};
VULKAN_HPP_NAMESPACE::Extent2D maxDstExtent = {};
};
- static_assert( sizeof( DisplayPlaneCapabilitiesKHR ) == sizeof( VkDisplayPlaneCapabilitiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPlaneCapabilitiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR ) ==
+ sizeof( VkDisplayPlaneCapabilitiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR>::value,
+ "DisplayPlaneCapabilitiesKHR is not nothrow_move_constructible!" );
struct DisplayPlaneCapabilities2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneCapabilities2KHR;
+ using NativeType = VkDisplayPlaneCapabilities2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneCapabilities2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayPlaneCapabilities2KHR(
@@ -20023,8 +27169,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPlaneCapabilities2KHR &
- operator=( DisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPlaneCapabilities2KHR & operator=( DisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPlaneCapabilities2KHR & operator=( VkDisplayPlaneCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20032,22 +27177,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayPlaneCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPlaneCapabilities2KHR *>( this );
}
- operator VkDisplayPlaneCapabilities2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneCapabilities2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPlaneCapabilities2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, capabilities );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPlaneCapabilities2KHR const & ) const = default;
#else
bool operator==( DisplayPlaneCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( capabilities == rhs.capabilities );
+# endif
}
bool operator!=( DisplayPlaneCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20061,10 +27224,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilitiesKHR capabilities = {};
};
- static_assert( sizeof( DisplayPlaneCapabilities2KHR ) == sizeof( VkDisplayPlaneCapabilities2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPlaneCapabilities2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR ) ==
+ sizeof( VkDisplayPlaneCapabilities2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPlaneCapabilities2KHR>::value,
+ "DisplayPlaneCapabilities2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayPlaneCapabilities2KHR>
@@ -20074,8 +27241,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayPlaneInfo2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneInfo2KHR;
+ using NativeType = VkDisplayPlaneInfo2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneInfo2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayPlaneInfo2KHR( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ = {},
@@ -20091,8 +27260,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR &
- operator=( DisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPlaneInfo2KHR & operator=( DisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPlaneInfo2KHR & operator=( VkDisplayPlaneInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20101,42 +27269,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplayPlaneInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DisplayPlaneInfo2KHR & setMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR &
+ setMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR mode_ ) VULKAN_HPP_NOEXCEPT
{
mode = mode_;
return *this;
}
- DisplayPlaneInfo2KHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPlaneInfo2KHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT
{
planeIndex = planeIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplayPlaneInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPlaneInfo2KHR *>( this );
}
- operator VkDisplayPlaneInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneInfo2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPlaneInfo2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayModeKHR const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, mode, planeIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPlaneInfo2KHR const & ) const = default;
#else
bool operator==( DisplayPlaneInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mode == rhs.mode ) &&
( planeIndex == rhs.planeIndex );
+# endif
}
bool operator!=( DisplayPlaneInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20151,9 +27339,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplayModeKHR mode = {};
uint32_t planeIndex = {};
};
- static_assert( sizeof( DisplayPlaneInfo2KHR ) == sizeof( VkDisplayPlaneInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPlaneInfo2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR ) == sizeof( VkDisplayPlaneInfo2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPlaneInfo2KHR>::value,
+ "DisplayPlaneInfo2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayPlaneInfo2KHR>
@@ -20163,6 +27354,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayPlanePropertiesKHR
{
+ using NativeType = VkDisplayPlanePropertiesKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayPlanePropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR currentDisplay_ = {},
uint32_t currentStackIndex_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -20178,8 +27371,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPlanePropertiesKHR &
- operator=( DisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPlanePropertiesKHR & operator=( DisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPlanePropertiesKHR & operator=( VkDisplayPlanePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20187,22 +27379,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayPlanePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlanePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPlanePropertiesKHR *>( this );
}
- operator VkDisplayPlanePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlanePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPlanePropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DisplayKHR const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( currentDisplay, currentStackIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPlanePropertiesKHR const & ) const = default;
#else
bool operator==( DisplayPlanePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( currentDisplay == rhs.currentDisplay ) && ( currentStackIndex == rhs.currentStackIndex );
+# endif
}
bool operator!=( DisplayPlanePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20215,15 +27423,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplayKHR currentDisplay = {};
uint32_t currentStackIndex = {};
};
- static_assert( sizeof( DisplayPlanePropertiesKHR ) == sizeof( VkDisplayPlanePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPlanePropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR ) ==
+ sizeof( VkDisplayPlanePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR>::value,
+ "DisplayPlanePropertiesKHR is not nothrow_move_constructible!" );
struct DisplayPlaneProperties2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneProperties2KHR;
+ using NativeType = VkDisplayPlaneProperties2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPlaneProperties2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayPlaneProperties2KHR(
@@ -20239,8 +27452,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPlaneProperties2KHR &
- operator=( DisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPlaneProperties2KHR & operator=( DisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPlaneProperties2KHR & operator=( VkDisplayPlaneProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20248,23 +27460,41 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayPlaneProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPlaneProperties2KHR *>( this );
}
- operator VkDisplayPlaneProperties2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPlaneProperties2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPlaneProperties2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, displayPlaneProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPlaneProperties2KHR const & ) const = default;
#else
bool operator==( DisplayPlaneProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( displayPlaneProperties == rhs.displayPlaneProperties );
+# endif
}
bool operator!=( DisplayPlaneProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20278,10 +27508,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::DisplayPlanePropertiesKHR displayPlaneProperties = {};
};
- static_assert( sizeof( DisplayPlaneProperties2KHR ) == sizeof( VkDisplayPlaneProperties2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPlaneProperties2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR ) ==
+ sizeof( VkDisplayPlaneProperties2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPlaneProperties2KHR>::value,
+ "DisplayPlaneProperties2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayPlaneProperties2KHR>
@@ -20291,8 +27524,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayPowerInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPowerInfoEXT;
+ using NativeType = VkDisplayPowerInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPowerInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayPowerInfoEXT( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ =
@@ -20307,8 +27542,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT &
- operator=( DisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPowerInfoEXT & operator=( DisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPowerInfoEXT & operator=( VkDisplayPowerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20317,35 +27551,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplayPowerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DisplayPowerInfoEXT & setPowerState( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPowerInfoEXT &
+ setPowerState( VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState_ ) VULKAN_HPP_NOEXCEPT
{
powerState = powerState_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplayPowerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPowerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPowerInfoEXT *>( this );
}
- operator VkDisplayPowerInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPowerInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPowerInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, powerState );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPowerInfoEXT const & ) const = default;
#else
bool operator==( DisplayPowerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( powerState == rhs.powerState );
+# endif
}
bool operator!=( DisplayPowerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20359,9 +27612,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT powerState = VULKAN_HPP_NAMESPACE::DisplayPowerStateEXT::eOff;
};
- static_assert( sizeof( DisplayPowerInfoEXT ) == sizeof( VkDisplayPowerInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPowerInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT ) == sizeof( VkDisplayPowerInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPowerInfoEXT>::value,
+ "DisplayPowerInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayPowerInfoEXT>
@@ -20371,8 +27627,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayPresentInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPresentInfoKHR;
+ using NativeType = VkDisplayPresentInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayPresentInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DisplayPresentInfoKHR( VULKAN_HPP_NAMESPACE::Rect2D srcRect_ = {},
@@ -20390,8 +27648,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR &
- operator=( DisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPresentInfoKHR & operator=( DisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPresentInfoKHR & operator=( VkDisplayPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20400,48 +27657,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplayPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DisplayPresentInfoKHR & setSrcRect( VULKAN_HPP_NAMESPACE::Rect2D const & srcRect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR &
+ setSrcRect( VULKAN_HPP_NAMESPACE::Rect2D const & srcRect_ ) VULKAN_HPP_NOEXCEPT
{
srcRect = srcRect_;
return *this;
}
- DisplayPresentInfoKHR & setDstRect( VULKAN_HPP_NAMESPACE::Rect2D const & dstRect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR &
+ setDstRect( VULKAN_HPP_NAMESPACE::Rect2D const & dstRect_ ) VULKAN_HPP_NOEXCEPT
{
dstRect = dstRect_;
return *this;
}
- DisplayPresentInfoKHR & setPersistent( VULKAN_HPP_NAMESPACE::Bool32 persistent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplayPresentInfoKHR &
+ setPersistent( VULKAN_HPP_NAMESPACE::Bool32 persistent_ ) VULKAN_HPP_NOEXCEPT
{
persistent = persistent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplayPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPresentInfoKHR *>( this );
}
- operator VkDisplayPresentInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPresentInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPresentInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Rect2D const &,
+ VULKAN_HPP_NAMESPACE::Rect2D const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcRect, dstRect, persistent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayPresentInfoKHR const & ) const = default;
#else
bool operator==( DisplayPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcRect == rhs.srcRect ) &&
( dstRect == rhs.dstRect ) && ( persistent == rhs.persistent );
+# endif
}
bool operator!=( DisplayPresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20457,9 +27737,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Rect2D dstRect = {};
VULKAN_HPP_NAMESPACE::Bool32 persistent = {};
};
- static_assert( sizeof( DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPresentInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR ) == sizeof( VkDisplayPresentInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPresentInfoKHR>::value,
+ "DisplayPresentInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayPresentInfoKHR>
@@ -20469,6 +27752,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplayPropertiesKHR
{
+ using NativeType = VkDisplayPropertiesKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
DisplayPropertiesKHR( VULKAN_HPP_NAMESPACE::DisplayKHR display_ = {},
@@ -20494,8 +27779,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayPropertiesKHR &
- operator=( DisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayPropertiesKHR & operator=( DisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayPropertiesKHR & operator=( VkDisplayPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20503,22 +27787,67 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayPropertiesKHR *>( this );
}
- operator VkDisplayPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayPropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DisplayKHR const &,
+ const char * const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( display,
+ displayName,
+ physicalDimensions,
+ physicalResolution,
+ supportedTransforms,
+ planeReorderPossible,
+ persistentContent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( DisplayPropertiesKHR const & ) const = default;
-#else
+ std::strong_ordering operator<=>( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = display <=> rhs.display; cmp != 0 )
+ return cmp;
+ if ( displayName != rhs.displayName )
+ if ( auto cmp = strcmp( displayName, rhs.displayName ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = physicalDimensions <=> rhs.physicalDimensions; cmp != 0 )
+ return cmp;
+ if ( auto cmp = physicalResolution <=> rhs.physicalResolution; cmp != 0 )
+ return cmp;
+ if ( auto cmp = supportedTransforms <=> rhs.supportedTransforms; cmp != 0 )
+ return cmp;
+ if ( auto cmp = planeReorderPossible <=> rhs.planeReorderPossible; cmp != 0 )
+ return cmp;
+ if ( auto cmp = persistentContent <=> rhs.persistentContent; cmp != 0 )
+ return cmp;
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( DisplayPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return ( display == rhs.display ) && ( displayName == rhs.displayName ) &&
+ return ( display == rhs.display ) &&
+ ( ( displayName == rhs.displayName ) || ( strcmp( displayName, rhs.displayName ) == 0 ) ) &&
( physicalDimensions == rhs.physicalDimensions ) && ( physicalResolution == rhs.physicalResolution ) &&
( supportedTransforms == rhs.supportedTransforms ) &&
( planeReorderPossible == rhs.planeReorderPossible ) && ( persistentContent == rhs.persistentContent );
@@ -20528,7 +27857,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::DisplayKHR display = {};
@@ -20539,14 +27867,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 planeReorderPossible = {};
VULKAN_HPP_NAMESPACE::Bool32 persistentContent = {};
};
- static_assert( sizeof( DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayPropertiesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR ) == sizeof( VkDisplayPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR>::value,
+ "DisplayPropertiesKHR is not nothrow_move_constructible!" );
struct DisplayProperties2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayProperties2KHR;
+ using NativeType = VkDisplayProperties2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplayProperties2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -20561,8 +27894,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplayProperties2KHR &
- operator=( DisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplayProperties2KHR & operator=( DisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplayProperties2KHR & operator=( VkDisplayProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20570,22 +27902,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDisplayProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplayProperties2KHR *>( this );
}
- operator VkDisplayProperties2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplayProperties2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplayProperties2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, displayProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplayProperties2KHR const & ) const = default;
#else
bool operator==( DisplayProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayProperties == rhs.displayProperties );
+# endif
}
bool operator!=( DisplayProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20599,9 +27949,12 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::DisplayPropertiesKHR displayProperties = {};
};
- static_assert( sizeof( DisplayProperties2KHR ) == sizeof( VkDisplayProperties2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplayProperties2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplayProperties2KHR ) == sizeof( VkDisplayProperties2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplayProperties2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplayProperties2KHR>::value,
+ "DisplayProperties2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplayProperties2KHR>
@@ -20611,8 +27964,10 @@ namespace VULKAN_HPP_NAMESPACE
struct DisplaySurfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplaySurfaceCreateInfoKHR;
+ using NativeType = VkDisplaySurfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eDisplaySurfaceCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -20644,8 +27999,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
- operator=( DisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DisplaySurfaceCreateInfoKHR & operator=( DisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DisplaySurfaceCreateInfoKHR & operator=( VkDisplaySurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20654,85 +28008,112 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DisplaySurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- DisplaySurfaceCreateInfoKHR &
- setFlags( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- DisplaySurfaceCreateInfoKHR &
- setDisplayMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
+ setDisplayMode( VULKAN_HPP_NAMESPACE::DisplayModeKHR displayMode_ ) VULKAN_HPP_NOEXCEPT
{
displayMode = displayMode_;
return *this;
}
- DisplaySurfaceCreateInfoKHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setPlaneIndex( uint32_t planeIndex_ ) VULKAN_HPP_NOEXCEPT
{
planeIndex = planeIndex_;
return *this;
}
- DisplaySurfaceCreateInfoKHR & setPlaneStackIndex( uint32_t planeStackIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
+ setPlaneStackIndex( uint32_t planeStackIndex_ ) VULKAN_HPP_NOEXCEPT
{
planeStackIndex = planeStackIndex_;
return *this;
}
- DisplaySurfaceCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT
{
transform = transform_;
return *this;
}
- DisplaySurfaceCreateInfoKHR & setGlobalAlpha( float globalAlpha_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR & setGlobalAlpha( float globalAlpha_ ) VULKAN_HPP_NOEXCEPT
{
globalAlpha = globalAlpha_;
return *this;
}
- DisplaySurfaceCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
setAlphaMode( VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR alphaMode_ ) VULKAN_HPP_NOEXCEPT
{
alphaMode = alphaMode_;
return *this;
}
- DisplaySurfaceCreateInfoKHR &
- setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DisplaySurfaceCreateInfoKHR &
+ setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
{
imageExtent = imageExtent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDisplaySurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplaySurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDisplaySurfaceCreateInfoKHR *>( this );
}
- operator VkDisplaySurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDisplaySurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDisplaySurfaceCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::DisplayModeKHR const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &,
+ float const &,
+ VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, flags, displayMode, planeIndex, planeStackIndex, transform, globalAlpha, alphaMode, imageExtent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DisplaySurfaceCreateInfoKHR const & ) const = default;
#else
bool operator==( DisplaySurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( displayMode == rhs.displayMode ) && ( planeIndex == rhs.planeIndex ) &&
( planeStackIndex == rhs.planeStackIndex ) && ( transform == rhs.transform ) &&
( globalAlpha == rhs.globalAlpha ) && ( alphaMode == rhs.alphaMode ) && ( imageExtent == rhs.imageExtent );
+# endif
}
bool operator!=( DisplaySurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20755,10 +28136,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DisplayPlaneAlphaFlagBitsKHR::eOpaque;
VULKAN_HPP_NAMESPACE::Extent2D imageExtent = {};
};
- static_assert( sizeof( DisplaySurfaceCreateInfoKHR ) == sizeof( VkDisplaySurfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DisplaySurfaceCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR ) ==
+ sizeof( VkDisplaySurfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DisplaySurfaceCreateInfoKHR>::value,
+ "DisplaySurfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDisplaySurfaceCreateInfoKHR>
@@ -20768,6 +28153,8 @@ namespace VULKAN_HPP_NAMESPACE
struct DrawIndexedIndirectCommand
{
+ using NativeType = VkDrawIndexedIndirectCommand;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DrawIndexedIndirectCommand( uint32_t indexCount_ = {},
uint32_t instanceCount_ = {},
@@ -20789,8 +28176,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand &
- operator=( DrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DrawIndexedIndirectCommand & operator=( DrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DrawIndexedIndirectCommand & operator=( VkDrawIndexedIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20799,55 +28185,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DrawIndexedIndirectCommand & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT
{
indexCount = indexCount_;
return *this;
}
- DrawIndexedIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT
{
instanceCount = instanceCount_;
return *this;
}
- DrawIndexedIndirectCommand & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT
{
firstIndex = firstIndex_;
return *this;
}
- DrawIndexedIndirectCommand & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT
{
vertexOffset = vertexOffset_;
return *this;
}
- DrawIndexedIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndexedIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT
{
firstInstance = firstInstance_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDrawIndexedIndirectCommand const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrawIndexedIndirectCommand const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDrawIndexedIndirectCommand *>( this );
}
- operator VkDrawIndexedIndirectCommand &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrawIndexedIndirectCommand &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDrawIndexedIndirectCommand *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &, int32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( indexCount, instanceCount, firstIndex, vertexOffset, firstInstance );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DrawIndexedIndirectCommand const & ) const = default;
#else
bool operator==( DrawIndexedIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( indexCount == rhs.indexCount ) && ( instanceCount == rhs.instanceCount ) &&
( firstIndex == rhs.firstIndex ) && ( vertexOffset == rhs.vertexOffset ) &&
( firstInstance == rhs.firstInstance );
+# endif
}
bool operator!=( DrawIndexedIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20863,13 +28265,18 @@ namespace VULKAN_HPP_NAMESPACE
int32_t vertexOffset = {};
uint32_t firstInstance = {};
};
- static_assert( sizeof( DrawIndexedIndirectCommand ) == sizeof( VkDrawIndexedIndirectCommand ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DrawIndexedIndirectCommand>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand ) ==
+ sizeof( VkDrawIndexedIndirectCommand ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrawIndexedIndirectCommand>::value,
+ "DrawIndexedIndirectCommand is not nothrow_move_constructible!" );
struct DrawIndirectCommand
{
+ using NativeType = VkDrawIndirectCommand;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DrawIndirectCommand( uint32_t vertexCount_ = {},
uint32_t instanceCount_ = {},
@@ -20888,8 +28295,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand &
- operator=( DrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DrawIndirectCommand & operator=( DrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DrawIndirectCommand & operator=( VkDrawIndirectCommand const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20898,48 +28304,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DrawIndirectCommand & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT
{
vertexCount = vertexCount_;
return *this;
}
- DrawIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setInstanceCount( uint32_t instanceCount_ ) VULKAN_HPP_NOEXCEPT
{
instanceCount = instanceCount_;
return *this;
}
- DrawIndirectCommand & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT
{
firstVertex = firstVertex_;
return *this;
}
- DrawIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawIndirectCommand & setFirstInstance( uint32_t firstInstance_ ) VULKAN_HPP_NOEXCEPT
{
firstInstance = firstInstance_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDrawIndirectCommand const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrawIndirectCommand const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDrawIndirectCommand *>( this );
}
- operator VkDrawIndirectCommand &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrawIndirectCommand &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDrawIndirectCommand *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( vertexCount, instanceCount, firstVertex, firstInstance );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DrawIndirectCommand const & ) const = default;
#else
bool operator==( DrawIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( vertexCount == rhs.vertexCount ) && ( instanceCount == rhs.instanceCount ) &&
( firstVertex == rhs.firstVertex ) && ( firstInstance == rhs.firstInstance );
+# endif
}
bool operator!=( DrawIndirectCommand const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -20954,12 +28376,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t firstVertex = {};
uint32_t firstInstance = {};
};
- static_assert( sizeof( DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DrawIndirectCommand>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawIndirectCommand ) == sizeof( VkDrawIndirectCommand ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrawIndirectCommand>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrawIndirectCommand>::value,
+ "DrawIndirectCommand is not nothrow_move_constructible!" );
struct DrawMeshTasksIndirectCommandNV
{
+ using NativeType = VkDrawMeshTasksIndirectCommandNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DrawMeshTasksIndirectCommandNV( uint32_t taskCount_ = {},
uint32_t firstTask_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -20975,8 +28402,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV &
- operator=( DrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DrawMeshTasksIndirectCommandNV &
+ operator=( DrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DrawMeshTasksIndirectCommandNV & operator=( VkDrawMeshTasksIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -20985,35 +28412,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- DrawMeshTasksIndirectCommandNV & setTaskCount( uint32_t taskCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV & setTaskCount( uint32_t taskCount_ ) VULKAN_HPP_NOEXCEPT
{
taskCount = taskCount_;
return *this;
}
- DrawMeshTasksIndirectCommandNV & setFirstTask( uint32_t firstTask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 DrawMeshTasksIndirectCommandNV & setFirstTask( uint32_t firstTask_ ) VULKAN_HPP_NOEXCEPT
{
firstTask = firstTask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkDrawMeshTasksIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrawMeshTasksIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDrawMeshTasksIndirectCommandNV *>( this );
}
- operator VkDrawMeshTasksIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrawMeshTasksIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDrawMeshTasksIndirectCommandNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( taskCount, firstTask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DrawMeshTasksIndirectCommandNV const & ) const = default;
#else
bool operator==( DrawMeshTasksIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( taskCount == rhs.taskCount ) && ( firstTask == rhs.firstTask );
+# endif
}
bool operator!=( DrawMeshTasksIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21026,13 +28469,106 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t taskCount = {};
uint32_t firstTask = {};
};
- static_assert( sizeof( DrawMeshTasksIndirectCommandNV ) == sizeof( VkDrawMeshTasksIndirectCommandNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DrawMeshTasksIndirectCommandNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV ) ==
+ sizeof( VkDrawMeshTasksIndirectCommandNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrawMeshTasksIndirectCommandNV>::value,
+ "DrawMeshTasksIndirectCommandNV is not nothrow_move_constructible!" );
+
+ struct DrmFormatModifierProperties2EXT
+ {
+ using NativeType = VkDrmFormatModifierProperties2EXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR DrmFormatModifierProperties2EXT(
+ uint64_t drmFormatModifier_ = {},
+ uint32_t drmFormatModifierPlaneCount_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 drmFormatModifierTilingFeatures_ = {} ) VULKAN_HPP_NOEXCEPT
+ : drmFormatModifier( drmFormatModifier_ )
+ , drmFormatModifierPlaneCount( drmFormatModifierPlaneCount_ )
+ , drmFormatModifierTilingFeatures( drmFormatModifierTilingFeatures_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ DrmFormatModifierProperties2EXT( DrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DrmFormatModifierProperties2EXT( VkDrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DrmFormatModifierProperties2EXT( *reinterpret_cast<DrmFormatModifierProperties2EXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ DrmFormatModifierProperties2EXT &
+ operator=( DrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DrmFormatModifierProperties2EXT & operator=( VkDrmFormatModifierProperties2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkDrmFormatModifierProperties2EXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkDrmFormatModifierProperties2EXT *>( this );
+ }
+
+ explicit operator VkDrmFormatModifierProperties2EXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkDrmFormatModifierProperties2EXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint64_t const &, uint32_t const &, VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( drmFormatModifier, drmFormatModifierPlaneCount, drmFormatModifierTilingFeatures );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( DrmFormatModifierProperties2EXT const & ) const = default;
+#else
+ bool operator==( DrmFormatModifierProperties2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( drmFormatModifier == rhs.drmFormatModifier ) &&
+ ( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) &&
+ ( drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures );
+# endif
+ }
+
+ bool operator!=( DrmFormatModifierProperties2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ uint64_t drmFormatModifier = {};
+ uint32_t drmFormatModifierPlaneCount = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 drmFormatModifierTilingFeatures = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT ) ==
+ sizeof( VkDrmFormatModifierProperties2EXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT>::value,
+ "DrmFormatModifierProperties2EXT is not nothrow_move_constructible!" );
struct DrmFormatModifierPropertiesEXT
{
+ using NativeType = VkDrmFormatModifierPropertiesEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesEXT(
uint64_t drmFormatModifier_ = {},
@@ -21051,8 +28587,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DrmFormatModifierPropertiesEXT &
- operator=( DrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DrmFormatModifierPropertiesEXT &
+ operator=( DrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DrmFormatModifierPropertiesEXT & operator=( VkDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21060,24 +28596,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDrmFormatModifierPropertiesEXT *>( this );
}
- operator VkDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDrmFormatModifierPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint64_t const &, uint32_t const &, VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( drmFormatModifier, drmFormatModifierPlaneCount, drmFormatModifierTilingFeatures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DrmFormatModifierPropertiesEXT const & ) const = default;
#else
bool operator==( DrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( drmFormatModifier == rhs.drmFormatModifier ) &&
( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) &&
( drmFormatModifierTilingFeatures == rhs.drmFormatModifierTilingFeatures );
+# endif
}
bool operator!=( DrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21091,14 +28643,129 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t drmFormatModifierPlaneCount = {};
VULKAN_HPP_NAMESPACE::FormatFeatureFlags drmFormatModifierTilingFeatures = {};
};
- static_assert( sizeof( DrmFormatModifierPropertiesEXT ) == sizeof( VkDrmFormatModifierPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DrmFormatModifierPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT ) ==
+ sizeof( VkDrmFormatModifierPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT>::value,
+ "DrmFormatModifierPropertiesEXT is not nothrow_move_constructible!" );
+
+ struct DrmFormatModifierPropertiesList2EXT
+ {
+ using NativeType = VkDrmFormatModifierPropertiesList2EXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eDrmFormatModifierPropertiesList2EXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesList2EXT(
+ uint32_t drmFormatModifierCount_ = {},
+ VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * pDrmFormatModifierProperties_ = {} ) VULKAN_HPP_NOEXCEPT
+ : drmFormatModifierCount( drmFormatModifierCount_ )
+ , pDrmFormatModifierProperties( pDrmFormatModifierProperties_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR DrmFormatModifierPropertiesList2EXT( DrmFormatModifierPropertiesList2EXT const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ DrmFormatModifierPropertiesList2EXT( VkDrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : DrmFormatModifierPropertiesList2EXT( *reinterpret_cast<DrmFormatModifierPropertiesList2EXT const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ DrmFormatModifierPropertiesList2EXT(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT> const &
+ drmFormatModifierProperties_ )
+ : drmFormatModifierCount( static_cast<uint32_t>( drmFormatModifierProperties_.size() ) )
+ , pDrmFormatModifierProperties( drmFormatModifierProperties_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ DrmFormatModifierPropertiesList2EXT &
+ operator=( DrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ DrmFormatModifierPropertiesList2EXT &
+ operator=( VkDrmFormatModifierPropertiesList2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkDrmFormatModifierPropertiesList2EXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkDrmFormatModifierPropertiesList2EXT *>( this );
+ }
+
+ explicit operator VkDrmFormatModifierPropertiesList2EXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkDrmFormatModifierPropertiesList2EXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifierProperties );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( DrmFormatModifierPropertiesList2EXT const & ) const = default;
+#else
+ bool operator==( DrmFormatModifierPropertiesList2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( drmFormatModifierCount == rhs.drmFormatModifierCount ) &&
+ ( pDrmFormatModifierProperties == rhs.pDrmFormatModifierProperties );
+# endif
+ }
+
+ bool operator!=( DrmFormatModifierPropertiesList2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eDrmFormatModifierPropertiesList2EXT;
+ void * pNext = {};
+ uint32_t drmFormatModifierCount = {};
+ VULKAN_HPP_NAMESPACE::DrmFormatModifierProperties2EXT * pDrmFormatModifierProperties = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT ) ==
+ sizeof( VkDrmFormatModifierPropertiesList2EXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesList2EXT>::value,
+ "DrmFormatModifierPropertiesList2EXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eDrmFormatModifierPropertiesList2EXT>
+ {
+ using Type = DrmFormatModifierPropertiesList2EXT;
+ };
struct DrmFormatModifierPropertiesListEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkDrmFormatModifierPropertiesListEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eDrmFormatModifierPropertiesListEXT;
@@ -21127,8 +28794,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 DrmFormatModifierPropertiesListEXT &
- operator=( DrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ DrmFormatModifierPropertiesListEXT &
+ operator=( DrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
DrmFormatModifierPropertiesListEXT &
operator=( VkDrmFormatModifierPropertiesListEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -21137,24 +28804,43 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkDrmFormatModifierPropertiesListEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrmFormatModifierPropertiesListEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT *>( this );
}
- operator VkDrmFormatModifierPropertiesListEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkDrmFormatModifierPropertiesListEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkDrmFormatModifierPropertiesListEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifierProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( DrmFormatModifierPropertiesListEXT const & ) const = default;
#else
bool operator==( DrmFormatModifierPropertiesListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( drmFormatModifierCount == rhs.drmFormatModifierCount ) &&
( pDrmFormatModifierProperties == rhs.pDrmFormatModifierProperties );
+# endif
}
bool operator!=( DrmFormatModifierPropertiesListEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21169,10 +28855,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t drmFormatModifierCount = {};
VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesEXT * pDrmFormatModifierProperties = {};
};
- static_assert( sizeof( DrmFormatModifierPropertiesListEXT ) == sizeof( VkDrmFormatModifierPropertiesListEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<DrmFormatModifierPropertiesListEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT ) ==
+ sizeof( VkDrmFormatModifierPropertiesListEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::DrmFormatModifierPropertiesListEXT>::value,
+ "DrmFormatModifierPropertiesListEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eDrmFormatModifierPropertiesListEXT>
@@ -21182,8 +28872,10 @@ namespace VULKAN_HPP_NAMESPACE
struct EventCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eEventCreateInfo;
+ using NativeType = VkEventCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eEventCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR EventCreateInfo( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -21197,7 +28889,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 EventCreateInfo & operator=( EventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ EventCreateInfo & operator=( EventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
EventCreateInfo & operator=( VkEventCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21206,35 +28898,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- EventCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 EventCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- EventCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 EventCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::EventCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkEventCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkEventCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkEventCreateInfo *>( this );
}
- operator VkEventCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkEventCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkEventCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::EventCreateFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( EventCreateInfo const & ) const = default;
#else
bool operator==( EventCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( EventCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21248,8 +28959,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::EventCreateFlags flags = {};
};
- static_assert( sizeof( EventCreateInfo ) == sizeof( VkEventCreateInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<EventCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::EventCreateInfo ) == sizeof( VkEventCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::EventCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::EventCreateInfo>::value,
+ "EventCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eEventCreateInfo>
@@ -21259,8 +28974,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExportFenceCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceCreateInfo;
+ using NativeType = VkExportFenceCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -21275,8 +28992,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo &
- operator=( ExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportFenceCreateInfo & operator=( ExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportFenceCreateInfo & operator=( VkExportFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21285,13 +29001,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportFenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportFenceCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ExportFenceCreateInfo &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -21299,22 +29015,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportFenceCreateInfo *>( this );
}
- operator VkExportFenceCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportFenceCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportFenceCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportFenceCreateInfo const & ) const = default;
#else
bool operator==( ExportFenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExportFenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21328,9 +29062,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags handleTypes = {};
};
- static_assert( sizeof( ExportFenceCreateInfo ) == sizeof( VkExportFenceCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportFenceCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo ) == sizeof( VkExportFenceCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportFenceCreateInfo>::value,
+ "ExportFenceCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportFenceCreateInfo>
@@ -21342,8 +29079,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ExportFenceWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceWin32HandleInfoKHR;
+ using NativeType = VkExportFenceWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportFenceWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExportFenceWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {},
@@ -21362,8 +29101,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR &
- operator=( ExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportFenceWin32HandleInfoKHR &
+ operator=( ExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportFenceWin32HandleInfoKHR & operator=( VkExportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21372,48 +29111,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportFenceWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR &
+ setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
{
pAttributes = pAttributes_;
return *this;
}
- ExportFenceWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
{
dwAccess = dwAccess_;
return *this;
}
- ExportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
{
name = name_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportFenceWin32HandleInfoKHR *>( this );
}
- operator VkExportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportFenceWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const SECURITY_ATTRIBUTES * const &,
+ DWORD const &,
+ LPCWSTR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pAttributes, dwAccess, name );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportFenceWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( ExportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) &&
( dwAccess == rhs.dwAccess ) && ( name == rhs.name );
+# endif
}
bool operator!=( ExportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21429,10 +29189,14 @@ namespace VULKAN_HPP_NAMESPACE
DWORD dwAccess = {};
LPCWSTR name = {};
};
- static_assert( sizeof( ExportFenceWin32HandleInfoKHR ) == sizeof( VkExportFenceWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportFenceWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR ) ==
+ sizeof( VkExportFenceWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportFenceWin32HandleInfoKHR>::value,
+ "ExportFenceWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportFenceWin32HandleInfoKHR>
@@ -21443,8 +29207,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExportMemoryAllocateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfo;
+ using NativeType = VkExportMemoryAllocateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfo(
@@ -21459,8 +29225,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo &
- operator=( ExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportMemoryAllocateInfo & operator=( ExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportMemoryAllocateInfo & operator=( VkExportMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21469,13 +29234,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportMemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportMemoryAllocateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfo &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -21483,22 +29248,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportMemoryAllocateInfo *>( this );
}
- operator VkExportMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportMemoryAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportMemoryAllocateInfo const & ) const = default;
#else
bool operator==( ExportMemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExportMemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21512,9 +29295,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {};
};
- static_assert( sizeof( ExportMemoryAllocateInfo ) == sizeof( VkExportMemoryAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportMemoryAllocateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo ) ==
+ sizeof( VkExportMemoryAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfo>::value,
+ "ExportMemoryAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportMemoryAllocateInfo>
@@ -21525,8 +29312,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExportMemoryAllocateInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfoNV;
+ using NativeType = VkExportMemoryAllocateInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryAllocateInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExportMemoryAllocateInfoNV(
@@ -21542,8 +29331,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV &
- operator=( ExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportMemoryAllocateInfoNV & operator=( ExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportMemoryAllocateInfoNV & operator=( VkExportMemoryAllocateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21552,13 +29340,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportMemoryAllocateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryAllocateInfoNV &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -21566,22 +29354,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryAllocateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportMemoryAllocateInfoNV *>( this );
}
- operator VkExportMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryAllocateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportMemoryAllocateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportMemoryAllocateInfoNV const & ) const = default;
#else
bool operator==( ExportMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExportMemoryAllocateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21595,10 +29401,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes = {};
};
- static_assert( sizeof( ExportMemoryAllocateInfoNV ) == sizeof( VkExportMemoryAllocateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportMemoryAllocateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV ) ==
+ sizeof( VkExportMemoryAllocateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportMemoryAllocateInfoNV>::value,
+ "ExportMemoryAllocateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportMemoryAllocateInfoNV>
@@ -21609,8 +29418,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ExportMemoryWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoKHR;
+ using NativeType = VkExportMemoryWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoKHR( const SECURITY_ATTRIBUTES * pAttributes_ = {},
@@ -21629,8 +29440,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR &
- operator=( ExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportMemoryWin32HandleInfoKHR &
+ operator=( ExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportMemoryWin32HandleInfoKHR & operator=( VkExportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21639,48 +29450,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportMemoryWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR &
+ setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
{
pAttributes = pAttributes_;
return *this;
}
- ExportMemoryWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
{
dwAccess = dwAccess_;
return *this;
}
- ExportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
{
name = name_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR *>( this );
}
- operator VkExportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportMemoryWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const SECURITY_ATTRIBUTES * const &,
+ DWORD const &,
+ LPCWSTR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pAttributes, dwAccess, name );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportMemoryWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( ExportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) &&
( dwAccess == rhs.dwAccess ) && ( name == rhs.name );
+# endif
}
bool operator!=( ExportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21696,10 +29528,14 @@ namespace VULKAN_HPP_NAMESPACE
DWORD dwAccess = {};
LPCWSTR name = {};
};
- static_assert( sizeof( ExportMemoryWin32HandleInfoKHR ) == sizeof( VkExportMemoryWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportMemoryWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR ) ==
+ sizeof( VkExportMemoryWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoKHR>::value,
+ "ExportMemoryWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportMemoryWin32HandleInfoKHR>
@@ -21711,8 +29547,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ExportMemoryWin32HandleInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoNV;
+ using NativeType = VkExportMemoryWin32HandleInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportMemoryWin32HandleInfoNV;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExportMemoryWin32HandleInfoNV( const SECURITY_ATTRIBUTES * pAttributes_ = {},
@@ -21729,8 +29567,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV &
- operator=( ExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportMemoryWin32HandleInfoNV &
+ operator=( ExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportMemoryWin32HandleInfoNV & operator=( VkExportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21739,42 +29577,62 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportMemoryWin32HandleInfoNV & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV &
+ setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
{
pAttributes = pAttributes_;
return *this;
}
- ExportMemoryWin32HandleInfoNV & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportMemoryWin32HandleInfoNV & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
{
dwAccess = dwAccess_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportMemoryWin32HandleInfoNV *>( this );
}
- operator VkExportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportMemoryWin32HandleInfoNV *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const SECURITY_ATTRIBUTES * const &,
+ DWORD const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pAttributes, dwAccess );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportMemoryWin32HandleInfoNV const & ) const = default;
# else
bool operator==( ExportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) &&
( dwAccess == rhs.dwAccess );
+# endif
}
bool operator!=( ExportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21789,10 +29647,14 @@ namespace VULKAN_HPP_NAMESPACE
const SECURITY_ATTRIBUTES * pAttributes = {};
DWORD dwAccess = {};
};
- static_assert( sizeof( ExportMemoryWin32HandleInfoNV ) == sizeof( VkExportMemoryWin32HandleInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportMemoryWin32HandleInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV ) ==
+ sizeof( VkExportMemoryWin32HandleInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportMemoryWin32HandleInfoNV>::value,
+ "ExportMemoryWin32HandleInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportMemoryWin32HandleInfoNV>
@@ -21803,8 +29665,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExportSemaphoreCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportSemaphoreCreateInfo;
+ using NativeType = VkExportSemaphoreCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExportSemaphoreCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExportSemaphoreCreateInfo(
@@ -21820,8 +29684,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo &
- operator=( ExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportSemaphoreCreateInfo & operator=( ExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportSemaphoreCreateInfo & operator=( VkExportSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21830,13 +29693,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportSemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportSemaphoreCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreCreateInfo &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -21844,22 +29707,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportSemaphoreCreateInfo *>( this );
}
- operator VkExportSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportSemaphoreCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportSemaphoreCreateInfo const & ) const = default;
#else
bool operator==( ExportSemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExportSemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21873,10 +29754,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags handleTypes = {};
};
- static_assert( sizeof( ExportSemaphoreCreateInfo ) == sizeof( VkExportSemaphoreCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportSemaphoreCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo ) ==
+ sizeof( VkExportSemaphoreCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportSemaphoreCreateInfo>::value,
+ "ExportSemaphoreCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportSemaphoreCreateInfo>
@@ -21888,7 +29772,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ExportSemaphoreWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkExportSemaphoreWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eExportSemaphoreWin32HandleInfoKHR;
@@ -21909,8 +29795,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR &
- operator=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExportSemaphoreWin32HandleInfoKHR &
+ operator=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExportSemaphoreWin32HandleInfoKHR & operator=( VkExportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -21919,48 +29805,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExportSemaphoreWin32HandleInfoKHR & setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR &
+ setPAttributes( const SECURITY_ATTRIBUTES * pAttributes_ ) VULKAN_HPP_NOEXCEPT
{
pAttributes = pAttributes_;
return *this;
}
- ExportSemaphoreWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setDwAccess( DWORD dwAccess_ ) VULKAN_HPP_NOEXCEPT
{
dwAccess = dwAccess_;
return *this;
}
- ExportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
{
name = name_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR *>( this );
}
- operator VkExportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const SECURITY_ATTRIBUTES * const &,
+ DWORD const &,
+ LPCWSTR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pAttributes, dwAccess, name );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExportSemaphoreWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( ExportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pAttributes == rhs.pAttributes ) &&
( dwAccess == rhs.dwAccess ) && ( name == rhs.name );
+# endif
}
bool operator!=( ExportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -21976,10 +29883,14 @@ namespace VULKAN_HPP_NAMESPACE
DWORD dwAccess = {};
LPCWSTR name = {};
};
- static_assert( sizeof( ExportSemaphoreWin32HandleInfoKHR ) == sizeof( VkExportSemaphoreWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExportSemaphoreWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR ) ==
+ sizeof( VkExportSemaphoreWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExportSemaphoreWin32HandleInfoKHR>::value,
+ "ExportSemaphoreWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExportSemaphoreWin32HandleInfoKHR>
@@ -21990,6 +29901,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ExtensionProperties
{
+ using NativeType = VkExtensionProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
ExtensionProperties( std::array<char, VK_MAX_EXTENSION_NAME_SIZE> const & extensionName_ = {},
@@ -22005,8 +29918,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExtensionProperties &
- operator=( ExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExtensionProperties & operator=( ExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExtensionProperties & operator=( VkExtensionProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22014,22 +29926,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExtensionProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExtensionProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExtensionProperties *>( this );
}
- operator VkExtensionProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExtensionProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExtensionProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( extensionName, specVersion );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExtensionProperties const & ) const = default;
#else
bool operator==( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( extensionName == rhs.extensionName ) && ( specVersion == rhs.specVersion );
+# endif
}
bool operator!=( ExtensionProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22042,12 +29970,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> extensionName = {};
uint32_t specVersion = {};
};
- static_assert( sizeof( ExtensionProperties ) == sizeof( VkExtensionProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExtensionProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExtensionProperties ) == sizeof( VkExtensionProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExtensionProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExtensionProperties>::value,
+ "ExtensionProperties is not nothrow_move_constructible!" );
struct ExternalMemoryProperties
{
+ using NativeType = VkExternalMemoryProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalMemoryProperties(
VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags externalMemoryFeatures_ = {},
@@ -22065,8 +29998,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalMemoryProperties &
- operator=( ExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalMemoryProperties & operator=( ExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalMemoryProperties & operator=( VkExternalMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22074,24 +30006,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExternalMemoryProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalMemoryProperties *>( this );
}
- operator VkExternalMemoryProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalMemoryProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( externalMemoryFeatures, exportFromImportedHandleTypes, compatibleHandleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalMemoryProperties const & ) const = default;
#else
bool operator==( ExternalMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( externalMemoryFeatures == rhs.externalMemoryFeatures ) &&
( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) &&
( compatibleHandleTypes == rhs.compatibleHandleTypes );
+# endif
}
bool operator!=( ExternalMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22105,15 +30055,21 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags exportFromImportedHandleTypes = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags compatibleHandleTypes = {};
};
- static_assert( sizeof( ExternalMemoryProperties ) == sizeof( VkExternalMemoryProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalMemoryProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryProperties ) ==
+ sizeof( VkExternalMemoryProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalMemoryProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalMemoryProperties>::value,
+ "ExternalMemoryProperties is not nothrow_move_constructible!" );
using ExternalMemoryPropertiesKHR = ExternalMemoryProperties;
struct ExternalBufferProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalBufferProperties;
+ using NativeType = VkExternalBufferProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalBufferProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalBufferProperties(
@@ -22128,8 +30084,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalBufferProperties &
- operator=( ExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalBufferProperties & operator=( ExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalBufferProperties & operator=( VkExternalBufferProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22137,23 +30092,41 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExternalBufferProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalBufferProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalBufferProperties *>( this );
}
- operator VkExternalBufferProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalBufferProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalBufferProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, externalMemoryProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalBufferProperties const & ) const = default;
#else
bool operator==( ExternalBufferProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( externalMemoryProperties == rhs.externalMemoryProperties );
+# endif
}
bool operator!=( ExternalBufferProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22167,9 +30140,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {};
};
- static_assert( sizeof( ExternalBufferProperties ) == sizeof( VkExternalBufferProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalBufferProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalBufferProperties ) ==
+ sizeof( VkExternalBufferProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalBufferProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalBufferProperties>::value,
+ "ExternalBufferProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalBufferProperties>
@@ -22180,8 +30157,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExternalFenceProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFenceProperties;
+ using NativeType = VkExternalFenceProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFenceProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalFenceProperties(
@@ -22200,8 +30179,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalFenceProperties &
- operator=( ExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalFenceProperties & operator=( ExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalFenceProperties & operator=( VkExternalFenceProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22209,25 +30187,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExternalFenceProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalFenceProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalFenceProperties *>( this );
}
- operator VkExternalFenceProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalFenceProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalFenceProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, exportFromImportedHandleTypes, compatibleHandleTypes, externalFenceFeatures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalFenceProperties const & ) const = default;
#else
bool operator==( ExternalFenceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) &&
( compatibleHandleTypes == rhs.compatibleHandleTypes ) &&
( externalFenceFeatures == rhs.externalFenceFeatures );
+# endif
}
bool operator!=( ExternalFenceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22243,9 +30241,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlags compatibleHandleTypes = {};
VULKAN_HPP_NAMESPACE::ExternalFenceFeatureFlags externalFenceFeatures = {};
};
- static_assert( sizeof( ExternalFenceProperties ) == sizeof( VkExternalFenceProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalFenceProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalFenceProperties ) ==
+ sizeof( VkExternalFenceProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalFenceProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalFenceProperties>::value,
+ "ExternalFenceProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalFenceProperties>
@@ -22257,8 +30259,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct ExternalFormatANDROID
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFormatANDROID;
+ using NativeType = VkExternalFormatANDROID;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalFormatANDROID;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalFormatANDROID( uint64_t externalFormat_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -22272,8 +30276,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID &
- operator=( ExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalFormatANDROID & operator=( ExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalFormatANDROID & operator=( VkExternalFormatANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22282,35 +30285,51 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExternalFormatANDROID & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExternalFormatANDROID & setExternalFormat( uint64_t externalFormat_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExternalFormatANDROID & setExternalFormat( uint64_t externalFormat_ ) VULKAN_HPP_NOEXCEPT
{
externalFormat = externalFormat_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExternalFormatANDROID const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalFormatANDROID const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalFormatANDROID *>( this );
}
- operator VkExternalFormatANDROID &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalFormatANDROID &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalFormatANDROID *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, externalFormat );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalFormatANDROID const & ) const = default;
# else
bool operator==( ExternalFormatANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalFormat == rhs.externalFormat );
+# endif
}
bool operator!=( ExternalFormatANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22324,9 +30343,12 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint64_t externalFormat = {};
};
- static_assert( sizeof( ExternalFormatANDROID ) == sizeof( VkExternalFormatANDROID ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalFormatANDROID>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalFormatANDROID ) == sizeof( VkExternalFormatANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalFormatANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalFormatANDROID>::value,
+ "ExternalFormatANDROID is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalFormatANDROID>
@@ -22337,8 +30359,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExternalImageFormatProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalImageFormatProperties;
+ using NativeType = VkExternalImageFormatProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalImageFormatProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalImageFormatProperties(
@@ -22354,8 +30378,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalImageFormatProperties &
- operator=( ExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalImageFormatProperties &
+ operator=( ExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalImageFormatProperties & operator=( VkExternalImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22363,23 +30387,41 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExternalImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalImageFormatProperties *>( this );
}
- operator VkExternalImageFormatProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalImageFormatProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalImageFormatProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, externalMemoryProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalImageFormatProperties const & ) const = default;
#else
bool operator==( ExternalImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( externalMemoryProperties == rhs.externalMemoryProperties );
+# endif
}
bool operator!=( ExternalImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22393,10 +30435,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryProperties externalMemoryProperties = {};
};
- static_assert( sizeof( ExternalImageFormatProperties ) == sizeof( VkExternalImageFormatProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalImageFormatProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties ) ==
+ sizeof( VkExternalImageFormatProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalImageFormatProperties>::value,
+ "ExternalImageFormatProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalImageFormatProperties>
@@ -22407,6 +30453,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageFormatProperties
{
+ using NativeType = VkImageFormatProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
ImageFormatProperties( VULKAN_HPP_NAMESPACE::Extent3D maxExtent_ = {},
@@ -22428,8 +30476,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageFormatProperties &
- operator=( ImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageFormatProperties & operator=( ImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageFormatProperties & operator=( VkImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22437,24 +30484,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageFormatProperties *>( this );
}
- operator VkImageFormatProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageFormatProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Extent3D const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( maxExtent, maxMipLevels, maxArrayLayers, sampleCounts, maxResourceSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageFormatProperties const & ) const = default;
#else
bool operator==( ImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( maxExtent == rhs.maxExtent ) && ( maxMipLevels == rhs.maxMipLevels ) &&
( maxArrayLayers == rhs.maxArrayLayers ) && ( sampleCounts == rhs.sampleCounts ) &&
( maxResourceSize == rhs.maxResourceSize );
+# endif
}
bool operator!=( ImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22470,12 +30537,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts = {};
VULKAN_HPP_NAMESPACE::DeviceSize maxResourceSize = {};
};
- static_assert( sizeof( ImageFormatProperties ) == sizeof( VkImageFormatProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageFormatProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatProperties ) == sizeof( VkImageFormatProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageFormatProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageFormatProperties>::value,
+ "ImageFormatProperties is not nothrow_move_constructible!" );
struct ExternalImageFormatPropertiesNV
{
+ using NativeType = VkExternalImageFormatPropertiesNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalImageFormatPropertiesNV(
VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties_ = {},
@@ -22496,8 +30568,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalImageFormatPropertiesNV &
- operator=( ExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalImageFormatPropertiesNV &
+ operator=( ExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalImageFormatPropertiesNV & operator=( VkExternalImageFormatPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22505,25 +30577,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExternalImageFormatPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalImageFormatPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalImageFormatPropertiesNV *>( this );
}
- operator VkExternalImageFormatPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalImageFormatPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalImageFormatPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageFormatProperties const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryFeatureFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ imageFormatProperties, externalMemoryFeatures, exportFromImportedHandleTypes, compatibleHandleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalImageFormatPropertiesNV const & ) const = default;
#else
bool operator==( ExternalImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( imageFormatProperties == rhs.imageFormatProperties ) &&
( externalMemoryFeatures == rhs.externalMemoryFeatures ) &&
( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) &&
( compatibleHandleTypes == rhs.compatibleHandleTypes );
+# endif
}
bool operator!=( ExternalImageFormatPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22538,15 +30630,21 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV exportFromImportedHandleTypes = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV compatibleHandleTypes = {};
};
- static_assert( sizeof( ExternalImageFormatPropertiesNV ) == sizeof( VkExternalImageFormatPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalImageFormatPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV ) ==
+ sizeof( VkExternalImageFormatPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalImageFormatPropertiesNV>::value,
+ "ExternalImageFormatPropertiesNV is not nothrow_move_constructible!" );
struct ExternalMemoryBufferCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryBufferCreateInfo;
+ using NativeType = VkExternalMemoryBufferCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryBufferCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalMemoryBufferCreateInfo(
@@ -22562,8 +30660,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo &
- operator=( ExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalMemoryBufferCreateInfo &
+ operator=( ExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalMemoryBufferCreateInfo & operator=( VkExternalMemoryBufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22572,13 +30670,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExternalMemoryBufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExternalMemoryBufferCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ExternalMemoryBufferCreateInfo &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -22586,22 +30684,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExternalMemoryBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryBufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalMemoryBufferCreateInfo *>( this );
}
- operator VkExternalMemoryBufferCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryBufferCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalMemoryBufferCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalMemoryBufferCreateInfo const & ) const = default;
#else
bool operator==( ExternalMemoryBufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExternalMemoryBufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22615,10 +30731,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {};
};
- static_assert( sizeof( ExternalMemoryBufferCreateInfo ) == sizeof( VkExternalMemoryBufferCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalMemoryBufferCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo ) ==
+ sizeof( VkExternalMemoryBufferCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalMemoryBufferCreateInfo>::value,
+ "ExternalMemoryBufferCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalMemoryBufferCreateInfo>
@@ -22629,8 +30749,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExternalMemoryImageCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfo;
+ using NativeType = VkExternalMemoryImageCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfo(
@@ -22646,8 +30768,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo &
- operator=( ExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalMemoryImageCreateInfo &
+ operator=( ExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalMemoryImageCreateInfo & operator=( VkExternalMemoryImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22656,13 +30778,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExternalMemoryImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExternalMemoryImageCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfo &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -22670,22 +30792,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExternalMemoryImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalMemoryImageCreateInfo *>( this );
}
- operator VkExternalMemoryImageCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryImageCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalMemoryImageCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalMemoryImageCreateInfo const & ) const = default;
#else
bool operator==( ExternalMemoryImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExternalMemoryImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22699,10 +30839,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlags handleTypes = {};
};
- static_assert( sizeof( ExternalMemoryImageCreateInfo ) == sizeof( VkExternalMemoryImageCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalMemoryImageCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo ) ==
+ sizeof( VkExternalMemoryImageCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfo>::value,
+ "ExternalMemoryImageCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalMemoryImageCreateInfo>
@@ -22713,8 +30857,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExternalMemoryImageCreateInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfoNV;
+ using NativeType = VkExternalMemoryImageCreateInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalMemoryImageCreateInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalMemoryImageCreateInfoNV(
@@ -22730,8 +30876,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV &
- operator=( ExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalMemoryImageCreateInfoNV &
+ operator=( ExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalMemoryImageCreateInfoNV & operator=( VkExternalMemoryImageCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22740,13 +30886,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ExternalMemoryImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ExternalMemoryImageCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 ExternalMemoryImageCreateInfoNV &
setHandleTypes( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes_ ) VULKAN_HPP_NOEXCEPT
{
handleTypes = handleTypes_;
@@ -22754,22 +30900,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkExternalMemoryImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryImageCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalMemoryImageCreateInfoNV *>( this );
}
- operator VkExternalMemoryImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalMemoryImageCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalMemoryImageCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalMemoryImageCreateInfoNV const & ) const = default;
#else
bool operator==( ExternalMemoryImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleTypes == rhs.handleTypes );
+# endif
}
bool operator!=( ExternalMemoryImageCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22783,10 +30947,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleTypes = {};
};
- static_assert( sizeof( ExternalMemoryImageCreateInfoNV ) == sizeof( VkExternalMemoryImageCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalMemoryImageCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV ) ==
+ sizeof( VkExternalMemoryImageCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalMemoryImageCreateInfoNV>::value,
+ "ExternalMemoryImageCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalMemoryImageCreateInfoNV>
@@ -22796,8 +30964,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ExternalSemaphoreProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalSemaphoreProperties;
+ using NativeType = VkExternalSemaphoreProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eExternalSemaphoreProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ExternalSemaphoreProperties(
@@ -22817,8 +30987,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ExternalSemaphoreProperties &
- operator=( ExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ExternalSemaphoreProperties & operator=( ExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ExternalSemaphoreProperties & operator=( VkExternalSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22826,25 +30995,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkExternalSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkExternalSemaphoreProperties *>( this );
}
- operator VkExternalSemaphoreProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkExternalSemaphoreProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkExternalSemaphoreProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, exportFromImportedHandleTypes, compatibleHandleTypes, externalSemaphoreFeatures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ExternalSemaphoreProperties const & ) const = default;
#else
bool operator==( ExternalSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( exportFromImportedHandleTypes == rhs.exportFromImportedHandleTypes ) &&
( compatibleHandleTypes == rhs.compatibleHandleTypes ) &&
( externalSemaphoreFeatures == rhs.externalSemaphoreFeatures );
+# endif
}
bool operator!=( ExternalSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22860,10 +31049,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlags compatibleHandleTypes = {};
VULKAN_HPP_NAMESPACE::ExternalSemaphoreFeatureFlags externalSemaphoreFeatures = {};
};
- static_assert( sizeof( ExternalSemaphoreProperties ) == sizeof( VkExternalSemaphoreProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ExternalSemaphoreProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties ) ==
+ sizeof( VkExternalSemaphoreProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ExternalSemaphoreProperties>::value,
+ "ExternalSemaphoreProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eExternalSemaphoreProperties>
@@ -22874,8 +31067,10 @@ namespace VULKAN_HPP_NAMESPACE
struct FenceCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceCreateInfo;
+ using NativeType = VkFenceCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR FenceCreateInfo( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -22889,7 +31084,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo & operator=( FenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FenceCreateInfo & operator=( FenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FenceCreateInfo & operator=( VkFenceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22898,35 +31093,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FenceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FenceCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::FenceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFenceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFenceCreateInfo *>( this );
}
- operator VkFenceCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFenceCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFenceCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::FenceCreateFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FenceCreateInfo const & ) const = default;
#else
bool operator==( FenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( FenceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -22940,8 +31154,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::FenceCreateFlags flags = {};
};
- static_assert( sizeof( FenceCreateInfo ) == sizeof( VkFenceCreateInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FenceCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FenceCreateInfo ) == sizeof( VkFenceCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FenceCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FenceCreateInfo>::value,
+ "FenceCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFenceCreateInfo>
@@ -22951,8 +31169,10 @@ namespace VULKAN_HPP_NAMESPACE
struct FenceGetFdInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetFdInfoKHR;
+ using NativeType = VkFenceGetFdInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetFdInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -22970,8 +31190,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR &
- operator=( FenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FenceGetFdInfoKHR & operator=( FenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FenceGetFdInfoKHR & operator=( VkFenceGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -22980,19 +31199,19 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FenceGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FenceGetFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
{
fence = fence_;
return *this;
}
- FenceGetFdInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 FenceGetFdInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -23000,23 +31219,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFenceGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFenceGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFenceGetFdInfoKHR *>( this );
}
- operator VkFenceGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFenceGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFenceGetFdInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Fence const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fence, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FenceGetFdInfoKHR const & ) const = default;
#else
bool operator==( FenceGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( FenceGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23032,9 +31270,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( FenceGetFdInfoKHR ) == sizeof( VkFenceGetFdInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FenceGetFdInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR ) == sizeof( VkFenceGetFdInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FenceGetFdInfoKHR>::value,
+ "FenceGetFdInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFenceGetFdInfoKHR>
@@ -23045,8 +31286,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct FenceGetWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetWin32HandleInfoKHR;
+ using NativeType = VkFenceGetWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFenceGetWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR FenceGetWin32HandleInfoKHR(
@@ -23065,8 +31308,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR &
- operator=( FenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FenceGetWin32HandleInfoKHR & operator=( FenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FenceGetWin32HandleInfoKHR & operator=( VkFenceGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -23075,19 +31317,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FenceGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FenceGetWin32HandleInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR &
+ setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
{
fence = fence_;
return *this;
}
- FenceGetWin32HandleInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 FenceGetWin32HandleInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -23095,23 +31338,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFenceGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFenceGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFenceGetWin32HandleInfoKHR *>( this );
}
- operator VkFenceGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFenceGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFenceGetWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Fence const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fence, handleType );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FenceGetWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( FenceGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( FenceGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23127,10 +31389,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( FenceGetWin32HandleInfoKHR ) == sizeof( VkFenceGetWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FenceGetWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR ) ==
+ sizeof( VkFenceGetWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FenceGetWin32HandleInfoKHR>::value,
+ "FenceGetWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFenceGetWin32HandleInfoKHR>
@@ -23141,7 +31406,9 @@ namespace VULKAN_HPP_NAMESPACE
struct FilterCubicImageViewImageFormatPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkFilterCubicImageViewImageFormatPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eFilterCubicImageViewImageFormatPropertiesEXT;
@@ -23163,8 +31430,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FilterCubicImageViewImageFormatPropertiesEXT &
- operator=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FilterCubicImageViewImageFormatPropertiesEXT &
+ operator=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FilterCubicImageViewImageFormatPropertiesEXT &
operator=( VkFilterCubicImageViewImageFormatPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -23173,23 +31440,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkFilterCubicImageViewImageFormatPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFilterCubicImageViewImageFormatPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT *>( this );
}
- operator VkFilterCubicImageViewImageFormatPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFilterCubicImageViewImageFormatPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFilterCubicImageViewImageFormatPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, filterCubic, filterCubicMinmax );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FilterCubicImageViewImageFormatPropertiesEXT const & ) const = default;
#else
bool operator==( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( filterCubic == rhs.filterCubic ) &&
( filterCubicMinmax == rhs.filterCubicMinmax );
+# endif
}
bool operator!=( FilterCubicImageViewImageFormatPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23204,11 +31490,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 filterCubic = {};
VULKAN_HPP_NAMESPACE::Bool32 filterCubicMinmax = {};
};
- static_assert( sizeof( FilterCubicImageViewImageFormatPropertiesEXT ) ==
- sizeof( VkFilterCubicImageViewImageFormatPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FilterCubicImageViewImageFormatPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT ) ==
+ sizeof( VkFilterCubicImageViewImageFormatPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FilterCubicImageViewImageFormatPropertiesEXT>::value,
+ "FilterCubicImageViewImageFormatPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFilterCubicImageViewImageFormatPropertiesEXT>
@@ -23218,6 +31508,8 @@ namespace VULKAN_HPP_NAMESPACE
struct FormatProperties
{
+ using NativeType = VkFormatProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
FormatProperties( VULKAN_HPP_NAMESPACE::FormatFeatureFlags linearTilingFeatures_ = {},
@@ -23235,7 +31527,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FormatProperties & operator=( FormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FormatProperties & operator=( FormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FormatProperties & operator=( VkFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -23243,23 +31535,41 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkFormatProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFormatProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFormatProperties *>( this );
}
- operator VkFormatProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFormatProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFormatProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( linearTilingFeatures, optimalTilingFeatures, bufferFeatures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FormatProperties const & ) const = default;
#else
bool operator==( FormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( linearTilingFeatures == rhs.linearTilingFeatures ) &&
( optimalTilingFeatures == rhs.optimalTilingFeatures ) && ( bufferFeatures == rhs.bufferFeatures );
+# endif
}
bool operator!=( FormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23273,14 +31583,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::FormatFeatureFlags optimalTilingFeatures = {};
VULKAN_HPP_NAMESPACE::FormatFeatureFlags bufferFeatures = {};
};
- static_assert( sizeof( FormatProperties ) == sizeof( VkFormatProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FormatProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FormatProperties ) == sizeof( VkFormatProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FormatProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FormatProperties>::value,
+ "FormatProperties is not nothrow_move_constructible!" );
struct FormatProperties2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties2;
+ using NativeType = VkFormatProperties2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -23295,8 +31610,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FormatProperties2 &
- operator=( FormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FormatProperties2 & operator=( FormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FormatProperties2 & operator=( VkFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -23304,22 +31618,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFormatProperties2 *>( this );
}
- operator VkFormatProperties2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFormatProperties2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFormatProperties2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::FormatProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, formatProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FormatProperties2 const & ) const = default;
#else
bool operator==( FormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatProperties == rhs.formatProperties );
+# endif
}
bool operator!=( FormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23333,9 +31664,12 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::FormatProperties formatProperties = {};
};
- static_assert( sizeof( FormatProperties2 ) == sizeof( VkFormatProperties2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FormatProperties2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FormatProperties2 ) == sizeof( VkFormatProperties2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FormatProperties2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FormatProperties2>::value,
+ "FormatProperties2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFormatProperties2>
@@ -23344,9 +31678,109 @@ namespace VULKAN_HPP_NAMESPACE
};
using FormatProperties2KHR = FormatProperties2;
+ struct FormatProperties3
+ {
+ using NativeType = VkFormatProperties3;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFormatProperties3;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ FormatProperties3( VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingFeatures_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingFeatures_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 bufferFeatures_ = {} ) VULKAN_HPP_NOEXCEPT
+ : linearTilingFeatures( linearTilingFeatures_ )
+ , optimalTilingFeatures( optimalTilingFeatures_ )
+ , bufferFeatures( bufferFeatures_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR FormatProperties3( FormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ FormatProperties3( VkFormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : FormatProperties3( *reinterpret_cast<FormatProperties3 const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ FormatProperties3 & operator=( FormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ FormatProperties3 & operator=( VkFormatProperties3 const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::FormatProperties3 const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkFormatProperties3 const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkFormatProperties3 *>( this );
+ }
+
+ explicit operator VkFormatProperties3 &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkFormatProperties3 *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, linearTilingFeatures, optimalTilingFeatures, bufferFeatures );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( FormatProperties3 const & ) const = default;
+#else
+ bool operator==( FormatProperties3 const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( linearTilingFeatures == rhs.linearTilingFeatures ) &&
+ ( optimalTilingFeatures == rhs.optimalTilingFeatures ) && ( bufferFeatures == rhs.bufferFeatures );
+# endif
+ }
+
+ bool operator!=( FormatProperties3 const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eFormatProperties3;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 linearTilingFeatures = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 optimalTilingFeatures = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags2 bufferFeatures = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FormatProperties3 ) == sizeof( VkFormatProperties3 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FormatProperties3>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FormatProperties3>::value,
+ "FormatProperties3 is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eFormatProperties3>
+ {
+ using Type = FormatProperties3;
+ };
+ using FormatProperties3KHR = FormatProperties3;
+
struct FragmentShadingRateAttachmentInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkFragmentShadingRateAttachmentInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eFragmentShadingRateAttachmentInfoKHR;
@@ -23366,8 +31800,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR &
- operator=( FragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FragmentShadingRateAttachmentInfoKHR &
+ operator=( FragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FragmentShadingRateAttachmentInfoKHR &
operator=( VkFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -23377,20 +31811,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FragmentShadingRateAttachmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FragmentShadingRateAttachmentInfoKHR & setPFragmentShadingRateAttachment(
+ VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & setPFragmentShadingRateAttachment(
const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment_ ) VULKAN_HPP_NOEXCEPT
{
pFragmentShadingRateAttachment = pFragmentShadingRateAttachment_;
return *this;
}
- FragmentShadingRateAttachmentInfoKHR & setShadingRateAttachmentTexelSize(
+ VULKAN_HPP_CONSTEXPR_14 FragmentShadingRateAttachmentInfoKHR & setShadingRateAttachmentTexelSize(
VULKAN_HPP_NAMESPACE::Extent2D const & shadingRateAttachmentTexelSize_ ) VULKAN_HPP_NOEXCEPT
{
shadingRateAttachmentTexelSize = shadingRateAttachmentTexelSize_;
@@ -23398,24 +31832,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR *>( this );
}
- operator VkFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFragmentShadingRateAttachmentInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference2 * const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pFragmentShadingRateAttachment, shadingRateAttachmentTexelSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FragmentShadingRateAttachmentInfoKHR const & ) const = default;
#else
bool operator==( FragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( pFragmentShadingRateAttachment == rhs.pFragmentShadingRateAttachment ) &&
( shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize );
+# endif
}
bool operator!=( FragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23430,10 +31883,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pFragmentShadingRateAttachment = {};
VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize = {};
};
- static_assert( sizeof( FragmentShadingRateAttachmentInfoKHR ) == sizeof( VkFragmentShadingRateAttachmentInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FragmentShadingRateAttachmentInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR ) ==
+ sizeof( VkFragmentShadingRateAttachmentInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FragmentShadingRateAttachmentInfoKHR>::value,
+ "FragmentShadingRateAttachmentInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFragmentShadingRateAttachmentInfoKHR>
@@ -23443,8 +31900,10 @@ namespace VULKAN_HPP_NAMESPACE
struct FramebufferAttachmentImageInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentImageInfo;
+ using NativeType = VkFramebufferAttachmentImageInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentImageInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -23490,8 +31949,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo &
- operator=( FramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FramebufferAttachmentImageInfo &
+ operator=( FramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FramebufferAttachmentImageInfo & operator=( VkFramebufferAttachmentImageInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -23500,50 +31959,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FramebufferAttachmentImageInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FramebufferAttachmentImageInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- FramebufferAttachmentImageInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo &
+ setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
{
usage = usage_;
return *this;
}
- FramebufferAttachmentImageInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
{
width = width_;
return *this;
}
- FramebufferAttachmentImageInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
{
height = height_;
return *this;
}
- FramebufferAttachmentImageInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
{
layerCount = layerCount_;
return *this;
}
- FramebufferAttachmentImageInfo & setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo &
+ setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT
{
viewFormatCount = viewFormatCount_;
return *this;
}
- FramebufferAttachmentImageInfo &
- setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentImageInfo &
+ setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT
{
pViewFormats = pViewFormats_;
return *this;
@@ -23561,24 +32023,48 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFramebufferAttachmentImageInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferAttachmentImageInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFramebufferAttachmentImageInfo *>( this );
}
- operator VkFramebufferAttachmentImageInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferAttachmentImageInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFramebufferAttachmentImageInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Format * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, usage, width, height, layerCount, viewFormatCount, pViewFormats );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FramebufferAttachmentImageInfo const & ) const = default;
#else
bool operator==( FramebufferAttachmentImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( usage == rhs.usage ) &&
( width == rhs.width ) && ( height == rhs.height ) && ( layerCount == rhs.layerCount ) &&
( viewFormatCount == rhs.viewFormatCount ) && ( pViewFormats == rhs.pViewFormats );
+# endif
}
bool operator!=( FramebufferAttachmentImageInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23598,10 +32084,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t viewFormatCount = {};
const VULKAN_HPP_NAMESPACE::Format * pViewFormats = {};
};
- static_assert( sizeof( FramebufferAttachmentImageInfo ) == sizeof( VkFramebufferAttachmentImageInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FramebufferAttachmentImageInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo ) ==
+ sizeof( VkFramebufferAttachmentImageInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo>::value,
+ "FramebufferAttachmentImageInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFramebufferAttachmentImageInfo>
@@ -23612,7 +32102,9 @@ namespace VULKAN_HPP_NAMESPACE
struct FramebufferAttachmentsCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkFramebufferAttachmentsCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferAttachmentsCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -23640,8 +32132,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo &
- operator=( FramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FramebufferAttachmentsCreateInfo &
+ operator=( FramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FramebufferAttachmentsCreateInfo & operator=( VkFramebufferAttachmentsCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -23650,20 +32142,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FramebufferAttachmentsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FramebufferAttachmentsCreateInfo &
- setAttachmentImageInfoCount( uint32_t attachmentImageInfoCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo &
+ setAttachmentImageInfoCount( uint32_t attachmentImageInfoCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentImageInfoCount = attachmentImageInfoCount_;
return *this;
}
- FramebufferAttachmentsCreateInfo & setPAttachmentImageInfos(
+ VULKAN_HPP_CONSTEXPR_14 FramebufferAttachmentsCreateInfo & setPAttachmentImageInfos(
const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos_ ) VULKAN_HPP_NOEXCEPT
{
pAttachmentImageInfos = pAttachmentImageInfos_;
@@ -23682,24 +32174,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFramebufferAttachmentsCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferAttachmentsCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFramebufferAttachmentsCreateInfo *>( this );
}
- operator VkFramebufferAttachmentsCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferAttachmentsCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFramebufferAttachmentsCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, attachmentImageInfoCount, pAttachmentImageInfos );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FramebufferAttachmentsCreateInfo const & ) const = default;
#else
bool operator==( FramebufferAttachmentsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( attachmentImageInfoCount == rhs.attachmentImageInfoCount ) &&
( pAttachmentImageInfos == rhs.pAttachmentImageInfos );
+# endif
}
bool operator!=( FramebufferAttachmentsCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23714,10 +32225,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t attachmentImageInfoCount = {};
const VULKAN_HPP_NAMESPACE::FramebufferAttachmentImageInfo * pAttachmentImageInfos = {};
};
- static_assert( sizeof( FramebufferAttachmentsCreateInfo ) == sizeof( VkFramebufferAttachmentsCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FramebufferAttachmentsCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo ) ==
+ sizeof( VkFramebufferAttachmentsCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FramebufferAttachmentsCreateInfo>::value,
+ "FramebufferAttachmentsCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFramebufferAttachmentsCreateInfo>
@@ -23728,8 +32243,10 @@ namespace VULKAN_HPP_NAMESPACE
struct FramebufferCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferCreateInfo;
+ using NativeType = VkFramebufferCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eFramebufferCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR FramebufferCreateInfo( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ = {},
@@ -23773,8 +32290,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo &
- operator=( FramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FramebufferCreateInfo & operator=( FramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FramebufferCreateInfo & operator=( VkFramebufferCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -23783,31 +32299,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- FramebufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- FramebufferCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::FramebufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- FramebufferCreateInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo &
+ setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
{
renderPass = renderPass_;
return *this;
}
- FramebufferCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentCount = attachmentCount_;
return *this;
}
- FramebufferCreateInfo & setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo &
+ setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pAttachments = pAttachments_;
return *this;
@@ -23824,44 +32343,68 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- FramebufferCreateInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
{
width = width_;
return *this;
}
- FramebufferCreateInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
{
height = height_;
return *this;
}
- FramebufferCreateInfo & setLayers( uint32_t layers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 FramebufferCreateInfo & setLayers( uint32_t layers_ ) VULKAN_HPP_NOEXCEPT
{
layers = layers_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkFramebufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFramebufferCreateInfo *>( this );
}
- operator VkFramebufferCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFramebufferCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::FramebufferCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::RenderPass const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageView * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, renderPass, attachmentCount, pAttachments, width, height, layers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FramebufferCreateInfo const & ) const = default;
#else
bool operator==( FramebufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( renderPass == rhs.renderPass ) && ( attachmentCount == rhs.attachmentCount ) &&
( pAttachments == rhs.pAttachments ) && ( width == rhs.width ) && ( height == rhs.height ) &&
( layers == rhs.layers );
+# endif
}
bool operator!=( FramebufferCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23881,9 +32424,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t height = {};
uint32_t layers = {};
};
- static_assert( sizeof( FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FramebufferCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferCreateInfo ) == sizeof( VkFramebufferCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FramebufferCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FramebufferCreateInfo>::value,
+ "FramebufferCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFramebufferCreateInfo>
@@ -23893,7 +32439,9 @@ namespace VULKAN_HPP_NAMESPACE
struct FramebufferMixedSamplesCombinationNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkFramebufferMixedSamplesCombinationNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eFramebufferMixedSamplesCombinationNV;
@@ -23918,8 +32466,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 FramebufferMixedSamplesCombinationNV &
- operator=( FramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ FramebufferMixedSamplesCombinationNV &
+ operator=( FramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
FramebufferMixedSamplesCombinationNV &
operator=( VkFramebufferMixedSamplesCombinationNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -23928,25 +32476,46 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkFramebufferMixedSamplesCombinationNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferMixedSamplesCombinationNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkFramebufferMixedSamplesCombinationNV *>( this );
}
- operator VkFramebufferMixedSamplesCombinationNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkFramebufferMixedSamplesCombinationNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkFramebufferMixedSamplesCombinationNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::CoverageReductionModeNV const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, coverageReductionMode, rasterizationSamples, depthStencilSamples, colorSamples );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( FramebufferMixedSamplesCombinationNV const & ) const = default;
#else
bool operator==( FramebufferMixedSamplesCombinationNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( coverageReductionMode == rhs.coverageReductionMode ) &&
( rasterizationSamples == rhs.rasterizationSamples ) &&
( depthStencilSamples == rhs.depthStencilSamples ) && ( colorSamples == rhs.colorSamples );
+# endif
}
bool operator!=( FramebufferMixedSamplesCombinationNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -23964,10 +32533,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SampleCountFlags depthStencilSamples = {};
VULKAN_HPP_NAMESPACE::SampleCountFlags colorSamples = {};
};
- static_assert( sizeof( FramebufferMixedSamplesCombinationNV ) == sizeof( VkFramebufferMixedSamplesCombinationNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<FramebufferMixedSamplesCombinationNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV ) ==
+ sizeof( VkFramebufferMixedSamplesCombinationNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::FramebufferMixedSamplesCombinationNV>::value,
+ "FramebufferMixedSamplesCombinationNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eFramebufferMixedSamplesCombinationNV>
@@ -23977,6 +32550,8 @@ namespace VULKAN_HPP_NAMESPACE
struct IndirectCommandsStreamNV
{
+ using NativeType = VkIndirectCommandsStreamNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR IndirectCommandsStreamNV( VULKAN_HPP_NAMESPACE::Buffer buffer_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -23991,8 +32566,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV &
- operator=( IndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ IndirectCommandsStreamNV & operator=( IndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
IndirectCommandsStreamNV & operator=( VkIndirectCommandsStreamNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -24001,35 +32575,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- IndirectCommandsStreamNV & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
- IndirectCommandsStreamNV & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsStreamNV &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkIndirectCommandsStreamNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkIndirectCommandsStreamNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkIndirectCommandsStreamNV *>( this );
}
- operator VkIndirectCommandsStreamNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkIndirectCommandsStreamNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkIndirectCommandsStreamNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Buffer const &, VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( buffer, offset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( IndirectCommandsStreamNV const & ) const = default;
#else
bool operator==( IndirectCommandsStreamNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( buffer == rhs.buffer ) && ( offset == rhs.offset );
+# endif
}
bool operator!=( IndirectCommandsStreamNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24042,14 +32634,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Buffer buffer = {};
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
};
- static_assert( sizeof( IndirectCommandsStreamNV ) == sizeof( VkIndirectCommandsStreamNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<IndirectCommandsStreamNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV ) ==
+ sizeof( VkIndirectCommandsStreamNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV>::value,
+ "IndirectCommandsStreamNV is not nothrow_move_constructible!" );
struct GeneratedCommandsInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsInfoNV;
+ using NativeType = VkGeneratedCommandsInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGeneratedCommandsInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR GeneratedCommandsInfoNV(
@@ -24119,8 +32717,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
- operator=( GeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GeneratedCommandsInfoNV & operator=( GeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GeneratedCommandsInfoNV & operator=( VkGeneratedCommandsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -24129,39 +32726,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GeneratedCommandsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT
{
pipelineBindPoint = pipelineBindPoint_;
return *this;
}
- GeneratedCommandsInfoNV & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
+ setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
{
pipeline = pipeline_;
return *this;
}
- GeneratedCommandsInfoNV & setIndirectCommandsLayout(
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setIndirectCommandsLayout(
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT
{
indirectCommandsLayout = indirectCommandsLayout_;
return *this;
}
- GeneratedCommandsInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT
{
streamCount = streamCount_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setPStreams( const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * pStreams_ ) VULKAN_HPP_NOEXCEPT
{
pStreams = pStreams_;
@@ -24179,53 +32777,55 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- GeneratedCommandsInfoNV & setSequencesCount( uint32_t sequencesCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV & setSequencesCount( uint32_t sequencesCount_ ) VULKAN_HPP_NOEXCEPT
{
sequencesCount = sequencesCount_;
return *this;
}
- GeneratedCommandsInfoNV & setPreprocessBuffer( VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
+ setPreprocessBuffer( VULKAN_HPP_NAMESPACE::Buffer preprocessBuffer_ ) VULKAN_HPP_NOEXCEPT
{
preprocessBuffer = preprocessBuffer_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setPreprocessOffset( VULKAN_HPP_NAMESPACE::DeviceSize preprocessOffset_ ) VULKAN_HPP_NOEXCEPT
{
preprocessOffset = preprocessOffset_;
return *this;
}
- GeneratedCommandsInfoNV & setPreprocessSize( VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
+ setPreprocessSize( VULKAN_HPP_NAMESPACE::DeviceSize preprocessSize_ ) VULKAN_HPP_NOEXCEPT
{
preprocessSize = preprocessSize_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setSequencesCountBuffer( VULKAN_HPP_NAMESPACE::Buffer sequencesCountBuffer_ ) VULKAN_HPP_NOEXCEPT
{
sequencesCountBuffer = sequencesCountBuffer_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setSequencesCountOffset( VULKAN_HPP_NAMESPACE::DeviceSize sequencesCountOffset_ ) VULKAN_HPP_NOEXCEPT
{
sequencesCountOffset = sequencesCountOffset_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setSequencesIndexBuffer( VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer_ ) VULKAN_HPP_NOEXCEPT
{
sequencesIndexBuffer = sequencesIndexBuffer_;
return *this;
}
- GeneratedCommandsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsInfoNV &
setSequencesIndexOffset( VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset_ ) VULKAN_HPP_NOEXCEPT
{
sequencesIndexOffset = sequencesIndexOffset_;
@@ -24233,21 +32833,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGeneratedCommandsInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeneratedCommandsInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGeneratedCommandsInfoNV *>( this );
}
- operator VkGeneratedCommandsInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeneratedCommandsInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGeneratedCommandsInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineBindPoint const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::IndirectCommandsStreamNV * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ pipelineBindPoint,
+ pipeline,
+ indirectCommandsLayout,
+ streamCount,
+ pStreams,
+ sequencesCount,
+ preprocessBuffer,
+ preprocessOffset,
+ preprocessSize,
+ sequencesCountBuffer,
+ sequencesCountOffset,
+ sequencesIndexBuffer,
+ sequencesIndexOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GeneratedCommandsInfoNV const & ) const = default;
#else
bool operator==( GeneratedCommandsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) &&
( pipeline == rhs.pipeline ) && ( indirectCommandsLayout == rhs.indirectCommandsLayout ) &&
( streamCount == rhs.streamCount ) && ( pStreams == rhs.pStreams ) &&
@@ -24257,6 +32900,7 @@ namespace VULKAN_HPP_NAMESPACE
( sequencesCountOffset == rhs.sequencesCountOffset ) &&
( sequencesIndexBuffer == rhs.sequencesIndexBuffer ) &&
( sequencesIndexOffset == rhs.sequencesIndexOffset );
+# endif
}
bool operator!=( GeneratedCommandsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24282,9 +32926,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Buffer sequencesIndexBuffer = {};
VULKAN_HPP_NAMESPACE::DeviceSize sequencesIndexOffset = {};
};
- static_assert( sizeof( GeneratedCommandsInfoNV ) == sizeof( VkGeneratedCommandsInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GeneratedCommandsInfoNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV ) ==
+ sizeof( VkGeneratedCommandsInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GeneratedCommandsInfoNV>::value,
+ "GeneratedCommandsInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGeneratedCommandsInfoNV>
@@ -24294,7 +32942,9 @@ namespace VULKAN_HPP_NAMESPACE
struct GeneratedCommandsMemoryRequirementsInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkGeneratedCommandsMemoryRequirementsInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eGeneratedCommandsMemoryRequirementsInfoNV;
@@ -24320,8 +32970,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV &
- operator=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GeneratedCommandsMemoryRequirementsInfoNV &
+ operator=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GeneratedCommandsMemoryRequirementsInfoNV &
operator=( VkGeneratedCommandsMemoryRequirementsInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -24331,58 +32981,81 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GeneratedCommandsMemoryRequirementsInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GeneratedCommandsMemoryRequirementsInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV &
setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT
{
pipelineBindPoint = pipelineBindPoint_;
return *this;
}
- GeneratedCommandsMemoryRequirementsInfoNV &
- setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV &
+ setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
{
pipeline = pipeline_;
return *this;
}
- GeneratedCommandsMemoryRequirementsInfoNV & setIndirectCommandsLayout(
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV & setIndirectCommandsLayout(
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout_ ) VULKAN_HPP_NOEXCEPT
{
indirectCommandsLayout = indirectCommandsLayout_;
return *this;
}
- GeneratedCommandsMemoryRequirementsInfoNV & setMaxSequencesCount( uint32_t maxSequencesCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GeneratedCommandsMemoryRequirementsInfoNV &
+ setMaxSequencesCount( uint32_t maxSequencesCount_ ) VULKAN_HPP_NOEXCEPT
{
maxSequencesCount = maxSequencesCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGeneratedCommandsMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeneratedCommandsMemoryRequirementsInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGeneratedCommandsMemoryRequirementsInfoNV *>( this );
}
- operator VkGeneratedCommandsMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGeneratedCommandsMemoryRequirementsInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGeneratedCommandsMemoryRequirementsInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineBindPoint const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pipelineBindPoint, pipeline, indirectCommandsLayout, maxSequencesCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GeneratedCommandsMemoryRequirementsInfoNV const & ) const = default;
#else
bool operator==( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) &&
( pipeline == rhs.pipeline ) && ( indirectCommandsLayout == rhs.indirectCommandsLayout ) &&
( maxSequencesCount == rhs.maxSequencesCount );
+# endif
}
bool operator!=( GeneratedCommandsMemoryRequirementsInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24399,11 +33072,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutNV indirectCommandsLayout = {};
uint32_t maxSequencesCount = {};
};
- static_assert( sizeof( GeneratedCommandsMemoryRequirementsInfoNV ) ==
- sizeof( VkGeneratedCommandsMemoryRequirementsInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GeneratedCommandsMemoryRequirementsInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV ) ==
+ sizeof( VkGeneratedCommandsMemoryRequirementsInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GeneratedCommandsMemoryRequirementsInfoNV>::value,
+ "GeneratedCommandsMemoryRequirementsInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGeneratedCommandsMemoryRequirementsInfoNV>
@@ -24413,6 +33090,8 @@ namespace VULKAN_HPP_NAMESPACE
struct VertexInputBindingDescription
{
+ using NativeType = VkVertexInputBindingDescription;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
VertexInputBindingDescription( uint32_t binding_ = {},
@@ -24432,8 +33111,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription &
- operator=( VertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VertexInputBindingDescription &
+ operator=( VertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VertexInputBindingDescription & operator=( VkVertexInputBindingDescription const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -24442,41 +33121,58 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VertexInputBindingDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
{
binding = binding_;
return *this;
}
- VertexInputBindingDescription & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
- VertexInputBindingDescription & setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription &
+ setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT
{
inputRate = inputRate_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVertexInputBindingDescription const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputBindingDescription const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVertexInputBindingDescription *>( this );
}
- operator VkVertexInputBindingDescription &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputBindingDescription &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVertexInputBindingDescription *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, VULKAN_HPP_NAMESPACE::VertexInputRate const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( binding, stride, inputRate );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VertexInputBindingDescription const & ) const = default;
#else
bool operator==( VertexInputBindingDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( binding == rhs.binding ) && ( stride == rhs.stride ) && ( inputRate == rhs.inputRate );
+# endif
}
bool operator!=( VertexInputBindingDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24490,13 +33186,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t stride = {};
VULKAN_HPP_NAMESPACE::VertexInputRate inputRate = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex;
};
- static_assert( sizeof( VertexInputBindingDescription ) == sizeof( VkVertexInputBindingDescription ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VertexInputBindingDescription>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription ) ==
+ sizeof( VkVertexInputBindingDescription ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VertexInputBindingDescription>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VertexInputBindingDescription>::value,
+ "VertexInputBindingDescription is not nothrow_move_constructible!" );
struct VertexInputAttributeDescription
{
+ using NativeType = VkVertexInputAttributeDescription;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
VertexInputAttributeDescription( uint32_t location_ = {},
@@ -24517,8 +33219,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription &
- operator=( VertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VertexInputAttributeDescription &
+ operator=( VertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VertexInputAttributeDescription & operator=( VkVertexInputAttributeDescription const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -24527,48 +33229,65 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VertexInputAttributeDescription & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT
{
location = location_;
return *this;
}
- VertexInputAttributeDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
{
binding = binding_;
return *this;
}
- VertexInputAttributeDescription & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- VertexInputAttributeDescription & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVertexInputAttributeDescription const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputAttributeDescription const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVertexInputAttributeDescription *>( this );
}
- operator VkVertexInputAttributeDescription &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputAttributeDescription &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVertexInputAttributeDescription *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, VULKAN_HPP_NAMESPACE::Format const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( location, binding, format, offset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VertexInputAttributeDescription const & ) const = default;
#else
bool operator==( VertexInputAttributeDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( location == rhs.location ) && ( binding == rhs.binding ) && ( format == rhs.format ) &&
( offset == rhs.offset );
+# endif
}
bool operator!=( VertexInputAttributeDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24583,14 +33302,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
uint32_t offset = {};
};
- static_assert( sizeof( VertexInputAttributeDescription ) == sizeof( VkVertexInputAttributeDescription ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VertexInputAttributeDescription>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription ) ==
+ sizeof( VkVertexInputAttributeDescription ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription>::value,
+ "VertexInputAttributeDescription is not nothrow_move_constructible!" );
struct PipelineVertexInputStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineVertexInputStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineVertexInputStateCreateInfo;
@@ -24632,8 +33357,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo &
- operator=( PipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineVertexInputStateCreateInfo &
+ operator=( PipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineVertexInputStateCreateInfo &
operator=( VkPipelineVertexInputStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -24643,27 +33368,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineVertexInputStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineVertexInputStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineVertexInputStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo &
setVertexBindingDescriptionCount( uint32_t vertexBindingDescriptionCount_ ) VULKAN_HPP_NOEXCEPT
{
vertexBindingDescriptionCount = vertexBindingDescriptionCount_;
return *this;
}
- PipelineVertexInputStateCreateInfo & setPVertexBindingDescriptions(
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setPVertexBindingDescriptions(
const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * pVertexBindingDescriptions_ ) VULKAN_HPP_NOEXCEPT
{
pVertexBindingDescriptions = pVertexBindingDescriptions_;
@@ -24681,14 +33406,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PipelineVertexInputStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo &
setVertexAttributeDescriptionCount( uint32_t vertexAttributeDescriptionCount_ ) VULKAN_HPP_NOEXCEPT
{
vertexAttributeDescriptionCount = vertexAttributeDescriptionCount_;
return *this;
}
- PipelineVertexInputStateCreateInfo & setPVertexAttributeDescriptions(
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputStateCreateInfo & setPVertexAttributeDescriptions(
const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions_ ) VULKAN_HPP_NOEXCEPT
{
pVertexAttributeDescriptions = pVertexAttributeDescriptions_;
@@ -24707,26 +33432,54 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineVertexInputStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineVertexInputStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineVertexInputStateCreateInfo *>( this );
}
- operator VkPipelineVertexInputStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineVertexInputStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineVertexInputStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VertexInputBindingDescription * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ vertexBindingDescriptionCount,
+ pVertexBindingDescriptions,
+ vertexAttributeDescriptionCount,
+ pVertexAttributeDescriptions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineVertexInputStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineVertexInputStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( vertexBindingDescriptionCount == rhs.vertexBindingDescriptionCount ) &&
( pVertexBindingDescriptions == rhs.pVertexBindingDescriptions ) &&
( vertexAttributeDescriptionCount == rhs.vertexAttributeDescriptionCount ) &&
( pVertexAttributeDescriptions == rhs.pVertexAttributeDescriptions );
+# endif
}
bool operator!=( PipelineVertexInputStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24744,10 +33497,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t vertexAttributeDescriptionCount = {};
const VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription * pVertexAttributeDescriptions = {};
};
- static_assert( sizeof( PipelineVertexInputStateCreateInfo ) == sizeof( VkPipelineVertexInputStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineVertexInputStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo ) ==
+ sizeof( VkPipelineVertexInputStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo>::value,
+ "PipelineVertexInputStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineVertexInputStateCreateInfo>
@@ -24757,7 +33514,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineInputAssemblyStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineInputAssemblyStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineInputAssemblyStateCreateInfo;
@@ -24779,8 +33538,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo &
- operator=( PipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineInputAssemblyStateCreateInfo &
+ operator=( PipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineInputAssemblyStateCreateInfo &
operator=( VkPipelineInputAssemblyStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -24790,27 +33549,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineInputAssemblyStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineInputAssemblyStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineInputAssemblyStateCreateInfo &
- setTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology topology_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo &
+ setTopology( VULKAN_HPP_NAMESPACE::PrimitiveTopology topology_ ) VULKAN_HPP_NOEXCEPT
{
topology = topology_;
return *this;
}
- PipelineInputAssemblyStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineInputAssemblyStateCreateInfo &
setPrimitiveRestartEnable( VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable_ ) VULKAN_HPP_NOEXCEPT
{
primitiveRestartEnable = primitiveRestartEnable_;
@@ -24818,23 +33577,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineInputAssemblyStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineInputAssemblyStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineInputAssemblyStateCreateInfo *>( this );
}
- operator VkPipelineInputAssemblyStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineInputAssemblyStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineInputAssemblyStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::PrimitiveTopology const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, topology, primitiveRestartEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineInputAssemblyStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineInputAssemblyStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( topology == rhs.topology ) && ( primitiveRestartEnable == rhs.primitiveRestartEnable );
+# endif
}
bool operator!=( PipelineInputAssemblyStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24850,10 +33629,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PrimitiveTopology topology = VULKAN_HPP_NAMESPACE::PrimitiveTopology::ePointList;
VULKAN_HPP_NAMESPACE::Bool32 primitiveRestartEnable = {};
};
- static_assert( sizeof( PipelineInputAssemblyStateCreateInfo ) == sizeof( VkPipelineInputAssemblyStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineInputAssemblyStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo ) ==
+ sizeof( VkPipelineInputAssemblyStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo>::value,
+ "PipelineInputAssemblyStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineInputAssemblyStateCreateInfo>
@@ -24863,7 +33646,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineTessellationStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineTessellationStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineTessellationStateCreateInfo;
@@ -24883,8 +33668,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo &
- operator=( PipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineTessellationStateCreateInfo &
+ operator=( PipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineTessellationStateCreateInfo &
operator=( VkPipelineTessellationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -24894,43 +33679,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineTessellationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineTessellationStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineTessellationStateCreateInfo & setPatchControlPoints( uint32_t patchControlPoints_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineTessellationStateCreateInfo &
+ setPatchControlPoints( uint32_t patchControlPoints_ ) VULKAN_HPP_NOEXCEPT
{
patchControlPoints = patchControlPoints_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineTessellationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineTessellationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineTessellationStateCreateInfo *>( this );
}
- operator VkPipelineTessellationStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineTessellationStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineTessellationStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, patchControlPoints );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineTessellationStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineTessellationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( patchControlPoints == rhs.patchControlPoints );
+# endif
}
bool operator!=( PipelineTessellationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -24945,10 +33750,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateFlags flags = {};
uint32_t patchControlPoints = {};
};
- static_assert( sizeof( PipelineTessellationStateCreateInfo ) == sizeof( VkPipelineTessellationStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineTessellationStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo ) ==
+ sizeof( VkPipelineTessellationStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo>::value,
+ "PipelineTessellationStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineTessellationStateCreateInfo>
@@ -24958,8 +33767,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineViewportStateCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportStateCreateInfo;
+ using NativeType = VkPipelineViewportStateCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineViewportStateCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -24996,8 +33807,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo &
- operator=( PipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineViewportStateCreateInfo &
+ operator=( PipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineViewportStateCreateInfo & operator=( VkPipelineViewportStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -25006,27 +33817,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineViewportStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineViewportStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineViewportStateCreateInfo & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo &
+ setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
{
viewportCount = viewportCount_;
return *this;
}
- PipelineViewportStateCreateInfo &
- setPViewports( const VULKAN_HPP_NAMESPACE::Viewport * pViewports_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo &
+ setPViewports( const VULKAN_HPP_NAMESPACE::Viewport * pViewports_ ) VULKAN_HPP_NOEXCEPT
{
pViewports = pViewports_;
return *this;
@@ -25043,14 +33855,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PipelineViewportStateCreateInfo & setScissorCount( uint32_t scissorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo &
+ setScissorCount( uint32_t scissorCount_ ) VULKAN_HPP_NOEXCEPT
{
scissorCount = scissorCount_;
return *this;
}
- PipelineViewportStateCreateInfo &
- setPScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pScissors_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportStateCreateInfo &
+ setPScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pScissors_ ) VULKAN_HPP_NOEXCEPT
{
pScissors = pScissors_;
return *this;
@@ -25068,24 +33881,46 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineViewportStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineViewportStateCreateInfo *>( this );
}
- operator VkPipelineViewportStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineViewportStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Viewport * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Rect2D * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, viewportCount, pViewports, scissorCount, pScissors );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineViewportStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineViewportStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( viewportCount == rhs.viewportCount ) && ( pViewports == rhs.pViewports ) &&
( scissorCount == rhs.scissorCount ) && ( pScissors == rhs.pScissors );
+# endif
}
bool operator!=( PipelineViewportStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -25103,10 +33938,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t scissorCount = {};
const VULKAN_HPP_NAMESPACE::Rect2D * pScissors = {};
};
- static_assert( sizeof( PipelineViewportStateCreateInfo ) == sizeof( VkPipelineViewportStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineViewportStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo ) ==
+ sizeof( VkPipelineViewportStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo>::value,
+ "PipelineViewportStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineViewportStateCreateInfo>
@@ -25116,7 +33955,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationStateCreateInfo;
@@ -25154,8 +33995,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
- operator=( PipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationStateCreateInfo &
+ operator=( PipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationStateCreateInfo &
operator=( VkPipelineRasterizationStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -25165,102 +34006,143 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
- setDepthClampEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setDepthClampEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClampEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthClampEnable = depthClampEnable_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
setRasterizerDiscardEnable( VULKAN_HPP_NAMESPACE::Bool32 rasterizerDiscardEnable_ ) VULKAN_HPP_NOEXCEPT
{
rasterizerDiscardEnable = rasterizerDiscardEnable_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
- setPolygonMode( VULKAN_HPP_NAMESPACE::PolygonMode polygonMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setPolygonMode( VULKAN_HPP_NAMESPACE::PolygonMode polygonMode_ ) VULKAN_HPP_NOEXCEPT
{
polygonMode = polygonMode_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
- setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setCullMode( VULKAN_HPP_NAMESPACE::CullModeFlags cullMode_ ) VULKAN_HPP_NOEXCEPT
{
cullMode = cullMode_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
- setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setFrontFace( VULKAN_HPP_NAMESPACE::FrontFace frontFace_ ) VULKAN_HPP_NOEXCEPT
{
frontFace = frontFace_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
- setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setDepthBiasEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBiasEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthBiasEnable = depthBiasEnable_;
return *this;
}
- PipelineRasterizationStateCreateInfo &
- setDepthBiasConstantFactor( float depthBiasConstantFactor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setDepthBiasConstantFactor( float depthBiasConstantFactor_ ) VULKAN_HPP_NOEXCEPT
{
depthBiasConstantFactor = depthBiasConstantFactor_;
return *this;
}
- PipelineRasterizationStateCreateInfo & setDepthBiasClamp( float depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setDepthBiasClamp( float depthBiasClamp_ ) VULKAN_HPP_NOEXCEPT
{
depthBiasClamp = depthBiasClamp_;
return *this;
}
- PipelineRasterizationStateCreateInfo & setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo &
+ setDepthBiasSlopeFactor( float depthBiasSlopeFactor_ ) VULKAN_HPP_NOEXCEPT
{
depthBiasSlopeFactor = depthBiasSlopeFactor_;
return *this;
}
- PipelineRasterizationStateCreateInfo & setLineWidth( float lineWidth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateCreateInfo & setLineWidth( float lineWidth_ ) VULKAN_HPP_NOEXCEPT
{
lineWidth = lineWidth_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationStateCreateInfo *>( this );
}
- operator VkPipelineRasterizationStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::PolygonMode const &,
+ VULKAN_HPP_NAMESPACE::CullModeFlags const &,
+ VULKAN_HPP_NAMESPACE::FrontFace const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ depthClampEnable,
+ rasterizerDiscardEnable,
+ polygonMode,
+ cullMode,
+ frontFace,
+ depthBiasEnable,
+ depthBiasConstantFactor,
+ depthBiasClamp,
+ depthBiasSlopeFactor,
+ lineWidth );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineRasterizationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( depthClampEnable == rhs.depthClampEnable ) &&
( rasterizerDiscardEnable == rhs.rasterizerDiscardEnable ) && ( polygonMode == rhs.polygonMode ) &&
@@ -25268,6 +34150,7 @@ namespace VULKAN_HPP_NAMESPACE
( depthBiasEnable == rhs.depthBiasEnable ) && ( depthBiasConstantFactor == rhs.depthBiasConstantFactor ) &&
( depthBiasClamp == rhs.depthBiasClamp ) && ( depthBiasSlopeFactor == rhs.depthBiasSlopeFactor ) &&
( lineWidth == rhs.lineWidth );
+# endif
}
bool operator!=( PipelineRasterizationStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -25291,10 +34174,14 @@ namespace VULKAN_HPP_NAMESPACE
float depthBiasSlopeFactor = {};
float lineWidth = {};
};
- static_assert( sizeof( PipelineRasterizationStateCreateInfo ) == sizeof( VkPipelineRasterizationStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo ) ==
+ sizeof( VkPipelineRasterizationStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo>::value,
+ "PipelineRasterizationStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationStateCreateInfo>
@@ -25304,7 +34191,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineMultisampleStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineMultisampleStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineMultisampleStateCreateInfo;
@@ -25334,8 +34223,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
- operator=( PipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineMultisampleStateCreateInfo &
+ operator=( PipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineMultisampleStateCreateInfo &
operator=( VkPipelineMultisampleStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -25345,81 +34234,114 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineMultisampleStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineMultisampleStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineMultisampleStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
setRasterizationSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits rasterizationSamples_ ) VULKAN_HPP_NOEXCEPT
{
rasterizationSamples = rasterizationSamples_;
return *this;
}
- PipelineMultisampleStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
setSampleShadingEnable( VULKAN_HPP_NAMESPACE::Bool32 sampleShadingEnable_ ) VULKAN_HPP_NOEXCEPT
{
sampleShadingEnable = sampleShadingEnable_;
return *this;
}
- PipelineMultisampleStateCreateInfo & setMinSampleShading( float minSampleShading_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
+ setMinSampleShading( float minSampleShading_ ) VULKAN_HPP_NOEXCEPT
{
minSampleShading = minSampleShading_;
return *this;
}
- PipelineMultisampleStateCreateInfo &
- setPSampleMask( const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
+ setPSampleMask( const VULKAN_HPP_NAMESPACE::SampleMask * pSampleMask_ ) VULKAN_HPP_NOEXCEPT
{
pSampleMask = pSampleMask_;
return *this;
}
- PipelineMultisampleStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
setAlphaToCoverageEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable_ ) VULKAN_HPP_NOEXCEPT
{
alphaToCoverageEnable = alphaToCoverageEnable_;
return *this;
}
- PipelineMultisampleStateCreateInfo &
- setAlphaToOneEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineMultisampleStateCreateInfo &
+ setAlphaToOneEnable( VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable_ ) VULKAN_HPP_NOEXCEPT
{
alphaToOneEnable = alphaToOneEnable_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineMultisampleStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineMultisampleStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineMultisampleStateCreateInfo *>( this );
}
- operator VkPipelineMultisampleStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineMultisampleStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineMultisampleStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ float const &,
+ const VULKAN_HPP_NAMESPACE::SampleMask * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ rasterizationSamples,
+ sampleShadingEnable,
+ minSampleShading,
+ pSampleMask,
+ alphaToCoverageEnable,
+ alphaToOneEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineMultisampleStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineMultisampleStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( rasterizationSamples == rhs.rasterizationSamples ) &&
( sampleShadingEnable == rhs.sampleShadingEnable ) && ( minSampleShading == rhs.minSampleShading ) &&
( pSampleMask == rhs.pSampleMask ) && ( alphaToCoverageEnable == rhs.alphaToCoverageEnable ) &&
( alphaToOneEnable == rhs.alphaToOneEnable );
+# endif
}
bool operator!=( PipelineMultisampleStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -25439,10 +34361,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 alphaToCoverageEnable = {};
VULKAN_HPP_NAMESPACE::Bool32 alphaToOneEnable = {};
};
- static_assert( sizeof( PipelineMultisampleStateCreateInfo ) == sizeof( VkPipelineMultisampleStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineMultisampleStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo ) ==
+ sizeof( VkPipelineMultisampleStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo>::value,
+ "PipelineMultisampleStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineMultisampleStateCreateInfo>
@@ -25452,6 +34378,8 @@ namespace VULKAN_HPP_NAMESPACE
struct StencilOpState
{
+ using NativeType = VkStencilOpState;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
StencilOpState( VULKAN_HPP_NAMESPACE::StencilOp failOp_ = VULKAN_HPP_NAMESPACE::StencilOp::eKeep,
@@ -25477,7 +34405,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 StencilOpState & operator=( StencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ StencilOpState & operator=( StencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT = default;
StencilOpState & operator=( VkStencilOpState const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -25486,67 +34414,91 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- StencilOpState & setFailOp( VULKAN_HPP_NAMESPACE::StencilOp failOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState & setFailOp( VULKAN_HPP_NAMESPACE::StencilOp failOp_ ) VULKAN_HPP_NOEXCEPT
{
failOp = failOp_;
return *this;
}
- StencilOpState & setPassOp( VULKAN_HPP_NAMESPACE::StencilOp passOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState & setPassOp( VULKAN_HPP_NAMESPACE::StencilOp passOp_ ) VULKAN_HPP_NOEXCEPT
{
passOp = passOp_;
return *this;
}
- StencilOpState & setDepthFailOp( VULKAN_HPP_NAMESPACE::StencilOp depthFailOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState &
+ setDepthFailOp( VULKAN_HPP_NAMESPACE::StencilOp depthFailOp_ ) VULKAN_HPP_NOEXCEPT
{
depthFailOp = depthFailOp_;
return *this;
}
- StencilOpState & setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState &
+ setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT
{
compareOp = compareOp_;
return *this;
}
- StencilOpState & setCompareMask( uint32_t compareMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState & setCompareMask( uint32_t compareMask_ ) VULKAN_HPP_NOEXCEPT
{
compareMask = compareMask_;
return *this;
}
- StencilOpState & setWriteMask( uint32_t writeMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState & setWriteMask( uint32_t writeMask_ ) VULKAN_HPP_NOEXCEPT
{
writeMask = writeMask_;
return *this;
}
- StencilOpState & setReference( uint32_t reference_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StencilOpState & setReference( uint32_t reference_ ) VULKAN_HPP_NOEXCEPT
{
reference = reference_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkStencilOpState const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkStencilOpState const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkStencilOpState *>( this );
}
- operator VkStencilOpState &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkStencilOpState &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkStencilOpState *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StencilOp const &,
+ VULKAN_HPP_NAMESPACE::StencilOp const &,
+ VULKAN_HPP_NAMESPACE::StencilOp const &,
+ VULKAN_HPP_NAMESPACE::CompareOp const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( failOp, passOp, depthFailOp, compareOp, compareMask, writeMask, reference );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( StencilOpState const & ) const = default;
#else
bool operator==( StencilOpState const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( failOp == rhs.failOp ) && ( passOp == rhs.passOp ) && ( depthFailOp == rhs.depthFailOp ) &&
( compareOp == rhs.compareOp ) && ( compareMask == rhs.compareMask ) && ( writeMask == rhs.writeMask ) &&
( reference == rhs.reference );
+# endif
}
bool operator!=( StencilOpState const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -25564,12 +34516,18 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t writeMask = {};
uint32_t reference = {};
};
- static_assert( sizeof( StencilOpState ) == sizeof( VkStencilOpState ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<StencilOpState>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StencilOpState ) == sizeof( VkStencilOpState ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::StencilOpState>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::StencilOpState>::value,
+ "StencilOpState is not nothrow_move_constructible!" );
struct PipelineDepthStencilStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineDepthStencilStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineDepthStencilStateCreateInfo;
@@ -25605,8 +34563,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
- operator=( PipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineDepthStencilStateCreateInfo &
+ operator=( PipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineDepthStencilStateCreateInfo &
operator=( VkPipelineDepthStencilStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -25616,101 +34574,141 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineDepthStencilStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
- setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setDepthTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthTestEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthTestEnable = depthTestEnable_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
- setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setDepthWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 depthWriteEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthWriteEnable = depthWriteEnable_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
- setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setDepthCompareOp( VULKAN_HPP_NAMESPACE::CompareOp depthCompareOp_ ) VULKAN_HPP_NOEXCEPT
{
depthCompareOp = depthCompareOp_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
setDepthBoundsTestEnable( VULKAN_HPP_NAMESPACE::Bool32 depthBoundsTestEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthBoundsTestEnable = depthBoundsTestEnable_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
- setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setStencilTestEnable( VULKAN_HPP_NAMESPACE::Bool32 stencilTestEnable_ ) VULKAN_HPP_NOEXCEPT
{
stencilTestEnable = stencilTestEnable_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
- setFront( VULKAN_HPP_NAMESPACE::StencilOpState const & front_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setFront( VULKAN_HPP_NAMESPACE::StencilOpState const & front_ ) VULKAN_HPP_NOEXCEPT
{
front = front_;
return *this;
}
- PipelineDepthStencilStateCreateInfo &
- setBack( VULKAN_HPP_NAMESPACE::StencilOpState const & back_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setBack( VULKAN_HPP_NAMESPACE::StencilOpState const & back_ ) VULKAN_HPP_NOEXCEPT
{
back = back_;
return *this;
}
- PipelineDepthStencilStateCreateInfo & setMinDepthBounds( float minDepthBounds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setMinDepthBounds( float minDepthBounds_ ) VULKAN_HPP_NOEXCEPT
{
minDepthBounds = minDepthBounds_;
return *this;
}
- PipelineDepthStencilStateCreateInfo & setMaxDepthBounds( float maxDepthBounds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDepthStencilStateCreateInfo &
+ setMaxDepthBounds( float maxDepthBounds_ ) VULKAN_HPP_NOEXCEPT
{
maxDepthBounds = maxDepthBounds_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineDepthStencilStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineDepthStencilStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineDepthStencilStateCreateInfo *>( this );
}
- operator VkPipelineDepthStencilStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineDepthStencilStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineDepthStencilStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::CompareOp const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::StencilOpState const &,
+ VULKAN_HPP_NAMESPACE::StencilOpState const &,
+ float const &,
+ float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ depthTestEnable,
+ depthWriteEnable,
+ depthCompareOp,
+ depthBoundsTestEnable,
+ stencilTestEnable,
+ front,
+ back,
+ minDepthBounds,
+ maxDepthBounds );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineDepthStencilStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineDepthStencilStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( depthTestEnable == rhs.depthTestEnable ) && ( depthWriteEnable == rhs.depthWriteEnable ) &&
( depthCompareOp == rhs.depthCompareOp ) && ( depthBoundsTestEnable == rhs.depthBoundsTestEnable ) &&
( stencilTestEnable == rhs.stencilTestEnable ) && ( front == rhs.front ) && ( back == rhs.back ) &&
( minDepthBounds == rhs.minDepthBounds ) && ( maxDepthBounds == rhs.maxDepthBounds );
+# endif
}
bool operator!=( PipelineDepthStencilStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -25733,10 +34731,14 @@ namespace VULKAN_HPP_NAMESPACE
float minDepthBounds = {};
float maxDepthBounds = {};
};
- static_assert( sizeof( PipelineDepthStencilStateCreateInfo ) == sizeof( VkPipelineDepthStencilStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineDepthStencilStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo ) ==
+ sizeof( VkPipelineDepthStencilStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo>::value,
+ "PipelineDepthStencilStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineDepthStencilStateCreateInfo>
@@ -25746,6 +34748,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineColorBlendAttachmentState
{
+ using NativeType = VkPipelineColorBlendAttachmentState;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineColorBlendAttachmentState(
VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ = {},
@@ -25774,8 +34778,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
- operator=( PipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineColorBlendAttachmentState &
+ operator=( PipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineColorBlendAttachmentState & operator=( VkPipelineColorBlendAttachmentState const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -25784,55 +34788,56 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineColorBlendAttachmentState & setBlendEnable( VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
+ setBlendEnable( VULKAN_HPP_NAMESPACE::Bool32 blendEnable_ ) VULKAN_HPP_NOEXCEPT
{
blendEnable = blendEnable_;
return *this;
}
- PipelineColorBlendAttachmentState &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
setSrcColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT
{
srcColorBlendFactor = srcColorBlendFactor_;
return *this;
}
- PipelineColorBlendAttachmentState &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
setDstColorBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstColorBlendFactor_ ) VULKAN_HPP_NOEXCEPT
{
dstColorBlendFactor = dstColorBlendFactor_;
return *this;
}
- PipelineColorBlendAttachmentState &
- setColorBlendOp( VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
+ setColorBlendOp( VULKAN_HPP_NAMESPACE::BlendOp colorBlendOp_ ) VULKAN_HPP_NOEXCEPT
{
colorBlendOp = colorBlendOp_;
return *this;
}
- PipelineColorBlendAttachmentState &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
setSrcAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor srcAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT
{
srcAlphaBlendFactor = srcAlphaBlendFactor_;
return *this;
}
- PipelineColorBlendAttachmentState &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
setDstAlphaBlendFactor( VULKAN_HPP_NAMESPACE::BlendFactor dstAlphaBlendFactor_ ) VULKAN_HPP_NOEXCEPT
{
dstAlphaBlendFactor = dstAlphaBlendFactor_;
return *this;
}
- PipelineColorBlendAttachmentState &
- setAlphaBlendOp( VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
+ setAlphaBlendOp( VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp_ ) VULKAN_HPP_NOEXCEPT
{
alphaBlendOp = alphaBlendOp_;
return *this;
}
- PipelineColorBlendAttachmentState &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAttachmentState &
setColorWriteMask( VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask_ ) VULKAN_HPP_NOEXCEPT
{
colorWriteMask = colorWriteMask_;
@@ -25840,25 +34845,55 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineColorBlendAttachmentState const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorBlendAttachmentState const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineColorBlendAttachmentState *>( this );
}
- operator VkPipelineColorBlendAttachmentState &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorBlendAttachmentState &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineColorBlendAttachmentState *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::BlendFactor const &,
+ VULKAN_HPP_NAMESPACE::BlendFactor const &,
+ VULKAN_HPP_NAMESPACE::BlendOp const &,
+ VULKAN_HPP_NAMESPACE::BlendFactor const &,
+ VULKAN_HPP_NAMESPACE::BlendFactor const &,
+ VULKAN_HPP_NAMESPACE::BlendOp const &,
+ VULKAN_HPP_NAMESPACE::ColorComponentFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( blendEnable,
+ srcColorBlendFactor,
+ dstColorBlendFactor,
+ colorBlendOp,
+ srcAlphaBlendFactor,
+ dstAlphaBlendFactor,
+ alphaBlendOp,
+ colorWriteMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineColorBlendAttachmentState const & ) const = default;
#else
bool operator==( PipelineColorBlendAttachmentState const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( blendEnable == rhs.blendEnable ) && ( srcColorBlendFactor == rhs.srcColorBlendFactor ) &&
( dstColorBlendFactor == rhs.dstColorBlendFactor ) && ( colorBlendOp == rhs.colorBlendOp ) &&
( srcAlphaBlendFactor == rhs.srcAlphaBlendFactor ) && ( dstAlphaBlendFactor == rhs.dstAlphaBlendFactor ) &&
( alphaBlendOp == rhs.alphaBlendOp ) && ( colorWriteMask == rhs.colorWriteMask );
+# endif
}
bool operator!=( PipelineColorBlendAttachmentState const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -25877,14 +34912,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::BlendOp alphaBlendOp = VULKAN_HPP_NAMESPACE::BlendOp::eAdd;
VULKAN_HPP_NAMESPACE::ColorComponentFlags colorWriteMask = {};
};
- static_assert( sizeof( PipelineColorBlendAttachmentState ) == sizeof( VkPipelineColorBlendAttachmentState ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineColorBlendAttachmentState>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState ) ==
+ sizeof( VkPipelineColorBlendAttachmentState ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState>::value,
+ "PipelineColorBlendAttachmentState is not nothrow_move_constructible!" );
struct PipelineColorBlendStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineColorBlendStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineColorBlendStateCreateInfo;
@@ -25929,8 +34970,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo &
- operator=( PipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineColorBlendStateCreateInfo &
+ operator=( PipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineColorBlendStateCreateInfo & operator=( VkPipelineColorBlendStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -25939,39 +34980,41 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineColorBlendStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineColorBlendStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo &
setFlags( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineColorBlendStateCreateInfo &
- setLogicOpEnable( VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo &
+ setLogicOpEnable( VULKAN_HPP_NAMESPACE::Bool32 logicOpEnable_ ) VULKAN_HPP_NOEXCEPT
{
logicOpEnable = logicOpEnable_;
return *this;
}
- PipelineColorBlendStateCreateInfo & setLogicOp( VULKAN_HPP_NAMESPACE::LogicOp logicOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo &
+ setLogicOp( VULKAN_HPP_NAMESPACE::LogicOp logicOp_ ) VULKAN_HPP_NOEXCEPT
{
logicOp = logicOp_;
return *this;
}
- PipelineColorBlendStateCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo &
+ setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentCount = attachmentCount_;
return *this;
}
- PipelineColorBlendStateCreateInfo & setPAttachments(
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo & setPAttachments(
const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pAttachments = pAttachments_;
@@ -25989,32 +35032,56 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PipelineColorBlendStateCreateInfo & setBlendConstants( std::array<float, 4> blendConstants_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendStateCreateInfo &
+ setBlendConstants( std::array<float, 4> blendConstants_ ) VULKAN_HPP_NOEXCEPT
{
blendConstants = blendConstants_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineColorBlendStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorBlendStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineColorBlendStateCreateInfo *>( this );
}
- operator VkPipelineColorBlendStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorBlendStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineColorBlendStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::LogicOp const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 4> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, logicOpEnable, logicOp, attachmentCount, pAttachments, blendConstants );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineColorBlendStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineColorBlendStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( logicOpEnable == rhs.logicOpEnable ) && ( logicOp == rhs.logicOp ) &&
( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) &&
( blendConstants == rhs.blendConstants );
+# endif
}
bool operator!=( PipelineColorBlendStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26033,10 +35100,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::PipelineColorBlendAttachmentState * pAttachments = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 4> blendConstants = {};
};
- static_assert( sizeof( PipelineColorBlendStateCreateInfo ) == sizeof( VkPipelineColorBlendStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineColorBlendStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo ) ==
+ sizeof( VkPipelineColorBlendStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo>::value,
+ "PipelineColorBlendStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineColorBlendStateCreateInfo>
@@ -26046,8 +35117,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineDynamicStateCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDynamicStateCreateInfo;
+ using NativeType = VkPipelineDynamicStateCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineDynamicStateCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineDynamicStateCreateInfo(
@@ -26077,8 +35150,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo &
- operator=( PipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineDynamicStateCreateInfo &
+ operator=( PipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineDynamicStateCreateInfo & operator=( VkPipelineDynamicStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -26087,26 +35160,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineDynamicStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineDynamicStateCreateInfo &
- setFlags( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineDynamicStateCreateInfo & setDynamicStateCount( uint32_t dynamicStateCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo &
+ setDynamicStateCount( uint32_t dynamicStateCount_ ) VULKAN_HPP_NOEXCEPT
{
dynamicStateCount = dynamicStateCount_;
return *this;
}
- PipelineDynamicStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineDynamicStateCreateInfo &
setPDynamicStates( const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates_ ) VULKAN_HPP_NOEXCEPT
{
pDynamicStates = pDynamicStates_;
@@ -26125,23 +35199,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineDynamicStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineDynamicStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineDynamicStateCreateInfo *>( this );
}
- operator VkPipelineDynamicStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineDynamicStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineDynamicStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DynamicState * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, dynamicStateCount, pDynamicStates );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineDynamicStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineDynamicStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( dynamicStateCount == rhs.dynamicStateCount ) && ( pDynamicStates == rhs.pDynamicStates );
+# endif
}
bool operator!=( PipelineDynamicStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26157,10 +35251,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t dynamicStateCount = {};
const VULKAN_HPP_NAMESPACE::DynamicState * pDynamicStates = {};
};
- static_assert( sizeof( PipelineDynamicStateCreateInfo ) == sizeof( VkPipelineDynamicStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineDynamicStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo ) ==
+ sizeof( VkPipelineDynamicStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo>::value,
+ "PipelineDynamicStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineDynamicStateCreateInfo>
@@ -26170,8 +35268,10 @@ namespace VULKAN_HPP_NAMESPACE
struct GraphicsPipelineCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineCreateInfo;
+ using NativeType = VkGraphicsPipelineCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsPipelineCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo(
@@ -26258,8 +35358,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
- operator=( GraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GraphicsPipelineCreateInfo & operator=( GraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GraphicsPipelineCreateInfo & operator=( VkGraphicsPipelineCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -26268,25 +35367,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GraphicsPipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GraphicsPipelineCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- GraphicsPipelineCreateInfo & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
{
stageCount = stageCount_;
return *this;
}
- GraphicsPipelineCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT
{
pStages = pStages_;
@@ -26304,116 +35404,170 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- GraphicsPipelineCreateInfo & setPVertexInputState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPVertexInputState(
const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ ) VULKAN_HPP_NOEXCEPT
{
pVertexInputState = pVertexInputState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPInputAssemblyState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPInputAssemblyState(
const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * pInputAssemblyState_ ) VULKAN_HPP_NOEXCEPT
{
pInputAssemblyState = pInputAssemblyState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPTessellationState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPTessellationState(
const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ ) VULKAN_HPP_NOEXCEPT
{
pTessellationState = pTessellationState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPViewportState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPViewportState(
const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * pViewportState_ ) VULKAN_HPP_NOEXCEPT
{
pViewportState = pViewportState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPRasterizationState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPRasterizationState(
const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * pRasterizationState_ ) VULKAN_HPP_NOEXCEPT
{
pRasterizationState = pRasterizationState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPMultisampleState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPMultisampleState(
const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * pMultisampleState_ ) VULKAN_HPP_NOEXCEPT
{
pMultisampleState = pMultisampleState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPDepthStencilState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPDepthStencilState(
const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * pDepthStencilState_ ) VULKAN_HPP_NOEXCEPT
{
pDepthStencilState = pDepthStencilState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPColorBlendState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPColorBlendState(
const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * pColorBlendState_ ) VULKAN_HPP_NOEXCEPT
{
pColorBlendState = pColorBlendState_;
return *this;
}
- GraphicsPipelineCreateInfo & setPDynamicState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setPDynamicState(
const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ ) VULKAN_HPP_NOEXCEPT
{
pDynamicState = pDynamicState_;
return *this;
}
- GraphicsPipelineCreateInfo & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
+ setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
{
layout = layout_;
return *this;
}
- GraphicsPipelineCreateInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
+ setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
{
renderPass = renderPass_;
return *this;
}
- GraphicsPipelineCreateInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT
{
subpass = subpass_;
return *this;
}
- GraphicsPipelineCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineHandle = basePipelineHandle_;
return *this;
}
- GraphicsPipelineCreateInfo & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineCreateInfo &
+ setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineIndex = basePipelineIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGraphicsPipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGraphicsPipelineCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGraphicsPipelineCreateInfo *>( this );
}
- operator VkGraphicsPipelineCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGraphicsPipelineCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGraphicsPipelineCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineInputAssemblyStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineViewportStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineRasterizationStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineMultisampleStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineDepthStencilStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineColorBlendStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayout const &,
+ VULKAN_HPP_NAMESPACE::RenderPass const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ stageCount,
+ pStages,
+ pVertexInputState,
+ pInputAssemblyState,
+ pTessellationState,
+ pViewportState,
+ pRasterizationState,
+ pMultisampleState,
+ pDepthStencilState,
+ pColorBlendState,
+ pDynamicState,
+ layout,
+ renderPass,
+ subpass,
+ basePipelineHandle,
+ basePipelineIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GraphicsPipelineCreateInfo const & ) const = default;
#else
bool operator==( GraphicsPipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) &&
( pVertexInputState == rhs.pVertexInputState ) && ( pInputAssemblyState == rhs.pInputAssemblyState ) &&
@@ -26423,6 +35577,7 @@ namespace VULKAN_HPP_NAMESPACE
( pDynamicState == rhs.pDynamicState ) && ( layout == rhs.layout ) && ( renderPass == rhs.renderPass ) &&
( subpass == rhs.subpass ) && ( basePipelineHandle == rhs.basePipelineHandle ) &&
( basePipelineIndex == rhs.basePipelineIndex );
+# endif
}
bool operator!=( GraphicsPipelineCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26452,10 +35607,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {};
int32_t basePipelineIndex = {};
};
- static_assert( sizeof( GraphicsPipelineCreateInfo ) == sizeof( VkGraphicsPipelineCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GraphicsPipelineCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo ) ==
+ sizeof( VkGraphicsPipelineCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GraphicsPipelineCreateInfo>::value,
+ "GraphicsPipelineCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGraphicsPipelineCreateInfo>
@@ -26465,8 +35623,10 @@ namespace VULKAN_HPP_NAMESPACE
struct GraphicsShaderGroupCreateInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsShaderGroupCreateInfoNV;
+ using NativeType = VkGraphicsShaderGroupCreateInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eGraphicsShaderGroupCreateInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR GraphicsShaderGroupCreateInfoNV(
@@ -26501,8 +35661,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV &
- operator=( GraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GraphicsShaderGroupCreateInfoNV &
+ operator=( GraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GraphicsShaderGroupCreateInfoNV & operator=( VkGraphicsShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -26511,19 +35671,19 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GraphicsShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GraphicsShaderGroupCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
{
stageCount = stageCount_;
return *this;
}
- GraphicsShaderGroupCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV &
setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT
{
pStages = pStages_;
@@ -26541,14 +35701,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- GraphicsShaderGroupCreateInfoNV & setPVertexInputState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setPVertexInputState(
const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState_ ) VULKAN_HPP_NOEXCEPT
{
pVertexInputState = pVertexInputState_;
return *this;
}
- GraphicsShaderGroupCreateInfoNV & setPTessellationState(
+ VULKAN_HPP_CONSTEXPR_14 GraphicsShaderGroupCreateInfoNV & setPTessellationState(
const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState_ ) VULKAN_HPP_NOEXCEPT
{
pTessellationState = pTessellationState_;
@@ -26556,24 +35716,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGraphicsShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGraphicsShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGraphicsShaderGroupCreateInfoNV *>( this );
}
- operator VkGraphicsShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGraphicsShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGraphicsShaderGroupCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stageCount, pStages, pVertexInputState, pTessellationState );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GraphicsShaderGroupCreateInfoNV const & ) const = default;
#else
bool operator==( GraphicsShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stageCount == rhs.stageCount ) &&
( pStages == rhs.pStages ) && ( pVertexInputState == rhs.pVertexInputState ) &&
( pTessellationState == rhs.pTessellationState );
+# endif
}
bool operator!=( GraphicsShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26590,10 +35771,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::PipelineVertexInputStateCreateInfo * pVertexInputState = {};
const VULKAN_HPP_NAMESPACE::PipelineTessellationStateCreateInfo * pTessellationState = {};
};
- static_assert( sizeof( GraphicsShaderGroupCreateInfoNV ) == sizeof( VkGraphicsShaderGroupCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GraphicsShaderGroupCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV ) ==
+ sizeof( VkGraphicsShaderGroupCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV>::value,
+ "GraphicsShaderGroupCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGraphicsShaderGroupCreateInfoNV>
@@ -26603,7 +35788,9 @@ namespace VULKAN_HPP_NAMESPACE
struct GraphicsPipelineShaderGroupsCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkGraphicsPipelineShaderGroupsCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV;
@@ -26641,8 +35828,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV &
- operator=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ GraphicsPipelineShaderGroupsCreateInfoNV &
+ operator=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
GraphicsPipelineShaderGroupsCreateInfoNV &
operator=( VkGraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -26652,19 +35839,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- GraphicsPipelineShaderGroupsCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- GraphicsPipelineShaderGroupsCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV &
+ setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT
{
groupCount = groupCount_;
return *this;
}
- GraphicsPipelineShaderGroupsCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV &
setPGroups( const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * pGroups_ ) VULKAN_HPP_NOEXCEPT
{
pGroups = pGroups_;
@@ -26682,14 +35871,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- GraphicsPipelineShaderGroupsCreateInfoNV & setPipelineCount( uint32_t pipelineCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV &
+ setPipelineCount( uint32_t pipelineCount_ ) VULKAN_HPP_NOEXCEPT
{
pipelineCount = pipelineCount_;
return *this;
}
- GraphicsPipelineShaderGroupsCreateInfoNV &
- setPPipelines( const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 GraphicsPipelineShaderGroupsCreateInfoNV &
+ setPPipelines( const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines_ ) VULKAN_HPP_NOEXCEPT
{
pPipelines = pPipelines_;
return *this;
@@ -26707,23 +35897,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkGraphicsPipelineShaderGroupsCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkGraphicsPipelineShaderGroupsCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV *>( this );
}
- operator VkGraphicsPipelineShaderGroupsCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkGraphicsPipelineShaderGroupsCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkGraphicsPipelineShaderGroupsCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::GraphicsShaderGroupCreateInfoNV * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Pipeline * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, groupCount, pGroups, pipelineCount, pPipelines );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( GraphicsPipelineShaderGroupsCreateInfoNV const & ) const = default;
#else
bool operator==( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( groupCount == rhs.groupCount ) &&
( pGroups == rhs.pGroups ) && ( pipelineCount == rhs.pipelineCount ) && ( pPipelines == rhs.pPipelines );
+# endif
}
bool operator!=( GraphicsPipelineShaderGroupsCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26740,11 +35951,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t pipelineCount = {};
const VULKAN_HPP_NAMESPACE::Pipeline * pPipelines = {};
};
- static_assert( sizeof( GraphicsPipelineShaderGroupsCreateInfoNV ) ==
- sizeof( VkGraphicsPipelineShaderGroupsCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<GraphicsPipelineShaderGroupsCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV ) ==
+ sizeof( VkGraphicsPipelineShaderGroupsCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::GraphicsPipelineShaderGroupsCreateInfoNV>::value,
+ "GraphicsPipelineShaderGroupsCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eGraphicsPipelineShaderGroupsCreateInfoNV>
@@ -26754,6 +35969,8 @@ namespace VULKAN_HPP_NAMESPACE
struct XYColorEXT
{
+ using NativeType = VkXYColorEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR XYColorEXT( float x_ = {}, float y_ = {} ) VULKAN_HPP_NOEXCEPT
: x( x_ )
@@ -26767,7 +35984,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 XYColorEXT & operator=( XYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ XYColorEXT & operator=( XYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
XYColorEXT & operator=( VkXYColorEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -26776,35 +35993,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- XYColorEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XYColorEXT & setX( float x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- XYColorEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XYColorEXT & setY( float y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkXYColorEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkXYColorEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkXYColorEXT *>( this );
}
- operator VkXYColorEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkXYColorEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkXYColorEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( XYColorEXT const & ) const = default;
#else
bool operator==( XYColorEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y );
+# endif
}
bool operator!=( XYColorEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26817,13 +36050,19 @@ namespace VULKAN_HPP_NAMESPACE
float x = {};
float y = {};
};
- static_assert( sizeof( XYColorEXT ) == sizeof( VkXYColorEXT ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<XYColorEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::XYColorEXT ) == sizeof( VkXYColorEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::XYColorEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::XYColorEXT>::value,
+ "XYColorEXT is not nothrow_move_constructible!" );
struct HdrMetadataEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHdrMetadataEXT;
+ using NativeType = VkHdrMetadataEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHdrMetadataEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR HdrMetadataEXT( VULKAN_HPP_NAMESPACE::XYColorEXT displayPrimaryRed_ = {},
@@ -26851,7 +36090,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & operator=( HdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ HdrMetadataEXT & operator=( HdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
HdrMetadataEXT & operator=( VkHdrMetadataEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -26860,84 +36099,120 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- HdrMetadataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- HdrMetadataEXT &
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT &
setDisplayPrimaryRed( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryRed_ ) VULKAN_HPP_NOEXCEPT
{
displayPrimaryRed = displayPrimaryRed_;
return *this;
}
- HdrMetadataEXT &
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT &
setDisplayPrimaryGreen( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryGreen_ ) VULKAN_HPP_NOEXCEPT
{
displayPrimaryGreen = displayPrimaryGreen_;
return *this;
}
- HdrMetadataEXT &
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT &
setDisplayPrimaryBlue( VULKAN_HPP_NAMESPACE::XYColorEXT const & displayPrimaryBlue_ ) VULKAN_HPP_NOEXCEPT
{
displayPrimaryBlue = displayPrimaryBlue_;
return *this;
}
- HdrMetadataEXT & setWhitePoint( VULKAN_HPP_NAMESPACE::XYColorEXT const & whitePoint_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT &
+ setWhitePoint( VULKAN_HPP_NAMESPACE::XYColorEXT const & whitePoint_ ) VULKAN_HPP_NOEXCEPT
{
whitePoint = whitePoint_;
return *this;
}
- HdrMetadataEXT & setMaxLuminance( float maxLuminance_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxLuminance( float maxLuminance_ ) VULKAN_HPP_NOEXCEPT
{
maxLuminance = maxLuminance_;
return *this;
}
- HdrMetadataEXT & setMinLuminance( float minLuminance_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMinLuminance( float minLuminance_ ) VULKAN_HPP_NOEXCEPT
{
minLuminance = minLuminance_;
return *this;
}
- HdrMetadataEXT & setMaxContentLightLevel( float maxContentLightLevel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT & setMaxContentLightLevel( float maxContentLightLevel_ ) VULKAN_HPP_NOEXCEPT
{
maxContentLightLevel = maxContentLightLevel_;
return *this;
}
- HdrMetadataEXT & setMaxFrameAverageLightLevel( float maxFrameAverageLightLevel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HdrMetadataEXT &
+ setMaxFrameAverageLightLevel( float maxFrameAverageLightLevel_ ) VULKAN_HPP_NOEXCEPT
{
maxFrameAverageLightLevel = maxFrameAverageLightLevel_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkHdrMetadataEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkHdrMetadataEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkHdrMetadataEXT *>( this );
}
- operator VkHdrMetadataEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkHdrMetadataEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkHdrMetadataEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::XYColorEXT const &,
+ VULKAN_HPP_NAMESPACE::XYColorEXT const &,
+ VULKAN_HPP_NAMESPACE::XYColorEXT const &,
+ VULKAN_HPP_NAMESPACE::XYColorEXT const &,
+ float const &,
+ float const &,
+ float const &,
+ float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ displayPrimaryRed,
+ displayPrimaryGreen,
+ displayPrimaryBlue,
+ whitePoint,
+ maxLuminance,
+ minLuminance,
+ maxContentLightLevel,
+ maxFrameAverageLightLevel );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( HdrMetadataEXT const & ) const = default;
#else
bool operator==( HdrMetadataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( displayPrimaryRed == rhs.displayPrimaryRed ) &&
( displayPrimaryGreen == rhs.displayPrimaryGreen ) && ( displayPrimaryBlue == rhs.displayPrimaryBlue ) &&
( whitePoint == rhs.whitePoint ) && ( maxLuminance == rhs.maxLuminance ) &&
( minLuminance == rhs.minLuminance ) && ( maxContentLightLevel == rhs.maxContentLightLevel ) &&
( maxFrameAverageLightLevel == rhs.maxFrameAverageLightLevel );
+# endif
}
bool operator!=( HdrMetadataEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -26958,8 +36233,12 @@ namespace VULKAN_HPP_NAMESPACE
float maxContentLightLevel = {};
float maxFrameAverageLightLevel = {};
};
- static_assert( sizeof( HdrMetadataEXT ) == sizeof( VkHdrMetadataEXT ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<HdrMetadataEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HdrMetadataEXT ) == sizeof( VkHdrMetadataEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::HdrMetadataEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::HdrMetadataEXT>::value,
+ "HdrMetadataEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eHdrMetadataEXT>
@@ -26969,8 +36248,10 @@ namespace VULKAN_HPP_NAMESPACE
struct HeadlessSurfaceCreateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHeadlessSurfaceCreateInfoEXT;
+ using NativeType = VkHeadlessSurfaceCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eHeadlessSurfaceCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR HeadlessSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ = {} )
@@ -26985,8 +36266,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT &
- operator=( HeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ HeadlessSurfaceCreateInfoEXT & operator=( HeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
HeadlessSurfaceCreateInfoEXT & operator=( VkHeadlessSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -26995,36 +36275,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- HeadlessSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- HeadlessSurfaceCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 HeadlessSurfaceCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkHeadlessSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkHeadlessSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkHeadlessSurfaceCreateInfoEXT *>( this );
}
- operator VkHeadlessSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkHeadlessSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkHeadlessSurfaceCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( HeadlessSurfaceCreateInfoEXT const & ) const = default;
#else
bool operator==( HeadlessSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( HeadlessSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27038,10 +36336,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateFlagsEXT flags = {};
};
- static_assert( sizeof( HeadlessSurfaceCreateInfoEXT ) == sizeof( VkHeadlessSurfaceCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<HeadlessSurfaceCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT ) ==
+ sizeof( VkHeadlessSurfaceCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::HeadlessSurfaceCreateInfoEXT>::value,
+ "HeadlessSurfaceCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eHeadlessSurfaceCreateInfoEXT>
@@ -27052,8 +36354,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_IOS_MVK )
struct IOSSurfaceCreateInfoMVK
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIosSurfaceCreateInfoMVK;
+ using NativeType = VkIOSSurfaceCreateInfoMVK;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIosSurfaceCreateInfoMVK;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR IOSSurfaceCreateInfoMVK( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ = {},
@@ -27069,8 +36373,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK &
- operator=( IOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ IOSSurfaceCreateInfoMVK & operator=( IOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default;
IOSSurfaceCreateInfoMVK & operator=( VkIOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -27079,41 +36382,61 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- IOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- IOSSurfaceCreateInfoMVK & setFlags( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK &
+ setFlags( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- IOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT
{
pView = pView_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkIOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkIOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkIOSSurfaceCreateInfoMVK *>( this );
}
- operator VkIOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkIOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkIOSSurfaceCreateInfoMVK *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pView );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( IOSSurfaceCreateInfoMVK const & ) const = default;
# else
bool operator==( IOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pView == rhs.pView );
+# endif
}
bool operator!=( IOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27128,9 +36451,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::IOSSurfaceCreateFlagsMVK flags = {};
const void * pView = {};
};
- static_assert( sizeof( IOSSurfaceCreateInfoMVK ) == sizeof( VkIOSSurfaceCreateInfoMVK ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<IOSSurfaceCreateInfoMVK>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK ) ==
+ sizeof( VkIOSSurfaceCreateInfoMVK ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::IOSSurfaceCreateInfoMVK>::value,
+ "IOSSurfaceCreateInfoMVK is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eIosSurfaceCreateInfoMVK>
@@ -27141,6 +36468,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageBlit
{
+ using NativeType = VkImageBlit;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
ImageBlit( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
@@ -27159,7 +36488,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageBlit & operator=( ImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageBlit & operator=( ImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageBlit & operator=( VkImageBlit const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -27168,50 +36497,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageBlit &
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit &
setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
{
srcSubresource = srcSubresource_;
return *this;
}
- ImageBlit & setSrcOffsets( std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit &
+ setSrcOffsets( std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & srcOffsets_ ) VULKAN_HPP_NOEXCEPT
{
srcOffsets = srcOffsets_;
return *this;
}
- ImageBlit &
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit &
setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
{
dstSubresource = dstSubresource_;
return *this;
}
- ImageBlit & setDstOffsets( std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageBlit &
+ setDstOffsets( std::array<VULKAN_HPP_NAMESPACE::Offset3D, 2> const & dstOffsets_ ) VULKAN_HPP_NOEXCEPT
{
dstOffsets = dstOffsets_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageBlit const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageBlit const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageBlit *>( this );
}
- operator VkImageBlit &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageBlit &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageBlit *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( srcSubresource, srcOffsets, dstSubresource, dstOffsets );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageBlit const & ) const = default;
#else
bool operator==( ImageBlit const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( srcSubresource == rhs.srcSubresource ) && ( srcOffsets == rhs.srcOffsets ) &&
( dstSubresource == rhs.dstSubresource ) && ( dstOffsets == rhs.dstOffsets );
+# endif
}
bool operator!=( ImageBlit const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27226,340 +36576,515 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::Offset3D, 2> dstOffsets = {};
};
- static_assert( sizeof( ImageBlit ) == sizeof( VkImageBlit ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageBlit>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageBlit ) == sizeof( VkImageBlit ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageBlit>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageBlit>::value,
+ "ImageBlit is not nothrow_move_constructible!" );
- struct ImageCopy
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct ImageFormatConstraintsInfoFUCHSIA
{
-#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR ImageCopy( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {},
- VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT
- : srcSubresource( srcSubresource_ )
- , srcOffset( srcOffset_ )
- , dstSubresource( dstSubresource_ )
- , dstOffset( dstOffset_ )
- , extent( extent_ )
+ using NativeType = VkImageFormatConstraintsInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eImageFormatConstraintsInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR ImageFormatConstraintsInfoFUCHSIA(
+ VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo_ = {},
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ = {},
+ VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_ = {},
+ uint64_t sysmemPixelFormat_ = {},
+ uint32_t colorSpaceCount_ = {},
+ const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces_ = {} ) VULKAN_HPP_NOEXCEPT
+ : imageCreateInfo( imageCreateInfo_ )
+ , requiredFormatFeatures( requiredFormatFeatures_ )
+ , flags( flags_ )
+ , sysmemPixelFormat( sysmemPixelFormat_ )
+ , colorSpaceCount( colorSpaceCount_ )
+ , pColorSpaces( pColorSpaces_ )
{}
- VULKAN_HPP_CONSTEXPR ImageCopy( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR
+ ImageFormatConstraintsInfoFUCHSIA( ImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageCopy( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCopy( *reinterpret_cast<ImageCopy const *>( &rhs ) )
+ ImageFormatConstraintsInfoFUCHSIA( VkImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageFormatConstraintsInfoFUCHSIA( *reinterpret_cast<ImageFormatConstraintsInfoFUCHSIA const *>( &rhs ) )
{}
-#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageCopy & operator=( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ ImageFormatConstraintsInfoFUCHSIA(
+ VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo_,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_,
+ VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_,
+ uint64_t sysmemPixelFormat_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA> const &
+ colorSpaces_ )
+ : imageCreateInfo( imageCreateInfo_ )
+ , requiredFormatFeatures( requiredFormatFeatures_ )
+ , flags( flags_ )
+ , sysmemPixelFormat( sysmemPixelFormat_ )
+ , colorSpaceCount( static_cast<uint32_t>( colorSpaces_.size() ) )
+ , pColorSpaces( colorSpaces_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- ImageCopy & operator=( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT
+ ImageFormatConstraintsInfoFUCHSIA &
+ operator=( ImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageFormatConstraintsInfoFUCHSIA & operator=( VkImageFormatConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageCopy const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA const *>( &rhs );
return *this;
}
-#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageCopy &
- setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
- srcSubresource = srcSubresource_;
+ pNext = pNext_;
return *this;
}
- ImageCopy & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA &
+ setImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateInfo const & imageCreateInfo_ ) VULKAN_HPP_NOEXCEPT
{
- srcOffset = srcOffset_;
+ imageCreateInfo = imageCreateInfo_;
return *this;
}
- ImageCopy &
- setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA &
+ setRequiredFormatFeatures( VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures_ ) VULKAN_HPP_NOEXCEPT
{
- dstSubresource = dstSubresource_;
+ requiredFormatFeatures = requiredFormatFeatures_;
return *this;
}
- ImageCopy & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA &
+ setFlags( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT
{
- dstOffset = dstOffset_;
+ flags = flags_;
return *this;
}
- ImageCopy & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA &
+ setSysmemPixelFormat( uint64_t sysmemPixelFormat_ ) VULKAN_HPP_NOEXCEPT
{
- extent = extent_;
+ sysmemPixelFormat = sysmemPixelFormat_;
return *this;
}
-#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageCopy const &() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA &
+ setColorSpaceCount( uint32_t colorSpaceCount_ ) VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkImageCopy *>( this );
+ colorSpaceCount = colorSpaceCount_;
+ return *this;
}
- operator VkImageCopy &() VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatConstraintsInfoFUCHSIA &
+ setPColorSpaces( const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces_ ) VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkImageCopy *>( this );
+ pColorSpaces = pColorSpaces_;
+ return *this;
}
-#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImageCopy const & ) const = default;
-#else
- bool operator==( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ ImageFormatConstraintsInfoFUCHSIA & setColorSpaces(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA> const &
+ colorSpaces_ ) VULKAN_HPP_NOEXCEPT
{
- return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) &&
- ( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent );
+ colorSpaceCount = static_cast<uint32_t>( colorSpaces_.size() );
+ pColorSpaces = colorSpaces_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkImageFormatConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkImageFormatConstraintsInfoFUCHSIA *>( this );
}
- bool operator!=( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkImageFormatConstraintsInfoFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageCreateInfo const &,
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA const &,
+ uint64_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ imageCreateInfo,
+ requiredFormatFeatures,
+ flags,
+ sysmemPixelFormat,
+ colorSpaceCount,
+ pColorSpaces );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( ImageFormatConstraintsInfoFUCHSIA const & ) const = default;
+# else
+ bool operator==( ImageFormatConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageCreateInfo == rhs.imageCreateInfo ) &&
+ ( requiredFormatFeatures == rhs.requiredFormatFeatures ) && ( flags == rhs.flags ) &&
+ ( sysmemPixelFormat == rhs.sysmemPixelFormat ) && ( colorSpaceCount == rhs.colorSpaceCount ) &&
+ ( pColorSpaces == rhs.pColorSpaces );
+# endif
+ }
+
+ bool operator!=( ImageFormatConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
+# endif
public:
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {};
- VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {};
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {};
- VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {};
- VULKAN_HPP_NAMESPACE::Extent3D extent = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageFormatConstraintsInfoFUCHSIA;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::ImageCreateInfo imageCreateInfo = {};
+ VULKAN_HPP_NAMESPACE::FormatFeatureFlags requiredFormatFeatures = {};
+ VULKAN_HPP_NAMESPACE::ImageFormatConstraintsFlagsFUCHSIA flags = {};
+ uint64_t sysmemPixelFormat = {};
+ uint32_t colorSpaceCount = {};
+ const VULKAN_HPP_NAMESPACE::SysmemColorSpaceFUCHSIA * pColorSpaces = {};
};
- static_assert( sizeof( ImageCopy ) == sizeof( VkImageCopy ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageCopy>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA ) ==
+ sizeof( VkImageFormatConstraintsInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA>::value,
+ "ImageFormatConstraintsInfoFUCHSIA is not nothrow_move_constructible!" );
- struct ImageCreateInfo
+ template <>
+ struct CppType<StructureType, StructureType::eImageFormatConstraintsInfoFUCHSIA>
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageCreateInfo;
+ using Type = ImageFormatConstraintsInfoFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
-#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR ImageCreateInfo(
- VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ = {},
- VULKAN_HPP_NAMESPACE::ImageType imageType_ = VULKAN_HPP_NAMESPACE::ImageType::e1D,
- VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
- VULKAN_HPP_NAMESPACE::Extent3D extent_ = {},
- uint32_t mipLevels_ = {},
- uint32_t arrayLayers_ = {},
- VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling_ = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ = {},
- VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive,
- uint32_t queueFamilyIndexCount_ = {},
- const uint32_t * pQueueFamilyIndices_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined )
- VULKAN_HPP_NOEXCEPT
- : flags( flags_ )
- , imageType( imageType_ )
- , format( format_ )
- , extent( extent_ )
- , mipLevels( mipLevels_ )
- , arrayLayers( arrayLayers_ )
- , samples( samples_ )
- , tiling( tiling_ )
- , usage( usage_ )
- , sharingMode( sharingMode_ )
- , queueFamilyIndexCount( queueFamilyIndexCount_ )
- , pQueueFamilyIndices( pQueueFamilyIndices_ )
- , initialLayout( initialLayout_ )
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct ImageConstraintsInfoFUCHSIA
+ {
+ using NativeType = VkImageConstraintsInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageConstraintsInfoFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR ImageConstraintsInfoFUCHSIA(
+ uint32_t formatConstraintsCount_ = {},
+ const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints_ = {},
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {},
+ VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ = {} ) VULKAN_HPP_NOEXCEPT
+ : formatConstraintsCount( formatConstraintsCount_ )
+ , pFormatConstraints( pFormatConstraints_ )
+ , bufferCollectionConstraints( bufferCollectionConstraints_ )
+ , flags( flags_ )
{}
- VULKAN_HPP_CONSTEXPR ImageCreateInfo( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR
+ ImageConstraintsInfoFUCHSIA( ImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageCreateInfo( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
- : ImageCreateInfo( *reinterpret_cast<ImageCreateInfo const *>( &rhs ) )
+ ImageConstraintsInfoFUCHSIA( VkImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageConstraintsInfoFUCHSIA( *reinterpret_cast<ImageConstraintsInfoFUCHSIA const *>( &rhs ) )
{}
-# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- ImageCreateInfo( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_,
- VULKAN_HPP_NAMESPACE::ImageType imageType_,
- VULKAN_HPP_NAMESPACE::Format format_,
- VULKAN_HPP_NAMESPACE::Extent3D extent_,
- uint32_t mipLevels_,
- uint32_t arrayLayers_,
- VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_,
- VULKAN_HPP_NAMESPACE::ImageTiling tiling_,
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_,
- VULKAN_HPP_NAMESPACE::SharingMode sharingMode_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const uint32_t> const & queueFamilyIndices_,
- VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined )
- : flags( flags_ )
- , imageType( imageType_ )
- , format( format_ )
- , extent( extent_ )
- , mipLevels( mipLevels_ )
- , arrayLayers( arrayLayers_ )
- , samples( samples_ )
- , tiling( tiling_ )
- , usage( usage_ )
- , sharingMode( sharingMode_ )
- , queueFamilyIndexCount( static_cast<uint32_t>( queueFamilyIndices_.size() ) )
- , pQueueFamilyIndices( queueFamilyIndices_.data() )
- , initialLayout( initialLayout_ )
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ ImageConstraintsInfoFUCHSIA(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA> const & formatConstraints_,
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints_ = {},
+ VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ = {} )
+ : formatConstraintsCount( static_cast<uint32_t>( formatConstraints_.size() ) )
+ , pFormatConstraints( formatConstraints_.data() )
+ , bufferCollectionConstraints( bufferCollectionConstraints_ )
+ , flags( flags_ )
{}
-# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageCreateInfo & operator=( ImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageConstraintsInfoFUCHSIA & operator=( ImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageCreateInfo & operator=( VkImageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ ImageConstraintsInfoFUCHSIA & operator=( VkImageConstraintsInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageCreateInfo const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA const *>( &rhs );
return *this;
}
-#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA &
+ setFormatConstraintsCount( uint32_t formatConstraintsCount_ ) VULKAN_HPP_NOEXCEPT
{
- flags = flags_;
+ formatConstraintsCount = formatConstraintsCount_;
return *this;
}
- ImageCreateInfo & setImageType( VULKAN_HPP_NAMESPACE::ImageType imageType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setPFormatConstraints(
+ const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints_ ) VULKAN_HPP_NOEXCEPT
{
- imageType = imageType_;
+ pFormatConstraints = pFormatConstraints_;
return *this;
}
- ImageCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ ImageConstraintsInfoFUCHSIA & setFormatConstraints(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA> const & formatConstraints_ ) VULKAN_HPP_NOEXCEPT
{
- format = format_;
+ formatConstraintsCount = static_cast<uint32_t>( formatConstraints_.size() );
+ pFormatConstraints = formatConstraints_.data();
return *this;
}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- ImageCreateInfo & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA & setBufferCollectionConstraints(
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const & bufferCollectionConstraints_ )
+ VULKAN_HPP_NOEXCEPT
{
- extent = extent_;
+ bufferCollectionConstraints = bufferCollectionConstraints_;
return *this;
}
- ImageCreateInfo & setMipLevels( uint32_t mipLevels_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageConstraintsInfoFUCHSIA &
+ setFlags( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT
{
- mipLevels = mipLevels_;
+ flags = flags_;
return *this;
}
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- ImageCreateInfo & setArrayLayers( uint32_t arrayLayers_ ) VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageConstraintsInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
- arrayLayers = arrayLayers_;
- return *this;
+ return *reinterpret_cast<const VkImageConstraintsInfoFUCHSIA *>( this );
}
- ImageCreateInfo & setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageConstraintsInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
- samples = samples_;
- return *this;
+ return *reinterpret_cast<VkImageConstraintsInfoFUCHSIA *>( this );
}
- ImageCreateInfo & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * const &,
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA const &,
+ VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- tiling = tiling_;
- return *this;
+ return std::tie( sType, pNext, formatConstraintsCount, pFormatConstraints, bufferCollectionConstraints, flags );
}
+# endif
- ImageCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( ImageConstraintsInfoFUCHSIA const & ) const = default;
+# else
+ bool operator==( ImageConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- usage = usage_;
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( formatConstraintsCount == rhs.formatConstraintsCount ) &&
+ ( pFormatConstraints == rhs.pFormatConstraints ) &&
+ ( bufferCollectionConstraints == rhs.bufferCollectionConstraints ) && ( flags == rhs.flags );
+# endif
+ }
+
+ bool operator!=( ImageConstraintsInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageConstraintsInfoFUCHSIA;
+ const void * pNext = {};
+ uint32_t formatConstraintsCount = {};
+ const VULKAN_HPP_NAMESPACE::ImageFormatConstraintsInfoFUCHSIA * pFormatConstraints = {};
+ VULKAN_HPP_NAMESPACE::BufferCollectionConstraintsInfoFUCHSIA bufferCollectionConstraints = {};
+ VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFlagsFUCHSIA flags = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA ) ==
+ sizeof( VkImageConstraintsInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageConstraintsInfoFUCHSIA>::value,
+ "ImageConstraintsInfoFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eImageConstraintsInfoFUCHSIA>
+ {
+ using Type = ImageConstraintsInfoFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
+ struct ImageCopy
+ {
+ using NativeType = VkImageCopy;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR ImageCopy( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {},
+ VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT
+ : srcSubresource( srcSubresource_ )
+ , srcOffset( srcOffset_ )
+ , dstSubresource( dstSubresource_ )
+ , dstOffset( dstOffset_ )
+ , extent( extent_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR ImageCopy( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageCopy( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT : ImageCopy( *reinterpret_cast<ImageCopy const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ ImageCopy & operator=( ImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageCopy & operator=( VkImageCopy const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageCopy const *>( &rhs );
return *this;
}
- ImageCreateInfo & setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy &
+ setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
{
- sharingMode = sharingMode_;
+ srcSubresource = srcSubresource_;
return *this;
}
- ImageCreateInfo & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy &
+ setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
{
- queueFamilyIndexCount = queueFamilyIndexCount_;
+ srcOffset = srcOffset_;
return *this;
}
- ImageCreateInfo & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy &
+ setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
{
- pQueueFamilyIndices = pQueueFamilyIndices_;
+ dstSubresource = dstSubresource_;
return *this;
}
-# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- ImageCreateInfo & setQueueFamilyIndices(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const uint32_t> const & queueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy &
+ setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
{
- queueFamilyIndexCount = static_cast<uint32_t>( queueFamilyIndices_.size() );
- pQueueFamilyIndices = queueFamilyIndices_.data();
+ dstOffset = dstOffset_;
return *this;
}
-# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- ImageCreateInfo & setInitialLayout( VULKAN_HPP_NAMESPACE::ImageLayout initialLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageCopy & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
- initialLayout = initialLayout_;
+ extent = extent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageCopy const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkImageCreateInfo *>( this );
+ return *reinterpret_cast<const VkImageCopy *>( this );
}
- operator VkImageCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageCopy &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkImageCreateInfo *>( this );
+ return *reinterpret_cast<VkImageCopy *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( srcSubresource, srcOffset, dstSubresource, dstOffset, extent );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImageCreateInfo const & ) const = default;
+ auto operator<=>( ImageCopy const & ) const = default;
#else
- bool operator==( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
{
- return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
- ( imageType == rhs.imageType ) && ( format == rhs.format ) && ( extent == rhs.extent ) &&
- ( mipLevels == rhs.mipLevels ) && ( arrayLayers == rhs.arrayLayers ) && ( samples == rhs.samples ) &&
- ( tiling == rhs.tiling ) && ( usage == rhs.usage ) && ( sharingMode == rhs.sharingMode ) &&
- ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) &&
- ( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && ( initialLayout == rhs.initialLayout );
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) &&
+ ( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent );
+# endif
}
- bool operator!=( ImageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( ImageCopy const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageCreateInfo;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {};
- VULKAN_HPP_NAMESPACE::ImageType imageType = VULKAN_HPP_NAMESPACE::ImageType::e1D;
- VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
- VULKAN_HPP_NAMESPACE::Extent3D extent = {};
- uint32_t mipLevels = {};
- uint32_t arrayLayers = {};
- VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples = VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1;
- VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal;
- VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {};
- VULKAN_HPP_NAMESPACE::SharingMode sharingMode = VULKAN_HPP_NAMESPACE::SharingMode::eExclusive;
- uint32_t queueFamilyIndexCount = {};
- const uint32_t * pQueueFamilyIndices = {};
- VULKAN_HPP_NAMESPACE::ImageLayout initialLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- };
- static_assert( sizeof( ImageCreateInfo ) == sizeof( VkImageCreateInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageCreateInfo>::value, "struct wrapper is not a standard layout!" );
-
- template <>
- struct CppType<StructureType, StructureType::eImageCreateInfo>
- {
- using Type = ImageCreateInfo;
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {};
+ VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {};
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource = {};
+ VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {};
+ VULKAN_HPP_NAMESPACE::Extent3D extent = {};
};
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageCopy ) == sizeof( VkImageCopy ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageCopy>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageCopy>::value,
+ "ImageCopy is not nothrow_move_constructible!" );
struct SubresourceLayout
{
+ using NativeType = VkSubresourceLayout;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubresourceLayout( VULKAN_HPP_NAMESPACE::DeviceSize offset_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize size_ = {},
@@ -27580,8 +37105,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubresourceLayout &
- operator=( SubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubresourceLayout & operator=( SubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubresourceLayout & operator=( VkSubresourceLayout const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -27589,23 +37113,43 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSubresourceLayout const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubresourceLayout const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubresourceLayout *>( this );
}
- operator VkSubresourceLayout &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubresourceLayout &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubresourceLayout *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( offset, size, rowPitch, arrayPitch, depthPitch );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubresourceLayout const & ) const = default;
#else
bool operator==( SubresourceLayout const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( offset == rhs.offset ) && ( size == rhs.size ) && ( rowPitch == rhs.rowPitch ) &&
( arrayPitch == rhs.arrayPitch ) && ( depthPitch == rhs.depthPitch );
+# endif
}
bool operator!=( SubresourceLayout const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27621,13 +37165,18 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize arrayPitch = {};
VULKAN_HPP_NAMESPACE::DeviceSize depthPitch = {};
};
- static_assert( sizeof( SubresourceLayout ) == sizeof( VkSubresourceLayout ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubresourceLayout>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubresourceLayout ) == sizeof( VkSubresourceLayout ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubresourceLayout>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubresourceLayout>::value,
+ "SubresourceLayout is not nothrow_move_constructible!" );
struct ImageDrmFormatModifierExplicitCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImageDrmFormatModifierExplicitCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT;
@@ -27662,8 +37211,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT &
- operator=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageDrmFormatModifierExplicitCreateInfoEXT &
+ operator=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageDrmFormatModifierExplicitCreateInfoEXT &
operator=( VkImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -27673,27 +37222,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageDrmFormatModifierExplicitCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageDrmFormatModifierExplicitCreateInfoEXT &
- setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT &
+ setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT
{
drmFormatModifier = drmFormatModifier_;
return *this;
}
- ImageDrmFormatModifierExplicitCreateInfoEXT &
- setDrmFormatModifierPlaneCount( uint32_t drmFormatModifierPlaneCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT &
+ setDrmFormatModifierPlaneCount( uint32_t drmFormatModifierPlaneCount_ ) VULKAN_HPP_NOEXCEPT
{
drmFormatModifierPlaneCount = drmFormatModifierPlaneCount_;
return *this;
}
- ImageDrmFormatModifierExplicitCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierExplicitCreateInfoEXT &
setPPlaneLayouts( const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts_ ) VULKAN_HPP_NOEXCEPT
{
pPlaneLayouts = pPlaneLayouts_;
@@ -27712,24 +37262,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageDrmFormatModifierExplicitCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageDrmFormatModifierExplicitCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT *>( this );
}
- operator VkImageDrmFormatModifierExplicitCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageDrmFormatModifierExplicitCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageDrmFormatModifierExplicitCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint64_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SubresourceLayout * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, drmFormatModifier, drmFormatModifierPlaneCount, pPlaneLayouts );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageDrmFormatModifierExplicitCreateInfoEXT const & ) const = default;
#else
bool operator==( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ) &&
( drmFormatModifierPlaneCount == rhs.drmFormatModifierPlaneCount ) &&
( pPlaneLayouts == rhs.pPlaneLayouts );
+# endif
}
bool operator!=( ImageDrmFormatModifierExplicitCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27745,11 +37315,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t drmFormatModifierPlaneCount = {};
const VULKAN_HPP_NAMESPACE::SubresourceLayout * pPlaneLayouts = {};
};
- static_assert( sizeof( ImageDrmFormatModifierExplicitCreateInfoEXT ) ==
- sizeof( VkImageDrmFormatModifierExplicitCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageDrmFormatModifierExplicitCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT ) ==
+ sizeof( VkImageDrmFormatModifierExplicitCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierExplicitCreateInfoEXT>::value,
+ "ImageDrmFormatModifierExplicitCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageDrmFormatModifierExplicitCreateInfoEXT>
@@ -27759,7 +37333,9 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageDrmFormatModifierListCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImageDrmFormatModifierListCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImageDrmFormatModifierListCreateInfoEXT;
@@ -27788,8 +37364,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT &
- operator=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageDrmFormatModifierListCreateInfoEXT &
+ operator=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageDrmFormatModifierListCreateInfoEXT &
operator=( VkImageDrmFormatModifierListCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -27799,21 +37375,22 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageDrmFormatModifierListCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageDrmFormatModifierListCreateInfoEXT &
- setDrmFormatModifierCount( uint32_t drmFormatModifierCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT &
+ setDrmFormatModifierCount( uint32_t drmFormatModifierCount_ ) VULKAN_HPP_NOEXCEPT
{
drmFormatModifierCount = drmFormatModifierCount_;
return *this;
}
- ImageDrmFormatModifierListCreateInfoEXT &
- setPDrmFormatModifiers( const uint64_t * pDrmFormatModifiers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierListCreateInfoEXT &
+ setPDrmFormatModifiers( const uint64_t * pDrmFormatModifiers_ ) VULKAN_HPP_NOEXCEPT
{
pDrmFormatModifiers = pDrmFormatModifiers_;
return *this;
@@ -27830,24 +37407,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageDrmFormatModifierListCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageDrmFormatModifierListCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT *>( this );
}
- operator VkImageDrmFormatModifierListCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageDrmFormatModifierListCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageDrmFormatModifierListCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, drmFormatModifierCount, pDrmFormatModifiers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageDrmFormatModifierListCreateInfoEXT const & ) const = default;
#else
bool operator==( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( drmFormatModifierCount == rhs.drmFormatModifierCount ) &&
( pDrmFormatModifiers == rhs.pDrmFormatModifiers );
+# endif
}
bool operator!=( ImageDrmFormatModifierListCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27862,11 +37458,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t drmFormatModifierCount = {};
const uint64_t * pDrmFormatModifiers = {};
};
- static_assert( sizeof( ImageDrmFormatModifierListCreateInfoEXT ) ==
- sizeof( VkImageDrmFormatModifierListCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageDrmFormatModifierListCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT ) ==
+ sizeof( VkImageDrmFormatModifierListCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierListCreateInfoEXT>::value,
+ "ImageDrmFormatModifierListCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageDrmFormatModifierListCreateInfoEXT>
@@ -27876,7 +37476,9 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageDrmFormatModifierPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImageDrmFormatModifierPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImageDrmFormatModifierPropertiesEXT;
@@ -27893,8 +37495,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageDrmFormatModifierPropertiesEXT &
- operator=( ImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageDrmFormatModifierPropertiesEXT &
+ operator=( ImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageDrmFormatModifierPropertiesEXT &
operator=( VkImageDrmFormatModifierPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -27903,22 +37505,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkImageDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageDrmFormatModifierPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageDrmFormatModifierPropertiesEXT *>( this );
}
- operator VkImageDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageDrmFormatModifierPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageDrmFormatModifierPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, drmFormatModifier );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageDrmFormatModifierPropertiesEXT const & ) const = default;
#else
bool operator==( ImageDrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier );
+# endif
}
bool operator!=( ImageDrmFormatModifierPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -27932,10 +37550,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint64_t drmFormatModifier = {};
};
- static_assert( sizeof( ImageDrmFormatModifierPropertiesEXT ) == sizeof( VkImageDrmFormatModifierPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageDrmFormatModifierPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT ) ==
+ sizeof( VkImageDrmFormatModifierPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageDrmFormatModifierPropertiesEXT>::value,
+ "ImageDrmFormatModifierPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageDrmFormatModifierPropertiesEXT>
@@ -27945,8 +37567,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageFormatListCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatListCreateInfo;
+ using NativeType = VkImageFormatListCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatListCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -27971,8 +37595,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo &
- operator=( ImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageFormatListCreateInfo & operator=( ImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageFormatListCreateInfo & operator=( VkImageFormatListCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -27981,20 +37604,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageFormatListCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageFormatListCreateInfo & setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo &
+ setViewFormatCount( uint32_t viewFormatCount_ ) VULKAN_HPP_NOEXCEPT
{
viewFormatCount = viewFormatCount_;
return *this;
}
- ImageFormatListCreateInfo &
- setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageFormatListCreateInfo &
+ setPViewFormats( const VULKAN_HPP_NAMESPACE::Format * pViewFormats_ ) VULKAN_HPP_NOEXCEPT
{
pViewFormats = pViewFormats_;
return *this;
@@ -28012,23 +37636,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageFormatListCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatListCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageFormatListCreateInfo *>( this );
}
- operator VkImageFormatListCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatListCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageFormatListCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Format * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, viewFormatCount, pViewFormats );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageFormatListCreateInfo const & ) const = default;
#else
bool operator==( ImageFormatListCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewFormatCount == rhs.viewFormatCount ) &&
( pViewFormats == rhs.pViewFormats );
+# endif
}
bool operator!=( ImageFormatListCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28043,10 +37686,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t viewFormatCount = {};
const VULKAN_HPP_NAMESPACE::Format * pViewFormats = {};
};
- static_assert( sizeof( ImageFormatListCreateInfo ) == sizeof( VkImageFormatListCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageFormatListCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo ) ==
+ sizeof( VkImageFormatListCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageFormatListCreateInfo>::value,
+ "ImageFormatListCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageFormatListCreateInfo>
@@ -28057,8 +37703,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageFormatProperties2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatProperties2;
+ using NativeType = VkImageFormatProperties2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageFormatProperties2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageFormatProperties2(
@@ -28073,8 +37721,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageFormatProperties2 &
- operator=( ImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageFormatProperties2 & operator=( ImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageFormatProperties2 & operator=( VkImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28082,22 +37729,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageFormatProperties2 *>( this );
}
- operator VkImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageFormatProperties2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ImageFormatProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageFormatProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageFormatProperties2 const & ) const = default;
#else
bool operator==( ImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageFormatProperties == rhs.imageFormatProperties );
+# endif
}
bool operator!=( ImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28111,9 +37776,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageFormatProperties imageFormatProperties = {};
};
- static_assert( sizeof( ImageFormatProperties2 ) == sizeof( VkImageFormatProperties2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageFormatProperties2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageFormatProperties2 ) ==
+ sizeof( VkImageFormatProperties2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageFormatProperties2>::value,
+ "ImageFormatProperties2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageFormatProperties2>
@@ -28124,8 +37793,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageMemoryBarrier
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier;
+ using NativeType = VkImageMemoryBarrier;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryBarrier;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -28154,8 +37825,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
- operator=( ImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageMemoryBarrier & operator=( ImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageMemoryBarrier & operator=( VkImageMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28164,55 +37834,61 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageMemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- ImageMemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
- ImageMemoryBarrier & setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
+ setOldLayout( VULKAN_HPP_NAMESPACE::ImageLayout oldLayout_ ) VULKAN_HPP_NOEXCEPT
{
oldLayout = oldLayout_;
return *this;
}
- ImageMemoryBarrier & setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
+ setNewLayout( VULKAN_HPP_NAMESPACE::ImageLayout newLayout_ ) VULKAN_HPP_NOEXCEPT
{
newLayout = newLayout_;
return *this;
}
- ImageMemoryBarrier & setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
+ setSrcQueueFamilyIndex( uint32_t srcQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
srcQueueFamilyIndex = srcQueueFamilyIndex_;
return *this;
}
- ImageMemoryBarrier & setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
+ setDstQueueFamilyIndex( uint32_t dstQueueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
dstQueueFamilyIndex = dstQueueFamilyIndex_;
return *this;
}
- ImageMemoryBarrier & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- ImageMemoryBarrier &
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryBarrier &
setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT
{
subresourceRange = subresourceRange_;
@@ -28220,26 +37896,60 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageMemoryBarrier *>( this );
}
- operator VkImageMemoryBarrier &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageMemoryBarrier &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageMemoryBarrier *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceRange const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ srcAccessMask,
+ dstAccessMask,
+ oldLayout,
+ newLayout,
+ srcQueueFamilyIndex,
+ dstQueueFamilyIndex,
+ image,
+ subresourceRange );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageMemoryBarrier const & ) const = default;
#else
bool operator==( ImageMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) &&
( dstAccessMask == rhs.dstAccessMask ) && ( oldLayout == rhs.oldLayout ) &&
( newLayout == rhs.newLayout ) && ( srcQueueFamilyIndex == rhs.srcQueueFamilyIndex ) &&
( dstQueueFamilyIndex == rhs.dstQueueFamilyIndex ) && ( image == rhs.image ) &&
( subresourceRange == rhs.subresourceRange );
+# endif
}
bool operator!=( ImageMemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28260,9 +37970,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Image image = {};
VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {};
};
- static_assert( sizeof( ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageMemoryBarrier>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageMemoryBarrier ) == sizeof( VkImageMemoryBarrier ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageMemoryBarrier>::value,
+ "ImageMemoryBarrier is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageMemoryBarrier>
@@ -28272,8 +37985,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageMemoryRequirementsInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryRequirementsInfo2;
+ using NativeType = VkImageMemoryRequirementsInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageMemoryRequirementsInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageMemoryRequirementsInfo2( VULKAN_HPP_NAMESPACE::Image image_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -28288,8 +38003,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 &
- operator=( ImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageMemoryRequirementsInfo2 & operator=( ImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageMemoryRequirementsInfo2 & operator=( VkImageMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28298,35 +38012,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageMemoryRequirementsInfo2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageMemoryRequirementsInfo2 &
+ setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageMemoryRequirementsInfo2 *>( this );
}
- operator VkImageMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageMemoryRequirementsInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Image const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, image );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageMemoryRequirementsInfo2 const & ) const = default;
#else
bool operator==( ImageMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image );
+# endif
}
bool operator!=( ImageMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28340,10 +38071,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Image image = {};
};
- static_assert( sizeof( ImageMemoryRequirementsInfo2 ) == sizeof( VkImageMemoryRequirementsInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageMemoryRequirementsInfo2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2 ) ==
+ sizeof( VkImageMemoryRequirementsInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageMemoryRequirementsInfo2>::value,
+ "ImageMemoryRequirementsInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageMemoryRequirementsInfo2>
@@ -28355,7 +38090,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
struct ImagePipeSurfaceCreateInfoFUCHSIA
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImagePipeSurfaceCreateInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImagepipeSurfaceCreateInfoFUCHSIA;
@@ -28375,8 +38112,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA &
- operator=( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImagePipeSurfaceCreateInfoFUCHSIA &
+ operator=( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImagePipeSurfaceCreateInfoFUCHSIA & operator=( VkImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28385,39 +38122,68 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImagePipeSurfaceCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImagePipeSurfaceCreateInfoFUCHSIA &
+ VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA &
setFlags( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImagePipeSurfaceCreateInfoFUCHSIA & setImagePipeHandle( zx_handle_t imagePipeHandle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImagePipeSurfaceCreateInfoFUCHSIA &
+ setImagePipeHandle( zx_handle_t imagePipeHandle_ ) VULKAN_HPP_NOEXCEPT
{
imagePipeHandle = imagePipeHandle_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImagePipeSurfaceCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImagePipeSurfaceCreateInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImagePipeSurfaceCreateInfoFUCHSIA *>( this );
}
- operator VkImagePipeSurfaceCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImagePipeSurfaceCreateInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImagePipeSurfaceCreateInfoFUCHSIA *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA const &,
+ zx_handle_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, imagePipeHandle );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImagePipeSurfaceCreateInfoFUCHSIA const & ) const = default;
-# else
+ std::strong_ordering operator<=>( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &imagePipeHandle, &rhs.imagePipeHandle, sizeof( zx_handle_t ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( ImagePipeSurfaceCreateInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
@@ -28428,7 +38194,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImagepipeSurfaceCreateInfoFUCHSIA;
@@ -28436,10 +38201,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateFlagsFUCHSIA flags = {};
zx_handle_t imagePipeHandle = {};
};
- static_assert( sizeof( ImagePipeSurfaceCreateInfoFUCHSIA ) == sizeof( VkImagePipeSurfaceCreateInfoFUCHSIA ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImagePipeSurfaceCreateInfoFUCHSIA>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA ) ==
+ sizeof( VkImagePipeSurfaceCreateInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImagePipeSurfaceCreateInfoFUCHSIA>::value,
+ "ImagePipeSurfaceCreateInfoFUCHSIA is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImagepipeSurfaceCreateInfoFUCHSIA>
@@ -28450,7 +38219,9 @@ namespace VULKAN_HPP_NAMESPACE
struct ImagePlaneMemoryRequirementsInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImagePlaneMemoryRequirementsInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImagePlaneMemoryRequirementsInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -28468,8 +38239,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo &
- operator=( ImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImagePlaneMemoryRequirementsInfo &
+ operator=( ImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImagePlaneMemoryRequirementsInfo & operator=( VkImagePlaneMemoryRequirementsInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28478,36 +38249,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImagePlaneMemoryRequirementsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImagePlaneMemoryRequirementsInfo &
- setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImagePlaneMemoryRequirementsInfo &
+ setPlaneAspect( VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect_ ) VULKAN_HPP_NOEXCEPT
{
planeAspect = planeAspect_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImagePlaneMemoryRequirementsInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImagePlaneMemoryRequirementsInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo *>( this );
}
- operator VkImagePlaneMemoryRequirementsInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImagePlaneMemoryRequirementsInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImagePlaneMemoryRequirementsInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageAspectFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, planeAspect );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImagePlaneMemoryRequirementsInfo const & ) const = default;
#else
bool operator==( ImagePlaneMemoryRequirementsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( planeAspect == rhs.planeAspect );
+# endif
}
bool operator!=( ImagePlaneMemoryRequirementsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28521,10 +38310,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageAspectFlagBits planeAspect = VULKAN_HPP_NAMESPACE::ImageAspectFlagBits::eColor;
};
- static_assert( sizeof( ImagePlaneMemoryRequirementsInfo ) == sizeof( VkImagePlaneMemoryRequirementsInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImagePlaneMemoryRequirementsInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo ) ==
+ sizeof( VkImagePlaneMemoryRequirementsInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImagePlaneMemoryRequirementsInfo>::value,
+ "ImagePlaneMemoryRequirementsInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImagePlaneMemoryRequirementsInfo>
@@ -28535,6 +38328,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageResolve
{
+ using NativeType = VkImageResolve;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageResolve( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
@@ -28555,7 +38350,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageResolve & operator=( ImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageResolve & operator=( ImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageResolve & operator=( VkImageResolve const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28564,56 +38359,79 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageResolve &
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve &
setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
{
srcSubresource = srcSubresource_;
return *this;
}
- ImageResolve & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve &
+ setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
{
srcOffset = srcOffset_;
return *this;
}
- ImageResolve &
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve &
setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
{
dstSubresource = dstSubresource_;
return *this;
}
- ImageResolve & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve &
+ setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
{
dstOffset = dstOffset_;
return *this;
}
- ImageResolve & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve &
+ setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
extent = extent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageResolve const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageResolve const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageResolve *>( this );
}
- operator VkImageResolve &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageResolve &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageResolve *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( srcSubresource, srcOffset, dstSubresource, dstOffset, extent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageResolve const & ) const = default;
#else
bool operator==( ImageResolve const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( srcSubresource == rhs.srcSubresource ) && ( srcOffset == rhs.srcOffset ) &&
( dstSubresource == rhs.dstSubresource ) && ( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent );
+# endif
}
bool operator!=( ImageResolve const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28629,20 +38447,26 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {};
VULKAN_HPP_NAMESPACE::Extent3D extent = {};
};
- static_assert( sizeof( ImageResolve ) == sizeof( VkImageResolve ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageResolve>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageResolve ) == sizeof( VkImageResolve ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageResolve>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageResolve>::value,
+ "ImageResolve is not nothrow_move_constructible!" );
- struct ImageResolve2KHR
+ struct ImageResolve2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageResolve2KHR;
+ using NativeType = VkImageResolve2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageResolve2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR ImageResolve2KHR( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
- VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
- VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {},
- VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR ImageResolve2( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D srcOffset_ = {},
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers dstSubresource_ = {},
+ VULKAN_HPP_NAMESPACE::Offset3D dstOffset_ = {},
+ VULKAN_HPP_NAMESPACE::Extent3D extent_ = {} ) VULKAN_HPP_NOEXCEPT
: srcSubresource( srcSubresource_ )
, srcOffset( srcOffset_ )
, dstSubresource( dstSubresource_ )
@@ -28650,89 +38474,114 @@ namespace VULKAN_HPP_NAMESPACE
, extent( extent_ )
{}
- VULKAN_HPP_CONSTEXPR ImageResolve2KHR( ImageResolve2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR ImageResolve2( ImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageResolve2KHR( VkImageResolve2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : ImageResolve2KHR( *reinterpret_cast<ImageResolve2KHR const *>( &rhs ) )
+ ImageResolve2( VkImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageResolve2( *reinterpret_cast<ImageResolve2 const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageResolve2KHR & operator=( ImageResolve2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageResolve2 & operator=( ImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ImageResolve2KHR & operator=( VkImageResolve2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ ImageResolve2 & operator=( VkImageResolve2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageResolve2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageResolve2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageResolve2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageResolve2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve2 &
setSrcSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & srcSubresource_ ) VULKAN_HPP_NOEXCEPT
{
srcSubresource = srcSubresource_;
return *this;
}
- ImageResolve2KHR & setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve2 &
+ setSrcOffset( VULKAN_HPP_NAMESPACE::Offset3D const & srcOffset_ ) VULKAN_HPP_NOEXCEPT
{
srcOffset = srcOffset_;
return *this;
}
- ImageResolve2KHR &
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve2 &
setDstSubresource( VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const & dstSubresource_ ) VULKAN_HPP_NOEXCEPT
{
dstSubresource = dstSubresource_;
return *this;
}
- ImageResolve2KHR & setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve2 &
+ setDstOffset( VULKAN_HPP_NAMESPACE::Offset3D const & dstOffset_ ) VULKAN_HPP_NOEXCEPT
{
dstOffset = dstOffset_;
return *this;
}
- ImageResolve2KHR & setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageResolve2 &
+ setExtent( VULKAN_HPP_NAMESPACE::Extent3D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
extent = extent_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageResolve2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageResolve2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkImageResolve2KHR *>( this );
+ return *reinterpret_cast<const VkImageResolve2 *>( this );
}
- operator VkImageResolve2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageResolve2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkImageResolve2KHR *>( this );
+ return *reinterpret_cast<VkImageResolve2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceLayers const &,
+ VULKAN_HPP_NAMESPACE::Offset3D const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcSubresource, srcOffset, dstSubresource, dstOffset, extent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImageResolve2KHR const & ) const = default;
+ auto operator<=>( ImageResolve2 const & ) const = default;
#else
- bool operator==( ImageResolve2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( ImageResolve2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubresource == rhs.srcSubresource ) &&
( srcOffset == rhs.srcOffset ) && ( dstSubresource == rhs.dstSubresource ) &&
( dstOffset == rhs.dstOffset ) && ( extent == rhs.extent );
+# endif
}
- bool operator!=( ImageResolve2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( ImageResolve2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageResolve2KHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageResolve2;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageSubresourceLayers srcSubresource = {};
VULKAN_HPP_NAMESPACE::Offset3D srcOffset = {};
@@ -28740,19 +38589,25 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset3D dstOffset = {};
VULKAN_HPP_NAMESPACE::Extent3D extent = {};
};
- static_assert( sizeof( ImageResolve2KHR ) == sizeof( VkImageResolve2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageResolve2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageResolve2 ) == sizeof( VkImageResolve2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageResolve2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageResolve2>::value,
+ "ImageResolve2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eImageResolve2KHR>
+ struct CppType<StructureType, StructureType::eImageResolve2>
{
- using Type = ImageResolve2KHR;
+ using Type = ImageResolve2;
};
+ using ImageResolve2KHR = ImageResolve2;
struct ImageSparseMemoryRequirementsInfo2
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImageSparseMemoryRequirementsInfo2;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImageSparseMemoryRequirementsInfo2;
@@ -28770,8 +38625,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 &
- operator=( ImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageSparseMemoryRequirementsInfo2 &
+ operator=( ImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageSparseMemoryRequirementsInfo2 &
operator=( VkImageSparseMemoryRequirementsInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -28781,35 +38636,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageSparseMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageSparseMemoryRequirementsInfo2 & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSparseMemoryRequirementsInfo2 &
+ setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageSparseMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSparseMemoryRequirementsInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageSparseMemoryRequirementsInfo2 *>( this );
}
- operator VkImageSparseMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSparseMemoryRequirementsInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageSparseMemoryRequirementsInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Image const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, image );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageSparseMemoryRequirementsInfo2 const & ) const = default;
#else
bool operator==( ImageSparseMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image );
+# endif
}
bool operator!=( ImageSparseMemoryRequirementsInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28823,10 +38695,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Image image = {};
};
- static_assert( sizeof( ImageSparseMemoryRequirementsInfo2 ) == sizeof( VkImageSparseMemoryRequirementsInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageSparseMemoryRequirementsInfo2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2 ) ==
+ sizeof( VkImageSparseMemoryRequirementsInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageSparseMemoryRequirementsInfo2>::value,
+ "ImageSparseMemoryRequirementsInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageSparseMemoryRequirementsInfo2>
@@ -28837,8 +38713,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageStencilUsageCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageStencilUsageCreateInfo;
+ using NativeType = VkImageStencilUsageCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageStencilUsageCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -28854,8 +38732,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo &
- operator=( ImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageStencilUsageCreateInfo & operator=( ImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageStencilUsageCreateInfo & operator=( VkImageStencilUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28864,36 +38741,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageStencilUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageStencilUsageCreateInfo &
- setStencilUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageStencilUsageCreateInfo &
+ setStencilUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage_ ) VULKAN_HPP_NOEXCEPT
{
stencilUsage = stencilUsage_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageStencilUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageStencilUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageStencilUsageCreateInfo *>( this );
}
- operator VkImageStencilUsageCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageStencilUsageCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageStencilUsageCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stencilUsage );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageStencilUsageCreateInfo const & ) const = default;
#else
bool operator==( ImageStencilUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stencilUsage == rhs.stencilUsage );
+# endif
}
bool operator!=( ImageStencilUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28907,10 +38802,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageUsageFlags stencilUsage = {};
};
- static_assert( sizeof( ImageStencilUsageCreateInfo ) == sizeof( VkImageStencilUsageCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageStencilUsageCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo ) ==
+ sizeof( VkImageStencilUsageCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageStencilUsageCreateInfo>::value,
+ "ImageStencilUsageCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageStencilUsageCreateInfo>
@@ -28921,8 +38820,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageSwapchainCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSwapchainCreateInfoKHR;
+ using NativeType = VkImageSwapchainCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageSwapchainCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -28938,8 +38839,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR &
- operator=( ImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageSwapchainCreateInfoKHR & operator=( ImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageSwapchainCreateInfoKHR & operator=( VkImageSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -28948,35 +38848,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageSwapchainCreateInfoKHR & setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageSwapchainCreateInfoKHR &
+ setSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain_ ) VULKAN_HPP_NOEXCEPT
{
swapchain = swapchain_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageSwapchainCreateInfoKHR *>( this );
}
- operator VkImageSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageSwapchainCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SwapchainKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchain );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageSwapchainCreateInfoKHR const & ) const = default;
#else
bool operator==( ImageSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchain == rhs.swapchain );
+# endif
}
bool operator!=( ImageSwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -28990,10 +38909,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::SwapchainKHR swapchain = {};
};
- static_assert( sizeof( ImageSwapchainCreateInfoKHR ) == sizeof( VkImageSwapchainCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageSwapchainCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR ) ==
+ sizeof( VkImageSwapchainCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageSwapchainCreateInfoKHR>::value,
+ "ImageSwapchainCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageSwapchainCreateInfoKHR>
@@ -29003,8 +38926,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageViewASTCDecodeModeEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAstcDecodeModeEXT;
+ using NativeType = VkImageViewASTCDecodeModeEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAstcDecodeModeEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageViewASTCDecodeModeEXT(
@@ -29020,8 +38945,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT &
- operator=( ImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageViewASTCDecodeModeEXT & operator=( ImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageViewASTCDecodeModeEXT & operator=( VkImageViewASTCDecodeModeEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29030,35 +38954,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageViewASTCDecodeModeEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageViewASTCDecodeModeEXT & setDecodeMode( VULKAN_HPP_NAMESPACE::Format decodeMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewASTCDecodeModeEXT &
+ setDecodeMode( VULKAN_HPP_NAMESPACE::Format decodeMode_ ) VULKAN_HPP_NOEXCEPT
{
decodeMode = decodeMode_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageViewASTCDecodeModeEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewASTCDecodeModeEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageViewASTCDecodeModeEXT *>( this );
}
- operator VkImageViewASTCDecodeModeEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewASTCDecodeModeEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageViewASTCDecodeModeEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Format const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, decodeMode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageViewASTCDecodeModeEXT const & ) const = default;
#else
bool operator==( ImageViewASTCDecodeModeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( decodeMode == rhs.decodeMode );
+# endif
}
bool operator!=( ImageViewASTCDecodeModeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29072,10 +39013,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Format decodeMode = VULKAN_HPP_NAMESPACE::Format::eUndefined;
};
- static_assert( sizeof( ImageViewASTCDecodeModeEXT ) == sizeof( VkImageViewASTCDecodeModeEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageViewASTCDecodeModeEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT ) ==
+ sizeof( VkImageViewASTCDecodeModeEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageViewASTCDecodeModeEXT>::value,
+ "ImageViewASTCDecodeModeEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageViewAstcDecodeModeEXT>
@@ -29085,8 +39029,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageViewAddressPropertiesNVX
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAddressPropertiesNVX;
+ using NativeType = VkImageViewAddressPropertiesNVX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewAddressPropertiesNVX;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -29104,8 +39050,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageViewAddressPropertiesNVX &
- operator=( ImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageViewAddressPropertiesNVX &
+ operator=( ImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageViewAddressPropertiesNVX & operator=( VkImageViewAddressPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29113,23 +39059,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkImageViewAddressPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewAddressPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageViewAddressPropertiesNVX *>( this );
}
- operator VkImageViewAddressPropertiesNVX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewAddressPropertiesNVX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageViewAddressPropertiesNVX *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceAddress const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceAddress, size );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageViewAddressPropertiesNVX const & ) const = default;
#else
bool operator==( ImageViewAddressPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceAddress == rhs.deviceAddress ) &&
( size == rhs.size );
+# endif
}
bool operator!=( ImageViewAddressPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29144,10 +39109,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress = {};
VULKAN_HPP_NAMESPACE::DeviceSize size = {};
};
- static_assert( sizeof( ImageViewAddressPropertiesNVX ) == sizeof( VkImageViewAddressPropertiesNVX ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageViewAddressPropertiesNVX>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX ) ==
+ sizeof( VkImageViewAddressPropertiesNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageViewAddressPropertiesNVX>::value,
+ "ImageViewAddressPropertiesNVX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageViewAddressPropertiesNVX>
@@ -29157,8 +39126,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageViewCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewCreateInfo;
+ using NativeType = VkImageViewCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -29183,8 +39154,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo &
- operator=( ImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageViewCreateInfo & operator=( ImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageViewCreateInfo & operator=( VkImageViewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29193,44 +39163,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageViewCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::ImageViewCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImageViewCreateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- ImageViewCreateInfo & setViewType( VULKAN_HPP_NAMESPACE::ImageViewType viewType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo &
+ setViewType( VULKAN_HPP_NAMESPACE::ImageViewType viewType_ ) VULKAN_HPP_NOEXCEPT
{
viewType = viewType_;
return *this;
}
- ImageViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- ImageViewCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo &
setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT
{
components = components_;
return *this;
}
- ImageViewCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 ImageViewCreateInfo &
setSubresourceRange( VULKAN_HPP_NAMESPACE::ImageSubresourceRange const & subresourceRange_ ) VULKAN_HPP_NOEXCEPT
{
subresourceRange = subresourceRange_;
@@ -29238,24 +39210,47 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageViewCreateInfo *>( this );
}
- operator VkImageViewCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageViewCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageViewCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageViewType const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::ComponentMapping const &,
+ VULKAN_HPP_NAMESPACE::ImageSubresourceRange const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, image, viewType, format, components, subresourceRange );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageViewCreateInfo const & ) const = default;
#else
bool operator==( ImageViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( image == rhs.image ) &&
( viewType == rhs.viewType ) && ( format == rhs.format ) && ( components == rhs.components ) &&
( subresourceRange == rhs.subresourceRange );
+# endif
}
bool operator!=( ImageViewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29274,9 +39269,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ComponentMapping components = {};
VULKAN_HPP_NAMESPACE::ImageSubresourceRange subresourceRange = {};
};
- static_assert( sizeof( ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageViewCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewCreateInfo ) == sizeof( VkImageViewCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageViewCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageViewCreateInfo>::value,
+ "ImageViewCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageViewCreateInfo>
@@ -29286,8 +39284,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImageViewHandleInfoNVX
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewHandleInfoNVX;
+ using NativeType = VkImageViewHandleInfoNVX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewHandleInfoNVX;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImageViewHandleInfoNVX(
@@ -29306,8 +39306,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX &
- operator=( ImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageViewHandleInfoNVX & operator=( ImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageViewHandleInfoNVX & operator=( VkImageViewHandleInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29316,49 +39315,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageViewHandleInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageViewHandleInfoNVX & setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX &
+ setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
{
imageView = imageView_;
return *this;
}
- ImageViewHandleInfoNVX &
+ VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX &
setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT
{
descriptorType = descriptorType_;
return *this;
}
- ImageViewHandleInfoNVX & setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewHandleInfoNVX &
+ setSampler( VULKAN_HPP_NAMESPACE::Sampler sampler_ ) VULKAN_HPP_NOEXCEPT
{
sampler = sampler_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageViewHandleInfoNVX const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewHandleInfoNVX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageViewHandleInfoNVX *>( this );
}
- operator VkImageViewHandleInfoNVX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewHandleInfoNVX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageViewHandleInfoNVX *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &,
+ VULKAN_HPP_NAMESPACE::DescriptorType const &,
+ VULKAN_HPP_NAMESPACE::Sampler const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageView, descriptorType, sampler );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageViewHandleInfoNVX const & ) const = default;
#else
bool operator==( ImageViewHandleInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) &&
( descriptorType == rhs.descriptorType ) && ( sampler == rhs.sampler );
+# endif
}
bool operator!=( ImageViewHandleInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29374,9 +39395,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DescriptorType descriptorType = VULKAN_HPP_NAMESPACE::DescriptorType::eSampler;
VULKAN_HPP_NAMESPACE::Sampler sampler = {};
};
- static_assert( sizeof( ImageViewHandleInfoNVX ) == sizeof( VkImageViewHandleInfoNVX ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageViewHandleInfoNVX>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX ) ==
+ sizeof( VkImageViewHandleInfoNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageViewHandleInfoNVX>::value,
+ "ImageViewHandleInfoNVX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageViewHandleInfoNVX>
@@ -29384,10 +39409,112 @@ namespace VULKAN_HPP_NAMESPACE
using Type = ImageViewHandleInfoNVX;
};
+ struct ImageViewMinLodCreateInfoEXT
+ {
+ using NativeType = VkImageViewMinLodCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewMinLodCreateInfoEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR ImageViewMinLodCreateInfoEXT( float minLod_ = {} ) VULKAN_HPP_NOEXCEPT : minLod( minLod_ ) {}
+
+ VULKAN_HPP_CONSTEXPR
+ ImageViewMinLodCreateInfoEXT( ImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageViewMinLodCreateInfoEXT( VkImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImageViewMinLodCreateInfoEXT( *reinterpret_cast<ImageViewMinLodCreateInfoEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ ImageViewMinLodCreateInfoEXT & operator=( ImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImageViewMinLodCreateInfoEXT & operator=( VkImageViewMinLodCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 ImageViewMinLodCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImageViewMinLodCreateInfoEXT & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minLod = minLod_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkImageViewMinLodCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkImageViewMinLodCreateInfoEXT *>( this );
+ }
+
+ explicit operator VkImageViewMinLodCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkImageViewMinLodCreateInfoEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, minLod );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( ImageViewMinLodCreateInfoEXT const & ) const = default;
+#else
+ bool operator==( ImageViewMinLodCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minLod == rhs.minLod );
+# endif
+ }
+
+ bool operator!=( ImageViewMinLodCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImageViewMinLodCreateInfoEXT;
+ const void * pNext = {};
+ float minLod = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT ) ==
+ sizeof( VkImageViewMinLodCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageViewMinLodCreateInfoEXT>::value,
+ "ImageViewMinLodCreateInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eImageViewMinLodCreateInfoEXT>
+ {
+ using Type = ImageViewMinLodCreateInfoEXT;
+ };
+
struct ImageViewUsageCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewUsageCreateInfo;
+ using NativeType = VkImageViewUsageCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImageViewUsageCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -29402,8 +39529,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo &
- operator=( ImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImageViewUsageCreateInfo & operator=( ImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImageViewUsageCreateInfo & operator=( VkImageViewUsageCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29412,35 +39538,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImageViewUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImageViewUsageCreateInfo & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImageViewUsageCreateInfo &
+ setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
{
usage = usage_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImageViewUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewUsageCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImageViewUsageCreateInfo *>( this );
}
- operator VkImageViewUsageCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImageViewUsageCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImageViewUsageCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, usage );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImageViewUsageCreateInfo const & ) const = default;
#else
bool operator==( ImageViewUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( usage == rhs.usage );
+# endif
}
bool operator!=( ImageViewUsageCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29454,9 +39599,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {};
};
- static_assert( sizeof( ImageViewUsageCreateInfo ) == sizeof( VkImageViewUsageCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImageViewUsageCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo ) ==
+ sizeof( VkImageViewUsageCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImageViewUsageCreateInfo>::value,
+ "ImageViewUsageCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImageViewUsageCreateInfo>
@@ -29468,7 +39617,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct ImportAndroidHardwareBufferInfoANDROID
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImportAndroidHardwareBufferInfoANDROID;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImportAndroidHardwareBufferInfoANDROID;
@@ -29487,8 +39638,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID &
- operator=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportAndroidHardwareBufferInfoANDROID &
+ operator=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportAndroidHardwareBufferInfoANDROID &
operator=( VkImportAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -29498,35 +39649,52 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportAndroidHardwareBufferInfoANDROID & setBuffer( struct AHardwareBuffer * buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportAndroidHardwareBufferInfoANDROID &
+ setBuffer( struct AHardwareBuffer * buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID *>( this );
}
- operator VkImportAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, struct AHardwareBuffer * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, buffer );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportAndroidHardwareBufferInfoANDROID const & ) const = default;
# else
bool operator==( ImportAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( buffer == rhs.buffer );
+# endif
}
bool operator!=( ImportAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29540,10 +39708,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
struct AHardwareBuffer * buffer = {};
};
- static_assert( sizeof( ImportAndroidHardwareBufferInfoANDROID ) == sizeof( VkImportAndroidHardwareBufferInfoANDROID ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportAndroidHardwareBufferInfoANDROID>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID ) ==
+ sizeof( VkImportAndroidHardwareBufferInfoANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportAndroidHardwareBufferInfoANDROID>::value,
+ "ImportAndroidHardwareBufferInfoANDROID is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportAndroidHardwareBufferInfoANDROID>
@@ -29554,8 +39727,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImportFenceFdInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceFdInfoKHR;
+ using NativeType = VkImportFenceFdInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceFdInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImportFenceFdInfoKHR( VULKAN_HPP_NAMESPACE::Fence fence_ = {},
@@ -29576,8 +39751,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR &
- operator=( ImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportFenceFdInfoKHR & operator=( ImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportFenceFdInfoKHR & operator=( VkImportFenceFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29586,55 +39760,77 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportFenceFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportFenceFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
{
fence = fence_;
return *this;
}
- ImportFenceFdInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImportFenceFdInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportFenceFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT
{
fd = fd_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportFenceFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportFenceFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportFenceFdInfoKHR *>( this );
}
- operator VkImportFenceFdInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportFenceFdInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportFenceFdInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Fence const &,
+ VULKAN_HPP_NAMESPACE::FenceImportFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits const &,
+ int const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fence, flags, handleType, fd );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportFenceFdInfoKHR const & ) const = default;
#else
bool operator==( ImportFenceFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( flags == rhs.flags ) &&
( handleType == rhs.handleType ) && ( fd == rhs.fd );
+# endif
}
bool operator!=( ImportFenceFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29652,9 +39848,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd;
int fd = {};
};
- static_assert( sizeof( ImportFenceFdInfoKHR ) == sizeof( VkImportFenceFdInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportFenceFdInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR ) == sizeof( VkImportFenceFdInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportFenceFdInfoKHR>::value,
+ "ImportFenceFdInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportFenceFdInfoKHR>
@@ -29665,8 +39864,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ImportFenceWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceWin32HandleInfoKHR;
+ using NativeType = VkImportFenceWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportFenceWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -29691,8 +39892,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR &
- operator=( ImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportFenceWin32HandleInfoKHR &
+ operator=( ImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportFenceWin32HandleInfoKHR & operator=( VkImportFenceWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29701,61 +39902,85 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportFenceWin32HandleInfoKHR & setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR &
+ setFence( VULKAN_HPP_NAMESPACE::Fence fence_ ) VULKAN_HPP_NOEXCEPT
{
fence = fence_;
return *this;
}
- ImportFenceWin32HandleInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::FenceImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImportFenceWin32HandleInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportFenceWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
{
handle = handle_;
return *this;
}
- ImportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportFenceWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
{
name = name_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportFenceWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportFenceWin32HandleInfoKHR *>( this );
}
- operator VkImportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportFenceWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportFenceWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Fence const &,
+ VULKAN_HPP_NAMESPACE::FenceImportFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits const &,
+ HANDLE const &,
+ LPCWSTR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fence, flags, handleType, handle, name );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportFenceWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( ImportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fence == rhs.fence ) && ( flags == rhs.flags ) &&
( handleType == rhs.handleType ) && ( handle == rhs.handle ) && ( name == rhs.name );
+# endif
}
bool operator!=( ImportFenceWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29774,10 +39999,14 @@ namespace VULKAN_HPP_NAMESPACE
HANDLE handle = {};
LPCWSTR name = {};
};
- static_assert( sizeof( ImportFenceWin32HandleInfoKHR ) == sizeof( VkImportFenceWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportFenceWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR ) ==
+ sizeof( VkImportFenceWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportFenceWin32HandleInfoKHR>::value,
+ "ImportFenceWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportFenceWin32HandleInfoKHR>
@@ -29786,10 +40015,134 @@ namespace VULKAN_HPP_NAMESPACE
};
#endif /*VK_USE_PLATFORM_WIN32_KHR*/
+#if defined( VK_USE_PLATFORM_FUCHSIA )
+ struct ImportMemoryBufferCollectionFUCHSIA
+ {
+ using NativeType = VkImportMemoryBufferCollectionFUCHSIA;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eImportMemoryBufferCollectionFUCHSIA;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ ImportMemoryBufferCollectionFUCHSIA( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ = {},
+ uint32_t index_ = {} ) VULKAN_HPP_NOEXCEPT
+ : collection( collection_ )
+ , index( index_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR ImportMemoryBufferCollectionFUCHSIA( ImportMemoryBufferCollectionFUCHSIA const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ ImportMemoryBufferCollectionFUCHSIA( VkImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ImportMemoryBufferCollectionFUCHSIA( *reinterpret_cast<ImportMemoryBufferCollectionFUCHSIA const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ ImportMemoryBufferCollectionFUCHSIA &
+ operator=( ImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ ImportMemoryBufferCollectionFUCHSIA &
+ operator=( VkImportMemoryBufferCollectionFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA &
+ setCollection( VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection_ ) VULKAN_HPP_NOEXCEPT
+ {
+ collection = collection_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryBufferCollectionFUCHSIA & setIndex( uint32_t index_ ) VULKAN_HPP_NOEXCEPT
+ {
+ index = index_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkImportMemoryBufferCollectionFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkImportMemoryBufferCollectionFUCHSIA *>( this );
+ }
+
+ explicit operator VkImportMemoryBufferCollectionFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkImportMemoryBufferCollectionFUCHSIA *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, collection, index );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( ImportMemoryBufferCollectionFUCHSIA const & ) const = default;
+# else
+ bool operator==( ImportMemoryBufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( collection == rhs.collection ) &&
+ ( index == rhs.index );
+# endif
+ }
+
+ bool operator!=( ImportMemoryBufferCollectionFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryBufferCollectionFUCHSIA;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::BufferCollectionFUCHSIA collection = {};
+ uint32_t index = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA ) ==
+ sizeof( VkImportMemoryBufferCollectionFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportMemoryBufferCollectionFUCHSIA>::value,
+ "ImportMemoryBufferCollectionFUCHSIA is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eImportMemoryBufferCollectionFUCHSIA>
+ {
+ using Type = ImportMemoryBufferCollectionFUCHSIA;
+ };
+#endif /*VK_USE_PLATFORM_FUCHSIA*/
+
struct ImportMemoryFdInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryFdInfoKHR;
+ using NativeType = VkImportMemoryFdInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryFdInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ImportMemoryFdInfoKHR( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ =
@@ -29806,8 +40159,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR &
- operator=( ImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportMemoryFdInfoKHR & operator=( ImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportMemoryFdInfoKHR & operator=( VkImportMemoryFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29816,42 +40168,61 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportMemoryFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportMemoryFdInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportMemoryFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT
{
fd = fd_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportMemoryFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportMemoryFdInfoKHR *>( this );
}
- operator VkImportMemoryFdInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryFdInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportMemoryFdInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &,
+ int const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType, fd );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportMemoryFdInfoKHR const & ) const = default;
#else
bool operator==( ImportMemoryFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) && ( fd == rhs.fd );
+# endif
}
bool operator!=( ImportMemoryFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29867,9 +40238,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
int fd = {};
};
- static_assert( sizeof( ImportMemoryFdInfoKHR ) == sizeof( VkImportMemoryFdInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportMemoryFdInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR ) == sizeof( VkImportMemoryFdInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportMemoryFdInfoKHR>::value,
+ "ImportMemoryFdInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportMemoryFdInfoKHR>
@@ -29879,8 +40253,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImportMemoryHostPointerInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryHostPointerInfoEXT;
+ using NativeType = VkImportMemoryHostPointerInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryHostPointerInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -29899,8 +40275,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT &
- operator=( ImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportMemoryHostPointerInfoEXT &
+ operator=( ImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportMemoryHostPointerInfoEXT & operator=( VkImportMemoryHostPointerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -29909,43 +40285,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportMemoryHostPointerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportMemoryHostPointerInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportMemoryHostPointerInfoEXT & setPHostPointer( void * pHostPointer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryHostPointerInfoEXT & setPHostPointer( void * pHostPointer_ ) VULKAN_HPP_NOEXCEPT
{
pHostPointer = pHostPointer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportMemoryHostPointerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryHostPointerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportMemoryHostPointerInfoEXT *>( this );
}
- operator VkImportMemoryHostPointerInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryHostPointerInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportMemoryHostPointerInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType, pHostPointer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportMemoryHostPointerInfoEXT const & ) const = default;
#else
bool operator==( ImportMemoryHostPointerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) &&
( pHostPointer == rhs.pHostPointer );
+# endif
}
bool operator!=( ImportMemoryHostPointerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -29961,10 +40356,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
void * pHostPointer = {};
};
- static_assert( sizeof( ImportMemoryHostPointerInfoEXT ) == sizeof( VkImportMemoryHostPointerInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportMemoryHostPointerInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT ) ==
+ sizeof( VkImportMemoryHostPointerInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportMemoryHostPointerInfoEXT>::value,
+ "ImportMemoryHostPointerInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportMemoryHostPointerInfoEXT>
@@ -29975,8 +40374,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ImportMemoryWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoKHR;
+ using NativeType = VkImportMemoryWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -29997,8 +40398,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR &
- operator=( ImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportMemoryWin32HandleInfoKHR &
+ operator=( ImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportMemoryWin32HandleInfoKHR & operator=( VkImportMemoryWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -30007,49 +40408,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportMemoryWin32HandleInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportMemoryWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
{
handle = handle_;
return *this;
}
- ImportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
{
name = name_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR *>( this );
}
- operator VkImportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportMemoryWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &,
+ HANDLE const &,
+ LPCWSTR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType, handle, name );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportMemoryWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( ImportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) &&
( handle == rhs.handle ) && ( name == rhs.name );
+# endif
}
bool operator!=( ImportMemoryWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -30066,10 +40487,14 @@ namespace VULKAN_HPP_NAMESPACE
HANDLE handle = {};
LPCWSTR name = {};
};
- static_assert( sizeof( ImportMemoryWin32HandleInfoKHR ) == sizeof( VkImportMemoryWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportMemoryWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR ) ==
+ sizeof( VkImportMemoryWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoKHR>::value,
+ "ImportMemoryWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportMemoryWin32HandleInfoKHR>
@@ -30081,8 +40506,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ImportMemoryWin32HandleInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoNV;
+ using NativeType = VkImportMemoryWin32HandleInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportMemoryWin32HandleInfoNV;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -30100,8 +40527,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV &
- operator=( ImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportMemoryWin32HandleInfoNV &
+ operator=( ImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportMemoryWin32HandleInfoNV & operator=( VkImportMemoryWin32HandleInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -30110,43 +40537,62 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportMemoryWin32HandleInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportMemoryWin32HandleInfoNV & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryWin32HandleInfoNV & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
{
handle = handle_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryWin32HandleInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportMemoryWin32HandleInfoNV *>( this );
}
- operator VkImportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryWin32HandleInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportMemoryWin32HandleInfoNV *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV const &,
+ HANDLE const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType, handle );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportMemoryWin32HandleInfoNV const & ) const = default;
# else
bool operator==( ImportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) &&
( handle == rhs.handle );
+# endif
}
bool operator!=( ImportMemoryWin32HandleInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -30161,10 +40607,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagsNV handleType = {};
HANDLE handle = {};
};
- static_assert( sizeof( ImportMemoryWin32HandleInfoNV ) == sizeof( VkImportMemoryWin32HandleInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportMemoryWin32HandleInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV ) ==
+ sizeof( VkImportMemoryWin32HandleInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportMemoryWin32HandleInfoNV>::value,
+ "ImportMemoryWin32HandleInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportMemoryWin32HandleInfoNV>
@@ -30176,7 +40626,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
struct ImportMemoryZirconHandleInfoFUCHSIA
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImportMemoryZirconHandleInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImportMemoryZirconHandleInfoFUCHSIA;
@@ -30197,8 +40649,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA &
- operator=( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportMemoryZirconHandleInfoFUCHSIA &
+ operator=( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportMemoryZirconHandleInfoFUCHSIA &
operator=( VkImportMemoryZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -30208,39 +40660,67 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportMemoryZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportMemoryZirconHandleInfoFUCHSIA &
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportMemoryZirconHandleInfoFUCHSIA & setHandle( zx_handle_t handle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportMemoryZirconHandleInfoFUCHSIA & setHandle( zx_handle_t handle_ ) VULKAN_HPP_NOEXCEPT
{
handle = handle_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportMemoryZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportMemoryZirconHandleInfoFUCHSIA *>( this );
}
- operator VkImportMemoryZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportMemoryZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportMemoryZirconHandleInfoFUCHSIA *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &,
+ zx_handle_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType, handle );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImportMemoryZirconHandleInfoFUCHSIA const & ) const = default;
-# else
+ std::strong_ordering operator<=>( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = handleType <=> rhs.handleType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &handle, &rhs.handle, sizeof( zx_handle_t ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( ImportMemoryZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType ) &&
@@ -30251,7 +40731,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportMemoryZirconHandleInfoFUCHSIA;
@@ -30260,10 +40739,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
zx_handle_t handle = {};
};
- static_assert( sizeof( ImportMemoryZirconHandleInfoFUCHSIA ) == sizeof( VkImportMemoryZirconHandleInfoFUCHSIA ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportMemoryZirconHandleInfoFUCHSIA>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA ) ==
+ sizeof( VkImportMemoryZirconHandleInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportMemoryZirconHandleInfoFUCHSIA>::value,
+ "ImportMemoryZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportMemoryZirconHandleInfoFUCHSIA>
@@ -30274,8 +40757,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ImportSemaphoreFdInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreFdInfoKHR;
+ using NativeType = VkImportSemaphoreFdInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eImportSemaphoreFdInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -30297,8 +40782,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR &
- operator=( ImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportSemaphoreFdInfoKHR & operator=( ImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportSemaphoreFdInfoKHR & operator=( VkImportSemaphoreFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -30307,55 +40791,78 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportSemaphoreFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportSemaphoreFdInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- ImportSemaphoreFdInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImportSemaphoreFdInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportSemaphoreFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreFdInfoKHR & setFd( int fd_ ) VULKAN_HPP_NOEXCEPT
{
fd = fd_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportSemaphoreFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportSemaphoreFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportSemaphoreFdInfoKHR *>( this );
}
- operator VkImportSemaphoreFdInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportSemaphoreFdInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportSemaphoreFdInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::SemaphoreImportFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &,
+ int const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, flags, handleType, fd );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportSemaphoreFdInfoKHR const & ) const = default;
#else
bool operator==( ImportSemaphoreFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( flags == rhs.flags ) && ( handleType == rhs.handleType ) && ( fd == rhs.fd );
+# endif
}
bool operator!=( ImportSemaphoreFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -30373,9 +40880,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd;
int fd = {};
};
- static_assert( sizeof( ImportSemaphoreFdInfoKHR ) == sizeof( VkImportSemaphoreFdInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportSemaphoreFdInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR ) ==
+ sizeof( VkImportSemaphoreFdInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportSemaphoreFdInfoKHR>::value,
+ "ImportSemaphoreFdInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportSemaphoreFdInfoKHR>
@@ -30386,7 +40897,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct ImportSemaphoreWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImportSemaphoreWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImportSemaphoreWin32HandleInfoKHR;
@@ -30413,8 +40926,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR &
- operator=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportSemaphoreWin32HandleInfoKHR &
+ operator=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportSemaphoreWin32HandleInfoKHR & operator=( VkImportSemaphoreWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -30423,63 +40936,86 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportSemaphoreWin32HandleInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- ImportSemaphoreWin32HandleInfoKHR &
- setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImportSemaphoreWin32HandleInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportSemaphoreWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setHandle( HANDLE handle_ ) VULKAN_HPP_NOEXCEPT
{
handle = handle_;
return *this;
}
- ImportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreWin32HandleInfoKHR & setName( LPCWSTR name_ ) VULKAN_HPP_NOEXCEPT
{
name = name_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportSemaphoreWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportSemaphoreWin32HandleInfoKHR *>( this );
}
- operator VkImportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportSemaphoreWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportSemaphoreWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::SemaphoreImportFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &,
+ HANDLE const &,
+ LPCWSTR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, flags, handleType, handle, name );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ImportSemaphoreWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( ImportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( flags == rhs.flags ) && ( handleType == rhs.handleType ) && ( handle == rhs.handle ) &&
( name == rhs.name );
+# endif
}
bool operator!=( ImportSemaphoreWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -30498,10 +41034,14 @@ namespace VULKAN_HPP_NAMESPACE
HANDLE handle = {};
LPCWSTR name = {};
};
- static_assert( sizeof( ImportSemaphoreWin32HandleInfoKHR ) == sizeof( VkImportSemaphoreWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportSemaphoreWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR ) ==
+ sizeof( VkImportSemaphoreWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportSemaphoreWin32HandleInfoKHR>::value,
+ "ImportSemaphoreWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportSemaphoreWin32HandleInfoKHR>
@@ -30513,7 +41053,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
struct ImportSemaphoreZirconHandleInfoFUCHSIA
{
- static const bool allowDuplicate = false;
+ using NativeType = VkImportSemaphoreZirconHandleInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA;
@@ -30539,8 +41081,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA &
- operator=( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ImportSemaphoreZirconHandleInfoFUCHSIA &
+ operator=( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ImportSemaphoreZirconHandleInfoFUCHSIA &
operator=( VkImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -30550,53 +41092,88 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ImportSemaphoreZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ImportSemaphoreZirconHandleInfoFUCHSIA &
- setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- ImportSemaphoreZirconHandleInfoFUCHSIA &
- setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA &
+ setFlags( VULKAN_HPP_NAMESPACE::SemaphoreImportFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ImportSemaphoreZirconHandleInfoFUCHSIA &
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
return *this;
}
- ImportSemaphoreZirconHandleInfoFUCHSIA & setZirconHandle( zx_handle_t zirconHandle_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ImportSemaphoreZirconHandleInfoFUCHSIA &
+ setZirconHandle( zx_handle_t zirconHandle_ ) VULKAN_HPP_NOEXCEPT
{
zirconHandle = zirconHandle_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkImportSemaphoreZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportSemaphoreZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkImportSemaphoreZirconHandleInfoFUCHSIA *>( this );
}
- operator VkImportSemaphoreZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkImportSemaphoreZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkImportSemaphoreZirconHandleInfoFUCHSIA *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::SemaphoreImportFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &,
+ zx_handle_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, flags, handleType, zirconHandle );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ImportSemaphoreZirconHandleInfoFUCHSIA const & ) const = default;
-# else
+ std::strong_ordering operator<=>( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = semaphore <=> rhs.semaphore; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = handleType <=> rhs.handleType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &zirconHandle, &rhs.zirconHandle, sizeof( zx_handle_t ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( ImportSemaphoreZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
@@ -30608,7 +41185,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA;
@@ -30619,10 +41195,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd;
zx_handle_t zirconHandle = {};
};
- static_assert( sizeof( ImportSemaphoreZirconHandleInfoFUCHSIA ) == sizeof( VkImportSemaphoreZirconHandleInfoFUCHSIA ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ImportSemaphoreZirconHandleInfoFUCHSIA>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA ) ==
+ sizeof( VkImportSemaphoreZirconHandleInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ImportSemaphoreZirconHandleInfoFUCHSIA>::value,
+ "ImportSemaphoreZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eImportSemaphoreZirconHandleInfoFUCHSIA>
@@ -30633,8 +41214,10 @@ namespace VULKAN_HPP_NAMESPACE
struct IndirectCommandsLayoutTokenNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutTokenNV;
+ using NativeType = VkIndirectCommandsLayoutTokenNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eIndirectCommandsLayoutTokenNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -30716,8 +41299,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
- operator=( IndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ IndirectCommandsLayoutTokenNV &
+ operator=( IndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
IndirectCommandsLayoutTokenNV & operator=( VkIndirectCommandsLayoutTokenNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -30726,85 +41309,89 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- IndirectCommandsLayoutTokenNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- IndirectCommandsLayoutTokenNV &
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
setTokenType( VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV tokenType_ ) VULKAN_HPP_NOEXCEPT
{
tokenType = tokenType_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setStream( uint32_t stream_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setStream( uint32_t stream_ ) VULKAN_HPP_NOEXCEPT
{
stream = stream_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setVertexBindingUnit( uint32_t vertexBindingUnit_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
+ setVertexBindingUnit( uint32_t vertexBindingUnit_ ) VULKAN_HPP_NOEXCEPT
{
vertexBindingUnit = vertexBindingUnit_;
return *this;
}
- IndirectCommandsLayoutTokenNV &
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
setVertexDynamicStride( VULKAN_HPP_NAMESPACE::Bool32 vertexDynamicStride_ ) VULKAN_HPP_NOEXCEPT
{
vertexDynamicStride = vertexDynamicStride_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setPushconstantPipelineLayout(
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPushconstantPipelineLayout(
VULKAN_HPP_NAMESPACE::PipelineLayout pushconstantPipelineLayout_ ) VULKAN_HPP_NOEXCEPT
{
pushconstantPipelineLayout = pushconstantPipelineLayout_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setPushconstantShaderStageFlags(
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV & setPushconstantShaderStageFlags(
VULKAN_HPP_NAMESPACE::ShaderStageFlags pushconstantShaderStageFlags_ ) VULKAN_HPP_NOEXCEPT
{
pushconstantShaderStageFlags = pushconstantShaderStageFlags_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setPushconstantOffset( uint32_t pushconstantOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
+ setPushconstantOffset( uint32_t pushconstantOffset_ ) VULKAN_HPP_NOEXCEPT
{
pushconstantOffset = pushconstantOffset_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setPushconstantSize( uint32_t pushconstantSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
+ setPushconstantSize( uint32_t pushconstantSize_ ) VULKAN_HPP_NOEXCEPT
{
pushconstantSize = pushconstantSize_;
return *this;
}
- IndirectCommandsLayoutTokenNV &
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
setIndirectStateFlags( VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV indirectStateFlags_ ) VULKAN_HPP_NOEXCEPT
{
indirectStateFlags = indirectStateFlags_;
return *this;
}
- IndirectCommandsLayoutTokenNV & setIndexTypeCount( uint32_t indexTypeCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
+ setIndexTypeCount( uint32_t indexTypeCount_ ) VULKAN_HPP_NOEXCEPT
{
indexTypeCount = indexTypeCount_;
return *this;
}
- IndirectCommandsLayoutTokenNV &
- setPIndexTypes( const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
+ setPIndexTypes( const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes_ ) VULKAN_HPP_NOEXCEPT
{
pIndexTypes = pIndexTypes_;
return *this;
@@ -30821,7 +41408,8 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- IndirectCommandsLayoutTokenNV & setPIndexTypeValues( const uint32_t * pIndexTypeValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutTokenNV &
+ setPIndexTypeValues( const uint32_t * pIndexTypeValues_ ) VULKAN_HPP_NOEXCEPT
{
pIndexTypeValues = pIndexTypeValues_;
return *this;
@@ -30838,21 +41426,64 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkIndirectCommandsLayoutTokenNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkIndirectCommandsLayoutTokenNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkIndirectCommandsLayoutTokenNV *>( this );
}
- operator VkIndirectCommandsLayoutTokenNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkIndirectCommandsLayoutTokenNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkIndirectCommandsLayoutTokenNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::IndirectCommandsTokenTypeNV const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayout const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::IndirectStateFlagsNV const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::IndexType * const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ tokenType,
+ stream,
+ offset,
+ vertexBindingUnit,
+ vertexDynamicStride,
+ pushconstantPipelineLayout,
+ pushconstantShaderStageFlags,
+ pushconstantOffset,
+ pushconstantSize,
+ indirectStateFlags,
+ indexTypeCount,
+ pIndexTypes,
+ pIndexTypeValues );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( IndirectCommandsLayoutTokenNV const & ) const = default;
#else
bool operator==( IndirectCommandsLayoutTokenNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( tokenType == rhs.tokenType ) &&
( stream == rhs.stream ) && ( offset == rhs.offset ) && ( vertexBindingUnit == rhs.vertexBindingUnit ) &&
( vertexDynamicStride == rhs.vertexDynamicStride ) &&
@@ -30861,6 +41492,7 @@ namespace VULKAN_HPP_NAMESPACE
( pushconstantOffset == rhs.pushconstantOffset ) && ( pushconstantSize == rhs.pushconstantSize ) &&
( indirectStateFlags == rhs.indirectStateFlags ) && ( indexTypeCount == rhs.indexTypeCount ) &&
( pIndexTypes == rhs.pIndexTypes ) && ( pIndexTypeValues == rhs.pIndexTypeValues );
+# endif
}
bool operator!=( IndirectCommandsLayoutTokenNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -30887,10 +41519,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::IndexType * pIndexTypes = {};
const uint32_t * pIndexTypeValues = {};
};
- static_assert( sizeof( IndirectCommandsLayoutTokenNV ) == sizeof( VkIndirectCommandsLayoutTokenNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<IndirectCommandsLayoutTokenNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV ) ==
+ sizeof( VkIndirectCommandsLayoutTokenNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV>::value,
+ "IndirectCommandsLayoutTokenNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eIndirectCommandsLayoutTokenNV>
@@ -30900,7 +41536,9 @@ namespace VULKAN_HPP_NAMESPACE
struct IndirectCommandsLayoutCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkIndirectCommandsLayoutCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eIndirectCommandsLayoutCreateInfoNV;
@@ -30944,8 +41582,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
- operator=( IndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ IndirectCommandsLayoutCreateInfoNV &
+ operator=( IndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
IndirectCommandsLayoutCreateInfoNV &
operator=( VkIndirectCommandsLayoutCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -30955,33 +41593,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- IndirectCommandsLayoutCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- IndirectCommandsLayoutCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- IndirectCommandsLayoutCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT
{
pipelineBindPoint = pipelineBindPoint_;
return *this;
}
- IndirectCommandsLayoutCreateInfoNV & setTokenCount( uint32_t tokenCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
+ setTokenCount( uint32_t tokenCount_ ) VULKAN_HPP_NOEXCEPT
{
tokenCount = tokenCount_;
return *this;
}
- IndirectCommandsLayoutCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
setPTokens( const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * pTokens_ ) VULKAN_HPP_NOEXCEPT
{
pTokens = pTokens_;
@@ -30999,13 +41638,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- IndirectCommandsLayoutCreateInfoNV & setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
+ setStreamCount( uint32_t streamCount_ ) VULKAN_HPP_NOEXCEPT
{
streamCount = streamCount_;
return *this;
}
- IndirectCommandsLayoutCreateInfoNV & setPStreamStrides( const uint32_t * pStreamStrides_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 IndirectCommandsLayoutCreateInfoNV &
+ setPStreamStrides( const uint32_t * pStreamStrides_ ) VULKAN_HPP_NOEXCEPT
{
pStreamStrides = pStreamStrides_;
return *this;
@@ -31022,25 +41663,48 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkIndirectCommandsLayoutCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkIndirectCommandsLayoutCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkIndirectCommandsLayoutCreateInfoNV *>( this );
}
- operator VkIndirectCommandsLayoutCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkIndirectCommandsLayoutCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkIndirectCommandsLayoutCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutUsageFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::PipelineBindPoint const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutTokenNV * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pipelineBindPoint, tokenCount, pTokens, streamCount, pStreamStrides );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( IndirectCommandsLayoutCreateInfoNV const & ) const = default;
#else
bool operator==( IndirectCommandsLayoutCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pipelineBindPoint == rhs.pipelineBindPoint ) && ( tokenCount == rhs.tokenCount ) &&
( pTokens == rhs.pTokens ) && ( streamCount == rhs.streamCount ) &&
( pStreamStrides == rhs.pStreamStrides );
+# endif
}
bool operator!=( IndirectCommandsLayoutCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31059,10 +41723,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t streamCount = {};
const uint32_t * pStreamStrides = {};
};
- static_assert( sizeof( IndirectCommandsLayoutCreateInfoNV ) == sizeof( VkIndirectCommandsLayoutCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<IndirectCommandsLayoutCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV ) ==
+ sizeof( VkIndirectCommandsLayoutCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::IndirectCommandsLayoutCreateInfoNV>::value,
+ "IndirectCommandsLayoutCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eIndirectCommandsLayoutCreateInfoNV>
@@ -31072,7 +41740,9 @@ namespace VULKAN_HPP_NAMESPACE
struct InitializePerformanceApiInfoINTEL
{
- static const bool allowDuplicate = false;
+ using NativeType = VkInitializePerformanceApiInfoINTEL;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eInitializePerformanceApiInfoINTEL;
@@ -31089,8 +41759,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL &
- operator=( InitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ InitializePerformanceApiInfoINTEL &
+ operator=( InitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
InitializePerformanceApiInfoINTEL & operator=( VkInitializePerformanceApiInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31099,35 +41769,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- InitializePerformanceApiInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- InitializePerformanceApiInfoINTEL & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InitializePerformanceApiInfoINTEL & setPUserData( void * pUserData_ ) VULKAN_HPP_NOEXCEPT
{
pUserData = pUserData_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkInitializePerformanceApiInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkInitializePerformanceApiInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkInitializePerformanceApiInfoINTEL *>( this );
}
- operator VkInitializePerformanceApiInfoINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkInitializePerformanceApiInfoINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkInitializePerformanceApiInfoINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pUserData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( InitializePerformanceApiInfoINTEL const & ) const = default;
#else
bool operator==( InitializePerformanceApiInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pUserData == rhs.pUserData );
+# endif
}
bool operator!=( InitializePerformanceApiInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31141,10 +41827,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
void * pUserData = {};
};
- static_assert( sizeof( InitializePerformanceApiInfoINTEL ) == sizeof( VkInitializePerformanceApiInfoINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<InitializePerformanceApiInfoINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL ) ==
+ sizeof( VkInitializePerformanceApiInfoINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::InitializePerformanceApiInfoINTEL>::value,
+ "InitializePerformanceApiInfoINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eInitializePerformanceApiInfoINTEL>
@@ -31154,6 +41844,8 @@ namespace VULKAN_HPP_NAMESPACE
struct InputAttachmentAspectReference
{
+ using NativeType = VkInputAttachmentAspectReference;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
InputAttachmentAspectReference( uint32_t subpass_ = {},
@@ -31172,8 +41864,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference &
- operator=( InputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ InputAttachmentAspectReference &
+ operator=( InputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT = default;
InputAttachmentAspectReference & operator=( VkInputAttachmentAspectReference const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31182,43 +41874,60 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- InputAttachmentAspectReference & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference & setSubpass( uint32_t subpass_ ) VULKAN_HPP_NOEXCEPT
{
subpass = subpass_;
return *this;
}
- InputAttachmentAspectReference & setInputAttachmentIndex( uint32_t inputAttachmentIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference &
+ setInputAttachmentIndex( uint32_t inputAttachmentIndex_ ) VULKAN_HPP_NOEXCEPT
{
inputAttachmentIndex = inputAttachmentIndex_;
return *this;
}
- InputAttachmentAspectReference &
- setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InputAttachmentAspectReference &
+ setAspectMask( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ ) VULKAN_HPP_NOEXCEPT
{
aspectMask = aspectMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkInputAttachmentAspectReference const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkInputAttachmentAspectReference const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkInputAttachmentAspectReference *>( this );
}
- operator VkInputAttachmentAspectReference &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkInputAttachmentAspectReference &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkInputAttachmentAspectReference *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, VULKAN_HPP_NAMESPACE::ImageAspectFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( subpass, inputAttachmentIndex, aspectMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( InputAttachmentAspectReference const & ) const = default;
#else
bool operator==( InputAttachmentAspectReference const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( subpass == rhs.subpass ) && ( inputAttachmentIndex == rhs.inputAttachmentIndex ) &&
( aspectMask == rhs.aspectMask );
+# endif
}
bool operator!=( InputAttachmentAspectReference const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31232,16 +41941,22 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t inputAttachmentIndex = {};
VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask = {};
};
- static_assert( sizeof( InputAttachmentAspectReference ) == sizeof( VkInputAttachmentAspectReference ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<InputAttachmentAspectReference>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference ) ==
+ sizeof( VkInputAttachmentAspectReference ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference>::value,
+ "InputAttachmentAspectReference is not nothrow_move_constructible!" );
using InputAttachmentAspectReferenceKHR = InputAttachmentAspectReference;
struct InstanceCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eInstanceCreateInfo;
+ using NativeType = VkInstanceCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eInstanceCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR InstanceCreateInfo( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ = {},
@@ -31280,8 +41995,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo &
- operator=( InstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ InstanceCreateInfo & operator=( InstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
InstanceCreateInfo & operator=( VkInstanceCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31290,32 +42004,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- InstanceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- InstanceCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::InstanceCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- InstanceCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo &
setPApplicationInfo( const VULKAN_HPP_NAMESPACE::ApplicationInfo * pApplicationInfo_ ) VULKAN_HPP_NOEXCEPT
{
pApplicationInfo = pApplicationInfo_;
return *this;
}
- InstanceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo & setEnabledLayerCount( uint32_t enabledLayerCount_ ) VULKAN_HPP_NOEXCEPT
{
enabledLayerCount = enabledLayerCount_;
return *this;
}
- InstanceCreateInfo & setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo &
+ setPpEnabledLayerNames( const char * const * ppEnabledLayerNames_ ) VULKAN_HPP_NOEXCEPT
{
ppEnabledLayerNames = ppEnabledLayerNames_;
return *this;
@@ -31332,13 +42048,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- InstanceCreateInfo & setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo &
+ setEnabledExtensionCount( uint32_t enabledExtensionCount_ ) VULKAN_HPP_NOEXCEPT
{
enabledExtensionCount = enabledExtensionCount_;
return *this;
}
- InstanceCreateInfo & setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 InstanceCreateInfo &
+ setPpEnabledExtensionNames( const char * const * ppEnabledExtensionNames_ ) VULKAN_HPP_NOEXCEPT
{
ppEnabledExtensionNames = ppEnabledExtensionNames_;
return *this;
@@ -31356,33 +42074,104 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkInstanceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkInstanceCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkInstanceCreateInfo *>( this );
}
- operator VkInstanceCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkInstanceCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkInstanceCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::InstanceCreateFlags const &,
+ const VULKAN_HPP_NAMESPACE::ApplicationInfo * const &,
+ uint32_t const &,
+ const char * const * const &,
+ uint32_t const &,
+ const char * const * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ pApplicationInfo,
+ enabledLayerCount,
+ ppEnabledLayerNames,
+ enabledExtensionCount,
+ ppEnabledExtensionNames );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( InstanceCreateInfo const & ) const = default;
-#else
+ std::strong_ordering operator<=>( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pApplicationInfo <=> rhs.pApplicationInfo; cmp != 0 )
+ return cmp;
+ if ( auto cmp = enabledLayerCount <=> rhs.enabledLayerCount; cmp != 0 )
+ return cmp;
+ for ( size_t i = 0; i < enabledLayerCount; ++i )
+ {
+ if ( ppEnabledLayerNames[i] != rhs.ppEnabledLayerNames[i] )
+ if ( auto cmp = strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ); cmp != 0 )
+ return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater;
+ }
+ if ( auto cmp = enabledExtensionCount <=> rhs.enabledExtensionCount; cmp != 0 )
+ return cmp;
+ for ( size_t i = 0; i < enabledExtensionCount; ++i )
+ {
+ if ( ppEnabledExtensionNames[i] != rhs.ppEnabledExtensionNames[i] )
+ if ( auto cmp = strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ); cmp != 0 )
+ return cmp < 0 ? std::strong_ordering::less : std::strong_ordering::greater;
+ }
+
+ return std::strong_ordering::equivalent;
+ }
+#endif
+
bool operator==( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pApplicationInfo == rhs.pApplicationInfo ) && ( enabledLayerCount == rhs.enabledLayerCount ) &&
- ( ppEnabledLayerNames == rhs.ppEnabledLayerNames ) &&
- ( enabledExtensionCount == rhs.enabledExtensionCount ) &&
- ( ppEnabledExtensionNames == rhs.ppEnabledExtensionNames );
+ [this, rhs]
+ {
+ bool equal = true;
+ for ( size_t i = 0; equal && ( i < enabledLayerCount ); ++i )
+ {
+ equal = ( ( ppEnabledLayerNames[i] == rhs.ppEnabledLayerNames[i] ) ||
+ ( strcmp( ppEnabledLayerNames[i], rhs.ppEnabledLayerNames[i] ) == 0 ) );
+ }
+ return equal;
+ }() && ( enabledExtensionCount == rhs.enabledExtensionCount ) &&
+ [this, rhs]
+ {
+ bool equal = true;
+ for ( size_t i = 0; equal && ( i < enabledExtensionCount ); ++i )
+ {
+ equal = ( ( ppEnabledExtensionNames[i] == rhs.ppEnabledExtensionNames[i] ) ||
+ ( strcmp( ppEnabledExtensionNames[i], rhs.ppEnabledExtensionNames[i] ) == 0 ) );
+ }
+ return equal;
+ }();
}
bool operator!=( InstanceCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
-#endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eInstanceCreateInfo;
@@ -31394,9 +42183,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t enabledExtensionCount = {};
const char * const * ppEnabledExtensionNames = {};
};
- static_assert( sizeof( InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<InstanceCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::InstanceCreateInfo ) == sizeof( VkInstanceCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::InstanceCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::InstanceCreateInfo>::value,
+ "InstanceCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eInstanceCreateInfo>
@@ -31406,6 +42198,8 @@ namespace VULKAN_HPP_NAMESPACE
struct LayerProperties
{
+ using NativeType = VkLayerProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
LayerProperties( std::array<char, VK_MAX_EXTENSION_NAME_SIZE> const & layerName_ = {},
@@ -31425,7 +42219,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 LayerProperties & operator=( LayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ LayerProperties & operator=( LayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
LayerProperties & operator=( VkLayerProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31433,23 +42227,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkLayerProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkLayerProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkLayerProperties *>( this );
}
- operator VkLayerProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkLayerProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkLayerProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( layerName, specVersion, implementationVersion, description );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( LayerProperties const & ) const = default;
#else
bool operator==( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( layerName == rhs.layerName ) && ( specVersion == rhs.specVersion ) &&
( implementationVersion == rhs.implementationVersion ) && ( description == rhs.description );
+# endif
}
bool operator!=( LayerProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31464,14 +42277,20 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t implementationVersion = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> description = {};
};
- static_assert( sizeof( LayerProperties ) == sizeof( VkLayerProperties ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<LayerProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::LayerProperties ) == sizeof( VkLayerProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::LayerProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::LayerProperties>::value,
+ "LayerProperties is not nothrow_move_constructible!" );
#if defined( VK_USE_PLATFORM_MACOS_MVK )
struct MacOSSurfaceCreateInfoMVK
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMacosSurfaceCreateInfoMVK;
+ using NativeType = VkMacOSSurfaceCreateInfoMVK;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMacosSurfaceCreateInfoMVK;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MacOSSurfaceCreateInfoMVK( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ = {},
@@ -31488,8 +42307,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK &
- operator=( MacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MacOSSurfaceCreateInfoMVK & operator=( MacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MacOSSurfaceCreateInfoMVK & operator=( VkMacOSSurfaceCreateInfoMVK const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31498,41 +42316,61 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MacOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MacOSSurfaceCreateInfoMVK & setFlags( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK &
+ setFlags( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- MacOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MacOSSurfaceCreateInfoMVK & setPView( const void * pView_ ) VULKAN_HPP_NOEXCEPT
{
pView = pView_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMacOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMacOSSurfaceCreateInfoMVK const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMacOSSurfaceCreateInfoMVK *>( this );
}
- operator VkMacOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMacOSSurfaceCreateInfoMVK &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMacOSSurfaceCreateInfoMVK *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pView );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MacOSSurfaceCreateInfoMVK const & ) const = default;
# else
bool operator==( MacOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pView == rhs.pView );
+# endif
}
bool operator!=( MacOSSurfaceCreateInfoMVK const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31547,10 +42385,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateFlagsMVK flags = {};
const void * pView = {};
};
- static_assert( sizeof( MacOSSurfaceCreateInfoMVK ) == sizeof( VkMacOSSurfaceCreateInfoMVK ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MacOSSurfaceCreateInfoMVK>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK ) ==
+ sizeof( VkMacOSSurfaceCreateInfoMVK ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MacOSSurfaceCreateInfoMVK>::value,
+ "MacOSSurfaceCreateInfoMVK is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMacosSurfaceCreateInfoMVK>
@@ -31561,8 +42402,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MappedMemoryRange
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMappedMemoryRange;
+ using NativeType = VkMappedMemoryRange;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMappedMemoryRange;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MappedMemoryRange( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ = {},
@@ -31580,8 +42423,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange &
- operator=( MappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MappedMemoryRange & operator=( MappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MappedMemoryRange & operator=( VkMappedMemoryRange const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31590,48 +42432,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MappedMemoryRange & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MappedMemoryRange & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- MappedMemoryRange & setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange &
+ setOffset( VULKAN_HPP_NAMESPACE::DeviceSize offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- MappedMemoryRange & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MappedMemoryRange & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMappedMemoryRange const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMappedMemoryRange const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMappedMemoryRange *>( this );
}
- operator VkMappedMemoryRange &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMappedMemoryRange &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMappedMemoryRange *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory, offset, size );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MappedMemoryRange const & ) const = default;
#else
bool operator==( MappedMemoryRange const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) && ( offset == rhs.offset ) &&
( size == rhs.size );
+# endif
}
bool operator!=( MappedMemoryRange const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31647,9 +42511,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize offset = {};
VULKAN_HPP_NAMESPACE::DeviceSize size = {};
};
- static_assert( sizeof( MappedMemoryRange ) == sizeof( VkMappedMemoryRange ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MappedMemoryRange>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MappedMemoryRange ) == sizeof( VkMappedMemoryRange ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MappedMemoryRange>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MappedMemoryRange>::value,
+ "MappedMemoryRange is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMappedMemoryRange>
@@ -31659,8 +42526,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryAllocateFlagsInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateFlagsInfo;
+ using NativeType = VkMemoryAllocateFlagsInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateFlagsInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryAllocateFlagsInfo( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ = {},
@@ -31676,8 +42545,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo &
- operator=( MemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryAllocateFlagsInfo & operator=( MemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryAllocateFlagsInfo & operator=( VkMemoryAllocateFlagsInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31686,42 +42554,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryAllocateFlagsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryAllocateFlagsInfo & setFlags( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- MemoryAllocateFlagsInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryAllocateFlagsInfo & setDeviceMask( uint32_t deviceMask_ ) VULKAN_HPP_NOEXCEPT
{
deviceMask = deviceMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryAllocateFlagsInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryAllocateFlagsInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryAllocateFlagsInfo *>( this );
}
- operator VkMemoryAllocateFlagsInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryAllocateFlagsInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryAllocateFlagsInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::MemoryAllocateFlags const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, deviceMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryAllocateFlagsInfo const & ) const = default;
#else
bool operator==( MemoryAllocateFlagsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( deviceMask == rhs.deviceMask );
+# endif
}
bool operator!=( MemoryAllocateFlagsInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31736,9 +42624,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MemoryAllocateFlags flags = {};
uint32_t deviceMask = {};
};
- static_assert( sizeof( MemoryAllocateFlagsInfo ) == sizeof( VkMemoryAllocateFlagsInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryAllocateFlagsInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo ) ==
+ sizeof( VkMemoryAllocateFlagsInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryAllocateFlagsInfo>::value,
+ "MemoryAllocateFlagsInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryAllocateFlagsInfo>
@@ -31749,8 +42641,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryAllocateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateInfo;
+ using NativeType = VkMemoryAllocateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryAllocateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryAllocateInfo( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ = {},
@@ -31766,8 +42660,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo &
- operator=( MemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryAllocateInfo & operator=( MemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryAllocateInfo & operator=( VkMemoryAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31776,42 +42669,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryAllocateInfo & setAllocationSize( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo &
+ setAllocationSize( VULKAN_HPP_NAMESPACE::DeviceSize allocationSize_ ) VULKAN_HPP_NOEXCEPT
{
allocationSize = allocationSize_;
return *this;
}
- MemoryAllocateInfo & setMemoryTypeIndex( uint32_t memoryTypeIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryAllocateInfo & setMemoryTypeIndex( uint32_t memoryTypeIndex_ ) VULKAN_HPP_NOEXCEPT
{
memoryTypeIndex = memoryTypeIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryAllocateInfo *>( this );
}
- operator VkMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, allocationSize, memoryTypeIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryAllocateInfo const & ) const = default;
#else
bool operator==( MemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( allocationSize == rhs.allocationSize ) &&
( memoryTypeIndex == rhs.memoryTypeIndex );
+# endif
}
bool operator!=( MemoryAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31826,9 +42739,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize allocationSize = {};
uint32_t memoryTypeIndex = {};
};
- static_assert( sizeof( MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryAllocateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryAllocateInfo ) == sizeof( VkMemoryAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryAllocateInfo>::value,
+ "MemoryAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryAllocateInfo>
@@ -31838,8 +42754,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryBarrier
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier;
+ using NativeType = VkMemoryBarrier;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryBarrier;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryBarrier( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ = {},
@@ -31855,7 +42773,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & operator=( MemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryBarrier & operator=( MemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryBarrier & operator=( VkMemoryBarrier const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31864,42 +42782,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryBarrier & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- MemoryBarrier & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryBarrier &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryBarrier const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryBarrier *>( this );
}
- operator VkMemoryBarrier &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryBarrier &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryBarrier *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcAccessMask, dstAccessMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryBarrier const & ) const = default;
#else
bool operator==( MemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcAccessMask == rhs.srcAccessMask ) &&
( dstAccessMask == rhs.dstAccessMask );
+# endif
}
bool operator!=( MemoryBarrier const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -31914,8 +42853,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask = {};
VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {};
};
- static_assert( sizeof( MemoryBarrier ) == sizeof( VkMemoryBarrier ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryBarrier>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryBarrier ) == sizeof( VkMemoryBarrier ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryBarrier>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryBarrier>::value,
+ "MemoryBarrier is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryBarrier>
@@ -31925,8 +42868,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryDedicatedAllocateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedAllocateInfo;
+ using NativeType = VkMemoryDedicatedAllocateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedAllocateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryDedicatedAllocateInfo( VULKAN_HPP_NAMESPACE::Image image_ = {},
@@ -31943,8 +42888,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo &
- operator=( MemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryDedicatedAllocateInfo & operator=( MemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryDedicatedAllocateInfo & operator=( VkMemoryDedicatedAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -31953,41 +42897,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryDedicatedAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryDedicatedAllocateInfo & setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo &
+ setImage( VULKAN_HPP_NAMESPACE::Image image_ ) VULKAN_HPP_NOEXCEPT
{
image = image_;
return *this;
}
- MemoryDedicatedAllocateInfo & setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedAllocateInfo &
+ setBuffer( VULKAN_HPP_NAMESPACE::Buffer buffer_ ) VULKAN_HPP_NOEXCEPT
{
buffer = buffer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryDedicatedAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryDedicatedAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryDedicatedAllocateInfo *>( this );
}
- operator VkMemoryDedicatedAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryDedicatedAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryDedicatedAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, image, buffer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryDedicatedAllocateInfo const & ) const = default;
#else
bool operator==( MemoryDedicatedAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( image == rhs.image ) && ( buffer == rhs.buffer );
+# endif
}
bool operator!=( MemoryDedicatedAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32002,10 +42967,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Image image = {};
VULKAN_HPP_NAMESPACE::Buffer buffer = {};
};
- static_assert( sizeof( MemoryDedicatedAllocateInfo ) == sizeof( VkMemoryDedicatedAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryDedicatedAllocateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo ) ==
+ sizeof( VkMemoryDedicatedAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryDedicatedAllocateInfo>::value,
+ "MemoryDedicatedAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryDedicatedAllocateInfo>
@@ -32016,8 +42985,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryDedicatedRequirements
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedRequirements;
+ using NativeType = VkMemoryDedicatedRequirements;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryDedicatedRequirements;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -32035,8 +43006,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryDedicatedRequirements &
- operator=( MemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryDedicatedRequirements & operator=( MemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryDedicatedRequirements & operator=( VkMemoryDedicatedRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32044,24 +43014,43 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryDedicatedRequirements const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryDedicatedRequirements const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryDedicatedRequirements *>( this );
}
- operator VkMemoryDedicatedRequirements &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryDedicatedRequirements &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryDedicatedRequirements *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, prefersDedicatedAllocation, requiresDedicatedAllocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryDedicatedRequirements const & ) const = default;
#else
bool operator==( MemoryDedicatedRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( prefersDedicatedAllocation == rhs.prefersDedicatedAllocation ) &&
( requiresDedicatedAllocation == rhs.requiresDedicatedAllocation );
+# endif
}
bool operator!=( MemoryDedicatedRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32076,10 +43065,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 prefersDedicatedAllocation = {};
VULKAN_HPP_NAMESPACE::Bool32 requiresDedicatedAllocation = {};
};
- static_assert( sizeof( MemoryDedicatedRequirements ) == sizeof( VkMemoryDedicatedRequirements ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryDedicatedRequirements>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements ) ==
+ sizeof( VkMemoryDedicatedRequirements ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryDedicatedRequirements>::value,
+ "MemoryDedicatedRequirements is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryDedicatedRequirements>
@@ -32090,8 +43083,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryFdPropertiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryFdPropertiesKHR;
+ using NativeType = VkMemoryFdPropertiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryFdPropertiesKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryFdPropertiesKHR( uint32_t memoryTypeBits_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -32105,8 +43100,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryFdPropertiesKHR &
- operator=( MemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryFdPropertiesKHR & operator=( MemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryFdPropertiesKHR & operator=( VkMemoryFdPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32114,22 +43108,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryFdPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryFdPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryFdPropertiesKHR *>( this );
}
- operator VkMemoryFdPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryFdPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryFdPropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryTypeBits );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryFdPropertiesKHR const & ) const = default;
#else
bool operator==( MemoryFdPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits );
+# endif
}
bool operator!=( MemoryFdPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32143,9 +43153,12 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t memoryTypeBits = {};
};
- static_assert( sizeof( MemoryFdPropertiesKHR ) == sizeof( VkMemoryFdPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryFdPropertiesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR ) == sizeof( VkMemoryFdPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryFdPropertiesKHR>::value,
+ "MemoryFdPropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryFdPropertiesKHR>
@@ -32156,7 +43169,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_ANDROID_KHR )
struct MemoryGetAndroidHardwareBufferInfoANDROID
{
- static const bool allowDuplicate = false;
+ using NativeType = VkMemoryGetAndroidHardwareBufferInfoANDROID;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID;
@@ -32176,8 +43191,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID &
- operator=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryGetAndroidHardwareBufferInfoANDROID &
+ operator=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryGetAndroidHardwareBufferInfoANDROID &
operator=( VkMemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -32187,36 +43202,55 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryGetAndroidHardwareBufferInfoANDROID & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryGetAndroidHardwareBufferInfoANDROID &
- setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetAndroidHardwareBufferInfoANDROID &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryGetAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetAndroidHardwareBufferInfoANDROID const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryGetAndroidHardwareBufferInfoANDROID *>( this );
}
- operator VkMemoryGetAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetAndroidHardwareBufferInfoANDROID &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryGetAndroidHardwareBufferInfoANDROID *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryGetAndroidHardwareBufferInfoANDROID const & ) const = default;
# else
bool operator==( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory );
+# endif
}
bool operator!=( MemoryGetAndroidHardwareBufferInfoANDROID const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32230,11 +43264,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceMemory memory = {};
};
- static_assert( sizeof( MemoryGetAndroidHardwareBufferInfoANDROID ) ==
- sizeof( VkMemoryGetAndroidHardwareBufferInfoANDROID ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryGetAndroidHardwareBufferInfoANDROID>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID ) ==
+ sizeof( VkMemoryGetAndroidHardwareBufferInfoANDROID ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryGetAndroidHardwareBufferInfoANDROID>::value,
+ "MemoryGetAndroidHardwareBufferInfoANDROID is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryGetAndroidHardwareBufferInfoANDROID>
@@ -32245,8 +43283,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryGetFdInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetFdInfoKHR;
+ using NativeType = VkMemoryGetFdInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetFdInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -32264,8 +43304,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR &
- operator=( MemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryGetFdInfoKHR & operator=( MemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryGetFdInfoKHR & operator=( VkMemoryGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32274,19 +43313,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryGetFdInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- MemoryGetFdInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetFdInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -32294,23 +43334,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryGetFdInfoKHR *>( this );
}
- operator VkMemoryGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryGetFdInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryGetFdInfoKHR const & ) const = default;
#else
bool operator==( MemoryGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( MemoryGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32326,9 +43385,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( MemoryGetFdInfoKHR ) == sizeof( VkMemoryGetFdInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryGetFdInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR ) == sizeof( VkMemoryGetFdInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryGetFdInfoKHR>::value,
+ "MemoryGetFdInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryGetFdInfoKHR>
@@ -32338,8 +43400,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryGetRemoteAddressInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetRemoteAddressInfoNV;
+ using NativeType = VkMemoryGetRemoteAddressInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetRemoteAddressInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryGetRemoteAddressInfoNV(
@@ -32358,8 +43422,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV &
- operator=( MemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryGetRemoteAddressInfoNV & operator=( MemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryGetRemoteAddressInfoNV & operator=( VkMemoryGetRemoteAddressInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32368,19 +43431,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryGetRemoteAddressInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryGetRemoteAddressInfoNV & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- MemoryGetRemoteAddressInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetRemoteAddressInfoNV &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -32388,23 +43452,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryGetRemoteAddressInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetRemoteAddressInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryGetRemoteAddressInfoNV *>( this );
}
- operator VkMemoryGetRemoteAddressInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetRemoteAddressInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryGetRemoteAddressInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryGetRemoteAddressInfoNV const & ) const = default;
#else
bool operator==( MemoryGetRemoteAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( MemoryGetRemoteAddressInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32420,10 +43503,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( MemoryGetRemoteAddressInfoNV ) == sizeof( VkMemoryGetRemoteAddressInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryGetRemoteAddressInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV ) ==
+ sizeof( VkMemoryGetRemoteAddressInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryGetRemoteAddressInfoNV>::value,
+ "MemoryGetRemoteAddressInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryGetRemoteAddressInfoNV>
@@ -32434,8 +43521,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct MemoryGetWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetWin32HandleInfoKHR;
+ using NativeType = VkMemoryGetWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryGetWin32HandleInfoKHR(
@@ -32454,8 +43543,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR &
- operator=( MemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryGetWin32HandleInfoKHR & operator=( MemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryGetWin32HandleInfoKHR & operator=( VkMemoryGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32464,19 +43552,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryGetWin32HandleInfoKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- MemoryGetWin32HandleInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetWin32HandleInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -32484,23 +43573,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryGetWin32HandleInfoKHR *>( this );
}
- operator VkMemoryGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryGetWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory, handleType );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryGetWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( MemoryGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( MemoryGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32516,10 +43624,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( MemoryGetWin32HandleInfoKHR ) == sizeof( VkMemoryGetWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryGetWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR ) ==
+ sizeof( VkMemoryGetWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryGetWin32HandleInfoKHR>::value,
+ "MemoryGetWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryGetWin32HandleInfoKHR>
@@ -32531,7 +43643,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
struct MemoryGetZirconHandleInfoFUCHSIA
{
- static const bool allowDuplicate = false;
+ using NativeType = VkMemoryGetZirconHandleInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryGetZirconHandleInfoFUCHSIA;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -32551,8 +43665,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA &
- operator=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryGetZirconHandleInfoFUCHSIA &
+ operator=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryGetZirconHandleInfoFUCHSIA & operator=( VkMemoryGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32561,19 +43675,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryGetZirconHandleInfoFUCHSIA & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- MemoryGetZirconHandleInfoFUCHSIA &
+ VULKAN_HPP_CONSTEXPR_14 MemoryGetZirconHandleInfoFUCHSIA &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -32581,23 +43696,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryGetZirconHandleInfoFUCHSIA *>( this );
}
- operator VkMemoryGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryGetZirconHandleInfoFUCHSIA *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memory, handleType );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryGetZirconHandleInfoFUCHSIA const & ) const = default;
# else
bool operator==( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memory == rhs.memory ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( MemoryGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32613,10 +43747,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( MemoryGetZirconHandleInfoFUCHSIA ) == sizeof( VkMemoryGetZirconHandleInfoFUCHSIA ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryGetZirconHandleInfoFUCHSIA>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA ) ==
+ sizeof( VkMemoryGetZirconHandleInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryGetZirconHandleInfoFUCHSIA>::value,
+ "MemoryGetZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryGetZirconHandleInfoFUCHSIA>
@@ -32627,6 +43765,8 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryHeap
{
+ using NativeType = VkMemoryHeap;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryHeap( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {},
VULKAN_HPP_NAMESPACE::MemoryHeapFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -32641,7 +43781,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryHeap & operator=( MemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryHeap & operator=( MemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryHeap & operator=( VkMemoryHeap const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32649,22 +43789,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryHeap const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryHeap const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryHeap *>( this );
}
- operator VkMemoryHeap &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryHeap &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryHeap *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceSize const &, VULKAN_HPP_NAMESPACE::MemoryHeapFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( size, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryHeap const & ) const = default;
#else
bool operator==( MemoryHeap const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( size == rhs.size ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( MemoryHeap const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32677,13 +43833,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize size = {};
VULKAN_HPP_NAMESPACE::MemoryHeapFlags flags = {};
};
- static_assert( sizeof( MemoryHeap ) == sizeof( VkMemoryHeap ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryHeap>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryHeap ) == sizeof( VkMemoryHeap ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryHeap>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryHeap>::value,
+ "MemoryHeap is not nothrow_move_constructible!" );
struct MemoryHostPointerPropertiesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryHostPointerPropertiesEXT;
+ using NativeType = VkMemoryHostPointerPropertiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryHostPointerPropertiesEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryHostPointerPropertiesEXT( uint32_t memoryTypeBits_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -32698,8 +43860,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryHostPointerPropertiesEXT &
- operator=( MemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryHostPointerPropertiesEXT &
+ operator=( MemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryHostPointerPropertiesEXT & operator=( VkMemoryHostPointerPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32707,22 +43869,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryHostPointerPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryHostPointerPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryHostPointerPropertiesEXT *>( this );
}
- operator VkMemoryHostPointerPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryHostPointerPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryHostPointerPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryTypeBits );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryHostPointerPropertiesEXT const & ) const = default;
#else
bool operator==( MemoryHostPointerPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits );
+# endif
}
bool operator!=( MemoryHostPointerPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32736,10 +43914,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t memoryTypeBits = {};
};
- static_assert( sizeof( MemoryHostPointerPropertiesEXT ) == sizeof( VkMemoryHostPointerPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryHostPointerPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT ) ==
+ sizeof( VkMemoryHostPointerPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryHostPointerPropertiesEXT>::value,
+ "MemoryHostPointerPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryHostPointerPropertiesEXT>
@@ -32749,7 +43931,9 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryOpaqueCaptureAddressAllocateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkMemoryOpaqueCaptureAddressAllocateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eMemoryOpaqueCaptureAddressAllocateInfo;
@@ -32768,8 +43952,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo &
- operator=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryOpaqueCaptureAddressAllocateInfo &
+ operator=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryOpaqueCaptureAddressAllocateInfo &
operator=( VkMemoryOpaqueCaptureAddressAllocateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -32779,36 +43963,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryOpaqueCaptureAddressAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryOpaqueCaptureAddressAllocateInfo &
- setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryOpaqueCaptureAddressAllocateInfo &
+ setOpaqueCaptureAddress( uint64_t opaqueCaptureAddress_ ) VULKAN_HPP_NOEXCEPT
{
opaqueCaptureAddress = opaqueCaptureAddress_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryOpaqueCaptureAddressAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryOpaqueCaptureAddressAllocateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo *>( this );
}
- operator VkMemoryOpaqueCaptureAddressAllocateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryOpaqueCaptureAddressAllocateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryOpaqueCaptureAddressAllocateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, opaqueCaptureAddress );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryOpaqueCaptureAddressAllocateInfo const & ) const = default;
#else
bool operator==( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( opaqueCaptureAddress == rhs.opaqueCaptureAddress );
+# endif
}
bool operator!=( MemoryOpaqueCaptureAddressAllocateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32822,10 +44022,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint64_t opaqueCaptureAddress = {};
};
- static_assert( sizeof( MemoryOpaqueCaptureAddressAllocateInfo ) == sizeof( VkMemoryOpaqueCaptureAddressAllocateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryOpaqueCaptureAddressAllocateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo ) ==
+ sizeof( VkMemoryOpaqueCaptureAddressAllocateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryOpaqueCaptureAddressAllocateInfo>::value,
+ "MemoryOpaqueCaptureAddressAllocateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryOpaqueCaptureAddressAllocateInfo>
@@ -32836,8 +44041,10 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryPriorityAllocateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryPriorityAllocateInfoEXT;
+ using NativeType = VkMemoryPriorityAllocateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryPriorityAllocateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryPriorityAllocateInfoEXT( float priority_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -32852,8 +44059,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT &
- operator=( MemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryPriorityAllocateInfoEXT &
+ operator=( MemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryPriorityAllocateInfoEXT & operator=( VkMemoryPriorityAllocateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32862,35 +44069,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MemoryPriorityAllocateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MemoryPriorityAllocateInfoEXT & setPriority( float priority_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MemoryPriorityAllocateInfoEXT & setPriority( float priority_ ) VULKAN_HPP_NOEXCEPT
{
priority = priority_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMemoryPriorityAllocateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryPriorityAllocateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT *>( this );
}
- operator VkMemoryPriorityAllocateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryPriorityAllocateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryPriorityAllocateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, priority );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryPriorityAllocateInfoEXT const & ) const = default;
#else
bool operator==( MemoryPriorityAllocateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( priority == rhs.priority );
+# endif
}
bool operator!=( MemoryPriorityAllocateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32904,10 +44127,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
float priority = {};
};
- static_assert( sizeof( MemoryPriorityAllocateInfoEXT ) == sizeof( VkMemoryPriorityAllocateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryPriorityAllocateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT ) ==
+ sizeof( VkMemoryPriorityAllocateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryPriorityAllocateInfoEXT>::value,
+ "MemoryPriorityAllocateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryPriorityAllocateInfoEXT>
@@ -32917,6 +44144,8 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryRequirements
{
+ using NativeType = VkMemoryRequirements;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryRequirements( VULKAN_HPP_NAMESPACE::DeviceSize size_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize alignment_ = {},
@@ -32933,8 +44162,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryRequirements &
- operator=( MemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryRequirements & operator=( MemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryRequirements & operator=( VkMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -32942,22 +44170,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryRequirements *>( this );
}
- operator VkMemoryRequirements &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryRequirements &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryRequirements *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceSize const &, VULKAN_HPP_NAMESPACE::DeviceSize const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( size, alignment, memoryTypeBits );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryRequirements const & ) const = default;
#else
bool operator==( MemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( size == rhs.size ) && ( alignment == rhs.alignment ) && ( memoryTypeBits == rhs.memoryTypeBits );
+# endif
}
bool operator!=( MemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -32971,14 +44215,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize alignment = {};
uint32_t memoryTypeBits = {};
};
- static_assert( sizeof( MemoryRequirements ) == sizeof( VkMemoryRequirements ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryRequirements>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryRequirements ) == sizeof( VkMemoryRequirements ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryRequirements>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryRequirements>::value,
+ "MemoryRequirements is not nothrow_move_constructible!" );
struct MemoryRequirements2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryRequirements2;
+ using NativeType = VkMemoryRequirements2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryRequirements2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -32993,8 +44242,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryRequirements2 &
- operator=( MemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryRequirements2 & operator=( MemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryRequirements2 & operator=( VkMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33002,22 +44250,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryRequirements2 *>( this );
}
- operator VkMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryRequirements2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryRequirements );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryRequirements2 const & ) const = default;
#else
bool operator==( MemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryRequirements == rhs.memoryRequirements );
+# endif
}
bool operator!=( MemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33031,9 +44297,12 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::MemoryRequirements memoryRequirements = {};
};
- static_assert( sizeof( MemoryRequirements2 ) == sizeof( VkMemoryRequirements2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryRequirements2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryRequirements2 ) == sizeof( VkMemoryRequirements2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryRequirements2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryRequirements2>::value,
+ "MemoryRequirements2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryRequirements2>
@@ -33044,6 +44313,8 @@ namespace VULKAN_HPP_NAMESPACE
struct MemoryType
{
+ using NativeType = VkMemoryType;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryType( VULKAN_HPP_NAMESPACE::MemoryPropertyFlags propertyFlags_ = {},
uint32_t heapIndex_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -33058,7 +44329,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryType & operator=( MemoryType const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryType & operator=( MemoryType const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryType & operator=( VkMemoryType const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33066,22 +44337,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryType const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryType const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryType *>( this );
}
- operator VkMemoryType &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryType &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryType *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::MemoryPropertyFlags const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( propertyFlags, heapIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryType const & ) const = default;
#else
bool operator==( MemoryType const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( propertyFlags == rhs.propertyFlags ) && ( heapIndex == rhs.heapIndex );
+# endif
}
bool operator!=( MemoryType const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33094,14 +44381,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MemoryPropertyFlags propertyFlags = {};
uint32_t heapIndex = {};
};
- static_assert( sizeof( MemoryType ) == sizeof( VkMemoryType ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryType>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryType ) == sizeof( VkMemoryType ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryType>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryType>::value,
+ "MemoryType is not nothrow_move_constructible!" );
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct MemoryWin32HandlePropertiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryWin32HandlePropertiesKHR;
+ using NativeType = VkMemoryWin32HandlePropertiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMemoryWin32HandlePropertiesKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MemoryWin32HandlePropertiesKHR( uint32_t memoryTypeBits_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -33116,8 +44409,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryWin32HandlePropertiesKHR &
- operator=( MemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryWin32HandlePropertiesKHR &
+ operator=( MemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryWin32HandlePropertiesKHR & operator=( VkMemoryWin32HandlePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33125,22 +44418,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryWin32HandlePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryWin32HandlePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryWin32HandlePropertiesKHR *>( this );
}
- operator VkMemoryWin32HandlePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryWin32HandlePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryWin32HandlePropertiesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryTypeBits );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryWin32HandlePropertiesKHR const & ) const = default;
# else
bool operator==( MemoryWin32HandlePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits );
+# endif
}
bool operator!=( MemoryWin32HandlePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33154,10 +44463,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t memoryTypeBits = {};
};
- static_assert( sizeof( MemoryWin32HandlePropertiesKHR ) == sizeof( VkMemoryWin32HandlePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryWin32HandlePropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR ) ==
+ sizeof( VkMemoryWin32HandlePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryWin32HandlePropertiesKHR>::value,
+ "MemoryWin32HandlePropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryWin32HandlePropertiesKHR>
@@ -33169,7 +44482,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
struct MemoryZirconHandlePropertiesFUCHSIA
{
- static const bool allowDuplicate = false;
+ using NativeType = VkMemoryZirconHandlePropertiesFUCHSIA;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eMemoryZirconHandlePropertiesFUCHSIA;
@@ -33186,8 +44501,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MemoryZirconHandlePropertiesFUCHSIA &
- operator=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MemoryZirconHandlePropertiesFUCHSIA &
+ operator=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MemoryZirconHandlePropertiesFUCHSIA &
operator=( VkMemoryZirconHandlePropertiesFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -33196,22 +44511,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMemoryZirconHandlePropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryZirconHandlePropertiesFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMemoryZirconHandlePropertiesFUCHSIA *>( this );
}
- operator VkMemoryZirconHandlePropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMemoryZirconHandlePropertiesFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMemoryZirconHandlePropertiesFUCHSIA *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryTypeBits );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MemoryZirconHandlePropertiesFUCHSIA const & ) const = default;
# else
bool operator==( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryTypeBits == rhs.memoryTypeBits );
+# endif
}
bool operator!=( MemoryZirconHandlePropertiesFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33225,10 +44556,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t memoryTypeBits = {};
};
- static_assert( sizeof( MemoryZirconHandlePropertiesFUCHSIA ) == sizeof( VkMemoryZirconHandlePropertiesFUCHSIA ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MemoryZirconHandlePropertiesFUCHSIA>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA ) ==
+ sizeof( VkMemoryZirconHandlePropertiesFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MemoryZirconHandlePropertiesFUCHSIA>::value,
+ "MemoryZirconHandlePropertiesFUCHSIA is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMemoryZirconHandlePropertiesFUCHSIA>
@@ -33240,8 +44575,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_METAL_EXT )
struct MetalSurfaceCreateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMetalSurfaceCreateInfoEXT;
+ using NativeType = VkMetalSurfaceCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMetalSurfaceCreateInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MetalSurfaceCreateInfoEXT( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ = {},
@@ -33258,8 +44595,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT &
- operator=( MetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MetalSurfaceCreateInfoEXT & operator=( MetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MetalSurfaceCreateInfoEXT & operator=( VkMetalSurfaceCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33268,41 +44604,61 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MetalSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MetalSurfaceCreateInfoEXT & setFlags( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- MetalSurfaceCreateInfoEXT & setPLayer( const CAMetalLayer * pLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MetalSurfaceCreateInfoEXT & setPLayer( const CAMetalLayer * pLayer_ ) VULKAN_HPP_NOEXCEPT
{
pLayer = pLayer_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMetalSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMetalSurfaceCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMetalSurfaceCreateInfoEXT *>( this );
}
- operator VkMetalSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMetalSurfaceCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMetalSurfaceCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT const &,
+ const CAMetalLayer * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pLayer );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MetalSurfaceCreateInfoEXT const & ) const = default;
# else
bool operator==( MetalSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( pLayer == rhs.pLayer );
+# endif
}
bool operator!=( MetalSurfaceCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33317,10 +44673,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::MetalSurfaceCreateFlagsEXT flags = {};
const CAMetalLayer * pLayer = {};
};
- static_assert( sizeof( MetalSurfaceCreateInfoEXT ) == sizeof( VkMetalSurfaceCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MetalSurfaceCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT ) ==
+ sizeof( VkMetalSurfaceCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MetalSurfaceCreateInfoEXT>::value,
+ "MetalSurfaceCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMetalSurfaceCreateInfoEXT>
@@ -33331,6 +44690,8 @@ namespace VULKAN_HPP_NAMESPACE
struct MultiDrawIndexedInfoEXT
{
+ using NativeType = VkMultiDrawIndexedInfoEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MultiDrawIndexedInfoEXT( uint32_t firstIndex_ = {},
uint32_t indexCount_ = {},
@@ -33347,8 +44708,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT &
- operator=( MultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MultiDrawIndexedInfoEXT & operator=( MultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MultiDrawIndexedInfoEXT & operator=( VkMultiDrawIndexedInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33357,42 +44717,58 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MultiDrawIndexedInfoEXT & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setFirstIndex( uint32_t firstIndex_ ) VULKAN_HPP_NOEXCEPT
{
firstIndex = firstIndex_;
return *this;
}
- MultiDrawIndexedInfoEXT & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setIndexCount( uint32_t indexCount_ ) VULKAN_HPP_NOEXCEPT
{
indexCount = indexCount_;
return *this;
}
- MultiDrawIndexedInfoEXT & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MultiDrawIndexedInfoEXT & setVertexOffset( int32_t vertexOffset_ ) VULKAN_HPP_NOEXCEPT
{
vertexOffset = vertexOffset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMultiDrawIndexedInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMultiDrawIndexedInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMultiDrawIndexedInfoEXT *>( this );
}
- operator VkMultiDrawIndexedInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMultiDrawIndexedInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMultiDrawIndexedInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( firstIndex, indexCount, vertexOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MultiDrawIndexedInfoEXT const & ) const = default;
#else
bool operator==( MultiDrawIndexedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( firstIndex == rhs.firstIndex ) && ( indexCount == rhs.indexCount ) &&
( vertexOffset == rhs.vertexOffset );
+# endif
}
bool operator!=( MultiDrawIndexedInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33406,12 +44782,18 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t indexCount = {};
int32_t vertexOffset = {};
};
- static_assert( sizeof( MultiDrawIndexedInfoEXT ) == sizeof( VkMultiDrawIndexedInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MultiDrawIndexedInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT ) ==
+ sizeof( VkMultiDrawIndexedInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MultiDrawIndexedInfoEXT>::value,
+ "MultiDrawIndexedInfoEXT is not nothrow_move_constructible!" );
struct MultiDrawInfoEXT
{
+ using NativeType = VkMultiDrawInfoEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MultiDrawInfoEXT( uint32_t firstVertex_ = {}, uint32_t vertexCount_ = {} ) VULKAN_HPP_NOEXCEPT
: firstVertex( firstVertex_ )
@@ -33425,7 +44807,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & operator=( MultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MultiDrawInfoEXT & operator=( MultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MultiDrawInfoEXT & operator=( VkMultiDrawInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33434,35 +44816,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MultiDrawInfoEXT & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & setFirstVertex( uint32_t firstVertex_ ) VULKAN_HPP_NOEXCEPT
{
firstVertex = firstVertex_;
return *this;
}
- MultiDrawInfoEXT & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MultiDrawInfoEXT & setVertexCount( uint32_t vertexCount_ ) VULKAN_HPP_NOEXCEPT
{
vertexCount = vertexCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMultiDrawInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMultiDrawInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMultiDrawInfoEXT *>( this );
}
- operator VkMultiDrawInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMultiDrawInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMultiDrawInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( firstVertex, vertexCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MultiDrawInfoEXT const & ) const = default;
#else
bool operator==( MultiDrawInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( firstVertex == rhs.firstVertex ) && ( vertexCount == rhs.vertexCount );
+# endif
}
bool operator!=( MultiDrawInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33475,14 +44873,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t firstVertex = {};
uint32_t vertexCount = {};
};
- static_assert( sizeof( MultiDrawInfoEXT ) == sizeof( VkMultiDrawInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MultiDrawInfoEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT ) == sizeof( VkMultiDrawInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MultiDrawInfoEXT>::value,
+ "MultiDrawInfoEXT is not nothrow_move_constructible!" );
struct MultisamplePropertiesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultisamplePropertiesEXT;
+ using NativeType = VkMultisamplePropertiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eMultisamplePropertiesEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -33497,8 +44900,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MultisamplePropertiesEXT &
- operator=( MultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MultisamplePropertiesEXT & operator=( MultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MultisamplePropertiesEXT & operator=( VkMultisamplePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33506,23 +44908,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkMultisamplePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMultisamplePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMultisamplePropertiesEXT *>( this );
}
- operator VkMultisamplePropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMultisamplePropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMultisamplePropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxSampleLocationGridSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MultisamplePropertiesEXT const & ) const = default;
#else
bool operator==( MultisamplePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize );
+# endif
}
bool operator!=( MultisamplePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33536,9 +44954,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Extent2D maxSampleLocationGridSize = {};
};
- static_assert( sizeof( MultisamplePropertiesEXT ) == sizeof( VkMultisamplePropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MultisamplePropertiesEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT ) ==
+ sizeof( VkMultisamplePropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MultisamplePropertiesEXT>::value,
+ "MultisamplePropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMultisamplePropertiesEXT>
@@ -33546,8 +44968,130 @@ namespace VULKAN_HPP_NAMESPACE
using Type = MultisamplePropertiesEXT;
};
+ struct MultiviewPerViewAttributesInfoNVX
+ {
+ using NativeType = VkMultiviewPerViewAttributesInfoNVX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eMultiviewPerViewAttributesInfoNVX;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR MultiviewPerViewAttributesInfoNVX(
+ VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly_ = {} ) VULKAN_HPP_NOEXCEPT
+ : perViewAttributes( perViewAttributes_ )
+ , perViewAttributesPositionXOnly( perViewAttributesPositionXOnly_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ MultiviewPerViewAttributesInfoNVX( MultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ MultiviewPerViewAttributesInfoNVX( VkMultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
+ : MultiviewPerViewAttributesInfoNVX( *reinterpret_cast<MultiviewPerViewAttributesInfoNVX const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ MultiviewPerViewAttributesInfoNVX &
+ operator=( MultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ MultiviewPerViewAttributesInfoNVX & operator=( VkMultiviewPerViewAttributesInfoNVX const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX &
+ setPerViewAttributes( VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes_ ) VULKAN_HPP_NOEXCEPT
+ {
+ perViewAttributes = perViewAttributes_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 MultiviewPerViewAttributesInfoNVX & setPerViewAttributesPositionXOnly(
+ VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly_ ) VULKAN_HPP_NOEXCEPT
+ {
+ perViewAttributesPositionXOnly = perViewAttributesPositionXOnly_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkMultiviewPerViewAttributesInfoNVX const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkMultiviewPerViewAttributesInfoNVX *>( this );
+ }
+
+ explicit operator VkMultiviewPerViewAttributesInfoNVX &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkMultiviewPerViewAttributesInfoNVX *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, perViewAttributes, perViewAttributesPositionXOnly );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( MultiviewPerViewAttributesInfoNVX const & ) const = default;
+#else
+ bool operator==( MultiviewPerViewAttributesInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( perViewAttributes == rhs.perViewAttributes ) &&
+ ( perViewAttributesPositionXOnly == rhs.perViewAttributesPositionXOnly );
+# endif
+ }
+
+ bool operator!=( MultiviewPerViewAttributesInfoNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eMultiviewPerViewAttributesInfoNVX;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 perViewAttributes = {};
+ VULKAN_HPP_NAMESPACE::Bool32 perViewAttributesPositionXOnly = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX ) ==
+ sizeof( VkMultiviewPerViewAttributesInfoNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MultiviewPerViewAttributesInfoNVX>::value,
+ "MultiviewPerViewAttributesInfoNVX is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eMultiviewPerViewAttributesInfoNVX>
+ {
+ using Type = MultiviewPerViewAttributesInfoNVX;
+ };
+
struct MutableDescriptorTypeListVALVE
{
+ using NativeType = VkMutableDescriptorTypeListVALVE;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR MutableDescriptorTypeListVALVE(
uint32_t descriptorTypeCount_ = {},
@@ -33573,8 +45117,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListVALVE &
- operator=( MutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MutableDescriptorTypeListVALVE &
+ operator=( MutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MutableDescriptorTypeListVALVE & operator=( VkMutableDescriptorTypeListVALVE const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33583,13 +45127,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MutableDescriptorTypeListVALVE & setDescriptorTypeCount( uint32_t descriptorTypeCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListVALVE &
+ setDescriptorTypeCount( uint32_t descriptorTypeCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorTypeCount = descriptorTypeCount_;
return *this;
}
- MutableDescriptorTypeListVALVE &
+ VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeListVALVE &
setPDescriptorTypes( const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes_ ) VULKAN_HPP_NOEXCEPT
{
pDescriptorTypes = pDescriptorTypes_;
@@ -33608,22 +45153,38 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMutableDescriptorTypeListVALVE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMutableDescriptorTypeListVALVE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMutableDescriptorTypeListVALVE *>( this );
}
- operator VkMutableDescriptorTypeListVALVE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMutableDescriptorTypeListVALVE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMutableDescriptorTypeListVALVE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, const VULKAN_HPP_NAMESPACE::DescriptorType * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( descriptorTypeCount, pDescriptorTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MutableDescriptorTypeListVALVE const & ) const = default;
#else
bool operator==( MutableDescriptorTypeListVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( descriptorTypeCount == rhs.descriptorTypeCount ) && ( pDescriptorTypes == rhs.pDescriptorTypes );
+# endif
}
bool operator!=( MutableDescriptorTypeListVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33636,14 +45197,20 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t descriptorTypeCount = {};
const VULKAN_HPP_NAMESPACE::DescriptorType * pDescriptorTypes = {};
};
- static_assert( sizeof( MutableDescriptorTypeListVALVE ) == sizeof( VkMutableDescriptorTypeListVALVE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MutableDescriptorTypeListVALVE>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE ) ==
+ sizeof( VkMutableDescriptorTypeListVALVE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE>::value,
+ "MutableDescriptorTypeListVALVE is not nothrow_move_constructible!" );
struct MutableDescriptorTypeCreateInfoVALVE
{
- static const bool allowDuplicate = false;
+ using NativeType = VkMutableDescriptorTypeCreateInfoVALVE;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eMutableDescriptorTypeCreateInfoVALVE;
@@ -33673,8 +45240,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE &
- operator=( MutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ MutableDescriptorTypeCreateInfoVALVE &
+ operator=( MutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
MutableDescriptorTypeCreateInfoVALVE &
operator=( VkMutableDescriptorTypeCreateInfoVALVE const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -33684,20 +45251,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- MutableDescriptorTypeCreateInfoVALVE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- MutableDescriptorTypeCreateInfoVALVE &
+ VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE &
setMutableDescriptorTypeListCount( uint32_t mutableDescriptorTypeListCount_ ) VULKAN_HPP_NOEXCEPT
{
mutableDescriptorTypeListCount = mutableDescriptorTypeListCount_;
return *this;
}
- MutableDescriptorTypeCreateInfoVALVE & setPMutableDescriptorTypeLists(
+ VULKAN_HPP_CONSTEXPR_14 MutableDescriptorTypeCreateInfoVALVE & setPMutableDescriptorTypeLists(
const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE * pMutableDescriptorTypeLists_ ) VULKAN_HPP_NOEXCEPT
{
pMutableDescriptorTypeLists = pMutableDescriptorTypeLists_;
@@ -33716,24 +45283,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkMutableDescriptorTypeCreateInfoVALVE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkMutableDescriptorTypeCreateInfoVALVE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkMutableDescriptorTypeCreateInfoVALVE *>( this );
}
- operator VkMutableDescriptorTypeCreateInfoVALVE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkMutableDescriptorTypeCreateInfoVALVE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkMutableDescriptorTypeCreateInfoVALVE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, mutableDescriptorTypeListCount, pMutableDescriptorTypeLists );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( MutableDescriptorTypeCreateInfoVALVE const & ) const = default;
#else
bool operator==( MutableDescriptorTypeCreateInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( mutableDescriptorTypeListCount == rhs.mutableDescriptorTypeListCount ) &&
( pMutableDescriptorTypeLists == rhs.pMutableDescriptorTypeLists );
+# endif
}
bool operator!=( MutableDescriptorTypeCreateInfoVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33748,10 +45334,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t mutableDescriptorTypeListCount = {};
const VULKAN_HPP_NAMESPACE::MutableDescriptorTypeListVALVE * pMutableDescriptorTypeLists = {};
};
- static_assert( sizeof( MutableDescriptorTypeCreateInfoVALVE ) == sizeof( VkMutableDescriptorTypeCreateInfoVALVE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<MutableDescriptorTypeCreateInfoVALVE>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE ) ==
+ sizeof( VkMutableDescriptorTypeCreateInfoVALVE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::MutableDescriptorTypeCreateInfoVALVE>::value,
+ "MutableDescriptorTypeCreateInfoVALVE is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eMutableDescriptorTypeCreateInfoVALVE>
@@ -33761,6 +45351,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PastPresentationTimingGOOGLE
{
+ using NativeType = VkPastPresentationTimingGOOGLE;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PastPresentationTimingGOOGLE( uint32_t presentID_ = {},
uint64_t desiredPresentTime_ = {},
@@ -33782,8 +45374,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PastPresentationTimingGOOGLE &
- operator=( PastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PastPresentationTimingGOOGLE & operator=( PastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PastPresentationTimingGOOGLE & operator=( VkPastPresentationTimingGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33791,24 +45382,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPastPresentationTimingGOOGLE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPastPresentationTimingGOOGLE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPastPresentationTimingGOOGLE *>( this );
}
- operator VkPastPresentationTimingGOOGLE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPastPresentationTimingGOOGLE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPastPresentationTimingGOOGLE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint64_t const &, uint64_t const &, uint64_t const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( presentID, desiredPresentTime, actualPresentTime, earliestPresentTime, presentMargin );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PastPresentationTimingGOOGLE const & ) const = default;
#else
bool operator==( PastPresentationTimingGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( presentID == rhs.presentID ) && ( desiredPresentTime == rhs.desiredPresentTime ) &&
( actualPresentTime == rhs.actualPresentTime ) && ( earliestPresentTime == rhs.earliestPresentTime ) &&
( presentMargin == rhs.presentMargin );
+# endif
}
bool operator!=( PastPresentationTimingGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33824,14 +45431,20 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t earliestPresentTime = {};
uint64_t presentMargin = {};
};
- static_assert( sizeof( PastPresentationTimingGOOGLE ) == sizeof( VkPastPresentationTimingGOOGLE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PastPresentationTimingGOOGLE>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE ) ==
+ sizeof( VkPastPresentationTimingGOOGLE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PastPresentationTimingGOOGLE>::value,
+ "PastPresentationTimingGOOGLE is not nothrow_move_constructible!" );
struct PerformanceConfigurationAcquireInfoINTEL
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPerformanceConfigurationAcquireInfoINTEL;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePerformanceConfigurationAcquireInfoINTEL;
@@ -33852,8 +45465,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL &
- operator=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceConfigurationAcquireInfoINTEL &
+ operator=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceConfigurationAcquireInfoINTEL &
operator=( VkPerformanceConfigurationAcquireInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -33863,36 +45476,55 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PerformanceConfigurationAcquireInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PerformanceConfigurationAcquireInfoINTEL &
- setType( VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceConfigurationAcquireInfoINTEL &
+ setType( VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPerformanceConfigurationAcquireInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceConfigurationAcquireInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceConfigurationAcquireInfoINTEL *>( this );
}
- operator VkPerformanceConfigurationAcquireInfoINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceConfigurationAcquireInfoINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceConfigurationAcquireInfoINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, type );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceConfigurationAcquireInfoINTEL const & ) const = default;
#else
bool operator==( PerformanceConfigurationAcquireInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type );
+# endif
}
bool operator!=( PerformanceConfigurationAcquireInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33907,11 +45539,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL type =
VULKAN_HPP_NAMESPACE::PerformanceConfigurationTypeINTEL::eCommandQueueMetricsDiscoveryActivated;
};
- static_assert( sizeof( PerformanceConfigurationAcquireInfoINTEL ) ==
- sizeof( VkPerformanceConfigurationAcquireInfoINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceConfigurationAcquireInfoINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL ) ==
+ sizeof( VkPerformanceConfigurationAcquireInfoINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceConfigurationAcquireInfoINTEL>::value,
+ "PerformanceConfigurationAcquireInfoINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceConfigurationAcquireInfoINTEL>
@@ -33921,7 +45557,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceCounterDescriptionKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPerformanceCounterDescriptionKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterDescriptionKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -33944,8 +45582,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceCounterDescriptionKHR &
- operator=( PerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceCounterDescriptionKHR &
+ operator=( PerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceCounterDescriptionKHR & operator=( VkPerformanceCounterDescriptionKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -33953,23 +45591,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPerformanceCounterDescriptionKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceCounterDescriptionKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceCounterDescriptionKHR *>( this );
}
- operator VkPerformanceCounterDescriptionKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceCounterDescriptionKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceCounterDescriptionKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, name, category, description );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceCounterDescriptionKHR const & ) const = default;
#else
bool operator==( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( name == rhs.name ) &&
( category == rhs.category ) && ( description == rhs.description );
+# endif
}
bool operator!=( PerformanceCounterDescriptionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -33986,10 +45645,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> category = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> description = {};
};
- static_assert( sizeof( PerformanceCounterDescriptionKHR ) == sizeof( VkPerformanceCounterDescriptionKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceCounterDescriptionKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR ) ==
+ sizeof( VkPerformanceCounterDescriptionKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceCounterDescriptionKHR>::value,
+ "PerformanceCounterDescriptionKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceCounterDescriptionKHR>
@@ -33999,8 +45662,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceCounterKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterKHR;
+ using NativeType = VkPerformanceCounterKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceCounterKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PerformanceCounterKHR(
@@ -34023,8 +45688,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceCounterKHR &
- operator=( PerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceCounterKHR & operator=( PerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceCounterKHR & operator=( VkPerformanceCounterKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -34032,23 +45696,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPerformanceCounterKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceCounterKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceCounterKHR *>( this );
}
- operator VkPerformanceCounterKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceCounterKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceCounterKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PerformanceCounterUnitKHR const &,
+ VULKAN_HPP_NAMESPACE::PerformanceCounterScopeKHR const &,
+ VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, unit, scope, storage, uuid );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceCounterKHR const & ) const = default;
#else
bool operator==( PerformanceCounterKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( unit == rhs.unit ) && ( scope == rhs.scope ) &&
( storage == rhs.storage ) && ( uuid == rhs.uuid );
+# endif
}
bool operator!=( PerformanceCounterKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34067,9 +45752,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PerformanceCounterStorageKHR::eInt32;
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> uuid = {};
};
- static_assert( sizeof( PerformanceCounterKHR ) == sizeof( VkPerformanceCounterKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceCounterKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterKHR ) == sizeof( VkPerformanceCounterKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceCounterKHR>::value,
+ "PerformanceCounterKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceCounterKHR>
@@ -34079,70 +45767,60 @@ namespace VULKAN_HPP_NAMESPACE
union PerformanceCounterResultKHR
{
+ using NativeType = VkPerformanceCounterResultKHR;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- PerformanceCounterResultKHR( VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR ) );
- }
- PerformanceCounterResultKHR( int32_t int32_ = {} ) : int32( int32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( int32_t int32_ = {} ) : int32( int32_ ) {}
- PerformanceCounterResultKHR( int64_t int64_ ) : int64( int64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( int64_t int64_ ) : int64( int64_ ) {}
- PerformanceCounterResultKHR( uint32_t uint32_ ) : uint32( uint32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( uint32_t uint32_ ) : uint32( uint32_ ) {}
- PerformanceCounterResultKHR( uint64_t uint64_ ) : uint64( uint64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( uint64_t uint64_ ) : uint64( uint64_ ) {}
- PerformanceCounterResultKHR( float float32_ ) : float32( float32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( float float32_ ) : float32( float32_ ) {}
- PerformanceCounterResultKHR( double float64_ ) : float64( float64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR( double float64_ ) : float64( float64_ ) {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- PerformanceCounterResultKHR & setInt32( int32_t int32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setInt32( int32_t int32_ ) VULKAN_HPP_NOEXCEPT
{
int32 = int32_;
return *this;
}
- PerformanceCounterResultKHR & setInt64( int64_t int64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setInt64( int64_t int64_ ) VULKAN_HPP_NOEXCEPT
{
int64 = int64_;
return *this;
}
- PerformanceCounterResultKHR & setUint32( uint32_t uint32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setUint32( uint32_t uint32_ ) VULKAN_HPP_NOEXCEPT
{
uint32 = uint32_;
return *this;
}
- PerformanceCounterResultKHR & setUint64( uint64_t uint64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setUint64( uint64_t uint64_ ) VULKAN_HPP_NOEXCEPT
{
uint64 = uint64_;
return *this;
}
- PerformanceCounterResultKHR & setFloat32( float float32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setFloat32( float float32_ ) VULKAN_HPP_NOEXCEPT
{
float32 = float32_;
return *this;
}
- PerformanceCounterResultKHR & setFloat64( double float64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceCounterResultKHR & setFloat64( double float64_ ) VULKAN_HPP_NOEXCEPT
{
float64 = float64_;
return *this;
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR &
- operator=( VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::PerformanceCounterResultKHR ) );
- return *this;
- }
-
operator VkPerformanceCounterResultKHR const &() const
{
return *reinterpret_cast<const VkPerformanceCounterResultKHR *>( this );
@@ -34163,8 +45841,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceMarkerInfoINTEL
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceMarkerInfoINTEL;
+ using NativeType = VkPerformanceMarkerInfoINTEL;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceMarkerInfoINTEL;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PerformanceMarkerInfoINTEL( uint64_t marker_ = {} ) VULKAN_HPP_NOEXCEPT : marker( marker_ ) {}
@@ -34177,8 +45857,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL &
- operator=( PerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceMarkerInfoINTEL & operator=( PerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceMarkerInfoINTEL & operator=( VkPerformanceMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -34187,35 +45866,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PerformanceMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PerformanceMarkerInfoINTEL & setMarker( uint64_t marker_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceMarkerInfoINTEL & setMarker( uint64_t marker_ ) VULKAN_HPP_NOEXCEPT
{
marker = marker_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPerformanceMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceMarkerInfoINTEL *>( this );
}
- operator VkPerformanceMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceMarkerInfoINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, marker );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceMarkerInfoINTEL const & ) const = default;
#else
bool operator==( PerformanceMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( marker == rhs.marker );
+# endif
}
bool operator!=( PerformanceMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34229,10 +45924,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint64_t marker = {};
};
- static_assert( sizeof( PerformanceMarkerInfoINTEL ) == sizeof( VkPerformanceMarkerInfoINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceMarkerInfoINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL ) ==
+ sizeof( VkPerformanceMarkerInfoINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceMarkerInfoINTEL>::value,
+ "PerformanceMarkerInfoINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceMarkerInfoINTEL>
@@ -34242,8 +45940,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceOverrideInfoINTEL
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceOverrideInfoINTEL;
+ using NativeType = VkPerformanceOverrideInfoINTEL;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceOverrideInfoINTEL;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -34264,8 +45964,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL &
- operator=( PerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceOverrideInfoINTEL & operator=( PerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceOverrideInfoINTEL & operator=( VkPerformanceOverrideInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -34274,49 +45973,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PerformanceOverrideInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PerformanceOverrideInfoINTEL &
- setType( VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL &
+ setType( VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- PerformanceOverrideInfoINTEL & setEnable( VULKAN_HPP_NAMESPACE::Bool32 enable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL &
+ setEnable( VULKAN_HPP_NAMESPACE::Bool32 enable_ ) VULKAN_HPP_NOEXCEPT
{
enable = enable_;
return *this;
}
- PerformanceOverrideInfoINTEL & setParameter( uint64_t parameter_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceOverrideInfoINTEL & setParameter( uint64_t parameter_ ) VULKAN_HPP_NOEXCEPT
{
parameter = parameter_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPerformanceOverrideInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceOverrideInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceOverrideInfoINTEL *>( this );
}
- operator VkPerformanceOverrideInfoINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceOverrideInfoINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceOverrideInfoINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PerformanceOverrideTypeINTEL const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, type, enable, parameter );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceOverrideInfoINTEL const & ) const = default;
#else
bool operator==( PerformanceOverrideInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) && ( enable == rhs.enable ) &&
( parameter == rhs.parameter );
+# endif
}
bool operator!=( PerformanceOverrideInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34333,10 +46053,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 enable = {};
uint64_t parameter = {};
};
- static_assert( sizeof( PerformanceOverrideInfoINTEL ) == sizeof( VkPerformanceOverrideInfoINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceOverrideInfoINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL ) ==
+ sizeof( VkPerformanceOverrideInfoINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceOverrideInfoINTEL>::value,
+ "PerformanceOverrideInfoINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceOverrideInfoINTEL>
@@ -34346,8 +46070,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceQuerySubmitInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceQuerySubmitInfoKHR;
+ using NativeType = VkPerformanceQuerySubmitInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceQuerySubmitInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PerformanceQuerySubmitInfoKHR( uint32_t counterPassIndex_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -34362,8 +46088,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR &
- operator=( PerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceQuerySubmitInfoKHR &
+ operator=( PerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceQuerySubmitInfoKHR & operator=( VkPerformanceQuerySubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -34372,35 +46098,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PerformanceQuerySubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PerformanceQuerySubmitInfoKHR & setCounterPassIndex( uint32_t counterPassIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceQuerySubmitInfoKHR &
+ setCounterPassIndex( uint32_t counterPassIndex_ ) VULKAN_HPP_NOEXCEPT
{
counterPassIndex = counterPassIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPerformanceQuerySubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceQuerySubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR *>( this );
}
- operator VkPerformanceQuerySubmitInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceQuerySubmitInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceQuerySubmitInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, counterPassIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceQuerySubmitInfoKHR const & ) const = default;
#else
bool operator==( PerformanceQuerySubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( counterPassIndex == rhs.counterPassIndex );
+# endif
}
bool operator!=( PerformanceQuerySubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34414,10 +46157,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint32_t counterPassIndex = {};
};
- static_assert( sizeof( PerformanceQuerySubmitInfoKHR ) == sizeof( VkPerformanceQuerySubmitInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceQuerySubmitInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR ) ==
+ sizeof( VkPerformanceQuerySubmitInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceQuerySubmitInfoKHR>::value,
+ "PerformanceQuerySubmitInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceQuerySubmitInfoKHR>
@@ -34427,7 +46174,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceStreamMarkerInfoINTEL
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPerformanceStreamMarkerInfoINTEL;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePerformanceStreamMarkerInfoINTEL;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -34443,8 +46192,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL &
- operator=( PerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PerformanceStreamMarkerInfoINTEL &
+ operator=( PerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceStreamMarkerInfoINTEL & operator=( VkPerformanceStreamMarkerInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -34453,35 +46202,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PerformanceStreamMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PerformanceStreamMarkerInfoINTEL & setMarker( uint32_t marker_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceStreamMarkerInfoINTEL & setMarker( uint32_t marker_ ) VULKAN_HPP_NOEXCEPT
{
marker = marker_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPerformanceStreamMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceStreamMarkerInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceStreamMarkerInfoINTEL *>( this );
}
- operator VkPerformanceStreamMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceStreamMarkerInfoINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceStreamMarkerInfoINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, marker );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PerformanceStreamMarkerInfoINTEL const & ) const = default;
#else
bool operator==( PerformanceStreamMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( marker == rhs.marker );
+# endif
}
bool operator!=( PerformanceStreamMarkerInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34495,10 +46260,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint32_t marker = {};
};
- static_assert( sizeof( PerformanceStreamMarkerInfoINTEL ) == sizeof( VkPerformanceStreamMarkerInfoINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceStreamMarkerInfoINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL ) ==
+ sizeof( VkPerformanceStreamMarkerInfoINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceStreamMarkerInfoINTEL>::value,
+ "PerformanceStreamMarkerInfoINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePerformanceStreamMarkerInfoINTEL>
@@ -34508,60 +46277,51 @@ namespace VULKAN_HPP_NAMESPACE
union PerformanceValueDataINTEL
{
+ using NativeType = VkPerformanceValueDataINTEL;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- PerformanceValueDataINTEL( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL ) );
- }
- PerformanceValueDataINTEL( uint32_t value32_ = {} ) : value32( value32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( uint32_t value32_ = {} ) : value32( value32_ ) {}
- PerformanceValueDataINTEL( uint64_t value64_ ) : value64( value64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( uint64_t value64_ ) : value64( value64_ ) {}
- PerformanceValueDataINTEL( float valueFloat_ ) : valueFloat( valueFloat_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( float valueFloat_ ) : valueFloat( valueFloat_ ) {}
- PerformanceValueDataINTEL( const char * valueString_ ) : valueString( valueString_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL( const char * valueString_ ) : valueString( valueString_ ) {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- PerformanceValueDataINTEL & setValue32( uint32_t value32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValue32( uint32_t value32_ ) VULKAN_HPP_NOEXCEPT
{
value32 = value32_;
return *this;
}
- PerformanceValueDataINTEL & setValue64( uint64_t value64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValue64( uint64_t value64_ ) VULKAN_HPP_NOEXCEPT
{
value64 = value64_;
return *this;
}
- PerformanceValueDataINTEL & setValueFloat( float valueFloat_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueFloat( float valueFloat_ ) VULKAN_HPP_NOEXCEPT
{
valueFloat = valueFloat_;
return *this;
}
- PerformanceValueDataINTEL & setValueBool( VULKAN_HPP_NAMESPACE::Bool32 valueBool_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL &
+ setValueBool( VULKAN_HPP_NAMESPACE::Bool32 valueBool_ ) VULKAN_HPP_NOEXCEPT
{
valueBool = valueBool_;
return *this;
}
- PerformanceValueDataINTEL & setValueString( const char * valueString_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueDataINTEL & setValueString( const char * valueString_ ) VULKAN_HPP_NOEXCEPT
{
valueString = valueString_;
return *this;
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL &
- operator=( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL ) );
- return *this;
- }
-
operator VkPerformanceValueDataINTEL const &() const
{
return *reinterpret_cast<const VkPerformanceValueDataINTEL *>( this );
@@ -34589,15 +46349,17 @@ namespace VULKAN_HPP_NAMESPACE
struct PerformanceValueINTEL
{
+ using NativeType = VkPerformanceValueINTEL;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- PerformanceValueINTEL(
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL(
VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type_ = VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL::eUint32,
VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL data_ = {} ) VULKAN_HPP_NOEXCEPT
: type( type_ )
, data( data_ )
{}
- PerformanceValueINTEL( PerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL( PerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PerformanceValueINTEL( VkPerformanceValueINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
: PerformanceValueINTEL( *reinterpret_cast<PerformanceValueINTEL const *>( &rhs ) )
@@ -34613,40 +46375,60 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PerformanceValueINTEL & setType( VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL &
+ setType( VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- PerformanceValueINTEL & setData( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL const & data_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PerformanceValueINTEL &
+ setData( VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL const & data_ ) VULKAN_HPP_NOEXCEPT
{
data = data_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPerformanceValueINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceValueINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPerformanceValueINTEL *>( this );
}
- operator VkPerformanceValueINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPerformanceValueINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPerformanceValueINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL const &,
+ VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( type, data );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL type = VULKAN_HPP_NAMESPACE::PerformanceValueTypeINTEL::eUint32;
VULKAN_HPP_NAMESPACE::PerformanceValueDataINTEL data = {};
};
- static_assert( sizeof( PerformanceValueINTEL ) == sizeof( VkPerformanceValueINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PerformanceValueINTEL>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PerformanceValueINTEL ) == sizeof( VkPerformanceValueINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PerformanceValueINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PerformanceValueINTEL>::value,
+ "PerformanceValueINTEL is not nothrow_move_constructible!" );
struct PhysicalDevice16BitStorageFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevice16BitStorageFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevice16BitStorageFeatures;
@@ -34670,8 +46452,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures &
- operator=( PhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevice16BitStorageFeatures &
+ operator=( PhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevice16BitStorageFeatures &
operator=( VkPhysicalDevice16BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -34681,34 +46463,34 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevice16BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevice16BitStorageFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures &
setStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
storageBuffer16BitAccess = storageBuffer16BitAccess_;
return *this;
}
- PhysicalDevice16BitStorageFeatures & setUniformAndStorageBuffer16BitAccess(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures & setUniformAndStorageBuffer16BitAccess(
VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_;
return *this;
}
- PhysicalDevice16BitStorageFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures &
setStoragePushConstant16( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ ) VULKAN_HPP_NOEXCEPT
{
storagePushConstant16 = storagePushConstant16_;
return *this;
}
- PhysicalDevice16BitStorageFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice16BitStorageFeatures &
setStorageInputOutput16( VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ ) VULKAN_HPP_NOEXCEPT
{
storageInputOutput16 = storageInputOutput16_;
@@ -34716,26 +46498,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevice16BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevice16BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures *>( this );
}
- operator VkPhysicalDevice16BitStorageFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevice16BitStorageFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevice16BitStorageFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ storageBuffer16BitAccess,
+ uniformAndStorageBuffer16BitAccess,
+ storagePushConstant16,
+ storageInputOutput16 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevice16BitStorageFeatures const & ) const = default;
#else
bool operator==( PhysicalDevice16BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess ) &&
( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess ) &&
( storagePushConstant16 == rhs.storagePushConstant16 ) &&
( storageInputOutput16 == rhs.storageInputOutput16 );
+# endif
}
bool operator!=( PhysicalDevice16BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34752,10 +46560,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16 = {};
VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16 = {};
};
- static_assert( sizeof( PhysicalDevice16BitStorageFeatures ) == sizeof( VkPhysicalDevice16BitStorageFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevice16BitStorageFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures ) ==
+ sizeof( VkPhysicalDevice16BitStorageFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevice16BitStorageFeatures>::value,
+ "PhysicalDevice16BitStorageFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevice16BitStorageFeatures>
@@ -34766,7 +46578,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevice4444FormatsFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevice4444FormatsFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevice4444FormatsFeaturesEXT;
@@ -34786,8 +46600,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT &
- operator=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevice4444FormatsFeaturesEXT &
+ operator=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevice4444FormatsFeaturesEXT &
operator=( VkPhysicalDevice4444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -34797,44 +46611,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevice4444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevice4444FormatsFeaturesEXT &
- setFormatA4R4G4B4( VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT &
+ setFormatA4R4G4B4( VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4_ ) VULKAN_HPP_NOEXCEPT
{
formatA4R4G4B4 = formatA4R4G4B4_;
return *this;
}
- PhysicalDevice4444FormatsFeaturesEXT &
- setFormatA4B4G4R4( VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice4444FormatsFeaturesEXT &
+ setFormatA4B4G4R4( VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4_ ) VULKAN_HPP_NOEXCEPT
{
formatA4B4G4R4 = formatA4B4G4R4_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevice4444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevice4444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT *>( this );
}
- operator VkPhysicalDevice4444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevice4444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevice4444FormatsFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, formatA4R4G4B4, formatA4B4G4R4 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevice4444FormatsFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( formatA4R4G4B4 == rhs.formatA4R4G4B4 ) &&
( formatA4B4G4R4 == rhs.formatA4B4G4R4 );
+# endif
}
bool operator!=( PhysicalDevice4444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34849,10 +46682,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 formatA4R4G4B4 = {};
VULKAN_HPP_NAMESPACE::Bool32 formatA4B4G4R4 = {};
};
- static_assert( sizeof( PhysicalDevice4444FormatsFeaturesEXT ) == sizeof( VkPhysicalDevice4444FormatsFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevice4444FormatsFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT ) ==
+ sizeof( VkPhysicalDevice4444FormatsFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevice4444FormatsFeaturesEXT>::value,
+ "PhysicalDevice4444FormatsFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevice4444FormatsFeaturesEXT>
@@ -34862,7 +46699,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevice8BitStorageFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevice8BitStorageFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevice8BitStorageFeatures;
@@ -34884,8 +46723,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures &
- operator=( PhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevice8BitStorageFeatures &
+ operator=( PhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevice8BitStorageFeatures & operator=( VkPhysicalDevice8BitStorageFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -34894,27 +46733,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevice8BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevice8BitStorageFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures &
setStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
storageBuffer8BitAccess = storageBuffer8BitAccess_;
return *this;
}
- PhysicalDevice8BitStorageFeatures & setUniformAndStorageBuffer8BitAccess(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures & setUniformAndStorageBuffer8BitAccess(
VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess_;
return *this;
}
- PhysicalDevice8BitStorageFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevice8BitStorageFeatures &
setStoragePushConstant8( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ ) VULKAN_HPP_NOEXCEPT
{
storagePushConstant8 = storagePushConstant8_;
@@ -34922,25 +46761,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevice8BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevice8BitStorageFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures *>( this );
}
- operator VkPhysicalDevice8BitStorageFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevice8BitStorageFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevice8BitStorageFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, storageBuffer8BitAccess, uniformAndStorageBuffer8BitAccess, storagePushConstant8 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevice8BitStorageFeatures const & ) const = default;
#else
bool operator==( PhysicalDevice8BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( storageBuffer8BitAccess == rhs.storageBuffer8BitAccess ) &&
( uniformAndStorageBuffer8BitAccess == rhs.uniformAndStorageBuffer8BitAccess ) &&
( storagePushConstant8 == rhs.storagePushConstant8 );
+# endif
}
bool operator!=( PhysicalDevice8BitStorageFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -34956,10 +46815,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess = {};
VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8 = {};
};
- static_assert( sizeof( PhysicalDevice8BitStorageFeatures ) == sizeof( VkPhysicalDevice8BitStorageFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevice8BitStorageFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures ) ==
+ sizeof( VkPhysicalDevice8BitStorageFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevice8BitStorageFeatures>::value,
+ "PhysicalDevice8BitStorageFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevice8BitStorageFeatures>
@@ -34970,7 +46833,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceASTCDecodeFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceASTCDecodeFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT;
@@ -34988,8 +46853,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT &
- operator=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceASTCDecodeFeaturesEXT &
+ operator=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceASTCDecodeFeaturesEXT &
operator=( VkPhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -34999,13 +46864,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceASTCDecodeFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceASTCDecodeFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceASTCDecodeFeaturesEXT &
setDecodeModeSharedExponent( VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent_ ) VULKAN_HPP_NOEXCEPT
{
decodeModeSharedExponent = decodeModeSharedExponent_;
@@ -35013,23 +46878,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceASTCDecodeFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceASTCDecodeFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceASTCDecodeFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceASTCDecodeFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceASTCDecodeFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, decodeModeSharedExponent );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceASTCDecodeFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( decodeModeSharedExponent == rhs.decodeModeSharedExponent );
+# endif
}
bool operator!=( PhysicalDeviceASTCDecodeFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35043,10 +46924,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 decodeModeSharedExponent = {};
};
- static_assert( sizeof( PhysicalDeviceASTCDecodeFeaturesEXT ) == sizeof( VkPhysicalDeviceASTCDecodeFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceASTCDecodeFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceASTCDecodeFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceASTCDecodeFeaturesEXT>::value,
+ "PhysicalDeviceASTCDecodeFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceAstcDecodeFeaturesEXT>
@@ -35056,7 +46941,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceAccelerationStructureFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceAccelerationStructureFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR;
@@ -35084,8 +46971,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR &
- operator=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceAccelerationStructureFeaturesKHR &
+ operator=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceAccelerationStructureFeaturesKHR &
operator=( VkPhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35095,63 +46982,92 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceAccelerationStructureFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceAccelerationStructureFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR &
setAccelerationStructure( VULKAN_HPP_NAMESPACE::Bool32 accelerationStructure_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructure = accelerationStructure_;
return *this;
}
- PhysicalDeviceAccelerationStructureFeaturesKHR & setAccelerationStructureCaptureReplay(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setAccelerationStructureCaptureReplay(
VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureCaptureReplay_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureCaptureReplay = accelerationStructureCaptureReplay_;
return *this;
}
- PhysicalDeviceAccelerationStructureFeaturesKHR & setAccelerationStructureIndirectBuild(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setAccelerationStructureIndirectBuild(
VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureIndirectBuild_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureIndirectBuild = accelerationStructureIndirectBuild_;
return *this;
}
- PhysicalDeviceAccelerationStructureFeaturesKHR & setAccelerationStructureHostCommands(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR & setAccelerationStructureHostCommands(
VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureHostCommands = accelerationStructureHostCommands_;
return *this;
}
- PhysicalDeviceAccelerationStructureFeaturesKHR & setDescriptorBindingAccelerationStructureUpdateAfterBind(
- VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructureFeaturesKHR &
+ setDescriptorBindingAccelerationStructureUpdateAfterBind(
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingAccelerationStructureUpdateAfterBind = descriptorBindingAccelerationStructureUpdateAfterBind_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceAccelerationStructureFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceAccelerationStructureFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceAccelerationStructureFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceAccelerationStructureFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceAccelerationStructureFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ accelerationStructure,
+ accelerationStructureCaptureReplay,
+ accelerationStructureIndirectBuild,
+ accelerationStructureHostCommands,
+ descriptorBindingAccelerationStructureUpdateAfterBind );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceAccelerationStructureFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( accelerationStructure == rhs.accelerationStructure ) &&
( accelerationStructureCaptureReplay == rhs.accelerationStructureCaptureReplay ) &&
@@ -35159,6 +47075,7 @@ namespace VULKAN_HPP_NAMESPACE
( accelerationStructureHostCommands == rhs.accelerationStructureHostCommands ) &&
( descriptorBindingAccelerationStructureUpdateAfterBind ==
rhs.descriptorBindingAccelerationStructureUpdateAfterBind );
+# endif
}
bool operator!=( PhysicalDeviceAccelerationStructureFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35176,11 +47093,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 accelerationStructureHostCommands = {};
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingAccelerationStructureUpdateAfterBind = {};
};
- static_assert( sizeof( PhysicalDeviceAccelerationStructureFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceAccelerationStructureFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceAccelerationStructureFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceAccelerationStructureFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructureFeaturesKHR>::value,
+ "PhysicalDeviceAccelerationStructureFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceAccelerationStructureFeaturesKHR>
@@ -35190,7 +47111,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceAccelerationStructurePropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceAccelerationStructurePropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR;
@@ -35225,8 +47148,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceAccelerationStructurePropertiesKHR &
- operator=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceAccelerationStructurePropertiesKHR &
+ operator=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceAccelerationStructurePropertiesKHR &
operator=( VkPhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35235,21 +47158,54 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceAccelerationStructurePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceAccelerationStructurePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR *>( this );
}
- operator VkPhysicalDeviceAccelerationStructurePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceAccelerationStructurePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceAccelerationStructurePropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint64_t const &,
+ uint64_t const &,
+ uint64_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ maxGeometryCount,
+ maxInstanceCount,
+ maxPrimitiveCount,
+ maxPerStageDescriptorAccelerationStructures,
+ maxPerStageDescriptorUpdateAfterBindAccelerationStructures,
+ maxDescriptorSetAccelerationStructures,
+ maxDescriptorSetUpdateAfterBindAccelerationStructures,
+ minAccelerationStructureScratchOffsetAlignment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceAccelerationStructurePropertiesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxGeometryCount == rhs.maxGeometryCount ) &&
( maxInstanceCount == rhs.maxInstanceCount ) && ( maxPrimitiveCount == rhs.maxPrimitiveCount ) &&
( maxPerStageDescriptorAccelerationStructures == rhs.maxPerStageDescriptorAccelerationStructures ) &&
@@ -35259,6 +47215,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxDescriptorSetUpdateAfterBindAccelerationStructures ==
rhs.maxDescriptorSetUpdateAfterBindAccelerationStructures ) &&
( minAccelerationStructureScratchOffsetAlignment == rhs.minAccelerationStructureScratchOffsetAlignment );
+# endif
}
bool operator!=( PhysicalDeviceAccelerationStructurePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35279,11 +47236,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxDescriptorSetUpdateAfterBindAccelerationStructures = {};
uint32_t minAccelerationStructureScratchOffsetAlignment = {};
};
- static_assert( sizeof( PhysicalDeviceAccelerationStructurePropertiesKHR ) ==
- sizeof( VkPhysicalDeviceAccelerationStructurePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceAccelerationStructurePropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR ) ==
+ sizeof( VkPhysicalDeviceAccelerationStructurePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceAccelerationStructurePropertiesKHR>::value,
+ "PhysicalDeviceAccelerationStructurePropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceAccelerationStructurePropertiesKHR>
@@ -35293,7 +47254,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceBlendOperationAdvancedFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT;
@@ -35313,8 +47276,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT &
- operator=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceBlendOperationAdvancedFeaturesEXT &
+ operator=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceBlendOperationAdvancedFeaturesEXT &
operator=( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35324,13 +47287,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceBlendOperationAdvancedFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceBlendOperationAdvancedFeaturesEXT & setAdvancedBlendCoherentOperations(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedFeaturesEXT & setAdvancedBlendCoherentOperations(
VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations_ ) VULKAN_HPP_NOEXCEPT
{
advancedBlendCoherentOperations = advancedBlendCoherentOperations_;
@@ -35338,23 +47302,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, advancedBlendCoherentOperations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( advancedBlendCoherentOperations == rhs.advancedBlendCoherentOperations );
+# endif
}
bool operator!=( PhysicalDeviceBlendOperationAdvancedFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35368,11 +47348,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCoherentOperations = {};
};
- static_assert( sizeof( PhysicalDeviceBlendOperationAdvancedFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceBlendOperationAdvancedFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedFeaturesEXT>::value,
+ "PhysicalDeviceBlendOperationAdvancedFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceBlendOperationAdvancedFeaturesEXT>
@@ -35382,7 +47366,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceBlendOperationAdvancedPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT;
@@ -35412,8 +47398,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBlendOperationAdvancedPropertiesEXT &
- operator=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceBlendOperationAdvancedPropertiesEXT &
+ operator=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceBlendOperationAdvancedPropertiesEXT &
operator=( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35423,21 +47409,50 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ advancedBlendMaxColorAttachments,
+ advancedBlendIndependentBlend,
+ advancedBlendNonPremultipliedSrcColor,
+ advancedBlendNonPremultipliedDstColor,
+ advancedBlendCorrelatedOverlap,
+ advancedBlendAllOperations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( advancedBlendMaxColorAttachments == rhs.advancedBlendMaxColorAttachments ) &&
( advancedBlendIndependentBlend == rhs.advancedBlendIndependentBlend ) &&
@@ -35445,6 +47460,7 @@ namespace VULKAN_HPP_NAMESPACE
( advancedBlendNonPremultipliedDstColor == rhs.advancedBlendNonPremultipliedDstColor ) &&
( advancedBlendCorrelatedOverlap == rhs.advancedBlendCorrelatedOverlap ) &&
( advancedBlendAllOperations == rhs.advancedBlendAllOperations );
+# endif
}
bool operator!=( PhysicalDeviceBlendOperationAdvancedPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35463,11 +47479,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 advancedBlendCorrelatedOverlap = {};
VULKAN_HPP_NAMESPACE::Bool32 advancedBlendAllOperations = {};
};
- static_assert( sizeof( PhysicalDeviceBlendOperationAdvancedPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceBlendOperationAdvancedPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceBlendOperationAdvancedPropertiesEXT>::value,
+ "PhysicalDeviceBlendOperationAdvancedPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceBlendOperationAdvancedPropertiesEXT>
@@ -35475,9 +47495,135 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceBlendOperationAdvancedPropertiesEXT;
};
+ struct PhysicalDeviceBorderColorSwizzleFeaturesEXT
+ {
+ using NativeType = VkPhysicalDeviceBorderColorSwizzleFeaturesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceBorderColorSwizzleFeaturesEXT(
+ VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage_ = {} ) VULKAN_HPP_NOEXCEPT
+ : borderColorSwizzle( borderColorSwizzle_ )
+ , borderColorSwizzleFromImage( borderColorSwizzleFromImage_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceBorderColorSwizzleFeaturesEXT(
+ PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceBorderColorSwizzleFeaturesEXT( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceBorderColorSwizzleFeaturesEXT(
+ *reinterpret_cast<PhysicalDeviceBorderColorSwizzleFeaturesEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceBorderColorSwizzleFeaturesEXT &
+ operator=( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceBorderColorSwizzleFeaturesEXT &
+ operator=( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT &
+ setBorderColorSwizzle( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle_ ) VULKAN_HPP_NOEXCEPT
+ {
+ borderColorSwizzle = borderColorSwizzle_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBorderColorSwizzleFeaturesEXT &
+ setBorderColorSwizzleFromImage( VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage_ ) VULKAN_HPP_NOEXCEPT
+ {
+ borderColorSwizzleFromImage = borderColorSwizzleFromImage_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceBorderColorSwizzleFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceBorderColorSwizzleFeaturesEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, borderColorSwizzle, borderColorSwizzleFromImage );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( borderColorSwizzle == rhs.borderColorSwizzle ) &&
+ ( borderColorSwizzleFromImage == rhs.borderColorSwizzleFromImage );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceBorderColorSwizzleFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzle = {};
+ VULKAN_HPP_NAMESPACE::Bool32 borderColorSwizzleFromImage = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceBorderColorSwizzleFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceBorderColorSwizzleFeaturesEXT>::value,
+ "PhysicalDeviceBorderColorSwizzleFeaturesEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceBorderColorSwizzleFeaturesEXT>
+ {
+ using Type = PhysicalDeviceBorderColorSwizzleFeaturesEXT;
+ };
+
struct PhysicalDeviceBufferDeviceAddressFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceBufferDeviceAddressFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceBufferDeviceAddressFeatures;
@@ -35501,8 +47647,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures &
- operator=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceBufferDeviceAddressFeatures &
+ operator=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceBufferDeviceAddressFeatures &
operator=( VkPhysicalDeviceBufferDeviceAddressFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35512,27 +47658,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceBufferDeviceAddressFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceBufferDeviceAddressFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures &
setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddress = bufferDeviceAddress_;
return *this;
}
- PhysicalDeviceBufferDeviceAddressFeatures & setBufferDeviceAddressCaptureReplay(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & setBufferDeviceAddressCaptureReplay(
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_;
return *this;
}
- PhysicalDeviceBufferDeviceAddressFeatures & setBufferDeviceAddressMultiDevice(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeatures & setBufferDeviceAddressMultiDevice(
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_;
@@ -35540,24 +47686,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceBufferDeviceAddressFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBufferDeviceAddressFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures *>( this );
}
- operator VkPhysicalDeviceBufferDeviceAddressFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBufferDeviceAddressFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, bufferDeviceAddress, bufferDeviceAddressCaptureReplay, bufferDeviceAddressMultiDevice );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceBufferDeviceAddressFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) &&
( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) &&
( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice );
+# endif
}
bool operator!=( PhysicalDeviceBufferDeviceAddressFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35573,11 +47740,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {};
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {};
};
- static_assert( sizeof( PhysicalDeviceBufferDeviceAddressFeatures ) ==
- sizeof( VkPhysicalDeviceBufferDeviceAddressFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceBufferDeviceAddressFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures ) ==
+ sizeof( VkPhysicalDeviceBufferDeviceAddressFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeatures>::value,
+ "PhysicalDeviceBufferDeviceAddressFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceBufferDeviceAddressFeatures>
@@ -35588,7 +47759,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceBufferDeviceAddressFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceBufferDeviceAddressFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT;
@@ -35612,8 +47785,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT &
- operator=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceBufferDeviceAddressFeaturesEXT &
+ operator=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceBufferDeviceAddressFeaturesEXT &
operator=( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35623,27 +47796,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceBufferDeviceAddressFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceBufferDeviceAddressFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT &
setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddress = bufferDeviceAddress_;
return *this;
}
- PhysicalDeviceBufferDeviceAddressFeaturesEXT & setBufferDeviceAddressCaptureReplay(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & setBufferDeviceAddressCaptureReplay(
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_;
return *this;
}
- PhysicalDeviceBufferDeviceAddressFeaturesEXT & setBufferDeviceAddressMultiDevice(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceBufferDeviceAddressFeaturesEXT & setBufferDeviceAddressMultiDevice(
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_;
@@ -35651,24 +47824,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceBufferDeviceAddressFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, bufferDeviceAddress, bufferDeviceAddressCaptureReplay, bufferDeviceAddressMultiDevice );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( bufferDeviceAddress == rhs.bufferDeviceAddress ) &&
( bufferDeviceAddressCaptureReplay == rhs.bufferDeviceAddressCaptureReplay ) &&
( bufferDeviceAddressMultiDevice == rhs.bufferDeviceAddressMultiDevice );
+# endif
}
bool operator!=( PhysicalDeviceBufferDeviceAddressFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35684,11 +47878,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay = {};
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice = {};
};
- static_assert( sizeof( PhysicalDeviceBufferDeviceAddressFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceBufferDeviceAddressFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceBufferDeviceAddressFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceBufferDeviceAddressFeaturesEXT>::value,
+ "PhysicalDeviceBufferDeviceAddressFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceBufferDeviceAddressFeaturesEXT>
@@ -35699,7 +47897,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCoherentMemoryFeaturesAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCoherentMemoryFeaturesAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD;
@@ -35718,8 +47918,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD &
- operator=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCoherentMemoryFeaturesAMD &
+ operator=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCoherentMemoryFeaturesAMD &
operator=( VkPhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35729,13 +47929,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceCoherentMemoryFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceCoherentMemoryFeaturesAMD &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoherentMemoryFeaturesAMD &
setDeviceCoherentMemory( VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory_ ) VULKAN_HPP_NOEXCEPT
{
deviceCoherentMemory = deviceCoherentMemory_;
@@ -35743,22 +47943,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceCoherentMemoryFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCoherentMemoryFeaturesAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD *>( this );
}
- operator VkPhysicalDeviceCoherentMemoryFeaturesAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCoherentMemoryFeaturesAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCoherentMemoryFeaturesAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceCoherentMemory );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCoherentMemoryFeaturesAMD const & ) const = default;
#else
bool operator==( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceCoherentMemory == rhs.deviceCoherentMemory );
+# endif
}
bool operator!=( PhysicalDeviceCoherentMemoryFeaturesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35772,11 +47988,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 deviceCoherentMemory = {};
};
- static_assert( sizeof( PhysicalDeviceCoherentMemoryFeaturesAMD ) ==
- sizeof( VkPhysicalDeviceCoherentMemoryFeaturesAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCoherentMemoryFeaturesAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD ) ==
+ sizeof( VkPhysicalDeviceCoherentMemoryFeaturesAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCoherentMemoryFeaturesAMD>::value,
+ "PhysicalDeviceCoherentMemoryFeaturesAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCoherentMemoryFeaturesAMD>
@@ -35786,7 +48006,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceColorWriteEnableFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceColorWriteEnableFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT;
@@ -35805,8 +48027,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT &
- operator=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceColorWriteEnableFeaturesEXT &
+ operator=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceColorWriteEnableFeaturesEXT &
operator=( VkPhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35816,36 +48038,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceColorWriteEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceColorWriteEnableFeaturesEXT &
- setColorWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceColorWriteEnableFeaturesEXT &
+ setColorWriteEnable( VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable_ ) VULKAN_HPP_NOEXCEPT
{
colorWriteEnable = colorWriteEnable_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceColorWriteEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceColorWriteEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceColorWriteEnableFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceColorWriteEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceColorWriteEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceColorWriteEnableFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, colorWriteEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceColorWriteEnableFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( colorWriteEnable == rhs.colorWriteEnable );
+# endif
}
bool operator!=( PhysicalDeviceColorWriteEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35859,11 +48097,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 colorWriteEnable = {};
};
- static_assert( sizeof( PhysicalDeviceColorWriteEnableFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceColorWriteEnableFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceColorWriteEnableFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceColorWriteEnableFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceColorWriteEnableFeaturesEXT>::value,
+ "PhysicalDeviceColorWriteEnableFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceColorWriteEnableFeaturesEXT>
@@ -35873,7 +48115,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceComputeShaderDerivativesFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceComputeShaderDerivativesFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesNV;
@@ -35895,8 +48139,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV &
- operator=( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceComputeShaderDerivativesFeaturesNV &
+ operator=( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceComputeShaderDerivativesFeaturesNV &
operator=( VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -35906,20 +48150,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceComputeShaderDerivativesFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceComputeShaderDerivativesFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV &
setComputeDerivativeGroupQuads( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads_ ) VULKAN_HPP_NOEXCEPT
{
computeDerivativeGroupQuads = computeDerivativeGroupQuads_;
return *this;
}
- PhysicalDeviceComputeShaderDerivativesFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceComputeShaderDerivativesFeaturesNV &
setComputeDerivativeGroupLinear( VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear_ ) VULKAN_HPP_NOEXCEPT
{
computeDerivativeGroupLinear = computeDerivativeGroupLinear_;
@@ -35927,24 +48172,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceComputeShaderDerivativesFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV *>( this );
}
- operator VkPhysicalDeviceComputeShaderDerivativesFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceComputeShaderDerivativesFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, computeDerivativeGroupQuads, computeDerivativeGroupLinear );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( computeDerivativeGroupQuads == rhs.computeDerivativeGroupQuads ) &&
( computeDerivativeGroupLinear == rhs.computeDerivativeGroupLinear );
+# endif
}
bool operator!=( PhysicalDeviceComputeShaderDerivativesFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -35959,11 +48223,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupQuads = {};
VULKAN_HPP_NAMESPACE::Bool32 computeDerivativeGroupLinear = {};
};
- static_assert( sizeof( PhysicalDeviceComputeShaderDerivativesFeaturesNV ) ==
- sizeof( VkPhysicalDeviceComputeShaderDerivativesFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceComputeShaderDerivativesFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceComputeShaderDerivativesFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceComputeShaderDerivativesFeaturesNV>::value,
+ "PhysicalDeviceComputeShaderDerivativesFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceComputeShaderDerivativesFeaturesNV>
@@ -35973,7 +48241,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceConditionalRenderingFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceConditionalRenderingFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT;
@@ -35995,8 +48265,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT &
- operator=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceConditionalRenderingFeaturesEXT &
+ operator=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceConditionalRenderingFeaturesEXT &
operator=( VkPhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36006,20 +48276,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceConditionalRenderingFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceConditionalRenderingFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT &
setConditionalRendering( VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering_ ) VULKAN_HPP_NOEXCEPT
{
conditionalRendering = conditionalRendering_;
return *this;
}
- PhysicalDeviceConditionalRenderingFeaturesEXT & setInheritedConditionalRendering(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConditionalRenderingFeaturesEXT & setInheritedConditionalRendering(
VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering_ ) VULKAN_HPP_NOEXCEPT
{
inheritedConditionalRendering = inheritedConditionalRendering_;
@@ -36027,23 +48298,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceConditionalRenderingFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceConditionalRenderingFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceConditionalRenderingFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceConditionalRenderingFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, conditionalRendering, inheritedConditionalRendering );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceConditionalRenderingFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conditionalRendering == rhs.conditionalRendering ) &&
( inheritedConditionalRendering == rhs.inheritedConditionalRendering );
+# endif
}
bool operator!=( PhysicalDeviceConditionalRenderingFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36058,11 +48348,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 conditionalRendering = {};
VULKAN_HPP_NAMESPACE::Bool32 inheritedConditionalRendering = {};
};
- static_assert( sizeof( PhysicalDeviceConditionalRenderingFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceConditionalRenderingFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceConditionalRenderingFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceConditionalRenderingFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceConditionalRenderingFeaturesEXT>::value,
+ "PhysicalDeviceConditionalRenderingFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceConditionalRenderingFeaturesEXT>
@@ -36072,7 +48366,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceConservativeRasterizationPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceConservativeRasterizationPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT;
@@ -36108,8 +48404,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceConservativeRasterizationPropertiesEXT &
- operator=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceConservativeRasterizationPropertiesEXT &
+ operator=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceConservativeRasterizationPropertiesEXT &
operator=( VkPhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36119,21 +48415,56 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceConservativeRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ float const &,
+ float const &,
+ float const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ primitiveOverestimationSize,
+ maxExtraPrimitiveOverestimationSize,
+ extraPrimitiveOverestimationSizeGranularity,
+ primitiveUnderestimation,
+ conservativePointAndLineRasterization,
+ degenerateTrianglesRasterized,
+ degenerateLinesRasterized,
+ fullyCoveredFragmentShaderInputVariable,
+ conservativeRasterizationPostDepthCoverage );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceConservativeRasterizationPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( primitiveOverestimationSize == rhs.primitiveOverestimationSize ) &&
( maxExtraPrimitiveOverestimationSize == rhs.maxExtraPrimitiveOverestimationSize ) &&
@@ -36144,6 +48475,7 @@ namespace VULKAN_HPP_NAMESPACE
( degenerateLinesRasterized == rhs.degenerateLinesRasterized ) &&
( fullyCoveredFragmentShaderInputVariable == rhs.fullyCoveredFragmentShaderInputVariable ) &&
( conservativeRasterizationPostDepthCoverage == rhs.conservativeRasterizationPostDepthCoverage );
+# endif
}
bool operator!=( PhysicalDeviceConservativeRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36165,11 +48497,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 fullyCoveredFragmentShaderInputVariable = {};
VULKAN_HPP_NAMESPACE::Bool32 conservativeRasterizationPostDepthCoverage = {};
};
- static_assert( sizeof( PhysicalDeviceConservativeRasterizationPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceConservativeRasterizationPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceConservativeRasterizationPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceConservativeRasterizationPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceConservativeRasterizationPropertiesEXT>::value,
+ "PhysicalDeviceConservativeRasterizationPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceConservativeRasterizationPropertiesEXT>
@@ -36179,7 +48515,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCooperativeMatrixFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCooperativeMatrixFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV;
@@ -36201,8 +48539,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV &
- operator=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCooperativeMatrixFeaturesNV &
+ operator=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCooperativeMatrixFeaturesNV &
operator=( VkPhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36212,20 +48550,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceCooperativeMatrixFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceCooperativeMatrixFeaturesNV &
- setCooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV &
+ setCooperativeMatrix( VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix_ ) VULKAN_HPP_NOEXCEPT
{
cooperativeMatrix = cooperativeMatrix_;
return *this;
}
- PhysicalDeviceCooperativeMatrixFeaturesNV & setCooperativeMatrixRobustBufferAccess(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixFeaturesNV & setCooperativeMatrixRobustBufferAccess(
VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess_ ) VULKAN_HPP_NOEXCEPT
{
cooperativeMatrixRobustBufferAccess = cooperativeMatrixRobustBufferAccess_;
@@ -36233,23 +48571,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceCooperativeMatrixFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCooperativeMatrixFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV *>( this );
}
- operator VkPhysicalDeviceCooperativeMatrixFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCooperativeMatrixFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCooperativeMatrixFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, cooperativeMatrix, cooperativeMatrixRobustBufferAccess );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCooperativeMatrixFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cooperativeMatrix == rhs.cooperativeMatrix ) &&
( cooperativeMatrixRobustBufferAccess == rhs.cooperativeMatrixRobustBufferAccess );
+# endif
}
bool operator!=( PhysicalDeviceCooperativeMatrixFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36264,11 +48621,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrix = {};
VULKAN_HPP_NAMESPACE::Bool32 cooperativeMatrixRobustBufferAccess = {};
};
- static_assert( sizeof( PhysicalDeviceCooperativeMatrixFeaturesNV ) ==
- sizeof( VkPhysicalDeviceCooperativeMatrixFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCooperativeMatrixFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceCooperativeMatrixFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixFeaturesNV>::value,
+ "PhysicalDeviceCooperativeMatrixFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCooperativeMatrixFeaturesNV>
@@ -36278,7 +48639,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCooperativeMatrixPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCooperativeMatrixPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV;
@@ -36298,8 +48661,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCooperativeMatrixPropertiesNV &
- operator=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCooperativeMatrixPropertiesNV &
+ operator=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCooperativeMatrixPropertiesNV &
operator=( VkPhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36308,23 +48671,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCooperativeMatrixPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV *>( this );
}
- operator VkPhysicalDeviceCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCooperativeMatrixPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCooperativeMatrixPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::ShaderStageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, cooperativeMatrixSupportedStages );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCooperativeMatrixPropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( cooperativeMatrixSupportedStages == rhs.cooperativeMatrixSupportedStages );
+# endif
}
bool operator!=( PhysicalDeviceCooperativeMatrixPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36338,11 +48718,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ShaderStageFlags cooperativeMatrixSupportedStages = {};
};
- static_assert( sizeof( PhysicalDeviceCooperativeMatrixPropertiesNV ) ==
- sizeof( VkPhysicalDeviceCooperativeMatrixPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCooperativeMatrixPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV ) ==
+ sizeof( VkPhysicalDeviceCooperativeMatrixPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCooperativeMatrixPropertiesNV>::value,
+ "PhysicalDeviceCooperativeMatrixPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCooperativeMatrixPropertiesNV>
@@ -36352,7 +48736,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCornerSampledImageFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCornerSampledImageFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV;
@@ -36372,8 +48758,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV &
- operator=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCornerSampledImageFeaturesNV &
+ operator=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCornerSampledImageFeaturesNV &
operator=( VkPhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36383,13 +48769,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceCornerSampledImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceCornerSampledImageFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCornerSampledImageFeaturesNV &
setCornerSampledImage( VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage_ ) VULKAN_HPP_NOEXCEPT
{
cornerSampledImage = cornerSampledImage_;
@@ -36397,22 +48783,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceCornerSampledImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCornerSampledImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV *>( this );
}
- operator VkPhysicalDeviceCornerSampledImageFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCornerSampledImageFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCornerSampledImageFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, cornerSampledImage );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCornerSampledImageFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( cornerSampledImage == rhs.cornerSampledImage );
+# endif
}
bool operator!=( PhysicalDeviceCornerSampledImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36426,11 +48828,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 cornerSampledImage = {};
};
- static_assert( sizeof( PhysicalDeviceCornerSampledImageFeaturesNV ) ==
- sizeof( VkPhysicalDeviceCornerSampledImageFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCornerSampledImageFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceCornerSampledImageFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCornerSampledImageFeaturesNV>::value,
+ "PhysicalDeviceCornerSampledImageFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCornerSampledImageFeaturesNV>
@@ -36440,7 +48846,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCoverageReductionModeFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCoverageReductionModeFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV;
@@ -36460,8 +48868,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV &
- operator=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCoverageReductionModeFeaturesNV &
+ operator=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCoverageReductionModeFeaturesNV &
operator=( VkPhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36471,13 +48879,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceCoverageReductionModeFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceCoverageReductionModeFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCoverageReductionModeFeaturesNV &
setCoverageReductionMode( VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode_ ) VULKAN_HPP_NOEXCEPT
{
coverageReductionMode = coverageReductionMode_;
@@ -36485,22 +48894,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceCoverageReductionModeFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCoverageReductionModeFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV *>( this );
}
- operator VkPhysicalDeviceCoverageReductionModeFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCoverageReductionModeFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCoverageReductionModeFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, coverageReductionMode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCoverageReductionModeFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( coverageReductionMode == rhs.coverageReductionMode );
+# endif
}
bool operator!=( PhysicalDeviceCoverageReductionModeFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36514,11 +48939,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 coverageReductionMode = {};
};
- static_assert( sizeof( PhysicalDeviceCoverageReductionModeFeaturesNV ) ==
- sizeof( VkPhysicalDeviceCoverageReductionModeFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCoverageReductionModeFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceCoverageReductionModeFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCoverageReductionModeFeaturesNV>::value,
+ "PhysicalDeviceCoverageReductionModeFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCoverageReductionModeFeaturesNV>
@@ -36528,7 +48957,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCustomBorderColorFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCustomBorderColorFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT;
@@ -36550,8 +48981,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT &
- operator=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCustomBorderColorFeaturesEXT &
+ operator=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCustomBorderColorFeaturesEXT &
operator=( VkPhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36561,20 +48992,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceCustomBorderColorFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceCustomBorderColorFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT &
setCustomBorderColors( VULKAN_HPP_NAMESPACE::Bool32 customBorderColors_ ) VULKAN_HPP_NOEXCEPT
{
customBorderColors = customBorderColors_;
return *this;
}
- PhysicalDeviceCustomBorderColorFeaturesEXT & setCustomBorderColorWithoutFormat(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorFeaturesEXT & setCustomBorderColorWithoutFormat(
VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat_ ) VULKAN_HPP_NOEXCEPT
{
customBorderColorWithoutFormat = customBorderColorWithoutFormat_;
@@ -36582,23 +49013,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceCustomBorderColorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCustomBorderColorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceCustomBorderColorFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCustomBorderColorFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, customBorderColors, customBorderColorWithoutFormat );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCustomBorderColorFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( customBorderColors == rhs.customBorderColors ) &&
( customBorderColorWithoutFormat == rhs.customBorderColorWithoutFormat );
+# endif
}
bool operator!=( PhysicalDeviceCustomBorderColorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36613,11 +49063,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 customBorderColors = {};
VULKAN_HPP_NAMESPACE::Bool32 customBorderColorWithoutFormat = {};
};
- static_assert( sizeof( PhysicalDeviceCustomBorderColorFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceCustomBorderColorFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCustomBorderColorFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceCustomBorderColorFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorFeaturesEXT>::value,
+ "PhysicalDeviceCustomBorderColorFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCustomBorderColorFeaturesEXT>
@@ -36627,7 +49081,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceCustomBorderColorPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceCustomBorderColorPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT;
@@ -36647,8 +49103,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceCustomBorderColorPropertiesEXT &
- operator=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceCustomBorderColorPropertiesEXT &
+ operator=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceCustomBorderColorPropertiesEXT &
operator=( VkPhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36657,23 +49113,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceCustomBorderColorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCustomBorderColorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceCustomBorderColorPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceCustomBorderColorPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxCustomBorderColorSamplers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceCustomBorderColorPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxCustomBorderColorSamplers == rhs.maxCustomBorderColorSamplers );
+# endif
}
bool operator!=( PhysicalDeviceCustomBorderColorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36687,11 +49159,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxCustomBorderColorSamplers = {};
};
- static_assert( sizeof( PhysicalDeviceCustomBorderColorPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceCustomBorderColorPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceCustomBorderColorPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceCustomBorderColorPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceCustomBorderColorPropertiesEXT>::value,
+ "PhysicalDeviceCustomBorderColorPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceCustomBorderColorPropertiesEXT>
@@ -36701,7 +49177,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
@@ -36721,8 +49199,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &
- operator=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &
+ operator=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &
operator=( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36733,37 +49211,55 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV & setDedicatedAllocationImageAliasing(
- VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &
+ setDedicatedAllocationImageAliasing( VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing_ )
+ VULKAN_HPP_NOEXCEPT
{
dedicatedAllocationImageAliasing = dedicatedAllocationImageAliasing_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *>( this );
}
- operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, dedicatedAllocationImageAliasing );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( dedicatedAllocationImageAliasing == rhs.dedicatedAllocationImageAliasing );
+# endif
}
bool operator!=( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36778,11 +49274,16 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 dedicatedAllocationImageAliasing = {};
};
- static_assert( sizeof( PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV ) ==
- sizeof( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>::value,
+ "PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV>
@@ -36790,9 +49291,120 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV;
};
+ struct PhysicalDeviceDepthClipControlFeaturesEXT
+ {
+ using NativeType = VkPhysicalDeviceDepthClipControlFeaturesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipControlFeaturesEXT(
+ VULKAN_HPP_NAMESPACE::Bool32 depthClipControl_ = {} ) VULKAN_HPP_NOEXCEPT : depthClipControl( depthClipControl_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceDepthClipControlFeaturesEXT(
+ PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceDepthClipControlFeaturesEXT( VkPhysicalDeviceDepthClipControlFeaturesEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceDepthClipControlFeaturesEXT(
+ *reinterpret_cast<PhysicalDeviceDepthClipControlFeaturesEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceDepthClipControlFeaturesEXT &
+ operator=( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceDepthClipControlFeaturesEXT &
+ operator=( VkPhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipControlFeaturesEXT &
+ setDepthClipControl( VULKAN_HPP_NAMESPACE::Bool32 depthClipControl_ ) VULKAN_HPP_NOEXCEPT
+ {
+ depthClipControl = depthClipControl_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceDepthClipControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceDepthClipControlFeaturesEXT *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceDepthClipControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceDepthClipControlFeaturesEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, depthClipControl );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceDepthClipControlFeaturesEXT const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClipControl == rhs.depthClipControl );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceDepthClipControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 depthClipControl = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceDepthClipControlFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipControlFeaturesEXT>::value,
+ "PhysicalDeviceDepthClipControlFeaturesEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceDepthClipControlFeaturesEXT>
+ {
+ using Type = PhysicalDeviceDepthClipControlFeaturesEXT;
+ };
+
struct PhysicalDeviceDepthClipEnableFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDepthClipEnableFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT;
@@ -36812,8 +49424,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT &
- operator=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDepthClipEnableFeaturesEXT &
+ operator=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDepthClipEnableFeaturesEXT &
operator=( VkPhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36823,36 +49435,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceDepthClipEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceDepthClipEnableFeaturesEXT &
- setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthClipEnableFeaturesEXT &
+ setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthClipEnable = depthClipEnable_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceDepthClipEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDepthClipEnableFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceDepthClipEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDepthClipEnableFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDepthClipEnableFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, depthClipEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDepthClipEnableFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthClipEnable == rhs.depthClipEnable );
+# endif
}
bool operator!=( PhysicalDeviceDepthClipEnableFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36866,11 +49494,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable = {};
};
- static_assert( sizeof( PhysicalDeviceDepthClipEnableFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceDepthClipEnableFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDepthClipEnableFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceDepthClipEnableFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthClipEnableFeaturesEXT>::value,
+ "PhysicalDeviceDepthClipEnableFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDepthClipEnableFeaturesEXT>
@@ -36880,7 +49512,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDepthStencilResolveProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDepthStencilResolveProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDepthStencilResolveProperties;
@@ -36906,8 +49540,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDepthStencilResolveProperties &
- operator=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDepthStencilResolveProperties &
+ operator=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDepthStencilResolveProperties &
operator=( VkPhysicalDeviceDepthStencilResolveProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -36916,26 +49550,52 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceDepthStencilResolveProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDepthStencilResolveProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties *>( this );
}
- operator VkPhysicalDeviceDepthStencilResolveProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDepthStencilResolveProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDepthStencilResolveProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlags const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ supportedDepthResolveModes,
+ supportedStencilResolveModes,
+ independentResolveNone,
+ independentResolve );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDepthStencilResolveProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceDepthStencilResolveProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( supportedDepthResolveModes == rhs.supportedDepthResolveModes ) &&
( supportedStencilResolveModes == rhs.supportedStencilResolveModes ) &&
( independentResolveNone == rhs.independentResolveNone ) &&
( independentResolve == rhs.independentResolve );
+# endif
}
bool operator!=( PhysicalDeviceDepthStencilResolveProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -36952,11 +49612,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 independentResolveNone = {};
VULKAN_HPP_NAMESPACE::Bool32 independentResolve = {};
};
- static_assert( sizeof( PhysicalDeviceDepthStencilResolveProperties ) ==
- sizeof( VkPhysicalDeviceDepthStencilResolveProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDepthStencilResolveProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties ) ==
+ sizeof( VkPhysicalDeviceDepthStencilResolveProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDepthStencilResolveProperties>::value,
+ "PhysicalDeviceDepthStencilResolveProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDepthStencilResolveProperties>
@@ -36967,7 +49631,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDescriptorIndexingFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDescriptorIndexingFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDescriptorIndexingFeatures;
@@ -37025,8 +49691,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures &
- operator=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDescriptorIndexingFeatures &
+ operator=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDescriptorIndexingFeatures &
operator=( VkPhysicalDeviceDescriptorIndexingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37036,146 +49702,150 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceDescriptorIndexingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderInputAttachmentArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderInputAttachmentArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderUniformTexelBufferArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderUniformTexelBufferArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageTexelBufferArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageTexelBufferArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderUniformBufferArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderUniformBufferArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderSampledImageArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderSampledImageArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageBufferArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageBufferArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageImageArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageImageArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderInputAttachmentArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setShaderInputAttachmentArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderUniformTexelBufferArrayNonUniformIndexing(
- VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures &
+ setShaderUniformTexelBufferArrayNonUniformIndexing(
+ VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setShaderStorageTexelBufferArrayNonUniformIndexing(
- VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures &
+ setShaderStorageTexelBufferArrayNonUniformIndexing(
+ VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUniformBufferUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUniformBufferUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingSampledImageUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingSampledImageUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageImageUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageImageUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageBufferUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageBufferUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUniformTexelBufferUpdateAfterBind(
- VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures &
+ setDescriptorBindingUniformTexelBufferUpdateAfterBind(
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingStorageTexelBufferUpdateAfterBind(
- VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures &
+ setDescriptorBindingStorageTexelBufferUpdateAfterBind(
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUpdateUnusedWhilePending(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingUpdateUnusedWhilePending(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingPartiallyBound(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingPartiallyBound(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingPartiallyBound = descriptorBindingPartiallyBound_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingVariableDescriptorCount(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures & setDescriptorBindingVariableDescriptorCount(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount_;
return *this;
}
- PhysicalDeviceDescriptorIndexingFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingFeatures &
setRuntimeDescriptorArray( VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ ) VULKAN_HPP_NOEXCEPT
{
runtimeDescriptorArray = runtimeDescriptorArray_;
@@ -37183,21 +49853,78 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceDescriptorIndexingFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDescriptorIndexingFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures *>( this );
}
- operator VkPhysicalDeviceDescriptorIndexingFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDescriptorIndexingFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ shaderInputAttachmentArrayDynamicIndexing,
+ shaderUniformTexelBufferArrayDynamicIndexing,
+ shaderStorageTexelBufferArrayDynamicIndexing,
+ shaderUniformBufferArrayNonUniformIndexing,
+ shaderSampledImageArrayNonUniformIndexing,
+ shaderStorageBufferArrayNonUniformIndexing,
+ shaderStorageImageArrayNonUniformIndexing,
+ shaderInputAttachmentArrayNonUniformIndexing,
+ shaderUniformTexelBufferArrayNonUniformIndexing,
+ shaderStorageTexelBufferArrayNonUniformIndexing,
+ descriptorBindingUniformBufferUpdateAfterBind,
+ descriptorBindingSampledImageUpdateAfterBind,
+ descriptorBindingStorageImageUpdateAfterBind,
+ descriptorBindingStorageBufferUpdateAfterBind,
+ descriptorBindingUniformTexelBufferUpdateAfterBind,
+ descriptorBindingStorageTexelBufferUpdateAfterBind,
+ descriptorBindingUpdateUnusedWhilePending,
+ descriptorBindingPartiallyBound,
+ descriptorBindingVariableDescriptorCount,
+ runtimeDescriptorArray );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDescriptorIndexingFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderInputAttachmentArrayDynamicIndexing == rhs.shaderInputAttachmentArrayDynamicIndexing ) &&
( shaderUniformTexelBufferArrayDynamicIndexing == rhs.shaderUniformTexelBufferArrayDynamicIndexing ) &&
@@ -37223,6 +49950,7 @@ namespace VULKAN_HPP_NAMESPACE
( descriptorBindingPartiallyBound == rhs.descriptorBindingPartiallyBound ) &&
( descriptorBindingVariableDescriptorCount == rhs.descriptorBindingVariableDescriptorCount ) &&
( runtimeDescriptorArray == rhs.runtimeDescriptorArray );
+# endif
}
bool operator!=( PhysicalDeviceDescriptorIndexingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37255,11 +49983,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount = {};
VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray = {};
};
- static_assert( sizeof( PhysicalDeviceDescriptorIndexingFeatures ) ==
- sizeof( VkPhysicalDeviceDescriptorIndexingFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDescriptorIndexingFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures ) ==
+ sizeof( VkPhysicalDeviceDescriptorIndexingFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingFeatures>::value,
+ "PhysicalDeviceDescriptorIndexingFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDescriptorIndexingFeatures>
@@ -37270,7 +50002,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDescriptorIndexingProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDescriptorIndexingProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDescriptorIndexingProperties;
@@ -37334,8 +50068,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDescriptorIndexingProperties &
- operator=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDescriptorIndexingProperties &
+ operator=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDescriptorIndexingProperties &
operator=( VkPhysicalDeviceDescriptorIndexingProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37344,21 +50078,84 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceDescriptorIndexingProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDescriptorIndexingProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties *>( this );
}
- operator VkPhysicalDeviceDescriptorIndexingProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDescriptorIndexingProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDescriptorIndexingProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ maxUpdateAfterBindDescriptorsInAllPools,
+ shaderUniformBufferArrayNonUniformIndexingNative,
+ shaderSampledImageArrayNonUniformIndexingNative,
+ shaderStorageBufferArrayNonUniformIndexingNative,
+ shaderStorageImageArrayNonUniformIndexingNative,
+ shaderInputAttachmentArrayNonUniformIndexingNative,
+ robustBufferAccessUpdateAfterBind,
+ quadDivergentImplicitLod,
+ maxPerStageDescriptorUpdateAfterBindSamplers,
+ maxPerStageDescriptorUpdateAfterBindUniformBuffers,
+ maxPerStageDescriptorUpdateAfterBindStorageBuffers,
+ maxPerStageDescriptorUpdateAfterBindSampledImages,
+ maxPerStageDescriptorUpdateAfterBindStorageImages,
+ maxPerStageDescriptorUpdateAfterBindInputAttachments,
+ maxPerStageUpdateAfterBindResources,
+ maxDescriptorSetUpdateAfterBindSamplers,
+ maxDescriptorSetUpdateAfterBindUniformBuffers,
+ maxDescriptorSetUpdateAfterBindUniformBuffersDynamic,
+ maxDescriptorSetUpdateAfterBindStorageBuffers,
+ maxDescriptorSetUpdateAfterBindStorageBuffersDynamic,
+ maxDescriptorSetUpdateAfterBindSampledImages,
+ maxDescriptorSetUpdateAfterBindStorageImages,
+ maxDescriptorSetUpdateAfterBindInputAttachments );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDescriptorIndexingProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceDescriptorIndexingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxUpdateAfterBindDescriptorsInAllPools == rhs.maxUpdateAfterBindDescriptorsInAllPools ) &&
( shaderUniformBufferArrayNonUniformIndexingNative ==
@@ -37395,6 +50192,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxDescriptorSetUpdateAfterBindSampledImages == rhs.maxDescriptorSetUpdateAfterBindSampledImages ) &&
( maxDescriptorSetUpdateAfterBindStorageImages == rhs.maxDescriptorSetUpdateAfterBindStorageImages ) &&
( maxDescriptorSetUpdateAfterBindInputAttachments == rhs.maxDescriptorSetUpdateAfterBindInputAttachments );
+# endif
}
bool operator!=( PhysicalDeviceDescriptorIndexingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37430,11 +50228,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxDescriptorSetUpdateAfterBindStorageImages = {};
uint32_t maxDescriptorSetUpdateAfterBindInputAttachments = {};
};
- static_assert( sizeof( PhysicalDeviceDescriptorIndexingProperties ) ==
- sizeof( VkPhysicalDeviceDescriptorIndexingProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDescriptorIndexingProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties ) ==
+ sizeof( VkPhysicalDeviceDescriptorIndexingProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDescriptorIndexingProperties>::value,
+ "PhysicalDeviceDescriptorIndexingProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDescriptorIndexingProperties>
@@ -37445,7 +50247,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDeviceGeneratedCommandsFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV;
@@ -37465,8 +50269,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV &
- operator=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDeviceGeneratedCommandsFeaturesNV &
+ operator=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDeviceGeneratedCommandsFeaturesNV &
operator=( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37476,13 +50280,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceDeviceGeneratedCommandsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceDeviceGeneratedCommandsFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsFeaturesNV &
setDeviceGeneratedCommands( VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands_ ) VULKAN_HPP_NOEXCEPT
{
deviceGeneratedCommands = deviceGeneratedCommands_;
@@ -37490,23 +50295,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *>( this );
}
- operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceGeneratedCommands );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( deviceGeneratedCommands == rhs.deviceGeneratedCommands );
+# endif
}
bool operator!=( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37520,11 +50341,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 deviceGeneratedCommands = {};
};
- static_assert( sizeof( PhysicalDeviceDeviceGeneratedCommandsFeaturesNV ) ==
- sizeof( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsFeaturesNV>::value,
+ "PhysicalDeviceDeviceGeneratedCommandsFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDeviceGeneratedCommandsFeaturesNV>
@@ -37534,7 +50359,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDeviceGeneratedCommandsPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV;
@@ -37570,8 +50397,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceGeneratedCommandsPropertiesNV &
- operator=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDeviceGeneratedCommandsPropertiesNV &
+ operator=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDeviceGeneratedCommandsPropertiesNV &
operator=( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37581,21 +50408,56 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV *>( this );
}
- operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ maxGraphicsShaderGroupCount,
+ maxIndirectSequenceCount,
+ maxIndirectCommandsTokenCount,
+ maxIndirectCommandsStreamCount,
+ maxIndirectCommandsTokenOffset,
+ maxIndirectCommandsStreamStride,
+ minSequencesCountBufferOffsetAlignment,
+ minSequencesIndexBufferOffsetAlignment,
+ minIndirectCommandsBufferOffsetAlignment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxGraphicsShaderGroupCount == rhs.maxGraphicsShaderGroupCount ) &&
( maxIndirectSequenceCount == rhs.maxIndirectSequenceCount ) &&
@@ -37606,6 +50468,7 @@ namespace VULKAN_HPP_NAMESPACE
( minSequencesCountBufferOffsetAlignment == rhs.minSequencesCountBufferOffsetAlignment ) &&
( minSequencesIndexBufferOffsetAlignment == rhs.minSequencesIndexBufferOffsetAlignment ) &&
( minIndirectCommandsBufferOffsetAlignment == rhs.minIndirectCommandsBufferOffsetAlignment );
+# endif
}
bool operator!=( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37627,11 +50490,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t minSequencesIndexBufferOffsetAlignment = {};
uint32_t minIndirectCommandsBufferOffsetAlignment = {};
};
- static_assert( sizeof( PhysicalDeviceDeviceGeneratedCommandsPropertiesNV ) ==
- sizeof( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDeviceGeneratedCommandsPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV ) ==
+ sizeof( VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceGeneratedCommandsPropertiesNV>::value,
+ "PhysicalDeviceDeviceGeneratedCommandsPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDeviceGeneratedCommandsPropertiesNV>
@@ -37641,7 +50508,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDeviceMemoryReportFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDeviceMemoryReportFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT;
@@ -37661,8 +50530,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT &
- operator=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDeviceMemoryReportFeaturesEXT &
+ operator=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDeviceMemoryReportFeaturesEXT &
operator=( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37672,13 +50541,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceDeviceMemoryReportFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceDeviceMemoryReportFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDeviceMemoryReportFeaturesEXT &
setDeviceMemoryReport( VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport_ ) VULKAN_HPP_NOEXCEPT
{
deviceMemoryReport = deviceMemoryReport_;
@@ -37686,22 +50555,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDeviceMemoryReportFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceMemoryReport );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceMemoryReport == rhs.deviceMemoryReport );
+# endif
}
bool operator!=( PhysicalDeviceDeviceMemoryReportFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37715,11 +50600,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 deviceMemoryReport = {};
};
- static_assert( sizeof( PhysicalDeviceDeviceMemoryReportFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDeviceMemoryReportFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceDeviceMemoryReportFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDeviceMemoryReportFeaturesEXT>::value,
+ "PhysicalDeviceDeviceMemoryReportFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDeviceMemoryReportFeaturesEXT>
@@ -37729,7 +50618,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDiagnosticsConfigFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDiagnosticsConfigFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV;
@@ -37749,8 +50640,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV &
- operator=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDiagnosticsConfigFeaturesNV &
+ operator=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDiagnosticsConfigFeaturesNV &
operator=( VkPhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37760,36 +50651,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceDiagnosticsConfigFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceDiagnosticsConfigFeaturesNV &
- setDiagnosticsConfig( VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiagnosticsConfigFeaturesNV &
+ setDiagnosticsConfig( VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig_ ) VULKAN_HPP_NOEXCEPT
{
diagnosticsConfig = diagnosticsConfig_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV *>( this );
}
- operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDiagnosticsConfigFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDiagnosticsConfigFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, diagnosticsConfig );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDiagnosticsConfigFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( diagnosticsConfig == rhs.diagnosticsConfig );
+# endif
}
bool operator!=( PhysicalDeviceDiagnosticsConfigFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37803,11 +50710,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 diagnosticsConfig = {};
};
- static_assert( sizeof( PhysicalDeviceDiagnosticsConfigFeaturesNV ) ==
- sizeof( VkPhysicalDeviceDiagnosticsConfigFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDiagnosticsConfigFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceDiagnosticsConfigFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDiagnosticsConfigFeaturesNV>::value,
+ "PhysicalDeviceDiagnosticsConfigFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDiagnosticsConfigFeaturesNV>
@@ -37817,7 +50728,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDiscardRectanglePropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceDiscardRectanglePropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT;
@@ -37837,8 +50750,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDiscardRectanglePropertiesEXT &
- operator=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDiscardRectanglePropertiesEXT &
+ operator=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDiscardRectanglePropertiesEXT &
operator=( VkPhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -37847,22 +50760,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceDiscardRectanglePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDiscardRectanglePropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT *>( this );
}
- operator VkPhysicalDeviceDiscardRectanglePropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDiscardRectanglePropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxDiscardRectangles );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDiscardRectanglePropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxDiscardRectangles == rhs.maxDiscardRectangles );
+# endif
}
bool operator!=( PhysicalDeviceDiscardRectanglePropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37876,11 +50805,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxDiscardRectangles = {};
};
- static_assert( sizeof( PhysicalDeviceDiscardRectanglePropertiesEXT ) ==
- sizeof( VkPhysicalDeviceDiscardRectanglePropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDiscardRectanglePropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceDiscardRectanglePropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDiscardRectanglePropertiesEXT>::value,
+ "PhysicalDeviceDiscardRectanglePropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDiscardRectanglePropertiesEXT>
@@ -37890,8 +50823,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDriverProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDriverProperties;
+ using NativeType = VkPhysicalDeviceDriverProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDriverProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDriverProperties(
@@ -37913,8 +50848,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDriverProperties &
- operator=( PhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDriverProperties &
+ operator=( PhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDriverProperties & operator=( VkPhysicalDeviceDriverProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -37922,24 +50857,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceDriverProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDriverProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDriverProperties *>( this );
}
- operator VkPhysicalDeviceDriverProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDriverProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDriverProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DriverId const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DRIVER_NAME_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DRIVER_INFO_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ConformanceVersion const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, driverID, driverName, driverInfo, conformanceVersion );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDriverProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( driverID == rhs.driverID ) &&
( driverName == rhs.driverName ) && ( driverInfo == rhs.driverInfo ) &&
( conformanceVersion == rhs.conformanceVersion );
+# endif
}
bool operator!=( PhysicalDeviceDriverProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -37956,10 +50912,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DRIVER_INFO_SIZE> driverInfo = {};
VULKAN_HPP_NAMESPACE::ConformanceVersion conformanceVersion = {};
};
- static_assert( sizeof( PhysicalDeviceDriverProperties ) == sizeof( VkPhysicalDeviceDriverProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDriverProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties ) ==
+ sizeof( VkPhysicalDeviceDriverProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDriverProperties>::value,
+ "PhysicalDeviceDriverProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDriverProperties>
@@ -37970,8 +50930,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceDrmPropertiesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDrmPropertiesEXT;
+ using NativeType = VkPhysicalDeviceDrmPropertiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceDrmPropertiesEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PhysicalDeviceDrmPropertiesEXT( VULKAN_HPP_NAMESPACE::Bool32 hasPrimary_ = {},
@@ -37996,8 +50958,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDrmPropertiesEXT &
- operator=( PhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceDrmPropertiesEXT &
+ operator=( PhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceDrmPropertiesEXT & operator=( VkPhysicalDeviceDrmPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -38005,25 +50967,48 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceDrmPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDrmPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceDrmPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceDrmPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceDrmPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceDrmPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ int64_t const &,
+ int64_t const &,
+ int64_t const &,
+ int64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, hasPrimary, hasRender, primaryMajor, primaryMinor, renderMajor, renderMinor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceDrmPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceDrmPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hasPrimary == rhs.hasPrimary ) &&
( hasRender == rhs.hasRender ) && ( primaryMajor == rhs.primaryMajor ) &&
( primaryMinor == rhs.primaryMinor ) && ( renderMajor == rhs.renderMajor ) &&
( renderMinor == rhs.renderMinor );
+# endif
}
bool operator!=( PhysicalDeviceDrmPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38042,10 +51027,14 @@ namespace VULKAN_HPP_NAMESPACE
int64_t renderMajor = {};
int64_t renderMinor = {};
};
- static_assert( sizeof( PhysicalDeviceDrmPropertiesEXT ) == sizeof( VkPhysicalDeviceDrmPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceDrmPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceDrmPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDrmPropertiesEXT>::value,
+ "PhysicalDeviceDrmPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceDrmPropertiesEXT>
@@ -38053,9 +51042,121 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceDrmPropertiesEXT;
};
+ struct PhysicalDeviceDynamicRenderingFeatures
+ {
+ using NativeType = VkPhysicalDeviceDynamicRenderingFeatures;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceDynamicRenderingFeatures;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceDynamicRenderingFeatures( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ = {} ) VULKAN_HPP_NOEXCEPT
+ : dynamicRendering( dynamicRendering_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceDynamicRenderingFeatures( PhysicalDeviceDynamicRenderingFeatures const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceDynamicRenderingFeatures( VkPhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceDynamicRenderingFeatures(
+ *reinterpret_cast<PhysicalDeviceDynamicRenderingFeatures const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceDynamicRenderingFeatures &
+ operator=( PhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceDynamicRenderingFeatures &
+ operator=( VkPhysicalDeviceDynamicRenderingFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceDynamicRenderingFeatures &
+ setDynamicRendering( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ ) VULKAN_HPP_NOEXCEPT
+ {
+ dynamicRendering = dynamicRendering_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceDynamicRenderingFeatures const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceDynamicRenderingFeatures *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceDynamicRenderingFeatures &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceDynamicRenderingFeatures *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, dynamicRendering );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceDynamicRenderingFeatures const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceDynamicRenderingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dynamicRendering == rhs.dynamicRendering );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceDynamicRenderingFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceDynamicRenderingFeatures;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures ) ==
+ sizeof( VkPhysicalDeviceDynamicRenderingFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceDynamicRenderingFeatures>::value,
+ "PhysicalDeviceDynamicRenderingFeatures is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceDynamicRenderingFeatures>
+ {
+ using Type = PhysicalDeviceDynamicRenderingFeatures;
+ };
+ using PhysicalDeviceDynamicRenderingFeaturesKHR = PhysicalDeviceDynamicRenderingFeatures;
+
struct PhysicalDeviceExclusiveScissorFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExclusiveScissorFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV;
@@ -38074,8 +51175,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV &
- operator=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExclusiveScissorFeaturesNV &
+ operator=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExclusiveScissorFeaturesNV &
operator=( VkPhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38085,36 +51186,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExclusiveScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExclusiveScissorFeaturesNV &
- setExclusiveScissor( VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExclusiveScissorFeaturesNV &
+ setExclusiveScissor( VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor_ ) VULKAN_HPP_NOEXCEPT
{
exclusiveScissor = exclusiveScissor_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExclusiveScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExclusiveScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV *>( this );
}
- operator VkPhysicalDeviceExclusiveScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExclusiveScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExclusiveScissorFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, exclusiveScissor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExclusiveScissorFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( exclusiveScissor == rhs.exclusiveScissor );
+# endif
}
bool operator!=( PhysicalDeviceExclusiveScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38128,11 +51245,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 exclusiveScissor = {};
};
- static_assert( sizeof( PhysicalDeviceExclusiveScissorFeaturesNV ) ==
- sizeof( VkPhysicalDeviceExclusiveScissorFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExclusiveScissorFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceExclusiveScissorFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExclusiveScissorFeaturesNV>::value,
+ "PhysicalDeviceExclusiveScissorFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExclusiveScissorFeaturesNV>
@@ -38142,7 +51263,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExtendedDynamicState2FeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExtendedDynamicState2FeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT;
@@ -38166,8 +51289,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT &
- operator=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExtendedDynamicState2FeaturesEXT &
+ operator=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExtendedDynamicState2FeaturesEXT &
operator=( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38177,27 +51300,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExtendedDynamicState2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExtendedDynamicState2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT &
setExtendedDynamicState2( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2_ ) VULKAN_HPP_NOEXCEPT
{
extendedDynamicState2 = extendedDynamicState2_;
return *this;
}
- PhysicalDeviceExtendedDynamicState2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT &
setExtendedDynamicState2LogicOp( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp_ ) VULKAN_HPP_NOEXCEPT
{
extendedDynamicState2LogicOp = extendedDynamicState2LogicOp_;
return *this;
}
- PhysicalDeviceExtendedDynamicState2FeaturesEXT & setExtendedDynamicState2PatchControlPoints(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicState2FeaturesEXT & setExtendedDynamicState2PatchControlPoints(
VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints_ ) VULKAN_HPP_NOEXCEPT
{
extendedDynamicState2PatchControlPoints = extendedDynamicState2PatchControlPoints_;
@@ -38205,25 +51329,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *>( this );
}
- operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExtendedDynamicState2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExtendedDynamicState2FeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, extendedDynamicState2, extendedDynamicState2LogicOp, extendedDynamicState2PatchControlPoints );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( extendedDynamicState2 == rhs.extendedDynamicState2 ) &&
( extendedDynamicState2LogicOp == rhs.extendedDynamicState2LogicOp ) &&
( extendedDynamicState2PatchControlPoints == rhs.extendedDynamicState2PatchControlPoints );
+# endif
}
bool operator!=( PhysicalDeviceExtendedDynamicState2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38239,11 +51384,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2LogicOp = {};
VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState2PatchControlPoints = {};
};
- static_assert( sizeof( PhysicalDeviceExtendedDynamicState2FeaturesEXT ) ==
- sizeof( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExtendedDynamicState2FeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceExtendedDynamicState2FeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicState2FeaturesEXT>::value,
+ "PhysicalDeviceExtendedDynamicState2FeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExtendedDynamicState2FeaturesEXT>
@@ -38253,7 +51402,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExtendedDynamicStateFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExtendedDynamicStateFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT;
@@ -38273,8 +51424,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT &
- operator=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExtendedDynamicStateFeaturesEXT &
+ operator=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExtendedDynamicStateFeaturesEXT &
operator=( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38284,13 +51435,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExtendedDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExtendedDynamicStateFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExtendedDynamicStateFeaturesEXT &
setExtendedDynamicState( VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState_ ) VULKAN_HPP_NOEXCEPT
{
extendedDynamicState = extendedDynamicState_;
@@ -38298,22 +51450,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExtendedDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, extendedDynamicState );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( extendedDynamicState == rhs.extendedDynamicState );
+# endif
}
bool operator!=( PhysicalDeviceExtendedDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38327,11 +51495,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 extendedDynamicState = {};
};
- static_assert( sizeof( PhysicalDeviceExtendedDynamicStateFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExtendedDynamicStateFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceExtendedDynamicStateFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExtendedDynamicStateFeaturesEXT>::value,
+ "PhysicalDeviceExtendedDynamicStateFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExtendedDynamicStateFeaturesEXT>
@@ -38341,7 +51513,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExternalBufferInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExternalBufferInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalBufferInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -38363,8 +51537,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo &
- operator=( PhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExternalBufferInfo &
+ operator=( PhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExternalBufferInfo & operator=( VkPhysicalDeviceExternalBufferInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -38373,25 +51547,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExternalBufferInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExternalBufferInfo & setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::BufferCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PhysicalDeviceExternalBufferInfo & setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo &
+ setUsage( VULKAN_HPP_NAMESPACE::BufferUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
{
usage = usage_;
return *this;
}
- PhysicalDeviceExternalBufferInfo &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalBufferInfo &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -38399,23 +51575,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExternalBufferInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalBufferInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExternalBufferInfo *>( this );
}
- operator VkPhysicalDeviceExternalBufferInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalBufferInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExternalBufferInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::BufferCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::BufferUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, usage, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExternalBufferInfo const & ) const = default;
#else
bool operator==( PhysicalDeviceExternalBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( usage == rhs.usage ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( PhysicalDeviceExternalBufferInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38432,10 +51628,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( PhysicalDeviceExternalBufferInfo ) == sizeof( VkPhysicalDeviceExternalBufferInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExternalBufferInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo ) ==
+ sizeof( VkPhysicalDeviceExternalBufferInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalBufferInfo>::value,
+ "PhysicalDeviceExternalBufferInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExternalBufferInfo>
@@ -38446,8 +51646,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExternalFenceInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalFenceInfo;
+ using NativeType = VkPhysicalDeviceExternalFenceInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceExternalFenceInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PhysicalDeviceExternalFenceInfo(
@@ -38464,8 +51666,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo &
- operator=( PhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExternalFenceInfo &
+ operator=( PhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExternalFenceInfo & operator=( VkPhysicalDeviceExternalFenceInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -38474,13 +51676,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExternalFenceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExternalFenceInfo &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalFenceInfo &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -38488,22 +51690,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExternalFenceInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalFenceInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExternalFenceInfo *>( this );
}
- operator VkPhysicalDeviceExternalFenceInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalFenceInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExternalFenceInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExternalFenceInfo const & ) const = default;
#else
bool operator==( PhysicalDeviceExternalFenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType );
+# endif
}
bool operator!=( PhysicalDeviceExternalFenceInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38518,10 +51738,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalFenceHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( PhysicalDeviceExternalFenceInfo ) == sizeof( VkPhysicalDeviceExternalFenceInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExternalFenceInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo ) ==
+ sizeof( VkPhysicalDeviceExternalFenceInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalFenceInfo>::value,
+ "PhysicalDeviceExternalFenceInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExternalFenceInfo>
@@ -38532,7 +51756,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExternalImageFormatInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExternalImageFormatInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExternalImageFormatInfo;
@@ -38552,8 +51778,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo &
- operator=( PhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExternalImageFormatInfo &
+ operator=( PhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExternalImageFormatInfo &
operator=( VkPhysicalDeviceExternalImageFormatInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38563,13 +51789,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExternalImageFormatInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExternalImageFormatInfo &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalImageFormatInfo &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -38577,22 +51803,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExternalImageFormatInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalImageFormatInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo *>( this );
}
- operator VkPhysicalDeviceExternalImageFormatInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalImageFormatInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExternalImageFormatInfo const & ) const = default;
#else
bool operator==( PhysicalDeviceExternalImageFormatInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType );
+# endif
}
bool operator!=( PhysicalDeviceExternalImageFormatInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38607,10 +51851,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalMemoryHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( PhysicalDeviceExternalImageFormatInfo ) == sizeof( VkPhysicalDeviceExternalImageFormatInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExternalImageFormatInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo ) ==
+ sizeof( VkPhysicalDeviceExternalImageFormatInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalImageFormatInfo>::value,
+ "PhysicalDeviceExternalImageFormatInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExternalImageFormatInfo>
@@ -38621,7 +51869,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExternalMemoryHostPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExternalMemoryHostPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT;
@@ -38641,8 +51891,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryHostPropertiesEXT &
- operator=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExternalMemoryHostPropertiesEXT &
+ operator=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExternalMemoryHostPropertiesEXT &
operator=( VkPhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38651,23 +51901,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalMemoryHostPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, minImportedHostPointerAlignment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExternalMemoryHostPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( minImportedHostPointerAlignment == rhs.minImportedHostPointerAlignment );
+# endif
}
bool operator!=( PhysicalDeviceExternalMemoryHostPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38681,11 +51947,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceSize minImportedHostPointerAlignment = {};
};
- static_assert( sizeof( PhysicalDeviceExternalMemoryHostPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceExternalMemoryHostPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExternalMemoryHostPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceExternalMemoryHostPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryHostPropertiesEXT>::value,
+ "PhysicalDeviceExternalMemoryHostPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExternalMemoryHostPropertiesEXT>
@@ -38695,7 +51965,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExternalMemoryRDMAFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExternalMemoryRDMAFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV;
@@ -38715,8 +51987,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV &
- operator=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExternalMemoryRDMAFeaturesNV &
+ operator=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExternalMemoryRDMAFeaturesNV &
operator=( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38726,13 +51998,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExternalMemoryRDMAFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExternalMemoryRDMAFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalMemoryRDMAFeaturesNV &
setExternalMemoryRDMA( VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA_ ) VULKAN_HPP_NOEXCEPT
{
externalMemoryRDMA = externalMemoryRDMA_;
@@ -38740,22 +52012,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *>( this );
}
- operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalMemoryRDMAFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExternalMemoryRDMAFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, externalMemoryRDMA );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( externalMemoryRDMA == rhs.externalMemoryRDMA );
+# endif
}
bool operator!=( PhysicalDeviceExternalMemoryRDMAFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38769,11 +52057,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 externalMemoryRDMA = {};
};
- static_assert( sizeof( PhysicalDeviceExternalMemoryRDMAFeaturesNV ) ==
- sizeof( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExternalMemoryRDMAFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceExternalMemoryRDMAFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalMemoryRDMAFeaturesNV>::value,
+ "PhysicalDeviceExternalMemoryRDMAFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExternalMemoryRdmaFeaturesNV>
@@ -38783,7 +52075,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceExternalSemaphoreInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceExternalSemaphoreInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceExternalSemaphoreInfo;
@@ -38802,8 +52096,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo &
- operator=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceExternalSemaphoreInfo &
+ operator=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceExternalSemaphoreInfo &
operator=( VkPhysicalDeviceExternalSemaphoreInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -38813,13 +52107,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceExternalSemaphoreInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceExternalSemaphoreInfo &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceExternalSemaphoreInfo &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -38827,22 +52121,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceExternalSemaphoreInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalSemaphoreInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceExternalSemaphoreInfo *>( this );
}
- operator VkPhysicalDeviceExternalSemaphoreInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceExternalSemaphoreInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceExternalSemaphoreInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceExternalSemaphoreInfo const & ) const = default;
#else
bool operator==( PhysicalDeviceExternalSemaphoreInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( handleType == rhs.handleType );
+# endif
}
bool operator!=( PhysicalDeviceExternalSemaphoreInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38857,10 +52169,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( PhysicalDeviceExternalSemaphoreInfo ) == sizeof( VkPhysicalDeviceExternalSemaphoreInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceExternalSemaphoreInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo ) ==
+ sizeof( VkPhysicalDeviceExternalSemaphoreInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceExternalSemaphoreInfo>::value,
+ "PhysicalDeviceExternalSemaphoreInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceExternalSemaphoreInfo>
@@ -38871,8 +52187,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFeatures2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFeatures2;
+ using NativeType = VkPhysicalDeviceFeatures2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceFeatures2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -38887,8 +52205,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 &
- operator=( PhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFeatures2 & operator=( PhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFeatures2 & operator=( VkPhysicalDeviceFeatures2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -38897,13 +52214,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFeatures2 & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFeatures2 &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFeatures2 &
setFeatures( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const & features_ ) VULKAN_HPP_NOEXCEPT
{
features = features_;
@@ -38911,22 +52228,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFeatures2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFeatures2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFeatures2 *>( this );
}
- operator VkPhysicalDeviceFeatures2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFeatures2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFeatures2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, features );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFeatures2 const & ) const = default;
#else
bool operator==( PhysicalDeviceFeatures2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( features == rhs.features );
+# endif
}
bool operator!=( PhysicalDeviceFeatures2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -38940,9 +52275,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures features = {};
};
- static_assert( sizeof( PhysicalDeviceFeatures2 ) == sizeof( VkPhysicalDeviceFeatures2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFeatures2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2 ) ==
+ sizeof( VkPhysicalDeviceFeatures2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFeatures2>::value,
+ "PhysicalDeviceFeatures2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFeatures2>
@@ -38953,7 +52292,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFloatControlsProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFloatControlsProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFloatControlsProperties;
@@ -39006,8 +52347,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFloatControlsProperties &
- operator=( PhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFloatControlsProperties &
+ operator=( PhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFloatControlsProperties &
operator=( VkPhysicalDeviceFloatControlsProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39016,21 +52357,72 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceFloatControlsProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFloatControlsProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties *>( this );
}
- operator VkPhysicalDeviceFloatControlsProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFloatControlsProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFloatControlsProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &,
+ VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ denormBehaviorIndependence,
+ roundingModeIndependence,
+ shaderSignedZeroInfNanPreserveFloat16,
+ shaderSignedZeroInfNanPreserveFloat32,
+ shaderSignedZeroInfNanPreserveFloat64,
+ shaderDenormPreserveFloat16,
+ shaderDenormPreserveFloat32,
+ shaderDenormPreserveFloat64,
+ shaderDenormFlushToZeroFloat16,
+ shaderDenormFlushToZeroFloat32,
+ shaderDenormFlushToZeroFloat64,
+ shaderRoundingModeRTEFloat16,
+ shaderRoundingModeRTEFloat32,
+ shaderRoundingModeRTEFloat64,
+ shaderRoundingModeRTZFloat16,
+ shaderRoundingModeRTZFloat32,
+ shaderRoundingModeRTZFloat64 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFloatControlsProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceFloatControlsProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( denormBehaviorIndependence == rhs.denormBehaviorIndependence ) &&
( roundingModeIndependence == rhs.roundingModeIndependence ) &&
@@ -39049,6 +52441,7 @@ namespace VULKAN_HPP_NAMESPACE
( shaderRoundingModeRTZFloat16 == rhs.shaderRoundingModeRTZFloat16 ) &&
( shaderRoundingModeRTZFloat32 == rhs.shaderRoundingModeRTZFloat32 ) &&
( shaderRoundingModeRTZFloat64 == rhs.shaderRoundingModeRTZFloat64 );
+# endif
}
bool operator!=( PhysicalDeviceFloatControlsProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39080,10 +52473,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat32 = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderRoundingModeRTZFloat64 = {};
};
- static_assert( sizeof( PhysicalDeviceFloatControlsProperties ) == sizeof( VkPhysicalDeviceFloatControlsProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFloatControlsProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties ) ==
+ sizeof( VkPhysicalDeviceFloatControlsProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFloatControlsProperties>::value,
+ "PhysicalDeviceFloatControlsProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFloatControlsProperties>
@@ -39094,7 +52491,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentDensityMap2FeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentDensityMap2FeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT;
@@ -39114,8 +52513,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT &
- operator=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentDensityMap2FeaturesEXT &
+ operator=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentDensityMap2FeaturesEXT &
operator=( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39125,13 +52524,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentDensityMap2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentDensityMap2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2FeaturesEXT &
setFragmentDensityMapDeferred( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred_ ) VULKAN_HPP_NOEXCEPT
{
fragmentDensityMapDeferred = fragmentDensityMapDeferred_;
@@ -39139,23 +52538,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *>( this );
}
- operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMap2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentDensityMapDeferred );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( fragmentDensityMapDeferred == rhs.fragmentDensityMapDeferred );
+# endif
}
bool operator!=( PhysicalDeviceFragmentDensityMap2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39169,11 +52584,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDeferred = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentDensityMap2FeaturesEXT ) ==
- sizeof( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentDensityMap2FeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceFragmentDensityMap2FeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2FeaturesEXT>::value,
+ "PhysicalDeviceFragmentDensityMap2FeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentDensityMap2FeaturesEXT>
@@ -39183,7 +52602,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentDensityMap2PropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentDensityMap2PropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT;
@@ -39209,8 +52630,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMap2PropertiesEXT &
- operator=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentDensityMap2PropertiesEXT &
+ operator=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentDensityMap2PropertiesEXT &
operator=( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39219,25 +52640,51 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *>( this );
}
- operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMap2PropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ subsampledLoads,
+ subsampledCoarseReconstructionEarlyAccess,
+ maxSubsampledArrayLayers,
+ maxDescriptorSetSubsampledSamplers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subsampledLoads == rhs.subsampledLoads ) &&
( subsampledCoarseReconstructionEarlyAccess == rhs.subsampledCoarseReconstructionEarlyAccess ) &&
( maxSubsampledArrayLayers == rhs.maxSubsampledArrayLayers ) &&
( maxDescriptorSetSubsampledSamplers == rhs.maxDescriptorSetSubsampledSamplers );
+# endif
}
bool operator!=( PhysicalDeviceFragmentDensityMap2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39254,11 +52701,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxSubsampledArrayLayers = {};
uint32_t maxDescriptorSetSubsampledSamplers = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentDensityMap2PropertiesEXT ) ==
- sizeof( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentDensityMap2PropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceFragmentDensityMap2PropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMap2PropertiesEXT>::value,
+ "PhysicalDeviceFragmentDensityMap2PropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentDensityMap2PropertiesEXT>
@@ -39268,7 +52719,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentDensityMapFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentDensityMapFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT;
@@ -39292,8 +52745,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT &
- operator=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentDensityMapFeaturesEXT &
+ operator=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentDensityMapFeaturesEXT &
operator=( VkPhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39303,27 +52756,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentDensityMapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentDensityMapFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT &
setFragmentDensityMap( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMap_ ) VULKAN_HPP_NOEXCEPT
{
fragmentDensityMap = fragmentDensityMap_;
return *this;
}
- PhysicalDeviceFragmentDensityMapFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT &
setFragmentDensityMapDynamic( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic_ ) VULKAN_HPP_NOEXCEPT
{
fragmentDensityMapDynamic = fragmentDensityMapDynamic_;
return *this;
}
- PhysicalDeviceFragmentDensityMapFeaturesEXT & setFragmentDensityMapNonSubsampledImages(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapFeaturesEXT & setFragmentDensityMapNonSubsampledImages(
VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages_ ) VULKAN_HPP_NOEXCEPT
{
fragmentDensityMapNonSubsampledImages = fragmentDensityMapNonSubsampledImages_;
@@ -39331,24 +52784,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMapFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, fragmentDensityMap, fragmentDensityMapDynamic, fragmentDensityMapNonSubsampledImages );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentDensityMapFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentDensityMap == rhs.fragmentDensityMap ) &&
( fragmentDensityMapDynamic == rhs.fragmentDensityMapDynamic ) &&
( fragmentDensityMapNonSubsampledImages == rhs.fragmentDensityMapNonSubsampledImages );
+# endif
}
bool operator!=( PhysicalDeviceFragmentDensityMapFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39364,11 +52838,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapDynamic = {};
VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapNonSubsampledImages = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentDensityMapFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceFragmentDensityMapFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentDensityMapFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceFragmentDensityMapFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapFeaturesEXT>::value,
+ "PhysicalDeviceFragmentDensityMapFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentDensityMapFeaturesEXT>
@@ -39376,9 +52854,221 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceFragmentDensityMapFeaturesEXT;
};
+ struct PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM
+ {
+ using NativeType = VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM(
+ VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset_ = {} ) VULKAN_HPP_NOEXCEPT
+ : fragmentDensityMapOffset( fragmentDensityMapOffset_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM(
+ PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM(
+ VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM(
+ *reinterpret_cast<PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM &
+ operator=( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM &
+ operator=( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this =
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM &
+ setFragmentDensityMapOffset( VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset_ ) VULKAN_HPP_NOEXCEPT
+ {
+ fragmentDensityMapOffset = fragmentDensityMapOffset_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentDensityMapOffset );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( fragmentDensityMapOffset == rhs.fragmentDensityMapOffset );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityMapOffset = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM ) ==
+ sizeof( VkPhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>::value,
+ "PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM>
+ {
+ using Type = PhysicalDeviceFragmentDensityMapOffsetFeaturesQCOM;
+ };
+
+ struct PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM
+ {
+ using NativeType = VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM(
+ VULKAN_HPP_NAMESPACE::Extent2D fragmentDensityOffsetGranularity_ = {} ) VULKAN_HPP_NOEXCEPT
+ : fragmentDensityOffsetGranularity( fragmentDensityOffsetGranularity_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM(
+ PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM(
+ VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM(
+ *reinterpret_cast<PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM &
+ operator=( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM &
+ operator=( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this =
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentDensityOffsetGranularity );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( fragmentDensityOffsetGranularity == rhs.fragmentDensityOffsetGranularity );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Extent2D fragmentDensityOffsetGranularity = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM ) ==
+ sizeof( VkPhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM>::value,
+ "PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM>
+ {
+ using Type = PhysicalDeviceFragmentDensityMapOffsetPropertiesQCOM;
+ };
+
struct PhysicalDeviceFragmentDensityMapPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentDensityMapPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT;
@@ -39402,8 +53092,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentDensityMapPropertiesEXT &
- operator=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentDensityMapPropertiesEXT &
+ operator=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentDensityMapPropertiesEXT &
operator=( VkPhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39412,25 +53102,46 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentDensityMapPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, minFragmentDensityTexelSize, maxFragmentDensityTexelSize, fragmentDensityInvocations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentDensityMapPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( minFragmentDensityTexelSize == rhs.minFragmentDensityTexelSize ) &&
( maxFragmentDensityTexelSize == rhs.maxFragmentDensityTexelSize ) &&
( fragmentDensityInvocations == rhs.fragmentDensityInvocations );
+# endif
}
bool operator!=( PhysicalDeviceFragmentDensityMapPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39446,11 +53157,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent2D maxFragmentDensityTexelSize = {};
VULKAN_HPP_NAMESPACE::Bool32 fragmentDensityInvocations = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentDensityMapPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceFragmentDensityMapPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentDensityMapPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceFragmentDensityMapPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentDensityMapPropertiesEXT>::value,
+ "PhysicalDeviceFragmentDensityMapPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentDensityMapPropertiesEXT>
@@ -39460,7 +53175,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShaderBarycentricFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesNV;
@@ -39480,8 +53197,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesNV &
- operator=( PhysicalDeviceFragmentShaderBarycentricFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShaderBarycentricFeaturesNV &
+ operator=( PhysicalDeviceFragmentShaderBarycentricFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShaderBarycentricFeaturesNV &
operator=( VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39492,13 +53209,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentShaderBarycentricFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentShaderBarycentricFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderBarycentricFeaturesNV &
setFragmentShaderBarycentric( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric_ ) VULKAN_HPP_NOEXCEPT
{
fragmentShaderBarycentric = fragmentShaderBarycentric_;
@@ -39506,23 +53224,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV *>( this );
}
- operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentShaderBarycentric );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShaderBarycentricFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShaderBarycentricFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( fragmentShaderBarycentric == rhs.fragmentShaderBarycentric );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShaderBarycentricFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39536,11 +53270,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderBarycentric = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentShaderBarycentricFeaturesNV ) ==
- sizeof( VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShaderBarycentricFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderBarycentricFeaturesNV>::value,
+ "PhysicalDeviceFragmentShaderBarycentricFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShaderBarycentricFeaturesNV>
@@ -39550,7 +53288,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShaderInterlockFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT;
@@ -39574,8 +53314,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT &
- operator=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShaderInterlockFeaturesEXT &
+ operator=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShaderInterlockFeaturesEXT &
operator=( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39585,27 +53325,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setFragmentShaderSampleInterlock(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setFragmentShaderSampleInterlock(
VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderSampleInterlock_ ) VULKAN_HPP_NOEXCEPT
{
fragmentShaderSampleInterlock = fragmentShaderSampleInterlock_;
return *this;
}
- PhysicalDeviceFragmentShaderInterlockFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT &
setFragmentShaderPixelInterlock( VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock_ ) VULKAN_HPP_NOEXCEPT
{
fragmentShaderPixelInterlock = fragmentShaderPixelInterlock_;
return *this;
}
- PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setFragmentShaderShadingRateInterlock(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShaderInterlockFeaturesEXT & setFragmentShaderShadingRateInterlock(
VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock_ ) VULKAN_HPP_NOEXCEPT
{
fragmentShaderShadingRateInterlock = fragmentShaderShadingRateInterlock_;
@@ -39613,25 +53354,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, fragmentShaderSampleInterlock, fragmentShaderPixelInterlock, fragmentShaderShadingRateInterlock );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( fragmentShaderSampleInterlock == rhs.fragmentShaderSampleInterlock ) &&
( fragmentShaderPixelInterlock == rhs.fragmentShaderPixelInterlock ) &&
( fragmentShaderShadingRateInterlock == rhs.fragmentShaderShadingRateInterlock );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShaderInterlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39647,11 +53409,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderPixelInterlock = {};
VULKAN_HPP_NAMESPACE::Bool32 fragmentShaderShadingRateInterlock = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentShaderInterlockFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShaderInterlockFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShaderInterlockFeaturesEXT>::value,
+ "PhysicalDeviceFragmentShaderInterlockFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShaderInterlockFeaturesEXT>
@@ -39661,7 +53427,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShadingRateEnumsFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV;
@@ -39685,8 +53453,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV &
- operator=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShadingRateEnumsFeaturesNV &
+ operator=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShadingRateEnumsFeaturesNV &
operator=( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39696,27 +53464,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentShadingRateEnumsFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV &
setFragmentShadingRateEnums( VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateEnums_ ) VULKAN_HPP_NOEXCEPT
{
fragmentShadingRateEnums = fragmentShadingRateEnums_;
return *this;
}
- PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setSupersampleFragmentShadingRates(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setSupersampleFragmentShadingRates(
VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates_ ) VULKAN_HPP_NOEXCEPT
{
supersampleFragmentShadingRates = supersampleFragmentShadingRates_;
return *this;
}
- PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setNoInvocationFragmentShadingRates(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsFeaturesNV & setNoInvocationFragmentShadingRates(
VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates_ ) VULKAN_HPP_NOEXCEPT
{
noInvocationFragmentShadingRates = noInvocationFragmentShadingRates_;
@@ -39724,25 +53493,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *>( this );
}
- operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, fragmentShadingRateEnums, supersampleFragmentShadingRates, noInvocationFragmentShadingRates );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( fragmentShadingRateEnums == rhs.fragmentShadingRateEnums ) &&
( supersampleFragmentShadingRates == rhs.supersampleFragmentShadingRates ) &&
( noInvocationFragmentShadingRates == rhs.noInvocationFragmentShadingRates );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39758,11 +53548,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 supersampleFragmentShadingRates = {};
VULKAN_HPP_NAMESPACE::Bool32 noInvocationFragmentShadingRates = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentShadingRateEnumsFeaturesNV ) ==
- sizeof( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShadingRateEnumsFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsFeaturesNV>::value,
+ "PhysicalDeviceFragmentShadingRateEnumsFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShadingRateEnumsFeaturesNV>
@@ -39772,7 +53566,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShadingRateEnumsPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV;
@@ -39793,8 +53589,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV &
- operator=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShadingRateEnumsPropertiesNV &
+ operator=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShadingRateEnumsPropertiesNV &
operator=( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39805,37 +53601,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentShadingRateEnumsPropertiesNV & setMaxFragmentShadingRateInvocationCount(
- VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateEnumsPropertiesNV &
+ setMaxFragmentShadingRateInvocationCount(
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount_ ) VULKAN_HPP_NOEXCEPT
{
maxFragmentShadingRateInvocationCount = maxFragmentShadingRateInvocationCount_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV *>( this );
}
- operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxFragmentShadingRateInvocationCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxFragmentShadingRateInvocationCount == rhs.maxFragmentShadingRateInvocationCount );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39850,11 +53666,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SampleCountFlagBits maxFragmentShadingRateInvocationCount =
VULKAN_HPP_NAMESPACE::SampleCountFlagBits::e1;
};
- static_assert( sizeof( PhysicalDeviceFragmentShadingRateEnumsPropertiesNV ) ==
- sizeof( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShadingRateEnumsPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV ) ==
+ sizeof( VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateEnumsPropertiesNV>::value,
+ "PhysicalDeviceFragmentShadingRateEnumsPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShadingRateEnumsPropertiesNV>
@@ -39864,7 +53684,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShadingRateFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShadingRateFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR;
@@ -39888,8 +53710,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR &
- operator=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShadingRateFeaturesKHR &
+ operator=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShadingRateFeaturesKHR &
operator=( VkPhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -39899,27 +53721,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceFragmentShadingRateFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceFragmentShadingRateFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR &
setPipelineFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 pipelineFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT
{
pipelineFragmentShadingRate = pipelineFragmentShadingRate_;
return *this;
}
- PhysicalDeviceFragmentShadingRateFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR &
setPrimitiveFragmentShadingRate( VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT
{
primitiveFragmentShadingRate = primitiveFragmentShadingRate_;
return *this;
}
- PhysicalDeviceFragmentShadingRateFeaturesKHR & setAttachmentFragmentShadingRate(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateFeaturesKHR & setAttachmentFragmentShadingRate(
VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate_ ) VULKAN_HPP_NOEXCEPT
{
attachmentFragmentShadingRate = attachmentFragmentShadingRate_;
@@ -39927,25 +53749,46 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, pipelineFragmentShadingRate, primitiveFragmentShadingRate, attachmentFragmentShadingRate );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShadingRateFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( pipelineFragmentShadingRate == rhs.pipelineFragmentShadingRate ) &&
( primitiveFragmentShadingRate == rhs.primitiveFragmentShadingRate ) &&
( attachmentFragmentShadingRate == rhs.attachmentFragmentShadingRate );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShadingRateFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -39961,11 +53804,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 primitiveFragmentShadingRate = {};
VULKAN_HPP_NAMESPACE::Bool32 attachmentFragmentShadingRate = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentShadingRateFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceFragmentShadingRateFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShadingRateFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceFragmentShadingRateFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateFeaturesKHR>::value,
+ "PhysicalDeviceFragmentShadingRateFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShadingRateFeaturesKHR>
@@ -39975,7 +53822,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShadingRateKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShadingRateKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShadingRateKHR;
@@ -39995,8 +53844,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRateKHR &
- operator=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShadingRateKHR &
+ operator=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShadingRateKHR &
operator=( VkPhysicalDeviceFragmentShadingRateKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -40005,23 +53854,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceFragmentShadingRateKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateKHR *>( this );
}
- operator VkPhysicalDeviceFragmentShadingRateKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRateKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShadingRateKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, sampleCounts, fragmentSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShadingRateKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShadingRateKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleCounts == rhs.sampleCounts ) &&
( fragmentSize == rhs.fragmentSize );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShadingRateKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40036,10 +53904,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SampleCountFlags sampleCounts = {};
VULKAN_HPP_NAMESPACE::Extent2D fragmentSize = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentShadingRateKHR ) == sizeof( VkPhysicalDeviceFragmentShadingRateKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShadingRateKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR ) ==
+ sizeof( VkPhysicalDeviceFragmentShadingRateKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRateKHR>::value,
+ "PhysicalDeviceFragmentShadingRateKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShadingRateKHR>
@@ -40049,7 +53921,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceFragmentShadingRatePropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceFragmentShadingRatePropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR;
@@ -40102,8 +53976,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceFragmentShadingRatePropertiesKHR &
- operator=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceFragmentShadingRatePropertiesKHR &
+ operator=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceFragmentShadingRatePropertiesKHR &
operator=( VkPhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -40112,21 +53986,72 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR *>( this );
}
- operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceFragmentShadingRatePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceFragmentShadingRatePropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ minFragmentShadingRateAttachmentTexelSize,
+ maxFragmentShadingRateAttachmentTexelSize,
+ maxFragmentShadingRateAttachmentTexelSizeAspectRatio,
+ primitiveFragmentShadingRateWithMultipleViewports,
+ layeredShadingRateAttachments,
+ fragmentShadingRateNonTrivialCombinerOps,
+ maxFragmentSize,
+ maxFragmentSizeAspectRatio,
+ maxFragmentShadingRateCoverageSamples,
+ maxFragmentShadingRateRasterizationSamples,
+ fragmentShadingRateWithShaderDepthStencilWrites,
+ fragmentShadingRateWithSampleMask,
+ fragmentShadingRateWithShaderSampleMask,
+ fragmentShadingRateWithConservativeRasterization,
+ fragmentShadingRateWithFragmentShaderInterlock,
+ fragmentShadingRateWithCustomSampleLocations,
+ fragmentShadingRateStrictMultiplyCombiner );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceFragmentShadingRatePropertiesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( minFragmentShadingRateAttachmentTexelSize == rhs.minFragmentShadingRateAttachmentTexelSize ) &&
( maxFragmentShadingRateAttachmentTexelSize == rhs.maxFragmentShadingRateAttachmentTexelSize ) &&
@@ -40149,6 +54074,7 @@ namespace VULKAN_HPP_NAMESPACE
( fragmentShadingRateWithFragmentShaderInterlock == rhs.fragmentShadingRateWithFragmentShaderInterlock ) &&
( fragmentShadingRateWithCustomSampleLocations == rhs.fragmentShadingRateWithCustomSampleLocations ) &&
( fragmentShadingRateStrictMultiplyCombiner == rhs.fragmentShadingRateStrictMultiplyCombiner );
+# endif
}
bool operator!=( PhysicalDeviceFragmentShadingRatePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40179,11 +54105,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateWithCustomSampleLocations = {};
VULKAN_HPP_NAMESPACE::Bool32 fragmentShadingRateStrictMultiplyCombiner = {};
};
- static_assert( sizeof( PhysicalDeviceFragmentShadingRatePropertiesKHR ) ==
- sizeof( VkPhysicalDeviceFragmentShadingRatePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceFragmentShadingRatePropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR ) ==
+ sizeof( VkPhysicalDeviceFragmentShadingRatePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceFragmentShadingRatePropertiesKHR>::value,
+ "PhysicalDeviceFragmentShadingRatePropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceFragmentShadingRatePropertiesKHR>
@@ -40191,46 +54121,48 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceFragmentShadingRatePropertiesKHR;
};
- struct PhysicalDeviceGlobalPriorityQueryFeaturesEXT
+ struct PhysicalDeviceGlobalPriorityQueryFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesEXT;
+ StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeaturesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeaturesKHR(
VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ = {} ) VULKAN_HPP_NOEXCEPT
: globalPriorityQuery( globalPriorityQuery_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeaturesEXT(
- PhysicalDeviceGlobalPriorityQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceGlobalPriorityQueryFeaturesKHR(
+ PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceGlobalPriorityQueryFeaturesEXT( VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const & rhs )
+ PhysicalDeviceGlobalPriorityQueryFeaturesKHR( VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceGlobalPriorityQueryFeaturesEXT(
- *reinterpret_cast<PhysicalDeviceGlobalPriorityQueryFeaturesEXT const *>( &rhs ) )
+ : PhysicalDeviceGlobalPriorityQueryFeaturesKHR(
+ *reinterpret_cast<PhysicalDeviceGlobalPriorityQueryFeaturesKHR const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeaturesEXT &
- operator=( PhysicalDeviceGlobalPriorityQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceGlobalPriorityQueryFeaturesKHR &
+ operator=( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceGlobalPriorityQueryFeaturesEXT &
- operator=( VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceGlobalPriorityQueryFeaturesKHR &
+ operator=( VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceGlobalPriorityQueryFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceGlobalPriorityQueryFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGlobalPriorityQueryFeaturesKHR &
setGlobalPriorityQuery( VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery_ ) VULKAN_HPP_NOEXCEPT
{
globalPriorityQuery = globalPriorityQuery_;
@@ -40238,51 +54170,74 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT *>( this );
+ return std::tie( sType, pNext, globalPriorityQuery );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceGlobalPriorityQueryFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & ) const = default;
#else
- bool operator==( PhysicalDeviceGlobalPriorityQueryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( globalPriorityQuery == rhs.globalPriorityQuery );
+# endif
}
- bool operator!=( PhysicalDeviceGlobalPriorityQueryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceGlobalPriorityQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 globalPriorityQuery = {};
};
- static_assert( sizeof( PhysicalDeviceGlobalPriorityQueryFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceGlobalPriorityQueryFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceGlobalPriorityQueryFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceGlobalPriorityQueryFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceGlobalPriorityQueryFeaturesKHR>::value,
+ "PhysicalDeviceGlobalPriorityQueryFeaturesKHR is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceGlobalPriorityQueryFeaturesKHR>
{
- using Type = PhysicalDeviceGlobalPriorityQueryFeaturesEXT;
+ using Type = PhysicalDeviceGlobalPriorityQueryFeaturesKHR;
};
+ using PhysicalDeviceGlobalPriorityQueryFeaturesEXT = PhysicalDeviceGlobalPriorityQueryFeaturesKHR;
struct PhysicalDeviceGroupProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGroupProperties;
+ using NativeType = VkPhysicalDeviceGroupProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceGroupProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGroupProperties(
@@ -40302,8 +54257,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceGroupProperties &
- operator=( PhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceGroupProperties &
+ operator=( PhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceGroupProperties & operator=( VkPhysicalDeviceGroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -40311,23 +54266,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceGroupProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceGroupProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceGroupProperties *>( this );
}
- operator VkPhysicalDeviceGroupProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceGroupProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceGroupProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<
+ VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::PhysicalDevice, VK_MAX_DEVICE_GROUP_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, physicalDeviceCount, physicalDevices, subsetAllocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceGroupProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( physicalDeviceCount == rhs.physicalDeviceCount ) &&
( physicalDevices == rhs.physicalDevices ) && ( subsetAllocation == rhs.subsetAllocation );
+# endif
}
bool operator!=( PhysicalDeviceGroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40344,10 +54320,14 @@ namespace VULKAN_HPP_NAMESPACE
physicalDevices = {};
VULKAN_HPP_NAMESPACE::Bool32 subsetAllocation = {};
};
- static_assert( sizeof( PhysicalDeviceGroupProperties ) == sizeof( VkPhysicalDeviceGroupProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceGroupProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties ) ==
+ sizeof( VkPhysicalDeviceGroupProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceGroupProperties>::value,
+ "PhysicalDeviceGroupProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceGroupProperties>
@@ -40358,7 +54338,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceHostQueryResetFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceHostQueryResetFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceHostQueryResetFeatures;
@@ -40376,8 +54358,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures &
- operator=( PhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceHostQueryResetFeatures &
+ operator=( PhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceHostQueryResetFeatures &
operator=( VkPhysicalDeviceHostQueryResetFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -40387,36 +54369,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceHostQueryResetFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceHostQueryResetFeatures &
- setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceHostQueryResetFeatures &
+ setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT
{
hostQueryReset = hostQueryReset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceHostQueryResetFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceHostQueryResetFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures *>( this );
}
- operator VkPhysicalDeviceHostQueryResetFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceHostQueryResetFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceHostQueryResetFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, hostQueryReset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceHostQueryResetFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceHostQueryResetFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hostQueryReset == rhs.hostQueryReset );
+# endif
}
bool operator!=( PhysicalDeviceHostQueryResetFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40430,10 +54428,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset = {};
};
- static_assert( sizeof( PhysicalDeviceHostQueryResetFeatures ) == sizeof( VkPhysicalDeviceHostQueryResetFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceHostQueryResetFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures ) ==
+ sizeof( VkPhysicalDeviceHostQueryResetFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceHostQueryResetFeatures>::value,
+ "PhysicalDeviceHostQueryResetFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceHostQueryResetFeatures>
@@ -40444,8 +54446,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceIDProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceIdProperties;
+ using NativeType = VkPhysicalDeviceIDProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceIdProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
@@ -40469,8 +54473,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIDProperties &
- operator=( PhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceIDProperties & operator=( PhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceIDProperties & operator=( VkPhysicalDeviceIDProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -40478,24 +54481,46 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceIDProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceIDProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceIDProperties *>( this );
}
- operator VkPhysicalDeviceIDProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceIDProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceIDProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_LUID_SIZE> const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, deviceUUID, driverUUID, deviceLUID, deviceNodeMask, deviceLUIDValid );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceIDProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceIDProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceUUID == rhs.deviceUUID ) &&
( driverUUID == rhs.driverUUID ) && ( deviceLUID == rhs.deviceLUID ) &&
( deviceNodeMask == rhs.deviceNodeMask ) && ( deviceLUIDValid == rhs.deviceLUIDValid );
+# endif
}
bool operator!=( PhysicalDeviceIDProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40513,10 +54538,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t deviceNodeMask = {};
VULKAN_HPP_NAMESPACE::Bool32 deviceLUIDValid = {};
};
- static_assert( sizeof( PhysicalDeviceIDProperties ) == sizeof( VkPhysicalDeviceIDProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceIDProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties ) ==
+ sizeof( VkPhysicalDeviceIDProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceIDProperties>::value,
+ "PhysicalDeviceIDProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceIdProperties>
@@ -40527,7 +54555,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceImageDrmFormatModifierInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceImageDrmFormatModifierInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT;
@@ -40565,8 +54595,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT &
- operator=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceImageDrmFormatModifierInfoEXT &
+ operator=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceImageDrmFormatModifierInfoEXT &
operator=( VkPhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -40576,35 +54606,36 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceImageDrmFormatModifierInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceImageDrmFormatModifierInfoEXT &
- setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT &
+ setDrmFormatModifier( uint64_t drmFormatModifier_ ) VULKAN_HPP_NOEXCEPT
{
drmFormatModifier = drmFormatModifier_;
return *this;
}
- PhysicalDeviceImageDrmFormatModifierInfoEXT &
- setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT &
+ setSharingMode( VULKAN_HPP_NAMESPACE::SharingMode sharingMode_ ) VULKAN_HPP_NOEXCEPT
{
sharingMode = sharingMode_;
return *this;
}
- PhysicalDeviceImageDrmFormatModifierInfoEXT &
- setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT &
+ setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndexCount = queueFamilyIndexCount_;
return *this;
}
- PhysicalDeviceImageDrmFormatModifierInfoEXT &
- setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageDrmFormatModifierInfoEXT &
+ setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
{
pQueueFamilyIndices = pQueueFamilyIndices_;
return *this;
@@ -40621,24 +54652,45 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT *>( this );
}
- operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageDrmFormatModifierInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceImageDrmFormatModifierInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::SharingMode const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, drmFormatModifier, sharingMode, queueFamilyIndexCount, pQueueFamilyIndices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceImageDrmFormatModifierInfoEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( drmFormatModifier == rhs.drmFormatModifier ) &&
( sharingMode == rhs.sharingMode ) && ( queueFamilyIndexCount == rhs.queueFamilyIndexCount ) &&
( pQueueFamilyIndices == rhs.pQueueFamilyIndices );
+# endif
}
bool operator!=( PhysicalDeviceImageDrmFormatModifierInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40655,11 +54707,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t queueFamilyIndexCount = {};
const uint32_t * pQueueFamilyIndices = {};
};
- static_assert( sizeof( PhysicalDeviceImageDrmFormatModifierInfoEXT ) ==
- sizeof( VkPhysicalDeviceImageDrmFormatModifierInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceImageDrmFormatModifierInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT ) ==
+ sizeof( VkPhysicalDeviceImageDrmFormatModifierInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageDrmFormatModifierInfoEXT>::value,
+ "PhysicalDeviceImageDrmFormatModifierInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceImageDrmFormatModifierInfoEXT>
@@ -40669,8 +54725,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceImageFormatInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageFormatInfo2;
+ using NativeType = VkPhysicalDeviceImageFormatInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceImageFormatInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PhysicalDeviceImageFormatInfo2(
@@ -40694,8 +54752,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 &
- operator=( PhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceImageFormatInfo2 &
+ operator=( PhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceImageFormatInfo2 & operator=( VkPhysicalDeviceImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -40704,60 +54762,87 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceImageFormatInfo2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- PhysicalDeviceImageFormatInfo2 & setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 &
+ setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- PhysicalDeviceImageFormatInfo2 & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 &
+ setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT
{
tiling = tiling_;
return *this;
}
- PhysicalDeviceImageFormatInfo2 & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 &
+ setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
{
usage = usage_;
return *this;
}
- PhysicalDeviceImageFormatInfo2 & setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageFormatInfo2 &
+ setFlags( VULKAN_HPP_NAMESPACE::ImageCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceImageFormatInfo2 *>( this );
}
- operator VkPhysicalDeviceImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceImageFormatInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::ImageType const &,
+ VULKAN_HPP_NAMESPACE::ImageTiling const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::ImageCreateFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, format, type, tiling, usage, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceImageFormatInfo2 const & ) const = default;
#else
bool operator==( PhysicalDeviceImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( type == rhs.type ) &&
( tiling == rhs.tiling ) && ( usage == rhs.usage ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( PhysicalDeviceImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40775,10 +54860,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {};
VULKAN_HPP_NAMESPACE::ImageCreateFlags flags = {};
};
- static_assert( sizeof( PhysicalDeviceImageFormatInfo2 ) == sizeof( VkPhysicalDeviceImageFormatInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceImageFormatInfo2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2 ) ==
+ sizeof( VkPhysicalDeviceImageFormatInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageFormatInfo2>::value,
+ "PhysicalDeviceImageFormatInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceImageFormatInfo2>
@@ -40787,97 +54876,120 @@ namespace VULKAN_HPP_NAMESPACE
};
using PhysicalDeviceImageFormatInfo2KHR = PhysicalDeviceImageFormatInfo2;
- struct PhysicalDeviceImageRobustnessFeaturesEXT
+ struct PhysicalDeviceImageRobustnessFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceImageRobustnessFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceImageRobustnessFeaturesEXT;
+ StructureType::ePhysicalDeviceImageRobustnessFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeaturesEXT(
- VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceImageRobustnessFeatures( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {} ) VULKAN_HPP_NOEXCEPT
: robustImageAccess( robustImageAccess_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeaturesEXT(
- PhysicalDeviceImageRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceImageRobustnessFeatures( PhysicalDeviceImageRobustnessFeatures const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceImageRobustnessFeaturesEXT( VkPhysicalDeviceImageRobustnessFeaturesEXT const & rhs )
- VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceImageRobustnessFeaturesEXT(
- *reinterpret_cast<PhysicalDeviceImageRobustnessFeaturesEXT const *>( &rhs ) )
+ PhysicalDeviceImageRobustnessFeatures( VkPhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceImageRobustnessFeatures(
+ *reinterpret_cast<PhysicalDeviceImageRobustnessFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeaturesEXT &
- operator=( PhysicalDeviceImageRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceImageRobustnessFeatures &
+ operator=( PhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceImageRobustnessFeaturesEXT &
- operator=( VkPhysicalDeviceImageRobustnessFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceImageRobustnessFeatures &
+ operator=( VkPhysicalDeviceImageRobustnessFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeaturesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceImageRobustnessFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceImageRobustnessFeaturesEXT &
- setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageRobustnessFeatures &
+ setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT
{
robustImageAccess = robustImageAccess_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceImageRobustnessFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageRobustnessFeatures const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeatures *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceImageRobustnessFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceImageRobustnessFeatures *>( this );
}
- operator VkPhysicalDeviceImageRobustnessFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT *>( this );
+ return std::tie( sType, pNext, robustImageAccess );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceImageRobustnessFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceImageRobustnessFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceImageRobustnessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceImageRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustImageAccess == rhs.robustImageAccess );
+# endif
}
- bool operator!=( PhysicalDeviceImageRobustnessFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceImageRobustnessFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageRobustnessFeaturesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageRobustnessFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess = {};
};
- static_assert( sizeof( PhysicalDeviceImageRobustnessFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceImageRobustnessFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceImageRobustnessFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures ) ==
+ sizeof( VkPhysicalDeviceImageRobustnessFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageRobustnessFeatures>::value,
+ "PhysicalDeviceImageRobustnessFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceImageRobustnessFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceImageRobustnessFeatures>
{
- using Type = PhysicalDeviceImageRobustnessFeaturesEXT;
+ using Type = PhysicalDeviceImageRobustnessFeatures;
};
+ using PhysicalDeviceImageRobustnessFeaturesEXT = PhysicalDeviceImageRobustnessFeatures;
struct PhysicalDeviceImageViewImageFormatInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceImageViewImageFormatInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT;
@@ -40898,8 +55010,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT &
- operator=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceImageViewImageFormatInfoEXT &
+ operator=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceImageViewImageFormatInfoEXT &
operator=( VkPhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -40909,36 +55021,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceImageViewImageFormatInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceImageViewImageFormatInfoEXT &
- setImageViewType( VULKAN_HPP_NAMESPACE::ImageViewType imageViewType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewImageFormatInfoEXT &
+ setImageViewType( VULKAN_HPP_NAMESPACE::ImageViewType imageViewType_ ) VULKAN_HPP_NOEXCEPT
{
imageViewType = imageViewType_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceImageViewImageFormatInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageViewImageFormatInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT *>( this );
}
- operator VkPhysicalDeviceImageViewImageFormatInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImageViewImageFormatInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceImageViewImageFormatInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::ImageViewType const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageViewType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceImageViewImageFormatInfoEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageViewType == rhs.imageViewType );
+# endif
}
bool operator!=( PhysicalDeviceImageViewImageFormatInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -40952,11 +55080,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageViewType imageViewType = VULKAN_HPP_NAMESPACE::ImageViewType::e1D;
};
- static_assert( sizeof( PhysicalDeviceImageViewImageFormatInfoEXT ) ==
- sizeof( VkPhysicalDeviceImageViewImageFormatInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceImageViewImageFormatInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT ) ==
+ sizeof( VkPhysicalDeviceImageViewImageFormatInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewImageFormatInfoEXT>::value,
+ "PhysicalDeviceImageViewImageFormatInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceImageViewImageFormatInfoEXT>
@@ -40964,9 +55096,121 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceImageViewImageFormatInfoEXT;
};
+ struct PhysicalDeviceImageViewMinLodFeaturesEXT
+ {
+ using NativeType = VkPhysicalDeviceImageViewMinLodFeaturesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceImageViewMinLodFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 minLod_ = {} ) VULKAN_HPP_NOEXCEPT
+ : minLod( minLod_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceImageViewMinLodFeaturesEXT(
+ PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceImageViewMinLodFeaturesEXT( VkPhysicalDeviceImageViewMinLodFeaturesEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceImageViewMinLodFeaturesEXT(
+ *reinterpret_cast<PhysicalDeviceImageViewMinLodFeaturesEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceImageViewMinLodFeaturesEXT &
+ operator=( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceImageViewMinLodFeaturesEXT &
+ operator=( VkPhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewMinLodFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImageViewMinLodFeaturesEXT &
+ setMinLod( VULKAN_HPP_NAMESPACE::Bool32 minLod_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minLod = minLod_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceImageViewMinLodFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceImageViewMinLodFeaturesEXT *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceImageViewMinLodFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceImageViewMinLodFeaturesEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, minLod );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceImageViewMinLodFeaturesEXT const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minLod == rhs.minLod );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceImageViewMinLodFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 minLod = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceImageViewMinLodFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceImageViewMinLodFeaturesEXT>::value,
+ "PhysicalDeviceImageViewMinLodFeaturesEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceImageViewMinLodFeaturesEXT>
+ {
+ using Type = PhysicalDeviceImageViewMinLodFeaturesEXT;
+ };
+
struct PhysicalDeviceImagelessFramebufferFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceImagelessFramebufferFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceImagelessFramebufferFeatures;
@@ -40986,8 +55230,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures &
- operator=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceImagelessFramebufferFeatures &
+ operator=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceImagelessFramebufferFeatures &
operator=( VkPhysicalDeviceImagelessFramebufferFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -40997,13 +55241,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceImagelessFramebufferFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceImagelessFramebufferFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceImagelessFramebufferFeatures &
setImagelessFramebuffer( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ ) VULKAN_HPP_NOEXCEPT
{
imagelessFramebuffer = imagelessFramebuffer_;
@@ -41011,22 +55255,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceImagelessFramebufferFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImagelessFramebufferFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures *>( this );
}
- operator VkPhysicalDeviceImagelessFramebufferFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceImagelessFramebufferFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceImagelessFramebufferFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imagelessFramebuffer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceImagelessFramebufferFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imagelessFramebuffer == rhs.imagelessFramebuffer );
+# endif
}
bool operator!=( PhysicalDeviceImagelessFramebufferFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -41040,11 +55300,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer = {};
};
- static_assert( sizeof( PhysicalDeviceImagelessFramebufferFeatures ) ==
- sizeof( VkPhysicalDeviceImagelessFramebufferFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceImagelessFramebufferFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures ) ==
+ sizeof( VkPhysicalDeviceImagelessFramebufferFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceImagelessFramebufferFeatures>::value,
+ "PhysicalDeviceImagelessFramebufferFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceImagelessFramebufferFeatures>
@@ -41055,7 +55319,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceIndexTypeUint8FeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceIndexTypeUint8FeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceIndexTypeUint8FeaturesEXT;
@@ -41074,8 +55340,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8FeaturesEXT &
- operator=( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceIndexTypeUint8FeaturesEXT &
+ operator=( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceIndexTypeUint8FeaturesEXT &
operator=( VkPhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -41085,36 +55351,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceIndexTypeUint8FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceIndexTypeUint8FeaturesEXT &
- setIndexTypeUint8( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceIndexTypeUint8FeaturesEXT &
+ setIndexTypeUint8( VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8_ ) VULKAN_HPP_NOEXCEPT
{
indexTypeUint8 = indexTypeUint8_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceIndexTypeUint8FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT *>( this );
}
- operator VkPhysicalDeviceIndexTypeUint8FeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceIndexTypeUint8FeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, indexTypeUint8 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceIndexTypeUint8FeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( indexTypeUint8 == rhs.indexTypeUint8 );
+# endif
}
bool operator!=( PhysicalDeviceIndexTypeUint8FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -41128,11 +55410,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 indexTypeUint8 = {};
};
- static_assert( sizeof( PhysicalDeviceIndexTypeUint8FeaturesEXT ) ==
- sizeof( VkPhysicalDeviceIndexTypeUint8FeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceIndexTypeUint8FeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceIndexTypeUint8FeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceIndexTypeUint8FeaturesEXT>::value,
+ "PhysicalDeviceIndexTypeUint8FeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceIndexTypeUint8FeaturesEXT>
@@ -41142,7 +55428,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceInheritedViewportScissorFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceInheritedViewportScissorFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV;
@@ -41162,8 +55450,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV &
- operator=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceInheritedViewportScissorFeaturesNV &
+ operator=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceInheritedViewportScissorFeaturesNV &
operator=( VkPhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -41173,13 +55461,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceInheritedViewportScissorFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceInheritedViewportScissorFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInheritedViewportScissorFeaturesNV &
setInheritedViewportScissor2D( VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D_ ) VULKAN_HPP_NOEXCEPT
{
inheritedViewportScissor2D = inheritedViewportScissor2D_;
@@ -41187,23 +55476,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceInheritedViewportScissorFeaturesNV *>( this );
}
- operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInheritedViewportScissorFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceInheritedViewportScissorFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, inheritedViewportScissor2D );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceInheritedViewportScissorFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( inheritedViewportScissor2D == rhs.inheritedViewportScissor2D );
+# endif
}
bool operator!=( PhysicalDeviceInheritedViewportScissorFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -41217,11 +55522,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 inheritedViewportScissor2D = {};
};
- static_assert( sizeof( PhysicalDeviceInheritedViewportScissorFeaturesNV ) ==
- sizeof( VkPhysicalDeviceInheritedViewportScissorFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceInheritedViewportScissorFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceInheritedViewportScissorFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceInheritedViewportScissorFeaturesNV>::value,
+ "PhysicalDeviceInheritedViewportScissorFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceInheritedViewportScissorFeaturesNV>
@@ -41229,114 +55538,143 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceInheritedViewportScissorFeaturesNV;
};
- struct PhysicalDeviceInlineUniformBlockFeaturesEXT
+ struct PhysicalDeviceInlineUniformBlockFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceInlineUniformBlockFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceInlineUniformBlockFeaturesEXT;
+ StructureType::ePhysicalDeviceInlineUniformBlockFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeaturesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeatures(
VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ = {},
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ = {} ) VULKAN_HPP_NOEXCEPT
: inlineUniformBlock( inlineUniformBlock_ )
, descriptorBindingInlineUniformBlockUpdateAfterBind( descriptorBindingInlineUniformBlockUpdateAfterBind_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeaturesEXT(
- PhysicalDeviceInlineUniformBlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockFeatures(
+ PhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceInlineUniformBlockFeaturesEXT( VkPhysicalDeviceInlineUniformBlockFeaturesEXT const & rhs )
+ PhysicalDeviceInlineUniformBlockFeatures( VkPhysicalDeviceInlineUniformBlockFeatures const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceInlineUniformBlockFeaturesEXT(
- *reinterpret_cast<PhysicalDeviceInlineUniformBlockFeaturesEXT const *>( &rhs ) )
+ : PhysicalDeviceInlineUniformBlockFeatures(
+ *reinterpret_cast<PhysicalDeviceInlineUniformBlockFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeaturesEXT &
- operator=( PhysicalDeviceInlineUniformBlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceInlineUniformBlockFeatures &
+ operator=( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceInlineUniformBlockFeaturesEXT &
- operator=( VkPhysicalDeviceInlineUniformBlockFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceInlineUniformBlockFeatures &
+ operator=( VkPhysicalDeviceInlineUniformBlockFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeaturesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceInlineUniformBlockFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceInlineUniformBlockFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures &
setInlineUniformBlock( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ ) VULKAN_HPP_NOEXCEPT
{
inlineUniformBlock = inlineUniformBlock_;
return *this;
}
- PhysicalDeviceInlineUniformBlockFeaturesEXT & setDescriptorBindingInlineUniformBlockUpdateAfterBind(
- VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockFeatures &
+ setDescriptorBindingInlineUniformBlockUpdateAfterBind(
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceInlineUniformBlockFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInlineUniformBlockFeatures const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeatures *>( this );
}
- operator VkPhysicalDeviceInlineUniformBlockFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInlineUniformBlockFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceInlineUniformBlockFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceInlineUniformBlockFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, inlineUniformBlock, descriptorBindingInlineUniformBlockUpdateAfterBind );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceInlineUniformBlockFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceInlineUniformBlockFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceInlineUniformBlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( inlineUniformBlock == rhs.inlineUniformBlock ) &&
( descriptorBindingInlineUniformBlockUpdateAfterBind ==
rhs.descriptorBindingInlineUniformBlockUpdateAfterBind );
+# endif
}
- bool operator!=( PhysicalDeviceInlineUniformBlockFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceInlineUniformBlockFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockFeaturesEXT;
- void * pNext = {};
- VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockFeatures;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {};
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind = {};
};
- static_assert( sizeof( PhysicalDeviceInlineUniformBlockFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceInlineUniformBlockFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceInlineUniformBlockFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures ) ==
+ sizeof( VkPhysicalDeviceInlineUniformBlockFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockFeatures>::value,
+ "PhysicalDeviceInlineUniformBlockFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceInlineUniformBlockFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceInlineUniformBlockFeatures>
{
- using Type = PhysicalDeviceInlineUniformBlockFeaturesEXT;
+ using Type = PhysicalDeviceInlineUniformBlockFeatures;
};
+ using PhysicalDeviceInlineUniformBlockFeaturesEXT = PhysicalDeviceInlineUniformBlockFeatures;
- struct PhysicalDeviceInlineUniformBlockPropertiesEXT
+ struct PhysicalDeviceInlineUniformBlockProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceInlineUniformBlockProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceInlineUniformBlockPropertiesEXT;
+ StructureType::ePhysicalDeviceInlineUniformBlockProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockPropertiesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockProperties(
uint32_t maxInlineUniformBlockSize_ = {},
uint32_t maxPerStageDescriptorInlineUniformBlocks_ = {},
uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ = {},
@@ -41350,41 +55688,68 @@ namespace VULKAN_HPP_NAMESPACE
, maxDescriptorSetUpdateAfterBindInlineUniformBlocks( maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockPropertiesEXT(
- PhysicalDeviceInlineUniformBlockPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceInlineUniformBlockProperties(
+ PhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceInlineUniformBlockPropertiesEXT( VkPhysicalDeviceInlineUniformBlockPropertiesEXT const & rhs )
+ PhysicalDeviceInlineUniformBlockProperties( VkPhysicalDeviceInlineUniformBlockProperties const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceInlineUniformBlockPropertiesEXT(
- *reinterpret_cast<PhysicalDeviceInlineUniformBlockPropertiesEXT const *>( &rhs ) )
+ : PhysicalDeviceInlineUniformBlockProperties(
+ *reinterpret_cast<PhysicalDeviceInlineUniformBlockProperties const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInlineUniformBlockPropertiesEXT &
- operator=( PhysicalDeviceInlineUniformBlockPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceInlineUniformBlockProperties &
+ operator=( PhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceInlineUniformBlockPropertiesEXT &
- operator=( VkPhysicalDeviceInlineUniformBlockPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceInlineUniformBlockProperties &
+ operator=( VkPhysicalDeviceInlineUniformBlockProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockPropertiesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties const *>( &rhs );
return *this;
}
- operator VkPhysicalDeviceInlineUniformBlockPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInlineUniformBlockProperties const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockProperties *>( this );
}
- operator VkPhysicalDeviceInlineUniformBlockPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInlineUniformBlockProperties &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceInlineUniformBlockPropertiesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceInlineUniformBlockProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ maxInlineUniformBlockSize,
+ maxPerStageDescriptorInlineUniformBlocks,
+ maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks,
+ maxDescriptorSetInlineUniformBlocks,
+ maxDescriptorSetUpdateAfterBindInlineUniformBlocks );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceInlineUniformBlockPropertiesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceInlineUniformBlockProperties const & ) const = default;
#else
- bool operator==( PhysicalDeviceInlineUniformBlockPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceInlineUniformBlockProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize ) &&
( maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks ) &&
@@ -41393,16 +55758,17 @@ namespace VULKAN_HPP_NAMESPACE
( maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks ) &&
( maxDescriptorSetUpdateAfterBindInlineUniformBlocks ==
rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks );
+# endif
}
- bool operator!=( PhysicalDeviceInlineUniformBlockPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceInlineUniformBlockProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockPropertiesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceInlineUniformBlockProperties;
void * pNext = {};
uint32_t maxInlineUniformBlockSize = {};
uint32_t maxPerStageDescriptorInlineUniformBlocks = {};
@@ -41410,21 +55776,28 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxDescriptorSetInlineUniformBlocks = {};
uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks = {};
};
- static_assert( sizeof( PhysicalDeviceInlineUniformBlockPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceInlineUniformBlockPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceInlineUniformBlockPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties ) ==
+ sizeof( VkPhysicalDeviceInlineUniformBlockProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceInlineUniformBlockProperties>::value,
+ "PhysicalDeviceInlineUniformBlockProperties is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceInlineUniformBlockPropertiesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceInlineUniformBlockProperties>
{
- using Type = PhysicalDeviceInlineUniformBlockPropertiesEXT;
+ using Type = PhysicalDeviceInlineUniformBlockProperties;
};
+ using PhysicalDeviceInlineUniformBlockPropertiesEXT = PhysicalDeviceInlineUniformBlockProperties;
struct PhysicalDeviceInvocationMaskFeaturesHUAWEI
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceInvocationMaskFeaturesHUAWEI;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI;
@@ -41443,8 +55816,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI &
- operator=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceInvocationMaskFeaturesHUAWEI &
+ operator=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceInvocationMaskFeaturesHUAWEI &
operator=( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -41454,36 +55827,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceInvocationMaskFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceInvocationMaskFeaturesHUAWEI &
- setInvocationMask( VULKAN_HPP_NAMESPACE::Bool32 invocationMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceInvocationMaskFeaturesHUAWEI &
+ setInvocationMask( VULKAN_HPP_NAMESPACE::Bool32 invocationMask_ ) VULKAN_HPP_NOEXCEPT
{
invocationMask = invocationMask_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *>( this );
}
- operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceInvocationMaskFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceInvocationMaskFeaturesHUAWEI *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, invocationMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & ) const = default;
#else
bool operator==( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( invocationMask == rhs.invocationMask );
+# endif
}
bool operator!=( PhysicalDeviceInvocationMaskFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -41497,11 +55886,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 invocationMask = {};
};
- static_assert( sizeof( PhysicalDeviceInvocationMaskFeaturesHUAWEI ) ==
- sizeof( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceInvocationMaskFeaturesHUAWEI>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI ) ==
+ sizeof( VkPhysicalDeviceInvocationMaskFeaturesHUAWEI ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceInvocationMaskFeaturesHUAWEI>::value,
+ "PhysicalDeviceInvocationMaskFeaturesHUAWEI is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceInvocationMaskFeaturesHUAWEI>
@@ -41511,6 +55904,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceLimits
{
+ using NativeType = VkPhysicalDeviceLimits;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
PhysicalDeviceLimits( uint32_t maxImageDimension1D_ = {},
@@ -41734,8 +56129,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLimits &
- operator=( PhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceLimits & operator=( PhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceLimits & operator=( VkPhysicalDeviceLimits const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -41743,21 +56137,246 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceLimits const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceLimits const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceLimits *>( this );
}
- operator VkPhysicalDeviceLimits &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceLimits &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceLimits *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 3> const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 3> const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ float const &,
+ float const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 2> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 2> const &,
+ uint32_t const &,
+ size_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ int32_t const &,
+ uint32_t const &,
+ int32_t const &,
+ uint32_t const &,
+ float const &,
+ float const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ float const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 2> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 2> const &,
+ float const &,
+ float const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( maxImageDimension1D,
+ maxImageDimension2D,
+ maxImageDimension3D,
+ maxImageDimensionCube,
+ maxImageArrayLayers,
+ maxTexelBufferElements,
+ maxUniformBufferRange,
+ maxStorageBufferRange,
+ maxPushConstantsSize,
+ maxMemoryAllocationCount,
+ maxSamplerAllocationCount,
+ bufferImageGranularity,
+ sparseAddressSpaceSize,
+ maxBoundDescriptorSets,
+ maxPerStageDescriptorSamplers,
+ maxPerStageDescriptorUniformBuffers,
+ maxPerStageDescriptorStorageBuffers,
+ maxPerStageDescriptorSampledImages,
+ maxPerStageDescriptorStorageImages,
+ maxPerStageDescriptorInputAttachments,
+ maxPerStageResources,
+ maxDescriptorSetSamplers,
+ maxDescriptorSetUniformBuffers,
+ maxDescriptorSetUniformBuffersDynamic,
+ maxDescriptorSetStorageBuffers,
+ maxDescriptorSetStorageBuffersDynamic,
+ maxDescriptorSetSampledImages,
+ maxDescriptorSetStorageImages,
+ maxDescriptorSetInputAttachments,
+ maxVertexInputAttributes,
+ maxVertexInputBindings,
+ maxVertexInputAttributeOffset,
+ maxVertexInputBindingStride,
+ maxVertexOutputComponents,
+ maxTessellationGenerationLevel,
+ maxTessellationPatchSize,
+ maxTessellationControlPerVertexInputComponents,
+ maxTessellationControlPerVertexOutputComponents,
+ maxTessellationControlPerPatchOutputComponents,
+ maxTessellationControlTotalOutputComponents,
+ maxTessellationEvaluationInputComponents,
+ maxTessellationEvaluationOutputComponents,
+ maxGeometryShaderInvocations,
+ maxGeometryInputComponents,
+ maxGeometryOutputComponents,
+ maxGeometryOutputVertices,
+ maxGeometryTotalOutputComponents,
+ maxFragmentInputComponents,
+ maxFragmentOutputAttachments,
+ maxFragmentDualSrcAttachments,
+ maxFragmentCombinedOutputResources,
+ maxComputeSharedMemorySize,
+ maxComputeWorkGroupCount,
+ maxComputeWorkGroupInvocations,
+ maxComputeWorkGroupSize,
+ subPixelPrecisionBits,
+ subTexelPrecisionBits,
+ mipmapPrecisionBits,
+ maxDrawIndexedIndexValue,
+ maxDrawIndirectCount,
+ maxSamplerLodBias,
+ maxSamplerAnisotropy,
+ maxViewports,
+ maxViewportDimensions,
+ viewportBoundsRange,
+ viewportSubPixelBits,
+ minMemoryMapAlignment,
+ minTexelBufferOffsetAlignment,
+ minUniformBufferOffsetAlignment,
+ minStorageBufferOffsetAlignment,
+ minTexelOffset,
+ maxTexelOffset,
+ minTexelGatherOffset,
+ maxTexelGatherOffset,
+ minInterpolationOffset,
+ maxInterpolationOffset,
+ subPixelInterpolationOffsetBits,
+ maxFramebufferWidth,
+ maxFramebufferHeight,
+ maxFramebufferLayers,
+ framebufferColorSampleCounts,
+ framebufferDepthSampleCounts,
+ framebufferStencilSampleCounts,
+ framebufferNoAttachmentsSampleCounts,
+ maxColorAttachments,
+ sampledImageColorSampleCounts,
+ sampledImageIntegerSampleCounts,
+ sampledImageDepthSampleCounts,
+ sampledImageStencilSampleCounts,
+ storageImageSampleCounts,
+ maxSampleMaskWords,
+ timestampComputeAndGraphics,
+ timestampPeriod,
+ maxClipDistances,
+ maxCullDistances,
+ maxCombinedClipAndCullDistances,
+ discreteQueuePriorities,
+ pointSizeRange,
+ lineWidthRange,
+ pointSizeGranularity,
+ lineWidthGranularity,
+ strictLines,
+ standardSampleLocations,
+ optimalBufferCopyOffsetAlignment,
+ optimalBufferCopyRowPitchAlignment,
+ nonCoherentAtomSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceLimits const & ) const = default;
#else
bool operator==( PhysicalDeviceLimits const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( maxImageDimension1D == rhs.maxImageDimension1D ) && ( maxImageDimension2D == rhs.maxImageDimension2D ) &&
( maxImageDimension3D == rhs.maxImageDimension3D ) &&
( maxImageDimensionCube == rhs.maxImageDimensionCube ) &&
@@ -41857,6 +56476,7 @@ namespace VULKAN_HPP_NAMESPACE
( optimalBufferCopyOffsetAlignment == rhs.optimalBufferCopyOffsetAlignment ) &&
( optimalBufferCopyRowPitchAlignment == rhs.optimalBufferCopyRowPitchAlignment ) &&
( nonCoherentAtomSize == rhs.nonCoherentAtomSize );
+# endif
}
bool operator!=( PhysicalDeviceLimits const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -41973,13 +56593,18 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize optimalBufferCopyRowPitchAlignment = {};
VULKAN_HPP_NAMESPACE::DeviceSize nonCoherentAtomSize = {};
};
- static_assert( sizeof( PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceLimits>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits ) == sizeof( VkPhysicalDeviceLimits ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits>::value,
+ "PhysicalDeviceLimits is not nothrow_move_constructible!" );
struct PhysicalDeviceLineRasterizationFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceLineRasterizationFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceLineRasterizationFeaturesEXT;
@@ -42009,8 +56634,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
- operator=( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceLineRasterizationFeaturesEXT &
+ operator=( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceLineRasterizationFeaturesEXT &
operator=( VkPhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42020,48 +56645,48 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceLineRasterizationFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceLineRasterizationFeaturesEXT &
- setRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
+ setRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 rectangularLines_ ) VULKAN_HPP_NOEXCEPT
{
rectangularLines = rectangularLines_;
return *this;
}
- PhysicalDeviceLineRasterizationFeaturesEXT &
- setBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
+ setBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 bresenhamLines_ ) VULKAN_HPP_NOEXCEPT
{
bresenhamLines = bresenhamLines_;
return *this;
}
- PhysicalDeviceLineRasterizationFeaturesEXT &
- setSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
+ setSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 smoothLines_ ) VULKAN_HPP_NOEXCEPT
{
smoothLines = smoothLines_;
return *this;
}
- PhysicalDeviceLineRasterizationFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
setStippledRectangularLines( VULKAN_HPP_NAMESPACE::Bool32 stippledRectangularLines_ ) VULKAN_HPP_NOEXCEPT
{
stippledRectangularLines = stippledRectangularLines_;
return *this;
}
- PhysicalDeviceLineRasterizationFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
setStippledBresenhamLines( VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines_ ) VULKAN_HPP_NOEXCEPT
{
stippledBresenhamLines = stippledBresenhamLines_;
return *this;
}
- PhysicalDeviceLineRasterizationFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationFeaturesEXT &
setStippledSmoothLines( VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines_ ) VULKAN_HPP_NOEXCEPT
{
stippledSmoothLines = stippledSmoothLines_;
@@ -42069,26 +56694,56 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceLineRasterizationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceLineRasterizationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceLineRasterizationFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceLineRasterizationFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ rectangularLines,
+ bresenhamLines,
+ smoothLines,
+ stippledRectangularLines,
+ stippledBresenhamLines,
+ stippledSmoothLines );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceLineRasterizationFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rectangularLines == rhs.rectangularLines ) &&
( bresenhamLines == rhs.bresenhamLines ) && ( smoothLines == rhs.smoothLines ) &&
( stippledRectangularLines == rhs.stippledRectangularLines ) &&
( stippledBresenhamLines == rhs.stippledBresenhamLines ) &&
( stippledSmoothLines == rhs.stippledSmoothLines );
+# endif
}
bool operator!=( PhysicalDeviceLineRasterizationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42107,11 +56762,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 stippledBresenhamLines = {};
VULKAN_HPP_NAMESPACE::Bool32 stippledSmoothLines = {};
};
- static_assert( sizeof( PhysicalDeviceLineRasterizationFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceLineRasterizationFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceLineRasterizationFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceLineRasterizationFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationFeaturesEXT>::value,
+ "PhysicalDeviceLineRasterizationFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceLineRasterizationFeaturesEXT>
@@ -42121,7 +56780,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceLineRasterizationPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceLineRasterizationPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceLineRasterizationPropertiesEXT;
@@ -42141,8 +56802,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLineRasterizationPropertiesEXT &
- operator=( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceLineRasterizationPropertiesEXT &
+ operator=( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceLineRasterizationPropertiesEXT &
operator=( VkPhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42151,23 +56812,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceLineRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceLineRasterizationPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceLineRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceLineRasterizationPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, lineSubPixelPrecisionBits );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceLineRasterizationPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( lineSubPixelPrecisionBits == rhs.lineSubPixelPrecisionBits );
+# endif
}
bool operator!=( PhysicalDeviceLineRasterizationPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42181,11 +56858,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t lineSubPixelPrecisionBits = {};
};
- static_assert( sizeof( PhysicalDeviceLineRasterizationPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceLineRasterizationPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceLineRasterizationPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceLineRasterizationPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceLineRasterizationPropertiesEXT>::value,
+ "PhysicalDeviceLineRasterizationPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceLineRasterizationPropertiesEXT>
@@ -42193,9 +56874,122 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceLineRasterizationPropertiesEXT;
};
+ struct PhysicalDeviceLinearColorAttachmentFeaturesNV
+ {
+ using NativeType = VkPhysicalDeviceLinearColorAttachmentFeaturesNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceLinearColorAttachmentFeaturesNV(
+ VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment_ = {} ) VULKAN_HPP_NOEXCEPT
+ : linearColorAttachment( linearColorAttachment_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceLinearColorAttachmentFeaturesNV(
+ PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceLinearColorAttachmentFeaturesNV( VkPhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceLinearColorAttachmentFeaturesNV(
+ *reinterpret_cast<PhysicalDeviceLinearColorAttachmentFeaturesNV const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceLinearColorAttachmentFeaturesNV &
+ operator=( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceLinearColorAttachmentFeaturesNV &
+ operator=( VkPhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLinearColorAttachmentFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceLinearColorAttachmentFeaturesNV &
+ setLinearColorAttachment( VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment_ ) VULKAN_HPP_NOEXCEPT
+ {
+ linearColorAttachment = linearColorAttachment_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceLinearColorAttachmentFeaturesNV *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceLinearColorAttachmentFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceLinearColorAttachmentFeaturesNV *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, linearColorAttachment );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceLinearColorAttachmentFeaturesNV const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( linearColorAttachment == rhs.linearColorAttachment );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceLinearColorAttachmentFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 linearColorAttachment = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceLinearColorAttachmentFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceLinearColorAttachmentFeaturesNV>::value,
+ "PhysicalDeviceLinearColorAttachmentFeaturesNV is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceLinearColorAttachmentFeaturesNV>
+ {
+ using Type = PhysicalDeviceLinearColorAttachmentFeaturesNV;
+ };
+
struct PhysicalDeviceMaintenance3Properties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMaintenance3Properties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMaintenance3Properties;
@@ -42215,8 +57009,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance3Properties &
- operator=( PhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMaintenance3Properties &
+ operator=( PhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMaintenance3Properties &
operator=( VkPhysicalDeviceMaintenance3Properties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42225,23 +57019,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMaintenance3Properties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMaintenance3Properties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties *>( this );
}
- operator VkPhysicalDeviceMaintenance3Properties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMaintenance3Properties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMaintenance3Properties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxPerSetDescriptors, maxMemoryAllocationSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMaintenance3Properties const & ) const = default;
#else
bool operator==( PhysicalDeviceMaintenance3Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPerSetDescriptors == rhs.maxPerSetDescriptors ) &&
( maxMemoryAllocationSize == rhs.maxMemoryAllocationSize );
+# endif
}
bool operator!=( PhysicalDeviceMaintenance3Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42256,10 +57069,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxPerSetDescriptors = {};
VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize = {};
};
- static_assert( sizeof( PhysicalDeviceMaintenance3Properties ) == sizeof( VkPhysicalDeviceMaintenance3Properties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMaintenance3Properties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties ) ==
+ sizeof( VkPhysicalDeviceMaintenance3Properties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance3Properties>::value,
+ "PhysicalDeviceMaintenance3Properties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMaintenance3Properties>
@@ -42268,9 +57085,212 @@ namespace VULKAN_HPP_NAMESPACE
};
using PhysicalDeviceMaintenance3PropertiesKHR = PhysicalDeviceMaintenance3Properties;
+ struct PhysicalDeviceMaintenance4Features
+ {
+ using NativeType = VkPhysicalDeviceMaintenance4Features;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceMaintenance4Features;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceMaintenance4Features( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ = {} ) VULKAN_HPP_NOEXCEPT
+ : maintenance4( maintenance4_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Features( PhysicalDeviceMaintenance4Features const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceMaintenance4Features( VkPhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceMaintenance4Features( *reinterpret_cast<PhysicalDeviceMaintenance4Features const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceMaintenance4Features &
+ operator=( PhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceMaintenance4Features &
+ operator=( VkPhysicalDeviceMaintenance4Features const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance4Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMaintenance4Features &
+ setMaintenance4( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maintenance4 = maintenance4_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceMaintenance4Features const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceMaintenance4Features *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceMaintenance4Features &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceMaintenance4Features *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maintenance4 );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceMaintenance4Features const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceMaintenance4Features const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maintenance4 == rhs.maintenance4 );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceMaintenance4Features const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance4Features;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 maintenance4 = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features ) ==
+ sizeof( VkPhysicalDeviceMaintenance4Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Features>::value,
+ "PhysicalDeviceMaintenance4Features is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceMaintenance4Features>
+ {
+ using Type = PhysicalDeviceMaintenance4Features;
+ };
+ using PhysicalDeviceMaintenance4FeaturesKHR = PhysicalDeviceMaintenance4Features;
+
+ struct PhysicalDeviceMaintenance4Properties
+ {
+ using NativeType = VkPhysicalDeviceMaintenance4Properties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceMaintenance4Properties;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceMaintenance4Properties( VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : maxBufferSize( maxBufferSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceMaintenance4Properties( PhysicalDeviceMaintenance4Properties const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceMaintenance4Properties( VkPhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceMaintenance4Properties( *reinterpret_cast<PhysicalDeviceMaintenance4Properties const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceMaintenance4Properties &
+ operator=( PhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceMaintenance4Properties &
+ operator=( VkPhysicalDeviceMaintenance4Properties const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkPhysicalDeviceMaintenance4Properties const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceMaintenance4Properties *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceMaintenance4Properties &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceMaintenance4Properties *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxBufferSize );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceMaintenance4Properties const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceMaintenance4Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxBufferSize == rhs.maxBufferSize );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceMaintenance4Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceMaintenance4Properties;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties ) ==
+ sizeof( VkPhysicalDeviceMaintenance4Properties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMaintenance4Properties>::value,
+ "PhysicalDeviceMaintenance4Properties is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceMaintenance4Properties>
+ {
+ using Type = PhysicalDeviceMaintenance4Properties;
+ };
+ using PhysicalDeviceMaintenance4PropertiesKHR = PhysicalDeviceMaintenance4Properties;
+
struct PhysicalDeviceMemoryBudgetPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMemoryBudgetPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT;
@@ -42291,8 +57311,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryBudgetPropertiesEXT &
- operator=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMemoryBudgetPropertiesEXT &
+ operator=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMemoryBudgetPropertiesEXT &
operator=( VkPhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42301,23 +57321,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMemoryBudgetPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryBudgetPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceMemoryBudgetPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryBudgetPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMemoryBudgetPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::DeviceSize, VK_MAX_MEMORY_HEAPS> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::DeviceSize, VK_MAX_MEMORY_HEAPS> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, heapBudget, heapUsage );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMemoryBudgetPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( heapBudget == rhs.heapBudget ) &&
( heapUsage == rhs.heapUsage );
+# endif
}
bool operator!=( PhysicalDeviceMemoryBudgetPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42332,11 +57371,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::DeviceSize, VK_MAX_MEMORY_HEAPS> heapBudget = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::DeviceSize, VK_MAX_MEMORY_HEAPS> heapUsage = {};
};
- static_assert( sizeof( PhysicalDeviceMemoryBudgetPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceMemoryBudgetPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMemoryBudgetPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceMemoryBudgetPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryBudgetPropertiesEXT>::value,
+ "PhysicalDeviceMemoryBudgetPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMemoryBudgetPropertiesEXT>
@@ -42346,7 +57389,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMemoryPriorityFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMemoryPriorityFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT;
@@ -42365,8 +57410,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT &
- operator=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMemoryPriorityFeaturesEXT &
+ operator=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMemoryPriorityFeaturesEXT &
operator=( VkPhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42376,36 +57421,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceMemoryPriorityFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceMemoryPriorityFeaturesEXT &
- setMemoryPriority( VULKAN_HPP_NAMESPACE::Bool32 memoryPriority_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryPriorityFeaturesEXT &
+ setMemoryPriority( VULKAN_HPP_NAMESPACE::Bool32 memoryPriority_ ) VULKAN_HPP_NOEXCEPT
{
memoryPriority = memoryPriority_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceMemoryPriorityFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryPriorityFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceMemoryPriorityFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryPriorityFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMemoryPriorityFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryPriority );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMemoryPriorityFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryPriority == rhs.memoryPriority );
+# endif
}
bool operator!=( PhysicalDeviceMemoryPriorityFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42419,11 +57480,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 memoryPriority = {};
};
- static_assert( sizeof( PhysicalDeviceMemoryPriorityFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceMemoryPriorityFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMemoryPriorityFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceMemoryPriorityFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryPriorityFeaturesEXT>::value,
+ "PhysicalDeviceMemoryPriorityFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMemoryPriorityFeaturesEXT>
@@ -42433,6 +57498,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMemoryProperties
{
+ using NativeType = VkPhysicalDeviceMemoryProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties(
uint32_t memoryTypeCount_ = {},
@@ -42453,8 +57520,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties &
- operator=( PhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMemoryProperties &
+ operator=( PhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMemoryProperties & operator=( VkPhysicalDeviceMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -42462,23 +57529,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMemoryProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties *>( this );
}
- operator VkPhysicalDeviceMemoryProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMemoryProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::MemoryType, VK_MAX_MEMORY_TYPES> const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::MemoryHeap, VK_MAX_MEMORY_HEAPS> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( memoryTypeCount, memoryTypes, memoryHeapCount, memoryHeaps );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMemoryProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( memoryTypeCount == rhs.memoryTypeCount ) && ( memoryTypes == rhs.memoryTypes ) &&
( memoryHeapCount == rhs.memoryHeapCount ) && ( memoryHeaps == rhs.memoryHeaps );
+# endif
}
bool operator!=( PhysicalDeviceMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42493,15 +57579,21 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t memoryHeapCount = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::MemoryHeap, VK_MAX_MEMORY_HEAPS> memoryHeaps = {};
};
- static_assert( sizeof( PhysicalDeviceMemoryProperties ) == sizeof( VkPhysicalDeviceMemoryProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMemoryProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties ) ==
+ sizeof( VkPhysicalDeviceMemoryProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties>::value,
+ "PhysicalDeviceMemoryProperties is not nothrow_move_constructible!" );
struct PhysicalDeviceMemoryProperties2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryProperties2;
+ using NativeType = VkPhysicalDeviceMemoryProperties2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMemoryProperties2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties2(
@@ -42517,8 +57609,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMemoryProperties2 &
- operator=( PhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMemoryProperties2 &
+ operator=( PhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMemoryProperties2 & operator=( VkPhysicalDeviceMemoryProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -42526,22 +57618,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMemoryProperties2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryProperties2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMemoryProperties2 *>( this );
}
- operator VkPhysicalDeviceMemoryProperties2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMemoryProperties2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMemoryProperties2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMemoryProperties2 const & ) const = default;
#else
bool operator==( PhysicalDeviceMemoryProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryProperties == rhs.memoryProperties );
+# endif
}
bool operator!=( PhysicalDeviceMemoryProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42555,10 +57665,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties memoryProperties = {};
};
- static_assert( sizeof( PhysicalDeviceMemoryProperties2 ) == sizeof( VkPhysicalDeviceMemoryProperties2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMemoryProperties2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2 ) ==
+ sizeof( VkPhysicalDeviceMemoryProperties2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMemoryProperties2>::value,
+ "PhysicalDeviceMemoryProperties2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMemoryProperties2>
@@ -42569,7 +57683,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMeshShaderFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMeshShaderFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMeshShaderFeaturesNV;
@@ -42589,8 +57705,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV &
- operator=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMeshShaderFeaturesNV &
+ operator=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMeshShaderFeaturesNV &
operator=( VkPhysicalDeviceMeshShaderFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42600,42 +57716,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceMeshShaderFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceMeshShaderFeaturesNV & setTaskShader( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV &
+ setTaskShader( VULKAN_HPP_NAMESPACE::Bool32 taskShader_ ) VULKAN_HPP_NOEXCEPT
{
taskShader = taskShader_;
return *this;
}
- PhysicalDeviceMeshShaderFeaturesNV & setMeshShader( VULKAN_HPP_NAMESPACE::Bool32 meshShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderFeaturesNV &
+ setMeshShader( VULKAN_HPP_NAMESPACE::Bool32 meshShader_ ) VULKAN_HPP_NOEXCEPT
{
meshShader = meshShader_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceMeshShaderFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMeshShaderFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV *>( this );
}
- operator VkPhysicalDeviceMeshShaderFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMeshShaderFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMeshShaderFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, taskShader, meshShader );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMeshShaderFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( taskShader == rhs.taskShader ) &&
( meshShader == rhs.meshShader );
+# endif
}
bool operator!=( PhysicalDeviceMeshShaderFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42650,10 +57787,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 taskShader = {};
VULKAN_HPP_NAMESPACE::Bool32 meshShader = {};
};
- static_assert( sizeof( PhysicalDeviceMeshShaderFeaturesNV ) == sizeof( VkPhysicalDeviceMeshShaderFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMeshShaderFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceMeshShaderFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderFeaturesNV>::value,
+ "PhysicalDeviceMeshShaderFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMeshShaderFeaturesNV>
@@ -42663,7 +57804,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMeshShaderPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMeshShaderPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMeshShaderPropertiesNV;
@@ -42705,8 +57848,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMeshShaderPropertiesNV &
- operator=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMeshShaderPropertiesNV &
+ operator=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMeshShaderPropertiesNV &
operator=( VkPhysicalDeviceMeshShaderPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42715,21 +57858,64 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMeshShaderPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMeshShaderPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV *>( this );
}
- operator VkPhysicalDeviceMeshShaderPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMeshShaderPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMeshShaderPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 3> const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 3> const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ maxDrawMeshTasksCount,
+ maxTaskWorkGroupInvocations,
+ maxTaskWorkGroupSize,
+ maxTaskTotalMemorySize,
+ maxTaskOutputCount,
+ maxMeshWorkGroupInvocations,
+ maxMeshWorkGroupSize,
+ maxMeshTotalMemorySize,
+ maxMeshOutputVertices,
+ maxMeshOutputPrimitives,
+ maxMeshMultiviewViewCount,
+ meshOutputPerVertexGranularity,
+ meshOutputPerPrimitiveGranularity );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMeshShaderPropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxDrawMeshTasksCount == rhs.maxDrawMeshTasksCount ) &&
( maxTaskWorkGroupInvocations == rhs.maxTaskWorkGroupInvocations ) &&
@@ -42744,6 +57930,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxMeshMultiviewViewCount == rhs.maxMeshMultiviewViewCount ) &&
( meshOutputPerVertexGranularity == rhs.meshOutputPerVertexGranularity ) &&
( meshOutputPerPrimitiveGranularity == rhs.meshOutputPerPrimitiveGranularity );
+# endif
}
bool operator!=( PhysicalDeviceMeshShaderPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42769,10 +57956,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t meshOutputPerVertexGranularity = {};
uint32_t meshOutputPerPrimitiveGranularity = {};
};
- static_assert( sizeof( PhysicalDeviceMeshShaderPropertiesNV ) == sizeof( VkPhysicalDeviceMeshShaderPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMeshShaderPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV ) ==
+ sizeof( VkPhysicalDeviceMeshShaderPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMeshShaderPropertiesNV>::value,
+ "PhysicalDeviceMeshShaderPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMeshShaderPropertiesNV>
@@ -42782,7 +57973,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMultiDrawFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMultiDrawFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMultiDrawFeaturesEXT;
@@ -42800,8 +57993,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT &
- operator=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMultiDrawFeaturesEXT &
+ operator=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMultiDrawFeaturesEXT &
operator=( VkPhysicalDeviceMultiDrawFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42811,35 +58004,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceMultiDrawFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceMultiDrawFeaturesEXT & setMultiDraw( VULKAN_HPP_NAMESPACE::Bool32 multiDraw_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawFeaturesEXT &
+ setMultiDraw( VULKAN_HPP_NAMESPACE::Bool32 multiDraw_ ) VULKAN_HPP_NOEXCEPT
{
multiDraw = multiDraw_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceMultiDrawFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiDrawFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMultiDrawFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceMultiDrawFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiDrawFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMultiDrawFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, multiDraw );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMultiDrawFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiDraw == rhs.multiDraw );
+# endif
}
bool operator!=( PhysicalDeviceMultiDrawFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42853,10 +58063,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 multiDraw = {};
};
- static_assert( sizeof( PhysicalDeviceMultiDrawFeaturesEXT ) == sizeof( VkPhysicalDeviceMultiDrawFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMultiDrawFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceMultiDrawFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawFeaturesEXT>::value,
+ "PhysicalDeviceMultiDrawFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMultiDrawFeaturesEXT>
@@ -42866,7 +58080,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMultiDrawPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMultiDrawPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMultiDrawPropertiesEXT;
@@ -42883,8 +58099,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiDrawPropertiesEXT &
- operator=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMultiDrawPropertiesEXT &
+ operator=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMultiDrawPropertiesEXT &
operator=( VkPhysicalDeviceMultiDrawPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -42893,22 +58109,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMultiDrawPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiDrawPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMultiDrawPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceMultiDrawPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiDrawPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMultiDrawPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxMultiDrawCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMultiDrawPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxMultiDrawCount == rhs.maxMultiDrawCount );
+# endif
}
bool operator!=( PhysicalDeviceMultiDrawPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -42922,10 +58154,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxMultiDrawCount = {};
};
- static_assert( sizeof( PhysicalDeviceMultiDrawPropertiesEXT ) == sizeof( VkPhysicalDeviceMultiDrawPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMultiDrawPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceMultiDrawPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiDrawPropertiesEXT>::value,
+ "PhysicalDeviceMultiDrawPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMultiDrawPropertiesEXT>
@@ -42935,8 +58171,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMultiviewFeatures
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewFeatures;
+ using NativeType = VkPhysicalDeviceMultiviewFeatures;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceMultiviewFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PhysicalDeviceMultiviewFeatures(
@@ -42956,8 +58194,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures &
- operator=( PhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMultiviewFeatures &
+ operator=( PhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMultiviewFeatures & operator=( VkPhysicalDeviceMultiviewFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -42966,26 +58204,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceMultiviewFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceMultiviewFeatures & setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures &
+ setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT
{
multiview = multiview_;
return *this;
}
- PhysicalDeviceMultiviewFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures &
setMultiviewGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ ) VULKAN_HPP_NOEXCEPT
{
multiviewGeometryShader = multiviewGeometryShader_;
return *this;
}
- PhysicalDeviceMultiviewFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewFeatures &
setMultiviewTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ ) VULKAN_HPP_NOEXCEPT
{
multiviewTessellationShader = multiviewTessellationShader_;
@@ -42993,24 +58232,44 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceMultiviewFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiviewFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures *>( this );
}
- operator VkPhysicalDeviceMultiviewFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiviewFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMultiviewFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, multiview, multiviewGeometryShader, multiviewTessellationShader );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMultiviewFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceMultiviewFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( multiview == rhs.multiview ) &&
( multiviewGeometryShader == rhs.multiviewGeometryShader ) &&
( multiviewTessellationShader == rhs.multiviewTessellationShader );
+# endif
}
bool operator!=( PhysicalDeviceMultiviewFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43026,10 +58285,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader = {};
VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader = {};
};
- static_assert( sizeof( PhysicalDeviceMultiviewFeatures ) == sizeof( VkPhysicalDeviceMultiviewFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMultiviewFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures ) ==
+ sizeof( VkPhysicalDeviceMultiviewFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewFeatures>::value,
+ "PhysicalDeviceMultiviewFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMultiviewFeatures>
@@ -43040,7 +58303,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX;
@@ -43060,8 +58325,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &
- operator=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &
+ operator=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &
operator=( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43071,23 +58336,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX *>( this );
}
- operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, perViewPositionAllComponents );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & ) const = default;
#else
bool operator==( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( perViewPositionAllComponents == rhs.perViewPositionAllComponents );
+# endif
}
bool operator!=( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43101,11 +58382,16 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 perViewPositionAllComponents = {};
};
- static_assert( sizeof( PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ) ==
- sizeof( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ) ==
+ sizeof( VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>::value,
+ "PhysicalDeviceMultiviewPerViewAttributesPropertiesNVX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMultiviewPerViewAttributesPropertiesNVX>
@@ -43115,7 +58401,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMultiviewProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMultiviewProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMultiviewProperties;
@@ -43135,8 +58423,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMultiviewProperties &
- operator=( PhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMultiviewProperties &
+ operator=( PhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMultiviewProperties & operator=( VkPhysicalDeviceMultiviewProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -43144,24 +58432,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceMultiviewProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiviewProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMultiviewProperties *>( this );
}
- operator VkPhysicalDeviceMultiviewProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMultiviewProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMultiviewProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxMultiviewViewCount, maxMultiviewInstanceIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMultiviewProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceMultiviewProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxMultiviewViewCount == rhs.maxMultiviewViewCount ) &&
( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex );
+# endif
}
bool operator!=( PhysicalDeviceMultiviewProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43176,10 +58480,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxMultiviewViewCount = {};
uint32_t maxMultiviewInstanceIndex = {};
};
- static_assert( sizeof( PhysicalDeviceMultiviewProperties ) == sizeof( VkPhysicalDeviceMultiviewProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMultiviewProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties ) ==
+ sizeof( VkPhysicalDeviceMultiviewProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMultiviewProperties>::value,
+ "PhysicalDeviceMultiviewProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMultiviewProperties>
@@ -43190,7 +58498,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceMutableDescriptorTypeFeaturesVALVE
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE;
@@ -43210,8 +58520,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesVALVE &
- operator=( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceMutableDescriptorTypeFeaturesVALVE &
+ operator=( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceMutableDescriptorTypeFeaturesVALVE &
operator=( VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43221,13 +58531,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceMutableDescriptorTypeFeaturesVALVE & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesVALVE &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceMutableDescriptorTypeFeaturesVALVE &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceMutableDescriptorTypeFeaturesVALVE &
setMutableDescriptorType( VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType_ ) VULKAN_HPP_NOEXCEPT
{
mutableDescriptorType = mutableDescriptorType_;
@@ -43235,22 +58546,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE *>( this );
}
- operator VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, mutableDescriptorType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & ) const = default;
#else
bool operator==( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( mutableDescriptorType == rhs.mutableDescriptorType );
+# endif
}
bool operator!=( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43264,11 +58591,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 mutableDescriptorType = {};
};
- static_assert( sizeof( PhysicalDeviceMutableDescriptorTypeFeaturesVALVE ) ==
- sizeof( VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceMutableDescriptorTypeFeaturesVALVE>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE ) ==
+ sizeof( VkPhysicalDeviceMutableDescriptorTypeFeaturesVALVE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceMutableDescriptorTypeFeaturesVALVE>::value,
+ "PhysicalDeviceMutableDescriptorTypeFeaturesVALVE is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceMutableDescriptorTypeFeaturesVALVE>
@@ -43278,7 +58609,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePCIBusInfoPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePCIBusInfoPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePciBusInfoPropertiesEXT;
@@ -43302,8 +58635,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePCIBusInfoPropertiesEXT &
- operator=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePCIBusInfoPropertiesEXT &
+ operator=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePCIBusInfoPropertiesEXT &
operator=( VkPhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43312,23 +58645,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDevicePCIBusInfoPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePCIBusInfoPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT *>( this );
}
- operator VkPhysicalDevicePCIBusInfoPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePCIBusInfoPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePCIBusInfoPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pciDomain, pciBus, pciDevice, pciFunction );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePCIBusInfoPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pciDomain == rhs.pciDomain ) &&
( pciBus == rhs.pciBus ) && ( pciDevice == rhs.pciDevice ) && ( pciFunction == rhs.pciFunction );
+# endif
}
bool operator!=( PhysicalDevicePCIBusInfoPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43345,10 +58699,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t pciDevice = {};
uint32_t pciFunction = {};
};
- static_assert( sizeof( PhysicalDevicePCIBusInfoPropertiesEXT ) == sizeof( VkPhysicalDevicePCIBusInfoPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePCIBusInfoPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT ) ==
+ sizeof( VkPhysicalDevicePCIBusInfoPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePCIBusInfoPropertiesEXT>::value,
+ "PhysicalDevicePCIBusInfoPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePciBusInfoPropertiesEXT>
@@ -43356,9 +58714,124 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDevicePCIBusInfoPropertiesEXT;
};
+ struct PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT
+ {
+ using NativeType = VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(
+ VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory_ = {} ) VULKAN_HPP_NOEXCEPT
+ : pageableDeviceLocalMemory( pageableDeviceLocalMemory_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(
+ PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(
+ VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT(
+ *reinterpret_cast<PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &
+ operator=( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &
+ operator=( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this =
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &
+ setPageableDeviceLocalMemory( VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pageableDeviceLocalMemory = pageableDeviceLocalMemory_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *>( this );
+ }
+
+ explicit operator VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pageableDeviceLocalMemory );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & ) const = default;
+#else
+ bool operator==( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( pageableDeviceLocalMemory == rhs.pageableDeviceLocalMemory );
+# endif
+ }
+
+ bool operator!=( PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 pageableDeviceLocalMemory = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT ) ==
+ sizeof( VkPhysicalDevicePageableDeviceLocalMemoryFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>::value,
+ "PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDevicePageableDeviceLocalMemoryFeaturesEXT>
+ {
+ using Type = PhysicalDevicePageableDeviceLocalMemoryFeaturesEXT;
+ };
+
struct PhysicalDevicePerformanceQueryFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePerformanceQueryFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR;
@@ -43380,8 +58853,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR &
- operator=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePerformanceQueryFeaturesKHR &
+ operator=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePerformanceQueryFeaturesKHR &
operator=( VkPhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43391,20 +58864,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePerformanceQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePerformanceQueryFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR &
setPerformanceCounterQueryPools( VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools_ ) VULKAN_HPP_NOEXCEPT
{
performanceCounterQueryPools = performanceCounterQueryPools_;
return *this;
}
- PhysicalDevicePerformanceQueryFeaturesKHR & setPerformanceCounterMultipleQueryPools(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryFeaturesKHR & setPerformanceCounterMultipleQueryPools(
VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools_ ) VULKAN_HPP_NOEXCEPT
{
performanceCounterMultipleQueryPools = performanceCounterMultipleQueryPools_;
@@ -43412,24 +58885,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePerformanceQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePerformanceQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR *>( this );
}
- operator VkPhysicalDevicePerformanceQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePerformanceQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePerformanceQueryFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, performanceCounterQueryPools, performanceCounterMultipleQueryPools );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePerformanceQueryFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( performanceCounterQueryPools == rhs.performanceCounterQueryPools ) &&
( performanceCounterMultipleQueryPools == rhs.performanceCounterMultipleQueryPools );
+# endif
}
bool operator!=( PhysicalDevicePerformanceQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43444,11 +58936,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 performanceCounterQueryPools = {};
VULKAN_HPP_NAMESPACE::Bool32 performanceCounterMultipleQueryPools = {};
};
- static_assert( sizeof( PhysicalDevicePerformanceQueryFeaturesKHR ) ==
- sizeof( VkPhysicalDevicePerformanceQueryFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePerformanceQueryFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR ) ==
+ sizeof( VkPhysicalDevicePerformanceQueryFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryFeaturesKHR>::value,
+ "PhysicalDevicePerformanceQueryFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePerformanceQueryFeaturesKHR>
@@ -43458,7 +58954,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePerformanceQueryPropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePerformanceQueryPropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR;
@@ -43478,8 +58976,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePerformanceQueryPropertiesKHR &
- operator=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePerformanceQueryPropertiesKHR &
+ operator=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePerformanceQueryPropertiesKHR &
operator=( VkPhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43488,23 +58986,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDevicePerformanceQueryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePerformanceQueryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR *>( this );
}
- operator VkPhysicalDevicePerformanceQueryPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePerformanceQueryPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePerformanceQueryPropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, allowCommandBufferQueryCopies );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePerformanceQueryPropertiesKHR const & ) const = default;
#else
bool operator==( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( allowCommandBufferQueryCopies == rhs.allowCommandBufferQueryCopies );
+# endif
}
bool operator!=( PhysicalDevicePerformanceQueryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43518,11 +59032,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 allowCommandBufferQueryCopies = {};
};
- static_assert( sizeof( PhysicalDevicePerformanceQueryPropertiesKHR ) ==
- sizeof( VkPhysicalDevicePerformanceQueryPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePerformanceQueryPropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR ) ==
+ sizeof( VkPhysicalDevicePerformanceQueryPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePerformanceQueryPropertiesKHR>::value,
+ "PhysicalDevicePerformanceQueryPropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePerformanceQueryPropertiesKHR>
@@ -43530,47 +59048,50 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDevicePerformanceQueryPropertiesKHR;
};
- struct PhysicalDevicePipelineCreationCacheControlFeaturesEXT
+ struct PhysicalDevicePipelineCreationCacheControlFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePipelineCreationCacheControlFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDevicePipelineCreationCacheControlFeaturesEXT;
+ StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCreationCacheControlFeaturesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCreationCacheControlFeatures(
VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ = {} ) VULKAN_HPP_NOEXCEPT
: pipelineCreationCacheControl( pipelineCreationCacheControl_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCreationCacheControlFeaturesEXT(
- PhysicalDevicePipelineCreationCacheControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDevicePipelineCreationCacheControlFeatures(
+ PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDevicePipelineCreationCacheControlFeaturesEXT(
- VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDevicePipelineCreationCacheControlFeaturesEXT(
- *reinterpret_cast<PhysicalDevicePipelineCreationCacheControlFeaturesEXT const *>( &rhs ) )
+ PhysicalDevicePipelineCreationCacheControlFeatures(
+ VkPhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDevicePipelineCreationCacheControlFeatures(
+ *reinterpret_cast<PhysicalDevicePipelineCreationCacheControlFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeaturesEXT &
- operator=( PhysicalDevicePipelineCreationCacheControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePipelineCreationCacheControlFeatures &
+ operator=( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDevicePipelineCreationCacheControlFeaturesEXT &
- operator=( VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDevicePipelineCreationCacheControlFeatures &
+ operator=( VkPhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
*this =
- *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeaturesEXT const *>( &rhs );
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePipelineCreationCacheControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePipelineCreationCacheControlFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineCreationCacheControlFeatures &
setPipelineCreationCacheControl( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ ) VULKAN_HPP_NOEXCEPT
{
pipelineCreationCacheControl = pipelineCreationCacheControl_;
@@ -43578,51 +59099,74 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePipelineCreationCacheControlFeatures const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeatures *>( this );
}
- operator VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePipelineCreationCacheControlFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDevicePipelineCreationCacheControlFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pipelineCreationCacheControl );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDevicePipelineCreationCacheControlFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDevicePipelineCreationCacheControlFeatures const & ) const = default;
#else
- bool operator==( PhysicalDevicePipelineCreationCacheControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( pipelineCreationCacheControl == rhs.pipelineCreationCacheControl );
+# endif
}
- bool operator!=( PhysicalDevicePipelineCreationCacheControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDevicePipelineCreationCacheControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineCreationCacheControlFeaturesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl = {};
};
- static_assert( sizeof( PhysicalDevicePipelineCreationCacheControlFeaturesEXT ) ==
- sizeof( VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePipelineCreationCacheControlFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures ) ==
+ sizeof( VkPhysicalDevicePipelineCreationCacheControlFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineCreationCacheControlFeatures>::value,
+ "PhysicalDevicePipelineCreationCacheControlFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDevicePipelineCreationCacheControlFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDevicePipelineCreationCacheControlFeatures>
{
- using Type = PhysicalDevicePipelineCreationCacheControlFeaturesEXT;
+ using Type = PhysicalDevicePipelineCreationCacheControlFeatures;
};
+ using PhysicalDevicePipelineCreationCacheControlFeaturesEXT = PhysicalDevicePipelineCreationCacheControlFeatures;
struct PhysicalDevicePipelineExecutablePropertiesFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR;
@@ -43642,8 +59186,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR &
- operator=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePipelineExecutablePropertiesFeaturesKHR &
+ operator=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePipelineExecutablePropertiesFeaturesKHR &
operator=( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43654,13 +59198,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePipelineExecutablePropertiesFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePipelineExecutablePropertiesFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePipelineExecutablePropertiesFeaturesKHR &
setPipelineExecutableInfo( VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo_ ) VULKAN_HPP_NOEXCEPT
{
pipelineExecutableInfo = pipelineExecutableInfo_;
@@ -43668,23 +59213,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *>( this );
}
- operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pipelineExecutableInfo );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( pipelineExecutableInfo == rhs.pipelineExecutableInfo );
+# endif
}
bool operator!=( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43698,11 +59259,16 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 pipelineExecutableInfo = {};
};
- static_assert( sizeof( PhysicalDevicePipelineExecutablePropertiesFeaturesKHR ) ==
- sizeof( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePipelineExecutablePropertiesFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR ) ==
+ sizeof( VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDevicePipelineExecutablePropertiesFeaturesKHR>::value,
+ "PhysicalDevicePipelineExecutablePropertiesFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePipelineExecutablePropertiesFeaturesKHR>
@@ -43712,7 +59278,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePointClippingProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePointClippingProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePointClippingProperties;
@@ -43732,8 +59300,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePointClippingProperties &
- operator=( PhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePointClippingProperties &
+ operator=( PhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePointClippingProperties &
operator=( VkPhysicalDevicePointClippingProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43742,22 +59310,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDevicePointClippingProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePointClippingProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePointClippingProperties *>( this );
}
- operator VkPhysicalDevicePointClippingProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePointClippingProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePointClippingProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PointClippingBehavior const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pointClippingBehavior );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePointClippingProperties const & ) const = default;
#else
bool operator==( PhysicalDevicePointClippingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pointClippingBehavior == rhs.pointClippingBehavior );
+# endif
}
bool operator!=( PhysicalDevicePointClippingProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -43772,10 +59358,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PointClippingBehavior pointClippingBehavior =
VULKAN_HPP_NAMESPACE::PointClippingBehavior::eAllClipPlanes;
};
- static_assert( sizeof( PhysicalDevicePointClippingProperties ) == sizeof( VkPhysicalDevicePointClippingProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePointClippingProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties ) ==
+ sizeof( VkPhysicalDevicePointClippingProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePointClippingProperties>::value,
+ "PhysicalDevicePointClippingProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePointClippingProperties>
@@ -43787,7 +59377,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct PhysicalDevicePortabilitySubsetFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePortabilitySubsetFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR;
@@ -43835,8 +59427,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
- operator=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePortabilitySubsetFeaturesKHR &
+ operator=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePortabilitySubsetFeaturesKHR &
operator=( VkPhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -43846,110 +59438,111 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePortabilitySubsetFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR & setConstantAlphaColorBlendFactors(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setConstantAlphaColorBlendFactors(
VULKAN_HPP_NAMESPACE::Bool32 constantAlphaColorBlendFactors_ ) VULKAN_HPP_NOEXCEPT
{
constantAlphaColorBlendFactors = constantAlphaColorBlendFactors_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR & setEvents( VULKAN_HPP_NAMESPACE::Bool32 events_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
+ setEvents( VULKAN_HPP_NAMESPACE::Bool32 events_ ) VULKAN_HPP_NOEXCEPT
{
events = events_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR & setImageViewFormatReinterpretation(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setImageViewFormatReinterpretation(
VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatReinterpretation_ ) VULKAN_HPP_NOEXCEPT
{
imageViewFormatReinterpretation = imageViewFormatReinterpretation_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setImageViewFormatSwizzle( VULKAN_HPP_NAMESPACE::Bool32 imageViewFormatSwizzle_ ) VULKAN_HPP_NOEXCEPT
{
imageViewFormatSwizzle = imageViewFormatSwizzle_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setImageView2DOn3DImage( VULKAN_HPP_NAMESPACE::Bool32 imageView2DOn3DImage_ ) VULKAN_HPP_NOEXCEPT
{
imageView2DOn3DImage = imageView2DOn3DImage_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setMultisampleArrayImage( VULKAN_HPP_NAMESPACE::Bool32 multisampleArrayImage_ ) VULKAN_HPP_NOEXCEPT
{
multisampleArrayImage = multisampleArrayImage_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setMutableComparisonSamplers( VULKAN_HPP_NAMESPACE::Bool32 mutableComparisonSamplers_ ) VULKAN_HPP_NOEXCEPT
{
mutableComparisonSamplers = mutableComparisonSamplers_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
- setPointPolygons( VULKAN_HPP_NAMESPACE::Bool32 pointPolygons_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
+ setPointPolygons( VULKAN_HPP_NAMESPACE::Bool32 pointPolygons_ ) VULKAN_HPP_NOEXCEPT
{
pointPolygons = pointPolygons_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
- setSamplerMipLodBias( VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
+ setSamplerMipLodBias( VULKAN_HPP_NAMESPACE::Bool32 samplerMipLodBias_ ) VULKAN_HPP_NOEXCEPT
{
samplerMipLodBias = samplerMipLodBias_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setSeparateStencilMaskRef( VULKAN_HPP_NAMESPACE::Bool32 separateStencilMaskRef_ ) VULKAN_HPP_NOEXCEPT
{
separateStencilMaskRef = separateStencilMaskRef_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR & setShaderSampleRateInterpolationFunctions(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setShaderSampleRateInterpolationFunctions(
VULKAN_HPP_NAMESPACE::Bool32 shaderSampleRateInterpolationFunctions_ ) VULKAN_HPP_NOEXCEPT
{
shaderSampleRateInterpolationFunctions = shaderSampleRateInterpolationFunctions_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setTessellationIsolines( VULKAN_HPP_NAMESPACE::Bool32 tessellationIsolines_ ) VULKAN_HPP_NOEXCEPT
{
tessellationIsolines = tessellationIsolines_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
setTessellationPointMode( VULKAN_HPP_NAMESPACE::Bool32 tessellationPointMode_ ) VULKAN_HPP_NOEXCEPT
{
tessellationPointMode = tessellationPointMode_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR &
- setTriangleFans( VULKAN_HPP_NAMESPACE::Bool32 triangleFans_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR &
+ setTriangleFans( VULKAN_HPP_NAMESPACE::Bool32 triangleFans_ ) VULKAN_HPP_NOEXCEPT
{
triangleFans = triangleFans_;
return *this;
}
- PhysicalDevicePortabilitySubsetFeaturesKHR & setVertexAttributeAccessBeyondStride(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetFeaturesKHR & setVertexAttributeAccessBeyondStride(
VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride_ ) VULKAN_HPP_NOEXCEPT
{
vertexAttributeAccessBeyondStride = vertexAttributeAccessBeyondStride_;
@@ -43957,21 +59550,68 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePortabilitySubsetFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePortabilitySubsetFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR *>( this );
}
- operator VkPhysicalDevicePortabilitySubsetFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePortabilitySubsetFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePortabilitySubsetFeaturesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ constantAlphaColorBlendFactors,
+ events,
+ imageViewFormatReinterpretation,
+ imageViewFormatSwizzle,
+ imageView2DOn3DImage,
+ multisampleArrayImage,
+ mutableComparisonSamplers,
+ pointPolygons,
+ samplerMipLodBias,
+ separateStencilMaskRef,
+ shaderSampleRateInterpolationFunctions,
+ tessellationIsolines,
+ tessellationPointMode,
+ triangleFans,
+ vertexAttributeAccessBeyondStride );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePortabilitySubsetFeaturesKHR const & ) const = default;
# else
bool operator==( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( constantAlphaColorBlendFactors == rhs.constantAlphaColorBlendFactors ) && ( events == rhs.events ) &&
( imageViewFormatReinterpretation == rhs.imageViewFormatReinterpretation ) &&
@@ -43985,6 +59625,7 @@ namespace VULKAN_HPP_NAMESPACE
( tessellationIsolines == rhs.tessellationIsolines ) &&
( tessellationPointMode == rhs.tessellationPointMode ) && ( triangleFans == rhs.triangleFans ) &&
( vertexAttributeAccessBeyondStride == rhs.vertexAttributeAccessBeyondStride );
+# endif
}
bool operator!=( PhysicalDevicePortabilitySubsetFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44012,11 +59653,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 triangleFans = {};
VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeAccessBeyondStride = {};
};
- static_assert( sizeof( PhysicalDevicePortabilitySubsetFeaturesKHR ) ==
- sizeof( VkPhysicalDevicePortabilitySubsetFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePortabilitySubsetFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR ) ==
+ sizeof( VkPhysicalDevicePortabilitySubsetFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetFeaturesKHR>::value,
+ "PhysicalDevicePortabilitySubsetFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePortabilitySubsetFeaturesKHR>
@@ -44028,7 +59673,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct PhysicalDevicePortabilitySubsetPropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePortabilitySubsetPropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR;
@@ -44048,8 +59695,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetPropertiesKHR &
- operator=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePortabilitySubsetPropertiesKHR &
+ operator=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePortabilitySubsetPropertiesKHR &
operator=( VkPhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44059,13 +59706,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePortabilitySubsetPropertiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetPropertiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePortabilitySubsetPropertiesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePortabilitySubsetPropertiesKHR &
setMinVertexInputBindingStrideAlignment( uint32_t minVertexInputBindingStrideAlignment_ ) VULKAN_HPP_NOEXCEPT
{
minVertexInputBindingStrideAlignment = minVertexInputBindingStrideAlignment_;
@@ -44073,23 +59720,39 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePortabilitySubsetPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePortabilitySubsetPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR *>( this );
}
- operator VkPhysicalDevicePortabilitySubsetPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePortabilitySubsetPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePortabilitySubsetPropertiesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, minVertexInputBindingStrideAlignment );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePortabilitySubsetPropertiesKHR const & ) const = default;
# else
bool operator==( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( minVertexInputBindingStrideAlignment == rhs.minVertexInputBindingStrideAlignment );
+# endif
}
bool operator!=( PhysicalDevicePortabilitySubsetPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44103,11 +59766,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t minVertexInputBindingStrideAlignment = {};
};
- static_assert( sizeof( PhysicalDevicePortabilitySubsetPropertiesKHR ) ==
- sizeof( VkPhysicalDevicePortabilitySubsetPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePortabilitySubsetPropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR ) ==
+ sizeof( VkPhysicalDevicePortabilitySubsetPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePortabilitySubsetPropertiesKHR>::value,
+ "PhysicalDevicePortabilitySubsetPropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePortabilitySubsetPropertiesKHR>
@@ -44118,7 +59785,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePresentIdFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePresentIdFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePresentIdFeaturesKHR;
@@ -44136,8 +59805,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR &
- operator=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePresentIdFeaturesKHR &
+ operator=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePresentIdFeaturesKHR &
operator=( VkPhysicalDevicePresentIdFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44147,35 +59816,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePresentIdFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePresentIdFeaturesKHR & setPresentId( VULKAN_HPP_NAMESPACE::Bool32 presentId_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentIdFeaturesKHR &
+ setPresentId( VULKAN_HPP_NAMESPACE::Bool32 presentId_ ) VULKAN_HPP_NOEXCEPT
{
presentId = presentId_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePresentIdFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePresentIdFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePresentIdFeaturesKHR *>( this );
}
- operator VkPhysicalDevicePresentIdFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePresentIdFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePresentIdFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, presentId );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePresentIdFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDevicePresentIdFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentId == rhs.presentId );
+# endif
}
bool operator!=( PhysicalDevicePresentIdFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44189,10 +59875,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 presentId = {};
};
- static_assert( sizeof( PhysicalDevicePresentIdFeaturesKHR ) == sizeof( VkPhysicalDevicePresentIdFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePresentIdFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR ) ==
+ sizeof( VkPhysicalDevicePresentIdFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePresentIdFeaturesKHR>::value,
+ "PhysicalDevicePresentIdFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePresentIdFeaturesKHR>
@@ -44202,7 +59892,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePresentWaitFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePresentWaitFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePresentWaitFeaturesKHR;
@@ -44220,8 +59912,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR &
- operator=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePresentWaitFeaturesKHR &
+ operator=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePresentWaitFeaturesKHR &
operator=( VkPhysicalDevicePresentWaitFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44231,36 +59923,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePresentWaitFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePresentWaitFeaturesKHR &
- setPresentWait( VULKAN_HPP_NAMESPACE::Bool32 presentWait_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePresentWaitFeaturesKHR &
+ setPresentWait( VULKAN_HPP_NAMESPACE::Bool32 presentWait_ ) VULKAN_HPP_NOEXCEPT
{
presentWait = presentWait_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePresentWaitFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePresentWaitFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePresentWaitFeaturesKHR *>( this );
}
- operator VkPhysicalDevicePresentWaitFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePresentWaitFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePresentWaitFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, presentWait );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePresentWaitFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( presentWait == rhs.presentWait );
+# endif
}
bool operator!=( PhysicalDevicePresentWaitFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44274,10 +59982,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 presentWait = {};
};
- static_assert( sizeof( PhysicalDevicePresentWaitFeaturesKHR ) == sizeof( VkPhysicalDevicePresentWaitFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePresentWaitFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR ) ==
+ sizeof( VkPhysicalDevicePresentWaitFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePresentWaitFeaturesKHR>::value,
+ "PhysicalDevicePresentWaitFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePresentWaitFeaturesKHR>
@@ -44287,7 +59999,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
@@ -44309,8 +60023,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
- operator=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
+ operator=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
operator=( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44321,45 +60035,66 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
setPrimitiveTopologyListRestart( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart_ ) VULKAN_HPP_NOEXCEPT
{
primitiveTopologyListRestart = primitiveTopologyListRestart_;
return *this;
}
- PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT & setPrimitiveTopologyPatchListRestart(
- VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &
+ setPrimitiveTopologyPatchListRestart( VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart_ )
+ VULKAN_HPP_NOEXCEPT
{
primitiveTopologyPatchListRestart = primitiveTopologyPatchListRestart_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *>( this );
}
- operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, primitiveTopologyListRestart, primitiveTopologyPatchListRestart );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( primitiveTopologyListRestart == rhs.primitiveTopologyListRestart ) &&
( primitiveTopologyPatchListRestart == rhs.primitiveTopologyPatchListRestart );
+# endif
}
bool operator!=( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44374,11 +60109,16 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyListRestart = {};
VULKAN_HPP_NAMESPACE::Bool32 primitiveTopologyPatchListRestart = {};
};
- static_assert( sizeof( PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT ) ==
- sizeof( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT ) ==
+ sizeof( VkPhysicalDevicePrimitiveTopologyListRestartFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>::value,
+ "PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePrimitiveTopologyListRestartFeaturesEXT>
@@ -44386,93 +60126,117 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDevicePrimitiveTopologyListRestartFeaturesEXT;
};
- struct PhysicalDevicePrivateDataFeaturesEXT
+ struct PhysicalDevicePrivateDataFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePrivateDataFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDevicePrivateDataFeaturesEXT;
+ StructureType::ePhysicalDevicePrivateDataFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
- PhysicalDevicePrivateDataFeaturesEXT( VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {} ) VULKAN_HPP_NOEXCEPT
+ PhysicalDevicePrivateDataFeatures( VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {} ) VULKAN_HPP_NOEXCEPT
: privateData( privateData_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDevicePrivateDataFeaturesEXT( PhysicalDevicePrivateDataFeaturesEXT const & rhs )
- VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDevicePrivateDataFeatures( PhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDevicePrivateDataFeaturesEXT( VkPhysicalDevicePrivateDataFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDevicePrivateDataFeaturesEXT( *reinterpret_cast<PhysicalDevicePrivateDataFeaturesEXT const *>( &rhs ) )
+ PhysicalDevicePrivateDataFeatures( VkPhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDevicePrivateDataFeatures( *reinterpret_cast<PhysicalDevicePrivateDataFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeaturesEXT &
- operator=( PhysicalDevicePrivateDataFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePrivateDataFeatures &
+ operator=( PhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDevicePrivateDataFeaturesEXT &
- operator=( VkPhysicalDevicePrivateDataFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDevicePrivateDataFeatures & operator=( VkPhysicalDevicePrivateDataFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeaturesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDevicePrivateDataFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDevicePrivateDataFeaturesEXT &
- setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePrivateDataFeatures &
+ setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT
{
privateData = privateData_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDevicePrivateDataFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePrivateDataFeatures const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDevicePrivateDataFeatures *>( this );
+ }
+
+ explicit operator VkPhysicalDevicePrivateDataFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDevicePrivateDataFeatures *>( this );
}
- operator VkPhysicalDevicePrivateDataFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDevicePrivateDataFeaturesEXT *>( this );
+ return std::tie( sType, pNext, privateData );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDevicePrivateDataFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDevicePrivateDataFeatures const & ) const = default;
#else
- bool operator==( PhysicalDevicePrivateDataFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDevicePrivateDataFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( privateData == rhs.privateData );
+# endif
}
- bool operator!=( PhysicalDevicePrivateDataFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDevicePrivateDataFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrivateDataFeaturesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDevicePrivateDataFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 privateData = {};
};
- static_assert( sizeof( PhysicalDevicePrivateDataFeaturesEXT ) == sizeof( VkPhysicalDevicePrivateDataFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePrivateDataFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures ) ==
+ sizeof( VkPhysicalDevicePrivateDataFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePrivateDataFeatures>::value,
+ "PhysicalDevicePrivateDataFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDevicePrivateDataFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDevicePrivateDataFeatures>
{
- using Type = PhysicalDevicePrivateDataFeaturesEXT;
+ using Type = PhysicalDevicePrivateDataFeatures;
};
+ using PhysicalDevicePrivateDataFeaturesEXT = PhysicalDevicePrivateDataFeatures;
struct PhysicalDeviceSparseProperties
{
+ using NativeType = VkPhysicalDeviceSparseProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PhysicalDeviceSparseProperties(
VULKAN_HPP_NAMESPACE::Bool32 residencyStandard2DBlockShape_ = {},
@@ -44495,8 +60259,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseProperties &
- operator=( PhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSparseProperties &
+ operator=( PhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSparseProperties & operator=( VkPhysicalDeviceSparseProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -44504,26 +60268,50 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceSparseProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSparseProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSparseProperties *>( this );
}
- operator VkPhysicalDeviceSparseProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSparseProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSparseProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( residencyStandard2DBlockShape,
+ residencyStandard2DMultisampleBlockShape,
+ residencyStandard3DBlockShape,
+ residencyAlignedMipSize,
+ residencyNonResidentStrict );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSparseProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceSparseProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( residencyStandard2DBlockShape == rhs.residencyStandard2DBlockShape ) &&
( residencyStandard2DMultisampleBlockShape == rhs.residencyStandard2DMultisampleBlockShape ) &&
( residencyStandard3DBlockShape == rhs.residencyStandard3DBlockShape ) &&
( residencyAlignedMipSize == rhs.residencyAlignedMipSize ) &&
( residencyNonResidentStrict == rhs.residencyNonResidentStrict );
+# endif
}
bool operator!=( PhysicalDeviceSparseProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44539,13 +60327,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 residencyAlignedMipSize = {};
VULKAN_HPP_NAMESPACE::Bool32 residencyNonResidentStrict = {};
};
- static_assert( sizeof( PhysicalDeviceSparseProperties ) == sizeof( VkPhysicalDeviceSparseProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSparseProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties ) ==
+ sizeof( VkPhysicalDeviceSparseProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties>::value,
+ "PhysicalDeviceSparseProperties is not nothrow_move_constructible!" );
struct PhysicalDeviceProperties
{
+ using NativeType = VkPhysicalDeviceProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties(
uint32_t apiVersion_ = {},
@@ -44576,8 +60370,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties &
- operator=( PhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceProperties & operator=( PhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceProperties & operator=( VkPhysicalDeviceProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -44585,25 +60378,57 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceProperties *>( this );
}
- operator VkPhysicalDeviceProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceType const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits const &,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( apiVersion,
+ driverVersion,
+ vendorID,
+ deviceID,
+ deviceType,
+ deviceName,
+ pipelineCacheUUID,
+ limits,
+ sparseProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( apiVersion == rhs.apiVersion ) && ( driverVersion == rhs.driverVersion ) &&
( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) && ( deviceType == rhs.deviceType ) &&
( deviceName == rhs.deviceName ) && ( pipelineCacheUUID == rhs.pipelineCacheUUID ) &&
( limits == rhs.limits ) && ( sparseProperties == rhs.sparseProperties );
+# endif
}
bool operator!=( PhysicalDeviceProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44623,14 +60448,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PhysicalDeviceLimits limits = {};
VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseProperties sparseProperties = {};
};
- static_assert( sizeof( PhysicalDeviceProperties ) == sizeof( VkPhysicalDeviceProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties ) ==
+ sizeof( VkPhysicalDeviceProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties>::value,
+ "PhysicalDeviceProperties is not nothrow_move_constructible!" );
struct PhysicalDeviceProperties2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProperties2;
+ using NativeType = VkPhysicalDeviceProperties2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceProperties2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
@@ -44646,8 +60477,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProperties2 &
- operator=( PhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceProperties2 & operator=( PhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceProperties2 & operator=( VkPhysicalDeviceProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -44655,22 +60485,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceProperties2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProperties2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceProperties2 *>( this );
}
- operator VkPhysicalDeviceProperties2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProperties2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceProperties2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, properties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceProperties2 const & ) const = default;
#else
bool operator==( PhysicalDeviceProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties );
+# endif
}
bool operator!=( PhysicalDeviceProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44684,10 +60532,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties properties = {};
};
- static_assert( sizeof( PhysicalDeviceProperties2 ) == sizeof( VkPhysicalDeviceProperties2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceProperties2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2 ) ==
+ sizeof( VkPhysicalDeviceProperties2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceProperties2>::value,
+ "PhysicalDeviceProperties2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceProperties2>
@@ -44698,7 +60549,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceProtectedMemoryFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceProtectedMemoryFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceProtectedMemoryFeatures;
@@ -44717,8 +60570,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures &
- operator=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceProtectedMemoryFeatures &
+ operator=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceProtectedMemoryFeatures &
operator=( VkPhysicalDeviceProtectedMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44728,36 +60581,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceProtectedMemoryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceProtectedMemoryFeatures &
- setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryFeatures &
+ setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT
{
protectedMemory = protectedMemory_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceProtectedMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProtectedMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures *>( this );
}
- operator VkPhysicalDeviceProtectedMemoryFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProtectedMemoryFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, protectedMemory );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceProtectedMemoryFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceProtectedMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedMemory == rhs.protectedMemory );
+# endif
}
bool operator!=( PhysicalDeviceProtectedMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44771,10 +60640,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 protectedMemory = {};
};
- static_assert( sizeof( PhysicalDeviceProtectedMemoryFeatures ) == sizeof( VkPhysicalDeviceProtectedMemoryFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceProtectedMemoryFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures ) ==
+ sizeof( VkPhysicalDeviceProtectedMemoryFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryFeatures>::value,
+ "PhysicalDeviceProtectedMemoryFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceProtectedMemoryFeatures>
@@ -44784,7 +60657,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceProtectedMemoryProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceProtectedMemoryProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceProtectedMemoryProperties;
@@ -44803,8 +60678,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProtectedMemoryProperties &
- operator=( PhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceProtectedMemoryProperties &
+ operator=( PhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceProtectedMemoryProperties &
operator=( VkPhysicalDeviceProtectedMemoryProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44813,22 +60688,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceProtectedMemoryProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProtectedMemoryProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties *>( this );
}
- operator VkPhysicalDeviceProtectedMemoryProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProtectedMemoryProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, protectedNoFault );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceProtectedMemoryProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceProtectedMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedNoFault == rhs.protectedNoFault );
+# endif
}
bool operator!=( PhysicalDeviceProtectedMemoryProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44842,11 +60733,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 protectedNoFault = {};
};
- static_assert( sizeof( PhysicalDeviceProtectedMemoryProperties ) ==
- sizeof( VkPhysicalDeviceProtectedMemoryProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceProtectedMemoryProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties ) ==
+ sizeof( VkPhysicalDeviceProtectedMemoryProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceProtectedMemoryProperties>::value,
+ "PhysicalDeviceProtectedMemoryProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceProtectedMemoryProperties>
@@ -44856,7 +60751,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceProvokingVertexFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceProvokingVertexFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT;
@@ -44878,8 +60775,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT &
- operator=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceProvokingVertexFeaturesEXT &
+ operator=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceProvokingVertexFeaturesEXT &
operator=( VkPhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44889,20 +60786,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceProvokingVertexFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceProvokingVertexFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT &
setProvokingVertexLast( VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast_ ) VULKAN_HPP_NOEXCEPT
{
provokingVertexLast = provokingVertexLast_;
return *this;
}
- PhysicalDeviceProvokingVertexFeaturesEXT & setTransformFeedbackPreservesProvokingVertex(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexFeaturesEXT & setTransformFeedbackPreservesProvokingVertex(
VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex_ ) VULKAN_HPP_NOEXCEPT
{
transformFeedbackPreservesProvokingVertex = transformFeedbackPreservesProvokingVertex_;
@@ -44910,23 +60807,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceProvokingVertexFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProvokingVertexFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceProvokingVertexFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceProvokingVertexFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProvokingVertexFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceProvokingVertexFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, provokingVertexLast, transformFeedbackPreservesProvokingVertex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceProvokingVertexFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexLast == rhs.provokingVertexLast ) &&
( transformFeedbackPreservesProvokingVertex == rhs.transformFeedbackPreservesProvokingVertex );
+# endif
}
bool operator!=( PhysicalDeviceProvokingVertexFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -44941,11 +60857,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 provokingVertexLast = {};
VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesProvokingVertex = {};
};
- static_assert( sizeof( PhysicalDeviceProvokingVertexFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceProvokingVertexFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceProvokingVertexFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceProvokingVertexFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexFeaturesEXT>::value,
+ "PhysicalDeviceProvokingVertexFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceProvokingVertexFeaturesEXT>
@@ -44955,7 +60875,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceProvokingVertexPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceProvokingVertexPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT;
@@ -44977,8 +60899,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceProvokingVertexPropertiesEXT &
- operator=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceProvokingVertexPropertiesEXT &
+ operator=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceProvokingVertexPropertiesEXT &
operator=( VkPhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -44987,25 +60909,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceProvokingVertexPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProvokingVertexPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceProvokingVertexPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceProvokingVertexPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceProvokingVertexPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceProvokingVertexPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, provokingVertexModePerPipeline, transformFeedbackPreservesTriangleFanProvokingVertex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceProvokingVertexPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( provokingVertexModePerPipeline == rhs.provokingVertexModePerPipeline ) &&
( transformFeedbackPreservesTriangleFanProvokingVertex ==
rhs.transformFeedbackPreservesTriangleFanProvokingVertex );
+# endif
}
bool operator!=( PhysicalDeviceProvokingVertexPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45020,11 +60962,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 provokingVertexModePerPipeline = {};
VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackPreservesTriangleFanProvokingVertex = {};
};
- static_assert( sizeof( PhysicalDeviceProvokingVertexPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceProvokingVertexPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceProvokingVertexPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceProvokingVertexPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceProvokingVertexPropertiesEXT>::value,
+ "PhysicalDeviceProvokingVertexPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceProvokingVertexPropertiesEXT>
@@ -45034,7 +60980,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDevicePushDescriptorPropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDevicePushDescriptorPropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDevicePushDescriptorPropertiesKHR;
@@ -45054,8 +61002,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDevicePushDescriptorPropertiesKHR &
- operator=( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDevicePushDescriptorPropertiesKHR &
+ operator=( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDevicePushDescriptorPropertiesKHR &
operator=( VkPhysicalDevicePushDescriptorPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45064,22 +61012,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDevicePushDescriptorPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePushDescriptorPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR *>( this );
}
- operator VkPhysicalDevicePushDescriptorPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDevicePushDescriptorPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxPushDescriptors );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDevicePushDescriptorPropertiesKHR const & ) const = default;
#else
bool operator==( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxPushDescriptors == rhs.maxPushDescriptors );
+# endif
}
bool operator!=( PhysicalDevicePushDescriptorPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45093,11 +61057,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxPushDescriptors = {};
};
- static_assert( sizeof( PhysicalDevicePushDescriptorPropertiesKHR ) ==
- sizeof( VkPhysicalDevicePushDescriptorPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDevicePushDescriptorPropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR ) ==
+ sizeof( VkPhysicalDevicePushDescriptorPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDevicePushDescriptorPropertiesKHR>::value,
+ "PhysicalDevicePushDescriptorPropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDevicePushDescriptorPropertiesKHR>
@@ -45105,9 +61073,272 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDevicePushDescriptorPropertiesKHR;
};
+ struct PhysicalDeviceRGBA10X6FormatsFeaturesEXT
+ {
+ using NativeType = VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceRGBA10X6FormatsFeaturesEXT(
+ VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler_ = {} ) VULKAN_HPP_NOEXCEPT
+ : formatRgba10x6WithoutYCbCrSampler( formatRgba10x6WithoutYCbCrSampler_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceRGBA10X6FormatsFeaturesEXT(
+ PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceRGBA10X6FormatsFeaturesEXT( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceRGBA10X6FormatsFeaturesEXT(
+ *reinterpret_cast<PhysicalDeviceRGBA10X6FormatsFeaturesEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceRGBA10X6FormatsFeaturesEXT &
+ operator=( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceRGBA10X6FormatsFeaturesEXT &
+ operator=( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRGBA10X6FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRGBA10X6FormatsFeaturesEXT & setFormatRgba10x6WithoutYCbCrSampler(
+ VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler_ ) VULKAN_HPP_NOEXCEPT
+ {
+ formatRgba10x6WithoutYCbCrSampler = formatRgba10x6WithoutYCbCrSampler_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, formatRgba10x6WithoutYCbCrSampler );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( formatRgba10x6WithoutYCbCrSampler == rhs.formatRgba10x6WithoutYCbCrSampler );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceRGBA10X6FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 formatRgba10x6WithoutYCbCrSampler = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceRGBA10X6FormatsFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRGBA10X6FormatsFeaturesEXT>::value,
+ "PhysicalDeviceRGBA10X6FormatsFeaturesEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceRgba10X6FormatsFeaturesEXT>
+ {
+ using Type = PhysicalDeviceRGBA10X6FormatsFeaturesEXT;
+ };
+
+ struct PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM
+ {
+ using NativeType = VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM(
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess_ = {} ) VULKAN_HPP_NOEXCEPT
+ : rasterizationOrderColorAttachmentAccess( rasterizationOrderColorAttachmentAccess_ )
+ , rasterizationOrderDepthAttachmentAccess( rasterizationOrderDepthAttachmentAccess_ )
+ , rasterizationOrderStencilAttachmentAccess( rasterizationOrderStencilAttachmentAccess_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM(
+ PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM(
+ VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM(
+ *reinterpret_cast<PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM & operator =(
+ PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &
+ operator=( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this =
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const *>(
+ &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &
+ setRasterizationOrderColorAttachmentAccess(
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT
+ {
+ rasterizationOrderColorAttachmentAccess = rasterizationOrderColorAttachmentAccess_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &
+ setRasterizationOrderDepthAttachmentAccess(
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT
+ {
+ rasterizationOrderDepthAttachmentAccess = rasterizationOrderDepthAttachmentAccess_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &
+ setRasterizationOrderStencilAttachmentAccess(
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess_ ) VULKAN_HPP_NOEXCEPT
+ {
+ rasterizationOrderStencilAttachmentAccess = rasterizationOrderStencilAttachmentAccess_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ rasterizationOrderColorAttachmentAccess,
+ rasterizationOrderDepthAttachmentAccess,
+ rasterizationOrderStencilAttachmentAccess );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( rasterizationOrderColorAttachmentAccess == rhs.rasterizationOrderColorAttachmentAccess ) &&
+ ( rasterizationOrderDepthAttachmentAccess == rhs.rasterizationOrderDepthAttachmentAccess ) &&
+ ( rasterizationOrderStencilAttachmentAccess == rhs.rasterizationOrderStencilAttachmentAccess );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType =
+ StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderColorAttachmentAccess = {};
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderDepthAttachmentAccess = {};
+ VULKAN_HPP_NAMESPACE::Bool32 rasterizationOrderStencilAttachmentAccess = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT(
+ sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM ) ==
+ sizeof( VkPhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM>::value,
+ "PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM>
+ {
+ using Type = PhysicalDeviceRasterizationOrderAttachmentAccessFeaturesARM;
+ };
+
struct PhysicalDeviceRayQueryFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRayQueryFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRayQueryFeaturesKHR;
@@ -45125,8 +61356,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR &
- operator=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRayQueryFeaturesKHR &
+ operator=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRayQueryFeaturesKHR & operator=( VkPhysicalDeviceRayQueryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -45135,35 +61366,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceRayQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceRayQueryFeaturesKHR & setRayQuery( VULKAN_HPP_NAMESPACE::Bool32 rayQuery_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayQueryFeaturesKHR &
+ setRayQuery( VULKAN_HPP_NAMESPACE::Bool32 rayQuery_ ) VULKAN_HPP_NOEXCEPT
{
rayQuery = rayQuery_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceRayQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayQueryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceRayQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayQueryFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRayQueryFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, rayQuery );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRayQueryFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayQuery == rhs.rayQuery );
+# endif
}
bool operator!=( PhysicalDeviceRayQueryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45177,10 +61425,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 rayQuery = {};
};
- static_assert( sizeof( PhysicalDeviceRayQueryFeaturesKHR ) == sizeof( VkPhysicalDeviceRayQueryFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRayQueryFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceRayQueryFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayQueryFeaturesKHR>::value,
+ "PhysicalDeviceRayQueryFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRayQueryFeaturesKHR>
@@ -45190,7 +61442,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRayTracingMotionBlurFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRayTracingMotionBlurFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV;
@@ -45212,8 +61466,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV &
- operator=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRayTracingMotionBlurFeaturesNV &
+ operator=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRayTracingMotionBlurFeaturesNV &
operator=( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45223,44 +61477,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceRayTracingMotionBlurFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceRayTracingMotionBlurFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV &
setRayTracingMotionBlur( VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur_ ) VULKAN_HPP_NOEXCEPT
{
rayTracingMotionBlur = rayTracingMotionBlur_;
return *this;
}
- PhysicalDeviceRayTracingMotionBlurFeaturesNV & setRayTracingMotionBlurPipelineTraceRaysIndirect(
- VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingMotionBlurFeaturesNV &
+ setRayTracingMotionBlurPipelineTraceRaysIndirect(
+ VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT
{
rayTracingMotionBlurPipelineTraceRaysIndirect = rayTracingMotionBlurPipelineTraceRaysIndirect_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *>( this );
}
- operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingMotionBlurFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRayTracingMotionBlurFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, rayTracingMotionBlur, rayTracingMotionBlurPipelineTraceRaysIndirect );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingMotionBlur == rhs.rayTracingMotionBlur ) &&
( rayTracingMotionBlurPipelineTraceRaysIndirect == rhs.rayTracingMotionBlurPipelineTraceRaysIndirect );
+# endif
}
bool operator!=( PhysicalDeviceRayTracingMotionBlurFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45275,11 +61549,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlur = {};
VULKAN_HPP_NAMESPACE::Bool32 rayTracingMotionBlurPipelineTraceRaysIndirect = {};
};
- static_assert( sizeof( PhysicalDeviceRayTracingMotionBlurFeaturesNV ) ==
- sizeof( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRayTracingMotionBlurFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceRayTracingMotionBlurFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingMotionBlurFeaturesNV>::value,
+ "PhysicalDeviceRayTracingMotionBlurFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRayTracingMotionBlurFeaturesNV>
@@ -45289,7 +61567,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRayTracingPipelineFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRayTracingPipelineFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR;
@@ -45317,8 +61597,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR &
- operator=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRayTracingPipelineFeaturesKHR &
+ operator=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRayTracingPipelineFeaturesKHR &
operator=( VkPhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45328,41 +61608,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceRayTracingPipelineFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceRayTracingPipelineFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR &
setRayTracingPipeline( VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipeline_ ) VULKAN_HPP_NOEXCEPT
{
rayTracingPipeline = rayTracingPipeline_;
return *this;
}
- PhysicalDeviceRayTracingPipelineFeaturesKHR & setRayTracingPipelineShaderGroupHandleCaptureReplay(
- VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR &
+ setRayTracingPipelineShaderGroupHandleCaptureReplay(
+ VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplay_ ) VULKAN_HPP_NOEXCEPT
{
rayTracingPipelineShaderGroupHandleCaptureReplay = rayTracingPipelineShaderGroupHandleCaptureReplay_;
return *this;
}
- PhysicalDeviceRayTracingPipelineFeaturesKHR & setRayTracingPipelineShaderGroupHandleCaptureReplayMixed(
- VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR &
+ setRayTracingPipelineShaderGroupHandleCaptureReplayMixed(
+ VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineShaderGroupHandleCaptureReplayMixed_ ) VULKAN_HPP_NOEXCEPT
{
rayTracingPipelineShaderGroupHandleCaptureReplayMixed = rayTracingPipelineShaderGroupHandleCaptureReplayMixed_;
return *this;
}
- PhysicalDeviceRayTracingPipelineFeaturesKHR & setRayTracingPipelineTraceRaysIndirect(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR & setRayTracingPipelineTraceRaysIndirect(
VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect_ ) VULKAN_HPP_NOEXCEPT
{
rayTracingPipelineTraceRaysIndirect = rayTracingPipelineTraceRaysIndirect_;
return *this;
}
- PhysicalDeviceRayTracingPipelineFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelineFeaturesKHR &
setRayTraversalPrimitiveCulling( VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling_ ) VULKAN_HPP_NOEXCEPT
{
rayTraversalPrimitiveCulling = rayTraversalPrimitiveCulling_;
@@ -45370,21 +61652,48 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingPipelineFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRayTracingPipelineFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ rayTracingPipeline,
+ rayTracingPipelineShaderGroupHandleCaptureReplay,
+ rayTracingPipelineShaderGroupHandleCaptureReplayMixed,
+ rayTracingPipelineTraceRaysIndirect,
+ rayTraversalPrimitiveCulling );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRayTracingPipelineFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rayTracingPipeline == rhs.rayTracingPipeline ) &&
( rayTracingPipelineShaderGroupHandleCaptureReplay ==
rhs.rayTracingPipelineShaderGroupHandleCaptureReplay ) &&
@@ -45392,6 +61701,7 @@ namespace VULKAN_HPP_NAMESPACE
rhs.rayTracingPipelineShaderGroupHandleCaptureReplayMixed ) &&
( rayTracingPipelineTraceRaysIndirect == rhs.rayTracingPipelineTraceRaysIndirect ) &&
( rayTraversalPrimitiveCulling == rhs.rayTraversalPrimitiveCulling );
+# endif
}
bool operator!=( PhysicalDeviceRayTracingPipelineFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45409,11 +61719,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 rayTracingPipelineTraceRaysIndirect = {};
VULKAN_HPP_NAMESPACE::Bool32 rayTraversalPrimitiveCulling = {};
};
- static_assert( sizeof( PhysicalDeviceRayTracingPipelineFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceRayTracingPipelineFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRayTracingPipelineFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceRayTracingPipelineFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelineFeaturesKHR>::value,
+ "PhysicalDeviceRayTracingPipelineFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRayTracingPipelineFeaturesKHR>
@@ -45423,7 +61737,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRayTracingPipelinePropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRayTracingPipelinePropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR;
@@ -45457,8 +61773,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPipelinePropertiesKHR &
- operator=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRayTracingPipelinePropertiesKHR &
+ operator=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRayTracingPipelinePropertiesKHR &
operator=( VkPhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45467,21 +61783,54 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR *>( this );
}
- operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingPipelinePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRayTracingPipelinePropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ shaderGroupHandleSize,
+ maxRayRecursionDepth,
+ maxShaderGroupStride,
+ shaderGroupBaseAlignment,
+ shaderGroupHandleCaptureReplaySize,
+ maxRayDispatchInvocationCount,
+ shaderGroupHandleAlignment,
+ maxRayHitAttributeSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRayTracingPipelinePropertiesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderGroupHandleSize == rhs.shaderGroupHandleSize ) &&
( maxRayRecursionDepth == rhs.maxRayRecursionDepth ) &&
@@ -45491,6 +61840,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxRayDispatchInvocationCount == rhs.maxRayDispatchInvocationCount ) &&
( shaderGroupHandleAlignment == rhs.shaderGroupHandleAlignment ) &&
( maxRayHitAttributeSize == rhs.maxRayHitAttributeSize );
+# endif
}
bool operator!=( PhysicalDeviceRayTracingPipelinePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45511,11 +61861,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t shaderGroupHandleAlignment = {};
uint32_t maxRayHitAttributeSize = {};
};
- static_assert( sizeof( PhysicalDeviceRayTracingPipelinePropertiesKHR ) ==
- sizeof( VkPhysicalDeviceRayTracingPipelinePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRayTracingPipelinePropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR ) ==
+ sizeof( VkPhysicalDeviceRayTracingPipelinePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPipelinePropertiesKHR>::value,
+ "PhysicalDeviceRayTracingPipelinePropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRayTracingPipelinePropertiesKHR>
@@ -45525,7 +61879,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRayTracingPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRayTracingPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRayTracingPropertiesNV;
@@ -45557,8 +61913,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRayTracingPropertiesNV &
- operator=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRayTracingPropertiesNV &
+ operator=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRayTracingPropertiesNV &
operator=( VkPhysicalDeviceRayTracingPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45567,21 +61923,54 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceRayTracingPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV *>( this );
}
- operator VkPhysicalDeviceRayTracingPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRayTracingPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRayTracingPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint64_t const &,
+ uint64_t const &,
+ uint64_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ shaderGroupHandleSize,
+ maxRecursionDepth,
+ maxShaderGroupStride,
+ shaderGroupBaseAlignment,
+ maxGeometryCount,
+ maxInstanceCount,
+ maxTriangleCount,
+ maxDescriptorSetAccelerationStructures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRayTracingPropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceRayTracingPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderGroupHandleSize == rhs.shaderGroupHandleSize ) && ( maxRecursionDepth == rhs.maxRecursionDepth ) &&
( maxShaderGroupStride == rhs.maxShaderGroupStride ) &&
@@ -45589,6 +61978,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxGeometryCount == rhs.maxGeometryCount ) && ( maxInstanceCount == rhs.maxInstanceCount ) &&
( maxTriangleCount == rhs.maxTriangleCount ) &&
( maxDescriptorSetAccelerationStructures == rhs.maxDescriptorSetAccelerationStructures );
+# endif
}
bool operator!=( PhysicalDeviceRayTracingPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45609,10 +61999,14 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t maxTriangleCount = {};
uint32_t maxDescriptorSetAccelerationStructures = {};
};
- static_assert( sizeof( PhysicalDeviceRayTracingPropertiesNV ) == sizeof( VkPhysicalDeviceRayTracingPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRayTracingPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV ) ==
+ sizeof( VkPhysicalDeviceRayTracingPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRayTracingPropertiesNV>::value,
+ "PhysicalDeviceRayTracingPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRayTracingPropertiesNV>
@@ -45622,7 +62016,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRepresentativeFragmentTestFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV;
@@ -45642,8 +62038,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV &
- operator=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRepresentativeFragmentTestFeaturesNV &
+ operator=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRepresentativeFragmentTestFeaturesNV &
operator=( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45654,13 +62050,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceRepresentativeFragmentTestFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceRepresentativeFragmentTestFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRepresentativeFragmentTestFeaturesNV &
setRepresentativeFragmentTest( VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest_ ) VULKAN_HPP_NOEXCEPT
{
representativeFragmentTest = representativeFragmentTest_;
@@ -45668,23 +62065,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *>( this );
}
- operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, representativeFragmentTest );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( representativeFragmentTest == rhs.representativeFragmentTest );
+# endif
}
bool operator!=( PhysicalDeviceRepresentativeFragmentTestFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45698,11 +62111,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTest = {};
};
- static_assert( sizeof( PhysicalDeviceRepresentativeFragmentTestFeaturesNV ) ==
- sizeof( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRepresentativeFragmentTestFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRepresentativeFragmentTestFeaturesNV>::value,
+ "PhysicalDeviceRepresentativeFragmentTestFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRepresentativeFragmentTestFeaturesNV>
@@ -45712,7 +62129,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRobustness2FeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRobustness2FeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRobustness2FeaturesEXT;
@@ -45734,8 +62153,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT &
- operator=( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRobustness2FeaturesEXT &
+ operator=( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRobustness2FeaturesEXT &
operator=( VkPhysicalDeviceRobustness2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45745,51 +62164,71 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceRobustness2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceRobustness2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT &
setRobustBufferAccess2( VULKAN_HPP_NAMESPACE::Bool32 robustBufferAccess2_ ) VULKAN_HPP_NOEXCEPT
{
robustBufferAccess2 = robustBufferAccess2_;
return *this;
}
- PhysicalDeviceRobustness2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT &
setRobustImageAccess2( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2_ ) VULKAN_HPP_NOEXCEPT
{
robustImageAccess2 = robustImageAccess2_;
return *this;
}
- PhysicalDeviceRobustness2FeaturesEXT &
- setNullDescriptor( VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2FeaturesEXT &
+ setNullDescriptor( VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor_ ) VULKAN_HPP_NOEXCEPT
{
nullDescriptor = nullDescriptor_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceRobustness2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRobustness2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT *>( this );
}
- operator VkPhysicalDeviceRobustness2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRobustness2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRobustness2FeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, robustBufferAccess2, robustImageAccess2, nullDescriptor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRobustness2FeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustBufferAccess2 == rhs.robustBufferAccess2 ) &&
( robustImageAccess2 == rhs.robustImageAccess2 ) && ( nullDescriptor == rhs.nullDescriptor );
+# endif
}
bool operator!=( PhysicalDeviceRobustness2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45805,10 +62244,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess2 = {};
VULKAN_HPP_NAMESPACE::Bool32 nullDescriptor = {};
};
- static_assert( sizeof( PhysicalDeviceRobustness2FeaturesEXT ) == sizeof( VkPhysicalDeviceRobustness2FeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRobustness2FeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceRobustness2FeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2FeaturesEXT>::value,
+ "PhysicalDeviceRobustness2FeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRobustness2FeaturesEXT>
@@ -45818,7 +62261,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceRobustness2PropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceRobustness2PropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceRobustness2PropertiesEXT;
@@ -45839,8 +62284,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceRobustness2PropertiesEXT &
- operator=( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceRobustness2PropertiesEXT &
+ operator=( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceRobustness2PropertiesEXT &
operator=( VkPhysicalDeviceRobustness2PropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45849,24 +62294,43 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceRobustness2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRobustness2PropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT *>( this );
}
- operator VkPhysicalDeviceRobustness2PropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceRobustness2PropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceRobustness2PropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, robustStorageBufferAccessSizeAlignment, robustUniformBufferAccessSizeAlignment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceRobustness2PropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( robustStorageBufferAccessSizeAlignment == rhs.robustStorageBufferAccessSizeAlignment ) &&
( robustUniformBufferAccessSizeAlignment == rhs.robustUniformBufferAccessSizeAlignment );
+# endif
}
bool operator!=( PhysicalDeviceRobustness2PropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45881,10 +62345,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize robustStorageBufferAccessSizeAlignment = {};
VULKAN_HPP_NAMESPACE::DeviceSize robustUniformBufferAccessSizeAlignment = {};
};
- static_assert( sizeof( PhysicalDeviceRobustness2PropertiesEXT ) == sizeof( VkPhysicalDeviceRobustness2PropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceRobustness2PropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceRobustness2PropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceRobustness2PropertiesEXT>::value,
+ "PhysicalDeviceRobustness2PropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceRobustness2PropertiesEXT>
@@ -45894,7 +62363,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSampleLocationsPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSampleLocationsPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT;
@@ -45922,8 +62393,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSampleLocationsPropertiesEXT &
- operator=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSampleLocationsPropertiesEXT &
+ operator=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSampleLocationsPropertiesEXT &
operator=( VkPhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -45932,27 +62403,55 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceSampleLocationsPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSampleLocationsPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceSampleLocationsPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSampleLocationsPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<float, 2> const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ sampleLocationSampleCounts,
+ maxSampleLocationGridSize,
+ sampleLocationCoordinateRange,
+ sampleLocationSubPixelBits,
+ variableSampleLocations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSampleLocationsPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( sampleLocationSampleCounts == rhs.sampleLocationSampleCounts ) &&
( maxSampleLocationGridSize == rhs.maxSampleLocationGridSize ) &&
( sampleLocationCoordinateRange == rhs.sampleLocationCoordinateRange ) &&
( sampleLocationSubPixelBits == rhs.sampleLocationSubPixelBits ) &&
( variableSampleLocations == rhs.variableSampleLocations );
+# endif
}
bool operator!=( PhysicalDeviceSampleLocationsPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -45970,11 +62469,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t sampleLocationSubPixelBits = {};
VULKAN_HPP_NAMESPACE::Bool32 variableSampleLocations = {};
};
- static_assert( sizeof( PhysicalDeviceSampleLocationsPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceSampleLocationsPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSampleLocationsPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceSampleLocationsPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSampleLocationsPropertiesEXT>::value,
+ "PhysicalDeviceSampleLocationsPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSampleLocationsPropertiesEXT>
@@ -45984,7 +62487,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSamplerFilterMinmaxProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSamplerFilterMinmaxProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties;
@@ -46006,8 +62511,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerFilterMinmaxProperties &
- operator=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSamplerFilterMinmaxProperties &
+ operator=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSamplerFilterMinmaxProperties &
operator=( VkPhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46016,24 +62521,43 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceSamplerFilterMinmaxProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSamplerFilterMinmaxProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties *>( this );
}
- operator VkPhysicalDeviceSamplerFilterMinmaxProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSamplerFilterMinmaxProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, filterMinmaxSingleComponentFormats, filterMinmaxImageComponentMapping );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSamplerFilterMinmaxProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( filterMinmaxSingleComponentFormats == rhs.filterMinmaxSingleComponentFormats ) &&
( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping );
+# endif
}
bool operator!=( PhysicalDeviceSamplerFilterMinmaxProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46048,11 +62572,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxSingleComponentFormats = {};
VULKAN_HPP_NAMESPACE::Bool32 filterMinmaxImageComponentMapping = {};
};
- static_assert( sizeof( PhysicalDeviceSamplerFilterMinmaxProperties ) ==
- sizeof( VkPhysicalDeviceSamplerFilterMinmaxProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSamplerFilterMinmaxProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties ) ==
+ sizeof( VkPhysicalDeviceSamplerFilterMinmaxProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerFilterMinmaxProperties>::value,
+ "PhysicalDeviceSamplerFilterMinmaxProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSamplerFilterMinmaxProperties>
@@ -46063,7 +62591,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSamplerYcbcrConversionFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSamplerYcbcrConversionFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures;
@@ -46083,8 +62613,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures &
- operator=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSamplerYcbcrConversionFeatures &
+ operator=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSamplerYcbcrConversionFeatures &
operator=( VkPhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46094,13 +62624,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSamplerYcbcrConversionFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSamplerYcbcrConversionFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSamplerYcbcrConversionFeatures &
setSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ ) VULKAN_HPP_NOEXCEPT
{
samplerYcbcrConversion = samplerYcbcrConversion_;
@@ -46108,23 +62638,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSamplerYcbcrConversionFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSamplerYcbcrConversionFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures *>( this );
}
- operator VkPhysicalDeviceSamplerYcbcrConversionFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSamplerYcbcrConversionFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, samplerYcbcrConversion );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSamplerYcbcrConversionFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( samplerYcbcrConversion == rhs.samplerYcbcrConversion );
+# endif
}
bool operator!=( PhysicalDeviceSamplerYcbcrConversionFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46138,11 +62684,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion = {};
};
- static_assert( sizeof( PhysicalDeviceSamplerYcbcrConversionFeatures ) ==
- sizeof( VkPhysicalDeviceSamplerYcbcrConversionFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSamplerYcbcrConversionFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures ) ==
+ sizeof( VkPhysicalDeviceSamplerYcbcrConversionFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSamplerYcbcrConversionFeatures>::value,
+ "PhysicalDeviceSamplerYcbcrConversionFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSamplerYcbcrConversionFeatures>
@@ -46153,7 +62703,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceScalarBlockLayoutFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceScalarBlockLayoutFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceScalarBlockLayoutFeatures;
@@ -46171,8 +62723,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures &
- operator=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceScalarBlockLayoutFeatures &
+ operator=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceScalarBlockLayoutFeatures &
operator=( VkPhysicalDeviceScalarBlockLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46182,36 +62734,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceScalarBlockLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceScalarBlockLayoutFeatures &
- setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceScalarBlockLayoutFeatures &
+ setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT
{
scalarBlockLayout = scalarBlockLayout_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceScalarBlockLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceScalarBlockLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures *>( this );
}
- operator VkPhysicalDeviceScalarBlockLayoutFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceScalarBlockLayoutFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceScalarBlockLayoutFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, scalarBlockLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceScalarBlockLayoutFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( scalarBlockLayout == rhs.scalarBlockLayout );
+# endif
}
bool operator!=( PhysicalDeviceScalarBlockLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46225,11 +62793,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout = {};
};
- static_assert( sizeof( PhysicalDeviceScalarBlockLayoutFeatures ) ==
- sizeof( VkPhysicalDeviceScalarBlockLayoutFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceScalarBlockLayoutFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures ) ==
+ sizeof( VkPhysicalDeviceScalarBlockLayoutFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceScalarBlockLayoutFeatures>::value,
+ "PhysicalDeviceScalarBlockLayoutFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceScalarBlockLayoutFeatures>
@@ -46240,7 +62812,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSeparateDepthStencilLayoutsFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures;
@@ -46260,8 +62834,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures &
- operator=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSeparateDepthStencilLayoutsFeatures &
+ operator=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSeparateDepthStencilLayoutsFeatures &
operator=( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46272,13 +62846,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSeparateDepthStencilLayoutsFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSeparateDepthStencilLayoutsFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSeparateDepthStencilLayoutsFeatures &
setSeparateDepthStencilLayouts( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ ) VULKAN_HPP_NOEXCEPT
{
separateDepthStencilLayouts = separateDepthStencilLayouts_;
@@ -46286,23 +62861,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *>( this );
}
- operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, separateDepthStencilLayouts );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( separateDepthStencilLayouts == rhs.separateDepthStencilLayouts );
+# endif
}
bool operator!=( PhysicalDeviceSeparateDepthStencilLayoutsFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46316,11 +62907,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts = {};
};
- static_assert( sizeof( PhysicalDeviceSeparateDepthStencilLayoutsFeatures ) ==
- sizeof( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSeparateDepthStencilLayoutsFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures ) ==
+ sizeof( VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSeparateDepthStencilLayoutsFeatures>::value,
+ "PhysicalDeviceSeparateDepthStencilLayoutsFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSeparateDepthStencilLayoutsFeatures>
@@ -46331,7 +62926,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderAtomicFloat2FeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT;
@@ -46373,8 +62970,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
- operator=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
+ operator=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
operator=( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46384,90 +62981,90 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
setShaderBufferFloat16Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat16Atomics = shaderBufferFloat16Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
setShaderBufferFloat16AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat16AtomicAdd = shaderBufferFloat16AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderBufferFloat16AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderBufferFloat16AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat16AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat16AtomicMinMax = shaderBufferFloat16AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderBufferFloat32AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderBufferFloat32AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat32AtomicMinMax = shaderBufferFloat32AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderBufferFloat64AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderBufferFloat64AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat64AtomicMinMax = shaderBufferFloat64AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
setShaderSharedFloat16Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat16Atomics = shaderSharedFloat16Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT &
setShaderSharedFloat16AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat16AtomicAdd = shaderSharedFloat16AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderSharedFloat16AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderSharedFloat16AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat16AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat16AtomicMinMax = shaderSharedFloat16AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderSharedFloat32AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderSharedFloat32AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat32AtomicMinMax = shaderSharedFloat32AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderSharedFloat64AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderSharedFloat64AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat64AtomicMinMax = shaderSharedFloat64AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderImageFloat32AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setShaderImageFloat32AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
shaderImageFloat32AtomicMinMax = shaderImageFloat32AtomicMinMax_;
return *this;
}
- PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setSparseImageFloat32AtomicMinMax(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloat2FeaturesEXT & setSparseImageFloat32AtomicMinMax(
VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax_ ) VULKAN_HPP_NOEXCEPT
{
sparseImageFloat32AtomicMinMax = sparseImageFloat32AtomicMinMax_;
@@ -46475,21 +63072,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *>( this );
}
- operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ shaderBufferFloat16Atomics,
+ shaderBufferFloat16AtomicAdd,
+ shaderBufferFloat16AtomicMinMax,
+ shaderBufferFloat32AtomicMinMax,
+ shaderBufferFloat64AtomicMinMax,
+ shaderSharedFloat16Atomics,
+ shaderSharedFloat16AtomicAdd,
+ shaderSharedFloat16AtomicMinMax,
+ shaderSharedFloat32AtomicMinMax,
+ shaderSharedFloat64AtomicMinMax,
+ shaderImageFloat32AtomicMinMax,
+ sparseImageFloat32AtomicMinMax );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderBufferFloat16Atomics == rhs.shaderBufferFloat16Atomics ) &&
( shaderBufferFloat16AtomicAdd == rhs.shaderBufferFloat16AtomicAdd ) &&
@@ -46503,6 +63141,7 @@ namespace VULKAN_HPP_NAMESPACE
( shaderSharedFloat64AtomicMinMax == rhs.shaderSharedFloat64AtomicMinMax ) &&
( shaderImageFloat32AtomicMinMax == rhs.shaderImageFloat32AtomicMinMax ) &&
( sparseImageFloat32AtomicMinMax == rhs.sparseImageFloat32AtomicMinMax );
+# endif
}
bool operator!=( PhysicalDeviceShaderAtomicFloat2FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46527,11 +63166,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicMinMax = {};
VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicMinMax = {};
};
- static_assert( sizeof( PhysicalDeviceShaderAtomicFloat2FeaturesEXT ) ==
- sizeof( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderAtomicFloat2FeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceShaderAtomicFloat2FeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloat2FeaturesEXT>::value,
+ "PhysicalDeviceShaderAtomicFloat2FeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderAtomicFloat2FeaturesEXT>
@@ -46541,7 +63184,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderAtomicFloatFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderAtomicFloatFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT;
@@ -46583,8 +63228,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
- operator=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ operator=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderAtomicFloatFeaturesEXT &
operator=( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46594,90 +63239,90 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderAtomicFloatFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderBufferFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat32Atomics = shaderBufferFloat32Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderBufferFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat32AtomicAdd = shaderBufferFloat32AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderBufferFloat64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat64Atomics = shaderBufferFloat64Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderBufferFloat64AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferFloat64AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferFloat64AtomicAdd = shaderBufferFloat64AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderSharedFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat32Atomics = shaderSharedFloat32Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderSharedFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat32AtomicAdd = shaderSharedFloat32AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderSharedFloat64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat64Atomics = shaderSharedFloat64Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderSharedFloat64AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedFloat64AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedFloat64AtomicAdd = shaderSharedFloat64AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderImageFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderImageFloat32Atomics = shaderImageFloat32Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setShaderImageFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 shaderImageFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
shaderImageFloat32AtomicAdd = shaderImageFloat32AtomicAdd_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setSparseImageFloat32Atomics( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics_ ) VULKAN_HPP_NOEXCEPT
{
sparseImageFloat32Atomics = sparseImageFloat32Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicFloatFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicFloatFeaturesEXT &
setSparseImageFloat32AtomicAdd( VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd_ ) VULKAN_HPP_NOEXCEPT
{
sparseImageFloat32AtomicAdd = sparseImageFloat32AtomicAdd_;
@@ -46685,21 +63330,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderAtomicFloatFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ shaderBufferFloat32Atomics,
+ shaderBufferFloat32AtomicAdd,
+ shaderBufferFloat64Atomics,
+ shaderBufferFloat64AtomicAdd,
+ shaderSharedFloat32Atomics,
+ shaderSharedFloat32AtomicAdd,
+ shaderSharedFloat64Atomics,
+ shaderSharedFloat64AtomicAdd,
+ shaderImageFloat32Atomics,
+ shaderImageFloat32AtomicAdd,
+ sparseImageFloat32Atomics,
+ sparseImageFloat32AtomicAdd );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderBufferFloat32Atomics == rhs.shaderBufferFloat32Atomics ) &&
( shaderBufferFloat32AtomicAdd == rhs.shaderBufferFloat32AtomicAdd ) &&
@@ -46713,6 +63399,7 @@ namespace VULKAN_HPP_NAMESPACE
( shaderImageFloat32AtomicAdd == rhs.shaderImageFloat32AtomicAdd ) &&
( sparseImageFloat32Atomics == rhs.sparseImageFloat32Atomics ) &&
( sparseImageFloat32AtomicAdd == rhs.sparseImageFloat32AtomicAdd );
+# endif
}
bool operator!=( PhysicalDeviceShaderAtomicFloatFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46737,11 +63424,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32Atomics = {};
VULKAN_HPP_NAMESPACE::Bool32 sparseImageFloat32AtomicAdd = {};
};
- static_assert( sizeof( PhysicalDeviceShaderAtomicFloatFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderAtomicFloatFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceShaderAtomicFloatFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicFloatFeaturesEXT>::value,
+ "PhysicalDeviceShaderAtomicFloatFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderAtomicFloatFeaturesEXT>
@@ -46751,7 +63442,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderAtomicInt64Features
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderAtomicInt64Features;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderAtomicInt64Features;
@@ -46772,8 +63465,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features &
- operator=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderAtomicInt64Features &
+ operator=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderAtomicInt64Features &
operator=( VkPhysicalDeviceShaderAtomicInt64Features const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46783,20 +63476,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderAtomicInt64Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderAtomicInt64Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features &
setShaderBufferInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferInt64Atomics = shaderBufferInt64Atomics_;
return *this;
}
- PhysicalDeviceShaderAtomicInt64Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderAtomicInt64Features &
setShaderSharedInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedInt64Atomics = shaderSharedInt64Atomics_;
@@ -46804,24 +63497,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderAtomicInt64Features const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderAtomicInt64Features const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features *>( this );
}
- operator VkPhysicalDeviceShaderAtomicInt64Features &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderAtomicInt64Features &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderAtomicInt64Features *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderBufferInt64Atomics, shaderSharedInt64Atomics );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderAtomicInt64Features const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderAtomicInt64Features const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderBufferInt64Atomics == rhs.shaderBufferInt64Atomics ) &&
( shaderSharedInt64Atomics == rhs.shaderSharedInt64Atomics );
+# endif
}
bool operator!=( PhysicalDeviceShaderAtomicInt64Features const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46836,11 +63548,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics = {};
};
- static_assert( sizeof( PhysicalDeviceShaderAtomicInt64Features ) ==
- sizeof( VkPhysicalDeviceShaderAtomicInt64Features ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderAtomicInt64Features>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features ) ==
+ sizeof( VkPhysicalDeviceShaderAtomicInt64Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderAtomicInt64Features>::value,
+ "PhysicalDeviceShaderAtomicInt64Features is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderAtomicInt64Features>
@@ -46851,7 +63567,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderClockFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderClockFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderClockFeaturesKHR;
@@ -46871,8 +63589,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR &
- operator=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderClockFeaturesKHR &
+ operator=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderClockFeaturesKHR &
operator=( VkPhysicalDeviceShaderClockFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46882,44 +63600,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderClockFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderClockFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR &
setShaderSubgroupClock( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock_ ) VULKAN_HPP_NOEXCEPT
{
shaderSubgroupClock = shaderSubgroupClock_;
return *this;
}
- PhysicalDeviceShaderClockFeaturesKHR &
- setShaderDeviceClock( VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderClockFeaturesKHR &
+ setShaderDeviceClock( VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock_ ) VULKAN_HPP_NOEXCEPT
{
shaderDeviceClock = shaderDeviceClock_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderClockFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderClockFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceShaderClockFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderClockFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderClockFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderSubgroupClock, shaderDeviceClock );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderClockFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSubgroupClock == rhs.shaderSubgroupClock ) &&
( shaderDeviceClock == rhs.shaderDeviceClock );
+# endif
}
bool operator!=( PhysicalDeviceShaderClockFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -46934,10 +63671,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupClock = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderDeviceClock = {};
};
- static_assert( sizeof( PhysicalDeviceShaderClockFeaturesKHR ) == sizeof( VkPhysicalDeviceShaderClockFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderClockFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceShaderClockFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderClockFeaturesKHR>::value,
+ "PhysicalDeviceShaderClockFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderClockFeaturesKHR>
@@ -46947,7 +63688,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderCoreProperties2AMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderCoreProperties2AMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderCoreProperties2AMD;
@@ -46968,8 +63711,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderCoreProperties2AMD &
- operator=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderCoreProperties2AMD &
+ operator=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderCoreProperties2AMD &
operator=( VkPhysicalDeviceShaderCoreProperties2AMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -46978,23 +63721,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceShaderCoreProperties2AMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderCoreProperties2AMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD *>( this );
}
- operator VkPhysicalDeviceShaderCoreProperties2AMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderCoreProperties2AMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderCoreProperties2AMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderCoreFeatures, activeComputeUnitCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderCoreProperties2AMD const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderCoreFeatures == rhs.shaderCoreFeatures ) &&
( activeComputeUnitCount == rhs.activeComputeUnitCount );
+# endif
}
bool operator!=( PhysicalDeviceShaderCoreProperties2AMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -47009,10 +63771,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ShaderCorePropertiesFlagsAMD shaderCoreFeatures = {};
uint32_t activeComputeUnitCount = {};
};
- static_assert( sizeof( PhysicalDeviceShaderCoreProperties2AMD ) == sizeof( VkPhysicalDeviceShaderCoreProperties2AMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderCoreProperties2AMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD ) ==
+ sizeof( VkPhysicalDeviceShaderCoreProperties2AMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCoreProperties2AMD>::value,
+ "PhysicalDeviceShaderCoreProperties2AMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderCoreProperties2AMD>
@@ -47022,7 +63789,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderCorePropertiesAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderCorePropertiesAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderCorePropertiesAMD;
@@ -47067,8 +63836,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderCorePropertiesAMD &
- operator=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderCorePropertiesAMD &
+ operator=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderCorePropertiesAMD &
operator=( VkPhysicalDeviceShaderCorePropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -47077,21 +63846,66 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceShaderCorePropertiesAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderCorePropertiesAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD *>( this );
}
- operator VkPhysicalDeviceShaderCorePropertiesAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderCorePropertiesAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ shaderEngineCount,
+ shaderArraysPerEngineCount,
+ computeUnitsPerShaderArray,
+ simdPerComputeUnit,
+ wavefrontsPerSimd,
+ wavefrontSize,
+ sgprsPerSimd,
+ minSgprAllocation,
+ maxSgprAllocation,
+ sgprAllocationGranularity,
+ vgprsPerSimd,
+ minVgprAllocation,
+ maxVgprAllocation,
+ vgprAllocationGranularity );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderCorePropertiesAMD const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderEngineCount == rhs.shaderEngineCount ) &&
( shaderArraysPerEngineCount == rhs.shaderArraysPerEngineCount ) &&
( computeUnitsPerShaderArray == rhs.computeUnitsPerShaderArray ) &&
@@ -47101,6 +63915,7 @@ namespace VULKAN_HPP_NAMESPACE
( sgprAllocationGranularity == rhs.sgprAllocationGranularity ) && ( vgprsPerSimd == rhs.vgprsPerSimd ) &&
( minVgprAllocation == rhs.minVgprAllocation ) && ( maxVgprAllocation == rhs.maxVgprAllocation ) &&
( vgprAllocationGranularity == rhs.vgprAllocationGranularity );
+# endif
}
bool operator!=( PhysicalDeviceShaderCorePropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -47127,10 +63942,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxVgprAllocation = {};
uint32_t vgprAllocationGranularity = {};
};
- static_assert( sizeof( PhysicalDeviceShaderCorePropertiesAMD ) == sizeof( VkPhysicalDeviceShaderCorePropertiesAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderCorePropertiesAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD ) ==
+ sizeof( VkPhysicalDeviceShaderCorePropertiesAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderCorePropertiesAMD>::value,
+ "PhysicalDeviceShaderCorePropertiesAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderCorePropertiesAMD>
@@ -47138,47 +63957,50 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceShaderCorePropertiesAMD;
};
- struct PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT
+ struct PhysicalDeviceShaderDemoteToHelperInvocationFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+ StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDemoteToHelperInvocationFeatures(
VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ = {} ) VULKAN_HPP_NOEXCEPT
: shaderDemoteToHelperInvocation( shaderDemoteToHelperInvocation_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
- PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderDemoteToHelperInvocationFeatures(
+ PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
- VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
- *reinterpret_cast<PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const *>( &rhs ) )
+ PhysicalDeviceShaderDemoteToHelperInvocationFeatures(
+ VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceShaderDemoteToHelperInvocationFeatures(
+ *reinterpret_cast<PhysicalDeviceShaderDemoteToHelperInvocationFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT &
- operator=( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderDemoteToHelperInvocationFeatures &
+ operator=( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT &
- operator=( VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceShaderDemoteToHelperInvocationFeatures &
+ operator=( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const *>(
- &rhs );
+ *this =
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT & setShaderDemoteToHelperInvocation(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDemoteToHelperInvocationFeatures & setShaderDemoteToHelperInvocation(
VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ ) VULKAN_HPP_NOEXCEPT
{
shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation_;
@@ -47186,51 +64008,74 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *>( this );
}
- operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderDemoteToHelperInvocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation );
+# endif
}
- bool operator!=( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceShaderDemoteToHelperInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation = {};
};
- static_assert( sizeof( PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures ) ==
+ sizeof( VkPhysicalDeviceShaderDemoteToHelperInvocationFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDemoteToHelperInvocationFeatures>::value,
+ "PhysicalDeviceShaderDemoteToHelperInvocationFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceShaderDemoteToHelperInvocationFeatures>
{
- using Type = PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT;
+ using Type = PhysicalDeviceShaderDemoteToHelperInvocationFeatures;
};
+ using PhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT = PhysicalDeviceShaderDemoteToHelperInvocationFeatures;
struct PhysicalDeviceShaderDrawParametersFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderDrawParametersFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderDrawParametersFeatures;
@@ -47250,8 +64095,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures &
- operator=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderDrawParametersFeatures &
+ operator=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderDrawParametersFeatures &
operator=( VkPhysicalDeviceShaderDrawParametersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -47261,13 +64106,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderDrawParametersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderDrawParametersFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderDrawParametersFeatures &
setShaderDrawParameters( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ ) VULKAN_HPP_NOEXCEPT
{
shaderDrawParameters = shaderDrawParameters_;
@@ -47275,22 +64120,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderDrawParametersFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderDrawParametersFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures *>( this );
}
- operator VkPhysicalDeviceShaderDrawParametersFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderDrawParametersFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderDrawParametersFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderDrawParameters );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderDrawParametersFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderDrawParameters == rhs.shaderDrawParameters );
+# endif
}
bool operator!=( PhysicalDeviceShaderDrawParametersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -47304,11 +64165,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters = {};
};
- static_assert( sizeof( PhysicalDeviceShaderDrawParametersFeatures ) ==
- sizeof( VkPhysicalDeviceShaderDrawParametersFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderDrawParametersFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures ) ==
+ sizeof( VkPhysicalDeviceShaderDrawParametersFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderDrawParametersFeatures>::value,
+ "PhysicalDeviceShaderDrawParametersFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderDrawParametersFeatures>
@@ -47319,7 +64184,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderFloat16Int8Features
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderFloat16Int8Features;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderFloat16Int8Features;
@@ -47340,8 +64207,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features &
- operator=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderFloat16Int8Features &
+ operator=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderFloat16Int8Features &
operator=( VkPhysicalDeviceShaderFloat16Int8Features const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -47351,44 +64218,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderFloat16Int8Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderFloat16Int8Features &
- setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features &
+ setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT
{
shaderFloat16 = shaderFloat16_;
return *this;
}
- PhysicalDeviceShaderFloat16Int8Features &
- setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderFloat16Int8Features &
+ setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT
{
shaderInt8 = shaderInt8_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderFloat16Int8Features const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderFloat16Int8Features const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features *>( this );
}
- operator VkPhysicalDeviceShaderFloat16Int8Features &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderFloat16Int8Features &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderFloat16Int8Features *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderFloat16, shaderInt8 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderFloat16Int8Features const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderFloat16Int8Features const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderFloat16 == rhs.shaderFloat16 ) &&
( shaderInt8 == rhs.shaderInt8 );
+# endif
}
bool operator!=( PhysicalDeviceShaderFloat16Int8Features const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -47403,11 +64289,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16 = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderInt8 = {};
};
- static_assert( sizeof( PhysicalDeviceShaderFloat16Int8Features ) ==
- sizeof( VkPhysicalDeviceShaderFloat16Int8Features ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderFloat16Int8Features>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features ) ==
+ sizeof( VkPhysicalDeviceShaderFloat16Int8Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderFloat16Int8Features>::value,
+ "PhysicalDeviceShaderFloat16Int8Features is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderFloat16Int8Features>
@@ -47419,7 +64309,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderImageAtomicInt64FeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT;
@@ -47441,8 +64333,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
- operator=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
+ operator=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
operator=( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -47452,20 +64344,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderImageAtomicInt64FeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
setShaderImageInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderImageInt64Atomics = shaderImageInt64Atomics_;
return *this;
}
- PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageAtomicInt64FeaturesEXT &
setSparseImageInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
sparseImageInt64Atomics = sparseImageInt64Atomics_;
@@ -47473,24 +64366,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *>( this );
}
- operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderImageInt64Atomics, sparseImageInt64Atomics );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderImageInt64Atomics == rhs.shaderImageInt64Atomics ) &&
( sparseImageInt64Atomics == rhs.sparseImageInt64Atomics );
+# endif
}
bool operator!=( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -47505,11 +64417,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderImageInt64Atomics = {};
VULKAN_HPP_NAMESPACE::Bool32 sparseImageInt64Atomics = {};
};
- static_assert( sizeof( PhysicalDeviceShaderImageAtomicInt64FeaturesEXT ) ==
- sizeof( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderImageAtomicInt64FeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageAtomicInt64FeaturesEXT>::value,
+ "PhysicalDeviceShaderImageAtomicInt64FeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderImageAtomicInt64FeaturesEXT>
@@ -47519,7 +64435,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderImageFootprintFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderImageFootprintFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV;
@@ -47538,8 +64456,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV &
- operator=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderImageFootprintFeaturesNV &
+ operator=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderImageFootprintFeaturesNV &
operator=( VkPhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -47549,36 +64467,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderImageFootprintFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderImageFootprintFeaturesNV &
- setImageFootprint( VULKAN_HPP_NAMESPACE::Bool32 imageFootprint_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderImageFootprintFeaturesNV &
+ setImageFootprint( VULKAN_HPP_NAMESPACE::Bool32 imageFootprint_ ) VULKAN_HPP_NOEXCEPT
{
imageFootprint = imageFootprint_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderImageFootprintFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderImageFootprintFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV *>( this );
}
- operator VkPhysicalDeviceShaderImageFootprintFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderImageFootprintFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderImageFootprintFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageFootprint );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderImageFootprintFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageFootprint == rhs.imageFootprint );
+# endif
}
bool operator!=( PhysicalDeviceShaderImageFootprintFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -47592,11 +64526,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 imageFootprint = {};
};
- static_assert( sizeof( PhysicalDeviceShaderImageFootprintFeaturesNV ) ==
- sizeof( VkPhysicalDeviceShaderImageFootprintFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderImageFootprintFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceShaderImageFootprintFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderImageFootprintFeaturesNV>::value,
+ "PhysicalDeviceShaderImageFootprintFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderImageFootprintFeaturesNV>
@@ -47604,46 +64542,49 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceShaderImageFootprintFeaturesNV;
};
- struct PhysicalDeviceShaderIntegerDotProductFeaturesKHR
+ struct PhysicalDeviceShaderIntegerDotProductFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderIntegerDotProductFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+ StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductFeaturesKHR(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductFeatures(
VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ = {} ) VULKAN_HPP_NOEXCEPT
: shaderIntegerDotProduct( shaderIntegerDotProduct_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductFeaturesKHR(
- PhysicalDeviceShaderIntegerDotProductFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductFeatures(
+ PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderIntegerDotProductFeaturesKHR( VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const & rhs )
+ PhysicalDeviceShaderIntegerDotProductFeatures( VkPhysicalDeviceShaderIntegerDotProductFeatures const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceShaderIntegerDotProductFeaturesKHR(
- *reinterpret_cast<PhysicalDeviceShaderIntegerDotProductFeaturesKHR const *>( &rhs ) )
+ : PhysicalDeviceShaderIntegerDotProductFeatures(
+ *reinterpret_cast<PhysicalDeviceShaderIntegerDotProductFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeaturesKHR &
- operator=( PhysicalDeviceShaderIntegerDotProductFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderIntegerDotProductFeatures &
+ operator=( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderIntegerDotProductFeaturesKHR &
- operator=( VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceShaderIntegerDotProductFeatures &
+ operator=( VkPhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeaturesKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderIntegerDotProductFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductFeatures &
setShaderIntegerDotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ ) VULKAN_HPP_NOEXCEPT
{
shaderIntegerDotProduct = shaderIntegerDotProduct_;
@@ -47651,56 +64592,79 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderIntegerDotProductFeatures const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductFeatures *>( this );
}
- operator VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderIntegerDotProductFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceShaderIntegerDotProductFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderIntegerDotProduct );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceShaderIntegerDotProductFeaturesKHR const & ) const = default;
+ auto operator<=>( PhysicalDeviceShaderIntegerDotProductFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceShaderIntegerDotProductFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderIntegerDotProduct == rhs.shaderIntegerDotProduct );
+# endif
}
- bool operator!=( PhysicalDeviceShaderIntegerDotProductFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceShaderIntegerDotProductFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct = {};
};
- static_assert( sizeof( PhysicalDeviceShaderIntegerDotProductFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceShaderIntegerDotProductFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderIntegerDotProductFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures ) ==
+ sizeof( VkPhysicalDeviceShaderIntegerDotProductFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductFeatures>::value,
+ "PhysicalDeviceShaderIntegerDotProductFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceShaderIntegerDotProductFeaturesKHR>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceShaderIntegerDotProductFeatures>
{
- using Type = PhysicalDeviceShaderIntegerDotProductFeaturesKHR;
+ using Type = PhysicalDeviceShaderIntegerDotProductFeatures;
};
+ using PhysicalDeviceShaderIntegerDotProductFeaturesKHR = PhysicalDeviceShaderIntegerDotProductFeatures;
- struct PhysicalDeviceShaderIntegerDotProductPropertiesKHR
+ struct PhysicalDeviceShaderIntegerDotProductProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderIntegerDotProductProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+ StructureType::ePhysicalDeviceShaderIntegerDotProductProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductPropertiesKHR(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductProperties(
VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ = {},
VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ = {},
VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ = {},
@@ -47780,143 +64744,157 @@ namespace VULKAN_HPP_NAMESPACE
integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductPropertiesKHR(
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderIntegerDotProductProperties(
+ PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR(
- VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceShaderIntegerDotProductPropertiesKHR(
- *reinterpret_cast<PhysicalDeviceShaderIntegerDotProductPropertiesKHR const *>( &rhs ) )
+ PhysicalDeviceShaderIntegerDotProductProperties( VkPhysicalDeviceShaderIntegerDotProductProperties const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceShaderIntegerDotProductProperties(
+ *reinterpret_cast<PhysicalDeviceShaderIntegerDotProductProperties const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- operator=( PhysicalDeviceShaderIntegerDotProductPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderIntegerDotProductProperties &
+ operator=( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- operator=( VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceShaderIntegerDotProductProperties &
+ operator=( VkPhysicalDeviceShaderIntegerDotProductProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this =
- *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductPropertiesKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct8BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct8BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct8BitUnsignedAccelerated = integerDotProduct8BitUnsignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct8BitSignedAccelerated(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties & setIntegerDotProduct8BitSignedAccelerated(
VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct8BitSignedAccelerated = integerDotProduct8BitSignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct8BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct8BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct8BitMixedSignednessAccelerated = integerDotProduct8BitMixedSignednessAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct4x8BitPackedUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct4x8BitPackedUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct4x8BitPackedUnsignedAccelerated = integerDotProduct4x8BitPackedUnsignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct4x8BitPackedSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct4x8BitPackedSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct4x8BitPackedSignedAccelerated = integerDotProduct4x8BitPackedSignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct4x8BitPackedMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct4x8BitPackedMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct4x8BitPackedMixedSignednessAccelerated =
integerDotProduct4x8BitPackedMixedSignednessAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct16BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct16BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct16BitUnsignedAccelerated = integerDotProduct16BitUnsignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct16BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct16BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct16BitSignedAccelerated = integerDotProduct16BitSignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct16BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct16BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct16BitMixedSignednessAccelerated = integerDotProduct16BitMixedSignednessAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct32BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct32BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct32BitUnsignedAccelerated = integerDotProduct32BitUnsignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct32BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct32BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct32BitSignedAccelerated = integerDotProduct32BitSignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct32BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct32BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct32BitMixedSignednessAccelerated = integerDotProduct32BitMixedSignednessAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct64BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct64BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct64BitUnsignedAccelerated = integerDotProduct64BitUnsignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct64BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct64BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct64BitSignedAccelerated = integerDotProduct64BitSignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR & setIntegerDotProduct64BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProduct64BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProduct64BitMixedSignednessAccelerated = integerDotProduct64BitMixedSignednessAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating8BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating8BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating8BitUnsignedAccelerated =
@@ -47924,18 +64902,18 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating8BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating8BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ ) VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating8BitSignedAccelerated =
integerDotProductAccumulatingSaturating8BitSignedAccelerated_;
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated =
@@ -47943,9 +64921,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated =
@@ -47953,9 +64931,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated =
@@ -47963,9 +64941,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated =
@@ -47973,9 +64951,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating16BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating16BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating16BitUnsignedAccelerated =
@@ -47983,9 +64961,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating16BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating16BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating16BitSignedAccelerated =
@@ -47993,9 +64971,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated =
@@ -48003,9 +64981,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating32BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating32BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating32BitUnsignedAccelerated =
@@ -48013,9 +64991,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating32BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating32BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating32BitSignedAccelerated =
@@ -48023,9 +65001,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated =
@@ -48033,9 +65011,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating64BitUnsignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating64BitUnsignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating64BitUnsignedAccelerated =
@@ -48043,9 +65021,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating64BitSignedAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating64BitSignedAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating64BitSignedAccelerated =
@@ -48053,9 +65031,9 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- PhysicalDeviceShaderIntegerDotProductPropertiesKHR &
- setIntegerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated(
- VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerDotProductProperties &
+ setIntegerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated(
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ )
VULKAN_HPP_NOEXCEPT
{
integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated =
@@ -48064,21 +65042,98 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderIntegerDotProductProperties const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceShaderIntegerDotProductProperties *>( this );
}
- operator VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderIntegerDotProductProperties &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceShaderIntegerDotProductProperties *>( this );
}
-#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceShaderIntegerDotProductPropertiesKHR const & ) const = default;
-#else
- bool operator==( PhysicalDeviceShaderIntegerDotProductPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
- {
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ integerDotProduct8BitUnsignedAccelerated,
+ integerDotProduct8BitSignedAccelerated,
+ integerDotProduct8BitMixedSignednessAccelerated,
+ integerDotProduct4x8BitPackedUnsignedAccelerated,
+ integerDotProduct4x8BitPackedSignedAccelerated,
+ integerDotProduct4x8BitPackedMixedSignednessAccelerated,
+ integerDotProduct16BitUnsignedAccelerated,
+ integerDotProduct16BitSignedAccelerated,
+ integerDotProduct16BitMixedSignednessAccelerated,
+ integerDotProduct32BitUnsignedAccelerated,
+ integerDotProduct32BitSignedAccelerated,
+ integerDotProduct32BitMixedSignednessAccelerated,
+ integerDotProduct64BitUnsignedAccelerated,
+ integerDotProduct64BitSignedAccelerated,
+ integerDotProduct64BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating8BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating8BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated,
+ integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating16BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating16BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating32BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating32BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating64BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating64BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceShaderIntegerDotProductProperties const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated ) &&
( integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated ) &&
@@ -48131,16 +65186,17 @@ namespace VULKAN_HPP_NAMESPACE
rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated ) &&
( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ==
rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated );
+# endif
}
- bool operator!=( PhysicalDeviceShaderIntegerDotProductPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceShaderIntegerDotProductProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderIntegerDotProductProperties;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated = {};
VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated = {};
@@ -48173,21 +65229,28 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated = {};
VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = {};
};
- static_assert( sizeof( PhysicalDeviceShaderIntegerDotProductPropertiesKHR ) ==
- sizeof( VkPhysicalDeviceShaderIntegerDotProductPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderIntegerDotProductPropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties ) ==
+ sizeof( VkPhysicalDeviceShaderIntegerDotProductProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerDotProductProperties>::value,
+ "PhysicalDeviceShaderIntegerDotProductProperties is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceShaderIntegerDotProductPropertiesKHR>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceShaderIntegerDotProductProperties>
{
- using Type = PhysicalDeviceShaderIntegerDotProductPropertiesKHR;
+ using Type = PhysicalDeviceShaderIntegerDotProductProperties;
};
+ using PhysicalDeviceShaderIntegerDotProductPropertiesKHR = PhysicalDeviceShaderIntegerDotProductProperties;
struct PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL;
@@ -48207,8 +65270,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &
- operator=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &
+ operator=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &
operator=( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48219,13 +65282,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &
setShaderIntegerFunctions2( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2_ ) VULKAN_HPP_NOEXCEPT
{
shaderIntegerFunctions2 = shaderIntegerFunctions2_;
@@ -48233,23 +65297,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *>( this );
}
- operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderIntegerFunctions2 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderIntegerFunctions2 == rhs.shaderIntegerFunctions2 );
+# endif
}
bool operator!=( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48263,11 +65343,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerFunctions2 = {};
};
- static_assert( sizeof( PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL ) ==
- sizeof( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL ) ==
+ sizeof( VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>::value,
+ "PhysicalDeviceShaderIntegerFunctions2FeaturesINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderIntegerFunctions2FeaturesINTEL>
@@ -48277,7 +65361,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderSMBuiltinsFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderSMBuiltinsFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV;
@@ -48296,8 +65382,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV &
- operator=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderSMBuiltinsFeaturesNV &
+ operator=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderSMBuiltinsFeaturesNV &
operator=( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48307,36 +65393,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderSMBuiltinsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderSMBuiltinsFeaturesNV &
- setShaderSMBuiltins( VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsFeaturesNV &
+ setShaderSMBuiltins( VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins_ ) VULKAN_HPP_NOEXCEPT
{
shaderSMBuiltins = shaderSMBuiltins_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *>( this );
}
- operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSMBuiltinsFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderSMBuiltins );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSMBuiltins == rhs.shaderSMBuiltins );
+# endif
}
bool operator!=( PhysicalDeviceShaderSMBuiltinsFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48350,11 +65452,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderSMBuiltins = {};
};
- static_assert( sizeof( PhysicalDeviceShaderSMBuiltinsFeaturesNV ) ==
- sizeof( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderSMBuiltinsFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceShaderSMBuiltinsFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsFeaturesNV>::value,
+ "PhysicalDeviceShaderSMBuiltinsFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderSmBuiltinsFeaturesNV>
@@ -48364,7 +65470,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderSMBuiltinsPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderSMBuiltinsPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV;
@@ -48386,8 +65494,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSMBuiltinsPropertiesNV &
- operator=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderSMBuiltinsPropertiesNV &
+ operator=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderSMBuiltinsPropertiesNV &
operator=( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48396,23 +65504,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV *>( this );
}
- operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSMBuiltinsPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderSMCount, shaderWarpsPerSM );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shaderSMCount == rhs.shaderSMCount ) &&
( shaderWarpsPerSM == rhs.shaderWarpsPerSM );
+# endif
}
bool operator!=( PhysicalDeviceShaderSMBuiltinsPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48427,11 +65551,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t shaderSMCount = {};
uint32_t shaderWarpsPerSM = {};
};
- static_assert( sizeof( PhysicalDeviceShaderSMBuiltinsPropertiesNV ) ==
- sizeof( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderSMBuiltinsPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV ) ==
+ sizeof( VkPhysicalDeviceShaderSMBuiltinsPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSMBuiltinsPropertiesNV>::value,
+ "PhysicalDeviceShaderSMBuiltinsPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderSmBuiltinsPropertiesNV>
@@ -48441,7 +65569,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderSubgroupExtendedTypesFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures;
@@ -48461,8 +65591,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures &
- operator=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderSubgroupExtendedTypesFeatures &
+ operator=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderSubgroupExtendedTypesFeatures &
operator=( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48473,13 +65603,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderSubgroupExtendedTypesFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderSubgroupExtendedTypesFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupExtendedTypesFeatures &
setShaderSubgroupExtendedTypes( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ ) VULKAN_HPP_NOEXCEPT
{
shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes_;
@@ -48487,23 +65618,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *>( this );
}
- operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderSubgroupExtendedTypes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderSubgroupExtendedTypes == rhs.shaderSubgroupExtendedTypes );
+# endif
}
bool operator!=( PhysicalDeviceShaderSubgroupExtendedTypesFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48517,11 +65664,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes = {};
};
- static_assert( sizeof( PhysicalDeviceShaderSubgroupExtendedTypesFeatures ) ==
- sizeof( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderSubgroupExtendedTypesFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures ) ==
+ sizeof( VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupExtendedTypesFeatures>::value,
+ "PhysicalDeviceShaderSubgroupExtendedTypesFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderSubgroupExtendedTypesFeatures>
@@ -48532,7 +65683,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
@@ -48552,8 +65705,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &
- operator=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &
+ operator=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &
operator=( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48565,37 +65718,55 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR & setShaderSubgroupUniformControlFlow(
- VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &
+ setShaderSubgroupUniformControlFlow( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow_ )
+ VULKAN_HPP_NOEXCEPT
{
shaderSubgroupUniformControlFlow = shaderSubgroupUniformControlFlow_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderSubgroupUniformControlFlow );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderSubgroupUniformControlFlow == rhs.shaderSubgroupUniformControlFlow );
+# endif
}
bool operator!=( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48610,11 +65781,16 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupUniformControlFlow = {};
};
- static_assert( sizeof( PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>::value,
+ "PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR>
@@ -48622,47 +65798,49 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceShaderSubgroupUniformControlFlowFeaturesKHR;
};
- struct PhysicalDeviceShaderTerminateInvocationFeaturesKHR
+ struct PhysicalDeviceShaderTerminateInvocationFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShaderTerminateInvocationFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceShaderTerminateInvocationFeaturesKHR;
+ StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTerminateInvocationFeaturesKHR(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTerminateInvocationFeatures(
VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ = {} ) VULKAN_HPP_NOEXCEPT
: shaderTerminateInvocation( shaderTerminateInvocation_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTerminateInvocationFeaturesKHR(
- PhysicalDeviceShaderTerminateInvocationFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceShaderTerminateInvocationFeatures(
+ PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderTerminateInvocationFeaturesKHR(
- VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceShaderTerminateInvocationFeaturesKHR(
- *reinterpret_cast<PhysicalDeviceShaderTerminateInvocationFeaturesKHR const *>( &rhs ) )
+ PhysicalDeviceShaderTerminateInvocationFeatures( VkPhysicalDeviceShaderTerminateInvocationFeatures const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceShaderTerminateInvocationFeatures(
+ *reinterpret_cast<PhysicalDeviceShaderTerminateInvocationFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeaturesKHR &
- operator=( PhysicalDeviceShaderTerminateInvocationFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShaderTerminateInvocationFeatures &
+ operator=( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceShaderTerminateInvocationFeaturesKHR &
- operator=( VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceShaderTerminateInvocationFeatures &
+ operator=( VkPhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this =
- *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeaturesKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShaderTerminateInvocationFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShaderTerminateInvocationFeaturesKHR &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShaderTerminateInvocationFeatures &
setShaderTerminateInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ ) VULKAN_HPP_NOEXCEPT
{
shaderTerminateInvocation = shaderTerminateInvocation_;
@@ -48670,51 +65848,74 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderTerminateInvocationFeatures const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeatures *>( this );
}
- operator VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShaderTerminateInvocationFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceShaderTerminateInvocationFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shaderTerminateInvocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceShaderTerminateInvocationFeaturesKHR const & ) const = default;
+ auto operator<=>( PhysicalDeviceShaderTerminateInvocationFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceShaderTerminateInvocationFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderTerminateInvocation == rhs.shaderTerminateInvocation );
+# endif
}
- bool operator!=( PhysicalDeviceShaderTerminateInvocationFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceShaderTerminateInvocationFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderTerminateInvocationFeaturesKHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation = {};
};
- static_assert( sizeof( PhysicalDeviceShaderTerminateInvocationFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShaderTerminateInvocationFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures ) ==
+ sizeof( VkPhysicalDeviceShaderTerminateInvocationFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShaderTerminateInvocationFeatures>::value,
+ "PhysicalDeviceShaderTerminateInvocationFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceShaderTerminateInvocationFeaturesKHR>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceShaderTerminateInvocationFeatures>
{
- using Type = PhysicalDeviceShaderTerminateInvocationFeaturesKHR;
+ using Type = PhysicalDeviceShaderTerminateInvocationFeatures;
};
+ using PhysicalDeviceShaderTerminateInvocationFeaturesKHR = PhysicalDeviceShaderTerminateInvocationFeatures;
struct PhysicalDeviceShadingRateImageFeaturesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShadingRateImageFeaturesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShadingRateImageFeaturesNV;
@@ -48736,8 +65937,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV &
- operator=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShadingRateImageFeaturesNV &
+ operator=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShadingRateImageFeaturesNV &
operator=( VkPhysicalDeviceShadingRateImageFeaturesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48747,20 +65948,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceShadingRateImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceShadingRateImageFeaturesNV &
- setShadingRateImage( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV &
+ setShadingRateImage( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage_ ) VULKAN_HPP_NOEXCEPT
{
shadingRateImage = shadingRateImage_;
return *this;
}
- PhysicalDeviceShadingRateImageFeaturesNV &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImageFeaturesNV &
setShadingRateCoarseSampleOrder( VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder_ ) VULKAN_HPP_NOEXCEPT
{
shadingRateCoarseSampleOrder = shadingRateCoarseSampleOrder_;
@@ -48768,23 +65969,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceShadingRateImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShadingRateImageFeaturesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV *>( this );
}
- operator VkPhysicalDeviceShadingRateImageFeaturesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShadingRateImageFeaturesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shadingRateImage, shadingRateCoarseSampleOrder );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShadingRateImageFeaturesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateImage == rhs.shadingRateImage ) &&
( shadingRateCoarseSampleOrder == rhs.shadingRateCoarseSampleOrder );
+# endif
}
bool operator!=( PhysicalDeviceShadingRateImageFeaturesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48799,11 +66019,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shadingRateImage = {};
VULKAN_HPP_NAMESPACE::Bool32 shadingRateCoarseSampleOrder = {};
};
- static_assert( sizeof( PhysicalDeviceShadingRateImageFeaturesNV ) ==
- sizeof( VkPhysicalDeviceShadingRateImageFeaturesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShadingRateImageFeaturesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV ) ==
+ sizeof( VkPhysicalDeviceShadingRateImageFeaturesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImageFeaturesNV>::value,
+ "PhysicalDeviceShadingRateImageFeaturesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShadingRateImageFeaturesNV>
@@ -48813,7 +66037,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceShadingRateImagePropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceShadingRateImagePropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceShadingRateImagePropertiesNV;
@@ -48837,8 +66063,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceShadingRateImagePropertiesNV &
- operator=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceShadingRateImagePropertiesNV &
+ operator=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceShadingRateImagePropertiesNV &
operator=( VkPhysicalDeviceShadingRateImagePropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48847,24 +66073,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceShadingRateImagePropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShadingRateImagePropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV *>( this );
}
- operator VkPhysicalDeviceShadingRateImagePropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceShadingRateImagePropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceShadingRateImagePropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shadingRateTexelSize, shadingRatePaletteSize, shadingRateMaxCoarseSamples );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceShadingRateImagePropertiesNV const & ) const = default;
#else
bool operator==( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateTexelSize == rhs.shadingRateTexelSize ) &&
( shadingRatePaletteSize == rhs.shadingRatePaletteSize ) &&
( shadingRateMaxCoarseSamples == rhs.shadingRateMaxCoarseSamples );
+# endif
}
bool operator!=( PhysicalDeviceShadingRateImagePropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -48880,11 +66126,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t shadingRatePaletteSize = {};
uint32_t shadingRateMaxCoarseSamples = {};
};
- static_assert( sizeof( PhysicalDeviceShadingRateImagePropertiesNV ) ==
- sizeof( VkPhysicalDeviceShadingRateImagePropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceShadingRateImagePropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV ) ==
+ sizeof( VkPhysicalDeviceShadingRateImagePropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceShadingRateImagePropertiesNV>::value,
+ "PhysicalDeviceShadingRateImagePropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceShadingRateImagePropertiesNV>
@@ -48894,7 +66144,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSparseImageFormatInfo2
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSparseImageFormatInfo2;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSparseImageFormatInfo2;
@@ -48920,8 +66172,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 &
- operator=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSparseImageFormatInfo2 &
+ operator=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSparseImageFormatInfo2 &
operator=( VkPhysicalDeviceSparseImageFormatInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -48931,61 +66183,87 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSparseImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSparseImageFormatInfo2 & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- PhysicalDeviceSparseImageFormatInfo2 & setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 &
+ setType( VULKAN_HPP_NAMESPACE::ImageType type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- PhysicalDeviceSparseImageFormatInfo2 &
- setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 &
+ setSamples( VULKAN_HPP_NAMESPACE::SampleCountFlagBits samples_ ) VULKAN_HPP_NOEXCEPT
{
samples = samples_;
return *this;
}
- PhysicalDeviceSparseImageFormatInfo2 & setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 &
+ setUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags usage_ ) VULKAN_HPP_NOEXCEPT
{
usage = usage_;
return *this;
}
- PhysicalDeviceSparseImageFormatInfo2 & setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSparseImageFormatInfo2 &
+ setTiling( VULKAN_HPP_NAMESPACE::ImageTiling tiling_ ) VULKAN_HPP_NOEXCEPT
{
tiling = tiling_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSparseImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSparseImageFormatInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSparseImageFormatInfo2 *>( this );
}
- operator VkPhysicalDeviceSparseImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSparseImageFormatInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSparseImageFormatInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::ImageType const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlagBits const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::ImageTiling const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, format, type, samples, usage, tiling );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSparseImageFormatInfo2 const & ) const = default;
#else
bool operator==( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) && ( type == rhs.type ) &&
( samples == rhs.samples ) && ( usage == rhs.usage ) && ( tiling == rhs.tiling );
+# endif
}
bool operator!=( PhysicalDeviceSparseImageFormatInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49003,10 +66281,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageUsageFlags usage = {};
VULKAN_HPP_NAMESPACE::ImageTiling tiling = VULKAN_HPP_NAMESPACE::ImageTiling::eOptimal;
};
- static_assert( sizeof( PhysicalDeviceSparseImageFormatInfo2 ) == sizeof( VkPhysicalDeviceSparseImageFormatInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSparseImageFormatInfo2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2 ) ==
+ sizeof( VkPhysicalDeviceSparseImageFormatInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSparseImageFormatInfo2>::value,
+ "PhysicalDeviceSparseImageFormatInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSparseImageFormatInfo2>
@@ -49017,7 +66299,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSubgroupProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSubgroupProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSubgroupProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -49040,8 +66324,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupProperties &
- operator=( PhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSubgroupProperties &
+ operator=( PhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSubgroupProperties & operator=( VkPhysicalDeviceSubgroupProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -49049,24 +66333,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceSubgroupProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubgroupProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSubgroupProperties *>( this );
}
- operator VkPhysicalDeviceSubgroupProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubgroupProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSubgroupProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, subgroupSize, supportedStages, supportedOperations, quadOperationsInAllStages );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSubgroupProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceSubgroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subgroupSize == rhs.subgroupSize ) &&
( supportedStages == rhs.supportedStages ) && ( supportedOperations == rhs.supportedOperations ) &&
( quadOperationsInAllStages == rhs.quadOperationsInAllStages );
+# endif
}
bool operator!=( PhysicalDeviceSubgroupProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49083,10 +66388,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags supportedOperations = {};
VULKAN_HPP_NAMESPACE::Bool32 quadOperationsInAllStages = {};
};
- static_assert( sizeof( PhysicalDeviceSubgroupProperties ) == sizeof( VkPhysicalDeviceSubgroupProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSubgroupProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties ) ==
+ sizeof( VkPhysicalDeviceSubgroupProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupProperties>::value,
+ "PhysicalDeviceSubgroupProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSubgroupProperties>
@@ -49094,55 +66403,57 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceSubgroupProperties;
};
- struct PhysicalDeviceSubgroupSizeControlFeaturesEXT
+ struct PhysicalDeviceSubgroupSizeControlFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSubgroupSizeControlFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceSubgroupSizeControlFeaturesEXT;
+ StructureType::ePhysicalDeviceSubgroupSizeControlFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeaturesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeatures(
VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ = {},
VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ = {} ) VULKAN_HPP_NOEXCEPT
: subgroupSizeControl( subgroupSizeControl_ )
, computeFullSubgroups( computeFullSubgroups_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeaturesEXT(
- PhysicalDeviceSubgroupSizeControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlFeatures(
+ PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceSubgroupSizeControlFeaturesEXT( VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const & rhs )
+ PhysicalDeviceSubgroupSizeControlFeatures( VkPhysicalDeviceSubgroupSizeControlFeatures const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceSubgroupSizeControlFeaturesEXT(
- *reinterpret_cast<PhysicalDeviceSubgroupSizeControlFeaturesEXT const *>( &rhs ) )
+ : PhysicalDeviceSubgroupSizeControlFeatures(
+ *reinterpret_cast<PhysicalDeviceSubgroupSizeControlFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeaturesEXT &
- operator=( PhysicalDeviceSubgroupSizeControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSubgroupSizeControlFeatures &
+ operator=( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceSubgroupSizeControlFeaturesEXT &
- operator=( VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceSubgroupSizeControlFeatures &
+ operator=( VkPhysicalDeviceSubgroupSizeControlFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeaturesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSubgroupSizeControlFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSubgroupSizeControlFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures &
setSubgroupSizeControl( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ ) VULKAN_HPP_NOEXCEPT
{
subgroupSizeControl = subgroupSizeControl_;
return *this;
}
- PhysicalDeviceSubgroupSizeControlFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlFeatures &
setComputeFullSubgroups( VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ ) VULKAN_HPP_NOEXCEPT
{
computeFullSubgroups = computeFullSubgroups_;
@@ -49150,57 +66461,83 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSubgroupSizeControlFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubgroupSizeControlFeatures const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeatures *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceSubgroupSizeControlFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlFeatures *>( this );
}
- operator VkPhysicalDeviceSubgroupSizeControlFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT *>( this );
+ return std::tie( sType, pNext, subgroupSizeControl, computeFullSubgroups );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceSubgroupSizeControlFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceSubgroupSizeControlFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceSubgroupSizeControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subgroupSizeControl == rhs.subgroupSizeControl ) &&
( computeFullSubgroups == rhs.computeFullSubgroups );
+# endif
}
- bool operator!=( PhysicalDeviceSubgroupSizeControlFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceSubgroupSizeControlFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlFeaturesEXT;
- void * pNext = {};
- VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlFeatures;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {};
VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups = {};
};
- static_assert( sizeof( PhysicalDeviceSubgroupSizeControlFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceSubgroupSizeControlFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSubgroupSizeControlFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures ) ==
+ sizeof( VkPhysicalDeviceSubgroupSizeControlFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlFeatures>::value,
+ "PhysicalDeviceSubgroupSizeControlFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceSubgroupSizeControlFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceSubgroupSizeControlFeatures>
{
- using Type = PhysicalDeviceSubgroupSizeControlFeaturesEXT;
+ using Type = PhysicalDeviceSubgroupSizeControlFeatures;
};
+ using PhysicalDeviceSubgroupSizeControlFeaturesEXT = PhysicalDeviceSubgroupSizeControlFeatures;
- struct PhysicalDeviceSubgroupSizeControlPropertiesEXT
+ struct PhysicalDeviceSubgroupSizeControlProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSubgroupSizeControlProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceSubgroupSizeControlPropertiesEXT;
+ StructureType::ePhysicalDeviceSubgroupSizeControlProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlPropertiesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlProperties(
uint32_t minSubgroupSize_ = {},
uint32_t maxSubgroupSize_ = {},
uint32_t maxComputeWorkgroupSubgroups_ = {},
@@ -49211,76 +66548,105 @@ namespace VULKAN_HPP_NAMESPACE
, requiredSubgroupSizeStages( requiredSubgroupSizeStages_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlPropertiesEXT(
- PhysicalDeviceSubgroupSizeControlPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceSubgroupSizeControlProperties(
+ PhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceSubgroupSizeControlPropertiesEXT( VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const & rhs )
+ PhysicalDeviceSubgroupSizeControlProperties( VkPhysicalDeviceSubgroupSizeControlProperties const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceSubgroupSizeControlPropertiesEXT(
- *reinterpret_cast<PhysicalDeviceSubgroupSizeControlPropertiesEXT const *>( &rhs ) )
+ : PhysicalDeviceSubgroupSizeControlProperties(
+ *reinterpret_cast<PhysicalDeviceSubgroupSizeControlProperties const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubgroupSizeControlPropertiesEXT &
- operator=( PhysicalDeviceSubgroupSizeControlPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSubgroupSizeControlProperties &
+ operator=( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceSubgroupSizeControlPropertiesEXT &
- operator=( VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceSubgroupSizeControlProperties &
+ operator=( VkPhysicalDeviceSubgroupSizeControlProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlPropertiesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties const *>( &rhs );
return *this;
}
- operator VkPhysicalDeviceSubgroupSizeControlPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubgroupSizeControlProperties const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlProperties *>( this );
}
- operator VkPhysicalDeviceSubgroupSizeControlPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubgroupSizeControlProperties &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, minSubgroupSize, maxSubgroupSize, maxComputeWorkgroupSubgroups, requiredSubgroupSizeStages );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceSubgroupSizeControlPropertiesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceSubgroupSizeControlProperties const & ) const = default;
#else
- bool operator==( PhysicalDeviceSubgroupSizeControlPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSubgroupSize == rhs.minSubgroupSize ) &&
( maxSubgroupSize == rhs.maxSubgroupSize ) &&
( maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups ) &&
( requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages );
+# endif
}
- bool operator!=( PhysicalDeviceSubgroupSizeControlPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceSubgroupSizeControlProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlPropertiesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSubgroupSizeControlProperties;
void * pNext = {};
uint32_t minSubgroupSize = {};
uint32_t maxSubgroupSize = {};
uint32_t maxComputeWorkgroupSubgroups = {};
VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages = {};
};
- static_assert( sizeof( PhysicalDeviceSubgroupSizeControlPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceSubgroupSizeControlPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSubgroupSizeControlPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties ) ==
+ sizeof( VkPhysicalDeviceSubgroupSizeControlProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubgroupSizeControlProperties>::value,
+ "PhysicalDeviceSubgroupSizeControlProperties is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceSubgroupSizeControlPropertiesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceSubgroupSizeControlProperties>
{
- using Type = PhysicalDeviceSubgroupSizeControlPropertiesEXT;
+ using Type = PhysicalDeviceSubgroupSizeControlProperties;
};
+ using PhysicalDeviceSubgroupSizeControlPropertiesEXT = PhysicalDeviceSubgroupSizeControlProperties;
struct PhysicalDeviceSubpassShadingFeaturesHUAWEI
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSubpassShadingFeaturesHUAWEI;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI;
@@ -49299,8 +66665,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI &
- operator=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSubpassShadingFeaturesHUAWEI &
+ operator=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSubpassShadingFeaturesHUAWEI &
operator=( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -49310,36 +66676,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSubpassShadingFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSubpassShadingFeaturesHUAWEI &
- setSubpassShading( VULKAN_HPP_NAMESPACE::Bool32 subpassShading_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingFeaturesHUAWEI &
+ setSubpassShading( VULKAN_HPP_NAMESPACE::Bool32 subpassShading_ ) VULKAN_HPP_NOEXCEPT
{
subpassShading = subpassShading_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *>( this );
}
- operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubpassShadingFeaturesHUAWEI &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSubpassShadingFeaturesHUAWEI *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, subpassShading );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & ) const = default;
#else
bool operator==( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassShading == rhs.subpassShading );
+# endif
}
bool operator!=( PhysicalDeviceSubpassShadingFeaturesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49353,11 +66735,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 subpassShading = {};
};
- static_assert( sizeof( PhysicalDeviceSubpassShadingFeaturesHUAWEI ) ==
- sizeof( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSubpassShadingFeaturesHUAWEI>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI ) ==
+ sizeof( VkPhysicalDeviceSubpassShadingFeaturesHUAWEI ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingFeaturesHUAWEI>::value,
+ "PhysicalDeviceSubpassShadingFeaturesHUAWEI is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSubpassShadingFeaturesHUAWEI>
@@ -49367,7 +66753,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSubpassShadingPropertiesHUAWEI
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSubpassShadingPropertiesHUAWEI;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI;
@@ -49387,8 +66775,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSubpassShadingPropertiesHUAWEI &
- operator=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSubpassShadingPropertiesHUAWEI &
+ operator=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSubpassShadingPropertiesHUAWEI &
operator=( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -49397,23 +66785,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSubpassShadingPropertiesHUAWEI *>( this );
}
- operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSubpassShadingPropertiesHUAWEI &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSubpassShadingPropertiesHUAWEI *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxSubpassShadingWorkgroupSizeAspectRatio );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & ) const = default;
#else
bool operator==( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxSubpassShadingWorkgroupSizeAspectRatio == rhs.maxSubpassShadingWorkgroupSizeAspectRatio );
+# endif
}
bool operator!=( PhysicalDeviceSubpassShadingPropertiesHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49427,11 +66831,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxSubpassShadingWorkgroupSizeAspectRatio = {};
};
- static_assert( sizeof( PhysicalDeviceSubpassShadingPropertiesHUAWEI ) ==
- sizeof( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSubpassShadingPropertiesHUAWEI>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI ) ==
+ sizeof( VkPhysicalDeviceSubpassShadingPropertiesHUAWEI ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSubpassShadingPropertiesHUAWEI>::value,
+ "PhysicalDeviceSubpassShadingPropertiesHUAWEI is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSubpassShadingPropertiesHUAWEI>
@@ -49441,8 +66849,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceSurfaceInfo2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSurfaceInfo2KHR;
+ using NativeType = VkPhysicalDeviceSurfaceInfo2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceSurfaceInfo2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -49458,8 +66868,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR &
- operator=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSurfaceInfo2KHR &
+ operator=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceSurfaceInfo2KHR & operator=( VkPhysicalDeviceSurfaceInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -49468,35 +66878,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSurfaceInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSurfaceInfo2KHR & setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSurfaceInfo2KHR &
+ setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT
{
surface = surface_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSurfaceInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSurfaceInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceSurfaceInfo2KHR *>( this );
}
- operator VkPhysicalDeviceSurfaceInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSurfaceInfo2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceSurfaceInfo2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::SurfaceKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, surface );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceSurfaceInfo2KHR const & ) const = default;
#else
bool operator==( PhysicalDeviceSurfaceInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surface == rhs.surface );
+# endif
}
bool operator!=( PhysicalDeviceSurfaceInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49510,10 +66938,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::SurfaceKHR surface = {};
};
- static_assert( sizeof( PhysicalDeviceSurfaceInfo2KHR ) == sizeof( VkPhysicalDeviceSurfaceInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSurfaceInfo2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR ) ==
+ sizeof( VkPhysicalDeviceSurfaceInfo2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSurfaceInfo2KHR>::value,
+ "PhysicalDeviceSurfaceInfo2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceSurfaceInfo2KHR>
@@ -49521,96 +66953,121 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceSurfaceInfo2KHR;
};
- struct PhysicalDeviceSynchronization2FeaturesKHR
+ struct PhysicalDeviceSynchronization2Features
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceSynchronization2Features;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceSynchronization2FeaturesKHR;
+ StructureType::ePhysicalDeviceSynchronization2Features;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2FeaturesKHR(
- VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {} ) VULKAN_HPP_NOEXCEPT : synchronization2( synchronization2_ )
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceSynchronization2Features( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {} ) VULKAN_HPP_NOEXCEPT
+ : synchronization2( synchronization2_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2FeaturesKHR(
- PhysicalDeviceSynchronization2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceSynchronization2Features( PhysicalDeviceSynchronization2Features const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceSynchronization2FeaturesKHR( VkPhysicalDeviceSynchronization2FeaturesKHR const & rhs )
- VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceSynchronization2FeaturesKHR(
- *reinterpret_cast<PhysicalDeviceSynchronization2FeaturesKHR const *>( &rhs ) )
+ PhysicalDeviceSynchronization2Features( VkPhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceSynchronization2Features(
+ *reinterpret_cast<PhysicalDeviceSynchronization2Features const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2FeaturesKHR &
- operator=( PhysicalDeviceSynchronization2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceSynchronization2Features &
+ operator=( PhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceSynchronization2FeaturesKHR &
- operator=( VkPhysicalDeviceSynchronization2FeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceSynchronization2Features &
+ operator=( VkPhysicalDeviceSynchronization2Features const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2FeaturesKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceSynchronization2FeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceSynchronization2FeaturesKHR &
- setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceSynchronization2Features &
+ setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT
{
synchronization2 = synchronization2_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceSynchronization2FeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSynchronization2Features const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceSynchronization2FeaturesKHR *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceSynchronization2Features *>( this );
}
- operator VkPhysicalDeviceSynchronization2FeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceSynchronization2Features &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceSynchronization2FeaturesKHR *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceSynchronization2Features *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, synchronization2 );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceSynchronization2FeaturesKHR const & ) const = default;
+ auto operator<=>( PhysicalDeviceSynchronization2Features const & ) const = default;
#else
- bool operator==( PhysicalDeviceSynchronization2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceSynchronization2Features const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( synchronization2 == rhs.synchronization2 );
+# endif
}
- bool operator!=( PhysicalDeviceSynchronization2FeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceSynchronization2Features const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSynchronization2FeaturesKHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceSynchronization2Features;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 synchronization2 = {};
};
- static_assert( sizeof( PhysicalDeviceSynchronization2FeaturesKHR ) ==
- sizeof( VkPhysicalDeviceSynchronization2FeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceSynchronization2FeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features ) ==
+ sizeof( VkPhysicalDeviceSynchronization2Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceSynchronization2Features>::value,
+ "PhysicalDeviceSynchronization2Features is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceSynchronization2FeaturesKHR>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceSynchronization2Features>
{
- using Type = PhysicalDeviceSynchronization2FeaturesKHR;
+ using Type = PhysicalDeviceSynchronization2Features;
};
+ using PhysicalDeviceSynchronization2FeaturesKHR = PhysicalDeviceSynchronization2Features;
struct PhysicalDeviceTexelBufferAlignmentFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT;
@@ -49630,8 +67087,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT &
- operator=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTexelBufferAlignmentFeaturesEXT &
+ operator=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceTexelBufferAlignmentFeaturesEXT &
operator=( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -49641,13 +67098,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceTexelBufferAlignmentFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceTexelBufferAlignmentFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentFeaturesEXT &
setTexelBufferAlignment( VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment_ ) VULKAN_HPP_NOEXCEPT
{
texelBufferAlignment = texelBufferAlignment_;
@@ -49655,22 +67113,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, texelBufferAlignment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( texelBufferAlignment == rhs.texelBufferAlignment );
+# endif
}
bool operator!=( PhysicalDeviceTexelBufferAlignmentFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49684,11 +67158,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 texelBufferAlignment = {};
};
- static_assert( sizeof( PhysicalDeviceTexelBufferAlignmentFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTexelBufferAlignmentFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentFeaturesEXT>::value,
+ "PhysicalDeviceTexelBufferAlignmentFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceTexelBufferAlignmentFeaturesEXT>
@@ -49696,14 +67174,16 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceTexelBufferAlignmentFeaturesEXT;
};
- struct PhysicalDeviceTexelBufferAlignmentPropertiesEXT
+ struct PhysicalDeviceTexelBufferAlignmentProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTexelBufferAlignmentProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+ StructureType::ePhysicalDeviceTexelBufferAlignmentProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentPropertiesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentProperties(
VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes_ = {},
VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment_ = {},
VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes_ = {},
@@ -49714,115 +67194,148 @@ namespace VULKAN_HPP_NAMESPACE
, uniformTexelBufferOffsetSingleTexelAlignment( uniformTexelBufferOffsetSingleTexelAlignment_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentPropertiesEXT(
- PhysicalDeviceTexelBufferAlignmentPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceTexelBufferAlignmentProperties(
+ PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceTexelBufferAlignmentPropertiesEXT( VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const & rhs )
+ PhysicalDeviceTexelBufferAlignmentProperties( VkPhysicalDeviceTexelBufferAlignmentProperties const & rhs )
VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceTexelBufferAlignmentPropertiesEXT(
- *reinterpret_cast<PhysicalDeviceTexelBufferAlignmentPropertiesEXT const *>( &rhs ) )
+ : PhysicalDeviceTexelBufferAlignmentProperties(
+ *reinterpret_cast<PhysicalDeviceTexelBufferAlignmentProperties const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTexelBufferAlignmentPropertiesEXT &
- operator=( PhysicalDeviceTexelBufferAlignmentPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTexelBufferAlignmentProperties &
+ operator=( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceTexelBufferAlignmentPropertiesEXT &
- operator=( VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceTexelBufferAlignmentProperties &
+ operator=( VkPhysicalDeviceTexelBufferAlignmentProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentPropertiesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties const *>( &rhs );
return *this;
}
- operator VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTexelBufferAlignmentProperties const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentProperties *>( this );
}
- operator VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTexelBufferAlignmentProperties &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ storageTexelBufferOffsetAlignmentBytes,
+ storageTexelBufferOffsetSingleTexelAlignment,
+ uniformTexelBufferOffsetAlignmentBytes,
+ uniformTexelBufferOffsetSingleTexelAlignment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceTexelBufferAlignmentPropertiesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceTexelBufferAlignmentProperties const & ) const = default;
#else
- bool operator==( PhysicalDeviceTexelBufferAlignmentPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes ) &&
( storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment ) &&
( uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes ) &&
( uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment );
+# endif
}
- bool operator!=( PhysicalDeviceTexelBufferAlignmentPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceTexelBufferAlignmentProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTexelBufferAlignmentProperties;
void * pNext = {};
VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes = {};
VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment = {};
VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes = {};
VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment = {};
};
- static_assert( sizeof( PhysicalDeviceTexelBufferAlignmentPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTexelBufferAlignmentPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties ) ==
+ sizeof( VkPhysicalDeviceTexelBufferAlignmentProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTexelBufferAlignmentProperties>::value,
+ "PhysicalDeviceTexelBufferAlignmentProperties is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceTexelBufferAlignmentPropertiesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceTexelBufferAlignmentProperties>
{
- using Type = PhysicalDeviceTexelBufferAlignmentPropertiesEXT;
+ using Type = PhysicalDeviceTexelBufferAlignmentProperties;
};
+ using PhysicalDeviceTexelBufferAlignmentPropertiesEXT = PhysicalDeviceTexelBufferAlignmentProperties;
- struct PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT
+ struct PhysicalDeviceTextureCompressionASTCHDRFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTextureCompressionASTCHDRFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT;
+ StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceTextureCompressionASTCHDRFeatures(
VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ = {} ) VULKAN_HPP_NOEXCEPT
: textureCompressionASTC_HDR( textureCompressionASTC_HDR_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
- PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceTextureCompressionASTCHDRFeatures(
+ PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
- VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
- *reinterpret_cast<PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const *>( &rhs ) )
+ PhysicalDeviceTextureCompressionASTCHDRFeatures( VkPhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceTextureCompressionASTCHDRFeatures(
+ *reinterpret_cast<PhysicalDeviceTextureCompressionASTCHDRFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT &
- operator=( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTextureCompressionASTCHDRFeatures &
+ operator=( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT &
- operator=( VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceTextureCompressionASTCHDRFeatures &
+ operator=( VkPhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this =
- *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTextureCompressionASTCHDRFeatures &
setTextureCompressionASTC_HDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ ) VULKAN_HPP_NOEXCEPT
{
textureCompressionASTC_HDR = textureCompressionASTC_HDR_;
@@ -49830,51 +67343,74 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeatures *>( this );
}
- operator VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTextureCompressionASTCHDRFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, textureCompressionASTC_HDR );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceTextureCompressionASTCHDRFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR );
+# endif
}
- bool operator!=( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceTextureCompressionASTCHDRFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR = {};
};
- static_assert( sizeof( PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures ) ==
+ sizeof( VkPhysicalDeviceTextureCompressionASTCHDRFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTextureCompressionASTCHDRFeatures>::value,
+ "PhysicalDeviceTextureCompressionASTCHDRFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeaturesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceTextureCompressionAstcHdrFeatures>
{
- using Type = PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT;
+ using Type = PhysicalDeviceTextureCompressionASTCHDRFeatures;
};
+ using PhysicalDeviceTextureCompressionASTCHDRFeaturesEXT = PhysicalDeviceTextureCompressionASTCHDRFeatures;
struct PhysicalDeviceTimelineSemaphoreFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTimelineSemaphoreFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceTimelineSemaphoreFeatures;
@@ -49892,8 +67428,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures &
- operator=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTimelineSemaphoreFeatures &
+ operator=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceTimelineSemaphoreFeatures &
operator=( VkPhysicalDeviceTimelineSemaphoreFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -49903,36 +67439,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceTimelineSemaphoreFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceTimelineSemaphoreFeatures &
- setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreFeatures &
+ setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT
{
timelineSemaphore = timelineSemaphore_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceTimelineSemaphoreFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTimelineSemaphoreFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures *>( this );
}
- operator VkPhysicalDeviceTimelineSemaphoreFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTimelineSemaphoreFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, timelineSemaphore );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceTimelineSemaphoreFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( timelineSemaphore == rhs.timelineSemaphore );
+# endif
}
bool operator!=( PhysicalDeviceTimelineSemaphoreFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -49946,11 +67498,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore = {};
};
- static_assert( sizeof( PhysicalDeviceTimelineSemaphoreFeatures ) ==
- sizeof( VkPhysicalDeviceTimelineSemaphoreFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTimelineSemaphoreFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures ) ==
+ sizeof( VkPhysicalDeviceTimelineSemaphoreFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreFeatures>::value,
+ "PhysicalDeviceTimelineSemaphoreFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceTimelineSemaphoreFeatures>
@@ -49961,7 +67517,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceTimelineSemaphoreProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTimelineSemaphoreProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceTimelineSemaphoreProperties;
@@ -49980,8 +67538,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTimelineSemaphoreProperties &
- operator=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTimelineSemaphoreProperties &
+ operator=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceTimelineSemaphoreProperties &
operator=( VkPhysicalDeviceTimelineSemaphoreProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -49990,23 +67548,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceTimelineSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTimelineSemaphoreProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties *>( this );
}
- operator VkPhysicalDeviceTimelineSemaphoreProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTimelineSemaphoreProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxTimelineSemaphoreValueDifference );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceTimelineSemaphoreProperties const & ) const = default;
#else
bool operator==( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference );
+# endif
}
bool operator!=( PhysicalDeviceTimelineSemaphoreProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50020,11 +67594,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint64_t maxTimelineSemaphoreValueDifference = {};
};
- static_assert( sizeof( PhysicalDeviceTimelineSemaphoreProperties ) ==
- sizeof( VkPhysicalDeviceTimelineSemaphoreProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTimelineSemaphoreProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties ) ==
+ sizeof( VkPhysicalDeviceTimelineSemaphoreProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTimelineSemaphoreProperties>::value,
+ "PhysicalDeviceTimelineSemaphoreProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceTimelineSemaphoreProperties>
@@ -50033,16 +67611,18 @@ namespace VULKAN_HPP_NAMESPACE
};
using PhysicalDeviceTimelineSemaphorePropertiesKHR = PhysicalDeviceTimelineSemaphoreProperties;
- struct PhysicalDeviceToolPropertiesEXT
+ struct PhysicalDeviceToolProperties
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceToolPropertiesEXT;
+ using NativeType = VkPhysicalDeviceToolProperties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceToolProperties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolPropertiesEXT(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolProperties(
std::array<char, VK_MAX_EXTENSION_NAME_SIZE> const & name_ = {},
std::array<char, VK_MAX_EXTENSION_NAME_SIZE> const & version_ = {},
- VULKAN_HPP_NAMESPACE::ToolPurposeFlagsEXT purposes_ = {},
+ VULKAN_HPP_NAMESPACE::ToolPurposeFlags purposes_ = {},
std::array<char, VK_MAX_DESCRIPTION_SIZE> const & description_ = {},
std::array<char, VK_MAX_EXTENSION_NAME_SIZE> const & layer_ = {} ) VULKAN_HPP_NOEXCEPT
: name( name_ )
@@ -50053,70 +67633,98 @@ namespace VULKAN_HPP_NAMESPACE
{}
VULKAN_HPP_CONSTEXPR_14
- PhysicalDeviceToolPropertiesEXT( PhysicalDeviceToolPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceToolProperties( PhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceToolPropertiesEXT( VkPhysicalDeviceToolPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceToolPropertiesEXT( *reinterpret_cast<PhysicalDeviceToolPropertiesEXT const *>( &rhs ) )
+ PhysicalDeviceToolProperties( VkPhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceToolProperties( *reinterpret_cast<PhysicalDeviceToolProperties const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceToolPropertiesEXT &
- operator=( PhysicalDeviceToolPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceToolProperties & operator=( PhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceToolPropertiesEXT & operator=( VkPhysicalDeviceToolPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceToolProperties & operator=( VkPhysicalDeviceToolProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolPropertiesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties const *>( &rhs );
return *this;
}
- operator VkPhysicalDeviceToolPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceToolProperties const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceToolPropertiesEXT *>( this );
+ return *reinterpret_cast<const VkPhysicalDeviceToolProperties *>( this );
}
- operator VkPhysicalDeviceToolPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceToolProperties &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceToolPropertiesEXT *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceToolProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ToolPurposeFlags const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, name, version, purposes, description, layer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceToolPropertiesEXT const & ) const = default;
+ auto operator<=>( PhysicalDeviceToolProperties const & ) const = default;
#else
- bool operator==( PhysicalDeviceToolPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( name == rhs.name ) && ( version == rhs.version ) &&
( purposes == rhs.purposes ) && ( description == rhs.description ) && ( layer == rhs.layer );
+# endif
}
- bool operator!=( PhysicalDeviceToolPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceToolProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceToolPropertiesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceToolProperties;
void * pNext = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> name = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> version = {};
- VULKAN_HPP_NAMESPACE::ToolPurposeFlagsEXT purposes = {};
+ VULKAN_HPP_NAMESPACE::ToolPurposeFlags purposes = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> description = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_EXTENSION_NAME_SIZE> layer = {};
};
- static_assert( sizeof( PhysicalDeviceToolPropertiesEXT ) == sizeof( VkPhysicalDeviceToolPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceToolPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties ) ==
+ sizeof( VkPhysicalDeviceToolProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceToolProperties>::value,
+ "PhysicalDeviceToolProperties is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceToolPropertiesEXT>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceToolProperties>
{
- using Type = PhysicalDeviceToolPropertiesEXT;
+ using Type = PhysicalDeviceToolProperties;
};
+ using PhysicalDeviceToolPropertiesEXT = PhysicalDeviceToolProperties;
struct PhysicalDeviceTransformFeedbackFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTransformFeedbackFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT;
@@ -50138,8 +67746,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT &
- operator=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTransformFeedbackFeaturesEXT &
+ operator=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceTransformFeedbackFeaturesEXT &
operator=( VkPhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50149,44 +67757,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceTransformFeedbackFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceTransformFeedbackFeaturesEXT &
- setTransformFeedback( VULKAN_HPP_NAMESPACE::Bool32 transformFeedback_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT &
+ setTransformFeedback( VULKAN_HPP_NAMESPACE::Bool32 transformFeedback_ ) VULKAN_HPP_NOEXCEPT
{
transformFeedback = transformFeedback_;
return *this;
}
- PhysicalDeviceTransformFeedbackFeaturesEXT &
- setGeometryStreams( VULKAN_HPP_NAMESPACE::Bool32 geometryStreams_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackFeaturesEXT &
+ setGeometryStreams( VULKAN_HPP_NAMESPACE::Bool32 geometryStreams_ ) VULKAN_HPP_NOEXCEPT
{
geometryStreams = geometryStreams_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceTransformFeedbackFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTransformFeedbackFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceTransformFeedbackFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTransformFeedbackFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, transformFeedback, geometryStreams );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceTransformFeedbackFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transformFeedback == rhs.transformFeedback ) &&
( geometryStreams == rhs.geometryStreams );
+# endif
}
bool operator!=( PhysicalDeviceTransformFeedbackFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50201,11 +67828,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 transformFeedback = {};
VULKAN_HPP_NAMESPACE::Bool32 geometryStreams = {};
};
- static_assert( sizeof( PhysicalDeviceTransformFeedbackFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceTransformFeedbackFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTransformFeedbackFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceTransformFeedbackFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackFeaturesEXT>::value,
+ "PhysicalDeviceTransformFeedbackFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceTransformFeedbackFeaturesEXT>
@@ -50215,7 +67846,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceTransformFeedbackPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceTransformFeedbackPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT;
@@ -50253,8 +67886,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceTransformFeedbackPropertiesEXT &
- operator=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceTransformFeedbackPropertiesEXT &
+ operator=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceTransformFeedbackPropertiesEXT &
operator=( VkPhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50263,21 +67896,58 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceTransformFeedbackPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTransformFeedbackPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceTransformFeedbackPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceTransformFeedbackPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceTransformFeedbackPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ maxTransformFeedbackStreams,
+ maxTransformFeedbackBuffers,
+ maxTransformFeedbackBufferSize,
+ maxTransformFeedbackStreamDataSize,
+ maxTransformFeedbackBufferDataSize,
+ maxTransformFeedbackBufferDataStride,
+ transformFeedbackQueries,
+ transformFeedbackStreamsLinesTriangles,
+ transformFeedbackRasterizationStreamSelect,
+ transformFeedbackDraw );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceTransformFeedbackPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxTransformFeedbackStreams == rhs.maxTransformFeedbackStreams ) &&
( maxTransformFeedbackBuffers == rhs.maxTransformFeedbackBuffers ) &&
@@ -50289,6 +67959,7 @@ namespace VULKAN_HPP_NAMESPACE
( transformFeedbackStreamsLinesTriangles == rhs.transformFeedbackStreamsLinesTriangles ) &&
( transformFeedbackRasterizationStreamSelect == rhs.transformFeedbackRasterizationStreamSelect ) &&
( transformFeedbackDraw == rhs.transformFeedbackDraw );
+# endif
}
bool operator!=( PhysicalDeviceTransformFeedbackPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50311,11 +67982,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackRasterizationStreamSelect = {};
VULKAN_HPP_NAMESPACE::Bool32 transformFeedbackDraw = {};
};
- static_assert( sizeof( PhysicalDeviceTransformFeedbackPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceTransformFeedbackPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceTransformFeedbackPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceTransformFeedbackPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceTransformFeedbackPropertiesEXT>::value,
+ "PhysicalDeviceTransformFeedbackPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceTransformFeedbackPropertiesEXT>
@@ -50325,7 +68000,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceUniformBufferStandardLayoutFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceUniformBufferStandardLayoutFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures;
@@ -50345,8 +68022,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures &
- operator=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceUniformBufferStandardLayoutFeatures &
+ operator=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceUniformBufferStandardLayoutFeatures &
operator=( VkPhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50357,13 +68034,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceUniformBufferStandardLayoutFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceUniformBufferStandardLayoutFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceUniformBufferStandardLayoutFeatures &
setUniformBufferStandardLayout( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ ) VULKAN_HPP_NOEXCEPT
{
uniformBufferStandardLayout = uniformBufferStandardLayout_;
@@ -50371,23 +68049,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures *>( this );
}
- operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceUniformBufferStandardLayoutFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, uniformBufferStandardLayout );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceUniformBufferStandardLayoutFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( uniformBufferStandardLayout == rhs.uniformBufferStandardLayout );
+# endif
}
bool operator!=( PhysicalDeviceUniformBufferStandardLayoutFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50401,11 +68095,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout = {};
};
- static_assert( sizeof( PhysicalDeviceUniformBufferStandardLayoutFeatures ) ==
- sizeof( VkPhysicalDeviceUniformBufferStandardLayoutFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceUniformBufferStandardLayoutFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures ) ==
+ sizeof( VkPhysicalDeviceUniformBufferStandardLayoutFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceUniformBufferStandardLayoutFeatures>::value,
+ "PhysicalDeviceUniformBufferStandardLayoutFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceUniformBufferStandardLayoutFeatures>
@@ -50416,7 +68114,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVariablePointersFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVariablePointersFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceVariablePointersFeatures;
@@ -50437,8 +68137,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures &
- operator=( PhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVariablePointersFeatures &
+ operator=( PhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVariablePointersFeatures &
operator=( VkPhysicalDeviceVariablePointersFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50448,45 +68148,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceVariablePointersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceVariablePointersFeatures & setVariablePointersStorageBuffer(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures & setVariablePointersStorageBuffer(
VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ ) VULKAN_HPP_NOEXCEPT
{
variablePointersStorageBuffer = variablePointersStorageBuffer_;
return *this;
}
- PhysicalDeviceVariablePointersFeatures &
- setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVariablePointersFeatures &
+ setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT
{
variablePointers = variablePointers_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceVariablePointersFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVariablePointersFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures *>( this );
}
- operator VkPhysicalDeviceVariablePointersFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVariablePointersFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVariablePointersFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, variablePointersStorageBuffer, variablePointers );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVariablePointersFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceVariablePointersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( variablePointersStorageBuffer == rhs.variablePointersStorageBuffer ) &&
( variablePointers == rhs.variablePointers );
+# endif
}
bool operator!=( PhysicalDeviceVariablePointersFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50501,10 +68220,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer = {};
VULKAN_HPP_NAMESPACE::Bool32 variablePointers = {};
};
- static_assert( sizeof( PhysicalDeviceVariablePointersFeatures ) == sizeof( VkPhysicalDeviceVariablePointersFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVariablePointersFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures ) ==
+ sizeof( VkPhysicalDeviceVariablePointersFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVariablePointersFeatures>::value,
+ "PhysicalDeviceVariablePointersFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVariablePointersFeatures>
@@ -50517,7 +68241,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVertexAttributeDivisorFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceVertexAttributeDivisorFeaturesEXT;
@@ -50539,8 +68265,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT &
- operator=( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVertexAttributeDivisorFeaturesEXT &
+ operator=( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVertexAttributeDivisorFeaturesEXT &
operator=( VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50550,20 +68276,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceVertexAttributeDivisorFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceVertexAttributeDivisorFeaturesEXT & setVertexAttributeInstanceRateDivisor(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT & setVertexAttributeInstanceRateDivisor(
VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor_ ) VULKAN_HPP_NOEXCEPT
{
vertexAttributeInstanceRateDivisor = vertexAttributeInstanceRateDivisor_;
return *this;
}
- PhysicalDeviceVertexAttributeDivisorFeaturesEXT & setVertexAttributeInstanceRateZeroDivisor(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorFeaturesEXT & setVertexAttributeInstanceRateZeroDivisor(
VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor_ ) VULKAN_HPP_NOEXCEPT
{
vertexAttributeInstanceRateZeroDivisor = vertexAttributeInstanceRateZeroDivisor_;
@@ -50571,24 +68298,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, vertexAttributeInstanceRateDivisor, vertexAttributeInstanceRateZeroDivisor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( vertexAttributeInstanceRateDivisor == rhs.vertexAttributeInstanceRateDivisor ) &&
( vertexAttributeInstanceRateZeroDivisor == rhs.vertexAttributeInstanceRateZeroDivisor );
+# endif
}
bool operator!=( PhysicalDeviceVertexAttributeDivisorFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50603,11 +68349,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateDivisor = {};
VULKAN_HPP_NAMESPACE::Bool32 vertexAttributeInstanceRateZeroDivisor = {};
};
- static_assert( sizeof( PhysicalDeviceVertexAttributeDivisorFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVertexAttributeDivisorFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorFeaturesEXT>::value,
+ "PhysicalDeviceVertexAttributeDivisorFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVertexAttributeDivisorFeaturesEXT>
@@ -50617,7 +68367,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVertexAttributeDivisorPropertiesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT;
@@ -50637,8 +68389,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexAttributeDivisorPropertiesEXT &
- operator=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVertexAttributeDivisorPropertiesEXT &
+ operator=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVertexAttributeDivisorPropertiesEXT &
operator=( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50648,23 +68400,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *>( this );
}
- operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxVertexAttribDivisor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxVertexAttribDivisor == rhs.maxVertexAttribDivisor );
+# endif
}
bool operator!=( PhysicalDeviceVertexAttributeDivisorPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50678,11 +68446,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t maxVertexAttribDivisor = {};
};
- static_assert( sizeof( PhysicalDeviceVertexAttributeDivisorPropertiesEXT ) ==
- sizeof( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVertexAttributeDivisorPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT ) ==
+ sizeof( VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexAttributeDivisorPropertiesEXT>::value,
+ "PhysicalDeviceVertexAttributeDivisorPropertiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVertexAttributeDivisorPropertiesEXT>
@@ -50692,7 +68464,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVertexInputDynamicStateFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT;
@@ -50712,8 +68486,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT &
- operator=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVertexInputDynamicStateFeaturesEXT &
+ operator=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVertexInputDynamicStateFeaturesEXT &
operator=( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -50723,13 +68497,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceVertexInputDynamicStateFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceVertexInputDynamicStateFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVertexInputDynamicStateFeaturesEXT &
setVertexInputDynamicState( VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState_ ) VULKAN_HPP_NOEXCEPT
{
vertexInputDynamicState = vertexInputDynamicState_;
@@ -50737,23 +68512,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, vertexInputDynamicState );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( vertexInputDynamicState == rhs.vertexInputDynamicState );
+# endif
}
bool operator!=( PhysicalDeviceVertexInputDynamicStateFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50767,11 +68558,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 vertexInputDynamicState = {};
};
- static_assert( sizeof( PhysicalDeviceVertexInputDynamicStateFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVertexInputDynamicStateFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceVertexInputDynamicStateFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVertexInputDynamicStateFeaturesEXT>::value,
+ "PhysicalDeviceVertexInputDynamicStateFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVertexInputDynamicStateFeaturesEXT>
@@ -50782,8 +68577,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoProfileKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfileKHR;
+ using NativeType = VkVideoProfileKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfileKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -50805,7 +68602,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & operator=( VideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoProfileKHR & operator=( VideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoProfileKHR & operator=( VkVideoProfileKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -50814,34 +68611,34 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoProfileKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoProfileKHR & setVideoCodecOperation(
+ VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & setVideoCodecOperation(
VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR videoCodecOperation_ ) VULKAN_HPP_NOEXCEPT
{
videoCodecOperation = videoCodecOperation_;
return *this;
}
- VideoProfileKHR & setChromaSubsampling( VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling_ )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR & setChromaSubsampling(
+ VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR chromaSubsampling_ ) VULKAN_HPP_NOEXCEPT
{
chromaSubsampling = chromaSubsampling_;
return *this;
}
- VideoProfileKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR &
setLumaBitDepth( VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth_ ) VULKAN_HPP_NOEXCEPT
{
lumaBitDepth = lumaBitDepth_;
return *this;
}
- VideoProfileKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoProfileKHR &
setChromaBitDepth( VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth_ ) VULKAN_HPP_NOEXCEPT
{
chromaBitDepth = chromaBitDepth_;
@@ -50849,24 +68646,45 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoProfileKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoProfileKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoProfileKHR *>( this );
}
- operator VkVideoProfileKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoProfileKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoProfileKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoChromaSubsamplingFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, videoCodecOperation, chromaSubsampling, lumaBitDepth, chromaBitDepth );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoProfileKHR const & ) const = default;
# else
bool operator==( VideoProfileKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoCodecOperation == rhs.videoCodecOperation ) &&
( chromaSubsampling == rhs.chromaSubsampling ) && ( lumaBitDepth == rhs.lumaBitDepth ) &&
( chromaBitDepth == rhs.chromaBitDepth );
+# endif
}
bool operator!=( VideoProfileKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50884,8 +68702,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR lumaBitDepth = {};
VULKAN_HPP_NAMESPACE::VideoComponentBitDepthFlagsKHR chromaBitDepth = {};
};
- static_assert( sizeof( VideoProfileKHR ) == sizeof( VkVideoProfileKHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoProfileKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoProfileKHR ) == sizeof( VkVideoProfileKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoProfileKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoProfileKHR>::value,
+ "VideoProfileKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoProfileKHR>
@@ -50897,8 +68719,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoProfilesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfilesKHR;
+ using NativeType = VkVideoProfilesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoProfilesKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -50915,7 +68739,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR & operator=( VideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoProfilesKHR & operator=( VideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoProfilesKHR & operator=( VkVideoProfilesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -50924,42 +68748,62 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoProfilesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoProfilesKHR & setProfileCount( uint32_t profileCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR & setProfileCount( uint32_t profileCount_ ) VULKAN_HPP_NOEXCEPT
{
profileCount = profileCount_;
return *this;
}
- VideoProfilesKHR & setPProfiles( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pProfiles_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoProfilesKHR &
+ setPProfiles( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pProfiles_ ) VULKAN_HPP_NOEXCEPT
{
pProfiles = pProfiles_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoProfilesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoProfilesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoProfilesKHR *>( this );
}
- operator VkVideoProfilesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoProfilesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoProfilesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoProfileKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, profileCount, pProfiles );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoProfilesKHR const & ) const = default;
# else
bool operator==( VideoProfilesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( profileCount == rhs.profileCount ) &&
( pProfiles == rhs.pProfiles );
+# endif
}
bool operator!=( VideoProfilesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -50974,9 +68818,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t profileCount = {};
const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pProfiles = {};
};
- static_assert( sizeof( VideoProfilesKHR ) == sizeof( VkVideoProfilesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoProfilesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoProfilesKHR ) == sizeof( VkVideoProfilesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoProfilesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoProfilesKHR>::value,
+ "VideoProfilesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoProfilesKHR>
@@ -50988,7 +68835,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct PhysicalDeviceVideoFormatInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVideoFormatInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVideoFormatInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -51007,8 +68856,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVideoFormatInfoKHR &
- operator=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVideoFormatInfoKHR &
+ operator=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVideoFormatInfoKHR & operator=( VkPhysicalDeviceVideoFormatInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -51016,23 +68865,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceVideoFormatInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVideoFormatInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVideoFormatInfoKHR *>( this );
}
- operator VkPhysicalDeviceVideoFormatInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVideoFormatInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVideoFormatInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ const VULKAN_HPP_NAMESPACE::VideoProfilesKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageUsage, pVideoProfiles );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVideoFormatInfoKHR const & ) const = default;
# else
bool operator==( PhysicalDeviceVideoFormatInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageUsage == rhs.imageUsage ) &&
( pVideoProfiles == rhs.pVideoProfiles );
+# endif
}
bool operator!=( PhysicalDeviceVideoFormatInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -51047,10 +68915,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage = {};
const VULKAN_HPP_NAMESPACE::VideoProfilesKHR * pVideoProfiles = {};
};
- static_assert( sizeof( PhysicalDeviceVideoFormatInfoKHR ) == sizeof( VkPhysicalDeviceVideoFormatInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVideoFormatInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR ) ==
+ sizeof( VkPhysicalDeviceVideoFormatInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVideoFormatInfoKHR>::value,
+ "PhysicalDeviceVideoFormatInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVideoFormatInfoKHR>
@@ -51061,8 +68933,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVulkan11Features
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Features;
+ using NativeType = VkPhysicalDeviceVulkan11Features;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Features;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -51100,8 +68974,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
- operator=( PhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVulkan11Features &
+ operator=( PhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVulkan11Features & operator=( VkPhysicalDeviceVulkan11Features const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -51110,89 +68984,90 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceVulkan11Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setStorageBuffer16BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
storageBuffer16BitAccess = storageBuffer16BitAccess_;
return *this;
}
- PhysicalDeviceVulkan11Features & setUniformAndStorageBuffer16BitAccess(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setUniformAndStorageBuffer16BitAccess(
VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer16BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
uniformAndStorageBuffer16BitAccess = uniformAndStorageBuffer16BitAccess_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setStoragePushConstant16( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant16_ ) VULKAN_HPP_NOEXCEPT
{
storagePushConstant16 = storagePushConstant16_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setStorageInputOutput16( VULKAN_HPP_NAMESPACE::Bool32 storageInputOutput16_ ) VULKAN_HPP_NOEXCEPT
{
storageInputOutput16 = storageInputOutput16_;
return *this;
}
- PhysicalDeviceVulkan11Features & setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
+ setMultiview( VULKAN_HPP_NAMESPACE::Bool32 multiview_ ) VULKAN_HPP_NOEXCEPT
{
multiview = multiview_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setMultiviewGeometryShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewGeometryShader_ ) VULKAN_HPP_NOEXCEPT
{
multiviewGeometryShader = multiviewGeometryShader_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setMultiviewTessellationShader( VULKAN_HPP_NAMESPACE::Bool32 multiviewTessellationShader_ ) VULKAN_HPP_NOEXCEPT
{
multiviewTessellationShader = multiviewTessellationShader_;
return *this;
}
- PhysicalDeviceVulkan11Features & setVariablePointersStorageBuffer(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features & setVariablePointersStorageBuffer(
VULKAN_HPP_NAMESPACE::Bool32 variablePointersStorageBuffer_ ) VULKAN_HPP_NOEXCEPT
{
variablePointersStorageBuffer = variablePointersStorageBuffer_;
return *this;
}
- PhysicalDeviceVulkan11Features &
- setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
+ setVariablePointers( VULKAN_HPP_NAMESPACE::Bool32 variablePointers_ ) VULKAN_HPP_NOEXCEPT
{
variablePointers = variablePointers_;
return *this;
}
- PhysicalDeviceVulkan11Features &
- setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
+ setProtectedMemory( VULKAN_HPP_NAMESPACE::Bool32 protectedMemory_ ) VULKAN_HPP_NOEXCEPT
{
protectedMemory = protectedMemory_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setSamplerYcbcrConversion( VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion_ ) VULKAN_HPP_NOEXCEPT
{
samplerYcbcrConversion = samplerYcbcrConversion_;
return *this;
}
- PhysicalDeviceVulkan11Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Features &
setShaderDrawParameters( VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters_ ) VULKAN_HPP_NOEXCEPT
{
shaderDrawParameters = shaderDrawParameters_;
@@ -51200,21 +69075,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceVulkan11Features const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan11Features const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVulkan11Features *>( this );
}
- operator VkPhysicalDeviceVulkan11Features &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan11Features &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVulkan11Features *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ storageBuffer16BitAccess,
+ uniformAndStorageBuffer16BitAccess,
+ storagePushConstant16,
+ storageInputOutput16,
+ multiview,
+ multiviewGeometryShader,
+ multiviewTessellationShader,
+ variablePointersStorageBuffer,
+ variablePointers,
+ protectedMemory,
+ samplerYcbcrConversion,
+ shaderDrawParameters );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVulkan11Features const & ) const = default;
#else
bool operator==( PhysicalDeviceVulkan11Features const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( storageBuffer16BitAccess == rhs.storageBuffer16BitAccess ) &&
( uniformAndStorageBuffer16BitAccess == rhs.uniformAndStorageBuffer16BitAccess ) &&
@@ -51226,6 +69142,7 @@ namespace VULKAN_HPP_NAMESPACE
( variablePointers == rhs.variablePointers ) && ( protectedMemory == rhs.protectedMemory ) &&
( samplerYcbcrConversion == rhs.samplerYcbcrConversion ) &&
( shaderDrawParameters == rhs.shaderDrawParameters );
+# endif
}
bool operator!=( PhysicalDeviceVulkan11Features const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -51250,10 +69167,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 samplerYcbcrConversion = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderDrawParameters = {};
};
- static_assert( sizeof( PhysicalDeviceVulkan11Features ) == sizeof( VkPhysicalDeviceVulkan11Features ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVulkan11Features>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features ) ==
+ sizeof( VkPhysicalDeviceVulkan11Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Features>::value,
+ "PhysicalDeviceVulkan11Features is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVulkan11Features>
@@ -51263,7 +69184,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVulkan11Properties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVulkan11Properties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan11Properties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -51309,8 +69232,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan11Properties &
- operator=( PhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVulkan11Properties &
+ operator=( PhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVulkan11Properties & operator=( VkPhysicalDeviceVulkan11Properties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -51318,21 +69241,68 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceVulkan11Properties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan11Properties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVulkan11Properties *>( this );
}
- operator VkPhysicalDeviceVulkan11Properties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan11Properties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVulkan11Properties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_LUID_SIZE> const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ VULKAN_HPP_NAMESPACE::SubgroupFeatureFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::PointClippingBehavior const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ deviceUUID,
+ driverUUID,
+ deviceLUID,
+ deviceNodeMask,
+ deviceLUIDValid,
+ subgroupSize,
+ subgroupSupportedStages,
+ subgroupSupportedOperations,
+ subgroupQuadOperationsInAllStages,
+ pointClippingBehavior,
+ maxMultiviewViewCount,
+ maxMultiviewInstanceIndex,
+ protectedNoFault,
+ maxPerSetDescriptors,
+ maxMemoryAllocationSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVulkan11Properties const & ) const = default;
#else
bool operator==( PhysicalDeviceVulkan11Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( deviceUUID == rhs.deviceUUID ) &&
( driverUUID == rhs.driverUUID ) && ( deviceLUID == rhs.deviceLUID ) &&
( deviceNodeMask == rhs.deviceNodeMask ) && ( deviceLUIDValid == rhs.deviceLUIDValid ) &&
@@ -51344,6 +69314,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxMultiviewInstanceIndex == rhs.maxMultiviewInstanceIndex ) &&
( protectedNoFault == rhs.protectedNoFault ) && ( maxPerSetDescriptors == rhs.maxPerSetDescriptors ) &&
( maxMemoryAllocationSize == rhs.maxMemoryAllocationSize );
+# endif
}
bool operator!=( PhysicalDeviceVulkan11Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -51372,10 +69343,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxPerSetDescriptors = {};
VULKAN_HPP_NAMESPACE::DeviceSize maxMemoryAllocationSize = {};
};
- static_assert( sizeof( PhysicalDeviceVulkan11Properties ) == sizeof( VkPhysicalDeviceVulkan11Properties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVulkan11Properties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties ) ==
+ sizeof( VkPhysicalDeviceVulkan11Properties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan11Properties>::value,
+ "PhysicalDeviceVulkan11Properties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVulkan11Properties>
@@ -51385,8 +69360,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVulkan12Features
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Features;
+ using NativeType = VkPhysicalDeviceVulkan12Features;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Features;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan12Features(
@@ -51494,8 +69471,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
- operator=( PhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVulkan12Features &
+ operator=( PhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVulkan12Features & operator=( VkPhysicalDeviceVulkan12Features const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -51504,333 +69481,335 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceVulkan12Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setSamplerMirrorClampToEdge( VULKAN_HPP_NAMESPACE::Bool32 samplerMirrorClampToEdge_ ) VULKAN_HPP_NOEXCEPT
{
samplerMirrorClampToEdge = samplerMirrorClampToEdge_;
return *this;
}
- PhysicalDeviceVulkan12Features &
- setDrawIndirectCount( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setDrawIndirectCount( VULKAN_HPP_NAMESPACE::Bool32 drawIndirectCount_ ) VULKAN_HPP_NOEXCEPT
{
drawIndirectCount = drawIndirectCount_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setStorageBuffer8BitAccess( VULKAN_HPP_NAMESPACE::Bool32 storageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
storageBuffer8BitAccess = storageBuffer8BitAccess_;
return *this;
}
- PhysicalDeviceVulkan12Features & setUniformAndStorageBuffer8BitAccess(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setUniformAndStorageBuffer8BitAccess(
VULKAN_HPP_NAMESPACE::Bool32 uniformAndStorageBuffer8BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
uniformAndStorageBuffer8BitAccess = uniformAndStorageBuffer8BitAccess_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setStoragePushConstant8( VULKAN_HPP_NAMESPACE::Bool32 storagePushConstant8_ ) VULKAN_HPP_NOEXCEPT
{
storagePushConstant8 = storagePushConstant8_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setShaderBufferInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderBufferInt64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderBufferInt64Atomics = shaderBufferInt64Atomics_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setShaderSharedInt64Atomics( VULKAN_HPP_NAMESPACE::Bool32 shaderSharedInt64Atomics_ ) VULKAN_HPP_NOEXCEPT
{
shaderSharedInt64Atomics = shaderSharedInt64Atomics_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setShaderFloat16( VULKAN_HPP_NAMESPACE::Bool32 shaderFloat16_ ) VULKAN_HPP_NOEXCEPT
{
shaderFloat16 = shaderFloat16_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setShaderInt8( VULKAN_HPP_NAMESPACE::Bool32 shaderInt8_ ) VULKAN_HPP_NOEXCEPT
{
shaderInt8 = shaderInt8_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setDescriptorIndexing( VULKAN_HPP_NAMESPACE::Bool32 descriptorIndexing_ ) VULKAN_HPP_NOEXCEPT
{
descriptorIndexing = descriptorIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderInputAttachmentArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderInputAttachmentArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderInputAttachmentArrayDynamicIndexing = shaderInputAttachmentArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderUniformTexelBufferArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderUniformTexelBufferArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformTexelBufferArrayDynamicIndexing = shaderUniformTexelBufferArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderStorageTexelBufferArrayDynamicIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderStorageTexelBufferArrayDynamicIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayDynamicIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageTexelBufferArrayDynamicIndexing = shaderStorageTexelBufferArrayDynamicIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderUniformBufferArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderUniformBufferArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderUniformBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformBufferArrayNonUniformIndexing = shaderUniformBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderSampledImageArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderSampledImageArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderSampledImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderSampledImageArrayNonUniformIndexing = shaderSampledImageArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderStorageBufferArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderStorageBufferArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageBufferArrayNonUniformIndexing = shaderStorageBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderStorageImageArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderStorageImageArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageImageArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageImageArrayNonUniformIndexing = shaderStorageImageArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderInputAttachmentArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderInputAttachmentArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderInputAttachmentArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderInputAttachmentArrayNonUniformIndexing = shaderInputAttachmentArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderUniformTexelBufferArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderUniformTexelBufferArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderUniformTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderUniformTexelBufferArrayNonUniformIndexing = shaderUniformTexelBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setShaderStorageTexelBufferArrayNonUniformIndexing(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setShaderStorageTexelBufferArrayNonUniformIndexing(
VULKAN_HPP_NAMESPACE::Bool32 shaderStorageTexelBufferArrayNonUniformIndexing_ ) VULKAN_HPP_NOEXCEPT
{
shaderStorageTexelBufferArrayNonUniformIndexing = shaderStorageTexelBufferArrayNonUniformIndexing_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingUniformBufferUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingUniformBufferUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingUniformBufferUpdateAfterBind = descriptorBindingUniformBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingSampledImageUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingSampledImageUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingSampledImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingSampledImageUpdateAfterBind = descriptorBindingSampledImageUpdateAfterBind_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingStorageImageUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingStorageImageUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageImageUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingStorageImageUpdateAfterBind = descriptorBindingStorageImageUpdateAfterBind_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingStorageBufferUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingStorageBufferUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingStorageBufferUpdateAfterBind = descriptorBindingStorageBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingUniformTexelBufferUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingUniformTexelBufferUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUniformTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingUniformTexelBufferUpdateAfterBind = descriptorBindingUniformTexelBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingStorageTexelBufferUpdateAfterBind(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingStorageTexelBufferUpdateAfterBind(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingStorageTexelBufferUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingStorageTexelBufferUpdateAfterBind = descriptorBindingStorageTexelBufferUpdateAfterBind_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingUpdateUnusedWhilePending(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingUpdateUnusedWhilePending(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingUpdateUnusedWhilePending_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingUpdateUnusedWhilePending = descriptorBindingUpdateUnusedWhilePending_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingPartiallyBound(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingPartiallyBound(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingPartiallyBound_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingPartiallyBound = descriptorBindingPartiallyBound_;
return *this;
}
- PhysicalDeviceVulkan12Features & setDescriptorBindingVariableDescriptorCount(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setDescriptorBindingVariableDescriptorCount(
VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingVariableDescriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorBindingVariableDescriptorCount = descriptorBindingVariableDescriptorCount_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setRuntimeDescriptorArray( VULKAN_HPP_NAMESPACE::Bool32 runtimeDescriptorArray_ ) VULKAN_HPP_NOEXCEPT
{
runtimeDescriptorArray = runtimeDescriptorArray_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setSamplerFilterMinmax( VULKAN_HPP_NAMESPACE::Bool32 samplerFilterMinmax_ ) VULKAN_HPP_NOEXCEPT
{
samplerFilterMinmax = samplerFilterMinmax_;
return *this;
}
- PhysicalDeviceVulkan12Features &
- setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setScalarBlockLayout( VULKAN_HPP_NAMESPACE::Bool32 scalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT
{
scalarBlockLayout = scalarBlockLayout_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setImagelessFramebuffer( VULKAN_HPP_NAMESPACE::Bool32 imagelessFramebuffer_ ) VULKAN_HPP_NOEXCEPT
{
imagelessFramebuffer = imagelessFramebuffer_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setUniformBufferStandardLayout( VULKAN_HPP_NAMESPACE::Bool32 uniformBufferStandardLayout_ ) VULKAN_HPP_NOEXCEPT
{
uniformBufferStandardLayout = uniformBufferStandardLayout_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setShaderSubgroupExtendedTypes( VULKAN_HPP_NAMESPACE::Bool32 shaderSubgroupExtendedTypes_ ) VULKAN_HPP_NOEXCEPT
{
shaderSubgroupExtendedTypes = shaderSubgroupExtendedTypes_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setSeparateDepthStencilLayouts( VULKAN_HPP_NAMESPACE::Bool32 separateDepthStencilLayouts_ ) VULKAN_HPP_NOEXCEPT
{
separateDepthStencilLayouts = separateDepthStencilLayouts_;
return *this;
}
- PhysicalDeviceVulkan12Features &
- setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setHostQueryReset( VULKAN_HPP_NAMESPACE::Bool32 hostQueryReset_ ) VULKAN_HPP_NOEXCEPT
{
hostQueryReset = hostQueryReset_;
return *this;
}
- PhysicalDeviceVulkan12Features &
- setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setTimelineSemaphore( VULKAN_HPP_NAMESPACE::Bool32 timelineSemaphore_ ) VULKAN_HPP_NOEXCEPT
{
timelineSemaphore = timelineSemaphore_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setBufferDeviceAddress( VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddress = bufferDeviceAddress_;
return *this;
}
- PhysicalDeviceVulkan12Features & setBufferDeviceAddressCaptureReplay(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setBufferDeviceAddressCaptureReplay(
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressCaptureReplay_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddressCaptureReplay = bufferDeviceAddressCaptureReplay_;
return *this;
}
- PhysicalDeviceVulkan12Features & setBufferDeviceAddressMultiDevice(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setBufferDeviceAddressMultiDevice(
VULKAN_HPP_NAMESPACE::Bool32 bufferDeviceAddressMultiDevice_ ) VULKAN_HPP_NOEXCEPT
{
bufferDeviceAddressMultiDevice = bufferDeviceAddressMultiDevice_;
return *this;
}
- PhysicalDeviceVulkan12Features &
- setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT
{
vulkanMemoryModel = vulkanMemoryModel_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setVulkanMemoryModelDeviceScope( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ ) VULKAN_HPP_NOEXCEPT
{
vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope_;
return *this;
}
- PhysicalDeviceVulkan12Features & setVulkanMemoryModelAvailabilityVisibilityChains(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features & setVulkanMemoryModelAvailabilityVisibilityChains(
VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ ) VULKAN_HPP_NOEXCEPT
{
vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setShaderOutputViewportIndex( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputViewportIndex_ ) VULKAN_HPP_NOEXCEPT
{
shaderOutputViewportIndex = shaderOutputViewportIndex_;
return *this;
}
- PhysicalDeviceVulkan12Features &
- setShaderOutputLayer( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
+ setShaderOutputLayer( VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer_ ) VULKAN_HPP_NOEXCEPT
{
shaderOutputLayer = shaderOutputLayer_;
return *this;
}
- PhysicalDeviceVulkan12Features &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Features &
setSubgroupBroadcastDynamicId( VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId_ ) VULKAN_HPP_NOEXCEPT
{
subgroupBroadcastDynamicId = subgroupBroadcastDynamicId_;
@@ -51838,21 +69817,132 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceVulkan12Features const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan12Features const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVulkan12Features *>( this );
}
- operator VkPhysicalDeviceVulkan12Features &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan12Features &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVulkan12Features *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ samplerMirrorClampToEdge,
+ drawIndirectCount,
+ storageBuffer8BitAccess,
+ uniformAndStorageBuffer8BitAccess,
+ storagePushConstant8,
+ shaderBufferInt64Atomics,
+ shaderSharedInt64Atomics,
+ shaderFloat16,
+ shaderInt8,
+ descriptorIndexing,
+ shaderInputAttachmentArrayDynamicIndexing,
+ shaderUniformTexelBufferArrayDynamicIndexing,
+ shaderStorageTexelBufferArrayDynamicIndexing,
+ shaderUniformBufferArrayNonUniformIndexing,
+ shaderSampledImageArrayNonUniformIndexing,
+ shaderStorageBufferArrayNonUniformIndexing,
+ shaderStorageImageArrayNonUniformIndexing,
+ shaderInputAttachmentArrayNonUniformIndexing,
+ shaderUniformTexelBufferArrayNonUniformIndexing,
+ shaderStorageTexelBufferArrayNonUniformIndexing,
+ descriptorBindingUniformBufferUpdateAfterBind,
+ descriptorBindingSampledImageUpdateAfterBind,
+ descriptorBindingStorageImageUpdateAfterBind,
+ descriptorBindingStorageBufferUpdateAfterBind,
+ descriptorBindingUniformTexelBufferUpdateAfterBind,
+ descriptorBindingStorageTexelBufferUpdateAfterBind,
+ descriptorBindingUpdateUnusedWhilePending,
+ descriptorBindingPartiallyBound,
+ descriptorBindingVariableDescriptorCount,
+ runtimeDescriptorArray,
+ samplerFilterMinmax,
+ scalarBlockLayout,
+ imagelessFramebuffer,
+ uniformBufferStandardLayout,
+ shaderSubgroupExtendedTypes,
+ separateDepthStencilLayouts,
+ hostQueryReset,
+ timelineSemaphore,
+ bufferDeviceAddress,
+ bufferDeviceAddressCaptureReplay,
+ bufferDeviceAddressMultiDevice,
+ vulkanMemoryModel,
+ vulkanMemoryModelDeviceScope,
+ vulkanMemoryModelAvailabilityVisibilityChains,
+ shaderOutputViewportIndex,
+ shaderOutputLayer,
+ subgroupBroadcastDynamicId );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVulkan12Features const & ) const = default;
#else
bool operator==( PhysicalDeviceVulkan12Features const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( samplerMirrorClampToEdge == rhs.samplerMirrorClampToEdge ) &&
( drawIndirectCount == rhs.drawIndirectCount ) &&
@@ -51901,6 +69991,7 @@ namespace VULKAN_HPP_NAMESPACE
( shaderOutputViewportIndex == rhs.shaderOutputViewportIndex ) &&
( shaderOutputLayer == rhs.shaderOutputLayer ) &&
( subgroupBroadcastDynamicId == rhs.subgroupBroadcastDynamicId );
+# endif
}
bool operator!=( PhysicalDeviceVulkan12Features const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -51960,10 +70051,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 shaderOutputLayer = {};
VULKAN_HPP_NAMESPACE::Bool32 subgroupBroadcastDynamicId = {};
};
- static_assert( sizeof( PhysicalDeviceVulkan12Features ) == sizeof( VkPhysicalDeviceVulkan12Features ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVulkan12Features>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features ) ==
+ sizeof( VkPhysicalDeviceVulkan12Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Features>::value,
+ "PhysicalDeviceVulkan12Features is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVulkan12Features>
@@ -51973,7 +70068,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceVulkan12Properties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVulkan12Properties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan12Properties;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -52094,8 +70191,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan12Properties &
- operator=( PhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVulkan12Properties &
+ operator=( PhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVulkan12Properties & operator=( VkPhysicalDeviceVulkan12Properties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -52103,21 +70200,142 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPhysicalDeviceVulkan12Properties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan12Properties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVulkan12Properties *>( this );
}
- operator VkPhysicalDeviceVulkan12Properties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkan12Properties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVulkan12Properties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::DriverId const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DRIVER_NAME_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DRIVER_INFO_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ConformanceVersion const &,
+ VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &,
+ VULKAN_HPP_NAMESPACE::ShaderFloatControlsIndependence const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlags const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlags const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::SampleCountFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ driverID,
+ driverName,
+ driverInfo,
+ conformanceVersion,
+ denormBehaviorIndependence,
+ roundingModeIndependence,
+ shaderSignedZeroInfNanPreserveFloat16,
+ shaderSignedZeroInfNanPreserveFloat32,
+ shaderSignedZeroInfNanPreserveFloat64,
+ shaderDenormPreserveFloat16,
+ shaderDenormPreserveFloat32,
+ shaderDenormPreserveFloat64,
+ shaderDenormFlushToZeroFloat16,
+ shaderDenormFlushToZeroFloat32,
+ shaderDenormFlushToZeroFloat64,
+ shaderRoundingModeRTEFloat16,
+ shaderRoundingModeRTEFloat32,
+ shaderRoundingModeRTEFloat64,
+ shaderRoundingModeRTZFloat16,
+ shaderRoundingModeRTZFloat32,
+ shaderRoundingModeRTZFloat64,
+ maxUpdateAfterBindDescriptorsInAllPools,
+ shaderUniformBufferArrayNonUniformIndexingNative,
+ shaderSampledImageArrayNonUniformIndexingNative,
+ shaderStorageBufferArrayNonUniformIndexingNative,
+ shaderStorageImageArrayNonUniformIndexingNative,
+ shaderInputAttachmentArrayNonUniformIndexingNative,
+ robustBufferAccessUpdateAfterBind,
+ quadDivergentImplicitLod,
+ maxPerStageDescriptorUpdateAfterBindSamplers,
+ maxPerStageDescriptorUpdateAfterBindUniformBuffers,
+ maxPerStageDescriptorUpdateAfterBindStorageBuffers,
+ maxPerStageDescriptorUpdateAfterBindSampledImages,
+ maxPerStageDescriptorUpdateAfterBindStorageImages,
+ maxPerStageDescriptorUpdateAfterBindInputAttachments,
+ maxPerStageUpdateAfterBindResources,
+ maxDescriptorSetUpdateAfterBindSamplers,
+ maxDescriptorSetUpdateAfterBindUniformBuffers,
+ maxDescriptorSetUpdateAfterBindUniformBuffersDynamic,
+ maxDescriptorSetUpdateAfterBindStorageBuffers,
+ maxDescriptorSetUpdateAfterBindStorageBuffersDynamic,
+ maxDescriptorSetUpdateAfterBindSampledImages,
+ maxDescriptorSetUpdateAfterBindStorageImages,
+ maxDescriptorSetUpdateAfterBindInputAttachments,
+ supportedDepthResolveModes,
+ supportedStencilResolveModes,
+ independentResolveNone,
+ independentResolve,
+ filterMinmaxSingleComponentFormats,
+ filterMinmaxImageComponentMapping,
+ maxTimelineSemaphoreValueDifference,
+ framebufferIntegerColorSampleCounts );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVulkan12Properties const & ) const = default;
#else
bool operator==( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( driverID == rhs.driverID ) &&
( driverName == rhs.driverName ) && ( driverInfo == rhs.driverInfo ) &&
( conformanceVersion == rhs.conformanceVersion ) &&
@@ -52182,6 +70400,7 @@ namespace VULKAN_HPP_NAMESPACE
( filterMinmaxImageComponentMapping == rhs.filterMinmaxImageComponentMapping ) &&
( maxTimelineSemaphoreValueDifference == rhs.maxTimelineSemaphoreValueDifference ) &&
( framebufferIntegerColorSampleCounts == rhs.framebufferIntegerColorSampleCounts );
+# endif
}
bool operator!=( PhysicalDeviceVulkan12Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52248,10 +70467,14 @@ namespace VULKAN_HPP_NAMESPACE
uint64_t maxTimelineSemaphoreValueDifference = {};
VULKAN_HPP_NAMESPACE::SampleCountFlags framebufferIntegerColorSampleCounts = {};
};
- static_assert( sizeof( PhysicalDeviceVulkan12Properties ) == sizeof( VkPhysicalDeviceVulkan12Properties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVulkan12Properties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties ) ==
+ sizeof( VkPhysicalDeviceVulkan12Properties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan12Properties>::value,
+ "PhysicalDeviceVulkan12Properties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVulkan12Properties>
@@ -52259,9 +70482,699 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceVulkan12Properties;
};
+ struct PhysicalDeviceVulkan13Features
+ {
+ using NativeType = VkPhysicalDeviceVulkan13Features;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan13Features;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Features(
+ VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 privateData_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ = {} ) VULKAN_HPP_NOEXCEPT
+ : robustImageAccess( robustImageAccess_ )
+ , inlineUniformBlock( inlineUniformBlock_ )
+ , descriptorBindingInlineUniformBlockUpdateAfterBind( descriptorBindingInlineUniformBlockUpdateAfterBind_ )
+ , pipelineCreationCacheControl( pipelineCreationCacheControl_ )
+ , privateData( privateData_ )
+ , shaderDemoteToHelperInvocation( shaderDemoteToHelperInvocation_ )
+ , shaderTerminateInvocation( shaderTerminateInvocation_ )
+ , subgroupSizeControl( subgroupSizeControl_ )
+ , computeFullSubgroups( computeFullSubgroups_ )
+ , synchronization2( synchronization2_ )
+ , textureCompressionASTC_HDR( textureCompressionASTC_HDR_ )
+ , shaderZeroInitializeWorkgroupMemory( shaderZeroInitializeWorkgroupMemory_ )
+ , dynamicRendering( dynamicRendering_ )
+ , shaderIntegerDotProduct( shaderIntegerDotProduct_ )
+ , maintenance4( maintenance4_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceVulkan13Features( PhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceVulkan13Features( VkPhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceVulkan13Features( *reinterpret_cast<PhysicalDeviceVulkan13Features const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceVulkan13Features &
+ operator=( PhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceVulkan13Features & operator=( VkPhysicalDeviceVulkan13Features const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setRobustImageAccess( VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess_ ) VULKAN_HPP_NOEXCEPT
+ {
+ robustImageAccess = robustImageAccess_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setInlineUniformBlock( VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock_ ) VULKAN_HPP_NOEXCEPT
+ {
+ inlineUniformBlock = inlineUniformBlock_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setDescriptorBindingInlineUniformBlockUpdateAfterBind(
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind_ ) VULKAN_HPP_NOEXCEPT
+ {
+ descriptorBindingInlineUniformBlockUpdateAfterBind = descriptorBindingInlineUniformBlockUpdateAfterBind_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setPipelineCreationCacheControl( VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pipelineCreationCacheControl = pipelineCreationCacheControl_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setPrivateData( VULKAN_HPP_NAMESPACE::Bool32 privateData_ ) VULKAN_HPP_NOEXCEPT
+ {
+ privateData = privateData_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setShaderDemoteToHelperInvocation(
+ VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation_ ) VULKAN_HPP_NOEXCEPT
+ {
+ shaderDemoteToHelperInvocation = shaderDemoteToHelperInvocation_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setShaderTerminateInvocation( VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation_ ) VULKAN_HPP_NOEXCEPT
+ {
+ shaderTerminateInvocation = shaderTerminateInvocation_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setSubgroupSizeControl( VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl_ ) VULKAN_HPP_NOEXCEPT
+ {
+ subgroupSizeControl = subgroupSizeControl_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setComputeFullSubgroups( VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups_ ) VULKAN_HPP_NOEXCEPT
+ {
+ computeFullSubgroups = computeFullSubgroups_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setSynchronization2( VULKAN_HPP_NAMESPACE::Bool32 synchronization2_ ) VULKAN_HPP_NOEXCEPT
+ {
+ synchronization2 = synchronization2_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setTextureCompressionASTC_HDR( VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR_ ) VULKAN_HPP_NOEXCEPT
+ {
+ textureCompressionASTC_HDR = textureCompressionASTC_HDR_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features & setShaderZeroInitializeWorkgroupMemory(
+ VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ ) VULKAN_HPP_NOEXCEPT
+ {
+ shaderZeroInitializeWorkgroupMemory = shaderZeroInitializeWorkgroupMemory_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setDynamicRendering( VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering_ ) VULKAN_HPP_NOEXCEPT
+ {
+ dynamicRendering = dynamicRendering_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setShaderIntegerDotProduct( VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct_ ) VULKAN_HPP_NOEXCEPT
+ {
+ shaderIntegerDotProduct = shaderIntegerDotProduct_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkan13Features &
+ setMaintenance4( VULKAN_HPP_NAMESPACE::Bool32 maintenance4_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maintenance4 = maintenance4_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPhysicalDeviceVulkan13Features const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceVulkan13Features *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceVulkan13Features &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceVulkan13Features *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ robustImageAccess,
+ inlineUniformBlock,
+ descriptorBindingInlineUniformBlockUpdateAfterBind,
+ pipelineCreationCacheControl,
+ privateData,
+ shaderDemoteToHelperInvocation,
+ shaderTerminateInvocation,
+ subgroupSizeControl,
+ computeFullSubgroups,
+ synchronization2,
+ textureCompressionASTC_HDR,
+ shaderZeroInitializeWorkgroupMemory,
+ dynamicRendering,
+ shaderIntegerDotProduct,
+ maintenance4 );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceVulkan13Features const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceVulkan13Features const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( robustImageAccess == rhs.robustImageAccess ) &&
+ ( inlineUniformBlock == rhs.inlineUniformBlock ) &&
+ ( descriptorBindingInlineUniformBlockUpdateAfterBind ==
+ rhs.descriptorBindingInlineUniformBlockUpdateAfterBind ) &&
+ ( pipelineCreationCacheControl == rhs.pipelineCreationCacheControl ) &&
+ ( privateData == rhs.privateData ) &&
+ ( shaderDemoteToHelperInvocation == rhs.shaderDemoteToHelperInvocation ) &&
+ ( shaderTerminateInvocation == rhs.shaderTerminateInvocation ) &&
+ ( subgroupSizeControl == rhs.subgroupSizeControl ) &&
+ ( computeFullSubgroups == rhs.computeFullSubgroups ) && ( synchronization2 == rhs.synchronization2 ) &&
+ ( textureCompressionASTC_HDR == rhs.textureCompressionASTC_HDR ) &&
+ ( shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory ) &&
+ ( dynamicRendering == rhs.dynamicRendering ) &&
+ ( shaderIntegerDotProduct == rhs.shaderIntegerDotProduct ) && ( maintenance4 == rhs.maintenance4 );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceVulkan13Features const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan13Features;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 robustImageAccess = {};
+ VULKAN_HPP_NAMESPACE::Bool32 inlineUniformBlock = {};
+ VULKAN_HPP_NAMESPACE::Bool32 descriptorBindingInlineUniformBlockUpdateAfterBind = {};
+ VULKAN_HPP_NAMESPACE::Bool32 pipelineCreationCacheControl = {};
+ VULKAN_HPP_NAMESPACE::Bool32 privateData = {};
+ VULKAN_HPP_NAMESPACE::Bool32 shaderDemoteToHelperInvocation = {};
+ VULKAN_HPP_NAMESPACE::Bool32 shaderTerminateInvocation = {};
+ VULKAN_HPP_NAMESPACE::Bool32 subgroupSizeControl = {};
+ VULKAN_HPP_NAMESPACE::Bool32 computeFullSubgroups = {};
+ VULKAN_HPP_NAMESPACE::Bool32 synchronization2 = {};
+ VULKAN_HPP_NAMESPACE::Bool32 textureCompressionASTC_HDR = {};
+ VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory = {};
+ VULKAN_HPP_NAMESPACE::Bool32 dynamicRendering = {};
+ VULKAN_HPP_NAMESPACE::Bool32 shaderIntegerDotProduct = {};
+ VULKAN_HPP_NAMESPACE::Bool32 maintenance4 = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features ) ==
+ sizeof( VkPhysicalDeviceVulkan13Features ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Features>::value,
+ "PhysicalDeviceVulkan13Features is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceVulkan13Features>
+ {
+ using Type = PhysicalDeviceVulkan13Features;
+ };
+
+ struct PhysicalDeviceVulkan13Properties
+ {
+ using NativeType = VkPhysicalDeviceVulkan13Properties;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePhysicalDeviceVulkan13Properties;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceVulkan13Properties(
+ uint32_t minSubgroupSize_ = {},
+ uint32_t maxSubgroupSize_ = {},
+ uint32_t maxComputeWorkgroupSubgroups_ = {},
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages_ = {},
+ uint32_t maxInlineUniformBlockSize_ = {},
+ uint32_t maxPerStageDescriptorInlineUniformBlocks_ = {},
+ uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ = {},
+ uint32_t maxDescriptorSetInlineUniformBlocks_ = {},
+ uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ = {},
+ uint32_t maxInlineUniformTotalSize_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : minSubgroupSize( minSubgroupSize_ )
+ , maxSubgroupSize( maxSubgroupSize_ )
+ , maxComputeWorkgroupSubgroups( maxComputeWorkgroupSubgroups_ )
+ , requiredSubgroupSizeStages( requiredSubgroupSizeStages_ )
+ , maxInlineUniformBlockSize( maxInlineUniformBlockSize_ )
+ , maxPerStageDescriptorInlineUniformBlocks( maxPerStageDescriptorInlineUniformBlocks_ )
+ , maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks(
+ maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks_ )
+ , maxDescriptorSetInlineUniformBlocks( maxDescriptorSetInlineUniformBlocks_ )
+ , maxDescriptorSetUpdateAfterBindInlineUniformBlocks( maxDescriptorSetUpdateAfterBindInlineUniformBlocks_ )
+ , maxInlineUniformTotalSize( maxInlineUniformTotalSize_ )
+ , integerDotProduct8BitUnsignedAccelerated( integerDotProduct8BitUnsignedAccelerated_ )
+ , integerDotProduct8BitSignedAccelerated( integerDotProduct8BitSignedAccelerated_ )
+ , integerDotProduct8BitMixedSignednessAccelerated( integerDotProduct8BitMixedSignednessAccelerated_ )
+ , integerDotProduct4x8BitPackedUnsignedAccelerated( integerDotProduct4x8BitPackedUnsignedAccelerated_ )
+ , integerDotProduct4x8BitPackedSignedAccelerated( integerDotProduct4x8BitPackedSignedAccelerated_ )
+ , integerDotProduct4x8BitPackedMixedSignednessAccelerated(
+ integerDotProduct4x8BitPackedMixedSignednessAccelerated_ )
+ , integerDotProduct16BitUnsignedAccelerated( integerDotProduct16BitUnsignedAccelerated_ )
+ , integerDotProduct16BitSignedAccelerated( integerDotProduct16BitSignedAccelerated_ )
+ , integerDotProduct16BitMixedSignednessAccelerated( integerDotProduct16BitMixedSignednessAccelerated_ )
+ , integerDotProduct32BitUnsignedAccelerated( integerDotProduct32BitUnsignedAccelerated_ )
+ , integerDotProduct32BitSignedAccelerated( integerDotProduct32BitSignedAccelerated_ )
+ , integerDotProduct32BitMixedSignednessAccelerated( integerDotProduct32BitMixedSignednessAccelerated_ )
+ , integerDotProduct64BitUnsignedAccelerated( integerDotProduct64BitUnsignedAccelerated_ )
+ , integerDotProduct64BitSignedAccelerated( integerDotProduct64BitSignedAccelerated_ )
+ , integerDotProduct64BitMixedSignednessAccelerated( integerDotProduct64BitMixedSignednessAccelerated_ )
+ , integerDotProductAccumulatingSaturating8BitUnsignedAccelerated(
+ integerDotProductAccumulatingSaturating8BitUnsignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating8BitSignedAccelerated(
+ integerDotProductAccumulatingSaturating8BitSignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated(
+ integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated_ )
+ , integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated(
+ integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated(
+ integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated(
+ integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated_ )
+ , integerDotProductAccumulatingSaturating16BitUnsignedAccelerated(
+ integerDotProductAccumulatingSaturating16BitUnsignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating16BitSignedAccelerated(
+ integerDotProductAccumulatingSaturating16BitSignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated(
+ integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated_ )
+ , integerDotProductAccumulatingSaturating32BitUnsignedAccelerated(
+ integerDotProductAccumulatingSaturating32BitUnsignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating32BitSignedAccelerated(
+ integerDotProductAccumulatingSaturating32BitSignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated(
+ integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated_ )
+ , integerDotProductAccumulatingSaturating64BitUnsignedAccelerated(
+ integerDotProductAccumulatingSaturating64BitUnsignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating64BitSignedAccelerated(
+ integerDotProductAccumulatingSaturating64BitSignedAccelerated_ )
+ , integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated(
+ integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated_ )
+ , storageTexelBufferOffsetAlignmentBytes( storageTexelBufferOffsetAlignmentBytes_ )
+ , storageTexelBufferOffsetSingleTexelAlignment( storageTexelBufferOffsetSingleTexelAlignment_ )
+ , uniformTexelBufferOffsetAlignmentBytes( uniformTexelBufferOffsetAlignmentBytes_ )
+ , uniformTexelBufferOffsetSingleTexelAlignment( uniformTexelBufferOffsetSingleTexelAlignment_ )
+ , maxBufferSize( maxBufferSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ PhysicalDeviceVulkan13Properties( PhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceVulkan13Properties( VkPhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceVulkan13Properties( *reinterpret_cast<PhysicalDeviceVulkan13Properties const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PhysicalDeviceVulkan13Properties &
+ operator=( PhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PhysicalDeviceVulkan13Properties & operator=( VkPhysicalDeviceVulkan13Properties const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties const *>( &rhs );
+ return *this;
+ }
+
+ explicit operator VkPhysicalDeviceVulkan13Properties const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceVulkan13Properties *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceVulkan13Properties &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPhysicalDeviceVulkan13Properties *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ minSubgroupSize,
+ maxSubgroupSize,
+ maxComputeWorkgroupSubgroups,
+ requiredSubgroupSizeStages,
+ maxInlineUniformBlockSize,
+ maxPerStageDescriptorInlineUniformBlocks,
+ maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks,
+ maxDescriptorSetInlineUniformBlocks,
+ maxDescriptorSetUpdateAfterBindInlineUniformBlocks,
+ maxInlineUniformTotalSize,
+ integerDotProduct8BitUnsignedAccelerated,
+ integerDotProduct8BitSignedAccelerated,
+ integerDotProduct8BitMixedSignednessAccelerated,
+ integerDotProduct4x8BitPackedUnsignedAccelerated,
+ integerDotProduct4x8BitPackedSignedAccelerated,
+ integerDotProduct4x8BitPackedMixedSignednessAccelerated,
+ integerDotProduct16BitUnsignedAccelerated,
+ integerDotProduct16BitSignedAccelerated,
+ integerDotProduct16BitMixedSignednessAccelerated,
+ integerDotProduct32BitUnsignedAccelerated,
+ integerDotProduct32BitSignedAccelerated,
+ integerDotProduct32BitMixedSignednessAccelerated,
+ integerDotProduct64BitUnsignedAccelerated,
+ integerDotProduct64BitSignedAccelerated,
+ integerDotProduct64BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating8BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating8BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated,
+ integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating16BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating16BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating32BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating32BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated,
+ integerDotProductAccumulatingSaturating64BitUnsignedAccelerated,
+ integerDotProductAccumulatingSaturating64BitSignedAccelerated,
+ integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated,
+ storageTexelBufferOffsetAlignmentBytes,
+ storageTexelBufferOffsetSingleTexelAlignment,
+ uniformTexelBufferOffsetAlignmentBytes,
+ uniformTexelBufferOffsetSingleTexelAlignment,
+ maxBufferSize );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PhysicalDeviceVulkan13Properties const & ) const = default;
+#else
+ bool operator==( PhysicalDeviceVulkan13Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minSubgroupSize == rhs.minSubgroupSize ) &&
+ ( maxSubgroupSize == rhs.maxSubgroupSize ) &&
+ ( maxComputeWorkgroupSubgroups == rhs.maxComputeWorkgroupSubgroups ) &&
+ ( requiredSubgroupSizeStages == rhs.requiredSubgroupSizeStages ) &&
+ ( maxInlineUniformBlockSize == rhs.maxInlineUniformBlockSize ) &&
+ ( maxPerStageDescriptorInlineUniformBlocks == rhs.maxPerStageDescriptorInlineUniformBlocks ) &&
+ ( maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ==
+ rhs.maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks ) &&
+ ( maxDescriptorSetInlineUniformBlocks == rhs.maxDescriptorSetInlineUniformBlocks ) &&
+ ( maxDescriptorSetUpdateAfterBindInlineUniformBlocks ==
+ rhs.maxDescriptorSetUpdateAfterBindInlineUniformBlocks ) &&
+ ( maxInlineUniformTotalSize == rhs.maxInlineUniformTotalSize ) &&
+ ( integerDotProduct8BitUnsignedAccelerated == rhs.integerDotProduct8BitUnsignedAccelerated ) &&
+ ( integerDotProduct8BitSignedAccelerated == rhs.integerDotProduct8BitSignedAccelerated ) &&
+ ( integerDotProduct8BitMixedSignednessAccelerated ==
+ rhs.integerDotProduct8BitMixedSignednessAccelerated ) &&
+ ( integerDotProduct4x8BitPackedUnsignedAccelerated ==
+ rhs.integerDotProduct4x8BitPackedUnsignedAccelerated ) &&
+ ( integerDotProduct4x8BitPackedSignedAccelerated == rhs.integerDotProduct4x8BitPackedSignedAccelerated ) &&
+ ( integerDotProduct4x8BitPackedMixedSignednessAccelerated ==
+ rhs.integerDotProduct4x8BitPackedMixedSignednessAccelerated ) &&
+ ( integerDotProduct16BitUnsignedAccelerated == rhs.integerDotProduct16BitUnsignedAccelerated ) &&
+ ( integerDotProduct16BitSignedAccelerated == rhs.integerDotProduct16BitSignedAccelerated ) &&
+ ( integerDotProduct16BitMixedSignednessAccelerated ==
+ rhs.integerDotProduct16BitMixedSignednessAccelerated ) &&
+ ( integerDotProduct32BitUnsignedAccelerated == rhs.integerDotProduct32BitUnsignedAccelerated ) &&
+ ( integerDotProduct32BitSignedAccelerated == rhs.integerDotProduct32BitSignedAccelerated ) &&
+ ( integerDotProduct32BitMixedSignednessAccelerated ==
+ rhs.integerDotProduct32BitMixedSignednessAccelerated ) &&
+ ( integerDotProduct64BitUnsignedAccelerated == rhs.integerDotProduct64BitUnsignedAccelerated ) &&
+ ( integerDotProduct64BitSignedAccelerated == rhs.integerDotProduct64BitSignedAccelerated ) &&
+ ( integerDotProduct64BitMixedSignednessAccelerated ==
+ rhs.integerDotProduct64BitMixedSignednessAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating8BitUnsignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating8BitSignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating8BitSignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating16BitUnsignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating16BitSignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating16BitSignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating32BitUnsignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating32BitSignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating32BitSignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating64BitUnsignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating64BitSignedAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating64BitSignedAccelerated ) &&
+ ( integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ==
+ rhs.integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated ) &&
+ ( storageTexelBufferOffsetAlignmentBytes == rhs.storageTexelBufferOffsetAlignmentBytes ) &&
+ ( storageTexelBufferOffsetSingleTexelAlignment == rhs.storageTexelBufferOffsetSingleTexelAlignment ) &&
+ ( uniformTexelBufferOffsetAlignmentBytes == rhs.uniformTexelBufferOffsetAlignmentBytes ) &&
+ ( uniformTexelBufferOffsetSingleTexelAlignment == rhs.uniformTexelBufferOffsetSingleTexelAlignment ) &&
+ ( maxBufferSize == rhs.maxBufferSize );
+# endif
+ }
+
+ bool operator!=( PhysicalDeviceVulkan13Properties const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceVulkan13Properties;
+ void * pNext = {};
+ uint32_t minSubgroupSize = {};
+ uint32_t maxSubgroupSize = {};
+ uint32_t maxComputeWorkgroupSubgroups = {};
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags requiredSubgroupSizeStages = {};
+ uint32_t maxInlineUniformBlockSize = {};
+ uint32_t maxPerStageDescriptorInlineUniformBlocks = {};
+ uint32_t maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks = {};
+ uint32_t maxDescriptorSetInlineUniformBlocks = {};
+ uint32_t maxDescriptorSetUpdateAfterBindInlineUniformBlocks = {};
+ uint32_t maxInlineUniformTotalSize = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct8BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct4x8BitPackedMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct16BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct32BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProduct64BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating8BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating4x8BitPackedMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating16BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating32BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitUnsignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitSignedAccelerated = {};
+ VULKAN_HPP_NAMESPACE::Bool32 integerDotProductAccumulatingSaturating64BitMixedSignednessAccelerated = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize storageTexelBufferOffsetAlignmentBytes = {};
+ VULKAN_HPP_NAMESPACE::Bool32 storageTexelBufferOffsetSingleTexelAlignment = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize uniformTexelBufferOffsetAlignmentBytes = {};
+ VULKAN_HPP_NAMESPACE::Bool32 uniformTexelBufferOffsetSingleTexelAlignment = {};
+ VULKAN_HPP_NAMESPACE::DeviceSize maxBufferSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties ) ==
+ sizeof( VkPhysicalDeviceVulkan13Properties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkan13Properties>::value,
+ "PhysicalDeviceVulkan13Properties is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceVulkan13Properties>
+ {
+ using Type = PhysicalDeviceVulkan13Properties;
+ };
+
struct PhysicalDeviceVulkanMemoryModelFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceVulkanMemoryModelFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceVulkanMemoryModelFeatures;
@@ -52284,8 +71197,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures &
- operator=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceVulkanMemoryModelFeatures &
+ operator=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceVulkanMemoryModelFeatures &
operator=( VkPhysicalDeviceVulkanMemoryModelFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -52295,27 +71208,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceVulkanMemoryModelFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceVulkanMemoryModelFeatures &
- setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures &
+ setVulkanMemoryModel( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModel_ ) VULKAN_HPP_NOEXCEPT
{
vulkanMemoryModel = vulkanMemoryModel_;
return *this;
}
- PhysicalDeviceVulkanMemoryModelFeatures &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures &
setVulkanMemoryModelDeviceScope( VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope_ ) VULKAN_HPP_NOEXCEPT
{
vulkanMemoryModelDeviceScope = vulkanMemoryModelDeviceScope_;
return *this;
}
- PhysicalDeviceVulkanMemoryModelFeatures & setVulkanMemoryModelAvailabilityVisibilityChains(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceVulkanMemoryModelFeatures & setVulkanMemoryModelAvailabilityVisibilityChains(
VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains_ ) VULKAN_HPP_NOEXCEPT
{
vulkanMemoryModelAvailabilityVisibilityChains = vulkanMemoryModelAvailabilityVisibilityChains_;
@@ -52323,24 +71236,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceVulkanMemoryModelFeatures const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkanMemoryModelFeatures const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures *>( this );
}
- operator VkPhysicalDeviceVulkanMemoryModelFeatures &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceVulkanMemoryModelFeatures &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceVulkanMemoryModelFeatures *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, vulkanMemoryModel, vulkanMemoryModelDeviceScope, vulkanMemoryModelAvailabilityVisibilityChains );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceVulkanMemoryModelFeatures const & ) const = default;
#else
bool operator==( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vulkanMemoryModel == rhs.vulkanMemoryModel ) &&
( vulkanMemoryModelDeviceScope == rhs.vulkanMemoryModelDeviceScope ) &&
( vulkanMemoryModelAvailabilityVisibilityChains == rhs.vulkanMemoryModelAvailabilityVisibilityChains );
+# endif
}
bool operator!=( PhysicalDeviceVulkanMemoryModelFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52356,11 +71290,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelDeviceScope = {};
VULKAN_HPP_NAMESPACE::Bool32 vulkanMemoryModelAvailabilityVisibilityChains = {};
};
- static_assert( sizeof( PhysicalDeviceVulkanMemoryModelFeatures ) ==
- sizeof( VkPhysicalDeviceVulkanMemoryModelFeatures ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceVulkanMemoryModelFeatures>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures ) ==
+ sizeof( VkPhysicalDeviceVulkanMemoryModelFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceVulkanMemoryModelFeatures>::value,
+ "PhysicalDeviceVulkanMemoryModelFeatures is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceVulkanMemoryModelFeatures>
@@ -52371,7 +71309,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR;
@@ -52397,8 +71337,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
- operator=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
+ operator=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
operator=( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -52409,61 +71349,91 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setWorkgroupMemoryExplicitLayout(
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setWorkgroupMemoryExplicitLayout(
VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout_ ) VULKAN_HPP_NOEXCEPT
{
workgroupMemoryExplicitLayout = workgroupMemoryExplicitLayout_;
return *this;
}
- PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setWorkgroupMemoryExplicitLayoutScalarBlockLayout(
- VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
+ setWorkgroupMemoryExplicitLayoutScalarBlockLayout(
+ VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayoutScalarBlockLayout_ ) VULKAN_HPP_NOEXCEPT
{
workgroupMemoryExplicitLayoutScalarBlockLayout = workgroupMemoryExplicitLayoutScalarBlockLayout_;
return *this;
}
- PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setWorkgroupMemoryExplicitLayout8BitAccess(
- VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
+ setWorkgroupMemoryExplicitLayout8BitAccess(
+ VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
workgroupMemoryExplicitLayout8BitAccess = workgroupMemoryExplicitLayout8BitAccess_;
return *this;
}
- PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR & setWorkgroupMemoryExplicitLayout16BitAccess(
- VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &
+ setWorkgroupMemoryExplicitLayout16BitAccess(
+ VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess_ ) VULKAN_HPP_NOEXCEPT
{
workgroupMemoryExplicitLayout16BitAccess = workgroupMemoryExplicitLayout16BitAccess_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *>( this );
}
- operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ workgroupMemoryExplicitLayout,
+ workgroupMemoryExplicitLayoutScalarBlockLayout,
+ workgroupMemoryExplicitLayout8BitAccess,
+ workgroupMemoryExplicitLayout16BitAccess );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & ) const = default;
#else
bool operator==( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( workgroupMemoryExplicitLayout == rhs.workgroupMemoryExplicitLayout ) &&
( workgroupMemoryExplicitLayoutScalarBlockLayout == rhs.workgroupMemoryExplicitLayoutScalarBlockLayout ) &&
( workgroupMemoryExplicitLayout8BitAccess == rhs.workgroupMemoryExplicitLayout8BitAccess ) &&
( workgroupMemoryExplicitLayout16BitAccess == rhs.workgroupMemoryExplicitLayout16BitAccess );
+# endif
}
bool operator!=( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52480,11 +71450,16 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout8BitAccess = {};
VULKAN_HPP_NAMESPACE::Bool32 workgroupMemoryExplicitLayout16BitAccess = {};
};
- static_assert( sizeof( PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ) ==
+ sizeof( VkPhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>::value,
+ "PhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceWorkgroupMemoryExplicitLayoutFeaturesKHR>
@@ -52494,7 +71469,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT;
@@ -52514,8 +71491,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &
- operator=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &
+ operator=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &
operator=( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -52525,13 +71502,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &
setYcbcr2plane444Formats( VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats_ ) VULKAN_HPP_NOEXCEPT
{
ycbcr2plane444Formats = ycbcr2plane444Formats_;
@@ -52539,22 +71517,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, ycbcr2plane444Formats );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcr2plane444Formats == rhs.ycbcr2plane444Formats );
+# endif
}
bool operator!=( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52568,11 +71562,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 ycbcr2plane444Formats = {};
};
- static_assert( sizeof( PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>::value,
+ "PhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceYcbcr2Plane444FormatsFeaturesEXT>
@@ -52582,7 +71580,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PhysicalDeviceYcbcrImageArraysFeaturesEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceYcbcrImageArraysFeaturesEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT;
@@ -52601,8 +71601,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT &
- operator=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceYcbcrImageArraysFeaturesEXT &
+ operator=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PhysicalDeviceYcbcrImageArraysFeaturesEXT &
operator=( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -52612,36 +71612,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceYcbcrImageArraysFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceYcbcrImageArraysFeaturesEXT &
- setYcbcrImageArrays( VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceYcbcrImageArraysFeaturesEXT &
+ setYcbcrImageArrays( VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays_ ) VULKAN_HPP_NOEXCEPT
{
ycbcrImageArrays = ycbcrImageArrays_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *>( this );
}
- operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceYcbcrImageArraysFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, ycbcrImageArrays );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & ) const = default;
#else
bool operator==( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ycbcrImageArrays == rhs.ycbcrImageArrays );
+# endif
}
bool operator!=( PhysicalDeviceYcbcrImageArraysFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52655,11 +71671,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 ycbcrImageArrays = {};
};
- static_assert( sizeof( PhysicalDeviceYcbcrImageArraysFeaturesEXT ) ==
- sizeof( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceYcbcrImageArraysFeaturesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT ) ==
+ sizeof( VkPhysicalDeviceYcbcrImageArraysFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PhysicalDeviceYcbcrImageArraysFeaturesEXT>::value,
+ "PhysicalDeviceYcbcrImageArraysFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePhysicalDeviceYcbcrImageArraysFeaturesEXT>
@@ -52667,100 +71687,127 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PhysicalDeviceYcbcrImageArraysFeaturesEXT;
};
- struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR
+ struct PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
+ StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR(
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(
VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ = {} ) VULKAN_HPP_NOEXCEPT
: shaderZeroInitializeWorkgroupMemory( shaderZeroInitializeWorkgroupMemory_ )
{}
- VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR(
- PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(
+ PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR(
- VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR(
- *reinterpret_cast<PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const *>( &rhs ) )
+ PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(
+ VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures(
+ *reinterpret_cast<PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR &
- operator=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &
+ operator=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR &
- operator=( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &
+ operator=( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) VULKAN_HPP_NOEXCEPT
{
*this =
- *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const *>( &rhs );
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &
+ setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR & setShaderZeroInitializeWorkgroupMemory(
- VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &
+ setShaderZeroInitializeWorkgroupMemory( VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory_ )
+ VULKAN_HPP_NOEXCEPT
{
shaderZeroInitializeWorkgroupMemory = shaderZeroInitializeWorkgroupMemory_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *>( this );
+ }
+
+ explicit operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR *>( this );
+ return *reinterpret_cast<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures *>( this );
}
- operator VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR *>( this );
+ return std::tie( sType, pNext, shaderZeroInitializeWorkgroupMemory );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & ) const = default;
+ auto operator<=>( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & ) const = default;
#else
- bool operator==( PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shaderZeroInitializeWorkgroupMemory == rhs.shaderZeroInitializeWorkgroupMemory );
+# endif
}
- bool operator!=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 shaderZeroInitializeWorkgroupMemory = {};
};
- static_assert( sizeof( PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR ) ==
- sizeof( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures ) ==
+ sizeof( VkPhysicalDeviceZeroInitializeWorkgroupMemoryFeatures ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>::value,
+ "PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR>
+ struct CppType<StructureType, StructureType::ePhysicalDeviceZeroInitializeWorkgroupMemoryFeatures>
{
- using Type = PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR;
+ using Type = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
};
+ using PhysicalDeviceZeroInitializeWorkgroupMemoryFeaturesKHR = PhysicalDeviceZeroInitializeWorkgroupMemoryFeatures;
struct PipelineCacheCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCacheCreateInfo;
+ using NativeType = VkPipelineCacheCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineCacheCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineCacheCreateInfo( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ = {},
@@ -52786,8 +71833,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo &
- operator=( PipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCacheCreateInfo & operator=( PipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineCacheCreateInfo & operator=( VkPipelineCacheCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -52796,25 +71842,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCacheCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineCacheCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineCacheCreateInfo & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT
{
initialDataSize = initialDataSize_;
return *this;
}
- PipelineCacheCreateInfo & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheCreateInfo & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT
{
pInitialData = pInitialData_;
return *this;
@@ -52832,23 +71879,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCacheCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCacheCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineCacheCreateInfo *>( this );
}
- operator VkPipelineCacheCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCacheCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineCacheCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCacheCreateFlags const &,
+ size_t const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, initialDataSize, pInitialData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineCacheCreateInfo const & ) const = default;
#else
bool operator==( PipelineCacheCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( initialDataSize == rhs.initialDataSize ) && ( pInitialData == rhs.pInitialData );
+# endif
}
bool operator!=( PipelineCacheCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52864,9 +71931,13 @@ namespace VULKAN_HPP_NAMESPACE
size_t initialDataSize = {};
const void * pInitialData = {};
};
- static_assert( sizeof( PipelineCacheCreateInfo ) == sizeof( VkPipelineCacheCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCacheCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo ) ==
+ sizeof( VkPipelineCacheCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCacheCreateInfo>::value,
+ "PipelineCacheCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineCacheCreateInfo>
@@ -52876,6 +71947,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineCacheHeaderVersionOne
{
+ using NativeType = VkPipelineCacheHeaderVersionOne;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne(
uint32_t headerSize_ = {},
@@ -52899,8 +71972,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne &
- operator=( PipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCacheHeaderVersionOne &
+ operator=( PipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineCacheHeaderVersionOne & operator=( VkPipelineCacheHeaderVersionOne const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -52909,32 +71982,32 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCacheHeaderVersionOne & setHeaderSize( uint32_t headerSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setHeaderSize( uint32_t headerSize_ ) VULKAN_HPP_NOEXCEPT
{
headerSize = headerSize_;
return *this;
}
- PipelineCacheHeaderVersionOne &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne &
setHeaderVersion( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion headerVersion_ ) VULKAN_HPP_NOEXCEPT
{
headerVersion = headerVersion_;
return *this;
}
- PipelineCacheHeaderVersionOne & setVendorID( uint32_t vendorID_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setVendorID( uint32_t vendorID_ ) VULKAN_HPP_NOEXCEPT
{
vendorID = vendorID_;
return *this;
}
- PipelineCacheHeaderVersionOne & setDeviceID( uint32_t deviceID_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne & setDeviceID( uint32_t deviceID_ ) VULKAN_HPP_NOEXCEPT
{
deviceID = deviceID_;
return *this;
}
- PipelineCacheHeaderVersionOne &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCacheHeaderVersionOne &
setPipelineCacheUUID( std::array<uint8_t, VK_UUID_SIZE> pipelineCacheUUID_ ) VULKAN_HPP_NOEXCEPT
{
pipelineCacheUUID = pipelineCacheUUID_;
@@ -52942,24 +72015,44 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCacheHeaderVersionOne const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCacheHeaderVersionOne const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineCacheHeaderVersionOne *>( this );
}
- operator VkPipelineCacheHeaderVersionOne &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCacheHeaderVersionOne &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineCacheHeaderVersionOne *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersion const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( headerSize, headerVersion, vendorID, deviceID, pipelineCacheUUID );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineCacheHeaderVersionOne const & ) const = default;
#else
bool operator==( PipelineCacheHeaderVersionOne const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( headerSize == rhs.headerSize ) && ( headerVersion == rhs.headerVersion ) &&
( vendorID == rhs.vendorID ) && ( deviceID == rhs.deviceID ) &&
( pipelineCacheUUID == rhs.pipelineCacheUUID );
+# endif
}
bool operator!=( PipelineCacheHeaderVersionOne const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -52976,14 +72069,20 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t deviceID = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint8_t, VK_UUID_SIZE> pipelineCacheUUID = {};
};
- static_assert( sizeof( PipelineCacheHeaderVersionOne ) == sizeof( VkPipelineCacheHeaderVersionOne ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCacheHeaderVersionOne>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne ) ==
+ sizeof( VkPipelineCacheHeaderVersionOne ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCacheHeaderVersionOne>::value,
+ "PipelineCacheHeaderVersionOne is not nothrow_move_constructible!" );
struct PipelineColorBlendAdvancedStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineColorBlendAdvancedStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT;
@@ -53008,8 +72107,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT &
- operator=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineColorBlendAdvancedStateCreateInfoEXT &
+ operator=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineColorBlendAdvancedStateCreateInfoEXT &
operator=( VkPipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -53019,51 +72118,72 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineColorBlendAdvancedStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineColorBlendAdvancedStateCreateInfoEXT &
- setSrcPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT &
+ setSrcPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 srcPremultiplied_ ) VULKAN_HPP_NOEXCEPT
{
srcPremultiplied = srcPremultiplied_;
return *this;
}
- PipelineColorBlendAdvancedStateCreateInfoEXT &
- setDstPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT &
+ setDstPremultiplied( VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied_ ) VULKAN_HPP_NOEXCEPT
{
dstPremultiplied = dstPremultiplied_;
return *this;
}
- PipelineColorBlendAdvancedStateCreateInfoEXT &
- setBlendOverlap( VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorBlendAdvancedStateCreateInfoEXT &
+ setBlendOverlap( VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap_ ) VULKAN_HPP_NOEXCEPT
{
blendOverlap = blendOverlap_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineColorBlendAdvancedStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorBlendAdvancedStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT *>( this );
}
- operator VkPipelineColorBlendAdvancedStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorBlendAdvancedStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::BlendOverlapEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcPremultiplied, dstPremultiplied, blendOverlap );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineColorBlendAdvancedStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcPremultiplied == rhs.srcPremultiplied ) &&
( dstPremultiplied == rhs.dstPremultiplied ) && ( blendOverlap == rhs.blendOverlap );
+# endif
}
bool operator!=( PipelineColorBlendAdvancedStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53079,11 +72199,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 dstPremultiplied = {};
VULKAN_HPP_NAMESPACE::BlendOverlapEXT blendOverlap = VULKAN_HPP_NAMESPACE::BlendOverlapEXT::eUncorrelated;
};
- static_assert( sizeof( PipelineColorBlendAdvancedStateCreateInfoEXT ) ==
- sizeof( VkPipelineColorBlendAdvancedStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineColorBlendAdvancedStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT ) ==
+ sizeof( VkPipelineColorBlendAdvancedStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineColorBlendAdvancedStateCreateInfoEXT>::value,
+ "PipelineColorBlendAdvancedStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineColorBlendAdvancedStateCreateInfoEXT>
@@ -53093,8 +72217,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineColorWriteCreateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorWriteCreateInfoEXT;
+ using NativeType = VkPipelineColorWriteCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineColorWriteCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineColorWriteCreateInfoEXT(
@@ -53120,8 +72246,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT &
- operator=( PipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineColorWriteCreateInfoEXT &
+ operator=( PipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineColorWriteCreateInfoEXT & operator=( VkPipelineColorWriteCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -53130,19 +72256,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineColorWriteCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineColorWriteCreateInfoEXT & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT &
+ setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentCount = attachmentCount_;
return *this;
}
- PipelineColorWriteCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineColorWriteCreateInfoEXT &
setPColorWriteEnables( const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables_ ) VULKAN_HPP_NOEXCEPT
{
pColorWriteEnables = pColorWriteEnables_;
@@ -53161,23 +72288,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineColorWriteCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorWriteCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineColorWriteCreateInfoEXT *>( this );
}
- operator VkPipelineColorWriteCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineColorWriteCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineColorWriteCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Bool32 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, attachmentCount, pColorWriteEnables );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineColorWriteCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineColorWriteCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentCount == rhs.attachmentCount ) &&
( pColorWriteEnables == rhs.pColorWriteEnables );
+# endif
}
bool operator!=( PipelineColorWriteCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53192,10 +72338,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t attachmentCount = {};
const VULKAN_HPP_NAMESPACE::Bool32 * pColorWriteEnables = {};
};
- static_assert( sizeof( PipelineColorWriteCreateInfoEXT ) == sizeof( VkPipelineColorWriteCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineColorWriteCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT ) ==
+ sizeof( VkPipelineColorWriteCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineColorWriteCreateInfoEXT>::value,
+ "PipelineColorWriteCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineColorWriteCreateInfoEXT>
@@ -53205,7 +72355,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineCompilerControlCreateInfoAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineCompilerControlCreateInfoAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineCompilerControlCreateInfoAMD;
@@ -53223,8 +72375,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD &
- operator=( PipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCompilerControlCreateInfoAMD &
+ operator=( PipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineCompilerControlCreateInfoAMD &
operator=( VkPipelineCompilerControlCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -53234,13 +72386,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCompilerControlCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineCompilerControlCreateInfoAMD & setCompilerControlFlags(
+ VULKAN_HPP_CONSTEXPR_14 PipelineCompilerControlCreateInfoAMD & setCompilerControlFlags(
VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags_ ) VULKAN_HPP_NOEXCEPT
{
compilerControlFlags = compilerControlFlags_;
@@ -53248,22 +72400,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCompilerControlCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCompilerControlCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD *>( this );
}
- operator VkPipelineCompilerControlCreateInfoAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCompilerControlCreateInfoAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineCompilerControlCreateInfoAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, compilerControlFlags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineCompilerControlCreateInfoAMD const & ) const = default;
#else
bool operator==( PipelineCompilerControlCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( compilerControlFlags == rhs.compilerControlFlags );
+# endif
}
bool operator!=( PipelineCompilerControlCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53277,10 +72447,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::PipelineCompilerControlFlagsAMD compilerControlFlags = {};
};
- static_assert( sizeof( PipelineCompilerControlCreateInfoAMD ) == sizeof( VkPipelineCompilerControlCreateInfoAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCompilerControlCreateInfoAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD ) ==
+ sizeof( VkPipelineCompilerControlCreateInfoAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCompilerControlCreateInfoAMD>::value,
+ "PipelineCompilerControlCreateInfoAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineCompilerControlCreateInfoAMD>
@@ -53290,7 +72464,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineCoverageModulationStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineCoverageModulationStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineCoverageModulationStateCreateInfoNV;
@@ -53333,8 +72509,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV &
- operator=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCoverageModulationStateCreateInfoNV &
+ operator=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineCoverageModulationStateCreateInfoNV &
operator=( VkPipelineCoverageModulationStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -53344,42 +72520,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCoverageModulationStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineCoverageModulationStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineCoverageModulationStateCreateInfoNV & setCoverageModulationMode(
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & setCoverageModulationMode(
VULKAN_HPP_NAMESPACE::CoverageModulationModeNV coverageModulationMode_ ) VULKAN_HPP_NOEXCEPT
{
coverageModulationMode = coverageModulationMode_;
return *this;
}
- PipelineCoverageModulationStateCreateInfoNV & setCoverageModulationTableEnable(
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV & setCoverageModulationTableEnable(
VULKAN_HPP_NAMESPACE::Bool32 coverageModulationTableEnable_ ) VULKAN_HPP_NOEXCEPT
{
coverageModulationTableEnable = coverageModulationTableEnable_;
return *this;
}
- PipelineCoverageModulationStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV &
setCoverageModulationTableCount( uint32_t coverageModulationTableCount_ ) VULKAN_HPP_NOEXCEPT
{
coverageModulationTableCount = coverageModulationTableCount_;
return *this;
}
- PipelineCoverageModulationStateCreateInfoNV &
- setPCoverageModulationTable( const float * pCoverageModulationTable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageModulationStateCreateInfoNV &
+ setPCoverageModulationTable( const float * pCoverageModulationTable_ ) VULKAN_HPP_NOEXCEPT
{
pCoverageModulationTable = pCoverageModulationTable_;
return *this;
@@ -53396,26 +72573,54 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCoverageModulationStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCoverageModulationStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV *>( this );
}
- operator VkPipelineCoverageModulationStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCoverageModulationStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::CoverageModulationModeNV const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ const float * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ coverageModulationMode,
+ coverageModulationTableEnable,
+ coverageModulationTableCount,
+ pCoverageModulationTable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineCoverageModulationStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineCoverageModulationStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( coverageModulationMode == rhs.coverageModulationMode ) &&
( coverageModulationTableEnable == rhs.coverageModulationTableEnable ) &&
( coverageModulationTableCount == rhs.coverageModulationTableCount ) &&
( pCoverageModulationTable == rhs.pCoverageModulationTable );
+# endif
}
bool operator!=( PipelineCoverageModulationStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53434,11 +72639,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t coverageModulationTableCount = {};
const float * pCoverageModulationTable = {};
};
- static_assert( sizeof( PipelineCoverageModulationStateCreateInfoNV ) ==
- sizeof( VkPipelineCoverageModulationStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCoverageModulationStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV ) ==
+ sizeof( VkPipelineCoverageModulationStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCoverageModulationStateCreateInfoNV>::value,
+ "PipelineCoverageModulationStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineCoverageModulationStateCreateInfoNV>
@@ -53448,7 +72657,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineCoverageReductionStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineCoverageReductionStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineCoverageReductionStateCreateInfoNV;
@@ -53471,8 +72682,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV &
- operator=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCoverageReductionStateCreateInfoNV &
+ operator=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineCoverageReductionStateCreateInfoNV &
operator=( VkPipelineCoverageReductionStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -53482,20 +72693,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCoverageReductionStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineCoverageReductionStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineCoverageReductionStateCreateInfoNV & setCoverageReductionMode(
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageReductionStateCreateInfoNV & setCoverageReductionMode(
VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode_ ) VULKAN_HPP_NOEXCEPT
{
coverageReductionMode = coverageReductionMode_;
@@ -53503,23 +72715,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCoverageReductionStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCoverageReductionStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV *>( this );
}
- operator VkPipelineCoverageReductionStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCoverageReductionStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineCoverageReductionStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::CoverageReductionModeNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, coverageReductionMode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineCoverageReductionStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineCoverageReductionStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( coverageReductionMode == rhs.coverageReductionMode );
+# endif
}
bool operator!=( PipelineCoverageReductionStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53535,11 +72766,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CoverageReductionModeNV coverageReductionMode =
VULKAN_HPP_NAMESPACE::CoverageReductionModeNV::eMerge;
};
- static_assert( sizeof( PipelineCoverageReductionStateCreateInfoNV ) ==
- sizeof( VkPipelineCoverageReductionStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCoverageReductionStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV ) ==
+ sizeof( VkPipelineCoverageReductionStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCoverageReductionStateCreateInfoNV>::value,
+ "PipelineCoverageReductionStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineCoverageReductionStateCreateInfoNV>
@@ -53549,7 +72784,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineCoverageToColorStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineCoverageToColorStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineCoverageToColorStateCreateInfoNV;
@@ -53573,8 +72810,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV &
- operator=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCoverageToColorStateCreateInfoNV &
+ operator=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineCoverageToColorStateCreateInfoNV &
operator=( VkPipelineCoverageToColorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -53584,52 +72821,73 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCoverageToColorStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineCoverageToColorStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineCoverageToColorStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV &
setCoverageToColorEnable( VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable_ ) VULKAN_HPP_NOEXCEPT
{
coverageToColorEnable = coverageToColorEnable_;
return *this;
}
- PipelineCoverageToColorStateCreateInfoNV &
- setCoverageToColorLocation( uint32_t coverageToColorLocation_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCoverageToColorStateCreateInfoNV &
+ setCoverageToColorLocation( uint32_t coverageToColorLocation_ ) VULKAN_HPP_NOEXCEPT
{
coverageToColorLocation = coverageToColorLocation_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCoverageToColorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCoverageToColorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV *>( this );
}
- operator VkPipelineCoverageToColorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCoverageToColorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateFlagsNV const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, coverageToColorEnable, coverageToColorLocation );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineCoverageToColorStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineCoverageToColorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( coverageToColorEnable == rhs.coverageToColorEnable ) &&
( coverageToColorLocation == rhs.coverageToColorLocation );
+# endif
}
bool operator!=( PipelineCoverageToColorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53645,11 +72903,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 coverageToColorEnable = {};
uint32_t coverageToColorLocation = {};
};
- static_assert( sizeof( PipelineCoverageToColorStateCreateInfoNV ) ==
- sizeof( VkPipelineCoverageToColorStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCoverageToColorStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV ) ==
+ sizeof( VkPipelineCoverageToColorStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCoverageToColorStateCreateInfoNV>::value,
+ "PipelineCoverageToColorStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineCoverageToColorStateCreateInfoNV>
@@ -53657,94 +72919,114 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PipelineCoverageToColorStateCreateInfoNV;
};
- struct PipelineCreationFeedbackEXT
+ struct PipelineCreationFeedback
{
+ using NativeType = VkPipelineCreationFeedback;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR
- PipelineCreationFeedbackEXT( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlagsEXT flags_ = {},
- uint64_t duration_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR PipelineCreationFeedback( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags flags_ = {},
+ uint64_t duration_ = {} ) VULKAN_HPP_NOEXCEPT
: flags( flags_ )
, duration( duration_ )
{}
- VULKAN_HPP_CONSTEXPR
- PipelineCreationFeedbackEXT( PipelineCreationFeedbackEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PipelineCreationFeedback( PipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PipelineCreationFeedbackEXT( VkPipelineCreationFeedbackEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PipelineCreationFeedbackEXT( *reinterpret_cast<PipelineCreationFeedbackEXT const *>( &rhs ) )
+ PipelineCreationFeedback( VkPipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PipelineCreationFeedback( *reinterpret_cast<PipelineCreationFeedback const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackEXT &
- operator=( PipelineCreationFeedbackEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCreationFeedback & operator=( PipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PipelineCreationFeedbackEXT & operator=( VkPipelineCreationFeedbackEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PipelineCreationFeedback & operator=( VkPipelineCreationFeedback const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineCreationFeedback const *>( &rhs );
return *this;
}
- operator VkPipelineCreationFeedbackEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCreationFeedback const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPipelineCreationFeedbackEXT *>( this );
+ return *reinterpret_cast<const VkPipelineCreationFeedback *>( this );
}
- operator VkPipelineCreationFeedbackEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCreationFeedback &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPipelineCreationFeedbackEXT *>( this );
+ return *reinterpret_cast<VkPipelineCreationFeedback *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( flags, duration );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PipelineCreationFeedbackEXT const & ) const = default;
+ auto operator<=>( PipelineCreationFeedback const & ) const = default;
#else
- bool operator==( PipelineCreationFeedbackEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PipelineCreationFeedback const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( flags == rhs.flags ) && ( duration == rhs.duration );
+# endif
}
- bool operator!=( PipelineCreationFeedbackEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PipelineCreationFeedback const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlagsEXT flags = {};
- uint64_t duration = {};
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackFlags flags = {};
+ uint64_t duration = {};
};
- static_assert( sizeof( PipelineCreationFeedbackEXT ) == sizeof( VkPipelineCreationFeedbackEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCreationFeedbackEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCreationFeedback ) ==
+ sizeof( VkPipelineCreationFeedback ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCreationFeedback>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCreationFeedback>::value,
+ "PipelineCreationFeedback is not nothrow_move_constructible!" );
+ using PipelineCreationFeedbackEXT = PipelineCreationFeedback;
- struct PipelineCreationFeedbackCreateInfoEXT
+ struct PipelineCreationFeedbackCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineCreationFeedbackCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePipelineCreationFeedbackCreateInfoEXT;
+ StructureType::ePipelineCreationFeedbackCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfoEXT(
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineCreationFeedback_ = {},
- uint32_t pipelineStageCreationFeedbackCount_ = {},
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineStageCreationFeedbacks_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfo(
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_ = {},
+ uint32_t pipelineStageCreationFeedbackCount_ = {},
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks_ = {} ) VULKAN_HPP_NOEXCEPT
: pPipelineCreationFeedback( pPipelineCreationFeedback_ )
, pipelineStageCreationFeedbackCount( pipelineStageCreationFeedbackCount_ )
, pPipelineStageCreationFeedbacks( pPipelineStageCreationFeedbacks_ )
{}
- VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfoEXT( PipelineCreationFeedbackCreateInfoEXT const & rhs )
+ VULKAN_HPP_CONSTEXPR PipelineCreationFeedbackCreateInfo( PipelineCreationFeedbackCreateInfo const & rhs )
VULKAN_HPP_NOEXCEPT = default;
- PipelineCreationFeedbackCreateInfoEXT( VkPipelineCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PipelineCreationFeedbackCreateInfoEXT(
- *reinterpret_cast<PipelineCreationFeedbackCreateInfoEXT const *>( &rhs ) )
+ PipelineCreationFeedbackCreateInfo( VkPipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PipelineCreationFeedbackCreateInfo( *reinterpret_cast<PipelineCreationFeedbackCreateInfo const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- PipelineCreationFeedbackCreateInfoEXT(
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineCreationFeedback_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT> const &
+ PipelineCreationFeedbackCreateInfo(
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<VULKAN_HPP_NAMESPACE::PipelineCreationFeedback> const &
pipelineStageCreationFeedbacks_ )
: pPipelineCreationFeedback( pPipelineCreationFeedback_ )
, pipelineStageCreationFeedbackCount( static_cast<uint32_t>( pipelineStageCreationFeedbacks_.size() ) )
@@ -53753,47 +73035,47 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfoEXT &
- operator=( PipelineCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineCreationFeedbackCreateInfo &
+ operator=( PipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PipelineCreationFeedbackCreateInfoEXT &
- operator=( VkPipelineCreationFeedbackCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PipelineCreationFeedbackCreateInfo &
+ operator=( VkPipelineCreationFeedbackCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfoEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineCreationFeedbackCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineCreationFeedbackCreateInfoEXT & setPPipelineCreationFeedback(
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineCreationFeedback_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & setPPipelineCreationFeedback(
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback_ ) VULKAN_HPP_NOEXCEPT
{
pPipelineCreationFeedback = pPipelineCreationFeedback_;
return *this;
}
- PipelineCreationFeedbackCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo &
setPipelineStageCreationFeedbackCount( uint32_t pipelineStageCreationFeedbackCount_ ) VULKAN_HPP_NOEXCEPT
{
pipelineStageCreationFeedbackCount = pipelineStageCreationFeedbackCount_;
return *this;
}
- PipelineCreationFeedbackCreateInfoEXT & setPPipelineStageCreationFeedbacks(
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineStageCreationFeedbacks_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineCreationFeedbackCreateInfo & setPPipelineStageCreationFeedbacks(
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks_ ) VULKAN_HPP_NOEXCEPT
{
pPipelineStageCreationFeedbacks = pPipelineStageCreationFeedbacks_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- PipelineCreationFeedbackCreateInfoEXT & setPipelineStageCreationFeedbacks(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT> const &
+ PipelineCreationFeedbackCreateInfo & setPipelineStageCreationFeedbacks(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<VULKAN_HPP_NAMESPACE::PipelineCreationFeedback> const &
pipelineStageCreationFeedbacks_ ) VULKAN_HPP_NOEXCEPT
{
pipelineStageCreationFeedbackCount = static_cast<uint32_t>( pipelineStageCreationFeedbacks_.size() );
@@ -53803,54 +73085,82 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineCreationFeedbackCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineCreationFeedbackCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPipelineCreationFeedbackCreateInfo *>( this );
+ }
+
+ explicit operator VkPipelineCreationFeedbackCreateInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT *>( this );
+ return *reinterpret_cast<VkPipelineCreationFeedbackCreateInfo *>( this );
}
- operator VkPipelineCreationFeedbackCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPipelineCreationFeedbackCreateInfoEXT *>( this );
+ return std::tie(
+ sType, pNext, pPipelineCreationFeedback, pipelineStageCreationFeedbackCount, pPipelineStageCreationFeedbacks );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PipelineCreationFeedbackCreateInfoEXT const & ) const = default;
+ auto operator<=>( PipelineCreationFeedbackCreateInfo const & ) const = default;
#else
- bool operator==( PipelineCreationFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PipelineCreationFeedbackCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( pPipelineCreationFeedback == rhs.pPipelineCreationFeedback ) &&
( pipelineStageCreationFeedbackCount == rhs.pipelineStageCreationFeedbackCount ) &&
( pPipelineStageCreationFeedbacks == rhs.pPipelineStageCreationFeedbacks );
+# endif
}
- bool operator!=( PipelineCreationFeedbackCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PipelineCreationFeedbackCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCreationFeedbackCreateInfoEXT;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineCreationFeedback = {};
- uint32_t pipelineStageCreationFeedbackCount = {};
- VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackEXT * pPipelineStageCreationFeedbacks = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineCreationFeedbackCreateInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineCreationFeedback = {};
+ uint32_t pipelineStageCreationFeedbackCount = {};
+ VULKAN_HPP_NAMESPACE::PipelineCreationFeedback * pPipelineStageCreationFeedbacks = {};
};
- static_assert( sizeof( PipelineCreationFeedbackCreateInfoEXT ) == sizeof( VkPipelineCreationFeedbackCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineCreationFeedbackCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo ) ==
+ sizeof( VkPipelineCreationFeedbackCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineCreationFeedbackCreateInfo>::value,
+ "PipelineCreationFeedbackCreateInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePipelineCreationFeedbackCreateInfoEXT>
+ struct CppType<StructureType, StructureType::ePipelineCreationFeedbackCreateInfo>
{
- using Type = PipelineCreationFeedbackCreateInfoEXT;
+ using Type = PipelineCreationFeedbackCreateInfo;
};
+ using PipelineCreationFeedbackCreateInfoEXT = PipelineCreationFeedbackCreateInfo;
struct PipelineDiscardRectangleStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineDiscardRectangleStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineDiscardRectangleStateCreateInfoEXT;
@@ -53889,8 +73199,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT &
- operator=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineDiscardRectangleStateCreateInfoEXT &
+ operator=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineDiscardRectangleStateCreateInfoEXT &
operator=( VkPipelineDiscardRectangleStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -53900,34 +73210,35 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineDiscardRectangleStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineDiscardRectangleStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT &
setFlags( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineDiscardRectangleStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT &
setDiscardRectangleMode( VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT discardRectangleMode_ ) VULKAN_HPP_NOEXCEPT
{
discardRectangleMode = discardRectangleMode_;
return *this;
}
- PipelineDiscardRectangleStateCreateInfoEXT &
- setDiscardRectangleCount( uint32_t discardRectangleCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT &
+ setDiscardRectangleCount( uint32_t discardRectangleCount_ ) VULKAN_HPP_NOEXCEPT
{
discardRectangleCount = discardRectangleCount_;
return *this;
}
- PipelineDiscardRectangleStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineDiscardRectangleStateCreateInfoEXT &
setPDiscardRectangles( const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles_ ) VULKAN_HPP_NOEXCEPT
{
pDiscardRectangles = pDiscardRectangles_;
@@ -53946,24 +73257,45 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineDiscardRectangleStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineDiscardRectangleStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT *>( this );
}
- operator VkPipelineDiscardRectangleStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineDiscardRectangleStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::DiscardRectangleModeEXT const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Rect2D * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, discardRectangleMode, discardRectangleCount, pDiscardRectangles );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineDiscardRectangleStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( discardRectangleMode == rhs.discardRectangleMode ) &&
( discardRectangleCount == rhs.discardRectangleCount ) && ( pDiscardRectangles == rhs.pDiscardRectangles );
+# endif
}
bool operator!=( PipelineDiscardRectangleStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -53981,11 +73313,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t discardRectangleCount = {};
const VULKAN_HPP_NAMESPACE::Rect2D * pDiscardRectangles = {};
};
- static_assert( sizeof( PipelineDiscardRectangleStateCreateInfoEXT ) ==
- sizeof( VkPipelineDiscardRectangleStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineDiscardRectangleStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT ) ==
+ sizeof( VkPipelineDiscardRectangleStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineDiscardRectangleStateCreateInfoEXT>::value,
+ "PipelineDiscardRectangleStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineDiscardRectangleStateCreateInfoEXT>
@@ -53995,8 +73331,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineExecutableInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableInfoKHR;
+ using NativeType = VkPipelineExecutableInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineExecutableInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {},
@@ -54013,8 +73351,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR &
- operator=( PipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineExecutableInfoKHR & operator=( PipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineExecutableInfoKHR & operator=( VkPipelineExecutableInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -54023,42 +73360,63 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineExecutableInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineExecutableInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR &
+ setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
{
pipeline = pipeline_;
return *this;
}
- PipelineExecutableInfoKHR & setExecutableIndex( uint32_t executableIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInfoKHR &
+ setExecutableIndex( uint32_t executableIndex_ ) VULKAN_HPP_NOEXCEPT
{
executableIndex = executableIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineExecutableInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutableInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineExecutableInfoKHR *>( this );
}
- operator VkPipelineExecutableInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutableInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineExecutableInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pipeline, executableIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineExecutableInfoKHR const & ) const = default;
#else
bool operator==( PipelineExecutableInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline ) &&
( executableIndex == rhs.executableIndex );
+# endif
}
bool operator!=( PipelineExecutableInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54073,10 +73431,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Pipeline pipeline = {};
uint32_t executableIndex = {};
};
- static_assert( sizeof( PipelineExecutableInfoKHR ) == sizeof( VkPipelineExecutableInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineExecutableInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR ) ==
+ sizeof( VkPipelineExecutableInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineExecutableInfoKHR>::value,
+ "PipelineExecutableInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineExecutableInfoKHR>
@@ -54086,7 +73447,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineExecutableInternalRepresentationKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineExecutableInternalRepresentationKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineExecutableInternalRepresentationKHR;
@@ -54128,8 +73491,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineExecutableInternalRepresentationKHR &
- operator=( PipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineExecutableInternalRepresentationKHR &
+ operator=( PipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineExecutableInternalRepresentationKHR &
operator=( VkPipelineExecutableInternalRepresentationKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -54138,24 +73501,46 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPipelineExecutableInternalRepresentationKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutableInternalRepresentationKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineExecutableInternalRepresentationKHR *>( this );
}
- operator VkPipelineExecutableInternalRepresentationKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutableInternalRepresentationKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineExecutableInternalRepresentationKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ size_t const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, name, description, isText, dataSize, pData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineExecutableInternalRepresentationKHR const & ) const = default;
#else
bool operator==( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( name == rhs.name ) &&
( description == rhs.description ) && ( isText == rhs.isText ) && ( dataSize == rhs.dataSize ) &&
( pData == rhs.pData );
+# endif
}
bool operator!=( PipelineExecutableInternalRepresentationKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54173,11 +73558,15 @@ namespace VULKAN_HPP_NAMESPACE
size_t dataSize = {};
void * pData = {};
};
- static_assert( sizeof( PipelineExecutableInternalRepresentationKHR ) ==
- sizeof( VkPipelineExecutableInternalRepresentationKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineExecutableInternalRepresentationKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR ) ==
+ sizeof( VkPipelineExecutableInternalRepresentationKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineExecutableInternalRepresentationKHR>::value,
+ "PipelineExecutableInternalRepresentationKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineExecutableInternalRepresentationKHR>
@@ -54187,8 +73576,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineExecutablePropertiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutablePropertiesKHR;
+ using NativeType = VkPipelineExecutablePropertiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutablePropertiesKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
@@ -54210,8 +73601,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineExecutablePropertiesKHR &
- operator=( PipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineExecutablePropertiesKHR &
+ operator=( PipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineExecutablePropertiesKHR & operator=( VkPipelineExecutablePropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -54219,23 +73610,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPipelineExecutablePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutablePropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineExecutablePropertiesKHR *>( this );
}
- operator VkPipelineExecutablePropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutablePropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineExecutablePropertiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stages, name, description, subgroupSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineExecutablePropertiesKHR const & ) const = default;
#else
bool operator==( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( stages == rhs.stages ) && ( name == rhs.name ) &&
( description == rhs.description ) && ( subgroupSize == rhs.subgroupSize );
+# endif
}
bool operator!=( PipelineExecutablePropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54252,10 +73664,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> description = {};
uint32_t subgroupSize = {};
};
- static_assert( sizeof( PipelineExecutablePropertiesKHR ) == sizeof( VkPipelineExecutablePropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineExecutablePropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR ) ==
+ sizeof( VkPipelineExecutablePropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineExecutablePropertiesKHR>::value,
+ "PipelineExecutablePropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineExecutablePropertiesKHR>
@@ -54265,55 +73681,46 @@ namespace VULKAN_HPP_NAMESPACE
union PipelineExecutableStatisticValueKHR
{
+ using NativeType = VkPipelineExecutableStatisticValueKHR;
#if !defined( VULKAN_HPP_NO_UNION_CONSTRUCTORS )
- PipelineExecutableStatisticValueKHR( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR const & rhs )
- VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR ) );
- }
- PipelineExecutableStatisticValueKHR( VULKAN_HPP_NAMESPACE::Bool32 b32_ = {} ) : b32( b32_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( VULKAN_HPP_NAMESPACE::Bool32 b32_ = {} ) : b32( b32_ )
+ {}
- PipelineExecutableStatisticValueKHR( int64_t i64_ ) : i64( i64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( int64_t i64_ ) : i64( i64_ ) {}
- PipelineExecutableStatisticValueKHR( uint64_t u64_ ) : u64( u64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( uint64_t u64_ ) : u64( u64_ ) {}
- PipelineExecutableStatisticValueKHR( double f64_ ) : f64( f64_ ) {}
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR( double f64_ ) : f64( f64_ ) {}
#endif /*VULKAN_HPP_NO_UNION_CONSTRUCTORS*/
#if !defined( VULKAN_HPP_NO_UNION_SETTERS )
- PipelineExecutableStatisticValueKHR & setB32( VULKAN_HPP_NAMESPACE::Bool32 b32_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR &
+ setB32( VULKAN_HPP_NAMESPACE::Bool32 b32_ ) VULKAN_HPP_NOEXCEPT
{
b32 = b32_;
return *this;
}
- PipelineExecutableStatisticValueKHR & setI64( int64_t i64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setI64( int64_t i64_ ) VULKAN_HPP_NOEXCEPT
{
i64 = i64_;
return *this;
}
- PipelineExecutableStatisticValueKHR & setU64( uint64_t u64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setU64( uint64_t u64_ ) VULKAN_HPP_NOEXCEPT
{
u64 = u64_;
return *this;
}
- PipelineExecutableStatisticValueKHR & setF64( double f64_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticValueKHR & setF64( double f64_ ) VULKAN_HPP_NOEXCEPT
{
f64 = f64_;
return *this;
}
#endif /*VULKAN_HPP_NO_UNION_SETTERS*/
- VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR &
- operator=( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- {
- memcpy( static_cast<void *>( this ), &rhs, sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR ) );
- return *this;
- }
-
operator VkPipelineExecutableStatisticValueKHR const &() const
{
return *reinterpret_cast<const VkPipelineExecutableStatisticValueKHR *>( this );
@@ -54339,23 +73746,26 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineExecutableStatisticKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableStatisticKHR;
+ using NativeType = VkPipelineExecutableStatisticKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineExecutableStatisticKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- PipelineExecutableStatisticKHR( std::array<char, VK_MAX_DESCRIPTION_SIZE> const & name_ = {},
- std::array<char, VK_MAX_DESCRIPTION_SIZE> const & description_ = {},
- VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR format_ =
- VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32,
- VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value_ = {} )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineExecutableStatisticKHR(
+ std::array<char, VK_MAX_DESCRIPTION_SIZE> const & name_ = {},
+ std::array<char, VK_MAX_DESCRIPTION_SIZE> const & description_ = {},
+ VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR format_ =
+ VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32,
+ VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value_ = {} ) VULKAN_HPP_NOEXCEPT
: name( name_ )
, description( description_ )
, format( format_ )
, value( value_ )
{}
- PipelineExecutableStatisticKHR( PipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR_14
+ PipelineExecutableStatisticKHR( PipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineExecutableStatisticKHR( VkPipelineExecutableStatisticKHR const & rhs ) VULKAN_HPP_NOEXCEPT
: PipelineExecutableStatisticKHR( *reinterpret_cast<PipelineExecutableStatisticKHR const *>( &rhs ) )
@@ -54371,16 +73781,33 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkPipelineExecutableStatisticKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutableStatisticKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineExecutableStatisticKHR *>( this );
}
- operator VkPipelineExecutableStatisticKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineExecutableStatisticKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineExecutableStatisticKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<char, VK_MAX_DESCRIPTION_SIZE> const &,
+ VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR const &,
+ VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, name, description, format, value );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineExecutableStatisticKHR;
void * pNext = {};
@@ -54390,10 +73817,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticFormatKHR::eBool32;
VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticValueKHR value = {};
};
- static_assert( sizeof( PipelineExecutableStatisticKHR ) == sizeof( VkPipelineExecutableStatisticKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineExecutableStatisticKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR ) ==
+ sizeof( VkPipelineExecutableStatisticKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineExecutableStatisticKHR>::value,
+ "PipelineExecutableStatisticKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineExecutableStatisticKHR>
@@ -54403,7 +73834,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineFragmentShadingRateEnumStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineFragmentShadingRateEnumStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV;
@@ -54431,8 +73864,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV &
- operator=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineFragmentShadingRateEnumStateCreateInfoNV &
+ operator=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineFragmentShadingRateEnumStateCreateInfoNV &
operator=( VkPipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -54442,27 +73875,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineFragmentShadingRateEnumStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineFragmentShadingRateEnumStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV &
setShadingRateType( VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV shadingRateType_ ) VULKAN_HPP_NOEXCEPT
{
shadingRateType = shadingRateType_;
return *this;
}
- PipelineFragmentShadingRateEnumStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV &
setShadingRate( VULKAN_HPP_NAMESPACE::FragmentShadingRateNV shadingRate_ ) VULKAN_HPP_NOEXCEPT
{
shadingRate = shadingRate_;
return *this;
}
- PipelineFragmentShadingRateEnumStateCreateInfoNV & setCombinerOps(
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateEnumStateCreateInfoNV & setCombinerOps(
std::array<VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR, 2> combinerOps_ ) VULKAN_HPP_NOEXCEPT
{
combinerOps = combinerOps_;
@@ -54470,23 +73904,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV *>( this );
}
- operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineFragmentShadingRateEnumStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineFragmentShadingRateEnumStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::FragmentShadingRateTypeNV const &,
+ VULKAN_HPP_NAMESPACE::FragmentShadingRateNV const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR, 2> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shadingRateType, shadingRate, combinerOps );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineFragmentShadingRateEnumStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( shadingRateType == rhs.shadingRateType ) &&
( shadingRate == rhs.shadingRate ) && ( combinerOps == rhs.combinerOps );
+# endif
}
bool operator!=( PipelineFragmentShadingRateEnumStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54504,11 +73958,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::FragmentShadingRateNV::e1InvocationPerPixel;
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR, 2> combinerOps = {};
};
- static_assert( sizeof( PipelineFragmentShadingRateEnumStateCreateInfoNV ) ==
- sizeof( VkPipelineFragmentShadingRateEnumStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineFragmentShadingRateEnumStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV ) ==
+ sizeof( VkPipelineFragmentShadingRateEnumStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateEnumStateCreateInfoNV>::value,
+ "PipelineFragmentShadingRateEnumStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineFragmentShadingRateEnumStateCreateInfoNV>
@@ -54518,7 +73976,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineFragmentShadingRateStateCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineFragmentShadingRateStateCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR;
@@ -54542,8 +74002,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR &
- operator=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineFragmentShadingRateStateCreateInfoKHR &
+ operator=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineFragmentShadingRateStateCreateInfoKHR &
operator=( VkPipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -54553,20 +74013,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineFragmentShadingRateStateCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineFragmentShadingRateStateCreateInfoKHR &
- setFragmentSize( VULKAN_HPP_NAMESPACE::Extent2D const & fragmentSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR &
+ setFragmentSize( VULKAN_HPP_NAMESPACE::Extent2D const & fragmentSize_ ) VULKAN_HPP_NOEXCEPT
{
fragmentSize = fragmentSize_;
return *this;
}
- PipelineFragmentShadingRateStateCreateInfoKHR & setCombinerOps(
+ VULKAN_HPP_CONSTEXPR_14 PipelineFragmentShadingRateStateCreateInfoKHR & setCombinerOps(
std::array<VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR, 2> combinerOps_ ) VULKAN_HPP_NOEXCEPT
{
combinerOps = combinerOps_;
@@ -54574,23 +74035,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineFragmentShadingRateStateCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineFragmentShadingRateStateCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR *>( this );
}
- operator VkPipelineFragmentShadingRateStateCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineFragmentShadingRateStateCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineFragmentShadingRateStateCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR, 2> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentSize, combinerOps );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineFragmentShadingRateStateCreateInfoKHR const & ) const = default;
#else
bool operator==( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fragmentSize == rhs.fragmentSize ) &&
( combinerOps == rhs.combinerOps );
+# endif
}
bool operator!=( PipelineFragmentShadingRateStateCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54605,11 +74085,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent2D fragmentSize = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::FragmentShadingRateCombinerOpKHR, 2> combinerOps = {};
};
- static_assert( sizeof( PipelineFragmentShadingRateStateCreateInfoKHR ) ==
- sizeof( VkPipelineFragmentShadingRateStateCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineFragmentShadingRateStateCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR ) ==
+ sizeof( VkPipelineFragmentShadingRateStateCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineFragmentShadingRateStateCreateInfoKHR>::value,
+ "PipelineFragmentShadingRateStateCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineFragmentShadingRateStateCreateInfoKHR>
@@ -54619,8 +74103,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineInfoKHR;
+ using NativeType = VkPipelineInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineInfoKHR( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -54634,7 +74120,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR & operator=( PipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineInfoKHR & operator=( PipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineInfoKHR & operator=( VkPipelineInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -54643,35 +74129,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineInfoKHR & setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineInfoKHR &
+ setPipeline( VULKAN_HPP_NAMESPACE::Pipeline pipeline_ ) VULKAN_HPP_NOEXCEPT
{
pipeline = pipeline_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineInfoKHR *>( this );
}
- operator VkPipelineInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Pipeline const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pipeline );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineInfoKHR const & ) const = default;
#else
bool operator==( PipelineInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pipeline == rhs.pipeline );
+# endif
}
bool operator!=( PipelineInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54685,8 +74189,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Pipeline pipeline = {};
};
- static_assert( sizeof( PipelineInfoKHR ) == sizeof( VkPipelineInfoKHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineInfoKHR ) == sizeof( VkPipelineInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineInfoKHR>::value,
+ "PipelineInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineInfoKHR>
@@ -54696,6 +74204,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PushConstantRange
{
+ using NativeType = VkPushConstantRange;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PushConstantRange( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ = {},
uint32_t offset_ = {},
@@ -54712,8 +74222,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PushConstantRange &
- operator=( PushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PushConstantRange & operator=( PushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PushConstantRange & operator=( VkPushConstantRange const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -54722,41 +74231,58 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PushConstantRange & setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PushConstantRange &
+ setStageFlags( VULKAN_HPP_NAMESPACE::ShaderStageFlags stageFlags_ ) VULKAN_HPP_NOEXCEPT
{
stageFlags = stageFlags_;
return *this;
}
- PushConstantRange & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- PushConstantRange & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PushConstantRange & setSize( uint32_t size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPushConstantRange const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPushConstantRange const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPushConstantRange *>( this );
}
- operator VkPushConstantRange &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPushConstantRange &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPushConstantRange *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ShaderStageFlags const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( stageFlags, offset, size );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PushConstantRange const & ) const = default;
#else
bool operator==( PushConstantRange const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( stageFlags == rhs.stageFlags ) && ( offset == rhs.offset ) && ( size == rhs.size );
+# endif
}
bool operator!=( PushConstantRange const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54770,14 +74296,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t offset = {};
uint32_t size = {};
};
- static_assert( sizeof( PushConstantRange ) == sizeof( VkPushConstantRange ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PushConstantRange>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PushConstantRange ) == sizeof( VkPushConstantRange ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PushConstantRange>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PushConstantRange>::value,
+ "PushConstantRange is not nothrow_move_constructible!" );
struct PipelineLayoutCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLayoutCreateInfo;
+ using NativeType = VkPipelineLayoutCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLayoutCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PipelineLayoutCreateInfo(
@@ -54815,8 +74346,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo &
- operator=( PipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineLayoutCreateInfo & operator=( PipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineLayoutCreateInfo & operator=( VkPipelineLayoutCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -54825,25 +74355,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineLayoutCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineLayoutCreateInfo & setSetLayoutCount( uint32_t setLayoutCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo & setSetLayoutCount( uint32_t setLayoutCount_ ) VULKAN_HPP_NOEXCEPT
{
setLayoutCount = setLayoutCount_;
return *this;
}
- PipelineLayoutCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo &
setPSetLayouts( const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * pSetLayouts_ ) VULKAN_HPP_NOEXCEPT
{
pSetLayouts = pSetLayouts_;
@@ -54861,13 +74392,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PipelineLayoutCreateInfo & setPushConstantRangeCount( uint32_t pushConstantRangeCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo &
+ setPushConstantRangeCount( uint32_t pushConstantRangeCount_ ) VULKAN_HPP_NOEXCEPT
{
pushConstantRangeCount = pushConstantRangeCount_;
return *this;
}
- PipelineLayoutCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineLayoutCreateInfo &
setPPushConstantRanges( const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges_ ) VULKAN_HPP_NOEXCEPT
{
pPushConstantRanges = pPushConstantRanges_;
@@ -54886,25 +74418,47 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineLayoutCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineLayoutCreateInfo *>( this );
}
- operator VkPipelineLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineLayoutCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineLayoutCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayoutCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorSetLayout * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PushConstantRange * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, setLayoutCount, pSetLayouts, pushConstantRangeCount, pPushConstantRanges );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineLayoutCreateInfo const & ) const = default;
#else
bool operator==( PipelineLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( setLayoutCount == rhs.setLayoutCount ) && ( pSetLayouts == rhs.pSetLayouts ) &&
( pushConstantRangeCount == rhs.pushConstantRangeCount ) &&
( pPushConstantRanges == rhs.pPushConstantRanges );
+# endif
}
bool operator!=( PipelineLayoutCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -54922,9 +74476,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t pushConstantRangeCount = {};
const VULKAN_HPP_NAMESPACE::PushConstantRange * pPushConstantRanges = {};
};
- static_assert( sizeof( PipelineLayoutCreateInfo ) == sizeof( VkPipelineLayoutCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineLayoutCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo ) ==
+ sizeof( VkPipelineLayoutCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineLayoutCreateInfo>::value,
+ "PipelineLayoutCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineLayoutCreateInfo>
@@ -54934,8 +74492,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineLibraryCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLibraryCreateInfoKHR;
+ using NativeType = VkPipelineLibraryCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineLibraryCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -54960,8 +74520,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR &
- operator=( PipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineLibraryCreateInfoKHR & operator=( PipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineLibraryCreateInfoKHR & operator=( VkPipelineLibraryCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -54970,20 +74529,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineLibraryCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineLibraryCreateInfoKHR & setLibraryCount( uint32_t libraryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR & setLibraryCount( uint32_t libraryCount_ ) VULKAN_HPP_NOEXCEPT
{
libraryCount = libraryCount_;
return *this;
}
- PipelineLibraryCreateInfoKHR &
- setPLibraries( const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineLibraryCreateInfoKHR &
+ setPLibraries( const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries_ ) VULKAN_HPP_NOEXCEPT
{
pLibraries = pLibraries_;
return *this;
@@ -55001,23 +74560,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineLibraryCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineLibraryCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineLibraryCreateInfoKHR *>( this );
}
- operator VkPipelineLibraryCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineLibraryCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineLibraryCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Pipeline * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, libraryCount, pLibraries );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineLibraryCreateInfoKHR const & ) const = default;
#else
bool operator==( PipelineLibraryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( libraryCount == rhs.libraryCount ) &&
( pLibraries == rhs.pLibraries );
+# endif
}
bool operator!=( PipelineLibraryCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55032,10 +74610,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t libraryCount = {};
const VULKAN_HPP_NAMESPACE::Pipeline * pLibraries = {};
};
- static_assert( sizeof( PipelineLibraryCreateInfoKHR ) == sizeof( VkPipelineLibraryCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineLibraryCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR ) ==
+ sizeof( VkPipelineLibraryCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR>::value,
+ "PipelineLibraryCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineLibraryCreateInfoKHR>
@@ -55045,7 +74627,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationConservativeStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationConservativeStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT;
@@ -55070,8 +74654,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT &
- operator=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationConservativeStateCreateInfoEXT &
+ operator=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationConservativeStateCreateInfoEXT &
operator=( VkPipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55082,27 +74666,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationConservativeStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationConservativeStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT &
setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineRasterizationConservativeStateCreateInfoEXT & setConservativeRasterizationMode(
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT & setConservativeRasterizationMode(
VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT conservativeRasterizationMode_ ) VULKAN_HPP_NOEXCEPT
{
conservativeRasterizationMode = conservativeRasterizationMode_;
return *this;
}
- PipelineRasterizationConservativeStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationConservativeStateCreateInfoEXT &
setExtraPrimitiveOverestimationSize( float extraPrimitiveOverestimationSize_ ) VULKAN_HPP_NOEXCEPT
{
extraPrimitiveOverestimationSize = extraPrimitiveOverestimationSize_;
@@ -55110,24 +74695,44 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationConservativeStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationConservativeStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT *>( this );
}
- operator VkPipelineRasterizationConservativeStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationConservativeStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT const &,
+ float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, conservativeRasterizationMode, extraPrimitiveOverestimationSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationConservativeStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( conservativeRasterizationMode == rhs.conservativeRasterizationMode ) &&
( extraPrimitiveOverestimationSize == rhs.extraPrimitiveOverestimationSize );
+# endif
}
bool operator!=( PipelineRasterizationConservativeStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55144,11 +74749,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ConservativeRasterizationModeEXT::eDisabled;
float extraPrimitiveOverestimationSize = {};
};
- static_assert( sizeof( PipelineRasterizationConservativeStateCreateInfoEXT ) ==
- sizeof( VkPipelineRasterizationConservativeStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationConservativeStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT ) ==
+ sizeof( VkPipelineRasterizationConservativeStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PipelineRasterizationConservativeStateCreateInfoEXT>::value,
+ "PipelineRasterizationConservativeStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationConservativeStateCreateInfoEXT>
@@ -55158,7 +74767,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationDepthClipStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationDepthClipStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT;
@@ -55180,8 +74791,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT &
- operator=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationDepthClipStateCreateInfoEXT &
+ operator=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationDepthClipStateCreateInfoEXT &
operator=( VkPipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55191,44 +74802,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationDepthClipStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationDepthClipStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT &
setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineRasterizationDepthClipStateCreateInfoEXT &
- setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationDepthClipStateCreateInfoEXT &
+ setDepthClipEnable( VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable_ ) VULKAN_HPP_NOEXCEPT
{
depthClipEnable = depthClipEnable_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationDepthClipStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationDepthClipStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT *>( this );
}
- operator VkPipelineRasterizationDepthClipStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationDepthClipStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationDepthClipStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, depthClipEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationDepthClipStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( depthClipEnable == rhs.depthClipEnable );
+# endif
}
bool operator!=( PipelineRasterizationDepthClipStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55243,11 +74874,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateFlagsEXT flags = {};
VULKAN_HPP_NAMESPACE::Bool32 depthClipEnable = {};
};
- static_assert( sizeof( PipelineRasterizationDepthClipStateCreateInfoEXT ) ==
- sizeof( VkPipelineRasterizationDepthClipStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationDepthClipStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT ) ==
+ sizeof( VkPipelineRasterizationDepthClipStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineRasterizationDepthClipStateCreateInfoEXT>::value,
+ "PipelineRasterizationDepthClipStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationDepthClipStateCreateInfoEXT>
@@ -55257,7 +74892,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationLineStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationLineStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationLineStateCreateInfoEXT;
@@ -55284,8 +74921,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT &
- operator=( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationLineStateCreateInfoEXT &
+ operator=( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationLineStateCreateInfoEXT &
operator=( VkPipelineRasterizationLineStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55295,60 +74932,82 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationLineStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationLineStateCreateInfoEXT & setLineRasterizationMode(
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT & setLineRasterizationMode(
VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT lineRasterizationMode_ ) VULKAN_HPP_NOEXCEPT
{
lineRasterizationMode = lineRasterizationMode_;
return *this;
}
- PipelineRasterizationLineStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT &
setStippledLineEnable( VULKAN_HPP_NAMESPACE::Bool32 stippledLineEnable_ ) VULKAN_HPP_NOEXCEPT
{
stippledLineEnable = stippledLineEnable_;
return *this;
}
- PipelineRasterizationLineStateCreateInfoEXT &
- setLineStippleFactor( uint32_t lineStippleFactor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT &
+ setLineStippleFactor( uint32_t lineStippleFactor_ ) VULKAN_HPP_NOEXCEPT
{
lineStippleFactor = lineStippleFactor_;
return *this;
}
- PipelineRasterizationLineStateCreateInfoEXT &
- setLineStipplePattern( uint16_t lineStipplePattern_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationLineStateCreateInfoEXT &
+ setLineStipplePattern( uint16_t lineStipplePattern_ ) VULKAN_HPP_NOEXCEPT
{
lineStipplePattern = lineStipplePattern_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationLineStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationLineStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT *>( this );
}
- operator VkPipelineRasterizationLineStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationLineStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationLineStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::LineRasterizationModeEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ uint16_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, lineRasterizationMode, stippledLineEnable, lineStippleFactor, lineStipplePattern );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationLineStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( lineRasterizationMode == rhs.lineRasterizationMode ) &&
( stippledLineEnable == rhs.stippledLineEnable ) && ( lineStippleFactor == rhs.lineStippleFactor ) &&
( lineStipplePattern == rhs.lineStipplePattern );
+# endif
}
bool operator!=( PipelineRasterizationLineStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55366,11 +75025,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t lineStippleFactor = {};
uint16_t lineStipplePattern = {};
};
- static_assert( sizeof( PipelineRasterizationLineStateCreateInfoEXT ) ==
- sizeof( VkPipelineRasterizationLineStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationLineStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT ) ==
+ sizeof( VkPipelineRasterizationLineStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineRasterizationLineStateCreateInfoEXT>::value,
+ "PipelineRasterizationLineStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationLineStateCreateInfoEXT>
@@ -55380,7 +75043,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationProvokingVertexStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationProvokingVertexStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT;
@@ -55401,8 +75066,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT &
- operator=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationProvokingVertexStateCreateInfoEXT &
+ operator=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationProvokingVertexStateCreateInfoEXT &
operator=( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55413,13 +75078,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationProvokingVertexStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationProvokingVertexStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationProvokingVertexStateCreateInfoEXT &
setProvokingVertexMode( VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode_ ) VULKAN_HPP_NOEXCEPT
{
provokingVertexMode = provokingVertexMode_;
@@ -55427,22 +75093,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *>( this );
}
- operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationProvokingVertexStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationProvokingVertexStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, provokingVertexMode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( provokingVertexMode == rhs.provokingVertexMode );
+# endif
}
bool operator!=( PipelineRasterizationProvokingVertexStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55457,11 +75141,16 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT provokingVertexMode =
VULKAN_HPP_NAMESPACE::ProvokingVertexModeEXT::eFirstVertex;
};
- static_assert( sizeof( PipelineRasterizationProvokingVertexStateCreateInfoEXT ) ==
- sizeof( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationProvokingVertexStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT ) ==
+ sizeof( VkPipelineRasterizationProvokingVertexStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PipelineRasterizationProvokingVertexStateCreateInfoEXT>::value,
+ "PipelineRasterizationProvokingVertexStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationProvokingVertexStateCreateInfoEXT>
@@ -55471,7 +75160,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationStateRasterizationOrderAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationStateRasterizationOrderAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationStateRasterizationOrderAMD;
@@ -55492,8 +75183,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD &
- operator=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationStateRasterizationOrderAMD &
+ operator=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationStateRasterizationOrderAMD &
operator=( VkPipelineRasterizationStateRasterizationOrderAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55503,13 +75194,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationStateRasterizationOrderAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationStateRasterizationOrderAMD &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateRasterizationOrderAMD &
setRasterizationOrder( VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder_ ) VULKAN_HPP_NOEXCEPT
{
rasterizationOrder = rasterizationOrder_;
@@ -55517,22 +75209,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationStateRasterizationOrderAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationStateRasterizationOrderAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD *>( this );
}
- operator VkPipelineRasterizationStateRasterizationOrderAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationStateRasterizationOrderAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RasterizationOrderAMD const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, rasterizationOrder );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationStateRasterizationOrderAMD const & ) const = default;
#else
bool operator==( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( rasterizationOrder == rhs.rasterizationOrder );
+# endif
}
bool operator!=( PipelineRasterizationStateRasterizationOrderAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55547,11 +75257,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::RasterizationOrderAMD rasterizationOrder =
VULKAN_HPP_NAMESPACE::RasterizationOrderAMD::eStrict;
};
- static_assert( sizeof( PipelineRasterizationStateRasterizationOrderAMD ) ==
- sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationStateRasterizationOrderAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD ) ==
+ sizeof( VkPipelineRasterizationStateRasterizationOrderAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateRasterizationOrderAMD>::value,
+ "PipelineRasterizationStateRasterizationOrderAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationStateRasterizationOrderAMD>
@@ -55561,7 +75275,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineRasterizationStateStreamCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRasterizationStateStreamCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRasterizationStateStreamCreateInfoEXT;
@@ -55583,8 +75299,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT &
- operator=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRasterizationStateStreamCreateInfoEXT &
+ operator=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRasterizationStateStreamCreateInfoEXT &
operator=( VkPipelineRasterizationStateStreamCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55594,44 +75310,64 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRasterizationStateStreamCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRasterizationStateStreamCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT &
setFlags( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineRasterizationStateStreamCreateInfoEXT &
- setRasterizationStream( uint32_t rasterizationStream_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRasterizationStateStreamCreateInfoEXT &
+ setRasterizationStream( uint32_t rasterizationStream_ ) VULKAN_HPP_NOEXCEPT
{
rasterizationStream = rasterizationStream_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRasterizationStateStreamCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationStateStreamCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT *>( this );
}
- operator VkPipelineRasterizationStateStreamCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRasterizationStateStreamCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRasterizationStateStreamCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, rasterizationStream );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRasterizationStateStreamCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( rasterizationStream == rhs.rasterizationStream );
+# endif
}
bool operator!=( PipelineRasterizationStateStreamCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55646,11 +75382,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateFlagsEXT flags = {};
uint32_t rasterizationStream = {};
};
- static_assert( sizeof( PipelineRasterizationStateStreamCreateInfoEXT ) ==
- sizeof( VkPipelineRasterizationStateStreamCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRasterizationStateStreamCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT ) ==
+ sizeof( VkPipelineRasterizationStateStreamCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineRasterizationStateStreamCreateInfoEXT>::value,
+ "PipelineRasterizationStateStreamCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRasterizationStateStreamCreateInfoEXT>
@@ -55658,9 +75398,197 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PipelineRasterizationStateStreamCreateInfoEXT;
};
+ struct PipelineRenderingCreateInfo
+ {
+ using NativeType = VkPipelineRenderingCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePipelineRenderingCreateInfo;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PipelineRenderingCreateInfo(
+ uint32_t viewMask_ = {},
+ uint32_t colorAttachmentCount_ = {},
+ const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ = {},
+ VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined )
+ VULKAN_HPP_NOEXCEPT
+ : viewMask( viewMask_ )
+ , colorAttachmentCount( colorAttachmentCount_ )
+ , pColorAttachmentFormats( pColorAttachmentFormats_ )
+ , depthAttachmentFormat( depthAttachmentFormat_ )
+ , stencilAttachmentFormat( stencilAttachmentFormat_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ PipelineRenderingCreateInfo( PipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PipelineRenderingCreateInfo( VkPipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PipelineRenderingCreateInfo( *reinterpret_cast<PipelineRenderingCreateInfo const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ PipelineRenderingCreateInfo(
+ uint32_t viewMask_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::Format> const & colorAttachmentFormats_,
+ VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
+ VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ = VULKAN_HPP_NAMESPACE::Format::eUndefined )
+ : viewMask( viewMask_ )
+ , colorAttachmentCount( static_cast<uint32_t>( colorAttachmentFormats_.size() ) )
+ , pColorAttachmentFormats( colorAttachmentFormats_.data() )
+ , depthAttachmentFormat( depthAttachmentFormat_ )
+ , stencilAttachmentFormat( stencilAttachmentFormat_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PipelineRenderingCreateInfo & operator=( PipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PipelineRenderingCreateInfo & operator=( VkPipelineRenderingCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT
+ {
+ viewMask = viewMask_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo &
+ setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = colorAttachmentCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo &
+ setPColorAttachmentFormats( const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pColorAttachmentFormats = pColorAttachmentFormats_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ PipelineRenderingCreateInfo & setColorAttachmentFormats(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::Format> const &
+ colorAttachmentFormats_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = static_cast<uint32_t>( colorAttachmentFormats_.size() );
+ pColorAttachmentFormats = colorAttachmentFormats_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo &
+ setDepthAttachmentFormat( VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT
+ {
+ depthAttachmentFormat = depthAttachmentFormat_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PipelineRenderingCreateInfo &
+ setStencilAttachmentFormat( VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat_ ) VULKAN_HPP_NOEXCEPT
+ {
+ stencilAttachmentFormat = stencilAttachmentFormat_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPipelineRenderingCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPipelineRenderingCreateInfo *>( this );
+ }
+
+ explicit operator VkPipelineRenderingCreateInfo &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPipelineRenderingCreateInfo *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Format * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::Format const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ viewMask,
+ colorAttachmentCount,
+ pColorAttachmentFormats,
+ depthAttachmentFormat,
+ stencilAttachmentFormat );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PipelineRenderingCreateInfo const & ) const = default;
+#else
+ bool operator==( PipelineRenderingCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( viewMask == rhs.viewMask ) &&
+ ( colorAttachmentCount == rhs.colorAttachmentCount ) &&
+ ( pColorAttachmentFormats == rhs.pColorAttachmentFormats ) &&
+ ( depthAttachmentFormat == rhs.depthAttachmentFormat ) &&
+ ( stencilAttachmentFormat == rhs.stencilAttachmentFormat );
+# endif
+ }
+
+ bool operator!=( PipelineRenderingCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineRenderingCreateInfo;
+ const void * pNext = {};
+ uint32_t viewMask = {};
+ uint32_t colorAttachmentCount = {};
+ const VULKAN_HPP_NAMESPACE::Format * pColorAttachmentFormats = {};
+ VULKAN_HPP_NAMESPACE::Format depthAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ VULKAN_HPP_NAMESPACE::Format stencilAttachmentFormat = VULKAN_HPP_NAMESPACE::Format::eUndefined;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo ) ==
+ sizeof( VkPipelineRenderingCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineRenderingCreateInfo>::value,
+ "PipelineRenderingCreateInfo is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePipelineRenderingCreateInfo>
+ {
+ using Type = PipelineRenderingCreateInfo;
+ };
+ using PipelineRenderingCreateInfoKHR = PipelineRenderingCreateInfo;
+
struct PipelineRepresentativeFragmentTestStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineRepresentativeFragmentTestStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV;
@@ -55680,8 +75608,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV &
- operator=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineRepresentativeFragmentTestStateCreateInfoNV &
+ operator=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineRepresentativeFragmentTestStateCreateInfoNV &
operator=( VkPipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55692,13 +75620,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineRepresentativeFragmentTestStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineRepresentativeFragmentTestStateCreateInfoNV & setRepresentativeFragmentTestEnable(
+ VULKAN_HPP_CONSTEXPR_14 PipelineRepresentativeFragmentTestStateCreateInfoNV & setRepresentativeFragmentTestEnable(
VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable_ ) VULKAN_HPP_NOEXCEPT
{
representativeFragmentTestEnable = representativeFragmentTestEnable_;
@@ -55706,23 +75635,39 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV *>( this );
}
- operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineRepresentativeFragmentTestStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineRepresentativeFragmentTestStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, representativeFragmentTestEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineRepresentativeFragmentTestStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( representativeFragmentTestEnable == rhs.representativeFragmentTestEnable );
+# endif
}
bool operator!=( PipelineRepresentativeFragmentTestStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55736,11 +75681,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 representativeFragmentTestEnable = {};
};
- static_assert( sizeof( PipelineRepresentativeFragmentTestStateCreateInfoNV ) ==
- sizeof( VkPipelineRepresentativeFragmentTestStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineRepresentativeFragmentTestStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV ) ==
+ sizeof( VkPipelineRepresentativeFragmentTestStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<
+ VULKAN_HPP_NAMESPACE::PipelineRepresentativeFragmentTestStateCreateInfoNV>::value,
+ "PipelineRepresentativeFragmentTestStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineRepresentativeFragmentTestStateCreateInfoNV>
@@ -55750,7 +75699,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineSampleLocationsStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineSampleLocationsStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineSampleLocationsStateCreateInfoEXT;
@@ -55772,8 +75723,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT &
- operator=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineSampleLocationsStateCreateInfoEXT &
+ operator=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineSampleLocationsStateCreateInfoEXT &
operator=( VkPipelineSampleLocationsStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55783,20 +75734,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineSampleLocationsStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineSampleLocationsStateCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT &
setSampleLocationsEnable( VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationsEnable = sampleLocationsEnable_;
return *this;
}
- PipelineSampleLocationsStateCreateInfoEXT & setSampleLocationsInfo(
+ VULKAN_HPP_CONSTEXPR_14 PipelineSampleLocationsStateCreateInfoEXT & setSampleLocationsInfo(
VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationsInfo = sampleLocationsInfo_;
@@ -55804,24 +75756,43 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineSampleLocationsStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineSampleLocationsStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT *>( this );
}
- operator VkPipelineSampleLocationsStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineSampleLocationsStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, sampleLocationsEnable, sampleLocationsInfo );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineSampleLocationsStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( sampleLocationsEnable == rhs.sampleLocationsEnable ) &&
( sampleLocationsInfo == rhs.sampleLocationsInfo );
+# endif
}
bool operator!=( PipelineSampleLocationsStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55836,11 +75807,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 sampleLocationsEnable = {};
VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {};
};
- static_assert( sizeof( PipelineSampleLocationsStateCreateInfoEXT ) ==
- sizeof( VkPipelineSampleLocationsStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineSampleLocationsStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT ) ==
+ sizeof( VkPipelineSampleLocationsStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineSampleLocationsStateCreateInfoEXT>::value,
+ "PipelineSampleLocationsStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineSampleLocationsStateCreateInfoEXT>
@@ -55848,83 +75823,108 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PipelineSampleLocationsStateCreateInfoEXT;
};
- struct PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT
+ struct PipelineShaderStageRequiredSubgroupSizeCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineShaderStageRequiredSubgroupSizeCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+ StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
- PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT( uint32_t requiredSubgroupSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ PipelineShaderStageRequiredSubgroupSizeCreateInfo( uint32_t requiredSubgroupSize_ = {} ) VULKAN_HPP_NOEXCEPT
: requiredSubgroupSize( requiredSubgroupSize_ )
{}
- VULKAN_HPP_CONSTEXPR PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
- PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR PipelineShaderStageRequiredSubgroupSizeCreateInfo(
+ PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
- VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
- *reinterpret_cast<PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const *>( &rhs ) )
+ PipelineShaderStageRequiredSubgroupSizeCreateInfo( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PipelineShaderStageRequiredSubgroupSizeCreateInfo(
+ *reinterpret_cast<PipelineShaderStageRequiredSubgroupSizeCreateInfo const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT &
- operator=( PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineShaderStageRequiredSubgroupSizeCreateInfo &
+ operator=( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT &
- operator=( VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PipelineShaderStageRequiredSubgroupSizeCreateInfo &
+ operator=( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
*this =
- *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const *>( &rhs );
+ *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo const *>( &rhs );
return *this;
}
- operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT *>( this );
+ return *reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *>( this );
}
- operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineShaderStageRequiredSubgroupSizeCreateInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT *>( this );
+ return *reinterpret_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, requiredSubgroupSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & ) const = default;
+ auto operator<=>( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & ) const = default;
#else
- bool operator==( PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( requiredSubgroupSize == rhs.requiredSubgroupSize );
+# endif
}
- bool operator!=( PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PipelineShaderStageRequiredSubgroupSizeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo;
void * pNext = {};
uint32_t requiredSubgroupSize = {};
};
- static_assert( sizeof( PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT ) ==
- sizeof( VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo ) ==
+ sizeof( VkPipelineShaderStageRequiredSubgroupSizeCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineShaderStageRequiredSubgroupSizeCreateInfo>::value,
+ "PipelineShaderStageRequiredSubgroupSizeCreateInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfoEXT>
+ struct CppType<StructureType, StructureType::ePipelineShaderStageRequiredSubgroupSizeCreateInfo>
{
- using Type = PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT;
+ using Type = PipelineShaderStageRequiredSubgroupSizeCreateInfo;
};
+ using PipelineShaderStageRequiredSubgroupSizeCreateInfoEXT = PipelineShaderStageRequiredSubgroupSizeCreateInfo;
struct PipelineTessellationDomainOriginStateCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineTessellationDomainOriginStateCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineTessellationDomainOriginStateCreateInfo;
@@ -55944,8 +75944,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo &
- operator=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineTessellationDomainOriginStateCreateInfo &
+ operator=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineTessellationDomainOriginStateCreateInfo &
operator=( VkPipelineTessellationDomainOriginStateCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -55955,13 +75955,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineTessellationDomainOriginStateCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineTessellationDomainOriginStateCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 PipelineTessellationDomainOriginStateCreateInfo &
setDomainOrigin( VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin_ ) VULKAN_HPP_NOEXCEPT
{
domainOrigin = domainOrigin_;
@@ -55969,22 +75970,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineTessellationDomainOriginStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineTessellationDomainOriginStateCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo *>( this );
}
- operator VkPipelineTessellationDomainOriginStateCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineTessellationDomainOriginStateCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::TessellationDomainOrigin const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, domainOrigin );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineTessellationDomainOriginStateCreateInfo const & ) const = default;
#else
bool operator==( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( domainOrigin == rhs.domainOrigin );
+# endif
}
bool operator!=( PipelineTessellationDomainOriginStateCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -55999,11 +76018,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::TessellationDomainOrigin domainOrigin =
VULKAN_HPP_NAMESPACE::TessellationDomainOrigin::eUpperLeft;
};
- static_assert( sizeof( PipelineTessellationDomainOriginStateCreateInfo ) ==
- sizeof( VkPipelineTessellationDomainOriginStateCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineTessellationDomainOriginStateCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo ) ==
+ sizeof( VkPipelineTessellationDomainOriginStateCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineTessellationDomainOriginStateCreateInfo>::value,
+ "PipelineTessellationDomainOriginStateCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineTessellationDomainOriginStateCreateInfo>
@@ -56014,6 +76037,8 @@ namespace VULKAN_HPP_NAMESPACE
struct VertexInputBindingDivisorDescriptionEXT
{
+ using NativeType = VkVertexInputBindingDivisorDescriptionEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VertexInputBindingDivisorDescriptionEXT( uint32_t binding_ = {},
uint32_t divisor_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -56030,8 +76055,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescriptionEXT &
- operator=( VertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VertexInputBindingDivisorDescriptionEXT &
+ operator=( VertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VertexInputBindingDivisorDescriptionEXT &
operator=( VkVertexInputBindingDivisorDescriptionEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -56041,35 +76066,53 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VertexInputBindingDivisorDescriptionEXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescriptionEXT &
+ setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
{
binding = binding_;
return *this;
}
- VertexInputBindingDivisorDescriptionEXT & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDivisorDescriptionEXT &
+ setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT
{
divisor = divisor_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVertexInputBindingDivisorDescriptionEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputBindingDivisorDescriptionEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVertexInputBindingDivisorDescriptionEXT *>( this );
}
- operator VkVertexInputBindingDivisorDescriptionEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputBindingDivisorDescriptionEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVertexInputBindingDivisorDescriptionEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( binding, divisor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VertexInputBindingDivisorDescriptionEXT const & ) const = default;
#else
bool operator==( VertexInputBindingDivisorDescriptionEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( binding == rhs.binding ) && ( divisor == rhs.divisor );
+# endif
}
bool operator!=( VertexInputBindingDivisorDescriptionEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56082,15 +76125,21 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t binding = {};
uint32_t divisor = {};
};
- static_assert( sizeof( VertexInputBindingDivisorDescriptionEXT ) ==
- sizeof( VkVertexInputBindingDivisorDescriptionEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VertexInputBindingDivisorDescriptionEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT ) ==
+ sizeof( VkVertexInputBindingDivisorDescriptionEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT>::value,
+ "VertexInputBindingDivisorDescriptionEXT is not nothrow_move_constructible!" );
struct PipelineVertexInputDivisorStateCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineVertexInputDivisorStateCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineVertexInputDivisorStateCreateInfoEXT;
@@ -56122,8 +76171,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT &
- operator=( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineVertexInputDivisorStateCreateInfoEXT &
+ operator=( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineVertexInputDivisorStateCreateInfoEXT &
operator=( VkPipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -56133,20 +76182,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineVertexInputDivisorStateCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineVertexInputDivisorStateCreateInfoEXT &
- setVertexBindingDivisorCount( uint32_t vertexBindingDivisorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT &
+ setVertexBindingDivisorCount( uint32_t vertexBindingDivisorCount_ ) VULKAN_HPP_NOEXCEPT
{
vertexBindingDivisorCount = vertexBindingDivisorCount_;
return *this;
}
- PipelineVertexInputDivisorStateCreateInfoEXT & setPVertexBindingDivisors(
+ VULKAN_HPP_CONSTEXPR_14 PipelineVertexInputDivisorStateCreateInfoEXT & setPVertexBindingDivisors(
const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT * pVertexBindingDivisors_ )
VULKAN_HPP_NOEXCEPT
{
@@ -56167,24 +76217,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineVertexInputDivisorStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineVertexInputDivisorStateCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT *>( this );
}
- operator VkPipelineVertexInputDivisorStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineVertexInputDivisorStateCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, vertexBindingDivisorCount, pVertexBindingDivisors );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineVertexInputDivisorStateCreateInfoEXT const & ) const = default;
#else
bool operator==( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( vertexBindingDivisorCount == rhs.vertexBindingDivisorCount ) &&
( pVertexBindingDivisors == rhs.pVertexBindingDivisors );
+# endif
}
bool operator!=( PipelineVertexInputDivisorStateCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56199,11 +76268,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t vertexBindingDivisorCount = {};
const VULKAN_HPP_NAMESPACE::VertexInputBindingDivisorDescriptionEXT * pVertexBindingDivisors = {};
};
- static_assert( sizeof( PipelineVertexInputDivisorStateCreateInfoEXT ) ==
- sizeof( VkPipelineVertexInputDivisorStateCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineVertexInputDivisorStateCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT ) ==
+ sizeof( VkPipelineVertexInputDivisorStateCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineVertexInputDivisorStateCreateInfoEXT>::value,
+ "PipelineVertexInputDivisorStateCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineVertexInputDivisorStateCreateInfoEXT>
@@ -56213,7 +76286,9 @@ namespace VULKAN_HPP_NAMESPACE
struct PipelineViewportCoarseSampleOrderStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineViewportCoarseSampleOrderStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV;
@@ -56249,8 +76324,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV &
- operator=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineViewportCoarseSampleOrderStateCreateInfoNV &
+ operator=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineViewportCoarseSampleOrderStateCreateInfoNV &
operator=( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -56261,27 +76336,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineViewportCoarseSampleOrderStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineViewportCoarseSampleOrderStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV &
setSampleOrderType( VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV sampleOrderType_ ) VULKAN_HPP_NOEXCEPT
{
sampleOrderType = sampleOrderType_;
return *this;
}
- PipelineViewportCoarseSampleOrderStateCreateInfoNV &
- setCustomSampleOrderCount( uint32_t customSampleOrderCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV &
+ setCustomSampleOrderCount( uint32_t customSampleOrderCount_ ) VULKAN_HPP_NOEXCEPT
{
customSampleOrderCount = customSampleOrderCount_;
return *this;
}
- PipelineViewportCoarseSampleOrderStateCreateInfoNV & setPCustomSampleOrders(
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportCoarseSampleOrderStateCreateInfoNV & setPCustomSampleOrders(
const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders_ ) VULKAN_HPP_NOEXCEPT
{
pCustomSampleOrders = pCustomSampleOrders_;
@@ -56300,24 +76376,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV *>( this );
}
- operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportCoarseSampleOrderStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::CoarseSampleOrderTypeNV const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, sampleOrderType, customSampleOrderCount, pCustomSampleOrders );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( sampleOrderType == rhs.sampleOrderType ) &&
( customSampleOrderCount == rhs.customSampleOrderCount ) &&
( pCustomSampleOrders == rhs.pCustomSampleOrders );
+# endif
}
bool operator!=( PipelineViewportCoarseSampleOrderStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56334,11 +76430,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t customSampleOrderCount = {};
const VULKAN_HPP_NAMESPACE::CoarseSampleOrderCustomNV * pCustomSampleOrders = {};
};
- static_assert( sizeof( PipelineViewportCoarseSampleOrderStateCreateInfoNV ) ==
- sizeof( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineViewportCoarseSampleOrderStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV ) ==
+ sizeof( VkPipelineViewportCoarseSampleOrderStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportCoarseSampleOrderStateCreateInfoNV>::value,
+ "PipelineViewportCoarseSampleOrderStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineViewportCoarseSampleOrderStateCreateInfoNV>
@@ -56346,9 +76446,121 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PipelineViewportCoarseSampleOrderStateCreateInfoNV;
};
+ struct PipelineViewportDepthClipControlCreateInfoEXT
+ {
+ using NativeType = VkPipelineViewportDepthClipControlCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::ePipelineViewportDepthClipControlCreateInfoEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR PipelineViewportDepthClipControlCreateInfoEXT(
+ VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne_ = {} ) VULKAN_HPP_NOEXCEPT : negativeOneToOne( negativeOneToOne_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR PipelineViewportDepthClipControlCreateInfoEXT(
+ PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PipelineViewportDepthClipControlCreateInfoEXT( VkPipelineViewportDepthClipControlCreateInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : PipelineViewportDepthClipControlCreateInfoEXT(
+ *reinterpret_cast<PipelineViewportDepthClipControlCreateInfoEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ PipelineViewportDepthClipControlCreateInfoEXT &
+ operator=( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ PipelineViewportDepthClipControlCreateInfoEXT &
+ operator=( VkPipelineViewportDepthClipControlCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClipControlCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportDepthClipControlCreateInfoEXT &
+ setNegativeOneToOne( VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne_ ) VULKAN_HPP_NOEXCEPT
+ {
+ negativeOneToOne = negativeOneToOne_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkPipelineViewportDepthClipControlCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPipelineViewportDepthClipControlCreateInfoEXT *>( this );
+ }
+
+ explicit operator VkPipelineViewportDepthClipControlCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkPipelineViewportDepthClipControlCreateInfoEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, negativeOneToOne );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( PipelineViewportDepthClipControlCreateInfoEXT const & ) const = default;
+#else
+ bool operator==( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( negativeOneToOne == rhs.negativeOneToOne );
+# endif
+ }
+
+ bool operator!=( PipelineViewportDepthClipControlCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePipelineViewportDepthClipControlCreateInfoEXT;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 negativeOneToOne = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT ) ==
+ sizeof( VkPipelineViewportDepthClipControlCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportDepthClipControlCreateInfoEXT>::value,
+ "PipelineViewportDepthClipControlCreateInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::ePipelineViewportDepthClipControlCreateInfoEXT>
+ {
+ using Type = PipelineViewportDepthClipControlCreateInfoEXT;
+ };
+
struct PipelineViewportExclusiveScissorStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineViewportExclusiveScissorStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV;
@@ -56378,8 +76590,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV &
- operator=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineViewportExclusiveScissorStateCreateInfoNV &
+ operator=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineViewportExclusiveScissorStateCreateInfoNV &
operator=( VkPipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -56390,20 +76602,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineViewportExclusiveScissorStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineViewportExclusiveScissorStateCreateInfoNV &
- setExclusiveScissorCount( uint32_t exclusiveScissorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV &
+ setExclusiveScissorCount( uint32_t exclusiveScissorCount_ ) VULKAN_HPP_NOEXCEPT
{
exclusiveScissorCount = exclusiveScissorCount_;
return *this;
}
- PipelineViewportExclusiveScissorStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportExclusiveScissorStateCreateInfoNV &
setPExclusiveScissors( const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors_ ) VULKAN_HPP_NOEXCEPT
{
pExclusiveScissors = pExclusiveScissors_;
@@ -56422,23 +76635,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineViewportExclusiveScissorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportExclusiveScissorStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV *>( this );
}
- operator VkPipelineViewportExclusiveScissorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportExclusiveScissorStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineViewportExclusiveScissorStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Rect2D * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, exclusiveScissorCount, pExclusiveScissors );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineViewportExclusiveScissorStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( exclusiveScissorCount == rhs.exclusiveScissorCount ) && ( pExclusiveScissors == rhs.pExclusiveScissors );
+# endif
}
bool operator!=( PipelineViewportExclusiveScissorStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56453,11 +76685,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t exclusiveScissorCount = {};
const VULKAN_HPP_NAMESPACE::Rect2D * pExclusiveScissors = {};
};
- static_assert( sizeof( PipelineViewportExclusiveScissorStateCreateInfoNV ) ==
- sizeof( VkPipelineViewportExclusiveScissorStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineViewportExclusiveScissorStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV ) ==
+ sizeof( VkPipelineViewportExclusiveScissorStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportExclusiveScissorStateCreateInfoNV>::value,
+ "PipelineViewportExclusiveScissorStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineViewportExclusiveScissorStateCreateInfoNV>
@@ -56467,6 +76703,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ShadingRatePaletteNV
{
+ using NativeType = VkShadingRatePaletteNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ShadingRatePaletteNV(
uint32_t shadingRatePaletteEntryCount_ = {},
@@ -56491,8 +76729,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV &
- operator=( ShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ShadingRatePaletteNV & operator=( ShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ShadingRatePaletteNV & operator=( VkShadingRatePaletteNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -56501,13 +76738,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ShadingRatePaletteNV & setShadingRatePaletteEntryCount( uint32_t shadingRatePaletteEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV &
+ setShadingRatePaletteEntryCount( uint32_t shadingRatePaletteEntryCount_ ) VULKAN_HPP_NOEXCEPT
{
shadingRatePaletteEntryCount = shadingRatePaletteEntryCount_;
return *this;
}
- ShadingRatePaletteNV & setPShadingRatePaletteEntries(
+ VULKAN_HPP_CONSTEXPR_14 ShadingRatePaletteNV & setPShadingRatePaletteEntries(
const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries_ ) VULKAN_HPP_NOEXCEPT
{
pShadingRatePaletteEntries = pShadingRatePaletteEntries_;
@@ -56526,23 +76764,39 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkShadingRatePaletteNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkShadingRatePaletteNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkShadingRatePaletteNV *>( this );
}
- operator VkShadingRatePaletteNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkShadingRatePaletteNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkShadingRatePaletteNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( shadingRatePaletteEntryCount, pShadingRatePaletteEntries );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ShadingRatePaletteNV const & ) const = default;
#else
bool operator==( ShadingRatePaletteNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( shadingRatePaletteEntryCount == rhs.shadingRatePaletteEntryCount ) &&
( pShadingRatePaletteEntries == rhs.pShadingRatePaletteEntries );
+# endif
}
bool operator!=( ShadingRatePaletteNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56555,13 +76809,18 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t shadingRatePaletteEntryCount = {};
const VULKAN_HPP_NAMESPACE::ShadingRatePaletteEntryNV * pShadingRatePaletteEntries = {};
};
- static_assert( sizeof( ShadingRatePaletteNV ) == sizeof( VkShadingRatePaletteNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ShadingRatePaletteNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV ) == sizeof( VkShadingRatePaletteNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV>::value,
+ "ShadingRatePaletteNV is not nothrow_move_constructible!" );
struct PipelineViewportShadingRateImageStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineViewportShadingRateImageStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV;
@@ -56596,8 +76855,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV &
- operator=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineViewportShadingRateImageStateCreateInfoNV &
+ operator=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineViewportShadingRateImageStateCreateInfoNV &
operator=( VkPipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -56608,26 +76867,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineViewportShadingRateImageStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineViewportShadingRateImageStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV &
setShadingRateImageEnable( VULKAN_HPP_NAMESPACE::Bool32 shadingRateImageEnable_ ) VULKAN_HPP_NOEXCEPT
{
shadingRateImageEnable = shadingRateImageEnable_;
return *this;
}
- PipelineViewportShadingRateImageStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV &
+ setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
{
viewportCount = viewportCount_;
return *this;
}
- PipelineViewportShadingRateImageStateCreateInfoNV & setPShadingRatePalettes(
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportShadingRateImageStateCreateInfoNV & setPShadingRatePalettes(
const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes_ ) VULKAN_HPP_NOEXCEPT
{
pShadingRatePalettes = pShadingRatePalettes_;
@@ -56646,24 +76907,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineViewportShadingRateImageStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportShadingRateImageStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV *>( this );
}
- operator VkPipelineViewportShadingRateImageStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportShadingRateImageStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineViewportShadingRateImageStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, shadingRateImageEnable, viewportCount, pShadingRatePalettes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineViewportShadingRateImageStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( shadingRateImageEnable == rhs.shadingRateImageEnable ) && ( viewportCount == rhs.viewportCount ) &&
( pShadingRatePalettes == rhs.pShadingRatePalettes );
+# endif
}
bool operator!=( PipelineViewportShadingRateImageStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56679,11 +76960,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t viewportCount = {};
const VULKAN_HPP_NAMESPACE::ShadingRatePaletteNV * pShadingRatePalettes = {};
};
- static_assert( sizeof( PipelineViewportShadingRateImageStateCreateInfoNV ) ==
- sizeof( VkPipelineViewportShadingRateImageStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineViewportShadingRateImageStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV ) ==
+ sizeof( VkPipelineViewportShadingRateImageStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportShadingRateImageStateCreateInfoNV>::value,
+ "PipelineViewportShadingRateImageStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineViewportShadingRateImageStateCreateInfoNV>
@@ -56693,6 +76978,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ViewportSwizzleNV
{
+ using NativeType = VkViewportSwizzleNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
ViewportSwizzleNV( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ =
@@ -56716,8 +77003,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV &
- operator=( ViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ViewportSwizzleNV & operator=( ViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ViewportSwizzleNV & operator=( VkViewportSwizzleNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -56726,47 +77012,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ViewportSwizzleNV & setX( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV &
+ setX( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV x_ ) VULKAN_HPP_NOEXCEPT
{
x = x_;
return *this;
}
- ViewportSwizzleNV & setY( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV &
+ setY( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV y_ ) VULKAN_HPP_NOEXCEPT
{
y = y_;
return *this;
}
- ViewportSwizzleNV & setZ( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV &
+ setZ( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z_ ) VULKAN_HPP_NOEXCEPT
{
z = z_;
return *this;
}
- ViewportSwizzleNV & setW( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViewportSwizzleNV &
+ setW( VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w_ ) VULKAN_HPP_NOEXCEPT
{
w = w_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkViewportSwizzleNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkViewportSwizzleNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkViewportSwizzleNV *>( this );
}
- operator VkViewportSwizzleNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkViewportSwizzleNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkViewportSwizzleNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV const &,
+ VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV const &,
+ VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV const &,
+ VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( x, y, z, w );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ViewportSwizzleNV const & ) const = default;
#else
bool operator==( ViewportSwizzleNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( x == rhs.x ) && ( y == rhs.y ) && ( z == rhs.z ) && ( w == rhs.w );
+# endif
}
bool operator!=( ViewportSwizzleNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56781,13 +77090,18 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV z = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX;
VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV w = VULKAN_HPP_NAMESPACE::ViewportCoordinateSwizzleNV::ePositiveX;
};
- static_assert( sizeof( ViewportSwizzleNV ) == sizeof( VkViewportSwizzleNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ViewportSwizzleNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ViewportSwizzleNV ) == sizeof( VkViewportSwizzleNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ViewportSwizzleNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ViewportSwizzleNV>::value,
+ "ViewportSwizzleNV is not nothrow_move_constructible!" );
struct PipelineViewportSwizzleStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineViewportSwizzleStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineViewportSwizzleStateCreateInfoNV;
@@ -56822,8 +77136,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV &
- operator=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineViewportSwizzleStateCreateInfoNV &
+ operator=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineViewportSwizzleStateCreateInfoNV &
operator=( VkPipelineViewportSwizzleStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -56833,26 +77147,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineViewportSwizzleStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineViewportSwizzleStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV &
setFlags( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- PipelineViewportSwizzleStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV &
+ setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
{
viewportCount = viewportCount_;
return *this;
}
- PipelineViewportSwizzleStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportSwizzleStateCreateInfoNV &
setPViewportSwizzles( const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles_ ) VULKAN_HPP_NOEXCEPT
{
pViewportSwizzles = pViewportSwizzles_;
@@ -56871,23 +77187,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineViewportSwizzleStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportSwizzleStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV *>( this );
}
- operator VkPipelineViewportSwizzleStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportSwizzleStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateFlagsNV const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, viewportCount, pViewportSwizzles );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineViewportSwizzleStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( viewportCount == rhs.viewportCount ) && ( pViewportSwizzles == rhs.pViewportSwizzles );
+# endif
}
bool operator!=( PipelineViewportSwizzleStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56903,11 +77239,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t viewportCount = {};
const VULKAN_HPP_NAMESPACE::ViewportSwizzleNV * pViewportSwizzles = {};
};
- static_assert( sizeof( PipelineViewportSwizzleStateCreateInfoNV ) ==
- sizeof( VkPipelineViewportSwizzleStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineViewportSwizzleStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV ) ==
+ sizeof( VkPipelineViewportSwizzleStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportSwizzleStateCreateInfoNV>::value,
+ "PipelineViewportSwizzleStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineViewportSwizzleStateCreateInfoNV>
@@ -56917,6 +77257,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ViewportWScalingNV
{
+ using NativeType = VkViewportWScalingNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ViewportWScalingNV( float xcoeff_ = {}, float ycoeff_ = {} ) VULKAN_HPP_NOEXCEPT
: xcoeff( xcoeff_ )
@@ -56930,8 +77272,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV &
- operator=( ViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ViewportWScalingNV & operator=( ViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ViewportWScalingNV & operator=( VkViewportWScalingNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -56940,35 +77281,51 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ViewportWScalingNV & setXcoeff( float xcoeff_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV & setXcoeff( float xcoeff_ ) VULKAN_HPP_NOEXCEPT
{
xcoeff = xcoeff_;
return *this;
}
- ViewportWScalingNV & setYcoeff( float ycoeff_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViewportWScalingNV & setYcoeff( float ycoeff_ ) VULKAN_HPP_NOEXCEPT
{
ycoeff = ycoeff_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkViewportWScalingNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkViewportWScalingNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkViewportWScalingNV *>( this );
}
- operator VkViewportWScalingNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkViewportWScalingNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkViewportWScalingNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<float const &, float const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( xcoeff, ycoeff );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ViewportWScalingNV const & ) const = default;
#else
bool operator==( ViewportWScalingNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( xcoeff == rhs.xcoeff ) && ( ycoeff == rhs.ycoeff );
+# endif
}
bool operator!=( ViewportWScalingNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -56981,13 +77338,18 @@ namespace VULKAN_HPP_NAMESPACE
float xcoeff = {};
float ycoeff = {};
};
- static_assert( sizeof( ViewportWScalingNV ) == sizeof( VkViewportWScalingNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ViewportWScalingNV>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ViewportWScalingNV ) == sizeof( VkViewportWScalingNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ViewportWScalingNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ViewportWScalingNV>::value,
+ "ViewportWScalingNV is not nothrow_move_constructible!" );
struct PipelineViewportWScalingStateCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkPipelineViewportWScalingStateCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::ePipelineViewportWScalingStateCreateInfoNV;
@@ -57022,8 +77384,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV &
- operator=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PipelineViewportWScalingStateCreateInfoNV &
+ operator=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PipelineViewportWScalingStateCreateInfoNV &
operator=( VkPipelineViewportWScalingStateCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -57033,26 +77395,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PipelineViewportWScalingStateCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PipelineViewportWScalingStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV &
setViewportWScalingEnable( VULKAN_HPP_NAMESPACE::Bool32 viewportWScalingEnable_ ) VULKAN_HPP_NOEXCEPT
{
viewportWScalingEnable = viewportWScalingEnable_;
return *this;
}
- PipelineViewportWScalingStateCreateInfoNV & setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV &
+ setViewportCount( uint32_t viewportCount_ ) VULKAN_HPP_NOEXCEPT
{
viewportCount = viewportCount_;
return *this;
}
- PipelineViewportWScalingStateCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 PipelineViewportWScalingStateCreateInfoNV &
setPViewportWScalings( const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings_ ) VULKAN_HPP_NOEXCEPT
{
pViewportWScalings = pViewportWScalings_;
@@ -57071,24 +77435,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPipelineViewportWScalingStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportWScalingStateCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV *>( this );
}
- operator VkPipelineViewportWScalingStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPipelineViewportWScalingStateCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, viewportWScalingEnable, viewportCount, pViewportWScalings );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PipelineViewportWScalingStateCreateInfoNV const & ) const = default;
#else
bool operator==( PipelineViewportWScalingStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( viewportWScalingEnable == rhs.viewportWScalingEnable ) && ( viewportCount == rhs.viewportCount ) &&
( pViewportWScalings == rhs.pViewportWScalings );
+# endif
}
bool operator!=( PipelineViewportWScalingStateCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57104,11 +77488,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t viewportCount = {};
const VULKAN_HPP_NAMESPACE::ViewportWScalingNV * pViewportWScalings = {};
};
- static_assert( sizeof( PipelineViewportWScalingStateCreateInfoNV ) ==
- sizeof( VkPipelineViewportWScalingStateCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PipelineViewportWScalingStateCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV ) ==
+ sizeof( VkPipelineViewportWScalingStateCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PipelineViewportWScalingStateCreateInfoNV>::value,
+ "PipelineViewportWScalingStateCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePipelineViewportWScalingStateCreateInfoNV>
@@ -57119,8 +77507,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_GGP )
struct PresentFrameTokenGGP
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentFrameTokenGGP;
+ using NativeType = VkPresentFrameTokenGGP;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentFrameTokenGGP;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PresentFrameTokenGGP( GgpFrameToken frameToken_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -57134,8 +77524,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP &
- operator=( PresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentFrameTokenGGP & operator=( PresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentFrameTokenGGP & operator=( VkPresentFrameTokenGGP const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57144,32 +77533,55 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentFrameTokenGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PresentFrameTokenGGP & setFrameToken( GgpFrameToken frameToken_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentFrameTokenGGP & setFrameToken( GgpFrameToken frameToken_ ) VULKAN_HPP_NOEXCEPT
{
frameToken = frameToken_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentFrameTokenGGP const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentFrameTokenGGP const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentFrameTokenGGP *>( this );
}
- operator VkPresentFrameTokenGGP &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentFrameTokenGGP &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentFrameTokenGGP *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, GgpFrameToken const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, frameToken );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PresentFrameTokenGGP const & ) const = default;
-# else
+ std::strong_ordering operator<=>( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &frameToken, &rhs.frameToken, sizeof( GgpFrameToken ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( PresentFrameTokenGGP const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
@@ -57180,16 +77592,18 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePresentFrameTokenGGP;
const void * pNext = {};
GgpFrameToken frameToken = {};
};
- static_assert( sizeof( PresentFrameTokenGGP ) == sizeof( VkPresentFrameTokenGGP ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentFrameTokenGGP>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP ) == sizeof( VkPresentFrameTokenGGP ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentFrameTokenGGP>::value,
+ "PresentFrameTokenGGP is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePresentFrameTokenGGP>
@@ -57200,8 +77614,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PresentIdKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentIdKHR;
+ using NativeType = VkPresentIdKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentIdKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PresentIdKHR( uint32_t swapchainCount_ = {},
@@ -57223,7 +77639,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & operator=( PresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentIdKHR & operator=( PresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentIdKHR & operator=( VkPresentIdKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57232,19 +77648,19 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentIdKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PresentIdKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
{
swapchainCount = swapchainCount_;
return *this;
}
- PresentIdKHR & setPPresentIds( const uint64_t * pPresentIds_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentIdKHR & setPPresentIds( const uint64_t * pPresentIds_ ) VULKAN_HPP_NOEXCEPT
{
pPresentIds = pPresentIds_;
return *this;
@@ -57261,23 +77677,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentIdKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentIdKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentIdKHR *>( this );
}
- operator VkPresentIdKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentIdKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentIdKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchainCount, pPresentIds );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PresentIdKHR const & ) const = default;
#else
bool operator==( PresentIdKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) &&
( pPresentIds == rhs.pPresentIds );
+# endif
}
bool operator!=( PresentIdKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57292,8 +77727,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t swapchainCount = {};
const uint64_t * pPresentIds = {};
};
- static_assert( sizeof( PresentIdKHR ) == sizeof( VkPresentIdKHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentIdKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentIdKHR ) == sizeof( VkPresentIdKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentIdKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentIdKHR>::value,
+ "PresentIdKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePresentIdKHR>
@@ -57303,8 +77742,10 @@ namespace VULKAN_HPP_NAMESPACE
struct PresentInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentInfoKHR;
+ using NativeType = VkPresentInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PresentInfoKHR( uint32_t waitSemaphoreCount_ = {},
@@ -57367,7 +77808,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & operator=( PresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentInfoKHR & operator=( PresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentInfoKHR & operator=( VkPresentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57376,19 +77817,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PresentInfoKHR & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreCount = waitSemaphoreCount_;
return *this;
}
- PresentInfoKHR & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR &
+ setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphores = pWaitSemaphores_;
return *this;
@@ -57405,13 +77847,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
{
swapchainCount = swapchainCount_;
return *this;
}
- PresentInfoKHR & setPSwapchains( const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR &
+ setPSwapchains( const VULKAN_HPP_NAMESPACE::SwapchainKHR * pSwapchains_ ) VULKAN_HPP_NOEXCEPT
{
pSwapchains = pSwapchains_;
return *this;
@@ -57428,7 +77871,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PresentInfoKHR & setPImageIndices( const uint32_t * pImageIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPImageIndices( const uint32_t * pImageIndices_ ) VULKAN_HPP_NOEXCEPT
{
pImageIndices = pImageIndices_;
return *this;
@@ -57444,7 +77887,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- PresentInfoKHR & setPResults( VULKAN_HPP_NAMESPACE::Result * pResults_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentInfoKHR & setPResults( VULKAN_HPP_NAMESPACE::Result * pResults_ ) VULKAN_HPP_NOEXCEPT
{
pResults = pResults_;
return *this;
@@ -57461,25 +77904,49 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentInfoKHR *>( this );
}
- operator VkPresentInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Semaphore * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SwapchainKHR * const &,
+ const uint32_t * const &,
+ VULKAN_HPP_NAMESPACE::Result * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, waitSemaphoreCount, pWaitSemaphores, swapchainCount, pSwapchains, pImageIndices, pResults );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PresentInfoKHR const & ) const = default;
#else
bool operator==( PresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) &&
( pWaitSemaphores == rhs.pWaitSemaphores ) && ( swapchainCount == rhs.swapchainCount ) &&
( pSwapchains == rhs.pSwapchains ) && ( pImageIndices == rhs.pImageIndices ) &&
( pResults == rhs.pResults );
+# endif
}
bool operator!=( PresentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57498,8 +77965,12 @@ namespace VULKAN_HPP_NAMESPACE
const uint32_t * pImageIndices = {};
VULKAN_HPP_NAMESPACE::Result * pResults = {};
};
- static_assert( sizeof( PresentInfoKHR ) == sizeof( VkPresentInfoKHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentInfoKHR ) == sizeof( VkPresentInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentInfoKHR>::value,
+ "PresentInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePresentInfoKHR>
@@ -57509,6 +77980,8 @@ namespace VULKAN_HPP_NAMESPACE
struct RectLayerKHR
{
+ using NativeType = VkRectLayerKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR RectLayerKHR( VULKAN_HPP_NAMESPACE::Offset2D offset_ = {},
VULKAN_HPP_NAMESPACE::Extent2D extent_ = {},
@@ -57529,7 +78002,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & operator=( RectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RectLayerKHR & operator=( RectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RectLayerKHR & operator=( VkRectLayerKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57538,41 +78011,59 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RectLayerKHR & setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RectLayerKHR &
+ setOffset( VULKAN_HPP_NAMESPACE::Offset2D const & offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
- RectLayerKHR & setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RectLayerKHR &
+ setExtent( VULKAN_HPP_NAMESPACE::Extent2D const & extent_ ) VULKAN_HPP_NOEXCEPT
{
extent = extent_;
return *this;
}
- RectLayerKHR & setLayer( uint32_t layer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RectLayerKHR & setLayer( uint32_t layer_ ) VULKAN_HPP_NOEXCEPT
{
layer = layer_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRectLayerKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRectLayerKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRectLayerKHR *>( this );
}
- operator VkRectLayerKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRectLayerKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRectLayerKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Offset2D const &, VULKAN_HPP_NAMESPACE::Extent2D const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( offset, extent, layer );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RectLayerKHR const & ) const = default;
#else
bool operator==( RectLayerKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( offset == rhs.offset ) && ( extent == rhs.extent ) && ( layer == rhs.layer );
+# endif
}
bool operator!=( RectLayerKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57586,11 +78077,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent2D extent = {};
uint32_t layer = {};
};
- static_assert( sizeof( RectLayerKHR ) == sizeof( VkRectLayerKHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RectLayerKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RectLayerKHR ) == sizeof( VkRectLayerKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RectLayerKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RectLayerKHR>::value,
+ "RectLayerKHR is not nothrow_move_constructible!" );
struct PresentRegionKHR
{
+ using NativeType = VkPresentRegionKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
PresentRegionKHR( uint32_t rectangleCount_ = {},
@@ -57613,7 +78110,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR & operator=( PresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentRegionKHR & operator=( PresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentRegionKHR & operator=( VkPresentRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57622,13 +78119,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentRegionKHR & setRectangleCount( uint32_t rectangleCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR & setRectangleCount( uint32_t rectangleCount_ ) VULKAN_HPP_NOEXCEPT
{
rectangleCount = rectangleCount_;
return *this;
}
- PresentRegionKHR & setPRectangles( const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentRegionKHR &
+ setPRectangles( const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles_ ) VULKAN_HPP_NOEXCEPT
{
pRectangles = pRectangles_;
return *this;
@@ -57646,22 +78144,38 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentRegionKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentRegionKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentRegionKHR *>( this );
}
- operator VkPresentRegionKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentRegionKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentRegionKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, const VULKAN_HPP_NAMESPACE::RectLayerKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( rectangleCount, pRectangles );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PresentRegionKHR const & ) const = default;
#else
bool operator==( PresentRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( rectangleCount == rhs.rectangleCount ) && ( pRectangles == rhs.pRectangles );
+# endif
}
bool operator!=( PresentRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57674,14 +78188,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t rectangleCount = {};
const VULKAN_HPP_NAMESPACE::RectLayerKHR * pRectangles = {};
};
- static_assert( sizeof( PresentRegionKHR ) == sizeof( VkPresentRegionKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentRegionKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentRegionKHR ) == sizeof( VkPresentRegionKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentRegionKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentRegionKHR>::value,
+ "PresentRegionKHR is not nothrow_move_constructible!" );
struct PresentRegionsKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentRegionsKHR;
+ using NativeType = VkPresentRegionsKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentRegionsKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -57705,8 +78224,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR &
- operator=( PresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentRegionsKHR & operator=( PresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentRegionsKHR & operator=( VkPresentRegionsKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57715,19 +78233,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentRegionsKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PresentRegionsKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
{
swapchainCount = swapchainCount_;
return *this;
}
- PresentRegionsKHR & setPRegions( const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentRegionsKHR &
+ setPRegions( const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
@@ -57745,23 +78264,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentRegionsKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentRegionsKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentRegionsKHR *>( this );
}
- operator VkPresentRegionsKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentRegionsKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentRegionsKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PresentRegionKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchainCount, pRegions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PresentRegionsKHR const & ) const = default;
#else
bool operator==( PresentRegionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) &&
( pRegions == rhs.pRegions );
+# endif
}
bool operator!=( PresentRegionsKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57776,9 +78314,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t swapchainCount = {};
const VULKAN_HPP_NAMESPACE::PresentRegionKHR * pRegions = {};
};
- static_assert( sizeof( PresentRegionsKHR ) == sizeof( VkPresentRegionsKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentRegionsKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentRegionsKHR ) == sizeof( VkPresentRegionsKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentRegionsKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentRegionsKHR>::value,
+ "PresentRegionsKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePresentRegionsKHR>
@@ -57788,6 +78329,8 @@ namespace VULKAN_HPP_NAMESPACE
struct PresentTimeGOOGLE
{
+ using NativeType = VkPresentTimeGOOGLE;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR PresentTimeGOOGLE( uint32_t presentID_ = {},
uint64_t desiredPresentTime_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -57802,8 +78345,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE &
- operator=( PresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentTimeGOOGLE & operator=( PresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentTimeGOOGLE & operator=( VkPresentTimeGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57812,35 +78354,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentTimeGOOGLE & setPresentID( uint32_t presentID_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE & setPresentID( uint32_t presentID_ ) VULKAN_HPP_NOEXCEPT
{
presentID = presentID_;
return *this;
}
- PresentTimeGOOGLE & setDesiredPresentTime( uint64_t desiredPresentTime_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentTimeGOOGLE &
+ setDesiredPresentTime( uint64_t desiredPresentTime_ ) VULKAN_HPP_NOEXCEPT
{
desiredPresentTime = desiredPresentTime_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentTimeGOOGLE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentTimeGOOGLE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentTimeGOOGLE *>( this );
}
- operator VkPresentTimeGOOGLE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentTimeGOOGLE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentTimeGOOGLE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( presentID, desiredPresentTime );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PresentTimeGOOGLE const & ) const = default;
#else
bool operator==( PresentTimeGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( presentID == rhs.presentID ) && ( desiredPresentTime == rhs.desiredPresentTime );
+# endif
}
bool operator!=( PresentTimeGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57853,14 +78412,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t presentID = {};
uint64_t desiredPresentTime = {};
};
- static_assert( sizeof( PresentTimeGOOGLE ) == sizeof( VkPresentTimeGOOGLE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentTimeGOOGLE>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE ) == sizeof( VkPresentTimeGOOGLE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE>::value,
+ "PresentTimeGOOGLE is not nothrow_move_constructible!" );
struct PresentTimesInfoGOOGLE
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentTimesInfoGOOGLE;
+ using NativeType = VkPresentTimesInfoGOOGLE;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePresentTimesInfoGOOGLE;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -57884,8 +78448,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE &
- operator=( PresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PresentTimesInfoGOOGLE & operator=( PresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
PresentTimesInfoGOOGLE & operator=( VkPresentTimesInfoGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -57894,19 +78457,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PresentTimesInfoGOOGLE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PresentTimesInfoGOOGLE & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE & setSwapchainCount( uint32_t swapchainCount_ ) VULKAN_HPP_NOEXCEPT
{
swapchainCount = swapchainCount_;
return *this;
}
- PresentTimesInfoGOOGLE & setPTimes( const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PresentTimesInfoGOOGLE &
+ setPTimes( const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes_ ) VULKAN_HPP_NOEXCEPT
{
pTimes = pTimes_;
return *this;
@@ -57924,23 +78488,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPresentTimesInfoGOOGLE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentTimesInfoGOOGLE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkPresentTimesInfoGOOGLE *>( this );
}
- operator VkPresentTimesInfoGOOGLE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkPresentTimesInfoGOOGLE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkPresentTimesInfoGOOGLE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, swapchainCount, pTimes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( PresentTimesInfoGOOGLE const & ) const = default;
#else
bool operator==( PresentTimesInfoGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( swapchainCount == rhs.swapchainCount ) &&
( pTimes == rhs.pTimes );
+# endif
}
bool operator!=( PresentTimesInfoGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -57955,9 +78538,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t swapchainCount = {};
const VULKAN_HPP_NAMESPACE::PresentTimeGOOGLE * pTimes = {};
};
- static_assert( sizeof( PresentTimesInfoGOOGLE ) == sizeof( VkPresentTimesInfoGOOGLE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PresentTimesInfoGOOGLE>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE ) ==
+ sizeof( VkPresentTimesInfoGOOGLE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PresentTimesInfoGOOGLE>::value,
+ "PresentTimesInfoGOOGLE is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::ePresentTimesInfoGOOGLE>
@@ -57965,92 +78552,118 @@ namespace VULKAN_HPP_NAMESPACE
using Type = PresentTimesInfoGOOGLE;
};
- struct PrivateDataSlotCreateInfoEXT
+ struct PrivateDataSlotCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePrivateDataSlotCreateInfoEXT;
+ using NativeType = VkPrivateDataSlotCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::ePrivateDataSlotCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR PrivateDataSlotCreateInfoEXT( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlagsEXT flags_ = {} )
- VULKAN_HPP_NOEXCEPT : flags( flags_ )
+ VULKAN_HPP_CONSTEXPR
+ PrivateDataSlotCreateInfo( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags_ = {} ) VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
{}
VULKAN_HPP_CONSTEXPR
- PrivateDataSlotCreateInfoEXT( PrivateDataSlotCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PrivateDataSlotCreateInfo( PrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PrivateDataSlotCreateInfoEXT( VkPrivateDataSlotCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : PrivateDataSlotCreateInfoEXT( *reinterpret_cast<PrivateDataSlotCreateInfoEXT const *>( &rhs ) )
+ PrivateDataSlotCreateInfo( VkPrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : PrivateDataSlotCreateInfo( *reinterpret_cast<PrivateDataSlotCreateInfo const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfoEXT &
- operator=( PrivateDataSlotCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ PrivateDataSlotCreateInfo & operator=( PrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- PrivateDataSlotCreateInfoEXT & operator=( VkPrivateDataSlotCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ PrivateDataSlotCreateInfo & operator=( VkPrivateDataSlotCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfoEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- PrivateDataSlotCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- PrivateDataSlotCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 PrivateDataSlotCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkPrivateDataSlotCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkPrivateDataSlotCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkPrivateDataSlotCreateInfo *>( this );
+ }
+
+ explicit operator VkPrivateDataSlotCreateInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkPrivateDataSlotCreateInfoEXT *>( this );
+ return *reinterpret_cast<VkPrivateDataSlotCreateInfo *>( this );
}
- operator VkPrivateDataSlotCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkPrivateDataSlotCreateInfoEXT *>( this );
+ return std::tie( sType, pNext, flags );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( PrivateDataSlotCreateInfoEXT const & ) const = default;
+ auto operator<=>( PrivateDataSlotCreateInfo const & ) const = default;
#else
- bool operator==( PrivateDataSlotCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( PrivateDataSlotCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
- bool operator!=( PrivateDataSlotCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( PrivateDataSlotCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePrivateDataSlotCreateInfoEXT;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlagsEXT flags = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::ePrivateDataSlotCreateInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateFlags flags = {};
};
- static_assert( sizeof( PrivateDataSlotCreateInfoEXT ) == sizeof( VkPrivateDataSlotCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<PrivateDataSlotCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo ) ==
+ sizeof( VkPrivateDataSlotCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::PrivateDataSlotCreateInfo>::value,
+ "PrivateDataSlotCreateInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::ePrivateDataSlotCreateInfoEXT>
+ struct CppType<StructureType, StructureType::ePrivateDataSlotCreateInfo>
{
- using Type = PrivateDataSlotCreateInfoEXT;
+ using Type = PrivateDataSlotCreateInfo;
};
+ using PrivateDataSlotCreateInfoEXT = PrivateDataSlotCreateInfo;
struct ProtectedSubmitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eProtectedSubmitInfo;
+ using NativeType = VkProtectedSubmitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eProtectedSubmitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ProtectedSubmitInfo( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -58064,8 +78677,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo &
- operator=( ProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ProtectedSubmitInfo & operator=( ProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ProtectedSubmitInfo & operator=( VkProtectedSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -58074,35 +78686,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ProtectedSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ProtectedSubmitInfo & setProtectedSubmit( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ProtectedSubmitInfo &
+ setProtectedSubmit( VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit_ ) VULKAN_HPP_NOEXCEPT
{
protectedSubmit = protectedSubmit_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkProtectedSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkProtectedSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkProtectedSubmitInfo *>( this );
}
- operator VkProtectedSubmitInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkProtectedSubmitInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkProtectedSubmitInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, protectedSubmit );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ProtectedSubmitInfo const & ) const = default;
#else
bool operator==( ProtectedSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( protectedSubmit == rhs.protectedSubmit );
+# endif
}
bool operator!=( ProtectedSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58116,9 +78745,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 protectedSubmit = {};
};
- static_assert( sizeof( ProtectedSubmitInfo ) == sizeof( VkProtectedSubmitInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ProtectedSubmitInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo ) == sizeof( VkProtectedSubmitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ProtectedSubmitInfo>::value,
+ "ProtectedSubmitInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eProtectedSubmitInfo>
@@ -58128,8 +78760,10 @@ namespace VULKAN_HPP_NAMESPACE
struct QueryPoolCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolCreateInfo;
+ using NativeType = VkQueryPoolCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueryPoolCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR QueryPoolCreateInfo(
@@ -58150,8 +78784,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo &
- operator=( QueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueryPoolCreateInfo & operator=( QueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueryPoolCreateInfo & operator=( VkQueryPoolCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -58160,31 +78793,33 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- QueryPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- QueryPoolCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- QueryPoolCreateInfo & setQueryType( VULKAN_HPP_NAMESPACE::QueryType queryType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo &
+ setQueryType( VULKAN_HPP_NAMESPACE::QueryType queryType_ ) VULKAN_HPP_NOEXCEPT
{
queryType = queryType_;
return *this;
}
- QueryPoolCreateInfo & setQueryCount( uint32_t queryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo & setQueryCount( uint32_t queryCount_ ) VULKAN_HPP_NOEXCEPT
{
queryCount = queryCount_;
return *this;
}
- QueryPoolCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolCreateInfo &
setPipelineStatistics( VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics_ ) VULKAN_HPP_NOEXCEPT
{
pipelineStatistics = pipelineStatistics_;
@@ -58192,24 +78827,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkQueryPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueryPoolCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueryPoolCreateInfo *>( this );
}
- operator VkQueryPoolCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueryPoolCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueryPoolCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::QueryPoolCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::QueryType const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, queryType, queryCount, pipelineStatistics );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueryPoolCreateInfo const & ) const = default;
#else
bool operator==( QueryPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( queryType == rhs.queryType ) && ( queryCount == rhs.queryCount ) &&
( pipelineStatistics == rhs.pipelineStatistics );
+# endif
}
bool operator!=( QueryPoolCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58226,9 +78882,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t queryCount = {};
VULKAN_HPP_NAMESPACE::QueryPipelineStatisticFlags pipelineStatistics = {};
};
- static_assert( sizeof( QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueryPoolCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo ) == sizeof( VkQueryPoolCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueryPoolCreateInfo>::value,
+ "QueryPoolCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eQueryPoolCreateInfo>
@@ -58238,7 +78897,9 @@ namespace VULKAN_HPP_NAMESPACE
struct QueryPoolPerformanceCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkQueryPoolPerformanceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eQueryPoolPerformanceCreateInfoKHR;
@@ -58269,8 +78930,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR &
- operator=( QueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueryPoolPerformanceCreateInfoKHR &
+ operator=( QueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueryPoolPerformanceCreateInfoKHR & operator=( VkQueryPoolPerformanceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -58279,25 +78940,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- QueryPoolPerformanceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- QueryPoolPerformanceCreateInfoKHR & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR &
+ setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndex = queueFamilyIndex_;
return *this;
}
- QueryPoolPerformanceCreateInfoKHR & setCounterIndexCount( uint32_t counterIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR &
+ setCounterIndexCount( uint32_t counterIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
counterIndexCount = counterIndexCount_;
return *this;
}
- QueryPoolPerformanceCreateInfoKHR & setPCounterIndices( const uint32_t * pCounterIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceCreateInfoKHR &
+ setPCounterIndices( const uint32_t * pCounterIndices_ ) VULKAN_HPP_NOEXCEPT
{
pCounterIndices = pCounterIndices_;
return *this;
@@ -58314,23 +78978,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkQueryPoolPerformanceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueryPoolPerformanceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR *>( this );
}
- operator VkQueryPoolPerformanceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueryPoolPerformanceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueryPoolPerformanceCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, queueFamilyIndex, counterIndexCount, pCounterIndices );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueryPoolPerformanceCreateInfoKHR const & ) const = default;
#else
bool operator==( QueryPoolPerformanceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) &&
( counterIndexCount == rhs.counterIndexCount ) && ( pCounterIndices == rhs.pCounterIndices );
+# endif
}
bool operator!=( QueryPoolPerformanceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58346,10 +79030,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t counterIndexCount = {};
const uint32_t * pCounterIndices = {};
};
- static_assert( sizeof( QueryPoolPerformanceCreateInfoKHR ) == sizeof( VkQueryPoolPerformanceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueryPoolPerformanceCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR ) ==
+ sizeof( VkQueryPoolPerformanceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueryPoolPerformanceCreateInfoKHR>::value,
+ "QueryPoolPerformanceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eQueryPoolPerformanceCreateInfoKHR>
@@ -58359,7 +79047,9 @@ namespace VULKAN_HPP_NAMESPACE
struct QueryPoolPerformanceQueryCreateInfoINTEL
{
- static const bool allowDuplicate = false;
+ using NativeType = VkQueryPoolPerformanceQueryCreateInfoINTEL;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL;
@@ -58380,8 +79070,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL &
- operator=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueryPoolPerformanceQueryCreateInfoINTEL &
+ operator=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueryPoolPerformanceQueryCreateInfoINTEL &
operator=( VkQueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -58391,13 +79081,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- QueryPoolPerformanceQueryCreateInfoINTEL & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- QueryPoolPerformanceQueryCreateInfoINTEL & setPerformanceCountersSampling(
+ VULKAN_HPP_CONSTEXPR_14 QueryPoolPerformanceQueryCreateInfoINTEL & setPerformanceCountersSampling(
VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling_ ) VULKAN_HPP_NOEXCEPT
{
performanceCountersSampling = performanceCountersSampling_;
@@ -58405,23 +79096,41 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkQueryPoolPerformanceQueryCreateInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueryPoolPerformanceQueryCreateInfoINTEL const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL *>( this );
}
- operator VkQueryPoolPerformanceQueryCreateInfoINTEL &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueryPoolPerformanceQueryCreateInfoINTEL &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueryPoolPerformanceQueryCreateInfoINTEL *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, performanceCountersSampling );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueryPoolPerformanceQueryCreateInfoINTEL const & ) const = default;
#else
bool operator==( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( performanceCountersSampling == rhs.performanceCountersSampling );
+# endif
}
bool operator!=( QueryPoolPerformanceQueryCreateInfoINTEL const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58436,11 +79145,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL performanceCountersSampling =
VULKAN_HPP_NAMESPACE::QueryPoolSamplingModeINTEL::eManual;
};
- static_assert( sizeof( QueryPoolPerformanceQueryCreateInfoINTEL ) ==
- sizeof( VkQueryPoolPerformanceQueryCreateInfoINTEL ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueryPoolPerformanceQueryCreateInfoINTEL>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL ) ==
+ sizeof( VkQueryPoolPerformanceQueryCreateInfoINTEL ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueryPoolPerformanceQueryCreateInfoINTEL>::value,
+ "QueryPoolPerformanceQueryCreateInfoINTEL is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eQueryPoolPerformanceQueryCreateInfoINTEL>
@@ -58451,13 +79164,15 @@ namespace VULKAN_HPP_NAMESPACE
struct QueueFamilyCheckpointProperties2NV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkQueueFamilyCheckpointProperties2NV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eQueueFamilyCheckpointProperties2NV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR QueueFamilyCheckpointProperties2NV(
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR checkpointExecutionStageMask_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 checkpointExecutionStageMask_ = {} ) VULKAN_HPP_NOEXCEPT
: checkpointExecutionStageMask( checkpointExecutionStageMask_ )
{}
@@ -58469,8 +79184,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyCheckpointProperties2NV &
- operator=( QueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueueFamilyCheckpointProperties2NV &
+ operator=( QueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueueFamilyCheckpointProperties2NV &
operator=( VkQueueFamilyCheckpointProperties2NV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -58479,23 +79194,41 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkQueueFamilyCheckpointProperties2NV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyCheckpointProperties2NV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueueFamilyCheckpointProperties2NV *>( this );
}
- operator VkQueueFamilyCheckpointProperties2NV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyCheckpointProperties2NV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueueFamilyCheckpointProperties2NV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, checkpointExecutionStageMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueueFamilyCheckpointProperties2NV const & ) const = default;
#else
bool operator==( QueueFamilyCheckpointProperties2NV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( checkpointExecutionStageMask == rhs.checkpointExecutionStageMask );
+# endif
}
bool operator!=( QueueFamilyCheckpointProperties2NV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58505,14 +79238,18 @@ namespace VULKAN_HPP_NAMESPACE
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyCheckpointProperties2NV;
- void * pNext = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR checkpointExecutionStageMask = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyCheckpointProperties2NV;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 checkpointExecutionStageMask = {};
};
- static_assert( sizeof( QueueFamilyCheckpointProperties2NV ) == sizeof( VkQueueFamilyCheckpointProperties2NV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueueFamilyCheckpointProperties2NV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV ) ==
+ sizeof( VkQueueFamilyCheckpointProperties2NV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointProperties2NV>::value,
+ "QueueFamilyCheckpointProperties2NV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eQueueFamilyCheckpointProperties2NV>
@@ -58522,7 +79259,9 @@ namespace VULKAN_HPP_NAMESPACE
struct QueueFamilyCheckpointPropertiesNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkQueueFamilyCheckpointPropertiesNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eQueueFamilyCheckpointPropertiesNV;
@@ -58540,8 +79279,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyCheckpointPropertiesNV &
- operator=( QueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueueFamilyCheckpointPropertiesNV &
+ operator=( QueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueueFamilyCheckpointPropertiesNV & operator=( VkQueueFamilyCheckpointPropertiesNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -58549,23 +79288,41 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkQueueFamilyCheckpointPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyCheckpointPropertiesNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV *>( this );
}
- operator VkQueueFamilyCheckpointPropertiesNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyCheckpointPropertiesNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, checkpointExecutionStageMask );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueueFamilyCheckpointPropertiesNV const & ) const = default;
#else
bool operator==( QueueFamilyCheckpointPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( checkpointExecutionStageMask == rhs.checkpointExecutionStageMask );
+# endif
}
bool operator!=( QueueFamilyCheckpointPropertiesNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58579,10 +79336,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::PipelineStageFlags checkpointExecutionStageMask = {};
};
- static_assert( sizeof( QueueFamilyCheckpointPropertiesNV ) == sizeof( VkQueueFamilyCheckpointPropertiesNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueueFamilyCheckpointPropertiesNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV ) ==
+ sizeof( VkQueueFamilyCheckpointPropertiesNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueueFamilyCheckpointPropertiesNV>::value,
+ "QueueFamilyCheckpointPropertiesNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eQueueFamilyCheckpointPropertiesNV>
@@ -58590,70 +79351,73 @@ namespace VULKAN_HPP_NAMESPACE
using Type = QueueFamilyCheckpointPropertiesNV;
};
- struct QueueFamilyGlobalPriorityPropertiesEXT
+ struct QueueFamilyGlobalPriorityPropertiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkQueueFamilyGlobalPriorityPropertiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::eQueueFamilyGlobalPriorityPropertiesEXT;
+ StructureType::eQueueFamilyGlobalPriorityPropertiesKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesEXT(
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR(
uint32_t priorityCount_ = {},
- std::array<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT, VK_MAX_GLOBAL_PRIORITY_SIZE_EXT> const &
- priorities_ = { { VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow,
- VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT::eLow } } ) VULKAN_HPP_NOEXCEPT
+ std::array<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR, VK_MAX_GLOBAL_PRIORITY_SIZE_KHR> const &
+ priorities_ = { { VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow,
+ VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR::eLow } } ) VULKAN_HPP_NOEXCEPT
: priorityCount( priorityCount_ )
, priorities( priorities_ )
{}
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesEXT( QueueFamilyGlobalPriorityPropertiesEXT const & rhs )
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR( QueueFamilyGlobalPriorityPropertiesKHR const & rhs )
VULKAN_HPP_NOEXCEPT = default;
- QueueFamilyGlobalPriorityPropertiesEXT( VkQueueFamilyGlobalPriorityPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : QueueFamilyGlobalPriorityPropertiesEXT(
- *reinterpret_cast<QueueFamilyGlobalPriorityPropertiesEXT const *>( &rhs ) )
+ QueueFamilyGlobalPriorityPropertiesKHR( VkQueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ : QueueFamilyGlobalPriorityPropertiesKHR(
+ *reinterpret_cast<QueueFamilyGlobalPriorityPropertiesKHR const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesEXT &
- operator=( QueueFamilyGlobalPriorityPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueueFamilyGlobalPriorityPropertiesKHR &
+ operator=( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- QueueFamilyGlobalPriorityPropertiesEXT &
- operator=( VkQueueFamilyGlobalPriorityPropertiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ QueueFamilyGlobalPriorityPropertiesKHR &
+ operator=( VkQueueFamilyGlobalPriorityPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- QueueFamilyGlobalPriorityPropertiesEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- QueueFamilyGlobalPriorityPropertiesEXT & setPriorityCount( uint32_t priorityCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR &
+ setPriorityCount( uint32_t priorityCount_ ) VULKAN_HPP_NOEXCEPT
{
priorityCount = priorityCount_;
return *this;
}
- QueueFamilyGlobalPriorityPropertiesEXT & setPriorities(
- std::array<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT, VK_MAX_GLOBAL_PRIORITY_SIZE_EXT> priorities_ )
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyGlobalPriorityPropertiesKHR & setPriorities(
+ std::array<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR, VK_MAX_GLOBAL_PRIORITY_SIZE_KHR> priorities_ )
VULKAN_HPP_NOEXCEPT
{
priorities = priorities_;
@@ -58661,51 +79425,79 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkQueueFamilyGlobalPriorityPropertiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyGlobalPriorityPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkQueueFamilyGlobalPriorityPropertiesKHR *>( this );
+ }
+
+ explicit operator VkQueueFamilyGlobalPriorityPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkQueueFamilyGlobalPriorityPropertiesEXT *>( this );
+ return *reinterpret_cast<VkQueueFamilyGlobalPriorityPropertiesKHR *>( this );
}
- operator VkQueueFamilyGlobalPriorityPropertiesEXT &() VULKAN_HPP_NOEXCEPT
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR,
+ VK_MAX_GLOBAL_PRIORITY_SIZE_KHR> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkQueueFamilyGlobalPriorityPropertiesEXT *>( this );
+ return std::tie( sType, pNext, priorityCount, priorities );
}
+#endif
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( QueueFamilyGlobalPriorityPropertiesEXT const & ) const = default;
+ auto operator<=>( QueueFamilyGlobalPriorityPropertiesKHR const & ) const = default;
#else
- bool operator==( QueueFamilyGlobalPriorityPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( priorityCount == rhs.priorityCount ) &&
( priorities == rhs.priorities );
+# endif
}
- bool operator!=( QueueFamilyGlobalPriorityPropertiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( QueueFamilyGlobalPriorityPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyGlobalPriorityPropertiesEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyGlobalPriorityPropertiesKHR;
void * pNext = {};
uint32_t priorityCount = {};
- VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityEXT, VK_MAX_GLOBAL_PRIORITY_SIZE_EXT>
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<VULKAN_HPP_NAMESPACE::QueueGlobalPriorityKHR, VK_MAX_GLOBAL_PRIORITY_SIZE_KHR>
priorities = {};
};
- static_assert( sizeof( QueueFamilyGlobalPriorityPropertiesEXT ) == sizeof( VkQueueFamilyGlobalPriorityPropertiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueueFamilyGlobalPriorityPropertiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR ) ==
+ sizeof( VkQueueFamilyGlobalPriorityPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueueFamilyGlobalPriorityPropertiesKHR>::value,
+ "QueueFamilyGlobalPriorityPropertiesKHR is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eQueueFamilyGlobalPriorityPropertiesEXT>
+ struct CppType<StructureType, StructureType::eQueueFamilyGlobalPriorityPropertiesKHR>
{
- using Type = QueueFamilyGlobalPriorityPropertiesEXT;
+ using Type = QueueFamilyGlobalPriorityPropertiesKHR;
};
+ using QueueFamilyGlobalPriorityPropertiesEXT = QueueFamilyGlobalPriorityPropertiesKHR;
struct QueueFamilyProperties
{
+ using NativeType = VkQueueFamilyProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
QueueFamilyProperties( VULKAN_HPP_NAMESPACE::QueueFlags queueFlags_ = {},
@@ -58725,8 +79517,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyProperties &
- operator=( QueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueueFamilyProperties & operator=( QueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueueFamilyProperties & operator=( VkQueueFamilyProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -58734,24 +79525,43 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkQueueFamilyProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueueFamilyProperties *>( this );
}
- operator VkQueueFamilyProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueueFamilyProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::QueueFlags const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( queueFlags, queueCount, timestampValidBits, minImageTransferGranularity );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueueFamilyProperties const & ) const = default;
#else
bool operator==( QueueFamilyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( queueFlags == rhs.queueFlags ) && ( queueCount == rhs.queueCount ) &&
( timestampValidBits == rhs.timestampValidBits ) &&
( minImageTransferGranularity == rhs.minImageTransferGranularity );
+# endif
}
bool operator!=( QueueFamilyProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58766,14 +79576,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t timestampValidBits = {};
VULKAN_HPP_NAMESPACE::Extent3D minImageTransferGranularity = {};
};
- static_assert( sizeof( QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueueFamilyProperties>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyProperties ) == sizeof( VkQueueFamilyProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueueFamilyProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueueFamilyProperties>::value,
+ "QueueFamilyProperties is not nothrow_move_constructible!" );
struct QueueFamilyProperties2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyProperties2;
+ using NativeType = VkQueueFamilyProperties2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eQueueFamilyProperties2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR QueueFamilyProperties2(
@@ -58788,8 +79603,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 QueueFamilyProperties2 &
- operator=( QueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ QueueFamilyProperties2 & operator=( QueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
QueueFamilyProperties2 & operator=( VkQueueFamilyProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -58797,22 +79611,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkQueueFamilyProperties2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyProperties2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkQueueFamilyProperties2 *>( this );
}
- operator VkQueueFamilyProperties2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkQueueFamilyProperties2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkQueueFamilyProperties2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::QueueFamilyProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, queueFamilyProperties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( QueueFamilyProperties2 const & ) const = default;
#else
bool operator==( QueueFamilyProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyProperties == rhs.queueFamilyProperties );
+# endif
}
bool operator!=( QueueFamilyProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58826,9 +79658,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::QueueFamilyProperties queueFamilyProperties = {};
};
- static_assert( sizeof( QueueFamilyProperties2 ) == sizeof( VkQueueFamilyProperties2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<QueueFamilyProperties2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyProperties2 ) ==
+ sizeof( VkQueueFamilyProperties2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueueFamilyProperties2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueueFamilyProperties2>::value,
+ "QueueFamilyProperties2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eQueueFamilyProperties2>
@@ -58837,9 +79673,123 @@ namespace VULKAN_HPP_NAMESPACE
};
using QueueFamilyProperties2KHR = QueueFamilyProperties2;
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct QueueFamilyQueryResultStatusProperties2KHR
+ {
+ using NativeType = VkQueueFamilyQueryResultStatusProperties2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eQueueFamilyQueryResultStatusProperties2KHR;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ QueueFamilyQueryResultStatusProperties2KHR( VULKAN_HPP_NAMESPACE::Bool32 supported_ = {} ) VULKAN_HPP_NOEXCEPT
+ : supported( supported_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR QueueFamilyQueryResultStatusProperties2KHR(
+ QueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ QueueFamilyQueryResultStatusProperties2KHR( VkQueueFamilyQueryResultStatusProperties2KHR const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : QueueFamilyQueryResultStatusProperties2KHR(
+ *reinterpret_cast<QueueFamilyQueryResultStatusProperties2KHR const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ QueueFamilyQueryResultStatusProperties2KHR &
+ operator=( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ QueueFamilyQueryResultStatusProperties2KHR &
+ operator=( VkQueueFamilyQueryResultStatusProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyQueryResultStatusProperties2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 QueueFamilyQueryResultStatusProperties2KHR &
+ setSupported( VULKAN_HPP_NAMESPACE::Bool32 supported_ ) VULKAN_HPP_NOEXCEPT
+ {
+ supported = supported_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkQueueFamilyQueryResultStatusProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkQueueFamilyQueryResultStatusProperties2KHR *>( this );
+ }
+
+ explicit operator VkQueueFamilyQueryResultStatusProperties2KHR &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkQueueFamilyQueryResultStatusProperties2KHR *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, supported );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( QueueFamilyQueryResultStatusProperties2KHR const & ) const = default;
+# else
+ bool operator==( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supported == rhs.supported );
+# endif
+ }
+
+ bool operator!=( QueueFamilyQueryResultStatusProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eQueueFamilyQueryResultStatusProperties2KHR;
+ void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Bool32 supported = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR ) ==
+ sizeof( VkQueueFamilyQueryResultStatusProperties2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::QueueFamilyQueryResultStatusProperties2KHR>::value,
+ "QueueFamilyQueryResultStatusProperties2KHR is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eQueueFamilyQueryResultStatusProperties2KHR>
+ {
+ using Type = QueueFamilyQueryResultStatusProperties2KHR;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
struct RayTracingShaderGroupCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRayTracingShaderGroupCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eRayTracingShaderGroupCreateInfoKHR;
@@ -58868,8 +79818,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
- operator=( RayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RayTracingShaderGroupCreateInfoKHR &
+ operator=( RayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RayTracingShaderGroupCreateInfoKHR &
operator=( VkRayTracingShaderGroupCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -58879,44 +79829,48 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RayTracingShaderGroupCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RayTracingShaderGroupCreateInfoKHR &
- setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
+ setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- RayTracingShaderGroupCreateInfoKHR & setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
+ setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT
{
generalShader = generalShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoKHR & setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
+ setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT
{
closestHitShader = closestHitShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoKHR & setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
+ setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT
{
anyHitShader = anyHitShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoKHR & setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
+ setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT
{
intersectionShader = intersectionShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoKHR &
setPShaderGroupCaptureReplayHandle( const void * pShaderGroupCaptureReplayHandle_ ) VULKAN_HPP_NOEXCEPT
{
pShaderGroupCaptureReplayHandle = pShaderGroupCaptureReplayHandle_;
@@ -58924,25 +79878,55 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRayTracingShaderGroupCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingShaderGroupCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRayTracingShaderGroupCreateInfoKHR *>( this );
}
- operator VkRayTracingShaderGroupCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingShaderGroupCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRayTracingShaderGroupCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ type,
+ generalShader,
+ closestHitShader,
+ anyHitShader,
+ intersectionShader,
+ pShaderGroupCaptureReplayHandle );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RayTracingShaderGroupCreateInfoKHR const & ) const = default;
#else
bool operator==( RayTracingShaderGroupCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) &&
( generalShader == rhs.generalShader ) && ( closestHitShader == rhs.closestHitShader ) &&
( anyHitShader == rhs.anyHitShader ) && ( intersectionShader == rhs.intersectionShader ) &&
( pShaderGroupCaptureReplayHandle == rhs.pShaderGroupCaptureReplayHandle );
+# endif
}
bool operator!=( RayTracingShaderGroupCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -58962,10 +79946,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t intersectionShader = {};
const void * pShaderGroupCaptureReplayHandle = {};
};
- static_assert( sizeof( RayTracingShaderGroupCreateInfoKHR ) == sizeof( VkRayTracingShaderGroupCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RayTracingShaderGroupCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR ) ==
+ sizeof( VkRayTracingShaderGroupCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR>::value,
+ "RayTracingShaderGroupCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRayTracingShaderGroupCreateInfoKHR>
@@ -58975,7 +79963,9 @@ namespace VULKAN_HPP_NAMESPACE
struct RayTracingPipelineInterfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRayTracingPipelineInterfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eRayTracingPipelineInterfaceCreateInfoKHR;
@@ -58997,8 +79987,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR &
- operator=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RayTracingPipelineInterfaceCreateInfoKHR &
+ operator=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RayTracingPipelineInterfaceCreateInfoKHR &
operator=( VkRayTracingPipelineInterfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -59008,20 +79998,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RayTracingPipelineInterfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RayTracingPipelineInterfaceCreateInfoKHR &
- setMaxPipelineRayPayloadSize( uint32_t maxPipelineRayPayloadSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR &
+ setMaxPipelineRayPayloadSize( uint32_t maxPipelineRayPayloadSize_ ) VULKAN_HPP_NOEXCEPT
{
maxPipelineRayPayloadSize = maxPipelineRayPayloadSize_;
return *this;
}
- RayTracingPipelineInterfaceCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineInterfaceCreateInfoKHR &
setMaxPipelineRayHitAttributeSize( uint32_t maxPipelineRayHitAttributeSize_ ) VULKAN_HPP_NOEXCEPT
{
maxPipelineRayHitAttributeSize = maxPipelineRayHitAttributeSize_;
@@ -59029,24 +80020,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRayTracingPipelineInterfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingPipelineInterfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRayTracingPipelineInterfaceCreateInfoKHR *>( this );
}
- operator VkRayTracingPipelineInterfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingPipelineInterfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRayTracingPipelineInterfaceCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxPipelineRayPayloadSize, maxPipelineRayHitAttributeSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RayTracingPipelineInterfaceCreateInfoKHR const & ) const = default;
#else
bool operator==( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( maxPipelineRayPayloadSize == rhs.maxPipelineRayPayloadSize ) &&
( maxPipelineRayHitAttributeSize == rhs.maxPipelineRayHitAttributeSize );
+# endif
}
bool operator!=( RayTracingPipelineInterfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59061,11 +80068,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxPipelineRayPayloadSize = {};
uint32_t maxPipelineRayHitAttributeSize = {};
};
- static_assert( sizeof( RayTracingPipelineInterfaceCreateInfoKHR ) ==
- sizeof( VkRayTracingPipelineInterfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RayTracingPipelineInterfaceCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR ) ==
+ sizeof( VkRayTracingPipelineInterfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR>::value,
+ "RayTracingPipelineInterfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRayTracingPipelineInterfaceCreateInfoKHR>
@@ -59075,8 +80086,10 @@ namespace VULKAN_HPP_NAMESPACE
struct RayTracingPipelineCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoKHR;
+ using NativeType = VkRayTracingPipelineCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR RayTracingPipelineCreateInfoKHR(
@@ -59143,8 +80156,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
- operator=( RayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RayTracingPipelineCreateInfoKHR &
+ operator=( RayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RayTracingPipelineCreateInfoKHR & operator=( VkRayTracingPipelineCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -59153,25 +80166,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RayTracingPipelineCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RayTracingPipelineCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- RayTracingPipelineCreateInfoKHR & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
{
stageCount = stageCount_;
return *this;
}
- RayTracingPipelineCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT
{
pStages = pStages_;
@@ -59189,13 +80203,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RayTracingPipelineCreateInfoKHR & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT
{
groupCount = groupCount_;
return *this;
}
- RayTracingPipelineCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
setPGroups( const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * pGroups_ ) VULKAN_HPP_NOEXCEPT
{
pGroups = pGroups_;
@@ -59213,75 +80227,119 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RayTracingPipelineCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
setMaxPipelineRayRecursionDepth( uint32_t maxPipelineRayRecursionDepth_ ) VULKAN_HPP_NOEXCEPT
{
maxPipelineRayRecursionDepth = maxPipelineRayRecursionDepth_;
return *this;
}
- RayTracingPipelineCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
setPLibraryInfo( const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * pLibraryInfo_ ) VULKAN_HPP_NOEXCEPT
{
pLibraryInfo = pLibraryInfo_;
return *this;
}
- RayTracingPipelineCreateInfoKHR & setPLibraryInterface(
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setPLibraryInterface(
const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * pLibraryInterface_ ) VULKAN_HPP_NOEXCEPT
{
pLibraryInterface = pLibraryInterface_;
return *this;
}
- RayTracingPipelineCreateInfoKHR & setPDynamicState(
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR & setPDynamicState(
const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * pDynamicState_ ) VULKAN_HPP_NOEXCEPT
{
pDynamicState = pDynamicState_;
return *this;
}
- RayTracingPipelineCreateInfoKHR & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
+ setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
{
layout = layout_;
return *this;
}
- RayTracingPipelineCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineHandle = basePipelineHandle_;
return *this;
}
- RayTracingPipelineCreateInfoKHR & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoKHR &
+ setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineIndex = basePipelineIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRayTracingPipelineCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingPipelineCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRayTracingPipelineCreateInfoKHR *>( this );
}
- operator VkRayTracingPipelineCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingPipelineCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRayTracingPipelineCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoKHR * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PipelineLibraryCreateInfoKHR * const &,
+ const VULKAN_HPP_NAMESPACE::RayTracingPipelineInterfaceCreateInfoKHR * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineDynamicStateCreateInfo * const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayout const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ stageCount,
+ pStages,
+ groupCount,
+ pGroups,
+ maxPipelineRayRecursionDepth,
+ pLibraryInfo,
+ pLibraryInterface,
+ pDynamicState,
+ layout,
+ basePipelineHandle,
+ basePipelineIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RayTracingPipelineCreateInfoKHR const & ) const = default;
#else
bool operator==( RayTracingPipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && ( groupCount == rhs.groupCount ) &&
( pGroups == rhs.pGroups ) && ( maxPipelineRayRecursionDepth == rhs.maxPipelineRayRecursionDepth ) &&
( pLibraryInfo == rhs.pLibraryInfo ) && ( pLibraryInterface == rhs.pLibraryInterface ) &&
( pDynamicState == rhs.pDynamicState ) && ( layout == rhs.layout ) &&
( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex );
+# endif
}
bool operator!=( RayTracingPipelineCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59306,10 +80364,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {};
int32_t basePipelineIndex = {};
};
- static_assert( sizeof( RayTracingPipelineCreateInfoKHR ) == sizeof( VkRayTracingPipelineCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RayTracingPipelineCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR ) ==
+ sizeof( VkRayTracingPipelineCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoKHR>::value,
+ "RayTracingPipelineCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRayTracingPipelineCreateInfoKHR>
@@ -59319,7 +80381,9 @@ namespace VULKAN_HPP_NAMESPACE
struct RayTracingShaderGroupCreateInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRayTracingShaderGroupCreateInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eRayTracingShaderGroupCreateInfoNV;
@@ -59346,8 +80410,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV &
- operator=( RayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RayTracingShaderGroupCreateInfoNV &
+ operator=( RayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RayTracingShaderGroupCreateInfoNV & operator=( VkRayTracingShaderGroupCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -59356,62 +80420,88 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RayTracingShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RayTracingShaderGroupCreateInfoNV &
- setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV &
+ setType( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR type_ ) VULKAN_HPP_NOEXCEPT
{
type = type_;
return *this;
}
- RayTracingShaderGroupCreateInfoNV & setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV &
+ setGeneralShader( uint32_t generalShader_ ) VULKAN_HPP_NOEXCEPT
{
generalShader = generalShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoNV & setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV &
+ setClosestHitShader( uint32_t closestHitShader_ ) VULKAN_HPP_NOEXCEPT
{
closestHitShader = closestHitShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoNV & setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV &
+ setAnyHitShader( uint32_t anyHitShader_ ) VULKAN_HPP_NOEXCEPT
{
anyHitShader = anyHitShader_;
return *this;
}
- RayTracingShaderGroupCreateInfoNV & setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingShaderGroupCreateInfoNV &
+ setIntersectionShader( uint32_t intersectionShader_ ) VULKAN_HPP_NOEXCEPT
{
intersectionShader = intersectionShader_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRayTracingShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingShaderGroupCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRayTracingShaderGroupCreateInfoNV *>( this );
}
- operator VkRayTracingShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingShaderGroupCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRayTracingShaderGroupCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RayTracingShaderGroupTypeKHR const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, type, generalShader, closestHitShader, anyHitShader, intersectionShader );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RayTracingShaderGroupCreateInfoNV const & ) const = default;
#else
bool operator==( RayTracingShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( type == rhs.type ) &&
( generalShader == rhs.generalShader ) && ( closestHitShader == rhs.closestHitShader ) &&
( anyHitShader == rhs.anyHitShader ) && ( intersectionShader == rhs.intersectionShader );
+# endif
}
bool operator!=( RayTracingShaderGroupCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59430,10 +80520,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t anyHitShader = {};
uint32_t intersectionShader = {};
};
- static_assert( sizeof( RayTracingShaderGroupCreateInfoNV ) == sizeof( VkRayTracingShaderGroupCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RayTracingShaderGroupCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV ) ==
+ sizeof( VkRayTracingShaderGroupCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV>::value,
+ "RayTracingShaderGroupCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRayTracingShaderGroupCreateInfoNV>
@@ -59443,8 +80537,10 @@ namespace VULKAN_HPP_NAMESPACE
struct RayTracingPipelineCreateInfoNV
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoNV;
+ using NativeType = VkRayTracingPipelineCreateInfoNV;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRayTracingPipelineCreateInfoNV;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -59499,8 +80595,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
- operator=( RayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RayTracingPipelineCreateInfoNV &
+ operator=( RayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RayTracingPipelineCreateInfoNV & operator=( VkRayTracingPipelineCreateInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -59509,25 +80605,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RayTracingPipelineCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RayTracingPipelineCreateInfoNV & setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
+ setFlags( VULKAN_HPP_NAMESPACE::PipelineCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- RayTracingPipelineCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setStageCount( uint32_t stageCount_ ) VULKAN_HPP_NOEXCEPT
{
stageCount = stageCount_;
return *this;
}
- RayTracingPipelineCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
setPStages( const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * pStages_ ) VULKAN_HPP_NOEXCEPT
{
pStages = pStages_;
@@ -59545,13 +80642,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RayTracingPipelineCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV & setGroupCount( uint32_t groupCount_ ) VULKAN_HPP_NOEXCEPT
{
groupCount = groupCount_;
return *this;
}
- RayTracingPipelineCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
setPGroups( const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * pGroups_ ) VULKAN_HPP_NOEXCEPT
{
pGroups = pGroups_;
@@ -59569,51 +80666,90 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RayTracingPipelineCreateInfoNV & setMaxRecursionDepth( uint32_t maxRecursionDepth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
+ setMaxRecursionDepth( uint32_t maxRecursionDepth_ ) VULKAN_HPP_NOEXCEPT
{
maxRecursionDepth = maxRecursionDepth_;
return *this;
}
- RayTracingPipelineCreateInfoNV & setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
+ setLayout( VULKAN_HPP_NAMESPACE::PipelineLayout layout_ ) VULKAN_HPP_NOEXCEPT
{
layout = layout_;
return *this;
}
- RayTracingPipelineCreateInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
setBasePipelineHandle( VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineHandle = basePipelineHandle_;
return *this;
}
- RayTracingPipelineCreateInfoNV & setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RayTracingPipelineCreateInfoNV &
+ setBasePipelineIndex( int32_t basePipelineIndex_ ) VULKAN_HPP_NOEXCEPT
{
basePipelineIndex = basePipelineIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRayTracingPipelineCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingPipelineCreateInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRayTracingPipelineCreateInfoNV *>( this );
}
- operator VkRayTracingPipelineCreateInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRayTracingPipelineCreateInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRayTracingPipelineCreateInfoNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::PipelineCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::PipelineShaderStageCreateInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::RayTracingShaderGroupCreateInfoNV * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::PipelineLayout const &,
+ VULKAN_HPP_NAMESPACE::Pipeline const &,
+ int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ stageCount,
+ pStages,
+ groupCount,
+ pGroups,
+ maxRecursionDepth,
+ layout,
+ basePipelineHandle,
+ basePipelineIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RayTracingPipelineCreateInfoNV const & ) const = default;
#else
bool operator==( RayTracingPipelineCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( stageCount == rhs.stageCount ) && ( pStages == rhs.pStages ) && ( groupCount == rhs.groupCount ) &&
( pGroups == rhs.pGroups ) && ( maxRecursionDepth == rhs.maxRecursionDepth ) && ( layout == rhs.layout ) &&
( basePipelineHandle == rhs.basePipelineHandle ) && ( basePipelineIndex == rhs.basePipelineIndex );
+# endif
}
bool operator!=( RayTracingPipelineCreateInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59635,10 +80771,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Pipeline basePipelineHandle = {};
int32_t basePipelineIndex = {};
};
- static_assert( sizeof( RayTracingPipelineCreateInfoNV ) == sizeof( VkRayTracingPipelineCreateInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RayTracingPipelineCreateInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV ) ==
+ sizeof( VkRayTracingPipelineCreateInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RayTracingPipelineCreateInfoNV>::value,
+ "RayTracingPipelineCreateInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRayTracingPipelineCreateInfoNV>
@@ -59648,6 +80788,8 @@ namespace VULKAN_HPP_NAMESPACE
struct RefreshCycleDurationGOOGLE
{
+ using NativeType = VkRefreshCycleDurationGOOGLE;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR RefreshCycleDurationGOOGLE( uint64_t refreshDuration_ = {} ) VULKAN_HPP_NOEXCEPT
: refreshDuration( refreshDuration_ )
@@ -59661,8 +80803,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RefreshCycleDurationGOOGLE &
- operator=( RefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RefreshCycleDurationGOOGLE & operator=( RefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RefreshCycleDurationGOOGLE & operator=( VkRefreshCycleDurationGOOGLE const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -59670,22 +80811,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkRefreshCycleDurationGOOGLE const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRefreshCycleDurationGOOGLE const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRefreshCycleDurationGOOGLE *>( this );
}
- operator VkRefreshCycleDurationGOOGLE &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRefreshCycleDurationGOOGLE &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRefreshCycleDurationGOOGLE *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( refreshDuration );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RefreshCycleDurationGOOGLE const & ) const = default;
#else
bool operator==( RefreshCycleDurationGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( refreshDuration == rhs.refreshDuration );
+# endif
}
bool operator!=( RefreshCycleDurationGOOGLE const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59697,15 +80854,20 @@ namespace VULKAN_HPP_NAMESPACE
public:
uint64_t refreshDuration = {};
};
- static_assert( sizeof( RefreshCycleDurationGOOGLE ) == sizeof( VkRefreshCycleDurationGOOGLE ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RefreshCycleDurationGOOGLE>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE ) ==
+ sizeof( VkRefreshCycleDurationGOOGLE ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RefreshCycleDurationGOOGLE>::value,
+ "RefreshCycleDurationGOOGLE is not nothrow_move_constructible!" );
struct RenderPassAttachmentBeginInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassAttachmentBeginInfo;
+ using NativeType = VkRenderPassAttachmentBeginInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassAttachmentBeginInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -59730,8 +80892,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo &
- operator=( RenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassAttachmentBeginInfo &
+ operator=( RenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassAttachmentBeginInfo & operator=( VkRenderPassAttachmentBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -59740,20 +80902,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassAttachmentBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassAttachmentBeginInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo &
+ setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentCount = attachmentCount_;
return *this;
}
- RenderPassAttachmentBeginInfo &
- setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassAttachmentBeginInfo &
+ setPAttachments( const VULKAN_HPP_NAMESPACE::ImageView * pAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pAttachments = pAttachments_;
return *this;
@@ -59771,23 +80934,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassAttachmentBeginInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassAttachmentBeginInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassAttachmentBeginInfo *>( this );
}
- operator VkRenderPassAttachmentBeginInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassAttachmentBeginInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassAttachmentBeginInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageView * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, attachmentCount, pAttachments );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassAttachmentBeginInfo const & ) const = default;
#else
bool operator==( RenderPassAttachmentBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( attachmentCount == rhs.attachmentCount ) &&
( pAttachments == rhs.pAttachments );
+# endif
}
bool operator!=( RenderPassAttachmentBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59802,10 +80984,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t attachmentCount = {};
const VULKAN_HPP_NAMESPACE::ImageView * pAttachments = {};
};
- static_assert( sizeof( RenderPassAttachmentBeginInfo ) == sizeof( VkRenderPassAttachmentBeginInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassAttachmentBeginInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo ) ==
+ sizeof( VkRenderPassAttachmentBeginInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassAttachmentBeginInfo>::value,
+ "RenderPassAttachmentBeginInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassAttachmentBeginInfo>
@@ -59816,8 +81002,10 @@ namespace VULKAN_HPP_NAMESPACE
struct RenderPassBeginInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassBeginInfo;
+ using NativeType = VkRenderPassBeginInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassBeginInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
@@ -59854,8 +81042,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo &
- operator=( RenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassBeginInfo & operator=( RenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassBeginInfo & operator=( VkRenderPassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -59864,37 +81051,41 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassBeginInfo & setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo &
+ setRenderPass( VULKAN_HPP_NAMESPACE::RenderPass renderPass_ ) VULKAN_HPP_NOEXCEPT
{
renderPass = renderPass_;
return *this;
}
- RenderPassBeginInfo & setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo &
+ setFramebuffer( VULKAN_HPP_NAMESPACE::Framebuffer framebuffer_ ) VULKAN_HPP_NOEXCEPT
{
framebuffer = framebuffer_;
return *this;
}
- RenderPassBeginInfo & setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo &
+ setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT
{
renderArea = renderArea_;
return *this;
}
- RenderPassBeginInfo & setClearValueCount( uint32_t clearValueCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo & setClearValueCount( uint32_t clearValueCount_ ) VULKAN_HPP_NOEXCEPT
{
clearValueCount = clearValueCount_;
return *this;
}
- RenderPassBeginInfo & setPClearValues( const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassBeginInfo &
+ setPClearValues( const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues_ ) VULKAN_HPP_NOEXCEPT
{
pClearValues = pClearValues_;
return *this;
@@ -59912,24 +81103,46 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassBeginInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassBeginInfo *>( this );
}
- operator VkRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassBeginInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassBeginInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RenderPass const &,
+ VULKAN_HPP_NAMESPACE::Framebuffer const &,
+ VULKAN_HPP_NAMESPACE::Rect2D const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ClearValue * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, renderPass, framebuffer, renderArea, clearValueCount, pClearValues );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassBeginInfo const & ) const = default;
#else
bool operator==( RenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) &&
( framebuffer == rhs.framebuffer ) && ( renderArea == rhs.renderArea ) &&
( clearValueCount == rhs.clearValueCount ) && ( pClearValues == rhs.pClearValues );
+# endif
}
bool operator!=( RenderPassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -59947,9 +81160,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t clearValueCount = {};
const VULKAN_HPP_NAMESPACE::ClearValue * pClearValues = {};
};
- static_assert( sizeof( RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassBeginInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassBeginInfo ) == sizeof( VkRenderPassBeginInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassBeginInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassBeginInfo>::value,
+ "RenderPassBeginInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassBeginInfo>
@@ -59959,6 +81175,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SubpassDescription
{
+ using NativeType = VkSubpassDescription;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubpassDescription(
VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ = {},
@@ -60026,8 +81244,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
- operator=( SubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassDescription & operator=( SubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassDescription & operator=( VkSubpassDescription const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -60036,26 +81253,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassDescription & setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
+ setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- SubpassDescription &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT
{
pipelineBindPoint = pipelineBindPoint_;
return *this;
}
- SubpassDescription & setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
+ setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
inputAttachmentCount = inputAttachmentCount_;
return *this;
}
- SubpassDescription &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
setPInputAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pInputAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pInputAttachments = pInputAttachments_;
@@ -60073,13 +81292,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubpassDescription & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
+ setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
colorAttachmentCount = colorAttachmentCount_;
return *this;
}
- SubpassDescription &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
setPColorAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pColorAttachments = pColorAttachments_;
@@ -60097,7 +81317,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubpassDescription & setPResolveAttachments(
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPResolveAttachments(
const VULKAN_HPP_NAMESPACE::AttachmentReference * pResolveAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pResolveAttachments = pResolveAttachments_;
@@ -60115,20 +81335,22 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubpassDescription & setPDepthStencilAttachment(
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription & setPDepthStencilAttachment(
const VULKAN_HPP_NAMESPACE::AttachmentReference * pDepthStencilAttachment_ ) VULKAN_HPP_NOEXCEPT
{
pDepthStencilAttachment = pDepthStencilAttachment_;
return *this;
}
- SubpassDescription & setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
+ setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
preserveAttachmentCount = preserveAttachmentCount_;
return *this;
}
- SubpassDescription & setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription &
+ setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pPreserveAttachments = pPreserveAttachments_;
return *this;
@@ -60145,21 +81367,54 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassDescription const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDescription const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassDescription *>( this );
}
- operator VkSubpassDescription &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDescription &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassDescription *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags const &,
+ VULKAN_HPP_NAMESPACE::PipelineBindPoint const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference * const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference * const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( flags,
+ pipelineBindPoint,
+ inputAttachmentCount,
+ pInputAttachments,
+ colorAttachmentCount,
+ pColorAttachments,
+ pResolveAttachments,
+ pDepthStencilAttachment,
+ preserveAttachmentCount,
+ pPreserveAttachments );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassDescription const & ) const = default;
#else
bool operator==( SubpassDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( flags == rhs.flags ) && ( pipelineBindPoint == rhs.pipelineBindPoint ) &&
( inputAttachmentCount == rhs.inputAttachmentCount ) && ( pInputAttachments == rhs.pInputAttachments ) &&
( colorAttachmentCount == rhs.colorAttachmentCount ) && ( pColorAttachments == rhs.pColorAttachments ) &&
@@ -60167,6 +81422,7 @@ namespace VULKAN_HPP_NAMESPACE
( pDepthStencilAttachment == rhs.pDepthStencilAttachment ) &&
( preserveAttachmentCount == rhs.preserveAttachmentCount ) &&
( pPreserveAttachments == rhs.pPreserveAttachments );
+# endif
}
bool operator!=( SubpassDescription const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -60187,12 +81443,17 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t preserveAttachmentCount = {};
const uint32_t * pPreserveAttachments = {};
};
- static_assert( sizeof( SubpassDescription ) == sizeof( VkSubpassDescription ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassDescription>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDescription ) == sizeof( VkSubpassDescription ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassDescription>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassDescription>::value,
+ "SubpassDescription is not nothrow_move_constructible!" );
struct SubpassDependency
{
+ using NativeType = VkSubpassDependency;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SubpassDependency( uint32_t srcSubpass_ = {},
@@ -60218,8 +81479,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassDependency &
- operator=( SubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassDependency & operator=( SubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassDependency & operator=( VkSubpassDependency const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -60228,68 +81488,96 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassDependency & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT
{
srcSubpass = srcSubpass_;
return *this;
}
- SubpassDependency & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT
{
dstSubpass = dstSubpass_;
return *this;
}
- SubpassDependency & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency &
+ setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT
{
srcStageMask = srcStageMask_;
return *this;
}
- SubpassDependency & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency &
+ setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT
{
dstStageMask = dstStageMask_;
return *this;
}
- SubpassDependency & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- SubpassDependency & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
- SubpassDependency & setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency &
+ setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT
{
dependencyFlags = dependencyFlags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassDependency const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDependency const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassDependency *>( this );
}
- operator VkSubpassDependency &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDependency &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassDependency *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::DependencyFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ srcSubpass, dstSubpass, srcStageMask, dstStageMask, srcAccessMask, dstAccessMask, dependencyFlags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassDependency const & ) const = default;
#else
bool operator==( SubpassDependency const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( srcSubpass == rhs.srcSubpass ) && ( dstSubpass == rhs.dstSubpass ) &&
( srcStageMask == rhs.srcStageMask ) && ( dstStageMask == rhs.dstStageMask ) &&
( srcAccessMask == rhs.srcAccessMask ) && ( dstAccessMask == rhs.dstAccessMask ) &&
( dependencyFlags == rhs.dependencyFlags );
+# endif
}
bool operator!=( SubpassDependency const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -60307,14 +81595,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask = {};
VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {};
};
- static_assert( sizeof( SubpassDependency ) == sizeof( VkSubpassDependency ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassDependency>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDependency ) == sizeof( VkSubpassDependency ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassDependency>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassDependency>::value,
+ "SubpassDependency is not nothrow_move_constructible!" );
struct RenderPassCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo;
+ using NativeType = VkRenderPassCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -60360,8 +81653,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo &
- operator=( RenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassCreateInfo & operator=( RenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassCreateInfo & operator=( VkRenderPassCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -60370,25 +81662,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- RenderPassCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentCount = attachmentCount_;
return *this;
}
- RenderPassCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo &
setPAttachments( const VULKAN_HPP_NAMESPACE::AttachmentDescription * pAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pAttachments = pAttachments_;
@@ -60406,13 +81699,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT
{
subpassCount = subpassCount_;
return *this;
}
- RenderPassCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo &
setPSubpasses( const VULKAN_HPP_NAMESPACE::SubpassDescription * pSubpasses_ ) VULKAN_HPP_NOEXCEPT
{
pSubpasses = pSubpasses_;
@@ -60430,13 +81723,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT
{
dependencyCount = dependencyCount_;
return *this;
}
- RenderPassCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo &
setPDependencies( const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies_ ) VULKAN_HPP_NOEXCEPT
{
pDependencies = pDependencies_;
@@ -60455,25 +81748,50 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassCreateInfo *>( this );
}
- operator VkRenderPassCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RenderPassCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentDescription * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SubpassDescription * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SubpassDependency * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, flags, attachmentCount, pAttachments, subpassCount, pSubpasses, dependencyCount, pDependencies );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassCreateInfo const & ) const = default;
#else
bool operator==( RenderPassCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) &&
( subpassCount == rhs.subpassCount ) && ( pSubpasses == rhs.pSubpasses ) &&
( dependencyCount == rhs.dependencyCount ) && ( pDependencies == rhs.pDependencies );
+# endif
}
bool operator!=( RenderPassCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -60493,9 +81811,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t dependencyCount = {};
const VULKAN_HPP_NAMESPACE::SubpassDependency * pDependencies = {};
};
- static_assert( sizeof( RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo ) == sizeof( VkRenderPassCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassCreateInfo>::value,
+ "RenderPassCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassCreateInfo>
@@ -60505,8 +81826,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SubpassDescription2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDescription2;
+ using NativeType = VkSubpassDescription2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDescription2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubpassDescription2(
@@ -60579,8 +81902,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
- operator=( SubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassDescription2 & operator=( SubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassDescription2 & operator=( VkSubpassDescription2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -60589,38 +81911,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SubpassDescription2 & setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
+ setFlags( VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- SubpassDescription2 &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
setPipelineBindPoint( VULKAN_HPP_NAMESPACE::PipelineBindPoint pipelineBindPoint_ ) VULKAN_HPP_NOEXCEPT
{
pipelineBindPoint = pipelineBindPoint_;
return *this;
}
- SubpassDescription2 & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT
{
viewMask = viewMask_;
return *this;
}
- SubpassDescription2 & setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
+ setInputAttachmentCount( uint32_t inputAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
inputAttachmentCount = inputAttachmentCount_;
return *this;
}
- SubpassDescription2 &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
setPInputAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pInputAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pInputAttachments = pInputAttachments_;
@@ -60638,13 +81962,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubpassDescription2 & setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
+ setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
colorAttachmentCount = colorAttachmentCount_;
return *this;
}
- SubpassDescription2 &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
setPColorAttachments( const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pColorAttachments = pColorAttachments_;
@@ -60662,7 +81987,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubpassDescription2 & setPResolveAttachments(
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPResolveAttachments(
const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pResolveAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pResolveAttachments = pResolveAttachments_;
@@ -60680,20 +82005,22 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubpassDescription2 & setPDepthStencilAttachment(
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 & setPDepthStencilAttachment(
const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilAttachment_ ) VULKAN_HPP_NOEXCEPT
{
pDepthStencilAttachment = pDepthStencilAttachment_;
return *this;
}
- SubpassDescription2 & setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
+ setPreserveAttachmentCount( uint32_t preserveAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
preserveAttachmentCount = preserveAttachmentCount_;
return *this;
}
- SubpassDescription2 & setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescription2 &
+ setPPreserveAttachments( const uint32_t * pPreserveAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pPreserveAttachments = pPreserveAttachments_;
return *this;
@@ -60710,21 +82037,60 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassDescription2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDescription2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassDescription2 *>( this );
}
- operator VkSubpassDescription2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDescription2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassDescription2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SubpassDescriptionFlags const &,
+ VULKAN_HPP_NAMESPACE::PipelineBindPoint const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference2 * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference2 * const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference2 * const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference2 * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ pipelineBindPoint,
+ viewMask,
+ inputAttachmentCount,
+ pInputAttachments,
+ colorAttachmentCount,
+ pColorAttachments,
+ pResolveAttachments,
+ pDepthStencilAttachment,
+ preserveAttachmentCount,
+ pPreserveAttachments );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassDescription2 const & ) const = default;
#else
bool operator==( SubpassDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pipelineBindPoint == rhs.pipelineBindPoint ) && ( viewMask == rhs.viewMask ) &&
( inputAttachmentCount == rhs.inputAttachmentCount ) && ( pInputAttachments == rhs.pInputAttachments ) &&
@@ -60733,6 +82099,7 @@ namespace VULKAN_HPP_NAMESPACE
( pDepthStencilAttachment == rhs.pDepthStencilAttachment ) &&
( preserveAttachmentCount == rhs.preserveAttachmentCount ) &&
( pPreserveAttachments == rhs.pPreserveAttachments );
+# endif
}
bool operator!=( SubpassDescription2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -60756,9 +82123,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t preserveAttachmentCount = {};
const uint32_t * pPreserveAttachments = {};
};
- static_assert( sizeof( SubpassDescription2 ) == sizeof( VkSubpassDescription2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassDescription2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDescription2 ) == sizeof( VkSubpassDescription2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassDescription2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassDescription2>::value,
+ "SubpassDescription2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubpassDescription2>
@@ -60769,8 +82139,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SubpassDependency2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDependency2;
+ using NativeType = VkSubpassDependency2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassDependency2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubpassDependency2( uint32_t srcSubpass_ = {},
@@ -60798,8 +82170,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 &
- operator=( SubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassDependency2 & operator=( SubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassDependency2 & operator=( VkSubpassDependency2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -60808,82 +82179,120 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassDependency2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SubpassDependency2 & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setSrcSubpass( uint32_t srcSubpass_ ) VULKAN_HPP_NOEXCEPT
{
srcSubpass = srcSubpass_;
return *this;
}
- SubpassDependency2 & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setDstSubpass( uint32_t dstSubpass_ ) VULKAN_HPP_NOEXCEPT
{
dstSubpass = dstSubpass_;
return *this;
}
- SubpassDependency2 & setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 &
+ setSrcStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags srcStageMask_ ) VULKAN_HPP_NOEXCEPT
{
srcStageMask = srcStageMask_;
return *this;
}
- SubpassDependency2 & setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 &
+ setDstStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags dstStageMask_ ) VULKAN_HPP_NOEXCEPT
{
dstStageMask = dstStageMask_;
return *this;
}
- SubpassDependency2 & setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 &
+ setSrcAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags srcAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
srcAccessMask = srcAccessMask_;
return *this;
}
- SubpassDependency2 & setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 &
+ setDstAccessMask( VULKAN_HPP_NAMESPACE::AccessFlags dstAccessMask_ ) VULKAN_HPP_NOEXCEPT
{
dstAccessMask = dstAccessMask_;
return *this;
}
- SubpassDependency2 &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 &
setDependencyFlags( VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags_ ) VULKAN_HPP_NOEXCEPT
{
dependencyFlags = dependencyFlags_;
return *this;
}
- SubpassDependency2 & setViewOffset( int32_t viewOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDependency2 & setViewOffset( int32_t viewOffset_ ) VULKAN_HPP_NOEXCEPT
{
viewOffset = viewOffset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassDependency2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDependency2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassDependency2 *>( this );
}
- operator VkSubpassDependency2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDependency2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassDependency2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::AccessFlags const &,
+ VULKAN_HPP_NAMESPACE::DependencyFlags const &,
+ int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ srcSubpass,
+ dstSubpass,
+ srcStageMask,
+ dstStageMask,
+ srcAccessMask,
+ dstAccessMask,
+ dependencyFlags,
+ viewOffset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassDependency2 const & ) const = default;
#else
bool operator==( SubpassDependency2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcSubpass == rhs.srcSubpass ) &&
( dstSubpass == rhs.dstSubpass ) && ( srcStageMask == rhs.srcStageMask ) &&
( dstStageMask == rhs.dstStageMask ) && ( srcAccessMask == rhs.srcAccessMask ) &&
( dstAccessMask == rhs.dstAccessMask ) && ( dependencyFlags == rhs.dependencyFlags ) &&
( viewOffset == rhs.viewOffset );
+# endif
}
bool operator!=( SubpassDependency2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -60904,9 +82313,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DependencyFlags dependencyFlags = {};
int32_t viewOffset = {};
};
- static_assert( sizeof( SubpassDependency2 ) == sizeof( VkSubpassDependency2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassDependency2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDependency2 ) == sizeof( VkSubpassDependency2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassDependency2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassDependency2>::value,
+ "SubpassDependency2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubpassDependency2>
@@ -60917,8 +82329,10 @@ namespace VULKAN_HPP_NAMESPACE
struct RenderPassCreateInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo2;
+ using NativeType = VkRenderPassCreateInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassCreateInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR RenderPassCreateInfo2( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ = {},
@@ -60970,8 +82384,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
- operator=( RenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassCreateInfo2 & operator=( RenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassCreateInfo2 & operator=( VkRenderPassCreateInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -60980,25 +82393,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassCreateInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassCreateInfo2 & setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
+ setFlags( VULKAN_HPP_NAMESPACE::RenderPassCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- RenderPassCreateInfo2 & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setAttachmentCount( uint32_t attachmentCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentCount = attachmentCount_;
return *this;
}
- RenderPassCreateInfo2 &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
setPAttachments( const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * pAttachments_ ) VULKAN_HPP_NOEXCEPT
{
pAttachments = pAttachments_;
@@ -61016,13 +82430,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassCreateInfo2 & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT
{
subpassCount = subpassCount_;
return *this;
}
- RenderPassCreateInfo2 &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
setPSubpasses( const VULKAN_HPP_NAMESPACE::SubpassDescription2 * pSubpasses_ ) VULKAN_HPP_NOEXCEPT
{
pSubpasses = pSubpasses_;
@@ -61040,13 +82454,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassCreateInfo2 & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT
{
dependencyCount = dependencyCount_;
return *this;
}
- RenderPassCreateInfo2 &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
setPDependencies( const VULKAN_HPP_NAMESPACE::SubpassDependency2 * pDependencies_ ) VULKAN_HPP_NOEXCEPT
{
pDependencies = pDependencies_;
@@ -61064,13 +82478,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassCreateInfo2 & setCorrelatedViewMaskCount( uint32_t correlatedViewMaskCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
+ setCorrelatedViewMaskCount( uint32_t correlatedViewMaskCount_ ) VULKAN_HPP_NOEXCEPT
{
correlatedViewMaskCount = correlatedViewMaskCount_;
return *this;
}
- RenderPassCreateInfo2 & setPCorrelatedViewMasks( const uint32_t * pCorrelatedViewMasks_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassCreateInfo2 &
+ setPCorrelatedViewMasks( const uint32_t * pCorrelatedViewMasks_ ) VULKAN_HPP_NOEXCEPT
{
pCorrelatedViewMasks = pCorrelatedViewMasks_;
return *this;
@@ -61087,27 +82503,63 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassCreateInfo2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassCreateInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassCreateInfo2 *>( this );
}
- operator VkRenderPassCreateInfo2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassCreateInfo2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassCreateInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RenderPassCreateFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentDescription2 * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SubpassDescription2 * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SubpassDependency2 * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ attachmentCount,
+ pAttachments,
+ subpassCount,
+ pSubpasses,
+ dependencyCount,
+ pDependencies,
+ correlatedViewMaskCount,
+ pCorrelatedViewMasks );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassCreateInfo2 const & ) const = default;
#else
bool operator==( RenderPassCreateInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( attachmentCount == rhs.attachmentCount ) && ( pAttachments == rhs.pAttachments ) &&
( subpassCount == rhs.subpassCount ) && ( pSubpasses == rhs.pSubpasses ) &&
( dependencyCount == rhs.dependencyCount ) && ( pDependencies == rhs.pDependencies ) &&
( correlatedViewMaskCount == rhs.correlatedViewMaskCount ) &&
( pCorrelatedViewMasks == rhs.pCorrelatedViewMasks );
+# endif
}
bool operator!=( RenderPassCreateInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61129,9 +82581,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t correlatedViewMaskCount = {};
const uint32_t * pCorrelatedViewMasks = {};
};
- static_assert( sizeof( RenderPassCreateInfo2 ) == sizeof( VkRenderPassCreateInfo2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassCreateInfo2>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2 ) == sizeof( VkRenderPassCreateInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassCreateInfo2>::value,
+ "RenderPassCreateInfo2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassCreateInfo2>
@@ -61142,7 +82597,9 @@ namespace VULKAN_HPP_NAMESPACE
struct RenderPassFragmentDensityMapCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRenderPassFragmentDensityMapCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eRenderPassFragmentDensityMapCreateInfoEXT;
@@ -61162,8 +82619,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT &
- operator=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassFragmentDensityMapCreateInfoEXT &
+ operator=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassFragmentDensityMapCreateInfoEXT &
operator=( VkRenderPassFragmentDensityMapCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -61173,13 +82630,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassFragmentDensityMapCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassFragmentDensityMapCreateInfoEXT & setFragmentDensityMapAttachment(
+ VULKAN_HPP_CONSTEXPR_14 RenderPassFragmentDensityMapCreateInfoEXT & setFragmentDensityMapAttachment(
VULKAN_HPP_NAMESPACE::AttachmentReference const & fragmentDensityMapAttachment_ ) VULKAN_HPP_NOEXCEPT
{
fragmentDensityMapAttachment = fragmentDensityMapAttachment_;
@@ -61187,23 +82645,41 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassFragmentDensityMapCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassFragmentDensityMapCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT *>( this );
}
- operator VkRenderPassFragmentDensityMapCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassFragmentDensityMapCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::AttachmentReference const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentDensityMapAttachment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassFragmentDensityMapCreateInfoEXT const & ) const = default;
#else
bool operator==( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( fragmentDensityMapAttachment == rhs.fragmentDensityMapAttachment );
+# endif
}
bool operator!=( RenderPassFragmentDensityMapCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61217,11 +82693,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::AttachmentReference fragmentDensityMapAttachment = {};
};
- static_assert( sizeof( RenderPassFragmentDensityMapCreateInfoEXT ) ==
- sizeof( VkRenderPassFragmentDensityMapCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassFragmentDensityMapCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT ) ==
+ sizeof( VkRenderPassFragmentDensityMapCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassFragmentDensityMapCreateInfoEXT>::value,
+ "RenderPassFragmentDensityMapCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassFragmentDensityMapCreateInfoEXT>
@@ -61231,7 +82711,9 @@ namespace VULKAN_HPP_NAMESPACE
struct RenderPassInputAttachmentAspectCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRenderPassInputAttachmentAspectCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eRenderPassInputAttachmentAspectCreateInfo;
@@ -61262,8 +82744,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo &
- operator=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassInputAttachmentAspectCreateInfo &
+ operator=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassInputAttachmentAspectCreateInfo &
operator=( VkRenderPassInputAttachmentAspectCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -61273,20 +82755,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassInputAttachmentAspectCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassInputAttachmentAspectCreateInfo &
- setAspectReferenceCount( uint32_t aspectReferenceCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo &
+ setAspectReferenceCount( uint32_t aspectReferenceCount_ ) VULKAN_HPP_NOEXCEPT
{
aspectReferenceCount = aspectReferenceCount_;
return *this;
}
- RenderPassInputAttachmentAspectCreateInfo & setPAspectReferences(
+ VULKAN_HPP_CONSTEXPR_14 RenderPassInputAttachmentAspectCreateInfo & setPAspectReferences(
const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences_ ) VULKAN_HPP_NOEXCEPT
{
pAspectReferences = pAspectReferences_;
@@ -61305,23 +82788,42 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassInputAttachmentAspectCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassInputAttachmentAspectCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo *>( this );
}
- operator VkRenderPassInputAttachmentAspectCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassInputAttachmentAspectCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, aspectReferenceCount, pAspectReferences );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassInputAttachmentAspectCreateInfo const & ) const = default;
#else
bool operator==( RenderPassInputAttachmentAspectCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( aspectReferenceCount == rhs.aspectReferenceCount ) &&
( pAspectReferences == rhs.pAspectReferences );
+# endif
}
bool operator!=( RenderPassInputAttachmentAspectCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61336,11 +82838,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t aspectReferenceCount = {};
const VULKAN_HPP_NAMESPACE::InputAttachmentAspectReference * pAspectReferences = {};
};
- static_assert( sizeof( RenderPassInputAttachmentAspectCreateInfo ) ==
- sizeof( VkRenderPassInputAttachmentAspectCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassInputAttachmentAspectCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo ) ==
+ sizeof( VkRenderPassInputAttachmentAspectCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassInputAttachmentAspectCreateInfo>::value,
+ "RenderPassInputAttachmentAspectCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassInputAttachmentAspectCreateInfo>
@@ -61351,8 +82857,10 @@ namespace VULKAN_HPP_NAMESPACE
struct RenderPassMultiviewCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassMultiviewCreateInfo;
+ using NativeType = VkRenderPassMultiviewCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassMultiviewCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR RenderPassMultiviewCreateInfo( uint32_t subpassCount_ = {},
@@ -61391,8 +82899,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
- operator=( RenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassMultiviewCreateInfo &
+ operator=( RenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassMultiviewCreateInfo & operator=( VkRenderPassMultiviewCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -61401,19 +82909,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassMultiviewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassMultiviewCreateInfo & setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
+ setSubpassCount( uint32_t subpassCount_ ) VULKAN_HPP_NOEXCEPT
{
subpassCount = subpassCount_;
return *this;
}
- RenderPassMultiviewCreateInfo & setPViewMasks( const uint32_t * pViewMasks_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
+ setPViewMasks( const uint32_t * pViewMasks_ ) VULKAN_HPP_NOEXCEPT
{
pViewMasks = pViewMasks_;
return *this;
@@ -61429,13 +82939,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassMultiviewCreateInfo & setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
+ setDependencyCount( uint32_t dependencyCount_ ) VULKAN_HPP_NOEXCEPT
{
dependencyCount = dependencyCount_;
return *this;
}
- RenderPassMultiviewCreateInfo & setPViewOffsets( const int32_t * pViewOffsets_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
+ setPViewOffsets( const int32_t * pViewOffsets_ ) VULKAN_HPP_NOEXCEPT
{
pViewOffsets = pViewOffsets_;
return *this;
@@ -61451,13 +82963,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassMultiviewCreateInfo & setCorrelationMaskCount( uint32_t correlationMaskCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
+ setCorrelationMaskCount( uint32_t correlationMaskCount_ ) VULKAN_HPP_NOEXCEPT
{
correlationMaskCount = correlationMaskCount_;
return *this;
}
- RenderPassMultiviewCreateInfo & setPCorrelationMasks( const uint32_t * pCorrelationMasks_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassMultiviewCreateInfo &
+ setPCorrelationMasks( const uint32_t * pCorrelationMasks_ ) VULKAN_HPP_NOEXCEPT
{
pCorrelationMasks = pCorrelationMasks_;
return *this;
@@ -61474,25 +82988,55 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassMultiviewCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassMultiviewCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassMultiviewCreateInfo *>( this );
}
- operator VkRenderPassMultiviewCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassMultiviewCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassMultiviewCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ uint32_t const &,
+ const int32_t * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ subpassCount,
+ pViewMasks,
+ dependencyCount,
+ pViewOffsets,
+ correlationMaskCount,
+ pCorrelationMasks );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassMultiviewCreateInfo const & ) const = default;
#else
bool operator==( RenderPassMultiviewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( subpassCount == rhs.subpassCount ) &&
( pViewMasks == rhs.pViewMasks ) && ( dependencyCount == rhs.dependencyCount ) &&
( pViewOffsets == rhs.pViewOffsets ) && ( correlationMaskCount == rhs.correlationMaskCount ) &&
( pCorrelationMasks == rhs.pCorrelationMasks );
+# endif
}
bool operator!=( RenderPassMultiviewCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61511,10 +83055,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t correlationMaskCount = {};
const uint32_t * pCorrelationMasks = {};
};
- static_assert( sizeof( RenderPassMultiviewCreateInfo ) == sizeof( VkRenderPassMultiviewCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassMultiviewCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo ) ==
+ sizeof( VkRenderPassMultiviewCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassMultiviewCreateInfo>::value,
+ "RenderPassMultiviewCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassMultiviewCreateInfo>
@@ -61525,6 +83073,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SubpassSampleLocationsEXT
{
+ using NativeType = VkSubpassSampleLocationsEXT;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubpassSampleLocationsEXT(
uint32_t subpassIndex_ = {},
@@ -61541,8 +83091,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT &
- operator=( SubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassSampleLocationsEXT & operator=( SubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassSampleLocationsEXT & operator=( VkSubpassSampleLocationsEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -61551,13 +83100,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassSampleLocationsEXT & setSubpassIndex( uint32_t subpassIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT & setSubpassIndex( uint32_t subpassIndex_ ) VULKAN_HPP_NOEXCEPT
{
subpassIndex = subpassIndex_;
return *this;
}
- SubpassSampleLocationsEXT & setSampleLocationsInfo(
+ VULKAN_HPP_CONSTEXPR_14 SubpassSampleLocationsEXT & setSampleLocationsInfo(
VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const & sampleLocationsInfo_ ) VULKAN_HPP_NOEXCEPT
{
sampleLocationsInfo = sampleLocationsInfo_;
@@ -61565,22 +83114,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassSampleLocationsEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassSampleLocationsEXT *>( this );
}
- operator VkSubpassSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassSampleLocationsEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassSampleLocationsEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( subpassIndex, sampleLocationsInfo );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassSampleLocationsEXT const & ) const = default;
#else
bool operator==( SubpassSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( subpassIndex == rhs.subpassIndex ) && ( sampleLocationsInfo == rhs.sampleLocationsInfo );
+# endif
}
bool operator!=( SubpassSampleLocationsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61593,14 +83158,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t subpassIndex = {};
VULKAN_HPP_NAMESPACE::SampleLocationsInfoEXT sampleLocationsInfo = {};
};
- static_assert( sizeof( SubpassSampleLocationsEXT ) == sizeof( VkSubpassSampleLocationsEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassSampleLocationsEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT ) ==
+ sizeof( VkSubpassSampleLocationsEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT>::value,
+ "SubpassSampleLocationsEXT is not nothrow_move_constructible!" );
struct RenderPassSampleLocationsBeginInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRenderPassSampleLocationsBeginInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eRenderPassSampleLocationsBeginInfoEXT;
@@ -61638,8 +83208,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT &
- operator=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassSampleLocationsBeginInfoEXT &
+ operator=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassSampleLocationsBeginInfoEXT &
operator=( VkRenderPassSampleLocationsBeginInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -61649,20 +83219,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassSampleLocationsBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassSampleLocationsBeginInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT &
setAttachmentInitialSampleLocationsCount( uint32_t attachmentInitialSampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT
{
attachmentInitialSampleLocationsCount = attachmentInitialSampleLocationsCount_;
return *this;
}
- RenderPassSampleLocationsBeginInfoEXT & setPAttachmentInitialSampleLocations(
+ VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & setPAttachmentInitialSampleLocations(
const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * pAttachmentInitialSampleLocations_ )
VULKAN_HPP_NOEXCEPT
{
@@ -61681,14 +83251,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- RenderPassSampleLocationsBeginInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT &
setPostSubpassSampleLocationsCount( uint32_t postSubpassSampleLocationsCount_ ) VULKAN_HPP_NOEXCEPT
{
postSubpassSampleLocationsCount = postSubpassSampleLocationsCount_;
return *this;
}
- RenderPassSampleLocationsBeginInfoEXT & setPPostSubpassSampleLocations(
+ VULKAN_HPP_CONSTEXPR_14 RenderPassSampleLocationsBeginInfoEXT & setPPostSubpassSampleLocations(
const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations_ ) VULKAN_HPP_NOEXCEPT
{
pPostSubpassSampleLocations = pPostSubpassSampleLocations_;
@@ -61707,26 +83277,52 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassSampleLocationsBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassSampleLocationsBeginInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT *>( this );
}
- operator VkRenderPassSampleLocationsBeginInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassSampleLocationsBeginInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentSampleLocationsEXT * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ attachmentInitialSampleLocationsCount,
+ pAttachmentInitialSampleLocations,
+ postSubpassSampleLocationsCount,
+ pPostSubpassSampleLocations );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassSampleLocationsBeginInfoEXT const & ) const = default;
#else
bool operator==( RenderPassSampleLocationsBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( attachmentInitialSampleLocationsCount == rhs.attachmentInitialSampleLocationsCount ) &&
( pAttachmentInitialSampleLocations == rhs.pAttachmentInitialSampleLocations ) &&
( postSubpassSampleLocationsCount == rhs.postSubpassSampleLocationsCount ) &&
( pPostSubpassSampleLocations == rhs.pPostSubpassSampleLocations );
+# endif
}
bool operator!=( RenderPassSampleLocationsBeginInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61743,10 +83339,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t postSubpassSampleLocationsCount = {};
const VULKAN_HPP_NAMESPACE::SubpassSampleLocationsEXT * pPostSubpassSampleLocations = {};
};
- static_assert( sizeof( RenderPassSampleLocationsBeginInfoEXT ) == sizeof( VkRenderPassSampleLocationsBeginInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassSampleLocationsBeginInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT ) ==
+ sizeof( VkRenderPassSampleLocationsBeginInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassSampleLocationsBeginInfoEXT>::value,
+ "RenderPassSampleLocationsBeginInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassSampleLocationsBeginInfoEXT>
@@ -61756,7 +83356,9 @@ namespace VULKAN_HPP_NAMESPACE
struct RenderPassTransformBeginInfoQCOM
{
- static const bool allowDuplicate = false;
+ using NativeType = VkRenderPassTransformBeginInfoQCOM;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderPassTransformBeginInfoQCOM;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -61773,8 +83375,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM &
- operator=( RenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ RenderPassTransformBeginInfoQCOM &
+ operator=( RenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
RenderPassTransformBeginInfoQCOM & operator=( VkRenderPassTransformBeginInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -61783,13 +83385,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- RenderPassTransformBeginInfoQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- RenderPassTransformBeginInfoQCOM &
+ VULKAN_HPP_CONSTEXPR_14 RenderPassTransformBeginInfoQCOM &
setTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform_ ) VULKAN_HPP_NOEXCEPT
{
transform = transform_;
@@ -61797,22 +83399,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkRenderPassTransformBeginInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassTransformBeginInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM *>( this );
}
- operator VkRenderPassTransformBeginInfoQCOM &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkRenderPassTransformBeginInfoQCOM &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkRenderPassTransformBeginInfoQCOM *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, transform );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( RenderPassTransformBeginInfoQCOM const & ) const = default;
#else
bool operator==( RenderPassTransformBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( transform == rhs.transform );
+# endif
}
bool operator!=( RenderPassTransformBeginInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -61827,10 +83447,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR transform =
VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR::eIdentity;
};
- static_assert( sizeof( RenderPassTransformBeginInfoQCOM ) == sizeof( VkRenderPassTransformBeginInfoQCOM ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<RenderPassTransformBeginInfoQCOM>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM ) ==
+ sizeof( VkRenderPassTransformBeginInfoQCOM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderPassTransformBeginInfoQCOM>::value,
+ "RenderPassTransformBeginInfoQCOM is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eRenderPassTransformBeginInfoQCOM>
@@ -61838,19 +83462,680 @@ namespace VULKAN_HPP_NAMESPACE
using Type = RenderPassTransformBeginInfoQCOM;
};
- struct ResolveImageInfo2KHR
+ struct RenderingAttachmentInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eResolveImageInfo2KHR;
+ using NativeType = VkRenderingAttachmentInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingAttachmentInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR ResolveImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
- uint32_t regionCount_ = {},
- const VULKAN_HPP_NAMESPACE::ImageResolve2KHR * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo(
+ VULKAN_HPP_NAMESPACE::ImageView imageView_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode_ = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone,
+ VULKAN_HPP_NAMESPACE::ImageView resolveImageView_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad,
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore,
+ VULKAN_HPP_NAMESPACE::ClearValue clearValue_ = {} ) VULKAN_HPP_NOEXCEPT
+ : imageView( imageView_ )
+ , imageLayout( imageLayout_ )
+ , resolveMode( resolveMode_ )
+ , resolveImageView( resolveImageView_ )
+ , resolveImageLayout( resolveImageLayout_ )
+ , loadOp( loadOp_ )
+ , storeOp( storeOp_ )
+ , clearValue( clearValue_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR_14
+ RenderingAttachmentInfo( RenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingAttachmentInfo( VkRenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : RenderingAttachmentInfo( *reinterpret_cast<RenderingAttachmentInfo const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ RenderingAttachmentInfo & operator=( RenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingAttachmentInfo & operator=( VkRenderingAttachmentInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageView = imageView_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageLayout = imageLayout_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode_ ) VULKAN_HPP_NOEXCEPT
+ {
+ resolveMode = resolveMode_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setResolveImageView( VULKAN_HPP_NAMESPACE::ImageView resolveImageView_ ) VULKAN_HPP_NOEXCEPT
+ {
+ resolveImageView = resolveImageView_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setResolveImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ {
+ resolveImageLayout = resolveImageLayout_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setLoadOp( VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ loadOp = loadOp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setStoreOp( VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ storeOp = storeOp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingAttachmentInfo &
+ setClearValue( VULKAN_HPP_NAMESPACE::ClearValue const & clearValue_ ) VULKAN_HPP_NOEXCEPT
+ {
+ clearValue = clearValue_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkRenderingAttachmentInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkRenderingAttachmentInfo *>( this );
+ }
+
+ explicit operator VkRenderingAttachmentInfo &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkRenderingAttachmentInfo *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlagBits const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp const &,
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp const &,
+ VULKAN_HPP_NAMESPACE::ClearValue const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ imageView,
+ imageLayout,
+ resolveMode,
+ resolveImageView,
+ resolveImageLayout,
+ loadOp,
+ storeOp,
+ clearValue );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingAttachmentInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::ImageView imageView = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::ResolveModeFlagBits resolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone;
+ VULKAN_HPP_NAMESPACE::ImageView resolveImageView = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout resolveImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::AttachmentLoadOp loadOp = VULKAN_HPP_NAMESPACE::AttachmentLoadOp::eLoad;
+ VULKAN_HPP_NAMESPACE::AttachmentStoreOp storeOp = VULKAN_HPP_NAMESPACE::AttachmentStoreOp::eStore;
+ VULKAN_HPP_NAMESPACE::ClearValue clearValue = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo ) ==
+ sizeof( VkRenderingAttachmentInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo>::value,
+ "RenderingAttachmentInfo is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eRenderingAttachmentInfo>
+ {
+ using Type = RenderingAttachmentInfo;
+ };
+ using RenderingAttachmentInfoKHR = RenderingAttachmentInfo;
+
+ struct RenderingFragmentDensityMapAttachmentInfoEXT
+ {
+ using NativeType = VkRenderingFragmentDensityMapAttachmentInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR RenderingFragmentDensityMapAttachmentInfoEXT(
+ VULKAN_HPP_NAMESPACE::ImageView imageView_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined )
+ VULKAN_HPP_NOEXCEPT
+ : imageView( imageView_ )
+ , imageLayout( imageLayout_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR RenderingFragmentDensityMapAttachmentInfoEXT(
+ RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingFragmentDensityMapAttachmentInfoEXT( VkRenderingFragmentDensityMapAttachmentInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : RenderingFragmentDensityMapAttachmentInfoEXT(
+ *reinterpret_cast<RenderingFragmentDensityMapAttachmentInfoEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ RenderingFragmentDensityMapAttachmentInfoEXT &
+ operator=( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingFragmentDensityMapAttachmentInfoEXT &
+ operator=( VkRenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT &
+ setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageView = imageView_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentDensityMapAttachmentInfoEXT &
+ setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageLayout = imageLayout_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkRenderingFragmentDensityMapAttachmentInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkRenderingFragmentDensityMapAttachmentInfoEXT *>( this );
+ }
+
+ explicit operator VkRenderingFragmentDensityMapAttachmentInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkRenderingFragmentDensityMapAttachmentInfoEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageView, imageLayout );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( RenderingFragmentDensityMapAttachmentInfoEXT const & ) const = default;
+#else
+ bool operator==( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) &&
+ ( imageLayout == rhs.imageLayout );
+# endif
+ }
+
+ bool operator!=( RenderingFragmentDensityMapAttachmentInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::ImageView imageView = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT ) ==
+ sizeof( VkRenderingFragmentDensityMapAttachmentInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderingFragmentDensityMapAttachmentInfoEXT>::value,
+ "RenderingFragmentDensityMapAttachmentInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eRenderingFragmentDensityMapAttachmentInfoEXT>
+ {
+ using Type = RenderingFragmentDensityMapAttachmentInfoEXT;
+ };
+
+ struct RenderingFragmentShadingRateAttachmentInfoKHR
+ {
+ using NativeType = VkRenderingFragmentShadingRateAttachmentInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR RenderingFragmentShadingRateAttachmentInfoKHR(
+ VULKAN_HPP_NAMESPACE::ImageView imageView_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : imageView( imageView_ )
+ , imageLayout( imageLayout_ )
+ , shadingRateAttachmentTexelSize( shadingRateAttachmentTexelSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR RenderingFragmentShadingRateAttachmentInfoKHR(
+ RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingFragmentShadingRateAttachmentInfoKHR( VkRenderingFragmentShadingRateAttachmentInfoKHR const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : RenderingFragmentShadingRateAttachmentInfoKHR(
+ *reinterpret_cast<RenderingFragmentShadingRateAttachmentInfoKHR const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ RenderingFragmentShadingRateAttachmentInfoKHR &
+ operator=( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingFragmentShadingRateAttachmentInfoKHR &
+ operator=( VkRenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR &
+ setImageView( VULKAN_HPP_NAMESPACE::ImageView imageView_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageView = imageView_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR &
+ setImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout imageLayout_ ) VULKAN_HPP_NOEXCEPT
+ {
+ imageLayout = imageLayout_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingFragmentShadingRateAttachmentInfoKHR & setShadingRateAttachmentTexelSize(
+ VULKAN_HPP_NAMESPACE::Extent2D const & shadingRateAttachmentTexelSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ shadingRateAttachmentTexelSize = shadingRateAttachmentTexelSize_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkRenderingFragmentShadingRateAttachmentInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkRenderingFragmentShadingRateAttachmentInfoKHR *>( this );
+ }
+
+ explicit operator VkRenderingFragmentShadingRateAttachmentInfoKHR &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkRenderingFragmentShadingRateAttachmentInfoKHR *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, imageView, imageLayout, shadingRateAttachmentTexelSize );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( RenderingFragmentShadingRateAttachmentInfoKHR const & ) const = default;
+#else
+ bool operator==( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( imageView == rhs.imageView ) &&
+ ( imageLayout == rhs.imageLayout ) &&
+ ( shadingRateAttachmentTexelSize == rhs.shadingRateAttachmentTexelSize );
+# endif
+ }
+
+ bool operator!=( RenderingFragmentShadingRateAttachmentInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::ImageView imageView = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout imageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::Extent2D shadingRateAttachmentTexelSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR ) ==
+ sizeof( VkRenderingFragmentShadingRateAttachmentInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderingFragmentShadingRateAttachmentInfoKHR>::value,
+ "RenderingFragmentShadingRateAttachmentInfoKHR is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eRenderingFragmentShadingRateAttachmentInfoKHR>
+ {
+ using Type = RenderingFragmentShadingRateAttachmentInfoKHR;
+ };
+
+ struct RenderingInfo
+ {
+ using NativeType = VkRenderingInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eRenderingInfo;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo(
+ VULKAN_HPP_NAMESPACE::RenderingFlags flags_ = {},
+ VULKAN_HPP_NAMESPACE::Rect2D renderArea_ = {},
+ uint32_t layerCount_ = {},
+ uint32_t viewMask_ = {},
+ uint32_t colorAttachmentCount_ = {},
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments_ = {},
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ = {},
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ = {} ) VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
+ , renderArea( renderArea_ )
+ , layerCount( layerCount_ )
+ , viewMask( viewMask_ )
+ , colorAttachmentCount( colorAttachmentCount_ )
+ , pColorAttachments( pColorAttachments_ )
+ , pDepthAttachment( pDepthAttachment_ )
+ , pStencilAttachment( pStencilAttachment_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo( RenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingInfo( VkRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : RenderingInfo( *reinterpret_cast<RenderingInfo const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ RenderingInfo(
+ VULKAN_HPP_NAMESPACE::RenderingFlags flags_,
+ VULKAN_HPP_NAMESPACE::Rect2D renderArea_,
+ uint32_t layerCount_,
+ uint32_t viewMask_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo> const &
+ colorAttachments_,
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ = {},
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ = {} )
+ : flags( flags_ )
+ , renderArea( renderArea_ )
+ , layerCount( layerCount_ )
+ , viewMask( viewMask_ )
+ , colorAttachmentCount( static_cast<uint32_t>( colorAttachments_.size() ) )
+ , pColorAttachments( colorAttachments_.data() )
+ , pDepthAttachment( pDepthAttachment_ )
+ , pStencilAttachment( pStencilAttachment_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ RenderingInfo & operator=( RenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ RenderingInfo & operator=( VkRenderingInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::RenderingInfo const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setFlags( VULKAN_HPP_NAMESPACE::RenderingFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ flags = flags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo &
+ setRenderArea( VULKAN_HPP_NAMESPACE::Rect2D const & renderArea_ ) VULKAN_HPP_NOEXCEPT
+ {
+ renderArea = renderArea_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setLayerCount( uint32_t layerCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ layerCount = layerCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setViewMask( uint32_t viewMask_ ) VULKAN_HPP_NOEXCEPT
+ {
+ viewMask = viewMask_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo &
+ setColorAttachmentCount( uint32_t colorAttachmentCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = colorAttachmentCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPColorAttachments(
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pColorAttachments = pColorAttachments_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ RenderingInfo & setColorAttachments(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo> const &
+ colorAttachments_ ) VULKAN_HPP_NOEXCEPT
+ {
+ colorAttachmentCount = static_cast<uint32_t>( colorAttachments_.size() );
+ pColorAttachments = colorAttachments_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo &
+ setPDepthAttachment( const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pDepthAttachment = pDepthAttachment_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 RenderingInfo & setPStencilAttachment(
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pStencilAttachment = pStencilAttachment_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkRenderingInfo const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkRenderingInfo *>( this );
+ }
+
+ explicit operator VkRenderingInfo &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkRenderingInfo *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::RenderingFlags const &,
+ VULKAN_HPP_NAMESPACE::Rect2D const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * const &,
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * const &,
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ renderArea,
+ layerCount,
+ viewMask,
+ colorAttachmentCount,
+ pColorAttachments,
+ pDepthAttachment,
+ pStencilAttachment );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( RenderingInfo const & ) const = default;
+#else
+ bool operator==( RenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
+ ( renderArea == rhs.renderArea ) && ( layerCount == rhs.layerCount ) && ( viewMask == rhs.viewMask ) &&
+ ( colorAttachmentCount == rhs.colorAttachmentCount ) && ( pColorAttachments == rhs.pColorAttachments ) &&
+ ( pDepthAttachment == rhs.pDepthAttachment ) && ( pStencilAttachment == rhs.pStencilAttachment );
+# endif
+ }
+
+ bool operator!=( RenderingInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eRenderingInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::RenderingFlags flags = {};
+ VULKAN_HPP_NAMESPACE::Rect2D renderArea = {};
+ uint32_t layerCount = {};
+ uint32_t viewMask = {};
+ uint32_t colorAttachmentCount = {};
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pColorAttachments = {};
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pDepthAttachment = {};
+ const VULKAN_HPP_NAMESPACE::RenderingAttachmentInfo * pStencilAttachment = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::RenderingInfo ) == sizeof( VkRenderingInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::RenderingInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::RenderingInfo>::value,
+ "RenderingInfo is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eRenderingInfo>
+ {
+ using Type = RenderingInfo;
+ };
+ using RenderingInfoKHR = RenderingInfo;
+
+ struct ResolveImageInfo2
+ {
+ using NativeType = VkResolveImageInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eResolveImageInfo2;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR ResolveImageInfo2(
+ VULKAN_HPP_NAMESPACE::Image srcImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ VULKAN_HPP_NAMESPACE::Image dstImage_ = {},
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined,
+ uint32_t regionCount_ = {},
+ const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions_ = {} ) VULKAN_HPP_NOEXCEPT
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstImage( dstImage_ )
@@ -61859,19 +84144,19 @@ namespace VULKAN_HPP_NAMESPACE
, pRegions( pRegions_ )
{}
- VULKAN_HPP_CONSTEXPR ResolveImageInfo2KHR( ResolveImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR ResolveImageInfo2( ResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ResolveImageInfo2KHR( VkResolveImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : ResolveImageInfo2KHR( *reinterpret_cast<ResolveImageInfo2KHR const *>( &rhs ) )
+ ResolveImageInfo2( VkResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : ResolveImageInfo2( *reinterpret_cast<ResolveImageInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- ResolveImageInfo2KHR(
- VULKAN_HPP_NAMESPACE::Image srcImage_,
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
- VULKAN_HPP_NAMESPACE::Image dstImage_,
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageResolve2KHR> const & regions_ )
+ ResolveImageInfo2(
+ VULKAN_HPP_NAMESPACE::Image srcImage_,
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_,
+ VULKAN_HPP_NAMESPACE::Image dstImage_,
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageResolve2> const & regions_ )
: srcImage( srcImage_ )
, srcImageLayout( srcImageLayout_ )
, dstImage( dstImage_ )
@@ -61882,61 +84167,63 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2KHR &
- operator=( ResolveImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ResolveImageInfo2 & operator=( ResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- ResolveImageInfo2KHR & operator=( VkResolveImageInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ ResolveImageInfo2 & operator=( VkResolveImageInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ResolveImageInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::ResolveImageInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ResolveImageInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ResolveImageInfo2KHR & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setSrcImage( VULKAN_HPP_NAMESPACE::Image srcImage_ ) VULKAN_HPP_NOEXCEPT
{
srcImage = srcImage_;
return *this;
}
- ResolveImageInfo2KHR & setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 &
+ setSrcImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
srcImageLayout = srcImageLayout_;
return *this;
}
- ResolveImageInfo2KHR & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setDstImage( VULKAN_HPP_NAMESPACE::Image dstImage_ ) VULKAN_HPP_NOEXCEPT
{
dstImage = dstImage_;
return *this;
}
- ResolveImageInfo2KHR & setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 &
+ setDstImageLayout( VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout_ ) VULKAN_HPP_NOEXCEPT
{
dstImageLayout = dstImageLayout_;
return *this;
}
- ResolveImageInfo2KHR & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 & setRegionCount( uint32_t regionCount_ ) VULKAN_HPP_NOEXCEPT
{
regionCount = regionCount_;
return *this;
}
- ResolveImageInfo2KHR & setPRegions( const VULKAN_HPP_NAMESPACE::ImageResolve2KHR * pRegions_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ResolveImageInfo2 &
+ setPRegions( const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions_ ) VULKAN_HPP_NOEXCEPT
{
pRegions = pRegions_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- ResolveImageInfo2KHR & setRegions(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageResolve2KHR> const & regions_ )
+ ResolveImageInfo2 & setRegions(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::ImageResolve2> const & regions_ )
VULKAN_HPP_NOEXCEPT
{
regionCount = static_cast<uint32_t>( regions_.size() );
@@ -61946,57 +84233,211 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkResolveImageInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkResolveImageInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkResolveImageInfo2KHR *>( this );
+ return *reinterpret_cast<const VkResolveImageInfo2 *>( this );
}
- operator VkResolveImageInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkResolveImageInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkResolveImageInfo2KHR *>( this );
+ return *reinterpret_cast<VkResolveImageInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ VULKAN_HPP_NAMESPACE::Image const &,
+ VULKAN_HPP_NAMESPACE::ImageLayout const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ImageResolve2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, srcImage, srcImageLayout, dstImage, dstImageLayout, regionCount, pRegions );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( ResolveImageInfo2KHR const & ) const = default;
+ auto operator<=>( ResolveImageInfo2 const & ) const = default;
#else
- bool operator==( ResolveImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( ResolveImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( srcImage == rhs.srcImage ) &&
( srcImageLayout == rhs.srcImageLayout ) && ( dstImage == rhs.dstImage ) &&
( dstImageLayout == rhs.dstImageLayout ) && ( regionCount == rhs.regionCount ) &&
( pRegions == rhs.pRegions );
+# endif
}
- bool operator!=( ResolveImageInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( ResolveImageInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eResolveImageInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Image srcImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- VULKAN_HPP_NAMESPACE::Image dstImage = {};
- VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
- uint32_t regionCount = {};
- const VULKAN_HPP_NAMESPACE::ImageResolve2KHR * pRegions = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eResolveImageInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Image srcImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout srcImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ VULKAN_HPP_NAMESPACE::Image dstImage = {};
+ VULKAN_HPP_NAMESPACE::ImageLayout dstImageLayout = VULKAN_HPP_NAMESPACE::ImageLayout::eUndefined;
+ uint32_t regionCount = {};
+ const VULKAN_HPP_NAMESPACE::ImageResolve2 * pRegions = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ResolveImageInfo2 ) == sizeof( VkResolveImageInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ResolveImageInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ResolveImageInfo2>::value,
+ "ResolveImageInfo2 is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eResolveImageInfo2>
+ {
+ using Type = ResolveImageInfo2;
+ };
+ using ResolveImageInfo2KHR = ResolveImageInfo2;
+
+ struct SamplerBorderColorComponentMappingCreateInfoEXT
+ {
+ using NativeType = VkSamplerBorderColorComponentMappingCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ SamplerBorderColorComponentMappingCreateInfoEXT( VULKAN_HPP_NAMESPACE::ComponentMapping components_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 srgb_ = {} ) VULKAN_HPP_NOEXCEPT
+ : components( components_ )
+ , srgb( srgb_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR SamplerBorderColorComponentMappingCreateInfoEXT(
+ SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ SamplerBorderColorComponentMappingCreateInfoEXT( VkSamplerBorderColorComponentMappingCreateInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : SamplerBorderColorComponentMappingCreateInfoEXT(
+ *reinterpret_cast<SamplerBorderColorComponentMappingCreateInfoEXT const *>( &rhs ) )
+ {}
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ SamplerBorderColorComponentMappingCreateInfoEXT &
+ operator=( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ SamplerBorderColorComponentMappingCreateInfoEXT &
+ operator=( VkSamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT &
+ setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT
+ {
+ components = components_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 SamplerBorderColorComponentMappingCreateInfoEXT &
+ setSrgb( VULKAN_HPP_NAMESPACE::Bool32 srgb_ ) VULKAN_HPP_NOEXCEPT
+ {
+ srgb = srgb_;
+ return *this;
+ }
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkSamplerBorderColorComponentMappingCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkSamplerBorderColorComponentMappingCreateInfoEXT *>( this );
+ }
+
+ explicit operator VkSamplerBorderColorComponentMappingCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkSamplerBorderColorComponentMappingCreateInfoEXT *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ComponentMapping const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, components, srgb );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( SamplerBorderColorComponentMappingCreateInfoEXT const & ) const = default;
+#else
+ bool operator==( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( components == rhs.components ) &&
+ ( srgb == rhs.srgb );
+# endif
+ }
+
+ bool operator!=( SamplerBorderColorComponentMappingCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::ComponentMapping components = {};
+ VULKAN_HPP_NAMESPACE::Bool32 srgb = {};
};
- static_assert( sizeof( ResolveImageInfo2KHR ) == sizeof( VkResolveImageInfo2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ResolveImageInfo2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT ) ==
+ sizeof( VkSamplerBorderColorComponentMappingCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerBorderColorComponentMappingCreateInfoEXT>::value,
+ "SamplerBorderColorComponentMappingCreateInfoEXT is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eResolveImageInfo2KHR>
+ struct CppType<StructureType, StructureType::eSamplerBorderColorComponentMappingCreateInfoEXT>
{
- using Type = ResolveImageInfo2KHR;
+ using Type = SamplerBorderColorComponentMappingCreateInfoEXT;
};
struct SamplerCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCreateInfo;
+ using NativeType = VkSamplerCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SamplerCreateInfo(
@@ -62041,8 +84482,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
- operator=( SamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SamplerCreateInfo & operator=( SamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SamplerCreateInfo & operator=( VkSamplerCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62051,103 +84491,114 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SamplerCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SamplerCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::SamplerCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- SamplerCreateInfo & setMagFilter( VULKAN_HPP_NAMESPACE::Filter magFilter_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setMagFilter( VULKAN_HPP_NAMESPACE::Filter magFilter_ ) VULKAN_HPP_NOEXCEPT
{
magFilter = magFilter_;
return *this;
}
- SamplerCreateInfo & setMinFilter( VULKAN_HPP_NAMESPACE::Filter minFilter_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setMinFilter( VULKAN_HPP_NAMESPACE::Filter minFilter_ ) VULKAN_HPP_NOEXCEPT
{
minFilter = minFilter_;
return *this;
}
- SamplerCreateInfo & setMipmapMode( VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setMipmapMode( VULKAN_HPP_NAMESPACE::SamplerMipmapMode mipmapMode_ ) VULKAN_HPP_NOEXCEPT
{
mipmapMode = mipmapMode_;
return *this;
}
- SamplerCreateInfo & setAddressModeU( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setAddressModeU( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeU_ ) VULKAN_HPP_NOEXCEPT
{
addressModeU = addressModeU_;
return *this;
}
- SamplerCreateInfo & setAddressModeV( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setAddressModeV( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeV_ ) VULKAN_HPP_NOEXCEPT
{
addressModeV = addressModeV_;
return *this;
}
- SamplerCreateInfo & setAddressModeW( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setAddressModeW( VULKAN_HPP_NAMESPACE::SamplerAddressMode addressModeW_ ) VULKAN_HPP_NOEXCEPT
{
addressModeW = addressModeW_;
return *this;
}
- SamplerCreateInfo & setMipLodBias( float mipLodBias_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMipLodBias( float mipLodBias_ ) VULKAN_HPP_NOEXCEPT
{
mipLodBias = mipLodBias_;
return *this;
}
- SamplerCreateInfo & setAnisotropyEnable( VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setAnisotropyEnable( VULKAN_HPP_NAMESPACE::Bool32 anisotropyEnable_ ) VULKAN_HPP_NOEXCEPT
{
anisotropyEnable = anisotropyEnable_;
return *this;
}
- SamplerCreateInfo & setMaxAnisotropy( float maxAnisotropy_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMaxAnisotropy( float maxAnisotropy_ ) VULKAN_HPP_NOEXCEPT
{
maxAnisotropy = maxAnisotropy_;
return *this;
}
- SamplerCreateInfo & setCompareEnable( VULKAN_HPP_NAMESPACE::Bool32 compareEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setCompareEnable( VULKAN_HPP_NAMESPACE::Bool32 compareEnable_ ) VULKAN_HPP_NOEXCEPT
{
compareEnable = compareEnable_;
return *this;
}
- SamplerCreateInfo & setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setCompareOp( VULKAN_HPP_NAMESPACE::CompareOp compareOp_ ) VULKAN_HPP_NOEXCEPT
{
compareOp = compareOp_;
return *this;
}
- SamplerCreateInfo & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMinLod( float minLod_ ) VULKAN_HPP_NOEXCEPT
{
minLod = minLod_;
return *this;
}
- SamplerCreateInfo & setMaxLod( float maxLod_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo & setMaxLod( float maxLod_ ) VULKAN_HPP_NOEXCEPT
{
maxLod = maxLod_;
return *this;
}
- SamplerCreateInfo & setBorderColor( VULKAN_HPP_NAMESPACE::BorderColor borderColor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
+ setBorderColor( VULKAN_HPP_NAMESPACE::BorderColor borderColor_ ) VULKAN_HPP_NOEXCEPT
{
borderColor = borderColor_;
return *this;
}
- SamplerCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 SamplerCreateInfo &
setUnnormalizedCoordinates( VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates_ ) VULKAN_HPP_NOEXCEPT
{
unnormalizedCoordinates = unnormalizedCoordinates_;
@@ -62155,21 +84606,70 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSamplerCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSamplerCreateInfo *>( this );
}
- operator VkSamplerCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSamplerCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SamplerCreateFlags const &,
+ VULKAN_HPP_NAMESPACE::Filter const &,
+ VULKAN_HPP_NAMESPACE::Filter const &,
+ VULKAN_HPP_NAMESPACE::SamplerMipmapMode const &,
+ VULKAN_HPP_NAMESPACE::SamplerAddressMode const &,
+ VULKAN_HPP_NAMESPACE::SamplerAddressMode const &,
+ VULKAN_HPP_NAMESPACE::SamplerAddressMode const &,
+ float const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ float const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::CompareOp const &,
+ float const &,
+ float const &,
+ VULKAN_HPP_NAMESPACE::BorderColor const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ magFilter,
+ minFilter,
+ mipmapMode,
+ addressModeU,
+ addressModeV,
+ addressModeW,
+ mipLodBias,
+ anisotropyEnable,
+ maxAnisotropy,
+ compareEnable,
+ compareOp,
+ minLod,
+ maxLod,
+ borderColor,
+ unnormalizedCoordinates );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SamplerCreateInfo const & ) const = default;
#else
bool operator==( SamplerCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( magFilter == rhs.magFilter ) && ( minFilter == rhs.minFilter ) && ( mipmapMode == rhs.mipmapMode ) &&
( addressModeU == rhs.addressModeU ) && ( addressModeV == rhs.addressModeV ) &&
@@ -62178,6 +84678,7 @@ namespace VULKAN_HPP_NAMESPACE
( compareEnable == rhs.compareEnable ) && ( compareOp == rhs.compareOp ) && ( minLod == rhs.minLod ) &&
( maxLod == rhs.maxLod ) && ( borderColor == rhs.borderColor ) &&
( unnormalizedCoordinates == rhs.unnormalizedCoordinates );
+# endif
}
bool operator!=( SamplerCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62206,9 +84707,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::BorderColor borderColor = VULKAN_HPP_NAMESPACE::BorderColor::eFloatTransparentBlack;
VULKAN_HPP_NAMESPACE::Bool32 unnormalizedCoordinates = {};
};
- static_assert( sizeof( SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SamplerCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerCreateInfo ) == sizeof( VkSamplerCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerCreateInfo>::value,
+ "SamplerCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSamplerCreateInfo>
@@ -62218,19 +84722,21 @@ namespace VULKAN_HPP_NAMESPACE
struct SamplerCustomBorderColorCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSamplerCustomBorderColorCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSamplerCustomBorderColorCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- SamplerCustomBorderColorCreateInfoEXT(
+ VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT(
VULKAN_HPP_NAMESPACE::ClearColorValue customBorderColor_ = {},
VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined ) VULKAN_HPP_NOEXCEPT
: customBorderColor( customBorderColor_ )
, format( format_ )
{}
- SamplerCustomBorderColorCreateInfoEXT( SamplerCustomBorderColorCreateInfoEXT const & rhs )
+ VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT( SamplerCustomBorderColorCreateInfoEXT const & rhs )
VULKAN_HPP_NOEXCEPT = default;
SamplerCustomBorderColorCreateInfoEXT( VkSamplerCustomBorderColorCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -62250,46 +84756,66 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SamplerCustomBorderColorCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SamplerCustomBorderColorCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT &
setCustomBorderColor( VULKAN_HPP_NAMESPACE::ClearColorValue const & customBorderColor_ ) VULKAN_HPP_NOEXCEPT
{
customBorderColor = customBorderColor_;
return *this;
}
- SamplerCustomBorderColorCreateInfoEXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerCustomBorderColorCreateInfoEXT &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSamplerCustomBorderColorCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerCustomBorderColorCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT *>( this );
}
- operator VkSamplerCustomBorderColorCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerCustomBorderColorCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSamplerCustomBorderColorCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ClearColorValue const &,
+ VULKAN_HPP_NAMESPACE::Format const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, customBorderColor, format );
+ }
+#endif
+
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSamplerCustomBorderColorCreateInfoEXT;
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ClearColorValue customBorderColor = {};
VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
};
- static_assert( sizeof( SamplerCustomBorderColorCreateInfoEXT ) == sizeof( VkSamplerCustomBorderColorCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SamplerCustomBorderColorCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerCustomBorderColorCreateInfoEXT ) ==
+ sizeof( VkSamplerCustomBorderColorCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerCustomBorderColorCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerCustomBorderColorCreateInfoEXT>::value,
+ "SamplerCustomBorderColorCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSamplerCustomBorderColorCreateInfoEXT>
@@ -62299,8 +84825,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SamplerReductionModeCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerReductionModeCreateInfo;
+ using NativeType = VkSamplerReductionModeCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerReductionModeCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SamplerReductionModeCreateInfo(
@@ -62317,8 +84845,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo &
- operator=( SamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SamplerReductionModeCreateInfo &
+ operator=( SamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SamplerReductionModeCreateInfo & operator=( VkSamplerReductionModeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62327,13 +84855,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SamplerReductionModeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SamplerReductionModeCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 SamplerReductionModeCreateInfo &
setReductionMode( VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode_ ) VULKAN_HPP_NOEXCEPT
{
reductionMode = reductionMode_;
@@ -62341,22 +84869,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSamplerReductionModeCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerReductionModeCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSamplerReductionModeCreateInfo *>( this );
}
- operator VkSamplerReductionModeCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerReductionModeCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSamplerReductionModeCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SamplerReductionMode const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, reductionMode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SamplerReductionModeCreateInfo const & ) const = default;
#else
bool operator==( SamplerReductionModeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( reductionMode == rhs.reductionMode );
+# endif
}
bool operator!=( SamplerReductionModeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62371,10 +84917,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SamplerReductionMode reductionMode =
VULKAN_HPP_NAMESPACE::SamplerReductionMode::eWeightedAverage;
};
- static_assert( sizeof( SamplerReductionModeCreateInfo ) == sizeof( VkSamplerReductionModeCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SamplerReductionModeCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo ) ==
+ sizeof( VkSamplerReductionModeCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerReductionModeCreateInfo>::value,
+ "SamplerReductionModeCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSamplerReductionModeCreateInfo>
@@ -62385,7 +84935,9 @@ namespace VULKAN_HPP_NAMESPACE
struct SamplerYcbcrConversionCreateInfo
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSamplerYcbcrConversionCreateInfo;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
@@ -62417,8 +84969,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
- operator=( SamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SamplerYcbcrConversionCreateInfo &
+ operator=( SamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SamplerYcbcrConversionCreateInfo & operator=( VkSamplerYcbcrConversionCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62427,60 +84979,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SamplerYcbcrConversionCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SamplerYcbcrConversionCreateInfo & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- SamplerYcbcrConversionCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
setYcbcrModel( VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion ycbcrModel_ ) VULKAN_HPP_NOEXCEPT
{
ycbcrModel = ycbcrModel_;
return *this;
}
- SamplerYcbcrConversionCreateInfo &
- setYcbcrRange( VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
+ setYcbcrRange( VULKAN_HPP_NAMESPACE::SamplerYcbcrRange ycbcrRange_ ) VULKAN_HPP_NOEXCEPT
{
ycbcrRange = ycbcrRange_;
return *this;
}
- SamplerYcbcrConversionCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
setComponents( VULKAN_HPP_NAMESPACE::ComponentMapping const & components_ ) VULKAN_HPP_NOEXCEPT
{
components = components_;
return *this;
}
- SamplerYcbcrConversionCreateInfo &
- setXChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
+ setXChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation xChromaOffset_ ) VULKAN_HPP_NOEXCEPT
{
xChromaOffset = xChromaOffset_;
return *this;
}
- SamplerYcbcrConversionCreateInfo &
- setYChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
+ setYChromaOffset( VULKAN_HPP_NAMESPACE::ChromaLocation yChromaOffset_ ) VULKAN_HPP_NOEXCEPT
{
yChromaOffset = yChromaOffset_;
return *this;
}
- SamplerYcbcrConversionCreateInfo & setChromaFilter( VULKAN_HPP_NAMESPACE::Filter chromaFilter_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
+ setChromaFilter( VULKAN_HPP_NAMESPACE::Filter chromaFilter_ ) VULKAN_HPP_NOEXCEPT
{
chromaFilter = chromaFilter_;
return *this;
}
- SamplerYcbcrConversionCreateInfo &
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionCreateInfo &
setForceExplicitReconstruction( VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction_ ) VULKAN_HPP_NOEXCEPT
{
forceExplicitReconstruction = forceExplicitReconstruction_;
@@ -62488,25 +85042,59 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSamplerYcbcrConversionCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerYcbcrConversionCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSamplerYcbcrConversionCreateInfo *>( this );
}
- operator VkSamplerYcbcrConversionCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerYcbcrConversionCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSamplerYcbcrConversionCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrModelConversion const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrRange const &,
+ VULKAN_HPP_NAMESPACE::ComponentMapping const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &,
+ VULKAN_HPP_NAMESPACE::ChromaLocation const &,
+ VULKAN_HPP_NAMESPACE::Filter const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ format,
+ ycbcrModel,
+ ycbcrRange,
+ components,
+ xChromaOffset,
+ yChromaOffset,
+ chromaFilter,
+ forceExplicitReconstruction );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SamplerYcbcrConversionCreateInfo const & ) const = default;
#else
bool operator==( SamplerYcbcrConversionCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format ) &&
( ycbcrModel == rhs.ycbcrModel ) && ( ycbcrRange == rhs.ycbcrRange ) && ( components == rhs.components ) &&
( xChromaOffset == rhs.xChromaOffset ) && ( yChromaOffset == rhs.yChromaOffset ) &&
( chromaFilter == rhs.chromaFilter ) && ( forceExplicitReconstruction == rhs.forceExplicitReconstruction );
+# endif
}
bool operator!=( SamplerYcbcrConversionCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62528,10 +85116,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Filter chromaFilter = VULKAN_HPP_NAMESPACE::Filter::eNearest;
VULKAN_HPP_NAMESPACE::Bool32 forceExplicitReconstruction = {};
};
- static_assert( sizeof( SamplerYcbcrConversionCreateInfo ) == sizeof( VkSamplerYcbcrConversionCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SamplerYcbcrConversionCreateInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo ) ==
+ sizeof( VkSamplerYcbcrConversionCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionCreateInfo>::value,
+ "SamplerYcbcrConversionCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSamplerYcbcrConversionCreateInfo>
@@ -62542,7 +85134,9 @@ namespace VULKAN_HPP_NAMESPACE
struct SamplerYcbcrConversionImageFormatProperties
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSamplerYcbcrConversionImageFormatProperties;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSamplerYcbcrConversionImageFormatProperties;
@@ -62562,8 +85156,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionImageFormatProperties &
- operator=( SamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SamplerYcbcrConversionImageFormatProperties &
+ operator=( SamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SamplerYcbcrConversionImageFormatProperties &
operator=( VkSamplerYcbcrConversionImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -62572,23 +85166,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSamplerYcbcrConversionImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerYcbcrConversionImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties *>( this );
}
- operator VkSamplerYcbcrConversionImageFormatProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerYcbcrConversionImageFormatProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, combinedImageSamplerDescriptorCount );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SamplerYcbcrConversionImageFormatProperties const & ) const = default;
#else
bool operator==( SamplerYcbcrConversionImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( combinedImageSamplerDescriptorCount == rhs.combinedImageSamplerDescriptorCount );
+# endif
}
bool operator!=( SamplerYcbcrConversionImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62602,11 +85212,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
uint32_t combinedImageSamplerDescriptorCount = {};
};
- static_assert( sizeof( SamplerYcbcrConversionImageFormatProperties ) ==
- sizeof( VkSamplerYcbcrConversionImageFormatProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SamplerYcbcrConversionImageFormatProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties ) ==
+ sizeof( VkSamplerYcbcrConversionImageFormatProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionImageFormatProperties>::value,
+ "SamplerYcbcrConversionImageFormatProperties is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSamplerYcbcrConversionImageFormatProperties>
@@ -62617,8 +85231,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SamplerYcbcrConversionInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionInfo;
+ using NativeType = VkSamplerYcbcrConversionInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSamplerYcbcrConversionInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -62634,8 +85250,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo &
- operator=( SamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SamplerYcbcrConversionInfo & operator=( SamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SamplerYcbcrConversionInfo & operator=( VkSamplerYcbcrConversionInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62644,13 +85259,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SamplerYcbcrConversionInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SamplerYcbcrConversionInfo &
+ VULKAN_HPP_CONSTEXPR_14 SamplerYcbcrConversionInfo &
setConversion( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion_ ) VULKAN_HPP_NOEXCEPT
{
conversion = conversion_;
@@ -62658,22 +85273,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSamplerYcbcrConversionInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerYcbcrConversionInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSamplerYcbcrConversionInfo *>( this );
}
- operator VkSamplerYcbcrConversionInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSamplerYcbcrConversionInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSamplerYcbcrConversionInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, conversion );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SamplerYcbcrConversionInfo const & ) const = default;
#else
bool operator==( SamplerYcbcrConversionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( conversion == rhs.conversion );
+# endif
}
bool operator!=( SamplerYcbcrConversionInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62687,10 +85320,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::SamplerYcbcrConversion conversion = {};
};
- static_assert( sizeof( SamplerYcbcrConversionInfo ) == sizeof( VkSamplerYcbcrConversionInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SamplerYcbcrConversionInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo ) ==
+ sizeof( VkSamplerYcbcrConversionInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SamplerYcbcrConversionInfo>::value,
+ "SamplerYcbcrConversionInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSamplerYcbcrConversionInfo>
@@ -62702,8 +85338,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_SCREEN_QNX )
struct ScreenSurfaceCreateInfoQNX
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eScreenSurfaceCreateInfoQNX;
+ using NativeType = VkScreenSurfaceCreateInfoQNX;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eScreenSurfaceCreateInfoQNX;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ScreenSurfaceCreateInfoQNX( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ = {},
@@ -62722,8 +85360,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX &
- operator=( ScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ScreenSurfaceCreateInfoQNX & operator=( ScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ScreenSurfaceCreateInfoQNX & operator=( VkScreenSurfaceCreateInfoQNX const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62732,49 +85369,71 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ScreenSurfaceCreateInfoQNX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ScreenSurfaceCreateInfoQNX &
- setFlags( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX &
+ setFlags( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ScreenSurfaceCreateInfoQNX & setContext( struct _screen_context * context_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX &
+ setContext( struct _screen_context * context_ ) VULKAN_HPP_NOEXCEPT
{
context = context_;
return *this;
}
- ScreenSurfaceCreateInfoQNX & setWindow( struct _screen_window * window_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ScreenSurfaceCreateInfoQNX &
+ setWindow( struct _screen_window * window_ ) VULKAN_HPP_NOEXCEPT
{
window = window_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkScreenSurfaceCreateInfoQNX const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkScreenSurfaceCreateInfoQNX const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkScreenSurfaceCreateInfoQNX *>( this );
}
- operator VkScreenSurfaceCreateInfoQNX &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkScreenSurfaceCreateInfoQNX &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkScreenSurfaceCreateInfoQNX *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateFlagsQNX const &,
+ struct _screen_context * const &,
+ struct _screen_window * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, context, window );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ScreenSurfaceCreateInfoQNX const & ) const = default;
# else
bool operator==( ScreenSurfaceCreateInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( context == rhs.context ) &&
( window == rhs.window );
+# endif
}
bool operator!=( ScreenSurfaceCreateInfoQNX const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62790,10 +85449,13 @@ namespace VULKAN_HPP_NAMESPACE
struct _screen_context * context = {};
struct _screen_window * window = {};
};
- static_assert( sizeof( ScreenSurfaceCreateInfoQNX ) == sizeof( VkScreenSurfaceCreateInfoQNX ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ScreenSurfaceCreateInfoQNX>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX ) ==
+ sizeof( VkScreenSurfaceCreateInfoQNX ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ScreenSurfaceCreateInfoQNX>::value,
+ "ScreenSurfaceCreateInfoQNX is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eScreenSurfaceCreateInfoQNX>
@@ -62804,8 +85466,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SemaphoreCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreCreateInfo;
+ using NativeType = VkSemaphoreCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -62820,8 +85484,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo &
- operator=( SemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreCreateInfo & operator=( SemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreCreateInfo & operator=( VkSemaphoreCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62830,35 +85493,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreCreateInfo *>( this );
}
- operator VkSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreCreateInfo const & ) const = default;
#else
bool operator==( SemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( SemaphoreCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62872,9 +85554,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::SemaphoreCreateFlags flags = {};
};
- static_assert( sizeof( SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo ) == sizeof( VkSemaphoreCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreCreateInfo>::value,
+ "SemaphoreCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreCreateInfo>
@@ -62884,8 +85569,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SemaphoreGetFdInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetFdInfoKHR;
+ using NativeType = VkSemaphoreGetFdInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetFdInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SemaphoreGetFdInfoKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {},
@@ -62903,8 +85590,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR &
- operator=( SemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreGetFdInfoKHR & operator=( SemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreGetFdInfoKHR & operator=( VkSemaphoreGetFdInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -62913,19 +85599,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreGetFdInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- SemaphoreGetFdInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetFdInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -62933,23 +85620,42 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreGetFdInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreGetFdInfoKHR *>( this );
}
- operator VkSemaphoreGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreGetFdInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreGetFdInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, handleType );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreGetFdInfoKHR const & ) const = default;
#else
bool operator==( SemaphoreGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( SemaphoreGetFdInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -62965,9 +85671,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( SemaphoreGetFdInfoKHR ) == sizeof( VkSemaphoreGetFdInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreGetFdInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR ) == sizeof( VkSemaphoreGetFdInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreGetFdInfoKHR>::value,
+ "SemaphoreGetFdInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreGetFdInfoKHR>
@@ -62978,8 +85687,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct SemaphoreGetWin32HandleInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetWin32HandleInfoKHR;
+ using NativeType = VkSemaphoreGetWin32HandleInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreGetWin32HandleInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SemaphoreGetWin32HandleInfoKHR(
@@ -62998,8 +85709,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR &
- operator=( SemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreGetWin32HandleInfoKHR &
+ operator=( SemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreGetWin32HandleInfoKHR & operator=( VkSemaphoreGetWin32HandleInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63008,19 +85719,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreGetWin32HandleInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- SemaphoreGetWin32HandleInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetWin32HandleInfoKHR &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -63028,23 +85740,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreGetWin32HandleInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreGetWin32HandleInfoKHR *>( this );
}
- operator VkSemaphoreGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreGetWin32HandleInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreGetWin32HandleInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, handleType );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreGetWin32HandleInfoKHR const & ) const = default;
# else
bool operator==( SemaphoreGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( SemaphoreGetWin32HandleInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63060,10 +85791,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( SemaphoreGetWin32HandleInfoKHR ) == sizeof( VkSemaphoreGetWin32HandleInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreGetWin32HandleInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR ) ==
+ sizeof( VkSemaphoreGetWin32HandleInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreGetWin32HandleInfoKHR>::value,
+ "SemaphoreGetWin32HandleInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreGetWin32HandleInfoKHR>
@@ -63075,7 +85810,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_FUCHSIA )
struct SemaphoreGetZirconHandleInfoFUCHSIA
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSemaphoreGetZirconHandleInfoFUCHSIA;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA;
@@ -63096,8 +85833,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA &
- operator=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreGetZirconHandleInfoFUCHSIA &
+ operator=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreGetZirconHandleInfoFUCHSIA &
operator=( VkSemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -63107,19 +85844,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreGetZirconHandleInfoFUCHSIA & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- SemaphoreGetZirconHandleInfoFUCHSIA &
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreGetZirconHandleInfoFUCHSIA &
setHandleType( VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType_ ) VULKAN_HPP_NOEXCEPT
{
handleType = handleType_;
@@ -63127,23 +85865,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreGetZirconHandleInfoFUCHSIA const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreGetZirconHandleInfoFUCHSIA *>( this );
}
- operator VkSemaphoreGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreGetZirconHandleInfoFUCHSIA &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreGetZirconHandleInfoFUCHSIA *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, handleType );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreGetZirconHandleInfoFUCHSIA const & ) const = default;
# else
bool operator==( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( handleType == rhs.handleType );
+# endif
}
bool operator!=( SemaphoreGetZirconHandleInfoFUCHSIA const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63159,10 +85916,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits handleType =
VULKAN_HPP_NAMESPACE::ExternalSemaphoreHandleTypeFlagBits::eOpaqueFd;
};
- static_assert( sizeof( SemaphoreGetZirconHandleInfoFUCHSIA ) == sizeof( VkSemaphoreGetZirconHandleInfoFUCHSIA ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreGetZirconHandleInfoFUCHSIA>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA ) ==
+ sizeof( VkSemaphoreGetZirconHandleInfoFUCHSIA ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreGetZirconHandleInfoFUCHSIA>::value,
+ "SemaphoreGetZirconHandleInfoFUCHSIA is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreGetZirconHandleInfoFUCHSIA>
@@ -63173,8 +85934,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SemaphoreSignalInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSignalInfo;
+ using NativeType = VkSemaphoreSignalInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSignalInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SemaphoreSignalInfo( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {},
@@ -63190,8 +85953,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo &
- operator=( SemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreSignalInfo & operator=( SemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreSignalInfo & operator=( VkSemaphoreSignalInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63200,42 +85962,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreSignalInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreSignalInfo & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- SemaphoreSignalInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSignalInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT
{
value = value_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreSignalInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreSignalInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreSignalInfo *>( this );
}
- operator VkSemaphoreSignalInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreSignalInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreSignalInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, value );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreSignalInfo const & ) const = default;
#else
bool operator==( SemaphoreSignalInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( value == rhs.value );
+# endif
}
bool operator!=( SemaphoreSignalInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63250,9 +86032,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Semaphore semaphore = {};
uint64_t value = {};
};
- static_assert( sizeof( SemaphoreSignalInfo ) == sizeof( VkSemaphoreSignalInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreSignalInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo ) == sizeof( VkSemaphoreSignalInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreSignalInfo>::value,
+ "SemaphoreSignalInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreSignalInfo>
@@ -63261,117 +86046,147 @@ namespace VULKAN_HPP_NAMESPACE
};
using SemaphoreSignalInfoKHR = SemaphoreSignalInfo;
- struct SemaphoreSubmitInfoKHR
+ struct SemaphoreSubmitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSubmitInfoKHR;
+ using NativeType = VkSemaphoreSubmitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreSubmitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfoKHR( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {},
- uint64_t value_ = {},
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask_ = {},
- uint32_t deviceIndex_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfo( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ = {},
+ uint64_t value_ = {},
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask_ = {},
+ uint32_t deviceIndex_ = {} ) VULKAN_HPP_NOEXCEPT
: semaphore( semaphore_ )
, value( value_ )
, stageMask( stageMask_ )
, deviceIndex( deviceIndex_ )
{}
- VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfoKHR( SemaphoreSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR SemaphoreSubmitInfo( SemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- SemaphoreSubmitInfoKHR( VkSemaphoreSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : SemaphoreSubmitInfoKHR( *reinterpret_cast<SemaphoreSubmitInfoKHR const *>( &rhs ) )
+ SemaphoreSubmitInfo( VkSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
+ : SemaphoreSubmitInfo( *reinterpret_cast<SemaphoreSubmitInfo const *>( &rhs ) )
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfoKHR &
- operator=( SemaphoreSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreSubmitInfo & operator=( SemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- SemaphoreSubmitInfoKHR & operator=( VkSemaphoreSubmitInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ SemaphoreSubmitInfo & operator=( VkSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreSubmitInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreSubmitInfoKHR & setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo &
+ setSemaphore( VULKAN_HPP_NAMESPACE::Semaphore semaphore_ ) VULKAN_HPP_NOEXCEPT
{
semaphore = semaphore_;
return *this;
}
- SemaphoreSubmitInfoKHR & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setValue( uint64_t value_ ) VULKAN_HPP_NOEXCEPT
{
value = value_;
return *this;
}
- SemaphoreSubmitInfoKHR & setStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo &
+ setStageMask( VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask_ ) VULKAN_HPP_NOEXCEPT
{
stageMask = stageMask_;
return *this;
}
- SemaphoreSubmitInfoKHR & setDeviceIndex( uint32_t deviceIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreSubmitInfo & setDeviceIndex( uint32_t deviceIndex_ ) VULKAN_HPP_NOEXCEPT
{
deviceIndex = deviceIndex_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreSubmitInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkSemaphoreSubmitInfoKHR *>( this );
+ return *reinterpret_cast<const VkSemaphoreSubmitInfo *>( this );
}
- operator VkSemaphoreSubmitInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkSemaphoreSubmitInfoKHR *>( this );
+ return *reinterpret_cast<VkSemaphoreSubmitInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Semaphore const &,
+ uint64_t const &,
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphore, value, stageMask, deviceIndex );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( SemaphoreSubmitInfoKHR const & ) const = default;
+ auto operator<=>( SemaphoreSubmitInfo const & ) const = default;
#else
- bool operator==( SemaphoreSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( SemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphore == rhs.semaphore ) &&
( value == rhs.value ) && ( stageMask == rhs.stageMask ) && ( deviceIndex == rhs.deviceIndex );
+# endif
}
- bool operator!=( SemaphoreSubmitInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( SemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreSubmitInfoKHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::Semaphore semaphore = {};
- uint64_t value = {};
- VULKAN_HPP_NAMESPACE::PipelineStageFlags2KHR stageMask = {};
- uint32_t deviceIndex = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSemaphoreSubmitInfo;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::Semaphore semaphore = {};
+ uint64_t value = {};
+ VULKAN_HPP_NAMESPACE::PipelineStageFlags2 stageMask = {};
+ uint32_t deviceIndex = {};
};
- static_assert( sizeof( SemaphoreSubmitInfoKHR ) == sizeof( VkSemaphoreSubmitInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreSubmitInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo ) == sizeof( VkSemaphoreSubmitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo>::value,
+ "SemaphoreSubmitInfo is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eSemaphoreSubmitInfoKHR>
+ struct CppType<StructureType, StructureType::eSemaphoreSubmitInfo>
{
- using Type = SemaphoreSubmitInfoKHR;
+ using Type = SemaphoreSubmitInfo;
};
+ using SemaphoreSubmitInfoKHR = SemaphoreSubmitInfo;
struct SemaphoreTypeCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreTypeCreateInfo;
+ using NativeType = VkSemaphoreTypeCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreTypeCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SemaphoreTypeCreateInfo(
@@ -63388,8 +86203,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo &
- operator=( SemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreTypeCreateInfo & operator=( SemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreTypeCreateInfo & operator=( VkSemaphoreTypeCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63398,42 +86212,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreTypeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreTypeCreateInfo & setSemaphoreType( VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo &
+ setSemaphoreType( VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType_ ) VULKAN_HPP_NOEXCEPT
{
semaphoreType = semaphoreType_;
return *this;
}
- SemaphoreTypeCreateInfo & setInitialValue( uint64_t initialValue_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreTypeCreateInfo & setInitialValue( uint64_t initialValue_ ) VULKAN_HPP_NOEXCEPT
{
initialValue = initialValue_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreTypeCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreTypeCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreTypeCreateInfo *>( this );
}
- operator VkSemaphoreTypeCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreTypeCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreTypeCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SemaphoreType const &,
+ uint64_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, semaphoreType, initialValue );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreTypeCreateInfo const & ) const = default;
#else
bool operator==( SemaphoreTypeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( semaphoreType == rhs.semaphoreType ) &&
( initialValue == rhs.initialValue );
+# endif
}
bool operator!=( SemaphoreTypeCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63448,9 +86282,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::SemaphoreType semaphoreType = VULKAN_HPP_NAMESPACE::SemaphoreType::eBinary;
uint64_t initialValue = {};
};
- static_assert( sizeof( SemaphoreTypeCreateInfo ) == sizeof( VkSemaphoreTypeCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreTypeCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo ) ==
+ sizeof( VkSemaphoreTypeCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreTypeCreateInfo>::value,
+ "SemaphoreTypeCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreTypeCreateInfo>
@@ -63461,8 +86299,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SemaphoreWaitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreWaitInfo;
+ using NativeType = VkSemaphoreWaitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSemaphoreWaitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SemaphoreWaitInfo( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ = {},
@@ -63504,8 +86344,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo &
- operator=( SemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SemaphoreWaitInfo & operator=( SemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SemaphoreWaitInfo & operator=( VkSemaphoreWaitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63514,25 +86353,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SemaphoreWaitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SemaphoreWaitInfo & setFlags( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- SemaphoreWaitInfo & setSemaphoreCount( uint32_t semaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setSemaphoreCount( uint32_t semaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
semaphoreCount = semaphoreCount_;
return *this;
}
- SemaphoreWaitInfo & setPSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo &
+ setPSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores_ ) VULKAN_HPP_NOEXCEPT
{
pSemaphores = pSemaphores_;
return *this;
@@ -63549,7 +86390,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SemaphoreWaitInfo & setPValues( const uint64_t * pValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SemaphoreWaitInfo & setPValues( const uint64_t * pValues_ ) VULKAN_HPP_NOEXCEPT
{
pValues = pValues_;
return *this;
@@ -63566,24 +86407,45 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSemaphoreWaitInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreWaitInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSemaphoreWaitInfo *>( this );
}
- operator VkSemaphoreWaitInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSemaphoreWaitInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSemaphoreWaitInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SemaphoreWaitFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Semaphore * const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, semaphoreCount, pSemaphores, pValues );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SemaphoreWaitInfo const & ) const = default;
#else
bool operator==( SemaphoreWaitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( semaphoreCount == rhs.semaphoreCount ) && ( pSemaphores == rhs.pSemaphores ) &&
( pValues == rhs.pValues );
+# endif
}
bool operator!=( SemaphoreWaitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63600,9 +86462,12 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::Semaphore * pSemaphores = {};
const uint64_t * pValues = {};
};
- static_assert( sizeof( SemaphoreWaitInfo ) == sizeof( VkSemaphoreWaitInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SemaphoreWaitInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo ) == sizeof( VkSemaphoreWaitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SemaphoreWaitInfo>::value,
+ "SemaphoreWaitInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSemaphoreWaitInfo>
@@ -63613,6 +86478,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SetStateFlagsIndirectCommandNV
{
+ using NativeType = VkSetStateFlagsIndirectCommandNV;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SetStateFlagsIndirectCommandNV( uint32_t data_ = {} ) VULKAN_HPP_NOEXCEPT : data( data_ ) {}
@@ -63624,8 +86491,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SetStateFlagsIndirectCommandNV &
- operator=( SetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SetStateFlagsIndirectCommandNV &
+ operator=( SetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SetStateFlagsIndirectCommandNV & operator=( VkSetStateFlagsIndirectCommandNV const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63634,29 +86501,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SetStateFlagsIndirectCommandNV & setData( uint32_t data_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SetStateFlagsIndirectCommandNV & setData( uint32_t data_ ) VULKAN_HPP_NOEXCEPT
{
data = data_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSetStateFlagsIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSetStateFlagsIndirectCommandNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSetStateFlagsIndirectCommandNV *>( this );
}
- operator VkSetStateFlagsIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSetStateFlagsIndirectCommandNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSetStateFlagsIndirectCommandNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( data );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SetStateFlagsIndirectCommandNV const & ) const = default;
#else
bool operator==( SetStateFlagsIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( data == rhs.data );
+# endif
}
bool operator!=( SetStateFlagsIndirectCommandNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63668,15 +86551,21 @@ namespace VULKAN_HPP_NAMESPACE
public:
uint32_t data = {};
};
- static_assert( sizeof( SetStateFlagsIndirectCommandNV ) == sizeof( VkSetStateFlagsIndirectCommandNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SetStateFlagsIndirectCommandNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV ) ==
+ sizeof( VkSetStateFlagsIndirectCommandNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SetStateFlagsIndirectCommandNV>::value,
+ "SetStateFlagsIndirectCommandNV is not nothrow_move_constructible!" );
struct ShaderModuleCreateInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleCreateInfo;
+ using NativeType = VkShaderModuleCreateInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eShaderModuleCreateInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ShaderModuleCreateInfo( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ = {},
@@ -63701,8 +86590,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo &
- operator=( ShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ShaderModuleCreateInfo & operator=( ShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ShaderModuleCreateInfo & operator=( VkShaderModuleCreateInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63711,25 +86599,26 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ShaderModuleCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ShaderModuleCreateInfo & setFlags( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo &
+ setFlags( VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ShaderModuleCreateInfo & setCodeSize( size_t codeSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setCodeSize( size_t codeSize_ ) VULKAN_HPP_NOEXCEPT
{
codeSize = codeSize_;
return *this;
}
- ShaderModuleCreateInfo & setPCode( const uint32_t * pCode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ShaderModuleCreateInfo & setPCode( const uint32_t * pCode_ ) VULKAN_HPP_NOEXCEPT
{
pCode = pCode_;
return *this;
@@ -63746,23 +86635,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkShaderModuleCreateInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderModuleCreateInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkShaderModuleCreateInfo *>( this );
}
- operator VkShaderModuleCreateInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderModuleCreateInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkShaderModuleCreateInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ShaderModuleCreateFlags const &,
+ size_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, codeSize, pCode );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ShaderModuleCreateInfo const & ) const = default;
#else
bool operator==( ShaderModuleCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( codeSize == rhs.codeSize ) && ( pCode == rhs.pCode );
+# endif
}
bool operator!=( ShaderModuleCreateInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63778,9 +86687,13 @@ namespace VULKAN_HPP_NAMESPACE
size_t codeSize = {};
const uint32_t * pCode = {};
};
- static_assert( sizeof( ShaderModuleCreateInfo ) == sizeof( VkShaderModuleCreateInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ShaderModuleCreateInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo ) ==
+ sizeof( VkShaderModuleCreateInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ShaderModuleCreateInfo>::value,
+ "ShaderModuleCreateInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eShaderModuleCreateInfo>
@@ -63790,7 +86703,9 @@ namespace VULKAN_HPP_NAMESPACE
struct ShaderModuleValidationCacheCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkShaderModuleValidationCacheCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eShaderModuleValidationCacheCreateInfoEXT;
@@ -63810,8 +86725,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT &
- operator=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ShaderModuleValidationCacheCreateInfoEXT &
+ operator=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ShaderModuleValidationCacheCreateInfoEXT &
operator=( VkShaderModuleValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -63821,13 +86736,14 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ShaderModuleValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ShaderModuleValidationCacheCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 ShaderModuleValidationCacheCreateInfoEXT &
setValidationCache( VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache_ ) VULKAN_HPP_NOEXCEPT
{
validationCache = validationCache_;
@@ -63835,22 +86751,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkShaderModuleValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderModuleValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT *>( this );
}
- operator VkShaderModuleValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderModuleValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ValidationCacheEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, validationCache );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ShaderModuleValidationCacheCreateInfoEXT const & ) const = default;
#else
bool operator==( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( validationCache == rhs.validationCache );
+# endif
}
bool operator!=( ShaderModuleValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63864,11 +86798,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::ValidationCacheEXT validationCache = {};
};
- static_assert( sizeof( ShaderModuleValidationCacheCreateInfoEXT ) ==
- sizeof( VkShaderModuleValidationCacheCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ShaderModuleValidationCacheCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT ) ==
+ sizeof( VkShaderModuleValidationCacheCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ShaderModuleValidationCacheCreateInfoEXT>::value,
+ "ShaderModuleValidationCacheCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eShaderModuleValidationCacheCreateInfoEXT>
@@ -63878,6 +86816,8 @@ namespace VULKAN_HPP_NAMESPACE
struct ShaderResourceUsageAMD
{
+ using NativeType = VkShaderResourceUsageAMD;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ShaderResourceUsageAMD( uint32_t numUsedVgprs_ = {},
uint32_t numUsedSgprs_ = {},
@@ -63898,8 +86838,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ShaderResourceUsageAMD &
- operator=( ShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ShaderResourceUsageAMD & operator=( ShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ShaderResourceUsageAMD & operator=( VkShaderResourceUsageAMD const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63907,25 +86846,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkShaderResourceUsageAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderResourceUsageAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkShaderResourceUsageAMD *>( this );
}
- operator VkShaderResourceUsageAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderResourceUsageAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkShaderResourceUsageAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &, size_t const &, size_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ numUsedVgprs, numUsedSgprs, ldsSizePerLocalWorkGroup, ldsUsageSizeInBytes, scratchMemUsageInBytes );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ShaderResourceUsageAMD const & ) const = default;
#else
bool operator==( ShaderResourceUsageAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( numUsedVgprs == rhs.numUsedVgprs ) && ( numUsedSgprs == rhs.numUsedSgprs ) &&
( ldsSizePerLocalWorkGroup == rhs.ldsSizePerLocalWorkGroup ) &&
( ldsUsageSizeInBytes == rhs.ldsUsageSizeInBytes ) &&
( scratchMemUsageInBytes == rhs.scratchMemUsageInBytes );
+# endif
}
bool operator!=( ShaderResourceUsageAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -63941,12 +86897,18 @@ namespace VULKAN_HPP_NAMESPACE
size_t ldsUsageSizeInBytes = {};
size_t scratchMemUsageInBytes = {};
};
- static_assert( sizeof( ShaderResourceUsageAMD ) == sizeof( VkShaderResourceUsageAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ShaderResourceUsageAMD>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD ) ==
+ sizeof( VkShaderResourceUsageAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD>::value,
+ "ShaderResourceUsageAMD is not nothrow_move_constructible!" );
struct ShaderStatisticsInfoAMD
{
+ using NativeType = VkShaderStatisticsInfoAMD;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14
ShaderStatisticsInfoAMD( VULKAN_HPP_NAMESPACE::ShaderStageFlags shaderStageMask_ = {},
@@ -63973,8 +86935,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ShaderStatisticsInfoAMD &
- operator=( ShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ShaderStatisticsInfoAMD & operator=( ShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ShaderStatisticsInfoAMD & operator=( VkShaderStatisticsInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -63982,25 +86943,53 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkShaderStatisticsInfoAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderStatisticsInfoAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkShaderStatisticsInfoAMD *>( this );
}
- operator VkShaderStatisticsInfoAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkShaderStatisticsInfoAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkShaderStatisticsInfoAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ShaderStageFlags const &,
+ VULKAN_HPP_NAMESPACE::ShaderResourceUsageAMD const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 3> const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( shaderStageMask,
+ resourceUsage,
+ numPhysicalVgprs,
+ numPhysicalSgprs,
+ numAvailableVgprs,
+ numAvailableSgprs,
+ computeWorkGroupSize );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ShaderStatisticsInfoAMD const & ) const = default;
#else
bool operator==( ShaderStatisticsInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( shaderStageMask == rhs.shaderStageMask ) && ( resourceUsage == rhs.resourceUsage ) &&
( numPhysicalVgprs == rhs.numPhysicalVgprs ) && ( numPhysicalSgprs == rhs.numPhysicalSgprs ) &&
( numAvailableVgprs == rhs.numAvailableVgprs ) && ( numAvailableSgprs == rhs.numAvailableSgprs ) &&
( computeWorkGroupSize == rhs.computeWorkGroupSize );
+# endif
}
bool operator!=( ShaderStatisticsInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64018,13 +87007,19 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t numAvailableSgprs = {};
VULKAN_HPP_NAMESPACE::ArrayWrapper1D<uint32_t, 3> computeWorkGroupSize = {};
};
- static_assert( sizeof( ShaderStatisticsInfoAMD ) == sizeof( VkShaderStatisticsInfoAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ShaderStatisticsInfoAMD>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD ) ==
+ sizeof( VkShaderStatisticsInfoAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ShaderStatisticsInfoAMD>::value,
+ "ShaderStatisticsInfoAMD is not nothrow_move_constructible!" );
struct SharedPresentSurfaceCapabilitiesKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSharedPresentSurfaceCapabilitiesKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSharedPresentSurfaceCapabilitiesKHR;
@@ -64042,8 +87037,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SharedPresentSurfaceCapabilitiesKHR &
- operator=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SharedPresentSurfaceCapabilitiesKHR &
+ operator=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SharedPresentSurfaceCapabilitiesKHR &
operator=( VkSharedPresentSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -64052,23 +87047,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSharedPresentSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSharedPresentSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR *>( this );
}
- operator VkSharedPresentSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSharedPresentSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::ImageUsageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, sharedPresentSupportedUsageFlags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SharedPresentSurfaceCapabilitiesKHR const & ) const = default;
#else
bool operator==( SharedPresentSurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( sharedPresentSupportedUsageFlags == rhs.sharedPresentSupportedUsageFlags );
+# endif
}
bool operator!=( SharedPresentSurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64082,10 +87094,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::ImageUsageFlags sharedPresentSupportedUsageFlags = {};
};
- static_assert( sizeof( SharedPresentSurfaceCapabilitiesKHR ) == sizeof( VkSharedPresentSurfaceCapabilitiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SharedPresentSurfaceCapabilitiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR ) ==
+ sizeof( VkSharedPresentSurfaceCapabilitiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SharedPresentSurfaceCapabilitiesKHR>::value,
+ "SharedPresentSurfaceCapabilitiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSharedPresentSurfaceCapabilitiesKHR>
@@ -64095,6 +87111,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SparseImageFormatProperties
{
+ using NativeType = VkSparseImageFormatProperties;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SparseImageFormatProperties( VULKAN_HPP_NAMESPACE::ImageAspectFlags aspectMask_ = {},
@@ -64113,8 +87131,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageFormatProperties &
- operator=( SparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageFormatProperties & operator=( SparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageFormatProperties & operator=( VkSparseImageFormatProperties const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64122,22 +87139,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSparseImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageFormatProperties const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageFormatProperties *>( this );
}
- operator VkSparseImageFormatProperties &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageFormatProperties &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageFormatProperties *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::ImageAspectFlags const &,
+ VULKAN_HPP_NAMESPACE::Extent3D const &,
+ VULKAN_HPP_NAMESPACE::SparseImageFormatFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( aspectMask, imageGranularity, flags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageFormatProperties const & ) const = default;
#else
bool operator==( SparseImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( aspectMask == rhs.aspectMask ) && ( imageGranularity == rhs.imageGranularity ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( SparseImageFormatProperties const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64151,15 +87186,21 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent3D imageGranularity = {};
VULKAN_HPP_NAMESPACE::SparseImageFormatFlags flags = {};
};
- static_assert( sizeof( SparseImageFormatProperties ) == sizeof( VkSparseImageFormatProperties ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageFormatProperties>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties ) ==
+ sizeof( VkSparseImageFormatProperties ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties>::value,
+ "SparseImageFormatProperties is not nothrow_move_constructible!" );
struct SparseImageFormatProperties2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageFormatProperties2;
+ using NativeType = VkSparseImageFormatProperties2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageFormatProperties2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SparseImageFormatProperties2(
@@ -64175,8 +87216,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageFormatProperties2 &
- operator=( SparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageFormatProperties2 & operator=( SparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageFormatProperties2 & operator=( VkSparseImageFormatProperties2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64184,22 +87224,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSparseImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageFormatProperties2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageFormatProperties2 *>( this );
}
- operator VkSparseImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageFormatProperties2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageFormatProperties2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SparseImageFormatProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, properties );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageFormatProperties2 const & ) const = default;
#else
bool operator==( SparseImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( properties == rhs.properties );
+# endif
}
bool operator!=( SparseImageFormatProperties2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64213,10 +87271,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::SparseImageFormatProperties properties = {};
};
- static_assert( sizeof( SparseImageFormatProperties2 ) == sizeof( VkSparseImageFormatProperties2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageFormatProperties2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2 ) ==
+ sizeof( VkSparseImageFormatProperties2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties2>::value,
+ "SparseImageFormatProperties2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSparseImageFormatProperties2>
@@ -64227,6 +87289,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SparseImageMemoryRequirements
{
+ using NativeType = VkSparseImageMemoryRequirements;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SparseImageMemoryRequirements( VULKAN_HPP_NAMESPACE::SparseImageFormatProperties formatProperties_ = {},
@@ -64249,8 +87313,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryRequirements &
- operator=( SparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageMemoryRequirements &
+ operator=( SparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageMemoryRequirements & operator=( VkSparseImageMemoryRequirements const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64258,24 +87322,45 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSparseImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryRequirements const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageMemoryRequirements *>( this );
}
- operator VkSparseImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryRequirements &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageMemoryRequirements *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::SparseImageFormatProperties const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ formatProperties, imageMipTailFirstLod, imageMipTailSize, imageMipTailOffset, imageMipTailStride );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageMemoryRequirements const & ) const = default;
#else
bool operator==( SparseImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( formatProperties == rhs.formatProperties ) && ( imageMipTailFirstLod == rhs.imageMipTailFirstLod ) &&
( imageMipTailSize == rhs.imageMipTailSize ) && ( imageMipTailOffset == rhs.imageMipTailOffset ) &&
( imageMipTailStride == rhs.imageMipTailStride );
+# endif
}
bool operator!=( SparseImageMemoryRequirements const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64291,15 +87376,21 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailOffset = {};
VULKAN_HPP_NAMESPACE::DeviceSize imageMipTailStride = {};
};
- static_assert( sizeof( SparseImageMemoryRequirements ) == sizeof( VkSparseImageMemoryRequirements ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageMemoryRequirements>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements ) ==
+ sizeof( VkSparseImageMemoryRequirements ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements>::value,
+ "SparseImageMemoryRequirements is not nothrow_move_constructible!" );
struct SparseImageMemoryRequirements2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageMemoryRequirements2;
+ using NativeType = VkSparseImageMemoryRequirements2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSparseImageMemoryRequirements2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SparseImageMemoryRequirements2(
@@ -64315,8 +87406,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SparseImageMemoryRequirements2 &
- operator=( SparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SparseImageMemoryRequirements2 &
+ operator=( SparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SparseImageMemoryRequirements2 & operator=( VkSparseImageMemoryRequirements2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64324,22 +87415,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSparseImageMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryRequirements2 const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSparseImageMemoryRequirements2 *>( this );
}
- operator VkSparseImageMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSparseImageMemoryRequirements2 &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSparseImageMemoryRequirements2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryRequirements );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SparseImageMemoryRequirements2 const & ) const = default;
#else
bool operator==( SparseImageMemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryRequirements == rhs.memoryRequirements );
+# endif
}
bool operator!=( SparseImageMemoryRequirements2 const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64353,10 +87462,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements memoryRequirements = {};
};
- static_assert( sizeof( SparseImageMemoryRequirements2 ) == sizeof( VkSparseImageMemoryRequirements2 ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SparseImageMemoryRequirements2>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2 ) ==
+ sizeof( VkSparseImageMemoryRequirements2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SparseImageMemoryRequirements2>::value,
+ "SparseImageMemoryRequirements2 is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSparseImageMemoryRequirements2>
@@ -64368,7 +87481,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_GGP )
struct StreamDescriptorSurfaceCreateInfoGGP
{
- static const bool allowDuplicate = false;
+ using NativeType = VkStreamDescriptorSurfaceCreateInfoGGP;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eStreamDescriptorSurfaceCreateInfoGGP;
@@ -64388,8 +87503,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP &
- operator=( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ StreamDescriptorSurfaceCreateInfoGGP &
+ operator=( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT = default;
StreamDescriptorSurfaceCreateInfoGGP &
operator=( VkStreamDescriptorSurfaceCreateInfoGGP const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -64399,40 +87514,68 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- StreamDescriptorSurfaceCreateInfoGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- StreamDescriptorSurfaceCreateInfoGGP &
+ VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP &
setFlags( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- StreamDescriptorSurfaceCreateInfoGGP &
- setStreamDescriptor( GgpStreamDescriptor streamDescriptor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StreamDescriptorSurfaceCreateInfoGGP &
+ setStreamDescriptor( GgpStreamDescriptor streamDescriptor_ ) VULKAN_HPP_NOEXCEPT
{
streamDescriptor = streamDescriptor_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkStreamDescriptorSurfaceCreateInfoGGP const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkStreamDescriptorSurfaceCreateInfoGGP const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkStreamDescriptorSurfaceCreateInfoGGP *>( this );
}
- operator VkStreamDescriptorSurfaceCreateInfoGGP &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkStreamDescriptorSurfaceCreateInfoGGP &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkStreamDescriptorSurfaceCreateInfoGGP *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP const &,
+ GgpStreamDescriptor const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, streamDescriptor );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( StreamDescriptorSurfaceCreateInfoGGP const & ) const = default;
-# else
+ std::strong_ordering operator<=>( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &streamDescriptor, &rhs.streamDescriptor, sizeof( GgpStreamDescriptor ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( StreamDescriptorSurfaceCreateInfoGGP const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
@@ -64443,7 +87586,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eStreamDescriptorSurfaceCreateInfoGGP;
@@ -64451,10 +87593,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateFlagsGGP flags = {};
GgpStreamDescriptor streamDescriptor = {};
};
- static_assert( sizeof( StreamDescriptorSurfaceCreateInfoGGP ) == sizeof( VkStreamDescriptorSurfaceCreateInfoGGP ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<StreamDescriptorSurfaceCreateInfoGGP>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP ) ==
+ sizeof( VkStreamDescriptorSurfaceCreateInfoGGP ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::StreamDescriptorSurfaceCreateInfoGGP>::value,
+ "StreamDescriptorSurfaceCreateInfoGGP is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eStreamDescriptorSurfaceCreateInfoGGP>
@@ -64465,6 +87611,8 @@ namespace VULKAN_HPP_NAMESPACE
struct StridedDeviceAddressRegionKHR
{
+ using NativeType = VkStridedDeviceAddressRegionKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
StridedDeviceAddressRegionKHR( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ = {},
@@ -64483,8 +87631,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR &
- operator=( StridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ StridedDeviceAddressRegionKHR &
+ operator=( StridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
StridedDeviceAddressRegionKHR & operator=( VkStridedDeviceAddressRegionKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64493,42 +87641,62 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- StridedDeviceAddressRegionKHR &
- setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR &
+ setDeviceAddress( VULKAN_HPP_NAMESPACE::DeviceAddress deviceAddress_ ) VULKAN_HPP_NOEXCEPT
{
deviceAddress = deviceAddress_;
return *this;
}
- StridedDeviceAddressRegionKHR & setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR &
+ setStride( VULKAN_HPP_NAMESPACE::DeviceSize stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
- StridedDeviceAddressRegionKHR & setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 StridedDeviceAddressRegionKHR &
+ setSize( VULKAN_HPP_NAMESPACE::DeviceSize size_ ) VULKAN_HPP_NOEXCEPT
{
size = size_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkStridedDeviceAddressRegionKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkStridedDeviceAddressRegionKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkStridedDeviceAddressRegionKHR *>( this );
}
- operator VkStridedDeviceAddressRegionKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkStridedDeviceAddressRegionKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkStridedDeviceAddressRegionKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::DeviceAddress const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( deviceAddress, stride, size );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( StridedDeviceAddressRegionKHR const & ) const = default;
#else
bool operator==( StridedDeviceAddressRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( deviceAddress == rhs.deviceAddress ) && ( stride == rhs.stride ) && ( size == rhs.size );
+# endif
}
bool operator!=( StridedDeviceAddressRegionKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64542,15 +87710,21 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize stride = {};
VULKAN_HPP_NAMESPACE::DeviceSize size = {};
};
- static_assert( sizeof( StridedDeviceAddressRegionKHR ) == sizeof( VkStridedDeviceAddressRegionKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<StridedDeviceAddressRegionKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR ) ==
+ sizeof( VkStridedDeviceAddressRegionKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::StridedDeviceAddressRegionKHR>::value,
+ "StridedDeviceAddressRegionKHR is not nothrow_move_constructible!" );
struct SubmitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo;
+ using NativeType = VkSubmitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -64606,7 +87780,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubmitInfo & operator=( SubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubmitInfo & operator=( SubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubmitInfo & operator=( VkSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64615,19 +87789,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setWaitSemaphoreCount( uint32_t waitSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreCount = waitSemaphoreCount_;
return *this;
}
- SubmitInfo & setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo &
+ setPWaitSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pWaitSemaphores_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphores = pWaitSemaphores_;
return *this;
@@ -64644,7 +87819,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubmitInfo &
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo &
setPWaitDstStageMask( const VULKAN_HPP_NAMESPACE::PipelineStageFlags * pWaitDstStageMask_ ) VULKAN_HPP_NOEXCEPT
{
pWaitDstStageMask = pWaitDstStageMask_;
@@ -64662,13 +87837,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setCommandBufferCount( uint32_t commandBufferCount_ ) VULKAN_HPP_NOEXCEPT
{
commandBufferCount = commandBufferCount_;
return *this;
}
- SubmitInfo & setPCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo &
+ setPCommandBuffers( const VULKAN_HPP_NAMESPACE::CommandBuffer * pCommandBuffers_ ) VULKAN_HPP_NOEXCEPT
{
pCommandBuffers = pCommandBuffers_;
return *this;
@@ -64685,13 +87861,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo & setSignalSemaphoreCount( uint32_t signalSemaphoreCount_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreCount = signalSemaphoreCount_;
return *this;
}
- SubmitInfo & setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo &
+ setPSignalSemaphores( const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores_ ) VULKAN_HPP_NOEXCEPT
{
pSignalSemaphores = pSignalSemaphores_;
return *this;
@@ -64709,25 +87886,57 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubmitInfo *>( this );
}
- operator VkSubmitInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubmitInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubmitInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Semaphore * const &,
+ const VULKAN_HPP_NAMESPACE::PipelineStageFlags * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::CommandBuffer * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Semaphore * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ waitSemaphoreCount,
+ pWaitSemaphores,
+ pWaitDstStageMask,
+ commandBufferCount,
+ pCommandBuffers,
+ signalSemaphoreCount,
+ pSignalSemaphores );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubmitInfo const & ) const = default;
#else
bool operator==( SubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( waitSemaphoreCount == rhs.waitSemaphoreCount ) &&
( pWaitSemaphores == rhs.pWaitSemaphores ) && ( pWaitDstStageMask == rhs.pWaitDstStageMask ) &&
( commandBufferCount == rhs.commandBufferCount ) && ( pCommandBuffers == rhs.pCommandBuffers ) &&
( signalSemaphoreCount == rhs.signalSemaphoreCount ) && ( pSignalSemaphores == rhs.pSignalSemaphores );
+# endif
}
bool operator!=( SubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -64747,8 +87956,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t signalSemaphoreCount = {};
const VULKAN_HPP_NAMESPACE::Semaphore * pSignalSemaphores = {};
};
- static_assert( sizeof( SubmitInfo ) == sizeof( VkSubmitInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubmitInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubmitInfo ) == sizeof( VkSubmitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubmitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubmitInfo>::value,
+ "SubmitInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubmitInfo>
@@ -64756,20 +87969,22 @@ namespace VULKAN_HPP_NAMESPACE
using Type = SubmitInfo;
};
- struct SubmitInfo2KHR
+ struct SubmitInfo2
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo2KHR;
+ using NativeType = VkSubmitInfo2;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubmitInfo2;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR SubmitInfo2KHR(
- VULKAN_HPP_NAMESPACE::SubmitFlagsKHR flags_ = {},
- uint32_t waitSemaphoreInfoCount_ = {},
- const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR * pWaitSemaphoreInfos_ = {},
- uint32_t commandBufferInfoCount_ = {},
- const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR * pCommandBufferInfos_ = {},
- uint32_t signalSemaphoreInfoCount_ = {},
- const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR * pSignalSemaphoreInfos_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR
+ SubmitInfo2( VULKAN_HPP_NAMESPACE::SubmitFlags flags_ = {},
+ uint32_t waitSemaphoreInfoCount_ = {},
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos_ = {},
+ uint32_t commandBufferInfoCount_ = {},
+ const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos_ = {},
+ uint32_t signalSemaphoreInfoCount_ = {},
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos_ = {} ) VULKAN_HPP_NOEXCEPT
: flags( flags_ )
, waitSemaphoreInfoCount( waitSemaphoreInfoCount_ )
, pWaitSemaphoreInfos( pWaitSemaphoreInfos_ )
@@ -64779,21 +87994,20 @@ namespace VULKAN_HPP_NAMESPACE
, pSignalSemaphoreInfos( pSignalSemaphoreInfos_ )
{}
- VULKAN_HPP_CONSTEXPR SubmitInfo2KHR( SubmitInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR SubmitInfo2( SubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- SubmitInfo2KHR( VkSubmitInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : SubmitInfo2KHR( *reinterpret_cast<SubmitInfo2KHR const *>( &rhs ) )
+ SubmitInfo2( VkSubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
+ : SubmitInfo2( *reinterpret_cast<SubmitInfo2 const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- SubmitInfo2KHR(
- VULKAN_HPP_NAMESPACE::SubmitFlagsKHR flags_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR> const &
- waitSemaphoreInfos_,
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR> const &
- commandBufferInfos_ = {},
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR> const &
- signalSemaphoreInfos_ = {} )
+ SubmitInfo2( VULKAN_HPP_NAMESPACE::SubmitFlags flags_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo> const &
+ waitSemaphoreInfos_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo> const & commandBufferInfos_ = {},
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo> const &
+ signalSemaphoreInfos_ = {} )
: flags( flags_ )
, waitSemaphoreInfoCount( static_cast<uint32_t>( waitSemaphoreInfos_.size() ) )
, pWaitSemaphoreInfos( waitSemaphoreInfos_.data() )
@@ -64805,43 +88019,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubmitInfo2KHR & operator=( SubmitInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubmitInfo2 & operator=( SubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- SubmitInfo2KHR & operator=( VkSubmitInfo2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ SubmitInfo2 & operator=( VkSubmitInfo2 const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SubmitInfo2KHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SubmitInfo2 const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubmitInfo2KHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SubmitInfo2KHR & setFlags( VULKAN_HPP_NAMESPACE::SubmitFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setFlags( VULKAN_HPP_NAMESPACE::SubmitFlags flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- SubmitInfo2KHR & setWaitSemaphoreInfoCount( uint32_t waitSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 &
+ setWaitSemaphoreInfoCount( uint32_t waitSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreInfoCount = waitSemaphoreInfoCount_;
return *this;
}
- SubmitInfo2KHR & setPWaitSemaphoreInfos( const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR * pWaitSemaphoreInfos_ )
- VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPWaitSemaphoreInfos(
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphoreInfos = pWaitSemaphoreInfos_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- SubmitInfo2KHR & setWaitSemaphoreInfos(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR> const &
+ SubmitInfo2 & setWaitSemaphoreInfos(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo> const &
waitSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreInfoCount = static_cast<uint32_t>( waitSemaphoreInfos_.size() );
@@ -64850,22 +88065,23 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubmitInfo2KHR & setCommandBufferInfoCount( uint32_t commandBufferInfoCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 &
+ setCommandBufferInfoCount( uint32_t commandBufferInfoCount_ ) VULKAN_HPP_NOEXCEPT
{
commandBufferInfoCount = commandBufferInfoCount_;
return *this;
}
- SubmitInfo2KHR & setPCommandBufferInfos(
- const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR * pCommandBufferInfos_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPCommandBufferInfos(
+ const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos_ ) VULKAN_HPP_NOEXCEPT
{
pCommandBufferInfos = pCommandBufferInfos_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- SubmitInfo2KHR & setCommandBufferInfos(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR> const &
+ SubmitInfo2 & setCommandBufferInfos(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo> const &
commandBufferInfos_ ) VULKAN_HPP_NOEXCEPT
{
commandBufferInfoCount = static_cast<uint32_t>( commandBufferInfos_.size() );
@@ -64874,22 +88090,23 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SubmitInfo2KHR & setSignalSemaphoreInfoCount( uint32_t signalSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 &
+ setSignalSemaphoreInfoCount( uint32_t signalSemaphoreInfoCount_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreInfoCount = signalSemaphoreInfoCount_;
return *this;
}
- SubmitInfo2KHR & setPSignalSemaphoreInfos(
- const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR * pSignalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubmitInfo2 & setPSignalSemaphoreInfos(
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT
{
pSignalSemaphoreInfos = pSignalSemaphoreInfos_;
return *this;
}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
- SubmitInfo2KHR & setSignalSemaphoreInfos(
- VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR> const &
+ SubmitInfo2 & setSignalSemaphoreInfos(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo> const &
signalSemaphoreInfos_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreInfoCount = static_cast<uint32_t>( signalSemaphoreInfos_.size() );
@@ -64899,21 +88116,52 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubmitInfo2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubmitInfo2 const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkSubmitInfo2KHR *>( this );
+ return *reinterpret_cast<const VkSubmitInfo2 *>( this );
}
- operator VkSubmitInfo2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubmitInfo2 &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkSubmitInfo2KHR *>( this );
+ return *reinterpret_cast<VkSubmitInfo2 *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SubmitFlags const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ waitSemaphoreInfoCount,
+ pWaitSemaphoreInfos,
+ commandBufferInfoCount,
+ pCommandBufferInfos,
+ signalSemaphoreInfoCount,
+ pSignalSemaphoreInfos );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( SubmitInfo2KHR const & ) const = default;
+ auto operator<=>( SubmitInfo2 const & ) const = default;
#else
- bool operator==( SubmitInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( SubmitInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( waitSemaphoreInfoCount == rhs.waitSemaphoreInfoCount ) &&
( pWaitSemaphoreInfos == rhs.pWaitSemaphoreInfos ) &&
@@ -64921,38 +88169,46 @@ namespace VULKAN_HPP_NAMESPACE
( pCommandBufferInfos == rhs.pCommandBufferInfos ) &&
( signalSemaphoreInfoCount == rhs.signalSemaphoreInfoCount ) &&
( pSignalSemaphoreInfos == rhs.pSignalSemaphoreInfos );
+# endif
}
- bool operator!=( SubmitInfo2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( SubmitInfo2 const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubmitInfo2KHR;
- const void * pNext = {};
- VULKAN_HPP_NAMESPACE::SubmitFlagsKHR flags = {};
- uint32_t waitSemaphoreInfoCount = {};
- const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR * pWaitSemaphoreInfos = {};
- uint32_t commandBufferInfoCount = {};
- const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfoKHR * pCommandBufferInfos = {};
- uint32_t signalSemaphoreInfoCount = {};
- const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfoKHR * pSignalSemaphoreInfos = {};
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubmitInfo2;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::SubmitFlags flags = {};
+ uint32_t waitSemaphoreInfoCount = {};
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pWaitSemaphoreInfos = {};
+ uint32_t commandBufferInfoCount = {};
+ const VULKAN_HPP_NAMESPACE::CommandBufferSubmitInfo * pCommandBufferInfos = {};
+ uint32_t signalSemaphoreInfoCount = {};
+ const VULKAN_HPP_NAMESPACE::SemaphoreSubmitInfo * pSignalSemaphoreInfos = {};
};
- static_assert( sizeof( SubmitInfo2KHR ) == sizeof( VkSubmitInfo2KHR ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubmitInfo2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubmitInfo2 ) == sizeof( VkSubmitInfo2 ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubmitInfo2>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubmitInfo2>::value,
+ "SubmitInfo2 is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eSubmitInfo2KHR>
+ struct CppType<StructureType, StructureType::eSubmitInfo2>
{
- using Type = SubmitInfo2KHR;
+ using Type = SubmitInfo2;
};
+ using SubmitInfo2KHR = SubmitInfo2;
struct SubpassBeginInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassBeginInfo;
+ using NativeType = VkSubpassBeginInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassBeginInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubpassBeginInfo( VULKAN_HPP_NAMESPACE::SubpassContents contents_ =
@@ -64967,7 +88223,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo & operator=( SubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassBeginInfo & operator=( SubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassBeginInfo & operator=( VkSubpassBeginInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -64976,35 +88232,54 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SubpassBeginInfo & setContents( VULKAN_HPP_NAMESPACE::SubpassContents contents_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassBeginInfo &
+ setContents( VULKAN_HPP_NAMESPACE::SubpassContents contents_ ) VULKAN_HPP_NOEXCEPT
{
contents = contents_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassBeginInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassBeginInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassBeginInfo *>( this );
}
- operator VkSubpassBeginInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassBeginInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassBeginInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SubpassContents const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, contents );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassBeginInfo const & ) const = default;
#else
bool operator==( SubpassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( contents == rhs.contents );
+# endif
}
bool operator!=( SubpassBeginInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65018,9 +88293,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::SubpassContents contents = VULKAN_HPP_NAMESPACE::SubpassContents::eInline;
};
- static_assert( sizeof( SubpassBeginInfo ) == sizeof( VkSubpassBeginInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassBeginInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassBeginInfo ) == sizeof( VkSubpassBeginInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassBeginInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassBeginInfo>::value,
+ "SubpassBeginInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubpassBeginInfo>
@@ -65031,7 +88309,9 @@ namespace VULKAN_HPP_NAMESPACE
struct SubpassDescriptionDepthStencilResolve
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSubpassDescriptionDepthStencilResolve;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSubpassDescriptionDepthStencilResolve;
@@ -65054,8 +88334,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve &
- operator=( SubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassDescriptionDepthStencilResolve &
+ operator=( SubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassDescriptionDepthStencilResolve &
operator=( VkSubpassDescriptionDepthStencilResolve const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -65065,27 +88345,27 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassDescriptionDepthStencilResolve & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SubpassDescriptionDepthStencilResolve &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve &
setDepthResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits depthResolveMode_ ) VULKAN_HPP_NOEXCEPT
{
depthResolveMode = depthResolveMode_;
return *this;
}
- SubpassDescriptionDepthStencilResolve &
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve &
setStencilResolveMode( VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode_ ) VULKAN_HPP_NOEXCEPT
{
stencilResolveMode = stencilResolveMode_;
return *this;
}
- SubpassDescriptionDepthStencilResolve & setPDepthStencilResolveAttachment(
+ VULKAN_HPP_CONSTEXPR_14 SubpassDescriptionDepthStencilResolve & setPDepthStencilResolveAttachment(
const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment_ ) VULKAN_HPP_NOEXCEPT
{
pDepthStencilResolveAttachment = pDepthStencilResolveAttachment_;
@@ -65093,24 +88373,44 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassDescriptionDepthStencilResolve const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDescriptionDepthStencilResolve const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve *>( this );
}
- operator VkSubpassDescriptionDepthStencilResolve &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassDescriptionDepthStencilResolve &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassDescriptionDepthStencilResolve *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlagBits const &,
+ VULKAN_HPP_NAMESPACE::ResolveModeFlagBits const &,
+ const VULKAN_HPP_NAMESPACE::AttachmentReference2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, depthResolveMode, stencilResolveMode, pDepthStencilResolveAttachment );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassDescriptionDepthStencilResolve const & ) const = default;
#else
bool operator==( SubpassDescriptionDepthStencilResolve const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( depthResolveMode == rhs.depthResolveMode ) &&
( stencilResolveMode == rhs.stencilResolveMode ) &&
( pDepthStencilResolveAttachment == rhs.pDepthStencilResolveAttachment );
+# endif
}
bool operator!=( SubpassDescriptionDepthStencilResolve const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65126,10 +88426,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ResolveModeFlagBits stencilResolveMode = VULKAN_HPP_NAMESPACE::ResolveModeFlagBits::eNone;
const VULKAN_HPP_NAMESPACE::AttachmentReference2 * pDepthStencilResolveAttachment = {};
};
- static_assert( sizeof( SubpassDescriptionDepthStencilResolve ) == sizeof( VkSubpassDescriptionDepthStencilResolve ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassDescriptionDepthStencilResolve>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve ) ==
+ sizeof( VkSubpassDescriptionDepthStencilResolve ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassDescriptionDepthStencilResolve>::value,
+ "SubpassDescriptionDepthStencilResolve is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubpassDescriptionDepthStencilResolve>
@@ -65140,8 +88444,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SubpassEndInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassEndInfo;
+ using NativeType = VkSubpassEndInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSubpassEndInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SubpassEndInfo() VULKAN_HPP_NOEXCEPT {}
@@ -65153,7 +88459,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassEndInfo & operator=( SubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassEndInfo & operator=( SubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassEndInfo & operator=( VkSubpassEndInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65162,29 +88468,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SubpassEndInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SubpassEndInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSubpassEndInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassEndInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassEndInfo *>( this );
}
- operator VkSubpassEndInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassEndInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassEndInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassEndInfo const & ) const = default;
#else
bool operator==( SubpassEndInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext );
+# endif
}
bool operator!=( SubpassEndInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65197,8 +88519,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassEndInfo;
const void * pNext = {};
};
- static_assert( sizeof( SubpassEndInfo ) == sizeof( VkSubpassEndInfo ), "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassEndInfo>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassEndInfo ) == sizeof( VkSubpassEndInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassEndInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassEndInfo>::value,
+ "SubpassEndInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubpassEndInfo>
@@ -65207,9 +88533,157 @@ namespace VULKAN_HPP_NAMESPACE
};
using SubpassEndInfoKHR = SubpassEndInfo;
+ struct SubpassFragmentDensityMapOffsetEndInfoQCOM
+ {
+ using NativeType = VkSubpassFragmentDensityMapOffsetEndInfoQCOM;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM;
+
+#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR SubpassFragmentDensityMapOffsetEndInfoQCOM(
+ uint32_t fragmentDensityOffsetCount_ = {},
+ const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets_ = {} ) VULKAN_HPP_NOEXCEPT
+ : fragmentDensityOffsetCount( fragmentDensityOffsetCount_ )
+ , pFragmentDensityOffsets( pFragmentDensityOffsets_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR SubpassFragmentDensityMapOffsetEndInfoQCOM(
+ SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ SubpassFragmentDensityMapOffsetEndInfoQCOM( VkSubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : SubpassFragmentDensityMapOffsetEndInfoQCOM(
+ *reinterpret_cast<SubpassFragmentDensityMapOffsetEndInfoQCOM const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ SubpassFragmentDensityMapOffsetEndInfoQCOM(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::Offset2D> const &
+ fragmentDensityOffsets_ )
+ : fragmentDensityOffsetCount( static_cast<uint32_t>( fragmentDensityOffsets_.size() ) )
+ , pFragmentDensityOffsets( fragmentDensityOffsets_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ SubpassFragmentDensityMapOffsetEndInfoQCOM &
+ operator=( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ SubpassFragmentDensityMapOffsetEndInfoQCOM &
+ operator=( VkSubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM const *>( &rhs );
+ return *this;
+ }
+
+#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 SubpassFragmentDensityMapOffsetEndInfoQCOM &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 SubpassFragmentDensityMapOffsetEndInfoQCOM &
+ setFragmentDensityOffsetCount( uint32_t fragmentDensityOffsetCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ fragmentDensityOffsetCount = fragmentDensityOffsetCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 SubpassFragmentDensityMapOffsetEndInfoQCOM &
+ setPFragmentDensityOffsets( const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pFragmentDensityOffsets = pFragmentDensityOffsets_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ SubpassFragmentDensityMapOffsetEndInfoQCOM & setFragmentDensityOffsets(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::Offset2D> const &
+ fragmentDensityOffsets_ ) VULKAN_HPP_NOEXCEPT
+ {
+ fragmentDensityOffsetCount = static_cast<uint32_t>( fragmentDensityOffsets_.size() );
+ pFragmentDensityOffsets = fragmentDensityOffsets_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkSubpassFragmentDensityMapOffsetEndInfoQCOM const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkSubpassFragmentDensityMapOffsetEndInfoQCOM *>( this );
+ }
+
+ explicit operator VkSubpassFragmentDensityMapOffsetEndInfoQCOM &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkSubpassFragmentDensityMapOffsetEndInfoQCOM *>( this );
+ }
+
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::Offset2D * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fragmentDensityOffsetCount, pFragmentDensityOffsets );
+ }
+#endif
+
+#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( SubpassFragmentDensityMapOffsetEndInfoQCOM const & ) const = default;
+#else
+ bool operator==( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( fragmentDensityOffsetCount == rhs.fragmentDensityOffsetCount ) &&
+ ( pFragmentDensityOffsets == rhs.pFragmentDensityOffsets );
+# endif
+ }
+
+ bool operator!=( SubpassFragmentDensityMapOffsetEndInfoQCOM const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+#endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM;
+ const void * pNext = {};
+ uint32_t fragmentDensityOffsetCount = {};
+ const VULKAN_HPP_NAMESPACE::Offset2D * pFragmentDensityOffsets = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM ) ==
+ sizeof( VkSubpassFragmentDensityMapOffsetEndInfoQCOM ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassFragmentDensityMapOffsetEndInfoQCOM>::value,
+ "SubpassFragmentDensityMapOffsetEndInfoQCOM is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eSubpassFragmentDensityMapOffsetEndInfoQCOM>
+ {
+ using Type = SubpassFragmentDensityMapOffsetEndInfoQCOM;
+ };
+
struct SubpassShadingPipelineCreateInfoHUAWEI
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSubpassShadingPipelineCreateInfoHUAWEI;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSubpassShadingPipelineCreateInfoHUAWEI;
@@ -65229,8 +88703,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SubpassShadingPipelineCreateInfoHUAWEI &
- operator=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SubpassShadingPipelineCreateInfoHUAWEI &
+ operator=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SubpassShadingPipelineCreateInfoHUAWEI &
operator=( VkSubpassShadingPipelineCreateInfoHUAWEI const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -65239,23 +88713,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSubpassShadingPipelineCreateInfoHUAWEI const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassShadingPipelineCreateInfoHUAWEI const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSubpassShadingPipelineCreateInfoHUAWEI *>( this );
}
- operator VkSubpassShadingPipelineCreateInfoHUAWEI &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSubpassShadingPipelineCreateInfoHUAWEI &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSubpassShadingPipelineCreateInfoHUAWEI *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::RenderPass const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, renderPass, subpass );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SubpassShadingPipelineCreateInfoHUAWEI const & ) const = default;
#else
bool operator==( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( renderPass == rhs.renderPass ) &&
( subpass == rhs.subpass );
+# endif
}
bool operator!=( SubpassShadingPipelineCreateInfoHUAWEI const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65270,10 +88763,15 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::RenderPass renderPass = {};
uint32_t subpass = {};
};
- static_assert( sizeof( SubpassShadingPipelineCreateInfoHUAWEI ) == sizeof( VkSubpassShadingPipelineCreateInfoHUAWEI ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SubpassShadingPipelineCreateInfoHUAWEI>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI ) ==
+ sizeof( VkSubpassShadingPipelineCreateInfoHUAWEI ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SubpassShadingPipelineCreateInfoHUAWEI>::value,
+ "SubpassShadingPipelineCreateInfoHUAWEI is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSubpassShadingPipelineCreateInfoHUAWEI>
@@ -65283,8 +88781,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SurfaceCapabilities2EXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2EXT;
+ using NativeType = VkSurfaceCapabilities2EXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2EXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SurfaceCapabilities2EXT(
@@ -65320,8 +88820,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilities2EXT &
- operator=( SurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceCapabilities2EXT & operator=( SurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceCapabilities2EXT & operator=( VkSurfaceCapabilities2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65329,21 +88828,60 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSurfaceCapabilities2EXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilities2EXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceCapabilities2EXT *>( this );
}
- operator VkSurfaceCapabilities2EXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilities2EXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceCapabilities2EXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ minImageCount,
+ maxImageCount,
+ currentExtent,
+ minImageExtent,
+ maxImageExtent,
+ maxImageArrayLayers,
+ supportedTransforms,
+ currentTransform,
+ supportedCompositeAlpha,
+ supportedUsageFlags,
+ supportedSurfaceCounters );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceCapabilities2EXT const & ) const = default;
#else
bool operator==( SurfaceCapabilities2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( minImageCount == rhs.minImageCount ) &&
( maxImageCount == rhs.maxImageCount ) && ( currentExtent == rhs.currentExtent ) &&
( minImageExtent == rhs.minImageExtent ) && ( maxImageExtent == rhs.maxImageExtent ) &&
@@ -65352,6 +88890,7 @@ namespace VULKAN_HPP_NAMESPACE
( supportedCompositeAlpha == rhs.supportedCompositeAlpha ) &&
( supportedUsageFlags == rhs.supportedUsageFlags ) &&
( supportedSurfaceCounters == rhs.supportedSurfaceCounters );
+# endif
}
bool operator!=( SurfaceCapabilities2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65376,9 +88915,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags = {};
VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT supportedSurfaceCounters = {};
};
- static_assert( sizeof( SurfaceCapabilities2EXT ) == sizeof( VkSurfaceCapabilities2EXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceCapabilities2EXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT ) ==
+ sizeof( VkSurfaceCapabilities2EXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2EXT>::value,
+ "SurfaceCapabilities2EXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceCapabilities2EXT>
@@ -65388,6 +88931,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SurfaceCapabilitiesKHR
{
+ using NativeType = VkSurfaceCapabilitiesKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SurfaceCapabilitiesKHR( uint32_t minImageCount_ = {},
@@ -65420,8 +88965,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesKHR &
- operator=( SurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceCapabilitiesKHR & operator=( SurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceCapabilitiesKHR & operator=( VkSurfaceCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65429,27 +88973,61 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceCapabilitiesKHR *>( this );
}
- operator VkSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceCapabilitiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( minImageCount,
+ maxImageCount,
+ currentExtent,
+ minImageExtent,
+ maxImageExtent,
+ maxImageArrayLayers,
+ supportedTransforms,
+ currentTransform,
+ supportedCompositeAlpha,
+ supportedUsageFlags );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceCapabilitiesKHR const & ) const = default;
#else
bool operator==( SurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( minImageCount == rhs.minImageCount ) && ( maxImageCount == rhs.maxImageCount ) &&
( currentExtent == rhs.currentExtent ) && ( minImageExtent == rhs.minImageExtent ) &&
( maxImageExtent == rhs.maxImageExtent ) && ( maxImageArrayLayers == rhs.maxImageArrayLayers ) &&
( supportedTransforms == rhs.supportedTransforms ) && ( currentTransform == rhs.currentTransform ) &&
( supportedCompositeAlpha == rhs.supportedCompositeAlpha ) &&
( supportedUsageFlags == rhs.supportedUsageFlags );
+# endif
}
bool operator!=( SurfaceCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65471,14 +89049,20 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::CompositeAlphaFlagsKHR supportedCompositeAlpha = {};
VULKAN_HPP_NAMESPACE::ImageUsageFlags supportedUsageFlags = {};
};
- static_assert( sizeof( SurfaceCapabilitiesKHR ) == sizeof( VkSurfaceCapabilitiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceCapabilitiesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR ) ==
+ sizeof( VkSurfaceCapabilitiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR>::value,
+ "SurfaceCapabilitiesKHR is not nothrow_move_constructible!" );
struct SurfaceCapabilities2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2KHR;
+ using NativeType = VkSurfaceCapabilities2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceCapabilities2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SurfaceCapabilities2KHR(
@@ -65493,8 +89077,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilities2KHR &
- operator=( SurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceCapabilities2KHR & operator=( SurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceCapabilities2KHR & operator=( VkSurfaceCapabilities2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65502,22 +89085,40 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSurfaceCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilities2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceCapabilities2KHR *>( this );
}
- operator VkSurfaceCapabilities2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilities2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceCapabilities2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, surfaceCapabilities );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceCapabilities2KHR const & ) const = default;
#else
bool operator==( SurfaceCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceCapabilities == rhs.surfaceCapabilities );
+# endif
}
bool operator!=( SurfaceCapabilities2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65531,9 +89132,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesKHR surfaceCapabilities = {};
};
- static_assert( sizeof( SurfaceCapabilities2KHR ) == sizeof( VkSurfaceCapabilities2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceCapabilities2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR ) ==
+ sizeof( VkSurfaceCapabilities2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceCapabilities2KHR>::value,
+ "SurfaceCapabilities2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceCapabilities2KHR>
@@ -65544,7 +89149,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct SurfaceCapabilitiesFullScreenExclusiveEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSurfaceCapabilitiesFullScreenExclusiveEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT;
@@ -65564,8 +89171,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesFullScreenExclusiveEXT &
- operator=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceCapabilitiesFullScreenExclusiveEXT &
+ operator=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceCapabilitiesFullScreenExclusiveEXT &
operator=( VkSurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -65575,13 +89182,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SurfaceCapabilitiesFullScreenExclusiveEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesFullScreenExclusiveEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SurfaceCapabilitiesFullScreenExclusiveEXT &
+ VULKAN_HPP_CONSTEXPR_14 SurfaceCapabilitiesFullScreenExclusiveEXT &
setFullScreenExclusiveSupported( VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported_ ) VULKAN_HPP_NOEXCEPT
{
fullScreenExclusiveSupported = fullScreenExclusiveSupported_;
@@ -65589,23 +89196,39 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSurfaceCapabilitiesFullScreenExclusiveEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilitiesFullScreenExclusiveEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT *>( this );
}
- operator VkSurfaceCapabilitiesFullScreenExclusiveEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceCapabilitiesFullScreenExclusiveEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceCapabilitiesFullScreenExclusiveEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fullScreenExclusiveSupported );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceCapabilitiesFullScreenExclusiveEXT const & ) const = default;
# else
bool operator==( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( fullScreenExclusiveSupported == rhs.fullScreenExclusiveSupported );
+# endif
}
bool operator!=( SurfaceCapabilitiesFullScreenExclusiveEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65619,11 +89242,15 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 fullScreenExclusiveSupported = {};
};
- static_assert( sizeof( SurfaceCapabilitiesFullScreenExclusiveEXT ) ==
- sizeof( VkSurfaceCapabilitiesFullScreenExclusiveEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceCapabilitiesFullScreenExclusiveEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT ) ==
+ sizeof( VkSurfaceCapabilitiesFullScreenExclusiveEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceCapabilitiesFullScreenExclusiveEXT>::value,
+ "SurfaceCapabilitiesFullScreenExclusiveEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceCapabilitiesFullScreenExclusiveEXT>
@@ -65634,6 +89261,8 @@ namespace VULKAN_HPP_NAMESPACE
struct SurfaceFormatKHR
{
+ using NativeType = VkSurfaceFormatKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
SurfaceFormatKHR( VULKAN_HPP_NAMESPACE::Format format_ = VULKAN_HPP_NAMESPACE::Format::eUndefined,
@@ -65650,7 +89279,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceFormatKHR & operator=( SurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceFormatKHR & operator=( SurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceFormatKHR & operator=( VkSurfaceFormatKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65658,22 +89287,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSurfaceFormatKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFormatKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceFormatKHR *>( this );
}
- operator VkSurfaceFormatKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFormatKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceFormatKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::Format const &, VULKAN_HPP_NAMESPACE::ColorSpaceKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( format, colorSpace );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceFormatKHR const & ) const = default;
#else
bool operator==( SurfaceFormatKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( format == rhs.format ) && ( colorSpace == rhs.colorSpace );
+# endif
}
bool operator!=( SurfaceFormatKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65686,14 +89331,19 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
VULKAN_HPP_NAMESPACE::ColorSpaceKHR colorSpace = VULKAN_HPP_NAMESPACE::ColorSpaceKHR::eSrgbNonlinear;
};
- static_assert( sizeof( SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceFormatKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFormatKHR ) == sizeof( VkSurfaceFormatKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceFormatKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceFormatKHR>::value,
+ "SurfaceFormatKHR is not nothrow_move_constructible!" );
struct SurfaceFormat2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFormat2KHR;
+ using NativeType = VkSurfaceFormat2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceFormat2KHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -65708,8 +89358,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceFormat2KHR &
- operator=( SurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceFormat2KHR & operator=( SurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceFormat2KHR & operator=( VkSurfaceFormat2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65717,22 +89366,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkSurfaceFormat2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFormat2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceFormat2KHR *>( this );
}
- operator VkSurfaceFormat2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFormat2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceFormat2KHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::SurfaceFormatKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, surfaceFormat );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceFormat2KHR const & ) const = default;
#else
bool operator==( SurfaceFormat2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceFormat == rhs.surfaceFormat );
+# endif
}
bool operator!=( SurfaceFormat2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65746,9 +89412,12 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::SurfaceFormatKHR surfaceFormat = {};
};
- static_assert( sizeof( SurfaceFormat2KHR ) == sizeof( VkSurfaceFormat2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceFormat2KHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR ) == sizeof( VkSurfaceFormat2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceFormat2KHR>::value,
+ "SurfaceFormat2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceFormat2KHR>
@@ -65759,7 +89428,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct SurfaceFullScreenExclusiveInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSurfaceFullScreenExclusiveInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSurfaceFullScreenExclusiveInfoEXT;
@@ -65778,8 +89449,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT &
- operator=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceFullScreenExclusiveInfoEXT &
+ operator=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceFullScreenExclusiveInfoEXT & operator=( VkSurfaceFullScreenExclusiveInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65788,13 +89459,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SurfaceFullScreenExclusiveInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SurfaceFullScreenExclusiveInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveInfoEXT &
setFullScreenExclusive( VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive_ ) VULKAN_HPP_NOEXCEPT
{
fullScreenExclusive = fullScreenExclusive_;
@@ -65802,22 +89473,40 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSurfaceFullScreenExclusiveInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFullScreenExclusiveInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT *>( this );
}
- operator VkSurfaceFullScreenExclusiveInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFullScreenExclusiveInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceFullScreenExclusiveInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, fullScreenExclusive );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceFullScreenExclusiveInfoEXT const & ) const = default;
# else
bool operator==( SurfaceFullScreenExclusiveInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( fullScreenExclusive == rhs.fullScreenExclusive );
+# endif
}
bool operator!=( SurfaceFullScreenExclusiveInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65832,10 +89521,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT fullScreenExclusive =
VULKAN_HPP_NAMESPACE::FullScreenExclusiveEXT::eDefault;
};
- static_assert( sizeof( SurfaceFullScreenExclusiveInfoEXT ) == sizeof( VkSurfaceFullScreenExclusiveInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceFullScreenExclusiveInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT ) ==
+ sizeof( VkSurfaceFullScreenExclusiveInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveInfoEXT>::value,
+ "SurfaceFullScreenExclusiveInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceFullScreenExclusiveInfoEXT>
@@ -65847,7 +89540,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct SurfaceFullScreenExclusiveWin32InfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSurfaceFullScreenExclusiveWin32InfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT;
@@ -65865,8 +89560,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT &
- operator=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceFullScreenExclusiveWin32InfoEXT &
+ operator=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceFullScreenExclusiveWin32InfoEXT &
operator=( VkSurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -65876,35 +89571,52 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SurfaceFullScreenExclusiveWin32InfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SurfaceFullScreenExclusiveWin32InfoEXT & setHmonitor( HMONITOR hmonitor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SurfaceFullScreenExclusiveWin32InfoEXT &
+ setHmonitor( HMONITOR hmonitor_ ) VULKAN_HPP_NOEXCEPT
{
hmonitor = hmonitor_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSurfaceFullScreenExclusiveWin32InfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFullScreenExclusiveWin32InfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT *>( this );
}
- operator VkSurfaceFullScreenExclusiveWin32InfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceFullScreenExclusiveWin32InfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceFullScreenExclusiveWin32InfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, HMONITOR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, hmonitor );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceFullScreenExclusiveWin32InfoEXT const & ) const = default;
# else
bool operator==( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( hmonitor == rhs.hmonitor );
+# endif
}
bool operator!=( SurfaceFullScreenExclusiveWin32InfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -65918,10 +89630,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
HMONITOR hmonitor = {};
};
- static_assert( sizeof( SurfaceFullScreenExclusiveWin32InfoEXT ) == sizeof( VkSurfaceFullScreenExclusiveWin32InfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceFullScreenExclusiveWin32InfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT ) ==
+ sizeof( VkSurfaceFullScreenExclusiveWin32InfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceFullScreenExclusiveWin32InfoEXT>::value,
+ "SurfaceFullScreenExclusiveWin32InfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceFullScreenExclusiveWin32InfoEXT>
@@ -65932,8 +89649,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SurfaceProtectedCapabilitiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceProtectedCapabilitiesKHR;
+ using NativeType = VkSurfaceProtectedCapabilitiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSurfaceProtectedCapabilitiesKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -65949,8 +89668,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SurfaceProtectedCapabilitiesKHR &
- operator=( SurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SurfaceProtectedCapabilitiesKHR &
+ operator=( SurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SurfaceProtectedCapabilitiesKHR & operator=( VkSurfaceProtectedCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -65959,36 +89678,52 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SurfaceProtectedCapabilitiesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SurfaceProtectedCapabilitiesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SurfaceProtectedCapabilitiesKHR &
- setSupportsProtected( VULKAN_HPP_NAMESPACE::Bool32 supportsProtected_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SurfaceProtectedCapabilitiesKHR &
+ setSupportsProtected( VULKAN_HPP_NAMESPACE::Bool32 supportsProtected_ ) VULKAN_HPP_NOEXCEPT
{
supportsProtected = supportsProtected_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSurfaceProtectedCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceProtectedCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR *>( this );
}
- operator VkSurfaceProtectedCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSurfaceProtectedCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSurfaceProtectedCapabilitiesKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, supportsProtected );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SurfaceProtectedCapabilitiesKHR const & ) const = default;
#else
bool operator==( SurfaceProtectedCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( supportsProtected == rhs.supportsProtected );
+# endif
}
bool operator!=( SurfaceProtectedCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66002,10 +89737,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 supportsProtected = {};
};
- static_assert( sizeof( SurfaceProtectedCapabilitiesKHR ) == sizeof( VkSurfaceProtectedCapabilitiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SurfaceProtectedCapabilitiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR ) ==
+ sizeof( VkSurfaceProtectedCapabilitiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SurfaceProtectedCapabilitiesKHR>::value,
+ "SurfaceProtectedCapabilitiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSurfaceProtectedCapabilitiesKHR>
@@ -66015,8 +89754,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SwapchainCounterCreateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCounterCreateInfoEXT;
+ using NativeType = VkSwapchainCounterCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCounterCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SwapchainCounterCreateInfoEXT(
@@ -66032,8 +89773,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT &
- operator=( SwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SwapchainCounterCreateInfoEXT &
+ operator=( SwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SwapchainCounterCreateInfoEXT & operator=( VkSwapchainCounterCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -66042,13 +89783,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SwapchainCounterCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SwapchainCounterCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCounterCreateInfoEXT &
setSurfaceCounters( VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters_ ) VULKAN_HPP_NOEXCEPT
{
surfaceCounters = surfaceCounters_;
@@ -66056,22 +89797,40 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSwapchainCounterCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSwapchainCounterCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSwapchainCounterCreateInfoEXT *>( this );
}
- operator VkSwapchainCounterCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSwapchainCounterCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSwapchainCounterCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, surfaceCounters );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SwapchainCounterCreateInfoEXT const & ) const = default;
#else
bool operator==( SwapchainCounterCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( surfaceCounters == rhs.surfaceCounters );
+# endif
}
bool operator!=( SwapchainCounterCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66085,10 +89844,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::SurfaceCounterFlagsEXT surfaceCounters = {};
};
- static_assert( sizeof( SwapchainCounterCreateInfoEXT ) == sizeof( VkSwapchainCounterCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SwapchainCounterCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT ) ==
+ sizeof( VkSwapchainCounterCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SwapchainCounterCreateInfoEXT>::value,
+ "SwapchainCounterCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSwapchainCounterCreateInfoEXT>
@@ -66098,8 +89861,10 @@ namespace VULKAN_HPP_NAMESPACE
struct SwapchainCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCreateInfoKHR;
+ using NativeType = VkSwapchainCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eSwapchainCreateInfoKHR;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR SwapchainCreateInfoKHR(
@@ -66184,8 +89949,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
- operator=( SwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SwapchainCreateInfoKHR & operator=( SwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SwapchainCreateInfoKHR & operator=( VkSwapchainCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -66194,75 +89958,83 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SwapchainCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- SwapchainCreateInfoKHR & setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setSurface( VULKAN_HPP_NAMESPACE::SurfaceKHR surface_ ) VULKAN_HPP_NOEXCEPT
{
surface = surface_;
return *this;
}
- SwapchainCreateInfoKHR & setMinImageCount( uint32_t minImageCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR & setMinImageCount( uint32_t minImageCount_ ) VULKAN_HPP_NOEXCEPT
{
minImageCount = minImageCount_;
return *this;
}
- SwapchainCreateInfoKHR & setImageFormat( VULKAN_HPP_NAMESPACE::Format imageFormat_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setImageFormat( VULKAN_HPP_NAMESPACE::Format imageFormat_ ) VULKAN_HPP_NOEXCEPT
{
imageFormat = imageFormat_;
return *this;
}
- SwapchainCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
setImageColorSpace( VULKAN_HPP_NAMESPACE::ColorSpaceKHR imageColorSpace_ ) VULKAN_HPP_NOEXCEPT
{
imageColorSpace = imageColorSpace_;
return *this;
}
- SwapchainCreateInfoKHR & setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setImageExtent( VULKAN_HPP_NAMESPACE::Extent2D const & imageExtent_ ) VULKAN_HPP_NOEXCEPT
{
imageExtent = imageExtent_;
return *this;
}
- SwapchainCreateInfoKHR & setImageArrayLayers( uint32_t imageArrayLayers_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setImageArrayLayers( uint32_t imageArrayLayers_ ) VULKAN_HPP_NOEXCEPT
{
imageArrayLayers = imageArrayLayers_;
return *this;
}
- SwapchainCreateInfoKHR & setImageUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setImageUsage( VULKAN_HPP_NAMESPACE::ImageUsageFlags imageUsage_ ) VULKAN_HPP_NOEXCEPT
{
imageUsage = imageUsage_;
return *this;
}
- SwapchainCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
setImageSharingMode( VULKAN_HPP_NAMESPACE::SharingMode imageSharingMode_ ) VULKAN_HPP_NOEXCEPT
{
imageSharingMode = imageSharingMode_;
return *this;
}
- SwapchainCreateInfoKHR & setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setQueueFamilyIndexCount( uint32_t queueFamilyIndexCount_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndexCount = queueFamilyIndexCount_;
return *this;
}
- SwapchainCreateInfoKHR & setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setPQueueFamilyIndices( const uint32_t * pQueueFamilyIndices_ ) VULKAN_HPP_NOEXCEPT
{
pQueueFamilyIndices = pQueueFamilyIndices_;
return *this;
@@ -66278,54 +90050,106 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- SwapchainCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
setPreTransform( VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR preTransform_ ) VULKAN_HPP_NOEXCEPT
{
preTransform = preTransform_;
return *this;
}
- SwapchainCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
setCompositeAlpha( VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR compositeAlpha_ ) VULKAN_HPP_NOEXCEPT
{
compositeAlpha = compositeAlpha_;
return *this;
}
- SwapchainCreateInfoKHR & setPresentMode( VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setPresentMode( VULKAN_HPP_NAMESPACE::PresentModeKHR presentMode_ ) VULKAN_HPP_NOEXCEPT
{
presentMode = presentMode_;
return *this;
}
- SwapchainCreateInfoKHR & setClipped( VULKAN_HPP_NAMESPACE::Bool32 clipped_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setClipped( VULKAN_HPP_NAMESPACE::Bool32 clipped_ ) VULKAN_HPP_NOEXCEPT
{
clipped = clipped_;
return *this;
}
- SwapchainCreateInfoKHR & setOldSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainCreateInfoKHR &
+ setOldSwapchain( VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain_ ) VULKAN_HPP_NOEXCEPT
{
oldSwapchain = oldSwapchain_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSwapchainCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSwapchainCreateInfoKHR *>( this );
}
- operator VkSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSwapchainCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSwapchainCreateInfoKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::SwapchainCreateFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::SurfaceKHR const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::ColorSpaceKHR const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ImageUsageFlags const &,
+ VULKAN_HPP_NAMESPACE::SharingMode const &,
+ uint32_t const &,
+ const uint32_t * const &,
+ VULKAN_HPP_NAMESPACE::SurfaceTransformFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::CompositeAlphaFlagBitsKHR const &,
+ VULKAN_HPP_NAMESPACE::PresentModeKHR const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::SwapchainKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ surface,
+ minImageCount,
+ imageFormat,
+ imageColorSpace,
+ imageExtent,
+ imageArrayLayers,
+ imageUsage,
+ imageSharingMode,
+ queueFamilyIndexCount,
+ pQueueFamilyIndices,
+ preTransform,
+ compositeAlpha,
+ presentMode,
+ clipped,
+ oldSwapchain );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SwapchainCreateInfoKHR const & ) const = default;
#else
bool operator==( SwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( surface == rhs.surface ) &&
( minImageCount == rhs.minImageCount ) && ( imageFormat == rhs.imageFormat ) &&
( imageColorSpace == rhs.imageColorSpace ) && ( imageExtent == rhs.imageExtent ) &&
@@ -66334,6 +90158,7 @@ namespace VULKAN_HPP_NAMESPACE
( pQueueFamilyIndices == rhs.pQueueFamilyIndices ) && ( preTransform == rhs.preTransform ) &&
( compositeAlpha == rhs.compositeAlpha ) && ( presentMode == rhs.presentMode ) &&
( clipped == rhs.clipped ) && ( oldSwapchain == rhs.oldSwapchain );
+# endif
}
bool operator!=( SwapchainCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66364,9 +90189,13 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Bool32 clipped = {};
VULKAN_HPP_NAMESPACE::SwapchainKHR oldSwapchain = {};
};
- static_assert( sizeof( SwapchainCreateInfoKHR ) == sizeof( VkSwapchainCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SwapchainCreateInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR ) ==
+ sizeof( VkSwapchainCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SwapchainCreateInfoKHR>::value,
+ "SwapchainCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSwapchainCreateInfoKHR>
@@ -66376,7 +90205,9 @@ namespace VULKAN_HPP_NAMESPACE
struct SwapchainDisplayNativeHdrCreateInfoAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkSwapchainDisplayNativeHdrCreateInfoAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD;
@@ -66394,8 +90225,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD &
- operator=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ SwapchainDisplayNativeHdrCreateInfoAMD &
+ operator=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
SwapchainDisplayNativeHdrCreateInfoAMD &
operator=( VkSwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -66405,13 +90236,13 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- SwapchainDisplayNativeHdrCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- SwapchainDisplayNativeHdrCreateInfoAMD &
+ VULKAN_HPP_CONSTEXPR_14 SwapchainDisplayNativeHdrCreateInfoAMD &
setLocalDimmingEnable( VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable_ ) VULKAN_HPP_NOEXCEPT
{
localDimmingEnable = localDimmingEnable_;
@@ -66419,22 +90250,38 @@ namespace VULKAN_HPP_NAMESPACE
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkSwapchainDisplayNativeHdrCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkSwapchainDisplayNativeHdrCreateInfoAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD *>( this );
}
- operator VkSwapchainDisplayNativeHdrCreateInfoAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkSwapchainDisplayNativeHdrCreateInfoAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkSwapchainDisplayNativeHdrCreateInfoAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, localDimmingEnable );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( SwapchainDisplayNativeHdrCreateInfoAMD const & ) const = default;
#else
bool operator==( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( localDimmingEnable == rhs.localDimmingEnable );
+# endif
}
bool operator!=( SwapchainDisplayNativeHdrCreateInfoAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66448,10 +90295,15 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 localDimmingEnable = {};
};
- static_assert( sizeof( SwapchainDisplayNativeHdrCreateInfoAMD ) == sizeof( VkSwapchainDisplayNativeHdrCreateInfoAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<SwapchainDisplayNativeHdrCreateInfoAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD ) ==
+ sizeof( VkSwapchainDisplayNativeHdrCreateInfoAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::SwapchainDisplayNativeHdrCreateInfoAMD>::value,
+ "SwapchainDisplayNativeHdrCreateInfoAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eSwapchainDisplayNativeHdrCreateInfoAMD>
@@ -66461,7 +90313,9 @@ namespace VULKAN_HPP_NAMESPACE
struct TextureLODGatherFormatPropertiesAMD
{
- static const bool allowDuplicate = false;
+ using NativeType = VkTextureLODGatherFormatPropertiesAMD;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eTextureLodGatherFormatPropertiesAMD;
@@ -66479,8 +90333,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 TextureLODGatherFormatPropertiesAMD &
- operator=( TextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ TextureLODGatherFormatPropertiesAMD &
+ operator=( TextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT = default;
TextureLODGatherFormatPropertiesAMD &
operator=( VkTextureLODGatherFormatPropertiesAMD const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -66489,23 +90343,39 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkTextureLODGatherFormatPropertiesAMD const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkTextureLODGatherFormatPropertiesAMD const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD *>( this );
}
- operator VkTextureLODGatherFormatPropertiesAMD &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkTextureLODGatherFormatPropertiesAMD &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Bool32 const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, supportsTextureGatherLODBiasAMD );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( TextureLODGatherFormatPropertiesAMD const & ) const = default;
#else
bool operator==( TextureLODGatherFormatPropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( supportsTextureGatherLODBiasAMD == rhs.supportsTextureGatherLODBiasAMD );
+# endif
}
bool operator!=( TextureLODGatherFormatPropertiesAMD const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66519,10 +90389,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Bool32 supportsTextureGatherLODBiasAMD = {};
};
- static_assert( sizeof( TextureLODGatherFormatPropertiesAMD ) == sizeof( VkTextureLODGatherFormatPropertiesAMD ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<TextureLODGatherFormatPropertiesAMD>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD ) ==
+ sizeof( VkTextureLODGatherFormatPropertiesAMD ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::TextureLODGatherFormatPropertiesAMD>::value,
+ "TextureLODGatherFormatPropertiesAMD is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eTextureLodGatherFormatPropertiesAMD>
@@ -66532,8 +90406,10 @@ namespace VULKAN_HPP_NAMESPACE
struct TimelineSemaphoreSubmitInfo
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTimelineSemaphoreSubmitInfo;
+ using NativeType = VkTimelineSemaphoreSubmitInfo;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eTimelineSemaphoreSubmitInfo;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -66566,8 +90442,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo &
- operator=( TimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ TimelineSemaphoreSubmitInfo & operator=( TimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT = default;
TimelineSemaphoreSubmitInfo & operator=( VkTimelineSemaphoreSubmitInfo const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -66576,19 +90451,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- TimelineSemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- TimelineSemaphoreSubmitInfo & setWaitSemaphoreValueCount( uint32_t waitSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo &
+ setWaitSemaphoreValueCount( uint32_t waitSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT
{
waitSemaphoreValueCount = waitSemaphoreValueCount_;
return *this;
}
- TimelineSemaphoreSubmitInfo & setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo &
+ setPWaitSemaphoreValues( const uint64_t * pWaitSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
{
pWaitSemaphoreValues = pWaitSemaphoreValues_;
return *this;
@@ -66604,15 +90481,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- TimelineSemaphoreSubmitInfo &
- setSignalSemaphoreValueCount( uint32_t signalSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo &
+ setSignalSemaphoreValueCount( uint32_t signalSemaphoreValueCount_ ) VULKAN_HPP_NOEXCEPT
{
signalSemaphoreValueCount = signalSemaphoreValueCount_;
return *this;
}
- TimelineSemaphoreSubmitInfo &
- setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TimelineSemaphoreSubmitInfo &
+ setPSignalSemaphoreValues( const uint64_t * pSignalSemaphoreValues_ ) VULKAN_HPP_NOEXCEPT
{
pSignalSemaphoreValues = pSignalSemaphoreValues_;
return *this;
@@ -66629,26 +90506,52 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkTimelineSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkTimelineSemaphoreSubmitInfo const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkTimelineSemaphoreSubmitInfo *>( this );
}
- operator VkTimelineSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkTimelineSemaphoreSubmitInfo &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkTimelineSemaphoreSubmitInfo *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const uint64_t * const &,
+ uint32_t const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ waitSemaphoreValueCount,
+ pWaitSemaphoreValues,
+ signalSemaphoreValueCount,
+ pSignalSemaphoreValues );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( TimelineSemaphoreSubmitInfo const & ) const = default;
#else
bool operator==( TimelineSemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( waitSemaphoreValueCount == rhs.waitSemaphoreValueCount ) &&
( pWaitSemaphoreValues == rhs.pWaitSemaphoreValues ) &&
( signalSemaphoreValueCount == rhs.signalSemaphoreValueCount ) &&
( pSignalSemaphoreValues == rhs.pSignalSemaphoreValues );
+# endif
}
bool operator!=( TimelineSemaphoreSubmitInfo const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66665,10 +90568,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t signalSemaphoreValueCount = {};
const uint64_t * pSignalSemaphoreValues = {};
};
- static_assert( sizeof( TimelineSemaphoreSubmitInfo ) == sizeof( VkTimelineSemaphoreSubmitInfo ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<TimelineSemaphoreSubmitInfo>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo ) ==
+ sizeof( VkTimelineSemaphoreSubmitInfo ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::TimelineSemaphoreSubmitInfo>::value,
+ "TimelineSemaphoreSubmitInfo is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eTimelineSemaphoreSubmitInfo>
@@ -66679,6 +90586,8 @@ namespace VULKAN_HPP_NAMESPACE
struct TraceRaysIndirectCommandKHR
{
+ using NativeType = VkTraceRaysIndirectCommandKHR;
+
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR TraceRaysIndirectCommandKHR( uint32_t width_ = {},
uint32_t height_ = {},
@@ -66700,8 +90609,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR &
- operator=( TraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ TraceRaysIndirectCommandKHR & operator=( TraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
TraceRaysIndirectCommandKHR & operator=( VkTraceRaysIndirectCommandKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -66710,41 +90618,57 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- TraceRaysIndirectCommandKHR & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setWidth( uint32_t width_ ) VULKAN_HPP_NOEXCEPT
{
width = width_;
return *this;
}
- TraceRaysIndirectCommandKHR & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setHeight( uint32_t height_ ) VULKAN_HPP_NOEXCEPT
{
height = height_;
return *this;
}
- TraceRaysIndirectCommandKHR & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 TraceRaysIndirectCommandKHR & setDepth( uint32_t depth_ ) VULKAN_HPP_NOEXCEPT
{
depth = depth_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkTraceRaysIndirectCommandKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkTraceRaysIndirectCommandKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkTraceRaysIndirectCommandKHR *>( this );
}
- operator VkTraceRaysIndirectCommandKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkTraceRaysIndirectCommandKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkTraceRaysIndirectCommandKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( width, height, depth );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( TraceRaysIndirectCommandKHR const & ) const = default;
#else
bool operator==( TraceRaysIndirectCommandKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( width == rhs.width ) && ( height == rhs.height ) && ( depth == rhs.depth );
+# endif
}
bool operator!=( TraceRaysIndirectCommandKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66758,15 +90682,21 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t height = {};
uint32_t depth = {};
};
- static_assert( sizeof( TraceRaysIndirectCommandKHR ) == sizeof( VkTraceRaysIndirectCommandKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<TraceRaysIndirectCommandKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR ) ==
+ sizeof( VkTraceRaysIndirectCommandKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::TraceRaysIndirectCommandKHR>::value,
+ "TraceRaysIndirectCommandKHR is not nothrow_move_constructible!" );
struct ValidationCacheCreateInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationCacheCreateInfoEXT;
+ using NativeType = VkValidationCacheCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationCacheCreateInfoEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ValidationCacheCreateInfoEXT( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ = {},
@@ -66793,8 +90723,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT &
- operator=( ValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ValidationCacheCreateInfoEXT & operator=( ValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ValidationCacheCreateInfoEXT & operator=( VkValidationCacheCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -66803,26 +90732,28 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ValidationCacheCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ValidationCacheCreateInfoEXT & setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT &
+ setInitialDataSize( size_t initialDataSize_ ) VULKAN_HPP_NOEXCEPT
{
initialDataSize = initialDataSize_;
return *this;
}
- ValidationCacheCreateInfoEXT & setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationCacheCreateInfoEXT &
+ setPInitialData( const void * pInitialData_ ) VULKAN_HPP_NOEXCEPT
{
pInitialData = pInitialData_;
return *this;
@@ -66840,23 +90771,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkValidationCacheCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkValidationCacheCreateInfoEXT *>( this );
}
- operator VkValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkValidationCacheCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkValidationCacheCreateInfoEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ValidationCacheCreateFlagsEXT const &,
+ size_t const &,
+ const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, initialDataSize, pInitialData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ValidationCacheCreateInfoEXT const & ) const = default;
#else
bool operator==( ValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( initialDataSize == rhs.initialDataSize ) && ( pInitialData == rhs.pInitialData );
+# endif
}
bool operator!=( ValidationCacheCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -66872,10 +90823,14 @@ namespace VULKAN_HPP_NAMESPACE
size_t initialDataSize = {};
const void * pInitialData = {};
};
- static_assert( sizeof( ValidationCacheCreateInfoEXT ) == sizeof( VkValidationCacheCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ValidationCacheCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT ) ==
+ sizeof( VkValidationCacheCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ValidationCacheCreateInfoEXT>::value,
+ "ValidationCacheCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eValidationCacheCreateInfoEXT>
@@ -66885,8 +90840,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ValidationFeaturesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFeaturesEXT;
+ using NativeType = VkValidationFeaturesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFeaturesEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ValidationFeaturesEXT(
@@ -66920,8 +90877,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT &
- operator=( ValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ValidationFeaturesEXT & operator=( ValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ValidationFeaturesEXT & operator=( VkValidationFeaturesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -66930,20 +90886,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ValidationFeaturesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ValidationFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT &
setEnabledValidationFeatureCount( uint32_t enabledValidationFeatureCount_ ) VULKAN_HPP_NOEXCEPT
{
enabledValidationFeatureCount = enabledValidationFeatureCount_;
return *this;
}
- ValidationFeaturesEXT & setPEnabledValidationFeatures(
+ VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setPEnabledValidationFeatures(
const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * pEnabledValidationFeatures_ ) VULKAN_HPP_NOEXCEPT
{
pEnabledValidationFeatures = pEnabledValidationFeatures_;
@@ -66961,14 +90917,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- ValidationFeaturesEXT &
+ VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT &
setDisabledValidationFeatureCount( uint32_t disabledValidationFeatureCount_ ) VULKAN_HPP_NOEXCEPT
{
disabledValidationFeatureCount = disabledValidationFeatureCount_;
return *this;
}
- ValidationFeaturesEXT & setPDisabledValidationFeatures(
+ VULKAN_HPP_CONSTEXPR_14 ValidationFeaturesEXT & setPDisabledValidationFeatures(
const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures_ ) VULKAN_HPP_NOEXCEPT
{
pDisabledValidationFeatures = pDisabledValidationFeatures_;
@@ -66987,26 +90943,52 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkValidationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkValidationFeaturesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkValidationFeaturesEXT *>( this );
}
- operator VkValidationFeaturesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkValidationFeaturesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkValidationFeaturesEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ValidationFeatureEnableEXT * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ enabledValidationFeatureCount,
+ pEnabledValidationFeatures,
+ disabledValidationFeatureCount,
+ pDisabledValidationFeatures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ValidationFeaturesEXT const & ) const = default;
#else
bool operator==( ValidationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( enabledValidationFeatureCount == rhs.enabledValidationFeatureCount ) &&
( pEnabledValidationFeatures == rhs.pEnabledValidationFeatures ) &&
( disabledValidationFeatureCount == rhs.disabledValidationFeatureCount ) &&
( pDisabledValidationFeatures == rhs.pDisabledValidationFeatures );
+# endif
}
bool operator!=( ValidationFeaturesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67023,9 +91005,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t disabledValidationFeatureCount = {};
const VULKAN_HPP_NAMESPACE::ValidationFeatureDisableEXT * pDisabledValidationFeatures = {};
};
- static_assert( sizeof( ValidationFeaturesEXT ) == sizeof( VkValidationFeaturesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ValidationFeaturesEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT ) == sizeof( VkValidationFeaturesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ValidationFeaturesEXT>::value,
+ "ValidationFeaturesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eValidationFeaturesEXT>
@@ -67035,8 +91020,10 @@ namespace VULKAN_HPP_NAMESPACE
struct ValidationFlagsEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFlagsEXT;
+ using NativeType = VkValidationFlagsEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eValidationFlagsEXT;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ValidationFlagsEXT(
@@ -67062,8 +91049,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT &
- operator=( ValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ValidationFlagsEXT & operator=( ValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ValidationFlagsEXT & operator=( VkValidationFlagsEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67072,19 +91058,20 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ValidationFlagsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ValidationFlagsEXT & setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT &
+ setDisabledValidationCheckCount( uint32_t disabledValidationCheckCount_ ) VULKAN_HPP_NOEXCEPT
{
disabledValidationCheckCount = disabledValidationCheckCount_;
return *this;
}
- ValidationFlagsEXT & setPDisabledValidationChecks(
+ VULKAN_HPP_CONSTEXPR_14 ValidationFlagsEXT & setPDisabledValidationChecks(
const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks_ ) VULKAN_HPP_NOEXCEPT
{
pDisabledValidationChecks = pDisabledValidationChecks_;
@@ -67103,24 +91090,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkValidationFlagsEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkValidationFlagsEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkValidationFlagsEXT *>( this );
}
- operator VkValidationFlagsEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkValidationFlagsEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkValidationFlagsEXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, disabledValidationCheckCount, pDisabledValidationChecks );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ValidationFlagsEXT const & ) const = default;
#else
bool operator==( ValidationFlagsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( disabledValidationCheckCount == rhs.disabledValidationCheckCount ) &&
( pDisabledValidationChecks == rhs.pDisabledValidationChecks );
+# endif
}
bool operator!=( ValidationFlagsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67135,9 +91141,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t disabledValidationCheckCount = {};
const VULKAN_HPP_NAMESPACE::ValidationCheckEXT * pDisabledValidationChecks = {};
};
- static_assert( sizeof( ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ValidationFlagsEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ValidationFlagsEXT ) == sizeof( VkValidationFlagsEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ValidationFlagsEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ValidationFlagsEXT>::value,
+ "ValidationFlagsEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eValidationFlagsEXT>
@@ -67147,7 +91156,9 @@ namespace VULKAN_HPP_NAMESPACE
struct VertexInputAttributeDescription2EXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVertexInputAttributeDescription2EXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVertexInputAttributeDescription2EXT;
@@ -67171,8 +91182,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT &
- operator=( VertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VertexInputAttributeDescription2EXT &
+ operator=( VertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VertexInputAttributeDescription2EXT &
operator=( VkVertexInputAttributeDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -67182,54 +91193,76 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VertexInputAttributeDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VertexInputAttributeDescription2EXT & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setLocation( uint32_t location_ ) VULKAN_HPP_NOEXCEPT
{
location = location_;
return *this;
}
- VertexInputAttributeDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
{
binding = binding_;
return *this;
}
- VertexInputAttributeDescription2EXT & setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT &
+ setFormat( VULKAN_HPP_NAMESPACE::Format format_ ) VULKAN_HPP_NOEXCEPT
{
format = format_;
return *this;
}
- VertexInputAttributeDescription2EXT & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputAttributeDescription2EXT & setOffset( uint32_t offset_ ) VULKAN_HPP_NOEXCEPT
{
offset = offset_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVertexInputAttributeDescription2EXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputAttributeDescription2EXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVertexInputAttributeDescription2EXT *>( this );
}
- operator VkVertexInputAttributeDescription2EXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputAttributeDescription2EXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVertexInputAttributeDescription2EXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, location, binding, format, offset );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VertexInputAttributeDescription2EXT const & ) const = default;
#else
bool operator==( VertexInputAttributeDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( location == rhs.location ) &&
( binding == rhs.binding ) && ( format == rhs.format ) && ( offset == rhs.offset );
+# endif
}
bool operator!=( VertexInputAttributeDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67246,10 +91279,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
uint32_t offset = {};
};
- static_assert( sizeof( VertexInputAttributeDescription2EXT ) == sizeof( VkVertexInputAttributeDescription2EXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VertexInputAttributeDescription2EXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT ) ==
+ sizeof( VkVertexInputAttributeDescription2EXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VertexInputAttributeDescription2EXT>::value,
+ "VertexInputAttributeDescription2EXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVertexInputAttributeDescription2EXT>
@@ -67259,7 +91296,9 @@ namespace VULKAN_HPP_NAMESPACE
struct VertexInputBindingDescription2EXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVertexInputBindingDescription2EXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVertexInputBindingDescription2EXT;
@@ -67283,8 +91322,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT &
- operator=( VertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VertexInputBindingDescription2EXT &
+ operator=( VertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VertexInputBindingDescription2EXT & operator=( VkVertexInputBindingDescription2EXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67293,55 +91332,76 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VertexInputBindingDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VertexInputBindingDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setBinding( uint32_t binding_ ) VULKAN_HPP_NOEXCEPT
{
binding = binding_;
return *this;
}
- VertexInputBindingDescription2EXT & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setStride( uint32_t stride_ ) VULKAN_HPP_NOEXCEPT
{
stride = stride_;
return *this;
}
- VertexInputBindingDescription2EXT &
- setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT &
+ setInputRate( VULKAN_HPP_NAMESPACE::VertexInputRate inputRate_ ) VULKAN_HPP_NOEXCEPT
{
inputRate = inputRate_;
return *this;
}
- VertexInputBindingDescription2EXT & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VertexInputBindingDescription2EXT & setDivisor( uint32_t divisor_ ) VULKAN_HPP_NOEXCEPT
{
divisor = divisor_;
return *this;
}
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVertexInputBindingDescription2EXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputBindingDescription2EXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVertexInputBindingDescription2EXT *>( this );
}
- operator VkVertexInputBindingDescription2EXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVertexInputBindingDescription2EXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVertexInputBindingDescription2EXT *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::VertexInputRate const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, binding, stride, inputRate, divisor );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VertexInputBindingDescription2EXT const & ) const = default;
#else
bool operator==( VertexInputBindingDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( binding == rhs.binding ) &&
( stride == rhs.stride ) && ( inputRate == rhs.inputRate ) && ( divisor == rhs.divisor );
+# endif
}
bool operator!=( VertexInputBindingDescription2EXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67358,10 +91418,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VertexInputRate inputRate = VULKAN_HPP_NAMESPACE::VertexInputRate::eVertex;
uint32_t divisor = {};
};
- static_assert( sizeof( VertexInputBindingDescription2EXT ) == sizeof( VkVertexInputBindingDescription2EXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VertexInputBindingDescription2EXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT ) ==
+ sizeof( VkVertexInputBindingDescription2EXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VertexInputBindingDescription2EXT>::value,
+ "VertexInputBindingDescription2EXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVertexInputBindingDescription2EXT>
@@ -67372,8 +91436,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_VI_NN )
struct ViSurfaceCreateInfoNN
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eViSurfaceCreateInfoNN;
+ using NativeType = VkViSurfaceCreateInfoNN;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eViSurfaceCreateInfoNN;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR ViSurfaceCreateInfoNN( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ = {},
@@ -67389,8 +91455,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN &
- operator=( ViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ ViSurfaceCreateInfoNN & operator=( ViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT = default;
ViSurfaceCreateInfoNN & operator=( VkViSurfaceCreateInfoNN const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67399,41 +91464,61 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- ViSurfaceCreateInfoNN & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- ViSurfaceCreateInfoNN & setFlags( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN &
+ setFlags( VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- ViSurfaceCreateInfoNN & setWindow( void * window_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 ViSurfaceCreateInfoNN & setWindow( void * window_ ) VULKAN_HPP_NOEXCEPT
{
window = window_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkViSurfaceCreateInfoNN const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkViSurfaceCreateInfoNN const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkViSurfaceCreateInfoNN *>( this );
}
- operator VkViSurfaceCreateInfoNN &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkViSurfaceCreateInfoNN &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkViSurfaceCreateInfoNN *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN const &,
+ void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, window );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( ViSurfaceCreateInfoNN const & ) const = default;
# else
bool operator==( ViSurfaceCreateInfoNN const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( window == rhs.window );
+# endif
}
bool operator!=( ViSurfaceCreateInfoNN const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67448,9 +91533,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ViSurfaceCreateFlagsNN flags = {};
void * window = {};
};
- static_assert( sizeof( ViSurfaceCreateInfoNN ) == sizeof( VkViSurfaceCreateInfoNN ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<ViSurfaceCreateInfoNN>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN ) == sizeof( VkViSurfaceCreateInfoNN ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::ViSurfaceCreateInfoNN>::value,
+ "ViSurfaceCreateInfoNN is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eViSurfaceCreateInfoNN>
@@ -67462,8 +91550,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoPictureResourceKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoPictureResourceKHR;
+ using NativeType = VkVideoPictureResourceKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoPictureResourceKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -67484,8 +91574,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR &
- operator=( VideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoPictureResourceKHR & operator=( VideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoPictureResourceKHR & operator=( VkVideoPictureResourceKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67494,56 +91583,79 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoPictureResourceKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoPictureResourceKHR & setCodedOffset( VULKAN_HPP_NAMESPACE::Offset2D const & codedOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR &
+ setCodedOffset( VULKAN_HPP_NAMESPACE::Offset2D const & codedOffset_ ) VULKAN_HPP_NOEXCEPT
{
codedOffset = codedOffset_;
return *this;
}
- VideoPictureResourceKHR & setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR &
+ setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT
{
codedExtent = codedExtent_;
return *this;
}
- VideoPictureResourceKHR & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR & setBaseArrayLayer( uint32_t baseArrayLayer_ ) VULKAN_HPP_NOEXCEPT
{
baseArrayLayer = baseArrayLayer_;
return *this;
}
- VideoPictureResourceKHR &
- setImageViewBinding( VULKAN_HPP_NAMESPACE::ImageView imageViewBinding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoPictureResourceKHR &
+ setImageViewBinding( VULKAN_HPP_NAMESPACE::ImageView imageViewBinding_ ) VULKAN_HPP_NOEXCEPT
{
imageViewBinding = imageViewBinding_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoPictureResourceKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoPictureResourceKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoPictureResourceKHR *>( this );
}
- operator VkVideoPictureResourceKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoPictureResourceKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoPictureResourceKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ImageView const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, codedOffset, codedExtent, baseArrayLayer, imageViewBinding );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoPictureResourceKHR const & ) const = default;
# else
bool operator==( VideoPictureResourceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( codedOffset == rhs.codedOffset ) &&
( codedExtent == rhs.codedExtent ) && ( baseArrayLayer == rhs.baseArrayLayer ) &&
( imageViewBinding == rhs.imageViewBinding );
+# endif
}
bool operator!=( VideoPictureResourceKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67560,9 +91672,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t baseArrayLayer = {};
VULKAN_HPP_NAMESPACE::ImageView imageViewBinding = {};
};
- static_assert( sizeof( VideoPictureResourceKHR ) == sizeof( VkVideoPictureResourceKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoPictureResourceKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR ) ==
+ sizeof( VkVideoPictureResourceKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR>::value,
+ "VideoPictureResourceKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoPictureResourceKHR>
@@ -67574,8 +91690,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoReferenceSlotKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoReferenceSlotKHR;
+ using NativeType = VkVideoReferenceSlotKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoReferenceSlotKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoReferenceSlotKHR(
@@ -67592,8 +91710,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR &
- operator=( VideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoReferenceSlotKHR & operator=( VideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoReferenceSlotKHR & operator=( VkVideoReferenceSlotKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67602,19 +91719,19 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoReferenceSlotKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoReferenceSlotKHR & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT
{
slotIndex = slotIndex_;
return *this;
}
- VideoReferenceSlotKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoReferenceSlotKHR &
setPPictureResource( const VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR * pPictureResource_ ) VULKAN_HPP_NOEXCEPT
{
pPictureResource = pPictureResource_;
@@ -67622,23 +91739,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoReferenceSlotKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoReferenceSlotKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoReferenceSlotKHR *>( this );
}
- operator VkVideoReferenceSlotKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoReferenceSlotKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoReferenceSlotKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ int8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, slotIndex, pPictureResource );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoReferenceSlotKHR const & ) const = default;
# else
bool operator==( VideoReferenceSlotKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) &&
( pPictureResource == rhs.pPictureResource );
+# endif
}
bool operator!=( VideoReferenceSlotKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67653,9 +91789,12 @@ namespace VULKAN_HPP_NAMESPACE
int8_t slotIndex = {};
const VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR * pPictureResource = {};
};
- static_assert( sizeof( VideoReferenceSlotKHR ) == sizeof( VkVideoReferenceSlotKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoReferenceSlotKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR ) == sizeof( VkVideoReferenceSlotKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR>::value,
+ "VideoReferenceSlotKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoReferenceSlotKHR>
@@ -67667,8 +91806,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoBeginCodingInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBeginCodingInfoKHR;
+ using NativeType = VkVideoBeginCodingInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBeginCodingInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoBeginCodingInfoKHR(
@@ -67710,8 +91851,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR &
- operator=( VideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoBeginCodingInfoKHR & operator=( VideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoBeginCodingInfoKHR & operator=( VkVideoBeginCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67720,45 +91860,48 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoBeginCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoBeginCodingInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoBeginCodingInfoKHR & setCodecQualityPreset(
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setCodecQualityPreset(
VULKAN_HPP_NAMESPACE::VideoCodingQualityPresetFlagsKHR codecQualityPreset_ ) VULKAN_HPP_NOEXCEPT
{
codecQualityPreset = codecQualityPreset_;
return *this;
}
- VideoBeginCodingInfoKHR & setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR &
+ setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT
{
videoSession = videoSession_;
return *this;
}
- VideoBeginCodingInfoKHR & setVideoSessionParameters(
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR & setVideoSessionParameters(
VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParameters_ ) VULKAN_HPP_NOEXCEPT
{
videoSessionParameters = videoSessionParameters_;
return *this;
}
- VideoBeginCodingInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR &
+ setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT
{
referenceSlotCount = referenceSlotCount_;
return *this;
}
- VideoBeginCodingInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoBeginCodingInfoKHR &
setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT
{
pReferenceSlots = pReferenceSlots_;
@@ -67777,25 +91920,55 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoBeginCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoBeginCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoBeginCodingInfoKHR *>( this );
}
- operator VkVideoBeginCodingInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoBeginCodingInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoBeginCodingInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoBeginCodingFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoCodingQualityPresetFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoSessionKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ codecQualityPreset,
+ videoSession,
+ videoSessionParameters,
+ referenceSlotCount,
+ pReferenceSlots );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoBeginCodingInfoKHR const & ) const = default;
# else
bool operator==( VideoBeginCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( codecQualityPreset == rhs.codecQualityPreset ) && ( videoSession == rhs.videoSession ) &&
( videoSessionParameters == rhs.videoSessionParameters ) &&
( referenceSlotCount == rhs.referenceSlotCount ) && ( pReferenceSlots == rhs.pReferenceSlots );
+# endif
}
bool operator!=( VideoBeginCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67814,9 +91987,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t referenceSlotCount = {};
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots = {};
};
- static_assert( sizeof( VideoBeginCodingInfoKHR ) == sizeof( VkVideoBeginCodingInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoBeginCodingInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR ) ==
+ sizeof( VkVideoBeginCodingInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoBeginCodingInfoKHR>::value,
+ "VideoBeginCodingInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoBeginCodingInfoKHR>
@@ -67828,8 +92005,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoBindMemoryKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBindMemoryKHR;
+ using NativeType = VkVideoBindMemoryKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoBindMemoryKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoBindMemoryKHR( uint32_t memoryBindIndex_ = {},
@@ -67849,8 +92028,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR &
- operator=( VideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoBindMemoryKHR & operator=( VideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoBindMemoryKHR & operator=( VkVideoBindMemoryKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67859,54 +92037,78 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoBindMemoryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoBindMemoryKHR & setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR & setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT
{
memoryBindIndex = memoryBindIndex_;
return *this;
}
- VideoBindMemoryKHR & setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR &
+ setMemory( VULKAN_HPP_NAMESPACE::DeviceMemory memory_ ) VULKAN_HPP_NOEXCEPT
{
memory = memory_;
return *this;
}
- VideoBindMemoryKHR & setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR &
+ setMemoryOffset( VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset_ ) VULKAN_HPP_NOEXCEPT
{
memoryOffset = memoryOffset_;
return *this;
}
- VideoBindMemoryKHR & setMemorySize( VULKAN_HPP_NAMESPACE::DeviceSize memorySize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoBindMemoryKHR &
+ setMemorySize( VULKAN_HPP_NAMESPACE::DeviceSize memorySize_ ) VULKAN_HPP_NOEXCEPT
{
memorySize = memorySize_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoBindMemoryKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoBindMemoryKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoBindMemoryKHR *>( this );
}
- operator VkVideoBindMemoryKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoBindMemoryKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoBindMemoryKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DeviceMemory const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryBindIndex, memory, memoryOffset, memorySize );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoBindMemoryKHR const & ) const = default;
# else
bool operator==( VideoBindMemoryKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryBindIndex == rhs.memoryBindIndex ) &&
( memory == rhs.memory ) && ( memoryOffset == rhs.memoryOffset ) && ( memorySize == rhs.memorySize );
+# endif
}
bool operator!=( VideoBindMemoryKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -67923,9 +92125,12 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::DeviceSize memoryOffset = {};
VULKAN_HPP_NAMESPACE::DeviceSize memorySize = {};
};
- static_assert( sizeof( VideoBindMemoryKHR ) == sizeof( VkVideoBindMemoryKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoBindMemoryKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR ) == sizeof( VkVideoBindMemoryKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoBindMemoryKHR>::value,
+ "VideoBindMemoryKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoBindMemoryKHR>
@@ -67937,8 +92142,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoCapabilitiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCapabilitiesKHR;
+ using NativeType = VkVideoCapabilitiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCapabilitiesKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoCapabilitiesKHR( VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR capabilityFlags_ = {},
@@ -67966,8 +92173,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoCapabilitiesKHR &
- operator=( VideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoCapabilitiesKHR & operator=( VideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoCapabilitiesKHR & operator=( VkVideoCapabilitiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -67975,21 +92181,54 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkVideoCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoCapabilitiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoCapabilitiesKHR *>( this );
}
- operator VkVideoCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoCapabilitiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoCapabilitiesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::VideoCapabilityFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ capabilityFlags,
+ minBitstreamBufferOffsetAlignment,
+ minBitstreamBufferSizeAlignment,
+ videoPictureExtentGranularity,
+ minExtent,
+ maxExtent,
+ maxReferencePicturesSlotsCount,
+ maxReferencePicturesActiveCount );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoCapabilitiesKHR const & ) const = default;
# else
bool operator==( VideoCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( capabilityFlags == rhs.capabilityFlags ) &&
( minBitstreamBufferOffsetAlignment == rhs.minBitstreamBufferOffsetAlignment ) &&
( minBitstreamBufferSizeAlignment == rhs.minBitstreamBufferSizeAlignment ) &&
@@ -67997,6 +92236,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxExtent == rhs.maxExtent ) &&
( maxReferencePicturesSlotsCount == rhs.maxReferencePicturesSlotsCount ) &&
( maxReferencePicturesActiveCount == rhs.maxReferencePicturesActiveCount );
+# endif
}
bool operator!=( VideoCapabilitiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68017,9 +92257,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxReferencePicturesSlotsCount = {};
uint32_t maxReferencePicturesActiveCount = {};
};
- static_assert( sizeof( VideoCapabilitiesKHR ) == sizeof( VkVideoCapabilitiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoCapabilitiesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR ) == sizeof( VkVideoCapabilitiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoCapabilitiesKHR>::value,
+ "VideoCapabilitiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoCapabilitiesKHR>
@@ -68031,8 +92274,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoCodingControlInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCodingControlInfoKHR;
+ using NativeType = VkVideoCodingControlInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoCodingControlInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -68048,8 +92293,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR &
- operator=( VideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoCodingControlInfoKHR & operator=( VideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoCodingControlInfoKHR & operator=( VkVideoCodingControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68058,35 +92302,54 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoCodingControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoCodingControlInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoCodingControlInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoCodingControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoCodingControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoCodingControlInfoKHR *>( this );
}
- operator VkVideoCodingControlInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoCodingControlInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoCodingControlInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoCodingControlInfoKHR const & ) const = default;
# else
bool operator==( VideoCodingControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( VideoCodingControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68100,10 +92363,13 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::VideoCodingControlFlagsKHR flags = {};
};
- static_assert( sizeof( VideoCodingControlInfoKHR ) == sizeof( VkVideoCodingControlInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoCodingControlInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR ) ==
+ sizeof( VkVideoCodingControlInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoCodingControlInfoKHR>::value,
+ "VideoCodingControlInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoCodingControlInfoKHR>
@@ -68115,8 +92381,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264CapabilitiesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264CapabilitiesEXT;
+ using NativeType = VkVideoDecodeH264CapabilitiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264CapabilitiesEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264CapabilitiesEXT(
@@ -68136,8 +92404,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264CapabilitiesEXT &
- operator=( VideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264CapabilitiesEXT &
+ operator=( VideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264CapabilitiesEXT & operator=( VkVideoDecodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68145,24 +92413,44 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkVideoDecodeH264CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264CapabilitiesEXT *>( this );
}
- operator VkVideoDecodeH264CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264CapabilitiesEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::ExtensionProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxLevel, fieldOffsetGranularity, stdExtensionVersion );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264CapabilitiesEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxLevel == rhs.maxLevel ) &&
( fieldOffsetGranularity == rhs.fieldOffsetGranularity ) &&
( stdExtensionVersion == rhs.stdExtensionVersion );
+# endif
}
bool operator!=( VideoDecodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68178,10 +92466,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Offset2D fieldOffsetGranularity = {};
VULKAN_HPP_NAMESPACE::ExtensionProperties stdExtensionVersion = {};
};
- static_assert( sizeof( VideoDecodeH264CapabilitiesEXT ) == sizeof( VkVideoDecodeH264CapabilitiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264CapabilitiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesEXT ) ==
+ sizeof( VkVideoDecodeH264CapabilitiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264CapabilitiesEXT>::value,
+ "VideoDecodeH264CapabilitiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264CapabilitiesEXT>
@@ -68193,8 +92485,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264DpbSlotInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264DpbSlotInfoEXT;
+ using NativeType = VkVideoDecodeH264DpbSlotInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264DpbSlotInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH264DpbSlotInfoEXT(
@@ -68210,8 +92504,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoEXT &
- operator=( VideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264DpbSlotInfoEXT &
+ operator=( VideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264DpbSlotInfoEXT & operator=( VkVideoDecodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68220,13 +92514,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264DpbSlotInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264DpbSlotInfoEXT &
setPStdReferenceInfo( const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT
{
pStdReferenceInfo = pStdReferenceInfo_;
@@ -68234,22 +92528,40 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264DpbSlotInfoEXT *>( this );
}
- operator VkVideoDecodeH264DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264DpbSlotInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const StdVideoDecodeH264ReferenceInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pStdReferenceInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264DpbSlotInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo );
+# endif
}
bool operator!=( VideoDecodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68263,10 +92575,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
const StdVideoDecodeH264ReferenceInfo * pStdReferenceInfo = {};
};
- static_assert( sizeof( VideoDecodeH264DpbSlotInfoEXT ) == sizeof( VkVideoDecodeH264DpbSlotInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264DpbSlotInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoEXT ) ==
+ sizeof( VkVideoDecodeH264DpbSlotInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264DpbSlotInfoEXT>::value,
+ "VideoDecodeH264DpbSlotInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264DpbSlotInfoEXT>
@@ -68278,8 +92594,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264MvcEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264MvcEXT;
+ using NativeType = VkVideoDecodeH264MvcEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264MvcEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH264MvcEXT( const StdVideoDecodeH264Mvc * pStdMvc_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -68293,8 +92611,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264MvcEXT &
- operator=( VideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264MvcEXT & operator=( VideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264MvcEXT & operator=( VkVideoDecodeH264MvcEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68303,35 +92620,52 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264MvcEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264MvcEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264MvcEXT & setPStdMvc( const StdVideoDecodeH264Mvc * pStdMvc_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264MvcEXT &
+ setPStdMvc( const StdVideoDecodeH264Mvc * pStdMvc_ ) VULKAN_HPP_NOEXCEPT
{
pStdMvc = pStdMvc_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264MvcEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264MvcEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264MvcEXT *>( this );
}
- operator VkVideoDecodeH264MvcEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264MvcEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264MvcEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, const StdVideoDecodeH264Mvc * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pStdMvc );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264MvcEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264MvcEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdMvc == rhs.pStdMvc );
+# endif
}
bool operator!=( VideoDecodeH264MvcEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68345,9 +92679,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
const StdVideoDecodeH264Mvc * pStdMvc = {};
};
- static_assert( sizeof( VideoDecodeH264MvcEXT ) == sizeof( VkVideoDecodeH264MvcEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264MvcEXT>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264MvcEXT ) == sizeof( VkVideoDecodeH264MvcEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264MvcEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264MvcEXT>::value,
+ "VideoDecodeH264MvcEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264MvcEXT>
@@ -68359,8 +92696,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264PictureInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264PictureInfoEXT;
+ using NativeType = VkVideoDecodeH264PictureInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264PictureInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH264PictureInfoEXT( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_ = {},
@@ -68389,8 +92728,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT &
- operator=( VideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264PictureInfoEXT &
+ operator=( VideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264PictureInfoEXT & operator=( VkVideoDecodeH264PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68399,26 +92738,27 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264PictureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264PictureInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT &
setPStdPictureInfo( const StdVideoDecodeH264PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT
{
pStdPictureInfo = pStdPictureInfo_;
return *this;
}
- VideoDecodeH264PictureInfoEXT & setSlicesCount( uint32_t slicesCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT & setSlicesCount( uint32_t slicesCount_ ) VULKAN_HPP_NOEXCEPT
{
slicesCount = slicesCount_;
return *this;
}
- VideoDecodeH264PictureInfoEXT & setPSlicesDataOffsets( const uint32_t * pSlicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264PictureInfoEXT &
+ setPSlicesDataOffsets( const uint32_t * pSlicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT
{
pSlicesDataOffsets = pSlicesDataOffsets_;
return *this;
@@ -68435,23 +92775,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264PictureInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264PictureInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264PictureInfoEXT *>( this );
}
- operator VkVideoDecodeH264PictureInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264PictureInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264PictureInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const StdVideoDecodeH264PictureInfo * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pStdPictureInfo, slicesCount, pSlicesDataOffsets );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264PictureInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) &&
( slicesCount == rhs.slicesCount ) && ( pSlicesDataOffsets == rhs.pSlicesDataOffsets );
+# endif
}
bool operator!=( VideoDecodeH264PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68467,10 +92827,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t slicesCount = {};
const uint32_t * pSlicesDataOffsets = {};
};
- static_assert( sizeof( VideoDecodeH264PictureInfoEXT ) == sizeof( VkVideoDecodeH264PictureInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264PictureInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoEXT ) ==
+ sizeof( VkVideoDecodeH264PictureInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureInfoEXT>::value,
+ "VideoDecodeH264PictureInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264PictureInfoEXT>
@@ -68482,8 +92846,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264ProfileEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264ProfileEXT;
+ using NativeType = VkVideoDecodeH264ProfileEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH264ProfileEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH264ProfileEXT(
@@ -68501,8 +92867,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT &
- operator=( VideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264ProfileEXT & operator=( VideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264ProfileEXT & operator=( VkVideoDecodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68511,19 +92876,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264ProfileEXT & setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT &
+ setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
{
stdProfileIdc = stdProfileIdc_;
return *this;
}
- VideoDecodeH264ProfileEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264ProfileEXT &
setPictureLayout( VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsEXT pictureLayout_ ) VULKAN_HPP_NOEXCEPT
{
pictureLayout = pictureLayout_;
@@ -68531,19 +92897,47 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264ProfileEXT *>( this );
}
- operator VkVideoDecodeH264ProfileEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264ProfileEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264ProfileEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ StdVideoH264ProfileIdc const &,
+ VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stdProfileIdc, pictureLayout );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( VideoDecodeH264ProfileEXT const & ) const = default;
-# else
+ std::strong_ordering operator<=>( VideoDecodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+ if ( auto cmp = pictureLayout <=> rhs.pictureLayout; cmp != 0 )
+ return cmp;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( VideoDecodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
@@ -68555,7 +92949,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH264ProfileEXT;
@@ -68563,10 +92956,13 @@ namespace VULKAN_HPP_NAMESPACE
StdVideoH264ProfileIdc stdProfileIdc = {};
VULKAN_HPP_NAMESPACE::VideoDecodeH264PictureLayoutFlagsEXT pictureLayout = {};
};
- static_assert( sizeof( VideoDecodeH264ProfileEXT ) == sizeof( VkVideoDecodeH264ProfileEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264ProfileEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileEXT ) ==
+ sizeof( VkVideoDecodeH264ProfileEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264ProfileEXT>::value,
+ "VideoDecodeH264ProfileEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264ProfileEXT>
@@ -68578,7 +92974,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264SessionCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoDecodeH264SessionCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoDecodeH264SessionCreateInfoEXT;
@@ -68598,8 +92996,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionCreateInfoEXT &
- operator=( VideoDecodeH264SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264SessionCreateInfoEXT &
+ operator=( VideoDecodeH264SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264SessionCreateInfoEXT &
operator=( VkVideoDecodeH264SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -68609,20 +93007,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264SessionCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeH264CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeH264CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoDecodeH264SessionCreateInfoEXT & setPStdExtensionVersion(
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionCreateInfoEXT & setPStdExtensionVersion(
const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion_ ) VULKAN_HPP_NOEXCEPT
{
pStdExtensionVersion = pStdExtensionVersion_;
@@ -68630,23 +93028,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264SessionCreateInfoEXT *>( this );
}
- operator VkVideoDecodeH264SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264SessionCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoDecodeH264CreateFlagsEXT const &,
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pStdExtensionVersion );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264SessionCreateInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pStdExtensionVersion == rhs.pStdExtensionVersion );
+# endif
}
bool operator!=( VideoDecodeH264SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68661,10 +93078,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoDecodeH264CreateFlagsEXT flags = {};
const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion = {};
};
- static_assert( sizeof( VideoDecodeH264SessionCreateInfoEXT ) == sizeof( VkVideoDecodeH264SessionCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264SessionCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionCreateInfoEXT ) ==
+ sizeof( VkVideoDecodeH264SessionCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionCreateInfoEXT>::value,
+ "VideoDecodeH264SessionCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264SessionCreateInfoEXT>
@@ -68676,7 +93097,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264SessionParametersAddInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoDecodeH264SessionParametersAddInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoDecodeH264SessionParametersAddInfoEXT;
@@ -68713,8 +93136,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT &
- operator=( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264SessionParametersAddInfoEXT &
+ operator=( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264SessionParametersAddInfoEXT &
operator=( VkVideoDecodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -68724,20 +93147,22 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT &
+ setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
spsStdCount = spsStdCount_;
return *this;
}
- VideoDecodeH264SessionParametersAddInfoEXT &
- setPSpsStd( const StdVideoH264SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT &
+ setPSpsStd( const StdVideoH264SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
{
pSpsStd = pSpsStd_;
return *this;
@@ -68754,14 +93179,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoDecodeH264SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT &
+ setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
ppsStdCount = ppsStdCount_;
return *this;
}
- VideoDecodeH264SessionParametersAddInfoEXT &
- setPPpsStd( const StdVideoH264PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersAddInfoEXT &
+ setPPpsStd( const StdVideoH264PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
{
pPpsStd = pPpsStd_;
return *this;
@@ -68779,23 +93205,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264SessionParametersAddInfoEXT *>( this );
}
- operator VkVideoDecodeH264SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264SessionParametersAddInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const StdVideoH264SequenceParameterSet * const &,
+ uint32_t const &,
+ const StdVideoH264PictureParameterSet * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, spsStdCount, pSpsStd, ppsStdCount, pPpsStd );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264SessionParametersAddInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsStdCount == rhs.spsStdCount ) &&
( pSpsStd == rhs.pSpsStd ) && ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd );
+# endif
}
bool operator!=( VideoDecodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68812,11 +93259,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t ppsStdCount = {};
const StdVideoH264PictureParameterSet * pPpsStd = {};
};
- static_assert( sizeof( VideoDecodeH264SessionParametersAddInfoEXT ) ==
- sizeof( VkVideoDecodeH264SessionParametersAddInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264SessionParametersAddInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT ) ==
+ sizeof( VkVideoDecodeH264SessionParametersAddInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT>::value,
+ "VideoDecodeH264SessionParametersAddInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264SessionParametersAddInfoEXT>
@@ -68828,7 +93279,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH264SessionParametersCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoDecodeH264SessionParametersCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoDecodeH264SessionParametersCreateInfoEXT;
@@ -68853,8 +93306,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT &
- operator=( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH264SessionParametersCreateInfoEXT &
+ operator=( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH264SessionParametersCreateInfoEXT &
operator=( VkVideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -68864,25 +93317,28 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH264SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH264SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT &
+ setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
maxSpsStdCount = maxSpsStdCount_;
return *this;
}
- VideoDecodeH264SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT &
+ setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
maxPpsStdCount = maxPpsStdCount_;
return *this;
}
- VideoDecodeH264SessionParametersCreateInfoEXT & setPParametersAddInfo(
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH264SessionParametersCreateInfoEXT & setPParametersAddInfo(
const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT
{
pParametersAddInfo = pParametersAddInfo_;
@@ -68890,23 +93346,43 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH264SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH264SessionParametersCreateInfoEXT *>( this );
}
- operator VkVideoDecodeH264SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH264SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH264SessionParametersCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH264SessionParametersCreateInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) &&
( maxPpsStdCount == rhs.maxPpsStdCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo );
+# endif
}
bool operator!=( VideoDecodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68922,11 +93398,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxPpsStdCount = {};
const VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersAddInfoEXT * pParametersAddInfo = {};
};
- static_assert( sizeof( VideoDecodeH264SessionParametersCreateInfoEXT ) ==
- sizeof( VkVideoDecodeH264SessionParametersCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH264SessionParametersCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoEXT ) ==
+ sizeof( VkVideoDecodeH264SessionParametersCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH264SessionParametersCreateInfoEXT>::value,
+ "VideoDecodeH264SessionParametersCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH264SessionParametersCreateInfoEXT>
@@ -68938,8 +93418,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265CapabilitiesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265CapabilitiesEXT;
+ using NativeType = VkVideoDecodeH265CapabilitiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265CapabilitiesEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265CapabilitiesEXT(
@@ -68956,8 +93438,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265CapabilitiesEXT &
- operator=( VideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265CapabilitiesEXT &
+ operator=( VideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265CapabilitiesEXT & operator=( VkVideoDecodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -68965,23 +93447,42 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkVideoDecodeH265CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265CapabilitiesEXT *>( this );
}
- operator VkVideoDecodeH265CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265CapabilitiesEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::ExtensionProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxLevel, stdExtensionVersion );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH265CapabilitiesEXT const & ) const = default;
# else
bool operator==( VideoDecodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxLevel == rhs.maxLevel ) &&
( stdExtensionVersion == rhs.stdExtensionVersion );
+# endif
}
bool operator!=( VideoDecodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -68996,10 +93497,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxLevel = {};
VULKAN_HPP_NAMESPACE::ExtensionProperties stdExtensionVersion = {};
};
- static_assert( sizeof( VideoDecodeH265CapabilitiesEXT ) == sizeof( VkVideoDecodeH265CapabilitiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265CapabilitiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesEXT ) ==
+ sizeof( VkVideoDecodeH265CapabilitiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265CapabilitiesEXT>::value,
+ "VideoDecodeH265CapabilitiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265CapabilitiesEXT>
@@ -69011,8 +93516,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265DpbSlotInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265DpbSlotInfoEXT;
+ using NativeType = VkVideoDecodeH265DpbSlotInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265DpbSlotInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH265DpbSlotInfoEXT(
@@ -69028,8 +93535,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoEXT &
- operator=( VideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265DpbSlotInfoEXT &
+ operator=( VideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265DpbSlotInfoEXT & operator=( VkVideoDecodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -69038,13 +93545,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH265DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH265DpbSlotInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265DpbSlotInfoEXT &
setPStdReferenceInfo( const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT
{
pStdReferenceInfo = pStdReferenceInfo_;
@@ -69052,22 +93559,40 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH265DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265DpbSlotInfoEXT *>( this );
}
- operator VkVideoDecodeH265DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265DpbSlotInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const StdVideoDecodeH265ReferenceInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pStdReferenceInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH265DpbSlotInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdReferenceInfo == rhs.pStdReferenceInfo );
+# endif
}
bool operator!=( VideoDecodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -69081,10 +93606,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
const StdVideoDecodeH265ReferenceInfo * pStdReferenceInfo = {};
};
- static_assert( sizeof( VideoDecodeH265DpbSlotInfoEXT ) == sizeof( VkVideoDecodeH265DpbSlotInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265DpbSlotInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoEXT ) ==
+ sizeof( VkVideoDecodeH265DpbSlotInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265DpbSlotInfoEXT>::value,
+ "VideoDecodeH265DpbSlotInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265DpbSlotInfoEXT>
@@ -69096,8 +93625,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265PictureInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265PictureInfoEXT;
+ using NativeType = VkVideoDecodeH265PictureInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265PictureInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH265PictureInfoEXT( StdVideoDecodeH265PictureInfo * pStdPictureInfo_ = {},
@@ -69126,8 +93657,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT &
- operator=( VideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265PictureInfoEXT &
+ operator=( VideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265PictureInfoEXT & operator=( VkVideoDecodeH265PictureInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -69136,26 +93667,27 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH265PictureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH265PictureInfoEXT &
- setPStdPictureInfo( StdVideoDecodeH265PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT &
+ setPStdPictureInfo( StdVideoDecodeH265PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT
{
pStdPictureInfo = pStdPictureInfo_;
return *this;
}
- VideoDecodeH265PictureInfoEXT & setSlicesCount( uint32_t slicesCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT & setSlicesCount( uint32_t slicesCount_ ) VULKAN_HPP_NOEXCEPT
{
slicesCount = slicesCount_;
return *this;
}
- VideoDecodeH265PictureInfoEXT & setPSlicesDataOffsets( const uint32_t * pSlicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265PictureInfoEXT &
+ setPSlicesDataOffsets( const uint32_t * pSlicesDataOffsets_ ) VULKAN_HPP_NOEXCEPT
{
pSlicesDataOffsets = pSlicesDataOffsets_;
return *this;
@@ -69172,23 +93704,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH265PictureInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265PictureInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265PictureInfoEXT *>( this );
}
- operator VkVideoDecodeH265PictureInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265PictureInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265PictureInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ StdVideoDecodeH265PictureInfo * const &,
+ uint32_t const &,
+ const uint32_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, pStdPictureInfo, slicesCount, pSlicesDataOffsets );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH265PictureInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH265PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pStdPictureInfo == rhs.pStdPictureInfo ) &&
( slicesCount == rhs.slicesCount ) && ( pSlicesDataOffsets == rhs.pSlicesDataOffsets );
+# endif
}
bool operator!=( VideoDecodeH265PictureInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -69204,10 +93756,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t slicesCount = {};
const uint32_t * pSlicesDataOffsets = {};
};
- static_assert( sizeof( VideoDecodeH265PictureInfoEXT ) == sizeof( VkVideoDecodeH265PictureInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265PictureInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoEXT ) ==
+ sizeof( VkVideoDecodeH265PictureInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265PictureInfoEXT>::value,
+ "VideoDecodeH265PictureInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265PictureInfoEXT>
@@ -69219,8 +93775,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265ProfileEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265ProfileEXT;
+ using NativeType = VkVideoDecodeH265ProfileEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeH265ProfileEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeH265ProfileEXT( StdVideoH265ProfileIdc stdProfileIdc_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -69235,8 +93793,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileEXT &
- operator=( VideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265ProfileEXT & operator=( VideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265ProfileEXT & operator=( VkVideoDecodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -69245,32 +93802,56 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH265ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH265ProfileEXT & setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265ProfileEXT &
+ setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
{
stdProfileIdc = stdProfileIdc_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH265ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265ProfileEXT *>( this );
}
- operator VkVideoDecodeH265ProfileEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265ProfileEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265ProfileEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, StdVideoH265ProfileIdc const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stdProfileIdc );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( VideoDecodeH265ProfileEXT const & ) const = default;
-# else
+ std::strong_ordering operator<=>( VideoDecodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( VideoDecodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
@@ -69281,17 +93862,19 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoDecodeH265ProfileEXT;
const void * pNext = {};
StdVideoH265ProfileIdc stdProfileIdc = {};
};
- static_assert( sizeof( VideoDecodeH265ProfileEXT ) == sizeof( VkVideoDecodeH265ProfileEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265ProfileEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileEXT ) ==
+ sizeof( VkVideoDecodeH265ProfileEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265ProfileEXT>::value,
+ "VideoDecodeH265ProfileEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265ProfileEXT>
@@ -69303,7 +93886,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265SessionCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoDecodeH265SessionCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoDecodeH265SessionCreateInfoEXT;
@@ -69323,8 +93908,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionCreateInfoEXT &
- operator=( VideoDecodeH265SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265SessionCreateInfoEXT &
+ operator=( VideoDecodeH265SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265SessionCreateInfoEXT &
operator=( VkVideoDecodeH265SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -69334,20 +93919,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH265SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH265SessionCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeH265CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeH265CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoDecodeH265SessionCreateInfoEXT & setPStdExtensionVersion(
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionCreateInfoEXT & setPStdExtensionVersion(
const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion_ ) VULKAN_HPP_NOEXCEPT
{
pStdExtensionVersion = pStdExtensionVersion_;
@@ -69355,23 +93940,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH265SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265SessionCreateInfoEXT *>( this );
}
- operator VkVideoDecodeH265SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265SessionCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoDecodeH265CreateFlagsEXT const &,
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pStdExtensionVersion );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH265SessionCreateInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH265SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( pStdExtensionVersion == rhs.pStdExtensionVersion );
+# endif
}
bool operator!=( VideoDecodeH265SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -69386,10 +93990,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoDecodeH265CreateFlagsEXT flags = {};
const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion = {};
};
- static_assert( sizeof( VideoDecodeH265SessionCreateInfoEXT ) == sizeof( VkVideoDecodeH265SessionCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265SessionCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionCreateInfoEXT ) ==
+ sizeof( VkVideoDecodeH265SessionCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionCreateInfoEXT>::value,
+ "VideoDecodeH265SessionCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265SessionCreateInfoEXT>
@@ -69401,7 +94009,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265SessionParametersAddInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoDecodeH265SessionParametersAddInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoDecodeH265SessionParametersAddInfoEXT;
@@ -69438,8 +94048,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT &
- operator=( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265SessionParametersAddInfoEXT &
+ operator=( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265SessionParametersAddInfoEXT &
operator=( VkVideoDecodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -69449,20 +94059,22 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH265SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH265SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT &
+ setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
spsStdCount = spsStdCount_;
return *this;
}
- VideoDecodeH265SessionParametersAddInfoEXT &
- setPSpsStd( const StdVideoH265SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT &
+ setPSpsStd( const StdVideoH265SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
{
pSpsStd = pSpsStd_;
return *this;
@@ -69479,14 +94091,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoDecodeH265SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT &
+ setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
ppsStdCount = ppsStdCount_;
return *this;
}
- VideoDecodeH265SessionParametersAddInfoEXT &
- setPPpsStd( const StdVideoH265PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersAddInfoEXT &
+ setPPpsStd( const StdVideoH265PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
{
pPpsStd = pPpsStd_;
return *this;
@@ -69504,23 +94117,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH265SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265SessionParametersAddInfoEXT *>( this );
}
- operator VkVideoDecodeH265SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265SessionParametersAddInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const StdVideoH265SequenceParameterSet * const &,
+ uint32_t const &,
+ const StdVideoH265PictureParameterSet * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, spsStdCount, pSpsStd, ppsStdCount, pPpsStd );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH265SessionParametersAddInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsStdCount == rhs.spsStdCount ) &&
( pSpsStd == rhs.pSpsStd ) && ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd );
+# endif
}
bool operator!=( VideoDecodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -69537,11 +94171,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t ppsStdCount = {};
const StdVideoH265PictureParameterSet * pPpsStd = {};
};
- static_assert( sizeof( VideoDecodeH265SessionParametersAddInfoEXT ) ==
- sizeof( VkVideoDecodeH265SessionParametersAddInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265SessionParametersAddInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT ) ==
+ sizeof( VkVideoDecodeH265SessionParametersAddInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT>::value,
+ "VideoDecodeH265SessionParametersAddInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265SessionParametersAddInfoEXT>
@@ -69553,7 +94191,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeH265SessionParametersCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoDecodeH265SessionParametersCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoDecodeH265SessionParametersCreateInfoEXT;
@@ -69578,8 +94218,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT &
- operator=( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeH265SessionParametersCreateInfoEXT &
+ operator=( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeH265SessionParametersCreateInfoEXT &
operator=( VkVideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -69589,25 +94229,28 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeH265SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeH265SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT &
+ setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
maxSpsStdCount = maxSpsStdCount_;
return *this;
}
- VideoDecodeH265SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT &
+ setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
maxPpsStdCount = maxPpsStdCount_;
return *this;
}
- VideoDecodeH265SessionParametersCreateInfoEXT & setPParametersAddInfo(
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeH265SessionParametersCreateInfoEXT & setPParametersAddInfo(
const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT
{
pParametersAddInfo = pParametersAddInfo_;
@@ -69615,23 +94258,43 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeH265SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeH265SessionParametersCreateInfoEXT *>( this );
}
- operator VkVideoDecodeH265SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeH265SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeH265SessionParametersCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeH265SessionParametersCreateInfoEXT const & ) const = default;
# else
bool operator==( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) &&
( maxPpsStdCount == rhs.maxPpsStdCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo );
+# endif
}
bool operator!=( VideoDecodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -69647,11 +94310,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxPpsStdCount = {};
const VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersAddInfoEXT * pParametersAddInfo = {};
};
- static_assert( sizeof( VideoDecodeH265SessionParametersCreateInfoEXT ) ==
- sizeof( VkVideoDecodeH265SessionParametersCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeH265SessionParametersCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoEXT ) ==
+ sizeof( VkVideoDecodeH265SessionParametersCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeH265SessionParametersCreateInfoEXT>::value,
+ "VideoDecodeH265SessionParametersCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeH265SessionParametersCreateInfoEXT>
@@ -69663,8 +94330,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoDecodeInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeInfoKHR;
+ using NativeType = VkVideoDecodeInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoDecodeInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoDecodeInfoKHR(
@@ -69722,8 +94391,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
- operator=( VideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoDecodeInfoKHR & operator=( VideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoDecodeInfoKHR & operator=( VkVideoDecodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -69732,69 +94400,76 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoDecodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoDecodeInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoDecodeInfoKHR & setCodedOffset( VULKAN_HPP_NAMESPACE::Offset2D const & codedOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setCodedOffset( VULKAN_HPP_NAMESPACE::Offset2D const & codedOffset_ ) VULKAN_HPP_NOEXCEPT
{
codedOffset = codedOffset_;
return *this;
}
- VideoDecodeInfoKHR & setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT
{
codedExtent = codedExtent_;
return *this;
}
- VideoDecodeInfoKHR & setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setSrcBuffer( VULKAN_HPP_NAMESPACE::Buffer srcBuffer_ ) VULKAN_HPP_NOEXCEPT
{
srcBuffer = srcBuffer_;
return *this;
}
- VideoDecodeInfoKHR & setSrcBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setSrcBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferOffset_ ) VULKAN_HPP_NOEXCEPT
{
srcBufferOffset = srcBufferOffset_;
return *this;
}
- VideoDecodeInfoKHR & setSrcBufferRange( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setSrcBufferRange( VULKAN_HPP_NAMESPACE::DeviceSize srcBufferRange_ ) VULKAN_HPP_NOEXCEPT
{
srcBufferRange = srcBufferRange_;
return *this;
}
- VideoDecodeInfoKHR & setDstPictureResource(
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setDstPictureResource(
VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const & dstPictureResource_ ) VULKAN_HPP_NOEXCEPT
{
dstPictureResource = dstPictureResource_;
return *this;
}
- VideoDecodeInfoKHR & setPSetupReferenceSlot(
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR & setPSetupReferenceSlot(
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ ) VULKAN_HPP_NOEXCEPT
{
pSetupReferenceSlot = pSetupReferenceSlot_;
return *this;
}
- VideoDecodeInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
+ setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT
{
referenceSlotCount = referenceSlotCount_;
return *this;
}
- VideoDecodeInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoDecodeInfoKHR &
setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT
{
pReferenceSlots = pReferenceSlots_;
@@ -69813,27 +94488,65 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoDecodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoDecodeInfoKHR *>( this );
}
- operator VkVideoDecodeInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoDecodeInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoDecodeInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoDecodeFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::Offset2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const &,
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ codedOffset,
+ codedExtent,
+ srcBuffer,
+ srcBufferOffset,
+ srcBufferRange,
+ dstPictureResource,
+ pSetupReferenceSlot,
+ referenceSlotCount,
+ pReferenceSlots );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoDecodeInfoKHR const & ) const = default;
# else
bool operator==( VideoDecodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( codedOffset == rhs.codedOffset ) && ( codedExtent == rhs.codedExtent ) &&
( srcBuffer == rhs.srcBuffer ) && ( srcBufferOffset == rhs.srcBufferOffset ) &&
( srcBufferRange == rhs.srcBufferRange ) && ( dstPictureResource == rhs.dstPictureResource ) &&
( pSetupReferenceSlot == rhs.pSetupReferenceSlot ) && ( referenceSlotCount == rhs.referenceSlotCount ) &&
( pReferenceSlots == rhs.pReferenceSlots );
+# endif
}
bool operator!=( VideoDecodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -69856,9 +94569,12 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t referenceSlotCount = {};
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots = {};
};
- static_assert( sizeof( VideoDecodeInfoKHR ) == sizeof( VkVideoDecodeInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoDecodeInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR ) == sizeof( VkVideoDecodeInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoDecodeInfoKHR>::value,
+ "VideoDecodeInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoDecodeInfoKHR>
@@ -69870,8 +94586,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264CapabilitiesEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264CapabilitiesEXT;
+ using NativeType = VkVideoEncodeH264CapabilitiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264CapabilitiesEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT(
@@ -69907,8 +94625,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
- operator=( VideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264CapabilitiesEXT &
+ operator=( VideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264CapabilitiesEXT & operator=( VkVideoEncodeH264CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -69917,79 +94635,83 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264CapabilitiesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
setInputModeFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH264InputModeFlagsEXT inputModeFlags_ ) VULKAN_HPP_NOEXCEPT
{
inputModeFlags = inputModeFlags_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
setOutputModeFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH264OutputModeFlagsEXT outputModeFlags_ ) VULKAN_HPP_NOEXCEPT
{
outputModeFlags = outputModeFlags_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
setMinPictureSizeInMbs( VULKAN_HPP_NAMESPACE::Extent2D const & minPictureSizeInMbs_ ) VULKAN_HPP_NOEXCEPT
{
minPictureSizeInMbs = minPictureSizeInMbs_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
setMaxPictureSizeInMbs( VULKAN_HPP_NAMESPACE::Extent2D const & maxPictureSizeInMbs_ ) VULKAN_HPP_NOEXCEPT
{
maxPictureSizeInMbs = maxPictureSizeInMbs_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
setInputImageDataAlignment( VULKAN_HPP_NAMESPACE::Extent2D const & inputImageDataAlignment_ ) VULKAN_HPP_NOEXCEPT
{
inputImageDataAlignment = inputImageDataAlignment_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT & setMaxNumL0ReferenceForP( uint8_t maxNumL0ReferenceForP_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
+ setMaxNumL0ReferenceForP( uint8_t maxNumL0ReferenceForP_ ) VULKAN_HPP_NOEXCEPT
{
maxNumL0ReferenceForP = maxNumL0ReferenceForP_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT & setMaxNumL0ReferenceForB( uint8_t maxNumL0ReferenceForB_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
+ setMaxNumL0ReferenceForB( uint8_t maxNumL0ReferenceForB_ ) VULKAN_HPP_NOEXCEPT
{
maxNumL0ReferenceForB = maxNumL0ReferenceForB_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT & setMaxNumL1Reference( uint8_t maxNumL1Reference_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
+ setMaxNumL1Reference( uint8_t maxNumL1Reference_ ) VULKAN_HPP_NOEXCEPT
{
maxNumL1Reference = maxNumL1Reference_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT & setQualityLevelCount( uint8_t qualityLevelCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT &
+ setQualityLevelCount( uint8_t qualityLevelCount_ ) VULKAN_HPP_NOEXCEPT
{
qualityLevelCount = qualityLevelCount_;
return *this;
}
- VideoEncodeH264CapabilitiesEXT & setStdExtensionVersion(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264CapabilitiesEXT & setStdExtensionVersion(
VULKAN_HPP_NAMESPACE::ExtensionProperties const & stdExtensionVersion_ ) VULKAN_HPP_NOEXCEPT
{
stdExtensionVersion = stdExtensionVersion_;
@@ -69997,21 +94719,60 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264CapabilitiesEXT *>( this );
}
- operator VkVideoEncodeH264CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264CapabilitiesEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilityFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264InputModeFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264OutputModeFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint8_t const &,
+ uint8_t const &,
+ uint8_t const &,
+ uint8_t const &,
+ VULKAN_HPP_NAMESPACE::ExtensionProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ inputModeFlags,
+ outputModeFlags,
+ minPictureSizeInMbs,
+ maxPictureSizeInMbs,
+ inputImageDataAlignment,
+ maxNumL0ReferenceForP,
+ maxNumL0ReferenceForB,
+ maxNumL1Reference,
+ qualityLevelCount,
+ stdExtensionVersion );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264CapabilitiesEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( inputModeFlags == rhs.inputModeFlags ) && ( outputModeFlags == rhs.outputModeFlags ) &&
( minPictureSizeInMbs == rhs.minPictureSizeInMbs ) && ( maxPictureSizeInMbs == rhs.maxPictureSizeInMbs ) &&
@@ -70019,6 +94780,7 @@ namespace VULKAN_HPP_NAMESPACE
( maxNumL0ReferenceForP == rhs.maxNumL0ReferenceForP ) &&
( maxNumL0ReferenceForB == rhs.maxNumL0ReferenceForB ) && ( maxNumL1Reference == rhs.maxNumL1Reference ) &&
( qualityLevelCount == rhs.qualityLevelCount ) && ( stdExtensionVersion == rhs.stdExtensionVersion );
+# endif
}
bool operator!=( VideoEncodeH264CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70042,10 +94804,14 @@ namespace VULKAN_HPP_NAMESPACE
uint8_t qualityLevelCount = {};
VULKAN_HPP_NAMESPACE::ExtensionProperties stdExtensionVersion = {};
};
- static_assert( sizeof( VideoEncodeH264CapabilitiesEXT ) == sizeof( VkVideoEncodeH264CapabilitiesEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264CapabilitiesEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesEXT ) ==
+ sizeof( VkVideoEncodeH264CapabilitiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264CapabilitiesEXT>::value,
+ "VideoEncodeH264CapabilitiesEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264CapabilitiesEXT>
@@ -70057,8 +94823,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264DpbSlotInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264DpbSlotInfoEXT;
+ using NativeType = VkVideoEncodeH264DpbSlotInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264DpbSlotInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -70076,8 +94844,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT &
- operator=( VideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264DpbSlotInfoEXT &
+ operator=( VideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264DpbSlotInfoEXT & operator=( VkVideoEncodeH264DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -70086,19 +94854,19 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264DpbSlotInfoEXT & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT
{
slotIndex = slotIndex_;
return *this;
}
- VideoEncodeH264DpbSlotInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264DpbSlotInfoEXT &
setPStdPictureInfo( const StdVideoEncodeH264PictureInfo * pStdPictureInfo_ ) VULKAN_HPP_NOEXCEPT
{
pStdPictureInfo = pStdPictureInfo_;
@@ -70106,23 +94874,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264DpbSlotInfoEXT *>( this );
}
- operator VkVideoEncodeH264DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264DpbSlotInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ int8_t const &,
+ const StdVideoEncodeH264PictureInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, slotIndex, pStdPictureInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264DpbSlotInfoEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) &&
( pStdPictureInfo == rhs.pStdPictureInfo );
+# endif
}
bool operator!=( VideoEncodeH264DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70137,10 +94924,14 @@ namespace VULKAN_HPP_NAMESPACE
int8_t slotIndex = {};
const StdVideoEncodeH264PictureInfo * pStdPictureInfo = {};
};
- static_assert( sizeof( VideoEncodeH264DpbSlotInfoEXT ) == sizeof( VkVideoEncodeH264DpbSlotInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264DpbSlotInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT ) ==
+ sizeof( VkVideoEncodeH264DpbSlotInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT>::value,
+ "VideoEncodeH264DpbSlotInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264DpbSlotInfoEXT>
@@ -70152,7 +94943,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264EmitPictureParametersEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoEncodeH264EmitPictureParametersEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoEncodeH264EmitPictureParametersEXT;
@@ -70189,8 +94982,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT &
- operator=( VideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264EmitPictureParametersEXT &
+ operator=( VideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264EmitPictureParametersEXT &
operator=( VkVideoEncodeH264EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -70200,32 +94993,35 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264EmitPictureParametersEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264EmitPictureParametersEXT & setSpsId( uint8_t spsId_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT & setSpsId( uint8_t spsId_ ) VULKAN_HPP_NOEXCEPT
{
spsId = spsId_;
return *this;
}
- VideoEncodeH264EmitPictureParametersEXT &
- setEmitSpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT &
+ setEmitSpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ ) VULKAN_HPP_NOEXCEPT
{
emitSpsEnable = emitSpsEnable_;
return *this;
}
- VideoEncodeH264EmitPictureParametersEXT & setPpsIdEntryCount( uint32_t ppsIdEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT &
+ setPpsIdEntryCount( uint32_t ppsIdEntryCount_ ) VULKAN_HPP_NOEXCEPT
{
ppsIdEntryCount = ppsIdEntryCount_;
return *this;
}
- VideoEncodeH264EmitPictureParametersEXT & setPpsIdEntries( const uint8_t * ppsIdEntries_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264EmitPictureParametersEXT &
+ setPpsIdEntries( const uint8_t * ppsIdEntries_ ) VULKAN_HPP_NOEXCEPT
{
ppsIdEntries = ppsIdEntries_;
return *this;
@@ -70242,24 +95038,45 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264EmitPictureParametersEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264EmitPictureParametersEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264EmitPictureParametersEXT *>( this );
}
- operator VkVideoEncodeH264EmitPictureParametersEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264EmitPictureParametersEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264EmitPictureParametersEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint8_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ const uint8_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, spsId, emitSpsEnable, ppsIdEntryCount, ppsIdEntries );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264EmitPictureParametersEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsId == rhs.spsId ) &&
( emitSpsEnable == rhs.emitSpsEnable ) && ( ppsIdEntryCount == rhs.ppsIdEntryCount ) &&
( ppsIdEntries == rhs.ppsIdEntries );
+# endif
}
bool operator!=( VideoEncodeH264EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70276,11 +95093,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t ppsIdEntryCount = {};
const uint8_t * ppsIdEntries = {};
};
- static_assert( sizeof( VideoEncodeH264EmitPictureParametersEXT ) ==
- sizeof( VkVideoEncodeH264EmitPictureParametersEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264EmitPictureParametersEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264EmitPictureParametersEXT ) ==
+ sizeof( VkVideoEncodeH264EmitPictureParametersEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264EmitPictureParametersEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264EmitPictureParametersEXT>::value,
+ "VideoEncodeH264EmitPictureParametersEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264EmitPictureParametersEXT>
@@ -70290,10 +95111,117 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH264FrameSizeEXT
+ {
+ using NativeType = VkVideoEncodeH264FrameSizeEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH264FrameSizeEXT( uint32_t frameISize_ = {},
+ uint32_t framePSize_ = {},
+ uint32_t frameBSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : frameISize( frameISize_ )
+ , framePSize( framePSize_ )
+ , frameBSize( frameBSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH264FrameSizeEXT( VideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264FrameSizeEXT( VkVideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH264FrameSizeEXT( *reinterpret_cast<VideoEncodeH264FrameSizeEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH264FrameSizeEXT & operator=( VideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264FrameSizeEXT & operator=( VkVideoEncodeH264FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeEXT & setFrameISize( uint32_t frameISize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ frameISize = frameISize_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeEXT & setFramePSize( uint32_t framePSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ framePSize = framePSize_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264FrameSizeEXT & setFrameBSize( uint32_t frameBSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ frameBSize = frameBSize_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH264FrameSizeEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH264FrameSizeEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH264FrameSizeEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH264FrameSizeEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( frameISize, framePSize, frameBSize );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH264FrameSizeEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH264FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( frameISize == rhs.frameISize ) && ( framePSize == rhs.framePSize ) && ( frameBSize == rhs.frameBSize );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH264FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ uint32_t frameISize = {};
+ uint32_t framePSize = {};
+ uint32_t frameBSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT ) ==
+ sizeof( VkVideoEncodeH264FrameSizeEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT>::value,
+ "VideoEncodeH264FrameSizeEXT is not nothrow_move_constructible!" );
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264NaluSliceEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264NaluSliceEXT;
+ using NativeType = VkVideoEncodeH264NaluSliceEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264NaluSliceEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoEncodeH264NaluSliceEXT(
@@ -70302,19 +95230,13 @@ namespace VULKAN_HPP_NAMESPACE
uint8_t refFinalList0EntryCount_ = {},
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList0Entries_ = {},
uint8_t refFinalList1EntryCount_ = {},
- const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList1Entries_ = {},
- uint32_t precedingNaluBytes_ = {},
- uint8_t minQp_ = {},
- uint8_t maxQp_ = {} ) VULKAN_HPP_NOEXCEPT
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList1Entries_ = {} ) VULKAN_HPP_NOEXCEPT
: pSliceHeaderStd( pSliceHeaderStd_ )
, mbCount( mbCount_ )
, refFinalList0EntryCount( refFinalList0EntryCount_ )
, pRefFinalList0Entries( pRefFinalList0Entries_ )
, refFinalList1EntryCount( refFinalList1EntryCount_ )
, pRefFinalList1Entries( pRefFinalList1Entries_ )
- , precedingNaluBytes( precedingNaluBytes_ )
- , minQp( minQp_ )
- , maxQp( maxQp_ )
{}
VULKAN_HPP_CONSTEXPR
@@ -70331,25 +95253,18 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT> const &
refFinalList0Entries_,
VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT> const &
- refFinalList1Entries_ = {},
- uint32_t precedingNaluBytes_ = {},
- uint8_t minQp_ = {},
- uint8_t maxQp_ = {} )
+ refFinalList1Entries_ = {} )
: pSliceHeaderStd( pSliceHeaderStd_ )
, mbCount( mbCount_ )
, refFinalList0EntryCount( static_cast<uint8_t>( refFinalList0Entries_.size() ) )
, pRefFinalList0Entries( refFinalList0Entries_.data() )
, refFinalList1EntryCount( static_cast<uint8_t>( refFinalList1Entries_.size() ) )
, pRefFinalList1Entries( refFinalList1Entries_.data() )
- , precedingNaluBytes( precedingNaluBytes_ )
- , minQp( minQp_ )
- , maxQp( maxQp_ )
{}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT &
- operator=( VideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264NaluSliceEXT & operator=( VideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264NaluSliceEXT & operator=( VkVideoEncodeH264NaluSliceEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -70358,32 +95273,33 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264NaluSliceEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264NaluSliceEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT &
setPSliceHeaderStd( const StdVideoEncodeH264SliceHeader * pSliceHeaderStd_ ) VULKAN_HPP_NOEXCEPT
{
pSliceHeaderStd = pSliceHeaderStd_;
return *this;
}
- VideoEncodeH264NaluSliceEXT & setMbCount( uint32_t mbCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setMbCount( uint32_t mbCount_ ) VULKAN_HPP_NOEXCEPT
{
mbCount = mbCount_;
return *this;
}
- VideoEncodeH264NaluSliceEXT & setRefFinalList0EntryCount( uint8_t refFinalList0EntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT &
+ setRefFinalList0EntryCount( uint8_t refFinalList0EntryCount_ ) VULKAN_HPP_NOEXCEPT
{
refFinalList0EntryCount = refFinalList0EntryCount_;
return *this;
}
- VideoEncodeH264NaluSliceEXT & setPRefFinalList0Entries(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setPRefFinalList0Entries(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList0Entries_ ) VULKAN_HPP_NOEXCEPT
{
pRefFinalList0Entries = pRefFinalList0Entries_;
@@ -70401,13 +95317,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoEncodeH264NaluSliceEXT & setRefFinalList1EntryCount( uint8_t refFinalList1EntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT &
+ setRefFinalList1EntryCount( uint8_t refFinalList1EntryCount_ ) VULKAN_HPP_NOEXCEPT
{
refFinalList1EntryCount = refFinalList1EntryCount_;
return *this;
}
- VideoEncodeH264NaluSliceEXT & setPRefFinalList1Entries(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264NaluSliceEXT & setPRefFinalList1Entries(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList1Entries_ ) VULKAN_HPP_NOEXCEPT
{
pRefFinalList1Entries = pRefFinalList1Entries_;
@@ -70424,47 +95341,58 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- VideoEncodeH264NaluSliceEXT & setPrecedingNaluBytes( uint32_t precedingNaluBytes_ ) VULKAN_HPP_NOEXCEPT
- {
- precedingNaluBytes = precedingNaluBytes_;
- return *this;
- }
-
- VideoEncodeH264NaluSliceEXT & setMinQp( uint8_t minQp_ ) VULKAN_HPP_NOEXCEPT
- {
- minQp = minQp_;
- return *this;
- }
-
- VideoEncodeH264NaluSliceEXT & setMaxQp( uint8_t maxQp_ ) VULKAN_HPP_NOEXCEPT
- {
- maxQp = maxQp_;
- return *this;
- }
-# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
-
- operator VkVideoEncodeH264NaluSliceEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264NaluSliceEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264NaluSliceEXT *>( this );
}
- operator VkVideoEncodeH264NaluSliceEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264NaluSliceEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264NaluSliceEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const StdVideoEncodeH264SliceHeader * const &,
+ uint32_t const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ pSliceHeaderStd,
+ mbCount,
+ refFinalList0EntryCount,
+ pRefFinalList0Entries,
+ refFinalList1EntryCount,
+ pRefFinalList1Entries );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264NaluSliceEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264NaluSliceEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pSliceHeaderStd == rhs.pSliceHeaderStd ) &&
( mbCount == rhs.mbCount ) && ( refFinalList0EntryCount == rhs.refFinalList0EntryCount ) &&
( pRefFinalList0Entries == rhs.pRefFinalList0Entries ) &&
( refFinalList1EntryCount == rhs.refFinalList1EntryCount ) &&
- ( pRefFinalList1Entries == rhs.pRefFinalList1Entries ) &&
- ( precedingNaluBytes == rhs.precedingNaluBytes ) && ( minQp == rhs.minQp ) && ( maxQp == rhs.maxQp );
+ ( pRefFinalList1Entries == rhs.pRefFinalList1Entries );
+# endif
}
bool operator!=( VideoEncodeH264NaluSliceEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70482,14 +95410,15 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList0Entries = {};
uint8_t refFinalList1EntryCount = {};
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefFinalList1Entries = {};
- uint32_t precedingNaluBytes = {};
- uint8_t minQp = {};
- uint8_t maxQp = {};
};
- static_assert( sizeof( VideoEncodeH264NaluSliceEXT ) == sizeof( VkVideoEncodeH264NaluSliceEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264NaluSliceEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT ) ==
+ sizeof( VkVideoEncodeH264NaluSliceEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT>::value,
+ "VideoEncodeH264NaluSliceEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264NaluSliceEXT>
@@ -70501,8 +95430,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264ProfileEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264ProfileEXT;
+ using NativeType = VkVideoEncodeH264ProfileEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264ProfileEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoEncodeH264ProfileEXT( StdVideoH264ProfileIdc stdProfileIdc_ = {} ) VULKAN_HPP_NOEXCEPT
@@ -70517,8 +95448,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileEXT &
- operator=( VideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264ProfileEXT & operator=( VideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264ProfileEXT & operator=( VkVideoEncodeH264ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -70527,32 +95457,56 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264ProfileEXT & setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264ProfileEXT &
+ setStdProfileIdc( StdVideoH264ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
{
stdProfileIdc = stdProfileIdc_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264ProfileEXT *>( this );
}
- operator VkVideoEncodeH264ProfileEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264ProfileEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264ProfileEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, StdVideoH264ProfileIdc const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stdProfileIdc );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( VideoEncodeH264ProfileEXT const & ) const = default;
-# else
+ std::strong_ordering operator<=>( VideoEncodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH264ProfileIdc ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( VideoEncodeH264ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
@@ -70563,17 +95517,19 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264ProfileEXT;
const void * pNext = {};
StdVideoH264ProfileIdc stdProfileIdc = {};
};
- static_assert( sizeof( VideoEncodeH264ProfileEXT ) == sizeof( VkVideoEncodeH264ProfileEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264ProfileEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileEXT ) ==
+ sizeof( VkVideoEncodeH264ProfileEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264ProfileEXT>::value,
+ "VideoEncodeH264ProfileEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264ProfileEXT>
@@ -70583,9 +95539,485 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH264QpEXT
+ {
+ using NativeType = VkVideoEncodeH264QpEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH264QpEXT( int32_t qpI_ = {}, int32_t qpP_ = {}, int32_t qpB_ = {} ) VULKAN_HPP_NOEXCEPT
+ : qpI( qpI_ )
+ , qpP( qpP_ )
+ , qpB( qpB_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH264QpEXT( VideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264QpEXT( VkVideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH264QpEXT( *reinterpret_cast<VideoEncodeH264QpEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH264QpEXT & operator=( VideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264QpEXT & operator=( VkVideoEncodeH264QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpEXT & setQpI( int32_t qpI_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qpI = qpI_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpEXT & setQpP( int32_t qpP_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qpP = qpP_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264QpEXT & setQpB( int32_t qpB_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qpB = qpB_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH264QpEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH264QpEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH264QpEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH264QpEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<int32_t const &, int32_t const &, int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( qpI, qpP, qpB );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH264QpEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH264QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( qpI == rhs.qpI ) && ( qpP == rhs.qpP ) && ( qpB == rhs.qpB );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH264QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ int32_t qpI = {};
+ int32_t qpP = {};
+ int32_t qpB = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT ) == sizeof( VkVideoEncodeH264QpEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT>::value,
+ "VideoEncodeH264QpEXT is not nothrow_move_constructible!" );
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH264RateControlInfoEXT
+ {
+ using NativeType = VkVideoEncodeH264RateControlInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH264RateControlInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlInfoEXT(
+ uint32_t gopFrameCount_ = {},
+ uint32_t idrPeriod_ = {},
+ uint32_t consecutiveBFrameCount_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure_ =
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown,
+ uint8_t temporalLayerCount_ = {} ) VULKAN_HPP_NOEXCEPT
+ : gopFrameCount( gopFrameCount_ )
+ , idrPeriod( idrPeriod_ )
+ , consecutiveBFrameCount( consecutiveBFrameCount_ )
+ , rateControlStructure( rateControlStructure_ )
+ , temporalLayerCount( temporalLayerCount_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH264RateControlInfoEXT( VideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264RateControlInfoEXT( VkVideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH264RateControlInfoEXT( *reinterpret_cast<VideoEncodeH264RateControlInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH264RateControlInfoEXT &
+ operator=( VideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264RateControlInfoEXT & operator=( VkVideoEncodeH264RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT &
+ setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ gopFrameCount = gopFrameCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setIdrPeriod( uint32_t idrPeriod_ ) VULKAN_HPP_NOEXCEPT
+ {
+ idrPeriod = idrPeriod_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT &
+ setConsecutiveBFrameCount( uint32_t consecutiveBFrameCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ consecutiveBFrameCount = consecutiveBFrameCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT & setRateControlStructure(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure_ ) VULKAN_HPP_NOEXCEPT
+ {
+ rateControlStructure = rateControlStructure_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlInfoEXT &
+ setTemporalLayerCount( uint8_t temporalLayerCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ temporalLayerCount = temporalLayerCount_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH264RateControlInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH264RateControlInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH264RateControlInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH264RateControlInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT const &,
+ uint8_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, gopFrameCount, idrPeriod, consecutiveBFrameCount, rateControlStructure, temporalLayerCount );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH264RateControlInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH264RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( gopFrameCount == rhs.gopFrameCount ) &&
+ ( idrPeriod == rhs.idrPeriod ) && ( consecutiveBFrameCount == rhs.consecutiveBFrameCount ) &&
+ ( rateControlStructure == rhs.rateControlStructure ) && ( temporalLayerCount == rhs.temporalLayerCount );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH264RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264RateControlInfoEXT;
+ const void * pNext = {};
+ uint32_t gopFrameCount = {};
+ uint32_t idrPeriod = {};
+ uint32_t consecutiveBFrameCount = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT rateControlStructure =
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlStructureFlagBitsEXT::eUnknown;
+ uint8_t temporalLayerCount = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT ) ==
+ sizeof( VkVideoEncodeH264RateControlInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlInfoEXT>::value,
+ "VideoEncodeH264RateControlInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH264RateControlInfoEXT>
+ {
+ using Type = VideoEncodeH264RateControlInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH264RateControlLayerInfoEXT
+ {
+ using NativeType = VkVideoEncodeH264RateControlLayerInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH264RateControlLayerInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlLayerInfoEXT(
+ uint8_t temporalLayerId_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT initialRcQp_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT minQp_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT maxQp_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT maxFrameSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : temporalLayerId( temporalLayerId_ )
+ , useInitialRcQp( useInitialRcQp_ )
+ , initialRcQp( initialRcQp_ )
+ , useMinQp( useMinQp_ )
+ , minQp( minQp_ )
+ , useMaxQp( useMaxQp_ )
+ , maxQp( maxQp_ )
+ , useMaxFrameSize( useMaxFrameSize_ )
+ , maxFrameSize( maxFrameSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH264RateControlLayerInfoEXT( VideoEncodeH264RateControlLayerInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264RateControlLayerInfoEXT( VkVideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH264RateControlLayerInfoEXT(
+ *reinterpret_cast<VideoEncodeH264RateControlLayerInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH264RateControlLayerInfoEXT &
+ operator=( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH264RateControlLayerInfoEXT &
+ operator=( VkVideoEncodeH264RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setTemporalLayerId( uint8_t temporalLayerId_ ) VULKAN_HPP_NOEXCEPT
+ {
+ temporalLayerId = temporalLayerId_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setUseInitialRcQp( VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useInitialRcQp = useInitialRcQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setInitialRcQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & initialRcQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ initialRcQp = initialRcQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setUseMinQp( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useMinQp = useMinQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setMinQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & minQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minQp = minQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setUseMaxQp( VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useMaxQp = useMaxQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setMaxQp( VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const & maxQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxQp = maxQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useMaxFrameSize = useMaxFrameSize_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264RateControlLayerInfoEXT &
+ setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxFrameSize = maxFrameSize_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH264RateControlLayerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH264RateControlLayerInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH264RateControlLayerInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH264RateControlLayerInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint8_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ temporalLayerId,
+ useInitialRcQp,
+ initialRcQp,
+ useMinQp,
+ minQp,
+ useMaxQp,
+ maxQp,
+ useMaxFrameSize,
+ maxFrameSize );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH264RateControlLayerInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( temporalLayerId == rhs.temporalLayerId ) &&
+ ( useInitialRcQp == rhs.useInitialRcQp ) && ( initialRcQp == rhs.initialRcQp ) &&
+ ( useMinQp == rhs.useMinQp ) && ( minQp == rhs.minQp ) && ( useMaxQp == rhs.useMaxQp ) &&
+ ( maxQp == rhs.maxQp ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) &&
+ ( maxFrameSize == rhs.maxFrameSize );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH264RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH264RateControlLayerInfoEXT;
+ const void * pNext = {};
+ uint8_t temporalLayerId = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT initialRcQp = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useMinQp = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT minQp = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxQp = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264QpEXT maxQp = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264FrameSizeEXT maxFrameSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT ) ==
+ sizeof( VkVideoEncodeH264RateControlLayerInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264RateControlLayerInfoEXT>::value,
+ "VideoEncodeH264RateControlLayerInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH264RateControlLayerInfoEXT>
+ {
+ using Type = VideoEncodeH264RateControlLayerInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264SessionCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoEncodeH264SessionCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoEncodeH264SessionCreateInfoEXT;
@@ -70607,8 +96039,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoEXT &
- operator=( VideoEncodeH264SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264SessionCreateInfoEXT &
+ operator=( VideoEncodeH264SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264SessionCreateInfoEXT &
operator=( VkVideoEncodeH264SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -70618,27 +96050,27 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264SessionCreateInfoEXT &
- setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH264CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH264CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoEncodeH264SessionCreateInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoEXT &
setMaxPictureSizeInMbs( VULKAN_HPP_NAMESPACE::Extent2D const & maxPictureSizeInMbs_ ) VULKAN_HPP_NOEXCEPT
{
maxPictureSizeInMbs = maxPictureSizeInMbs_;
return *this;
}
- VideoEncodeH264SessionCreateInfoEXT & setPStdExtensionVersion(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionCreateInfoEXT & setPStdExtensionVersion(
const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion_ ) VULKAN_HPP_NOEXCEPT
{
pStdExtensionVersion = pStdExtensionVersion_;
@@ -70646,23 +96078,43 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264SessionCreateInfoEXT *>( this );
}
- operator VkVideoEncodeH264SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264SessionCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH264CreateFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, maxPictureSizeInMbs, pStdExtensionVersion );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264SessionCreateInfoEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( maxPictureSizeInMbs == rhs.maxPictureSizeInMbs ) && ( pStdExtensionVersion == rhs.pStdExtensionVersion );
+# endif
}
bool operator!=( VideoEncodeH264SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70678,10 +96130,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::Extent2D maxPictureSizeInMbs = {};
const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion = {};
};
- static_assert( sizeof( VideoEncodeH264SessionCreateInfoEXT ) == sizeof( VkVideoEncodeH264SessionCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264SessionCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoEXT ) ==
+ sizeof( VkVideoEncodeH264SessionCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionCreateInfoEXT>::value,
+ "VideoEncodeH264SessionCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264SessionCreateInfoEXT>
@@ -70693,7 +96149,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264SessionParametersAddInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoEncodeH264SessionParametersAddInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoEncodeH264SessionParametersAddInfoEXT;
@@ -70730,8 +96188,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT &
- operator=( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264SessionParametersAddInfoEXT &
+ operator=( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264SessionParametersAddInfoEXT &
operator=( VkVideoEncodeH264SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -70741,20 +96199,22 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264SessionParametersAddInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264SessionParametersAddInfoEXT & setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT &
+ setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
spsStdCount = spsStdCount_;
return *this;
}
- VideoEncodeH264SessionParametersAddInfoEXT &
- setPSpsStd( const StdVideoH264SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT &
+ setPSpsStd( const StdVideoH264SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
{
pSpsStd = pSpsStd_;
return *this;
@@ -70771,14 +96231,15 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoEncodeH264SessionParametersAddInfoEXT & setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT &
+ setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
ppsStdCount = ppsStdCount_;
return *this;
}
- VideoEncodeH264SessionParametersAddInfoEXT &
- setPPpsStd( const StdVideoH264PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersAddInfoEXT &
+ setPPpsStd( const StdVideoH264PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
{
pPpsStd = pPpsStd_;
return *this;
@@ -70796,23 +96257,44 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264SessionParametersAddInfoEXT *>( this );
}
- operator VkVideoEncodeH264SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264SessionParametersAddInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const StdVideoH264SequenceParameterSet * const &,
+ uint32_t const &,
+ const StdVideoH264PictureParameterSet * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, spsStdCount, pSpsStd, ppsStdCount, pPpsStd );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264SessionParametersAddInfoEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( spsStdCount == rhs.spsStdCount ) &&
( pSpsStd == rhs.pSpsStd ) && ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd );
+# endif
}
bool operator!=( VideoEncodeH264SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70829,11 +96311,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t ppsStdCount = {};
const StdVideoH264PictureParameterSet * pPpsStd = {};
};
- static_assert( sizeof( VideoEncodeH264SessionParametersAddInfoEXT ) ==
- sizeof( VkVideoEncodeH264SessionParametersAddInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264SessionParametersAddInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT ) ==
+ sizeof( VkVideoEncodeH264SessionParametersAddInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT>::value,
+ "VideoEncodeH264SessionParametersAddInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264SessionParametersAddInfoEXT>
@@ -70845,7 +96331,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264SessionParametersCreateInfoEXT
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoEncodeH264SessionParametersCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoEncodeH264SessionParametersCreateInfoEXT;
@@ -70870,8 +96358,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT &
- operator=( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264SessionParametersCreateInfoEXT &
+ operator=( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264SessionParametersCreateInfoEXT &
operator=( VkVideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -70881,25 +96369,28 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264SessionParametersCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264SessionParametersCreateInfoEXT & setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT &
+ setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
maxSpsStdCount = maxSpsStdCount_;
return *this;
}
- VideoEncodeH264SessionParametersCreateInfoEXT & setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT &
+ setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
{
maxPpsStdCount = maxPpsStdCount_;
return *this;
}
- VideoEncodeH264SessionParametersCreateInfoEXT & setPParametersAddInfo(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264SessionParametersCreateInfoEXT & setPParametersAddInfo(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT
{
pParametersAddInfo = pParametersAddInfo_;
@@ -70907,23 +96398,43 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264SessionParametersCreateInfoEXT *>( this );
}
- operator VkVideoEncodeH264SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264SessionParametersCreateInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264SessionParametersCreateInfoEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxSpsStdCount == rhs.maxSpsStdCount ) &&
( maxPpsStdCount == rhs.maxPpsStdCount ) && ( pParametersAddInfo == rhs.pParametersAddInfo );
+# endif
}
bool operator!=( VideoEncodeH264SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -70939,11 +96450,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxPpsStdCount = {};
const VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersAddInfoEXT * pParametersAddInfo = {};
};
- static_assert( sizeof( VideoEncodeH264SessionParametersCreateInfoEXT ) ==
- sizeof( VkVideoEncodeH264SessionParametersCreateInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264SessionParametersCreateInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoEXT ) ==
+ sizeof( VkVideoEncodeH264SessionParametersCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264SessionParametersCreateInfoEXT>::value,
+ "VideoEncodeH264SessionParametersCreateInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264SessionParametersCreateInfoEXT>
@@ -70955,8 +96470,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeH264VclFrameInfoEXT
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264VclFrameInfoEXT;
+ using NativeType = VkVideoEncodeH264VclFrameInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH264VclFrameInfoEXT;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoEncodeH264VclFrameInfoEXT(
@@ -71003,8 +96520,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT &
- operator=( VideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeH264VclFrameInfoEXT &
+ operator=( VideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeH264VclFrameInfoEXT & operator=( VkVideoEncodeH264VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71013,20 +96530,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeH264VclFrameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeH264VclFrameInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT &
setRefDefaultFinalList0EntryCount( uint8_t refDefaultFinalList0EntryCount_ ) VULKAN_HPP_NOEXCEPT
{
refDefaultFinalList0EntryCount = refDefaultFinalList0EntryCount_;
return *this;
}
- VideoEncodeH264VclFrameInfoEXT & setPRefDefaultFinalList0Entries(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setPRefDefaultFinalList0Entries(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefDefaultFinalList0Entries_ ) VULKAN_HPP_NOEXCEPT
{
pRefDefaultFinalList0Entries = pRefDefaultFinalList0Entries_;
@@ -71044,14 +96561,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoEncodeH264VclFrameInfoEXT &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT &
setRefDefaultFinalList1EntryCount( uint8_t refDefaultFinalList1EntryCount_ ) VULKAN_HPP_NOEXCEPT
{
refDefaultFinalList1EntryCount = refDefaultFinalList1EntryCount_;
return *this;
}
- VideoEncodeH264VclFrameInfoEXT & setPRefDefaultFinalList1Entries(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setPRefDefaultFinalList1Entries(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pRefDefaultFinalList1Entries_ ) VULKAN_HPP_NOEXCEPT
{
pRefDefaultFinalList1Entries = pRefDefaultFinalList1Entries_;
@@ -71069,13 +96586,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoEncodeH264VclFrameInfoEXT & setNaluSliceEntryCount( uint32_t naluSliceEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT &
+ setNaluSliceEntryCount( uint32_t naluSliceEntryCount_ ) VULKAN_HPP_NOEXCEPT
{
naluSliceEntryCount = naluSliceEntryCount_;
return *this;
}
- VideoEncodeH264VclFrameInfoEXT & setPNaluSliceEntries(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setPNaluSliceEntries(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT * pNaluSliceEntries_ ) VULKAN_HPP_NOEXCEPT
{
pNaluSliceEntries = pNaluSliceEntries_;
@@ -71093,7 +96611,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- VideoEncodeH264VclFrameInfoEXT & setPCurrentPictureInfo(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH264VclFrameInfoEXT & setPCurrentPictureInfo(
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pCurrentPictureInfo_ ) VULKAN_HPP_NOEXCEPT
{
pCurrentPictureInfo = pCurrentPictureInfo_;
@@ -71101,21 +96619,52 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeH264VclFrameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264VclFrameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeH264VclFrameInfoEXT *>( this );
}
- operator VkVideoEncodeH264VclFrameInfoEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeH264VclFrameInfoEXT &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeH264VclFrameInfoEXT *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT * const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ refDefaultFinalList0EntryCount,
+ pRefDefaultFinalList0Entries,
+ refDefaultFinalList1EntryCount,
+ pRefDefaultFinalList1Entries,
+ naluSliceEntryCount,
+ pNaluSliceEntries,
+ pCurrentPictureInfo );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeH264VclFrameInfoEXT const & ) const = default;
# else
bool operator==( VideoEncodeH264VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( refDefaultFinalList0EntryCount == rhs.refDefaultFinalList0EntryCount ) &&
( pRefDefaultFinalList0Entries == rhs.pRefDefaultFinalList0Entries ) &&
@@ -71123,6 +96672,7 @@ namespace VULKAN_HPP_NAMESPACE
( pRefDefaultFinalList1Entries == rhs.pRefDefaultFinalList1Entries ) &&
( naluSliceEntryCount == rhs.naluSliceEntryCount ) && ( pNaluSliceEntries == rhs.pNaluSliceEntries ) &&
( pCurrentPictureInfo == rhs.pCurrentPictureInfo );
+# endif
}
bool operator!=( VideoEncodeH264VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71142,10 +96692,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::VideoEncodeH264NaluSliceEXT * pNaluSliceEntries = {};
const VULKAN_HPP_NAMESPACE::VideoEncodeH264DpbSlotInfoEXT * pCurrentPictureInfo = {};
};
- static_assert( sizeof( VideoEncodeH264VclFrameInfoEXT ) == sizeof( VkVideoEncodeH264VclFrameInfoEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeH264VclFrameInfoEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH264VclFrameInfoEXT ) ==
+ sizeof( VkVideoEncodeH264VclFrameInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH264VclFrameInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH264VclFrameInfoEXT>::value,
+ "VideoEncodeH264VclFrameInfoEXT is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeH264VclFrameInfoEXT>
@@ -71155,23 +96709,2266 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265CapabilitiesEXT
+ {
+ using NativeType = VkVideoEncodeH265CapabilitiesEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265CapabilitiesEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsEXT flags_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265InputModeFlagsEXT inputModeFlags_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265OutputModeFlagsEXT outputModeFlags_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsEXT ctbSizes_ = {},
+ VULKAN_HPP_NAMESPACE::Extent2D inputImageDataAlignment_ = {},
+ uint8_t maxNumL0ReferenceForP_ = {},
+ uint8_t maxNumL0ReferenceForB_ = {},
+ uint8_t maxNumL1Reference_ = {},
+ uint8_t maxNumSubLayers_ = {},
+ uint8_t qualityLevelCount_ = {},
+ VULKAN_HPP_NAMESPACE::ExtensionProperties stdExtensionVersion_ = {} ) VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
+ , inputModeFlags( inputModeFlags_ )
+ , outputModeFlags( outputModeFlags_ )
+ , ctbSizes( ctbSizes_ )
+ , inputImageDataAlignment( inputImageDataAlignment_ )
+ , maxNumL0ReferenceForP( maxNumL0ReferenceForP_ )
+ , maxNumL0ReferenceForB( maxNumL0ReferenceForB_ )
+ , maxNumL1Reference( maxNumL1Reference_ )
+ , maxNumSubLayers( maxNumSubLayers_ )
+ , qualityLevelCount( qualityLevelCount_ )
+ , stdExtensionVersion( stdExtensionVersion_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR_14
+ VideoEncodeH265CapabilitiesEXT( VideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265CapabilitiesEXT( VkVideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265CapabilitiesEXT( *reinterpret_cast<VideoEncodeH265CapabilitiesEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265CapabilitiesEXT &
+ operator=( VideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265CapabilitiesEXT & operator=( VkVideoEncodeH265CapabilitiesEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ flags = flags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setInputModeFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH265InputModeFlagsEXT inputModeFlags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ inputModeFlags = inputModeFlags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setOutputModeFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH265OutputModeFlagsEXT outputModeFlags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ outputModeFlags = outputModeFlags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setCtbSizes( VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsEXT ctbSizes_ ) VULKAN_HPP_NOEXCEPT
+ {
+ ctbSizes = ctbSizes_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setInputImageDataAlignment( VULKAN_HPP_NAMESPACE::Extent2D const & inputImageDataAlignment_ ) VULKAN_HPP_NOEXCEPT
+ {
+ inputImageDataAlignment = inputImageDataAlignment_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setMaxNumL0ReferenceForP( uint8_t maxNumL0ReferenceForP_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxNumL0ReferenceForP = maxNumL0ReferenceForP_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setMaxNumL0ReferenceForB( uint8_t maxNumL0ReferenceForB_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxNumL0ReferenceForB = maxNumL0ReferenceForB_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setMaxNumL1Reference( uint8_t maxNumL1Reference_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxNumL1Reference = maxNumL1Reference_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setMaxNumSubLayers( uint8_t maxNumSubLayers_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxNumSubLayers = maxNumSubLayers_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT &
+ setQualityLevelCount( uint8_t qualityLevelCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qualityLevelCount = qualityLevelCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265CapabilitiesEXT & setStdExtensionVersion(
+ VULKAN_HPP_NAMESPACE::ExtensionProperties const & stdExtensionVersion_ ) VULKAN_HPP_NOEXCEPT
+ {
+ stdExtensionVersion = stdExtensionVersion_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265CapabilitiesEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265CapabilitiesEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265CapabilitiesEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265CapabilitiesEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265InputModeFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265OutputModeFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsEXT const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ uint8_t const &,
+ uint8_t const &,
+ uint8_t const &,
+ uint8_t const &,
+ uint8_t const &,
+ VULKAN_HPP_NAMESPACE::ExtensionProperties const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ inputModeFlags,
+ outputModeFlags,
+ ctbSizes,
+ inputImageDataAlignment,
+ maxNumL0ReferenceForP,
+ maxNumL0ReferenceForB,
+ maxNumL1Reference,
+ maxNumSubLayers,
+ qualityLevelCount,
+ stdExtensionVersion );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265CapabilitiesEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
+ ( inputModeFlags == rhs.inputModeFlags ) && ( outputModeFlags == rhs.outputModeFlags ) &&
+ ( ctbSizes == rhs.ctbSizes ) && ( inputImageDataAlignment == rhs.inputImageDataAlignment ) &&
+ ( maxNumL0ReferenceForP == rhs.maxNumL0ReferenceForP ) &&
+ ( maxNumL0ReferenceForB == rhs.maxNumL0ReferenceForB ) && ( maxNumL1Reference == rhs.maxNumL1Reference ) &&
+ ( maxNumSubLayers == rhs.maxNumSubLayers ) && ( qualityLevelCount == rhs.qualityLevelCount ) &&
+ ( stdExtensionVersion == rhs.stdExtensionVersion );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265CapabilitiesEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265CapabilitiesEXT;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilityFlagsEXT flags = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265InputModeFlagsEXT inputModeFlags = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265OutputModeFlagsEXT outputModeFlags = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CtbSizeFlagsEXT ctbSizes = {};
+ VULKAN_HPP_NAMESPACE::Extent2D inputImageDataAlignment = {};
+ uint8_t maxNumL0ReferenceForP = {};
+ uint8_t maxNumL0ReferenceForB = {};
+ uint8_t maxNumL1Reference = {};
+ uint8_t maxNumSubLayers = {};
+ uint8_t qualityLevelCount = {};
+ VULKAN_HPP_NAMESPACE::ExtensionProperties stdExtensionVersion = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT ) ==
+ sizeof( VkVideoEncodeH265CapabilitiesEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265CapabilitiesEXT>::value,
+ "VideoEncodeH265CapabilitiesEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265CapabilitiesEXT>
+ {
+ using Type = VideoEncodeH265CapabilitiesEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265DpbSlotInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265DpbSlotInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265DpbSlotInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265DpbSlotInfoEXT(
+ int8_t slotIndex_ = {}, const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo_ = {} ) VULKAN_HPP_NOEXCEPT
+ : slotIndex( slotIndex_ )
+ , pStdReferenceInfo( pStdReferenceInfo_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265DpbSlotInfoEXT( VideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265DpbSlotInfoEXT( VkVideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265DpbSlotInfoEXT( *reinterpret_cast<VideoEncodeH265DpbSlotInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265DpbSlotInfoEXT &
+ operator=( VideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265DpbSlotInfoEXT & operator=( VkVideoEncodeH265DpbSlotInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoEXT & setSlotIndex( int8_t slotIndex_ ) VULKAN_HPP_NOEXCEPT
+ {
+ slotIndex = slotIndex_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265DpbSlotInfoEXT &
+ setPStdReferenceInfo( const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pStdReferenceInfo = pStdReferenceInfo_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265DpbSlotInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265DpbSlotInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265DpbSlotInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265DpbSlotInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ int8_t const &,
+ const StdVideoEncodeH265ReferenceInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, slotIndex, pStdReferenceInfo );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265DpbSlotInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( slotIndex == rhs.slotIndex ) &&
+ ( pStdReferenceInfo == rhs.pStdReferenceInfo );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265DpbSlotInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265DpbSlotInfoEXT;
+ const void * pNext = {};
+ int8_t slotIndex = {};
+ const StdVideoEncodeH265ReferenceInfo * pStdReferenceInfo = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT ) ==
+ sizeof( VkVideoEncodeH265DpbSlotInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT>::value,
+ "VideoEncodeH265DpbSlotInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265DpbSlotInfoEXT>
+ {
+ using Type = VideoEncodeH265DpbSlotInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265EmitPictureParametersEXT
+ {
+ using NativeType = VkVideoEncodeH265EmitPictureParametersEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265EmitPictureParametersEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265EmitPictureParametersEXT( uint8_t vpsId_ = {},
+ uint8_t spsId_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ = {},
+ uint32_t ppsIdEntryCount_ = {},
+ const uint8_t * ppsIdEntries_ = {} ) VULKAN_HPP_NOEXCEPT
+ : vpsId( vpsId_ )
+ , spsId( spsId_ )
+ , emitVpsEnable( emitVpsEnable_ )
+ , emitSpsEnable( emitSpsEnable_ )
+ , ppsIdEntryCount( ppsIdEntryCount_ )
+ , ppsIdEntries( ppsIdEntries_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265EmitPictureParametersEXT( VideoEncodeH265EmitPictureParametersEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265EmitPictureParametersEXT( VkVideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265EmitPictureParametersEXT(
+ *reinterpret_cast<VideoEncodeH265EmitPictureParametersEXT const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265EmitPictureParametersEXT(
+ uint8_t vpsId_,
+ uint8_t spsId_,
+ VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable_,
+ VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const uint8_t> const & psIdEntries_ )
+ : vpsId( vpsId_ )
+ , spsId( spsId_ )
+ , emitVpsEnable( emitVpsEnable_ )
+ , emitSpsEnable( emitSpsEnable_ )
+ , ppsIdEntryCount( static_cast<uint32_t>( psIdEntries_.size() ) )
+ , ppsIdEntries( psIdEntries_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265EmitPictureParametersEXT &
+ operator=( VideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265EmitPictureParametersEXT &
+ operator=( VkVideoEncodeH265EmitPictureParametersEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setVpsId( uint8_t vpsId_ ) VULKAN_HPP_NOEXCEPT
+ {
+ vpsId = vpsId_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT & setSpsId( uint8_t spsId_ ) VULKAN_HPP_NOEXCEPT
+ {
+ spsId = spsId_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT &
+ setEmitVpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable_ ) VULKAN_HPP_NOEXCEPT
+ {
+ emitVpsEnable = emitVpsEnable_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT &
+ setEmitSpsEnable( VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable_ ) VULKAN_HPP_NOEXCEPT
+ {
+ emitSpsEnable = emitSpsEnable_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT &
+ setPpsIdEntryCount( uint32_t ppsIdEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ ppsIdEntryCount = ppsIdEntryCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265EmitPictureParametersEXT &
+ setPpsIdEntries( const uint8_t * ppsIdEntries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ ppsIdEntries = ppsIdEntries_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265EmitPictureParametersEXT & setPsIdEntries(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const uint8_t> const & psIdEntries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ ppsIdEntryCount = static_cast<uint32_t>( psIdEntries_.size() );
+ ppsIdEntries = psIdEntries_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265EmitPictureParametersEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265EmitPictureParametersEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265EmitPictureParametersEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265EmitPictureParametersEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint8_t const &,
+ uint8_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ uint32_t const &,
+ const uint8_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, vpsId, spsId, emitVpsEnable, emitSpsEnable, ppsIdEntryCount, ppsIdEntries );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265EmitPictureParametersEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vpsId == rhs.vpsId ) && ( spsId == rhs.spsId ) &&
+ ( emitVpsEnable == rhs.emitVpsEnable ) && ( emitSpsEnable == rhs.emitSpsEnable ) &&
+ ( ppsIdEntryCount == rhs.ppsIdEntryCount ) && ( ppsIdEntries == rhs.ppsIdEntries );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265EmitPictureParametersEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265EmitPictureParametersEXT;
+ const void * pNext = {};
+ uint8_t vpsId = {};
+ uint8_t spsId = {};
+ VULKAN_HPP_NAMESPACE::Bool32 emitVpsEnable = {};
+ VULKAN_HPP_NAMESPACE::Bool32 emitSpsEnable = {};
+ uint32_t ppsIdEntryCount = {};
+ const uint8_t * ppsIdEntries = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT ) ==
+ sizeof( VkVideoEncodeH265EmitPictureParametersEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265EmitPictureParametersEXT>::value,
+ "VideoEncodeH265EmitPictureParametersEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265EmitPictureParametersEXT>
+ {
+ using Type = VideoEncodeH265EmitPictureParametersEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265FrameSizeEXT
+ {
+ using NativeType = VkVideoEncodeH265FrameSizeEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265FrameSizeEXT( uint32_t frameISize_ = {},
+ uint32_t framePSize_ = {},
+ uint32_t frameBSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : frameISize( frameISize_ )
+ , framePSize( framePSize_ )
+ , frameBSize( frameBSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265FrameSizeEXT( VideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265FrameSizeEXT( VkVideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265FrameSizeEXT( *reinterpret_cast<VideoEncodeH265FrameSizeEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265FrameSizeEXT & operator=( VideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265FrameSizeEXT & operator=( VkVideoEncodeH265FrameSizeEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeEXT & setFrameISize( uint32_t frameISize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ frameISize = frameISize_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeEXT & setFramePSize( uint32_t framePSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ framePSize = framePSize_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265FrameSizeEXT & setFrameBSize( uint32_t frameBSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ frameBSize = frameBSize_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265FrameSizeEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265FrameSizeEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265FrameSizeEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265FrameSizeEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<uint32_t const &, uint32_t const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( frameISize, framePSize, frameBSize );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265FrameSizeEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( frameISize == rhs.frameISize ) && ( framePSize == rhs.framePSize ) && ( frameBSize == rhs.frameBSize );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265FrameSizeEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ uint32_t frameISize = {};
+ uint32_t framePSize = {};
+ uint32_t frameBSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT ) ==
+ sizeof( VkVideoEncodeH265FrameSizeEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT>::value,
+ "VideoEncodeH265FrameSizeEXT is not nothrow_move_constructible!" );
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265ReferenceListsEXT
+ {
+ using NativeType = VkVideoEncodeH265ReferenceListsEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265ReferenceListsEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265ReferenceListsEXT(
+ uint8_t referenceList0EntryCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList0Entries_ = {},
+ uint8_t referenceList1EntryCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList1Entries_ = {},
+ const StdVideoEncodeH265ReferenceModifications * pReferenceModifications_ = {} ) VULKAN_HPP_NOEXCEPT
+ : referenceList0EntryCount( referenceList0EntryCount_ )
+ , pReferenceList0Entries( pReferenceList0Entries_ )
+ , referenceList1EntryCount( referenceList1EntryCount_ )
+ , pReferenceList1Entries( pReferenceList1Entries_ )
+ , pReferenceModifications( pReferenceModifications_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265ReferenceListsEXT( VideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265ReferenceListsEXT( VkVideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265ReferenceListsEXT( *reinterpret_cast<VideoEncodeH265ReferenceListsEXT const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265ReferenceListsEXT(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT> const &
+ referenceList0Entries_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT> const &
+ referenceList1Entries_ = {},
+ const StdVideoEncodeH265ReferenceModifications * pReferenceModifications_ = {} )
+ : referenceList0EntryCount( static_cast<uint8_t>( referenceList0Entries_.size() ) )
+ , pReferenceList0Entries( referenceList0Entries_.data() )
+ , referenceList1EntryCount( static_cast<uint8_t>( referenceList1Entries_.size() ) )
+ , pReferenceList1Entries( referenceList1Entries_.data() )
+ , pReferenceModifications( pReferenceModifications_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265ReferenceListsEXT &
+ operator=( VideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265ReferenceListsEXT & operator=( VkVideoEncodeH265ReferenceListsEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT &
+ setReferenceList0EntryCount( uint8_t referenceList0EntryCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ referenceList0EntryCount = referenceList0EntryCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setPReferenceList0Entries(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList0Entries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pReferenceList0Entries = pReferenceList0Entries_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265ReferenceListsEXT & setReferenceList0Entries(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT> const &
+ referenceList0Entries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ referenceList0EntryCount = static_cast<uint8_t>( referenceList0Entries_.size() );
+ pReferenceList0Entries = referenceList0Entries_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT &
+ setReferenceList1EntryCount( uint8_t referenceList1EntryCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ referenceList1EntryCount = referenceList1EntryCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setPReferenceList1Entries(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList1Entries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pReferenceList1Entries = pReferenceList1Entries_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265ReferenceListsEXT & setReferenceList1Entries(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT> const &
+ referenceList1Entries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ referenceList1EntryCount = static_cast<uint8_t>( referenceList1Entries_.size() );
+ pReferenceList1Entries = referenceList1Entries_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ReferenceListsEXT & setPReferenceModifications(
+ const StdVideoEncodeH265ReferenceModifications * pReferenceModifications_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pReferenceModifications = pReferenceModifications_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265ReferenceListsEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265ReferenceListsEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265ReferenceListsEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265ReferenceListsEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * const &,
+ const StdVideoEncodeH265ReferenceModifications * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ referenceList0EntryCount,
+ pReferenceList0Entries,
+ referenceList1EntryCount,
+ pReferenceList1Entries,
+ pReferenceModifications );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265ReferenceListsEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265ReferenceListsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( referenceList0EntryCount == rhs.referenceList0EntryCount ) &&
+ ( pReferenceList0Entries == rhs.pReferenceList0Entries ) &&
+ ( referenceList1EntryCount == rhs.referenceList1EntryCount ) &&
+ ( pReferenceList1Entries == rhs.pReferenceList1Entries ) &&
+ ( pReferenceModifications == rhs.pReferenceModifications );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265ReferenceListsEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265ReferenceListsEXT;
+ const void * pNext = {};
+ uint8_t referenceList0EntryCount = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList0Entries = {};
+ uint8_t referenceList1EntryCount = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265DpbSlotInfoEXT * pReferenceList1Entries = {};
+ const StdVideoEncodeH265ReferenceModifications * pReferenceModifications = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT ) ==
+ sizeof( VkVideoEncodeH265ReferenceListsEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT>::value,
+ "VideoEncodeH265ReferenceListsEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265ReferenceListsEXT>
+ {
+ using Type = VideoEncodeH265ReferenceListsEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265NaluSliceSegmentEXT
+ {
+ using NativeType = VkVideoEncodeH265NaluSliceSegmentEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265NaluSliceSegmentEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265NaluSliceSegmentEXT(
+ uint32_t ctbCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ = {},
+ const StdVideoEncodeH265SliceSegmentHeader * pSliceSegmentHeaderStd_ = {} ) VULKAN_HPP_NOEXCEPT
+ : ctbCount( ctbCount_ )
+ , pReferenceFinalLists( pReferenceFinalLists_ )
+ , pSliceSegmentHeaderStd( pSliceSegmentHeaderStd_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265NaluSliceSegmentEXT( VideoEncodeH265NaluSliceSegmentEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265NaluSliceSegmentEXT( VkVideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265NaluSliceSegmentEXT( *reinterpret_cast<VideoEncodeH265NaluSliceSegmentEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265NaluSliceSegmentEXT &
+ operator=( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265NaluSliceSegmentEXT &
+ operator=( VkVideoEncodeH265NaluSliceSegmentEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & setCtbCount( uint32_t ctbCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ ctbCount = ctbCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & setPReferenceFinalLists(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pReferenceFinalLists = pReferenceFinalLists_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265NaluSliceSegmentEXT & setPSliceSegmentHeaderStd(
+ const StdVideoEncodeH265SliceSegmentHeader * pSliceSegmentHeaderStd_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pSliceSegmentHeaderStd = pSliceSegmentHeaderStd_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265NaluSliceSegmentEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265NaluSliceSegmentEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265NaluSliceSegmentEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265NaluSliceSegmentEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * const &,
+ const StdVideoEncodeH265SliceSegmentHeader * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, ctbCount, pReferenceFinalLists, pSliceSegmentHeaderStd );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265NaluSliceSegmentEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( ctbCount == rhs.ctbCount ) &&
+ ( pReferenceFinalLists == rhs.pReferenceFinalLists ) &&
+ ( pSliceSegmentHeaderStd == rhs.pSliceSegmentHeaderStd );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265NaluSliceSegmentEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265NaluSliceSegmentEXT;
+ const void * pNext = {};
+ uint32_t ctbCount = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists = {};
+ const StdVideoEncodeH265SliceSegmentHeader * pSliceSegmentHeaderStd = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT ) ==
+ sizeof( VkVideoEncodeH265NaluSliceSegmentEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT>::value,
+ "VideoEncodeH265NaluSliceSegmentEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265NaluSliceSegmentEXT>
+ {
+ using Type = VideoEncodeH265NaluSliceSegmentEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265ProfileEXT
+ {
+ using NativeType = VkVideoEncodeH265ProfileEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265ProfileEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265ProfileEXT( StdVideoH265ProfileIdc stdProfileIdc_ = {} ) VULKAN_HPP_NOEXCEPT
+ : stdProfileIdc( stdProfileIdc_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265ProfileEXT( VideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265ProfileEXT( VkVideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265ProfileEXT( *reinterpret_cast<VideoEncodeH265ProfileEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265ProfileEXT & operator=( VideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265ProfileEXT & operator=( VkVideoEncodeH265ProfileEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ProfileEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265ProfileEXT &
+ setStdProfileIdc( StdVideoH265ProfileIdc stdProfileIdc_ ) VULKAN_HPP_NOEXCEPT
+ {
+ stdProfileIdc = stdProfileIdc_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265ProfileEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265ProfileEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265ProfileEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265ProfileEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, StdVideoH265ProfileIdc const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, stdProfileIdc );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ std::strong_ordering operator<=>( VideoEncodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
+ bool operator==( VideoEncodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
+ ( memcmp( &stdProfileIdc, &rhs.stdProfileIdc, sizeof( StdVideoH265ProfileIdc ) ) == 0 );
+ }
+
+ bool operator!=( VideoEncodeH265ProfileEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265ProfileEXT;
+ const void * pNext = {};
+ StdVideoH265ProfileIdc stdProfileIdc = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT ) ==
+ sizeof( VkVideoEncodeH265ProfileEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265ProfileEXT>::value,
+ "VideoEncodeH265ProfileEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265ProfileEXT>
+ {
+ using Type = VideoEncodeH265ProfileEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265QpEXT
+ {
+ using NativeType = VkVideoEncodeH265QpEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265QpEXT( int32_t qpI_ = {}, int32_t qpP_ = {}, int32_t qpB_ = {} ) VULKAN_HPP_NOEXCEPT
+ : qpI( qpI_ )
+ , qpP( qpP_ )
+ , qpB( qpB_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265QpEXT( VideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265QpEXT( VkVideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265QpEXT( *reinterpret_cast<VideoEncodeH265QpEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265QpEXT & operator=( VideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265QpEXT & operator=( VkVideoEncodeH265QpEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpEXT & setQpI( int32_t qpI_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qpI = qpI_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpEXT & setQpP( int32_t qpP_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qpP = qpP_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265QpEXT & setQpB( int32_t qpB_ ) VULKAN_HPP_NOEXCEPT
+ {
+ qpB = qpB_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265QpEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265QpEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265QpEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265QpEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<int32_t const &, int32_t const &, int32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( qpI, qpP, qpB );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265QpEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( qpI == rhs.qpI ) && ( qpP == rhs.qpP ) && ( qpB == rhs.qpB );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265QpEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ int32_t qpI = {};
+ int32_t qpP = {};
+ int32_t qpB = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT ) == sizeof( VkVideoEncodeH265QpEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT>::value,
+ "VideoEncodeH265QpEXT is not nothrow_move_constructible!" );
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265RateControlInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265RateControlInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265RateControlInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlInfoEXT(
+ uint32_t gopFrameCount_ = {},
+ uint32_t idrPeriod_ = {},
+ uint32_t consecutiveBFrameCount_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure_ =
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown,
+ uint8_t subLayerCount_ = {} ) VULKAN_HPP_NOEXCEPT
+ : gopFrameCount( gopFrameCount_ )
+ , idrPeriod( idrPeriod_ )
+ , consecutiveBFrameCount( consecutiveBFrameCount_ )
+ , rateControlStructure( rateControlStructure_ )
+ , subLayerCount( subLayerCount_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265RateControlInfoEXT( VideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265RateControlInfoEXT( VkVideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265RateControlInfoEXT( *reinterpret_cast<VideoEncodeH265RateControlInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265RateControlInfoEXT &
+ operator=( VideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265RateControlInfoEXT & operator=( VkVideoEncodeH265RateControlInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT &
+ setGopFrameCount( uint32_t gopFrameCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ gopFrameCount = gopFrameCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setIdrPeriod( uint32_t idrPeriod_ ) VULKAN_HPP_NOEXCEPT
+ {
+ idrPeriod = idrPeriod_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT &
+ setConsecutiveBFrameCount( uint32_t consecutiveBFrameCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ consecutiveBFrameCount = consecutiveBFrameCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT & setRateControlStructure(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure_ ) VULKAN_HPP_NOEXCEPT
+ {
+ rateControlStructure = rateControlStructure_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlInfoEXT &
+ setSubLayerCount( uint8_t subLayerCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ subLayerCount = subLayerCount_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265RateControlInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265RateControlInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265RateControlInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265RateControlInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT const &,
+ uint8_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, gopFrameCount, idrPeriod, consecutiveBFrameCount, rateControlStructure, subLayerCount );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265RateControlInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( gopFrameCount == rhs.gopFrameCount ) &&
+ ( idrPeriod == rhs.idrPeriod ) && ( consecutiveBFrameCount == rhs.consecutiveBFrameCount ) &&
+ ( rateControlStructure == rhs.rateControlStructure ) && ( subLayerCount == rhs.subLayerCount );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265RateControlInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265RateControlInfoEXT;
+ const void * pNext = {};
+ uint32_t gopFrameCount = {};
+ uint32_t idrPeriod = {};
+ uint32_t consecutiveBFrameCount = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT rateControlStructure =
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlStructureFlagBitsEXT::eUnknown;
+ uint8_t subLayerCount = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT ) ==
+ sizeof( VkVideoEncodeH265RateControlInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlInfoEXT>::value,
+ "VideoEncodeH265RateControlInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265RateControlInfoEXT>
+ {
+ using Type = VideoEncodeH265RateControlInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265RateControlLayerInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265RateControlLayerInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265RateControlLayerInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlLayerInfoEXT(
+ uint8_t temporalId_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT initialRcQp_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT minQp_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT maxQp_ = {},
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT maxFrameSize_ = {} ) VULKAN_HPP_NOEXCEPT
+ : temporalId( temporalId_ )
+ , useInitialRcQp( useInitialRcQp_ )
+ , initialRcQp( initialRcQp_ )
+ , useMinQp( useMinQp_ )
+ , minQp( minQp_ )
+ , useMaxQp( useMaxQp_ )
+ , maxQp( maxQp_ )
+ , useMaxFrameSize( useMaxFrameSize_ )
+ , maxFrameSize( maxFrameSize_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265RateControlLayerInfoEXT( VideoEncodeH265RateControlLayerInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265RateControlLayerInfoEXT( VkVideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265RateControlLayerInfoEXT(
+ *reinterpret_cast<VideoEncodeH265RateControlLayerInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265RateControlLayerInfoEXT &
+ operator=( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265RateControlLayerInfoEXT &
+ operator=( VkVideoEncodeH265RateControlLayerInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setTemporalId( uint8_t temporalId_ ) VULKAN_HPP_NOEXCEPT
+ {
+ temporalId = temporalId_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setUseInitialRcQp( VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useInitialRcQp = useInitialRcQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setInitialRcQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & initialRcQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ initialRcQp = initialRcQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setUseMinQp( VULKAN_HPP_NAMESPACE::Bool32 useMinQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useMinQp = useMinQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setMinQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & minQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ minQp = minQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setUseMaxQp( VULKAN_HPP_NAMESPACE::Bool32 useMaxQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useMaxQp = useMaxQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setMaxQp( VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const & maxQp_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxQp = maxQp_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setUseMaxFrameSize( VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ useMaxFrameSize = useMaxFrameSize_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265RateControlLayerInfoEXT &
+ setMaxFrameSize( VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT const & maxFrameSize_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxFrameSize = maxFrameSize_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265RateControlLayerInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265RateControlLayerInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265RateControlLayerInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265RateControlLayerInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint8_t const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT const &,
+ VULKAN_HPP_NAMESPACE::Bool32 const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ temporalId,
+ useInitialRcQp,
+ initialRcQp,
+ useMinQp,
+ minQp,
+ useMaxQp,
+ maxQp,
+ useMaxFrameSize,
+ maxFrameSize );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265RateControlLayerInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( temporalId == rhs.temporalId ) &&
+ ( useInitialRcQp == rhs.useInitialRcQp ) && ( initialRcQp == rhs.initialRcQp ) &&
+ ( useMinQp == rhs.useMinQp ) && ( minQp == rhs.minQp ) && ( useMaxQp == rhs.useMaxQp ) &&
+ ( maxQp == rhs.maxQp ) && ( useMaxFrameSize == rhs.useMaxFrameSize ) &&
+ ( maxFrameSize == rhs.maxFrameSize );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265RateControlLayerInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265RateControlLayerInfoEXT;
+ const void * pNext = {};
+ uint8_t temporalId = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useInitialRcQp = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT initialRcQp = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useMinQp = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT minQp = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxQp = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265QpEXT maxQp = {};
+ VULKAN_HPP_NAMESPACE::Bool32 useMaxFrameSize = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265FrameSizeEXT maxFrameSize = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT ) ==
+ sizeof( VkVideoEncodeH265RateControlLayerInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265RateControlLayerInfoEXT>::value,
+ "VideoEncodeH265RateControlLayerInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265RateControlLayerInfoEXT>
+ {
+ using Type = VideoEncodeH265RateControlLayerInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265SessionCreateInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265SessionCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265SessionCreateInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoEXT(
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CreateFlagsEXT flags_ = {},
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion_ = {} ) VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
+ , pStdExtensionVersion( pStdExtensionVersion_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoEXT( VideoEncodeH265SessionCreateInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265SessionCreateInfoEXT( VkVideoEncodeH265SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265SessionCreateInfoEXT( *reinterpret_cast<VideoEncodeH265SessionCreateInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265SessionCreateInfoEXT &
+ operator=( VideoEncodeH265SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265SessionCreateInfoEXT &
+ operator=( VkVideoEncodeH265SessionCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoEXT &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeH265CreateFlagsEXT flags_ ) VULKAN_HPP_NOEXCEPT
+ {
+ flags = flags_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionCreateInfoEXT & setPStdExtensionVersion(
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pStdExtensionVersion = pStdExtensionVersion_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265SessionCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265SessionCreateInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265SessionCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265SessionCreateInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CreateFlagsEXT const &,
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, pStdExtensionVersion );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265SessionCreateInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
+ ( pStdExtensionVersion == rhs.pStdExtensionVersion );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265SessionCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionCreateInfoEXT;
+ const void * pNext = {};
+ VULKAN_HPP_NAMESPACE::VideoEncodeH265CreateFlagsEXT flags = {};
+ const VULKAN_HPP_NAMESPACE::ExtensionProperties * pStdExtensionVersion = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoEXT ) ==
+ sizeof( VkVideoEncodeH265SessionCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionCreateInfoEXT>::value,
+ "VideoEncodeH265SessionCreateInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265SessionCreateInfoEXT>
+ {
+ using Type = VideoEncodeH265SessionCreateInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265SessionParametersAddInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265SessionParametersAddInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265SessionParametersAddInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersAddInfoEXT(
+ uint32_t vpsStdCount_ = {},
+ const StdVideoH265VideoParameterSet * pVpsStd_ = {},
+ uint32_t spsStdCount_ = {},
+ const StdVideoH265SequenceParameterSet * pSpsStd_ = {},
+ uint32_t ppsStdCount_ = {},
+ const StdVideoH265PictureParameterSet * pPpsStd_ = {} ) VULKAN_HPP_NOEXCEPT
+ : vpsStdCount( vpsStdCount_ )
+ , pVpsStd( pVpsStd_ )
+ , spsStdCount( spsStdCount_ )
+ , pSpsStd( pSpsStd_ )
+ , ppsStdCount( ppsStdCount_ )
+ , pPpsStd( pPpsStd_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersAddInfoEXT(
+ VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265SessionParametersAddInfoEXT( VkVideoEncodeH265SessionParametersAddInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265SessionParametersAddInfoEXT(
+ *reinterpret_cast<VideoEncodeH265SessionParametersAddInfoEXT const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265SessionParametersAddInfoEXT(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const StdVideoH265VideoParameterSet> const & vpsStd_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const StdVideoH265SequenceParameterSet> const & spsStd_ = {},
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const StdVideoH265PictureParameterSet> const & ppsStd_ = {} )
+ : vpsStdCount( static_cast<uint32_t>( vpsStd_.size() ) )
+ , pVpsStd( vpsStd_.data() )
+ , spsStdCount( static_cast<uint32_t>( spsStd_.size() ) )
+ , pSpsStd( spsStd_.data() )
+ , ppsStdCount( static_cast<uint32_t>( ppsStd_.size() ) )
+ , pPpsStd( ppsStd_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265SessionParametersAddInfoEXT &
+ operator=( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265SessionParametersAddInfoEXT &
+ operator=( VkVideoEncodeH265SessionParametersAddInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setVpsStdCount( uint32_t vpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ vpsStdCount = vpsStdCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setPVpsStd( const StdVideoH265VideoParameterSet * pVpsStd_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pVpsStd = pVpsStd_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265SessionParametersAddInfoEXT &
+ setVpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const StdVideoH265VideoParameterSet> const & vpsStd_ )
+ VULKAN_HPP_NOEXCEPT
+ {
+ vpsStdCount = static_cast<uint32_t>( vpsStd_.size() );
+ pVpsStd = vpsStd_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setSpsStdCount( uint32_t spsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ spsStdCount = spsStdCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setPSpsStd( const StdVideoH265SequenceParameterSet * pSpsStd_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pSpsStd = pSpsStd_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265SessionParametersAddInfoEXT &
+ setSpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const StdVideoH265SequenceParameterSet> const & spsStd_ )
+ VULKAN_HPP_NOEXCEPT
+ {
+ spsStdCount = static_cast<uint32_t>( spsStd_.size() );
+ pSpsStd = spsStd_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setPpsStdCount( uint32_t ppsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ ppsStdCount = ppsStdCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersAddInfoEXT &
+ setPPpsStd( const StdVideoH265PictureParameterSet * pPpsStd_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pPpsStd = pPpsStd_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265SessionParametersAddInfoEXT &
+ setPpsStd( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const StdVideoH265PictureParameterSet> const & ppsStd_ )
+ VULKAN_HPP_NOEXCEPT
+ {
+ ppsStdCount = static_cast<uint32_t>( ppsStd_.size() );
+ pPpsStd = ppsStd_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265SessionParametersAddInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265SessionParametersAddInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265SessionParametersAddInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265SessionParametersAddInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const StdVideoH265VideoParameterSet * const &,
+ uint32_t const &,
+ const StdVideoH265SequenceParameterSet * const &,
+ uint32_t const &,
+ const StdVideoH265PictureParameterSet * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, vpsStdCount, pVpsStd, spsStdCount, pSpsStd, ppsStdCount, pPpsStd );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265SessionParametersAddInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( vpsStdCount == rhs.vpsStdCount ) &&
+ ( pVpsStd == rhs.pVpsStd ) && ( spsStdCount == rhs.spsStdCount ) && ( pSpsStd == rhs.pSpsStd ) &&
+ ( ppsStdCount == rhs.ppsStdCount ) && ( pPpsStd == rhs.pPpsStd );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265SessionParametersAddInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersAddInfoEXT;
+ const void * pNext = {};
+ uint32_t vpsStdCount = {};
+ const StdVideoH265VideoParameterSet * pVpsStd = {};
+ uint32_t spsStdCount = {};
+ const StdVideoH265SequenceParameterSet * pSpsStd = {};
+ uint32_t ppsStdCount = {};
+ const StdVideoH265PictureParameterSet * pPpsStd = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT ) ==
+ sizeof( VkVideoEncodeH265SessionParametersAddInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT>::value,
+ "VideoEncodeH265SessionParametersAddInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265SessionParametersAddInfoEXT>
+ {
+ using Type = VideoEncodeH265SessionParametersAddInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265SessionParametersCreateInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265SessionParametersCreateInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersCreateInfoEXT(
+ uint32_t maxVpsStdCount_ = {},
+ uint32_t maxSpsStdCount_ = {},
+ uint32_t maxPpsStdCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ = {} )
+ VULKAN_HPP_NOEXCEPT
+ : maxVpsStdCount( maxVpsStdCount_ )
+ , maxSpsStdCount( maxSpsStdCount_ )
+ , maxPpsStdCount( maxPpsStdCount_ )
+ , pParametersAddInfo( pParametersAddInfo_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265SessionParametersCreateInfoEXT(
+ VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265SessionParametersCreateInfoEXT( VkVideoEncodeH265SessionParametersCreateInfoEXT const & rhs )
+ VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265SessionParametersCreateInfoEXT(
+ *reinterpret_cast<VideoEncodeH265SessionParametersCreateInfoEXT const *>( &rhs ) )
+ {}
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265SessionParametersCreateInfoEXT &
+ operator=( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265SessionParametersCreateInfoEXT &
+ operator=( VkVideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT &
+ setMaxVpsStdCount( uint32_t maxVpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxVpsStdCount = maxVpsStdCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT &
+ setMaxSpsStdCount( uint32_t maxSpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxSpsStdCount = maxSpsStdCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT &
+ setMaxPpsStdCount( uint32_t maxPpsStdCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ maxPpsStdCount = maxPpsStdCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265SessionParametersCreateInfoEXT & setPParametersAddInfo(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * pParametersAddInfo_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pParametersAddInfo = pParametersAddInfo_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265SessionParametersCreateInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265SessionParametersCreateInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265SessionParametersCreateInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265SessionParametersCreateInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, maxVpsStdCount, maxSpsStdCount, maxPpsStdCount, pParametersAddInfo );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265SessionParametersCreateInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( maxVpsStdCount == rhs.maxVpsStdCount ) &&
+ ( maxSpsStdCount == rhs.maxSpsStdCount ) && ( maxPpsStdCount == rhs.maxPpsStdCount ) &&
+ ( pParametersAddInfo == rhs.pParametersAddInfo );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265SessionParametersCreateInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT;
+ const void * pNext = {};
+ uint32_t maxVpsStdCount = {};
+ uint32_t maxSpsStdCount = {};
+ uint32_t maxPpsStdCount = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersAddInfoEXT * pParametersAddInfo = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT ) ==
+ sizeof( VkVideoEncodeH265SessionParametersCreateInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265SessionParametersCreateInfoEXT>::value,
+ "VideoEncodeH265SessionParametersCreateInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265SessionParametersCreateInfoEXT>
+ {
+ using Type = VideoEncodeH265SessionParametersCreateInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeH265VclFrameInfoEXT
+ {
+ using NativeType = VkVideoEncodeH265VclFrameInfoEXT;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeH265VclFrameInfoEXT;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeH265VclFrameInfoEXT(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ = {},
+ uint32_t naluSliceSegmentEntryCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * pNaluSliceSegmentEntries_ = {},
+ const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo_ = {} ) VULKAN_HPP_NOEXCEPT
+ : pReferenceFinalLists( pReferenceFinalLists_ )
+ , naluSliceSegmentEntryCount( naluSliceSegmentEntryCount_ )
+ , pNaluSliceSegmentEntries( pNaluSliceSegmentEntries_ )
+ , pCurrentPictureInfo( pCurrentPictureInfo_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeH265VclFrameInfoEXT( VideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265VclFrameInfoEXT( VkVideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeH265VclFrameInfoEXT( *reinterpret_cast<VideoEncodeH265VclFrameInfoEXT const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265VclFrameInfoEXT(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT> const & naluSliceSegmentEntries_,
+ const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo_ = {} )
+ : pReferenceFinalLists( pReferenceFinalLists_ )
+ , naluSliceSegmentEntryCount( static_cast<uint32_t>( naluSliceSegmentEntries_.size() ) )
+ , pNaluSliceSegmentEntries( naluSliceSegmentEntries_.data() )
+ , pCurrentPictureInfo( pCurrentPictureInfo_ )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
+ VideoEncodeH265VclFrameInfoEXT &
+ operator=( VideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeH265VclFrameInfoEXT & operator=( VkVideoEncodeH265VclFrameInfoEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ {
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT const *>( &rhs );
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNext = pNext_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & setPReferenceFinalLists(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pReferenceFinalLists = pReferenceFinalLists_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT &
+ setNaluSliceSegmentEntryCount( uint32_t naluSliceSegmentEntryCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ naluSliceSegmentEntryCount = naluSliceSegmentEntryCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT & setPNaluSliceSegmentEntries(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * pNaluSliceSegmentEntries_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pNaluSliceSegmentEntries = pNaluSliceSegmentEntries_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeH265VclFrameInfoEXT & setNaluSliceSegmentEntries(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT> const & naluSliceSegmentEntries_ )
+ VULKAN_HPP_NOEXCEPT
+ {
+ naluSliceSegmentEntryCount = static_cast<uint32_t>( naluSliceSegmentEntries_.size() );
+ pNaluSliceSegmentEntries = naluSliceSegmentEntries_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeH265VclFrameInfoEXT &
+ setPCurrentPictureInfo( const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pCurrentPictureInfo = pCurrentPictureInfo_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeH265VclFrameInfoEXT const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeH265VclFrameInfoEXT *>( this );
+ }
+
+ explicit operator VkVideoEncodeH265VclFrameInfoEXT &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeH265VclFrameInfoEXT *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * const &,
+ const StdVideoEncodeH265PictureInfo * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie(
+ sType, pNext, pReferenceFinalLists, naluSliceSegmentEntryCount, pNaluSliceSegmentEntries, pCurrentPictureInfo );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeH265VclFrameInfoEXT const & ) const = default;
+# else
+ bool operator==( VideoEncodeH265VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( pReferenceFinalLists == rhs.pReferenceFinalLists ) &&
+ ( naluSliceSegmentEntryCount == rhs.naluSliceSegmentEntryCount ) &&
+ ( pNaluSliceSegmentEntries == rhs.pNaluSliceSegmentEntries ) &&
+ ( pCurrentPictureInfo == rhs.pCurrentPictureInfo );
+# endif
+ }
+
+ bool operator!=( VideoEncodeH265VclFrameInfoEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeH265VclFrameInfoEXT;
+ const void * pNext = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265ReferenceListsEXT * pReferenceFinalLists = {};
+ uint32_t naluSliceSegmentEntryCount = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeH265NaluSliceSegmentEXT * pNaluSliceSegmentEntries = {};
+ const StdVideoEncodeH265PictureInfo * pCurrentPictureInfo = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT ) ==
+ sizeof( VkVideoEncodeH265VclFrameInfoEXT ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeH265VclFrameInfoEXT>::value,
+ "VideoEncodeH265VclFrameInfoEXT is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeH265VclFrameInfoEXT>
+ {
+ using Type = VideoEncodeH265VclFrameInfoEXT;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEncodeInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeInfoKHR;
+ using NativeType = VkVideoEncodeInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR VideoEncodeInfoKHR(
- VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ = {},
- uint32_t qualityLevel_ = {},
- VULKAN_HPP_NAMESPACE::Extent2D codedExtent_ = {},
- VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset_ = {},
- VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange_ = {},
- VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR srcPictureResource_ = {},
- const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ = {},
- uint32_t referenceSlotCount_ = {},
- const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ = {},
+ uint32_t qualityLevel_ = {},
+ VULKAN_HPP_NAMESPACE::Extent2D codedExtent_ = {},
+ VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset_ = {},
+ VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange_ = {},
+ VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR srcPictureResource_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ = {},
+ uint32_t referenceSlotCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ = {},
+ uint32_t precedingExternallyEncodedBytes_ = {} ) VULKAN_HPP_NOEXCEPT
: flags( flags_ )
, qualityLevel( qualityLevel_ )
, codedExtent( codedExtent_ )
@@ -71182,6 +98979,7 @@ namespace VULKAN_HPP_NAMESPACE
, pSetupReferenceSlot( pSetupReferenceSlot_ )
, referenceSlotCount( referenceSlotCount_ )
, pReferenceSlots( pReferenceSlots_ )
+ , precedingExternallyEncodedBytes( precedingExternallyEncodedBytes_ )
{}
VULKAN_HPP_CONSTEXPR VideoEncodeInfoKHR( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
@@ -71201,7 +98999,8 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR srcPictureResource_,
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_,
VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR> const &
- referenceSlots_ )
+ referenceSlots_,
+ uint32_t precedingExternallyEncodedBytes_ = {} )
: flags( flags_ )
, qualityLevel( qualityLevel_ )
, codedExtent( codedExtent_ )
@@ -71212,12 +99011,12 @@ namespace VULKAN_HPP_NAMESPACE
, pSetupReferenceSlot( pSetupReferenceSlot_ )
, referenceSlotCount( static_cast<uint32_t>( referenceSlots_.size() ) )
, pReferenceSlots( referenceSlots_.data() )
+ , precedingExternallyEncodedBytes( precedingExternallyEncodedBytes_ )
{}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
- operator=( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeInfoKHR & operator=( VideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEncodeInfoKHR & operator=( VkVideoEncodeInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71226,71 +99025,75 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoEncodeInfoKHR & setQualityLevel( uint32_t qualityLevel_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setQualityLevel( uint32_t qualityLevel_ ) VULKAN_HPP_NOEXCEPT
{
qualityLevel = qualityLevel_;
return *this;
}
- VideoEncodeInfoKHR & setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
+ setCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & codedExtent_ ) VULKAN_HPP_NOEXCEPT
{
codedExtent = codedExtent_;
return *this;
}
- VideoEncodeInfoKHR & setDstBitstreamBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
+ setDstBitstreamBuffer( VULKAN_HPP_NAMESPACE::Buffer dstBitstreamBuffer_ ) VULKAN_HPP_NOEXCEPT
{
dstBitstreamBuffer = dstBitstreamBuffer_;
return *this;
}
- VideoEncodeInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
setDstBitstreamBufferOffset( VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferOffset_ ) VULKAN_HPP_NOEXCEPT
{
dstBitstreamBufferOffset = dstBitstreamBufferOffset_;
return *this;
}
- VideoEncodeInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
setDstBitstreamBufferMaxRange( VULKAN_HPP_NAMESPACE::DeviceSize dstBitstreamBufferMaxRange_ ) VULKAN_HPP_NOEXCEPT
{
dstBitstreamBufferMaxRange = dstBitstreamBufferMaxRange_;
return *this;
}
- VideoEncodeInfoKHR & setSrcPictureResource(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setSrcPictureResource(
VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const & srcPictureResource_ ) VULKAN_HPP_NOEXCEPT
{
srcPictureResource = srcPictureResource_;
return *this;
}
- VideoEncodeInfoKHR & setPSetupReferenceSlot(
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR & setPSetupReferenceSlot(
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot_ ) VULKAN_HPP_NOEXCEPT
{
pSetupReferenceSlot = pSetupReferenceSlot_;
return *this;
}
- VideoEncodeInfoKHR & setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
+ setReferenceSlotCount( uint32_t referenceSlotCount_ ) VULKAN_HPP_NOEXCEPT
{
referenceSlotCount = referenceSlotCount_;
return *this;
}
- VideoEncodeInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
setPReferenceSlots( const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots_ ) VULKAN_HPP_NOEXCEPT
{
pReferenceSlots = pReferenceSlots_;
@@ -71307,30 +99110,78 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
-# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeInfoKHR &
+ setPrecedingExternallyEncodedBytes( uint32_t precedingExternallyEncodedBytes_ ) VULKAN_HPP_NOEXCEPT
+ {
+ precedingExternallyEncodedBytes = precedingExternallyEncodedBytes_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeInfoKHR *>( this );
}
- operator VkVideoEncodeInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeFlagsKHR const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Buffer const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::DeviceSize const &,
+ VULKAN_HPP_NAMESPACE::VideoPictureResourceKHR const &,
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ flags,
+ qualityLevel,
+ codedExtent,
+ dstBitstreamBuffer,
+ dstBitstreamBufferOffset,
+ dstBitstreamBufferMaxRange,
+ srcPictureResource,
+ pSetupReferenceSlot,
+ referenceSlotCount,
+ pReferenceSlots,
+ precedingExternallyEncodedBytes );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeInfoKHR const & ) const = default;
# else
bool operator==( VideoEncodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( qualityLevel == rhs.qualityLevel ) && ( codedExtent == rhs.codedExtent ) &&
( dstBitstreamBuffer == rhs.dstBitstreamBuffer ) &&
( dstBitstreamBufferOffset == rhs.dstBitstreamBufferOffset ) &&
( dstBitstreamBufferMaxRange == rhs.dstBitstreamBufferMaxRange ) &&
( srcPictureResource == rhs.srcPictureResource ) && ( pSetupReferenceSlot == rhs.pSetupReferenceSlot ) &&
- ( referenceSlotCount == rhs.referenceSlotCount ) && ( pReferenceSlots == rhs.pReferenceSlots );
+ ( referenceSlotCount == rhs.referenceSlotCount ) && ( pReferenceSlots == rhs.pReferenceSlots ) &&
+ ( precedingExternallyEncodedBytes == rhs.precedingExternallyEncodedBytes );
+# endif
}
bool operator!=( VideoEncodeInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71352,10 +99203,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pSetupReferenceSlot = {};
uint32_t referenceSlotCount = {};
const VULKAN_HPP_NAMESPACE::VideoReferenceSlotKHR * pReferenceSlots = {};
+ uint32_t precedingExternallyEncodedBytes = {};
};
- static_assert( sizeof( VideoEncodeInfoKHR ) == sizeof( VkVideoEncodeInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR ) == sizeof( VkVideoEncodeInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeInfoKHR>::value,
+ "VideoEncodeInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeInfoKHR>
@@ -71365,120 +99220,318 @@ namespace VULKAN_HPP_NAMESPACE
#endif /*VK_ENABLE_BETA_EXTENSIONS*/
#if defined( VK_ENABLE_BETA_EXTENSIONS )
- struct VideoEncodeRateControlInfoKHR
+ struct VideoEncodeRateControlLayerInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeRateControlInfoKHR;
+ using NativeType = VkVideoEncodeRateControlLayerInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
+ StructureType::eVideoEncodeRateControlLayerInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
- VideoEncodeRateControlInfoKHR( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ = {},
- VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ =
- VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eNone,
- uint32_t averageBitrate_ = {},
- uint16_t peakToAverageBitrateRatio_ = {},
- uint16_t frameRateNumerator_ = {},
- uint16_t frameRateDenominator_ = {},
- uint32_t virtualBufferSizeInMs_ = {} ) VULKAN_HPP_NOEXCEPT
- : flags( flags_ )
- , rateControlMode( rateControlMode_ )
- , averageBitrate( averageBitrate_ )
- , peakToAverageBitrateRatio( peakToAverageBitrateRatio_ )
+ VideoEncodeRateControlLayerInfoKHR( uint32_t averageBitrate_ = {},
+ uint32_t maxBitrate_ = {},
+ uint32_t frameRateNumerator_ = {},
+ uint32_t frameRateDenominator_ = {},
+ uint32_t virtualBufferSizeInMs_ = {},
+ uint32_t initialVirtualBufferSizeInMs_ = {} ) VULKAN_HPP_NOEXCEPT
+ : averageBitrate( averageBitrate_ )
+ , maxBitrate( maxBitrate_ )
, frameRateNumerator( frameRateNumerator_ )
, frameRateDenominator( frameRateDenominator_ )
, virtualBufferSizeInMs( virtualBufferSizeInMs_ )
+ , initialVirtualBufferSizeInMs( initialVirtualBufferSizeInMs_ )
{}
- VULKAN_HPP_CONSTEXPR
- VideoEncodeRateControlInfoKHR( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VULKAN_HPP_CONSTEXPR VideoEncodeRateControlLayerInfoKHR( VideoEncodeRateControlLayerInfoKHR const & rhs )
+ VULKAN_HPP_NOEXCEPT = default;
- VideoEncodeRateControlInfoKHR( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
- : VideoEncodeRateControlInfoKHR( *reinterpret_cast<VideoEncodeRateControlInfoKHR const *>( &rhs ) )
+ VideoEncodeRateControlLayerInfoKHR( VkVideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeRateControlLayerInfoKHR( *reinterpret_cast<VideoEncodeRateControlLayerInfoKHR const *>( &rhs ) )
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR &
- operator=( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEncodeRateControlLayerInfoKHR &
+ operator=( VideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- VideoEncodeRateControlInfoKHR & operator=( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ VideoEncodeRateControlLayerInfoKHR &
+ operator=( VkVideoEncodeRateControlLayerInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR const *>( &rhs );
return *this;
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEncodeRateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEncodeRateControlInfoKHR &
- setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR &
+ setAverageBitrate( uint32_t averageBitrate_ ) VULKAN_HPP_NOEXCEPT
{
- flags = flags_;
+ averageBitrate = averageBitrate_;
return *this;
}
- VideoEncodeRateControlInfoKHR & setRateControlMode(
- VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR &
+ setMaxBitrate( uint32_t maxBitrate_ ) VULKAN_HPP_NOEXCEPT
{
- rateControlMode = rateControlMode_;
+ maxBitrate = maxBitrate_;
return *this;
}
- VideoEncodeRateControlInfoKHR & setAverageBitrate( uint32_t averageBitrate_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR &
+ setFrameRateNumerator( uint32_t frameRateNumerator_ ) VULKAN_HPP_NOEXCEPT
{
- averageBitrate = averageBitrate_;
+ frameRateNumerator = frameRateNumerator_;
return *this;
}
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR &
+ setFrameRateDenominator( uint32_t frameRateDenominator_ ) VULKAN_HPP_NOEXCEPT
+ {
+ frameRateDenominator = frameRateDenominator_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR &
+ setVirtualBufferSizeInMs( uint32_t virtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT
+ {
+ virtualBufferSizeInMs = virtualBufferSizeInMs_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlLayerInfoKHR &
+ setInitialVirtualBufferSizeInMs( uint32_t initialVirtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT
+ {
+ initialVirtualBufferSizeInMs = initialVirtualBufferSizeInMs_;
+ return *this;
+ }
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeRateControlLayerInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<const VkVideoEncodeRateControlLayerInfoKHR *>( this );
+ }
+
+ explicit operator VkVideoEncodeRateControlLayerInfoKHR &() VULKAN_HPP_NOEXCEPT
+ {
+ return *reinterpret_cast<VkVideoEncodeRateControlLayerInfoKHR *>( this );
+ }
+
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ averageBitrate,
+ maxBitrate,
+ frameRateNumerator,
+ frameRateDenominator,
+ virtualBufferSizeInMs,
+ initialVirtualBufferSizeInMs );
+ }
+# endif
+
+# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
+ auto operator<=>( VideoEncodeRateControlLayerInfoKHR const & ) const = default;
+# else
+ bool operator==( VideoEncodeRateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
+ return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( averageBitrate == rhs.averageBitrate ) &&
+ ( maxBitrate == rhs.maxBitrate ) && ( frameRateNumerator == rhs.frameRateNumerator ) &&
+ ( frameRateDenominator == rhs.frameRateDenominator ) &&
+ ( virtualBufferSizeInMs == rhs.virtualBufferSizeInMs ) &&
+ ( initialVirtualBufferSizeInMs == rhs.initialVirtualBufferSizeInMs );
+# endif
+ }
+
+ bool operator!=( VideoEncodeRateControlLayerInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ return !operator==( rhs );
+ }
+# endif
+
+ public:
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eVideoEncodeRateControlLayerInfoKHR;
+ const void * pNext = {};
+ uint32_t averageBitrate = {};
+ uint32_t maxBitrate = {};
+ uint32_t frameRateNumerator = {};
+ uint32_t frameRateDenominator = {};
+ uint32_t virtualBufferSizeInMs = {};
+ uint32_t initialVirtualBufferSizeInMs = {};
+ };
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR ) ==
+ sizeof( VkVideoEncodeRateControlLayerInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR>::value,
+ "VideoEncodeRateControlLayerInfoKHR is not nothrow_move_constructible!" );
+
+ template <>
+ struct CppType<StructureType, StructureType::eVideoEncodeRateControlLayerInfoKHR>
+ {
+ using Type = VideoEncodeRateControlLayerInfoKHR;
+ };
+#endif /*VK_ENABLE_BETA_EXTENSIONS*/
+
+#if defined( VK_ENABLE_BETA_EXTENSIONS )
+ struct VideoEncodeRateControlInfoKHR
+ {
+ using NativeType = VkVideoEncodeRateControlInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEncodeRateControlInfoKHR;
+
+# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
+ VULKAN_HPP_CONSTEXPR VideoEncodeRateControlInfoKHR(
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ = {},
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ =
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eNone,
+ uint8_t layerCount_ = {},
+ const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayerConfigs_ = {} ) VULKAN_HPP_NOEXCEPT
+ : flags( flags_ )
+ , rateControlMode( rateControlMode_ )
+ , layerCount( layerCount_ )
+ , pLayerConfigs( pLayerConfigs_ )
+ {}
+
+ VULKAN_HPP_CONSTEXPR
+ VideoEncodeRateControlInfoKHR( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeRateControlInfoKHR( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
+ : VideoEncodeRateControlInfoKHR( *reinterpret_cast<VideoEncodeRateControlInfoKHR const *>( &rhs ) )
+ {}
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeRateControlInfoKHR(
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_,
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_,
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR> const & layerConfigs_ )
+ : flags( flags_ )
+ , rateControlMode( rateControlMode_ )
+ , layerCount( static_cast<uint8_t>( layerConfigs_.size() ) )
+ , pLayerConfigs( layerConfigs_.data() )
+ {}
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
+
VideoEncodeRateControlInfoKHR &
- setPeakToAverageBitrateRatio( uint16_t peakToAverageBitrateRatio_ ) VULKAN_HPP_NOEXCEPT
+ operator=( VideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+
+ VideoEncodeRateControlInfoKHR & operator=( VkVideoEncodeRateControlInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
- peakToAverageBitrateRatio = peakToAverageBitrateRatio_;
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR const *>( &rhs );
return *this;
}
- VideoEncodeRateControlInfoKHR & setFrameRateNumerator( uint16_t frameRateNumerator_ ) VULKAN_HPP_NOEXCEPT
+# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
- frameRateNumerator = frameRateNumerator_;
+ pNext = pNext_;
return *this;
}
- VideoEncodeRateControlInfoKHR & setFrameRateDenominator( uint16_t frameRateDenominator_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
- frameRateDenominator = frameRateDenominator_;
+ flags = flags_;
return *this;
}
- VideoEncodeRateControlInfoKHR & setVirtualBufferSizeInMs( uint32_t virtualBufferSizeInMs_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setRateControlMode(
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode_ ) VULKAN_HPP_NOEXCEPT
{
- virtualBufferSizeInMs = virtualBufferSizeInMs_;
+ rateControlMode = rateControlMode_;
return *this;
}
-# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEncodeRateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setLayerCount( uint8_t layerCount_ ) VULKAN_HPP_NOEXCEPT
+ {
+ layerCount = layerCount_;
+ return *this;
+ }
+
+ VULKAN_HPP_CONSTEXPR_14 VideoEncodeRateControlInfoKHR & setPLayerConfigs(
+ const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayerConfigs_ ) VULKAN_HPP_NOEXCEPT
+ {
+ pLayerConfigs = pLayerConfigs_;
+ return *this;
+ }
+
+# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
+ VideoEncodeRateControlInfoKHR & setLayerConfigs(
+ VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<
+ const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR> const & layerConfigs_ ) VULKAN_HPP_NOEXCEPT
+ {
+ layerCount = static_cast<uint8_t>( layerConfigs_.size() );
+ pLayerConfigs = layerConfigs_.data();
+ return *this;
+ }
+# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
+# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
+
+ explicit operator VkVideoEncodeRateControlInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEncodeRateControlInfoKHR *>( this );
}
- operator VkVideoEncodeRateControlInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEncodeRateControlInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEncodeRateControlInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR const &,
+ uint8_t const &,
+ const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, rateControlMode, layerCount, pLayerConfigs );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEncodeRateControlInfoKHR const & ) const = default;
# else
bool operator==( VideoEncodeRateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
- ( rateControlMode == rhs.rateControlMode ) && ( averageBitrate == rhs.averageBitrate ) &&
- ( peakToAverageBitrateRatio == rhs.peakToAverageBitrateRatio ) &&
- ( frameRateNumerator == rhs.frameRateNumerator ) && ( frameRateDenominator == rhs.frameRateDenominator ) &&
- ( virtualBufferSizeInMs == rhs.virtualBufferSizeInMs );
+ ( rateControlMode == rhs.rateControlMode ) && ( layerCount == rhs.layerCount ) &&
+ ( pLayerConfigs == rhs.pLayerConfigs );
+# endif
}
bool operator!=( VideoEncodeRateControlInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71493,16 +99546,17 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoEncodeRateControlFlagsKHR flags = {};
VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR rateControlMode =
VULKAN_HPP_NAMESPACE::VideoEncodeRateControlModeFlagBitsKHR::eNone;
- uint32_t averageBitrate = {};
- uint16_t peakToAverageBitrateRatio = {};
- uint16_t frameRateNumerator = {};
- uint16_t frameRateDenominator = {};
- uint32_t virtualBufferSizeInMs = {};
+ uint8_t layerCount = {};
+ const VULKAN_HPP_NAMESPACE::VideoEncodeRateControlLayerInfoKHR * pLayerConfigs = {};
};
- static_assert( sizeof( VideoEncodeRateControlInfoKHR ) == sizeof( VkVideoEncodeRateControlInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEncodeRateControlInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR ) ==
+ sizeof( VkVideoEncodeRateControlInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEncodeRateControlInfoKHR>::value,
+ "VideoEncodeRateControlInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEncodeRateControlInfoKHR>
@@ -71514,8 +99568,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoEndCodingInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEndCodingInfoKHR;
+ using NativeType = VkVideoEndCodingInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoEndCodingInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR
@@ -71530,8 +99586,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR &
- operator=( VideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoEndCodingInfoKHR & operator=( VideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoEndCodingInfoKHR & operator=( VkVideoEndCodingInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71540,35 +99595,54 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoEndCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoEndCodingInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoEndCodingInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoEndCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEndCodingInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoEndCodingInfoKHR *>( this );
}
- operator VkVideoEndCodingInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoEndCodingInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoEndCodingInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoEndCodingInfoKHR const & ) const = default;
# else
bool operator==( VideoEndCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags );
+# endif
}
bool operator!=( VideoEndCodingInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71582,9 +99656,12 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
VULKAN_HPP_NAMESPACE::VideoEndCodingFlagsKHR flags = {};
};
- static_assert( sizeof( VideoEndCodingInfoKHR ) == sizeof( VkVideoEndCodingInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoEndCodingInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR ) == sizeof( VkVideoEndCodingInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoEndCodingInfoKHR>::value,
+ "VideoEndCodingInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoEndCodingInfoKHR>
@@ -71596,8 +99673,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoFormatPropertiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatPropertiesKHR;
+ using NativeType = VkVideoFormatPropertiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoFormatPropertiesKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoFormatPropertiesKHR(
@@ -71612,8 +99691,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoFormatPropertiesKHR &
- operator=( VideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoFormatPropertiesKHR & operator=( VideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoFormatPropertiesKHR & operator=( VkVideoFormatPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71621,22 +99699,38 @@ namespace VULKAN_HPP_NAMESPACE
return *this;
}
- operator VkVideoFormatPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoFormatPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoFormatPropertiesKHR *>( this );
}
- operator VkVideoFormatPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoFormatPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoFormatPropertiesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, void * const &, VULKAN_HPP_NAMESPACE::Format const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, format );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoFormatPropertiesKHR const & ) const = default;
# else
bool operator==( VideoFormatPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( format == rhs.format );
+# endif
}
bool operator!=( VideoFormatPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71650,9 +99744,13 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::Format format = VULKAN_HPP_NAMESPACE::Format::eUndefined;
};
- static_assert( sizeof( VideoFormatPropertiesKHR ) == sizeof( VkVideoFormatPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoFormatPropertiesKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR ) ==
+ sizeof( VkVideoFormatPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoFormatPropertiesKHR>::value,
+ "VideoFormatPropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoFormatPropertiesKHR>
@@ -71664,8 +99762,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoGetMemoryPropertiesKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoGetMemoryPropertiesKHR;
+ using NativeType = VkVideoGetMemoryPropertiesKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoGetMemoryPropertiesKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoGetMemoryPropertiesKHR(
@@ -71683,8 +99783,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR &
- operator=( VideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoGetMemoryPropertiesKHR & operator=( VideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoGetMemoryPropertiesKHR & operator=( VkVideoGetMemoryPropertiesKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71693,19 +99792,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoGetMemoryPropertiesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoGetMemoryPropertiesKHR & setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR &
+ setMemoryBindIndex( uint32_t memoryBindIndex_ ) VULKAN_HPP_NOEXCEPT
{
memoryBindIndex = memoryBindIndex_;
return *this;
}
- VideoGetMemoryPropertiesKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoGetMemoryPropertiesKHR &
setPMemoryRequirements( VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements_ ) VULKAN_HPP_NOEXCEPT
{
pMemoryRequirements = pMemoryRequirements_;
@@ -71713,23 +99813,42 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoGetMemoryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoGetMemoryPropertiesKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoGetMemoryPropertiesKHR *>( this );
}
- operator VkVideoGetMemoryPropertiesKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoGetMemoryPropertiesKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoGetMemoryPropertiesKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::MemoryRequirements2 * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, memoryBindIndex, pMemoryRequirements );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoGetMemoryPropertiesKHR const & ) const = default;
# else
bool operator==( VideoGetMemoryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( memoryBindIndex == rhs.memoryBindIndex ) &&
( pMemoryRequirements == rhs.pMemoryRequirements );
+# endif
}
bool operator!=( VideoGetMemoryPropertiesKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71744,10 +99863,14 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t memoryBindIndex = {};
VULKAN_HPP_NAMESPACE::MemoryRequirements2 * pMemoryRequirements = {};
};
- static_assert( sizeof( VideoGetMemoryPropertiesKHR ) == sizeof( VkVideoGetMemoryPropertiesKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoGetMemoryPropertiesKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR ) ==
+ sizeof( VkVideoGetMemoryPropertiesKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoGetMemoryPropertiesKHR>::value,
+ "VideoGetMemoryPropertiesKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoGetMemoryPropertiesKHR>
@@ -71759,8 +99882,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoQueueFamilyProperties2KHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoQueueFamilyProperties2KHR;
+ using NativeType = VkVideoQueueFamilyProperties2KHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoQueueFamilyProperties2KHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoQueueFamilyProperties2KHR(
@@ -71776,8 +99901,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoQueueFamilyProperties2KHR &
- operator=( VideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoQueueFamilyProperties2KHR &
+ operator=( VideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoQueueFamilyProperties2KHR & operator=( VkVideoQueueFamilyProperties2KHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71786,13 +99911,13 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoQueueFamilyProperties2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoQueueFamilyProperties2KHR & setPNext( void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoQueueFamilyProperties2KHR & setVideoCodecOperations(
+ VULKAN_HPP_CONSTEXPR_14 VideoQueueFamilyProperties2KHR & setVideoCodecOperations(
VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations_ ) VULKAN_HPP_NOEXCEPT
{
videoCodecOperations = videoCodecOperations_;
@@ -71800,22 +99925,40 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoQueueFamilyProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoQueueFamilyProperties2KHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoQueueFamilyProperties2KHR *>( this );
}
- operator VkVideoQueueFamilyProperties2KHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoQueueFamilyProperties2KHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoQueueFamilyProperties2KHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ void * const &,
+ VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, videoCodecOperations );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoQueueFamilyProperties2KHR const & ) const = default;
# else
bool operator==( VideoQueueFamilyProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( videoCodecOperations == rhs.videoCodecOperations );
+# endif
}
bool operator!=( VideoQueueFamilyProperties2KHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71829,10 +99972,14 @@ namespace VULKAN_HPP_NAMESPACE
void * pNext = {};
VULKAN_HPP_NAMESPACE::VideoCodecOperationFlagsKHR videoCodecOperations = {};
};
- static_assert( sizeof( VideoQueueFamilyProperties2KHR ) == sizeof( VkVideoQueueFamilyProperties2KHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoQueueFamilyProperties2KHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoQueueFamilyProperties2KHR ) ==
+ sizeof( VkVideoQueueFamilyProperties2KHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoQueueFamilyProperties2KHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoQueueFamilyProperties2KHR>::value,
+ "VideoQueueFamilyProperties2KHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoQueueFamilyProperties2KHR>
@@ -71844,8 +99991,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoSessionCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionCreateInfoKHR;
+ using NativeType = VkVideoSessionCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eVideoSessionCreateInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR VideoSessionCreateInfoKHR(
@@ -71875,8 +100024,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
- operator=( VideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoSessionCreateInfoKHR & operator=( VideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoSessionCreateInfoKHR & operator=( VkVideoSessionCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -71885,59 +100033,62 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoSessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoSessionCreateInfoKHR & setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
+ setQueueFamilyIndex( uint32_t queueFamilyIndex_ ) VULKAN_HPP_NOEXCEPT
{
queueFamilyIndex = queueFamilyIndex_;
return *this;
}
- VideoSessionCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- VideoSessionCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
setPVideoProfile( const VULKAN_HPP_NAMESPACE::VideoProfileKHR * pVideoProfile_ ) VULKAN_HPP_NOEXCEPT
{
pVideoProfile = pVideoProfile_;
return *this;
}
- VideoSessionCreateInfoKHR & setPictureFormat( VULKAN_HPP_NAMESPACE::Format pictureFormat_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
+ setPictureFormat( VULKAN_HPP_NAMESPACE::Format pictureFormat_ ) VULKAN_HPP_NOEXCEPT
{
pictureFormat = pictureFormat_;
return *this;
}
- VideoSessionCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
setMaxCodedExtent( VULKAN_HPP_NAMESPACE::Extent2D const & maxCodedExtent_ ) VULKAN_HPP_NOEXCEPT
{
maxCodedExtent = maxCodedExtent_;
return *this;
}
- VideoSessionCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
setReferencePicturesFormat( VULKAN_HPP_NAMESPACE::Format referencePicturesFormat_ ) VULKAN_HPP_NOEXCEPT
{
referencePicturesFormat = referencePicturesFormat_;
return *this;
}
- VideoSessionCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
setMaxReferencePicturesSlotsCount( uint32_t maxReferencePicturesSlotsCount_ ) VULKAN_HPP_NOEXCEPT
{
maxReferencePicturesSlotsCount = maxReferencePicturesSlotsCount_;
return *this;
}
- VideoSessionCreateInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionCreateInfoKHR &
setMaxReferencePicturesActiveCount( uint32_t maxReferencePicturesActiveCount_ ) VULKAN_HPP_NOEXCEPT
{
maxReferencePicturesActiveCount = maxReferencePicturesActiveCount_;
@@ -71945,27 +100096,61 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoSessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoSessionCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoSessionCreateInfoKHR *>( this );
}
- operator VkVideoSessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoSessionCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoSessionCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::VideoSessionCreateFlagsKHR const &,
+ const VULKAN_HPP_NAMESPACE::VideoProfileKHR * const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ VULKAN_HPP_NAMESPACE::Extent2D const &,
+ VULKAN_HPP_NAMESPACE::Format const &,
+ uint32_t const &,
+ uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ queueFamilyIndex,
+ flags,
+ pVideoProfile,
+ pictureFormat,
+ maxCodedExtent,
+ referencePicturesFormat,
+ maxReferencePicturesSlotsCount,
+ maxReferencePicturesActiveCount );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoSessionCreateInfoKHR const & ) const = default;
# else
bool operator==( VideoSessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( queueFamilyIndex == rhs.queueFamilyIndex ) &&
( flags == rhs.flags ) && ( pVideoProfile == rhs.pVideoProfile ) &&
( pictureFormat == rhs.pictureFormat ) && ( maxCodedExtent == rhs.maxCodedExtent ) &&
( referencePicturesFormat == rhs.referencePicturesFormat ) &&
( maxReferencePicturesSlotsCount == rhs.maxReferencePicturesSlotsCount ) &&
( maxReferencePicturesActiveCount == rhs.maxReferencePicturesActiveCount );
+# endif
}
bool operator!=( VideoSessionCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -71986,10 +100171,13 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t maxReferencePicturesSlotsCount = {};
uint32_t maxReferencePicturesActiveCount = {};
};
- static_assert( sizeof( VideoSessionCreateInfoKHR ) == sizeof( VkVideoSessionCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoSessionCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR ) ==
+ sizeof( VkVideoSessionCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoSessionCreateInfoKHR>::value,
+ "VideoSessionCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoSessionCreateInfoKHR>
@@ -72001,7 +100189,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoSessionParametersCreateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoSessionParametersCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoSessionParametersCreateInfoKHR;
@@ -72021,8 +100211,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR &
- operator=( VideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoSessionParametersCreateInfoKHR &
+ operator=( VideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoSessionParametersCreateInfoKHR &
operator=( VkVideoSessionParametersCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -72032,45 +100222,64 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoSessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoSessionParametersCreateInfoKHR & setVideoSessionParametersTemplate(
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR & setVideoSessionParametersTemplate(
VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate_ ) VULKAN_HPP_NOEXCEPT
{
videoSessionParametersTemplate = videoSessionParametersTemplate_;
return *this;
}
- VideoSessionParametersCreateInfoKHR &
- setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersCreateInfoKHR &
+ setVideoSession( VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession_ ) VULKAN_HPP_NOEXCEPT
{
videoSession = videoSession_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoSessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoSessionParametersCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoSessionParametersCreateInfoKHR *>( this );
}
- operator VkVideoSessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoSessionParametersCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoSessionParametersCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR const &,
+ VULKAN_HPP_NAMESPACE::VideoSessionKHR const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, videoSessionParametersTemplate, videoSession );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoSessionParametersCreateInfoKHR const & ) const = default;
# else
bool operator==( VideoSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( videoSessionParametersTemplate == rhs.videoSessionParametersTemplate ) &&
( videoSession == rhs.videoSession );
+# endif
}
bool operator!=( VideoSessionParametersCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -72085,10 +100294,14 @@ namespace VULKAN_HPP_NAMESPACE
VULKAN_HPP_NAMESPACE::VideoSessionParametersKHR videoSessionParametersTemplate = {};
VULKAN_HPP_NAMESPACE::VideoSessionKHR videoSession = {};
};
- static_assert( sizeof( VideoSessionParametersCreateInfoKHR ) == sizeof( VkVideoSessionParametersCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoSessionParametersCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR ) ==
+ sizeof( VkVideoSessionParametersCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoSessionParametersCreateInfoKHR>::value,
+ "VideoSessionParametersCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoSessionParametersCreateInfoKHR>
@@ -72100,7 +100313,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_ENABLE_BETA_EXTENSIONS )
struct VideoSessionParametersUpdateInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkVideoSessionParametersUpdateInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eVideoSessionParametersUpdateInfoKHR;
@@ -72117,8 +100332,8 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR &
- operator=( VideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ VideoSessionParametersUpdateInfoKHR &
+ operator=( VideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
VideoSessionParametersUpdateInfoKHR &
operator=( VkVideoSessionParametersUpdateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -72128,35 +100343,52 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- VideoSessionParametersUpdateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- VideoSessionParametersUpdateInfoKHR & setUpdateSequenceCount( uint32_t updateSequenceCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 VideoSessionParametersUpdateInfoKHR &
+ setUpdateSequenceCount( uint32_t updateSequenceCount_ ) VULKAN_HPP_NOEXCEPT
{
updateSequenceCount = updateSequenceCount_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkVideoSessionParametersUpdateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoSessionParametersUpdateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkVideoSessionParametersUpdateInfoKHR *>( this );
}
- operator VkVideoSessionParametersUpdateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkVideoSessionParametersUpdateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkVideoSessionParametersUpdateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, updateSequenceCount );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( VideoSessionParametersUpdateInfoKHR const & ) const = default;
# else
bool operator==( VideoSessionParametersUpdateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( updateSequenceCount == rhs.updateSequenceCount );
+# endif
}
bool operator!=( VideoSessionParametersUpdateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -72170,10 +100402,14 @@ namespace VULKAN_HPP_NAMESPACE
const void * pNext = {};
uint32_t updateSequenceCount = {};
};
- static_assert( sizeof( VideoSessionParametersUpdateInfoKHR ) == sizeof( VkVideoSessionParametersUpdateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<VideoSessionParametersUpdateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR ) ==
+ sizeof( VkVideoSessionParametersUpdateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::VideoSessionParametersUpdateInfoKHR>::value,
+ "VideoSessionParametersUpdateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eVideoSessionParametersUpdateInfoKHR>
@@ -72185,8 +100421,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WAYLAND_KHR )
struct WaylandSurfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWaylandSurfaceCreateInfoKHR;
+ using NativeType = VkWaylandSurfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWaylandSurfaceCreateInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR WaylandSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ = {},
@@ -72205,8 +100443,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR &
- operator=( WaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ WaylandSurfaceCreateInfoKHR & operator=( WaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
WaylandSurfaceCreateInfoKHR & operator=( VkWaylandSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -72215,49 +100452,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- WaylandSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- WaylandSurfaceCreateInfoKHR &
- setFlags( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- WaylandSurfaceCreateInfoKHR & setDisplay( struct wl_display * display_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setDisplay( struct wl_display * display_ ) VULKAN_HPP_NOEXCEPT
{
display = display_;
return *this;
}
- WaylandSurfaceCreateInfoKHR & setSurface( struct wl_surface * surface_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WaylandSurfaceCreateInfoKHR & setSurface( struct wl_surface * surface_ ) VULKAN_HPP_NOEXCEPT
{
surface = surface_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWaylandSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWaylandSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWaylandSurfaceCreateInfoKHR *>( this );
}
- operator VkWaylandSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWaylandSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWaylandSurfaceCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateFlagsKHR const &,
+ struct wl_display * const &,
+ struct wl_surface * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, display, surface );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( WaylandSurfaceCreateInfoKHR const & ) const = default;
# else
bool operator==( WaylandSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( display == rhs.display ) &&
( surface == rhs.surface );
+# endif
}
bool operator!=( WaylandSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -72273,10 +100530,14 @@ namespace VULKAN_HPP_NAMESPACE
struct wl_display * display = {};
struct wl_surface * surface = {};
};
- static_assert( sizeof( WaylandSurfaceCreateInfoKHR ) == sizeof( VkWaylandSurfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<WaylandSurfaceCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR ) ==
+ sizeof( VkWaylandSurfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::WaylandSurfaceCreateInfoKHR>::value,
+ "WaylandSurfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWaylandSurfaceCreateInfoKHR>
@@ -72288,7 +100549,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct Win32KeyedMutexAcquireReleaseInfoKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkWin32KeyedMutexAcquireReleaseInfoKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR;
@@ -72372,8 +100635,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
- operator=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Win32KeyedMutexAcquireReleaseInfoKHR &
+ operator=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Win32KeyedMutexAcquireReleaseInfoKHR &
operator=( VkWin32KeyedMutexAcquireReleaseInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -72383,19 +100646,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Win32KeyedMutexAcquireReleaseInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- Win32KeyedMutexAcquireReleaseInfoKHR & setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
+ setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT
{
acquireCount = acquireCount_;
return *this;
}
- Win32KeyedMutexAcquireReleaseInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
setPAcquireSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ ) VULKAN_HPP_NOEXCEPT
{
pAcquireSyncs = pAcquireSyncs_;
@@ -72413,7 +100677,8 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoKHR & setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
+ setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT
{
pAcquireKeys = pAcquireKeys_;
return *this;
@@ -72429,7 +100694,8 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoKHR & setPAcquireTimeouts( const uint32_t * pAcquireTimeouts_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
+ setPAcquireTimeouts( const uint32_t * pAcquireTimeouts_ ) VULKAN_HPP_NOEXCEPT
{
pAcquireTimeouts = pAcquireTimeouts_;
return *this;
@@ -72445,13 +100711,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoKHR & setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
+ setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT
{
releaseCount = releaseCount_;
return *this;
}
- Win32KeyedMutexAcquireReleaseInfoKHR &
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
setPReleaseSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ ) VULKAN_HPP_NOEXCEPT
{
pReleaseSyncs = pReleaseSyncs_;
@@ -72469,7 +100736,8 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoKHR & setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoKHR &
+ setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT
{
pReleaseKeys = pReleaseKeys_;
return *this;
@@ -72486,25 +100754,57 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWin32KeyedMutexAcquireReleaseInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWin32KeyedMutexAcquireReleaseInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR *>( this );
}
- operator VkWin32KeyedMutexAcquireReleaseInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWin32KeyedMutexAcquireReleaseInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DeviceMemory * const &,
+ const uint64_t * const &,
+ const uint32_t * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DeviceMemory * const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ acquireCount,
+ pAcquireSyncs,
+ pAcquireKeys,
+ pAcquireTimeouts,
+ releaseCount,
+ pReleaseSyncs,
+ pReleaseKeys );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Win32KeyedMutexAcquireReleaseInfoKHR const & ) const = default;
# else
bool operator==( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireCount == rhs.acquireCount ) &&
( pAcquireSyncs == rhs.pAcquireSyncs ) && ( pAcquireKeys == rhs.pAcquireKeys ) &&
( pAcquireTimeouts == rhs.pAcquireTimeouts ) && ( releaseCount == rhs.releaseCount ) &&
( pReleaseSyncs == rhs.pReleaseSyncs ) && ( pReleaseKeys == rhs.pReleaseKeys );
+# endif
}
bool operator!=( Win32KeyedMutexAcquireReleaseInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -72524,10 +100824,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs = {};
const uint64_t * pReleaseKeys = {};
};
- static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoKHR ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Win32KeyedMutexAcquireReleaseInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR ) ==
+ sizeof( VkWin32KeyedMutexAcquireReleaseInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoKHR>::value,
+ "Win32KeyedMutexAcquireReleaseInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWin32KeyedMutexAcquireReleaseInfoKHR>
@@ -72539,7 +100843,9 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct Win32KeyedMutexAcquireReleaseInfoNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkWin32KeyedMutexAcquireReleaseInfoNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eWin32KeyedMutexAcquireReleaseInfoNV;
@@ -72623,8 +100929,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
- operator=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Win32KeyedMutexAcquireReleaseInfoNV &
+ operator=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Win32KeyedMutexAcquireReleaseInfoNV &
operator=( VkWin32KeyedMutexAcquireReleaseInfoNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -72634,19 +100940,20 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Win32KeyedMutexAcquireReleaseInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- Win32KeyedMutexAcquireReleaseInfoNV & setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
+ setAcquireCount( uint32_t acquireCount_ ) VULKAN_HPP_NOEXCEPT
{
acquireCount = acquireCount_;
return *this;
}
- Win32KeyedMutexAcquireReleaseInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
setPAcquireSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pAcquireSyncs_ ) VULKAN_HPP_NOEXCEPT
{
pAcquireSyncs = pAcquireSyncs_;
@@ -72664,7 +100971,8 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoNV & setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
+ setPAcquireKeys( const uint64_t * pAcquireKeys_ ) VULKAN_HPP_NOEXCEPT
{
pAcquireKeys = pAcquireKeys_;
return *this;
@@ -72680,7 +100988,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
setPAcquireTimeoutMilliseconds( const uint32_t * pAcquireTimeoutMilliseconds_ ) VULKAN_HPP_NOEXCEPT
{
pAcquireTimeoutMilliseconds = pAcquireTimeoutMilliseconds_;
@@ -72698,13 +101006,14 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoNV & setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
+ setReleaseCount( uint32_t releaseCount_ ) VULKAN_HPP_NOEXCEPT
{
releaseCount = releaseCount_;
return *this;
}
- Win32KeyedMutexAcquireReleaseInfoNV &
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
setPReleaseSyncs( const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs_ ) VULKAN_HPP_NOEXCEPT
{
pReleaseSyncs = pReleaseSyncs_;
@@ -72722,7 +101031,8 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- Win32KeyedMutexAcquireReleaseInfoNV & setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32KeyedMutexAcquireReleaseInfoNV &
+ setPReleaseKeys( const uint64_t * pReleaseKeys_ ) VULKAN_HPP_NOEXCEPT
{
pReleaseKeys = pReleaseKeys_;
return *this;
@@ -72739,26 +101049,58 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWin32KeyedMutexAcquireReleaseInfoNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWin32KeyedMutexAcquireReleaseInfoNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV *>( this );
}
- operator VkWin32KeyedMutexAcquireReleaseInfoNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWin32KeyedMutexAcquireReleaseInfoNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DeviceMemory * const &,
+ const uint64_t * const &,
+ const uint32_t * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::DeviceMemory * const &,
+ const uint64_t * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ acquireCount,
+ pAcquireSyncs,
+ pAcquireKeys,
+ pAcquireTimeoutMilliseconds,
+ releaseCount,
+ pReleaseSyncs,
+ pReleaseKeys );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Win32KeyedMutexAcquireReleaseInfoNV const & ) const = default;
# else
bool operator==( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( acquireCount == rhs.acquireCount ) &&
( pAcquireSyncs == rhs.pAcquireSyncs ) && ( pAcquireKeys == rhs.pAcquireKeys ) &&
( pAcquireTimeoutMilliseconds == rhs.pAcquireTimeoutMilliseconds ) &&
( releaseCount == rhs.releaseCount ) && ( pReleaseSyncs == rhs.pReleaseSyncs ) &&
( pReleaseKeys == rhs.pReleaseKeys );
+# endif
}
bool operator!=( Win32KeyedMutexAcquireReleaseInfoNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -72778,10 +101120,14 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::DeviceMemory * pReleaseSyncs = {};
const uint64_t * pReleaseKeys = {};
};
- static_assert( sizeof( Win32KeyedMutexAcquireReleaseInfoNV ) == sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Win32KeyedMutexAcquireReleaseInfoNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV ) ==
+ sizeof( VkWin32KeyedMutexAcquireReleaseInfoNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Win32KeyedMutexAcquireReleaseInfoNV>::value,
+ "Win32KeyedMutexAcquireReleaseInfoNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWin32KeyedMutexAcquireReleaseInfoNV>
@@ -72793,8 +101139,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_WIN32_KHR )
struct Win32SurfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32SurfaceCreateInfoKHR;
+ using NativeType = VkWin32SurfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWin32SurfaceCreateInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR Win32SurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ = {},
@@ -72813,8 +101161,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR &
- operator=( Win32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ Win32SurfaceCreateInfoKHR & operator=( Win32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
Win32SurfaceCreateInfoKHR & operator=( VkWin32SurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -72823,48 +101170,69 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- Win32SurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- Win32SurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- Win32SurfaceCreateInfoKHR & setHinstance( HINSTANCE hinstance_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setHinstance( HINSTANCE hinstance_ ) VULKAN_HPP_NOEXCEPT
{
hinstance = hinstance_;
return *this;
}
- Win32SurfaceCreateInfoKHR & setHwnd( HWND hwnd_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 Win32SurfaceCreateInfoKHR & setHwnd( HWND hwnd_ ) VULKAN_HPP_NOEXCEPT
{
hwnd = hwnd_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWin32SurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWin32SurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWin32SurfaceCreateInfoKHR *>( this );
}
- operator VkWin32SurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWin32SurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWin32SurfaceCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::Win32SurfaceCreateFlagsKHR const &,
+ HINSTANCE const &,
+ HWND const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, hinstance, hwnd );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( Win32SurfaceCreateInfoKHR const & ) const = default;
# else
bool operator==( Win32SurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
( hinstance == rhs.hinstance ) && ( hwnd == rhs.hwnd );
+# endif
}
bool operator!=( Win32SurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -72880,10 +101248,13 @@ namespace VULKAN_HPP_NAMESPACE
HINSTANCE hinstance = {};
HWND hwnd = {};
};
- static_assert( sizeof( Win32SurfaceCreateInfoKHR ) == sizeof( VkWin32SurfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<Win32SurfaceCreateInfoKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR ) ==
+ sizeof( VkWin32SurfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::Win32SurfaceCreateInfoKHR>::value,
+ "Win32SurfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWin32SurfaceCreateInfoKHR>
@@ -72894,8 +101265,10 @@ namespace VULKAN_HPP_NAMESPACE
struct WriteDescriptorSet
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSet;
+ using NativeType = VkWriteDescriptorSet;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eWriteDescriptorSet;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR WriteDescriptorSet(
@@ -72937,9 +101310,9 @@ namespace VULKAN_HPP_NAMESPACE
: dstSet( dstSet_ )
, dstBinding( dstBinding_ )
, dstArrayElement( dstArrayElement_ )
- , descriptorCount( static_cast<uint32_t>( !imageInfo_.empty() ? imageInfo_.size()
- : !bufferInfo_.empty() ? bufferInfo_.size()
- : texelBufferView_.size() ) )
+ , descriptorCount( static_cast<uint32_t>( !imageInfo_.empty() ? imageInfo_.size()
+ : !bufferInfo_.empty() ? bufferInfo_.size()
+ : texelBufferView_.size() ) )
, descriptorType( descriptorType_ )
, pImageInfo( imageInfo_.data() )
, pBufferInfo( bufferInfo_.data() )
@@ -72959,8 +101332,7 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet &
- operator=( WriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ WriteDescriptorSet & operator=( WriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT = default;
WriteDescriptorSet & operator=( VkWriteDescriptorSet const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -72969,43 +101341,45 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- WriteDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- WriteDescriptorSet & setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet &
+ setDstSet( VULKAN_HPP_NAMESPACE::DescriptorSet dstSet_ ) VULKAN_HPP_NOEXCEPT
{
dstSet = dstSet_;
return *this;
}
- WriteDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstBinding( uint32_t dstBinding_ ) VULKAN_HPP_NOEXCEPT
{
dstBinding = dstBinding_;
return *this;
}
- WriteDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDstArrayElement( uint32_t dstArrayElement_ ) VULKAN_HPP_NOEXCEPT
{
dstArrayElement = dstArrayElement_;
return *this;
}
- WriteDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet & setDescriptorCount( uint32_t descriptorCount_ ) VULKAN_HPP_NOEXCEPT
{
descriptorCount = descriptorCount_;
return *this;
}
- WriteDescriptorSet & setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet &
+ setDescriptorType( VULKAN_HPP_NAMESPACE::DescriptorType descriptorType_ ) VULKAN_HPP_NOEXCEPT
{
descriptorType = descriptorType_;
return *this;
}
- WriteDescriptorSet &
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet &
setPImageInfo( const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * pImageInfo_ ) VULKAN_HPP_NOEXCEPT
{
pImageInfo = pImageInfo_;
@@ -73023,7 +101397,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- WriteDescriptorSet &
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet &
setPBufferInfo( const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo_ ) VULKAN_HPP_NOEXCEPT
{
pBufferInfo = pBufferInfo_;
@@ -73041,7 +101415,7 @@ namespace VULKAN_HPP_NAMESPACE
}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
- WriteDescriptorSet &
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSet &
setPTexelBufferView( const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView_ ) VULKAN_HPP_NOEXCEPT
{
pTexelBufferView = pTexelBufferView_;
@@ -73060,26 +101434,60 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWriteDescriptorSet const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSet const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWriteDescriptorSet *>( this );
}
- operator VkWriteDescriptorSet &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSet &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWriteDescriptorSet *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::DescriptorSet const &,
+ uint32_t const &,
+ uint32_t const &,
+ uint32_t const &,
+ VULKAN_HPP_NAMESPACE::DescriptorType const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorImageInfo * const &,
+ const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * const &,
+ const VULKAN_HPP_NAMESPACE::BufferView * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType,
+ pNext,
+ dstSet,
+ dstBinding,
+ dstArrayElement,
+ descriptorCount,
+ descriptorType,
+ pImageInfo,
+ pBufferInfo,
+ pTexelBufferView );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( WriteDescriptorSet const & ) const = default;
#else
bool operator==( WriteDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dstSet == rhs.dstSet ) &&
( dstBinding == rhs.dstBinding ) && ( dstArrayElement == rhs.dstArrayElement ) &&
( descriptorCount == rhs.descriptorCount ) && ( descriptorType == rhs.descriptorType ) &&
( pImageInfo == rhs.pImageInfo ) && ( pBufferInfo == rhs.pBufferInfo ) &&
( pTexelBufferView == rhs.pTexelBufferView );
+# endif
}
bool operator!=( WriteDescriptorSet const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -73100,9 +101508,12 @@ namespace VULKAN_HPP_NAMESPACE
const VULKAN_HPP_NAMESPACE::DescriptorBufferInfo * pBufferInfo = {};
const VULKAN_HPP_NAMESPACE::BufferView * pTexelBufferView = {};
};
- static_assert( sizeof( WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<WriteDescriptorSet>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSet ) == sizeof( VkWriteDescriptorSet ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::WriteDescriptorSet>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::WriteDescriptorSet>::value,
+ "WriteDescriptorSet is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWriteDescriptorSet>
@@ -73112,7 +101523,9 @@ namespace VULKAN_HPP_NAMESPACE
struct WriteDescriptorSetAccelerationStructureKHR
{
- static const bool allowDuplicate = false;
+ using NativeType = VkWriteDescriptorSetAccelerationStructureKHR;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eWriteDescriptorSetAccelerationStructureKHR;
@@ -73143,8 +101556,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR &
- operator=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ WriteDescriptorSetAccelerationStructureKHR &
+ operator=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
WriteDescriptorSetAccelerationStructureKHR &
operator=( VkWriteDescriptorSetAccelerationStructureKHR const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -73154,20 +101567,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- WriteDescriptorSetAccelerationStructureKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- WriteDescriptorSetAccelerationStructureKHR &
- setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR &
+ setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureCount = accelerationStructureCount_;
return *this;
}
- WriteDescriptorSetAccelerationStructureKHR & setPAccelerationStructures(
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureKHR & setPAccelerationStructures(
const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT
{
pAccelerationStructures = pAccelerationStructures_;
@@ -73186,24 +101600,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWriteDescriptorSetAccelerationStructureKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSetAccelerationStructureKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR *>( this );
}
- operator VkWriteDescriptorSetAccelerationStructureKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSetAccelerationStructureKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWriteDescriptorSetAccelerationStructureKHR *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( WriteDescriptorSetAccelerationStructureKHR const & ) const = default;
#else
bool operator==( WriteDescriptorSetAccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( accelerationStructureCount == rhs.accelerationStructureCount ) &&
( pAccelerationStructures == rhs.pAccelerationStructures );
+# endif
}
bool operator!=( WriteDescriptorSetAccelerationStructureKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -73218,11 +101651,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t accelerationStructureCount = {};
const VULKAN_HPP_NAMESPACE::AccelerationStructureKHR * pAccelerationStructures = {};
};
- static_assert( sizeof( WriteDescriptorSetAccelerationStructureKHR ) ==
- sizeof( VkWriteDescriptorSetAccelerationStructureKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<WriteDescriptorSetAccelerationStructureKHR>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR ) ==
+ sizeof( VkWriteDescriptorSetAccelerationStructureKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureKHR>::value,
+ "WriteDescriptorSetAccelerationStructureKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWriteDescriptorSetAccelerationStructureKHR>
@@ -73232,7 +101669,9 @@ namespace VULKAN_HPP_NAMESPACE
struct WriteDescriptorSetAccelerationStructureNV
{
- static const bool allowDuplicate = false;
+ using NativeType = VkWriteDescriptorSetAccelerationStructureNV;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
StructureType::eWriteDescriptorSetAccelerationStructureNV;
@@ -73263,8 +101702,8 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV &
- operator=( WriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ WriteDescriptorSetAccelerationStructureNV &
+ operator=( WriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT = default;
WriteDescriptorSetAccelerationStructureNV &
operator=( VkWriteDescriptorSetAccelerationStructureNV const & rhs ) VULKAN_HPP_NOEXCEPT
@@ -73274,20 +101713,21 @@ namespace VULKAN_HPP_NAMESPACE
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- WriteDescriptorSetAccelerationStructureNV & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV &
+ setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- WriteDescriptorSetAccelerationStructureNV &
- setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV &
+ setAccelerationStructureCount( uint32_t accelerationStructureCount_ ) VULKAN_HPP_NOEXCEPT
{
accelerationStructureCount = accelerationStructureCount_;
return *this;
}
- WriteDescriptorSetAccelerationStructureNV & setPAccelerationStructures(
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetAccelerationStructureNV & setPAccelerationStructures(
const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures_ ) VULKAN_HPP_NOEXCEPT
{
pAccelerationStructures = pAccelerationStructures_;
@@ -73306,24 +101746,43 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWriteDescriptorSetAccelerationStructureNV const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSetAccelerationStructureNV const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV *>( this );
}
- operator VkWriteDescriptorSetAccelerationStructureNV &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSetAccelerationStructureNV &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkWriteDescriptorSetAccelerationStructureNV *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ uint32_t const &,
+ const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, accelerationStructureCount, pAccelerationStructures );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
auto operator<=>( WriteDescriptorSetAccelerationStructureNV const & ) const = default;
#else
bool operator==( WriteDescriptorSetAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) &&
( accelerationStructureCount == rhs.accelerationStructureCount ) &&
( pAccelerationStructures == rhs.pAccelerationStructures );
+# endif
}
bool operator!=( WriteDescriptorSetAccelerationStructureNV const & rhs ) const VULKAN_HPP_NOEXCEPT
@@ -73338,11 +101797,15 @@ namespace VULKAN_HPP_NAMESPACE
uint32_t accelerationStructureCount = {};
const VULKAN_HPP_NAMESPACE::AccelerationStructureNV * pAccelerationStructures = {};
};
- static_assert( sizeof( WriteDescriptorSetAccelerationStructureNV ) ==
- sizeof( VkWriteDescriptorSetAccelerationStructureNV ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<WriteDescriptorSetAccelerationStructureNV>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV ) ==
+ sizeof( VkWriteDescriptorSetAccelerationStructureNV ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_standard_layout<VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::WriteDescriptorSetAccelerationStructureNV>::value,
+ "WriteDescriptorSetAccelerationStructureNV is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eWriteDescriptorSetAccelerationStructureNV>
@@ -73350,59 +101813,60 @@ namespace VULKAN_HPP_NAMESPACE
using Type = WriteDescriptorSetAccelerationStructureNV;
};
- struct WriteDescriptorSetInlineUniformBlockEXT
+ struct WriteDescriptorSetInlineUniformBlock
{
- static const bool allowDuplicate = false;
+ using NativeType = VkWriteDescriptorSetInlineUniformBlock;
+
+ static const bool allowDuplicate = false;
static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType =
- StructureType::eWriteDescriptorSetInlineUniformBlockEXT;
+ StructureType::eWriteDescriptorSetInlineUniformBlock;
#if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
- VULKAN_HPP_CONSTEXPR WriteDescriptorSetInlineUniformBlockEXT( uint32_t dataSize_ = {},
- const void * pData_ = {} ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR WriteDescriptorSetInlineUniformBlock( uint32_t dataSize_ = {},
+ const void * pData_ = {} ) VULKAN_HPP_NOEXCEPT
: dataSize( dataSize_ )
, pData( pData_ )
{}
- VULKAN_HPP_CONSTEXPR WriteDescriptorSetInlineUniformBlockEXT( WriteDescriptorSetInlineUniformBlockEXT const & rhs )
+ VULKAN_HPP_CONSTEXPR WriteDescriptorSetInlineUniformBlock( WriteDescriptorSetInlineUniformBlock const & rhs )
VULKAN_HPP_NOEXCEPT = default;
- WriteDescriptorSetInlineUniformBlockEXT( VkWriteDescriptorSetInlineUniformBlockEXT const & rhs ) VULKAN_HPP_NOEXCEPT
- : WriteDescriptorSetInlineUniformBlockEXT(
- *reinterpret_cast<WriteDescriptorSetInlineUniformBlockEXT const *>( &rhs ) )
+ WriteDescriptorSetInlineUniformBlock( VkWriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT
+ : WriteDescriptorSetInlineUniformBlock( *reinterpret_cast<WriteDescriptorSetInlineUniformBlock const *>( &rhs ) )
{}
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
template <typename T>
- WriteDescriptorSetInlineUniformBlockEXT( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const T> const & data_ )
+ WriteDescriptorSetInlineUniformBlock( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const T> const & data_ )
: dataSize( static_cast<uint32_t>( data_.size() * sizeof( T ) ) ), pData( data_.data() )
{}
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlockEXT &
- operator=( WriteDescriptorSetInlineUniformBlockEXT const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ WriteDescriptorSetInlineUniformBlock &
+ operator=( WriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT = default;
- WriteDescriptorSetInlineUniformBlockEXT &
- operator=( VkWriteDescriptorSetInlineUniformBlockEXT const & rhs ) VULKAN_HPP_NOEXCEPT
+ WriteDescriptorSetInlineUniformBlock &
+ operator=( VkWriteDescriptorSetInlineUniformBlock const & rhs ) VULKAN_HPP_NOEXCEPT
{
- *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlockEXT const *>( &rhs );
+ *this = *reinterpret_cast<VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock const *>( &rhs );
return *this;
}
#if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- WriteDescriptorSetInlineUniformBlockEXT & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- WriteDescriptorSetInlineUniformBlockEXT & setDataSize( uint32_t dataSize_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setDataSize( uint32_t dataSize_ ) VULKAN_HPP_NOEXCEPT
{
dataSize = dataSize_;
return *this;
}
- WriteDescriptorSetInlineUniformBlockEXT & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 WriteDescriptorSetInlineUniformBlock & setPData( const void * pData_ ) VULKAN_HPP_NOEXCEPT
{
pData = pData_;
return *this;
@@ -73410,7 +101874,7 @@ namespace VULKAN_HPP_NAMESPACE
# if !defined( VULKAN_HPP_DISABLE_ENHANCED_MODE )
template <typename T>
- WriteDescriptorSetInlineUniformBlockEXT &
+ WriteDescriptorSetInlineUniformBlock &
setData( VULKAN_HPP_NAMESPACE::ArrayProxyNoTemporaries<const T> const & data_ ) VULKAN_HPP_NOEXCEPT
{
dataSize = static_cast<uint32_t>( data_.size() * sizeof( T ) );
@@ -73420,53 +101884,76 @@ namespace VULKAN_HPP_NAMESPACE
# endif /*VULKAN_HPP_DISABLE_ENHANCED_MODE*/
#endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkWriteDescriptorSetInlineUniformBlockEXT const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSetInlineUniformBlock const &() const VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT *>( this );
+ return *reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlock *>( this );
}
- operator VkWriteDescriptorSetInlineUniformBlockEXT &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkWriteDescriptorSetInlineUniformBlock &() VULKAN_HPP_NOEXCEPT
{
- return *reinterpret_cast<VkWriteDescriptorSetInlineUniformBlockEXT *>( this );
+ return *reinterpret_cast<VkWriteDescriptorSetInlineUniformBlock *>( this );
}
+#if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::
+ tuple<VULKAN_HPP_NAMESPACE::StructureType const &, const void * const &, uint32_t const &, const void * const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, dataSize, pData );
+ }
+#endif
+
#if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( WriteDescriptorSetInlineUniformBlockEXT const & ) const = default;
+ auto operator<=>( WriteDescriptorSetInlineUniformBlock const & ) const = default;
#else
- bool operator==( WriteDescriptorSetInlineUniformBlockEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator==( WriteDescriptorSetInlineUniformBlock const & rhs ) const VULKAN_HPP_NOEXCEPT
{
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+ return this->reflect() == rhs.reflect();
+# else
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( dataSize == rhs.dataSize ) && ( pData == rhs.pData );
+# endif
}
- bool operator!=( WriteDescriptorSetInlineUniformBlockEXT const & rhs ) const VULKAN_HPP_NOEXCEPT
+ bool operator!=( WriteDescriptorSetInlineUniformBlock const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return !operator==( rhs );
}
#endif
public:
- VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetInlineUniformBlockEXT;
+ VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eWriteDescriptorSetInlineUniformBlock;
const void * pNext = {};
uint32_t dataSize = {};
const void * pData = {};
};
- static_assert( sizeof( WriteDescriptorSetInlineUniformBlockEXT ) ==
- sizeof( VkWriteDescriptorSetInlineUniformBlockEXT ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<WriteDescriptorSetInlineUniformBlockEXT>::value,
- "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock ) ==
+ sizeof( VkWriteDescriptorSetInlineUniformBlock ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT(
+ std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::WriteDescriptorSetInlineUniformBlock>::value,
+ "WriteDescriptorSetInlineUniformBlock is not nothrow_move_constructible!" );
template <>
- struct CppType<StructureType, StructureType::eWriteDescriptorSetInlineUniformBlockEXT>
+ struct CppType<StructureType, StructureType::eWriteDescriptorSetInlineUniformBlock>
{
- using Type = WriteDescriptorSetInlineUniformBlockEXT;
+ using Type = WriteDescriptorSetInlineUniformBlock;
};
+ using WriteDescriptorSetInlineUniformBlockEXT = WriteDescriptorSetInlineUniformBlock;
#if defined( VK_USE_PLATFORM_XCB_KHR )
struct XcbSurfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXcbSurfaceCreateInfoKHR;
+ using NativeType = VkXcbSurfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXcbSurfaceCreateInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR XcbSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ = {},
@@ -73484,8 +101971,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR &
- operator=( XcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ XcbSurfaceCreateInfoKHR & operator=( XcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
XcbSurfaceCreateInfoKHR & operator=( VkXcbSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -73494,44 +101980,77 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- XcbSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- XcbSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- XcbSurfaceCreateInfoKHR & setConnection( xcb_connection_t * connection_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR &
+ setConnection( xcb_connection_t * connection_ ) VULKAN_HPP_NOEXCEPT
{
connection = connection_;
return *this;
}
- XcbSurfaceCreateInfoKHR & setWindow( xcb_window_t window_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XcbSurfaceCreateInfoKHR & setWindow( xcb_window_t window_ ) VULKAN_HPP_NOEXCEPT
{
window = window_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkXcbSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkXcbSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkXcbSurfaceCreateInfoKHR *>( this );
}
- operator VkXcbSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkXcbSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkXcbSurfaceCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::XcbSurfaceCreateFlagsKHR const &,
+ xcb_connection_t * const &,
+ xcb_window_t const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, connection, window );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( XcbSurfaceCreateInfoKHR const & ) const = default;
-# else
+ std::strong_ordering operator<=>( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = connection <=> rhs.connection; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &window, &rhs.window, sizeof( xcb_window_t ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( XcbSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) &&
@@ -73542,7 +102061,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eXcbSurfaceCreateInfoKHR;
@@ -73551,9 +102069,13 @@ namespace VULKAN_HPP_NAMESPACE
xcb_connection_t * connection = {};
xcb_window_t window = {};
};
- static_assert( sizeof( XcbSurfaceCreateInfoKHR ) == sizeof( VkXcbSurfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<XcbSurfaceCreateInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR ) ==
+ sizeof( VkXcbSurfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::XcbSurfaceCreateInfoKHR>::value,
+ "XcbSurfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eXcbSurfaceCreateInfoKHR>
@@ -73565,8 +102087,10 @@ namespace VULKAN_HPP_NAMESPACE
#if defined( VK_USE_PLATFORM_XLIB_KHR )
struct XlibSurfaceCreateInfoKHR
{
- static const bool allowDuplicate = false;
- static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXlibSurfaceCreateInfoKHR;
+ using NativeType = VkXlibSurfaceCreateInfoKHR;
+
+ static const bool allowDuplicate = false;
+ static VULKAN_HPP_CONST_OR_CONSTEXPR StructureType structureType = StructureType::eXlibSurfaceCreateInfoKHR;
# if !defined( VULKAN_HPP_NO_STRUCT_CONSTRUCTORS )
VULKAN_HPP_CONSTEXPR XlibSurfaceCreateInfoKHR( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ = {},
@@ -73584,8 +102108,7 @@ namespace VULKAN_HPP_NAMESPACE
{}
# endif /*VULKAN_HPP_NO_STRUCT_CONSTRUCTORS*/
- VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR &
- operator=( XlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
+ XlibSurfaceCreateInfoKHR & operator=( XlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT = default;
XlibSurfaceCreateInfoKHR & operator=( VkXlibSurfaceCreateInfoKHR const & rhs ) VULKAN_HPP_NOEXCEPT
{
@@ -73594,44 +102117,76 @@ namespace VULKAN_HPP_NAMESPACE
}
# if !defined( VULKAN_HPP_NO_STRUCT_SETTERS )
- XlibSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setPNext( const void * pNext_ ) VULKAN_HPP_NOEXCEPT
{
pNext = pNext_;
return *this;
}
- XlibSurfaceCreateInfoKHR & setFlags( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR &
+ setFlags( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR flags_ ) VULKAN_HPP_NOEXCEPT
{
flags = flags_;
return *this;
}
- XlibSurfaceCreateInfoKHR & setDpy( Display * dpy_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setDpy( Display * dpy_ ) VULKAN_HPP_NOEXCEPT
{
dpy = dpy_;
return *this;
}
- XlibSurfaceCreateInfoKHR & setWindow( Window window_ ) VULKAN_HPP_NOEXCEPT
+ VULKAN_HPP_CONSTEXPR_14 XlibSurfaceCreateInfoKHR & setWindow( Window window_ ) VULKAN_HPP_NOEXCEPT
{
window = window_;
return *this;
}
# endif /*VULKAN_HPP_NO_STRUCT_SETTERS*/
- operator VkXlibSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
+ explicit operator VkXlibSurfaceCreateInfoKHR const &() const VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<const VkXlibSurfaceCreateInfoKHR *>( this );
}
- operator VkXlibSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
+ explicit operator VkXlibSurfaceCreateInfoKHR &() VULKAN_HPP_NOEXCEPT
{
return *reinterpret_cast<VkXlibSurfaceCreateInfoKHR *>( this );
}
+# if !defined( __GNUC__ ) || ( 70500 < GCC_VERSION )
+# if 14 <= VULKAN_HPP_CPP_VERSION
+ auto
+# else
+ std::tuple<VULKAN_HPP_NAMESPACE::StructureType const &,
+ const void * const &,
+ VULKAN_HPP_NAMESPACE::XlibSurfaceCreateFlagsKHR const &,
+ Display * const &,
+ Window const &>
+# endif
+ reflect() const VULKAN_HPP_NOEXCEPT
+ {
+ return std::tie( sType, pNext, flags, dpy, window );
+ }
+# endif
+
# if defined( VULKAN_HPP_HAS_SPACESHIP_OPERATOR )
- auto operator<=>( XlibSurfaceCreateInfoKHR const & ) const = default;
-# else
+ std::strong_ordering operator<=>( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
+ {
+ if ( auto cmp = sType <=> rhs.sType; cmp != 0 )
+ return cmp;
+ if ( auto cmp = pNext <=> rhs.pNext; cmp != 0 )
+ return cmp;
+ if ( auto cmp = flags <=> rhs.flags; cmp != 0 )
+ return cmp;
+ if ( auto cmp = dpy <=> rhs.dpy; cmp != 0 )
+ return cmp;
+ if ( auto cmp = memcmp( &window, &rhs.window, sizeof( Window ) ); cmp != 0 )
+ return ( cmp < 0 ) ? std::strong_ordering::less : std::strong_ordering::greater;
+
+ return std::strong_ordering::equivalent;
+ }
+# endif
+
bool operator==( XlibSurfaceCreateInfoKHR const & rhs ) const VULKAN_HPP_NOEXCEPT
{
return ( sType == rhs.sType ) && ( pNext == rhs.pNext ) && ( flags == rhs.flags ) && ( dpy == rhs.dpy ) &&
@@ -73642,7 +102197,6 @@ namespace VULKAN_HPP_NAMESPACE
{
return !operator==( rhs );
}
-# endif
public:
VULKAN_HPP_NAMESPACE::StructureType sType = StructureType::eXlibSurfaceCreateInfoKHR;
@@ -73651,9 +102205,13 @@ namespace VULKAN_HPP_NAMESPACE
Display * dpy = {};
Window window = {};
};
- static_assert( sizeof( XlibSurfaceCreateInfoKHR ) == sizeof( VkXlibSurfaceCreateInfoKHR ),
- "struct and wrapper have different size!" );
- static_assert( std::is_standard_layout<XlibSurfaceCreateInfoKHR>::value, "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( sizeof( VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR ) ==
+ sizeof( VkXlibSurfaceCreateInfoKHR ),
+ "struct and wrapper have different size!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_standard_layout<VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR>::value,
+ "struct wrapper is not a standard layout!" );
+ VULKAN_HPP_STATIC_ASSERT( std::is_nothrow_move_constructible<VULKAN_HPP_NAMESPACE::XlibSurfaceCreateInfoKHR>::value,
+ "XlibSurfaceCreateInfoKHR is not nothrow_move_constructible!" );
template <>
struct CppType<StructureType, StructureType::eXlibSurfaceCreateInfoKHR>
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_vi.h b/thirdparty/vulkan/include/vulkan/vulkan_vi.h
index 9e0dcca200..0355e7a162 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_vi.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_vi.h
@@ -2,7 +2,7 @@
#define VULKAN_VI_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_wayland.h b/thirdparty/vulkan/include/vulkan/vulkan_wayland.h
index 2a329be9dd..9afd0b76d5 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_wayland.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_wayland.h
@@ -2,7 +2,7 @@
#define VULKAN_WAYLAND_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_win32.h b/thirdparty/vulkan/include/vulkan/vulkan_win32.h
index 1b680f0b1a..affe0c02ae 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_win32.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_win32.h
@@ -2,7 +2,7 @@
#define VULKAN_WIN32_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_xcb.h b/thirdparty/vulkan/include/vulkan/vulkan_xcb.h
index 5ba2ad850a..68e61b88f0 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_xcb.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_xcb.h
@@ -2,7 +2,7 @@
#define VULKAN_XCB_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_xlib.h b/thirdparty/vulkan/include/vulkan/vulkan_xlib.h
index 75c75dc2e3..ea5360ab64 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_xlib.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_xlib.h
@@ -2,7 +2,7 @@
#define VULKAN_XLIB_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h b/thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h
index fa27493422..8fc35cfc56 100644
--- a/thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h
+++ b/thirdparty/vulkan/include/vulkan/vulkan_xlib_xrandr.h
@@ -2,7 +2,7 @@
#define VULKAN_XLIB_XRANDR_H_ 1
/*
-** Copyright 2015-2021 The Khronos Group Inc.
+** Copyright 2015-2022 The Khronos Group Inc.
**
** SPDX-License-Identifier: Apache-2.0
*/
diff --git a/thirdparty/vulkan/patches/VMA-use-volk.patch b/thirdparty/vulkan/patches/VMA-use-volk.patch
index 81bfcccd89..1b6e0f04b8 100644
--- a/thirdparty/vulkan/patches/VMA-use-volk.patch
+++ b/thirdparty/vulkan/patches/VMA-use-volk.patch
@@ -1,9 +1,9 @@
diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
-index 65d6243419..9890f20f7c 100644
+index 52b403bede..7c450be211 100644
--- a/thirdparty/vulkan/vk_mem_alloc.h
+++ b/thirdparty/vulkan/vk_mem_alloc.h
-@@ -2063,7 +2063,11 @@ available through VmaAllocatorCreateInfo::pRecordSettings.
- #endif // #if defined(__ANDROID__) && VMA_STATIC_VULKAN_FUNCTIONS && VK_NO_PROTOTYPES
+@@ -127,7 +127,11 @@ extern "C" {
+ #endif
#ifndef VULKAN_H_
- #include <vulkan/vulkan.h>
diff --git a/thirdparty/vulkan/vk_enum_string_helper.h b/thirdparty/vulkan/vk_enum_string_helper.h
index 30bdcac16c..15241d7773 100644
--- a/thirdparty/vulkan/vk_enum_string_helper.h
+++ b/thirdparty/vulkan/vk_enum_string_helper.h
@@ -4,10 +4,10 @@
/***************************************************************************
*
- * Copyright (c) 2015-2021 The Khronos Group Inc.
- * Copyright (c) 2015-2021 Valve Corporation
- * Copyright (c) 2015-2021 LunarG, Inc.
- * Copyright (c) 2015-2021 Google Inc.
+ * Copyright (c) 2015-2022 The Khronos Group Inc.
+ * Copyright (c) 2015-2022 Valve Corporation
+ * Copyright (c) 2015-2022 LunarG, Inc.
+ * Copyright (c) 2015-2022 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -26,6 +26,7 @@
* Author: Tobin Ehlis <tobine@google.com>
* Author: Chris Forbes <chrisforbes@google.com>
* Author: John Zulauf<jzulauf@lunarg.com>
+ * Author: Tony Barbour <tony@lunarg.com>
*
****************************************************************************/
@@ -81,8 +82,8 @@ static inline const char* string_VkResult(VkResult input_value)
return "VK_ERROR_MEMORY_MAP_FAILED";
case VK_ERROR_NATIVE_WINDOW_IN_USE_KHR:
return "VK_ERROR_NATIVE_WINDOW_IN_USE_KHR";
- case VK_ERROR_NOT_PERMITTED_EXT:
- return "VK_ERROR_NOT_PERMITTED_EXT";
+ case VK_ERROR_NOT_PERMITTED_KHR:
+ return "VK_ERROR_NOT_PERMITTED_KHR";
case VK_ERROR_OUT_OF_DATE_KHR:
return "VK_ERROR_OUT_OF_DATE_KHR";
case VK_ERROR_OUT_OF_DEVICE_MEMORY:
@@ -111,8 +112,8 @@ static inline const char* string_VkResult(VkResult input_value)
return "VK_OPERATION_DEFERRED_KHR";
case VK_OPERATION_NOT_DEFERRED_KHR:
return "VK_OPERATION_NOT_DEFERRED_KHR";
- case VK_PIPELINE_COMPILE_REQUIRED_EXT:
- return "VK_PIPELINE_COMPILE_REQUIRED_EXT";
+ case VK_PIPELINE_COMPILE_REQUIRED:
+ return "VK_PIPELINE_COMPILE_REQUIRED";
case VK_SUBOPTIMAL_KHR:
return "VK_SUBOPTIMAL_KHR";
case VK_SUCCESS:
@@ -164,6 +165,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_ACQUIRE_NEXT_IMAGE_INFO_KHR";
case VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR:
return "VK_STRUCTURE_TYPE_ACQUIRE_PROFILING_LOCK_INFO_KHR";
+ case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID:
+ return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_2_ANDROID";
case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
return "VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID";
case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_PROPERTIES_ANDROID:
@@ -182,6 +185,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_2";
case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
return "VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT";
+ case VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD:
+ return "VK_STRUCTURE_TYPE_ATTACHMENT_SAMPLE_COUNT_INFO_AMD";
case VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV:
return "VK_STRUCTURE_TYPE_BIND_ACCELERATION_STRUCTURE_MEMORY_INFO_NV";
case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
@@ -198,22 +203,34 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO";
case VK_STRUCTURE_TYPE_BIND_SPARSE_INFO:
return "VK_STRUCTURE_TYPE_BIND_SPARSE_INFO";
- case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2_KHR";
- case VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR:
- return "VK_STRUCTURE_TYPE_BUFFER_COPY_2_KHR";
+ case VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2:
+ return "VK_STRUCTURE_TYPE_BLIT_IMAGE_INFO_2";
+ case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_BUFFER_CREATE_INFO_FUCHSIA";
+ case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CONSTRAINTS_INFO_FUCHSIA";
+ case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_CREATE_INFO_FUCHSIA";
+ case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_IMAGE_CREATE_INFO_FUCHSIA";
+ case VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_BUFFER_COLLECTION_PROPERTIES_FUCHSIA";
+ case VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_BUFFER_CONSTRAINTS_INFO_FUCHSIA";
+ case VK_STRUCTURE_TYPE_BUFFER_COPY_2:
+ return "VK_STRUCTURE_TYPE_BUFFER_COPY_2";
case VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO:
return "VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO";
case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO:
return "VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_INFO";
- case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR:
- return "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2_KHR";
+ case VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2:
+ return "VK_STRUCTURE_TYPE_BUFFER_IMAGE_COPY_2";
case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER:
return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER";
- case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR:
- return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2_KHR";
+ case VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2:
+ return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_BARRIER_2";
case VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2:
return "VK_STRUCTURE_TYPE_BUFFER_MEMORY_REQUIREMENTS_INFO_2";
case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
@@ -234,12 +251,14 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT";
case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO:
return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_INFO";
+ case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO:
+ return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDERING_INFO";
case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM";
case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV:
return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_VIEWPORT_SCISSOR_INFO_NV";
- case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR:
- return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO_KHR";
+ case VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO:
+ return "VK_STRUCTURE_TYPE_COMMAND_BUFFER_SUBMIT_INFO";
case VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO:
return "VK_STRUCTURE_TYPE_COMMAND_POOL_CREATE_INFO";
case VK_STRUCTURE_TYPE_COMPUTE_PIPELINE_CREATE_INFO:
@@ -252,18 +271,18 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_INFO_KHR";
case VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR:
return "VK_STRUCTURE_TYPE_COPY_ACCELERATION_STRUCTURE_TO_MEMORY_INFO_KHR";
- case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2_KHR";
- case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2_KHR";
+ case VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2:
+ return "VK_STRUCTURE_TYPE_COPY_BUFFER_INFO_2";
+ case VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2:
+ return "VK_STRUCTURE_TYPE_COPY_BUFFER_TO_IMAGE_INFO_2";
case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
return "VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM";
case VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET:
return "VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET";
- case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2_KHR";
- case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2_KHR";
+ case VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2:
+ return "VK_STRUCTURE_TYPE_COPY_IMAGE_INFO_2";
+ case VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2:
+ return "VK_STRUCTURE_TYPE_COPY_IMAGE_TO_BUFFER_INFO_2";
case VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR:
return "VK_STRUCTURE_TYPE_COPY_MEMORY_TO_ACCELERATION_STRUCTURE_INFO_KHR";
case VK_STRUCTURE_TYPE_CU_FUNCTION_CREATE_INFO_NVX:
@@ -298,12 +317,12 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV";
case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
return "VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV";
- case VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR:
- return "VK_STRUCTURE_TYPE_DEPENDENCY_INFO_KHR";
+ case VK_STRUCTURE_TYPE_DEPENDENCY_INFO:
+ return "VK_STRUCTURE_TYPE_DEPENDENCY_INFO";
case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO:
return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_CREATE_INFO";
- case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
- return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO:
+ return "VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO";
case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO:
return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO";
case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
@@ -318,6 +337,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT";
case VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_DESCRIPTOR_UPDATE_TEMPLATE_CREATE_INFO";
+ case VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS:
+ return "VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS";
case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO";
case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
@@ -342,18 +363,20 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO";
case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
return "VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR";
+ case VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS:
+ return "VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS";
case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO:
return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO";
case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD";
case VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT:
return "VK_STRUCTURE_TYPE_DEVICE_MEMORY_REPORT_CALLBACK_DATA_EXT";
- case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
- return "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO:
+ return "VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO";
case VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_CREATE_INFO";
- case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
- return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR:
+ return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_KHR";
case VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2:
return "VK_STRUCTURE_TYPE_DEVICE_QUEUE_INFO_2";
case VK_STRUCTURE_TYPE_DIRECTFB_SURFACE_CREATE_INFO_EXT:
@@ -380,6 +403,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_DISPLAY_PROPERTIES_2_KHR";
case VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR:
return "VK_STRUCTURE_TYPE_DISPLAY_SURFACE_CREATE_INFO_KHR";
+ case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT:
+ return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_2_EXT";
case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
return "VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT";
case VK_STRUCTURE_TYPE_EVENT_CREATE_INFO:
@@ -426,6 +451,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2:
return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_2";
+ case VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3:
+ return "VK_STRUCTURE_TYPE_FORMAT_PROPERTIES_3";
case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
return "VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR";
case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
@@ -458,10 +485,12 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_HEADLESS_SURFACE_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA:
return "VK_STRUCTURE_TYPE_IMAGEPIPE_SURFACE_CREATE_INFO_FUCHSIA";
- case VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR:
- return "VK_STRUCTURE_TYPE_IMAGE_BLIT_2_KHR";
- case VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR:
- return "VK_STRUCTURE_TYPE_IMAGE_COPY_2_KHR";
+ case VK_STRUCTURE_TYPE_IMAGE_BLIT_2:
+ return "VK_STRUCTURE_TYPE_IMAGE_BLIT_2";
+ case VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_IMAGE_CONSTRAINTS_INFO_FUCHSIA";
+ case VK_STRUCTURE_TYPE_IMAGE_COPY_2:
+ return "VK_STRUCTURE_TYPE_IMAGE_COPY_2";
case VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO";
case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
@@ -470,20 +499,22 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_CONSTRAINTS_INFO_FUCHSIA";
case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO";
case VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2:
return "VK_STRUCTURE_TYPE_IMAGE_FORMAT_PROPERTIES_2";
case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER:
return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER";
- case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR:
- return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2_KHR";
+ case VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2:
+ return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_BARRIER_2";
case VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2:
return "VK_STRUCTURE_TYPE_IMAGE_MEMORY_REQUIREMENTS_INFO_2";
case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
return "VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO";
- case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR:
- return "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2_KHR";
+ case VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2:
+ return "VK_STRUCTURE_TYPE_IMAGE_RESOLVE_2";
case VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2:
return "VK_STRUCTURE_TYPE_IMAGE_SPARSE_MEMORY_REQUIREMENTS_INFO_2";
case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
@@ -498,6 +529,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_IMAGE_VIEW_CREATE_INFO";
case VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX:
return "VK_STRUCTURE_TYPE_IMAGE_VIEW_HANDLE_INFO_NVX";
+ case VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_IMAGE_VIEW_MIN_LOD_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO";
case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
@@ -506,6 +539,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_IMPORT_FENCE_FD_INFO_KHR";
case VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR:
return "VK_STRUCTURE_TYPE_IMPORT_FENCE_WIN32_HANDLE_INFO_KHR";
+ case VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_BUFFER_COLLECTION_FUCHSIA";
case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
return "VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR";
case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
@@ -546,8 +581,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO";
case VK_STRUCTURE_TYPE_MEMORY_BARRIER:
return "VK_STRUCTURE_TYPE_MEMORY_BARRIER";
- case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR:
- return "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2_KHR";
+ case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2:
+ return "VK_STRUCTURE_TYPE_MEMORY_BARRIER_2";
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
return "VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO";
case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
@@ -580,6 +615,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_METAL_SURFACE_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_MULTISAMPLE_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX:
+ return "VK_STRUCTURE_TYPE_MULTIVIEW_PER_VIEW_ATTRIBUTES_INFO_NVX";
case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE:
return "VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_VALVE";
case VK_STRUCTURE_TYPE_PERFORMANCE_CONFIGURATION_ACQUIRE_INFO_INTEL:
@@ -612,6 +649,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BORDER_COLOR_SWIZZLE_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
@@ -640,6 +679,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_CONTROL_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
@@ -662,6 +703,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRM_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DYNAMIC_RENDERING_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_2_FEATURES_EXT:
@@ -690,6 +733,10 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_FEATURES_QCOM";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_OFFSET_PROPERTIES_QCOM";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
@@ -706,8 +753,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GLOBAL_PRIORITY_QUERY_FEATURES_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_GROUP_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
@@ -720,26 +767,34 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_FORMAT_INFO_2";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_MIN_LOD_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INHERITED_VIEWPORT_SCISSOR_FEATURES_NV";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INVOCATION_MASK_FEATURES_HUAWEI";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINEAR_COLOR_ATTACHMENT_FEATURES_NV";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_FEATURES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_4_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
@@ -762,14 +817,16 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTI_DRAW_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MUTABLE_DESCRIPTOR_TYPE_FEATURES_VALVE";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PAGEABLE_DEVICE_LOCAL_MEMORY_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
@@ -788,8 +845,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENT_WAIT_FEATURES_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIMITIVE_TOPOLOGY_LIST_RESTART_FEATURES_EXT";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
@@ -802,6 +859,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROVOKING_VERTEX_PROPERTIES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_FEATURES_ARM";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_MOTION_BLUR_FEATURES_NV:
@@ -814,6 +873,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RGBA10X6_FORMATS_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
@@ -840,8 +901,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
@@ -850,10 +911,10 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES_KHR";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES_KHR";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_FEATURES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_DOT_PRODUCT_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
@@ -864,8 +925,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_UNIFORM_CONTROL_FLOW_FEATURES_KHR";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
@@ -874,30 +935,30 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SPARSE_IMAGE_FORMAT_INFO_2";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_FEATURES_HUAWEI";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBPASS_SHADING_PROPERTIES_HUAWEI";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SURFACE_INFO_2_KHR";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES_KHR";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SYNCHRONIZATION_2_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TOOL_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
@@ -924,6 +985,10 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_FEATURES";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_3_PROPERTIES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_WORKGROUP_MEMORY_EXPLICIT_LAYOUT_FEATURES_KHR:
@@ -932,8 +997,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_2_PLANE_444_FORMATS_FEATURES_EXT";
case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT";
- case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR:
- return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES_KHR";
+ case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES:
+ return "VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ZERO_INITIALIZE_WORKGROUP_MEMORY_FEATURES";
case VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_PIPELINE_CACHE_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
@@ -950,8 +1015,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV";
case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
return "VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV";
- case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
- return "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO:
+ return "VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_PIPELINE_DEPTH_STENCIL_STATE_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
@@ -994,14 +1059,16 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD";
case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
return "VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO:
+ return "VK_STRUCTURE_TYPE_PIPELINE_RENDERING_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
return "VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV";
case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
return "VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_CREATE_INFO";
- case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
- return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO:
+ return "VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_STATE_CREATE_INFO:
@@ -1012,6 +1079,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_STATE_CREATE_INFO";
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV";
+ case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_DEPTH_CLIP_CONTROL_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
return "VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV";
case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
@@ -1032,8 +1101,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR";
case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
return "VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE";
- case VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT:
- return "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO_EXT";
+ case VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO:
+ return "VK_STRUCTURE_TYPE_PRIVATE_DATA_SLOT_CREATE_INFO";
case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
return "VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO";
case VK_STRUCTURE_TYPE_QUERY_POOL_CREATE_INFO:
@@ -1046,10 +1115,14 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_2_NV";
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV";
- case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT:
- return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_EXT";
+ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR:
+ return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_GLOBAL_PRIORITY_PROPERTIES_KHR";
case VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2:
return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_PROPERTIES_2";
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR:
+ return "VK_STRUCTURE_TYPE_QUEUE_FAMILY_QUERY_RESULT_STATUS_PROPERTIES_2_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR:
return "VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_KHR";
case VK_STRUCTURE_TYPE_RAY_TRACING_PIPELINE_CREATE_INFO_NV:
@@ -1060,6 +1133,14 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_KHR";
case VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV:
return "VK_STRUCTURE_TYPE_RAY_TRACING_SHADER_GROUP_CREATE_INFO_NV";
+ case VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO:
+ return "VK_STRUCTURE_TYPE_RENDERING_ATTACHMENT_INFO";
+ case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_INFO_EXT";
+ case VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
+ return "VK_STRUCTURE_TYPE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR";
+ case VK_STRUCTURE_TYPE_RENDERING_INFO:
+ return "VK_STRUCTURE_TYPE_RENDERING_INFO";
case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
return "VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO";
case VK_STRUCTURE_TYPE_RENDER_PASS_BEGIN_INFO:
@@ -1078,8 +1159,10 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT";
case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
return "VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM";
- case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2_KHR";
+ case VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2:
+ return "VK_STRUCTURE_TYPE_RESOLVE_IMAGE_INFO_2";
+ case VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_SAMPLER_BORDER_COLOR_COMPONENT_MAPPING_CREATE_INFO_EXT";
case VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO:
return "VK_STRUCTURE_TYPE_SAMPLER_CREATE_INFO";
case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
@@ -1106,8 +1189,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_SEMAPHORE_GET_ZIRCON_HANDLE_INFO_FUCHSIA";
case VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO:
return "VK_STRUCTURE_TYPE_SEMAPHORE_SIGNAL_INFO";
- case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR:
- return "VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO_KHR";
+ case VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO:
+ return "VK_STRUCTURE_TYPE_SEMAPHORE_SUBMIT_INFO";
case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
return "VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO";
case VK_STRUCTURE_TYPE_SEMAPHORE_WAIT_INFO:
@@ -1126,8 +1209,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_STREAM_DESCRIPTOR_SURFACE_CREATE_INFO_GGP";
case VK_STRUCTURE_TYPE_SUBMIT_INFO:
return "VK_STRUCTURE_TYPE_SUBMIT_INFO";
- case VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR:
- return "VK_STRUCTURE_TYPE_SUBMIT_INFO_2_KHR";
+ case VK_STRUCTURE_TYPE_SUBMIT_INFO_2:
+ return "VK_STRUCTURE_TYPE_SUBMIT_INFO_2";
case VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO:
return "VK_STRUCTURE_TYPE_SUBPASS_BEGIN_INFO";
case VK_STRUCTURE_TYPE_SUBPASS_DEPENDENCY_2:
@@ -1138,6 +1221,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE";
case VK_STRUCTURE_TYPE_SUBPASS_END_INFO:
return "VK_STRUCTURE_TYPE_SUBPASS_END_INFO";
+ case VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM:
+ return "VK_STRUCTURE_TYPE_SUBPASS_FRAGMENT_DENSITY_MAP_OFFSET_END_INFO_QCOM";
case VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI:
return "VK_STRUCTURE_TYPE_SUBPASS_SHADING_PIPELINE_CREATE_INFO_HUAWEI";
case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_2_EXT:
@@ -1160,6 +1245,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_SWAPCHAIN_CREATE_INFO_KHR";
case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
return "VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD";
+ case VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA:
+ return "VK_STRUCTURE_TYPE_SYSMEM_COLOR_SPACE_FUCHSIA";
case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
return "VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD";
case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
@@ -1275,6 +1362,14 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_PROFILE_EXT";
#endif // VK_ENABLE_BETA_EXTENSIONS
#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_RATE_CONTROL_LAYER_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT:
return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_SESSION_CREATE_INFO_EXT";
#endif // VK_ENABLE_BETA_EXTENSIONS
@@ -1291,6 +1386,54 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H264_VCL_FRAME_INFO_EXT";
#endif // VK_ENABLE_BETA_EXTENSIONS
#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_CAPABILITIES_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_DPB_SLOT_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_EMIT_PICTURE_PARAMETERS_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_NALU_SLICE_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_PROFILE_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_RATE_CONTROL_LAYER_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_REFERENCE_LISTS_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_CREATE_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_ADD_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_SESSION_PARAMETERS_CREATE_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_H265_VCL_FRAME_INFO_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR:
return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_INFO_KHR";
#endif // VK_ENABLE_BETA_EXTENSIONS
@@ -1299,6 +1442,10 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_INFO_KHR";
#endif // VK_ENABLE_BETA_EXTENSIONS
#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR:
+ return "VK_STRUCTURE_TYPE_VIDEO_ENCODE_RATE_CONTROL_LAYER_INFO_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR:
return "VK_STRUCTURE_TYPE_VIDEO_END_CODING_INFO_KHR";
#endif // VK_ENABLE_BETA_EXTENSIONS
@@ -1358,8 +1505,8 @@ static inline const char* string_VkStructureType(VkStructureType input_value)
return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR";
case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV";
- case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
- return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT";
+ case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK:
+ return "VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK";
case VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR:
return "VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR";
case VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR:
@@ -1411,8 +1558,8 @@ static inline const char* string_VkAccessFlagBits(VkAccessFlagBits input_value)
return "VK_ACCESS_MEMORY_READ_BIT";
case VK_ACCESS_MEMORY_WRITE_BIT:
return "VK_ACCESS_MEMORY_WRITE_BIT";
- case VK_ACCESS_NONE_KHR:
- return "VK_ACCESS_NONE_KHR";
+ case VK_ACCESS_NONE:
+ return "VK_ACCESS_NONE";
case VK_ACCESS_SHADER_READ_BIT:
return "VK_ACCESS_SHADER_READ_BIT";
case VK_ACCESS_SHADER_WRITE_BIT:
@@ -1456,8 +1603,8 @@ static inline const char* string_VkImageLayout(VkImageLayout input_value)
{
switch (input_value)
{
- case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR:
- return "VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL_KHR";
+ case VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL:
+ return "VK_IMAGE_LAYOUT_ATTACHMENT_OPTIMAL";
case VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL:
return "VK_IMAGE_LAYOUT_COLOR_ATTACHMENT_OPTIMAL";
case VK_IMAGE_LAYOUT_DEPTH_ATTACHMENT_OPTIMAL:
@@ -1482,8 +1629,8 @@ static inline const char* string_VkImageLayout(VkImageLayout input_value)
return "VK_IMAGE_LAYOUT_PREINITIALIZED";
case VK_IMAGE_LAYOUT_PRESENT_SRC_KHR:
return "VK_IMAGE_LAYOUT_PRESENT_SRC_KHR";
- case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR:
- return "VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL_KHR";
+ case VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL:
+ return "VK_IMAGE_LAYOUT_READ_ONLY_OPTIMAL";
case VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL:
return "VK_IMAGE_LAYOUT_SHADER_READ_ONLY_OPTIMAL";
case VK_IMAGE_LAYOUT_SHARED_PRESENT_KHR:
@@ -1545,6 +1692,8 @@ static inline const char* string_VkImageAspectFlagBits(VkImageAspectFlagBits inp
return "VK_IMAGE_ASPECT_MEMORY_PLANE_3_BIT_EXT";
case VK_IMAGE_ASPECT_METADATA_BIT:
return "VK_IMAGE_ASPECT_METADATA_BIT";
+ case VK_IMAGE_ASPECT_NONE_KHR:
+ return "VK_IMAGE_ASPECT_NONE_KHR";
case VK_IMAGE_ASPECT_PLANE_0_BIT:
return "VK_IMAGE_ASPECT_PLANE_0_BIT";
case VK_IMAGE_ASPECT_PLANE_1_BIT:
@@ -1584,6 +1733,8 @@ static inline const char* string_VkObjectType(VkObjectType input_value)
return "VK_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV";
case VK_OBJECT_TYPE_BUFFER:
return "VK_OBJECT_TYPE_BUFFER";
+ case VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA:
+ return "VK_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA";
case VK_OBJECT_TYPE_BUFFER_VIEW:
return "VK_OBJECT_TYPE_BUFFER_VIEW";
case VK_OBJECT_TYPE_COMMAND_BUFFER:
@@ -1640,8 +1791,8 @@ static inline const char* string_VkObjectType(VkObjectType input_value)
return "VK_OBJECT_TYPE_PIPELINE_CACHE";
case VK_OBJECT_TYPE_PIPELINE_LAYOUT:
return "VK_OBJECT_TYPE_PIPELINE_LAYOUT";
- case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT:
- return "VK_OBJECT_TYPE_PRIVATE_DATA_SLOT_EXT";
+ case VK_OBJECT_TYPE_PRIVATE_DATA_SLOT:
+ return "VK_OBJECT_TYPE_PRIVATE_DATA_SLOT";
case VK_OBJECT_TYPE_QUERY_POOL:
return "VK_OBJECT_TYPE_QUERY_POOL";
case VK_OBJECT_TYPE_QUEUE:
@@ -1769,10 +1920,10 @@ static inline const char* string_VkFormat(VkFormat input_value)
return "VK_FORMAT_A2R10G10B10_UNORM_PACK32";
case VK_FORMAT_A2R10G10B10_USCALED_PACK32:
return "VK_FORMAT_A2R10G10B10_USCALED_PACK32";
- case VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT:
- return "VK_FORMAT_A4B4G4R4_UNORM_PACK16_EXT";
- case VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT:
- return "VK_FORMAT_A4R4G4B4_UNORM_PACK16_EXT";
+ case VK_FORMAT_A4B4G4R4_UNORM_PACK16:
+ return "VK_FORMAT_A4B4G4R4_UNORM_PACK16";
+ case VK_FORMAT_A4R4G4B4_UNORM_PACK16:
+ return "VK_FORMAT_A4R4G4B4_UNORM_PACK16";
case VK_FORMAT_A8B8G8R8_SINT_PACK32:
return "VK_FORMAT_A8B8G8R8_SINT_PACK32";
case VK_FORMAT_A8B8G8R8_SNORM_PACK32:
@@ -1787,86 +1938,86 @@ static inline const char* string_VkFormat(VkFormat input_value)
return "VK_FORMAT_A8B8G8R8_UNORM_PACK32";
case VK_FORMAT_A8B8G8R8_USCALED_PACK32:
return "VK_FORMAT_A8B8G8R8_USCALED_PACK32";
- case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_10x10_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_10x10_SRGB_BLOCK:
return "VK_FORMAT_ASTC_10x10_SRGB_BLOCK";
case VK_FORMAT_ASTC_10x10_UNORM_BLOCK:
return "VK_FORMAT_ASTC_10x10_UNORM_BLOCK";
- case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_10x5_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_10x5_SRGB_BLOCK:
return "VK_FORMAT_ASTC_10x5_SRGB_BLOCK";
case VK_FORMAT_ASTC_10x5_UNORM_BLOCK:
return "VK_FORMAT_ASTC_10x5_UNORM_BLOCK";
- case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_10x6_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_10x6_SRGB_BLOCK:
return "VK_FORMAT_ASTC_10x6_SRGB_BLOCK";
case VK_FORMAT_ASTC_10x6_UNORM_BLOCK:
return "VK_FORMAT_ASTC_10x6_UNORM_BLOCK";
- case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_10x8_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_10x8_SRGB_BLOCK:
return "VK_FORMAT_ASTC_10x8_SRGB_BLOCK";
case VK_FORMAT_ASTC_10x8_UNORM_BLOCK:
return "VK_FORMAT_ASTC_10x8_UNORM_BLOCK";
- case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_12x10_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_12x10_SRGB_BLOCK:
return "VK_FORMAT_ASTC_12x10_SRGB_BLOCK";
case VK_FORMAT_ASTC_12x10_UNORM_BLOCK:
return "VK_FORMAT_ASTC_12x10_UNORM_BLOCK";
- case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_12x12_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_12x12_SRGB_BLOCK:
return "VK_FORMAT_ASTC_12x12_SRGB_BLOCK";
case VK_FORMAT_ASTC_12x12_UNORM_BLOCK:
return "VK_FORMAT_ASTC_12x12_UNORM_BLOCK";
- case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_4x4_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_4x4_SRGB_BLOCK:
return "VK_FORMAT_ASTC_4x4_SRGB_BLOCK";
case VK_FORMAT_ASTC_4x4_UNORM_BLOCK:
return "VK_FORMAT_ASTC_4x4_UNORM_BLOCK";
- case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_5x4_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_5x4_SRGB_BLOCK:
return "VK_FORMAT_ASTC_5x4_SRGB_BLOCK";
case VK_FORMAT_ASTC_5x4_UNORM_BLOCK:
return "VK_FORMAT_ASTC_5x4_UNORM_BLOCK";
- case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_5x5_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_5x5_SRGB_BLOCK:
return "VK_FORMAT_ASTC_5x5_SRGB_BLOCK";
case VK_FORMAT_ASTC_5x5_UNORM_BLOCK:
return "VK_FORMAT_ASTC_5x5_UNORM_BLOCK";
- case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_6x5_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_6x5_SRGB_BLOCK:
return "VK_FORMAT_ASTC_6x5_SRGB_BLOCK";
case VK_FORMAT_ASTC_6x5_UNORM_BLOCK:
return "VK_FORMAT_ASTC_6x5_UNORM_BLOCK";
- case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_6x6_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_6x6_SRGB_BLOCK:
return "VK_FORMAT_ASTC_6x6_SRGB_BLOCK";
case VK_FORMAT_ASTC_6x6_UNORM_BLOCK:
return "VK_FORMAT_ASTC_6x6_UNORM_BLOCK";
- case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_8x5_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_8x5_SRGB_BLOCK:
return "VK_FORMAT_ASTC_8x5_SRGB_BLOCK";
case VK_FORMAT_ASTC_8x5_UNORM_BLOCK:
return "VK_FORMAT_ASTC_8x5_UNORM_BLOCK";
- case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_8x6_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_8x6_SRGB_BLOCK:
return "VK_FORMAT_ASTC_8x6_SRGB_BLOCK";
case VK_FORMAT_ASTC_8x6_UNORM_BLOCK:
return "VK_FORMAT_ASTC_8x6_UNORM_BLOCK";
- case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT:
- return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK_EXT";
+ case VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK:
+ return "VK_FORMAT_ASTC_8x8_SFLOAT_BLOCK";
case VK_FORMAT_ASTC_8x8_SRGB_BLOCK:
return "VK_FORMAT_ASTC_8x8_SRGB_BLOCK";
case VK_FORMAT_ASTC_8x8_UNORM_BLOCK:
@@ -1985,8 +2136,8 @@ static inline const char* string_VkFormat(VkFormat input_value)
return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_420_UNORM_3PACK16";
case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16:
return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_422_UNORM_3PACK16";
- case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT:
- return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16_EXT";
+ case VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16:
+ return "VK_FORMAT_G10X6_B10X6R10X6_2PLANE_444_UNORM_3PACK16";
case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16:
return "VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_420_UNORM_3PACK16";
case VK_FORMAT_G10X6_B10X6_R10X6_3PLANE_422_UNORM_3PACK16:
@@ -1999,8 +2150,8 @@ static inline const char* string_VkFormat(VkFormat input_value)
return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_420_UNORM_3PACK16";
case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16:
return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_422_UNORM_3PACK16";
- case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT:
- return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16_EXT";
+ case VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16:
+ return "VK_FORMAT_G12X4_B12X4R12X4_2PLANE_444_UNORM_3PACK16";
case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16:
return "VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_420_UNORM_3PACK16";
case VK_FORMAT_G12X4_B12X4_R12X4_3PLANE_422_UNORM_3PACK16:
@@ -2013,8 +2164,8 @@ static inline const char* string_VkFormat(VkFormat input_value)
return "VK_FORMAT_G16_B16R16_2PLANE_420_UNORM";
case VK_FORMAT_G16_B16R16_2PLANE_422_UNORM:
return "VK_FORMAT_G16_B16R16_2PLANE_422_UNORM";
- case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT:
- return "VK_FORMAT_G16_B16R16_2PLANE_444_UNORM_EXT";
+ case VK_FORMAT_G16_B16R16_2PLANE_444_UNORM:
+ return "VK_FORMAT_G16_B16R16_2PLANE_444_UNORM";
case VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM:
return "VK_FORMAT_G16_B16_R16_3PLANE_420_UNORM";
case VK_FORMAT_G16_B16_R16_3PLANE_422_UNORM:
@@ -2027,8 +2178,8 @@ static inline const char* string_VkFormat(VkFormat input_value)
return "VK_FORMAT_G8_B8R8_2PLANE_420_UNORM";
case VK_FORMAT_G8_B8R8_2PLANE_422_UNORM:
return "VK_FORMAT_G8_B8R8_2PLANE_422_UNORM";
- case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT:
- return "VK_FORMAT_G8_B8R8_2PLANE_444_UNORM_EXT";
+ case VK_FORMAT_G8_B8R8_2PLANE_444_UNORM:
+ return "VK_FORMAT_G8_B8R8_2PLANE_444_UNORM";
case VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM:
return "VK_FORMAT_G8_B8_R8_3PLANE_420_UNORM";
case VK_FORMAT_G8_B8_R8_3PLANE_422_UNORM:
@@ -2355,6 +2506,8 @@ static inline const char* string_VkImageCreateFlagBits(VkImageCreateFlagBits inp
return "VK_IMAGE_CREATE_DISJOINT_BIT";
case VK_IMAGE_CREATE_EXTENDED_USAGE_BIT:
return "VK_IMAGE_CREATE_EXTENDED_USAGE_BIT";
+ case VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM:
+ return "VK_IMAGE_CREATE_FRAGMENT_DENSITY_MAP_OFFSET_BIT_QCOM";
case VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT:
return "VK_IMAGE_CREATE_MUTABLE_FORMAT_BIT";
case VK_IMAGE_CREATE_PROTECTED_BIT:
@@ -2731,8 +2884,8 @@ static inline const char* string_VkPipelineStageFlagBits(VkPipelineStageFlagBits
return "VK_PIPELINE_STAGE_LATE_FRAGMENT_TESTS_BIT";
case VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV:
return "VK_PIPELINE_STAGE_MESH_SHADER_BIT_NV";
- case VK_PIPELINE_STAGE_NONE_KHR:
- return "VK_PIPELINE_STAGE_NONE_KHR";
+ case VK_PIPELINE_STAGE_NONE:
+ return "VK_PIPELINE_STAGE_NONE";
case VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR:
return "VK_PIPELINE_STAGE_RAY_TRACING_SHADER_BIT_KHR";
case VK_PIPELINE_STAGE_TASK_SHADER_BIT_NV:
@@ -2861,8 +3014,8 @@ static inline const char* string_VkEventCreateFlagBits(VkEventCreateFlagBits inp
{
switch (input_value)
{
- case VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR:
- return "VK_EVENT_CREATE_DEVICE_ONLY_BIT_KHR";
+ case VK_EVENT_CREATE_DEVICE_ONLY_BIT:
+ return "VK_EVENT_CREATE_DEVICE_ONLY_BIT";
default:
return "Unhandled VkEventCreateFlagBits";
}
@@ -3203,8 +3356,8 @@ static inline const char* string_VkPipelineCacheCreateFlagBits(VkPipelineCacheCr
{
switch (input_value)
{
- case VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT:
- return "VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT_EXT";
+ case VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT:
+ return "VK_PIPELINE_CACHE_CREATE_EXTERNALLY_SYNCHRONIZED_BIT";
default:
return "Unhandled VkPipelineCacheCreateFlagBits";
}
@@ -3460,10 +3613,10 @@ static inline const char* string_VkPipelineCreateFlagBits(VkPipelineCreateFlagBi
return "VK_PIPELINE_CREATE_DISABLE_OPTIMIZATION_BIT";
case VK_PIPELINE_CREATE_DISPATCH_BASE_BIT:
return "VK_PIPELINE_CREATE_DISPATCH_BASE_BIT";
- case VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT:
- return "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT_EXT";
- case VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT:
- return "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT_EXT";
+ case VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT:
+ return "VK_PIPELINE_CREATE_EARLY_RETURN_ON_FAILURE_BIT";
+ case VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT:
+ return "VK_PIPELINE_CREATE_FAIL_ON_PIPELINE_COMPILE_REQUIRED_BIT";
case VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV:
return "VK_PIPELINE_CREATE_INDIRECT_BINDABLE_BIT_NV";
case VK_PIPELINE_CREATE_LIBRARY_BIT_KHR:
@@ -3484,6 +3637,10 @@ static inline const char* string_VkPipelineCreateFlagBits(VkPipelineCreateFlagBi
return "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_AABBS_BIT_KHR";
case VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR:
return "VK_PIPELINE_CREATE_RAY_TRACING_SKIP_TRIANGLES_BIT_KHR";
+ case VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT:
+ return "VK_PIPELINE_CREATE_RENDERING_FRAGMENT_DENSITY_MAP_ATTACHMENT_BIT_EXT";
+ case VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR:
+ return "VK_PIPELINE_CREATE_RENDERING_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR";
case VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT:
return "VK_PIPELINE_CREATE_VIEW_INDEX_FROM_DEVICE_INDEX_BIT";
default:
@@ -3511,10 +3668,10 @@ static inline const char* string_VkPipelineShaderStageCreateFlagBits(VkPipelineS
{
switch (input_value)
{
- case VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT:
- return "VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT_EXT";
- case VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT:
- return "VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT_EXT";
+ case VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT:
+ return "VK_PIPELINE_SHADER_STAGE_CREATE_ALLOW_VARYING_SUBGROUP_SIZE_BIT";
+ case VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT:
+ return "VK_PIPELINE_SHADER_STAGE_CREATE_REQUIRE_FULL_SUBGROUPS_BIT";
default:
return "Unhandled VkPipelineShaderStageCreateFlagBits";
}
@@ -3636,30 +3793,30 @@ static inline const char* string_VkDynamicState(VkDynamicState input_value)
return "VK_DYNAMIC_STATE_BLEND_CONSTANTS";
case VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT:
return "VK_DYNAMIC_STATE_COLOR_WRITE_ENABLE_EXT";
- case VK_DYNAMIC_STATE_CULL_MODE_EXT:
- return "VK_DYNAMIC_STATE_CULL_MODE_EXT";
+ case VK_DYNAMIC_STATE_CULL_MODE:
+ return "VK_DYNAMIC_STATE_CULL_MODE";
case VK_DYNAMIC_STATE_DEPTH_BIAS:
return "VK_DYNAMIC_STATE_DEPTH_BIAS";
- case VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE_EXT";
+ case VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE:
+ return "VK_DYNAMIC_STATE_DEPTH_BIAS_ENABLE";
case VK_DYNAMIC_STATE_DEPTH_BOUNDS:
return "VK_DYNAMIC_STATE_DEPTH_BOUNDS";
- case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE_EXT";
- case VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT:
- return "VK_DYNAMIC_STATE_DEPTH_COMPARE_OP_EXT";
- case VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE_EXT";
- case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE_EXT";
+ case VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE:
+ return "VK_DYNAMIC_STATE_DEPTH_BOUNDS_TEST_ENABLE";
+ case VK_DYNAMIC_STATE_DEPTH_COMPARE_OP:
+ return "VK_DYNAMIC_STATE_DEPTH_COMPARE_OP";
+ case VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE:
+ return "VK_DYNAMIC_STATE_DEPTH_TEST_ENABLE";
+ case VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE:
+ return "VK_DYNAMIC_STATE_DEPTH_WRITE_ENABLE";
case VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT:
return "VK_DYNAMIC_STATE_DISCARD_RECTANGLE_EXT";
case VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV:
return "VK_DYNAMIC_STATE_EXCLUSIVE_SCISSOR_NV";
case VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR:
return "VK_DYNAMIC_STATE_FRAGMENT_SHADING_RATE_KHR";
- case VK_DYNAMIC_STATE_FRONT_FACE_EXT:
- return "VK_DYNAMIC_STATE_FRONT_FACE_EXT";
+ case VK_DYNAMIC_STATE_FRONT_FACE:
+ return "VK_DYNAMIC_STATE_FRONT_FACE";
case VK_DYNAMIC_STATE_LINE_STIPPLE_EXT:
return "VK_DYNAMIC_STATE_LINE_STIPPLE_EXT";
case VK_DYNAMIC_STATE_LINE_WIDTH:
@@ -3668,32 +3825,32 @@ static inline const char* string_VkDynamicState(VkDynamicState input_value)
return "VK_DYNAMIC_STATE_LOGIC_OP_EXT";
case VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT:
return "VK_DYNAMIC_STATE_PATCH_CONTROL_POINTS_EXT";
- case VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE_EXT";
- case VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT:
- return "VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY_EXT";
- case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE_EXT";
+ case VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE:
+ return "VK_DYNAMIC_STATE_PRIMITIVE_RESTART_ENABLE";
+ case VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY:
+ return "VK_DYNAMIC_STATE_PRIMITIVE_TOPOLOGY";
+ case VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE:
+ return "VK_DYNAMIC_STATE_RASTERIZER_DISCARD_ENABLE";
case VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR:
return "VK_DYNAMIC_STATE_RAY_TRACING_PIPELINE_STACK_SIZE_KHR";
case VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT:
return "VK_DYNAMIC_STATE_SAMPLE_LOCATIONS_EXT";
case VK_DYNAMIC_STATE_SCISSOR:
return "VK_DYNAMIC_STATE_SCISSOR";
- case VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT:
- return "VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT_EXT";
+ case VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT:
+ return "VK_DYNAMIC_STATE_SCISSOR_WITH_COUNT";
case VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK:
return "VK_DYNAMIC_STATE_STENCIL_COMPARE_MASK";
- case VK_DYNAMIC_STATE_STENCIL_OP_EXT:
- return "VK_DYNAMIC_STATE_STENCIL_OP_EXT";
+ case VK_DYNAMIC_STATE_STENCIL_OP:
+ return "VK_DYNAMIC_STATE_STENCIL_OP";
case VK_DYNAMIC_STATE_STENCIL_REFERENCE:
return "VK_DYNAMIC_STATE_STENCIL_REFERENCE";
- case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT:
- return "VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE_EXT";
+ case VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE:
+ return "VK_DYNAMIC_STATE_STENCIL_TEST_ENABLE";
case VK_DYNAMIC_STATE_STENCIL_WRITE_MASK:
return "VK_DYNAMIC_STATE_STENCIL_WRITE_MASK";
- case VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT:
- return "VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE_EXT";
+ case VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE:
+ return "VK_DYNAMIC_STATE_VERTEX_INPUT_BINDING_STRIDE";
case VK_DYNAMIC_STATE_VERTEX_INPUT_EXT:
return "VK_DYNAMIC_STATE_VERTEX_INPUT_EXT";
case VK_DYNAMIC_STATE_VIEWPORT:
@@ -3702,8 +3859,8 @@ static inline const char* string_VkDynamicState(VkDynamicState input_value)
return "VK_DYNAMIC_STATE_VIEWPORT_COARSE_SAMPLE_ORDER_NV";
case VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV:
return "VK_DYNAMIC_STATE_VIEWPORT_SHADING_RATE_PALETTE_NV";
- case VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT:
- return "VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT_EXT";
+ case VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT:
+ return "VK_DYNAMIC_STATE_VIEWPORT_WITH_COUNT";
case VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV:
return "VK_DYNAMIC_STATE_VIEWPORT_W_SCALING_NV";
default:
@@ -3785,6 +3942,35 @@ static inline const char* string_VkPolygonMode(VkPolygonMode input_value)
}
}
+static inline const char* string_VkPipelineDepthStencilStateCreateFlagBits(VkPipelineDepthStencilStateCreateFlagBits input_value)
+{
+ switch (input_value)
+ {
+ case VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM:
+ return "VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM";
+ case VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM:
+ return "VK_PIPELINE_DEPTH_STENCIL_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM";
+ default:
+ return "Unhandled VkPipelineDepthStencilStateCreateFlagBits";
+ }
+}
+
+static inline std::string string_VkPipelineDepthStencilStateCreateFlags(VkPipelineDepthStencilStateCreateFlags input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkPipelineDepthStencilStateCreateFlagBits(static_cast<VkPipelineDepthStencilStateCreateFlagBits>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkPipelineDepthStencilStateCreateFlagBits(static_cast<VkPipelineDepthStencilStateCreateFlagBits>(0)));
+ return ret;
+}
+
static inline const char* string_VkStencilOp(VkStencilOp input_value)
{
switch (input_value)
@@ -3810,6 +3996,33 @@ static inline const char* string_VkStencilOp(VkStencilOp input_value)
}
}
+static inline const char* string_VkPipelineColorBlendStateCreateFlagBits(VkPipelineColorBlendStateCreateFlagBits input_value)
+{
+ switch (input_value)
+ {
+ case VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM:
+ return "VK_PIPELINE_COLOR_BLEND_STATE_CREATE_RASTERIZATION_ORDER_ATTACHMENT_ACCESS_BIT_ARM";
+ default:
+ return "Unhandled VkPipelineColorBlendStateCreateFlagBits";
+ }
+}
+
+static inline std::string string_VkPipelineColorBlendStateCreateFlags(VkPipelineColorBlendStateCreateFlags input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkPipelineColorBlendStateCreateFlagBits(static_cast<VkPipelineColorBlendStateCreateFlagBits>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkPipelineColorBlendStateCreateFlagBits(static_cast<VkPipelineColorBlendStateCreateFlagBits>(0)));
+ return ret;
+}
+
static inline const char* string_VkLogicOp(VkLogicOp input_value)
{
switch (input_value)
@@ -3993,8 +4206,8 @@ static inline const char* string_VkDescriptorType(VkDescriptorType input_value)
return "VK_DESCRIPTOR_TYPE_ACCELERATION_STRUCTURE_NV";
case VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER:
return "VK_DESCRIPTOR_TYPE_COMBINED_IMAGE_SAMPLER";
- case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT:
- return "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK_EXT";
+ case VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK:
+ return "VK_DESCRIPTOR_TYPE_INLINE_UNIFORM_BLOCK";
case VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT:
return "VK_DESCRIPTOR_TYPE_INPUT_ATTACHMENT";
case VK_DESCRIPTOR_TYPE_MUTABLE_VALVE:
@@ -4103,8 +4316,8 @@ static inline const char* string_VkAttachmentStoreOp(VkAttachmentStoreOp input_v
{
case VK_ATTACHMENT_STORE_OP_DONT_CARE:
return "VK_ATTACHMENT_STORE_OP_DONT_CARE";
- case VK_ATTACHMENT_STORE_OP_NONE_EXT:
- return "VK_ATTACHMENT_STORE_OP_NONE_EXT";
+ case VK_ATTACHMENT_STORE_OP_NONE:
+ return "VK_ATTACHMENT_STORE_OP_NONE";
case VK_ATTACHMENT_STORE_OP_STORE:
return "VK_ATTACHMENT_STORE_OP_STORE";
default:
@@ -4224,6 +4437,12 @@ static inline const char* string_VkSubpassDescriptionFlagBits(VkSubpassDescripti
return "VK_SUBPASS_DESCRIPTION_PER_VIEW_ATTRIBUTES_BIT_NVX";
case VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX:
return "VK_SUBPASS_DESCRIPTION_PER_VIEW_POSITION_X_ONLY_BIT_NVX";
+ case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM:
+ return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_COLOR_ACCESS_BIT_ARM";
+ case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM:
+ return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_DEPTH_ACCESS_BIT_ARM";
+ case VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM:
+ return "VK_SUBPASS_DESCRIPTION_RASTERIZATION_ORDER_ATTACHMENT_STENCIL_ACCESS_BIT_ARM";
case VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM:
return "VK_SUBPASS_DESCRIPTION_SHADER_RESOLVE_BIT_QCOM";
default:
@@ -4947,14 +5166,24 @@ static inline const char* string_VkDriverId(VkDriverId input_value)
return "VK_DRIVER_ID_JUICE_PROPRIETARY";
case VK_DRIVER_ID_MESA_LLVMPIPE:
return "VK_DRIVER_ID_MESA_LLVMPIPE";
+ case VK_DRIVER_ID_MESA_PANVK:
+ return "VK_DRIVER_ID_MESA_PANVK";
case VK_DRIVER_ID_MESA_RADV:
return "VK_DRIVER_ID_MESA_RADV";
+ case VK_DRIVER_ID_MESA_TURNIP:
+ return "VK_DRIVER_ID_MESA_TURNIP";
+ case VK_DRIVER_ID_MESA_V3DV:
+ return "VK_DRIVER_ID_MESA_V3DV";
+ case VK_DRIVER_ID_MESA_VENUS:
+ return "VK_DRIVER_ID_MESA_VENUS";
case VK_DRIVER_ID_MOLTENVK:
return "VK_DRIVER_ID_MOLTENVK";
case VK_DRIVER_ID_NVIDIA_PROPRIETARY:
return "VK_DRIVER_ID_NVIDIA_PROPRIETARY";
case VK_DRIVER_ID_QUALCOMM_PROPRIETARY:
return "VK_DRIVER_ID_QUALCOMM_PROPRIETARY";
+ case VK_DRIVER_ID_SAMSUNG_PROPRIETARY:
+ return "VK_DRIVER_ID_SAMSUNG_PROPRIETARY";
case VK_DRIVER_ID_VERISILICON_PROPRIETARY:
return "VK_DRIVER_ID_VERISILICON_PROPRIETARY";
default:
@@ -5100,6 +5329,449 @@ static inline std::string string_VkSemaphoreWaitFlags(VkSemaphoreWaitFlags input
return ret;
}
+static inline const char* string_VkPipelineCreationFeedbackFlagBits(VkPipelineCreationFeedbackFlagBits input_value)
+{
+ switch (input_value)
+ {
+ case VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT:
+ return "VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT";
+ case VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT:
+ return "VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT";
+ case VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT:
+ return "VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT";
+ default:
+ return "Unhandled VkPipelineCreationFeedbackFlagBits";
+ }
+}
+
+static inline std::string string_VkPipelineCreationFeedbackFlags(VkPipelineCreationFeedbackFlags input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkPipelineCreationFeedbackFlagBits(static_cast<VkPipelineCreationFeedbackFlagBits>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkPipelineCreationFeedbackFlagBits(static_cast<VkPipelineCreationFeedbackFlagBits>(0)));
+ return ret;
+}
+
+static inline const char* string_VkToolPurposeFlagBits(VkToolPurposeFlagBits input_value)
+{
+ switch (input_value)
+ {
+ case VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT:
+ return "VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT";
+ case VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT:
+ return "VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT";
+ case VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT:
+ return "VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT";
+ case VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT:
+ return "VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT";
+ case VK_TOOL_PURPOSE_PROFILING_BIT:
+ return "VK_TOOL_PURPOSE_PROFILING_BIT";
+ case VK_TOOL_PURPOSE_TRACING_BIT:
+ return "VK_TOOL_PURPOSE_TRACING_BIT";
+ case VK_TOOL_PURPOSE_VALIDATION_BIT:
+ return "VK_TOOL_PURPOSE_VALIDATION_BIT";
+ default:
+ return "Unhandled VkToolPurposeFlagBits";
+ }
+}
+
+static inline std::string string_VkToolPurposeFlags(VkToolPurposeFlags input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkToolPurposeFlagBits(static_cast<VkToolPurposeFlagBits>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkToolPurposeFlagBits(static_cast<VkToolPurposeFlagBits>(0)));
+ return ret;
+}
+
+static inline const char* string_VkPipelineStageFlagBits2(uint64_t input_value)
+{
+ switch (input_value)
+ {
+ case VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR:
+ return "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT:
+ return "VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT";
+ case VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT:
+ return "VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT";
+ case VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT:
+ return "VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT";
+ case VK_PIPELINE_STAGE_2_BLIT_BIT:
+ return "VK_PIPELINE_STAGE_2_BLIT_BIT";
+ case VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT:
+ return "VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT";
+ case VK_PIPELINE_STAGE_2_CLEAR_BIT:
+ return "VK_PIPELINE_STAGE_2_CLEAR_BIT";
+ case VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT";
+ case VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV:
+ return "VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV";
+ case VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT:
+ return "VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT";
+ case VK_PIPELINE_STAGE_2_COPY_BIT:
+ return "VK_PIPELINE_STAGE_2_COPY_BIT";
+ case VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT:
+ return "VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT";
+ case VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT:
+ return "VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT";
+ case VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT:
+ return "VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT";
+ case VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR:
+ return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_HOST_BIT:
+ return "VK_PIPELINE_STAGE_2_HOST_BIT";
+ case VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT";
+ case VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI:
+ return "VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI";
+ case VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT:
+ return "VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT";
+ case VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV:
+ return "VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV";
+ case VK_PIPELINE_STAGE_2_NONE:
+ return "VK_PIPELINE_STAGE_2_NONE";
+ case VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT:
+ return "VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT";
+ case VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR:
+ return "VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_RESOLVE_BIT:
+ return "VK_PIPELINE_STAGE_2_RESOLVE_BIT";
+ case VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI:
+ return "VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI";
+ case VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV:
+ return "VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV";
+ case VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT:
+ return "VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT";
+ case VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT:
+ return "VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT";
+ case VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT";
+ case VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT";
+ case VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT";
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR:
+ return "VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR:
+ return "VK_PIPELINE_STAGE_2_VIDEO_ENCODE_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+ default:
+ return "Unhandled VkPipelineStageFlagBits2";
+ }
+}
+
+static inline std::string string_VkPipelineStageFlags2(VkPipelineStageFlags2 input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkPipelineStageFlagBits2(static_cast<uint64_t>(1ULL << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkPipelineStageFlagBits2(static_cast<uint64_t>(0)));
+ return ret;
+}
+
+static inline const char* string_VkAccessFlagBits2(uint64_t input_value)
+{
+ switch (input_value)
+ {
+ case VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR:
+ return "VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR";
+ case VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR:
+ return "VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR";
+ case VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT:
+ return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT";
+ case VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT:
+ return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT";
+ case VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT:
+ return "VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT";
+ case VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV:
+ return "VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV";
+ case VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV:
+ return "VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV";
+ case VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT:
+ return "VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT";
+ case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT:
+ return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT";
+ case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT:
+ return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT";
+ case VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT:
+ return "VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT";
+ case VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR:
+ return "VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR";
+ case VK_ACCESS_2_HOST_READ_BIT:
+ return "VK_ACCESS_2_HOST_READ_BIT";
+ case VK_ACCESS_2_HOST_WRITE_BIT:
+ return "VK_ACCESS_2_HOST_WRITE_BIT";
+ case VK_ACCESS_2_INDEX_READ_BIT:
+ return "VK_ACCESS_2_INDEX_READ_BIT";
+ case VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT:
+ return "VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT";
+ case VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT:
+ return "VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT";
+ case VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI:
+ return "VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI";
+ case VK_ACCESS_2_MEMORY_READ_BIT:
+ return "VK_ACCESS_2_MEMORY_READ_BIT";
+ case VK_ACCESS_2_MEMORY_WRITE_BIT:
+ return "VK_ACCESS_2_MEMORY_WRITE_BIT";
+ case VK_ACCESS_2_NONE:
+ return "VK_ACCESS_2_NONE";
+ case VK_ACCESS_2_SHADER_READ_BIT:
+ return "VK_ACCESS_2_SHADER_READ_BIT";
+ case VK_ACCESS_2_SHADER_SAMPLED_READ_BIT:
+ return "VK_ACCESS_2_SHADER_SAMPLED_READ_BIT";
+ case VK_ACCESS_2_SHADER_STORAGE_READ_BIT:
+ return "VK_ACCESS_2_SHADER_STORAGE_READ_BIT";
+ case VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT:
+ return "VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT";
+ case VK_ACCESS_2_SHADER_WRITE_BIT:
+ return "VK_ACCESS_2_SHADER_WRITE_BIT";
+ case VK_ACCESS_2_TRANSFER_READ_BIT:
+ return "VK_ACCESS_2_TRANSFER_READ_BIT";
+ case VK_ACCESS_2_TRANSFER_WRITE_BIT:
+ return "VK_ACCESS_2_TRANSFER_WRITE_BIT";
+ case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT:
+ return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT";
+ case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT:
+ return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT";
+ case VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT:
+ return "VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT";
+ case VK_ACCESS_2_UNIFORM_READ_BIT:
+ return "VK_ACCESS_2_UNIFORM_READ_BIT";
+ case VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT:
+ return "VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT";
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR:
+ return "VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR:
+ return "VK_ACCESS_2_VIDEO_DECODE_WRITE_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR:
+ return "VK_ACCESS_2_VIDEO_ENCODE_READ_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR:
+ return "VK_ACCESS_2_VIDEO_ENCODE_WRITE_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+ default:
+ return "Unhandled VkAccessFlagBits2";
+ }
+}
+
+static inline std::string string_VkAccessFlags2(VkAccessFlags2 input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkAccessFlagBits2(static_cast<uint64_t>(1ULL << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkAccessFlagBits2(static_cast<uint64_t>(0)));
+ return ret;
+}
+
+static inline const char* string_VkSubmitFlagBits(VkSubmitFlagBits input_value)
+{
+ switch (input_value)
+ {
+ case VK_SUBMIT_PROTECTED_BIT:
+ return "VK_SUBMIT_PROTECTED_BIT";
+ default:
+ return "Unhandled VkSubmitFlagBits";
+ }
+}
+
+static inline std::string string_VkSubmitFlags(VkSubmitFlags input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkSubmitFlagBits(static_cast<VkSubmitFlagBits>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkSubmitFlagBits(static_cast<VkSubmitFlagBits>(0)));
+ return ret;
+}
+
+static inline const char* string_VkRenderingFlagBits(VkRenderingFlagBits input_value)
+{
+ switch (input_value)
+ {
+ case VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT:
+ return "VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT";
+ case VK_RENDERING_RESUMING_BIT:
+ return "VK_RENDERING_RESUMING_BIT";
+ case VK_RENDERING_SUSPENDING_BIT:
+ return "VK_RENDERING_SUSPENDING_BIT";
+ default:
+ return "Unhandled VkRenderingFlagBits";
+ }
+}
+
+static inline std::string string_VkRenderingFlags(VkRenderingFlags input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkRenderingFlagBits(static_cast<VkRenderingFlagBits>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkRenderingFlagBits(static_cast<VkRenderingFlagBits>(0)));
+ return ret;
+}
+
+static inline const char* string_VkFormatFeatureFlagBits2(uint64_t input_value)
+{
+ switch (input_value)
+ {
+ case VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR";
+ case VK_FORMAT_FEATURE_2_BLIT_DST_BIT:
+ return "VK_FORMAT_FEATURE_2_BLIT_DST_BIT";
+ case VK_FORMAT_FEATURE_2_BLIT_SRC_BIT:
+ return "VK_FORMAT_FEATURE_2_BLIT_SRC_BIT";
+ case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT:
+ return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT";
+ case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT:
+ return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT";
+ case VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT:
+ return "VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT";
+ case VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT:
+ return "VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT";
+ case VK_FORMAT_FEATURE_2_DISJOINT_BIT:
+ return "VK_FORMAT_FEATURE_2_DISJOINT_BIT";
+ case VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT:
+ return "VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT";
+ case VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR";
+ case VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV:
+ return "VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV";
+ case VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT:
+ return "VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT";
+ case VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT:
+ return "VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT";
+ case VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT:
+ return "VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT";
+ case VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT:
+ return "VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT";
+ case VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT:
+ return "VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT";
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+ default:
+ return "Unhandled VkFormatFeatureFlagBits2";
+ }
+}
+
+static inline std::string string_VkFormatFeatureFlags2(VkFormatFeatureFlags2 input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkFormatFeatureFlagBits2(static_cast<uint64_t>(1ULL << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkFormatFeatureFlagBits2(static_cast<uint64_t>(0)));
+ return ret;
+}
+
static inline const char* string_VkSurfaceTransformFlagBitsKHR(VkSurfaceTransformFlagBitsKHR input_value)
{
switch (input_value)
@@ -5354,6 +6026,10 @@ static inline const char* string_VkVideoCodecOperationFlagBitsKHR(VkVideoCodecOp
case VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT:
return "VK_VIDEO_CODEC_OPERATION_ENCODE_H264_BIT_EXT";
#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT:
+ return "VK_VIDEO_CODEC_OPERATION_ENCODE_H265_BIT_EXT";
+#endif // VK_ENABLE_BETA_EXTENSIONS
case VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR:
return "VK_VIDEO_CODEC_OPERATION_INVALID_BIT_KHR";
default:
@@ -5560,8 +6236,6 @@ static inline const char* string_VkVideoCodingQualityPresetFlagBitsKHR(VkVideoCo
{
switch (input_value)
{
- case VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR:
- return "VK_VIDEO_CODING_QUALITY_PRESET_DEFAULT_BIT_KHR";
case VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR:
return "VK_VIDEO_CODING_QUALITY_PRESET_NORMAL_BIT_KHR";
case VK_VIDEO_CODING_QUALITY_PRESET_POWER_BIT_KHR:
@@ -5642,6 +6316,37 @@ static inline std::string string_VkVideoDecodeFlagsKHR(VkVideoDecodeFlagsKHR inp
}
#endif // VK_ENABLE_BETA_EXTENSIONS
+static inline const char* string_VkRenderingFlagBitsKHR(VkRenderingFlagBitsKHR input_value)
+{
+ switch (input_value)
+ {
+ case VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT:
+ return "VK_RENDERING_CONTENTS_SECONDARY_COMMAND_BUFFERS_BIT";
+ case VK_RENDERING_RESUMING_BIT:
+ return "VK_RENDERING_RESUMING_BIT";
+ case VK_RENDERING_SUSPENDING_BIT:
+ return "VK_RENDERING_SUSPENDING_BIT";
+ default:
+ return "Unhandled VkRenderingFlagBitsKHR";
+ }
+}
+
+static inline std::string string_VkRenderingFlagsKHR(VkRenderingFlagsKHR input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkRenderingFlagBitsKHR(static_cast<VkRenderingFlagBitsKHR>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkRenderingFlagBitsKHR(static_cast<VkRenderingFlagBitsKHR>(0)));
+ return ret;
+}
+
static inline const char* string_VkPeerMemoryFeatureFlagBitsKHR(VkPeerMemoryFeatureFlagBitsKHR input_value)
{
switch (input_value)
@@ -6150,6 +6855,23 @@ static inline const char* string_VkChromaLocationKHR(VkChromaLocationKHR input_v
}
}
+static inline const char* string_VkQueueGlobalPriorityKHR(VkQueueGlobalPriorityKHR input_value)
+{
+ switch (input_value)
+ {
+ case VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR";
+ case VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR";
+ case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR";
+ case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR";
+ default:
+ return "Unhandled VkQueueGlobalPriorityKHR";
+ }
+}
+
static inline const char* string_VkDriverIdKHR(VkDriverIdKHR input_value)
{
switch (input_value)
@@ -6178,14 +6900,24 @@ static inline const char* string_VkDriverIdKHR(VkDriverIdKHR input_value)
return "VK_DRIVER_ID_JUICE_PROPRIETARY";
case VK_DRIVER_ID_MESA_LLVMPIPE:
return "VK_DRIVER_ID_MESA_LLVMPIPE";
+ case VK_DRIVER_ID_MESA_PANVK:
+ return "VK_DRIVER_ID_MESA_PANVK";
case VK_DRIVER_ID_MESA_RADV:
return "VK_DRIVER_ID_MESA_RADV";
+ case VK_DRIVER_ID_MESA_TURNIP:
+ return "VK_DRIVER_ID_MESA_TURNIP";
+ case VK_DRIVER_ID_MESA_V3DV:
+ return "VK_DRIVER_ID_MESA_V3DV";
+ case VK_DRIVER_ID_MESA_VENUS:
+ return "VK_DRIVER_ID_MESA_VENUS";
case VK_DRIVER_ID_MOLTENVK:
return "VK_DRIVER_ID_MOLTENVK";
case VK_DRIVER_ID_NVIDIA_PROPRIETARY:
return "VK_DRIVER_ID_NVIDIA_PROPRIETARY";
case VK_DRIVER_ID_QUALCOMM_PROPRIETARY:
return "VK_DRIVER_ID_QUALCOMM_PROPRIETARY";
+ case VK_DRIVER_ID_SAMSUNG_PROPRIETARY:
+ return "VK_DRIVER_ID_SAMSUNG_PROPRIETARY";
case VK_DRIVER_ID_VERISILICON_PROPRIETARY:
return "VK_DRIVER_ID_VERISILICON_PROPRIETARY";
default:
@@ -6361,8 +7093,8 @@ static inline const char* string_VkVideoEncodeRateControlFlagBitsKHR(VkVideoEnco
{
case VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR:
return "VK_VIDEO_ENCODE_RATE_CONTROL_DEFAULT_KHR";
- case VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR:
- return "VK_VIDEO_ENCODE_RATE_CONTROL_RESET_BIT_KHR";
+ case VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR:
+ return "VK_VIDEO_ENCODE_RATE_CONTROL_RESERVED_0_BIT_KHR";
default:
return "Unhandled VkVideoEncodeRateControlFlagBitsKHR";
}
@@ -6426,76 +7158,76 @@ static inline const char* string_VkPipelineStageFlagBits2KHR(uint64_t input_valu
{
case VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR:
return "VK_PIPELINE_STAGE_2_ACCELERATION_STRUCTURE_BUILD_BIT_KHR";
- case VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT_KHR";
- case VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT_KHR";
- case VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT_KHR";
- case VK_PIPELINE_STAGE_2_BLIT_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_BLIT_BIT_KHR";
- case VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT_KHR";
- case VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_CLEAR_BIT_KHR";
- case VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT:
+ return "VK_PIPELINE_STAGE_2_ALL_COMMANDS_BIT";
+ case VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT:
+ return "VK_PIPELINE_STAGE_2_ALL_GRAPHICS_BIT";
+ case VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT:
+ return "VK_PIPELINE_STAGE_2_ALL_TRANSFER_BIT";
+ case VK_PIPELINE_STAGE_2_BLIT_BIT:
+ return "VK_PIPELINE_STAGE_2_BLIT_BIT";
+ case VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT:
+ return "VK_PIPELINE_STAGE_2_BOTTOM_OF_PIPE_BIT";
+ case VK_PIPELINE_STAGE_2_CLEAR_BIT:
+ return "VK_PIPELINE_STAGE_2_CLEAR_BIT";
+ case VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_COLOR_ATTACHMENT_OUTPUT_BIT";
case VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV:
return "VK_PIPELINE_STAGE_2_COMMAND_PREPROCESS_BIT_NV";
- case VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_COMPUTE_SHADER_BIT";
case VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT:
return "VK_PIPELINE_STAGE_2_CONDITIONAL_RENDERING_BIT_EXT";
- case VK_PIPELINE_STAGE_2_COPY_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_COPY_BIT_KHR";
- case VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT_KHR";
- case VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_COPY_BIT:
+ return "VK_PIPELINE_STAGE_2_COPY_BIT";
+ case VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT:
+ return "VK_PIPELINE_STAGE_2_DRAW_INDIRECT_BIT";
+ case VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT:
+ return "VK_PIPELINE_STAGE_2_EARLY_FRAGMENT_TESTS_BIT";
case VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT:
return "VK_PIPELINE_STAGE_2_FRAGMENT_DENSITY_PROCESS_BIT_EXT";
- case VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADER_BIT";
case VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR:
return "VK_PIPELINE_STAGE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR";
- case VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT_KHR";
- case VK_PIPELINE_STAGE_2_HOST_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_HOST_BIT_KHR";
- case VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_GEOMETRY_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_HOST_BIT:
+ return "VK_PIPELINE_STAGE_2_HOST_BIT";
+ case VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_INDEX_INPUT_BIT";
case VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI:
return "VK_PIPELINE_STAGE_2_INVOCATION_MASK_BIT_HUAWEI";
- case VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT:
+ return "VK_PIPELINE_STAGE_2_LATE_FRAGMENT_TESTS_BIT";
case VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV:
return "VK_PIPELINE_STAGE_2_MESH_SHADER_BIT_NV";
- case VK_PIPELINE_STAGE_2_NONE_KHR:
- return "VK_PIPELINE_STAGE_2_NONE_KHR";
- case VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_NONE:
+ return "VK_PIPELINE_STAGE_2_NONE";
+ case VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT:
+ return "VK_PIPELINE_STAGE_2_PRE_RASTERIZATION_SHADERS_BIT";
case VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR:
return "VK_PIPELINE_STAGE_2_RAY_TRACING_SHADER_BIT_KHR";
- case VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_RESOLVE_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_RESOLVE_BIT:
+ return "VK_PIPELINE_STAGE_2_RESOLVE_BIT";
case VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI:
return "VK_PIPELINE_STAGE_2_SUBPASS_SHADING_BIT_HUAWEI";
case VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV:
return "VK_PIPELINE_STAGE_2_TASK_SHADER_BIT_NV";
- case VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT_KHR";
- case VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT_KHR";
- case VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_TESSELLATION_CONTROL_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_TESSELLATION_EVALUATION_SHADER_BIT";
+ case VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT:
+ return "VK_PIPELINE_STAGE_2_TOP_OF_PIPE_BIT";
case VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT:
return "VK_PIPELINE_STAGE_2_TRANSFORM_FEEDBACK_BIT_EXT";
- case VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT_KHR";
- case VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT_KHR";
- case VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR:
- return "VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT_KHR";
+ case VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_VERTEX_ATTRIBUTE_INPUT_BIT";
+ case VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT:
+ return "VK_PIPELINE_STAGE_2_VERTEX_INPUT_BIT";
+ case VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT:
+ return "VK_PIPELINE_STAGE_2_VERTEX_SHADER_BIT";
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR:
return "VK_PIPELINE_STAGE_2_VIDEO_DECODE_BIT_KHR";
@@ -6533,68 +7265,68 @@ static inline const char* string_VkAccessFlagBits2KHR(uint64_t input_value)
return "VK_ACCESS_2_ACCELERATION_STRUCTURE_READ_BIT_KHR";
case VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR:
return "VK_ACCESS_2_ACCELERATION_STRUCTURE_WRITE_BIT_KHR";
- case VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR:
- return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT_KHR";
+ case VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT:
+ return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_BIT";
case VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT:
return "VK_ACCESS_2_COLOR_ATTACHMENT_READ_NONCOHERENT_BIT_EXT";
- case VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR:
- return "VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT_KHR";
+ case VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT:
+ return "VK_ACCESS_2_COLOR_ATTACHMENT_WRITE_BIT";
case VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV:
return "VK_ACCESS_2_COMMAND_PREPROCESS_READ_BIT_NV";
case VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV:
return "VK_ACCESS_2_COMMAND_PREPROCESS_WRITE_BIT_NV";
case VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT:
return "VK_ACCESS_2_CONDITIONAL_RENDERING_READ_BIT_EXT";
- case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR:
- return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT_KHR";
- case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR:
- return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT_KHR";
+ case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT:
+ return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_READ_BIT";
+ case VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT:
+ return "VK_ACCESS_2_DEPTH_STENCIL_ATTACHMENT_WRITE_BIT";
case VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT:
return "VK_ACCESS_2_FRAGMENT_DENSITY_MAP_READ_BIT_EXT";
case VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR:
return "VK_ACCESS_2_FRAGMENT_SHADING_RATE_ATTACHMENT_READ_BIT_KHR";
- case VK_ACCESS_2_HOST_READ_BIT_KHR:
- return "VK_ACCESS_2_HOST_READ_BIT_KHR";
- case VK_ACCESS_2_HOST_WRITE_BIT_KHR:
- return "VK_ACCESS_2_HOST_WRITE_BIT_KHR";
- case VK_ACCESS_2_INDEX_READ_BIT_KHR:
- return "VK_ACCESS_2_INDEX_READ_BIT_KHR";
- case VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR:
- return "VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT_KHR";
- case VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR:
- return "VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT_KHR";
+ case VK_ACCESS_2_HOST_READ_BIT:
+ return "VK_ACCESS_2_HOST_READ_BIT";
+ case VK_ACCESS_2_HOST_WRITE_BIT:
+ return "VK_ACCESS_2_HOST_WRITE_BIT";
+ case VK_ACCESS_2_INDEX_READ_BIT:
+ return "VK_ACCESS_2_INDEX_READ_BIT";
+ case VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT:
+ return "VK_ACCESS_2_INDIRECT_COMMAND_READ_BIT";
+ case VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT:
+ return "VK_ACCESS_2_INPUT_ATTACHMENT_READ_BIT";
case VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI:
return "VK_ACCESS_2_INVOCATION_MASK_READ_BIT_HUAWEI";
- case VK_ACCESS_2_MEMORY_READ_BIT_KHR:
- return "VK_ACCESS_2_MEMORY_READ_BIT_KHR";
- case VK_ACCESS_2_MEMORY_WRITE_BIT_KHR:
- return "VK_ACCESS_2_MEMORY_WRITE_BIT_KHR";
- case VK_ACCESS_2_NONE_KHR:
- return "VK_ACCESS_2_NONE_KHR";
- case VK_ACCESS_2_SHADER_READ_BIT_KHR:
- return "VK_ACCESS_2_SHADER_READ_BIT_KHR";
- case VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR:
- return "VK_ACCESS_2_SHADER_SAMPLED_READ_BIT_KHR";
- case VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR:
- return "VK_ACCESS_2_SHADER_STORAGE_READ_BIT_KHR";
- case VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR:
- return "VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT_KHR";
- case VK_ACCESS_2_SHADER_WRITE_BIT_KHR:
- return "VK_ACCESS_2_SHADER_WRITE_BIT_KHR";
- case VK_ACCESS_2_TRANSFER_READ_BIT_KHR:
- return "VK_ACCESS_2_TRANSFER_READ_BIT_KHR";
- case VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR:
- return "VK_ACCESS_2_TRANSFER_WRITE_BIT_KHR";
+ case VK_ACCESS_2_MEMORY_READ_BIT:
+ return "VK_ACCESS_2_MEMORY_READ_BIT";
+ case VK_ACCESS_2_MEMORY_WRITE_BIT:
+ return "VK_ACCESS_2_MEMORY_WRITE_BIT";
+ case VK_ACCESS_2_NONE:
+ return "VK_ACCESS_2_NONE";
+ case VK_ACCESS_2_SHADER_READ_BIT:
+ return "VK_ACCESS_2_SHADER_READ_BIT";
+ case VK_ACCESS_2_SHADER_SAMPLED_READ_BIT:
+ return "VK_ACCESS_2_SHADER_SAMPLED_READ_BIT";
+ case VK_ACCESS_2_SHADER_STORAGE_READ_BIT:
+ return "VK_ACCESS_2_SHADER_STORAGE_READ_BIT";
+ case VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT:
+ return "VK_ACCESS_2_SHADER_STORAGE_WRITE_BIT";
+ case VK_ACCESS_2_SHADER_WRITE_BIT:
+ return "VK_ACCESS_2_SHADER_WRITE_BIT";
+ case VK_ACCESS_2_TRANSFER_READ_BIT:
+ return "VK_ACCESS_2_TRANSFER_READ_BIT";
+ case VK_ACCESS_2_TRANSFER_WRITE_BIT:
+ return "VK_ACCESS_2_TRANSFER_WRITE_BIT";
case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT:
return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_READ_BIT_EXT";
case VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT:
return "VK_ACCESS_2_TRANSFORM_FEEDBACK_COUNTER_WRITE_BIT_EXT";
case VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT:
return "VK_ACCESS_2_TRANSFORM_FEEDBACK_WRITE_BIT_EXT";
- case VK_ACCESS_2_UNIFORM_READ_BIT_KHR:
- return "VK_ACCESS_2_UNIFORM_READ_BIT_KHR";
- case VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR:
- return "VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT_KHR";
+ case VK_ACCESS_2_UNIFORM_READ_BIT:
+ return "VK_ACCESS_2_UNIFORM_READ_BIT";
+ case VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT:
+ return "VK_ACCESS_2_VERTEX_ATTRIBUTE_READ_BIT";
#ifdef VK_ENABLE_BETA_EXTENSIONS
case VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR:
return "VK_ACCESS_2_VIDEO_DECODE_READ_BIT_KHR";
@@ -6636,8 +7368,8 @@ static inline const char* string_VkSubmitFlagBitsKHR(VkSubmitFlagBitsKHR input_v
{
switch (input_value)
{
- case VK_SUBMIT_PROTECTED_BIT_KHR:
- return "VK_SUBMIT_PROTECTED_BIT_KHR";
+ case VK_SUBMIT_PROTECTED_BIT:
+ return "VK_SUBMIT_PROTECTED_BIT";
default:
return "Unhandled VkSubmitFlagBitsKHR";
}
@@ -6659,6 +7391,109 @@ static inline std::string string_VkSubmitFlagsKHR(VkSubmitFlagsKHR input_value)
return ret;
}
+static inline const char* string_VkFormatFeatureFlagBits2KHR(uint64_t input_value)
+{
+ switch (input_value)
+ {
+ case VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_ACCELERATION_STRUCTURE_VERTEX_BUFFER_BIT_KHR";
+ case VK_FORMAT_FEATURE_2_BLIT_DST_BIT:
+ return "VK_FORMAT_FEATURE_2_BLIT_DST_BIT";
+ case VK_FORMAT_FEATURE_2_BLIT_SRC_BIT:
+ return "VK_FORMAT_FEATURE_2_BLIT_SRC_BIT";
+ case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT:
+ return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BIT";
+ case VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT:
+ return "VK_FORMAT_FEATURE_2_COLOR_ATTACHMENT_BLEND_BIT";
+ case VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT:
+ return "VK_FORMAT_FEATURE_2_COSITED_CHROMA_SAMPLES_BIT";
+ case VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT:
+ return "VK_FORMAT_FEATURE_2_DEPTH_STENCIL_ATTACHMENT_BIT";
+ case VK_FORMAT_FEATURE_2_DISJOINT_BIT:
+ return "VK_FORMAT_FEATURE_2_DISJOINT_BIT";
+ case VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT:
+ return "VK_FORMAT_FEATURE_2_FRAGMENT_DENSITY_MAP_BIT_EXT";
+ case VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_FRAGMENT_SHADING_RATE_ATTACHMENT_BIT_KHR";
+ case VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV:
+ return "VK_FORMAT_FEATURE_2_LINEAR_COLOR_ATTACHMENT_BIT_NV";
+ case VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT:
+ return "VK_FORMAT_FEATURE_2_MIDPOINT_CHROMA_SAMPLES_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_DEPTH_COMPARISON_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_CUBIC_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_LINEAR_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_FILTER_MINMAX_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_CHROMA_RECONSTRUCTION_EXPLICIT_FORCEABLE_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_LINEAR_FILTER_BIT";
+ case VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT:
+ return "VK_FORMAT_FEATURE_2_SAMPLED_IMAGE_YCBCR_CONVERSION_SEPARATE_RECONSTRUCTION_FILTER_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_ATOMIC_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_IMAGE_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_READ_WITHOUT_FORMAT_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_ATOMIC_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_TEXEL_BUFFER_BIT";
+ case VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT:
+ return "VK_FORMAT_FEATURE_2_STORAGE_WRITE_WITHOUT_FORMAT_BIT";
+ case VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT:
+ return "VK_FORMAT_FEATURE_2_TRANSFER_DST_BIT";
+ case VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT:
+ return "VK_FORMAT_FEATURE_2_TRANSFER_SRC_BIT";
+ case VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT:
+ return "VK_FORMAT_FEATURE_2_UNIFORM_TEXEL_BUFFER_BIT";
+ case VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT:
+ return "VK_FORMAT_FEATURE_2_VERTEX_BUFFER_BIT";
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_DPB_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_DECODE_OUTPUT_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_DPB_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+ case VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR:
+ return "VK_FORMAT_FEATURE_2_VIDEO_ENCODE_INPUT_BIT_KHR";
+#endif // VK_ENABLE_BETA_EXTENSIONS
+ default:
+ return "Unhandled VkFormatFeatureFlagBits2KHR";
+ }
+}
+
+static inline std::string string_VkFormatFeatureFlags2KHR(VkFormatFeatureFlags2KHR input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkFormatFeatureFlagBits2KHR(static_cast<uint64_t>(1ULL << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkFormatFeatureFlagBits2KHR(static_cast<uint64_t>(0)));
+ return ret;
+}
+
static inline const char* string_VkDebugReportFlagBitsEXT(VkDebugReportFlagBitsEXT input_value)
{
switch (input_value)
@@ -6702,6 +7537,8 @@ static inline const char* string_VkDebugReportObjectTypeEXT(VkDebugReportObjectT
return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_KHR_EXT";
case VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT:
return "VK_DEBUG_REPORT_OBJECT_TYPE_ACCELERATION_STRUCTURE_NV_EXT";
+ case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT:
+ return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_COLLECTION_FUCHSIA_EXT";
case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT:
return "VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_EXT";
case VK_DEBUG_REPORT_OBJECT_TYPE_BUFFER_VIEW_EXT:
@@ -6949,6 +7786,183 @@ static inline std::string string_VkVideoEncodeH264CreateFlagsEXT(VkVideoEncodeH2
#ifdef VK_ENABLE_BETA_EXTENSIONS
+static inline const char* string_VkVideoEncodeH264RateControlStructureFlagBitsEXT(VkVideoEncodeH264RateControlStructureFlagBitsEXT input_value)
+{
+ switch (input_value)
+ {
+ case VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT";
+ case VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT";
+ case VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT:
+ return "VK_VIDEO_ENCODE_H264_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT";
+ default:
+ return "Unhandled VkVideoEncodeH264RateControlStructureFlagBitsEXT";
+ }
+}
+
+static inline std::string string_VkVideoEncodeH264RateControlStructureFlagsEXT(VkVideoEncodeH264RateControlStructureFlagsEXT input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkVideoEncodeH264RateControlStructureFlagBitsEXT(static_cast<VkVideoEncodeH264RateControlStructureFlagBitsEXT>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkVideoEncodeH264RateControlStructureFlagBitsEXT(static_cast<VkVideoEncodeH264RateControlStructureFlagBitsEXT>(0)));
+ return ret;
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+
+static inline const char* string_VkVideoEncodeH265InputModeFlagBitsEXT(VkVideoEncodeH265InputModeFlagBitsEXT input_value)
+{
+ switch (input_value)
+ {
+ case VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_INPUT_MODE_FRAME_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_INPUT_MODE_NON_VCL_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_INPUT_MODE_SLICE_BIT_EXT";
+ default:
+ return "Unhandled VkVideoEncodeH265InputModeFlagBitsEXT";
+ }
+}
+
+static inline std::string string_VkVideoEncodeH265InputModeFlagsEXT(VkVideoEncodeH265InputModeFlagsEXT input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkVideoEncodeH265InputModeFlagBitsEXT(static_cast<VkVideoEncodeH265InputModeFlagBitsEXT>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkVideoEncodeH265InputModeFlagBitsEXT(static_cast<VkVideoEncodeH265InputModeFlagBitsEXT>(0)));
+ return ret;
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+
+static inline const char* string_VkVideoEncodeH265OutputModeFlagBitsEXT(VkVideoEncodeH265OutputModeFlagBitsEXT input_value)
+{
+ switch (input_value)
+ {
+ case VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_OUTPUT_MODE_FRAME_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_OUTPUT_MODE_NON_VCL_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_OUTPUT_MODE_SLICE_BIT_EXT";
+ default:
+ return "Unhandled VkVideoEncodeH265OutputModeFlagBitsEXT";
+ }
+}
+
+static inline std::string string_VkVideoEncodeH265OutputModeFlagsEXT(VkVideoEncodeH265OutputModeFlagsEXT input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkVideoEncodeH265OutputModeFlagBitsEXT(static_cast<VkVideoEncodeH265OutputModeFlagBitsEXT>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkVideoEncodeH265OutputModeFlagBitsEXT(static_cast<VkVideoEncodeH265OutputModeFlagBitsEXT>(0)));
+ return ret;
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+
+static inline const char* string_VkVideoEncodeH265CtbSizeFlagBitsEXT(VkVideoEncodeH265CtbSizeFlagBitsEXT input_value)
+{
+ switch (input_value)
+ {
+ case VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_CTB_SIZE_16_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_CTB_SIZE_32_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_CTB_SIZE_64_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_CTB_SIZE_8_BIT_EXT";
+ default:
+ return "Unhandled VkVideoEncodeH265CtbSizeFlagBitsEXT";
+ }
+}
+
+static inline std::string string_VkVideoEncodeH265CtbSizeFlagsEXT(VkVideoEncodeH265CtbSizeFlagsEXT input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkVideoEncodeH265CtbSizeFlagBitsEXT(static_cast<VkVideoEncodeH265CtbSizeFlagBitsEXT>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkVideoEncodeH265CtbSizeFlagBitsEXT(static_cast<VkVideoEncodeH265CtbSizeFlagBitsEXT>(0)));
+ return ret;
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+
+static inline const char* string_VkVideoEncodeH265RateControlStructureFlagBitsEXT(VkVideoEncodeH265RateControlStructureFlagBitsEXT input_value)
+{
+ switch (input_value)
+ {
+ case VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_DYADIC_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT:
+ return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_FLAT_BIT_EXT";
+ case VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT:
+ return "VK_VIDEO_ENCODE_H265_RATE_CONTROL_STRUCTURE_UNKNOWN_EXT";
+ default:
+ return "Unhandled VkVideoEncodeH265RateControlStructureFlagBitsEXT";
+ }
+}
+
+static inline std::string string_VkVideoEncodeH265RateControlStructureFlagsEXT(VkVideoEncodeH265RateControlStructureFlagsEXT input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkVideoEncodeH265RateControlStructureFlagBitsEXT(static_cast<VkVideoEncodeH265RateControlStructureFlagBitsEXT>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkVideoEncodeH265RateControlStructureFlagBitsEXT(static_cast<VkVideoEncodeH265RateControlStructureFlagBitsEXT>(0)));
+ return ret;
+}
+#endif // VK_ENABLE_BETA_EXTENSIONS
+
+
+#ifdef VK_ENABLE_BETA_EXTENSIONS
+
static inline const char* string_VkVideoDecodeH264PictureLayoutFlagBitsEXT(VkVideoDecodeH264PictureLayoutFlagBitsEXT input_value)
{
switch (input_value)
@@ -7763,14 +8777,14 @@ static inline const char* string_VkQueueGlobalPriorityEXT(VkQueueGlobalPriorityE
{
switch (input_value)
{
- case VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT:
- return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_EXT";
- case VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT:
- return "VK_QUEUE_GLOBAL_PRIORITY_LOW_EXT";
- case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT:
- return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_EXT";
- case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT:
- return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_EXT";
+ case VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_HIGH_KHR";
+ case VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_LOW_KHR";
+ case VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_MEDIUM_KHR";
+ case VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR:
+ return "VK_QUEUE_GLOBAL_PRIORITY_REALTIME_KHR";
default:
return "Unhandled VkQueueGlobalPriorityEXT";
}
@@ -7812,12 +8826,12 @@ static inline const char* string_VkPipelineCreationFeedbackFlagBitsEXT(VkPipelin
{
switch (input_value)
{
- case VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT:
- return "VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT_EXT";
- case VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT:
- return "VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT_EXT";
- case VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT:
- return "VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT_EXT";
+ case VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT:
+ return "VK_PIPELINE_CREATION_FEEDBACK_APPLICATION_PIPELINE_CACHE_HIT_BIT";
+ case VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT:
+ return "VK_PIPELINE_CREATION_FEEDBACK_BASE_PIPELINE_ACCELERATION_BIT";
+ case VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT:
+ return "VK_PIPELINE_CREATION_FEEDBACK_VALID_BIT";
default:
return "Unhandled VkPipelineCreationFeedbackFlagBitsEXT";
}
@@ -7910,20 +8924,20 @@ static inline const char* string_VkToolPurposeFlagBitsEXT(VkToolPurposeFlagBitsE
{
switch (input_value)
{
- case VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT:
- return "VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT_EXT";
+ case VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT:
+ return "VK_TOOL_PURPOSE_ADDITIONAL_FEATURES_BIT";
case VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT:
return "VK_TOOL_PURPOSE_DEBUG_MARKERS_BIT_EXT";
case VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT:
return "VK_TOOL_PURPOSE_DEBUG_REPORTING_BIT_EXT";
- case VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT:
- return "VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT_EXT";
- case VK_TOOL_PURPOSE_PROFILING_BIT_EXT:
- return "VK_TOOL_PURPOSE_PROFILING_BIT_EXT";
- case VK_TOOL_PURPOSE_TRACING_BIT_EXT:
- return "VK_TOOL_PURPOSE_TRACING_BIT_EXT";
- case VK_TOOL_PURPOSE_VALIDATION_BIT_EXT:
- return "VK_TOOL_PURPOSE_VALIDATION_BIT_EXT";
+ case VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT:
+ return "VK_TOOL_PURPOSE_MODIFYING_FEATURES_BIT";
+ case VK_TOOL_PURPOSE_PROFILING_BIT:
+ return "VK_TOOL_PURPOSE_PROFILING_BIT";
+ case VK_TOOL_PURPOSE_TRACING_BIT:
+ return "VK_TOOL_PURPOSE_TRACING_BIT";
+ case VK_TOOL_PURPOSE_VALIDATION_BIT:
+ return "VK_TOOL_PURPOSE_VALIDATION_BIT";
default:
return "Unhandled VkToolPurposeFlagBitsEXT";
}
@@ -8295,6 +9309,45 @@ static inline const char* string_VkAccelerationStructureMotionInstanceTypeNV(VkA
}
}
+
+#ifdef VK_USE_PLATFORM_FUCHSIA
+
+static inline const char* string_VkImageConstraintsInfoFlagBitsFUCHSIA(VkImageConstraintsInfoFlagBitsFUCHSIA input_value)
+{
+ switch (input_value)
+ {
+ case VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA:
+ return "VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_OFTEN_FUCHSIA";
+ case VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA:
+ return "VK_IMAGE_CONSTRAINTS_INFO_CPU_READ_RARELY_FUCHSIA";
+ case VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA:
+ return "VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_OFTEN_FUCHSIA";
+ case VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA:
+ return "VK_IMAGE_CONSTRAINTS_INFO_CPU_WRITE_RARELY_FUCHSIA";
+ case VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA:
+ return "VK_IMAGE_CONSTRAINTS_INFO_PROTECTED_OPTIONAL_FUCHSIA";
+ default:
+ return "Unhandled VkImageConstraintsInfoFlagBitsFUCHSIA";
+ }
+}
+
+static inline std::string string_VkImageConstraintsInfoFlagsFUCHSIA(VkImageConstraintsInfoFlagsFUCHSIA input_value)
+{
+ std::string ret;
+ int index = 0;
+ while(input_value) {
+ if (input_value & 1) {
+ if( !ret.empty()) ret.append("|");
+ ret.append(string_VkImageConstraintsInfoFlagBitsFUCHSIA(static_cast<VkImageConstraintsInfoFlagBitsFUCHSIA>(1U << index)));
+ }
+ ++index;
+ input_value >>= 1;
+ }
+ if( ret.empty()) ret.append(string_VkImageConstraintsInfoFlagBitsFUCHSIA(static_cast<VkImageConstraintsInfoFlagBitsFUCHSIA>(0)));
+ return ret;
+}
+#endif // VK_USE_PLATFORM_FUCHSIA
+
static inline const char* string_VkBuildAccelerationStructureModeKHR(VkBuildAccelerationStructureModeKHR input_value)
{
switch (input_value)
@@ -8450,7 +9503,7 @@ static inline bool IsDuplicatePnext(VkStructureType input_value)
{
case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
- case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
+ case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO:
return true;
default:
return false;
diff --git a/thirdparty/vulkan/vk_mem_alloc.h b/thirdparty/vulkan/vk_mem_alloc.h
index 9890f20f7c..6618f1d1f0 100644
--- a/thirdparty/vulkan/vk_mem_alloc.h
+++ b/thirdparty/vulkan/vk_mem_alloc.h
@@ -1,5 +1,5 @@
//
-// Copyright (c) 2017-2021 Advanced Micro Devices, Inc. All rights reserved.
+// Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved.
//
// Permission is hereby granted, free of charge, to any person obtaining a copy
// of this software and associated documentation files (the "Software"), to deal
@@ -25,12 +25,12 @@
/** \mainpage Vulkan Memory Allocator
-<b>Version 3.0.0-development</b> (2021-06-21)
+<b>Version 3.0.0-development</b>
-Copyright (c) 2017-2021 Advanced Micro Devices, Inc. All rights reserved. \n
+Copyright (c) 2017-2022 Advanced Micro Devices, Inc. All rights reserved. \n
License: MIT
-Documentation of all members: vk_mem_alloc.h
+<b>API documentation divided into groups:</b> [Modules](modules.html)
\section main_table_of_contents Table of contents
@@ -49,7 +49,6 @@ Documentation of all members: vk_mem_alloc.h
- [Mapping functions](@ref memory_mapping_mapping_functions)
- [Persistently mapped memory](@ref memory_mapping_persistently_mapped_memory)
- [Cache flush and invalidate](@ref memory_mapping_cache_control)
- - [Finding out if memory is mappable](@ref memory_mapping_finding_if_memory_mappable)
- \subpage staying_within_budget
- [Querying for budget](@ref staying_within_budget_querying_for_budget)
- [Controlling memory usage](@ref staying_within_budget_controlling_memory_usage)
@@ -61,36 +60,33 @@ Documentation of all members: vk_mem_alloc.h
- [Stack](@ref linear_algorithm_stack)
- [Double stack](@ref linear_algorithm_double_stack)
- [Ring buffer](@ref linear_algorithm_ring_buffer)
- - [Buddy allocation algorithm](@ref buddy_algorithm)
- \subpage defragmentation
- - [Defragmenting CPU memory](@ref defragmentation_cpu)
- - [Defragmenting GPU memory](@ref defragmentation_gpu)
- - [Additional notes](@ref defragmentation_additional_notes)
- - [Writing custom allocation algorithm](@ref defragmentation_custom_algorithm)
- - \subpage lost_allocations
- \subpage statistics
- [Numeric statistics](@ref statistics_numeric_statistics)
- [JSON dump](@ref statistics_json_dump)
- \subpage allocation_annotation
- [Allocation user data](@ref allocation_user_data)
- [Allocation names](@ref allocation_names)
+ - \subpage virtual_allocator
- \subpage debugging_memory_usage
- [Memory initialization](@ref debugging_memory_usage_initialization)
- [Margins](@ref debugging_memory_usage_margins)
- [Corruption detection](@ref debugging_memory_usage_corruption_detection)
- - \subpage record_and_replay
+ - \subpage opengl_interop
- \subpage usage_patterns
- - [Common mistakes](@ref usage_patterns_common_mistakes)
- - [Simple patterns](@ref usage_patterns_simple)
- - [Advanced patterns](@ref usage_patterns_advanced)
+ - [GPU-only resource](@ref usage_patterns_gpu_only)
+ - [Staging copy for upload](@ref usage_patterns_staging_copy_upload)
+ - [Readback](@ref usage_patterns_readback)
+ - [Advanced data uploading](@ref usage_patterns_advanced_data_uploading)
+ - [Other use cases](@ref usage_patterns_other_use_cases)
- \subpage configuration
- [Pointers to Vulkan functions](@ref config_Vulkan_functions)
- [Custom host memory allocator](@ref custom_memory_allocator)
- [Device memory allocation callbacks](@ref allocation_callbacks)
- [Device heap memory limit](@ref heap_memory_limit)
- - \subpage vk_khr_dedicated_allocation
- - \subpage enabling_buffer_device_address
- - \subpage vk_amd_device_coherent_memory
+- \subpage vk_khr_dedicated_allocation
+- \subpage enabling_buffer_device_address
+- \subpage vk_amd_device_coherent_memory
- \subpage general_considerations
- [Thread safety](@ref general_considerations_thread_safety)
- [Validation layer warnings](@ref general_considerations_validation_layer_warnings)
@@ -99,1938 +95,55 @@ Documentation of all members: vk_mem_alloc.h
\section main_see_also See also
-- [Product page on GPUOpen](https://gpuopen.com/gaming-product/vulkan-memory-allocator/)
-- [Source repository on GitHub](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
+- [**Product page on GPUOpen**](https://gpuopen.com/gaming-product/vulkan-memory-allocator/)
+- [**Source repository on GitHub**](https://github.com/GPUOpen-LibrariesAndSDKs/VulkanMemoryAllocator)
+\defgroup group_init Library initialization
+\brief API elements related to the initialization and management of the entire library, especially #VmaAllocator object.
+\defgroup group_alloc Memory allocation
-\page quick_start Quick start
-
-\section quick_start_project_setup Project setup
-
-Vulkan Memory Allocator comes in form of a "stb-style" single header file.
-You don't need to build it as a separate library project.
-You can add this file directly to your project and submit it to code repository next to your other source files.
-
-"Single header" doesn't mean that everything is contained in C/C++ declarations,
-like it tends to be in case of inline functions or C++ templates.
-It means that implementation is bundled with interface in a single file and needs to be extracted using preprocessor macro.
-If you don't do it properly, you will get linker errors.
-
-To do it properly:
-
--# Include "vk_mem_alloc.h" file in each CPP file where you want to use the library.
- This includes declarations of all members of the library.
--# In exactly one CPP file define following macro before this include.
- It enables also internal definitions.
-
-\code
-#define VMA_IMPLEMENTATION
-#include "vk_mem_alloc.h"
-\endcode
-
-It may be a good idea to create dedicated CPP file just for this purpose.
-
-Note on language: This library is written in C++, but has C-compatible interface.
-Thus you can include and use vk_mem_alloc.h in C or C++ code, but full
-implementation with `VMA_IMPLEMENTATION` macro must be compiled as C++, NOT as C.
-
-Please note that this library includes header `<vulkan/vulkan.h>`, which in turn
-includes `<windows.h>` on Windows. If you need some specific macros defined
-before including these headers (like `WIN32_LEAN_AND_MEAN` or
-`WINVER` for Windows, `VK_USE_PLATFORM_WIN32_KHR` for Vulkan), you must define
-them before every `#include` of this library.
-
-You may need to configure the way you import Vulkan functions.
-
-- By default, VMA assumes you you link statically with Vulkan API. If this is not the case,
- `#define VMA_STATIC_VULKAN_FUNCTIONS 0` before `#include` of the VMA implementation and use another way.
-- You can `#define VMA_DYNAMIC_VULKAN_FUNCTIONS 1` and make sure `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` globals are defined.
- All the remaining Vulkan functions will be fetched automatically.
-- Finally, you can provide your own pointers to all Vulkan functions needed by VMA using structure member
- VmaAllocatorCreateInfo::pVulkanFunctions, if you fetched them in some custom way e.g. using some loader like [Volk](https://github.com/zeux/volk).
-
-
-\section quick_start_initialization Initialization
-
-At program startup:
-
--# Initialize Vulkan to have `VkPhysicalDevice`, `VkDevice` and `VkInstance` object.
--# Fill VmaAllocatorCreateInfo structure and create #VmaAllocator object by
- calling vmaCreateAllocator().
-
-\code
-VmaAllocatorCreateInfo allocatorInfo = {};
-allocatorInfo.vulkanApiVersion = VK_API_VERSION_1_2;
-allocatorInfo.physicalDevice = physicalDevice;
-allocatorInfo.device = device;
-allocatorInfo.instance = instance;
-
-VmaAllocator allocator;
-vmaCreateAllocator(&allocatorInfo, &allocator);
-\endcode
-
-Only members `physicalDevice`, `device`, `instance` are required.
-However, you should inform the library which Vulkan version do you use by setting
-VmaAllocatorCreateInfo::vulkanApiVersion and which extensions did you enable
-by setting VmaAllocatorCreateInfo::flags (like #VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT for VK_KHR_buffer_device_address).
-Otherwise, VMA would use only features of Vulkan 1.0 core with no extensions.
-
-
-\section quick_start_resource_allocation Resource allocation
-
-When you want to create a buffer or image:
-
--# Fill `VkBufferCreateInfo` / `VkImageCreateInfo` structure.
--# Fill VmaAllocationCreateInfo structure.
--# Call vmaCreateBuffer() / vmaCreateImage() to get `VkBuffer`/`VkImage` with memory
- already allocated and bound to it.
-
-\code
-VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufferInfo.size = 65536;
-bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocInfo = {};
-allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-
-VkBuffer buffer;
-VmaAllocation allocation;
-vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
-\endcode
-
-Don't forget to destroy your objects when no longer needed:
-
-\code
-vmaDestroyBuffer(allocator, buffer, allocation);
-vmaDestroyAllocator(allocator);
-\endcode
-
-
-\page choosing_memory_type Choosing memory type
-
-Physical devices in Vulkan support various combinations of memory heaps and
-types. Help with choosing correct and optimal memory type for your specific
-resource is one of the key features of this library. You can use it by filling
-appropriate members of VmaAllocationCreateInfo structure, as described below.
-You can also combine multiple methods.
-
--# If you just want to find memory type index that meets your requirements, you
- can use function: vmaFindMemoryTypeIndex(), vmaFindMemoryTypeIndexForBufferInfo(),
- vmaFindMemoryTypeIndexForImageInfo().
--# If you want to allocate a region of device memory without association with any
- specific image or buffer, you can use function vmaAllocateMemory(). Usage of
- this function is not recommended and usually not needed.
- vmaAllocateMemoryPages() function is also provided for creating multiple allocations at once,
- which may be useful for sparse binding.
--# If you already have a buffer or an image created, you want to allocate memory
- for it and then you will bind it yourself, you can use function
- vmaAllocateMemoryForBuffer(), vmaAllocateMemoryForImage().
- For binding you should use functions: vmaBindBufferMemory(), vmaBindImageMemory()
- or their extended versions: vmaBindBufferMemory2(), vmaBindImageMemory2().
--# If you want to create a buffer or an image, allocate memory for it and bind
- them together, all in one call, you can use function vmaCreateBuffer(),
- vmaCreateImage(). This is the easiest and recommended way to use this library.
-
-When using 3. or 4., the library internally queries Vulkan for memory types
-supported for that buffer or image (function `vkGetBufferMemoryRequirements()`)
-and uses only one of these types.
-
-If no memory type can be found that meets all the requirements, these functions
-return `VK_ERROR_FEATURE_NOT_PRESENT`.
-
-You can leave VmaAllocationCreateInfo structure completely filled with zeros.
-It means no requirements are specified for memory type.
-It is valid, although not very useful.
-
-\section choosing_memory_type_usage Usage
-
-The easiest way to specify memory requirements is to fill member
-VmaAllocationCreateInfo::usage using one of the values of enum #VmaMemoryUsage.
-It defines high level, common usage types.
-For more details, see description of this enum.
-
-For example, if you want to create a uniform buffer that will be filled using
-transfer only once or infrequently and used for rendering every frame, you can
-do it using following code:
-
-\code
-VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufferInfo.size = 65536;
-bufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocInfo = {};
-allocInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-
-VkBuffer buffer;
-VmaAllocation allocation;
-vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
-\endcode
-
-\section choosing_memory_type_required_preferred_flags Required and preferred flags
-
-You can specify more detailed requirements by filling members
-VmaAllocationCreateInfo::requiredFlags and VmaAllocationCreateInfo::preferredFlags
-with a combination of bits from enum `VkMemoryPropertyFlags`. For example,
-if you want to create a buffer that will be persistently mapped on host (so it
-must be `HOST_VISIBLE`) and preferably will also be `HOST_COHERENT` and `HOST_CACHED`,
-use following code:
-
-\code
-VmaAllocationCreateInfo allocInfo = {};
-allocInfo.requiredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-allocInfo.preferredFlags = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
-allocInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
-
-VkBuffer buffer;
-VmaAllocation allocation;
-vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
-\endcode
-
-A memory type is chosen that has all the required flags and as many preferred
-flags set as possible.
-
-If you use VmaAllocationCreateInfo::usage, it is just internally converted to
-a set of required and preferred flags.
-
-\section choosing_memory_type_explicit_memory_types Explicit memory types
-
-If you inspected memory types available on the physical device and you have
-a preference for memory types that you want to use, you can fill member
-VmaAllocationCreateInfo::memoryTypeBits. It is a bit mask, where each bit set
-means that a memory type with that index is allowed to be used for the
-allocation. Special value 0, just like `UINT32_MAX`, means there are no
-restrictions to memory type index.
-
-Please note that this member is NOT just a memory type index.
-Still you can use it to choose just one, specific memory type.
-For example, if you already determined that your buffer should be created in
-memory type 2, use following code:
-
-\code
-uint32_t memoryTypeIndex = 2;
-
-VmaAllocationCreateInfo allocInfo = {};
-allocInfo.memoryTypeBits = 1u << memoryTypeIndex;
-
-VkBuffer buffer;
-VmaAllocation allocation;
-vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
-\endcode
-
-
-\section choosing_memory_type_custom_memory_pools Custom memory pools
-
-If you allocate from custom memory pool, all the ways of specifying memory
-requirements described above are not applicable and the aforementioned members
-of VmaAllocationCreateInfo structure are ignored. Memory type is selected
-explicitly when creating the pool and then used to make all the allocations from
-that pool. For further details, see \ref custom_memory_pools.
-
-\section choosing_memory_type_dedicated_allocations Dedicated allocations
-
-Memory for allocations is reserved out of larger block of `VkDeviceMemory`
-allocated from Vulkan internally. That's the main feature of this whole library.
-You can still request a separate memory block to be created for an allocation,
-just like you would do in a trivial solution without using any allocator.
-In that case, a buffer or image is always bound to that memory at offset 0.
-This is called a "dedicated allocation".
-You can explicitly request it by using flag #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
-The library can also internally decide to use dedicated allocation in some cases, e.g.:
-
-- When the size of the allocation is large.
-- When [VK_KHR_dedicated_allocation](@ref vk_khr_dedicated_allocation) extension is enabled
- and it reports that dedicated allocation is required or recommended for the resource.
-- When allocation of next big memory block fails due to not enough device memory,
- but allocation with the exact requested size succeeds.
-
-
-\page memory_mapping Memory mapping
-
-To "map memory" in Vulkan means to obtain a CPU pointer to `VkDeviceMemory`,
-to be able to read from it or write to it in CPU code.
-Mapping is possible only of memory allocated from a memory type that has
-`VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` flag.
-Functions `vkMapMemory()`, `vkUnmapMemory()` are designed for this purpose.
-You can use them directly with memory allocated by this library,
-but it is not recommended because of following issue:
-Mapping the same `VkDeviceMemory` block multiple times is illegal - only one mapping at a time is allowed.
-This includes mapping disjoint regions. Mapping is not reference-counted internally by Vulkan.
-Because of this, Vulkan Memory Allocator provides following facilities:
-
-\section memory_mapping_mapping_functions Mapping functions
-
-The library provides following functions for mapping of a specific #VmaAllocation: vmaMapMemory(), vmaUnmapMemory().
-They are safer and more convenient to use than standard Vulkan functions.
-You can map an allocation multiple times simultaneously - mapping is reference-counted internally.
-You can also map different allocations simultaneously regardless of whether they use the same `VkDeviceMemory` block.
-The way it's implemented is that the library always maps entire memory block, not just region of the allocation.
-For further details, see description of vmaMapMemory() function.
-Example:
-
-\code
-// Having these objects initialized:
-
-struct ConstantBuffer
-{
- ...
-};
-ConstantBuffer constantBufferData;
-
-VmaAllocator allocator;
-VkBuffer constantBuffer;
-VmaAllocation constantBufferAllocation;
-
-// You can map and fill your buffer using following code:
-
-void* mappedData;
-vmaMapMemory(allocator, constantBufferAllocation, &mappedData);
-memcpy(mappedData, &constantBufferData, sizeof(constantBufferData));
-vmaUnmapMemory(allocator, constantBufferAllocation);
-\endcode
-
-When mapping, you may see a warning from Vulkan validation layer similar to this one:
-
-<i>Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.</i>
-
-It happens because the library maps entire `VkDeviceMemory` block, where different
-types of images and buffers may end up together, especially on GPUs with unified memory like Intel.
-You can safely ignore it if you are sure you access only memory of the intended
-object that you wanted to map.
+\brief API elements related to the allocation, deallocation, and management of Vulkan memory, buffers, images.
+Most basic ones being: vmaCreateBuffer(), vmaCreateImage().
+\defgroup group_virtual Virtual allocator
-\section memory_mapping_persistently_mapped_memory Persistently mapped memory
+\brief API elements related to the mechanism of \ref virtual_allocator - using the core allocation algorithm
+for user-defined purpose without allocating any real GPU memory.
-Kepping your memory persistently mapped is generally OK in Vulkan.
-You don't need to unmap it before using its data on the GPU.
-The library provides a special feature designed for that:
-Allocations made with #VMA_ALLOCATION_CREATE_MAPPED_BIT flag set in
-VmaAllocationCreateInfo::flags stay mapped all the time,
-so you can just access CPU pointer to it any time
-without a need to call any "map" or "unmap" function.
-Example:
-
-\code
-VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufCreateInfo.size = sizeof(ConstantBuffer);
-bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_CPU_ONLY;
-allocCreateInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
-
-VkBuffer buf;
-VmaAllocation alloc;
-VmaAllocationInfo allocInfo;
-vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-
-// Buffer is already mapped. You can access its memory.
-memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData));
-\endcode
-
-There are some exceptions though, when you should consider mapping memory only for a short period of time:
-
-- When operating system is Windows 7 or 8.x (Windows 10 is not affected because it uses WDDM2),
- device is discrete AMD GPU,
- and memory type is the special 256 MiB pool of `DEVICE_LOCAL + HOST_VISIBLE` memory
- (selected when you use #VMA_MEMORY_USAGE_CPU_TO_GPU),
- then whenever a memory block allocated from this memory type stays mapped
- for the time of any call to `vkQueueSubmit()` or `vkQueuePresentKHR()`, this
- block is migrated by WDDM to system RAM, which degrades performance. It doesn't
- matter if that particular memory block is actually used by the command buffer
- being submitted.
-- Keeping many large memory blocks mapped may impact performance or stability of some debugging tools.
-
-\section memory_mapping_cache_control Cache flush and invalidate
-
-Memory in Vulkan doesn't need to be unmapped before using it on GPU,
-but unless a memory types has `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT` flag set,
-you need to manually **invalidate** cache before reading of mapped pointer
-and **flush** cache after writing to mapped pointer.
-Map/unmap operations don't do that automatically.
-Vulkan provides following functions for this purpose `vkFlushMappedMemoryRanges()`,
-`vkInvalidateMappedMemoryRanges()`, but this library provides more convenient
-functions that refer to given allocation object: vmaFlushAllocation(),
-vmaInvalidateAllocation(),
-or multiple objects at once: vmaFlushAllocations(), vmaInvalidateAllocations().
-
-Regions of memory specified for flush/invalidate must be aligned to
-`VkPhysicalDeviceLimits::nonCoherentAtomSize`. This is automatically ensured by the library.
-In any memory type that is `HOST_VISIBLE` but not `HOST_COHERENT`, all allocations
-within blocks are aligned to this value, so their offsets are always multiply of
-`nonCoherentAtomSize` and two different allocations never share same "line" of this size.
-
-Please note that memory allocated with #VMA_MEMORY_USAGE_CPU_ONLY is guaranteed to be `HOST_COHERENT`.
-
-Also, Windows drivers from all 3 **PC** GPU vendors (AMD, Intel, NVIDIA)
-currently provide `HOST_COHERENT` flag on all memory types that are
-`HOST_VISIBLE`, so on this platform you may not need to bother.
-
-\section memory_mapping_finding_if_memory_mappable Finding out if memory is mappable
-
-It may happen that your allocation ends up in memory that is `HOST_VISIBLE` (available for mapping)
-despite it wasn't explicitly requested.
-For example, application may work on integrated graphics with unified memory (like Intel) or
-allocation from video memory might have failed, so the library chose system memory as fallback.
-
-You can detect this case and map such allocation to access its memory on CPU directly,
-instead of launching a transfer operation.
-In order to do that: inspect `allocInfo.memoryType`, call vmaGetMemoryTypeProperties(),
-and look for `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` flag in properties of that memory type.
-
-\code
-VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufCreateInfo.size = sizeof(ConstantBuffer);
-bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-allocCreateInfo.preferredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
-
-VkBuffer buf;
-VmaAllocation alloc;
-VmaAllocationInfo allocInfo;
-vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-
-VkMemoryPropertyFlags memFlags;
-vmaGetMemoryTypeProperties(allocator, allocInfo.memoryType, &memFlags);
-if((memFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)
-{
- // Allocation ended up in mappable memory. You can map it and access it directly.
- void* mappedData;
- vmaMapMemory(allocator, alloc, &mappedData);
- memcpy(mappedData, &constantBufferData, sizeof(constantBufferData));
- vmaUnmapMemory(allocator, alloc);
-}
-else
-{
- // Allocation ended up in non-mappable memory.
- // You need to create CPU-side buffer in VMA_MEMORY_USAGE_CPU_ONLY and make a transfer.
-}
-\endcode
-
-You can even use #VMA_ALLOCATION_CREATE_MAPPED_BIT flag while creating allocations
-that are not necessarily `HOST_VISIBLE` (e.g. using #VMA_MEMORY_USAGE_GPU_ONLY).
-If the allocation ends up in memory type that is `HOST_VISIBLE`, it will be persistently mapped and you can use it directly.
-If not, the flag is just ignored.
-Example:
-
-\code
-VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufCreateInfo.size = sizeof(ConstantBuffer);
-bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-allocCreateInfo.flags = VMA_ALLOCATION_CREATE_MAPPED_BIT;
-
-VkBuffer buf;
-VmaAllocation alloc;
-VmaAllocationInfo allocInfo;
-vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-
-if(allocInfo.pMappedData != nullptr)
-{
- // Allocation ended up in mappable memory.
- // It's persistently mapped. You can access it directly.
- memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData));
-}
-else
-{
- // Allocation ended up in non-mappable memory.
- // You need to create CPU-side buffer in VMA_MEMORY_USAGE_CPU_ONLY and make a transfer.
-}
-\endcode
-
-
-\page staying_within_budget Staying within budget
-
-When developing a graphics-intensive game or program, it is important to avoid allocating
-more GPU memory than it's physically available. When the memory is over-committed,
-various bad things can happen, depending on the specific GPU, graphics driver, and
-operating system:
-
-- It may just work without any problems.
-- The application may slow down because some memory blocks are moved to system RAM
- and the GPU has to access them through PCI Express bus.
-- A new allocation may take very long time to complete, even few seconds, and possibly
- freeze entire system.
-- The new allocation may fail with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
-- It may even result in GPU crash (TDR), observed as `VK_ERROR_DEVICE_LOST`
- returned somewhere later.
-
-\section staying_within_budget_querying_for_budget Querying for budget
-
-To query for current memory usage and available budget, use function vmaGetBudget().
-Returned structure #VmaBudget contains quantities expressed in bytes, per Vulkan memory heap.
-
-Please note that this function returns different information and works faster than
-vmaCalculateStats(). vmaGetBudget() can be called every frame or even before every
-allocation, while vmaCalculateStats() is intended to be used rarely,
-only to obtain statistical information, e.g. for debugging purposes.
-
-It is recommended to use <b>VK_EXT_memory_budget</b> device extension to obtain information
-about the budget from Vulkan device. VMA is able to use this extension automatically.
-When not enabled, the allocator behaves same way, but then it estimates current usage
-and available budget based on its internal information and Vulkan memory heap sizes,
-which may be less precise. In order to use this extension:
-
-1. Make sure extensions VK_EXT_memory_budget and VK_KHR_get_physical_device_properties2
- required by it are available and enable them. Please note that the first is a device
- extension and the second is instance extension!
-2. Use flag #VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT when creating #VmaAllocator object.
-3. Make sure to call vmaSetCurrentFrameIndex() every frame. Budget is queried from
- Vulkan inside of it to avoid overhead of querying it with every allocation.
-
-\section staying_within_budget_controlling_memory_usage Controlling memory usage
-
-There are many ways in which you can try to stay within the budget.
-
-First, when making new allocation requires allocating a new memory block, the library
-tries not to exceed the budget automatically. If a block with default recommended size
-(e.g. 256 MB) would go over budget, a smaller block is allocated, possibly even
-dedicated memory for just this resource.
-
-If the size of the requested resource plus current memory usage is more than the
-budget, by default the library still tries to create it, leaving it to the Vulkan
-implementation whether the allocation succeeds or fails. You can change this behavior
-by using #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag. With it, the allocation is
-not made if it would exceed the budget or if the budget is already exceeded.
-Some other allocations become lost instead to make room for it, if the mechanism of
-[lost allocations](@ref lost_allocations) is used.
-If that is not possible, the allocation fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
-Example usage pattern may be to pass the #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag
-when creating resources that are not essential for the application (e.g. the texture
-of a specific object) and not to pass it when creating critically important resources
-(e.g. render targets).
-
-Finally, you can also use #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT flag to make sure
-a new allocation is created only when it fits inside one of the existing memory blocks.
-If it would require to allocate a new block, if fails instead with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
-This also ensures that the function call is very fast because it never goes to Vulkan
-to obtain a new block.
-
-Please note that creating \ref custom_memory_pools with VmaPoolCreateInfo::minBlockCount
-set to more than 0 will try to allocate memory blocks without checking whether they
-fit within budget.
-
-
-\page resource_aliasing Resource aliasing (overlap)
-
-New explicit graphics APIs (Vulkan and Direct3D 12), thanks to manual memory
-management, give an opportunity to alias (overlap) multiple resources in the
-same region of memory - a feature not available in the old APIs (Direct3D 11, OpenGL).
-It can be useful to save video memory, but it must be used with caution.
-
-For example, if you know the flow of your whole render frame in advance, you
-are going to use some intermediate textures or buffers only during a small range of render passes,
-and you know these ranges don't overlap in time, you can bind these resources to
-the same place in memory, even if they have completely different parameters (width, height, format etc.).
-
-![Resource aliasing (overlap)](../gfx/Aliasing.png)
-
-Such scenario is possible using VMA, but you need to create your images manually.
-Then you need to calculate parameters of an allocation to be made using formula:
-
-- allocation size = max(size of each image)
-- allocation alignment = max(alignment of each image)
-- allocation memoryTypeBits = bitwise AND(memoryTypeBits of each image)
-
-Following example shows two different images bound to the same place in memory,
-allocated to fit largest of them.
-
-\code
-// A 512x512 texture to be sampled.
-VkImageCreateInfo img1CreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
-img1CreateInfo.imageType = VK_IMAGE_TYPE_2D;
-img1CreateInfo.extent.width = 512;
-img1CreateInfo.extent.height = 512;
-img1CreateInfo.extent.depth = 1;
-img1CreateInfo.mipLevels = 10;
-img1CreateInfo.arrayLayers = 1;
-img1CreateInfo.format = VK_FORMAT_R8G8B8A8_SRGB;
-img1CreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
-img1CreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-img1CreateInfo.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
-img1CreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
-
-// A full screen texture to be used as color attachment.
-VkImageCreateInfo img2CreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
-img2CreateInfo.imageType = VK_IMAGE_TYPE_2D;
-img2CreateInfo.extent.width = 1920;
-img2CreateInfo.extent.height = 1080;
-img2CreateInfo.extent.depth = 1;
-img2CreateInfo.mipLevels = 1;
-img2CreateInfo.arrayLayers = 1;
-img2CreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
-img2CreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
-img2CreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
-img2CreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
-img2CreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
-
-VkImage img1;
-res = vkCreateImage(device, &img1CreateInfo, nullptr, &img1);
-VkImage img2;
-res = vkCreateImage(device, &img2CreateInfo, nullptr, &img2);
-
-VkMemoryRequirements img1MemReq;
-vkGetImageMemoryRequirements(device, img1, &img1MemReq);
-VkMemoryRequirements img2MemReq;
-vkGetImageMemoryRequirements(device, img2, &img2MemReq);
-
-VkMemoryRequirements finalMemReq = {};
-finalMemReq.size = std::max(img1MemReq.size, img2MemReq.size);
-finalMemReq.alignment = std::max(img1MemReq.alignment, img2MemReq.alignment);
-finalMemReq.memoryTypeBits = img1MemReq.memoryTypeBits & img2MemReq.memoryTypeBits;
-// Validate if(finalMemReq.memoryTypeBits != 0)
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-
-VmaAllocation alloc;
-res = vmaAllocateMemory(allocator, &finalMemReq, &allocCreateInfo, &alloc, nullptr);
-
-res = vmaBindImageMemory(allocator, alloc, img1);
-res = vmaBindImageMemory(allocator, alloc, img2);
-
-// You can use img1, img2 here, but not at the same time!
-
-vmaFreeMemory(allocator, alloc);
-vkDestroyImage(allocator, img2, nullptr);
-vkDestroyImage(allocator, img1, nullptr);
-\endcode
-
-Remember that using resources that alias in memory requires proper synchronization.
-You need to issue a memory barrier to make sure commands that use `img1` and `img2`
-don't overlap on GPU timeline.
-You also need to treat a resource after aliasing as uninitialized - containing garbage data.
-For example, if you use `img1` and then want to use `img2`, you need to issue
-an image memory barrier for `img2` with `oldLayout` = `VK_IMAGE_LAYOUT_UNDEFINED`.
-
-Additional considerations:
-
-- Vulkan also allows to interpret contents of memory between aliasing resources consistently in some cases.
-See chapter 11.8. "Memory Aliasing" of Vulkan specification or `VK_IMAGE_CREATE_ALIAS_BIT` flag.
-- You can create more complex layout where different images and buffers are bound
-at different offsets inside one large allocation. For example, one can imagine
-a big texture used in some render passes, aliasing with a set of many small buffers
-used between in some further passes. To bind a resource at non-zero offset of an allocation,
-use vmaBindBufferMemory2() / vmaBindImageMemory2().
-- Before allocating memory for the resources you want to alias, check `memoryTypeBits`
-returned in memory requirements of each resource to make sure the bits overlap.
-Some GPUs may expose multiple memory types suitable e.g. only for buffers or
-images with `COLOR_ATTACHMENT` usage, so the sets of memory types supported by your
-resources may be disjoint. Aliasing them is not possible in that case.
-
-
-\page custom_memory_pools Custom memory pools
-
-A memory pool contains a number of `VkDeviceMemory` blocks.
-The library automatically creates and manages default pool for each memory type available on the device.
-Default memory pool automatically grows in size.
-Size of allocated blocks is also variable and managed automatically.
-
-You can create custom pool and allocate memory out of it.
-It can be useful if you want to:
-
-- Keep certain kind of allocations separate from others.
-- Enforce particular, fixed size of Vulkan memory blocks.
-- Limit maximum amount of Vulkan memory allocated for that pool.
-- Reserve minimum or fixed amount of Vulkan memory always preallocated for that pool.
-
-To use custom memory pools:
-
--# Fill VmaPoolCreateInfo structure.
--# Call vmaCreatePool() to obtain #VmaPool handle.
--# When making an allocation, set VmaAllocationCreateInfo::pool to this handle.
- You don't need to specify any other parameters of this structure, like `usage`.
-
-Example:
-
-\code
-// Create a pool that can have at most 2 blocks, 128 MiB each.
-VmaPoolCreateInfo poolCreateInfo = {};
-poolCreateInfo.memoryTypeIndex = ...
-poolCreateInfo.blockSize = 128ull * 1024 * 1024;
-poolCreateInfo.maxBlockCount = 2;
-
-VmaPool pool;
-vmaCreatePool(allocator, &poolCreateInfo, &pool);
-
-// Allocate a buffer out of it.
-VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-bufCreateInfo.size = 1024;
-bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.pool = pool;
-
-VkBuffer buf;
-VmaAllocation alloc;
-VmaAllocationInfo allocInfo;
-vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
-\endcode
-
-You have to free all allocations made from this pool before destroying it.
-
-\code
-vmaDestroyBuffer(allocator, buf, alloc);
-vmaDestroyPool(allocator, pool);
-\endcode
-
-\section custom_memory_pools_MemTypeIndex Choosing memory type index
-
-When creating a pool, you must explicitly specify memory type index.
-To find the one suitable for your buffers or images, you can use helper functions
-vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo().
-You need to provide structures with example parameters of buffers or images
-that you are going to create in that pool.
-
-\code
-VkBufferCreateInfo exampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-exampleBufCreateInfo.size = 1024; // Whatever.
-exampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT; // Change if needed.
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY; // Change if needed.
-
-uint32_t memTypeIndex;
-vmaFindMemoryTypeIndexForBufferInfo(allocator, &exampleBufCreateInfo, &allocCreateInfo, &memTypeIndex);
-
-VmaPoolCreateInfo poolCreateInfo = {};
-poolCreateInfo.memoryTypeIndex = memTypeIndex;
-// ...
-\endcode
-
-When creating buffers/images allocated in that pool, provide following parameters:
-
-- `VkBufferCreateInfo`: Prefer to pass same parameters as above.
- Otherwise you risk creating resources in a memory type that is not suitable for them, which may result in undefined behavior.
- Using different `VK_BUFFER_USAGE_` flags may work, but you shouldn't create images in a pool intended for buffers
- or the other way around.
-- VmaAllocationCreateInfo: You don't need to pass same parameters. Fill only `pool` member.
- Other members are ignored anyway.
-
-\section linear_algorithm Linear allocation algorithm
-
-Each Vulkan memory block managed by this library has accompanying metadata that
-keeps track of used and unused regions. By default, the metadata structure and
-algorithm tries to find best place for new allocations among free regions to
-optimize memory usage. This way you can allocate and free objects in any order.
-
-![Default allocation algorithm](../gfx/Linear_allocator_1_algo_default.png)
-
-Sometimes there is a need to use simpler, linear allocation algorithm. You can
-create custom pool that uses such algorithm by adding flag
-#VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT to VmaPoolCreateInfo::flags while creating
-#VmaPool object. Then an alternative metadata management is used. It always
-creates new allocations after last one and doesn't reuse free regions after
-allocations freed in the middle. It results in better allocation performance and
-less memory consumed by metadata.
-
-![Linear allocation algorithm](../gfx/Linear_allocator_2_algo_linear.png)
-
-With this one flag, you can create a custom pool that can be used in many ways:
-free-at-once, stack, double stack, and ring buffer. See below for details.
-
-\subsection linear_algorithm_free_at_once Free-at-once
-
-In a pool that uses linear algorithm, you still need to free all the allocations
-individually, e.g. by using vmaFreeMemory() or vmaDestroyBuffer(). You can free
-them in any order. New allocations are always made after last one - free space
-in the middle is not reused. However, when you release all the allocation and
-the pool becomes empty, allocation starts from the beginning again. This way you
-can use linear algorithm to speed up creation of allocations that you are going
-to release all at once.
-
-![Free-at-once](../gfx/Linear_allocator_3_free_at_once.png)
-
-This mode is also available for pools created with VmaPoolCreateInfo::maxBlockCount
-value that allows multiple memory blocks.
-
-\subsection linear_algorithm_stack Stack
-
-When you free an allocation that was created last, its space can be reused.
-Thanks to this, if you always release allocations in the order opposite to their
-creation (LIFO - Last In First Out), you can achieve behavior of a stack.
-
-![Stack](../gfx/Linear_allocator_4_stack.png)
-
-This mode is also available for pools created with VmaPoolCreateInfo::maxBlockCount
-value that allows multiple memory blocks.
-
-\subsection linear_algorithm_double_stack Double stack
-
-The space reserved by a custom pool with linear algorithm may be used by two
-stacks:
-
-- First, default one, growing up from offset 0.
-- Second, "upper" one, growing down from the end towards lower offsets.
-
-To make allocation from upper stack, add flag #VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT
-to VmaAllocationCreateInfo::flags.
-
-![Double stack](../gfx/Linear_allocator_7_double_stack.png)
-
-Double stack is available only in pools with one memory block -
-VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined.
-
-When the two stacks' ends meet so there is not enough space between them for a
-new allocation, such allocation fails with usual
-`VK_ERROR_OUT_OF_DEVICE_MEMORY` error.
-
-\subsection linear_algorithm_ring_buffer Ring buffer
-
-When you free some allocations from the beginning and there is not enough free space
-for a new one at the end of a pool, allocator's "cursor" wraps around to the
-beginning and starts allocation there. Thanks to this, if you always release
-allocations in the same order as you created them (FIFO - First In First Out),
-you can achieve behavior of a ring buffer / queue.
-
-![Ring buffer](../gfx/Linear_allocator_5_ring_buffer.png)
-
-Pools with linear algorithm support [lost allocations](@ref lost_allocations) when used as ring buffer.
-If there is not enough free space for a new allocation, but existing allocations
-from the front of the queue can become lost, they become lost and the allocation
-succeeds.
-
-![Ring buffer with lost allocations](../gfx/Linear_allocator_6_ring_buffer_lost.png)
-
-Ring buffer is available only in pools with one memory block -
-VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined.
-
-\section buddy_algorithm Buddy allocation algorithm
-
-There is another allocation algorithm that can be used with custom pools, called
-"buddy". Its internal data structure is based on a tree of blocks, each having
-size that is a power of two and a half of its parent's size. When you want to
-allocate memory of certain size, a free node in the tree is located. If it's too
-large, it is recursively split into two halves (called "buddies"). However, if
-requested allocation size is not a power of two, the size of a tree node is
-aligned up to the nearest power of two and the remaining space is wasted. When
-two buddy nodes become free, they are merged back into one larger node.
-
-![Buddy allocator](../gfx/Buddy_allocator.png)
-
-The advantage of buddy allocation algorithm over default algorithm is faster
-allocation and deallocation, as well as smaller external fragmentation. The
-disadvantage is more wasted space (internal fragmentation).
-
-For more information, please read ["Buddy memory allocation" on Wikipedia](https://en.wikipedia.org/wiki/Buddy_memory_allocation)
-or other sources that describe this concept in general.
-
-To use buddy allocation algorithm with a custom pool, add flag
-#VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT to VmaPoolCreateInfo::flags while creating
-#VmaPool object.
-
-Several limitations apply to pools that use buddy algorithm:
-
-- It is recommended to use VmaPoolCreateInfo::blockSize that is a power of two.
- Otherwise, only largest power of two smaller than the size is used for
- allocations. The remaining space always stays unused.
-- [Margins](@ref debugging_memory_usage_margins) and
- [corruption detection](@ref debugging_memory_usage_corruption_detection)
- don't work in such pools.
-- [Lost allocations](@ref lost_allocations) don't work in such pools. You can
- use them, but they never become lost. Support may be added in the future.
-- [Defragmentation](@ref defragmentation) doesn't work with allocations made from
- such pool.
-
-\page defragmentation Defragmentation
-
-Interleaved allocations and deallocations of many objects of varying size can
-cause fragmentation over time, which can lead to a situation where the library is unable
-to find a continuous range of free memory for a new allocation despite there is
-enough free space, just scattered across many small free ranges between existing
-allocations.
-
-To mitigate this problem, you can use defragmentation feature:
-structure #VmaDefragmentationInfo2, function vmaDefragmentationBegin(), vmaDefragmentationEnd().
-Given set of allocations,
-this function can move them to compact used memory, ensure more continuous free
-space and possibly also free some `VkDeviceMemory` blocks.
-
-What the defragmentation does is:
-
-- Updates #VmaAllocation objects to point to new `VkDeviceMemory` and offset.
- After allocation has been moved, its VmaAllocationInfo::deviceMemory and/or
- VmaAllocationInfo::offset changes. You must query them again using
- vmaGetAllocationInfo() if you need them.
-- Moves actual data in memory.
-
-What it doesn't do, so you need to do it yourself:
-
-- Recreate buffers and images that were bound to allocations that were defragmented and
- bind them with their new places in memory.
- You must use `vkDestroyBuffer()`, `vkDestroyImage()`,
- `vkCreateBuffer()`, `vkCreateImage()`, vmaBindBufferMemory(), vmaBindImageMemory()
- for that purpose and NOT vmaDestroyBuffer(),
- vmaDestroyImage(), vmaCreateBuffer(), vmaCreateImage(), because you don't need to
- destroy or create allocation objects!
-- Recreate views and update descriptors that point to these buffers and images.
-
-\section defragmentation_cpu Defragmenting CPU memory
-
-Following example demonstrates how you can run defragmentation on CPU.
-Only allocations created in memory types that are `HOST_VISIBLE` can be defragmented.
-Others are ignored.
-
-The way it works is:
-
-- It temporarily maps entire memory blocks when necessary.
-- It moves data using `memmove()` function.
-
-\code
-// Given following variables already initialized:
-VkDevice device;
-VmaAllocator allocator;
-std::vector<VkBuffer> buffers;
-std::vector<VmaAllocation> allocations;
-
-
-const uint32_t allocCount = (uint32_t)allocations.size();
-std::vector<VkBool32> allocationsChanged(allocCount);
-
-VmaDefragmentationInfo2 defragInfo = {};
-defragInfo.allocationCount = allocCount;
-defragInfo.pAllocations = allocations.data();
-defragInfo.pAllocationsChanged = allocationsChanged.data();
-defragInfo.maxCpuBytesToMove = VK_WHOLE_SIZE; // No limit.
-defragInfo.maxCpuAllocationsToMove = UINT32_MAX; // No limit.
-
-VmaDefragmentationContext defragCtx;
-vmaDefragmentationBegin(allocator, &defragInfo, nullptr, &defragCtx);
-vmaDefragmentationEnd(allocator, defragCtx);
-
-for(uint32_t i = 0; i < allocCount; ++i)
-{
- if(allocationsChanged[i])
- {
- // Destroy buffer that is immutably bound to memory region which is no longer valid.
- vkDestroyBuffer(device, buffers[i], nullptr);
-
- // Create new buffer with same parameters.
- VkBufferCreateInfo bufferInfo = ...;
- vkCreateBuffer(device, &bufferInfo, nullptr, &buffers[i]);
-
- // You can make dummy call to vkGetBufferMemoryRequirements here to silence validation layer warning.
-
- // Bind new buffer to new memory region. Data contained in it is already moved.
- VmaAllocationInfo allocInfo;
- vmaGetAllocationInfo(allocator, allocations[i], &allocInfo);
- vmaBindBufferMemory(allocator, allocations[i], buffers[i]);
- }
-}
-\endcode
-
-Setting VmaDefragmentationInfo2::pAllocationsChanged is optional.
-This output array tells whether particular allocation in VmaDefragmentationInfo2::pAllocations at the same index
-has been modified during defragmentation.
-You can pass null, but you then need to query every allocation passed to defragmentation
-for new parameters using vmaGetAllocationInfo() if you might need to recreate and rebind a buffer or image associated with it.
-
-If you use [Custom memory pools](@ref choosing_memory_type_custom_memory_pools),
-you can fill VmaDefragmentationInfo2::poolCount and VmaDefragmentationInfo2::pPools
-instead of VmaDefragmentationInfo2::allocationCount and VmaDefragmentationInfo2::pAllocations
-to defragment all allocations in given pools.
-You cannot use VmaDefragmentationInfo2::pAllocationsChanged in that case.
-You can also combine both methods.
-
-\section defragmentation_gpu Defragmenting GPU memory
-
-It is also possible to defragment allocations created in memory types that are not `HOST_VISIBLE`.
-To do that, you need to pass a command buffer that meets requirements as described in
-VmaDefragmentationInfo2::commandBuffer. The way it works is:
-
-- It creates temporary buffers and binds them to entire memory blocks when necessary.
-- It issues `vkCmdCopyBuffer()` to passed command buffer.
-
-Example:
-
-\code
-// Given following variables already initialized:
-VkDevice device;
-VmaAllocator allocator;
-VkCommandBuffer commandBuffer;
-std::vector<VkBuffer> buffers;
-std::vector<VmaAllocation> allocations;
-
-
-const uint32_t allocCount = (uint32_t)allocations.size();
-std::vector<VkBool32> allocationsChanged(allocCount);
-
-VkCommandBufferBeginInfo cmdBufBeginInfo = ...;
-vkBeginCommandBuffer(commandBuffer, &cmdBufBeginInfo);
-
-VmaDefragmentationInfo2 defragInfo = {};
-defragInfo.allocationCount = allocCount;
-defragInfo.pAllocations = allocations.data();
-defragInfo.pAllocationsChanged = allocationsChanged.data();
-defragInfo.maxGpuBytesToMove = VK_WHOLE_SIZE; // Notice it's "GPU" this time.
-defragInfo.maxGpuAllocationsToMove = UINT32_MAX; // Notice it's "GPU" this time.
-defragInfo.commandBuffer = commandBuffer;
-
-VmaDefragmentationContext defragCtx;
-vmaDefragmentationBegin(allocator, &defragInfo, nullptr, &defragCtx);
-
-vkEndCommandBuffer(commandBuffer);
-
-// Submit commandBuffer.
-// Wait for a fence that ensures commandBuffer execution finished.
-
-vmaDefragmentationEnd(allocator, defragCtx);
-
-for(uint32_t i = 0; i < allocCount; ++i)
-{
- if(allocationsChanged[i])
- {
- // Destroy buffer that is immutably bound to memory region which is no longer valid.
- vkDestroyBuffer(device, buffers[i], nullptr);
-
- // Create new buffer with same parameters.
- VkBufferCreateInfo bufferInfo = ...;
- vkCreateBuffer(device, &bufferInfo, nullptr, &buffers[i]);
-
- // You can make dummy call to vkGetBufferMemoryRequirements here to silence validation layer warning.
-
- // Bind new buffer to new memory region. Data contained in it is already moved.
- VmaAllocationInfo allocInfo;
- vmaGetAllocationInfo(allocator, allocations[i], &allocInfo);
- vmaBindBufferMemory(allocator, allocations[i], buffers[i]);
- }
-}
-\endcode
-
-You can combine these two methods by specifying non-zero `maxGpu*` as well as `maxCpu*` parameters.
-The library automatically chooses best method to defragment each memory pool.
-
-You may try not to block your entire program to wait until defragmentation finishes,
-but do it in the background, as long as you carefully fullfill requirements described
-in function vmaDefragmentationBegin().
-
-\section defragmentation_additional_notes Additional notes
-
-It is only legal to defragment allocations bound to:
-
-- buffers
-- images created with `VK_IMAGE_CREATE_ALIAS_BIT`, `VK_IMAGE_TILING_LINEAR`, and
- being currently in `VK_IMAGE_LAYOUT_GENERAL` or `VK_IMAGE_LAYOUT_PREINITIALIZED`.
-
-Defragmentation of images created with `VK_IMAGE_TILING_OPTIMAL` or in any other
-layout may give undefined results.
-
-If you defragment allocations bound to images, new images to be bound to new
-memory region after defragmentation should be created with `VK_IMAGE_LAYOUT_PREINITIALIZED`
-and then transitioned to their original layout from before defragmentation if
-needed using an image memory barrier.
-
-While using defragmentation, you may experience validation layer warnings, which you just need to ignore.
-See [Validation layer warnings](@ref general_considerations_validation_layer_warnings).
-
-Please don't expect memory to be fully compacted after defragmentation.
-Algorithms inside are based on some heuristics that try to maximize number of Vulkan
-memory blocks to make totally empty to release them, as well as to maximize continuous
-empty space inside remaining blocks, while minimizing the number and size of allocations that
-need to be moved. Some fragmentation may still remain - this is normal.
-
-\section defragmentation_custom_algorithm Writing custom defragmentation algorithm
-
-If you want to implement your own, custom defragmentation algorithm,
-there is infrastructure prepared for that,
-but it is not exposed through the library API - you need to hack its source code.
-Here are steps needed to do this:
-
--# Main thing you need to do is to define your own class derived from base abstract
- class `VmaDefragmentationAlgorithm` and implement your version of its pure virtual methods.
- See definition and comments of this class for details.
--# Your code needs to interact with device memory block metadata.
- If you need more access to its data than it's provided by its public interface,
- declare your new class as a friend class e.g. in class `VmaBlockMetadata_Generic`.
--# If you want to create a flag that would enable your algorithm or pass some additional
- flags to configure it, add them to `VmaDefragmentationFlagBits` and use them in
- VmaDefragmentationInfo2::flags.
--# Modify function `VmaBlockVectorDefragmentationContext::Begin` to create object
- of your new class whenever needed.
-
-
-\page lost_allocations Lost allocations
-
-If your game oversubscribes video memory, if may work OK in previous-generation
-graphics APIs (DirectX 9, 10, 11, OpenGL) because resources are automatically
-paged to system RAM. In Vulkan you can't do it because when you run out of
-memory, an allocation just fails. If you have more data (e.g. textures) that can
-fit into VRAM and you don't need it all at once, you may want to upload them to
-GPU on demand and "push out" ones that are not used for a long time to make room
-for the new ones, effectively using VRAM (or a cartain memory pool) as a form of
-cache. Vulkan Memory Allocator can help you with that by supporting a concept of
-"lost allocations".
-
-To create an allocation that can become lost, include #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT
-flag in VmaAllocationCreateInfo::flags. Before using a buffer or image bound to
-such allocation in every new frame, you need to query it if it's not lost.
-To check it, call vmaTouchAllocation().
-If the allocation is lost, you should not use it or buffer/image bound to it.
-You mustn't forget to destroy this allocation and this buffer/image.
-vmaGetAllocationInfo() can also be used for checking status of the allocation.
-Allocation is lost when returned VmaAllocationInfo::deviceMemory == `VK_NULL_HANDLE`.
-
-To create an allocation that can make some other allocations lost to make room
-for it, use #VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT flag. You will
-usually use both flags #VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT and
-#VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT at the same time.
-
-Warning! Current implementation uses quite naive, brute force algorithm,
-which can make allocation calls that use #VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT
-flag quite slow. A new, more optimal algorithm and data structure to speed this
-up is planned for the future.
-
-<b>Q: When interleaving creation of new allocations with usage of existing ones,
-how do you make sure that an allocation won't become lost while it's used in the
-current frame?</b>
-
-It is ensured because vmaTouchAllocation() / vmaGetAllocationInfo() not only returns allocation
-status/parameters and checks whether it's not lost, but when it's not, it also
-atomically marks it as used in the current frame, which makes it impossible to
-become lost in that frame. It uses lockless algorithm, so it works fast and
-doesn't involve locking any internal mutex.
-
-<b>Q: What if my allocation may still be in use by the GPU when it's rendering a
-previous frame while I already submit new frame on the CPU?</b>
-
-You can make sure that allocations "touched" by vmaTouchAllocation() / vmaGetAllocationInfo() will not
-become lost for a number of additional frames back from the current one by
-specifying this number as VmaAllocatorCreateInfo::frameInUseCount (for default
-memory pool) and VmaPoolCreateInfo::frameInUseCount (for custom pool).
-
-<b>Q: How do you inform the library when new frame starts?</b>
-
-You need to call function vmaSetCurrentFrameIndex().
-
-Example code:
-
-\code
-struct MyBuffer
-{
- VkBuffer m_Buf = nullptr;
- VmaAllocation m_Alloc = nullptr;
-
- // Called when the buffer is really needed in the current frame.
- void EnsureBuffer();
-};
-
-void MyBuffer::EnsureBuffer()
-{
- // Buffer has been created.
- if(m_Buf != VK_NULL_HANDLE)
- {
- // Check if its allocation is not lost + mark it as used in current frame.
- if(vmaTouchAllocation(allocator, m_Alloc))
- {
- // It's all OK - safe to use m_Buf.
- return;
- }
- }
-
- // Buffer not yet exists or lost - destroy and recreate it.
-
- vmaDestroyBuffer(allocator, m_Buf, m_Alloc);
-
- VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
- bufCreateInfo.size = 1024;
- bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
-
- VmaAllocationCreateInfo allocCreateInfo = {};
- allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
- allocCreateInfo.flags = VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT |
- VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT;
-
- vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &m_Buf, &m_Alloc, nullptr);
-}
-\endcode
-
-When using lost allocations, you may see some Vulkan validation layer warnings
-about overlapping regions of memory bound to different kinds of buffers and
-images. This is still valid as long as you implement proper handling of lost
-allocations (like in the example above) and don't use them.
-
-You can create an allocation that is already in lost state from the beginning using function
-vmaCreateLostAllocation(). It may be useful if you need a "dummy" allocation that is not null.
-
-You can call function vmaMakePoolAllocationsLost() to set all eligible allocations
-in a specified custom pool to lost state.
-Allocations that have been "touched" in current frame or VmaPoolCreateInfo::frameInUseCount frames back
-cannot become lost.
-
-<b>Q: Can I touch allocation that cannot become lost?</b>
-
-Yes, although it has no visible effect.
-Calls to vmaGetAllocationInfo() and vmaTouchAllocation() update last use frame index
-also for allocations that cannot become lost, but the only way to observe it is to dump
-internal allocator state using vmaBuildStatsString().
-You can use this feature for debugging purposes to explicitly mark allocations that you use
-in current frame and then analyze JSON dump to see for how long each allocation stays unused.
-
-
-\page statistics Statistics
-
-This library contains functions that return information about its internal state,
-especially the amount of memory allocated from Vulkan.
-Please keep in mind that these functions need to traverse all internal data structures
-to gather these information, so they may be quite time-consuming.
-Don't call them too often.
-
-\section statistics_numeric_statistics Numeric statistics
-
-You can query for overall statistics of the allocator using function vmaCalculateStats().
-Information are returned using structure #VmaStats.
-It contains #VmaStatInfo - number of allocated blocks, number of allocations
-(occupied ranges in these blocks), number of unused (free) ranges in these blocks,
-number of bytes used and unused (but still allocated from Vulkan) and other information.
-They are summed across memory heaps, memory types and total for whole allocator.
-
-You can query for statistics of a custom pool using function vmaGetPoolStats().
-Information are returned using structure #VmaPoolStats.
-
-You can query for information about specific allocation using function vmaGetAllocationInfo().
-It fill structure #VmaAllocationInfo.
-
-\section statistics_json_dump JSON dump
-
-You can dump internal state of the allocator to a string in JSON format using function vmaBuildStatsString().
-The result is guaranteed to be correct JSON.
-It uses ANSI encoding.
-Any strings provided by user (see [Allocation names](@ref allocation_names))
-are copied as-is and properly escaped for JSON, so if they use UTF-8, ISO-8859-2 or any other encoding,
-this JSON string can be treated as using this encoding.
-It must be freed using function vmaFreeStatsString().
-
-The format of this JSON string is not part of official documentation of the library,
-but it will not change in backward-incompatible way without increasing library major version number
-and appropriate mention in changelog.
-
-The JSON string contains all the data that can be obtained using vmaCalculateStats().
-It can also contain detailed map of allocated memory blocks and their regions -
-free and occupied by allocations.
-This allows e.g. to visualize the memory or assess fragmentation.
-
-
-\page allocation_annotation Allocation names and user data
-
-\section allocation_user_data Allocation user data
-
-You can annotate allocations with your own information, e.g. for debugging purposes.
-To do that, fill VmaAllocationCreateInfo::pUserData field when creating
-an allocation. It's an opaque `void*` pointer. You can use it e.g. as a pointer,
-some handle, index, key, ordinal number or any other value that would associate
-the allocation with your custom metadata.
-
-\code
-VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
-// Fill bufferInfo...
-
-MyBufferMetadata* pMetadata = CreateBufferMetadata();
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-allocCreateInfo.pUserData = pMetadata;
-
-VkBuffer buffer;
-VmaAllocation allocation;
-vmaCreateBuffer(allocator, &bufferInfo, &allocCreateInfo, &buffer, &allocation, nullptr);
-\endcode
-
-The pointer may be later retrieved as VmaAllocationInfo::pUserData:
-
-\code
-VmaAllocationInfo allocInfo;
-vmaGetAllocationInfo(allocator, allocation, &allocInfo);
-MyBufferMetadata* pMetadata = (MyBufferMetadata*)allocInfo.pUserData;
-\endcode
-
-It can also be changed using function vmaSetAllocationUserData().
-
-Values of (non-zero) allocations' `pUserData` are printed in JSON report created by
-vmaBuildStatsString(), in hexadecimal form.
-
-\section allocation_names Allocation names
-
-There is alternative mode available where `pUserData` pointer is used to point to
-a null-terminated string, giving a name to the allocation. To use this mode,
-set #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT flag in VmaAllocationCreateInfo::flags.
-Then `pUserData` passed as VmaAllocationCreateInfo::pUserData or argument to
-vmaSetAllocationUserData() must be either null or pointer to a null-terminated string.
-The library creates internal copy of the string, so the pointer you pass doesn't need
-to be valid for whole lifetime of the allocation. You can free it after the call.
-
-\code
-VkImageCreateInfo imageInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
-// Fill imageInfo...
-
-std::string imageName = "Texture: ";
-imageName += fileName;
-
-VmaAllocationCreateInfo allocCreateInfo = {};
-allocCreateInfo.usage = VMA_MEMORY_USAGE_GPU_ONLY;
-allocCreateInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT;
-allocCreateInfo.pUserData = imageName.c_str();
-
-VkImage image;
-VmaAllocation allocation;
-vmaCreateImage(allocator, &imageInfo, &allocCreateInfo, &image, &allocation, nullptr);
-\endcode
-
-The value of `pUserData` pointer of the allocation will be different than the one
-you passed when setting allocation's name - pointing to a buffer managed
-internally that holds copy of the string.
-
-\code
-VmaAllocationInfo allocInfo;
-vmaGetAllocationInfo(allocator, allocation, &allocInfo);
-const char* imageName = (const char*)allocInfo.pUserData;
-printf("Image name: %s\n", imageName);
-\endcode
-
-That string is also printed in JSON report created by vmaBuildStatsString().
-
-\note Passing string name to VMA allocation doesn't automatically set it to the Vulkan buffer or image created with it.
-You must do it manually using an extension like VK_EXT_debug_utils, which is independent of this library.
-
-
-\page debugging_memory_usage Debugging incorrect memory usage
-
-If you suspect a bug with memory usage, like usage of uninitialized memory or
-memory being overwritten out of bounds of an allocation,
-you can use debug features of this library to verify this.
-
-\section debugging_memory_usage_initialization Memory initialization
-
-If you experience a bug with incorrect and nondeterministic data in your program and you suspect uninitialized memory to be used,
-you can enable automatic memory initialization to verify this.
-To do it, define macro `VMA_DEBUG_INITIALIZE_ALLOCATIONS` to 1.
-
-\code
-#define VMA_DEBUG_INITIALIZE_ALLOCATIONS 1
-#include "vk_mem_alloc.h"
-\endcode
-
-It makes memory of all new allocations initialized to bit pattern `0xDCDCDCDC`.
-Before an allocation is destroyed, its memory is filled with bit pattern `0xEFEFEFEF`.
-Memory is automatically mapped and unmapped if necessary.
-
-If you find these values while debugging your program, good chances are that you incorrectly
-read Vulkan memory that is allocated but not initialized, or already freed, respectively.
-
-Memory initialization works only with memory types that are `HOST_VISIBLE`.
-It works also with dedicated allocations.
-It doesn't work with allocations created with #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT flag,
-as they cannot be mapped.
-
-\section debugging_memory_usage_margins Margins
-
-By default, allocations are laid out in memory blocks next to each other if possible
-(considering required alignment, `bufferImageGranularity`, and `nonCoherentAtomSize`).
-
-![Allocations without margin](../gfx/Margins_1.png)
-
-Define macro `VMA_DEBUG_MARGIN` to some non-zero value (e.g. 16) to enforce specified
-number of bytes as a margin before and after every allocation.
-
-\code
-#define VMA_DEBUG_MARGIN 16
-#include "vk_mem_alloc.h"
-\endcode
-
-![Allocations with margin](../gfx/Margins_2.png)
-
-If your bug goes away after enabling margins, it means it may be caused by memory
-being overwritten outside of allocation boundaries. It is not 100% certain though.
-Change in application behavior may also be caused by different order and distribution
-of allocations across memory blocks after margins are applied.
-
-The margin is applied also before first and after last allocation in a block.
-It may occur only once between two adjacent allocations.
-
-Margins work with all types of memory.
-
-Margin is applied only to allocations made out of memory blocks and not to dedicated
-allocations, which have their own memory block of specific size.
-It is thus not applied to allocations made using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT flag
-or those automatically decided to put into dedicated allocations, e.g. due to its
-large size or recommended by VK_KHR_dedicated_allocation extension.
-Margins are also not active in custom pools created with #VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT flag.
-
-Margins appear in [JSON dump](@ref statistics_json_dump) as part of free space.
-
-Note that enabling margins increases memory usage and fragmentation.
-
-\section debugging_memory_usage_corruption_detection Corruption detection
-
-You can additionally define macro `VMA_DEBUG_DETECT_CORRUPTION` to 1 to enable validation
-of contents of the margins.
-
-\code
-#define VMA_DEBUG_MARGIN 16
-#define VMA_DEBUG_DETECT_CORRUPTION 1
-#include "vk_mem_alloc.h"
-\endcode
-
-When this feature is enabled, number of bytes specified as `VMA_DEBUG_MARGIN`
-(it must be multiply of 4) before and after every allocation is filled with a magic number.
-This idea is also know as "canary".
-Memory is automatically mapped and unmapped if necessary.
-
-This number is validated automatically when the allocation is destroyed.
-If it's not equal to the expected value, `VMA_ASSERT()` is executed.
-It clearly means that either CPU or GPU overwritten the memory outside of boundaries of the allocation,
-which indicates a serious bug.
-
-You can also explicitly request checking margins of all allocations in all memory blocks
-that belong to specified memory types by using function vmaCheckCorruption(),
-or in memory blocks that belong to specified custom pool, by using function
-vmaCheckPoolCorruption().
-
-Margin validation (corruption detection) works only for memory types that are
-`HOST_VISIBLE` and `HOST_COHERENT`.
-
-
-\page record_and_replay Record and replay
-
-\section record_and_replay_introduction Introduction
-
-While using the library, sequence of calls to its functions together with their
-parameters can be recorded to a file and later replayed using standalone player
-application. It can be useful to:
-
-- Test correctness - check if same sequence of calls will not cause crash or
- failures on a target platform.
-- Gather statistics - see number of allocations, peak memory usage, number of
- calls etc.
-- Benchmark performance - see how much time it takes to replay the whole
- sequence.
-
-\section record_and_replay_usage Usage
-
-Recording functionality is disabled by default.
-To enable it, define following macro before every include of this library:
-
-\code
-#define VMA_RECORDING_ENABLED 1
-\endcode
-
-<b>To record sequence of calls to a file:</b> Fill in
-VmaAllocatorCreateInfo::pRecordSettings member while creating #VmaAllocator
-object. File is opened and written during whole lifetime of the allocator.
-
-<b>To replay file:</b> Use VmaReplay - standalone command-line program.
-Precompiled binary can be found in "bin" directory.
-Its source can be found in "src/VmaReplay" directory.
-Its project is generated by Premake.
-Command line syntax is printed when the program is launched without parameters.
-Basic usage:
-
- VmaReplay.exe MyRecording.csv
-
-<b>Documentation of file format</b> can be found in file: "docs/Recording file format.md".
-It's a human-readable, text file in CSV format (Comma Separated Values).
-
-\section record_and_replay_additional_considerations Additional considerations
-
-- Replaying file that was recorded on a different GPU (with different parameters
- like `bufferImageGranularity`, `nonCoherentAtomSize`, and especially different
- set of memory heaps and types) may give different performance and memory usage
- results, as well as issue some warnings and errors.
-- Current implementation of recording in VMA, as well as VmaReplay application, is
- coded and tested only on Windows. Inclusion of recording code is driven by
- `VMA_RECORDING_ENABLED` macro. Support for other platforms should be easy to
- add. Contributions are welcomed.
-
-
-\page usage_patterns Recommended usage patterns
-
-See also slides from talk:
-[Sawicki, Adam. Advanced Graphics Techniques Tutorial: Memory management in Vulkan and DX12. Game Developers Conference, 2018](https://www.gdcvault.com/play/1025458/Advanced-Graphics-Techniques-Tutorial-New)
-
-
-\section usage_patterns_common_mistakes Common mistakes
-
-<b>Use of CPU_TO_GPU instead of CPU_ONLY memory</b>
-
-#VMA_MEMORY_USAGE_CPU_TO_GPU is recommended only for resources that will be
-mapped and written by the CPU, as well as read directly by the GPU - like some
-buffers or textures updated every frame (dynamic). If you create a staging copy
-of a resource to be written by CPU and then used as a source of transfer to
-another resource placed in the GPU memory, that staging resource should be
-created with #VMA_MEMORY_USAGE_CPU_ONLY. Please read the descriptions of these
-enums carefully for details.
-
-<b>Unnecessary use of custom pools</b>
-
-\ref custom_memory_pools may be useful for special purposes - when you want to
-keep certain type of resources separate e.g. to reserve minimum amount of memory
-for them, limit maximum amount of memory they can occupy, or make some of them
-push out the other through the mechanism of \ref lost_allocations. For most
-resources this is not needed and so it is not recommended to create #VmaPool
-objects and allocations out of them. Allocating from the default pool is sufficient.
-
-\section usage_patterns_simple Simple patterns
-
-\subsection usage_patterns_simple_render_targets Render targets
-
-<b>When:</b>
-Any resources that you frequently write and read on GPU,
-e.g. images used as color attachments (aka "render targets"), depth-stencil attachments,
-images/buffers used as storage image/buffer (aka "Unordered Access View (UAV)").
-
-<b>What to do:</b>
-Create them in video memory that is fastest to access from GPU using
-#VMA_MEMORY_USAGE_GPU_ONLY.
-
-Consider using [VK_KHR_dedicated_allocation](@ref vk_khr_dedicated_allocation) extension
-and/or manually creating them as dedicated allocations using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT,
-especially if they are large or if you plan to destroy and recreate them e.g. when
-display resolution changes.
-Prefer to create such resources first and all other GPU resources (like textures and vertex buffers) later.
-
-\subsection usage_patterns_simple_immutable_resources Immutable resources
-
-<b>When:</b>
-Any resources that you fill on CPU only once (aka "immutable") or infrequently
-and then read frequently on GPU,
-e.g. textures, vertex and index buffers, constant buffers that don't change often.
-
-<b>What to do:</b>
-Create them in video memory that is fastest to access from GPU using
-#VMA_MEMORY_USAGE_GPU_ONLY.
-
-To initialize content of such resource, create a CPU-side (aka "staging") copy of it
-in system memory - #VMA_MEMORY_USAGE_CPU_ONLY, map it, fill it,
-and submit a transfer from it to the GPU resource.
-You can keep the staging copy if you need it for another upload transfer in the future.
-If you don't, you can destroy it or reuse this buffer for uploading different resource
-after the transfer finishes.
-
-Prefer to create just buffers in system memory rather than images, even for uploading textures.
-Use `vkCmdCopyBufferToImage()`.
-Dont use images with `VK_IMAGE_TILING_LINEAR`.
-
-\subsection usage_patterns_dynamic_resources Dynamic resources
-
-<b>When:</b>
-Any resources that change frequently (aka "dynamic"), e.g. every frame or every draw call,
-written on CPU, read on GPU.
-
-<b>What to do:</b>
-Create them using #VMA_MEMORY_USAGE_CPU_TO_GPU.
-You can map it and write to it directly on CPU, as well as read from it on GPU.
-
-This is a more complex situation. Different solutions are possible,
-and the best one depends on specific GPU type, but you can use this simple approach for the start.
-Prefer to write to such resource sequentially (e.g. using `memcpy`).
-Don't perform random access or any reads from it on CPU, as it may be very slow.
-Also note that textures written directly from the host through a mapped pointer need to be in LINEAR not OPTIMAL layout.
-
-\subsection usage_patterns_readback Readback
-
-<b>When:</b>
-Resources that contain data written by GPU that you want to read back on CPU,
-e.g. results of some computations.
-
-<b>What to do:</b>
-Create them using #VMA_MEMORY_USAGE_GPU_TO_CPU.
-You can write to them directly on GPU, as well as map and read them on CPU.
-
-\section usage_patterns_advanced Advanced patterns
-
-\subsection usage_patterns_integrated_graphics Detecting integrated graphics
-
-You can support integrated graphics (like Intel HD Graphics, AMD APU) better
-by detecting it in Vulkan.
-To do it, call `vkGetPhysicalDeviceProperties()`, inspect
-`VkPhysicalDeviceProperties::deviceType` and look for `VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU`.
-When you find it, you can assume that memory is unified and all memory types are comparably fast
-to access from GPU, regardless of `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
-
-You can then sum up sizes of all available memory heaps and treat them as useful for
-your GPU resources, instead of only `DEVICE_LOCAL` ones.
-You can also prefer to create your resources in memory types that are `HOST_VISIBLE` to map them
-directly instead of submitting explicit transfer (see below).
-
-\subsection usage_patterns_direct_vs_transfer Direct access versus transfer
-
-For resources that you frequently write on CPU and read on GPU, many solutions are possible:
-
--# Create one copy in video memory using #VMA_MEMORY_USAGE_GPU_ONLY,
- second copy in system memory using #VMA_MEMORY_USAGE_CPU_ONLY and submit explicit transfer each time.
--# Create just a single copy using #VMA_MEMORY_USAGE_CPU_TO_GPU, map it and fill it on CPU,
- read it directly on GPU.
--# Create just a single copy using #VMA_MEMORY_USAGE_CPU_ONLY, map it and fill it on CPU,
- read it directly on GPU.
-
-Which solution is the most efficient depends on your resource and especially on the GPU.
-It is best to measure it and then make the decision.
-Some general recommendations:
-
-- On integrated graphics use (2) or (3) to avoid unnecessary time and memory overhead
- related to using a second copy and making transfer.
-- For small resources (e.g. constant buffers) use (2).
- Discrete AMD cards have special 256 MiB pool of video memory that is directly mappable.
- Even if the resource ends up in system memory, its data may be cached on GPU after first
- fetch over PCIe bus.
-- For larger resources (e.g. textures), decide between (1) and (2).
- You may want to differentiate NVIDIA and AMD, e.g. by looking for memory type that is
- both `DEVICE_LOCAL` and `HOST_VISIBLE`. When you find it, use (2), otherwise use (1).
-
-Similarly, for resources that you frequently write on GPU and read on CPU, multiple
-solutions are possible:
-
--# Create one copy in video memory using #VMA_MEMORY_USAGE_GPU_ONLY,
- second copy in system memory using #VMA_MEMORY_USAGE_GPU_TO_CPU and submit explicit tranfer each time.
--# Create just single copy using #VMA_MEMORY_USAGE_GPU_TO_CPU, write to it directly on GPU,
- map it and read it on CPU.
-
-You should take some measurements to decide which option is faster in case of your specific
-resource.
-
-Note that textures accessed directly from the host through a mapped pointer need to be in LINEAR layout,
-which may slow down their usage on the device.
-Textures accessed only by the device and transfer operations can use OPTIMAL layout.
-
-If you don't want to specialize your code for specific types of GPUs, you can still make
-an simple optimization for cases when your resource ends up in mappable memory to use it
-directly in this case instead of creating CPU-side staging copy.
-For details see [Finding out if memory is mappable](@ref memory_mapping_finding_if_memory_mappable).
-
-
-\page configuration Configuration
-
-Please check "CONFIGURATION SECTION" in the code to find macros that you can define
-before each include of this file or change directly in this file to provide
-your own implementation of basic facilities like assert, `min()` and `max()` functions,
-mutex, atomic etc.
-The library uses its own implementation of containers by default, but you can switch to using
-STL containers instead.
-
-For example, define `VMA_ASSERT(expr)` before including the library to provide
-custom implementation of the assertion, compatible with your project.
-By default it is defined to standard C `assert(expr)` in `_DEBUG` configuration
-and empty otherwise.
-
-\section config_Vulkan_functions Pointers to Vulkan functions
-
-There are multiple ways to import pointers to Vulkan functions in the library.
-In the simplest case you don't need to do anything.
-If the compilation or linking of your program or the initialization of the #VmaAllocator
-doesn't work for you, you can try to reconfigure it.
-
-First, the allocator tries to fetch pointers to Vulkan functions linked statically,
-like this:
-
-\code
-m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;
-\endcode
-
-If you want to disable this feature, set configuration macro: `#define VMA_STATIC_VULKAN_FUNCTIONS 0`.
-
-Second, you can provide the pointers yourself by setting member VmaAllocatorCreateInfo::pVulkanFunctions.
-You can fetch them e.g. using functions `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` or
-by using a helper library like [volk](https://github.com/zeux/volk).
-
-Third, VMA tries to fetch remaining pointers that are still null by calling
-`vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` on its own.
-If you want to disable this feature, set configuration macro: `#define VMA_DYNAMIC_VULKAN_FUNCTIONS 0`.
-
-Finally, all the function pointers required by the library (considering selected
-Vulkan version and enabled extensions) are checked with `VMA_ASSERT` if they are not null.
-
-
-\section custom_memory_allocator Custom host memory allocator
-
-If you use custom allocator for CPU memory rather than default operator `new`
-and `delete` from C++, you can make this library using your allocator as well
-by filling optional member VmaAllocatorCreateInfo::pAllocationCallbacks. These
-functions will be passed to Vulkan, as well as used by the library itself to
-make any CPU-side allocations.
-
-\section allocation_callbacks Device memory allocation callbacks
-
-The library makes calls to `vkAllocateMemory()` and `vkFreeMemory()` internally.
-You can setup callbacks to be informed about these calls, e.g. for the purpose
-of gathering some statistics. To do it, fill optional member
-VmaAllocatorCreateInfo::pDeviceMemoryCallbacks.
-
-\section heap_memory_limit Device heap memory limit
-
-When device memory of certain heap runs out of free space, new allocations may
-fail (returning error code) or they may succeed, silently pushing some existing
-memory blocks from GPU VRAM to system RAM (which degrades performance). This
-behavior is implementation-dependent - it depends on GPU vendor and graphics
-driver.
-
-On AMD cards it can be controlled while creating Vulkan device object by using
-VK_AMD_memory_overallocation_behavior extension, if available.
-
-Alternatively, if you want to test how your program behaves with limited amount of Vulkan device
-memory available without switching your graphics card to one that really has
-smaller VRAM, you can use a feature of this library intended for this purpose.
-To do it, fill optional member VmaAllocatorCreateInfo::pHeapSizeLimit.
-
-
-
-\page vk_khr_dedicated_allocation VK_KHR_dedicated_allocation
-
-VK_KHR_dedicated_allocation is a Vulkan extension which can be used to improve
-performance on some GPUs. It augments Vulkan API with possibility to query
-driver whether it prefers particular buffer or image to have its own, dedicated
-allocation (separate `VkDeviceMemory` block) for better efficiency - to be able
-to do some internal optimizations.
-
-The extension is supported by this library. It will be used automatically when
-enabled. To enable it:
-
-1 . When creating Vulkan device, check if following 2 device extensions are
-supported (call `vkEnumerateDeviceExtensionProperties()`).
-If yes, enable them (fill `VkDeviceCreateInfo::ppEnabledExtensionNames`).
-
-- VK_KHR_get_memory_requirements2
-- VK_KHR_dedicated_allocation
-
-If you enabled these extensions:
-
-2 . Use #VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT flag when creating
-your #VmaAllocator`to inform the library that you enabled required extensions
-and you want the library to use them.
-
-\code
-allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;
-
-vmaCreateAllocator(&allocatorInfo, &allocator);
-\endcode
-
-That's all. The extension will be automatically used whenever you create a
-buffer using vmaCreateBuffer() or image using vmaCreateImage().
-
-When using the extension together with Vulkan Validation Layer, you will receive
-warnings like this:
-
- vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer.
-
-It is OK, you should just ignore it. It happens because you use function
-`vkGetBufferMemoryRequirements2KHR()` instead of standard
-`vkGetBufferMemoryRequirements()`, while the validation layer seems to be
-unaware of it.
-
-To learn more about this extension, see:
-
-- [VK_KHR_dedicated_allocation in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap50.html#VK_KHR_dedicated_allocation)
-- [VK_KHR_dedicated_allocation unofficial manual](http://asawicki.info/articles/VK_KHR_dedicated_allocation.php5)
-
-
-
-\page vk_amd_device_coherent_memory VK_AMD_device_coherent_memory
-
-VK_AMD_device_coherent_memory is a device extension that enables access to
-additional memory types with `VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD` and
-`VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` flag. It is useful mostly for
-allocation of buffers intended for writing "breadcrumb markers" in between passes
-or draw calls, which in turn are useful for debugging GPU crash/hang/TDR cases.
-
-When the extension is available but has not been enabled, Vulkan physical device
-still exposes those memory types, but their usage is forbidden. VMA automatically
-takes care of that - it returns `VK_ERROR_FEATURE_NOT_PRESENT` when an attempt
-to allocate memory of such type is made.
-
-If you want to use this extension in connection with VMA, follow these steps:
-
-\section vk_amd_device_coherent_memory_initialization Initialization
-
-1) Call `vkEnumerateDeviceExtensionProperties` for the physical device.
-Check if the extension is supported - if returned array of `VkExtensionProperties` contains "VK_AMD_device_coherent_memory".
-
-2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`.
-Attach additional structure `VkPhysicalDeviceCoherentMemoryFeaturesAMD` to `VkPhysicalDeviceFeatures2::pNext` to be returned.
-Check if the device feature is really supported - check if `VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory` is true.
-
-3) While creating device with `vkCreateDevice`, enable this extension - add "VK_AMD_device_coherent_memory"
-to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`.
-
-4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`.
-Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`.
-Enable this device feature - attach additional structure `VkPhysicalDeviceCoherentMemoryFeaturesAMD` to
-`VkPhysicalDeviceFeatures2::pNext` and set its member `deviceCoherentMemory` to `VK_TRUE`.
-
-5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you
-have enabled this extension and feature - add #VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT
-to VmaAllocatorCreateInfo::flags.
-
-\section vk_amd_device_coherent_memory_usage Usage
-
-After following steps described above, you can create VMA allocations and custom pools
-out of the special `DEVICE_COHERENT` and `DEVICE_UNCACHED` memory types on eligible
-devices. There are multiple ways to do it, for example:
-
-- You can request or prefer to allocate out of such memory types by adding
- `VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD` to VmaAllocationCreateInfo::requiredFlags
- or VmaAllocationCreateInfo::preferredFlags. Those flags can be freely mixed with
- other ways of \ref choosing_memory_type, like setting VmaAllocationCreateInfo::usage.
-- If you manually found memory type index to use for this purpose, force allocation
- from this specific index by setting VmaAllocationCreateInfo::memoryTypeBits `= 1u << index`.
-
-\section vk_amd_device_coherent_memory_more_information More information
-
-To learn more about this extension, see [VK_AMD_device_coherent_memory in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap44.html#VK_AMD_device_coherent_memory)
-
-Example use of this extension can be found in the code of the sample and test suite
-accompanying this library.
-
-
-\page enabling_buffer_device_address Enabling buffer device address
-
-Device extension VK_KHR_buffer_device_address
-allow to fetch raw GPU pointer to a buffer and pass it for usage in a shader code.
-It is promoted to core Vulkan 1.2.
-
-If you want to use this feature in connection with VMA, follow these steps:
-
-\section enabling_buffer_device_address_initialization Initialization
-
-1) (For Vulkan version < 1.2) Call `vkEnumerateDeviceExtensionProperties` for the physical device.
-Check if the extension is supported - if returned array of `VkExtensionProperties` contains
-"VK_KHR_buffer_device_address".
-
-2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`.
-Attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to `VkPhysicalDeviceFeatures2::pNext` to be returned.
-Check if the device feature is really supported - check if `VkPhysicalDeviceBufferDeviceAddressFeatures*::bufferDeviceAddress` is true.
-
-3) (For Vulkan version < 1.2) While creating device with `vkCreateDevice`, enable this extension - add
-"VK_KHR_buffer_device_address" to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`.
-
-4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`.
-Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`.
-Enable this device feature - attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to
-`VkPhysicalDeviceFeatures2::pNext` and set its member `bufferDeviceAddress` to `VK_TRUE`.
-
-5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you
-have enabled this feature - add #VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT
-to VmaAllocatorCreateInfo::flags.
-
-\section enabling_buffer_device_address_usage Usage
-
-After following steps described above, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*` using VMA.
-The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT*` to
-allocated memory blocks wherever it might be needed.
-
-Please note that the library supports only `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*`.
-The second part of this functionality related to "capture and replay" is not supported,
-as it is intended for usage in debugging tools like RenderDoc, not in everyday Vulkan usage.
-
-\section enabling_buffer_device_address_more_information More information
-
-To learn more about this extension, see [VK_KHR_buffer_device_address in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap46.html#VK_KHR_buffer_device_address)
-
-Example use of this extension can be found in the code of the sample and test suite
-accompanying this library.
-
-\page general_considerations General considerations
-
-\section general_considerations_thread_safety Thread safety
-
-- The library has no global state, so separate #VmaAllocator objects can be used
- independently.
- There should be no need to create multiple such objects though - one per `VkDevice` is enough.
-- By default, all calls to functions that take #VmaAllocator as first parameter
- are safe to call from multiple threads simultaneously because they are
- synchronized internally when needed.
-- When the allocator is created with #VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
- flag, calls to functions that take such #VmaAllocator object must be
- synchronized externally.
-- Access to a #VmaAllocation object must be externally synchronized. For example,
- you must not call vmaGetAllocationInfo() and vmaMapMemory() from different
- threads at the same time if you pass the same #VmaAllocation object to these
- functions.
-
-\section general_considerations_validation_layer_warnings Validation layer warnings
-
-When using this library, you can meet following types of warnings issued by
-Vulkan validation layer. They don't necessarily indicate a bug, so you may need
-to just ignore them.
-
-- *vkBindBufferMemory(): Binding memory to buffer 0xeb8e4 but vkGetBufferMemoryRequirements() has not been called on that buffer.*
- - It happens when VK_KHR_dedicated_allocation extension is enabled.
- `vkGetBufferMemoryRequirements2KHR` function is used instead, while validation layer seems to be unaware of it.
-- *Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.*
- - It happens when you map a buffer or image, because the library maps entire
- `VkDeviceMemory` block, where different types of images and buffers may end
- up together, especially on GPUs with unified memory like Intel.
-- *Non-linear image 0xebc91 is aliased with linear buffer 0xeb8e4 which may indicate a bug.*
- - It happens when you use lost allocations, and a new image or buffer is
- created in place of an existing object that became lost.
- - It may happen also when you use [defragmentation](@ref defragmentation).
-
-\section general_considerations_allocation_algorithm Allocation algorithm
-
-The library uses following algorithm for allocation, in order:
-
--# Try to find free range of memory in existing blocks.
--# If failed, try to create a new block of `VkDeviceMemory`, with preferred block size.
--# If failed, try to create such block with size/2, size/4, size/8.
--# If failed and #VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT flag was
- specified, try to find space in existing blocks, possilby making some other
- allocations lost.
--# If failed, try to allocate separate `VkDeviceMemory` for this allocation,
- just like when you use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
--# If failed, choose other memory type that meets the requirements specified in
- VmaAllocationCreateInfo and go to point 1.
--# If failed, return `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
-
-\section general_considerations_features_not_supported Features not supported
-
-Features deliberately excluded from the scope of this library:
-
-- Data transfer. Uploading (streaming) and downloading data of buffers and images
- between CPU and GPU memory and related synchronization is responsibility of the user.
- Defining some "texture" object that would automatically stream its data from a
- staging copy in CPU memory to GPU memory would rather be a feature of another,
- higher-level library implemented on top of VMA.
-- Allocations for imported/exported external memory. They tend to require
- explicit memory type index and dedicated allocation anyway, so they don't
- interact with main features of this library. Such special purpose allocations
- should be made manually, using `vkCreateBuffer()` and `vkAllocateMemory()`.
-- Sub-allocation of parts of one large buffer. Although recommended as a good practice,
- it is the user's responsibility to implement such logic on top of VMA.
-- Recreation of buffers and images. Although the library has functions for
- buffer and image creation (vmaCreateBuffer(), vmaCreateImage()), you need to
- recreate these objects yourself after defragmentation. That's because the big
- structures `VkBufferCreateInfo`, `VkImageCreateInfo` are not stored in
- #VmaAllocation object.
-- Handling CPU memory allocation failures. When dynamically creating small C++
- objects in CPU memory (not Vulkan memory), allocation failures are not checked
- and handled gracefully, because that would complicate code significantly and
- is usually not needed in desktop PC applications anyway.
- Success of an allocation is just checked with an assert.
-- Code free of any compiler warnings. Maintaining the library to compile and
- work correctly on so many different platforms is hard enough. Being free of
- any warnings, on any version of any compiler, is simply not feasible.
-- This is a C++ library with C interface.
- Bindings or ports to any other programming languages are welcomed as external projects and
- are not going to be included into this repository.
+\defgroup group_stats Statistics
+\brief API elements that query current status of the allocator, from memory usage, budget, to full dump of the internal state in JSON format.
+See documentation chapter: \ref statistics.
*/
+
#ifdef __cplusplus
extern "C" {
#endif
-/*
-Define this macro to 0/1 to disable/enable support for recording functionality,
-available through VmaAllocatorCreateInfo::pRecordSettings.
-*/
-#ifndef VMA_RECORDING_ENABLED
- #define VMA_RECORDING_ENABLED 0
+#ifndef VULKAN_H_
+ #ifdef USE_VOLK
+ #include <volk.h>
+ #else
+ #include <vulkan/vulkan.h>
+ #endif
#endif
-#if !defined(NOMINMAX) && defined(VMA_IMPLEMENTATION)
- #define NOMINMAX // For windows.h
+// Define this macro to declare maximum supported Vulkan version in format AAABBBCCC,
+// where AAA = major, BBB = minor, CCC = patch.
+// If you want to use version > 1.0, it still needs to be enabled via VmaAllocatorCreateInfo::vulkanApiVersion.
+#if !defined(VMA_VULKAN_VERSION)
+ #if defined(VK_VERSION_1_3)
+ #define VMA_VULKAN_VERSION 1003000
+ #elif defined(VK_VERSION_1_2)
+ #define VMA_VULKAN_VERSION 1002000
+ #elif defined(VK_VERSION_1_1)
+ #define VMA_VULKAN_VERSION 1001000
+ #else
+ #define VMA_VULKAN_VERSION 1000000
+ #endif
#endif
#if defined(__ANDROID__) && defined(VK_NO_PROTOTYPES) && VMA_STATIC_VULKAN_FUNCTIONS
@@ -2062,27 +175,6 @@ available through VmaAllocatorCreateInfo::pRecordSettings.
#endif // #if VMA_VULKAN_VERSION >= 1001000
#endif // #if defined(__ANDROID__) && VMA_STATIC_VULKAN_FUNCTIONS && VK_NO_PROTOTYPES
-#ifndef VULKAN_H_
- #ifdef USE_VOLK
- #include <volk.h>
- #else
- #include <vulkan/vulkan.h>
- #endif
-#endif
-
-// Define this macro to declare maximum supported Vulkan version in format AAABBBCCC,
-// where AAA = major, BBB = minor, CCC = patch.
-// If you want to use version > 1.0, it still needs to be enabled via VmaAllocatorCreateInfo::vulkanApiVersion.
-#if !defined(VMA_VULKAN_VERSION)
- #if defined(VK_VERSION_1_2)
- #define VMA_VULKAN_VERSION 1002000
- #elif defined(VK_VERSION_1_1)
- #define VMA_VULKAN_VERSION 1001000
- #else
- #define VMA_VULKAN_VERSION 1000000
- #endif
-#endif
-
#if !defined(VMA_DEDICATED_ALLOCATION)
#if VK_KHR_get_memory_requirements2 && VK_KHR_dedicated_allocation
#define VMA_DEDICATED_ALLOCATION 1
@@ -2199,50 +291,29 @@ available through VmaAllocatorCreateInfo::pRecordSettings.
#endif
#endif
-/** \struct VmaAllocator
-\brief Represents main object of this library initialized.
-
-Fill structure #VmaAllocatorCreateInfo and call function vmaCreateAllocator() to create it.
-Call function vmaDestroyAllocator() to destroy it.
-
-It is recommended to create just one object of this type per `VkDevice` object,
-right after Vulkan is initialized and keep it alive until before Vulkan device is destroyed.
-*/
-VK_DEFINE_HANDLE(VmaAllocator)
-
-/// Callback function called after successful vkAllocateMemory.
-typedef void (VKAPI_PTR *PFN_vmaAllocateDeviceMemoryFunction)(
- VmaAllocator VMA_NOT_NULL allocator,
- uint32_t memoryType,
- VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,
- VkDeviceSize size,
- void* VMA_NULLABLE pUserData);
-/// Callback function called before vkFreeMemory.
-typedef void (VKAPI_PTR *PFN_vmaFreeDeviceMemoryFunction)(
- VmaAllocator VMA_NOT_NULL allocator,
- uint32_t memoryType,
- VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,
- VkDeviceSize size,
- void* VMA_NULLABLE pUserData);
+#ifndef VMA_STATS_STRING_ENABLED
+ #define VMA_STATS_STRING_ENABLED 1
+#endif
-/** \brief Set of callbacks that the library will call for `vkAllocateMemory` and `vkFreeMemory`.
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// INTERFACE
+//
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
-Provided for informative purpose, e.g. to gather statistics about number of
-allocations or total amount of memory allocated in Vulkan.
+// Sections for managing code placement in file, only for development purposes e.g. for convenient folding inside an IDE.
+#ifndef _VMA_ENUM_DECLARATIONS
-Used in VmaAllocatorCreateInfo::pDeviceMemoryCallbacks.
+/**
+\addtogroup group_init
+@{
*/
-typedef struct VmaDeviceMemoryCallbacks {
- /// Optional, can be null.
- PFN_vmaAllocateDeviceMemoryFunction VMA_NULLABLE pfnAllocate;
- /// Optional, can be null.
- PFN_vmaFreeDeviceMemoryFunction VMA_NULLABLE pfnFree;
- /// Optional, can be null.
- void* VMA_NULLABLE pUserData;
-} VmaDeviceMemoryCallbacks;
/// Flags for created #VmaAllocator.
-typedef enum VmaAllocatorCreateFlagBits {
+typedef enum VmaAllocatorCreateFlagBits
+{
/** \brief Allocator and all objects created from it will not be synchronized internally, so you must guarantee they are used from only one thread at a time or synchronized externally by you.
Using this flag may increase performance because internal mutexes are not used.
@@ -2251,7 +322,7 @@ typedef enum VmaAllocatorCreateFlagBits {
/** \brief Enables usage of VK_KHR_dedicated_allocation extension.
The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion `== VK_API_VERSION_1_0`.
- When it's `VK_API_VERSION_1_1`, the flag is ignored because the extension has been promoted to Vulkan 1.1.
+ When it is `VK_API_VERSION_1_1`, the flag is ignored because the extension has been promoted to Vulkan 1.1.
Using this extension will automatically allocate dedicated blocks of memory for
some buffers and images instead of suballocating place for them out of bigger
@@ -2277,7 +348,7 @@ typedef enum VmaAllocatorCreateFlagBits {
Enables usage of VK_KHR_bind_memory2 extension.
The flag works only if VmaAllocatorCreateInfo::vulkanApiVersion `== VK_API_VERSION_1_0`.
- When it's `VK_API_VERSION_1_1`, the flag is ignored because the extension has been promoted to Vulkan 1.1.
+ When it is `VK_API_VERSION_1_1`, the flag is ignored because the extension has been promoted to Vulkan 1.1.
You may set this flag only if you found out that this device extension is supported,
you enabled it while creating Vulkan device passed as VmaAllocatorCreateInfo::device,
@@ -2358,11 +429,530 @@ typedef enum VmaAllocatorCreateFlagBits {
} VmaAllocatorCreateFlagBits;
typedef VkFlags VmaAllocatorCreateFlags;
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
+/// \brief Intended usage of the allocated memory.
+typedef enum VmaMemoryUsage
+{
+ /** No intended memory usage specified.
+ Use other members of VmaAllocationCreateInfo to specify your requirements.
+ */
+ VMA_MEMORY_USAGE_UNKNOWN = 0,
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Prefers `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
+ */
+ VMA_MEMORY_USAGE_GPU_ONLY = 1,
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` and `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT`.
+ */
+ VMA_MEMORY_USAGE_CPU_ONLY = 2,
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`, prefers `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
+ */
+ VMA_MEMORY_USAGE_CPU_TO_GPU = 3,
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Guarantees `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`, prefers `VK_MEMORY_PROPERTY_HOST_CACHED_BIT`.
+ */
+ VMA_MEMORY_USAGE_GPU_TO_CPU = 4,
+ /**
+ \deprecated Obsolete, preserved for backward compatibility.
+ Prefers not `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
+ */
+ VMA_MEMORY_USAGE_CPU_COPY = 5,
+ /**
+ Lazily allocated GPU memory having `VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT`.
+ Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation.
+
+ Usage: Memory for transient attachment images (color attachments, depth attachments etc.), created with `VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT`.
+
+ Allocations with this usage are always created as dedicated - it implies #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+ */
+ VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED = 6,
+ /**
+ Selects best memory type automatically.
+ This flag is recommended for most common use cases.
+
+ When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT),
+ you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+ in VmaAllocationCreateInfo::flags.
+
+ It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g.
+ vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
+ and not with generic memory allocation functions.
+ */
+ VMA_MEMORY_USAGE_AUTO = 7,
+ /**
+ Selects best memory type automatically with preference for GPU (device) memory.
+
+ When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT),
+ you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+ in VmaAllocationCreateInfo::flags.
+
+ It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g.
+ vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
+ and not with generic memory allocation functions.
+ */
+ VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE = 8,
+ /**
+ Selects best memory type automatically with preference for CPU (host) memory.
+
+ When using this flag, if you want to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT),
+ you must pass one of the flags: #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+ in VmaAllocationCreateInfo::flags.
+
+ It can be used only with functions that let the library know `VkBufferCreateInfo` or `VkImageCreateInfo`, e.g.
+ vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo()
+ and not with generic memory allocation functions.
+ */
+ VMA_MEMORY_USAGE_AUTO_PREFER_HOST = 9,
+
+ VMA_MEMORY_USAGE_MAX_ENUM = 0x7FFFFFFF
+} VmaMemoryUsage;
+
+/// Flags to be passed as VmaAllocationCreateInfo::flags.
+typedef enum VmaAllocationCreateFlagBits
+{
+ /** \brief Set this flag if the allocation should have its own memory block.
+
+ Use it for special, big resources, like fullscreen images used as attachments.
+ */
+ VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT = 0x00000001,
+
+ /** \brief Set this flag to only try to allocate from existing `VkDeviceMemory` blocks and never create new such block.
+
+ If new allocation cannot be placed in any of the existing blocks, allocation
+ fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY` error.
+
+ You should not use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT and
+ #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT at the same time. It makes no sense.
+
+ If VmaAllocationCreateInfo::pool is not null, this flag is implied and ignored. */
+ VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT = 0x00000002,
+ /** \brief Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.
+
+ Pointer to mapped memory will be returned through VmaAllocationInfo::pMappedData.
+
+ It is valid to use this flag for allocation made from memory type that is not
+ `HOST_VISIBLE`. This flag is then ignored and memory is not mapped. This is
+ useful if you need an allocation that is efficient to use on GPU
+ (`DEVICE_LOCAL`) and still want to map it directly if possible on platforms that
+ support it (e.g. Intel GPU).
+ */
+ VMA_ALLOCATION_CREATE_MAPPED_BIT = 0x00000004,
+ /// \deprecated Removed. Do not use.
+ VMA_ALLOCATION_CREATE_RESERVED_1_BIT = 0x00000008,
+ /// \deprecated Removed. Do not use.
+ VMA_ALLOCATION_CREATE_RESERVED_2_BIT = 0x00000010,
+ /** Set this flag to treat VmaAllocationCreateInfo::pUserData as pointer to a
+ null-terminated string. Instead of copying pointer value, a local copy of the
+ string is made and stored in allocation's `pUserData`. The string is automatically
+ freed together with the allocation. It is also used in vmaBuildStatsString().
+ */
+ VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT = 0x00000020,
+ /** Allocation will be created from upper stack in a double stack pool.
+
+ This flag is only allowed for custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT flag.
+ */
+ VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT = 0x00000040,
+ /** Create both buffer/image and allocation, but don't bind them together.
+ It is useful when you want to bind yourself to do some more advanced binding, e.g. using some extensions.
+ The flag is meaningful only with functions that bind by default: vmaCreateBuffer(), vmaCreateImage().
+ Otherwise it is ignored.
+ */
+ VMA_ALLOCATION_CREATE_DONT_BIND_BIT = 0x00000080,
+ /** Create allocation only if additional device memory required for it, if any, won't exceed
+ memory budget. Otherwise return `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+ */
+ VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT = 0x00000100,
+ /** \brief Set this flag if the allocated memory will have aliasing resources.
+
+ Usage of this flag prevents supplying `VkMemoryDedicatedAllocateInfoKHR` when #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT is specified.
+ Otherwise created dedicated memory will not be suitable for aliasing resources, resulting in Vulkan Validation Layer errors.
+ */
+ VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT = 0x00000200,
+ /**
+ Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT).
+
+ - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value,
+ you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect.
+ - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`.
+ This includes allocations created in \ref custom_memory_pools.
+
+ Declares that mapped memory will only be written sequentially, e.g. using `memcpy()` or a loop writing number-by-number,
+ never read or accessed randomly, so a memory type can be selected that is uncached and write-combined.
+
+ \warning Violating this declaration may work correctly, but will likely be very slow.
+ Watch out for implicit reads introduces by doing e.g. `pMappedData[i] += x;`
+ Better prepare your data in a local variable and `memcpy()` it to the mapped pointer all at once.
+ */
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT = 0x00000400,
+ /**
+ Requests possibility to map the allocation (using vmaMapMemory() or #VMA_ALLOCATION_CREATE_MAPPED_BIT).
+
+ - If you use #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` value,
+ you must use this flag to be able to map the allocation. Otherwise, mapping is incorrect.
+ - If you use other value of #VmaMemoryUsage, this flag is ignored and mapping is always possible in memory types that are `HOST_VISIBLE`.
+ This includes allocations created in \ref custom_memory_pools.
+
+ Declares that mapped memory can be read, written, and accessed in random order,
+ so a `HOST_CACHED` memory type is preferred.
+ */
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT = 0x00000800,
+ /**
+ Together with #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT,
+ it says that despite request for host access, a not-`HOST_VISIBLE` memory type can be selected
+ if it may improve performance.
+
+ By using this flag, you declare that you will check if the allocation ended up in a `HOST_VISIBLE` memory type
+ (e.g. using vmaGetAllocationMemoryProperties()) and if not, you will create some "staging" buffer and
+ issue an explicit transfer to write/read your data.
+ To prepare for this possibility, don't forget to add appropriate flags like
+ `VK_BUFFER_USAGE_TRANSFER_DST_BIT`, `VK_BUFFER_USAGE_TRANSFER_SRC_BIT` to the parameters of created buffer or image.
+ */
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT = 0x00001000,
+ /** Allocation strategy that chooses smallest possible free range for the allocation
+ to minimize memory usage and fragmentation, possibly at the expense of allocation time.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT = 0x00010000,
+ /** Allocation strategy that chooses first suitable free range for the allocation -
+ not necessarily in terms of the smallest offset but the one that is easiest and fastest to find
+ to minimize allocation time, possibly at the expense of allocation quality.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = 0x00020000,
+ /** Allocation strategy that chooses always the lowest offset in available space.
+ This is not the most efficient strategy but achieves highly packed data.
+ Used internally by defragmentation, not recomended in typical usage.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT = 0x00040000,
+ /** Alias to #VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT,
+ /** Alias to #VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT,
+ /** A bit mask to extract only `STRATEGY` bits from entire set of flags.
+ */
+ VMA_ALLOCATION_CREATE_STRATEGY_MASK =
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT |
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT |
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+
+ VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VmaAllocationCreateFlagBits;
+typedef VkFlags VmaAllocationCreateFlags;
+
+/// Flags to be passed as VmaPoolCreateInfo::flags.
+typedef enum VmaPoolCreateFlagBits
+{
+ /** \brief Use this flag if you always allocate only buffers and linear images or only optimal images out of this pool and so Buffer-Image Granularity can be ignored.
+
+ This is an optional optimization flag.
+
+ If you always allocate using vmaCreateBuffer(), vmaCreateImage(),
+ vmaAllocateMemoryForBuffer(), then you don't need to use it because allocator
+ knows exact type of your allocations so it can handle Buffer-Image Granularity
+ in the optimal way.
+
+ If you also allocate using vmaAllocateMemoryForImage() or vmaAllocateMemory(),
+ exact type of such allocations is not known, so allocator must be conservative
+ in handling Buffer-Image Granularity, which can lead to suboptimal allocation
+ (wasted memory). In that case, if you can make sure you always allocate only
+ buffers and linear images or only optimal images out of this pool, use this flag
+ to make allocator disregard Buffer-Image Granularity and so make allocations
+ faster and more optimal.
+ */
+ VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT = 0x00000002,
+
+ /** \brief Enables alternative, linear allocation algorithm in this pool.
+
+ Specify this flag to enable linear allocation algorithm, which always creates
+ new allocations after last one and doesn't reuse space from allocations freed in
+ between. It trades memory consumption for simplified algorithm and data
+ structure, which has better performance and uses less memory for metadata.
+
+ By using this flag, you can achieve behavior of free-at-once, stack,
+ ring buffer, and double stack.
+ For details, see documentation chapter \ref linear_algorithm.
+ */
+ VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT = 0x00000004,
+
+ /** Bit mask to extract only `ALGORITHM` bits from entire set of flags.
+ */
+ VMA_POOL_CREATE_ALGORITHM_MASK =
+ VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT,
+
+ VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VmaPoolCreateFlagBits;
+/// Flags to be passed as VmaPoolCreateInfo::flags. See #VmaPoolCreateFlagBits.
+typedef VkFlags VmaPoolCreateFlags;
+
+/// Flags to be passed as VmaDefragmentationInfo::flags.
+typedef enum VmaDefragmentationFlagBits
+{
+ /* \brief Use simple but fast algorithm for defragmentation.
+ May not achieve best results but will require least time to compute and least allocations to copy.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT = 0x1,
+ /* \brief Default defragmentation algorithm, applied also when no `ALGORITHM` flag is specified.
+ Offers a balance between defragmentation quality and the amount of allocations and bytes that need to be moved.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT = 0x2,
+ /* \brief Perform full defragmentation of memory.
+ Can result in notably more time to compute and allocations to copy, but will achieve best memory packing.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT = 0x4,
+ /** \brief Use the most roboust algorithm at the cost of time to compute and number of copies to make.
+ Only available when bufferImageGranularity is greater than 1, since it aims to reduce
+ alignment issues between different types of resources.
+ Otherwise falls back to same behavior as #VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT.
+ */
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT = 0x8,
+
+ /// A bit mask to extract only `ALGORITHM` bits from entire set of flags.
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK =
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT |
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT |
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT |
+ VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT,
+
+ VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VmaDefragmentationFlagBits;
+typedef VkFlags VmaDefragmentationFlags;
+
+/// Operation performed on single defragmentation move.
+typedef enum VmaDefragmentationMoveOperation
+{
+ /// Buffer/image has been recreated at `dstMemory` + `dstOffset`, data has been copied, old buffer/image has been destroyed. `srcAllocation` should be changed to point to the new place. This is the default value set by vmaBeginDefragmentationPass().
+ VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY = 0,
+ /// Set this value if you cannot move the allocation. New place reserved `dstMemory` + `dstOffset` will be freed. `srcAllocation` will remain unchanged.
+ VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE = 1,
+ /// Set this value if you decide to abandon the allocation and you destroyed the buffer/image. New place reserved `dstMemory` + `dstOffset` will be freed, along with `srcAllocation`.
+ VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY = 2,
+} VmaDefragmentationMoveOperation;
+
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
+/// Flags to be passed as VmaVirtualBlockCreateInfo::flags.
+typedef enum VmaVirtualBlockCreateFlagBits
+{
+ /** \brief Enables alternative, linear allocation algorithm in this virtual block.
+
+ Specify this flag to enable linear allocation algorithm, which always creates
+ new allocations after last one and doesn't reuse space from allocations freed in
+ between. It trades memory consumption for simplified algorithm and data
+ structure, which has better performance and uses less memory for metadata.
+
+ By using this flag, you can achieve behavior of free-at-once, stack,
+ ring buffer, and double stack.
+ For details, see documentation chapter \ref linear_algorithm.
+ */
+ VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT = 0x00000001,
+
+ /** \brief Bit mask to extract only `ALGORITHM` bits from entire set of flags.
+ */
+ VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK =
+ VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT,
+
+ VMA_VIRTUAL_BLOCK_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VmaVirtualBlockCreateFlagBits;
+/// Flags to be passed as VmaVirtualBlockCreateInfo::flags. See #VmaVirtualBlockCreateFlagBits.
+typedef VkFlags VmaVirtualBlockCreateFlags;
+
+/// Flags to be passed as VmaVirtualAllocationCreateInfo::flags.
+typedef enum VmaVirtualAllocationCreateFlagBits
+{
+ /** \brief Allocation will be created from upper stack in a double stack pool.
+
+ This flag is only allowed for virtual blocks created with #VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT flag.
+ */
+ VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT = VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT,
+ /** \brief Allocation strategy that tries to minimize memory usage.
+ */
+ VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT,
+ /** \brief Allocation strategy that tries to minimize allocation time.
+ */
+ VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT,
+ /** Allocation strategy that chooses always the lowest offset in available space.
+ This is not the most efficient strategy but achieves highly packed data.
+ */
+ VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_PACKED_BIT = VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT ,
+ /** \brief A bit mask to extract only `STRATEGY` bits from entire set of flags.
+
+ These strategy flags are binary compatible with equivalent flags in #VmaAllocationCreateFlagBits.
+ */
+ VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK = VMA_ALLOCATION_CREATE_STRATEGY_MASK,
+
+ VMA_VIRTUAL_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VmaVirtualAllocationCreateFlagBits;
+/// Flags to be passed as VmaVirtualAllocationCreateInfo::flags. See #VmaVirtualAllocationCreateFlagBits.
+typedef VkFlags VmaVirtualAllocationCreateFlags;
+
+/** @} */
+
+#endif // _VMA_ENUM_DECLARATIONS
+
+#ifndef _VMA_DATA_TYPES_DECLARATIONS
+
+/**
+\addtogroup group_init
+@{ */
+
+/** \struct VmaAllocator
+\brief Represents main object of this library initialized.
+
+Fill structure #VmaAllocatorCreateInfo and call function vmaCreateAllocator() to create it.
+Call function vmaDestroyAllocator() to destroy it.
+
+It is recommended to create just one object of this type per `VkDevice` object,
+right after Vulkan is initialized and keep it alive until before Vulkan device is destroyed.
+*/
+VK_DEFINE_HANDLE(VmaAllocator)
+
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
+
+/** \struct VmaPool
+\brief Represents custom memory pool
+
+Fill structure VmaPoolCreateInfo and call function vmaCreatePool() to create it.
+Call function vmaDestroyPool() to destroy it.
+
+For more information see [Custom memory pools](@ref choosing_memory_type_custom_memory_pools).
+*/
+VK_DEFINE_HANDLE(VmaPool)
+
+/** \struct VmaAllocation
+\brief Represents single memory allocation.
+
+It may be either dedicated block of `VkDeviceMemory` or a specific region of a bigger block of this type
+plus unique offset.
+
+There are multiple ways to create such object.
+You need to fill structure VmaAllocationCreateInfo.
+For more information see [Choosing memory type](@ref choosing_memory_type).
+
+Although the library provides convenience functions that create Vulkan buffer or image,
+allocate memory for it and bind them together,
+binding of the allocation to a buffer or an image is out of scope of the allocation itself.
+Allocation object can exist without buffer/image bound,
+binding can be done manually by the user, and destruction of it can be done
+independently of destruction of the allocation.
+
+The object also remembers its size and some other information.
+To retrieve this information, use function vmaGetAllocationInfo() and inspect
+returned structure VmaAllocationInfo.
+*/
+VK_DEFINE_HANDLE(VmaAllocation)
+
+/** \struct VmaDefragmentationContext
+\brief An opaque object that represents started defragmentation process.
+
+Fill structure #VmaDefragmentationInfo and call function vmaBeginDefragmentation() to create it.
+Call function vmaEndDefragmentation() to destroy it.
+*/
+VK_DEFINE_HANDLE(VmaDefragmentationContext)
+
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
+/** \struct VmaVirtualAllocation
+\brief Represents single memory allocation done inside VmaVirtualBlock.
+
+Use it as a unique identifier to virtual allocation within the single block.
+
+Use value `VK_NULL_HANDLE` to represent a null/invalid allocation.
+*/
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VmaVirtualAllocation);
+
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
+/** \struct VmaVirtualBlock
+\brief Handle to a virtual block object that allows to use core allocation algorithm without allocating any real GPU memory.
+
+Fill in #VmaVirtualBlockCreateInfo structure and use vmaCreateVirtualBlock() to create it. Use vmaDestroyVirtualBlock() to destroy it.
+For more information, see documentation chapter \ref virtual_allocator.
+
+This object is not thread-safe - should not be used from multiple threads simultaneously, must be synchronized externally.
+*/
+VK_DEFINE_HANDLE(VmaVirtualBlock)
+
+/** @} */
+
+/**
+\addtogroup group_init
+@{
+*/
+
+/// Callback function called after successful vkAllocateMemory.
+typedef void (VKAPI_PTR* PFN_vmaAllocateDeviceMemoryFunction)(
+ VmaAllocator VMA_NOT_NULL allocator,
+ uint32_t memoryType,
+ VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,
+ VkDeviceSize size,
+ void* VMA_NULLABLE pUserData);
+
+/// Callback function called before vkFreeMemory.
+typedef void (VKAPI_PTR* PFN_vmaFreeDeviceMemoryFunction)(
+ VmaAllocator VMA_NOT_NULL allocator,
+ uint32_t memoryType,
+ VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory,
+ VkDeviceSize size,
+ void* VMA_NULLABLE pUserData);
+
+/** \brief Set of callbacks that the library will call for `vkAllocateMemory` and `vkFreeMemory`.
+
+Provided for informative purpose, e.g. to gather statistics about number of
+allocations or total amount of memory allocated in Vulkan.
+
+Used in VmaAllocatorCreateInfo::pDeviceMemoryCallbacks.
+*/
+typedef struct VmaDeviceMemoryCallbacks
+{
+ /// Optional, can be null.
+ PFN_vmaAllocateDeviceMemoryFunction VMA_NULLABLE pfnAllocate;
+ /// Optional, can be null.
+ PFN_vmaFreeDeviceMemoryFunction VMA_NULLABLE pfnFree;
+ /// Optional, can be null.
+ void* VMA_NULLABLE pUserData;
+} VmaDeviceMemoryCallbacks;
+
/** \brief Pointers to some Vulkan functions - a subset used by the library.
Used in VmaAllocatorCreateInfo::pVulkanFunctions.
*/
-typedef struct VmaVulkanFunctions {
+typedef struct VmaVulkanFunctions
+{
+ /// Required when using VMA_DYNAMIC_VULKAN_FUNCTIONS.
+ PFN_vkGetInstanceProcAddr VMA_NULLABLE vkGetInstanceProcAddr;
+ /// Required when using VMA_DYNAMIC_VULKAN_FUNCTIONS.
+ PFN_vkGetDeviceProcAddr VMA_NULLABLE vkGetDeviceProcAddr;
PFN_vkGetPhysicalDeviceProperties VMA_NULLABLE vkGetPhysicalDeviceProperties;
PFN_vkGetPhysicalDeviceMemoryProperties VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties;
PFN_vkAllocateMemory VMA_NULLABLE vkAllocateMemory;
@@ -2381,46 +971,28 @@ typedef struct VmaVulkanFunctions {
PFN_vkDestroyImage VMA_NULLABLE vkDestroyImage;
PFN_vkCmdCopyBuffer VMA_NULLABLE vkCmdCopyBuffer;
#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000
+ /// Fetch "vkGetBufferMemoryRequirements2" on Vulkan >= 1.1, fetch "vkGetBufferMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension.
PFN_vkGetBufferMemoryRequirements2KHR VMA_NULLABLE vkGetBufferMemoryRequirements2KHR;
+ /// Fetch "vkGetImageMemoryRequirements 2" on Vulkan >= 1.1, fetch "vkGetImageMemoryRequirements2KHR" when using VK_KHR_dedicated_allocation extension.
PFN_vkGetImageMemoryRequirements2KHR VMA_NULLABLE vkGetImageMemoryRequirements2KHR;
#endif
#if VMA_BIND_MEMORY2 || VMA_VULKAN_VERSION >= 1001000
+ /// Fetch "vkBindBufferMemory2" on Vulkan >= 1.1, fetch "vkBindBufferMemory2KHR" when using VK_KHR_bind_memory2 extension.
PFN_vkBindBufferMemory2KHR VMA_NULLABLE vkBindBufferMemory2KHR;
+ /// Fetch "vkBindImageMemory2" on Vulkan >= 1.1, fetch "vkBindImageMemory2KHR" when using VK_KHR_bind_memory2 extension.
PFN_vkBindImageMemory2KHR VMA_NULLABLE vkBindImageMemory2KHR;
#endif
#if VMA_MEMORY_BUDGET || VMA_VULKAN_VERSION >= 1001000
PFN_vkGetPhysicalDeviceMemoryProperties2KHR VMA_NULLABLE vkGetPhysicalDeviceMemoryProperties2KHR;
#endif
+#if VMA_VULKAN_VERSION >= 1003000
+ /// Fetch from "vkGetDeviceBufferMemoryRequirements" on Vulkan >= 1.3, but you can also fetch it from "vkGetDeviceBufferMemoryRequirementsKHR" if you enabled extension VK_KHR_maintenance4.
+ PFN_vkGetDeviceBufferMemoryRequirements VMA_NULLABLE vkGetDeviceBufferMemoryRequirements;
+ /// Fetch from "vkGetDeviceImageMemoryRequirements" on Vulkan >= 1.3, but you can also fetch it from "vkGetDeviceImageMemoryRequirementsKHR" if you enabled extension VK_KHR_maintenance4.
+ PFN_vkGetDeviceImageMemoryRequirements VMA_NULLABLE vkGetDeviceImageMemoryRequirements;
+#endif
} VmaVulkanFunctions;
-/// Flags to be used in VmaRecordSettings::flags.
-typedef enum VmaRecordFlagBits {
- /** \brief Enables flush after recording every function call.
-
- Enable it if you expect your application to crash, which may leave recording file truncated.
- It may degrade performance though.
- */
- VMA_RECORD_FLUSH_AFTER_CALL_BIT = 0x00000001,
-
- VMA_RECORD_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VmaRecordFlagBits;
-typedef VkFlags VmaRecordFlags;
-
-/// Parameters for recording calls to VMA functions. To be used in VmaAllocatorCreateInfo::pRecordSettings.
-typedef struct VmaRecordSettings
-{
- /// Flags for recording. Use #VmaRecordFlagBits enum.
- VmaRecordFlags flags;
- /** \brief Path to the file that should be written by the recording.
-
- Suggested extension: "csv".
- If the file already exists, it will be overwritten.
- It will be opened for the whole time #VmaAllocator object is alive.
- If opening this file fails, creation of the whole allocator object fails.
- */
- const char* VMA_NOT_NULL pFilePath;
-} VmaRecordSettings;
-
/// Description of a Allocator to be created.
typedef struct VmaAllocatorCreateInfo
{
@@ -2441,20 +1013,6 @@ typedef struct VmaAllocatorCreateInfo
/// Informative callbacks for `vkAllocateMemory`, `vkFreeMemory`. Optional.
/** Optional, can be null. */
const VmaDeviceMemoryCallbacks* VMA_NULLABLE pDeviceMemoryCallbacks;
- /** \brief Maximum number of additional frames that are in use at the same time as current frame.
-
- This value is used only when you make allocations with
- VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT flag. Such allocation cannot become
- lost if allocation.lastUseFrameIndex >= allocator.currentFrameIndex - frameInUseCount.
-
- For example, if you double-buffer your command buffers, so resources used for
- rendering in previous frame may still be in use by the GPU at the moment you
- allocate resources needed for the current frame, set this value to 1.
-
- If you want to allow any allocations other than used in the current frame to
- become lost, set this value to 0.
- */
- uint32_t frameInUseCount;
/** \brief Either null or a pointer to an array of limits on maximum number of bytes that can be allocated out of particular Vulkan memory heap.
If not NULL, it must be a pointer to an array of
@@ -2486,13 +1044,6 @@ typedef struct VmaAllocatorCreateInfo
For details see [Pointers to Vulkan functions](@ref config_Vulkan_functions).
*/
const VmaVulkanFunctions* VMA_NULLABLE pVulkanFunctions;
- /** \brief Parameters for recording of VMA calls. Can be null.
-
- If not null, it enables recording of calls to VMA functions to a file.
- If support for recording is not enabled using `VMA_RECORDING_ENABLED` macro,
- creation of the allocator object fails with `VK_ERROR_FEATURE_NOT_PRESENT`.
- */
- const VmaRecordSettings* VMA_NULLABLE pRecordSettings;
/** \brief Handle to Vulkan instance object.
Starting from version 3.0.0 this member is no longer optional, it must be set!
@@ -2503,7 +1054,7 @@ typedef struct VmaAllocatorCreateInfo
It must be a value in the format as created by macro `VK_MAKE_VERSION` or a constant like: `VK_API_VERSION_1_1`, `VK_API_VERSION_1_0`.
The patch version number specified is ignored. Only the major and minor versions are considered.
It must be less or equal (preferably equal) to value as passed to `vkCreateInstance` as `VkApplicationInfo::apiVersion`.
- Only versions 1.0, 1.1, 1.2 are supported by the current implementation.
+ Only versions 1.0, 1.1, 1.2, 1.3 are supported by the current implementation.
Leaving it initialized to zero is equivalent to `VK_API_VERSION_1_0`.
*/
uint32_t vulkanApiVersion;
@@ -2521,17 +1072,7 @@ typedef struct VmaAllocatorCreateInfo
#endif // #if VMA_EXTERNAL_MEMORY
} VmaAllocatorCreateInfo;
-/// Creates Allocator object.
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAllocator(
- const VmaAllocatorCreateInfo* VMA_NOT_NULL pCreateInfo,
- VmaAllocator VMA_NULLABLE * VMA_NOT_NULL pAllocator);
-
-/// Destroys allocator object.
-VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAllocator(
- VmaAllocator VMA_NULLABLE allocator);
-
-/** \brief Information about existing #VmaAllocator object.
-*/
+/// Information about existing #VmaAllocator object.
typedef struct VmaAllocatorInfo
{
/** \brief Handle to Vulkan instance object.
@@ -2551,123 +1092,109 @@ typedef struct VmaAllocatorInfo
VkDevice VMA_NOT_NULL device;
} VmaAllocatorInfo;
-/** \brief Returns information about existing #VmaAllocator object - handle to Vulkan device etc.
-
-It might be useful if you want to keep just the #VmaAllocator handle and fetch other required handles to
-`VkPhysicalDevice`, `VkDevice` etc. every time using this function.
-*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocatorInfo(VmaAllocator VMA_NOT_NULL allocator, VmaAllocatorInfo* VMA_NOT_NULL pAllocatorInfo);
-
-/**
-PhysicalDeviceProperties are fetched from physicalDevice by the allocator.
-You can access it here, without fetching it again on your own.
-*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetPhysicalDeviceProperties(
- VmaAllocator VMA_NOT_NULL allocator,
- const VkPhysicalDeviceProperties* VMA_NULLABLE * VMA_NOT_NULL ppPhysicalDeviceProperties);
+/** @} */
/**
-PhysicalDeviceMemoryProperties are fetched from physicalDevice by the allocator.
-You can access it here, without fetching it again on your own.
+\addtogroup group_stats
+@{
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryProperties(
- VmaAllocator VMA_NOT_NULL allocator,
- const VkPhysicalDeviceMemoryProperties* VMA_NULLABLE * VMA_NOT_NULL ppPhysicalDeviceMemoryProperties);
-/**
-\brief Given Memory Type Index, returns Property Flags of this memory type.
+/** \brief Calculated statistics of memory usage e.g. in a specific memory type, heap, custom pool, or total.
-This is just a convenience function. Same information can be obtained using
-vmaGetMemoryProperties().
+These are fast to calculate.
+See functions: vmaGetHeapBudgets(), vmaGetPoolStatistics().
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryTypeProperties(
- VmaAllocator VMA_NOT_NULL allocator,
- uint32_t memoryTypeIndex,
- VkMemoryPropertyFlags* VMA_NOT_NULL pFlags);
+typedef struct VmaStatistics
+{
+ /** \brief Number of `VkDeviceMemory` objects - Vulkan memory blocks allocated.
+ */
+ uint32_t blockCount;
+ /** \brief Number of #VmaAllocation objects allocated.
+
+ Dedicated allocations have their own blocks, so each one adds 1 to `allocationCount` as well as `blockCount`.
+ */
+ uint32_t allocationCount;
+ /** \brief Number of bytes allocated in `VkDeviceMemory` blocks.
+
+ \note To avoid confusion, please be aware that what Vulkan calls an "allocation" - a whole `VkDeviceMemory` object
+ (e.g. as in `VkPhysicalDeviceLimits::maxMemoryAllocationCount`) is called a "block" in VMA, while VMA calls
+ "allocation" a #VmaAllocation object that represents a memory region sub-allocated from such block, usually for a single buffer or image.
+ */
+ VkDeviceSize blockBytes;
+ /** \brief Total number of bytes occupied by all #VmaAllocation objects.
+
+ Always less or equal than `blockBytes`.
+ Difference `(blockBytes - allocationBytes)` is the amount of memory allocated from Vulkan
+ but unused by any #VmaAllocation.
+ */
+ VkDeviceSize allocationBytes;
+} VmaStatistics;
-/** \brief Sets index of the current frame.
+/** \brief More detailed statistics than #VmaStatistics.
-This function must be used if you make allocations with
-#VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT and
-#VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT flags to inform the allocator
-when a new frame begins. Allocations queried using vmaGetAllocationInfo() cannot
-become lost in the current frame.
-*/
-VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex(
- VmaAllocator VMA_NOT_NULL allocator,
- uint32_t frameIndex);
+These are slower to calculate. Use for debugging purposes.
+See functions: vmaCalculateStatistics(), vmaCalculatePoolStatistics().
+
+Previous version of the statistics API provided averages, but they have been removed
+because they can be easily calculated as:
-/** \brief Calculated statistics of memory usage in entire allocator.
+\code
+VkDeviceSize allocationSizeAvg = detailedStats.statistics.allocationBytes / detailedStats.statistics.allocationCount;
+VkDeviceSize unusedBytes = detailedStats.statistics.blockBytes - detailedStats.statistics.allocationBytes;
+VkDeviceSize unusedRangeSizeAvg = unusedBytes / detailedStats.unusedRangeCount;
+\endcode
*/
-typedef struct VmaStatInfo
+typedef struct VmaDetailedStatistics
{
- /// Number of `VkDeviceMemory` Vulkan memory blocks allocated.
- uint32_t blockCount;
- /// Number of #VmaAllocation allocation objects allocated.
- uint32_t allocationCount;
+ /// Basic statistics.
+ VmaStatistics statistics;
/// Number of free ranges of memory between allocations.
uint32_t unusedRangeCount;
- /// Total number of bytes occupied by all allocations.
- VkDeviceSize usedBytes;
- /// Total number of bytes occupied by unused ranges.
- VkDeviceSize unusedBytes;
- VkDeviceSize allocationSizeMin, allocationSizeAvg, allocationSizeMax;
- VkDeviceSize unusedRangeSizeMin, unusedRangeSizeAvg, unusedRangeSizeMax;
-} VmaStatInfo;
-
-/// General statistics from current state of Allocator.
-typedef struct VmaStats
-{
- VmaStatInfo memoryType[VK_MAX_MEMORY_TYPES];
- VmaStatInfo memoryHeap[VK_MAX_MEMORY_HEAPS];
- VmaStatInfo total;
-} VmaStats;
+ /// Smallest allocation size. `VK_WHOLE_SIZE` if there are 0 allocations.
+ VkDeviceSize allocationSizeMin;
+ /// Largest allocation size. 0 if there are 0 allocations.
+ VkDeviceSize allocationSizeMax;
+ /// Smallest empty range size. `VK_WHOLE_SIZE` if there are 0 empty ranges.
+ VkDeviceSize unusedRangeSizeMin;
+ /// Largest empty range size. 0 if there are 0 empty ranges.
+ VkDeviceSize unusedRangeSizeMax;
+} VmaDetailedStatistics;
-/** \brief Retrieves statistics from current state of the Allocator.
+/** \brief General statistics from current state of the Allocator -
+total memory usage across all memory heaps and types.
-This function is called "calculate" not "get" because it has to traverse all
-internal data structures, so it may be quite slow. For faster but more brief statistics
-suitable to be called every frame or every allocation, use vmaGetBudget().
-
-Note that when using allocator from multiple threads, returned information may immediately
-become outdated.
+These are slower to calculate. Use for debugging purposes.
+See function vmaCalculateStatistics().
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStats(
- VmaAllocator VMA_NOT_NULL allocator,
- VmaStats* VMA_NOT_NULL pStats);
+typedef struct VmaTotalStatistics
+{
+ VmaDetailedStatistics memoryType[VK_MAX_MEMORY_TYPES];
+ VmaDetailedStatistics memoryHeap[VK_MAX_MEMORY_HEAPS];
+ VmaDetailedStatistics total;
+} VmaTotalStatistics;
-/** \brief Statistics of current memory usage and available budget, in bytes, for specific memory heap.
+/** \brief Statistics of current memory usage and available budget for a specific memory heap.
+
+These are fast to calculate.
+See function vmaGetHeapBudgets().
*/
typedef struct VmaBudget
{
- /** \brief Sum size of all `VkDeviceMemory` blocks allocated from particular heap, in bytes.
- */
- VkDeviceSize blockBytes;
-
- /** \brief Sum size of all allocations created in particular heap, in bytes.
-
- Usually less or equal than `blockBytes`.
- Difference `blockBytes - allocationBytes` is the amount of memory allocated but unused -
- available for new allocations or wasted due to fragmentation.
-
- It might be greater than `blockBytes` if there are some allocations in lost state, as they account
- to this value as well.
+ /** \brief Statistics fetched from the library.
*/
- VkDeviceSize allocationBytes;
-
+ VmaStatistics statistics;
/** \brief Estimated current memory usage of the program, in bytes.
- Fetched from system using `VK_EXT_memory_budget` extension if enabled.
+ Fetched from system using VK_EXT_memory_budget extension if enabled.
- It might be different than `blockBytes` (usually higher) due to additional implicit objects
+ It might be different than `statistics.blockBytes` (usually higher) due to additional implicit objects
also occupying the memory, like swapchain, pipelines, descriptor heaps, command buffers, or
`VkDeviceMemory` blocks allocated outside of this library, if any.
*/
VkDeviceSize usage;
-
/** \brief Estimated amount of memory available to the program, in bytes.
- Fetched from system using `VK_EXT_memory_budget` extension if enabled.
+ Fetched from system using VK_EXT_memory_budget extension if enabled.
It might be different (most probably smaller) than `VkMemoryHeap::size[heapIndex]` due to factors
external to the program, like other programs also consuming system resources.
@@ -2677,278 +1204,441 @@ typedef struct VmaBudget
VkDeviceSize budget;
} VmaBudget;
-/** \brief Retrieves information about current memory budget for all memory heaps.
-
-\param[out] pBudget Must point to array with number of elements at least equal to number of memory heaps in physical device used.
-
-This function is called "get" not "calculate" because it is very fast, suitable to be called
-every frame or every allocation. For more detailed statistics use vmaCalculateStats().
+/** @} */
-Note that when using allocator from multiple threads, returned information may immediately
-become outdated.
+/**
+\addtogroup group_alloc
+@{
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetBudget(
- VmaAllocator VMA_NOT_NULL allocator,
- VmaBudget* VMA_NOT_NULL pBudget);
-#ifndef VMA_STATS_STRING_ENABLED
-#define VMA_STATS_STRING_ENABLED 1
-#endif
+typedef struct VmaAllocationCreateInfo
+{
+ /// Use #VmaAllocationCreateFlagBits enum.
+ VmaAllocationCreateFlags flags;
+ /** \brief Intended usage of memory.
-#if VMA_STATS_STRING_ENABLED
+ You can leave #VMA_MEMORY_USAGE_UNKNOWN if you specify memory requirements in other way. \n
+ If `pool` is not null, this member is ignored.
+ */
+ VmaMemoryUsage usage;
+ /** \brief Flags that must be set in a Memory Type chosen for an allocation.
-/// Builds and returns statistics as string in JSON format.
-/** @param[out] ppStatsString Must be freed using vmaFreeStatsString() function.
-*/
-VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
- VmaAllocator VMA_NOT_NULL allocator,
- char* VMA_NULLABLE * VMA_NOT_NULL ppStatsString,
- VkBool32 detailedMap);
+ Leave 0 if you specify memory requirements in other way. \n
+ If `pool` is not null, this member is ignored.*/
+ VkMemoryPropertyFlags requiredFlags;
+ /** \brief Flags that preferably should be set in a memory type chosen for an allocation.
-VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString(
- VmaAllocator VMA_NOT_NULL allocator,
- char* VMA_NULLABLE pStatsString);
+ Set to 0 if no additional flags are preferred. \n
+ If `pool` is not null, this member is ignored. */
+ VkMemoryPropertyFlags preferredFlags;
+ /** \brief Bitmask containing one bit set for every memory type acceptable for this allocation.
-#endif // #if VMA_STATS_STRING_ENABLED
+ Value 0 is equivalent to `UINT32_MAX` - it means any memory type is accepted if
+ it meets other requirements specified by this structure, with no further
+ restrictions on memory type index. \n
+ If `pool` is not null, this member is ignored.
+ */
+ uint32_t memoryTypeBits;
+ /** \brief Pool that this allocation should be created in.
-/** \struct VmaPool
-\brief Represents custom memory pool
+ Leave `VK_NULL_HANDLE` to allocate from default pool. If not null, members:
+ `usage`, `requiredFlags`, `preferredFlags`, `memoryTypeBits` are ignored.
+ */
+ VmaPool VMA_NULLABLE pool;
+ /** \brief Custom general-purpose pointer that will be stored in #VmaAllocation, can be read as VmaAllocationInfo::pUserData and changed using vmaSetAllocationUserData().
-Fill structure VmaPoolCreateInfo and call function vmaCreatePool() to create it.
-Call function vmaDestroyPool() to destroy it.
+ If #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT is used, it must be either
+ null or pointer to a null-terminated string. The string will be then copied to
+ internal buffer, so it doesn't need to be valid after allocation call.
+ */
+ void* VMA_NULLABLE pUserData;
+ /** \brief A floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations.
-For more information see [Custom memory pools](@ref choosing_memory_type_custom_memory_pools).
-*/
-VK_DEFINE_HANDLE(VmaPool)
+ It is used only when #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT flag was used during creation of the #VmaAllocator object
+ and this allocation ends up as dedicated or is explicitly forced as dedicated using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+ Otherwise, it has the priority of a memory block where it is placed and this variable is ignored.
+ */
+ float priority;
+} VmaAllocationCreateInfo;
-typedef enum VmaMemoryUsage
+/// Describes parameter of created #VmaPool.
+typedef struct VmaPoolCreateInfo
{
- /** No intended memory usage specified.
- Use other members of VmaAllocationCreateInfo to specify your requirements.
+ /** \brief Vulkan memory type index to allocate this pool from.
*/
- VMA_MEMORY_USAGE_UNKNOWN = 0,
- /** Memory will be used on device only, so fast access from the device is preferred.
- It usually means device-local GPU (video) memory.
- No need to be mappable on host.
- It is roughly equivalent of `D3D12_HEAP_TYPE_DEFAULT`.
-
- Usage:
+ uint32_t memoryTypeIndex;
+ /** \brief Use combination of #VmaPoolCreateFlagBits.
+ */
+ VmaPoolCreateFlags flags;
+ /** \brief Size of a single `VkDeviceMemory` block to be allocated as part of this pool, in bytes. Optional.
- - Resources written and read by device, e.g. images used as attachments.
- - Resources transferred from host once (immutable) or infrequently and read by
- device multiple times, e.g. textures to be sampled, vertex buffers, uniform
- (constant) buffers, and majority of other types of resources used on GPU.
+ Specify nonzero to set explicit, constant size of memory blocks used by this
+ pool.
- Allocation may still end up in `HOST_VISIBLE` memory on some implementations.
- In such case, you are free to map it.
- You can use #VMA_ALLOCATION_CREATE_MAPPED_BIT with this usage type.
- */
- VMA_MEMORY_USAGE_GPU_ONLY = 1,
- /** Memory will be mappable on host.
- It usually means CPU (system) memory.
- Guarantees to be `HOST_VISIBLE` and `HOST_COHERENT`.
- CPU access is typically uncached. Writes may be write-combined.
- Resources created in this pool may still be accessible to the device, but access to them can be slow.
- It is roughly equivalent of `D3D12_HEAP_TYPE_UPLOAD`.
-
- Usage: Staging copy of resources used as transfer source.
+ Leave 0 to use default and let the library manage block sizes automatically.
+ Sizes of particular blocks may vary.
+ In this case, the pool will also support dedicated allocations.
*/
- VMA_MEMORY_USAGE_CPU_ONLY = 2,
- /**
- Memory that is both mappable on host (guarantees to be `HOST_VISIBLE`) and preferably fast to access by GPU.
- CPU access is typically uncached. Writes may be write-combined.
+ VkDeviceSize blockSize;
+ /** \brief Minimum number of blocks to be always allocated in this pool, even if they stay empty.
- Usage: Resources written frequently by host (dynamic), read by device. E.g. textures (with LINEAR layout), vertex buffers, uniform buffers updated every frame or every draw call.
+ Set to 0 to have no preallocated blocks and allow the pool be completely empty.
*/
- VMA_MEMORY_USAGE_CPU_TO_GPU = 3,
- /** Memory mappable on host (guarantees to be `HOST_VISIBLE`) and cached.
- It is roughly equivalent of `D3D12_HEAP_TYPE_READBACK`.
+ size_t minBlockCount;
+ /** \brief Maximum number of blocks that can be allocated in this pool. Optional.
- Usage:
+ Set to 0 to use default, which is `SIZE_MAX`, which means no limit.
- - Resources written by device, read by host - results of some computations, e.g. screen capture, average scene luminance for HDR tone mapping.
- - Any resources read or accessed randomly on host, e.g. CPU-side copy of vertex buffer used as source of transfer, but also used for collision detection.
+ Set to same value as VmaPoolCreateInfo::minBlockCount to have fixed amount of memory allocated
+ throughout whole lifetime of this pool.
*/
- VMA_MEMORY_USAGE_GPU_TO_CPU = 4,
- /** CPU memory - memory that is preferably not `DEVICE_LOCAL`, but also not guaranteed to be `HOST_VISIBLE`.
+ size_t maxBlockCount;
+ /** \brief A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relative to other memory allocations.
- Usage: Staging copy of resources moved from GPU memory to CPU memory as part
- of custom paging/residency mechanism, to be moved back to GPU memory when needed.
+ It is used only when #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT flag was used during creation of the #VmaAllocator object.
+ Otherwise, this variable is ignored.
*/
- VMA_MEMORY_USAGE_CPU_COPY = 5,
- /** Lazily allocated GPU memory having `VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT`.
- Exists mostly on mobile platforms. Using it on desktop PC or other GPUs with no such memory type present will fail the allocation.
+ float priority;
+ /** \brief Additional minimum alignment to be used for all allocations created from this pool. Can be 0.
- Usage: Memory for transient attachment images (color attachments, depth attachments etc.), created with `VK_IMAGE_USAGE_TRANSIENT_ATTACHMENT_BIT`.
+ Leave 0 (default) not to impose any additional alignment. If not 0, it must be a power of two.
+ It can be useful in cases where alignment returned by Vulkan by functions like `vkGetBufferMemoryRequirements` is not enough,
+ e.g. when doing interop with OpenGL.
+ */
+ VkDeviceSize minAllocationAlignment;
+ /** \brief Additional `pNext` chain to be attached to `VkMemoryAllocateInfo` used for every allocation made by this pool. Optional.
- Allocations with this usage are always created as dedicated - it implies #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+ Optional, can be null. If not null, it must point to a `pNext` chain of structures that can be attached to `VkMemoryAllocateInfo`.
+ It can be useful for special needs such as adding `VkExportMemoryAllocateInfoKHR`.
+ Structures pointed by this member must remain alive and unchanged for the whole lifetime of the custom pool.
+
+ Please note that some structures, e.g. `VkMemoryPriorityAllocateInfoEXT`, `VkMemoryDedicatedAllocateInfoKHR`,
+ can be attached automatically by this library when using other, more convenient of its features.
*/
- VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED = 6,
+ void* VMA_NULLABLE pMemoryAllocateNext;
+} VmaPoolCreateInfo;
- VMA_MEMORY_USAGE_MAX_ENUM = 0x7FFFFFFF
-} VmaMemoryUsage;
+/** @} */
-/// Flags to be passed as VmaAllocationCreateInfo::flags.
-typedef enum VmaAllocationCreateFlagBits {
- /** \brief Set this flag if the allocation should have its own memory block.
+/**
+\addtogroup group_alloc
+@{
+*/
- Use it for special, big resources, like fullscreen images used as attachments.
+/// Parameters of #VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().
+typedef struct VmaAllocationInfo
+{
+ /** \brief Memory type index that this allocation was allocated from.
- You should not use this flag if VmaAllocationCreateInfo::pool is not null.
+ It never changes.
*/
- VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT = 0x00000001,
+ uint32_t memoryType;
+ /** \brief Handle to Vulkan memory object.
- /** \brief Set this flag to only try to allocate from existing `VkDeviceMemory` blocks and never create new such block.
+ Same memory object can be shared by multiple allocations.
- If new allocation cannot be placed in any of the existing blocks, allocation
- fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY` error.
+ It can change after call to vmaDefragment() if this allocation is passed to the function.
+ */
+ VkDeviceMemory VMA_NULLABLE_NON_DISPATCHABLE deviceMemory;
+ /** \brief Offset in `VkDeviceMemory` object to the beginning of this allocation, in bytes. `(deviceMemory, offset)` pair is unique to this allocation.
- You should not use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT and
- #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT at the same time. It makes no sense.
+ You usually don't need to use this offset. If you create a buffer or an image together with the allocation using e.g. function
+ vmaCreateBuffer(), vmaCreateImage(), functions that operate on these resources refer to the beginning of the buffer or image,
+ not entire device memory block. Functions like vmaMapMemory(), vmaBindBufferMemory() also refer to the beginning of the allocation
+ and apply this offset automatically.
- If VmaAllocationCreateInfo::pool is not null, this flag is implied and ignored. */
- VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT = 0x00000002,
- /** \brief Set this flag to use a memory that will be persistently mapped and retrieve pointer to it.
+ It can change after call to vmaDefragment() if this allocation is passed to the function.
+ */
+ VkDeviceSize offset;
+ /** \brief Size of this allocation, in bytes.
- Pointer to mapped memory will be returned through VmaAllocationInfo::pMappedData.
+ It never changes.
- It is valid to use this flag for allocation made from memory type that is not
- `HOST_VISIBLE`. This flag is then ignored and memory is not mapped. This is
- useful if you need an allocation that is efficient to use on GPU
- (`DEVICE_LOCAL`) and still want to map it directly if possible on platforms that
- support it (e.g. Intel GPU).
+ \note Allocation size returned in this variable may be greater than the size
+ requested for the resource e.g. as `VkBufferCreateInfo::size`. Whole size of the
+ allocation is accessible for operations on memory e.g. using a pointer after
+ mapping with vmaMapMemory(), but operations on the resource e.g. using
+ `vkCmdCopyBuffer` must be limited to the size of the resource.
+ */
+ VkDeviceSize size;
+ /** \brief Pointer to the beginning of this allocation as mapped data.
- You should not use this flag together with #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT.
+ If the allocation hasn't been mapped using vmaMapMemory() and hasn't been
+ created with #VMA_ALLOCATION_CREATE_MAPPED_BIT flag, this value is null.
+
+ It can change after call to vmaMapMemory(), vmaUnmapMemory().
+ It can also change after call to vmaDefragment() if this allocation is passed to the function.
*/
- VMA_ALLOCATION_CREATE_MAPPED_BIT = 0x00000004,
- /** Allocation created with this flag can become lost as a result of another
- allocation with #VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT flag, so you
- must check it before use.
+ void* VMA_NULLABLE pMappedData;
+ /** \brief Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vmaSetAllocationUserData().
+
+ It can change after call to vmaSetAllocationUserData() for this allocation.
+ */
+ void* VMA_NULLABLE pUserData;
+} VmaAllocationInfo;
- To check if allocation is not lost, call vmaGetAllocationInfo() and check if
- VmaAllocationInfo::deviceMemory is not `VK_NULL_HANDLE`.
+/** \brief Parameters for defragmentation.
- For details about supporting lost allocations, see Lost Allocations
- chapter of User Guide on Main Page.
+To be used with function vmaBeginDefragmentation().
+*/
+typedef struct VmaDefragmentationInfo
+{
+ /// \brief Use combination of #VmaDefragmentationFlagBits.
+ VmaDefragmentationFlags flags;
+ /** \brief Custom pool to be defragmented.
- You should not use this flag together with #VMA_ALLOCATION_CREATE_MAPPED_BIT.
+ If null then default pools will undergo defragmentation process.
*/
- VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT = 0x00000008,
- /** While creating allocation using this flag, other allocations that were
- created with flag #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT can become lost.
+ VmaPool VMA_NULLABLE pool;
+ /** \brief Maximum numbers of bytes that can be copied during single pass, while moving allocations to different places.
- For details about supporting lost allocations, see Lost Allocations
- chapter of User Guide on Main Page.
+ `0` means no limit.
*/
- VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT = 0x00000010,
- /** Set this flag to treat VmaAllocationCreateInfo::pUserData as pointer to a
- null-terminated string. Instead of copying pointer value, a local copy of the
- string is made and stored in allocation's `pUserData`. The string is automatically
- freed together with the allocation. It is also used in vmaBuildStatsString().
+ VkDeviceSize maxBytesPerPass;
+ /** \brief Maximum number of allocations that can be moved during single pass to a different place.
+
+ `0` means no limit.
*/
- VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT = 0x00000020,
- /** Allocation will be created from upper stack in a double stack pool.
+ uint32_t maxAllocationsPerPass;
+} VmaDefragmentationInfo;
- This flag is only allowed for custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT flag.
+/// Single move of an allocation to be done for defragmentation.
+typedef struct VmaDefragmentationMove
+{
+ /// Operation to be performed on the allocation by vmaEndDefragmentationPass(). Default value is #VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY. You can modify it.
+ VmaDefragmentationMoveOperation operation;
+ /// Allocation that should be moved.
+ VmaAllocation VMA_NOT_NULL srcAllocation;
+ /// Destination memory block where the allocation should be moved.
+ VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE dstMemory;
+ /// Destination offset where the allocation should be moved.
+ VkDeviceSize dstOffset;
+ /// Internal data used by VMA. Do not use or modify!
+ void* VMA_NOT_NULL internalData;
+} VmaDefragmentationMove;
+
+/** \brief Parameters for incremental defragmentation steps.
+
+To be used with function vmaBeginDefragmentationPass().
+*/
+typedef struct VmaDefragmentationPassMoveInfo
+{
+ /// Number of elements in the `pMoves` array.
+ uint32_t moveCount;
+ /** \brief Array of moves to be performed by the user in the current defragmentation pass.
+
+ Pointer to an array of `moveCount` elements, owned by VMA, created in vmaBeginDefragmentationPass(), destroyed in vmaEndDefragmentationPass().
+
+ For each element, you should:
+
+ 1. Create a new buffer/image in the place pointed by VmaDefragmentationMove::dstMemory + VmaDefragmentationMove::dstOffset.
+ 2. Copy data from the VmaDefragmentationMove::srcAllocation e.g. using `vkCmdCopyBuffer`, `vkCmdCopyImage`.
+ 3. Make sure these commands finished executing on the GPU.
+ 4. Destroy the old buffer/image.
+
+ Only then you can finish defragmentation pass by calling vmaEndDefragmentationPass().
+ After this call, the allocation will point to the new place in memory.
+
+ Alternatively, if you cannot move specific allocation, you can set VmaDefragmentationMove::operation to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE.
+
+ Alternatively, if you decide you want to completely remove the allocation:
+
+ 1. Destroy its buffer/image.
+ 2. Set VmaDefragmentationMove::operation to #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY.
+
+ Then, after vmaEndDefragmentationPass() the allocation will be freed.
*/
- VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT = 0x00000040,
- /** Create both buffer/image and allocation, but don't bind them together.
- It is useful when you want to bind yourself to do some more advanced binding, e.g. using some extensions.
- The flag is meaningful only with functions that bind by default: vmaCreateBuffer(), vmaCreateImage().
- Otherwise it is ignored.
+ VmaDefragmentationMove* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(moveCount) pMoves;
+} VmaDefragmentationPassMoveInfo;
+
+/// Statistics returned for defragmentation process in function vmaEndDefragmentation().
+typedef struct VmaDefragmentationStats
+{
+ /// Total number of bytes that have been copied while moving allocations to different places.
+ VkDeviceSize bytesMoved;
+ /// Total number of bytes that have been released to the system by freeing empty `VkDeviceMemory` objects.
+ VkDeviceSize bytesFreed;
+ /// Number of allocations that have been moved to different places.
+ uint32_t allocationsMoved;
+ /// Number of empty `VkDeviceMemory` objects that have been released to the system.
+ uint32_t deviceMemoryBlocksFreed;
+} VmaDefragmentationStats;
+
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
+/// Parameters of created #VmaVirtualBlock object to be passed to vmaCreateVirtualBlock().
+typedef struct VmaVirtualBlockCreateInfo
+{
+ /** \brief Total size of the virtual block.
+
+ Sizes can be expressed in bytes or any units you want as long as you are consistent in using them.
+ For example, if you allocate from some array of structures, 1 can mean single instance of entire structure.
*/
- VMA_ALLOCATION_CREATE_DONT_BIND_BIT = 0x00000080,
- /** Create allocation only if additional device memory required for it, if any, won't exceed
- memory budget. Otherwise return `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+ VkDeviceSize size;
+
+ /** \brief Use combination of #VmaVirtualBlockCreateFlagBits.
*/
- VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT = 0x00000100,
+ VmaVirtualBlockCreateFlags flags;
+
+ /** \brief Custom CPU memory allocation callbacks. Optional.
- /** Allocation strategy that chooses smallest possible free range for the
- allocation.
+ Optional, can be null. When specified, they will be used for all CPU-side memory allocations.
*/
- VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT = 0x00010000,
- /** Allocation strategy that chooses biggest possible free range for the
- allocation.
+ const VkAllocationCallbacks* VMA_NULLABLE pAllocationCallbacks;
+} VmaVirtualBlockCreateInfo;
+
+/// Parameters of created virtual allocation to be passed to vmaVirtualAllocate().
+typedef struct VmaVirtualAllocationCreateInfo
+{
+ /** \brief Size of the allocation.
+
+ Cannot be zero.
*/
- VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT = 0x00020000,
- /** Allocation strategy that chooses first suitable free range for the
- allocation.
+ VkDeviceSize size;
+ /** \brief Required alignment of the allocation. Optional.
- "First" doesn't necessarily means the one with smallest offset in memory,
- but rather the one that is easiest and fastest to find.
+ Must be power of two. Special value 0 has the same meaning as 1 - means no special alignment is required, so allocation can start at any offset.
+ */
+ VkDeviceSize alignment;
+ /** \brief Use combination of #VmaVirtualAllocationCreateFlagBits.
*/
- VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT = 0x00040000,
+ VmaVirtualAllocationCreateFlags flags;
+ /** \brief Custom pointer to be associated with the allocation. Optional.
- /** Allocation strategy that tries to minimize memory usage.
+ It can be any value and can be used for user-defined purposes. It can be fetched or changed later.
*/
- VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT = VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT,
- /** Allocation strategy that tries to minimize allocation time.
+ void* VMA_NULLABLE pUserData;
+} VmaVirtualAllocationCreateInfo;
+
+/// Parameters of an existing virtual allocation, returned by vmaGetVirtualAllocationInfo().
+typedef struct VmaVirtualAllocationInfo
+{
+ /** \brief Offset of the allocation.
+
+ Offset at which the allocation was made.
*/
- VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT = VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT,
- /** Allocation strategy that tries to minimize memory fragmentation.
+ VkDeviceSize offset;
+ /** \brief Size of the allocation.
+
+ Same value as passed in VmaVirtualAllocationCreateInfo::size.
*/
- VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT = VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT,
+ VkDeviceSize size;
+ /** \brief Custom pointer associated with the allocation.
- /** A bit mask to extract only `STRATEGY` bits from entire set of flags.
+ Same value as passed in VmaVirtualAllocationCreateInfo::pUserData or to vmaSetVirtualAllocationUserData().
*/
- VMA_ALLOCATION_CREATE_STRATEGY_MASK =
- VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT |
- VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT |
- VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT,
+ void* VMA_NULLABLE pUserData;
+} VmaVirtualAllocationInfo;
- VMA_ALLOCATION_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VmaAllocationCreateFlagBits;
-typedef VkFlags VmaAllocationCreateFlags;
+/** @} */
-typedef struct VmaAllocationCreateInfo
-{
- /// Use #VmaAllocationCreateFlagBits enum.
- VmaAllocationCreateFlags flags;
- /** \brief Intended usage of memory.
+#endif // _VMA_DATA_TYPES_DECLARATIONS
- You can leave #VMA_MEMORY_USAGE_UNKNOWN if you specify memory requirements in other way. \n
- If `pool` is not null, this member is ignored.
- */
- VmaMemoryUsage usage;
- /** \brief Flags that must be set in a Memory Type chosen for an allocation.
+#ifndef _VMA_FUNCTION_HEADERS
- Leave 0 if you specify memory requirements in other way. \n
- If `pool` is not null, this member is ignored.*/
- VkMemoryPropertyFlags requiredFlags;
- /** \brief Flags that preferably should be set in a memory type chosen for an allocation.
+/**
+\addtogroup group_init
+@{
+*/
- Set to 0 if no additional flags are preferred. \n
- If `pool` is not null, this member is ignored. */
- VkMemoryPropertyFlags preferredFlags;
- /** \brief Bitmask containing one bit set for every memory type acceptable for this allocation.
+/// Creates #VmaAllocator object.
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAllocator(
+ const VmaAllocatorCreateInfo* VMA_NOT_NULL pCreateInfo,
+ VmaAllocator VMA_NULLABLE* VMA_NOT_NULL pAllocator);
- Value 0 is equivalent to `UINT32_MAX` - it means any memory type is accepted if
- it meets other requirements specified by this structure, with no further
- restrictions on memory type index. \n
- If `pool` is not null, this member is ignored.
- */
- uint32_t memoryTypeBits;
- /** \brief Pool that this allocation should be created in.
+/// Destroys allocator object.
+VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAllocator(
+ VmaAllocator VMA_NULLABLE allocator);
- Leave `VK_NULL_HANDLE` to allocate from default pool. If not null, members:
- `usage`, `requiredFlags`, `preferredFlags`, `memoryTypeBits` are ignored.
- */
- VmaPool VMA_NULLABLE pool;
- /** \brief Custom general-purpose pointer that will be stored in #VmaAllocation, can be read as VmaAllocationInfo::pUserData and changed using vmaSetAllocationUserData().
+/** \brief Returns information about existing #VmaAllocator object - handle to Vulkan device etc.
- If #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT is used, it must be either
- null or pointer to a null-terminated string. The string will be then copied to
- internal buffer, so it doesn't need to be valid after allocation call.
- */
- void* VMA_NULLABLE pUserData;
- /** \brief A floating-point value between 0 and 1, indicating the priority of the allocation relative to other memory allocations.
+It might be useful if you want to keep just the #VmaAllocator handle and fetch other required handles to
+`VkPhysicalDevice`, `VkDevice` etc. every time using this function.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocatorInfo(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaAllocatorInfo* VMA_NOT_NULL pAllocatorInfo);
- It is used only when #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT flag was used during creation of the #VmaAllocator object
- and this allocation ends up as dedicated or is explicitly forced as dedicated using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
- Otherwise, it has the priority of a memory block where it is placed and this variable is ignored.
- */
- float priority;
-} VmaAllocationCreateInfo;
+/**
+PhysicalDeviceProperties are fetched from physicalDevice by the allocator.
+You can access it here, without fetching it again on your own.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetPhysicalDeviceProperties(
+ VmaAllocator VMA_NOT_NULL allocator,
+ const VkPhysicalDeviceProperties* VMA_NULLABLE* VMA_NOT_NULL ppPhysicalDeviceProperties);
+
+/**
+PhysicalDeviceMemoryProperties are fetched from physicalDevice by the allocator.
+You can access it here, without fetching it again on your own.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryProperties(
+ VmaAllocator VMA_NOT_NULL allocator,
+ const VkPhysicalDeviceMemoryProperties* VMA_NULLABLE* VMA_NOT_NULL ppPhysicalDeviceMemoryProperties);
+
+/**
+\brief Given Memory Type Index, returns Property Flags of this memory type.
+
+This is just a convenience function. Same information can be obtained using
+vmaGetMemoryProperties().
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetMemoryTypeProperties(
+ VmaAllocator VMA_NOT_NULL allocator,
+ uint32_t memoryTypeIndex,
+ VkMemoryPropertyFlags* VMA_NOT_NULL pFlags);
+
+/** \brief Sets index of the current frame.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex(
+ VmaAllocator VMA_NOT_NULL allocator,
+ uint32_t frameIndex);
+
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
+/** \brief Retrieves statistics from current state of the Allocator.
+
+This function is called "calculate" not "get" because it has to traverse all
+internal data structures, so it may be quite slow. Use it for debugging purposes.
+For faster but more brief statistics suitable to be called every frame or every allocation,
+use vmaGetHeapBudgets().
+
+Note that when using allocator from multiple threads, returned information may immediately
+become outdated.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaTotalStatistics* VMA_NOT_NULL pStats);
+
+/** \brief Retrieves information about current memory usage and budget for all memory heaps.
+
+\param allocator
+\param[out] pBudgets Must point to array with number of elements at least equal to number of memory heaps in physical device used.
+
+This function is called "get" not "calculate" because it is very fast, suitable to be called
+every frame or every allocation. For more detailed statistics use vmaCalculateStatistics().
+
+Note that when using allocator from multiple threads, returned information may immediately
+become outdated.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaBudget* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL("VkPhysicalDeviceMemoryProperties::memoryHeapCount") pBudgets);
+
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
/**
\brief Helps to find memoryTypeIndex, given memoryTypeBits and VmaAllocationCreateInfo.
@@ -2977,12 +1667,6 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndex(
It can be useful e.g. to determine value to be used as VmaPoolCreateInfo::memoryTypeIndex.
It internally creates a temporary, dummy buffer that never has memory bound.
-It is just a convenience function, equivalent to calling:
-
-- `vkCreateBuffer`
-- `vkGetBufferMemoryRequirements`
-- `vmaFindMemoryTypeIndex`
-- `vkDestroyBuffer`
*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
VmaAllocator VMA_NOT_NULL allocator,
@@ -2995,12 +1679,6 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
It can be useful e.g. to determine value to be used as VmaPoolCreateInfo::memoryTypeIndex.
It internally creates a temporary, dummy image that never has memory bound.
-It is just a convenience function, equivalent to calling:
-
-- `vkCreateImage`
-- `vkGetImageMemoryRequirements`
-- `vmaFindMemoryTypeIndex`
-- `vkDestroyImage`
*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo(
VmaAllocator VMA_NOT_NULL allocator,
@@ -3008,172 +1686,16 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo(
const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo,
uint32_t* VMA_NOT_NULL pMemoryTypeIndex);
-/// Flags to be passed as VmaPoolCreateInfo::flags.
-typedef enum VmaPoolCreateFlagBits {
- /** \brief Use this flag if you always allocate only buffers and linear images or only optimal images out of this pool and so Buffer-Image Granularity can be ignored.
-
- This is an optional optimization flag.
-
- If you always allocate using vmaCreateBuffer(), vmaCreateImage(),
- vmaAllocateMemoryForBuffer(), then you don't need to use it because allocator
- knows exact type of your allocations so it can handle Buffer-Image Granularity
- in the optimal way.
-
- If you also allocate using vmaAllocateMemoryForImage() or vmaAllocateMemory(),
- exact type of such allocations is not known, so allocator must be conservative
- in handling Buffer-Image Granularity, which can lead to suboptimal allocation
- (wasted memory). In that case, if you can make sure you always allocate only
- buffers and linear images or only optimal images out of this pool, use this flag
- to make allocator disregard Buffer-Image Granularity and so make allocations
- faster and more optimal.
- */
- VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT = 0x00000002,
-
- /** \brief Enables alternative, linear allocation algorithm in this pool.
-
- Specify this flag to enable linear allocation algorithm, which always creates
- new allocations after last one and doesn't reuse space from allocations freed in
- between. It trades memory consumption for simplified algorithm and data
- structure, which has better performance and uses less memory for metadata.
-
- By using this flag, you can achieve behavior of free-at-once, stack,
- ring buffer, and double stack. For details, see documentation chapter
- \ref linear_algorithm.
-
- When using this flag, you must specify VmaPoolCreateInfo::maxBlockCount == 1 (or 0 for default).
-
- For more details, see [Linear allocation algorithm](@ref linear_algorithm).
- */
- VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT = 0x00000004,
-
- /** \brief Enables alternative, buddy allocation algorithm in this pool.
-
- It operates on a tree of blocks, each having size that is a power of two and
- a half of its parent's size. Comparing to default algorithm, this one provides
- faster allocation and deallocation and decreased external fragmentation,
- at the expense of more memory wasted (internal fragmentation).
-
- For more details, see [Buddy allocation algorithm](@ref buddy_algorithm).
- */
- VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT = 0x00000008,
-
- /** Bit mask to extract only `ALGORITHM` bits from entire set of flags.
- */
- VMA_POOL_CREATE_ALGORITHM_MASK =
- VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT |
- VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT,
-
- VMA_POOL_CREATE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VmaPoolCreateFlagBits;
-typedef VkFlags VmaPoolCreateFlags;
-
-/** \brief Describes parameter of created #VmaPool.
-*/
-typedef struct VmaPoolCreateInfo {
- /** \brief Vulkan memory type index to allocate this pool from.
- */
- uint32_t memoryTypeIndex;
- /** \brief Use combination of #VmaPoolCreateFlagBits.
- */
- VmaPoolCreateFlags flags;
- /** \brief Size of a single `VkDeviceMemory` block to be allocated as part of this pool, in bytes. Optional.
-
- Specify nonzero to set explicit, constant size of memory blocks used by this
- pool.
-
- Leave 0 to use default and let the library manage block sizes automatically.
- Sizes of particular blocks may vary.
- */
- VkDeviceSize blockSize;
- /** \brief Minimum number of blocks to be always allocated in this pool, even if they stay empty.
-
- Set to 0 to have no preallocated blocks and allow the pool be completely empty.
- */
- size_t minBlockCount;
- /** \brief Maximum number of blocks that can be allocated in this pool. Optional.
-
- Set to 0 to use default, which is `SIZE_MAX`, which means no limit.
-
- Set to same value as VmaPoolCreateInfo::minBlockCount to have fixed amount of memory allocated
- throughout whole lifetime of this pool.
- */
- size_t maxBlockCount;
- /** \brief Maximum number of additional frames that are in use at the same time as current frame.
-
- This value is used only when you make allocations with
- #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT flag. Such allocation cannot become
- lost if allocation.lastUseFrameIndex >= allocator.currentFrameIndex - frameInUseCount.
-
- For example, if you double-buffer your command buffers, so resources used for
- rendering in previous frame may still be in use by the GPU at the moment you
- allocate resources needed for the current frame, set this value to 1.
-
- If you want to allow any allocations other than used in the current frame to
- become lost, set this value to 0.
- */
- uint32_t frameInUseCount;
- /** \brief A floating-point value between 0 and 1, indicating the priority of the allocations in this pool relative to other memory allocations.
-
- It is used only when #VMA_ALLOCATOR_CREATE_EXT_MEMORY_PRIORITY_BIT flag was used during creation of the #VmaAllocator object.
- Otherwise, this variable is ignored.
- */
- float priority;
- /** \brief Additional minimum alignment to be used for all allocations created from this pool. Can be 0.
-
- Leave 0 (default) not to impose any additional alignment. If not 0, it must be a power of two.
- It can be useful in cases where alignment returned by Vulkan by functions like `vkGetBufferMemoryRequirements` is not enough,
- e.g. when doing interop with OpenGL.
- */
- VkDeviceSize minAllocationAlignment;
- /** \brief Additional `pNext` chain to be attached to `VkMemoryAllocateInfo` used for every allocation made by this pool. Optional.
-
- Optional, can be null. If not null, it must point to a `pNext` chain of structures that can be attached to `VkMemoryAllocateInfo`.
- It can be useful for special needs such as adding `VkExportMemoryAllocateInfoKHR`.
- Structures pointed by this member must remain alive and unchanged for the whole lifetime of the custom pool.
-
- Please note that some structures, e.g. `VkMemoryPriorityAllocateInfoEXT`, `VkMemoryDedicatedAllocateInfoKHR`,
- can be attached automatically by this library when using other, more convenient of its features.
- */
- void* VMA_NULLABLE pMemoryAllocateNext;
-} VmaPoolCreateInfo;
-
-/** \brief Describes parameter of existing #VmaPool.
-*/
-typedef struct VmaPoolStats {
- /** \brief Total amount of `VkDeviceMemory` allocated from Vulkan for this pool, in bytes.
- */
- VkDeviceSize size;
- /** \brief Total number of bytes in the pool not used by any #VmaAllocation.
- */
- VkDeviceSize unusedSize;
- /** \brief Number of #VmaAllocation objects created from this pool that were not destroyed or lost.
- */
- size_t allocationCount;
- /** \brief Number of continuous memory ranges in the pool not used by any #VmaAllocation.
- */
- size_t unusedRangeCount;
- /** \brief Size of the largest continuous free memory region available for new allocation.
-
- Making a new allocation of that size is not guaranteed to succeed because of
- possible additional margin required to respect alignment and buffer/image
- granularity.
- */
- VkDeviceSize unusedRangeSizeMax;
- /** \brief Number of `VkDeviceMemory` blocks allocated for this pool.
- */
- size_t blockCount;
-} VmaPoolStats;
-
/** \brief Allocates Vulkan device memory and creates #VmaPool object.
-@param allocator Allocator object.
-@param pCreateInfo Parameters of pool to create.
-@param[out] pPool Handle to created pool.
+\param allocator Allocator object.
+\param pCreateInfo Parameters of pool to create.
+\param[out] pPool Handle to created pool.
*/
VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreatePool(
VmaAllocator VMA_NOT_NULL allocator,
const VmaPoolCreateInfo* VMA_NOT_NULL pCreateInfo,
- VmaPool VMA_NULLABLE * VMA_NOT_NULL pPool);
+ VmaPool VMA_NULLABLE* VMA_NOT_NULL pPool);
/** \brief Destroys #VmaPool object and frees Vulkan device memory.
*/
@@ -3181,27 +1703,41 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool(
VmaAllocator VMA_NOT_NULL allocator,
VmaPool VMA_NULLABLE pool);
+/** @} */
+
+/**
+\addtogroup group_stats
+@{
+*/
+
/** \brief Retrieves statistics of existing #VmaPool object.
-@param allocator Allocator object.
-@param pool Pool object.
-@param[out] pPoolStats Statistics of specified pool.
+\param allocator Allocator object.
+\param pool Pool object.
+\param[out] pPoolStats Statistics of specified pool.
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStatistics(
VmaAllocator VMA_NOT_NULL allocator,
VmaPool VMA_NOT_NULL pool,
- VmaPoolStats* VMA_NOT_NULL pPoolStats);
+ VmaStatistics* VMA_NOT_NULL pPoolStats);
-/** \brief Marks all allocations in given pool as lost if they are not used in current frame or VmaPoolCreateInfo::frameInUseCount back from now.
+/** \brief Retrieves detailed statistics of existing #VmaPool object.
-@param allocator Allocator object.
-@param pool Pool.
-@param[out] pLostAllocationCount Number of allocations marked as lost. Optional - pass null if you don't need this information.
+\param allocator Allocator object.
+\param pool Pool object.
+\param[out] pPoolStats Statistics of specified pool.
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaMakePoolAllocationsLost(
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculatePoolStatistics(
VmaAllocator VMA_NOT_NULL allocator,
VmaPool VMA_NOT_NULL pool,
- size_t* VMA_NULLABLE pLostAllocationCount);
+ VmaDetailedStatistics* VMA_NOT_NULL pPoolStats);
+
+/** @} */
+
+/**
+\addtogroup group_alloc
+@{
+*/
/** \brief Checks magic number in margins around all allocations in given memory pool in search for corruptions.
@@ -3213,11 +1749,13 @@ Possible return values:
- `VK_ERROR_FEATURE_NOT_PRESENT` - corruption detection is not enabled for specified pool.
- `VK_SUCCESS` - corruption detection has been performed and succeeded.
-- `VK_ERROR_VALIDATION_FAILED_EXT` - corruption detection has been performed and found memory corruptions around one of the allocations.
+- `VK_ERROR_UNKNOWN` - corruption detection has been performed and found memory corruptions around one of the allocations.
`VMA_ASSERT` is also fired in that case.
- Other value: Error returned by Vulkan, e.g. memory mapping failure.
*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption(VmaAllocator VMA_NOT_NULL allocator, VmaPool VMA_NOT_NULL pool);
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaPool VMA_NOT_NULL pool);
/** \brief Retrieves name of a custom pool.
@@ -3228,7 +1766,7 @@ destroyed or its name is changed using vmaSetPoolName().
VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolName(
VmaAllocator VMA_NOT_NULL allocator,
VmaPool VMA_NOT_NULL pool,
- const char* VMA_NULLABLE * VMA_NOT_NULL ppName);
+ const char* VMA_NULLABLE* VMA_NOT_NULL ppName);
/** \brief Sets name of a custom pool.
@@ -3240,90 +1778,13 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetPoolName(
VmaPool VMA_NOT_NULL pool,
const char* VMA_NULLABLE pName);
-/** \struct VmaAllocation
-\brief Represents single memory allocation.
-
-It may be either dedicated block of `VkDeviceMemory` or a specific region of a bigger block of this type
-plus unique offset.
-
-There are multiple ways to create such object.
-You need to fill structure VmaAllocationCreateInfo.
-For more information see [Choosing memory type](@ref choosing_memory_type).
-
-Although the library provides convenience functions that create Vulkan buffer or image,
-allocate memory for it and bind them together,
-binding of the allocation to a buffer or an image is out of scope of the allocation itself.
-Allocation object can exist without buffer/image bound,
-binding can be done manually by the user, and destruction of it can be done
-independently of destruction of the allocation.
-
-The object also remembers its size and some other information.
-To retrieve this information, use function vmaGetAllocationInfo() and inspect
-returned structure VmaAllocationInfo.
-
-Some kinds allocations can be in lost state.
-For more information, see [Lost allocations](@ref lost_allocations).
-*/
-VK_DEFINE_HANDLE(VmaAllocation)
-
-/** \brief Parameters of #VmaAllocation objects, that can be retrieved using function vmaGetAllocationInfo().
-*/
-typedef struct VmaAllocationInfo {
- /** \brief Memory type index that this allocation was allocated from.
-
- It never changes.
- */
- uint32_t memoryType;
- /** \brief Handle to Vulkan memory object.
-
- Same memory object can be shared by multiple allocations.
-
- It can change after call to vmaDefragment() if this allocation is passed to the function, or if allocation is lost.
-
- If the allocation is lost, it is equal to `VK_NULL_HANDLE`.
- */
- VkDeviceMemory VMA_NULLABLE_NON_DISPATCHABLE deviceMemory;
- /** \brief Offset in `VkDeviceMemory` object to the beginning of this allocation, in bytes. `(deviceMemory, offset)` pair is unique to this allocation.
-
- You usually don't need to use this offset. If you create a buffer or an image together with the allocation using e.g. function
- vmaCreateBuffer(), vmaCreateImage(), functions that operate on these resources refer to the beginning of the buffer or image,
- not entire device memory block. Functions like vmaMapMemory(), vmaBindBufferMemory() also refer to the beginning of the allocation
- and apply this offset automatically.
-
- It can change after call to vmaDefragment() if this allocation is passed to the function, or if allocation is lost.
- */
- VkDeviceSize offset;
- /** \brief Size of this allocation, in bytes.
-
- It never changes, unless allocation is lost.
-
- \note Allocation size returned in this variable may be greater than the size
- requested for the resource e.g. as `VkBufferCreateInfo::size`. Whole size of the
- allocation is accessible for operations on memory e.g. using a pointer after
- mapping with vmaMapMemory(), but operations on the resource e.g. using
- `vkCmdCopyBuffer` must be limited to the size of the resource.
- */
- VkDeviceSize size;
- /** \brief Pointer to the beginning of this allocation as mapped data.
-
- If the allocation hasn't been mapped using vmaMapMemory() and hasn't been
- created with #VMA_ALLOCATION_CREATE_MAPPED_BIT flag, this value is null.
-
- It can change after call to vmaMapMemory(), vmaUnmapMemory().
- It can also change after call to vmaDefragment() if this allocation is passed to the function.
- */
- void* VMA_NULLABLE pMappedData;
- /** \brief Custom general-purpose pointer that was passed as VmaAllocationCreateInfo::pUserData or set using vmaSetAllocationUserData().
-
- It can change after call to vmaSetAllocationUserData() for this allocation.
- */
- void* VMA_NULLABLE pUserData;
-} VmaAllocationInfo;
-
/** \brief General purpose memory allocation.
-@param[out] pAllocation Handle to allocated memory.
-@param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo().
+\param allocator
+\param pVkMemoryRequirements
+\param pCreateInfo
+\param[out] pAllocation Handle to allocated memory.
+\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo().
You should free the memory using vmaFreeMemory() or vmaFreeMemoryPages().
@@ -3334,17 +1795,17 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemory(
VmaAllocator VMA_NOT_NULL allocator,
const VkMemoryRequirements* VMA_NOT_NULL pVkMemoryRequirements,
const VmaAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL pAllocation,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation,
VmaAllocationInfo* VMA_NULLABLE pAllocationInfo);
/** \brief General purpose memory allocation for multiple allocation objects at once.
-@param allocator Allocator object.
-@param pVkMemoryRequirements Memory requirements for each allocation.
-@param pCreateInfo Creation parameters for each alloction.
-@param allocationCount Number of allocations to make.
-@param[out] pAllocations Pointer to array that will be filled with handles to created allocations.
-@param[out] pAllocationInfo Optional. Pointer to array that will be filled with parameters of created allocations.
+\param allocator Allocator object.
+\param pVkMemoryRequirements Memory requirements for each allocation.
+\param pCreateInfo Creation parameters for each allocation.
+\param allocationCount Number of allocations to make.
+\param[out] pAllocations Pointer to array that will be filled with handles to created allocations.
+\param[out] pAllocationInfo Optional. Pointer to array that will be filled with parameters of created allocations.
You should free the memory using vmaFreeMemory() or vmaFreeMemoryPages().
@@ -3361,12 +1822,15 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryPages(
const VkMemoryRequirements* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pVkMemoryRequirements,
const VmaAllocationCreateInfo* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pCreateInfo,
size_t allocationCount,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,
VmaAllocationInfo* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationInfo);
/**
-@param[out] pAllocation Handle to allocated memory.
-@param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo().
+\param allocator
+\param buffer
+\param pCreateInfo
+\param[out] pAllocation Handle to allocated memory.
+\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo().
You should free the memory using vmaFreeMemory().
*/
@@ -3374,7 +1838,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForBuffer(
VmaAllocator VMA_NOT_NULL allocator,
VkBuffer VMA_NOT_NULL_NON_DISPATCHABLE buffer,
const VmaAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL pAllocation,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation,
VmaAllocationInfo* VMA_NULLABLE pAllocationInfo);
/// Function similar to vmaAllocateMemoryForBuffer().
@@ -3382,7 +1846,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForImage(
VmaAllocator VMA_NOT_NULL allocator,
VkImage VMA_NOT_NULL_NON_DISPATCHABLE image,
const VmaAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL pAllocation,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation,
VmaAllocationInfo* VMA_NULLABLE pAllocationInfo);
/** \brief Frees memory previously allocated using vmaAllocateMemory(), vmaAllocateMemoryForBuffer(), or vmaAllocateMemoryForImage().
@@ -3406,47 +1870,23 @@ Passing `VK_NULL_HANDLE` as elements of `pAllocations` array is valid. Such entr
VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemoryPages(
VmaAllocator VMA_NOT_NULL allocator,
size_t allocationCount,
- const VmaAllocation VMA_NULLABLE * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations);
+ const VmaAllocation VMA_NULLABLE* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations);
-/** \brief Returns current information about specified allocation and atomically marks it as used in current frame.
+/** \brief Returns current information about specified allocation.
Current paramteres of given allocation are returned in `pAllocationInfo`.
-This function also atomically "touches" allocation - marks it as used in current frame,
-just like vmaTouchAllocation().
-If the allocation is in lost state, `pAllocationInfo->deviceMemory == VK_NULL_HANDLE`.
-
-Although this function uses atomics and doesn't lock any mutex, so it should be quite efficient,
-you can avoid calling it too often.
-
-- You can retrieve same VmaAllocationInfo structure while creating your resource, from function
- vmaCreateBuffer(), vmaCreateImage(). You can remember it if you are sure parameters don't change
- (e.g. due to defragmentation or allocation becoming lost).
-- If you just want to check if allocation is not lost, vmaTouchAllocation() will work faster.
+Although this function doesn't lock any mutex, so it should be quite efficient,
+you should avoid calling it too often.
+You can retrieve same VmaAllocationInfo structure while creating your resource, from function
+vmaCreateBuffer(), vmaCreateImage(). You can remember it if you are sure parameters don't change
+(e.g. due to defragmentation).
*/
VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationInfo(
VmaAllocator VMA_NOT_NULL allocator,
VmaAllocation VMA_NOT_NULL allocation,
VmaAllocationInfo* VMA_NOT_NULL pAllocationInfo);
-/** \brief Returns `VK_TRUE` if allocation is not lost and atomically marks it as used in current frame.
-
-If the allocation has been created with #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT flag,
-this function returns `VK_TRUE` if it's not in lost state, so it can still be used.
-It then also atomically "touches" the allocation - marks it as used in current frame,
-so that you can be sure it won't become lost in current frame or next `frameInUseCount` frames.
-
-If the allocation is in lost state, the function returns `VK_FALSE`.
-Memory of such allocation, as well as buffer or image bound to it, should not be used.
-Lost allocation and the buffer/image still need to be destroyed.
-
-If the allocation has been created without #VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT flag,
-this function always returns `VK_TRUE`.
-*/
-VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaTouchAllocation(
- VmaAllocator VMA_NOT_NULL allocator,
- VmaAllocation VMA_NOT_NULL allocation);
-
/** \brief Sets pUserData in given allocation to new value.
If the allocation was created with VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT,
@@ -3465,27 +1905,27 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationUserData(
VmaAllocation VMA_NOT_NULL allocation,
void* VMA_NULLABLE pUserData);
-/** \brief Creates new allocation that is in lost state from the beginning.
-
-It can be useful if you need a dummy, non-null allocation.
-
-You still need to destroy created object using vmaFreeMemory().
+/**
+\brief Given an allocation, returns Property Flags of its memory type.
-Returned allocation is not tied to any specific memory pool or memory type and
-not bound to any image or buffer. It has size = 0. It cannot be turned into
-a real, non-empty allocation.
+This is just a convenience function. Same information can be obtained using
+vmaGetAllocationInfo() + vmaGetMemoryProperties().
*/
-VMA_CALL_PRE void VMA_CALL_POST vmaCreateLostAllocation(
+VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationMemoryProperties(
VmaAllocator VMA_NOT_NULL allocator,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL pAllocation);
+ VmaAllocation VMA_NOT_NULL allocation,
+ VkMemoryPropertyFlags* VMA_NOT_NULL pFlags);
/** \brief Maps memory represented by given allocation and returns pointer to it.
Maps memory represented by given allocation to make it accessible to CPU code.
When succeeded, `*ppData` contains pointer to first byte of this memory.
-If the allocation is part of bigger `VkDeviceMemory` block, the pointer is
-correctly offsetted to the beginning of region assigned to this particular
-allocation.
+
+\warning
+If the allocation is part of a bigger `VkDeviceMemory` block, returned pointer is
+correctly offsetted to the beginning of region assigned to this particular allocation.
+Unlike the result of `vkMapMemory`, it points to the allocation, not to the beginning of the whole block.
+You should not add VmaAllocationInfo::offset to it!
Mapping is internally reference-counted and synchronized, so despite raw Vulkan
function `vkMapMemory()` cannot be used to map same block of `VkDeviceMemory`
@@ -3509,10 +1949,6 @@ vmaMapMemory(). You must not call vmaUnmapMemory() additional time to free the
This function fails when used on allocation made in memory type that is not
`HOST_VISIBLE`.
-This function always fails when called for allocation that was created with
-#VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT flag. Such allocations cannot be
-mapped.
-
This function doesn't automatically flush or invalidate caches.
If the allocation is made from a memory types that is not `HOST_COHERENT`,
you also need to use vmaInvalidateAllocation() / vmaFlushAllocation(), as required by Vulkan specification.
@@ -3520,7 +1956,7 @@ you also need to use vmaInvalidateAllocation() / vmaFlushAllocation(), as requir
VMA_CALL_PRE VkResult VMA_CALL_POST vmaMapMemory(
VmaAllocator VMA_NOT_NULL allocator,
VmaAllocation VMA_NOT_NULL allocation,
- void* VMA_NULLABLE * VMA_NOT_NULL ppData);
+ void* VMA_NULLABLE* VMA_NOT_NULL ppData);
/** \brief Unmaps memory represented by given allocation, mapped previously using vmaMapMemory().
@@ -3605,7 +2041,7 @@ called, otherwise `VK_SUCCESS`.
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocations(
VmaAllocator VMA_NOT_NULL allocator,
uint32_t allocationCount,
- const VmaAllocation VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,
+ const VmaAllocation VMA_NOT_NULL* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,
const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets,
const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes);
@@ -3626,13 +2062,14 @@ called, otherwise `VK_SUCCESS`.
VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocations(
VmaAllocator VMA_NOT_NULL allocator,
uint32_t allocationCount,
- const VmaAllocation VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,
+ const VmaAllocation VMA_NOT_NULL* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) allocations,
const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) offsets,
const VkDeviceSize* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) sizes);
/** \brief Checks magic number in margins around all allocations in given memory types (in both default and custom pools) in search for corruptions.
-@param memoryTypeBits Bit mask, where each bit set means that a memory type with that index should be checked.
+\param allocator
+\param memoryTypeBits Bit mask, where each bit set means that a memory type with that index should be checked.
Corruption detection is enabled only when `VMA_DEBUG_DETECT_CORRUPTION` macro is defined to nonzero,
`VMA_DEBUG_MARGIN` is defined to nonzero and only for memory types that are
@@ -3642,248 +2079,78 @@ Possible return values:
- `VK_ERROR_FEATURE_NOT_PRESENT` - corruption detection is not enabled for any of specified memory types.
- `VK_SUCCESS` - corruption detection has been performed and succeeded.
-- `VK_ERROR_VALIDATION_FAILED_EXT` - corruption detection has been performed and found memory corruptions around one of the allocations.
+- `VK_ERROR_UNKNOWN` - corruption detection has been performed and found memory corruptions around one of the allocations.
`VMA_ASSERT` is also fired in that case.
- Other value: Error returned by Vulkan, e.g. memory mapping failure.
*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(VmaAllocator VMA_NOT_NULL allocator, uint32_t memoryTypeBits);
-
-/** \struct VmaDefragmentationContext
-\brief Represents Opaque object that represents started defragmentation process.
-
-Fill structure #VmaDefragmentationInfo2 and call function vmaDefragmentationBegin() to create it.
-Call function vmaDefragmentationEnd() to destroy it.
-*/
-VK_DEFINE_HANDLE(VmaDefragmentationContext)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(
+ VmaAllocator VMA_NOT_NULL allocator,
+ uint32_t memoryTypeBits);
-/// Flags to be used in vmaDefragmentationBegin(). None at the moment. Reserved for future use.
-typedef enum VmaDefragmentationFlagBits {
- VMA_DEFRAGMENTATION_FLAG_INCREMENTAL = 0x1,
- VMA_DEFRAGMENTATION_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
-} VmaDefragmentationFlagBits;
-typedef VkFlags VmaDefragmentationFlags;
+/** \brief Begins defragmentation process.
-/** \brief Parameters for defragmentation.
+\param allocator Allocator object.
+\param pInfo Structure filled with parameters of defragmentation.
+\param[out] pContext Context object that must be passed to vmaEndDefragmentation() to finish defragmentation.
-To be used with function vmaDefragmentationBegin().
+For more information about defragmentation, see documentation chapter:
+[Defragmentation](@ref defragmentation).
*/
-typedef struct VmaDefragmentationInfo2 {
- /** \brief Reserved for future use. Should be 0.
- */
- VmaDefragmentationFlags flags;
- /** \brief Number of allocations in `pAllocations` array.
- */
- uint32_t allocationCount;
- /** \brief Pointer to array of allocations that can be defragmented.
-
- The array should have `allocationCount` elements.
- The array should not contain nulls.
- Elements in the array should be unique - same allocation cannot occur twice.
- It is safe to pass allocations that are in the lost state - they are ignored.
- All allocations not present in this array are considered non-moveable during this defragmentation.
- */
- const VmaAllocation VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations;
- /** \brief Optional, output. Pointer to array that will be filled with information whether the allocation at certain index has been changed during defragmentation.
-
- The array should have `allocationCount` elements.
- You can pass null if you are not interested in this information.
- */
- VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationsChanged;
- /** \brief Numer of pools in `pPools` array.
- */
- uint32_t poolCount;
- /** \brief Either null or pointer to array of pools to be defragmented.
-
- All the allocations in the specified pools can be moved during defragmentation
- and there is no way to check if they were really moved as in `pAllocationsChanged`,
- so you must query all the allocations in all these pools for new `VkDeviceMemory`
- and offset using vmaGetAllocationInfo() if you might need to recreate buffers
- and images bound to them.
-
- The array should have `poolCount` elements.
- The array should not contain nulls.
- Elements in the array should be unique - same pool cannot occur twice.
-
- Using this array is equivalent to specifying all allocations from the pools in `pAllocations`.
- It might be more efficient.
- */
- const VmaPool VMA_NOT_NULL * VMA_NULLABLE VMA_LEN_IF_NOT_NULL(poolCount) pPools;
- /** \brief Maximum total numbers of bytes that can be copied while moving allocations to different places using transfers on CPU side, like `memcpy()`, `memmove()`.
-
- `VK_WHOLE_SIZE` means no limit.
- */
- VkDeviceSize maxCpuBytesToMove;
- /** \brief Maximum number of allocations that can be moved to a different place using transfers on CPU side, like `memcpy()`, `memmove()`.
-
- `UINT32_MAX` means no limit.
- */
- uint32_t maxCpuAllocationsToMove;
- /** \brief Maximum total numbers of bytes that can be copied while moving allocations to different places using transfers on GPU side, posted to `commandBuffer`.
-
- `VK_WHOLE_SIZE` means no limit.
- */
- VkDeviceSize maxGpuBytesToMove;
- /** \brief Maximum number of allocations that can be moved to a different place using transfers on GPU side, posted to `commandBuffer`.
-
- `UINT32_MAX` means no limit.
- */
- uint32_t maxGpuAllocationsToMove;
- /** \brief Optional. Command buffer where GPU copy commands will be posted.
-
- If not null, it must be a valid command buffer handle that supports Transfer queue type.
- It must be in the recording state and outside of a render pass instance.
- You need to submit it and make sure it finished execution before calling vmaDefragmentationEnd().
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentation(
+ VmaAllocator VMA_NOT_NULL allocator,
+ const VmaDefragmentationInfo* VMA_NOT_NULL pInfo,
+ VmaDefragmentationContext VMA_NULLABLE* VMA_NOT_NULL pContext);
- Passing null means that only CPU defragmentation will be performed.
- */
- VkCommandBuffer VMA_NULLABLE commandBuffer;
-} VmaDefragmentationInfo2;
+/** \brief Ends defragmentation process.
-typedef struct VmaDefragmentationPassMoveInfo {
- VmaAllocation VMA_NOT_NULL allocation;
- VkDeviceMemory VMA_NOT_NULL_NON_DISPATCHABLE memory;
- VkDeviceSize offset;
-} VmaDefragmentationPassMoveInfo;
+\param allocator Allocator object.
+\param context Context object that has been created by vmaBeginDefragmentation().
+\param[out] pStats Optional stats for the defragmentation. Can be null.
-/** \brief Parameters for incremental defragmentation steps.
-
-To be used with function vmaBeginDefragmentationPass().
+Use this function to finish defragmentation started by vmaBeginDefragmentation().
*/
-typedef struct VmaDefragmentationPassInfo {
- uint32_t moveCount;
- VmaDefragmentationPassMoveInfo* VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(moveCount) pMoves;
-} VmaDefragmentationPassInfo;
-
-/** \brief Deprecated. Optional configuration parameters to be passed to function vmaDefragment().
-
-\deprecated This is a part of the old interface. It is recommended to use structure #VmaDefragmentationInfo2 and function vmaDefragmentationBegin() instead.
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentation(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationStats* VMA_NULLABLE pStats);
+
+/** \brief Starts single defragmentation pass.
+
+\param allocator Allocator object.
+\param context Context object that has been created by vmaBeginDefragmentation().
+\param[out] pPassInfo Computed informations for current pass.
+\returns
+- `VK_SUCCESS` if no more moves are possible. Then you can omit call to vmaEndDefragmentationPass() and simply end whole defragmentation.
+- `VK_INCOMPLETE` if there are pending moves returned in `pPassInfo`. You need to perform them, call vmaEndDefragmentationPass(),
+ and then preferably try another pass with vmaBeginDefragmentationPass().
*/
-typedef struct VmaDefragmentationInfo {
- /** \brief Maximum total numbers of bytes that can be copied while moving allocations to different places.
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo);
- Default is `VK_WHOLE_SIZE`, which means no limit.
- */
- VkDeviceSize maxBytesToMove;
- /** \brief Maximum number of allocations that can be moved to different place.
+/** \brief Ends single defragmentation pass.
- Default is `UINT32_MAX`, which means no limit.
- */
- uint32_t maxAllocationsToMove;
-} VmaDefragmentationInfo;
+\param allocator Allocator object.
+\param context Context object that has been created by vmaBeginDefragmentation().
+\param pPassInfo Computed informations for current pass filled by vmaBeginDefragmentationPass() and possibly modified by you.
-/** \brief Statistics returned by function vmaDefragment(). */
-typedef struct VmaDefragmentationStats {
- /// Total number of bytes that have been copied while moving allocations to different places.
- VkDeviceSize bytesMoved;
- /// Total number of bytes that have been released to the system by freeing empty `VkDeviceMemory` objects.
- VkDeviceSize bytesFreed;
- /// Number of allocations that have been moved to different places.
- uint32_t allocationsMoved;
- /// Number of empty `VkDeviceMemory` objects that have been released to the system.
- uint32_t deviceMemoryBlocksFreed;
-} VmaDefragmentationStats;
+Returns `VK_SUCCESS` if no more moves are possible or `VK_INCOMPLETE` if more defragmentations are possible.
-/** \brief Begins defragmentation process.
+Ends incremental defragmentation pass and commits all defragmentation moves from `pPassInfo`.
+After this call:
-@param allocator Allocator object.
-@param pInfo Structure filled with parameters of defragmentation.
-@param[out] pStats Optional. Statistics of defragmentation. You can pass null if you are not interested in this information.
-@param[out] pContext Context object that must be passed to vmaDefragmentationEnd() to finish defragmentation.
-@return `VK_SUCCESS` and `*pContext == null` if defragmentation finished within this function call. `VK_NOT_READY` and `*pContext != null` if defragmentation has been started and you need to call vmaDefragmentationEnd() to finish it. Negative value in case of error.
-
-Use this function instead of old, deprecated vmaDefragment().
-
-Warning! Between the call to vmaDefragmentationBegin() and vmaDefragmentationEnd():
-
-- You should not use any of allocations passed as `pInfo->pAllocations` or
- any allocations that belong to pools passed as `pInfo->pPools`,
- including calling vmaGetAllocationInfo(), vmaTouchAllocation(), or access
- their data.
-- Some mutexes protecting internal data structures may be locked, so trying to
- make or free any allocations, bind buffers or images, map memory, or launch
- another simultaneous defragmentation in between may cause stall (when done on
- another thread) or deadlock (when done on the same thread), unless you are
- 100% sure that defragmented allocations are in different pools.
-- Information returned via `pStats` and `pInfo->pAllocationsChanged` are undefined.
- They become valid after call to vmaDefragmentationEnd().
-- If `pInfo->commandBuffer` is not null, you must submit that command buffer
- and make sure it finished execution before calling vmaDefragmentationEnd().
-
-For more information and important limitations regarding defragmentation, see documentation chapter:
-[Defragmentation](@ref defragmentation).
-*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationBegin(
- VmaAllocator VMA_NOT_NULL allocator,
- const VmaDefragmentationInfo2* VMA_NOT_NULL pInfo,
- VmaDefragmentationStats* VMA_NULLABLE pStats,
- VmaDefragmentationContext VMA_NULLABLE * VMA_NOT_NULL pContext);
-
-/** \brief Ends defragmentation process.
+- Allocations at `pPassInfo[i].srcAllocation` that had `pPassInfo[i].operation ==` #VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY
+ (which is the default) will be pointing to the new destination place.
+- Allocation at `pPassInfo[i].srcAllocation` that had `pPassInfo[i].operation ==` #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY
+ will be freed.
-Use this function to finish defragmentation started by vmaDefragmentationBegin().
-It is safe to pass `context == null`. The function then does nothing.
+If no more moves are possible you can end whole defragmentation.
*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationEnd(
- VmaAllocator VMA_NOT_NULL allocator,
- VmaDefragmentationContext VMA_NULLABLE context);
-
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass(
- VmaAllocator VMA_NOT_NULL allocator,
- VmaDefragmentationContext VMA_NULLABLE context,
- VmaDefragmentationPassInfo* VMA_NOT_NULL pInfo
-);
VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass(
VmaAllocator VMA_NOT_NULL allocator,
- VmaDefragmentationContext VMA_NULLABLE context
-);
-
-/** \brief Deprecated. Compacts memory by moving allocations.
-
-@param pAllocations Array of allocations that can be moved during this compation.
-@param allocationCount Number of elements in pAllocations and pAllocationsChanged arrays.
-@param[out] pAllocationsChanged Array of boolean values that will indicate whether matching allocation in pAllocations array has been moved. This parameter is optional. Pass null if you don't need this information.
-@param pDefragmentationInfo Configuration parameters. Optional - pass null to use default values.
-@param[out] pDefragmentationStats Statistics returned by the function. Optional - pass null if you don't need this information.
-@return `VK_SUCCESS` if completed, negative error code in case of error.
-
-\deprecated This is a part of the old interface. It is recommended to use structure #VmaDefragmentationInfo2 and function vmaDefragmentationBegin() instead.
-
-This function works by moving allocations to different places (different
-`VkDeviceMemory` objects and/or different offsets) in order to optimize memory
-usage. Only allocations that are in `pAllocations` array can be moved. All other
-allocations are considered nonmovable in this call. Basic rules:
-
-- Only allocations made in memory types that have
- `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` and `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT`
- flags can be compacted. You may pass other allocations but it makes no sense -
- these will never be moved.
-- Custom pools created with #VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT or
- #VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT flag are not defragmented. Allocations
- passed to this function that come from such pools are ignored.
-- Allocations created with #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT or
- created as dedicated allocations for any other reason are also ignored.
-- Both allocations made with or without #VMA_ALLOCATION_CREATE_MAPPED_BIT
- flag can be compacted. If not persistently mapped, memory will be mapped
- temporarily inside this function if needed.
-- You must not pass same #VmaAllocation object multiple times in `pAllocations` array.
-
-The function also frees empty `VkDeviceMemory` blocks.
-
-Warning: This function may be time-consuming, so you shouldn't call it too often
-(like after every resource creation/destruction).
-You can call it on special occasions (like when reloading a game level or
-when you just destroyed a lot of objects). Calling it every frame may be OK, but
-you should measure that on your platform.
-
-For more information, see [Defragmentation](@ref defragmentation) chapter.
-*/
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragment(
- VmaAllocator VMA_NOT_NULL allocator,
- const VmaAllocation VMA_NOT_NULL * VMA_NOT_NULL VMA_LEN_IF_NOT_NULL(allocationCount) pAllocations,
- size_t allocationCount,
- VkBool32* VMA_NULLABLE VMA_LEN_IF_NOT_NULL(allocationCount) pAllocationsChanged,
- const VmaDefragmentationInfo* VMA_NULLABLE pDefragmentationInfo,
- VmaDefragmentationStats* VMA_NULLABLE pDefragmentationStats);
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo);
/** \brief Binds buffer to allocation.
@@ -3904,8 +2171,11 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory(
/** \brief Binds buffer to allocation with additional parameters.
-@param allocationLocalOffset Additional offset to be added while binding, relative to the beginning of the `allocation`. Normally it should be 0.
-@param pNext A chain of structures to be attached to `VkBindBufferMemoryInfoKHR` structure used internally. Normally it should be null.
+\param allocator
+\param allocation
+\param allocationLocalOffset Additional offset to be added while binding, relative to the beginning of the `allocation`. Normally it should be 0.
+\param buffer
+\param pNext A chain of structures to be attached to `VkBindBufferMemoryInfoKHR` structure used internally. Normally it should be null.
This function is similar to vmaBindBufferMemory(), but it provides additional parameters.
@@ -3938,8 +2208,11 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindImageMemory(
/** \brief Binds image to allocation with additional parameters.
-@param allocationLocalOffset Additional offset to be added while binding, relative to the beginning of the `allocation`. Normally it should be 0.
-@param pNext A chain of structures to be attached to `VkBindImageMemoryInfoKHR` structure used internally. Normally it should be null.
+\param allocator
+\param allocation
+\param allocationLocalOffset Additional offset to be added while binding, relative to the beginning of the `allocation`. Normally it should be 0.
+\param image
+\param pNext A chain of structures to be attached to `VkBindImageMemoryInfoKHR` structure used internally. Normally it should be null.
This function is similar to vmaBindImageMemory(), but it provides additional parameters.
@@ -3954,9 +2227,12 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindImageMemory2(
const void* VMA_NULLABLE pNext);
/**
-@param[out] pBuffer Buffer that was created.
-@param[out] pAllocation Allocation that was created.
-@param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo().
+\param allocator
+\param pBufferCreateInfo
+\param pAllocationCreateInfo
+\param[out] pBuffer Buffer that was created.
+\param[out] pAllocation Allocation that was created.
+\param[out] pAllocationInfo Optional. Information about allocated memory. It can be later fetched using function vmaGetAllocationInfo().
This function automatically:
@@ -3974,8 +2250,8 @@ separately, using `vkDestroyBuffer()` and vmaFreeMemory().
If #VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT flag was used,
VK_KHR_dedicated_allocation extension is used internally to query driver whether
it requires or prefers the new buffer to have dedicated allocation. If yes,
-and if dedicated allocation is possible (VmaAllocationCreateInfo::pool is null
-and #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT is not used), it creates dedicated
+and if dedicated allocation is possible
+(#VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT is not used), it creates dedicated
allocation for this buffer, just like when using
#VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
@@ -3987,8 +2263,23 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBuffer(
VmaAllocator VMA_NOT_NULL allocator,
const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,
const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo,
- VkBuffer VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pBuffer,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL pAllocation,
+ VkBuffer VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pBuffer,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation,
+ VmaAllocationInfo* VMA_NULLABLE pAllocationInfo);
+
+/** \brief Creates a buffer with additional minimum alignment.
+
+Similar to vmaCreateBuffer() but provides additional parameter `minAlignment` which allows to specify custom,
+minimum alignment to be used when placing the buffer inside a larger memory block, which may be needed e.g.
+for interop with OpenGL.
+*/
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBufferWithAlignment(
+ VmaAllocator VMA_NOT_NULL allocator,
+ const VkBufferCreateInfo* VMA_NOT_NULL pBufferCreateInfo,
+ const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo,
+ VkDeviceSize minAlignment,
+ VkBuffer VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pBuffer,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation,
VmaAllocationInfo* VMA_NULLABLE pAllocationInfo);
/** \brief Destroys Vulkan buffer and frees allocated memory.
@@ -4012,8 +2303,8 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateImage(
VmaAllocator VMA_NOT_NULL allocator,
const VkImageCreateInfo* VMA_NOT_NULL pImageCreateInfo,
const VmaAllocationCreateInfo* VMA_NOT_NULL pAllocationCreateInfo,
- VkImage VMA_NULLABLE_NON_DISPATCHABLE * VMA_NOT_NULL pImage,
- VmaAllocation VMA_NULLABLE * VMA_NOT_NULL pAllocation,
+ VkImage VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pImage,
+ VmaAllocation VMA_NULLABLE* VMA_NOT_NULL pAllocation,
VmaAllocationInfo* VMA_NULLABLE pAllocationInfo);
/** \brief Destroys Vulkan image and frees allocated memory.
@@ -4032,12 +2323,164 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage(
VkImage VMA_NULLABLE_NON_DISPATCHABLE image,
VmaAllocation VMA_NULLABLE allocation);
+/** @} */
+
+/**
+\addtogroup group_virtual
+@{
+*/
+
+/** \brief Creates new #VmaVirtualBlock object.
+
+\param pCreateInfo Parameters for creation.
+\param[out] pVirtualBlock Returned virtual block object or `VMA_NULL` if creation failed.
+*/
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateVirtualBlock(
+ const VmaVirtualBlockCreateInfo* VMA_NOT_NULL pCreateInfo,
+ VmaVirtualBlock VMA_NULLABLE* VMA_NOT_NULL pVirtualBlock);
+
+/** \brief Destroys #VmaVirtualBlock object.
+
+Please note that you should consciously handle virtual allocations that could remain unfreed in the block.
+You should either free them individually using vmaVirtualFree() or call vmaClearVirtualBlock()
+if you are sure this is what you want. If you do neither, an assert is called.
+
+If you keep pointers to some additional metadata associated with your virtual allocations in their `pUserData`,
+don't forget to free them.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaDestroyVirtualBlock(
+ VmaVirtualBlock VMA_NULLABLE virtualBlock);
+
+/** \brief Returns true of the #VmaVirtualBlock is empty - contains 0 virtual allocations and has all its space available for new allocations.
+*/
+VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock);
+
+/** \brief Returns information about a specific virtual allocation within a virtual block, like its size and `pUserData` pointer.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo);
+
+/** \brief Allocates new virtual allocation inside given #VmaVirtualBlock.
+
+If the allocation fails due to not enough free space available, `VK_ERROR_OUT_OF_DEVICE_MEMORY` is returned
+(despite the function doesn't ever allocate actual GPU memory).
+`pAllocation` is then set to `VK_NULL_HANDLE` and `pOffset`, if not null, it set to `UINT64_MAX`.
+
+\param virtualBlock Virtual block
+\param pCreateInfo Parameters for the allocation
+\param[out] pAllocation Returned handle of the new allocation
+\param[out] pOffset Returned offset of the new allocation. Optional, can be null.
+*/
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo,
+ VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation,
+ VkDeviceSize* VMA_NULLABLE pOffset);
+
+/** \brief Frees virtual allocation inside given #VmaVirtualBlock.
+
+It is correct to call this function with `allocation == VK_NULL_HANDLE` - it does nothing.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation);
+
+/** \brief Frees all virtual allocations inside given #VmaVirtualBlock.
+
+You must either call this function or free each virtual allocation individually with vmaVirtualFree()
+before destroying a virtual block. Otherwise, an assert is called.
+
+If you keep pointer to some additional metadata associated with your virtual allocation in its `pUserData`,
+don't forget to free it as well.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock);
+
+/** \brief Changes custom pointer associated with given virtual allocation.
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation,
+ void* VMA_NULLABLE pUserData);
+
+/** \brief Calculates and returns statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
+
+This function is fast to call. For more detailed statistics, see vmaCalculateVirtualBlockStatistics().
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualBlockStatistics(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaStatistics* VMA_NOT_NULL pStats);
+
+/** \brief Calculates and returns detailed statistics about virtual allocations and memory usage in given #VmaVirtualBlock.
+
+This function is slow to call. Use for debugging purposes.
+For less detailed statistics, see vmaGetVirtualBlockStatistics().
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStatistics(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaDetailedStatistics* VMA_NOT_NULL pStats);
+
+/** @} */
+
+#if VMA_STATS_STRING_ENABLED
+/**
+\addtogroup group_stats
+@{
+*/
+
+/** \brief Builds and returns a null-terminated string in JSON format with information about given #VmaVirtualBlock.
+\param virtualBlock Virtual block.
+\param[out] ppStatsString Returned string.
+\param detailedMap Pass `VK_FALSE` to only obtain statistics as returned by vmaCalculateVirtualBlockStatistics(). Pass `VK_TRUE` to also obtain full list of allocations and free spaces.
+
+Returned string must be freed using vmaFreeVirtualBlockStatsString().
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaBuildVirtualBlockStatsString(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ char* VMA_NULLABLE* VMA_NOT_NULL ppStatsString,
+ VkBool32 detailedMap);
+
+/// Frees a string returned by vmaBuildVirtualBlockStatsString().
+VMA_CALL_PRE void VMA_CALL_POST vmaFreeVirtualBlockStatsString(
+ VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ char* VMA_NULLABLE pStatsString);
+
+/** \brief Builds and returns statistics as a null-terminated string in JSON format.
+\param allocator
+\param[out] ppStatsString Must be freed using vmaFreeStatsString() function.
+\param detailedMap
+*/
+VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
+ VmaAllocator VMA_NOT_NULL allocator,
+ char* VMA_NULLABLE* VMA_NOT_NULL ppStatsString,
+ VkBool32 detailedMap);
+
+VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString(
+ VmaAllocator VMA_NOT_NULL allocator,
+ char* VMA_NULLABLE pStatsString);
+
+/** @} */
+
+#endif // VMA_STATS_STRING_ENABLED
+
+#endif // _VMA_FUNCTION_HEADERS
+
#ifdef __cplusplus
}
#endif
#endif // AMD_VULKAN_MEMORY_ALLOCATOR_H
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+//
+// IMPLEMENTATION
+//
+////////////////////////////////////////////////////////////////////////////////
+////////////////////////////////////////////////////////////////////////////////
+
// For Visual Studio IntelliSense.
#if defined(__cplusplus) && defined(__INTELLISENSE__)
#define VMA_IMPLEMENTATION
@@ -4051,14 +2494,8 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage(
#include <cstring>
#include <utility>
-#if VMA_RECORDING_ENABLED
- #include <chrono>
- #if defined(_WIN32)
- #include <windows.h>
- #else
- #include <sstream>
- #include <thread>
- #endif
+#ifdef _MSC_VER
+ #include <intrin.h> // For functions like __popcnt, _BitScanForward etc.
#endif
/*******************************************************************************
@@ -4067,6 +2504,7 @@ CONFIGURATION SECTION
Define some of these macros before each #include of this header or change them
here if you need other then default behavior depending on your environment.
*/
+#ifndef _VMA_CONFIGURATION
/*
Define this macro to 1 to make the library fetch pointers to Vulkan functions
@@ -4082,29 +2520,14 @@ internally, like:
Define this macro to 1 to make the library fetch pointers to Vulkan functions
internally, like:
- vulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkGetDeviceProcAddr(m_hDevice, vkAllocateMemory);
+ vulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkGetDeviceProcAddr(device, "vkAllocateMemory");
+
+To use this feature in new versions of VMA you now have to pass
+VmaVulkanFunctions::vkGetInstanceProcAddr and vkGetDeviceProcAddr as
+VmaAllocatorCreateInfo::pVulkanFunctions. Other members can be null.
*/
#if !defined(VMA_DYNAMIC_VULKAN_FUNCTIONS)
#define VMA_DYNAMIC_VULKAN_FUNCTIONS 1
- #if defined(VK_NO_PROTOTYPES)
- extern PFN_vkGetInstanceProcAddr vkGetInstanceProcAddr;
- extern PFN_vkGetDeviceProcAddr vkGetDeviceProcAddr;
- #endif
-#endif
-
-// Define this macro to 1 to make the library use STL containers instead of its own implementation.
-//#define VMA_USE_STL_CONTAINERS 1
-
-/* Set this macro to 1 to make the library including and using STL containers:
-std::pair, std::vector, std::list, std::unordered_map.
-
-Set it to 0 or undefined to make the library using its own implementation of
-the containers.
-*/
-#if VMA_USE_STL_CONTAINERS
- #define VMA_USE_STL_VECTOR 1
- #define VMA_USE_STL_UNORDERED_MAP 1
- #define VMA_USE_STL_LIST 1
#endif
#ifndef VMA_USE_STL_SHARED_MUTEX
@@ -4112,8 +2535,7 @@ the containers.
#if __cplusplus >= 201703L
#define VMA_USE_STL_SHARED_MUTEX 1
// Visual studio defines __cplusplus properly only when passed additional parameter: /Zc:__cplusplus
- // Otherwise it's always 199711L, despite shared_mutex works since Visual Studio 2015 Update 2.
- // See: https://blogs.msdn.microsoft.com/vcblog/2018/04/09/msvc-now-correctly-reports-__cplusplus/
+ // Otherwise it is always 199711L, despite shared_mutex works since Visual Studio 2015 Update 2.
#elif defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023918 && __cplusplus == 199711L && _MSVC_LANG >= 201703L
#define VMA_USE_STL_SHARED_MUTEX 1
#else
@@ -4122,28 +2544,33 @@ the containers.
#endif
/*
-THESE INCLUDES ARE NOT ENABLED BY DEFAULT.
-Library has its own container implementation.
-*/
-#if VMA_USE_STL_VECTOR
- #include <vector>
-#endif
+Define this macro to include custom header files without having to edit this file directly, e.g.:
-#if VMA_USE_STL_UNORDERED_MAP
- #include <unordered_map>
-#endif
+ // Inside of "my_vma_configuration_user_includes.h":
-#if VMA_USE_STL_LIST
- #include <list>
-#endif
+ #include "my_custom_assert.h" // for MY_CUSTOM_ASSERT
+ #include "my_custom_min.h" // for my_custom_min
+ #include <algorithm>
+ #include <mutex>
-/*
-Following headers are used in this CONFIGURATION section only, so feel free to
+ // Inside a different file, which includes "vk_mem_alloc.h":
+
+ #define VMA_CONFIGURATION_USER_INCLUDES_H "my_vma_configuration_user_includes.h"
+ #define VMA_ASSERT(expr) MY_CUSTOM_ASSERT(expr)
+ #define VMA_MIN(v1, v2) (my_custom_min(v1, v2))
+ #include "vk_mem_alloc.h"
+ ...
+
+The following headers are used in this CONFIGURATION section only, so feel free to
remove them if not needed.
*/
-#include <cassert> // for assert
-#include <algorithm> // for min, max
-#include <mutex>
+#if !defined(VMA_CONFIGURATION_USER_INCLUDES_H)
+ #include <cassert> // for assert
+ #include <algorithm> // for min, max
+ #include <mutex>
+#else
+ #include VMA_CONFIGURATION_USER_INCLUDES_H
+#endif
#ifndef VMA_NULL
// Value used as null pointer. Define it to e.g.: nullptr, NULL, 0, (void*)0.
@@ -4171,18 +2598,21 @@ static void* vma_aligned_alloc(size_t alignment, size_t size)
static void* vma_aligned_alloc(size_t alignment, size_t size)
{
-#if defined(__APPLE__) && (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))
-#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0
- // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only
- // with the MacOSX11.0 SDK in Xcode 12 (which is what adds
- // MAC_OS_X_VERSION_10_16), even though the function is marked
- // availabe for 10.15. That's why the preprocessor checks for 10.16 but
- // the __builtin_available checks for 10.15.
- // People who use C++17 could call aligned_alloc with the 10.15 SDK already.
- if (__builtin_available(macOS 10.15, iOS 13, *))
- return aligned_alloc(alignment, size);
-#endif
-#endif
+ // Unfortunately, aligned_alloc causes VMA to crash due to it returning null pointers. (At least under 11.4)
+ // Therefore, for now disable this specific exception until a proper solution is found.
+ //#if defined(__APPLE__) && (defined(MAC_OS_X_VERSION_10_16) || defined(__IPHONE_14_0))
+ //#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_16 || __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_14_0
+ // // For C++14, usr/include/malloc/_malloc.h declares aligned_alloc()) only
+ // // with the MacOSX11.0 SDK in Xcode 12 (which is what adds
+ // // MAC_OS_X_VERSION_10_16), even though the function is marked
+ // // availabe for 10.15. That is why the preprocessor checks for 10.16 but
+ // // the __builtin_available checks for 10.15.
+ // // People who use C++17 could call aligned_alloc with the 10.15 SDK already.
+ // if (__builtin_available(macOS 10.15, iOS 13, *))
+ // return aligned_alloc(alignment, size);
+ //#endif
+ //#endif
+
// alignment must be >= sizeof(void*)
if(alignment < sizeof(void*))
{
@@ -4259,12 +2689,22 @@ static void vma_aligned_free(void* VMA_NULLABLE ptr)
#endif
#endif
+#ifndef VMA_BITSCAN_LSB
+ // Scans integer for index of first nonzero value from the Least Significant Bit (LSB). If mask is 0 then returns UINT8_MAX
+ #define VMA_BITSCAN_LSB(mask) VmaBitScanLSB(mask)
+#endif
+
+#ifndef VMA_BITSCAN_MSB
+ // Scans integer for index of first nonzero value from the Most Significant Bit (MSB). If mask is 0 then returns UINT8_MAX
+ #define VMA_BITSCAN_MSB(mask) VmaBitScanMSB(mask)
+#endif
+
#ifndef VMA_MIN
- #define VMA_MIN(v1, v2) (std::min((v1), (v2)))
+ #define VMA_MIN(v1, v2) ((std::min)((v1), (v2)))
#endif
#ifndef VMA_MAX
- #define VMA_MAX(v1, v2) (std::max((v1), (v2)))
+ #define VMA_MAX(v1, v2) ((std::max)((v1), (v2)))
#endif
#ifndef VMA_SWAP
@@ -4402,7 +2842,7 @@ If providing your own implementation, you need to implement a subset of std::ato
#ifndef VMA_DEBUG_MARGIN
/**
- Minimum margin before and after every allocation, in bytes.
+ Minimum margin after every allocation, in bytes.
Set nonzero for debugging purposes only.
*/
#define VMA_DEBUG_MARGIN (0)
@@ -4419,7 +2859,7 @@ If providing your own implementation, you need to implement a subset of std::ato
#ifndef VMA_DEBUG_DETECT_CORRUPTION
/**
Define this macro to 1 together with non-zero value of VMA_DEBUG_MARGIN to
- enable writing magic value to the margin before and after every allocation and
+ enable writing magic value to the margin after every allocation and
validating it, so that memory corruptions (out-of-bounds writes) are detected.
*/
#define VMA_DEBUG_DETECT_CORRUPTION (0)
@@ -4459,6 +2899,17 @@ If providing your own implementation, you need to implement a subset of std::ato
#define VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE (256ull * 1024 * 1024)
#endif
+/*
+Mapping hysteresis is a logic that launches when vmaMapMemory/vmaUnmapMemory is called
+or a persistently mapped allocation is created and destroyed several times in a row.
+It keeps additional +1 mapping of a device memory block to prevent calling actual
+vkMapMemory/vkUnmapMemory too many times, which may improve performance and help
+tools like RenderDOc.
+*/
+#ifndef VMA_MAPPING_HYSTERESIS_ENABLED
+ #define VMA_MAPPING_HYSTERESIS_ENABLED 1
+#endif
+
#ifndef VMA_CLASS_NO_COPY
#define VMA_CLASS_NO_COPY(className) \
private: \
@@ -4466,38 +2917,270 @@ If providing your own implementation, you need to implement a subset of std::ato
className& operator=(const className&) = delete;
#endif
-static const uint32_t VMA_FRAME_INDEX_LOST = UINT32_MAX;
-
-// Decimal 2139416166, float NaN, little-endian binary 66 E6 84 7F.
-static const uint32_t VMA_CORRUPTION_DETECTION_MAGIC_VALUE = 0x7F84E666;
-
-static const uint8_t VMA_ALLOCATION_FILL_PATTERN_CREATED = 0xDC;
-static const uint8_t VMA_ALLOCATION_FILL_PATTERN_DESTROYED = 0xEF;
+#define VMA_VALIDATE(cond) do { if(!(cond)) { \
+ VMA_ASSERT(0 && "Validation failed: " #cond); \
+ return false; \
+ } } while(false)
/*******************************************************************************
END OF CONFIGURATION
*/
+#endif // _VMA_CONFIGURATION
+
-// # Copy of some Vulkan definitions so we don't need to check their existence just to handle few constants.
+static const uint8_t VMA_ALLOCATION_FILL_PATTERN_CREATED = 0xDC;
+static const uint8_t VMA_ALLOCATION_FILL_PATTERN_DESTROYED = 0xEF;
+// Decimal 2139416166, float NaN, little-endian binary 66 E6 84 7F.
+static const uint32_t VMA_CORRUPTION_DETECTION_MAGIC_VALUE = 0x7F84E666;
+// Copy of some Vulkan definitions so we don't need to check their existence just to handle few constants.
static const uint32_t VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY = 0x00000040;
static const uint32_t VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY = 0x00000080;
static const uint32_t VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY = 0x00020000;
-
+static const uint32_t VK_IMAGE_CREATE_DISJOINT_BIT_COPY = 0x00000200;
+static const int32_t VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT_COPY = 1000158000;
static const uint32_t VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET = 0x10000000u;
+static const uint32_t VMA_ALLOCATION_TRY_COUNT = 32;
+static const uint32_t VMA_VENDOR_ID_AMD = 4098;
+
+// This one is tricky. Vulkan specification defines this code as available since
+// Vulkan 1.0, but doesn't actually define it in Vulkan SDK earlier than 1.2.131.
+// See pull request #207.
+#define VK_ERROR_UNKNOWN_COPY ((VkResult)-13)
+
+
+#if VMA_STATS_STRING_ENABLED
+// Correspond to values of enum VmaSuballocationType.
+static const char* VMA_SUBALLOCATION_TYPE_NAMES[] =
+{
+ "FREE",
+ "UNKNOWN",
+ "BUFFER",
+ "IMAGE_UNKNOWN",
+ "IMAGE_LINEAR",
+ "IMAGE_OPTIMAL",
+};
+#endif
+
+static VkAllocationCallbacks VmaEmptyAllocationCallbacks =
+ { VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL };
+
+
+#ifndef _VMA_ENUM_DECLARATIONS
+
+enum VmaSuballocationType
+{
+ VMA_SUBALLOCATION_TYPE_FREE = 0,
+ VMA_SUBALLOCATION_TYPE_UNKNOWN = 1,
+ VMA_SUBALLOCATION_TYPE_BUFFER = 2,
+ VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN = 3,
+ VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR = 4,
+ VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL = 5,
+ VMA_SUBALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
+};
+
+enum VMA_CACHE_OPERATION
+{
+ VMA_CACHE_FLUSH,
+ VMA_CACHE_INVALIDATE
+};
+
+enum class VmaAllocationRequestType
+{
+ Normal,
+ TLSF,
+ // Used by "Linear" algorithm.
+ UpperAddress,
+ EndOf1st,
+ EndOf2nd,
+};
+
+#endif // _VMA_ENUM_DECLARATIONS
+
+#ifndef _VMA_FORWARD_DECLARATIONS
+// Opaque handle used by allocation algorithms to identify single allocation in any conforming way.
+VK_DEFINE_NON_DISPATCHABLE_HANDLE(VmaAllocHandle);
+
+struct VmaMutexLock;
+struct VmaMutexLockRead;
+struct VmaMutexLockWrite;
+
+template<typename T>
+struct AtomicTransactionalIncrement;
+
+template<typename T>
+struct VmaStlAllocator;
+
+template<typename T, typename AllocatorT>
+class VmaVector;
+
+template<typename T, typename AllocatorT, size_t N>
+class VmaSmallVector;
+
+template<typename T>
+class VmaPoolAllocator;
+
+template<typename T>
+struct VmaListItem;
+
+template<typename T>
+class VmaRawList;
+
+template<typename T, typename AllocatorT>
+class VmaList;
+
+template<typename ItemTypeTraits>
+class VmaIntrusiveLinkedList;
+
+// Unused in this version
+#if 0
+template<typename T1, typename T2>
+struct VmaPair;
+template<typename FirstT, typename SecondT>
+struct VmaPairFirstLess;
+
+template<typename KeyT, typename ValueT>
+class VmaMap;
+#endif
+
+#if VMA_STATS_STRING_ENABLED
+class VmaStringBuilder;
+class VmaJsonWriter;
+#endif
+
+class VmaDeviceMemoryBlock;
+
+struct VmaDedicatedAllocationListItemTraits;
+class VmaDedicatedAllocationList;
+
+struct VmaSuballocation;
+struct VmaSuballocationOffsetLess;
+struct VmaSuballocationOffsetGreater;
+struct VmaSuballocationItemSizeLess;
+
+typedef VmaList<VmaSuballocation, VmaStlAllocator<VmaSuballocation>> VmaSuballocationList;
+
+struct VmaAllocationRequest;
+
+class VmaBlockMetadata;
+class VmaBlockMetadata_Linear;
+class VmaBlockMetadata_TLSF;
+
+class VmaBlockVector;
+
+struct VmaPoolListItemTraits;
-static VkAllocationCallbacks VmaEmptyAllocationCallbacks = {
- VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL, VMA_NULL };
+struct VmaCurrentBudgetData;
+class VmaAllocationObjectAllocator;
+
+#endif // _VMA_FORWARD_DECLARATIONS
+
+
+#ifndef _VMA_FUNCTIONS
// Returns number of bits set to 1 in (v).
static inline uint32_t VmaCountBitsSet(uint32_t v)
{
+#ifdef _MSC_VER
+ return __popcnt(v);
+#elif defined __GNUC__ || defined __clang__
+ return static_cast<uint32_t>(__builtin_popcount(v));
+#else
uint32_t c = v - ((v >> 1) & 0x55555555);
- c = ((c >> 2) & 0x33333333) + (c & 0x33333333);
- c = ((c >> 4) + c) & 0x0F0F0F0F;
- c = ((c >> 8) + c) & 0x00FF00FF;
+ c = ((c >> 2) & 0x33333333) + (c & 0x33333333);
+ c = ((c >> 4) + c) & 0x0F0F0F0F;
+ c = ((c >> 8) + c) & 0x00FF00FF;
c = ((c >> 16) + c) & 0x0000FFFF;
return c;
+#endif
+}
+
+static inline uint8_t VmaBitScanLSB(uint64_t mask)
+{
+#if defined(_MSC_VER) && defined(_WIN64)
+ unsigned long pos;
+ if (_BitScanForward64(&pos, mask))
+ return static_cast<uint8_t>(pos);
+ return UINT8_MAX;
+#elif defined __GNUC__ || defined __clang__
+ return static_cast<uint8_t>(__builtin_ffsll(mask)) - 1U;
+#else
+ uint8_t pos = 0;
+ uint64_t bit = 1;
+ do
+ {
+ if (mask & bit)
+ return pos;
+ bit <<= 1;
+ } while (pos++ < 63);
+ return UINT8_MAX;
+#endif
+}
+
+static inline uint8_t VmaBitScanLSB(uint32_t mask)
+{
+#ifdef _MSC_VER
+ unsigned long pos;
+ if (_BitScanForward(&pos, mask))
+ return static_cast<uint8_t>(pos);
+ return UINT8_MAX;
+#elif defined __GNUC__ || defined __clang__
+ return static_cast<uint8_t>(__builtin_ffs(mask)) - 1U;
+#else
+ uint8_t pos = 0;
+ uint32_t bit = 1;
+ do
+ {
+ if (mask & bit)
+ return pos;
+ bit <<= 1;
+ } while (pos++ < 31);
+ return UINT8_MAX;
+#endif
+}
+
+static inline uint8_t VmaBitScanMSB(uint64_t mask)
+{
+#if defined(_MSC_VER) && defined(_WIN64)
+ unsigned long pos;
+ if (_BitScanReverse64(&pos, mask))
+ return static_cast<uint8_t>(pos);
+#elif defined __GNUC__ || defined __clang__
+ if (mask)
+ return 63 - static_cast<uint8_t>(__builtin_clzll(mask));
+#else
+ uint8_t pos = 63;
+ uint64_t bit = 1ULL << 63;
+ do
+ {
+ if (mask & bit)
+ return pos;
+ bit >>= 1;
+ } while (pos-- > 0);
+#endif
+ return UINT8_MAX;
+}
+
+static inline uint8_t VmaBitScanMSB(uint32_t mask)
+{
+#ifdef _MSC_VER
+ unsigned long pos;
+ if (_BitScanReverse(&pos, mask))
+ return static_cast<uint8_t>(pos);
+#elif defined __GNUC__ || defined __clang__
+ if (mask)
+ return 31 - static_cast<uint8_t>(__builtin_clz(mask));
+#else
+ uint8_t pos = 31;
+ uint32_t bit = 1UL << 31;
+ do
+ {
+ if (mask & bit)
+ return pos;
+ bit >>= 1;
+ } while (pos-- > 0);
+#endif
+ return UINT8_MAX;
}
/*
@@ -4508,7 +3191,7 @@ For 0 returns true.
template <typename T>
inline bool VmaIsPow2(T x)
{
- return (x & (x-1)) == 0;
+ return (x & (x - 1)) == 0;
}
// Aligns given value up to nearest multiply of align value. For example: VmaAlignUp(11, 8) = 16.
@@ -4519,6 +3202,7 @@ static inline T VmaAlignUp(T val, T alignment)
VMA_HEAVY_ASSERT(VmaIsPow2(alignment));
return (val + alignment - 1) & ~(alignment - 1);
}
+
// Aligns given value down to nearest multiply of align value. For example: VmaAlignUp(11, 8) = 8.
// Use types like uint32_t, uint64_t as T.
template <typename T>
@@ -4535,6 +3219,13 @@ static inline T VmaRoundDiv(T x, T y)
return (x + (y / (T)2)) / y;
}
+// Divide by 'y' and round up to nearest integer.
+template <typename T>
+static inline T VmaDivideRoundingUp(T x, T y)
+{
+ return (x + y - (T)1) / y;
+}
+
// Returns smallest power of 2 greater or equal to v.
static inline uint32_t VmaNextPow2(uint32_t v)
{
@@ -4547,6 +3238,7 @@ static inline uint32_t VmaNextPow2(uint32_t v)
v++;
return v;
}
+
static inline uint64_t VmaNextPow2(uint64_t v)
{
v--;
@@ -4571,6 +3263,7 @@ static inline uint32_t VmaPrevPow2(uint32_t v)
v = v ^ (v >> 1);
return v;
}
+
static inline uint64_t VmaPrevPow2(uint64_t v)
{
v |= v >> 1;
@@ -4589,44 +3282,39 @@ static inline bool VmaStrIsEmpty(const char* pStr)
}
#if VMA_STATS_STRING_ENABLED
-
static const char* VmaAlgorithmToStr(uint32_t algorithm)
{
- switch(algorithm)
+ switch (algorithm)
{
case VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT:
return "Linear";
- case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
- return "Buddy";
case 0:
- return "Default";
+ return "TLSF";
default:
VMA_ASSERT(0);
return "";
}
}
-
-#endif // #if VMA_STATS_STRING_ENABLED
+#endif // VMA_STATS_STRING_ENABLED
#ifndef VMA_SORT
-
template<typename Iterator, typename Compare>
Iterator VmaQuickSortPartition(Iterator beg, Iterator end, Compare cmp)
{
Iterator centerValue = end; --centerValue;
Iterator insertIndex = beg;
- for(Iterator memTypeIndex = beg; memTypeIndex < centerValue; ++memTypeIndex)
+ for (Iterator memTypeIndex = beg; memTypeIndex < centerValue; ++memTypeIndex)
{
- if(cmp(*memTypeIndex, *centerValue))
+ if (cmp(*memTypeIndex, *centerValue))
{
- if(insertIndex != memTypeIndex)
+ if (insertIndex != memTypeIndex)
{
VMA_SWAP(*memTypeIndex, *insertIndex);
}
++insertIndex;
}
}
- if(insertIndex != centerValue)
+ if (insertIndex != centerValue)
{
VMA_SWAP(*insertIndex, *centerValue);
}
@@ -4636,7 +3324,7 @@ Iterator VmaQuickSortPartition(Iterator beg, Iterator end, Compare cmp)
template<typename Iterator, typename Compare>
void VmaQuickSort(Iterator beg, Iterator end, Compare cmp)
{
- if(beg < end)
+ if (beg < end)
{
Iterator it = VmaQuickSortPartition<Iterator, Compare>(beg, end, cmp);
VmaQuickSort<Iterator, Compare>(beg, it, cmp);
@@ -4645,8 +3333,7 @@ void VmaQuickSort(Iterator beg, Iterator end, Compare cmp)
}
#define VMA_SORT(beg, end, cmp) VmaQuickSort(beg, end, cmp)
-
-#endif // #ifndef VMA_SORT
+#endif // VMA_SORT
/*
Returns true if two memory blocks occupy overlapping pages.
@@ -4669,17 +3356,6 @@ static inline bool VmaBlocksOnSamePage(
return resourceAEndPage == resourceBStartPage;
}
-enum VmaSuballocationType
-{
- VMA_SUBALLOCATION_TYPE_FREE = 0,
- VMA_SUBALLOCATION_TYPE_UNKNOWN = 1,
- VMA_SUBALLOCATION_TYPE_BUFFER = 2,
- VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN = 3,
- VMA_SUBALLOCATION_TYPE_IMAGE_LINEAR = 4,
- VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL = 5,
- VMA_SUBALLOCATION_TYPE_MAX_ENUM = 0x7FFFFFFF
-};
-
/*
Returns true if given suballocation types could conflict and must respect
VkPhysicalDeviceLimits::bufferImageGranularity. They conflict if one is buffer
@@ -4690,12 +3366,12 @@ static inline bool VmaIsBufferImageGranularityConflict(
VmaSuballocationType suballocType1,
VmaSuballocationType suballocType2)
{
- if(suballocType1 > suballocType2)
+ if (suballocType1 > suballocType2)
{
VMA_SWAP(suballocType1, suballocType2);
}
- switch(suballocType1)
+ switch (suballocType1)
{
case VMA_SUBALLOCATION_TYPE_FREE:
return false;
@@ -4726,7 +3402,7 @@ static void VmaWriteMagicValue(void* pData, VkDeviceSize offset)
#if VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_DETECT_CORRUPTION
uint32_t* pDst = (uint32_t*)((char*)pData + offset);
const size_t numberCount = VMA_DEBUG_MARGIN / sizeof(uint32_t);
- for(size_t i = 0; i < numberCount; ++i, ++pDst)
+ for (size_t i = 0; i < numberCount; ++i, ++pDst)
{
*pDst = VMA_CORRUPTION_DETECTION_MAGIC_VALUE;
}
@@ -4740,9 +3416,9 @@ static bool VmaValidateMagicValue(const void* pData, VkDeviceSize offset)
#if VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_DETECT_CORRUPTION
const uint32_t* pSrc = (const uint32_t*)((const char*)pData + offset);
const size_t numberCount = VMA_DEBUG_MARGIN / sizeof(uint32_t);
- for(size_t i = 0; i < numberCount; ++i, ++pSrc)
+ for (size_t i = 0; i < numberCount; ++i, ++pSrc)
{
- if(*pSrc != VMA_CORRUPTION_DETECTION_MAGIC_VALUE)
+ if (*pSrc != VMA_CORRUPTION_DETECTION_MAGIC_VALUE)
{
return false;
}
@@ -4763,55 +3439,6 @@ static void VmaFillGpuDefragmentationBufferCreateInfo(VkBufferCreateInfo& outBuf
outBufCreateInfo.size = (VkDeviceSize)VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE; // Example size.
}
-// Helper RAII class to lock a mutex in constructor and unlock it in destructor (at the end of scope).
-struct VmaMutexLock
-{
- VMA_CLASS_NO_COPY(VmaMutexLock)
-public:
- VmaMutexLock(VMA_MUTEX& mutex, bool useMutex = true) :
- m_pMutex(useMutex ? &mutex : VMA_NULL)
- { if(m_pMutex) { m_pMutex->Lock(); } }
- ~VmaMutexLock()
- { if(m_pMutex) { m_pMutex->Unlock(); } }
-private:
- VMA_MUTEX* m_pMutex;
-};
-
-// Helper RAII class to lock a RW mutex in constructor and unlock it in destructor (at the end of scope), for reading.
-struct VmaMutexLockRead
-{
- VMA_CLASS_NO_COPY(VmaMutexLockRead)
-public:
- VmaMutexLockRead(VMA_RW_MUTEX& mutex, bool useMutex) :
- m_pMutex(useMutex ? &mutex : VMA_NULL)
- { if(m_pMutex) { m_pMutex->LockRead(); } }
- ~VmaMutexLockRead() { if(m_pMutex) { m_pMutex->UnlockRead(); } }
-private:
- VMA_RW_MUTEX* m_pMutex;
-};
-
-// Helper RAII class to lock a RW mutex in constructor and unlock it in destructor (at the end of scope), for writing.
-struct VmaMutexLockWrite
-{
- VMA_CLASS_NO_COPY(VmaMutexLockWrite)
-public:
- VmaMutexLockWrite(VMA_RW_MUTEX& mutex, bool useMutex) :
- m_pMutex(useMutex ? &mutex : VMA_NULL)
- { if(m_pMutex) { m_pMutex->LockWrite(); } }
- ~VmaMutexLockWrite() { if(m_pMutex) { m_pMutex->UnlockWrite(); } }
-private:
- VMA_RW_MUTEX* m_pMutex;
-};
-
-#if VMA_DEBUG_GLOBAL_MUTEX
- static VMA_MUTEX gDebugGlobalMutex;
- #define VMA_DEBUG_GLOBAL_MUTEX_LOCK VmaMutexLock debugGlobalMutexLock(gDebugGlobalMutex, true);
-#else
- #define VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#endif
-
-// Minimum size of a free suballocation to register it in the free suballocation collection.
-static const VkDeviceSize VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER = 16;
/*
Performs binary search and returns iterator to first element that is greater or
@@ -4823,13 +3450,13 @@ Returned value is the found element, if present in the collection or place where
new element with value (key) should be inserted.
*/
template <typename CmpLess, typename IterT, typename KeyT>
-static IterT VmaBinaryFindFirstNotLess(IterT beg, IterT end, const KeyT &key, const CmpLess& cmp)
+static IterT VmaBinaryFindFirstNotLess(IterT beg, IterT end, const KeyT& key, const CmpLess& cmp)
{
size_t down = 0, up = (end - beg);
- while(down < up)
+ while (down < up)
{
const size_t mid = down + (up - down) / 2; // Overflow-safe midpoint calculation
- if(cmp(*(beg+mid), key))
+ if (cmp(*(beg + mid), key))
{
down = mid + 1;
}
@@ -4846,7 +3473,7 @@ IterT VmaBinaryFindSorted(const IterT& beg, const IterT& end, const KeyT& value,
{
IterT it = VmaBinaryFindFirstNotLess<CmpLess, IterT, KeyT>(
beg, end, value, cmp);
- if(it == end ||
+ if (it == end ||
(!cmp(*it, value) && !cmp(value, *it)))
{
return it;
@@ -4862,16 +3489,16 @@ T must be pointer type, e.g. VmaAllocation, VmaPool.
template<typename T>
static bool VmaValidatePointerArray(uint32_t count, const T* arr)
{
- for(uint32_t i = 0; i < count; ++i)
+ for (uint32_t i = 0; i < count; ++i)
{
const T iPtr = arr[i];
- if(iPtr == VMA_NULL)
+ if (iPtr == VMA_NULL)
{
return false;
}
- for(uint32_t j = i + 1; j < count; ++j)
+ for (uint32_t j = i + 1; j < count; ++j)
{
- if(iPtr == arr[j])
+ if (iPtr == arr[j])
{
return false;
}
@@ -4887,13 +3514,157 @@ static inline void VmaPnextChainPushFront(MainT* mainStruct, NewT* newStruct)
mainStruct->pNext = newStruct;
}
+// This is the main algorithm that guides the selection of a memory type best for an allocation -
+// converts usage to required/preferred/not preferred flags.
+static bool FindMemoryPreferences(
+ bool isIntegratedGPU,
+ const VmaAllocationCreateInfo& allocCreateInfo,
+ VkFlags bufImgUsage, // VkBufferCreateInfo::usage or VkImageCreateInfo::usage. UINT32_MAX if unknown.
+ VkMemoryPropertyFlags& outRequiredFlags,
+ VkMemoryPropertyFlags& outPreferredFlags,
+ VkMemoryPropertyFlags& outNotPreferredFlags)
+{
+ outRequiredFlags = allocCreateInfo.requiredFlags;
+ outPreferredFlags = allocCreateInfo.preferredFlags;
+ outNotPreferredFlags = 0;
+
+ switch(allocCreateInfo.usage)
+ {
+ case VMA_MEMORY_USAGE_UNKNOWN:
+ break;
+ case VMA_MEMORY_USAGE_GPU_ONLY:
+ if(!isIntegratedGPU || (outPreferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ break;
+ case VMA_MEMORY_USAGE_CPU_ONLY:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
+ break;
+ case VMA_MEMORY_USAGE_CPU_TO_GPU:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ if(!isIntegratedGPU || (outPreferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ break;
+ case VMA_MEMORY_USAGE_GPU_TO_CPU:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ outPreferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+ break;
+ case VMA_MEMORY_USAGE_CPU_COPY:
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ break;
+ case VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:
+ outRequiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
+ break;
+ case VMA_MEMORY_USAGE_AUTO:
+ case VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE:
+ case VMA_MEMORY_USAGE_AUTO_PREFER_HOST:
+ {
+ if(bufImgUsage == UINT32_MAX)
+ {
+ VMA_ASSERT(0 && "VMA_MEMORY_USAGE_AUTO* values can only be used with functions like vmaCreateBuffer, vmaCreateImage so that the details of the created resource are known.");
+ return false;
+ }
+ // This relies on values of VK_IMAGE_USAGE_TRANSFER* being the same VK_BUFFER_IMAGE_TRANSFER*.
+ const bool deviceAccess = (bufImgUsage & ~(VK_BUFFER_USAGE_TRANSFER_DST_BIT | VK_BUFFER_USAGE_TRANSFER_SRC_BIT)) != 0;
+ const bool hostAccessSequentialWrite = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT) != 0;
+ const bool hostAccessRandom = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) != 0;
+ const bool hostAccessAllowTransferInstead = (allocCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT) != 0;
+ const bool preferDevice = allocCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE;
+ const bool preferHost = allocCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_HOST;
+
+ // CPU random access - e.g. a buffer written to or transferred from GPU to read back on CPU.
+ if(hostAccessRandom)
+ {
+ if(!isIntegratedGPU && deviceAccess && hostAccessAllowTransferInstead && !preferHost)
+ {
+ // Nice if it will end up in HOST_VISIBLE, but more importantly prefer DEVICE_LOCAL.
+ // Omitting HOST_VISIBLE here is intentional.
+ // In case there is DEVICE_LOCAL | HOST_VISIBLE | HOST_CACHED, it will pick that one.
+ // Otherwise, this will give same weight to DEVICE_LOCAL as HOST_VISIBLE | HOST_CACHED and select the former if occurs first on the list.
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+ }
+ else
+ {
+ // Always CPU memory, cached.
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+ }
+ }
+ // CPU sequential write - may be CPU or host-visible GPU memory, uncached and write-combined.
+ else if(hostAccessSequentialWrite)
+ {
+ // Want uncached and write-combined.
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+
+ if(!isIntegratedGPU && deviceAccess && hostAccessAllowTransferInstead && !preferHost)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT | VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ }
+ else
+ {
+ outRequiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ // Direct GPU access, CPU sequential write (e.g. a dynamic uniform buffer updated every frame)
+ if(deviceAccess)
+ {
+ // Could go to CPU memory or GPU BAR/unified. Up to the user to decide. If no preference, choose GPU memory.
+ if(preferHost)
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ else
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ // GPU no direct access, CPU sequential write (e.g. an upload buffer to be transferred to the GPU)
+ else
+ {
+ // Could go to CPU memory or GPU BAR/unified. Up to the user to decide. If no preference, choose CPU memory.
+ if(preferDevice)
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ else
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ }
+ }
+ // No CPU access
+ else
+ {
+ // GPU access, no CPU access (e.g. a color attachment image) - prefer GPU memory
+ if(deviceAccess)
+ {
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ // No direct GPU access, no CPU access, just transfers.
+ // It may be staging copy intended for e.g. preserving image for next frame (then better GPU memory) or
+ // a "swap file" copy to free some GPU memory (then better CPU memory).
+ // Up to the user to decide. If no preferece, assume the former and choose GPU memory.
+ if(preferHost)
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ else
+ outPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+ }
+ break;
+ }
+ default:
+ VMA_ASSERT(0);
+ }
+
+ // Avoid DEVICE_COHERENT unless explicitly requested.
+ if(((allocCreateInfo.requiredFlags | allocCreateInfo.preferredFlags) &
+ (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0)
+ {
+ outNotPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY;
+ }
+
+ return true;
+}
+
////////////////////////////////////////////////////////////////////////////////
// Memory allocation
static void* VmaMalloc(const VkAllocationCallbacks* pAllocationCallbacks, size_t size, size_t alignment)
{
void* result = VMA_NULL;
- if((pAllocationCallbacks != VMA_NULL) &&
+ if ((pAllocationCallbacks != VMA_NULL) &&
(pAllocationCallbacks->pfnAllocation != VMA_NULL))
{
result = (*pAllocationCallbacks->pfnAllocation)(
@@ -4912,7 +3683,7 @@ static void* VmaMalloc(const VkAllocationCallbacks* pAllocationCallbacks, size_t
static void VmaFree(const VkAllocationCallbacks* pAllocationCallbacks, void* ptr)
{
- if((pAllocationCallbacks != VMA_NULL) &&
+ if ((pAllocationCallbacks != VMA_NULL) &&
(pAllocationCallbacks->pfnFree != VMA_NULL))
{
(*pAllocationCallbacks->pfnFree)(pAllocationCallbacks->pUserData, ptr);
@@ -4949,9 +3720,9 @@ static void vma_delete(const VkAllocationCallbacks* pAllocationCallbacks, T* ptr
template<typename T>
static void vma_delete_array(const VkAllocationCallbacks* pAllocationCallbacks, T* ptr, size_t count)
{
- if(ptr != VMA_NULL)
+ if (ptr != VMA_NULL)
{
- for(size_t i = count; i--; )
+ for (size_t i = count; i--; )
{
ptr[i].~T();
}
@@ -4961,302 +3732,437 @@ static void vma_delete_array(const VkAllocationCallbacks* pAllocationCallbacks,
static char* VmaCreateStringCopy(const VkAllocationCallbacks* allocs, const char* srcStr)
{
- if(srcStr != VMA_NULL)
+ if (srcStr != VMA_NULL)
{
const size_t len = strlen(srcStr);
char* const result = vma_new_array(allocs, char, len + 1);
memcpy(result, srcStr, len + 1);
return result;
}
- else
+ return VMA_NULL;
+}
+
+#if VMA_STATS_STRING_ENABLED
+static char* VmaCreateStringCopy(const VkAllocationCallbacks* allocs, const char* srcStr, size_t strLen)
+{
+ if (srcStr != VMA_NULL)
{
- return VMA_NULL;
+ char* const result = vma_new_array(allocs, char, strLen + 1);
+ memcpy(result, srcStr, strLen);
+ result[strLen] = '\0';
+ return result;
}
+ return VMA_NULL;
}
+#endif // VMA_STATS_STRING_ENABLED
static void VmaFreeString(const VkAllocationCallbacks* allocs, char* str)
{
- if(str != VMA_NULL)
+ if (str != VMA_NULL)
{
const size_t len = strlen(str);
vma_delete_array(allocs, str, len + 1);
}
}
-// STL-compatible allocator.
-template<typename T>
-class VmaStlAllocator
+template<typename CmpLess, typename VectorT>
+size_t VmaVectorInsertSorted(VectorT& vector, const typename VectorT::value_type& value)
{
-public:
- const VkAllocationCallbacks* const m_pCallbacks;
- typedef T value_type;
-
- VmaStlAllocator(const VkAllocationCallbacks* pCallbacks) : m_pCallbacks(pCallbacks) { }
- template<typename U> VmaStlAllocator(const VmaStlAllocator<U>& src) : m_pCallbacks(src.m_pCallbacks) { }
-
- T* allocate(size_t n) { return VmaAllocateArray<T>(m_pCallbacks, n); }
- void deallocate(T* p, size_t n) { VmaFree(m_pCallbacks, p); }
+ const size_t indexToInsert = VmaBinaryFindFirstNotLess(
+ vector.data(),
+ vector.data() + vector.size(),
+ value,
+ CmpLess()) - vector.data();
+ VmaVectorInsert(vector, indexToInsert, value);
+ return indexToInsert;
+}
- template<typename U>
- bool operator==(const VmaStlAllocator<U>& rhs) const
- {
- return m_pCallbacks == rhs.m_pCallbacks;
- }
- template<typename U>
- bool operator!=(const VmaStlAllocator<U>& rhs) const
+template<typename CmpLess, typename VectorT>
+bool VmaVectorRemoveSorted(VectorT& vector, const typename VectorT::value_type& value)
+{
+ CmpLess comparator;
+ typename VectorT::iterator it = VmaBinaryFindFirstNotLess(
+ vector.begin(),
+ vector.end(),
+ value,
+ comparator);
+ if ((it != vector.end()) && !comparator(*it, value) && !comparator(value, *it))
{
- return m_pCallbacks != rhs.m_pCallbacks;
+ size_t indexToRemove = it - vector.begin();
+ VmaVectorRemove(vector, indexToRemove);
+ return true;
}
+ return false;
+}
+#endif // _VMA_FUNCTIONS
- VmaStlAllocator& operator=(const VmaStlAllocator& x) = delete;
- VmaStlAllocator(const VmaStlAllocator&) = default;
-};
+#ifndef _VMA_STATISTICS_FUNCTIONS
-#if VMA_USE_STL_VECTOR
+static void VmaClearStatistics(VmaStatistics& outStats)
+{
+ outStats.blockCount = 0;
+ outStats.allocationCount = 0;
+ outStats.blockBytes = 0;
+ outStats.allocationBytes = 0;
+}
-#define VmaVector std::vector
+static void VmaAddStatistics(VmaStatistics& inoutStats, const VmaStatistics& src)
+{
+ inoutStats.blockCount += src.blockCount;
+ inoutStats.allocationCount += src.allocationCount;
+ inoutStats.blockBytes += src.blockBytes;
+ inoutStats.allocationBytes += src.allocationBytes;
+}
-template<typename T, typename allocatorT>
-static void VmaVectorInsert(std::vector<T, allocatorT>& vec, size_t index, const T& item)
+static void VmaClearDetailedStatistics(VmaDetailedStatistics& outStats)
{
- vec.insert(vec.begin() + index, item);
+ VmaClearStatistics(outStats.statistics);
+ outStats.unusedRangeCount = 0;
+ outStats.allocationSizeMin = VK_WHOLE_SIZE;
+ outStats.allocationSizeMax = 0;
+ outStats.unusedRangeSizeMin = VK_WHOLE_SIZE;
+ outStats.unusedRangeSizeMax = 0;
}
-template<typename T, typename allocatorT>
-static void VmaVectorRemove(std::vector<T, allocatorT>& vec, size_t index)
+static void VmaAddDetailedStatisticsAllocation(VmaDetailedStatistics& inoutStats, VkDeviceSize size)
{
- vec.erase(vec.begin() + index);
+ inoutStats.statistics.allocationCount++;
+ inoutStats.statistics.allocationBytes += size;
+ inoutStats.allocationSizeMin = VMA_MIN(inoutStats.allocationSizeMin, size);
+ inoutStats.allocationSizeMax = VMA_MAX(inoutStats.allocationSizeMax, size);
}
-#else // #if VMA_USE_STL_VECTOR
+static void VmaAddDetailedStatisticsUnusedRange(VmaDetailedStatistics& inoutStats, VkDeviceSize size)
+{
+ inoutStats.unusedRangeCount++;
+ inoutStats.unusedRangeSizeMin = VMA_MIN(inoutStats.unusedRangeSizeMin, size);
+ inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, size);
+}
-/* Class with interface compatible with subset of std::vector.
-T must be POD because constructors and destructors are not called and memcpy is
-used for these objects. */
-template<typename T, typename AllocatorT>
-class VmaVector
+static void VmaAddDetailedStatistics(VmaDetailedStatistics& inoutStats, const VmaDetailedStatistics& src)
+{
+ VmaAddStatistics(inoutStats.statistics, src.statistics);
+ inoutStats.unusedRangeCount += src.unusedRangeCount;
+ inoutStats.allocationSizeMin = VMA_MIN(inoutStats.allocationSizeMin, src.allocationSizeMin);
+ inoutStats.allocationSizeMax = VMA_MAX(inoutStats.allocationSizeMax, src.allocationSizeMax);
+ inoutStats.unusedRangeSizeMin = VMA_MIN(inoutStats.unusedRangeSizeMin, src.unusedRangeSizeMin);
+ inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, src.unusedRangeSizeMax);
+}
+
+#endif // _VMA_STATISTICS_FUNCTIONS
+
+#ifndef _VMA_MUTEX_LOCK
+// Helper RAII class to lock a mutex in constructor and unlock it in destructor (at the end of scope).
+struct VmaMutexLock
{
+ VMA_CLASS_NO_COPY(VmaMutexLock)
public:
- typedef T value_type;
+ VmaMutexLock(VMA_MUTEX& mutex, bool useMutex = true) :
+ m_pMutex(useMutex ? &mutex : VMA_NULL)
+ {
+ if (m_pMutex) { m_pMutex->Lock(); }
+ }
+ ~VmaMutexLock() { if (m_pMutex) { m_pMutex->Unlock(); } }
+
+private:
+ VMA_MUTEX* m_pMutex;
+};
- VmaVector(const AllocatorT& allocator) :
- m_Allocator(allocator),
- m_pArray(VMA_NULL),
- m_Count(0),
- m_Capacity(0)
+// Helper RAII class to lock a RW mutex in constructor and unlock it in destructor (at the end of scope), for reading.
+struct VmaMutexLockRead
+{
+ VMA_CLASS_NO_COPY(VmaMutexLockRead)
+public:
+ VmaMutexLockRead(VMA_RW_MUTEX& mutex, bool useMutex) :
+ m_pMutex(useMutex ? &mutex : VMA_NULL)
{
+ if (m_pMutex) { m_pMutex->LockRead(); }
}
+ ~VmaMutexLockRead() { if (m_pMutex) { m_pMutex->UnlockRead(); } }
+
+private:
+ VMA_RW_MUTEX* m_pMutex;
+};
- VmaVector(size_t count, const AllocatorT& allocator) :
- m_Allocator(allocator),
- m_pArray(count ? (T*)VmaAllocateArray<T>(allocator.m_pCallbacks, count) : VMA_NULL),
- m_Count(count),
- m_Capacity(count)
+// Helper RAII class to lock a RW mutex in constructor and unlock it in destructor (at the end of scope), for writing.
+struct VmaMutexLockWrite
+{
+ VMA_CLASS_NO_COPY(VmaMutexLockWrite)
+public:
+ VmaMutexLockWrite(VMA_RW_MUTEX& mutex, bool useMutex)
+ : m_pMutex(useMutex ? &mutex : VMA_NULL)
{
+ if (m_pMutex) { m_pMutex->LockWrite(); }
}
+ ~VmaMutexLockWrite() { if (m_pMutex) { m_pMutex->UnlockWrite(); } }
- // This version of the constructor is here for compatibility with pre-C++14 std::vector.
- // value is unused.
- VmaVector(size_t count, const T& value, const AllocatorT& allocator)
- : VmaVector(count, allocator) {}
+private:
+ VMA_RW_MUTEX* m_pMutex;
+};
+
+#if VMA_DEBUG_GLOBAL_MUTEX
+ static VMA_MUTEX gDebugGlobalMutex;
+ #define VMA_DEBUG_GLOBAL_MUTEX_LOCK VmaMutexLock debugGlobalMutexLock(gDebugGlobalMutex, true);
+#else
+ #define VMA_DEBUG_GLOBAL_MUTEX_LOCK
+#endif
+#endif // _VMA_MUTEX_LOCK
+
+#ifndef _VMA_ATOMIC_TRANSACTIONAL_INCREMENT
+// An object that increments given atomic but decrements it back in the destructor unless Commit() is called.
+template<typename T>
+struct AtomicTransactionalIncrement
+{
+public:
+ typedef std::atomic<T> AtomicT;
- VmaVector(const VmaVector<T, AllocatorT>& src) :
- m_Allocator(src.m_Allocator),
- m_pArray(src.m_Count ? (T*)VmaAllocateArray<T>(src.m_Allocator.m_pCallbacks, src.m_Count) : VMA_NULL),
- m_Count(src.m_Count),
- m_Capacity(src.m_Count)
+ ~AtomicTransactionalIncrement()
{
- if(m_Count != 0)
- {
- memcpy(m_pArray, src.m_pArray, m_Count * sizeof(T));
- }
+ if(m_Atomic)
+ --(*m_Atomic);
}
- ~VmaVector()
+ void Commit() { m_Atomic = nullptr; }
+ T Increment(AtomicT* atomic)
{
- VmaFree(m_Allocator.m_pCallbacks, m_pArray);
+ m_Atomic = atomic;
+ return m_Atomic->fetch_add(1);
}
- VmaVector& operator=(const VmaVector<T, AllocatorT>& rhs)
+private:
+ AtomicT* m_Atomic = nullptr;
+};
+#endif // _VMA_ATOMIC_TRANSACTIONAL_INCREMENT
+
+#ifndef _VMA_STL_ALLOCATOR
+// STL-compatible allocator.
+template<typename T>
+struct VmaStlAllocator
+{
+ const VkAllocationCallbacks* const m_pCallbacks;
+ typedef T value_type;
+
+ VmaStlAllocator(const VkAllocationCallbacks* pCallbacks) : m_pCallbacks(pCallbacks) {}
+ template<typename U>
+ VmaStlAllocator(const VmaStlAllocator<U>& src) : m_pCallbacks(src.m_pCallbacks) {}
+ VmaStlAllocator(const VmaStlAllocator&) = default;
+ VmaStlAllocator& operator=(const VmaStlAllocator&) = delete;
+
+ T* allocate(size_t n) { return VmaAllocateArray<T>(m_pCallbacks, n); }
+ void deallocate(T* p, size_t n) { VmaFree(m_pCallbacks, p); }
+
+ template<typename U>
+ bool operator==(const VmaStlAllocator<U>& rhs) const
{
- if(&rhs != this)
- {
- resize(rhs.m_Count);
- if(m_Count != 0)
- {
- memcpy(m_pArray, rhs.m_pArray, m_Count * sizeof(T));
- }
- }
- return *this;
+ return m_pCallbacks == rhs.m_pCallbacks;
}
+ template<typename U>
+ bool operator!=(const VmaStlAllocator<U>& rhs) const
+ {
+ return m_pCallbacks != rhs.m_pCallbacks;
+ }
+};
+#endif // _VMA_STL_ALLOCATOR
+
+#ifndef _VMA_VECTOR
+/* Class with interface compatible with subset of std::vector.
+T must be POD because constructors and destructors are not called and memcpy is
+used for these objects. */
+template<typename T, typename AllocatorT>
+class VmaVector
+{
+public:
+ typedef T value_type;
+ typedef T* iterator;
+ typedef const T* const_iterator;
+
+ VmaVector(const AllocatorT& allocator);
+ VmaVector(size_t count, const AllocatorT& allocator);
+ // This version of the constructor is here for compatibility with pre-C++14 std::vector.
+ // value is unused.
+ VmaVector(size_t count, const T& value, const AllocatorT& allocator) : VmaVector(count, allocator) {}
+ VmaVector(const VmaVector<T, AllocatorT>& src);
+ VmaVector& operator=(const VmaVector& rhs);
+ ~VmaVector() { VmaFree(m_Allocator.m_pCallbacks, m_pArray); }
bool empty() const { return m_Count == 0; }
size_t size() const { return m_Count; }
T* data() { return m_pArray; }
+ T& front() { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[0]; }
+ T& back() { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[m_Count - 1]; }
const T* data() const { return m_pArray; }
+ const T& front() const { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[0]; }
+ const T& back() const { VMA_HEAVY_ASSERT(m_Count > 0); return m_pArray[m_Count - 1]; }
- T& operator[](size_t index)
- {
- VMA_HEAVY_ASSERT(index < m_Count);
- return m_pArray[index];
- }
- const T& operator[](size_t index) const
- {
- VMA_HEAVY_ASSERT(index < m_Count);
- return m_pArray[index];
- }
+ iterator begin() { return m_pArray; }
+ iterator end() { return m_pArray + m_Count; }
+ const_iterator cbegin() const { return m_pArray; }
+ const_iterator cend() const { return m_pArray + m_Count; }
+ const_iterator begin() const { return cbegin(); }
+ const_iterator end() const { return cend(); }
- T& front()
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return m_pArray[0];
- }
- const T& front() const
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return m_pArray[0];
- }
- T& back()
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return m_pArray[m_Count - 1];
- }
- const T& back() const
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return m_pArray[m_Count - 1];
- }
+ void pop_front() { VMA_HEAVY_ASSERT(m_Count > 0); remove(0); }
+ void pop_back() { VMA_HEAVY_ASSERT(m_Count > 0); resize(size() - 1); }
+ void push_front(const T& src) { insert(0, src); }
- void reserve(size_t newCapacity, bool freeMemory = false)
- {
- newCapacity = VMA_MAX(newCapacity, m_Count);
+ void push_back(const T& src);
+ void reserve(size_t newCapacity, bool freeMemory = false);
+ void resize(size_t newCount);
+ void clear() { resize(0); }
+ void shrink_to_fit();
+ void insert(size_t index, const T& src);
+ void remove(size_t index);
- if((newCapacity < m_Capacity) && !freeMemory)
- {
- newCapacity = m_Capacity;
- }
+ T& operator[](size_t index) { VMA_HEAVY_ASSERT(index < m_Count); return m_pArray[index]; }
+ const T& operator[](size_t index) const { VMA_HEAVY_ASSERT(index < m_Count); return m_pArray[index]; }
- if(newCapacity != m_Capacity)
- {
- T* const newArray = newCapacity ? VmaAllocateArray<T>(m_Allocator, newCapacity) : VMA_NULL;
- if(m_Count != 0)
- {
- memcpy(newArray, m_pArray, m_Count * sizeof(T));
- }
- VmaFree(m_Allocator.m_pCallbacks, m_pArray);
- m_Capacity = newCapacity;
- m_pArray = newArray;
- }
+private:
+ AllocatorT m_Allocator;
+ T* m_pArray;
+ size_t m_Count;
+ size_t m_Capacity;
+};
+
+#ifndef _VMA_VECTOR_FUNCTIONS
+template<typename T, typename AllocatorT>
+VmaVector<T, AllocatorT>::VmaVector(const AllocatorT& allocator)
+ : m_Allocator(allocator),
+ m_pArray(VMA_NULL),
+ m_Count(0),
+ m_Capacity(0) {}
+
+template<typename T, typename AllocatorT>
+VmaVector<T, AllocatorT>::VmaVector(size_t count, const AllocatorT& allocator)
+ : m_Allocator(allocator),
+ m_pArray(count ? (T*)VmaAllocateArray<T>(allocator.m_pCallbacks, count) : VMA_NULL),
+ m_Count(count),
+ m_Capacity(count) {}
+
+template<typename T, typename AllocatorT>
+VmaVector<T, AllocatorT>::VmaVector(const VmaVector& src)
+ : m_Allocator(src.m_Allocator),
+ m_pArray(src.m_Count ? (T*)VmaAllocateArray<T>(src.m_Allocator.m_pCallbacks, src.m_Count) : VMA_NULL),
+ m_Count(src.m_Count),
+ m_Capacity(src.m_Count)
+{
+ if (m_Count != 0)
+ {
+ memcpy(m_pArray, src.m_pArray, m_Count * sizeof(T));
}
+}
- void resize(size_t newCount)
+template<typename T, typename AllocatorT>
+VmaVector<T, AllocatorT>& VmaVector<T, AllocatorT>::operator=(const VmaVector& rhs)
+{
+ if (&rhs != this)
{
- size_t newCapacity = m_Capacity;
- if(newCount > m_Capacity)
+ resize(rhs.m_Count);
+ if (m_Count != 0)
{
- newCapacity = VMA_MAX(newCount, VMA_MAX(m_Capacity * 3 / 2, (size_t)8));
+ memcpy(m_pArray, rhs.m_pArray, m_Count * sizeof(T));
}
+ }
+ return *this;
+}
- if(newCapacity != m_Capacity)
- {
- T* const newArray = newCapacity ? VmaAllocateArray<T>(m_Allocator.m_pCallbacks, newCapacity) : VMA_NULL;
- const size_t elementsToCopy = VMA_MIN(m_Count, newCount);
- if(elementsToCopy != 0)
- {
- memcpy(newArray, m_pArray, elementsToCopy * sizeof(T));
- }
- VmaFree(m_Allocator.m_pCallbacks, m_pArray);
- m_Capacity = newCapacity;
- m_pArray = newArray;
- }
+template<typename T, typename AllocatorT>
+void VmaVector<T, AllocatorT>::push_back(const T& src)
+{
+ const size_t newIndex = size();
+ resize(newIndex + 1);
+ m_pArray[newIndex] = src;
+}
- m_Count = newCount;
- }
+template<typename T, typename AllocatorT>
+void VmaVector<T, AllocatorT>::reserve(size_t newCapacity, bool freeMemory)
+{
+ newCapacity = VMA_MAX(newCapacity, m_Count);
- void clear()
+ if ((newCapacity < m_Capacity) && !freeMemory)
{
- resize(0);
+ newCapacity = m_Capacity;
}
- void shrink_to_fit()
+ if (newCapacity != m_Capacity)
{
- if(m_Capacity > m_Count)
+ T* const newArray = newCapacity ? VmaAllocateArray<T>(m_Allocator, newCapacity) : VMA_NULL;
+ if (m_Count != 0)
{
- T* newArray = VMA_NULL;
- if(m_Count > 0)
- {
- newArray = VmaAllocateArray<T>(m_Allocator.m_pCallbacks, m_Count);
- memcpy(newArray, m_pArray, m_Count * sizeof(T));
- }
- VmaFree(m_Allocator.m_pCallbacks, m_pArray);
- m_Capacity = m_Count;
- m_pArray = newArray;
+ memcpy(newArray, m_pArray, m_Count * sizeof(T));
}
+ VmaFree(m_Allocator.m_pCallbacks, m_pArray);
+ m_Capacity = newCapacity;
+ m_pArray = newArray;
}
+}
- void insert(size_t index, const T& src)
+template<typename T, typename AllocatorT>
+void VmaVector<T, AllocatorT>::resize(size_t newCount)
+{
+ size_t newCapacity = m_Capacity;
+ if (newCount > m_Capacity)
{
- VMA_HEAVY_ASSERT(index <= m_Count);
- const size_t oldCount = size();
- resize(oldCount + 1);
- if(index < oldCount)
- {
- memmove(m_pArray + (index + 1), m_pArray + index, (oldCount - index) * sizeof(T));
- }
- m_pArray[index] = src;
+ newCapacity = VMA_MAX(newCount, VMA_MAX(m_Capacity * 3 / 2, (size_t)8));
}
- void remove(size_t index)
+ if (newCapacity != m_Capacity)
{
- VMA_HEAVY_ASSERT(index < m_Count);
- const size_t oldCount = size();
- if(index < oldCount - 1)
+ T* const newArray = newCapacity ? VmaAllocateArray<T>(m_Allocator.m_pCallbacks, newCapacity) : VMA_NULL;
+ const size_t elementsToCopy = VMA_MIN(m_Count, newCount);
+ if (elementsToCopy != 0)
{
- memmove(m_pArray + index, m_pArray + (index + 1), (oldCount - index - 1) * sizeof(T));
+ memcpy(newArray, m_pArray, elementsToCopy * sizeof(T));
}
- resize(oldCount - 1);
+ VmaFree(m_Allocator.m_pCallbacks, m_pArray);
+ m_Capacity = newCapacity;
+ m_pArray = newArray;
}
- void push_back(const T& src)
- {
- const size_t newIndex = size();
- resize(newIndex + 1);
- m_pArray[newIndex] = src;
- }
+ m_Count = newCount;
+}
- void pop_back()
+template<typename T, typename AllocatorT>
+void VmaVector<T, AllocatorT>::shrink_to_fit()
+{
+ if (m_Capacity > m_Count)
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- resize(size() - 1);
+ T* newArray = VMA_NULL;
+ if (m_Count > 0)
+ {
+ newArray = VmaAllocateArray<T>(m_Allocator.m_pCallbacks, m_Count);
+ memcpy(newArray, m_pArray, m_Count * sizeof(T));
+ }
+ VmaFree(m_Allocator.m_pCallbacks, m_pArray);
+ m_Capacity = m_Count;
+ m_pArray = newArray;
}
+}
- void push_front(const T& src)
+template<typename T, typename AllocatorT>
+void VmaVector<T, AllocatorT>::insert(size_t index, const T& src)
+{
+ VMA_HEAVY_ASSERT(index <= m_Count);
+ const size_t oldCount = size();
+ resize(oldCount + 1);
+ if (index < oldCount)
{
- insert(0, src);
+ memmove(m_pArray + (index + 1), m_pArray + index, (oldCount - index) * sizeof(T));
}
+ m_pArray[index] = src;
+}
- void pop_front()
+template<typename T, typename AllocatorT>
+void VmaVector<T, AllocatorT>::remove(size_t index)
+{
+ VMA_HEAVY_ASSERT(index < m_Count);
+ const size_t oldCount = size();
+ if (index < oldCount - 1)
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- remove(0);
+ memmove(m_pArray + index, m_pArray + (index + 1), (oldCount - index - 1) * sizeof(T));
}
-
- typedef T* iterator;
- typedef const T* const_iterator;
-
- iterator begin() { return m_pArray; }
- iterator end() { return m_pArray + m_Count; }
- const_iterator cbegin() const { return m_pArray; }
- const_iterator cend() const { return m_pArray + m_Count; }
- const_iterator begin() const { return cbegin(); }
- const_iterator end() const { return cend(); }
-
-private:
- AllocatorT m_Allocator;
- T* m_pArray;
- size_t m_Count;
- size_t m_Capacity;
-};
+ resize(oldCount - 1);
+}
+#endif // _VMA_VECTOR_FUNCTIONS
template<typename T, typename allocatorT>
static void VmaVectorInsert(VmaVector<T, allocatorT>& vec, size_t index, const T& item)
@@ -5269,42 +4175,9 @@ static void VmaVectorRemove(VmaVector<T, allocatorT>& vec, size_t index)
{
vec.remove(index);
}
+#endif // _VMA_VECTOR
-#endif // #if VMA_USE_STL_VECTOR
-
-template<typename CmpLess, typename VectorT>
-size_t VmaVectorInsertSorted(VectorT& vector, const typename VectorT::value_type& value)
-{
- const size_t indexToInsert = VmaBinaryFindFirstNotLess(
- vector.data(),
- vector.data() + vector.size(),
- value,
- CmpLess()) - vector.data();
- VmaVectorInsert(vector, indexToInsert, value);
- return indexToInsert;
-}
-
-template<typename CmpLess, typename VectorT>
-bool VmaVectorRemoveSorted(VectorT& vector, const typename VectorT::value_type& value)
-{
- CmpLess comparator;
- typename VectorT::iterator it = VmaBinaryFindFirstNotLess(
- vector.begin(),
- vector.end(),
- value,
- comparator);
- if((it != vector.end()) && !comparator(*it, value) && !comparator(value, *it))
- {
- size_t indexToRemove = it - vector.begin();
- VmaVectorRemove(vector, indexToRemove);
- return true;
- }
- return false;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// class VmaSmallVector
-
+#ifndef _VMA_SMALL_VECTOR
/*
This is a vector (a variable-sized array), optimized for the case when the array is small.
@@ -5312,180 +4185,155 @@ It contains some number of elements in-place, which allows it to avoid heap allo
when the actual number of elements is below that threshold. This allows normal "small"
cases to be fast without losing generality for large inputs.
*/
-
template<typename T, typename AllocatorT, size_t N>
class VmaSmallVector
{
public:
typedef T value_type;
+ typedef T* iterator;
- VmaSmallVector(const AllocatorT& allocator) :
- m_Count(0),
- m_DynamicArray(allocator)
- {
- }
- VmaSmallVector(size_t count, const AllocatorT& allocator) :
- m_Count(count),
- m_DynamicArray(count > N ? count : 0, allocator)
- {
- }
+ VmaSmallVector(const AllocatorT& allocator);
+ VmaSmallVector(size_t count, const AllocatorT& allocator);
template<typename SrcT, typename SrcAllocatorT, size_t SrcN>
- VmaSmallVector(const VmaSmallVector<SrcT, SrcAllocatorT, SrcN>& src) = delete;
+ VmaSmallVector(const VmaSmallVector<SrcT, SrcAllocatorT, SrcN>&) = delete;
template<typename SrcT, typename SrcAllocatorT, size_t SrcN>
- VmaSmallVector<T, AllocatorT, N>& operator=(const VmaSmallVector<SrcT, SrcAllocatorT, SrcN>& rhs) = delete;
+ VmaSmallVector<T, AllocatorT, N>& operator=(const VmaSmallVector<SrcT, SrcAllocatorT, SrcN>&) = delete;
+ ~VmaSmallVector() = default;
bool empty() const { return m_Count == 0; }
size_t size() const { return m_Count; }
T* data() { return m_Count > N ? m_DynamicArray.data() : m_StaticArray; }
+ T& front() { VMA_HEAVY_ASSERT(m_Count > 0); return data()[0]; }
+ T& back() { VMA_HEAVY_ASSERT(m_Count > 0); return data()[m_Count - 1]; }
const T* data() const { return m_Count > N ? m_DynamicArray.data() : m_StaticArray; }
+ const T& front() const { VMA_HEAVY_ASSERT(m_Count > 0); return data()[0]; }
+ const T& back() const { VMA_HEAVY_ASSERT(m_Count > 0); return data()[m_Count - 1]; }
- T& operator[](size_t index)
- {
- VMA_HEAVY_ASSERT(index < m_Count);
- return data()[index];
- }
- const T& operator[](size_t index) const
- {
- VMA_HEAVY_ASSERT(index < m_Count);
- return data()[index];
- }
+ iterator begin() { return data(); }
+ iterator end() { return data() + m_Count; }
- T& front()
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return data()[0];
- }
- const T& front() const
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return data()[0];
- }
- T& back()
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return data()[m_Count - 1];
- }
- const T& back() const
- {
- VMA_HEAVY_ASSERT(m_Count > 0);
- return data()[m_Count - 1];
- }
+ void pop_front() { VMA_HEAVY_ASSERT(m_Count > 0); remove(0); }
+ void pop_back() { VMA_HEAVY_ASSERT(m_Count > 0); resize(size() - 1); }
+ void push_front(const T& src) { insert(0, src); }
- void resize(size_t newCount, bool freeMemory = false)
- {
- if(newCount > N && m_Count > N)
- {
- // Any direction, staying in m_DynamicArray
- m_DynamicArray.resize(newCount);
- if(freeMemory)
- {
- m_DynamicArray.shrink_to_fit();
- }
- }
- else if(newCount > N && m_Count <= N)
- {
- // Growing, moving from m_StaticArray to m_DynamicArray
- m_DynamicArray.resize(newCount);
- if(m_Count > 0)
- {
- memcpy(m_DynamicArray.data(), m_StaticArray, m_Count * sizeof(T));
- }
- }
- else if(newCount <= N && m_Count > N)
- {
- // Shrinking, moving from m_DynamicArray to m_StaticArray
- if(newCount > 0)
- {
- memcpy(m_StaticArray, m_DynamicArray.data(), newCount * sizeof(T));
- }
- m_DynamicArray.resize(0);
- if(freeMemory)
- {
- m_DynamicArray.shrink_to_fit();
- }
- }
- else
- {
- // Any direction, staying in m_StaticArray - nothing to do here
- }
- m_Count = newCount;
- }
+ void push_back(const T& src);
+ void resize(size_t newCount, bool freeMemory = false);
+ void clear(bool freeMemory = false);
+ void insert(size_t index, const T& src);
+ void remove(size_t index);
+
+ T& operator[](size_t index) { VMA_HEAVY_ASSERT(index < m_Count); return data()[index]; }
+ const T& operator[](size_t index) const { VMA_HEAVY_ASSERT(index < m_Count); return data()[index]; }
+
+private:
+ size_t m_Count;
+ T m_StaticArray[N]; // Used when m_Size <= N
+ VmaVector<T, AllocatorT> m_DynamicArray; // Used when m_Size > N
+};
+
+#ifndef _VMA_SMALL_VECTOR_FUNCTIONS
+template<typename T, typename AllocatorT, size_t N>
+VmaSmallVector<T, AllocatorT, N>::VmaSmallVector(const AllocatorT& allocator)
+ : m_Count(0),
+ m_DynamicArray(allocator) {}
+
+template<typename T, typename AllocatorT, size_t N>
+VmaSmallVector<T, AllocatorT, N>::VmaSmallVector(size_t count, const AllocatorT& allocator)
+ : m_Count(count),
+ m_DynamicArray(count > N ? count : 0, allocator) {}
+
+template<typename T, typename AllocatorT, size_t N>
+void VmaSmallVector<T, AllocatorT, N>::push_back(const T& src)
+{
+ const size_t newIndex = size();
+ resize(newIndex + 1);
+ data()[newIndex] = src;
+}
- void clear(bool freeMemory = false)
+template<typename T, typename AllocatorT, size_t N>
+void VmaSmallVector<T, AllocatorT, N>::resize(size_t newCount, bool freeMemory)
+{
+ if (newCount > N && m_Count > N)
{
- m_DynamicArray.clear();
- if(freeMemory)
+ // Any direction, staying in m_DynamicArray
+ m_DynamicArray.resize(newCount);
+ if (freeMemory)
{
m_DynamicArray.shrink_to_fit();
}
- m_Count = 0;
}
-
- void insert(size_t index, const T& src)
+ else if (newCount > N && m_Count <= N)
{
- VMA_HEAVY_ASSERT(index <= m_Count);
- const size_t oldCount = size();
- resize(oldCount + 1);
- T* const dataPtr = data();
- if(index < oldCount)
+ // Growing, moving from m_StaticArray to m_DynamicArray
+ m_DynamicArray.resize(newCount);
+ if (m_Count > 0)
{
- // I know, this could be more optimal for case where memmove can be memcpy directly from m_StaticArray to m_DynamicArray.
- memmove(dataPtr + (index + 1), dataPtr + index, (oldCount - index) * sizeof(T));
+ memcpy(m_DynamicArray.data(), m_StaticArray, m_Count * sizeof(T));
}
- dataPtr[index] = src;
}
-
- void remove(size_t index)
+ else if (newCount <= N && m_Count > N)
{
- VMA_HEAVY_ASSERT(index < m_Count);
- const size_t oldCount = size();
- if(index < oldCount - 1)
+ // Shrinking, moving from m_DynamicArray to m_StaticArray
+ if (newCount > 0)
{
- // I know, this could be more optimal for case where memmove can be memcpy directly from m_DynamicArray to m_StaticArray.
- T* const dataPtr = data();
- memmove(dataPtr + index, dataPtr + (index + 1), (oldCount - index - 1) * sizeof(T));
+ memcpy(m_StaticArray, m_DynamicArray.data(), newCount * sizeof(T));
+ }
+ m_DynamicArray.resize(0);
+ if (freeMemory)
+ {
+ m_DynamicArray.shrink_to_fit();
}
- resize(oldCount - 1);
}
-
- void push_back(const T& src)
+ else
{
- const size_t newIndex = size();
- resize(newIndex + 1);
- data()[newIndex] = src;
+ // Any direction, staying in m_StaticArray - nothing to do here
}
+ m_Count = newCount;
+}
- void pop_back()
+template<typename T, typename AllocatorT, size_t N>
+void VmaSmallVector<T, AllocatorT, N>::clear(bool freeMemory)
+{
+ m_DynamicArray.clear();
+ if (freeMemory)
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- resize(size() - 1);
+ m_DynamicArray.shrink_to_fit();
}
+ m_Count = 0;
+}
- void push_front(const T& src)
+template<typename T, typename AllocatorT, size_t N>
+void VmaSmallVector<T, AllocatorT, N>::insert(size_t index, const T& src)
+{
+ VMA_HEAVY_ASSERT(index <= m_Count);
+ const size_t oldCount = size();
+ resize(oldCount + 1);
+ T* const dataPtr = data();
+ if (index < oldCount)
{
- insert(0, src);
+ // I know, this could be more optimal for case where memmove can be memcpy directly from m_StaticArray to m_DynamicArray.
+ memmove(dataPtr + (index + 1), dataPtr + index, (oldCount - index) * sizeof(T));
}
+ dataPtr[index] = src;
+}
- void pop_front()
+template<typename T, typename AllocatorT, size_t N>
+void VmaSmallVector<T, AllocatorT, N>::remove(size_t index)
+{
+ VMA_HEAVY_ASSERT(index < m_Count);
+ const size_t oldCount = size();
+ if (index < oldCount - 1)
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- remove(0);
+ // I know, this could be more optimal for case where memmove can be memcpy directly from m_DynamicArray to m_StaticArray.
+ T* const dataPtr = data();
+ memmove(dataPtr + index, dataPtr + (index + 1), (oldCount - index - 1) * sizeof(T));
}
+ resize(oldCount - 1);
+}
+#endif // _VMA_SMALL_VECTOR_FUNCTIONS
+#endif // _VMA_SMALL_VECTOR
- typedef T* iterator;
-
- iterator begin() { return data(); }
- iterator end() { return data() + m_Count; }
-
-private:
- size_t m_Count;
- T m_StaticArray[N]; // Used when m_Size <= N
- VmaVector<T, AllocatorT> m_DynamicArray; // Used when m_Size > N
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// class VmaPoolAllocator
-
+#ifndef _VMA_POOL_ALLOCATOR
/*
Allocator for objects of type T using a list of arrays (pools) to speed up
allocation. Number of elements that can be allocated is not bounded because
@@ -5498,7 +4346,7 @@ class VmaPoolAllocator
public:
VmaPoolAllocator(const VkAllocationCallbacks* pAllocationCallbacks, uint32_t firstBlockCapacity);
~VmaPoolAllocator();
- template<typename... Types> T* Alloc(Types... args);
+ template<typename... Types> T* Alloc(Types&&... args);
void Free(T* ptr);
private:
@@ -5507,7 +4355,6 @@ private:
uint32_t NextFreeIndex;
alignas(T) char Value[sizeof(T)];
};
-
struct ItemBlock
{
Item* pItems;
@@ -5517,14 +4364,15 @@ private:
const VkAllocationCallbacks* m_pAllocationCallbacks;
const uint32_t m_FirstBlockCapacity;
- VmaVector< ItemBlock, VmaStlAllocator<ItemBlock> > m_ItemBlocks;
+ VmaVector<ItemBlock, VmaStlAllocator<ItemBlock>> m_ItemBlocks;
ItemBlock& CreateNewBlock();
};
+#ifndef _VMA_POOL_ALLOCATOR_FUNCTIONS
template<typename T>
-VmaPoolAllocator<T>::VmaPoolAllocator(const VkAllocationCallbacks* pAllocationCallbacks, uint32_t firstBlockCapacity) :
- m_pAllocationCallbacks(pAllocationCallbacks),
+VmaPoolAllocator<T>::VmaPoolAllocator(const VkAllocationCallbacks* pAllocationCallbacks, uint32_t firstBlockCapacity)
+ : m_pAllocationCallbacks(pAllocationCallbacks),
m_FirstBlockCapacity(firstBlockCapacity),
m_ItemBlocks(VmaStlAllocator<ItemBlock>(pAllocationCallbacks))
{
@@ -5534,19 +4382,19 @@ VmaPoolAllocator<T>::VmaPoolAllocator(const VkAllocationCallbacks* pAllocationCa
template<typename T>
VmaPoolAllocator<T>::~VmaPoolAllocator()
{
- for(size_t i = m_ItemBlocks.size(); i--; )
+ for (size_t i = m_ItemBlocks.size(); i--;)
vma_delete_array(m_pAllocationCallbacks, m_ItemBlocks[i].pItems, m_ItemBlocks[i].Capacity);
m_ItemBlocks.clear();
}
template<typename T>
-template<typename... Types> T* VmaPoolAllocator<T>::Alloc(Types... args)
+template<typename... Types> T* VmaPoolAllocator<T>::Alloc(Types&&... args)
{
- for(size_t i = m_ItemBlocks.size(); i--; )
+ for (size_t i = m_ItemBlocks.size(); i--; )
{
ItemBlock& block = m_ItemBlocks[i];
// This block has some free items: Use first one.
- if(block.FirstFreeIndex != UINT32_MAX)
+ if (block.FirstFreeIndex != UINT32_MAX)
{
Item* const pItem = &block.pItems[block.FirstFreeIndex];
block.FirstFreeIndex = pItem->NextFreeIndex;
@@ -5561,7 +4409,7 @@ template<typename... Types> T* VmaPoolAllocator<T>::Alloc(Types... args)
Item* const pItem = &newBlock.pItems[0];
newBlock.FirstFreeIndex = pItem->NextFreeIndex;
T* result = (T*)&pItem->Value;
- new(result)T(std::forward<Types>(args)...); // Explicit constructor call.
+ new(result) T(std::forward<Types>(args)...); // Explicit constructor call.
return result;
}
@@ -5569,7 +4417,7 @@ template<typename T>
void VmaPoolAllocator<T>::Free(T* ptr)
{
// Search all memory blocks to find ptr.
- for(size_t i = m_ItemBlocks.size(); i--; )
+ for (size_t i = m_ItemBlocks.size(); i--; )
{
ItemBlock& block = m_ItemBlocks[i];
@@ -5578,7 +4426,7 @@ void VmaPoolAllocator<T>::Free(T* ptr)
memcpy(&pItemPtr, &ptr, sizeof(pItemPtr));
// Check if pItemPtr is in address range of this block.
- if((pItemPtr >= block.pItems) && (pItemPtr < block.pItems + block.Capacity))
+ if ((pItemPtr >= block.pItems) && (pItemPtr < block.pItems + block.Capacity))
{
ptr->~T(); // Explicit destructor call.
const uint32_t index = static_cast<uint32_t>(pItemPtr - block.pItems);
@@ -5596,29 +4444,25 @@ typename VmaPoolAllocator<T>::ItemBlock& VmaPoolAllocator<T>::CreateNewBlock()
const uint32_t newBlockCapacity = m_ItemBlocks.empty() ?
m_FirstBlockCapacity : m_ItemBlocks.back().Capacity * 3 / 2;
- const ItemBlock newBlock = {
+ const ItemBlock newBlock =
+ {
vma_new_array(m_pAllocationCallbacks, Item, newBlockCapacity),
newBlockCapacity,
- 0 };
+ 0
+ };
m_ItemBlocks.push_back(newBlock);
// Setup singly-linked list of all free items in this block.
- for(uint32_t i = 0; i < newBlockCapacity - 1; ++i)
+ for (uint32_t i = 0; i < newBlockCapacity - 1; ++i)
newBlock.pItems[i].NextFreeIndex = i + 1;
newBlock.pItems[newBlockCapacity - 1].NextFreeIndex = UINT32_MAX;
return m_ItemBlocks.back();
}
+#endif // _VMA_POOL_ALLOCATOR_FUNCTIONS
+#endif // _VMA_POOL_ALLOCATOR
-////////////////////////////////////////////////////////////////////////////////
-// class VmaRawList, VmaList
-
-#if VMA_USE_STL_LIST
-
-#define VmaList std::list
-
-#else // #if VMA_USE_STL_LIST
-
+#ifndef _VMA_RAW_LIST
template<typename T>
struct VmaListItem
{
@@ -5636,32 +4480,33 @@ public:
typedef VmaListItem<T> ItemType;
VmaRawList(const VkAllocationCallbacks* pAllocationCallbacks);
- ~VmaRawList();
- void Clear();
+ // Intentionally not calling Clear, because that would be unnecessary
+ // computations to return all items to m_ItemAllocator as free.
+ ~VmaRawList() = default;
size_t GetCount() const { return m_Count; }
bool IsEmpty() const { return m_Count == 0; }
ItemType* Front() { return m_pFront; }
- const ItemType* Front() const { return m_pFront; }
ItemType* Back() { return m_pBack; }
+ const ItemType* Front() const { return m_pFront; }
const ItemType* Back() const { return m_pBack; }
- ItemType* PushBack();
ItemType* PushFront();
- ItemType* PushBack(const T& value);
+ ItemType* PushBack();
ItemType* PushFront(const T& value);
- void PopBack();
+ ItemType* PushBack(const T& value);
void PopFront();
+ void PopBack();
// Item can be null - it means PushBack.
ItemType* InsertBefore(ItemType* pItem);
// Item can be null - it means PushFront.
ItemType* InsertAfter(ItemType* pItem);
-
ItemType* InsertBefore(ItemType* pItem, const T& value);
ItemType* InsertAfter(ItemType* pItem, const T& value);
+ void Clear();
void Remove(ItemType* pItem);
private:
@@ -5672,39 +4517,35 @@ private:
size_t m_Count;
};
+#ifndef _VMA_RAW_LIST_FUNCTIONS
template<typename T>
-VmaRawList<T>::VmaRawList(const VkAllocationCallbacks* pAllocationCallbacks) :
- m_pAllocationCallbacks(pAllocationCallbacks),
+VmaRawList<T>::VmaRawList(const VkAllocationCallbacks* pAllocationCallbacks)
+ : m_pAllocationCallbacks(pAllocationCallbacks),
m_ItemAllocator(pAllocationCallbacks, 128),
m_pFront(VMA_NULL),
m_pBack(VMA_NULL),
- m_Count(0)
-{
-}
-
-template<typename T>
-VmaRawList<T>::~VmaRawList()
-{
- // Intentionally not calling Clear, because that would be unnecessary
- // computations to return all items to m_ItemAllocator as free.
-}
+ m_Count(0) {}
template<typename T>
-void VmaRawList<T>::Clear()
+VmaListItem<T>* VmaRawList<T>::PushFront()
{
- if(IsEmpty() == false)
+ ItemType* const pNewItem = m_ItemAllocator.Alloc();
+ pNewItem->pPrev = VMA_NULL;
+ if (IsEmpty())
{
- ItemType* pItem = m_pBack;
- while(pItem != VMA_NULL)
- {
- ItemType* const pPrevItem = pItem->pPrev;
- m_ItemAllocator.Free(pItem);
- pItem = pPrevItem;
- }
- m_pFront = VMA_NULL;
- m_pBack = VMA_NULL;
- m_Count = 0;
+ pNewItem->pNext = VMA_NULL;
+ m_pFront = pNewItem;
+ m_pBack = pNewItem;
+ m_Count = 1;
+ }
+ else
+ {
+ pNewItem->pNext = m_pFront;
+ m_pFront->pPrev = pNewItem;
+ m_pFront = pNewItem;
+ ++m_Count;
}
+ return pNewItem;
}
template<typename T>
@@ -5730,24 +4571,10 @@ VmaListItem<T>* VmaRawList<T>::PushBack()
}
template<typename T>
-VmaListItem<T>* VmaRawList<T>::PushFront()
+VmaListItem<T>* VmaRawList<T>::PushFront(const T& value)
{
- ItemType* const pNewItem = m_ItemAllocator.Alloc();
- pNewItem->pPrev = VMA_NULL;
- if(IsEmpty())
- {
- pNewItem->pNext = VMA_NULL;
- m_pFront = pNewItem;
- m_pBack = pNewItem;
- m_Count = 1;
- }
- else
- {
- pNewItem->pNext = m_pFront;
- m_pFront->pPrev = pNewItem;
- m_pFront = pNewItem;
- ++m_Count;
- }
+ ItemType* const pNewItem = PushFront();
+ pNewItem->Value = value;
return pNewItem;
}
@@ -5760,11 +4587,18 @@ VmaListItem<T>* VmaRawList<T>::PushBack(const T& value)
}
template<typename T>
-VmaListItem<T>* VmaRawList<T>::PushFront(const T& value)
+void VmaRawList<T>::PopFront()
{
- ItemType* const pNewItem = PushFront();
- pNewItem->Value = value;
- return pNewItem;
+ VMA_HEAVY_ASSERT(m_Count > 0);
+ ItemType* const pFrontItem = m_pFront;
+ ItemType* const pNextItem = pFrontItem->pNext;
+ if (pNextItem != VMA_NULL)
+ {
+ pNextItem->pPrev = VMA_NULL;
+ }
+ m_pFront = pNextItem;
+ m_ItemAllocator.Free(pFrontItem);
+ --m_Count;
}
template<typename T>
@@ -5783,18 +4617,21 @@ void VmaRawList<T>::PopBack()
}
template<typename T>
-void VmaRawList<T>::PopFront()
+void VmaRawList<T>::Clear()
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- ItemType* const pFrontItem = m_pFront;
- ItemType* const pNextItem = pFrontItem->pNext;
- if(pNextItem != VMA_NULL)
+ if (IsEmpty() == false)
{
- pNextItem->pPrev = VMA_NULL;
+ ItemType* pItem = m_pBack;
+ while (pItem != VMA_NULL)
+ {
+ ItemType* const pPrevItem = pItem->pPrev;
+ m_ItemAllocator.Free(pItem);
+ pItem = pPrevItem;
+ }
+ m_pFront = VMA_NULL;
+ m_pBack = VMA_NULL;
+ m_Count = 0;
}
- m_pFront = pNextItem;
- m_ItemAllocator.Free(pFrontItem);
- --m_Count;
}
template<typename T>
@@ -5894,173 +4731,129 @@ VmaListItem<T>* VmaRawList<T>::InsertAfter(ItemType* pItem, const T& value)
newItem->Value = value;
return newItem;
}
+#endif // _VMA_RAW_LIST_FUNCTIONS
+#endif // _VMA_RAW_LIST
+#ifndef _VMA_LIST
template<typename T, typename AllocatorT>
class VmaList
{
VMA_CLASS_NO_COPY(VmaList)
public:
+ class reverse_iterator;
+ class const_iterator;
+ class const_reverse_iterator;
+
class iterator
{
+ friend class const_iterator;
+ friend class VmaList<T, AllocatorT>;
public:
- iterator() :
- m_pList(VMA_NULL),
- m_pItem(VMA_NULL)
- {
- }
+ iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {}
+ iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
- T& operator*() const
- {
- VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);
- return m_pItem->Value;
- }
- T* operator->() const
- {
- VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);
- return &m_pItem->Value;
- }
+ T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; }
+ T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; }
- iterator& operator++()
- {
- VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);
- m_pItem = m_pItem->pNext;
- return *this;
- }
- iterator& operator--()
- {
- if(m_pItem != VMA_NULL)
- {
- m_pItem = m_pItem->pPrev;
- }
- else
- {
- VMA_HEAVY_ASSERT(!m_pList->IsEmpty());
- m_pItem = m_pList->Back();
- }
- return *this;
- }
+ bool operator==(const iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; }
+ bool operator!=(const iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; }
- iterator operator++(int)
- {
- iterator result = *this;
- ++*this;
- return result;
- }
- iterator operator--(int)
- {
- iterator result = *this;
- --*this;
- return result;
- }
+ iterator operator++(int) { iterator result = *this; ++*this; return result; }
+ iterator operator--(int) { iterator result = *this; --*this; return result; }
- bool operator==(const iterator& rhs) const
- {
- VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);
- return m_pItem == rhs.m_pItem;
- }
- bool operator!=(const iterator& rhs) const
- {
- VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);
- return m_pItem != rhs.m_pItem;
- }
+ iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pNext; return *this; }
+ iterator& operator--();
private:
VmaRawList<T>* m_pList;
VmaListItem<T>* m_pItem;
- iterator(VmaRawList<T>* pList, VmaListItem<T>* pItem) :
- m_pList(pList),
- m_pItem(pItem)
- {
- }
-
- friend class VmaList<T, AllocatorT>;
+ iterator(VmaRawList<T>* pList, VmaListItem<T>* pItem) : m_pList(pList), m_pItem(pItem) {}
};
+ class reverse_iterator
+ {
+ friend class const_reverse_iterator;
+ friend class VmaList<T, AllocatorT>;
+ public:
+ reverse_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {}
+ reverse_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
+ T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; }
+ T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; }
+
+ bool operator==(const reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; }
+ bool operator!=(const reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; }
+
+ reverse_iterator operator++(int) { reverse_iterator result = *this; ++* this; return result; }
+ reverse_iterator operator--(int) { reverse_iterator result = *this; --* this; return result; }
+
+ reverse_iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pPrev; return *this; }
+ reverse_iterator& operator--();
+
+ private:
+ VmaRawList<T>* m_pList;
+ VmaListItem<T>* m_pItem;
+
+ reverse_iterator(VmaRawList<T>* pList, VmaListItem<T>* pItem) : m_pList(pList), m_pItem(pItem) {}
+ };
class const_iterator
{
+ friend class VmaList<T, AllocatorT>;
public:
- const_iterator() :
- m_pList(VMA_NULL),
- m_pItem(VMA_NULL)
- {
- }
+ const_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {}
+ const_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
+ const_iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
- const_iterator(const iterator& src) :
- m_pList(src.m_pList),
- m_pItem(src.m_pItem)
- {
- }
+ iterator drop_const() { return { const_cast<VmaRawList<T>*>(m_pList), const_cast<VmaListItem<T>*>(m_pItem) }; }
- const T& operator*() const
- {
- VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);
- return m_pItem->Value;
- }
- const T* operator->() const
- {
- VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);
- return &m_pItem->Value;
- }
+ const T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; }
+ const T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; }
- const_iterator& operator++()
- {
- VMA_HEAVY_ASSERT(m_pItem != VMA_NULL);
- m_pItem = m_pItem->pNext;
- return *this;
- }
- const_iterator& operator--()
- {
- if(m_pItem != VMA_NULL)
- {
- m_pItem = m_pItem->pPrev;
- }
- else
- {
- VMA_HEAVY_ASSERT(!m_pList->IsEmpty());
- m_pItem = m_pList->Back();
- }
- return *this;
- }
+ bool operator==(const const_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; }
+ bool operator!=(const const_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; }
- const_iterator operator++(int)
- {
- const_iterator result = *this;
- ++*this;
- return result;
- }
- const_iterator operator--(int)
- {
- const_iterator result = *this;
- --*this;
- return result;
- }
+ const_iterator operator++(int) { const_iterator result = *this; ++* this; return result; }
+ const_iterator operator--(int) { const_iterator result = *this; --* this; return result; }
- bool operator==(const const_iterator& rhs) const
- {
- VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);
- return m_pItem == rhs.m_pItem;
- }
- bool operator!=(const const_iterator& rhs) const
- {
- VMA_HEAVY_ASSERT(m_pList == rhs.m_pList);
- return m_pItem != rhs.m_pItem;
- }
+ const_iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pNext; return *this; }
+ const_iterator& operator--();
private:
- const_iterator(const VmaRawList<T>* pList, const VmaListItem<T>* pItem) :
- m_pList(pList),
- m_pItem(pItem)
- {
- }
-
const VmaRawList<T>* m_pList;
const VmaListItem<T>* m_pItem;
+ const_iterator(const VmaRawList<T>* pList, const VmaListItem<T>* pItem) : m_pList(pList), m_pItem(pItem) {}
+ };
+ class const_reverse_iterator
+ {
friend class VmaList<T, AllocatorT>;
+ public:
+ const_reverse_iterator() : m_pList(VMA_NULL), m_pItem(VMA_NULL) {}
+ const_reverse_iterator(const reverse_iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
+ const_reverse_iterator(const iterator& src) : m_pList(src.m_pList), m_pItem(src.m_pItem) {}
+
+ reverse_iterator drop_const() { return { const_cast<VmaRawList<T>*>(m_pList), const_cast<VmaListItem<T>*>(m_pItem) }; }
+
+ const T& operator*() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return m_pItem->Value; }
+ const T* operator->() const { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); return &m_pItem->Value; }
+
+ bool operator==(const const_reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem == rhs.m_pItem; }
+ bool operator!=(const const_reverse_iterator& rhs) const { VMA_HEAVY_ASSERT(m_pList == rhs.m_pList); return m_pItem != rhs.m_pItem; }
+
+ const_reverse_iterator operator++(int) { const_reverse_iterator result = *this; ++* this; return result; }
+ const_reverse_iterator operator--(int) { const_reverse_iterator result = *this; --* this; return result; }
+
+ const_reverse_iterator& operator++() { VMA_HEAVY_ASSERT(m_pItem != VMA_NULL); m_pItem = m_pItem->pPrev; return *this; }
+ const_reverse_iterator& operator--();
+
+ private:
+ const VmaRawList<T>* m_pList;
+ const VmaListItem<T>* m_pItem;
+
+ const_reverse_iterator(const VmaRawList<T>* pList, const VmaListItem<T>* pItem) : m_pList(pList), m_pItem(pItem) {}
};
- VmaList(const AllocatorT& allocator) : m_RawList(allocator.m_pCallbacks) { }
+ VmaList(const AllocatorT& allocator) : m_RawList(allocator.m_pCallbacks) {}
bool empty() const { return m_RawList.IsEmpty(); }
size_t size() const { return m_RawList.GetCount(); }
@@ -6074,20 +4867,89 @@ public:
const_iterator begin() const { return cbegin(); }
const_iterator end() const { return cend(); }
- void clear() { m_RawList.Clear(); }
+ reverse_iterator rbegin() { return reverse_iterator(&m_RawList, m_RawList.Back()); }
+ reverse_iterator rend() { return reverse_iterator(&m_RawList, VMA_NULL); }
+
+ const_reverse_iterator crbegin() const { return const_reverse_iterator(&m_RawList, m_RawList.Back()); }
+ const_reverse_iterator crend() const { return const_reverse_iterator(&m_RawList, VMA_NULL); }
+
+ const_reverse_iterator rbegin() const { return crbegin(); }
+ const_reverse_iterator rend() const { return crend(); }
+
void push_back(const T& value) { m_RawList.PushBack(value); }
- void erase(iterator it) { m_RawList.Remove(it.m_pItem); }
iterator insert(iterator it, const T& value) { return iterator(&m_RawList, m_RawList.InsertBefore(it.m_pItem, value)); }
+ void clear() { m_RawList.Clear(); }
+ void erase(iterator it) { m_RawList.Remove(it.m_pItem); }
+
private:
VmaRawList<T> m_RawList;
};
-#endif // #if VMA_USE_STL_LIST
+#ifndef _VMA_LIST_FUNCTIONS
+template<typename T, typename AllocatorT>
+typename VmaList<T, AllocatorT>::iterator& VmaList<T, AllocatorT>::iterator::operator--()
+{
+ if (m_pItem != VMA_NULL)
+ {
+ m_pItem = m_pItem->pPrev;
+ }
+ else
+ {
+ VMA_HEAVY_ASSERT(!m_pList->IsEmpty());
+ m_pItem = m_pList->Back();
+ }
+ return *this;
+}
-////////////////////////////////////////////////////////////////////////////////
-// class VmaIntrusiveLinkedList
+template<typename T, typename AllocatorT>
+typename VmaList<T, AllocatorT>::reverse_iterator& VmaList<T, AllocatorT>::reverse_iterator::operator--()
+{
+ if (m_pItem != VMA_NULL)
+ {
+ m_pItem = m_pItem->pNext;
+ }
+ else
+ {
+ VMA_HEAVY_ASSERT(!m_pList->IsEmpty());
+ m_pItem = m_pList->Front();
+ }
+ return *this;
+}
+template<typename T, typename AllocatorT>
+typename VmaList<T, AllocatorT>::const_iterator& VmaList<T, AllocatorT>::const_iterator::operator--()
+{
+ if (m_pItem != VMA_NULL)
+ {
+ m_pItem = m_pItem->pPrev;
+ }
+ else
+ {
+ VMA_HEAVY_ASSERT(!m_pList->IsEmpty());
+ m_pItem = m_pList->Back();
+ }
+ return *this;
+}
+
+template<typename T, typename AllocatorT>
+typename VmaList<T, AllocatorT>::const_reverse_iterator& VmaList<T, AllocatorT>::const_reverse_iterator::operator--()
+{
+ if (m_pItem != VMA_NULL)
+ {
+ m_pItem = m_pItem->pNext;
+ }
+ else
+ {
+ VMA_HEAVY_ASSERT(!m_pList->IsEmpty());
+ m_pItem = m_pList->Back();
+ }
+ return *this;
+}
+#endif // _VMA_LIST_FUNCTIONS
+#endif // _VMA_LIST
+
+#ifndef _VMA_INTRUSIVE_LINKED_LIST
/*
Expected interface of ItemTypeTraits:
struct MyItemTypeTraits
@@ -6106,226 +4968,264 @@ public:
typedef typename ItemTypeTraits::ItemType ItemType;
static ItemType* GetPrev(const ItemType* item) { return ItemTypeTraits::GetPrev(item); }
static ItemType* GetNext(const ItemType* item) { return ItemTypeTraits::GetNext(item); }
+
// Movable, not copyable.
- VmaIntrusiveLinkedList() { }
- VmaIntrusiveLinkedList(const VmaIntrusiveLinkedList<ItemTypeTraits>& src) = delete;
- VmaIntrusiveLinkedList(VmaIntrusiveLinkedList<ItemTypeTraits>&& src) :
- m_Front(src.m_Front), m_Back(src.m_Back), m_Count(src.m_Count)
+ VmaIntrusiveLinkedList() = default;
+ VmaIntrusiveLinkedList(VmaIntrusiveLinkedList && src);
+ VmaIntrusiveLinkedList(const VmaIntrusiveLinkedList&) = delete;
+ VmaIntrusiveLinkedList& operator=(VmaIntrusiveLinkedList&& src);
+ VmaIntrusiveLinkedList& operator=(const VmaIntrusiveLinkedList&) = delete;
+ ~VmaIntrusiveLinkedList() { VMA_HEAVY_ASSERT(IsEmpty()); }
+
+ size_t GetCount() const { return m_Count; }
+ bool IsEmpty() const { return m_Count == 0; }
+ ItemType* Front() { return m_Front; }
+ ItemType* Back() { return m_Back; }
+ const ItemType* Front() const { return m_Front; }
+ const ItemType* Back() const { return m_Back; }
+
+ void PushBack(ItemType* item);
+ void PushFront(ItemType* item);
+ ItemType* PopBack();
+ ItemType* PopFront();
+
+ // MyItem can be null - it means PushBack.
+ void InsertBefore(ItemType* existingItem, ItemType* newItem);
+ // MyItem can be null - it means PushFront.
+ void InsertAfter(ItemType* existingItem, ItemType* newItem);
+ void Remove(ItemType* item);
+ void RemoveAll();
+
+private:
+ ItemType* m_Front = VMA_NULL;
+ ItemType* m_Back = VMA_NULL;
+ size_t m_Count = 0;
+};
+
+#ifndef _VMA_INTRUSIVE_LINKED_LIST_FUNCTIONS
+template<typename ItemTypeTraits>
+VmaIntrusiveLinkedList<ItemTypeTraits>::VmaIntrusiveLinkedList(VmaIntrusiveLinkedList&& src)
+ : m_Front(src.m_Front), m_Back(src.m_Back), m_Count(src.m_Count)
+{
+ src.m_Front = src.m_Back = VMA_NULL;
+ src.m_Count = 0;
+}
+
+template<typename ItemTypeTraits>
+VmaIntrusiveLinkedList<ItemTypeTraits>& VmaIntrusiveLinkedList<ItemTypeTraits>::operator=(VmaIntrusiveLinkedList&& src)
+{
+ if (&src != this)
{
+ VMA_HEAVY_ASSERT(IsEmpty());
+ m_Front = src.m_Front;
+ m_Back = src.m_Back;
+ m_Count = src.m_Count;
src.m_Front = src.m_Back = VMA_NULL;
src.m_Count = 0;
}
- ~VmaIntrusiveLinkedList()
+ return *this;
+}
+
+template<typename ItemTypeTraits>
+void VmaIntrusiveLinkedList<ItemTypeTraits>::PushBack(ItemType* item)
+{
+ VMA_HEAVY_ASSERT(ItemTypeTraits::GetPrev(item) == VMA_NULL && ItemTypeTraits::GetNext(item) == VMA_NULL);
+ if (IsEmpty())
{
- VMA_HEAVY_ASSERT(IsEmpty());
+ m_Front = item;
+ m_Back = item;
+ m_Count = 1;
}
- VmaIntrusiveLinkedList<ItemTypeTraits>& operator=(const VmaIntrusiveLinkedList<ItemTypeTraits>& src) = delete;
- VmaIntrusiveLinkedList<ItemTypeTraits>& operator=(VmaIntrusiveLinkedList<ItemTypeTraits>&& src)
+ else
{
- if(&src != this)
- {
- VMA_HEAVY_ASSERT(IsEmpty());
- m_Front = src.m_Front;
- m_Back = src.m_Back;
- m_Count = src.m_Count;
- src.m_Front = src.m_Back = VMA_NULL;
- src.m_Count = 0;
- }
- return *this;
+ ItemTypeTraits::AccessPrev(item) = m_Back;
+ ItemTypeTraits::AccessNext(m_Back) = item;
+ m_Back = item;
+ ++m_Count;
}
- void RemoveAll()
+}
+
+template<typename ItemTypeTraits>
+void VmaIntrusiveLinkedList<ItemTypeTraits>::PushFront(ItemType* item)
+{
+ VMA_HEAVY_ASSERT(ItemTypeTraits::GetPrev(item) == VMA_NULL && ItemTypeTraits::GetNext(item) == VMA_NULL);
+ if (IsEmpty())
{
- if(!IsEmpty())
- {
- ItemType* item = m_Back;
- while(item != VMA_NULL)
- {
- ItemType* const prevItem = ItemTypeTraits::AccessPrev(item);
- ItemTypeTraits::AccessPrev(item) = VMA_NULL;
- ItemTypeTraits::AccessNext(item) = VMA_NULL;
- item = prevItem;
- }
- m_Front = VMA_NULL;
- m_Back = VMA_NULL;
- m_Count = 0;
- }
+ m_Front = item;
+ m_Back = item;
+ m_Count = 1;
}
- size_t GetCount() const { return m_Count; }
- bool IsEmpty() const { return m_Count == 0; }
- ItemType* Front() { return m_Front; }
- const ItemType* Front() const { return m_Front; }
- ItemType* Back() { return m_Back; }
- const ItemType* Back() const { return m_Back; }
- void PushBack(ItemType* item)
+ else
+ {
+ ItemTypeTraits::AccessNext(item) = m_Front;
+ ItemTypeTraits::AccessPrev(m_Front) = item;
+ m_Front = item;
+ ++m_Count;
+ }
+}
+
+template<typename ItemTypeTraits>
+typename VmaIntrusiveLinkedList<ItemTypeTraits>::ItemType* VmaIntrusiveLinkedList<ItemTypeTraits>::PopBack()
+{
+ VMA_HEAVY_ASSERT(m_Count > 0);
+ ItemType* const backItem = m_Back;
+ ItemType* const prevItem = ItemTypeTraits::GetPrev(backItem);
+ if (prevItem != VMA_NULL)
+ {
+ ItemTypeTraits::AccessNext(prevItem) = VMA_NULL;
+ }
+ m_Back = prevItem;
+ --m_Count;
+ ItemTypeTraits::AccessPrev(backItem) = VMA_NULL;
+ ItemTypeTraits::AccessNext(backItem) = VMA_NULL;
+ return backItem;
+}
+
+template<typename ItemTypeTraits>
+typename VmaIntrusiveLinkedList<ItemTypeTraits>::ItemType* VmaIntrusiveLinkedList<ItemTypeTraits>::PopFront()
+{
+ VMA_HEAVY_ASSERT(m_Count > 0);
+ ItemType* const frontItem = m_Front;
+ ItemType* const nextItem = ItemTypeTraits::GetNext(frontItem);
+ if (nextItem != VMA_NULL)
{
- VMA_HEAVY_ASSERT(ItemTypeTraits::GetPrev(item) == VMA_NULL && ItemTypeTraits::GetNext(item) == VMA_NULL);
- if(IsEmpty())
+ ItemTypeTraits::AccessPrev(nextItem) = VMA_NULL;
+ }
+ m_Front = nextItem;
+ --m_Count;
+ ItemTypeTraits::AccessPrev(frontItem) = VMA_NULL;
+ ItemTypeTraits::AccessNext(frontItem) = VMA_NULL;
+ return frontItem;
+}
+
+template<typename ItemTypeTraits>
+void VmaIntrusiveLinkedList<ItemTypeTraits>::InsertBefore(ItemType* existingItem, ItemType* newItem)
+{
+ VMA_HEAVY_ASSERT(newItem != VMA_NULL && ItemTypeTraits::GetPrev(newItem) == VMA_NULL && ItemTypeTraits::GetNext(newItem) == VMA_NULL);
+ if (existingItem != VMA_NULL)
+ {
+ ItemType* const prevItem = ItemTypeTraits::GetPrev(existingItem);
+ ItemTypeTraits::AccessPrev(newItem) = prevItem;
+ ItemTypeTraits::AccessNext(newItem) = existingItem;
+ ItemTypeTraits::AccessPrev(existingItem) = newItem;
+ if (prevItem != VMA_NULL)
{
- m_Front = item;
- m_Back = item;
- m_Count = 1;
+ ItemTypeTraits::AccessNext(prevItem) = newItem;
}
else
{
- ItemTypeTraits::AccessPrev(item) = m_Back;
- ItemTypeTraits::AccessNext(m_Back) = item;
- m_Back = item;
- ++m_Count;
+ VMA_HEAVY_ASSERT(m_Front == existingItem);
+ m_Front = newItem;
}
+ ++m_Count;
}
- void PushFront(ItemType* item)
+ else
+ PushBack(newItem);
+}
+
+template<typename ItemTypeTraits>
+void VmaIntrusiveLinkedList<ItemTypeTraits>::InsertAfter(ItemType* existingItem, ItemType* newItem)
+{
+ VMA_HEAVY_ASSERT(newItem != VMA_NULL && ItemTypeTraits::GetPrev(newItem) == VMA_NULL && ItemTypeTraits::GetNext(newItem) == VMA_NULL);
+ if (existingItem != VMA_NULL)
{
- VMA_HEAVY_ASSERT(ItemTypeTraits::GetPrev(item) == VMA_NULL && ItemTypeTraits::GetNext(item) == VMA_NULL);
- if(IsEmpty())
+ ItemType* const nextItem = ItemTypeTraits::GetNext(existingItem);
+ ItemTypeTraits::AccessNext(newItem) = nextItem;
+ ItemTypeTraits::AccessPrev(newItem) = existingItem;
+ ItemTypeTraits::AccessNext(existingItem) = newItem;
+ if (nextItem != VMA_NULL)
{
- m_Front = item;
- m_Back = item;
- m_Count = 1;
+ ItemTypeTraits::AccessPrev(nextItem) = newItem;
}
else
{
- ItemTypeTraits::AccessNext(item) = m_Front;
- ItemTypeTraits::AccessPrev(m_Front) = item;
- m_Front = item;
- ++m_Count;
+ VMA_HEAVY_ASSERT(m_Back == existingItem);
+ m_Back = newItem;
}
+ ++m_Count;
}
- ItemType* PopBack()
+ else
+ return PushFront(newItem);
+}
+
+template<typename ItemTypeTraits>
+void VmaIntrusiveLinkedList<ItemTypeTraits>::Remove(ItemType* item)
+{
+ VMA_HEAVY_ASSERT(item != VMA_NULL && m_Count > 0);
+ if (ItemTypeTraits::GetPrev(item) != VMA_NULL)
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- ItemType* const backItem = m_Back;
- ItemType* const prevItem = ItemTypeTraits::GetPrev(backItem);
- if(prevItem != VMA_NULL)
- {
- ItemTypeTraits::AccessNext(prevItem) = VMA_NULL;
- }
- m_Back = prevItem;
- --m_Count;
- ItemTypeTraits::AccessPrev(backItem) = VMA_NULL;
- ItemTypeTraits::AccessNext(backItem) = VMA_NULL;
- return backItem;
+ ItemTypeTraits::AccessNext(ItemTypeTraits::AccessPrev(item)) = ItemTypeTraits::GetNext(item);
}
- ItemType* PopFront()
+ else
{
- VMA_HEAVY_ASSERT(m_Count > 0);
- ItemType* const frontItem = m_Front;
- ItemType* const nextItem = ItemTypeTraits::GetNext(frontItem);
- if(nextItem != VMA_NULL)
- {
- ItemTypeTraits::AccessPrev(nextItem) = VMA_NULL;
- }
- m_Front = nextItem;
- --m_Count;
- ItemTypeTraits::AccessPrev(frontItem) = VMA_NULL;
- ItemTypeTraits::AccessNext(frontItem) = VMA_NULL;
- return frontItem;
+ VMA_HEAVY_ASSERT(m_Front == item);
+ m_Front = ItemTypeTraits::GetNext(item);
}
- // MyItem can be null - it means PushBack.
- void InsertBefore(ItemType* existingItem, ItemType* newItem)
+ if (ItemTypeTraits::GetNext(item) != VMA_NULL)
{
- VMA_HEAVY_ASSERT(newItem != VMA_NULL && ItemTypeTraits::GetPrev(newItem) == VMA_NULL && ItemTypeTraits::GetNext(newItem) == VMA_NULL);
- if(existingItem != VMA_NULL)
- {
- ItemType* const prevItem = ItemTypeTraits::GetPrev(existingItem);
- ItemTypeTraits::AccessPrev(newItem) = prevItem;
- ItemTypeTraits::AccessNext(newItem) = existingItem;
- ItemTypeTraits::AccessPrev(existingItem) = newItem;
- if(prevItem != VMA_NULL)
- {
- ItemTypeTraits::AccessNext(prevItem) = newItem;
- }
- else
- {
- VMA_HEAVY_ASSERT(m_Front == existingItem);
- m_Front = newItem;
- }
- ++m_Count;
- }
- else
- PushBack(newItem);
+ ItemTypeTraits::AccessPrev(ItemTypeTraits::AccessNext(item)) = ItemTypeTraits::GetPrev(item);
}
- // MyItem can be null - it means PushFront.
- void InsertAfter(ItemType* existingItem, ItemType* newItem)
+ else
{
- VMA_HEAVY_ASSERT(newItem != VMA_NULL && ItemTypeTraits::GetPrev(newItem) == VMA_NULL && ItemTypeTraits::GetNext(newItem) == VMA_NULL);
- if(existingItem != VMA_NULL)
- {
- ItemType* const nextItem = ItemTypeTraits::GetNext(existingItem);
- ItemTypeTraits::AccessNext(newItem) = nextItem;
- ItemTypeTraits::AccessPrev(newItem) = existingItem;
- ItemTypeTraits::AccessNext(existingItem) = newItem;
- if(nextItem != VMA_NULL)
- {
- ItemTypeTraits::AccessPrev(nextItem) = newItem;
- }
- else
- {
- VMA_HEAVY_ASSERT(m_Back == existingItem);
- m_Back = newItem;
- }
- ++m_Count;
- }
- else
- return PushFront(newItem);
+ VMA_HEAVY_ASSERT(m_Back == item);
+ m_Back = ItemTypeTraits::GetPrev(item);
}
- void Remove(ItemType* item)
- {
- VMA_HEAVY_ASSERT(item != VMA_NULL && m_Count > 0);
- if(ItemTypeTraits::GetPrev(item) != VMA_NULL)
- {
- ItemTypeTraits::AccessNext(ItemTypeTraits::AccessPrev(item)) = ItemTypeTraits::GetNext(item);
- }
- else
- {
- VMA_HEAVY_ASSERT(m_Front == item);
- m_Front = ItemTypeTraits::GetNext(item);
- }
+ ItemTypeTraits::AccessPrev(item) = VMA_NULL;
+ ItemTypeTraits::AccessNext(item) = VMA_NULL;
+ --m_Count;
+}
- if(ItemTypeTraits::GetNext(item) != VMA_NULL)
- {
- ItemTypeTraits::AccessPrev(ItemTypeTraits::AccessNext(item)) = ItemTypeTraits::GetPrev(item);
- }
- else
+template<typename ItemTypeTraits>
+void VmaIntrusiveLinkedList<ItemTypeTraits>::RemoveAll()
+{
+ if (!IsEmpty())
+ {
+ ItemType* item = m_Back;
+ while (item != VMA_NULL)
{
- VMA_HEAVY_ASSERT(m_Back == item);
- m_Back = ItemTypeTraits::GetPrev(item);
+ ItemType* const prevItem = ItemTypeTraits::AccessPrev(item);
+ ItemTypeTraits::AccessPrev(item) = VMA_NULL;
+ ItemTypeTraits::AccessNext(item) = VMA_NULL;
+ item = prevItem;
}
- ItemTypeTraits::AccessPrev(item) = VMA_NULL;
- ItemTypeTraits::AccessNext(item) = VMA_NULL;
- --m_Count;
+ m_Front = VMA_NULL;
+ m_Back = VMA_NULL;
+ m_Count = 0;
}
-private:
- ItemType* m_Front = VMA_NULL;
- ItemType* m_Back = VMA_NULL;
- size_t m_Count = 0;
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// class VmaMap
+}
+#endif // _VMA_INTRUSIVE_LINKED_LIST_FUNCTIONS
+#endif // _VMA_INTRUSIVE_LINKED_LIST
// Unused in this version.
#if 0
-#if VMA_USE_STL_UNORDERED_MAP
-
-#define VmaPair std::pair
-
-#define VMA_MAP_TYPE(KeyT, ValueT) \
- std::unordered_map< KeyT, ValueT, std::hash<KeyT>, std::equal_to<KeyT>, VmaStlAllocator< std::pair<KeyT, ValueT> > >
-
-#else // #if VMA_USE_STL_UNORDERED_MAP
-
+#ifndef _VMA_PAIR
template<typename T1, typename T2>
struct VmaPair
{
T1 first;
T2 second;
- VmaPair() : first(), second() { }
- VmaPair(const T1& firstSrc, const T2& secondSrc) : first(firstSrc), second(secondSrc) { }
+ VmaPair() : first(), second() {}
+ VmaPair(const T1& firstSrc, const T2& secondSrc) : first(firstSrc), second(secondSrc) {}
+};
+
+template<typename FirstT, typename SecondT>
+struct VmaPairFirstLess
+{
+ bool operator()(const VmaPair<FirstT, SecondT>& lhs, const VmaPair<FirstT, SecondT>& rhs) const
+ {
+ return lhs.first < rhs.first;
+ }
+ bool operator()(const VmaPair<FirstT, SecondT>& lhs, const FirstT& rhsFirst) const
+ {
+ return lhs.first < rhsFirst;
+ }
};
+#endif // _VMA_PAIR
+#ifndef _VMA_MAP
/* Class compatible with subset of interface of std::unordered_map.
KeyT, ValueT must be POD because they will be stored in VmaVector.
*/
@@ -6336,34 +5236,21 @@ public:
typedef VmaPair<KeyT, ValueT> PairType;
typedef PairType* iterator;
- VmaMap(const VmaStlAllocator<PairType>& allocator) : m_Vector(allocator) { }
+ VmaMap(const VmaStlAllocator<PairType>& allocator) : m_Vector(allocator) {}
iterator begin() { return m_Vector.begin(); }
iterator end() { return m_Vector.end(); }
+ size_t size() { return m_Vector.size(); }
void insert(const PairType& pair);
iterator find(const KeyT& key);
void erase(iterator it);
private:
- VmaVector< PairType, VmaStlAllocator<PairType> > m_Vector;
-};
-
-#define VMA_MAP_TYPE(KeyT, ValueT) VmaMap<KeyT, ValueT>
-
-template<typename FirstT, typename SecondT>
-struct VmaPairFirstLess
-{
- bool operator()(const VmaPair<FirstT, SecondT>& lhs, const VmaPair<FirstT, SecondT>& rhs) const
- {
- return lhs.first < rhs.first;
- }
- bool operator()(const VmaPair<FirstT, SecondT>& lhs, const FirstT& rhsFirst) const
- {
- return lhs.first < rhsFirst;
- }
+ VmaVector< PairType, VmaStlAllocator<PairType>> m_Vector;
};
+#ifndef _VMA_MAP_FUNCTIONS
template<typename KeyT, typename ValueT>
void VmaMap<KeyT, ValueT>::insert(const PairType& pair)
{
@@ -6383,7 +5270,7 @@ VmaPair<KeyT, ValueT>* VmaMap<KeyT, ValueT>::find(const KeyT& key)
m_Vector.data() + m_Vector.size(),
key,
VmaPairFirstLess<KeyT, ValueT>());
- if((it != m_Vector.end()) && (it->first == key))
+ if ((it != m_Vector.end()) && (it->first == key))
{
return it;
}
@@ -6398,2215 +5285,37 @@ void VmaMap<KeyT, ValueT>::erase(iterator it)
{
VmaVectorRemove(m_Vector, it - m_Vector.begin());
}
-
-#endif // #if VMA_USE_STL_UNORDERED_MAP
+#endif // _VMA_MAP_FUNCTIONS
+#endif // _VMA_MAP
#endif // #if 0
-////////////////////////////////////////////////////////////////////////////////
-
-class VmaDeviceMemoryBlock;
-
-enum VMA_CACHE_OPERATION { VMA_CACHE_FLUSH, VMA_CACHE_INVALIDATE };
-
-struct VmaAllocation_T
-{
-private:
- static const uint8_t MAP_COUNT_FLAG_PERSISTENT_MAP = 0x80;
-
- enum FLAGS
- {
- FLAG_USER_DATA_STRING = 0x01,
- };
-
-public:
- enum ALLOCATION_TYPE
- {
- ALLOCATION_TYPE_NONE,
- ALLOCATION_TYPE_BLOCK,
- ALLOCATION_TYPE_DEDICATED,
- };
-
- /*
- This struct is allocated using VmaPoolAllocator.
- */
-
- VmaAllocation_T(uint32_t currentFrameIndex, bool userDataString) :
- m_Alignment{1},
- m_Size{0},
- m_pUserData{VMA_NULL},
- m_LastUseFrameIndex{currentFrameIndex},
- m_MemoryTypeIndex{0},
- m_Type{(uint8_t)ALLOCATION_TYPE_NONE},
- m_SuballocationType{(uint8_t)VMA_SUBALLOCATION_TYPE_UNKNOWN},
- m_MapCount{0},
- m_Flags{userDataString ? (uint8_t)FLAG_USER_DATA_STRING : (uint8_t)0}
- {
-#if VMA_STATS_STRING_ENABLED
- m_CreationFrameIndex = currentFrameIndex;
- m_BufferImageUsage = 0;
-#endif
- }
-
- ~VmaAllocation_T()
- {
- VMA_ASSERT((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) == 0 && "Allocation was not unmapped before destruction.");
-
- // Check if owned string was freed.
- VMA_ASSERT(m_pUserData == VMA_NULL);
- }
-
- void InitBlockAllocation(
- VmaDeviceMemoryBlock* block,
- VkDeviceSize offset,
- VkDeviceSize alignment,
- VkDeviceSize size,
- uint32_t memoryTypeIndex,
- VmaSuballocationType suballocationType,
- bool mapped,
- bool canBecomeLost)
- {
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE);
- VMA_ASSERT(block != VMA_NULL);
- m_Type = (uint8_t)ALLOCATION_TYPE_BLOCK;
- m_Alignment = alignment;
- m_Size = size;
- m_MemoryTypeIndex = memoryTypeIndex;
- m_MapCount = mapped ? MAP_COUNT_FLAG_PERSISTENT_MAP : 0;
- m_SuballocationType = (uint8_t)suballocationType;
- m_BlockAllocation.m_Block = block;
- m_BlockAllocation.m_Offset = offset;
- m_BlockAllocation.m_CanBecomeLost = canBecomeLost;
- }
-
- void InitLost()
- {
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE);
- VMA_ASSERT(m_LastUseFrameIndex.load() == VMA_FRAME_INDEX_LOST);
- m_Type = (uint8_t)ALLOCATION_TYPE_BLOCK;
- m_MemoryTypeIndex = 0;
- m_BlockAllocation.m_Block = VMA_NULL;
- m_BlockAllocation.m_Offset = 0;
- m_BlockAllocation.m_CanBecomeLost = true;
- }
-
- void ChangeBlockAllocation(
- VmaAllocator hAllocator,
- VmaDeviceMemoryBlock* block,
- VkDeviceSize offset);
-
- void ChangeOffset(VkDeviceSize newOffset);
-
- // pMappedData not null means allocation is created with MAPPED flag.
- void InitDedicatedAllocation(
- uint32_t memoryTypeIndex,
- VkDeviceMemory hMemory,
- VmaSuballocationType suballocationType,
- void* pMappedData,
- VkDeviceSize size)
- {
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE);
- VMA_ASSERT(hMemory != VK_NULL_HANDLE);
- m_Type = (uint8_t)ALLOCATION_TYPE_DEDICATED;
- m_Alignment = 0;
- m_Size = size;
- m_MemoryTypeIndex = memoryTypeIndex;
- m_SuballocationType = (uint8_t)suballocationType;
- m_MapCount = (pMappedData != VMA_NULL) ? MAP_COUNT_FLAG_PERSISTENT_MAP : 0;
- m_DedicatedAllocation.m_hMemory = hMemory;
- m_DedicatedAllocation.m_pMappedData = pMappedData;
- m_DedicatedAllocation.m_Prev = VMA_NULL;
- m_DedicatedAllocation.m_Next = VMA_NULL;
- }
-
- ALLOCATION_TYPE GetType() const { return (ALLOCATION_TYPE)m_Type; }
- VkDeviceSize GetAlignment() const { return m_Alignment; }
- VkDeviceSize GetSize() const { return m_Size; }
- bool IsUserDataString() const { return (m_Flags & FLAG_USER_DATA_STRING) != 0; }
- void* GetUserData() const { return m_pUserData; }
- void SetUserData(VmaAllocator hAllocator, void* pUserData);
- VmaSuballocationType GetSuballocationType() const { return (VmaSuballocationType)m_SuballocationType; }
-
- VmaDeviceMemoryBlock* GetBlock() const
- {
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
- return m_BlockAllocation.m_Block;
- }
- VkDeviceSize GetOffset() const;
- VkDeviceMemory GetMemory() const;
- uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
- bool IsPersistentMap() const { return (m_MapCount & MAP_COUNT_FLAG_PERSISTENT_MAP) != 0; }
- void* GetMappedData() const;
- bool CanBecomeLost() const;
-
- uint32_t GetLastUseFrameIndex() const
- {
- return m_LastUseFrameIndex.load();
- }
- bool CompareExchangeLastUseFrameIndex(uint32_t& expected, uint32_t desired)
- {
- return m_LastUseFrameIndex.compare_exchange_weak(expected, desired);
- }
- /*
- - If hAllocation.LastUseFrameIndex + frameInUseCount < allocator.CurrentFrameIndex,
- makes it lost by setting LastUseFrameIndex = VMA_FRAME_INDEX_LOST and returns true.
- - Else, returns false.
-
- If hAllocation is already lost, assert - you should not call it then.
- If hAllocation was not created with CAN_BECOME_LOST_BIT, assert.
- */
- bool MakeLost(uint32_t currentFrameIndex, uint32_t frameInUseCount);
-
- void DedicatedAllocCalcStatsInfo(VmaStatInfo& outInfo)
- {
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_DEDICATED);
- outInfo.blockCount = 1;
- outInfo.allocationCount = 1;
- outInfo.unusedRangeCount = 0;
- outInfo.usedBytes = m_Size;
- outInfo.unusedBytes = 0;
- outInfo.allocationSizeMin = outInfo.allocationSizeMax = m_Size;
- outInfo.unusedRangeSizeMin = UINT64_MAX;
- outInfo.unusedRangeSizeMax = 0;
- }
-
- void BlockAllocMap();
- void BlockAllocUnmap();
- VkResult DedicatedAllocMap(VmaAllocator hAllocator, void** ppData);
- void DedicatedAllocUnmap(VmaAllocator hAllocator);
-
-#if VMA_STATS_STRING_ENABLED
- uint32_t GetCreationFrameIndex() const { return m_CreationFrameIndex; }
- uint32_t GetBufferImageUsage() const { return m_BufferImageUsage; }
-
- void InitBufferImageUsage(uint32_t bufferImageUsage)
- {
- VMA_ASSERT(m_BufferImageUsage == 0);
- m_BufferImageUsage = bufferImageUsage;
- }
-
- void PrintParameters(class VmaJsonWriter& json) const;
-#endif
-
-private:
- VkDeviceSize m_Alignment;
- VkDeviceSize m_Size;
- void* m_pUserData;
- VMA_ATOMIC_UINT32 m_LastUseFrameIndex;
- uint32_t m_MemoryTypeIndex;
- uint8_t m_Type; // ALLOCATION_TYPE
- uint8_t m_SuballocationType; // VmaSuballocationType
- // Bit 0x80 is set when allocation was created with VMA_ALLOCATION_CREATE_MAPPED_BIT.
- // Bits with mask 0x7F are reference counter for vmaMapMemory()/vmaUnmapMemory().
- uint8_t m_MapCount;
- uint8_t m_Flags; // enum FLAGS
-
- // Allocation out of VmaDeviceMemoryBlock.
- struct BlockAllocation
- {
- VmaDeviceMemoryBlock* m_Block;
- VkDeviceSize m_Offset;
- bool m_CanBecomeLost;
- };
-
- // Allocation for an object that has its own private VkDeviceMemory.
- struct DedicatedAllocation
- {
- VkDeviceMemory m_hMemory;
- void* m_pMappedData; // Not null means memory is mapped.
- VmaAllocation_T* m_Prev;
- VmaAllocation_T* m_Next;
- };
-
- union
- {
- // Allocation out of VmaDeviceMemoryBlock.
- BlockAllocation m_BlockAllocation;
- // Allocation for an object that has its own private VkDeviceMemory.
- DedicatedAllocation m_DedicatedAllocation;
- };
-
-#if VMA_STATS_STRING_ENABLED
- uint32_t m_CreationFrameIndex;
- uint32_t m_BufferImageUsage; // 0 if unknown.
-#endif
-
- void FreeUserDataString(VmaAllocator hAllocator);
-
- friend struct VmaDedicatedAllocationListItemTraits;
-};
-
-struct VmaDedicatedAllocationListItemTraits
-{
- typedef VmaAllocation_T ItemType;
- static ItemType* GetPrev(const ItemType* item)
- {
- VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
- return item->m_DedicatedAllocation.m_Prev;
- }
- static ItemType* GetNext(const ItemType* item)
- {
- VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
- return item->m_DedicatedAllocation.m_Next;
- }
- static ItemType*& AccessPrev(ItemType* item)
- {
- VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
- return item->m_DedicatedAllocation.m_Prev;
- }
- static ItemType*& AccessNext(ItemType* item){
- VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
- return item->m_DedicatedAllocation.m_Next;
- }
-};
-
-/*
-Represents a region of VmaDeviceMemoryBlock that is either assigned and returned as
-allocated memory block or free.
-*/
-struct VmaSuballocation
-{
- VkDeviceSize offset;
- VkDeviceSize size;
- VmaAllocation hAllocation;
- VmaSuballocationType type;
-};
-
-// Comparator for offsets.
-struct VmaSuballocationOffsetLess
-{
- bool operator()(const VmaSuballocation& lhs, const VmaSuballocation& rhs) const
- {
- return lhs.offset < rhs.offset;
- }
-};
-struct VmaSuballocationOffsetGreater
-{
- bool operator()(const VmaSuballocation& lhs, const VmaSuballocation& rhs) const
- {
- return lhs.offset > rhs.offset;
- }
-};
-
-typedef VmaList< VmaSuballocation, VmaStlAllocator<VmaSuballocation> > VmaSuballocationList;
-
-// Cost of one additional allocation lost, as equivalent in bytes.
-static const VkDeviceSize VMA_LOST_ALLOCATION_COST = 1048576;
-
-enum class VmaAllocationRequestType
-{
- Normal,
- // Used by "Linear" algorithm.
- UpperAddress,
- EndOf1st,
- EndOf2nd,
-};
-
-/*
-Parameters of planned allocation inside a VmaDeviceMemoryBlock.
-
-If canMakeOtherLost was false:
-- item points to a FREE suballocation.
-- itemsToMakeLostCount is 0.
-
-If canMakeOtherLost was true:
-- item points to first of sequence of suballocations, which are either FREE,
- or point to VmaAllocations that can become lost.
-- itemsToMakeLostCount is the number of VmaAllocations that need to be made lost for
- the requested allocation to succeed.
-*/
-struct VmaAllocationRequest
-{
- VkDeviceSize offset;
- VkDeviceSize sumFreeSize; // Sum size of free items that overlap with proposed allocation.
- VkDeviceSize sumItemSize; // Sum size of items to make lost that overlap with proposed allocation.
- VmaSuballocationList::iterator item;
- size_t itemsToMakeLostCount;
- void* customData;
- VmaAllocationRequestType type;
-
- VkDeviceSize CalcCost() const
- {
- return sumItemSize + itemsToMakeLostCount * VMA_LOST_ALLOCATION_COST;
- }
-};
-
-/*
-Data structure used for bookkeeping of allocations and unused ranges of memory
-in a single VkDeviceMemory block.
-*/
-class VmaBlockMetadata
-{
-public:
- VmaBlockMetadata(VmaAllocator hAllocator);
- virtual ~VmaBlockMetadata() { }
- virtual void Init(VkDeviceSize size) { m_Size = size; }
-
- // Validates all data structures inside this object. If not valid, returns false.
- virtual bool Validate() const = 0;
- VkDeviceSize GetSize() const { return m_Size; }
- virtual size_t GetAllocationCount() const = 0;
- virtual VkDeviceSize GetSumFreeSize() const = 0;
- virtual VkDeviceSize GetUnusedRangeSizeMax() const = 0;
- // Returns true if this block is empty - contains only single free suballocation.
- virtual bool IsEmpty() const = 0;
-
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const = 0;
- // Shouldn't modify blockCount.
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const = 0;
-
-#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const = 0;
-#endif
-
- // Tries to find a place for suballocation with given parameters inside this block.
- // If succeeded, fills pAllocationRequest and returns true.
- // If failed, returns false.
- virtual bool CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- bool upperAddress,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- // Always one of VMA_ALLOCATION_CREATE_STRATEGY_* or VMA_ALLOCATION_INTERNAL_STRATEGY_* flags.
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest) = 0;
-
- virtual bool MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VmaAllocationRequest* pAllocationRequest) = 0;
-
- virtual uint32_t MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount) = 0;
-
- virtual VkResult CheckCorruption(const void* pBlockData) = 0;
-
- // Makes actual allocation based on request. Request must already be checked and valid.
- virtual void Alloc(
- const VmaAllocationRequest& request,
- VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation) = 0;
-
- // Frees suballocation assigned to given memory region.
- virtual void Free(const VmaAllocation allocation) = 0;
- virtual void FreeAtOffset(VkDeviceSize offset) = 0;
-
-protected:
- const VkAllocationCallbacks* GetAllocationCallbacks() const { return m_pAllocationCallbacks; }
-
-#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap_Begin(class VmaJsonWriter& json,
- VkDeviceSize unusedBytes,
- size_t allocationCount,
- size_t unusedRangeCount) const;
- void PrintDetailedMap_Allocation(class VmaJsonWriter& json,
- VkDeviceSize offset,
- VmaAllocation hAllocation) const;
- void PrintDetailedMap_UnusedRange(class VmaJsonWriter& json,
- VkDeviceSize offset,
- VkDeviceSize size) const;
- void PrintDetailedMap_End(class VmaJsonWriter& json) const;
-#endif
-
-private:
- VkDeviceSize m_Size;
- const VkAllocationCallbacks* m_pAllocationCallbacks;
-};
-
-#define VMA_VALIDATE(cond) do { if(!(cond)) { \
- VMA_ASSERT(0 && "Validation failed: " #cond); \
- return false; \
- } } while(false)
-
-class VmaBlockMetadata_Generic : public VmaBlockMetadata
-{
- VMA_CLASS_NO_COPY(VmaBlockMetadata_Generic)
-public:
- VmaBlockMetadata_Generic(VmaAllocator hAllocator);
- virtual ~VmaBlockMetadata_Generic();
- virtual void Init(VkDeviceSize size);
-
- virtual bool Validate() const;
- virtual size_t GetAllocationCount() const { return m_Suballocations.size() - m_FreeCount; }
- virtual VkDeviceSize GetSumFreeSize() const { return m_SumFreeSize; }
- virtual VkDeviceSize GetUnusedRangeSizeMax() const;
- virtual bool IsEmpty() const;
-
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const;
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const;
-
-#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const;
-#endif
-
- virtual bool CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- bool upperAddress,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
-
- virtual bool MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VmaAllocationRequest* pAllocationRequest);
-
- virtual uint32_t MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount);
-
- virtual VkResult CheckCorruption(const void* pBlockData);
-
- virtual void Alloc(
- const VmaAllocationRequest& request,
- VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation);
-
- virtual void Free(const VmaAllocation allocation);
- virtual void FreeAtOffset(VkDeviceSize offset);
-
- ////////////////////////////////////////////////////////////////////////////////
- // For defragmentation
-
- bool IsBufferImageGranularityConflictPossible(
- VkDeviceSize bufferImageGranularity,
- VmaSuballocationType& inOutPrevSuballocType) const;
-
-private:
- friend class VmaDefragmentationAlgorithm_Generic;
- friend class VmaDefragmentationAlgorithm_Fast;
-
- uint32_t m_FreeCount;
- VkDeviceSize m_SumFreeSize;
- VmaSuballocationList m_Suballocations;
- // Suballocations that are free and have size greater than certain threshold.
- // Sorted by size, ascending.
- VmaVector< VmaSuballocationList::iterator, VmaStlAllocator< VmaSuballocationList::iterator > > m_FreeSuballocationsBySize;
-
- bool ValidateFreeSuballocationList() const;
-
- // Checks if requested suballocation with given parameters can be placed in given pFreeSuballocItem.
- // If yes, fills pOffset and returns true. If no, returns false.
- bool CheckAllocation(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- VmaSuballocationType allocType,
- VmaSuballocationList::const_iterator suballocItem,
- bool canMakeOtherLost,
- VkDeviceSize* pOffset,
- size_t* itemsToMakeLostCount,
- VkDeviceSize* pSumFreeSize,
- VkDeviceSize* pSumItemSize) const;
- // Given free suballocation, it merges it with following one, which must also be free.
- void MergeFreeWithNext(VmaSuballocationList::iterator item);
- // Releases given suballocation, making it free.
- // Merges it with adjacent free suballocations if applicable.
- // Returns iterator to new free suballocation at this place.
- VmaSuballocationList::iterator FreeSuballocation(VmaSuballocationList::iterator suballocItem);
- // Given free suballocation, it inserts it into sorted list of
- // m_FreeSuballocationsBySize if it's suitable.
- void RegisterFreeSuballocation(VmaSuballocationList::iterator item);
- // Given free suballocation, it removes it from sorted list of
- // m_FreeSuballocationsBySize if it's suitable.
- void UnregisterFreeSuballocation(VmaSuballocationList::iterator item);
-};
-
-/*
-Allocations and their references in internal data structure look like this:
-
-if(m_2ndVectorMode == SECOND_VECTOR_EMPTY):
-
- 0 +-------+
- | |
- | |
- | |
- +-------+
- | Alloc | 1st[m_1stNullItemsBeginCount]
- +-------+
- | Alloc | 1st[m_1stNullItemsBeginCount + 1]
- +-------+
- | ... |
- +-------+
- | Alloc | 1st[1st.size() - 1]
- +-------+
- | |
- | |
- | |
-GetSize() +-------+
-
-if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER):
-
- 0 +-------+
- | Alloc | 2nd[0]
- +-------+
- | Alloc | 2nd[1]
- +-------+
- | ... |
- +-------+
- | Alloc | 2nd[2nd.size() - 1]
- +-------+
- | |
- | |
- | |
- +-------+
- | Alloc | 1st[m_1stNullItemsBeginCount]
- +-------+
- | Alloc | 1st[m_1stNullItemsBeginCount + 1]
- +-------+
- | ... |
- +-------+
- | Alloc | 1st[1st.size() - 1]
- +-------+
- | |
-GetSize() +-------+
-
-if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK):
-
- 0 +-------+
- | |
- | |
- | |
- +-------+
- | Alloc | 1st[m_1stNullItemsBeginCount]
- +-------+
- | Alloc | 1st[m_1stNullItemsBeginCount + 1]
- +-------+
- | ... |
- +-------+
- | Alloc | 1st[1st.size() - 1]
- +-------+
- | |
- | |
- | |
- +-------+
- | Alloc | 2nd[2nd.size() - 1]
- +-------+
- | ... |
- +-------+
- | Alloc | 2nd[1]
- +-------+
- | Alloc | 2nd[0]
-GetSize() +-------+
-
-*/
-class VmaBlockMetadata_Linear : public VmaBlockMetadata
-{
- VMA_CLASS_NO_COPY(VmaBlockMetadata_Linear)
-public:
- VmaBlockMetadata_Linear(VmaAllocator hAllocator);
- virtual ~VmaBlockMetadata_Linear();
- virtual void Init(VkDeviceSize size);
-
- virtual bool Validate() const;
- virtual size_t GetAllocationCount() const;
- virtual VkDeviceSize GetSumFreeSize() const { return m_SumFreeSize; }
- virtual VkDeviceSize GetUnusedRangeSizeMax() const;
- virtual bool IsEmpty() const { return GetAllocationCount() == 0; }
-
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const;
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const;
-
-#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const;
-#endif
-
- virtual bool CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- bool upperAddress,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
-
- virtual bool MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VmaAllocationRequest* pAllocationRequest);
-
- virtual uint32_t MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount);
-
- virtual VkResult CheckCorruption(const void* pBlockData);
-
- virtual void Alloc(
- const VmaAllocationRequest& request,
- VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation);
-
- virtual void Free(const VmaAllocation allocation);
- virtual void FreeAtOffset(VkDeviceSize offset);
-
-private:
- /*
- There are two suballocation vectors, used in ping-pong way.
- The one with index m_1stVectorIndex is called 1st.
- The one with index (m_1stVectorIndex ^ 1) is called 2nd.
- 2nd can be non-empty only when 1st is not empty.
- When 2nd is not empty, m_2ndVectorMode indicates its mode of operation.
- */
- typedef VmaVector< VmaSuballocation, VmaStlAllocator<VmaSuballocation> > SuballocationVectorType;
-
- enum SECOND_VECTOR_MODE
- {
- SECOND_VECTOR_EMPTY,
- /*
- Suballocations in 2nd vector are created later than the ones in 1st, but they
- all have smaller offset.
- */
- SECOND_VECTOR_RING_BUFFER,
- /*
- Suballocations in 2nd vector are upper side of double stack.
- They all have offsets higher than those in 1st vector.
- Top of this stack means smaller offsets, but higher indices in this vector.
- */
- SECOND_VECTOR_DOUBLE_STACK,
- };
-
- VkDeviceSize m_SumFreeSize;
- SuballocationVectorType m_Suballocations0, m_Suballocations1;
- uint32_t m_1stVectorIndex;
- SECOND_VECTOR_MODE m_2ndVectorMode;
-
- SuballocationVectorType& AccessSuballocations1st() { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; }
- SuballocationVectorType& AccessSuballocations2nd() { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; }
- const SuballocationVectorType& AccessSuballocations1st() const { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; }
- const SuballocationVectorType& AccessSuballocations2nd() const { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; }
-
- // Number of items in 1st vector with hAllocation = null at the beginning.
- size_t m_1stNullItemsBeginCount;
- // Number of other items in 1st vector with hAllocation = null somewhere in the middle.
- size_t m_1stNullItemsMiddleCount;
- // Number of items in 2nd vector with hAllocation = null.
- size_t m_2ndNullItemsCount;
-
- bool ShouldCompact1st() const;
- void CleanupAfterFree();
-
- bool CreateAllocationRequest_LowerAddress(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
- bool CreateAllocationRequest_UpperAddress(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
-};
-
-/*
-- GetSize() is the original size of allocated memory block.
-- m_UsableSize is this size aligned down to a power of two.
- All allocations and calculations happen relative to m_UsableSize.
-- GetUnusableSize() is the difference between them.
- It is reported as separate, unused range, not available for allocations.
-
-Node at level 0 has size = m_UsableSize.
-Each next level contains nodes with size 2 times smaller than current level.
-m_LevelCount is the maximum number of levels to use in the current object.
-*/
-class VmaBlockMetadata_Buddy : public VmaBlockMetadata
-{
- VMA_CLASS_NO_COPY(VmaBlockMetadata_Buddy)
-public:
- VmaBlockMetadata_Buddy(VmaAllocator hAllocator);
- virtual ~VmaBlockMetadata_Buddy();
- virtual void Init(VkDeviceSize size);
-
- virtual bool Validate() const;
- virtual size_t GetAllocationCount() const { return m_AllocationCount; }
- virtual VkDeviceSize GetSumFreeSize() const { return m_SumFreeSize + GetUnusableSize(); }
- virtual VkDeviceSize GetUnusedRangeSizeMax() const;
- virtual bool IsEmpty() const { return m_Root->type == Node::TYPE_FREE; }
-
- virtual void CalcAllocationStatInfo(VmaStatInfo& outInfo) const;
- virtual void AddPoolStats(VmaPoolStats& inoutStats) const;
-
-#if VMA_STATS_STRING_ENABLED
- virtual void PrintDetailedMap(class VmaJsonWriter& json) const;
-#endif
-
- virtual bool CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- bool upperAddress,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest);
-
- virtual bool MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VmaAllocationRequest* pAllocationRequest);
-
- virtual uint32_t MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount);
-
- virtual VkResult CheckCorruption(const void* pBlockData) { return VK_ERROR_FEATURE_NOT_PRESENT; }
-
- virtual void Alloc(
- const VmaAllocationRequest& request,
- VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation);
-
- virtual void Free(const VmaAllocation allocation) { FreeAtOffset(allocation, allocation->GetOffset()); }
- virtual void FreeAtOffset(VkDeviceSize offset) { FreeAtOffset(VMA_NULL, offset); }
-
-private:
- static const VkDeviceSize MIN_NODE_SIZE = 32;
- static const size_t MAX_LEVELS = 30;
-
- struct ValidationContext
- {
- size_t calculatedAllocationCount;
- size_t calculatedFreeCount;
- VkDeviceSize calculatedSumFreeSize;
-
- ValidationContext() :
- calculatedAllocationCount(0),
- calculatedFreeCount(0),
- calculatedSumFreeSize(0) { }
- };
-
- struct Node
- {
- VkDeviceSize offset;
- enum TYPE
- {
- TYPE_FREE,
- TYPE_ALLOCATION,
- TYPE_SPLIT,
- TYPE_COUNT
- } type;
- Node* parent;
- Node* buddy;
-
- union
- {
- struct
- {
- Node* prev;
- Node* next;
- } free;
- struct
- {
- VmaAllocation alloc;
- } allocation;
- struct
- {
- Node* leftChild;
- } split;
- };
- };
-
- // Size of the memory block aligned down to a power of two.
- VkDeviceSize m_UsableSize;
- uint32_t m_LevelCount;
-
- Node* m_Root;
- struct {
- Node* front;
- Node* back;
- } m_FreeList[MAX_LEVELS];
- // Number of nodes in the tree with type == TYPE_ALLOCATION.
- size_t m_AllocationCount;
- // Number of nodes in the tree with type == TYPE_FREE.
- size_t m_FreeCount;
- // This includes space wasted due to internal fragmentation. Doesn't include unusable size.
- VkDeviceSize m_SumFreeSize;
-
- VkDeviceSize GetUnusableSize() const { return GetSize() - m_UsableSize; }
- void DeleteNode(Node* node);
- bool ValidateNode(ValidationContext& ctx, const Node* parent, const Node* curr, uint32_t level, VkDeviceSize levelNodeSize) const;
- uint32_t AllocSizeToLevel(VkDeviceSize allocSize) const;
- inline VkDeviceSize LevelToNodeSize(uint32_t level) const { return m_UsableSize >> level; }
- // Alloc passed just for validation. Can be null.
- void FreeAtOffset(VmaAllocation alloc, VkDeviceSize offset);
- void CalcAllocationStatInfoNode(VmaStatInfo& outInfo, const Node* node, VkDeviceSize levelNodeSize) const;
- // Adds node to the front of FreeList at given level.
- // node->type must be FREE.
- // node->free.prev, next can be undefined.
- void AddToFreeListFront(uint32_t level, Node* node);
- // Removes node from FreeList at given level.
- // node->type must be FREE.
- // node->free.prev, next stay untouched.
- void RemoveFromFreeList(uint32_t level, Node* node);
-
-#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMapNode(class VmaJsonWriter& json, const Node* node, VkDeviceSize levelNodeSize) const;
-#endif
-};
-
-struct VmaBlockVector;
-
-/*
-Represents a single block of device memory (`VkDeviceMemory`) with all the
-data about its regions (aka suballocations, #VmaAllocation), assigned and free.
-
-Thread-safety: This class must be externally synchronized.
-*/
-class VmaDeviceMemoryBlock
-{
- VMA_CLASS_NO_COPY(VmaDeviceMemoryBlock)
-public:
- VmaBlockMetadata* m_pMetadata;
-
- VmaDeviceMemoryBlock(VmaAllocator hAllocator);
-
- ~VmaDeviceMemoryBlock()
- {
- VMA_ASSERT(m_MapCount == 0 && "VkDeviceMemory block is being destroyed while it is still mapped.");
- VMA_ASSERT(m_hMemory == VK_NULL_HANDLE);
- }
-
- // Always call after construction.
- void Init(
- VmaAllocator hAllocator,
- VmaBlockVector* parentBlockVector,
- VmaPool hParentPool,
- uint32_t newMemoryTypeIndex,
- VkDeviceMemory newMemory,
- VkDeviceSize newSize,
- uint32_t id,
- uint32_t algorithm);
- // Always call before destruction.
- void Destroy(VmaAllocator allocator);
-
- VmaBlockVector* GetParentBlockVector() const { return m_ParentBlockVector; }
- VmaPool GetParentPool() const { return m_hParentPool; }
- VkDeviceMemory GetDeviceMemory() const { return m_hMemory; }
- uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
- uint32_t GetId() const { return m_Id; }
- void* GetMappedData() const { return m_pMappedData; }
-
- // Validates all data structures inside this object. If not valid, returns false.
- bool Validate() const;
-
- VkResult CheckCorruption(VmaAllocator hAllocator);
-
- // ppData can be null.
- VkResult Map(VmaAllocator hAllocator, uint32_t count, void** ppData);
- void Unmap(VmaAllocator hAllocator, uint32_t count);
-
- VkResult WriteMagicValueAroundAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize);
- VkResult ValidateMagicValueAroundAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize);
-
- VkResult BindBufferMemory(
- const VmaAllocator hAllocator,
- const VmaAllocation hAllocation,
- VkDeviceSize allocationLocalOffset,
- VkBuffer hBuffer,
- const void* pNext);
- VkResult BindImageMemory(
- const VmaAllocator hAllocator,
- const VmaAllocation hAllocation,
- VkDeviceSize allocationLocalOffset,
- VkImage hImage,
- const void* pNext);
-
-private:
- VmaBlockVector* m_ParentBlockVector = VMA_NULL;
- VmaPool m_hParentPool = VK_NULL_HANDLE; // VK_NULL_HANDLE if not belongs to custom pool.
- uint32_t m_MemoryTypeIndex = UINT32_MAX;
- uint32_t m_Id = 0;
- VkDeviceMemory m_hMemory = VK_NULL_HANDLE;
-
- /*
- Protects access to m_hMemory so it's not used by multiple threads simultaneously, e.g. vkMapMemory, vkBindBufferMemory.
- Also protects m_MapCount, m_pMappedData.
- Allocations, deallocations, any change in m_pMetadata is protected by parent's VmaBlockVector::m_Mutex.
- */
- VMA_MUTEX m_Mutex;
- uint32_t m_MapCount = 0;
- void* m_pMappedData = VMA_NULL;
-};
-
-struct VmaDefragmentationMove
-{
- size_t srcBlockIndex;
- size_t dstBlockIndex;
- VkDeviceSize srcOffset;
- VkDeviceSize dstOffset;
- VkDeviceSize size;
- VmaAllocation hAllocation;
- VmaDeviceMemoryBlock* pSrcBlock;
- VmaDeviceMemoryBlock* pDstBlock;
-};
-
-class VmaDefragmentationAlgorithm;
-
-/*
-Sequence of VmaDeviceMemoryBlock. Represents memory blocks allocated for a specific
-Vulkan memory type.
-
-Synchronized internally with a mutex.
-*/
-struct VmaBlockVector
-{
- VMA_CLASS_NO_COPY(VmaBlockVector)
-public:
- VmaBlockVector(
- VmaAllocator hAllocator,
- VmaPool hParentPool,
- uint32_t memoryTypeIndex,
- VkDeviceSize preferredBlockSize,
- size_t minBlockCount,
- size_t maxBlockCount,
- VkDeviceSize bufferImageGranularity,
- uint32_t frameInUseCount,
- bool explicitBlockSize,
- uint32_t algorithm,
- float priority,
- VkDeviceSize minAllocationAlignment,
- void* pMemoryAllocateNext);
- ~VmaBlockVector();
-
- VkResult CreateMinBlocks();
-
- VmaAllocator GetAllocator() const { return m_hAllocator; }
- VmaPool GetParentPool() const { return m_hParentPool; }
- bool IsCustomPool() const { return m_hParentPool != VMA_NULL; }
- uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
- VkDeviceSize GetPreferredBlockSize() const { return m_PreferredBlockSize; }
- VkDeviceSize GetBufferImageGranularity() const { return m_BufferImageGranularity; }
- uint32_t GetFrameInUseCount() const { return m_FrameInUseCount; }
- uint32_t GetAlgorithm() const { return m_Algorithm; }
-
- void GetPoolStats(VmaPoolStats* pStats);
-
- bool IsEmpty();
- bool IsCorruptionDetectionEnabled() const;
-
- VkResult Allocate(
- uint32_t currentFrameIndex,
- VkDeviceSize size,
- VkDeviceSize alignment,
- const VmaAllocationCreateInfo& createInfo,
- VmaSuballocationType suballocType,
- size_t allocationCount,
- VmaAllocation* pAllocations);
-
- void Free(const VmaAllocation hAllocation);
-
- // Adds statistics of this BlockVector to pStats.
- void AddStats(VmaStats* pStats);
-
-#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap(class VmaJsonWriter& json);
-#endif
-
- void MakePoolAllocationsLost(
- uint32_t currentFrameIndex,
- size_t* pLostAllocationCount);
- VkResult CheckCorruption();
-
- // Saves results in pCtx->res.
- void Defragment(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags,
- VkDeviceSize& maxCpuBytesToMove, uint32_t& maxCpuAllocationsToMove,
- VkDeviceSize& maxGpuBytesToMove, uint32_t& maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer);
- void DefragmentationEnd(
- class VmaBlockVectorDefragmentationContext* pCtx,
- uint32_t flags,
- VmaDefragmentationStats* pStats);
-
- uint32_t ProcessDefragmentations(
- class VmaBlockVectorDefragmentationContext *pCtx,
- VmaDefragmentationPassMoveInfo* pMove, uint32_t maxMoves);
-
- void CommitDefragmentations(
- class VmaBlockVectorDefragmentationContext *pCtx,
- VmaDefragmentationStats* pStats);
-
- ////////////////////////////////////////////////////////////////////////////////
- // To be used only while the m_Mutex is locked. Used during defragmentation.
-
- size_t GetBlockCount() const { return m_Blocks.size(); }
- VmaDeviceMemoryBlock* GetBlock(size_t index) const { return m_Blocks[index]; }
- size_t CalcAllocationCount() const;
- bool IsBufferImageGranularityConflictPossible() const;
-
-private:
- friend class VmaDefragmentationAlgorithm_Generic;
-
- const VmaAllocator m_hAllocator;
- const VmaPool m_hParentPool;
- const uint32_t m_MemoryTypeIndex;
- const VkDeviceSize m_PreferredBlockSize;
- const size_t m_MinBlockCount;
- const size_t m_MaxBlockCount;
- const VkDeviceSize m_BufferImageGranularity;
- const uint32_t m_FrameInUseCount;
- const bool m_ExplicitBlockSize;
- const uint32_t m_Algorithm;
- const float m_Priority;
- const VkDeviceSize m_MinAllocationAlignment;
- void* const m_pMemoryAllocateNext;
- VMA_RW_MUTEX m_Mutex;
-
- /* There can be at most one allocation that is completely empty (except when minBlockCount > 0) -
- a hysteresis to avoid pessimistic case of alternating creation and destruction of a VkDeviceMemory. */
- bool m_HasEmptyBlock;
- // Incrementally sorted by sumFreeSize, ascending.
- VmaVector< VmaDeviceMemoryBlock*, VmaStlAllocator<VmaDeviceMemoryBlock*> > m_Blocks;
- uint32_t m_NextBlockId;
-
- VkDeviceSize CalcMaxBlockSize() const;
-
- // Finds and removes given block from vector.
- void Remove(VmaDeviceMemoryBlock* pBlock);
-
- // Performs single step in sorting m_Blocks. They may not be fully sorted
- // after this call.
- void IncrementallySortBlocks();
-
- VkResult AllocatePage(
- uint32_t currentFrameIndex,
- VkDeviceSize size,
- VkDeviceSize alignment,
- const VmaAllocationCreateInfo& createInfo,
- VmaSuballocationType suballocType,
- VmaAllocation* pAllocation);
-
- // To be used only without CAN_MAKE_OTHER_LOST flag.
- VkResult AllocateFromBlock(
- VmaDeviceMemoryBlock* pBlock,
- uint32_t currentFrameIndex,
- VkDeviceSize size,
- VkDeviceSize alignment,
- VmaAllocationCreateFlags allocFlags,
- void* pUserData,
- VmaSuballocationType suballocType,
- uint32_t strategy,
- VmaAllocation* pAllocation);
-
- VkResult CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex);
-
- // Saves result to pCtx->res.
- void ApplyDefragmentationMovesCpu(
- class VmaBlockVectorDefragmentationContext* pDefragCtx,
- const VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves);
- // Saves result to pCtx->res.
- void ApplyDefragmentationMovesGpu(
- class VmaBlockVectorDefragmentationContext* pDefragCtx,
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkCommandBuffer commandBuffer);
-
- /*
- Used during defragmentation. pDefragmentationStats is optional. It's in/out
- - updated with new data.
- */
- void FreeEmptyBlocks(VmaDefragmentationStats* pDefragmentationStats);
-
- void UpdateHasEmptyBlock();
-};
-
-struct VmaPool_T
-{
- VMA_CLASS_NO_COPY(VmaPool_T)
-public:
- VmaBlockVector m_BlockVector;
-
- VmaPool_T(
- VmaAllocator hAllocator,
- const VmaPoolCreateInfo& createInfo,
- VkDeviceSize preferredBlockSize);
- ~VmaPool_T();
-
- uint32_t GetId() const { return m_Id; }
- void SetId(uint32_t id) { VMA_ASSERT(m_Id == 0); m_Id = id; }
-
- const char* GetName() const { return m_Name; }
- void SetName(const char* pName);
-
-#if VMA_STATS_STRING_ENABLED
- //void PrintDetailedMap(class VmaStringBuilder& sb);
-#endif
-
-private:
- uint32_t m_Id;
- char* m_Name;
- VmaPool_T* m_PrevPool = VMA_NULL;
- VmaPool_T* m_NextPool = VMA_NULL;
- friend struct VmaPoolListItemTraits;
-};
-
-struct VmaPoolListItemTraits
-{
- typedef VmaPool_T ItemType;
- static ItemType* GetPrev(const ItemType* item) { return item->m_PrevPool; }
- static ItemType* GetNext(const ItemType* item) { return item->m_NextPool; }
- static ItemType*& AccessPrev(ItemType* item) { return item->m_PrevPool; }
- static ItemType*& AccessNext(ItemType* item) { return item->m_NextPool; }
-};
-
-/*
-Performs defragmentation:
-
-- Updates `pBlockVector->m_pMetadata`.
-- Updates allocations by calling ChangeBlockAllocation() or ChangeOffset().
-- Does not move actual data, only returns requested moves as `moves`.
-*/
-class VmaDefragmentationAlgorithm
-{
- VMA_CLASS_NO_COPY(VmaDefragmentationAlgorithm)
-public:
- VmaDefragmentationAlgorithm(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- uint32_t currentFrameIndex) :
- m_hAllocator(hAllocator),
- m_pBlockVector(pBlockVector),
- m_CurrentFrameIndex(currentFrameIndex)
- {
- }
- virtual ~VmaDefragmentationAlgorithm()
- {
- }
-
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged) = 0;
- virtual void AddAll() = 0;
-
- virtual VkResult Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags) = 0;
-
- virtual VkDeviceSize GetBytesMoved() const = 0;
- virtual uint32_t GetAllocationsMoved() const = 0;
-
-protected:
- VmaAllocator const m_hAllocator;
- VmaBlockVector* const m_pBlockVector;
- const uint32_t m_CurrentFrameIndex;
-
- struct AllocationInfo
- {
- VmaAllocation m_hAllocation;
- VkBool32* m_pChanged;
-
- AllocationInfo() :
- m_hAllocation(VK_NULL_HANDLE),
- m_pChanged(VMA_NULL)
- {
- }
- AllocationInfo(VmaAllocation hAlloc, VkBool32* pChanged) :
- m_hAllocation(hAlloc),
- m_pChanged(pChanged)
- {
- }
- };
-};
-
-class VmaDefragmentationAlgorithm_Generic : public VmaDefragmentationAlgorithm
-{
- VMA_CLASS_NO_COPY(VmaDefragmentationAlgorithm_Generic)
-public:
- VmaDefragmentationAlgorithm_Generic(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- uint32_t currentFrameIndex,
- bool overlappingMoveSupported);
- virtual ~VmaDefragmentationAlgorithm_Generic();
-
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged);
- virtual void AddAll() { m_AllAllocations = true; }
-
- virtual VkResult Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags);
-
- virtual VkDeviceSize GetBytesMoved() const { return m_BytesMoved; }
- virtual uint32_t GetAllocationsMoved() const { return m_AllocationsMoved; }
-
-private:
- uint32_t m_AllocationCount;
- bool m_AllAllocations;
-
- VkDeviceSize m_BytesMoved;
- uint32_t m_AllocationsMoved;
-
- struct AllocationInfoSizeGreater
- {
- bool operator()(const AllocationInfo& lhs, const AllocationInfo& rhs) const
- {
- return lhs.m_hAllocation->GetSize() > rhs.m_hAllocation->GetSize();
- }
- };
-
- struct AllocationInfoOffsetGreater
- {
- bool operator()(const AllocationInfo& lhs, const AllocationInfo& rhs) const
- {
- return lhs.m_hAllocation->GetOffset() > rhs.m_hAllocation->GetOffset();
- }
- };
-
- struct BlockInfo
- {
- size_t m_OriginalBlockIndex;
- VmaDeviceMemoryBlock* m_pBlock;
- bool m_HasNonMovableAllocations;
- VmaVector< AllocationInfo, VmaStlAllocator<AllocationInfo> > m_Allocations;
-
- BlockInfo(const VkAllocationCallbacks* pAllocationCallbacks) :
- m_OriginalBlockIndex(SIZE_MAX),
- m_pBlock(VMA_NULL),
- m_HasNonMovableAllocations(true),
- m_Allocations(pAllocationCallbacks)
- {
- }
-
- void CalcHasNonMovableAllocations()
- {
- const size_t blockAllocCount = m_pBlock->m_pMetadata->GetAllocationCount();
- const size_t defragmentAllocCount = m_Allocations.size();
- m_HasNonMovableAllocations = blockAllocCount != defragmentAllocCount;
- }
-
- void SortAllocationsBySizeDescending()
- {
- VMA_SORT(m_Allocations.begin(), m_Allocations.end(), AllocationInfoSizeGreater());
- }
-
- void SortAllocationsByOffsetDescending()
- {
- VMA_SORT(m_Allocations.begin(), m_Allocations.end(), AllocationInfoOffsetGreater());
- }
- };
-
- struct BlockPointerLess
- {
- bool operator()(const BlockInfo* pLhsBlockInfo, const VmaDeviceMemoryBlock* pRhsBlock) const
- {
- return pLhsBlockInfo->m_pBlock < pRhsBlock;
- }
- bool operator()(const BlockInfo* pLhsBlockInfo, const BlockInfo* pRhsBlockInfo) const
- {
- return pLhsBlockInfo->m_pBlock < pRhsBlockInfo->m_pBlock;
- }
- };
-
- // 1. Blocks with some non-movable allocations go first.
- // 2. Blocks with smaller sumFreeSize go first.
- struct BlockInfoCompareMoveDestination
- {
- bool operator()(const BlockInfo* pLhsBlockInfo, const BlockInfo* pRhsBlockInfo) const
- {
- if(pLhsBlockInfo->m_HasNonMovableAllocations && !pRhsBlockInfo->m_HasNonMovableAllocations)
- {
- return true;
- }
- if(!pLhsBlockInfo->m_HasNonMovableAllocations && pRhsBlockInfo->m_HasNonMovableAllocations)
- {
- return false;
- }
- if(pLhsBlockInfo->m_pBlock->m_pMetadata->GetSumFreeSize() < pRhsBlockInfo->m_pBlock->m_pMetadata->GetSumFreeSize())
- {
- return true;
- }
- return false;
- }
- };
-
- typedef VmaVector< BlockInfo*, VmaStlAllocator<BlockInfo*> > BlockInfoVector;
- BlockInfoVector m_Blocks;
-
- VkResult DefragmentRound(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- bool freeOldAllocations);
-
- size_t CalcBlocksWithNonMovableCount() const;
-
- static bool MoveMakesSense(
- size_t dstBlockIndex, VkDeviceSize dstOffset,
- size_t srcBlockIndex, VkDeviceSize srcOffset);
-};
-
-class VmaDefragmentationAlgorithm_Fast : public VmaDefragmentationAlgorithm
-{
- VMA_CLASS_NO_COPY(VmaDefragmentationAlgorithm_Fast)
-public:
- VmaDefragmentationAlgorithm_Fast(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- uint32_t currentFrameIndex,
- bool overlappingMoveSupported);
- virtual ~VmaDefragmentationAlgorithm_Fast();
-
- virtual void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged) { ++m_AllocationCount; }
- virtual void AddAll() { m_AllAllocations = true; }
-
- virtual VkResult Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags);
-
- virtual VkDeviceSize GetBytesMoved() const { return m_BytesMoved; }
- virtual uint32_t GetAllocationsMoved() const { return m_AllocationsMoved; }
-
-private:
- struct BlockInfo
- {
- size_t origBlockIndex;
- };
-
- class FreeSpaceDatabase
- {
- public:
- FreeSpaceDatabase()
- {
- FreeSpace s = {};
- s.blockInfoIndex = SIZE_MAX;
- for(size_t i = 0; i < MAX_COUNT; ++i)
- {
- m_FreeSpaces[i] = s;
- }
- }
-
- void Register(size_t blockInfoIndex, VkDeviceSize offset, VkDeviceSize size)
- {
- if(size < VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
- {
- return;
- }
-
- // Find first invalid or the smallest structure.
- size_t bestIndex = SIZE_MAX;
- for(size_t i = 0; i < MAX_COUNT; ++i)
- {
- // Empty structure.
- if(m_FreeSpaces[i].blockInfoIndex == SIZE_MAX)
- {
- bestIndex = i;
- break;
- }
- if(m_FreeSpaces[i].size < size &&
- (bestIndex == SIZE_MAX || m_FreeSpaces[bestIndex].size > m_FreeSpaces[i].size))
- {
- bestIndex = i;
- }
- }
-
- if(bestIndex != SIZE_MAX)
- {
- m_FreeSpaces[bestIndex].blockInfoIndex = blockInfoIndex;
- m_FreeSpaces[bestIndex].offset = offset;
- m_FreeSpaces[bestIndex].size = size;
- }
- }
-
- bool Fetch(VkDeviceSize alignment, VkDeviceSize size,
- size_t& outBlockInfoIndex, VkDeviceSize& outDstOffset)
- {
- size_t bestIndex = SIZE_MAX;
- VkDeviceSize bestFreeSpaceAfter = 0;
- for(size_t i = 0; i < MAX_COUNT; ++i)
- {
- // Structure is valid.
- if(m_FreeSpaces[i].blockInfoIndex != SIZE_MAX)
- {
- const VkDeviceSize dstOffset = VmaAlignUp(m_FreeSpaces[i].offset, alignment);
- // Allocation fits into this structure.
- if(dstOffset + size <= m_FreeSpaces[i].offset + m_FreeSpaces[i].size)
- {
- const VkDeviceSize freeSpaceAfter = (m_FreeSpaces[i].offset + m_FreeSpaces[i].size) -
- (dstOffset + size);
- if(bestIndex == SIZE_MAX || freeSpaceAfter > bestFreeSpaceAfter)
- {
- bestIndex = i;
- bestFreeSpaceAfter = freeSpaceAfter;
- }
- }
- }
- }
-
- if(bestIndex != SIZE_MAX)
- {
- outBlockInfoIndex = m_FreeSpaces[bestIndex].blockInfoIndex;
- outDstOffset = VmaAlignUp(m_FreeSpaces[bestIndex].offset, alignment);
-
- if(bestFreeSpaceAfter >= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
- {
- // Leave this structure for remaining empty space.
- const VkDeviceSize alignmentPlusSize = (outDstOffset - m_FreeSpaces[bestIndex].offset) + size;
- m_FreeSpaces[bestIndex].offset += alignmentPlusSize;
- m_FreeSpaces[bestIndex].size -= alignmentPlusSize;
- }
- else
- {
- // This structure becomes invalid.
- m_FreeSpaces[bestIndex].blockInfoIndex = SIZE_MAX;
- }
-
- return true;
- }
-
- return false;
- }
-
- private:
- static const size_t MAX_COUNT = 4;
-
- struct FreeSpace
- {
- size_t blockInfoIndex; // SIZE_MAX means this structure is invalid.
- VkDeviceSize offset;
- VkDeviceSize size;
- } m_FreeSpaces[MAX_COUNT];
- };
-
- const bool m_OverlappingMoveSupported;
-
- uint32_t m_AllocationCount;
- bool m_AllAllocations;
-
- VkDeviceSize m_BytesMoved;
- uint32_t m_AllocationsMoved;
-
- VmaVector< BlockInfo, VmaStlAllocator<BlockInfo> > m_BlockInfos;
-
- void PreprocessMetadata();
- void PostprocessMetadata();
- void InsertSuballoc(VmaBlockMetadata_Generic* pMetadata, const VmaSuballocation& suballoc);
-};
-
-struct VmaBlockDefragmentationContext
-{
- enum BLOCK_FLAG
- {
- BLOCK_FLAG_USED = 0x00000001,
- };
- uint32_t flags;
- VkBuffer hBuffer;
-};
-
-class VmaBlockVectorDefragmentationContext
-{
- VMA_CLASS_NO_COPY(VmaBlockVectorDefragmentationContext)
-public:
- VkResult res;
- bool mutexLocked;
- VmaVector< VmaBlockDefragmentationContext, VmaStlAllocator<VmaBlockDefragmentationContext> > blockContexts;
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> > defragmentationMoves;
- uint32_t defragmentationMovesProcessed;
- uint32_t defragmentationMovesCommitted;
- bool hasDefragmentationPlan;
-
- VmaBlockVectorDefragmentationContext(
- VmaAllocator hAllocator,
- VmaPool hCustomPool, // Optional.
- VmaBlockVector* pBlockVector,
- uint32_t currFrameIndex);
- ~VmaBlockVectorDefragmentationContext();
-
- VmaPool GetCustomPool() const { return m_hCustomPool; }
- VmaBlockVector* GetBlockVector() const { return m_pBlockVector; }
- VmaDefragmentationAlgorithm* GetAlgorithm() const { return m_pAlgorithm; }
-
- void AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged);
- void AddAll() { m_AllAllocations = true; }
-
- void Begin(bool overlappingMoveSupported, VmaDefragmentationFlags flags);
-
-private:
- const VmaAllocator m_hAllocator;
- // Null if not from custom pool.
- const VmaPool m_hCustomPool;
- // Redundant, for convenience not to fetch from m_hCustomPool->m_BlockVector or m_hAllocator->m_pBlockVectors.
- VmaBlockVector* const m_pBlockVector;
- const uint32_t m_CurrFrameIndex;
- // Owner of this object.
- VmaDefragmentationAlgorithm* m_pAlgorithm;
-
- struct AllocInfo
- {
- VmaAllocation hAlloc;
- VkBool32* pChanged;
- };
- // Used between constructor and Begin.
- VmaVector< AllocInfo, VmaStlAllocator<AllocInfo> > m_Allocations;
- bool m_AllAllocations;
-};
-
-struct VmaDefragmentationContext_T
-{
-private:
- VMA_CLASS_NO_COPY(VmaDefragmentationContext_T)
-public:
- VmaDefragmentationContext_T(
- VmaAllocator hAllocator,
- uint32_t currFrameIndex,
- uint32_t flags,
- VmaDefragmentationStats* pStats);
- ~VmaDefragmentationContext_T();
-
- void AddPools(uint32_t poolCount, const VmaPool* pPools);
- void AddAllocations(
- uint32_t allocationCount,
- const VmaAllocation* pAllocations,
- VkBool32* pAllocationsChanged);
-
- /*
- Returns:
- - `VK_SUCCESS` if succeeded and object can be destroyed immediately.
- - `VK_NOT_READY` if succeeded but the object must remain alive until vmaDefragmentationEnd().
- - Negative value if error occurred and object can be destroyed immediately.
- */
- VkResult Defragment(
- VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,
- VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer, VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags);
-
- VkResult DefragmentPassBegin(VmaDefragmentationPassInfo* pInfo);
- VkResult DefragmentPassEnd();
-
-private:
- const VmaAllocator m_hAllocator;
- const uint32_t m_CurrFrameIndex;
- const uint32_t m_Flags;
- VmaDefragmentationStats* const m_pStats;
-
- VkDeviceSize m_MaxCpuBytesToMove;
- uint32_t m_MaxCpuAllocationsToMove;
- VkDeviceSize m_MaxGpuBytesToMove;
- uint32_t m_MaxGpuAllocationsToMove;
-
- // Owner of these objects.
- VmaBlockVectorDefragmentationContext* m_DefaultPoolContexts[VK_MAX_MEMORY_TYPES];
- // Owner of these objects.
- VmaVector< VmaBlockVectorDefragmentationContext*, VmaStlAllocator<VmaBlockVectorDefragmentationContext*> > m_CustomPoolContexts;
-};
-
-#if VMA_RECORDING_ENABLED
-
-class VmaRecorder
-{
-public:
- VmaRecorder();
- VkResult Init(const VmaRecordSettings& settings, bool useMutex);
- void WriteConfiguration(
- const VkPhysicalDeviceProperties& devProps,
- const VkPhysicalDeviceMemoryProperties& memProps,
- uint32_t vulkanApiVersion,
- bool dedicatedAllocationExtensionEnabled,
- bool bindMemory2ExtensionEnabled,
- bool memoryBudgetExtensionEnabled,
- bool deviceCoherentMemoryExtensionEnabled);
- ~VmaRecorder();
-
- void RecordCreateAllocator(uint32_t frameIndex);
- void RecordDestroyAllocator(uint32_t frameIndex);
- void RecordCreatePool(uint32_t frameIndex,
- const VmaPoolCreateInfo& createInfo,
- VmaPool pool);
- void RecordDestroyPool(uint32_t frameIndex, VmaPool pool);
- void RecordAllocateMemory(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- const VmaAllocationCreateInfo& createInfo,
- VmaAllocation allocation);
- void RecordAllocateMemoryPages(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- const VmaAllocationCreateInfo& createInfo,
- uint64_t allocationCount,
- const VmaAllocation* pAllocations);
- void RecordAllocateMemoryForBuffer(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- bool requiresDedicatedAllocation,
- bool prefersDedicatedAllocation,
- const VmaAllocationCreateInfo& createInfo,
- VmaAllocation allocation);
- void RecordAllocateMemoryForImage(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- bool requiresDedicatedAllocation,
- bool prefersDedicatedAllocation,
- const VmaAllocationCreateInfo& createInfo,
- VmaAllocation allocation);
- void RecordFreeMemory(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordFreeMemoryPages(uint32_t frameIndex,
- uint64_t allocationCount,
- const VmaAllocation* pAllocations);
- void RecordSetAllocationUserData(uint32_t frameIndex,
- VmaAllocation allocation,
- const void* pUserData);
- void RecordCreateLostAllocation(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordMapMemory(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordUnmapMemory(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordFlushAllocation(uint32_t frameIndex,
- VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size);
- void RecordInvalidateAllocation(uint32_t frameIndex,
- VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size);
- void RecordCreateBuffer(uint32_t frameIndex,
- const VkBufferCreateInfo& bufCreateInfo,
- const VmaAllocationCreateInfo& allocCreateInfo,
- VmaAllocation allocation);
- void RecordCreateImage(uint32_t frameIndex,
- const VkImageCreateInfo& imageCreateInfo,
- const VmaAllocationCreateInfo& allocCreateInfo,
- VmaAllocation allocation);
- void RecordDestroyBuffer(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordDestroyImage(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordTouchAllocation(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordGetAllocationInfo(uint32_t frameIndex,
- VmaAllocation allocation);
- void RecordMakePoolAllocationsLost(uint32_t frameIndex,
- VmaPool pool);
- void RecordDefragmentationBegin(uint32_t frameIndex,
- const VmaDefragmentationInfo2& info,
- VmaDefragmentationContext ctx);
- void RecordDefragmentationEnd(uint32_t frameIndex,
- VmaDefragmentationContext ctx);
- void RecordSetPoolName(uint32_t frameIndex,
- VmaPool pool,
- const char* name);
-
-private:
- struct CallParams
- {
- uint32_t threadId;
- double time;
- };
-
- class UserDataString
- {
- public:
- UserDataString(VmaAllocationCreateFlags allocFlags, const void* pUserData);
- const char* GetString() const { return m_Str; }
-
- private:
- char m_PtrStr[17];
- const char* m_Str;
- };
-
- bool m_UseMutex;
- VmaRecordFlags m_Flags;
- FILE* m_File;
- VMA_MUTEX m_FileMutex;
- std::chrono::time_point<std::chrono::high_resolution_clock> m_RecordingStartTime;
-
- void GetBasicParams(CallParams& outParams);
-
- // T must be a pointer type, e.g. VmaAllocation, VmaPool.
- template<typename T>
- void PrintPointerList(uint64_t count, const T* pItems)
- {
- if(count)
- {
- fprintf(m_File, "%p", pItems[0]);
- for(uint64_t i = 1; i < count; ++i)
- {
- fprintf(m_File, " %p", pItems[i]);
- }
- }
- }
-
- void PrintPointerList(uint64_t count, const VmaAllocation* pItems);
- void Flush();
-};
-
-#endif // #if VMA_RECORDING_ENABLED
-
-/*
-Thread-safe wrapper over VmaPoolAllocator free list, for allocation of VmaAllocation_T objects.
-*/
-class VmaAllocationObjectAllocator
-{
- VMA_CLASS_NO_COPY(VmaAllocationObjectAllocator)
-public:
- VmaAllocationObjectAllocator(const VkAllocationCallbacks* pAllocationCallbacks);
-
- template<typename... Types> VmaAllocation Allocate(Types... args);
- void Free(VmaAllocation hAlloc);
-
-private:
- VMA_MUTEX m_Mutex;
- VmaPoolAllocator<VmaAllocation_T> m_Allocator;
-};
-
-struct VmaCurrentBudgetData
-{
- VMA_ATOMIC_UINT64 m_BlockBytes[VK_MAX_MEMORY_HEAPS];
- VMA_ATOMIC_UINT64 m_AllocationBytes[VK_MAX_MEMORY_HEAPS];
-
-#if VMA_MEMORY_BUDGET
- VMA_ATOMIC_UINT32 m_OperationsSinceBudgetFetch;
- VMA_RW_MUTEX m_BudgetMutex;
- uint64_t m_VulkanUsage[VK_MAX_MEMORY_HEAPS];
- uint64_t m_VulkanBudget[VK_MAX_MEMORY_HEAPS];
- uint64_t m_BlockBytesAtBudgetFetch[VK_MAX_MEMORY_HEAPS];
-#endif // #if VMA_MEMORY_BUDGET
-
- VmaCurrentBudgetData()
- {
- for(uint32_t heapIndex = 0; heapIndex < VK_MAX_MEMORY_HEAPS; ++heapIndex)
- {
- m_BlockBytes[heapIndex] = 0;
- m_AllocationBytes[heapIndex] = 0;
-#if VMA_MEMORY_BUDGET
- m_VulkanUsage[heapIndex] = 0;
- m_VulkanBudget[heapIndex] = 0;
- m_BlockBytesAtBudgetFetch[heapIndex] = 0;
-#endif
- }
-
-#if VMA_MEMORY_BUDGET
- m_OperationsSinceBudgetFetch = 0;
-#endif
- }
-
- void AddAllocation(uint32_t heapIndex, VkDeviceSize allocationSize)
- {
- m_AllocationBytes[heapIndex] += allocationSize;
-#if VMA_MEMORY_BUDGET
- ++m_OperationsSinceBudgetFetch;
-#endif
- }
-
- void RemoveAllocation(uint32_t heapIndex, VkDeviceSize allocationSize)
- {
- VMA_ASSERT(m_AllocationBytes[heapIndex] >= allocationSize); // DELME
- m_AllocationBytes[heapIndex] -= allocationSize;
-#if VMA_MEMORY_BUDGET
- ++m_OperationsSinceBudgetFetch;
-#endif
- }
-};
-
-// Main allocator object.
-struct VmaAllocator_T
-{
- VMA_CLASS_NO_COPY(VmaAllocator_T)
-public:
- bool m_UseMutex;
- uint32_t m_VulkanApiVersion;
- bool m_UseKhrDedicatedAllocation; // Can be set only if m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0).
- bool m_UseKhrBindMemory2; // Can be set only if m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0).
- bool m_UseExtMemoryBudget;
- bool m_UseAmdDeviceCoherentMemory;
- bool m_UseKhrBufferDeviceAddress;
- bool m_UseExtMemoryPriority;
- VkDevice m_hDevice;
- VkInstance m_hInstance;
- bool m_AllocationCallbacksSpecified;
- VkAllocationCallbacks m_AllocationCallbacks;
- VmaDeviceMemoryCallbacks m_DeviceMemoryCallbacks;
- VmaAllocationObjectAllocator m_AllocationObjectAllocator;
-
- // Each bit (1 << i) is set if HeapSizeLimit is enabled for that heap, so cannot allocate more than the heap size.
- uint32_t m_HeapSizeLimitMask;
-
- VkPhysicalDeviceProperties m_PhysicalDeviceProperties;
- VkPhysicalDeviceMemoryProperties m_MemProps;
-
- // Default pools.
- VmaBlockVector* m_pBlockVectors[VK_MAX_MEMORY_TYPES];
- VmaBlockVector* m_pSmallBufferBlockVectors[VK_MAX_MEMORY_TYPES];
-
- typedef VmaIntrusiveLinkedList<VmaDedicatedAllocationListItemTraits> DedicatedAllocationLinkedList;
- DedicatedAllocationLinkedList m_DedicatedAllocations[VK_MAX_MEMORY_TYPES];
- VMA_RW_MUTEX m_DedicatedAllocationsMutex[VK_MAX_MEMORY_TYPES];
-
- VmaCurrentBudgetData m_Budget;
- VMA_ATOMIC_UINT32 m_DeviceMemoryCount; // Total number of VkDeviceMemory objects.
-
- VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo);
- VkResult Init(const VmaAllocatorCreateInfo* pCreateInfo);
- ~VmaAllocator_T();
-
- const VkAllocationCallbacks* GetAllocationCallbacks() const
- {
- return m_AllocationCallbacksSpecified ? &m_AllocationCallbacks : 0;
- }
- const VmaVulkanFunctions& GetVulkanFunctions() const
- {
- return m_VulkanFunctions;
- }
-
- VkPhysicalDevice GetPhysicalDevice() const { return m_PhysicalDevice; }
-
- VkDeviceSize GetBufferImageGranularity() const
- {
- return VMA_MAX(
- static_cast<VkDeviceSize>(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY),
- m_PhysicalDeviceProperties.limits.bufferImageGranularity);
- }
-
- uint32_t GetMemoryHeapCount() const { return m_MemProps.memoryHeapCount; }
- uint32_t GetMemoryTypeCount() const { return m_MemProps.memoryTypeCount; }
-
- uint32_t MemoryTypeIndexToHeapIndex(uint32_t memTypeIndex) const
- {
- VMA_ASSERT(memTypeIndex < m_MemProps.memoryTypeCount);
- return m_MemProps.memoryTypes[memTypeIndex].heapIndex;
- }
- // True when specific memory type is HOST_VISIBLE but not HOST_COHERENT.
- bool IsMemoryTypeNonCoherent(uint32_t memTypeIndex) const
- {
- return (m_MemProps.memoryTypes[memTypeIndex].propertyFlags & (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) ==
- VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
- }
- // Minimum alignment for all allocations in specific memory type.
- VkDeviceSize GetMemoryTypeMinAlignment(uint32_t memTypeIndex) const
- {
- return IsMemoryTypeNonCoherent(memTypeIndex) ?
- VMA_MAX((VkDeviceSize)VMA_MIN_ALIGNMENT, m_PhysicalDeviceProperties.limits.nonCoherentAtomSize) :
- (VkDeviceSize)VMA_MIN_ALIGNMENT;
- }
-
- bool IsIntegratedGpu() const
- {
- return m_PhysicalDeviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
- }
-
- uint32_t GetGlobalMemoryTypeBits() const { return m_GlobalMemoryTypeBits; }
-
-#if VMA_RECORDING_ENABLED
- VmaRecorder* GetRecorder() const { return m_pRecorder; }
-#endif
-
- void GetBufferMemoryRequirements(
- VkBuffer hBuffer,
- VkMemoryRequirements& memReq,
- bool& requiresDedicatedAllocation,
- bool& prefersDedicatedAllocation) const;
- void GetImageMemoryRequirements(
- VkImage hImage,
- VkMemoryRequirements& memReq,
- bool& requiresDedicatedAllocation,
- bool& prefersDedicatedAllocation) const;
-
- // Main allocation function.
- VkResult AllocateMemory(
- const VkMemoryRequirements& vkMemReq,
- bool requiresDedicatedAllocation,
- bool prefersDedicatedAllocation,
- VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage, // UINT32_MAX when unknown.
- VkImage dedicatedImage,
- const VmaAllocationCreateInfo& createInfo,
- VmaSuballocationType suballocType,
- size_t allocationCount,
- VmaAllocation* pAllocations);
-
- // Main deallocation function.
- void FreeMemory(
- size_t allocationCount,
- const VmaAllocation* pAllocations);
-
- void CalculateStats(VmaStats* pStats);
-
- void GetBudget(
- VmaBudget* outBudget, uint32_t firstHeap, uint32_t heapCount);
-
-#if VMA_STATS_STRING_ENABLED
- void PrintDetailedMap(class VmaJsonWriter& json);
-#endif
-
- VkResult DefragmentationBegin(
- const VmaDefragmentationInfo2& info,
- VmaDefragmentationStats* pStats,
- VmaDefragmentationContext* pContext);
- VkResult DefragmentationEnd(
- VmaDefragmentationContext context);
-
- VkResult DefragmentationPassBegin(
- VmaDefragmentationPassInfo* pInfo,
- VmaDefragmentationContext context);
- VkResult DefragmentationPassEnd(
- VmaDefragmentationContext context);
-
- void GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo);
- bool TouchAllocation(VmaAllocation hAllocation);
-
- VkResult CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPool* pPool);
- void DestroyPool(VmaPool pool);
- void GetPoolStats(VmaPool pool, VmaPoolStats* pPoolStats);
-
- void SetCurrentFrameIndex(uint32_t frameIndex);
- uint32_t GetCurrentFrameIndex() const { return m_CurrentFrameIndex.load(); }
-
- void MakePoolAllocationsLost(
- VmaPool hPool,
- size_t* pLostAllocationCount);
- VkResult CheckPoolCorruption(VmaPool hPool);
- VkResult CheckCorruption(uint32_t memoryTypeBits);
-
- void CreateLostAllocation(VmaAllocation* pAllocation);
-
- // Call to Vulkan function vkAllocateMemory with accompanying bookkeeping.
- VkResult AllocateVulkanMemory(const VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory);
- // Call to Vulkan function vkFreeMemory with accompanying bookkeeping.
- void FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory);
- // Call to Vulkan function vkBindBufferMemory or vkBindBufferMemory2KHR.
- VkResult BindVulkanBuffer(
- VkDeviceMemory memory,
- VkDeviceSize memoryOffset,
- VkBuffer buffer,
- const void* pNext);
- // Call to Vulkan function vkBindImageMemory or vkBindImageMemory2KHR.
- VkResult BindVulkanImage(
- VkDeviceMemory memory,
- VkDeviceSize memoryOffset,
- VkImage image,
- const void* pNext);
-
- VkResult Map(VmaAllocation hAllocation, void** ppData);
- void Unmap(VmaAllocation hAllocation);
-
- VkResult BindBufferMemory(
- VmaAllocation hAllocation,
- VkDeviceSize allocationLocalOffset,
- VkBuffer hBuffer,
- const void* pNext);
- VkResult BindImageMemory(
- VmaAllocation hAllocation,
- VkDeviceSize allocationLocalOffset,
- VkImage hImage,
- const void* pNext);
-
- VkResult FlushOrInvalidateAllocation(
- VmaAllocation hAllocation,
- VkDeviceSize offset, VkDeviceSize size,
- VMA_CACHE_OPERATION op);
- VkResult FlushOrInvalidateAllocations(
- uint32_t allocationCount,
- const VmaAllocation* allocations,
- const VkDeviceSize* offsets, const VkDeviceSize* sizes,
- VMA_CACHE_OPERATION op);
-
- void FillAllocation(const VmaAllocation hAllocation, uint8_t pattern);
-
- /*
- Returns bit mask of memory types that can support defragmentation on GPU as
- they support creation of required buffer for copy operations.
- */
- uint32_t GetGpuDefragmentationMemoryTypeBits();
-
-#if VMA_EXTERNAL_MEMORY
- VkExternalMemoryHandleTypeFlagsKHR GetExternalMemoryHandleTypeFlags(uint32_t memTypeIndex) const
- {
- return m_TypeExternalMemoryHandleTypes[memTypeIndex];
- }
-#endif // #if VMA_EXTERNAL_MEMORY
-
-private:
- VkDeviceSize m_PreferredLargeHeapBlockSize;
-
- VkPhysicalDevice m_PhysicalDevice;
- VMA_ATOMIC_UINT32 m_CurrentFrameIndex;
- VMA_ATOMIC_UINT32 m_GpuDefragmentationMemoryTypeBits; // UINT32_MAX means uninitialized.
-#if VMA_EXTERNAL_MEMORY
- VkExternalMemoryHandleTypeFlagsKHR m_TypeExternalMemoryHandleTypes[VK_MAX_MEMORY_TYPES];
-#endif // #if VMA_EXTERNAL_MEMORY
-
- VMA_RW_MUTEX m_PoolsMutex;
- typedef VmaIntrusiveLinkedList<VmaPoolListItemTraits> PoolList;
- // Protected by m_PoolsMutex.
- PoolList m_Pools;
- uint32_t m_NextPoolId;
-
- VmaVulkanFunctions m_VulkanFunctions;
-
- // Global bit mask AND-ed with any memoryTypeBits to disallow certain memory types.
- uint32_t m_GlobalMemoryTypeBits;
-
-#if VMA_RECORDING_ENABLED
- VmaRecorder* m_pRecorder;
-#endif
-
- void ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunctions);
-
-#if VMA_STATIC_VULKAN_FUNCTIONS == 1
- void ImportVulkanFunctions_Static();
-#endif
-
- void ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVulkanFunctions);
-
-#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1
- void ImportVulkanFunctions_Dynamic();
-#endif
-
- void ValidateVulkanFunctions();
-
- VkDeviceSize CalcPreferredBlockSize(uint32_t memTypeIndex);
-
- VkResult AllocateMemoryOfType(
- VkDeviceSize size,
- VkDeviceSize alignment,
- bool dedicatedAllocation,
- VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
- VkImage dedicatedImage,
- const VmaAllocationCreateInfo& createInfo,
- uint32_t memTypeIndex,
- VmaSuballocationType suballocType,
- size_t allocationCount,
- VmaAllocation* pAllocations);
-
- // Helper function only to be used inside AllocateDedicatedMemory.
- VkResult AllocateDedicatedMemoryPage(
- VkDeviceSize size,
- VmaSuballocationType suballocType,
- uint32_t memTypeIndex,
- const VkMemoryAllocateInfo& allocInfo,
- bool map,
- bool isUserDataString,
- void* pUserData,
- VmaAllocation* pAllocation);
-
- // Allocates and registers new VkDeviceMemory specifically for dedicated allocations.
- VkResult AllocateDedicatedMemory(
- VkDeviceSize size,
- VmaSuballocationType suballocType,
- uint32_t memTypeIndex,
- bool withinBudget,
- bool map,
- bool isUserDataString,
- void* pUserData,
- float priority,
- VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
- VkImage dedicatedImage,
- size_t allocationCount,
- VmaAllocation* pAllocations);
-
- void FreeDedicatedMemory(const VmaAllocation allocation);
-
- /*
- Calculates and returns bit mask of memory types that can support defragmentation
- on GPU as they support creation of required buffer for copy operations.
- */
- uint32_t CalculateGpuDefragmentationMemoryTypeBits() const;
-
- uint32_t CalculateGlobalMemoryTypeBits() const;
-
- bool GetFlushOrInvalidateRange(
- VmaAllocation allocation,
- VkDeviceSize offset, VkDeviceSize size,
- VkMappedMemoryRange& outRange) const;
-
-#if VMA_MEMORY_BUDGET
- void UpdateVulkanBudget();
-#endif // #if VMA_MEMORY_BUDGET
-};
-
-////////////////////////////////////////////////////////////////////////////////
-// Memory allocation #2 after VmaAllocator_T definition
-
-static void* VmaMalloc(VmaAllocator hAllocator, size_t size, size_t alignment)
-{
- return VmaMalloc(&hAllocator->m_AllocationCallbacks, size, alignment);
-}
-
-static void VmaFree(VmaAllocator hAllocator, void* ptr)
-{
- VmaFree(&hAllocator->m_AllocationCallbacks, ptr);
-}
-
-template<typename T>
-static T* VmaAllocate(VmaAllocator hAllocator)
-{
- return (T*)VmaMalloc(hAllocator, sizeof(T), VMA_ALIGN_OF(T));
-}
-
-template<typename T>
-static T* VmaAllocateArray(VmaAllocator hAllocator, size_t count)
-{
- return (T*)VmaMalloc(hAllocator, sizeof(T) * count, VMA_ALIGN_OF(T));
-}
-
-template<typename T>
-static void vma_delete(VmaAllocator hAllocator, T* ptr)
-{
- if(ptr != VMA_NULL)
- {
- ptr->~T();
- VmaFree(hAllocator, ptr);
- }
-}
-
-template<typename T>
-static void vma_delete_array(VmaAllocator hAllocator, T* ptr, size_t count)
-{
- if(ptr != VMA_NULL)
- {
- for(size_t i = count; i--; )
- ptr[i].~T();
- VmaFree(hAllocator, ptr);
- }
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// VmaStringBuilder
-
-#if VMA_STATS_STRING_ENABLED
-
+#if !defined(_VMA_STRING_BUILDER) && VMA_STATS_STRING_ENABLED
class VmaStringBuilder
{
public:
- VmaStringBuilder(VmaAllocator alloc) : m_Data(VmaStlAllocator<char>(alloc->GetAllocationCallbacks())) { }
+ VmaStringBuilder(const VkAllocationCallbacks* allocationCallbacks) : m_Data(VmaStlAllocator<char>(allocationCallbacks)) {}
+ ~VmaStringBuilder() = default;
+
size_t GetLength() const { return m_Data.size(); }
const char* GetData() const { return m_Data.data(); }
-
+ void AddNewLine() { Add('\n'); }
void Add(char ch) { m_Data.push_back(ch); }
+
void Add(const char* pStr);
- void AddNewLine() { Add('\n'); }
void AddNumber(uint32_t num);
void AddNumber(uint64_t num);
void AddPointer(const void* ptr);
private:
- VmaVector< char, VmaStlAllocator<char> > m_Data;
+ VmaVector<char, VmaStlAllocator<char>> m_Data;
};
+#ifndef _VMA_STRING_BUILDER_FUNCTIONS
void VmaStringBuilder::Add(const char* pStr)
{
const size_t strLen = strlen(pStr);
- if(strLen > 0)
+ if (strLen > 0)
{
const size_t oldCount = m_Data.size();
m_Data.resize(oldCount + strLen);
@@ -8618,13 +5327,12 @@ void VmaStringBuilder::AddNumber(uint32_t num)
{
char buf[11];
buf[10] = '\0';
- char *p = &buf[10];
+ char* p = &buf[10];
do
{
*--p = '0' + (num % 10);
num /= 10;
- }
- while(num);
+ } while (num);
Add(p);
}
@@ -8632,13 +5340,12 @@ void VmaStringBuilder::AddNumber(uint64_t num)
{
char buf[21];
buf[20] = '\0';
- char *p = &buf[20];
+ char* p = &buf[20];
do
{
*--p = '0' + (num % 10);
num /= 10;
- }
- while(num);
+ } while (num);
Add(p);
}
@@ -8648,43 +5355,65 @@ void VmaStringBuilder::AddPointer(const void* ptr)
VmaPtrToStr(buf, sizeof(buf), ptr);
Add(buf);
}
+#endif //_VMA_STRING_BUILDER_FUNCTIONS
+#endif // _VMA_STRING_BUILDER
-#endif // #if VMA_STATS_STRING_ENABLED
-
-////////////////////////////////////////////////////////////////////////////////
-// VmaJsonWriter
-
-#if VMA_STATS_STRING_ENABLED
-
+#if !defined(_VMA_JSON_WRITER) && VMA_STATS_STRING_ENABLED
+/*
+Allows to conveniently build a correct JSON document to be written to the
+VmaStringBuilder passed to the constructor.
+*/
class VmaJsonWriter
{
VMA_CLASS_NO_COPY(VmaJsonWriter)
public:
+ // sb - string builder to write the document to. Must remain alive for the whole lifetime of this object.
VmaJsonWriter(const VkAllocationCallbacks* pAllocationCallbacks, VmaStringBuilder& sb);
~VmaJsonWriter();
+ // Begins object by writing "{".
+ // Inside an object, you must call pairs of WriteString and a value, e.g.:
+ // j.BeginObject(true); j.WriteString("A"); j.WriteNumber(1); j.WriteString("B"); j.WriteNumber(2); j.EndObject();
+ // Will write: { "A": 1, "B": 2 }
void BeginObject(bool singleLine = false);
+ // Ends object by writing "}".
void EndObject();
+ // Begins array by writing "[".
+ // Inside an array, you can write a sequence of any values.
void BeginArray(bool singleLine = false);
+ // Ends array by writing "[".
void EndArray();
+ // Writes a string value inside "".
+ // pStr can contain any ANSI characters, including '"', new line etc. - they will be properly escaped.
void WriteString(const char* pStr);
+
+ // Begins writing a string value.
+ // Call BeginString, ContinueString, ContinueString, ..., EndString instead of
+ // WriteString to conveniently build the string content incrementally, made of
+ // parts including numbers.
void BeginString(const char* pStr = VMA_NULL);
+ // Posts next part of an open string.
void ContinueString(const char* pStr);
+ // Posts next part of an open string. The number is converted to decimal characters.
void ContinueString(uint32_t n);
void ContinueString(uint64_t n);
+ // Posts next part of an open string. Pointer value is converted to characters
+ // using "%p" formatting - shown as hexadecimal number, e.g.: 000000081276Ad00
void ContinueString_Pointer(const void* ptr);
+ // Ends writing a string value by writing '"'.
void EndString(const char* pStr = VMA_NULL);
+ // Writes a number value.
void WriteNumber(uint32_t n);
void WriteNumber(uint64_t n);
+ // Writes a boolean value - false or true.
void WriteBool(bool b);
+ // Writes a null value.
void WriteNull();
private:
- static const char* const INDENT;
-
enum COLLECTION_TYPE
{
COLLECTION_TYPE_OBJECT,
@@ -8697,6 +5426,8 @@ private:
bool singleLineMode;
};
+ static const char* const INDENT;
+
VmaStringBuilder& m_SB;
VmaVector< StackItem, VmaStlAllocator<StackItem> > m_Stack;
bool m_InsideString;
@@ -8704,15 +5435,13 @@ private:
void BeginValue(bool isString);
void WriteIndent(bool oneLess = false);
};
-
const char* const VmaJsonWriter::INDENT = " ";
-VmaJsonWriter::VmaJsonWriter(const VkAllocationCallbacks* pAllocationCallbacks, VmaStringBuilder& sb) :
- m_SB(sb),
+#ifndef _VMA_JSON_WRITER_FUNCTIONS
+VmaJsonWriter::VmaJsonWriter(const VkAllocationCallbacks* pAllocationCallbacks, VmaStringBuilder& sb)
+ : m_SB(sb),
m_Stack(VmaStlAllocator<StackItem>(pAllocationCallbacks)),
- m_InsideString(false)
-{
-}
+ m_InsideString(false) {}
VmaJsonWriter::~VmaJsonWriter()
{
@@ -8783,7 +5512,7 @@ void VmaJsonWriter::BeginString(const char* pStr)
BeginValue(true);
m_SB.Add('"');
m_InsideString = true;
- if(pStr != VMA_NULL && pStr[0] != '\0')
+ if (pStr != VMA_NULL && pStr[0] != '\0')
{
ContinueString(pStr);
}
@@ -8794,22 +5523,22 @@ void VmaJsonWriter::ContinueString(const char* pStr)
VMA_ASSERT(m_InsideString);
const size_t strLen = strlen(pStr);
- for(size_t i = 0; i < strLen; ++i)
+ for (size_t i = 0; i < strLen; ++i)
{
char ch = pStr[i];
- if(ch == '\\')
+ if (ch == '\\')
{
m_SB.Add("\\\\");
}
- else if(ch == '"')
+ else if (ch == '"')
{
m_SB.Add("\\\"");
}
- else if(ch >= 32)
+ else if (ch >= 32)
{
m_SB.Add(ch);
}
- else switch(ch)
+ else switch (ch)
{
case '\b':
m_SB.Add("\\b");
@@ -8854,7 +5583,7 @@ void VmaJsonWriter::ContinueString_Pointer(const void* ptr)
void VmaJsonWriter::EndString(const char* pStr)
{
VMA_ASSERT(m_InsideString);
- if(pStr != VMA_NULL && pStr[0] != '\0')
+ if (pStr != VMA_NULL && pStr[0] != '\0')
{
ContinueString(pStr);
}
@@ -8892,21 +5621,21 @@ void VmaJsonWriter::WriteNull()
void VmaJsonWriter::BeginValue(bool isString)
{
- if(!m_Stack.empty())
+ if (!m_Stack.empty())
{
StackItem& currItem = m_Stack.back();
- if(currItem.type == COLLECTION_TYPE_OBJECT &&
+ if (currItem.type == COLLECTION_TYPE_OBJECT &&
currItem.valueCount % 2 == 0)
{
VMA_ASSERT(isString);
}
- if(currItem.type == COLLECTION_TYPE_OBJECT &&
+ if (currItem.type == COLLECTION_TYPE_OBJECT &&
currItem.valueCount % 2 != 0)
{
m_SB.Add(": ");
}
- else if(currItem.valueCount > 0)
+ else if (currItem.valueCount > 0)
{
m_SB.Add(", ");
WriteIndent();
@@ -8921,399 +5650,729 @@ void VmaJsonWriter::BeginValue(bool isString)
void VmaJsonWriter::WriteIndent(bool oneLess)
{
- if(!m_Stack.empty() && !m_Stack.back().singleLineMode)
+ if (!m_Stack.empty() && !m_Stack.back().singleLineMode)
{
m_SB.AddNewLine();
size_t count = m_Stack.size();
- if(count > 0 && oneLess)
+ if (count > 0 && oneLess)
{
--count;
}
- for(size_t i = 0; i < count; ++i)
+ for (size_t i = 0; i < count; ++i)
{
m_SB.Add(INDENT);
}
}
}
+#endif // _VMA_JSON_WRITER_FUNCTIONS
-#endif // #if VMA_STATS_STRING_ENABLED
+static void VmaPrintDetailedStatistics(VmaJsonWriter& json, const VmaDetailedStatistics& stat)
+{
+ json.BeginObject();
-////////////////////////////////////////////////////////////////////////////////
+ json.WriteString("BlockCount");
+ json.WriteNumber(stat.statistics.blockCount);
-void VmaAllocation_T::SetUserData(VmaAllocator hAllocator, void* pUserData)
-{
- if(IsUserDataString())
- {
- VMA_ASSERT(pUserData == VMA_NULL || pUserData != m_pUserData);
+ json.WriteString("AllocationCount");
+ json.WriteNumber(stat.statistics.allocationCount);
- FreeUserDataString(hAllocator);
+ json.WriteString("UnusedRangeCount");
+ json.WriteNumber(stat.unusedRangeCount);
- if(pUserData != VMA_NULL)
- {
- m_pUserData = VmaCreateStringCopy(hAllocator->GetAllocationCallbacks(), (const char*)pUserData);
- }
- }
- else
+ json.WriteString("BlockBytes");
+ json.WriteNumber(stat.statistics.blockBytes);
+
+ json.WriteString("AllocationBytes");
+ json.WriteNumber(stat.statistics.allocationBytes);
+
+ if (stat.statistics.allocationCount > 1)
{
- m_pUserData = pUserData;
+ json.WriteString("AllocationSize");
+ json.BeginObject(true);
+ json.WriteString("Min");
+ json.WriteNumber(stat.allocationSizeMin);
+ json.WriteString("Max");
+ json.WriteNumber(stat.allocationSizeMax);
+ json.EndObject();
}
-}
-
-void VmaAllocation_T::ChangeBlockAllocation(
- VmaAllocator hAllocator,
- VmaDeviceMemoryBlock* block,
- VkDeviceSize offset)
-{
- VMA_ASSERT(block != VMA_NULL);
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
- // Move mapping reference counter from old block to new block.
- if(block != m_BlockAllocation.m_Block)
+ if (stat.unusedRangeCount > 1)
{
- uint32_t mapRefCount = m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP;
- if(IsPersistentMap())
- ++mapRefCount;
- m_BlockAllocation.m_Block->Unmap(hAllocator, mapRefCount);
- block->Map(hAllocator, mapRefCount, VMA_NULL);
+ json.WriteString("UnusedRangeSize");
+ json.BeginObject(true);
+ json.WriteString("Min");
+ json.WriteNumber(stat.unusedRangeSizeMin);
+ json.WriteString("Max");
+ json.WriteNumber(stat.unusedRangeSizeMax);
+ json.EndObject();
}
- m_BlockAllocation.m_Block = block;
- m_BlockAllocation.m_Offset = offset;
+ json.EndObject();
}
+#endif // _VMA_JSON_WRITER
-void VmaAllocation_T::ChangeOffset(VkDeviceSize newOffset)
-{
- VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
- m_BlockAllocation.m_Offset = newOffset;
-}
+#ifndef _VMA_MAPPING_HYSTERESIS
-VkDeviceSize VmaAllocation_T::GetOffset() const
+class VmaMappingHysteresis
{
- switch(m_Type)
- {
- case ALLOCATION_TYPE_BLOCK:
- return m_BlockAllocation.m_Offset;
- case ALLOCATION_TYPE_DEDICATED:
- return 0;
- default:
- VMA_ASSERT(0);
- return 0;
- }
-}
+ VMA_CLASS_NO_COPY(VmaMappingHysteresis)
+public:
+ VmaMappingHysteresis() = default;
-VkDeviceMemory VmaAllocation_T::GetMemory() const
-{
- switch(m_Type)
- {
- case ALLOCATION_TYPE_BLOCK:
- return m_BlockAllocation.m_Block->GetDeviceMemory();
- case ALLOCATION_TYPE_DEDICATED:
- return m_DedicatedAllocation.m_hMemory;
- default:
- VMA_ASSERT(0);
- return VK_NULL_HANDLE;
- }
-}
+ uint32_t GetExtraMapping() const { return m_ExtraMapping; }
-void* VmaAllocation_T::GetMappedData() const
-{
- switch(m_Type)
+ // Call when Map was called.
+ // Returns true if switched to extra +1 mapping reference count.
+ bool PostMap()
{
- case ALLOCATION_TYPE_BLOCK:
- if(m_MapCount != 0)
- {
- void* pBlockData = m_BlockAllocation.m_Block->GetMappedData();
- VMA_ASSERT(pBlockData != VMA_NULL);
- return (char*)pBlockData + m_BlockAllocation.m_Offset;
- }
- else
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 0)
{
- return VMA_NULL;
+ ++m_MajorCounter;
+ if(m_MajorCounter >= COUNTER_MIN_EXTRA_MAPPING)
+ {
+ m_ExtraMapping = 1;
+ m_MajorCounter = 0;
+ m_MinorCounter = 0;
+ return true;
+ }
}
- break;
- case ALLOCATION_TYPE_DEDICATED:
- VMA_ASSERT((m_DedicatedAllocation.m_pMappedData != VMA_NULL) == (m_MapCount != 0));
- return m_DedicatedAllocation.m_pMappedData;
- default:
- VMA_ASSERT(0);
- return VMA_NULL;
+ else // m_ExtraMapping == 1
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ return false;
}
-}
-bool VmaAllocation_T::CanBecomeLost() const
-{
- switch(m_Type)
+ // Call when Unmap was called.
+ void PostUnmap()
{
- case ALLOCATION_TYPE_BLOCK:
- return m_BlockAllocation.m_CanBecomeLost;
- case ALLOCATION_TYPE_DEDICATED:
- return false;
- default:
- VMA_ASSERT(0);
- return false;
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 0)
+ ++m_MajorCounter;
+ else // m_ExtraMapping == 1
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
}
-}
-bool VmaAllocation_T::MakeLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
-{
- VMA_ASSERT(CanBecomeLost());
+ // Call when allocation was made from the memory block.
+ void PostAlloc()
+ {
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 1)
+ ++m_MajorCounter;
+ else // m_ExtraMapping == 0
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ }
- /*
- Warning: This is a carefully designed algorithm.
- Do not modify unless you really know what you're doing :)
- */
- uint32_t localLastUseFrameIndex = GetLastUseFrameIndex();
- for(;;)
+ // Call when allocation was freed from the memory block.
+ // Returns true if switched to extra -1 mapping reference count.
+ bool PostFree()
{
- if(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)
+#if VMA_MAPPING_HYSTERESIS_ENABLED
+ if(m_ExtraMapping == 1)
{
- VMA_ASSERT(0);
- return false;
- }
- else if(localLastUseFrameIndex + frameInUseCount >= currentFrameIndex)
- {
- return false;
- }
- else // Last use time earlier than current time.
- {
- if(CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, VMA_FRAME_INDEX_LOST))
+ ++m_MajorCounter;
+ if(m_MajorCounter >= COUNTER_MIN_EXTRA_MAPPING &&
+ m_MajorCounter > m_MinorCounter + 1)
{
- // Setting hAllocation.LastUseFrameIndex atomic to VMA_FRAME_INDEX_LOST is enough to mark it as LOST.
- // Calling code just needs to unregister this allocation in owning VmaDeviceMemoryBlock.
+ m_ExtraMapping = 0;
+ m_MajorCounter = 0;
+ m_MinorCounter = 0;
return true;
}
}
+ else // m_ExtraMapping == 0
+ PostMinorCounter();
+#endif // #if VMA_MAPPING_HYSTERESIS_ENABLED
+ return false;
}
-}
-#if VMA_STATS_STRING_ENABLED
+private:
+ static const int32_t COUNTER_MIN_EXTRA_MAPPING = 7;
-// Correspond to values of enum VmaSuballocationType.
-static const char* VMA_SUBALLOCATION_TYPE_NAMES[] = {
- "FREE",
- "UNKNOWN",
- "BUFFER",
- "IMAGE_UNKNOWN",
- "IMAGE_LINEAR",
- "IMAGE_OPTIMAL",
+ uint32_t m_MinorCounter = 0;
+ uint32_t m_MajorCounter = 0;
+ uint32_t m_ExtraMapping = 0; // 0 or 1.
+
+ void PostMinorCounter()
+ {
+ if(m_MinorCounter < m_MajorCounter)
+ ++m_MinorCounter;
+ else if(m_MajorCounter > 0)
+ --m_MajorCounter, --m_MinorCounter;
+ }
};
-void VmaAllocation_T::PrintParameters(class VmaJsonWriter& json) const
+#endif // _VMA_MAPPING_HYSTERESIS
+
+#ifndef _VMA_DEVICE_MEMORY_BLOCK
+/*
+Represents a single block of device memory (`VkDeviceMemory`) with all the
+data about its regions (aka suballocations, #VmaAllocation), assigned and free.
+
+Thread-safety:
+- Access to m_pMetadata must be externally synchronized.
+- Map, Unmap, Bind* are synchronized internally.
+*/
+class VmaDeviceMemoryBlock
{
- json.WriteString("Type");
- json.WriteString(VMA_SUBALLOCATION_TYPE_NAMES[m_SuballocationType]);
+ VMA_CLASS_NO_COPY(VmaDeviceMemoryBlock)
+public:
+ VmaBlockMetadata* m_pMetadata;
- json.WriteString("Size");
- json.WriteNumber(m_Size);
+ VmaDeviceMemoryBlock(VmaAllocator hAllocator);
+ ~VmaDeviceMemoryBlock();
- if(m_pUserData != VMA_NULL)
+ // Always call after construction.
+ void Init(
+ VmaAllocator hAllocator,
+ VmaPool hParentPool,
+ uint32_t newMemoryTypeIndex,
+ VkDeviceMemory newMemory,
+ VkDeviceSize newSize,
+ uint32_t id,
+ uint32_t algorithm,
+ VkDeviceSize bufferImageGranularity);
+ // Always call before destruction.
+ void Destroy(VmaAllocator allocator);
+
+ VmaPool GetParentPool() const { return m_hParentPool; }
+ VkDeviceMemory GetDeviceMemory() const { return m_hMemory; }
+ uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
+ uint32_t GetId() const { return m_Id; }
+ void* GetMappedData() const { return m_pMappedData; }
+ uint32_t GetMapRefCount() const { return m_MapCount; }
+
+ // Call when allocation/free was made from m_pMetadata.
+ // Used for m_MappingHysteresis.
+ void PostAlloc() { m_MappingHysteresis.PostAlloc(); }
+ void PostFree(VmaAllocator hAllocator);
+
+ // Validates all data structures inside this object. If not valid, returns false.
+ bool Validate() const;
+ VkResult CheckCorruption(VmaAllocator hAllocator);
+
+ // ppData can be null.
+ VkResult Map(VmaAllocator hAllocator, uint32_t count, void** ppData);
+ void Unmap(VmaAllocator hAllocator, uint32_t count);
+
+ VkResult WriteMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize);
+ VkResult ValidateMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize);
+
+ VkResult BindBufferMemory(
+ const VmaAllocator hAllocator,
+ const VmaAllocation hAllocation,
+ VkDeviceSize allocationLocalOffset,
+ VkBuffer hBuffer,
+ const void* pNext);
+ VkResult BindImageMemory(
+ const VmaAllocator hAllocator,
+ const VmaAllocation hAllocation,
+ VkDeviceSize allocationLocalOffset,
+ VkImage hImage,
+ const void* pNext);
+
+private:
+ VmaPool m_hParentPool; // VK_NULL_HANDLE if not belongs to custom pool.
+ uint32_t m_MemoryTypeIndex;
+ uint32_t m_Id;
+ VkDeviceMemory m_hMemory;
+
+ /*
+ Protects access to m_hMemory so it is not used by multiple threads simultaneously, e.g. vkMapMemory, vkBindBufferMemory.
+ Also protects m_MapCount, m_pMappedData.
+ Allocations, deallocations, any change in m_pMetadata is protected by parent's VmaBlockVector::m_Mutex.
+ */
+ VMA_MUTEX m_MapAndBindMutex;
+ VmaMappingHysteresis m_MappingHysteresis;
+ uint32_t m_MapCount;
+ void* m_pMappedData;
+};
+#endif // _VMA_DEVICE_MEMORY_BLOCK
+
+#ifndef _VMA_ALLOCATION_T
+struct VmaAllocation_T
+{
+ friend struct VmaDedicatedAllocationListItemTraits;
+
+ enum FLAGS
{
- json.WriteString("UserData");
- if(IsUserDataString())
- {
- json.WriteString((const char*)m_pUserData);
- }
- else
- {
- json.BeginString();
- json.ContinueString_Pointer(m_pUserData);
- json.EndString();
- }
- }
+ FLAG_USER_DATA_STRING = 0x01,
+ FLAG_PERSISTENT_MAP = 0x02,
+ FLAG_MAPPING_ALLOWED = 0x04,
+ };
+
+public:
+ enum ALLOCATION_TYPE
+ {
+ ALLOCATION_TYPE_NONE,
+ ALLOCATION_TYPE_BLOCK,
+ ALLOCATION_TYPE_DEDICATED,
+ };
+
+ // This struct is allocated using VmaPoolAllocator.
+ VmaAllocation_T(bool userDataString, bool mappingAllowed);
+ ~VmaAllocation_T();
+
+ void InitBlockAllocation(
+ VmaDeviceMemoryBlock* block,
+ VmaAllocHandle allocHandle,
+ VkDeviceSize alignment,
+ VkDeviceSize size,
+ uint32_t memoryTypeIndex,
+ VmaSuballocationType suballocationType,
+ bool mapped);
+ // pMappedData not null means allocation is created with MAPPED flag.
+ void InitDedicatedAllocation(
+ VmaPool hParentPool,
+ uint32_t memoryTypeIndex,
+ VkDeviceMemory hMemory,
+ VmaSuballocationType suballocationType,
+ void* pMappedData,
+ VkDeviceSize size);
- json.WriteString("CreationFrameIndex");
- json.WriteNumber(m_CreationFrameIndex);
+ ALLOCATION_TYPE GetType() const { return (ALLOCATION_TYPE)m_Type; }
+ VkDeviceSize GetAlignment() const { return m_Alignment; }
+ VkDeviceSize GetSize() const { return m_Size; }
+ bool IsUserDataString() const { return (m_Flags & FLAG_USER_DATA_STRING) != 0; }
+ void* GetUserData() const { return m_pUserData; }
+ VmaSuballocationType GetSuballocationType() const { return (VmaSuballocationType)m_SuballocationType; }
- json.WriteString("LastUseFrameIndex");
- json.WriteNumber(GetLastUseFrameIndex());
+ VmaDeviceMemoryBlock* GetBlock() const { VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK); return m_BlockAllocation.m_Block; }
+ uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
+ bool IsPersistentMap() const { return (m_Flags & FLAG_PERSISTENT_MAP) != 0; }
+ bool IsMappingAllowed() const { return (m_Flags & FLAG_MAPPING_ALLOWED) != 0; }
- if(m_BufferImageUsage != 0)
+ void SetUserData(VmaAllocator hAllocator, void* pUserData);
+ void SwapBlockAllocation(VmaAllocation allocation);
+ VmaAllocHandle GetAllocHandle() const;
+ VkDeviceSize GetOffset() const;
+ VmaPool GetParentPool() const;
+ VkDeviceMemory GetMemory() const;
+ void* GetMappedData() const;
+
+ void BlockAllocMap();
+ void BlockAllocUnmap();
+ VkResult DedicatedAllocMap(VmaAllocator hAllocator, void** ppData);
+ void DedicatedAllocUnmap(VmaAllocator hAllocator);
+
+#if VMA_STATS_STRING_ENABLED
+ uint32_t GetBufferImageUsage() const { return m_BufferImageUsage; }
+
+ void InitBufferImageUsage(uint32_t bufferImageUsage);
+ void PrintParameters(class VmaJsonWriter& json) const;
+#endif
+
+private:
+ // Allocation out of VmaDeviceMemoryBlock.
+ struct BlockAllocation
{
- json.WriteString("Usage");
- json.WriteNumber(m_BufferImageUsage);
- }
-}
+ VmaDeviceMemoryBlock* m_Block;
+ VmaAllocHandle m_AllocHandle;
+ };
+ // Allocation for an object that has its own private VkDeviceMemory.
+ struct DedicatedAllocation
+ {
+ VmaPool m_hParentPool; // VK_NULL_HANDLE if not belongs to custom pool.
+ VkDeviceMemory m_hMemory;
+ void* m_pMappedData; // Not null means memory is mapped.
+ VmaAllocation_T* m_Prev;
+ VmaAllocation_T* m_Next;
+ };
+ union
+ {
+ // Allocation out of VmaDeviceMemoryBlock.
+ BlockAllocation m_BlockAllocation;
+ // Allocation for an object that has its own private VkDeviceMemory.
+ DedicatedAllocation m_DedicatedAllocation;
+ };
+ VkDeviceSize m_Alignment;
+ VkDeviceSize m_Size;
+ void* m_pUserData;
+ uint32_t m_MemoryTypeIndex;
+ uint8_t m_Type; // ALLOCATION_TYPE
+ uint8_t m_SuballocationType; // VmaSuballocationType
+ // Reference counter for vmaMapMemory()/vmaUnmapMemory().
+ uint8_t m_MapCount;
+ uint8_t m_Flags; // enum FLAGS
+#if VMA_STATS_STRING_ENABLED
+ uint32_t m_BufferImageUsage; // 0 if unknown.
#endif
-void VmaAllocation_T::FreeUserDataString(VmaAllocator hAllocator)
-{
- VMA_ASSERT(IsUserDataString());
- VmaFreeString(hAllocator->GetAllocationCallbacks(), (char*)m_pUserData);
- m_pUserData = VMA_NULL;
-}
+ void FreeUserDataString(VmaAllocator hAllocator);
+};
+#endif // _VMA_ALLOCATION_T
-void VmaAllocation_T::BlockAllocMap()
+#ifndef _VMA_DEDICATED_ALLOCATION_LIST_ITEM_TRAITS
+struct VmaDedicatedAllocationListItemTraits
{
- VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
+ typedef VmaAllocation_T ItemType;
- if((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) < 0x7F)
+ static ItemType* GetPrev(const ItemType* item)
{
- ++m_MapCount;
+ VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
+ return item->m_DedicatedAllocation.m_Prev;
}
- else
+ static ItemType* GetNext(const ItemType* item)
{
- VMA_ASSERT(0 && "Allocation mapped too many times simultaneously.");
+ VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
+ return item->m_DedicatedAllocation.m_Next;
}
-}
-
-void VmaAllocation_T::BlockAllocUnmap()
-{
- VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
-
- if((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) != 0)
+ static ItemType*& AccessPrev(ItemType* item)
{
- --m_MapCount;
+ VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
+ return item->m_DedicatedAllocation.m_Prev;
}
- else
+ static ItemType*& AccessNext(ItemType* item)
{
- VMA_ASSERT(0 && "Unmapping allocation not previously mapped.");
+ VMA_HEAVY_ASSERT(item->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
+ return item->m_DedicatedAllocation.m_Next;
}
-}
+};
+#endif // _VMA_DEDICATED_ALLOCATION_LIST_ITEM_TRAITS
-VkResult VmaAllocation_T::DedicatedAllocMap(VmaAllocator hAllocator, void** ppData)
+#ifndef _VMA_DEDICATED_ALLOCATION_LIST
+/*
+Stores linked list of VmaAllocation_T objects.
+Thread-safe, synchronized internally.
+*/
+class VmaDedicatedAllocationList
{
- VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
+public:
+ VmaDedicatedAllocationList() {}
+ ~VmaDedicatedAllocationList();
+
+ void Init(bool useMutex) { m_UseMutex = useMutex; }
+ bool Validate();
+
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats);
+ void AddStatistics(VmaStatistics& inoutStats);
+#if VMA_STATS_STRING_ENABLED
+ // Writes JSON array with the list of allocations.
+ void BuildStatsString(VmaJsonWriter& json);
+#endif
+
+ bool IsEmpty();
+ void Register(VmaAllocation alloc);
+ void Unregister(VmaAllocation alloc);
+
+private:
+ typedef VmaIntrusiveLinkedList<VmaDedicatedAllocationListItemTraits> DedicatedAllocationLinkedList;
+
+ bool m_UseMutex = true;
+ VMA_RW_MUTEX m_Mutex;
+ DedicatedAllocationLinkedList m_AllocationList;
+};
+
+#ifndef _VMA_DEDICATED_ALLOCATION_LIST_FUNCTIONS
- if(m_MapCount != 0)
+VmaDedicatedAllocationList::~VmaDedicatedAllocationList()
+{
+ VMA_HEAVY_ASSERT(Validate());
+
+ if (!m_AllocationList.IsEmpty())
{
- if((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) < 0x7F)
- {
- VMA_ASSERT(m_DedicatedAllocation.m_pMappedData != VMA_NULL);
- *ppData = m_DedicatedAllocation.m_pMappedData;
- ++m_MapCount;
- return VK_SUCCESS;
- }
- else
- {
- VMA_ASSERT(0 && "Dedicated allocation mapped too many times simultaneously.");
- return VK_ERROR_MEMORY_MAP_FAILED;
- }
+ VMA_ASSERT(false && "Unfreed dedicated allocations found!");
}
- else
+}
+
+bool VmaDedicatedAllocationList::Validate()
+{
+ const size_t declaredCount = m_AllocationList.GetCount();
+ size_t actualCount = 0;
+ VmaMutexLockRead lock(m_Mutex, m_UseMutex);
+ for (VmaAllocation alloc = m_AllocationList.Front();
+ alloc != VMA_NULL; alloc = m_AllocationList.GetNext(alloc))
{
- VkResult result = (*hAllocator->GetVulkanFunctions().vkMapMemory)(
- hAllocator->m_hDevice,
- m_DedicatedAllocation.m_hMemory,
- 0, // offset
- VK_WHOLE_SIZE,
- 0, // flags
- ppData);
- if(result == VK_SUCCESS)
- {
- m_DedicatedAllocation.m_pMappedData = *ppData;
- m_MapCount = 1;
- }
- return result;
+ ++actualCount;
}
+ VMA_VALIDATE(actualCount == declaredCount);
+
+ return true;
}
-void VmaAllocation_T::DedicatedAllocUnmap(VmaAllocator hAllocator)
+void VmaDedicatedAllocationList::AddDetailedStatistics(VmaDetailedStatistics& inoutStats)
{
- VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
-
- if((m_MapCount & ~MAP_COUNT_FLAG_PERSISTENT_MAP) != 0)
+ for(auto* item = m_AllocationList.Front(); item != nullptr; item = DedicatedAllocationLinkedList::GetNext(item))
{
- --m_MapCount;
- if(m_MapCount == 0)
- {
- m_DedicatedAllocation.m_pMappedData = VMA_NULL;
- (*hAllocator->GetVulkanFunctions().vkUnmapMemory)(
- hAllocator->m_hDevice,
- m_DedicatedAllocation.m_hMemory);
- }
+ const VkDeviceSize size = item->GetSize();
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += size;
+ VmaAddDetailedStatisticsAllocation(inoutStats, item->GetSize());
}
- else
+}
+
+void VmaDedicatedAllocationList::AddStatistics(VmaStatistics& inoutStats)
+{
+ VmaMutexLockRead lock(m_Mutex, m_UseMutex);
+
+ const uint32_t allocCount = (uint32_t)m_AllocationList.GetCount();
+ inoutStats.blockCount += allocCount;
+ inoutStats.allocationCount += allocCount;
+
+ for(auto* item = m_AllocationList.Front(); item != nullptr; item = DedicatedAllocationLinkedList::GetNext(item))
{
- VMA_ASSERT(0 && "Unmapping dedicated allocation not previously mapped.");
+ const VkDeviceSize size = item->GetSize();
+ inoutStats.blockBytes += size;
+ inoutStats.allocationBytes += size;
}
}
#if VMA_STATS_STRING_ENABLED
-
-static void VmaPrintStatInfo(VmaJsonWriter& json, const VmaStatInfo& stat)
+void VmaDedicatedAllocationList::BuildStatsString(VmaJsonWriter& json)
{
- json.BeginObject();
-
- json.WriteString("Blocks");
- json.WriteNumber(stat.blockCount);
+ VmaMutexLockRead lock(m_Mutex, m_UseMutex);
+ json.BeginArray();
+ for (VmaAllocation alloc = m_AllocationList.Front();
+ alloc != VMA_NULL; alloc = m_AllocationList.GetNext(alloc))
+ {
+ json.BeginObject(true);
+ alloc->PrintParameters(json);
+ json.EndObject();
+ }
+ json.EndArray();
+}
+#endif // VMA_STATS_STRING_ENABLED
- json.WriteString("Allocations");
- json.WriteNumber(stat.allocationCount);
+bool VmaDedicatedAllocationList::IsEmpty()
+{
+ VmaMutexLockRead lock(m_Mutex, m_UseMutex);
+ return m_AllocationList.IsEmpty();
+}
- json.WriteString("UnusedRanges");
- json.WriteNumber(stat.unusedRangeCount);
+void VmaDedicatedAllocationList::Register(VmaAllocation alloc)
+{
+ VmaMutexLockWrite lock(m_Mutex, m_UseMutex);
+ m_AllocationList.PushBack(alloc);
+}
- json.WriteString("UsedBytes");
- json.WriteNumber(stat.usedBytes);
+void VmaDedicatedAllocationList::Unregister(VmaAllocation alloc)
+{
+ VmaMutexLockWrite lock(m_Mutex, m_UseMutex);
+ m_AllocationList.Remove(alloc);
+}
+#endif // _VMA_DEDICATED_ALLOCATION_LIST_FUNCTIONS
+#endif // _VMA_DEDICATED_ALLOCATION_LIST
- json.WriteString("UnusedBytes");
- json.WriteNumber(stat.unusedBytes);
+#ifndef _VMA_SUBALLOCATION
+/*
+Represents a region of VmaDeviceMemoryBlock that is either assigned and returned as
+allocated memory block or free.
+*/
+struct VmaSuballocation
+{
+ VkDeviceSize offset;
+ VkDeviceSize size;
+ void* userData;
+ VmaSuballocationType type;
+};
- if(stat.allocationCount > 1)
+// Comparator for offsets.
+struct VmaSuballocationOffsetLess
+{
+ bool operator()(const VmaSuballocation& lhs, const VmaSuballocation& rhs) const
{
- json.WriteString("AllocationSize");
- json.BeginObject(true);
- json.WriteString("Min");
- json.WriteNumber(stat.allocationSizeMin);
- json.WriteString("Avg");
- json.WriteNumber(stat.allocationSizeAvg);
- json.WriteString("Max");
- json.WriteNumber(stat.allocationSizeMax);
- json.EndObject();
+ return lhs.offset < rhs.offset;
}
+};
- if(stat.unusedRangeCount > 1)
+struct VmaSuballocationOffsetGreater
+{
+ bool operator()(const VmaSuballocation& lhs, const VmaSuballocation& rhs) const
{
- json.WriteString("UnusedRangeSize");
- json.BeginObject(true);
- json.WriteString("Min");
- json.WriteNumber(stat.unusedRangeSizeMin);
- json.WriteString("Avg");
- json.WriteNumber(stat.unusedRangeSizeAvg);
- json.WriteString("Max");
- json.WriteNumber(stat.unusedRangeSizeMax);
- json.EndObject();
+ return lhs.offset > rhs.offset;
}
-
- json.EndObject();
-}
-
-#endif // #if VMA_STATS_STRING_ENABLED
+};
struct VmaSuballocationItemSizeLess
{
- bool operator()(
- const VmaSuballocationList::iterator lhs,
+ bool operator()(const VmaSuballocationList::iterator lhs,
const VmaSuballocationList::iterator rhs) const
{
return lhs->size < rhs->size;
}
- bool operator()(
- const VmaSuballocationList::iterator lhs,
+
+ bool operator()(const VmaSuballocationList::iterator lhs,
VkDeviceSize rhsSize) const
{
return lhs->size < rhsSize;
}
};
+#endif // _VMA_SUBALLOCATION
+
+#ifndef _VMA_ALLOCATION_REQUEST
+/*
+Parameters of planned allocation inside a VmaDeviceMemoryBlock.
+item points to a FREE suballocation.
+*/
+struct VmaAllocationRequest
+{
+ VmaAllocHandle allocHandle;
+ VkDeviceSize size;
+ VmaSuballocationList::iterator item;
+ void* customData;
+ uint64_t algorithmData;
+ VmaAllocationRequestType type;
+};
+#endif // _VMA_ALLOCATION_REQUEST
+#ifndef _VMA_BLOCK_METADATA
+/*
+Data structure used for bookkeeping of allocations and unused ranges of memory
+in a single VkDeviceMemory block.
+*/
+class VmaBlockMetadata
+{
+public:
+ // pAllocationCallbacks, if not null, must be owned externally - alive and unchanged for the whole lifetime of this object.
+ VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
+ virtual ~VmaBlockMetadata() = default;
-////////////////////////////////////////////////////////////////////////////////
-// class VmaBlockMetadata
+ virtual void Init(VkDeviceSize size) { m_Size = size; }
+ bool IsVirtual() const { return m_IsVirtual; }
+ VkDeviceSize GetSize() const { return m_Size; }
-VmaBlockMetadata::VmaBlockMetadata(VmaAllocator hAllocator) :
- m_Size(0),
- m_pAllocationCallbacks(hAllocator->GetAllocationCallbacks())
+ // Validates all data structures inside this object. If not valid, returns false.
+ virtual bool Validate() const = 0;
+ virtual size_t GetAllocationCount() const = 0;
+ virtual VkDeviceSize GetSumFreeSize() const = 0;
+ // Returns true if this block is empty - contains only single free suballocation.
+ virtual bool IsEmpty() const = 0;
+ virtual void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) = 0;
+ virtual VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const = 0;
+ virtual void* GetAllocationUserData(VmaAllocHandle allocHandle) const = 0;
+
+ virtual VmaAllocHandle GetAllocationListBegin() const = 0;
+ virtual VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const = 0;
+
+ // Shouldn't modify blockCount.
+ virtual void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const = 0;
+ virtual void AddStatistics(VmaStatistics& inoutStats) const = 0;
+
+#if VMA_STATS_STRING_ENABLED
+ // mapRefCount == UINT32_MAX means unspecified.
+ virtual void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const = 0;
+#endif
+
+ // Tries to find a place for suballocation with given parameters inside this block.
+ // If succeeded, fills pAllocationRequest and returns true.
+ // If failed, returns false.
+ virtual bool CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ // Always one of VMA_ALLOCATION_CREATE_STRATEGY_* or VMA_ALLOCATION_INTERNAL_STRATEGY_* flags.
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest) = 0;
+
+ virtual VkResult CheckCorruption(const void* pBlockData) = 0;
+
+ // Makes actual allocation based on request. Request must already be checked and valid.
+ virtual void Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData) = 0;
+
+ // Frees suballocation assigned to given memory region.
+ virtual void Free(VmaAllocHandle allocHandle) = 0;
+
+ // Frees all allocations.
+ // Careful! Don't call it if there are VmaAllocation objects owned by userData of cleared allocations!
+ virtual void Clear() = 0;
+
+ virtual void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) = 0;
+ virtual void DebugLogAllAllocations() const = 0;
+
+protected:
+ const VkAllocationCallbacks* GetAllocationCallbacks() const { return m_pAllocationCallbacks; }
+ VkDeviceSize GetBufferImageGranularity() const { return m_BufferImageGranularity; }
+ VkDeviceSize GetDebugMargin() const { return IsVirtual() ? 0 : VMA_DEBUG_MARGIN; }
+
+ void DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size, void* userData) const;
+#if VMA_STATS_STRING_ENABLED
+ // mapRefCount == UINT32_MAX means unspecified.
+ void PrintDetailedMap_Begin(class VmaJsonWriter& json,
+ VkDeviceSize unusedBytes,
+ size_t allocationCount,
+ size_t unusedRangeCount,
+ uint32_t mapRefCount) const;
+ void PrintDetailedMap_Allocation(class VmaJsonWriter& json,
+ VkDeviceSize offset, VkDeviceSize size, void* userData) const;
+ void PrintDetailedMap_UnusedRange(class VmaJsonWriter& json,
+ VkDeviceSize offset,
+ VkDeviceSize size) const;
+ void PrintDetailedMap_End(class VmaJsonWriter& json) const;
+#endif
+
+private:
+ VkDeviceSize m_Size;
+ const VkAllocationCallbacks* m_pAllocationCallbacks;
+ const VkDeviceSize m_BufferImageGranularity;
+ const bool m_IsVirtual;
+};
+
+#ifndef _VMA_BLOCK_METADATA_FUNCTIONS
+VmaBlockMetadata::VmaBlockMetadata(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : m_Size(0),
+ m_pAllocationCallbacks(pAllocationCallbacks),
+ m_BufferImageGranularity(bufferImageGranularity),
+ m_IsVirtual(isVirtual) {}
+
+void VmaBlockMetadata::DebugLogAllocation(VkDeviceSize offset, VkDeviceSize size, void* userData) const
{
-}
+ if (IsVirtual())
+ {
+ VMA_DEBUG_LOG("UNFREED VIRTUAL ALLOCATION; Offset: %llu; Size: %llu; UserData: %p", offset, size, userData);
+ }
+ else
+ {
+ VMA_ASSERT(userData != VMA_NULL);
+ VmaAllocation allocation = reinterpret_cast<VmaAllocation>(userData);
+
+ userData = allocation->GetUserData();
#if VMA_STATS_STRING_ENABLED
+ if (userData != VMA_NULL && allocation->IsUserDataString())
+ {
+ VMA_DEBUG_LOG("UNFREED ALLOCATION; Offset: %llu; Size: %llu; UserData: %s; Type: %s; Usage: %u",
+ offset, size, reinterpret_cast<const char*>(userData),
+ VMA_SUBALLOCATION_TYPE_NAMES[allocation->GetSuballocationType()],
+ allocation->GetBufferImageUsage());
+ }
+ else
+ {
+ VMA_DEBUG_LOG("UNFREED ALLOCATION; Offset: %llu; Size: %llu; UserData: %p; Type: %s; Usage: %u",
+ offset, size, userData,
+ VMA_SUBALLOCATION_TYPE_NAMES[allocation->GetSuballocationType()],
+ allocation->GetBufferImageUsage());
+ }
+#else
+ if (userData != VMA_NULL && allocation->IsUserDataString())
+ {
+ VMA_DEBUG_LOG("UNFREED ALLOCATION; Offset: %llu; Size: %llu; UserData: %s; Type: %u",
+ offset, size, reinterpret_cast<const char*>(userData),
+ (uint32_t)allocation->GetSuballocationType());
+ }
+ else
+ {
+ VMA_DEBUG_LOG("UNFREED ALLOCATION; Offset: %llu; Size: %llu; UserData: %p; Type: %u",
+ offset, size, userData,
+ (uint32_t)allocation->GetSuballocationType());
+ }
+#endif // VMA_STATS_STRING_ENABLED
+ }
+
+}
+#if VMA_STATS_STRING_ENABLED
void VmaBlockMetadata::PrintDetailedMap_Begin(class VmaJsonWriter& json,
- VkDeviceSize unusedBytes,
- size_t allocationCount,
- size_t unusedRangeCount) const
+ VkDeviceSize unusedBytes, size_t allocationCount, size_t unusedRangeCount, uint32_t mapRefCount) const
{
json.BeginObject();
@@ -9329,27 +6388,50 @@ void VmaBlockMetadata::PrintDetailedMap_Begin(class VmaJsonWriter& json,
json.WriteString("UnusedRanges");
json.WriteNumber((uint64_t)unusedRangeCount);
+ if(mapRefCount != UINT32_MAX)
+ {
+ json.WriteString("MapRefCount");
+ json.WriteNumber(mapRefCount);
+ }
+
json.WriteString("Suballocations");
json.BeginArray();
}
void VmaBlockMetadata::PrintDetailedMap_Allocation(class VmaJsonWriter& json,
- VkDeviceSize offset,
- VmaAllocation hAllocation) const
+ VkDeviceSize offset, VkDeviceSize size, void* userData) const
{
json.BeginObject(true);
json.WriteString("Offset");
json.WriteNumber(offset);
- hAllocation->PrintParameters(json);
+ if (IsVirtual())
+ {
+ json.WriteString("Type");
+ json.WriteString("VirtualAllocation");
+
+ json.WriteString("Size");
+ json.WriteNumber(size);
+
+ if (userData != VMA_NULL)
+ {
+ json.WriteString("UserData");
+ json.BeginString();
+ json.ContinueString_Pointer(userData);
+ json.EndString();
+ }
+ }
+ else
+ {
+ ((VmaAllocation)userData)->PrintParameters(json);
+ }
json.EndObject();
}
void VmaBlockMetadata::PrintDetailedMap_UnusedRange(class VmaJsonWriter& json,
- VkDeviceSize offset,
- VkDeviceSize size) const
+ VkDeviceSize offset, VkDeviceSize size) const
{
json.BeginObject(true);
@@ -9370,24 +6452,339 @@ void VmaBlockMetadata::PrintDetailedMap_End(class VmaJsonWriter& json) const
json.EndArray();
json.EndObject();
}
+#endif // VMA_STATS_STRING_ENABLED
+#endif // _VMA_BLOCK_METADATA_FUNCTIONS
+#endif // _VMA_BLOCK_METADATA
-#endif // #if VMA_STATS_STRING_ENABLED
+#ifndef _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY
+// Before deleting object of this class remember to call 'Destroy()'
+class VmaBlockBufferImageGranularity final
+{
+public:
+ struct ValidationContext
+ {
+ const VkAllocationCallbacks* allocCallbacks;
+ uint16_t* pageAllocs;
+ };
-////////////////////////////////////////////////////////////////////////////////
-// class VmaBlockMetadata_Generic
+ VmaBlockBufferImageGranularity(VkDeviceSize bufferImageGranularity);
+ ~VmaBlockBufferImageGranularity();
-VmaBlockMetadata_Generic::VmaBlockMetadata_Generic(VmaAllocator hAllocator) :
- VmaBlockMetadata(hAllocator),
- m_FreeCount(0),
- m_SumFreeSize(0),
- m_Suballocations(VmaStlAllocator<VmaSuballocation>(hAllocator->GetAllocationCallbacks())),
- m_FreeSuballocationsBySize(VmaStlAllocator<VmaSuballocationList::iterator>(hAllocator->GetAllocationCallbacks()))
+ bool IsEnabled() const { return m_BufferImageGranularity > MAX_LOW_BUFFER_IMAGE_GRANULARITY; }
+
+ void Init(const VkAllocationCallbacks* pAllocationCallbacks, VkDeviceSize size);
+ // Before destroying object you must call free it's memory
+ void Destroy(const VkAllocationCallbacks* pAllocationCallbacks);
+
+ void RoundupAllocRequest(VmaSuballocationType allocType,
+ VkDeviceSize& inOutAllocSize,
+ VkDeviceSize& inOutAllocAlignment) const;
+
+ bool CheckConflictAndAlignUp(VkDeviceSize& inOutAllocOffset,
+ VkDeviceSize allocSize,
+ VkDeviceSize blockOffset,
+ VkDeviceSize blockSize,
+ VmaSuballocationType allocType) const;
+
+ void AllocPages(uint8_t allocType, VkDeviceSize offset, VkDeviceSize size);
+ void FreePages(VkDeviceSize offset, VkDeviceSize size);
+ void Clear();
+
+ ValidationContext StartValidation(const VkAllocationCallbacks* pAllocationCallbacks,
+ bool isVirutal) const;
+ bool Validate(ValidationContext& ctx, VkDeviceSize offset, VkDeviceSize size) const;
+ bool FinishValidation(ValidationContext& ctx) const;
+
+private:
+ static const uint16_t MAX_LOW_BUFFER_IMAGE_GRANULARITY = 256;
+
+ struct RegionInfo
+ {
+ uint8_t allocType;
+ uint16_t allocCount;
+ };
+
+ VkDeviceSize m_BufferImageGranularity;
+ uint32_t m_RegionCount;
+ RegionInfo* m_RegionInfo;
+
+ uint32_t GetStartPage(VkDeviceSize offset) const { return OffsetToPageIndex(offset & ~(m_BufferImageGranularity - 1)); }
+ uint32_t GetEndPage(VkDeviceSize offset, VkDeviceSize size) const { return OffsetToPageIndex((offset + size - 1) & ~(m_BufferImageGranularity - 1)); }
+
+ uint32_t OffsetToPageIndex(VkDeviceSize offset) const;
+ void AllocPage(RegionInfo& page, uint8_t allocType);
+};
+
+#ifndef _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS
+VmaBlockBufferImageGranularity::VmaBlockBufferImageGranularity(VkDeviceSize bufferImageGranularity)
+ : m_BufferImageGranularity(bufferImageGranularity),
+ m_RegionCount(0),
+ m_RegionInfo(VMA_NULL) {}
+
+VmaBlockBufferImageGranularity::~VmaBlockBufferImageGranularity()
+{
+ VMA_ASSERT(m_RegionInfo == VMA_NULL && "Free not called before destroying object!");
+}
+
+void VmaBlockBufferImageGranularity::Init(const VkAllocationCallbacks* pAllocationCallbacks, VkDeviceSize size)
+{
+ if (IsEnabled())
+ {
+ m_RegionCount = static_cast<uint32_t>(VmaDivideRoundingUp(size, m_BufferImageGranularity));
+ m_RegionInfo = vma_new_array(pAllocationCallbacks, RegionInfo, m_RegionCount);
+ memset(m_RegionInfo, 0, m_RegionCount * sizeof(RegionInfo));
+ }
+}
+
+void VmaBlockBufferImageGranularity::Destroy(const VkAllocationCallbacks* pAllocationCallbacks)
+{
+ if (m_RegionInfo)
+ {
+ vma_delete_array(pAllocationCallbacks, m_RegionInfo, m_RegionCount);
+ m_RegionInfo = VMA_NULL;
+ }
+}
+
+void VmaBlockBufferImageGranularity::RoundupAllocRequest(VmaSuballocationType allocType,
+ VkDeviceSize& inOutAllocSize,
+ VkDeviceSize& inOutAllocAlignment) const
+{
+ if (m_BufferImageGranularity > 1 &&
+ m_BufferImageGranularity <= MAX_LOW_BUFFER_IMAGE_GRANULARITY)
+ {
+ if (allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN ||
+ allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||
+ allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)
+ {
+ inOutAllocAlignment = VMA_MAX(inOutAllocAlignment, m_BufferImageGranularity);
+ inOutAllocSize = VmaAlignUp(inOutAllocSize, m_BufferImageGranularity);
+ }
+ }
+}
+
+bool VmaBlockBufferImageGranularity::CheckConflictAndAlignUp(VkDeviceSize& inOutAllocOffset,
+ VkDeviceSize allocSize,
+ VkDeviceSize blockOffset,
+ VkDeviceSize blockSize,
+ VmaSuballocationType allocType) const
+{
+ if (IsEnabled())
+ {
+ uint32_t startPage = GetStartPage(inOutAllocOffset);
+ if (m_RegionInfo[startPage].allocCount > 0 &&
+ VmaIsBufferImageGranularityConflict(static_cast<VmaSuballocationType>(m_RegionInfo[startPage].allocType), allocType))
+ {
+ inOutAllocOffset = VmaAlignUp(inOutAllocOffset, m_BufferImageGranularity);
+ if (blockSize < allocSize + inOutAllocOffset - blockOffset)
+ return true;
+ ++startPage;
+ }
+ uint32_t endPage = GetEndPage(inOutAllocOffset, allocSize);
+ if (endPage != startPage &&
+ m_RegionInfo[endPage].allocCount > 0 &&
+ VmaIsBufferImageGranularityConflict(static_cast<VmaSuballocationType>(m_RegionInfo[endPage].allocType), allocType))
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
+void VmaBlockBufferImageGranularity::AllocPages(uint8_t allocType, VkDeviceSize offset, VkDeviceSize size)
+{
+ if (IsEnabled())
+ {
+ uint32_t startPage = GetStartPage(offset);
+ AllocPage(m_RegionInfo[startPage], allocType);
+
+ uint32_t endPage = GetEndPage(offset, size);
+ if (startPage != endPage)
+ AllocPage(m_RegionInfo[endPage], allocType);
+ }
+}
+
+void VmaBlockBufferImageGranularity::FreePages(VkDeviceSize offset, VkDeviceSize size)
+{
+ if (IsEnabled())
+ {
+ uint32_t startPage = GetStartPage(offset);
+ --m_RegionInfo[startPage].allocCount;
+ if (m_RegionInfo[startPage].allocCount == 0)
+ m_RegionInfo[startPage].allocType = VMA_SUBALLOCATION_TYPE_FREE;
+ uint32_t endPage = GetEndPage(offset, size);
+ if (startPage != endPage)
+ {
+ --m_RegionInfo[endPage].allocCount;
+ if (m_RegionInfo[endPage].allocCount == 0)
+ m_RegionInfo[endPage].allocType = VMA_SUBALLOCATION_TYPE_FREE;
+ }
+ }
+}
+
+void VmaBlockBufferImageGranularity::Clear()
+{
+ if (m_RegionInfo)
+ memset(m_RegionInfo, 0, m_RegionCount * sizeof(RegionInfo));
+}
+
+VmaBlockBufferImageGranularity::ValidationContext VmaBlockBufferImageGranularity::StartValidation(
+ const VkAllocationCallbacks* pAllocationCallbacks, bool isVirutal) const
+{
+ ValidationContext ctx{ pAllocationCallbacks, VMA_NULL };
+ if (!isVirutal && IsEnabled())
+ {
+ ctx.pageAllocs = vma_new_array(pAllocationCallbacks, uint16_t, m_RegionCount);
+ memset(ctx.pageAllocs, 0, m_RegionCount * sizeof(uint16_t));
+ }
+ return ctx;
+}
+
+bool VmaBlockBufferImageGranularity::Validate(ValidationContext& ctx,
+ VkDeviceSize offset, VkDeviceSize size) const
+{
+ if (IsEnabled())
+ {
+ uint32_t start = GetStartPage(offset);
+ ++ctx.pageAllocs[start];
+ VMA_VALIDATE(m_RegionInfo[start].allocCount > 0);
+
+ uint32_t end = GetEndPage(offset, size);
+ if (start != end)
+ {
+ ++ctx.pageAllocs[end];
+ VMA_VALIDATE(m_RegionInfo[end].allocCount > 0);
+ }
+ }
+ return true;
+}
+
+bool VmaBlockBufferImageGranularity::FinishValidation(ValidationContext& ctx) const
+{
+ // Check proper page structure
+ if (IsEnabled())
+ {
+ VMA_ASSERT(ctx.pageAllocs != VMA_NULL && "Validation context not initialized!");
+
+ for (uint32_t page = 0; page < m_RegionCount; ++page)
+ {
+ VMA_VALIDATE(ctx.pageAllocs[page] == m_RegionInfo[page].allocCount);
+ }
+ vma_delete_array(ctx.allocCallbacks, ctx.pageAllocs, m_RegionCount);
+ ctx.pageAllocs = VMA_NULL;
+ }
+ return true;
+}
+
+uint32_t VmaBlockBufferImageGranularity::OffsetToPageIndex(VkDeviceSize offset) const
{
+ return static_cast<uint32_t>(offset >> VMA_BITSCAN_MSB(m_BufferImageGranularity));
}
-VmaBlockMetadata_Generic::~VmaBlockMetadata_Generic()
+void VmaBlockBufferImageGranularity::AllocPage(RegionInfo& page, uint8_t allocType)
{
+ // When current alloc type is free then it can be overriden by new type
+ if (page.allocCount == 0 || (page.allocCount > 0 && page.allocType == VMA_SUBALLOCATION_TYPE_FREE))
+ page.allocType = allocType;
+
+ ++page.allocCount;
}
+#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY_FUNCTIONS
+#endif // _VMA_BLOCK_BUFFER_IMAGE_GRANULARITY
+
+#if 0
+#ifndef _VMA_BLOCK_METADATA_GENERIC
+class VmaBlockMetadata_Generic : public VmaBlockMetadata
+{
+ friend class VmaDefragmentationAlgorithm_Generic;
+ friend class VmaDefragmentationAlgorithm_Fast;
+ VMA_CLASS_NO_COPY(VmaBlockMetadata_Generic)
+public:
+ VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
+ virtual ~VmaBlockMetadata_Generic() = default;
+
+ size_t GetAllocationCount() const override { return m_Suballocations.size() - m_FreeCount; }
+ VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize; }
+ bool IsEmpty() const override { return (m_Suballocations.size() == 1) && (m_FreeCount == 1); }
+ void Free(VmaAllocHandle allocHandle) override { FreeSuballocation(FindAtOffset((VkDeviceSize)allocHandle - 1)); }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle - 1; };
+
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
+
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
+
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
+#endif
+
+ bool CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest) override;
+
+ VkResult CheckCorruption(const void* pBlockData) override;
+
+ void Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData) override;
+
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
+ void DebugLogAllAllocations() const override;
+
+private:
+ uint32_t m_FreeCount;
+ VkDeviceSize m_SumFreeSize;
+ VmaSuballocationList m_Suballocations;
+ // Suballocations that are free. Sorted by size, ascending.
+ VmaVector<VmaSuballocationList::iterator, VmaStlAllocator<VmaSuballocationList::iterator>> m_FreeSuballocationsBySize;
+
+ VkDeviceSize AlignAllocationSize(VkDeviceSize size) const { return IsVirtual() ? size : VmaAlignUp(size, (VkDeviceSize)16); }
+
+ VmaSuballocationList::iterator FindAtOffset(VkDeviceSize offset) const;
+ bool ValidateFreeSuballocationList() const;
+
+ // Checks if requested suballocation with given parameters can be placed in given pFreeSuballocItem.
+ // If yes, fills pOffset and returns true. If no, returns false.
+ bool CheckAllocation(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ VmaSuballocationList::const_iterator suballocItem,
+ VmaAllocHandle* pAllocHandle) const;
+
+ // Given free suballocation, it merges it with following one, which must also be free.
+ void MergeFreeWithNext(VmaSuballocationList::iterator item);
+ // Releases given suballocation, making it free.
+ // Merges it with adjacent free suballocations if applicable.
+ // Returns iterator to new free suballocation at this place.
+ VmaSuballocationList::iterator FreeSuballocation(VmaSuballocationList::iterator suballocItem);
+ // Given free suballocation, it inserts it into sorted list of
+ // m_FreeSuballocationsBySize if it is suitable.
+ void RegisterFreeSuballocation(VmaSuballocationList::iterator item);
+ // Given free suballocation, it removes it from sorted list of
+ // m_FreeSuballocationsBySize if it is suitable.
+ void UnregisterFreeSuballocation(VmaSuballocationList::iterator item);
+};
+
+#ifndef _VMA_BLOCK_METADATA_GENERIC_FUNCTIONS
+VmaBlockMetadata_Generic::VmaBlockMetadata_Generic(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
+ m_FreeCount(0),
+ m_SumFreeSize(0),
+ m_Suballocations(VmaStlAllocator<VmaSuballocation>(pAllocationCallbacks)),
+ m_FreeSuballocationsBySize(VmaStlAllocator<VmaSuballocationList::iterator>(pAllocationCallbacks)) {}
void VmaBlockMetadata_Generic::Init(VkDeviceSize size)
{
@@ -9400,13 +6797,9 @@ void VmaBlockMetadata_Generic::Init(VkDeviceSize size)
suballoc.offset = 0;
suballoc.size = size;
suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
- suballoc.hAllocation = VK_NULL_HANDLE;
- VMA_ASSERT(size > VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER);
m_Suballocations.push_back(suballoc);
- VmaSuballocationList::iterator suballocItem = m_Suballocations.end();
- --suballocItem;
- m_FreeSuballocationsBySize.push_back(suballocItem);
+ m_FreeSuballocationsBySize.push_back(m_Suballocations.begin());
}
bool VmaBlockMetadata_Generic::Validate() const
@@ -9425,7 +6818,9 @@ bool VmaBlockMetadata_Generic::Validate() const
// True if previous visited suballocation was free.
bool prevFree = false;
- for(const auto& subAlloc : m_Suballocations)
+ const VkDeviceSize debugMargin = GetDebugMargin();
+
+ for (const auto& subAlloc : m_Suballocations)
{
// Actual offset of this suballocation doesn't match expected one.
VMA_VALIDATE(subAlloc.offset == calculatedOffset);
@@ -9434,27 +6829,31 @@ bool VmaBlockMetadata_Generic::Validate() const
// Two adjacent free suballocations are invalid. They should be merged.
VMA_VALIDATE(!prevFree || !currFree);
- VMA_VALIDATE(currFree == (subAlloc.hAllocation == VK_NULL_HANDLE));
+ VmaAllocation alloc = (VmaAllocation)subAlloc.userData;
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE));
+ }
- if(currFree)
+ if (currFree)
{
calculatedSumFreeSize += subAlloc.size;
++calculatedFreeCount;
- if(subAlloc.size >= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
- {
- ++freeSuballocationsToRegister;
- }
+ ++freeSuballocationsToRegister;
// Margin required between allocations - every free space must be at least that large.
- VMA_VALIDATE(subAlloc.size >= VMA_DEBUG_MARGIN);
+ VMA_VALIDATE(subAlloc.size >= debugMargin);
}
else
{
- VMA_VALIDATE(subAlloc.hAllocation->GetOffset() == subAlloc.offset);
- VMA_VALIDATE(subAlloc.hAllocation->GetSize() == subAlloc.size);
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == subAlloc.offset + 1);
+ VMA_VALIDATE(alloc->GetSize() == subAlloc.size);
+ }
// Margin required between allocations - previous allocation must be free.
- VMA_VALIDATE(VMA_DEBUG_MARGIN == 0 || prevFree);
+ VMA_VALIDATE(debugMargin == 0 || prevFree);
}
calculatedOffset += subAlloc.size;
@@ -9466,7 +6865,7 @@ bool VmaBlockMetadata_Generic::Validate() const
VMA_VALIDATE(m_FreeSuballocationsBySize.size() == freeSuballocationsToRegister);
VkDeviceSize lastSize = 0;
- for(size_t i = 0; i < m_FreeSuballocationsBySize.size(); ++i)
+ for (size_t i = 0; i < m_FreeSuballocationsBySize.size(); ++i)
{
VmaSuballocationList::iterator suballocItem = m_FreeSuballocationsBySize[i];
@@ -9487,101 +6886,59 @@ bool VmaBlockMetadata_Generic::Validate() const
return true;
}
-VkDeviceSize VmaBlockMetadata_Generic::GetUnusedRangeSizeMax() const
-{
- if(!m_FreeSuballocationsBySize.empty())
- {
- return m_FreeSuballocationsBySize.back()->size;
- }
- else
- {
- return 0;
- }
-}
-
-bool VmaBlockMetadata_Generic::IsEmpty() const
+void VmaBlockMetadata_Generic::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
- return (m_Suballocations.size() == 1) && (m_FreeCount == 1);
-}
-
-void VmaBlockMetadata_Generic::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
-{
- outInfo.blockCount = 1;
-
const uint32_t rangeCount = (uint32_t)m_Suballocations.size();
- outInfo.allocationCount = rangeCount - m_FreeCount;
- outInfo.unusedRangeCount = m_FreeCount;
-
- outInfo.unusedBytes = m_SumFreeSize;
- outInfo.usedBytes = GetSize() - outInfo.unusedBytes;
-
- outInfo.allocationSizeMin = UINT64_MAX;
- outInfo.allocationSizeMax = 0;
- outInfo.unusedRangeSizeMin = UINT64_MAX;
- outInfo.unusedRangeSizeMax = 0;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += GetSize();
- for(const auto& suballoc : m_Suballocations)
+ for (const auto& suballoc : m_Suballocations)
{
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
- {
- outInfo.allocationSizeMin = VMA_MIN(outInfo.allocationSizeMin, suballoc.size);
- outInfo.allocationSizeMax = VMA_MAX(outInfo.allocationSizeMax, suballoc.size);
- }
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
else
- {
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, suballoc.size);
- outInfo.unusedRangeSizeMax = VMA_MAX(outInfo.unusedRangeSizeMax, suballoc.size);
- }
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, suballoc.size);
}
}
-void VmaBlockMetadata_Generic::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_Generic::AddStatistics(VmaStatistics& inoutStats) const
{
- const uint32_t rangeCount = (uint32_t)m_Suballocations.size();
-
- inoutStats.size += GetSize();
- inoutStats.unusedSize += m_SumFreeSize;
- inoutStats.allocationCount += rangeCount - m_FreeCount;
- inoutStats.unusedRangeCount += m_FreeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, GetUnusedRangeSizeMax());
+ inoutStats.blockCount++;
+ inoutStats.allocationCount += (uint32_t)m_Suballocations.size() - m_FreeCount;
+ inoutStats.blockBytes += GetSize();
+ inoutStats.allocationBytes += GetSize() - m_SumFreeSize;
}
#if VMA_STATS_STRING_ENABLED
-
-void VmaBlockMetadata_Generic::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_Generic::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
PrintDetailedMap_Begin(json,
m_SumFreeSize, // unusedBytes
m_Suballocations.size() - (size_t)m_FreeCount, // allocationCount
- m_FreeCount); // unusedRangeCount
+ m_FreeCount, // unusedRangeCount
+ mapRefCount);
- size_t i = 0;
- for(const auto& suballoc : m_Suballocations)
+ for (const auto& suballoc : m_Suballocations)
{
- if(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)
+ if (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)
{
PrintDetailedMap_UnusedRange(json, suballoc.offset, suballoc.size);
}
else
{
- PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);
+ PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData);
}
}
PrintDetailedMap_End(json);
}
-
-#endif // #if VMA_STATS_STRING_ENABLED
+#endif // VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Generic::CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
- bool canMakeOtherLost,
uint32_t strategy,
VmaAllocationRequest* pAllocationRequest)
{
@@ -9591,92 +6948,77 @@ bool VmaBlockMetadata_Generic::CreateAllocationRequest(
VMA_ASSERT(pAllocationRequest != VMA_NULL);
VMA_HEAVY_ASSERT(Validate());
+ allocSize = AlignAllocationSize(allocSize);
+
pAllocationRequest->type = VmaAllocationRequestType::Normal;
+ pAllocationRequest->size = allocSize;
+
+ const VkDeviceSize debugMargin = GetDebugMargin();
- // There is not enough total free space in this block to fullfill the request: Early return.
- if(canMakeOtherLost == false &&
- m_SumFreeSize < allocSize + 2 * VMA_DEBUG_MARGIN)
+ // There is not enough total free space in this block to fulfill the request: Early return.
+ if (m_SumFreeSize < allocSize + debugMargin)
{
return false;
}
// New algorithm, efficiently searching freeSuballocationsBySize.
const size_t freeSuballocCount = m_FreeSuballocationsBySize.size();
- if(freeSuballocCount > 0)
+ if (freeSuballocCount > 0)
{
- if(strategy == VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT)
+ if (strategy == 0 ||
+ strategy == VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT)
{
- // Find first free suballocation with size not less than allocSize + 2 * VMA_DEBUG_MARGIN.
+ // Find first free suballocation with size not less than allocSize + debugMargin.
VmaSuballocationList::iterator* const it = VmaBinaryFindFirstNotLess(
m_FreeSuballocationsBySize.data(),
m_FreeSuballocationsBySize.data() + freeSuballocCount,
- allocSize + 2 * VMA_DEBUG_MARGIN,
+ allocSize + debugMargin,
VmaSuballocationItemSizeLess());
size_t index = it - m_FreeSuballocationsBySize.data();
- for(; index < freeSuballocCount; ++index)
+ for (; index < freeSuballocCount; ++index)
{
- if(CheckAllocation(
- currentFrameIndex,
- frameInUseCount,
- bufferImageGranularity,
+ if (CheckAllocation(
allocSize,
allocAlignment,
allocType,
m_FreeSuballocationsBySize[index],
- false, // canMakeOtherLost
- &pAllocationRequest->offset,
- &pAllocationRequest->itemsToMakeLostCount,
- &pAllocationRequest->sumFreeSize,
- &pAllocationRequest->sumItemSize))
+ &pAllocationRequest->allocHandle))
{
pAllocationRequest->item = m_FreeSuballocationsBySize[index];
return true;
}
}
}
- else if(strategy == VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET)
+ else if (strategy == VMA_ALLOCATION_INTERNAL_STRATEGY_MIN_OFFSET)
{
- for(VmaSuballocationList::iterator it = m_Suballocations.begin();
+ for (VmaSuballocationList::iterator it = m_Suballocations.begin();
it != m_Suballocations.end();
++it)
{
- if(it->type == VMA_SUBALLOCATION_TYPE_FREE && CheckAllocation(
- currentFrameIndex,
- frameInUseCount,
- bufferImageGranularity,
+ if (it->type == VMA_SUBALLOCATION_TYPE_FREE && CheckAllocation(
allocSize,
allocAlignment,
allocType,
it,
- false, // canMakeOtherLost
- &pAllocationRequest->offset,
- &pAllocationRequest->itemsToMakeLostCount,
- &pAllocationRequest->sumFreeSize,
- &pAllocationRequest->sumItemSize))
+ &pAllocationRequest->allocHandle))
{
pAllocationRequest->item = it;
return true;
}
}
}
- else // WORST_FIT, FIRST_FIT
+ else
{
+ VMA_ASSERT(strategy & (VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT | VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT ));
// Search staring from biggest suballocations.
- for(size_t index = freeSuballocCount; index--; )
+ for (size_t index = freeSuballocCount; index--; )
{
- if(CheckAllocation(
- currentFrameIndex,
- frameInUseCount,
- bufferImageGranularity,
+ if (CheckAllocation(
allocSize,
allocAlignment,
allocType,
m_FreeSuballocationsBySize[index],
- false, // canMakeOtherLost
- &pAllocationRequest->offset,
- &pAllocationRequest->itemsToMakeLostCount,
- &pAllocationRequest->sumFreeSize,
- &pAllocationRequest->sumItemSize))
+ &pAllocationRequest->allocHandle))
{
pAllocationRequest->item = m_FreeSuballocationsBySize[index];
return true;
@@ -9685,123 +7027,19 @@ bool VmaBlockMetadata_Generic::CreateAllocationRequest(
}
}
- if(canMakeOtherLost)
- {
- // Brute-force algorithm. TODO: Come up with something better.
-
- bool found = false;
- VmaAllocationRequest tmpAllocRequest = {};
- tmpAllocRequest.type = VmaAllocationRequestType::Normal;
- for(VmaSuballocationList::iterator suballocIt = m_Suballocations.begin();
- suballocIt != m_Suballocations.end();
- ++suballocIt)
- {
- if(suballocIt->type == VMA_SUBALLOCATION_TYPE_FREE ||
- suballocIt->hAllocation->CanBecomeLost())
- {
- if(CheckAllocation(
- currentFrameIndex,
- frameInUseCount,
- bufferImageGranularity,
- allocSize,
- allocAlignment,
- allocType,
- suballocIt,
- canMakeOtherLost,
- &tmpAllocRequest.offset,
- &tmpAllocRequest.itemsToMakeLostCount,
- &tmpAllocRequest.sumFreeSize,
- &tmpAllocRequest.sumItemSize))
- {
- if(strategy == VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT)
- {
- *pAllocationRequest = tmpAllocRequest;
- pAllocationRequest->item = suballocIt;
- break;
- }
- if(!found || tmpAllocRequest.CalcCost() < pAllocationRequest->CalcCost())
- {
- *pAllocationRequest = tmpAllocRequest;
- pAllocationRequest->item = suballocIt;
- found = true;
- }
- }
- }
- }
-
- return found;
- }
-
return false;
}
-bool VmaBlockMetadata_Generic::MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VmaAllocationRequest* pAllocationRequest)
-{
- VMA_ASSERT(pAllocationRequest && pAllocationRequest->type == VmaAllocationRequestType::Normal);
-
- while(pAllocationRequest->itemsToMakeLostCount > 0)
- {
- if(pAllocationRequest->item->type == VMA_SUBALLOCATION_TYPE_FREE)
- {
- ++pAllocationRequest->item;
- }
- VMA_ASSERT(pAllocationRequest->item != m_Suballocations.end());
- VMA_ASSERT(pAllocationRequest->item->hAllocation != VK_NULL_HANDLE);
- VMA_ASSERT(pAllocationRequest->item->hAllocation->CanBecomeLost());
- if(pAllocationRequest->item->hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
- {
- pAllocationRequest->item = FreeSuballocation(pAllocationRequest->item);
- --pAllocationRequest->itemsToMakeLostCount;
- }
- else
- {
- return false;
- }
- }
-
- VMA_HEAVY_ASSERT(Validate());
- VMA_ASSERT(pAllocationRequest->item != m_Suballocations.end());
- VMA_ASSERT(pAllocationRequest->item->type == VMA_SUBALLOCATION_TYPE_FREE);
-
- return true;
-}
-
-uint32_t VmaBlockMetadata_Generic::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
-{
- uint32_t lostAllocationCount = 0;
- for(VmaSuballocationList::iterator it = m_Suballocations.begin();
- it != m_Suballocations.end();
- ++it)
- {
- if(it->type != VMA_SUBALLOCATION_TYPE_FREE &&
- it->hAllocation->CanBecomeLost() &&
- it->hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
- {
- it = FreeSuballocation(it);
- ++lostAllocationCount;
- }
- }
- return lostAllocationCount;
-}
-
VkResult VmaBlockMetadata_Generic::CheckCorruption(const void* pBlockData)
{
- for(auto& suballoc : m_Suballocations)
+ for (auto& suballoc : m_Suballocations)
{
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
{
- if(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))
- {
- VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!");
- return VK_ERROR_VALIDATION_FAILED_EXT;
- }
- if(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
+ if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
{
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_VALIDATION_FAILED_EXT;
+ return VK_ERROR_UNKNOWN_COPY;
}
}
}
@@ -9812,34 +7050,34 @@ VkResult VmaBlockMetadata_Generic::CheckCorruption(const void* pBlockData)
void VmaBlockMetadata_Generic::Alloc(
const VmaAllocationRequest& request,
VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation)
+ void* userData)
{
VMA_ASSERT(request.type == VmaAllocationRequestType::Normal);
VMA_ASSERT(request.item != m_Suballocations.end());
VmaSuballocation& suballoc = *request.item;
// Given suballocation is a free block.
VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
+
// Given offset is inside this suballocation.
- VMA_ASSERT(request.offset >= suballoc.offset);
- const VkDeviceSize paddingBegin = request.offset - suballoc.offset;
- VMA_ASSERT(suballoc.size >= paddingBegin + allocSize);
- const VkDeviceSize paddingEnd = suballoc.size - paddingBegin - allocSize;
+ VMA_ASSERT((VkDeviceSize)request.allocHandle - 1 >= suballoc.offset);
+ const VkDeviceSize paddingBegin = (VkDeviceSize)request.allocHandle - suballoc.offset - 1;
+ VMA_ASSERT(suballoc.size >= paddingBegin + request.size);
+ const VkDeviceSize paddingEnd = suballoc.size - paddingBegin - request.size;
// Unregister this free suballocation from m_FreeSuballocationsBySize and update
// it to become used.
UnregisterFreeSuballocation(request.item);
- suballoc.offset = request.offset;
- suballoc.size = allocSize;
+ suballoc.offset = (VkDeviceSize)request.allocHandle - 1;
+ suballoc.size = request.size;
suballoc.type = type;
- suballoc.hAllocation = hAllocation;
+ suballoc.userData = userData;
// If there are any free bytes remaining at the end, insert new free suballocation after current one.
- if(paddingEnd)
+ if (paddingEnd)
{
VmaSuballocation paddingSuballoc = {};
- paddingSuballoc.offset = request.offset + allocSize;
+ paddingSuballoc.offset = suballoc.offset + suballoc.size;
paddingSuballoc.size = paddingEnd;
paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
VmaSuballocationList::iterator next = request.item;
@@ -9850,10 +7088,10 @@ void VmaBlockMetadata_Generic::Alloc(
}
// If there are any free bytes remaining at the beginning, insert new free suballocation before current one.
- if(paddingBegin)
+ if (paddingBegin)
{
VmaSuballocation paddingSuballoc = {};
- paddingSuballoc.offset = request.offset - paddingBegin;
+ paddingSuballoc.offset = suballoc.offset - paddingBegin;
paddingSuballoc.size = paddingBegin;
paddingSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
const VmaSuballocationList::iterator paddingBeginItem =
@@ -9863,59 +7101,130 @@ void VmaBlockMetadata_Generic::Alloc(
// Update totals.
m_FreeCount = m_FreeCount - 1;
- if(paddingBegin > 0)
+ if (paddingBegin > 0)
{
++m_FreeCount;
}
- if(paddingEnd > 0)
+ if (paddingEnd > 0)
{
++m_FreeCount;
}
- m_SumFreeSize -= allocSize;
+ m_SumFreeSize -= request.size;
}
-void VmaBlockMetadata_Generic::Free(const VmaAllocation allocation)
+void VmaBlockMetadata_Generic::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
{
- for(VmaSuballocationList::iterator suballocItem = m_Suballocations.begin();
- suballocItem != m_Suballocations.end();
- ++suballocItem)
+ outInfo.offset = (VkDeviceSize)allocHandle - 1;
+ const VmaSuballocation& suballoc = *FindAtOffset(outInfo.offset);
+ outInfo.size = suballoc.size;
+ outInfo.pUserData = suballoc.userData;
+}
+
+void* VmaBlockMetadata_Generic::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ return FindAtOffset((VkDeviceSize)allocHandle - 1)->userData;
+}
+
+VmaAllocHandle VmaBlockMetadata_Generic::GetAllocationListBegin() const
+{
+ if (IsEmpty())
+ return VK_NULL_HANDLE;
+
+ for (const auto& suballoc : m_Suballocations)
{
- VmaSuballocation& suballoc = *suballocItem;
- if(suballoc.hAllocation == allocation)
- {
- FreeSuballocation(suballocItem);
- VMA_HEAVY_ASSERT(Validate());
- return;
- }
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ return (VmaAllocHandle)(suballoc.offset + 1);
+ }
+ VMA_ASSERT(false && "Should contain at least 1 allocation!");
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_Generic::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ VmaSuballocationList::const_iterator prev = FindAtOffset((VkDeviceSize)prevAlloc - 1);
+
+ for (VmaSuballocationList::const_iterator it = ++prev; it != m_Suballocations.end(); ++it)
+ {
+ if (it->type != VMA_SUBALLOCATION_TYPE_FREE)
+ return (VmaAllocHandle)(it->offset + 1);
}
- VMA_ASSERT(0 && "Not found!");
+ return VK_NULL_HANDLE;
}
-void VmaBlockMetadata_Generic::FreeAtOffset(VkDeviceSize offset)
+void VmaBlockMetadata_Generic::Clear()
{
- for(VmaSuballocationList::iterator suballocItem = m_Suballocations.begin();
- suballocItem != m_Suballocations.end();
- ++suballocItem)
+ const VkDeviceSize size = GetSize();
+
+ VMA_ASSERT(IsVirtual());
+ m_FreeCount = 1;
+ m_SumFreeSize = size;
+ m_Suballocations.clear();
+ m_FreeSuballocationsBySize.clear();
+
+ VmaSuballocation suballoc = {};
+ suballoc.offset = 0;
+ suballoc.size = size;
+ suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
+ m_Suballocations.push_back(suballoc);
+
+ m_FreeSuballocationsBySize.push_back(m_Suballocations.begin());
+}
+
+void VmaBlockMetadata_Generic::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
+{
+ VmaSuballocation& suballoc = *FindAtOffset((VkDeviceSize)allocHandle - 1);
+ suballoc.userData = userData;
+}
+
+void VmaBlockMetadata_Generic::DebugLogAllAllocations() const
+{
+ for (const auto& suballoc : m_Suballocations)
{
- VmaSuballocation& suballoc = *suballocItem;
- if(suballoc.offset == offset)
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ DebugLogAllocation(suballoc.offset, suballoc.size, suballoc.userData);
+ }
+}
+
+VmaSuballocationList::iterator VmaBlockMetadata_Generic::FindAtOffset(VkDeviceSize offset) const
+{
+ VMA_HEAVY_ASSERT(!m_Suballocations.empty());
+ const VkDeviceSize last = m_Suballocations.rbegin()->offset;
+ if (last == offset)
+ return m_Suballocations.rbegin().drop_const();
+ const VkDeviceSize first = m_Suballocations.begin()->offset;
+ if (first == offset)
+ return m_Suballocations.begin().drop_const();
+
+ const size_t suballocCount = m_Suballocations.size();
+ const VkDeviceSize step = (last - first + m_Suballocations.begin()->size) / suballocCount;
+ auto findSuballocation = [&](auto begin, auto end) -> VmaSuballocationList::iterator
+ {
+ for (auto suballocItem = begin;
+ suballocItem != end;
+ ++suballocItem)
{
- FreeSuballocation(suballocItem);
- return;
+ if (suballocItem->offset == offset)
+ return suballocItem.drop_const();
}
+ VMA_ASSERT(false && "Not found!");
+ return m_Suballocations.end().drop_const();
+ };
+ // If requested offset is closer to the end of range, search from the end
+ if (offset - first > suballocCount * step / 2)
+ {
+ return findSuballocation(m_Suballocations.rbegin(), m_Suballocations.rend());
}
- VMA_ASSERT(0 && "Not found!");
+ return findSuballocation(m_Suballocations.begin(), m_Suballocations.end());
}
bool VmaBlockMetadata_Generic::ValidateFreeSuballocationList() const
{
VkDeviceSize lastSize = 0;
- for(size_t i = 0, count = m_FreeSuballocationsBySize.size(); i < count; ++i)
+ for (size_t i = 0, count = m_FreeSuballocationsBySize.size(); i < count; ++i)
{
const VmaSuballocationList::iterator it = m_FreeSuballocationsBySize[i];
VMA_VALIDATE(it->type == VMA_SUBALLOCATION_TYPE_FREE);
- VMA_VALIDATE(it->size >= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER);
VMA_VALIDATE(it->size >= lastSize);
lastSize = it->size;
}
@@ -9923,276 +7232,105 @@ bool VmaBlockMetadata_Generic::ValidateFreeSuballocationList() const
}
bool VmaBlockMetadata_Generic::CheckAllocation(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
VmaSuballocationList::const_iterator suballocItem,
- bool canMakeOtherLost,
- VkDeviceSize* pOffset,
- size_t* itemsToMakeLostCount,
- VkDeviceSize* pSumFreeSize,
- VkDeviceSize* pSumItemSize) const
+ VmaAllocHandle* pAllocHandle) const
{
VMA_ASSERT(allocSize > 0);
VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);
VMA_ASSERT(suballocItem != m_Suballocations.cend());
- VMA_ASSERT(pOffset != VMA_NULL);
+ VMA_ASSERT(pAllocHandle != VMA_NULL);
- *itemsToMakeLostCount = 0;
- *pSumFreeSize = 0;
- *pSumItemSize = 0;
+ const VkDeviceSize debugMargin = GetDebugMargin();
+ const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity();
- if(canMakeOtherLost)
- {
- if(suballocItem->type == VMA_SUBALLOCATION_TYPE_FREE)
- {
- *pSumFreeSize = suballocItem->size;
- }
- else
- {
- if(suballocItem->hAllocation->CanBecomeLost() &&
- suballocItem->hAllocation->GetLastUseFrameIndex() + frameInUseCount < currentFrameIndex)
- {
- ++*itemsToMakeLostCount;
- *pSumItemSize = suballocItem->size;
- }
- else
- {
- return false;
- }
- }
+ const VmaSuballocation& suballoc = *suballocItem;
+ VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
- // Remaining size is too small for this request: Early return.
- if(GetSize() - suballocItem->offset < allocSize)
- {
- return false;
- }
+ // Size of this suballocation is too small for this request: Early return.
+ if (suballoc.size < allocSize)
+ {
+ return false;
+ }
- // Start from offset equal to beginning of this suballocation.
- *pOffset = suballocItem->offset;
+ // Start from offset equal to beginning of this suballocation.
+ VkDeviceSize offset = suballoc.offset + (suballocItem == m_Suballocations.cbegin() ? 0 : GetDebugMargin());
- // Apply VMA_DEBUG_MARGIN at the beginning.
- if(VMA_DEBUG_MARGIN > 0)
- {
- *pOffset += VMA_DEBUG_MARGIN;
- }
+ // Apply debugMargin from the end of previous alloc.
+ if (debugMargin > 0)
+ {
+ offset += debugMargin;
+ }
- // Apply alignment.
- *pOffset = VmaAlignUp(*pOffset, allocAlignment);
+ // Apply alignment.
+ offset = VmaAlignUp(offset, allocAlignment);
- // Check previous suballocations for BufferImageGranularity conflicts.
- // Make bigger alignment if necessary.
- if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment)
+ // Check previous suballocations for BufferImageGranularity conflicts.
+ // Make bigger alignment if necessary.
+ if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment)
+ {
+ bool bufferImageGranularityConflict = false;
+ VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;
+ while (prevSuballocItem != m_Suballocations.cbegin())
{
- bool bufferImageGranularityConflict = false;
- VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;
- while(prevSuballocItem != m_Suballocations.cbegin())
+ --prevSuballocItem;
+ const VmaSuballocation& prevSuballoc = *prevSuballocItem;
+ if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, offset, bufferImageGranularity))
{
- --prevSuballocItem;
- const VmaSuballocation& prevSuballoc = *prevSuballocItem;
- if(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))
+ if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
{
- if(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
- {
- bufferImageGranularityConflict = true;
- break;
- }
- }
- else
- // Already on previous page.
+ bufferImageGranularityConflict = true;
break;
- }
- if(bufferImageGranularityConflict)
- {
- *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);
- }
- }
-
- // Now that we have final *pOffset, check if we are past suballocItem.
- // If yes, return false - this function should be called for another suballocItem as starting point.
- if(*pOffset >= suballocItem->offset + suballocItem->size)
- {
- return false;
- }
-
- // Calculate padding at the beginning based on current offset.
- const VkDeviceSize paddingBegin = *pOffset - suballocItem->offset;
-
- // Calculate required margin at the end.
- const VkDeviceSize requiredEndMargin = VMA_DEBUG_MARGIN;
-
- const VkDeviceSize totalSize = paddingBegin + allocSize + requiredEndMargin;
- // Another early return check.
- if(suballocItem->offset + totalSize > GetSize())
- {
- return false;
- }
-
- // Advance lastSuballocItem until desired size is reached.
- // Update itemsToMakeLostCount.
- VmaSuballocationList::const_iterator lastSuballocItem = suballocItem;
- if(totalSize > suballocItem->size)
- {
- VkDeviceSize remainingSize = totalSize - suballocItem->size;
- while(remainingSize > 0)
- {
- ++lastSuballocItem;
- if(lastSuballocItem == m_Suballocations.cend())
- {
- return false;
}
- if(lastSuballocItem->type == VMA_SUBALLOCATION_TYPE_FREE)
- {
- *pSumFreeSize += lastSuballocItem->size;
- }
- else
- {
- VMA_ASSERT(lastSuballocItem->hAllocation != VK_NULL_HANDLE);
- if(lastSuballocItem->hAllocation->CanBecomeLost() &&
- lastSuballocItem->hAllocation->GetLastUseFrameIndex() + frameInUseCount < currentFrameIndex)
- {
- ++*itemsToMakeLostCount;
- *pSumItemSize += lastSuballocItem->size;
- }
- else
- {
- return false;
- }
- }
- remainingSize = (lastSuballocItem->size < remainingSize) ?
- remainingSize - lastSuballocItem->size : 0;
}
+ else
+ // Already on previous page.
+ break;
}
-
- // Check next suballocations for BufferImageGranularity conflicts.
- // If conflict exists, we must mark more allocations lost or fail.
- if(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)
+ if (bufferImageGranularityConflict)
{
- VmaSuballocationList::const_iterator nextSuballocItem = lastSuballocItem;
- ++nextSuballocItem;
- while(nextSuballocItem != m_Suballocations.cend())
- {
- const VmaSuballocation& nextSuballoc = *nextSuballocItem;
- if(VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
- {
- if(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
- {
- VMA_ASSERT(nextSuballoc.hAllocation != VK_NULL_HANDLE);
- if(nextSuballoc.hAllocation->CanBecomeLost() &&
- nextSuballoc.hAllocation->GetLastUseFrameIndex() + frameInUseCount < currentFrameIndex)
- {
- ++*itemsToMakeLostCount;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- // Already on next page.
- break;
- }
- ++nextSuballocItem;
- }
+ offset = VmaAlignUp(offset, bufferImageGranularity);
}
}
- else
- {
- const VmaSuballocation& suballoc = *suballocItem;
- VMA_ASSERT(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
- *pSumFreeSize = suballoc.size;
+ // Calculate padding at the beginning based on current offset.
+ const VkDeviceSize paddingBegin = offset - suballoc.offset;
- // Size of this suballocation is too small for this request: Early return.
- if(suballoc.size < allocSize)
- {
- return false;
- }
-
- // Start from offset equal to beginning of this suballocation.
- *pOffset = suballoc.offset;
-
- // Apply VMA_DEBUG_MARGIN at the beginning.
- if(VMA_DEBUG_MARGIN > 0)
- {
- *pOffset += VMA_DEBUG_MARGIN;
- }
-
- // Apply alignment.
- *pOffset = VmaAlignUp(*pOffset, allocAlignment);
+ // Fail if requested size plus margin after is bigger than size of this suballocation.
+ if (paddingBegin + allocSize + debugMargin > suballoc.size)
+ {
+ return false;
+ }
- // Check previous suballocations for BufferImageGranularity conflicts.
- // Make bigger alignment if necessary.
- if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment)
+ // Check next suballocations for BufferImageGranularity conflicts.
+ // If conflict exists, allocation cannot be made here.
+ if (allocSize % bufferImageGranularity || offset % bufferImageGranularity)
+ {
+ VmaSuballocationList::const_iterator nextSuballocItem = suballocItem;
+ ++nextSuballocItem;
+ while (nextSuballocItem != m_Suballocations.cend())
{
- bool bufferImageGranularityConflict = false;
- VmaSuballocationList::const_iterator prevSuballocItem = suballocItem;
- while(prevSuballocItem != m_Suballocations.cbegin())
+ const VmaSuballocation& nextSuballoc = *nextSuballocItem;
+ if (VmaBlocksOnSamePage(offset, allocSize, nextSuballoc.offset, bufferImageGranularity))
{
- --prevSuballocItem;
- const VmaSuballocation& prevSuballoc = *prevSuballocItem;
- if(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, *pOffset, bufferImageGranularity))
+ if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
{
- if(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
- {
- bufferImageGranularityConflict = true;
- break;
- }
+ return false;
}
- else
- // Already on previous page.
- break;
}
- if(bufferImageGranularityConflict)
+ else
{
- *pOffset = VmaAlignUp(*pOffset, bufferImageGranularity);
+ // Already on next page.
+ break;
}
- }
-
- // Calculate padding at the beginning based on current offset.
- const VkDeviceSize paddingBegin = *pOffset - suballoc.offset;
-
- // Calculate required margin at the end.
- const VkDeviceSize requiredEndMargin = VMA_DEBUG_MARGIN;
-
- // Fail if requested size plus margin before and after is bigger than size of this suballocation.
- if(paddingBegin + allocSize + requiredEndMargin > suballoc.size)
- {
- return false;
- }
-
- // Check next suballocations for BufferImageGranularity conflicts.
- // If conflict exists, allocation cannot be made here.
- if(allocSize % bufferImageGranularity || *pOffset % bufferImageGranularity)
- {
- VmaSuballocationList::const_iterator nextSuballocItem = suballocItem;
++nextSuballocItem;
- while(nextSuballocItem != m_Suballocations.cend())
- {
- const VmaSuballocation& nextSuballoc = *nextSuballocItem;
- if(VmaBlocksOnSamePage(*pOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
- {
- if(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
- {
- return false;
- }
- }
- else
- {
- // Already on next page.
- break;
- }
- ++nextSuballocItem;
- }
}
}
- // All tests passed: Success. pOffset is already filled.
+ *pAllocHandle = (VmaAllocHandle)(offset + 1);
+ // All tests passed: Success. pAllocHandle is already filled.
return true;
}
@@ -10216,7 +7354,7 @@ VmaSuballocationList::iterator VmaBlockMetadata_Generic::FreeSuballocation(VmaSu
// Change this suballocation to be marked as free.
VmaSuballocation& suballoc = *suballocItem;
suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
- suballoc.hAllocation = VK_NULL_HANDLE;
+ suballoc.userData = VMA_NULL;
// Update totals.
++m_FreeCount;
@@ -10228,28 +7366,28 @@ VmaSuballocationList::iterator VmaBlockMetadata_Generic::FreeSuballocation(VmaSu
VmaSuballocationList::iterator nextItem = suballocItem;
++nextItem;
- if((nextItem != m_Suballocations.end()) && (nextItem->type == VMA_SUBALLOCATION_TYPE_FREE))
+ if ((nextItem != m_Suballocations.end()) && (nextItem->type == VMA_SUBALLOCATION_TYPE_FREE))
{
mergeWithNext = true;
}
VmaSuballocationList::iterator prevItem = suballocItem;
- if(suballocItem != m_Suballocations.begin())
+ if (suballocItem != m_Suballocations.begin())
{
--prevItem;
- if(prevItem->type == VMA_SUBALLOCATION_TYPE_FREE)
+ if (prevItem->type == VMA_SUBALLOCATION_TYPE_FREE)
{
mergeWithPrev = true;
}
}
- if(mergeWithNext)
+ if (mergeWithNext)
{
UnregisterFreeSuballocation(nextItem);
MergeFreeWithNext(suballocItem);
}
- if(mergeWithPrev)
+ if (mergeWithPrev)
{
UnregisterFreeSuballocation(prevItem);
MergeFreeWithNext(prevItem);
@@ -10272,22 +7410,18 @@ void VmaBlockMetadata_Generic::RegisterFreeSuballocation(VmaSuballocationList::i
// this function, depending on what do you want to check.
VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());
- if(item->size >= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
+ if (m_FreeSuballocationsBySize.empty())
{
- if(m_FreeSuballocationsBySize.empty())
- {
- m_FreeSuballocationsBySize.push_back(item);
- }
- else
- {
- VmaVectorInsertSorted<VmaSuballocationItemSizeLess>(m_FreeSuballocationsBySize, item);
- }
+ m_FreeSuballocationsBySize.push_back(item);
+ }
+ else
+ {
+ VmaVectorInsertSorted<VmaSuballocationItemSizeLess>(m_FreeSuballocationsBySize, item);
}
//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());
}
-
void VmaBlockMetadata_Generic::UnregisterFreeSuballocation(VmaSuballocationList::iterator item)
{
VMA_ASSERT(item->type == VMA_SUBALLOCATION_TYPE_FREE);
@@ -10297,77 +7431,228 @@ void VmaBlockMetadata_Generic::UnregisterFreeSuballocation(VmaSuballocationList:
// this function, depending on what do you want to check.
VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());
- if(item->size >= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
+ VmaSuballocationList::iterator* const it = VmaBinaryFindFirstNotLess(
+ m_FreeSuballocationsBySize.data(),
+ m_FreeSuballocationsBySize.data() + m_FreeSuballocationsBySize.size(),
+ item,
+ VmaSuballocationItemSizeLess());
+ for (size_t index = it - m_FreeSuballocationsBySize.data();
+ index < m_FreeSuballocationsBySize.size();
+ ++index)
{
- VmaSuballocationList::iterator* const it = VmaBinaryFindFirstNotLess(
- m_FreeSuballocationsBySize.data(),
- m_FreeSuballocationsBySize.data() + m_FreeSuballocationsBySize.size(),
- item,
- VmaSuballocationItemSizeLess());
- for(size_t index = it - m_FreeSuballocationsBySize.data();
- index < m_FreeSuballocationsBySize.size();
- ++index)
+ if (m_FreeSuballocationsBySize[index] == item)
{
- if(m_FreeSuballocationsBySize[index] == item)
- {
- VmaVectorRemove(m_FreeSuballocationsBySize, index);
- return;
- }
- VMA_ASSERT((m_FreeSuballocationsBySize[index]->size == item->size) && "Not found.");
+ VmaVectorRemove(m_FreeSuballocationsBySize, index);
+ return;
}
- VMA_ASSERT(0 && "Not found.");
+ VMA_ASSERT((m_FreeSuballocationsBySize[index]->size == item->size) && "Not found.");
}
+ VMA_ASSERT(0 && "Not found.");
//VMA_HEAVY_ASSERT(ValidateFreeSuballocationList());
}
+#endif // _VMA_BLOCK_METADATA_GENERIC_FUNCTIONS
+#endif // _VMA_BLOCK_METADATA_GENERIC
+#endif // #if 0
-bool VmaBlockMetadata_Generic::IsBufferImageGranularityConflictPossible(
- VkDeviceSize bufferImageGranularity,
- VmaSuballocationType& inOutPrevSuballocType) const
+#ifndef _VMA_BLOCK_METADATA_LINEAR
+/*
+Allocations and their references in internal data structure look like this:
+
+if(m_2ndVectorMode == SECOND_VECTOR_EMPTY):
+
+ 0 +-------+
+ | |
+ | |
+ | |
+ +-------+
+ | Alloc | 1st[m_1stNullItemsBeginCount]
+ +-------+
+ | Alloc | 1st[m_1stNullItemsBeginCount + 1]
+ +-------+
+ | ... |
+ +-------+
+ | Alloc | 1st[1st.size() - 1]
+ +-------+
+ | |
+ | |
+ | |
+GetSize() +-------+
+
+if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER):
+
+ 0 +-------+
+ | Alloc | 2nd[0]
+ +-------+
+ | Alloc | 2nd[1]
+ +-------+
+ | ... |
+ +-------+
+ | Alloc | 2nd[2nd.size() - 1]
+ +-------+
+ | |
+ | |
+ | |
+ +-------+
+ | Alloc | 1st[m_1stNullItemsBeginCount]
+ +-------+
+ | Alloc | 1st[m_1stNullItemsBeginCount + 1]
+ +-------+
+ | ... |
+ +-------+
+ | Alloc | 1st[1st.size() - 1]
+ +-------+
+ | |
+GetSize() +-------+
+
+if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK):
+
+ 0 +-------+
+ | |
+ | |
+ | |
+ +-------+
+ | Alloc | 1st[m_1stNullItemsBeginCount]
+ +-------+
+ | Alloc | 1st[m_1stNullItemsBeginCount + 1]
+ +-------+
+ | ... |
+ +-------+
+ | Alloc | 1st[1st.size() - 1]
+ +-------+
+ | |
+ | |
+ | |
+ +-------+
+ | Alloc | 2nd[2nd.size() - 1]
+ +-------+
+ | ... |
+ +-------+
+ | Alloc | 2nd[1]
+ +-------+
+ | Alloc | 2nd[0]
+GetSize() +-------+
+
+*/
+class VmaBlockMetadata_Linear : public VmaBlockMetadata
{
- if(bufferImageGranularity == 1 || IsEmpty())
- {
- return false;
- }
+ VMA_CLASS_NO_COPY(VmaBlockMetadata_Linear)
+public:
+ VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
+ virtual ~VmaBlockMetadata_Linear() = default;
- VkDeviceSize minAlignment = VK_WHOLE_SIZE;
- bool typeConflictFound = false;
- for(const auto& suballoc : m_Suballocations)
+ VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize; }
+ bool IsEmpty() const override { return GetAllocationCount() == 0; }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle - 1; };
+
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
+ size_t GetAllocationCount() const override;
+
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
+
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
+#endif
+
+ bool CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest) override;
+
+ VkResult CheckCorruption(const void* pBlockData) override;
+
+ void Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData) override;
+
+ void Free(VmaAllocHandle allocHandle) override;
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
+ void DebugLogAllAllocations() const override;
+
+private:
+ /*
+ There are two suballocation vectors, used in ping-pong way.
+ The one with index m_1stVectorIndex is called 1st.
+ The one with index (m_1stVectorIndex ^ 1) is called 2nd.
+ 2nd can be non-empty only when 1st is not empty.
+ When 2nd is not empty, m_2ndVectorMode indicates its mode of operation.
+ */
+ typedef VmaVector<VmaSuballocation, VmaStlAllocator<VmaSuballocation>> SuballocationVectorType;
+
+ enum SECOND_VECTOR_MODE
{
- const VmaSuballocationType suballocType = suballoc.type;
- if(suballocType != VMA_SUBALLOCATION_TYPE_FREE)
- {
- minAlignment = VMA_MIN(minAlignment, suballoc.hAllocation->GetAlignment());
- if(VmaIsBufferImageGranularityConflict(inOutPrevSuballocType, suballocType))
- {
- typeConflictFound = true;
- }
- inOutPrevSuballocType = suballocType;
- }
- }
+ SECOND_VECTOR_EMPTY,
+ /*
+ Suballocations in 2nd vector are created later than the ones in 1st, but they
+ all have smaller offset.
+ */
+ SECOND_VECTOR_RING_BUFFER,
+ /*
+ Suballocations in 2nd vector are upper side of double stack.
+ They all have offsets higher than those in 1st vector.
+ Top of this stack means smaller offsets, but higher indices in this vector.
+ */
+ SECOND_VECTOR_DOUBLE_STACK,
+ };
- return typeConflictFound || minAlignment >= bufferImageGranularity;
-}
+ VkDeviceSize m_SumFreeSize;
+ SuballocationVectorType m_Suballocations0, m_Suballocations1;
+ uint32_t m_1stVectorIndex;
+ SECOND_VECTOR_MODE m_2ndVectorMode;
+ // Number of items in 1st vector with hAllocation = null at the beginning.
+ size_t m_1stNullItemsBeginCount;
+ // Number of other items in 1st vector with hAllocation = null somewhere in the middle.
+ size_t m_1stNullItemsMiddleCount;
+ // Number of items in 2nd vector with hAllocation = null.
+ size_t m_2ndNullItemsCount;
-////////////////////////////////////////////////////////////////////////////////
-// class VmaBlockMetadata_Linear
+ SuballocationVectorType& AccessSuballocations1st() { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; }
+ SuballocationVectorType& AccessSuballocations2nd() { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; }
+ const SuballocationVectorType& AccessSuballocations1st() const { return m_1stVectorIndex ? m_Suballocations1 : m_Suballocations0; }
+ const SuballocationVectorType& AccessSuballocations2nd() const { return m_1stVectorIndex ? m_Suballocations0 : m_Suballocations1; }
+
+ VmaSuballocation& FindSuballocation(VkDeviceSize offset) const;
+ bool ShouldCompact1st() const;
+ void CleanupAfterFree();
+
+ bool CreateAllocationRequest_LowerAddress(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest);
+ bool CreateAllocationRequest_UpperAddress(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest);
+};
-VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(VmaAllocator hAllocator) :
- VmaBlockMetadata(hAllocator),
+#ifndef _VMA_BLOCK_METADATA_LINEAR_FUNCTIONS
+VmaBlockMetadata_Linear::VmaBlockMetadata_Linear(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
m_SumFreeSize(0),
- m_Suballocations0(VmaStlAllocator<VmaSuballocation>(hAllocator->GetAllocationCallbacks())),
- m_Suballocations1(VmaStlAllocator<VmaSuballocation>(hAllocator->GetAllocationCallbacks())),
+ m_Suballocations0(VmaStlAllocator<VmaSuballocation>(pAllocationCallbacks)),
+ m_Suballocations1(VmaStlAllocator<VmaSuballocation>(pAllocationCallbacks)),
m_1stVectorIndex(0),
m_2ndVectorMode(SECOND_VECTOR_EMPTY),
m_1stNullItemsBeginCount(0),
m_1stNullItemsMiddleCount(0),
- m_2ndNullItemsCount(0)
-{
-}
-
-VmaBlockMetadata_Linear::~VmaBlockMetadata_Linear()
-{
-}
+ m_2ndNullItemsCount(0) {}
void VmaBlockMetadata_Linear::Init(VkDeviceSize size)
{
@@ -10385,17 +7670,17 @@ bool VmaBlockMetadata_Linear::Validate() const
suballocations2nd.empty() ||
m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER);
- if(!suballocations1st.empty())
+ if (!suballocations1st.empty())
{
// Null item at the beginning should be accounted into m_1stNullItemsBeginCount.
- VMA_VALIDATE(suballocations1st[m_1stNullItemsBeginCount].hAllocation != VK_NULL_HANDLE);
+ VMA_VALIDATE(suballocations1st[m_1stNullItemsBeginCount].type != VMA_SUBALLOCATION_TYPE_FREE);
// Null item at the end should be just pop_back().
- VMA_VALIDATE(suballocations1st.back().hAllocation != VK_NULL_HANDLE);
+ VMA_VALIDATE(suballocations1st.back().type != VMA_SUBALLOCATION_TYPE_FREE);
}
- if(!suballocations2nd.empty())
+ if (!suballocations2nd.empty())
{
// Null item at the end should be just pop_back().
- VMA_VALIDATE(suballocations2nd.back().hAllocation != VK_NULL_HANDLE);
+ VMA_VALIDATE(suballocations2nd.back().type != VMA_SUBALLOCATION_TYPE_FREE);
}
VMA_VALIDATE(m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount <= suballocations1st.size());
@@ -10403,24 +7688,32 @@ bool VmaBlockMetadata_Linear::Validate() const
VkDeviceSize sumUsedSize = 0;
const size_t suballoc1stCount = suballocations1st.size();
- VkDeviceSize offset = VMA_DEBUG_MARGIN;
+ const VkDeviceSize debugMargin = GetDebugMargin();
+ VkDeviceSize offset = 0;
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
const size_t suballoc2ndCount = suballocations2nd.size();
size_t nullItem2ndCount = 0;
- for(size_t i = 0; i < suballoc2ndCount; ++i)
+ for (size_t i = 0; i < suballoc2ndCount; ++i)
{
const VmaSuballocation& suballoc = suballocations2nd[i];
const bool currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
- VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));
+ VmaAllocation const alloc = (VmaAllocation)suballoc.userData;
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE));
+ }
VMA_VALIDATE(suballoc.offset >= offset);
- if(!currFree)
+ if (!currFree)
{
- VMA_VALIDATE(suballoc.hAllocation->GetOffset() == suballoc.offset);
- VMA_VALIDATE(suballoc.hAllocation->GetSize() == suballoc.size);
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset + 1);
+ VMA_VALIDATE(alloc->GetSize() == suballoc.size);
+ }
sumUsedSize += suballoc.size;
}
else
@@ -10428,34 +7721,41 @@ bool VmaBlockMetadata_Linear::Validate() const
++nullItem2ndCount;
}
- offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;
+ offset = suballoc.offset + suballoc.size + debugMargin;
}
VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount);
}
- for(size_t i = 0; i < m_1stNullItemsBeginCount; ++i)
+ for (size_t i = 0; i < m_1stNullItemsBeginCount; ++i)
{
const VmaSuballocation& suballoc = suballocations1st[i];
VMA_VALIDATE(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE &&
- suballoc.hAllocation == VK_NULL_HANDLE);
+ suballoc.userData == VMA_NULL);
}
size_t nullItem1stCount = m_1stNullItemsBeginCount;
- for(size_t i = m_1stNullItemsBeginCount; i < suballoc1stCount; ++i)
+ for (size_t i = m_1stNullItemsBeginCount; i < suballoc1stCount; ++i)
{
const VmaSuballocation& suballoc = suballocations1st[i];
const bool currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
- VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));
+ VmaAllocation const alloc = (VmaAllocation)suballoc.userData;
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE));
+ }
VMA_VALIDATE(suballoc.offset >= offset);
VMA_VALIDATE(i >= m_1stNullItemsBeginCount || currFree);
- if(!currFree)
+ if (!currFree)
{
- VMA_VALIDATE(suballoc.hAllocation->GetOffset() == suballoc.offset);
- VMA_VALIDATE(suballoc.hAllocation->GetSize() == suballoc.size);
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset + 1);
+ VMA_VALIDATE(alloc->GetSize() == suballoc.size);
+ }
sumUsedSize += suballoc.size;
}
else
@@ -10463,26 +7763,33 @@ bool VmaBlockMetadata_Linear::Validate() const
++nullItem1stCount;
}
- offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;
+ offset = suballoc.offset + suballoc.size + debugMargin;
}
VMA_VALIDATE(nullItem1stCount == m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount);
- if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
const size_t suballoc2ndCount = suballocations2nd.size();
size_t nullItem2ndCount = 0;
- for(size_t i = suballoc2ndCount; i--; )
+ for (size_t i = suballoc2ndCount; i--; )
{
const VmaSuballocation& suballoc = suballocations2nd[i];
const bool currFree = (suballoc.type == VMA_SUBALLOCATION_TYPE_FREE);
- VMA_VALIDATE(currFree == (suballoc.hAllocation == VK_NULL_HANDLE));
+ VmaAllocation const alloc = (VmaAllocation)suballoc.userData;
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(currFree == (alloc == VK_NULL_HANDLE));
+ }
VMA_VALIDATE(suballoc.offset >= offset);
- if(!currFree)
+ if (!currFree)
{
- VMA_VALIDATE(suballoc.hAllocation->GetOffset() == suballoc.offset);
- VMA_VALIDATE(suballoc.hAllocation->GetSize() == suballoc.size);
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE((VkDeviceSize)alloc->GetAllocHandle() == suballoc.offset + 1);
+ VMA_VALIDATE(alloc->GetSize() == suballoc.size);
+ }
sumUsedSize += suballoc.size;
}
else
@@ -10490,7 +7797,7 @@ bool VmaBlockMetadata_Linear::Validate() const
++nullItem2ndCount;
}
- offset = suballoc.offset + suballoc.size + VMA_DEBUG_MARGIN;
+ offset = suballoc.offset + suballoc.size + debugMargin;
}
VMA_VALIDATE(nullItem2ndCount == m_2ndNullItemsCount);
@@ -10504,75 +7811,11 @@ bool VmaBlockMetadata_Linear::Validate() const
size_t VmaBlockMetadata_Linear::GetAllocationCount() const
{
- return AccessSuballocations1st().size() - (m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount) +
+ return AccessSuballocations1st().size() - m_1stNullItemsBeginCount - m_1stNullItemsMiddleCount +
AccessSuballocations2nd().size() - m_2ndNullItemsCount;
}
-VkDeviceSize VmaBlockMetadata_Linear::GetUnusedRangeSizeMax() const
-{
- const VkDeviceSize size = GetSize();
-
- /*
- We don't consider gaps inside allocation vectors with freed allocations because
- they are not suitable for reuse in linear allocator. We consider only space that
- is available for new allocations.
- */
- if(IsEmpty())
- {
- return size;
- }
-
- const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
-
- switch(m_2ndVectorMode)
- {
- case SECOND_VECTOR_EMPTY:
- /*
- Available space is after end of 1st, as well as before beginning of 1st (which
- would make it a ring buffer).
- */
- {
- const size_t suballocations1stCount = suballocations1st.size();
- VMA_ASSERT(suballocations1stCount > m_1stNullItemsBeginCount);
- const VmaSuballocation& firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];
- const VmaSuballocation& lastSuballoc = suballocations1st[suballocations1stCount - 1];
- return VMA_MAX(
- firstSuballoc.offset,
- size - (lastSuballoc.offset + lastSuballoc.size));
- }
- break;
-
- case SECOND_VECTOR_RING_BUFFER:
- /*
- Available space is only between end of 2nd and beginning of 1st.
- */
- {
- const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- const VmaSuballocation& lastSuballoc2nd = suballocations2nd.back();
- const VmaSuballocation& firstSuballoc1st = suballocations1st[m_1stNullItemsBeginCount];
- return firstSuballoc1st.offset - (lastSuballoc2nd.offset + lastSuballoc2nd.size);
- }
- break;
-
- case SECOND_VECTOR_DOUBLE_STACK:
- /*
- Available space is only between end of 1st and top of 2nd.
- */
- {
- const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- const VmaSuballocation& topSuballoc2nd = suballocations2nd.back();
- const VmaSuballocation& lastSuballoc1st = suballocations1st.back();
- return topSuballoc2nd.offset - (lastSuballoc1st.offset + lastSuballoc1st.size);
- }
- break;
-
- default:
- VMA_ASSERT(0);
- return 0;
- }
-}
-
-void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
+void VmaBlockMetadata_Linear::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
const VkDeviceSize size = GetSize();
const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
@@ -10580,51 +7823,40 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
const size_t suballoc1stCount = suballocations1st.size();
const size_t suballoc2ndCount = suballocations2nd.size();
- outInfo.blockCount = 1;
- outInfo.allocationCount = (uint32_t)GetAllocationCount();
- outInfo.unusedRangeCount = 0;
- outInfo.usedBytes = 0;
- outInfo.allocationSizeMin = UINT64_MAX;
- outInfo.allocationSizeMax = 0;
- outInfo.unusedRangeSizeMin = UINT64_MAX;
- outInfo.unusedRangeSizeMax = 0;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += size;
VkDeviceSize lastOffset = 0;
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;
size_t nextAlloc2ndIndex = 0;
- while(lastOffset < freeSpace2ndTo1stEnd)
+ while (lastOffset < freeSpace2ndTo1stEnd)
{
// Find next non-null allocation or move nextAllocIndex to the end.
- while(nextAlloc2ndIndex < suballoc2ndCount &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex < suballoc2ndCount &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
++nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex < suballoc2ndCount)
+ if (nextAlloc2ndIndex < suballoc2ndCount)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusedRangeSize);
- outInfo.unusedRangeSizeMax = VMA_MIN(outInfo.unusedRangeSizeMax, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- outInfo.usedBytes += suballoc.size;
- outInfo.allocationSizeMin = VMA_MIN(outInfo.allocationSizeMin, suballoc.size);
- outInfo.allocationSizeMax = VMA_MIN(outInfo.allocationSizeMax, suballoc.size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -10634,14 +7866,11 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
else
{
// There is free space from lastOffset to freeSpace2ndTo1stEnd.
- if(lastOffset < freeSpace2ndTo1stEnd)
+ if (lastOffset < freeSpace2ndTo1stEnd)
{
const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusedRangeSize);
- outInfo.unusedRangeSizeMax = VMA_MIN(outInfo.unusedRangeSizeMax, unusedRangeSize);
- }
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
+ }
// End of loop.
lastOffset = freeSpace2ndTo1stEnd;
@@ -10652,36 +7881,31 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
size_t nextAlloc1stIndex = m_1stNullItemsBeginCount;
const VkDeviceSize freeSpace1stTo2ndEnd =
m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;
- while(lastOffset < freeSpace1stTo2ndEnd)
+ while (lastOffset < freeSpace1stTo2ndEnd)
{
// Find next non-null allocation or move nextAllocIndex to the end.
- while(nextAlloc1stIndex < suballoc1stCount &&
- suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc1stIndex < suballoc1stCount &&
+ suballocations1st[nextAlloc1stIndex].userData == VMA_NULL)
{
++nextAlloc1stIndex;
}
// Found non-null allocation.
- if(nextAlloc1stIndex < suballoc1stCount)
+ if (nextAlloc1stIndex < suballoc1stCount)
{
const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusedRangeSize);
- outInfo.unusedRangeSizeMax = VMA_MIN(outInfo.unusedRangeSizeMax, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- outInfo.usedBytes += suballoc.size;
- outInfo.allocationSizeMin = VMA_MIN(outInfo.allocationSizeMin, suballoc.size);
- outInfo.allocationSizeMax = VMA_MIN(outInfo.allocationSizeMax, suballoc.size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -10691,53 +7915,45 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
else
{
// There is free space from lastOffset to freeSpace1stTo2ndEnd.
- if(lastOffset < freeSpace1stTo2ndEnd)
+ if (lastOffset < freeSpace1stTo2ndEnd)
{
const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusedRangeSize);
- outInfo.unusedRangeSizeMax = VMA_MIN(outInfo.unusedRangeSizeMax, unusedRangeSize);
- }
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
+ }
// End of loop.
lastOffset = freeSpace1stTo2ndEnd;
}
}
- if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
size_t nextAlloc2ndIndex = suballocations2nd.size() - 1;
- while(lastOffset < size)
+ while (lastOffset < size)
{
// Find next non-null allocation or move nextAllocIndex to the end.
- while(nextAlloc2ndIndex != SIZE_MAX &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex != SIZE_MAX &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
--nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex != SIZE_MAX)
+ if (nextAlloc2ndIndex != SIZE_MAX)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusedRangeSize);
- outInfo.unusedRangeSizeMax = VMA_MIN(outInfo.unusedRangeSizeMax, unusedRangeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
}
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- outInfo.usedBytes += suballoc.size;
- outInfo.allocationSizeMin = VMA_MIN(outInfo.allocationSizeMin, suballoc.size);
- outInfo.allocationSizeMax = VMA_MIN(outInfo.allocationSizeMax, suballoc.size);
+ VmaAddDetailedStatisticsAllocation(inoutStats, suballoc.size);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -10747,25 +7963,20 @@ void VmaBlockMetadata_Linear::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
else
{
// There is free space from lastOffset to size.
- if(lastOffset < size)
+ if (lastOffset < size)
{
const VkDeviceSize unusedRangeSize = size - lastOffset;
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusedRangeSize);
- outInfo.unusedRangeSizeMax = VMA_MIN(outInfo.unusedRangeSizeMax, unusedRangeSize);
- }
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusedRangeSize);
+ }
// End of loop.
lastOffset = size;
}
}
}
-
- outInfo.unusedBytes = size - outInfo.usedBytes;
}
-void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_Linear::AddStatistics(VmaStatistics& inoutStats) const
{
const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
@@ -10773,36 +7984,35 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
const size_t suballoc1stCount = suballocations1st.size();
const size_t suballoc2ndCount = suballocations2nd.size();
- inoutStats.size += size;
+ inoutStats.blockCount++;
+ inoutStats.blockBytes += size;
+ inoutStats.allocationBytes += size - m_SumFreeSize;
VkDeviceSize lastOffset = 0;
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;
size_t nextAlloc2ndIndex = m_1stNullItemsBeginCount;
- while(lastOffset < freeSpace2ndTo1stEnd)
+ while (lastOffset < freeSpace2ndTo1stEnd)
{
// Find next non-null allocation or move nextAlloc2ndIndex to the end.
- while(nextAlloc2ndIndex < suballoc2ndCount &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex < suballoc2ndCount &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
++nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex < suballoc2ndCount)
+ if (nextAlloc2ndIndex < suballoc2ndCount)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, unusedRangeSize);
}
// 2. Process this allocation.
@@ -10816,13 +8026,10 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
// We are at the end.
else
{
- if(lastOffset < freeSpace2ndTo1stEnd)
+ if (lastOffset < freeSpace2ndTo1stEnd)
{
// There is free space from lastOffset to freeSpace2ndTo1stEnd.
const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, unusedRangeSize);
}
// End of loop.
@@ -10834,28 +8041,25 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
size_t nextAlloc1stIndex = m_1stNullItemsBeginCount;
const VkDeviceSize freeSpace1stTo2ndEnd =
m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;
- while(lastOffset < freeSpace1stTo2ndEnd)
+ while (lastOffset < freeSpace1stTo2ndEnd)
{
// Find next non-null allocation or move nextAllocIndex to the end.
- while(nextAlloc1stIndex < suballoc1stCount &&
- suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc1stIndex < suballoc1stCount &&
+ suballocations1st[nextAlloc1stIndex].userData == VMA_NULL)
{
++nextAlloc1stIndex;
}
// Found non-null allocation.
- if(nextAlloc1stIndex < suballoc1stCount)
+ if (nextAlloc1stIndex < suballoc1stCount)
{
const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, unusedRangeSize);
}
// 2. Process this allocation.
@@ -10869,13 +8073,10 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
// We are at the end.
else
{
- if(lastOffset < freeSpace1stTo2ndEnd)
+ if (lastOffset < freeSpace1stTo2ndEnd)
{
// There is free space from lastOffset to freeSpace1stTo2ndEnd.
const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, unusedRangeSize);
}
// End of loop.
@@ -10883,31 +8084,28 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
}
}
- if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
size_t nextAlloc2ndIndex = suballocations2nd.size() - 1;
- while(lastOffset < size)
+ while (lastOffset < size)
{
// Find next non-null allocation or move nextAlloc2ndIndex to the end.
- while(nextAlloc2ndIndex != SIZE_MAX &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex != SIZE_MAX &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
--nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex != SIZE_MAX)
+ if (nextAlloc2ndIndex != SIZE_MAX)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, unusedRangeSize);
}
// 2. Process this allocation.
@@ -10921,13 +8119,10 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
// We are at the end.
else
{
- if(lastOffset < size)
+ if (lastOffset < size)
{
// There is free space from lastOffset to size.
const VkDeviceSize unusedRangeSize = size - lastOffset;
- inoutStats.unusedSize += unusedRangeSize;
- ++inoutStats.unusedRangeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, unusedRangeSize);
}
// End of loop.
@@ -10938,7 +8133,7 @@ void VmaBlockMetadata_Linear::AddPoolStats(VmaPoolStats& inoutStats) const
}
#if VMA_STATS_STRING_ENABLED
-void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
const VkDeviceSize size = GetSize();
const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
@@ -10954,26 +8149,26 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
VkDeviceSize lastOffset = 0;
size_t alloc2ndCount = 0;
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;
size_t nextAlloc2ndIndex = 0;
- while(lastOffset < freeSpace2ndTo1stEnd)
+ while (lastOffset < freeSpace2ndTo1stEnd)
{
// Find next non-null allocation or move nextAlloc2ndIndex to the end.
- while(nextAlloc2ndIndex < suballoc2ndCount &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex < suballoc2ndCount &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
++nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex < suballoc2ndCount)
+ if (nextAlloc2ndIndex < suballoc2ndCount)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
++unusedRangeCount;
@@ -10991,7 +8186,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// We are at the end.
else
{
- if(lastOffset < freeSpace2ndTo1stEnd)
+ if (lastOffset < freeSpace2ndTo1stEnd)
{
// There is free space from lastOffset to freeSpace2ndTo1stEnd.
++unusedRangeCount;
@@ -11007,22 +8202,22 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
size_t alloc1stCount = 0;
const VkDeviceSize freeSpace1stTo2ndEnd =
m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ? suballocations2nd.back().offset : size;
- while(lastOffset < freeSpace1stTo2ndEnd)
+ while (lastOffset < freeSpace1stTo2ndEnd)
{
// Find next non-null allocation or move nextAllocIndex to the end.
- while(nextAlloc1stIndex < suballoc1stCount &&
- suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc1stIndex < suballoc1stCount &&
+ suballocations1st[nextAlloc1stIndex].userData == VMA_NULL)
{
++nextAlloc1stIndex;
}
// Found non-null allocation.
- if(nextAlloc1stIndex < suballoc1stCount)
+ if (nextAlloc1stIndex < suballoc1stCount)
{
const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
++unusedRangeCount;
@@ -11040,7 +8235,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// We are at the end.
else
{
- if(lastOffset < size)
+ if (lastOffset < size)
{
// There is free space from lastOffset to freeSpace1stTo2ndEnd.
++unusedRangeCount;
@@ -11051,25 +8246,25 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
}
}
- if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
size_t nextAlloc2ndIndex = suballocations2nd.size() - 1;
- while(lastOffset < size)
+ while (lastOffset < size)
{
// Find next non-null allocation or move nextAlloc2ndIndex to the end.
- while(nextAlloc2ndIndex != SIZE_MAX &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex != SIZE_MAX &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
--nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex != SIZE_MAX)
+ if (nextAlloc2ndIndex != SIZE_MAX)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
++unusedRangeCount;
@@ -11087,7 +8282,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// We are at the end.
else
{
- if(lastOffset < size)
+ if (lastOffset < size)
{
// There is free space from lastOffset to size.
++unusedRangeCount;
@@ -11100,31 +8295,31 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
}
const VkDeviceSize unusedBytes = size - usedBytes;
- PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount);
+ PrintDetailedMap_Begin(json, unusedBytes, alloc1stCount + alloc2ndCount, unusedRangeCount, mapRefCount);
// SECOND PASS
lastOffset = 0;
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
const VkDeviceSize freeSpace2ndTo1stEnd = suballocations1st[m_1stNullItemsBeginCount].offset;
size_t nextAlloc2ndIndex = 0;
- while(lastOffset < freeSpace2ndTo1stEnd)
+ while (lastOffset < freeSpace2ndTo1stEnd)
{
// Find next non-null allocation or move nextAlloc2ndIndex to the end.
- while(nextAlloc2ndIndex < suballoc2ndCount &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex < suballoc2ndCount &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
++nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex < suballoc2ndCount)
+ if (nextAlloc2ndIndex < suballoc2ndCount)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
@@ -11133,7 +8328,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);
+ PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -11142,7 +8337,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// We are at the end.
else
{
- if(lastOffset < freeSpace2ndTo1stEnd)
+ if (lastOffset < freeSpace2ndTo1stEnd)
{
// There is free space from lastOffset to freeSpace2ndTo1stEnd.
const VkDeviceSize unusedRangeSize = freeSpace2ndTo1stEnd - lastOffset;
@@ -11156,22 +8351,22 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
}
nextAlloc1stIndex = m_1stNullItemsBeginCount;
- while(lastOffset < freeSpace1stTo2ndEnd)
+ while (lastOffset < freeSpace1stTo2ndEnd)
{
// Find next non-null allocation or move nextAllocIndex to the end.
- while(nextAlloc1stIndex < suballoc1stCount &&
- suballocations1st[nextAlloc1stIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc1stIndex < suballoc1stCount &&
+ suballocations1st[nextAlloc1stIndex].userData == VMA_NULL)
{
++nextAlloc1stIndex;
}
// Found non-null allocation.
- if(nextAlloc1stIndex < suballoc1stCount)
+ if (nextAlloc1stIndex < suballoc1stCount)
{
const VmaSuballocation& suballoc = suballocations1st[nextAlloc1stIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
@@ -11180,7 +8375,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);
+ PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -11189,7 +8384,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// We are at the end.
else
{
- if(lastOffset < freeSpace1stTo2ndEnd)
+ if (lastOffset < freeSpace1stTo2ndEnd)
{
// There is free space from lastOffset to freeSpace1stTo2ndEnd.
const VkDeviceSize unusedRangeSize = freeSpace1stTo2ndEnd - lastOffset;
@@ -11201,25 +8396,25 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
}
}
- if(m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if (m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
size_t nextAlloc2ndIndex = suballocations2nd.size() - 1;
- while(lastOffset < size)
+ while (lastOffset < size)
{
// Find next non-null allocation or move nextAlloc2ndIndex to the end.
- while(nextAlloc2ndIndex != SIZE_MAX &&
- suballocations2nd[nextAlloc2ndIndex].hAllocation == VK_NULL_HANDLE)
+ while (nextAlloc2ndIndex != SIZE_MAX &&
+ suballocations2nd[nextAlloc2ndIndex].userData == VMA_NULL)
{
--nextAlloc2ndIndex;
}
// Found non-null allocation.
- if(nextAlloc2ndIndex != SIZE_MAX)
+ if (nextAlloc2ndIndex != SIZE_MAX)
{
const VmaSuballocation& suballoc = suballocations2nd[nextAlloc2ndIndex];
// 1. Process free space before this allocation.
- if(lastOffset < suballoc.offset)
+ if (lastOffset < suballoc.offset)
{
// There is free space from lastOffset to suballoc.offset.
const VkDeviceSize unusedRangeSize = suballoc.offset - lastOffset;
@@ -11228,7 +8423,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// 2. Process this allocation.
// There is allocation with suballoc.offset, suballoc.size.
- PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.hAllocation);
+ PrintDetailedMap_Allocation(json, suballoc.offset, suballoc.size, suballoc.userData);
// 3. Prepare for next iteration.
lastOffset = suballoc.offset + suballoc.size;
@@ -11237,7 +8432,7 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
// We are at the end.
else
{
- if(lastOffset < size)
+ if (lastOffset < size)
{
// There is free space from lastOffset to size.
const VkDeviceSize unusedRangeSize = size - lastOffset;
@@ -11252,17 +8447,13 @@ void VmaBlockMetadata_Linear::PrintDetailedMap(class VmaJsonWriter& json) const
PrintDetailedMap_End(json);
}
-#endif // #if VMA_STATS_STRING_ENABLED
+#endif // VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Linear::CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
- bool canMakeOtherLost,
uint32_t strategy,
VmaAllocationRequest* pAllocationRequest)
{
@@ -11270,184 +8461,453 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest(
VMA_ASSERT(allocType != VMA_SUBALLOCATION_TYPE_FREE);
VMA_ASSERT(pAllocationRequest != VMA_NULL);
VMA_HEAVY_ASSERT(Validate());
+ pAllocationRequest->size = allocSize;
return upperAddress ?
CreateAllocationRequest_UpperAddress(
- currentFrameIndex, frameInUseCount, bufferImageGranularity,
- allocSize, allocAlignment, allocType, canMakeOtherLost, strategy, pAllocationRequest) :
+ allocSize, allocAlignment, allocType, strategy, pAllocationRequest) :
CreateAllocationRequest_LowerAddress(
- currentFrameIndex, frameInUseCount, bufferImageGranularity,
- allocSize, allocAlignment, allocType, canMakeOtherLost, strategy, pAllocationRequest);
+ allocSize, allocAlignment, allocType, strategy, pAllocationRequest);
}
-bool VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
- VkDeviceSize allocSize,
- VkDeviceSize allocAlignment,
- VmaSuballocationType allocType,
- bool canMakeOtherLost,
- uint32_t strategy,
- VmaAllocationRequest* pAllocationRequest)
+VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData)
{
- const VkDeviceSize size = GetSize();
+ VMA_ASSERT(!IsVirtual());
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ for (size_t i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i < count; ++i)
+ {
+ const VmaSuballocation& suballoc = suballocations1st[i];
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ {
+ if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
+ {
+ VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
+ return VK_ERROR_UNKNOWN_COPY;
+ }
+ }
+ }
+
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ for (size_t i = 0, count = suballocations2nd.size(); i < count; ++i)
+ {
+ const VmaSuballocation& suballoc = suballocations2nd[i];
+ if (suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ {
+ if (!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
+ {
+ VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
+ return VK_ERROR_UNKNOWN_COPY;
+ }
+ }
+ }
+
+ return VK_SUCCESS;
+}
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+void VmaBlockMetadata_Linear::Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData)
+{
+ const VkDeviceSize offset = (VkDeviceSize)request.allocHandle - 1;
+ const VmaSuballocation newSuballoc = { offset, request.size, userData, type };
+
+ switch (request.type)
{
- VMA_ASSERT(0 && "Trying to use pool with linear algorithm as double stack, while it is already being used as ring buffer.");
- return false;
+ case VmaAllocationRequestType::UpperAddress:
+ {
+ VMA_ASSERT(m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER &&
+ "CRITICAL ERROR: Trying to use linear allocator as double stack while it was already used as ring buffer.");
+ SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ suballocations2nd.push_back(newSuballoc);
+ m_2ndVectorMode = SECOND_VECTOR_DOUBLE_STACK;
}
+ break;
+ case VmaAllocationRequestType::EndOf1st:
+ {
+ SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- // Try to allocate before 2nd.back(), or end of block if 2nd.empty().
- if(allocSize > size)
+ VMA_ASSERT(suballocations1st.empty() ||
+ offset >= suballocations1st.back().offset + suballocations1st.back().size);
+ // Check if it fits before the end of the block.
+ VMA_ASSERT(offset + request.size <= GetSize());
+
+ suballocations1st.push_back(newSuballoc);
+ }
+ break;
+ case VmaAllocationRequestType::EndOf2nd:
{
- return false;
+ SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ // New allocation at the end of 2-part ring buffer, so before first allocation from 1st vector.
+ VMA_ASSERT(!suballocations1st.empty() &&
+ offset + request.size <= suballocations1st[m_1stNullItemsBeginCount].offset);
+ SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+
+ switch (m_2ndVectorMode)
+ {
+ case SECOND_VECTOR_EMPTY:
+ // First allocation from second part ring buffer.
+ VMA_ASSERT(suballocations2nd.empty());
+ m_2ndVectorMode = SECOND_VECTOR_RING_BUFFER;
+ break;
+ case SECOND_VECTOR_RING_BUFFER:
+ // 2-part ring buffer is already started.
+ VMA_ASSERT(!suballocations2nd.empty());
+ break;
+ case SECOND_VECTOR_DOUBLE_STACK:
+ VMA_ASSERT(0 && "CRITICAL ERROR: Trying to use linear allocator as ring buffer while it was already used as double stack.");
+ break;
+ default:
+ VMA_ASSERT(0);
+ }
+
+ suballocations2nd.push_back(newSuballoc);
+ }
+ break;
+ default:
+ VMA_ASSERT(0 && "CRITICAL INTERNAL ERROR.");
}
- VkDeviceSize resultBaseOffset = size - allocSize;
- if(!suballocations2nd.empty())
+
+ m_SumFreeSize -= newSuballoc.size;
+}
+
+void VmaBlockMetadata_Linear::Free(VmaAllocHandle allocHandle)
+{
+ SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ VkDeviceSize offset = (VkDeviceSize)allocHandle - 1;
+
+ if (!suballocations1st.empty())
{
- const VmaSuballocation& lastSuballoc = suballocations2nd.back();
- resultBaseOffset = lastSuballoc.offset - allocSize;
- if(allocSize > lastSuballoc.offset)
+ // First allocation: Mark it as next empty at the beginning.
+ VmaSuballocation& firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];
+ if (firstSuballoc.offset == offset)
{
- return false;
+ firstSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
+ firstSuballoc.userData = VMA_NULL;
+ m_SumFreeSize += firstSuballoc.size;
+ ++m_1stNullItemsBeginCount;
+ CleanupAfterFree();
+ return;
}
}
- // Start from offset equal to end of free space.
- VkDeviceSize resultOffset = resultBaseOffset;
+ // Last allocation in 2-part ring buffer or top of upper stack (same logic).
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ||
+ m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ {
+ VmaSuballocation& lastSuballoc = suballocations2nd.back();
+ if (lastSuballoc.offset == offset)
+ {
+ m_SumFreeSize += lastSuballoc.size;
+ suballocations2nd.pop_back();
+ CleanupAfterFree();
+ return;
+ }
+ }
+ // Last allocation in 1st vector.
+ else if (m_2ndVectorMode == SECOND_VECTOR_EMPTY)
+ {
+ VmaSuballocation& lastSuballoc = suballocations1st.back();
+ if (lastSuballoc.offset == offset)
+ {
+ m_SumFreeSize += lastSuballoc.size;
+ suballocations1st.pop_back();
+ CleanupAfterFree();
+ return;
+ }
+ }
+
+ VmaSuballocation refSuballoc;
+ refSuballoc.offset = offset;
+ // Rest of members stays uninitialized intentionally for better performance.
- // Apply VMA_DEBUG_MARGIN at the end.
- if(VMA_DEBUG_MARGIN > 0)
+ // Item from the middle of 1st vector.
{
- if(resultOffset < VMA_DEBUG_MARGIN)
+ const SuballocationVectorType::iterator it = VmaBinaryFindSorted(
+ suballocations1st.begin() + m_1stNullItemsBeginCount,
+ suballocations1st.end(),
+ refSuballoc,
+ VmaSuballocationOffsetLess());
+ if (it != suballocations1st.end())
{
- return false;
+ it->type = VMA_SUBALLOCATION_TYPE_FREE;
+ it->userData = VMA_NULL;
+ ++m_1stNullItemsMiddleCount;
+ m_SumFreeSize += it->size;
+ CleanupAfterFree();
+ return;
}
- resultOffset -= VMA_DEBUG_MARGIN;
}
- // Apply alignment.
- resultOffset = VmaAlignDown(resultOffset, allocAlignment);
+ if (m_2ndVectorMode != SECOND_VECTOR_EMPTY)
+ {
+ // Item from the middle of 2nd vector.
+ const SuballocationVectorType::iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?
+ VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) :
+ VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater());
+ if (it != suballocations2nd.end())
+ {
+ it->type = VMA_SUBALLOCATION_TYPE_FREE;
+ it->userData = VMA_NULL;
+ ++m_2ndNullItemsCount;
+ m_SumFreeSize += it->size;
+ CleanupAfterFree();
+ return;
+ }
+ }
- // Check next suballocations from 2nd for BufferImageGranularity conflicts.
- // Make bigger alignment if necessary.
- if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty())
+ VMA_ASSERT(0 && "Allocation to free not found in linear allocator!");
+}
+
+void VmaBlockMetadata_Linear::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
+{
+ outInfo.offset = (VkDeviceSize)allocHandle - 1;
+ VmaSuballocation& suballoc = FindSuballocation(outInfo.offset);
+ outInfo.size = suballoc.size;
+ outInfo.pUserData = suballoc.userData;
+}
+
+void* VmaBlockMetadata_Linear::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ return FindSuballocation((VkDeviceSize)allocHandle - 1).userData;
+}
+
+VmaAllocHandle VmaBlockMetadata_Linear::GetAllocationListBegin() const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_Linear::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+}
+
+void VmaBlockMetadata_Linear::Clear()
+{
+ m_SumFreeSize = GetSize();
+ m_Suballocations0.clear();
+ m_Suballocations1.clear();
+ // Leaving m_1stVectorIndex unchanged - it doesn't matter.
+ m_2ndVectorMode = SECOND_VECTOR_EMPTY;
+ m_1stNullItemsBeginCount = 0;
+ m_1stNullItemsMiddleCount = 0;
+ m_2ndNullItemsCount = 0;
+}
+
+void VmaBlockMetadata_Linear::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
+{
+ VmaSuballocation& suballoc = FindSuballocation((VkDeviceSize)allocHandle - 1);
+ suballoc.userData = userData;
+}
+
+void VmaBlockMetadata_Linear::DebugLogAllAllocations() const
+{
+ const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ for (auto it = suballocations1st.begin() + m_1stNullItemsBeginCount; it != suballocations1st.end(); ++it)
+ if (it->type != VMA_SUBALLOCATION_TYPE_FREE)
+ DebugLogAllocation(it->offset, it->size, it->userData);
+
+ const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ for (auto it = suballocations2nd.begin(); it != suballocations2nd.end(); ++it)
+ if (it->type != VMA_SUBALLOCATION_TYPE_FREE)
+ DebugLogAllocation(it->offset, it->size, it->userData);
+}
+
+VmaSuballocation& VmaBlockMetadata_Linear::FindSuballocation(VkDeviceSize offset) const
+{
+ const SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ const SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+
+ VmaSuballocation refSuballoc;
+ refSuballoc.offset = offset;
+ // Rest of members stays uninitialized intentionally for better performance.
+
+ // Item from the 1st vector.
{
- bool bufferImageGranularityConflict = false;
- for(size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )
+ SuballocationVectorType::const_iterator it = VmaBinaryFindSorted(
+ suballocations1st.begin() + m_1stNullItemsBeginCount,
+ suballocations1st.end(),
+ refSuballoc,
+ VmaSuballocationOffsetLess());
+ if (it != suballocations1st.end())
{
- const VmaSuballocation& nextSuballoc = suballocations2nd[nextSuballocIndex];
- if(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
- {
- if(VmaIsBufferImageGranularityConflict(nextSuballoc.type, allocType))
- {
- bufferImageGranularityConflict = true;
- break;
- }
- }
- else
- // Already on previous page.
- break;
+ return const_cast<VmaSuballocation&>(*it);
}
- if(bufferImageGranularityConflict)
+ }
+
+ if (m_2ndVectorMode != SECOND_VECTOR_EMPTY)
+ {
+ // Rest of members stays uninitialized intentionally for better performance.
+ SuballocationVectorType::const_iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?
+ VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) :
+ VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater());
+ if (it != suballocations2nd.end())
{
- resultOffset = VmaAlignDown(resultOffset, bufferImageGranularity);
+ return const_cast<VmaSuballocation&>(*it);
}
}
- // There is enough free space.
- const VkDeviceSize endOf1st = !suballocations1st.empty() ?
- suballocations1st.back().offset + suballocations1st.back().size :
- 0;
- if(endOf1st + VMA_DEBUG_MARGIN <= resultOffset)
+ VMA_ASSERT(0 && "Allocation not found in linear allocator!");
+ return const_cast<VmaSuballocation&>(suballocations1st.back()); // Should never occur.
+}
+
+bool VmaBlockMetadata_Linear::ShouldCompact1st() const
+{
+ const size_t nullItemCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;
+ const size_t suballocCount = AccessSuballocations1st().size();
+ return suballocCount > 32 && nullItemCount * 2 >= (suballocCount - nullItemCount) * 3;
+}
+
+void VmaBlockMetadata_Linear::CleanupAfterFree()
+{
+ SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+
+ if (IsEmpty())
{
- // Check previous suballocations for BufferImageGranularity conflicts.
- // If conflict exists, allocation cannot be made here.
- if(bufferImageGranularity > 1)
+ suballocations1st.clear();
+ suballocations2nd.clear();
+ m_1stNullItemsBeginCount = 0;
+ m_1stNullItemsMiddleCount = 0;
+ m_2ndNullItemsCount = 0;
+ m_2ndVectorMode = SECOND_VECTOR_EMPTY;
+ }
+ else
+ {
+ const size_t suballoc1stCount = suballocations1st.size();
+ const size_t nullItem1stCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;
+ VMA_ASSERT(nullItem1stCount <= suballoc1stCount);
+
+ // Find more null items at the beginning of 1st vector.
+ while (m_1stNullItemsBeginCount < suballoc1stCount &&
+ suballocations1st[m_1stNullItemsBeginCount].type == VMA_SUBALLOCATION_TYPE_FREE)
+ {
+ ++m_1stNullItemsBeginCount;
+ --m_1stNullItemsMiddleCount;
+ }
+
+ // Find more null items at the end of 1st vector.
+ while (m_1stNullItemsMiddleCount > 0 &&
+ suballocations1st.back().type == VMA_SUBALLOCATION_TYPE_FREE)
+ {
+ --m_1stNullItemsMiddleCount;
+ suballocations1st.pop_back();
+ }
+
+ // Find more null items at the end of 2nd vector.
+ while (m_2ndNullItemsCount > 0 &&
+ suballocations2nd.back().type == VMA_SUBALLOCATION_TYPE_FREE)
+ {
+ --m_2ndNullItemsCount;
+ suballocations2nd.pop_back();
+ }
+
+ // Find more null items at the beginning of 2nd vector.
+ while (m_2ndNullItemsCount > 0 &&
+ suballocations2nd[0].type == VMA_SUBALLOCATION_TYPE_FREE)
{
- for(size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )
+ --m_2ndNullItemsCount;
+ VmaVectorRemove(suballocations2nd, 0);
+ }
+
+ if (ShouldCompact1st())
+ {
+ const size_t nonNullItemCount = suballoc1stCount - nullItem1stCount;
+ size_t srcIndex = m_1stNullItemsBeginCount;
+ for (size_t dstIndex = 0; dstIndex < nonNullItemCount; ++dstIndex)
{
- const VmaSuballocation& prevSuballoc = suballocations1st[prevSuballocIndex];
- if(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))
+ while (suballocations1st[srcIndex].type == VMA_SUBALLOCATION_TYPE_FREE)
{
- if(VmaIsBufferImageGranularityConflict(allocType, prevSuballoc.type))
- {
- return false;
- }
+ ++srcIndex;
}
- else
+ if (dstIndex != srcIndex)
{
- // Already on next page.
- break;
+ suballocations1st[dstIndex] = suballocations1st[srcIndex];
}
+ ++srcIndex;
}
+ suballocations1st.resize(nonNullItemCount);
+ m_1stNullItemsBeginCount = 0;
+ m_1stNullItemsMiddleCount = 0;
}
- // All tests passed: Success.
- pAllocationRequest->offset = resultOffset;
- pAllocationRequest->sumFreeSize = resultBaseOffset + allocSize - endOf1st;
- pAllocationRequest->sumItemSize = 0;
- // pAllocationRequest->item unused.
- pAllocationRequest->itemsToMakeLostCount = 0;
- pAllocationRequest->type = VmaAllocationRequestType::UpperAddress;
- return true;
+ // 2nd vector became empty.
+ if (suballocations2nd.empty())
+ {
+ m_2ndVectorMode = SECOND_VECTOR_EMPTY;
+ }
+
+ // 1st vector became empty.
+ if (suballocations1st.size() - m_1stNullItemsBeginCount == 0)
+ {
+ suballocations1st.clear();
+ m_1stNullItemsBeginCount = 0;
+
+ if (!suballocations2nd.empty() && m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ {
+ // Swap 1st with 2nd. Now 2nd is empty.
+ m_2ndVectorMode = SECOND_VECTOR_EMPTY;
+ m_1stNullItemsMiddleCount = m_2ndNullItemsCount;
+ while (m_1stNullItemsBeginCount < suballocations2nd.size() &&
+ suballocations2nd[m_1stNullItemsBeginCount].type == VMA_SUBALLOCATION_TYPE_FREE)
+ {
+ ++m_1stNullItemsBeginCount;
+ --m_1stNullItemsMiddleCount;
+ }
+ m_2ndNullItemsCount = 0;
+ m_1stVectorIndex ^= 1;
+ }
+ }
}
- return false;
+ VMA_HEAVY_ASSERT(Validate());
}
bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
VmaSuballocationType allocType,
- bool canMakeOtherLost,
uint32_t strategy,
VmaAllocationRequest* pAllocationRequest)
{
- const VkDeviceSize size = GetSize();
+ const VkDeviceSize blockSize = GetSize();
+ const VkDeviceSize debugMargin = GetDebugMargin();
+ const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity();
SuballocationVectorType& suballocations1st = AccessSuballocations1st();
SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- if(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if (m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
// Try to allocate at the end of 1st vector.
VkDeviceSize resultBaseOffset = 0;
- if(!suballocations1st.empty())
+ if (!suballocations1st.empty())
{
const VmaSuballocation& lastSuballoc = suballocations1st.back();
- resultBaseOffset = lastSuballoc.offset + lastSuballoc.size;
+ resultBaseOffset = lastSuballoc.offset + lastSuballoc.size + debugMargin;
}
// Start from offset equal to beginning of free space.
VkDeviceSize resultOffset = resultBaseOffset;
- // Apply VMA_DEBUG_MARGIN at the beginning.
- if(VMA_DEBUG_MARGIN > 0)
- {
- resultOffset += VMA_DEBUG_MARGIN;
- }
-
// Apply alignment.
resultOffset = VmaAlignUp(resultOffset, allocAlignment);
// Check previous suballocations for BufferImageGranularity conflicts.
// Make bigger alignment if necessary.
- if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations1st.empty())
+ if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations1st.empty())
{
bool bufferImageGranularityConflict = false;
- for(size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )
+ for (size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )
{
const VmaSuballocation& prevSuballoc = suballocations1st[prevSuballocIndex];
- if(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))
+ if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))
{
- if(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
+ if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
{
bufferImageGranularityConflict = true;
break;
@@ -11457,28 +8917,28 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
// Already on previous page.
break;
}
- if(bufferImageGranularityConflict)
+ if (bufferImageGranularityConflict)
{
resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity);
}
}
const VkDeviceSize freeSpaceEnd = m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK ?
- suballocations2nd.back().offset : size;
+ suballocations2nd.back().offset : blockSize;
// There is enough free space at the end after alignment.
- if(resultOffset + allocSize + VMA_DEBUG_MARGIN <= freeSpaceEnd)
+ if (resultOffset + allocSize + debugMargin <= freeSpaceEnd)
{
// Check next suballocations for BufferImageGranularity conflicts.
// If conflict exists, allocation cannot be made here.
- if((allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) && m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
+ if ((allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity) && m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
{
- for(size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )
+ for (size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )
{
const VmaSuballocation& nextSuballoc = suballocations2nd[nextSuballocIndex];
- if(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
+ if (VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
{
- if(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
+ if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
{
return false;
}
@@ -11492,52 +8952,43 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
}
// All tests passed: Success.
- pAllocationRequest->offset = resultOffset;
- pAllocationRequest->sumFreeSize = freeSpaceEnd - resultBaseOffset;
- pAllocationRequest->sumItemSize = 0;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)(resultOffset + 1);
// pAllocationRequest->item, customData unused.
pAllocationRequest->type = VmaAllocationRequestType::EndOf1st;
- pAllocationRequest->itemsToMakeLostCount = 0;
return true;
}
}
// Wrap-around to end of 2nd vector. Try to allocate there, watching for the
// beginning of 1st vector as the end of free space.
- if(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
+ if (m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
VMA_ASSERT(!suballocations1st.empty());
VkDeviceSize resultBaseOffset = 0;
- if(!suballocations2nd.empty())
+ if (!suballocations2nd.empty())
{
const VmaSuballocation& lastSuballoc = suballocations2nd.back();
- resultBaseOffset = lastSuballoc.offset + lastSuballoc.size;
+ resultBaseOffset = lastSuballoc.offset + lastSuballoc.size + debugMargin;
}
// Start from offset equal to beginning of free space.
VkDeviceSize resultOffset = resultBaseOffset;
- // Apply VMA_DEBUG_MARGIN at the beginning.
- if(VMA_DEBUG_MARGIN > 0)
- {
- resultOffset += VMA_DEBUG_MARGIN;
- }
-
// Apply alignment.
resultOffset = VmaAlignUp(resultOffset, allocAlignment);
// Check previous suballocations for BufferImageGranularity conflicts.
// Make bigger alignment if necessary.
- if(bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty())
+ if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty())
{
bool bufferImageGranularityConflict = false;
- for(size_t prevSuballocIndex = suballocations2nd.size(); prevSuballocIndex--; )
+ for (size_t prevSuballocIndex = suballocations2nd.size(); prevSuballocIndex--; )
{
const VmaSuballocation& prevSuballoc = suballocations2nd[prevSuballocIndex];
- if(VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))
+ if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))
{
- if(VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
+ if (VmaIsBufferImageGranularityConflict(prevSuballoc.type, allocType))
{
bufferImageGranularityConflict = true;
break;
@@ -11547,102 +8998,30 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
// Already on previous page.
break;
}
- if(bufferImageGranularityConflict)
+ if (bufferImageGranularityConflict)
{
resultOffset = VmaAlignUp(resultOffset, bufferImageGranularity);
}
}
- pAllocationRequest->itemsToMakeLostCount = 0;
- pAllocationRequest->sumItemSize = 0;
size_t index1st = m_1stNullItemsBeginCount;
- if(canMakeOtherLost)
- {
- while(index1st < suballocations1st.size() &&
- resultOffset + allocSize + VMA_DEBUG_MARGIN > suballocations1st[index1st].offset)
- {
- // Next colliding allocation at the beginning of 1st vector found. Try to make it lost.
- const VmaSuballocation& suballoc = suballocations1st[index1st];
- if(suballoc.type == VMA_SUBALLOCATION_TYPE_FREE)
- {
- // No problem.
- }
- else
- {
- VMA_ASSERT(suballoc.hAllocation != VK_NULL_HANDLE);
- if(suballoc.hAllocation->CanBecomeLost() &&
- suballoc.hAllocation->GetLastUseFrameIndex() + frameInUseCount < currentFrameIndex)
- {
- ++pAllocationRequest->itemsToMakeLostCount;
- pAllocationRequest->sumItemSize += suballoc.size;
- }
- else
- {
- return false;
- }
- }
- ++index1st;
- }
-
- // Check next suballocations for BufferImageGranularity conflicts.
- // If conflict exists, we must mark more allocations lost or fail.
- if(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)
- {
- while(index1st < suballocations1st.size())
- {
- const VmaSuballocation& suballoc = suballocations1st[index1st];
- if(VmaBlocksOnSamePage(resultOffset, allocSize, suballoc.offset, bufferImageGranularity))
- {
- if(suballoc.hAllocation != VK_NULL_HANDLE)
- {
- // Not checking actual VmaIsBufferImageGranularityConflict(allocType, suballoc.type).
- if(suballoc.hAllocation->CanBecomeLost() &&
- suballoc.hAllocation->GetLastUseFrameIndex() + frameInUseCount < currentFrameIndex)
- {
- ++pAllocationRequest->itemsToMakeLostCount;
- pAllocationRequest->sumItemSize += suballoc.size;
- }
- else
- {
- return false;
- }
- }
- }
- else
- {
- // Already on next page.
- break;
- }
- ++index1st;
- }
- }
-
- // Special case: There is not enough room at the end for this allocation, even after making all from the 1st lost.
- if(index1st == suballocations1st.size() &&
- resultOffset + allocSize + VMA_DEBUG_MARGIN > size)
- {
- // TODO: This is a known bug that it's not yet implemented and the allocation is failing.
- VMA_DEBUG_LOG("Unsupported special case in custom pool with linear allocation algorithm used as ring buffer with allocations that can be lost.");
- }
- }
-
// There is enough free space at the end after alignment.
- if((index1st == suballocations1st.size() && resultOffset + allocSize + VMA_DEBUG_MARGIN <= size) ||
- (index1st < suballocations1st.size() && resultOffset + allocSize + VMA_DEBUG_MARGIN <= suballocations1st[index1st].offset))
+ if ((index1st == suballocations1st.size() && resultOffset + allocSize + debugMargin <= blockSize) ||
+ (index1st < suballocations1st.size() && resultOffset + allocSize + debugMargin <= suballocations1st[index1st].offset))
{
// Check next suballocations for BufferImageGranularity conflicts.
// If conflict exists, allocation cannot be made here.
- if(allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)
+ if (allocSize % bufferImageGranularity || resultOffset % bufferImageGranularity)
{
- for(size_t nextSuballocIndex = index1st;
+ for (size_t nextSuballocIndex = index1st;
nextSuballocIndex < suballocations1st.size();
nextSuballocIndex++)
{
const VmaSuballocation& nextSuballoc = suballocations1st[nextSuballocIndex];
- if(VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
+ if (VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
{
- if(VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
+ if (VmaIsBufferImageGranularityConflict(allocType, nextSuballoc.type))
{
return false;
}
@@ -11656,11 +9035,7 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
}
// All tests passed: Success.
- pAllocationRequest->offset = resultOffset;
- pAllocationRequest->sumFreeSize =
- (index1st < suballocations1st.size() ? suballocations1st[index1st].offset : size)
- - resultBaseOffset
- - pAllocationRequest->sumItemSize;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)(resultOffset + 1);
pAllocationRequest->type = VmaAllocationRequestType::EndOf2nd;
// pAllocationRequest->item, customData unused.
return true;
@@ -11670,437 +9045,278 @@ bool VmaBlockMetadata_Linear::CreateAllocationRequest_LowerAddress(
return false;
}
-bool VmaBlockMetadata_Linear::MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
+bool VmaBlockMetadata_Linear::CreateAllocationRequest_UpperAddress(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
VmaAllocationRequest* pAllocationRequest)
{
- if(pAllocationRequest->itemsToMakeLostCount == 0)
- {
- return true;
- }
-
- VMA_ASSERT(m_2ndVectorMode == SECOND_VECTOR_EMPTY || m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER);
+ const VkDeviceSize blockSize = GetSize();
+ const VkDeviceSize bufferImageGranularity = GetBufferImageGranularity();
+ SuballocationVectorType& suballocations1st = AccessSuballocations1st();
+ SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- // We always start from 1st.
- SuballocationVectorType* suballocations = &AccessSuballocations1st();
- size_t index = m_1stNullItemsBeginCount;
- size_t madeLostCount = 0;
- while(madeLostCount < pAllocationRequest->itemsToMakeLostCount)
+ if (m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
{
- if(index == suballocations->size())
- {
- index = 0;
- // If we get to the end of 1st, we wrap around to beginning of 2nd of 1st.
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
- {
- suballocations = &AccessSuballocations2nd();
- }
- // else: m_2ndVectorMode == SECOND_VECTOR_EMPTY:
- // suballocations continues pointing at AccessSuballocations1st().
- VMA_ASSERT(!suballocations->empty());
- }
- VmaSuballocation& suballoc = (*suballocations)[index];
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
- {
- VMA_ASSERT(suballoc.hAllocation != VK_NULL_HANDLE);
- VMA_ASSERT(suballoc.hAllocation->CanBecomeLost());
- if(suballoc.hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
- {
- suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
- suballoc.hAllocation = VK_NULL_HANDLE;
- m_SumFreeSize += suballoc.size;
- if(suballocations == &AccessSuballocations1st())
- {
- ++m_1stNullItemsMiddleCount;
- }
- else
- {
- ++m_2ndNullItemsCount;
- }
- ++madeLostCount;
- }
- else
- {
- return false;
- }
- }
- ++index;
+ VMA_ASSERT(0 && "Trying to use pool with linear algorithm as double stack, while it is already being used as ring buffer.");
+ return false;
}
- CleanupAfterFree();
- //VMA_HEAVY_ASSERT(Validate()); // Already called by CleanupAfterFree().
-
- return true;
-}
-
-uint32_t VmaBlockMetadata_Linear::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
-{
- uint32_t lostAllocationCount = 0;
-
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- for(size_t i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i < count; ++i)
+ // Try to allocate before 2nd.back(), or end of block if 2nd.empty().
+ if (allocSize > blockSize)
{
- VmaSuballocation& suballoc = suballocations1st[i];
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &&
- suballoc.hAllocation->CanBecomeLost() &&
- suballoc.hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
- {
- suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
- suballoc.hAllocation = VK_NULL_HANDLE;
- ++m_1stNullItemsMiddleCount;
- m_SumFreeSize += suballoc.size;
- ++lostAllocationCount;
- }
+ return false;
}
-
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- for(size_t i = 0, count = suballocations2nd.size(); i < count; ++i)
+ VkDeviceSize resultBaseOffset = blockSize - allocSize;
+ if (!suballocations2nd.empty())
{
- VmaSuballocation& suballoc = suballocations2nd[i];
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE &&
- suballoc.hAllocation->CanBecomeLost() &&
- suballoc.hAllocation->MakeLost(currentFrameIndex, frameInUseCount))
+ const VmaSuballocation& lastSuballoc = suballocations2nd.back();
+ resultBaseOffset = lastSuballoc.offset - allocSize;
+ if (allocSize > lastSuballoc.offset)
{
- suballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
- suballoc.hAllocation = VK_NULL_HANDLE;
- ++m_2ndNullItemsCount;
- m_SumFreeSize += suballoc.size;
- ++lostAllocationCount;
+ return false;
}
}
- if(lostAllocationCount)
- {
- CleanupAfterFree();
- }
+ // Start from offset equal to end of free space.
+ VkDeviceSize resultOffset = resultBaseOffset;
- return lostAllocationCount;
-}
+ const VkDeviceSize debugMargin = GetDebugMargin();
-VkResult VmaBlockMetadata_Linear::CheckCorruption(const void* pBlockData)
-{
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- for(size_t i = m_1stNullItemsBeginCount, count = suballocations1st.size(); i < count; ++i)
+ // Apply debugMargin at the end.
+ if (debugMargin > 0)
{
- const VmaSuballocation& suballoc = suballocations1st[i];
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ if (resultOffset < debugMargin)
{
- if(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))
- {
- VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!");
- return VK_ERROR_VALIDATION_FAILED_EXT;
- }
- if(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
- {
- VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_VALIDATION_FAILED_EXT;
- }
+ return false;
}
+ resultOffset -= debugMargin;
}
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- for(size_t i = 0, count = suballocations2nd.size(); i < count; ++i)
+ // Apply alignment.
+ resultOffset = VmaAlignDown(resultOffset, allocAlignment);
+
+ // Check next suballocations from 2nd for BufferImageGranularity conflicts.
+ // Make bigger alignment if necessary.
+ if (bufferImageGranularity > 1 && bufferImageGranularity != allocAlignment && !suballocations2nd.empty())
{
- const VmaSuballocation& suballoc = suballocations2nd[i];
- if(suballoc.type != VMA_SUBALLOCATION_TYPE_FREE)
+ bool bufferImageGranularityConflict = false;
+ for (size_t nextSuballocIndex = suballocations2nd.size(); nextSuballocIndex--; )
{
- if(!VmaValidateMagicValue(pBlockData, suballoc.offset - VMA_DEBUG_MARGIN))
- {
- VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED BEFORE VALIDATED ALLOCATION!");
- return VK_ERROR_VALIDATION_FAILED_EXT;
- }
- if(!VmaValidateMagicValue(pBlockData, suballoc.offset + suballoc.size))
+ const VmaSuballocation& nextSuballoc = suballocations2nd[nextSuballocIndex];
+ if (VmaBlocksOnSamePage(resultOffset, allocSize, nextSuballoc.offset, bufferImageGranularity))
{
- VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
- return VK_ERROR_VALIDATION_FAILED_EXT;
+ if (VmaIsBufferImageGranularityConflict(nextSuballoc.type, allocType))
+ {
+ bufferImageGranularityConflict = true;
+ break;
+ }
}
+ else
+ // Already on previous page.
+ break;
}
- }
-
- return VK_SUCCESS;
-}
-
-void VmaBlockMetadata_Linear::Alloc(
- const VmaAllocationRequest& request,
- VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation)
-{
- const VmaSuballocation newSuballoc = { request.offset, allocSize, hAllocation, type };
-
- switch(request.type)
- {
- case VmaAllocationRequestType::UpperAddress:
+ if (bufferImageGranularityConflict)
{
- VMA_ASSERT(m_2ndVectorMode != SECOND_VECTOR_RING_BUFFER &&
- "CRITICAL ERROR: Trying to use linear allocator as double stack while it was already used as ring buffer.");
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
- suballocations2nd.push_back(newSuballoc);
- m_2ndVectorMode = SECOND_VECTOR_DOUBLE_STACK;
+ resultOffset = VmaAlignDown(resultOffset, bufferImageGranularity);
}
- break;
- case VmaAllocationRequestType::EndOf1st:
- {
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
-
- VMA_ASSERT(suballocations1st.empty() ||
- request.offset >= suballocations1st.back().offset + suballocations1st.back().size);
- // Check if it fits before the end of the block.
- VMA_ASSERT(request.offset + allocSize <= GetSize());
+ }
- suballocations1st.push_back(newSuballoc);
- }
- break;
- case VmaAllocationRequestType::EndOf2nd:
+ // There is enough free space.
+ const VkDeviceSize endOf1st = !suballocations1st.empty() ?
+ suballocations1st.back().offset + suballocations1st.back().size :
+ 0;
+ if (endOf1st + debugMargin <= resultOffset)
+ {
+ // Check previous suballocations for BufferImageGranularity conflicts.
+ // If conflict exists, allocation cannot be made here.
+ if (bufferImageGranularity > 1)
{
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- // New allocation at the end of 2-part ring buffer, so before first allocation from 1st vector.
- VMA_ASSERT(!suballocations1st.empty() &&
- request.offset + allocSize <= suballocations1st[m_1stNullItemsBeginCount].offset);
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
-
- switch(m_2ndVectorMode)
+ for (size_t prevSuballocIndex = suballocations1st.size(); prevSuballocIndex--; )
{
- case SECOND_VECTOR_EMPTY:
- // First allocation from second part ring buffer.
- VMA_ASSERT(suballocations2nd.empty());
- m_2ndVectorMode = SECOND_VECTOR_RING_BUFFER;
- break;
- case SECOND_VECTOR_RING_BUFFER:
- // 2-part ring buffer is already started.
- VMA_ASSERT(!suballocations2nd.empty());
- break;
- case SECOND_VECTOR_DOUBLE_STACK:
- VMA_ASSERT(0 && "CRITICAL ERROR: Trying to use linear allocator as ring buffer while it was already used as double stack.");
- break;
- default:
- VMA_ASSERT(0);
+ const VmaSuballocation& prevSuballoc = suballocations1st[prevSuballocIndex];
+ if (VmaBlocksOnSamePage(prevSuballoc.offset, prevSuballoc.size, resultOffset, bufferImageGranularity))
+ {
+ if (VmaIsBufferImageGranularityConflict(allocType, prevSuballoc.type))
+ {
+ return false;
+ }
+ }
+ else
+ {
+ // Already on next page.
+ break;
+ }
}
-
- suballocations2nd.push_back(newSuballoc);
}
- break;
- default:
- VMA_ASSERT(0 && "CRITICAL INTERNAL ERROR.");
+
+ // All tests passed: Success.
+ pAllocationRequest->allocHandle = (VmaAllocHandle)(resultOffset + 1);
+ // pAllocationRequest->item unused.
+ pAllocationRequest->type = VmaAllocationRequestType::UpperAddress;
+ return true;
}
- m_SumFreeSize -= newSuballoc.size;
+ return false;
}
+#endif // _VMA_BLOCK_METADATA_LINEAR_FUNCTIONS
+#endif // _VMA_BLOCK_METADATA_LINEAR
-void VmaBlockMetadata_Linear::Free(const VmaAllocation allocation)
-{
- FreeAtOffset(allocation->GetOffset());
-}
+#if 0
+#ifndef _VMA_BLOCK_METADATA_BUDDY
+/*
+- GetSize() is the original size of allocated memory block.
+- m_UsableSize is this size aligned down to a power of two.
+ All allocations and calculations happen relative to m_UsableSize.
+- GetUnusableSize() is the difference between them.
+ It is reported as separate, unused range, not available for allocations.
-void VmaBlockMetadata_Linear::FreeAtOffset(VkDeviceSize offset)
+Node at level 0 has size = m_UsableSize.
+Each next level contains nodes with size 2 times smaller than current level.
+m_LevelCount is the maximum number of levels to use in the current object.
+*/
+class VmaBlockMetadata_Buddy : public VmaBlockMetadata
{
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ VMA_CLASS_NO_COPY(VmaBlockMetadata_Buddy)
+public:
+ VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
+ virtual ~VmaBlockMetadata_Buddy();
- if(!suballocations1st.empty())
- {
- // First allocation: Mark it as next empty at the beginning.
- VmaSuballocation& firstSuballoc = suballocations1st[m_1stNullItemsBeginCount];
- if(firstSuballoc.offset == offset)
- {
- firstSuballoc.type = VMA_SUBALLOCATION_TYPE_FREE;
- firstSuballoc.hAllocation = VK_NULL_HANDLE;
- m_SumFreeSize += firstSuballoc.size;
- ++m_1stNullItemsBeginCount;
- CleanupAfterFree();
- return;
- }
- }
+ size_t GetAllocationCount() const override { return m_AllocationCount; }
+ VkDeviceSize GetSumFreeSize() const override { return m_SumFreeSize + GetUnusableSize(); }
+ bool IsEmpty() const override { return m_Root->type == Node::TYPE_FREE; }
+ VkResult CheckCorruption(const void* pBlockData) override { return VK_ERROR_FEATURE_NOT_PRESENT; }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return (VkDeviceSize)allocHandle - 1; };
+ void DebugLogAllAllocations() const override { DebugLogAllAllocationNode(m_Root, 0); }
- // Last allocation in 2-part ring buffer or top of upper stack (same logic).
- if(m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ||
- m_2ndVectorMode == SECOND_VECTOR_DOUBLE_STACK)
- {
- VmaSuballocation& lastSuballoc = suballocations2nd.back();
- if(lastSuballoc.offset == offset)
- {
- m_SumFreeSize += lastSuballoc.size;
- suballocations2nd.pop_back();
- CleanupAfterFree();
- return;
- }
- }
- // Last allocation in 1st vector.
- else if(m_2ndVectorMode == SECOND_VECTOR_EMPTY)
- {
- VmaSuballocation& lastSuballoc = suballocations1st.back();
- if(lastSuballoc.offset == offset)
- {
- m_SumFreeSize += lastSuballoc.size;
- suballocations1st.pop_back();
- CleanupAfterFree();
- return;
- }
- }
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
- // Item from the middle of 1st vector.
- {
- VmaSuballocation refSuballoc;
- refSuballoc.offset = offset;
- // Rest of members stays uninitialized intentionally for better performance.
- SuballocationVectorType::iterator it = VmaBinaryFindSorted(
- suballocations1st.begin() + m_1stNullItemsBeginCount,
- suballocations1st.end(),
- refSuballoc,
- VmaSuballocationOffsetLess());
- if(it != suballocations1st.end())
- {
- it->type = VMA_SUBALLOCATION_TYPE_FREE;
- it->hAllocation = VK_NULL_HANDLE;
- ++m_1stNullItemsMiddleCount;
- m_SumFreeSize += it->size;
- CleanupAfterFree();
- return;
- }
- }
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
- if(m_2ndVectorMode != SECOND_VECTOR_EMPTY)
- {
- // Item from the middle of 2nd vector.
- VmaSuballocation refSuballoc;
- refSuballoc.offset = offset;
- // Rest of members stays uninitialized intentionally for better performance.
- SuballocationVectorType::iterator it = m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER ?
- VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetLess()) :
- VmaBinaryFindSorted(suballocations2nd.begin(), suballocations2nd.end(), refSuballoc, VmaSuballocationOffsetGreater());
- if(it != suballocations2nd.end())
- {
- it->type = VMA_SUBALLOCATION_TYPE_FREE;
- it->hAllocation = VK_NULL_HANDLE;
- ++m_2ndNullItemsCount;
- m_SumFreeSize += it->size;
- CleanupAfterFree();
- return;
- }
- }
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
+#endif
- VMA_ASSERT(0 && "Allocation to free not found in linear allocator!");
-}
+ bool CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest) override;
-bool VmaBlockMetadata_Linear::ShouldCompact1st() const
-{
- const size_t nullItemCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;
- const size_t suballocCount = AccessSuballocations1st().size();
- return suballocCount > 32 && nullItemCount * 2 >= (suballocCount - nullItemCount) * 3;
-}
+ void Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData) override;
-void VmaBlockMetadata_Linear::CleanupAfterFree()
-{
- SuballocationVectorType& suballocations1st = AccessSuballocations1st();
- SuballocationVectorType& suballocations2nd = AccessSuballocations2nd();
+ void Free(VmaAllocHandle allocHandle) override;
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
- if(IsEmpty())
+private:
+ static const size_t MAX_LEVELS = 48;
+
+ struct ValidationContext
{
- suballocations1st.clear();
- suballocations2nd.clear();
- m_1stNullItemsBeginCount = 0;
- m_1stNullItemsMiddleCount = 0;
- m_2ndNullItemsCount = 0;
- m_2ndVectorMode = SECOND_VECTOR_EMPTY;
- }
- else
+ size_t calculatedAllocationCount = 0;
+ size_t calculatedFreeCount = 0;
+ VkDeviceSize calculatedSumFreeSize = 0;
+ };
+ struct Node
{
- const size_t suballoc1stCount = suballocations1st.size();
- const size_t nullItem1stCount = m_1stNullItemsBeginCount + m_1stNullItemsMiddleCount;
- VMA_ASSERT(nullItem1stCount <= suballoc1stCount);
-
- // Find more null items at the beginning of 1st vector.
- while(m_1stNullItemsBeginCount < suballoc1stCount &&
- suballocations1st[m_1stNullItemsBeginCount].hAllocation == VK_NULL_HANDLE)
- {
- ++m_1stNullItemsBeginCount;
- --m_1stNullItemsMiddleCount;
- }
-
- // Find more null items at the end of 1st vector.
- while(m_1stNullItemsMiddleCount > 0 &&
- suballocations1st.back().hAllocation == VK_NULL_HANDLE)
+ VkDeviceSize offset;
+ enum TYPE
{
- --m_1stNullItemsMiddleCount;
- suballocations1st.pop_back();
- }
+ TYPE_FREE,
+ TYPE_ALLOCATION,
+ TYPE_SPLIT,
+ TYPE_COUNT
+ } type;
+ Node* parent;
+ Node* buddy;
- // Find more null items at the end of 2nd vector.
- while(m_2ndNullItemsCount > 0 &&
- suballocations2nd.back().hAllocation == VK_NULL_HANDLE)
+ union
{
- --m_2ndNullItemsCount;
- suballocations2nd.pop_back();
- }
+ struct
+ {
+ Node* prev;
+ Node* next;
+ } free;
+ struct
+ {
+ void* userData;
+ } allocation;
+ struct
+ {
+ Node* leftChild;
+ } split;
+ };
+ };
- // Find more null items at the beginning of 2nd vector.
- while(m_2ndNullItemsCount > 0 &&
- suballocations2nd[0].hAllocation == VK_NULL_HANDLE)
- {
- --m_2ndNullItemsCount;
- VmaVectorRemove(suballocations2nd, 0);
- }
+ // Size of the memory block aligned down to a power of two.
+ VkDeviceSize m_UsableSize;
+ uint32_t m_LevelCount;
+ VmaPoolAllocator<Node> m_NodeAllocator;
+ Node* m_Root;
+ struct
+ {
+ Node* front;
+ Node* back;
+ } m_FreeList[MAX_LEVELS];
- if(ShouldCompact1st())
- {
- const size_t nonNullItemCount = suballoc1stCount - nullItem1stCount;
- size_t srcIndex = m_1stNullItemsBeginCount;
- for(size_t dstIndex = 0; dstIndex < nonNullItemCount; ++dstIndex)
- {
- while(suballocations1st[srcIndex].hAllocation == VK_NULL_HANDLE)
- {
- ++srcIndex;
- }
- if(dstIndex != srcIndex)
- {
- suballocations1st[dstIndex] = suballocations1st[srcIndex];
- }
- ++srcIndex;
- }
- suballocations1st.resize(nonNullItemCount);
- m_1stNullItemsBeginCount = 0;
- m_1stNullItemsMiddleCount = 0;
- }
+ // Number of nodes in the tree with type == TYPE_ALLOCATION.
+ size_t m_AllocationCount;
+ // Number of nodes in the tree with type == TYPE_FREE.
+ size_t m_FreeCount;
+ // Doesn't include space wasted due to internal fragmentation - allocation sizes are just aligned up to node sizes.
+ // Doesn't include unusable size.
+ VkDeviceSize m_SumFreeSize;
- // 2nd vector became empty.
- if(suballocations2nd.empty())
- {
- m_2ndVectorMode = SECOND_VECTOR_EMPTY;
- }
+ VkDeviceSize GetUnusableSize() const { return GetSize() - m_UsableSize; }
+ VkDeviceSize LevelToNodeSize(uint32_t level) const { return m_UsableSize >> level; }
- // 1st vector became empty.
- if(suballocations1st.size() - m_1stNullItemsBeginCount == 0)
+ VkDeviceSize AlignAllocationSize(VkDeviceSize size) const
+ {
+ if (!IsVirtual())
{
- suballocations1st.clear();
- m_1stNullItemsBeginCount = 0;
-
- if(!suballocations2nd.empty() && m_2ndVectorMode == SECOND_VECTOR_RING_BUFFER)
- {
- // Swap 1st with 2nd. Now 2nd is empty.
- m_2ndVectorMode = SECOND_VECTOR_EMPTY;
- m_1stNullItemsMiddleCount = m_2ndNullItemsCount;
- while(m_1stNullItemsBeginCount < suballocations2nd.size() &&
- suballocations2nd[m_1stNullItemsBeginCount].hAllocation == VK_NULL_HANDLE)
- {
- ++m_1stNullItemsBeginCount;
- --m_1stNullItemsMiddleCount;
- }
- m_2ndNullItemsCount = 0;
- m_1stVectorIndex ^= 1;
- }
+ size = VmaAlignUp(size, (VkDeviceSize)16);
}
+ return VmaNextPow2(size);
}
+ Node* FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel) const;
+ void DeleteNodeChildren(Node* node);
+ bool ValidateNode(ValidationContext& ctx, const Node* parent, const Node* curr, uint32_t level, VkDeviceSize levelNodeSize) const;
+ uint32_t AllocSizeToLevel(VkDeviceSize allocSize) const;
+ void AddNodeToDetailedStatistics(VmaDetailedStatistics& inoutStats, const Node* node, VkDeviceSize levelNodeSize) const;
+ // Adds node to the front of FreeList at given level.
+ // node->type must be FREE.
+ // node->free.prev, next can be undefined.
+ void AddToFreeListFront(uint32_t level, Node* node);
+ // Removes node from FreeList at given level.
+ // node->type must be FREE.
+ // node->free.prev, next stay untouched.
+ void RemoveFromFreeList(uint32_t level, Node* node);
+ void DebugLogAllAllocationNode(Node* node, uint32_t level) const;
- VMA_HEAVY_ASSERT(Validate());
-}
-
-
-////////////////////////////////////////////////////////////////////////////////
-// class VmaBlockMetadata_Buddy
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMapNode(class VmaJsonWriter& json, const Node* node, VkDeviceSize levelNodeSize) const;
+#endif
+};
-VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(VmaAllocator hAllocator) :
- VmaBlockMetadata(hAllocator),
+#ifndef _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS
+VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
+ m_NodeAllocator(pAllocationCallbacks, 32), // firstBlockCapacity
m_Root(VMA_NULL),
m_AllocationCount(0),
m_FreeCount(1),
@@ -12111,7 +9327,8 @@ VmaBlockMetadata_Buddy::VmaBlockMetadata_Buddy(VmaAllocator hAllocator) :
VmaBlockMetadata_Buddy::~VmaBlockMetadata_Buddy()
{
- DeleteNode(m_Root);
+ DeleteNodeChildren(m_Root);
+ m_NodeAllocator.Free(m_Root);
}
void VmaBlockMetadata_Buddy::Init(VkDeviceSize size)
@@ -12122,14 +9339,15 @@ void VmaBlockMetadata_Buddy::Init(VkDeviceSize size)
m_SumFreeSize = m_UsableSize;
// Calculate m_LevelCount.
+ const VkDeviceSize minNodeSize = IsVirtual() ? 1 : 16;
m_LevelCount = 1;
- while(m_LevelCount < MAX_LEVELS &&
- LevelToNodeSize(m_LevelCount) >= MIN_NODE_SIZE)
+ while (m_LevelCount < MAX_LEVELS &&
+ LevelToNodeSize(m_LevelCount) >= minNodeSize)
{
++m_LevelCount;
}
- Node* rootNode = vma_new(GetAllocationCallbacks(), Node)();
+ Node* rootNode = m_NodeAllocator.Alloc();
rootNode->offset = 0;
rootNode->type = Node::TYPE_FREE;
rootNode->parent = VMA_NULL;
@@ -12143,7 +9361,7 @@ bool VmaBlockMetadata_Buddy::Validate() const
{
// Validate tree.
ValidationContext ctx;
- if(!ValidateNode(ctx, VMA_NULL, m_Root, 0, LevelToNodeSize(0)))
+ if (!ValidateNode(ctx, VMA_NULL, m_Root, 0, LevelToNodeSize(0)))
{
VMA_VALIDATE(false && "ValidateNode failed.");
}
@@ -12151,18 +9369,18 @@ bool VmaBlockMetadata_Buddy::Validate() const
VMA_VALIDATE(m_SumFreeSize == ctx.calculatedSumFreeSize);
// Validate free node lists.
- for(uint32_t level = 0; level < m_LevelCount; ++level)
+ for (uint32_t level = 0; level < m_LevelCount; ++level)
{
VMA_VALIDATE(m_FreeList[level].front == VMA_NULL ||
m_FreeList[level].front->free.prev == VMA_NULL);
- for(Node* node = m_FreeList[level].front;
+ for (Node* node = m_FreeList[level].front;
node != VMA_NULL;
node = node->free.next)
{
VMA_VALIDATE(node->type == Node::TYPE_FREE);
- if(node->free.next == VMA_NULL)
+ if (node->free.next == VMA_NULL)
{
VMA_VALIDATE(m_FreeList[level].back == node);
}
@@ -12174,7 +9392,7 @@ bool VmaBlockMetadata_Buddy::Validate() const
}
// Validate that free lists ar higher levels are empty.
- for(uint32_t level = m_LevelCount; level < MAX_LEVELS; ++level)
+ for (uint32_t level = m_LevelCount; level < MAX_LEVELS; ++level)
{
VMA_VALIDATE(m_FreeList[level].front == VMA_NULL && m_FreeList[level].back == VMA_NULL);
}
@@ -12182,77 +9400,44 @@ bool VmaBlockMetadata_Buddy::Validate() const
return true;
}
-VkDeviceSize VmaBlockMetadata_Buddy::GetUnusedRangeSizeMax() const
+void VmaBlockMetadata_Buddy::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
{
- for(uint32_t level = 0; level < m_LevelCount; ++level)
- {
- if(m_FreeList[level].front != VMA_NULL)
- {
- return LevelToNodeSize(level);
- }
- }
- return 0;
-}
-
-void VmaBlockMetadata_Buddy::CalcAllocationStatInfo(VmaStatInfo& outInfo) const
-{
- const VkDeviceSize unusableSize = GetUnusableSize();
-
- outInfo.blockCount = 1;
-
- outInfo.allocationCount = outInfo.unusedRangeCount = 0;
- outInfo.usedBytes = outInfo.unusedBytes = 0;
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += GetSize();
- outInfo.allocationSizeMax = outInfo.unusedRangeSizeMax = 0;
- outInfo.allocationSizeMin = outInfo.unusedRangeSizeMin = UINT64_MAX;
- outInfo.allocationSizeAvg = outInfo.unusedRangeSizeAvg = 0; // Unused.
+ AddNodeToDetailedStatistics(inoutStats, m_Root, LevelToNodeSize(0));
- CalcAllocationStatInfoNode(outInfo, m_Root, LevelToNodeSize(0));
-
- if(unusableSize > 0)
- {
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusableSize;
- outInfo.unusedRangeSizeMax = VMA_MAX(outInfo.unusedRangeSizeMax, unusableSize);
- outInfo.unusedRangeSizeMin = VMA_MIN(outInfo.unusedRangeSizeMin, unusableSize);
- }
+ const VkDeviceSize unusableSize = GetUnusableSize();
+ if (unusableSize > 0)
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, unusableSize);
}
-void VmaBlockMetadata_Buddy::AddPoolStats(VmaPoolStats& inoutStats) const
+void VmaBlockMetadata_Buddy::AddStatistics(VmaStatistics& inoutStats) const
{
- const VkDeviceSize unusableSize = GetUnusableSize();
-
- inoutStats.size += GetSize();
- inoutStats.unusedSize += m_SumFreeSize + unusableSize;
- inoutStats.allocationCount += m_AllocationCount;
- inoutStats.unusedRangeCount += m_FreeCount;
- inoutStats.unusedRangeSizeMax = VMA_MAX(inoutStats.unusedRangeSizeMax, GetUnusedRangeSizeMax());
-
- if(unusableSize > 0)
- {
- ++inoutStats.unusedRangeCount;
- // Not updating inoutStats.unusedRangeSizeMax with unusableSize because this space is not available for allocations.
- }
+ inoutStats.blockCount++;
+ inoutStats.allocationCount += (uint32_t)m_AllocationCount;
+ inoutStats.blockBytes += GetSize();
+ inoutStats.allocationBytes += GetSize() - m_SumFreeSize;
}
#if VMA_STATS_STRING_ENABLED
-
-void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json) const
+void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
{
- // TODO optimize
- VmaStatInfo stat;
- CalcAllocationStatInfo(stat);
+ VmaDetailedStatistics stats;
+ VmaClearDetailedStatistics(stats);
+ AddDetailedStatistics(stats);
PrintDetailedMap_Begin(
json,
- stat.unusedBytes,
- stat.allocationCount,
- stat.unusedRangeCount);
+ stats.statistics.blockBytes - stats.statistics.allocationBytes,
+ stats.statistics.allocationCount,
+ stats.unusedRangeCount,
+ mapRefCount);
PrintDetailedMapNode(json, m_Root, LevelToNodeSize(0));
const VkDeviceSize unusableSize = GetUnusableSize();
- if(unusableSize > 0)
+ if (unusableSize > 0)
{
PrintDetailedMap_UnusedRange(json,
m_UsableSize, // offset
@@ -12261,52 +9446,47 @@ void VmaBlockMetadata_Buddy::PrintDetailedMap(class VmaJsonWriter& json) const
PrintDetailedMap_End(json);
}
-
-#endif // #if VMA_STATS_STRING_ENABLED
+#endif // VMA_STATS_STRING_ENABLED
bool VmaBlockMetadata_Buddy::CreateAllocationRequest(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VkDeviceSize bufferImageGranularity,
VkDeviceSize allocSize,
VkDeviceSize allocAlignment,
bool upperAddress,
VmaSuballocationType allocType,
- bool canMakeOtherLost,
uint32_t strategy,
VmaAllocationRequest* pAllocationRequest)
{
VMA_ASSERT(!upperAddress && "VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm.");
+ allocSize = AlignAllocationSize(allocSize);
+
// Simple way to respect bufferImageGranularity. May be optimized some day.
// Whenever it might be an OPTIMAL image...
- if(allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN ||
+ if (allocType == VMA_SUBALLOCATION_TYPE_UNKNOWN ||
allocType == VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN ||
allocType == VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL)
{
- allocAlignment = VMA_MAX(allocAlignment, bufferImageGranularity);
- allocSize = VMA_MAX(allocSize, bufferImageGranularity);
+ allocAlignment = VMA_MAX(allocAlignment, GetBufferImageGranularity());
+ allocSize = VmaAlignUp(allocSize, GetBufferImageGranularity());
}
- if(allocSize > m_UsableSize)
+ if (allocSize > m_UsableSize)
{
return false;
}
const uint32_t targetLevel = AllocSizeToLevel(allocSize);
- for(uint32_t level = targetLevel + 1; level--; )
+ for (uint32_t level = targetLevel; level--; )
{
- for(Node* freeNode = m_FreeList[level].front;
+ for (Node* freeNode = m_FreeList[level].front;
freeNode != VMA_NULL;
freeNode = freeNode->free.next)
{
- if(freeNode->offset % allocAlignment == 0)
+ if (freeNode->offset % allocAlignment == 0)
{
pAllocationRequest->type = VmaAllocationRequestType::Normal;
- pAllocationRequest->offset = freeNode->offset;
- pAllocationRequest->sumFreeSize = LevelToNodeSize(level);
- pAllocationRequest->sumItemSize = 0;
- pAllocationRequest->itemsToMakeLostCount = 0;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)(freeNode->offset + 1);
+ pAllocationRequest->size = allocSize;
pAllocationRequest->customData = (void*)(uintptr_t)level;
return true;
}
@@ -12316,48 +9496,27 @@ bool VmaBlockMetadata_Buddy::CreateAllocationRequest(
return false;
}
-bool VmaBlockMetadata_Buddy::MakeRequestedAllocationsLost(
- uint32_t currentFrameIndex,
- uint32_t frameInUseCount,
- VmaAllocationRequest* pAllocationRequest)
-{
- /*
- Lost allocations are not supported in buddy allocator at the moment.
- Support might be added in the future.
- */
- return pAllocationRequest->itemsToMakeLostCount == 0;
-}
-
-uint32_t VmaBlockMetadata_Buddy::MakeAllocationsLost(uint32_t currentFrameIndex, uint32_t frameInUseCount)
-{
- /*
- Lost allocations are not supported in buddy allocator at the moment.
- Support might be added in the future.
- */
- return 0;
-}
-
void VmaBlockMetadata_Buddy::Alloc(
const VmaAllocationRequest& request,
VmaSuballocationType type,
- VkDeviceSize allocSize,
- VmaAllocation hAllocation)
+ void* userData)
{
VMA_ASSERT(request.type == VmaAllocationRequestType::Normal);
- const uint32_t targetLevel = AllocSizeToLevel(allocSize);
+ const uint32_t targetLevel = AllocSizeToLevel(request.size);
uint32_t currLevel = (uint32_t)(uintptr_t)request.customData;
Node* currNode = m_FreeList[currLevel].front;
VMA_ASSERT(currNode != VMA_NULL && currNode->type == Node::TYPE_FREE);
- while(currNode->offset != request.offset)
+ const VkDeviceSize offset = (VkDeviceSize)request.allocHandle - 1;
+ while (currNode->offset != offset)
{
currNode = currNode->free.next;
VMA_ASSERT(currNode != VMA_NULL && currNode->type == Node::TYPE_FREE);
}
// Go down, splitting free nodes.
- while(currLevel < targetLevel)
+ while (currLevel < targetLevel)
{
// currNode is already first free node at currLevel.
// Remove it from list of free nodes at this currLevel.
@@ -12366,8 +9525,8 @@ void VmaBlockMetadata_Buddy::Alloc(
const uint32_t childrenLevel = currLevel + 1;
// Create two free sub-nodes.
- Node* leftChild = vma_new(GetAllocationCallbacks(), Node)();
- Node* rightChild = vma_new(GetAllocationCallbacks(), Node)();
+ Node* leftChild = m_NodeAllocator.Alloc();
+ Node* rightChild = m_NodeAllocator.Alloc();
leftChild->offset = currNode->offset;
leftChild->type = Node::TYPE_FREE;
@@ -12388,13 +9547,12 @@ void VmaBlockMetadata_Buddy::Alloc(
AddToFreeListFront(childrenLevel, leftChild);
++m_FreeCount;
- //m_SumFreeSize -= LevelToNodeSize(currLevel) % 2; // Useful only when level node sizes can be non power of 2.
++currLevel;
currNode = m_FreeList[currLevel].front;
/*
We can be sure that currNode, as left child of node previously split,
- also fullfills the alignment requirement.
+ also fulfills the alignment requirement.
*/
}
@@ -12406,22 +9564,93 @@ void VmaBlockMetadata_Buddy::Alloc(
// Convert to allocation node.
currNode->type = Node::TYPE_ALLOCATION;
- currNode->allocation.alloc = hAllocation;
+ currNode->allocation.userData = userData;
++m_AllocationCount;
--m_FreeCount;
- m_SumFreeSize -= allocSize;
+ m_SumFreeSize -= request.size;
+}
+
+void VmaBlockMetadata_Buddy::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
+{
+ uint32_t level = 0;
+ outInfo.offset = (VkDeviceSize)allocHandle - 1;
+ const Node* const node = FindAllocationNode(outInfo.offset, level);
+ outInfo.size = LevelToNodeSize(level);
+ outInfo.pUserData = node->allocation.userData;
+}
+
+void* VmaBlockMetadata_Buddy::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ uint32_t level = 0;
+ const Node* const node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level);
+ return node->allocation.userData;
+}
+
+VmaAllocHandle VmaBlockMetadata_Buddy::GetAllocationListBegin() const
+{
+ // Function only used for defragmentation, which is disabled for this algorithm
+ return VK_NULL_HANDLE;
}
-void VmaBlockMetadata_Buddy::DeleteNode(Node* node)
+VmaAllocHandle VmaBlockMetadata_Buddy::GetNextAllocation(VmaAllocHandle prevAlloc) const
{
- if(node->type == Node::TYPE_SPLIT)
+ // Function only used for defragmentation, which is disabled for this algorithm
+ return VK_NULL_HANDLE;
+}
+
+void VmaBlockMetadata_Buddy::DeleteNodeChildren(Node* node)
+{
+ if (node->type == Node::TYPE_SPLIT)
{
- DeleteNode(node->split.leftChild->buddy);
- DeleteNode(node->split.leftChild);
+ DeleteNodeChildren(node->split.leftChild->buddy);
+ DeleteNodeChildren(node->split.leftChild);
+ const VkAllocationCallbacks* allocationCallbacks = GetAllocationCallbacks();
+ m_NodeAllocator.Free(node->split.leftChild->buddy);
+ m_NodeAllocator.Free(node->split.leftChild);
}
+}
- vma_delete(GetAllocationCallbacks(), node);
+void VmaBlockMetadata_Buddy::Clear()
+{
+ DeleteNodeChildren(m_Root);
+ m_Root->type = Node::TYPE_FREE;
+ m_AllocationCount = 0;
+ m_FreeCount = 1;
+ m_SumFreeSize = m_UsableSize;
+}
+
+void VmaBlockMetadata_Buddy::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
+{
+ uint32_t level = 0;
+ Node* const node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level);
+ node->allocation.userData = userData;
+}
+
+VmaBlockMetadata_Buddy::Node* VmaBlockMetadata_Buddy::FindAllocationNode(VkDeviceSize offset, uint32_t& outLevel) const
+{
+ Node* node = m_Root;
+ VkDeviceSize nodeOffset = 0;
+ outLevel = 0;
+ VkDeviceSize levelNodeSize = LevelToNodeSize(0);
+ while (node->type == Node::TYPE_SPLIT)
+ {
+ const VkDeviceSize nextLevelNodeSize = levelNodeSize >> 1;
+ if (offset < nodeOffset + nextLevelNodeSize)
+ {
+ node = node->split.leftChild;
+ }
+ else
+ {
+ node = node->split.leftChild->buddy;
+ nodeOffset += nextLevelNodeSize;
+ }
+ ++outLevel;
+ levelNodeSize = nextLevelNodeSize;
+ }
+
+ VMA_ASSERT(node != VMA_NULL && node->type == Node::TYPE_ALLOCATION);
+ return node;
}
bool VmaBlockMetadata_Buddy::ValidateNode(ValidationContext& ctx, const Node* parent, const Node* curr, uint32_t level, VkDeviceSize levelNodeSize) const
@@ -12430,7 +9659,7 @@ bool VmaBlockMetadata_Buddy::ValidateNode(ValidationContext& ctx, const Node* pa
VMA_VALIDATE(curr->parent == parent);
VMA_VALIDATE((curr->buddy == VMA_NULL) == (parent == VMA_NULL));
VMA_VALIDATE(curr->buddy == VMA_NULL || curr->buddy->buddy == curr);
- switch(curr->type)
+ switch (curr->type)
{
case Node::TYPE_FREE:
// curr->free.prev, next are validated separately.
@@ -12439,28 +9668,30 @@ bool VmaBlockMetadata_Buddy::ValidateNode(ValidationContext& ctx, const Node* pa
break;
case Node::TYPE_ALLOCATION:
++ctx.calculatedAllocationCount;
- ctx.calculatedSumFreeSize += levelNodeSize - curr->allocation.alloc->GetSize();
- VMA_VALIDATE(curr->allocation.alloc != VK_NULL_HANDLE);
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(curr->allocation.userData != VMA_NULL);
+ }
break;
case Node::TYPE_SPLIT:
+ {
+ const uint32_t childrenLevel = level + 1;
+ const VkDeviceSize childrenLevelNodeSize = levelNodeSize >> 1;
+ const Node* const leftChild = curr->split.leftChild;
+ VMA_VALIDATE(leftChild != VMA_NULL);
+ VMA_VALIDATE(leftChild->offset == curr->offset);
+ if (!ValidateNode(ctx, curr, leftChild, childrenLevel, childrenLevelNodeSize))
{
- const uint32_t childrenLevel = level + 1;
- const VkDeviceSize childrenLevelNodeSize = levelNodeSize / 2;
- const Node* const leftChild = curr->split.leftChild;
- VMA_VALIDATE(leftChild != VMA_NULL);
- VMA_VALIDATE(leftChild->offset == curr->offset);
- if(!ValidateNode(ctx, curr, leftChild, childrenLevel, childrenLevelNodeSize))
- {
- VMA_VALIDATE(false && "ValidateNode for left child failed.");
- }
- const Node* const rightChild = leftChild->buddy;
- VMA_VALIDATE(rightChild->offset == curr->offset + childrenLevelNodeSize);
- if(!ValidateNode(ctx, curr, rightChild, childrenLevel, childrenLevelNodeSize))
- {
- VMA_VALIDATE(false && "ValidateNode for right child failed.");
- }
+ VMA_VALIDATE(false && "ValidateNode for left child failed.");
}
- break;
+ const Node* const rightChild = leftChild->buddy;
+ VMA_VALIDATE(rightChild->offset == curr->offset + childrenLevelNodeSize);
+ if (!ValidateNode(ctx, curr, rightChild, childrenLevel, childrenLevelNodeSize))
+ {
+ VMA_VALIDATE(false && "ValidateNode for right child failed.");
+ }
+ }
+ break;
default:
return false;
}
@@ -12474,103 +9705,63 @@ uint32_t VmaBlockMetadata_Buddy::AllocSizeToLevel(VkDeviceSize allocSize) const
uint32_t level = 0;
VkDeviceSize currLevelNodeSize = m_UsableSize;
VkDeviceSize nextLevelNodeSize = currLevelNodeSize >> 1;
- while(allocSize <= nextLevelNodeSize && level + 1 < m_LevelCount)
+ while (allocSize <= nextLevelNodeSize && level + 1 < m_LevelCount)
{
++level;
- currLevelNodeSize = nextLevelNodeSize;
- nextLevelNodeSize = currLevelNodeSize >> 1;
+ currLevelNodeSize >>= 1;
+ nextLevelNodeSize >>= 1;
}
return level;
}
-void VmaBlockMetadata_Buddy::FreeAtOffset(VmaAllocation alloc, VkDeviceSize offset)
+void VmaBlockMetadata_Buddy::Free(VmaAllocHandle allocHandle)
{
- // Find node and level.
- Node* node = m_Root;
- VkDeviceSize nodeOffset = 0;
uint32_t level = 0;
- VkDeviceSize levelNodeSize = LevelToNodeSize(0);
- while(node->type == Node::TYPE_SPLIT)
- {
- const VkDeviceSize nextLevelSize = levelNodeSize >> 1;
- if(offset < nodeOffset + nextLevelSize)
- {
- node = node->split.leftChild;
- }
- else
- {
- node = node->split.leftChild->buddy;
- nodeOffset += nextLevelSize;
- }
- ++level;
- levelNodeSize = nextLevelSize;
- }
-
- VMA_ASSERT(node != VMA_NULL && node->type == Node::TYPE_ALLOCATION);
- VMA_ASSERT(alloc == VK_NULL_HANDLE || node->allocation.alloc == alloc);
+ Node* node = FindAllocationNode((VkDeviceSize)allocHandle - 1, level);
++m_FreeCount;
--m_AllocationCount;
- m_SumFreeSize += alloc->GetSize();
+ m_SumFreeSize += LevelToNodeSize(level);
node->type = Node::TYPE_FREE;
// Join free nodes if possible.
- while(level > 0 && node->buddy->type == Node::TYPE_FREE)
+ while (level > 0 && node->buddy->type == Node::TYPE_FREE)
{
RemoveFromFreeList(level, node->buddy);
Node* const parent = node->parent;
- vma_delete(GetAllocationCallbacks(), node->buddy);
- vma_delete(GetAllocationCallbacks(), node);
+ m_NodeAllocator.Free(node->buddy);
+ m_NodeAllocator.Free(node);
parent->type = Node::TYPE_FREE;
node = parent;
--level;
- //m_SumFreeSize += LevelToNodeSize(level) % 2; // Useful only when level node sizes can be non power of 2.
--m_FreeCount;
}
AddToFreeListFront(level, node);
}
-void VmaBlockMetadata_Buddy::CalcAllocationStatInfoNode(VmaStatInfo& outInfo, const Node* node, VkDeviceSize levelNodeSize) const
+void VmaBlockMetadata_Buddy::AddNodeToDetailedStatistics(VmaDetailedStatistics& inoutStats, const Node* node, VkDeviceSize levelNodeSize) const
{
- switch(node->type)
+ switch (node->type)
{
case Node::TYPE_FREE:
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += levelNodeSize;
- outInfo.unusedRangeSizeMax = VMA_MAX(outInfo.unusedRangeSizeMax, levelNodeSize);
- outInfo.unusedRangeSizeMin = VMA_MAX(outInfo.unusedRangeSizeMin, levelNodeSize);
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, levelNodeSize);
break;
case Node::TYPE_ALLOCATION:
- {
- const VkDeviceSize allocSize = node->allocation.alloc->GetSize();
- ++outInfo.allocationCount;
- outInfo.usedBytes += allocSize;
- outInfo.allocationSizeMax = VMA_MAX(outInfo.allocationSizeMax, allocSize);
- outInfo.allocationSizeMin = VMA_MAX(outInfo.allocationSizeMin, allocSize);
-
- const VkDeviceSize unusedRangeSize = levelNodeSize - allocSize;
- if(unusedRangeSize > 0)
- {
- ++outInfo.unusedRangeCount;
- outInfo.unusedBytes += unusedRangeSize;
- outInfo.unusedRangeSizeMax = VMA_MAX(outInfo.unusedRangeSizeMax, unusedRangeSize);
- outInfo.unusedRangeSizeMin = VMA_MAX(outInfo.unusedRangeSizeMin, unusedRangeSize);
- }
- }
+ VmaAddDetailedStatisticsAllocation(inoutStats, levelNodeSize);
break;
case Node::TYPE_SPLIT:
- {
- const VkDeviceSize childrenNodeSize = levelNodeSize / 2;
- const Node* const leftChild = node->split.leftChild;
- CalcAllocationStatInfoNode(outInfo, leftChild, childrenNodeSize);
- const Node* const rightChild = leftChild->buddy;
- CalcAllocationStatInfoNode(outInfo, rightChild, childrenNodeSize);
- }
- break;
+ {
+ const VkDeviceSize childrenNodeSize = levelNodeSize / 2;
+ const Node* const leftChild = node->split.leftChild;
+ AddNodeToDetailedStatistics(inoutStats, leftChild, childrenNodeSize);
+ const Node* const rightChild = leftChild->buddy;
+ AddNodeToDetailedStatistics(inoutStats, rightChild, childrenNodeSize);
+ }
+ break;
default:
VMA_ASSERT(0);
}
@@ -12582,7 +9773,7 @@ void VmaBlockMetadata_Buddy::AddToFreeListFront(uint32_t level, Node* node)
// List is empty.
Node* const frontNode = m_FreeList[level].front;
- if(frontNode == VMA_NULL)
+ if (frontNode == VMA_NULL)
{
VMA_ASSERT(m_FreeList[level].back == VMA_NULL);
node->free.prev = node->free.next = VMA_NULL;
@@ -12603,7 +9794,7 @@ void VmaBlockMetadata_Buddy::RemoveFromFreeList(uint32_t level, Node* node)
VMA_ASSERT(m_FreeList[level].front != VMA_NULL);
// It is at the front.
- if(node->free.prev == VMA_NULL)
+ if (node->free.prev == VMA_NULL)
{
VMA_ASSERT(m_FreeList[level].front == node);
m_FreeList[level].front = node->free.next;
@@ -12616,7 +9807,7 @@ void VmaBlockMetadata_Buddy::RemoveFromFreeList(uint32_t level, Node* node)
}
// It is at the back.
- if(node->free.next == VMA_NULL)
+ if (node->free.next == VMA_NULL)
{
VMA_ASSERT(m_FreeList[level].back == node);
m_FreeList[level].back = node->free.prev;
@@ -12629,85 +9820,1866 @@ void VmaBlockMetadata_Buddy::RemoveFromFreeList(uint32_t level, Node* node)
}
}
+void VmaBlockMetadata_Buddy::DebugLogAllAllocationNode(Node* node, uint32_t level) const
+{
+ switch (node->type)
+ {
+ case Node::TYPE_FREE:
+ break;
+ case Node::TYPE_ALLOCATION:
+ DebugLogAllocation(node->offset, LevelToNodeSize(level), node->allocation.userData);
+ break;
+ case Node::TYPE_SPLIT:
+ {
+ ++level;
+ DebugLogAllAllocationNode(node->split.leftChild, level);
+ DebugLogAllAllocationNode(node->split.leftChild->buddy, level);
+ }
+ break;
+ default:
+ VMA_ASSERT(0);
+ }
+}
+
#if VMA_STATS_STRING_ENABLED
void VmaBlockMetadata_Buddy::PrintDetailedMapNode(class VmaJsonWriter& json, const Node* node, VkDeviceSize levelNodeSize) const
{
- switch(node->type)
+ switch (node->type)
{
case Node::TYPE_FREE:
PrintDetailedMap_UnusedRange(json, node->offset, levelNodeSize);
break;
case Node::TYPE_ALLOCATION:
+ PrintDetailedMap_Allocation(json, node->offset, levelNodeSize, node->allocation.userData);
+ break;
+ case Node::TYPE_SPLIT:
+ {
+ const VkDeviceSize childrenNodeSize = levelNodeSize / 2;
+ const Node* const leftChild = node->split.leftChild;
+ PrintDetailedMapNode(json, leftChild, childrenNodeSize);
+ const Node* const rightChild = leftChild->buddy;
+ PrintDetailedMapNode(json, rightChild, childrenNodeSize);
+ }
+ break;
+ default:
+ VMA_ASSERT(0);
+ }
+}
+#endif // VMA_STATS_STRING_ENABLED
+#endif // _VMA_BLOCK_METADATA_BUDDY_FUNCTIONS
+#endif // _VMA_BLOCK_METADATA_BUDDY
+#endif // #if 0
+
+#ifndef _VMA_BLOCK_METADATA_TLSF
+// To not search current larger region if first allocation won't succeed and skip to smaller range
+// use with VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT as strategy in CreateAllocationRequest().
+// When fragmentation and reusal of previous blocks doesn't matter then use with
+// VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT for fastest alloc time possible.
+class VmaBlockMetadata_TLSF : public VmaBlockMetadata
+{
+ VMA_CLASS_NO_COPY(VmaBlockMetadata_TLSF)
+public:
+ VmaBlockMetadata_TLSF(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual);
+ virtual ~VmaBlockMetadata_TLSF();
+
+ size_t GetAllocationCount() const override { return m_AllocCount; }
+ VkDeviceSize GetSumFreeSize() const override { return m_BlocksFreeSize + m_NullBlock->size; }
+ bool IsEmpty() const override { return m_NullBlock->offset == 0; }
+ VkDeviceSize GetAllocationOffset(VmaAllocHandle allocHandle) const override { return ((Block*)allocHandle)->offset; };
+
+ void Init(VkDeviceSize size) override;
+ bool Validate() const override;
+
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const override;
+ void AddStatistics(VmaStatistics& inoutStats) const override;
+
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const override;
+#endif
+
+ bool CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest) override;
+
+ VkResult CheckCorruption(const void* pBlockData) override;
+ void Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData) override;
+
+ void Free(VmaAllocHandle allocHandle) override;
+ void GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo) override;
+ void* GetAllocationUserData(VmaAllocHandle allocHandle) const override;
+ VmaAllocHandle GetAllocationListBegin() const override;
+ VmaAllocHandle GetNextAllocation(VmaAllocHandle prevAlloc) const override;
+ void Clear() override;
+ void SetAllocationUserData(VmaAllocHandle allocHandle, void* userData) override;
+ void DebugLogAllAllocations() const override;
+
+private:
+ // According to original paper it should be preferable 4 or 5:
+ // M. Masmano, I. Ripoll, A. Crespo, and J. Real "TLSF: a New Dynamic Memory Allocator for Real-Time Systems"
+ // http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf
+ static const uint8_t SECOND_LEVEL_INDEX = 5;
+ static const uint16_t SMALL_BUFFER_SIZE = 256;
+ static const uint32_t INITIAL_BLOCK_ALLOC_COUNT = 16;
+ static const uint8_t MEMORY_CLASS_SHIFT = 7;
+ static const uint8_t MAX_MEMORY_CLASSES = 65 - MEMORY_CLASS_SHIFT;
+
+ class Block
+ {
+ public:
+ VkDeviceSize offset;
+ VkDeviceSize size;
+ Block* prevPhysical;
+ Block* nextPhysical;
+
+ void MarkFree() { prevFree = VMA_NULL; }
+ void MarkTaken() { prevFree = this; }
+ bool IsFree() const { return prevFree != this; }
+ void*& UserData() { VMA_HEAVY_ASSERT(!IsFree()); return userData; }
+ Block*& PrevFree() { return prevFree; }
+ Block*& NextFree() { VMA_HEAVY_ASSERT(IsFree()); return nextFree; }
+
+ private:
+ Block* prevFree; // Address of the same block here indicates that block is taken
+ union
{
- PrintDetailedMap_Allocation(json, node->offset, node->allocation.alloc);
- const VkDeviceSize allocSize = node->allocation.alloc->GetSize();
- if(allocSize < levelNodeSize)
+ Block* nextFree;
+ void* userData;
+ };
+ };
+
+ size_t m_AllocCount;
+ // Total number of free blocks besides null block
+ size_t m_BlocksFreeCount;
+ // Total size of free blocks excluding null block
+ VkDeviceSize m_BlocksFreeSize;
+ uint32_t m_IsFreeBitmap;
+ uint8_t m_MemoryClasses;
+ uint32_t m_InnerIsFreeBitmap[MAX_MEMORY_CLASSES];
+ uint32_t m_ListsCount;
+ /*
+ * 0: 0-3 lists for small buffers
+ * 1+: 0-(2^SLI-1) lists for normal buffers
+ */
+ Block** m_FreeList;
+ VmaPoolAllocator<Block> m_BlockAllocator;
+ Block* m_NullBlock;
+ VmaBlockBufferImageGranularity m_GranularityHandler;
+
+ uint8_t SizeToMemoryClass(VkDeviceSize size) const;
+ uint16_t SizeToSecondIndex(VkDeviceSize size, uint8_t memoryClass) const;
+ uint32_t GetListIndex(uint8_t memoryClass, uint16_t secondIndex) const;
+ uint32_t GetListIndex(VkDeviceSize size) const;
+
+ void RemoveFreeBlock(Block* block);
+ void InsertFreeBlock(Block* block);
+ void MergeBlock(Block* block, Block* prev);
+
+ Block* FindFreeBlock(VkDeviceSize size, uint32_t& listIndex) const;
+ bool CheckBlock(
+ Block& block,
+ uint32_t listIndex,
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ VmaAllocationRequest* pAllocationRequest);
+};
+
+#ifndef _VMA_BLOCK_METADATA_TLSF_FUNCTIONS
+VmaBlockMetadata_TLSF::VmaBlockMetadata_TLSF(const VkAllocationCallbacks* pAllocationCallbacks,
+ VkDeviceSize bufferImageGranularity, bool isVirtual)
+ : VmaBlockMetadata(pAllocationCallbacks, bufferImageGranularity, isVirtual),
+ m_AllocCount(0),
+ m_BlocksFreeCount(0),
+ m_BlocksFreeSize(0),
+ m_IsFreeBitmap(0),
+ m_MemoryClasses(0),
+ m_ListsCount(0),
+ m_FreeList(VMA_NULL),
+ m_BlockAllocator(pAllocationCallbacks, INITIAL_BLOCK_ALLOC_COUNT),
+ m_NullBlock(VMA_NULL),
+ m_GranularityHandler(bufferImageGranularity) {}
+
+VmaBlockMetadata_TLSF::~VmaBlockMetadata_TLSF()
+{
+ if (m_FreeList)
+ vma_delete_array(GetAllocationCallbacks(), m_FreeList, m_ListsCount);
+ m_GranularityHandler.Destroy(GetAllocationCallbacks());
+}
+
+void VmaBlockMetadata_TLSF::Init(VkDeviceSize size)
+{
+ VmaBlockMetadata::Init(size);
+
+ if (!IsVirtual())
+ m_GranularityHandler.Init(GetAllocationCallbacks(), size);
+
+ m_NullBlock = m_BlockAllocator.Alloc();
+ m_NullBlock->size = size;
+ m_NullBlock->offset = 0;
+ m_NullBlock->prevPhysical = VMA_NULL;
+ m_NullBlock->nextPhysical = VMA_NULL;
+ m_NullBlock->MarkFree();
+ m_NullBlock->NextFree() = VMA_NULL;
+ m_NullBlock->PrevFree() = VMA_NULL;
+ uint8_t memoryClass = SizeToMemoryClass(size);
+ uint16_t sli = SizeToSecondIndex(size, memoryClass);
+ m_ListsCount = (memoryClass == 0 ? 0 : (memoryClass - 1) * (1UL << SECOND_LEVEL_INDEX) + sli) + 1;
+ if (IsVirtual())
+ m_ListsCount += 1UL << SECOND_LEVEL_INDEX;
+ else
+ m_ListsCount += 4;
+
+ m_MemoryClasses = memoryClass + 2;
+ memset(m_InnerIsFreeBitmap, 0, MAX_MEMORY_CLASSES * sizeof(uint32_t));
+
+ m_FreeList = vma_new_array(GetAllocationCallbacks(), Block*, m_ListsCount);
+ memset(m_FreeList, 0, m_ListsCount * sizeof(Block*));
+}
+
+bool VmaBlockMetadata_TLSF::Validate() const
+{
+ VMA_VALIDATE(GetSumFreeSize() <= GetSize());
+
+ VkDeviceSize calculatedSize = m_NullBlock->size;
+ VkDeviceSize calculatedFreeSize = m_NullBlock->size;
+ size_t allocCount = 0;
+ size_t freeCount = 0;
+
+ // Check integrity of free lists
+ for (uint32_t list = 0; list < m_ListsCount; ++list)
+ {
+ Block* block = m_FreeList[list];
+ if (block != VMA_NULL)
+ {
+ VMA_VALIDATE(block->IsFree());
+ VMA_VALIDATE(block->PrevFree() == VMA_NULL);
+ while (block->NextFree())
{
- PrintDetailedMap_UnusedRange(json, node->offset + allocSize, levelNodeSize - allocSize);
+ VMA_VALIDATE(block->NextFree()->IsFree());
+ VMA_VALIDATE(block->NextFree()->PrevFree() == block);
+ block = block->NextFree();
}
}
- break;
- case Node::TYPE_SPLIT:
+ }
+
+ VkDeviceSize nextOffset = m_NullBlock->offset;
+ auto validateCtx = m_GranularityHandler.StartValidation(GetAllocationCallbacks(), IsVirtual());
+
+ VMA_VALIDATE(m_NullBlock->nextPhysical == VMA_NULL);
+ if (m_NullBlock->prevPhysical)
+ {
+ VMA_VALIDATE(m_NullBlock->prevPhysical->nextPhysical == m_NullBlock);
+ }
+ // Check all blocks
+ for (Block* prev = m_NullBlock->prevPhysical; prev != VMA_NULL; prev = prev->prevPhysical)
+ {
+ VMA_VALIDATE(prev->offset + prev->size == nextOffset);
+ nextOffset = prev->offset;
+ calculatedSize += prev->size;
+
+ uint32_t listIndex = GetListIndex(prev->size);
+ if (prev->IsFree())
{
- const VkDeviceSize childrenNodeSize = levelNodeSize / 2;
- const Node* const leftChild = node->split.leftChild;
- PrintDetailedMapNode(json, leftChild, childrenNodeSize);
- const Node* const rightChild = leftChild->buddy;
- PrintDetailedMapNode(json, rightChild, childrenNodeSize);
+ ++freeCount;
+ // Check if free block belongs to free list
+ Block* freeBlock = m_FreeList[listIndex];
+ VMA_VALIDATE(freeBlock != VMA_NULL);
+
+ bool found = false;
+ do
+ {
+ if (freeBlock == prev)
+ found = true;
+
+ freeBlock = freeBlock->NextFree();
+ } while (!found && freeBlock != VMA_NULL);
+
+ VMA_VALIDATE(found);
+ calculatedFreeSize += prev->size;
}
- break;
+ else
+ {
+ ++allocCount;
+ // Check if taken block is not on a free list
+ Block* freeBlock = m_FreeList[listIndex];
+ while (freeBlock)
+ {
+ VMA_VALIDATE(freeBlock != prev);
+ freeBlock = freeBlock->NextFree();
+ }
+
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(m_GranularityHandler.Validate(validateCtx, prev->offset, prev->size));
+ }
+ }
+
+ if (prev->prevPhysical)
+ {
+ VMA_VALIDATE(prev->prevPhysical->nextPhysical == prev);
+ }
+ }
+
+ if (!IsVirtual())
+ {
+ VMA_VALIDATE(m_GranularityHandler.FinishValidation(validateCtx));
+ }
+
+ VMA_VALIDATE(nextOffset == 0);
+ VMA_VALIDATE(calculatedSize == GetSize());
+ VMA_VALIDATE(calculatedFreeSize == GetSumFreeSize());
+ VMA_VALIDATE(allocCount == m_AllocCount);
+ VMA_VALIDATE(freeCount == m_BlocksFreeCount);
+
+ return true;
+}
+
+void VmaBlockMetadata_TLSF::AddDetailedStatistics(VmaDetailedStatistics& inoutStats) const
+{
+ inoutStats.statistics.blockCount++;
+ inoutStats.statistics.blockBytes += GetSize();
+ if (m_NullBlock->size > 0)
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, m_NullBlock->size);
+
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ if (block->IsFree())
+ VmaAddDetailedStatisticsUnusedRange(inoutStats, block->size);
+ else
+ VmaAddDetailedStatisticsAllocation(inoutStats, block->size);
+ }
+}
+
+void VmaBlockMetadata_TLSF::AddStatistics(VmaStatistics& inoutStats) const
+{
+ inoutStats.blockCount++;
+ inoutStats.allocationCount += (uint32_t)m_AllocCount;
+ inoutStats.blockBytes += GetSize();
+ inoutStats.allocationBytes += GetSize() - GetSumFreeSize();
+}
+
+#if VMA_STATS_STRING_ENABLED
+void VmaBlockMetadata_TLSF::PrintDetailedMap(class VmaJsonWriter& json, uint32_t mapRefCount) const
+{
+ size_t blockCount = m_AllocCount + m_BlocksFreeCount;
+ VmaStlAllocator<Block*> allocator(GetAllocationCallbacks());
+ VmaVector<Block*, VmaStlAllocator<Block*>> blockList(blockCount, allocator);
+
+ size_t i = blockCount;
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ blockList[--i] = block;
+ }
+ VMA_ASSERT(i == 0);
+
+ VmaDetailedStatistics stats;
+ VmaClearDetailedStatistics(stats);
+ AddDetailedStatistics(stats);
+
+ PrintDetailedMap_Begin(
+ json,
+ stats.statistics.blockBytes - stats.statistics.allocationBytes,
+ stats.statistics.allocationCount,
+ stats.unusedRangeCount,
+ mapRefCount);
+
+ for (; i < blockCount; ++i)
+ {
+ Block* block = blockList[i];
+ if (block->IsFree())
+ PrintDetailedMap_UnusedRange(json, block->offset, block->size);
+ else
+ PrintDetailedMap_Allocation(json, block->offset, block->size, block->UserData());
+ }
+ if (m_NullBlock->size > 0)
+ PrintDetailedMap_UnusedRange(json, m_NullBlock->offset, m_NullBlock->size);
+
+ PrintDetailedMap_End(json);
+}
+#endif
+
+bool VmaBlockMetadata_TLSF::CreateAllocationRequest(
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ bool upperAddress,
+ VmaSuballocationType allocType,
+ uint32_t strategy,
+ VmaAllocationRequest* pAllocationRequest)
+{
+ VMA_ASSERT(allocSize > 0 && "Cannot allocate empty block!");
+ VMA_ASSERT(!upperAddress && "VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT can be used only with linear algorithm.");
+
+ // For small granularity round up
+ if (!IsVirtual())
+ m_GranularityHandler.RoundupAllocRequest(allocType, allocSize, allocAlignment);
+
+ allocSize += GetDebugMargin();
+ // Quick check for too small pool
+ if (allocSize > GetSumFreeSize())
+ return false;
+
+ // If no free blocks in pool then check only null block
+ if (m_BlocksFreeCount == 0)
+ return CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest);
+
+ // Round up to the next block
+ VkDeviceSize sizeForNextList = allocSize;
+ VkDeviceSize smallSizeStep = SMALL_BUFFER_SIZE / (IsVirtual() ? 1 << SECOND_LEVEL_INDEX : 4);
+ if (allocSize > SMALL_BUFFER_SIZE)
+ {
+ sizeForNextList += (1ULL << (VMA_BITSCAN_MSB(allocSize) - SECOND_LEVEL_INDEX));
+ }
+ else if (allocSize > SMALL_BUFFER_SIZE - smallSizeStep)
+ sizeForNextList = SMALL_BUFFER_SIZE + 1;
+ else
+ sizeForNextList += smallSizeStep;
+
+ uint32_t nextListIndex = 0;
+ uint32_t prevListIndex = 0;
+ Block* nextListBlock = VMA_NULL;
+ Block* prevListBlock = VMA_NULL;
+
+ // Check blocks according to strategies
+ if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT)
+ {
+ // Quick check for larger block first
+ nextListBlock = FindFreeBlock(sizeForNextList, nextListIndex);
+ if (nextListBlock != VMA_NULL && CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ // If not fitted then null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ // Null block failed, search larger bucket
+ while (nextListBlock)
+ {
+ if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ nextListBlock = nextListBlock->NextFree();
+ }
+
+ // Failed again, check best fit bucket
+ prevListBlock = FindFreeBlock(allocSize, prevListIndex);
+ while (prevListBlock)
+ {
+ if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ prevListBlock = prevListBlock->NextFree();
+ }
+ }
+ else if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT)
+ {
+ // Check best fit bucket
+ prevListBlock = FindFreeBlock(allocSize, prevListIndex);
+ while (prevListBlock)
+ {
+ if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ prevListBlock = prevListBlock->NextFree();
+ }
+
+ // If failed check null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ // Check larger bucket
+ nextListBlock = FindFreeBlock(sizeForNextList, nextListIndex);
+ while (nextListBlock)
+ {
+ if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ nextListBlock = nextListBlock->NextFree();
+ }
+ }
+ else if (strategy & VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT )
+ {
+ // Perform search from the start
+ VmaStlAllocator<Block*> allocator(GetAllocationCallbacks());
+ VmaVector<Block*, VmaStlAllocator<Block*>> blockList(m_BlocksFreeCount, allocator);
+
+ size_t i = m_BlocksFreeCount;
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ if (block->IsFree() && block->size >= allocSize)
+ blockList[--i] = block;
+ }
+
+ for (; i < m_BlocksFreeCount; ++i)
+ {
+ Block& block = *blockList[i];
+ if (CheckBlock(block, GetListIndex(block.size), allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ }
+
+ // If failed check null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ // Whole range searched, no more memory
+ return false;
+ }
+ else
+ {
+ // Check larger bucket
+ nextListBlock = FindFreeBlock(sizeForNextList, nextListIndex);
+ while (nextListBlock)
+ {
+ if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ nextListBlock = nextListBlock->NextFree();
+ }
+
+ // If failed check null block
+ if (CheckBlock(*m_NullBlock, m_ListsCount, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+
+ // Check best fit bucket
+ prevListBlock = FindFreeBlock(allocSize, prevListIndex);
+ while (prevListBlock)
+ {
+ if (CheckBlock(*prevListBlock, prevListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ prevListBlock = prevListBlock->NextFree();
+ }
+ }
+
+ // Worst case, full search has to be done
+ while (++nextListIndex < m_ListsCount)
+ {
+ nextListBlock = m_FreeList[nextListIndex];
+ while (nextListBlock)
+ {
+ if (CheckBlock(*nextListBlock, nextListIndex, allocSize, allocAlignment, allocType, pAllocationRequest))
+ return true;
+ nextListBlock = nextListBlock->NextFree();
+ }
+ }
+
+ // No more memory sadly
+ return false;
+}
+
+VkResult VmaBlockMetadata_TLSF::CheckCorruption(const void* pBlockData)
+{
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ {
+ if (!block->IsFree())
+ {
+ if (!VmaValidateMagicValue(pBlockData, block->offset + block->size))
+ {
+ VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER VALIDATED ALLOCATION!");
+ return VK_ERROR_UNKNOWN_COPY;
+ }
+ }
+ }
+
+ return VK_SUCCESS;
+}
+
+void VmaBlockMetadata_TLSF::Alloc(
+ const VmaAllocationRequest& request,
+ VmaSuballocationType type,
+ void* userData)
+{
+ VMA_ASSERT(request.type == VmaAllocationRequestType::TLSF);
+
+ // Get block and pop it from the free list
+ Block* currentBlock = (Block*)request.allocHandle;
+ VkDeviceSize offset = request.algorithmData;
+ VMA_ASSERT(currentBlock != VMA_NULL);
+ VMA_ASSERT(currentBlock->offset <= offset);
+
+ if (currentBlock != m_NullBlock)
+ RemoveFreeBlock(currentBlock);
+
+ VkDeviceSize debugMargin = GetDebugMargin();
+ VkDeviceSize misssingAlignment = offset - currentBlock->offset;
+
+ // Append missing alignment to prev block or create new one
+ if (misssingAlignment)
+ {
+ Block* prevBlock = currentBlock->prevPhysical;
+ VMA_ASSERT(prevBlock != VMA_NULL && "There should be no missing alignment at offset 0!");
+
+ if (prevBlock->IsFree() && prevBlock->size != debugMargin)
+ {
+ uint32_t oldList = GetListIndex(prevBlock->size);
+ prevBlock->size += misssingAlignment;
+ // Check if new size crosses list bucket
+ if (oldList != GetListIndex(prevBlock->size))
+ {
+ prevBlock->size -= misssingAlignment;
+ RemoveFreeBlock(prevBlock);
+ prevBlock->size += misssingAlignment;
+ InsertFreeBlock(prevBlock);
+ }
+ else
+ m_BlocksFreeSize += misssingAlignment;
+ }
+ else
+ {
+ Block* newBlock = m_BlockAllocator.Alloc();
+ currentBlock->prevPhysical = newBlock;
+ prevBlock->nextPhysical = newBlock;
+ newBlock->prevPhysical = prevBlock;
+ newBlock->nextPhysical = currentBlock;
+ newBlock->size = misssingAlignment;
+ newBlock->offset = currentBlock->offset;
+ newBlock->MarkTaken();
+
+ InsertFreeBlock(newBlock);
+ }
+
+ currentBlock->size -= misssingAlignment;
+ currentBlock->offset += misssingAlignment;
+ }
+
+ VkDeviceSize size = request.size + debugMargin;
+ if (currentBlock->size == size)
+ {
+ if (currentBlock == m_NullBlock)
+ {
+ // Setup new null block
+ m_NullBlock = m_BlockAllocator.Alloc();
+ m_NullBlock->size = 0;
+ m_NullBlock->offset = currentBlock->offset + size;
+ m_NullBlock->prevPhysical = currentBlock;
+ m_NullBlock->nextPhysical = VMA_NULL;
+ m_NullBlock->MarkFree();
+ m_NullBlock->PrevFree() = VMA_NULL;
+ m_NullBlock->NextFree() = VMA_NULL;
+ currentBlock->nextPhysical = m_NullBlock;
+ currentBlock->MarkTaken();
+ }
+ }
+ else
+ {
+ VMA_ASSERT(currentBlock->size > size && "Proper block already found, shouldn't find smaller one!");
+
+ // Create new free block
+ Block* newBlock = m_BlockAllocator.Alloc();
+ newBlock->size = currentBlock->size - size;
+ newBlock->offset = currentBlock->offset + size;
+ newBlock->prevPhysical = currentBlock;
+ newBlock->nextPhysical = currentBlock->nextPhysical;
+ currentBlock->nextPhysical = newBlock;
+ currentBlock->size = size;
+
+ if (currentBlock == m_NullBlock)
+ {
+ m_NullBlock = newBlock;
+ m_NullBlock->MarkFree();
+ m_NullBlock->NextFree() = VMA_NULL;
+ m_NullBlock->PrevFree() = VMA_NULL;
+ currentBlock->MarkTaken();
+ }
+ else
+ {
+ newBlock->nextPhysical->prevPhysical = newBlock;
+ newBlock->MarkTaken();
+ InsertFreeBlock(newBlock);
+ }
+ }
+ currentBlock->UserData() = userData;
+
+ if (debugMargin > 0)
+ {
+ currentBlock->size -= debugMargin;
+ Block* newBlock = m_BlockAllocator.Alloc();
+ newBlock->size = debugMargin;
+ newBlock->offset = currentBlock->offset + currentBlock->size;
+ newBlock->prevPhysical = currentBlock;
+ newBlock->nextPhysical = currentBlock->nextPhysical;
+ newBlock->MarkTaken();
+ currentBlock->nextPhysical->prevPhysical = newBlock;
+ currentBlock->nextPhysical = newBlock;
+ InsertFreeBlock(newBlock);
+ }
+
+ if (!IsVirtual())
+ m_GranularityHandler.AllocPages((uint8_t)(uintptr_t)request.customData,
+ currentBlock->offset, currentBlock->size);
+ ++m_AllocCount;
+}
+
+void VmaBlockMetadata_TLSF::Free(VmaAllocHandle allocHandle)
+{
+ Block* block = (Block*)allocHandle;
+ Block* next = block->nextPhysical;
+ VMA_ASSERT(!block->IsFree() && "Block is already free!");
+
+ if (!IsVirtual())
+ m_GranularityHandler.FreePages(block->offset, block->size);
+ --m_AllocCount;
+
+ VkDeviceSize debugMargin = GetDebugMargin();
+ if (debugMargin > 0)
+ {
+ RemoveFreeBlock(next);
+ MergeBlock(next, block);
+ block = next;
+ next = next->nextPhysical;
+ }
+
+ // Try merging
+ Block* prev = block->prevPhysical;
+ if (prev != VMA_NULL && prev->IsFree() && prev->size != debugMargin)
+ {
+ RemoveFreeBlock(prev);
+ MergeBlock(block, prev);
+ }
+
+ if (!next->IsFree())
+ InsertFreeBlock(block);
+ else if (next == m_NullBlock)
+ MergeBlock(m_NullBlock, block);
+ else
+ {
+ RemoveFreeBlock(next);
+ MergeBlock(next, block);
+ InsertFreeBlock(next);
+ }
+}
+
+void VmaBlockMetadata_TLSF::GetAllocationInfo(VmaAllocHandle allocHandle, VmaVirtualAllocationInfo& outInfo)
+{
+ Block* block = (Block*)allocHandle;
+ VMA_ASSERT(!block->IsFree() && "Cannot get allocation info for free block!");
+ outInfo.offset = block->offset;
+ outInfo.size = block->size;
+ outInfo.pUserData = block->UserData();
+}
+
+void* VmaBlockMetadata_TLSF::GetAllocationUserData(VmaAllocHandle allocHandle) const
+{
+ Block* block = (Block*)allocHandle;
+ VMA_ASSERT(!block->IsFree() && "Cannot get user data for free block!");
+ return block->UserData();
+}
+
+VmaAllocHandle VmaBlockMetadata_TLSF::GetAllocationListBegin() const
+{
+ if (m_AllocCount == 0)
+ return VK_NULL_HANDLE;
+
+ for (Block* block = m_NullBlock->prevPhysical; block; block = block->prevPhysical)
+ {
+ if (!block->IsFree())
+ return (VmaAllocHandle)block;
+ }
+ VMA_ASSERT(false && "If m_AllocCount > 0 then should find any allocation!");
+ return VK_NULL_HANDLE;
+}
+
+VmaAllocHandle VmaBlockMetadata_TLSF::GetNextAllocation(VmaAllocHandle prevAlloc) const
+{
+ Block* startBlock = (Block*)prevAlloc;
+ VMA_ASSERT(!startBlock->IsFree() && "Incorrect block!");
+
+ for (Block* block = startBlock->prevPhysical; block; block = block->prevPhysical)
+ {
+ if (!block->IsFree())
+ return (VmaAllocHandle)block;
+ }
+ return VK_NULL_HANDLE;
+}
+
+void VmaBlockMetadata_TLSF::Clear()
+{
+ m_AllocCount = 0;
+ m_BlocksFreeCount = 0;
+ m_BlocksFreeSize = 0;
+ m_IsFreeBitmap = 0;
+ m_NullBlock->offset = 0;
+ m_NullBlock->size = GetSize();
+ Block* block = m_NullBlock->prevPhysical;
+ m_NullBlock->prevPhysical = VMA_NULL;
+ while (block)
+ {
+ Block* prev = block->prevPhysical;
+ m_BlockAllocator.Free(block);
+ block = prev;
+ }
+ memset(m_FreeList, 0, m_ListsCount * sizeof(Block*));
+ memset(m_InnerIsFreeBitmap, 0, m_MemoryClasses * sizeof(uint32_t));
+ m_GranularityHandler.Clear();
+}
+
+void VmaBlockMetadata_TLSF::SetAllocationUserData(VmaAllocHandle allocHandle, void* userData)
+{
+ Block* block = (Block*)allocHandle;
+ VMA_ASSERT(!block->IsFree() && "Trying to set user data for not allocated block!");
+ block->UserData() = userData;
+}
+
+void VmaBlockMetadata_TLSF::DebugLogAllAllocations() const
+{
+ for (Block* block = m_NullBlock->prevPhysical; block != VMA_NULL; block = block->prevPhysical)
+ if (!block->IsFree())
+ DebugLogAllocation(block->offset, block->size, block->UserData());
+}
+
+uint8_t VmaBlockMetadata_TLSF::SizeToMemoryClass(VkDeviceSize size) const
+{
+ if (size > SMALL_BUFFER_SIZE)
+ return VMA_BITSCAN_MSB(size) - MEMORY_CLASS_SHIFT;
+ return 0;
+}
+
+uint16_t VmaBlockMetadata_TLSF::SizeToSecondIndex(VkDeviceSize size, uint8_t memoryClass) const
+{
+ if (memoryClass == 0)
+ {
+ if (IsVirtual())
+ return static_cast<uint16_t>((size - 1) / 8);
+ else
+ return static_cast<uint16_t>((size - 1) / 64);
+ }
+ return static_cast<uint16_t>((size >> (memoryClass + MEMORY_CLASS_SHIFT - SECOND_LEVEL_INDEX)) ^ (1U << SECOND_LEVEL_INDEX));
+}
+
+uint32_t VmaBlockMetadata_TLSF::GetListIndex(uint8_t memoryClass, uint16_t secondIndex) const
+{
+ if (memoryClass == 0)
+ return secondIndex;
+
+ const uint32_t index = static_cast<uint32_t>(memoryClass - 1) * (1 << SECOND_LEVEL_INDEX) + secondIndex;
+ if (IsVirtual())
+ return index + (1 << SECOND_LEVEL_INDEX);
+ else
+ return index + 4;
+}
+
+uint32_t VmaBlockMetadata_TLSF::GetListIndex(VkDeviceSize size) const
+{
+ uint8_t memoryClass = SizeToMemoryClass(size);
+ return GetListIndex(memoryClass, SizeToSecondIndex(size, memoryClass));
+}
+
+void VmaBlockMetadata_TLSF::RemoveFreeBlock(Block* block)
+{
+ VMA_ASSERT(block != m_NullBlock);
+ VMA_ASSERT(block->IsFree());
+
+ if (block->NextFree() != VMA_NULL)
+ block->NextFree()->PrevFree() = block->PrevFree();
+ if (block->PrevFree() != VMA_NULL)
+ block->PrevFree()->NextFree() = block->NextFree();
+ else
+ {
+ uint8_t memClass = SizeToMemoryClass(block->size);
+ uint16_t secondIndex = SizeToSecondIndex(block->size, memClass);
+ uint32_t index = GetListIndex(memClass, secondIndex);
+ VMA_ASSERT(m_FreeList[index] == block);
+ m_FreeList[index] = block->NextFree();
+ if (block->NextFree() == VMA_NULL)
+ {
+ m_InnerIsFreeBitmap[memClass] &= ~(1U << secondIndex);
+ if (m_InnerIsFreeBitmap[memClass] == 0)
+ m_IsFreeBitmap &= ~(1UL << memClass);
+ }
+ }
+ block->MarkTaken();
+ block->UserData() = VMA_NULL;
+ --m_BlocksFreeCount;
+ m_BlocksFreeSize -= block->size;
+}
+
+void VmaBlockMetadata_TLSF::InsertFreeBlock(Block* block)
+{
+ VMA_ASSERT(block != m_NullBlock);
+ VMA_ASSERT(!block->IsFree() && "Cannot insert block twice!");
+
+ uint8_t memClass = SizeToMemoryClass(block->size);
+ uint16_t secondIndex = SizeToSecondIndex(block->size, memClass);
+ uint32_t index = GetListIndex(memClass, secondIndex);
+ VMA_ASSERT(index < m_ListsCount);
+ block->PrevFree() = VMA_NULL;
+ block->NextFree() = m_FreeList[index];
+ m_FreeList[index] = block;
+ if (block->NextFree() != VMA_NULL)
+ block->NextFree()->PrevFree() = block;
+ else
+ {
+ m_InnerIsFreeBitmap[memClass] |= 1U << secondIndex;
+ m_IsFreeBitmap |= 1UL << memClass;
+ }
+ ++m_BlocksFreeCount;
+ m_BlocksFreeSize += block->size;
+}
+
+void VmaBlockMetadata_TLSF::MergeBlock(Block* block, Block* prev)
+{
+ VMA_ASSERT(block->prevPhysical == prev && "Cannot merge seperate physical regions!");
+ VMA_ASSERT(!prev->IsFree() && "Cannot merge block that belongs to free list!");
+
+ block->offset = prev->offset;
+ block->size += prev->size;
+ block->prevPhysical = prev->prevPhysical;
+ if (block->prevPhysical)
+ block->prevPhysical->nextPhysical = block;
+ m_BlockAllocator.Free(prev);
+}
+
+VmaBlockMetadata_TLSF::Block* VmaBlockMetadata_TLSF::FindFreeBlock(VkDeviceSize size, uint32_t& listIndex) const
+{
+ uint8_t memoryClass = SizeToMemoryClass(size);
+ uint32_t innerFreeMap = m_InnerIsFreeBitmap[memoryClass] & (~0U << SizeToSecondIndex(size, memoryClass));
+ if (!innerFreeMap)
+ {
+ // Check higher levels for avaiable blocks
+ uint32_t freeMap = m_IsFreeBitmap & (~0UL << (memoryClass + 1));
+ if (!freeMap)
+ return VMA_NULL; // No more memory avaible
+
+ // Find lowest free region
+ memoryClass = VMA_BITSCAN_LSB(freeMap);
+ innerFreeMap = m_InnerIsFreeBitmap[memoryClass];
+ VMA_ASSERT(innerFreeMap != 0);
+ }
+ // Find lowest free subregion
+ listIndex = GetListIndex(memoryClass, VMA_BITSCAN_LSB(innerFreeMap));
+ VMA_ASSERT(m_FreeList[listIndex]);
+ return m_FreeList[listIndex];
+}
+
+bool VmaBlockMetadata_TLSF::CheckBlock(
+ Block& block,
+ uint32_t listIndex,
+ VkDeviceSize allocSize,
+ VkDeviceSize allocAlignment,
+ VmaSuballocationType allocType,
+ VmaAllocationRequest* pAllocationRequest)
+{
+ VMA_ASSERT(block.IsFree() && "Block is already taken!");
+
+ VkDeviceSize alignedOffset = VmaAlignUp(block.offset, allocAlignment);
+ if (block.size < allocSize + alignedOffset - block.offset)
+ return false;
+
+ // Check for granularity conflicts
+ if (!IsVirtual() &&
+ m_GranularityHandler.CheckConflictAndAlignUp(alignedOffset, allocSize, block.offset, block.size, allocType))
+ return false;
+
+ // Alloc successful
+ pAllocationRequest->type = VmaAllocationRequestType::TLSF;
+ pAllocationRequest->allocHandle = (VmaAllocHandle)&block;
+ pAllocationRequest->size = allocSize - GetDebugMargin();
+ pAllocationRequest->customData = (void*)allocType;
+ pAllocationRequest->algorithmData = alignedOffset;
+
+ // Place block at the start of list if it's normal block
+ if (listIndex != m_ListsCount && block.PrevFree())
+ {
+ block.PrevFree()->NextFree() = block.NextFree();
+ if (block.NextFree())
+ block.NextFree()->PrevFree() = block.PrevFree();
+ block.PrevFree() = VMA_NULL;
+ block.NextFree() = m_FreeList[listIndex];
+ m_FreeList[listIndex] = &block;
+ if (block.NextFree())
+ block.NextFree()->PrevFree() = &block;
+ }
+
+ return true;
+}
+#endif // _VMA_BLOCK_METADATA_TLSF_FUNCTIONS
+#endif // _VMA_BLOCK_METADATA_TLSF
+
+#ifndef _VMA_BLOCK_VECTOR
+/*
+Sequence of VmaDeviceMemoryBlock. Represents memory blocks allocated for a specific
+Vulkan memory type.
+
+Synchronized internally with a mutex.
+*/
+class VmaBlockVector
+{
+ friend struct VmaDefragmentationContext_T;
+ VMA_CLASS_NO_COPY(VmaBlockVector)
+public:
+ VmaBlockVector(
+ VmaAllocator hAllocator,
+ VmaPool hParentPool,
+ uint32_t memoryTypeIndex,
+ VkDeviceSize preferredBlockSize,
+ size_t minBlockCount,
+ size_t maxBlockCount,
+ VkDeviceSize bufferImageGranularity,
+ bool explicitBlockSize,
+ uint32_t algorithm,
+ float priority,
+ VkDeviceSize minAllocationAlignment,
+ void* pMemoryAllocateNext);
+ ~VmaBlockVector();
+
+ VmaAllocator GetAllocator() const { return m_hAllocator; }
+ VmaPool GetParentPool() const { return m_hParentPool; }
+ bool IsCustomPool() const { return m_hParentPool != VMA_NULL; }
+ uint32_t GetMemoryTypeIndex() const { return m_MemoryTypeIndex; }
+ VkDeviceSize GetPreferredBlockSize() const { return m_PreferredBlockSize; }
+ VkDeviceSize GetBufferImageGranularity() const { return m_BufferImageGranularity; }
+ uint32_t GetAlgorithm() const { return m_Algorithm; }
+ bool HasExplicitBlockSize() const { return m_ExplicitBlockSize; }
+ float GetPriority() const { return m_Priority; }
+ void* const GetAllocationNextPtr() const { return m_pMemoryAllocateNext; }
+ // To be used only while the m_Mutex is locked. Used during defragmentation.
+ size_t GetBlockCount() const { return m_Blocks.size(); }
+ // To be used only while the m_Mutex is locked. Used during defragmentation.
+ VmaDeviceMemoryBlock* GetBlock(size_t index) const { return m_Blocks[index]; }
+
+ VkResult CreateMinBlocks();
+ void AddStatistics(VmaStatistics& inoutStats);
+ void AddDetailedStatistics(VmaDetailedStatistics& inoutStats);
+ bool IsEmpty();
+ bool IsCorruptionDetectionEnabled() const;
+
+ VkResult Allocate(
+ VkDeviceSize size,
+ VkDeviceSize alignment,
+ const VmaAllocationCreateInfo& createInfo,
+ VmaSuballocationType suballocType,
+ size_t allocationCount,
+ VmaAllocation* pAllocations);
+
+ void Free(const VmaAllocation hAllocation, bool incrementalSort = true);
+
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json);
+#endif
+
+ VkResult CheckCorruption();
+
+private:
+ const VmaAllocator m_hAllocator;
+ const VmaPool m_hParentPool;
+ const uint32_t m_MemoryTypeIndex;
+ const VkDeviceSize m_PreferredBlockSize;
+ const size_t m_MinBlockCount;
+ const size_t m_MaxBlockCount;
+ const VkDeviceSize m_BufferImageGranularity;
+ const bool m_ExplicitBlockSize;
+ const uint32_t m_Algorithm;
+ const float m_Priority;
+ const VkDeviceSize m_MinAllocationAlignment;
+
+ void* const m_pMemoryAllocateNext;
+ VMA_RW_MUTEX m_Mutex;
+ // Incrementally sorted by sumFreeSize, ascending.
+ VmaVector<VmaDeviceMemoryBlock*, VmaStlAllocator<VmaDeviceMemoryBlock*>> m_Blocks;
+ uint32_t m_NextBlockId;
+
+ VkDeviceSize CalcMaxBlockSize() const;
+ // Finds and removes given block from vector.
+ void Remove(VmaDeviceMemoryBlock* pBlock);
+ // Performs single step in sorting m_Blocks. They may not be fully sorted
+ // after this call.
+ void IncrementallySortBlocks();
+ void SortByFreeSize();
+
+ VkResult AllocatePage(
+ VkDeviceSize size,
+ VkDeviceSize alignment,
+ const VmaAllocationCreateInfo& createInfo,
+ VmaSuballocationType suballocType,
+ VmaAllocation* pAllocation);
+
+ VkResult AllocateFromBlock(
+ VmaDeviceMemoryBlock* pBlock,
+ VkDeviceSize size,
+ VkDeviceSize alignment,
+ VmaAllocationCreateFlags allocFlags,
+ void* pUserData,
+ VmaSuballocationType suballocType,
+ uint32_t strategy,
+ VmaAllocation* pAllocation);
+
+ VkResult CommitAllocationRequest(
+ VmaAllocationRequest& allocRequest,
+ VmaDeviceMemoryBlock* pBlock,
+ VkDeviceSize alignment,
+ VmaAllocationCreateFlags allocFlags,
+ void* pUserData,
+ VmaSuballocationType suballocType,
+ VmaAllocation* pAllocation);
+
+ VkResult CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex);
+ bool HasEmptyBlock();
+};
+#endif // _VMA_BLOCK_VECTOR
+
+#ifndef _VMA_DEFRAGMENTATION_CONTEXT
+struct VmaDefragmentationContext_T
+{
+ VMA_CLASS_NO_COPY(VmaDefragmentationContext_T)
+public:
+ VmaDefragmentationContext_T(
+ VmaAllocator hAllocator,
+ const VmaDefragmentationInfo& info);
+ ~VmaDefragmentationContext_T();
+
+ void GetStats(VmaDefragmentationStats& outStats) { outStats = m_Stats; }
+
+ VkResult DefragmentPassBegin(VmaDefragmentationPassMoveInfo& moveInfo);
+ VkResult DefragmentPassEnd(VmaDefragmentationPassMoveInfo& moveInfo);
+
+private:
+ struct ImmovableBlock
+ {
+ uint32_t vectorIndex;
+ VmaDeviceMemoryBlock* block;
+ };
+ struct StateExtensive
+ {
+ enum class Operation : uint8_t
+ {
+ FindFreeBlockBuffer, FindFreeBlockTexture, FindFreeBlockAll,
+ MoveBuffers, MoveTextures, MoveAll,
+ Cleanup, Done
+ };
+
+ Operation operation = Operation::FindFreeBlockTexture;
+ size_t firstFreeBlock = SIZE_MAX;
+ };
+ struct MoveAllocationData
+ {
+ VkDeviceSize size;
+ VkDeviceSize alignment;
+ VmaSuballocationType type;
+ VmaAllocationCreateFlags flags;
+ VmaDefragmentationMove move = {};
+ };
+
+ const VkDeviceSize m_MaxPassBytes;
+ const uint32_t m_MaxPassAllocations;
+
+ VmaStlAllocator<VmaDefragmentationMove> m_MoveAllocator;
+ VmaVector<VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove>> m_Moves;
+
+ uint32_t m_Algorithm;
+ uint32_t m_BlockVectorCount;
+ VmaBlockVector* m_PoolBlockVector;
+ VmaBlockVector** m_pBlockVectors;
+ size_t m_ImmovableBlockCount = 0;
+ VmaDefragmentationStats m_Stats = { 0 };
+ void* m_AlgorithmState = VMA_NULL;
+
+ static MoveAllocationData GetMoveData(VmaAllocHandle handle, VmaBlockMetadata* metadata);
+ bool IncrementCounters(uint32_t& allocations, VkDeviceSize bytes);
+ bool ReallocWithinBlock(VmaBlockVector& vector, VmaDeviceMemoryBlock* block);
+ bool AllocInOtherBlock(size_t start, size_t end, MoveAllocationData& data, VmaBlockVector& vector);
+
+ bool ComputeDefragmentation(VmaBlockVector& vector, size_t index);
+ bool ComputeDefragmentation_Fast(VmaBlockVector& vector);
+ bool ComputeDefragmentation_Balanced(VmaBlockVector& vector);
+ bool ComputeDefragmentation_Full(VmaBlockVector& vector);
+ bool ComputeDefragmentation_Extensive(VmaBlockVector& vector, size_t index);
+
+ bool MoveDataToFreeBlocks(VmaSuballocationType currentType,
+ VmaBlockVector& vector, size_t firstFreeBlock,
+ bool& texturePresent, bool& bufferPresent, bool& otherPresent);
+};
+#endif // _VMA_DEFRAGMENTATION_CONTEXT
+
+#ifndef _VMA_POOL_T
+struct VmaPool_T
+{
+ friend struct VmaPoolListItemTraits;
+ VMA_CLASS_NO_COPY(VmaPool_T)
+public:
+ VmaBlockVector m_BlockVector;
+ VmaDedicatedAllocationList m_DedicatedAllocations;
+
+ VmaPool_T(
+ VmaAllocator hAllocator,
+ const VmaPoolCreateInfo& createInfo,
+ VkDeviceSize preferredBlockSize);
+ ~VmaPool_T();
+
+ uint32_t GetId() const { return m_Id; }
+ void SetId(uint32_t id) { VMA_ASSERT(m_Id == 0); m_Id = id; }
+
+ const char* GetName() const { return m_Name; }
+ void SetName(const char* pName);
+
+#if VMA_STATS_STRING_ENABLED
+ //void PrintDetailedMap(class VmaStringBuilder& sb);
+#endif
+
+private:
+ uint32_t m_Id;
+ char* m_Name;
+ VmaPool_T* m_PrevPool = VMA_NULL;
+ VmaPool_T* m_NextPool = VMA_NULL;
+};
+
+struct VmaPoolListItemTraits
+{
+ typedef VmaPool_T ItemType;
+
+ static ItemType* GetPrev(const ItemType* item) { return item->m_PrevPool; }
+ static ItemType* GetNext(const ItemType* item) { return item->m_NextPool; }
+ static ItemType*& AccessPrev(ItemType* item) { return item->m_PrevPool; }
+ static ItemType*& AccessNext(ItemType* item) { return item->m_NextPool; }
+};
+#endif // _VMA_POOL_T
+
+#ifndef _VMA_CURRENT_BUDGET_DATA
+struct VmaCurrentBudgetData
+{
+ VMA_ATOMIC_UINT32 m_BlockCount[VK_MAX_MEMORY_HEAPS];
+ VMA_ATOMIC_UINT32 m_AllocationCount[VK_MAX_MEMORY_HEAPS];
+ VMA_ATOMIC_UINT64 m_BlockBytes[VK_MAX_MEMORY_HEAPS];
+ VMA_ATOMIC_UINT64 m_AllocationBytes[VK_MAX_MEMORY_HEAPS];
+
+#if VMA_MEMORY_BUDGET
+ VMA_ATOMIC_UINT32 m_OperationsSinceBudgetFetch;
+ VMA_RW_MUTEX m_BudgetMutex;
+ uint64_t m_VulkanUsage[VK_MAX_MEMORY_HEAPS];
+ uint64_t m_VulkanBudget[VK_MAX_MEMORY_HEAPS];
+ uint64_t m_BlockBytesAtBudgetFetch[VK_MAX_MEMORY_HEAPS];
+#endif // VMA_MEMORY_BUDGET
+
+ VmaCurrentBudgetData();
+
+ void AddAllocation(uint32_t heapIndex, VkDeviceSize allocationSize);
+ void RemoveAllocation(uint32_t heapIndex, VkDeviceSize allocationSize);
+};
+
+#ifndef _VMA_CURRENT_BUDGET_DATA_FUNCTIONS
+VmaCurrentBudgetData::VmaCurrentBudgetData()
+{
+ for (uint32_t heapIndex = 0; heapIndex < VK_MAX_MEMORY_HEAPS; ++heapIndex)
+ {
+ m_BlockCount[heapIndex] = 0;
+ m_AllocationCount[heapIndex] = 0;
+ m_BlockBytes[heapIndex] = 0;
+ m_AllocationBytes[heapIndex] = 0;
+#if VMA_MEMORY_BUDGET
+ m_VulkanUsage[heapIndex] = 0;
+ m_VulkanBudget[heapIndex] = 0;
+ m_BlockBytesAtBudgetFetch[heapIndex] = 0;
+#endif
+ }
+
+#if VMA_MEMORY_BUDGET
+ m_OperationsSinceBudgetFetch = 0;
+#endif
+}
+
+void VmaCurrentBudgetData::AddAllocation(uint32_t heapIndex, VkDeviceSize allocationSize)
+{
+ m_AllocationBytes[heapIndex] += allocationSize;
+ ++m_AllocationCount[heapIndex];
+#if VMA_MEMORY_BUDGET
+ ++m_OperationsSinceBudgetFetch;
+#endif
+}
+
+void VmaCurrentBudgetData::RemoveAllocation(uint32_t heapIndex, VkDeviceSize allocationSize)
+{
+ VMA_ASSERT(m_AllocationBytes[heapIndex] >= allocationSize);
+ m_AllocationBytes[heapIndex] -= allocationSize;
+ VMA_ASSERT(m_AllocationCount[heapIndex] > 0);
+ --m_AllocationCount[heapIndex];
+#if VMA_MEMORY_BUDGET
+ ++m_OperationsSinceBudgetFetch;
+#endif
+}
+#endif // _VMA_CURRENT_BUDGET_DATA_FUNCTIONS
+#endif // _VMA_CURRENT_BUDGET_DATA
+
+#ifndef _VMA_ALLOCATION_OBJECT_ALLOCATOR
+/*
+Thread-safe wrapper over VmaPoolAllocator free list, for allocation of VmaAllocation_T objects.
+*/
+class VmaAllocationObjectAllocator
+{
+ VMA_CLASS_NO_COPY(VmaAllocationObjectAllocator)
+public:
+ VmaAllocationObjectAllocator(const VkAllocationCallbacks* pAllocationCallbacks)
+ : m_Allocator(pAllocationCallbacks, 1024) {}
+
+ template<typename... Types> VmaAllocation Allocate(Types&&... args);
+ void Free(VmaAllocation hAlloc);
+
+private:
+ VMA_MUTEX m_Mutex;
+ VmaPoolAllocator<VmaAllocation_T> m_Allocator;
+};
+
+template<typename... Types>
+VmaAllocation VmaAllocationObjectAllocator::Allocate(Types&&... args)
+{
+ VmaMutexLock mutexLock(m_Mutex);
+ return m_Allocator.Alloc<Types...>(std::forward<Types>(args)...);
+}
+
+void VmaAllocationObjectAllocator::Free(VmaAllocation hAlloc)
+{
+ VmaMutexLock mutexLock(m_Mutex);
+ m_Allocator.Free(hAlloc);
+}
+#endif // _VMA_ALLOCATION_OBJECT_ALLOCATOR
+
+#ifndef _VMA_VIRTUAL_BLOCK_T
+struct VmaVirtualBlock_T
+{
+ VMA_CLASS_NO_COPY(VmaVirtualBlock_T)
+public:
+ const bool m_AllocationCallbacksSpecified;
+ const VkAllocationCallbacks m_AllocationCallbacks;
+
+ VmaVirtualBlock_T(const VmaVirtualBlockCreateInfo& createInfo);
+ ~VmaVirtualBlock_T();
+
+ VkResult Init() { return VK_SUCCESS; }
+ bool IsEmpty() const { return m_Metadata->IsEmpty(); }
+ void Free(VmaVirtualAllocation allocation) { m_Metadata->Free((VmaAllocHandle)allocation); }
+ void SetAllocationUserData(VmaVirtualAllocation allocation, void* userData) { m_Metadata->SetAllocationUserData((VmaAllocHandle)allocation, userData); }
+ void Clear() { m_Metadata->Clear(); }
+
+ const VkAllocationCallbacks* GetAllocationCallbacks() const;
+ void GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo);
+ VkResult Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation,
+ VkDeviceSize* outOffset);
+ void GetStatistics(VmaStatistics& outStats) const;
+ void CalculateDetailedStatistics(VmaDetailedStatistics& outStats) const;
+#if VMA_STATS_STRING_ENABLED
+ void BuildStatsString(bool detailedMap, VmaStringBuilder& sb) const;
+#endif
+
+private:
+ VmaBlockMetadata* m_Metadata;
+};
+
+#ifndef _VMA_VIRTUAL_BLOCK_T_FUNCTIONS
+VmaVirtualBlock_T::VmaVirtualBlock_T(const VmaVirtualBlockCreateInfo& createInfo)
+ : m_AllocationCallbacksSpecified(createInfo.pAllocationCallbacks != VMA_NULL),
+ m_AllocationCallbacks(createInfo.pAllocationCallbacks != VMA_NULL ? *createInfo.pAllocationCallbacks : VmaEmptyAllocationCallbacks)
+{
+ const uint32_t algorithm = createInfo.flags & VMA_VIRTUAL_BLOCK_CREATE_ALGORITHM_MASK;
+ switch (algorithm)
+ {
default:
VMA_ASSERT(0);
+ case 0:
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_TLSF)(VK_NULL_HANDLE, 1, true);
+ break;
+ case VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT:
+ m_Metadata = vma_new(GetAllocationCallbacks(), VmaBlockMetadata_Linear)(VK_NULL_HANDLE, 1, true);
+ break;
}
+
+ m_Metadata->Init(createInfo.size);
}
-#endif // #if VMA_STATS_STRING_ENABLED
+VmaVirtualBlock_T::~VmaVirtualBlock_T()
+{
+ // Define macro VMA_DEBUG_LOG to receive the list of the unfreed allocations
+ if (!m_Metadata->IsEmpty())
+ m_Metadata->DebugLogAllAllocations();
+ // This is the most important assert in the entire library.
+ // Hitting it means you have some memory leak - unreleased virtual allocations.
+ VMA_ASSERT(m_Metadata->IsEmpty() && "Some virtual allocations were not freed before destruction of this virtual block!");
+
+ vma_delete(GetAllocationCallbacks(), m_Metadata);
+}
-////////////////////////////////////////////////////////////////////////////////
-// class VmaDeviceMemoryBlock
+const VkAllocationCallbacks* VmaVirtualBlock_T::GetAllocationCallbacks() const
+{
+ return m_AllocationCallbacksSpecified ? &m_AllocationCallbacks : VMA_NULL;
+}
+
+void VmaVirtualBlock_T::GetAllocationInfo(VmaVirtualAllocation allocation, VmaVirtualAllocationInfo& outInfo)
+{
+ m_Metadata->GetAllocationInfo((VmaAllocHandle)allocation, outInfo);
+}
+
+VkResult VmaVirtualBlock_T::Allocate(const VmaVirtualAllocationCreateInfo& createInfo, VmaVirtualAllocation& outAllocation,
+ VkDeviceSize* outOffset)
+{
+ VmaAllocationRequest request = {};
+ if (m_Metadata->CreateAllocationRequest(
+ createInfo.size, // allocSize
+ VMA_MAX(createInfo.alignment, (VkDeviceSize)1), // allocAlignment
+ (createInfo.flags & VMA_VIRTUAL_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0, // upperAddress
+ VMA_SUBALLOCATION_TYPE_UNKNOWN, // allocType - unimportant
+ createInfo.flags & VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MASK, // strategy
+ &request))
+ {
+ m_Metadata->Alloc(request,
+ VMA_SUBALLOCATION_TYPE_UNKNOWN, // type - unimportant
+ createInfo.pUserData);
+ outAllocation = (VmaVirtualAllocation)request.allocHandle;
+ if(outOffset)
+ *outOffset = m_Metadata->GetAllocationOffset(request.allocHandle);
+ return VK_SUCCESS;
+ }
+ outAllocation = (VmaVirtualAllocation)VK_NULL_HANDLE;
+ if (outOffset)
+ *outOffset = UINT64_MAX;
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+}
+
+void VmaVirtualBlock_T::GetStatistics(VmaStatistics& outStats) const
+{
+ VmaClearStatistics(outStats);
+ m_Metadata->AddStatistics(outStats);
+}
+
+void VmaVirtualBlock_T::CalculateDetailedStatistics(VmaDetailedStatistics& outStats) const
+{
+ VmaClearDetailedStatistics(outStats);
+ m_Metadata->AddDetailedStatistics(outStats);
+}
+
+#if VMA_STATS_STRING_ENABLED
+void VmaVirtualBlock_T::BuildStatsString(bool detailedMap, VmaStringBuilder& sb) const
+{
+ VmaJsonWriter json(GetAllocationCallbacks(), sb);
+ json.BeginObject();
+
+ VmaDetailedStatistics stats;
+ CalculateDetailedStatistics(stats);
+
+ json.WriteString("Stats");
+ VmaPrintDetailedStatistics(json, stats);
+
+ if (detailedMap)
+ {
+ json.WriteString("Details");
+ m_Metadata->PrintDetailedMap(json,
+ UINT32_MAX); // mapRefCount
+ }
+
+ json.EndObject();
+}
+#endif // VMA_STATS_STRING_ENABLED
+#endif // _VMA_VIRTUAL_BLOCK_T_FUNCTIONS
+#endif // _VMA_VIRTUAL_BLOCK_T
+
+
+// Main allocator object.
+struct VmaAllocator_T
+{
+ VMA_CLASS_NO_COPY(VmaAllocator_T)
+public:
+ bool m_UseMutex;
+ uint32_t m_VulkanApiVersion;
+ bool m_UseKhrDedicatedAllocation; // Can be set only if m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0).
+ bool m_UseKhrBindMemory2; // Can be set only if m_VulkanApiVersion < VK_MAKE_VERSION(1, 1, 0).
+ bool m_UseExtMemoryBudget;
+ bool m_UseAmdDeviceCoherentMemory;
+ bool m_UseKhrBufferDeviceAddress;
+ bool m_UseExtMemoryPriority;
+ VkDevice m_hDevice;
+ VkInstance m_hInstance;
+ bool m_AllocationCallbacksSpecified;
+ VkAllocationCallbacks m_AllocationCallbacks;
+ VmaDeviceMemoryCallbacks m_DeviceMemoryCallbacks;
+ VmaAllocationObjectAllocator m_AllocationObjectAllocator;
+
+ // Each bit (1 << i) is set if HeapSizeLimit is enabled for that heap, so cannot allocate more than the heap size.
+ uint32_t m_HeapSizeLimitMask;
+
+ VkPhysicalDeviceProperties m_PhysicalDeviceProperties;
+ VkPhysicalDeviceMemoryProperties m_MemProps;
+
+ // Default pools.
+ VmaBlockVector* m_pBlockVectors[VK_MAX_MEMORY_TYPES];
+ VmaDedicatedAllocationList m_DedicatedAllocations[VK_MAX_MEMORY_TYPES];
+
+ VmaCurrentBudgetData m_Budget;
+ VMA_ATOMIC_UINT32 m_DeviceMemoryCount; // Total number of VkDeviceMemory objects.
+
+ VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo);
+ VkResult Init(const VmaAllocatorCreateInfo* pCreateInfo);
+ ~VmaAllocator_T();
+
+ const VkAllocationCallbacks* GetAllocationCallbacks() const
+ {
+ return m_AllocationCallbacksSpecified ? &m_AllocationCallbacks : VMA_NULL;
+ }
+ const VmaVulkanFunctions& GetVulkanFunctions() const
+ {
+ return m_VulkanFunctions;
+ }
+
+ VkPhysicalDevice GetPhysicalDevice() const { return m_PhysicalDevice; }
+
+ VkDeviceSize GetBufferImageGranularity() const
+ {
+ return VMA_MAX(
+ static_cast<VkDeviceSize>(VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY),
+ m_PhysicalDeviceProperties.limits.bufferImageGranularity);
+ }
+
+ uint32_t GetMemoryHeapCount() const { return m_MemProps.memoryHeapCount; }
+ uint32_t GetMemoryTypeCount() const { return m_MemProps.memoryTypeCount; }
+
+ uint32_t MemoryTypeIndexToHeapIndex(uint32_t memTypeIndex) const
+ {
+ VMA_ASSERT(memTypeIndex < m_MemProps.memoryTypeCount);
+ return m_MemProps.memoryTypes[memTypeIndex].heapIndex;
+ }
+ // True when specific memory type is HOST_VISIBLE but not HOST_COHERENT.
+ bool IsMemoryTypeNonCoherent(uint32_t memTypeIndex) const
+ {
+ return (m_MemProps.memoryTypes[memTypeIndex].propertyFlags & (VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT)) ==
+ VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+ }
+ // Minimum alignment for all allocations in specific memory type.
+ VkDeviceSize GetMemoryTypeMinAlignment(uint32_t memTypeIndex) const
+ {
+ return IsMemoryTypeNonCoherent(memTypeIndex) ?
+ VMA_MAX((VkDeviceSize)VMA_MIN_ALIGNMENT, m_PhysicalDeviceProperties.limits.nonCoherentAtomSize) :
+ (VkDeviceSize)VMA_MIN_ALIGNMENT;
+ }
+
+ bool IsIntegratedGpu() const
+ {
+ return m_PhysicalDeviceProperties.deviceType == VK_PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU;
+ }
+
+ uint32_t GetGlobalMemoryTypeBits() const { return m_GlobalMemoryTypeBits; }
+
+ void GetBufferMemoryRequirements(
+ VkBuffer hBuffer,
+ VkMemoryRequirements& memReq,
+ bool& requiresDedicatedAllocation,
+ bool& prefersDedicatedAllocation) const;
+ void GetImageMemoryRequirements(
+ VkImage hImage,
+ VkMemoryRequirements& memReq,
+ bool& requiresDedicatedAllocation,
+ bool& prefersDedicatedAllocation) const;
+ VkResult FindMemoryTypeIndex(
+ uint32_t memoryTypeBits,
+ const VmaAllocationCreateInfo* pAllocationCreateInfo,
+ VkFlags bufImgUsage, // VkBufferCreateInfo::usage or VkImageCreateInfo::usage. UINT32_MAX if unknown.
+ uint32_t* pMemoryTypeIndex) const;
+
+ // Main allocation function.
+ VkResult AllocateMemory(
+ const VkMemoryRequirements& vkMemReq,
+ bool requiresDedicatedAllocation,
+ bool prefersDedicatedAllocation,
+ VkBuffer dedicatedBuffer,
+ VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage, // UINT32_MAX if unknown.
+ const VmaAllocationCreateInfo& createInfo,
+ VmaSuballocationType suballocType,
+ size_t allocationCount,
+ VmaAllocation* pAllocations);
+
+ // Main deallocation function.
+ void FreeMemory(
+ size_t allocationCount,
+ const VmaAllocation* pAllocations);
+
+ void CalculateStatistics(VmaTotalStatistics* pStats);
+
+ void GetHeapBudgets(
+ VmaBudget* outBudgets, uint32_t firstHeap, uint32_t heapCount);
+
+#if VMA_STATS_STRING_ENABLED
+ void PrintDetailedMap(class VmaJsonWriter& json);
+#endif
+
+ void GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo);
+
+ VkResult CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPool* pPool);
+ void DestroyPool(VmaPool pool);
+ void GetPoolStatistics(VmaPool pool, VmaStatistics* pPoolStats);
+ void CalculatePoolStatistics(VmaPool pool, VmaDetailedStatistics* pPoolStats);
+
+ void SetCurrentFrameIndex(uint32_t frameIndex);
+ uint32_t GetCurrentFrameIndex() const { return m_CurrentFrameIndex.load(); }
+
+ VkResult CheckPoolCorruption(VmaPool hPool);
+ VkResult CheckCorruption(uint32_t memoryTypeBits);
+
+ // Call to Vulkan function vkAllocateMemory with accompanying bookkeeping.
+ VkResult AllocateVulkanMemory(const VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory);
+ // Call to Vulkan function vkFreeMemory with accompanying bookkeeping.
+ void FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, VkDeviceMemory hMemory);
+ // Call to Vulkan function vkBindBufferMemory or vkBindBufferMemory2KHR.
+ VkResult BindVulkanBuffer(
+ VkDeviceMemory memory,
+ VkDeviceSize memoryOffset,
+ VkBuffer buffer,
+ const void* pNext);
+ // Call to Vulkan function vkBindImageMemory or vkBindImageMemory2KHR.
+ VkResult BindVulkanImage(
+ VkDeviceMemory memory,
+ VkDeviceSize memoryOffset,
+ VkImage image,
+ const void* pNext);
+
+ VkResult Map(VmaAllocation hAllocation, void** ppData);
+ void Unmap(VmaAllocation hAllocation);
+
+ VkResult BindBufferMemory(
+ VmaAllocation hAllocation,
+ VkDeviceSize allocationLocalOffset,
+ VkBuffer hBuffer,
+ const void* pNext);
+ VkResult BindImageMemory(
+ VmaAllocation hAllocation,
+ VkDeviceSize allocationLocalOffset,
+ VkImage hImage,
+ const void* pNext);
+
+ VkResult FlushOrInvalidateAllocation(
+ VmaAllocation hAllocation,
+ VkDeviceSize offset, VkDeviceSize size,
+ VMA_CACHE_OPERATION op);
+ VkResult FlushOrInvalidateAllocations(
+ uint32_t allocationCount,
+ const VmaAllocation* allocations,
+ const VkDeviceSize* offsets, const VkDeviceSize* sizes,
+ VMA_CACHE_OPERATION op);
+
+ void FillAllocation(const VmaAllocation hAllocation, uint8_t pattern);
+
+ /*
+ Returns bit mask of memory types that can support defragmentation on GPU as
+ they support creation of required buffer for copy operations.
+ */
+ uint32_t GetGpuDefragmentationMemoryTypeBits();
+
+#if VMA_EXTERNAL_MEMORY
+ VkExternalMemoryHandleTypeFlagsKHR GetExternalMemoryHandleTypeFlags(uint32_t memTypeIndex) const
+ {
+ return m_TypeExternalMemoryHandleTypes[memTypeIndex];
+ }
+#endif // #if VMA_EXTERNAL_MEMORY
+
+private:
+ VkDeviceSize m_PreferredLargeHeapBlockSize;
+
+ VkPhysicalDevice m_PhysicalDevice;
+ VMA_ATOMIC_UINT32 m_CurrentFrameIndex;
+ VMA_ATOMIC_UINT32 m_GpuDefragmentationMemoryTypeBits; // UINT32_MAX means uninitialized.
+#if VMA_EXTERNAL_MEMORY
+ VkExternalMemoryHandleTypeFlagsKHR m_TypeExternalMemoryHandleTypes[VK_MAX_MEMORY_TYPES];
+#endif // #if VMA_EXTERNAL_MEMORY
+
+ VMA_RW_MUTEX m_PoolsMutex;
+ typedef VmaIntrusiveLinkedList<VmaPoolListItemTraits> PoolList;
+ // Protected by m_PoolsMutex.
+ PoolList m_Pools;
+ uint32_t m_NextPoolId;
+
+ VmaVulkanFunctions m_VulkanFunctions;
+
+ // Global bit mask AND-ed with any memoryTypeBits to disallow certain memory types.
+ uint32_t m_GlobalMemoryTypeBits;
+
+ void ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunctions);
+
+#if VMA_STATIC_VULKAN_FUNCTIONS == 1
+ void ImportVulkanFunctions_Static();
+#endif
+
+ void ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVulkanFunctions);
+
+#if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1
+ void ImportVulkanFunctions_Dynamic();
+#endif
+
+ void ValidateVulkanFunctions();
+
+ VkDeviceSize CalcPreferredBlockSize(uint32_t memTypeIndex);
+
+ VkResult AllocateMemoryOfType(
+ VmaPool pool,
+ VkDeviceSize size,
+ VkDeviceSize alignment,
+ bool dedicatedPreferred,
+ VkBuffer dedicatedBuffer,
+ VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
+ const VmaAllocationCreateInfo& createInfo,
+ uint32_t memTypeIndex,
+ VmaSuballocationType suballocType,
+ VmaDedicatedAllocationList& dedicatedAllocations,
+ VmaBlockVector& blockVector,
+ size_t allocationCount,
+ VmaAllocation* pAllocations);
+
+ // Helper function only to be used inside AllocateDedicatedMemory.
+ VkResult AllocateDedicatedMemoryPage(
+ VmaPool pool,
+ VkDeviceSize size,
+ VmaSuballocationType suballocType,
+ uint32_t memTypeIndex,
+ const VkMemoryAllocateInfo& allocInfo,
+ bool map,
+ bool isUserDataString,
+ bool isMappingAllowed,
+ void* pUserData,
+ VmaAllocation* pAllocation);
+
+ // Allocates and registers new VkDeviceMemory specifically for dedicated allocations.
+ VkResult AllocateDedicatedMemory(
+ VmaPool pool,
+ VkDeviceSize size,
+ VmaSuballocationType suballocType,
+ VmaDedicatedAllocationList& dedicatedAllocations,
+ uint32_t memTypeIndex,
+ bool map,
+ bool isUserDataString,
+ bool isMappingAllowed,
+ bool canAliasMemory,
+ void* pUserData,
+ float priority,
+ VkBuffer dedicatedBuffer,
+ VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
+ size_t allocationCount,
+ VmaAllocation* pAllocations,
+ const void* pNextChain = nullptr);
+
+ void FreeDedicatedMemory(const VmaAllocation allocation);
+
+ VkResult CalcMemTypeParams(
+ VmaAllocationCreateInfo& outCreateInfo,
+ uint32_t memTypeIndex,
+ VkDeviceSize size,
+ size_t allocationCount);
+ VkResult CalcAllocationParams(
+ VmaAllocationCreateInfo& outCreateInfo,
+ bool dedicatedRequired,
+ bool dedicatedPreferred);
+
+ /*
+ Calculates and returns bit mask of memory types that can support defragmentation
+ on GPU as they support creation of required buffer for copy operations.
+ */
+ uint32_t CalculateGpuDefragmentationMemoryTypeBits() const;
+ uint32_t CalculateGlobalMemoryTypeBits() const;
+
+ bool GetFlushOrInvalidateRange(
+ VmaAllocation allocation,
+ VkDeviceSize offset, VkDeviceSize size,
+ VkMappedMemoryRange& outRange) const;
+
+#if VMA_MEMORY_BUDGET
+ void UpdateVulkanBudget();
+#endif // #if VMA_MEMORY_BUDGET
+};
+
+
+#ifndef _VMA_MEMORY_FUNCTIONS
+static void* VmaMalloc(VmaAllocator hAllocator, size_t size, size_t alignment)
+{
+ return VmaMalloc(&hAllocator->m_AllocationCallbacks, size, alignment);
+}
+
+static void VmaFree(VmaAllocator hAllocator, void* ptr)
+{
+ VmaFree(&hAllocator->m_AllocationCallbacks, ptr);
+}
+
+template<typename T>
+static T* VmaAllocate(VmaAllocator hAllocator)
+{
+ return (T*)VmaMalloc(hAllocator, sizeof(T), VMA_ALIGN_OF(T));
+}
+
+template<typename T>
+static T* VmaAllocateArray(VmaAllocator hAllocator, size_t count)
+{
+ return (T*)VmaMalloc(hAllocator, sizeof(T) * count, VMA_ALIGN_OF(T));
+}
+
+template<typename T>
+static void vma_delete(VmaAllocator hAllocator, T* ptr)
+{
+ if(ptr != VMA_NULL)
+ {
+ ptr->~T();
+ VmaFree(hAllocator, ptr);
+ }
+}
+
+template<typename T>
+static void vma_delete_array(VmaAllocator hAllocator, T* ptr, size_t count)
+{
+ if(ptr != VMA_NULL)
+ {
+ for(size_t i = count; i--; )
+ ptr[i].~T();
+ VmaFree(hAllocator, ptr);
+ }
+}
+#endif // _VMA_MEMORY_FUNCTIONS
+#ifndef _VMA_DEVICE_MEMORY_BLOCK_FUNCTIONS
VmaDeviceMemoryBlock::VmaDeviceMemoryBlock(VmaAllocator hAllocator)
+ : m_pMetadata(VMA_NULL),
+ m_MemoryTypeIndex(UINT32_MAX),
+ m_Id(0),
+ m_hMemory(VK_NULL_HANDLE),
+ m_MapCount(0),
+ m_pMappedData(VMA_NULL) {}
+
+VmaDeviceMemoryBlock::~VmaDeviceMemoryBlock()
{
+ VMA_ASSERT(m_MapCount == 0 && "VkDeviceMemory block is being destroyed while it is still mapped.");
+ VMA_ASSERT(m_hMemory == VK_NULL_HANDLE);
}
void VmaDeviceMemoryBlock::Init(
VmaAllocator hAllocator,
- VmaBlockVector* parentBlockVector,
VmaPool hParentPool,
uint32_t newMemoryTypeIndex,
VkDeviceMemory newMemory,
VkDeviceSize newSize,
uint32_t id,
- uint32_t algorithm)
+ uint32_t algorithm,
+ VkDeviceSize bufferImageGranularity)
{
- VMA_ASSERT(parentBlockVector != VMA_NULL);
VMA_ASSERT(m_hMemory == VK_NULL_HANDLE);
- m_ParentBlockVector = parentBlockVector;
m_hParentPool = hParentPool;
m_MemoryTypeIndex = newMemoryTypeIndex;
m_Id = id;
m_hMemory = newMemory;
- switch(algorithm)
+ switch (algorithm)
{
case VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT:
- m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator);
- break;
- case VMA_POOL_CREATE_BUDDY_ALGORITHM_BIT:
- m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Buddy)(hAllocator);
+ m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Linear)(hAllocator->GetAllocationCallbacks(),
+ bufferImageGranularity, false); // isVirtual
break;
default:
VMA_ASSERT(0);
// Fall-through.
case 0:
- m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_Generic)(hAllocator);
+ m_pMetadata = vma_new(hAllocator, VmaBlockMetadata_TLSF)(hAllocator->GetAllocationCallbacks(),
+ bufferImageGranularity, false); // isVirtual
}
m_pMetadata->Init(newSize);
}
void VmaDeviceMemoryBlock::Destroy(VmaAllocator allocator)
{
+ // Define macro VMA_DEBUG_LOG to receive the list of the unfreed allocations
+ if (!m_pMetadata->IsEmpty())
+ m_pMetadata->DebugLogAllAllocations();
// This is the most important assert in the entire library.
// Hitting it means you have some memory leak - unreleased VmaAllocation objects.
VMA_ASSERT(m_pMetadata->IsEmpty() && "Some allocations were not freed before destruction of this memory block!");
@@ -12720,6 +11692,19 @@ void VmaDeviceMemoryBlock::Destroy(VmaAllocator allocator)
m_pMetadata = VMA_NULL;
}
+void VmaDeviceMemoryBlock::PostFree(VmaAllocator hAllocator)
+{
+ if(m_MappingHysteresis.PostFree())
+ {
+ VMA_ASSERT(m_MappingHysteresis.GetExtraMapping() == 0);
+ if (m_MapCount == 0)
+ {
+ m_pMappedData = VMA_NULL;
+ (*hAllocator->GetVulkanFunctions().vkUnmapMemory)(hAllocator->m_hDevice, m_hMemory);
+ }
+ }
+}
+
bool VmaDeviceMemoryBlock::Validate() const
{
VMA_VALIDATE((m_hMemory != VK_NULL_HANDLE) &&
@@ -12732,7 +11717,7 @@ VkResult VmaDeviceMemoryBlock::CheckCorruption(VmaAllocator hAllocator)
{
void* pData = nullptr;
VkResult res = Map(hAllocator, 1, &pData);
- if(res != VK_SUCCESS)
+ if (res != VK_SUCCESS)
{
return res;
}
@@ -12746,17 +11731,19 @@ VkResult VmaDeviceMemoryBlock::CheckCorruption(VmaAllocator hAllocator)
VkResult VmaDeviceMemoryBlock::Map(VmaAllocator hAllocator, uint32_t count, void** ppData)
{
- if(count == 0)
+ if (count == 0)
{
return VK_SUCCESS;
}
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
- if(m_MapCount != 0)
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
+ const uint32_t oldTotalMapCount = m_MapCount + m_MappingHysteresis.GetExtraMapping();
+ m_MappingHysteresis.PostMap();
+ if (oldTotalMapCount != 0)
{
m_MapCount += count;
VMA_ASSERT(m_pMappedData != VMA_NULL);
- if(ppData != VMA_NULL)
+ if (ppData != VMA_NULL)
{
*ppData = m_pMappedData;
}
@@ -12771,9 +11758,9 @@ VkResult VmaDeviceMemoryBlock::Map(VmaAllocator hAllocator, uint32_t count, void
VK_WHOLE_SIZE,
0, // flags
&m_pMappedData);
- if(result == VK_SUCCESS)
+ if (result == VK_SUCCESS)
{
- if(ppData != VMA_NULL)
+ if (ppData != VMA_NULL)
{
*ppData = m_pMappedData;
}
@@ -12785,20 +11772,22 @@ VkResult VmaDeviceMemoryBlock::Map(VmaAllocator hAllocator, uint32_t count, void
void VmaDeviceMemoryBlock::Unmap(VmaAllocator hAllocator, uint32_t count)
{
- if(count == 0)
+ if (count == 0)
{
return;
}
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
- if(m_MapCount >= count)
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
+ if (m_MapCount >= count)
{
m_MapCount -= count;
- if(m_MapCount == 0)
+ const uint32_t totalMapCount = m_MapCount + m_MappingHysteresis.GetExtraMapping();
+ if (totalMapCount == 0)
{
m_pMappedData = VMA_NULL;
(*hAllocator->GetVulkanFunctions().vkUnmapMemory)(hAllocator->m_hDevice, m_hMemory);
}
+ m_MappingHysteresis.PostUnmap();
}
else
{
@@ -12806,49 +11795,40 @@ void VmaDeviceMemoryBlock::Unmap(VmaAllocator hAllocator, uint32_t count)
}
}
-VkResult VmaDeviceMemoryBlock::WriteMagicValueAroundAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)
+VkResult VmaDeviceMemoryBlock::WriteMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)
{
VMA_ASSERT(VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_MARGIN % 4 == 0 && VMA_DEBUG_DETECT_CORRUPTION);
- VMA_ASSERT(allocOffset >= VMA_DEBUG_MARGIN);
void* pData;
VkResult res = Map(hAllocator, 1, &pData);
- if(res != VK_SUCCESS)
+ if (res != VK_SUCCESS)
{
return res;
}
- VmaWriteMagicValue(pData, allocOffset - VMA_DEBUG_MARGIN);
VmaWriteMagicValue(pData, allocOffset + allocSize);
Unmap(hAllocator, 1);
-
return VK_SUCCESS;
}
-VkResult VmaDeviceMemoryBlock::ValidateMagicValueAroundAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)
+VkResult VmaDeviceMemoryBlock::ValidateMagicValueAfterAllocation(VmaAllocator hAllocator, VkDeviceSize allocOffset, VkDeviceSize allocSize)
{
VMA_ASSERT(VMA_DEBUG_MARGIN > 0 && VMA_DEBUG_MARGIN % 4 == 0 && VMA_DEBUG_DETECT_CORRUPTION);
- VMA_ASSERT(allocOffset >= VMA_DEBUG_MARGIN);
void* pData;
VkResult res = Map(hAllocator, 1, &pData);
- if(res != VK_SUCCESS)
+ if (res != VK_SUCCESS)
{
return res;
}
- if(!VmaValidateMagicValue(pData, allocOffset - VMA_DEBUG_MARGIN))
- {
- VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED BEFORE FREED ALLOCATION!");
- }
- else if(!VmaValidateMagicValue(pData, allocOffset + allocSize))
+ if (!VmaValidateMagicValue(pData, allocOffset + allocSize))
{
VMA_ASSERT(0 && "MEMORY CORRUPTION DETECTED AFTER FREED ALLOCATION!");
}
Unmap(hAllocator, 1);
-
return VK_SUCCESS;
}
@@ -12865,7 +11845,7 @@ VkResult VmaDeviceMemoryBlock::BindBufferMemory(
"Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?");
const VkDeviceSize memoryOffset = hAllocation->GetOffset() + allocationLocalOffset;
// This lock is important so that we don't call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
return hAllocator->BindVulkanBuffer(m_hMemory, memoryOffset, hBuffer, pNext);
}
@@ -12882,86 +11862,342 @@ VkResult VmaDeviceMemoryBlock::BindImageMemory(
"Invalid allocationLocalOffset. Did you forget that this offset is relative to the beginning of the allocation, not the whole memory block?");
const VkDeviceSize memoryOffset = hAllocation->GetOffset() + allocationLocalOffset;
// This lock is important so that we don't call vkBind... and/or vkMap... simultaneously on the same VkDeviceMemory from multiple threads.
- VmaMutexLock lock(m_Mutex, hAllocator->m_UseMutex);
+ VmaMutexLock lock(m_MapAndBindMutex, hAllocator->m_UseMutex);
return hAllocator->BindVulkanImage(m_hMemory, memoryOffset, hImage, pNext);
}
+#endif // _VMA_DEVICE_MEMORY_BLOCK_FUNCTIONS
-static void InitStatInfo(VmaStatInfo& outInfo)
+#ifndef _VMA_ALLOCATION_T_FUNCTIONS
+VmaAllocation_T::VmaAllocation_T(bool userDataString, bool mappingAllowed)
+ : m_Alignment{ 1 },
+ m_Size{ 0 },
+ m_pUserData{ VMA_NULL },
+ m_MemoryTypeIndex{ 0 },
+ m_Type{ (uint8_t)ALLOCATION_TYPE_NONE },
+ m_SuballocationType{ (uint8_t)VMA_SUBALLOCATION_TYPE_UNKNOWN },
+ m_MapCount{ 0 },
+ m_Flags{ 0 }
{
- memset(&outInfo, 0, sizeof(outInfo));
- outInfo.allocationSizeMin = UINT64_MAX;
- outInfo.unusedRangeSizeMin = UINT64_MAX;
+ if(userDataString)
+ m_Flags |= (uint8_t)FLAG_USER_DATA_STRING;
+ if(mappingAllowed)
+ m_Flags |= (uint8_t)FLAG_MAPPING_ALLOWED;
+
+#if VMA_STATS_STRING_ENABLED
+ m_BufferImageUsage = 0;
+#endif
}
-// Adds statistics srcInfo into inoutInfo, like: inoutInfo += srcInfo.
-static void VmaAddStatInfo(VmaStatInfo& inoutInfo, const VmaStatInfo& srcInfo)
+VmaAllocation_T::~VmaAllocation_T()
{
- inoutInfo.blockCount += srcInfo.blockCount;
- inoutInfo.allocationCount += srcInfo.allocationCount;
- inoutInfo.unusedRangeCount += srcInfo.unusedRangeCount;
- inoutInfo.usedBytes += srcInfo.usedBytes;
- inoutInfo.unusedBytes += srcInfo.unusedBytes;
- inoutInfo.allocationSizeMin = VMA_MIN(inoutInfo.allocationSizeMin, srcInfo.allocationSizeMin);
- inoutInfo.allocationSizeMax = VMA_MAX(inoutInfo.allocationSizeMax, srcInfo.allocationSizeMax);
- inoutInfo.unusedRangeSizeMin = VMA_MIN(inoutInfo.unusedRangeSizeMin, srcInfo.unusedRangeSizeMin);
- inoutInfo.unusedRangeSizeMax = VMA_MAX(inoutInfo.unusedRangeSizeMax, srcInfo.unusedRangeSizeMax);
+ VMA_ASSERT(m_MapCount == 0 && "Allocation was not unmapped before destruction.");
+
+ // Check if owned string was freed.
+ VMA_ASSERT((IsUserDataString() && m_pUserData == VMA_NULL) || !IsUserDataString());
}
-static void VmaPostprocessCalcStatInfo(VmaStatInfo& inoutInfo)
+void VmaAllocation_T::InitBlockAllocation(
+ VmaDeviceMemoryBlock* block,
+ VmaAllocHandle allocHandle,
+ VkDeviceSize alignment,
+ VkDeviceSize size,
+ uint32_t memoryTypeIndex,
+ VmaSuballocationType suballocationType,
+ bool mapped)
{
- inoutInfo.allocationSizeAvg = (inoutInfo.allocationCount > 0) ?
- VmaRoundDiv<VkDeviceSize>(inoutInfo.usedBytes, inoutInfo.allocationCount) : 0;
- inoutInfo.unusedRangeSizeAvg = (inoutInfo.unusedRangeCount > 0) ?
- VmaRoundDiv<VkDeviceSize>(inoutInfo.unusedBytes, inoutInfo.unusedRangeCount) : 0;
+ VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE);
+ VMA_ASSERT(block != VMA_NULL);
+ m_Type = (uint8_t)ALLOCATION_TYPE_BLOCK;
+ m_Alignment = alignment;
+ m_Size = size;
+ m_MemoryTypeIndex = memoryTypeIndex;
+ if(mapped)
+ {
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
+ m_Flags |= (uint8_t)FLAG_PERSISTENT_MAP;
+ }
+ m_SuballocationType = (uint8_t)suballocationType;
+ m_BlockAllocation.m_Block = block;
+ m_BlockAllocation.m_AllocHandle = allocHandle;
}
-VmaPool_T::VmaPool_T(
- VmaAllocator hAllocator,
- const VmaPoolCreateInfo& createInfo,
- VkDeviceSize preferredBlockSize) :
- m_BlockVector(
- hAllocator,
- this, // hParentPool
- createInfo.memoryTypeIndex,
- createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,
- createInfo.minBlockCount,
- createInfo.maxBlockCount,
- (createInfo.flags & VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
- createInfo.frameInUseCount,
- createInfo.blockSize != 0, // explicitBlockSize
- createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
- createInfo.priority,
- VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),
- createInfo.pMemoryAllocateNext),
- m_Id(0),
- m_Name(VMA_NULL)
+void VmaAllocation_T::InitDedicatedAllocation(
+ VmaPool hParentPool,
+ uint32_t memoryTypeIndex,
+ VkDeviceMemory hMemory,
+ VmaSuballocationType suballocationType,
+ void* pMappedData,
+ VkDeviceSize size)
+{
+ VMA_ASSERT(m_Type == ALLOCATION_TYPE_NONE);
+ VMA_ASSERT(hMemory != VK_NULL_HANDLE);
+ m_Type = (uint8_t)ALLOCATION_TYPE_DEDICATED;
+ m_Alignment = 0;
+ m_Size = size;
+ m_MemoryTypeIndex = memoryTypeIndex;
+ m_SuballocationType = (uint8_t)suballocationType;
+ if(pMappedData != VMA_NULL)
+ {
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
+ m_Flags |= (uint8_t)FLAG_PERSISTENT_MAP;
+ }
+ m_DedicatedAllocation.m_hParentPool = hParentPool;
+ m_DedicatedAllocation.m_hMemory = hMemory;
+ m_DedicatedAllocation.m_pMappedData = pMappedData;
+ m_DedicatedAllocation.m_Prev = VMA_NULL;
+ m_DedicatedAllocation.m_Next = VMA_NULL;
+}
+
+void VmaAllocation_T::SetUserData(VmaAllocator hAllocator, void* pUserData)
{
+ if (IsUserDataString())
+ {
+ VMA_ASSERT(pUserData == VMA_NULL || pUserData != m_pUserData);
+
+ FreeUserDataString(hAllocator);
+
+ if (pUserData != VMA_NULL)
+ {
+ m_pUserData = VmaCreateStringCopy(hAllocator->GetAllocationCallbacks(), (const char*)pUserData);
+ }
+ }
+ else
+ {
+ m_pUserData = pUserData;
+ }
}
-VmaPool_T::~VmaPool_T()
+void VmaAllocation_T::SwapBlockAllocation(VmaAllocation allocation)
{
- VMA_ASSERT(m_PrevPool == VMA_NULL && m_NextPool == VMA_NULL);
+ VMA_ASSERT(allocation != VMA_NULL);
+ VMA_ASSERT(m_Type == ALLOCATION_TYPE_BLOCK);
+ VMA_ASSERT(allocation->m_Type == ALLOCATION_TYPE_BLOCK);
+
+ m_BlockAllocation.m_Block->m_pMetadata->SetAllocationUserData(m_BlockAllocation.m_AllocHandle, allocation);
+ VMA_SWAP(m_BlockAllocation, allocation->m_BlockAllocation);
+ m_BlockAllocation.m_Block->m_pMetadata->SetAllocationUserData(m_BlockAllocation.m_AllocHandle, this);
+
+#if VMA_STATS_STRING_ENABLED
+ VMA_SWAP(m_BufferImageUsage, allocation->m_BufferImageUsage);
+#endif
}
-void VmaPool_T::SetName(const char* pName)
+VmaAllocHandle VmaAllocation_T::GetAllocHandle() const
{
- const VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()->GetAllocationCallbacks();
- VmaFreeString(allocs, m_Name);
+ switch (m_Type)
+ {
+ case ALLOCATION_TYPE_BLOCK:
+ return m_BlockAllocation.m_AllocHandle;
+ case ALLOCATION_TYPE_DEDICATED:
+ return VK_NULL_HANDLE;
+ default:
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+ }
+}
- if(pName != VMA_NULL)
+VkDeviceSize VmaAllocation_T::GetOffset() const
+{
+ switch (m_Type)
{
- m_Name = VmaCreateStringCopy(allocs, pName);
+ case ALLOCATION_TYPE_BLOCK:
+ return m_BlockAllocation.m_Block->m_pMetadata->GetAllocationOffset(m_BlockAllocation.m_AllocHandle);
+ case ALLOCATION_TYPE_DEDICATED:
+ return 0;
+ default:
+ VMA_ASSERT(0);
+ return 0;
+ }
+}
+
+VmaPool VmaAllocation_T::GetParentPool() const
+{
+ switch (m_Type)
+ {
+ case ALLOCATION_TYPE_BLOCK:
+ return m_BlockAllocation.m_Block->GetParentPool();
+ case ALLOCATION_TYPE_DEDICATED:
+ return m_DedicatedAllocation.m_hParentPool;
+ default:
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+ }
+}
+
+VkDeviceMemory VmaAllocation_T::GetMemory() const
+{
+ switch (m_Type)
+ {
+ case ALLOCATION_TYPE_BLOCK:
+ return m_BlockAllocation.m_Block->GetDeviceMemory();
+ case ALLOCATION_TYPE_DEDICATED:
+ return m_DedicatedAllocation.m_hMemory;
+ default:
+ VMA_ASSERT(0);
+ return VK_NULL_HANDLE;
+ }
+}
+
+void* VmaAllocation_T::GetMappedData() const
+{
+ switch (m_Type)
+ {
+ case ALLOCATION_TYPE_BLOCK:
+ if (m_MapCount != 0 || IsPersistentMap())
+ {
+ void* pBlockData = m_BlockAllocation.m_Block->GetMappedData();
+ VMA_ASSERT(pBlockData != VMA_NULL);
+ return (char*)pBlockData + GetOffset();
+ }
+ else
+ {
+ return VMA_NULL;
+ }
+ break;
+ case ALLOCATION_TYPE_DEDICATED:
+ VMA_ASSERT((m_DedicatedAllocation.m_pMappedData != VMA_NULL) == (m_MapCount != 0 || IsPersistentMap()));
+ return m_DedicatedAllocation.m_pMappedData;
+ default:
+ VMA_ASSERT(0);
+ return VMA_NULL;
+ }
+}
+
+void VmaAllocation_T::BlockAllocMap()
+{
+ VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
+
+ if (m_MapCount < 0xFF)
+ {
+ ++m_MapCount;
}
else
{
- m_Name = VMA_NULL;
+ VMA_ASSERT(0 && "Allocation mapped too many times simultaneously.");
+ }
+}
+
+void VmaAllocation_T::BlockAllocUnmap()
+{
+ VMA_ASSERT(GetType() == ALLOCATION_TYPE_BLOCK);
+
+ if (m_MapCount > 0)
+ {
+ --m_MapCount;
+ }
+ else
+ {
+ VMA_ASSERT(0 && "Unmapping allocation not previously mapped.");
+ }
+}
+
+VkResult VmaAllocation_T::DedicatedAllocMap(VmaAllocator hAllocator, void** ppData)
+{
+ VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
+ VMA_ASSERT(IsMappingAllowed() && "Mapping is not allowed on this allocation! Please use one of the new VMA_ALLOCATION_CREATE_HOST_ACCESS_* flags when creating it.");
+
+ if (m_MapCount != 0 || IsPersistentMap())
+ {
+ if (m_MapCount < 0xFF)
+ {
+ VMA_ASSERT(m_DedicatedAllocation.m_pMappedData != VMA_NULL);
+ *ppData = m_DedicatedAllocation.m_pMappedData;
+ ++m_MapCount;
+ return VK_SUCCESS;
+ }
+ else
+ {
+ VMA_ASSERT(0 && "Dedicated allocation mapped too many times simultaneously.");
+ return VK_ERROR_MEMORY_MAP_FAILED;
+ }
+ }
+ else
+ {
+ VkResult result = (*hAllocator->GetVulkanFunctions().vkMapMemory)(
+ hAllocator->m_hDevice,
+ m_DedicatedAllocation.m_hMemory,
+ 0, // offset
+ VK_WHOLE_SIZE,
+ 0, // flags
+ ppData);
+ if (result == VK_SUCCESS)
+ {
+ m_DedicatedAllocation.m_pMappedData = *ppData;
+ m_MapCount = 1;
+ }
+ return result;
+ }
+}
+
+void VmaAllocation_T::DedicatedAllocUnmap(VmaAllocator hAllocator)
+{
+ VMA_ASSERT(GetType() == ALLOCATION_TYPE_DEDICATED);
+
+ if (m_MapCount > 0)
+ {
+ --m_MapCount;
+ if (m_MapCount == 0 && !IsPersistentMap())
+ {
+ m_DedicatedAllocation.m_pMappedData = VMA_NULL;
+ (*hAllocator->GetVulkanFunctions().vkUnmapMemory)(
+ hAllocator->m_hDevice,
+ m_DedicatedAllocation.m_hMemory);
+ }
+ }
+ else
+ {
+ VMA_ASSERT(0 && "Unmapping dedicated allocation not previously mapped.");
}
}
#if VMA_STATS_STRING_ENABLED
+void VmaAllocation_T::InitBufferImageUsage(uint32_t bufferImageUsage)
+{
+ VMA_ASSERT(m_BufferImageUsage == 0);
+ m_BufferImageUsage = bufferImageUsage;
+}
+
+void VmaAllocation_T::PrintParameters(class VmaJsonWriter& json) const
+{
+ json.WriteString("Type");
+ json.WriteString(VMA_SUBALLOCATION_TYPE_NAMES[m_SuballocationType]);
+
+ json.WriteString("Size");
+ json.WriteNumber(m_Size);
-#endif // #if VMA_STATS_STRING_ENABLED
+ if (m_pUserData != VMA_NULL)
+ {
+ json.WriteString("UserData");
+ if (IsUserDataString())
+ {
+ json.WriteString((const char*)m_pUserData);
+ }
+ else
+ {
+ json.BeginString();
+ json.ContinueString_Pointer(m_pUserData);
+ json.EndString();
+ }
+ }
+
+ if (m_BufferImageUsage != 0)
+ {
+ json.WriteString("Usage");
+ json.WriteNumber(m_BufferImageUsage);
+ }
+}
+#endif // VMA_STATS_STRING_ENABLED
+void VmaAllocation_T::FreeUserDataString(VmaAllocator hAllocator)
+{
+ VMA_ASSERT(IsUserDataString());
+ VmaFreeString(hAllocator->GetAllocationCallbacks(), (char*)m_pUserData);
+ m_pUserData = VMA_NULL;
+}
+#endif // _VMA_ALLOCATION_T_FUNCTIONS
+
+#ifndef _VMA_BLOCK_VECTOR_FUNCTIONS
VmaBlockVector::VmaBlockVector(
VmaAllocator hAllocator,
VmaPool hParentPool,
@@ -12970,34 +12206,29 @@ VmaBlockVector::VmaBlockVector(
size_t minBlockCount,
size_t maxBlockCount,
VkDeviceSize bufferImageGranularity,
- uint32_t frameInUseCount,
bool explicitBlockSize,
uint32_t algorithm,
float priority,
VkDeviceSize minAllocationAlignment,
- void* pMemoryAllocateNext) :
- m_hAllocator(hAllocator),
+ void* pMemoryAllocateNext)
+ : m_hAllocator(hAllocator),
m_hParentPool(hParentPool),
m_MemoryTypeIndex(memoryTypeIndex),
m_PreferredBlockSize(preferredBlockSize),
m_MinBlockCount(minBlockCount),
m_MaxBlockCount(maxBlockCount),
m_BufferImageGranularity(bufferImageGranularity),
- m_FrameInUseCount(frameInUseCount),
m_ExplicitBlockSize(explicitBlockSize),
m_Algorithm(algorithm),
m_Priority(priority),
m_MinAllocationAlignment(minAllocationAlignment),
m_pMemoryAllocateNext(pMemoryAllocateNext),
- m_HasEmptyBlock(false),
m_Blocks(VmaStlAllocator<VmaDeviceMemoryBlock*>(hAllocator->GetAllocationCallbacks())),
- m_NextBlockId(0)
-{
-}
+ m_NextBlockId(0) {}
VmaBlockVector::~VmaBlockVector()
{
- for(size_t i = m_Blocks.size(); i--; )
+ for (size_t i = m_Blocks.size(); i--; )
{
m_Blocks[i]->Destroy(m_hAllocator);
vma_delete(m_hAllocator, m_Blocks[i]);
@@ -13006,10 +12237,10 @@ VmaBlockVector::~VmaBlockVector()
VkResult VmaBlockVector::CreateMinBlocks()
{
- for(size_t i = 0; i < m_MinBlockCount; ++i)
+ for (size_t i = 0; i < m_MinBlockCount; ++i)
{
VkResult res = CreateBlock(m_PreferredBlockSize, VMA_NULL);
- if(res != VK_SUCCESS)
+ if (res != VK_SUCCESS)
{
return res;
}
@@ -13017,25 +12248,31 @@ VkResult VmaBlockVector::CreateMinBlocks()
return VK_SUCCESS;
}
-void VmaBlockVector::GetPoolStats(VmaPoolStats* pStats)
+void VmaBlockVector::AddStatistics(VmaStatistics& inoutStats)
{
VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
const size_t blockCount = m_Blocks.size();
+ for (uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ {
+ const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pBlock);
+ VMA_HEAVY_ASSERT(pBlock->Validate());
+ pBlock->m_pMetadata->AddStatistics(inoutStats);
+ }
+}
- pStats->size = 0;
- pStats->unusedSize = 0;
- pStats->allocationCount = 0;
- pStats->unusedRangeCount = 0;
- pStats->unusedRangeSizeMax = 0;
- pStats->blockCount = blockCount;
+void VmaBlockVector::AddDetailedStatistics(VmaDetailedStatistics& inoutStats)
+{
+ VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
- for(uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ const size_t blockCount = m_Blocks.size();
+ for (uint32_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
{
const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
VMA_ASSERT(pBlock);
VMA_HEAVY_ASSERT(pBlock->Validate());
- pBlock->m_pMetadata->AddPoolStats(*pStats);
+ pBlock->m_pMetadata->AddDetailedStatistics(inoutStats);
}
}
@@ -13054,10 +12291,7 @@ bool VmaBlockVector::IsCorruptionDetectionEnabled() const
(m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags & requiredMemFlags) == requiredMemFlags;
}
-static const uint32_t VMA_ALLOCATION_TRY_COUNT = 32;
-
VkResult VmaBlockVector::Allocate(
- uint32_t currentFrameIndex,
VkDeviceSize size,
VkDeviceSize alignment,
const VmaAllocationCreateInfo& createInfo,
@@ -13070,7 +12304,7 @@ VkResult VmaBlockVector::Allocate(
alignment = VMA_MAX(alignment, m_MinAllocationAlignment);
- if(IsCorruptionDetectionEnabled())
+ if (IsCorruptionDetectionEnabled())
{
size = VmaAlignUp<VkDeviceSize>(size, sizeof(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));
alignment = VmaAlignUp<VkDeviceSize>(alignment, sizeof(VMA_CORRUPTION_DETECTION_MAGIC_VALUE));
@@ -13078,33 +12312,26 @@ VkResult VmaBlockVector::Allocate(
{
VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex);
- for(allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
+ for (allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
{
res = AllocatePage(
- currentFrameIndex,
size,
alignment,
createInfo,
suballocType,
pAllocations + allocIndex);
- if(res != VK_SUCCESS)
+ if (res != VK_SUCCESS)
{
break;
}
}
}
- if(res != VK_SUCCESS)
+ if (res != VK_SUCCESS)
{
// Free all already created allocations.
- const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);
- while(allocIndex--)
- {
- VmaAllocation_T* const alloc = pAllocations[allocIndex];
- const VkDeviceSize allocSize = alloc->GetSize();
- Free(alloc);
- m_hAllocator->m_Budget.RemoveAllocation(heapIndex, allocSize);
- }
+ while (allocIndex--)
+ Free(pAllocations[allocIndex]);
memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);
}
@@ -13112,7 +12339,6 @@ VkResult VmaBlockVector::Allocate(
}
VkResult VmaBlockVector::AllocatePage(
- uint32_t currentFrameIndex,
VkDeviceSize size,
VkDeviceSize alignment,
const VmaAllocationCreateInfo& createInfo,
@@ -13120,387 +12346,213 @@ VkResult VmaBlockVector::AllocatePage(
VmaAllocation* pAllocation)
{
const bool isUpperAddress = (createInfo.flags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0;
- bool canMakeOtherLost = (createInfo.flags & VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT) != 0;
- const bool mapped = (createInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0;
- const bool isUserDataString = (createInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0;
VkDeviceSize freeMemory;
{
const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);
VmaBudget heapBudget = {};
- m_hAllocator->GetBudget(&heapBudget, heapIndex, 1);
+ m_hAllocator->GetHeapBudgets(&heapBudget, heapIndex, 1);
freeMemory = (heapBudget.usage < heapBudget.budget) ? (heapBudget.budget - heapBudget.usage) : 0;
}
- const bool canFallbackToDedicated = !IsCustomPool();
+ const bool canFallbackToDedicated = !HasExplicitBlockSize() &&
+ (createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0;
const bool canCreateNewBlock =
((createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0) &&
(m_Blocks.size() < m_MaxBlockCount) &&
(freeMemory >= size || !canFallbackToDedicated);
uint32_t strategy = createInfo.flags & VMA_ALLOCATION_CREATE_STRATEGY_MASK;
- // If linearAlgorithm is used, canMakeOtherLost is available only when used as ring buffer.
- // Which in turn is available only when maxBlockCount = 1.
- if(m_Algorithm == VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT && m_MaxBlockCount > 1)
- {
- canMakeOtherLost = false;
- }
-
// Upper address can only be used with linear allocator and within single memory block.
- if(isUpperAddress &&
+ if (isUpperAddress &&
(m_Algorithm != VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT || m_MaxBlockCount > 1))
{
return VK_ERROR_FEATURE_NOT_PRESENT;
}
- // Validate strategy.
- switch(strategy)
- {
- case 0:
- strategy = VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT;
- break;
- case VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT:
- case VMA_ALLOCATION_CREATE_STRATEGY_WORST_FIT_BIT:
- case VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT:
- break;
- default:
- return VK_ERROR_FEATURE_NOT_PRESENT;
- }
-
// Early reject: requested allocation size is larger that maximum block size for this block vector.
- if(size + 2 * VMA_DEBUG_MARGIN > m_PreferredBlockSize)
+ if (size + VMA_DEBUG_MARGIN > m_PreferredBlockSize)
{
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- /*
- Under certain condition, this whole section can be skipped for optimization, so
- we move on directly to trying to allocate with canMakeOtherLost. That's the case
- e.g. for custom pools with linear algorithm.
- */
- if(!canMakeOtherLost || canCreateNewBlock)
+ // 1. Search existing allocations. Try to allocate.
+ if (m_Algorithm == VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT)
{
- // 1. Search existing allocations. Try to allocate without making other allocations lost.
- VmaAllocationCreateFlags allocFlagsCopy = createInfo.flags;
- allocFlagsCopy &= ~VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT;
-
- if(m_Algorithm == VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT)
+ // Use only last block.
+ if (!m_Blocks.empty())
{
- // Use only last block.
- if(!m_Blocks.empty())
+ VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks.back();
+ VMA_ASSERT(pCurrBlock);
+ VkResult res = AllocateFromBlock(
+ pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
{
- VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks.back();
- VMA_ASSERT(pCurrBlock);
- VkResult res = AllocateFromBlock(
- pCurrBlock,
- currentFrameIndex,
- size,
- alignment,
- allocFlagsCopy,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
- if(res == VK_SUCCESS)
- {
- VMA_DEBUG_LOG(" Returned from last block #%u", pCurrBlock->GetId());
- return VK_SUCCESS;
- }
+ VMA_DEBUG_LOG(" Returned from last block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
+ return VK_SUCCESS;
}
}
- else
+ }
+ else
+ {
+ if (strategy != VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT) // MIN_MEMORY or default
{
- if(strategy == VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT)
+ const bool isHostVisible =
+ (m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;
+ if(isHostVisible)
{
- // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
- for(size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex )
+ const bool isMappingAllowed = (createInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0;
+ /*
+ For non-mappable allocations, check blocks that are not mapped first.
+ For mappable allocations, check blocks that are already mapped first.
+ This way, having many blocks, we will separate mappable and non-mappable allocations,
+ hopefully limiting the number of blocks that are mapped, which will help tools like RenderDoc.
+ */
+ for(size_t mappingI = 0; mappingI < 2; ++mappingI)
{
- VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pCurrBlock);
- VkResult res = AllocateFromBlock(
- pCurrBlock,
- currentFrameIndex,
- size,
- alignment,
- allocFlagsCopy,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
- if(res == VK_SUCCESS)
+ // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
+ for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
{
- VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
- return VK_SUCCESS;
+ VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pCurrBlock);
+ const bool isBlockMapped = pCurrBlock->GetMappedData() != VMA_NULL;
+ if((mappingI == 0) == (isMappingAllowed == isBlockMapped))
+ {
+ VkResult res = AllocateFromBlock(
+ pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
+ {
+ VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
+ return VK_SUCCESS;
+ }
+ }
}
}
}
- else // WORST_FIT, FIRST_FIT
+ else
{
- // Backward order in m_Blocks - prefer blocks with largest amount of free space.
- for(size_t blockIndex = m_Blocks.size(); blockIndex--; )
+ // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
+ for (size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
{
VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
VMA_ASSERT(pCurrBlock);
VkResult res = AllocateFromBlock(
- pCurrBlock,
- currentFrameIndex,
- size,
- alignment,
- allocFlagsCopy,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
- if(res == VK_SUCCESS)
+ pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
{
VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
return VK_SUCCESS;
}
}
}
}
-
- // 2. Try to create new block.
- if(canCreateNewBlock)
+ else // VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT
{
- // Calculate optimal size for new block.
- VkDeviceSize newBlockSize = m_PreferredBlockSize;
- uint32_t newBlockSizeShift = 0;
- const uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3;
-
- if(!m_ExplicitBlockSize)
+ // Backward order in m_Blocks - prefer blocks with largest amount of free space.
+ for (size_t blockIndex = m_Blocks.size(); blockIndex--; )
{
- // Allocate 1/8, 1/4, 1/2 as first blocks.
- const VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize();
- for(uint32_t i = 0; i < NEW_BLOCK_SIZE_SHIFT_MAX; ++i)
+ VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pCurrBlock);
+ VkResult res = AllocateFromBlock(pCurrBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
{
- const VkDeviceSize smallerNewBlockSize = newBlockSize / 2;
- if(smallerNewBlockSize > maxExistingBlockSize && smallerNewBlockSize >= size * 2)
- {
- newBlockSize = smallerNewBlockSize;
- ++newBlockSizeShift;
- }
- else
- {
- break;
- }
+ VMA_DEBUG_LOG(" Returned from existing block #%u", pCurrBlock->GetId());
+ IncrementallySortBlocks();
+ return VK_SUCCESS;
}
}
+ }
+ }
- size_t newBlockIndex = 0;
- VkResult res = (newBlockSize <= freeMemory || !canFallbackToDedicated) ?
- CreateBlock(newBlockSize, &newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;
- // Allocation of this size failed? Try 1/2, 1/4, 1/8 of m_PreferredBlockSize.
- if(!m_ExplicitBlockSize)
- {
- while(res < 0 && newBlockSizeShift < NEW_BLOCK_SIZE_SHIFT_MAX)
- {
- const VkDeviceSize smallerNewBlockSize = newBlockSize / 2;
- if(smallerNewBlockSize >= size)
- {
- newBlockSize = smallerNewBlockSize;
- ++newBlockSizeShift;
- res = (newBlockSize <= freeMemory || !canFallbackToDedicated) ?
- CreateBlock(newBlockSize, &newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
- else
- {
- break;
- }
- }
- }
+ // 2. Try to create new block.
+ if (canCreateNewBlock)
+ {
+ // Calculate optimal size for new block.
+ VkDeviceSize newBlockSize = m_PreferredBlockSize;
+ uint32_t newBlockSizeShift = 0;
+ const uint32_t NEW_BLOCK_SIZE_SHIFT_MAX = 3;
- if(res == VK_SUCCESS)
+ if (!m_ExplicitBlockSize)
+ {
+ // Allocate 1/8, 1/4, 1/2 as first blocks.
+ const VkDeviceSize maxExistingBlockSize = CalcMaxBlockSize();
+ for (uint32_t i = 0; i < NEW_BLOCK_SIZE_SHIFT_MAX; ++i)
{
- VmaDeviceMemoryBlock* const pBlock = m_Blocks[newBlockIndex];
- VMA_ASSERT(pBlock->m_pMetadata->GetSize() >= size);
-
- res = AllocateFromBlock(
- pBlock,
- currentFrameIndex,
- size,
- alignment,
- allocFlagsCopy,
- createInfo.pUserData,
- suballocType,
- strategy,
- pAllocation);
- if(res == VK_SUCCESS)
+ const VkDeviceSize smallerNewBlockSize = newBlockSize / 2;
+ if (smallerNewBlockSize > maxExistingBlockSize && smallerNewBlockSize >= size * 2)
{
- VMA_DEBUG_LOG(" Created new block #%u Size=%llu", pBlock->GetId(), newBlockSize);
- return VK_SUCCESS;
+ newBlockSize = smallerNewBlockSize;
+ ++newBlockSizeShift;
}
else
{
- // Allocation from new block failed, possibly due to VMA_DEBUG_MARGIN or alignment.
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ break;
}
}
}
- }
- // 3. Try to allocate from existing blocks with making other allocations lost.
- if(canMakeOtherLost)
- {
- uint32_t tryIndex = 0;
- for(; tryIndex < VMA_ALLOCATION_TRY_COUNT; ++tryIndex)
+ size_t newBlockIndex = 0;
+ VkResult res = (newBlockSize <= freeMemory || !canFallbackToDedicated) ?
+ CreateBlock(newBlockSize, &newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ // Allocation of this size failed? Try 1/2, 1/4, 1/8 of m_PreferredBlockSize.
+ if (!m_ExplicitBlockSize)
{
- VmaDeviceMemoryBlock* pBestRequestBlock = VMA_NULL;
- VmaAllocationRequest bestRequest = {};
- VkDeviceSize bestRequestCost = VK_WHOLE_SIZE;
-
- // 1. Search existing allocations.
- if(strategy == VMA_ALLOCATION_CREATE_STRATEGY_BEST_FIT_BIT)
+ while (res < 0 && newBlockSizeShift < NEW_BLOCK_SIZE_SHIFT_MAX)
{
- // Forward order in m_Blocks - prefer blocks with smallest amount of free space.
- for(size_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex )
+ const VkDeviceSize smallerNewBlockSize = newBlockSize / 2;
+ if (smallerNewBlockSize >= size)
{
- VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pCurrBlock);
- VmaAllocationRequest currRequest = {};
- if(pCurrBlock->m_pMetadata->CreateAllocationRequest(
- currentFrameIndex,
- m_FrameInUseCount,
- m_BufferImageGranularity,
- size,
- alignment,
- (createInfo.flags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0,
- suballocType,
- canMakeOtherLost,
- strategy,
- &currRequest))
- {
- const VkDeviceSize currRequestCost = currRequest.CalcCost();
- if(pBestRequestBlock == VMA_NULL ||
- currRequestCost < bestRequestCost)
- {
- pBestRequestBlock = pCurrBlock;
- bestRequest = currRequest;
- bestRequestCost = currRequestCost;
-
- if(bestRequestCost == 0)
- {
- break;
- }
- }
- }
+ newBlockSize = smallerNewBlockSize;
+ ++newBlockSizeShift;
+ res = (newBlockSize <= freeMemory || !canFallbackToDedicated) ?
+ CreateBlock(newBlockSize, &newBlockIndex) : VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- }
- else // WORST_FIT, FIRST_FIT
- {
- // Backward order in m_Blocks - prefer blocks with largest amount of free space.
- for(size_t blockIndex = m_Blocks.size(); blockIndex--; )
+ else
{
- VmaDeviceMemoryBlock* const pCurrBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pCurrBlock);
- VmaAllocationRequest currRequest = {};
- if(pCurrBlock->m_pMetadata->CreateAllocationRequest(
- currentFrameIndex,
- m_FrameInUseCount,
- m_BufferImageGranularity,
- size,
- alignment,
- (createInfo.flags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0,
- suballocType,
- canMakeOtherLost,
- strategy,
- &currRequest))
- {
- const VkDeviceSize currRequestCost = currRequest.CalcCost();
- if(pBestRequestBlock == VMA_NULL ||
- currRequestCost < bestRequestCost ||
- strategy == VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT)
- {
- pBestRequestBlock = pCurrBlock;
- bestRequest = currRequest;
- bestRequestCost = currRequestCost;
-
- if(bestRequestCost == 0 ||
- strategy == VMA_ALLOCATION_CREATE_STRATEGY_FIRST_FIT_BIT)
- {
- break;
- }
- }
- }
+ break;
}
}
+ }
- if(pBestRequestBlock != VMA_NULL)
- {
- if(mapped)
- {
- VkResult res = pBestRequestBlock->Map(m_hAllocator, 1, VMA_NULL);
- if(res != VK_SUCCESS)
- {
- return res;
- }
- }
+ if (res == VK_SUCCESS)
+ {
+ VmaDeviceMemoryBlock* const pBlock = m_Blocks[newBlockIndex];
+ VMA_ASSERT(pBlock->m_pMetadata->GetSize() >= size);
- if(pBestRequestBlock->m_pMetadata->MakeRequestedAllocationsLost(
- currentFrameIndex,
- m_FrameInUseCount,
- &bestRequest))
- {
- // Allocate from this pBlock.
- *pAllocation = m_hAllocator->m_AllocationObjectAllocator.Allocate(currentFrameIndex, isUserDataString);
- pBestRequestBlock->m_pMetadata->Alloc(bestRequest, suballocType, size, *pAllocation);
- UpdateHasEmptyBlock();
- (*pAllocation)->InitBlockAllocation(
- pBestRequestBlock,
- bestRequest.offset,
- alignment,
- size,
- m_MemoryTypeIndex,
- suballocType,
- mapped,
- (createInfo.flags & VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT) != 0);
- VMA_HEAVY_ASSERT(pBestRequestBlock->Validate());
- VMA_DEBUG_LOG(" Returned from existing block");
- (*pAllocation)->SetUserData(m_hAllocator, createInfo.pUserData);
- m_hAllocator->m_Budget.AddAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);
- if(VMA_DEBUG_INITIALIZE_ALLOCATIONS)
- {
- m_hAllocator->FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);
- }
- if(IsCorruptionDetectionEnabled())
- {
- VkResult res = pBestRequestBlock->WriteMagicValueAroundAllocation(m_hAllocator, bestRequest.offset, size);
- VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
- }
- return VK_SUCCESS;
- }
- // else: Some allocations must have been touched while we are here. Next try.
+ res = AllocateFromBlock(
+ pBlock, size, alignment, createInfo.flags, createInfo.pUserData, suballocType, strategy, pAllocation);
+ if (res == VK_SUCCESS)
+ {
+ VMA_DEBUG_LOG(" Created new block #%u Size=%llu", pBlock->GetId(), newBlockSize);
+ IncrementallySortBlocks();
+ return VK_SUCCESS;
}
else
{
- // Could not find place in any of the blocks - break outer loop.
- break;
+ // Allocation from new block failed, possibly due to VMA_DEBUG_MARGIN or alignment.
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
}
- /* Maximum number of tries exceeded - a very unlike event when many other
- threads are simultaneously touching allocations making it impossible to make
- lost at the same time as we try to allocate. */
- if(tryIndex == VMA_ALLOCATION_TRY_COUNT)
- {
- return VK_ERROR_TOO_MANY_OBJECTS;
- }
}
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
void VmaBlockVector::Free(
- const VmaAllocation hAllocation)
+ const VmaAllocation hAllocation,
+ bool incrementalSort)
{
- VMA_ASSERT(hAllocation->GetBlock()->GetParentBlockVector() == this);
-
VmaDeviceMemoryBlock* pBlockToDelete = VMA_NULL;
bool budgetExceeded = false;
{
const uint32_t heapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex);
VmaBudget heapBudget = {};
- m_hAllocator->GetBudget(&heapBudget, heapIndex, 1);
+ m_hAllocator->GetHeapBudgets(&heapBudget, heapIndex, 1);
budgetExceeded = heapBudget.usage >= heapBudget.budget;
}
@@ -13510,67 +12562,72 @@ void VmaBlockVector::Free(
VmaDeviceMemoryBlock* pBlock = hAllocation->GetBlock();
- if(IsCorruptionDetectionEnabled())
+ if (IsCorruptionDetectionEnabled())
{
- VkResult res = pBlock->ValidateMagicValueAroundAllocation(m_hAllocator, hAllocation->GetOffset(), hAllocation->GetSize());
+ VkResult res = pBlock->ValidateMagicValueAfterAllocation(m_hAllocator, hAllocation->GetOffset(), hAllocation->GetSize());
VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to validate magic value.");
}
- if(hAllocation->IsPersistentMap())
+ if (hAllocation->IsPersistentMap())
{
pBlock->Unmap(m_hAllocator, 1);
}
- pBlock->m_pMetadata->Free(hAllocation);
+ const bool hadEmptyBlockBeforeFree = HasEmptyBlock();
+ pBlock->m_pMetadata->Free(hAllocation->GetAllocHandle());
+ pBlock->PostFree(m_hAllocator);
VMA_HEAVY_ASSERT(pBlock->Validate());
VMA_DEBUG_LOG(" Freed from MemoryTypeIndex=%u", m_MemoryTypeIndex);
const bool canDeleteBlock = m_Blocks.size() > m_MinBlockCount;
// pBlock became empty after this deallocation.
- if(pBlock->m_pMetadata->IsEmpty())
+ if (pBlock->m_pMetadata->IsEmpty())
{
- // Already has empty block. We don't want to have two, so delete this one.
- if((m_HasEmptyBlock || budgetExceeded) && canDeleteBlock)
+ // Already had empty block. We don't want to have two, so delete this one.
+ if ((hadEmptyBlockBeforeFree || budgetExceeded) && canDeleteBlock)
{
pBlockToDelete = pBlock;
Remove(pBlock);
}
- // else: We now have an empty block - leave it.
+ // else: We now have one empty block - leave it. A hysteresis to avoid allocating whole block back and forth.
}
// pBlock didn't become empty, but we have another empty block - find and free that one.
// (This is optional, heuristics.)
- else if(m_HasEmptyBlock && canDeleteBlock)
+ else if (hadEmptyBlockBeforeFree && canDeleteBlock)
{
VmaDeviceMemoryBlock* pLastBlock = m_Blocks.back();
- if(pLastBlock->m_pMetadata->IsEmpty())
+ if (pLastBlock->m_pMetadata->IsEmpty())
{
pBlockToDelete = pLastBlock;
m_Blocks.pop_back();
}
}
- UpdateHasEmptyBlock();
- IncrementallySortBlocks();
+ if (incrementalSort)
+ IncrementallySortBlocks();
}
// Destruction of a free block. Deferred until this point, outside of mutex
// lock, for performance reason.
- if(pBlockToDelete != VMA_NULL)
+ if (pBlockToDelete != VMA_NULL)
{
- VMA_DEBUG_LOG(" Deleted empty block");
+ VMA_DEBUG_LOG(" Deleted empty block #%u", pBlockToDelete->GetId());
pBlockToDelete->Destroy(m_hAllocator);
vma_delete(m_hAllocator, pBlockToDelete);
}
+
+ m_hAllocator->m_Budget.RemoveAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), hAllocation->GetSize());
+ m_hAllocator->m_AllocationObjectAllocator.Free(hAllocation);
}
VkDeviceSize VmaBlockVector::CalcMaxBlockSize() const
{
VkDeviceSize result = 0;
- for(size_t i = m_Blocks.size(); i--; )
+ for (size_t i = m_Blocks.size(); i--; )
{
result = VMA_MAX(result, m_Blocks[i]->m_pMetadata->GetSize());
- if(result >= m_PreferredBlockSize)
+ if (result >= m_PreferredBlockSize)
{
break;
}
@@ -13580,9 +12637,9 @@ VkDeviceSize VmaBlockVector::CalcMaxBlockSize() const
void VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock)
{
- for(uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
+ for (uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
{
- if(m_Blocks[blockIndex] == pBlock)
+ if (m_Blocks[blockIndex] == pBlock)
{
VmaVectorRemove(m_Blocks, blockIndex);
return;
@@ -13593,12 +12650,12 @@ void VmaBlockVector::Remove(VmaDeviceMemoryBlock* pBlock)
void VmaBlockVector::IncrementallySortBlocks()
{
- if(m_Algorithm != VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT)
+ if (m_Algorithm != VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT)
{
// Bubble sort only until first swap.
- for(size_t i = 1; i < m_Blocks.size(); ++i)
+ for (size_t i = 1; i < m_Blocks.size(); ++i)
{
- if(m_Blocks[i - 1]->m_pMetadata->GetSumFreeSize() > m_Blocks[i]->m_pMetadata->GetSumFreeSize())
+ if (m_Blocks[i - 1]->m_pMetadata->GetSumFreeSize() > m_Blocks[i]->m_pMetadata->GetSumFreeSize())
{
VMA_SWAP(m_Blocks[i - 1], m_Blocks[i]);
return;
@@ -13607,9 +12664,17 @@ void VmaBlockVector::IncrementallySortBlocks()
}
}
+void VmaBlockVector::SortByFreeSize()
+{
+ VMA_SORT(m_Blocks.begin(), m_Blocks.end(),
+ [](auto* b1, auto* b2)
+ {
+ return b1->m_pMetadata->GetSumFreeSize() < b2->m_pMetadata->GetSumFreeSize();
+ });
+}
+
VkResult VmaBlockVector::AllocateFromBlock(
VmaDeviceMemoryBlock* pBlock,
- uint32_t currentFrameIndex,
VkDeviceSize size,
VkDeviceSize alignment,
VmaAllocationCreateFlags allocFlags,
@@ -13618,63 +12683,70 @@ VkResult VmaBlockVector::AllocateFromBlock(
uint32_t strategy,
VmaAllocation* pAllocation)
{
- VMA_ASSERT((allocFlags & VMA_ALLOCATION_CREATE_CAN_MAKE_OTHER_LOST_BIT) == 0);
const bool isUpperAddress = (allocFlags & VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT) != 0;
- const bool mapped = (allocFlags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0;
- const bool isUserDataString = (allocFlags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0;
VmaAllocationRequest currRequest = {};
- if(pBlock->m_pMetadata->CreateAllocationRequest(
- currentFrameIndex,
- m_FrameInUseCount,
- m_BufferImageGranularity,
+ if (pBlock->m_pMetadata->CreateAllocationRequest(
size,
alignment,
isUpperAddress,
suballocType,
- false, // canMakeOtherLost
strategy,
&currRequest))
{
- // Allocate from pCurrBlock.
- VMA_ASSERT(currRequest.itemsToMakeLostCount == 0);
+ return CommitAllocationRequest(currRequest, pBlock, alignment, allocFlags, pUserData, suballocType, pAllocation);
+ }
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+}
- if(mapped)
- {
- VkResult res = pBlock->Map(m_hAllocator, 1, VMA_NULL);
- if(res != VK_SUCCESS)
- {
- return res;
- }
- }
+VkResult VmaBlockVector::CommitAllocationRequest(
+ VmaAllocationRequest& allocRequest,
+ VmaDeviceMemoryBlock* pBlock,
+ VkDeviceSize alignment,
+ VmaAllocationCreateFlags allocFlags,
+ void* pUserData,
+ VmaSuballocationType suballocType,
+ VmaAllocation* pAllocation)
+{
+ const bool mapped = (allocFlags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0;
+ const bool isUserDataString = (allocFlags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0;
+ const bool isMappingAllowed = (allocFlags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0;
- *pAllocation = m_hAllocator->m_AllocationObjectAllocator.Allocate(currentFrameIndex, isUserDataString);
- pBlock->m_pMetadata->Alloc(currRequest, suballocType, size, *pAllocation);
- UpdateHasEmptyBlock();
- (*pAllocation)->InitBlockAllocation(
- pBlock,
- currRequest.offset,
- alignment,
- size,
- m_MemoryTypeIndex,
- suballocType,
- mapped,
- (allocFlags & VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT) != 0);
- VMA_HEAVY_ASSERT(pBlock->Validate());
- (*pAllocation)->SetUserData(m_hAllocator, pUserData);
- m_hAllocator->m_Budget.AddAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), size);
- if(VMA_DEBUG_INITIALIZE_ALLOCATIONS)
- {
- m_hAllocator->FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);
- }
- if(IsCorruptionDetectionEnabled())
+ pBlock->PostAlloc();
+ // Allocate from pCurrBlock.
+ if (mapped)
+ {
+ VkResult res = pBlock->Map(m_hAllocator, 1, VMA_NULL);
+ if (res != VK_SUCCESS)
{
- VkResult res = pBlock->WriteMagicValueAroundAllocation(m_hAllocator, currRequest.offset, size);
- VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
+ return res;
}
- return VK_SUCCESS;
}
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+
+ *pAllocation = m_hAllocator->m_AllocationObjectAllocator.Allocate(isUserDataString, isMappingAllowed);
+ pBlock->m_pMetadata->Alloc(allocRequest, suballocType, *pAllocation);
+ (*pAllocation)->InitBlockAllocation(
+ pBlock,
+ allocRequest.allocHandle,
+ alignment,
+ allocRequest.size, // Not size, as actual allocation size may be larger than requested!
+ m_MemoryTypeIndex,
+ suballocType,
+ mapped);
+ VMA_HEAVY_ASSERT(pBlock->Validate());
+ (*pAllocation)->SetUserData(m_hAllocator, pUserData);
+ m_hAllocator->m_Budget.AddAllocation(m_hAllocator->MemoryTypeIndexToHeapIndex(m_MemoryTypeIndex), allocRequest.size);
+ if (VMA_DEBUG_INITIALIZE_ALLOCATIONS)
+ {
+ m_hAllocator->FillAllocation(*pAllocation, VMA_ALLOCATION_FILL_PATTERN_CREATED);
+ }
+ if (IsCorruptionDetectionEnabled())
+ {
+ VkResult res = pBlock->WriteMagicValueAfterAllocation(m_hAllocator, (*pAllocation)->GetOffset(), allocRequest.size);
+ VMA_ASSERT(res == VK_SUCCESS && "Couldn't map block memory to write magic value.");
+ }
+ return VK_SUCCESS;
}
VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIndex)
@@ -13687,35 +12759,35 @@ VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIn
#if VMA_BUFFER_DEVICE_ADDRESS
// Every standalone block can potentially contain a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT - always enable the feature.
VkMemoryAllocateFlagsInfoKHR allocFlagsInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO_KHR };
- if(m_hAllocator->m_UseKhrBufferDeviceAddress)
+ if (m_hAllocator->m_UseKhrBufferDeviceAddress)
{
allocFlagsInfo.flags = VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT_KHR;
VmaPnextChainPushFront(&allocInfo, &allocFlagsInfo);
}
-#endif // #if VMA_BUFFER_DEVICE_ADDRESS
+#endif // VMA_BUFFER_DEVICE_ADDRESS
#if VMA_MEMORY_PRIORITY
VkMemoryPriorityAllocateInfoEXT priorityInfo = { VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT };
- if(m_hAllocator->m_UseExtMemoryPriority)
+ if (m_hAllocator->m_UseExtMemoryPriority)
{
priorityInfo.priority = m_Priority;
VmaPnextChainPushFront(&allocInfo, &priorityInfo);
}
-#endif // #if VMA_MEMORY_PRIORITY
+#endif // VMA_MEMORY_PRIORITY
#if VMA_EXTERNAL_MEMORY
// Attach VkExportMemoryAllocateInfoKHR if necessary.
VkExportMemoryAllocateInfoKHR exportMemoryAllocInfo = { VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_KHR };
exportMemoryAllocInfo.handleTypes = m_hAllocator->GetExternalMemoryHandleTypeFlags(m_MemoryTypeIndex);
- if(exportMemoryAllocInfo.handleTypes != 0)
+ if (exportMemoryAllocInfo.handleTypes != 0)
{
VmaPnextChainPushFront(&allocInfo, &exportMemoryAllocInfo);
}
-#endif // #if VMA_EXTERNAL_MEMORY
+#endif // VMA_EXTERNAL_MEMORY
VkDeviceMemory mem = VK_NULL_HANDLE;
VkResult res = m_hAllocator->AllocateVulkanMemory(&allocInfo, &mem);
- if(res < 0)
+ if (res < 0)
{
return res;
}
@@ -13726,16 +12798,16 @@ VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIn
VmaDeviceMemoryBlock* const pBlock = vma_new(m_hAllocator, VmaDeviceMemoryBlock)(m_hAllocator);
pBlock->Init(
m_hAllocator,
- this, // parentBlockVector
m_hParentPool,
m_MemoryTypeIndex,
mem,
allocInfo.allocationSize,
m_NextBlockId++,
- m_Algorithm);
+ m_Algorithm,
+ m_BufferImageGranularity);
m_Blocks.push_back(pBlock);
- if(pNewBlockIndex != VMA_NULL)
+ if (pNewBlockIndex != VMA_NULL)
{
*pNewBlockIndex = m_Blocks.size() - 1;
}
@@ -13743,256 +12815,28 @@ VkResult VmaBlockVector::CreateBlock(VkDeviceSize blockSize, size_t* pNewBlockIn
return VK_SUCCESS;
}
-void VmaBlockVector::ApplyDefragmentationMovesCpu(
- class VmaBlockVectorDefragmentationContext* pDefragCtx,
- const VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves)
+bool VmaBlockVector::HasEmptyBlock()
{
- const size_t blockCount = m_Blocks.size();
- const bool isNonCoherent = m_hAllocator->IsMemoryTypeNonCoherent(m_MemoryTypeIndex);
-
- enum BLOCK_FLAG
- {
- BLOCK_FLAG_USED = 0x00000001,
- BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION = 0x00000002,
- };
-
- struct BlockInfo
- {
- uint32_t flags;
- void* pMappedData;
- };
- VmaVector< BlockInfo, VmaStlAllocator<BlockInfo> >
- blockInfo(blockCount, BlockInfo(), VmaStlAllocator<BlockInfo>(m_hAllocator->GetAllocationCallbacks()));
- memset(blockInfo.data(), 0, blockCount * sizeof(BlockInfo));
-
- // Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.
- const size_t moveCount = moves.size();
- for(size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
- blockInfo[move.srcBlockIndex].flags |= BLOCK_FLAG_USED;
- blockInfo[move.dstBlockIndex].flags |= BLOCK_FLAG_USED;
- }
-
- VMA_ASSERT(pDefragCtx->res == VK_SUCCESS);
-
- // Go over all blocks. Get mapped pointer or map if necessary.
- for(size_t blockIndex = 0; pDefragCtx->res == VK_SUCCESS && blockIndex < blockCount; ++blockIndex)
- {
- BlockInfo& currBlockInfo = blockInfo[blockIndex];
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- if((currBlockInfo.flags & BLOCK_FLAG_USED) != 0)
- {
- currBlockInfo.pMappedData = pBlock->GetMappedData();
- // It is not originally mapped - map it.
- if(currBlockInfo.pMappedData == VMA_NULL)
- {
- pDefragCtx->res = pBlock->Map(m_hAllocator, 1, &currBlockInfo.pMappedData);
- if(pDefragCtx->res == VK_SUCCESS)
- {
- currBlockInfo.flags |= BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION;
- }
- }
- }
- }
-
- // Go over all moves. Do actual data transfer.
- if(pDefragCtx->res == VK_SUCCESS)
- {
- const VkDeviceSize nonCoherentAtomSize = m_hAllocator->m_PhysicalDeviceProperties.limits.nonCoherentAtomSize;
- VkMappedMemoryRange memRange = { VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE };
-
- for(size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
-
- const BlockInfo& srcBlockInfo = blockInfo[move.srcBlockIndex];
- const BlockInfo& dstBlockInfo = blockInfo[move.dstBlockIndex];
-
- VMA_ASSERT(srcBlockInfo.pMappedData && dstBlockInfo.pMappedData);
-
- // Invalidate source.
- if(isNonCoherent)
- {
- VmaDeviceMemoryBlock* const pSrcBlock = m_Blocks[move.srcBlockIndex];
- memRange.memory = pSrcBlock->GetDeviceMemory();
- memRange.offset = VmaAlignDown(move.srcOffset, nonCoherentAtomSize);
- memRange.size = VMA_MIN(
- VmaAlignUp(move.size + (move.srcOffset - memRange.offset), nonCoherentAtomSize),
- pSrcBlock->m_pMetadata->GetSize() - memRange.offset);
- (*m_hAllocator->GetVulkanFunctions().vkInvalidateMappedMemoryRanges)(m_hAllocator->m_hDevice, 1, &memRange);
- }
-
- // THE PLACE WHERE ACTUAL DATA COPY HAPPENS.
- memmove(
- reinterpret_cast<char*>(dstBlockInfo.pMappedData) + move.dstOffset,
- reinterpret_cast<char*>(srcBlockInfo.pMappedData) + move.srcOffset,
- static_cast<size_t>(move.size));
-
- if(IsCorruptionDetectionEnabled())
- {
- VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset - VMA_DEBUG_MARGIN);
- VmaWriteMagicValue(dstBlockInfo.pMappedData, move.dstOffset + move.size);
- }
-
- // Flush destination.
- if(isNonCoherent)
- {
- VmaDeviceMemoryBlock* const pDstBlock = m_Blocks[move.dstBlockIndex];
- memRange.memory = pDstBlock->GetDeviceMemory();
- memRange.offset = VmaAlignDown(move.dstOffset, nonCoherentAtomSize);
- memRange.size = VMA_MIN(
- VmaAlignUp(move.size + (move.dstOffset - memRange.offset), nonCoherentAtomSize),
- pDstBlock->m_pMetadata->GetSize() - memRange.offset);
- (*m_hAllocator->GetVulkanFunctions().vkFlushMappedMemoryRanges)(m_hAllocator->m_hDevice, 1, &memRange);
- }
- }
- }
-
- // Go over all blocks in reverse order. Unmap those that were mapped just for defragmentation.
- // Regardless of pCtx->res == VK_SUCCESS.
- for(size_t blockIndex = blockCount; blockIndex--; )
- {
- const BlockInfo& currBlockInfo = blockInfo[blockIndex];
- if((currBlockInfo.flags & BLOCK_FLAG_MAPPED_FOR_DEFRAGMENTATION) != 0)
- {
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- pBlock->Unmap(m_hAllocator, 1);
- }
- }
-}
-
-void VmaBlockVector::ApplyDefragmentationMovesGpu(
- class VmaBlockVectorDefragmentationContext* pDefragCtx,
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkCommandBuffer commandBuffer)
-{
- const size_t blockCount = m_Blocks.size();
-
- pDefragCtx->blockContexts.resize(blockCount);
- memset(pDefragCtx->blockContexts.data(), 0, blockCount * sizeof(VmaBlockDefragmentationContext));
-
- // Go over all moves. Mark blocks that are used with BLOCK_FLAG_USED.
- const size_t moveCount = moves.size();
- for(size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
-
- //if(move.type == VMA_ALLOCATION_TYPE_UNKNOWN)
- {
- // Old school move still require us to map the whole block
- pDefragCtx->blockContexts[move.srcBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;
- pDefragCtx->blockContexts[move.dstBlockIndex].flags |= VmaBlockDefragmentationContext::BLOCK_FLAG_USED;
- }
- }
-
- VMA_ASSERT(pDefragCtx->res == VK_SUCCESS);
-
- // Go over all blocks. Create and bind buffer for whole block if necessary.
- {
- VkBufferCreateInfo bufCreateInfo;
- VmaFillGpuDefragmentationBufferCreateInfo(bufCreateInfo);
-
- for(size_t blockIndex = 0; pDefragCtx->res == VK_SUCCESS && blockIndex < blockCount; ++blockIndex)
- {
- VmaBlockDefragmentationContext& currBlockCtx = pDefragCtx->blockContexts[blockIndex];
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- if((currBlockCtx.flags & VmaBlockDefragmentationContext::BLOCK_FLAG_USED) != 0)
- {
- bufCreateInfo.size = pBlock->m_pMetadata->GetSize();
- pDefragCtx->res = (*m_hAllocator->GetVulkanFunctions().vkCreateBuffer)(
- m_hAllocator->m_hDevice, &bufCreateInfo, m_hAllocator->GetAllocationCallbacks(), &currBlockCtx.hBuffer);
- if(pDefragCtx->res == VK_SUCCESS)
- {
- pDefragCtx->res = (*m_hAllocator->GetVulkanFunctions().vkBindBufferMemory)(
- m_hAllocator->m_hDevice, currBlockCtx.hBuffer, pBlock->GetDeviceMemory(), 0);
- }
- }
- }
- }
-
- // Go over all moves. Post data transfer commands to command buffer.
- if(pDefragCtx->res == VK_SUCCESS)
- {
- for(size_t moveIndex = 0; moveIndex < moveCount; ++moveIndex)
- {
- const VmaDefragmentationMove& move = moves[moveIndex];
-
- const VmaBlockDefragmentationContext& srcBlockCtx = pDefragCtx->blockContexts[move.srcBlockIndex];
- const VmaBlockDefragmentationContext& dstBlockCtx = pDefragCtx->blockContexts[move.dstBlockIndex];
-
- VMA_ASSERT(srcBlockCtx.hBuffer && dstBlockCtx.hBuffer);
-
- VkBufferCopy region = {
- move.srcOffset,
- move.dstOffset,
- move.size };
- (*m_hAllocator->GetVulkanFunctions().vkCmdCopyBuffer)(
- commandBuffer, srcBlockCtx.hBuffer, dstBlockCtx.hBuffer, 1, &region);
- }
- }
-
- // Save buffers to defrag context for later destruction.
- if(pDefragCtx->res == VK_SUCCESS && moveCount > 0)
- {
- pDefragCtx->res = VK_NOT_READY;
- }
-}
-
-void VmaBlockVector::FreeEmptyBlocks(VmaDefragmentationStats* pDefragmentationStats)
-{
- for(size_t blockIndex = m_Blocks.size(); blockIndex--; )
- {
- VmaDeviceMemoryBlock* pBlock = m_Blocks[blockIndex];
- if(pBlock->m_pMetadata->IsEmpty())
- {
- if(m_Blocks.size() > m_MinBlockCount)
- {
- if(pDefragmentationStats != VMA_NULL)
- {
- ++pDefragmentationStats->deviceMemoryBlocksFreed;
- pDefragmentationStats->bytesFreed += pBlock->m_pMetadata->GetSize();
- }
-
- VmaVectorRemove(m_Blocks, blockIndex);
- pBlock->Destroy(m_hAllocator);
- vma_delete(m_hAllocator, pBlock);
- }
- else
- {
- break;
- }
- }
- }
- UpdateHasEmptyBlock();
-}
-
-void VmaBlockVector::UpdateHasEmptyBlock()
-{
- m_HasEmptyBlock = false;
- for(size_t index = 0, count = m_Blocks.size(); index < count; ++index)
+ for (size_t index = 0, count = m_Blocks.size(); index < count; ++index)
{
VmaDeviceMemoryBlock* const pBlock = m_Blocks[index];
- if(pBlock->m_pMetadata->IsEmpty())
+ if (pBlock->m_pMetadata->IsEmpty())
{
- m_HasEmptyBlock = true;
- break;
+ return true;
}
}
+ return false;
}
#if VMA_STATS_STRING_ENABLED
-
void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json)
{
VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
- json.BeginObject();
-
- if(IsCustomPool())
+ if (IsCustomPool())
{
const char* poolName = m_hParentPool->GetName();
- if(poolName != VMA_NULL && poolName[0] != '\0')
+ if (poolName != VMA_NULL && poolName[0] != '\0')
{
json.WriteString("Name");
json.WriteString(poolName);
@@ -14006,12 +12850,12 @@ void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json)
json.WriteString("BlockCount");
json.BeginObject(true);
- if(m_MinBlockCount > 0)
+ if (m_MinBlockCount > 0)
{
json.WriteString("Min");
json.WriteNumber((uint64_t)m_MinBlockCount);
}
- if(m_MaxBlockCount < SIZE_MAX)
+ if (m_MaxBlockCount < SIZE_MAX)
{
json.WriteString("Max");
json.WriteNumber((uint64_t)m_MaxBlockCount);
@@ -14020,13 +12864,7 @@ void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json)
json.WriteNumber((uint64_t)m_Blocks.size());
json.EndObject();
- if(m_FrameInUseCount > 0)
- {
- json.WriteString("FrameInUseCount");
- json.WriteNumber(m_FrameInUseCount);
- }
-
- if(m_Algorithm != 0)
+ if (m_Algorithm != 0)
{
json.WriteString("Algorithm");
json.WriteString(VmaAlgorithmToStr(m_Algorithm));
@@ -14040,2030 +12878,865 @@ void VmaBlockVector::PrintDetailedMap(class VmaJsonWriter& json)
json.WriteString("Blocks");
json.BeginObject();
- for(size_t i = 0; i < m_Blocks.size(); ++i)
+ for (size_t i = 0; i < m_Blocks.size(); ++i)
{
json.BeginString();
json.ContinueString(m_Blocks[i]->GetId());
json.EndString();
- m_Blocks[i]->m_pMetadata->PrintDetailedMap(json);
+ m_Blocks[i]->m_pMetadata->PrintDetailedMap(json, m_Blocks[i]->GetMapRefCount());
}
json.EndObject();
-
- json.EndObject();
-}
-
-#endif // #if VMA_STATS_STRING_ENABLED
-
-void VmaBlockVector::Defragment(
- class VmaBlockVectorDefragmentationContext* pCtx,
- VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags,
- VkDeviceSize& maxCpuBytesToMove, uint32_t& maxCpuAllocationsToMove,
- VkDeviceSize& maxGpuBytesToMove, uint32_t& maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer)
-{
- pCtx->res = VK_SUCCESS;
-
- const VkMemoryPropertyFlags memPropFlags =
- m_hAllocator->m_MemProps.memoryTypes[m_MemoryTypeIndex].propertyFlags;
- const bool isHostVisible = (memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0;
-
- const bool canDefragmentOnCpu = maxCpuBytesToMove > 0 && maxCpuAllocationsToMove > 0 &&
- isHostVisible;
- const bool canDefragmentOnGpu = maxGpuBytesToMove > 0 && maxGpuAllocationsToMove > 0 &&
- !IsCorruptionDetectionEnabled() &&
- ((1u << m_MemoryTypeIndex) & m_hAllocator->GetGpuDefragmentationMemoryTypeBits()) != 0;
-
- // There are options to defragment this memory type.
- if(canDefragmentOnCpu || canDefragmentOnGpu)
- {
- bool defragmentOnGpu;
- // There is only one option to defragment this memory type.
- if(canDefragmentOnGpu != canDefragmentOnCpu)
- {
- defragmentOnGpu = canDefragmentOnGpu;
- }
- // Both options are available: Heuristics to choose the best one.
- else
- {
- defragmentOnGpu = (memPropFlags & VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT) != 0 ||
- m_hAllocator->IsIntegratedGpu();
- }
-
- bool overlappingMoveSupported = !defragmentOnGpu;
-
- if(m_hAllocator->m_UseMutex)
- {
- if(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL)
- {
- if(!m_Mutex.TryLockWrite())
- {
- pCtx->res = VK_ERROR_INITIALIZATION_FAILED;
- return;
- }
- }
- else
- {
- m_Mutex.LockWrite();
- pCtx->mutexLocked = true;
- }
- }
-
- pCtx->Begin(overlappingMoveSupported, flags);
-
- // Defragment.
-
- const VkDeviceSize maxBytesToMove = defragmentOnGpu ? maxGpuBytesToMove : maxCpuBytesToMove;
- const uint32_t maxAllocationsToMove = defragmentOnGpu ? maxGpuAllocationsToMove : maxCpuAllocationsToMove;
- pCtx->res = pCtx->GetAlgorithm()->Defragment(pCtx->defragmentationMoves, maxBytesToMove, maxAllocationsToMove, flags);
-
- // Accumulate statistics.
- if(pStats != VMA_NULL)
- {
- const VkDeviceSize bytesMoved = pCtx->GetAlgorithm()->GetBytesMoved();
- const uint32_t allocationsMoved = pCtx->GetAlgorithm()->GetAllocationsMoved();
- pStats->bytesMoved += bytesMoved;
- pStats->allocationsMoved += allocationsMoved;
- VMA_ASSERT(bytesMoved <= maxBytesToMove);
- VMA_ASSERT(allocationsMoved <= maxAllocationsToMove);
- if(defragmentOnGpu)
- {
- maxGpuBytesToMove -= bytesMoved;
- maxGpuAllocationsToMove -= allocationsMoved;
- }
- else
- {
- maxCpuBytesToMove -= bytesMoved;
- maxCpuAllocationsToMove -= allocationsMoved;
- }
- }
-
- if(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL)
- {
- if(m_hAllocator->m_UseMutex)
- m_Mutex.UnlockWrite();
-
- if(pCtx->res >= VK_SUCCESS && !pCtx->defragmentationMoves.empty())
- pCtx->res = VK_NOT_READY;
-
- return;
- }
-
- if(pCtx->res >= VK_SUCCESS)
- {
- if(defragmentOnGpu)
- {
- ApplyDefragmentationMovesGpu(pCtx, pCtx->defragmentationMoves, commandBuffer);
- }
- else
- {
- ApplyDefragmentationMovesCpu(pCtx, pCtx->defragmentationMoves);
- }
- }
- }
}
+#endif // VMA_STATS_STRING_ENABLED
-void VmaBlockVector::DefragmentationEnd(
- class VmaBlockVectorDefragmentationContext* pCtx,
- uint32_t flags,
- VmaDefragmentationStats* pStats)
+VkResult VmaBlockVector::CheckCorruption()
{
- if(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL && m_hAllocator->m_UseMutex)
+ if (!IsCorruptionDetectionEnabled())
{
- VMA_ASSERT(pCtx->mutexLocked == false);
-
- // Incremental defragmentation doesn't hold the lock, so when we enter here we don't actually have any
- // lock protecting us. Since we mutate state here, we have to take the lock out now
- m_Mutex.LockWrite();
- pCtx->mutexLocked = true;
+ return VK_ERROR_FEATURE_NOT_PRESENT;
}
- // If the mutex isn't locked we didn't do any work and there is nothing to delete.
- if(pCtx->mutexLocked || !m_hAllocator->m_UseMutex)
+ VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
+ for (uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
{
- // Destroy buffers.
- for(size_t blockIndex = pCtx->blockContexts.size(); blockIndex--;)
- {
- VmaBlockDefragmentationContext &blockCtx = pCtx->blockContexts[blockIndex];
- if(blockCtx.hBuffer)
- {
- (*m_hAllocator->GetVulkanFunctions().vkDestroyBuffer)(m_hAllocator->m_hDevice, blockCtx.hBuffer, m_hAllocator->GetAllocationCallbacks());
- }
- }
-
- if(pCtx->res >= VK_SUCCESS)
+ VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
+ VMA_ASSERT(pBlock);
+ VkResult res = pBlock->CheckCorruption(m_hAllocator);
+ if (res != VK_SUCCESS)
{
- FreeEmptyBlocks(pStats);
+ return res;
}
}
-
- if(pCtx->mutexLocked)
- {
- VMA_ASSERT(m_hAllocator->m_UseMutex);
- m_Mutex.UnlockWrite();
- }
+ return VK_SUCCESS;
}
-uint32_t VmaBlockVector::ProcessDefragmentations(
- class VmaBlockVectorDefragmentationContext *pCtx,
- VmaDefragmentationPassMoveInfo* pMove, uint32_t maxMoves)
-{
- VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex);
-
- const uint32_t moveCount = VMA_MIN(uint32_t(pCtx->defragmentationMoves.size()) - pCtx->defragmentationMovesProcessed, maxMoves);
-
- for(uint32_t i = 0; i < moveCount; ++ i)
- {
- VmaDefragmentationMove& move = pCtx->defragmentationMoves[pCtx->defragmentationMovesProcessed + i];
-
- pMove->allocation = move.hAllocation;
- pMove->memory = move.pDstBlock->GetDeviceMemory();
- pMove->offset = move.dstOffset;
-
- ++ pMove;
- }
-
- pCtx->defragmentationMovesProcessed += moveCount;
-
- return moveCount;
-}
+#endif // _VMA_BLOCK_VECTOR_FUNCTIONS
-void VmaBlockVector::CommitDefragmentations(
- class VmaBlockVectorDefragmentationContext *pCtx,
- VmaDefragmentationStats* pStats)
+#ifndef _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS
+VmaDefragmentationContext_T::VmaDefragmentationContext_T(
+ VmaAllocator hAllocator,
+ const VmaDefragmentationInfo& info)
+ : m_MaxPassBytes(info.maxBytesPerPass == 0 ? VK_WHOLE_SIZE : info.maxBytesPerPass),
+ m_MaxPassAllocations(info.maxAllocationsPerPass == 0 ? UINT32_MAX : info.maxAllocationsPerPass),
+ m_MoveAllocator(hAllocator->GetAllocationCallbacks()),
+ m_Moves(m_MoveAllocator)
{
- VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex);
+ m_Algorithm = info.flags & VMA_DEFRAGMENTATION_FLAG_ALGORITHM_MASK;
- for(uint32_t i = pCtx->defragmentationMovesCommitted; i < pCtx->defragmentationMovesProcessed; ++ i)
+ if (info.pool != VMA_NULL)
{
- const VmaDefragmentationMove &move = pCtx->defragmentationMoves[i];
-
- move.pSrcBlock->m_pMetadata->FreeAtOffset(move.srcOffset);
- move.hAllocation->ChangeBlockAllocation(m_hAllocator, move.pDstBlock, move.dstOffset);
+ m_BlockVectorCount = 1;
+ m_PoolBlockVector = &info.pool->m_BlockVector;
+ m_pBlockVectors = &m_PoolBlockVector;
+ m_PoolBlockVector->SortByFreeSize();
}
-
- pCtx->defragmentationMovesCommitted = pCtx->defragmentationMovesProcessed;
- FreeEmptyBlocks(pStats);
-}
-
-size_t VmaBlockVector::CalcAllocationCount() const
-{
- size_t result = 0;
- for(size_t i = 0; i < m_Blocks.size(); ++i)
+ else
{
- result += m_Blocks[i]->m_pMetadata->GetAllocationCount();
+ m_BlockVectorCount = hAllocator->GetMemoryTypeCount();
+ m_PoolBlockVector = VMA_NULL;
+ m_pBlockVectors = hAllocator->m_pBlockVectors;
+ for (uint32_t i = 0; i < m_BlockVectorCount; ++i)
+ {
+ VmaBlockVector* vector = m_pBlockVectors[i];
+ if (vector != VMA_NULL)
+ vector->SortByFreeSize();
+ }
}
- return result;
-}
-
-bool VmaBlockVector::IsBufferImageGranularityConflictPossible() const
-{
- if(m_BufferImageGranularity == 1)
+
+ switch (m_Algorithm)
{
- return false;
- }
- VmaSuballocationType lastSuballocType = VMA_SUBALLOCATION_TYPE_FREE;
- for(size_t i = 0, count = m_Blocks.size(); i < count; ++i)
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
{
- VmaDeviceMemoryBlock* const pBlock = m_Blocks[i];
- VMA_ASSERT(m_Algorithm == 0);
- VmaBlockMetadata_Generic* const pMetadata = (VmaBlockMetadata_Generic*)pBlock->m_pMetadata;
- if(pMetadata->IsBufferImageGranularityConflictPossible(m_BufferImageGranularity, lastSuballocType))
+ if (hAllocator->GetBufferImageGranularity() > 1)
{
- return true;
+ m_AlgorithmState = vma_new_array(hAllocator, StateExtensive, m_BlockVectorCount);
}
+ break;
+ }
}
- return false;
}
-void VmaBlockVector::MakePoolAllocationsLost(
- uint32_t currentFrameIndex,
- size_t* pLostAllocationCount)
+VmaDefragmentationContext_T::~VmaDefragmentationContext_T()
{
- VmaMutexLockWrite lock(m_Mutex, m_hAllocator->m_UseMutex);
- size_t lostAllocationCount = 0;
- for(uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
+ if (m_AlgorithmState)
{
- VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pBlock);
- lostAllocationCount += pBlock->m_pMetadata->MakeAllocationsLost(currentFrameIndex, m_FrameInUseCount);
- }
- if(pLostAllocationCount != VMA_NULL)
- {
- *pLostAllocationCount = lostAllocationCount;
+ switch (m_Algorithm)
+ {
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ vma_delete_array(m_MoveAllocator.m_pCallbacks, reinterpret_cast<StateExtensive*>(m_AlgorithmState), m_BlockVectorCount);
+ break;
+ default:
+ VMA_ASSERT(0);
+ }
}
}
-VkResult VmaBlockVector::CheckCorruption()
+VkResult VmaDefragmentationContext_T::DefragmentPassBegin(VmaDefragmentationPassMoveInfo& moveInfo)
{
- if(!IsCorruptionDetectionEnabled())
+ if (m_PoolBlockVector != VMA_NULL)
{
- return VK_ERROR_FEATURE_NOT_PRESENT;
+ if (m_PoolBlockVector->GetBlockCount() > 1)
+ ComputeDefragmentation(*m_PoolBlockVector, 0);
+ else if (m_PoolBlockVector->GetBlockCount() == 1)
+ ReallocWithinBlock(*m_PoolBlockVector, m_PoolBlockVector->GetBlock(0));
}
-
- VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
- for(uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
+ else
{
- VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pBlock);
- VkResult res = pBlock->CheckCorruption(m_hAllocator);
- if(res != VK_SUCCESS)
+ for (uint32_t i = 0; i < m_BlockVectorCount; ++i)
{
- return res;
+ if (m_pBlockVectors[i] != VMA_NULL)
+ {
+ if (m_pBlockVectors[i]->GetBlockCount() > 1)
+ {
+ if (ComputeDefragmentation(*m_pBlockVectors[i], i))
+ break;
+ }
+ else if (m_pBlockVectors[i]->GetBlockCount() == 1)
+ {
+ if (ReallocWithinBlock(*m_pBlockVectors[i], m_pBlockVectors[i]->GetBlock(0)))
+ break;
+ }
+ }
}
}
- return VK_SUCCESS;
-}
-
-void VmaBlockVector::AddStats(VmaStats* pStats)
-{
- const uint32_t memTypeIndex = m_MemoryTypeIndex;
- const uint32_t memHeapIndex = m_hAllocator->MemoryTypeIndexToHeapIndex(memTypeIndex);
-
- VmaMutexLockRead lock(m_Mutex, m_hAllocator->m_UseMutex);
-
- for(uint32_t blockIndex = 0; blockIndex < m_Blocks.size(); ++blockIndex)
- {
- const VmaDeviceMemoryBlock* const pBlock = m_Blocks[blockIndex];
- VMA_ASSERT(pBlock);
- VMA_HEAVY_ASSERT(pBlock->Validate());
- VmaStatInfo allocationStatInfo;
- pBlock->m_pMetadata->CalcAllocationStatInfo(allocationStatInfo);
- VmaAddStatInfo(pStats->total, allocationStatInfo);
- VmaAddStatInfo(pStats->memoryType[memTypeIndex], allocationStatInfo);
- VmaAddStatInfo(pStats->memoryHeap[memHeapIndex], allocationStatInfo);
- }
-}
-////////////////////////////////////////////////////////////////////////////////
-// VmaDefragmentationAlgorithm_Generic members definition
-
-VmaDefragmentationAlgorithm_Generic::VmaDefragmentationAlgorithm_Generic(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- uint32_t currentFrameIndex,
- bool overlappingMoveSupported) :
- VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),
- m_AllocationCount(0),
- m_AllAllocations(false),
- m_BytesMoved(0),
- m_AllocationsMoved(0),
- m_Blocks(VmaStlAllocator<BlockInfo*>(hAllocator->GetAllocationCallbacks()))
-{
- // Create block info for each block.
- const size_t blockCount = m_pBlockVector->m_Blocks.size();
- for(size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ moveInfo.moveCount = static_cast<uint32_t>(m_Moves.size());
+ if (moveInfo.moveCount > 0)
{
- BlockInfo* pBlockInfo = vma_new(m_hAllocator, BlockInfo)(m_hAllocator->GetAllocationCallbacks());
- pBlockInfo->m_OriginalBlockIndex = blockIndex;
- pBlockInfo->m_pBlock = m_pBlockVector->m_Blocks[blockIndex];
- m_Blocks.push_back(pBlockInfo);
+ moveInfo.pMoves = m_Moves.data();
+ return VK_INCOMPLETE;
}
- // Sort them by m_pBlock pointer value.
- VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockPointerLess());
+ moveInfo.pMoves = VMA_NULL;
+ return VK_SUCCESS;
}
-VmaDefragmentationAlgorithm_Generic::~VmaDefragmentationAlgorithm_Generic()
+VkResult VmaDefragmentationContext_T::DefragmentPassEnd(VmaDefragmentationPassMoveInfo& moveInfo)
{
- for(size_t i = m_Blocks.size(); i--; )
- {
- vma_delete(m_hAllocator, m_Blocks[i]);
- }
-}
+ VMA_ASSERT(moveInfo.moveCount > 0 ? moveInfo.pMoves != VMA_NULL : true);
-void VmaDefragmentationAlgorithm_Generic::AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged)
-{
- // Now as we are inside VmaBlockVector::m_Mutex, we can make final check if this allocation was not lost.
- if(hAlloc->GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST)
+ VkResult result = VK_SUCCESS;
+ VmaVector<ImmovableBlock, VmaStlAllocator<ImmovableBlock>> immovableBlocks(VmaStlAllocator<ImmovableBlock>(m_MoveAllocator.m_pCallbacks));
+ for (uint32_t i = 0; i < moveInfo.moveCount; ++i)
{
- VmaDeviceMemoryBlock* pBlock = hAlloc->GetBlock();
- BlockInfoVector::iterator it = VmaBinaryFindFirstNotLess(m_Blocks.begin(), m_Blocks.end(), pBlock, BlockPointerLess());
- if(it != m_Blocks.end() && (*it)->m_pBlock == pBlock)
+ VmaDefragmentationMove& move = moveInfo.pMoves[i];
+ size_t prevCount = 0, currentCount = 0;
+ VkDeviceSize freedBlockSize = 0;
+
+ uint32_t vectorIndex;
+ VmaBlockVector* vector;
+ if (m_PoolBlockVector != VMA_NULL)
{
- AllocationInfo allocInfo = AllocationInfo(hAlloc, pChanged);
- (*it)->m_Allocations.push_back(allocInfo);
+ vectorIndex = 0;
+ vector = m_PoolBlockVector;
}
else
{
- VMA_ASSERT(0);
+ vectorIndex = move.srcAllocation->GetMemoryTypeIndex();
+ vector = m_pBlockVectors[vectorIndex];
+ VMA_ASSERT(vector != VMA_NULL);
}
- ++m_AllocationCount;
- }
-}
-
-VkResult VmaDefragmentationAlgorithm_Generic::DefragmentRound(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- bool freeOldAllocations)
-{
- if(m_Blocks.empty())
- {
- return VK_SUCCESS;
- }
-
- // This is a choice based on research.
- // Option 1:
- uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT;
- // Option 2:
- //uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_MEMORY_BIT;
- // Option 3:
- //uint32_t strategy = VMA_ALLOCATION_CREATE_STRATEGY_MIN_FRAGMENTATION_BIT;
-
- size_t srcBlockMinIndex = 0;
- // When FAST_ALGORITHM, move allocations from only last out of blocks that contain non-movable allocations.
- /*
- if(m_AlgorithmFlags & VMA_DEFRAGMENTATION_FAST_ALGORITHM_BIT)
- {
- const size_t blocksWithNonMovableCount = CalcBlocksWithNonMovableCount();
- if(blocksWithNonMovableCount > 0)
+ VmaAllocation dst = reinterpret_cast<VmaAllocation>(move.internalData);
+ switch (move.operation)
{
- srcBlockMinIndex = blocksWithNonMovableCount - 1;
- }
- }
- */
+ case VMA_DEFRAGMENTATION_MOVE_OPERATION_COPY:
+ {
+ move.srcAllocation->SwapBlockAllocation(dst);
+ prevCount = vector->GetBlockCount();
+ freedBlockSize = dst->GetBlock()->m_pMetadata->GetSize();
+ vector->Free(dst, false);
+ currentCount = vector->GetBlockCount();
- size_t srcBlockIndex = m_Blocks.size() - 1;
- size_t srcAllocIndex = SIZE_MAX;
- for(;;)
- {
- // 1. Find next allocation to move.
- // 1.1. Start from last to first m_Blocks - they are sorted from most "destination" to most "source".
- // 1.2. Then start from last to first m_Allocations.
- while(srcAllocIndex >= m_Blocks[srcBlockIndex]->m_Allocations.size())
+ result = VK_INCOMPLETE;
+ break;
+ }
+ case VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE:
{
- if(m_Blocks[srcBlockIndex]->m_Allocations.empty())
+ m_Stats.bytesMoved -= move.srcAllocation->GetSize();
+ vector->Free(dst, false);
+
+ VmaDeviceMemoryBlock* newBlock = move.srcAllocation->GetBlock();
+ bool notPresent = true;
+ for (const ImmovableBlock& block : immovableBlocks)
{
- // Finished: no more allocations to process.
- if(srcBlockIndex == srcBlockMinIndex)
+ if (block.block == newBlock)
{
- return VK_SUCCESS;
- }
- else
- {
- --srcBlockIndex;
- srcAllocIndex = SIZE_MAX;
+ notPresent = false;
+ break;
}
}
- else
- {
- srcAllocIndex = m_Blocks[srcBlockIndex]->m_Allocations.size() - 1;
- }
+ if (notPresent)
+ immovableBlocks.push_back({ vectorIndex, newBlock });
+ break;
}
-
- BlockInfo* pSrcBlockInfo = m_Blocks[srcBlockIndex];
- AllocationInfo& allocInfo = pSrcBlockInfo->m_Allocations[srcAllocIndex];
-
- const VkDeviceSize size = allocInfo.m_hAllocation->GetSize();
- const VkDeviceSize srcOffset = allocInfo.m_hAllocation->GetOffset();
- const VkDeviceSize alignment = allocInfo.m_hAllocation->GetAlignment();
- const VmaSuballocationType suballocType = allocInfo.m_hAllocation->GetSuballocationType();
-
- // 2. Try to find new place for this allocation in preceding or current block.
- for(size_t dstBlockIndex = 0; dstBlockIndex <= srcBlockIndex; ++dstBlockIndex)
+ case VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY:
{
- BlockInfo* pDstBlockInfo = m_Blocks[dstBlockIndex];
- VmaAllocationRequest dstAllocRequest;
- if(pDstBlockInfo->m_pBlock->m_pMetadata->CreateAllocationRequest(
- m_CurrentFrameIndex,
- m_pBlockVector->GetFrameInUseCount(),
- m_pBlockVector->GetBufferImageGranularity(),
- size,
- alignment,
- false, // upperAddress
- suballocType,
- false, // canMakeOtherLost
- strategy,
- &dstAllocRequest) &&
- MoveMakesSense(
- dstBlockIndex, dstAllocRequest.offset, srcBlockIndex, srcOffset))
- {
- VMA_ASSERT(dstAllocRequest.itemsToMakeLostCount == 0);
+ prevCount = vector->GetBlockCount();
+ freedBlockSize = move.srcAllocation->GetBlock()->m_pMetadata->GetSize();
+ vector->Free(move.srcAllocation, false);
+ currentCount = vector->GetBlockCount();
+ freedBlockSize *= prevCount - currentCount;
- // Reached limit on number of allocations or bytes to move.
- if((m_AllocationsMoved + 1 > maxAllocationsToMove) ||
- (m_BytesMoved + size > maxBytesToMove))
- {
- return VK_SUCCESS;
- }
-
- VmaDefragmentationMove move = {};
- move.srcBlockIndex = pSrcBlockInfo->m_OriginalBlockIndex;
- move.dstBlockIndex = pDstBlockInfo->m_OriginalBlockIndex;
- move.srcOffset = srcOffset;
- move.dstOffset = dstAllocRequest.offset;
- move.size = size;
- move.hAllocation = allocInfo.m_hAllocation;
- move.pSrcBlock = pSrcBlockInfo->m_pBlock;
- move.pDstBlock = pDstBlockInfo->m_pBlock;
-
- moves.push_back(move);
-
- pDstBlockInfo->m_pBlock->m_pMetadata->Alloc(
- dstAllocRequest,
- suballocType,
- size,
- allocInfo.m_hAllocation);
-
- if(freeOldAllocations)
- {
- pSrcBlockInfo->m_pBlock->m_pMetadata->FreeAtOffset(srcOffset);
- allocInfo.m_hAllocation->ChangeBlockAllocation(m_hAllocator, pDstBlockInfo->m_pBlock, dstAllocRequest.offset);
- }
-
- if(allocInfo.m_pChanged != VMA_NULL)
- {
- *allocInfo.m_pChanged = VK_TRUE;
- }
+ VkDeviceSize dstBlockSize = dst->GetBlock()->m_pMetadata->GetSize();
+ vector->Free(dst, false);
+ freedBlockSize += dstBlockSize * (currentCount - vector->GetBlockCount());
+ currentCount = vector->GetBlockCount();
- ++m_AllocationsMoved;
- m_BytesMoved += size;
-
- VmaVectorRemove(pSrcBlockInfo->m_Allocations, srcAllocIndex);
-
- break;
- }
+ result = VK_INCOMPLETE;
+ break;
+ }
+ default:
+ VMA_ASSERT(0);
}
- // If not processed, this allocInfo remains in pBlockInfo->m_Allocations for next round.
-
- if(srcAllocIndex > 0)
+ if (prevCount > currentCount)
{
- --srcAllocIndex;
+ size_t freedBlocks = prevCount - currentCount;
+ m_Stats.deviceMemoryBlocksFreed += static_cast<uint32_t>(freedBlocks);
+ m_Stats.bytesFreed += freedBlockSize;
}
- else
+
+ switch (m_Algorithm)
{
- if(srcBlockIndex > 0)
- {
- --srcBlockIndex;
- srcAllocIndex = SIZE_MAX;
- }
- else
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ {
+ if (m_AlgorithmState != VMA_NULL)
{
- return VK_SUCCESS;
+ // Avoid unnecessary tries to allocate when new free block is avaiable
+ StateExtensive& state = reinterpret_cast<StateExtensive*>(m_AlgorithmState)[vectorIndex];
+ if (state.firstFreeBlock != SIZE_MAX)
+ {
+ state.firstFreeBlock -= prevCount - currentCount;
+ if (state.firstFreeBlock != 0)
+ state.firstFreeBlock -= vector->GetBlock(state.firstFreeBlock - 1)->m_pMetadata->IsEmpty();
+ }
}
}
+ }
}
-}
+ moveInfo.moveCount = 0;
+ moveInfo.pMoves = VMA_NULL;
+ m_Moves.clear();
-size_t VmaDefragmentationAlgorithm_Generic::CalcBlocksWithNonMovableCount() const
-{
- size_t result = 0;
- for(size_t i = 0; i < m_Blocks.size(); ++i)
+ // Move blocks with immovable allocations according to algorithm
+ if (immovableBlocks.size() > 0)
{
- if(m_Blocks[i]->m_HasNonMovableAllocations)
+ switch (m_Algorithm)
{
- ++result;
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ {
+ if (m_AlgorithmState != VMA_NULL)
+ {
+ bool swapped = false;
+ // Move to the start of free blocks range
+ for (const ImmovableBlock& block : immovableBlocks)
+ {
+ StateExtensive& state = reinterpret_cast<StateExtensive*>(m_AlgorithmState)[block.vectorIndex];
+ if (state.operation != StateExtensive::Operation::Cleanup)
+ {
+ VmaBlockVector* vector = m_pBlockVectors[block.vectorIndex];
+ for (size_t i = 0, count = vector->GetBlockCount() - m_ImmovableBlockCount; i < count; ++i)
+ {
+ if (vector->GetBlock(i) == block.block)
+ {
+ VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[vector->GetBlockCount() - ++m_ImmovableBlockCount]);
+ if (state.firstFreeBlock != SIZE_MAX)
+ {
+ if (i < state.firstFreeBlock - 1)
+ {
+ VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[--state.firstFreeBlock]);
+ }
+ }
+ swapped = true;
+ break;
+ }
+ }
+ }
+ }
+ if (swapped)
+ result = VK_INCOMPLETE;
+ break;
+ }
}
- }
- return result;
-}
-
-VkResult VmaDefragmentationAlgorithm_Generic::Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags)
-{
- if(!m_AllAllocations && m_AllocationCount == 0)
- {
- return VK_SUCCESS;
- }
-
- const size_t blockCount = m_Blocks.size();
- for(size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
- {
- BlockInfo* pBlockInfo = m_Blocks[blockIndex];
-
- if(m_AllAllocations)
+ default:
{
- VmaBlockMetadata_Generic* pMetadata = (VmaBlockMetadata_Generic*)pBlockInfo->m_pBlock->m_pMetadata;
- for(VmaSuballocationList::const_iterator it = pMetadata->m_Suballocations.begin();
- it != pMetadata->m_Suballocations.end();
- ++it)
+ // Move to the begining
+ for (const ImmovableBlock& block : immovableBlocks)
{
- if(it->type != VMA_SUBALLOCATION_TYPE_FREE)
+ VmaBlockVector* vector = m_pBlockVectors[block.vectorIndex];
+ for (size_t i = m_ImmovableBlockCount; vector->GetBlockCount(); ++i)
{
- AllocationInfo allocInfo = AllocationInfo(it->hAllocation, VMA_NULL);
- pBlockInfo->m_Allocations.push_back(allocInfo);
+ if (vector->GetBlock(i) == block.block)
+ {
+ VMA_SWAP(vector->m_Blocks[i], vector->m_Blocks[m_ImmovableBlockCount++]);
+ break;
+ }
}
}
+ break;
+ }
}
-
- pBlockInfo->CalcHasNonMovableAllocations();
-
- // This is a choice based on research.
- // Option 1:
- pBlockInfo->SortAllocationsByOffsetDescending();
- // Option 2:
- //pBlockInfo->SortAllocationsBySizeDescending();
- }
-
- // Sort m_Blocks this time by the main criterium, from most "destination" to most "source" blocks.
- VMA_SORT(m_Blocks.begin(), m_Blocks.end(), BlockInfoCompareMoveDestination());
-
- // This is a choice based on research.
- const uint32_t roundCount = 2;
-
- // Execute defragmentation rounds (the main part).
- VkResult result = VK_SUCCESS;
- for(uint32_t round = 0; (round < roundCount) && (result == VK_SUCCESS); ++round)
- {
- result = DefragmentRound(moves, maxBytesToMove, maxAllocationsToMove, !(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL));
}
-
return result;
}
-bool VmaDefragmentationAlgorithm_Generic::MoveMakesSense(
- size_t dstBlockIndex, VkDeviceSize dstOffset,
- size_t srcBlockIndex, VkDeviceSize srcOffset)
+bool VmaDefragmentationContext_T::ComputeDefragmentation(VmaBlockVector& vector, size_t index)
{
- if(dstBlockIndex < srcBlockIndex)
+ switch (m_Algorithm)
{
- return true;
- }
- if(dstBlockIndex > srcBlockIndex)
- {
- return false;
- }
- if(dstOffset < srcOffset)
- {
- return true;
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT:
+ return ComputeDefragmentation_Fast(vector);
+ default: // Default algoritm
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_BALANCED_BIT:
+ return ComputeDefragmentation_Balanced(vector);
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FULL_BIT:
+ return ComputeDefragmentation_Full(vector);
+ case VMA_DEFRAGMENTATION_FLAG_ALGORITHM_EXTENSIVE_BIT:
+ return ComputeDefragmentation_Extensive(vector, index);
}
- return false;
}
-////////////////////////////////////////////////////////////////////////////////
-// VmaDefragmentationAlgorithm_Fast
-
-VmaDefragmentationAlgorithm_Fast::VmaDefragmentationAlgorithm_Fast(
- VmaAllocator hAllocator,
- VmaBlockVector* pBlockVector,
- uint32_t currentFrameIndex,
- bool overlappingMoveSupported) :
- VmaDefragmentationAlgorithm(hAllocator, pBlockVector, currentFrameIndex),
- m_OverlappingMoveSupported(overlappingMoveSupported),
- m_AllocationCount(0),
- m_AllAllocations(false),
- m_BytesMoved(0),
- m_AllocationsMoved(0),
- m_BlockInfos(VmaStlAllocator<BlockInfo>(hAllocator->GetAllocationCallbacks()))
+VmaDefragmentationContext_T::MoveAllocationData VmaDefragmentationContext_T::GetMoveData(
+ VmaAllocHandle handle, VmaBlockMetadata* metadata)
{
- VMA_ASSERT(VMA_DEBUG_MARGIN == 0);
+ MoveAllocationData moveData;
+ moveData.move.srcAllocation = (VmaAllocation)metadata->GetAllocationUserData(handle);
+ moveData.size = moveData.move.srcAllocation->GetSize();
+ moveData.alignment = moveData.move.srcAllocation->GetAlignment();
+ moveData.type = moveData.move.srcAllocation->GetSuballocationType();
+ moveData.flags = 0;
-}
+ if (moveData.move.srcAllocation->IsPersistentMap())
+ moveData.flags |= VMA_ALLOCATION_CREATE_MAPPED_BIT;
+ if (moveData.move.srcAllocation->IsMappingAllowed())
+ moveData.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT;
-VmaDefragmentationAlgorithm_Fast::~VmaDefragmentationAlgorithm_Fast()
-{
+ return moveData;
}
-VkResult VmaDefragmentationAlgorithm_Fast::Defragment(
- VmaVector< VmaDefragmentationMove, VmaStlAllocator<VmaDefragmentationMove> >& moves,
- VkDeviceSize maxBytesToMove,
- uint32_t maxAllocationsToMove,
- VmaDefragmentationFlags flags)
+bool VmaDefragmentationContext_T::IncrementCounters(uint32_t& allocations, VkDeviceSize bytes)
{
- VMA_ASSERT(m_AllAllocations || m_pBlockVector->CalcAllocationCount() == m_AllocationCount);
-
- const size_t blockCount = m_pBlockVector->GetBlockCount();
- if(blockCount == 0 || maxBytesToMove == 0 || maxAllocationsToMove == 0)
- {
- return VK_SUCCESS;
- }
-
- PreprocessMetadata();
-
- // Sort blocks in order from most destination.
-
- m_BlockInfos.resize(blockCount);
- for(size_t i = 0; i < blockCount; ++i)
+ if (++allocations >= m_MaxPassAllocations || bytes >= m_MaxPassBytes)
{
- m_BlockInfos[i].origBlockIndex = i;
+ m_Stats.bytesMoved += bytes;
+ m_Stats.allocationsMoved += allocations;
+ return true;
}
+ return false;
+}
- VMA_SORT(m_BlockInfos.begin(), m_BlockInfos.end(), [this](const BlockInfo& lhs, const BlockInfo& rhs) -> bool {
- return m_pBlockVector->GetBlock(lhs.origBlockIndex)->m_pMetadata->GetSumFreeSize() <
- m_pBlockVector->GetBlock(rhs.origBlockIndex)->m_pMetadata->GetSumFreeSize();
- });
-
- // THE MAIN ALGORITHM
-
- FreeSpaceDatabase freeSpaceDb;
-
- size_t dstBlockInfoIndex = 0;
- size_t dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;
- VmaDeviceMemoryBlock* pDstBlock = m_pBlockVector->GetBlock(dstOrigBlockIndex);
- VmaBlockMetadata_Generic* pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock->m_pMetadata;
- VkDeviceSize dstBlockSize = pDstMetadata->GetSize();
- VkDeviceSize dstOffset = 0;
+bool VmaDefragmentationContext_T::ReallocWithinBlock(VmaBlockVector& vector, VmaDeviceMemoryBlock* block)
+{
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
+ VmaBlockMetadata* metadata = block->m_pMetadata;
- bool end = false;
- for(size_t srcBlockInfoIndex = 0; !end && srcBlockInfoIndex < blockCount; ++srcBlockInfoIndex)
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- const size_t srcOrigBlockIndex = m_BlockInfos[srcBlockInfoIndex].origBlockIndex;
- VmaDeviceMemoryBlock* const pSrcBlock = m_pBlockVector->GetBlock(srcOrigBlockIndex);
- VmaBlockMetadata_Generic* const pSrcMetadata = (VmaBlockMetadata_Generic*)pSrcBlock->m_pMetadata;
- for(VmaSuballocationList::iterator srcSuballocIt = pSrcMetadata->m_Suballocations.begin();
- !end && srcSuballocIt != pSrcMetadata->m_Suballocations.end(); )
- {
- VmaAllocation_T* const pAlloc = srcSuballocIt->hAllocation;
- const VkDeviceSize srcAllocAlignment = pAlloc->GetAlignment();
- const VkDeviceSize srcAllocSize = srcSuballocIt->size;
- if(m_AllocationsMoved == maxAllocationsToMove ||
- m_BytesMoved + srcAllocSize > maxBytesToMove)
- {
- end = true;
- break;
- }
- const VkDeviceSize srcAllocOffset = srcSuballocIt->offset;
-
- VmaDefragmentationMove move = {};
- // Try to place it in one of free spaces from the database.
- size_t freeSpaceInfoIndex;
- VkDeviceSize dstAllocOffset;
- if(freeSpaceDb.Fetch(srcAllocAlignment, srcAllocSize,
- freeSpaceInfoIndex, dstAllocOffset))
- {
- size_t freeSpaceOrigBlockIndex = m_BlockInfos[freeSpaceInfoIndex].origBlockIndex;
- VmaDeviceMemoryBlock* pFreeSpaceBlock = m_pBlockVector->GetBlock(freeSpaceOrigBlockIndex);
- VmaBlockMetadata_Generic* pFreeSpaceMetadata = (VmaBlockMetadata_Generic*)pFreeSpaceBlock->m_pMetadata;
-
- // Same block
- if(freeSpaceInfoIndex == srcBlockInfoIndex)
- {
- VMA_ASSERT(dstAllocOffset <= srcAllocOffset);
-
- // MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.
-
- VmaSuballocation suballoc = *srcSuballocIt;
- suballoc.offset = dstAllocOffset;
- suballoc.hAllocation->ChangeOffset(dstAllocOffset);
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
-
- VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;
- ++nextSuballocIt;
- pSrcMetadata->m_Suballocations.erase(srcSuballocIt);
- srcSuballocIt = nextSuballocIt;
-
- InsertSuballoc(pFreeSpaceMetadata, suballoc);
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = freeSpaceOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.size = srcAllocSize;
-
- moves.push_back(move);
- }
- // Different block
- else
- {
- // MOVE OPTION 2: Move the allocation to a different block.
-
- VMA_ASSERT(freeSpaceInfoIndex < srcBlockInfoIndex);
-
- VmaSuballocation suballoc = *srcSuballocIt;
- suballoc.offset = dstAllocOffset;
- suballoc.hAllocation->ChangeBlockAllocation(m_hAllocator, pFreeSpaceBlock, dstAllocOffset);
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
-
- VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;
- ++nextSuballocIt;
- pSrcMetadata->m_Suballocations.erase(srcSuballocIt);
- srcSuballocIt = nextSuballocIt;
-
- InsertSuballoc(pFreeSpaceMetadata, suballoc);
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = freeSpaceOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.size = srcAllocSize;
-
- moves.push_back(move);
- }
- }
- else
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(moveData.move.internalData);
+
+ VkDeviceSize offset = moveData.move.srcAllocation->GetOffset();
+ if (offset != 0 && metadata->GetSumFreeSize() >= moveData.size)
+ {
+ VmaAllocationRequest request = {};
+ if (metadata->CreateAllocationRequest(
+ moveData.size,
+ moveData.alignment,
+ false,
+ moveData.type,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+ &request))
{
- dstAllocOffset = VmaAlignUp(dstOffset, srcAllocAlignment);
-
- // If the allocation doesn't fit before the end of dstBlock, forward to next block.
- while(dstBlockInfoIndex < srcBlockInfoIndex &&
- dstAllocOffset + srcAllocSize > dstBlockSize)
- {
- // But before that, register remaining free space at the end of dst block.
- freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, dstBlockSize - dstOffset);
-
- ++dstBlockInfoIndex;
- dstOrigBlockIndex = m_BlockInfos[dstBlockInfoIndex].origBlockIndex;
- pDstBlock = m_pBlockVector->GetBlock(dstOrigBlockIndex);
- pDstMetadata = (VmaBlockMetadata_Generic*)pDstBlock->m_pMetadata;
- dstBlockSize = pDstMetadata->GetSize();
- dstOffset = 0;
- dstAllocOffset = 0;
- }
-
- // Same block
- if(dstBlockInfoIndex == srcBlockInfoIndex)
+ if (metadata->GetAllocationOffset(request.allocHandle) < offset)
{
- VMA_ASSERT(dstAllocOffset <= srcAllocOffset);
-
- const bool overlap = dstAllocOffset + srcAllocSize > srcAllocOffset;
-
- bool skipOver = overlap;
- if(overlap && m_OverlappingMoveSupported && dstAllocOffset < srcAllocOffset)
- {
- // If destination and source place overlap, skip if it would move it
- // by only < 1/64 of its size.
- skipOver = (srcAllocOffset - dstAllocOffset) * 64 < srcAllocSize;
- }
-
- if(skipOver)
+ if (vector.CommitAllocationRequest(
+ request,
+ block,
+ moveData.alignment,
+ moveData.flags,
+ this,
+ moveData.type,
+ &dst) == VK_SUCCESS)
{
- freeSpaceDb.Register(dstBlockInfoIndex, dstOffset, srcAllocOffset - dstOffset);
+ moveData.move.dstMemory = dst->GetMemory();
+ moveData.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(moveData.move);
+ currentBytesMoved += moveData.size;
- dstOffset = srcAllocOffset + srcAllocSize;
- ++srcSuballocIt;
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
}
- // MOVE OPTION 1: Move the allocation inside the same block by decreasing offset.
- else
- {
- srcSuballocIt->offset = dstAllocOffset;
- srcSuballocIt->hAllocation->ChangeOffset(dstAllocOffset);
- dstOffset = dstAllocOffset + srcAllocSize;
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
- ++srcSuballocIt;
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = dstOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.size = srcAllocSize;
-
- moves.push_back(move);
- }
- }
- // Different block
- else
- {
- // MOVE OPTION 2: Move the allocation to a different block.
-
- VMA_ASSERT(dstBlockInfoIndex < srcBlockInfoIndex);
- VMA_ASSERT(dstAllocOffset + srcAllocSize <= dstBlockSize);
-
- VmaSuballocation suballoc = *srcSuballocIt;
- suballoc.offset = dstAllocOffset;
- suballoc.hAllocation->ChangeBlockAllocation(m_hAllocator, pDstBlock, dstAllocOffset);
- dstOffset = dstAllocOffset + srcAllocSize;
- m_BytesMoved += srcAllocSize;
- ++m_AllocationsMoved;
-
- VmaSuballocationList::iterator nextSuballocIt = srcSuballocIt;
- ++nextSuballocIt;
- pSrcMetadata->m_Suballocations.erase(srcSuballocIt);
- srcSuballocIt = nextSuballocIt;
-
- pDstMetadata->m_Suballocations.push_back(suballoc);
-
- move.srcBlockIndex = srcOrigBlockIndex;
- move.dstBlockIndex = dstOrigBlockIndex;
- move.srcOffset = srcAllocOffset;
- move.dstOffset = dstAllocOffset;
- move.size = srcAllocSize;
-
- moves.push_back(move);
}
}
}
}
- m_BlockInfos.clear();
-
- PostprocessMetadata();
-
- return VK_SUCCESS;
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-void VmaDefragmentationAlgorithm_Fast::PreprocessMetadata()
+bool VmaDefragmentationContext_T::AllocInOtherBlock(size_t start, size_t end, MoveAllocationData& data, VmaBlockVector& vector)
{
- const size_t blockCount = m_pBlockVector->GetBlockCount();
- for(size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
- {
- VmaBlockMetadata_Generic* const pMetadata =
- (VmaBlockMetadata_Generic*)m_pBlockVector->GetBlock(blockIndex)->m_pMetadata;
- pMetadata->m_FreeCount = 0;
- pMetadata->m_SumFreeSize = pMetadata->GetSize();
- pMetadata->m_FreeSuballocationsBySize.clear();
- for(VmaSuballocationList::iterator it = pMetadata->m_Suballocations.begin();
- it != pMetadata->m_Suballocations.end(); )
- {
- if(it->type == VMA_SUBALLOCATION_TYPE_FREE)
- {
- VmaSuballocationList::iterator nextIt = it;
- ++nextIt;
- pMetadata->m_Suballocations.erase(it);
- it = nextIt;
- }
- else
- {
- ++it;
- }
- }
- }
-}
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(data.move.internalData);
-void VmaDefragmentationAlgorithm_Fast::PostprocessMetadata()
-{
- const size_t blockCount = m_pBlockVector->GetBlockCount();
- for(size_t blockIndex = 0; blockIndex < blockCount; ++blockIndex)
+ for (; start < end; ++start)
{
- VmaBlockMetadata_Generic* const pMetadata =
- (VmaBlockMetadata_Generic*)m_pBlockVector->GetBlock(blockIndex)->m_pMetadata;
- const VkDeviceSize blockSize = pMetadata->GetSize();
-
- // No allocations in this block - entire area is free.
- if(pMetadata->m_Suballocations.empty())
+ VmaDeviceMemoryBlock* dstBlock = vector.GetBlock(start);
+ if (dstBlock->m_pMetadata->GetSumFreeSize() >= data.size)
{
- pMetadata->m_FreeCount = 1;
- //pMetadata->m_SumFreeSize is already set to blockSize.
- VmaSuballocation suballoc = {
- 0, // offset
- blockSize, // size
- VMA_NULL, // hAllocation
- VMA_SUBALLOCATION_TYPE_FREE };
- pMetadata->m_Suballocations.push_back(suballoc);
- pMetadata->RegisterFreeSuballocation(pMetadata->m_Suballocations.begin());
- }
- // There are some allocations in this block.
- else
- {
- VkDeviceSize offset = 0;
- VmaSuballocationList::iterator it;
- for(it = pMetadata->m_Suballocations.begin();
- it != pMetadata->m_Suballocations.end();
- ++it)
+ if (vector.AllocateFromBlock(dstBlock,
+ data.size,
+ data.alignment,
+ data.flags,
+ this,
+ data.type,
+ 0,
+ &dst) == VK_SUCCESS)
{
- VMA_ASSERT(it->type != VMA_SUBALLOCATION_TYPE_FREE);
- VMA_ASSERT(it->offset >= offset);
-
- // Need to insert preceding free space.
- if(it->offset > offset)
- {
- ++pMetadata->m_FreeCount;
- const VkDeviceSize freeSize = it->offset - offset;
- VmaSuballocation suballoc = {
- offset, // offset
- freeSize, // size
- VMA_NULL, // hAllocation
- VMA_SUBALLOCATION_TYPE_FREE };
- VmaSuballocationList::iterator precedingFreeIt = pMetadata->m_Suballocations.insert(it, suballoc);
- if(freeSize >= VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
- {
- pMetadata->m_FreeSuballocationsBySize.push_back(precedingFreeIt);
- }
- }
-
- pMetadata->m_SumFreeSize -= it->size;
- offset = it->offset + it->size;
- }
+ data.move.dstMemory = dst->GetMemory();
+ data.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(data.move);
+ currentBytesMoved += data.size;
- // Need to insert trailing free space.
- if(offset < blockSize)
- {
- ++pMetadata->m_FreeCount;
- const VkDeviceSize freeSize = blockSize - offset;
- VmaSuballocation suballoc = {
- offset, // offset
- freeSize, // size
- VMA_NULL, // hAllocation
- VMA_SUBALLOCATION_TYPE_FREE };
- VMA_ASSERT(it == pMetadata->m_Suballocations.end());
- VmaSuballocationList::iterator trailingFreeIt = pMetadata->m_Suballocations.insert(it, suballoc);
- if(freeSize > VMA_MIN_FREE_SUBALLOCATION_SIZE_TO_REGISTER)
- {
- pMetadata->m_FreeSuballocationsBySize.push_back(trailingFreeIt);
- }
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
+ break;
}
-
- VMA_SORT(
- pMetadata->m_FreeSuballocationsBySize.begin(),
- pMetadata->m_FreeSuballocationsBySize.end(),
- VmaSuballocationItemSizeLess());
}
-
- VMA_HEAVY_ASSERT(pMetadata->Validate());
}
-}
-void VmaDefragmentationAlgorithm_Fast::InsertSuballoc(VmaBlockMetadata_Generic* pMetadata, const VmaSuballocation& suballoc)
-{
- // TODO: Optimize somehow. Remember iterator instead of searching for it linearly.
- VmaSuballocationList::iterator it = pMetadata->m_Suballocations.begin();
- while(it != pMetadata->m_Suballocations.end())
- {
- if(it->offset < suballoc.offset)
- {
- ++it;
- }
- }
- pMetadata->m_Suballocations.insert(it, suballoc);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// VmaBlockVectorDefragmentationContext
-
-VmaBlockVectorDefragmentationContext::VmaBlockVectorDefragmentationContext(
- VmaAllocator hAllocator,
- VmaPool hCustomPool,
- VmaBlockVector* pBlockVector,
- uint32_t currFrameIndex) :
- res(VK_SUCCESS),
- mutexLocked(false),
- blockContexts(VmaStlAllocator<VmaBlockDefragmentationContext>(hAllocator->GetAllocationCallbacks())),
- defragmentationMoves(VmaStlAllocator<VmaDefragmentationMove>(hAllocator->GetAllocationCallbacks())),
- defragmentationMovesProcessed(0),
- defragmentationMovesCommitted(0),
- hasDefragmentationPlan(0),
- m_hAllocator(hAllocator),
- m_hCustomPool(hCustomPool),
- m_pBlockVector(pBlockVector),
- m_CurrFrameIndex(currFrameIndex),
- m_pAlgorithm(VMA_NULL),
- m_Allocations(VmaStlAllocator<AllocInfo>(hAllocator->GetAllocationCallbacks())),
- m_AllAllocations(false)
-{
-}
-
-VmaBlockVectorDefragmentationContext::~VmaBlockVectorDefragmentationContext()
-{
- vma_delete(m_hAllocator, m_pAlgorithm);
-}
-
-void VmaBlockVectorDefragmentationContext::AddAllocation(VmaAllocation hAlloc, VkBool32* pChanged)
-{
- AllocInfo info = { hAlloc, pChanged };
- m_Allocations.push_back(info);
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-void VmaBlockVectorDefragmentationContext::Begin(bool overlappingMoveSupported, VmaDefragmentationFlags flags)
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Fast(VmaBlockVector& vector)
{
- const bool allAllocations = m_AllAllocations ||
- m_Allocations.size() == m_pBlockVector->CalcAllocationCount();
-
- /********************************
- HERE IS THE CHOICE OF DEFRAGMENTATION ALGORITHM.
- ********************************/
+ // Move only between blocks
- /*
- Fast algorithm is supported only when certain criteria are met:
- - VMA_DEBUG_MARGIN is 0.
- - All allocations in this block vector are moveable.
- - There is no possibility of image/buffer granularity conflict.
- - The defragmentation is not incremental
- */
- if(VMA_DEBUG_MARGIN == 0 &&
- allAllocations &&
- !m_pBlockVector->IsBufferImageGranularityConflictPossible() &&
- !(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL))
+ // Go through allocations in last blocks and try to fit them inside first ones
+ for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i)
{
- m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Fast)(
- m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);
- }
- else
- {
- m_pAlgorithm = vma_new(m_hAllocator, VmaDefragmentationAlgorithm_Generic)(
- m_hAllocator, m_pBlockVector, m_CurrFrameIndex, overlappingMoveSupported);
- }
+ VmaBlockMetadata* metadata = vector.GetBlock(i)->m_pMetadata;
- if(allAllocations)
- {
- m_pAlgorithm->AddAll();
- }
- else
- {
- for(size_t i = 0, count = m_Allocations.size(); i < count; ++i)
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- m_pAlgorithm->AddAllocation(m_Allocations[i].hAlloc, m_Allocations[i].pChanged);
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
+
+ // Check all previous blocks for free space
+ if (AllocInOtherBlock(0, i, moveData, vector))
+ return true;
}
}
+ return false;
}
-////////////////////////////////////////////////////////////////////////////////
-// VmaDefragmentationContext
-
-VmaDefragmentationContext_T::VmaDefragmentationContext_T(
- VmaAllocator hAllocator,
- uint32_t currFrameIndex,
- uint32_t flags,
- VmaDefragmentationStats* pStats) :
- m_hAllocator(hAllocator),
- m_CurrFrameIndex(currFrameIndex),
- m_Flags(flags),
- m_pStats(pStats),
- m_CustomPoolContexts(VmaStlAllocator<VmaBlockVectorDefragmentationContext*>(hAllocator->GetAllocationCallbacks()))
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Balanced(VmaBlockVector& vector)
{
- memset(m_DefaultPoolContexts, 0, sizeof(m_DefaultPoolContexts));
-}
+ // Go over every allocation and try to fit it in previous blocks at lowest offsets,
+ // if not possible: realloc within single block to minimize offset (exclude offset == 0),
+ // but only if there are noticable gaps between them (some heuristic, ex. average size of allocation in block)
-VmaDefragmentationContext_T::~VmaDefragmentationContext_T()
-{
- for(size_t i = m_CustomPoolContexts.size(); i--; )
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[i];
- pBlockVectorCtx->GetBlockVector()->DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);
- vma_delete(m_hAllocator, pBlockVectorCtx);
- }
- for(size_t i = m_hAllocator->m_MemProps.memoryTypeCount; i--; )
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[i];
- if(pBlockVectorCtx)
- {
- pBlockVectorCtx->GetBlockVector()->DefragmentationEnd(pBlockVectorCtx, m_Flags, m_pStats);
- vma_delete(m_hAllocator, pBlockVectorCtx);
- }
- }
-}
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
-void VmaDefragmentationContext_T::AddPools(uint32_t poolCount, const VmaPool* pPools)
-{
- for(uint32_t poolIndex = 0; poolIndex < poolCount; ++poolIndex)
+ for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i)
{
- VmaPool pool = pPools[poolIndex];
- VMA_ASSERT(pool);
- // Pools with algorithm other than default are not defragmented.
- if(pool->m_BlockVector.GetAlgorithm() == 0)
+ VmaDeviceMemoryBlock* block = vector.GetBlock(i);
+ VmaBlockMetadata* metadata = block->m_pMetadata;
+
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
- for(size_t i = m_CustomPoolContexts.size(); i--; )
+ // Check all previous blocks for free space
+ const size_t prevMoveCount = m_Moves.size();
+ if (AllocInOtherBlock(0, i, moveData, vector))
+ return true;
+
+ // If no room found then realloc within block for lower offset
+ VkDeviceSize offset = moveData.move.srcAllocation->GetOffset();
+ if (prevMoveCount == m_Moves.size() && offset != 0 && metadata->GetSumFreeSize() >= moveData.size)
{
- if(m_CustomPoolContexts[i]->GetCustomPool() == pool)
+ VmaAllocationRequest request = {};
+ if (metadata->CreateAllocationRequest(
+ moveData.size,
+ moveData.alignment,
+ false,
+ moveData.type,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+ &request))
{
- pBlockVectorDefragCtx = m_CustomPoolContexts[i];
- break;
- }
- }
+ if (metadata->GetAllocationOffset(request.allocHandle) < offset)
+ {
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(moveData.move.internalData);
+ if (vector.CommitAllocationRequest(
+ request,
+ block,
+ moveData.alignment,
+ moveData.flags,
+ this,
+ moveData.type,
+ &dst) == VK_SUCCESS)
+ {
+ moveData.move.dstMemory = dst->GetMemory();
+ moveData.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(moveData.move);
+ currentBytesMoved += moveData.size;
- if(!pBlockVectorDefragCtx)
- {
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- pool,
- &pool->m_BlockVector,
- m_CurrFrameIndex);
- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
+ }
+ }
+ }
}
-
- pBlockVectorDefragCtx->AddAll();
}
}
+
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-void VmaDefragmentationContext_T::AddAllocations(
- uint32_t allocationCount,
- const VmaAllocation* pAllocations,
- VkBool32* pAllocationsChanged)
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Full(VmaBlockVector& vector)
{
- // Dispatch pAllocations among defragmentators. Create them when necessary.
- for(uint32_t allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
+ // Go over every allocation and try to fit it in previous blocks at lowest offsets,
+ // if not possible: realloc within single block to minimize offset (exclude offset == 0)
+
+ VkDeviceSize currentBytesMoved = 0;
+ uint32_t currentAllocsMoved = 0;
+
+ for (size_t i = vector.GetBlockCount() - 1; i > m_ImmovableBlockCount; --i)
{
- const VmaAllocation hAlloc = pAllocations[allocIndex];
- VMA_ASSERT(hAlloc);
- // DedicatedAlloc cannot be defragmented.
- if((hAlloc->GetType() == VmaAllocation_T::ALLOCATION_TYPE_BLOCK) &&
- // Lost allocation cannot be defragmented.
- (hAlloc->GetLastUseFrameIndex() != VMA_FRAME_INDEX_LOST))
+ VmaDeviceMemoryBlock* block = vector.GetBlock(i);
+ VmaBlockMetadata* metadata = block->m_pMetadata;
+
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
{
- VmaBlockVectorDefragmentationContext* pBlockVectorDefragCtx = VMA_NULL;
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
- const VmaPool hAllocPool = hAlloc->GetBlock()->GetParentPool();
- // This allocation belongs to custom pool.
- if(hAllocPool != VK_NULL_HANDLE)
+ // Check all previous blocks for free space
+ const size_t prevMoveCount = m_Moves.size();
+ if (AllocInOtherBlock(0, i, moveData, vector))
+ return true;
+
+ // If no room found then realloc within block for lower offset
+ VkDeviceSize offset = moveData.move.srcAllocation->GetOffset();
+ if (prevMoveCount == m_Moves.size() && offset != 0 && metadata->GetSumFreeSize() >= moveData.size)
{
- // Pools with algorithm other than default are not defragmented.
- if(hAllocPool->m_BlockVector.GetAlgorithm() == 0)
+ VmaAllocationRequest request = {};
+ if (metadata->CreateAllocationRequest(
+ moveData.size,
+ moveData.alignment,
+ false,
+ moveData.type,
+ VMA_ALLOCATION_CREATE_STRATEGY_MIN_OFFSET_BIT,
+ &request))
{
- for(size_t i = m_CustomPoolContexts.size(); i--; )
+ if (metadata->GetAllocationOffset(request.allocHandle) < offset)
{
- if(m_CustomPoolContexts[i]->GetCustomPool() == hAllocPool)
+ VmaAllocation& dst = reinterpret_cast<VmaAllocation&>(moveData.move.internalData);
+ if (vector.CommitAllocationRequest(
+ request,
+ block,
+ moveData.alignment,
+ moveData.flags,
+ this,
+ moveData.type,
+ &dst) == VK_SUCCESS)
{
- pBlockVectorDefragCtx = m_CustomPoolContexts[i];
- break;
+ moveData.move.dstMemory = dst->GetMemory();
+ moveData.move.dstOffset = dst->GetOffset();
+ m_Moves.push_back(moveData.move);
+ currentBytesMoved += moveData.size;
+
+ if (IncrementCounters(currentAllocsMoved, currentBytesMoved))
+ return true;
}
}
- if(!pBlockVectorDefragCtx)
- {
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- hAllocPool,
- &hAllocPool->m_BlockVector,
- m_CurrFrameIndex);
- m_CustomPoolContexts.push_back(pBlockVectorDefragCtx);
- }
}
}
- // This allocation belongs to default pool.
- else
- {
- const uint32_t memTypeIndex = hAlloc->GetMemoryTypeIndex();
- pBlockVectorDefragCtx = m_DefaultPoolContexts[memTypeIndex];
- if(!pBlockVectorDefragCtx)
- {
- pBlockVectorDefragCtx = vma_new(m_hAllocator, VmaBlockVectorDefragmentationContext)(
- m_hAllocator,
- VMA_NULL, // hCustomPool
- m_hAllocator->m_pBlockVectors[memTypeIndex],
- m_CurrFrameIndex);
- m_DefaultPoolContexts[memTypeIndex] = pBlockVectorDefragCtx;
- }
- }
-
- if(pBlockVectorDefragCtx)
- {
- VkBool32* const pChanged = (pAllocationsChanged != VMA_NULL) ?
- &pAllocationsChanged[allocIndex] : VMA_NULL;
- pBlockVectorDefragCtx->AddAllocation(hAlloc, pChanged);
- }
}
}
+
+ m_Stats.bytesMoved += currentBytesMoved;
+ m_Stats.allocationsMoved += currentAllocsMoved;
+ return false;
}
-VkResult VmaDefragmentationContext_T::Defragment(
- VkDeviceSize maxCpuBytesToMove, uint32_t maxCpuAllocationsToMove,
- VkDeviceSize maxGpuBytesToMove, uint32_t maxGpuAllocationsToMove,
- VkCommandBuffer commandBuffer, VmaDefragmentationStats* pStats, VmaDefragmentationFlags flags)
+bool VmaDefragmentationContext_T::ComputeDefragmentation_Extensive(VmaBlockVector& vector, size_t index)
{
- if(pStats)
- {
- memset(pStats, 0, sizeof(VmaDefragmentationStats));
- }
+ // First free single block, then populate it to the brim, then free another block, and so on
- if(flags & VMA_DEFRAGMENTATION_FLAG_INCREMENTAL)
- {
- // For incremental defragmetnations, we just earmark how much we can move
- // The real meat is in the defragmentation steps
- m_MaxCpuBytesToMove = maxCpuBytesToMove;
- m_MaxCpuAllocationsToMove = maxCpuAllocationsToMove;
+ // Fallback to previous algorithm since without granularity conflicts it can achieve max packing
+ if (vector.m_BufferImageGranularity == 1)
+ return ComputeDefragmentation_Full(vector);
- m_MaxGpuBytesToMove = maxGpuBytesToMove;
- m_MaxGpuAllocationsToMove = maxGpuAllocationsToMove;
-
- if(m_MaxCpuBytesToMove == 0 && m_MaxCpuAllocationsToMove == 0 &&
- m_MaxGpuBytesToMove == 0 && m_MaxGpuAllocationsToMove == 0)
- return VK_SUCCESS;
+ VMA_ASSERT(m_AlgorithmState != VMA_NULL);
- return VK_NOT_READY;
- }
+ StateExtensive& vectorState = reinterpret_cast<StateExtensive*>(m_AlgorithmState)[index];
- if(commandBuffer == VK_NULL_HANDLE)
+ bool texturePresent = false, bufferPresent = false, otherPresent = false;
+ switch (vectorState.operation)
{
- maxGpuBytesToMove = 0;
- maxGpuAllocationsToMove = 0;
- }
+ case StateExtensive::Operation::Done: // Vector defragmented
+ return false;
+ case StateExtensive::Operation::FindFreeBlockBuffer:
+ case StateExtensive::Operation::FindFreeBlockTexture:
+ case StateExtensive::Operation::FindFreeBlockAll:
+ {
+ // No free blocks, have to clear last one
+ size_t last = (vectorState.firstFreeBlock == SIZE_MAX ? vector.GetBlockCount() : vectorState.firstFreeBlock) - 1;
+ VmaBlockMetadata* freeMetadata = vector.GetBlock(last)->m_pMetadata;
- VkResult res = VK_SUCCESS;
+ const size_t prevMoveCount = m_Moves.size();
+ for (VmaAllocHandle handle = freeMetadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = freeMetadata->GetNextAllocation(handle))
+ {
+ MoveAllocationData moveData = GetMoveData(handle, freeMetadata);
- // Process default pools.
- for(uint32_t memTypeIndex = 0;
- memTypeIndex < m_hAllocator->GetMemoryTypeCount() && res >= VK_SUCCESS;
- ++memTypeIndex)
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];
- if(pBlockVectorCtx)
- {
- VMA_ASSERT(pBlockVectorCtx->GetBlockVector());
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- pStats, flags,
- maxCpuBytesToMove, maxCpuAllocationsToMove,
- maxGpuBytesToMove, maxGpuAllocationsToMove,
- commandBuffer);
- if(pBlockVectorCtx->res != VK_SUCCESS)
+ // Check all previous blocks for free space
+ if (AllocInOtherBlock(0, last, moveData, vector))
{
- res = pBlockVectorCtx->res;
+ // Full clear performed already
+ if (prevMoveCount != m_Moves.size() && freeMetadata->GetNextAllocation(handle) == VK_NULL_HANDLE)
+ reinterpret_cast<size_t*>(m_AlgorithmState)[index] = last;
+ return true;
}
}
- }
- // Process custom pools.
- for(size_t customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();
- customCtxIndex < customCtxCount && res >= VK_SUCCESS;
- ++customCtxIndex)
- {
- VmaBlockVectorDefragmentationContext* pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];
- VMA_ASSERT(pBlockVectorCtx && pBlockVectorCtx->GetBlockVector());
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- pStats, flags,
- maxCpuBytesToMove, maxCpuAllocationsToMove,
- maxGpuBytesToMove, maxGpuAllocationsToMove,
- commandBuffer);
- if(pBlockVectorCtx->res != VK_SUCCESS)
+ if (prevMoveCount == m_Moves.size())
{
- res = pBlockVectorCtx->res;
+ // Cannot perform full clear, have to move data in other blocks around
+ if (last != 0)
+ {
+ for (size_t i = last - 1; i; --i)
+ {
+ if (ReallocWithinBlock(vector, vector.GetBlock(i)))
+ return true;
+ }
+ }
+
+ if (prevMoveCount == m_Moves.size())
+ {
+ // No possible reallocs within blocks, try to move them around fast
+ return ComputeDefragmentation_Fast(vector);
+ }
}
+ else
+ {
+ switch (vectorState.operation)
+ {
+ case StateExtensive::Operation::FindFreeBlockBuffer:
+ vectorState.operation = StateExtensive::Operation::MoveBuffers;
+ break;
+ default:
+ VMA_ASSERT(0);
+ case StateExtensive::Operation::FindFreeBlockTexture:
+ vectorState.operation = StateExtensive::Operation::MoveTextures;
+ break;
+ case StateExtensive::Operation::FindFreeBlockAll:
+ vectorState.operation = StateExtensive::Operation::MoveAll;
+ break;
+ }
+ vectorState.firstFreeBlock = last;
+ // Nothing done, block found without reallocations, can perform another reallocs in same pass
+ if (prevMoveCount == m_Moves.size())
+ return ComputeDefragmentation_Extensive(vector, index);
+ }
+ break;
}
-
- return res;
-}
-
-VkResult VmaDefragmentationContext_T::DefragmentPassBegin(VmaDefragmentationPassInfo* pInfo)
-{
- VmaDefragmentationPassMoveInfo* pCurrentMove = pInfo->pMoves;
- uint32_t movesLeft = pInfo->moveCount;
-
- // Process default pools.
- for(uint32_t memTypeIndex = 0;
- memTypeIndex < m_hAllocator->GetMemoryTypeCount();
- ++memTypeIndex)
+ case StateExtensive::Operation::MoveTextures:
{
- VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];
- if(pBlockVectorCtx)
+ if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL, vector,
+ vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent))
{
- VMA_ASSERT(pBlockVectorCtx->GetBlockVector());
-
- if(!pBlockVectorCtx->hasDefragmentationPlan)
+ if (texturePresent)
{
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- m_pStats, m_Flags,
- m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,
- m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,
- VK_NULL_HANDLE);
-
- if(pBlockVectorCtx->res < VK_SUCCESS)
- continue;
-
- pBlockVectorCtx->hasDefragmentationPlan = true;
+ vectorState.operation = StateExtensive::Operation::FindFreeBlockTexture;
+ return ComputeDefragmentation_Extensive(vector, index);
}
- const uint32_t processed = pBlockVectorCtx->GetBlockVector()->ProcessDefragmentations(
- pBlockVectorCtx,
- pCurrentMove, movesLeft);
+ if (!bufferPresent && !otherPresent)
+ {
+ vectorState.operation = StateExtensive::Operation::Cleanup;
+ break;
+ }
- movesLeft -= processed;
- pCurrentMove += processed;
+ // No more textures to move, check buffers
+ vectorState.operation = StateExtensive::Operation::MoveBuffers;
+ bufferPresent = false;
+ otherPresent = false;
}
+ else
+ break;
}
-
- // Process custom pools.
- for(size_t customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();
- customCtxIndex < customCtxCount;
- ++customCtxIndex)
+ case StateExtensive::Operation::MoveBuffers:
{
- VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];
- VMA_ASSERT(pBlockVectorCtx && pBlockVectorCtx->GetBlockVector());
-
- if(!pBlockVectorCtx->hasDefragmentationPlan)
+ if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_BUFFER, vector,
+ vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent))
{
- pBlockVectorCtx->GetBlockVector()->Defragment(
- pBlockVectorCtx,
- m_pStats, m_Flags,
- m_MaxCpuBytesToMove, m_MaxCpuAllocationsToMove,
- m_MaxGpuBytesToMove, m_MaxGpuAllocationsToMove,
- VK_NULL_HANDLE);
+ if (bufferPresent)
+ {
+ vectorState.operation = StateExtensive::Operation::FindFreeBlockBuffer;
+ return ComputeDefragmentation_Extensive(vector, index);
+ }
- if(pBlockVectorCtx->res < VK_SUCCESS)
- continue;
+ if (!otherPresent)
+ {
+ vectorState.operation = StateExtensive::Operation::Cleanup;
+ break;
+ }
- pBlockVectorCtx->hasDefragmentationPlan = true;
+ // No more buffers to move, check all others
+ vectorState.operation = StateExtensive::Operation::MoveAll;
+ otherPresent = false;
}
-
- const uint32_t processed = pBlockVectorCtx->GetBlockVector()->ProcessDefragmentations(
- pBlockVectorCtx,
- pCurrentMove, movesLeft);
-
- movesLeft -= processed;
- pCurrentMove += processed;
+ else
+ break;
}
-
- pInfo->moveCount = pInfo->moveCount - movesLeft;
-
- return VK_SUCCESS;
-}
-VkResult VmaDefragmentationContext_T::DefragmentPassEnd()
-{
- VkResult res = VK_SUCCESS;
-
- // Process default pools.
- for(uint32_t memTypeIndex = 0;
- memTypeIndex < m_hAllocator->GetMemoryTypeCount();
- ++memTypeIndex)
+ case StateExtensive::Operation::MoveAll:
{
- VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_DefaultPoolContexts[memTypeIndex];
- if(pBlockVectorCtx)
+ if (MoveDataToFreeBlocks(VMA_SUBALLOCATION_TYPE_FREE, vector,
+ vectorState.firstFreeBlock, texturePresent, bufferPresent, otherPresent))
{
- VMA_ASSERT(pBlockVectorCtx->GetBlockVector());
-
- if(!pBlockVectorCtx->hasDefragmentationPlan)
+ if (otherPresent)
{
- res = VK_NOT_READY;
- continue;
+ vectorState.operation = StateExtensive::Operation::FindFreeBlockBuffer;
+ return ComputeDefragmentation_Extensive(vector, index);
}
-
- pBlockVectorCtx->GetBlockVector()->CommitDefragmentations(
- pBlockVectorCtx, m_pStats);
-
- if(pBlockVectorCtx->defragmentationMoves.size() != pBlockVectorCtx->defragmentationMovesCommitted)
- res = VK_NOT_READY;
+ // Everything moved
+ vectorState.operation = StateExtensive::Operation::Cleanup;
}
+ break;
+ }
}
- // Process custom pools.
- for(size_t customCtxIndex = 0, customCtxCount = m_CustomPoolContexts.size();
- customCtxIndex < customCtxCount;
- ++customCtxIndex)
+ if (vectorState.operation == StateExtensive::Operation::Cleanup)
{
- VmaBlockVectorDefragmentationContext *pBlockVectorCtx = m_CustomPoolContexts[customCtxIndex];
- VMA_ASSERT(pBlockVectorCtx && pBlockVectorCtx->GetBlockVector());
-
- if(!pBlockVectorCtx->hasDefragmentationPlan)
+ // All other work done, pack data in blocks even tighter if possible
+ const size_t prevMoveCount = m_Moves.size();
+ for (size_t i = 0; i < vector.GetBlockCount(); ++i)
{
- res = VK_NOT_READY;
- continue;
+ if (ReallocWithinBlock(vector, vector.GetBlock(i)))
+ return true;
}
- pBlockVectorCtx->GetBlockVector()->CommitDefragmentations(
- pBlockVectorCtx, m_pStats);
-
- if(pBlockVectorCtx->defragmentationMoves.size() != pBlockVectorCtx->defragmentationMovesCommitted)
- res = VK_NOT_READY;
+ if (prevMoveCount == m_Moves.size())
+ vectorState.operation = StateExtensive::Operation::Done;
}
-
- return res;
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// VmaRecorder
-
-#if VMA_RECORDING_ENABLED
-
-VmaRecorder::VmaRecorder() :
- m_UseMutex(true),
- m_Flags(0),
- m_File(VMA_NULL),
- m_RecordingStartTime(std::chrono::high_resolution_clock::now())
-{
+ return false;
}
-VkResult VmaRecorder::Init(const VmaRecordSettings& settings, bool useMutex)
+bool VmaDefragmentationContext_T::MoveDataToFreeBlocks(VmaSuballocationType currentType,
+ VmaBlockVector& vector, size_t firstFreeBlock,
+ bool& texturePresent, bool& bufferPresent, bool& otherPresent)
{
- m_UseMutex = useMutex;
- m_Flags = settings.flags;
-
-#if defined(_WIN32)
- // Open file for writing.
- errno_t err = fopen_s(&m_File, settings.pFilePath, "wb");
-
- if(err != 0)
+ const size_t prevMoveCount = m_Moves.size();
+ for (size_t i = firstFreeBlock ; i;)
{
- return VK_ERROR_INITIALIZATION_FAILED;
- }
-#else
- // Open file for writing.
- m_File = fopen(settings.pFilePath, "wb");
+ VmaDeviceMemoryBlock* block = vector.GetBlock(--i);
+ VmaBlockMetadata* metadata = block->m_pMetadata;
- if(m_File == 0)
- {
- return VK_ERROR_INITIALIZATION_FAILED;
- }
-#endif
-
- // Write header.
- fprintf(m_File, "%s\n", "Vulkan Memory Allocator,Calls recording");
- fprintf(m_File, "%s\n", "1,8");
+ for (VmaAllocHandle handle = metadata->GetAllocationListBegin();
+ handle != VK_NULL_HANDLE;
+ handle = metadata->GetNextAllocation(handle))
+ {
+ MoveAllocationData moveData = GetMoveData(handle, metadata);
+ // Ignore newly created allocations by defragmentation algorithm
+ if (moveData.move.srcAllocation->GetUserData() == this)
+ continue;
- return VK_SUCCESS;
-}
+ // Move only single type of resources at once
+ if (!VmaIsBufferImageGranularityConflict(moveData.type, currentType))
+ {
+ // Try to fit allocation into free blocks
+ if (AllocInOtherBlock(firstFreeBlock, vector.GetBlockCount(), moveData, vector))
+ return false;
+ }
-VmaRecorder::~VmaRecorder()
-{
- if(m_File != VMA_NULL)
- {
- fclose(m_File);
+ if (!VmaIsBufferImageGranularityConflict(moveData.type, VMA_SUBALLOCATION_TYPE_IMAGE_OPTIMAL))
+ texturePresent = true;
+ else if (!VmaIsBufferImageGranularityConflict(moveData.type, VMA_SUBALLOCATION_TYPE_BUFFER))
+ bufferPresent = true;
+ else
+ otherPresent = true;
+ }
}
+ return prevMoveCount == m_Moves.size();
}
+#endif // _VMA_DEFRAGMENTATION_CONTEXT_FUNCTIONS
-void VmaRecorder::RecordCreateAllocator(uint32_t frameIndex)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaCreateAllocator\n", callParams.threadId, callParams.time, frameIndex);
- Flush();
-}
-
-void VmaRecorder::RecordDestroyAllocator(uint32_t frameIndex)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaDestroyAllocator\n", callParams.threadId, callParams.time, frameIndex);
- Flush();
-}
-
-void VmaRecorder::RecordCreatePool(uint32_t frameIndex, const VmaPoolCreateInfo& createInfo, VmaPool pool)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaCreatePool,%u,%u,%llu,%llu,%llu,%u,%p\n", callParams.threadId, callParams.time, frameIndex,
+#ifndef _VMA_POOL_T_FUNCTIONS
+VmaPool_T::VmaPool_T(
+ VmaAllocator hAllocator,
+ const VmaPoolCreateInfo& createInfo,
+ VkDeviceSize preferredBlockSize)
+ : m_BlockVector(
+ hAllocator,
+ this, // hParentPool
createInfo.memoryTypeIndex,
- createInfo.flags,
- createInfo.blockSize,
- (uint64_t)createInfo.minBlockCount,
- (uint64_t)createInfo.maxBlockCount,
- createInfo.frameInUseCount,
- pool);
- Flush();
-}
-
-void VmaRecorder::RecordDestroyPool(uint32_t frameIndex, VmaPool pool)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaDestroyPool,%p\n", callParams.threadId, callParams.time, frameIndex,
- pool);
- Flush();
-}
-
-void VmaRecorder::RecordAllocateMemory(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- const VmaAllocationCreateInfo& createInfo,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(createInfo.flags, createInfo.pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaAllocateMemory,%llu,%llu,%u,%u,%u,%u,%u,%u,%p,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- vkMemReq.size,
- vkMemReq.alignment,
- vkMemReq.memoryTypeBits,
- createInfo.flags,
- createInfo.usage,
- createInfo.requiredFlags,
- createInfo.preferredFlags,
- createInfo.memoryTypeBits,
- createInfo.pool,
- allocation,
- userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordAllocateMemoryPages(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- const VmaAllocationCreateInfo& createInfo,
- uint64_t allocationCount,
- const VmaAllocation* pAllocations)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(createInfo.flags, createInfo.pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaAllocateMemoryPages,%llu,%llu,%u,%u,%u,%u,%u,%u,%p,", callParams.threadId, callParams.time, frameIndex,
- vkMemReq.size,
- vkMemReq.alignment,
- vkMemReq.memoryTypeBits,
- createInfo.flags,
- createInfo.usage,
- createInfo.requiredFlags,
- createInfo.preferredFlags,
- createInfo.memoryTypeBits,
- createInfo.pool);
- PrintPointerList(allocationCount, pAllocations);
- fprintf(m_File, ",%s\n", userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordAllocateMemoryForBuffer(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- bool requiresDedicatedAllocation,
- bool prefersDedicatedAllocation,
- const VmaAllocationCreateInfo& createInfo,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(createInfo.flags, createInfo.pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaAllocateMemoryForBuffer,%llu,%llu,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- vkMemReq.size,
- vkMemReq.alignment,
- vkMemReq.memoryTypeBits,
- requiresDedicatedAllocation ? 1 : 0,
- prefersDedicatedAllocation ? 1 : 0,
- createInfo.flags,
- createInfo.usage,
- createInfo.requiredFlags,
- createInfo.preferredFlags,
- createInfo.memoryTypeBits,
- createInfo.pool,
- allocation,
- userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordAllocateMemoryForImage(uint32_t frameIndex,
- const VkMemoryRequirements& vkMemReq,
- bool requiresDedicatedAllocation,
- bool prefersDedicatedAllocation,
- const VmaAllocationCreateInfo& createInfo,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(createInfo.flags, createInfo.pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaAllocateMemoryForImage,%llu,%llu,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- vkMemReq.size,
- vkMemReq.alignment,
- vkMemReq.memoryTypeBits,
- requiresDedicatedAllocation ? 1 : 0,
- prefersDedicatedAllocation ? 1 : 0,
- createInfo.flags,
- createInfo.usage,
- createInfo.requiredFlags,
- createInfo.preferredFlags,
- createInfo.memoryTypeBits,
- createInfo.pool,
- allocation,
- userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordFreeMemory(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaFreeMemory,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordFreeMemoryPages(uint32_t frameIndex,
- uint64_t allocationCount,
- const VmaAllocation* pAllocations)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaFreeMemoryPages,", callParams.threadId, callParams.time, frameIndex);
- PrintPointerList(allocationCount, pAllocations);
- fprintf(m_File, "\n");
- Flush();
-}
-
-void VmaRecorder::RecordSetAllocationUserData(uint32_t frameIndex,
- VmaAllocation allocation,
- const void* pUserData)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(
- allocation->IsUserDataString() ? VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT : 0,
- pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaSetAllocationUserData,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- allocation,
- userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordCreateLostAllocation(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaCreateLostAllocation,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordMapMemory(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaMapMemory,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordUnmapMemory(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaUnmapMemory,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordFlushAllocation(uint32_t frameIndex,
- VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaFlushAllocation,%p,%llu,%llu\n", callParams.threadId, callParams.time, frameIndex,
- allocation,
- offset,
- size);
- Flush();
-}
-
-void VmaRecorder::RecordInvalidateAllocation(uint32_t frameIndex,
- VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaInvalidateAllocation,%p,%llu,%llu\n", callParams.threadId, callParams.time, frameIndex,
- allocation,
- offset,
- size);
- Flush();
-}
-
-void VmaRecorder::RecordCreateBuffer(uint32_t frameIndex,
- const VkBufferCreateInfo& bufCreateInfo,
- const VmaAllocationCreateInfo& allocCreateInfo,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(allocCreateInfo.flags, allocCreateInfo.pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaCreateBuffer,%u,%llu,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- bufCreateInfo.flags,
- bufCreateInfo.size,
- bufCreateInfo.usage,
- bufCreateInfo.sharingMode,
- allocCreateInfo.flags,
- allocCreateInfo.usage,
- allocCreateInfo.requiredFlags,
- allocCreateInfo.preferredFlags,
- allocCreateInfo.memoryTypeBits,
- allocCreateInfo.pool,
- allocation,
- userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordCreateImage(uint32_t frameIndex,
- const VkImageCreateInfo& imageCreateInfo,
- const VmaAllocationCreateInfo& allocCreateInfo,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- UserDataString userDataStr(allocCreateInfo.flags, allocCreateInfo.pUserData);
- fprintf(m_File, "%u,%.3f,%u,vmaCreateImage,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%u,%p,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- imageCreateInfo.flags,
- imageCreateInfo.imageType,
- imageCreateInfo.format,
- imageCreateInfo.extent.width,
- imageCreateInfo.extent.height,
- imageCreateInfo.extent.depth,
- imageCreateInfo.mipLevels,
- imageCreateInfo.arrayLayers,
- imageCreateInfo.samples,
- imageCreateInfo.tiling,
- imageCreateInfo.usage,
- imageCreateInfo.sharingMode,
- imageCreateInfo.initialLayout,
- allocCreateInfo.flags,
- allocCreateInfo.usage,
- allocCreateInfo.requiredFlags,
- allocCreateInfo.preferredFlags,
- allocCreateInfo.memoryTypeBits,
- allocCreateInfo.pool,
- allocation,
- userDataStr.GetString());
- Flush();
-}
-
-void VmaRecorder::RecordDestroyBuffer(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaDestroyBuffer,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordDestroyImage(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaDestroyImage,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordTouchAllocation(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaTouchAllocation,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordGetAllocationInfo(uint32_t frameIndex,
- VmaAllocation allocation)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaGetAllocationInfo,%p\n", callParams.threadId, callParams.time, frameIndex,
- allocation);
- Flush();
-}
-
-void VmaRecorder::RecordMakePoolAllocationsLost(uint32_t frameIndex,
- VmaPool pool)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaMakePoolAllocationsLost,%p\n", callParams.threadId, callParams.time, frameIndex,
- pool);
- Flush();
-}
-
-void VmaRecorder::RecordDefragmentationBegin(uint32_t frameIndex,
- const VmaDefragmentationInfo2& info,
- VmaDefragmentationContext ctx)
-{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaDefragmentationBegin,%u,", callParams.threadId, callParams.time, frameIndex,
- info.flags);
- PrintPointerList(info.allocationCount, info.pAllocations);
- fprintf(m_File, ",");
- PrintPointerList(info.poolCount, info.pPools);
- fprintf(m_File, ",%llu,%u,%llu,%u,%p,%p\n",
- info.maxCpuBytesToMove,
- info.maxCpuAllocationsToMove,
- info.maxGpuBytesToMove,
- info.maxGpuAllocationsToMove,
- info.commandBuffer,
- ctx);
- Flush();
-}
+ createInfo.blockSize != 0 ? createInfo.blockSize : preferredBlockSize,
+ createInfo.minBlockCount,
+ createInfo.maxBlockCount,
+ (createInfo.flags& VMA_POOL_CREATE_IGNORE_BUFFER_IMAGE_GRANULARITY_BIT) != 0 ? 1 : hAllocator->GetBufferImageGranularity(),
+ createInfo.blockSize != 0, // explicitBlockSize
+ createInfo.flags & VMA_POOL_CREATE_ALGORITHM_MASK, // algorithm
+ createInfo.priority,
+ VMA_MAX(hAllocator->GetMemoryTypeMinAlignment(createInfo.memoryTypeIndex), createInfo.minAllocationAlignment),
+ createInfo.pMemoryAllocateNext),
+ m_Id(0),
+ m_Name(VMA_NULL) {}
-void VmaRecorder::RecordDefragmentationEnd(uint32_t frameIndex,
- VmaDefragmentationContext ctx)
+VmaPool_T::~VmaPool_T()
{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaDefragmentationEnd,%p\n", callParams.threadId, callParams.time, frameIndex,
- ctx);
- Flush();
+ VMA_ASSERT(m_PrevPool == VMA_NULL && m_NextPool == VMA_NULL);
}
-void VmaRecorder::RecordSetPoolName(uint32_t frameIndex,
- VmaPool pool,
- const char* name)
+void VmaPool_T::SetName(const char* pName)
{
- CallParams callParams;
- GetBasicParams(callParams);
-
- VmaMutexLock lock(m_FileMutex, m_UseMutex);
- fprintf(m_File, "%u,%.3f,%u,vmaSetPoolName,%p,%s\n", callParams.threadId, callParams.time, frameIndex,
- pool, name != VMA_NULL ? name : "");
- Flush();
-}
+ const VkAllocationCallbacks* allocs = m_BlockVector.GetAllocator()->GetAllocationCallbacks();
+ VmaFreeString(allocs, m_Name);
-VmaRecorder::UserDataString::UserDataString(VmaAllocationCreateFlags allocFlags, const void* pUserData)
-{
- if(pUserData != VMA_NULL)
+ if (pName != VMA_NULL)
{
- if((allocFlags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0)
- {
- m_Str = (const char*)pUserData;
- }
- else
- {
- // If VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT is not specified, convert the string's memory address to a string and store it.
- snprintf(m_PtrStr, 17, "%p", pUserData);
- m_Str = m_PtrStr;
- }
+ m_Name = VmaCreateStringCopy(allocs, pName);
}
else
{
- m_Str = "";
- }
-}
-
-void VmaRecorder::WriteConfiguration(
- const VkPhysicalDeviceProperties& devProps,
- const VkPhysicalDeviceMemoryProperties& memProps,
- uint32_t vulkanApiVersion,
- bool dedicatedAllocationExtensionEnabled,
- bool bindMemory2ExtensionEnabled,
- bool memoryBudgetExtensionEnabled,
- bool deviceCoherentMemoryExtensionEnabled)
-{
- fprintf(m_File, "Config,Begin\n");
-
- fprintf(m_File, "VulkanApiVersion,%u,%u\n", VK_VERSION_MAJOR(vulkanApiVersion), VK_VERSION_MINOR(vulkanApiVersion));
-
- fprintf(m_File, "PhysicalDevice,apiVersion,%u\n", devProps.apiVersion);
- fprintf(m_File, "PhysicalDevice,driverVersion,%u\n", devProps.driverVersion);
- fprintf(m_File, "PhysicalDevice,vendorID,%u\n", devProps.vendorID);
- fprintf(m_File, "PhysicalDevice,deviceID,%u\n", devProps.deviceID);
- fprintf(m_File, "PhysicalDevice,deviceType,%u\n", devProps.deviceType);
- fprintf(m_File, "PhysicalDevice,deviceName,%s\n", devProps.deviceName);
-
- fprintf(m_File, "PhysicalDeviceLimits,maxMemoryAllocationCount,%u\n", devProps.limits.maxMemoryAllocationCount);
- fprintf(m_File, "PhysicalDeviceLimits,bufferImageGranularity,%llu\n", devProps.limits.bufferImageGranularity);
- fprintf(m_File, "PhysicalDeviceLimits,nonCoherentAtomSize,%llu\n", devProps.limits.nonCoherentAtomSize);
-
- fprintf(m_File, "PhysicalDeviceMemory,HeapCount,%u\n", memProps.memoryHeapCount);
- for(uint32_t i = 0; i < memProps.memoryHeapCount; ++i)
- {
- fprintf(m_File, "PhysicalDeviceMemory,Heap,%u,size,%llu\n", i, memProps.memoryHeaps[i].size);
- fprintf(m_File, "PhysicalDeviceMemory,Heap,%u,flags,%u\n", i, memProps.memoryHeaps[i].flags);
- }
- fprintf(m_File, "PhysicalDeviceMemory,TypeCount,%u\n", memProps.memoryTypeCount);
- for(uint32_t i = 0; i < memProps.memoryTypeCount; ++i)
- {
- fprintf(m_File, "PhysicalDeviceMemory,Type,%u,heapIndex,%u\n", i, memProps.memoryTypes[i].heapIndex);
- fprintf(m_File, "PhysicalDeviceMemory,Type,%u,propertyFlags,%u\n", i, memProps.memoryTypes[i].propertyFlags);
- }
-
- fprintf(m_File, "Extension,VK_KHR_dedicated_allocation,%u\n", dedicatedAllocationExtensionEnabled ? 1 : 0);
- fprintf(m_File, "Extension,VK_KHR_bind_memory2,%u\n", bindMemory2ExtensionEnabled ? 1 : 0);
- fprintf(m_File, "Extension,VK_EXT_memory_budget,%u\n", memoryBudgetExtensionEnabled ? 1 : 0);
- fprintf(m_File, "Extension,VK_AMD_device_coherent_memory,%u\n", deviceCoherentMemoryExtensionEnabled ? 1 : 0);
-
- fprintf(m_File, "Macro,VMA_DEBUG_ALWAYS_DEDICATED_MEMORY,%u\n", VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ? 1 : 0);
- fprintf(m_File, "Macro,VMA_MIN_ALIGNMENT,%llu\n", (VkDeviceSize)VMA_MIN_ALIGNMENT);
- fprintf(m_File, "Macro,VMA_DEBUG_MARGIN,%llu\n", (VkDeviceSize)VMA_DEBUG_MARGIN);
- fprintf(m_File, "Macro,VMA_DEBUG_INITIALIZE_ALLOCATIONS,%u\n", VMA_DEBUG_INITIALIZE_ALLOCATIONS ? 1 : 0);
- fprintf(m_File, "Macro,VMA_DEBUG_DETECT_CORRUPTION,%u\n", VMA_DEBUG_DETECT_CORRUPTION ? 1 : 0);
- fprintf(m_File, "Macro,VMA_DEBUG_GLOBAL_MUTEX,%u\n", VMA_DEBUG_GLOBAL_MUTEX ? 1 : 0);
- fprintf(m_File, "Macro,VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY,%llu\n", (VkDeviceSize)VMA_DEBUG_MIN_BUFFER_IMAGE_GRANULARITY);
- fprintf(m_File, "Macro,VMA_SMALL_HEAP_MAX_SIZE,%llu\n", (VkDeviceSize)VMA_SMALL_HEAP_MAX_SIZE);
- fprintf(m_File, "Macro,VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE,%llu\n", (VkDeviceSize)VMA_DEFAULT_LARGE_HEAP_BLOCK_SIZE);
-
- fprintf(m_File, "Config,End\n");
-}
-
-void VmaRecorder::GetBasicParams(CallParams& outParams)
-{
- #if defined(_WIN32)
- outParams.threadId = GetCurrentThreadId();
- #else
- // Use C++11 features to get thread id and convert it to uint32_t.
- // There is room for optimization since sstream is quite slow.
- // Is there a better way to convert std::this_thread::get_id() to uint32_t?
- std::thread::id thread_id = std::this_thread::get_id();
- std::stringstream thread_id_to_string_converter;
- thread_id_to_string_converter << thread_id;
- std::string thread_id_as_string = thread_id_to_string_converter.str();
- outParams.threadId = static_cast<uint32_t>(std::stoi(thread_id_as_string.c_str()));
- #endif
-
- auto current_time = std::chrono::high_resolution_clock::now();
-
- outParams.time = std::chrono::duration<double, std::chrono::seconds::period>(current_time - m_RecordingStartTime).count();
-}
-
-void VmaRecorder::PrintPointerList(uint64_t count, const VmaAllocation* pItems)
-{
- if(count)
- {
- fprintf(m_File, "%p", pItems[0]);
- for(uint64_t i = 1; i < count; ++i)
- {
- fprintf(m_File, " %p", pItems[i]);
- }
- }
-}
-
-void VmaRecorder::Flush()
-{
- if((m_Flags & VMA_RECORD_FLUSH_AFTER_CALL_BIT) != 0)
- {
- fflush(m_File);
+ m_Name = VMA_NULL;
}
}
+#endif // _VMA_POOL_T_FUNCTIONS
-#endif // #if VMA_RECORDING_ENABLED
-
-////////////////////////////////////////////////////////////////////////////////
-// VmaAllocationObjectAllocator
-
-VmaAllocationObjectAllocator::VmaAllocationObjectAllocator(const VkAllocationCallbacks* pAllocationCallbacks) :
- m_Allocator(pAllocationCallbacks, 1024)
-{
-}
-
-template<typename... Types> VmaAllocation VmaAllocationObjectAllocator::Allocate(Types... args)
-{
- VmaMutexLock mutexLock(m_Mutex);
- return m_Allocator.Alloc<Types...>(std::forward<Types>(args)...);
-}
-
-void VmaAllocationObjectAllocator::Free(VmaAllocation hAlloc)
-{
- VmaMutexLock mutexLock(m_Mutex);
- m_Allocator.Free(hAlloc);
-}
-
-////////////////////////////////////////////////////////////////////////////////
-// VmaAllocator_T
-
+#ifndef _VMA_ALLOCATOR_T_FUNCTIONS
VmaAllocator_T::VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo) :
m_UseMutex((pCreateInfo->flags & VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT) == 0),
m_VulkanApiVersion(pCreateInfo->vulkanApiVersion != 0 ? pCreateInfo->vulkanApiVersion : VK_API_VERSION_1_0),
@@ -16083,13 +13756,9 @@ VmaAllocator_T::VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo) :
m_DeviceMemoryCount(0),
m_PreferredLargeHeapBlockSize(0),
m_PhysicalDevice(pCreateInfo->physicalDevice),
- m_CurrentFrameIndex(0),
m_GpuDefragmentationMemoryTypeBits(UINT32_MAX),
m_NextPoolId(0),
m_GlobalMemoryTypeBits(UINT32_MAX)
-#if VMA_RECORDING_ENABLED
- ,m_pRecorder(VMA_NULL)
-#endif
{
if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0))
{
@@ -16156,7 +13825,6 @@ VmaAllocator_T::VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo) :
memset(&m_MemProps, 0, sizeof(m_MemProps));
memset(&m_pBlockVectors, 0, sizeof(m_pBlockVectors));
- memset(&m_pSmallBufferBlockVectors, 0, sizeof(m_pSmallBufferBlockVectors));
memset(&m_VulkanFunctions, 0, sizeof(m_VulkanFunctions));
#if VMA_EXTERNAL_MEMORY
@@ -16211,38 +13879,26 @@ VmaAllocator_T::VmaAllocator_T(const VmaAllocatorCreateInfo* pCreateInfo) :
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
- const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex);
-
- m_pBlockVectors[memTypeIndex] = vma_new(this, VmaBlockVector)(
- this,
- VK_NULL_HANDLE, // hParentPool
- memTypeIndex,
- preferredBlockSize,
- 0,
- SIZE_MAX,
- GetBufferImageGranularity(),
- pCreateInfo->frameInUseCount,
- false, // explicitBlockSize
- false, // linearAlgorithm
- 0.5f, // priority (0.5 is the default per Vulkan spec)
- GetMemoryTypeMinAlignment(memTypeIndex), // minAllocationAlignment
- VMA_NULL); // // pMemoryAllocateNext
- m_pSmallBufferBlockVectors[memTypeIndex] = vma_new(this, VmaBlockVector)(
- this,
- VK_NULL_HANDLE, // hParentPool
- memTypeIndex,
- preferredBlockSize,
- 0,
- SIZE_MAX,
- 1, // bufferImageGranularity forced to 1 !!!
- pCreateInfo->frameInUseCount,
- false, // explicitBlockSize
- false, // linearAlgorithm
- 0.5f, // priority (0.5 is the default per Vulkan spec)
- GetMemoryTypeMinAlignment(memTypeIndex), // minAllocationAlignment
- VMA_NULL); // // pMemoryAllocateNext
- // No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]->CreateMinBlocks here,
- // becase minBlockCount is 0.
+ // Create only supported types
+ if((m_GlobalMemoryTypeBits & (1u << memTypeIndex)) != 0)
+ {
+ const VkDeviceSize preferredBlockSize = CalcPreferredBlockSize(memTypeIndex);
+ m_pBlockVectors[memTypeIndex] = vma_new(this, VmaBlockVector)(
+ this,
+ VK_NULL_HANDLE, // hParentPool
+ memTypeIndex,
+ preferredBlockSize,
+ 0,
+ SIZE_MAX,
+ GetBufferImageGranularity(),
+ false, // explicitBlockSize
+ 0, // algorithm
+ 0.5f, // priority (0.5 is the default per Vulkan spec)
+ GetMemoryTypeMinAlignment(memTypeIndex), // minAllocationAlignment
+ VMA_NULL); // // pMemoryAllocateNext
+ // No need to call m_pBlockVectors[memTypeIndex][blockVectorTypeIndex]->CreateMinBlocks here,
+ // becase minBlockCount is 0.
+ }
}
}
@@ -16250,31 +13906,6 @@ VkResult VmaAllocator_T::Init(const VmaAllocatorCreateInfo* pCreateInfo)
{
VkResult res = VK_SUCCESS;
- if(pCreateInfo->pRecordSettings != VMA_NULL &&
- !VmaStrIsEmpty(pCreateInfo->pRecordSettings->pFilePath))
- {
-#if VMA_RECORDING_ENABLED
- m_pRecorder = vma_new(this, VmaRecorder)();
- res = m_pRecorder->Init(*pCreateInfo->pRecordSettings, m_UseMutex);
- if(res != VK_SUCCESS)
- {
- return res;
- }
- m_pRecorder->WriteConfiguration(
- m_PhysicalDeviceProperties,
- m_MemProps,
- m_VulkanApiVersion,
- m_UseKhrDedicatedAllocation,
- m_UseKhrBindMemory2,
- m_UseExtMemoryBudget,
- m_UseAmdDeviceCoherentMemory);
- m_pRecorder->RecordCreateAllocator(GetCurrentFrameIndex());
-#else
- VMA_ASSERT(0 && "VmaAllocatorCreateInfo::pRecordSettings used, but not supported due to VMA_RECORDING_ENABLED not defined to 1.");
- return VK_ERROR_FEATURE_NOT_PRESENT;
-#endif
- }
-
#if VMA_MEMORY_BUDGET
if(m_UseExtMemoryBudget)
{
@@ -16287,24 +13918,10 @@ VkResult VmaAllocator_T::Init(const VmaAllocatorCreateInfo* pCreateInfo)
VmaAllocator_T::~VmaAllocator_T()
{
-#if VMA_RECORDING_ENABLED
- if(m_pRecorder != VMA_NULL)
- {
- m_pRecorder->RecordDestroyAllocator(GetCurrentFrameIndex());
- vma_delete(this, m_pRecorder);
- }
-#endif
-
VMA_ASSERT(m_Pools.IsEmpty());
for(size_t memTypeIndex = GetMemoryTypeCount(); memTypeIndex--; )
{
- if(!m_DedicatedAllocations[memTypeIndex].IsEmpty())
- {
- VMA_ASSERT(0 && "Unfreed dedicated allocations found.");
- }
-
- vma_delete(this, m_pSmallBufferBlockVectors[memTypeIndex]);
vma_delete(this, m_pBlockVectors[memTypeIndex]);
}
}
@@ -16332,6 +13949,8 @@ void VmaAllocator_T::ImportVulkanFunctions(const VmaVulkanFunctions* pVulkanFunc
void VmaAllocator_T::ImportVulkanFunctions_Static()
{
// Vulkan 1.0
+ m_VulkanFunctions.vkGetInstanceProcAddr = (PFN_vkGetInstanceProcAddr)vkGetInstanceProcAddr;
+ m_VulkanFunctions.vkGetDeviceProcAddr = (PFN_vkGetDeviceProcAddr)vkGetDeviceProcAddr;
m_VulkanFunctions.vkGetPhysicalDeviceProperties = (PFN_vkGetPhysicalDeviceProperties)vkGetPhysicalDeviceProperties;
m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties = (PFN_vkGetPhysicalDeviceMemoryProperties)vkGetPhysicalDeviceMemoryProperties;
m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;
@@ -16361,9 +13980,17 @@ void VmaAllocator_T::ImportVulkanFunctions_Static()
m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR = (PFN_vkGetPhysicalDeviceMemoryProperties2)vkGetPhysicalDeviceMemoryProperties2;
}
#endif
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0))
+ {
+ m_VulkanFunctions.vkGetDeviceBufferMemoryRequirements = (PFN_vkGetDeviceBufferMemoryRequirements)vkGetDeviceBufferMemoryRequirements;
+ m_VulkanFunctions.vkGetDeviceImageMemoryRequirements = (PFN_vkGetDeviceImageMemoryRequirements)vkGetDeviceImageMemoryRequirements;
+ }
+#endif
}
-#endif // #if VMA_STATIC_VULKAN_FUNCTIONS == 1
+#endif // VMA_STATIC_VULKAN_FUNCTIONS == 1
void VmaAllocator_T::ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVulkanFunctions)
{
@@ -16372,6 +13999,8 @@ void VmaAllocator_T::ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVul
#define VMA_COPY_IF_NOT_NULL(funcName) \
if(pVulkanFunctions->funcName != VMA_NULL) m_VulkanFunctions.funcName = pVulkanFunctions->funcName;
+ VMA_COPY_IF_NOT_NULL(vkGetInstanceProcAddr);
+ VMA_COPY_IF_NOT_NULL(vkGetDeviceProcAddr);
VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceProperties);
VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties);
VMA_COPY_IF_NOT_NULL(vkAllocateMemory);
@@ -16404,6 +14033,11 @@ void VmaAllocator_T::ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVul
VMA_COPY_IF_NOT_NULL(vkGetPhysicalDeviceMemoryProperties2KHR);
#endif
+#if VMA_VULKAN_VERSION >= 1003000
+ VMA_COPY_IF_NOT_NULL(vkGetDeviceBufferMemoryRequirements);
+ VMA_COPY_IF_NOT_NULL(vkGetDeviceImageMemoryRequirements);
+#endif
+
#undef VMA_COPY_IF_NOT_NULL
}
@@ -16411,14 +14045,19 @@ void VmaAllocator_T::ImportVulkanFunctions_Custom(const VmaVulkanFunctions* pVul
void VmaAllocator_T::ImportVulkanFunctions_Dynamic()
{
+ VMA_ASSERT(m_VulkanFunctions.vkGetInstanceProcAddr && m_VulkanFunctions.vkGetDeviceProcAddr &&
+ "To use VMA_DYNAMIC_VULKAN_FUNCTIONS in new versions of VMA you now have to pass "
+ "VmaVulkanFunctions::vkGetInstanceProcAddr and vkGetDeviceProcAddr as VmaAllocatorCreateInfo::pVulkanFunctions. "
+ "Other members can be null.");
+
#define VMA_FETCH_INSTANCE_FUNC(memberName, functionPointerType, functionNameString) \
if(m_VulkanFunctions.memberName == VMA_NULL) \
m_VulkanFunctions.memberName = \
- (functionPointerType)vkGetInstanceProcAddr(m_hInstance, functionNameString);
+ (functionPointerType)m_VulkanFunctions.vkGetInstanceProcAddr(m_hInstance, functionNameString);
#define VMA_FETCH_DEVICE_FUNC(memberName, functionPointerType, functionNameString) \
if(m_VulkanFunctions.memberName == VMA_NULL) \
m_VulkanFunctions.memberName = \
- (functionPointerType)vkGetDeviceProcAddr(m_hDevice, functionNameString);
+ (functionPointerType)m_VulkanFunctions.vkGetDeviceProcAddr(m_hDevice, functionNameString);
VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceProperties, PFN_vkGetPhysicalDeviceProperties, "vkGetPhysicalDeviceProperties");
VMA_FETCH_INSTANCE_FUNC(vkGetPhysicalDeviceMemoryProperties, PFN_vkGetPhysicalDeviceMemoryProperties, "vkGetPhysicalDeviceMemoryProperties");
@@ -16472,11 +14111,19 @@ void VmaAllocator_T::ImportVulkanFunctions_Dynamic()
}
#endif // #if VMA_MEMORY_BUDGET
+#if VMA_VULKAN_VERSION >= 1003000
+ if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0))
+ {
+ VMA_FETCH_DEVICE_FUNC(vkGetDeviceBufferMemoryRequirements, PFN_vkGetDeviceBufferMemoryRequirements, "vkGetDeviceBufferMemoryRequirements");
+ VMA_FETCH_DEVICE_FUNC(vkGetDeviceImageMemoryRequirements, PFN_vkGetDeviceImageMemoryRequirements, "vkGetDeviceImageMemoryRequirements");
+ }
+#endif
+
#undef VMA_FETCH_DEVICE_FUNC
#undef VMA_FETCH_INSTANCE_FUNC
}
-#endif // #if VMA_DYNAMIC_VULKAN_FUNCTIONS == 1
+#endif // VMA_DYNAMIC_VULKAN_FUNCTIONS == 1
void VmaAllocator_T::ValidateVulkanFunctions()
{
@@ -16520,6 +14167,14 @@ void VmaAllocator_T::ValidateVulkanFunctions()
VMA_ASSERT(m_VulkanFunctions.vkGetPhysicalDeviceMemoryProperties2KHR != VMA_NULL);
}
#endif
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(m_VulkanApiVersion >= VK_MAKE_VERSION(1, 3, 0))
+ {
+ VMA_ASSERT(m_VulkanFunctions.vkGetDeviceBufferMemoryRequirements != VMA_NULL);
+ VMA_ASSERT(m_VulkanFunctions.vkGetDeviceImageMemoryRequirements != VMA_NULL);
+ }
+#endif
}
VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)
@@ -16531,15 +14186,18 @@ VkDeviceSize VmaAllocator_T::CalcPreferredBlockSize(uint32_t memTypeIndex)
}
VkResult VmaAllocator_T::AllocateMemoryOfType(
+ VmaPool pool,
VkDeviceSize size,
VkDeviceSize alignment,
- bool dedicatedAllocation,
+ bool dedicatedPreferred,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
const VmaAllocationCreateInfo& createInfo,
uint32_t memTypeIndex,
VmaSuballocationType suballocType,
+ VmaDedicatedAllocationList& dedicatedAllocations,
+ VmaBlockVector& blockVector,
size_t allocationCount,
VmaAllocation* pAllocations)
{
@@ -16547,165 +14205,175 @@ VkResult VmaAllocator_T::AllocateMemoryOfType(
VMA_DEBUG_LOG(" AllocateMemory: MemoryTypeIndex=%u, AllocationCount=%zu, Size=%llu", memTypeIndex, allocationCount, size);
VmaAllocationCreateInfo finalCreateInfo = createInfo;
+ VkResult res = CalcMemTypeParams(
+ finalCreateInfo,
+ memTypeIndex,
+ size,
+ allocationCount);
+ if(res != VK_SUCCESS)
+ return res;
- // If memory type is not HOST_VISIBLE, disable MAPPED.
- if((finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0 &&
- (m_MemProps.memoryTypes[memTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
+ if((finalCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
{
- finalCreateInfo.flags &= ~VMA_ALLOCATION_CREATE_MAPPED_BIT;
+ return AllocateDedicatedMemory(
+ pool,
+ size,
+ suballocType,
+ dedicatedAllocations,
+ memTypeIndex,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
+ (finalCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0,
+ finalCreateInfo.pUserData,
+ finalCreateInfo.priority,
+ dedicatedBuffer,
+ dedicatedImage,
+ dedicatedBufferImageUsage,
+ allocationCount,
+ pAllocations,
+ blockVector.GetAllocationNextPtr());
}
- // If memory is lazily allocated, it should be always dedicated.
- if(finalCreateInfo.usage == VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED)
+ else
{
- finalCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
- }
+ const bool canAllocateDedicated =
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0 &&
+ (pool == VK_NULL_HANDLE || !blockVector.HasExplicitBlockSize());
- bool isSmallBuffer = dedicatedBuffer != VK_NULL_HANDLE && size <= 4096; // TODO
- VmaBlockVector* const blockVector = isSmallBuffer ? m_pSmallBufferBlockVectors[memTypeIndex] : m_pBlockVectors[memTypeIndex];
- VMA_ASSERT(blockVector);
+ if(canAllocateDedicated)
+ {
+ // Heuristics: Allocate dedicated memory if requested size if greater than half of preferred block size.
+ if(size > blockVector.GetPreferredBlockSize() / 2)
+ {
+ dedicatedPreferred = true;
+ }
+ // Protection against creating each allocation as dedicated when we reach or exceed heap size/budget,
+ // which can quickly deplete maxMemoryAllocationCount: Don't prefer dedicated allocations when above
+ // 3/4 of the maximum allocation count.
+ if(m_DeviceMemoryCount.load() > m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount * 3 / 4)
+ {
+ dedicatedPreferred = false;
+ }
- const VkDeviceSize preferredBlockSize = blockVector->GetPreferredBlockSize();
- bool preferDedicatedMemory =
- VMA_DEBUG_ALWAYS_DEDICATED_MEMORY ||
- dedicatedAllocation ||
- // Heuristics: Allocate dedicated memory if requested size if greater than half of preferred block size.
- size > preferredBlockSize / 2;
+ if(dedicatedPreferred)
+ {
+ res = AllocateDedicatedMemory(
+ pool,
+ size,
+ suballocType,
+ dedicatedAllocations,
+ memTypeIndex,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
+ (finalCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0,
+ finalCreateInfo.pUserData,
+ finalCreateInfo.priority,
+ dedicatedBuffer,
+ dedicatedImage,
+ dedicatedBufferImageUsage,
+ allocationCount,
+ pAllocations,
+ blockVector.GetAllocationNextPtr());
+ if(res == VK_SUCCESS)
+ {
+ // Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.
+ VMA_DEBUG_LOG(" Allocated as DedicatedMemory");
+ return VK_SUCCESS;
+ }
+ }
+ }
- if(preferDedicatedMemory &&
- (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) == 0 &&
- finalCreateInfo.pool == VK_NULL_HANDLE)
- {
- finalCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
- }
+ res = blockVector.Allocate(
+ size,
+ alignment,
+ finalCreateInfo,
+ suballocType,
+ allocationCount,
+ pAllocations);
+ if(res == VK_SUCCESS)
+ return VK_SUCCESS;
- if((finalCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
- {
- if((finalCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0)
- {
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
- else
+ // Try dedicated memory.
+ if(canAllocateDedicated && !dedicatedPreferred)
{
- return AllocateDedicatedMemory(
+ res = AllocateDedicatedMemory(
+ pool,
size,
suballocType,
+ dedicatedAllocations,
memTypeIndex,
- (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
(finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
+ (finalCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0,
+ (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_CAN_ALIAS_BIT) != 0,
finalCreateInfo.pUserData,
finalCreateInfo.priority,
dedicatedBuffer,
- dedicatedBufferUsage,
dedicatedImage,
+ dedicatedBufferImageUsage,
allocationCount,
- pAllocations);
- }
- }
- else
- {
- VkResult res = blockVector->Allocate(
- m_CurrentFrameIndex.load(),
- size,
- alignment,
- finalCreateInfo,
- suballocType,
- allocationCount,
- pAllocations);
- if(res == VK_SUCCESS)
- {
- return res;
- }
-
- // 5. Try dedicated memory.
- if((finalCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0)
- {
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
-
- // Protection against creating each allocation as dedicated when we reach or exceed heap size/budget,
- // which can quickly deplete maxMemoryAllocationCount: Don't try dedicated allocations when above
- // 3/4 of the maximum allocation count.
- if(m_DeviceMemoryCount.load() > m_PhysicalDeviceProperties.limits.maxMemoryAllocationCount * 3 / 4)
- {
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
-
- res = AllocateDedicatedMemory(
- size,
- suballocType,
- memTypeIndex,
- (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT) != 0,
- (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0,
- (finalCreateInfo.flags & VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT) != 0,
- finalCreateInfo.pUserData,
- finalCreateInfo.priority,
- dedicatedBuffer,
- dedicatedBufferUsage,
- dedicatedImage,
- allocationCount,
- pAllocations);
- if(res == VK_SUCCESS)
- {
- // Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.
- VMA_DEBUG_LOG(" Allocated as DedicatedMemory");
- return VK_SUCCESS;
- }
- else
- {
- // Everything failed: Return error code.
- VMA_DEBUG_LOG(" vkAllocateMemory FAILED");
- return res;
+ pAllocations,
+ blockVector.GetAllocationNextPtr());
+ if(res == VK_SUCCESS)
+ {
+ // Succeeded: AllocateDedicatedMemory function already filld pMemory, nothing more to do here.
+ VMA_DEBUG_LOG(" Allocated as DedicatedMemory");
+ return VK_SUCCESS;
+ }
}
+ // Everything failed: Return error code.
+ VMA_DEBUG_LOG(" vkAllocateMemory FAILED");
+ return res;
}
}
VkResult VmaAllocator_T::AllocateDedicatedMemory(
+ VmaPool pool,
VkDeviceSize size,
VmaSuballocationType suballocType,
+ VmaDedicatedAllocationList& dedicatedAllocations,
uint32_t memTypeIndex,
- bool withinBudget,
bool map,
bool isUserDataString,
+ bool isMappingAllowed,
+ bool canAliasMemory,
void* pUserData,
float priority,
VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
size_t allocationCount,
- VmaAllocation* pAllocations)
+ VmaAllocation* pAllocations,
+ const void* pNextChain)
{
VMA_ASSERT(allocationCount > 0 && pAllocations);
- if(withinBudget)
- {
- const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
- VmaBudget heapBudget = {};
- GetBudget(&heapBudget, heapIndex, 1);
- if(heapBudget.usage + size * allocationCount > heapBudget.budget)
- {
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
- }
-
VkMemoryAllocateInfo allocInfo = { VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO };
allocInfo.memoryTypeIndex = memTypeIndex;
allocInfo.allocationSize = size;
+ allocInfo.pNext = pNextChain;
#if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000
VkMemoryDedicatedAllocateInfoKHR dedicatedAllocInfo = { VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO_KHR };
- if(m_UseKhrDedicatedAllocation || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0))
+ if(!canAliasMemory)
{
- if(dedicatedBuffer != VK_NULL_HANDLE)
- {
- VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE);
- dedicatedAllocInfo.buffer = dedicatedBuffer;
- VmaPnextChainPushFront(&allocInfo, &dedicatedAllocInfo);
- }
- else if(dedicatedImage != VK_NULL_HANDLE)
+ if(m_UseKhrDedicatedAllocation || m_VulkanApiVersion >= VK_MAKE_VERSION(1, 1, 0))
{
- dedicatedAllocInfo.image = dedicatedImage;
- VmaPnextChainPushFront(&allocInfo, &dedicatedAllocInfo);
+ if(dedicatedBuffer != VK_NULL_HANDLE)
+ {
+ VMA_ASSERT(dedicatedImage == VK_NULL_HANDLE);
+ dedicatedAllocInfo.buffer = dedicatedBuffer;
+ VmaPnextChainPushFront(&allocInfo, &dedicatedAllocInfo);
+ }
+ else if(dedicatedImage != VK_NULL_HANDLE)
+ {
+ dedicatedAllocInfo.image = dedicatedImage;
+ VmaPnextChainPushFront(&allocInfo, &dedicatedAllocInfo);
+ }
}
}
#endif // #if VMA_DEDICATED_ALLOCATION || VMA_VULKAN_VERSION >= 1001000
@@ -16717,8 +14385,8 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
bool canContainBufferWithDeviceAddress = true;
if(dedicatedBuffer != VK_NULL_HANDLE)
{
- canContainBufferWithDeviceAddress = dedicatedBufferUsage == UINT32_MAX || // Usage flags unknown
- (dedicatedBufferUsage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0;
+ canContainBufferWithDeviceAddress = dedicatedBufferImageUsage == UINT32_MAX || // Usage flags unknown
+ (dedicatedBufferImageUsage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_EXT) != 0;
}
else if(dedicatedImage != VK_NULL_HANDLE)
{
@@ -16756,12 +14424,14 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
for(allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
{
res = AllocateDedicatedMemoryPage(
+ pool,
size,
suballocType,
memTypeIndex,
allocInfo,
map,
isUserDataString,
+ isMappingAllowed,
pUserData,
pAllocations + allocIndex);
if(res != VK_SUCCESS)
@@ -16772,16 +14442,10 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
if(res == VK_SUCCESS)
{
- // Register them in m_DedicatedAllocations.
+ for (allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
{
- VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);
- DedicatedAllocationLinkedList& dedicatedAllocations = m_DedicatedAllocations[memTypeIndex];
- for(allocIndex = 0; allocIndex < allocationCount; ++allocIndex)
- {
- dedicatedAllocations.PushBack(pAllocations[allocIndex]);
- }
+ dedicatedAllocations.Register(pAllocations[allocIndex]);
}
-
VMA_DEBUG_LOG(" Allocated DedicatedMemory Count=%zu, MemoryTypeIndex=#%u", allocationCount, memTypeIndex);
}
else
@@ -16804,7 +14468,6 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
FreeVulkanMemory(memTypeIndex, currAlloc->GetSize(), hMemory);
m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), currAlloc->GetSize());
- currAlloc->SetUserData(this, VMA_NULL);
m_AllocationObjectAllocator.Free(currAlloc);
}
@@ -16815,12 +14478,14 @@ VkResult VmaAllocator_T::AllocateDedicatedMemory(
}
VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(
+ VmaPool pool,
VkDeviceSize size,
VmaSuballocationType suballocType,
uint32_t memTypeIndex,
const VkMemoryAllocateInfo& allocInfo,
bool map,
bool isUserDataString,
+ bool isMappingAllowed,
void* pUserData,
VmaAllocation* pAllocation)
{
@@ -16850,8 +14515,8 @@ VkResult VmaAllocator_T::AllocateDedicatedMemoryPage(
}
}
- *pAllocation = m_AllocationObjectAllocator.Allocate(m_CurrentFrameIndex.load(), isUserDataString);
- (*pAllocation)->InitDedicatedAllocation(memTypeIndex, hMemory, suballocType, pMappedData, size);
+ *pAllocation = m_AllocationObjectAllocator.Allocate(isUserDataString, isMappingAllowed);
+ (*pAllocation)->InitDedicatedAllocation(pool, memTypeIndex, hMemory, suballocType, pMappedData, size);
(*pAllocation)->SetUserData(this, pUserData);
m_Budget.AddAllocation(MemoryTypeIndexToHeapIndex(memTypeIndex), size);
if(VMA_DEBUG_INITIALIZE_ALLOCATIONS)
@@ -16926,74 +14591,200 @@ void VmaAllocator_T::GetImageMemoryRequirements(
}
}
-VkResult VmaAllocator_T::AllocateMemory(
- const VkMemoryRequirements& vkMemReq,
- bool requiresDedicatedAllocation,
- bool prefersDedicatedAllocation,
- VkBuffer dedicatedBuffer,
- VkBufferUsageFlags dedicatedBufferUsage,
- VkImage dedicatedImage,
- const VmaAllocationCreateInfo& createInfo,
- VmaSuballocationType suballocType,
- size_t allocationCount,
- VmaAllocation* pAllocations)
+VkResult VmaAllocator_T::FindMemoryTypeIndex(
+ uint32_t memoryTypeBits,
+ const VmaAllocationCreateInfo* pAllocationCreateInfo,
+ VkFlags bufImgUsage,
+ uint32_t* pMemoryTypeIndex) const
{
- memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);
+ memoryTypeBits &= GetGlobalMemoryTypeBits();
- VMA_ASSERT(VmaIsPow2(vkMemReq.alignment));
+ if(pAllocationCreateInfo->memoryTypeBits != 0)
+ {
+ memoryTypeBits &= pAllocationCreateInfo->memoryTypeBits;
+ }
- if(vkMemReq.size == 0)
+ VkMemoryPropertyFlags requiredFlags = 0, preferredFlags = 0, notPreferredFlags = 0;
+ if(!FindMemoryPreferences(
+ IsIntegratedGpu(),
+ *pAllocationCreateInfo,
+ bufImgUsage,
+ requiredFlags, preferredFlags, notPreferredFlags))
{
- return VK_ERROR_VALIDATION_FAILED_EXT;
+ return VK_ERROR_FEATURE_NOT_PRESENT;
}
- if((createInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 &&
- (createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0)
+
+ *pMemoryTypeIndex = UINT32_MAX;
+ uint32_t minCost = UINT32_MAX;
+ for(uint32_t memTypeIndex = 0, memTypeBit = 1;
+ memTypeIndex < GetMemoryTypeCount();
+ ++memTypeIndex, memTypeBit <<= 1)
{
- VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT together with VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT makes no sense.");
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ // This memory type is acceptable according to memoryTypeBits bitmask.
+ if((memTypeBit & memoryTypeBits) != 0)
+ {
+ const VkMemoryPropertyFlags currFlags =
+ m_MemProps.memoryTypes[memTypeIndex].propertyFlags;
+ // This memory type contains requiredFlags.
+ if((requiredFlags & ~currFlags) == 0)
+ {
+ // Calculate cost as number of bits from preferredFlags not present in this memory type.
+ uint32_t currCost = VmaCountBitsSet(preferredFlags & ~currFlags) +
+ VmaCountBitsSet(currFlags & notPreferredFlags);
+ // Remember memory type with lowest cost.
+ if(currCost < minCost)
+ {
+ *pMemoryTypeIndex = memTypeIndex;
+ if(currCost == 0)
+ {
+ return VK_SUCCESS;
+ }
+ minCost = currCost;
+ }
+ }
+ }
}
- if((createInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0 &&
- (createInfo.flags & VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT) != 0)
+ return (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;
+}
+
+VkResult VmaAllocator_T::CalcMemTypeParams(
+ VmaAllocationCreateInfo& inoutCreateInfo,
+ uint32_t memTypeIndex,
+ VkDeviceSize size,
+ size_t allocationCount)
+{
+ // If memory type is not HOST_VISIBLE, disable MAPPED.
+ if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0 &&
+ (m_MemProps.memoryTypes[memTypeIndex].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
{
- VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_MAPPED_BIT together with VMA_ALLOCATION_CREATE_CAN_BECOME_LOST_BIT is invalid.");
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ inoutCreateInfo.flags &= ~VMA_ALLOCATION_CREATE_MAPPED_BIT;
}
- if(requiresDedicatedAllocation)
+
+ if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 &&
+ (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT) != 0)
{
- if((createInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0)
+ const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
+ VmaBudget heapBudget = {};
+ GetHeapBudgets(&heapBudget, heapIndex, 1);
+ if(heapBudget.usage + size * allocationCount > heapBudget.budget)
{
- VMA_ASSERT(0 && "VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT specified while dedicated allocation is required.");
return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
- if(createInfo.pool != VK_NULL_HANDLE)
+ }
+ return VK_SUCCESS;
+}
+
+VkResult VmaAllocator_T::CalcAllocationParams(
+ VmaAllocationCreateInfo& inoutCreateInfo,
+ bool dedicatedRequired,
+ bool dedicatedPreferred)
+{
+ VMA_ASSERT((inoutCreateInfo.flags &
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) !=
+ (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT) &&
+ "Specifying both flags VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT and VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT is incorrect.");
+ VMA_ASSERT((((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT) == 0 ||
+ (inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0)) &&
+ "Specifying VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT requires also VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.");
+ if(inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO || inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE || inoutCreateInfo.usage == VMA_MEMORY_USAGE_AUTO_PREFER_HOST)
+ {
+ if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0)
{
- VMA_ASSERT(0 && "Pool specified while dedicated allocation is required.");
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ VMA_ASSERT((inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) != 0 &&
+ "When using VMA_ALLOCATION_CREATE_MAPPED_BIT and usage = VMA_MEMORY_USAGE_AUTO*, you must also specify VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.");
}
}
- if((createInfo.pool != VK_NULL_HANDLE) &&
- ((createInfo.flags & (VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT)) != 0))
+
+ // If memory is lazily allocated, it should be always dedicated.
+ if(dedicatedRequired ||
+ inoutCreateInfo.usage == VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED)
{
- VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT when pool != null is invalid.");
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
+ inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
}
- if(createInfo.pool != VK_NULL_HANDLE)
+ if(inoutCreateInfo.pool != VK_NULL_HANDLE)
{
- VmaAllocationCreateInfo createInfoForPool = createInfo;
- // If memory type is not HOST_VISIBLE, disable MAPPED.
- if((createInfoForPool.flags & VMA_ALLOCATION_CREATE_MAPPED_BIT) != 0 &&
- (m_MemProps.memoryTypes[createInfo.pool->m_BlockVector.GetMemoryTypeIndex()].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
+ if(inoutCreateInfo.pool->m_BlockVector.HasExplicitBlockSize() &&
+ (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0)
{
- createInfoForPool.flags &= ~VMA_ALLOCATION_CREATE_MAPPED_BIT;
+ VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT while current custom pool doesn't support dedicated allocations.");
+ return VK_ERROR_FEATURE_NOT_PRESENT;
}
+ inoutCreateInfo.priority = inoutCreateInfo.pool->m_BlockVector.GetPriority();
+ }
- return createInfo.pool->m_BlockVector.Allocate(
- m_CurrentFrameIndex.load(),
+ if((inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT) != 0 &&
+ (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0)
+ {
+ VMA_ASSERT(0 && "Specifying VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT together with VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT makes no sense.");
+ return VK_ERROR_FEATURE_NOT_PRESENT;
+ }
+
+ if(VMA_DEBUG_ALWAYS_DEDICATED_MEMORY &&
+ (inoutCreateInfo.flags & VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT) != 0)
+ {
+ inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
+ }
+
+ // Non-auto USAGE values imply HOST_ACCESS flags.
+ // And so does VMA_MEMORY_USAGE_UNKNOWN because it is used with custom pools.
+ // Which specific flag is used doesn't matter. They change things only when used with VMA_MEMORY_USAGE_AUTO*.
+ // Otherwise they just protect from assert on mapping.
+ if(inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO &&
+ inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE &&
+ inoutCreateInfo.usage != VMA_MEMORY_USAGE_AUTO_PREFER_HOST)
+ {
+ if((inoutCreateInfo.flags & (VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT | VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT)) == 0)
+ {
+ inoutCreateInfo.flags |= VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT;
+ }
+ }
+
+ return VK_SUCCESS;
+}
+
+VkResult VmaAllocator_T::AllocateMemory(
+ const VkMemoryRequirements& vkMemReq,
+ bool requiresDedicatedAllocation,
+ bool prefersDedicatedAllocation,
+ VkBuffer dedicatedBuffer,
+ VkImage dedicatedImage,
+ VkFlags dedicatedBufferImageUsage,
+ const VmaAllocationCreateInfo& createInfo,
+ VmaSuballocationType suballocType,
+ size_t allocationCount,
+ VmaAllocation* pAllocations)
+{
+ memset(pAllocations, 0, sizeof(VmaAllocation) * allocationCount);
+
+ VMA_ASSERT(VmaIsPow2(vkMemReq.alignment));
+
+ if(vkMemReq.size == 0)
+ {
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+
+ VmaAllocationCreateInfo createInfoFinal = createInfo;
+ VkResult res = CalcAllocationParams(createInfoFinal, requiresDedicatedAllocation, prefersDedicatedAllocation);
+ if(res != VK_SUCCESS)
+ return res;
+
+ if(createInfoFinal.pool != VK_NULL_HANDLE)
+ {
+ VmaBlockVector& blockVector = createInfoFinal.pool->m_BlockVector;
+ return AllocateMemoryOfType(
+ createInfoFinal.pool,
vkMemReq.size,
vkMemReq.alignment,
- createInfoForPool,
+ prefersDedicatedAllocation,
+ dedicatedBuffer,
+ dedicatedImage,
+ dedicatedBufferImageUsage,
+ createInfoFinal,
+ blockVector.GetMemoryTypeIndex(),
suballocType,
+ createInfoFinal.pool->m_DedicatedAllocations,
+ blockVector,
allocationCount,
pAllocations);
}
@@ -17002,68 +14793,42 @@ VkResult VmaAllocator_T::AllocateMemory(
// Bit mask of memory Vulkan types acceptable for this allocation.
uint32_t memoryTypeBits = vkMemReq.memoryTypeBits;
uint32_t memTypeIndex = UINT32_MAX;
- VkResult res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfo, &memTypeIndex);
- if(res == VK_SUCCESS)
+ res = FindMemoryTypeIndex(memoryTypeBits, &createInfoFinal, dedicatedBufferImageUsage, &memTypeIndex);
+ // Can't find any single memory type matching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
+ if(res != VK_SUCCESS)
+ return res;
+ do
{
+ VmaBlockVector* blockVector = m_pBlockVectors[memTypeIndex];
+ VMA_ASSERT(blockVector && "Trying to use unsupported memory type!");
res = AllocateMemoryOfType(
+ VK_NULL_HANDLE,
vkMemReq.size,
vkMemReq.alignment,
requiresDedicatedAllocation || prefersDedicatedAllocation,
dedicatedBuffer,
- dedicatedBufferUsage,
dedicatedImage,
- createInfo,
+ dedicatedBufferImageUsage,
+ createInfoFinal,
memTypeIndex,
suballocType,
+ m_DedicatedAllocations[memTypeIndex],
+ *blockVector,
allocationCount,
pAllocations);
- // Succeeded on first try.
+ // Allocation succeeded
if(res == VK_SUCCESS)
- {
- return res;
- }
- // Allocation from this memory type failed. Try other compatible memory types.
- else
- {
- for(;;)
- {
- // Remove old memTypeIndex from list of possibilities.
- memoryTypeBits &= ~(1u << memTypeIndex);
- // Find alternative memTypeIndex.
- res = vmaFindMemoryTypeIndex(this, memoryTypeBits, &createInfo, &memTypeIndex);
- if(res == VK_SUCCESS)
- {
- res = AllocateMemoryOfType(
- vkMemReq.size,
- vkMemReq.alignment,
- requiresDedicatedAllocation || prefersDedicatedAllocation,
- dedicatedBuffer,
- dedicatedBufferUsage,
- dedicatedImage,
- createInfo,
- memTypeIndex,
- suballocType,
- allocationCount,
- pAllocations);
- // Allocation from this alternative memory type succeeded.
- if(res == VK_SUCCESS)
- {
- return res;
- }
- // else: Allocation from this memory type failed. Try next one - next loop iteration.
- }
- // No other matching memory type index could be found.
- else
- {
- // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
- return VK_ERROR_OUT_OF_DEVICE_MEMORY;
- }
- }
- }
- }
- // Can't find any single memory type maching requirements. res is VK_ERROR_FEATURE_NOT_PRESENT.
- else
- return res;
+ return VK_SUCCESS;
+
+ // Remove old memTypeIndex from list of possibilities.
+ memoryTypeBits &= ~(1u << memTypeIndex);
+ // Find alternative memTypeIndex.
+ res = FindMemoryTypeIndex(memoryTypeBits, &createInfoFinal, dedicatedBufferImageUsage, &memTypeIndex);
+ } while(res == VK_SUCCESS);
+
+ // No other matching memory type index could be found.
+ // Not returning res, which is VK_ERROR_FEATURE_NOT_PRESENT, because we already failed to allocate once.
+ return VK_ERROR_OUT_OF_DEVICE_MEMORY;
}
}
@@ -17079,65 +14844,55 @@ void VmaAllocator_T::FreeMemory(
if(allocation != VK_NULL_HANDLE)
{
- if(TouchAllocation(allocation))
+ if(VMA_DEBUG_INITIALIZE_ALLOCATIONS)
{
- if(VMA_DEBUG_INITIALIZE_ALLOCATIONS)
- {
- FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED);
- }
+ FillAllocation(allocation, VMA_ALLOCATION_FILL_PATTERN_DESTROYED);
+ }
- switch(allocation->GetType())
+ switch(allocation->GetType())
+ {
+ case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
{
- case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
+ VmaBlockVector* pBlockVector = VMA_NULL;
+ VmaPool hPool = allocation->GetParentPool();
+ if(hPool != VK_NULL_HANDLE)
{
- VmaBlockVector* pBlockVector = VMA_NULL;
- VmaPool hPool = allocation->GetBlock()->GetParentPool();
- if(hPool != VK_NULL_HANDLE)
- {
- pBlockVector = &hPool->m_BlockVector;
- }
- else
- {
- pBlockVector = allocation->GetBlock()->GetParentBlockVector();
- }
- pBlockVector->Free(allocation);
+ pBlockVector = &hPool->m_BlockVector;
}
- break;
- case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:
- FreeDedicatedMemory(allocation);
- break;
- default:
- VMA_ASSERT(0);
+ else
+ {
+ const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
+ pBlockVector = m_pBlockVectors[memTypeIndex];
+ VMA_ASSERT(pBlockVector && "Trying to free memory of unsupported type!");
+ }
+ pBlockVector->Free(allocation);
}
+ break;
+ case VmaAllocation_T::ALLOCATION_TYPE_DEDICATED:
+ FreeDedicatedMemory(allocation);
+ break;
+ default:
+ VMA_ASSERT(0);
}
-
- // Do this regardless of whether the allocation is lost. Lost allocations still account to Budget.AllocationBytes.
- m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize());
- allocation->SetUserData(this, VMA_NULL);
- m_AllocationObjectAllocator.Free(allocation);
}
}
}
-void VmaAllocator_T::CalculateStats(VmaStats* pStats)
+void VmaAllocator_T::CalculateStatistics(VmaTotalStatistics* pStats)
{
// Initialize.
- InitStatInfo(pStats->total);
- for(size_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i)
- InitStatInfo(pStats->memoryType[i]);
- for(size_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i)
- InitStatInfo(pStats->memoryHeap[i]);
+ VmaClearDetailedStatistics(pStats->total);
+ for(uint32_t i = 0; i < VK_MAX_MEMORY_TYPES; ++i)
+ VmaClearDetailedStatistics(pStats->memoryType[i]);
+ for(uint32_t i = 0; i < VK_MAX_MEMORY_HEAPS; ++i)
+ VmaClearDetailedStatistics(pStats->memoryHeap[i]);
// Process default pools.
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
VmaBlockVector* const pBlockVector = m_pBlockVectors[memTypeIndex];
- VMA_ASSERT(pBlockVector);
- pBlockVector->AddStats(pStats);
-
- VmaBlockVector* const pSmallBufferBlockVector = m_pSmallBufferBlockVectors[memTypeIndex];
- VMA_ASSERT(pSmallBufferBlockVector);
- pSmallBufferBlockVector->AddStats(pStats);
+ if (pBlockVector != VMA_NULL)
+ pBlockVector->AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
}
// Process custom pools.
@@ -17145,36 +14900,37 @@ void VmaAllocator_T::CalculateStats(VmaStats* pStats)
VmaMutexLockRead lock(m_PoolsMutex, m_UseMutex);
for(VmaPool pool = m_Pools.Front(); pool != VMA_NULL; pool = m_Pools.GetNext(pool))
{
- pool->m_BlockVector.AddStats(pStats);
+ VmaBlockVector& blockVector = pool->m_BlockVector;
+ const uint32_t memTypeIndex = blockVector.GetMemoryTypeIndex();
+ blockVector.AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
+ pool->m_DedicatedAllocations.AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
}
}
// Process dedicated allocations.
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
- const uint32_t memHeapIndex = MemoryTypeIndexToHeapIndex(memTypeIndex);
- VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);
- DedicatedAllocationLinkedList& dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];
- for(VmaAllocation alloc = dedicatedAllocList.Front();
- alloc != VMA_NULL; alloc = dedicatedAllocList.GetNext(alloc))
- {
- VmaStatInfo allocationStatInfo;
- alloc->DedicatedAllocCalcStatsInfo(allocationStatInfo);
- VmaAddStatInfo(pStats->total, allocationStatInfo);
- VmaAddStatInfo(pStats->memoryType[memTypeIndex], allocationStatInfo);
- VmaAddStatInfo(pStats->memoryHeap[memHeapIndex], allocationStatInfo);
- }
+ m_DedicatedAllocations[memTypeIndex].AddDetailedStatistics(pStats->memoryType[memTypeIndex]);
+ }
+
+ // Sum from memory types to memory heaps.
+ for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
+ {
+ const uint32_t memHeapIndex = m_MemProps.memoryTypes[memTypeIndex].heapIndex;
+ VmaAddDetailedStatistics(pStats->memoryHeap[memHeapIndex], pStats->memoryType[memTypeIndex]);
}
- // Postprocess.
- VmaPostprocessCalcStatInfo(pStats->total);
- for(size_t i = 0; i < GetMemoryTypeCount(); ++i)
- VmaPostprocessCalcStatInfo(pStats->memoryType[i]);
- for(size_t i = 0; i < GetMemoryHeapCount(); ++i)
- VmaPostprocessCalcStatInfo(pStats->memoryHeap[i]);
+ // Sum from memory heaps to total.
+ for(uint32_t memHeapIndex = 0; memHeapIndex < GetMemoryHeapCount(); ++memHeapIndex)
+ VmaAddDetailedStatistics(pStats->total, pStats->memoryHeap[memHeapIndex]);
+
+ VMA_ASSERT(pStats->total.statistics.allocationCount == 0 ||
+ pStats->total.allocationSizeMax >= pStats->total.allocationSizeMin);
+ VMA_ASSERT(pStats->total.unusedRangeCount == 0 ||
+ pStats->total.unusedRangeSizeMax >= pStats->total.unusedRangeSizeMin);
}
-void VmaAllocator_T::GetBudget(VmaBudget* outBudget, uint32_t firstHeap, uint32_t heapCount)
+void VmaAllocator_T::GetHeapBudgets(VmaBudget* outBudgets, uint32_t firstHeap, uint32_t heapCount)
{
#if VMA_MEMORY_BUDGET
if(m_UseExtMemoryBudget)
@@ -17182,225 +14938,62 @@ void VmaAllocator_T::GetBudget(VmaBudget* outBudget, uint32_t firstHeap, uint32_
if(m_Budget.m_OperationsSinceBudgetFetch < 30)
{
VmaMutexLockRead lockRead(m_Budget.m_BudgetMutex, m_UseMutex);
- for(uint32_t i = 0; i < heapCount; ++i, ++outBudget)
+ for(uint32_t i = 0; i < heapCount; ++i, ++outBudgets)
{
const uint32_t heapIndex = firstHeap + i;
- outBudget->blockBytes = m_Budget.m_BlockBytes[heapIndex];
- outBudget->allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
+ outBudgets->statistics.blockCount = m_Budget.m_BlockCount[heapIndex];
+ outBudgets->statistics.allocationCount = m_Budget.m_AllocationCount[heapIndex];
+ outBudgets->statistics.blockBytes = m_Budget.m_BlockBytes[heapIndex];
+ outBudgets->statistics.allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
- if(m_Budget.m_VulkanUsage[heapIndex] + outBudget->blockBytes > m_Budget.m_BlockBytesAtBudgetFetch[heapIndex])
+ if(m_Budget.m_VulkanUsage[heapIndex] + outBudgets->statistics.blockBytes > m_Budget.m_BlockBytesAtBudgetFetch[heapIndex])
{
- outBudget->usage = m_Budget.m_VulkanUsage[heapIndex] +
- outBudget->blockBytes - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];
+ outBudgets->usage = m_Budget.m_VulkanUsage[heapIndex] +
+ outBudgets->statistics.blockBytes - m_Budget.m_BlockBytesAtBudgetFetch[heapIndex];
}
else
{
- outBudget->usage = 0;
+ outBudgets->usage = 0;
}
// Have to take MIN with heap size because explicit HeapSizeLimit is included in it.
- outBudget->budget = VMA_MIN(
+ outBudgets->budget = VMA_MIN(
m_Budget.m_VulkanBudget[heapIndex], m_MemProps.memoryHeaps[heapIndex].size);
}
}
else
{
UpdateVulkanBudget(); // Outside of mutex lock
- GetBudget(outBudget, firstHeap, heapCount); // Recursion
+ GetHeapBudgets(outBudgets, firstHeap, heapCount); // Recursion
}
}
else
#endif
{
- for(uint32_t i = 0; i < heapCount; ++i, ++outBudget)
+ for(uint32_t i = 0; i < heapCount; ++i, ++outBudgets)
{
const uint32_t heapIndex = firstHeap + i;
- outBudget->blockBytes = m_Budget.m_BlockBytes[heapIndex];
- outBudget->allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
+ outBudgets->statistics.blockCount = m_Budget.m_BlockCount[heapIndex];
+ outBudgets->statistics.allocationCount = m_Budget.m_AllocationCount[heapIndex];
+ outBudgets->statistics.blockBytes = m_Budget.m_BlockBytes[heapIndex];
+ outBudgets->statistics.allocationBytes = m_Budget.m_AllocationBytes[heapIndex];
- outBudget->usage = outBudget->blockBytes;
- outBudget->budget = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; // 80% heuristics.
+ outBudgets->usage = outBudgets->statistics.blockBytes;
+ outBudgets->budget = m_MemProps.memoryHeaps[heapIndex].size * 8 / 10; // 80% heuristics.
}
}
}
-static const uint32_t VMA_VENDOR_ID_AMD = 4098;
-
-VkResult VmaAllocator_T::DefragmentationBegin(
- const VmaDefragmentationInfo2& info,
- VmaDefragmentationStats* pStats,
- VmaDefragmentationContext* pContext)
-{
- if(info.pAllocationsChanged != VMA_NULL)
- {
- memset(info.pAllocationsChanged, 0, info.allocationCount * sizeof(VkBool32));
- }
-
- *pContext = vma_new(this, VmaDefragmentationContext_T)(
- this, m_CurrentFrameIndex.load(), info.flags, pStats);
-
- (*pContext)->AddPools(info.poolCount, info.pPools);
- (*pContext)->AddAllocations(
- info.allocationCount, info.pAllocations, info.pAllocationsChanged);
-
- VkResult res = (*pContext)->Defragment(
- info.maxCpuBytesToMove, info.maxCpuAllocationsToMove,
- info.maxGpuBytesToMove, info.maxGpuAllocationsToMove,
- info.commandBuffer, pStats, info.flags);
-
- if(res != VK_NOT_READY)
- {
- vma_delete(this, *pContext);
- *pContext = VMA_NULL;
- }
-
- return res;
-}
-
-VkResult VmaAllocator_T::DefragmentationEnd(
- VmaDefragmentationContext context)
-{
- vma_delete(this, context);
- return VK_SUCCESS;
-}
-
-VkResult VmaAllocator_T::DefragmentationPassBegin(
- VmaDefragmentationPassInfo* pInfo,
- VmaDefragmentationContext context)
-{
- return context->DefragmentPassBegin(pInfo);
-}
-VkResult VmaAllocator_T::DefragmentationPassEnd(
- VmaDefragmentationContext context)
-{
- return context->DefragmentPassEnd();
-
-}
-
void VmaAllocator_T::GetAllocationInfo(VmaAllocation hAllocation, VmaAllocationInfo* pAllocationInfo)
{
- if(hAllocation->CanBecomeLost())
- {
- /*
- Warning: This is a carefully designed algorithm.
- Do not modify unless you really know what you're doing :)
- */
- const uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();
- uint32_t localLastUseFrameIndex = hAllocation->GetLastUseFrameIndex();
- for(;;)
- {
- if(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)
- {
- pAllocationInfo->memoryType = UINT32_MAX;
- pAllocationInfo->deviceMemory = VK_NULL_HANDLE;
- pAllocationInfo->offset = 0;
- pAllocationInfo->size = hAllocation->GetSize();
- pAllocationInfo->pMappedData = VMA_NULL;
- pAllocationInfo->pUserData = hAllocation->GetUserData();
- return;
- }
- else if(localLastUseFrameIndex == localCurrFrameIndex)
- {
- pAllocationInfo->memoryType = hAllocation->GetMemoryTypeIndex();
- pAllocationInfo->deviceMemory = hAllocation->GetMemory();
- pAllocationInfo->offset = hAllocation->GetOffset();
- pAllocationInfo->size = hAllocation->GetSize();
- pAllocationInfo->pMappedData = VMA_NULL;
- pAllocationInfo->pUserData = hAllocation->GetUserData();
- return;
- }
- else // Last use time earlier than current time.
- {
- if(hAllocation->CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))
- {
- localLastUseFrameIndex = localCurrFrameIndex;
- }
- }
- }
- }
- else
- {
-#if VMA_STATS_STRING_ENABLED
- uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();
- uint32_t localLastUseFrameIndex = hAllocation->GetLastUseFrameIndex();
- for(;;)
- {
- VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);
- if(localLastUseFrameIndex == localCurrFrameIndex)
- {
- break;
- }
- else // Last use time earlier than current time.
- {
- if(hAllocation->CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))
- {
- localLastUseFrameIndex = localCurrFrameIndex;
- }
- }
- }
-#endif
-
- pAllocationInfo->memoryType = hAllocation->GetMemoryTypeIndex();
- pAllocationInfo->deviceMemory = hAllocation->GetMemory();
- pAllocationInfo->offset = hAllocation->GetOffset();
- pAllocationInfo->size = hAllocation->GetSize();
- pAllocationInfo->pMappedData = hAllocation->GetMappedData();
- pAllocationInfo->pUserData = hAllocation->GetUserData();
- }
-}
-
-bool VmaAllocator_T::TouchAllocation(VmaAllocation hAllocation)
-{
- // This is a stripped-down version of VmaAllocator_T::GetAllocationInfo.
- if(hAllocation->CanBecomeLost())
- {
- uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();
- uint32_t localLastUseFrameIndex = hAllocation->GetLastUseFrameIndex();
- for(;;)
- {
- if(localLastUseFrameIndex == VMA_FRAME_INDEX_LOST)
- {
- return false;
- }
- else if(localLastUseFrameIndex == localCurrFrameIndex)
- {
- return true;
- }
- else // Last use time earlier than current time.
- {
- if(hAllocation->CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))
- {
- localLastUseFrameIndex = localCurrFrameIndex;
- }
- }
- }
- }
- else
- {
-#if VMA_STATS_STRING_ENABLED
- uint32_t localCurrFrameIndex = m_CurrentFrameIndex.load();
- uint32_t localLastUseFrameIndex = hAllocation->GetLastUseFrameIndex();
- for(;;)
- {
- VMA_ASSERT(localLastUseFrameIndex != VMA_FRAME_INDEX_LOST);
- if(localLastUseFrameIndex == localCurrFrameIndex)
- {
- break;
- }
- else // Last use time earlier than current time.
- {
- if(hAllocation->CompareExchangeLastUseFrameIndex(localLastUseFrameIndex, localCurrFrameIndex))
- {
- localLastUseFrameIndex = localCurrFrameIndex;
- }
- }
- }
-#endif
-
- return true;
- }
+ pAllocationInfo->memoryType = hAllocation->GetMemoryTypeIndex();
+ pAllocationInfo->deviceMemory = hAllocation->GetMemory();
+ pAllocationInfo->offset = hAllocation->GetOffset();
+ pAllocationInfo->size = hAllocation->GetSize();
+ pAllocationInfo->pMappedData = hAllocation->GetMappedData();
+ pAllocationInfo->pUserData = hAllocation->GetUserData();
}
VkResult VmaAllocator_T::CreatePool(const VmaPoolCreateInfo* pCreateInfo, VmaPool* pPool)
@@ -17467,9 +15060,18 @@ void VmaAllocator_T::DestroyPool(VmaPool pool)
vma_delete(this, pool);
}
-void VmaAllocator_T::GetPoolStats(VmaPool pool, VmaPoolStats* pPoolStats)
+void VmaAllocator_T::GetPoolStatistics(VmaPool pool, VmaStatistics* pPoolStats)
{
- pool->m_BlockVector.GetPoolStats(pPoolStats);
+ VmaClearStatistics(*pPoolStats);
+ pool->m_BlockVector.AddStatistics(*pPoolStats);
+ pool->m_DedicatedAllocations.AddStatistics(*pPoolStats);
+}
+
+void VmaAllocator_T::CalculatePoolStatistics(VmaPool pool, VmaDetailedStatistics* pPoolStats)
+{
+ VmaClearDetailedStatistics(*pPoolStats);
+ pool->m_BlockVector.AddDetailedStatistics(*pPoolStats);
+ pool->m_DedicatedAllocations.AddDetailedStatistics(*pPoolStats);
}
void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
@@ -17484,15 +15086,6 @@ void VmaAllocator_T::SetCurrentFrameIndex(uint32_t frameIndex)
#endif // #if VMA_MEMORY_BUDGET
}
-void VmaAllocator_T::MakePoolAllocationsLost(
- VmaPool hPool,
- size_t* pLostAllocationCount)
-{
- hPool->m_BlockVector.MakePoolAllocationsLost(
- m_CurrentFrameIndex.load(),
- pLostAllocationCount);
-}
-
VkResult VmaAllocator_T::CheckPoolCorruption(VmaPool hPool)
{
return hPool->m_BlockVector.CheckCorruption();
@@ -17505,10 +15098,9 @@ VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
// Process default pools.
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
- if(((1u << memTypeIndex) & memoryTypeBits) != 0)
+ VmaBlockVector* const pBlockVector = m_pBlockVectors[memTypeIndex];
+ if(pBlockVector != VMA_NULL)
{
- VmaBlockVector* const pBlockVector = m_pBlockVectors[memTypeIndex];
- VMA_ASSERT(pBlockVector);
VkResult localRes = pBlockVector->CheckCorruption();
switch(localRes)
{
@@ -17548,37 +15140,6 @@ VkResult VmaAllocator_T::CheckCorruption(uint32_t memoryTypeBits)
return finalRes;
}
-void VmaAllocator_T::CreateLostAllocation(VmaAllocation* pAllocation)
-{
- *pAllocation = m_AllocationObjectAllocator.Allocate(VMA_FRAME_INDEX_LOST, false);
- (*pAllocation)->InitLost();
-}
-
-// An object that increments given atomic but decrements it back in the destructor unless Commit() is called.
-template<typename T>
-struct AtomicTransactionalIncrement
-{
-public:
- typedef std::atomic<T> AtomicT;
- ~AtomicTransactionalIncrement()
- {
- if(m_Atomic)
- --(*m_Atomic);
- }
- T Increment(AtomicT* atomic)
- {
- m_Atomic = atomic;
- return m_Atomic->fetch_add(1);
- }
- void Commit()
- {
- m_Atomic = nullptr;
- }
-
-private:
- AtomicT* m_Atomic = nullptr;
-};
-
VkResult VmaAllocator_T::AllocateVulkanMemory(const VkMemoryAllocateInfo* pAllocateInfo, VkDeviceMemory* pMemory)
{
AtomicTransactionalIncrement<uint32_t> deviceMemoryCountIncrement;
@@ -17614,6 +15175,7 @@ VkResult VmaAllocator_T::AllocateVulkanMemory(const VkMemoryAllocateInfo* pAlloc
{
m_Budget.m_BlockBytes[heapIndex] += pAllocateInfo->allocationSize;
}
+ ++m_Budget.m_BlockCount[heapIndex];
// VULKAN CALL vkAllocateMemory.
VkResult res = (*m_VulkanFunctions.vkAllocateMemory)(m_hDevice, pAllocateInfo, GetAllocationCallbacks(), pMemory);
@@ -17634,6 +15196,7 @@ VkResult VmaAllocator_T::AllocateVulkanMemory(const VkMemoryAllocateInfo* pAlloc
}
else
{
+ --m_Budget.m_BlockCount[heapIndex];
m_Budget.m_BlockBytes[heapIndex] -= pAllocateInfo->allocationSize;
}
@@ -17651,7 +15214,9 @@ void VmaAllocator_T::FreeVulkanMemory(uint32_t memoryType, VkDeviceSize size, Vk
// VULKAN CALL vkFreeMemory.
(*m_VulkanFunctions.vkFreeMemory)(m_hDevice, hMemory, GetAllocationCallbacks());
- m_Budget.m_BlockBytes[MemoryTypeIndexToHeapIndex(memoryType)] -= size;
+ const uint32_t heapIndex = MemoryTypeIndexToHeapIndex(memoryType);
+ --m_Budget.m_BlockCount[heapIndex];
+ m_Budget.m_BlockBytes[heapIndex] -= size;
--m_DeviceMemoryCount;
}
@@ -17720,11 +15285,6 @@ VkResult VmaAllocator_T::BindVulkanImage(
VkResult VmaAllocator_T::Map(VmaAllocation hAllocation, void** ppData)
{
- if(hAllocation->CanBecomeLost())
- {
- return VK_ERROR_MEMORY_MAP_FAILED;
- }
-
switch(hAllocation->GetType())
{
case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
@@ -17781,7 +15341,7 @@ VkResult VmaAllocator_T::BindBufferMemory(
case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
{
VmaDeviceMemoryBlock* const pBlock = hAllocation->GetBlock();
- VMA_ASSERT(pBlock && "Binding buffer to allocation that doesn't belong to any block. Is the allocation lost?");
+ VMA_ASSERT(pBlock && "Binding buffer to allocation that doesn't belong to any block.");
res = pBlock->BindBufferMemory(this, hAllocation, allocationLocalOffset, hBuffer, pNext);
break;
}
@@ -17806,7 +15366,7 @@ VkResult VmaAllocator_T::BindImageMemory(
case VmaAllocation_T::ALLOCATION_TYPE_BLOCK:
{
VmaDeviceMemoryBlock* pBlock = hAllocation->GetBlock();
- VMA_ASSERT(pBlock && "Binding image to allocation that doesn't belong to any block. Is the allocation lost?");
+ VMA_ASSERT(pBlock && "Binding image to allocation that doesn't belong to any block.");
res = pBlock->BindImageMemory(this, hAllocation, allocationLocalOffset, hImage, pNext);
break;
}
@@ -17888,10 +15448,16 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
VMA_ASSERT(allocation && allocation->GetType() == VmaAllocation_T::ALLOCATION_TYPE_DEDICATED);
const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
+ VmaPool parentPool = allocation->GetParentPool();
+ if(parentPool == VK_NULL_HANDLE)
{
- VmaMutexLockWrite lock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);
- DedicatedAllocationLinkedList& dedicatedAllocations = m_DedicatedAllocations[memTypeIndex];
- dedicatedAllocations.Remove(allocation);
+ // Default pool
+ m_DedicatedAllocations[memTypeIndex].Unregister(allocation);
+ }
+ else
+ {
+ // Custom pool
+ parentPool->m_DedicatedAllocations.Unregister(allocation);
}
VkDeviceMemory hMemory = allocation->GetMemory();
@@ -17908,6 +15474,9 @@ void VmaAllocator_T::FreeDedicatedMemory(const VmaAllocation allocation)
FreeVulkanMemory(memTypeIndex, allocation->GetSize(), hMemory);
+ m_Budget.RemoveAllocation(MemoryTypeIndexToHeapIndex(allocation->GetMemoryTypeIndex()), allocation->GetSize());
+ m_AllocationObjectAllocator.Free(allocation);
+
VMA_DEBUG_LOG(" Freed DedicatedMemory MemoryTypeIndex=%u", memTypeIndex);
}
@@ -18022,7 +15591,6 @@ bool VmaAllocator_T::GetFlushOrInvalidateRange(
}
#if VMA_MEMORY_BUDGET
-
void VmaAllocator_T::UpdateVulkanBudget()
{
VMA_ASSERT(m_UseExtMemoryBudget);
@@ -18060,13 +15628,11 @@ void VmaAllocator_T::UpdateVulkanBudget()
m_Budget.m_OperationsSinceBudgetFetch = 0;
}
}
-
-#endif // #if VMA_MEMORY_BUDGET
+#endif // VMA_MEMORY_BUDGET
void VmaAllocator_T::FillAllocation(const VmaAllocation hAllocation, uint8_t pattern)
{
if(VMA_DEBUG_INITIALIZE_ALLOCATIONS &&
- !hAllocation->CanBecomeLost() &&
(m_MemProps.memoryTypes[hAllocation->GetMemoryTypeIndex()].propertyFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) != 0)
{
void* pData = VMA_NULL;
@@ -18096,14 +15662,12 @@ uint32_t VmaAllocator_T::GetGpuDefragmentationMemoryTypeBits()
}
#if VMA_STATS_STRING_ENABLED
-
void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
{
bool dedicatedAllocationsStarted = false;
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
- VmaMutexLockRead dedicatedAllocationsLock(m_DedicatedAllocationsMutex[memTypeIndex], m_UseMutex);
- DedicatedAllocationLinkedList& dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];
+ VmaDedicatedAllocationList& dedicatedAllocList = m_DedicatedAllocations[memTypeIndex];
if(!dedicatedAllocList.IsEmpty())
{
if(dedicatedAllocationsStarted == false)
@@ -18117,17 +15681,7 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
json.ContinueString(memTypeIndex);
json.EndString();
- json.BeginArray();
-
- for(VmaAllocation alloc = dedicatedAllocList.Front();
- alloc != VMA_NULL; alloc = dedicatedAllocList.GetNext(alloc))
- {
- json.BeginObject(true);
- alloc->PrintParameters(json);
- json.EndObject();
- }
-
- json.EndArray();
+ dedicatedAllocList.BuildStatsString(json);
}
}
if(dedicatedAllocationsStarted)
@@ -18135,52 +15689,30 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
json.EndObject();
}
- // Default pools
{
bool allocationsStarted = false;
for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
{
- if(m_pBlockVectors[memTypeIndex]->IsEmpty() == false)
+ VmaBlockVector* pBlockVector = m_pBlockVectors[memTypeIndex];
+ if(pBlockVector != VMA_NULL)
{
- if(allocationsStarted == false)
+ if (pBlockVector->IsEmpty() == false)
{
- allocationsStarted = true;
- json.WriteString("DefaultPools");
- json.BeginObject();
- }
-
- json.BeginString("Type ");
- json.ContinueString(memTypeIndex);
- json.EndString();
+ if (allocationsStarted == false)
+ {
+ allocationsStarted = true;
+ json.WriteString("DefaultPools");
+ json.BeginObject();
+ }
- m_pBlockVectors[memTypeIndex]->PrintDetailedMap(json);
- }
- }
- if(allocationsStarted)
- {
- json.EndObject();
- }
- }
+ json.BeginString("Type ");
+ json.ContinueString(memTypeIndex);
+ json.EndString();
- // Small buffer pools
- {
- bool allocationsStarted = false;
- for(uint32_t memTypeIndex = 0; memTypeIndex < GetMemoryTypeCount(); ++memTypeIndex)
- {
- if(m_pSmallBufferBlockVectors[memTypeIndex]->IsEmpty() == false)
- {
- if(allocationsStarted == false)
- {
- allocationsStarted = true;
- json.WriteString("SmallBufferPools");
json.BeginObject();
+ pBlockVector->PrintDetailedMap(json);
+ json.EndObject();
}
-
- json.BeginString("Type ");
- json.ContinueString(memTypeIndex);
- json.EndString();
-
- m_pSmallBufferBlockVectors[memTypeIndex]->PrintDetailedMap(json);
}
}
if(allocationsStarted)
@@ -18202,28 +15734,41 @@ void VmaAllocator_T::PrintDetailedMap(VmaJsonWriter& json)
json.ContinueString(pool->GetId());
json.EndString();
+ json.BeginObject();
pool->m_BlockVector.PrintDetailedMap(json);
+
+ if (!pool->m_DedicatedAllocations.IsEmpty())
+ {
+ json.WriteString("DedicatedAllocations");
+ pool->m_DedicatedAllocations.BuildStatsString(json);
+ }
+ json.EndObject();
}
json.EndObject();
}
}
}
+#endif // VMA_STATS_STRING_ENABLED
+#endif // _VMA_ALLOCATOR_T_FUNCTIONS
-#endif // #if VMA_STATS_STRING_ENABLED
-
-////////////////////////////////////////////////////////////////////////////////
-// Public interface
+#ifndef _VMA_PUBLIC_INTERFACE
VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateAllocator(
const VmaAllocatorCreateInfo* pCreateInfo,
VmaAllocator* pAllocator)
{
VMA_ASSERT(pCreateInfo && pAllocator);
VMA_ASSERT(pCreateInfo->vulkanApiVersion == 0 ||
- (VK_VERSION_MAJOR(pCreateInfo->vulkanApiVersion) == 1 && VK_VERSION_MINOR(pCreateInfo->vulkanApiVersion) <= 2));
+ (VK_VERSION_MAJOR(pCreateInfo->vulkanApiVersion) == 1 && VK_VERSION_MINOR(pCreateInfo->vulkanApiVersion) <= 3));
VMA_DEBUG_LOG("vmaCreateAllocator");
*pAllocator = vma_new(pCreateInfo->pAllocationCallbacks, VmaAllocator_T)(pCreateInfo);
- return (*pAllocator)->Init(pCreateInfo);
+ VkResult result = (*pAllocator)->Init(pCreateInfo);
+ if(result < 0)
+ {
+ vma_delete(pCreateInfo->pAllocationCallbacks, *pAllocator);
+ *pAllocator = VK_NULL_HANDLE;
+ }
+ return result;
}
VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAllocator(
@@ -18232,7 +15777,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyAllocator(
if(allocator != VK_NULL_HANDLE)
{
VMA_DEBUG_LOG("vmaDestroyAllocator");
- VkAllocationCallbacks allocationCallbacks = allocator->m_AllocationCallbacks;
+ VkAllocationCallbacks allocationCallbacks = allocator->m_AllocationCallbacks; // Have to copy the callbacks when destroying.
vma_delete(&allocationCallbacks, allocator);
}
}
@@ -18276,29 +15821,28 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetCurrentFrameIndex(
uint32_t frameIndex)
{
VMA_ASSERT(allocator);
- VMA_ASSERT(frameIndex != VMA_FRAME_INDEX_LOST);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
allocator->SetCurrentFrameIndex(frameIndex);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateStatistics(
VmaAllocator allocator,
- VmaStats* pStats)
+ VmaTotalStatistics* pStats)
{
VMA_ASSERT(allocator && pStats);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- allocator->CalculateStats(pStats);
+ allocator->CalculateStatistics(pStats);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaGetBudget(
+VMA_CALL_PRE void VMA_CALL_POST vmaGetHeapBudgets(
VmaAllocator allocator,
- VmaBudget* pBudget)
+ VmaBudget* pBudgets)
{
- VMA_ASSERT(allocator && pBudget);
+ VMA_ASSERT(allocator && pBudgets);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- allocator->GetBudget(pBudget, 0, allocator->GetMemoryHeapCount());
+ allocator->GetHeapBudgets(pBudgets, 0, allocator->GetMemoryHeapCount());
}
#if VMA_STATS_STRING_ENABLED
@@ -18311,19 +15855,19 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
VMA_ASSERT(allocator && ppStatsString);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- VmaStringBuilder sb(allocator);
+ VmaStringBuilder sb(allocator->GetAllocationCallbacks());
{
VmaJsonWriter json(allocator->GetAllocationCallbacks(), sb);
json.BeginObject();
- VmaBudget budget[VK_MAX_MEMORY_HEAPS];
- allocator->GetBudget(budget, 0, allocator->GetMemoryHeapCount());
+ VmaBudget budgets[VK_MAX_MEMORY_HEAPS];
+ allocator->GetHeapBudgets(budgets, 0, allocator->GetMemoryHeapCount());
- VmaStats stats;
- allocator->CalculateStats(&stats);
+ VmaTotalStatistics stats;
+ allocator->CalculateStatistics(&stats);
json.WriteString("Total");
- VmaPrintStatInfo(json, stats.total);
+ VmaPrintDetailedStatistics(json, stats.total);
for(uint32_t heapIndex = 0; heapIndex < allocator->GetMemoryHeapCount(); ++heapIndex)
{
@@ -18347,20 +15891,24 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
json.BeginObject();
{
json.WriteString("BlockBytes");
- json.WriteNumber(budget[heapIndex].blockBytes);
+ json.WriteNumber(budgets[heapIndex].statistics.blockBytes);
json.WriteString("AllocationBytes");
- json.WriteNumber(budget[heapIndex].allocationBytes);
+ json.WriteNumber(budgets[heapIndex].statistics.allocationBytes);
+ json.WriteString("BlockCount");
+ json.WriteNumber(budgets[heapIndex].statistics.blockCount);
+ json.WriteString("AllocationCount");
+ json.WriteNumber(budgets[heapIndex].statistics.allocationCount);
json.WriteString("Usage");
- json.WriteNumber(budget[heapIndex].usage);
+ json.WriteNumber(budgets[heapIndex].usage);
json.WriteString("Budget");
- json.WriteNumber(budget[heapIndex].budget);
+ json.WriteNumber(budgets[heapIndex].budget);
}
json.EndObject();
- if(stats.memoryHeap[heapIndex].blockCount > 0)
+ if(stats.memoryHeap[heapIndex].statistics.blockCount > 0)
{
json.WriteString("Stats");
- VmaPrintStatInfo(json, stats.memoryHeap[heapIndex]);
+ VmaPrintDetailedStatistics(json, stats.memoryHeap[heapIndex]);
}
for(uint32_t typeIndex = 0; typeIndex < allocator->GetMemoryTypeCount(); ++typeIndex)
@@ -18414,10 +15962,10 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
#endif // #if VK_AMD_device_coherent_memory
json.EndArray();
- if(stats.memoryType[typeIndex].blockCount > 0)
+ if(stats.memoryType[typeIndex].statistics.blockCount > 0)
{
json.WriteString("Stats");
- VmaPrintStatInfo(json, stats.memoryType[typeIndex]);
+ VmaPrintDetailedStatistics(json, stats.memoryType[typeIndex]);
}
json.EndObject();
@@ -18434,14 +15982,7 @@ VMA_CALL_PRE void VMA_CALL_POST vmaBuildStatsString(
json.EndObject();
}
- const size_t len = sb.GetLength();
- char* const pChars = vma_new_array(allocator, char, len + 1);
- if(len > 0)
- {
- memcpy(pChars, sb.GetData(), len);
- }
- pChars[len] = '\0';
- *ppStatsString = pChars;
+ *ppStatsString = VmaCreateStringCopy(allocator->GetAllocationCallbacks(), sb.GetData(), sb.GetLength());
}
VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString(
@@ -18451,12 +15992,11 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeStatsString(
if(pStatsString != VMA_NULL)
{
VMA_ASSERT(allocator);
- size_t len = strlen(pStatsString);
- vma_delete_array(allocator, pStatsString, len + 1);
+ VmaFreeString(allocator->GetAllocationCallbacks(), pStatsString);
}
}
-#endif // #if VMA_STATS_STRING_ENABLED
+#endif // VMA_STATS_STRING_ENABLED
/*
This function is not protected by any mutex because it just reads immutable data.
@@ -18471,91 +16011,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndex(
VMA_ASSERT(pAllocationCreateInfo != VMA_NULL);
VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);
- memoryTypeBits &= allocator->GetGlobalMemoryTypeBits();
-
- if(pAllocationCreateInfo->memoryTypeBits != 0)
- {
- memoryTypeBits &= pAllocationCreateInfo->memoryTypeBits;
- }
-
- uint32_t requiredFlags = pAllocationCreateInfo->requiredFlags;
- uint32_t preferredFlags = pAllocationCreateInfo->preferredFlags;
- uint32_t notPreferredFlags = 0;
-
- // Convert usage to requiredFlags and preferredFlags.
- switch(pAllocationCreateInfo->usage)
- {
- case VMA_MEMORY_USAGE_UNKNOWN:
- break;
- case VMA_MEMORY_USAGE_GPU_ONLY:
- if(!allocator->IsIntegratedGpu() || (preferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
- {
- preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
- }
- break;
- case VMA_MEMORY_USAGE_CPU_ONLY:
- requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT | VK_MEMORY_PROPERTY_HOST_COHERENT_BIT;
- break;
- case VMA_MEMORY_USAGE_CPU_TO_GPU:
- requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
- if(!allocator->IsIntegratedGpu() || (preferredFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT) == 0)
- {
- preferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
- }
- break;
- case VMA_MEMORY_USAGE_GPU_TO_CPU:
- requiredFlags |= VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
- preferredFlags |= VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
- break;
- case VMA_MEMORY_USAGE_CPU_COPY:
- notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
- break;
- case VMA_MEMORY_USAGE_GPU_LAZILY_ALLOCATED:
- requiredFlags |= VK_MEMORY_PROPERTY_LAZILY_ALLOCATED_BIT;
- break;
- default:
- VMA_ASSERT(0);
- break;
- }
-
- // Avoid DEVICE_COHERENT unless explicitly requested.
- if(((pAllocationCreateInfo->requiredFlags | pAllocationCreateInfo->preferredFlags) &
- (VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY | VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD_COPY)) == 0)
- {
- notPreferredFlags |= VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD_COPY;
- }
-
- *pMemoryTypeIndex = UINT32_MAX;
- uint32_t minCost = UINT32_MAX;
- for(uint32_t memTypeIndex = 0, memTypeBit = 1;
- memTypeIndex < allocator->GetMemoryTypeCount();
- ++memTypeIndex, memTypeBit <<= 1)
- {
- // This memory type is acceptable according to memoryTypeBits bitmask.
- if((memTypeBit & memoryTypeBits) != 0)
- {
- const VkMemoryPropertyFlags currFlags =
- allocator->m_MemProps.memoryTypes[memTypeIndex].propertyFlags;
- // This memory type contains requiredFlags.
- if((requiredFlags & ~currFlags) == 0)
- {
- // Calculate cost as number of bits from preferredFlags not present in this memory type.
- uint32_t currCost = VmaCountBitsSet(preferredFlags & ~currFlags) +
- VmaCountBitsSet(currFlags & notPreferredFlags);
- // Remember memory type with lowest cost.
- if(currCost < minCost)
- {
- *pMemoryTypeIndex = memTypeIndex;
- if(currCost == 0)
- {
- return VK_SUCCESS;
- }
- minCost = currCost;
- }
- }
- }
- }
- return (*pMemoryTypeIndex != UINT32_MAX) ? VK_SUCCESS : VK_ERROR_FEATURE_NOT_PRESENT;
+ return allocator->FindMemoryTypeIndex(memoryTypeBits, pAllocationCreateInfo, UINT32_MAX, pMemoryTypeIndex);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
@@ -18570,23 +16026,40 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForBufferInfo(
VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);
const VkDevice hDev = allocator->m_hDevice;
- VkBuffer hBuffer = VK_NULL_HANDLE;
- VkResult res = allocator->GetVulkanFunctions().vkCreateBuffer(
- hDev, pBufferCreateInfo, allocator->GetAllocationCallbacks(), &hBuffer);
- if(res == VK_SUCCESS)
+ const VmaVulkanFunctions* funcs = &allocator->GetVulkanFunctions();
+ VkResult res;
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(funcs->vkGetDeviceBufferMemoryRequirements)
{
- VkMemoryRequirements memReq = {};
- allocator->GetVulkanFunctions().vkGetBufferMemoryRequirements(
- hDev, hBuffer, &memReq);
+ // Can query straight from VkBufferCreateInfo :)
+ VkDeviceBufferMemoryRequirements devBufMemReq = {VK_STRUCTURE_TYPE_DEVICE_BUFFER_MEMORY_REQUIREMENTS};
+ devBufMemReq.pCreateInfo = pBufferCreateInfo;
- res = vmaFindMemoryTypeIndex(
- allocator,
- memReq.memoryTypeBits,
- pAllocationCreateInfo,
- pMemoryTypeIndex);
+ VkMemoryRequirements2 memReq = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};
+ (*funcs->vkGetDeviceBufferMemoryRequirements)(hDev, &devBufMemReq, &memReq);
- allocator->GetVulkanFunctions().vkDestroyBuffer(
- hDev, hBuffer, allocator->GetAllocationCallbacks());
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryRequirements.memoryTypeBits, pAllocationCreateInfo, pBufferCreateInfo->usage, pMemoryTypeIndex);
+ }
+ else
+#endif // #if VMA_VULKAN_VERSION >= 1003000
+ {
+ // Must create a dummy buffer to query :(
+ VkBuffer hBuffer = VK_NULL_HANDLE;
+ res = funcs->vkCreateBuffer(
+ hDev, pBufferCreateInfo, allocator->GetAllocationCallbacks(), &hBuffer);
+ if(res == VK_SUCCESS)
+ {
+ VkMemoryRequirements memReq = {};
+ funcs->vkGetBufferMemoryRequirements(hDev, hBuffer, &memReq);
+
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryTypeBits, pAllocationCreateInfo, pBufferCreateInfo->usage, pMemoryTypeIndex);
+
+ funcs->vkDestroyBuffer(
+ hDev, hBuffer, allocator->GetAllocationCallbacks());
+ }
}
return res;
}
@@ -18603,23 +16076,42 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFindMemoryTypeIndexForImageInfo(
VMA_ASSERT(pMemoryTypeIndex != VMA_NULL);
const VkDevice hDev = allocator->m_hDevice;
- VkImage hImage = VK_NULL_HANDLE;
- VkResult res = allocator->GetVulkanFunctions().vkCreateImage(
- hDev, pImageCreateInfo, allocator->GetAllocationCallbacks(), &hImage);
- if(res == VK_SUCCESS)
+ const VmaVulkanFunctions* funcs = &allocator->GetVulkanFunctions();
+ VkResult res;
+
+#if VMA_VULKAN_VERSION >= 1003000
+ if(funcs->vkGetDeviceImageMemoryRequirements)
{
- VkMemoryRequirements memReq = {};
- allocator->GetVulkanFunctions().vkGetImageMemoryRequirements(
- hDev, hImage, &memReq);
+ // Can query straight from VkImageCreateInfo :)
+ VkDeviceImageMemoryRequirements devImgMemReq = {VK_STRUCTURE_TYPE_DEVICE_IMAGE_MEMORY_REQUIREMENTS};
+ devImgMemReq.pCreateInfo = pImageCreateInfo;
+ VMA_ASSERT(pImageCreateInfo->tiling != VK_IMAGE_TILING_DRM_FORMAT_MODIFIER_EXT_COPY && (pImageCreateInfo->flags & VK_IMAGE_CREATE_DISJOINT_BIT_COPY) == 0 &&
+ "Cannot use this VkImageCreateInfo with vmaFindMemoryTypeIndexForImageInfo as I don't know what to pass as VkDeviceImageMemoryRequirements::planeAspect.");
- res = vmaFindMemoryTypeIndex(
- allocator,
- memReq.memoryTypeBits,
- pAllocationCreateInfo,
- pMemoryTypeIndex);
+ VkMemoryRequirements2 memReq = {VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2};
+ (*funcs->vkGetDeviceImageMemoryRequirements)(hDev, &devImgMemReq, &memReq);
- allocator->GetVulkanFunctions().vkDestroyImage(
- hDev, hImage, allocator->GetAllocationCallbacks());
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryRequirements.memoryTypeBits, pAllocationCreateInfo, pImageCreateInfo->usage, pMemoryTypeIndex);
+ }
+ else
+#endif // #if VMA_VULKAN_VERSION >= 1003000
+ {
+ // Must create a dummy image to query :(
+ VkImage hImage = VK_NULL_HANDLE;
+ res = funcs->vkCreateImage(
+ hDev, pImageCreateInfo, allocator->GetAllocationCallbacks(), &hImage);
+ if(res == VK_SUCCESS)
+ {
+ VkMemoryRequirements memReq = {};
+ funcs->vkGetImageMemoryRequirements(hDev, hImage, &memReq);
+
+ res = allocator->FindMemoryTypeIndex(
+ memReq.memoryTypeBits, pAllocationCreateInfo, pImageCreateInfo->usage, pMemoryTypeIndex);
+
+ funcs->vkDestroyImage(
+ hDev, hImage, allocator->GetAllocationCallbacks());
+ }
}
return res;
}
@@ -18635,16 +16127,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreatePool(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- VkResult res = allocator->CreatePool(pCreateInfo, pPool);
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordCreatePool(allocator->GetCurrentFrameIndex(), *pCreateInfo, *pPool);
- }
-#endif
-
- return res;
+ return allocator->CreatePool(pCreateInfo, pPool);
}
VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool(
@@ -18662,45 +16145,31 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyPool(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordDestroyPool(allocator->GetCurrentFrameIndex(), pool);
- }
-#endif
-
allocator->DestroyPool(pool);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStats(
+VMA_CALL_PRE void VMA_CALL_POST vmaGetPoolStatistics(
VmaAllocator allocator,
VmaPool pool,
- VmaPoolStats* pPoolStats)
+ VmaStatistics* pPoolStats)
{
VMA_ASSERT(allocator && pool && pPoolStats);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- allocator->GetPoolStats(pool, pPoolStats);
+ allocator->GetPoolStatistics(pool, pPoolStats);
}
-VMA_CALL_PRE void VMA_CALL_POST vmaMakePoolAllocationsLost(
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculatePoolStatistics(
VmaAllocator allocator,
VmaPool pool,
- size_t* pLostAllocationCount)
+ VmaDetailedStatistics* pPoolStats)
{
- VMA_ASSERT(allocator && pool);
+ VMA_ASSERT(allocator && pool && pPoolStats);
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordMakePoolAllocationsLost(allocator->GetCurrentFrameIndex(), pool);
- }
-#endif
-
- allocator->MakePoolAllocationsLost(pool, pLostAllocationCount);
+ allocator->CalculatePoolStatistics(pool, pPoolStats);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckPoolCorruption(VmaAllocator allocator, VmaPool pool)
@@ -18740,13 +16209,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetPoolName(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
pool->SetName(pName);
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordSetPoolName(allocator->GetCurrentFrameIndex(), pool, pName);
- }
-#endif
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemory(
@@ -18767,24 +16229,13 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemory(
false, // requiresDedicatedAllocation
false, // prefersDedicatedAllocation
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_UNKNOWN,
1, // allocationCount
pAllocation);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordAllocateMemory(
- allocator->GetCurrentFrameIndex(),
- *pVkMemoryRequirements,
- *pCreateInfo,
- *pAllocation);
- }
-#endif
-
if(pAllocationInfo != VMA_NULL && result == VK_SUCCESS)
{
allocator->GetAllocationInfo(*pAllocation, pAllocationInfo);
@@ -18817,25 +16268,13 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryPages(
false, // requiresDedicatedAllocation
false, // prefersDedicatedAllocation
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_UNKNOWN,
allocationCount,
pAllocations);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordAllocateMemoryPages(
- allocator->GetCurrentFrameIndex(),
- *pVkMemoryRequirements,
- *pCreateInfo,
- (uint64_t)allocationCount,
- pAllocations);
- }
-#endif
-
if(pAllocationInfo != VMA_NULL && result == VK_SUCCESS)
{
for(size_t i = 0; i < allocationCount; ++i)
@@ -18872,26 +16311,13 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForBuffer(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
buffer, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_BUFFER,
1, // allocationCount
pAllocation);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordAllocateMemoryForBuffer(
- allocator->GetCurrentFrameIndex(),
- vkMemReq,
- requiresDedicatedAllocation,
- prefersDedicatedAllocation,
- *pCreateInfo,
- *pAllocation);
- }
-#endif
-
if(pAllocationInfo && result == VK_SUCCESS)
{
allocator->GetAllocationInfo(*pAllocation, pAllocationInfo);
@@ -18924,26 +16350,13 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaAllocateMemoryForImage(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
image, // dedicatedImage
+ UINT32_MAX, // dedicatedBufferImageUsage
*pCreateInfo,
VMA_SUBALLOCATION_TYPE_IMAGE_UNKNOWN,
1, // allocationCount
pAllocation);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordAllocateMemoryForImage(
- allocator->GetCurrentFrameIndex(),
- vkMemReq,
- requiresDedicatedAllocation,
- prefersDedicatedAllocation,
- *pCreateInfo,
- *pAllocation);
- }
-#endif
-
if(pAllocationInfo && result == VK_SUCCESS)
{
allocator->GetAllocationInfo(*pAllocation, pAllocationInfo);
@@ -18967,15 +16380,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemory(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordFreeMemory(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
allocator->FreeMemory(
1, // allocationCount
&allocation);
@@ -18997,16 +16401,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaFreeMemoryPages(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordFreeMemoryPages(
- allocator->GetCurrentFrameIndex(),
- (uint64_t)allocationCount,
- pAllocations);
- }
-#endif
-
allocator->FreeMemory(allocationCount, pAllocations);
}
@@ -19019,38 +16413,9 @@ VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationInfo(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordGetAllocationInfo(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
allocator->GetAllocationInfo(allocation, pAllocationInfo);
}
-VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaTouchAllocation(
- VmaAllocator allocator,
- VmaAllocation allocation)
-{
- VMA_ASSERT(allocator && allocation);
-
- VMA_DEBUG_GLOBAL_MUTEX_LOCK
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordTouchAllocation(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
- return allocator->TouchAllocation(allocation);
-}
-
VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationUserData(
VmaAllocator allocator,
VmaAllocation allocation,
@@ -19061,36 +16426,16 @@ VMA_CALL_PRE void VMA_CALL_POST vmaSetAllocationUserData(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
allocation->SetUserData(allocator, pUserData);
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordSetAllocationUserData(
- allocator->GetCurrentFrameIndex(),
- allocation,
- pUserData);
- }
-#endif
}
-VMA_CALL_PRE void VMA_CALL_POST vmaCreateLostAllocation(
- VmaAllocator allocator,
- VmaAllocation* pAllocation)
+VMA_CALL_PRE void VMA_CALL_POST vmaGetAllocationMemoryProperties(
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaAllocation VMA_NOT_NULL allocation,
+ VkMemoryPropertyFlags* VMA_NOT_NULL pFlags)
{
- VMA_ASSERT(allocator && pAllocation);
-
- VMA_DEBUG_GLOBAL_MUTEX_LOCK;
-
- allocator->CreateLostAllocation(pAllocation);
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordCreateLostAllocation(
- allocator->GetCurrentFrameIndex(),
- *pAllocation);
- }
-#endif
+ VMA_ASSERT(allocator && allocation && pFlags);
+ const uint32_t memTypeIndex = allocation->GetMemoryTypeIndex();
+ *pFlags = allocator->m_MemProps.memoryTypes[memTypeIndex].propertyFlags;
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaMapMemory(
@@ -19102,18 +16447,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaMapMemory(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- VkResult res = allocator->Map(allocation, ppData);
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordMapMemory(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
- return res;
+ return allocator->Map(allocation, ppData);
}
VMA_CALL_PRE void VMA_CALL_POST vmaUnmapMemory(
@@ -19124,19 +16458,14 @@ VMA_CALL_PRE void VMA_CALL_POST vmaUnmapMemory(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordUnmapMemory(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
allocator->Unmap(allocation);
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation(
+ VmaAllocator allocator,
+ VmaAllocation allocation,
+ VkDeviceSize offset,
+ VkDeviceSize size)
{
VMA_ASSERT(allocator && allocation);
@@ -19146,19 +16475,14 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocation(VmaAllocator allocator, V
const VkResult res = allocator->FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_FLUSH);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordFlushAllocation(
- allocator->GetCurrentFrameIndex(),
- allocation, offset, size);
- }
-#endif
-
return res;
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation(VmaAllocator allocator, VmaAllocation allocation, VkDeviceSize offset, VkDeviceSize size)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation(
+ VmaAllocator allocator,
+ VmaAllocation allocation,
+ VkDeviceSize offset,
+ VkDeviceSize size)
{
VMA_ASSERT(allocator && allocation);
@@ -19168,15 +16492,6 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocation(VmaAllocator allocat
const VkResult res = allocator->FlushOrInvalidateAllocation(allocation, offset, size, VMA_CACHE_INVALIDATE);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordInvalidateAllocation(
- allocator->GetCurrentFrameIndex(),
- allocation, offset, size);
- }
-#endif
-
return res;
}
@@ -19202,13 +16517,6 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaFlushAllocations(
const VkResult res = allocator->FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_FLUSH);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- //TODO
- }
-#endif
-
return res;
}
@@ -19234,17 +16542,12 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaInvalidateAllocations(
const VkResult res = allocator->FlushOrInvalidateAllocations(allocationCount, allocations, offsets, sizes, VMA_CACHE_INVALIDATE);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- //TODO
- }
-#endif
-
return res;
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(VmaAllocator allocator, uint32_t memoryTypeBits)
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(
+ VmaAllocator allocator,
+ uint32_t memoryTypeBits)
{
VMA_ASSERT(allocator);
@@ -19255,139 +16558,64 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCheckCorruption(VmaAllocator allocator, u
return allocator->CheckCorruption(memoryTypeBits);
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragment(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentation(
VmaAllocator allocator,
- const VmaAllocation* pAllocations,
- size_t allocationCount,
- VkBool32* pAllocationsChanged,
- const VmaDefragmentationInfo *pDefragmentationInfo,
- VmaDefragmentationStats* pDefragmentationStats)
-{
- // Deprecated interface, reimplemented using new one.
-
- VmaDefragmentationInfo2 info2 = {};
- info2.allocationCount = (uint32_t)allocationCount;
- info2.pAllocations = pAllocations;
- info2.pAllocationsChanged = pAllocationsChanged;
- if(pDefragmentationInfo != VMA_NULL)
- {
- info2.maxCpuAllocationsToMove = pDefragmentationInfo->maxAllocationsToMove;
- info2.maxCpuBytesToMove = pDefragmentationInfo->maxBytesToMove;
- }
- else
- {
- info2.maxCpuAllocationsToMove = UINT32_MAX;
- info2.maxCpuBytesToMove = VK_WHOLE_SIZE;
- }
- // info2.flags, maxGpuAllocationsToMove, maxGpuBytesToMove, commandBuffer deliberately left zero.
-
- VmaDefragmentationContext ctx;
- VkResult res = vmaDefragmentationBegin(allocator, &info2, pDefragmentationStats, &ctx);
- if(res == VK_NOT_READY)
- {
- res = vmaDefragmentationEnd( allocator, ctx);
- }
- return res;
-}
-
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationBegin(
- VmaAllocator allocator,
- const VmaDefragmentationInfo2* pInfo,
- VmaDefragmentationStats* pStats,
- VmaDefragmentationContext *pContext)
+ const VmaDefragmentationInfo* pInfo,
+ VmaDefragmentationContext* pContext)
{
VMA_ASSERT(allocator && pInfo && pContext);
- // Degenerate case: Nothing to defragment.
- if(pInfo->allocationCount == 0 && pInfo->poolCount == 0)
- {
- return VK_SUCCESS;
- }
-
- VMA_ASSERT(pInfo->allocationCount == 0 || pInfo->pAllocations != VMA_NULL);
- VMA_ASSERT(pInfo->poolCount == 0 || pInfo->pPools != VMA_NULL);
- VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo->allocationCount, pInfo->pAllocations));
- VMA_HEAVY_ASSERT(VmaValidatePointerArray(pInfo->poolCount, pInfo->pPools));
-
- VMA_DEBUG_LOG("vmaDefragmentationBegin");
+ VMA_DEBUG_LOG("vmaBeginDefragmentation");
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- VkResult res = allocator->DefragmentationBegin(*pInfo, pStats, pContext);
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordDefragmentationBegin(
- allocator->GetCurrentFrameIndex(), *pInfo, *pContext);
- }
-#endif
-
- return res;
+ *pContext = vma_new(allocator, VmaDefragmentationContext_T)(allocator, *pInfo);
+ return VK_SUCCESS;
}
-VMA_CALL_PRE VkResult VMA_CALL_POST vmaDefragmentationEnd(
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentation(
VmaAllocator allocator,
- VmaDefragmentationContext context)
+ VmaDefragmentationContext context,
+ VmaDefragmentationStats* pStats)
{
- VMA_ASSERT(allocator);
+ VMA_ASSERT(allocator && context);
- VMA_DEBUG_LOG("vmaDefragmentationEnd");
+ VMA_DEBUG_LOG("vmaEndDefragmentation");
- if(context != VK_NULL_HANDLE)
- {
- VMA_DEBUG_GLOBAL_MUTEX_LOCK
-
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordDefragmentationEnd(
- allocator->GetCurrentFrameIndex(), context);
- }
-#endif
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK
- return allocator->DefragmentationEnd(context);
- }
- else
- {
- return VK_SUCCESS;
- }
+ if (pStats)
+ context->GetStats(*pStats);
+ vma_delete(allocator, context);
+ return VK_SUCCESS;
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaBeginDefragmentationPass(
- VmaAllocator allocator,
- VmaDefragmentationContext context,
- VmaDefragmentationPassInfo* pInfo
- )
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo)
{
- VMA_ASSERT(allocator);
- VMA_ASSERT(pInfo);
+ VMA_ASSERT(context && pPassInfo);
VMA_DEBUG_LOG("vmaBeginDefragmentationPass");
VMA_DEBUG_GLOBAL_MUTEX_LOCK
- if(context == VK_NULL_HANDLE)
- {
- pInfo->moveCount = 0;
- return VK_SUCCESS;
- }
-
- return allocator->DefragmentationPassBegin(pInfo, context);
+ return context->DefragmentPassBegin(*pPassInfo);
}
+
VMA_CALL_PRE VkResult VMA_CALL_POST vmaEndDefragmentationPass(
- VmaAllocator allocator,
- VmaDefragmentationContext context)
+ VmaAllocator VMA_NOT_NULL allocator,
+ VmaDefragmentationContext VMA_NOT_NULL context,
+ VmaDefragmentationPassMoveInfo* VMA_NOT_NULL pPassInfo)
{
- VMA_ASSERT(allocator);
+ VMA_ASSERT(context && pPassInfo);
VMA_DEBUG_LOG("vmaEndDefragmentationPass");
- VMA_DEBUG_GLOBAL_MUTEX_LOCK
- if(context == VK_NULL_HANDLE)
- return VK_SUCCESS;
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK
- return allocator->DefragmentationPassEnd(context);
+ return context->DefragmentPassEnd(*pPassInfo);
}
VMA_CALL_PRE VkResult VMA_CALL_POST vmaBindBufferMemory(
@@ -19462,13 +16690,13 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBuffer(
if(pBufferCreateInfo->size == 0)
{
- return VK_ERROR_VALIDATION_FAILED_EXT;
+ return VK_ERROR_INITIALIZATION_FAILED;
}
if((pBufferCreateInfo->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 &&
!allocator->m_UseKhrBufferDeviceAddress)
{
VMA_ASSERT(0 && "Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used.");
- return VK_ERROR_VALIDATION_FAILED_EXT;
+ return VK_ERROR_INITIALIZATION_FAILED;
}
VMA_DEBUG_LOG("vmaCreateBuffer");
@@ -19499,23 +16727,107 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBuffer(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
*pBuffer, // dedicatedBuffer
- pBufferCreateInfo->usage, // dedicatedBufferUsage
VK_NULL_HANDLE, // dedicatedImage
+ pBufferCreateInfo->usage, // dedicatedBufferImageUsage
*pAllocationCreateInfo,
VMA_SUBALLOCATION_TYPE_BUFFER,
1, // allocationCount
pAllocation);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
+ if(res >= 0)
{
- allocator->GetRecorder()->RecordCreateBuffer(
- allocator->GetCurrentFrameIndex(),
- *pBufferCreateInfo,
- *pAllocationCreateInfo,
- *pAllocation);
+ // 3. Bind buffer with memory.
+ if((pAllocationCreateInfo->flags & VMA_ALLOCATION_CREATE_DONT_BIND_BIT) == 0)
+ {
+ res = allocator->BindBufferMemory(*pAllocation, 0, *pBuffer, VMA_NULL);
+ }
+ if(res >= 0)
+ {
+ // All steps succeeded.
+ #if VMA_STATS_STRING_ENABLED
+ (*pAllocation)->InitBufferImageUsage(pBufferCreateInfo->usage);
+ #endif
+ if(pAllocationInfo != VMA_NULL)
+ {
+ allocator->GetAllocationInfo(*pAllocation, pAllocationInfo);
+ }
+
+ return VK_SUCCESS;
+ }
+ allocator->FreeMemory(
+ 1, // allocationCount
+ pAllocation);
+ *pAllocation = VK_NULL_HANDLE;
+ (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks());
+ *pBuffer = VK_NULL_HANDLE;
+ return res;
}
-#endif
+ (*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, *pBuffer, allocator->GetAllocationCallbacks());
+ *pBuffer = VK_NULL_HANDLE;
+ return res;
+ }
+ return res;
+}
+
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateBufferWithAlignment(
+ VmaAllocator allocator,
+ const VkBufferCreateInfo* pBufferCreateInfo,
+ const VmaAllocationCreateInfo* pAllocationCreateInfo,
+ VkDeviceSize minAlignment,
+ VkBuffer* pBuffer,
+ VmaAllocation* pAllocation,
+ VmaAllocationInfo* pAllocationInfo)
+{
+ VMA_ASSERT(allocator && pBufferCreateInfo && pAllocationCreateInfo && VmaIsPow2(minAlignment) && pBuffer && pAllocation);
+
+ if(pBufferCreateInfo->size == 0)
+ {
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+ if((pBufferCreateInfo->usage & VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT_COPY) != 0 &&
+ !allocator->m_UseKhrBufferDeviceAddress)
+ {
+ VMA_ASSERT(0 && "Creating a buffer with VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT is not valid if VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT was not used.");
+ return VK_ERROR_INITIALIZATION_FAILED;
+ }
+
+ VMA_DEBUG_LOG("vmaCreateBufferWithAlignment");
+
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK
+
+ *pBuffer = VK_NULL_HANDLE;
+ *pAllocation = VK_NULL_HANDLE;
+
+ // 1. Create VkBuffer.
+ VkResult res = (*allocator->GetVulkanFunctions().vkCreateBuffer)(
+ allocator->m_hDevice,
+ pBufferCreateInfo,
+ allocator->GetAllocationCallbacks(),
+ pBuffer);
+ if(res >= 0)
+ {
+ // 2. vkGetBufferMemoryRequirements.
+ VkMemoryRequirements vkMemReq = {};
+ bool requiresDedicatedAllocation = false;
+ bool prefersDedicatedAllocation = false;
+ allocator->GetBufferMemoryRequirements(*pBuffer, vkMemReq,
+ requiresDedicatedAllocation, prefersDedicatedAllocation);
+
+ // 2a. Include minAlignment
+ vkMemReq.alignment = VMA_MAX(vkMemReq.alignment, minAlignment);
+
+ // 3. Allocate memory using allocator.
+ res = allocator->AllocateMemory(
+ vkMemReq,
+ requiresDedicatedAllocation,
+ prefersDedicatedAllocation,
+ *pBuffer, // dedicatedBuffer
+ VK_NULL_HANDLE, // dedicatedImage
+ pBufferCreateInfo->usage, // dedicatedBufferImageUsage
+ *pAllocationCreateInfo,
+ VMA_SUBALLOCATION_TYPE_BUFFER,
+ 1, // allocationCount
+ pAllocation);
if(res >= 0)
{
@@ -19568,15 +16880,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyBuffer(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordDestroyBuffer(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
if(buffer != VK_NULL_HANDLE)
{
(*allocator->GetVulkanFunctions().vkDestroyBuffer)(allocator->m_hDevice, buffer, allocator->GetAllocationCallbacks());
@@ -19606,7 +16909,7 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateImage(
pImageCreateInfo->mipLevels == 0 ||
pImageCreateInfo->arrayLayers == 0)
{
- return VK_ERROR_VALIDATION_FAILED_EXT;
+ return VK_ERROR_INITIALIZATION_FAILED;
}
VMA_DEBUG_LOG("vmaCreateImage");
@@ -19640,24 +16943,13 @@ VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateImage(
requiresDedicatedAllocation,
prefersDedicatedAllocation,
VK_NULL_HANDLE, // dedicatedBuffer
- UINT32_MAX, // dedicatedBufferUsage
*pImage, // dedicatedImage
+ pImageCreateInfo->usage, // dedicatedBufferImageUsage
*pAllocationCreateInfo,
suballocType,
1, // allocationCount
pAllocation);
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordCreateImage(
- allocator->GetCurrentFrameIndex(),
- *pImageCreateInfo,
- *pAllocationCreateInfo,
- *pAllocation);
- }
-#endif
-
if(res >= 0)
{
// 3. Bind image with memory.
@@ -19709,15 +17001,6 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage(
VMA_DEBUG_GLOBAL_MUTEX_LOCK
-#if VMA_RECORDING_ENABLED
- if(allocator->GetRecorder() != VMA_NULL)
- {
- allocator->GetRecorder()->RecordDestroyImage(
- allocator->GetCurrentFrameIndex(),
- allocation);
- }
-#endif
-
if(image != VK_NULL_HANDLE)
{
(*allocator->GetVulkanFunctions().vkDestroyImage)(allocator->m_hDevice, image, allocator->GetAllocationCallbacks());
@@ -19730,4 +17013,1988 @@ VMA_CALL_PRE void VMA_CALL_POST vmaDestroyImage(
}
}
-#endif // #ifdef VMA_IMPLEMENTATION
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaCreateVirtualBlock(
+ const VmaVirtualBlockCreateInfo* VMA_NOT_NULL pCreateInfo,
+ VmaVirtualBlock VMA_NULLABLE * VMA_NOT_NULL pVirtualBlock)
+{
+ VMA_ASSERT(pCreateInfo && pVirtualBlock);
+ VMA_ASSERT(pCreateInfo->size > 0);
+ VMA_DEBUG_LOG("vmaCreateVirtualBlock");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ *pVirtualBlock = vma_new(pCreateInfo->pAllocationCallbacks, VmaVirtualBlock_T)(*pCreateInfo);
+ VkResult res = (*pVirtualBlock)->Init();
+ if(res < 0)
+ {
+ vma_delete(pCreateInfo->pAllocationCallbacks, *pVirtualBlock);
+ *pVirtualBlock = VK_NULL_HANDLE;
+ }
+ return res;
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaDestroyVirtualBlock(VmaVirtualBlock VMA_NULLABLE virtualBlock)
+{
+ if(virtualBlock != VK_NULL_HANDLE)
+ {
+ VMA_DEBUG_LOG("vmaDestroyVirtualBlock");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ VkAllocationCallbacks allocationCallbacks = virtualBlock->m_AllocationCallbacks; // Have to copy the callbacks when destroying.
+ vma_delete(&allocationCallbacks, virtualBlock);
+ }
+}
+
+VMA_CALL_PRE VkBool32 VMA_CALL_POST vmaIsVirtualBlockEmpty(VmaVirtualBlock VMA_NOT_NULL virtualBlock)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
+ VMA_DEBUG_LOG("vmaIsVirtualBlockEmpty");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ return virtualBlock->IsEmpty() ? VK_TRUE : VK_FALSE;
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualAllocationInfo(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, VmaVirtualAllocationInfo* VMA_NOT_NULL pVirtualAllocInfo)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pVirtualAllocInfo != VMA_NULL);
+ VMA_DEBUG_LOG("vmaGetVirtualAllocationInfo");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->GetAllocationInfo(allocation, *pVirtualAllocInfo);
+}
+
+VMA_CALL_PRE VkResult VMA_CALL_POST vmaVirtualAllocate(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ const VmaVirtualAllocationCreateInfo* VMA_NOT_NULL pCreateInfo, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE* VMA_NOT_NULL pAllocation,
+ VkDeviceSize* VMA_NULLABLE pOffset)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pCreateInfo != VMA_NULL && pAllocation != VMA_NULL);
+ VMA_DEBUG_LOG("vmaVirtualAllocate");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ return virtualBlock->Allocate(*pCreateInfo, *pAllocation, pOffset);
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaVirtualFree(VmaVirtualBlock VMA_NOT_NULL virtualBlock, VmaVirtualAllocation VMA_NULLABLE_NON_DISPATCHABLE allocation)
+{
+ if(allocation != VK_NULL_HANDLE)
+ {
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
+ VMA_DEBUG_LOG("vmaVirtualFree");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->Free(allocation);
+ }
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaClearVirtualBlock(VmaVirtualBlock VMA_NOT_NULL virtualBlock)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
+ VMA_DEBUG_LOG("vmaClearVirtualBlock");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->Clear();
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaSetVirtualAllocationUserData(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaVirtualAllocation VMA_NOT_NULL_NON_DISPATCHABLE allocation, void* VMA_NULLABLE pUserData)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
+ VMA_DEBUG_LOG("vmaSetVirtualAllocationUserData");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->SetAllocationUserData(allocation, pUserData);
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaGetVirtualBlockStatistics(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaStatistics* VMA_NOT_NULL pStats)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStats != VMA_NULL);
+ VMA_DEBUG_LOG("vmaGetVirtualBlockStatistics");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->GetStatistics(*pStats);
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaCalculateVirtualBlockStatistics(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ VmaDetailedStatistics* VMA_NOT_NULL pStats)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && pStats != VMA_NULL);
+ VMA_DEBUG_LOG("vmaCalculateVirtualBlockStatistics");
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ virtualBlock->CalculateDetailedStatistics(*pStats);
+}
+
+#if VMA_STATS_STRING_ENABLED
+
+VMA_CALL_PRE void VMA_CALL_POST vmaBuildVirtualBlockStatsString(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ char* VMA_NULLABLE * VMA_NOT_NULL ppStatsString, VkBool32 detailedMap)
+{
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE && ppStatsString != VMA_NULL);
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ const VkAllocationCallbacks* allocationCallbacks = virtualBlock->GetAllocationCallbacks();
+ VmaStringBuilder sb(allocationCallbacks);
+ virtualBlock->BuildStatsString(detailedMap != VK_FALSE, sb);
+ *ppStatsString = VmaCreateStringCopy(allocationCallbacks, sb.GetData(), sb.GetLength());
+}
+
+VMA_CALL_PRE void VMA_CALL_POST vmaFreeVirtualBlockStatsString(VmaVirtualBlock VMA_NOT_NULL virtualBlock,
+ char* VMA_NULLABLE pStatsString)
+{
+ if(pStatsString != VMA_NULL)
+ {
+ VMA_ASSERT(virtualBlock != VK_NULL_HANDLE);
+ VMA_DEBUG_GLOBAL_MUTEX_LOCK;
+ VmaFreeString(virtualBlock->GetAllocationCallbacks(), pStatsString);
+ }
+}
+#endif // VMA_STATS_STRING_ENABLED
+#endif // _VMA_PUBLIC_INTERFACE
+#endif // VMA_IMPLEMENTATION
+
+/**
+\page quick_start Quick start
+
+\section quick_start_project_setup Project setup
+
+Vulkan Memory Allocator comes in form of a "stb-style" single header file.
+You don't need to build it as a separate library project.
+You can add this file directly to your project and submit it to code repository next to your other source files.
+
+"Single header" doesn't mean that everything is contained in C/C++ declarations,
+like it tends to be in case of inline functions or C++ templates.
+It means that implementation is bundled with interface in a single file and needs to be extracted using preprocessor macro.
+If you don't do it properly, you will get linker errors.
+
+To do it properly:
+
+-# Include "vk_mem_alloc.h" file in each CPP file where you want to use the library.
+ This includes declarations of all members of the library.
+-# In exactly one CPP file define following macro before this include.
+ It enables also internal definitions.
+
+\code
+#define VMA_IMPLEMENTATION
+#include "vk_mem_alloc.h"
+\endcode
+
+It may be a good idea to create dedicated CPP file just for this purpose.
+
+This library includes header `<vulkan/vulkan.h>`, which in turn
+includes `<windows.h>` on Windows. If you need some specific macros defined
+before including these headers (like `WIN32_LEAN_AND_MEAN` or
+`WINVER` for Windows, `VK_USE_PLATFORM_WIN32_KHR` for Vulkan), you must define
+them before every `#include` of this library.
+
+\note This library is written in C++, but has C-compatible interface.
+Thus you can include and use vk_mem_alloc.h in C or C++ code, but full
+implementation with `VMA_IMPLEMENTATION` macro must be compiled as C++, NOT as C.
+
+
+\section quick_start_initialization Initialization
+
+At program startup:
+
+-# Initialize Vulkan to have `VkPhysicalDevice`, `VkDevice` and `VkInstance` object.
+-# Fill VmaAllocatorCreateInfo structure and create #VmaAllocator object by
+ calling vmaCreateAllocator().
+
+Only members `physicalDevice`, `device`, `instance` are required.
+However, you should inform the library which Vulkan version do you use by setting
+VmaAllocatorCreateInfo::vulkanApiVersion and which extensions did you enable
+by setting VmaAllocatorCreateInfo::flags (like #VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT for VK_KHR_buffer_device_address).
+Otherwise, VMA would use only features of Vulkan 1.0 core with no extensions.
+
+You may need to configure importing Vulkan functions. There are 3 ways to do this:
+
+-# **If you link with Vulkan static library** (e.g. "vulkan-1.lib" on Windows):
+ - You don't need to do anything.
+ - VMA will use these, as macro `VMA_STATIC_VULKAN_FUNCTIONS` is defined to 1 by default.
+-# **If you want VMA to fetch pointers to Vulkan functions dynamically** using `vkGetInstanceProcAddr`,
+ `vkGetDeviceProcAddr` (this is the option presented in the example below):
+ - Define `VMA_STATIC_VULKAN_FUNCTIONS` to 0, `VMA_DYNAMIC_VULKAN_FUNCTIONS` to 1.
+ - Provide pointers to these two functions via VmaVulkanFunctions::vkGetInstanceProcAddr,
+ VmaVulkanFunctions::vkGetDeviceProcAddr.
+ - The library will fetch pointers to all other functions it needs internally.
+-# **If you fetch pointers to all Vulkan functions in a custom way**, e.g. using some loader like
+ [Volk](https://github.com/zeux/volk):
+ - Define `VMA_STATIC_VULKAN_FUNCTIONS` and `VMA_DYNAMIC_VULKAN_FUNCTIONS` to 0.
+ - Pass these pointers via structure #VmaVulkanFunctions.
+
+\code
+VmaVulkanFunctions vulkanFunctions = {};
+vulkanFunctions.vkGetInstanceProcAddr = &vkGetInstanceProcAddr;
+vulkanFunctions.vkGetDeviceProcAddr = &vkGetDeviceProcAddr;
+
+VmaAllocatorCreateInfo allocatorCreateInfo = {};
+allocatorCreateInfo.vulkanApiVersion = VK_API_VERSION_1_2;
+allocatorCreateInfo.physicalDevice = physicalDevice;
+allocatorCreateInfo.device = device;
+allocatorCreateInfo.instance = instance;
+allocatorCreateInfo.pVulkanFunctions = &vulkanFunctions;
+
+VmaAllocator allocator;
+vmaCreateAllocator(&allocatorCreateInfo, &allocator);
+\endcode
+
+
+\section quick_start_resource_allocation Resource allocation
+
+When you want to create a buffer or image:
+
+-# Fill `VkBufferCreateInfo` / `VkImageCreateInfo` structure.
+-# Fill VmaAllocationCreateInfo structure.
+-# Call vmaCreateBuffer() / vmaCreateImage() to get `VkBuffer`/`VkImage` with memory
+ already allocated and bound to it, plus #VmaAllocation objects that represents its underlying memory.
+
+\code
+VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufferInfo.size = 65536;
+bufferInfo.usage = VK_BUFFER_USAGE_VERTEX_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocInfo = {};
+allocInfo.usage = VMA_MEMORY_USAGE_AUTO;
+
+VkBuffer buffer;
+VmaAllocation allocation;
+vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
+\endcode
+
+Don't forget to destroy your objects when no longer needed:
+
+\code
+vmaDestroyBuffer(allocator, buffer, allocation);
+vmaDestroyAllocator(allocator);
+\endcode
+
+
+\page choosing_memory_type Choosing memory type
+
+Physical devices in Vulkan support various combinations of memory heaps and
+types. Help with choosing correct and optimal memory type for your specific
+resource is one of the key features of this library. You can use it by filling
+appropriate members of VmaAllocationCreateInfo structure, as described below.
+You can also combine multiple methods.
+
+-# If you just want to find memory type index that meets your requirements, you
+ can use function: vmaFindMemoryTypeIndexForBufferInfo(),
+ vmaFindMemoryTypeIndexForImageInfo(), vmaFindMemoryTypeIndex().
+-# If you want to allocate a region of device memory without association with any
+ specific image or buffer, you can use function vmaAllocateMemory(). Usage of
+ this function is not recommended and usually not needed.
+ vmaAllocateMemoryPages() function is also provided for creating multiple allocations at once,
+ which may be useful for sparse binding.
+-# If you already have a buffer or an image created, you want to allocate memory
+ for it and then you will bind it yourself, you can use function
+ vmaAllocateMemoryForBuffer(), vmaAllocateMemoryForImage().
+ For binding you should use functions: vmaBindBufferMemory(), vmaBindImageMemory()
+ or their extended versions: vmaBindBufferMemory2(), vmaBindImageMemory2().
+-# **This is the easiest and recommended way to use this library:**
+ If you want to create a buffer or an image, allocate memory for it and bind
+ them together, all in one call, you can use function vmaCreateBuffer(),
+ vmaCreateImage().
+
+When using 3. or 4., the library internally queries Vulkan for memory types
+supported for that buffer or image (function `vkGetBufferMemoryRequirements()`)
+and uses only one of these types.
+
+If no memory type can be found that meets all the requirements, these functions
+return `VK_ERROR_FEATURE_NOT_PRESENT`.
+
+You can leave VmaAllocationCreateInfo structure completely filled with zeros.
+It means no requirements are specified for memory type.
+It is valid, although not very useful.
+
+\section choosing_memory_type_usage Usage
+
+The easiest way to specify memory requirements is to fill member
+VmaAllocationCreateInfo::usage using one of the values of enum #VmaMemoryUsage.
+It defines high level, common usage types.
+Since version 3 of the library, it is recommended to use #VMA_MEMORY_USAGE_AUTO to let it select best memory type for your resource automatically.
+
+For example, if you want to create a uniform buffer that will be filled using
+transfer only once or infrequently and then used for rendering every frame as a uniform buffer, you can
+do it using following code. The buffer will most likely end up in a memory type with
+`VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT` to be fast to access by the GPU device.
+
+\code
+VkBufferCreateInfo bufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufferInfo.size = 65536;
+bufferInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocInfo = {};
+allocInfo.usage = VMA_MEMORY_USAGE_AUTO;
+
+VkBuffer buffer;
+VmaAllocation allocation;
+vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
+\endcode
+
+If you have a preference for putting the resource in GPU (device) memory or CPU (host) memory
+on systems with discrete graphics card that have the memories separate, you can use
+#VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE or #VMA_MEMORY_USAGE_AUTO_PREFER_HOST.
+
+When using `VMA_MEMORY_USAGE_AUTO*` while you want to map the allocated memory,
+you also need to specify one of the host access flags:
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.
+This will help the library decide about preferred memory type to ensure it has `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`
+so you can map it.
+
+For example, a staging buffer that will be filled via mapped pointer and then
+used as a source of transfer to the buffer decribed previously can be created like this.
+It will likely and up in a memory type that is `HOST_VISIBLE` and `HOST_COHERENT`
+but not `HOST_CACHED` (meaning uncached, write-combined) and not `DEVICE_LOCAL` (meaning system RAM).
+
+\code
+VkBufferCreateInfo stagingBufferInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+stagingBufferInfo.size = 65536;
+stagingBufferInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+
+VmaAllocationCreateInfo stagingAllocInfo = {};
+stagingAllocInfo.usage = VMA_MEMORY_USAGE_AUTO;
+stagingAllocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT;
+
+VkBuffer stagingBuffer;
+VmaAllocation stagingAllocation;
+vmaCreateBuffer(allocator, &stagingBufferInfo, &stagingAllocInfo, &stagingBuffer, &stagingAllocation, nullptr);
+\endcode
+
+For more examples of creating different kinds of resources, see chapter \ref usage_patterns.
+
+Usage values `VMA_MEMORY_USAGE_AUTO*` are legal to use only when the library knows
+about the resource being created by having `VkBufferCreateInfo` / `VkImageCreateInfo` passed,
+so they work with functions like: vmaCreateBuffer(), vmaCreateImage(), vmaFindMemoryTypeIndexForBufferInfo() etc.
+If you allocate raw memory using function vmaAllocateMemory(), you have to use other means of selecting
+memory type, as decribed below.
+
+\note
+Old usage values (`VMA_MEMORY_USAGE_GPU_ONLY`, `VMA_MEMORY_USAGE_CPU_ONLY`,
+`VMA_MEMORY_USAGE_CPU_TO_GPU`, `VMA_MEMORY_USAGE_GPU_TO_CPU`, `VMA_MEMORY_USAGE_CPU_COPY`)
+are still available and work same way as in previous versions of the library
+for backward compatibility, but they are not recommended.
+
+\section choosing_memory_type_required_preferred_flags Required and preferred flags
+
+You can specify more detailed requirements by filling members
+VmaAllocationCreateInfo::requiredFlags and VmaAllocationCreateInfo::preferredFlags
+with a combination of bits from enum `VkMemoryPropertyFlags`. For example,
+if you want to create a buffer that will be persistently mapped on host (so it
+must be `HOST_VISIBLE`) and preferably will also be `HOST_COHERENT` and `HOST_CACHED`,
+use following code:
+
+\code
+VmaAllocationCreateInfo allocInfo = {};
+allocInfo.requiredFlags = VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT;
+allocInfo.preferredFlags = VK_MEMORY_PROPERTY_HOST_COHERENT_BIT | VK_MEMORY_PROPERTY_HOST_CACHED_BIT;
+allocInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT | VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buffer;
+VmaAllocation allocation;
+vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
+\endcode
+
+A memory type is chosen that has all the required flags and as many preferred
+flags set as possible.
+
+Value passed in VmaAllocationCreateInfo::usage is internally converted to a set of required and preferred flags,
+plus some extra "magic" (heuristics).
+
+\section choosing_memory_type_explicit_memory_types Explicit memory types
+
+If you inspected memory types available on the physical device and you have
+a preference for memory types that you want to use, you can fill member
+VmaAllocationCreateInfo::memoryTypeBits. It is a bit mask, where each bit set
+means that a memory type with that index is allowed to be used for the
+allocation. Special value 0, just like `UINT32_MAX`, means there are no
+restrictions to memory type index.
+
+Please note that this member is NOT just a memory type index.
+Still you can use it to choose just one, specific memory type.
+For example, if you already determined that your buffer should be created in
+memory type 2, use following code:
+
+\code
+uint32_t memoryTypeIndex = 2;
+
+VmaAllocationCreateInfo allocInfo = {};
+allocInfo.memoryTypeBits = 1u << memoryTypeIndex;
+
+VkBuffer buffer;
+VmaAllocation allocation;
+vmaCreateBuffer(allocator, &bufferInfo, &allocInfo, &buffer, &allocation, nullptr);
+\endcode
+
+
+\section choosing_memory_type_custom_memory_pools Custom memory pools
+
+If you allocate from custom memory pool, all the ways of specifying memory
+requirements described above are not applicable and the aforementioned members
+of VmaAllocationCreateInfo structure are ignored. Memory type is selected
+explicitly when creating the pool and then used to make all the allocations from
+that pool. For further details, see \ref custom_memory_pools.
+
+\section choosing_memory_type_dedicated_allocations Dedicated allocations
+
+Memory for allocations is reserved out of larger block of `VkDeviceMemory`
+allocated from Vulkan internally. That is the main feature of this whole library.
+You can still request a separate memory block to be created for an allocation,
+just like you would do in a trivial solution without using any allocator.
+In that case, a buffer or image is always bound to that memory at offset 0.
+This is called a "dedicated allocation".
+You can explicitly request it by using flag #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+The library can also internally decide to use dedicated allocation in some cases, e.g.:
+
+- When the size of the allocation is large.
+- When [VK_KHR_dedicated_allocation](@ref vk_khr_dedicated_allocation) extension is enabled
+ and it reports that dedicated allocation is required or recommended for the resource.
+- When allocation of next big memory block fails due to not enough device memory,
+ but allocation with the exact requested size succeeds.
+
+
+\page memory_mapping Memory mapping
+
+To "map memory" in Vulkan means to obtain a CPU pointer to `VkDeviceMemory`,
+to be able to read from it or write to it in CPU code.
+Mapping is possible only of memory allocated from a memory type that has
+`VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT` flag.
+Functions `vkMapMemory()`, `vkUnmapMemory()` are designed for this purpose.
+You can use them directly with memory allocated by this library,
+but it is not recommended because of following issue:
+Mapping the same `VkDeviceMemory` block multiple times is illegal - only one mapping at a time is allowed.
+This includes mapping disjoint regions. Mapping is not reference-counted internally by Vulkan.
+Because of this, Vulkan Memory Allocator provides following facilities:
+
+\note If you want to be able to map an allocation, you need to specify one of the flags
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT
+in VmaAllocationCreateInfo::flags. These flags are required for an allocation to be mappable
+when using #VMA_MEMORY_USAGE_AUTO or other `VMA_MEMORY_USAGE_AUTO*` enum values.
+For other usage values they are ignored and every such allocation made in `HOST_VISIBLE` memory type is mappable,
+but they can still be used for consistency.
+
+\section memory_mapping_mapping_functions Mapping functions
+
+The library provides following functions for mapping of a specific #VmaAllocation: vmaMapMemory(), vmaUnmapMemory().
+They are safer and more convenient to use than standard Vulkan functions.
+You can map an allocation multiple times simultaneously - mapping is reference-counted internally.
+You can also map different allocations simultaneously regardless of whether they use the same `VkDeviceMemory` block.
+The way it is implemented is that the library always maps entire memory block, not just region of the allocation.
+For further details, see description of vmaMapMemory() function.
+Example:
+
+\code
+// Having these objects initialized:
+struct ConstantBuffer
+{
+ ...
+};
+ConstantBuffer constantBufferData = ...
+
+VmaAllocator allocator = ...
+VkBuffer constantBuffer = ...
+VmaAllocation constantBufferAllocation = ...
+
+// You can map and fill your buffer using following code:
+
+void* mappedData;
+vmaMapMemory(allocator, constantBufferAllocation, &mappedData);
+memcpy(mappedData, &constantBufferData, sizeof(constantBufferData));
+vmaUnmapMemory(allocator, constantBufferAllocation);
+\endcode
+
+When mapping, you may see a warning from Vulkan validation layer similar to this one:
+
+<i>Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.</i>
+
+It happens because the library maps entire `VkDeviceMemory` block, where different
+types of images and buffers may end up together, especially on GPUs with unified memory like Intel.
+You can safely ignore it if you are sure you access only memory of the intended
+object that you wanted to map.
+
+
+\section memory_mapping_persistently_mapped_memory Persistently mapped memory
+
+Kepping your memory persistently mapped is generally OK in Vulkan.
+You don't need to unmap it before using its data on the GPU.
+The library provides a special feature designed for that:
+Allocations made with #VMA_ALLOCATION_CREATE_MAPPED_BIT flag set in
+VmaAllocationCreateInfo::flags stay mapped all the time,
+so you can just access CPU pointer to it any time
+without a need to call any "map" or "unmap" function.
+Example:
+
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = sizeof(ConstantBuffer);
+bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
+
+// Buffer is already mapped. You can access its memory.
+memcpy(allocInfo.pMappedData, &constantBufferData, sizeof(constantBufferData));
+\endcode
+
+\note #VMA_ALLOCATION_CREATE_MAPPED_BIT by itself doesn't guarantee that the allocation will end up
+in a mappable memory type.
+For this, you need to also specify #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT or
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.
+#VMA_ALLOCATION_CREATE_MAPPED_BIT only guarantees that if the memory is `HOST_VISIBLE`, the allocation will be mapped on creation.
+For an example of how to make use of this fact, see section \ref usage_patterns_advanced_data_uploading.
+
+\section memory_mapping_cache_control Cache flush and invalidate
+
+Memory in Vulkan doesn't need to be unmapped before using it on GPU,
+but unless a memory types has `VK_MEMORY_PROPERTY_HOST_COHERENT_BIT` flag set,
+you need to manually **invalidate** cache before reading of mapped pointer
+and **flush** cache after writing to mapped pointer.
+Map/unmap operations don't do that automatically.
+Vulkan provides following functions for this purpose `vkFlushMappedMemoryRanges()`,
+`vkInvalidateMappedMemoryRanges()`, but this library provides more convenient
+functions that refer to given allocation object: vmaFlushAllocation(),
+vmaInvalidateAllocation(),
+or multiple objects at once: vmaFlushAllocations(), vmaInvalidateAllocations().
+
+Regions of memory specified for flush/invalidate must be aligned to
+`VkPhysicalDeviceLimits::nonCoherentAtomSize`. This is automatically ensured by the library.
+In any memory type that is `HOST_VISIBLE` but not `HOST_COHERENT`, all allocations
+within blocks are aligned to this value, so their offsets are always multiply of
+`nonCoherentAtomSize` and two different allocations never share same "line" of this size.
+
+Also, Windows drivers from all 3 PC GPU vendors (AMD, Intel, NVIDIA)
+currently provide `HOST_COHERENT` flag on all memory types that are
+`HOST_VISIBLE`, so on PC you may not need to bother.
+
+
+\page staying_within_budget Staying within budget
+
+When developing a graphics-intensive game or program, it is important to avoid allocating
+more GPU memory than it is physically available. When the memory is over-committed,
+various bad things can happen, depending on the specific GPU, graphics driver, and
+operating system:
+
+- It may just work without any problems.
+- The application may slow down because some memory blocks are moved to system RAM
+ and the GPU has to access them through PCI Express bus.
+- A new allocation may take very long time to complete, even few seconds, and possibly
+ freeze entire system.
+- The new allocation may fail with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+- It may even result in GPU crash (TDR), observed as `VK_ERROR_DEVICE_LOST`
+ returned somewhere later.
+
+\section staying_within_budget_querying_for_budget Querying for budget
+
+To query for current memory usage and available budget, use function vmaGetHeapBudgets().
+Returned structure #VmaBudget contains quantities expressed in bytes, per Vulkan memory heap.
+
+Please note that this function returns different information and works faster than
+vmaCalculateStatistics(). vmaGetHeapBudgets() can be called every frame or even before every
+allocation, while vmaCalculateStatistics() is intended to be used rarely,
+only to obtain statistical information, e.g. for debugging purposes.
+
+It is recommended to use <b>VK_EXT_memory_budget</b> device extension to obtain information
+about the budget from Vulkan device. VMA is able to use this extension automatically.
+When not enabled, the allocator behaves same way, but then it estimates current usage
+and available budget based on its internal information and Vulkan memory heap sizes,
+which may be less precise. In order to use this extension:
+
+1. Make sure extensions VK_EXT_memory_budget and VK_KHR_get_physical_device_properties2
+ required by it are available and enable them. Please note that the first is a device
+ extension and the second is instance extension!
+2. Use flag #VMA_ALLOCATOR_CREATE_EXT_MEMORY_BUDGET_BIT when creating #VmaAllocator object.
+3. Make sure to call vmaSetCurrentFrameIndex() every frame. Budget is queried from
+ Vulkan inside of it to avoid overhead of querying it with every allocation.
+
+\section staying_within_budget_controlling_memory_usage Controlling memory usage
+
+There are many ways in which you can try to stay within the budget.
+
+First, when making new allocation requires allocating a new memory block, the library
+tries not to exceed the budget automatically. If a block with default recommended size
+(e.g. 256 MB) would go over budget, a smaller block is allocated, possibly even
+dedicated memory for just this resource.
+
+If the size of the requested resource plus current memory usage is more than the
+budget, by default the library still tries to create it, leaving it to the Vulkan
+implementation whether the allocation succeeds or fails. You can change this behavior
+by using #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag. With it, the allocation is
+not made if it would exceed the budget or if the budget is already exceeded.
+VMA then tries to make the allocation from the next eligible Vulkan memory type.
+The all of them fail, the call then fails with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+Example usage pattern may be to pass the #VMA_ALLOCATION_CREATE_WITHIN_BUDGET_BIT flag
+when creating resources that are not essential for the application (e.g. the texture
+of a specific object) and not to pass it when creating critically important resources
+(e.g. render targets).
+
+On AMD graphics cards there is a custom vendor extension available: <b>VK_AMD_memory_overallocation_behavior</b>
+that allows to control the behavior of the Vulkan implementation in out-of-memory cases -
+whether it should fail with an error code or still allow the allocation.
+Usage of this extension involves only passing extra structure on Vulkan device creation,
+so it is out of scope of this library.
+
+Finally, you can also use #VMA_ALLOCATION_CREATE_NEVER_ALLOCATE_BIT flag to make sure
+a new allocation is created only when it fits inside one of the existing memory blocks.
+If it would require to allocate a new block, if fails instead with `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+This also ensures that the function call is very fast because it never goes to Vulkan
+to obtain a new block.
+
+\note Creating \ref custom_memory_pools with VmaPoolCreateInfo::minBlockCount
+set to more than 0 will currently try to allocate memory blocks without checking whether they
+fit within budget.
+
+
+\page resource_aliasing Resource aliasing (overlap)
+
+New explicit graphics APIs (Vulkan and Direct3D 12), thanks to manual memory
+management, give an opportunity to alias (overlap) multiple resources in the
+same region of memory - a feature not available in the old APIs (Direct3D 11, OpenGL).
+It can be useful to save video memory, but it must be used with caution.
+
+For example, if you know the flow of your whole render frame in advance, you
+are going to use some intermediate textures or buffers only during a small range of render passes,
+and you know these ranges don't overlap in time, you can bind these resources to
+the same place in memory, even if they have completely different parameters (width, height, format etc.).
+
+![Resource aliasing (overlap)](../gfx/Aliasing.png)
+
+Such scenario is possible using VMA, but you need to create your images manually.
+Then you need to calculate parameters of an allocation to be made using formula:
+
+- allocation size = max(size of each image)
+- allocation alignment = max(alignment of each image)
+- allocation memoryTypeBits = bitwise AND(memoryTypeBits of each image)
+
+Following example shows two different images bound to the same place in memory,
+allocated to fit largest of them.
+
+\code
+// A 512x512 texture to be sampled.
+VkImageCreateInfo img1CreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
+img1CreateInfo.imageType = VK_IMAGE_TYPE_2D;
+img1CreateInfo.extent.width = 512;
+img1CreateInfo.extent.height = 512;
+img1CreateInfo.extent.depth = 1;
+img1CreateInfo.mipLevels = 10;
+img1CreateInfo.arrayLayers = 1;
+img1CreateInfo.format = VK_FORMAT_R8G8B8A8_SRGB;
+img1CreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+img1CreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+img1CreateInfo.usage = VK_IMAGE_USAGE_TRANSFER_DST_BIT | VK_IMAGE_USAGE_SAMPLED_BIT;
+img1CreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+
+// A full screen texture to be used as color attachment.
+VkImageCreateInfo img2CreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
+img2CreateInfo.imageType = VK_IMAGE_TYPE_2D;
+img2CreateInfo.extent.width = 1920;
+img2CreateInfo.extent.height = 1080;
+img2CreateInfo.extent.depth = 1;
+img2CreateInfo.mipLevels = 1;
+img2CreateInfo.arrayLayers = 1;
+img2CreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
+img2CreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+img2CreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+img2CreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+img2CreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+
+VkImage img1;
+res = vkCreateImage(device, &img1CreateInfo, nullptr, &img1);
+VkImage img2;
+res = vkCreateImage(device, &img2CreateInfo, nullptr, &img2);
+
+VkMemoryRequirements img1MemReq;
+vkGetImageMemoryRequirements(device, img1, &img1MemReq);
+VkMemoryRequirements img2MemReq;
+vkGetImageMemoryRequirements(device, img2, &img2MemReq);
+
+VkMemoryRequirements finalMemReq = {};
+finalMemReq.size = std::max(img1MemReq.size, img2MemReq.size);
+finalMemReq.alignment = std::max(img1MemReq.alignment, img2MemReq.alignment);
+finalMemReq.memoryTypeBits = img1MemReq.memoryTypeBits & img2MemReq.memoryTypeBits;
+// Validate if(finalMemReq.memoryTypeBits != 0)
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.preferredFlags = VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT;
+
+VmaAllocation alloc;
+res = vmaAllocateMemory(allocator, &finalMemReq, &allocCreateInfo, &alloc, nullptr);
+
+res = vmaBindImageMemory(allocator, alloc, img1);
+res = vmaBindImageMemory(allocator, alloc, img2);
+
+// You can use img1, img2 here, but not at the same time!
+
+vmaFreeMemory(allocator, alloc);
+vkDestroyImage(allocator, img2, nullptr);
+vkDestroyImage(allocator, img1, nullptr);
+\endcode
+
+Remember that using resources that alias in memory requires proper synchronization.
+You need to issue a memory barrier to make sure commands that use `img1` and `img2`
+don't overlap on GPU timeline.
+You also need to treat a resource after aliasing as uninitialized - containing garbage data.
+For example, if you use `img1` and then want to use `img2`, you need to issue
+an image memory barrier for `img2` with `oldLayout` = `VK_IMAGE_LAYOUT_UNDEFINED`.
+
+Additional considerations:
+
+- Vulkan also allows to interpret contents of memory between aliasing resources consistently in some cases.
+See chapter 11.8. "Memory Aliasing" of Vulkan specification or `VK_IMAGE_CREATE_ALIAS_BIT` flag.
+- You can create more complex layout where different images and buffers are bound
+at different offsets inside one large allocation. For example, one can imagine
+a big texture used in some render passes, aliasing with a set of many small buffers
+used between in some further passes. To bind a resource at non-zero offset in an allocation,
+use vmaBindBufferMemory2() / vmaBindImageMemory2().
+- Before allocating memory for the resources you want to alias, check `memoryTypeBits`
+returned in memory requirements of each resource to make sure the bits overlap.
+Some GPUs may expose multiple memory types suitable e.g. only for buffers or
+images with `COLOR_ATTACHMENT` usage, so the sets of memory types supported by your
+resources may be disjoint. Aliasing them is not possible in that case.
+
+
+\page custom_memory_pools Custom memory pools
+
+A memory pool contains a number of `VkDeviceMemory` blocks.
+The library automatically creates and manages default pool for each memory type available on the device.
+Default memory pool automatically grows in size.
+Size of allocated blocks is also variable and managed automatically.
+
+You can create custom pool and allocate memory out of it.
+It can be useful if you want to:
+
+- Keep certain kind of allocations separate from others.
+- Enforce particular, fixed size of Vulkan memory blocks.
+- Limit maximum amount of Vulkan memory allocated for that pool.
+- Reserve minimum or fixed amount of Vulkan memory always preallocated for that pool.
+- Use extra parameters for a set of your allocations that are available in #VmaPoolCreateInfo but not in
+ #VmaAllocationCreateInfo - e.g., custom minimum alignment, custom `pNext` chain.
+- Perform defragmentation on a specific subset of your allocations.
+
+To use custom memory pools:
+
+-# Fill VmaPoolCreateInfo structure.
+-# Call vmaCreatePool() to obtain #VmaPool handle.
+-# When making an allocation, set VmaAllocationCreateInfo::pool to this handle.
+ You don't need to specify any other parameters of this structure, like `usage`.
+
+Example:
+
+\code
+// Create a pool that can have at most 2 blocks, 128 MiB each.
+VmaPoolCreateInfo poolCreateInfo = {};
+poolCreateInfo.memoryTypeIndex = ...
+poolCreateInfo.blockSize = 128ull * 1024 * 1024;
+poolCreateInfo.maxBlockCount = 2;
+
+VmaPool pool;
+vmaCreatePool(allocator, &poolCreateInfo, &pool);
+
+// Allocate a buffer out of it.
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 1024;
+bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.pool = pool;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
+\endcode
+
+You have to free all allocations made from this pool before destroying it.
+
+\code
+vmaDestroyBuffer(allocator, buf, alloc);
+vmaDestroyPool(allocator, pool);
+\endcode
+
+New versions of this library support creating dedicated allocations in custom pools.
+It is supported only when VmaPoolCreateInfo::blockSize = 0.
+To use this feature, set VmaAllocationCreateInfo::pool to the pointer to your custom pool and
+VmaAllocationCreateInfo::flags to #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+
+\note Excessive use of custom pools is a common mistake when using this library.
+Custom pools may be useful for special purposes - when you want to
+keep certain type of resources separate e.g. to reserve minimum amount of memory
+for them or limit maximum amount of memory they can occupy. For most
+resources this is not needed and so it is not recommended to create #VmaPool
+objects and allocations out of them. Allocating from the default pool is sufficient.
+
+
+\section custom_memory_pools_MemTypeIndex Choosing memory type index
+
+When creating a pool, you must explicitly specify memory type index.
+To find the one suitable for your buffers or images, you can use helper functions
+vmaFindMemoryTypeIndexForBufferInfo(), vmaFindMemoryTypeIndexForImageInfo().
+You need to provide structures with example parameters of buffers or images
+that you are going to create in that pool.
+
+\code
+VkBufferCreateInfo exampleBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+exampleBufCreateInfo.size = 1024; // Doesn't matter
+exampleBufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+
+uint32_t memTypeIndex;
+vmaFindMemoryTypeIndexForBufferInfo(allocator, &exampleBufCreateInfo, &allocCreateInfo, &memTypeIndex);
+
+VmaPoolCreateInfo poolCreateInfo = {};
+poolCreateInfo.memoryTypeIndex = memTypeIndex;
+// ...
+\endcode
+
+When creating buffers/images allocated in that pool, provide following parameters:
+
+- `VkBufferCreateInfo`: Prefer to pass same parameters as above.
+ Otherwise you risk creating resources in a memory type that is not suitable for them, which may result in undefined behavior.
+ Using different `VK_BUFFER_USAGE_` flags may work, but you shouldn't create images in a pool intended for buffers
+ or the other way around.
+- VmaAllocationCreateInfo: You don't need to pass same parameters. Fill only `pool` member.
+ Other members are ignored anyway.
+
+\section linear_algorithm Linear allocation algorithm
+
+Each Vulkan memory block managed by this library has accompanying metadata that
+keeps track of used and unused regions. By default, the metadata structure and
+algorithm tries to find best place for new allocations among free regions to
+optimize memory usage. This way you can allocate and free objects in any order.
+
+![Default allocation algorithm](../gfx/Linear_allocator_1_algo_default.png)
+
+Sometimes there is a need to use simpler, linear allocation algorithm. You can
+create custom pool that uses such algorithm by adding flag
+#VMA_POOL_CREATE_LINEAR_ALGORITHM_BIT to VmaPoolCreateInfo::flags while creating
+#VmaPool object. Then an alternative metadata management is used. It always
+creates new allocations after last one and doesn't reuse free regions after
+allocations freed in the middle. It results in better allocation performance and
+less memory consumed by metadata.
+
+![Linear allocation algorithm](../gfx/Linear_allocator_2_algo_linear.png)
+
+With this one flag, you can create a custom pool that can be used in many ways:
+free-at-once, stack, double stack, and ring buffer. See below for details.
+You don't need to specify explicitly which of these options you are going to use - it is detected automatically.
+
+\subsection linear_algorithm_free_at_once Free-at-once
+
+In a pool that uses linear algorithm, you still need to free all the allocations
+individually, e.g. by using vmaFreeMemory() or vmaDestroyBuffer(). You can free
+them in any order. New allocations are always made after last one - free space
+in the middle is not reused. However, when you release all the allocation and
+the pool becomes empty, allocation starts from the beginning again. This way you
+can use linear algorithm to speed up creation of allocations that you are going
+to release all at once.
+
+![Free-at-once](../gfx/Linear_allocator_3_free_at_once.png)
+
+This mode is also available for pools created with VmaPoolCreateInfo::maxBlockCount
+value that allows multiple memory blocks.
+
+\subsection linear_algorithm_stack Stack
+
+When you free an allocation that was created last, its space can be reused.
+Thanks to this, if you always release allocations in the order opposite to their
+creation (LIFO - Last In First Out), you can achieve behavior of a stack.
+
+![Stack](../gfx/Linear_allocator_4_stack.png)
+
+This mode is also available for pools created with VmaPoolCreateInfo::maxBlockCount
+value that allows multiple memory blocks.
+
+\subsection linear_algorithm_double_stack Double stack
+
+The space reserved by a custom pool with linear algorithm may be used by two
+stacks:
+
+- First, default one, growing up from offset 0.
+- Second, "upper" one, growing down from the end towards lower offsets.
+
+To make allocation from the upper stack, add flag #VMA_ALLOCATION_CREATE_UPPER_ADDRESS_BIT
+to VmaAllocationCreateInfo::flags.
+
+![Double stack](../gfx/Linear_allocator_7_double_stack.png)
+
+Double stack is available only in pools with one memory block -
+VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined.
+
+When the two stacks' ends meet so there is not enough space between them for a
+new allocation, such allocation fails with usual
+`VK_ERROR_OUT_OF_DEVICE_MEMORY` error.
+
+\subsection linear_algorithm_ring_buffer Ring buffer
+
+When you free some allocations from the beginning and there is not enough free space
+for a new one at the end of a pool, allocator's "cursor" wraps around to the
+beginning and starts allocation there. Thanks to this, if you always release
+allocations in the same order as you created them (FIFO - First In First Out),
+you can achieve behavior of a ring buffer / queue.
+
+![Ring buffer](../gfx/Linear_allocator_5_ring_buffer.png)
+
+Ring buffer is available only in pools with one memory block -
+VmaPoolCreateInfo::maxBlockCount must be 1. Otherwise behavior is undefined.
+
+
+\page defragmentation Defragmentation
+
+Interleaved allocations and deallocations of many objects of varying size can
+cause fragmentation over time, which can lead to a situation where the library is unable
+to find a continuous range of free memory for a new allocation despite there is
+enough free space, just scattered across many small free ranges between existing
+allocations.
+
+To mitigate this problem, you can use defragmentation feature.
+It doesn't happen automatically though and needs your cooperation,
+because VMA is a low level library that only allocates memory.
+It cannot recreate buffers and images in a new place as it doesn't remember the contents of `VkBufferCreateInfo` / `VkImageCreateInfo` structures.
+It cannot copy their contents as it doesn't record any commands to a command buffer.
+
+Example:
+
+\code
+VmaDefragmentationInfo defragInfo = {};
+defragInfo.pool = myPool;
+defragInfo.flags = VMA_DEFRAGMENTATION_FLAG_ALGORITHM_FAST_BIT;
+
+VmaDefragmentationContext defragCtx;
+VkResult res = vmaBeginDefragmentation(allocator, &defragInfo, &defragCtx);
+// Check res...
+
+for(;;)
+{
+ VmaDefragmentationPassMoveInfo pass;
+ res = vmaBeginDefragmentationPass(allocator, defragCtx, &pass);
+ if(res == VK_SUCCESS)
+ break;
+ else if(res == VK_INCOMPLETE)
+ {
+ for(uint32_t i = 0; i < pass.moveCount; ++i)
+ {
+ //- Inspect pass.pMoves[i].srcAllocation, identify what buffer or image it represents.
+ //- Recreate this buffer or image at pass.pMoves[i].dstMemory, pass.pMoves[i].dstOffset.
+ //- Issue a vkCmdCopyBuffer/vkCmdCopyImage to copy its content to the new place.
+ }
+ //- Make sure the copy commands finished executing.
+ //- Update appropriate descriptors to point to the new places.
+ res = vmaEndDefragmentationPass(allocator, defragCtx, &pass);
+ if(res == VK_SUCCESS)
+ break;
+ else if(res != VK_INCOMPLETE)
+ // Handle error...
+ }
+ else
+ // Handle error...
+}
+
+vmaEndDefragmentation(allocator, defragCtx, nullptr);
+\endcode
+
+You can defragment a specific custom pool by setting VmaDefragmentationInfo::pool
+(like in the example above) or all the default pools by setting this member to null.
+
+Unlike in previous iterations of the defragmentation API, there is no list of "movable" allocations passed as a parameter.
+Defragmentation algorithm tries to move all suitable allocations.
+You can, however, refuse to move some of them inside a defragmentation pass, by setting
+`pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_IGNORE.
+However, this is not recommended and may result in suboptimal packing of the allocations after defragmentation.
+If you cannot ensure any allocation can be moved, it is better to keep movable allocations separate in a custom pool.
+
+You can also decide to destroy an allocation instead of moving it.
+You should then set `pass.pMoves[i].operation` to #VMA_DEFRAGMENTATION_MOVE_OPERATION_DESTROY.
+
+You can perform the defragmentation incrementally to limit the number of allocations and bytes to be moved
+in each pass, e.g. to call it in sync with render frames and not to experience too big hitches.
+See members: VmaDefragmentationInfo::maxBytesPerPass, VmaDefragmentationInfo::maxAllocationsPerPass.
+
+It is also safe to perform the defragmentation asynchronously to render frames and other Vulkan and VMA
+usage, possibly from multiple threads, with the exception that allocations
+returned in VmaDefragmentationPassMoveInfo::pMoves shouldn't be destroyed until the defragmentation pass is ended.
+
+
+\page statistics Statistics
+
+This library contains several functions that return information about its internal state,
+especially the amount of memory allocated from Vulkan.
+
+\section statistics_numeric_statistics Numeric statistics
+
+If you need to obtain basic statistics about memory usage per heap, together with current budget,
+you can call function vmaGetHeapBudgets() and inspect structure #VmaBudget.
+This is useful to keep track of memory usage and stay withing budget
+(see also \ref staying_within_budget).
+Example:
+
+\code
+uint32_t heapIndex = ...
+
+VmaBudget budgets[VK_MAX_MEMORY_HEAPS];
+vmaGetHeapBudgets(allocator, budgets);
+
+printf("My heap currently has %u allocations taking %llu B,\n",
+ budgets[heapIndex].statistics.allocationCount,
+ budgets[heapIndex].statistics.allocationBytes);
+printf("allocated out of %u Vulkan device memory blocks taking %llu B,\n",
+ budgets[heapIndex].statistics.blockCount,
+ budgets[heapIndex].statistics.blockBytes);
+printf("Vulkan reports total usage %llu B with budget %llu B.\n",
+ budgets[heapIndex].usage,
+ budgets[heapIndex].budget);
+\endcode
+
+You can query for more detailed statistics per memory heap, type, and totals,
+including minimum and maximum allocation size and unused range size,
+by calling function vmaCalculateStatistics() and inspecting structure #VmaTotalStatistics.
+This function is slower though, as it has to traverse all the internal data structures,
+so it should be used only for debugging purposes.
+
+You can query for statistics of a custom pool using function vmaGetPoolStatistics()
+or vmaCalculatePoolStatistics().
+
+You can query for information about a specific allocation using function vmaGetAllocationInfo().
+It fill structure #VmaAllocationInfo.
+
+\section statistics_json_dump JSON dump
+
+You can dump internal state of the allocator to a string in JSON format using function vmaBuildStatsString().
+The result is guaranteed to be correct JSON.
+It uses ANSI encoding.
+Any strings provided by user (see [Allocation names](@ref allocation_names))
+are copied as-is and properly escaped for JSON, so if they use UTF-8, ISO-8859-2 or any other encoding,
+this JSON string can be treated as using this encoding.
+It must be freed using function vmaFreeStatsString().
+
+The format of this JSON string is not part of official documentation of the library,
+but it will not change in backward-incompatible way without increasing library major version number
+and appropriate mention in changelog.
+
+The JSON string contains all the data that can be obtained using vmaCalculateStatistics().
+It can also contain detailed map of allocated memory blocks and their regions -
+free and occupied by allocations.
+This allows e.g. to visualize the memory or assess fragmentation.
+
+
+\page allocation_annotation Allocation names and user data
+
+\section allocation_user_data Allocation user data
+
+You can annotate allocations with your own information, e.g. for debugging purposes.
+To do that, fill VmaAllocationCreateInfo::pUserData field when creating
+an allocation. It is an opaque `void*` pointer. You can use it e.g. as a pointer,
+some handle, index, key, ordinal number or any other value that would associate
+the allocation with your custom metadata.
+
+\code
+VkBufferCreateInfo bufCreateInfo = ...
+
+MyBufferMetadata* pMetadata = CreateBufferMetadata();
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.pUserData = pMetadata;
+
+VkBuffer buffer;
+VmaAllocation allocation;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buffer, &allocation, nullptr);
+\endcode
+
+The pointer may be later retrieved as VmaAllocationInfo::pUserData:
+
+\code
+VmaAllocationInfo allocInfo;
+vmaGetAllocationInfo(allocator, allocation, &allocInfo);
+MyBufferMetadata* pMetadata = (MyBufferMetadata*)allocInfo.pUserData;
+\endcode
+
+It can also be changed using function vmaSetAllocationUserData().
+
+Values of (non-zero) allocations' `pUserData` are printed in JSON report created by
+vmaBuildStatsString() in hexadecimal form.
+
+\section allocation_names Allocation names
+
+There is alternative mode available where `pUserData` pointer is used to point to
+a null-terminated string, giving a name to the allocation. To use this mode,
+set #VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT flag in VmaAllocationCreateInfo::flags.
+Then `pUserData` passed as VmaAllocationCreateInfo::pUserData or argument to
+vmaSetAllocationUserData() must be either null or a pointer to a null-terminated string.
+The library creates internal copy of the string, so the pointer you pass doesn't need
+to be valid for whole lifetime of the allocation. You can free it after the call.
+
+\code
+VkImageCreateInfo imageInfo = ...
+
+std::string imageName = "Texture: ";
+imageName += fileName;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_USER_DATA_COPY_STRING_BIT;
+allocCreateInfo.pUserData = imageName.c_str();
+
+VkImage image;
+VmaAllocation allocation;
+vmaCreateImage(allocator, &imageInfo, &allocCreateInfo, &image, &allocation, nullptr);
+\endcode
+
+The value of `pUserData` pointer of the allocation will be different than the one
+you passed when setting allocation's name - pointing to a buffer managed
+internally that holds copy of the string.
+
+\code
+VmaAllocationInfo allocInfo;
+vmaGetAllocationInfo(allocator, allocation, &allocInfo);
+const char* imageName = (const char*)allocInfo.pUserData;
+printf("Image name: %s\n", imageName);
+\endcode
+
+That string is also printed in JSON report created by vmaBuildStatsString().
+
+\note Passing string name to VMA allocation doesn't automatically set it to the Vulkan buffer or image created with it.
+You must do it manually using an extension like VK_EXT_debug_utils, which is independent of this library.
+
+
+\page virtual_allocator Virtual allocator
+
+As an extra feature, the core allocation algorithm of the library is exposed through a simple and convenient API of "virtual allocator".
+It doesn't allocate any real GPU memory. It just keeps track of used and free regions of a "virtual block".
+You can use it to allocate your own memory or other objects, even completely unrelated to Vulkan.
+A common use case is sub-allocation of pieces of one large GPU buffer.
+
+\section virtual_allocator_creating_virtual_block Creating virtual block
+
+To use this functionality, there is no main "allocator" object.
+You don't need to have #VmaAllocator object created.
+All you need to do is to create a separate #VmaVirtualBlock object for each block of memory you want to be managed by the allocator:
+
+-# Fill in #VmaVirtualBlockCreateInfo structure.
+-# Call vmaCreateVirtualBlock(). Get new #VmaVirtualBlock object.
+
+Example:
+
+\code
+VmaVirtualBlockCreateInfo blockCreateInfo = {};
+blockCreateInfo.size = 1048576; // 1 MB
+
+VmaVirtualBlock block;
+VkResult res = vmaCreateVirtualBlock(&blockCreateInfo, &block);
+\endcode
+
+\section virtual_allocator_making_virtual_allocations Making virtual allocations
+
+#VmaVirtualBlock object contains internal data structure that keeps track of free and occupied regions
+using the same code as the main Vulkan memory allocator.
+Similarly to #VmaAllocation for standard GPU allocations, there is #VmaVirtualAllocation type
+that represents an opaque handle to an allocation withing the virtual block.
+
+In order to make such allocation:
+
+-# Fill in #VmaVirtualAllocationCreateInfo structure.
+-# Call vmaVirtualAllocate(). Get new #VmaVirtualAllocation object that represents the allocation.
+ You can also receive `VkDeviceSize offset` that was assigned to the allocation.
+
+Example:
+
+\code
+VmaVirtualAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.size = 4096; // 4 KB
+
+VmaVirtualAllocation alloc;
+VkDeviceSize offset;
+res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc, &offset);
+if(res == VK_SUCCESS)
+{
+ // Use the 4 KB of your memory starting at offset.
+}
+else
+{
+ // Allocation failed - no space for it could be found. Handle this error!
+}
+\endcode
+
+\section virtual_allocator_deallocation Deallocation
+
+When no longer needed, an allocation can be freed by calling vmaVirtualFree().
+You can only pass to this function an allocation that was previously returned by vmaVirtualAllocate()
+called for the same #VmaVirtualBlock.
+
+When whole block is no longer needed, the block object can be released by calling vmaDestroyVirtualBlock().
+All allocations must be freed before the block is destroyed, which is checked internally by an assert.
+However, if you don't want to call vmaVirtualFree() for each allocation, you can use vmaClearVirtualBlock() to free them all at once -
+a feature not available in normal Vulkan memory allocator. Example:
+
+\code
+vmaVirtualFree(block, alloc);
+vmaDestroyVirtualBlock(block);
+\endcode
+
+\section virtual_allocator_allocation_parameters Allocation parameters
+
+You can attach a custom pointer to each allocation by using vmaSetVirtualAllocationUserData().
+Its default value is null.
+It can be used to store any data that needs to be associated with that allocation - e.g. an index, a handle, or a pointer to some
+larger data structure containing more information. Example:
+
+\code
+struct CustomAllocData
+{
+ std::string m_AllocName;
+};
+CustomAllocData* allocData = new CustomAllocData();
+allocData->m_AllocName = "My allocation 1";
+vmaSetVirtualAllocationUserData(block, alloc, allocData);
+\endcode
+
+The pointer can later be fetched, along with allocation offset and size, by passing the allocation handle to function
+vmaGetVirtualAllocationInfo() and inspecting returned structure #VmaVirtualAllocationInfo.
+If you allocated a new object to be used as the custom pointer, don't forget to delete that object before freeing the allocation!
+Example:
+
+\code
+VmaVirtualAllocationInfo allocInfo;
+vmaGetVirtualAllocationInfo(block, alloc, &allocInfo);
+delete (CustomAllocData*)allocInfo.pUserData;
+
+vmaVirtualFree(block, alloc);
+\endcode
+
+\section virtual_allocator_alignment_and_units Alignment and units
+
+It feels natural to express sizes and offsets in bytes.
+If an offset of an allocation needs to be aligned to a multiply of some number (e.g. 4 bytes), you can fill optional member
+VmaVirtualAllocationCreateInfo::alignment to request it. Example:
+
+\code
+VmaVirtualAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.size = 4096; // 4 KB
+allocCreateInfo.alignment = 4; // Returned offset must be a multiply of 4 B
+
+VmaVirtualAllocation alloc;
+res = vmaVirtualAllocate(block, &allocCreateInfo, &alloc, nullptr);
+\endcode
+
+Alignments of different allocations made from one block may vary.
+However, if all alignments and sizes are always multiply of some size e.g. 4 B or `sizeof(MyDataStruct)`,
+you can express all sizes, alignments, and offsets in multiples of that size instead of individual bytes.
+It might be more convenient, but you need to make sure to use this new unit consistently in all the places:
+
+- VmaVirtualBlockCreateInfo::size
+- VmaVirtualAllocationCreateInfo::size and VmaVirtualAllocationCreateInfo::alignment
+- Using offset returned by vmaVirtualAllocate() or in VmaVirtualAllocationInfo::offset
+
+\section virtual_allocator_statistics Statistics
+
+You can obtain statistics of a virtual block using vmaGetVirtualBlockStatistics()
+(to get brief statistics that are fast to calculate)
+or vmaCalculateVirtualBlockStatistics() (to get more detailed statistics, slower to calculate).
+The functions fill structures #VmaStatistics, #VmaDetailedStatistics respectively - same as used by the normal Vulkan memory allocator.
+Example:
+
+\code
+VmaStatistics stats;
+vmaGetVirtualBlockStatistics(block, &stats);
+printf("My virtual block has %llu bytes used by %u virtual allocations\n",
+ stats.allocationBytes, stats.allocationCount);
+\endcode
+
+You can also request a full list of allocations and free regions as a string in JSON format by calling
+vmaBuildVirtualBlockStatsString().
+Returned string must be later freed using vmaFreeVirtualBlockStatsString().
+The format of this string differs from the one returned by the main Vulkan allocator, but it is similar.
+
+\section virtual_allocator_additional_considerations Additional considerations
+
+The "virtual allocator" functionality is implemented on a level of individual memory blocks.
+Keeping track of a whole collection of blocks, allocating new ones when out of free space,
+deleting empty ones, and deciding which one to try first for a new allocation must be implemented by the user.
+
+Alternative allocation algorithms are supported, just like in custom pools of the real GPU memory.
+See enum #VmaVirtualBlockCreateFlagBits to learn how to specify them (e.g. #VMA_VIRTUAL_BLOCK_CREATE_LINEAR_ALGORITHM_BIT).
+You can find their description in chapter \ref custom_memory_pools.
+Allocation strategies are also supported.
+See enum #VmaVirtualAllocationCreateFlagBits to learn how to specify them (e.g. #VMA_VIRTUAL_ALLOCATION_CREATE_STRATEGY_MIN_TIME_BIT).
+
+Following features are supported only by the allocator of the real GPU memory and not by virtual allocations:
+buffer-image granularity, `VMA_DEBUG_MARGIN`, `VMA_MIN_ALIGNMENT`.
+
+
+\page debugging_memory_usage Debugging incorrect memory usage
+
+If you suspect a bug with memory usage, like usage of uninitialized memory or
+memory being overwritten out of bounds of an allocation,
+you can use debug features of this library to verify this.
+
+\section debugging_memory_usage_initialization Memory initialization
+
+If you experience a bug with incorrect and nondeterministic data in your program and you suspect uninitialized memory to be used,
+you can enable automatic memory initialization to verify this.
+To do it, define macro `VMA_DEBUG_INITIALIZE_ALLOCATIONS` to 1.
+
+\code
+#define VMA_DEBUG_INITIALIZE_ALLOCATIONS 1
+#include "vk_mem_alloc.h"
+\endcode
+
+It makes memory of all new allocations initialized to bit pattern `0xDCDCDCDC`.
+Before an allocation is destroyed, its memory is filled with bit pattern `0xEFEFEFEF`.
+Memory is automatically mapped and unmapped if necessary.
+
+If you find these values while debugging your program, good chances are that you incorrectly
+read Vulkan memory that is allocated but not initialized, or already freed, respectively.
+
+Memory initialization works only with memory types that are `HOST_VISIBLE`.
+It works also with dedicated allocations.
+
+\section debugging_memory_usage_margins Margins
+
+By default, allocations are laid out in memory blocks next to each other if possible
+(considering required alignment, `bufferImageGranularity`, and `nonCoherentAtomSize`).
+
+![Allocations without margin](../gfx/Margins_1.png)
+
+Define macro `VMA_DEBUG_MARGIN` to some non-zero value (e.g. 16) to enforce specified
+number of bytes as a margin after every allocation.
+
+\code
+#define VMA_DEBUG_MARGIN 16
+#include "vk_mem_alloc.h"
+\endcode
+
+![Allocations with margin](../gfx/Margins_2.png)
+
+If your bug goes away after enabling margins, it means it may be caused by memory
+being overwritten outside of allocation boundaries. It is not 100% certain though.
+Change in application behavior may also be caused by different order and distribution
+of allocations across memory blocks after margins are applied.
+
+Margins work with all types of memory.
+
+Margin is applied only to allocations made out of memory blocks and not to dedicated
+allocations, which have their own memory block of specific size.
+It is thus not applied to allocations made using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT flag
+or those automatically decided to put into dedicated allocations, e.g. due to its
+large size or recommended by VK_KHR_dedicated_allocation extension.
+
+Margins appear in [JSON dump](@ref statistics_json_dump) as part of free space.
+
+Note that enabling margins increases memory usage and fragmentation.
+
+Margins do not apply to \ref virtual_allocator.
+
+\section debugging_memory_usage_corruption_detection Corruption detection
+
+You can additionally define macro `VMA_DEBUG_DETECT_CORRUPTION` to 1 to enable validation
+of contents of the margins.
+
+\code
+#define VMA_DEBUG_MARGIN 16
+#define VMA_DEBUG_DETECT_CORRUPTION 1
+#include "vk_mem_alloc.h"
+\endcode
+
+When this feature is enabled, number of bytes specified as `VMA_DEBUG_MARGIN`
+(it must be multiply of 4) after every allocation is filled with a magic number.
+This idea is also know as "canary".
+Memory is automatically mapped and unmapped if necessary.
+
+This number is validated automatically when the allocation is destroyed.
+If it is not equal to the expected value, `VMA_ASSERT()` is executed.
+It clearly means that either CPU or GPU overwritten the memory outside of boundaries of the allocation,
+which indicates a serious bug.
+
+You can also explicitly request checking margins of all allocations in all memory blocks
+that belong to specified memory types by using function vmaCheckCorruption(),
+or in memory blocks that belong to specified custom pool, by using function
+vmaCheckPoolCorruption().
+
+Margin validation (corruption detection) works only for memory types that are
+`HOST_VISIBLE` and `HOST_COHERENT`.
+
+
+\page opengl_interop OpenGL Interop
+
+VMA provides some features that help with interoperability with OpenGL.
+
+\section opengl_interop_exporting_memory Exporting memory
+
+If you want to attach `VkExportMemoryAllocateInfoKHR` structure to `pNext` chain of memory allocations made by the library:
+
+It is recommended to create \ref custom_memory_pools for such allocations.
+Define and fill in your `VkExportMemoryAllocateInfoKHR` structure and attach it to VmaPoolCreateInfo::pMemoryAllocateNext
+while creating the custom pool.
+Please note that the structure must remain alive and unchanged for the whole lifetime of the #VmaPool,
+not only while creating it, as no copy of the structure is made,
+but its original pointer is used for each allocation instead.
+
+If you want to export all memory allocated by the library from certain memory types,
+also dedicated allocations or other allocations made from default pools,
+an alternative solution is to fill in VmaAllocatorCreateInfo::pTypeExternalMemoryHandleTypes.
+It should point to an array with `VkExternalMemoryHandleTypeFlagsKHR` to be automatically passed by the library
+through `VkExportMemoryAllocateInfoKHR` on each allocation made from a specific memory type.
+Please note that new versions of the library also support dedicated allocations created in custom pools.
+
+You should not mix these two methods in a way that allows to apply both to the same memory type.
+Otherwise, `VkExportMemoryAllocateInfoKHR` structure would be attached twice to the `pNext` chain of `VkMemoryAllocateInfo`.
+
+
+\section opengl_interop_custom_alignment Custom alignment
+
+Buffers or images exported to a different API like OpenGL may require a different alignment,
+higher than the one used by the library automatically, queried from functions like `vkGetBufferMemoryRequirements`.
+To impose such alignment:
+
+It is recommended to create \ref custom_memory_pools for such allocations.
+Set VmaPoolCreateInfo::minAllocationAlignment member to the minimum alignment required for each allocation
+to be made out of this pool.
+The alignment actually used will be the maximum of this member and the alignment returned for the specific buffer or image
+from a function like `vkGetBufferMemoryRequirements`, which is called by VMA automatically.
+
+If you want to create a buffer with a specific minimum alignment out of default pools,
+use special function vmaCreateBufferWithAlignment(), which takes additional parameter `minAlignment`.
+
+Note the problem of alignment affects only resources placed inside bigger `VkDeviceMemory` blocks and not dedicated
+allocations, as these, by definition, always have alignment = 0 because the resource is bound to the beginning of its dedicated block.
+Contrary to Direct3D 12, Vulkan doesn't have a concept of alignment of the entire memory block passed on its allocation.
+
+
+\page usage_patterns Recommended usage patterns
+
+Vulkan gives great flexibility in memory allocation.
+This chapter shows the most common patterns.
+
+See also slides from talk:
+[Sawicki, Adam. Advanced Graphics Techniques Tutorial: Memory management in Vulkan and DX12. Game Developers Conference, 2018](https://www.gdcvault.com/play/1025458/Advanced-Graphics-Techniques-Tutorial-New)
+
+
+\section usage_patterns_gpu_only GPU-only resource
+
+<b>When:</b>
+Any resources that you frequently write and read on GPU,
+e.g. images used as color attachments (aka "render targets"), depth-stencil attachments,
+images/buffers used as storage image/buffer (aka "Unordered Access View (UAV)").
+
+<b>What to do:</b>
+Let the library select the optimal memory type, which will likely have `VK_MEMORY_PROPERTY_DEVICE_LOCAL_BIT`.
+
+\code
+VkImageCreateInfo imgCreateInfo = { VK_STRUCTURE_TYPE_IMAGE_CREATE_INFO };
+imgCreateInfo.imageType = VK_IMAGE_TYPE_2D;
+imgCreateInfo.extent.width = 3840;
+imgCreateInfo.extent.height = 2160;
+imgCreateInfo.extent.depth = 1;
+imgCreateInfo.mipLevels = 1;
+imgCreateInfo.arrayLayers = 1;
+imgCreateInfo.format = VK_FORMAT_R8G8B8A8_UNORM;
+imgCreateInfo.tiling = VK_IMAGE_TILING_OPTIMAL;
+imgCreateInfo.initialLayout = VK_IMAGE_LAYOUT_UNDEFINED;
+imgCreateInfo.usage = VK_IMAGE_USAGE_SAMPLED_BIT | VK_IMAGE_USAGE_COLOR_ATTACHMENT_BIT;
+imgCreateInfo.samples = VK_SAMPLE_COUNT_1_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT;
+
+VkImage img;
+VmaAllocation alloc;
+vmaCreateImage(allocator, &imgCreateInfo, &allocCreateInfo, &img, &alloc, nullptr);
+\endcode
+
+<b>Also consider:</b>
+Consider creating them as dedicated allocations using #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT,
+especially if they are large or if you plan to destroy and recreate them with different sizes
+e.g. when display resolution changes.
+Prefer to create such resources first and all other GPU resources (like textures and vertex buffers) later.
+
+
+\section usage_patterns_staging_copy_upload Staging copy for upload
+
+<b>When:</b>
+A "staging" buffer than you want to map and fill from CPU code, then use as a source od transfer
+to some GPU resource.
+
+<b>What to do:</b>
+Use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT.
+Let the library select the optimal memory type, which will always have `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`.
+
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 65536;
+bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
+
+...
+
+memcpy(allocInfo.pMappedData, myData, myDataSize);
+\endcode
+
+<b>Also consider:</b>
+You can map the allocation using vmaMapMemory() or you can create it as persistenly mapped
+using #VMA_ALLOCATION_CREATE_MAPPED_BIT, as in the example above.
+
+
+\section usage_patterns_readback Readback
+
+<b>When:</b>
+Buffers for data written by or transferred from the GPU that you want to read back on the CPU,
+e.g. results of some computations.
+
+<b>What to do:</b>
+Use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT.
+Let the library select the optimal memory type, which will always have `VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT`
+and `VK_MEMORY_PROPERTY_HOST_CACHED_BIT`.
+
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 65536;
+bufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_RANDOM_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
+
+...
+
+const float* downloadedData = (const float*)allocInfo.pMappedData;
+\endcode
+
+
+\section usage_patterns_advanced_data_uploading Advanced data uploading
+
+For resources that you frequently write on CPU via mapped pointer and
+freqnently read on GPU e.g. as a uniform buffer (also called "dynamic"), multiple options are possible:
+
+-# Easiest solution is to have one copy of the resource in `HOST_VISIBLE` memory,
+ even if it means system RAM (not `DEVICE_LOCAL`) on systems with a discrete graphics card,
+ and make the device reach out to that resource directly.
+ - Reads performed by the device will then go through PCI Express bus.
+ The performace of this access may be limited, but it may be fine depending on the size
+ of this resource (whether it is small enough to quickly end up in GPU cache) and the sparsity
+ of access.
+-# On systems with unified memory (e.g. AMD APU or Intel integrated graphics, mobile chips),
+ a memory type may be available that is both `HOST_VISIBLE` (available for mapping) and `DEVICE_LOCAL`
+ (fast to access from the GPU). Then, it is likely the best choice for such type of resource.
+-# Systems with a discrete graphics card and separate video memory may or may not expose
+ a memory type that is both `HOST_VISIBLE` and `DEVICE_LOCAL`, also known as Base Address Register (BAR).
+ If they do, it represents a piece of VRAM (or entire VRAM, if ReBAR is enabled in the motherboard BIOS)
+ that is available to CPU for mapping.
+ - Writes performed by the host to that memory go through PCI Express bus.
+ The performance of these writes may be limited, but it may be fine, especially on PCIe 4.0,
+ as long as rules of using uncached and write-combined memory are followed - only sequential writes and no reads.
+-# Finally, you may need or prefer to create a separate copy of the resource in `DEVICE_LOCAL` memory,
+ a separate "staging" copy in `HOST_VISIBLE` memory and perform an explicit transfer command between them.
+
+Thankfully, VMA offers an aid to create and use such resources in the the way optimal
+for the current Vulkan device. To help the library make the best choice,
+use flag #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT together with
+#VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT.
+It will then prefer a memory type that is both `DEVICE_LOCAL` and `HOST_VISIBLE` (integrated memory or BAR),
+but if no such memory type is available or allocation from it fails
+(PC graphics cards have only 256 MB of BAR by default, unless ReBAR is supported and enabled in BIOS),
+it will fall back to `DEVICE_LOCAL` memory for fast GPU access.
+It is then up to you to detect that the allocation ended up in a memory type that is not `HOST_VISIBLE`,
+so you need to create another "staging" allocation and perform explicit transfers.
+
+\code
+VkBufferCreateInfo bufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+bufCreateInfo.size = 65536;
+bufCreateInfo.usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT | VK_BUFFER_USAGE_TRANSFER_DST_BIT;
+
+VmaAllocationCreateInfo allocCreateInfo = {};
+allocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+allocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_HOST_ACCESS_ALLOW_TRANSFER_INSTEAD_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+VkBuffer buf;
+VmaAllocation alloc;
+VmaAllocationInfo allocInfo;
+vmaCreateBuffer(allocator, &bufCreateInfo, &allocCreateInfo, &buf, &alloc, &allocInfo);
+
+VkMemoryPropertyFlags memPropFlags;
+vmaGetAllocationMemoryProperties(allocator, alloc, &memPropFlags);
+
+if(memPropFlags & VK_MEMORY_PROPERTY_HOST_VISIBLE_BIT)
+{
+ // Allocation ended up in a mappable memory and is already mapped - write to it directly.
+
+ // [Executed in runtime]:
+ memcpy(allocInfo.pMappedData, myData, myDataSize);
+}
+else
+{
+ // Allocation ended up in a non-mappable memory - need to transfer.
+ VkBufferCreateInfo stagingBufCreateInfo = { VK_STRUCTURE_TYPE_BUFFER_CREATE_INFO };
+ stagingBufCreateInfo.size = 65536;
+ stagingBufCreateInfo.usage = VK_BUFFER_USAGE_TRANSFER_SRC_BIT;
+
+ VmaAllocationCreateInfo stagingAllocCreateInfo = {};
+ stagingAllocCreateInfo.usage = VMA_MEMORY_USAGE_AUTO;
+ stagingAllocCreateInfo.flags = VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT |
+ VMA_ALLOCATION_CREATE_MAPPED_BIT;
+
+ VkBuffer stagingBuf;
+ VmaAllocation stagingAlloc;
+ VmaAllocationInfo stagingAllocInfo;
+ vmaCreateBuffer(allocator, &stagingBufCreateInfo, &stagingAllocCreateInfo,
+ &stagingBuf, &stagingAlloc, stagingAllocInfo);
+
+ // [Executed in runtime]:
+ memcpy(stagingAllocInfo.pMappedData, myData, myDataSize);
+ VkBufferCopy bufCopy = {
+ 0, // srcOffset
+ 0, // dstOffset,
+ myDataSize); // size
+ vkCmdCopyBuffer(cmdBuf, stagingBuf, buf, 1, &bufCopy);
+}
+\endcode
+
+\section usage_patterns_other_use_cases Other use cases
+
+Here are some other, less obvious use cases and their recommended settings:
+
+- An image that is used only as transfer source and destination, but it should stay on the device,
+ as it is used to temporarily store a copy of some texture, e.g. from the current to the next frame,
+ for temporal antialiasing or other temporal effects.
+ - Use `VkImageCreateInfo::usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT`
+ - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO
+- An image that is used only as transfer source and destination, but it should be placed
+ in the system RAM despite it doesn't need to be mapped, because it serves as a "swap" copy to evict
+ least recently used textures from VRAM.
+ - Use `VkImageCreateInfo::usage = VK_IMAGE_USAGE_TRANSFER_SRC_BIT | VK_IMAGE_USAGE_TRANSFER_DST_BIT`
+ - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO_PREFER_HOST,
+ as VMA needs a hint here to differentiate from the previous case.
+- A buffer that you want to map and write from the CPU, directly read from the GPU
+ (e.g. as a uniform or vertex buffer), but you have a clear preference to place it in device or
+ host memory due to its large size.
+ - Use `VkBufferCreateInfo::usage = VK_BUFFER_USAGE_UNIFORM_BUFFER_BIT`
+ - Use VmaAllocationCreateInfo::usage = #VMA_MEMORY_USAGE_AUTO_PREFER_DEVICE or #VMA_MEMORY_USAGE_AUTO_PREFER_HOST
+ - Use VmaAllocationCreateInfo::flags = #VMA_ALLOCATION_CREATE_HOST_ACCESS_SEQUENTIAL_WRITE_BIT
+
+
+\page configuration Configuration
+
+Please check "CONFIGURATION SECTION" in the code to find macros that you can define
+before each include of this file or change directly in this file to provide
+your own implementation of basic facilities like assert, `min()` and `max()` functions,
+mutex, atomic etc.
+The library uses its own implementation of containers by default, but you can switch to using
+STL containers instead.
+
+For example, define `VMA_ASSERT(expr)` before including the library to provide
+custom implementation of the assertion, compatible with your project.
+By default it is defined to standard C `assert(expr)` in `_DEBUG` configuration
+and empty otherwise.
+
+\section config_Vulkan_functions Pointers to Vulkan functions
+
+There are multiple ways to import pointers to Vulkan functions in the library.
+In the simplest case you don't need to do anything.
+If the compilation or linking of your program or the initialization of the #VmaAllocator
+doesn't work for you, you can try to reconfigure it.
+
+First, the allocator tries to fetch pointers to Vulkan functions linked statically,
+like this:
+
+\code
+m_VulkanFunctions.vkAllocateMemory = (PFN_vkAllocateMemory)vkAllocateMemory;
+\endcode
+
+If you want to disable this feature, set configuration macro: `#define VMA_STATIC_VULKAN_FUNCTIONS 0`.
+
+Second, you can provide the pointers yourself by setting member VmaAllocatorCreateInfo::pVulkanFunctions.
+You can fetch them e.g. using functions `vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` or
+by using a helper library like [volk](https://github.com/zeux/volk).
+
+Third, VMA tries to fetch remaining pointers that are still null by calling
+`vkGetInstanceProcAddr` and `vkGetDeviceProcAddr` on its own.
+You need to only fill in VmaVulkanFunctions::vkGetInstanceProcAddr and VmaVulkanFunctions::vkGetDeviceProcAddr.
+Other pointers will be fetched automatically.
+If you want to disable this feature, set configuration macro: `#define VMA_DYNAMIC_VULKAN_FUNCTIONS 0`.
+
+Finally, all the function pointers required by the library (considering selected
+Vulkan version and enabled extensions) are checked with `VMA_ASSERT` if they are not null.
+
+
+\section custom_memory_allocator Custom host memory allocator
+
+If you use custom allocator for CPU memory rather than default operator `new`
+and `delete` from C++, you can make this library using your allocator as well
+by filling optional member VmaAllocatorCreateInfo::pAllocationCallbacks. These
+functions will be passed to Vulkan, as well as used by the library itself to
+make any CPU-side allocations.
+
+\section allocation_callbacks Device memory allocation callbacks
+
+The library makes calls to `vkAllocateMemory()` and `vkFreeMemory()` internally.
+You can setup callbacks to be informed about these calls, e.g. for the purpose
+of gathering some statistics. To do it, fill optional member
+VmaAllocatorCreateInfo::pDeviceMemoryCallbacks.
+
+\section heap_memory_limit Device heap memory limit
+
+When device memory of certain heap runs out of free space, new allocations may
+fail (returning error code) or they may succeed, silently pushing some existing_
+memory blocks from GPU VRAM to system RAM (which degrades performance). This
+behavior is implementation-dependent - it depends on GPU vendor and graphics
+driver.
+
+On AMD cards it can be controlled while creating Vulkan device object by using
+VK_AMD_memory_overallocation_behavior extension, if available.
+
+Alternatively, if you want to test how your program behaves with limited amount of Vulkan device
+memory available without switching your graphics card to one that really has
+smaller VRAM, you can use a feature of this library intended for this purpose.
+To do it, fill optional member VmaAllocatorCreateInfo::pHeapSizeLimit.
+
+
+
+\page vk_khr_dedicated_allocation VK_KHR_dedicated_allocation
+
+VK_KHR_dedicated_allocation is a Vulkan extension which can be used to improve
+performance on some GPUs. It augments Vulkan API with possibility to query
+driver whether it prefers particular buffer or image to have its own, dedicated
+allocation (separate `VkDeviceMemory` block) for better efficiency - to be able
+to do some internal optimizations. The extension is supported by this library.
+It will be used automatically when enabled.
+
+It has been promoted to core Vulkan 1.1, so if you use eligible Vulkan version
+and inform VMA about it by setting VmaAllocatorCreateInfo::vulkanApiVersion,
+you are all set.
+
+Otherwise, if you want to use it as an extension:
+
+1 . When creating Vulkan device, check if following 2 device extensions are
+supported (call `vkEnumerateDeviceExtensionProperties()`).
+If yes, enable them (fill `VkDeviceCreateInfo::ppEnabledExtensionNames`).
+
+- VK_KHR_get_memory_requirements2
+- VK_KHR_dedicated_allocation
+
+If you enabled these extensions:
+
+2 . Use #VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT flag when creating
+your #VmaAllocator to inform the library that you enabled required extensions
+and you want the library to use them.
+
+\code
+allocatorInfo.flags |= VMA_ALLOCATOR_CREATE_KHR_DEDICATED_ALLOCATION_BIT;
+
+vmaCreateAllocator(&allocatorInfo, &allocator);
+\endcode
+
+That is all. The extension will be automatically used whenever you create a
+buffer using vmaCreateBuffer() or image using vmaCreateImage().
+
+When using the extension together with Vulkan Validation Layer, you will receive
+warnings like this:
+
+_vkBindBufferMemory(): Binding memory to buffer 0x33 but vkGetBufferMemoryRequirements() has not been called on that buffer._
+
+It is OK, you should just ignore it. It happens because you use function
+`vkGetBufferMemoryRequirements2KHR()` instead of standard
+`vkGetBufferMemoryRequirements()`, while the validation layer seems to be
+unaware of it.
+
+To learn more about this extension, see:
+
+- [VK_KHR_dedicated_allocation in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap50.html#VK_KHR_dedicated_allocation)
+- [VK_KHR_dedicated_allocation unofficial manual](http://asawicki.info/articles/VK_KHR_dedicated_allocation.php5)
+
+
+
+\page vk_amd_device_coherent_memory VK_AMD_device_coherent_memory
+
+VK_AMD_device_coherent_memory is a device extension that enables access to
+additional memory types with `VK_MEMORY_PROPERTY_DEVICE_COHERENT_BIT_AMD` and
+`VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` flag. It is useful mostly for
+allocation of buffers intended for writing "breadcrumb markers" in between passes
+or draw calls, which in turn are useful for debugging GPU crash/hang/TDR cases.
+
+When the extension is available but has not been enabled, Vulkan physical device
+still exposes those memory types, but their usage is forbidden. VMA automatically
+takes care of that - it returns `VK_ERROR_FEATURE_NOT_PRESENT` when an attempt
+to allocate memory of such type is made.
+
+If you want to use this extension in connection with VMA, follow these steps:
+
+\section vk_amd_device_coherent_memory_initialization Initialization
+
+1) Call `vkEnumerateDeviceExtensionProperties` for the physical device.
+Check if the extension is supported - if returned array of `VkExtensionProperties` contains "VK_AMD_device_coherent_memory".
+
+2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`.
+Attach additional structure `VkPhysicalDeviceCoherentMemoryFeaturesAMD` to `VkPhysicalDeviceFeatures2::pNext` to be returned.
+Check if the device feature is really supported - check if `VkPhysicalDeviceCoherentMemoryFeaturesAMD::deviceCoherentMemory` is true.
+
+3) While creating device with `vkCreateDevice`, enable this extension - add "VK_AMD_device_coherent_memory"
+to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`.
+
+4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`.
+Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`.
+Enable this device feature - attach additional structure `VkPhysicalDeviceCoherentMemoryFeaturesAMD` to
+`VkPhysicalDeviceFeatures2::pNext` and set its member `deviceCoherentMemory` to `VK_TRUE`.
+
+5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you
+have enabled this extension and feature - add #VMA_ALLOCATOR_CREATE_AMD_DEVICE_COHERENT_MEMORY_BIT
+to VmaAllocatorCreateInfo::flags.
+
+\section vk_amd_device_coherent_memory_usage Usage
+
+After following steps described above, you can create VMA allocations and custom pools
+out of the special `DEVICE_COHERENT` and `DEVICE_UNCACHED` memory types on eligible
+devices. There are multiple ways to do it, for example:
+
+- You can request or prefer to allocate out of such memory types by adding
+ `VK_MEMORY_PROPERTY_DEVICE_UNCACHED_BIT_AMD` to VmaAllocationCreateInfo::requiredFlags
+ or VmaAllocationCreateInfo::preferredFlags. Those flags can be freely mixed with
+ other ways of \ref choosing_memory_type, like setting VmaAllocationCreateInfo::usage.
+- If you manually found memory type index to use for this purpose, force allocation
+ from this specific index by setting VmaAllocationCreateInfo::memoryTypeBits `= 1u << index`.
+
+\section vk_amd_device_coherent_memory_more_information More information
+
+To learn more about this extension, see [VK_AMD_device_coherent_memory in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/man/html/VK_AMD_device_coherent_memory.html)
+
+Example use of this extension can be found in the code of the sample and test suite
+accompanying this library.
+
+
+\page enabling_buffer_device_address Enabling buffer device address
+
+Device extension VK_KHR_buffer_device_address
+allow to fetch raw GPU pointer to a buffer and pass it for usage in a shader code.
+It has been promoted to core Vulkan 1.2.
+
+If you want to use this feature in connection with VMA, follow these steps:
+
+\section enabling_buffer_device_address_initialization Initialization
+
+1) (For Vulkan version < 1.2) Call `vkEnumerateDeviceExtensionProperties` for the physical device.
+Check if the extension is supported - if returned array of `VkExtensionProperties` contains
+"VK_KHR_buffer_device_address".
+
+2) Call `vkGetPhysicalDeviceFeatures2` for the physical device instead of old `vkGetPhysicalDeviceFeatures`.
+Attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to `VkPhysicalDeviceFeatures2::pNext` to be returned.
+Check if the device feature is really supported - check if `VkPhysicalDeviceBufferDeviceAddressFeatures::bufferDeviceAddress` is true.
+
+3) (For Vulkan version < 1.2) While creating device with `vkCreateDevice`, enable this extension - add
+"VK_KHR_buffer_device_address" to the list passed as `VkDeviceCreateInfo::ppEnabledExtensionNames`.
+
+4) While creating the device, also don't set `VkDeviceCreateInfo::pEnabledFeatures`.
+Fill in `VkPhysicalDeviceFeatures2` structure instead and pass it as `VkDeviceCreateInfo::pNext`.
+Enable this device feature - attach additional structure `VkPhysicalDeviceBufferDeviceAddressFeatures*` to
+`VkPhysicalDeviceFeatures2::pNext` and set its member `bufferDeviceAddress` to `VK_TRUE`.
+
+5) While creating #VmaAllocator with vmaCreateAllocator() inform VMA that you
+have enabled this feature - add #VMA_ALLOCATOR_CREATE_BUFFER_DEVICE_ADDRESS_BIT
+to VmaAllocatorCreateInfo::flags.
+
+\section enabling_buffer_device_address_usage Usage
+
+After following steps described above, you can create buffers with `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*` using VMA.
+The library automatically adds `VK_MEMORY_ALLOCATE_DEVICE_ADDRESS_BIT*` to
+allocated memory blocks wherever it might be needed.
+
+Please note that the library supports only `VK_BUFFER_USAGE_SHADER_DEVICE_ADDRESS_BIT*`.
+The second part of this functionality related to "capture and replay" is not supported,
+as it is intended for usage in debugging tools like RenderDoc, not in everyday Vulkan usage.
+
+\section enabling_buffer_device_address_more_information More information
+
+To learn more about this extension, see [VK_KHR_buffer_device_address in Vulkan specification](https://www.khronos.org/registry/vulkan/specs/1.2-extensions/html/chap46.html#VK_KHR_buffer_device_address)
+
+Example use of this extension can be found in the code of the sample and test suite
+accompanying this library.
+
+\page general_considerations General considerations
+
+\section general_considerations_thread_safety Thread safety
+
+- The library has no global state, so separate #VmaAllocator objects can be used
+ independently.
+ There should be no need to create multiple such objects though - one per `VkDevice` is enough.
+- By default, all calls to functions that take #VmaAllocator as first parameter
+ are safe to call from multiple threads simultaneously because they are
+ synchronized internally when needed.
+ This includes allocation and deallocation from default memory pool, as well as custom #VmaPool.
+- When the allocator is created with #VMA_ALLOCATOR_CREATE_EXTERNALLY_SYNCHRONIZED_BIT
+ flag, calls to functions that take such #VmaAllocator object must be
+ synchronized externally.
+- Access to a #VmaAllocation object must be externally synchronized. For example,
+ you must not call vmaGetAllocationInfo() and vmaMapMemory() from different
+ threads at the same time if you pass the same #VmaAllocation object to these
+ functions.
+- #VmaVirtualBlock is not safe to be used from multiple threads simultaneously.
+
+\section general_considerations_validation_layer_warnings Validation layer warnings
+
+When using this library, you can meet following types of warnings issued by
+Vulkan validation layer. They don't necessarily indicate a bug, so you may need
+to just ignore them.
+
+- *vkBindBufferMemory(): Binding memory to buffer 0xeb8e4 but vkGetBufferMemoryRequirements() has not been called on that buffer.*
+ - It happens when VK_KHR_dedicated_allocation extension is enabled.
+ `vkGetBufferMemoryRequirements2KHR` function is used instead, while validation layer seems to be unaware of it.
+- *Mapping an image with layout VK_IMAGE_LAYOUT_DEPTH_STENCIL_ATTACHMENT_OPTIMAL can result in undefined behavior if this memory is used by the device. Only GENERAL or PREINITIALIZED should be used.*
+ - It happens when you map a buffer or image, because the library maps entire
+ `VkDeviceMemory` block, where different types of images and buffers may end
+ up together, especially on GPUs with unified memory like Intel.
+- *Non-linear image 0xebc91 is aliased with linear buffer 0xeb8e4 which may indicate a bug.*
+ - It may happen when you use [defragmentation](@ref defragmentation).
+
+\section general_considerations_allocation_algorithm Allocation algorithm
+
+The library uses following algorithm for allocation, in order:
+
+-# Try to find free range of memory in existing blocks.
+-# If failed, try to create a new block of `VkDeviceMemory`, with preferred block size.
+-# If failed, try to create such block with size / 2, size / 4, size / 8.
+-# If failed, try to allocate separate `VkDeviceMemory` for this allocation,
+ just like when you use #VMA_ALLOCATION_CREATE_DEDICATED_MEMORY_BIT.
+-# If failed, choose other memory type that meets the requirements specified in
+ VmaAllocationCreateInfo and go to point 1.
+-# If failed, return `VK_ERROR_OUT_OF_DEVICE_MEMORY`.
+
+\section general_considerations_features_not_supported Features not supported
+
+Features deliberately excluded from the scope of this library:
+
+-# **Data transfer.** Uploading (streaming) and downloading data of buffers and images
+ between CPU and GPU memory and related synchronization is responsibility of the user.
+ Defining some "texture" object that would automatically stream its data from a
+ staging copy in CPU memory to GPU memory would rather be a feature of another,
+ higher-level library implemented on top of VMA.
+ VMA doesn't record any commands to a `VkCommandBuffer`. It just allocates memory.
+-# **Recreation of buffers and images.** Although the library has functions for
+ buffer and image creation: vmaCreateBuffer(), vmaCreateImage(), you need to
+ recreate these objects yourself after defragmentation. That is because the big
+ structures `VkBufferCreateInfo`, `VkImageCreateInfo` are not stored in
+ #VmaAllocation object.
+-# **Handling CPU memory allocation failures.** When dynamically creating small C++
+ objects in CPU memory (not Vulkan memory), allocation failures are not checked
+ and handled gracefully, because that would complicate code significantly and
+ is usually not needed in desktop PC applications anyway.
+ Success of an allocation is just checked with an assert.
+-# **Code free of any compiler warnings.** Maintaining the library to compile and
+ work correctly on so many different platforms is hard enough. Being free of
+ any warnings, on any version of any compiler, is simply not feasible.
+ There are many preprocessor macros that make some variables unused, function parameters unreferenced,
+ or conditional expressions constant in some configurations.
+ The code of this library should not be bigger or more complicated just to silence these warnings.
+ It is recommended to disable such warnings instead.
+-# This is a C++ library with C interface. **Bindings or ports to any other programming languages** are welcome as external projects but
+ are not going to be included into this repository.
+*/